探索最短路径-第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”,“健康”)
和之前一样,像素属于任何最短路径显示在灰色。黄色的像素属于一个特定的路径。
下次我将解释如何找到最短路径约束。
评论
留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。