下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI、VDEC、VPSS、VGS、VO、NNIE,其中涉及的内容,大家可以参考之前我写的博客:

基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析一 :

https://www.cnblogs.com/iFrank/p/14481080.html

  整个的RFCN VI实现过程在上一篇随笔已经介绍了,函数具体含义也通过注释进行了一一的说明,而在VI初始化过程中,用到了ISP(Image Signal Processing) 图像信号处理的相关知识,海思也为其定义了API接口,下面随笔将介绍ISP相关概念,具体参考《HiISP开发参考》,方便大家对VI整个过程进行了更为清晰的认识。

1、基本概述

  ISP 通过一系列数字图像处理算法完成对数字图像的效果处理。主要包括 3A、坏点校正、去噪、强光抑制、背光补偿、色彩增强、镜头阴影校正等处理。ISP 包括逻辑部分以及运行在其上的 firmware。

1.1、功能描述

  ISP 的控制结构如图 1所示,lens 将光信号投射到 sensor 的感光区域后,sensor 经过光电转换,将 Bayer 格式的原始图像送给 ISP,ISP 经过算法处理,输出 RGB 空间域的图像给后端的视频采集单元。在这个过程中,ISP 通过运行在其上的 firmware 对 ISP逻辑,lens 和 sensor 进行相应控制,进而完成自动光圈、自动曝光、自动白平衡等功能。其中,firmware 的运转靠视频采集单元的中断驱动。PQ Tools 工具通过网口或者串口完成对 ISP 的在线图像质量调节。
图1 ISP控制结构示意图
  ISP 由 ISP 逻辑及运行在其上的 Firmware 组成,逻辑单元除了完成一部分算法处理外,还可以统计出当前图像的实时信息。Firmware 通过获取 ISP 逻辑的图像统计信息,重新计算,反馈控制 lens、sensor 和 ISP 逻辑,以达到自动调节图像质量的目的。

1.2、ISP构架

  ISP 的 Firmware 包含三部分,一部分是 ISP 控制单元和基础算法库,一部分是AE/AWB 算法库,一部分是 sensor 库。Firmware 设计的基本思想是单独提供 3A 算法库,由 ISP 控制单元调度基础算法库和 3A 算法库,同时 sensor 库分别向 ISP 基础算法库和 3A 算法库注册函数回调,以实现差异化的 sensor 适配。ISP firmware 架构如图 2 所示。 

图2 ISP firmware构架

  不同的 sensor 都以回调函数的形式,向 ISP 算法库注册控制函数。ISP 控制单元调度基础算法库和 3A 算法库时,将通过这些回调函数获取初始化参数,并控制 sensor,如调节曝光时间、模拟增益、数字增益,控制 lens 步进聚焦或旋转光圈等。

1.3、Firmware内部流程

  Firmware 内部流程分两部分,一部分是初始化任务,主要完成 ISP 控制单元的初始化、ISP 基础算法库的初始化、3A 算法库的初始化,包括调用 sensor 的回调获取 sensor 差异化的初始化参数;另一部分是动态调节过程,在这个过程中, firmware 中的 ISP 控制单元调度 ISP 基础算法库和 3A 算法库,实时计算并进行相应控制。Firmware 的软件结构如图

3 所示。 
 


图3 ISP firmware 软件结构

2、软件流程

  ISP 作为前端采集部分,需要和视频采集单元(VIU)协同工作。ISP 初始化和基本配置完成后,需要 VIU 进行接口时序匹配。一是为了匹配不同 sensor 的输入时序,二是为 ISP 配置正确的输入时序。待时序配置完成后,ISP 就可以启动 Run 来进行动态图像质量调节。此时输出的图像被 VIU 采集,进而送去显示或编码。软件使用流程如图4所示。 

  PQ Tools 工具主要完成在 PC 端进行动态图像质量调节,可以调节多个影响图像质量的因子,如去噪强度、色彩转换矩阵、饱和度等。

  如果用户调试好图像效果后,可以使用 PQ Tools 工具提供的配置文件保存功能进行配
置参数保存。在下次启动时系统可以使用 PQ Tools 工具提供的配置文件加载功能加载
已经调节好的图像参数。 
 

下面给出代码示例:

 1 HI_S32 s32Ret;
2 ALG_LIB_S stAeLib;
3 ALG_LIB_S stAwbLib;
4 ISP_PUB_ATTR_S stPubAttr;
5 pthread_t isp_pid;
6 VI_PIPE ViPipe = 0;
7
8 /* 注册sensor库 */
9 s32Ret = sensor_register_callback(ViPipe, &stAeLib, &stAwbLib);
10 if (HI_SUCCESS != s32Ret) {
11 printf(”register sensor failed!\n”);
12 return s32Ret;
13 }
14 /* 注册海思AE算法库 */
15 stAeLib.s32Id = 0;
16 strcpy(stAeLib.acLibName, HI_AE_LIB_NAME);
17 s32Ret = HI_MPI_AE_Register(ViPipe, &stAeLib);
18
19 if (HI_SUCCESS != s32Ret) {
20 printf(”register ae lib failed!\n”);
21 return s32Ret;
22 }
23 /* 注册海思AWB算法库 */
24 stAwbLib.s32Id = 0;
25 strcpy(stAwbLib.acLibName, HI_AWB_LIB_NAME);
26
27 s32Ret = HI_MPI_AWB_Register(ViPipe, &stAwbLib);
28 if (HI_SUCCESS != s32Ret) {
29 printf(”register awb lib failed!\n”);
30 return s32Ret;
31 }
32 /* 初始化ISP外部寄存器 */
33 s32Ret = HI_MPI_ISP_MemInit(ViPipe);
34 if (s32Ret != HI_SUCCESS)
35 {
36 printf("%s: HI_MPI_ISP_Init failed!\n", __FUNCTION__);
37 return s32Ret;
38 }
39
40 /* 配置图像公共属性 */
41 s32Ret = HI_MPI_ISP_SetPubAttr(ViPipe, &stPubAttr);
42 if (s32Ret != HI_SUCCESS)
43 {
44 printf("%s: HI_MPI_ISP_SetPubAttr failed with %#x!\n", __FUNCTION__,
45 s32Ret);
46 return s32Ret;
47 }
48 /* 初始化ISP Firmware */
49 s32Ret = HI_MPI_ISP_Init(ViPipe);
50 if (HI_SUCCESS != s32Ret) {
51 printf(”isp init failed!\n”);
52 return s32Ret;
53 }
54
55 /* HI_MPI_ISP_Run单独启动线程运行 */
56 if (0 != pthread_create(&isp_pid, 0, ISP_Run, NULL)){
57 printf("create isp running thread failed!\n");
58 return HI_FAILURE;
59 }
60 /* 启动VI/VO等业务 */
61 //……
62
63 /* 停止VI/VO等业务 */
64 s32Ret = HI_MPI_ISP_Exit(ViPipe);
65 if (HI_SUCCESS != s32Ret) {
66 printf(”isp exit failed!\n”);
67 return s32Ret;
68 }
69
70 pthread_join(isp_pid, 0);
71 return HI_SUCCESS;

基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析(HiISP)二 :的更多相关文章

  1. 基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析一 :

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...

  2. 基于Hi3559AV100 RFCN实现细节解析-(2)RFCN数据流分析

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...

  3. 基于Hi3559AV100 RFCN实现细节解析-(1)VGS初介绍

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,因为RFCN用到了VGS加框,因此本篇随笔将给出VGS视频图像子系统的具体说明,便于后面RFCN的细节实现说明. VGS 是视频图形子 ...

  4. Android系统--Binder系统具体框架分析(二)Binder驱动情景分析

    Android系统--Binder系统具体框架分析(二)Binder驱动情景分析 1. Binder驱动情景分析 1.1 进程间通信三要素 源 目的:handle表示"服务",即向 ...

  5. 基于OpenCv的人脸检测、识别系统学习制作笔记之二

    在网上找到了一个博客,里面有大量内容适合初学者接触和了解人脸检测的博文,正好符合我目前的学习方面,故将链接放上来,后续将分类原博客的博文并加上学习笔记. 传送门: http://blog.sina.c ...

  6. 通过Dapr实现一个简单的基于.net的微服务电商系统(十五)——集中式接口文档实现

    之前有小伙伴在评论区留言说如何集成swagger,最开始没有想透给了对方一个似是而非的回答.实际上后来下来想了一下,用.NET5 提供的Source Generator其实可以很方便的实现接口集成.今 ...

  7. 网络编程-基于Websocket聊天室(IM)系统

    目录 一.HTML5 - Websocket协议 二.聊天室(IM)系统的设计 2.1.使用者眼中的聊天系统 2.2.开发者眼中的聊天系统 2.3.IM系统的特性 2.4.心跳机制:解决网络的不确定性 ...

  8. NET/ASP.NET Routing路由(深入解析路由系统架构原理)(转载)

    NET/ASP.NET Routing路由(深入解析路由系统架构原理) 阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模 ...

  9. 基于 HTML5 WebGL 的地铁站 3D 可视化系统

    前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...

随机推荐

  1. hdu 2089不要62 (数位dp)

    Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来 ...

  2. 洛谷-P1434 [SHOI2002]滑雪 (记忆化搜索)

    题意:有一个\(R*C\)的矩阵,可以从矩阵中的任意一个数开始,每次都可以向上下左右选一个比当前位置小的数走,求走到\(1\)的最长路径长度. 题解:这题很明显看到就知道是dfs,但是直接爆搜会TLE ...

  3. Codeforces Round #663 (Div. 2) C. Cyclic Permutations (构造,图?)  

    题意:对于某个序列,若\(1\le i\le n\),\(1\le j\le i\)且\(p_j>p_i\),或者\(1\le i\le n\),\(i<j \le n\)且\(p_j&g ...

  4. 分布式一致性算法 2PC 3PC Paxos

    分布式一致性算法的目的是为了解决分布式系统 一致性算法可以通过共享内存(需要锁)或者消息传递实现,本文讨论后者实现的一致性算法,不仅仅是分布式系统中,凡是多个过程需要达成某种一致的场合都可以使用. 本 ...

  5. Cobalt Strike特征隐藏

    前言 首先红蓝对抗的时候,如果未修改CS特征.容易被蓝队溯源. 前段时间360公布了cobalt strike stage uri的特征,并且紧接着nmap扫描插件也发布了.虽说这个特征很早就被发现了 ...

  6. Gym 101170I Iron and Coal(BFS + 思维)题解

    题意:有一个有向图,有些点是煤,有些点是铁,但不会同时有铁和煤.现在我要从1出发,占领可以到达的点.问最少占领几个点能同时拥有一个煤和一个铁(1不用占领). 思路:思路很秀啊.我们从1往外bfs,得到 ...

  7. JavaScript Engine 可视化

    JavaScript Engine 可视化 图解 JavaScript Engine JavaScript 可视化 (7 部曲) ️ JavaScript Visualized: Event Loop

  8. React Hooks 内部实现原理

    React Hooks 内部实现原理 源码分析 // 链表 React Hooks 原理剖析 refs https://reactjs.org/docs/hooks-intro.html https: ...

  9. iframe & sandbox & 微前端

    iframe & sandbox & 微前端 沙箱,容器,隔离 sandbox demo svg progress bar https://stackoverflow.com/ques ...

  10. 一周精彩内容分享(第 3 期):开工大吉的 B 面

    这里记录过去一周,我看到的值得分享的东西. 一方面是整理记录一下自己一周的学习,另一方面也是期待自己有更多的输出,有更多的价值. 周刊开源(Github:wmyskxz/weekly),欢迎提交 is ...