matlab界面编程实现灰度变换共38页word资料.docx
《matlab界面编程实现灰度变换共38页word资料.docx》由会员分享,可在线阅读,更多相关《matlab界面编程实现灰度变换共38页word资料.docx(43页珍藏版)》请在冰豆网上搜索。
matlab界面编程实现灰度变换共38页word资料
图形图像处理课程
要练说,先练胆。
说话胆小是幼儿语言发展的障碍。
不少幼儿当众说话时显得胆怯:
有的结巴重复,面红耳赤;有的声音极低,自讲自听;有的低头不语,扯衣服,扭身子。
总之,说话时外部表现不自然。
我抓住练胆这个关键,面向全体,偏向差生。
一是和幼儿建立和谐的语言交流关系。
每当和幼儿讲话时,我总是笑脸相迎,声音亲切,动作亲昵,消除幼儿畏惧心理,让他能主动的、无拘无束地和我交谈。
二是注重培养幼儿敢于当众说话的习惯。
或在课堂教学中,改变过去老师讲学生听的传统的教学模式,取消了先举手后发言的约束,多采取自由讨论和谈话的形式,给每个幼儿较多的当众说话的机会,培养幼儿爱说话敢说话的兴趣,对一些说话有困难的幼儿,我总是认真地耐心地听,热情地帮助和鼓励他把话说完、说好,增强其说话的勇气和把话说好的信心。
三是要提明确的说话要求,在说话训练中不断提高,我要求每个幼儿在说话时要仪态大方,口齿清楚,声音响亮,学会用眼神。
对说得好的幼儿,即使是某一方面,我都抓住教育,提出表扬,并要其他幼儿模仿。
长期坚持,不断训练,幼儿说话胆量也在不断提高。
大作业
家庭是幼儿语言活动的重要环境,为了与家长配合做好幼儿阅读训练工作,孩子一入园就召开家长会,给家长提出早期抓好幼儿阅读的要求。
我把幼儿在园里的阅读活动及阅读情况及时传递给家长,要求孩子回家向家长朗诵儿歌,表演故事。
我和家长共同配合,一道训练,幼儿的阅读能力提高很快。
姓名:
单靠“死”记还不行,还得“活”用,姑且称之为“先死后活”吧。
让学生把一周看到或听到的新鲜事记下来,摒弃那些假话套话空话,写出自己的真情实感,篇幅可长可短,并要求运用积累的成语、名言警句等,定期检查点评,选择优秀篇目在班里朗读或展出。
这样,即巩固了所学的材料,又锻炼了学生的写作能力,同时还培养了学生的观察能力、思维能力等等,达到“一石多鸟”的效果。
班级:
学号:
界面编程实现图像灰度变换
问题描述:
本课题主要解决的问题是通过MATLAB界面编程实现图像的灰度变换,包括线性灰度变换、对数灰度变换、幂律灰度变换,以此来实现图像增强,使图像更适合于进一步的分析和对它内容的提取。
实现界面编程可以更方便的对图片进行操作,例如可以打开任意一张需要处理的图片,可以使图像处理结果更直观,对比更明显,更利于进行观察,同时可以实现保存处理后的图片,这样,图像的操作更简洁、直接。
摘要
本次报告旨在完成以下几个任务:
1、MATLAB界面编程简介;
2、图像的灰度变换简介;
3、采用MATLAB Guide设计界面,设计实现下列功能的按钮:
可以读入并显示任意一张图像,可以实现图像灰度变换(线性变换、对数变换和幂律变换),可以保存处理后的图片,可以退出程序,点击相应的按钮可以实现相应的功能;
4、线性变换的算法设计与实现;
5、对数变换的算法设计与实现;
6、幂律变换的算法设计与实现。
结果如正文所示。
正文
1.MATLAB界面编程简介:
图形用户界面是由窗口、光标、按键、菜单、文字说明等对象构成的一个用户界面。
用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,如实现计算、绘图等。
若想制作一个可供反复使用且操作简单的专用工具,则图形用户界面是非常好的选择之一。
MATLAB中的GUIDE提供了多种设计GUI模板,并自动生成M文件框架,用户可以在该框架内写自己的函数代码,实现所需要的功能。
2.图像的灰度变换简介
图像的灰度变换处理是图像增强处理技术中一种非常基础、直接的空间域图像处理法,也是图像数字化软件和图像显示软件的一个重要组成部分。
灰度变换是指根据某种目标条件按一定变换关系逐点改变原图像中每一个像素灰度值的方法。
目的是为了改善画质,使图像的显示效果更加清晰。
有选择的突出图像中感兴趣的特征或者抑制图像中某些不需要的特征,使图像与视觉响应特征相匹配。
灰度变换是基于点操作的增强方法,它将每一个像素的灰度值按照一定的数学变换公式转换为一个新的灰度值,如增强处理中的对比度增强。
对比度增强可以采用线性拉伸和非线性拉伸。
线性拉伸可以将原始输入图像中的灰度值不加区别地扩展。
如果要求对局部扩展拉伸某一范围的灰度值,或对不同范围的灰度值进行不同的拉伸处理时,采用分段线性拉伸。
非线性拉伸常采用对数扩展和指数扩展。
对数扩展拉伸低亮度去,压缩高亮度区;指数扩展拉伸了高亮区,压缩了低亮度区。
3.采用MATLAB Guide设计界面
3.1问题分析:
采用MATLAB Guide设计界面,设计实现下列功能的按钮:
可以读入并显示任意一张图像;
可以实现图像灰度变换(线性变换、对数变换和幂律变换);
可以保存处理后的图片;
可以退出程序;
点击相应的按钮可以实现相应的功能。
3.2实验方法:
因为需要进行图形用户界面设计,所以先学习了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.3实验结果:
界面设计结果如图3-1:
图3-1程序主界面
4.线性变换的算法设计与实现:
4.1问题分析:
通过选择图片按钮,可以选择打开并显示任意一张需要处理的图片。
本课题中,线性变换包括两种,恒等变换和求反变换。
生成一个恒等变换函数,然后对图像使用变换函数以观察恒等函数是如何工作的;使用imcomplement函数对图像进行求补变换。
4.2实验方法:
线性变换包括恒等变换和求反变换。
选择恒等变换,生成一个恒等变换函数x,然后对loadImage使用此函数进行变换,得到结果图像resultImage,并显示在界面中。
选择求反变换,则使用imcomplement函数对loadImage进行求补变换,得到结果图像resultImage,并显示在界面中。
详细方法见源代码。
4.3实验结果:
打开任意一张图片并显示在界面中,结果如图4-1,图4-2:
图4-1选择图片
图4-2显示原始图片
对所选图片进行恒等变换,结果如图4-3:
图4-3恒等变换结果
对所选图片进行求反变换,结果如图4-4:
图4-4求反变换结果
结果分析:
恒等变换,它简单的将每个像素值映射为相同的值,所以结果图像与原始图像相同。
求反变换,利用求补函数得到每个像素值的补,所以结果图像与原始图像互补。
5.对数变换的算法设计与实现
5.1问题分析:
对数变换,是指输出图像的像素点的灰度值与对应的输出图像的像素灰度值之间为对数 关系。
对数变换函数可以用来压缩一幅图像非动态范围以将原来没有的特征变得清晰。
参数不同,得到的图像的清晰度也不同。
5.2实验方法:
对图像进行对数变换,首先要生产一个对数变换函数y,其中有一个参数c可以进行设置,可选择给定的几个值,也可以手动输入想测试的值。
然后对loadImage用此函数进行变换,得到的结果图像resultImage显示在界面中,通过测试多个值,可以得到一个相对清晰的结果图像,并进行保存。
详细方法见源代码。
5.3实验结果:
打开任意一张图片并显示在界面中,结果如图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.幂律变换的算法设计与实现:
6.1问题分析:
幂律变换,是指输出图像的像素点的灰度值与对应的输出图像的像素灰度值之间满足指 数关系。
幂律变换包括n次方根和n次方映射函数(本课题中使用的是n次方根函数),这些函数比对数变换函数功能更强,因为可以指定n的值,它最终改变曲线的形状以满足特殊需要。
输入的参数不同,得到的图像的清晰度也不同。
6.2实验方法:
对图像进行幂律变换,首先要生产一个n次方根函数root,其中参数n可以进行设置,可选择给定的几个值,也可以手动输入想测试的值。
然后对loadImage用此函数进行变换,得到的结果图像resultImage显示在界面中,通过测试多个值,可以得到一个相对清晰的结果图像,并进行保存。
详细方法见源代码。
6.3实验结果:
打开任意一张图片并显示在界面中,结果如图6-1:
图6-1显示原图
当n=1时,对图像进行幂律变换,结果如图6-2:
图6-2幂律变换结果
当n=2时,对图像进行幂律变换,结果如图6-3:
图6-3幂律变换结果
当n=2.5时,对图像进行幂律变换,结果如图6-4:
图6-4幂律变换结果
结果分析:
由图像处理结果可以清楚的发现,原始图像经过幂律变换后变得清晰了,图像的细节显示出来了。
这是因为幂律变换一般用于对图像的高灰度区给予较大扩展,适于过亮的图像。
当选择的参数不同时,图像的清晰程度不同,在实际应用时,可根据具体需要处理的图像不同,选择不同的参数。
实验心得
通过这次MATLAB大作业,自学了MATLAB GUI程序设计,通过查阅相关资料,学会了简单的界面编程。
通过界面编程来对图像进行灰度变换,结果对比更加直接。
除此之外,对于图像的灰度变换也有了进一步的理解,为了掌握图像变换的内部原理,在掌握操作函数之余,还要翻阅相关书籍,把图像变换的原理理解清楚。
总之,通过这次大作业,我学会了很多,在今后的学习过程中,我会争取获得更多收获。
附录
1.参考文献:
【1】章毓晋译.实用MATLAB图像和视频处理.清华大学出版社,2019
【2】杨丹,赵海滨,龙哲.MATLAB图像处理实例详解.清华大学出版社,2019
【3】郭仕剑、邱志模、陆静芳.MATLAB入门与实践.北京:
人民邮电出版社,2019
【4】张智星.MATLAB程序设计及应用.北京:
清华大学出版社,2019
【5】肖伟、刘忠.MATLAB程序设计与应用[M].北京:
清华大学出版社,2019
2.源代码:
打开图片:
functionpushbtn_open_Callback(hObject,eventdata,handles)
try
isLoad=getappdata(handles.figure1,'isLoad');
ifisLoad==0,
[fileName,filePath,filterIndex]=uigetfile(...
{'*.*','Allfiles';},...
'选择图像文件','MultiSelect','off');
ifisequal(fileName,0)||isequal(filePath,0),
return;
else
setappdata(handles.figure1,'fileName',fileName);
setappdata(handles.figure1,'filePath',filePath);
setappdata(handles.figure1,'isLoad',1);
file=fullfile(filePath,fileName);
axes(handles.axes_original);
I=imread(file);
sizeI=size(I);
iflength(sizeI)==3,
I=rgb2gray(I);
elseiflength(sizeI)==2,
I=I;
else
errordlg('程序发生错误.','提示');
end
setappdata(handles.figure1,'loadImage',I);
imshow(I);
end
else
btnName=questdlg('您已经打开一个图像文件,确定要打开新的图像','提',...
'确定','取消','取消');
switchbtnName,
case'确定',
setappdata(handles.figure1,'isLoad',0);
feval(@pushbtn_open_Callback,handles.pushbtn_open,eventdata,handles);
case'取消',
return;
end
end
catch
errordlg('您需要打开图像文件.','提示');
end
保存图片:
functionpushbtn_save__Callback(hObject,eventdata,handles)
try
resultImage=getappdata(handles.figure1,'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(handles.figure1,'loadImage');
method=get(handles.popupmenu_xianxing,'Value');
switchmethod,
case1,
x=uint8(0:
255);
resultImage=x(loadImage+1);
case2,
resultImage=imcomplement(loadImage);
end
setappdata(handles.figure1,'resultImage',resultImage);
axes(handles.axes_result);
imshow(resultImage);
catch
errordlg('程序发生错误.','提示');
end
对数变换:
functionpopupmenu_duishu_Callback(hObject,eventdata,handles)
try
x=0:
255;
loadImage=getappdata(handles.figure1,'loadImage');
method=get(handles.popupmenu_duishu,'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(handles.figure1,'resultImage',resultImage);
axes(handles.axes_result);
imshow(resultImage);
catch
errordlg('程序发生错误.','提示');
end
幂律变换:
functionpopupmenu_milv_Callback(hObject,eventdata,handles)
try
loadImage=getappdata(handles.figure1,'loadImage');
method=get(handles.popupmenu_milv,'Value');
x=0:
255;
switchmethod,
case1,
n=0.4;
c=255/(255^n);
root=nthroot((x/c),n);
resultImage=uint8(root(loadImage+1));
case2,
n=0.1;
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=2.5;
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(handles.figure1,'resultImage',resultImage);
axes(handles.axes_result);
imshow(resultImage);
catch
errordlg('程序发生错误.','提示');
end
参考:
毕业论文(设计)工作记录及成绩评定册
题目:
学生姓名:
学号:
专业:
班级:
指导教师:
职称:
助理指导教师:
职称:
年月日
实验中心制
使用说明
一、此册中各项内容为对学生毕业论文(设计)的工作和成绩评定记录,请各环节记录人用黑色或蓝色钢笔(签字笔)认真填写(建议填写前先写出相应草稿,以避免填错),并妥善保存。
二、此册于学院组织对各专业题目审查完成后,各教研室汇编选题指南,经学生自由选题后,由实验中心组织发给学生。
三、学生如实填好本册封面上的各项内容和选题审批表的相应内容,经指导教师和学院领导小组批准后,交指导教师;指导老师填好《毕业论文(设计)任务书》的各项内容,经教研室审核后交学生签名确认其毕业论文(设计)工作任务。
四、学生在指导老师的指导下填好《毕业论文(设计)开题报告》各项内容,由指导教师和教研室审核通过后,确定其开题,并将此册交指导老师保存。
五、指导老师原则上每周至少保证一次对学生的指导,如实按时填好《毕业论文(设计)指导教师工作记录》,并请学生签字确认。
六、中期检查时,指导老师将此册交学生填写前期工作小结,指导教师对其任务完成情况进行评价,学院中期检查领导小组对师生中期工作进行核查,并对未完成者提出整改意见,后将此册交指导老师保存。
七、毕业论文(设计)定稿后,根据学院工作安排,学生把论文(打印件)交指导老师评阅。
指导老师应认真按《毕业论文(设计)指导教师成绩评审表》对学生的论文进行评审并写出评语,然后把论文和此册一同交教研室。
八、教研室将学生的论文和此册分别交两位评阅人评阅后交回教研室保存。
九、学院答辩委员会审核学生答辩资格,确定答辩学生名单,把具有答辩资格学生的论文连同此册交各答辩小组。
十、学生答辩后由答辩小组记录人填好《毕业论文(设计)答辩记录表》中各项内容,然后把学生的论文和此册一同交所在答辩小组,答辩小组对其答辩进行评审并填写评语后交教研室。
十一、学院答辩委员会进行成绩总评定,填好《毕业论文(设计)成绩评定表》中各项内容,然后把论文(印刷版和电子版(另传))和此册等资料装入专用档案袋中,教教研室后由实验中心统一保存。
1.毕业论文(设计)选题审批表
2.毕业论文(设计)任务书
3.毕业论文(设计)开题报告
4.学生毕业论文(设计)题目更改申请表
5.毕业论文(设计)指导老师工作记录
6.