【问题标题】:Image Segmentation Matlab图像分割 Matlab
【发布时间】:2017-11-16 12:43:17
【问题描述】:

我有这张 BW 图片:

并且使用RegionProps函数,显示有一些objetcs连接:

所以我使用了诸如 imerode 之类的形态学操作来分离对象以获得它们的质心:

现在我已经分离了每个对象的所有质心,但是在侵蚀该区域时我丢失了很多信息,就像你在图 3 中看到的那样,与图 1 相比。 所以我在想是否有办法“扩大”图片 3 直到更接近图片 1 但不再连接对象。

【问题讨论】:

  • 你是在问我们怎么做你的最后一张照片?好吧,就是这样,你展示了它。你还需要什么?最后一种似乎包含您需要的所有信息。如果您想获得不同圆圈的面积,我建议您尝试将椭圆拟合到每个圆圈中心

标签: matlab image-processing image-segmentation image-morphology


【解决方案1】:

您可能想看看 bwmorph()。使用 'thicken', inf 名称-值对,它会加厚标签,直到它们重叠。这是一个很好的分割工具。我们可以使用它为原始图像创建分割边界。

bw 是原始图像。 labels 是被侵蚀的标签的图像。

lines = bwmorph(labels, 'thicken', inf);

 segmented_bw = bw & lines

您还可以跳过几个阶段并使用基于标记的分水岭获得类似的结果。甚至更好,因为形态跷跷板已经破坏了一些信息,如右下角分割不佳的簇上所见。

【讨论】:

  • 我已经尝试过分水岭,但它没有显示我想要的结果。但是随着形态学操作增厚,它给了我一些积极的结果。在某些情况下会删除一些信息,但我会用这种方法解决。感谢您的有用想法。
【解决方案2】:

您可以将遮罩中的每个白色像素分配给最近的质心并使用生成的标签图:

[y x]= find(bw);  % get coordinates of mask pixels
D = pdist2([x(:), y(:)], [cx(:), cy(:)]);  % assuming cx, cy are centers' coordinates
[~, lb] = min(D, [], 2); % find index of closest center
lb_map = 0*bw;
lb_map(bw) = lb; % should give you the map.

更多信息请参见pdist2

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多