matlab gui 项目实战
来源:互联网 发布:apache ant 1.9.3 bin 编辑:程序博客网 时间:2024/05/16 05:55
matlab gui 项目实战
转载请注明出处 ----- AA
Matlab gui目前是比较简单的界面设计。由于在科研与工程结合时,需要快速的开发出一个原型化的系统,这时候使用matlab可以很好的把探索中的算法付诸实践。
这个是我在做皮肤病红斑检测时作出的程序:
程序功能如下:
1.open按钮可以打开一张图片,即左上方的最大的图。
2.可以在大图中按下鼠标按键,拖动,画出一个框(黑色)。通过两个radio button 按键,我们可以知道划取得这个框是取得的不带红斑的好皮肤,还是带红斑的病变皮肤。
3.对划取得到的图像,正常皮肤显示在右上角,带红斑的病变皮肤在左下角。
4.下方中间是对红斑识别后显示出伪彩色图像,交由医生辅助判别的。
5.下方右边显示对红斑病变等级的判定统计直方图。
说明:由于是合作项目,我不能将识别后的结果显示出来,大家见谅。
打开matlab以后,在命令行里输入:guide
选择 default 即可。拖控件如下所示(这个会吧?自己改string属性)
这里我们说下架构啊,matlab是生成了一个figure,这个都懂吧,imshow显示一幅图片的时候就是这种figure。
然后我们拖出来的控件是放到figure上的。也就是说带网格的背景是figure,所有的控件都是放在他上面的。
现在先说控件消息。
右键点击Open按钮,选择 view callbacks ,选择call back
[filename, pathname] = uigetfile({'*.jpg'},'select'); %这个是生成一个打开文件的对话框,获取路径和文件名
str = [pathname filename];%生成完整的路径+文件名
im = imread(str);%读取图片
axes(handles.axes1);%这个是指定下一句imshow把图片显示到哪个axes
im_handle = imshow(im);
这样就把显示图片做好了。其中可能会有图片大小和我们的axes不一样大的情况。这个只有自己去调了。
因为我用的医学图像大小是固定的 , 所以不用怎么调。我把代码给大家展示一下
首先要用set,设定大小的单位,按我上面写的就行。(或者在界面中选择axes1的Unints属性)
然后重新设定axes的大小就行了。
然后是鼠标绘制框图。这里有3个消息,分别是鼠标按下,鼠标移动,鼠标抬起。这个都好理解。按下鼠标时记下当前鼠标位置 ,移动时获取鼠标位置,随时画框。注意,在画框之前要调用一下imshow,把之前画得框给覆盖掉。抬起鼠标时,最后一次画框。期间,按下鼠标时要设一个标记位,使得移动时要知道鼠标是否被按下。不然不按鼠标左键,在图像上也画框就不对了。看下具体实现:
1.添加消息:鼠标放到背景网格处,右键点击,选择 view callbacks ,添加WindowButtonDownFcn,WindowButtonMotionFcn,WindowButtonUpFcn,与鼠标按下,鼠标移动,鼠标抬起对应。
2.我们可以看到,添加的是function figure1_WindowButtonDownFcn(hObject, eventdata, handles);
现在明白为什么说我们的框架是在一个figure下了么?
从开始到set那行代码是重新显示了image,相当于进行了一次刷新,把以前画得框给擦掉了。
获取鼠标位置就是:
currPt = get(gca, 'CurrentPoint');
x0 = currPt(1,1);
y0 = currPt(1,2);
(x1,y1)就是移动时获取的鼠标实时坐标,然后调用
rect=[min([x0,x1]),min([y0,y1]),abs(x1-x0),abs(y1-y0)];做出一个矩形,
刷新一下,绘制出来:rectangle('Position',rect,'LineStyle',':');
这样就可以了。
drawtag == 1;%这个就是我说的标记位,可以通过
global x0 y0 x1 y1 im drawtag im_handle;%把要用的数据设为全局变量
鼠标抬起的消息我就不说了啊,自己设吧。
3.把框定的图像取出来:
因为之前已经用set,设定大小的单位,上面说了(或者在界面中选择axes1的Unints属性)
现在鼠标的位置(x0,y0),(x1,y1)就是原始的图像的像素位置。
直接提取就可以了。
注意:y对应图像的行,x才是列。
至于显示统计直方图的问题更简单:
axes(handles.axes2);
hist(lable);
会了吧?lable是我识别红斑后的结果,你可以换成im试试。
额 ,最后说一下,有些数据需要程序一开始就要初始化,可以在这里添加:
要是想并行化的话可以这么写:
此时for就是并行的。
额 少说了一个radio button。这个右键选中 button group,添加一个SelectionChangeFcn就可以了
- matlab gui 项目实战
- matlab GUI
- matlab gui
- matlab GUI
- matlab GUI
- MATLAB GUI
- matlab GUI
- Matlab程序入门GUI项目之二:简单科学计算器
- [MATLAB]MATLAB GUI对话框设计
- [MATLAB]MATLAB GUI对话框设计
- 请教matlab gui 设计
- MATLAB的GUI 程序设计
- 【转载】MatLAB GUI 打包
- matlab gui命令大全
- matlab gui 火力发电3
- MATLAB GUI一点点体会
- MATLAB GUI新手备忘录
- GUI加菜单 matlab
- CentOS单线双IP(联通+电信)配置实例
- CentOS双线双IP配置
- ORA-03113: end-of-file on communication channel (通信通道的文件结尾)Oracle数据库启动异常
- 图解四次分手协议
- oracle中获取周几的SQL
- matlab gui 项目实战
- scanf的使用说明
- vs2010 错误
- 【Oracle】数据库开启状态下删除数据文件
- CONFIGURE CONTROLFILE AUTOBACKUP ON/OFF;
- 【Oracle】将hr用户下所有对象导入…
- 【Oracle】删除用户下的所有对象
- 【Oracle】session audsid的含义和产生
- 【Linux】linux中增加swap空间