8

我确实有两组点,我想找到它们之间的最佳转换。在 OpenCV 中,您具有以下功能:

Mat H = Calib3d.findHomography(src_points, dest_points);

使用 RANSAC 返回一个 3x3 Homography 矩阵。我现在的问题是,我只需要平移和旋转(可能还有比例),我不需要仿射和透视。

问题是,我的观点只是二维的。

(1) 是否有计算类似单应性但自由度较低的函数?

(2) 如果没有,是否可以从 3x3 单应矩阵中提取一个只进行平移和旋转的 3x3 矩阵?

提前感谢您的帮助!

伊萨

4

2 回答 2

8

OpenCV的estimateRigidTransform函数正是您所需要的:它返回平移、旋转和缩放(对fullAffine 标志使用假值)。它确实使用了 RANSAC(请参阅源代码以确保它)。

于 2015-01-09T00:16:25.877 回答
3

单应性适用于二维点,三维仅适用于在 3 个昏暗的齐次坐标中投射点并执行透视效果。你总是可以把点投回去:

齐次 [x, y, w] 笛卡尔 [x/w, y/w]

但是,由于您计算的是 6DOF 而不是 4DOF(相似度),因此您的结果与您对 4DOF 的预期完全不同。更灵活的转换将在 RANSAC 中适应更多点,但代价是您关心的转换会失真。底线 - 不要试图分解 H,而是拟合相似度或等距(也称为刚性或欧几里得)。它们在库中不存在的原因 - 即使在点坐标中使用正确的最小二乘度量,它们也以封闭形式表示,因此不需要非线性优化。换句话说,它们非常简单。

如果你只有旋转和平移,我写了一个快速函数来找到它们(虽然没有 RANSAC)。它可能类似于rigidTransform,但更容易理解(希望如此) https://stackoverflow.com/a/18091472/457687

对于比例,仍然有一个封闭形式的解决方案,但平移和缩放的公式略有不同。请参阅学习相似性参数,p。25

于 2014-03-20T06:13:34.703 回答