ISP 图像调优介绍
ISP 的功能
ISP 模块支持标准的 Sensor 图像数据处理功能,其中包括自动白平衡、自动曝光、自动对焦、去马赛克、坏点矫正及镜头阴影矫正等基本功能,也支持多帧宽动态(WDR)、局部色调映射(PLTM)、动态范围控制(DRC)、降噪、锐化等高级功能。ISP 主要支持的图像处理功能如下:
- 支持黑点平矫正(BLC)
- 支持静态、动态坏点校正(DPC)
- 支持 Bayer 空域、时域降噪(D2D、D3D)
- 支持去马赛克处理(CFA)
- 支持 Gamma 校正
- 支持 Sensor 内部合成宽动态功能(WDR-Split)
- 支持多帧宽动态融合(WDR-Stitch)
- 支持自动白平衡(AWB)、自动曝光(AE)、自动对焦(AF)
- 支持 3A 相关统计信息输出
- 支持镜头阴影矫正(LSC、MSC)
- 支持图像锐化(Sharpness)
- 支持色彩增强(CEM)
- 支持全局、局部色差矫正(GCA、LCA)
- 支持局部色调映射(PLTM)
- 支持动态范围控制(DRC)
ISP 各模块的功能
模块名称 | 描述 |
---|---|
BLC | 提供 Sensor 相关黑电平矫正。 |
AFS | 自动曝光下,保持曝光在 10ms(50Hz)或 8.33ms(60Hz)的整数倍以达到防工频闪烁的效果。 |
AE | 硬件输出自动曝光的统计值信息,软件根据统计信息调节 Sensor 以实现自动曝光的功能。 |
AF | 硬件输出自动对焦的图像清晰度评价信息统计,软件根据统计信息调节 VCM(对焦马达)以实现自动对焦的功能。 |
WB | 硬件输出白平衡统计信息,软件根据统计信息调节 R/G/B 增益以实现自动白平衡的功能。 |
AWB | 软件自动白平衡算法开关。 |
Hist | 硬件输出直方图统计信息,软件用于辅助 AE、DRC 的计算。 |
WDR Split | Sensor 内部合成宽动态图像,将 Sensor 输出的较多的 bit 位宽数据拆分成较少 bit 位宽的数据,使拆分后的数据能被 ISP 处理。 |
WDR Stitch | 对 Sensor 输出的多帧合成为一帧宽动态图像。 |
DPC | 提供对静态坏点和动态坏点的检测和矫正功能。 |
CTC | 消除由于 Sensor 和镜头的 CRA 不匹配导致的 Cross Talk 噪声 |
GCA | 全局色差矫正,用于矫正右镜头引入的轴向色差与横向色差。 |
LCA | 局部色差矫正,用于矫正右镜头引入的轴向色差与横向色差。 |
NRP | ISP 内部预 Gamma 模块,提高降噪、锐化性能。 |
D2D(Denoise) | 空域降噪。 |
D3D(TDNF) | 时域降噪,去除图像高斯噪声,使图像更平滑。 |
Dig-Gain | ISP 分通道的数据增益。 |
LSC、MSC | 用于镜头阴影矫正 |
PLTM | 局部色调映射,可提升暗部动态范围。 |
CFA(Demosaic) | 将 Bayer 格式的 Raw 图像转化到 RGB 图像,优化 CFA 参数可减弱密集纹理区因去马赛克导致的摩尔纹现象。 |
Sharpness | 图像锐化,提高图像清晰度。 |
CCM | 通过 3x3 的矩阵和矢量偏移量完成颜色空间的线性矫正。 |
CNR | 色彩降噪。 |
DRC | 硬件动态范围控制模块。 |
GTM | 全局色调映射软件算法。 |
Gamma | 分 R/G/B 三通道调整图像亮度。 |
CEM | 利用 9x17x17 大小的 3D LUT 实现颜色调整操作。 |
Encpp | 编码器 Yuv Sharp。 |
Enc 3Dnr | 编码器时域降噪。 |
Enc 2Dnr | 编码器空域降噪。 |
CSC | 通过标准的 3x3 的矩阵和矢量偏移量将输入的 RGB 图像转化为 YUV。 |
图像效果调试需要准备的环境
名称 | 说明 |
---|---|
样机 | 用于调试使用,建议调试前确定好需要量产的镜头,避免重复工作(可以参考下面的镜头 Sensor 选型一节) |
对比机 | 用于对比使用,由于镜头、sensor对成像质量影响大,建议选取对比机使用同款sensor、镜头 |
调试固件 | 图像调试依赖于adb/ip两种连接方式,必须确保调试固件能正常使用其中一种方式 |
awTuningApp | 调试ISP使用的板端应用 |
TigerISP | 调试ISP使用的PC程序,前往APST下载 |
串口 | 样机需将串口接出,便于调试过程中使用 |
光源箱 | 用于客观标定,提供多种不同色温不同亮度的照明环境 |
散光片 | 用于客观标定,又称毛玻璃 |
24色色卡 | 用于客观标定,用于色彩调优 |
V821
的awTuningApp
路径:\platform\allwinner\eyesee-mpp\middleware\sun300iw1\media\LIBRARY\libisp\tuning_app
选择及设置色彩空间
色彩空间是一种数学模型,用于描述和表示图像或视频中的颜色,它定义了一组颜色值的范围、编码方式以及颜色之间的转换规则。
不同亮度范围的色彩空间是会导致动态范围呈现差异的;
BT709-Partrange(部分范围):也称为"limited range",它是指亮度范围在 16 到 235 之间的值。这意味着黑色对应的值是 16,白色对应的值是 235。在这个范围内,0 表示纯黑,255 表示纯白,而 1 和 235 之间的值用于表示灰度和其他亮度级别。Partrange 通常用于视频广播和一些消费电子设备中,以确保在传输和显示过程中能够兼容各种设备和标准。它可以防止黑色和白色之外的信息在传输或显示中被截断或失真。
BT709-Fullrange(全范围):也称为"full range",它是指亮度范围在 0 到 255 之间的值。这意味着黑色对应的值是 0,白色对应的值是 255。在这个范围内,所有的亮度级别都可以表示。Fullrange主要用于一些专业领域和特定应用,例如计算机图形和视频编辑。在这些情况下,使用全范围可以提供更大的亮度动态范围和更精细的色彩表示。
在产品开发中,如果希望图像对比度更高,画面更通透,那么建议选择BT709-Fullrange的色彩空间
ISP、VE以及解码端,均需要设置色彩空间,在配置过程中,务必要确保三者保持设置同一个色彩空间,避免部分亮度丢失,对比度异常的问题。其中VE、ISP的色彩空间设置,请参考sample_smartIPC_demo中如下图所示配置
V821 Sample
路径:\platform\allwinner\eyesee-mpp\middleware\sun300iw1\sample\sample_smartIPC_demo\sample_smartIPC_demo.c
ISP、VE设置好色彩空间后,通过抓取ISP、VE节点确认
-
ISP节点:
cat /sys/kernel/debug/mpp/isp
-
VE节点:
cat /sys/kernel/debug/mpp/ve*
Potplayer播放器默认使用的是Full_range的色彩空间,VLC播放器默认使用的是Part_range的色彩空间,如果需要使用播放器对比图像效果,色彩空间也需要匹配上。
确认对焦是否准确
镜头对焦确认方法:
Step1:打印如下测试图,打印要求:横向、无边距、至少A4大小(越大越好)、至少600dpi(越大越好)
Step2:在充足照明(不小于1000lux)的环境拍摄,选择产品常用的拍摄距离放置测试图,最好能保证测试图高度占画面高度不小于1/8
Step3:彩色和红外下都需要测试。(如果打印版本无法在红外下使用,可到TB购买)
Step4:打开看视频的应用,画质调到最高,画面稳定后截图
Step5:用PS或ISP调试工具等打开图片,测量测试图的高度(上下边框的纵坐标差),根据最小的能看清楚三横三竖的图案所处位置,查表代入公式计算54941/Height/GE清晰度,如果图像有插值,那么公式为54941/Height/GE清晰度*插值图像高度/sensor实际高度
Step6:清晰度低于0.7的,请检查对焦
示例如下:
图片分辨率是1920x1080,测试图的高度为63像素,最小的能看清楚三横三竖的图案处于G-2E6,查表得1122.46。代入公式54941 / 63 / 1122.46 = 0.776935806,图像无插值,清晰度就是0.777
镜头 Sensor 选型
镜头与 Sensor 在匹配状态下,才能将清晰度、画面均匀度达到最佳状态,镜头选型需要注意的方面如下:
- 镜头与 Sensor 的 CRA 是否匹配
镜头与 Sensor 均有一个CRA曲线,在选型过程中,要尽量保证CRA参数要尽可能接近(一般不超过3度)
- 镜头解析力与 Sensor 尺寸是否匹配
镜头解析力大于 Sensor 尺寸,才能将清晰度更好展现,不然会导致清晰度差异及摩尔纹等问题
- 镜头靶面与 Sensor 是否匹配
Sensor尺寸一般是按照对角线长度描述(单位inch),通常是1/3',1/2'等,镜头靶面也是如此表示,如果镜头的靶面范围无法覆盖整个Sensor,那么成像出来会存在严重暗角
- 镜头光圈及焦距
光圈越大进光量越大,摄像头模组的感光性更好,图像质量更佳(尤其是在低照度)焦距决定了成像的视场角,焦距越大,视场范围越小,适合用于观察远景。
- 镜头的景深范围、点胶距离如何确定
景深范围是指摄像头在纵向距离上,能看清楚的最远点,和能看清楚的最近点之间的范围,它是可变的,由点胶距离决定
- 是否支持日夜共焦
对于需要红外补光的定焦镜头,要确定镜头+ir_cut 是否是日夜共焦的。我们一般是以白天模式去进行对焦,在可见光下,ir_cut 切到滤光片下对焦,但到夜晚以后,补红外光,ir_cut切到透光片,如果此时镜头日夜不共焦,红外夜视下图像效果就是模糊的,处于虚焦状态。要保证两种状态下对焦都是清晰的,这就要保证镜头+ir_cut是日夜共焦的才可以。
- 镜头畸变
畸变可以通过畸变校准进行修复,但在一定程度上会损失视场角,因此选择镜头时对畸变有要求的话,就要考虑选择畸变范围小的镜头。
TigerISP 工具界面简介
名称 | 说明 |
---|---|
加载参数 | 从PC本地选择一份ISP效果文件加载生效到板端 |
保存参数 | 将当前工具下的ISP效果文件保存到PC本地 |
抓取寄存器 | 抓取当前连接的sensor的寄存器配置 |
转换效果文件 | 进行效果文件的不同格式转换,如bin、h、dat |
图像标定 | 打开图像客观标定对应模块 |
实时预览 | 实时预览ISP处理后的YUV |
白平衡统计 | 预览白平衡统计的落点信息 |
编码预览 | 预览编码处理后的码流 |
编码锐化预览 | 预览编码锐化模块后的图像 |
ISP日志 | 显示ISP各模块的debug信息,用于分析及调试 |
离线调试和在线调试介绍
名称 | 说明 |
---|---|
离线调试 | 不跑应用及sample出流,awTuningApp负责出流及ISP调试 |
在线调试 | 跑应用或sample出流,awTuningApp只负责ISP调试 |
离线调试使用步骤
- 检查调试环境,确保调试固件能支持
adb/ip
的连接方式 - 设备上电后进入控制台,输入
ls /dev/video*
,确保有对应的video节点 - 准备SDK环境对应的
awTuningApp
、TigerISP
- 准备SD卡,将
awTuningApp
放入卡中,插入样机。(如设备不支持SD卡,可通过adb将awTuningApp
推到tmp
目录) - 如通过adb推到tmp目录,需要先执行
chmod 777 awTuningApp
给应用执行权限 - 小机端执行
./awTuningApp 8848 0 &
- PC端运行 TigerISP 工具,并选择对应的平台,这里以V821平台作为演示,下面的两个选项均不需勾选,点击
OK
- 根据下面介绍进行填写,离线调试下如果部分参数未填对也可以连接上,但在线调试下没填对会导致连接不上并加载参数失败。
- Comm Type :连接方式,支持adb、IP连接方式
- Port:端口号,与小机端运行时使用的保持一致,默认为8848
- Sensor:Sensor 名
- Width:输入ISP的图像宽度
- Height:输入ISP的图像高度
- FPS:帧率
- ISP:ISP通道号
- Vich:Video通道号
- Wdr Mode:是否为WDR模式,非WDR模式选择None,如果为WDR模式请选择DOL
- Stitching:是否为拼接模式,仅大尺寸拼接时需要配置
填写参数后进行连接,TigerISP 的日志如下代表连接成功
点击 Extra Tools 中的 Capture 后弹出 Capture 窗口,点击 Dump 即可实现预览。
实时预览如下
- 连接
TigerISP
使用的awTuningApp
需使用sdk默认编译出来 - 如果使用adb连接,却无法跳转到连接加载界面,请在板端运行
ifconfig -a
,检查是否有lo的网口配置,如没有需要确认是否将这个配置裁剪了,可与sdk中默认内核配置对比确认。
在线调试使用步骤
- 检查调试环境,确保调试固件能支持adb/ip的连接方式
- 设备上电后进入控制台,输入
ls /dev/video*
,确保有对应的video
节点 - 确保小机端已运行
sample
或应用出流,并可以通过手机APP/PC端/屏幕等进行预览实时图像 - 准备
SDK
环境对应的awTuningApp、TigerISP
- 准备SD卡,将
awTuningApp
放入卡中,插入样机。(如设备不支持SD卡,可通过adb
将awTuningApp
推到tmp
目录) - 如通过adb推到tmp目录,需要先执行
chmod 777 awTuningApp
给应用执行权限 - 小机端执行
./awTuningApp 8848 1 &
,注意这里传的参数与离线模式的差异 - PC端运行
TigerISP
工具,并选择对应的平台,下面的两个选项均不需勾选,点击OK
- 参数设置参考上面的离线调试介绍,在线调试设置参数必须与通路保持一致,不然会导致连接不上并加载参数失败
注意事项
- 连接
TigerISP
使用的awTuningApp
需使用sdk
默认编译出来 - 如果使用
adb
连接,却无法跳转到连接加载界面,请在板端运行ifconfig -a
,检查是否有lo
的网口配置,如没有需要确认是否将这个配置裁剪了,可与sdk
中默认内核配置对比确认 - 在线调试需严格根据应用或
sample
所跑的通路进行填写,不然会导致连接不上并加载参数失败,可通过cat /sys/kernel/debug/mpp/vi
抓取节点确认
ISP LOG 介绍及联动关系
两种联动方式介绍
ISP 有两种不同的连动关系。
ISP 的 2D 去噪、3D 去噪、色彩去噪、锐化、局部对比度、期望亮度、全局对比度、饱和度等参数都可以选择与环境亮度还是增益连动。在工具中调试这些参数时,可以看到这些参数都分成了 0~13,共 14个档位。
当选择与增益连动时:
- 1 倍增益时使用第 0 档参数,
- 2 倍增益时使用第 1 档参数,
- 4 倍增益时使用第 2 档参数,
- 8 倍增益时使用第 3 档参数,
如 3 倍增益时,会使用第 1档与第2档参数进行线性插值,如此类推。 通过ISP LOG
中的TGAIN
的值可以得知当前处于什么增益下(TGAIN
的值以 256 为 1 倍)。
当选择与环境亮度连动时:
系统会将 AE Table
分为 350 档,通过打印 lum_idx
的值来决定使用的档位
- 当
lum_idx
处于 0~25 之间时,使用第 0 档参数, - 当
lum_idx
为 50 时,使用第 1 档参数, - 当
lum_idx
为 75 时,使用第 2 档参数, - 当
lum_idx
为 100 时,使用第 3 档参数, - 如
lum_idx
为40时,会使用第 1档与第2档参数进行线性插值,如此类推。
通过 ISP LOG
中的 lum_idx
的值可以得知当前处于什么档位下。
ISP LOG 的打印方式介绍
如果想打印 ISP LOG,有以下方式可以实现
TigerISP 调试工具
通过在线/离线连接上调试工具,点击Extra Tools
中的Log
,再点击Dump
修改效果参数打印等级
通过在线/离线连接上调试工具,修改效果文件里面的Log Param,打印会从串口或CMD界面输出。
如果不想连接调试工具,也可以在效果文件里面修改打印,打印会从串口打印出来。
打印等级参考下述定义
#define ISP_LOG_AE (1 << 0) //0x1
#define ISP_LOG_AWB (1 << 1) //0x2
#define ISP_LOG_AF (1 << 2) //0x4
#define ISP_LOG_ISO (1 << 3) //0x8
#define ISP_LOG_GAMMA (1 << 4) //0x10
#define ISP_LOG_COLOR_MATRIX (1 << 5) //0x20
#define ISP_LOG_AFS (1 << 6) //0x40
#define ISP_LOG_MOTION_DETECT (1 << 7) //0x80
#define ISP_LOG_GAIN_OFFSET (1 << 8) //0x100
#define ISP_LOG_DEFOG (1 << 9) //0x200
#define ISP_LOG_LSC (1 << 10) //0x400
#define ISP_LOG_GTM (1 << 11) //0x800
#define ISP_LOG_PLTM (1 << 12) //0x1000