在生活中會得到這樣的圖像,它的動態范圍很大,而我們感興趣的部分的灰度又很暗,圖像細節沒有辦法辨認,采用一般的灰度級線性變換法是不行的。圖像的同態濾波屬於圖像頻率域處理范疇,其作用是對圖像灰度范圍進行調整,通過消除圖像上照明不均的問題,增強暗區的圖像細節,同時又不損失亮區的圖像細節. 我們人眼能分別得出圖像的灰度不僅僅是由於光照函數(照射分量)決定,而且還與反射函數(反射分量)有關,反射函數反映出圖像的具體內容。光照強度一般具有一致性,在空間上通常會有緩慢變化的性質,在傅立葉變換下變現為低頻分量,然而不一樣的材料的反射率差異較大,經常會引起反射光的急劇變化,從而使圖像的灰度值發生變化,這種變化與高低頻分量有關。為了消除不均勻照度的影響,增強圖像的高頻部分的細節,可以采用建立在頻域的同態濾波器對光照不足或者有光照變化的圖像進行處理,可以盡量減少因光照不足引起的圖像質量下降,並對感興趣的景物進行有效增強,這樣就在很大程度上做到了原圖像的圖像增強。
同態濾波是一種在頻域中進行的圖像對比度增強和壓縮圖像亮度范圍的特殊方法。同態濾波器能夠減少低頻並且增加高頻,從而能減少光照變化並銳化邊緣細節。圖像的同態濾波技術的依據是圖像獲取過程中的照明反射成像原理。它屬於頻域處理,作用是對圖像灰度范圍進行調整,通過消除圖像上照明不均的問題。非線性濾波器能夠在很好地保護細節的同時, 去除信號中的噪聲,同態濾波器就是一種非線性濾波器,其處理是一種基於特征的對比度增強方法,主要用於減少由於光照不均勻引起的圖像降質,並對感興趣的景物進行有效地增強。
同台系統適用於服從廣義疊加原理,輸入和輸出之間可以用線性變化表示的系統。圖像的同態濾波是基於以入射光和反射光為基礎的圖像模型上的,如果把圖像函數表示為光照函數,即照射分量
與反射分量
兩個分量的乘積,那么圖像的模型可以表示為
,其中
,
。
的性質取決於成像物體的表面特性。通過對光照分量和反射分量的研究可知,光照分量一般反映灰度的恆定分量,相當於頻域中的低頻信息,減弱入射光就可以起到縮小圖像灰度范圍的作用;而反射光與物體的邊界特性是密切相關的,相當於頻域中的高頻信息,增強反射光就可以起到提高圖像對比度的作用。因此,同態濾波器的傳遞函數一般在低頻部分小於1,高頻部分大於1。
進行同態濾波,首先要對原圖像取對數,目的是使得圖像模型中的乘法運算轉化為簡單的加法運算:
再對對數函數做傅立葉變換,目的是將圖像轉換到頻域:
同態濾波器的傳遞函數H(U,V)
選擇適當的傳遞函數,壓縮照射分量的變化范圍,削弱
,增強反射分量
的對比度,提升
,增強高頻分量,即確定一個合適的
。由上分析可知
的大致形狀如上圖所示。
同態濾波的原理框圖
算法實現及結果分析
核心算法
void homomorphicFiltering(unsigned char* des, const unsigned char* src, int height, int width, double cutoff, int n, double cvar) { int x,y; int ewidth,eheight; Complex* temp = new Complex[width * height]; //圖像的復數形式 Complex* eimg1; //擴展后圖像(適應FFT的大小要求) Complex* eimg2; //擴展后圖像 Complex* filter; //濾波器 //1.轉換圖像形式,並取log for(y = 0; y < height; y++) { for(x = 0; x < width; x++) { temp[y * width + x].real = log((double)src[y * width + x] + 1); temp[y * width + x].imag = 0; } } //2.擴展源圖像 expand(&eimg1, &ewidth, &eheight, temp, width, height); eimg2 = new Complex[ewidth * eheight]; filter = new Complex[ewidth * eheight]; //3.獲得濾波器 getButterworthFilter(filter, ewidth, eheight, cutoff, n); //4.FFT FFT2D(eimg2, eimg1, ewidth, eheight); //5.濾波 filtering(eimg2, ewidth, eheight, filter); //6.IFFT IFFT2D(eimg1, eimg2, ewidth, eheight); //7.還原並取exp for(y = 0; y < height; y++) { for(x = 0; x < width; x++) { temp[y * width + x].real = exp(eimg1[y * ewidth + x].real); } } //8.歸一化 clipNormalization(temp, width, height, cvar); //9.轉換為圖像形式 for(y = 0; y < height; y++) { for(x = 0; x < width; x++) { des[y * width + x] = (unsigned char)temp[y * width + x].real; } } }
從實驗結果可知:在頻域內的同態濾波方法只要選取適當的濾波器參數,就可以在增強圖像高頻信息的同時保留部分低頻信息,達到壓縮圖像灰度的動態范圍,增強圖像的對比度的效果。本文通過光照場的頻譜分析,能快速准確地選取濾波器參數。改進的同同態濾波器的參數獲取辦法,有利於快速獲得增強效果好的參數,對光照不均勻的圖像的補償效果更明顯。