形态学运算中腐蚀
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
形态学运算中腐蚀,膨胀,开运算和闭运算:
1. 腐蚀是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体。
2. 膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。可以用来填补物体中的空洞。
3. 先腐蚀后膨胀的过程称为开运算。用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。
4. 先膨胀后腐蚀的过程称为闭运算。用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。
5. 通常,由于噪声的影响,图象在阈值化后所得到边界往往是很不平滑的,物体区域具有一些噪声孔,背景区域上散布着一些小的噪声物体。连续的开和闭运算可以有效地改善这种情况。有时需要经过多次腐蚀之后再加上相同次数的膨胀,才可以产生比较好的效果。
6. 腐蚀操作会去掉物体的边缘点,细小物体所有的点都会被认为是边缘点,因此会整个被删去。再做膨胀时,留下来的大物体会变回原来的大小,而被删除的小物体则永远消失了。
7. 膨胀操作会使物体的边界向外扩张,如果物体内部存在小空洞的话,经过膨胀操作这些洞将被补上,因而不再是边界了。再进行腐蚀操作时,外部边界将变回原来的样子,而这些内部空洞则永远消失了。
图像膨胀的Matlab实现:
可以使用imdilate函数进行图像膨胀,imdilate函数需要两个基本输入参数,即待处理的输入图像和结构元素对象。结构元素对象可以是strel函数返回的对象,也可以是一个自己定义的表示结构元素邻域的二进制矩阵。此外,imdilate还可以接受两个可选参数:PADOPT(padopt) ——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。举个实例如下:
步骤1,首先创建一个包含矩形对象的二值图像矩阵。
>> BW=zeros(9,10);
>> BW(4:6,4:7) =1
BW =
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
步骤2,使用一个3×3的正方形结构元素对象对创建的图像进行膨胀。>> SE=strel('square',3)
SE =
Flat STREL object containing 9 neighbors.
Neighborhood:
1 1 1
1 1 1
1 1 1
步骤3,将图像BW和结构元素SE传递给imdilate函数。
>> BW2=imdilate(BW,SE)
BW2 =
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
步骤4,显示结果。
>> imshow(BW,'notruesize') >> imshow(BW2,'notruesize')膨胀前后效果图:
2.图像腐蚀的Matlab实现:
可以使用imerode函数进行图像腐蚀。imerode函数需要两个基本输入参数:待处理的输入图像以及结构元素对象。此外,imerode函数还可以接受3个可选参数:PADOPT(padopt) ——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。M——指定原始图像的行数。以下程序示例说明了如何对某一副具体图像进行腐蚀操作,腐蚀前后的效果对比如图末。
步骤1,读取图像cameraman.tif (该图像是Matlab当前目录下自带的图片)
>> BW1=imread('cameraman.tif');
步骤2,创建一个任意形状的结构元素对象
>> SE=strel('arbitrary',eye(5));
步骤3,以图像BW1和结构元素SE为参数调用imerode函数进行腐蚀操作。
>> BW2=imerode(BW1,SE);
步骤4,显示操作结果
>> imshow(BW1)
>> figure,imshow(BW2)
图像cameraman.tif 腐蚀前后的效果对比:
3.膨胀和腐蚀联合操作(图像开运算操作):
下面以图像开启为例,说明如何综合使用imdilate和imerode这两个函数,实现图像处理操作。
步骤1,创建结构元素:
>> clear;close all
>> SE = strel('rectangle',[40 30]); %注意:结构元素必须具有适当的大小,既可以删电流线又可以删除矩形.
步骤2,使用结构元素腐蚀图像: %将会删除所有直线,但也会缩减矩形
>> BW1=imread('circbw.tif');
>> BW2=imerode(BW1,SE);
>> imshow(BW2)
>> figure,imshow(BW1)
步骤3,恢复矩形为原有大小,使用相同的结构元素对腐蚀过的图像进行膨胀. >> BW3=imdilate(BW2,SE);
>> figure,imshow(BW3)
最终效果如下图:
a.原始图像->
b.腐蚀后的图像->
c.膨胀后的图像