形态学【生】【数】 morphology
从图像中提取表达和描绘区域形状的有用图像分量, 边界 骨架 凸壳等
1 Prerequisite P403
1 一个集合的反射表示为 定义如下:
2 如果是描述图像中物体的像素的几何( 二维点 ),则是中坐标被代替的点集
3 集合按照的平移定义为:
4 形态学中几何的泛着和平移广泛用来表达基于结构元( SE ) 的操作:研究一副图像中感兴趣特性所用的小集合或子图像。
* 阴影方块—— SE的成员
* 标记 "×"—— 不关心条件
* 标记 "·" —— 中心位置
* 白色背景—— 为图像操作,添加最小可能数量的背景元素形成 “矩形阵列”
2 腐蚀和膨胀
1 腐蚀
中的集合和, 表示对的腐蚀
意义:包含在中,不予背景共享任何公共元素,故腐蚀表达式 等价于:
其中 是 的补集。
例子: wikipedia http://en.wikipedia.org/wiki/Erosion_(morphology)
2 膨胀
表示对的膨胀,定义为:
意义:和至少有一个元素是重叠的 等价于:
对偶性
* 膨胀和腐蚀彼此关于集合求补运算和反射运算是对偶的,即
以及
对的腐蚀,是对膨胀的补,反之亦然。
*证明:P407
3 开操作与闭操作
开操作:一般会平滑物体的轮廓。断开较窄的狭颈并且消除细的突出物
闭操作:同样也会平滑轮廓的一部分,但与开操作相反,他通常会弥合较窄的间断和西昌的沟壑,消除小的孔洞,填补轮廓线中的断裂
4 击中或击不中变换( HMT )
*用于形状检测的基本工具
☆ P411 & http://blog.sina.com.cn/s/blog_4ca086fc0100ie18.html
5 基本形态学算法
1 边界提取
做法: 表示集合 的边界,通过 对 腐蚀,而后执行 和腐蚀结果之间集合做差
理解:将原图像边界缩小一圈,再使用图像与其求差
2 孔洞填补
P425 书上的方法好像有错
% Matlab
I = [
0 0 0 0 0 0
0 1 1 1 1 0
0 1 0 0 1 0
0 1 0 0 1 0
0 1 0 0 1 0
0 1 0 0 1 0
0 1 1 1 1 0
0 0 0 0 0 0
0 1 0 0 0 1];
I = logical(I);
subplot(231);imshow(~I);title('I');
% I 的反
I_c = logical(~I);
subplot(232);imshow(~I_c);title('I^c I 的反');
% F 是边界处理后的图像
% 边界元素 = 1 - I(i,j)
[r c] = size(I);
F = zeros(r,c)
for i = 1 : r
for j = 1 : c
if i==1 || j==1 || i==r || j==c
F(i,j) = 1 - I(i,j);
end
end
end
subplot(233);imshow(~F);title('经过处理边界图像 F');
% B在F上做膨胀
B = ones(3);
TMP_F = zeros(r+2,c+2);
TMP_F([2:r+1], [2:c+1]) = F;
TMP = zeros(r+2,c+2);
for i = 2:r+1
for j = 2:c+1
if TMP_F(i,j) == 1
TMP(i-1,j-1) = 1;
TMP(i-1,j) = 1;
TMP(i-1,j+1) = 1;
TMP(i,j-1) = 1;
TMP(i,j+1) = 1;
TMP(i+1,j-1) = 1;
TMP(i+1,j) = 1;
TMP(i+1,j+1) = 1;
end
end
end
F_oplus_B = TMP([2:r+1], [2:c+1]);
subplot(234);imshow(~F_oplus_B);title('F \oplus B ');
% 经过腐蚀的F交上 I^c (I的反)
F_oplus_B_cap_I_c = xor(F_oplus_B,I_c);
subplot(235);imshow(~F_oplus_B_cap_I_c);title('F \oplus B \cap I^c');
% 取反 OK
subplot(236);imshow(F_oplus_B_cap_I_c);title('final');
补洞不同方法 http://codesmesh.com/hole-filling-of-image-in-matlab/
3 连通分量提取
* MATLAB http://www.mathworks.cn/cn/help/images/ref/bwlabel.html
4 凸壳
5 细化
6 粗化
7 骨架
8 裁剪
9 形态学重建
6 灰度级形态学