我正在尝试使用OpenCV估计相对相机姿势。在我的情况下相机校准(我知道相机的内在参数)。
鉴于在两个位置拍摄的图像,我需要找出两个相机之间的相对旋转和平移。典型的平移大约为5到15米,相机之间的偏航角旋转范围在0到20度之间。
为实现此目的,采用以下步骤。 一个。使用SIFT / SURF查找相应的点 湾基本矩阵识别 C。用E = K'FK估计本质矩阵并修改奇异约束的E. d。分解基本矩阵得到旋转,R = UWVt / UW'Vt(U和Vt得到E的SVD) 即从旋转矩阵中获取实际旋转角度
实验1:真实数据 对于真实数据实验,我通过将相机安装在三脚架上来拍摄图像。在位置1处捕获的图像,然后移动到另一个对齐位置并以5度为单位改变偏航角度,并为位置2捕获图像。
问题/问题: 1.估计的偏航角的符号与地面实际偏航角不匹配。有时5度估计为5度,但10度为-10度,15度为15度。 2.在实验中,仅改变偏航角,但是估计的滚转角和俯仰角具有接近180 / -180度的非零值。 3.精度非常差,在某些情况下,估计和地面实况角度的误差约为2-5度。 4.如何找出比例因子来获得真实世界测量单位的翻译?
模拟数据的行为也相同。
有没有人遇到过与我类似的问题?有任何关于如何解决它们的线索。 任何人的帮助都将受到高度赞赏。
(我知道关于类似问题的帖子已经很多了,所有这些都没有救过我。因此再发帖一次。)
答案 0 :(得分:2)
在Hartley和Zisserman的第9.6章中,他们指出,对于特定的基本矩阵,如果一个摄像机保持在规范位置/方向,则第二个摄像机矩阵有四种可能的解决方案:[UWV' | u3],[UWV' | -u3],[UW' V' | u3],[UW' V' | -u3]。
第一个和第三个(以及第二个和第四个)解决方案之间的区别在于,方向围绕连接两个摄像机的线旋转了180度,称为“#34;双绞线”#34;这听起来像是什么你在描述。
该书说,为了从四个选项中选择正确的平移和方向组合,您需要测试场景中的一个点并确保该点位于两个摄像机的前面。
答案 1 :(得分:0)
对于问题1和2, 在维基百科或任何像Wolfram Mathworld这样的好数学网站中寻找“欧拉角”。你会发现欧拉角的不同可能性。我相信你可以根据文献阅读找出你的结果中的符号变化的原因。
问题3, 它应该主要与我们单独的相机校准的准确性有关。
问题4, 不确定。如何,使用磁带测量相机的一个点,并将其与平移标准进行比较,以获得比例因子。
准确性差的可能原因:
1)在相机校准中获得合理且精确的准确度之间存在差异。见thread。 2)您移动三脚架的准确性。如何确保在位置变化时,三角架绕垂直于曲面的轴没有旋转。
我没有得到你的模拟概念。但是,我建议进行以下测试。
拍摄图像而不移动相机或物体。现在,如果计算相对相机姿势,则旋转应为单位矩阵,并且平移应为空矢量。由于数值不准确和噪音,您可能会看到以弧分为单位的旋转偏差。