matlab界面编程实现灰度变换.docx
《matlab界面编程实现灰度变换.docx》由会员分享,可在线阅读,更多相关《matlab界面编程实现灰度变换.docx(47页珍藏版)》请在冰豆网上搜索。
matlab界面编程实现灰度变换
图形图像处置课程
大作业
姓名:
班级:
学号:
界面编程实现图像灰度变换
问题描述:
本课题要紧解决的问题是通过MATLAB界面编程实现图像的灰度变换,包括线性灰度变换、对数灰度变换、幂律灰度变换,以此来实现图像增强,使图像更适合于进一步的分析和对它内容的提取。
实现界面编程能够更方便的对图片进行操作,例如能够打开任意一张需要处置的图片,能够使图像处置结果更直观,对照更明显,更利于进行观看,同时能够实现保留处置后的图片,如此,图像的操作更简练、直接。
摘要
本次报告旨在完成以下几个任务:
一、MATLAB界面编程简介;
二、图像的灰度变换简介;
3、采纳MATLAB Guide设计界面,设计实现以下功能的按钮:
能够读入并显示任意一张图像,能够实现图像灰度变换(线性变换、对数变换和幂律变换),能够保留处置后的图片,能够退出程序,点击相应的按钮能够实现相应的功能;
4、线性变换的算法设计与实现;
五、对数变换的算法设计与实现;
6、幂律变换的算法设计与实现。
结果如正文所示。
正文
界面编程简介:
图形用户界面是由窗口、光标、按键、菜单、文字说明等对象组成的一个用户界面。
用户通过必然的方式(如鼠标或键盘)选择、激活这些图形对象,使运算机产生某种动作或转变,如实现计算、画图等。
若想制作一个可供反复利用且操作简单的专用工具,那么图形用户界面是超级好的选择之一。
MATLAB中的GUIDE提供了多种设计GUI模板,并自动生成M文件框架,用户能够在该框架内写自己的函数代码,实现所需要的功能。
2.图像的灰度变换简介
图像的灰度变换处置是图像增强处置技术中一种超级基础、直接的空间域图像处置法,也是图像数字化软件和图像显示软件的一个重要组成部份。
灰度变换是指依照某种目标条件按必然变换关系逐点改变原图像中每一个像素灰度值的方式。
目的是为了改善画质,使图像的显示成效加倍清楚。
有选择的突出图像中感爱好的特点或者抑制图像中某些不需要的特点,使图像与视觉响应特点相匹配。
灰度变换是基于点操作的增强方式,它将每一个像素的灰度值依照必然的数学变换公式转换为一个新的灰度值,如增强处置中的对照度增强。
对照度增强能够采纳线性拉伸和非线性拉伸。
线性拉伸能够将原始输入图像中的灰度值不加区别地扩展。
若是要求对局部扩展拉伸某一范围的灰度值,或对不同范围的灰度值进行不同的拉伸处置时,采纳分段线性拉伸。
非线性拉伸常采纳对数扩展和指数扩展。
对数扩展拉伸低亮度去,紧缩高亮度区;指数扩展拉伸了高亮区,紧缩了低亮度区。
3.采纳MATLAB Guide设计界面
问题分析:
采纳MATLAB Guide设计界面,设计实现以下功能的按钮:
能够读入并显示任意一张图像;
能够实现图像灰度变换(线性变换、对数变换和幂律变换);
能够保留处置后的图片;
能够退出程序;
点击相应的按钮能够实现相应的功能。
实验方式:
因为需要进行图形用户界面设计,因此先学习了MATLAB中GUIDE界面编程环境,熟悉界面设计的方式后,设计了需要的界面。
(1)在MATLAB命令窗口中输入“guide”,进入GUI窗口,选择CreateNewGUI,选择BlackGUI。
(2)在界面中添加两个axes,一个用于显示原图,一个用于显示处置后的图像,并设置每一个axes的Tag值。
(3)添加3个button,别离为打开图片、保留图片和退出程序,并为每一个button设置Tag值。
(4)添加4个Panel,别离为灰度变换、线性变换、对数变换和幂律变换,灰度变换Panel包括其他3个Panel。
(5)在线性变换Panel、对数变换Panel和幂律变换Panel中别离添加3个Pop-upMenu,设置每一个Pop-upMenu的可选项,并为每一个Pop-upMenu设置Tag值。
(6)在对数变换Panel和幂律变换Panel中别离添加StaticText输入参数、EditText和Button进行变换,并为每一个EditText和Button设置Tag值。
实验结果:
界面设计结果如图3-1:
图3-1程序主界面
4.线性变换的算法设计与实现:
问题分析:
通过选择图片按钮,能够选择打开并显示任意一张需要处置的图片。
本课题中,线性变换包括两种,恒等变换和求反变换。
生成一个恒等变换函数,然后对图像利用变换函数以观看恒等函数是如何工作的;利用imcomplement函数对图像进行求补变换。
实验方式:
线性变换包括恒等变换和求反变换。
选择恒等变换,生成一个恒等变换函数x,然后对loadImage利用此函数进行变换,取得结果图像resultImage,并显示在界面中。
选择求反变换,那么利用imcomplement函数对loadImage进行求补变换,取得结果图像resultImage,并显示在界面中。
详细方式见源代码。
实验结果:
打开任意一张图片并显示在界面中,结果如图4-1,图4-2:
图4-1选择图片
图4-2显示原始图片
对所选图片进行恒等变换,结果如图4-3:
图4-3恒等变换结果
对所选图片进行求反变换,结果如图4-4:
图4-4求反变换结果
结果分析:
恒等变换,它简单的将每一个像素值映射为相同的值,因此结果图像与原始图像相同。
求反变换,利用求补函数取得每一个像素值的补,因此结果图像与原始图像互补。
5.对数变换的算法设计与实现
问题分析:
对数变换,是指输出图像的像素点的灰度值与对应的输出图像的像素灰度值之间为对数 关系。
对数变换函数能够用来紧缩一幅图像非动态范围以将原先没有的特点变得清楚。
参数不同,取得的图像的清楚度也不同。
实验方式:
对图像进行对数变换,第一要生产一个对数变换函数y,其中有一个参数c能够进行设置,可选择给定的几个值,也能够手动输入想测试的值。
然后对loadImage用此函数进行变换,取得的结果图像resultImage显示在界面中,通过测试多个值,能够取得一个相对清楚的结果图像,并进行保留。
详细方式见源代码。
实验结果:
打开任意一张图片并显示在界面中,结果如图5-1:
图5-1打开需要处置的图片
当n=255/log(512)时,对图像进行对数变换,结果如图5-2:
图5-2对数变换结果
当n=255/log(256)时,对图像进行对数变换,结果如图5-3:
图5-3对数变换结果
当n=255/log(128)时,对图像进行对数变换,结果如图5-4:
图5-4对数变换结果
结果分析:
由图像处置结果能够清楚的发觉,原始图像通过对数变换后变得清楚了,图像的细节显示出来了。
这是因为对数变换扩展了低灰度区,紧缩了高灰度区,能使低灰度区的图像较清楚地显示出来。
被选择的参数不同时,图像的清楚程度不同,在实际应历时,可依照具体要处置的图像不同,选择不同的参数。
6.幂律变换的算法设计与实现:
问题分析:
幂律变换,是指输出图像的像素点的灰度值与对应的输出图像的像素灰度值之间知足指 数关系。
幂律变换包括n次方根和n次方映射函数(本课题中利用的是n次方根函数),这些函数比对数变换函数功能更强,因为能够指定n的值,它最终改变曲线的形状以知足特殊需要。
输入的参数不同,取得的图像的清楚度也不同。
实验方式:
对图像进行幂律变换,第一要生产一个n次方根函数root,其中参数n能够进行设置,可选择给定的几个值,也能够手动输入想测试的值。
然后对loadImage用此函数进行变换,取得的结果图像resultImage显示在界面中,通过测试多个值,能够取得一个相对清楚的结果图像,并进行保留。
详细方式见源代码。
实验结果:
打开任意一张图片并显示在界面中,结果如图6-1:
图6-1显示原图
当n=1时,对图像进行幂律变换,结果如图6-2:
图6-2幂律变换结果
当n=2时,对图像进行幂律变换,结果如图6-3:
图6-3幂律变换结果
当n=时,对图像进行幂律变换,结果如图6-4:
图6-4幂律变换结果
结果分析:
由图像处置结果能够清楚的发觉,原始图像通过幂律变换后变得清楚了,图像的细节显示出来了。
这是因为幂律变换一样用于对图像的高灰度区给予较大扩展,适于过亮的图像。
被选择的参数不同时,图像的清楚程度不同,在实际应历时,可依照具体需要处置的图像不同,选择不同的参数。
实验心得
通过这次MATLAB大作业,自学了MATLAB GUI程序设计,通过查阅相关资料,学会了简单的界面编程。
通过界面编程来对图像进行灰度变换,结果对照更加直接。
除此之外,关于图像的灰度变换也有了进一步的明白得,为了把握图像变换的内部原理,在把握操作函数之余,还要翻阅相关书籍,把图像变换的原理明白得清楚。
总之,通过这次大作业,我学会了很多,在尔后的学习进程中,我会争取取得更多收成。
附录
1.参考文献:
【1】章毓晋译.有效MATLAB图像和视频处置.清华大学出版社,2013
【2】杨丹,赵海边,龙哲.MATLAB图像处置实例详解.清华大学出版社,2021
【3】郭仕剑、邱志模、陆静芳.MATLAB入门与实践.北京:
人民邮电出版社,2020
【4】张智星.MATLAB程序设计及应用.北京:
清华大学出版社,2002
【5】肖伟、刘忠.MATLAB程序设计与应用[M].北京:
清华大学出版社,2005
2.源代码:
打开图片:
functionpushbtn_open_Callback(hObject,eventdata,handles)
try
isLoad=getappdata,'isLoad');
ifisLoad==0,
[fileName,filePath,filterIndex]=uigetfile(...
{'*.*','Allfiles';},...
'选择图像文件','MultiSelect','off');
ifisequal(fileName,0)||isequal(filePath,0),
return;
else
setappdata,'fileName',fileName);
setappdata,'filePath',filePath);
setappdata,'isLoad',1);
file=fullfile(filePath,fileName);
axes;
I=imread(file);
sizeI=size(I);
iflength(sizeI)==3,
I=rgb2gray(I);
elseiflength(sizeI)==2,
I=I;
else
errordlg('程序发生错误.','提示');
end
setappdata,'loadImage',I);
imshow(I);
end
else
btnName=questdlg('您已经打开一个图像文件,确信要打开新的图像','提',...
'确信','取消','取消');
switchbtnName,
case'确信',
setappdata,'isLoad',0);
feval(@pushbtn_open_Callback,,eventdata,handles);
case'取消',
return;
end
end
catch
errordlg('您需要打开图像文件.','提示');
end
保留图片:
functionpushbtn_save__Callback(hObject,eventdata,handles)
try
resultImage=getappdata,'resultImage');
ifisequal(resultImage,0),
uiwait(msgbox('您尚未对图片进行操作!
','提示'));
return;
else
[fileName,pathName]=uiputfile('*.jpg','保留图片');
ifisequal(fileName,0)||isequal(pathName,0),
errordlg('±£´æͼƬʱ·¢Éú´íÎó£¡','提示');
return;
else
pathfile=[pathNamefileName]
imwrite(resultImage,pathfile,'jpeg')
end
end
catch
end
线性变换:
functionpopupmenu_xianxing_Callback(hObject,eventdata,handles)
try
loadImage=getappdata,'loadImage');
method=get,'Value');
switchmethod,
case1,
x=uint8(0:
255);
resultImage=x(loadImage+1);
case2,
resultImage=imcomplement(loadImage);
end
setappdata,'resultImage',resultImage);
axes;
imshow(resultImage);
catch
errordlg('程序发生错误.','提示');
end
对数变换:
functionpopupmenu_duishu_Callback(hObject,eventdata,handles)
try
x=0:
255;
loadImage=getappdata,'loadImage');
method=get,'Value');
switchmethod,
case1,
c=255/log(1024);
y=c*log(x+1);
resultImage=uint8(y(loadImage+1));
case2,
c=255/log(512);
y=c*log(x+1);
resultImage=uint8(y(loadImage+1));
case3,
c=255/log(256);
y=c*log(x+1);
resultImage=uint8(y(loadImage+1));
case4,
c=255/log(128);
y=c*log(x+1);
resultImage=uint8(y(loadImage+1));
case5,
c=255/log(64);
y=c*log(x+1);
resultImage=uint8(y(loadImage+1));
case6,
c=255/log(32);
y=c*log(x+1);
resultImage=uint8(y(loadImage+1));
case7,
c=255/log(16);
y=c*log(x+1);
resultImage=uint8(y(loadImage+1));
case8,
c=255/log(8);
y=c*log(x+1);
resultImage=uint8(y(loadImage+1));
end
setappdata,'resultImage',resultImage);
axes;
imshow(resultImage);
catch
errordlg('程序发生错误.','提示');
end
幂律变换:
functionpopupmenu_milv_Callback(hObject,eventdata,handles)
try
loadImage=getappdata,'loadImage');
method=get,'Value');
x=0:
255;
switchmethod,
case1,
n=;
c=255/(255^n);
root=nthroot((x/c),n);
resultImage=uint8(root(loadImage+1));
case2,
n=;
c=255/(255^n);
root=nthroot((x/c),n);
resultImage=uint8(root(loadImage+1));
case3,
n=1;
c=255/(255^n);
root=nthroot((x/c),n);
resultImage=uint8(root(loadImage+1));
case4,
n=2;
c=255/(255^n);
root=nthroot((x/c),n);
resultImage=uint8(root(loadImage+1));
case5,
n=;
c=255/(255^n);
root=nthroot((x/c),n);
resultImage=uint8(root(loadImage+1));
case6,
n=5;
c=255/(255^n);
root=nthroot((x/c),n);
resultImage=uint8(root(loadImage+1));
case7,
n=10;
c=255/(255^n);
root=nthroot((x/c),n);
resultImage=uint8(root(loadImage+1));
end
setappdata,'resultImage',resultImage);
axes;
imshow(resultImage);
catch
errordlg('程序发生错误.','提示');
end
参考:
毕业论文(设计)工作记录及成绩评定册
题目:
学生姓名:
学号:
专业:
班级:
指导教师:
职称:
助理指导教师:
职称:
年月日
实验中心制
使用说明
一、此册中各项内容为对学生毕业论文(设计)的工作和成绩评定记录,请各环节记录人用黑色或蓝色钢笔(签字笔)认真填写(建议填写前先写出相应草稿,以幸免填错),并妥帖保留。
二、此册于学院组织对各专业题目审查完成后,各教研室汇编选题指南,经学生自由选题后,由实验中心组织发给学生。
三、学生如实填好本加封面上的各项内容和选题审批表的相应内容,经指导教师和学院领导小组批准后,交指导教师;指导教师填好《毕业论文(设计)任务书》的各项内容,经教研室审核后交学生签名确认其毕业论文(设计)工作任务。
四、学生在指导教师的指导下填好《毕业论文(设计)开题报告》各项内容,由指导教师和教研室审核通事后,确信其开题,并将此册交指导教师保留。
五、指导教师原那么上每周至少保证一次对学生的指导,如实按时填好《毕业论文(设计)指导教师工作记录》,并请学生签字确认。
六、中期检查时,指导教师将此册交学生填写前期工作小结,指导教师对其任务完成情形进行评判,学院中期检查领导小组对师生中期工作进行核查,并对未完成者提出整改意见,后将此册交指导教师保留。
七、毕业论文(设计)定稿后,依照学院工作安排,学生把论文(打印件)交指导教师评阅。
指导教师应认真按《毕业论文(设计)指导教师成绩评审表》对学生的论文进行评审并写出评语,然后把论文和此册一同交教研室。
八、教研室将学生的论文和此册别离交两位评阅人评阅后交回教研室保留。
九、学院答辩委员会审核学生答辩资格,确信答辩学生名单,把具有答辩资格学生的论文连同此册交各答辩小组。
十、学生答辩后由答辩小组记录人填好《毕业论文(设计)答辩记录表》中各项内容,然后把学生的论文和此册一同交所在答辩小组,答辩小组对其答辩进行评审并填写评语后交教研室。
十一、学院答辩委员会进行成绩总评定,填好《毕业论文(设计)成绩评定表》中各项内容,然后把论文(印刷版和电子版(另传))和此册等资料装入专用档案袋中,教教研室后由实验中心统一保留。
1.毕业论文(设计)选题审批表
2.毕业论文(设计)任务书
3.毕业论文(设计)开题报告
4.学生毕业论文(设计)题目更改申请表
5.毕业论文(设计)指导教师工作记录
6.毕业论文(设计)中期检查记录
7.毕业论文(设计)指导教师成绩评审表
8.毕业论文(设计)评阅人成绩评审表
9.毕业论文(设计)答辩申请表
10.毕业论文(设计)答辩记录表
11.毕业论文(设计)答辩成绩评审表
12.毕业论文(设计)成绩评定表
毕业设计(论文)选题审批表
题目名称
基于单片机的超声波测距
题目性质
□工程设计 □理论研究
□实验研究 □计算机软件
□综合论文 □其它
题目来源
□科研题目 □生产现场
□教学 □其它
□自拟题目
选题理由:
由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波
经常用于距离的测量。
利用超声波检测距离,设计比较方便,计算处理也较简单,精度也能达到使用要求,超声波测距应用于各种工业领域,如工业自动控制,建筑工程测量和机器人视觉识别等方面。
超声波作为一种检测技术,采用的是非接触式测量,由于它具有不受外界因素影响,对环境有一定的适应能力,且操作简单、测量精度高等优点而被广泛应用。
这些特点可使测量仪器不受被测介质的影响,大大解决了传统测量仪器存在的问题,比如,在粉尘多情况下对人引起的身体接触伤害,腐蚀性质的被测物对测量仪器腐蚀,触电接触不良造成的误测等。
此外该技术对被测元件无磨损,使测量仪器牢固耐用,使用寿命加长,而且还降低了能量耗损,节省人力和劳动的强度。
因此,利用超声波检测既迅速、方便、计算简单,又易于实时控制,在测量精度方面能达到工业实用的要求。
指导教师意见:
签名:
年月日
院(系)领导小组意见:
签名:
年月日
注:
此表由学生填写
毕业论文(设计)任务书
1、毕业论文(设计)应达到的目的:
(1)能对学生在学期间所学知识的检验与总结,培养和提高学生独立分析问题和解决问题的能力,使学生受到科学研究、工程设计和撰写技术报告等方面的基本训练。
(2)提高学生对工作认真负责、一丝不苟,对事物能潜心观察、用于开拓、用于实践的基本素质;
(3)培养学生综合运用所学知识,结合实际独立完成课题的工作能力。
(4)对学生的知识面、掌握知识的深度、运用理论结合实际去处理问题的能力、实践能力、计算机运用水平、书面及口头表达能力进行考核。
2、毕业论文(设计)的内容和要求(包括原始数据、技术要求、工作要求等):
以单片机为核心设计了基于激光测距的防撞预警系统,采用TDC-GP2芯片作为激光飞行计时单元,给出激光发射及回波接收放大电路,基于模块化思想设计、完成系统软件设计流程;最后通过实验测试,系统要能很好测出前方车辆距离及运行状态,并能及时发出报警,利用Matlab对其测试结果进行验证,修正。
3、对毕业论文(设计