opencv - 准备好数据(每行一个样本)以使用k均值进行聚类吗?

标签 opencv cluster-analysis k-means sift

我正在尝试使用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函数要求每个样本输入为一行。有人可以解释一下吗,我是说上面的文件可以用作一行吗?使用FileStorage读取方法是否有资格获得kmeans?

我要添加到文件或从文件中读取文件的原因是,假设我有100个需要聚簇其关键点的图像。我想将所有这些文件附加到一个巨大的文件中并将其群集。

谢谢

最佳答案

SIFT特征是一回事,每个特征的值构成 vector 。从SIFT关键点提取SIFT描述符时,您正在提取4x4区域中8个可能方向的梯度大小。因此,每个关键点都有一个 vector ,具有128个要素,或者,如果需要,可以具有128个维度。它与在欧几里得空间中表示一个点相同,但是没有三个维度,而是有128个。常规SIFT描述符的一种变体效果更好。密集SIFT。与其根据高斯差分来计算关键点,不如在图像顶部放置一个矩形网格以提取描述符。在Google中寻找vl_feat。

关于opencv - 准备好数据(每行一个样本)以使用k均值进行聚类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13422553/

相关文章:

python - 按升序生成 Kmeans 的质心

python - 使用 Python 计算 OpenCV 库的检测次数

c++ - 提取特征。一个类中有很多 getter/setter 是否正常?

python - KMeans 对不平衡数据进行聚类

R - 找到第 2 组(成对)的簇

c++ - OpenCV 均值 : N>=K exception , 错误 (-215)

ios - 使用 Open CV iOS 自动旋转和拉伸(stretch)图像。怎么修?

python - OpenCV掩码错误错误:(-215:声明失败)(mtype == CV_8U || mtype == CV_8S)&& _mask.sameSize(* psrc1)在函数'cv::binary_op中

machine-learning - 寻找聚类算法的准确性

python - sklearn KMeans 中的 fit() 与 fit_predict() 方法