MATLAB课程设计(自适应中值滤波)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB课程设计(自适应中值滤波)
信息工程系课程设计报告
课程MATLAB课程设计
专业通信工程
班级 2级本科二班
学生姓名1 景学号114
学生姓名2 学号1414
学生姓名3 王学号6 学生姓名4 学号31 学生姓名4 学号02
二〇一四年十二月
目录
目录 (2)
摘要: (3)
关键词: (3)
1.算法描述 (3)
1.1 噪声点 (4)
1.2 窗口尺寸选择 (4)
1.3求滤波窗口内中值,并替换像素点。 (4)
2程序实现 (5)
2.1准备和描述 (5)
2.2扩大窗口、确定窗口 (6)
2.3 确定最大、最小值和中值 (7)
2.4中值替换像素点、输出图像 (8)
实验结果 (10)
参考文献 (10)
2
摘要:通过本次课程设计,主要训练和培养学生综合应用所学MATLAB课程的自适应中值的相关知识,独立学习自适应中值滤波的原理及处理方式。学会扩大窗口并找到其区域内的中值、最小值、以及最大值,然后用中值代替像素点。通过自主学习和查阅资料来了解程序的编写及改进,并用MATLAB进行仿真。
关键词:自适应中值滤波灰度值椒盐噪声像素点.
1.算法描述
1.1 噪声点
脉冲噪声是图像处理中常见的一类,中值滤波器对消除脉冲噪声非常有效。噪声脉冲可以是正的(盐点),也可以是负的(胡椒点),所以也称这种噪声为“椒盐噪声”。椒盐噪声一般总表现为图像局部区域的最大值或最小值,并且受污染像素的位置是随机分布的,正负噪声点出现的概率通常相等。图像噪声点往往对应于局部区域的极值。
1.2窗口尺寸选择
滤波窗口尺寸的选择影响滤波效果,大尺寸窗口滤波能力强,但细节保持能力较弱;小尺寸窗口能保持图像大量细节但其滤波性能较低。根据噪声密度的大小自适应地选择滤波窗口可以缓和滤波性能与细节保持之间的矛盾,同时也增加了算法的时间复杂度。从形状看来窗口方向要沿着边缘和细节的方向,不能穿过它们也不能把它们和周围相差很大的像素包含在同一窗口中否则边缘和细节会被周围像素模糊。
1.3求滤波窗口内中值,并替换像素点。
设f ij为点(i,j)的灰度,A i,j为当前工作窗口,f min、f max和f med 分别为A i,j中的灰度最小值、灰度最大值和灰度中值, A max为预
设的允许最大窗口。
自适应中值滤波算法的基本步骤如下:
1)f min A i,j的尺寸小于A max的尺寸, 则重复第1步; 否则输出f ij。 2)f min 2程序实现 2.1准备和描述 clear; % 清除工作空间的变量 I=imread('I3_256.bmp'); % 输入图像 I=imnoise(I,'salt & pepper', 0.7); % 加入椒盐噪声点密度为0.7 imshow(I) % 显示图像 figure; % 控制窗口数量先显示一个 M=I; % 赋给M I=double(I); % 确定精度提高精度 M=double(M); flag11=1; % 11是(1,1)是开始的点H=512; % H为高,L为长 L=512; % 像素为512*512 for i=1:H % for 从1到512 for j=1:L flag(i,j)=1; % 所有点都假定为噪点 end end 2.2扩大窗口、确定窗口 for i=1:H %大循环% i为横坐标 j为纵坐标 for j=1:L %大循环 omiga=2; % omiga=2 是最大滤波半径 %%%%%%%%确定窗口 while flag(i,j)==1 % 循环恒为一一直执行 zuo=i-omiga; % 左减 xia=j-omiga; % 下减扩大窗口 you=i+omiga; % 右加 shang=j+omiga; % 上加 if zuo<1 zuo=1; end % 扩大窗口但不出边界 if xia<1 xia=1; % i为1、2、3时zuo都是1 ,end 便是为了不出边界 if you>L %右、下、上运算与左同理 you=L; end if shang>H shang=H; end %%%%%%%窗口确定结束 2.3 确定最大、最小值和中值 %%%%%%%%%%%确定最大最小值 smin=I(i,j); % 给smin、smax初始化 smax=I(i,j); total=(you-zuo+1)*(shang-xia+1); %total是放大后的像素点的个数 total=5*5=25 vect1=zeros(1,total-1); % total-1为去掉中心点 kn=1; for in=zuo:you %zuo:you xia:shang 为横纵向扫描