基于位置的图像中对象的分割(在Matlab中)

时间:2013-09-25 14:44:42

标签: matlab image-processing image-segmentation

我一直在研究图像分割问题,似乎无法对我最近的问题有个好主意。

这就是我现在所拥有的:

Click here for image.(这只是一个通用的例子。)

是否有一个强大的算法可以自动丢弃正方形,因为它不属于其他四个方块的组(我知道应该总是或多或少地堆叠在一起)?

有时可能会出现这样的情况,即没有找到其中一个堆叠的盒子,因此存在间隙或假盒子位于左侧。

非常感谢您的意见。

1 个答案:

答案 0 :(得分:1)

如果你有办法像你的例子那样制作BW图像:

s  = regionprops(BW, 'centroid');
centroids = cat(1, s.Centroid);

xpos = centroids(:,1);应该是方框的x位置。

从这里你可以有多种方法,取决于你是否总是只有一个分开的盒子和一组分组的盒子。对于“远离一个虚假的盒子,休息紧密分组”的情况(远离Matlab,所以这是未经检查的)你甚至可以做一些简单的事情:

d = abs(xpos-median(xpos));
bogusbox = centroids(d==max(d),:);
imshow(BW);
hold on;
plot(bogusbox(1),bogusbox(2),'r*');

为我的实际用例制作一些强大的东西,我假设不包括整齐的盒子是另一回事;正如评论中所建议的那样,你需要知道你的好盒子的定位是多么接近,以及伪盒子的分离程度。

例如,您可以使用其他regionprops测量值,例如'BoundingBox''Extrema',并定义某种方式测量框中x相对于彼此的重叠程度,然后分组使用它(即使图像中有多个堆栈,也可以使用它。)