MATLAB常用函数与案例深度解析

常用函数

Matlab中的bwmorph函数解释
bwmorph:对二值图像的形态学操作。
BW2 = bwmorph(BW,operation)
BW2 =bwmorph(BW,operation,n)
BW2 = bwmorph(BW,operation)对二值图像应用形态学操作。
BW2 = bwmorph(BW,operation,n)应用形态学操作n次,n可以是Inf,这种情况下该操作被重复执行直到图像不再发生变化为止。

Operation是以下的字符串:
Operation Description
'bothat'是形态学上的“底帽”变换操作,返回的图像是原图减去形态学闭操作处理后的图像(闭操作:先膨胀再腐蚀)
'bridge'连接断开的像素。也就是将0值像素置1如果他有两个非零的不相连(8邻域)的像素,比如:
1 0 0                                            1 1 0
1 0 1   经过bridge连接后变为  1 1 1
0 0 1                               0 1 1
'clean'
移除孤立的像素(被0包围的1)。比如下面这个模型的中心像素:
              0 0 0
              0 1 0
              0 0 0
'close'执行形态学闭操作(先膨胀后腐蚀)
'diag'
利用对角线填充来消除背景中的8连通区域。比如:
0 1 0                                 1 1 0
1 0 0      经过diag变成   1 1 0
0 0 0                                 0 0 0
'dilate'利用结构ones(3)执行膨胀操作。
'erode'利用结构ones(3)执行腐蚀操作。
'fill'
填充孤立的内部像素(被1包围的0),比如下面模型的中心像素:
                1 1 1
                1 0 1
                1 1 1
'hbreak'移除H连通的像素,例如:
1 1 1                          1 1 1
0 1 0            变成          0 0 0
1 1 1                          1 1 1
'majority'将某一像素置1如果该像素的3×3邻域中至少有5个像素为1;否则将该像素置0
'open'执行形态学开操作(先腐蚀后膨胀)
'remove'移除内部像素。该选项将一像素置0如果该像素的4连通邻域都为1,仅留下边缘像素。
'shrink'n = Inf时,将目标缩成一个点。没有孔洞的目标缩成一个点,有孔洞的目标缩成一个连通环。
'skel'n = Inf时,移除目标边界像素,但是不允许目标分隔开,保留下来的像素组合成图像的骨架。
'spur'移除刺激(孤立)像素。比如:
0  0  0  0                   0  0  0  0
0  0  0  0                   0  0  0  0
0  0  1  0    变成       0  0  0  0
0  1  0  0                   0  1  0  0
1  1  0  0                   1  1  0  0
'thicken'n = Inf时,通过在目标外部增加像素加厚目标直到这样做最终使先前未连接目标成为8连通域。
'thin'n = Inf时,减薄目标成线。没有孔洞的目标缩成最低限度的连通边;有孔洞的目标缩成连通环。
'tophat'执行形态学“顶帽”变换操作,返回的图像是原图减去形态学开操作处理之后的图像(开操作:先腐蚀再膨胀)。

bw = bwareaopen(bw, threshold) %函数作用是删除二值图像BW中面积小于P的对象,默认情况下conn使用8邻域

1、与文件相关

[FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle,DefaultName)%该函数是创建标准的对话框并通过交互式操作取得文件名
FileName:返回的文件名
PathName:返回的文件的路径名
FilterIndex:选择的文件类型
FilterSpec:文件类型设置
DialogTitle:打开对话框的标题
DefaultName:默认指向的文件名

2、MATLAB GUI不同控件函数间变量传递方法

在GUI中一个控件函数结束后,会将在这个函数中使用的变量全部删除,如果想在另一个控件中使用,则必须想办法将这个变量保存传递,方法有以下几种:

T1、使用globe定义全局变量

这种方法不是很好,一方面是要在使用变量的函数里面要先对变量进行声明,另一方面,在一个函数里面对变量进行操作就会对所有函数起作用,这样不是太方便,但毕竟是一种解决方法。
function btn1_callback(hObject,userdata,handles)
global var1
%对var1的处理
function btn2_callback(hObject,userdata,handles)
global var1
%对var1的引用

T2、使用guidata函数

使用方法是:
handles.X=str2double(get(hObject,'String'));
guidata(hObject,handles);
在别的函数中只要使用handles.X就可以得到str2double(get(hObject,'String'))数值。
这种方法的好处是,在改变了控件的Tag后,方便使用相应控件传递来的数据,缺点是要改变控件的句柄handles值,这样似乎不是很安全。

T3、使用空间的userdata属性保存数据

使用方法如下:
set(handles.X,'userdata',a);
这里a就是要传递的变量,现在暂时保存在这个控件的userdata中,需要取出时:
a=get(handles.X,'userdata');
即可将a传递到新函数中,如果要传递的是多个变量,可以使用结构数组进行传递
这种方法是最安全且自由度高的传递犯法,推荐!!!

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空