传感器基础(上):摄像头工作原理、坐标系与内参外参、图像数据格式
大家好,我是你们这趟感知融合之旅的向导。今天咱们聊聊摄像头——感知系统里最基础、也最像人眼的传感器。
说实话,我刚入行那会儿,觉得摄像头不就是个拍照片的嘛,有啥好学的?后来在项目里栽了跟头才明白,不懂摄像头的工作原理和坐标系,你连标定都做不明白。嗯,咱们今天就把这块硬骨头啃下来。
一、摄像头是怎么“看”世界的?
摄像头的工作原理,说白了就是小孔成像的升级版。光线通过镜头,投射到感光元件上,光电转换后变成数字信号。
我习惯把摄像头拆成三部分来理解:
- 镜头(Lens):负责聚光和对焦。焦距越短,视野越宽,但物体看起来越小。
- 感光元件(Sensor):把光信号转成电信号。常见的有CCD和CMOS,现在自动驾驶基本都用CMOS,功耗低、速度快。
- ISP(图像信号处理器):把原始数据加工成我们能看的图像。包括去噪、白平衡、色彩校正等。
你想想看,摄像头每秒能拍30帧甚至60帧图像,每帧图像里包含数百万个像素点。这些像素点就是感知算法的原材料。
二、坐标系:把世界“翻译”给算法
摄像头拍到的是一张2D图片,但我们要做的是从2D里还原3D信息。这就绕不开坐标系。
自动驾驶里常用的坐标系有四个:
| 坐标系 | 原点 | 用途 |
|---|---|---|
| 世界坐标系 | 自定义(如车辆启动位置) | 描述物体在真实世界中的位置 |
| 相机坐标系 | 摄像头光心 | 以摄像头为中心的3D坐标 |
| 图像坐标系 | 图像中心 | 2D平面坐标(毫米单位) |
| 像素坐标系 | 图像左上角 | 像素位置(行列号) |
为什么会搞这么复杂?因为数据在不同坐标系之间流转,每一步都需要精确的数学变换。
举个例子:路上有个行人,他的GPS坐标(世界坐标系)→ 摄像头看到的3D位置(相机坐标系)→ 成像平面上的点(图像坐标系)→ 最终在屏幕上的像素位置(像素坐标系)。每一步都对应一个变换矩阵。
三、内参和外参:摄像头的“身份证”和“户口本”
内参和外参是标定的核心。我当年第一次做标定,把内参和外参搞混了,结果投影出来的3D点全飞了。后来我给自己编了个口诀:内参管“怎么看”,外参管“在哪看”。
内参矩阵(Intrinsic Matrix)
内参描述的是摄像头本身的特性,包括:
- 焦距(fx, fy):单位是像素。注意,fx和fy通常不一样,因为像素不是正方形。
- 主点(cx, cy):光轴与成像平面的交点,一般在图像中心附近。
- 畸变系数:径向畸变(k1, k2, k3)和切向畸变(p1, p2)。
内参矩阵长这样:
K = [[fx, 0, cx],
[ 0, fy, cy],
[ 0, 0, 1]]
外参矩阵(Extrinsic Matrix)
外参描述的是摄像头在世界坐标系中的位置和朝向。它由旋转矩阵R和平移向量t组成。
外参矩阵是4x4的齐次矩阵:
[R | t]
[0 | 1]
旋转矩阵R有3个自由度(俯仰角、偏航角、翻滚角),平移向量t有3个自由度(x, y, z)。
我习惯用欧拉角来理解,但实际计算时用四元数更稳定,避免万向锁问题。
四、图像数据格式:算法“吃”什么?
摄像头输出的原始数据,算法不能直接吃。需要经过格式转换。
常见的图像数据格式有:
- RAW格式:传感器原始数据,每个像素只记录一种颜色(R/G/B)。数据量最小,但需要去马赛克处理。
- YUV格式:亮度(Y)和色度(UV)分离。Y通道保留细节,UV通道可以压缩。很多ISP直接输出YUV。
- RGB格式:每个像素三个通道。算法最喜欢,但数据量大。
- BGR格式:OpenCV默认格式。注意,和RGB顺序相反,新手经常踩坑。
另外,图像的分辨率和位深也很关键。1080p(1920x1080)是主流,但为了检测远距离小目标,现在很多方案上到了4K甚至8K。位深一般是8bit(0-255),但HDR场景需要12bit或更高。
五、知识体系总览
下面这张图,是我自己总结的摄像头基础知识框架。你可以把它当成一张地图,学完这章后对照着复习。
这张图把今天讲的内容串起来了。你从左上角开始,顺着箭头往下看,就能理清摄像头从物理原理到数学建模再到数据输出的完整链路。
好了,这一章的内容就到这里。记住:摄像头是感知系统的眼睛,坐标系是沟通的桥梁,内参外参是标定的灵魂,图像格式是算法的口粮。把这四个点吃透了,后面的融合算法你学起来会轻松很多。
可可精品资料库