2013-06-26 4 views
0

У меня есть сомнительное сомнение при использовании k-средств на изображении. У меня есть изображение RGB, которое я преобразовал в пространство HSV. В основном я хочу выполнять k-средства только для H-вектора. Это вектор 214 на 300.Использование k-средств для вектора изображения

У меня есть два вопроса:

1.Should Я перекраивать образцы как 64200 * 1 вектор, прежде чем я кормлю его в команду kmeans?

2.How я найти центр каждого кластера (я кластеризация в 4 кластера, поэтому мне нужно 4 позиции каждый представляющая центр каждого кластера.)

ответ

0
  1. Да, вы должны изменить ваша матрица к вектору 1xN, где N соответствует числу значений оттенка, которые вы кластеризуете. Каждый из них рассматривается как отдельный набор данных для кластеризации.

  2. Большая часть k-средств - это поиск правильных кластерных центров. Это происходит для вас, его не нужно устанавливать априори. Если вы хотите инициализировать кластеризацию хорошими центрами, просмотрите k-means++, но вам не нужно находить центры кластера перед запуском k-средств. Чтобы получить вычислительные центры кластера после кластеризации, вам просто нужно посмотреть на выходной массив, предоставленный от вызова к k-значению. Подпись выглядит следующим образом:

    double kmeans (данные InputArray, int K, InputOutputArray bestLabels, критерии TermCriteria, int-попытки, int flags, OutputArray center = noArray());

Как вы можете видеть, последним параметром вызова kmeans() является матрица, содержащая центры кластера.

+0

Спасибо за ваш ответ! .. Однако размер матрицы моих центров равен N * 1 (для ввода N * 1) ... Мне нужно получить только 4 значения (одно значение для кластера 1, другое для кластера2 и так далее) ... Я что-то упустил? –

+0

Какую строку кода вы используете для вызова kmeans? – Chris

+0

@Chris ... cv :: kmeans (channelhue, count, labels, TermCriteria (CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 10, 1.0), 5, KMEANS_RANDOM_CENTERS, центры); –

Смежные вопросы