Matlab:Matlab中常用的函數(shù)、案例詳細(xì)攻略
常用函數(shù)
Matlab中的bwmorph函數(shù)解釋
bwmorph:對(duì)二值圖像的形態(tài)學(xué)操作。
BW2 = bwmorph(BW,operation)
BW2 =bwmorph(BW,operation,n)
BW2 = bwmorph(BW,operation)對(duì)二值圖像應(yīng)用形態(tài)學(xué)操作。
BW2 = bwmorph(BW,operation,n)應(yīng)用形態(tài)學(xué)操作n次,n可以是Inf,這種情況下該操作被重復(fù)執(zhí)行直到圖像不再發(fā)生變化為止。
Operation是以下的字符串:
Operation Description
'bothat'是形態(tài)學(xué)上的“底帽”變換操作,返回的圖像是原圖減去形態(tài)學(xué)閉操作處理后的圖像(閉操作:先膨脹再腐蝕)
'bridge'連接斷開(kāi)的像素。也就是將0值像素置1如果他有兩個(gè)非零的不相連(8鄰域)的像素,比如:
1 0 0 1 1 0
1 0 1 經(jīng)過(guò)bridge連接后變?yōu)? 1 1 1
0 0 1 0 1 1
'clean'
移除孤立的像素(被0包圍的1)。比如下面這個(gè)模型的中心像素:
0 0 0
0 1 0
0 0 0
'close'執(zhí)行形態(tài)學(xué)閉操作(先膨脹后腐蝕)
'diag'
利用對(duì)角線填充來(lái)消除背景中的8連通區(qū)域。比如:
0 1 0 1 1 0
1 0 0 經(jīng)過(guò)diag變成 1 1 0
0 0 0 0 0 0
'dilate'利用結(jié)構(gòu)ones(3)執(zhí)行膨脹操作。
'erode'利用結(jié)構(gòu)ones(3)執(zhí)行腐蝕操作。
'fill'
填充孤立的內(nèi)部像素(被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個(gè)像素為1;否則將該像素置0
'open'執(zhí)行形態(tài)學(xué)開(kāi)操作(先腐蝕后膨脹)
'remove'移除內(nèi)部像素。該選項(xiàng)將一像素置0如果該像素的4連通鄰域都為1,僅留下邊緣像素。
'shrink'n = Inf時(shí),將目標(biāo)縮成一個(gè)點(diǎn)。沒(méi)有孔洞的目標(biāo)縮成一個(gè)點(diǎn),有孔洞的目標(biāo)縮成一個(gè)連通環(huán)。
'skel'n = Inf時(shí),移除目標(biāo)邊界像素,但是不允許目標(biāo)分隔開(kāi),保留下來(lái)的像素組合成圖像的骨架。
'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時(shí),通過(guò)在目標(biāo)外部增加像素加厚目標(biāo)直到這樣做最終使先前未連接目標(biāo)成為8連通域。
'thin'n = Inf時(shí),減薄目標(biāo)成線。沒(méi)有孔洞的目標(biāo)縮成最低限度的連通邊;有孔洞的目標(biāo)縮成連通環(huán)。
'tophat'執(zhí)行形態(tài)學(xué)“頂帽”變換操作,返回的圖像是原圖減去形態(tài)學(xué)開(kāi)操作處理之后的圖像(開(kāi)操作:先腐蝕再膨脹)。
bw = bwareaopen(bw, threshold) %函數(shù)作用是刪除二值圖像BW中面積小于P的對(duì)象,默認(rèn)情況下conn使用8鄰域
1、與文件相關(guān)
[FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle,DefaultName)%該函數(shù)是創(chuàng)建標(biāo)準(zhǔn)的對(duì)話框并通過(guò)交互式操作取得文件名
FileName:返回的文件名
PathName:返回的文件的路徑名
FilterIndex:選擇的文件類(lèi)型
FilterSpec:文件類(lèi)型設(shè)置
DialogTitle:打開(kāi)對(duì)話框的標(biāo)題
DefaultName:默認(rèn)指向的文件名
2、MATLAB GUI不同控件函數(shù)間變量傳遞方法
在GUI中一個(gè)控件函數(shù)結(jié)束后,會(huì)將在這個(gè)函數(shù)中使用的變量全部刪除,如果想在另一個(gè)控件中使用,則必須想辦法將這個(gè)變量保存?zhèn)鬟f,方法有以下幾種:
T1、使用globe定義全局變量
這種方法不是很好,一方面是要在使用變量的函數(shù)里面要先對(duì)變量進(jìn)行聲明,另一方面,在一個(gè)函數(shù)里面對(duì)變量進(jìn)行操作就會(huì)對(duì)所有函數(shù)起作用,這樣不是太方便,但畢竟是一種解決方法。
function btn1_callback(hObject,userdata,handles)
global var1
%對(duì)var1的處理
function btn2_callback(hObject,userdata,handles)
global var1
%對(duì)var1的引用
T2、使用guidata函數(shù)
使用方法是:
handles.X=str2double(get(hObject,'String'));
guidata(hObject,handles);
在別的函數(shù)中只要使用handles.X就可以得到str2double(get(hObject,'String'))數(shù)值。
這種方法的好處是,在改變了控件的Tag后,方便使用相應(yīng)控件傳遞來(lái)的數(shù)據(jù),缺點(diǎn)是要改變控件的句柄handles值,這樣似乎不是很安全。
T3、使用空間的userdata屬性保存數(shù)據(jù)
使用方法如下:
set(handles.X,'userdata',a);
這里a就是要傳遞的變量,現(xiàn)在暫時(shí)保存在這個(gè)控件的userdata中,需要取出時(shí):
a=get(handles.X,'userdata');
即可將a傳遞到新函數(shù)中,如果要傳遞的是多個(gè)變量,可以使用結(jié)構(gòu)數(shù)組進(jìn)行傳遞
這種方法是最安全且自由度高的傳遞犯法,推薦!!!