我一直在研究图像分割问题,但似乎对我最近的问题没有一个好主意。
这就是我目前所拥有的:
点击这里查看图片。(这只是一个通用示例。)
是否有一种强大的算法可以自动丢弃不属于其他四个方格组的右方格(我知道应该总是或多或少地堆叠在一起)?
有时会出现这样的情况,其中一个堆叠的盒子没有找到,所以有一个间隙,或者假盒子在左侧。
非常感谢您的意见。
我一直在研究图像分割问题,但似乎对我最近的问题没有一个好主意。
这就是我目前所拥有的:
点击这里查看图片。(这只是一个通用示例。)
是否有一种强大的算法可以自动丢弃不属于其他四个方格组的右方格(我知道应该总是或多或少地堆叠在一起)?
有时会出现这样的情况,其中一个堆叠的盒子没有找到,所以有一个间隙,或者假盒子在左侧。
非常感谢您的意见。
如果您有像您的示例那样生成 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'
or'Extrema'
并定义某种度量 x 中的框相对于彼此重叠的程度,然后使用它进行分组(即使您在图像中有多个堆栈,这也可以工作)。