matlab界面编程实现灰度变换

上传人:pia****nwu 文档编号:166981502 上传时间:2022-11-02 格式:DOC 页数:19 大小:2.02MB
返回 下载 相关 举报
matlab界面编程实现灰度变换_第1页
第1页 / 共19页
matlab界面编程实现灰度变换_第2页
第2页 / 共19页
matlab界面编程实现灰度变换_第3页
第3页 / 共19页
点击查看更多>>
资源描述
图形图像处理课程大作业姓名: 班级: 学号: 目录界面编程实现图像灰度变换1摘 要2正 文31.MATLAB界面编程简介:32.图像的灰度变换简介33.采用MATLAB Guide设计界面43.1 问题分析:43.2实验方法:43.3实验结果:54. 线性变换的算法设计与实现:54.1问题分析:54.2实验方法:54.3实验结果:65. 对数变换的算法设计与实现85.1问题分析:85.2实验方法:85.3实验结果:86. 幂律变换的算法设计与实现:106.1问题分析:106.2实验方法:106.3实验结果:11实验心得13附录131.参考文献:132.源代码:13界面编程实现图像灰度变换问题描述:本课题主要解决的问题是通过MATLAB界面编程实现图像的灰度变换,包括线性灰度变换、对数灰度变换、幂律灰度变换,以此来实现图像增强,使图像更适合于进一步的分析和对它内容的提取。实现界面编程可以更方便的对图片进行操作,例如可以打开任意一张需要处理的图片,可以使图像处理结果更直观,对比更明显,更利于进行观察,同时可以实现保存处理后的图片,这样,图像的操作更简洁、直接。摘 要本次报告旨在完成以下几个任务:1、MATLAB界面编程简介;2、图像的灰度变换简介;3、采用MATLABGuide设计界面,设计实现下列功能的按钮:可以读入并显示任意一张图像,可以实现图像灰度变换(线性变换、对数变换和幂律变换),可以保存处理后的图片,可以退出程序,点击相应的按钮可以实现相应的功能;4、线性变换的算法设计与实现;5、对数变换的算法设计与实现;6、幂律变换的算法设计与实现。结果如正文所示。正 文1.MATLAB界面编程简介:图形用户界面是由窗口、光标、按键、菜单、文字说明等对象构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,如实现计算、绘图等。若想制作一个可供反复使用且操作简单的专用工具,则图形用户界面是非常好的选择之一。MATLAB中的GUIDE提供了多种设计GUI模板,并自动生成M文件框架,用户可以在该框架内写自己的函数代码,实现所需要的功能。2.图像的灰度变换简介图像的灰度变换处理是图像增强处理技术中一种非常基础、直接的空间域图像处理法,也是图像数字化软件和图像显示软件的一个重要组成部分。灰度变换是指根据某种目标条件按一定变换关系逐点改变原图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。有选择的突出图像中感兴趣的特征或者抑制图像中某些不需要的特征,使图像与视觉响应特征相匹配。灰度变换是基于点操作的增强方法,它将每一个像素的灰度值按照一定的数学变换公式转换为一个新的灰度值,如增强处理中的对比度增强。对比度增强可以采用线性拉伸和非线性拉伸。线性拉伸可以将原始输入图像中的灰度值不加区别地扩展。如果要求对局部扩展拉伸某一范围的灰度值,或对不同范围的灰度值进行不同的拉伸处理时,采用分段线性拉伸。非线性拉伸常采用对数扩展和指数扩展。对数扩展拉伸低亮度去,压缩高亮度区;指数扩展拉伸了高亮区,压缩了低亮度区。3.采用MATLAB Guide设计界面3.1 问题分析:采用MATLABGuide设计界面,设计实现下列功能的按钮:可以读入并显示任意一张图像;可以实现图像灰度变换(线性变换、对数变换和幂律变换);可以保存处理后的图片;可以退出程序;点击相应的按钮可以实现相应的功能。3.2实验方法:因为需要进行图形用户界面设计,所以先学习了MATLAB中GUIDE界面编程环境,熟悉界面设计的方法后,设计了需要的界面。(1) 在MATLAB命令窗口中输入“guide”,进入GUI窗口,选择Create New GUI,选择Black GUI。(2) 在界面中添加两个axes,一个用于显示原图,一个用于显示处理后的图像,并设置每个axes的Tag值。(3) 添加3个button,分别为打开图片、保存图片和退出程序,并为每个button设置Tag值。(4) 添加4个Panel,分别为灰度变换、线性变换、对数变换和幂律变换,灰度变换Panel包含其他3个Panel。(5) 在线性变换Panel、对数变换Panel和幂律变换Panel中分别添加3个Pop-up Menu,设置每个Pop-up Menu的可选项,并为每个Pop-up Menu设置Tag值。(6) 在对数变换Panel和幂律变换Panel中分别添加Static Text 输入参数、Edit Text和Button 进行变换,并为每个Edit Text和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大作业,自学了MATLABGUI程序设计,通过查阅相关资料,学会了简单的界面编程。通过界面编程来对图像进行灰度变换,结果对比更加直接。除此之外,对于图像的灰度变换也有了进一步的理解,为了掌握图像变换的内部原理,在掌握操作函数之余,还要翻阅相关书籍,把图像变换的原理理解清楚。总之,通过这次大作业,我学会了很多,在今后的学习过程中,我会争取获得更多收获。附录1.参考文献:【1】 章毓晋译.实用MATLAB图像和视频处理.清华大学出版社,2013【2】 杨丹,赵海滨,龙哲.MATLAB图像处理实例详解.清华大学出版社,2013【3】 郭仕剑、邱志模、陆静芳.MATLAB入门与实践.北京:人民邮电出版社,2008【4】 张智星.MATLAB程序设计及应用.北京:清华大学出版社,2002【5】 肖伟、刘忠.MATLAB程序设计与应用M.北京:清华大学出版社,20052.源代码:打开图片:function pushbtn_open_Callback(hObject, eventdata, handles)try isLoad=getappdata(handles.figure1,isLoad); if isLoad=0, fileName,filePath,filterIndex=uigetfile(. *.*,All files;,. 选择图像文件,MultiSelect,off); if isequal(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); if length(sizeI)=3, I=rgb2gray(I); elseif length(sizeI)=2, I=I; else errordlg(程序发生错误.,提示); end setappdata(handles.figure1,loadImage,I); imshow(I); end else btnName=questdlg(您已经打开一个图像文件,确定要打开新的图像,提,. 确定,取消,取消); switch btnName, case 确定, setappdata(handles.figure1,isLoad,0);feval(pushbtn_open_Callback,handles.pushbtn_open,eventdata,handles); case 取消, return; end endcatch errordlg(您需要打开图像文件.,提示);end保存图片:function pushbtn_save_Callback(hObject, eventdata, handles)try resultImage=getappdata(handles.figure1,resultImage); if isequal(resultImage,0), uiwait(msgbox(您还没有对图片进行操作!,提示); return; else fileName,pathName=uiputfile(*.jpg,保存图片); if isequal(fileName,0) | isequal(pathName,0), errordlg(,提示); return; else pathfile=pathName fileName imwrite(resultImage,pathfile,jpeg) end endcatchend线性变换:function popupmenu_xianxing_Callback(hObject, eventdata, handles)try loadImage=getappdata(handles.figure1,loadImage); method = get(handles.popupmenu_xianxing,Value); switch method, case 1, x = uint8(0:255); resultImage = x(loadImage+1); case 2, resultImage = imcomplement(loadImage); end setappdata(handles.figure1,resultImage,resultImage); axes(handles.axes_result); imshow(resultImage);catch errordlg(程序发生错误.,提示);end对数变换:function popupmenu_duishu_Callback(hObject, eventdata, handles)try x = 0:255; loadImage=getappdata(handles.figure1,loadImage); method = get(handles.popupmenu_duishu,Value); switch method, case 1, c = 255/log(1024); y = c*log(x+1); resultImage = uint8(y(loadImage+1); case 2, c = 255/log(512); y = c*log(x+1); resultImage = uint8(y(loadImage+1); case 3, c = 255/log(256); y = c*log(x+1); resultImage = uint8(y(loadImage+1); case 4, c = 255/log(128); y = c*log(x+1); resultImage = uint8(y(loadImage+1); case 5, c = 255/log(64); y = c*log(x+1); resultImage = uint8(y(loadImage+1); case 6, c = 255/log(32); y = c*log(x+1); resultImage = uint8(y(loadImage+1); case 7, c = 255/log(16); y = c*log(x+1); resultImage = uint8(y(loadImage+1); case 8, 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幂律变换:function popupmenu_milv_Callback(hObject, eventdata, handles)try loadImage=getappdata(handles.figure1,loadImage); method = get(handles.popupmenu_milv,Value); x = 0:255; switch method, case 1, n = 0.4; c = 255/(255n); root = nthroot(x/c),n); resultImage = uint8(root(loadImage+1); case 2, n = 0.1; c = 255/(255n); root = nthroot(x/c),n); resultImage = uint8(root(loadImage+1); case 3, n = 1; c = 255/(255n); root = nthroot(x/c),n); resultImage = uint8(root(loadImage+1); case 4, n = 2; c = 255/(255n); root = nthroot(x/c),n); resultImage = uint8(root(loadImage+1); case 5, n = 2.5; c = 255/(255n); root = nthroot(x/c),n); resultImage = uint8(root(loadImage+1); case 6, n = 5; c = 255/(255n); root = nthroot(x/c),n); resultImage = uint8(root(loadImage+1); case 7, n = 10; c = 255/(255n); 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
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 中学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!