第2章:镜头阴影校正调试环境搭建
做镜头阴影校正,第一步不是调参数,而是把环境搭对。我见过不少工程师,算法调了半天,最后发现是灯箱亮度不均匀——白忙一场。所以这一章,咱们先把硬件、软件、采集规范这三块地基打牢。
2.1 硬件准备:灯箱、灰卡、均匀光源
硬件选型直接决定你采集到的数据有没有价值。说白了,你给算法喂什么,它就吐什么。
2.1.1 灯箱选型
灯箱的核心指标就两个:均匀度和色温稳定性。
| 指标 | 要求 | 说明 |
|---|---|---|
| 均匀度 | ≥ 90% | 整个发光面亮度差异不超过10% |
| 色温 | D50 / D65 | 标准日光色温,可复现 |
| 显色指数 | Ra ≥ 95 | 颜色还原越准越好 |
| 亮度范围 | 0 ~ 2000 cd/m² | 覆盖低中高亮度场景 |
我个人习惯用X-Rite或Gossen的灯箱,校准周期短,稳定性好。有一次项目赶进度,用了实验室一个老灯箱,结果阴影校正曲线怎么调都不对——后来发现灯箱角落有个LED灯珠已经衰减了。嗯,从那以后我每次调试前都会先拍一张均匀白场做验证。
2.1.2 灰卡选择
灰卡用来做参考白平衡和亮度基准。别随便拿张白纸凑合,纸的反射率不均匀,而且不同纸张的荧光增白剂会影响光谱。
- 标准灰卡:18%反射率灰卡,用于亮度校准
- 白卡:96%反射率,用于阴影校正参考
- 黑卡:2%反射率,用于暗电流评估
2.1.3 均匀光源
除了灯箱,你可能还需要独立均匀光源来做特定场景测试。比如大角度入射光、多光源混色等。
均匀光源的常见方案:
- 积分球:均匀度最好,但体积大、价格高
- LED面光源:可调色温、亮度,适合量产线
- 卤素灯+扩散板:光谱连续,但发热严重
你想想看,如果光源本身就有暗区,你校正出来的阴影曲线其实是把光源缺陷也补偿进去了——这会导致换一个场景就出问题。所以均匀光源的均匀度,我建议至少做到95%以上。
2.2 软件工具:调试工具链与寄存器读写
硬件到位了,软件工具就是你的武器库。我习惯把工具链分成三层:采集层、分析层、烧录层。
2.2.1 调试工具链
| 层级 | 工具 | 用途 |
|---|---|---|
| 采集层 | Sensor驱动 + 图像采集卡 | 获取原始RAW数据 |
| 分析层 | MATLAB / Python + OpenCV | 计算阴影曲线、坏点检测 |
| 烧录层 | I²C / SPI 寄存器读写工具 | 将校正参数写入Sensor或ISP |
我在项目中常用的是Imatest做阴影分析,配合Bus Hound抓I²C通信。不过Imatest是商业软件,如果预算有限,用Python自己写一套分析脚本也完全可行。
2.2.2 寄存器读写工具
寄存器读写是调试的最后一公里。你算好了校正系数,写不进去或者写错地址,全白搭。
常用的寄存器读写方式:
- I²C工具:如Total Phase Aardvark、FTDI FT232H
- SPI工具:如Saleae逻辑分析仪 + 自定义脚本
- 厂商专用工具:如OV的OVTune、Sony的ISS
2.3 图像采集规范
采集规范决定了你的数据是否可复现、可对比。没有规范,今天采的和明天采的就不是同一套数据。
2.3.1 采集环境要求
- 暗室环境:避免环境杂散光干扰
- 灯箱预热:至少预热15分钟,等色温稳定
- 镜头清洁:用气吹+无尘布擦拭,指纹和灰尘会引入伪阴影
- 固定机位:使用三脚架或夹具,避免手抖
2.3.2 采集参数设置
采集时,Sensor的参数要固定,不能开自动曝光、自动增益、自动白平衡。否则你采集到的阴影曲线会随着参数变化而漂移。
| 参数 | 设置建议 | 原因 |
|---|---|---|
| 曝光时间 | 固定值(如30ms) | 避免亮度变化影响阴影曲线 |
| 模拟增益 | 1x(最低增益) | 减少噪声对阴影检测的干扰 |
| 数字增益 | 1x | 保持原始数据线性 |
| 输出格式 | RAW(Bayer或RGGB) | ISP处理前的原始数据 |
| 位深 | 10bit或12bit | 保留足够动态范围 |
2.3.3 采集流程
- 灯箱预热15分钟,确认均匀度达标
- 安装镜头,清洁镜片和Sensor窗口
- 固定相机模组,对准灯箱中心
- 设置Sensor参数为固定模式
- 采集一张暗场(遮住镜头,评估暗电流)
- 采集一张灰场(灰卡,用于阴影校正)
- 采集一张白场(白卡,用于增益校正)
- 检查图像是否有过曝或欠曝区域
2.4 知识结构总览
下面这张图把本章的核心逻辑串起来了。你可以把它当作调试前的checklist。
这张图把硬件、软件、采集规范三个模块串在了一起。你调试前可以对着它过一遍,看看哪个环节还没到位。我个人习惯把这张图打印出来贴在工位上,每次调试前扫一眼,避免漏掉某个步骤。