目录
1.何为ISP何为IQ调试
1.1、ISP概念
(1)ISP: image signal process,图像信号处理
image signal processor 图像信号处理器
(2)什么是图像信号?图像的二进制表达
(3)为什么需要处理?器件或环境不理想导致图像不理想,譬如过曝光、不通透、坏点
(4)如何处理?使用针对性算法对原始图像数据做运算处理
(5)ISP的本质:用采集后的数字图像的运算处理修补前端的不理想,尽量提升图像质量
(6)ISP处理器:进行运算处理的器件,在HI3518E中是DSP,核心是数字运算能力
1.2、在哪里做ISP
(1)镜头->sensor->ISP->VI->VPSS......
(2)ISP单元可以在sensor中,独立,或集成到AP SoC中,现在大多在AP中
(3)HI3518E中内置ISP单元
1.3、何为IQ
(1)image quality,图像质量
(2)浅层次的图像质量问题:坏点、畸变、条纹、局部不清晰等
(3)高层次的图像质量问题:通透性、锐度、色彩饱满度、色彩还原度等
1.4、总结
(1)IQ是目的,ISP是手段,调试是方法
(2)掌握ISP和IQ调试的关键:相关概念、海思MPP中ISP的实现、PQTool工具
2.海思MPP中ISP的实现框架
2.1、官方文档
(1)《HiISP开发参考》 与 《ISP_3A开发指南》
1.1 概述
ISP 通过一系列数字图像处理算法完成对数字图像的效果处理。主要包括 3A、坏点校
正、去噪、强光抑制、背光补偿、色彩增强、镜头阴影校正等处理。ISP 包括DSP
以及运行在其上的 firmware。这里主要介绍 ISP 的用户接口。
1.2 功能描述
ISP 的控制结构如图 1-1 所示,lens 将光信号投射到 sensor 的感光区域后,sensor 经过
光电转换,将 Bayer 格式的原始图像送给 ISP,ISP 经过算法处理,输出 RGB 空间域
的图像给后端的视频采集单元。在这个过程中,ISP 通过运行在其上的 firmware 对 DSP,
lens 和 sensor 进行相应控制,进而完成自动光圈、自动曝光、自动白平衡等功
能。其中,firmware 的运转靠VI模块的中断驱动。PQ Tools 工具通过网口或者
串口完成对 ISP 的在线图像质量调节。
ISP 由 DSP及运行在其上的 Firmware 组成,DSP除了完成一部分算法处理
外,还可以统计出当前图像的实时信息。视频不断采集过程中,Firmware 通过获取 DSP的图像统计信
息,重新计算,反馈控制 lens、sensor 和DSP,以达到自动调节视频图像质量的目的。
图1-1 ISP 控制结构示意图
ISP 逻辑主要流程、具体概念和功能点请参见芯片手册。
1.2.1 架构
ISP 的 Firmware 包含三部分,一部分是 ISP控制单元(控制DSP硬件寄存器的那部分代码)(\component\isp\firmware\src\main)和基础算法库(\component\isp\firmware\src\algorithms),一部分是AE/AWB/AF 算法库(\component\isp\3a,这里海思只提供了简化版),
一部分是 sensor 库(\component\isp\sensor,这里实现了驱动的逻辑部分,控制部分在Linux内核中实现)。Firmware 设计的基本思想是单独提供 3A 算法库和sensor库,由 ISP 控制单元调用基础算法库和 3A 算法库,同时 sensor 库分别向 ISP 基础算法库和 3A 算法库注册函数回调,以实现不同sensor的 适配。ISP firmware 架构如图1-2 所示。
图1-2 ISP firmware 架构
不同的 sensor 都以回调函数的形式,向 ISP 算法库注册控制函数。ISP 控制单元由于图像质量问题调度基
础算法库和 3A 算法库时,将通过这些回调函数获取ISP默认配置参数,然后控制 sensor,如调
节曝光时间、模拟增益、数字增益,控制 lens 步进聚焦或旋转光圈等。
1.2.2 开发模式
SDK 支持用户使用多种开发模式:
a. 用户使用海思的 3A 算法库。这时用户需要根据 ISP 基础算法库和 3A 算法库给出
的 sensor 适配接口去适配不同的 sensor。每款 sensor 对应一个文件夹,文件夹中
包含两个主要文件:
sensor_cmos.c
该文件中主要实现 ISP控制单元 需要的回调函数,这些回调函数中包含了 sensor 的适配算
法和参数设置,不同的 sensor 可能有所不同。
sensor_ctrl.c
sensor 的底层控制驱动,主要实现 sensor 的读写和初始化动作。用户可以根据
sensor 的 datasheet 进行这两个文件的开发,必要的时候可以向 sensor 厂家寻求支持。
b. 用户根据 ISP 库提供的 3A 算法注册接口,实现自己的 3A 算法库开发。这时用户
需要根据 ISP 基础算法库和用户的 3A 算法库给出的 sensor 适配接口去适配不同的
sensor。
c. 用户部分使用海思 3A 算法库,部分实现自己的 3A 算法库。例如 AE 使用
lib_hiae.a,AWB 使用自己的 3A 算法库。SDK 提供了灵活多变的支持方式。
1.2.3 内部流程
Firmware 内部流程分两部分,如图 1-3 所示。一部分是初始化任务,主要完成 ISP 控
制单元的初始化、ISP 基础算法库的初始化、3A 算法库的初始化,包括调用 sensor 的
回调获取 不同sensor 的初始化参数;另一部分是动态调节过程,单独开一个线程,在这个过程中,
firmware 中的 ISP 控制单元调度 ISP 基础算法库和 3A 算法库,实时计算并进行相应控
制。
1.2.4 软件流程
ISP 作为前端采集部分,需要和视频采集单元(VIU)协同工作。ISP 初始化和基本配
置完成后,需要 VIU 进行接口时序匹配。一是为了匹配不同 sensor 的输入时序,二是
为 ISP 配置正确的输入时序。待时序配置完成后,ISP 就可以启动 Run 来进行动态图
像质量调节。此时输出的图像被 VIU 采集,进而送去显示或编码。软件使用流程如图
1-5 示。
PQ Tools 工具主要完成在 PC 端进行动态图像质量调节,可以调节多个影响图像质量的
因子,如去噪强度、色彩转换矩阵、饱和度等。
图1-5 ISP firmware 使用流程
如果用户调试好图像效果后,可以使用 PQ Tools 工具提供的配置文件保存功能进行配
置参数保存。在下次启动时系统可以使用 PQ Tools 工具提供的配置文件加载功能加载
已经调节好的图像参数。
(2)重点是ISP的框架架构和软件流程
2.2、sample中ISP相关部分
(1)核心代码在SAMPLE_COMM_ISP_Init函数中
函数调用层次:
main
SAMPLE_VENC_720P_CLASSIC
SAMPLE_COMM_VI_StartVi
SAMPLE_COMM_VI_StartIspAndVi
SAMPLE_COMM_ISP_Init
sensor_register_callback
cmos_init_sensor_exp_function
HI_MPI_ISP_SensorRegCallBack
cmos_init_ae_exp_function
HI_MPI_AE_SensorRegCallBack
cmos_init_awb_exp_function
HI_MPI_AWB_SensorRegCallBack
HI_MPI_AE_Register
HI_MPI_AWB_Register
HI_MPI_AF_Register
HI_MPI_ISP_MemInit
HI_MPI_ISP_SetWDRMode
HI_MPI_ISP_SetPubAttr
HI_MPI_ISP_Init
SAMPLE_COMM_ISP_Run
Test_ISP_Run
HI_MPI_ISP_Run
2.3、sensor注册内部细节
sensor_cmos.c 文件中有很多全局变量,这些全局变量都是ISP的默认配置的算法参数
并且通过comsxxx等 众多回调函数 给ISP控制单元注册获取
2.4、ISP注册内部细节
在3a算法库向isp控制单元注册的回调函数的实现中,发现都是一些寄存器的设置,可见,算法的真正实现是在硬件DSP运算单元上,如果全是软件来写3a算法,则会加重SoC的负担
3.IQ调试相关的概念
3.1、黑电平
(1)暗电流
物理器件不可能是理想的, 由于杂质、 受热等其他原因的影响, 即使没有光照射到像素,像素单元也会产生电荷, 这些电荷产生了暗电流。 而且, 暗电流与光照产生的电荷很难进行区分。
(2)Black Level(一定程度上解决暗电流的问题)
用来定义图像数据为0时对应的信号电平。
3.2、镜头阴影矫正
(1)LSC, Lens Shading Correction,镜头阴影矫正
(2)镜头物理原因,导致一帧内中心点像素的亮度值到边缘处逐渐减弱
(3)光波长的原因,导致图像有其它不同颜色的分光
(4)镜头阴影是摄像头系统本身引入的问题,所以需要ISP算法进行矫正
(5)矫正说明,参考:ISP-镜头阴影校正(LSC)_洗脚水煮饺子的博客-CSDN博客
3.3、坏点矫正
(1)DPC, defect pixel correction(有时也写为:bad point correction,BPC)
ISP-坏点校正(DPC)_洗脚水煮饺子的博客-CSDN博客
3.4、自动曝光
(1)AE, auto exposure
(2)曝光时间:sensor 积累电荷的时间,是 sensor pixel 从开始曝光到电量被读出的这
段时间。
(3)曝光增益:由于光电转换后的电信号特别微弱,比如只有几mv,不足以进行AD转换,所以需要对 sensor 的输出电荷进行放大,曝光增益就是总的放大系数,一般分为有模拟增益(again)和数字增益(dgain)两步,模拟增益引入的噪声会稍小,所以一般优先用模拟增益。
3.5、DRC与WDR
(1)DRC:Dynamic Range Compression
即动态范围压缩,目的是调整图像的动态范围,使得图像显示出更多的信息。 DRC 模块是一个基于人眼视觉系统特性的高级局部色阶映射(多空间动态范围压缩)引擎。
开启后,会提升暗处细节,同时也提升噪声,导致噪声强度相比DRC关闭时更大些,此时边缘增强,去噪功能都应该与DRC有关
简而言之就是让图像局部提升曝光增益一种功能
BLC:backlight compensation,背景光补偿
(2)WDR和DRC区别:
DRC开启后主要是提升暗处细节同时也提升噪声,所以在暗光下要考虑如何去掉噪点;而WDR是局部亮局部暗的情况下都能完美曝光显示
(3)WDR和BLC的效果对比,参考:
宽动态 (WDR)介绍和理解_A.Crocodile的博客-CSDN博客
ISP算法:宽动态HDR_isp hdr_蝴蝶也可以飞过沧海的博客-CSDN博客
3.6、噪声抑制
(1)noise reduction/denoise,一般图像比较暗的情况下噪声比较大
3.7、颜色插值
(1)Demosaic, 去马赛克,由bayer图像转换成RGB图像就有这个过程
(2)参考:图像Demosaic算法及其matlab实现_matlab demosaic_lemonHe_的博客-CSDN博客
3.8、自动白平衡
(1)WB:white balance,白平衡,同一个物体在光照不同的情况下呈现不同的颜色
(2)AWB:automatic white balance,自动白平衡
3.9、颜色矫正
(1)color correction
(2)CCM, color correction matrix
(3)sensor 对光谱的响应,在RGB 各分量上与人眼对光谱的响应通常是有偏差的,需要通过一个色彩校正矩阵CCM(Color Correction Matrix)校正光谱响应的交叉效应和响应强度,使前端捕获的图片与人眼视觉在色彩上保持一致。实际上矫正过程就是个矩阵运算过程。
(4)颜色矫正能提升图像饱和度,饱和度也称色彩的纯度。取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。
3.10、伽马矫正
(1)gamma correction,用于提高低灰度处和周遭环境的对比度
(2)参考:gamma原理及快速实现算法_gamma计算公式_Melody20210917的博客-CSDN博客
3.11、自动增益控制
(1)AGC:automatic gain control,自动增益控制
(2)使用算法自动调节增益系数,使输入值变化很大时输出值基本保持线性不变
3.12、颜色空间转换
(1)CSC(Color Space Conversion)颜色空间转换,一般是将sRGB空间转换到YUV。
(2)LUT(Look-Up Table)查找表技术,可以在两组数据之间建立对应关系。可以用于颜色空间转换、CCM等
3.13、色度矫正
(1)CA (Chroma Adjustment)
色度调整,在亮度不变的情况下,调整色度。如YUV,对UV进行处理。
(2)CAC (Chromatic Aberration Correction)
由于不同颜色的光在通过镜头时以不同的速度传播,镜头对于所有波长的光不能聚集于一点而引起的“紫边”现象。和镜头阴影第二点一样。
3.14、图像锐化
(1)Sharpen
(2)图像锐化的实质:锐化后图像=原图像+加重的边缘
3.15、感知色
PCR (Preferred Color Reproduction)
大部分情况图像是给人看的,不同的人有不同的颜色喜好,根据用户爱好改变色调空间,称为喜好色。另一种称为感知色。
3.16、图像增强
IE(Image Enhancement)
增强图像中的有用信息,它可以是一个失真的过程,其目的是要改善图像的视觉效果,针对给定图像的应用场合。图像增强涉及许多操作,如降噪,边缘增强,对比度增强。因此,图像增强可以不顾增强后的图像是否失真,只要看着舒服就行。
4.PQTool工具的安装和使用
4.1、PQTool的2部分介绍
Hi3518E V200R001C01SPC030\01.software\pc\PQ_TOOL\Hi3518E_PQ_V1.0.3.0是开发板端服务器软件
Hi3518E V200R001C01SPC030\01.software\pc\PQ_TOOL\PQTools是PC端客户端软件
4.2、准备工作
(1)串口终端和telnet双登录以便两边同时运行程序
(2)Windows IP设置好,防火墙关闭
(3)开发板端运行sample和HiIspTool.sh
(4)pc端运行HiPQTools
配置以上,点击OK
连接之后,这个工具会通过网络向开发板服务器端获取DSP所有的参数
All read可以重新获取这些参数
All write可以将更改完的参数写回开发板去
read Page是获取当前页的参数
write Page是只写回去当前页的参数
auto write是实时更改、实时写
比如我修改Gamma矫正相关的参数
注意:这里只是暂时更改了内存中那份isp使用的参数,如果重新运行sample,还是会使用代码中的那份参数,代码是没有修改的,所以接下来就是将这组参数修改到代码中去,然后运行测试
5.模拟图像参数调整试验
5.1、gamma参数试验
(1)PQTool工具读取gamma的默认参数,存成txt,和源码中写死的值对比
(2)PQTool中更改gamma参数,保存效果截图,保存新的参数txt
(3)将参数txt更改格式后备用
(4)在isp源码中更改新参数,并且重新编译整个isp和sample
(5)重新部署新生成的hi3518e_isp.ko和libisp.so文件到开发板,重启开发板
(6)在开发板中运行sample看效果,和之前的截图对比