如何从已知参数构建相机矩阵

2024-04-16 17:30:34 发布

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

我想把一个我知道所有参数(焦距、传感器尺寸、X、Y、Z、旋转(ω、φ、kappa)的相机拍摄的图像投影到二维平面上。我知道在做平面单应之前我需要构造一个摄像机矩阵,但是怎么做呢?你知道吗

我在this answer之后的每个平面上用4对已知的点成功地生成了一个矩阵,但这不是我想要的方法。我已经看过了this video,它给出了我几乎所有的答案,但是名为“外部参数”的矩阵并没有被完整地描述。如何构造摄像机位置的旋转矩阵R和矩阵T?你知道吗

有了最终的摄像机矩阵,假设我可以获取每个参数并将它们提供给PIL.Image.transform。我也乐于使用python OpenCV库。你知道吗

以下是一些示例数据:

Original image here(4288 x 2848像素)

#Camera position
X:   72003 m
Y: 1070100 m
Z:    1243 m

#Rotation of camera
Omega:    0°
Phi:     27°
Kappa:  -38°

Focal length: 26 mm
Pixel size on sensor: 0.00551 mm

Tags: 方法answer图像参数尺寸矩阵传感器this
1条回答
网友
1楼 · 发布于 2024-04-16 17:30:34

相机矩阵p是形式为p=K[R t]的4x3矩阵:

  • K是一个3x3矩阵,包含内在参数(以像素为单位的主点和焦距)
  • [rt]是通过连接表示从相机帧到世界帧的旋转的3x3矩阵R和表示世界原点在相机帧中的位置的3向量t而获得的3x4矩阵。你知道吗

这意味着你拥有的参数,似乎是相机在世界帧中的位置,必须反转。[rt]的逆是[R't'],其中R'=逆(R)=转置(R),t'=-逆(R)t

你首先要知道如何从三个角度来计算3x3相机的旋转矩阵,并且从三个角度来计算旋转矩阵有很多可能的表示形式。最常见的是偏航/俯仰/横摇,以及所有可能的旋转顺序的欧拉角。你知道吗

3x3内部矩阵K为[[f 0 cx][0 f cy][0 0 1]],其中f=26/0.00551=4719,(cx,cy)是主点,可以将其作为图像的中心(4288/22848/2)。你知道吗

然后,为了计算从世界高度Z0的平面到图像的单应性(3x3矩阵),将p乘以(X,Y,Z0,1),得到Xv1+Yv2+v3的表达式,其中v1,v2和v3是3向量。矩阵H=[v1 v2 v3]是您要查找的单应性。的8个系数像素图像变换应该是该矩阵的前8个系数除以第9个系数。你知道吗

相关问题 更多 >