Python绕相机轴旋转图像

2024-10-08 22:21:54 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个图像,这是我对一些原始图像应用单应变换H后得到的。原始图像不显示。应用于原始图像的单应性H的结果如下:

enter image description here

我想把这个图像绕一个合适的轴旋转30度(如果有相机的话,可能是相机所在的位置)来得到这个图像:

enter image description here

如果不知道相机参数,如何使用python应用旋转变换?我只能指定要旋转图像的度数和要旋转的近似轴。另外,如何利用H和旋转变换来推导原始图像(单应性之前)和最终旋转图像之间的单应性H'?在


Tags: 图像利用参数度数单应单应性
2条回答

一个有趣的问题。为了帮助解释我的解决方案,我将定义几个符号:

  • I1:原始图像。在
  • I2:通过H变换I1后得到的图像。在
  • I3:通过3D相机旋转R变换I2得到的图像(您自己设置)。在
  • 对应于I2的未知摄像机内禀矩阵K。在

因为您的相机是旋转而不是平移的,所以您可以通过使用相应的单应矩阵扭曲图像来合成任何旋转矩阵R的虚拟视图。因此,为了合成这些视图,不需要尝试在3D中重建场景。在

现在,我假设我们有一个估计值K并给出从I1到I3的单应性方程。这回答了你问题的最后一部分。最后,我将给出一个很好的方法来估计K。那么你就拥有了你所需要的一切。在

让点<2D=>px。我们用向量p=(px,py,1)在齐次坐标系中定义这个点。同样地,让点q=(qx,qy,1)是点p在I3中的位置。将p转化为q的单应矩阵H'H'=Kinv(KH给出。对于您指定的任何R,您可以使用它来计算H',然后可以使用OpenCV的warpPerspective函数扭曲I1来合成新视图。在

推导。我们首先应用H将点放入I2。接下来,我们通过inv(K)将点转换为其在三维caméra坐标中的位置。然后我们应用旋转R,最后用K投影回图像。如果您不确定如何应用这样的投影变换,那么我强烈建议您深入阅读Hartley和Zisserman的《多视图几何》(Multiple View Geometry)。在

计算K。为此,我提出一个巧妙的策略,利用自由女神像。具体来说,注意她站在一个平台上,我假设这个平台是正方形的。这就是杀手锏!现在我们要用正方形来做一个粗略的摄像机校准。我假设没有镜头失真,K有简化形式,其中K=[f,0,cx;0,f,cy;0,0,1]。这意味着宽高比为1(通常数码相机的情况大致相同),主要点位于图像的中心:cx=w/2和cy=h/2,其中w和h分别是图像的宽度和高度。试图估计透镜畸变和更复杂的K矩阵将非常困难。镜头失真似乎并不明显,因为木材的边缘在图像中都大致是直的,所以可以忽略不计。在

现在我们要计算f。这将通过基于平面的摄像机校准来完成。著名的参考文献是张:一种灵活的相机校准新技术,位于https://www.microsoft.com/en-us/research/publication/a-flexible-new-technique-for-camera-calibration/

这样做的方法是首先在I2中点击雕像平面的四个可见角的4个角(见附图)。我们把这些叫做p1,p2,p3和p4,从左下角开始,顺时针旋转。然后,您可以使用OpenCV的相机校准方法从这4个角点得到K的估计值。重要的是,我们之所以能做到这一点,是因为我们知道平台是方形的。为了更深入地了解基于平面的校准,我建议阅读张的论文。如果您遇到困难,我可以在几分钟内亲自完成并发送K矩阵。在

four corner points on the statue's square stand

最后一点,这种方法的一个微小变化是使用您来校准r原始图像(假设你还保留着它)。其原因是H会使I2发生畸变,使其纵横比不接近1,主点不靠近图像中心。如果您使用原始图像进行校准(我们称之为矩阵K1),那么您将使用K=HK1。在

为了应用单应性,我建议使用OpenCV,更具体地说是warpPerspective函数https://docs.opencv.org/3.0-beta/modules/imgproc/doc/geometric_transformations.html#warpperspective

因为我们讨论的是一个纯旋转,没有相机平移,你确实可以通过使用单应性产生与这个旋转相对应的图像。但是要找到单应性参数作为轴方向和旋转角度的函数,你需要知道相机的内在参数,主要是焦距。在

如果你有相机模型,你可以解出方程,但是另一种获得单应矩阵的方法是计算变换后的目标点坐标,然后使用findHomography函数。或者你可以找到匹配点,然后计算单应性。在

如果你没有相机模型和旋转参数,或者两幅图像中的匹配点,你就无能为力了,你需要这些来找出单应性。你可以试着猜一下相机型号。你到底掌握了什么信息?在

相关问题 更多 >

    热门问题