2013-08-30 98 views
0

我在一組圖像的yml文件中有一個詞彙表(集羣的質心)。現在我已經從圖像中獲得了一個新的SURF描述符。現在我想檢查這個新的關鍵點描述符到詞彙表的多遠或接近一些門檻,並保存好的和不好的匹配。一旦我有好的和壞的描述符,我怎麼能標記他們的形象作爲關鍵點。我是相當新的opencv.I已經通過knnMatch,但它只通過指定k 。有人可以通過建議或示例代碼來幫助我。如何找到兩個腳本之間的距離?

這裏是我的示例代碼

Mat dictionary; 
    FileStorage fs("../bin/dictionary1.yml", FileStorage::READ); 
    fs["vocabulary"] >> dictionary; 
    fs.release(); 

    std::vector<KeyPoint> keypoints_1; 
    detector.detect(img_1, keypoints_1); 
    SurfDescriptorExtractor surfDesc; 
    Mat descriptors1; 
    surfDesc.compute(img_1, keypoints_1, descriptors1); 

我想這樣做somethig這樣

for all image descriptor 
for all vacabulary 
    if(dist is less) 
    goodmatch 
    cvcolor=blue 
    else 
    badmatch 
    cvcolor=red 

回答

1

您可以使用歐幾里得距離d =開方(A1^2 + A2^2 +。但是在這種情況下,使用Mahalanobis距離會更好,因爲它考慮了分佈參數(協方差)。但是您需要計算每個集羣的協方差,您可以在列車階段獲得這些協方差。你有簇的中心,你有足夠的協方差評估的每個簇的點數。

+0

謝謝。我現在有了一個想法,我會盡力實施它。 – sri

相關問題