第九章 形态学图像处理

来源:互联网 发布:淘宝1秒拦截软件有哪些 编辑:程序博客网 时间:2024/05/31 20:52

  • 形态学图像处理
    • 预备知识
      • 二值图像集合和逻辑运算符
    • 膨胀和腐蚀
      • 膨胀
      • 结构元素的分解
      • 腐蚀
    • 膨胀与腐蚀的组合
      • 击中或击不中变换
      • 使用查找表

形态学图像处理

预备知识

二值图像,集合和逻辑运算符

与数学中的逻辑运算基本相同

这里写图片描述

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('AB的合集');subplot(235),imshow(f&g),title('AB的并集');subplot(236),imshow(f&~g),title('AB的差集');

逻辑运算

膨胀和腐蚀

膨胀

在二值图像中“加长”或“变粗”的操作。膨胀定义为集合运算,A被B膨胀记为
原理:这里写图片描述

A = imread('Fig9.05(a).jpg');A = ~A;B = [1 1 1;1 1 1;1 1 1];A2 = imdilate(A,B);subplot(121),imshow(A),title('原图');subplot(122),imshow(A2),title('膨胀后');

膨胀

结构元素的分解

se = strel('diamond', 5)decomp = getsequence(se);

这里写图片描述
这里写图片描述

腐蚀

做与,或操作,结果是使原来的二值图像减小一圈

A = imread('Fig01.png');se = strel('disk',10);A2 = imerode(A,se);subplot(221),imshow(A),title('原图');subplot(222),imshow(A2),title('半径为10腐蚀');se = strel('disk',5);A3 = imerode(A,se);subplot(223),imshow(A2),title('半径为5腐蚀');A4 = imerode(A,strel('disk',20));subplot(224),imshow(A2),title('半径为20腐蚀');

腐蚀

膨胀与腐蚀的组合

开:先腐蚀再膨胀,可以去掉目标外的孤立点
闭:先膨胀再腐蚀,可以去掉目标内的孔。
这里写图片描述

  • 开运算与闭运算

    开运算:C = imopen(A,B)
    闭运算:C = imclose(A,B)

    f = imread('Fig02.png');se = strel('square',20);fo = imopen(f,se);subplot(221),imshow(f),title('原图');subplot(222),imshow(fo),title('b开运算');fc = imclose(f,se);subplot(223),imshow(fc),title('c闭运算');foc = imclose(fo,se);subplot(224),imshow(foc),title('b的闭运算')

    开闭运算

击中或击不中变换

击中击不中变换(HMT),HMT变换可以同时探测图像的内部和外部。在研究图像中的目标物体与图像背景之间的关系上,HMT能够取得很好的效果。所以常被用于解决目标图像识别和模式识别等领域。

f = imread(‘Fig11.10.jpg’);
B1 = strel([0 0 0;0 1 1;0 1 0]);
B2 = strel([1 1 1;1 0 0;1 0 1]);
g = bwhitmiss(f,B1,B2);
subplot(121);imshow(f),title(‘原图’);
subplot(122);imshow(g),title(‘击中击不中变换’);
这里写图片描述

使用查找表

当击中击不中结构元素较小时,计算击中击不中变换的较快方法是使用查找表(LUT).
函数:endpoints
函数:bwmorph

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);
这里写图片描述
f = imread(‘Fig12.09(a).jpg’);
[L,n] = bwlabel(f);
[r,c] = find(L == 3);
rbar = mean(r);
cbar = mean(c);
imshow(f);
hold on
for k = 1:n
[r,c] = find(L == k);
rbar = mean(r);
cbar = mean(c);
plot(cbar,rbar,’Marker’,’o’,’MarkerEdgeColor’,’k’,’MarkerFaceColor’,’k’,’MarkerSize’,10);
plot(cbar,rbar,’Marker’,’*’,’MarkerEdgeColor’,’w’);
end

这里写图片描述

原创粉丝点击