
一、标定前必知:
ISP标定到底解决什么问题?
Sensor采集的原始图像(RAW图)会存在先天缺陷:暗环境下有噪点(黑电平偏移)、画面中心亮边缘暗(镜头阴影)、色彩还原失真(偏色)。而ISP标定的核心就是通过算法校正这些缺陷,同时RTOS系统的实时性能够确保标定过程中数据采集的同步性和稳定性,让校正参数精准适配硬件运行。
简单说:ISP标定 = 给图像Sensor“调优画质”,最终实现“原始RAW图→清晰、均匀、色彩准确的标准图像”的转化,这是K230视觉应用落地的关键一步!
二、前期准备:
软硬件清单+工具安装
硬件准备
核心板:K230开发板
图像Sensor:IMX219摄像头模块
标定设备:暗室(BLC标定用)、DNP灯箱(支持A/A_100、D50、D65等光源)、24色卡(CC标定用)
辅助工具:串口线(调试通信)、USB数据线(烧录+供电)、固定支架(确保摄像头位置稳定)
软件与工具准备
工具类型 | 具体工具及版本 | 核心用途 |
运行环境 | MATLAB Runtime R2023a(Windows 64位) | 支撑ISP标定工具运行 |
标定工具 | K230 ISP标定工具、ColorCalibrationTool | BLC/LSC/CC参数计算 |
图像工具 | ImageViewer | 查看RAW图、验证标定效果 |
开发工具 | K230官方SDK(含MPP工程)、RTOS系统(已集成) | 编译工程、烧录镜像 |
调试工具 | 串口助手(SecureCRT/Putty) | 执行抓图命令、查看日志 |
三、ISP标定流程

四、手把手标定实操:
(以IMX219为例)
ISP标定的核心逻辑是:抓取特定场景下的RAW图→通过工具计算校正参数→修改ISP配置文件→验证标定效果,全程基于RTOS系统实现高效协同。以下是BLC、LSC、CC三大关键步骤的详细拆解:
(一)Black Level Correction(BLC)
黑电平校正
目标:消除暗环境下的图像噪点,让黑色更纯净
1.环境准备
搭建暗室(无任何光源),将IMX219摄像头与K230开发板上的指示灯用黑胶遮挡(避免光源干扰);
连接串口线和USB供电,确保开发板稳定运行RTOS系统。
2.抓取RAW图
定位抓图代码目录:SDK/src/rtsmart/mpp/userapps/sample/sample_vicap
编译抓图程序(RTOS环境下):
cd ~/src/rtsmart/mpp/userapps/sample/sample_vicapmakecd ../elf# 将编译后的文件拷贝到开发板cp sample_vicap.elf ***
执行抓图命令(暗室无光源状态):
./sample_vicap.elf -mode 0 -conn 1 -dev 0 -sensor 45 -chn 0 -ofmt 3 -preview 0 -chn1终端出现菜单后,输入d抓取RAW图,成功后生成两个文件:
·dev_00_chn_00_1920x1080_0010.raw10(核心RAW图,10位深)
·dev_00_chn_01_1920x1080_0011.yuv420sp(辅助YUV图)
用Altek Image Viewer打开RAW图,验证图像无明显亮点(确保暗场环境合格)。
3.数据标定
打开K230 ISP标定工具,选择BLC标定模式,导入抓取的RAW图;
配置参数(分辨率1920x1080、位深10bit),点击“标定”,生成bls_para.txt文件,核心参数示例:
ResolutionX=1920 ResolutionY=1080 BLS_R=65 BLS_Gr=65 BLS_Gb=65 BLS_B=654.修改ISP配置文件
注意:10bit传感器需将标定值×4(65×4=260),12bit传感器直接使用原始值;
修改XML文件(imx219-1920x1080.xml):
<BLS index="1" type="cell" size="[1 1]"><cell index="1" type="struct" size="[1 1]"><name index="1" type="char" size="[1 9]">1920x1080name><resolution index="1" type="char" size="[1 9]">1920x1080resolution><blsData index="1" type="double" size="[1 4]">[260,260,260,260]blsData>cell>BLS>
修改JSON文件(imx219-1920x1080_manual.json):
{"class": "Bls","bls": [260, 260, 260, 260]}
(二)Lens Shading Correction(LSC)
镜头阴影校正
目标:解决图像“中心亮、边缘暗”的问题,让画面亮度均匀
1.环境准备
搭建标定场景:暗室,DNP灯箱(提供标准光源)、固定支架(摄像头与灯箱平行,距离尽量靠近灯箱);
关闭环境光(如日光灯),确保只有灯箱光源照射。
2.抓取RAW图
需覆盖5种标准光源:A/A_100(2850K)、U30/F12(3000K)、TL84/F11(4000K)、D50(5000K)、D65(6500K);
执行固定曝光抓图命令(以A/A_100光源为例):
./sample_vicap.elf -mode 0 -conn 1 -dev 0 -sensor 45 -ae 0 -again 1 -exp 429 -chn 0 -ofmt 3 -preview 0 -chn1调节参数:若图像过亮/过暗,修改-exp值(曝光越大越亮),目标是图像中心亮度为最大值的80%左右;
切换所有光源,重复抓图,每个光源对应1张RAW图。
3.数据标定
打开LSC标定工具,配置参数(Bayer格式RGGB、 sectors=32);
导入某一光源的RAW图,点击“Start”运行标定,生成参数文件(如A_param.txt),包含亮度补偿矩阵、扇区大小等核心数据;
点击“Apply LSC to Image”验证效果:标定后图像无中心与边缘亮度差,即为合格;
重复所有光源的标定流程,生成对应参数文件。
4.修改ISP配置文件
修改XML文件(imx219-1920x1080.xml),为每个光源添加LSC配置节点(以A/A_100为例):
<LSC index="1" type="cell" size="[1 5]"><cell index="1" type="struct" size="[1 1]"><name index="1" type="char" size="[1 15]">1920x1080_A_100name><resolution index="1" type="char" size="[1 9]">1920x1080resolution><illumination index="1" type="char" size="[1 1]">Aillumination><LSC_sectors index="1" type="double" size="[1 1]">[32]LSC_sectors><LSC_SECT_SIZE_X index="1" type="double" size="[1 32]">[42,43,46,...]LSC_SECT_SIZE_X><LSC_SAMPLES_red index="1" type="double" size="[33 33]">[2190,2035,...]LSC_SAMPLES_red>cell>LSC>
修改JSON文件,写入LSC矩阵参数(参考参数文件中的LSC_SAMPLES数据)。
(三)Color Correction(CC)
颜色校正
目标:还原真实色彩,解决偏色问题(依赖24色卡标定)
1.环境准备
摆放24色卡:色卡正对摄像头,占图像画面80%以上,位置摆正;
保持DNP灯箱光源稳定(与LSC标定的光源一致),关闭环境干扰光。
2.抓取RAW图
执行抓图命令,获取24色卡的RAW图;
移除色卡,保持摄像头位置不变,抓取同一光源下的背景图(用于消除环境干扰);
切换所有光源,重复“色卡图+背景图”抓取流程。
3.数据标定
打开ColorCalibrationTool,配置参数(分辨率1920x1080、位深10bit、Bayer格式RGGB);
加载文件:
·Load sRGB References:选择标准色卡参考文件(CC_Standard.cxf);
·Load Color Checker Image:选择色卡RAW图;
·Load Background Image:选择对应背景图;
·Load LSC Profile:选择同一光源的LSC参数文件;
取消勾选“Clip Reference Colors”和“Camera Input with applied output gamma”,点击“Calibrate”;
手动选择色卡四角色块中心点,系统自动计算白平衡(wb)和颜色矩阵(ctm),示例参数:
wb = [1.098, 1.0, 2.558];ctm = [[-0.972,1.288,0.684],[0.080,2.341,-1.421],[2.828,-2.101,0.273]];
点击“Save parameters”保存参数文件。
4.修改ISP配置文件
修改XML文件,为每个光源添加CC配置(以A/A_100为例):
<CC index="1" type="cell" size="[1 5]"><cell index="1" type="struct" size="[1 1]"><name index="1" type="char" size="[1 5]">A_100name><ccMatrix index="1" type="double" size="[3 3]">[1.172,0.211,-0.383;-0.188,1.313,-0.125;-0.023,-0.664,1.688]ccMatrix><wb index="1" type="double" size="[1 4]">[0.951,1.0,1.0,2.952]wb>cell>CC>
修改JSON文件,更新CManualWb的gain参数(从wb数据提取)和CCcm的ccmatrix参数:
{"class": "CManualWb","enable": true,"gain": [1.098, 1.0, 1.0, 2.558]},{"bit": 13,"ccmatrix": [[-0.972,1.288,0.684],[0.080,2.341,-1.421],[2.828,-2.101,0.273]],"ccoffset": [0,0,0],"class": "CCcm","enable": true}
五、避坑指南:
新手常踩的3个关键问题
1.RAW图抓取失败:检查摄像头与开发板的连接(I2C/SPI通信),确保sample_vicap.elf编译时已指定正确的sensor型号(-sensor 45对应IMX219);
2.LSC标定后仍有亮度差:抓图时确保摄像头与灯箱平行,且图像中心亮度达到最大值的80%,否则需重新调节-exp参数;
3.CC标定偏色严重:色卡摆放需占满80%画面,避免倾斜,且背景图与色卡图的光源、摄像头位置完全一致。
结 语
基于K230 RTOS系统的Sensor ISP标定,核心是通过“场景化RAW图采集+工具化参数计算+配置化落地”,让图像Sensor输出更精准、更稳定的画质。无论是智能硬件开发还是边缘AI项目落地,这都是必备的核心技能!
官方详细参考文档:
Sensor添加流程:
https://www.kendryte.com/k230_rtos/zh/main/advanced_development_guide/how_to_add_sensor.html
ISP标定流程:
https://kvftsfijpo.feishu.cn/docx/ZAVtdwe7OoGGdSxXUYJcp430nff#share-P4Rfd0r5yo5YvDxp4lSc0iIPn3e
