0
我試圖實現Scalable Recognition with a Vocabulary Tree ,我使用opencv kmeans函數來聚類特徵向量,所以我把我的所有向量放在一個Mat對象中,並將它傳遞給像這樣的函數:opencv kmeans不分類數據在某些類
TermCriteria criteria;
criteria.epsilon = 0.1;
int attempts = 1;
int flags = KMEANS_RANDOM_CENTERS;
int K = 10;
Mat Centers;
Mat Labels;
kmeans(descriptors, K, Labels, criteria, attempts, flags, Centers);
所以在函數填充「中心」和「標籤」墊對象是這樣的:
Centers has K rows, 64 columns (I'm using SURF features) and one channel
Labels has as many rows as "descriptors", one column and one channel and it's values are in the range of [0 K-1]
這些都是我檢查了的東西。在對所有向量執行此操作之後,我將具有相同標籤的向量複製到一個新的Mat中,並再次將其傳遞給該函數。
我的問題是,有時在「標籤」中缺少範圍[0 k-1]中的一個值,因此沒有特徵向量被分類到該羣集中。我已經檢查過不同的K,它通常會在某個級別發生至少一次(儘管在第一次調用中從來不會發生)。即使對於K = 3.
我假設在那些時候我傳遞給函數的數據是不正確的。所以我的問題是,這是什麼時候發生的?我應該檢查哪些數據傳遞給函數以確保它們是有效的?
此外,如果你有一個任何好的文章實現的鏈接,我真的很感激它,如果你在這裏發佈它。