OpenCV  4.10.0
开源计算机视觉
加载中...
搜索中...
无匹配项
枚举 | 函数

详细说明

枚举

枚举  cv::KmeansFlags {
  cv::KMEANS_RANDOM_CENTERS = 0 ,
  cv::KMEANS_PP_CENTERS = 2 ,
  cv::KMEANS_USE_INITIAL_LABELS = 1
}
 k 均值标记 更多...
 

函数

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

枚举类型文档说明

◆ KmeansFlags

#include <opencv2/core.hpp>

k 均值标记

枚举器
KMEANS_RANDOM_CENTERS 
Python: cv.KMEANS_RANDOM_CENTERS

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

KMEANS_PP_CENTERS 
Python: cv.KMEANS_PP_CENTERS

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

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 均值算法,查找 cluster_count 个簇的中心,并将输入样本分组在簇的周围。作为输出,\(\texttt{bestLabels}_i\) 包含样本的基于 0 的簇索引,该样本存储在样本矩阵的第 \(i^{th}\) 行。

提示
  • (Python) 有关 K 均值聚类的示例可以在 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算法终止的条件,即最大迭代次数和/或所需的精度。将精度指定为 accuracy.epsilon。一旦在某些迭代中每个簇中心的移动幅度均小于 accuracy.epsilon,该算法便会停止。
attempts标志,用来指定使用哪些不同的初始标记执行该算法的次数。该算法会返回产生最佳紧凑性(请参见最后一个函数参数)的标签。
flags标志,可以采用cv::KmeansFlags 的值
centers簇中心的输出矩阵,每行表示一个簇中心。
返回值
此函数返回的紧凑性度量计算为

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

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

◆ partition()

模板<typename _Tp , 类 _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。