High Dynamic Range Imaging
High Dynamic Range Imaging
一.背景介绍
今天,大多数数字图像和成像设备每通道使用8位,因此将设备的动态范围限制为两个数量级(实际上是256级),而人眼可以适应变化十个数量级的照明条件。当我们拍摄现实世界场景的照片时,明亮区域可能曝光过度,而暗区域可能曝光不足,因此我们无法使用单次曝光捕获所有细节。HDR成像适用于每通道使用8位以上(通常为32位浮点值)的图像,从而允许更宽的动态范围。
获得HDR图像的方法有很多种,但最常见的方法是使用不同曝光值拍摄的场景照片。要结合这种曝光,了解相机的响应函数是有用的,并且有估算它的算法。混合HDR图像后,必须将其转换回8位以在常规显示器上查看。此过程称为色调映射。当场景或相机的物体在镜头之间移动时会出现额外的复杂性,因为应该注册和对齐具有不同曝光的图像。
在本教程中,我们将展示如何从曝光序列生成和显示HDR图像。在我们的例子中,图像已经对齐,没有移动的物体。我们还展示了一种称为曝光融合的替代方法,可产生低动态范围图像。
二.代码实现
#include <opencv2/photo.hpp>
#include "opencv2/imgcodecs.hpp"
#include <opencv2/highgui.hpp>
#include <vector>
#include <iostream>
#include <fstream>
using namespace cv;
using namespace std;
void loadExposureSeq(String, vector<Mat>&, vector<float>&);
int main(int, char**argv)
{vector<Mat> images;vector<float> times;loadExposureSeq(argv[1], images, times);Mat response;Ptr<CalibrateDebevec> calibrate = createCalibrateDebevec();calibrate->process(images, response, times);Mat hdr;Ptr<MergeDebevec> merge_debevec = createMergeDebevec();merge_debevec->process(images, hdr, times, response);Mat ldr;Ptr<TonemapDurand> tonemap = createTonemapDurand(2.2f);tonemap->process(hdr, ldr);Mat fusion;Ptr<MergeMertens> merge_mertens = createMergeMertens();merge_mertens->process(images, fusion);imwrite("fusion.png", fusion * 255);imwrite("ldr.png", ldr * 255);imwrite("hdr.hdr", hdr);return 0;
}
void loadExposureSeq(String path, vector<Mat>& images, vector<float>& times)
{path = path + std::string("/");ifstream list_file((path + "list.txt").c_str());string name;float val;while(list_file >> name >> val) {Mat img = imread(path + name);images.push_back(img);times.push_back(1 / val);}list_file.close();
}
High Dynamic Range Imaging相关推荐
- Faster Read: Deep High Dynamic Range Imaging with Large Foreground Motions
ECCV 2018, Hong Kong University of Science and Technology, Tencent Youtu, U of Oxford 论文名称: Deep Hi ...
- 3.1 TMO MATLAB 框架(Advanced High Dynamic Range Imaging )
3.1 TMO MATLAB 框架(Advanced High Dynamic Range Imaging ) 通常,无论属于哪一类TMO,都有两个共同的步骤. 本节描述了大多数但不是全部TMO使用的 ...
- 3.2.3 Quantization Techniques(HDR量化)(Advanced High Dynamic Range Imaging)Schlick TMO
3.2.3 Quantization Techniques(HDR量化)(Advanced High Dynamic Range Imaging)Schlick TMO Schlick [341]提出 ...
- 2.1.2 Capturing HDR Videos(Advanced High Dynamic Range Imaging )
2.1.2 Capturing HDR Videos(Advanced High Dynamic Range Imaging ) 目录 2.1.2 Capturing HDR Videos(Advan ...
- 论文解读:Deep High Dynamic Range Imaging of Dynamic Scenes
Deep High Dynamic Range Imaging of Dynamic Scenes Abstract 这篇文章介绍了一种在动态场景中,如何将不同曝光的图像进行融合从而得到高动态图像的方 ...
- 高动态范围光照(High Dynamic Range Imaging,简称HDRI或HDR)
1 HDR基本概念 高动态范围光照(High Dynamic Range Imaging,简称HDRI或HDR),是一种表达超过了显示器所能表现的亮度范围的图像映射技术,已成为目前游戏应用不可或缺的 ...
- HDR(High Dynamic Range Imaging)在摄影中指高动态范围成像
HDR(High Dynamic RangeImaging)在摄影中指高动态范围成像.国内的教程基本语焉不详,找到一篇比较详尽的国外教程翻译出来,希望对大家有帮助.^_^ 原文地址:http://ph ...
- 【论文学习】UPHDR-GAN: Generative Adversarial Network forHigh Dynamic Range Imaging with Unpaired Data
UPHDR-GAN:基于非配对数据的高动态范围成像生成对抗网络 摘要 introduction 主要贡献 proposed method 网络框图 网络详介 1.输入 2.生成器输出 3.生成器 4. ...
- Python+OpenCV:高动态范围(High Dynamic Range, HDR)
Python+OpenCV:高动态范围(High Dynamic Range, HDR) 目标 Learn how to generate and display HDR image from an ...
最新文章
- iptables连接跟踪ip_conntrack
- intelliJ idea运行新的test功能时,报错:class not found ..... empty test suite
- [Qt教程] 第20篇 2D绘图(十)图形视图框架(下)
- Luogu1979 NOIP2013D2T3 华容道 搜索、最短路
- 代码健壮性 —— 边界条件的判断
- c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 .
- [原创]Java开发如何在线打开Word文件
- 市县城镇开发边界内1:500地形图无人机航测实践(M300 RTK+P1+大疆智图+航天远景采集软件)
- 思科路由器虚拟服务器,解读CISCO路由器基本设置方法
- 防止浏览器自动填充表单
- 决OBS Studio录制的视频为黑屏的问题
- 如何用VBA从EXCEL表取数据?问题1:1次性整体写入,还是循环写入数组呢? 问题2:取得数据后如何定位需要的那个?
- VS2010 调试C++项目 fatal error LNK1123 错误解决办法
- mysql不锁表加索引
- ubuntu修改用户名和home对应的目录名
- C语言作业第二次总结
- NOIP2016 总结
- prometheus杂碎
- 【Scratch】青少年蓝桥杯_每日一题_12.09_地球绕太阳转,月球绕地球转
- JS买股票的最好时机