数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)

简介: 数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)

一、实验目的


1 了解数学形态学的基本思想和方法;

2 掌握形态学基本运算

3 通过对图像的腐蚀和膨胀效果加深理解两种形态学处理方法的功能及应用。


二、实验仪器


安装有MATLAB软件的计算机


三、实验原理


数学形态学是根据形态学概念发展而来具有严格数学理论基础的科学。最基本的形态学运算有:膨胀、腐蚀、开、闭。


1. 结构元素:


指有一定形状的比较小的图像块。在二值形态学中,其像素值为1,且要指定坐标原点。

生成函数:se=strel(shape, parameter)

SE = strel(‘arbitrary’,NHOOD)

SE = strel(‘ball’,R,H) 椭球型

SE = strel(‘diamond’,R) 菱形(钻石型)

SE = strel(‘disk’,R) 圆形

SE = strel(‘line’,LEN,DEG) 线型

SE = strel(‘octagon’,R) 八边形

SE = strel(‘rectangle’,[M N]) 矩形

SE = strel(‘square’,W) 方型

常用举例:

se_disk =strel(‘disk’,5,4) ; %创建一个指定半径5的平面圆盘形的结构元素。这里R必须是非负整数。

se_diamond =strel(‘diamond’,4); % 创建一个菱形的结构元素,4是从结构化元素原点到四个顶点的距离,必须为非负整数。

se_octagon=strel(‘octagon’,3); % 创建一个八边形的结构元素,参数为3的倍数

se=strel(‘rectangle’,[2 5]); % 创建一个25的矩形结构元素

se1 =strel(‘square’,11); % 创建一个长度为1111的方形结构元素

se_line =strel(‘line’,6,45) ; % 为构造的线性结构元素,6为长度(size),45为角度

SE =strel(‘ball’,R,H,N); % 创建一个空间椭球状的结构元素,其X-Y平面半径为R,高度为H。R必须为非负整数,H是一个实数。N必须为一个非负偶数,当N>0时此球形结构元素由一系列空间线段结构元素来近似;当N=0时不需要近似,结构化元素的成员由所有中心距圆点>R的元素组成,相应的高度值可由R/H指定的椭球中提取。如果N未指定,缺省值8。

SE =strel(‘arbitrary’,NHOOD) :

创建一个指定领域的平面结构化元素。NHOOD是一个包含1/0的矩阵;1的位置定义了领域的形态学操作。NHOOD的中心就是它的中心元素,位置在FLOOR((SIZE(NHOOD) + 1)/2)。你也可以忽略参数串’arbitrary’而只使用strel(NHOOD)。

例如:nhood=[1 0;1 1]; A=strel(nhood);


2. 腐蚀运算:


设A为原图像,B为结构元素,则原图像A被结构元素B腐蚀可定义为:


0a2653c851af460fa595bd959398a8f1.png


腐蚀运算的结果不仅与结构元素的形状(矩形、圆形、菱形等)选取有关,而且还与原点位置的选取有关。

函数:A2=imerode(A, B)

说明:B是结构元(由0和1组成的矩阵)。


3. 膨胀运算:


设A为原图像,B为结构元素,则原图像A被结构元素B膨胀可定义为:


0eacb84100b54626af849e6b562bf92a.png


当原图像不变,但所给的结构元素的形状改变时;或结构元素的形状不变,而其原点位置改变时,膨胀运算的结果会发生改变。

函数:A2=imdilate(A, B)

说明:B是结构元(由0和1组成的矩阵)。

腐蚀和膨胀的对偶性:

对目标图像的膨胀运算,相当于对图像背景的腐蚀运算操作;对目标图像的腐蚀运算,相当于对图像背景的膨胀运算操作。


4. 开运算:


使用同一个结构元素对目标图像先进行腐蚀运算,然后再进行膨胀运算称为开运算。

结构元素B对目标图像A的开运算定义为:


2d65d23f6d4748949b924e4057485923.png


函数:C = imopen(A, B);


5. 闭运算:


使用同一个结构元素对目标图像先进行膨胀运算,然后再进行腐蚀运算称为闭运算。

结构元素B对目标图像A的闭运算定义为:


2e9b90b2ca334476abebe75bafe6eeaa.png


函数:C = imclose(A,B)


四、实验内容:


1. 形态学图像处理用于图像边界提取


测试图像:circles.png

读取文件‘circles.png’,分别用半径为1和半径为4的圆盘形状的结构元素对其进行腐蚀和膨胀运算,然后用膨胀图像减去腐蚀图像,得到新图像。编写程序并运行。

问题:观察、对比两个半径的运行效果图,总结“膨胀图像减去腐蚀图像”的功能,并解释半径为1和半径为4处理的最终图像效果有何不同,尝试解释其原因。

半径为4的图像边界比半径为1的图像边界要粗一些。原因:当半径为1的进行处理时,白色的膨胀范围较小,并且白色的腐蚀程度也较小,因此,两者相减得到的结果的白色边界不会差距太大。而半径为4的膨胀范围较大,腐蚀程度也较大,因此两者相减之后,白色边界会很粗。


2.数学形态学用于图像的噪点去除


测试图像:saturn.png

对‘satrun.png’图像加入椒盐噪声(imnoise函数),分别用腐蚀、膨胀、开运算、闭运算对其进行处理并显示处理后图像。编写程序并运行。

问题:


(1) 从腐蚀和膨胀的原理解释为什么可以去除黑白噪点。


腐蚀是对1的数量减少,而1在二值图中呈现白色,因此腐蚀后,球外的白点都去了,但是星球上的点反而更加密集,而膨胀是把1的数量变多,因此膨胀后球外点变多,而球内点变少。


(2) 对处理后的四幅图像进行对比,对四种运算的功能分别进行总结说明,尝试解释腐蚀和开运算处理效果的不同、膨胀和闭运算处理效果的不同分别是如何造成的。


膨胀,1的数量变多;腐蚀1的数量变少;开运算1的数量先减少再变多;闭运算1的的数量先减少再变多。开运算比腐蚀多一个膨胀步骤,因此将那些腐蚀后将残留的1进行膨胀,从而白点变多,白色范围加大。闭运算比膨胀多一个腐蚀步骤,因此将那些膨胀后将多余的1进行腐蚀,从而白点变少,白色范围缩小。


五、撰写实验报告


对每个实验内容获得相应的实验结果并给出相应分析和评价。


六、结论


可以是对某些MATLAB函数如何使用的认识,也可以是实验中遇到的问题的分析和总结。


七、实验代码


%%
I = imread('circles.png');
I = im2double(I);
thresh = graythresh(I);
I2 = im2bw(I,thresh);
%生成1和4为半径的圆盘结构
SE_1 = strel('disk',1);
SE_4 = strel('disk',4);
% 腐蚀与膨胀
E_1 = imerode(I2,SE_1);
E_4 = imerode(I2,SE_4);
D_1 = imdilate(I2,SE_1);
D_4 = imdilate(I2,SE_4);
% 膨胀 - 腐蚀
A_1 = D_1 - E_1;
A_4 = D_4 - E_4;
subplot(131);imshow(I2);title('原二值图');
subplot(132);imshow(A_1);title('半径为1');
subplot(133);imshow(A_4);title('半径为4');
%% 
I = imread('saturn.png');
I = im2double(I);
thresh = graythresh(I);
I2 = im2bw(I,thresh);
I2 = im2double(I2);
S = imnoise(I2,'salt & pepper',0.005);
% 腐蚀、膨胀、开运算、闭运算
SE_4 = strel('disk',4);
E = imerode(S,SE_4);
D = imdilate(S,SE_4);
O = imopen(S,SE_4);
C = imclose(S,SE_4);
subplot(131);imshow(S);title('原图像');
subplot(243);imshow(E);title('腐蚀');
subplot(244);imshow(D);title('膨胀');
subplot(247);imshow(O);title('开运算');
subplot(248);imshow(C);title('闭运算');


八、实验截图


0a2653c851af460fa595bd959398a8f1.png0eacb84100b54626af849e6b562bf92a.png


九、项目-----汉字视力表


本项目是大一参加数学建模时,在暑假集训时候写的。

内容介绍,给你汉字库,进行汉字相似度的匹配,比如在一堆千里面找一个干字

该项目我上传到github上了,需要的自取

链接:汉字视力表


十、总结


对于大三上的一个数字图像处理的实验我也就到这里结束了,在这里非常感谢张艳华张老师的教导,让我受益匪浅,其实本人对于数字图像处理时自从

大一吧,首先通过数模集训让我对matlab的掌握有了一个熟练的掌握,之后就是大一暑假集训时做过的这个项目让我对用matlab作图像处理有了一个更加深刻更加形象的认识。再之后就是陈奎陈老师,一直是喜欢用labview作图像处理方面,让我对图像处理也有一个理解,再到后来就是大三上的这门数字图像处理的这门课程,让我系统的入门了图像处理。

老师教的很好,也为我解答很清晰的数字图像处理的相关知识,比如什么振铃现象,等等诸如此来,不厌其烦的教导我,所以很感谢。

在此帖出来,望各位读者能从中有所收益


相关文章
|
5月前
|
计算机视觉 Python
OpenCV中图像的开、闭运算讲解与实战应用(附Python源码)
OpenCV中图像的开、闭运算讲解与实战应用(附Python源码)
59 0
|
5月前
|
算法 API 计算机视觉
OpenCV(图像处理)-基于Python-形态学处理-开运算、闭运算、顶帽、黑帽运算
1. 形态学 OpenCV形态学是一种基于OpenCV库的数字图像处理技术,主要用于处理图像的形状、结构和空间关系。它包括一系列图像处理工具和算法,包括膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽等。
61 0
|
5月前
|
C语言
c语言编程练习题:7-56 求给定精度的简单交错序列部分和
c语言编程练习题:7-56 求给定精度的简单交错序列部分和
33 0
|
5月前
|
计算机视觉
[Halcon&图像] 形态学处理(腐蚀、膨胀、开运算、闭运算)
[Halcon&图像] 形态学处理(腐蚀、膨胀、开运算、闭运算)
88 1
|
5月前
|
监控
画图解释FHSS、DSSS扩频原理以及计算规则
画图解释FHSS、DSSS扩频原理以及计算规则
83 0
|
10月前
|
C++ 计算机视觉
【OpenCv • c++】形态学技术操作 —— 开运算与闭运算
【OpenCv • c++】形态学技术操作 —— 开运算与闭运算
213 0
|
11月前
|
算法 Java
数学建模常用算法:人工鱼群算法(AFAS)求解二元函数最小值+限定x,y范围测试【java实现--详细注释+Matlab绘制小鱼游动过程】
数学建模常用算法:人工鱼群算法(AFAS)求解二元函数最小值+限定x,y范围测试【java实现--详细注释+Matlab绘制小鱼游动过程】
114 0
|
12月前
|
计算机视觉
形态学运算与仿真:图像处理中形态学操作的简单解释
形态学是图像处理领域的一个分支,主要用于描述和处理图像中的形状和结构。形态学可以用于提取图像中的特征、消除噪声、改变图像的形状等。其中形态学的核心操作是形态学运算。
71 0
|
API 计算机视觉
六、OpenCV形态学操作(腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度)
假设有图像A和结构元素B,结构元素B在A上移动,其中B定义>中心为锚点,计算B覆盖下A的最小像素值用来替换锚点的像素,其中B作为结构体可以是任意形状。
220 0
六、OpenCV形态学操作(腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度)