Fast Tone Mapping for High Dynamic Range Images

news2024/11/24 1:56:25

Abstract

我们提出了一种快速、有效、灵活的色调再现方法,在低动态范围再现设备中保留了高动态范围场景的可视性和对比度印象。 一个单一的参数控制能见度和对比度在一个简单和优雅的方式和互动速度。 新方法使用简单,计算效率高。 实验表明,该方法对多种高动态范围图像都有较好的效果。 该方法也可用于普通低动态范围数字图像的增强。

1. Introduction

我们在日常生活中所经历的真实世界场景通常有非常广泛的亮度值。人类视觉系统能够感知5个数量级以上的场景,能够逐步适应9个数量级以上的动态范围的场景。随着数字成像技术的快速发展,人们对捕捉景物的全动态范围的数码照片越来越感兴趣。尽管可以想象,未来的数码相机将能够通过点击一个按钮来捕捉高动态范围(HDR)的照片,但目前的技术往往只能使真实世界的部分高动态场景在任何一个镜头中可见。图1演示了这样一个场景。这是一个室内场景,阳光透过窗户照射进来,相机被放置在黑暗的一端。为了使窗口附近的特征可见,使用了较短的曝光。然而,这使得场景远离光源太暗。为了使暗端的特征可见,我们增加了曝光间隔。另一方面,这一次,靠近窗户的区域变得饱和。然而,对人类的观察者来说,所有最暗和最亮区域的特征都能同时清晰地看到。如何使所有这些特征在如此大范围的亮度下同时在一张数码照片中可见,是我们在本文中要解决的问题。

事实上,最近的技术已经使得创建数值亮度地图相对容易,可以捕捉真实世界场景[1]的全部动态范围。利用同一场景在不同曝光间隔下拍摄的一系列低动态范围(LDR)图像,可以生成场景的HDR亮度图。

 辐射度图以数值格式记录了场景的全部动态范围。 然而,大多数再现设备,如CRT监视器或打印机,只能再现不超过几个数量级的图像,这大大低于辐射度图数据的动态范围。 为了在LDR设备中再现HDR映射,使用映射或音调再现技术将HDR值映射到LDR值。

本文提出了一种将HDR场景映射到LDR再现设备的新算法,使LDR显示中原始场景的可见性和视觉对比度得到很好的保留。 论文的组织结构如下。 在第2节中,我们简要回顾了以前的工作。 第三节提出了一种新的高动态范围数据到低动态范围显示的快速映射算法。 第4节给出实验结果,第5节总结全文。

2. Related Work

高动态范围图像越来越受到人们的关注。 在过去的十年左右,许多技术已经发展起来,用于高对比度图像的色调再现。 有两大类技术,即基于音调再现曲线(TRC)和基于音调再现算子(TRO)[2]。

TRC指的是操纵像素分布的技术。 在这一范畴中,早期的开创性工作包括[3]的工作,它引入了一种色调再现方法,试图使显示器亮度与现实世界的感觉相匹配。 最近,[4]提出了一种色调映射方法,该方法模拟了人类视觉系统的某些方面。 也许在这一类别中最全面的技术是[5]的技术,它引入了一种相当复杂的色调再现曲线技术,结合了人类对比度敏感度、眩光、空间敏感度和颜色敏感度的模型。

TRO技术涉及局部邻近像素值的空间操作,通常在多个尺度上。 这种技术的科学原理是基于图像形成模型:I(x,y)=L(x,y)R(x,y),该模型表明图像强度函数I(x,y)是亮度函数L(x,y)和场景反射率函数R(x,y)的乘积。 由于现实世界的反射率R(x,y)具有较低的动态范围(通常不超过100:1),如果可以将L(x,y)与R(x,y)分开,可以通过减小L(x,y)的动态范围来减小I(x,y)的动态范围。 基于这一原理的方法有[6]、[7]和[8]。 它们主要在试图将亮度分量与反射率分量分开的方式上有所不同。

最近的发展还试图将传统的摄影技术纳入数字领域,以复制高动态范围的图像[9]。

在高动态范围压缩方面,一个非常令人印象深刻的最新发展是[10]。基于人类视觉系统只对相对局部对比度敏感的观察,作者提出了一种多分辨率梯度域技术。TRC方法不涉及空间处理,因此计算速度非常快。

TRO方法涉及多分辨率空间处理,因此计算成本更高。由于TRO方法可以逆转局部对比度,有时会在复制过程中造成“光晕”效应。传统技术的另一个困难是,用户需要设置太多的参数,这使得他们很难使用。

3. A New TRC-based Tone Mapping Method

对于高动态范围映射,至少有两个要求。首先,它必须确保所有的特征,从最暗到最亮,同时可见。其次,要保留原场景的视觉对比,使其产生与原场景相匹配的视觉感受。在某种意义上,这两个要求是相互冲突的。随着动态范围的缩小,用于显示场景的可用值是有限的。如果一个人把所有的特征都表现出来,我们就可以减弱对比。另一方面,如果一个显示良好的对比,那么一些特征可能不可见。在有限的显示动态范围约束下,一种好的色调再现方法必须在这两种相互冲突的要求之间取得良好的平衡。

为了保持原始场景的视觉对比度,最好的方法是将像素从高动态范围线性映射到低动态范围。 然而,由于显示设备中的动态范围比原始场景的范围要窄得多,因此会因压缩而损失可见度。 此外,线性映射以相同的方式映射所有值,低动态范围中的一些值可能是空的,从而导致所有可显示值的利用不足。 在另一个极端,可以渲染充分利用所有可显示值并具有最大对比度的低动态范围图像,即直方图均衡化。 然而,这将改变原始场景的视觉印象,因为它夸大了密集像素值间隔中的对比度,而过于激进地压缩了稀疏像素值间隔。 一个好的色调再现算法必须在线性映射和良好的视觉对比度之间取得平衡。

对于任何高动态范围压缩技术,无论是基于TRC的还是基于TRO的,高动态范围图像中的一些值都必须合并并在低动态范围设备中显示为一个单一值。 关键是决定高动态场景中哪些值要合并在一起。 在基于TRO的技术中,像素的空间上下文在决策中起作用,而在基于TRC的技术中,空间上下文不是考虑的一部分。 虽然基于TRO的技术将显式地保留,有时甚至增强局部对比度,但它们通常计算量更大,需要更多的手动调整参数,因此不太容易使用。 我们提出了一种计算简单、有效且易于使用的基于TRC的高动态范围压缩技术。

与其他技术类似,我们只在亮度通道上工作,所有的操作都在对数空间中执行。 为了说明原理,图3显示了图2的HDR辐射度图的直方图。 我们的方法是基于一个相当简单的观察,即在任何给定的图像中,有人口密集的区域,也有人口稀少的区域。 色调映射算法应在保持原始场景的相对对比度的前提下,为人口密集的区域分配相对较多的显示值,为人口稀少的区域分配相对较少的显示值。 这样的操作将更多地压缩直方图的稀疏区域,而更少地压缩密集区域(甚至可能稍微扩展)。 虽然可能有许多可能的方法来实现这个想法,但我们给出了一个分层的、计算简单且灵活的实现。

 3.1. An Implementation

 

 4. Experimental Results

 

 5. Conclusions

本文提出了一种计算效率高、使用简单的高动态范围压缩技术。 结果证明了新技术的有效性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/856980.html

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

相关文章

金融反欺诈的应用实践

“根据980起全球重大金融欺诈事件分析,60%的欺诈发生在移动端,同比增长170%。“,在香港近日举办的金融科技沙龙上,顶象金融业务安全专家史博表示,金融业已成为不法分子重要的攻击对象。 本届金融科技沙龙由Databricks…

面试热题(螺旋矩阵)

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素 一看到这个大家有没有想到 就是一个螺旋形状,那这道题我们应该怎么解决? 我们先来仔细的看,它这种螺旋形状的遍历是先【右-下-左-上】…

01Mysql创建表

目录 一、题目要求 二、具体操作代码 三、查看结果: 一、题目要求 建立一张表: 表里面有多个字段,每一个字段对应一种数据类型 注意:表名,字段名都要起的有意义 二、具体操作代码 CREATE TABLE DataInfo (id INT …

python爬虫实战(2)--爬取某博热搜数据

1. 准备工作 使用python语言可以快速实现,调用BeautifulSoup包里面的方法 安装BeautifulSoup pip install BeautifulSoup完成以后引入项目 2. 开发 定义url url https://s.微博.com/top/summary?caterealtimehot定义请求头,微博请求数据需要cookie…

Windows 环境下 Python3 离线安装 cryptography 失败

发布Flask Web项目时,报错缺少Cryptography,于是尝试重新安装该库,但本机没有网络,只支持手动离线安装,尝试了pip、setup.py两种方式安装,结果都报错。。最后使用将安装包拷贝至本机(在其他电脑上安装的sit…

java.lang.OutOfMemoryError- unable to create new native thread 问题排查

问题描述 最近连续两天大约凌晨3点,线上服务开始异常,出现OOM报错。且服务所在的物理机只能ping通,但是无法登录。报错信息如下: ERROR 04-12 03:01:43,930 [DefaultQuartzScheduler_Worker-3] JobRunShell[JobRunShell]:211 Jo…

交叉编译驱动和应用出现警告提示错误“cc1:all warnings being treated as errors”解决方法

最近新玩的rk3588的板子,编译驱动时出现了警告提示错误“cc1:all warnings being treated as errors”,导致编译失败,仔细看了一下,就是内部出现了一个警告,一个未使用的变量出现的警告,导致了驱动编译失败,但是如果这样其他驱动会不会也这样,然后就写了一个printk的de…

算法练习--链表相关

文章目录 合并两个有序链表删除排序链表中的重复元素 1删除排序链表中的重复元素 2环形链表1环形链表2相交链表反转链表 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入&…

怎么改ip地址 如何更改电脑ip地址

在网络世界中,IP地址是一个重要的标识,它被用于识别和定位设备在互联网中的位置。尽管大多数用户在日常生活中不需要更改IP地址,但在某些特定情况下,可能需要进行IP地址的更改。接下来,我们将介绍一些常见的方法来改变…

从零开始学习 Java:简单易懂的入门指南之面向对象(九)

面向对象进阶 前情回顾1.1 如何定义类1.2 如何通过类创建对象1.3 封装1.3.1 封装的步骤1.3.2 封装的步骤实现 1.4 构造方法1.4.1 构造方法的作用1.4.2 构造方法的格式1.4.3 构造方法的应用 1.5 this关键字的作用1.5.1 this关键字的作用1.5.2 this关键字的应用1.5.2.1 用于普通的…

后端开发8.品牌模块

概述 简介 效果图 数据库设计 DROP TABLE IF EXISTS `goods_brand`;CREATE TABLE `goods_brand` ( `goodsBrandId` int(11) NOT NULL AUTO_IN

基于jeecg-boot的nbcio-boot因升级mybatis-plus到3.5.3.1和JSQLParser 到4.6而引起的在线报表配置报错处理

nbcio-boot因为升级mybatis-plus到3.5.3.1和JSQLParser 到4.6,引起的在线报表配置报错。 导致主页显示不出任务东西。 sql语句如下: select DATE_FORMAT(c.days, %Y%m) x, count(num) y from (select DATE_FORMAT(b.DEPLOY_TIME_, %Y-%m-%d) AS days , …

vue2传值方式总结 (十一种方法)

一.父传子传递 (1)在父组件的子组件标签上绑定一个属性,挂载要传输的变量 (2)在子组件中通过props来接受数据,props可以是数组也可以是对象,接受的数据可以直接使用 props: [“属性 名”] prop…

golang 自定义exporter - 服务连接数 portConnCount_exporter 导出器

需求: 1、计算当前6379 、3306 服务的连接数 2、可prometheus 语法查询 下面代码可直接使用: 注: 1、windows 与linux的区分 第38行代码 localAddr : fields[1] //windows为fields[1] , linux为fields[3] 2、如需求 增加/修改/删除…

【山河送书第六期】:《码上行动:零基础学会Python编程( ChatGPT版)》参与活动,送书两本!!

《码上行动:零基础学会Python编程( ChatGPT版》 前言内容提要本书亮点购买链接参与方式往期赠书回顾: 前言 在过去的 5 年里,Python 已经 3 次获得 TIOBE 指数年度大奖,这得益于数据科学和人工智能领域的发展,使得 Python 变得异…

Openlayers实战:多数据分散聚合

在飞机、轮船等地图显示的应用中,很多时候会用到数据聚合,Openlayers中提供了Cluster这个API ,他作为souce的一部分,设定distance值,如果2个点的间距小于 distance 所设置的数时,就会以聚合的方式显示。从而解决了数据淤积显示的状态,非常实用。 效果图 源代码 /* * @…

【基础IO】动静态库 {动静态库的创建和使用;动态库的加载;默认优先使用动态链接;为什么要有库;动态链接的优缺点;静态链接的优缺点;一些有趣的库}

动静态库 一、静态库(.a) 1.1 如何创建静态库? 编写源文件与头文件。注意:库的源文件没有main函数! 将所有的源文件编译生成目标文件。(如果只提供.h和.o给用户,用户也可以成功编译运行。但这样的做法太过麻烦,且容易…

8个值得收藏的在线3D建模工具

如今,许多设计师、艺术家和建筑师尝试学习进行 3D 建模来表达他们的想法。 但 3D 建模并不总是看起来那样。 我们所有人都很难找到合适的工具,尤其是在学习阶段。 但不要害怕! 你可以学习仅使用浏览器进行建模。 有许多基于浏览器的 3D 建模…

Scala(第六章 面向对象)

文章目录 6.1 Scala包 6.1.1 包的命名6.1.2 包说明(包语句)6.1.3 包对象6.1.4 导包说明 6.2 类和对象 6.2.1 定义类6.2.2 属性 6.3 封装 6.3.1 访问权限6.3.2 方法6.3.3 创建对象6.3.4 构造器6.3.5 构造器参数 6.4 继承与多态6.5 抽象类 6.5.1 抽象属性和…

实例034 直接在窗体上绘图

实例说明 含有Graphics对象的控件都能够在其上进行绘图,很多软件就是通过Graphics对象来美化程序的主界面,因为窗体中含有Graphics对象,所以可以将窗体看作一个大画板,一个可以在上面绘图的特殊控件。本例设计了一个简单的绘图软…