海思平台ISP各模块介绍

CCM

为什么要做CCM

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

重要概念:

  • 色彩还原:通常通过一个色彩校正矩阵校正光谱响应的交叉效应和响应强度,使 ISP 处理后的图片与人眼视觉在色彩上保持一致。
  • 饱和度:也称色彩的纯度。取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。

相关API

  • HI_MPI_ISP_SetSaturationAttr:设置颜色饱和度属性。
  • HI_MPI_ISP_GetSaturationAttr:获取颜色饱和度属性。
  • HI_MPI_ISP_SetCCMAttr:设置颜色校正基础矩阵。
  • HI_MPI_ISP_GetCCMAttr:获取颜色校正基础矩阵。

Sharpen

为什么要做Sharpen

Sharpen 模块用于增强图像的清晰度,包括调节图像边缘的锐化属性和增强图像的细节和纹理的清晰度,同时还能分别独立控制图像的带方向的边缘和无方向的细节纹理的 锐化强度。此外,还能控制锐化后的图像的 overshoot(白边白点)和 undershoot(黑 边黑点),以及抑制噪声的增强。

相关API

  • HI_MPI_ISP_SetIspSharpenAttr:设置图像锐化属性。
  • HI_MPI_ISP_GetIspSharpenAttr:获取图像锐化属性

EdgeMark

EdgeMark 模块用于将图像中的强边缘和强的纹理特征标记上色。

该功能用于手动对焦时,帮助用户直观的看清确定当前图像是否对焦清晰。建议用户只在手动对焦的过程 中使用该功能,对强边缘和强的纹理特征标记的颜色尽量跟图像背景颜色形成明显的 反差,这样,在对焦过程中,用户对焦越清晰,就会看到图像中被标记上色的强边缘 和强的纹理特征越多,从而可以让用户直观的了解到对焦的清晰程度,辅助用户手动 对焦。由于 EdgeMark 模块做在 Sharpen 模块一起,所以,当 Sharpen 模块被 bypass 关闭时,EdgeMark 的功能也将失效。但是,EdgeMark 被 bypass 关闭不会影响 Sharpen 的功能。

Hi3559V200/Hi3556V200/Hi3516EV200/Hi3516EV300 不支持此模块。

相关API

  • HI_MPI_ISP_SetIspEdgeMarkAttr:设置图像的边缘标记属性。
  • HI_MPI_ISP_GetIspEdgeMarkAttr:获取图像的边缘标记属性。

HLC

HLC(High Light Cover)高光遮蔽模块,是用于将图像中亮度最高的区域(一般都是 夜晚场景的车灯或者路灯等光源)拉灰,以减少类似于车灯等高亮光源对人眼的刺激。

Hi3559AV100/Hi3559V200/Hi3556V200/Hi3516EV200/Hi3516EV300 不支持此模 块。

相关API

  • HI_MPI_ISP_SetIspHlcAttr:设置高光遮蔽的属性。
  • HI_MPI_ISP_GetIspHlcAttr:获取高光遮蔽的属性。

Gamma

Gamma 模块对图像进行亮度空间非线性转换以适配输出设备。

Gamma 模块校正 R、 G、B 时调用同一组 Gamma 表,Gamma 表各节点之间的间距相同,节点之间的图像像 素值使用线性插值生成。

相关API

  • HI_MPI_ISP_SetGammaAttr:设置 Gamma 属性。
  • HI_MPI_ISP_GetGammaAttr:获取 Gamma 属性

DRC

DRC 算法用于对 WDR 合成后的数据进行动态范围压缩(Dynamic Range Compression)。图像一般需要在显示设备上显示,CRT 显示器的动态范围一般只有 102 dB,而 WDR 合成后的数据的动态范围可以达到 109 dB,如果直接在 CRT 显示器上 显示,就会由于动态范围不匹配的问题,造成丢失亮度较高或者较低处的细节。

DRC 算法的目的就是要使真实场景的观察者和显示设备的观察者都能获得相同的视觉感受。DRC 算法将高动态范围的图像压缩到显示器的动态范围,同时尽可能的保留原 图像的细节和对比度。

DRC

相关API

  • HI_MPI_ISP_SetDRCAttr:设置动态范围压缩参数。
  • HI_MPI_ISP_GetDRCAttr:获取动态范围压缩参数。

Lens Shading

镜头的物理结构决定了 sensor 的中心比外围能接收到更多的光,相对中心来说外围就 是阴影,这个现象叫做渐晕(vignetting)。

镜头阴影校正就是用来对图像出现的暗角进行补偿校正。进行亮度校正时,R、G、B 三分量可以使用同样的参数;进行颜色校 正时则使用各自单独的校正参数。该 ISP 支持 radial 和 mesh 两种校正机制。

  • 使用 Radial 校正,对 R、G、B 三分量,分别设置中心点和校正系数。校正系数描述 了以同心环状从中心点到最远角落处的增益,由大小为 129 的查找表表示,数据格式 为无符号小数,定点 4.12,理论上能表示最大 16 倍的增益。校正系数由离线校正工具 生成。

  • 使用 Mesh 校正,对 R、G、B 三分量分别设置校正系数表。根据校正系数表里各分块 (最大 64*64)的增益系数双线性插值得到图像像素的校正增益,校正系数是 8bit 定点 小数,小数点的位置由 MeshScale 设定。校正系数由离线校正工具生成。Mesh 校正 最大支持 4 种色温光源下的阴影校正,各光源下的校正系数按照指定方式存放在校正 系数表里,并且根据环境色温,对设置的相邻色温校正系数进行线性插值得到当前色 温的校正系数。

相关API

  • HI_MPI_ISP_SetRadialShadingAttr:设置暗角 Radial 校正属性。
  • HI_MPI_ISP_GetRadialShadingAttr:获取暗角 Radial 校正属性。
  • HI_MPI_ISP_SetMeshShadingAttr:设置暗角 Mesh 校正属性。
  • HI_MPI_ISP_GetMeshShadingAttr:获取暗角 Mesh 校正属性。

Defect Pixel Correction

坏点校正模块通过使用内部坏点校正逻辑完成坏点检测,校正过程完成之后,获取到了坏点坐标,通常的做法是将坏点坐标存在 Flash 中,以后断电重新启动之后加载坏点坐标,无须重新校正。

Hi3519V101 坏点校正算法实现主要是通过一个窗口为 5×5 的模块找出该窗口内像素明显异于临近像素的坏点。

该模块的实现了以下两种模式

  • 静态坏点检测/校正会对 R,Gr,Gb,B 四个分量分别处理,若 Bayer 图像中出现图 7-3 所示的坏点类型,则可以对其校正;图 7-4 所示的坏点类型不能完全校正。其中 黑色块表示某一颜色通道(R/Gr/Gb/B)上的坏点。支持的最大坏点数为 4095,分 为亮点和暗点流程。

    • 在亮点流程中,光圈处于关闭状态,启动坏点检测程序,得到坏点坐标。得到 的坏点通过临近像素的中值滤波进行校正。
    • 在暗点流程中,光圈处于正常打开状态,要求平坦背景,最好使用照度均匀的 光源,图像整体平均亮度大约为最大亮度 50%,或 Bayer 格式中 B 通道亮度为 最大亮度 20%左右,启动坏点检测程序,得到坏点坐标。得到的坏点通过临近 像素的中值滤波进行校正
    • 静态坏点校正最多可以校正 4095 个静态坏点;
  • 动态坏点检测/校正

    • 在这种模式中,校正模块动态进行坏点检测和校正,对 R,Gr,Gb,B 四个分量分别 处理,只能处理单个坏点,能够校正的坏点个数没有限制。正常照度下,可以不 使用动态坏点校正功能;在低照度情况下,较弱的坏点被放大成刺眼的白点和明 显的黑点,推荐使用动态坏点校正功能。
  • 由于存储坏点信息的 memory 有限,静态坏点校正有可能无法完全校正 sensor 中的坏点,因 此静态坏点校正应当校正对图像质量影响最大的坏点,而动态坏点校正方法则校正其余的坏 点;

坏点校正

坏点校正

坏点校正

坏点校正

坏点校正

相关API

  • HI_MPI_ISP_SetDPAttr:设置坏点校正属性。
  • HI_MPI_ISP_GetDPAttr:获取坏点校正属性。
  • HI_MPI_ISP_SetDPCalibrate:设置坏点校正流程。
  • HI_MPI_ISP_GetDPCalibrate:获取坏点校正流程

Crosstalk Removal

Crosstalk Removal 模块的主要功能是为了平衡 rawdata 之间临近像素 Gr 和 Gb 之间的 差异,能够有效防止 demosaic 插值算法产生的方格或其他类似 pattern。由于 sensor 可 能会因为特殊角度的光线入射而产生 Crosstalk,形成一些 pattern,根本原因就是因为 临近像素值之间 Gr 和 Gb 值域不一致。

Hi3559V200/Hi3556V200 不支持此模块。

Crosstalk Removal

如上图所示,横坐标表示 Gr 与 Gb 之间的差值,即|Gr-Gb|,纵坐标表示处理的强度 值。

  • 当 Gr 与 Gb 之间的差值小于 Threshold 值时,都按照最大的强度值 0.5 进行处理, Threshold 值越大,图像整体被处理的强度越大;
  • 当 Gr 与 Gb 之间的差值大于 Threshold 值时,由 slope 控制处理的强度,当 slope 值越大,整体处理强度衰减得越慢,也就是处理的强度越大。

相关API

  • HI_MPI_ISP_SetCrosstalk Attr:设定 Crosstalk 属性
  • HI_MPI_ISP_GetCrosstalk Attr:获取 Crosstalk 属性

Noise Removal

去噪模块在 Bayer 域进行空域处理,分别对亮度噪声和色度噪声做去噪处理,且四个 通道强度分别可调,具有保留边缘和纹理的优点,并对随机噪声有一定的保留,提高 整体图像信噪比。去噪算法针对每款 sensor 的噪点特性进行处理,sensor 的噪点特性通过离线校正工具得到。

去噪算法有两种模式:自动模式和手动模式

  • 在自动模式中,去噪算法的阈值与系统的增益值成一个非线性的比例关系,去噪 算法的阈值会随着环境的变化而自动改变,当系统所处环境比较暗,光线不足 时,系统的模拟增益和数字增益同时增大,这时去噪算法的阈值增大;反之,当 系统所处环境比较亮时,系统的模拟增益和数字增益比较小,去噪算法的阈值减 小。去噪算法的阈值与系统的增益值的对应关系请参见数据类型 ISP_NR_ATTR_S 中的成员变量说明。
  • 在手动模式中,去噪算法的真实阈值与目标值一致
    • 低照度下较大的降噪强度(包括 ISP 模块的 2DNR 和 VPSS 模块的 3DNR)会 使图像暗区变暗,亮区变亮。原因是图像暗区的暗噪声会被钳位到 0,亮噪声 比暗噪声多,降噪处理后亮噪声比暗噪声减少的更多,暗区变暗;图像亮区的 亮噪声会被钳位到最大值,暗噪声比亮噪声多,降噪处理后暗噪声比亮噪声减 少的更多,亮区变亮。如果要保持暗区和亮区的亮度,建议相应调整 gamma 或 DCI 模块。
    • 低照度下较大的空域降噪强度(指 ISP 模块的 2DNR)可能会使图像偏绿。原 因是空域降噪对低频的色噪无法去除,当较多的高频噪声被去掉后,剩下的低 频色噪可能会使图像看起来偏绿。建议空域降噪强度不要调得过大,尽量通过 VPSS 模块的 3DNR 去除噪声,并适当调大 3DNR 的色度去噪强度。

相关API

  • HI_MPI_ISP_SetNRAttr:设定噪点抑制属性
  • HI_MPI_ISP_GetNRAttr:获取噪点抑制属性
  • HI_MPI_ISP_SetNPTable:设定噪点特性
  • HI_MPI_ISP_GetNPTable:获取噪点特性

DIS

DIS 模块通过比较当前图像与前一帧图像来计算出当前图像抖动位移大小,并传递到 后级模块,进行输出图像范围的调整,从而起到防抖的效果。每帧图像经过 DIS 后得 到一组 CROP 的起点(X,Y),再经过后端 VPSS CROP 功能处理,达到防抖效果。

对于每一帧图像来说,DIS 模块确定了能够使图像保持稳定的水平偏移量 和垂直偏移 量 。默认情形下,硬件在水平方向和垂直方向输出的像素偏移幅度范围是:[-128, +128],DIS 偏移示意如图所示

DIS

VPSS 裁剪后输出的图像大小为内部的长方形,ISP 的 frame buffer 存储的图像大小为外部长方形,当图像抖动后,DIS 模块输出水平方向和垂直方向的偏 移量 ,VPSS 根据这两个偏移量的进行裁剪后输出稳定的图像。 DIS 功能只能 VI 在线,VPSS 离线模式下使用。

相关API

  • HI_MPI_ISP_SetDISAttr:设置 DIS 属性。
  • HI_MPI_ISP_GetDISAttr:获取 DIS 属性。

Dehaze/Defog

Dehaze 是通过动态的改变图象的对比度和亮度来实现的,将图像分块,统计每块内的 像素值,估算出雾的浓度,根据局部自适应曲线调整去雾强度。Dehaze 分为手动和自 动模式,两种模式下均可调节去雾强度。

相关API

  • HI_MPI_ISP_SetDehazeAttr:设置去雾属性。
  • HI_MPI_ISP_GetDehazeAttr:获取去雾属性。

去伪彩AntiFalseColor

高频分量在图像插值时易引起高频混叠。用镜头对准一个分辨率测试卡,当 sensor 表 面没有 OLPF 时,在分辨率的高频部分容易出现伪彩。

去除伪彩主要是指去除高频部分因插值错误所导致的伪彩现象。增大去伪彩强度值会 减弱伪彩现象,但可能导致正常的颜色灰度化。

该模块原理是计算出伪彩出现区域及范围,通过可配去伪彩强度寄存器值调整去伪彩 强度值,将 RGB 三个通道值灰度化,从而达到减弱伪彩现象的目的。

相关API

  • HI_MPI_ISP_SetAntiFalseColorAttr:设置 AntiFalseColor 参数。

  • HI_MPI_ISP_GetAntiFalseColorAttr:获取 AntiFalseColor 参数。

去马赛克Demosaic

Demosaic 模块实现的功能是:将输入的 Bayer 数据转化成 RGB 数据。CFA(Color Filter Array,彩色滤波阵列)得到的 Bayer 数据,每一像素点只能获得 R、G、B 三基 色中的一种彩色分量值。为获得彩色图像,需要利用当前像素及周围像素的色彩分量 值,估计出当前点缺失的其他两个分量值。

去马赛克Demosaic

该模块能输出较高的图像分辨率,对弱细节及清晰度有较大提升。

相关API

  • HI_MPI_ISP_SetDemosaicAttr:设置去马赛克属性

  • HI_MPI_ISP_GetDemosaicAttr:获取去马赛克属性

黑电平BlackLevel

黑电平通常指没有外界光线输入时,sensor 仍会输出的亮度值。ISP 需要减去这个亮度 值,以进行颜色的处理。

相关API

  • HI_MPI_ISP_SetBlackLevelAttr:设置黑电平属性
  • HI_MPI_ISP_GetBlackLevelAttr:获取黑电平属性

去 FPN

Sensor 将光信号转换成电信号,再通过数百万个 ADC 器件后输出图像。每个像素结构 中的光电二极管的尺寸、掺杂浓度、生产过程中的沾污以及 MOS 场效应管的参数的偏 差等都会造成像素输出信号的变化,由于这些偏差造成的噪声对于给定的单个像素它 是固定的,这种噪声就是固定模式噪声 FPN(Fixed Pattern Noise)。

去 FPN 模块就是要把这些固定模式噪声消除。

FPN 的标定过程

步骤 1. 首先关闭镜头的光圈,让 sensor 采集黑帧。

步骤 2. 启动标定,当第一帧过来时,把满足标定条件的 RAW 数据写到内存 ,当第二帧过来 时,通过读出端口把内存中的黑帧读出来与第二帧进行累加后再通过写出端口再写回 内存,后面的帧也是这样,但是最后一帧写出时会对累加的黑帧平均后再写回内存。

步骤 3. 当求平均写出后,标定结束。此时,内存中就把低照度下的固定列噪声存储下来了, 然后,把该黑帧存储到外存上即可。

FPN 的标定过程

FPN 的校正过程

步骤 1. 把标定好的黑帧从外存载入到内存中。

步骤 2. 当从 sensor 过采集过来的带 FPN 的正常图像过来后,用每帧都减去在内存中的黑帧, 从而就得到了消除 FPN 后的校正帧。

FPN 的校正过程

相关API

  • HI_MPI_ISP_FPNCalibrate:设置去 FPN 标定属性。
  • HI_MPI_ISP_SetFPNAttr:设置去 FPN 属性。
  • HI_MPI_ISP_GetFPNAttr:获取去 FPN 属性

CA

颜色调整模块支持在 YUV 空间进行色域调整的操作,这个模块下有两个模式,一个是 CA 模式,另外一个是 CP 模式(热成像上色),工作的时候,两者只能二选一。

在 CA 模式下,通过下面的公式可以将一个像素点(Y,U,V)映射到另一个像素点 (Y’,U’,V’)。

Y’=Y;

U’=aU;

V’=aV;

其中 a 是转换系数,采用这组公式可以在一定程度上保持亮度和色调的恒定,对像素 点的饱和度做一个调整。转换系数 a 和像素点亮度 Y 联系,就可以根据亮度的变化来 调整饱和度,达到局部调整饱和度的目的,亮处的颜色更鲜艳,暗处的色噪不明显。 同时,转换系数 a 和 ISP 的 ISO 值联系,达到降低低照度下的暗处色噪的目的。

在 CP 模式下,热成像的图像只有亮度信息,该模式下通过亮度信息 Y 查找上色的色 板,查找对应的 YUV 的值作为输出的值。其中,色板是通过 YUV 格式存储的。

相关API

  • HI_MPI_ISP_SetCAAttr:设置 CA 属性。
  • HI_MPI_ISP_GetCAAttr:获取 CA 属性

CAC

色差(Chromatic Aberration)是指光学上透镜无法将各种波长的光聚焦在同一点上的现 象,是一种与镜头有关的缺陷,它产生的主要原因是不同波长的光具有不同的折射率 (色散现象)。色差可以分为如下的两类:

  • 轴向色差(Axial Chromatic Aberration)
    • 透镜对于不同的光会有不同的折射率,因此不同颜色的光会聚焦在不同的焦平 面上,大口径镜头容易产生这种色差,缩小光圈可以减弱轴向色差。
    • 人眼对于 G 通道更敏感,一般 G 通道可以正确对焦,从而引起 R、B 的模糊, 造成高光区与低光区交界处出现明显的紫边表现。
    • 具有明显的局部特性,因此校正紫边时采用 Local CAC
  • 横向色差(Lateral Chromatic Aberration)
    • 透镜的放大倍数也与折射率有关,它使得不同波长光线的像高不同,即不同波 长的光会聚焦在焦平面上不同的位置,会造成 R、G、B 3 通道具有不同的影像 高度,在影像上产生色的错位。
    • 越偏离图像中心,横向色差越明显,一般横向色差表现为物体相对的两侧边缘 出现不同的颜色,但具体表现为什么颜色与镜头组密切相关,不同的镜头组会 表现出不同种类的颜色边缘。
    • 具有全局特性,在校正时采用 Global CAC,而不同镜头的校正参数由标定得 到。Hi3559V200/Hi3556V200 不支持 Global CAC。

色差

相关API

  • HI_MPI_ISP_SetLocalCacAttr:设置紫边检测校正参数。
  • HI_MPI_ISP_GetLocalCacAttr:获取紫边检测校正参数。
  • HI_MPI_ISP_SetGlobalCacAttr:设置横向色差校正参数。
  • HI_MPI_ISP_GetGlobalCacAttr:获取横向色差校正参数

WDR

由于传统的图像传感器的动态范围比较低,因此,如果用传统的图像传感器拍摄高动 态范围的场景,就会要么亮处过曝,丢失很多细节;要么暗处曝光不足,细节难以分 辨。为了记录高动态范围场景的每一个细节,可以采用多次曝光图像合成的方法。

WDR 算法的目的就是将从 sensor 输出的长短帧数据合成为一帧 20bit 的数据。长短帧数据是先缓存在 DDR 中,然后同时给 WDR 模块进行合成。合成的原 则是择优选取,即对于比较亮的区域,采用短帧数据,而对于比较暗的区域,采用长 帧数据。

WDR

WDR 相关模块是为了支持 sensor WDR 模式和多帧合成 WDR 模式而需要额外配置或 有特殊配置的模块。Hi3519V101 无论是线性模式还是 WDR 模式,统计信息都是线性 的。

Sensor Built-in WDR 模式的处理流程图如下图所示。

Sensor Built-in WDR 模式

Sensor Built-in WDR 模式

说明如下:

  • Sensor 输出的图像数据经过 Channel 1 传给后面的模块;
  • InputFormatter 模块对分段压缩的图像数据进行解压缩处理,然后将解压缩数据按 照固定曝光比拆分成 4 路线性数据;
  • Channel Switch 模块用于选择各通道源数据,一般不需要配置;
  • 对拆分后的多路数据进行减黑电平,GE 和 DPC 处理,然后通过 FSWDR 模块融 合成高比特宽动态数据;
  • DRC 模块用于提高图像的动态范围,必须使能;
  • Gamma 模块可以采用与线性模式相同的曲线。

Hi3519V101 两路 ISP 分别支持 4 帧合 1 和 2 帧合 1,其中 ISP0(16M)最大支持 2M 4 合 1、3M 5 合 1、8M 2 合 1,ISP1(8M)最大只支持 8M 2 合 1。多帧合成 WDR 模式的处 理流程图如下图所示。

多帧合成 WDR 模式的处 理流程图

多帧合成 WDR 模式的处 理流程图

以 4 帧合成 WDR 说明如下:

  • Sensor 输出的 L 帧,M 帧和 S 帧图像数据先送到 DDR 缓存,在 VS 帧数据准备好 的时候再从 DDR 读出送到 Channel 2/3/4,VS 帧图像数据直接送给 Channel 1;其 中 L、M、S 和 VS 分别表示长帧、中帧、短帧和极短帧。

  • Channel Switch 模块用于选择各通道源数据,一般不需要配置;

  • FS WDR 模块接收 4 帧不同曝光数据进行合成,得到 20bit 的图像数据;

  • DRC 模块用于提高图像的动态范围,必须使能;

  • Gamma 可以采用与线性模式相同的曲线;

相关API

  • HI_MPI_ISP_SetGammaFEAttr:设置 GammaFE 属性。
  • HI_MPI_ISP_GetGammaFEAttr:获取 GammaFE 属性。
  • HI_MPI_ISP_SetFSWDRAttr:设置多帧合成宽动态属性。
  • HI_MPI_ISP_GetFSWDRAttr:获取多帧合成宽动态属性

CSC

色彩空间转换模块,用来将 RGB 信号转换成符合标准的 YUV 信号

相关API

  • HI_MPI_ISP_SetCSCAttr:设定 CSC(色彩空间转换)模块属性。
  • HI_MPI_ISP_GetCSCAttr:获取 CSC(色彩空间转换)模块属性

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程