3、相机成像模型:针孔相机模型原理、内参矩阵(fx, fy, cx, cy)详解

各位同学,今天我们来聊聊相机成像模型。说实话,这是整个传感器融合里最基础、也最容易踩坑的一环。我当年刚入行时,对着内参矩阵看了三天,愣是没搞明白fx和fy到底差在哪。后来在项目里亲手标定了几十次相机,才真正吃透这些参数。

相机成像,说白了就是把三维世界里的点,映射到二维图像上。这个映射过程,我们用一个数学模型来描述——就是针孔相机模型。

3.1 针孔相机模型原理

针孔相机模型,名字听着挺唬人,其实原理很简单。你想想看,一个暗箱,前面戳个小孔,光线穿过小孔,在后面的感光平面上成像。这就是最原始的相机。

为什么叫「针孔」?因为小孔越小,成像越清晰,但进光量也越少。实际相机用透镜代替了小孔,但数学模型还是沿用针孔那一套。

这个模型的核心假设是:所有光线都通过一个点,这个点叫光心(Camera Center)。三维空间中的点P,经过光心投影到成像平面上,得到点p。这就是中心投影。

关键公式:

假设三维点P = (X, Y, Z),投影到图像上的像素坐标为(u, v)。那么:

u = fx * (X / Z) + cx
v = fy * (Y / Z) + cy

这个公式,就是整个相机模型的灵魂。

我在项目中遇到过一件事:有个同事死活想不通,为什么Z在分母上?其实很简单——远处的物体看起来小,近处的看起来大,这个「近大远小」的效果,就是靠除以Z来实现的。

3.2 内参矩阵详解

内参矩阵,通常用K表示,是一个3x3的矩阵:

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

这个矩阵里,四个参数决定了相机的一切内部特性。我们来一个一个拆解。

3.2.1 fx 和 fy:焦距参数

fx和fy,说白了就是焦距在像素单位下的度量。为什么会有两个?因为相机的像素不一定是正方形的。

你想想看,如果每个像素是长方形,那么水平方向和垂直方向的缩放就不一样。fx对应水平方向的焦距,fy对应垂直方向的焦距。

我记得有一次标定工业相机,发现fx和fy差了将近5%。一开始我以为是标定出错了,后来查了传感器手册才发现——那款相机的像素确实是1.05:1的长方形。嗯,这很正常。

个人经验:

如果你用的相机是普通消费级产品,fx和fy通常非常接近。但如果发现差异超过2%,建议检查一下标定数据是否可靠。我曾经因为标定板没放平,导致fx和fy差了10%,折腾了两天才找到原因。

3.2.2 cx 和 cy:主点偏移

cx和cy是主点(Principal Point)的坐标。主点就是光轴与成像平面的交点。理论上,主点应该在图像正中心,也就是(width/2, height/2)。

但实际生产中,由于镜头安装的机械误差,主点往往会有几个像素的偏移。我见过最夸张的一次,某款工业相机的主点偏移了15个像素——这会导致投影误差,尤其在图像边缘区域。

为什么会这样?因为镜头和传感器不可能完美对齐。哪怕偏差0.1毫米,在像素层面就是好几个像素的差距。

避坑指南:

我曾经在融合激光雷达和相机数据时,忽略了主点偏移。结果投影到图像上的激光点,总是偏了几个像素。排查了三天,最后发现是标定文件里用了默认的cx=320, cy=240,而实际主点是(325, 238)。

所以,永远不要用默认值。每个相机都要单独标定。

3.3 内参矩阵的几何意义

内参矩阵K,其实描述了三件事:

  • 缩放:fx和fy决定了三维坐标到像素坐标的缩放比例
  • 平移:cx和cy决定了坐标系原点的偏移
  • 畸变:内参矩阵本身不包含畸变,但实际使用中通常配合畸变参数一起用

我习惯把内参矩阵理解成一个「转换器」——它把相机坐标系下的三维点,转换成图像上的像素坐标。没有这个矩阵,我们就没法把激光雷达的点云投影到图像上。

3.4 实际应用中的注意事项

讲到这里,我想强调几个实际项目中容易忽略的点:

  1. 单位问题:fx和fy的单位是像素,不是毫米。如果你需要物理焦距,要用公式 f_mm = fx * pixel_size
  2. 分辨率变化:如果你裁剪或缩放图像,内参矩阵必须跟着变。我见过有人直接拿原始标定的内参去处理裁剪后的图像,结果投影全偏了
  3. 畸变校正:内参矩阵假设没有畸变。实际镜头都有畸变,尤其是广角镜头。必须先做畸变校正,再用内参矩阵投影

核心要点总结:

针孔相机模型 = 中心投影 + 内参矩阵

内参矩阵K = [fx, 0, cx; 0, fy, cy; 0, 0, 1]

fx, fy:焦距的像素度量,决定缩放

cx, cy:主点偏移,决定图像中心

3.5 知识体系结构图

下面我用一张SVG图,把本章的核心逻辑串起来。你一看就明白了。

相机成像模型知识体系 针孔相机模型 中心投影原理 内参矩阵 K 实际应用 光心与投影 近大远小 fx, fy cx, cy 畸变校正 分辨率适配 核心公式:u = fx * (X/Z) + cx, v = fy * (Y/Z) + cy ⚠ 每个相机必须单独标定,不要使用默认内参

这张图把本章的核心内容串起来了。从针孔相机模型出发,左边是原理,中间是内参矩阵,右边是实际应用。你顺着这个结构去理解,就不会乱了。

好了,这一章就讲到这里。内参矩阵是相机模型的核心,也是后续激光雷达与相机联合标定的基础。下一章我们会讲畸变模型——嗯,到时候再聊。

可可精品资料库