仅使用平移和旋转将一组2d点与另一组对齐

时间:2011-08-16 11:21:45

标签: math opencv geometry rotation translation

我在OpenCV工作,但我认为没有这方面的功能。我可以找到一个查找仿射变换的函数,但仿射变换包括缩放,我只想考虑旋转+平移。

想象一下,我在2d中有两组积分 - 让我们说每组都有50分。

E.g。设置A = {x1,y1,x2,y2,...,x50,y50}

设置B = {x1',y1',x2',y2',...,x50',y50'}

我想找到最接近映射集A到集合B的旋转和平移组合。我想我将定义“最接近”作为最小化A中的点与BIe中的对应点之间的平均距离,最小化平均距离介于(x1,y1)和(x1',y1')等之间

我想我可以使用蛮力测试所有可能的翻译和旋转,但这将是非常低效的。有谁知道更简单的方法?

谢谢!

3 个答案:

答案 0 :(得分:7)

就接近矩阵的奇异值分解(点对之间的距离)而言,该问题具有非常优雅的解决方案。这个名字是orthogonal Procrustes problem,是希腊传说中一位为旅行者提供适合任何人的床的人。

解决方案来自于找到与给定(不一定是正交)矩阵最接近的正交矩阵。

答案 1 :(得分:0)

我在Excel中执行此操作的方法是创建一些代表点的列。 表示集合的旋转/平移的单元格(无需旋转和平移它们)。 然后表示旋转/翻译相同点的列 然后是另一列,用于旋转/平移点的点之间的距离 然后是点之间距离之和的单元格。 最后,使用Solver优化旋转和平移单元格。

答案 2 :(得分:0)

如果您修复了一些轮换,可以使用ternary search获得答案。在x中运行搜索,对于每个测试的x,在y中运行它以获得最佳值。这将给出正确的答案,因为函数(相应距离的总和)是凸的(这可以通过观察函数对任何线的限制是一维凸函数来证明;并且最后是标准事实:几个凸函数的和是凸的)。 代替在角度上的强力,我可以提出基于三元搜索的这种方法。选择一些不是很大的步骤S.为(0,S,2S,...)中的每个角度计算目标函数。然后,如果S足够小,我们可以排除一些段(iS,(i + 1)S)。即具有角度为iS和(i + 1)S的函数值相对较大的那些。仔细实施这可以给出答案,并且可以比蛮力更快地完成。