找到图像中不完美的直线

时间:2016-01-21 01:37:44

标签: matlab image-processing computer-vision filtering hough-transform

我的任务是找出像这样的随机丛林的所有绿芽

enter image description here

使用颜色分割和斑点分析,我已经获得了图像的等高线图。为了从轮廓图中找到射击,我使用了Hough变换,但最终会产生一些误报。我已经尝试调整Hough线和峰值的参数,但它会导致许多误报或不同图像的假阴性。这是代码段

  [H,theta,rho] = hough(BW,'Theta',-90:1:89,'rhoResolution',1);
P = houghpeaks(H,100,'threshold',ceil(0.3*max(H(:))),'NhoodSize',[21 21]);
lines = houghlines(BW,theta,rho,P,'FillGap',15,'MinLength',100);

这是我得到的输出:enter image description here

有人能指出一个更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我有一个想法,但是我把它扔进评论中的时间太长了。

您可以在等高线图中识别并标记连接的组件,然后检查不同的组件,看它是否长而薄或更像斑点。可能有很多方法可以测试它。首先想到的是将连接的组件与在组件的边界矩形上对角线运行的线进行比较。 (但请检查两种方式。)您可能希望为您遇到的每个边界框生成掩码,如下所示:

 1  1 -1 -1 -1
-1  1  1  1 -1
-1 -1 -1  1  1

......还有它的镜像。显然,你需要稍微玩一下。您可以为蒙版添加一些平滑处理,使其对不完全笔直的事物具有更大的容差。但是,原则是掩模是按元素乘以包含所讨论组件的子图像。结果矩阵中所有元素的总和为您提供了一个分数,告诉您它是如何线条的。如果您使用的是可变大小的蒙版,那么您还需要以某种方式对分数进行标准化。这可能会在与轴平行的线上失败,但这些线很容易测试,因为组件的边界框会很长很薄。

如果做不到这一点,你可以尝试在不同的角度卷积一组线条的面具,以测量图像中任何给定点的线条样式,但这可能会更加有效,而且不那么健壮。