台灣大學 數位視覺效果 Project 1 High Dynamic Range Imaging

R03631012 黃揚文 R03631014 徐嘉君

雖然HDR的照片應為相機在同樣地點、情況下拍攝多組曝光時間不同的照片,但因為仍會有手震和快門造成的些微震動,所以藉由Alignment可以將這些些微的震動經由稍微移動照片來消除。本專題採用的為上課介紹的MTB ( Median Threshold Bitmap ) 作校準,本演算法利用影像金字塔的方式(每層圖片都為上一層的四倍)從最小的開始比對,在九宮格內做移動如下圖所示,累計個方向的誤差選擇最小的方向移動之。相較於 尋找Gradient 的作法,較不容易受到不同曝光時間所影像edge的截取。

使用相機

本專題使用的相機為Nikon D3200,鏡頭為kit鏡 (AF-S NIKKOR 18-55mm 1:3.5-5.6G)

開發環境

  1. Visual Studio 2013 Pro
  2. Qt 5.4
  3. OpenCV 3.0 Beta

實作方法

事前校準

雖然HDR的照片因為相機在同樣地點、情況下拍攝不同的多組曝光時間不同的照片,但因為仍會有手震和快門造成的些微動作,所以藉由Alignment可以將這些些微的震動經由稍微移動照片來消除。本專題採用的為上課介紹的Median Threshold Bitmap作校準,本演算法利用影像金字塔的方式(每層圖片都為上一層的四倍)從最小的開始比對,在九宮格內做移動如下圖所示,累計個方向的誤差選擇最小的方向移動之。

(-1, -1) (0, -1) (1, -1)
(-1, 0) (0, 0) (1, 0)
(-1, 1 ) (0, 1) (1, 1)

建立HDR影像

在建立HDR影像以前利用easyexif (https://github.com/mayanklahiri/easyexif )網路的現成函式庫直接讀取影像的曝光時間。本專題建立HDR影像的方法為上課介紹的Debevec方法,並且將以論文的gsolve MatLab Code為基底轉成C++程式碼,再利用OpenCV提供的 cv::solve() SVD解 Ax = b 方程解,得到響應曲線 (Recovering response curve)。最後再將所有輸入影像的每個點代入該曲線並乘上權重,最後得到radiance map。

Tone Mapping

因為HDR影像不一定為一般影像中0-255的範圍區間,因此需要轉換成一般圖片格式,許多演算法都要求必須先算出其亮度(intensity),再算出答案。本專題採用兩種方法做試驗,第一個為Durand,另一個為Reinhard

Reinhard

Reinhard先計算了該HDR影像的亮度平均,再套用自定義的白平衡修正,最後再將修正過後的與亮度相除得到一個scale factor,最後再將此矩陣與HDR影像相乘即可得到答案。

Durand

Durand在其個人網頁中有很詳細的步驟

input intensity= 0.2126 * R + 0.7152 * G + 0.0722 * B
r=R/(input intensity), g=G/(input intensity), B=B/(input intensity)
log(base)=Bilateral(log(input intensity))
log(detail)=log(input intensity)-log(base)
log (output intensity)=log(base)*compressionfactor+log(detail)
output = r*log_absolute_scale*10^(log(output intensity))

//Parameters
compressionfactor = (log(5) / log(10.0)) /(max(log(base)) - min(log(base)))
log_absolute_scale = 1.0 / pow(10.0, compression_factor * max_log);

其中的雙線濾波器 (Bilinear filter),我們使用的是OpenCV提供的雙線濾波,並使用作者提供的參數做設定取出圖片的細節,在計算過顏色後,再將細節還原回去。

結果

以下為利用本專題撰寫程式之結果

Reinhard Durand
Imgur Imgur
Imgur Imgur

第一張圖由於日光燈的資訊在下面原始十張圖片中都未有太大變動,因此在重建HDR影像時出現嚴重破損,也對影像重建帶來一定量的影響

原始檔案

1

Imgur Imgur Imgur Imgur Imgur
Imgur Imgur Imgur Imgur Imgur

2

Imgur Imgur Imgur Imgur Imgur
Imgur Imgur Imgur Imgur Imgur

作者

黃揚文 (@KKyang) 徐嘉君 (@Chia-ChunHsu)

Support or Contact

可以利用Github提供的issues功能提供我們意見,謝謝!

Reference

  1. Paul E. Debevec, Jitendra Malik, Recovering High Dynamic Range Radiance Maps from Photographs, SIGGRAPH 1997
  2. Fredo Durand, Julie Dorsey, Fast Bilateral Filtering for the Display of High Dynamic Range Images, SIGGRAPH 2002
  3. Reinhard, E., Stark, M., Shirley, P., and Ferwerda, J.A. Photographic tone reproduction for digital images, SIGGRAPH 2002
  4. 課程講義(MTB, HDR, Tone mapping)