1. 程式人生 > >matlab中的matchFeatures的使用方法

matlab中的matchFeatures的使用方法

最近在使用matlab對影象提取SURF特徵點然後匹配的時候使用了matlab中自帶的matchFeatures這個函式,由於自己是個彩筆,所以讀個help文件都有點費勁,而且網上查大部分都是matlab中的什麼cv包裡面的函式,和自帶的很不一樣。好在最後還是摳明白了,現在把help文件說了些啥再翻譯一下。

注:下面的圖片均來自於matlab2016b中的說明文件

用來尋找匹配特徵的matchFeatures

[indexPairs,matchmetric] = matchFeatures(features1,features2,Name,Value)

features1和features2是使用函式extractFeatures提取出的特徵點描述子

Name對應引數名,Value對應引數取值

下面介紹Name與Value的含義:

‘Method’:匹配時選擇的匹配方法

'Exhaustive'(預設):窮舉法,即計算出特徵1和特徵2之間所有特徵向量之間的距離。這裡要注意傳入引數的先後順序,使用matchFeatures(features1,features2)與matchFeatures(features2,features1)是不一樣的。比如matchFeatures(features1,features2)是表示了計算從features1中的第一個特徵向量到最後一個特徵向量與features2中所有特徵向量的距離(由引數’Metric’決定),並且比較的時候是分組比較的,組內為features1中的一個特徵向量與features2中所有特徵向量的距離。

‘Approximate’:使用一個有效率的最鄰近鄰域搜尋,在特徵集比較大的時候使用此方法。方法具體參考論文: Muja, M., and D. G. Lowe. "Fast Approximate Nearest Neighbors with Automatic Algorithm Configuration." International Conference on Computer Vision Theory and Applications.VISAPP, 2009.

‘Metric’:特徵匹配測量方法。

‘SSD’(預設):差的平方之和(歐氏距離的平方)

‘SAD’:差的絕對值之和(街區距離)

上面這兩個方法只適用於非二進位制特徵向量,如果是二進位制特徵向量,函式會自動使用漢明距離(hamming)來計算向量之間的差距(不可以手動選擇hamming方法)。

‘MatchThreshold’:

匹配閾值,預設值為10.0(二進位制特徵向量)或者是1.0(非二進位制特徵向量),是一個百分比為單位的數值。這個閾值要與’Metric’中選擇的特徵向量距離計算方法相匹配,比如SSD對應著[0,4]那麼matchthreshold設定為50,也就是[0,4]的百分之50就是2,接收小於2的,大於2的就拒絕。設定為百分比是為了方便多種不同方式來進行比較,適用百分比可以統一設定這幾個不同區間內的距離數值(SSD的值域為[0,4],SAD的值域為[0, 2*sqrt(size(features1, 2))],二進位制的特徵向量為漢明距離,值域為[0, features1.NumBits]),很方便。

‘MaxRatio’:

預設為0.6,是一個處於(0,1]之間的值,根據Lowe的論文,這個值是features1中的一個特徵向量在與features2中所有的特徵向量進行匹配之後,找到最小與第二小的距離d1,d2並將他倆作除法d1/d2,這就是Ratio,在Ratio小於設定值的時候才返回最小距離d1的匹配。Ratio描述的是距離之間的差距。一般來說,差距是越小越好的。Lowe推薦ratio的閾值為0.8,但作者對大量任意存在尺度、旋轉和亮度變化的兩幅圖片進行匹配,結果表明ratio取值在0. 4~0. 6 之間最佳,小於0. 4的很少有匹配點,大於0. 6的則存在大量錯誤匹配點,所以建議ratio的取值原則如下:

ratio=0. 4:對於準確度要求高的匹配;

ratio=0. 6:對於匹配點數目要求比較多的匹配;

ratio=0. 5:一般情況下。

‘Unique’:false(預設),true

將此引數設定為true,函式最終會返回features1,features2之間的唯一匹配(注意features的順序),具體過程為進行一個向前向後(forward-backward)的匹配,在將features1與features2進行匹配後,會反過來進行features2與features1的匹配,並保留最佳匹配。如果此引數設定為false,函式會返回所有features1與features2之間的匹配,多個features1中的特徵向量可能會同時與features2中的同一個特徵向量匹配。

就是這種情況,所以才要在forward後進行一個backward,選擇features2的第2個與features1中的1,3中選擇一個最佳匹配。

下面介紹輸出引數:

indexPairs:是一個p*2的矩陣,第一列中裝著所有的features1中的特徵向量所在的行數,第二列為features2中的特徵向量所在的行數。矩陣中同一行即為匹配上的。

matchmetric:匹配上的特徵向量之間的距離。注意,當輸入引數中的’Metric’被設為SAD或者SSD的時候,特徵向量在計算之前先歸一化。下表列出了在’Metric’不同的時候不同距離度量方法的距離範圍。所有距離度量方法的最完美距離都是0。

我使用的matlab的版本為2016b。

另外我不明白的一點是,是不是每個不同種類的特徵向量,最終進行匹配的時候方法也是不同的?最好還是要按照作者在提出這個特徵描述方法的時候使用的匹配方法來匹配?請各位指教!

水平有限,如有錯誤請各位指正!謝謝!