其他分享
首页 > 其他分享> > matlab数字图像处理(3)——数字形态学处理

matlab数字图像处理(3)——数字形态学处理

作者:互联网

数字形态学处理

(1)请用Matlab 编写程序实现利用1个半径为r/4的圆形结构元素膨胀1个半径为r的圆 (自定义r)。需要提供程序,原图,处理后的图像,并分析处理后图像的变化。

【代码】

%生成圆(r=200)
n=1000;           % n为画布大小
r=240;           % r为圆的半径
A=2*ones(n);
for x=1:n
    for y=1:n
        if (x-n/2).^2+(y-n/2).^2<=r.^2   %判断坐标点是不是在半径为r的圆内 
            A(x,y)=255;             %在圆内就赋值255
        end
    end
end
A=uint8(A);
subplot(1,2,1),imshow(A),title('原始图像');

B=strel('disk',60);
dilated_50=imdilate(A,B);
subplot(1,2,2),imshow(dilated_50),title('膨胀:disk r/4');

【结果】

【分析】

原始图形是半径为240像素的圆,画布大小为1000像素,用于膨胀的结构体为半径为60像素的圆。处理之后,中心圆的半径增大。因为原图像为圆形,使用imdilate函数对原始图像进行膨胀,仅仅导致圆的半径增大,但如果是对如之前操作中的断裂的图,膨胀处理可以将断裂开的目标物进行合并,便于对其整体的提取。

(2)腐蚀和闭运算有广泛的用途。请给cameraman.jpg加上椒盐噪声,然后自选结构元素和形态学处理方法对其进行平滑去噪,并和中值滤波做对比,分析结果。(从整体和局部来分析)

使用腐蚀膨胀去除噪声

【代码】

F=imread('cameraman.jpg');
subplot(2,2,1),imshow(F);title('原图');

Fn=imnoise(F,'salt & pepper',0.05);
subplot(2,2,2),imshow(Fn);title('椒盐噪声');

se_1=strel('disk',1);
erodeI1=imerode(Fn,se_1);
dilatedI1=imdilate(erodeI1,se_1);
subplot(2,2,3),imshow(dilatedI1),title('腐蚀膨胀');

se_1=strel('disk',1);

dilatedI1=imdilate(Fn,se_1);
erodeI1=imerode(dilatedI1,se_1);
subplot(2,2,4),imshow(erodeI1),title('膨胀腐蚀');

【结果】

【分析】

通过对比可以发现,腐蚀和膨胀结合能起到减少椒盐噪声的效果,但是效果较差。另外,先腐蚀后膨胀和先膨胀后腐蚀的效果也不一样,感觉前者消除亮度较高的椒盐噪声效果好,但是对亮度较低的椒盐噪声抑制效果较差,而后者相反,这是由于腐蚀和膨胀的性质决定的。腐蚀的作用实质上就是让暗的区域变大,而膨胀的作用实质上就是让亮的区域变大。

使用开闭运算去除椒盐噪声

【代码】

F=imread('cameraman.jpg');
subplot(2,2,1),imshow(F);title('原图');

Fn=imnoise(F,'salt & pepper',0.05);
subplot(2,2,2),imshow(Fn);title('椒盐噪声');

se_1=strel('disk',1);
afterOpening1=imopen(Fn,se_1);
closeBW1=imclose(afterOpening1,se_1);
subplot(2,2,3),imshow(closeBW1),title('开闭运算平滑');

G=medianfilter(Fn,3);
subplot(2,2,4),imshow(G);
title('中值滤波');

【结果】

【分析】

通过对比上图中的两种处理方式得到的结果可以发现,开闭运算也能起到滤波的作用,且相较之前的两种方法效果较好。因为开闭运算实际上是结合了之前的两种方法。从整体上看,开闭运算和中值滤波的效果差不多,都能起到消除图中椒盐噪声的效果,但是细节部分(如照相机的三脚架靠近人的那一侧),开闭运算处理后的结果出现了锯齿,相较而言,中值滤波处理得更细致。

【思考】

实际上可以发现,开闭运算的实质也是一种滤波,是基于几何运算的滤波器。

开闭运算中选取的结构元素圆的半径不同,会导致开闭运算处理图像的结果不同,所以在本次实验中有此疑问:结构元素半径增大会对结果产生怎样的影响?采用不同disk对图像进行滤波结果如下:

【代码】

F=imread('cameraman.jpg');
Fn=imnoise(F,'salt & pepper',0.05);

se_3=strel('disk',3);
afterOpening1=imopen(Fn,se_3);
closeBW1=imclose(afterOpening1,se_3);
subplot(1,2,1),imshow(closeBW1),title('disk 3');

se_5=strel('disk',5);
afterOpening1=imopen(Fn,se_5);
closeBW1=imclose(afterOpening1,se_5);
subplot(1,2,2),imshow(closeBW1),title('disk 5');

代码运行结果如下:

 

发现结构元素半径越大,图像越模糊,甚至可能会导致图像中的图形扭曲或者错位(如disk 5)

【总结】

将几种处理方式的结果放在一起来看可以得出结论:从整体上看,三种方法都能起到抑制噪声的效果,但是从细节来评判其好坏可以发现,中值滤波的效果是最好的,如在人的轮廓、照相机三脚架的轮廓上可以看出,中值滤波后的结果中其轮廓线是规则而完整的,但是在开闭运算和腐蚀膨胀中,两幅图的轮廓线均有部分是不规则的。

 

标签:subplot,title,数字图像处理,imshow,形态学,matlab,se,disk,Fn
来源: https://www.cnblogs.com/tangjielin/p/16177159.html