文档库 最新最全的文档下载
当前位置:文档库 › 如何用MATLAB来实现中值滤波

如何用MATLAB来实现中值滤波

如何用MATLAB来实现中值滤波

在实时图像采集中,不可避免的会引入噪声,尤其是干扰噪声和椒盐噪声,噪声的存在严重影响边缘检测的效果,中值滤波是一种基于排序统计理论的非线性平滑计数,能有效平滑噪声,且能有效保护图像的边缘信息,所以被广泛用于数字图像处理的边缘提取,其基本原理是把数字图像或数字序列中的一点的值用该点邻域内所有的点排序后的中值来代替。

中值滤波对椒盐噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性滤波方法所不具有的。而且,中值滤波的算法比较简单,也易于用硬件实现。这篇我们先用MATLAB来实现中值滤波。

中值滤波方法是,对待处理的当前像素,选择一个模板3x3、5x5或其他,这里选择3x3矩阵,该模板为其邻近的若干个像素组成,对模板的像素由小到大进行排序,再用模板的中值来替代原像素的值的方法。

当我们使用3x3窗口后获取领域中的9个像素,就需要对9个像素值进行排序,为了提高排序效率,排序算法思想如图所示。

(1)对窗内的每行像素按降序排序,得到最大值、中间值和最小值。

(2)把三行的最小值即第三列相比较,取其中的最大值。

(3)把三行的最大值即第一列相比较,取其中的最小值。

(4)把三行的中间值即第二列相比较,再取一次中间值。

(5)把前面的到的三个值再做一次排序,获得的中值即该窗口的中值。

sort排序函数

sort(A)若A可以使矩阵或行列向量,默认都是对A进行升序排列。

sort(A)是默认的升序,而sort(A,descend)是降序排序。sort(A)若A是矩阵,默认对A的各列进行升序排列sort(A,dim)dim=1时相当于sort(A)

dim=2时表示对矩阵A中的各行元素升序排列

中值滤波原理及MATLAB实现.

中值滤波原理及MATLAB实现 摘要:图像是一种重要的信息源,通过图像处理可以帮助人们了解信息的内涵。本文将纯净的图像加入椒盐噪声,然后采用中值滤波的方法对其进行去噪。中值滤波是一种常用的非线性信号处理技术,在图像处理中,它对滤除脉冲干扰噪声最为有效。文章阐述了中值滤波的原理、算法以及在图像处理中的应用。MATLAB是一种高效的工程计算语言,在数据处理、图像处理、神经网络、小波分析等方面都有广泛的应用。 关键词:图像,中值滤波,去噪,MATLAB 1. 引言 20世纪20年代,图像处理首次得到应用。上个世纪60年代中期,随着计算机科学的发展和计算机的普及,图像处理得到广泛的应用。60年代末期,图像处理技术不断完善,逐渐成为一个新兴的学科。图像处理中输入的是质量低的图像,输出的是改善质量后的图像。 为了改善图像质量,从图像中提取有效信息,必须对图像进行去噪预处理。根据噪声频谱分布的规律和统计特征以及图像的特点,出现了多种多样的去噪方法。经典的去噪方法有:空域合成法,频域合成法和最优合成法等,与之适应的出现了许多应用方法,如均值滤波器,中值滤波器,低通滤波器,维纳滤波器,最小失真法等。这些方法的广泛应用,促进数字信号处理的极大发展,显著提高了图像质量。 2. 中值滤波 在图像滤波中,常用的方法是线性滤波技术和非线性滤波技术,线性滤波以其完美的理论基础,数学处理简单、易于采用和硬件实现等优点,一直在图像滤波领域中占有重要的地位。线性滤波对加性高斯噪声有较好的平滑作用,但对脉冲信号和其它形式的高频分量抑制效果较差,且模糊信号边缘。非线性滤波是基于对输入信号序列的一种非线性投影关系,常把某一特定的噪声近似为零而保留信号的重要特征,一定程度上克服线性滤波器的不足,非线性滤波早期运用较多的是中值滤波器,其应用于多维信号处理时,对窄脉冲信号具有良好的抑制能力,但

基于Matlab的常用滤波算法研究(含代码)讲解

毕业设计(论文) UNDERGRADUATE PROJECT (THESIS) 题目: 冲击测试常用滤波算法研究 学院 专业 学号 学生姓名 指导教师 起讫日期

目录 摘要 (2) ABSTRACT (3) 第一章绪论 (4) 1.1课题背景 (4) 1.2国内外相关领域的研究 (4) 1.3主要研究内容与创新 (5) 1.3.1研究内容与意义 (5) 1.3.2课题的创新点 (5) 1.3.3 研究目的与技术指标 (6) 第二章数字滤波基础 (7) 2.1数字滤波算法概念 (7) 2.2数据采样与频谱分析原理 (8) 2.2.1 时域抽样定理 (8) 2.2.2 离散傅立叶变换(DFT) (8) 2.2.3 快速傅立叶变换(FFT) (9) 2.2.4 频谱分析原理 (9) 2.3常用数字滤波算法基础 (10) 2.3.1常用数字滤波算法分类 (10) 2.3.2常用数字滤波算法特点 (11) 2.3.3常用滤波算法相关原理 (13) 2.4 冲击测试采样数据 (16) 2.4.1噪声的特点与分类 (16) 2.4.2冲击测试采样数据特点 (17) 2.5 MATLAB简介 (17) 2.5.1 MATLAB功能简介 (18) 2.5.2 MATLAB的发展 (18) 第三章、冲击测试滤波算法设计及滤波效果分析 (20) 3.1 冲击测试采样数据的分析 (20) 3.2 滤波算法设计及效果分析 (21) 3.2.1 中位值平均法的设计 (21) 3.2.2限幅法和限速法的设计 (23) 3.2.3一阶滞后法的设计 (25) 3.2.4低通法的设计 (26) 第四章结论与展望 (34) 4.1冲击测试的滤波算法总结 (34) 4.2冲击测试的滤波算法展望 (34) 致谢 (36) 参考文献 (37) 附录:程序代码清单 (38)

matlab实现中值滤波去除脉冲噪声matlab小程序

matlab实现中值滤波去除脉冲噪声matlab小程序(图像处理)2010-04-1612:58:44阅读8评论0字号:大中小 实验原理:中值滤波器是将领域内像素灰度的中值代替该像素的值,对处理脉冲噪声(椒盐噪声)非常有效。为了对一幅图像上的某个点进行中值滤波处理,必须先将掩模内欲求的像素及其领域的像素值排序,确定出中值,主要功能是使拥有不同灰度的点看起来更接近于它的邻近值。 程序说明:函数名为mid(pic_name,s)的函数,其中参数pic_name为读入的图像,s为掩模矩阵的边长,由用户自行决定。 实验说明:随着掩模矩阵的变大,我们可以看到脉冲噪声去除得更加理想,但同时图像会变得更模糊,因为各点像素与其邻域更为接近,因此,进行中值滤波时选择一个适合的掩模矩阵十分重要。另外,我们看到图像的边界处出现了黑色的斑点,这是由于我采用了0来直译边界,这种影响可用镜像反射方式对称地沿其边界扩展来减弱。 另附:其实本实验可以完全由matlab中的函数median或medfilt2简单实现,此处写出内部处理过程,主要是为了让大家理解中值滤波的具体处理过程。 程序源代码: function mid(pic_name,s) close all; s=double(s); X=imread(pic_name); Y1=imnoise(X,'salt&pepper',0.2);%对读入的图像加脉冲噪声 figure; imshow(uint8(Y1)); Y1=double(Y1); [m,n]=size(X); s2=round(s/2); s3=round(s*s/2);%中值像素点的位置

数字图像处理_平均滤波与中值滤波(含MATLAB代码)

数字图像处理实验二 15生医 一、实验内容 产生教材104页题图4.18(右图)所示的二值图像(白为1,黑为0),编程实现习题4.18所要求的处理(3x3的平均滤波和中值滤波)功能(图像四周边界不考虑,处理结果按四舍五入仍取0或1),显示处理前后的图像,比较其异同。 二、运行环境 MATLAB R2014a 三、运行结果及分析 1. 四种不同的窗的3x3平均滤波 ①在 MATLAB 图形窗界面进行放大可以看出四者之间的差别: 4领域与8邻域之间没有明显差别,但是加权与未加权之间的差别较为明显,体现在: 加权后每个矩形块的四个尖角部分都被保留了下来4邻域平均滤波后图 像8邻域平均滤波后图像 4邻域加权平均滤波后图像8邻域加权平均滤波后图像

(图像四周边界不考虑),而未加权的尖角处黑色变为白色。 ②原因分析: 加权后尖角处原来白色的点(1)进行计算3/5=0.6四舍五入后值为1,保持白色,原来黑色的点(0)进行计算2/5=0.4四舍五入后值为0,保持黑色;而未加权尖角处无论原来是黑色还是白色,进行计算 2/4=0.5四舍五入后值为1,所以原先的黑色(0)也变成了白色(1)。 ③下图为放大后的截图: 2.中值滤波与原图像的对比

①在 MATLAB图形窗界面进行放大后可观察出: 使用3x3 方形中值滤波模板的效果与4领域、8领域加权平均滤波的 效果相同,每个矩形块的四个尖角部分都被保留了下来(图像四周边界不考虑)。 ②原因分析: 套用3x3方形中值滤波模板后,尖角处原来白色的点(1)在窗内1多于0,取中值后仍保持白色,原来黑色的点(0)在窗内0多于1,取中值后仍保持白色。 ③下图为放大后的截图: 原图像中值滤波后图像

中值滤波快速算法&菱形窗口matlab实现

function g=QuiMedFil2(f) g=f; t=2; [m,n]=size(f); for i=2:m-1 for j=2:n-1 if(j==2) A=f(i-1:i+1,j-1:j+1); hist=imhist(A); mdn=median(A(:)); %mdn=Med(f(i-1:i+1,j-1:j+1))+1; L=find(f(i-1:i+1,j-1:j+1)th mdn=mdn-1; Ltmdn = Ltmdn-hist(mdn+1); end

while (Ltmdn+hist(mdn+1))<=th Ltmdn=Ltmdn+hist(mdn+1); mdn=mdn+1; end g(i,j)=mdn; end end t=t+1;%t-line; end ======================================= =========================实现过程如下 rgb=imread('Figure1.JPG'); %此处通过matlab读入任何一幅图像 >> I=rgb2gray(rgb); %将图像灰度化 >> I=imresize(I,0.1); %若图像过大可进行适当调整,或省略此步 >> g=QuiMedFil2(I) %调用所编程序执行中值滤波快速算法 figure,imshow(I),figure,imshow(g) %显示原图像和滤波后的图像 =============================================================================== =================================================== 与传统中值滤波算法的同窗口的计算时间对比 快速算法略高于一般算法 =============================================================================== =====================================================菱形5*5中值滤波程序function g=MedFilRho(f) g=f; g=[]; [m,n]=size(f); for i=3:(m-2) for j=3:(n-2) B=[f(i,j),f(i-2,j),f(i-1,j),f(i+1,j),f(i+2,j),f(i,j-1),f(i,j-2),f(i,j+1),f(i,j+2),f(i-1,j-1),f(i+1,j+1),f(i-1,j+1),f(i+1,j-1)]; g(i,j)=median(B); end end 备注:程序为原创,原文地址: https://www.wendangku.net/doc/6913444807.html,/walqxlqxaw/blog/item/aabb517f877e6f190dd7daad.ht ml

MATLAB滤波程序

1线性平滑滤波器 用MA TLAB实现领域平均法抑制噪声程序: I=imread(' c4.jpg '); subplot(231) imshow(I) title('原始图像') I=rgb2gray(I); I1=imnoise(I,'salt & pepper',0.02); subplot(232) imshow(I1) title(' 添加椒盐噪声的图像') k1=filter2(fspecial('average',3),I1)/255; %进行3*3模板平滑滤波 k2=filter2(fspecial('average',5),I1)/255; %进行5*5模板平滑滤波 k3=filter2(fspecial('average',7),I1)/255; %进行7*7模板平滑滤波 k4=filter2(fspecial('average',9),I1)/255; %进行9*9模板平滑滤波 subplot(233),imshow(k1);title('3*3 模板平滑滤波'); subplot(234),imshow(k2);title('5*5 模板平滑滤波'); subplot(235),imshow(k3);title('7*7 模板平滑滤波'); subplot(236),imshow(k4);title('9*9 模板平滑滤波'); 2.中值滤波器 用MA TLAB实现中值滤波程序如下: I=imread(' c4.jpg '); I=rgb2gray(I); J=imnoise(I,'salt&pepper',0.02); subplot(231),imshow(I);title('原图像'); subplot(232),imshow(J);title('添加椒盐噪声图像'); k1=medfilt2(J); %进行3*3模板中值滤波 k2=medfilt2(J,[5,5]); %进行5*5模板中值滤波 k3=medfilt2(J,[7,7]); %进行7*7模板中值滤波 k4=medfilt2(J,[9,9]); %进行9*9模板中值滤波 subplot(233),imshow(k1);title('3*3模板中值滤波'); subplot(234),imshow(k2);title('5*5模板中值滤波'); subplot(235),imshow(k3);title('7*7模板中值滤波'); subplot(236),imshow(k4);title('9*9 模板中值滤波'); 3状态统计滤波器:ordfilt2函数 Y=ordfilt2(X,order,domain) 由domain中非0元素指定邻域的排序集中的第order个元素代替X中的每个元素。Domain 是一个仅包括0和1的矩阵,1仅定义滤波运算的邻域。 Y=ordfilt2(X,order,domain,S) S与domain一样大,用与domain的非0值相应的S的值作为附加补偿。 4二维自适应除噪滤波器:wiener2函数 wiener2函数估计每个像素的局部均值与方差,该函数用法如下:

高斯平滑滤波器(含matlab代码)

Gaussian Smoothing Filter 高斯平滑滤波器 一、图像滤波的基本概念 图像常常被强度随机信号(也称为噪声)所污染.一些常见的噪声有椒盐(Salt & Pepper)噪声、脉冲噪声、高斯噪声等.椒盐噪声含有随机出现的黑白强度值.而脉冲噪声则只含有随机的白强度值(正脉冲噪声)或黑强度值(负脉冲噪声).与前两者不同,高斯噪声含有强度服从高斯或正态分布的噪声.研究滤波就是为了消除噪声干扰。 图像滤波总体上讲包括空域滤波和频域滤波。频率滤波需要先进行傅立叶变换至频域处理然后再反变换回空间域还原图像,空域滤波是直接对图像的数据做空间变换达到滤波的目的。它是一种邻域运算,即输出图像中任何像素的值都是通过采用一定的算法,根据输入图像中对用像素周围一定邻域内像素的值得来的。如果输出像素是输入像素邻域像素的线性组合则称为线性滤波(例如最常见的均值滤波和高斯滤波),否则为非线性滤波(中值滤波、边缘保持滤波等)。 线性平滑滤波器去除高斯噪声的效果很好,且在大多数情况下,对其它类型的噪声也有很好的效果。线性滤波器使用连续窗函数内像素加权和来实现滤波。特别典型的是,同一模式的权重因子可以作用在每一个窗口内,也就意味着线性滤波器是空间不变的,这样就可以使用卷积模板来实现滤波。如果图像的不同部分使用不同的滤波权重因子,且仍然可以用滤波器完成加权运算,那么线性滤波器就是空间可变的。任何不是像素加权运算的滤波器都属于非线性滤波器.非线性滤波器也可以是空间不变的,也就是说,在图像的任何位置上可以进行相同的运算而不考虑图像位置或空间的变化。 二、图像滤波的计算过程分析 滤波通常是用卷积或者相关来描述,而线性滤波一般是通过卷积来描述的。他们非常类似,但是还是会有不同。下面我们来根据相关和卷积计算过程来体会一下他们的具体区别: 卷积的计算步骤: (1)卷积核绕自己的核心元素顺时针旋转180度 (2)移动卷积核的中心元素,使它位于输入图像待处理像素的正上方 (3)在旋转后的卷积核中,将输入图像的像素值作为权重相乘 (4)第三步各结果的和做为该输入像素对应的输出像素 相关的计算步骤: (1)移动相关核的中心元素,使它位于输入图像待处理像素的正上方 (2)将输入图像的像素值作为权重,乘以相关核 (3)将上面各步得到的结果相加做为输出 可以看出他们的主要区别在于计算卷积的时候,卷积核要先做旋转。而计算相关过程中不需要旋转相关核。 例如:magic(3) =[8 1 6;3 5 7;4 9 2],旋转180度后就成了[2 9 4;7 5 3;6 1 8] 三、高斯(核)函数 所谓径向基函数(Radial Basis Function 简称RBF), 就是某种沿径向对称的标量函数。通常定义为空间中任一点x到某一中心xc之间欧氏距离的单调函数, 可记作k(||x-xc||), 其作用往往是局部的, 即当x远离xc时函数取值很小。最常用的径向基函数是高斯核函数,形式为k(||x-xc||)=exp{- ||x-xc||^2/(2*σ)^2) } 其中xc为核函数中心,σ为函数的宽度参数, 控制了函数的径向作用范围。

图像处理——均值滤波+中值滤波(Matlab)讲课讲稿

题目:均值滤波和中值滤波 在自己的证件照中加入椒盐噪声、高斯白噪声。 分别用3*3、5*5、7*7的均值滤波器和中值滤波器进行滤波。 处理过程 1.用imnoise函数在图像中分别加入椒盐噪声和高斯白噪声; 2.均值滤波:用fspecial函数创建各模板大小的均值滤波器,并用imfilter函数进行 滤波。 中值滤波:直接用matlab提供的medfilt2中值滤波器进行滤波即可。 处理结果 程序清单 (1)均值滤波 rgb=imread('photo.jpg'); J1=imnoise(rgb,'salt & pepper',0.02); J2=imnoise(J1,'gaussian',0,0.01); h1=fspecial('average',[3,3]); h2=fspecial('average',[5,5]); h3=fspecial('average',[7,7]); rgb1=imfilter(J2,h1); rgb2=imfilter(J2,h2); rgb3=imfilter(J2,h3); figure; subplot(2,3,1);imshow(rgb) title('原图像'); subplot(2,3,2);imshow(J2) title('加入噪声后的图像'); subplot(2,3,4);imshow(rgb1) title('3*3均值滤波图像'); subplot(2,3,5);imshow(rgb2) title('5*5均值滤波图像'); subplot(2,3,6);imshow(rgb3) title('7*7均值滤波图像'); (2)中值滤波 rgb=imread('photo.jpg'); J1=imnoise(rgb,'salt & pepper',0.02); J2=imnoise(J1,'gaussian',0,0.01); J3=rgb2gray(J2); rgb1=medfilt2(J3,[3 3]);

实验三--均值滤波和中值滤波

实验三均值滤波和中值滤波 一、实验目的 进一步了解MatLab软件/语言,学会使用MatLab对图像作滤波处理,使学生有机会掌握滤波算法,体会滤波效果。 了解几种不同滤波方式的使用和使用的场合,培养处理实际图像的能力,并为课堂教学提供配套的实践机会。 二、实验要求 (1)学生应当完成对于给定图像+噪声,使用平均滤波器、中值滤波器对不同强度的高斯噪声和椒盐噪声,进行滤波处理;能够正确地评价处理的结果;能够从理论上作出合理的解释。 (2)利用MATLAB软件实现空域滤波的程序: I=imread('electric.tif'); J = imnoise(I,'gauss',0.02); %添加高斯噪声 J = imnoise(I,'salt & pepper',0.02); (注意空格) %添加椒盐噪声 ave1=fspecial('average',3); %产生3×3的均值模版 ave2=fspecial('average',5); %产生5×5的均值模版 K = filter2(ave1,J)/255; %均值滤波3×3 L = filter2(ave2,J)/255; %均值滤波5×5 M = medfilt2(J,[3 3]); %中值滤波3×3模板 N = medfilt2(J,[4 4]); %中值滤波4×4模板 imshow(I); figure,imshow(J); figure,imshow(K); figure,imshow(L); figure,imshow(M); figure,imshow(N); 三、实验设备与软件 (1) IBM-PC计算机系统 (2) MatLab软件/语言包括图像处理工具箱(Image Processing Toolbox) (3) 实验所需要的图片 四、实验内容与步骤 a) 调入并显示原始图像Sample2-1.jpg 。 b) 利用imnoise 命令在图像Sample2-1.jpg 上加入高斯(gaussian) 噪声 c)利用预定义函数fspecial 命令产生平均(average)滤波器

均值滤波matlab程序代码

%均值滤波 %方法一:filter2 clear all; figure I=rgb2gray(imread('')); I=imnoise(I,'salt & pepper',; %加入椒盐噪声 K1=filter2(fspecial('average',3),I)/255; %进行3*3均值滤波 K2=filter2(fspecial('average',5),I)/255; %进行5*5均值滤波 K3=filter2(fspecial('average',7),I)/255; %进行7*7均值滤波 subplot(2,2,1),imshow(I),title('椒盐噪声图'); %显示原图像 subplot(2,2,2),imshow(K1),title('3*3均值滤波图像'); subplot(2,2,3),imshow(K2),title('5*5均值滤波图像'); subplot(2,2,4),imshow(K3),title('7*7均值滤波图像'); %方法二双循环语句,移动平均法 %均值滤波 clc,clear; figure f=rgb2gray(imread('')); subplot(2,2,1),imshow(f),title('原图'); f1=imnoise(f,'gaussian',,; subplot(2,2,2),imshow(f1),title('高斯噪声图'); k1=floor(3/2)+1; k2=floor(3/2)+1; X=f1; [M,N]=size(X); uint8 Y=zeros(M,N); funBox=zeros(3,3); for i=1:M-3 for j=1:N-3 funBox=X(i:i+3,j:j+3); s=sum(funBox(:)); h=s/16; Y(i+k1,j+k2)=h; end; end; Y=Y/255; subplot(2,2,3),imshow(Y)

数字图像处理-平均滤波与中值滤波(含MATLAB代码)

数字图像处理-平均滤波与中值滤波(含MATLAB代码)

数字图像处理实验二 15生医 一、实验内容 产生教材104页题图4.18(右图)所示的二值图像(白为1,黑为0),编程实现习题4.18所要求的处理(3x3的平均滤波和中值滤波)功能(图像四周边界不考虑,处理结果按四舍五入仍取0或1),显示处理前后的图像,比较其异同。 二、运行环境 MATLAB R2014a 三、运行结果及分析 1. 四种不同的窗的3x3平均滤波 ①在 MATLAB 图形窗界面进行放大可以看出四者之间的差别: 4领域与8邻域之间没有明显差别,但是加权与未加权之间的差别较为明显,体现在: 加权后每个矩形块的四个尖角部分都被保留了下来 4邻域平均滤波后图 像8邻域平均滤波后图 像4邻域加权平均滤波后图像8邻域加权平均滤波后图像

(图像四周边界不考虑),而未加权的尖角处黑色变为白色。 ②原因分析: 加权后尖角处原来白色的点(1)进行计算3/5=0.6四舍五入后值为1,保持白色,原来黑色的点(0)进行计算2/5=0.4四舍五入后值为0,保持黑色;而未加权尖角处无论原来是黑色还是白色,进行计算2/4=0.5四舍五入后值为1,所以原先的黑色(0)也变成了白色(1)。 ③下图为放大后的截图: 2. 中值滤波与原图像的对比

四、心得体会 通过MATLAB编程更加理解了课后题的计算结果,直观地看出了黑白像素点灰度值变化前后的取值异同。同时,对MATLAB实现像素点灰度值的替换机理也有所掌握,比如后边附的程序中会提到的“%”标注的思考。 五、具体程序 % 生成黑白块图像 unit=zeros(64,64); f=zeros(256,256); for i=1:1:32 for j=1:1:32 unit(i,j)=1; % 1/4白块 end end for i=33:1:64 for j=33:1:64 unit(i,j)=1; % 1/4白块 end end for i=1:64:256

如何用MATLAB来实现中值滤波

如何用MATLAB来实现中值滤波 在实时图像采集中,不可避免的会引入噪声,尤其是干扰噪声和椒盐噪声,噪声的存在严重影响边缘检测的效果,中值滤波是一种基于排序统计理论的非线性平滑计数,能有效平滑噪声,且能有效保护图像的边缘信息,所以被广泛用于数字图像处理的边缘提取,其基本原理是把数字图像或数字序列中的一点的值用该点邻域内所有的点排序后的中值来代替。 中值滤波对椒盐噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性滤波方法所不具有的。而且,中值滤波的算法比较简单,也易于用硬件实现。这篇我们先用MATLAB来实现中值滤波。 中值滤波方法是,对待处理的当前像素,选择一个模板3x3、5x5或其他,这里选择3x3矩阵,该模板为其邻近的若干个像素组成,对模板的像素由小到大进行排序,再用模板的中值来替代原像素的值的方法。 当我们使用3x3窗口后获取领域中的9个像素,就需要对9个像素值进行排序,为了提高排序效率,排序算法思想如图所示。 (1)对窗内的每行像素按降序排序,得到最大值、中间值和最小值。 (2)把三行的最小值即第三列相比较,取其中的最大值。 (3)把三行的最大值即第一列相比较,取其中的最小值。 (4)把三行的中间值即第二列相比较,再取一次中间值。 (5)把前面的到的三个值再做一次排序,获得的中值即该窗口的中值。 sort排序函数 sort(A)若A可以使矩阵或行列向量,默认都是对A进行升序排列。 sort(A)是默认的升序,而sort(A,descend)是降序排序。sort(A)若A是矩阵,默认对A的各列进行升序排列sort(A,dim)dim=1时相当于sort(A) dim=2时表示对矩阵A中的各行元素升序排列

自适应中值滤波器matlab实现

将下面代码直接贴入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; %为了处理到图像的边界点,需将图像扩充

数字图像处理-加噪与滤波(含MATLAB代码)

数字图像处理实验三 15生医 一、实验内容 产生教材104页题图4.16所示的灰度图像(白为255,黑为0),分别加入高斯白噪声和椒盐噪声,再分别进行3x3的平均滤波和中值滤波,显示原图像、加噪图像和滤波结果图像,并比较四种滤波结果。 二、运行环境 MATLAB R2014a 三、运行结果及分析 ①由实验结果可以看出: 平均滤波比中指滤波的效果差一点,平均滤波对原图像的边缘保留得不好,交界处较为模糊。同时,均值滤波器是用邻域内各像素的灰度平均值代替该像素原来的灰度值,实现图像 的平滑,它对高斯噪声的抑制效果好。中值滤波器是用像素邻域内的中间值代替该像素值。它对脉冲干扰及椒盐噪声的抑制效果好, 在抑 原图像加入 高斯噪声进行 平均滤 波进行中值滤 波 原图像加入 椒盐噪声进行平均滤波进行中值滤波

制随机噪声的同时能有效保护边缘少受模糊。 ②原因分析:平均滤波属于局部平均的线性滤波,所用的线性滤波器的工作原理可以比喻为用水冲浇桌面上的污点,冲洗的结果是污点并没有消失,只是被淡化,也有可能是整个桌面都被污点所影响。而中值滤波的基本思想是将污点直接去除。在含噪图像中,噪声往往以孤立点的形式出现,尤其是干扰脉冲和椒盐类噪声。这些干扰或噪声所占的像素数很少,而图像则是由像素数目较多、面积较大的小块组成。基于这一事实,可采用中值滤波方法来消除噪声,同时避免采用平均滤波时带来的目标物边缘模糊的问题。 ③放大右边结果部分的截图:

四、心得体会 通过MATLAB编程更加直观地了解了平均滤波与中值滤波的效果差异,使课本理论得到验证,另一方面也对噪声模型及其适用的滤波模板有了一定的认识。同时,对MATLAB产生噪声的函数调用及实现像素点灰度值的替换机理也有所掌握,比如后边附的程序中会提到的“%”标注的思考。 五、具体程序 %创建原图像 f=zeros(256,256); unit=255*ones(210,7); for i=0:8 f(24:233,(29+24*i):(29+24*i+6))=unit; %坐标从1开始(不是0),因此白色区域的纵向起始像素点为(256-210)/2+1=24, %止点为256-24+1=233,同理横向起始像素点为(256-7x9-17x8)/2=28.5,取28 %每个白条宽为7,间隔为7+17=24,因此下一个白条始于28+24+1,以此类推 end f1=imnoise(f,'gaussian',0,0.1); %均值为零方差为0.1的高斯噪声 f2=imnoise(f,'salt & pepper',0.1); %噪声密度为0.1的椒盐噪声 for i=2:1:255 for j=2:1:255 %3x3的8领域平均滤波 f1_mean(i,j)=(f1(i-1,j-1)+f1(i-1,j)+f1(i-1,j+1)+f1(i,j-1)+f1(i,j+ 1)+f1(i+1,j-1)+f1(i+1,j)+f1(i+1,j+1))/8; f2_mean(i,j)=(f2(i-1,j-1)+f2(i-1,j)+f2(i-1,j+1)+f2(i,j-1)+f2(i,j+ 1)+f2(i+1,j-1)+f2(i+1,j)+f2(i+1,j+1))/8; %3x3的方形中值滤波 a1=[f1(i-1,j-1),f1(i-1,j),f1(i-1,j+1),f1(i,j-1),f1(i,j),f1(i,j+1),f1( i+1,j-1),f1(i+1,j),f1(i+1,j+1)]; a2=[f2(i-1,j-1),f2(i-1,j),f2(i-1,j+1),f2(i,j-1),f2(i,j),f2(i,j+1),f2( i+1,j-1),f2(i+1,j),f2(i+1,j+1)]; b1=sort(a1); b2=sort(a2); f1_mid(i,j)=b1(5); f2_mid(i,j)=b2(5);

中值滤波器实现_Matlab

摘要 对于许多图像处理问题,传统的线性滤波方法存在着固有的缺陷,为此,最近30年来,发展起来了一类新的非线性滤波器结构—中值滤波器。这类滤波器在图像信号处理中具有独特的优势,目前已成为非线性滤波领域的一个研究热点。本文主要针对图像的低级处理(主要是滤噪声)问题,对中值滤波器做了一些初步研究工作,从而给出一些新的滤波器算法。 主要工作包括以下几个方面: 1.结合新的算法结构,改进了传统多级中值滤波器算法,得到一种新的中值滤波算法,并且进行编程,在MATLAB中生成M文件,在M文件下建立函数体,通过在函数体下对滤波器算法的编程,使函数体达到滤波的功能,然后进行滤波,并且和MATLAB中的算法比较,仿真显示这种算法具有比较好的图像滤噪和细节保护性能。 2.结合新的递归算法结构,改进了传统多级中值滤波器算法,得到一种新的中值滤波算法一一新型递归中值滤波器。 3.提出了基于FPGA的数字图像中值滤波器的设计算法,并且对算法进行了初步的分析。 关键词: 图像处理,滤噪,中值滤波,算法

Abstract For many image processing problem, the traditional linear method of filtering there was an inherent defect, to that end, the last 30 years, has developed a new class of nonlinear filter - median filter. Such filters in image signal processing has unique advantages, has become a field of nonlinear filtering hotspot. This article mainly for the low-level image processing (mainly filter noise) problem, the median filter has done some preliminary research, presented some new filter algorithm. Its main tasks are the following: 1. In light of the new algorithm, improving the traditional multi-level median filter algorithm, get a new median filtering algorithms and programming in MATLAB M generated in the document, the document under this filter M - Generating algorithm, and then filtering, and MATLAB and the algorithm, the simulation showed that this method is relatively good image filtering noise and details of protection. 2. Recursive algorithm in light of the new structure, and improve the traditional multi-level median filter algorithm, get a new filter in the value of January 1 in the value of the new recursive filter. 3. To the FPGA-based digital image in the value of the filter design algorithms, and algorithm on a preliminary analysis. Key words: image processing ,filtering noise,the median filter,the algorithm

自适应滤波的MATLAB实现

自适应滤波的MATLAB实现 2204090 发表于: 2006-12-06 08:56 来源: 中国振动联盟1.LMS算法的仿真程序: %lms 算法 clear all close all hold off%系统信道权数 sysorder = 5 ;%抽头数 N=1000;%总采样次数 inp = randn(N,1);%产生高斯随机系列 n = randn(N,1); [b,a] = butter(2,0.25); Gz = tf(b,a,-1);%逆变换函数 h= [0.0976;0.2873;0.3360;0.2210;0.0964;];%信道特性向量y = lsim(Gz,inp);%加入噪声 n = n * std(y)/(10*std(n));%噪声信号 d = y + n;%期望输出信号 totallength=size(d,1);%步长 N=60 ; %60节点作为训练序列 %算法的开始 w = zeros ( sysorder , 1 ) ;%初始化 for n = sysorder : N u = inp(n:-1:n-sysorder+1) ;% u的矩阵 y(n)= w' * u;%系统输出 e(n) = d(n) - y(n) ;%误差 if n < 20 mu=0.32; else mu=0.15; end w = w + mu * u * e(n) ;%迭代方程 end %检验结果 for n = N+1 : totallength u = inp(n:-1:n-sysorder+1) ; y(n) = w' * u ; e(n) = d(n) - y(n) ;%误差 end hold on plot(d) plot(y,'r'); title('系统输出') ; xlabel('样本')

Matlab课程设计数据滤波程序

Matlab综合课程设计报告 设计题目: 专业物联网工程 班级142 学生王明莲 指导教师刘庆 2016 年春季学期

一、总体设计 1.程序的总体设计

二、功能实现 1.(流程图) 三、测试及调试(测试方案、存在的问题及解决方法) 2.详细描述程序编写的步骤及编写过程中出现的问题; 3.详细描述程序测试方案,采用的调试方法及调试手段; 4.详细描述调试中出现的问题、对问题的分析及解决方法。 四、总结 包括但不限于以下内容: 5.对Matlab知识的掌握程度; 6.对程序设计方法(自顶向下、结构化设计)的体会和掌握程度; 7.分析问题和解决问题的能力,并举例说明; 8.建议与意见。

附件:主要源程序代码(需打印) 附件一:一维信号滤波 高斯滤波: %高斯滤波的代码 x=0:2047; a=load('data.txt'); %运行时data.txt文件要放到当前目录(current directory)中 gau=[0.0009 0.0175 0.1295 0.3521 0.3521 0.1295 0.0175 0.0009];%标准差为1时的高斯函数一维模板,如果标准差不为1,则要修改模板 y=conv(a,gau); y=y(1:length(y)-length(gau)+1); figure; subplot(1,2,1);plot(x,a); xlabel('高斯滤波前的序列'); subplot(1,2,2);plot(x,y); xlabel('高斯滤波后的序列'); % 高斯函数的一维模板可以由这个函数得到:fspecial('gaussian', [1 n], sigma) % 当标准差sigma是某一固定数字时,存在一个N,对于任意的n>=N,模板都一样 中值滤波: function y=yiweimid(x,N) [m,n]=size(x); xin = zeros(1,n); for i=1:1:n-N q = median(x(1,i+N)); xin(1,i+N)=q; end y=xin; End %中值滤波的代码: x=0:2047; a=load('data.txt'); %运行时data.txt文件要放到当前目录(current directory)中 n=5; % n为模板长度,值可以改变 y = medfilt1(a,n); figure; subplot(1,2,1);plot(x,a); xlabel('中值滤波前的序列');

Matlab傅里叶变换和各种滤波处理

Matlab傅里叶变换模和相位和各种滤波处理 傅里叶变换模和相位 img=imread('h:\img.png'); f=fft2(img); %傅里叶变换 f=fftshift(f); %使图像对称 r=real(f); %图像频域实部 i=imag(f); %图像频域虚部 margin=log(abs(f)); %图像幅度谱,加log便于显示 phase=log(angle(f)*180/pi); %图像相位谱 l=log(f); subplot(2,2,1),imshow(img),title('源图像'); subplot(2,2,2),imshow(l,[]),title('图像频谱'); subplot(2,2,3),imshow(margin,[]),title('图像幅度谱'); subplot(2,2,4),imshow(phase,[]),title('图像相位谱'); 添加高斯噪声、四阶巴特沃斯低通滤波 I=imread('h:\img.png'); x=rgb2gray(I); y1=imnoise(x,'gaussian',0,0.02); f=double(y1); % 数据类型转换,MATLAB不支持图像的无符号整型的计算g=fft2(f); % 傅立叶变换 g=fftshift(g); % 转换数据矩阵 [M,N]=size(g); nn=4; % 四阶巴特沃斯(Butterworth)低通滤波器 d0=50; %截止频率为50 m=fix(M/2); n=fix(N/2); for i=1:M

for j=1:N d=sqrt((i-m)^2+(j-n)^2); h=1/(1+0.414*(d/d0)^(2*nn)); % 计算低通滤波器传递函数 result(i,j)=h*g(i,j); end end result=ifftshift(result); y2=ifft2(result); y3=uint8(real(y2)); subplot(1,2,1),imshow(y1),title('添加高斯噪声后的图像'); subplot(1,2,2),imshow(y3),title('四阶巴特沃斯低通滤波图像'); 维纳滤波 I=imread('h:\img.png'); x=rgb2gray(I); J1=imnoise(x,'gaussian',0,0.02); %给图像添加高斯噪声 J2=imnoise(x,'salt & pepper',0.02);%给图像添加椒盐噪声 J3=imnoise(x,'speckle',0.02); %给图像添加乘性噪声 Y1=wiener2(J1,[5 5]); %维纳滤波 Y2=wiener2(J2,[5 5]); Y3=wiener2(J3,[5 5]); subplot(2,2,1),imshow(x),title('灰度图'); subplot(2,2,2),imshow(Y1),title('高斯噪声维纳滤波'); subplot(2,2,3),imshow(Y2),title('椒盐噪声维纳滤波');

相关文档
相关文档 最新文档