给定图像上的一组点,我想检测对齐点组,如图所示:
我怎样才能做到这一点?任何帮助将不胜感激。
这是霍夫变换的一个很好的潜在应用。直线的霍夫空间是 (r, \theta),其中 r 是从原点到直线上最近点的距离,\theta 是它的方向。
xy 空间中的每个点都成为霍夫空间中的正弦曲线,如 Wiki 文章所示。
所有正弦曲线相交的地方对应于一条穿过所有点的线。如果这些点不是完全共线的,则相交将是“模糊的”。
将线拟合到点的最简单算法是使矩形 (r, \theta) 累加器数组最初设置为零。然后将每个点的正弦曲线跟踪到这个离散的 (r, \theta) 空间中,将每个累加器元素递增一个固定量。通过寻找大型数组元素来找到预期的线拟合。元素坐标给出拟合的 (r, \theta)。
跟踪正弦曲线很简单。如果您在 \theta 轴上有 T 个累加器箱,则每个箱都对应于角度 k(\pi)/N,对于某些 0 <= k < T。因此,对于此范围内的 k,计算从原点到最近点的距离具有此方向的线通过该点。这提供了一个 r 值。如果 R 轴上有 R 个 bin,并且 Rmax 是 r 的最大值,则递增 bin (floor(r/rMax*R), k)。
作为开始,你可以试试这个:
列出所有可以通过选择这些点中n(n-1)/2
的任意两个来形成的线(一个代表n
点)。
对于其中任何两条线,检查它们是否对齐(即斜率差异在 10 度内)。
对于每条对齐的线,您可以轻松检查其他点是否也对齐在这些线上。这些点将是您需要的对齐点。