newbuf(x+i,y+j)=uint8(new);
end
end
end
y=y+k;
end
ify>=N
y=1;
end
x=x+k;
end
4、实验结果及分析(原图像和处理后的图像比较及分析)
图1.改变量化参数的结果图
图2.改变采样个数的结果图
图3.同时改变采样个数和量化参数的结果图
如上图所示,即为实验结果图像。
由图1可知,量化参数越小,图片越模糊;由图2可知,采样个数越少,图片越模糊;由图3可知,量化参数和采样个数对图片的模糊程度都有影响。
实验名称:
图像灰度级修正
3、实验目的
掌握常用的图像灰度级修正方法,即图像的灰度变换法和直方图均衡化法,加深对灰度直方图的理解。
观察图像的增强效果,对灰度级修正前后的图像加以比较。
4、实验内容
(1)编程实现图像的灰度变换。
改变图像输入、输出映射的灰度参数范围(拉伸和反比),观看图像处理结果。
(2)修改可选参数gamma值,使其大于1、等于1和小于1,观看图像处理结果。
(3)对图像直方图均衡化处理,显示均衡前后的直方图和图像。
实验图像选用hor256或vax256.
3、实验方法及编程
实验通过MATLAB进行编程实现,代码如下所示:
functionnewbuf=GrayTransf(oldbuf)
%*************************************************************************
%函数名称:
%GrayTransf()灰度变换函数
%参数:
%oldbuf原图像数组
%newbuf存放处理后的图像二维数组
%说明:
%可以任意指定输入图像需要映射的灰度范围和指定输出图像所在的灰度范围。
还可接受
%一个可选的参数来指定修正因素r。
%*************************************************************************
[M,N]=size(oldbuf);
newbuf=imadjust(oldbuf,stretchlim(oldbuf),[]);
newbuf=uint8(newbuf);
subplot(2,2,2);
imshow(newbuf);
subplot(2,2,3);
imhist(oldbuf);
subplot(2,2,4);
imhist(newbuf);
%-------------------------------------------------------------------------
functionnewbuf=GrayEqualize(oldbuf)
%*************************************************************************
%函数名称:
%GrayEqualize()直方图均衡算法函数
%参数:
%oldbuf原图像数组
%newbuf存放处理后的图像二维数组
%说明:
%对oldbuf的原图像数据进行灰度统计,然后计算每一个K所对应的S值,求出对照表
%S(k),最后以原图像灰度值K作为地址,对每一象素进行变换,得出均衡化以后的新图
%像存放在newbuf中。
%*************************************************************************
[M,N]=size(oldbuf);
NN=M*N;
sk=0;
[COUNTS,X]=imhist(oldbuf,256);
fori=1:
M
forj=1:
N
kk=double(oldbuf(i,j));
fork=1:
kk
sk=sk+COUNTS(k);
end
sk=sk/NN*256;
newbuf(i,j)=sk;
end
end
newbuf=uint8(newbuf);
subplot(2,2,2);
imshow(newbuf);
subplot(2,2,3);
imhist(oldbuf);
subplot(2,2,4);
imhist(newbuf);
%-------------------------------------------------------------------------
functionnewbuf=GrayGamma(oldbuf,r)
%*************************************************************************
%函数名称:
%GrayGamma()gamma校正函数
%参数:
%rgamma校正值
%oldbuf原图像数组
%newbuf存放处理后的图像二维数组
%说明:
%图像获取、打印和显示的各种装置是根据幂次规律进行响应的。
习惯上,幂次等式中的指
%数是指伽马值.用于修正幂次响应现象的过程称作伽马校正。
%imadjust()函数还可接受一个可选的参数来指定修正因素r(也称gamma校正值)。
根据
%r值的不同,输入图像与输出图像间的映射可能是非线性的。
%*************************************************************************
newbuf=imadjust(oldbuf,stretchlim(oldbuf),[],r);
newbuf=uint8(newbuf);
subplot(2,2,2);
imshow(newbuf);
subplot(2,2,3);
imhist(oldbuf);
subplot(2,2,4);
imhist(newbuf);
%标记抬头的代码:
str='改变r后的灰度变换图像';
imshow(newbuf);
title(str);
subplot(2,2,3);
str='原函数对应直方图';
imhist(oldbuf);
title(str);
subplot(2,2,4);
str='修正函数对应直方图';
imhist(newbuf);
title(str);
4、实验结果及分析(原图像和处理后的图像比较及分析)
图1.灰度变换法的图像
图2.gamma值小于1
图3.gamma值等于1
图4.gamma值大于1
图5.直方图均衡化的图像
如上图所示,即为所有的实验结果。
图1为灰度变换法之后的图像,对比可知变换之后的图像灰度值的范围变大,因此图像变得更加清晰,细节表现得更加明显。
图2、3和4是通过改变gamma值来观察图片的变化,当gamma值小于1的时候,原灰度值范围拉伸并向灰度值大的一方压缩,所以图片会整体偏白;当gamma值等于1的时候,原灰度值范围拉伸,效果同图1;当gamma值小于1的时候,原灰度值拉伸并向灰度值小的一方压缩,所以图片会整体偏黑。
图5为直方图均衡化之后的图像,新直方图的灰度值分布就更加均匀,图片也比较清晰。
实验名称:
图像的平滑滤波
5、实验目的
图像平滑主要目的是减少噪声对图像的影响。
噪声有很多种类,不同的噪声有不同的抑制措施。
本实验要求用平滑线性滤波和中值滤波两种最典型、最平常的处理算法进行程序设计,学习如何对已被噪声污染的图像进行“净化”。
通过平滑处理,对结果图像加以比较,得出自己的实验结论。
6、实验内容
(1)编写并调试窗口尺寸为m×n的平滑滤波函数。
(2)编写并调试窗口尺寸为m×n的中值滤波函数。
3、实验方法及编程
本实验用Matlab进行编程,具体的代码如下图所示:
functionnewbuf=AverageFilter(oldbuf,M,N,m)
%*************************************************************************
%函数名称:
%AverageFilter()均值滤波算法函数
%参数:
%oldbuf噪声图像数组
%MN噪声图像尺寸
%m矩形平滑窗口尺寸
%newbuf存放处理后的图像二维数组
%说明:
%用m*m的滤波器模板对oldbuf数组的噪声图像进行线性滤波,即用窗口内m*m个像素
%的平均灰度值来代替图像每个像素点的值,最后结果存放在newbuf数组中。
%*************************************************************************
oldbuf=double(oldbuf);
newbuf=zeros(M,N);
fori=(m+1)/2:
M-(m+1)/2
forj=(m+1)/2:
N-(m+1)/2
forx=-(m-1)/2:
(m-1)/2;
fory=-(m-1)/2:
(m-1)/2;
newbuf(i,j)=newbuf(i,j)+oldbuf(i+x,j+y)/(m*m);
end
end
end
end
%-------------------------------------------------------------------------
functionnewbuf=MedianFilter(oldbuf,M,N,m)
%*************************************************************************
%函数名称:
%MedianFilter()中值滤波算法函数
%参数:
%oldbuf原图像数组
%MN原图像尺度
%m滑动窗口尺寸
%newbuf存放处理后的图像数组
%说明:
%把oldbuf数组m*m窗口内的象素值赋给winbuf,然后调用排队函数SeekMid(),
%把该函数在窗口中找到的中值放到newbuf数组中。
%*************************************************************************
fori=(m+1)/2:
M-(m+1)/2
forj=(m+1)/2:
N-(m+1)/2
k=1;
forx=-(m-1)/2:
(m-1)/2;
fory=-(m-1)/2:
(m-1)/2;
winbuf(k)=oldbuf(i+x,j+y);
k=k+1;
end
end
newbuf(i,j)=SeekMid(winbuf,m);
end
end
%-------------------------------------------------------------------------
functionmid=SeekMid(winbuf,m)
%*************************************************************************
%函数名称:
%SeekMid()排序函数
%参数:
%winbuf滑动窗口
%m滑动窗口尺寸
%mid存放排序后中间位置的像素值
%说明:
%将winbuf窗口中的m*m个像素进行排序,将排序队列中间的像素值赋给变量mid。
%*************************************************************************
winsize=length(winbuf);%取窗口尺寸
fori=1:
winsize%编写排序函数
forj=1:
winsize-i
if(winbuf(i)>winbuf(j+i))
t=winbuf(i);
winbuf(i)=winbuf(j+i);
winbuf(j+i)=t;
end
end
end
mid=winbuf(ceil(m*m/2));%ceil函数朝正无穷大方向取整,总能取到中间位置
%-------------------------------------------------------------------------
4、实验结果及分析(原图像和处理后的图像比较及分析)
如上图所示,即为实验结果。
实验处理椒盐噪声的方法分为两种,均值滤波和中值滤波。
均值滤波能够消减椒盐噪声的干扰,但是同时模糊了图片,丢失细节;窗口越大,对椒盐噪声的处理能力越强,但是同时丢失的细节越多,图片会更加模糊。
中值滤波也能够较好的处理椒盐噪声,而且相较于均值滤波,效果更好,图片会更加清晰且没有明显的噪声痕迹;同均值滤波一样,窗口越大,图片越模糊。