1. 程式人生 > >【計算機視覺】HDR之tone mapping簡介

【計算機視覺】HDR之tone mapping簡介

tone Mapping原是攝影學中的一個術語,因為列印相片所能表現的亮度範圍不足以表現現實世界中的亮度域,而如果簡單的將真實世界的整個亮度域線性壓縮到照片所能表現的亮度域內,則會在明暗兩端同時丟失很多細節,這顯然不是所希望的效果,Tone Mapping就是為了克服這一情況而存在的,既然相片所能呈現的亮度域有限則我們可以根據所拍攝場景內的整體亮度通過光圈與曝光時間的長短來控制一個合適的亮度域,這樣既保證細節不丟失,也可以不使照片失真。人的眼睛也是相同的原理,這就是為什麼當我們從一個明亮的環境突然到一個黑暗的環境時,可以從什麼都看不見到慢慢可以適應周圍的亮度,所不同的是人眼是通過瞳孔來調節亮度域的。


而這個問題同樣存在在計算機圖形上,為了讓影象更真實的顯示在顯示器上,同樣需要Tone Mapping來輔助。
整個Tone Mapping的過程就是首先要根據當前的場景推算出場景的平均亮度,再根據這個平均亮度選取一個合適的亮度域,再將整個場景對映到這個亮度域得到正確的結果。其中最重要的幾個引數:
Middle grey:整個場景的平均灰度,關係到場景所應處在亮度域。
Key:場景的Key將決定整個場景的亮度傾向,傾向偏亮亦或是偏暗。
首先我們需要做的是計算出整個場景的平均亮度,有很多種計算平均亮度的方法,目前常用的的是使用log-average亮度來作為場景的平均亮度,通過下面的公式可以計算得到:

其中Lw(x,y)是畫素點x,y的亮度,N是場景內的畫素數,δ是一個很小的數用來應對畫素點純黑的情況。

上面的公式用來對映亮度域,α即是前面所講的Key值,用來控制場景的亮度傾向,一般來說,會使用幾個特定的值,0.18是一個適中的Key,0.36或者0.72相對偏亮,0.09甚至0.045則是偏暗。完成對映的場景為了滿足計算機能顯示的範圍還要將亮度範圍再對映到[0,1]區間,可以通過下面的公式簡單的得到[0,1]區間的亮度。

附上效果圖:

不過這樣得到的結果並不總是令人滿意的,所以一般擴充套件為如下面的公式,公式中的引數Lwhite用來控制場景中的曝光,凡是亮度超過Lwhite的畫素都會被置為純白。如果Lwhite的值非常大,則這個引數在公式中將不起任何作用,如果非常小則場景將變為幾乎全白。Ld即為我們所要的對映後的x,y畫素點的亮度值。

Tone Mapping一般作為HDR演算法中的一部分存在,在使用中會靈活很多,但基本的原理都是相同的。