一、相机模型与内参:从针孔到畸变,再到内外参标定的本质区别

各位同学,欢迎来到《外参标定与目标跟踪精度》的第一章。我是你们这门课的老朋友,一个在计算机视觉和SLAM领域摸爬滚打多年的工程师。今天咱们不聊虚的,直接切入正题——相机模型与内参。

你可能会问,为什么第一章不讲外参,反而讲内参?我的回答很简单:外参是骨架,内参是灵魂。没有准确的内参,你标定出来的外参就是空中楼阁。我在项目里见过太多人,外参标定怎么调都不对,最后发现是内参没标好。嗯,咱们先把地基打牢。

1.1 针孔相机模型:最朴素的成像原理

说白了,相机成像就是一个「把三维世界投影到二维平面」的过程。针孔相机模型是最基础、最经典的模型。它假设光线通过一个小孔(光心),在后面的成像平面上形成倒立的像。

你想想看,这个模型虽然简单,但它抓住了本质:线性投影关系。三维空间中的点 (X, Y, Z) 映射到图像平面上的点 (u, v),可以用一个简单的比例关系描述:

u = f * (X / Z) + u0
v = f * (Y / Z) + v0

这里 f 是焦距,u0、v0 是主点偏移。我个人习惯把主点想象成「光轴穿过图像平面的那个点」,它通常不在图像正中心,因为制造工艺有误差。

核心要点:针孔模型是线性的,但真实相机是非线性的。我们后面要讲的畸变模型,就是用来修正这个非线性偏差的。

1.2 内参矩阵 K:相机的「身份证」

内参矩阵 K 是啥?它就是把上面那个投影关系写成矩阵形式:

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

其中 fx、fy 是焦距在像素坐标系下的表示,cx、cy 是主点坐标。注意,fx 和 fy 通常不相等,因为像素可能不是正方形。我在做手机相机标定时,就遇到过 fx 和 fy 差了好几个像素的情况,这很正常。

内参矩阵 K 一旦确定,就代表这个相机的「内在属性」固定了。你换镜头、调光圈,K 都会变。所以每次拆装镜头后,我建议你重新标定一次内参。

我的经验:在SLAM系统中,内参矩阵 K 的精度直接影响三角化、重投影误差的计算。我曾经因为内参标定误差 0.5 个像素,导致整个建图漂移了 10%。别小看这 0.5 像素。

1.3 畸变模型:为什么直线会变弯?

真实相机不是完美的针孔。镜头有曲率,装配有偏差,所以图像会变形。畸变主要分两类:径向畸变和切向畸变。

径向畸变

这是最常见的畸变。说白了,就是光线经过镜头边缘时,折射角度和中心不一样。结果就是:直线变弯,越靠近边缘越明显。径向畸变用三个参数描述:k1、k2、k3。

x_distorted = x * (1 + k1*r^2 + k2*r^4 + k3*r^6)
y_distorted = y * (1 + k1*r^2 + k2*r^4 + k3*r^6)

这里 r 是像素到主点的距离。你会发现,r 越大,畸变越严重。我见过一些广角镜头,边缘畸变能达到 10% 以上,不校正根本没法用。

切向畸变

切向畸变是镜头和成像平面不平行造成的。比如镜头装歪了,或者传感器贴歪了。它用两个参数描述:p1、p2。

x_distorted = x + (2*p1*x*y + p2*(r^2 + 2*x^2))
y_distorted = y + (p1*(r^2 + 2*y^2) + 2*p2*x*y)

避坑指南:我曾经在标定一个工业相机时,只标了径向畸变,忽略了切向畸变。结果在后续的视觉定位中,误差始终降不下去。后来加上 p1、p2 重新标定,精度直接提升了一个量级。所以,千万别偷懒,五个畸变参数(k1、k2、p1、p2、k3)最好全标。

1.4 内参标定 vs 外参标定:本质区别

很多初学者搞不清内参和外参的区别。我打个比方:

  • 内参标定:是搞清楚「相机自己长什么样」。比如焦距多少、主点在哪、畸变多大。它只和相机本身有关,和它在空间中的位置无关。
  • 外参标定:是搞清楚「相机在空间中的位置和朝向」。比如它相对于世界坐标系或者另一个传感器(如激光雷达、IMU)的旋转和平移。

说白了,内参是「我是谁」,外参是「我在哪」。两者缺一不可。

对比项 内参标定 外参标定
标定对象 焦距、主点、畸变参数 旋转矩阵 R、平移向量 t
依赖条件 需要标定板(棋盘格、圆点阵等) 需要已知内参 + 对应点对
标定频率 一次标定,长期使用(除非换镜头) 每次安装或移动后重新标定
典型方法 张正友标定法 PnP、手眼标定、多传感器标定

重要提醒:外参标定的精度,严重依赖于内参的准确性。如果你的内参标定有误差,外参标定结果也会跟着偏。我见过一个团队,外参标定反复做都不收敛,最后发现是内参矩阵 K 里的 fx 写错了。嗯,这种低级错误,咱们尽量避免。

1.5 本章知识体系总览

为了让你更直观地理解本章的知识结构,我画了一张图。它展示了从针孔模型到内参矩阵,再到畸变模型,最后到内外参标定区别的完整逻辑链条。

第一章:相机模型与内参 - 知识体系 针孔相机模型 内参矩阵 K 畸变模型 内参标定 外参标定 内参标定:确定 K 和畸变参数(我是谁) 外参标定:确定 R 和 t(我在哪)

从这张图你可以看到,针孔模型是基础,内参矩阵 K 是核心,畸变模型是修正。内参标定负责确定 K 和畸变参数,而外参标定则依赖于内参标定的结果。两者是上下游关系,缺一不可。

我的建议:在实际项目中,先花 30 分钟把内参标定做扎实,再去做外参标定。别急着跳步。我曾经在一个自动驾驶项目中,因为内参标定没做好,导致后续的激光雷达-相机联合标定反复失败。后来重新标定内参,一次就过了。省下的时间,比标定内参花的时间多得多。

好了,第一章的内容就到这里。记住:内参是相机的「身份证」,外参是相机的「GPS」。搞清楚了这两者的区别和联系,后面的课程你才能跟得上。

可可精品资料库