OpenCV 4.11.0
开源计算机视觉库
加载中…
搜索中…
无匹配项

详细描述

枚举

枚举  cv::KmeansFlags {
  cv::KMEANS_RANDOM_CENTERS = 0 ,
  cv::KMEANS_PP_CENTERS = 2 ,
  cv::KMEANS_USE_INITIAL_LABELS = 1
}
 k-means标志 更多…
 

函数

double cv::kmeans (InputArray data, int K, InputOutputArray bestLabels, TermCriteria criteria, int attempts, int flags, OutputArray centers=noArray())
 查找聚类的中心并将输入样本分组到这些聚类周围。
 
template<typename _Tp , class _EqPredicate >
int cv::partition (const std::vector< _Tp > &vec, std::vector< int > &labels, _EqPredicate predicate=_EqPredicate())
 将元素集拆分为等价类。
 

枚举类型文档

◆ KmeansFlags

#include <opencv2/core.hpp>

k-means标志

枚举器
KMEANS_RANDOM_CENTERS 
Python: cv.KMEANS_RANDOM_CENTERS

在每次尝试中选择随机初始中心。

KMEANS_PP_CENTERS 
Python: cv.KMEANS_PP_CENTERS

使用Arthur和Vassilvitskii提出的kmeans++中心初始化方法 [Arthur2007]。

KMEANS_USE_INITIAL_LABELS 
Python: cv.KMEANS_USE_INITIAL_LABELS

在第一次(也可能是唯一一次)尝试中,使用用户提供的标签,而不是从初始中心计算标签。对于第二次及后续尝试,使用随机或半随机中心。使用其中一个KMEANS_*_CENTERS标志来指定确切的方法。

函数文档

◆ kmeans()

double cv::kmeans ( InputArray data,
int K,
InputOutputArray bestLabels,
TermCriteria criteria,
int attempts,
int flags,
OutputArray centers = noArray() )
Python
cv.kmeans(data, K, bestLabels, criteria, attempts, flags[, centers]) -> retval, bestLabels, centers

#include <opencv2/core.hpp>

查找聚类的中心并将输入样本分组到这些聚类周围。

kmeans函数实现了一个k-means算法,该算法查找cluster_count个聚类的中心,并将输入样本分组到这些聚类周围。作为输出,\(\texttt{bestLabels}_i\)包含样本矩阵第\(i^{th}\)行中存储的样本的基于0的聚类索引。

注意
  • (Python) 关于k-means聚类的示例可以在opencv_source_code/samples/python/kmeans.py中找到。
参数
data用于聚类的数据。需要一个具有浮点坐标的N维点数组。此数组的示例可以是:
  • Mat points(count, 2, CV_32F);
  • Mat points(count, 1, CV_32FC2);
  • Mat points(1, count, CV_32FC2);
  • std::vector<cv::Point2f> points(sampleCount);
K要将集合拆分的聚类数。
bestLabels输入/输出整数数组,用于存储每个样本的聚类索引。
criteria算法终止条件,即最大迭代次数和/或所需的精度。精度指定为criteria.epsilon。一旦在某个迭代中每个聚类中心移动的距离小于criteria.epsilon,算法就会停止。
attempts用于指定使用不同初始标记执行算法的次数的标志。算法返回产生最佳紧凑性(参见最后一个函数参数)的标签。
flags可以取cv::KmeansFlags值的标志
centers聚类中心的输出矩阵,每行代表一个聚类中心。
返回值
该函数返回紧凑性度量,该度量计算如下:

\[\sum _i \| \texttt{samples} _i - \texttt{centers} _{ \texttt{labels} _i} \| ^2\]

每次尝试后。选择最佳(最小)值,并由函数返回相应的标签和紧凑性值。基本上,您可以只使用函数的核心,将尝试次数设置为1,每次使用自定义算法初始化标签,使用(flags = KMEANS_USE_INITIAL_LABELS)标志传递它们,然后选择最佳(最紧凑)聚类。
以下是此函数的调用图

◆ partition()

template<typename _Tp , class _EqPredicate >
int cv::partition ( const std::vector< _Tp > & vec,
std::vector< int > & labels,
_EqPredicate predicate = _EqPredicate() )

#include <opencv2/core/operations.hpp>

将元素集拆分为等价类。

泛型函数partition实现了一个\(O(N^2)\)算法,用于将一组\(N\)个元素拆分为一个或多个等价类,如http://en.wikipedia.org/wiki/Disjoint-set_data_structure所述。该函数返回等价类的数量。

参数
vec存储为向量的元素集。
labels标签的输出向量。它包含与vec一样多的元素。每个标签labels[i]是vec[i]的基于0的聚类索引。
predicate等价谓词(指向具有两个参数的布尔函数的指针,或具有方法bool operator()(const _Tp& a, const _Tp& b)的类的实例)。当元素肯定在同一类中时,谓词返回true;如果它们可能在同一类中也可能不在同一类中,则返回false。