ISP概念入门

这里写自定义目录标题

  • 引言
  • ISP的处理流程
    • 1、Sensor有暗电流
    • 2、通过镜头到达Sensor中间的光多于到达Sensor的边缘的光,即光学系统中的渐晕
    • 3、Senor上有的像素点的输出有坏点
    • 4、Cmos的Sensor采用了Bayer色彩滤波阵列(Bayer Color Filter Array,CFA)
    • 5、Senor获取的图像中有大量噪声
    • 6、Senor获取的图像容易受到光源颜色的影响
    • 7、Senor滤光板处各颜色块之间的颜色渗透带来的颜色误差
    • 8、人眼对暗部细节比Sensor敏感
    • 9、Senor的输出的Raw data是RGB,但是有的处理在YUV上更方便,且YUV存储和传输时更省带宽
    • 10、Senor一定曝光量下较暗部分或较亮部分的细节显示不充分
    • 11、图像传感器和镜头需要ISP模块根据光强度自动调节曝光时间
    • 12、镜头需要调节焦距才能避免光学成像模糊
    • 13、镜片的表面反射或镜筒、反光镜组的内面所引起的反射光,到达底面后造成画面整体或一部份产生了雾蒙
    • 14、画面清晰度不够
    • 笔者小结

引言

1、ISP是什么: 图像信号处理(Image Signal Process),主要用于手机拍照和录像效果
2、为什么需要ISP: 在视觉处理过程中,ISP就是成像引擎,在实际环境中,镜头和Sensor的物理缺陷(不完美),拍摄的光线条件多样,镜头和Sensor需要根据环境做适应(就像人眼要通过瞳孔缩放,适应环境明暗一样)。

在这里插入图片描述

ISP的处理流程

下面这个图是一个常用的ISP处理流程,推荐一个链接学习:ISP(Image Signal Process)先了解基本概念,再学习这个流程。
在这里插入图片描述
先了解ISP在具体问题的解决方案

1、Sensor有暗电流

处理模块: BLC(Black Level Correction)/ Black Level Compensate (OBC)
黑电平校正。所谓黑电平就是在DNP下,将曝光时间和增益都调到最小时拍摄图片的亮度值,理想情况下应该是0,但是实际中因为sensor暗电流作用,全黑像素值大于0。(这一个值,在后面可能会受到AWBGain,CCM,Gamma的影响)。

处理原理: 我们需要找到一个矫正值,所有像素值都减去这个值,就得到一个矫正成功的结果。一般情况下,sensor的传感器周边,还有一小部分区域是有感光器的,但是没有光透射进来。可以把这部分的传感器的信号作为矫正值,从可感光部分的信号中减去,就可获得校正后信号。

2、通过镜头到达Sensor中间的光多于到达Sensor的边缘的光,即光学系统中的渐晕

处理模块: LSC(Lens Shade Correction)------镜头阴影校正
Lens Shading是由于镜片从边缘到中心对入射光线的反射程度不同,造成拍摄均匀亮度的画面,图像从中心到边缘亮度不均匀逐渐变暗。Color Shading是由于Lens从中心到边缘,其R、G、B变暗的速率不一样,总体表现就是Gb/Gr像素值差异较大,两个像素之间有细微纹理。找出shading的distribution,然后用最小的模型来建模将其导入

处理原理: 首先检测出图像中间亮度比较均匀的部分,认为这部分不需要矫正,然后以此为中心,计算出周围区域需要补偿的因子(增益)。实际项目中,可以把镜头对准白色物体,检查图像四周是否有暗角。

在这里插入图片描述

3、Senor上有的像素点的输出有坏点

处理模块: DPC/BPD(Defect Pixel Correction/Bad Pixel Detect)
坏点校正/坏点检测。相机中成像坏点一般是白色或者黑色的点,和周围像素点的差异明显。

处理原理: 第一步:检测坏点。在RGB域上做5x5的评估,如果某个点和周围的点偏离度超过阈值的点为坏点。为了防止误判,还需要更复杂的逻辑,如连续评估N帧。第二步:纠正坏点。对找到的坏点做中值滤波,替换原来的值即可。

4、Cmos的Sensor采用了Bayer色彩滤波阵列(Bayer Color Filter Array,CFA)

处理模块: DM(Demosaicing/Color Filter Array Interpolation/CFA插值)------颜色插值
CMOS Sensor出来的RawData是Bayer格式的图像,每个像素只有一个通道的信息。DM是将Bayer格式的图像恢复成每个像素用RGB三通道表示的方式。DM的主要依据是图像在平滑的局部区域,各分量的ratio是相等的。插值算法的好坏会影响图片的细节,如摩尔纹。
在这里插入图片描述
(此处附上笔者自己的理解:颜色是由RGB的3个值组成的,所以每个像素点的颜色需要三块感光板,成本太高,所以实际中采用的是一块滤光板,这个板子上是分割成很多小格子,每个格子的颜色不一样,bayer是其中一种分布方式,绿色格子数>2红色=2蓝色,因为人对绿色敏感,当有光透过来,会在小格子上产生数值,最后采用颜色插值算出真实的RGB值)
PS:华为mate60pro采用了ryyb滤镜阵列技术,RYYB就是将两个绿色像素G换成黄色像素Y替代, Y(红色和绿色组合)。

处理原理: 内插法

5、Senor获取的图像中有大量噪声

处理模块: NR(Noise Reduction/Denoise):去噪
采用特定的LPF(Low Pass Filter)对图片进行滤波,滤除图像的噪声成分,而Bilateral filtering即双边滤波器,它是一种保护边缘的平滑滤波器,这样既可以滤除噪声,edge又可以保留下来。

处理原理: 对图像进行降噪处理的传统方法有均值滤波、高斯滤波,本质是低通滤波器。
普通的高斯滤波只考虑像素的空间距离关系,这样会导致滤波后图像变得模糊,为了避免图像变模糊,就需要保持图像的边缘,这时,就还要考虑相邻像素和本像素的相似程度,对于相似度高的像素给予更高的权重,我们称这种滤波为双边滤波。
在这里插入图片描述

6、Senor获取的图像容易受到光源颜色的影响

处理模块: AWB(Automatic White Balance)------自动白平衡
解决环境光不同色温导致整幅图片偏色的情况。

处理原理:
比较常用的WEB算法有灰度世界、完美反射法等。
灰度世界(Gray World)算法基于一个假设:平均来讲,世界是灰色的。所以,白平衡就是调整R/B增益,达到R、G、B 相等。

白平衡有3个步骤:

(1)检测色温,如果手工调节,就知道图像中什么位置是白色物体了,色温容易检测;如果是自动调节,就需要估计出(猜出)图像中的白色位置,这是最重要的一环;

实际计算中为了实时操作,减少计算量,通常选取某个特定区域(如图像中央)像素进行计算。但若图像颜色较为单一或选定区域正好落入大的色块(红光下的白墙),以上算法求得的色温会非常不准确。为此,必须根据一定的约束条件,挑选出白色像素来计算色差。

(2)计算增益,计算R和B要调整的增益;调整增益将Cb和Cr调整到0 (或接近0)的两个系数,即R=G=B。

(3)色温矫正,根据增益调整整幅图片的色温。

7、Senor滤光板处各颜色块之间的颜色渗透带来的颜色误差

AWB已经将白色校准了,CCM就是用来校准除白色以外其他颜色的准确度的,
处理模块: CCM(Color Correction Matrix/ DSC color calibration):----颜色校正矩阵
拍摄color checker24色板,将相机拍摄图片值与色板标准值之间进行对比(RGB颜色空间),得出一组能将拍摄值校正到最接近标准值的3x3矩阵。通过这个矩阵对所有相机拍摄的图片进行颜色校正。
处理原理: 一般颜色校正的过程是首先利用该图像传感器拍摄到的图像与标准图像相比较,以此来计算得到一个校正矩阵,一般情况下,对颜色进行校正的过程,都会伴随有对颜色饱和度的调整。颜色的饱和度是指色彩的纯度,某色彩的纯度越高,则其表现的就越鲜明;纯度越低,表现的则比较黯淡。
用一个3X3的CCM矩阵来校准, 其中每一列系数r1+g1+b1等于一个恒定值1。Ccm矫正最终结果可以通过拍摄24色卡图片然后用imatest(一款专业的图像分析软件,具有强大的图像分析和处理功能)分析来做分析参考。

8、人眼对暗部细节比Sensor敏感

人眼不同于摄像机,接收光子来感知光线。比如:在一间小黑屋中每增加一盏灯,摄像机都能线性增加亮度。但是人眼在黑暗时增加一盏灯时感受明显,往后随着灯的个数增长人眼并不会有明显感受
处理模块: RGB Gamma------Gamma校正

处理原理: Gamma编码后的图像相比于线性编码的图像,明显有更多的暗部色阶。Gamma编码刚好满足了人眼对暗部细节敏感的特性。即人眼是按照gamma < 1的曲线对输入图像进行处理的(公式f(I)=I^gamma,I为原图像素值)。
现在常用的伽马校正是利用查表法来实现的,即首先根据一个伽马值,将不同亮度范围的理想输出值在查找表中设定好,在处理图像的时候,只需要根据输入的亮度,既可以得到其理想的输出值。

9、Senor的输出的Raw data是RGB,但是有的处理在YUV上更方便,且YUV存储和传输时更省带宽

在YUV 色彩空间上进行彩色噪声去除、 边缘增强等更方便
处理模块: RGBToYUV------色彩空间转换

处理原理: YUV 是一种基本色彩空间, 人眼对亮度Y改变的敏感性远比对色彩变化大很多, 因此, 对于人眼而言, 亮度分量Y 要比色度分量U、V 重要得多。所以,只有YUV444格式的YUV数据的比例是1:1:1,其他各种格式,如YUV422,YUV420等格式,UV的数据量都小于Y,达到节省存储空间和传输带宽的目的。YUV数据的概念就是这样简单。(在编程时查一下文档,再搞清楚内存排布即可)
第二,RGB和YUV转换有固定的公式。
另外, 在YUV 家族中, YCbCr 是在计算机系统中应用最多的成员, 其应用领域很广泛,JPEG、MPEG均采用此格式。一般人们所讲的YUV大多是指YCbCr。

10、Senor一定曝光量下较暗部分或较亮部分的细节显示不充分

在YUV 色彩空间上进行彩色噪声去除、 边缘增强等更方便
处理模块: DRC/HDR(Dynamic Range Compression/ High-Dynamic Range)宽动态
高动态图像的拍摄出来的结果通常会有,亮部太亮,暗部太暗的问题。DRC是调整图像暗部亮度使之变亮,调整亮部亮度使之变暗,而且保持图像的对比度。
处理原理: 主要是通过tone mapping的方法,将像素值在特别暗的区域拉高,在特别亮的区域拉低。

11、图像传感器和镜头需要ISP模块根据光强度自动调节曝光时间

处理模块: AE(Automatic Exposure Control)----自动曝光

处理原理: 自动曝光的实现一般包括三个步骤:
1)光强测量。光强测量的过程是利用图像的曝光信息来获得当前光照信息的过程。可以统计图像的全部像素,也可以统计图像中间部分、也可以将图像分成不同部分且每部分赋予不同权重。
2)场景分析。场景分析是指为了获得当前光照的特殊情况而进行的处理,比如有没有背光照射或者正面强光等场景下。对这些信息的分析,可以提升图像传感器的易用性,并且能大幅度提高图像的质量,这是自动曝光中最为关键的技术。目前常用的场景分析的技术主要有模糊逻辑和人工神经网络算法。这些算法比起固定分区测光算法具有更高的可靠性,主要是因为在模糊规则制定或者神经网络的训练过程中已经考虑了各种不同光照条件。
3)曝光补偿。在完成了光强测量和场景分析之后,就要控制相应的参数使得曝光调节生效。主要是通过设定曝光时间和曝光增益来实现的。

12、镜头需要调节焦距才能避免光学成像模糊

处理模块: AF (Auto Focus) ---- 自动对焦

处理原理: AF算法的基本步骤是先判断图像的模糊程度,通过合适的模糊度评价函数求得采集的每一副图像的评价值, 然后通过搜索算法得到一系列评价值的峰值, 最后通过电机驱动将采集设备调节到峰值所在的位置, 得到最清晰的图像。
对焦评价函数
评价函数有很多种, 主要考虑的图像因素有图像频率(清晰的图像纹理多, 高频分布较多), 还有图像的灰度分量的分布(图像对应的灰度图的分量分布范围越大,说明图像的细节较多, 反应的图像的清晰程度)
常用的搜索算法有爬山算法, 搜索窗口有黄金分割点对焦嵌套窗口等。

13、镜片的表面反射或镜筒、反光镜组的内面所引起的反射光,到达底面后造成画面整体或一部份产生了雾蒙

处理模块: Flare offset:光学上称Flare也叫stray light,耀斑补偿

处理原理: 镜片的镀膜及内面防反射处理的加强,固然可以大幅度地减少光斑,但被摄体的状况并不相同,不可能完全消除。因此,在相机里面设计都是黑色的,且其内侧表明设计都是粗糙的,目前就是为了减小flare。flare如何修正?做直方图,然后每阶的亮度都往下降,这样是否会影响颜色呢?因此,flare一定要是在linear domain去做,不能在RGB domain去做。
在这里插入图片描述

14、画面清晰度不够

处理模块: EE(Edge Enhancement/Edge Sharpening):锐化,边缘增强。

处理原理: 通过滤波器获取图像的高频分量,按照一定的比例将高频部分和原图进行加权求和获取锐化后的图像。
在这里插入图片描述

笔者小结

原始图像会因为镜头和传感器的缺陷、受外界光线的影响,出现图像有色差、模糊等问题,所以需要用ISP进行处理。
通常的流程是先进行黑电平校准BLC(黑电平是在DNP下,将曝光时间和增益都调到最小时拍摄图片的亮度值)——>进行镜头阴影校正LSC(避免出现边缘模糊的情况)——>如果镜头有坏点,需要进行坏点去除,坏点检测BPD,坏点去除BPC——>颜色插值DM——>颜色矫正矩阵——>Gamma校正(使得在暗处的曲线不是线性的)——>降噪NR/锐化EE

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI一朝领导者山姆·奥尔特曼被解除职务,领导能力不再被认可?

原创 | 文 BFT机器人 在11月17日&#xff0c;OpenAI Inc.宣布CEO山姆奥尔特曼 (Sam Altman) 离职。掌舵人发生重大转变&#xff0c;董事会却在这个时候将公司首席技术官 Mira Murati推举为临时首席执行官&#xff0c;这一操作顿时引起了热议。 这突如其来的变化标志着OpenAI的…

[汇编实操]DOSBox工具安装——Ubuntu18.04系统

一、下载&安装 sudo apt install -y dosbox 二、启动 dosbox 三、C盘挂载 将上述文件下载放在任意路径&#xff0c;将DEBUG目录映射为虚拟C盘 MASM.EXE 是用来编译的&#xff0c;LINK.EXE 用来链接&#xff0c;这俩是必须的。 执行如下命令&#xff1a; mount c /m…

超级会员卡积分收银系统源码+会员卡+积分商城+多门店系统 附带完整的搭建教程

时代在发展&#xff0c;商家对于会员管理、积分管理、收银管理以及多门店管理的需求日益增长。为了满足这些需求&#xff0c;开发一款功能全面、易于使用和管理的超级会员卡积分收银系统变得至关重要。 以下是部分代码示例&#xff1a; 系统特色功能一览&#xff1a; 1.会员管…

数据质量校验

1.事实表包含昨日数据 2.昨日同比趋势分析 圆通业务量较为平稳 &#xff0c;每日数据量和昨日比差距不足20%&#xff0c;会做数据量的昨日环比差距分析

2023美亚杯个人赛复盘(三)

案件基本情况&#xff1a; &#xff08;一&#xff09;案情 2023月8月的一天&#xff0c;香港警方在调查一起网络诈骗案件时&#xff0c;发现有三名本地男子&#xff0c;分別为李大輝&#xff08;李大辉&#xff09;&#xff0c;浩賢(浩贤)和Elvis CHUI&#xff0c;并确信这三名…

Jenkins 下载安装

下载 Jenkins 选择Download LTS是稳定版本,尽量选择稳定版本,然后选择你的开发系统. 安装 Jenkins需要JAVA环境,所以安装JAVA环境 Java Jenkins支持17、21等几个版本的Java,OpenJDK JDK 21.0.1 GA Release 安装不要安装到C盘,这个后面会占较大的内存空间 然后按照指…

Java自动化驱动浏览器搜索稻香

下载最新的Chrome浏览器 查看chrome版本&#xff0c;在浏览器地址栏输入&#xff1a;chrome://version/ 下载对应的浏览器驱动&#xff0c;将其放到一个目录中&#xff0c;我放到了D:/chromedriver-win64 导入对应的依赖【注意&#xff1a;不要导入最新的版本&#xff0c;最…

02-《人月神话》霍金敬酒和虫族战争-中译本纠错及联想

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 2001年&#xff0c;我们翻译《人月神话》的时候&#xff0c;由于水平有限&#xff0c;译文中存在不少错误。 这些年&#xff0c;随着阅历的增长&#xff0c;在重读的时候偶尔也会有“…

动态规划c++

1. 什么是动态规划动态规划 &#xff08;英语&#xff1a;Dynamic programming&#xff0c;简称 DP&#xff09;&#xff0c;是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的&#xff0c;通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规…

ros2工作空间

我们先不管ros2工作空间是什么样子的&#xff0c;如果是我自己来搞一个工作空间&#xff0c;我一定是这样安排 一个文件夹用来放自己存放的文件&#xff0c;。。。。。。。。。。对应src文件夹 一个文件夹用来放编译后的文件&#xff0c;。。。。。。。。。。。对应intall文件…

天猫超市电商营销系统:无代码开发实现API连接集成

无代码开发实现天猫超市与电商系统的高效连接 天猫超市&#xff0c;作为天猫推出的网络零售超市&#xff0c;为广大网购消费者提供了一站式的购物服务。而通过无代码开发的方式&#xff0c;天猫超市能够实现与各种电商系统的连接和集成&#xff0c;这种方式无需进行繁琐的API开…

求二叉树中第i层和第i+1层叶子节点个数之和(可执行)

运行环境.cpp 注意&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;如果没有输出结果&#xff0c;一定是输入的建树序列有错误&#xff0c;我建好了2棵树&#xff0c;如果没有输出结果&#xff0c;大家可以用这两棵树试。 main函数的btDepth(t,2)第二个参数是树…

教你如何开设抖音小店, 打造互动社交的线上销售平台

抖音小店是指在中国流行的社交媒体平台抖音上开设的个人或商户经营的电商店铺。通过抖音小店&#xff0c;用户可以方便地浏览和购买各种商品&#xff0c;并与卖家进行交流。以下是四川不若与众关于抖音小店的具体内容和开设流程的介绍。 抖音小店的内容&#xff1a; 1. 商品展…

NX二次开发UF_CAM_is_session_initialized 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;里海NX二次开发3000例专栏 UF_CAM_is_session_initialized Defined in: uf_cam.h int UF_CAM_is_session_initialized(logical * answer ) overview 概述 This function answers whether or not there exists a currently in…

『亚马逊云科技产品测评』活动征文|开发一个手机官网

『亚马逊云科技产品测评』活动征文&#xff5c;开发一个手机官网 授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 前言 …

GitLab的个人仓库转移到团队仓库

文章目录 一、Gitlab权限二、转移2.1、编辑个人仓库2.2、Transfer project2.3、切换Namespace2.4、确认修改 一、Gitlab权限 Gitlab用户在组中有五种权限&#xff1a;Guest、Reporter、Developer、Master、Owner Guest&#xff1a;可以创建issue、发表评论&#xff0c;不能读写…

简单工程模式

代码实现 //simpleFactory.h #ifndef _SimpleFactory_H_ #define _SimpleFactory_H_#include <iostream> #include <exception> #include <string>using namespace std;class Operation { protected:double _numberA 0;double _numberB 0; public:Operat…

VB6批量修改IC卡全部扇区密钥源码

本示例使用设备&#xff1a; Android Linux RFID读写器NFC发卡器WEB可编程NDEF文本/智能海报/-淘宝网 (taobao.com) 函数声明 Private Declare Function piccreadex Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByVal serial As Long, ByVal area As Byte, ByVa…

DataFunSummit:2023年数据基础架构峰会-核心PPT资料下载

一、峰会简介 正如From、Join、排序等是SQL的基本算子&#xff0c;存储与计算是也是数据架构中数据生产与消费的基本算子&#xff0c;对于数据架构之下的技术栈层级&#xff0c;我们可将其定义为数据基础架构。 数据存储技术在适应大数据时代的规模需求基础之上&#xff0c;持…

html页面直接使用elementui Plus时间线 + vue3

直接上效果图 案例源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"../js/vue3.3.8/vue.global.js"></script><link rel"styles…