使用相機響應函數的高動態範圍與低動態範圍範例

簡要說明

檔案: \examples\Processing\HDR_ImageComposition\HighDynamicRange\HDR_CRC_Bayer.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange\HDR_CRC_Color.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange\HDR_CRC_Gray.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_8bit_8192_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_8bit_16384_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_8bit_8192_4xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_10bit_8192_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_10bit_16384_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_10bit_8192_4xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_12bit_8192_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_12bit_16384_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_12bit_8192_4xCxp2L.vad

預設平台: mE5-MA-VCL, imaFlex CXP-12 Quad

短說明

根據 Debevec 與 Malik 的 HDR 演算法,以及根據 Reinhard 等人與 Fattal 等人的 LDR 演算法。

高動態範圍 (HDR) 影像能再現寬廣的亮度範圍,因此可在單張影像中同時結合非常暗與非常亮的細節。 透過大多數攝影技術,單一 Exposure Time 無法達到如此高的亮度範圍。因此,HDR 影像是由 具備不同 Exposure Time 的影像所建立。大多數顯示器無法直接顯示 HDR 影像。因此,若要在顯示器上顯示 HDR 影像,必須將亮度對比縮減至 低動態範圍 (LDR) 影像。此程序也稱為色調對應 (Tone Mapping)。在此 VisualApplets 範例中, 實作了根據 Debevec 與 Malik [Deb97] 的 HDR 演算法。 LDR 演算法則是根據 Reinhard [Rei02] 與 Fattal [Fat02]。以下將簡要說明這兩種演算法。

高動態範圍成像

像素值 在具有像素座標 和 的影像 i 中,可以表示為輻照度值的函數 以及 Exposure Time :

方程式 32。


當我們定義 則得出:

方程式 33。


其中我們稱 為響應曲線。 它將 Exposure Time 的像素值 與場景輻照度 . 關聯起來, 假設每個像素皆為常數。 在已知 和 , 的情況下,可以使用奇異值分解 方法計算 [Deb97]。 現在可以使用下列運算式建立 HDR 影像 [Deb97]:

方程式 34。


其中 是 產生的 HDR 影像中像素 x,y 處的對數輻照度值(底數為 )。對於彩色影像, 是紅、綠 與藍色值 (rs, gs, bs), 和 )。 亦即, 方程式 34 必須分別針對紅、綠與藍色值進行計算。 是曝光次數。 在 方程式 34 是一個加權函數:

方程式 35。


低動態範圍成像

Bayer 與彩色影像

為了顯示 HDR 圖像,必須降低亮度對比。根據 Reinhard 等人的研究 [Rei02],LDR 亮度 可以計算如下:

方程式 36。


此處 是經過縮放的 HDR 亮度:

方程式 37。


參數 用於調整所顯示 LDR 圖像的亮度。 典型值介於 0.09 和 0.72 之間 [Rei02]。所謂的相對「世界」亮度 是從 HDR 色彩計算得出: , 和 :

方程式 38。


平均值 在此範例中計算為

方程式 39。


根據 Fattal 等人的研究 [Fat02],現在可以將 LDR 色彩分量 , 和 重建為

方程式 40。


灰階影像

用於在顯示器上輸出的灰階圖像之 LDR 圖像值 可以計算如下:

方程式 41。


此處 是根據以下內容進行 HDR 處理的結果: 方程式 34. 是用於調整輸出圖像亮度的參數常數。

VisualApplets 設計

用於拍攝具有極寬亮度範圍(包含極暗與極亮物體)之場景的 HDR/LDR 演算法已在 VisualApplets 中實作,適用於 灰階(「HDR_CRC_Gray.vad」)、Bayer(「HDR_CRC_Bayer.vad」)與彩色(「HDR_CRC_Color.vad」)相機影像。 系統會將影像傳輸至 PC,讓場景中的每個物體皆能妥善顯示。 圖 347 顯示了設計「HDR_CRC_Bayer.vad」的基本結構。所有範例皆遵循相同的原則。 對於 Bayer 格式的 Raw 影像,每個影像像素的紅、綠、藍值會在 HierarchicalBox Bayer 中透過 Bayer5x5Linear 運算子進行計算。此 Box 僅包含於範例「HDR_CRC_Bayer.vad」中。 在 Box ImageSequence 中,會緩衝處理三個影像的序列。為了進行 HDR-LDR 處理,這三個影像應具有三種不同的 Exposure Time。 選擇 Exposure Time 時,應確保曝光序列中的每個影像至少有一個像素既未欠曝也未過曝。 您可以在 HierarchicalBox Trigger 中使用運算子 SignalWidth width1 至 width3 來設定這些時間(請參見圖 348)。 請注意,時間刻度是以 8 ns 為單位的系統時脈週期。Generate-Period 運算子的設定值必須大於運算子 SignalWidth width1 至 width3 中最長的時間。此外,請參閱相機手冊中有關運算子 Generate-Period 之最小週期長度的說明。 這三個影像會根據上述 Debevec 與 Malik [Deb97] 的 HDR 演算法進行結合。此演算法實作於 HierarchicalBox HDR(圖 347)中。灰階、Bayer 與彩色影像的實作方式皆相同。 LDR 演算法實作於 LDR 中。彩色/Bayer 影像與灰階影像的實作方式有所不同(請參閱章節 與 )。所得 RGB 影像的顏色會在 HierarchicalBox OutputToPC 中進行合併。此 Box 不存在於範例「HDR_CRC_Gray.vad」中。 SourceSelector 運算子提供選項,可選擇 DMA 傳輸已處理的 HDR-LDR 影像或 (經過 Bayer Demosaicing 的)相機影像。

基本設計結構

圖 347. 基本設計結構


Box Trigger 的內容

圖 348. Box Trigger 的內容


在圖 349 中,您可以看到 HierarchicalBox 的內容 HDR。對於緩衝影像序列的三個影像,分子和分母的相加項 與分母 的成員 方程式 34 是針對第一到第三個影像(HierarchicalBox Image1 設定為 Image3)分別針對紅色、綠色與藍色進行計算。

HDR box 的內容

圖 349. Box HDR 的內容


在圖 350 您可以看到以影像 1 的紅色為例進行的此項計算(在 HierarchicalBox 中 Red 在 box 中 Image1)。所有影像的所有顏色均以相同方式處理。相機響應曲線(CRC) 的對數值會透過 HierarchicalBox 中的 Lookup Table 指定給(紅/綠/藍)像素值 over127 如果像素值大於 127 或位於 Box underequal127 如果像素值小於或等於 127。這些 Lookup Table 的內容 gO127 和 g_ueq_127 可用 於紅色、綠色與藍色的色彩計算,這些計算可使用位於 \examples\Processing\Advanced\HighDynamicRange\ 下的 Matlab 程式模組「HDR_CRC.m」、「sample.m」與「gsolve.m」來執行,它們 基於 Debevec 與 Malik [Deb97] 的程式碼,並部分參考自 M. Eitz [Eit07] 的範例。 請閱讀「HDR_CRC.m」中的簡短手冊,以取得有關如何使用該程式碼的進一步指示。 使用 CONST 運算子 LNdt1 (以及對應的 LNdt2 和 LNdt3 適用於影像 2 與 3) 可設定 Exposure Time 的對數值(以 e 為底)。請注意,此值必須乘以 由於有 16 個小數位元。對應的時間基礎可以透過參數選擇 LNTimeBase。值 , 或 將時間刻度設定為秒、毫秒或微秒。在查找表中 weight 的內容,如圖 350 的加權函數 方程式 35 已實作。使用 Matlab 程式模組 "HDR_CRC.m"、"sample.m" 和 "Weight.m" 可以建立加權表 "Weights.txt"。請同時閱讀 "HDR_CRC.m"(或灰階影像的 "HDR_CRC_Gray.m")中的簡易手冊以取得進一步說明。HierarchicalBox 的最終輸出 Red (以及對應的 綠色 和 Blue)在方塊中 Image1 (以及對應的 Image2 和 Image3)然後是 和 .

Image1 中 Red 元件的內容

圖 350.Image1 中的 Red 元件內容


回到圖 349 作為方塊的內容 HDR。HDR 色彩元件對數值的計算 , 和 根據 方程式 34 是在方塊中執行 Red, 綠色 和 Blue。此處實作了分子所有元件的加總 以及分母 值與最終除法運算(例如請參閱圖 351 中的紅色)。

HDR 下 Red 方塊的內容

圖 351. HDR 下 Red 方塊的內容


方塊 Lw 的內容,如圖 349 包含 HDR 色彩值的計算 , 和 透過對數值進行計算。 指數函數是透過查詢表格來實作的。接著,相對「世界」亮度 "Lw" 會根據 以下公式從 HDR 色彩分量中計算得出 方程式 38。 其平均值根據 方程式 39 是在方塊 Lw_d 在模組 LDR (請參閱基本設計結構圖 347)。 LDR 的完整內容如圖 352.

設計「HDR_CRC_Bayer.vad」和「HDR_CRC_Color.vad」中的 LDR 方塊內容

圖 352. 設計「HDR_CRC_Bayer.vad」和「HDR_CRC_Color.vad」中的 LDR 方塊內容


模組 Ls 包含根據以下公式計算縮放亮度 方程式 37 作為相對「世界」亮度与其平均值的除法,並乘以「亮度參數」 a。透過變更此參數值,您可以改變最終處理影像的亮度。您可以在 VA 設計的註解方塊中找到此參數的適當值,或者如果您深入了解,可以在 [Rei02]。 LDR_Luminance 計算 LDR 亮度根據 方程式 36。此值最終會與 HierarchicalBox 的輸出相乘 HDRColor , 和 針對紅色、綠色和藍色色彩分量分別進行處理。結果隨即成為處理後輸出影像的 LDR 紅色、綠色和藍色色彩分量 [Fat02]。 HierarchicalBox 的內容 LDR 針對灰階影像的內容如圖 353.

設計「HDR_CRC_Gray.vad」中 box LDR 的內容

圖 353:設計「HDR_CRC_Gray.vad」中 LDR box 的內容


在 HierarchicalBox Exp_Ln 是根據 其對數值計算得出 作為 HDR 處理的結果 (方程式 34)。 在 box 中 SQRT 根據該節中的演算法擷取平方根 。結果除以自身 加上 。此值 以及隨之而來的輸出影像亮度可以使用 operator 進行設定 ShiftLeft_Brightness.