1. 鱼眼图像校正概述

鱼眼镜头这东西,我第一次接触是在一个全景监控项目里。甲方要求一个摄像头看住整个大厅,普通镜头根本做不到,最后只能上鱼眼。结果画面是拍全了,但人都是弯的——嗯,这就是我们今天要聊的核心问题。

说白了,鱼眼图像校正就是把那些扭曲得不成样子的画面,还原成我们肉眼看着舒服的样子。这活儿看着简单,做起来门道不少。

鱼眼镜头的成像原理

普通镜头追求的是「所见即所得」,光线直线传播,成像符合小孔成像模型。鱼眼镜头不一样,它故意让光线弯着走。

怎么做到的呢?前组镜片做得特别凸,像个半球一样鼓出来。光线射进来先被狠狠折射一次,然后才进入后面的镜组。这样一来,原本只能看到 50° 视野的传感器,硬生生能拍到 180° 甚至 220°。

关键点:鱼眼镜头用「压缩边缘」换「广阔视野」。画面中心区域保持得还行,越往边缘走,压缩越厉害,畸变越明显。

我习惯把鱼眼镜头的成像模型分成两类:

  • 等距投影模型:入射角与像高成正比。这是最常见的模型,OpenCV 里用的就是它。
  • 等立体角投影模型:入射角与像高满足正弦关系。某些全景相机用这个。
  • 正交投影模型:入射角与像高满足正弦关系,但角度范围有限。
  • 体视投影模型:保持局部角度不变,适合做全景拼接。

实际项目中,我遇到过最头疼的事:同一款镜头,不同批次的光学参数居然有差异。所以千万别信厂家给的那张参数表,老老实实自己标定才是正道。

畸变类型:径向畸变与切向畸变

鱼眼镜头的畸变不是一种,是两种叠加的结果。我刚开始做校正时没分清这两者,结果调了半天效果都不对。

畸变类型 产生原因 表现特征 校正难度
径向畸变 镜片曲率导致光线弯曲 直线变曲线,越靠边缘越明显 中等,可用多项式拟合
切向畸变 镜片与传感器不平行 画面倾斜、梯形失真 较低,通常用仿射变换

径向畸变

这是鱼眼镜头的主要畸变。你想想看,一个直线从画面中心延伸到边缘,在鱼眼图像里就变成了一条弧线。为什么会这样?因为镜头对边缘光线的折射率比中心大。

数学上通常用泰勒级数展开来描述:

// 径向畸变模型
x_distorted = x * (1 + k1*r² + k2*r⁴ + k3*r⁶)
y_distorted = y * (1 + k1*r² + k2*r⁴ + k3*r⁶)

// 其中 r² = x² + y²,k1、k2、k3 是畸变系数

我记得有一次做车载环视系统,用了 4 个鱼眼镜头。每个镜头的 k1、k2 都不一样,最离谱的那个 k1 值比标称大了 30%。从那以后,我养成了一个习惯:每个镜头单独标定,绝不复用参数。

避坑指南:我曾经因为偷懒,用同一个标定文件处理两个同型号镜头,结果拼接缝处差了 15 个像素。后来老老实实逐个标定,问题才解决。鱼眼镜头个体差异比你想象的大得多。

切向畸变

切向畸变相对好理解。镜片安装时不可能平行于传感器平面,哪怕偏了 0.1°,画面就会出现梯形失真。

校正公式也不复杂:

// 切向畸变模型
x_distorted = x + (2*p1*x*y + p2*(r² + 2*x²))
y_distorted = y + (p1*(r² + 2*y²) + 2*p2*x*y)

// p1、p2 是切向畸变系数

实际项目中,切向畸变通常比径向畸变小一个数量级。但别忽视它——在精度要求高的场景(比如视觉测量),这点偏差足以让结果不可用。

校正的必要性与应用场景

为什么要校正?说白了,鱼眼图像虽然看得广,但人眼看着难受,机器也认不出来。我见过一个安防项目,人脸识别算法在鱼眼图像上直接崩溃——因为人脸都变形了,特征点根本对不上。

校正的必要性体现在三个层面:

  1. 人眼可读性:监控画面、全景照片,用户需要看到正常的画面。
  2. 算法兼容性:目标检测、人脸识别、SLAM 等算法,大多假设输入是透视图像。
  3. 测量精度:畸变会引入像素级误差,影响距离、角度等测量结果。

应用场景我列几个典型的:

  • 车载环视系统:4-6 个鱼眼镜头拼接成 360° 鸟瞰图,每个镜头必须先校正再拼接。
  • 安防监控:一个鱼眼摄像头覆盖整个大厅,校正后可以分区查看。
  • 全景相机:消费级全景相机(如 Insta360)内部都在做实时校正。
  • 视觉 SLAM:鱼眼镜头视野大,特征点丰富,但必须先校正才能用传统算法。
  • 工业检测:管道内壁检测、大范围表面缺陷检测。

个人经验:我建议你在选校正算法前,先想清楚应用场景。如果是实时视频流,就别用迭代优化算法,太慢了。如果是离线处理,精度优先,计算时间可以放宽。场景决定算法,这个顺序别搞反了。

下面这张图是我自己整理的鱼眼图像校正知识体系,帮你快速建立整体认知:

鱼眼图像校正知识体系 鱼眼图像校正知识体系 鱼眼图像校正 成像原理 等距投影模型 等立体角投影模型 正交 / 体视投影模型 畸变类型 径向畸变(k1, k2, k3) 切向畸变(p1, p2) 畸变系数标定 应用场景 车载环视系统 安防监控 / 全景相机 视觉SLAM / 工业检测 核心思路:先理解成像模型 → 再标定畸变系数 → 最后选择校正算法 场景决定算法,精度与速度需要权衡

嗯,这一章的内容就到这里。鱼眼图像校正不是一锤子买卖,从理解成像原理到标定畸变系数,每一步都有坑。后面我们会深入具体的校正算法,到时候再细聊。