這篇其實是回答讀者提問的文章
在回答讀者之前,因為我其實看不太懂題問,所以想先講解一些背景觀念,希望可以把一些誤解或模糊的地方補齊。
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)。常見有幾個做法:
- 使用 bit moving window, 在 10-bit 中選 8-bit LSB 或 MSB 顯示,這在數學上等同於 linear mapping,將會有暗處細節及亮部細節損失的缺點。
- 使用 non-linear mapping,在不同亮度區間使用不同的 quantization bin size。由 HVS 中我們知道人眼對於暗部的感度較高,因此在暗區使用較小的 bin size,同理亮區就是用較大的 bin size。在數學上通常是一個類似 logarithmic function ,大幅壓縮亮區細節。而有些研究更針對人眼區辨力製作了精算 bit 數的 curve mapping function (如 dolby PQ curve)。
- 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}\]

請問Luminance是指HSV的V嗎?
RGB乘以同值會改變HSV的V,(1)式為什麼不會改變Luminance呢?
(2)式的s是冪次方的意思嗎?
把式1帶回源式同權重求Y值不變對吧哈
式2是power次方沒錯
說明得不全,RGB顏色通道比值不變性。
您好
網頁圖片好像死檔了
對,很久沒維護了。有些數學式顯示有問題…
有空會修復下@@