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

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

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

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

瞭解了二值圖的腐蝕膨脹運算,咱們就能夠把腐蝕膨脹運算推廣到任意的灰度圖。對於任意灰度圖,腐蝕運算就是求結構元素範圍內(領域)最小值,即腐蝕運算使領域中心值變爲爲結構元素內的最小像素值。好比,結構元素爲矩形領域,則腐蝕運算對每一個像素求取以它爲中心的矩形領域內的最小像素值。相似的,膨脹運算就是求領域最大值。spa

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

    

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

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

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

    

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

取不一樣的半徑能夠產生不一樣的效果,感受有點像油畫似的。get

記圖像原圖爲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 

相關文章
相關標籤/搜索