天天看點

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

1、頻率濾波

圖像的空間域濾波:用各種模闆直接與圖像進行卷積運算,實作對圖像的處理,這種方法直接對圖像空間操作,操作簡單。圖像處理不僅可以在空間域進行還可以在頻率域進行,把空間域的圖像開窗卷積形式,變換得到頻率域的矩陣點乘形式得到比較好的效果。圖像頻域濾波,先把圖像轉換到頻域空間,然後對不同的頻率點進行濾波,使用信号處理的技術,對圖像實作濾波。比如實作圖像的輪廓提取,在空間域濾波中我們使用一個拉普拉斯模闆就可以提取,而在頻域内,我們使用一個高通濾波模闆,可以實作輪廓的提取。

圖像特征與像素點數值的關系:

圖像尺寸418*564,如果把每一行所有像素,一行564個點的灰階作為一維向量畫圖,取前三行畫成三條曲線,就得到了下面的圖形。

subplot(2,1,1);imshow(img), title('原始圖像');line1 = img(1, :);line2 = img(2, :);line3 = img(3, :);subplot(2,1,2);hold onplot(line1, 'r');plot(line2, 'g');plot(line3, 'b');
           

輸出結果如下圖。

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

圖像前幾行的特征如下圖(為了友善觀察提取了不止三行):

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

從圖像矩陣前幾行的像素特征可見,圖像平坦的地方像素曲線也平坦,圖像亮的地方就是圖像像素劇烈變化的地方,圖像像素值發生較大差異的地方也是圖像發生突變的地方,這些位置一般就是圖像輪廓。圖像的頻率展現了圖像中灰階變化劇烈程度,是灰階在平面空間上的梯度。是以前面講的空域濾波,可以使用平滑來濾除噪聲實作平滑,從上面曲線圖像上看,可以按照信号處理思想來了解,平滑濾波就是頻率低通。對應的,頻率高通濾波就是空域的提取邊界。

2、圖像傅裡葉變換

傅裡葉變換可以将一個時域信号轉換成在不同頻率下對應的振幅及相位,其頻譜就是時域信号在頻域下的表現,而反傅裡葉變換可以将頻譜再轉換回時域的信号。

imgPath = 'E:opencv_picsrc_picpic4.bmp';img = imread(imgPath);img=rgb2gray(img); f=fft2(im2double(img)); %FFTF=f; %FFT頻譜T=log(F+1); %頻譜對數變換subplot(1,2,1),imshow(img),title('原始圖像');subplot(1,2,2),imshow(T,[]),title('原始圖像其頻譜圖');
           

輸出結果如下,幅度圖在四個角出現亮光。因為實信号以fs為采樣速率的信号在 fs/2處混疊,是以實信号fft的結果中前半部分對應[0, fs/2],後半部分對應[ -fs/2, 0]。橫向和縱向都需要把頻率轉換到[ -fs/2, fs/2]的區間,可以使用fftshift函數。

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

在數字圖像進行中,常常需要将F(u,v)的原點移到N*N頻域的中心,以便能清楚地分析傅裡葉譜的情況,平移前空域、頻域原點均在左上方。而fftshift的作用就是這樣,将0頻譜移到正中心。

Y = fftshift(X) 通過将零頻分量移動到數組中心,重新排列傅裡葉變換 X。

如果 X 是向量,則 fftshift 會将 X 的左右兩半部分進行交換。

如果 X 是矩陣,則 fftshift 會将 X 的第一象限與第三象限交換,将第二象限與第四象限交換。

如果 X 是多元數組,則 fftshift 會沿每個次元交換 X 的半空間。

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換
a =     1     2     3     4     6     7     8     9>> fftshift(a)ans =     8     9     6     7     3     4     1     2
           

平移後的圖:

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

傅裡葉變換的能量集中在頻率很小的圓内,當D0增大時能量衰減很快,高頻部分雖然攜帶的能量很少,但是包含豐富的邊界和細節資訊,是以當截止頻率D0變小時,雖然亮度足夠(因能量損失不大),但圖像變模糊。

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

3、頻域濾波

傅裡葉變換可以把圖像從空域變換到頻域,而傅裡葉反變換可以将圖像的頻譜變換為空域圖像。可以利用圖像空域和頻域之間的對應關系,嘗試将空域卷積濾波變換為頻域濾波,而後再将頻域濾波處理後的圖像反變換回空間域,進而達到圖像增強的目的。

G=imnoise(img,'gaussian', 0, 0.05);%模拟均值為0方差為0.05的高斯噪聲,H=fft2(im2double(G)); %FFTH=fftshift(H); %FFT頻譜平移T=log(abs(H)); %頻譜對數變換subplot(2,2,1), imshow(G),title('添加高斯噪聲圖像');subplot(2,2,2),imshow(T, []),title('頻譜圖');
           
matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

使用傅裡葉變換得到圖像的頻域幅度,應用傅裡葉反變換得到空域圖像.

img2 = (ifft2(ifftshift(H))); %===頻域的圖反變換到空域img3 = im2uint8(mat2gray(img2)); %===取其灰階圖subplot(2,2,3),imshow(img3);title('anti-Fourier');
           

反變換效果如下圖。

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

那麼就可以在頻率對圖像進行濾波,然後反變換回空域就得到濾波後的圖像。頻率圖可見在圖像中心,是頻率為0位置,是以如果限定隻有低頻通過則為低通,如果抑制頻譜圖中心位置,則是高通。可見圖像在頻域濾波是非常直覺的。

1)低通濾波器:

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

其中D(u,v)為頻率域上(u,v)點到中心的距離,D0由自己設定.

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

2)高通濾波器:

高通濾波器同低通濾波器非常類似,隻不過二者通過的波正好是相反的.

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換
matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

3)高斯低通濾波

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換
matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

4)高斯高通濾波

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換
matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

高斯頻率低通濾波:

S=fftshift(fft2(G)); %G是添加高斯噪聲的圖像[M,N]=size(S);                                          d0=5; %GLPF濾波,d0=5,15,30                    n1=floor(M/2);                          n2=floor(N/2);                           for i=1:M     for j=1:N        d=sqrt((i-n1)^2+(j-n2)^2);                 h=1*exp(-1/2*(d^2/d0^2));          S(i,j)=h*S(i,j);                       endend S=ifftshift(S);                           S=uint8(ifft2(S));    subplot(2,2,4),imshow(S),title('高斯低通濾波圖像');
           

輸出圖像如下:

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

高斯濾波函數标準差變大,則高斯函數的傅裡葉變換圖像頻率範圍變寬,允許通過的頻率範圍變大,對應空域允許通過的圖像變換更加多,可以允許的噪聲更多。相反,如果标準差變小,頻域範圍變窄,允許通過的頻率範圍變小,對應空域對低頻要求更加嚴格被抑制的高頻更多,是以圖像更加平滑,可能出現模糊現象。下面展示了不同的σ标準差情況下的濾波效果。

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

改為高通濾波,結果如下圖:

matlab 二維高斯濾波 傅裡葉_圖像頻域濾波與傅裡葉變換

繼續閱讀