ISP概念入门

news2025/1/15 13:50:24

这里写自定义目录标题

  • 引言
  • 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.coloradmin.cn/o/1233279.html

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

相关文章

css animation 动画如何保留动画结束后的状态 animation-fill-mode: forwards

css animation 动画如何保留动画结束后的状态 animation-fill-mode: forwards 一、问题描述 在做一个弹窗动画提示的时候遇到了一个问题&#xff1a; 在动画结束的时候&#xff0c;移除元素时会有闪一下的问题&#xff0c;像这样&#xff0c;有残留的痕迹。 我的动画结尾是这…

Mysql之聚合函数

Mysql之聚合函数 什么是聚合函数常见的聚合函数GROUP BYWITH ROLLUPHAVINGHAVING与WHERE的对比 总结SQL底层原理 什么是聚合函数 对一组数据进行汇总的函数&#xff0c;但是还是返回一个结果 聚合函数也叫聚集&#xff0c;分组函数 常见的聚合函数 1.AVG(): 求平均值 2.SUM() :…

choices参数的使用、MVC和MTV的模式、创建表对表关系的三种创建方式

【1】choices参数的使用 应用场景&#xff1a;针对表中可能列表完全的字段&#xff0c;采用choices参数 例如&#xff1a;性别&#xff0c;代码如下 # 1.创建一张表class gender_info(models.Model):name models.CharField(max_length32)password models.CharField(max_lengt…

webstorm配置console.log打印

一、设置面板 打开设置面板(windows 快捷键&#xff1a; ctrl alt s) &#xff0c;找到 编辑器 -> 实时模板 -> JavaScript -> log&#xff0c;点击log会出现对应的配置 二、模板文本 将下面这些模板文本粘贴进去 console.info("&#x1f680; ~ file:$file…

自然语言处理:Transformer与GPT

Transformer和GPT&#xff08;Generative Pre-trained Transformer&#xff09;是深度学习和自然语言处理&#xff08;NLP&#xff09;领域的两个重要概念&#xff0c;它们之间存在密切的关系但也有明显的不同。 1 基本概念 1.1 Transformer基本概念 Transformer是一种深度学…

Python matplotlib Linecollection() 函数用法

Python matplotlib Linecollection 函数用法 今天看到了这个函数的用法觉得很有意思&#xff0c;因为通常&#xff0c;如果我们想要在 matplotlib 中绘制多条线条&#xff0c;通常我们的做法是使用 for 循环绘制。然而当想要绘制的线条逐渐多起来的时候&#xff0c;使用 for 循…

如何在外部数据库中存储空间化表时使用Mapinfo_mapcatalog

开始创建地图目录表之前 您将使用EasyLoader在要使用的数据库中创建地图目录表。EasyLoader与MapInfo Pro一起安装。 &#xff08;工具“DBMS_Catalog”不再随MapInfo Professional 64位一起提供&#xff0c;因为它的功能可以在EasyLoader工具中找到。&#xff09; ​ 注&…

windows 查看防火墙设置命令使用方法

点击键盘上windows键&#xff0c;输入cmd&#xff0c;选择以管理员身份运行 输入下面命令查看使用说明 netsh advfirewall firewall add rule ? 发现显示不全&#xff0c;不方便看 可以输入下面命令&#xff0c;生成文件&#xff0c;方便查看 netsh advfirewall firewall ad…

人机交互——机器人形态

1.聊天机器人 2.任务型机器人 3.面向FAQ的问答机器人 4.面向KB的问答机器人

【C++】——多态性与模板(其二)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

人工智能带来的各方面影响

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术在各个领域中的应用越来越广泛&#xff0c;已经开始对我们的生活方式、社会和经济结构产生深远的影响。 1.人工智能家庭化。人工智能技术使我们的生活变得更加便利和智能化。在家庭日常中&#xff0c;智能家居、智能…

二百零七、Flume——Flume实时采集5分钟频率的Kafka数据直接写入ODS层表的HDFS文件路径下

一、目的 在离线数仓中&#xff0c;需要用Flume去采集Kafka中的数据&#xff0c;然后写入HDFS中。 由于每种数据类型的频率、数据大小、数据规模不同&#xff0c;因此每种数据的采集需要不同的Flume配置文件。玩了几天Flume&#xff0c;感觉Flume的使用难点就是配置文件 二、…

图像处理02 matlab中NSCT的使用

06 matlab中NSCT的使用 最近在学习NSCT相关内容&#xff0c;奈何网上资源太少&#xff0c;简单看了些论文找了一些帖子才懂了一点点&#xff0c;在此分享给大家&#xff0c;希望有所帮助。 一.NSCT流程 首先我们先梳理一下NSCT变换的流程&#xff0c;只有清楚流程才更好的理清…

一文详看大模型长文本如何评估:四大主流评测数据集的任务设计、数据集构建方案

大语言模型&#xff08;LLM&#xff09;尽管在各种语言任务中表现抢眼&#xff0c;但通常仅限于处理上下文窗口大小范围内的文本。 有越来越多的基准被提出来测试LLM的长文本理解能力。 当前具有代表性的长文本评测主要包括Zero-SCROLLS、L-Eval、LongBench以及loogle四个基准…

万字解析设计模式之 装饰者模式

一、装饰者模式 1.1概述 装饰者模式是一种结构型设计模式&#xff0c;它允许在运行时动态地为一个对象添加额外的职责。它以一种透明的方式来扩展对象的功能&#xff0c;而不需要通过子类来实现。在装饰者模式中&#xff0c;有一个基本对象&#xff0c;也称为组件&#xff0c;…

如何给面试官解释什么是分布式和集群?

分布式&#xff08;distributed&#xff09; 是指在多台不同的服务器中部署不同的服务模块&#xff0c;通过远程调用协同工作&#xff0c;对外提供服务。 集群&#xff08;cluster&#xff09; 是指在多台不同的服务器中部署相同应用或服务模块&#xff0c;构成一个集群&#…

你真的了解 Cookie 和 Session 吗?

文章目录 Cookie 和 Session总结 Cookie 和 Session cookie HTTP cookie&#xff08;web cookie、browser cookie&#xff09;是服务器发送给用户 web 浏览器的一小段数据。浏览器可能会存储 cookie&#xff0c;并在以后的请求中将其发送回同一台服务器。通常&#xff0c;HTTP …

数据库中的undo与redo的作用

undo与redo的作用 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期…

Git - 版本控制系统

一、概述 git是一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码。作用是记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容。 直接安装git&#xff0c;默认下一步&#xff0c;然后就能在VScode中看到git控制台 …

YOLOv8更换骨干网络HorNet:递归门控卷积的高效高阶空间交互——涨点神器!

🗝️YOLOv8实战宝典--星级指南:从入门到精通,您不可错过的技巧   -- 聚焦于YOLO的 最新版本, 对颈部网络改进、添加局部注意力、增加检测头部,实测涨点 💡 深入浅出YOLOv8:我的专业笔记与技术总结   -- YOLOv8轻松上手, 适用技术小白,文章代码齐全,仅需 …