ISP-长短曝光融合生成HDR图像
1、高动态范围图像相关
图像的动态范围是指一幅图像中量化的最大亮度与最小噪声的比值。高动态范围HDR(high dynamic range)图像,能够完整表示真实场景中跨度很大的动态范围。采用普通CMOS/CCD图像传感器不能完整呈现亮度层次差异较大的真实场景。场景中较亮的区域,由于过曝光会出现一片白亮,而场景中较暗的区域,由于欠曝光会出现一片黑暗。
另外,由于成本等原因,显示设备的动态范围也较小,如一般的阴极射线管(Cathode RayTube,CRT)、液晶显示器(Liquid Crystal Display,LCD)、LED、等离子显示器等,显示动态范围最大为28(O到255),大多在102个数量级,远远低于现实场景的动态范围,无法做到完全映射。这意味着,即使捕获了亮度差异较大的高动态范围图像,也很难在普通显示设备上完整显示出来。
多帧图像融合
较为经济的解决思路是采用多帧图像融合,图像可以是固定增益采用不同曝光下采集,也可以是同等曝光不同增益下采集。一般情况多采用两帧图像合成,长曝光-短曝光合成或者高增益-低增益合成。
1、**高低增益融合:**指在同样曝光时间条件下,同时输出一路高增益数据和一路低增益数据,根据某种关系将两路数据进行融合。
2、**长短曝光融合:**指在同等增益的条件下,同时输出一路长曝光数据和一路短曝光数据,根据某种关系将两路数据进行融合。
长曝光与高增益数据,保证场景中较暗处细节信息能够完整捕获(高增益类似)。短曝光与低增益数据保证场景中较亮处不至于过曝(低增益类似)。
通过高低增益融合或者长短曝光融合方式融合,这种HDR图像既能够有好的暗部信息,又保证了亮部不过曝,保留了亮度信息。
相比之下笔者觉得长短曝光融合方式效果更佳,因为在光照不足的环境下,高增益数据噪声会较大,合成的图像噪点多。
2、图像融合形成HDR图像
根据Debevec等人提出的相机响应曲线(Camera Response Curve,CRV),采集图像数据计算长曝光与像素值的关系,短曝光与像素值的关系,再利用权重函数,将长曝光、短曝光对应的低动态范围图像数据合成,得到高动态范围图像。
需要sensor支持同时输出长曝光、短曝光图像,通过长短曝光融合方式来形成高动态图像。长短曝光比率是可以配置的(如果sensor支持的话),不同的配比带来不同的效果。
注意事项:
第一,利用sensor输出的图像进行合成,长短曝光比率需要摸索,不是越大越好,合适的比率融合效果更自然。
第二,像素点亮度值与曝光时间成线性关系。对于同一像素点,长曝光相比于短曝光像素响应值更高,信噪比更高。可见光sensor线性度一般都很好,而红外探测器线性度很差,一般需要做均匀性校正之后再进行融合。
第三,一般的合成算法较为复杂,有的利用最小二乘法求解多个方程,有的进行分块融合,有的需要多次迭代处理。
像素过曝光和正常曝光的概念:
(1)过曝光:亮度值>90%最大满阱值
(2)正常曝光:亮度值<=90%最大满阱值
(3)亮度阈值:90%最大满阱值
参考文献:《Recovering high dynamic range radiance maps from photographs》
参考文献:<多曝光融合算法研究及HDR图像合成与色调映射算法设计实现>
参考文献:专利201810097959 .X
参考文献:《基于相机响应曲线的高动态范围图像融合》
3.图像融合方法
可见光sensor的像素线性响应度是很好的,线性区间几乎可以从暗场到满阱值,这为融合参数计算带来便利。
1)采集长短曝光下的数据
固定增益,短曝光间隔相同曝光值采集N组数据,长曝光数据与短曝光保持相同的比率
2)分析长短曝光下响应的曲线参数
3)计算长短曝光数据之间的响应关系
L
e
x
p
=
k
∗
S
e
x
p
+
b
L_{exp} = k*S_{exp}+b
Lexp=k∗Sexp+b
4)按照融合的算法,进行图像融合。
亮度阈值90%最大满阱值,阈值之下用长曝光数据,阈值之上用短曝光拟合的数据
i
f
Y
>
t
h
r
,
H
D
R
=
L
e
x
p
e
l
s
e
Y
<
=
t
h
r
,
H
D
R
=
S
e
x
p
∗
k
+
b
if Y>thr, HDR=L_{exp}\\ else Y<=thr, HDR=S_{exp}*k+b
ifY>thr,HDR=LexpelseY<=thr,HDR=Sexp∗k+b
得到的HDR数据需要移位来压缩动态范围,得到动态范围较好的图像
短曝光图像:
长曝光图像:
融合的HDR图像:
4、测试程序路径
测试程序供参考: https://github.com/AomanHao/AomanHao_example_of_algorithms/tree/main/2-HDR
觉得本文对您有一点帮助,欢迎讨论、点赞、收藏,您的支持激励我多多创作。
我的个人博客主页,欢迎访问
我的CSDN主页,欢迎访问
我的GitHub主页,欢迎访问
我的知乎主页,欢迎访问
ISP-长短曝光融合生成HDR图像的更多相关文章
- [OpenCV实战]24 使用OpenCV进行曝光融合
目录 1 什么是曝光融合 2 曝光融合的原理 3 代码与结果 4 参考 本教程中,我们将了解使用OpenCV的Exposure Fusion(曝光融合). 1 什么是曝光融合 曝光融合是一种将使用不同 ...
- YChaos生成混沌图像
YChaos是一款通过数学公式生成混沌图像的软件,展示混沌之美,数学之美.软件中定义一套简易的脚本语言,用于描述数学表达式.使用时需要先要将数学表达式写成该脚本的形式,解析脚本代码以生成相应的图形与图 ...
- 混沌的艺术--- YChaos通过数学公式生成混沌图像
艺术真得很难吗?也许如同编程一样容易.我写了一套软件,其功能是通过输入数学方程式,生成艺术图像.一提到数学有人可能会发怵,这里请不要担心,生成混沌的数学公式大都很是简单,基本上只用加.减.乘.除.余. ...
- 利用ASP.NET一般处理程序动态生成Web图像(转)
摘自:http://www.cnblogs.com/zhouhb/archive/2011/02/15/1955262.html 一般处理程序的扩展名为ashx,它实现了IHttpHandler接口, ...
- Opencv Sift和Surf特征实现图像无缝拼接生成全景图像
Sift和Surf算法实现两幅图像拼接的过程是一样的,主要分为4大部分: 1. 特征点提取和描述 2. 特征点配对,找到两幅图像中匹配点的位置 3. 通过配对点,生成变换矩阵,并对图像1应用变换矩阵生 ...
- cv2 exposureFusion (曝光融合)
import cv2 import numpy as np import sys filenames = ['./images/memorial0061.jpg', './images/memoria ...
- php生成雪花图像(不美观请见谅)
<?php /* //新建图像 //雪花 @header("Content-Type:image/png"); $w = 500; $h = 500; //create ...
- 对抗生成网络-图像卷积-mnist数据生成(代码) 1.tf.layers.conv2d(卷积操作) 2.tf.layers.conv2d_transpose(反卷积操作) 3.tf.layers.batch_normalize(归一化操作) 4.tf.maximum(用于lrelu) 5.tf.train_variable(训练中所有参数) 6.np.random.uniform(生成正态数据
1. tf.layers.conv2d(input, filter, kernel_size, stride, padding) # 进行卷积操作 参数说明:input输入数据, filter特征图的 ...
- 为训练深度OCR 图像,生成文本图像
https://github.com/Sanster/text_renderer Generate text images for training deep learning ocr model 在 ...
- 【Python图像特征的音乐序列生成】图像特征在旋律生成中有什么用
jishude 首先援引一个资料网页:http://www.cosmosshadow.com/ml/%E5%BA%94%E7%94%A8/2016/03/01/%E9%9F%B3%E4%B9%90%E ...
随机推荐
- CentOS 6.8 安装 node 后报错,显示 gcc 版本过低
因为测试服务器要部署一个 vue 的环境,安装了 node 和 npm 后,却由于 gcc 动态库版本过低,导致报错如下 node: /usr/lib64/libstdc++.so.6: versio ...
- 【Qt6】QWindow类可以做什么
原来的水文标题是"用 VS Code 搞 Qt6",想想还是直接改为"Qt6",反正这个用不用 VS Code 也能搞.虽然我知道大伙伴们都很讨厌 CMake, ...
- 笔记:C++学习之旅---try语句和异常处理
异常处理机制为程序中异常检测和异常处理这两部分的协作提供支持,在C++语言中,异常处理包括: *throw表达式(throw expression),异常检测部分使用throw表带是来 ...
- 【Redis】Setninel 哨兵机制
一.Sentinel 哨兵工作原理 Redis在2.6+以后引入哨兵机制,在2.8版本后趋于稳定状态,在生产环境中建议使用2.8版本以上的sentinel服务.sentinel集群用于监控redis集 ...
- 数据结构与算法大作业:走迷宫程序(C语言,DFS)(代码以及思路)
好家伙,写大作业,本篇为代码的思路讲解 1.大作业要求 走迷宫程序 问题描述: 以一个 m * n 的长方阵表示迷宫, 0和1分别表示迷宫的通路和障碍. 设计一个程序, 对任意设定的迷宫, 求出一 ...
- 获取android app 的Activity 和 Package
开头 appium 配置, sdk 配置,jdk配置,adb配置,python配置是我们app 自动化测试必不可少的配置,当然这种配置网上有很多,我们在这里就不展开说了. 直接就开始自动化脚本的dem ...
- 民谣女神唱流行,基于AI人工智能so-vits库训练自己的音色模型(叶蓓/Python3.10)
流行天后孙燕姿的音色固然是极好的,但是目前全网都是她的声音复刻,听多了难免会有些审美疲劳,在网络上检索了一圈,还没有发现民谣歌手的音色模型,人就是这样,得不到的永远在骚动,本次我们自己构建训练集,来打 ...
- 2020-08-22:I/O多路复用中select/poll/epoll的区别?
福哥答案2020-08-22: select,poll,epoll 都是 操作系统实现 IO 多路复用的机制. 我们知道,I/O 多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是 ...
- 2022-06-02:一开始在0位置,每一次都可以向左或者向右跳, 第i次能向左或者向右跳严格的i步。 请问从0到x位置,至少跳几次可以到达。 来自字节。 力扣754. 到达终点数字。
2022-06-02:一开始在0位置,每一次都可以向左或者向右跳, 第i次能向左或者向右跳严格的i步. 请问从0到x位置,至少跳几次可以到达. 来自字节. 力扣754. 到达终点数字. 答案2022- ...
- 2022-02-21:不含连续1的非负整数。 给定一个正整数 n ,返回范围在 [0, n] 都非负整数中,其二进制表示不包含 连续的 1 的个数。 输入: n = 5 输出: 5 解释: 下面是带
2022-02-21:不含连续1的非负整数. 给定一个正整数 n ,返回范围在 [0, n] 都非负整数中,其二进制表示不包含 连续的 1 的个数. 输入: n = 5 输出: 5 解释: 下面是带有 ...