我已经使用OpenCV的C++ API完成了Kmeans聚类,并找到了聚类中心。
kmeans(data_points, clusterCount, labels, TermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0), 3, KMEANS_PP_CENTERS, cluster_centers);
然后,我使用欧几里得距离来找到最接近的聚类,用于一个新的数据点与所有聚类中心进行比较。
int distance = find_EucledianDist(new_datapoint, cluster_centers);
我该如何使用马哈拉诺比斯距离来替代欧几里得距离呢?我知道我需要计算协方差矩阵并对其进行求逆,然后计算马哈拉诺比斯距离。
然而,我不知道具体该如何做,以及这些步骤的顺序是怎样的(计算哪个数据/矩阵的协方差矩阵和逆矩阵)?
回答:
这个链接对你应该很有帮助,对吧?:)
具体步骤是:首先使用CalcCovarMatrix计算协方差矩阵,然后使用cvInvert求逆,最后使用cvMahalanobis计算马哈拉诺比斯距离。