ISP基本框架简介

一、前言

ISP(image signal processor)即图像信号处理。是用来对前端图像传感器输出信号进行处理的单元。相机采集图像的流程大概可以理解为:镜头采集到光信号,然后由sensor经过光电转换将光信号转换为电信号,将Bayer格式的图输入给ISP模块做图像信号处理,ISP经过算法处理,输出RGB空间域的图像给后端的视频采集单元。

在介绍ISP模块前先简单介绍一下相机的模组构成,帮助理解ISP在整个成像过程中所处的位置。

相机模组一般由如下几部分组成:Lens,VCM,IR filter,sensor,PCB。如下图(图片来自网络,侵删)

 二、ISP基本pipeline

各家厂商的ISP pipeline实际都不太一样,但大致流程基本一致,基本pipeline如下

1、DPC(Defect Pixel Correction)- 坏点校正

坏点校正一般是pipeline的第一步。

受限于 sensor 的制造工艺,对于几百万像素的 sensor,坏点是不可避免的,尤其是对于低成本的 sensor 来说,坏点数为 100ppm 或者 1000ppm(parts per million,百万分之一)都是正常的。

若图像中存在坏点,经过插值等图像处理,会出现坏点扩散(坏点变大),而且由于色彩校正和串扰补偿,坏点处颜色的强度和饱和度也会明显提高,因此需要在做其他的流程前对坏点进行校正。

坏点分类:

  • 静态坏点:分为亮点和暗点。
    • 亮点:为一般来说像素点的亮度值是正比于入射光的,而亮点的亮度值明显大于入射光乘以相应比例,并且随着曝光时间的增加,该点的亮度会显著增加。
    • 暗点:不论在什么光照条件下,值都为0
  • 动态坏点:与sensor的温度和gain有关,一般温度越高gain值越大,动态坏点越多。

2、BLC (Black Level Correction )- 黑电平校正

Sensor感光全零数据时,理论上应该输出全零信号值,但实际对应Sensor输出的最小信号值不为零。

BLC分为:

  • 暗电流:物理器件不可能是理想的,由于杂质、受热等其他原因的影响,没有光照,像素单元也会产生电荷,这些电荷产生了暗电流。
  • 黑电平:sensor将模拟信号转换到数字信号时,由于转换精度限制无法将电压值很小的一部分给区分开来,导致sensor在全暗环境下仍然会输出信号。

3、Denoise(NR)- 降噪

使用CMOS sensor 获取图像,光照程度和传感器问题是生成图像中大量噪声的主要因素。

同时,当信号经过ADC时又会引入一些其他噪声。这些噪声会使图像变得模糊,而且丢失很多细节,所以需要对图像进行去噪处理

空间去噪的传统方法有高斯滤波,中值滤波等。

调试Denoise模块降噪需要参考噪声标定 NoiseProfile,不同 iso 下得到一个拟合系数。

4、LSC(Lens Shading Correction)- 镜头阴影校正

Shading分为亮度(Lens Shading & Y Shading)和色彩(Color Shading),它们都是由镜头的光学特性所导致的图像的亮度和色彩不均匀的现象。

  • Lens Shading是由于Sensor边缘接受到的光线比sensor中心弱,从而造成了中心亮四周暗的现象(有的文档也称这种现象为“渐晕”)。
  • Color Shading是由于入射光中不同波长的光的折射率不同,导致入射光中不同波长的光落在感光器件的不同位置上,造成图像的色彩不均匀的现象。

5、AWB(Auto White Balance)- 自动白平衡

同一物体在不同光源照射下呈现的颜色是不同的,受光源色温的影响。低色温光源下,白色物体偏红,高色温光源下,白色物体偏蓝。人眼可根据大脑的记忆判断,识别物体的真实颜色。

AWB算法的功能是降低外界光源对物体真实颜色的影响,使得我们采集的颜色信息转变为在理想日光光源下的无偏色信息。

AWB 算法的基本原理是,根据场景内灰色物体的颜色信息,计算 R, G, B 颜色通道的增益,乘以增益后,RGB 三个通道达到平衡。

AWB 的增益是全局的,因此,在混合光源下,不能达到所有灰色区域的 RGB 三通道平衡。

6、Demosaic - 去马赛克

由于大部分彩色相机均采用单传感器获取图像信息,且每个传感器表面覆盖有一个 CFA(Color Filter Array,色彩滤波阵列),使得每一个像素只能获得 R、G、B 三基色中的一种彩色分量如下图。

Demosaic 模块实现的功能就是将输入的 Bayer 数据转化成 RGB 数据。为获得彩色图像,需要利用当前像素及周围像素的色彩分量值,估计出当前点缺失的其他两个分量值 

7、CCM(Color Correction Matrix)- 颜色校正

Sensor RGB 三分量对光谱的响应,与人眼对光谱的响应通常是有偏差的,可通过一个色彩校正矩阵校正光谱响应的交叉效应和响应强度,使前端捕获的图片与人眼视觉在色彩上保持一致。

CCM(Color Correction Matrix)的作用就是通过一个3X3的矩阵使得颜色更接近人眼所感受的颜色。

8、Gamma - 伽马曲线校正

Gamma 模块对图像进行亮度空间非线性转换以适配输出设备。Gamma 模块校正 R、 G、B 时调用同一组 Gamma 表,Gamma 表各节点之间的间距相同,节点之间的图像像素值使用线性插值生成。

一个完整的图像系统需要2个伽马值,我们经常说的Gamma和反Gamma:

  • encoding gamma:它描述了encoding transfer function,即图像设备捕捉到的场景亮度值(scene radiance values)和编码的像素值(encoded pixel values)之间的关系。
  • display gamma:它描述了display transfer function,即编码的像素值和显示的亮度(displayed radiance)之间的关系。

9、EE(Edge Enhance)- 边缘增强/锐化

主要是边缘强化主要是强化影像的Edge和Texture,让影像看起来更锐利。但是在加强Edge的同时,可能会因为过强导致物体轮廓出现白边;加强Texture的同时,也会同步加强Noise的强度。

10、CSM(Color Space Matrix)-  颜色空间转换

将图像从RGB空间转换为YUV空间,方便对图像进行锐化和去噪,方便编码两个目的。

后续文章将针对每个模块进行探索和实现。

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑电平校正可以通过FPGA实现,以下是一个基于Verilog的黑电平校正程序的实现流程: 1. 读取图像数据: 将传感器采集到的图像数据存储在内存中,通过FPGA读取内存中的图像数据。 2. 计算黑电平: 通过计算图像像素点的灰度值,找到图像中的黑点区域,将黑点区域的像素灰度值加起来,求出这些像素的平均灰度值,即为黑电平。 3. 校正图像数据: 将图像数据中的每个像素值减去黑电平值,得到校正后的图像数据。可以通过一次遍历校正完整个图像。 4. 存储校正后的数据: 将校正后的图像数据存储在内存中,或者输出到显示器等外设上。 需要注意的是,在FPGA实现黑电平校正时,需要考虑算法的复杂度和FPGA资源的限制。同时,需要对算法进行优化,使其在FPGA上实现的速度和效率更高。以下是一个基于Verilog的黑电平校正的代码示例: ```verilog module black_level_correction(clk, rst, data_in, data_out); input clk, rst; input [11:0] data_in; // 输入的原始图像数据 output [11:0] data_out; // 输出的校正后的图像数据 reg [11:0] black_level; reg [11:0] corrected_data; reg [11:0] data_in_reg; reg correction_done; always @(posedge clk or negedge rst) begin if (rst == 0) begin black_level <= 0; data_in_reg <= 0; corrected_data <= 0; correction_done <= 0; end else begin data_in_reg <= data_in; if (correction_done == 0) begin // 如果还没完成校正 if (black_level == 0) begin // 如果还没计算黑电平,计算黑电平 if (/* 判断当前像素是否为黑点 */) begin black_level <= black_level + data_in_reg; // 累加像素值 end else if (/* 判断黑点区域是否计算完成 */) begin black_level <= black_level / /* 黑点像素数量 */; // 计算平均像素值 end end else begin // 如果已经计算黑电平,进行校正 corrected_data <= data_in_reg - black_level; // 校正像素值 correction_done <= 1; // 标记校正完成 end end else begin // 如果已经完成校正 corrected_data <= data_in_reg - black_level; // 直接输出校正后的像素值 end end end assign data_out = corrected_data; endmodule ``` 在实际应用中,需要根据具体的传感器和图像数据格式进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值