Д.С. Ватолин - Алгоритмы сжатия изображений (1119068), страница 8
Текст из файла (страница 8)
Для фрактального алгоритма компрессии, как и для других алгоритмов сжатия с потерями, очень важны механизмы, с помощью которых можно будет регулировать степень сжатия и степень потерь. К настоящему времени разработан достаточно большой набор таких методов. Во-первых, можно ограничить количество аффинных преобразований, заведомо обеспечив степень сжатия не ниже фиксированной величины. Во-вторых, можно потребовать, чтобы в ситуации, когда разница между обрабатываемым фрагментом и наилучшим его приближением будет выше определенного порогового значения, этот фрагмент дробился обязательно (для него обязательно заводится несколько “линз”). В-третьих, можно запретить дробить фрагменты размером меньше, допустим, четырех точек. Изменяя пороговые значения и приоритет этих условий, мы будем очень гибко управлять коэффициентом компрессии изображения, в диапазоне от побитового соответствия, до любой степени сжатия. Причем, эта гибкость будет гораздо выше, чем у ближайшего “конкурента” — алгоритма JPEG.
Рекурсивный (волновой) алгоритм
Английское название рекурсивного сжатия — wavelet. На русский оно также переводится как волновое сжатие, и как сжатие с использованием всплесков. Этот вид архивации известен довольно давно и напрямую исходит из идеи использования когерентности областей. Ориентирован алгоритм на цветные и черно-белые изображения с плавными переходами. Идеален для картинок типа рентгеновских снимков. Коэффициент сжатия задается и варьируется в пределах 5-100 раз. При попытке задать больший коэффициент, на резких границах, особенно проходящих по диагонали, проявляется “лестничный эффект” — ступеньки разной яркости, размером в несколько пикселов.
Идея алгоритма заключается в том, что мы сохраняем в файл разницу число между средними значениями соседних блоков в изображении, которая обычно принимает значения близкие к 0.
Так два числа a2i и a2i+1 всегда можно представить в виде b1i=(a2i+a2i+1)/2 и b2i=(a2i-a2i+1)/2. Аналогично последовательность ai может быть попарно переведена в последовательность b1,2i.
Разберем конкретный пример: пусть мы сжимаем строку из 8 значений яркости пикселов (ai): (220, 211, 212, 218, 217, 214, 210, 202). Мы получим следующие последовательности b1i, и b2i: (215.5, 215, 215.5, 206) и (4.5, -3, 0.5, 4). Заметим, что значения b2i достаточно близки к 0. Повторим операцию, рассматривая b1i как ai. Данное действие выполняется как бы рекурсивно, откуда и название алгоритма. Мы получим из (215.5, 215, 215.5, 206): (215.25, 210.75) (0.25, 4.75). Полученные коэффициенты, округлив до целых и сжав, например, с помощью алгоритма Хаффмана с фиксированными таблицами, мы можем поместить в файл.
Заметим, что мы применяли наше преобразование к цепочке только два раза. Реально мы можем позволить себе применение wavelet- преобразования 4-6 раз. Более того, дополнительное сжатие можно получить, используя таблицы алгоритма Хаффмана с неравномерным шагом (т.е. нам придется сохранять код Хаффмана для ближайшего в таблице значения). Эти приемы позволяют достичь заметных коэффициентов сжатия.
Упражнение: Мы восстановили из файла цепочку (215, 211) (0, 5) (6, -3, 1, 4) (см. пример). Постройте строку из восьми значений яркости пикселов, которую воссоздаст алгоритм волнового сжатия.
Алгоритм для двумерных данных реализуется аналогично. Если у нас есть квадрат из 4 точек с яркостями a2i,2j, a2i+1, 2j, a2i, 2j+1, и a2i+1, 2j+1, то
Исходное | B1 | B2 | |
изображение | B3 | B4 |
Используя эти формулы, мы для изображения 512х512 пикселов получим после первого преобразования 4 матрицы размером 256х256 элементов:
В первой, как легко догадаться, будет храниться уменьшенная копия изображения. Во второй — усредненные разности пар значений пикселов по горизонтали. В третьей — усредненные разности пар значений пикселов по вертикали. В четвертой — усредненные разности значений пикселов по диагонали. По аналогии с двумерным случаем, мы можем повторить наше преобразование и получить вместо первой матрицы 4 матрицы размером 128х128. Повторив наше преобразование в третий раз, мы получим в итоге: 4 матрицы 64х64, 3 матрицы 128х128 и 3 матрицы 256х256. На практике, при записи в файл, значениями, получаемыми в последней строке ( ), обычно пренебрегают (сразу получая выигрыш примерно на треть размера файла — 1- 1/4 - 1/16 - 1/64...).
К достоинствам этого алгоритма можно отнести то, что он очень легко позволяет реализовать возможность постепенного “проявления” изображения при передаче изображения по сети. Кроме того, поскольку в начале изображения мы фактически храним его уменьшенную копию, что упрощает показ “огрубленного” изображения по заголовку.
В отличие от JPEG и фрактального алгоритма данный метод не оперирует блоками, например, 8х8 пикселов. Точнее мы оперируем блоками 2х2, 4х4, 8х8 и т.д. Однако за счет того, что коэффициенты для этих блоков мы сохраняем независимо, мы можем достаточно легко избежать дробления изображения на “мозаичные” квадраты.
Заключение
В заключение рассмотрим таблицы, в которых сводятся воедино параметры различных алгоритмов сжатия изображений, рассмотренных нами выше.
Алгоритм | Особенности изображения, за счет которых происходит сжатие |
RLE | Подряд идущие одинаковые цвета: 2 2 2 2 2 2 2 15 15 15 |
LZW | Одинаковые подцепочки: 2 3 15 40 2 3 15 40 |
Хаффмана | Разная частота появления цвета: 2 2 3 2 2 4 3 2 2 2 4 |
CCITT-3 | Преобладание белого цвета в изображении, большие области, заполненные одним цветом |
Рекурсивный | Плавные переходы цветов и отсутствие резких границ |
JPEG | Отсутствие резких границ |
Фрактальный | Подобие между элементами изображения |
Алгоритм | К-ты сжатия | Симметричность по времени | На что | Потери | Размерность |
RLE | 32, 2, 0.5 | 1 | 3,4-х битные | Нет | 1D |
LZW | 1000, 4, 5/7 | 1.2-3 | 1-8 битные | Нет | 1D |
Хаффмана | 8, 1.5, 1 | 1-1.5 | 8 битные | Нет | 1D |
CCITT-3 | 213(3), 5, 0.25 | ~1 | 1-битные | Нет | 1D |
JBIG | 2-30 раз | ~1 | 1-битные | Нет | 2D |
Lossless JPEG | 2 раза | ~1 | 24-бит. сер. | Нет | 2D |
Рекурсивное сжатие | 2-200 раз | 1.5 | 24-битные, серые | Да | 2D |
JPEG | 2-200 раз | ~1 | 24-битные, сер. | Да | 2D |
Фрактальный | 2-2000 раз | 1000-10000 | 24-бит. сер. | Да | 2.5D |
В приведенной таблице отчетливо видны тенденции развития алгоритмов графики последних лет:
-
ориентация на фотореалистичные изображения с 16 миллионами цветов (24 бита);
-
использование сжатия с потерями, возможность за счет потерь регулировать качество изображений;
-
использование избыточности изображений в двух измерениях;
-
появление существенно несимметричных алгоритмов;
-
увеличивающаяся степень сжатия изображений.
Контрольные вопросы к разделу
-
В чем разница между алгоритмами с потерей информации и без потери информации?
-
Приведите примеры мер потери информации и опишите их недостатки.
-
За счет чего сжимает изображения алгоритм JPEG?
-
В чем заключается идея фрактального алгоритма компрессии?
-
В чем заключается идея рекурсивного (волнового) сжатия?
-
Можно ли применять прием перевода в другое цветовое пространство алгоритма JPEG в других алгоритмах компрессии?
-
Сравните приведенные в этой главе алгоритмы сжатия изображений.
Различия между форматом и алгоритмом
Дополнительный раздел
Напоследок несколько замечаний относительно разницы в терминологии, путаницы при сравнении рейтингов алгоритмом и т.п.
Посмотрите на краткий перечень форматов, достаточно часто используемых на PC, Apple и UNIX платформах: ADEX, Alpha Microsystems BMP, Autologic, AVHRR, Binary Information File (BIF), Calcomp CCRF, CALS, Core IDC, Cubicomp PictureMaker, Dr. Halo CUT, Encapsulated PostScript, ER Mapper Raster, Erdas LAN/GIS, First Publisher ART, GEM VDI Image File, GIF, GOES, Hitachi Raster Format, PCL, RTL, HP-48sx Graphic Object (GROB), HSI JPEG, HSI Raw, IFF/ILBM, Img Software Set, Jovian VI, JPEG/JFIF, Lumena CEL, Macintosh PICT/PICT2, MacPaint, MTV Ray Tracer Format, OS/2 Bitmap, PCPAINT/Pictor Page Format, PCX, PDS, Portable BitMap (PBM), QDV, QRT Raw, RIX, Scodl, Silicon Graphics Image, SPOT Image, Stork, Sun Icon, Sun Raster, Targa, TIFF, Utah Raster Toolkit Format, VITec, Vivid Format, Windows Bitmap, WordPerfect Graphic File, XBM, XPM, XWD.