2、RAW图数据获取:Sensor输出原理、MIPI接口与RAW数据传输、RAW图文件格式(DNG、RAW、RAW10/RAW12)、使用工具抓取RAW图

好,咱们进入第二章。这一章聊的是RAW图从哪来、怎么传、长什么样。

说白了,就是Sensor拍完一张照片后,数据怎么从芯片里“流”出来,流到你的电脑硬盘上。我调试这么多年,发现很多新人一上来就盯着图像质量调参数,结果发现RAW图本身就有问题——数据都没拿对,调个啥?

2.1 Sensor输出原理:从光子到数字

先简单过一遍Sensor内部干了啥。你想想看,光线打到像素上,光电二极管产生电荷,电荷量跟光强成正比。然后通过ADC(模数转换器)把电压转成数字值。这个数字值,就是RAW数据。

但这里有个关键点:Sensor输出的不是RGB,而是Bayer pattern。每个像素只记录一种颜色——R、G、B中的一种。最常见的排列是RGGB,也就是一个像素是红,两个是绿,一个是蓝。

重要概念:Sensor输出的原始数据,就是每个像素的灰度值。它还没经过插值、白平衡、去噪等处理。这就是RAW图的本质——最原始的感光数据。

我在项目中遇到过一件事:有次拿到一批Sensor,发现暗部有奇怪的条纹。查了半天,结果是ADC的参考电压不稳。嗯,这种问题在RAW图里一眼就能看出来,但如果你拿的是经过ISP处理的JPEG,早就被抹平了。所以调试一定要从RAW开始。

2.2 MIPI接口与RAW数据传输

Sensor把数据转成数字信号后,怎么传给主控芯片?现在主流方案就是MIPI CSI接口。

MIPI的全称是Mobile Industry Processor Interface,说白了就是一套高速串行传输标准。它用差分信号对(D-PHY)来传数据,速度可以做到每通道几Gbps。

这里有几个关键参数你得记住:

  • Lane数:常见的有1-lane、2-lane、4-lane。Lane越多,带宽越大。
  • 速率:比如每lane 1.5Gbps,4-lane就是6Gbps总带宽。
  • RAW位深:决定了每个像素占多少bit。RAW10就是10bit,RAW12就是12bit。

个人经验:我建议你在调试初期先确认MIPI的物理层是否稳定。用示波器看眼图,或者用Sensor厂商的调试工具抓一下CRC错误计数。我曾经因为FPC排线太长导致信号衰减,折腾了两天才发现是硬件问题。

MIPI传输的数据格式是打包的。比如RAW10,每个像素10bit,但MIPI是按字节对齐的。所以4个RAW10像素会打包成5个字节(40bit)。这个打包方式你得搞清楚,不然抓出来的RAW图全是乱的。

2.3 RAW图文件格式:DNG、RAW、RAW10/RAW12

数据从MIPI接口出来,到了主控芯片的内存里。这时候你需要把它存成文件。常见的RAW格式有这么几种:

格式 说明 常见场景
DNG Adobe制定的开放RAW格式,包含元数据 专业相机、手机HDR模式
RAW(纯数据) 不带任何头信息,只有像素数据 调试阶段、快速验证
RAW10 每个像素10bit,打包存储 常见Sensor输出格式
RAW12 每个像素12bit,打包或对齐存储 高动态范围Sensor

我个人习惯在调试阶段用纯RAW格式。为什么?因为简单。没有头信息干扰,直接按像素数读取就行。DNG虽然好,但解析起来麻烦,而且有些工具对DNG的支持并不完美。

注意:RAW10和RAW12的存储方式不同。RAW10是4个像素占5个字节,RAW12是2个像素占3个字节。如果你用错了解析方式,图像会完全错位。我曾经见过有人把RAW12当RAW10解析,结果图像像被撕碎了一样。

举个例子,假设你有一个1920x1080的Sensor,输出RAW10。那么一帧的数据量是:

1920 * 1080 * 10 / 8 = 2,592,000 字节

但实际存储时,因为打包对齐,你需要按行读取。每行1920个像素,打包成1920 * 10 / 8 = 2400字节。嗯,这个计算你得心里有数。

2.4 使用工具抓取RAW图

好了,理论讲完了。现在说说怎么实际抓一帧RAW图出来。

常用的工具有这么几类:

  • Sensor厂商工具:比如Sony的ISP调试工具、OmniVision的OVT工具。这些工具可以直接通过I2C控制Sensor,然后通过MIPI抓图。
  • 主控芯片工具:比如高通、联发科的调试工具。它们可以从ISP的输入端口直接dump RAW数据。
  • FPGA/逻辑分析仪:如果你在做Sensor验证,可以用FPGA抓MIPI信号,然后解析成RAW。

我常用的方法是:先用Sensor厂商的工具抓一帧,确认Sensor输出正常。然后用主控工具抓一帧,对比两者是否一致。如果不一样,说明MIPI链路或者ISP配置有问题。

避坑指南:我曾经在调试一款新Sensor时,用工具抓出来的RAW图全是0。查了半天,发现是Sensor的PLL没锁住,MCLK频率不对。所以抓图之前,先确认Sensor的寄存器状态——尤其是PLL lock bit和frame sync信号。

抓图的具体步骤大致如下:

  1. 连接硬件:Sensor板、主控板、调试工具(比如USB转I2C适配器)。
  2. 初始化Sensor:写入寄存器配置,包括分辨率、帧率、增益等。
  3. 启动MIPI传输:确认MIPI的clock和data lane都正常。
  4. 触发抓图:工具会等待一帧的VSYNC信号,然后开始采集数据。
  5. 保存文件:选择格式(RAW10、RAW12、DNG等),保存到本地。

最后,抓到的RAW图怎么验证对不对?我有个土办法:用Python或者MATLAB读出来,显示成灰度图。如果能看到物体的轮廓,说明数据基本正确。如果全是雪花或者条纹,那就要回头检查了。

总结一下:RAW图调试的第一步,就是确保你能稳定、正确地抓到一帧RAW数据。这一步做扎实了,后面的ISP调试才有意义。别急着调参数,先把数据通路打通。

嗯,这一章就到这里。下一章我们聊聊RAW图的基本分析方法——怎么从RAW数据里看出Sensor的底噪、坏点和动态范围。