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('高斯低通濾波器濾波')