文档详情

自适应中值滤波器matlab完成[新版].doc

发布:2018-08-17约2.31万字共5页下载文档
文本预览下载声明
将下面代码直接贴入matlab中,并将读入图像修改成自己机子上的,就可以运行了。可以按照“%%”顺序分步来运行 %% function 自适应中值滤波器 %%%%%%%%%%%%%%% %实现两个功能: %1.对高密度的椒盐噪声有好的滤除效果; %2.滤波时减少对图像的模糊; %%%%%%%%%%%%%%% %%%%%%%%%%%%%%% %原理: %1.椒盐噪声概率越大,滤波器窗口需越大。故若滤波器窗口随噪声概率自适应变化,才能有好的滤除效果 %2.为减少对图像的模糊,需在得出原图像值并非椒盐噪声点时,保留原图像值不变; %3.椒盐噪声点的特点:该点的值为该点领域上的最大或最小; %%%%%%%%%%%%%%% %%%%%%%%%%%%%%% %步骤(得到图像中某点(x,y)(即窗口中心点)的值的步骤): %1.设定一个起始窗口,以及窗口的最大尺寸; %2.(此步用于确定窗口大小)对窗口内像素排序,判断中值是否是噪声点,若不是,继续第3步,若是,转到第5步; %3.判断中心点是否是噪声点,若不是,则输出该点的值(即图像中该点的原值不变);若是,则输出中值; %4.窗口尺寸增大,若新窗口尺寸小于设定好的最大值,重复第2步,若大于,则滤波器输出前一个窗口的中值; %%%%%%%%%%%%%%% %%%%%%%%%%%%%%% %参数说明: %被噪声污染的图像(即退化图像也即待处理图像):Inoise %滤波器输出图像:Imf %起始窗口尺寸:nmin*nmin(只取奇数),窗口尺寸最大值:nmax*nmax %图像大小:Im*In %窗口内图像的最大值Smax,中值Smed,最小值Smin %%%%%%%%%%%%%%%%%%%% %% clear clf %% 读入图像I I=imread(e:/photo/cat.jpg); %转化为灰度图Ig Ig=rgb2gray(I); %被密度为0.2的椒盐噪声污染的图像Inoise Inoise=imnoise(Ig,salt pepper,0.2); %或者是被方差为0.2的高斯噪声污染的图像Inoise %Inoise=imnoise(Ig,gaussian,0.2); %显示原图的灰度图Ig和噪声图像Inoise subplot(2,2,1),imshow(Ig);xlabel(a.原始灰度图像); subplot(2,2,2),imshow(Inoise);xlabel(b.被噪声污染的图像); %% 定义参数 %获取图像尺寸:Im,In [Im,In]=size(Inoise); %起始窗口尺寸:nmin*nmin(窗口尺寸始终取奇数) nmin=3; %最大窗口尺寸:nmax*nmax nmax=9; %定义复原后的图像Imf Imf=Inoise; %为了处理到图像的边界点,需将图像扩充 %因为窗口尺寸是弹性的,所以将Inoise固定扩充到最大:I_ex[(Im+(nmax-1))*(In+(nmax-1))] I_ex=[zeros((nmax-1)/2,In+(nmax-1));zeros(Im,(nmax-1)/2),Inoise,zeros(Im,(nmax-1)/2);zeros((nmax-1)/2,In+(nmax-1))]; %% 自适应滤波过程 %遍历图像Inoise中的每一点 for x=1:Im for y=1:In for n=nmin:2:nmax %图像Inoise中的某点(x,y)的领域Sxy,对应在I_ex中为(x+[(nmax-1)/2-(n-1)/2]:x+[(nmax-1)/2-(n-1)/2]+(n-1),y+(nmax-1)/2-(n-1)/2:y+[(nmax-1)/2-(n-1)/2]+(n-1)) Sxy=I_ex(x+(nmax-1)/2-(n-1)/2:x+(nmax-1)/2+(n-1)/2,y+(nmax-1)/2-(n-1)/2:y+(nmax-1)/2+(n-1)/2); Smax=max(max(Sxy));%求出窗口内像素的最大值 Smin=min(min(Sxy));%求出窗口内像素的最小值 Smed=median(median(Sxy));%求出窗口内像素的中值 %判断中值是否是噪声点 if SmedSmin SmedSmax %若中值既大于最小值又小于最大值,则不是 %
显示全部
相似文档