Как реализовать векторное квантование с использованием KMeans на изображении PGM - PullRequest
1 голос
/ 13 марта 2012

Требуется сделать, Векторная квантизация с использованием KMeans для файла PGM (или сжатия изображения)
Изображения представляют собой файл PMG с b = размером блока, k = числом раз, t = итерациями, -g = начальными центроидами

изображение что-то вроде 126 131 128 126 129 130 127 128 130 123 132 128 131 124 131 129 , , 129

Алгоритм 1 Алгоритм K-средних Требуется: входные данные X = {x1; x2; ... xN}, количество кластеров K, где K <= N, начальное догадки для центроидов Y = {y1; y2; .. yK}, максимальное количество итераций T. </p>

для t = 1; 2; .... T do
для i = 1; 2; .... N do
Найдите центр тяжести из текущего набора Y, ближайшего к xi.
Назначьте xi ближайшему центроиду.
конец для
для j = 1; 2; .... К до
Обновите yj как среднее значение векторов, назначенных yj.
конец для
конец для

После K-средних мы сокращаем исходные данные в список из K векторов-прототипов Y, как
а также для каждого вектора в X индексе вектора-прототипа он наиболее близок, т.е.
X = {x1; х2; .. xN} -> Y = {y1; у2; .. yK}, L = {l1; l2; .... lN};
где каждый li в целом числе от 1 до K, указывающий, какой вектор прототипа xi равен
ближе. Вместо X сохраняются или передаются только Y и L. Например, используя b = 4
и K = 256, для изображения размером 420x300 пикселей (без сжатия 123 КБ) нам необходимо сохранить
X = 256 x {16 байт} + Y = 7875 {байт} с ~ 12 КБ:
хранилище для y хранилище для L

Чтобы восстановить изображение из сжатых данных, для каждого блока b x b мы просто Пусть это будет с дерастеризованным вектором-прототипом, который находится ближе всего к блоку (напомним, что каждый блок соответствует вектору xi, который имеет значение индекса Li

Что я спрашиваю, так это то, что я понятия не имею, что означает назначить обновление yj как среднее для векторов и как восстановить изображение, может кто-нибудь объяснить мне. И да, это домашнее задание, но я действительно потерян, если кто-нибудь может указать мне правильное направление.

1 Ответ

0 голосов
/ 13 марта 2012

Итак, изначально вы просто делаете некоторые случайные предположения о том, какими должны быть центроиды (у).Допустим, вам нужно 3 кластера, и изначально вы предполагаете центроиды Y = {126, 128, 130}.После каждой итерации размещения каждой точки в кластере с ближайшим центроидом, вычислите Y снова.Таким образом, если ваш центроид y1 (в данном примере первоначально 126) получает X {126, 126, 127}, ваш новый Y1 является средним из этих 3 баллов (126,33).И аналогично для y2 и y3.

...