2014-04-18 463 views
1

我正在使用Opencv C++,用於人臉識別應用程序。爲此,我使用SURF作爲描述符,使用FlannMatcher來匹配點。我的代碼如下,SURF的min_dist和max_dist是什麼意思,FlannMatcher是什麼意思

FlannBasedMatcher matcher; 
std::vector<DMatch> matches; 
matcher.match(descriptors_1, descriptors_2, matches); 

double max_dist = 0; double min_dist = 100; 
for(int i = 0; i < descriptors_1.rows; i++) 
{ 
    double dist = matches[i].distance; 
    if(dist < min_dist) min_dist = dist; 
    if(dist > max_dist) max_dist = dist; 
} 

在這裏,我們檢查是否有匹配兩個faces.But之間,我不明白這是什麼min_distmax_dist手段尋找min_distmax_dist

這究竟意味着什麼? 爲什麼我們需要爲單個描述符找到min_distmax_dist

+0

這是一個不好的例子。如果沒有這個「max_dist」和「min_dist」,有一個更好的方法來區分好匹配和壞匹配。 http://stackoverflow.com/a/19815769/1983544 –

回答

2

正如您所知,SIFT描述符是一個高維空間中的向量,例如128.當您在圖像上運行它以找到興趣點時,它會找到一些點作爲興趣點並將它們的描述符作爲每個向量在高維空間中描述這一點。

第一張圖像中的每個點(例如A)都應在其他圖像中對應,例如B!這意味着,那些距離最近的人最有可能是通訊員,但是並非所有人都是。其中一些可能是異常值,我們預計在其檢測到的對應關係中具有高距離值。這使得我們在我們的代碼中使用max_dsist。在某些類型的情況下,您可能不希望所有的匹配,因爲對應點的數量可能相對較高,或....因此,我們定義了一個與min_dist所做的距離的下限。

我希望能給你洞察!

+1

非常感謝您的快速響應,這真的很有用 – user3228547

+0

@ user3228547,歡迎您:) – Hadi