Как оценить количество кластеров для цветового квантования с помощью kmeans2

Я хочу квантовать некоторые изображения с помощью алгоритма kmeans2. Моя проблема состоит в том, чтобы найти (почти) лучшее количество кластеров.

У кого-нибудь есть идеи, как оценить количество кластеров? Моя идея состоит в том, чтобы создать кумулятивную гистограмму оттенка в hsv-color-space. Но я не знаю, как использовать эту информацию для оценки количества.

Привет

1 ответ

Решение

Я лично использую следующий подход:

Псевдокод:

int k = 1;
double oldCompactness = std::numeric_limits<double>::max();
double compactness = kmeans(data, k);
while( compactness/oldCompactness < threshold ) {
    oldCompactness = compactness;
    k = k + 1;
    compactness = kmeans(data, k);
}

Компактность уменьшается с увеличением количества кластеров (она должна стать нулевой, если у вас столько кластеров, сколько точек данных).

Следует отметить, что оптимальное количество кластеров зависит от приложения. Например, в вашем приложении я не знаю, предпочитаете ли вы высокое сокращение данных (низкий k) или хорошее визуальное представление (высокий k) или компромисс (где-то посередине).

Вы можете посмотреть здесь больше / лучших идей. Или здесь (неделя 8), если вы предпочитаете видео.

Другие вопросы по тегам