OpenCV圖像處理專欄二十 |《Adaptive Logarithmic Mapping For Displaying High Contrast Scenes》復現(xiàn)

1. 前言

今天分享一篇2003年的低照度圖像增強論文《Adaptive Logarithmic Mapping For Displaying High Contrast Scenes》阳惹,論文地址為:https://domino.mpi-inf.mpg.de/intranet/ag4/ag4publ.nsf/0/53A4B81D590A3EEAC1256CFD003CE441/$file/logmap.pdf简十。

2. 原理

首先論文第一個重要的公式是:

L_d=\frac{log(L_w+1)}{log(L_{max}+1)}

其中L_d代表每個像素的顯示亮度,L_w代表原圖像亮度律胀,L_{max}是原圖像亮度的最大值杏头。

第二個重要的公式是:

log_{base}x=\frac{log(x)}{log(base)}

這就是高中學過的換底公式了萝勤。

第三個重要公式是:

bias_b(t)=t^{\frac{log(b)}{log(0.5)}}

這個公式的來源為:經(jīng)過實驗表明人眼對亮度的適應(yīng)比較符合對數(shù)曲線荤傲,為了使得對數(shù)變換變得"平滑"办龄,使用了上述的bias變換烘绽。這個變換就是將一個數(shù)值t做一個指數(shù)變換,來達到調(diào)節(jié)的目的俐填,當b=0.5時安接,即是bias_b(t)=t,當b0.73時英融,得到的調(diào)整函數(shù)最接近\gamma = 2.2的伽馬矯正結(jié)果盏檐,論文還嘗試0.65歇式,0.75,0.85胡野,0.95的不同恢復結(jié)果材失,最后在代碼實現(xiàn)部分選擇了0.85,這個值看起來是最優(yōu)秀的硫豆。

第4個重要的公式為:

L_d=\frac{0.01L_{dmax}}{log_{10}(L_{wmax}+1)}*\frac{log(L_w+1)}{log(2+8(\frac{L_w}{L_{wmax}})^{\frac{log(b)}{log(0.5)}})}

其中L_{dmax}是設(shè)定的一個比例因子龙巨,根據(jù)不同的顯示器需要進行調(diào)整,CRT顯示器可以取L_{max}=100cm/m^2熊响,這部分的細節(jié)和Bias的取值建議去看原論文旨别,最后作者在實現(xiàn)過程中使用的是將原始的rgb轉(zhuǎn)成ciexyz色彩空間,然后在ciexyz空間進行變換后再轉(zhuǎn)回rgb顏色空間汗茄。

按照這幾個公式以及自己的理解去復現(xiàn)了一把秸弛,和論文展示的結(jié)果是比較類似的,應(yīng)該不會有大問題洪碳。

3. 代碼復現(xiàn)

double Transform(double x)
{
    if (x <= 0.05)return x * 2.64;
    return 1.099*pow(x, 0.9 / 2.2) - 0.099;
}
struct zxy {
    double x, y, z;
}s[2500][2500];

int work(cv::Mat input_img, cv::Mat out_img) {
    int rows = input_img.rows;
    int cols = input_img.cols;
    double r, g, b;
    double lwmax = -1.0, base = 0.75;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            b = (double)input_img.at<Vec3b>(i, j)[0] / 255.0;
            g = (double)input_img.at<Vec3b>(i, j)[1] / 255.0;
            r = (double)input_img.at<Vec3b>(i, j)[2] / 255.0;
            s[i][j].x = (0.4124*r + 0.3576*g + 0.1805*b);
            s[i][j].y = (0.2126*r + 0.7152*g + 0.0722*b);
            s[i][j].z = (0.0193*r + 0.1192*g + 0.9505*b);
            lwmax = max(lwmax, s[i][j].y);
        }
    }
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            double xx = s[i][j].x / (s[i][j].x + s[i][j].y + s[i][j].z);
            double yy = s[i][j].y / (s[i][j].x + s[i][j].y + s[i][j].z);
            double tp = s[i][j].y;
            //修改CIE:X,Y,Z
            s[i][j].y = 1.0 * log(s[i][j].y + 1) / log(2 + 8.0*pow((s[i][j].y / lwmax), log(base) / log(0.5))) / log10(lwmax + 1);
            double x = s[i][j].y / yy*xx;
            double y = s[i][j].y;
            double z = s[i][j].y / yy*(1 - xx - yy);

            //轉(zhuǎn)化為用RGB表示
            r = 3.2410*x - 1.5374*y - 0.4986*z;
            g = -0.9692*x + 1.8760*y + 0.0416*z;
            b = 0.0556*x - 0.2040*y + 1.0570*z;

            if (r < 0)r = 0; if (r>1)r = 1;
            if (g < 0)g = 0; if (g>1)g = 1;
            if (b < 0)b = 0; if (b>1)b = 1;

            //修正補償
            r = Transform(r), g = Transform(g), b = Transform(b);
            out_img.at<Vec3b>(i, j)[0] = int(b * 255);
            out_img.at<Vec3b>(i, j)[1] = int(g * 255);
            out_img.at<Vec3b>(i, j)[2] = int(r * 255);
        }
    }
    return 0;
}

4. 效果

原圖1
結(jié)果圖1
原圖2
結(jié)果圖2

對于常態(tài)的圖片胆屿,一般也能起到一定的視覺增強效果:

原圖3
結(jié)果圖3

5. 總結(jié)

從結(jié)果圖看出效果還是很不錯的,這里提供了樸素實現(xiàn)的代碼偶宫,其實我也有優(yōu)化版非迹,這里先賣個關(guān)子哈。請持續(xù)關(guān)注本公眾號吧纯趋,我決心會在圖像算法優(yōu)化上下很大的功夫憎兽,希望和大家一起進步。


歡迎關(guān)注GiantPandaCV, 在這里你將看到獨家的深度學習分享吵冒,堅持原創(chuàng)纯命,每天分享我們學習到的新鮮知識。( ? ?ω?? )?

有對文章相關(guān)的問題痹栖,或者想要加入交流群亿汞,歡迎添加BBuf微信:

二維碼
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市揪阿,隨后出現(xiàn)的幾起案子疗我,更是在濱河造成了極大的恐慌,老刑警劉巖南捂,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吴裤,死亡現(xiàn)場離奇詭異,居然都是意外死亡溺健,警方通過查閱死者的電腦和手機麦牺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人剖膳,你說我怎么就攤上這事魏颓。” “怎么了吱晒?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵甸饱,是天一觀的道長。 經(jīng)常有香客問我枕荞,道長柜候,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任躏精,我火速辦了婚禮渣刷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘矗烛。我一直安慰自己辅柴,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布瞭吃。 她就那樣靜靜地躺著碌嘀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歪架。 梳的紋絲不亂的頭發(fā)上股冗,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音和蚪,去河邊找鬼止状。 笑死,一個胖子當著我的面吹牛攒霹,可吹牛的內(nèi)容都是我干的怯疤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼催束,長吁一口氣:“原來是場噩夢啊……” “哼集峦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抠刺,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤塔淤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后矫付,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凯沪,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年买优,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡杀赢,死狀恐怖烘跺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脂崔,我是刑警寧澤滤淳,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站砌左,受9級特大地震影響脖咐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜汇歹,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一屁擅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧产弹,春花似錦派歌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至斤斧,卻和暖如春早抠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撬讽。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工蕊连, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锐秦。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓咪奖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酱床。 傳聞我的和親對象是個殘疾皇子羊赵,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容