You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于相机投影矩阵中主点偏移c_x、c_y作用的技术疑问

相机矩阵中主点偏移(c_x、c_y)的几何原理解释

嘿,我来帮你把这个困惑的几何问题彻底掰明白!

首先得理清两个坐标系的差异,这是理解c_x、c_y作用的核心:

1. 投影坐标系 vs 图像存储坐标系

  • 投影坐标系:这是相机透视投影的「自然坐标系」,原点是主点(Principal Point)——也就是相机光轴与成像平面的交点。当3D空间点通过透视投影到成像平面时,最初计算出的坐标(比如u' = f_x*(X/Z)、v' = f_y*(Y/Z))都是相对于这个主点的:主点右侧为u'正方向,主点下方为v'正方向。
  • 图像存储坐标系:我们日常处理图像时用的坐标系,原点在图像的左上角,向右为x轴正方向,向下为y轴正方向。

2. 为什么要加c_x和c_y?

主点在图像存储坐标系中的位置就是(c_x, c_y)(比如一张1920×1080的图像,主点通常接近(960, 540))。我们需要把投影坐标系下的坐标转换到图像存储坐标系,本质就是一次坐标平移:

  • 假设投影坐标系下某点相对于主点的水平偏移是u',那它在图像坐标系中的x坐标就是「主点的x坐标c_x + 水平偏移u'」,也就是u_image = c_x + u'
  • 同理,垂直方向就是v_image = c_y + v'

结合OpenCV的相机矩阵公式来看:
相机矩阵是:

[ f_x  0  c_x ]
[  0  f_y c_y ]
[  0   0   1  ]

当它和3D点的齐次坐标[X, Y, Z]^T相乘后,得到:

[ f_x*X + c_x*Z ]
[ f_y*Y + c_y*Z ]
[      Z        ]

除以Z(透视除法)后,就得到图像坐标系下的最终坐标:
( f_x*(X/Z) + c_x , f_y*(Y/Z) + c_y )

举个直观的例子

假设主点在图像中的位置是(960, 540),某个3D点投影后相对于主点的水平偏移是+100像素(主点右侧100像素),垂直偏移是+50像素(主点下方50像素):

  • 投影坐标系下的坐标是(100, 50)
  • 转换到图像坐标系后就是(960+100, 540+50) = (1060, 590),这完全符合我们对图像像素位置的认知。如果不加c_x、c_y,得到的(100,50)会指向图像左上角附近的位置,这显然和实际投影位置完全不符。

简单来说:c_x和c_y就是帮我们把投影的「自然原点」(主点),平移到图像存储的「原点」(左上角),让计算出的像素坐标和图像实际存储的位置对应起来。

内容的提问来源于stack exchange,提问作者Carpetfizz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:40:25