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

传统多帧融合技术

拍摄一系列不同曝光时长的图像帧(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.mzph.cn/diannao/63796.shtml

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

相关文章

C++打造局域网聊天室第七课: Socket编程初步2

文章目录 前言一、Socket的API函数二、服务端建立Socket步骤总结 前言 C打造局域网聊天室第七课: Socket编程初步2 一、Socket的API函数 接着上一课的内容,我们在chartroom.cpp中找到如下位置 插入断点,运行 运行到断点处后,按…

【razor】echo搭配relay功能分析

echo 要搭配relay 实现作者说relay在linux上跑,可以模拟丢包、延迟目前没看到如何模拟。relay监听9200,有俩作用 echopeer1 发relay,replay 把peer1的包给peer2 ,实现p2p能力。 接收端:采集后发送发给relay的 接收端的地址就是自己,的地址就是本地的9200,因此是让relay接…

Wallpaper壁纸制作学习记录11

操控变形动画介绍 操控变形是使用Wallpaper Engine为角色和某些对象创建复杂动画的一种高级方法。操控变形是一个多步骤过程,要求您有一个单独的图像图层,其中包含要制作动画的角色或对象的剪切图。 操控变形功能相对复杂,您也可以创建仅包含…

黑马程序员Java项目实战《苍穹外卖》Day12

苍穹外卖-day12 课程内容 工作台Apache POI导出运营数据Excel报表 功能实现:工作台、数据导出 工作台效果图: 数据导出效果图: 在数据统计页面点击数据导出:生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原…

windows下Qt5自动编译配置QtMqtt环境

原文链接:windows下Qt5自动编译配置QtMqtt环境(11)-CSDN博客 1、概述 Qt默认是不包含mqtt库的,如果需要使用到mqtt库就只能自己编译配置;网络所有的QtMqtt配置的文章都是编译完成手动复制,非常麻烦&#x…

阿里云服务器Linux(centos)系统安装nginx1.20.2

阿里云服务器Linux(centos)系统安装nginx1.20.2 1.安装依赖包 一共要安装4种依赖(基于c语言) yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel2.下载nginx安装包并解压安装包 nginx官网下载:http://nginx.org/en/do…

【C++】三角形校验和算法优化的深入分析

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述💯老师的解法实现代码解法分析优势缺点 💯我的解法实现代码解法分析优势缺点 💯数学解释:为什么新增条件是冗余的&a…

【C++软件调试技术】dump文件类型与dump文件生成方法详解

目录 1、概述 2、dump文件的分类 2.1、dump按大小分类 2.2、查看dump文件中函数调用堆栈中变量的值 3、调用SetUnhandledExceptionFilter设置异常处理回调函数,然后调用MiniDumpWriteDump生成dump文件 4、使用Google开源库CrashRpt捕获异常,并自动…

持有CSPM证书可以用于评职称吗?

CSPM的诞生背景 CSPM(Certified Strategic Project Manager)即项目管理专业人员能力评价等级证书,是由中国标准化协会(CAS)根据国标《项目管理专业人员能力评价要求》(GB/T 41831-2022)推出的项…

SpringBoot左脚进门之常用注解

类级别注解 SpringBootApplication Configuration //表明这是一个配置类 EnableAutoConfiguration //开启自动配置 ComponentScan() //开启组件扫描1、Configuration: 当一个类被 Configuration 注解…

刷题日志【4】

目录 1、猜数字大小 1、猜数字大小 题意有点抽象,我大概讲一下,就是在1——n里面会有一个目标数,我们通过猜数字的方式逼近这个数字,直到解出这个数,之前我们是用二分法求最快达到求解的问题,这道题多了每…

【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:编写一个程序实现环形队列的基本运算。 相关知识 为了完成本关任务,你需要掌握: 初始化队列、销毁队列、判断队列是否为空、进队列…

一个简单带颜色的Map

越简单 越实用。越少设计,越易懂。 需求背景: 创建方法,声明一个hashset, 元素为 {“#DE3200”, “#FA8C00”, “#027B00”, “#27B600”, “#5EB600”} 。 对应的key为 key1 、key2、key3、key4、key5。 封装该方法&#xff0c…

恋爱脑学Rust之并行之旅:Rayon介绍和使用

文章目录 一、开启爱情的依赖之旅(安装 Rayon)二、甜蜜瞬间的并行享受(基本数据并行操作)(一)共享美好时光(par_iter 方法)(二)分块珍藏回忆(par_…

素数对

素数对 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 两个相差为2的素数称为素数对,如5和7,17和19等,本题目要求找出所有两个数均不大于n的素数对。 输入 一个正整…

cpptoml介绍

cpptoml 是一个用于 C 的开源库,旨在提供对 TOML(Toms Obvious, Minimal Language)格式的支持。它允许开发者轻松地在 C 项目中读取、解析和生成 TOML 格式的配置文件。cpptoml 是一个轻量级、易于使用的库,适用于那些希望将 TOML…

公有云和私有云的区别

目录 ​1、公有云(PublicClouds) ​2、私有云(PrivateClouds) ​2.1 私有云又分为两种 3、混合云(hybrid cloud) ​3.1 公有云和私有云的区别 ​3.2 选择公有云或者是私有云 4 政务云(Go…

嵌入式硬件-- 元器件焊接

1.锡膏的使用 锡膏要保存在冰箱里。 焊接排线端子;138度的低温锡(锡膏), 第一次使用,直接拿东西挑一点涂在引脚上,不知道多少合适,加热台加热到260左右,放在上面观察锡融化&#…

六、nginx负载均衡

负载均衡:将四层或者七层的请求分配到多台后端的服务器上。 从而分担整个业务的负载。提高系统的稳定性,也可以提高高可用(备灾,其中一台后端服务器如果发生故障不影响整体业务). 负载均衡的算法 round robin 轮询 r…

【C++算法】40.模拟_N 字形变换

文章目录 题目链接:题目描述:解法C 算法代码: 题目链接: 6. N 字形变换 题目描述: 解法 解法一:模拟 a,b,c,d,e,f,g...... n4 弄个矩阵放进去,最后从左往右读取。 解法二:模拟优化-…