检测OpenCV点集中的对齐点

时间:2013-01-20 00:48:24

标签: opencv curve-fitting hough-transform

给定图像上的一组点,我想检测一组对齐点,如图所示: Lines on an image

我该怎么做?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

这是Hough Transform的一个很好的潜在应用。线的霍夫空间是(r,\ theta),其中r是从原点到线上最近点的距离,\ theta是它的方向。

如在Wiki文章中所示,x-y空间中的每个点在霍夫空间中变成正弦曲线。

所有正弦曲线相交的位置对应于穿过所有点的单条线。如果这些点不是完全共线的,则交点将是“模糊的”。

将线拟合到点的最简单算法是使矩形(r,\ theta)累加器阵列最初设置为零。然后跟踪每个点的正弦曲线到这个离散的(r,\ theta)空间,将每个累加器元素递增一个固定的量。通过查找大型数组元素来查找预期的线条拟合。元素坐标给出拟合的(r,\ theta)。

追踪正弦曲线非常简单。如果在\ theta轴上有T个累加器箱,则每个对应于角度k(\ pi)/ N,对于某些0 <= k <1。 T.因此,对于此范围内的k,计算从原点到最近点的距离,此方向通过该点。这提供了r值。如果R轴上有R个区间且Rmax是r的最大值,则增加bin(floor(r / rMax * R),k)。

答案 1 :(得分:3)

首先,你可以试试这个:

  1. 列出所有可以通过选择其中任意两个点形成的行(n(n-1)/2n点。

  2. 对于这两行中的任何一行,检查它们是否对齐(即坡度差在10度内)。

  3. 对于每个对齐的对线,您可以轻松检查其他点是否也在这些线上对齐。这些要点将是您需要的对齐点。