MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   在MATLAB中查找标签图像的轮廓/边界 (https://www.labfans.com/bbs/showthread.php?t=26566)

poster 2019-12-14 20:13

在MATLAB中查找标签图像的轮廓/边界
 
我想知道是否有一种简单的方法可以将标签矩阵转换为矩阵,在该矩阵中,您可以在两个标签区域相交的任何地方都有线,而在其他地方为零,这样您就可以基本上在生成标签的原始图像上叠加区域的边界作为流行的label2rgb函数的另一种可视化替代方案。

我问的原因是我目前正在处理一些超像素代码,所以我有很多带标签的区域(500至5,000)。我一直在使用rgblabel将超像素标签转换为彩色区域,然后保持按住状态,然后将它们显示在原始图像上,而将“ AlphaData”调低以使其变为半透明。但是,对于这么多区域,很难从视觉上进行分析,我认为区域的简单边界会更好。谢谢。

[编辑] @O_O:尽管我现在对乔纳斯的第二个建议非常满意,但我已经附上了样本标签矩阵以及目标结果。第二天也将尝试使用user616736的方法。我还以.mat格式[URL="http://www.site.uottawa.ca/~ssilk083/label_matrix_borders.zip"]上传[/URL]了示例图片,以防其他人想尝试使用它们。

标签矩阵:

[IMG]https://i.stack.imgur.com/bEhSB.jpg[/IMG]

所需结果:

[IMG]https://i.stack.imgur.com/jqsPj.jpg[/IMG]



[B]回答:[/B]

一种方法是遍历所有标签并消除边界之外的所有标签,例如这样(其中lblImg是标签矩阵)

nLabels = max(lblImg(:)); for lbl = 1:nLabels currenObject = lblImg == lbl; %# find pixels belonging to current label lblImg(imerode(currentObject,strel('disk',1))) = 0; %# mask all but the border end imshow(label2rgb(lblImg)) [B]编辑[/B]

查找边界的更快方法是使用标记图像的渐变

[gx,gy] = gradient(lblImg); lblImg((gx.^2+gy.^2)==0) = 0; imshow(label2rgb(lblImg))

[url=https://stackoverflow.com/questions/5265837]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 09:03

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.