用于查找点集子集的良好算法

时间:2015-01-07 15:40:34

标签: algorithm pattern-matching computer-vision point-clouds

我试图找到合适的算法来搜索较大集合中的2D点的子集。 一张图片胜过千言万语,所以:

enter image description here

关于如何实现这一目标的任何想法?请注意,转换只是旋转和缩放。

似乎最紧密的问题是点集注册 [1]。 我正在试验CPD和其他刚性和非刚性算法。实施,但他们似乎没有表现 很好地在较大的点集中找到小子集。

另一种方法可能是使用星跟踪算法,如[2]中提到的 Angle方法 或更强大的方法,如[3]。但同样,它们似乎都适用于大型输入集和目标集。我正在寻找不太可靠但更简约的东西......

感谢您的任何想法!

[1]:http://en.wikipedia.org/wiki/Point_set_registration

[2]:http://www.acsu.buffalo.edu/~johnc/star_gnc04.pdf

[3]:http://arxiv.org/abs/0910.2233

5 个答案:

答案 0 :(得分:2)

这里有一些可能与你的问题有关的论文:

  • 欧几里德运动下的几何模式匹配(1993),L。Paul Chew,Michael T. Goodrich,Daniel P. Huttenlocher,Klara Kedem,Jon M. Kleinberg,Dina Kravets。
  • Wamelena,Iyengarb的二维点模式的快速预期时间算法(2004)。
  • 刚性运动下部分点集模式匹配的简单算法(2006),Bishnua,Dasb,Nandyb,Bhattacharyab。
  • 相似变换下平面中点集的精确和近似几何模式匹配(2007),Aiger和Kedem。

顺便说一下,你的上一次参考提醒了我:

  • 点模式匹配在航天中的应用(1994),G。Weber,L。Knipping和H. Alt。

答案 1 :(得分:1)

我认为您应该从输入点的子集开始,并确定所需的转换以匹配大集的子集。例如:

  • 选择输入的任意两点,比如A和B.
  • 将A和B映射到一对大集合。这将确定比例和两个旋转角度(顺时针或逆时针)
  • 将相同的缩放和变换应用于第三个输入点C并检查大集以查看是否存在点。你必须检查两个位置,每个位置对应一个旋转角度。如果C点存在于大集合中的位置,则可以检查其余点。
  • 重复大集合中的每对点

我认为你也可以尝试匹配3个输入点的子集,知道三角形的角度在缩放和旋转下是不变的。

这些是我的想法,我希望它们有助于解决您的问题。

答案 2 :(得分:0)

我会尝试Iterative Closest Point算法。像您需要的简单版本应该易于实现。

答案 3 :(得分:0)

看看geometric hashing。它允许在不同的变换下找到几何图案。如果你只使用旋转和缩放,那将非常简单。

The main idea是在“原生”坐标中对模式进行编码,在转换中它是不变的。

enter image description here

答案 4 :(得分:0)

你可以试试geohash。将点转换为二进制并交错。测量距离并将其与原始距离进行比较。您也可以尝试旋转geohash,即z曲线或morton曲线。