资源描述
计算机科学技术系
课程设计报告
课 程 自适应中值滤波
专 业 通信工程
班 级 2012级本科一班
学生姓名1 赵效秀 学号1214110104
学生姓名2 郝雪玲 学号1214110117
学生姓名3 陈炳瑞 学号1214110149
学生姓名4 张增俭 学号1214110156
学生姓名5 陈如辉 学号1214110146
二〇一三年十一月
II
目录 I
1.算法描述 2.程序实现
3.变量的改变流程
4.程序的解析过程
5.注意事项
6.实验结果
(1)图像
(2)数据
I
摘要:通过本次课程设计,主要训练和培养学生综合应用所学内容处理课程的滤波器设计的相关知识,独立完成对图片的处理能力。
1.算法描述
该算法利用极值的方法统计图像噪声点,然后计算以噪声点为中心像素的子窗口的方差。对噪声点采用多窗口,多尺度的滤波。能有效的平滑噪声,保存细节。当噪声面积较大时,通过增加滤窗的大小将噪声予以去除,同时当判断滤窗中心的像素是噪声时,该值用中值代替,否则不改变当前像素值。
i
2. 程序实现
先是读入图像,然后给图像添加椒盐噪声,之后是定义未知量,设置标准图像的大小,之后是一个大循环,这个大循环中有几个小循环,他们的作用分别是确定窗口,最大值最小值,判断噪音点,滤波窗口尺寸增加。到最后输出图像和8位无符号的整形数据(0-255之间)。
3.变量的改变流程
先是double型,也就是双精度的数据,然后经过零矩阵,滤波窗口变为一维矩阵,到最后输出图像和8位的无符号整形数据。其中smin,smed,smax分别是滤波半径的最小值,中值,最大值,根据最小值和最大值来确定中值。
4.程序的实现过程
clear;
I=imread('standard_lena.bmp');
I=imnoise(I,'salt & pepper', 0.7); %添加椒盐噪声
imshow(I)
figure;%控制窗口数量
M=I;
num=1;%将1赋予未知量num
I=double(I);%将I转化为双精度
M=double(M);%将M转化为双精度
flag11=1;
H=512; %标准图像的大小(高度)
L=512; %标准图像的大小(长度)
for i=1:H
for j=1:L
flag(i,j)=1;
end
end %默认的滤波窗口设定,与图像大小相等
%i横坐标
%j综坐标
for i=1:H %大循环
for j=1:L %大循环
omiga=2;%改变窗口的未知量
%%%%%%%%确定窗口
while flag(i,j)==1 %根据flag(i,j)的值改善窗口大小
zuo=i-omiga;
xia=j-omiga;
you=i+omiga;
shang=j+omiga;
if zuo<1
zuo=1;%图片只能从横坐标处的1开始,小于1时图片不能不完整输出。
end
if xia<1
xia=1; %图片只能从纵坐标处的1开始,小于1时图片不能不完整输出。
end
if you>L
you=L;
end
if shang>H
shang=H;
end
%%%%%%%窗口确定结束
%%%%%%%%%%%确定最大最小值
smin=I(i,j);%二维矩阵中的最小值
smax=I(i,j);%二维矩阵中的最大值
total=(you-zuo+1)*(shang-xia+1);%总的向量个数
vect1=zeros(1,total-1);生成1行total列double类矩阵
下面的此循环将二维矩阵窗口转化为一维矩阵的过程
kn=1;
for in=zuo:you %确定in在窗口内
for jn=xia:shang %确定jn在窗口内
if ((in==i&jn==j)==0) %(in==i&jn=j)=1时,继续向下进行,否则结束该循环
vect1(1,kn)=I(in,jn);
kn=kn+1;
end
end
end %将滤波窗口转化为一维矩阵结束
smin=nanmin(vect1);%给出vect1中的最小值
smax=nanmax(vect1);%给出vect1中的最大值
smed=nanmedian(vect1); %给出vect1中的中值
%%%%%%%%%%%确定最大最小值结束
下面第一个if是为了判断中值是否为噪音点,如果符合下面要求,继续向下进行,则退出循环,重新确定中值。
if (smed-smin)>0&(smax-smed)>0
下面的if是为了判断原像素点是否为噪音点,如果符合if条件要求,则输出原像素点,否则将中值付给原像素点。
if smin<M(i,j)&M(i,j)<smax
flag(i,j)=0;
else
M(i,j)=smed;
I(i,j)=smed;
flag(i,j)=0;
end
else %改变窗口尺度大小的过程
omiga=omiga+2;%超过自适应滤波窗口尺寸阈值时(11)用中值代替当前像素值
if omiga>=5
flag11=0;
end
if omiga>=17
flag11=0;
M(i,j)=smed;
flag(i,j)=0; %确定该窗口
end
end
end %while
end%大循环
end%大循环
I=uint8(M);%将双精度的M转化为8位的无符号整形数据I
imshow(I)
5.注意事项
程序中的M和I分别代表数据,图像。
· 语句if zuo<1 zuo=1和if xia<1 xia=1 说明了图像在zuo<1和xia<1的时候不显示,从而确定了图像的范围,这点要注意。
· 添加椒盐噪声的程度可以改变,数值越小,图像越清晰,效果越明显。
· 6.实验结果
.
处理后的图片
·
· 添加椒盐噪声的图片
· 实验数据vect1 (此数据为数据中的一小部分)
vect1 =
Columns 1 through 9
143.0000 142.0000 142.0000 141.2416 141.0000 143.0000 140.0000 141.0000 141.0000
Columns 10 through 18
143.0000 144.0000 142.0000 255.0000 0 0 0 0 141.0000
Columns 19 through 24
255.0000 143.0000 0 0 255.0000 255.0000
vect1 =
Columns 1 through 9
142.0000 142.0000 141.2416 141.0000 140.0000 140.0000 141.0000 141.0000 143.0000
Columns 10 through 18
140.7813 142.0000 141.6208 0 0 0 0 141.0000 255.0000
Columns 19 through 24
255.0000 0 0 255.0000 255.0000 255.0000 82.5000
展开阅读全文