我試圖聚集一組4D向量,而不知道應該提前多少個簇。在過去,我已經能夠使用cvKmeans2進行聚類,只要知道聚類的數量。我正在瀏覽API,並遇到了cv::flann::hierarchicalClustering
。這看起來像它會做我所需要的(即,執行k-means,在必要時拆分集羣,迭代直到分裂會惡化結果),但我真的在努力處理「索引參數」。OpenCV中不知道「k」的分層k均值
我已經想通了,我需要創建一個index structure它出現在作爲第二個參數,但我從下面的代碼得到一個錯誤:
cv::flann::Index fln_idx = cv::flann::KMeansIndexParams::createIndex(framePoints);
錯誤時正在:
../src/segmentation_1.cpp:592: error: cannot call member function ‘virtual flann::Index* cv::flann::KMeansIndexParams::createIndex(const cv::Mat&) const’ without object
framePoints
定義如下:
CvMat *framePoints = cvCreateMat(frameTracklets.size(), 4, CV_32FC1);
我很確定我正在做一些非常愚蠢的事情(我的C++知識很好,但不是很好)。我想我已經發布了所有相關的代碼,但如果沒有,請告訴我,我會發布更多。
在此先感謝!
UPDATE
我已經按照LumpN的意見,並創造了K均值對象,使用下列內容:
cv::Mat centres;
cv::flann::KMeansIndexParams fln_idx = cv::flann::KMeansIndexParams();
fln_idx.createIndex(framePoints);
int numClust;
numClust = hierarchicalClustering(framePoints, centres, fln_idx);
現在,當我運行它,我從hierarchicalClustering()
得到一個錯誤信息,說什麼「所需羣集的數量應爲>= 1
「(我需要檢查什麼時候開始工作 - 然後我會更新實際的錯誤)。我認爲createIndex()
給出了它的起點,然後hierarchicalClustering()
拆分集羣,直到找到一個好的結果(不知道這是否是最佳的)。我需要用一些參數呼叫cv::flann::KMeansIndexParams()
嗎?我已經看過api,並且感到非常困惑! 再次感謝!
值得注意的是'cvflann :: HierarchicalClusteringIndex'類似k-means但不是。 Muja&Lowe使用層次聚類樹的森林實現了二進制特徵的快速匹配(http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6233169)。它不是k-均值,因爲沒有像k均值那樣嘗試減少總體失真的迭代步驟,即點到其聚類中心的距離的平方和,並且它從數據中選擇聚類中心而不是平均值。 – gantzer89 2014-01-21 21:56:30