水平连接质心并检测丢失的物体

时间:2016-07-06 20:37:58

标签: matlab image-processing detection

任务是在行中水平使用regionprops连接我得到的质心,然后预测丢失的物体。

这是我的图像:

detect_boundaries_and_centroids

这是我想要实现的目标: Connected_centroids_horizontally

应连接某个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-')

代码垂直连接所有质心,我不知道如何检测丢失的物体/质心(可能基于线的长度)?

1 个答案:

答案 0 :(得分:1)

让我们假设行是完全水平的。看起来您可以通过纵坐标轻松聚类点,或者事先知道行分隔符,或者通过分析点密度。

取每个星团的中间纵坐标并丢弃异常值(距中位数的定义公差更远)。

按横坐标对内点进行排序。间隙长度(或滑动窗口中的点数)将告诉您缺失点。

如果行不是完全水平的,那么仍然可以通过纵坐标进行聚类并获得良好的水平分隔符。在每个群集中,使用强大的线拟合算法来执行异常值检测,并像以前一样水平排序。你也可以去偏斜(使用线方程),但是如果斜率很小,这将没什么区别。

最后评论:如果所有线都是平行的,您可以通过找到簇的重心(或中间点)并将簇转换为公共中心来共同执行偏斜检测,从而得到一条粗线。