ISP(Image Signal Processor)——HDR技术总结

news/2024/12/16 6:09:16/

传统多帧融合技术

拍摄一系列不同曝光时长的图像帧(LDR),然后使用融合算法进行融合成HDR图像。

融合算法可以分为两种

基于照度图估计的融合

基于照度估计需要拟合相机响应函数,详细可以参考如下论文:

Recovering High Dynamic Range Radiance Maps from Photographs

该论文描述了如何求解相机响应曲线。

通常相机对于现实世界的亮度是一个非线性映射,它决定了场景中的亮度如何转换成为输出图像中的像素值。通过该曲线可以查找到所有现实场景亮度对应的像素值,在同时拍摄了过曝光图像A和欠曝光图像B后,A中欠曝光过暗(黑色区域)地方的像素值可以通过B图乘以一个比例因子,而该比例因子可以根据相机响应曲线中Exposure的比值来确定。

假设相机在拍摄一个场景,对于场景中某个点处辐照度为E,则曝光为

X=E\cdot \Delta t

该曝光经过相机处理(相机响应曲线)输出的原始数据

Z=f(X)=f(E\cdot \Delta t)

需要注意的是,对于拍摄场景中的同一个点,辐照度是现实场景真实存在的参数,短时间内可认为是恒定的,即某个点的真实场景亮度短期是恒定的。由于使用不同的\Delta t曝光时长,造成了同一场景可以拍摄出不同亮度的图像。而这些图像序列的对应像素点都源于同一场景对应点的相同辐照度。

这里的f即为相机响应曲线。

例如下列案例

欠曝光B图
过曝光A图

假设该响应曲线已知,知道欠曝光B图的参数\Delta t_B和像素值Z_B,过曝光A图的参数\Delta t_A和像素值Z_A。在B图中,暗光区域(黑区)的像素值由于没有正确曝光(黑区中Z_B无法表达场景),需要通过A图对应位置来获取,也就是以下公式:

根据已知信息可知

f(E\cdot \Delta t_A) =Z_A

f(E\cdot \Delta t_B) = Z_B

根据上述同一场景某个点处辐照度E短时间内是恒定的,可以得出将A图中正确曝光Z_A像素映射到B图中黑区对应位置的值如下:

Z_{B}' =f(\frac{f^{-1}(Z_A)}{\Delta t_A}\cdot \Delta t_B)

同理可以得到欠曝光B图中正常曝光区域(在B图中是高光饱和区域)的像素值Z_B映射到A图中对应区域位置的像素值Z_A

以上描述的仅是利用相机响应曲线中的最简单融合方式。

值得注意的是:笔者认为,应该在Bayer域求解相机响应曲线,因为ISP后续的一些部分会引入非线性变换,这些非线性变换很有可能会扭曲相机响应曲线。

多曝光直接融合

参考最经典的论文:

Exposure Fusion: A Simple and Practical Alternative to High Dynamic Range Photography

以饱和度、对比度、曝光度等简单的质量指标为指导进行多帧图像的加权和多尺度融合。

对比度指标:拉普拉斯滤波器应用于每个图像的灰度图,并获得滤波器响应的绝对值C作为对比度指标。

饱和度指标:饱和度测量S,它被计算为每个像素的R、G和B通道内的标准偏差。

曝光度指标:像素的曝光度使用高斯曲线根据每个像素强度接近0.5的程度E

多尺度融合过程如下所示:

将输入图像分解为拉普拉斯金字塔(提取细节层),该金字塔基本上包含不同尺度的带通滤波图像。然后分别对每个级别进行混合。多分辨率(多尺度)融合在避免接缝方面非常有效,因为它混合了图像特征而不是强度。

另一篇有意思的论文:

An Analysis and Implementation of the HDR+ Burst Denoising Method

传统多帧的HDR图像融合方式最大的缺点是容易产生运动伪影,在拍摄高速运动场景中的运动物体时候或者相机发生抖动的时候,由于拍摄多帧之间的帧间隔时间,图像内容往往会发生较大改变(不仅仅是亮度),因此需要联合鬼影消除和图像配准等方式,算法会变得更为复杂。

HDR Sensor

现代HDR技术更多依赖于硬件的支持,其中最重要的就是CMOS Image Sensor。

Interlaced HDR(iHDR)

为了解决鬼影问题,诞生了隔行曝光(Interlaced)HDR。采用这种技术的sensor,以行为单位,一组做长曝光,一组做短曝光,比如奇数组短曝光,偶数组长曝光(由于bayer阵列的结构,一般是两行为一组)。这样在一帧中就同时包含了长曝光和短曝光的行。算法最后会进行融合处理。iHDR会使得空间分辨率损失一半,主要的iHDR的技术有Sony的BME-HDR和OV的Alternate row HDR。

索尼的BME 是 binned multiplexed exposure 的缩写。这种 sensor 每隔两行的曝光时间分别设为 短曝光和长曝光。然后融合长短曝光的两帧图像,成为行数减半的一帧 HDR 图像。空间分辨率损失了一半,就好像是做了 1x2 binning,所以叫做 binned multiplexed exposure。 IMX135 和 IMX258 使用了这一技术。

OV的alternate row HDR 是每两行用一个曝光,long 或者short。对应长曝光、短曝光行的gain也可以分开控制。与sony 的BME HDR 类似,这个alternate row HDR 会损失一半的空间分辨率。

zHDR(Zig-zag HDR)

iHDR技术最大的问题是空间分辨率损失的问题,zHDR基本思想源自iHDR,但做了改进。zHDR不再以行为单位做曝光时间区分,而是按照Z字形方式组织长曝光和短曝光的数据。 zHDR是由SONY提出的iHDR的升级版本, 具体的实现方案主要是SONY的SME-HDR。

SME 是 Spatially multiplexed exposure 的缩写。这种 sensor 在空间上以棋盘格的 pattern 排列着长曝光和短曝光的像素。然后通过算法处理融合两个曝光的图像成为一帧 HDR 图像。IMX214 采用了这一技术。

QHDR(QB-HDR)

QBC 是 quad bayer coding 的缩写。这种 sensor 的设计是:每个像素是有四个子像素组成, 他们公用一个 color filter。在非 HDR 模式下,四个像素合并成一个输出值,在 HDR 模式时,会把四个像素分成两组,对角线方向的分到同一组,135 度的那组曝光要短于 45 度的那组,然后再 scale+combine,这样就生成完全 pixel 位置的 HDR 图像。IMX294CJK 采用了这个技术。

行交织HDR(Digital-Overlap)

索尼的DOL(Digital-Overlap) HDR相比传统HDR读取完每一行所有像素然后开始曝光,完成后再分别进行长中短这种低效模式下,DOL HDR的长中短三次读取曝光是同时进行的(准同时)效率更高。DOL HDR相比传统HDR读取完每一行所有像素然后开始曝光,完成后再分别进行长中短这种低效模式下,DOL HDR的长中短三次读取曝光是同时进行的(准同时)效率更高。IMX290 使用了这一技术。(IMX274LQC也使用了该技术)

OV的Staggered HDR:staggered HDR 与sony 的Dol 类似,不同的是Sony 最多支持4:1 曝光输出,即long,medium,short,veryshort。而OV 最多支持3:1 输出,即long,medium,short。

传统的多帧HDR是以帧为单位,只有第一帧所有行完成曝光后才开始第二帧的曝光,如下图所示

而行交织DOL  HDR只要长曝光行曝光结束就开始短曝光行的曝光,这种方式避免了传统多帧HDR方式对于拍摄高速移动物体场景的限制。

大小pixel HDR Sensor

与普通CFA的不同,大小pixel技术的sensor在相邻位置有一大一小两个pixel,他们空间上非常接近,可以认为对空间采样相同。IMX490 采用了此技术

由于pixel的大小不同,物理上的sensitivity不同,FWC也不同,会产生与时域HDR一样的不同曝光效果,形成了对不同动态范围的覆盖。

DCG Sensor 

据说这是小米10 至尊纪念版主摄技术

Dual一词也就说明了一个pixel下有两个方案--Low conversion gain(LCG)和high conversion gain (HCG)。 LCG应对于明亮的场景,DCG处于打开状态;HCG应对低光场景,DCG处于关闭状态,灵敏度增加。CG值越高,电子更容易被探测到,也就是sensitivity越高。

双摄HDR

这个不用多说,就是使用两个摄像头,一颗摄像头负责短曝光,一颗摄像头负责长曝光,后期通过HDR多帧融合算法融合即可。


http://www.ppmy.cn/news/1555515.html

相关文章

【学习笔记】桌面浏览器的视口

概念:设备像素和CSS像素 设备像素:设备物理屏幕的像素分辨率,使用screen.width/height获取 这里有四个像素100%缩放,CSS像素完全覆盖设备像素 缩小后,CSS像素开始缩小,意味着一个设备像素覆盖多个CSS像素…

Unreal Engine 5 (UE5) 中“变换“(Transform)类型变量

在 Unreal Engine 5 (UE5) 中,"变换"(Transform)类型变量是一个非常常见和重要的数据类型,它用于表示 对象的位置(Location)、旋转(Rotation) 和 缩放(Scale&a…

Qt网络通信、线程之间通信详解

一、 网络通信协议主要包括TCP和UDP,但更常用和可靠的是TCP协议。TCP是一种面向连接的、可靠的、面向流的传输协议,特别适合用于连续数据传输。在Qt中,网络通信主要通过QTcpSocket类和QTcpServer类来实现。 QTcpSocket类用于建立TCP客户端和…

【ChatGPT】解锁AI思维链:如何让机器像人类一样思考?

在人工智能领域,我们一直在追求让机器像人类一样思考。然而,即使是最先进的AI,也常常被诟病缺乏“常识”,难以理解复杂问题,更不用说像人类一样进行逻辑推理和解决问题了。最经常的表现就是遇到不会的地方,…

【AI落地应用实战】智能文档处理本地部署——可视化文档解析前端TextIn ParseX实践

湘江之畔,秋风送爽。前不久,2024长沙中国1024程序员节在长沙盛大举行。今年的程序员节主题为“智能应用新生态”,以科技为纽带,搭建起了一个共筑智能应用新生态的交流平台,众多技术大咖齐聚一堂,探讨智能应…

HDR视频技术之七:逆色调映射

HDR 技术近年来发展迅猛,在未来将会成为图像与视频领域的主流。当前 HDR 内容非常短缺,限制了 HDR 视听节目的广泛应用。逆色调映射(Inverse Tone Mapping)应运而生,它是一种用来将 SDR 源信号转换为 HDR 源信号的技术,可以应用于…

Java——网络编程(上)

1 计算机网络 (作用资源共享和信息传递) (计算机网络组成——> 硬件——>计算机设备,外部设备,通信线路 软件——>网络操作系统,网络管理软件,网络通信协议) 计算机网络是指将地理位置不同的具有独立功能的多台计算机…

JAVA题目笔记(二十四)多线程 (run方法原理)

一、卖电影票 public class Main {public static void main(String[] args) {//创建线程对象 Ticket t1new Ticket("电影院一:");Ticket t2new Ticket("电影院二:");t1.start();t2.start();} }import java.util.concurrent.locks.L…