第四节:相机内参矩阵——从几何到像素的“翻译官”

好,咱们今天来聊聊相机内参矩阵。说实话,我刚开始接触标定时,觉得这东西就是个数学公式堆砌出来的黑盒子。直到有一次做三维重建,发现投影点总是对不上,折腾了两天才意识到是内参搞错了。嗯,从那以后我再也不敢小看这个矩阵了。

内参矩阵,说白了就是相机把三维世界“翻译”成二维像素的规则。它告诉你:一个空间点,经过镜头折射、传感器采样,最终落在图像哪个像素上。没有它,你连最基本的坐标映射都做不了。

4.1 内参矩阵的构成——3×3的“密码本”

内参矩阵通常写成这样:

K = [fx  0  cx]
    [ 0  fy  cy]
    [ 0   0   1]

你看,就是一个3×3的上三角矩阵。我习惯把它拆成三部分来看:

  • 对角线上的fx、fy:这是焦距参数,单位是像素
  • 主点偏移cx、cy:光轴与成像平面的交点
  • 最后一行[0,0,1]:齐次坐标的“保底”行,保证投影变换是线性的

为什么是3×3?因为我们要把三维点(X,Y,Z)映射到二维像素(u,v),中间需要一次齐次坐标变换。你想想看,如果没有这个矩阵,你连相机坐标系下的点都转不到图像平面上去。

核心理解:内参矩阵描述的是“相机内部”的几何属性,跟相机放在哪里、朝哪个方向无关。它只取决于镜头和传感器本身。

4.2 焦距与主点——两个最关键的参数

咱们先聊焦距。这里的fx、fy不是物理焦距f(单位毫米),而是物理焦距乘以像素密度

fx = f * mx
fy = f * my

其中mx、my是每毫米有多少个像素。举个例子,我的手机摄像头物理焦距是4mm,传感器每毫米有250个像素,那fx就是1000像素。明白了吧?

我在项目中遇到过一个问题:用同一台相机拍不同分辨率,内参矩阵必须重新标定。为什么?因为分辨率变了,mx、my就变了,fx、fy自然也跟着变。有人偷懒直接缩放内参,结果误差大得离谱。

再说主点(cx, cy)。理想情况下,主点应该在图像正中心,比如640×480的图像,主点应该是(320, 240)。但实际呢?

  • 镜头安装有偏差,光轴不一定垂直穿过传感器中心
  • 传感器本身也有制造公差
  • 我见过最离谱的一次,主点偏了30多个像素,标定前完全没发现

个人经验:标定后一定要检查主点位置。如果cx偏离图像宽度一半超过5%,先检查镜头安装,别急着调算法。

4.3 内参的物理意义——每个数字都在讲故事

咱们把内参矩阵拆开,看看每个参数到底在说什么:

参数物理意义常见范围我的备注
fx水平方向上的“放大倍数”500~3000像素广角镜头偏小,长焦偏大
fy垂直方向上的“放大倍数”500~3000像素一般与fx接近,但可能有差异
cx光轴在图像上的水平偏移图像宽度的一半±50偏差大说明镜头偏心
cy光轴在图像上的垂直偏移图像高度的一半±50偏差大说明镜头倾斜

你可能会问:fx和fy为什么不相等?嗯,这里有个坑。如果传感器像素不是正方形(比如某些工业相机),那mx和my就不一样,fx和fy自然不同。我做过一个项目,用的相机像素是6μm×6μm,正方形,所以fx≈fy。但换了一台5.6μm×5.6μm的,结果还是差不多。真正让我头疼的是那种像素是矩形的传感器,fx和fy能差出5%以上。

避坑指南:我曾经在标定一个鱼眼镜头时,发现fx和fy差了将近10%。一开始以为是标定板没放平,反复标定了5次,结果都一样。后来查手册才发现,那个传感器的像素确实是矩形的。所以,别默认像素是正方形的,先查传感器规格书。

4.4 内参矩阵的几何解释——从世界到像素的“流水线”

咱们用个具体的例子来理解。假设相机坐标系下有个点P=(X, Y, Z),它怎么变成像素(u, v)?

  1. 归一化:先除以Z,得到归一化坐标(x', y') = (X/Z, Y/Z)
  2. 透镜畸变:实际镜头会有径向畸变和切向畸变,这一步会修正坐标(下节课讲)
  3. 内参映射:用内参矩阵把归一化坐标变成像素坐标

第三步的数学表达就是:

u = fx * x' + cx
v = fy * y' + cy

你看,其实就是个线性变换加平移。fx控制水平缩放,fy控制垂直缩放,cx和cy控制平移。我经常跟团队说:内参矩阵就是相机给三维世界加的一层“滤镜”,它决定了你能看到多大范围、多清晰的细节。

一句话总结:内参矩阵把“物理世界中的角度”变成了“图像上的像素位置”。fx、fy决定了角度变化对应多少像素移动,cx、cy决定了图像的原点在哪里。

4.5 实际应用中的注意事项

最后分享几个我踩过的坑:

  • 内参不是一成不变的:变焦镜头、自动对焦都会改变内参。我做过一个项目,相机自动对焦时fx会变化2%~3%,如果不重新标定,三维重建直接崩掉。
  • 温度影响:工业相机在高温环境下,传感器会热膨胀,内参会有微小漂移。我曾经在夏天户外做标定,上午和下午的内参差了0.5%,后来加了温控才解决。
  • 标定板质量:别用打印在普通纸上的标定板,纸张受潮会变形。我建议用玻璃基板或者铝基板,精度高一个数量级。

我的习惯:每次标定完,我都会用内参矩阵反投影几个已知点,看看重投影误差。如果误差超过0.5像素,我会重新标定。别嫌麻烦,这一步能省后面很多调试时间。

好了,内参矩阵就讲到这里。下节课咱们聊聊畸变系数——那个让直线变弯的“捣蛋鬼”。