Если мы знаем количество кластеров во входных данных, мы можем использовать алгоритм k-средних.Однако, если мы не знаем количество кластеров, у нас есть варианты использовать алгоритм иерархической кластеризации, который будет автоматически возвращать количество кластеров на основе заданного порога сходства.Существует два варианта иерархической кластеризации: агломерация (снизу вверх) или деление (сверху вниз), ссылка .Я хочу использовать иерархическую кластеризацию OpenCV.
Однако алгоритм OpenCVs hierarchicalClustering
принимает центры в качестве параметра и использует количество строк в качестве желаемого числа кластеров в отличие от фактической иерархической кластеризации.Для меня OpenCV hierarchicalClustering
такой же, как кластеризация k-средних.Есть ли какая-либо другая функция в OpenCV, которая может возвращать количество кластеров на основе заданного порога подобия?
typedef cv::flann::L2<float> D;
float a[] = {0, 0, 0, 0 };
cvflann::Matrix< D::ResultType> centers(a, 2, 2, 0);
const cvflann::KMeansIndexParams params1(
2,
100,
cvflann::flann_centers_init_t::FLANN_CENTERS_RANDOM,
.2
);
int number_of_clusters = cvflann::hierarchicalClustering<D> (features,
centers,
params1
);
Другой параметр, который мы передаем, - cb_index = 0.2
.Является ли это порогом для расстояний между кластерами или кластером, связанным как радиусный порог.