我一直在研究图像分割问题,似乎无法对我最近的问题有个好主意。
这就是我现在所拥有的:
Click here for image.(这只是一个通用的例子。)
是否有一个强大的算法可以自动丢弃正方形,因为它不属于其他四个方块的组(我知道应该总是或多或少地堆叠在一起)?
有时可能会出现这样的情况,即没有找到其中一个堆叠的盒子,因此存在间隙或假盒子位于左侧。
非常感谢您的意见。
答案 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相对于彼此的重叠程度,然后分组使用它(即使图像中有多个堆栈,也可以使用它。)