【问题标题】:How to construct camera matrix from known parameters如何从已知参数构造相机矩阵
【发布时间】:2019-12-22 23:10:44
【问题描述】:

我希望将使用我知道所有参数(焦距、传感器尺寸、X、Y、Z、旋转(omega、phi、kappa)的相机拍摄的图像投影到 2D 平面上。我知道我需要在能够进行平面单应性之前构造相机矩阵,但是如何?

我已经成功地在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

【问题讨论】:

    标签: python camera homography projective-geometry


    【解决方案1】:

    相机矩阵 P 是一个 4x3 矩阵,形式为 P = K[R t]:

    • K 是一个 3x3 矩阵,包含内在参数(主点和焦距,以像素为单位)
    • [R t] 是一个 3x4 矩阵,通过连接 R,一个 3x3 矩阵,表示从相机坐标系到世界坐标系的旋转,和 t,一个 3 向量,表示世界原点在坐标系中的位置相机框架。

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

    您首先必须知道如何从您拥有的三个角度计算 3x3 相机旋转矩阵,并且从三个角度有许多可能的旋转矩阵表示。最常见的是偏航/俯仰/滚动,以及具有所有可能旋转顺序的欧拉角。

    3x3 内在矩阵 K 为 [[f 0 cx][0 f cy][0 0 1]],其中 f = 26/0.00551 = 4719 且 (cx,cy) 是主点,您可以取作为图像的中心(4288/2,2848/2)。

    然后要计算从世界高度 Z0 的平面到图像的单应性(3x3 矩阵),将 P 乘以 (X,Y,Z0,1),得到 Xv1 + Yv2 形式的表达式+ v3 其中 v1、v2 和 v3 是 3 向量。矩阵 H=[v1 v2 v3] 是您正在寻找的单应性。 PIL.Image.transform 的 8 个系数应该是该矩阵的前 8 个系数,除以第 9 个。

    【讨论】:

    猜你喜欢
    • 2020-01-09
    • 2022-11-02
    • 2021-12-22
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多