標簽: 雜談 |
MatLab自編的均值濾波、中值濾波、高斯濾波 圖像處理函數(shù)。
%自編的均值濾波函數(shù)。x是需要濾波的圖像,n是模板大小(即n×n)
function d=avefilt(x,n)
a(1:n,1:n)=1;
p=size(x);
x1=double(x);
x2=x1;
%A(a:b,c:d)表示A矩陣的第a到b行,第c到d列的所有元素
for i=1:p(1)-n+1
end
%未被賦值的元素取原值
d=uint8(x2);
%自編的中值濾波函數(shù)。x是需要濾波的圖像,n是模板大小(即n×n)
function d=midfilt(x,n)
p=size(x);
x1=double(x);
x2=x1;
for i=1:p(1)-n+1
end
%未被賦值的元素取原值
d=uint8(x2);
%自編的高斯濾波函數(shù),S是需要濾波的圖象,n是均值,k是方差
function d=gaussfilt(k,n,s)
Img = double(s);
n1=floor((n+1)/2);%計算圖象中心
for i=1:n
end
%生成高斯序列b。
Img1=conv2(Img,b,'same'); %用生成的高斯序列卷積運算,進行高斯濾波
d=uint8(Img1);
%此為程序主文件,包含主要功能單元,以及對子函數(shù)進行調(diào)用
try
%實驗步驟一:彩色、灰度變換
h=imread('photo.jpg'); %讀入彩色圖片
c=rgb2gray(h); %把彩色圖片轉(zhuǎn)化成灰度圖片,256級
figure,imshow(c),title('原始圖象'); %顯示原始圖象
g=imnoise(c,'gaussian',0.1,0.002);
figure,imshow(g),title('加入高斯噪聲之后的圖象');
%實驗步驟二:用系統(tǒng)預(yù)定義濾波器進行均值濾波
n=input('請輸入均值濾波器模板大小\n');
A=fspecial('average',n);
Y=filter2(A,g)/255;
figure,imshow(Y),title('用系統(tǒng)函數(shù)進行均值濾波后的結(jié)果'); %顯示濾波后的圖象
%實驗步驟三:用自己的編寫的函數(shù)進行均值濾波
Y2=avefilt(g,n);
figure,imshow(Y2),title('用自己的編寫的函數(shù)進行均值濾波之后的結(jié)果'); %顯示濾波后的圖象
%實驗步驟四:用Matlab系統(tǒng)函數(shù)進行中值濾波
n2=input('請輸入中值濾波的模板的大小\n');
Y3=medfilt2(g,[n2 n2]);
figure,imshow(Y3),title('用Matlab系統(tǒng)函數(shù)進行中值濾波之后的結(jié)果');
%實驗步驟五:用自己的編寫的函數(shù)進行中值濾波
Y4=midfilt(g,n2);
figure,imshow(Y4),title('用自己編寫的函數(shù)進行中值濾波之后的結(jié)果');
%實驗步驟六:用matlab系統(tǒng)函數(shù)進行高斯濾波
n3=input('請輸入高斯濾波器的均值\n');
k=input('請輸入高斯濾波器的方差\n');
A2=fspecial('gaussian',k,n3);
Y5=filter2(A2,g)/255;
figure,imshow(Y5),title('用Matlab函數(shù)進行高斯濾波之后的結(jié)果');
%實驗步驟七:用自己編寫的函數(shù)進行高斯濾波
Y6=gaussfilt(n3,k,g);
figure,imshow(Y6),title('用自編函數(shù)進行高斯濾波之后的結(jié)果');
catch
end