簡單介紹
本篇主要是對論文:Automatic Exposure Correction of Consumer Photographs 的實現總結。 作用是為了讓圖像曝光、細節更好。 論文地址:點擊打開鏈接
實現原理
依據對輸入圖像的亮度信息進行分析處理,進而獲得該圖片相應的S型Gamma曲線。利用這條曲線對輸入圖像進行處理,得到更好曝光和細節效果的圖像。
算法實現
圖像切割
將輸入圖像縮放后。利用:graph-based segmentation方法進行圖像切割。直接網上搜索該keyword,有相應的論文和直接的代碼下載。代碼做點小改動之后 能夠直接opencv編譯通過。 得到的結果例如以下:![]()
縮放后圖像 區域切割后圖像
區域合並
首先將圖像歸一化。接着依據亮度0.0、0.1....1.0將圖像分為11層。然后將之前切割出來的區域塊,依據亮度層進行合並。
得到的結果例如以下:
區域合並后圖像
細節提取
將圖像依據前面的分層和亮度中間值V為分界線。將圖像分為暗區和兩區兩部分。,對圖像分別用Gamma(2.2, 0.445)進行處理,得到欠曝和過曝圖像。 接着對着三張圖像進行canny 細節提取。針對之前得到的前面分層。依據每層亮度是否大於V,計算出該層的細節占總細節的比例:Vb或者Vh。
區域尺寸比例
計算出每層區域的像素占整個圖像像素的比例。相應為:Ci;
相鄰層直方圖距離
得到每層相應的直方圖,計算兩兩相鄰層之間。直方圖重合區域最大時候移動的距離,記錄為Dij。
區域層亮度重映射
依據論文上公式:![]()
依據公式算法。枚舉全部可能的的區域層亮度組合,算出每種組合的Z值,取Z值最小時候的組合。就是我們求得的新區域層亮度。 如本文圖片范例所看到的:最開始的區域層亮度為:0 1 2 3 4 7 8;算法調整后為:2, 2, 2, 3, 5, 7, 8。亮處的區域層亮度沒有變化,暗處區域層 亮度添加了不少。
S曲線調整
前面得到的區域層亮度。就是用來求S曲線的Qs, Qh。例如以下圖所看到的:![]()
Qs由例如以下公式求得:![]()
![]()
ei能夠理解為區域層亮度調整前的區域亮度與區域size的比值。e'i為區域層亮度調整后的區域亮度與區域size的比值。 Qh也是類似方式求得,本文范例圖像上,亮處區域調整為0。所以Qh計算出來為0。Qs為正數。
接着便能夠利用公式:對原圖像進行S曲線調整。
處理后的結果對照方下:
S曲線調整后結果對照
能夠明顯的看到。暗處的亮度和細節已經起來了。
細節優化
前面的調整。提高暗處亮度,本質上會壓縮了中間區域的動態范圍。將會導致圖像看起來有些朦朧模糊。因此在這基礎上,還須要 做些細節增強的處理。對原圖像I做guided filter,到新圖像F,用I - F得到用來增強細節的圖像。接着使用例如以下公式進行處理:
![]()
處理后的結果對照方下:![]()
能夠看到右邊圖像細節部分,得到了增強。
色彩調整
前面能夠看到,新圖像亮度添加之后,飽和度會減少。所以。這里依據原圖像亮度和色彩的比值。以及新圖像的亮度, 來從新調整新圖像的色彩。 處理后的結果對照方下:![]()
能夠看到新圖像的色彩飽和度已經起來了。另外須要注意,該算法的大缺點:會放大噪聲。
以上,圖像調整完成。
結果顯示
最后。看幾組該算法的處理結果:![]()
能夠看到:該算法對弱光下拍攝的圖像,暗處細節得到了明顯的加強,同一時候對正常曝光的圖像,也不會造成變壞的影響。