MATLABGUI课程设计期末大作业湖南理工学院._精品Word文档格式.docx
《MATLABGUI课程设计期末大作业湖南理工学院._精品Word文档格式.docx》由会员分享,可在线阅读,更多相关《MATLABGUI课程设计期末大作业湖南理工学院._精品Word文档格式.docx(30页珍藏版)》请在冰点文库上搜索。
灰度值直方图定义为数字图像中各个灰度级与其出现的频率的统计关系,可以表示为P(k)=nk/n,k=0,1,...,L-1且P(k)=1。
统计出各个灰度级的个数之后,然后在一个坐标里面绘制灰度直方图。
(2)直方图均衡化
直方图均衡化是通过对原图像进行某种灰度变换,是变换后的图像的直方图能够均匀的分布(即各个像素的灰度级均衡),这样子就能使原图像中具有相近灰度值且占有很大像素点的区域之灰度范围展宽,使大区域中的微小灰度变化显现出来。
(3)直方图规定化
使原始直方图变成某个固定的形状,从而有选择的增强某个灰度范围内的对比度。
1.2算法设计
使用Matlab工具箱中的函数imhist(),histeq(),histeq(I,harm)分别实现直方图获取、均衡化、规定化
I=imread('
trees.tif'
);
if(ndims(I)==3) %判断是否为灰度图像
A=rgb2gray(I);
%转换为灰度图像else
A=I;
endsubplot(221);
imhist(A);
%获取灰度直方图
title('
灰度直方图'
J=histeq(A);
M=histeq(A,5);
subplot(222);
imshow(J);
直方图均衡'
)subplot(223);
imhist(J);
均衡后的直方图'
subplot(224);
imshow(M);
规定化后的图像'
1.3实验结果及对比分析
(图)1.3.1直方图获取、均衡化、规定化
分析:
通过结果可以看到,进行均衡后的直方图灰度级分布比较均匀。
而规定化后的图像看起来很模糊,是因为灰度级只有5个。
2灰度图像的对比度增强
2.1算法原理
matlab自带函数imadjust可用于对比度增强。
如果原图象f(x,y)的灰度范围是[m,M],我们希望调整后的图象g(x,y)的灰度范围是[n,N],那么下述变换就可以实现这一要求。
MATLAB图象处理工具箱中提供的imadjust函数,可以实现上述的线性变换对比度增强。
Imadjust函数的语法格式为:
J=imadjust(I,[low_inhigh_in],[low_outhigh_out])
J=imadjust(I,[low_inhigh_in],[low_outhigh_out])返回图象I经过直方图调整后的图象J,[low_inhigh_in]为原图象中要变换的灰度范围,[low_outhigh_out]指定了变换后的灰度范围。
例:
I=imread('
pout.tif'
J=imadjust(I,[0.30.7],[]);
imshow(I),figure,imshow(J)
2.2算法设计
利用自己写的函数实现对比度增强I=imread('
3.jpg'
%读入一张图片f0=0;
g0=0;
f1=70;
g1=30;
f2=180;
g2=230;
f3=255;
g3=255;
r1=(g1-g0)/(f1-f0);
b1=g0-r1*f0;
r2=(g2-g1)/(f2-f1);
b2=g1-r2*f1;
r3=(g3-g2)/(f3-f2);
b3=g2-r3*f2;
mysize=size(I);
ifnumel(mysize)>
2A=rgb2gray(I)
else
endsubplot(121);
imshow(A);
灰度图像'
[m,n]=size(A);
X2=double(A);
fori=1:
m
forj=1:
nf=X2(i,j);
g(i,j)=0;
if(f>
=0)&
(f<
=f1)g(i,j)=r1*f+b1;
elseif(f>
=f1)&
=f2)g(i,j)=r2*f+b2;
=f2)&
=f3)g(i,j)=r3*f+b3;
endend
endsubplot(122);
imshow(mat2gray(g));
对比度增强后'
2.3实验结果及分析
根据实验结果,可以清晰的看到图像的亮度比原来变高了。
3图形的几何变换
3.1算法原理
图像几何变换又称为空间变换,是将一幅图像中的坐标位置映射到另外一幅图像中的新坐标位置。
它不改变图像的像素值,只是在图像平面上进行像素的重新安排。
通过几何变换,可以根据应用的需要使原图像产生大小、形状和位置等各方面的变化。
也就是说,几何变换可以改变像素点所在的几何位置以及图像中各物体之间的空间位置关系,这种运算可以被看成是将各物体在图像内移动,特别是图像具有一定的规律性时,一个图像可以由另一个图像通过做几何变换来产生。
几何变换可以分为图像的位置变换(平移、镜像、旋转)、形状变换
(放大、缩小和剪切)以及图像的复合变换。
图像几何变换的一般表达式为:
(1)图像平移
设图像的任一像素坐标为(i,j),图像在画布上沿行方向与列方向分别移动Δi与Δj。
假设平移后的像素坐标为(i’,j’)。
则平移计算公式为:
ì
i'
=i+Di
í
j'
=j+Dj
注意:
i与j是原图像的像素î
坐标,i’与j’是平移后的图像像素坐标。
(2)镜像
图像的镜像变换分为两种:
一种是水平镜像,另外一种是垂直镜像。
图像的水平镜像操作是将图像的左半部分和右半部分以图像垂直中轴线为中心镜像进行对换;
图像的垂直镜像操作是将图像上半部分和下半部分以图像水平中轴线为中心镜像进行对换。
设图像高度为Height,宽度为Width,原图中的(x0,y0)经过水平镜像后坐标将变为(Width-x0,y0),其矩阵表达式为:
é
x1ù
é
-1 0
Widthù
y0ù
ê
y1ú
=ê
0 1
0 ú
x0ú
ú
ê
ë
1ú
û
0 0 1 ú
同样,(x0,y0)经过垂直镜像后坐标将变为(x0,Height-y0),其矩阵表达式为:
1 0 0 ù
x0ù
0 -1 Heightú
y0ú
(3)图像旋转
ê
0 0 1 ú
图像的旋转是指以图像中的某一点为原点以逆时针或顺时针方向旋转一定的角度,通常是围绕图像的起始点以逆时针旋转。
旋转后,图像的大小一般会改变。
这样,就可以利用解析几何的方法来实现图像的旋转。
和图像平移一样,既可以把转出显示区域的图像截去,也可以扩大图像范围以显示所有的图像。
如下图所示,点(x0,y0)经过旋转θ度后坐标变成
(x1,y1)。
图3.1.1图像旋转示意图
在旋转前:
旋转后:
ì
x0 =
î
y0 =
rcos(q)
rsin(q)
x1=
y1=
rcos(a-q) =
rsin(a-q) =
rcos(a)cos(q) +
rsin(a)cos(q) -
rsin(a)sin(q) =
rcos(a)sin(q) =
x0cos(q) +
-x0sin(q) +
y0sin(q)
y0cos(q)
(4)图像缩放
图像的缩放操作将会改变图像的大小,产生的图像中的像素可能在原图中找不到相应的像素点,这样就必须进行近似处理。
一般的方法是直接赋值为和它最相近的像素值,也可以通过一些插值算法来计算。
下面介绍最邻近算法。
假设图像x轴方向缩放比率为fx,y轴方向缩放比率为fy,那么原图中点
(x0,y0)对应与新图中的点(x1,y1)的转换矩阵为:
fx 0 0ù
0 fy 0ú
0 0 1ú
3.2算法设计
4.jpg'
figure
(1);
subplot(2,2,1);
imshow(I);
(a)原始图像'
)%在原来的结构元素上进行y和x的平移,平移量分别为
100,-100
se1=translate(strel
(1),[100-100]);
%形态学膨胀后J就是平移的结果J1=imdilate(I,se1);
subplot(2,2,2);
imshow(uint8(J1));
(b)左下平移'
)se2=translate(strel
(1),[100100]);
J2=imdilate(I,se2);
subplot(2,2,3);
imshow(uint8(J2));
(b)右下平移'
)se3=translate(strel
(1),[-100100]);
J3=imdilate(I,se3);
subplot(2,2,4);
imshow(uint8(J3));
(b)右上平移'
)
F:
\gudesi.jpg'
figure
(2)subplot(2,2,1);
imshow(uint8(I));
(b)原始图像'
)I=double(I);
h=size(I);
I_fliplr(1:
h
(1),1:
h
(2),1:
h(3))=I(1:
h
(1),h
(2):
-1:
1,1:
h(3));
%
水平镜像变换I1=uint8(I_fliplr);
imshow(I1);
(c)水平镜像变换'
I_flipud(1:
h(3))=I(h
(1):
垂直镜像变换I2=uint8(I_flipud);
imshow(I2);
(d)垂直镜像变换'
x1=imrotate(I,30,'
nearest'
'
crop'
%最邻近法逆时针旋转30度
x2=imrotate(I,30,'
bilinear'
%双线性插值法逆时针旋转30度x3=imrotate(I,-30,'
%最邻近法顺时针旋转30度x4=imrotate(I,-30,'
%双线性插值法顺时针旋转30度figure;
subplot(3,2,1);
imshow(I);
原图像'
subplot(3,2,2);
subplot(3,2,3);
imshow(x1);
最邻近法逆时针旋转30度'
subplot(3,2,4);
imshow(x2);
双线性插值法逆时针旋转30度'
subplot(3,2,5);
imshow(x3);
最邻近法顺时针旋转30度'
subplot(3,2,6);
imshow(x4);
双线性插值法顺时针旋转30度'
f=imread('
figure;
imshow(f);
原图像'
f1=imresize(f,1.5,'
imshow(f1);
·
放大1.5倍'
f2=imresize(f,0.8,'
imshow(f2);
缩小0.8倍'
3.3实验结果及分析
图3.3.1图像平移
图3.3.2镜像
图3.3.3图像旋转
图3.3.4图像缩放
上述结果表明都实现了图像的几何变换。
4图像加噪(用输入参数控制不同噪声),然后使用空域和
频域进行滤波处理
4.1算法原理
图像噪声在数字图像处理技术中的重要性越来越明显,如高放大倍数航片的判读,X射线图像系统中的噪声去除等已经成为不可缺少的技术步骤。
图像噪声主要有高斯噪声,椒盐噪声,泊松噪声等。
(1)高斯噪声
所谓高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。
如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。
高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。
高斯白噪声包括热噪声和散粒噪声。
高斯分布,也称正态分布,又称常态分布,记为N(μ,s2),其中μ,
s2为分布的参数,分别为高斯分布的期望和方差。
当有确定值时,p(x)也就确定了,特别当μ=0,s2=1时,X的分布为标准正态分布。
(2)椒盐噪声
椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。
椒盐噪声往往由图像切割引起。
去除脉冲干扰级椒盐噪声最常用的算法是中值滤波。
路面图像属于结构光图像,使用区域分割技术中的阀值分割法消除白噪声及部分椒盐噪声,而不能使用中值滤波对白噪声及椒盐噪声进行滤波,因为滤波模板在图像中漫游时会改变光条中像素的真实灰度分布,给随后的重心法细化过程带来负面影响。
(3)中值滤波
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.
实现方法:
1:
通过从图像中的某个采样窗口取出奇数个数据进行排序
2:
用排序后的中值取代要处理的数据即可
中值滤波法对消除椒盐噪音非常有效,在光学测量条纹图象的相位分析处理方法中有特殊作用,但在条纹中心分析方法中作用不大.
中值滤波在图像处理中,常用于用来保护边缘信息,是经典的平滑噪声的方
法
中值滤波原理。
中值滤波是基于排序统计理论的一种能有效抑制噪声的非
线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。
方法是去某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。
二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。
W为二维模板,通常为2*2,3*3区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。
(4)均值滤波
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身),再用模板中的全体像素的平均值来代替原来像素值。
均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。
线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点
(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度
1
个g(x,y),即个g(x,y)=må
f(x,y),m为该模板中包含当前像素在内的像素总个数。
4.2算法设计
利用Matlab工具箱中的函数imnoise()添加噪声。
666.jpg'
J=imnoise(I,'
Gaussian'
0.02);
subplot(221);
加入高斯噪声'
end
M=medfilt2(A);
subplot(223);
中值滤波后的图像'
k1=filter2(fspecial('
average'
3),A)/255;
imshow(k1);
均值滤波后的图像'
其他的噪声类似。
关键语句:
salt&
pepper'
加入椒盐噪声
spckle'
加入乘性噪声
4.3实验结果及分析
图4.3.1高斯噪声与滤波
图4.3.2椒盐噪声与滤波
图4.3.3乘性噪声与滤波
可以明显看到均值滤波对高斯噪声的处理比中值滤波效果更好,但是滤波后的图像还是跟原图像有差距。
中值滤波对椒盐噪声的处理比均值滤波效果要好。
对于乘性噪声的处理中值滤波与均值滤波效果都不太理想。
5采用robert,prewitt,sobel,拉普拉斯算子对图像进
行边缘提取
5.1算法原理
edge函数提供的最有效的边缘检测方法。
该方法的优点在于,使用两种不同的阈值分别检测强边缘和弱边缘,并且仅当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。
因此,这种方法不容易被噪声“填充”,更容易检测出真正的弱边缘。
基于边缘检测的分割方法可以说是人们最早研究的方法,基于在区域边缘上的像素灰度值的变化往往比较剧烈,它试图通过检测不同区域间的边缘来解决图像分割问题。
边缘检测技术可以按照处理的顺序分为串行边缘检测以及并行边缘检测。
在串行边缘检测技术中。
当前像素点是否属丁欲检测的边缘,取决于先前像素的验证结果;
而在并行边缘检测技术中.一个像素点是否属于欲检测的边缘,取决于当前正在检测的像素点以及该像素点的一些相邻像索点,这样该模型可以同时用于检测图像中的所有像素点,因而称之为并行边缘检测技术。
最简单的边缘检测方法是井行微分算子法,它利用相邻区域的像素值不连续的性质,采明一阶或二阶导数来检测边缘点。
(1)Roberts边缘检测算子
根据计算梯度原理,采用对角线方向相邻两像素之差得Roberts算子为:
(2)Sobel边缘检测算子
Sobel算子有两个卷积计算核,如图2-9所示。
图像中的每个点都用这两个核作卷积,第一个核通常对垂直边缘相应最大,第二个核对水平边缘相应最大。
两个卷积的最大值作为该点输出值,运算结果是一幅边缘幅度图像。
Sobel算子定义为:
(3)Prewitt算子
Prewitt算子有两个卷积计算核,如下图2-10所示作卷积的方法和Sobel
算子的方法相似。
算子模板
用模板表示为:
‘
5.2算法设计
333.jpg'
subplot(221);
image'
mysize=size(I);
%获取图像的尺寸
2 %判断是否为灰度图像
A=rgb2gray(I) %若不是的,则进行灰度化处理,然后赋值给A
A=I %若是,则直接赋值给A
BW1=edge(A,'
Log'
BW2=edge(A,'
prewitt'
BW3=edge(A,'
Sobel'
subplot(222);
imshow(BW1);
imshow(BW2);
subplot(224);
imshow(BW3);
sobel'
5.3实验结果及分析
图5.3.1边缘检测
算子提取了图像的边缘
读入两幅图像,一幅为背景图像,一幅为含有
目标的图像,应用所学的知识提取出目标
6.1算法原理
迭代式阈值选取的基本思路是:
首先根据图像中物体的灰度分布情况,选取一个近似阈值作为初始阈值,一个较好的方法就是将图像的灰度均值作为初始阈值;
然后通过分割图像和修改阈值的迭代过程获得认可的最佳阈值[5]。
迭代式阈值选取过程可描述如下。
(1)选取一个初始阈值T。
(2)利用阈值T把给定图像分割成两组图像,记为1R2R。
(3)计算R1和R2均值和u1和u2。
(4)选取新的阈值T,且
(5)重复第
(2)~(4)步,直至R1和R2均值和u1和u2不再变化为止。
6.2算法设计
ZMax=max(max(I));
ZMin=min(min(I));
TK=(ZMax+ZMin)/2;
bCal=1;
iSize=size(I);
while(bCal)iForeground=0;
iBackground=0;
ForegroundSum=0;
BackgroundSum=0;
iSize
(1)
iSize
(2)tmp=I(i,