Рекурсивный (волновой) алгоритм

Идея алгоритма заключается в том, что мы сохраняем в файл разницу – число между средними значениями соседних блоков в изображении, которая обычно принимает значения, близкие к .

Так два числа и всегда можно представить в виде и , где , .

Это справедливо для последовательности любой длины.

Разберем конкретный пример.

Пусть мы сжимаем строку из значений яркости пикселов :
. Мы получим следующие последовательности и : и . Заметим, что значения достаточно близки к . Повторим операцию, рассматривая как . Данное действие выполняется как бы рекурсивно, откуда и название алгоритма. Мы получим из : . Полученные коэффициенты, округлив до целых и сжав, например, с помощью алгоритма Хаффмана с фиксированными таблицами, мы можем поместить в файл.

Заметим, что мы применяли наше преобразование к цепочке только два раза. Реально мы можем позволить себе применение -преобразования раз. Более того, дополнительное сжатие можно получить, используя таблицы алгоритма Хаффмана с неравномерным шагом (т.е. нам придется сохранять код Хаффмана для ближайшего в таблице значения). Эти приемы позволяют достичь заметных коэффициентов сжатия.

Алгоритм для двумерных данных реализуется аналогично. Если у нас есть квадрат из точек с яркостями и , то

Исходное B1 B2

изображение B3 B4

Используя эти формулы, мы для изображения пикселов получим после первого преобразования матрицы размером элементов:

 
 

а) исходное изображение б) сжатое изображение

Рис. 3. Сжатие изображения.

В первой, как легко догадаться, будет храниться уменьшенная копия изображения. Во второй – усредненные разности пар значений пикселов по горизонтали. В третьей – усредненные разности пар значений пикселов по вертикали. В четвертой – усредненные разности значений пикселов по диагонали. По аналогии с двумерным случаем мы можем повторить наше преобразование и получить вместо первой матрицы 4 матрицы размером . Повторив наше преобразование в третий раз, мы получим в итоге: матрицы , матрицы и матрицы . На практике при записи в файл, значениями, получаемыми в последней строке , обычно пренебрегают (сразу получая выигрыш примерно на треть размера файла – ...).

К достоинствам этого алгоритма можно отнести то, что он очень легко позволяет реализовать возможность постепенного “ проявления ” изображения при передаче изображения по сети. Кроме того, поскольку в начале изображения мы фактически храним его уменьшенную копию, упрощается показ “огрубленного” изображения по заголовку.

В отличие от JPEG и фрактального алгоритма данный метод не оперирует блоками, например, пикселов. Точнее, мы оперируем блоками , , и т.д. Однако за счет того, что коэффициенты для этих блоков мы сохраняем независимо, мы можем достаточно легко избежать дробления изображения на “мозаичные” квадраты.

Характеристики волнового алгоритма:

Коэффициенты компрессии: (задается пользователем).

Класс изображений: как у фрактального и JPEG.

Симметричность:

Характерные особенности: При высокой степени сжатия изображение распадается на отдельные блоки.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: