自适应中值滤波器matlab实现

上传人:M****1 文档编号:431738727 上传时间:2024-01-25 格式:DOC 页数:5 大小:227KB
返回 下载 相关 举报
自适应中值滤波器matlab实现_第1页
第1页 / 共5页
自适应中值滤波器matlab实现_第2页
第2页 / 共5页
自适应中值滤波器matlab实现_第3页
第3页 / 共5页
自适应中值滤波器matlab实现_第4页
第4页 / 共5页
自适应中值滤波器matlab实现_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《自适应中值滤波器matlab实现》由会员分享,可在线阅读,更多相关《自适应中值滤波器matlab实现(5页珍藏版)》请在金锄头文库上搜索。

1、将下面代码直接贴入matlab中,并将读入图像修改成自己机子上的,就可以运行了。可以按照“%”顺序分步来运行% function 自适应中值滤波器%实现两个功能:%1.对高密度的椒盐噪声有好的滤除效果;%2.滤波时减少对图像的模糊;%原理:%1.椒盐噪声概率越大,滤波器窗口需越大。故若滤波器窗口随噪声概率自适应变化,才能有好的滤除效果%2.为减少对图像的模糊,需在得出原图像值并非椒盐噪声点时,保留原图像值不变;%3.椒盐噪声点的特点:该点的值为该点领域上的最大或最小;%步骤(得到图像中某点(x,y)(即窗口中心点)的值的步骤):%1.设定一个起始窗口,以及窗口的最大尺寸;%2.(此步用于确定窗

2、口大小)对窗口内像素排序,判断中值是否是噪声点,若不是,继续第3步,若是,转到第5步;%3.判断中心点是否是噪声点,若不是,则输出该点的值(即图像中该点的原值不变);若是,则输出中值;%4.窗口尺寸增大,若新窗口尺寸小于设定好的最大值,重复第2步,若大于,则滤波器输出前一个窗口的中值;%参数说明:%被噪声污染的图像(即退化图像也即待处理图像):Inoise%滤波器输出图像:Imf%起始窗口尺寸:nmin*nmin(只取奇数),窗口尺寸最大值:nmax*nmax%图像大小:Im*In%窗口内图像的最大值Smax,中值Smed,最小值Smin %clearclf% 读入图像II=imread(e:

3、/photo/cat.jpg);%转化为灰度图IgIg=rgb2gray(I);%被密度为0.2的椒盐噪声污染的图像InoiseInoise=imnoise(Ig,salt & pepper,0.2);%或者是被方差为0.2的高斯噪声污染的图像Inoise%Inoise=imnoise(Ig,gaussian,0.2);%显示原图的灰度图Ig和噪声图像Inoisesubplot(2,2,1),imshow(Ig);xlabel(a.原始灰度图像);subplot(2,2,2),imshow(Inoise);xlabel(b.被噪声污染的图像);% 定义参数%获取图像尺寸:Im,InIm,In=

4、size(Inoise);%起始窗口尺寸:nmin*nmin(窗口尺寸始终取奇数)nmin=3;%最大窗口尺寸:nmax*nmaxnmax=9;%定义复原后的图像ImfImf=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);% 自适应滤波过程%遍历图像Inoi

5、se中的每一点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);%求出窗口内像素的

6、最大值 Smin=min(min(Sxy);%求出窗口内像素的最小值 Smed=median(median(Sxy);%求出窗口内像素的中值 %判断中值是否是噪声点 if SmedSmin & SmedSmax %若中值既大于最小值又小于最大值,则不是 %是,则退出该if语句,增大窗口尺寸,再次判断 %不是,则判断该点的原值是不是噪声点 if Imf(x,y)=Smax %若该点的原值既大于最小值又小于最大值,则不是 %不是,则输出原值,即不作处理 %是,则输出中值 Imf(x,y)=Smed; end break %有输出则不再进行循环判断 end end %当n=max时,输出中值 Imf(x,y)=Smed; endendsubplot(2,2,3),imshow(Imf);xlabel(d.最大尺寸为9的自适应中值滤波器的滤波效果);% 与普通中值滤波器的对比Imf1=medfilt2(Inoise,3,3);Imf2=medfilt2(Imf1,3,3);subplot(2,2,4),imshow(Imf2);xlabel(e.尺寸为3的普通中值滤波器两次滤波效果);下面是运行结果:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号