1 了解数学形态学的基本思想和方法;
2 掌握形态学基本运算
3 通过对图像的腐蚀和膨胀效果加深理解两种形态学处理方法的功能及应用。
安装有MATLAB软件的计算机
数学形态学是根据形态学概念发展而来具有严格数学理论基础的科学。最基本的形态学运算有:膨胀、腐蚀、开、闭。
指有一定形状的比较小的图像块。在二值形态学中,其像素值为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);
设A为原图像,B为结构元素,则原图像A被结构元素B腐蚀可定义为:
腐蚀运算的结果不仅与结构元素的形状(矩形、圆形、菱形等)选取有关,而且还与原点位置的选取有关。
函数:A2=imerode(A, B)
说明:B是结构元(由0和1组成的矩阵)。
设A为原图像,B为结构元素,则原图像A被结构元素B膨胀可定义为:
当原图像不变,但所给的结构元素的形状改变时;或结构元素的形状不变,而其原点位置改变时,膨胀运算的结果会发生改变。
函数:A2=imdilate(A, B)
说明:B是结构元(由0和1组成的矩阵)。
腐蚀和膨胀的对偶性:
对目标图像的膨胀运算,相当于对图像背景的腐蚀运算操作;对目标图像的腐蚀运算,相当于对图像背景的膨胀运算操作。
使用同一个结构元素对目标图像先进行腐蚀运算,然后再进行膨胀运算称为开运算。
结构元素B对目标图像A的开运算定义为:
函数:C = imopen(A, B);
使用同一个结构元素对目标图像先进行膨胀运算,然后再进行腐蚀运算称为闭运算。
结构元素B对目标图像A的闭运算定义为:
函数:C = imclose(A,B)
测试图像:circles.png
读取文件‘circles.png’,分别用半径为1和半径为4的圆盘形状的结构元素对其进行腐蚀和膨胀运算,然后用膨胀图像减去腐蚀图像,得到新图像。编写程序并运行。
问题:观察、对比两个半径的运行效果图,总结“膨胀图像减去腐蚀图像”的功能,并解释半径为1和半径为4处理的最终图像效果有何不同,尝试解释其原因。
半径为4的图像边界比半径为1的图像边界要粗一些。原因:当半径为1的进行处理时,白色的膨胀范围较小,并且白色的腐蚀程度也较小,因此,两者相减得到的结果的白色边界不会差距太大。而半径为4的膨胀范围较大,腐蚀程度也较大,因此两者相减之后,白色边界会很粗。
测试图像:saturn.png
对‘satrun.png’图像加入椒盐噪声(imnoise函数),分别用腐蚀、膨胀、开运算、闭运算对其进行处理并显示处理后图像。编写程序并运行。
问题:
腐蚀是对1的数量减少,而1在二值图中呈现白色,因此腐蚀后,球外的白点都去了,但是星球上的点反而更加密集,而膨胀是把1的数量变多,因此膨胀后球外点变多,而球内点变少。
膨胀,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('闭运算');
本项目是大一参加数学建模时,在暑假集训时候写的。
内容介绍,给你汉字库,进行汉字相似度的匹配,比如在一堆千
里面找一个干
字
该项目我上传到github上了,需要的自取
链接:汉字视力表
对于大三上的一个数字图像处理的实验我也就到这里结束了,在这里非常感谢张艳华张老师的教导,让我受益匪浅,其实本人对于数字图像处理时自从
大一吧,首先通过数模集训让我对matlab的掌握有了一个熟练的掌握,之后就是大一暑假集训时做过的这个项目让我对用matlab作图像处理有了一个更加深刻更加形象的认识。再之后就是陈奎陈老师,一直是喜欢用labview作图像处理方面,让我对图像处理也有一个理解,再到后来就是大三上的这门数字图像处理的这门课程,让我系统的入门了图像处理。
老师教的很好,也为我解答很清晰的数字图像处理的相关知识,比如什么振铃现象,等等诸如此来,不厌其烦的教导我,所以很感谢。
在此帖出来,望各位读者能从中有所收益
MATLAB 之 App designer