1. 程式人生 > >matlab進行簡單的濾波處理

matlab進行簡單的濾波處理

(1)橫條紋:0_N_Girl_horiz_lines.bmp

方法一:頻域處理

a)陳述:

實驗影象為加入了橫條紋的圖片,首先應該分析圖片的頻譜,觀察頻譜分佈,以確定去除橫條紋的方法.

b)步驟:

①讀出原圖並進行傅立葉變換,顯示頻譜圖片

從頻譜圖分析可知,應該將中間大圓周圍的小亮圓去除,達到去除橫條紋的目的.考慮濾波器的型別,常用的典型濾波器有理想低通濾波器,巴特沃斯低通濾波器,高斯低通濾波器,當巴特沃斯濾波器階數較小時,濾波結果接近於高斯低通濾波器, 當巴特沃斯濾波器階數較大時,濾波結果接近於理想低通濾波器.故可先採用理想低通濾波器和高斯低通濾波器進行處理,觀察處理結果.當然濾波半徑選取也很重要,本題選用濾波半徑d0=30.

②首先採用理想低通濾波器對頻譜進行濾波,然後對濾波結果進行反傅立葉變換,觀察濾波後結果。

  從圖可以看出,經過理想低通濾波器和高斯低通濾波器濾波後,原始頻譜的小亮圓均已去除,但是從圖1.4和圖1.6可以看出,理想低通濾波之後影象的輪廓模糊,而高斯低通濾波之後影象中的橫條紋還在,只是亮度變低了,那麼考慮使用巴特沃斯濾波器進行濾波,既可以接近理想濾波也可以接近高斯濾波的濾波效果。當然此處應該選取接近理想低通濾波器的高階次巴特沃斯濾波器。

③採用不同階次的巴特沃斯濾波器進行濾波,此處選擇階次level=5和level=15.

階次為15時影象輪廓模糊,階次為5時濾波效果較好,且階次為15時巴特沃斯濾波器濾波後頻譜圖1.9與理想低通濾波器濾波後頻譜近似。接下來考慮取巴特沃斯濾波器階次為4,比較階次為4和為5的效果,確定最終濾波方法。

④採用階次level=4的巴特沃斯濾波器進行濾波,選取的原因在於階次為5的濾波器不一定達到最好效果了,而階次低於4之後的階次較小,濾波效果與高斯低通濾波器效果更相濾波階次為4的時候的效果更好,故選取階次為4的巴特沃斯低通濾波器進行濾波,來去除影象中的橫條紋。比較圖1.1和圖1.12可以看出濾波後已完全去除橫條紋,但是影象的清晰度會有一定程度降低。

方法二:空域處理

a) 陳述:

本圖除了考慮在頻域進行處理,還應該考慮空域的規律,讀出影象資訊可以發現,橫條紋的灰度值較高,為255,故可直接考慮在空域處理,去除亮橫條紋。

b) 步驟:

① 讀取灰度資訊,可以看出橫條紋灰度值分佈規律。

②去除灰度值為255的畫素,用鄰近點畫素值代替,即最近鄰插值。

頻率濾波降低了影象的清晰度,但是空域處理保持了目標影象的細節資訊,效果較好。

c)總結:

   對於頻域濾波,對比分析濾波效果可知,對於橫條紋的濾除,採用高階巴特沃斯低通濾波器可取得較好濾波效果,而理想低通濾波器雖然可以去除橫條紋,但是會造成一定的波浪條紋,而高斯低通濾波器的效果卻不佳。且對比發現,雖然高階巴特沃斯低通濾波器與理想低通濾波器效果接近,但是階次越高時越會出現理想低通濾波器的波浪條紋缺點,故階次不宜過高。但是對比頻域濾波和空域濾波發現,在這種規律灰度值的橫條紋噪聲,直接在灰度值上進行處理並進行插值會取得較好效果,且比頻域處理更好,影象的清晰度和細節保持都達到很好效果。


(2)特殊疊加條紋:1_N_Girl_Grad_lines.bmp

a)陳述:觀察圖片分析題目可得到一些處理圖片的思想,由於是特殊疊加條紋,可考慮進行高通濾波,並分析進行高通濾波後的圖片,找到適合的處理方法。還有既然是疊加,則要考慮用減法進行處理。

b)步驟:

① 讀取待處理影象,並進行傅立葉變換,觀察頻譜圖譜。

②對條紋的原始頻譜圖進行高通濾波處理。此處濾波半徑d0=65,濾波方法為高斯高通濾波器。對濾波頻譜進行反傅立葉變換,觀察高通濾波後的影象。

得到了我們意料中的結果,高斯濾波後的結果圖中幾乎只剩下了噪聲條紋,這樣有助於我們進行減法操作,用原始影象減去高通濾波後的條紋影象,觀察效果。當然,由於條紋亮度較暗,我們可以考慮原圖減去二倍條紋灰度,這個減法操作是在空域進行操作,而非頻域操作。

② 空域減法操作,用原圖減去二倍的高斯濾波還原圖。

分析圖可知,已經去除了一部分疊加條紋,圖片質量有一定改善,但是圖片中還存在明暗不一的條紋,還需要進行相應操作。分析圖1.20可考慮,對差值頻譜進行低通濾波處理,濾波半徑不變,選擇理想低通濾波器。

③ 採用理想低通濾波器對差值頻譜進行濾波處理,並且採用傅立葉反變換還原影象,觀察處理後結果。

對比圖中無疊加條紋,並且圖片質量較好,邊緣無明顯模糊情況,故處理較為成功。

c)總結:

   對於這種疊加條紋的處理,分析思路應該時找出噪聲的頻率,還原噪聲,再從疊加圖片中去除噪聲條紋。當然,如果沒有思路的時候就直接濾波,會發現效果很差,那麼就應該深入思考,是不是方向不對,再換個思路處理影象。本體中疊加條紋是在高頻區域,故可先將高頻分離處理,再還原條紋,然後再在空域進行作差,最後觀察效果,如果需要則可再進行一次低通濾波。

濾除下圖中的干擾訊號(2_lena_corrupt.bmp)

a)陳述:首先讀取干擾圖片,為了圖片中的干擾訊號,先進行頻譜分析,觀察頻域干擾訊號的特點,以便於找到合適的濾波方法。

b)步驟:

① 讀取圖片,對圖片進行傅立葉變換,觀察頻域規律。

 分析圖可知,應該去除十字亮線,應該採用低通濾波器。當然低通濾波器有理想低通濾波器,巴特沃斯低通濾波器以及高斯低通濾波器,可通過不同濾波器進行濾波,分析濾波效果。本題中濾波半徑d0=70。

② 理想低通濾波器濾波對原始頻譜進行濾波處理

觀察圖與原始頻譜比較可知,理想低通濾波器去掉了十字亮點,也去掉了一些有用頻譜,經過理想低通濾波器濾波之後,雖然噪聲去除,但是圖片周圍出席波浪紋,濾波效果不是很好。

③ 高斯低通濾波器對原始頻譜進行濾波處理

觀察圖,與原始頻譜比較可知,高斯低通濾波器去掉了十字亮點,並且目標頻譜儲存較為完整,經過理想低通濾波器濾波之後,噪聲去除,且濾波效果很好,影象略有模糊,但是模糊效應是濾波本來就存在的一個結果。

④ 巴特沃斯低通濾波器對原始頻譜進行濾波處理,此處選擇低階次來接近高斯濾波效果,通過選擇level=3,對比巴特沃斯低通濾波器與高斯低通濾波器的濾波效果。

從圖對比處理後的頻譜圖,可知高斯濾波後保留的原始資訊較多,分析可知,巴特沃斯低通濾波器去除了噪音,發現高斯低通濾波器濾波結果比巴特沃斯濾波器濾波效果好,清晰度較高。故本題採用高斯低通濾波器濾除噪聲,並保持較好的目標資訊。

c)總結:

   對比分析濾波效果可知,一般的噪聲影象採用高斯低通濾波器可取得較好濾波效果,而理想低通濾波器雖然可以去除噪聲,但是會造成一定的波浪條紋,而低階巴特沃斯低通濾波器可接近高斯濾波器效果,但是清晰度比高斯濾波差。故本題採用高斯低通濾波器進行濾波。

相關程式碼

1.  利用傅立葉變換去除下面影象中的條紋

(1)橫條紋:0_N_Girl_horiz_lines.bmp

%頻域處理

img=imread('D:/VisualStudio 2015/0_N_Girl_horiz_lines.bmp');

%讀取原影象

figure(1)

imshow(img)

title('原圖')

fftimg=fft2(img);%二維離散傅立葉變換

shiftimg=fftshift(fftimg);%直流分量移到頻譜中心

re=real(shiftimg);%取傅立葉變換的實部

logfftimg1=log(re);

figure(2)

imshow(logfftimg1,[8,10])

title('原圖頻譜')

[m,n]=size(shiftimg);%影象尺寸

n1=floor(m/2);

n2=floor(n/2);

d0=30;%截至半徑

%理想濾波器

shiftimg1=shiftimg;

fori=1:m

    for j=1:n

        if ((i-n1)^2+(j-n2)^2>=d0^2)

            shiftimg1(i,j)=0;

        end

    end

end

re1=real(shiftimg1);%取傅立葉變換的實部

logfftimg1=log(re1);

figure(3)

imshow(logfftimg1,[8,10])

title('理想濾波器頻譜')

shiftimg1=ifftshift(shiftimg1);

ifftimg1=uint8(real(ifft2(shiftimg1)));

figure(4)

imshow(ifftimg1);

title('理想濾波器濾波')

level=4;%2級巴特沃斯濾波器 2時接近高斯,5時接近理想,但是數值更大時會有模糊效應

%巴特沃斯低通

shiftimg2=shiftimg;

fori=1:m

    for j=1:n

       d=sqrt((i-n1)^2+(j-n2)^2);

       h=1/(1+(d/d0)^(2*level));

       shiftimg2(i,j)=h*shiftimg2(i,j);

    end

end

re2=real(shiftimg2);%取傅立葉變換的實部

logfftimg2=log(re2);

figure(5)

imshow(logfftimg2,[8,10])

title('巴特沃斯低通濾波器頻譜')

shiftimg2=ifftshift(shiftimg2);

ifftimg2=uint8(real(ifft2(shiftimg2)));

figure(6)

imshow(ifftimg2);

title('巴特沃斯低通濾波器濾波')

%高斯低通

shiftimg4=shiftimg;

fori=1:m

    for j=1:n

       d=sqrt((i-n1)^2+(j-n2)^2);

       h=exp(-1/2*(d^2/d0^2));

       shiftimg4(i,j)=h*shiftimg4(i,j);

    end

end

re4=real(shiftimg4);%取傅立葉變換的實部

logfftimg4=log(re4);

figure(7)

imshow(logfftimg4,[8,10])

title('高斯低通濾波器頻譜')

shiftimg4=ifftshift(shiftimg4);

ifftimg4=uint8(real(ifft2(shiftimg4)));

figure(8)

imshow(ifftimg4);

title('高斯低通濾波器濾波')

%空域處理

[p,q]=size(img);

kimg=img;

fori=1:p

    for j=1:q

        if (kimg(i,j)==255)

            if(i>1)

              kimg(i,j)=kimg(i-1,j);

            else

                kimg(i,j)=kimg(i+1,j);

            end

        end

    end

end

figure

imshow(kimg);

title('空域去橫條紋')

(2)特殊疊加條紋:1_N_Girl_Grad_lines.bmp

img=imread('D:/VisualStudio 2015/1_N_Girl_Grad_lines.bmp');%讀取原影象

figure

imshow(img)

title('原圖')

fftimg=fft2(img);%二維離散傅立葉變換

shiftimg=fftshift(fftimg);%直流分量移到頻譜中心

re=real(shiftimg);%取傅立葉變換的實部

logfftimg1=log(re);

figure

imshow(logfftimg1,[8,10])

title('原圖頻譜')

[m,n]=size(shiftimg);%影象尺寸

n1=floor(m/2);

n2=floor(n/2);

d0=65;%截止半徑

%高斯高通

shiftimg5=shiftimg;

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));

       shiftimg5(i,j)=h*shiftimg5(i,j);

    end

end

re5=real(shiftimg5);%取傅立葉變換的實部

logfftimg5=log(re5);

figure

imshow(logfftimg5,[8,10])

title('高斯高通濾波器頻譜')

shiftimg5=ifftshift(shiftimg5);

ifftimg5=uint8(real(ifft2(shiftimg5)));

figure

imshow(ifftimg5);

title('高斯高通濾波器濾波')

%影象作差

sub_img=img-2*ifftimg5;

figure

imshow(sub_img)

title('作差結果圖')

re=real(shiftimg);%取傅立葉變換的實部

logfftimg1=log(re);

figure

imshow(logfftimg1,[8,10])

title('原圖頻譜')

sub_fftimg=fft2(sub_img);%二維離散傅立葉變換

sub_shiftimg=fftshift(sub_fftimg);%直流分量移到頻譜中心

sub_re1=real(sub_shiftimg);%取傅立葉變換的實部

sub_logfftimg1=log(sub_re1);

figure

imshow(sub_logfftimg1,[8,10])

title('作差後頻譜')

%理想低通

for i=1:m

    for j=1:n

      if((i-n1)^2+(j-n2)^2>=d0^2);

          sub_shiftimg(i,j)=0;

      end

    end

end

sub_re=real(sub_shiftimg);%取傅立葉變換的實部

sub_logfftimg=log(sub_re);

figure

imshow(sub_logfftimg,[8,10])

title('理想低通濾波器頻譜')

sub_shiftimg=ifftshift(sub_shiftimg);

sub_ifftimg=uint8(real(ifft2(sub_shiftimg)));

figure

imshow(sub_ifftimg);

title('理想低通濾波器濾波')

2.濾除下圖中的干擾訊號(2_lena_corrupt.bmp)

img=imread('D:/VisualStudio 2015/2_lena_corrupt.bmp');%讀取原影象

figure(1)

imshow(img)

title('原圖')

fftimg=fft2(img);%二維離散傅立葉變換

shiftimg=fftshift(fftimg);%直流分量移到頻譜中心

re=real(shiftimg);%取傅立葉變換的實部

logfftimg1=log(re);

figure(2)

imshow(logfftimg1,[8,10])

title('原圖頻譜')

[m,n]=size(shiftimg);%影象尺寸

n1=floor(m/2);

n2=floor(n/2);

d0=70;%截至半徑

%理想濾波器

shiftimg1=shiftimg;

fori=1:m

    for j=1:n

        if ((i-n1)^2+(j-n2)^2>=d0^2)

            shiftimg1(i,j)=0;

        end

    end

end

re1=real(shiftimg1);%取傅立葉變換的實部

logfftimg1=log(re1);

figure(3)

imshow(logfftimg1,[8,10])

title('理想濾波器頻譜')

shiftimg1=ifftshift(shiftimg1);

ifftimg1=uint8(real(ifft2(shiftimg1)));

figure(4)

imshow(ifftimg1);

title('理想濾波器濾波')

level=3;%3級巴特沃斯濾波器

%巴特沃斯低通

shiftimg2=shiftimg;

fori=1:m

    for j=1:n

       d=sqrt((i-n1)^2+(j-n2)^2);

       h=1/(1+(d/d0)^(2*level));

       shiftimg2(i,j)=h*shiftimg2(i,j);

    end

end

re2=real(shiftimg2);%取傅立葉變換的實部

logfftimg2=log(re2);

figure(5)

imshow(logfftimg2,[8,10])

title('巴特沃斯低通濾波器頻譜')

shiftimg2=ifftshift(shiftimg2);

ifftimg2=uint8(real(ifft2(shiftimg2)));

figure(6)

imshow(ifftimg2);

title('巴特沃斯低通濾波器濾波')

%高斯低通

shiftimg4=shiftimg;

fori=1:m

    for j=1:n

       d=sqrt((i-n1)^2+(j-n2)^2);

       h=exp(-1/2*(d^2/d0^2));

       shiftimg4(i,j)=h*shiftimg4(i,j);

    end

end

re4=real(shiftimg4);%取傅立葉變換的實部

logfftimg4=log(re4);

figure(7)

imshow(logfftimg4,[8,10])

title('高斯低通濾波器頻譜')

shiftimg4=ifftshift(shiftimg4);

ifftimg4=uint8(real(ifft2(shiftimg4)));

figure(8)

imshow(ifftimg4);

title('高斯低通濾波器濾波')