Just My Life & My Work

最近在研究影像,尤其在HDR這個技術上,找到一篇被引用600次的論文:Gradient Domain High Dynamic Range Compression。看了之後覺得這篇論文相當有參考價值,概念十分容易理解且不難實做。

特別感謝台大的學姊已在報告內容中翻譯許多論文內容,在此依我所理解來優化描述內容。

(一)Introduction

當我們將真實場景顯示在螢幕上時,常常會遇到以下的問題:

這個場景是:在一個客廳裡面,面對玻璃門往外看一個被陽光照得非常光亮的中庭及穿過中庭的另一邊的走廊。我們用同一台相機以不同的曝光程度,把這個場景照下來,上面的這四張照片從左邊到右邊曝光時間分別從千分之一秒四分之一秒。每一張照片都可以補捉到其他張相片沒有的資訊,例如:從曝光時間最長的照片,可以很清楚的看到客廳裡一株小樹的綠葉,然而這個資訊在最左邊的相片裡,卻遺失掉了。但較左邊的影像卻可以很清楚地看到最右邊的影像裡看不到的走廊柱子,在最右邊的相片裡,應該出現柱子的地方已經被一片光亮取代了。然而,如果人置身於該場景,儘管玻璃門外及門內的亮度差異很大,人的眼睛可藉由瞳孔的放大縮小,經過調整而看到門內和門外所有東西,不遺失掉任何資訊。因此如何在不失去細節的前提下,將真實場景顯示在螢幕或影像上,將是一個困難的課題。

這邊paper裡,它所提到的解決方法,是先將影像轉成gradient domain,再從gradient domain來處理亮度的壓縮。觀察在HDR影像急遽改變的luminance,一定會有大幅度luminance gradients,它的方法是去操作衰減大幅度luminance gradients,因此它可保留local contrasts,而且快速又容易使用。

(二)Previous Work

過去有很多人用許多不同的方法解決這個問題,其中大概可以粗略地分成以下兩種類型:

  1. Global tone mappings (spatially invariant): also called TRCs (tone reproduction curves).
  2. Local tone operators (spatially variant): also called TROs (tone reproduction operators).

TRC的優點是它非常容易、簡單,執行效率非常高,一旦找到global mapping curve後,影像上的每一個pixel就可以用lookup table的方法來決定新的亮度值。

然而為了避免local luminance改變的逆轉,global mappings一定要是個increasing mapping function,如此,檔顯示設備的動態範圍較小於最初影像的動態範圍,mapping function將會很難保留所有影像中的local contrasts。

TROs是比TRCs較有彈性的作法。TRCs裡,所有的pixel都依照同一條 tone mapping curve來決定新的亮度值,但在TROs裡,每一個pixel要map到哪一個亮度值,會將它周圍的local spatial context納入考量,因此兩個原來亮度不一樣的pixels在處理後,新的亮度值有可能會一樣;或兩個原來亮度一樣的pixels在處理後,亮度值變得不一樣。這都是有可能的。這在mapping增加彈性應該讓它可能達成improved local contrast。

影像I (x,y)被視為這樣子的積:

 R(x,y)是reflectance,而L(x,y) 是luminance在每個點(x, y)。

在HDR影像中最大luminance variations來自illuminance function L,因為R通常被提及為場景的內部影像,而且不像是要創造高於10000:1的對比。因此分開影像IRL。縮小L來獲得新的illuminance function,而且再乘上可以達成dynamic range compression:

 這減少發亮區域和深度陰影的對比,留下清楚紋理和無失真反射的對比。然而,分開計算是個大問題,任何企圖想解決它一定要有一些假設,例如,homomorphic filtering假設L變動地十分緩慢、幾乎沒有大大的變動,但R的變化卻十分據烈。因此我們可以將它們取log後變成兩項相加,再用Fast Fourier Transform轉到frequency domain後,用high-pass filter取出變動較劇烈的R,用loss-pass filter取出變動較和緩的L,分別作exp。這樣就可以成功地將它們分離,以利於對兩者作不同所謂「halo」是說,較暗的亮度要變成較亮的亮度的邊界處,會先經由過暗的亮度和過亮的亮度,最後才會到要變成的高亮度。因此在較亮的燈光的周圍會先有一圈過亮的光環,以外再有一圈過暗的環,才變成背景較暗的亮度。我們由圖例可以看的出來。

(三)Gradient domain HDR compression
這個方法有個假設,人類對absolute luminances 不是很敏感,但是對local intensity或local contrast的改變率伴隨illuminance differences就比較敏感。亮度改變劇烈的地方,在gradient domain會伴隨著很大的gradient值。我們的方法是先標出gradient 值很大的地方,然後在不改變正負號的前提下,將它們的值壓縮。所使用的這個壓縮函數,必須是累進式的,對於較大的gradient值,我們對它壓縮的幅度要比縮壓較小的gradient值的幅度還要大。這樣的理由是,它可以藉由犧牲掉absolute luminances而保留住local contrast,以達到不會遺失掉很多細節的目的。

在這篇論文,計算是以luminances取logarithm,而不僅是luminances,這個原因在於log domain是:

  1. luminances取logarithm可以是個approximation來感知亮度。
  2. Gradients在log domain能對應在luminance domain的local contrasts ratios。

我們先用1D來解釋這個方法,再將之擴充到影像的2D domain。首先想像一個high dynamic range 1D function。我們對它取log,並稱之為H(x)。我們的目標是壓縮H有較大改變的地方,所以先對它作一次微分得到H’(x),然後再將它乘上一個壓縮函式 (CF):

 G(x)是compressed derivatives function而且跟最初的derivative H’(x)有著同樣的正負號。因為CF壓縮H(’x)值較大的幅度比壓縮H(’x)值較小的幅度還要大,所以對一個x而言,它的H(’x)值若比較大,相對應的CF值會比較小;相反的若H(’x)比較小,所要乘上的CF值會比較大。至於CF函數該怎麼得到,我們在將它擴充為2D函式時,會有更充分的說明。

我們現在可以重新建構減少動態範圍函式I藉由積分壓縮後的compressed derivatives:

 最後我們對I作exp,即可還原為luminance的單位。我們將整個過程畫成以下的圖,以利了解:

(a) An HDR scan line with dynamic range of 2415:1.
(b) H (x) = log(scan line).
(c) The derivatives H’(x).
(d) Attenuated derivatives G(x).
(e) Reconstructed signal I (x) as defined in Equation 1.
(f) An LDR scan line exp[ I(x) ]. The new dynamic range is 7.5:1.

注意,每一張圖為了顯示出細節,Y座標軸的單位大小均不一樣。但(c)、(d)兩張圖在Y座標軸所用的單位是一樣的,所以我們可以很清楚的看到在gradient domain上,壓縮前和壓縮後的不同。

為了將上述的觀念擴展到2D HDR functions,我們用gradients取代原來的一次微分。相同的,為了避免local contrast變成反向的,我們只壓縮gradient value的值,而維持其正負號不變。因此我們可以把壓縮每一個位置的gradient值的壓縮函式寫成以下的2D function:

不像1D,我們不能僅獲得compressed dynamic range image藉由積分G,因為它沒有必要是可積分的,換句話說,有可能存在I使得,所以我們使用直接且有效率的方法:對函式I有著gradient最靠近G,搜尋所有2D functions的空間。square error function如下,且I應該讓積分最小化:

根據Ariational Principle和Euler-Lagrange equation,我們可以得到Poisson equation:

這是linear partial differential equation。

(四)Gradient attenuation function

我們在這要說明對每一個pixel的壓縮函式 (CF)要如何取得?我們知道,它必須是累進式的,即gradient值愈大,壓縮幅度會愈大。

首先我們先解釋何謂影像金字塔。這是個在不同resolutions和hierarchical表示的影像集合,金字塔的基底是input image,從基底往上,我們近似每個層級藉由使用smoothing filter,然後down sample平滑結果以2為因子到下個層級。因此每個金字塔層級的寬和高是前一個層級的一半。

如果所用的smoothing filter是low pass Gaussian filter,我們稱此金字塔為Gaussian pyramid。在金字塔頂端解析度最小的影像,我們稱之為coarse scale of the image,而在金字塔的基座,解析度最大的影像,我們稱之為the finest scale of the image,它同是也是the full resolution of the image.

Gradient較大的值是發生在影像上有edge產生的地方,而在影像金字塔中,每一個scales都有可能會有edges產生。為了標出在所有不同scales的影像上的每一條edges,我們用一個multi-resolution edge detection scheme的方法。當我們在不同的scales找到edges時,不能直接在該scales上對其gradients值作壓縮,這樣會導致「halo」的情況產生,即會產生不必要的光環或暗環。

我們將用來壓縮左圖的gradient attenuation factors以灰階圖表示在右圖上。從圖中我們可以看到,左圖裡有edges的地方在右圖會對應到較黑的線。這是因為edges發生處就是gradient值較大的地方,它必須乘上較小的attenuation function (AF)值,以達到壓縮幅度較大的目的。因為AF值較小,所以在灰階圖上也相對的比較黑;相反的,左圖非edge發生的地方對應到右圖,因為壓縮幅度較小,要乘上的AF值比較大,所以在右圖看起來會是白的。

Right: The gradient attenuation function used to compress the left image (compressed result).

(六)Result

streetlight on a foggy night:動態範圍超過100,000:1

Stanford Memorial Church:動態範圍超過250,000:1

中間是此方法得出的影像,明顯比左Ward Larson(1997)Tumblin(1999)兩者好!超亮和超暗的細節保留得比較好,亮度變化平滑均勻。左邊影像明顯有曝光過度和曝光不足,而右邊影像有顆粒狀材質感且不像真實相片。

優點:

使用此方法可以使原本影像亮部和暗部的部分細節更為清楚,比提昇global對比度還要好,是提升local的對比度,計算時間也比以前的方法更為快速。

目前HDR的顯示硬體還很昂貴,如果可以找到好的演算方法來處理影像,就能使LDR的顯示器發揮用處,如此降低花費也將更容易普及化。

應用:

最簡單的應用,就是直接應用在相機上。或是有些汽車現在裝有夜視系統,這套監視系統不一定只擁有夜視功能,也許可以在陽光太強的地方或是隧道裡面提供駕駛者更清楚得開車視線。

或說,已經在網路上找到許多HDR理論教學(非軟體應用教學),幾乎都是以這篇論文Gradient Domain High Dynamic Range Compression當作模範,說真的~看完之後,就算還無法實做,也能瞭解要如何對HDR做壓縮讓原本曝光過度或曝光不足的相片恢復應有的細節,非常值得一讀的論文!

Comments on: "[paper] Gradient Domain High Dynamic Range Compression" (3)

  1. […] Gradient Domain High Dynamic Range Compression […]

  2. […] 修改影像的導數來達成動態範圍重現。 Paper: Gradient domain HDR compression […]

  3. […] 上週研究了這篇論文,但一直忘了給它整理好,所以今日趁著內容還沒淡忘之前,把它給記錄下來。Fast Bilateral Filtering for the Display of High-Dynamic-Range Images這篇論文在SIGGRAPH 2002發表,目前有623引用次數,是著名HDR論文三篇中其中一篇,另外兩篇如我之前已研讀過:Photographic Tone Reproduction for Digital Images和Gradient Domain High Dynamic Range Compression。 […]

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: