簡介
本篇主要對HDR功能,使用全局色調映射算法的實現。
具體實現
HDR相關實現步驟,前面預研中已經提到過。
1、圖像配準:
參考文檔:點擊打開鏈接,注意在這個步驟之後,加上一個稠密光流法配準,基本就可以用了。不過如果想優化時間,或者想得到更好的配準效果的話,就需要進一步研究,這裏不深入了,本篇只做簡單demo。
2、全亮度圖像獲取
其核心爲相機響應曲線的擬合,具體方法參考論文:Recovering High Dynamic Range Radiance Maps from Photographs。其中的公式推導實現比較麻煩。不過在opencv3.1上已經有具體的c++實現代碼,可以從如下路徑直接獲取:./samples/cpp/tutorial_code/photo/hdr_imaging/hdr_imaging.cpp。缺點就是計算奇異分解比較花時間。
3、色調映射
在opencv自帶的例子hdr_imaging.cpp上,也有色調映射步驟,不過具體效果並不是很好,這裏我根據論文:Tone-mapping high dynamic range images by novel histogram adjustment,對色調映射步驟,使用全局映射方法進行了重寫,細節效果好了些,不過顏色有偏色,沒做調整還。
色調映射實現
具體公式爲:
Dmax和Dmin一般爲255和0,Imax和Imin爲全亮度圖像的最大最小值。I爲全亮度圖像的pixel,t(打不出符號,代替了)爲設置的參數。t越大,結果圖像越暗,越小,合成圖像越大。
使用一個手動設置的t,也能得到結果圖像,如果想算法對大多數圖像能自動適配的話,那就需要求圖像的自適應t。根據公式:
A,B根據書上說可以設置爲0.4和2.不過我這裏是設置爲了0.4和0.1。求出Iave、Imax、Imin和K之後,使用牛頓迭代法求出t。
牛頓迭代法核心代碼爲: