您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > matLab 自编的 均值滤波、中值滤波、高斯滤波 图像处理函数
matLab自编的均值滤波、中值滤波、高斯滤波图像处理函数(转)虽然matlab里面有这些函数,但是要求自己编写,计算机视觉上有这个实验,是别人编写的。别人到网上找了半天才零散的找到一些碎片,整理以后发上来的!MatLab自编的均值滤波、中值滤波、高斯滤波图像处理函数。%自编的均值滤波函数。x是需要滤波的图像,n是模板大小(即n×n)functiond=avefilt(x,n)a(1:n,1:n)=1;%a即n×n模板,元素全是1p=size(x);%输入图像是p×q的,且pn,qnx1=double(x);x2=x1;%A(a:b,c:d)表示A矩阵的第a到b行,第c到d列的所有元素fori=1:p(1)-n+1forj=1:p(2)-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=midfilt(x,n)p=size(x);%输入图像是p×q的,且pn,qnx1=double(x);x2=x1;fori=1:p(1)-n+1forj=1:p(2)-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);%此为程序主文件,包含主要功能单元,以及对子函数进行调用try%实验步骤一:彩色、灰度变换h=imread('photo.jpg');%读入彩色图片c=rgb2gray(h);%把彩色图片转化成灰度图片,256级figure,imshow(c),title('原始图象');%显示原始图象g=imnoise(c,'gaussian',0.1,0.002);%加入高斯噪声figure,imshow(g),title('加入高斯噪声之后的图象');%显示加入高斯噪声之后的图象%实验步骤二:用系统预定义滤波器进行均值滤波n=input('请输入均值滤波器模板大小\n');A=fspecial('average',n);%生成系统预定义的3X3滤波器Y=filter2(A,g)/255;%用生成的滤波器进行滤波,并归一化figure,imshow(Y),title('用系统函数进行均值滤波后的结果');%显示滤波后的图象%实验步骤三:用自己的编写的函数进行均值滤波Y2=avefilt(g,n);%调用自编函数进行均值滤波,n为模板大小figure,imshow(Y2),title('用自己的编写的函数进行均值滤波之后的结果');%显示滤波后的图象%实验步骤四:用Matlab系统函数进行中值滤波n2=input('请输入中值滤波的模板的大小\n');Y3=medfilt2(g,[n2n2]);%调用系统函数进行中值滤波,n2为模板大小figure,imshow(Y3),title('用Matlab系统函数进行中值滤波之后的结果');%显示滤波后的图象%实验步骤五:用自己的编写的函数进行中值滤波Y4=midfilt(g,n2);%调用自己编写的函数进行中值滤波,figure,imshow(Y4),title('用自己编写的函数进行中值滤波之后的结果');%实验步骤六:用matlab系统函数进行高斯滤波n3=input('请输入高斯滤波器的均值\n');k=input('请输入高斯滤波器的方差\n');A2=fspecial('gaussian',k,n3);%生成高斯序列Y5=filter2(A2,g)/255;%用生成的高斯序列进行滤波figure,imshow(Y5),title('用Matlab函数进行高斯滤波之后的结果');%显示滤波后的图象%实验步骤七:用自己编写的函数进行高斯滤波Y6=gaussfilt(n3,k,g);%调用自己编写的函数进行高斯滤波,n3为均值,k为方差figure,imshow(Y6),title('用自编函数进行高斯滤波之后的结果');%显示滤波后的图象catch%捕获异常disp(lasterr);%如果程序有异常,输出end
本文标题:matLab 自编的 均值滤波、中值滤波、高斯滤波 图像处理函数
链接地址:https://www.777doc.com/doc-3869648 .html