海思平台图像的IQ调试

目录

1.何为ISP何为IQ调试

1.1、ISP概念

1.2、在哪里做ISP

1.3、何为IQ

1.4、总结

2.海思MPP中ISP的实现框架

2.1、官方文档

2.2、sample中ISP相关部分

2.3、sensor注册内部细节

2.4、ISP注册内部细节

3.IQ调试相关的概念

3.1、黑电平

3.2、镜头阴影矫正

3.3、坏点矫正

3.4、自动曝光

3.5、DRC与WDR

3.6、噪声抑制

3.7、颜色插值

3.8、自动白平衡

3.9、颜色矫正

3.10、伽马矫正

3.11、自动增益控制

3.12、颜色空间转换

3.13、色度矫正

3.14、图像锐化

3.15、感知色

3.16、图像增强

4.PQTool工具的安装和使用

4.1、PQTool的2部分介绍

4.2、准备工作

5.模拟图像参数调整试验

5.1、gamma参数试验


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函数中

函数调用层次:

mainSAMPLE_VENC_720P_CLASSICSAMPLE_COMM_VI_StartViSAMPLE_COMM_VI_StartIspAndViSAMPLE_COMM_ISP_Initsensor_register_callbackcmos_init_sensor_exp_functionHI_MPI_ISP_SensorRegCallBackcmos_init_ae_exp_functionHI_MPI_AE_SensorRegCallBackcmos_init_awb_exp_functionHI_MPI_AWB_SensorRegCallBackHI_MPI_AE_RegisterHI_MPI_AWB_RegisterHI_MPI_AF_RegisterHI_MPI_ISP_MemInitHI_MPI_ISP_SetWDRModeHI_MPI_ISP_SetPubAttrHI_MPI_ISP_InitSAMPLE_COMM_ISP_RunTest_ISP_RunHI_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看效果,和之前的截图对比

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4354.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从源码全面解析 dubbo 服务端服务调用的来龙去脉

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

如何删除Git仓库中的敏感文件及其历史记录

本文主要介绍如何使用 git filter-branch 命令删除 Git 仓库中的敏感文件及其历史记录。在 Git 中,我们通常会将敏感信息(如密码、私钥等)存储在 .gitignore 文件中,以防止这些信息被意外提交到仓库。有时候,因为疏忽或私有仓库转公开仓库&am…

RocketMQ --- 高级篇

一、高级功能 1.1、消息存储 分布式队列因为有高可靠性的要求,所以数据要进行持久化存储。 消息生成者发送消息MQ收到消息,将消息进行持久化,在存储中新增一条记录返回ACK给生产者MQ push 消息给对应的消费者,然后等待消费者返回…

Python 使用 NetworkX

Python 使用 NetworkX 说明:本篇文章主要讲述 python 使用 networkx 绘制有向图; 1. 介绍&安装 NetworkX 是一个用于创建、操作和研究复杂网络的 Python 库。它提供了丰富的功能,可以帮助你创建、分析和可视化各种类型的网络&#xff…

基于OpenCV的人脸对齐步骤详解及源码实现

目录 1. 前言2. 人脸对齐基本原理与步骤3. 人脸对齐代码实现 1. 前言 在做人脸识别的时候,前期的数据处理过程通常会遇到一个问题,需要将各种人脸从不同尺寸的图像中截取出来,再进行人脸对齐操作:即将人脸截取出来并将倾斜的人脸…

76、基于STM32单片机车牌识别摄像头图像处理扫描设计(程序+原理图+PCB源文件+相关资料+参考PPT+元器件清单等)

单片机主芯片选择方案 方案一:AT89C51是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元&a…

使用Streamlit和Matplotlib创建交互式折线图

大家好,本文将介绍使用Streamlit和Matplotlib创建一个用户友好的数据可视化Web应用程序。该应用程序允许上传CSV文件,并为任何选定列生成折线图。 构建Streamlit应用程序 在本文中,我们将指导完成创建此应用程序的步骤。无论你是专家还是刚刚…

CTF安全竞赛介绍

目录 一、赛事简介 二、CTF方向简介 1.Web(Web安全) (1)简介 (2)涉及主要知识 2.MISC(安全杂项) (1)介绍 (2)涉及主要知识 3…

设计模式之行为型模式

本文已收录于专栏 《设计模式》 目录 概念说明大话设计模式行为型模式 各模式详解第一组观察者模式(Observer Pattern)模板方法模式(Template Method Pattern)命令模式(Command Pattern)状态模式&#xff0…

智能指针+拷贝构造+vector容器+多态引起的bug

今天在调试一段代码的时候,VC编译提示: error C2280: “T485CommCtrlPara::T485CommCtrlPara(const T485CommCtrlPara &)”: 尝试引用已删除的函数 函数执行部分如下: 看意思是这个pComm485Pro已经消亡了,后续push_back到ve…

【Linux】MHA高可用配置及故障切换

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 MHA高可用配置及故障切换 MHA高可用配置及故障切换MHA概述MHA 的组成MHA 的特点 搭建 MySQL MHA1.Master、Slave1、Slave2 节点上安装 mysql5.72.修改…

Web项目思路

登录注册 账号密码登录,注册时生成唯一id。 找回密码 通过验证邮箱来修改现在的密码。 主页 显示最受欢迎的博主,点赞次数最多的博客,根据用户收藏夹中的偏好推荐博客等 遍历数据库,找到粉丝数最多的博主和点赞次数最多的博客…