это то, что я собираюсь сделать!(возможно, этот метод неправильный, скажите мне, если я ошибаюсь) У меня есть набор данных из 300 изображений, я извлекаю 36 объектов из каждого изображения и создаю матрицу объектов 300 * 36, затем я использую K-среднеекластеризация для объединения этих функцийвектор признаков и найти расстояние между этим вектором и центрами моего кластера.новое изображение принадлежит кластеру с минимальным расстоянием.
Я написал эту функцию для вычисления расстояния:
void calculateDistance( )
{
if (features.cols==centers.cols)
{
vector<float> resvec;
for (int i=0;i<centers.rows;i++)
{
double res = norm(features,centers.row(i), cv::NORM_L2SQR );
resvec.push_back(res);
}
int minElementIndex = std::min_element(resvec.begin(),resvec.end()) - resvec.begin();
cerr<<minElementIndex<<endl;
}
else
{
cerr<<"vector size mismatch!\n";
}
}
Удивительно, но для всех векторов объектов (даже данных поезда) эта функция дает одинаковый результат!(minElementIndex всегда равно 2)
Я даже проверил свою теорию с некоторыми случайными точками (размер (500 * 2)), и она сработала как чудо, новые данные правильно распределены по кластерам.Так что же происходит, когда вектор объектов увеличивается до 36 столбцов?я что-то пропустил ?!