如何在matlab gui 读取mat通过点击使原来读取的图片和另一张图片叠加并显示?

基于MATLAB&&GUI的图像处理软件平台的开发
& 研究生阶段写的一个小文章,内容肤浅,不过转载请注明,谢谢!!
摘要:本文主要介绍了基于MATLAB的图形用户界面(GUI)来制作图像处理软件平台的具体过程和相关技巧,文章主要从几个方面展开论述:第一,简单介绍下GUI与GUIDE;第二,介绍以下GUIDE的模板及其操作方法;第三,详细阐述一下图像处理软件平台的制作方法。本文的GUI例子所制作的图像处理软件可以实现的功能有:五种常用的边缘检测、灰度直方图的显示、灰度直方图的均衡化、对比度自适应直方图的均衡化、图片的二值化以及彩色图片的灰度化。文章基本介绍了以上的内容,关于软件还有许多未能实现的功能有待于日后的逐步开发,从这个简单的实例可以让读者从感性的方面充分了解MATLAB的图形用户界面的相关功能,同时为打算深入学习这一套MATLAB工具集的读者做一个铺垫。
关键词:图形用户界面;图像处理;边缘检测;MATLAB工具集
图形用于界面(Graphical User
Interfaces,GUI)是提供人机交互的工具和方法。GUI是包含图形对象(如窗口、图标、菜单和文本)的用户界面。以某种方式选择或激活这些对象时,通常会引起动作或者发生变化。一个设计优秀的GUI能够非常直观的让用户知道如何操作MATLAB界面,并且了解设计者的开发意图。MATLAB的GUI为开发者提供了一个不脱离MATLAB的开发环境,有助于MATLAB程序的GUI集成。这样可以使开发者不必理会一大堆烦杂的代码,简化程序,但是同样可以实现向决策者提供图文并茂的界面,甚至达到多媒体的效果。可以说MATLAB提供了一个简便的开发环境,可以让开发者快速上手,提高了开发者的工作效率。
所谓的GUIDE就是图形用户界面开发环境(Graphical User Interface Development
Environment),它向用户提供了一系列的创建用户图形界面的工具。这些工具大大简化了GUI设计和生成的过程。GUIDE可以完成的任务有如下两点:1)输出GUI。2)GUI编程。GUIDE实际上是一套MATLAB工具集,它主要由七部分组成:版面设计器、属性编辑器、菜单编辑器、调整工具、对象浏览器、Tab顺序编辑器、M文件编辑器。
二、GUIDE的操作界面及使用方法的介绍
1.启动GUIDE&
在命令窗口中直接键入guide,启动GUIDE,或者直接点击MATLAB上&&
按钮,会出现如图1所示的GUIDE Quick
Start对话框。利用GUIDE模板创建GUI,或者打开已经存在的GUI,单击OK按钮,打开版面设计工具,如图2所示。在通常状况下组件面板并不显示出组件的名称,如果需要显示组件名称,则进行下面的操作:从File菜单中选择Preferences选项,勾选Show
names in component palette选项即可。
&&&&&&&&&&&&&&&&&&&
图1 &GUIDE启动对话框
&&&&&&&&&&&&&&&&&&&&&&&图3&
M文件编辑器
3.GUIDE环境的设置&
用户可以自定义GUIDE设计环境。在File菜单下选择Preferences,打开如图4所示的设置对话框,可以进行相应的设置。
&&&&&&&&&&&&&&&&&&&&
图4& GUIDE环境设置
三、基于GUI的图像处理软件平台的设计过程
1.GUIDE版面设计器(即FIG文件)的设计&
根据设计需要:首先拖拽两个图形窗口(Axes),一个作为待处理图片区域,另一个作为已处理图片区域;其次,拖拽六个电子按钮(Radio
Button),作为边缘检测操作按钮以及一个Panel按钮作为检测按钮的支撑面板;第三,拖拽三个按钮(Push
Button),作为灰度变化区域的按钮;最后,拖拽五个按钮(Push
Button),作为选取/保存图片及退出等操作按钮。将上面的所有按钮及图形窗口合理的布局,达到美观工整的效果,本文设计的GUIDE如图5所示,然后运行一下GUI,系统会自动生成GUI文件。
&&&&&&&&&&&&&&&&&&&
图5& 图像处理软件的GUIDE版面
2.选取图片按钮的GUI设计&
要想设计一个图像处理的软件,首先要考虑选取图片,选取什么格式的图片,这个是至关重要的,所以先介绍一下选取图片按钮的GUI设计方法。上面已经规划好了按钮的位置,如果想在点击选取图片按钮时,软件给予响应,需要给按钮输入一定的程序代码,设置代码的方法如下:右键单击选取图片按钮,选择View
Callbacks/
Callback,系统会自动带设计者进入此按钮的代码输入区域,在下面的空白处输入如下代码[1]:
global im&& %定义一个全局变量im
[filename,pathname]=...
uigetfile({'*.*';'*.bmp';'*.tif';'*.png'},'select
picture');& %选择图片路径
str=[pathname filename];& %合成路径+文件名
im=imread(str);&& %读取图片
axes(handles.axes1);& %使用第一个axes
imshow(im);& %显示图片
写完上述代码后,保存M文件,然后运行GUI,现在就可以实现选择图片的功能了。当然有选取就要考虑存储已处理好的图片,这就引出了存储图片按钮的GUI设计。
3.存储图片按钮的GUI设计&
同样右键单击存储图片按钮,选择View Callbacks/
Callback,进去M文件后在下面的空白处输入如下代码[2]:
global BW& %定义处理后的图片BW这个全局变量
[filename,pathname,filterindex]=...
uiputfile({'*.bmp';'*.tif';'*.png'},'save picture');存储图片路径
if filterindex==0
return& %如果取消操作,返回
str=[pathname filename];& %合成路径+文件名
axes(handles.axes2);& %使用第二个axes
imwrite(BW,str);& %写入图片信息,即保存图片
4.边缘检测按钮组的GUI设计&
本文设计的GUI主要包含了五种最常用的检测算法(即roberts、sobel、prewitt、log、canny检测),右键单击Panel面板,选择View
Callbacks/ SelectionChangeFcn,进入M文件后在空白处输入如下代码[3]:
global BW& %定义全局变量
str=get(hObject,'string');& %拿到所选按钮的名称
axes(handles.axes2);&&
%使用第二个axes
&switch str&&
case'Initial'& %点击原图按钮
imshow(im);& %显示原图
case'Roberts'& %点击Roberts边缘检测按钮
BW=edge(im,'roberts');
imshow(BW);
case'Sobel'& %点击Sobel边缘检测按钮
BW=edge(im,'sobel');
imshow(BW);
case'Prewitt'& %点击Prewitt边缘检测按钮
BW=edge(im,'prewitt');
imshow(BW);
case'Log'&
%点击Log边缘检测按钮&&&&&&
BW=edge(im,'log');
imshow(BW);
case'Canny'& %点击Canny边缘检测按钮
BW=edge(im,'canny');
imshow(BW);
5.退出按钮的GUI设计&
同样右键单击退出按钮,选择View Callbacks/ Callback,进入M文件中,在空白处输入如下代码:
close(gcf)& %关闭当前Figure窗口句柄
其他按钮代码的设置都与上面叙述的大同小异,相关图像处理程序代码请参考MATLAB7.0图形图像处理[4],在这里将不再累述。
四、图像处理软件的运行举例
运行GUI,将生成图像处理的软件平台,它可以实现的功能有:五种常用的边缘检测、灰度直方图的显示、灰度直方图的均衡化、对比度自适应直方图的均衡化、图片的二值化以及彩色图片的灰度化。现在运行软件并举些相关图像处理实例。
1.灰度图片边缘检测的举例&
首先选择一幅名字为lena256的灰度图片,依次选择五种检测按钮,比较各种边缘检测的处理效果,通过对比,发现Canny
算子对图片的边缘检测效果比较好,其检测效果如图6所示,其它4种算子检测后的效果如图7所示。
&&&&&&&&&&&&&&&
图6& Canny算子对图片的边缘检测效果
&&&&&&&&&&&&&&&&&&&&&&
图7& 其它4种边缘检测效果对比图
2.灰度图片的直方图显示举例&
选取名字为cameraman的灰度图片,点击直方图的显示按钮,此灰度图片的直方图分布将显示在第二个axes中,其处理结果如图8所示。
&&&&&&&&&&&&&&&&&&&&&&&&&图8&
灰度图片直方图显示
3.彩色图片的二值化和灰度化处理举例& 选取名字为Water
lilies的彩色图片,分别点击二值化和灰度化按钮并保存处理后的图片,其处理后的图片效果如图9所示。
五、结束语
由于MATLAB强大的工程计算和仿真能力,使越来越多的用户从原来的开发环境转到MATLAB上来。现在绝大多数MATLAB开发者都是一些从事一定领域的研究者,他们使用其他的开发环境设计GUI不紧编程复杂、而且学习困难,往往需要花费大量时间在编程上。但是,MATLAB提供了一个简便的开发环境,可以让开发着快速上手,提高了开发者的工作效率。本文详细向读者介绍了MATLAB的GUI的制作方法,通过这个例子,可以清楚的了解GUIDE的设计方法及相关图像处理代码的编辑,使读者从感性的角度认识GUIDE的功能及使用方法,可以说为初学者提供了一个学习平台,打下坚实的基础。
4.王家文.MATLAB7.0图形图像处理.北京:国防工业出版社,2.
5.罗军辉.MATLAB7.0在图像处理中的应用.北京:机械工业出版社,3.
内容虽然很简单,仅供大家参考,如有不对之处,请给与点评!!!!!!!!!!!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。求教matlab GUI 问题 从文件中一次读取的图片如何多次使用_百度知道
求教matlab GUI 问题 从文件中一次读取的图片如何多次使用
jpg'PS=imread(s);s =*;ps2=inread(s);;axes(}).axes1);;'imshow(PS);global s.bmp'*;imshow(ps2);axes(handles[filename.gif''这样做为什么第二张图片没有显示; global s,*.axes2);str=[pathname filename],filterindex]=uigetfile({&#39
提问者采纳
我用matlab试了一下,你的代码可以运行.hiphotos://a.com/zhidao/wh%3D450%2C600/sign=a8f194b4bc315cebb881e725/d52ab13bac47b15ce36d3d539bd64.hiphotos://a./zhidao/pic/item/d52ab13bac47b15ce36d3d539bd64。
其他类似问题
为您推荐:
matlab的相关知识
其他1条回答
总之先确定是不是第二次图片已经正确读进来了。因为axes有时确实不太好用,你可以替换成figure(2),试一下请检查第二个axes,集中精力解决切换坐标轴的问题就行了。如果是的话
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁matlab,GUI设计中为什么要先运行m文件,为什么matlab gui的两个axes只能显示先单击的图形?另一个就...
来源:网络
关键字: matlab gui
更新时间:
延伸:本文除了聚合《matlab,GUI设计中为什么要先运行m文件》,免费提供的有关matlab gui和为什么matlab gui的两个axes只能显示先单击的图形?另一个就...的内容之一,已有不少的网友认为此答案对自己有帮助!获取更多与《》相关的知识。
网友0的回答
【叮地叫一声】意味着出错了,至于是什么错,根据你现在给的信息完全无1c4a法判断。 你至少应该截个屏,把错误网友1的回答
寡人来迟了么网友2的回答
这个没有现成的,GUI是有用户界面的。所以想把m文件转成GUI的话,要先设计界面,这个文件会以.fi网友1的回答
在参数输入界面中,创建适当数量的edit和pushbutton控件; pushbutton控件就是你网友0的回答
你好,请问在matlab中我之前已经写好了好几个m文件,在gui中的pop-up menu中下拉菜单网友1的回答
比如 读取一张图片并显示 matlab中文论坛 gui板块 建议你看看 不难 function pu网友2的回答
function start_Callback(hObject, eventdata, handle网友1的回答
不是直接打开fig文件不行,而是你打开的方法不对. 要从Start中选择GUIDE,然后再打开fig网友0的回答
创建GUI时有三个文件,其中.fig和.M文件运行哪个都行。没有先后。最满意的回答
猜你感兴趣
回答问题赢iPhone 6202 一个用matlab实现的程序,将两幅图片叠加,其中 后的
238万源代码下载-
&文件名称: 202
& & & & &&]
&&所属分类:
&&开发工具: matlab
&&文件大小: 61 KB
&&上传时间:
&&下载次数: 151
&&提 供 者:
&详细说明:一个用matlab实现的程序,将两幅图片叠加,其中附有叠加后的图片-The realization of a matlab procedure used to overlay two images, one with the picture after stacking
文件列表(日期:~)(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&202&&&&&&...\&&...\&&
&[]:没有注释 看了半天 不知道什么意思 感觉是图片自己与自己叠加&[]:不能解压或下载失败
&近期下载过的用户:
&&&&&&&&&&&&[]
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - matlab中图像的循环读入程序,我做了图像imadd叠加操作,别的函数也可以类似的使用这种循环
&[] - 是MATLAB中有关图形绘制的实用子程序,包括三角函数曲线,图形叠加,图形标注等30个实用程序
&[] - MATLAB车牌号识别、污染图片叠加去噪、滤波器去噪、彩色图片处理等
直方图均衡
&[] - 先由原始图像(任选)产生待恢复的图像;(产生方法如下:冲激
函数为 ,将原始图像与冲激函
数卷积产生模糊,然后再迭加均值为0,方差为8,16,32的高斯
随机噪声而得到一组待恢复的图像 ;
&[] - 将两张图片叠加来显示出效果,对于OPENGL的研究有借鉴意义
&[] - VB 6.0,简单的图形图像处理。实现两张图片叠加。
&[] - 图片叠加的程序,这只是一个demo没有很好的图形界面,只是简单实现了图片叠加的功能
&[] - matlab环境下在同一个窗口内显示两幅图像
&[] - 此代码主要是用于在MATLAB中的图像叠加,现实中主要应用与全景图片。
&[] - 适用于复杂背景下的差减法!效果还行!是一个难得的程序,与大家分享哈!2532人阅读
Matlab(13)
在matlab gui中,在axes上用imshow函数显示一副图片,然后在axes的ButtonDownFcn下写下相应的响应,比如获得图像任一像素的坐标点。但是当你点击axes时,是不会有任何响应的。
例子:用pushbutton来在axes上显示图像
function pushbutton1_Callback(hObject, eventdata, handles)
axes(handles.axes1);
% a7 = imshow(pic);
pic = imread('435-2.bmp');
& && & image(pic);
pt = get(handles.axes1,'currentpoint');%注意:问题出在这里。
m = round(pt(1,2));
n = round(pt(1,1));
H_text1=findobj('tag','text1');
H_text2=findobj('tag','text2');
% 将像素坐标点显示在文本框中&
set(H_text1,'string',num2str(m));
set(H_text2,'string',num2str(n));
这样就可以得到坐标值了。
但是问题又来了,按下pushbutton,坐标值只能得到一次,想得到第二次,就得再按一次pushbutton,问题是,怎么样连续得到坐标值呢?
正确做法:下面是我的解决办法
function pushbutton1_Callback(hObject, eventdata, handles)%这个是设置鼠标事件的,点击一下鼠标,会出现相应细胞的一些参数
% hObject & &handle to pushbutton1 (see GCBO)
% eventdata &reserved - to be defined in a future version of MATLAB
% handles & &structure with handles and user data (see GUIDATA)
if(length(img)&0)
& & axes(handles.axes1);
& & imageHandle=imshow(img);
& & set(imageHandle,'ButtonDownFcn',@ImageClickCallback);%设置鼠标点击响应函数为对对象
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&%&imageHandle响应,而不是对axes1响应
function ImageClickCallback ( objectHandle , eventData )
axesHandle &= get(objectHandle,'Parent');
%获取坐标轴axesHandles
coordinates = get(axesHandle,'CurrentPoint');&
%获取点击的处的坐标
coordinates = coordinates(1,1:2);
x=ceil(coordinates (1));
y=ceil(coordinates (2));
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:146670次
积分:1935
积分:1935
排名:第13372名
原创:45篇
转载:25篇
评论:20条
(8)(1)(2)(1)(3)(1)(1)(1)(1)(2)(7)(2)(2)(1)(8)(3)(1)(1)(2)(3)(4)(4)(11)

我要回帖

更多关于 matlab gui 读取图像 的文章

 

随机推荐