图像分割Matlab

Image Segmentation Matlab

我有这张黑白图片:

并使用RegionProps函数,显示连接了一些对象:

所以我使用像 imerode 这样的形态学操作来分离对象以获得它们的质心:

现在我已经分离了每个对象的所有质心,但是在腐蚀区域时我丢失了很多信息,如图 3 与图 1 的对比。 所以我在想是否有 "dilate" 图片 3 直到靠近图片 1 但没有再次连接对象。

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

[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

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

bw为原图。 labels 是腐蚀标签的图像。

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

 segmented_bw = bw & lines

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