任务是在行中水平使用regionprops
连接我得到的质心,然后预测丢失的物体。
这是我的图像:
应连接某个y坐标范围内的所有质心。之后我想预测丢失的物体。例如,上图中的绿线上应该有更多的物体/质心。
到目前为止我的代码:
BW = rgb2gray(imread('noise_removal_single_25_cropped.png'));
props = regionprops(im2bw(BW), 'Centroid');
centroids = cat(1, props.Centroid);
[B,L] = bwboundaries(BW,'noholes');
imshow(label2rgb(L, @jet, [.5 .5 .5]))
hold on
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2)
end
plot(centroids(:,1),centroids(:,2), 'b*')
plot(centroids(:,1),centroids(:,2), 'k-')
代码垂直连接所有质心,我不知道如何检测丢失的物体/质心(可能基于线的长度)?
答案 0 :(得分:1)
让我们假设行是完全水平的。看起来您可以通过纵坐标轻松聚类点,或者事先知道行分隔符,或者通过分析点密度。
取每个星团的中间纵坐标并丢弃异常值(距中位数的定义公差更远)。
按横坐标对内点进行排序。间隙长度(或滑动窗口中的点数)将告诉您缺失点。
如果行不是完全水平的,那么仍然可以通过纵坐标进行聚类并获得良好的水平分隔符。在每个群集中,使用强大的线拟合算法来执行异常值检测,并像以前一样水平排序。你也可以去偏斜(使用线方程),但是如果斜率很小,这将没什么区别。
最后评论:如果所有线都是平行的,您可以通过找到簇的重心(或中间点)并将簇转换为公共中心来共同执行偏斜检测,从而得到一条粗线。