FPGA转行ISP的探索之二:技术路线和概念

图片

ISP领域的概念

1 相机方面的概念

1)DENOISE,图像去噪

图像噪声按噪声与信号的关系可分为加性噪声和乘性噪声;按照产生原因可分为外部噪声和内部噪声;按照统计特性可分为平稳噪声和非平稳噪声;平稳噪声基于统计后的概率密度函数又可以分为:高斯噪声、泊松噪声、脉冲噪声、瑞利噪声。

图像去噪的算法一般是滤波,比如空域滤波,变换域滤波,机器学习方法等,经常是用OpenCV的代码来写。

2) CONTRAST,对比度

对比度调节在科研成像中的两个重要作用:将图像调亮,让噪音消失。
图像由像素组成,每个像素的值我们称之为灰度值(Gray Scale),灰度值的大小代表每个像素的亮度,越大越亮;

灰度最小值为0,最大值由图像的位深决定,例如位深为8的图像(即我们常说的8位的图像或者8bit的图像),最大值为2的8次方即256;

当图像在电脑屏幕上显示时,0并不一定代表最暗(即纯黑),256并不一定代表最亮(即纯白),我们完全可以将譬如203设置为最亮,15设置为最暗;

将图像的灰度值与电脑屏幕的纯白和纯黑对应设置的过程我们称之为图像的对比度调节。说通俗点就是拉对比度。

3) SATURATION,饱和度

饱和(Saturation)数值是成像传感器(imaging sensor)的一个重要指标,不同相机的饱和(saturation)的数值不一样。

饱和度计算公式:

Ω=双键数+三键数×2+环数

饱和度可定义为彩度除以明度,与彩度同样表征彩色偏离同亮度灰色的程度。

但由于其和彩度决定的是表现于人眼里的同一个效果,

所以才会出现视彩度与饱和度为同一概念的情况。

可以理解为饱和度虽然表现的东西在人眼中与彩度一致,

但实际是包含着彩度更高一级的单位(饱和度=彩度÷明度)。

4) SHARPNESS,清晰度/图像锐化

sharpness在图像的边缘更明显,一般用图像的边缘响应来测量。

sharpness有几种测量方法:10%-90%上升距离法,MTF,空间频域,斜边算法等。

假设,在一张白色图像里有一个黑色条纹,那么黑色条纹边缘的像素亮度由里到外是逐渐升高的,最暗的地方是黑色条纹的中间部分,最亮的地方在白色区域,而上图中亮度变化的快慢就表示成像系统的清晰程度。取10%-90%这一距离来表示清晰度,距离越大,说明边缘像素的亮度变化越缓慢,黑白交界处就越模糊,清晰度就越低。

图片

2 手机的camera结构和成像流程

不同于胶卷相机和单反相机,手机中的Camera已经集成为一个整体的模组,感光sensor(芯片)为核心器件,其它组成器件包括镜头、音圈马达、eeprom等。

其中的sensor IC,音圈马达和eeprom需要通过I2C进行控制,图像数据通过MIPI协议进行传输。其基本工作原理为:景物通过镜头生成光学图像投射到图像传感器表面上,产生电信号,经过A/D转换后变为数字图像信号,再将数字图像信号输出至手机的图像处理芯片(ISP)中。

3 ISP的技术路线

通常分为两种技术路线
1)针对相对固定的业务场景,本身又包含强大的算法团队支撑,也就是说可以明确自己想要什么算法落在芯片上(又能保证在产品周期内算法的竞争力),通常采用ASIC的设计。这种设计的优势对芯片来说是显而易见的,即最优的PPA,缺点是算法不能改动。采用此类设计方案的厂商包括比如Nvidia, TI和海思等

2)另一种方案是采用软核的方案,即采用可编程的DSP加速ISP算法。优势就在于其可编程性增加了算法的灵活性,便于OEM提供差异化的算法针对不同业务场景,主要厂商包括高通和NXP等.

4 典型ISP:S32V处理器

该芯片是NXP提供的第二代视觉处理器系列,旨在支持图像处理的计算密集型应用,并提供了一个ISP、强大的3D GPU、双APEX-2视觉加速器和安全性,以及支持SafeAssure™。S32V适用于ADAS、NCAP前视摄像头、异物检测和识别、环视、机器学习和传感器融合应用,S32V专为汽车级可靠性、功能安全和安全措施而设计,以支持汽车和工业自动化。

从编程的角度来看完成ISP的功能需要两个维度的编程工作:
1)Kernel层面的函数实现pixel级图像处理功能,通常用来实现单一或者融合的ISP算法,计算过程运行在IPUS/IPUV中。
2)Graph层面用于组合和排列各种算法实现完整的ISP pipeline. 这部分工作更像是对处理流程的描述,然后通Seqeuncer完成IPU的任务调度和buffer的状态管理。Sequence的代码由厂商作为firmware提供,并向用户开放特定API用于如IPU寄存器读写请求等工作。

5 ISP firmware

ISP firmware是指嵌入式系统中的固件,用于控制和管理图像传感器(Image Sensor)的功能和算法。

ISP firmware通常由多个部分组成,包括ISP控制单元和基础算法库、AE(Auto Exposure)/AWB(Auto White Balance)/AF(Auto Focus)算法库以及sensor库

其中,ISP控制单元和基础算法库负责调度和管理各种算法库的运行,而AE/AWB/AF算法库则负责实现自动曝光、自动白平衡和自动对焦等功能。sensor库则用于与ISP基础算法库和3A算法库进行函数回调,以实现对不同传感器的适配。
通过ISP firmware,可以实现对图像传感器的控制和优化,从而提高图像质量和性能。它可以应用于各种嵌入式系统中,如数字相机、智能手机、安防监控等。

6 ISP的工作

大致理解ISP的工作是在做固件/驱动,会看已有产品的芯片手册,会用OpenCV编程(C语言或者Python),可能也有一部分类似FPGA的工作,只不过因为芯片是固定的(ASIC),是了解而不是HDL编程
在这里插入图片描述

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

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

相关文章

【C++搜索】BFS:走迷宫

题目描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着…

wsl内置Ubuntu使用 Dinky 与 Flink 集成

Dinky 与 Flink 集成 说明 本文档介绍 Dinky 与 Flink 集成的使用方法, 如果您是 Dinky 的新用户, 请先阅读 本文档, 以便更好的搭建 Dinky 环境 如果您已经熟悉 Dinky 并已经部署了 Dinky, 请跳过本文档的前置要求部分, 直接阅读 Dinky 与 Flink 集成部分 注意: 本文档基…

MinGW编译OpenCV4.5(64位/32位通用,附编译完成包下载)

MinGW编译OpenCV4.5(64位/32位通用,附编译完成包下载) MinGW编译OpenCV4.5

MySQL高级特性篇(3)-全文检索的实现与优化

MySQL数据库全文检索是指对数据库中的文本字段进行高效地搜索和匹配。在MySQL数据库中,可以使用全文检索来实现快速的文本搜索功能,并且可以通过一些优化手段提高全文检索的性能。 一、MySQL全文检索的基本概念 全文检索是一种将关键字搜索与自然语言处…

JAVA面试框架篇

1. Spring refresh 流程 要求 掌握 refresh 的 12 个步骤 Spring refresh 概述 refresh 是 AbstractApplicationContext 中的一个方法,负责初始化 ApplicationContext 容器,容器必须调用 refresh 才能正常工作。它的内部主要会调用 12 个方法&#x…

单主模式和多主模式切换

1 组复制模式切换注意点 组复制有两种运行模式,一种是单主模式,一种是多主模式。这个模式是在整个组中设置的,由 group_replication_single_primary_mode 这个系统变量指定,而且在所有成员上必须保持一致。ON 表示单主模式&#…

禁止电子邮箱地址登录WordPress后台的插件No Login by Email Address

WordPress 4.5及之后的版本增加了使用注册用户的电子邮件地址代替用户名登录的功能,但是大多数个人站长的管理员邮箱地址都是固定,而且到其他站点进行评论留言也是同一个邮箱地址,很容易给一些别有用心的可乘之机,所以禁止WordPre…

(AtCoder Beginner Contest 341)(A - D)

比赛地址 : Tasks - Toyota Programming Contest 2024#2&#xff08;AtCoder Beginner Contest 341&#xff09; A . Print 341 模拟就好了 &#xff0c; 先放一个 1 , 然后放 n 个 01 ; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout…

【Effective Objective - C 2.0】——读书笔记(五)

文章目录 二十九、理解引用计数三十、以ARC简化引用计数三十一、在dealloc方法中只释放引用并解除监听三十二、编写异常安全代码时留意内存管理问题三十三、以弱引用避免保留环三十四、以”自动释放池块“降低内存峰值三十五、用"僵尸对象"调试内存管理问题三十六、不…

C++知识点总结(15):选择排序、插入排序

文章目录 一、选择排序1. 概念2. 伪代码3. 程序4. 例题第k大的数 二、元素插入1. 伪代码2. 程序 三、插入排序1. 概念2. 伪代码3. 程序4. 例题洛谷 P1152 四、分析 一、选择排序 1. 概念 下标12345最小值原始43521/第一次135241第二次125342第三次123543第四次123454完成1234…

C++ 调用js 脚本

需求&#xff1a; 使用Qt/C 调用js 脚本。Qt 调用lua 脚本性能应该是最快的&#xff0c;但是需要引入第三方库&#xff0c;虽然也不是特别麻烦&#xff0c;但是调用js脚本&#xff0c;确实内置的功能&#xff08;C 调用lua 脚本-CSDN博客&#xff09; 步骤&#xff1a; 1&…

解决elementUI固定列后,下方多了一条横线的问题

最近遇到一个bug,如下图,el-table的操作列使用fixed属性固定后,下方多了一条横线: 我们将样式设置高优先,以覆盖内联样式,如下是less里使用穿透样式解决的办法: <style lang="less" scoped> /deep/ .el-table__fixed-right {height: 100

go内置库函数实现client与server数据的发送接收

功能&#xff1a;客户端持续写入数据&#xff0c;直到输入exit退出&#xff0c;服务端读取数据并打印 注意&#xff1a;server和client目录在同一层级 服务端 server/main package mainimport ("fmt""net" )func main() {listen, err : net.Listen(&quo…

【牛客 NC253455】小红走排列 题解(链表+位集合+贪心算法)

题目描述 对于一个排列&#xff0c;小红定义该排列的总消耗为&#xff1a;1走到2&#xff0c;2走到3&#xff0c;……&#xff0c;最终从 n − 1 n-1 n−1走到 n n n所需的最少的总步数。其中&#xff0c;每一步可以向左走一步&#xff0c;也可以向右走一步。 现在&#xff0…

Kubernetes基础(二十一)-k8s的服务发现机制

1 概述 Kubernetes&#xff08;K8s&#xff09;是一个强大的容器编排平台&#xff0c;提供了丰富的功能来简化容器化应用的管理。其中之一重要的特性就是服务发现机制&#xff0c;它使得应用程序能够在K8s集群中动态地发现和访问其他服务。本文将深入研究K8s中的服务发现机制&…

Java基础知识学习:深入理解Java中的类与对象,Java重要知识点概念性解释,结合实例讲解请看下一篇博文

引言&#xff1a; 在Java编程语言中&#xff0c;类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心概念。类可以看作是创建对象的蓝图&#xff0c;而对象则是类的实例。本文将深入解释Java知识体系中的类与…

unity学习(25)——客户端与服务器合力完成注册功能(7)逻辑流程彻底解决

在服务器LoginHandler类中&#xff1a; public void login(Session session, SocketModel model) {LoginDTO loginDto Coding<LoginDTO>.decode(model.Message);//MyLog.form.textAdd("用户申请登录" loginDto.userName " " loginDto.pass…

2024/2/18 图论 最短路入门 floyd 1

目录 Floyd求最短路 854. Floyd求最短路 - AcWing题库 模板】Floyd B3647 【模板】Floyd - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Floyd求最短路 854. Floyd求最短路 - AcWing题库 思路&#xff1a;在代码里面 完整代码&#xff1a; #include <bits/stdc.h&g…

Quartz---JobDataMap使用的两种方式

任务调度执行原理图&#xff1a; JobDataMap的使用 JobDataMap是Quartz调度器中的一个重要组件&#xff0c;主要用于存储和传递与作业&#xff08;Job&#xff09;相关的数据。它是一个实现了Java Map接口的对象&#xff0c;可以用来保存一系列的序列化的对象。这些对象在作业执…

Langchain的提示词模板

因为做AI项目的过程中&#xff0c;需要处理各种提示词&#xff08;prompt&#xff09;&#xff0c;其中有些是固定的文本&#xff0c;有些是会反复修改的。如果是简单的提示词&#xff0c;直接用python里面的字符串format()或者replace()函数进行处理即可。对于复杂的&#xff…