Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在MATLAB中查找标签图像的轮廓/边界

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

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

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

标签矩阵:



所需结果:





回答:

一种方法是遍历所有标签并消除边界之外的所有标签,例如这样(其中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)) 编辑

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

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

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 20:44


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