❶ 用MATLAB分別寫中直濾波和均值濾波程序,要求不用函數!老師布置的作業,明天交 謝謝
clear;
close all;
I = imread('eight.tif');
J = imnoise(I,'salt & pepper',0.02);
K = medfilt2(J);
imshow(J);title('雜訊干擾圖像')
figure, imshow(K);title('medfilt2濾波圖像')
X=J;a=2;b=2;
k=floor(a*b/2)+1;
[M,N]=size(X);
uint8 Y=zeros(M,N);
funBox=zeros(a,b);
temp=zeros(a*b);
for i=1:M-a
for j=1:N-b
funBox=X(i:i+a,j:j+b);
temp=funBox(:);
tempSort=sort(temp);
Y(i,j)=tempSort(k);
end;
end;
figure, imshow(Y);title('自編程序濾波圖像')
clear;
close all;
c=imread('123.png'); %把彩色圖片轉化成灰度圖片,256級
figure,imshow(c),title('原始圖象'); %顯示原始圖象
g=imnoise(c,'gaussian',0.1,0.002); %加入高斯雜訊
figure,imshow(g),title('加入高斯雜訊之後的圖象'); %顯示加入高斯雜訊之後的圖象
%實驗步驟二:用系統預定義濾波器進行均值濾波
n=1;
A=fspecial('average',n);%生成系統預定義的3X3濾波器
Y=filter2(A,g)/255; %用生成的濾波器進行濾波,並歸一化
figure,imshow(Y),title('系統函數濾波圖像'); %顯示濾波後的圖象
a(1:n,1:n)=1; %a即n×n模板,元素全是1
p=size(g); %輸入圖像是p×q的,且p>n,q>n
x1=double(g);
x2=x1;
%A(a:b,c:d)表示A矩陣的第a到b行,第c到d列的所有元素
for i=1:p(1)-n+1
for j=1:p(2)-n+1
c=x1(i:i+(n-1),j:j+(n-1)).*a; %取出x1中從(i,j)開始的n行n列元素與模板相乘
s=sum(sum(c)); %求c矩陣(即模板)中各元素之和
x2(i+(n-1)/2,j+(n-1)/2)=s/(n*n); %將模板各元素的均值賦給模板中心位置的元素
end
end
%未被賦值的元素取原值
d=uint8(x2);
%實驗步驟三:用自己的編寫的函數進行均值濾波
%調用自編函數進行均值濾波,n為模板大小
figure,imshow(d),title('自編程序濾波圖像'); %顯示濾波後的圖象
❷ 在matlab中,中值濾波函數怎麼編,求代碼
%中值濾波,以某點前n個點的中值作為專該點的估計值
functiony=zhong(x,n)%x為列向屬量
m=length(x);
y=zeros(m,1);
fori=1:n
y(i,1)=median(x(1:i,1:1));
end
fori=n+1:m
y(i,1)=median(x(i-n:i-1,1:1));
end
plot((1:m),x,'-b');holdon
plot((1:m),y,'-r')
❸ 如何用MATLAB編寫一個程序實現帶濾波器,MATLAB程序語言越簡單越好,需要調試成功的,謝謝
用C語言(或MATLAB
語言)編寫FFT程序時,要求採用人機界面形式:
N
,
T
,
f
變數均由鍵盤輸入,補零或不補零要求設置一開關來選擇。
❹ 用matlab編寫使用二維高斯低通濾波器的函數,使用大小為3*3,標准差分別為0.5,1.5,2.5
高斯低通濾波對圖像進行低通濾波代碼,這個是灰度圖像的
彩色圖像就是取出RGB三個分量進行濾波再整合
I1=imread('flower.jpg'); %讀取圖像
I=rgb2gray(I1); %將圖像變為灰度圖象
%將灰度圖像的二維不連續Frourier變換的零頻率成分移到頻譜的中心
s=fftshift(fft2(I));
[M,N]=size(s); %分別返回s的行數到M中,列數到N中
n=2; %對n賦初值
%GLPF濾波,d0=5,15,30(程序中以d0=30為例)
d0=30; %初始化d0
n1=floor(M/2); %對M/2進行取整
n2=floor(N/2); %對N/2進行取整
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %點(i,j)到傅立葉變換中心的距離
h=1*exp(-1/2*(d^2/d0^2)); %GLPF濾波函數
s(i,j)=h*s(i,j); %GLPF濾波後的頻域表示
end
end
s=ifftshift(s); %對s進行反FFT移動
%對s進行二維反離散的Fourier變換後,取復數的實部轉化為無符號8位整數
s=uint8(real(ifft2(s)));
figure; %創建圖形圖像對象
imshow(s); %顯示GLPF濾波處理後的圖像
title('GLPF濾波(d0=30)'); %為經GLPF濾波後的圖像添加標題
❺ 編寫用均值濾波去噪的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('均值濾波');
實現圖:
❻ 急!Matlab裡面模擬濾波器函數怎麼使用啊謝謝!
你得到系數a,b後,你信號也知道吧,假設是x,然後你就用y=filter(b,a,x);
我當時學時也很困惑怎麼用,後來我做的嘗試,我給你一個例子看看吧,是我學習時自己寫的
設計一個高通濾波器,並檢驗它的性能
采樣率為10kHZ
阻帶邊緣為1.5Khz,衰減為40bB
通帶邊緣為2kHz,波紋為3Db
>>Fs=1e4;
>>fs=1.5e3;
>>fp=2e3;
>>As=40;
>>Rp=3;
>>wp=2*fp/Fs;
>>ws=2*fs/Fs;
>>[N,wn]=cheb2ord(wp,ws,Rp,As);
>>[b,a]=cheby2(N,As,wn,'high');
>>[db,mag,pha,grd,w]=freqz_m(b,a);
>> subplot(2,2,1);plot(w/pi,mag);
>> axis([0,1,0,1]);
>> setX([0 0.3 0.4 1]);
>>setY([0.01 0.7279 1])
>> title('Magnitude Response');
>> subplot(2,2,2);plot(w/pi,db);
>> axis([0 1 -70 0])
>> setX([0 0.3 0.4 1])
>> setY([-40 -2.7589])
>> title('Magnitude Response in dB');
然後給你一個信號x=cos(0.2*pi*n);
>>n=0:200;
>>x=cos(0.6*pi*n);
>>y=filter(b,a,x);
>>subplot(2,2,3);plot(n,x);
>>subplot(2,2,4);plot(n,y);
>>x1=fft(x,201);
>>x11=abs(x1);
>>subplot(2,2,1);stem(n,x11);
>>y1=fft(y,201);
>>y11=abs(y1);
>>subplot(2,2,2);stem(n,y11);
>>setX([0 60 140 201])
>>title('FFT of y');
>>subplot(2,2,1);stem(n,x11);
>>setX([0 60 140 201])
>>title('FFT of x');
>>g=x11-y11;
>>subplot(2,2,3);stem(n,g);
你運行一下,就可以看到結果,剛好把此信號濾掉
給你一個設計思路,你改變截止頻率和阻帶衰減就可以了
>> %假設截止頻率為W,我隨便定義一下
>> %比如wp=0.3*pi;ws=0.4*pi
>> wp=0.3*pi;ws=0.4*pi;
>> %阻帶衰減為50分貝
>> %通帶波紋為0.2分貝
>> As=50;Rp=0.2;
>> %那麼可以用兩個函數得到系數a,b
>> [N,wn]=buttord(wp/pi,ws/pi,Rp,As);
>> [b,a]=butter(N,wn);
>> %該濾波器就是從截止頻率到無窮遠都不響應
❼ 使用matlab編寫函數,
%%
當x<=2,f(x)=0.5x/;2<x<=6,f(x)=1.5-0.25x;x>6,f(x)=0.5;
%
並調用此函數,繪制在x=[0,2]范圍的f(x)*f(x+2)曲線。
%
根據題意,編寫如下函數並內保存為funcfx.m
function
fx
=
funcfx(x)
n=length(x);
fx=[];
for
i=1:n
if
x(i)
<=
2
fx(i)
=
0.5
.*
x(i);
elseif
(x(i)
>
2)
&
(x(i)
<=
6)
fx(i)
=
1.5
-
0.25
.*
x(i);
elseif
x(i)>6
fx(i)
=
0.5;
end
end
保存函數後調用,容代碼如下:
x=-6:20;
fx=funcfx(x);
plot(x,fx,'r*')
❽ 用MATLAB編寫函數..
function f=fun(x)
if x<0
f=x.^2+1;
elseif x>=0&x<=1
f=x;
elseif x>1
f=x.^3-2;
end
❾ Matlab濾波函數filter自己寫用Function簡單構造一個
你那,需要用濾波器。
❿ 急求用MATLAB編寫用濾波法實現SSB調制的程序(提示:使用LPF函數實現濾波)
你用 Perl mysql 亂碼 當關鍵字網路一下,會找到相當多的相關的文章。這類亂碼錯誤基本上內來說就是編碼的不同造成的容。你用Notepad打開一個GB編碼的TXT文件不會看到亂碼,打開一個UTF-8編碼的TXT文件同樣不會看到亂碼,這並不能說明GB編碼和UTF-8是一樣的。