ISP各模块功能介绍

ops/2025/1/11 9:44:16/

--------声明,本文为转载整理-------

ISP各个模块功能介绍:

各模块前后效果对比:

黑电平补偿(BLC)

在理想情况下,没有光照射的像素点其响应值应为0。但是,由于杂质、受热等其它原因的影响,传感器存在着暗电流,使得没有光照射到的像素点也会产生响应。

72c30193305e0ce3e9f32ebe7dc3ffe1.png
▲ 黑电平补偿前效果图

5da7692234fa48edf99cdfd82f6e7a5f.png
▲ 黑电平补偿后效果图

a.暗电流

物理器件不可能是理想的, 由于杂质、 受热等其他原因的影响, 即使没有光照射到象素,
象素单元也会产生电荷, 这些电荷产生了暗电流。 而且, 暗电流与光照产生的电荷很难进行区分。

b.Black Level

Black Level 是用来定义图像数据为 0 时对应的信号电平。由于暗电流的影响, 传感器出来的实际原始数据并不是我们需要的黑平衡( 数据不为0) 。 所以,为减少暗电流对图像信号的影响,可以采用的有效的方法是从已获得的图像信号中减去参考暗电流信号。一般情况下, 在传感器中, 实际像素要比有效像素多, 如下图所示, 像素区头几行作为不感光区( 实际上, 这部分区域也做了 RGB 的 color filter) , 用于自动黑电平校正, 其平均值作为校正值, 然后在下面区域的像素都减去此矫正值, 那么就可以将黑电平矫正过来了。

镜头校正(LSC)

由于镜头本身的物理性质,传感器捕获的图像会表现出中心亮度高、边缘亮度低的特点。为了输出一个亮度均匀的图像,需要对图像进行镜头阴影(Lens Shading)校正。

校正的方法是根据一定的算法计算每个像素对应的亮度校正值,从而补偿周边衰减的亮度。通常,镜头校正方法有二次项校正、四次项校正等。

8284563f0eb141fd15ae0301c80bf3de.png
▲ 镜头校正前效果图
96590291df4fe08ec804b70de80525f6.png
▲ 镜头校正后效果图

坏点校正(BPC)

由于传感器可能存在部分缺陷像素,导致一些像素点输出信号不正常,出现白点或黑点,也就是坏点。同时,随着传感器老化,也可能会出现更多的坏点。因此,需要对坏点进行修复。

所谓坏点,是指像素阵列中与周围像素点的变化表现出明显不同的像素,因为图像传感器是成千上万的元件工作在一起,因此出现坏点的概率很大。一般来讲,坏点分为三类:第一类是死点,即一直表现为最暗值的点;第二类是亮点,即一直表现为最亮值的点:第三类是漂移点,就是变化规律与周围像素明显不同的像素点。由于图像传感器中CFA的应用,每个像素只能得到一种颜色信息,缺失的两种颜色信息需要从周围像素中得到。如果图像中存在坏点的话,那么坏点会随着颜色插补的过程往外扩散,直到影响整幅图像。因此必须在颜色插补之前进行坏点的消除。


(1)坏点:坏点为全黑环境下输出图像中的白点, 高亮环境下输出图像中的黑点。
(2)坏点修复方法:一般情况下, RGB 信号应与景物亮度呈线性响应关系, 但由于 Senor 部分 pixel 不良导致输出的信号不正常, 出现白点或黑点。坏点修复方法通常有两种:一种是自动检测坏点并自动修复, 另一种是建立坏点像素链表进行固定位置的坏像素点修复, 这种方式是 OTP 的方式。

0f5b64c0bbf5db93d2e89978416d9de6.png
▲ 坏点校正前效果图
c0cbd849de29423fcea78f336e57150e.png
▲ 坏点校正后效果图

去马赛克(Demosaic

因为传感器只能感知光的强度,而不能直接感知光谱信息。因此,需要在传感器前加上滤光板来选取波段。但是,如果每个像素点都同时感知RGB三个分量,则需要三块滤光板,这样不仅成本高,而且难度大。因此,通常采用Bayer型的色彩滤波阵列(Color Filter Arrays,CFA)来获取场景的光谱信息。

e2369f60a375a1cbbd16732a9859e09b.png
Bayer型CFA
83b26b40f3d4986f191b898f6e8ed9bb.png
传感器感光示意图

从上面的示意图可见,每个像素只能探测一个通道的光信息,所以理想的Bayer图是一个较为昏暗的马赛克图。然而,为了获得彩色图像,需要计算出每个像素缺失的其它两个通道的响应值,即进行颜色插值处理。通常,经典处理方法包括最近邻域法、Bilinear插值、Cubic插值等。

 去噪声(Denoise

使用 cmos sensor获取图像,光照程度和传感器问题是生成图像中产生大量噪声的主要因素。同时, 当信号经过ADC 时, 又会引入其他一些噪声。 这些噪声会使图像整体变得模糊,而且丢失很多细节, 所以需要对图像进行去噪处理,空间去噪传统的方法有均值滤波、 高斯滤波等。但是, 一般的高斯滤波在进行采样时主要考虑了像素间的空间距离关系, 并没有考虑像素值之间的相似程度, 因此这样得到的模糊结果通常是整张图片一团模糊。 所以, 一般采用非线性去噪算法, 例如双边滤波器, 在采样时不仅考虑像素在空间距离上的关系, 同时加入了像素间的相似程度考虑, 因而可以保持原始图像的大体分块, 进而保持边缘。

不同ISP的去噪模块可能会在不同的环节进行,但去噪原理没有本质不同。

af9d6dc41558528fa966f201f3056038.png
▲ 去噪前效果图
cfe97383cb0a24d320f6e69012426fef.png
▲ 去噪后效果图

自动白平衡(AWB)

白平衡就是针对不同色温条件下,通过调整摄像机内部的色彩电路使拍摄出来的影像抵消偏色,更接近人眼的视觉习惯。白平衡可以简单地理解为在任意色温条件下,摄像机镜头所拍摄的标准白色经过电路的调整,使之成像后仍然为白色。这是一种经常出现的情况,但不是全部,白平衡其实是通过摄像机内部的电路调整(改变蓝、绿、红三个CCD电平的平衡关系)使反射到镜头里的光线都呈现为消色。如果以偏红的色光来调整白平衡,那么该色光的影像就为消色,而其他色彩的景物就会偏蓝(补色关系)。白平衡是一个很抽象的概念,最通俗的理解就是让白色所成的像依然为白色,如果白是白,那其他景物的影像就会接近人眼的色彩视觉习惯。调整白平衡的过程叫做白平衡调整,白平衡调整在前期设备上一般有三种方式:预置白平衡、手动白平衡调整和自动跟踪白平衡调整。通常按照白平衡调整的程序,推动白平衡的调整开关,白平衡调整电路开始工作,自动完成调校工作,并记录调校结果。如果掌握了白平衡的工作原理,那么使用起来会更加有的放矢,得心应手。


备注:消色就是指黑白灰三种颜色。黑白灰的物体对光源的光谱成分不是有选择地吸收和反射而是等量吸收和等量反射各种光谱成分。这时物体看上去没有了色彩。对各种光谱成分全部吸收的表面,看上去是黑色,等量吸收一部分等量反射一部分的表面是灰色,反射绝大部分而吸收极小部分是白色。消色和任何色彩搭配在一起,都显得和谐协调。

白平衡原理:摄像机内部有三个CCD电子耦合元件,他们分别感受蓝色、绿色、红色的光线,在预置情况下这三个感光电路电子放大比例是相同的,为1:1:1的关系,白平衡的调整就是根据被调校的景物改变了这种比例关系。比如被调校景物的蓝、绿、红色光的比例关系是2:1:1(蓝光比例多,色温偏高),那么白平衡调整后的比例关系为1:2:2,调整后的电路放大比例中明显蓝的比例减少,增加了绿和红的比例,这样被调校景物通过白平衡调整电路到所拍摄的影像,蓝、绿、红的比例才会相同。也就是说如果被调校的白色偏一点蓝,那么白平衡调整就改变正常的比例关系减弱蓝电路的放大,同时增加绿和红的比例,使所成影像依然为白色。 自动白平衡,是依赖数码相机里的测色温系统,测出红光和蓝光的相对比例。再依据次数据调整曝光,产生红、绿、蓝电信号的增益。自动白平衡最大的优势是;简单、快洁。但有时按它的调整拍摄离准确的色彩还原还相距甚远。有时它还会帮倒忙。

4de30134c487f946e1843240dfa18c0d.png
▲ 白平衡处理前效果图

22775708aec4e9586c27b4522a6e0afd.png
▲ 白平衡处理后效果图

颜色校正(Color Correction

在校正完白平衡后,需要进行彩色的校正。因为人眼对可见光的频谱响应度和半导体传感器频谱响应度之间存在差别,故而得到的颜色RGB值会存在偏差,因此,必须对颜色进行校正。通常,可用一个3x3的颜色变化矩阵来进行颜色校正。

伽马校正(Gamma Correction)

人眼与相机的感光特性不同。为了让图像与人眼感知的色貌相符合,需要将相机采集的图像进行伽马校正;这里不多做介绍。

ddfc552460fbf47594bc369236b7097c.png
▲ 人眼与相机的感光特性

图像压缩

最后,为了减小图像占用的存储空间,通常会将图像数据进行压缩,丢弃那些肉眼无法识别的信息,再用一些编码技术来提高信息利用率。其中,最常用的编码格式当然就是JPG 格式了。

关于转换:

关于raw(bayer)数据转换rgb数据

RGB图, 即为三色图, 一个像素点就由RGB三种颜色构成的混合色, 而bayer图一个像素就只有一个颜色, 或R或G或B. 因为bayer一个像素点只有一种颜色, 需要借助这个像素点周围的颜色对它进行插值(填充)另外的两种颜色, 它本身的颜色就不用插了接下来介绍一下Bayer 。

图像在将实际的景物转换为图像数据时, 通常是将传感器分别接收红、 绿、 蓝三个分量的信息, 然后将红、 绿、 蓝三个分量的信息合成彩色图像。 该方案需要三块滤镜, 这样价格昂贵,且不好制造, 因为三块滤镜都必须保证每一个像素点都对齐。

通过在黑白 cmos 图像传感器的基础上, 增加彩色滤波结构和彩色信息处理模块就可以获得图像的彩色信息, 再对该彩色信息进行处理, 就可以获得色彩逼真的彩色图像。通常把彩色图像传感器表面覆盖的滤波称为彩色滤波阵列( Color Filter Arrays, CFA) 。

目前最常用的滤镜阵列是棋盘格式的, 已经有很多种类的, 其中绝大多数的摄像产品采用的是原色贝尔模板彩色滤波阵列( Bayer Pattern CFA) , 如图 2 所示, R、 G、 B 分别表示透红色、 透绿色和透蓝色的滤镜阵列单元, 图 3 比较形象地展示了此过程。由于人的视觉对绿色最为敏感, 所以在 Bayer CFA 中 G 分量是 R 和 B 的二倍, 在每个像素点上只能获取一种色彩分量的信息,然后根据该色彩分量的信息通过插值算法得到全色彩图像。

关于色彩空间转换

在传输和存储上可以节省带宽和存储空间,例如一个RGB图像可以在捕捉之后转换为YCbCr格式用来减少存储和传输负担。在显示图象之前,再转回为RGB;在不同场合上可以根据需要做出转换,适应各种图像格式的需要,例如在做图像处理时算法可能需要YUV格式图像,而图像在屏幕显示需要RGB格式图像,有了色彩空间转换,就可以用一种格式的图像满足不同的图像格式要求。YUV 是一种基本色彩空间, 人眼对亮度改变的敏感性远比对色彩变化大很多, 因此, 对于人眼而言, 亮度分量Y 要比色度分量U、V 重要得多。 所以, 可以适当地抛弃部分U、V分量, 达到压缩数据的目的。

其他:

关于色温

所谓色温,简而言之,就是定量地以开尔文温度(K)来表示色彩。英国著名物理学家开尔文认为,假定某一黑体物质,能够将落在其上的所有热量吸收,而没有损失,同时又能够将热量生成的能量全部以“光”的形式释放出来的话,它便会因受到热力的高低而变成不同的颜色。例如,当黑体受到的热力相当于500—550℃时,就会变成暗红色,达到1050-1150℃时,就变成黄色,温度继续升高会呈现蓝色。光源的颜色成分与该黑体所受的热力温度是相对应的,任何光线的色温是相当于上述黑体散发出同样颜色时所受到的“温度”,这个温度就用来表示某种色光的特性以区别其它,这就是色温。打铁过程中,黑色的铁在炉温中逐渐变成红色,这便是黑体理论的最好例子。色温现象在日常生活中非常普遍,相信人们对它并不陌生。钨丝灯所发出的光由于色温较低表现为黄色调,不同的路灯也会发出不同颜色的光,天然气的火焰是蓝色的,原因是色温较高。正午阳光直射下的色温约为5600 K,阴天更接近室内色温3200K。日出或日落时的色温约为2000K,烛光的色温约1000K。

关于色温的规律

色温越高,光色越偏蓝;色温越低则偏红。某一种色光比其它色光的色温高时,说明该色光比其它色光偏蓝,反之则偏红;同样,当一种色光比其它色光偏蓝时说明该色光的色温偏高,反之偏低。由于人眼具有独特的适应性,使我们有的时候不能发现色温的变化。比如在钨丝灯下呆久了,并不会觉得钨丝灯下的白纸偏红,如果突然把日光灯改为钨丝灯照明,就会觉查到白纸的颜色偏红了,但这种感觉也只能够持续一会儿。摄像机的CCD并不能像人眼那样具有适应性,所以如果摄像机的色彩调整同景物照明的色温不一致就会发生偏色。白平衡就是为了避免偏色的出现。从而引出白平衡概念。

总结:

本文介绍了相机在使用传感器记录拍摄景物的光学信号后进行的常见功能处理。可见,整个ISP处理流程非常复杂。在我们点击拍照按钮时,手机中的ISP芯片实际正在飞速地运转。也正是得益于这项成熟的技术,我们可以在瞬间记录下美好生活。

除了以上提到的,ISP中还有许多其它模块,如HDR、自动曝光控制 (AEC)、锐化等,这些模块都对最终成像结果产生了重要的影响。


http://www.ppmy.cn/ops/149133.html

相关文章

conda管理Python库和虚拟环境

conda 是一个开源的跨平台软件包管理系统和环境管理系统,用于安装、运行和协调不同版本的软件包和其依赖项。它最初是为 Python 语言而设计的,但现在已经支持多种编程语言和工具。conda 可以轻松地创建和使用虚拟环境,这些环境可以独立于系统…

Java的 BIO、NIO、AIO?分别的作用和用法

在Java中,BIO、NIO和AIO代表了不同的I/O操作模式。以下是每个模型的简要描述以及相应的代码示例。 BIO (Blocking I/O) 作用:传统阻塞式I/O,适合低并发场景。用法:使用java.io包中的类,如ServerSocket来监听连接请求…

腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨

腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨 作品简介 身处当今如火箭般迅猛发展的互联网时代,智能聊天助手已然化身成为提升用户体验的关键利器,全方位渗透至人们的数字生活。 紧紧跟随着这股汹涌澎湃的时代浪潮,我毅然投身于极具挑战性…

el-tree拖拽光标错位问题

背景:el-tree实现的分类树增加拖拽功能后,当分类树由于数量较多产生滚动条,如果分类树已滚动,进行拖拽时会造成光标错位的问题: 原因:el-tree拖拽光标定位的高度并未加上滚动的高度解决:将滚动的样式属性放…

EFCore HasDefaultValueSql (续2 HasComputedColumnSql)

前情:EFCore HasDefaultValueSql EFCore HasDefaultValueSql (续1 ValueGeneratedOnAdd)-CSDN博客 小伙伴在使用 HasDefaultValueSql 时,对相关的 ValueGeneratedOnAdd, HasComputedColumnSql 也有了疑问: HasComputedColumnSql 对于计算…

[IoT]详细设计:智能农业监控系统

以下是基于IoT的智能农业监控系统网络拓扑的详细设计: 网络拓扑详细设计 1. 星型与网状混合拓扑 中心节点:本地服务器或集中控制器作为中心节点,负责协调和管理整个网络。传感器/执行器节点:分布在农田中,负责数据采…

【ROS2】☆ launch之Python

☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch,而ROS2保留了XML 格式launch,还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好,但是ROS2官方推荐使用Python方式编写…

定时器类QTimer的简单使用

定时器类QTimer 使用流程: 创建一个QTimer类对象后,设置定时器的周期时间间隔setInterval() 然后调用其 start() 函数开启定时器 此后QTimer对象就会周期性的发出 timeout() 信号。 //[1]创建定时器 QTimer timer new QTimer(this); //[2]绑定信号槽函…