kmeans関数を使用してキーポイント(SIFTを使用して検出)をクラスター化しようとしていますが、使用する準備ができていません。
キーポイントは、以下のコードを使用してxml/ymlファイルに保存されます。
int _tmain(int argc, _TCHAR* argv[])
{
Mat img;
img = imread("c:\\box.png", 0);
SiftFeatureDetector detector;
vector<KeyPoint> keypoints;
detector.detect(img, keypoints);
FileStorage fs("keypoint1.xml", FileStorage::WRITE);
write(fs, "keypoints1", keypoints);
fs.release();
xmlはスペースで区切られたキーポイントを保存し、ymlはコンマを使用してキーポイントを区切ります。
%YAML:1.0
keypoints1: [ 6.1368021965026855e+000, 5.2649226188659668e+000,
4.0740542411804199e+000, 2.7943280029296875e+002, 0., 9109760, -1,
6.1368021965026855e+000, 5.2649226188659668e+000,
4.0740542411804199e+000, 3.4678604125976562e+002, 0., 9109760, -1,
1.5903041076660156e+002, 2.4698186874389648e+001,
4.1325736045837402e+000, 9.7977493286132813e+001, 0., 10158336, -1,
1.6808378601074219e+002, 2.5029441833496094e+001,
4.2399377822875977e+000, 9.7380126953125000e+001, 0., 11993344, -1,
1.9952423095703125e+002, 4.4663669586181641e+001,
5.0049328804016113e+000, 5.7439949035644531e+001, 0., 7275008, -1,
3.0947158813476563e+002, 4.6865818023681641e+001,......................
kmeans関数では、サンプルごとに1行の入力が必要です。誰かがこれを説明できますか?つまり、上記のファイルを単一の行として使用できますか?FileStorage読み取りメソッドを使用してkmeansの対象になりますか?
ファイルに追加してファイルから読み取りたい理由は、キーポイントをクラスター化する必要がある100個の画像があるとします。これらすべてのファイルを1つの巨大なファイルに追加し、それをクラスター化します。
ありがとうございました