%x是需要滤波的图像,n是模板大小(即n×n)functiond=avg_filter(x,n)a(1:n,1:n)=1;%a即n×n模板,元素全是1[height,width]=size(x);%输入图像是hightxwidth的,且hightn,widthnx1=double(x);x2=x1;fori=1:hight-n+1forj=1:width-n+1c=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);%将与模板运算后的各元素的均值赋给模板中心位置的元素endend%未被赋值的元素取原值d=uint8(x2);%自编的中值滤波函数。x是需要滤波的图像,n是模板大小(即n×n)functiond=mid_filter(x,n)[height,width]=size(x);%输入图像是p×q的,且pn,qnx1=double(x);x2=x1;fori=1:height-n+1forj=1:height-n+1c=x1(i:i+(n-1),j:j+(n-1));%取出x1中从(i,j)开始的n行n列元素,即模板(n×n的)e=c(1,:);%是c矩阵的第一行foru=2:ne=[e,c(u,:)];%将c矩阵变为一个行矩阵endmm=median(e);%mm是中值x2(i+(n-1)/2,j+(n-1)/2)=mm;%将模板各元素的中值赋给模板中心位置的元素endend%未被赋值的元素取原值d=uint8(x2);%自编的高斯滤波函数,S是需要滤波的图象,n是均值,k是方差functiond=gaussfilt(k,n,s)Img=double(s);n1=floor((n+1)/2);%计算图象中心fori=1:nforj=1:nb(i,j)=exp(-((i-n1)^2+(j-n1)^2)/(4*k))/(4*pi*k);endend%生成高斯序列b。Img1=conv2(Img,b,'same');%用生成的高斯序列卷积运算,进行高斯滤波d=uint8(Img1);(5)中值滤波的MATLAB代码globalImagenUmbral%定义一个全局变量ImagenUmbralglobalJ%使用全局变量JA=J%将J赋给A[m,n]=size(A);%测量图像尺寸参数B=A;%将A赋给Bpixel_block=zeros(1,9);%开辟一个一行九列的数组,均赋于初值0fori=2:m-1%对A中的各个像素点(不包括边界)forj=2:n-2pixel_block=reshape(A(i-1:i+1,j-1:j+1),9,1);%采用3*3的窗口,将一个像素点及其周围的8各点,依次存入新开辟的数组pixel_block中sorted_block=sort(pixel_block);%将数组pixel_block排序block_median=sorted_block(5);%将数组的中值赋予block_medianB(i,j)=block_median;%将block_median赋予B的相应位置的像素值end;%endofforj=2:n-2end;%endoffori=2:m-1B=uint8(B);%将B中所有元素转换成0~255之间的整数subplot(224)%分割绘图窗口为两行两列,将句柄移到第四个位置imshow(B)%显示图像BImagenUmbral=B%将B赋给全局变量ImagenUmbral(6)均值滤波的MATLAB实现A=J%将J赋给A[m,n]=size(A);%m为A的行数,n为A的列数B=A;%将A赋给Bpixel_block=zeros(1,9);%开辟一个一行九列的数组,均赋于初值0fori=2:m-1%对A中的各个像素点(不包括边界)forj=2:n-1pixel_block=reshape(A(i-1:i+1,j-1:j+1),3^2,1);%采用3*3的窗口,将一个像素点及其周围的8各点,一次存入新开辟的数组pixel_block中mean_block=mean(pixel_block);%求出数组中所有元素的平均值B(i,j)=mean_block;%将mean_block赋予B的相应位置的像素值end;%endofforj=2:n-2end;%endoffori=2:m-1B=uint8(B);%将B中所有元素转换成0~255之间的整数subplot(224)%分割绘图窗口为两行两列,将句柄移到第四个位置imshow(B)%显示图像BImagenUmbral=B%将B赋给全局变量ImagenUmbral