Требуется сделать,
Векторная квантизация с использованием 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 как среднее для векторов и как восстановить изображение, может кто-нибудь объяснить мне.
И да, это домашнее задание, но я действительно потерян, если кто-нибудь может указать мне правильное направление.