HDR&ToneMapping

【ISP图像处理】Tone Mapping基础知识及相关算法(附代码) 一般LDR(Low Dynamic Range)图像的颜色显示范围通常只有8位,即每个颜色通道的颜色数值有2^8=256个等级。这个量级用于描述现实场景中的景象往往十分有限,以LDR储存图像往往需要对颜色进行压缩。为了更加真实还原真实场景的颜色,HDR图像应运而生,一般通道位数超过8位,便可称为HDR,常见有12位和16位。虽然存储图像的信息量提升了,但是现在使用的大部分显示设备宽动态范围只有100:1甚至更低。为了使得HDR图像能够在低动态范围的显示设备上显示,Tone Mapping技术便十分重要。 阅读详情

HDR

high dynamic range.

很多程序朋友(包括我)都是从dxsdk上看到和学习这个概念,开始学习的更多的是一整套hdr sample的流程:

  • 在float render target上去render scene
    • 后面很多console上的游戏使用rgbm等编码方式来节省内存和bandwidth
  • 通过down sample去计算亮度
    • treyarch是cook到场景数据里面,省了这个down sample的过程
  • 根据亮度对场景做一个矫正(tone mapping)最后输出到一个rgb8的render target上
但是随着游戏业的画面水准开始向电影水准发展,就需要我们有更好的理解HDR,来进一步把游戏像电影画质推进,这也是近几年的GDC和siggraph上都有一线studio在推HDR相关的技术,比如naughty dog10年的filmic tone mapping,11年crytek在siggraph里面提到的physically based hdr等。
首先看一下概念:
  • dynamic range:reinhard的<tone mapping>论文中定义:一个场景中最高亮度与最低亮度的比是dynamic range。
  • low dynamic range : 之所以出现这种情况是图像存储介质(打印纸,照片,电脑屏幕等)精度有限造成的,导致在range上没法完全记录一个场景的亮度信息,只能记录有限的一部分,比如游戏里常见的在rgba8上渲染,每个channel大于1的部分就被截取到1了。
  • high dynamic range : 准确讲是high dynamic range imaging,是指一种图像技术,它能让图像表示一个比原有技术(之前的LowDynamicRange)更大(greater)的dynamic range
    • 这样就可以更加准确和真实的描绘一个场景
进一步说,hdr的存在在于图像存储与表达介质的精度有限,这也是为何游戏引擎大佬在提的都是CG和电影画质,而不是和现实一样的:因为存储介质在这里摆着呢,没法和现实一样,cg是上限。
实际应用中,我们也看到了,hdr除了在range上发力,在精度上也可以更好,比如描绘发暗的场景,可以把亮度矫正到可以充分显示暗部细节。
                                                                                                                                                                                                                   
ToneMapping&ExposureAdjustment
这里除了数学上正确的亮度计算以外,要考虑到人眼视网膜的特点,比如之前的gamma就是一个根据视网膜特点,重新分配亮度信息,来让人眼在有限的显示精度下获得最大的信息量。视网膜有两个典型特点,这里通过tone mapping和exposure adjustment来解决:
  • 自动根据亮度矫正明暗:让我们晚上看东西也能比较清楚,一开灯眼睛要矫正一会回来
  • 局部适应性:比较经典的图是:
这里我们遇到两个问题,各用两个方案解决:
  • 曝光率问题---解决:exposure adjustment。和照相时候曝光原理差不多,白天亮曝光就短一些,晚上曝光长一些,编程时候就是计算render target的平均亮度,然后矫正,这样沙漠的白天和丛林的夜晚都可以在游戏中的rgba8上有一个良好的体现。在hable的论文里,这个属于不同的场景之间的处理问题范畴。
  • 压缩的过程中不可避免的涉及到重新分配亮度值,怎么做来得到更好的尽可能不失真的画面这个解决方案就是tone mapping
实际中也有把这个exposure adjustment并到tone mapping中去,其实还是分开比较好,因为这些概念是从摄像技术中来的,曝光就是曝光,tone mapping就是tone mapping。

                                                                                                                                                                                                                   

ReinhardToneMapping

tone mapping方面比较著名的reinhard哥:

reinhard主页

http://www.cs.ucf.edu/~reinhard/cdrom/

paper link:

http://www.cs.ucf.edu/~reinhard/cdrom/tonemap.pdf

tone mapping干什么的?

dxsdk里面也有说,本来是摄影中提出的概念,解决怎么把场景中范围巨大的亮度值放到范围有限的存储空间中来(照片,打印机。。。),达到一个让人喜欢的结果。

这里面一点是“让人喜欢的结果”,它是一个含有主观意味的东西,没有一个绝对的标准,也没有说什么是绝对的对和错,根据游戏类型和开发者,玩家口味,大可选择自己喜欢的结果,tonemapping是达到这一结果的方法而已。

tonemapping相关的研究是从摄影技术中发展过来的,只不过digital imaging有比摄影洗相片更好的一个优势,可以进一步发展:

首先明确和定义一些概念:

  • zone:存储空间的亮度阶这么一个概念,比如print只有11个zone
  • middle grey:中间的亮度
  • dynamic range:指场景中最高亮度与最低亮度的比值
    • 这是一个最学术派的定义,具体上摄像师一般会追求细节还可以明辨的range
  • key:描述整个场景亮度的数值
  • dodging and burning:把高亮度的东西亮度降低为dodging,把低亮度的部分加亮为burning
luminance mapping
首先是把场景亮度map到image里,这一步是luminance mapping:
luminance计算:
这个计算使用了log。
step 1: simplest
result = x/(1+x); 最简单的一个情况,就把任意大的亮度encode到0到1之间。
虽然效果不那么好,但这也算一个luminance mapping。
step2:more control
L(white)定义的是在画面上表示纯白的亮度。
dodging and burning
一般来讲像dxsdk里面做的都是全屏统一的一个量度矫正,这个也是可以的,但是reinhard这里面说有时候这样并不太好,比如整个场景很亮,里面一部分很暗的情况(比如亮背景下的一个树),全屏统一做矫正(也就是dodging and burning),效果就不好。
这时可能在一个较小的区域来进行dodging and burning可以进一步提升local的对比度,可以达到某些情况下的“令人喜欢”。
这里的基本思路就是在一个scale内去搜集亮度等信息,来做进一步计算,operator也很多。
基本上知道这里已经够了。
                                                                                                                                                                                                                   
FilmicToneMapping
gdc10上当时在naughty dog工作的hable的presentation:
http://cmpmedia.vo.llnwd.net/o1/vault/gdc10/slides/Hable_John_Uncharted2_HDRLighting.pptx
后来他又在自己blog上说了更多的细节:(甚至说更重要,ppt上的内容但看的话会有很多不解的地方)

tone mapping就是一个原始颜色向目标颜色映射的过程,不同的函数呈现一些不同的特点,这里列一些,看下对比:

ppt中有更多的一些对比,这里直接总结filmic tone mapping的好处就是:

  • 向暗色过渡的更“脆”
  • 高亮部分更柔和
  • 在input color的match上也更接近linear
最后简单讲,hable把cg工业中的这个operator拿过来用就是因为在实际应用中这个看起来更棒。
这个也是很多电影在用的operator,它的mapping曲线这样的:
实现类似filmic tone mapping的mapping的时候一般是把映射关系放到texture里,然后sample texture,不过有牛人把mapping搞到一个公式里了,hable还加了参数可以让美术调:
A = Shoulder Strength
B = Linear Strength
C = Linear Angle
D = Toe Strength
E = Toe Numerator
F = Toe Denominator
Note: E/F = Toe Angle
LinearWhite = Linear White Point Value
F(x) = ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F)) - E/F;
FinalColor = F(LinearColor)/F(LinearWhite)‏
在具体的代码看hable的blog更好了:
float A = 0.15;
float B = 0.50;
float C = 0.10;
float D = 0.20;
float E = 0.02;
float F = 0.30;
float W = 11.2;

float3 Uncharted2Tonemap(float3 x)
{
   return ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F;
}

float4 ps_main( float2 texCoord  : TEXCOORD0 ) : COLOR
{
   float3 texColor = tex2D(Texture0, texCoord );
   texColor *= 16;  // Hardcoded Exposure Adjustment

   float ExposureBias = 2.0f;
   float3 curr = Uncharted2Tonemap(ExposureBias*texColor);

   float3 whiteScale = 1.0f/Uncharted2Tonemap(W);
   float3 color = curr*whiteScale;

   float3 retColor = pow(color,1/2.2);
   return float4(retColor,1);
}





【图像处理基石】什么是tone mapping? Tone mapping(色调映射)是一种用于将高动态范围(HDR)图像的颜色值映射到低动态范围(LDR)的技术,目的是使图像能够在有限动态范围的显示设备(如屏幕、打印机等)上呈现,同时尽可能保留视觉细节和自然观感。动态范围压缩现实世界的亮度范围(HDR)远超普通显示器或相纸的显示能力。例如,人眼可感知的亮度范围可达10^14:1,而普通LCD显示器仅为约1000:1。Tone mapping通过算法压缩HDR数据,使其适应设备的显示限制。视觉效果优化。 阅读详情

相关推荐

局部色调映射(Local Tone Mapping)

重建视觉外观是色调映射的终极目标。色调映射算法在降低高动态图像(HDR)范围的同时着力保护捕捉到的原始图像的外观。色调映射算子分两种策略,一种是全局的,另一种是局部的。 1. 全局映射算子 每一个像素点将会根据它的全图特征和亮度信息进行映射,不管其空间位置几何。全局算子一个比较典型的例子就是色调曲线。全局色调映射在处理12位(12-bit)深度的图像的时候是完全OK的,当图像的动态范围特别高的时候,那就不行了。这是因为所有的像素点都采取同一种方式进行处理,根本就没有管它是在较亮区域还是较暗区域。这样的话,.

程序员深度学习 7205

图形图像处理算法(2) ---- ToneMapping 技术

视频捕捉设备生成的图形一般是正比于光场景的光辐射强度的,即响应符合线性关系,尤其是当前主流的 CMOS Image sensor(CIS),线性度好到可以直接对入射的光子数量进行计数, CIS的线性特点可以使人们很方便对视频捕捉设备捕捉的图像(主要是亮度域)进行处理,从而模拟人类的视觉行为,是设备输出的图像看起来更加自然,这个过程就叫做。,因此相同的输入像素值会被确定的映射到一个相同的输出像素值。上面的公式用来映射亮度域,a 就是前面讲的 key 值,用来控制场景的亮度倾向,一般来说,会有几个特定值,

小猪佩奇的博客 8173

视频HDR -> LDR问题(Tone Mapping)综述

笔者按:最近开始作视频HDR的相关工作,对相关内容都不太了解,从综述文章开始阅读。本文主要记录文章 《A comparative review of tone-mapping algorithms for high dynamic range video》的阅读记录。Review文章不会讲很具体的原理,只是给出一些启发式的公式,作为这个问题的入门。 这篇文章的展开逻辑是先笼统地讲讲HDR,然后图像HDR,然后视频HDR,一直到第六章才会从原理上讲一些TM算法的详细原理。想看具体的算法原理的同学也可以直接看

q274488181的博客 4086

[ZZ] HDR&ToneMapping

http://blog.youkuaiyun.com/toughbro/article/details/6745207 float游戏存储照片blogimage HDR high dynamic range. 很多程序朋友(包括我)都是从dxsdk上看到和学习这个概念,开始学习的更多的是一整套hdr sample的流程: 在float render target上去re...

weixin_34355559的博客 361

5分钟理解相机ISP(图像信号处理)

目录 引言 Sensor输出的原始数据和人类预期的图像有巨大差异 Sensor的不完美以及ISP处理的原理 总结,如何才能做一个能商用有竞争力的ISP 引言 凡是和图像领域工作的人,都会经常听到ISP(Image Signal Process,图像信号处理),知道ISP对图像质量非常重要。比如华为和小米竞争手机拍照和录像效果,主要的竞争领域就是ISP;做AI(Artificial In...

brandon2015的博客 3万+

Tone Mapping Correction

上一篇说了 Gamma 矫正的概念,而色调映射的本质理解和 Gamma 有相似之处,所以就顺着思路说到色调映射的概念。色调映射(Tone mapping)用一句话来总结就是用于在显示设备上面更好的呈现出 HDR 的图像效果,包括亮度以及色彩的主观感觉上的增强,最直观的影响就是会造成色调和对比度的变化,从目的上来讲,Tone mapping 和 Gamma 的之所以诞生最开始的作用都是用来在 LDR 设备上面显示 HDR 图像的。

YellowMax 2699

Unity自定义后处理——Tonemapping色调映射

继续介绍屏幕后处理,这一期介绍一下ToneMapping色调映射

阿赵的博客 3561

认知网络分析实战:用Python复现课堂对话研究(含LSA代码)

本文通过Python实战,详细演示了如何运用认知网络分析(ENA)和滞后序列分析(LSA)两种方法,对课堂对话数据进行深度挖掘。文章提供了从数据清洗、行为编码到网络构建、序列统计及可视化的完整代码流程,帮助教育研究者和数据分析师量化分析对话中的认知结构与动态互动模式,从而获得超越文本表面的研究洞见。

weixin_28559803的博客 155

Tone mapping

转自KlayGE游戏引擎Reinhard早期的普遍做法是一篇叫做Photographic Tone Reproduction for Digital Images的论文,大家就用作者的名字称它为Reinhard tone mapping。这是个经验公式,把HDR到LDR的变换简单的描述了出来。123456float3 ReinhardToneMapping(float3 color, float ...

探索之眼——无尽 8633

SquareLine Studio汉化版安装激活全攻略:LVGL嵌入式UI设计从入门到出代码

嵌入式GUI开发中,LVGL作为轻量级开源图形库,广泛应用于STM32、ESP32等MCU平台。可视化设计器通过拖拽生成LVGL代码,大幅提升UI开发效率。SquareLine Studio正是这类工具的代表,支持界面设计、事件绑定与代码导出。其安装、汉化与激活是初学者常见门槛,尤其涉及LVGL版本匹配、字体配置及FreeRTOS移植等关键环节。本文围绕汉化版安装、一个月免费激活码使用及最小可用流程展开,帮助开发者快速上手LVGL界面设计,规避常见环境与集成问题。

weixin_29189987的博客 424

潜行游戏设计:核心机制与关卡设计解析

潜行游戏作为动作游戏的重要分支,通过视觉遮蔽、声音传播和AI行为树等复杂系统,为玩家提供独特的策略体验。视觉隐蔽系统采用视野锥和光照值的双重判定,声学传播模型模拟距离衰减和材质穿透,而敌人AI行为树则包含巡逻、警戒和团队协作等状态节点。这些技术不仅提升了游戏的真实感和挑战性,还在《合金装备》《刺客信条》等经典作品中得到广泛应用。潜行游戏的关卡设计强调多路径拓扑结构和环境叙事元素,通过沙漏模型和动态难度调节,平衡自由度和开发成本。未来,基于ML的适应性AI和物理模拟的隐蔽系统将成为创新方向。

weixin_42497762的博客 180

转载之色调映射

一、概述         虽然HDR 图像有较大的动态范围,能更细致地反映真实场景,但他的缺点也很明显。一是同尺寸的数据比低动态范围图像大,需要更大的存储空间与传输带宽。二是难以输出,目前大多数显示器、打印机等图形输出设备的动态范围要比普通的高动态范围图像小得多。。因此,色调映射技术在这样的背景下,就显得尤为重要。HDR 图像处理的一...

a1的博客 4485

Ansys Maxwell磁场仿真入门:无线传能线圈自感与互感计算全流程

本文详细介绍了使用Ansys Maxwell进行无线充电线圈磁场仿真的全流程,包括模型建立、求解器设置、电感参数提取及优化策略。通过实战案例,帮助工程师掌握线圈自感与互感计算技巧,提升无线充电系统设计效率与精度。重点解析了Maxwell在磁场仿真中的关键应用,适用于电磁场仿真初学者和进阶用户。

weixin_29047545的博客 440

HDR&Filmic Tonemapping Operators

博主在unity5上的渲染结果 但是随着游戏业的画面水准开始向电影水准发展,就需要我们有更好的理解HDR,来进一步把游戏像电影画质推进,这也是近几年的GDC和siggraph上都有一线studio在推HDR相关的技术,比如naughty dog10年的filmic tone mapping,11年crytek在siggraph里面提到的physically based hdr等。

wolf96的专栏 3463

PaddleOCR多进程GPU推理实战:200万图片高效处理方案

本文详细介绍了PaddleOCR多进程GPU推理在高效处理200万张图片OCR任务中的实战方案。通过优化GPU利用率、多进程并发和关键参数调优,实现了从单进程3000张/小时到8进程3万张/小时的性能飞跃,为大规模OCR处理提供了可靠解决方案。

prometheus9mon的博客 261

BurpSuite实战:5分钟搞定Pikachu靶场表单爆破(附最新字典配置技巧)

本文通过Pikachu靶场实战,详细演示了如何使用BurpSuite的Intruder模块对Web登录表单进行暴力破解。从代理配置、请求捕获、集束炸弹模式设置,到载荷配置与结果分析,提供了完整的操作流程。文中还分享了2024年有效的字典获取与优化技巧,帮助安全测试人员快速定位弱口令漏洞。

weixin_29327977的博客 601

HDR图片以及色调映射(ToneMapping)

高动态范围(High-Dynamic Range,简称HDR),相应的,LDR(Low-Dynamic Range),也就是我们常见的8bit存储方式的图片.之前都是在介绍视频方面.但是在高动态图片(HDRI)方面也有一些少量应用, 目前常用的存储格式有三种:OpenEXR、RadianceRGBE、FloatTIFF. OpenEXR OpenEXR是由工业光魔(Industrial Light & Magic)开发的一种HDR标准。OpenEXR文件的扩展名为.exr,常...

qq26983255的博客 2万+

三相SST固态变压器详细设计案例

本案例针对400kVA、30kHz三相固态变压器(SST)开展详细设计,核心采用输入串联输出并联(ISOP)拓扑架构(模块化多电平矩阵变换器M3C简化版),重点完成高频变压器的参数计算、绕组设计、损耗分析及液冷温升验证,同时覆盖系统级架构设计、半导体损耗估算及整机效率优化,全流程基于当前电力电子技术可行性展开。

qq_32103755的博客 3304

Tone Mapping(色调映射) 认识

转自:https://www.cnblogs.com/cjhd/p/7530440.html Tone Mapping(色调映射) 认识 目录 【背景 - 高动态图像】 【起源】 【定义】 【举个例子】 【研究分类】 详细 1. 【背景 - 高动态图像】 图像的动态范围: 图像的 Max(亮度值) / Min(亮度值) 高动态图像 : 动态范围大的图像 高动态 VS 普通 : 高动态图像(位数 > 8位) 普通灰度图像(位数 = 8位 一般情况)...

梁桥江的专栏 6027

华为OD面试八股文嵌入式C语言基础问题及答案(一)

本文总结了C语言编程中的10个关键知识点:1.宏定义MIN的实现方法;2.嵌入式无限循环的两种写法;3.变量a的8种不同定义方式;4.static关键字的三种作用;5.const关键字的含义和使用场景;6.volatile关键字的含义及三个应用实例;7.变量存储位置(栈区、静态区、堆区);8.32位系统指针位数;9.局部与全局变量重名规则;10.引用与指针的三点区别。这些内容涵盖了宏定义、变量声明、存储类别、指针等C语言核心概念,对嵌入式开发和系统编程具有重要参考价值。

m0_50382756的博客 160

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Learn OpenGL 笔记6.7 HDR(高动态范围)

默认情况下,亮度和颜色值在存储到帧缓冲区时被限制在 0.0 和 1.0 之间。 这个起初看似无害的声明让我们总是在这个范围内的某个地方指定光线和颜色值,试图让它们适应场景。 这工作正常并给出了不错的结果,但是如果我们走在一个非常明亮的区域,有多个明亮的光源,总和超过 1.0 会发生什么? 亮度或颜色总和超过 1.0 的所有片段都会被限制为 1.0,这看起来不太好: 由于大量片段的颜色值被限制为 1.0,因此每个明亮片段在大区域内都具有完全相同的白色值,从而丢失了大量细节并使其看起来很假。 这个问

u013617851的博客 2874

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Tone Mapping

Tone Mapping原是摄影学中的一个术语,因为打印相片所能表现的亮度范围不足以表现现实世界中的亮度域,而如果简单的将真实世界的整个亮度域线性压缩到照片所能表现的亮度域内,则会在明暗两端同时丢失很多细节,这显然不是所希望的效果,Tone Mapping就是为了克服这一情况而存在的,既然相片所能呈现的亮度域有限则我们可以根据所拍摄场景内的整体亮度通过光圈与曝光时间的长短来控制一个合适的亮度域,这...

weixin_33691817的博客 649

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LDR和HDR

一、LDR和HDR的基本概念1.HDR 、LDR、动态范围、ToneMapping的基本概念 Dynamic Range(动态范围)=最高亮度/最低亮度 HDR= High Dynamic Range LDR= Low Dynamic Range ToneMapping:将超高的动态范围转换到我们日常显示的屏幕上的低动态范围的过程 一些小芝士: 因为不同的厂家生产的屏幕亮度(物理)实际上是不统一的,那么我们在说LDR时,它是一个0到1范围的值,对应到不同的屏幕上就是匹配当前屏幕的最低亮度(0).

Kaitiren的专栏 5654
上一篇: misc on bitfield
下一篇: 固态硬盘
安柏霖
安柏霖 领域专家: 学术研究与理论基础技术领域 领域专家: 学术研究与理论基础技术领域
博客等级 码龄20年 1788粉丝 891原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值