第九章
形态学图像处理
预备知识
二值图像,集合和逻辑运算符
包括逻辑与、或、非和差。与数学运算规则相同。
f = imread('Fig4.41(a).jpg');
g = imread('FigProb4.09(left).jpg');
subplot(231),imshow(f),title('A');
subplot(232),imshow(g),title('B');
subplot(233),imshow(~f),title('A的补集');
subplot(234),imshow(f|g),title('A和B的合集');
subplot(235),imshow(f&g),title('A和B的并集');
subplot(236),imshow(f&~g),title('A和B的差集');

膨胀与腐蚀
膨胀
膨胀会使图像膨胀一圈。
>> f = imread('Fig9.05(a).jpg');
>> f = ~f;
>> A=[1 1 1;1 1 1;1 1 1];
>> g = imdilate(f,A);
>> subplot(121),imshow(f),title('原图');
subplot(122),imshow(g),title('膨胀后');

结构元素的分解
se = strel(shape,parameters)
作用为生成指定大小的特定形状构造元素。
腐蚀
腐蚀会使图像缩小一圈。
f = imread('1.jpg');
se = strel('disk',10);
g1 = imerode(f,se);
subplot(221),imshow(f),title('原图');
subplot(222),imshow(g1),title('半径为10腐蚀');
se = strel('disk',5);
g2 = imerode(f,se);
subplot(223),imshow(g2),title('半径为5腐蚀');
g3 = imerode(f,strel('disk',20));
subplot(224),imshow(g3),title('半径为20腐蚀');
构造大小不同的圆盘元素对图像进行腐蚀,可以看到,图像缩减的程度不同,直至消失。
膨胀与腐蚀的结合
开运算与闭运算
先腐蚀后膨胀的过程称为开运算,开运算可以去除图像的孤立点。
先膨胀后腐蚀的过程称为闭运算,闭运算可以填充图像内的细小空洞。
开运算:C = imopen(A,B)
闭运算:C = imclose(A,B)
击中或击不中变换
很多书上都用集合论来讲这一变换,对应用者来说似乎没这必要。简单来说击中-击不中运算常用于二值图像,它用于基于结构元素的配置,从图像中寻找具有某种像素排列特征的目标,如单个像素、颗粒中交叉或纵向的特征、直角边缘或其他用户自定义的特征等。计算时,只有当结构元素与其覆盖的图像区域完全相同时,中心像素的值才会被置为1,否则为0。下图给出了一个例子。
这是一个完全的模板匹配过程。

用代码实现击中或击不中变换
f=imread('Fig11.10.jpg');
A1 = strel([0 0 0;0 1 1;0 1 0]);
A2 = strel([1 1 1;1 0 0;1 0 1]);
g = bwhitmiss(f,A1,A2);
subplot(121),imshow(f),title('原图');
subplot(122),imshow(g),title('击中击不中变换');

观察生成图像,发现效果并不好,应该是使用的结构元素不合适导致的。为了解决这个问题,可以使用查找表。
查找表
BW2 = bwmorph(BW,operation,n)
对二值图像进行n次指定的形态学处理。
f = imread('Fig11.10.jpg');
g = bwmorph(f, 'skel', Inf);
for k = 1:20
g = g & ~endpoints(g);
end
subplot(121),imshow(f);
subplot(122),imshow(g);
'skel':在这里n = Inf,骨架提取但保持图像中物体不发生断裂;不改变图像欧拉数;

可以看到效果得到了很大改善。

浙公网安备 33010602011771号