MATLABGUI课程设计期末大作业湖南理工学院._精品Word文档格式.docx
《MATLABGUI课程设计期末大作业湖南理工学院._精品Word文档格式.docx》由会员分享,可在线阅读,更多相关《MATLABGUI课程设计期末大作业湖南理工学院._精品Word文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
4.2算法设计 19
4.3实验结果及分析 20
5采用robert,prewitt,sobel,拉普拉斯算子对图像进行边缘提取 23
5.1算法原理 23
5.2算法设计 25
5.3实验结果及分析 26
6附加题目:
读入两幅图像,一幅为背景图像,一幅为含有目标的图像,应
用所学的知识提取出目标 27
6.1算法原理 27
6.2算法设计 27
6.3实验结果及分析 28
二、GUI界面设计部分 29
三小结(感受和体会) 34
30
算法设计部分
1绘制灰度直方图,实现直方图均衡化和直方图规定化
1.1算法原理
(1)绘制灰度直方图
灰度值直方图定义为数字图像中各个灰度级与其出现的频率的统计关系,可以表示为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