Я пытаюсь сгруппировать набор четырехмерных векторов, не зная, сколько кластеров должно быть заранее. В прошлом я мог использовать cvKmeans2 для кластеризации, учитывая количество кластеров. Я рылся в API и наткнулся на cv::flann::hierarchicalClustering
. Похоже, что он будет делать то, что мне нужно (а именно: выполнять k-средства, разделять кластеры, где это необходимо, выполнять итерацию до тех пор, пока разделение не ухудшит результат), но я действительно борюсь с «параметрами индекса».
Я понял, что мне нужно создать структуру индекса , которая входит в качестве второго параметра, но я получаю сообщение об ошибке из следующего кода:
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 и создал объект Kmeans, используя следующее:
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 и полностью сбит с толку!
Еще раз спасибо!