HDR / Tonemapping essentials

Raw檔本身就是超過 8-bit 的 HDR 影像

看到很多人為了要產生 HDR 檔案,卻是用一個 raw 檔調整曝光輸出包圍曝光影像,爾後再丟 Photoshop 合併為 HDR 影像。這明顯是脫褲子放屁的過程,甚至會使畫質下降,直接把 raw 轉存成 HDR 檔就好了 (只要是32-bit的 container 都裝得下,如 TIF、HDR、EXR、DNG)。

會用到複數張 8-bit 包圍曝光影像是應用在其他消費機僅能輸出 JPG 的情況。而單眼相機的 sensor 通常是在 12~14bit,當然若需要更高的 dynamic range 如產生 32-bit HDR,可以考慮合併複數張的 raw 影像。

產生 HDR 影像的演算法

很多演算法 (Photomatix) 會使影像變模糊

我直接點出因為 photomatix 的演算法是使用 gradient domain compression (SIGGRAPH02)。在解 Poisson equation 時由於是最小化 L-2 norm,會有平均化誤差的特性,在減低 halo effect 的同時也把影像變糊了。

而 Adobe 新版的 lightroom 使用了新的演算法 ( Local Laplacian Filtering )。可以減低模糊的情況,並且同時也沒有 halo effect。演算法 / Demo / Paper

HDR 和 Tonemapping 是兩件事情

HDR影像一般指色彩強度超過 8-bit [0~255] 範圍的影像,而 tonemapping 則是將其動態範圍壓縮回 8-bit 的過程,才能使其顯示在螢幕上。

經典的 tonemapping 演算法

Solving the Discrete Poisson Equation using Conjugate Gradient Method

在 Tone mapping: A quick survey. (Tone mapping 原理) 中我們介紹了 gradient domain 的解法,本篇暨 FFT(DST) 解法後,提供一個 spatial domain 的 optimization 方式。

與原始論文使用 Multigrid 不完全相同,但Conjugate gradient 的作法可被 Multigrid 利用來取代 Gauss–Seidel method 作為 smooth 的方法。與 Multigrid 相比直接求解可能需要更多次的 iteration (大約2000次)。

Continue reading "Solving the Discrete Poisson Equation using Conjugate Gradient Method"

Gradient domain high dynamic range compression with local Poisson solver

flowsolver本篇參考論文 A real-time implementation of gradient domain high dynamic range compression using a local Poisson solver

 

1. Model

前情提要,在前一篇中我們討論到了gradient domain的Poisson reconstruction,給定已知的divergence \operatorname{div}{G},嘗試重建I


\begin{align}
\nabla^2{I}&=\nabla_{x} \cdot \Phi\cdot\nabla_{x} f +\nabla_{y} \cdot \Phi\cdot\nabla_{y} f \\
&=\operatorname{div}{G} \label{eq:model}
\end{align}

2. Integral Problem

基本上這可看為一個積分問題,用一維的gradient思考,\nabla{f}套用衰減函數\Phi後由任何一邊開始積分就可以返回I,如下式可以積回任何第n點的I_n,其中C為一個常量

I_n=\sum_{i=0}^{n}{\nabla{f}_i{\Phi_i}}+C

一個直白的說法就是給你數個位置的個坡度,然後以平滑的方式重建回斜坡

但在二為空間就不是如此,從任何一邊積分的結果都會有所不同,所以在無法兼顧的情況下,我們僅能將其轉換為一個optimization問題來看,使其符合目標式\eqref{eq:model}從任何單點來看都需要整個畫面的divergence才能完整的重建

 

Continue reading "Gradient domain high dynamic range compression with local Poisson solver"

Tone mapping: A quick survey. (Tone mapping 原理)

c1aa14506d4d0132e77d6ea4796472e0

假設已經有一個HDR影像,如何顯示在8-bit螢幕上哩? Tone mapping三巨頭,依照結果優排序! 三種都是local tonemapping,都是SIGGRAPH02耶! 那年真流行HDR。

  1. Gradient domain high dynamic range compression
  2. Fast Bilateral Filtering for the Display of High-Dynamic-Range Images
  3. Photographic Tone Reproduction for Digital Images

tm

2和3的方法皆屬於edge preserving,對比度較差;而方法1屬於gradient preserving,對比度較佳。當然這三種算法的結果也反映了演算法複雜程度...

 

Continue reading "Tone mapping: A quick survey. (Tone mapping 原理)"

Camera response curve calibration

公式參考引用數驚人的[1]"Paul E. Debevec and Jitendra Malik. Recovering High Dynamic Range Radiance Maps from Photographs. In SIGGRAPH 97, August 1997."

1. Introduction

在影像處理中,有幾個主題如HDR, Lens shading correction, shape from shading等,都需精準的由intensity判斷一些重要訊息,然而在真實的相機中,input irradiance E和輸出的intensity Z未必是與曝光時間\Delta{t}呈線性關係,而是一個類似gamma curve的非線性的對應曲線。這會造成計算上的誤差,甚至是許多artifact的產生,因此校正這個關係使得整張影像的intensity Z與input irradiance E呈線性變成一個研究主題。

  • Remark: 這部分是我自己的碎碎念

Continue reading "Camera response curve calibration"

From implicit filtering to explicit filtering

在影像處理中,我們常常對影像進行許多filtering,如跑下面這個3x3的box blur kernel W

W=\begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{bmatrix}

每個output影像pixel O_i,可視為在kernel內的input影像pixel I_j的線性加總

O_{i}=\sum_{j{\in}W}{w_{j}I_{j}}

我們令這個動作被應用在全影像成一個線性系統,這邊把OI都展開成向量

A\vec{O}=\vec{I}

\vec{O}=A^{-1}\vec{I}

這邊的A^{-1}作用等同於對影像做一個W kernel的filtering,在這裡求解\vec{O}=A^{-1}\vec{I}系統最佳化我們稱之為implicit filtering,其實等同於做一個explicit的box filter,而後者明顯比較容易實現! 也更適合硬體實作。

不幸的是,我們定義問題時通常以一個quadratic form的線性系統Ax=b來做最佳化;令這些式子難以被實現成硬體加速(通常是memory trade-off或iteration問題)。於是將implicit filtering轉換成explicit filtering變成一個特別的研究方向。比方說L-1 regularization的最佳化問題可以被轉換成一個iterative median filtering [1]。

[1]Y. Li and S. Osher, “A New Median Formula with Applications to PDE Based Denoising,” Comm. Math. Sciences, vol. 7, pp. 741-753, 2009.

Jacobi method

講到iterative method,得從最簡單的方法開始─Jacobi method

假設有一方程組

Ax=b

這邊我們舉例

\begin{bmatrix}{A}_{11}&{A}_{12}&{A}_{13}\\{A}_{21}&{A}_{22}&{A}_{23}\\{A}_{31}&{A}_{32}&{A}_{33}\end{bmatrix}\begin{bmatrix}{x}_{1}\\{x}_{2}\\{x}_{3}\end{bmatrix}=\begin{bmatrix}{b}_{1}\\{b}_{2}\\{b}_{3}\end{bmatrix}

Continue reading "Jacobi method"