【问题标题】:How can I use bwlabel or regionprops to extract set of pixels of each label?如何使用 bwlabel 或 regionprops 提取每个标签的像素集?
【发布时间】:2014-04-17 18:55:00
【问题描述】:

我正在关注这个tutorial

目标是能够吐出: 一种。每个标记对象的中心 湾。与每个标记对象关联的所有像素

在某种程度上,我有一个“a”数组。对于每个对象,或“b”。每个对象

我真的不知道该怎么做。是否有 matlabl 工具来帮助提取这些像素或中心集 - 每个标签?

更新

我确实设法使用reigionprops 圈出了我想要的 80%,但是它不能精确捕捉标签,只是在捕捉背景的同时围绕它们设置一个圆圈,是吗真的无法避免吗?我只是不确定如何访问每个圆圈项目的像素集。

r=regionprops(L, 'All'); imshow(imagergb); areas={r.Area}; Bboxes={r.BoundingBox};
for k=2:numel(r)
    if areas{k}>50 && areas{k} < 1100 
        rectangle('Position',Bboxes{k}, 'LineWidth',1, 'EdgeColor','b', 'Curvature', [1 1]); 
    end
end

所以我想要做的是例如。

我认为可能只是

r = regionprops(L, 'PixelIdxList')

然后

element1 = r(1).PixelIdxList

但不知道如何获取每个像素的位置

我也试过了

Z= bwlabel(L);

但是 imshow(Z==1) 吐出所有标签,而 imshow(Z==2) 吐出背景、所有标签和背景。无法测试 bwlabeln 因为我不确定为 r 和 c 参数输入什么。

【问题讨论】:

  • '这真的是不可避免的' 不,这段代码是为这个答案中的特定目的而编写的:stackoverflow.com/a/22813577/2777181 您可以使用regionprops 的输出做很多其他事情。

标签: image-processing matlab


【解决方案1】:

使用regionprops(L, 'PixelIdxList') 是正确的。它为您提供每个标签的像素索引列表。然后,您可以使用(例如,对于第一个标签)将它们转换为 [x,y] 坐标

[y,x] = ind2sub(size(L), r(1).PixelIdxList)

您可以使用regionprops(L, 'Centroid') 获取标签中心。这已经为您提供了每个标签的 [x,y] 坐标。请注意,这些是亚像素坐标,因此如果您想将它们用作索引,可能需要对它们进行四舍五入。

【讨论】:

  • 请提及Centroid,以便我删除我的。在我发布之前我没有看到你的答案。
  • 没问题 :) 给你
  • 天哪,真的做到了。向你致敬! P.s 必须将 [y,x] 切换为 [x,y]
  • 在 MATLAB 中,第一个索引指的是行(图像中的 y),第二个索引指的是列(图像中的 x)。例如,尝试查看标签 7,它对应于左下角的一个对象(小 x,大 y)。查看xy 的值,自己看看哪个是哪个。
猜你喜欢
  • 2014-11-17
  • 2019-05-07
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-28
  • 2016-11-11
  • 2011-04-15
相关资源
最近更新 更多