1. 程式人生 > >影象亮度自適應調整

影象亮度自適應調整

簡介

  本篇主要是對論文:Automatic Exposure Correction of Consumer Photographs 的實現總結。
作用是為了讓影象曝光、細節更好。
    論文地址:點選開啟連結

實現原理

  根據對輸入影象的亮度資訊進行分析處理,進而獲得該圖片對應的S型Gamma曲線。利用這條曲線對輸入影象進行處理,得到更好曝光和細節效果的影象。

演算法實現

影象分割

  將輸入影象縮放後,利用:graph-based segmentation方法進行影象分割,直接網上搜索該關鍵字,有對應的論文和直接的程式碼下載,程式碼做點小修改之後
可以直接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得到用來增強細節的影象。
     接著使用如下公式進行處理:
                 
     處理後的結果對比如下:
        
     可以看到右邊影象細節部分,得到了增強。

色彩調整

  前面可以看到,新影象亮度增加之後,飽和度會降低。所以,這裡根據原影象亮度和色彩的比值,以及新影象的亮度,
來從新調整新影象的色彩。
     處理後的結果對比如下:
        
  可以看到新影象的色彩飽和度已經起來了。
    另外需要注意,該演算法的大缺點:會放大噪聲。
  以上,影象調整完畢。

結果顯示

  最後,看幾組該演算法的處理結果:
        
  可以看到:該演算法對弱光下拍攝的影象,暗處細節得到了明顯的加強,同時對正常曝光的影象,也不會造成變壞的影響。