HDR一些基本觀念

這篇其實是回答讀者提問的文章

在回答讀者之前,因為我其實看不太懂題問,所以想先講解一些背景觀念,希望可以把一些誤解或模糊的地方補齊。

Dynamic Range & bit

Dynamic Range 的定義係指影像中最大值與最小非0值之比值,這個比值與單位無關,可以是 \(cd/m^2\) 或是 intensity。我們買顯示器的 1:10000 對比度就是指這個比值。

以能量 \(E\) 為單位,而 sensor 對能量曝光採樣 \(E\Delta{t}\) ,並經過 quantization & truncation 得到我們記錄的 intensity \(Z=f(E\Delta{t})\)單位。這邊 quantization level 通常是 8-bit也就是我們熟悉的 RGB24,因此可以得知,在硬體固定的 quantization level 下,一張影像的最大  dynamic range 也是固定的。

假設一個 intensity 代表一個能量單位 \(\Delta{Z}=\Delta{E}\) ,要得到相對於一般影像更高的 dynamic range 勢必要提升 bit 數,或是增加 \(\Delta{E}\) 的大小,而後者會犧牲畫值的細緻度產生 false contour。因此一般論文常指的 HDR 影像通常是高於 8-bit per-channel。

 

Tone mapping

假設我們有一個 10-bit 的影像,但是顯示器卻只有 8-bit,無法顯示在螢幕上,需要一個高 bit 到低 bit 數的對應關係,稱之為 tone mapping operator (TMO),而反過來的就稱為 inverse tone mapping operator (ITMO)。常見有幾個做法:

  1. 使用 bit moving window, 在 10-bit 中選 8-bit LSB 或 MSB 顯示,這在數學上等同於 linear mapping,將會有暗處細節及亮部細節損失的缺點。
  2. 使用 non-linear mapping,在不同亮度區間使用不同的 quantization bin size。由 HVS 中我們知道人眼對於暗部的感度較高,因此在暗區使用較小的 bin size,同理亮區就是用較大的 bin size。在數學上通常是一個類似 logarithmic function ,大幅壓縮亮區細節。而有些研究更針對人眼區辨力製作了精算 bit 數的 curve mapping function (如 dolby PQ curve)。
  3. Optimization based、wavelet based、pyramid based。之類的做法前面介紹過不少。

然而這些做法都是希望儘應用在 luminance 上,不希望去改變  saturation 和 hue ,因為我們只想做亮度壓縮,不想動到色彩。因此這邊的計算單位並不重要,確保一致性就好,你可以想成是 energy 單位或是浮點數 intensity 都可以,最後是透過一個乘上一個比值的方式完成,像是 RGB 都要減少 10%這樣。

Tone mapping in RGB

RGB to luminance 的做法相信大家都不陌生,不然加起來均也不失為一個做法。

大部分的 TMO 都做用在 luminance channel,得到一個 luminance gain 以 \(g\) 表示,而後乘在 RGB 上就是彩色影像的 tone mapping 了。如下式\(\eqref{eq:gain}\), \(L_w\) 與 \(L_d\) 分別表 HDR 與 LDR luminance,RGB 同理。

\[
\begin{equation}
\label{eq:gain}
\begin{bmatrix}R_d \\ G_d \\ B_d \end{bmatrix} = \frac{L_d}{L_w}\begin{bmatrix}R_w \\ G_w \\ B_w \end{bmatrix} = g\begin{bmatrix}R_w \\ G_w \\ B_w \end{bmatrix}
\end{equation}
\]

\(\eqref{eq:gain}\)的式子可以保證 luminance 與 hue 的不變性,但是無法保護 saturation ,飽和度會變化。所以就有了\(\eqref{eq:pow}\)的 saturation 修正版本

\[
\begin{equation}
\label{eq:pow}
\begin{bmatrix}R_d \\ G_d \\ B_d \end{bmatrix} = L_d\left(\frac{1}{L_w}\begin{bmatrix}R_w \\ G_w \\ B_w \end{bmatrix}\right)^s
\end{equation}
\]

然後\(\eqref{eq:pow}\)這個版本無法保證 luminance 不變性…反正就是顧此失彼,最後選擇放棄人眼相對無感的 hue,如\(\eqref{eq:scalar}\)

\[
\begin{equation}
\label{eq:scalar}
\begin{bmatrix}R_d \\ G_d \\ B_d \end{bmatrix} = L_d\left(s\left(\frac{1}{L_w}\begin{bmatrix}R_w \\ G_w \\ B_w \end{bmatrix}-1\right)+1\right)
\end{equation}
\]

整理一下表格如下:

equation luminance saturation hue
\(\eqref{eq:gain}\) keep changed keep
\(\eqref{eq:pow}\) changed keep keep
\(\eqref{eq:scalar}\) keep keep changed

 

Appendix

Hue計算公式: RGB只要同  gain 就不變

\[\tan( h_{rgb}) = \frac{\sqrt{3}\cdot (G – B)}{2\cdot R – G – B}\]

Reference

  1. Color correction for tone mapping, EUROGRAPHICS 2009

在〈HDR一些基本觀念〉中有 5 則留言

  1. 請問Luminance是指HSV的V嗎?
    RGB乘以同值會改變HSV的V,(1)式為什麼不會改變Luminance呢?
    (2)式的s是冪次方的意思嗎?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *