HDR Tone Mapping
在游戲引擎渲染管線中,我們對于R、G、B通道顏色信息的數(shù)值范圍通常設置在[0,1]之間(或者是[0,255])。其中,0代表沒有光亮度,1代表顯示器能夠顯示的最大光亮度。這個表示方式雖然直接易懂,但它并不能反映真實世界中光亮度的情況。在真實世界的光照環(huán)境中,光亮強度有時候會超過顯示器能夠顯示的最大亮度。而且,人眼在觀察真實世界的物體時,會根據(jù)光照強度進行自我調節(jié)。因此,更加真實的渲染方式是讓顏色值超過1。這種光照計算方式或環(huán)境光照圖就是我們常常在游戲引擎中看到的HDR(High Dynamic Range)光照或者HDR環(huán)境貼圖。但是,采用HDR渲染出來的亮度值會超過顯示器能夠顯示最大值。此時,我們需要將光照結果從HDR轉換為顯示器能夠正常顯示的LDR。這一過程我們通常稱之為Tone Mapping。下圖是Unity引擎對采用HDR渲染的圖片使用了Tone Mapping和沒有使用Tone Mapping的對比結果:
其中,上圖是沒有使用Tone Mapping的結果,下圖是使用了Tone Mapping的結果。可以看到,在沒有使用Tone Mapping的渲染結果中,有很大一部分像素的光亮度是超過了顯示器能夠顯示的最大值。在視覺上,這些地方變得過曝了。而在使用了Tone Mapping的渲染結果中,像素光亮度變得正常,視覺上也更加真實。
今天我們要介紹的這一篇論文是于2002年發(fā)表在Siggraph會議上的論文“Photographic Tone Reproduction for Digital Images”。這篇論文提出了一種新的Tone Mapping的方法,使得經(jīng)過該方法轉換的結果從視覺上看起來更加接近真實世界的物體。首先,我們來看看這篇論文的結果圖,如下圖所示:
其中,左圖是采用線性縮放的結果,右圖是采用論文中的算法進行轉換的結果。可以看到,在簡單的線性縮放結果中,許多細節(jié)部分丟失了;而論文算法轉換的結果則很好地保留了圖像的細節(jié)部分。接下來,我們將對論文中的算法部分做詳細介紹。
一、初始光亮度映射
首先,文章作者對整個圖像做了一個光亮度的映射,其作用類似于設置相機的曝光。這一操作實際就是對每一個像素做固定縮放。根據(jù)前人對Tone Mapping的研究結論,論文作者認為光亮度的log平均值能夠反映圖片中像素光亮度的特征。因此,作者用該值對每個像素作縮放。
若用Lω(x,y)表示像素(x,y)的光亮度,則log平均值可表示為:
其中,N 表示像素個數(shù),δ 是一個用于避免奇異值的常數(shù)。縮放后的光亮度 L(x,y) 可用如下公式表示:
其中,α 是一個縮放參數(shù),被稱為Key Value,不同的 α 值對應了不同的縮放程度,如下圖所示:
但是,僅僅做簡單線性縮放是不夠的。對于光亮度變化不是很大的圖片,這種方法可以將像素的光亮度很好地壓縮到一定范圍,但是對于大多數(shù)圖片,絕大部分像素光亮度是在某一個范圍之內,而少數(shù)高亮的像素比平均值高太多,很容易產(chǎn)生過曝,如:光源、高光反射等。因此,通常在經(jīng)過線性縮放之后,還需要利用非線性的算子對圖像進行處理。文中作者列舉了一種常用的算子:
其中,Ld(x,y)表示經(jīng)過非線性算子處理后的像素,Lwhite表示圖片中被映射到白色亮度的像素中的最小值。由于是非線性的,對于亮度高的像素縮放更大,因此該公式能夠防止線性縮放中無法處理的過曝情況。但是,這種簡單的算子通常容易導致細節(jié)丟失。作者觀察到,在傳統(tǒng)打印技術中,為了提高打印結果的質量,通常會采用一種dodying-and-burning的方法。該方法的原理是根據(jù)打印內容的不同,在不同區(qū)域減少光亮度(dodying)或者增加光亮度(burning)。論文作者通過實驗,對比了簡單非線性映射以及dodying-and-burning處理后的結果,如下圖所示:
其中,上排圖片中太陽被樹枝遮擋住,因此不包含高亮的區(qū)域,下面的圖片則包含高光反射。左邊一列圖片同樣是采用簡單非線性算子(Simple Operator)縮放,經(jīng)過觀察可以發(fā)現(xiàn),下圖中的書中文字完全被高光覆蓋。由此可見,簡單的非線性算子縮放會丟失很多細節(jié)。
論文作者在經(jīng)過觀察和測試之后,基于dodging-and-burning方法,提出了一種自適應的dodging-and-burning方法,下面我們將詳細說明。
二、自適應dodging-and-burning
自適應dodging-and-burning的特點是,找出對比度大的邊緣包圍的區(qū)域,然后對該區(qū)域進行處理。因此,作者提出利用高斯核卷積的方法來找出這些區(qū)域。對于不同的縮放系數(shù) s,在不同的像素點(x,y),計算高斯核函數(shù) Ri(x,y,s)與圖像 L(x,y)的卷積。則卷積結果 Vi(x,y,s)可表示為:
其中,Ri(x,y,s)可表示為:
然后,論文作者定義了一個誤差函數(shù),計算不同 αi 參數(shù)的卷積結果之差,來衡量圖像局部像素的光亮度分布。則誤差函數(shù) V 可以表示為:
通過對不同的縮放參數(shù) s 進行計算,找出符合如下公式的參數(shù):
其中,? 是一個閾值,sm 是對每個像素計算出的縮放參數(shù)。當我們獲得每一個像素的縮放參數(shù)后,對每一個像素進行不同的縮放計算:
從而獲得最終的Tone Mapping結果。下圖顯示了計算過程:
其中,左圖顯示了計算縮放參數(shù)的過程,Center表示內圈高斯計算的范圍,Surround表示外圈高斯計算的范圍。右圖顯示了用不同縮放參數(shù)進行縮放后的結果。通過觀察可以發(fā)下,當縮放太小時無法有效地提取出圖像細節(jié),而縮放太大時會出現(xiàn)黑色的Artifacts。
三、實驗對比
論文作者將dodging-and-burning計算結果與前人的結果進行了對比實驗。如下圖所示:
其中,New operator表示了論文的實現(xiàn)結果。
四、總結
論文作者提出了一種新的Tone Mapping的算法,它通過對dodging-and-burning打印技術的觀察和分析,對于不同的區(qū)域采用不同的縮放系數(shù),提出了自適應dodging-and-burning的方法,能夠將高動態(tài)圖轉換成低動態(tài)圖時防止高亮部分過曝,并且能達到在亮部和暗部都能保持細節(jié)的目的。
五、論文信息
作者信息:
Erik Reinhard,著名計算機圖形學學者,目前在Technicolor Research and Innovation做研究工作;
Michael Stark,計算機圖形學研究者,曾就讀于美國猶他大學;
Peter Shirley,著名計算機圖形學大牛,真實感渲染專家,猶他大學客座教授,NVidia首席科學家;
James Ferwerda,著名計算機圖形學學者,羅徹斯特理工學院副教授。
論文鏈接:
http://www.cmap.polytechnique.fr/~peyre/cours/x2005signal/hdr_photographic.pdf
總結
以上是生活随笔為你收集整理的HDR Tone Mapping的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux IPC实践(10) --Po
- 下一篇: 我家的漫路超市——怎么开淘宝网店