史蒂夫与MATLAB图像处理

图像处理的概念、算法和MATLAB

探索最短路径-第4部分

在我之前的文章探索最短路径(11月1日,11月26日和12月3日),我已经多次指出,没有一个独特的最短路径(通常)一个对象和另一个之间在一个二进制图像。为了说明这一点,下面是一个回顾上次的“quasi-euclidean”的例子。

bw =逻辑([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 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0]);L = bwlabel (bw);bw1 = (L = = 1);bw2 = (L = = 2);D1 = bwdist (bw1,“quasi-euclidean”);D2 = bwdist (bw2,“quasi-euclidean”);D = D1和D2;D =圆(D * 32) / 32;路径= imregionalmin (D);P = false(大小(bw));P = imoverlay (P,路径。5。5。5);P = imoverlay (P bw (1 1 1));imshow (P,“InitialMagnification”,“健康”)

上面所示的灰色像素所有属于一个或多个两个物体之间的最短路径。那么我们如何选择一条路?

我第一想法是薄路径“blob”使用“瘦”选项bwmorph

paths_thinned_once = bwmorph(路径,“薄”);P = false(大小(bw));P = imoverlay (P,路径。5。5。5);P = imoverlay (P paths_thinned_once [1 1 0]);P = imoverlay (P bw (1 1 1));imshow (P,“InitialMagnification”,“健康”)

这似乎有前途。如果我们继续变薄,直到收敛呢?你通过重复值bwmorph

paths_thinned_many = bwmorph(路径,“薄”、正);P = false(大小(bw));P = imoverlay (P,路径。5。5。5);P = imoverlay (P paths_thinned_many [1 1 0]);P = imoverlay (P bw (1 1 1));imshow (P,“InitialMagnification”,“健康”)

看起来很好。

让我们试着整个序列较长路径。

url =“https://blogs.mathworks.com/images/steve/2011/two-letters-cropped.png”;bw = imread (url);imshow (bw,“InitialMagnification”,“健康”)
L = bwlabel (bw);bw1 = (L = = 1);bw2 = (L = = 2);D1 = bwdist (bw1,“quasi-euclidean”);D2 = bwdist (bw2,“quasi-euclidean”);D = D1和D2;D =圆(D * 32) / 32;路径= imregionalmin (D);paths_thinned_many = bwmorph(路径,“薄”、正);P = false(大小(bw));P = imoverlay (P,路径。5。5。5);P = imoverlay (P paths_thinned_many [1 1 0]);P = imoverlay (P bw (1 1 1));imshow (P,“InitialMagnification”,“健康”)

和之前一样,像素属于任何最短路径显示在灰色。黄色的像素属于一个特定的路径。

下次我将解释如何找到最短路径约束。

本系列中的所有文章

  • 寻找最短路径的基本思想通过添加两个距离变换(第1部分)
  • 最短路径的非唯一性(第2部分)
  • 浮点舍入处理效果(第3部分)
  • 使用薄挑选一个路径(第4部分)
  • 使用bwdistgeodesic找到最短路径受约束(第5部分)




使用MATLAB®7.13发表

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。