我有两套积分,我想找到它们之间的最佳转换。 在OpenCV中,您具有以下功能:
Mat H = Calib3d.findHomography(src_points, dest_points);
使用RANSAC返回3x3 Homography矩阵。我现在的问题是,我只需要翻译和轮换(也可能是缩放),我不需要仿射和透视。
问题是,我的观点仅限于2D。
(1)是否存在计算单应性但具有较小自由度的函数?
(2)如果没有,是否有可能从3x3单应矩阵中提取仅进行平移和旋转的3x3矩阵?
提前感谢您的帮助!
伊萨
答案 0 :(得分:5)
OpenCV estimateRigidTransform函数正是您所需要的:它返回Translation,Rotation和Scale(对fullAffine标志使用false值)。并且它使用RANSAC(请参阅源代码以确定它)。
答案 1 :(得分:2)
Homography用于2D点,第三个维度仅用于在3个暗淡的齐次坐标中投射点并执行透视效果。你总是可以回击点:
同质[x,y,w] 笛卡儿[x / w,y / w]然而,由于您计算的是6DOF而不是4DOF(相似度),因此您的结果与您对4DOF的预期差异很大。更灵活的转换将适合RANSAC中的更多点,代价是您关心的转换中的扭曲。底线 - 不要试图分解H,而是拟合相似性或等距(也称为刚性或欧几里德)。它们在库中不存在的原因 - 即使在点坐标中具有正确的最小平方度量,它们也以封闭形式表示,因此不需要非线性优化。换句话说,它们非常简单。
如果你只有旋转和翻译,我写了一个快速的功能来找到它们(虽然没有RANSAC)。它可能类似于rigidTransform但更容易理解(希望如此) https://stackoverflow.com/a/18091472/457687
对于缩放,仍然存在封闭形式的解决方案,但是用于平移和缩放的公式略有不同。见Learning similarity parameters, p. 25