from: http://blog.csdn.net/ccanan/article/details/6745207
HDR&ToneMapping
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上
- 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
- 这样就可以更加准确和真实的描绘一个场景
- 自动根据亮度矫正明暗:让我们晚上看东西也能比较清楚,一开灯眼睛要矫正一会回来
- 局部适应性:比较经典的图是:
- 曝 光率问题---解决:exposure adjustment。和照相时候曝光原理差不多,白天亮曝光就短一些,晚上曝光长一些,编程时候就是计算render target的平均亮度,然后矫正,这样沙漠的白天和丛林的夜晚都可以在游戏中的rgba8上有一个良好的体现。在hable的论文里,这个属于不同的场 景之间的处理问题范畴。
- 压缩的过程中不可避免的涉及到重新分配亮度值,怎么做来得到更好的尽可能不失真的画面这个解决方案就是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
tone mapping就是一个原始颜色向目标颜色映射的过程,不同的函数呈现一些不同的特点,这里列一些,看下对比:
ppt中有更多的一些对比,这里直接总结filmic tone mapping的好处就是:
- 向暗色过渡的更“脆”
- 高亮部分更柔和
- 在input color的match上也更接近linear
实现类似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); }
相关推荐
2. ToneMapping:这是一个目录,很可能包含了实现特定tone mapping算法的源代码或者应用程序。可能包括不同的算法,如Reinhard tone mapping、Durand tone mapping、Fattal tone mapping等,这些算法都有各自的优...
Tone Mapping是HDR技术的核心组成部分,它是一种将高动态范围的图像转换为适合标准显示设备的低动态范围(LDR)图像的过程。这个过程涉及到对图像亮度的重新映射,使得原本超出显示器能力范围的亮度信息得以适配显示...
在计算机图形学领域,"tonemapping"是一个关键的概念,用于处理高动态范围(HDR)图像,使其适应人类视觉系统对亮度的感知,并适合在低动态范围(LDR)显示设备上展示。在这个实验中,我们将深入理解并实践tone...
Tone Mapping是一种用于高动态范围(HDR)图像到低动态范围(LDR)图像转换的技术,使得图像在有限的显示范围内能够展现更丰富的明暗细节。 首先,我们需要理解OpenGL的基础。OpenGL是一个跨语言、跨平台的编程接口...
标题"L1L0_TM-CVPR2018-master_layerdecomposition_l1l0_tonemapping_"提及的是一项在图像处理领域的技术,主要涉及图像的分层分解、L0和L1范数的应用以及色调映射(Tone Mapping)。这项技术在CVPR 2018(计算机...
### 实时色调映射在高分辨率HDR图像中的应用 #### 概述 本文探讨了针对高分辨率HDR(High Dynamic Range)图像的实时色调映射技术。色调映射是一种将HDR图像转换为适合LDR(Low Dynamic Range)显示设备观看的过程...
色调映射(tone mapping)是一种在图像处理和视频捕捉领域中非常重要的技术,它可以用来优化图像的色彩和细节表现。色调映射允许图像在不同光照条件下的对比度和亮度得以增强,同时保持或提高图像的质量。在本书...
Tone Mapping(色调映射)是一种用于将高动态范围(High Dynamic Range, HDR)图像转换为适合显示设备(如显示器或打印机)低动态范围(Low Dynamic Range, LDR)的技术。这项技术在摄影、计算机图形学以及数字图像...
本文介绍了一种基于Retinex理论的自适应局部色调映射技术,主要针对高动态范围(HDR)图像的低照度图像恢复。Retinex理论是建立在人眼视觉系统能够适应广泛光照范围的基础上,它通过模拟人眼对光线强度的适应机制,...
为了实现上述优化,需要采用先进的算法,如色调映射曲线(tone mapping curves),保持色调信息的同时,对亮度进行适当的压缩。另外,算法可能还需考虑到图像的视觉效果,以及图像细节在不同亮度条件下的可感知性。 ...
在Unity开发中,色调映射(Tonemapping)是一个至关重要的环节,它处理原始高动态范围(HDR)的图像数据,将其转换为适合于标准显示器的低动态范围(LDR)显示。这个过程涉及到色彩校正、对比度调整以及亮度优化等多...
CUDA-HDR-Tone-mapping项目是一个利用CUDA技术进行高动态范围(HDR)图像处理的开源实现,主要关注亮度通道的调整和HDR色调映射。CUDA是NVIDIA公司开发的一种编程模型,它允许开发者利用GPU的强大并行计算能力来加速...
该开源代码在实现“Photographic Tone Reproduction for Digital Images”论文算法时有一处错误。论文本身有一个符号错误和一个参数设置不合理。这些我都在程序中做了修正。关于该论文的色调映射算法讲解可参见我的...
标题"S2H_imageprocessing_tonemapping_"暗示了这是一个关于图像处理和色调映射(Tone Mapping)的主题。在数字图像处理领域,色调映射是一种用于调整图像亮度和对比度的技术,尤其是在高动态范围(HDR)图像转换为低...
在讨论的内容中,涉及了色调映射(tonemapping)的概念和应用,特别是与高动态范围(HDR)图像处理相关的技术。色调映射是一种图像处理技术,用于将HDR图像(这种图像能表现超出普通图像显示范围的亮度)调整到较低...
综上所述,"c++rgb-hdr.cpp_hdr_HDR算法_datew3n_"项目专注于使用C++实现HDR图像处理的关键步骤,包括多帧曝光合成、图像校正、Radiance Map创建、tone mapping以及最终的图像融合。这个过程涉及到对图像处理理论的...
### 内容自适应逆色调映射(Content-Adaptive Inverse Tone Mapping) #### 摘要 逆色调映射作为一种关键技术,在将低动态范围(LDR)内容转化为具有高动态范围(HDR)效果显示方面扮演着重要角色。现有的逆色调映射算法...
程序是对Reinhard论文“Photographic Tone Reproduction for Digital Images”的实现,具体的讲解可参考我的博客https://blog.csdn.net/u014230360/article/details/108527016
在程序中提出了一种利用亮度直方图构造色调映射查找表(LUT)的色调映射算法。融合人类视觉系统(HVS)的特性,在构造直方图的同时,更加重视视觉可分辨度...使用memorial.hdr图像例子,图像高动态映射后细节表现完美。
在MATLAB工具箱中,HDR合成通常涉及图像对齐、曝光融合和tone mapping等步骤。通过对LDR图像的处理,可以得到保留更多亮度信息的HDR图像,从而实现更真实、更丰富的视觉效果。 5. ** Tone Mapping**: Tone ...