7 Feb 2010

图像处理:腐蚀,膨胀,开运算及闭运算


图像的形态学运算:腐蚀,膨胀,开运算及闭运算

形态学图像处理的基本思想是利用一个称作结构元素的“探针”收集图像的信息.腐蚀,膨胀,开运算及闭运算这些形态学方法可以对图像进行滤波,平滑操作.腐蚀和膨胀可以看作单边滤波器,而开运算和闭运算可以看作双边滤波器.



如果将原图设定为A,探针图像设定为B,则一般情况下B的尺寸远小于A,用B对A进行各种操作.

腐蚀

定义: 设B的原点在左上角,则用B腐蚀A即,B能完全落入A时,B的原点的集合.
作用: 消除A的边界杂点.
例子:
A =
     0     1     1     1     0     0     0     0
     0     0     1     1     1     0     0     0
     0     0     0     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     0
     0     0     0     0     0     0     0     0
>> B = strel('square',2)
B =
Flat STREL object containing 4 neighbors.

Neighborhood:
     1     1
     1     1
>> C = imerode(A, B)
C =
     0     0     1     0     0     0     0     0
     0     0     0     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     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
如上显式,能将B完全包容在A中时,B的原点只可能在A(1,3)和A(2,4),在结果C中也只有这2点的值为1,其余均为0.如下图:

>> subplot(1,2,1);imshow(A,'notruesize');
>> subplot(1,2,2);imshow(C,'notruesize')




膨胀

定义: B中有任意点落入A时,B的原点的集合.换句话,B与A交集不为空时B的原点的集合.
作用: 合并图像边缘的背景点到图像中.(图像变粗,变大)
例子: (A,B与上面相同)
>> D = imdilate(A,B)
D =
     0     1     1     1     1     0     0     0
     0     1     1     1     1     1     0     0
     0     0     1     1     1     1     1     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
>> subplot(1,2,1);imshow(A,'notruesize');
>> subplot(1,2,2);imshow(D,'notruesize')
结果如下:



开运算

定义: 以相同的算子B对图像A进行先腐蚀后膨胀操作(并不能恢复原图像)
作用: 去掉凸角来平滑图像边缘(可以用来分开相连的区域).
例子:
>> E = imopen(A,B)
E =
     0     0     1     1     0     0     0     0
     0     0     1     1     1     0     0     0
     0     0     0     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     0     0
     0     0     0     0     0     0     0     0
>> subplot(1,2,1);imshow(A,'notruesize');
>> subplot(1,2,2);imshow(E,'notruesize')
结果如下:



闭运算

定义: 以相同的算子B对图像A进行先膨胀后腐蚀操作.
作用: 填充凹角来平滑图像边缘.
例子:
>> F = imclose(A,B)
F =
     0     1     1     1     0     0     0     0
     0     0     1     1     1     0     0     0
     0     0     0     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     0
     0     0     0     0     0     0     0     0
>> subplot(1,2,1);imshow(A,'notruesize');
>> subplot(1,2,2);imshow(F,'notruesize')
结果如下:




===============================================
可以参考另外2篇类似的介绍文章:
http://www.cnblogs.com/tekson/archive/2009/08/03/1538006.html

http://blog.sina.com.cn/s/blog_4a93ccea0100d25q.html

No comments :

Post a Comment