matlab gui 项目实战
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就可以了
- python pyqt开发 gui项目实战(目前最新)
- DeepLearning(基于caffe)实战项目(4)--Matlab测试训练好的model
- [项目实战派]opencv通过dll调用matlab函数,图片作为参数
- DeepLearning(基于caffe)实战项目(5)--Matlab画学习(Loss)曲线
- Egret——Egret+fairyGui 实战项目入门
- Matlab程序入门GUI项目之二:简单科学计算器
- Matlab的GUI编程入门项目一:常用三角函数的绘制
- iOS开发——项目实战总结&UITableView性能优化与卡顿问题
- Mock+Proxy在SDK项目的自动化测试实战
- matlab gui多条线 分别显示,高亮
- Android 项目实战视频资料 学习充电必备
- android项目实战课程扣丁音乐已杀青预计本月上线
- android项目实战(一)
- 商城项目实战 | 8.2 SwipeRefreshLayout 实现可以下拉刷新和加载更多的热门商品列表
- 《淘宝客户端 for Android》项目实战 html webkit android css3
- MFC项目实战(1)文件管理器--准备篇
- Qt4项目迁移Qt5项目一问题解决方法:#include <QtGui/QApplication> ---> No such file or directory
- asp.net core 中间件详解及项目实战
- Python网络爬虫实战项目代码大全
- QX项目实战-6.数据库的建立