3. 数字图像信号基础
做图像信号链路调试,说白了就是跟像素打交道。你拿到的 raw data 到底是什么格式?每个像素占几个 bit?颜色是怎么组织起来的?这些基础问题搞不清楚,后面定位故障就是瞎蒙。我刚开始接触 ISP 时,就被 Bayer 格式的排列方式坑过一次,嗯,今天咱们把这些底层的概念彻底捋一遍。
3.1 像素格式与位深
传感器输出的原始数据,通常叫 raw data。它不是一个完整的彩色图像,而是一堆按特定规律排列的亮度值。每个像素的亮度值用多少 bit 来表示,就是位深。
常见位深对照表
| 位深 | 取值范围 | 典型应用场景 |
|---|---|---|
| 8-bit | 0 ~ 255 | 消费级摄像头、预览流 |
| 10-bit | 0 ~ 1023 | 主流手机传感器、MIPI RAW10 |
| 12-bit | 0 ~ 4095 | 车载摄像头、工业相机 |
| 14-bit | 0 ~ 16383 | 专业相机、科学级传感器 |
位深越高,动态范围越大,暗部细节保留得越好。但数据量也成倍增长。10-bit 比 8-bit 数据量多 25%,12-bit 比 10-bit 又多 20%。
我的经验:调试时先用 8-bit 模式跑通链路,确认时序和同步信号没问题,再切到高位深。否则数据量一大,MIPI 通道数不够或者时钟频率没配好,画面直接花掉。
3.2 Bayer 格式:传感器的原始语言
绝大多数 CMOS 传感器使用 Bayer 滤色阵列。每个像素只感测一种颜色——红、绿或蓝。绿色像素数量是红蓝的两倍,因为人眼对绿色最敏感。
常见的 Bayer 排列有四种:
- BGGR:第一行 B G B G,第二行 G R G R
- RGGB:第一行 R G R G,第二行 G B G B
- GBRG:第一行 G B G B,第二行 R G R G
- GRBG:第一行 G R G R,第二行 B G B G
我曾经遇到一个项目,sensor 输出的是 RGGB,但 ISP 配置成了 BGGR。结果画面偏色严重,红色草地、绿色天空。查了两天才发现是 Bayer 顺序配反了。这种低级错误,你想想看,一旦流片回来再改就麻烦了。
避坑指南:拿到 sensor 的 datasheet 后,第一件事就是确认 Bayer 排列顺序。不要只看文字描述,最好找到寄存器配置的默认值,跟实际输出做一次交叉验证。
3.3 色彩空间:从 Bayer 到 RGB 再到 YUV
Bayer raw 数据经过 demosaic 插值后,变成每个像素都有 R、G、B 三个分量的 RGB 图像。但 ISP 内部处理时,通常不会一直用 RGB 空间。
为什么?因为 RGB 三个通道相关性太强,做压缩、降噪、传输都不划算。所以大部分 ISP 会把 RGB 转成 YUV 空间。
YUV 的核心思想:
- Y:亮度分量,包含大部分图像细节
- U / V:色度分量,包含颜色信息
- 人眼对亮度敏感,对色度不敏感 → 可以对 UV 做下采样,节省带宽
常见的 YUV 采样格式:
| 格式 | 描述 | 数据量(相对 4:4:4) |
|---|---|---|
| YUV 4:4:4 | 每个像素都有完整的 Y、U、V | 100% |
| YUV 4:2:2 | 每 2 个像素共享一组 UV | 66.7% |
| YUV 4:2:0 | 每 4 个像素共享一组 UV | 50% |
我建议你在调试 MIPI 链路时,先确认 ISP 输出的 YUV 格式。很多故障表现为画面颜色不对,其实不是 sensor 坏了,而是 ISP 配置的 YUV 采样格式跟接收端不匹配。
3.4 数据接口协议:MIPI 与 LVDS
传感器和 ISP 之间怎么传数据?目前主流就两种:MIPI CSI-2 和 LVDS。我个人的习惯是,先看项目对功耗和走线长度的要求,再选接口。
3.4.1 MIPI CSI-2
MIPI 是手机和平板领域的主流。它使用差分信号传输,一对差分线就是一个 Lane。常见的配置有 1-Lane、2-Lane、4-Lane。
MIPI 的物理层叫 D-PHY,核心参数:
- 每个 Lane 的数据速率:最高约 2.5 Gbps(D-PHY v1.2)
- 时钟 Lane 和数据 Lane 分开
- 低功耗模式(LP)和高速模式(HS)切换
调试要点:MIPI 信号最容易出问题的地方是 Lane 的 skew。4 个 Lane 之间的数据到达时间差不能超过 0.2 UI。我曾经用示波器抓过一组信号,发现 Lane 3 比 Lane 0 晚了 300 ps,画面就出现了竖条纹。调整 PCB 走线等长后问题解决。
3.4.2 LVDS
LVDS 在车载和工业领域用得比较多。它也是差分信号,但跟 MIPI 的协议栈完全不同。LVDS 通常需要额外的同步信号(HSYNC、VSYNC、DE)。
LVDS 的典型配置:
- 每个通道 4 对差分线(3 对数据 + 1 对时钟)
- 数据速率:每对线 100 Mbps ~ 800 Mbps
- 传输距离:可以到 10 米以上(MIPI 一般不超过 30 cm)
注意:LVDS 的共模电压范围是 1.125V ~ 1.375V。如果 sensor 和 ISP 的共模电压不匹配,信号会直接丢失。我遇到过一块板子,LVDS 信号幅度正常但 ISP 就是锁不住 PLL,最后发现是 sensor 的共模电压偏了 50 mV。
3.5 知识体系总览
下面这张图把本章的核心概念串起来了。从 sensor 输出 raw data 开始,经过 Bayer 排列、位深选择、色彩空间转换,最后通过 MIPI 或 LVDS 送到 ISP。每个环节都可能出问题,但只要你把基础概念吃透了,定位故障就有方向。
3.6 实战中的常见故障模式
最后,我把自己这些年踩过的坑整理成一张表。你在调试时如果遇到类似现象,可以优先排查对应的环节。
| 故障现象 | 可能原因 | 排查方向 |
|---|---|---|
| 画面全绿/全红 | Bayer 顺序配置错误 | 检查 sensor 寄存器,确认 Bayer 排列 |
| 颜色偏紫/偏蓝 | 白平衡增益错误或 YUV 格式不匹配 | 检查 ISP 的 AWB 配置和 YUV 采样格式 |
| 竖条纹/横条纹 | MIPI Lane 间 skew 过大 | 用示波器测量各 Lane 的时序偏差 |
| 画面闪烁 | 帧同步信号丢失或 PLL 失锁 | 检查 VSYNC 和 HSYNC 波形 |
| 暗部噪点严重 | 位深不足或增益过高 | 确认 sensor 输出位深,检查 ISP 增益配置 |
| 图像有锯齿 | Demosaic 算法参数不合适 | 调整 ISP 的 demosaic 边缘保护阈值 |
嗯,这一章的内容就到这里。基础概念虽然枯燥,但它们是整个图像信号链路的基石。你把这些搞清楚了,后面学 ISP 的各个模块就会轻松很多。