在使用OpenCV进行Kmeans聚类时,Mahalanobis距离的含义是什么?

6

我已经使用 Kmeans 聚类算法,并且使用 OpenCV C++ API 找出了聚类中心。

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);

我应该如何使用马哈拉诺比斯距离 (Mahalanobis Distance) 代替欧几里得距离 (Euclidean Distance)?我知道我需要计算协方差矩阵,并将其求逆后找到马哈拉诺比斯距离。

然而,我不知道应该如何进行操作和顺序是什么 (找到协方差矩阵后求哪个数据/矩阵的逆矩阵)

1个回答

2

它完全按照你的要求执行,并为每个步骤提供相应的OpenCV函数 :)。 - jlengrand
只需使用OpenCV的Mahalanobis函数(我编辑了您的答案)。 - jilles de wit
我们需要为每个聚类执行CalcCovarMatrix和cvInvert,然后找到与每个聚类的cvMahalanobis距离吗? - garak
是的,对于每个聚类,您需要执行一次CalcCovarMatrix和cvInvert,然后针对所有聚类调用cvMahalanobis以针对每个新点选择最小值。 - jilles de wit
1
你真的应该把代码发布出来,因为Google Books并不是一个很好的展示答案的方式,大多数人都无法看到页面。 - Goz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接