1. 程式人生 > >retinex影象增強演算法的研究

retinex影象增強演算法的研究

     影象增強方面我共研究了Retinex、暗通道去霧、ACE等演算法。其實,它們都是共通的。甚至可以說,Retinex和暗通道去霧就是同一個演算法的兩個不同視角,而ACE演算法又是將Retinex和灰度世界等白平衡理論相結合的產物。下面將依次討論,每個演算法寫一個心得,歡迎拍磚。

     今天先寫Retinex。Retinex理論認為,人眼觀測到的影象S是光照影象L和物體反射影象R的乘積。而R才是真實的恆常性的影象,但是怎麼從觀測影象S中計算R呢?這是個病態問題,根本不可解。研究者就通過加以一定的約束條件,比如光照L具有緩變平滑性、L與S有一定的弱相關性等等,然後估計出光照影象L,進而得到R。

    從S中如何估計L,就衍生出了各種各樣的實現方式,影響較大的有:中心環繞、隨機路徑、變分、金字塔迭代等等方法。其中,中心環繞演算法無疑是影響最大的retinex實現方式,使用高斯尺度運算元來估計光照影象,計算速度快。當然,它也有一些缺點:

    1) 在強光陰影過渡區容易出現光暈現象;

         主要是由於高斯運算元不能在過渡區很好的估計光照所致。

    2) 對比較亮的影象處理欠佳,比如霧霾影象。

        主要原因有二:retinex不是專門的去霧演算法;對數化處理壓縮了亮區域的顯示範圍,導致其細節弱化。

        由於L和R是乘積的關係,為了便於處理,一般對觀測影象S先進行對數處理,這樣就轉換成了加性關係。使用對數處理可以極大的提升暗區域的畫素值,以增加對比度,但代價是壓縮了亮區影象的顯示範圍,導致其細節模糊甚至丟失。所以個人認為,retinex適用於處理那些光照不足黑不拉幾的影象,對於比較亮的影象,不妨先進行反色處理再retinex。

    3) 色彩保持能力較弱。

        因為對rgb三個顏色通道各自歸一化處理的緣故,有論文提到了一些改善方法,但我發現還是不容樂觀。

        此外,三通道各自歸一化處理後,其顏色均值是接近於128的,如果後面再跟一個指數化操作(對數處理的反操作),將導致影象顏色明顯偏暗,所以這是一般retinex演算法只有對數處理沒有指數處理的緣故。

    所以,我對中心環繞演算法做了一點點改進:

    主要如下:

        1)使用引導濾波來快速估計光照影象,減少光暈的出現,實驗表明,該步驟對色彩保持能力也有一定的提升;

        2)在使用多個尺度運算元進行合成的時候,不是簡單的做均值處理;

        3)在完成retinex處理之後,再做一次簡單的gamma校正,使其均值接近於128。

    下面給實驗結果圖, 可見色彩保持的還不錯哦,對霧霾影象也有較好的效果。

程式採用python實現,未經效能優化,exe中打包了python及numpy wxpython opencv等重量級模組,故體積較大,如防毒軟體誤報為病毒,請信任執行。