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=Lexp​elseY<=thr,HDR=Sexp​∗k+b

得到的HDR数据需要移位来压缩动态范围,得到动态范围较好的图像

短曝光图像:

长曝光图像:

融合的HDR图像:

4、测试程序路径

测试程序供参考: https://github.com/AomanHao/AomanHao_example_of_algorithms/tree/main/2-HDR


觉得本文对您有一点帮助,欢迎讨论、点赞、收藏,您的支持激励我多多创作。

我的个人博客主页,欢迎访问

我的CSDN主页,欢迎访问

我的GitHub主页,欢迎访问

我的知乎主页,欢迎访问

ISP-长短曝光融合生成HDR图像的更多相关文章

  1. [OpenCV实战]24 使用OpenCV进行曝光融合

    目录 1 什么是曝光融合 2 曝光融合的原理 3 代码与结果 4 参考 本教程中,我们将了解使用OpenCV的Exposure Fusion(曝光融合). 1 什么是曝光融合 曝光融合是一种将使用不同 ...

  2. YChaos生成混沌图像

    YChaos是一款通过数学公式生成混沌图像的软件,展示混沌之美,数学之美.软件中定义一套简易的脚本语言,用于描述数学表达式.使用时需要先要将数学表达式写成该脚本的形式,解析脚本代码以生成相应的图形与图 ...

  3. 混沌的艺术--- YChaos通过数学公式生成混沌图像

    艺术真得很难吗?也许如同编程一样容易.我写了一套软件,其功能是通过输入数学方程式,生成艺术图像.一提到数学有人可能会发怵,这里请不要担心,生成混沌的数学公式大都很是简单,基本上只用加.减.乘.除.余. ...

  4. 利用ASP.NET一般处理程序动态生成Web图像(转)

    摘自:http://www.cnblogs.com/zhouhb/archive/2011/02/15/1955262.html 一般处理程序的扩展名为ashx,它实现了IHttpHandler接口, ...

  5. Opencv Sift和Surf特征实现图像无缝拼接生成全景图像

    Sift和Surf算法实现两幅图像拼接的过程是一样的,主要分为4大部分: 1. 特征点提取和描述 2. 特征点配对,找到两幅图像中匹配点的位置 3. 通过配对点,生成变换矩阵,并对图像1应用变换矩阵生 ...

  6. cv2 exposureFusion (曝光融合)

    import cv2 import numpy as np import sys filenames = ['./images/memorial0061.jpg', './images/memoria ...

  7. php生成雪花图像(不美观请见谅)

    <?php /*  //新建图像 //雪花  @header("Content-Type:image/png"); $w = 500; $h = 500; //create ...

  8. 对抗生成网络-图像卷积-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特征图的 ...

  9. 为训练深度OCR 图像,生成文本图像

    https://github.com/Sanster/text_renderer Generate text images for training deep learning ocr model 在 ...

  10. 【Python图像特征的音乐序列生成】图像特征在旋律生成中有什么用

    jishude 首先援引一个资料网页:http://www.cosmosshadow.com/ml/%E5%BA%94%E7%94%A8/2016/03/01/%E9%9F%B3%E4%B9%90%E ...

随机推荐

  1. 【Spring5】框架新功能

    Spring5框架新功能 整个Spring5框架的代码基于Java8,运行时兼容JDK9,许多不建议使用的类和方法在代码库中删除. Spring5自带了通用的日志封装:log4j2 已经移除了log4 ...

  2. Qt5.9 UI设计(七)——统一样式设计

    前言 前面已经将UI设计部分实现,各页面也做了最简单的设计,本章介绍一下qss样式的使用.样式设计最终的显示效果如下图: 操作步骤 将stylesheet.qss 样式文件添加进工程 styleshe ...

  3. Go语言实战: 即时通信系统(未完)

    使用Go语言构建一个即时通信系统,旨在锻炼Go语言编程能力 该通信系统至少能够允许用户能够在客户端进行公聊,即所发消息能被所有用户看到,也可发起私聊(即两个用户之间私密通信).同时,用户能够看到当前有 ...

  4. java递归算法之老鼠找路

    (上图出自B站韩顺平教育) 从上图的(1,1)处,寻找到(6,5)处的路线,红色格子是障碍 public class MiGong { public static void main(String[] ...

  5. Python + 超级鹰 识别图形验证码

    前言: 一.下载 1.进入官网:http://www.chaojiying.com/,注册完成后,进行登录 2.点击开发文档,点击Python语言示例 3.进行示例下载 4.解压后的文件 注:关注公众 ...

  6. python轻量级性能工具-Locust

    Locust基于python的协程机制,打破了线程进程的限制,可以能够在一台测试机上跑高并发 性能测试基础 1.快慢:衡量系统的处理效率:响应时间 2.多少:衡量系统的处理能力:单位时间内能处理多少个 ...

  7. C++ Primer 5th 阅读笔记:入门指南

    学习方法 The way to learn a new programming language is to write programs. 学习一门新编程语言的方式是编写程序. 函数(Functio ...

  8. [Flink] Flink Job运行状态正常,但日志中偶报“FlinkException: The file LOG does not exist on the TaskExecutor.”

    0 序言 Flink : 1.12 job start running time : 2022-12-27 17:40:47 problem throw time : 2023-05-11 16:41 ...

  9. 2020-11-04:java里,总体说一下集合框架。

    福哥答案2020-11-04: 福哥口诀法:收马李色坤(Collection.Map.List.Set.Queue).李矢数链写(List:Vector矢量.ArrayList数组.LinkedLis ...

  10. C#识别文字内容并分类输出0和1

    这个代码最开始是为了处理在调查问卷的结果,问卷星等调查问卷有一部分是用汉字描述的多选题,问卷系统在输出问卷的时候直接就是将汉字进行输出,而我们在进行数据分析(二元logistic或多项logistic ...