【问题标题】:Connect centroids horizontally and detect missing objects水平连接质心并检测丢失的对象
【发布时间】:2016-07-06 20:37:57
【问题描述】:

任务是将我使用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-')

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

【问题讨论】:

  • 你在哪里垂直连接质心?我只看到您在代码中绘制边界和质心。一种方法是找到每个点最近的邻居。缺失点会导致邻居的距离比平时更大。当然,您的优势在于知道您的点是水平分组的en.wikipedia.org/wiki/Nearest_neighbor_search

标签: matlab image-processing detection


【解决方案1】:

让我们假设行是完全水平的。看来你可以很容易地通过纵坐标对点进行聚类,或者提前知道行分隔符,或者通过分析点密度。

获取每个集群的中值纵坐标并丢弃异常值(那些距离中值超出定义容差的值)。

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

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

最后说明:如果所有线都平行,您可以通过找到集群的重心(或中心点)并将集群平移到一个共同的中心,给出一条粗线来集体执行倾斜检测。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 2016-09-04
    • 2011-06-13
    • 1970-01-01
    相关资源
    最近更新 更多