做嵌入式的兄弟们在做嵌入式图像识别处理类项目SoC选型的时候,一般都会选择集成了ISP的SoC。
那什么是ISP呢?
ISP(Image Signal Processor,图像信号处理器)的作用是对前端图像传感器输出的原始信号进行后期处理,听起来有点类似PS的功能(谁说视频不能PS,我直接在芯片里就完成了视频的PS)。
不同的人PS出来的照片美感不同,而ISP如果不调试优化,也很难输出高成像质量的视频。

本文基于米尔RK3576开发板(我之前测评过:)进行MIPI Camera ISP调试,让开发者能快速理解ISP调试的过程。
一 ISP调试的必要性
说白了,ISP调试就是解决摄像头硬件本身的缺陷,把拍出来的画面搞成和人眼看到的画面尽可能一致。摄像头硬件有以下三大缺陷需要靠算法来弥补:
1、弥补传感器的物理缺陷
光谱响应曲线不同的问题:图像传感器和人眼本身对不同颜色的感知度就不一样,也就是说,二者的光谱响应曲线存在差异,需要通过色彩矫正矩阵CCM来给进行矫正。
噪点和坏点问题:在暗光环境下,传感器本身会因为半导体热运动而产生暗电流噪声,而且还可能存在坏点,这些问题反映在画面上就是噪点。需要通过黑电平校正BLC、坏点校正DPC和降噪模块进行处理。
2、镜头本身有畸变
镜头阴影问题:受镜头的物理结构影响,画面边缘进光量天生就比中心少,所以拍出来的图像四角会偏暗。可以通过镜头阴影校正进行补偿。
变形问题:镜头是圆的,但传感器是平的,光线经过折射之后会导致图像变形,可以通过几何校正算法来修正。
3、还原真实的色彩环境
人眼有一个比较牛的功能叫“颜色恒常性”——不管是在暖黄的灯泡下还是冷白的日光下,咱们看白纸都觉得它是白的。但是传感器不一样啊,在不同光源下拍同一张白纸,一会儿偏黄一会儿偏蓝。这需要通过自动白平衡AWB算法来校正色温带来的偏差,从而确保在不同光源下得到与人眼看到一样的画面。
说到这里,你可能也发现了,ISP调试是一个与“审美”相关的事。你可以基于标准光源箱、色卡、图卡等设备,通过量化指标(如信噪比、色彩误差、清晰度等)建立科学的成像基准,确保系统参数的准确性,这叫做客观调试。也可以从人眼感知的角度和视觉审美的角度去调试,从而达到更好的成像效果和质感,这叫主观调试。
二 调试准备
1、硬件准备:这里我们采用米尔RK3576开发板,另外需要准备专业ISP调试灯箱,摄像头模组。

2、摄像头资料准备:为保证调试方向正确,需要准备传感器和模组的规格书、初始化序列、曝光配置公式、模组靶向尺寸等等。

3、实验设备:以下这些设备用来搭建标准化的光学实验环境。
镜头盖或者遮光布,用来遮挡镜头,进行黑电平BLC标定。
标准光源,配备至少7 种标准光源(HZ、A、CWF、TL84、D50、D65、D75)及可调亮度光源,用于AWB、CCM 等模块在不同色温下的标定。
匀光片,用于镜头阴影校正LSC。
爱色丽24 色色卡,用于色彩校正矩阵(CCM)及自动白平衡(AWB)模块的标定。
灰度渐变卡,用于噪声分析、动态范围及Gamma 曲线标定。
棋盘格标定板,用于几何畸变校正(LDC)参数提取。
三 环境搭建
1、buildroot系统
下载Linux 对应的 rkaiq_tool_server,推送到板端,然后运行rkaiq_tool_server,输出类似以下的打印信息,说明这一步完成了。
Linux,Create domain socket success.Found single camera node: /tmp/UNIX.domain0Connect to /tmp/UNIX.domain0rkaiq_tool_server connect AIQ successlo IP: 127.0.0.1eth0 IP: 192.168.1.173
2、Windows PC 端

在PC上下载RKISPTuner 工具,并打开运行,这是RKISPTuner 主界面。
3、连接与验证
通过ping测试板端IP,来确认米尔RK3576开发板与PC 实现网络连接;
在RKISPTuner 中填入板端 IP 地址,点击"连接";
连接成功后,工具界面左侧可看到实时预览画面;
如果连接失败,可以检查rkaiq_tool_server 是否正常运行、防火墙是否放行对应端口、通过ifconfig来确认开发板IP地址是否正确
四 摄像头标定(客观调试)

在标定之前,需要搞明白上面这个图,ISP的各个子模块之间存在依赖关系,比如必须在LSC之前完成BLC的处理。某一个模块的参数调错将会传递到其他模块,从而导致调试失败。因此必须按照上图所示的顺序进行调试(通常为:BLC -> LSC -> AWB -> CCM -> 其他),不要随意跳过或颠倒步骤。而且每完成一个模块的调试,要立即确认参数的效果,不能干了半天发现前面的模块没调好,又得从头再来。
下面按照顺序进行调试:
1、黑电平BLC标定
BLC 是整个 ISP 流水线的第一步,其作用是消除传感器的暗电流偏移,为后续模块建立正确的信号基准。
先用镜头盖或者遮光黑布完全遮挡住镜头,保证无光线进入传感器。
然后在RKISP Tuner 中切换到 BLC 模块页面,点击"Capture"采集当前黑帧 RAW 数据。建议在多个增益档位(1x、2x、4x、8x、16x)下分别采集,以获取不同增益下的黑电平偏移值。
工具会自动计算R\Gr\Gb\B各通道的黑电平均值,然后将结果写入IQ文件(IQ 文件建议直接从/etc/iqfiles/ 找个相近进行拷贝修改,减少工作量。直接使用 RKISP Tuner 生成 IQ json 文件,工作量较大)的对应字段,一般要求R\Gr\Gb\B各通道的黑电平值在50-65之间((10bit RAW)),而且R\Gr\Gb\B这四个通道的差异不超过2。
如果BLC的值偏大,将会导致画面整体偏暗,而且动态范围减小;如果BLC的值偏小,画面的暗部容易出现彩色噪点。所以BLC的值需要精确标定,这一步也是后续工作的基石。
2、镜头阴影校正LSC标定
前面说过,镜头本身的物理结构导致边缘进光量和中间有差异,而LSC就是用来补偿这个差异的。
首先将匀光片贴在标准光源箱上,确保照射到镜头的光线均匀柔和,无明显热点和暗角。
然后在每种标准光源下,分别采集匀光图像。在 RKISP Tuner 中切换至 LSC 模块页面,点击"Capture"进行采集。
工具会自动生成各种光源下的增益补偿表(Gain Table),用于补偿画面边缘的亮度衰减。确认生成结果后,保存至 IQ 文件。
做完这一步标定之后,需要进行验证,验证方法也很简单,对着纯白墙壁拍照,然后检查,确保照片的四角和中心亮度差异在5%以内。
3、自动白平衡AWB标定
如前文所述,AWB模块是用来在不同色温的光源下消除色偏,还原白色的。
先在标准光源箱的各色温光源下(HZ、A、CWF、TL84、D50、D65、D75),分别拍摄 24 色色卡。
然后在RKISP Tuner 的 AWB 模块中,框选色卡白色区域,工具将自动统计 R/G/B 三通道的增益比(WB Gain),并生成不同色温下的白平衡增益曲线。
最后,把各色温下的WB Gain值写入IQ文件的AWB配置段。注意确认白色区域 R/G/B 三通道比值接近 1:1:1。
4、色彩校正矩阵CCM标定
解决传感器和人眼对颜色的感知不同,可以通过色彩校正矩阵CCM来实现。这其实是两种色彩空间的映射,相当于把传感器的色彩空间映射到 sRGB 标准色彩空间。
在各标准光源下拍摄24色色卡,要保证色卡充满画面的60%以上。
然后在RKISP Tuner 的 CCM 模块中,框选色卡区域,工具将自动计算 3×3 校正矩阵。我们需要关注 ΔE(色差)指标,一般要求平均 ΔE < 5,最大 ΔE < 10。
为适应不同光源场景,需在多种色温下标定CCM,并通过插值算法实现色温间的平滑过渡。将各色温下的 CCM 矩阵写入 IQ 文件对应段落。
通过以上的流程,我们完成了BLC、LSC、AWB、CCM 的客观标定,建立了科学的成像基准。接下来还要搞搞AE、3DNR、锐化、Gamma、3D LUT 等主观调试。
五 主观调试前知识准备

主观调试包括以上流程。

这是RK3576 ISP39 Pipeline 架构。
我们这次采用的板子是米尔RK3576开发板,它搭载的ISP39是瑞芯微的第三代ISP架构,支持 3 拍 1 出(3路 MIPI 输入 + 1 路输出)的处理能力。以下是ISP39内部 Pipeline 包含的主要模块,按处理顺序依次说明:
六 主观调试
先使用 selfpath 节点进行预览:
# 找到 selfpath 对应的 video 节点grep . /sys/class/video4linux/video*/name# 进行摄像头预览gst-launch-1.0 v4l2src device=/dev/video12 ! \'video/x-raw,width=1920,height=1080,framerate=60/1' ! \videoscale ! 'video/x-raw,width=1920,height=1080' ! waylandsink# 确认 mainpath 节点是否被占用,查看 Output 一列为 rkisp_selfpathcat /proc/rkisp-vir*
接下来使用 RKISP Tuner 进行在线调试
在 PC 端 RKISP Tuner 连接成功后,左侧面板为实时预览画面,右侧为各 ISP 模块参数调节面板。
1、自动曝光AE调试
自动曝光AE是用来控制画面整体亮度和动态范围的,这是影响观感的第一要素。RK3576 的 AE 算法是基于直方图统计和权重映射的,可以支持多区域测光。

在调试AE时要注意防止闪烁(Anti-Flicker),室内照明灯的闪烁频率如果是50Hz,所以曝光时间必须调整为10ms的整数倍。如果是60Hz,曝光时间调整为8.33ms的整数倍即可。
2、3D降噪3DNR调试
3DNR降噪模块是RK3576 ISP39的重要降噪模块,可以结合时域(帧间)和空域(帧内)降噪的策略,在保持细节的同时能有效抑制噪声。

在进行3DNR调试时要注意以下几点:
时域降噪强度:在静态场景下可适当加大,而运动场景则需减小以避免拖影(Ghosting)
运动检测阈值:阈值过高时会导致运动物体拖影,过低则会导致降噪效果不足
空域降噪强度:需与时域降噪配合使用,通常空域强度低于时域,这样可以避免过度涂抹
降噪与锐化的平衡:降噪会损失画面细节,需要通过后续的Sharpen
模块进行适当补偿
3、锐化/边缘增强Sharpen调试
前面说了,降噪会损失画细节,而锐化模块Sharpen就是用来补偿前级降噪和 Demosaic 插值带来的细节损失,提升图像清晰度感知的。

调试之后可进行验证:在类似黑色文字白色背景这种高对比度边缘区域,检查白色边缘外是否出现明显的亮环,即光晕效应。如果存在,需降低锐化强度或增大噪声阈值。
4、Gamma 调试
Gamma 校正的作用是把传感器的线性光信号映射为非线性输出,用来匹配显示设备的亮度响应特性和人眼的亮度感知特性。
标准 Gamma 2.2:适用于一般 sRGB 显示场景,是最常用的默认曲线
自定义Gamma 曲线:可根据项目需求调整暗部/亮部映射关系,实现特定风格
暗部提亮:增大低输入区域斜率,改善暗部可见度
亮部压缩:减小高输入区域斜率,防止高光溢出
注意:修改Gamma曲线会影响AE的目标亮度判定,所以在调整Gamma之后,需要重新验证AE行为。
5、三维查找表3D LUT调试
三维查找表用于提供对RGB色彩空间的精细调校,可以实现CCM无法覆盖的复杂色彩映射,进行色彩风格化处理。比如可以把色彩风格调成暖色调、冷色调、电影风格等等。
具体的调试方法是在 RKISP Tuner 中导入 3D LUT 文件(通常为 17×17×17 或 33×33×33 的立方体网格),通过调整网格节点值实现色彩映射。
注意:3D LUT的调整范围不宜过大,否则容易出现色彩断层或伪影。一般在CCM调试完成后再使用3D LUT进行微调。
七 IQ文件配置与烧录
通过以上的流程完成参数调节后可实时观察效果变化,确认满意后再写入 IQ 文件。写入之前我们需要简单了解IQ文件的结构。
IQ(Image Quality)是一种用JSON 格式进行存储的文件,用来存储所有ISP模块的算法参数。RK3576的IQ文件通常命名为<sensor_model>.json,在板端的存放路径为: /etc/iqfiles/
{"sensor_info": {"sensor_name": "imx219","resolution": "1920x1080"},"blc": {"blc_offset": [56, 57, 57, 56]},"lsc": {"lsc_table": [...]},"awb": {"wb_gain": {...}},"ccm": {"ccm_matrix": [...]},...}
配置好IQ文件之后,按照如下流程进行烧录:
1、在RKISP Tuner中完成参数调试后,点击"Save"将参数导出为JSON文件
2、通过ADB或SCP将IQ文件推送到板端/etc/iqfiles/目录
3、重启 MYD-LR3576 开发板或重启 3A 服务使新 IQ 文件生效
# 通过 ADB 推送 IQ 文件adb push imx219.json /etc/iqfiles/# 通过 SCP 推送 IQ 文件scp imx219.json root@192.168.1.173:/etc/iqfiles/# 重启摄像头服务killall rkaiq_tool_server# 或直接重启系统reboot
注意:IQ 文件命名必须与设备树(DTS)中rockchip,camera-module-name 属性匹配,否则 ISP 无法自动加载对应参数。
八 常见问题与解决方案
1、预览画面全黑或全绿,无正常图像
这种情况的原因可能是MIPI CSI 时序配置错误,例如CLK/Lane 数量错误、速率不匹配等,也可能是因为传感器的初始化序列没有正确加载或I2C通信失败,还有一种可能是电压/时钟未使能。
可以按照如下步骤排查:
检查内核日志:dmesg | grep -i "mipi\|csi\|sensor"
确认Sensor I2C 通信:i2cdetect -y <bus> 检查传感器地址是否响应
使用media-ctl -p 检查Media Pipeline 拓扑是否正确连接
2、画面明显偏色(整体偏蓝/偏黄/偏绿)
可能的原因有AWB 参数未标定或标定时光源不充分,CCM矩阵的偏差过大,或者是因为LSC色彩补偿不均匀。
可以按照如下步骤排查:
检查 BLC 和 LSC 是否已正确标定(前置模块偏差会级联影响 AWB)
在当前光源下重新标定AWB,确认WB Gain 是否合理
检查CCM 矩阵的ΔE 指标是否达标
3、画面存在明显暗角
画面存在四角偏暗的情况一般是因为LSC参数标定有问题。当然也不排除镜头本身暗角严重,超出了LSC的补偿能力。
可以按照如下步骤排查:
先重新标定 LSC,过程中确保匀光片使用正确,光源均匀
在RKISP Tuner 中查看LSC Gain Table,确认增益值是否合理(一般不超过4x)
若LSC增益已很大但仍有暗角,说明镜头本身暗角严重,需更换
4、运动场景出现拖影(Ghosting)
这个情况可能的原因是3D降噪时时域降噪强度过强,或者运动检测阈值设置不合理,也可能单纯因为视频帧率太低。
可以按照如下步骤排查:
适当降低 3DNR 时域降噪强度,或增大运动检测灵敏度
确认帧率是否达到预期(通过v4l2-ctl --device=/dev/videoX --set-fmt-video=width=1920,height=1080,pixelformat=NV12 --set-parm=60)
在快速运动场景下反复验证,找到降噪与拖影的平衡点
5、RKISP Tuner 连接板端失败
这个可能的原因是rkaiq_tool_server 未运行或已崩溃,也可能是rkaiq_tool_server 版本与 RKISP Tuner 版本不匹配,当然,最后还有一种可能性,就是网络不通或者防火墙拦截。
可以按照如下步骤排查:
在板端确认进程运行:ps | grep rkaiq_tool_server
PC端ping 板端IP确认网络连通
确认版本一致:RKISP Tuner和rkaiq_tool_server 必须使用同一SDK 版本
重启rkaiq_tool_server 后重试连接
6、曝光闪烁
曝光闪烁是指室内灯光场景画面周期性明暗变化,这很可能是因为曝光时间没有和光源闪烁频率同步,还有另外一种可能性就是Anti-Flicker 未开启或频率设置错误。
可以按照如下步骤排查:
市电50Hz时确保最小曝光时间为 10ms 的整数倍,60Hz时8.33ms的整数倍
开启Anti-Flicker并设置为电网频率,国内为50Hz
在IQ文件中确认AE Anti-Flicker配置已生效

这个调试速查表,详细归纳了每个模块的调试指标和异常表现。
九 调试经验总结
到此为止,我们已经基于RK3576开发板走完了ISP调试的流程。整个流程简单总结就是:资料准备 → 环境搭建 → BLC 标定 → LSC 标定 → AWB 标定 → CCM 标定 → AE/3DNR/Sharpen/Gamma/3D LUT 主观调试 → IQ 文件烧录 → 多场景验证 → 完成。
通过这次调试,我们总结以下几点经验:
1、由于ISP内各模块是串联的,前级模块的输出是后级模块的输入,所以在调试的时候,要严格按照Pipeline的顺序进行调试。例如跳过BLC直接进行AWB调试,或者跳过AWB直接进行CCM调试,都会导致参数级联失真。
2、控制单一变量,每次只调一个模块的参数。切忌一次调两个以上模块,原因很简单,同时修改多个模块参数,你就没法判断某一个效果到底是哪个模块导致的。
3、调试效果要在室内\室外、强光\暗光、静止\运动等多种场景下进行验证,这样才能保证参数的泛化能力。
4、做一个参数变更日志,每次的调试最好都记录参数变更和效果,方便后续回溯、对比。
5、瑞芯微官方的SDK中一般有提供多个IQ文件供我们参考,可以直接找相近模组的IQ文件进行修改,这比从零创建高效。
6、比较麻烦的一个方面是:Gamma 改变影响 AE、3DNR 强度影响Sharpen、LSC 改变影响 AWB……这些模块之间存在耦合,调试时需关注上下游联动效应。
