【智能驾驶:视觉感知后处理 阅读笔记】Day4: 相机成像模型与畸变

书籍

相机成像模型与畸变

很多刚接触计算机视觉、自动驾驶的同学,都会被「相机成像模型」「畸变校正」这些词搞懵:

为什么同样的物体,拍出来会弯成弧形?鱼眼镜头为什么能拍180°?我们平时说的相机标定,到底在标什么?


相机成像模型:现实世界到图片的"翻译官"

相机成像模型,就是把真实三维世界的物体,转换成二维平面图像的数学规则。

你可以把它理解成相机的「翻译手册」,规定了"现实里的点,在图片上该出现在哪"。

我们平时用的相机,理论上都可以用针孔模型来近似,但真实镜头会带来各种"变形",所以我们还要理解畸变,甚至专门的鱼眼模型。


最基础的「针孔相机模型」:初中几何就能懂

针孔模型是所有相机模型的基础,核心原理就是我们初中学过的小孔成像相似三角形

1. 核心原理:小孔成像的数学表达

想象一个带小孔的黑盒子:外面的物体发出的光线,只能通过小孔,投射到盒子背面的成像平面上,形成倒立的像。

这个过程用相似三角形就能描述:

设相机坐标系里有一个点 Pc=(Xc,Yc,Zc)P_c=(X_c,Y_c,Z_c)Pc=(Xc,Yc,Zc),成像平面上的投影点为 (x,y)(x,y)(x,y),焦距为 fff,则:

x=f⋅XcZc,y=f⋅YcZcx = f \cdot \frac{X_c}{Z_c}, \quad y = f \cdot \frac{Y_c}{Z_c}x=f⋅ZcXc,y=f⋅ZcYc

再结合前面我们讲过的「世界→相机→图像→像素」的完整流程,就能得到针孔相机的完整成像公式:

Zcuv1=K⋅Rt01XwYwZw1Z_c\begin{bmatrix}u\\v\\1\end{bmatrix}=K\cdot\begin{bmatrix}R&t\\0&1\end{bmatrix}\cdot\begin{bmatrix}X_w\\Y_w\\Z_w\\1\end{bmatrix}Zc uv1 =K⋅R0t1⋅ XwYwZw1

其中:

  • KKK 是相机内参矩阵,描述镜头的光学属性
  • Rt01\begin{bmatrix}R&t\\0&1\end{bmatrix}R0t1 是相机外参矩阵,描述相机的位置和朝向

2. 为什么说它是"理想模型"?

针孔模型假设光线是直线传播的,不会被折射,也不会变形。

但现实中我们用的是带透镜的相机,光线穿过透镜时会发生折射,导致成像点和理论位置有偏差,这就是相机畸变


真实相机的"变形":相机畸变是什么?

简单说,畸变就是镜头让照片里的物体"变歪、变弯"了,比如直线拍出来变成弧线,方形的边变成弧形。

它主要分为两类:径向畸变切向畸变,其中径向畸变是最主要的。

1. 径向畸变:从中心向外的"拉伸/挤压"

径向畸变是由镜头的光学形状引起的,光线离镜头中心越远,弯曲得越厉害。

它又分为两种典型情况:

  • 桶形畸变:图像边缘向外膨胀,像个水桶,鱼眼镜头的畸变就是典型的桶形畸变
  • 枕形畸变 :图像边缘向内收缩,像个枕头,长焦镜头容易出现这种畸变
径向畸变校正公式(小白也能看懂)

我们可以用多项式来修正径向畸变带来的误差,标准公式如下:

xcorrected=x(1+k1r2+k2r4+k3r6)x_{\text{corrected}}=x(1+k_1r^2+k_2r^4+k_3r^6)xcorrected=x(1+k1r2+k2r4+k3r6)

ycorrected=y(1+k1r2+k2r4+k3r6)y_{\text{corrected}}=y(1+k_1r^2+k_2r^4+k_3r^6)ycorrected=y(1+k1r2+k2r4+k3r6)

  • (x,y)(x,y)(x,y):畸变的原始坐标
  • (xcorrected,ycorrected)(x_{\text{corrected}},y_{\text{corrected}})(xcorrected,ycorrected):校正后的坐标
  • rrr:点到图像中心的距离,r2=x2+y2r^2=x^2+y^2r2=x2+y2
  • k1,k2,k3k_1,k_2,k_3k1,k2,k3:径向畸变系数,由相机标定得到
    • 一般相机用 k1,k2k_1,k_2k1,k2 就能校正,鱼眼等大畸变镜头才需要用到 k3k_3k3

2. 切向畸变:镜头安装歪了导致的偏差

切向畸变主要是因为镜头和成像平面不平行,光线不是垂直入射的,导致成像点沿切线方向偏移。

这种畸变相对径向畸变来说影响更小,一般用两个参数 p1,p2p_1,p_2p1,p2 来校正,公式稍微复杂一点,这里就不展开了,记住它是用来修正"镜头装歪"带来的误差就行。

3. 相机标定:就是求这些参数

我们常说的「相机标定」,核心就是求出:

  • 内参矩阵 KKK(焦距、主点)
  • 畸变系数 k1,k2,k3,p1,p2k_1,k_2,k_3,p_1,p_2k1,k2,k3,p1,p2
    标定之后,我们就能用这些参数,把相机拍出来的畸变图像,还原成针孔模型下的理想图像,让后续的目标检测、SLAM等算法正常工作。

特殊场景:鱼眼相机模型

鱼眼相机是我们生活中很常见的特殊相机,车载环视、倒车影像、安防摄像头里基本都有它的身影。

1. 鱼眼相机的特点

  • 超大视角:FOV(视场角)通常大于180°,有的甚至能拍360°全景
  • 低光性能好:对光线不敏感,地库、夜晚也能拍出清晰画面
  • 运动模糊小:快速移动时图像不容易糊,适合车载场景

2. 鱼眼相机的成像原理

鱼眼镜头为了实现超大视角,光线经过镜头时会发生强烈折射,不再满足针孔模型的"直线传播"假设,所以需要专门的成像模型来描述。

简单来说,鱼眼相机的畸变是"设计出来的",它的镜头就是为了把180°的场景压缩到一张图里,所以边缘的变形会非常严重。


鱼眼相机的投影本质

鱼眼相机和普通针孔相机最大的区别,就是光线不再沿直线传播,而是被镜头折射后,投射到成像平面上。

我们用一个核心变量来描述这个过程:

  • θ\thetaθ:入射光线和镜头光轴的夹角(入射角)
  • rrr:光线在成像平面上,距离图像中心的距离
  • fff:相机的焦距

不同的投影模型,就是用不同的数学公式,描述 θ\thetaθ 和 rrr 之间的映射关系。


5种投影模型

1. 透视投影(针孔模型)

投影函数

r=ftan⁡θr=f\tan\thetar=ftanθ

  • 原理:就是我们前面讲过的普通针孔相机模型,光线沿直线传播,成像满足相似三角形。
  • 特点
    • 能保持直线不变形,拍出来的建筑、物体边缘都是直的
    • 缺点:视场角受限制,当 θ\thetaθ 接近90°时,tan⁡θ\tan\thetatanθ 会趋近于无穷大,无法实现180°视角
  • 适用场景:普通手机相机、监控摄像头

2. 体视投影(等角投影)

投影函数

r=2ftan⁡θ2r=2f\tan\frac{\theta}{2}r=2ftan2θ

  • 原理 :也叫等角投影,核心特点是保角性------物体的夹角在成像后保持不变。
  • 特点
    • 能保留物体的角度信息,不会让两条线的夹角变形
    • 可以实现比透视投影更大的视场角
  • 适用场景:早期的鱼眼相机、一些测绘类设备

3. 等距投影(鱼眼最常用)

投影函数

r=fθr=f\thetar=fθ

  • 原理 :这是车载鱼眼相机最主流的模型,公式最简单,计算也最方便。
  • 特点
    • 成像平面上,点到中心的距离 rrr,和入射角 θ\thetaθ 成正比
    • 不会出现透视投影那种边缘拉伸严重的问题,视场角可以轻松超过180°
  • 适用场景:车载环视摄像头、倒车影像、大部分消费级鱼眼相机

4. 等积投影

投影函数

r=2fsin⁡θ2r=2f\sin\frac{\theta}{2}r=2fsin2θ

  • 原理 :核心特点是保面积性------物体在三维空间中所占的立体角,投影到二维图像上后,面积比例保持不变。
  • 特点
    • 能保证图像上的面积比例和真实世界一致
    • 边缘变形比等距投影小,但计算稍复杂
  • 适用场景:地图测绘、天文观测、全景相机

5. 正交投影

投影函数

r=fsin⁡θr=f\sin\thetar=fsinθ

  • 原理:光线平行于光轴投影,相当于从正前方"压扁"三维物体。
  • 特点
    • 视场角受限制,最大不能超过180°(θ=90°\theta=90°θ=90°时,r=fr=fr=f;θ>90°\theta>90°θ>90°时,sin⁡θ\sin\thetasinθ会减小)
    • 畸变非常大,边缘物体被严重压缩
  • 适用场景:工业测量、一些特殊的光学设备

一张表看懂5种模型的区别

投影模型 核心公式 关键特性 视场角能力 典型应用
透视投影 r=ftan⁡θr=f\tan\thetar=ftanθ 直线不变形 小于120° 普通相机
体视投影 r=2ftan⁡θ2r=2f\tan\frac{\theta}{2}r=2ftan2θ 角度不变形 约140° 早期鱼眼
等距投影 r=fθr=f\thetar=fθ 距离与入射角成正比 可超180° 车载鱼眼
等积投影 r=2fsin⁡θ2r=2f\sin\frac{\theta}{2}r=2fsin2θ 面积比例不变 约180° 测绘/天文
正交投影 r=fsin⁡θr=f\sin\thetar=fsinθ 边缘畸变最大 不大于180° 工业测量

为什么车载鱼眼用等距投影?

  1. 视场角够大:能轻松实现180°以上的视角,覆盖车辆周围无死角
  2. 计算简单 :r=fθr=f\thetar=fθ 这个公式最容易实现,实时去畸变、拼接环视图像时效率高
  3. 变形均匀:图像边缘不会像透视投影那样严重拉伸,拼接后的画面更自然

总结

  1. 针孔相机模型:相机成像的基础,用相似三角形描述"3D点→2D像素"的关系,是理想无畸变的模型。
  2. 相机畸变:真实镜头导致的成像偏差,主要分为径向畸变(桶形/枕形)和切向畸变,通过标定得到的系数可以校正。
  3. 鱼眼相机:为了实现超大视角,采用特殊的折射成像,畸变是其固有特性,需要专门的模型处理。
  4. 相机标定:求出内参和畸变系数,让相机从"真实镜头"变回"理想针孔模型",是所有视觉算法的前提。
相关推荐
十月的皮皮1 小时前
C语言学习笔记20260615-有序升序序列合并
c语言·笔记·学习
辣香牛肉面4 小时前
CintaNotes个人笔记管理软件v3.14(v3.13.0 绿色汉化版)
笔记
yoothey6 小时前
异常学习笔记:为什么自定义异常后还要 throw?
笔记·学习
sulikey7 小时前
数据库系统概论4 - 更新与视图 期末速成课笔记
数据库·笔记·考试·期末速成·数据库系统概论
لا معنى له7 小时前
NeoVerse: Enhancing 4D World Model with in-the-wild Monocular Videos
人工智能·笔记·机器学习·语言模型
黄毛火烧雪下7 小时前
Java 基础笔记:文件、递归与字符编码
java·开发语言·笔记
学计算机的计算基7 小时前
链表算法上篇:LeetCode 206/234/141/142/160/21 题解与易错点
java·笔记·算法·链表
二哈赛车手8 小时前
新人笔记---idea索引失效问题解决方案
java·笔记·spring·elasticsearch·intellij-idea
A.零点9 小时前
【2个月 C 语言从入门到精通:零基础系统教程】第十二讲:深入了解指针(五)
c语言·开发语言·网络·笔记·visual studio