实验七:二值图像处理
实验目的:验证二值图像处理算法
实验设备与软件:硬件:P4微机 软件:Matlab软件 实验原理:
1、 二值图像的腐蚀处理
腐蚀是一种消除连通域的边界点,使边界向内收缩的处理,可以使粘连的物体分开。 本实验规定目标物为黑色,像素值为0;背景为白色,像素值为1。算法描述如下: 扫描整个图像,处理每一个像素值为0的目标点:将结构元素的原点移到该点,判断该结构元素所覆盖的所有像素是否存在灰度值为1的像素?如果是,则将该像素值改为1;如果不是,则保持该像素值不变。
结构元素S为: S???10?,原点位于左上角元素处。 ??11?function Y=erode(X) [m,n]=size(X); S=[1 0;1 1]; Y=ones(m,n); O=zeros(2); for i=1:m-1 for j=1:n-1
if X(i:i+1,j:j+1).*S==O Y(i,j)=0; else Y(i,j)=1; end end end
2、二值图像的膨胀处理
clc,clear
I=imread('rice.bmp'); J=erode(erode(erode(I))); subplot(1,2,1) imshow(I) subplot(1,2,2) imshow(J)
imwrite(J,'三次腐蚀图像.bmp')
膨胀是使目标物边界向外部扩张的处理,为此需要将目标边界附近的背景点合并到该目标物中。膨胀处理可以使断开的目标物重新粘合在一起。
本实验规定目标物为黑色,像素值为0;背景为白色,像素值为1。算法描述如下: 扫描整个图像,处理每一个像素值为1的背景点:将结构元素的原点移到该点,判断该结构元素所覆盖的所有像素是否存在灰度值为0的像素?如果是,则将该像素值改为0;如果不是,则保持该像素值不变;
结构元素S为: S???10?,原点位于左上角元素处。 ??11?function Y=dilate(X)
[m,n]=size(X);
S=[1 0;1 1]; Y=ones(m,n); for i=1:m-1 for j=1:n-1
if X(i:i+1,j:j+1).*S==S Y(i,j)=1; else Y(i,j)=0; end end end clc,clear
I=imread('seal.bmp'); J=dilate(dilate(dilate(I))); figure(2)
subplot(1,2,1) imshow(I)
subplot(1,2,2) imshow(J)
imwrite(J,'三次膨胀图像.bmp')
3、二值图像的开运算与闭运算
开运算是对原图像先进行腐蚀处理,然后再进行膨胀的处理。闭运算是对原图像先进行膨胀处理,然后再进行腐蚀的处理。开运算可以在分离粘连目标物的同时,基本保持原目标物面积不变;闭运算可以在合并断裂目标物的同时,基本保持原目标物面积不变。
为了加强分离粘连物、合并断裂物的效果,开运算可以先进行N次腐蚀,再进行N次膨胀;对于闭运算可以先进行N次膨胀,再进行N次腐蚀。
clc,clear
I=imread('rice.bmp');
J=erode(erode(erode(erode(erode(I))))); J=dilate(dilate(dilate(dilate(dilate(J))))); subplot(1,2,1) imshow(I) subplot(1,2,2) imshow(J)
imwrite(J,'开运算图像.bmp')
clc,clear
I=imread('seal.bmp'); J=dilate(dilate(I)); J=erode(erode(J)); subplot(1,2,1)
imshow(I) subplot(1,2,2) imshow(J)
imwrite(J,'闭运算图像.bmp')
实验内容:
(1)建立matlab函数文件erode.m,用于对图像进行一次腐蚀处理,函数定义行为:function Y=erode(X)
建立matlab函数文件dilate.m,用于对图像进行一次膨胀处理,函数定义行为:function Y=dilate(X)
(2)调用函数文件erode.m,对二值图像rice.bmp连续进行三次腐蚀处理。显示处理后的图像,并将其在当前路径下保存为“三次腐蚀图像.bmp”。调用函数文件dilate.m,对二值图像seal.bmp其连续进行三次膨胀处理。显示处理后的图像,并将其在当前路径下保存为“三次膨胀图像.bmp”。
(3)对图像rice.bmp进行如下形式的开运算:先进行5次腐蚀,再进行5次膨胀。将处理后的图像保存为“开运算图像.bmp”。然后对图像seal.bmp进行如下形式的闭运算:先进行2次膨胀,再进行2次腐蚀。将处理后的图像保存为“闭运算图像.bmp”。
注:(2)与(3)的每个实验内容需要另建函数文件进行编程。
实验八:彩色图像处理
实验内容(1)为必做;实验内容(2)为选做。
实验目的:通过Matlab软件编程,掌握彩色图像处理基本方法。 实验设备与软件:硬件:P4微机;软件:Matlab软件 实验内容:
(1)对于有明显色偏的彩色图像,通过Matlab编程,对其进行色彩平衡处理。 (2)对椒盐噪声污染的彩色图像,通过Matlab编程,对其进行中值滤波处理。 实验原理与要求:
(1) 采用色彩平衡处理方法纠正彩色图像的色偏现象
有色偏的图像画面中,色彩发生了偏离。通常会导致本来应当为灰色的像素点却带上某种颜色。我们根据这种像素点色偏程度,校正整幅图像色彩。
? 在图像中找到一个本应为灰色的像素点,设其发生色偏后的颜色值为(R,G,B)。 ? 按照下式统计该像素的亮度值:Y?0.299?R?0.587?G?0.114?B ? 计算色彩平衡的校正参数: KR?YYY,KG?, KB? RGB? 对图像每个像素的三个颜色分量按下式重新计算,实现对整幅图像进行色彩平衡处理:
R*?KR?R,G*?KG?GB*?KB?B
采用matlab编程,对给定的图像stone.jpg进行色彩平衡处理。假设已知位于图像中石头上的某像素点的坐标为(148,206),被认为应当为灰色。由于图像发生了色偏,该像素有明显的偏红色现象。因此通过色彩平衡处理之后,我们期待图像中的石头能够得以恢复其灰色特征。将处理后的图像取名为“色彩平衡图像”,在当前路径下保存为bmp格式。
1. clc,clear
14. end
2. I=imread('stone.jpg');
15. end
3. [m,n,k]=size(I);
16. J=uint8(J);
4. J=zeros(m,n,k);
17. imshow(J),imwrite(J,'色彩平衡图
5. I=double(I);
像.bmp') 6. J=double(J);
7. R=I(148,206,1); 8. G=I(148,206,2); 9. B=I(148,206,3);
10. Y=0.299*R+0.587*G+0.114*B; 11. k1=Y/R,k2=Y/G,k3=Y/B; 12. for i=1:m 13. for j=1:n
J(i,j,1)=I(i,j,1)*k1; J(i,j,2)=I(i,j,2)*k2; J(i,j,3)=I(i,j,3)*k3;
(2) 采用中值滤波算法抑制彩色图像中的椒盐噪声。
中值滤波方法对椒盐噪声的抑制效果较好。中值滤波原理如下:对于待处理的像素,如果采用3×3的模板,则我们可以让该像素与其周围的8个相邻像素一起按照灰度值的大小进行排序,取排列在中间的灰度值作为待处理像素新的灰度值。采用matlab编程,对椒盐噪声污染的彩色图像capsicum.bmp进行中值滤波处理。将处理后的图像取名为“中值滤波图像”,在当前路径下保存为bmp格式。相对灰度图像处理方法而言,处理彩色图像的方法是将同样的操作处理在R,G, B三个分量上分别进行。
1.
2. 3. 4. 5. 6. 7.
clc,clear end I=imread('capsicum.bmp'); I=uint8(I); [m,n,k]=size(I); J=uint8(J); J=ones(m,n,k); imshow(J) I=double(I); imwrite(J,'中值滤波图像.bmp') J=double(J); for i=2:m-1 for j=2:n-1
J(i,j,1)=median(median(I(i-1:i+1,j-1:j+1,1))); J(i,j,2)=median(median(I(i-1:i+1,j-1:j+1,2))); J(i,j,3)=median(median(I(i-1:i+1,j-1:j+1,3))); end
特别提示:
(1)彩色图像的数据结构:
读取图像文件到数据数组I:I=imread(‘FILENAME. FMT’) ;
如果图像文件为彩色图像格式,则I为m×n×3的数组,其中I(: ,: ,1)表示红色分量的矩阵,其中I(: ,: ,2)表示绿色分量的矩阵,其中I(: ,: ,3)表示篮色分量的矩阵。
如果图像文件为灰度图像格式,则I为m×n的矩阵。 (2)获取图像数据的数组的大小:
对于灰度图像:[m, n]=size(I); m为图像的总行数,n为图像的总列数
对于彩色图像:[m, n, k]=size(I); m为图像的总行数,n为图像的总列数,k为描述彩色的分量的个数,一般为3。
(3)处理彩色图像的每个像素的每个颜色分量: for i=1:m for j=1:n for k=1:3
J(i,j,k) =…….. I(i,j,k) end end end