一種基於腐蝕膨脹運算實現的局部自適應對比度增強算法


腐蝕膨脹運算是數學形態學中的基本運算。數學形態學的基礎是集合論,用來表示和描述區域性狀很有用。它的應用可以簡化圖像數據,保持它們的基本形狀特性並去除不相干的結構。形態學有四個基本運算:腐蝕,膨脹,開運算和比運算。這里我們實現一種基於腐蝕膨脹運算實現的自適應對比度增強算法。

首先我們看一下腐蝕和膨脹運算,他們是應用於二值圖像的。通過一個探針,也是一個集合,稱為結構元素,對二值圖像(也是一個集合)進行變換,以突出所需要的信息。結構元素的大小和形狀會影響圖像處理的結果,他們由分析的目的來確定。

腐蝕運算用來收縮或者細化對象,結構元素的大小和形狀決定了收縮的程度和范圍。腐蝕運算用某個結構元素對二值圖像進行探測,找出圖像內部可以容納該結構元素的區域。它是一種消除邊界點,是邊界向內部收縮的過程。具體的數學公式不去探討,腐蝕運算是對於二值圖像的每個點,如果在結構元素范圍內的所有點都為1,則該點為1。否則為0。而膨脹運算是使二值圖像加長或變粗的操作。對於二值圖像的每個點,在結構元素范圍內的所有點如果都為0,則該點為0。否則為1。可見腐蝕和膨脹運算是對於二值圖像中的亮點(值為1)而言的。腐蝕操作后,圖像中的亮點范圍縮減。相反,膨脹元算后,亮點的范圍增大。

了解了二值圖的腐蝕膨脹運算,我們就可以把腐蝕膨脹運算推廣到任意的灰度圖。對於任意灰度圖,腐蝕運算就是求結構元素范圍內(領域)最小值,即腐蝕運算使領域中心值變為為結構元素內的最小像素值。比如,結構元素為矩形領域,則腐蝕運算對每個像素求取以它為中心的矩形領域內的最小像素值。類似的,膨脹運算就是求領域最大值。

簡單起見,以方形領域為結構元素。其算法和領域均值和領域中值的算法類似,可以用領域直方圖更新算法來優化。下面是對灰度圖像的腐蝕膨脹結果。

     

                            原圖                                                           領域半徑2的亮度通道腐蝕結果                                      領域半徑2的亮度通道膨脹結果

對於任意灰度來說,膨脹腐蝕運算就是對白色來說的。膨脹運算使得亮部增加,也就是白色的范圍增大,圖像中的筆畫變得粗大。反之腐蝕運算使得亮部減少,白色范圍縮減,筆畫變得細小。

下面是對彩色圖像亮度通道腐蝕膨脹運算結果。

     

                                原圖                                                                             領域半徑5的亮度通道腐蝕結果                                                  領域半徑5的亮度通道膨脹結果

取不同的半徑可以產生不同的效果,感覺有點像油畫似的。

記圖像原圖為I,對圖像的腐蝕運算記為E(I),膨脹運算記為D(I)。既然腐蝕運算使得亮部減少,保留了局部最暗值,那么原圖像和腐蝕結果的差值

 為局部亮斑的圖像。同理膨脹運算使得亮部增加,保留了局部最亮值,那么

 

則為局部暗斑的圖像。注意這里的局部二字,所謂的亮斑和暗斑都是限定在這個所謂的局部(領域)里面的。

對比度增強,簡單的說就是讓圖像中亮的地方更亮,暗的地方更暗,拉大對比度。既然我們得到了局部亮斑P1和局部暗斑P2,那么對比度增強運算可以表示為結果圖像,a1,a2為控制系數,分別控制要增強的局部亮部和暗部的程度,使得在原圖的基礎上,亮的地方(P1)更亮,暗的地方(P2)更暗。

到這里,只要用戶給出不同的a1,a2,就可以實現對比度增強了。但是要做到算法的自適應,a1和a2就不能是全局的一個固定的常數。那么怎么來實現a1和a2的自適應呢?我們知道,一般傳統自適應對比度增強算法為了達到自適應的目的,控制參數是由局部均方差來計算的。局部均方差的大小反映了局部的像素和均值的偏離程度。均方差越大,像素偏離均值越大,說明局部原本的對比度就比較大,那么對比度增強的幅度就不需要很大。反之,均方差小,說明原本對比度小,對比度增強的幅度就要大一些。在這里,借鑒這種思想,仿照傳統的用均方差來做自適應的對比度增強方法,使控制系數也能達到自適應的目的。

但是考慮到腐蝕和膨脹運算不是計算的期望值,這里不是計算對於局部均值的偏差,所以不能直接應用局部均方差。這里要計算的是對指定值(局部最大值或者最小值)的偏差,可以把要計算的均方差稱作偽均方差,或者偏均方差。偏方差為

 

這樣局部偏方差可以通過這個公式得出。其中前兩項求和為領域平方和,以及領域和。這兩項求和可以用積分圖來計算。不過要注意平方積分圖值會很大,如果領域半徑很大的話,需要相應改變數據類型以避免發生溢出。如果是為a1求偏方差,則e為領域最小值。如果是為a2求偏方差,則e為領域最大值。均偏方差就是偏方差的平方根。

 

 

 

AdAe是輸入參數,分別控制膨脹腐蝕對比度增強的數量。那么最后對比度增強的圖像公式是

 

 

 

Ae實際上控制了亮部增強的數量,數值越大,圖像中亮的地方越亮,我把它稱作高光數量。Ad實際上控制了暗部增強的數量,這個數值越大,圖像中黑的地方越黑,我把它稱作暗影數量。下面是一些圖片用這種對比度增強的結果。

  

                                 原圖                                                     高光(腐蝕)半徑200,增強幅度50,暗影(膨脹)半徑75,增強幅度10

  

                             原圖                                                   高光(腐蝕)半徑116,增強幅度32,暗影(膨脹)半徑79,增強幅度76

可以看到效果還是不錯的。相比於通常的自適應對比度增強算法,這種應用腐蝕膨脹運算的自適應對比度增強算法的最大優點是可以對圖像的亮部和暗部分別控制進行對比度增強。有些圖像可能整體集中於偏亮或者偏暗的部分,如果用通常的自適應對比度增強算法,它是對亮部暗部統一操作的,也就是說可以認為它對亮部和暗部的擴展是一樣程度的。比如如果圖像整體偏暗,可能亮部的對比度延展還沒有達到需要,暗部的對比度可能就已經調整的太暗了,使很多比較暗的像素下溢出了,也就是全變成黑色了,這是我們不希望的。而使用這種應用腐蝕膨脹運算的自適應對比度增強算法,就可以控制暗部的對比度保持一個較小的擴展量,甚至不擴展(Ad為0),而亮部可以應用較大的對比度擴展量,從而達到我們的要求。下圖是對一幅圖像分別應用傳統的自適應對比度增強算法和應用膨脹腐蝕的自適應對比度增強算法的比較。

  

                                   原圖                                                                  傳統自適應對比度增強半徑100,增強幅度50

原圖整體比較偏暗,使用傳統的自適應對比度增強,亮部和暗部擴展量是一樣的。當對比度增強幅度為50的時候,原來圖像中較暗的部分很多已經產生或者接近下溢出了,暗部的細節根本就已經分辨不出來了。

  

高光(腐蝕)半徑100,增強幅度50,暗影(膨脹)半徑150,增強幅度10     高光(腐蝕)半徑100,增強幅度90,暗影(膨脹)半徑150,增強幅度10

而采用基於膨脹腐蝕的局部自適應對比度增強,保持高光增強幅度50不變的情況下,減少暗影增強幅度,完全減少了暗像素下溢出的可能,整體表現情況要好很多。在亮部調整還有很多余量的情況下,保持暗部對比度增強不變,還可以根據需要繼續提高亮部的對比度幅度。

分享一個實現這種基於膨脹腐蝕的局部自適應對比度增強算法的windows程序,可以看看效果。

http://files.cnblogs.com/files/mightycode/EDcontrast.rar 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM