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等,这些算法都有各自的优...
在计算机图形学与摄影领域中,HDR技术及其相关算法Tone Mapping扮演着至关重要的角色。HDR,意为高动态范围渲染,其目的在于捕捉和呈现现实世界中极端亮度的细节,比如从深夜的黑暗到阳光下的闪耀。传统显示器的亮度...
在计算机图形学领域,"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 ...