MATLAB GUI课程设计期末大作业湖南理工学院汇编.docx
- 文档编号:3540930
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:26
- 大小:2.15MB
MATLAB GUI课程设计期末大作业湖南理工学院汇编.docx
《MATLAB GUI课程设计期末大作业湖南理工学院汇编.docx》由会员分享,可在线阅读,更多相关《MATLAB GUI课程设计期末大作业湖南理工学院汇编.docx(26页珍藏版)》请在冰豆网上搜索。
MATLABGUI课程设计期末大作业湖南理工学院汇编
《数字图像处理》
期末大作业暨课程考核报告
姓名:
邓巧灵
学号:
24112200002
序号:
02
湖南理工学院南湖学院
2014年6月
一:
算法设计部分
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;
end
subplot(221);
imhist(A);%获取灰度直方图
title('灰度直方图');
J=histeq(A);
M=histeq(A,5);
subplot(222);imshow(J);title('直方图均衡')
subplot(223);
imhist(J);title('均衡后的直方图');
subplot(224);imshow(M);title('规定化后的图像');
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)>2
A=rgb2gray(I)
else
A=I;
end
subplot(121);
imshow(A);title('灰度图像');
[m,n]=size(A);
X2=double(A);
fori=1:
m
forj=1:
n
f=X2(i,j);
g(i,j)=0;
if(f>=0)&(f<=f1)
g(i,j)=r1*f+b1;
elseif(f>=f1)&(f<=f2)
g(i,j)=r2*f+b2;
elseif(f>=f2)&(f<=f3)
g(i,j)=r3*f+b3;
end
end
end
subplot(122);
imshow(mat2gray(g));title('对比度增强后');
2.3实验结果及分析
分析:
根据实验结果,可以清晰的看到图像的亮度比原来变高了。
3图形的几何变换
3.1算法原理
图像几何变换又称为空间变换,是将一幅图像中的坐标位置映射到另外一幅图像中的新坐标位置。
它不改变图像的像素值,只是在图像平面上进行像素的重新安排。
通过几何变换,可以根据应用的需要使原图像产生大小、形状和位置等各方面的变化。
也就是说,几何变换可以改变像素点所在的几何位置以及图像中各物体之间的空间位置关系,这种运算可以被看成是将各物体在图像内移动,特别是图像具有一定的规律性时,一个图像可以由另一个图像通过做几何变换来产生。
几何变换可以分为图像的位置变换(平移、镜像、旋转)、形状变换(放大、缩小和剪切)以及图像的复合变换。
图像几何变换的一般表达式为:
(1)图像平移
设图像的任一像素坐标为(i,j),图像在画布上沿行方向与列方向分别移动Δi与Δj。
假设平移后的像素坐标为(i’,j’)。
则平移计算公式为:
注意:
i与j是原图像的像素坐标,i’与j’是平移后的图像像素坐标。
(2)镜像
图像的镜像变换分为两种:
一种是水平镜像,另外一种是垂直镜像。
图像的水平镜像操作是将图像的左半部分和右半部分以图像垂直中轴线为中心镜像进行对换;图像的垂直镜像操作是将图像上半部分和下半部分以图像水平中轴线为中心镜像进行对换。
设图像高度为Height,宽度为Width,原图中的(
,
)经过水平镜像后坐标将变为(Width-
,
),其矩阵表达式为:
同样,(
,
)经过垂直镜像后坐标将变为(
,Height-
),其矩阵表达式为:
(3)图像旋转
图像的旋转是指以图像中的某一点为原点以逆时针或顺时针方向旋转一定的角度,通常是围绕图像的起始点以逆时针旋转。
旋转后,图像的大小一般会改变。
这样,就可以利用解析几何的方法来实现图像的旋转。
和图像平移一样,既可以把转出显示区域的图像截去,也可以扩大图像范围以显示所有的图像。
如下图所示,点(x0,y0)经过旋转θ度后坐标变成(x1,y1)。
图3.1.1图像旋转示意图
在旋转前:
旋转后:
(4)图像缩放
图像的缩放操作将会改变图像的大小,产生的图像中的像素可能在原图中找不到相应的像素点,这样就必须进行近似处理。
一般的方法是直接赋值为和它最相近的像素值,也可以通过一些插值算法来计算。
下面介绍最邻近算法。
假设图像x轴方向缩放比率为fx,y轴方向缩放比率为fy,那么原图中点(x0,y0)对应与新图中的点(x1,y1)的转换矩阵为:
3.2算法设计
(1)图像平移
I=imread('4.jpg');
figure
(1);
subplot(2,2,1);imshow(I);
title('(a)原始图像')%在原来的结构元素上进行y和x的平移,平移量分别为100,-100
se1=translate(strel
(1),[100-100]);%形态学膨胀后J就是平移的结果
J1=imdilate(I,se1);
subplot(2,2,2);imshow(uint8(J1));
title('(b)左下平移')
se2=translate(strel
(1),[100100]);
J2=imdilate(I,se2);
subplot(2,2,3);imshow(uint8(J2));
title('(b)右下平移')
se3=translate(strel
(1),[-100100]);
J3=imdilate(I,se3);
subplot(2,2,4);imshow(uint8(J3));
title('(b)右上平移')
(2)镜像
I=imread('F:
\gudesi.jpg');
figure
(2)
subplot(2,2,1);imshow(uint8(I));
title('(a)原始图像')
subplot(2,2,2);imshow(uint8(I));
title('(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);
subplot(2,2,3);imshow(I1);
title('(c)水平镜像变换')
I_flipud(1:
h
(1),1:
h
(2),1:
h(3))=I(h
(1):
-1:
1,1:
h
(2),1:
h(3));%垂直镜像变换
I2=uint8(I_flipud);
subplot(2,2,4);imshow(I2);
title('(d)垂直镜像变换')
(3)图像旋转
I=imread('4.jpg');
x1=imrotate(I,30,'nearest','crop');%最邻近法逆时针旋转30度
x2=imrotate(I,30,'bilinear','crop');%双线性插值法逆时针旋转30度
x3=imrotate(I,-30,'nearest','crop');%最邻近法顺时针旋转30度x4=imrotate(I,-30,'bilinear','crop');%双线性插值法顺时针旋转30度
figure;
subplot(3,2,1);
imshow(I);
title('原图像')
subplot(3,2,2);
imshow(I);
title('原图像')
subplot(3,2,3);
imshow(x1);
title('最邻近法逆时针旋转30度')
subplot(3,2,4);
imshow(x2);
title('双线性插值法逆时针旋转30度')
subplot(3,2,5);
imshow(x3);
title('最邻近法顺时针旋转30度')
subplot(3,2,6);
imshow(x4);
title('双线性插值法顺时针旋转30度');
(4)图像缩放
f=imread('trees.tif');
figure;
imshow(f);
title('原图像');
f1=imresize(f,1.5,'nearest');
figure;
imshow(f1);
title('·放大1.5倍');
f2=imresize(f,0.8,'bilinear');
figure;
imshow(f2);
title('缩小0.8倍');
3.3实验结果及分析
(1)图像平移
图3.3.1图像平移
(2)镜像
图3.3.2镜像
(3)图像旋转
图3.3.3图像旋转
(4)图像缩放
图3.3.4图像缩放
分析:
上述结果表明都实现了图像的几何变换。
4图像加噪(用输入参数控制不同噪声),然后使用空域和频域进行滤波处理
4.1算法原理
图像噪声在数字图像处理技术中的重要性越来越明显,如高放大倍数航片的判读,X射线图像系统中的噪声去除等已经成为不可缺少的技术步骤。
图像噪声主要有高斯噪声,椒盐噪声,泊松噪声等。
(1)高斯噪声
所谓高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。
如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。
高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。
高斯白噪声包括热噪声和散粒噪声。
高斯分布,也称正态分布,又称常态分布,记为N(μ,
),其中μ,
为分布的参数,分别为高斯分布的期望和方差。
当有确定值时,p(x)也就确定了,特别当μ=0,
=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),作为处理后图像在该点上的灰度个g(x,y),即个g(x,y)=
,m为该模板中包含当前像素在内的像素总个数。
4.2算法设计
利用Matlab工具箱中的函数imnoise()添加噪声。
I=imread('666.jpg');
J=imnoise(I,'Gaussian',0.02);
subplot(221);imshow(I);title('原图像');
subplot(222);imshow(J);title('加入高斯噪声');
if(ndims(I)==3)%判断是否为灰度图像
A=rgb2gray(I);%转换为灰度图像
else
A=I;
end
M=medfilt2(A);
subplot(223);imshow(M);title('中值滤波后的图像');
k1=filter2(fspecial('average',3),A)/255;
subplot(224);imshow(k1);title('均值滤波后的图像');
其他的噪声类似。
关键语句:
J=imnoise(I,'salt&pepper',0.02);
加入椒盐噪声
J=imnoise(I,'spckle',0.02);
加入乘性噪声
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算法设计
I=imread('333.jpg');
subplot(221);
imshow(I);title('image');
mysize=size(I);%获取图像的尺寸
ifnumel(mysize)>2%判断是否为灰度图像
A=rgb2gray(I)%若不是的,则进行灰度化处理,然后赋值给A
else
A=I%若是,则直接赋值给A
end
BW1=edge(A,'Log');
BW2=edge(A,'prewitt');
BW3=edge(A,'Sobel');
subplot(222);imshow(BW1);title('Log');
subplot(223);imshow(BW2);title('prewitt');
subplot(224);imshow(BW3);title('sobel');
5.3实验结果及分析
图5.3.1边缘检测
分析:
算子提取了图像的边缘
6附加题目:
读入两幅图像,一幅为背景图像,一幅为含有目标的图像,应用所学的知识提取出目标
6.1算法原理
迭代式阈值选取的基本思路是:
首先根据图像中物体的灰度分布情况,选取一个近似阈值作为初始阈值,一个较好的方法就是将图像的灰度均值作为初始阈值;然后通过分割图像和修改阈值的迭代过程获得认可的最佳阈值[5]。
迭代式阈值选取过程可描述如下。
(1)选取一个初始阈值T。
(2)利用阈值T把给定图像分割成两组图像,记为1R2R。
(3)计算R1和R2均值和u1和u2。
(4)选取新的阈值T,且
(5)重复第
(2)~(4)步,直至R1和R2均值和u1和u2不再变化为止。
6.2算法设计
I=imread('trees.tif');
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;
fori=1:
iSize
(1)
forj=1:
iSize
(2)
tmp=I(i,j);
if(tmp>=TK)
iForeground=iForeground+1;
ForegroundSum=ForegroundSum+double(tmp);
else
iBackground=iBackground+1;
BackgroundSum=BackgroundSum+double(tmp);
end
end
end
ZO=ForegroundSum/iForeground;
ZB=BackgroundSum/iBackground;
TKTmp=uint8((ZO+ZB)/2);
if(TKTmp==TK)
bCal=0;
else
TK=TKTmp;
End
end
disp(strcat('迭代后的阈值:
',num2str(TK)));
newI=im2bw(I,double(TK)/255);
subplot(121),imshow(I)
subplot(122),imshow(newI)
6.3实验结果及分析
分析:
有效地将前景跟后景分离出来了。
二、GUI界面设计部分
2.1界面功能设计
将第一部分的设计的算法打包,集成到GUI界面当中,使用菜单编辑模式来定义每个按键的功能。
然后在callback函数下面写下编写好的代码,就可以实现图形用户界面。
图2.1.1前面板
图2.1.2运行后的界面
2.2界面功能实现
实现了上述算法设计部分当中的所有功能。
2.3GUI功能测试
由于功能较多,所有图片不一一展示。
(1)直方图获取
图2.3.1直方图获取
(2)对比度增强
图2.3.2对比度增强
(3)边缘检测
图2.3.3sobel边缘检测
(4)图像加噪
图2.3.4加入参数为0.5的椒盐噪声
(5)滤波处理
图2.3.5均值滤波
三小结(感受和体会)
在没有完成作业之前,心里面很迷茫,不知道这个东西要怎么动手。
为此,在实践正式开始前,我利用课余时间,重新复习了matlab教材,专门借阅了利用matlab进行图像处理的相关教程,通过索引网络上的相关资料,为课设做了较为充分的准备。
在参考了相关材料及源程序,我对自己要做的内容有了进一步的了解,并对matlab的使用有了更深的体会。
在本次作业中,我学会了很多东西。
不仅仅是数字图像处理方面的内容,而且还学到了很多Matlab相关的知识。
让我认识到了Matlab功能的强大!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB GUI课程设计期末大作业湖南理工学院汇编 GUI 课程设计 期末 作业 湖南 理工学院 汇编