ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-04-22 00:34:58  阅读:289  来源: 互联网

标签:subplot title 数字图像处理 imshow 形态学 matlab se disk Fn


数字形态学处理

(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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有