如何找到只有两个点的2行?

时间:2015-10-29 19:33:11

标签: computer-vision regression

我有这张图片:

enter image description here

人类可以分辨出两条线可以穿过这些点。一个朴素的算法会放置一个水平最佳拟合线。是否存在最适合一系列点而忽略远程异常值的算法?

3 个答案:

答案 0 :(得分:1)

有一种强大的估算技术可以将模型拟合到噪声数据,例如RANSAC。您需要拟合一行,排除属于该行的所有点,并使第二行与其余点匹配。

答案 1 :(得分:1)

直接来自David Forsyth web page(该书的作者:Forsyth,David A.和Jean Ponce(2002)。计算机视觉:现代方法。 Prentice 霍尔专业技术参考)以下是算法15.2:

  

假设 k 行(也许是随机均匀的)

     

     

假设将线分配到点然后使用拟合线   这项任务

Until convergence
   allocate each point to the closest line
   refit lines
end

在你的情况下, k 是2。

答案 2 :(得分:1)

霍夫变换适用于此任务。基本上,每个点都支持通过它的所有线的存在(在线参数空间中,例如rho-theta距离原点和角度的距离)。如果参数空间被离散化,那么您将获得数据中每条线的峰值。异常值将投票选出其他点投票少的参数,因此它们在参数空间中的计数较低。

下面的图片(来自维基百科)说明了理想情况下的概念(这些点实际上位于精确的线条上)。对于读取数据,峰值将更加模糊,但您仍然可以将它们与异常值区分开来。这种方法的优点是你不必假设有多少行,它适用于许多类型的图像/数据。缺点是,如果存在许多非线性干扰物,它可能会失败,例如在包含许多弯曲物体的自然场景中。

enter image description here