想要将单应矩阵与鸟眼视图联系起来,我知道相机的投影矩阵。他们之间有什么关系吗?
感谢。
答案 0 :(得分:0)
投影矩阵被定义为相机的内在(例如焦距,主点等)和外在(旋转和平移)矩阵的乘积。问题是w.r.t您的轮换和翻译是什么?例如,我可以想象另一个相机或3D物体,您可以使用这些旋转和平移。否则,您的投影只是一个内在矩阵。
首先考虑一下您需要了解的信息才能获得鸟瞰图:您至少需要了解相机在地面上的定向方式。如果您还知道摄像机高程,则可以创建度量重建。但是既然你提到了单应性,我认为你会考虑平面的鸟瞰图,因为单应性映射了两个平面上的点,在你的情况下是平坦地面上的点到点在你的平板传感器上。
让我们考虑一个针孔相机方程。它基本上是这样说的 [u,v,1] T ~A * [R | t] [x,y,z,1] T ,其中A是相机固有矩阵。现在,既然你处理了地面平面,你可以通过设置z = 0来对齐新的坐标系。 R | t是从该坐标系到相机对齐系统的旋转和平移矩阵;
接下来,请注意您的R | t是一个3x4矩阵,由于z = 0,它会丢失一个维度;变成3x3或Homography,现在等于H = A * R'| t;好的,我们所做的只是证明地面和传感器之间存在单应性映射;
现在,您需要在纯摄像机旋转期间发生的另一种单应性,并在旋转/缩放之前和之后在传感器上的点之间进行缩放;那就是你要旋转相机并可能缩小。再次,考虑一个针孔相机方程式:最初你有H1 = A(这里我把R | T当作无关紧要)然后你旋转你的相机你有H2 = AR;换句话说,H1是您现在制作图像的方式,H2是您希望图像的样子
两者之间的关系是你想要找到的,H12,它也是一个单应性,因为Homography是一个家族的转换(使用这个简单的启发式:一个家庭中发生的事情留在家里) 。由于同一表面可以生成H1或H2的图像,我们可以通过撤消H1(返回地平面)和应用H2(从地面到传感器鸟瞰图)来组装H12;在某种程度上,这类似于使用向量的操作,您只需要尊重矩阵应用程序的顺序,从从右到左:
H12 = H2 * H1 -1 = A * R * A -1 = P * A -1 ,我们将H1,H2的表达式替换为投影矩阵(如果你有的话)
这是你的答案,如果旋转R未知,可以从相机方向猜测w.r.t.地面或使用opeCV库中的solvePnP()计算。最后,当我在手机上执行此操作时,我只是将其加速度计读数用作良好的近似值,因为当手机未加速时,读数表示重力矢量,其给出旋转w.r.t.平坦的水平地面。
当您将鸟瞰图绘制为图像时,您会注意到它的边界从矩形转变为某种梯形(由于相机平截头体形状),并且在远处有一些洞(由于不足采样率)。您可以使用wrapPerspective()
在孔内插值