『壹』 求均值濾波和中值濾波演算法的MATLAB代碼
5*5的均值濾波代碼
w2=fspecial('average',[5 5]); %% 先定義一個濾波器
h=imfilter(a,w2,'replicate'); %%讓圖像通過濾波器
imshow(h);
imwrite(h,'8.jpg');
中值的暫時還不會
『貳』 請教高手:我用數據採集卡採集到數據之後,需要在matlab中進行濾波去噪,有哪位知道怎麼在matlab中實現
[N,Wc]=buttord()
%估算得到Butterworth低通濾波器的最小階數N和3dB截止頻率Wc
[a,b]=butter(N,Wc); %設計Butterworth低通濾波器
[h,f]=freqz(); %求數字低通濾波器的頻率響應
figure(2); % 打開窗口2
subplot(221); %圖形顯示分割窗口
plot(f,abs(h)); %繪制Butterworth低通濾波器的幅頻響應圖
title(巴氏低通濾波器'');
grid; %繪制帶網格的圖像
sf=filter(a,b,s); %疊加函數S經過低通濾波器以後的新函數
subplot(222);
plot(t,sf); %繪制疊加函數S經過低通濾波器以後的時域圖形
xlabel('時間 (seconds)');
ylabel('時間按幅度');
SF=fft(sf,256); %對疊加函數S經過低通濾波器以後的新函數進行256點的基—2快速傅立葉變換
w= %新信號角頻率
subplot(223);
plot()); %繪制疊加函數S經過低通濾波器以後的頻譜圖
title('低通濾波後的頻譜圖');
%設計高通濾波器
[N,Wc]=buttord()
%估算得到Butterworth高通濾波器的最小階數N和3dB截止頻率Wc
[a,b]=butter(N,Wc,'high'); %設計Butterworth高通濾波器
[h,f]=freqz(); %求數字高通濾波器的頻率響應
figure(3);
subplot(221);
plot()); %繪制Butterworth高通濾波器的幅頻響應圖
title('巴氏高通濾波器');
grid; %繪制帶網格的圖像
sf=filter(); %疊加函數S經過高通濾波器以後的新函數
subplot(222);
plot(t,sf); ;%繪制疊加函數S經過高通濾波器以後的時域圖形
xlabel('Time(seconds)');
ylabel('Time waveform');
w; %新信號角頻率
subplot(223);
plot()); %繪制疊加函數S經過高通濾波器以後的頻譜圖
title('高通濾波後的頻譜圖');
%設計帶通濾波器
[N,Wc]=buttord([)
%估算得到Butterworth帶通濾波器的最小階數N和3dB截止頻率Wc
[a,b]=butter(N,Wc); %設計Butterworth帶通濾波器
[h,f]=freqz(); %求數字帶通濾波器的頻率響應
figure(4);
subplot(221);
plot(f,abs(h)); %繪制Butterworth帶通濾波器的幅頻響應圖
title('butter bandpass filter');
grid; %繪制帶網格的圖像
sf=filter(a,b,s); %疊加函數S經過帶通濾波器以後的新函數
subplot(222);
plot(t,sf); %繪制疊加函數S經過帶通濾波器以後的時域圖形
xlabel('Time(seconds)');
ylabel('Time waveform');
SF=fft(); %對疊加函數S經過帶通濾波器以後的新函數進行256點的基—2快速傅立葉變換
w=( %新信號角頻率
subplot(223);
plot(')); %繪制疊加函數S經過帶通濾波器以後的頻譜圖
title('帶通濾波後的頻譜圖');
『叄』 matlab圖像去噪
你是要用什麼濾波器呢 ,我這里有一個程序,用均值和中值兩種方法:
g=imread('E:\1.jpg'); %讀入圖像的具體位置,
v=imnoise(g,'salt & pepper',0.1);
subplot(2,2,1);
imshow(g)
title('orginal image');
subplot(2,2,2);
imshow(v)
title('noise image');
[h,w]=size(v);
n=9;
f=double(v);
a=ones(n,n);
y=f;
for i=1:h-n+1
for j=1:w-n+1
a=f(i:i+(n-1),j:j+(n-1));
s=sum(sum(a));
y(i+(n-1)/2,j+(n-1)/2)=s/(n*n);
end
end
subplot(2,2,3);
imshow(uint8(y))
title('noise rection by average filter');
x=f;
for i=1:h-n+1
for j=1:w-n+1
c=f(i:i+(n-1),j:j+(n-1));
e=c(1,:);
for u=2:n
e=[e,c(u,:)];
end
mm=median(e);
x (i+(n-1)/2,j+(n-1)/2)=mm;
end
end
subplot(2,2,4);
imshow(uint8(x))
title('noise rection by median filter');
『肆』 編寫用均值濾波去噪的matlab程序,用兩種方法實現.(重謝)
方法一:filter2
clearall;
I=imread('lena.bmp');
%讀入預處理圖像
imshow(I)
%顯示預處理圖像
K1=filter2(fspecial('average',3),I)/255;
%進行3*3均值濾波
K2=filter2(fspecial('average',5),I)/255;
%進行5*5均值濾波
K3=filter2(fspecial('average',7),I)/255;
%進行7*7均值濾波
figure,imshow(K1)
figure,imshow(K2)
figure,imshow(K3)
方法二:雙循環語句,移動平均法
%均值濾波
clc,clear;
f=imread('lena.bmp');
subplot(121),imshow(f),title('原圖');
f1=imnoise(f,'gaussian',0.002,0.0008);
%subplot(222),imshow(f1),title('添加高斯雜訊圖');
k1=floor(3/2)+1;
k2=floor(3/2)+1;
X=f1;
[M,N]=size(X);
uint8Y=zeros(M,N);
funBox=zeros(3,3);
fori=1:M-3
forj=1:N-3
funBox=X(i:i+3,j:j+3);
s=sum(funBox(:));
h=s/9;
Y(i+k1,j+k2)=h;
end;
end;
Y=Y/255;
subplot(122),imshow(Y),title('均值濾波');
實現圖: