事前にクラスターの数を知らずに、4Dベクトルのセットをクラスター化しようとしています。過去には、クラスターの数に関する知識があれば、cvKmeans2を使用してクラスター化することができました。私はAPIをトロールしていて、に出くわしcv::flann::hierarchicalClustering
ました。これは必要なことを実行するように見えます(つまり、k-meansを実行し、必要に応じてクラスターを分割し、分割によって結果が悪化するまで繰り返します)が、「インデックスパラメーター」に本当に苦労しています。
2番目のパラメーターとして入力するインデックス構造を作成する必要があることがわかりましたが、次のコードからエラーが発生します。
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 ++の知識は大丈夫ですが、素晴らしいものではありません)。関連するすべてのコードを投稿したと思いますが、そうでない場合はお知らせください。さらに投稿します。
前もって感謝します!
アップデート
私は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を見て、完全に混乱しています!再度、感謝します!