第四节:相机内参矩阵——从几何到像素的“翻译官”
好,咱们今天来聊聊相机内参矩阵。说实话,我刚开始接触标定时,觉得这东西就是个数学公式堆砌出来的黑盒子。直到有一次做三维重建,发现投影点总是对不上,折腾了两天才意识到是内参搞错了。嗯,从那以后我再也不敢小看这个矩阵了。
内参矩阵,说白了就是相机把三维世界“翻译”成二维像素的规则。它告诉你:一个空间点,经过镜头折射、传感器采样,最终落在图像哪个像素上。没有它,你连最基本的坐标映射都做不了。
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)?
- 归一化:先除以Z,得到归一化坐标(x', y') = (X/Z, Y/Z)
- 透镜畸变:实际镜头会有径向畸变和切向畸变,这一步会修正坐标(下节课讲)
- 内参映射:用内参矩阵把归一化坐标变成像素坐标
第三步的数学表达就是:
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像素,我会重新标定。别嫌麻烦,这一步能省后面很多调试时间。
好了,内参矩阵就讲到这里。下节课咱们聊聊畸变系数——那个让直线变弯的“捣蛋鬼”。