我尝试匹配用相机拍摄的两个重叠图像。为此,我想使用OpenCV。我已经使用SurfFeatureDetector
提取了这些功能。现在我尝试计算两个图像之间的旋转和平移向量。
据我所知,我应该使用cvFindExtrinsicCameraParams2()
。不幸的是,这种方法需要objectPoints
作为参数。这些objectPoints
是提取的要素的世界坐标。这些在目前的背景下是未知的。
有人能给我一个如何解决这个问题的提示吗?
答案 0 :(得分:9)
这里已经处理了同时计算两个图像和未知三维世界坐标之间的相对姿势的问题:
Berthold K. P. Horn。相对方向重新审视。 Berthold K. P. Horn。人工智能实验室,麻省理工学院,545技术...
编辑:这是该论文的链接: http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.64.4700
请参阅我对相关问题的回答,我建议解决此问题:
OpenCV extrinsic camera from feature points
编辑:您可能也想看看捆绑调整,
http://en.wikipedia.org/wiki/Bundle_adjustment
假设初始估算值可用。
编辑:我找到了一些您可能想要查看的代码资源:
资源I:
http://www.maths.lth.se/vision/downloads/
具有异常值的两个视图几何估计
用于查找两个校准的相对方向的C ++代码 存在异常值的相机。获得的解决方案是最佳的 意味着内部数量最大化。
资源II:
http://lear.inrialpes.fr/people/triggs/src/来自的相对方向 5分:一个稍微更精致的C例程实现最小化 解决两个校准相机的相对方向 未知的3D点。需要5分,可以有多少分 10个可行的解决方案(但2-5更常见)。还需要一些 线性代数的CLAPACK例程。还有一个简短的技术 报告(包括在内)。
资源III:
http://www9.in.tum.de/praktika/ppbv.WS02/doc/html/reference/cpp/toc_tools_stereo.html vector_to_rel_pose计算两者之间的相对方向 相机给出了图像点对应关系和已知的相机参数 并重建三维空间点。
答案 1 :(得分:2)
有一个理论上的解决方案,然而,相机姿态估计的OpenCV实现缺乏所需的工具。
理论方法: 步骤1:提取单应性(描述图像之间几何变换的矩阵)。使用findHomography() 步骤2.将结果矩阵分解为旋转和平移。使用cv :: solvePnP();
问题:findHomography()返回一个3x3矩阵,对应于从一个平面到另一个平面的投影。 solvePnP()需要一个3x4矩阵,表示对象的3D旋转/平移。我认为通过一些近似,你可以修改solvePnP来给你一些结果,但它需要大量的数学和对3D几何的非常好的理解。