Английское название рекурсивного сжатия - . На русский язык оно переводится как волновое сжатие, как сжатие с использованием всплесков, а в последнее время и калькой вэйвлет-сжатие. Этот вид
Идея алгоритма заключается в том, что мы сохраняем в файл разницу - число между
Так два числа $${\rm{a}}_{{\rm{2i}}} $$ и $${\rm{a}}_{{\rm{2i + 1}}}$$ всегда можно представить в виде $${\rm{b}}^{\rm{1}} _{\rm{i}} {\rm{ = (a}}_{{\rm{2i}}} {\rm{ + a}}_{{\rm{2i}}} _{{\rm{ + 1}}} {\rm{)/2}} $$ и $${\rm{b}}^{\rm{2}} _{\rm{i}} {\rm{ = (a}}_{{\rm{2i}}} {\rm{ - a}}_{{\rm{2i + 1}}} {\rm{)/2}} $$. Аналогично последовательность $${\rm{a}}_{\rm{i}}$$ может быть попарно переведена в последовательность $${\rm{b}}^{{\rm{1}}{\rm{,2}}} _{\rm{i}} $$.
Разберем конкретный пример: пусть мы сжимаем строку из 8 значений яркости пикселов
( $${\rm{a}}_{\rm{i}}$$ ): (220, 211, 212, 218, 217, 214, 210, 202). Мы получим следующие последовательности $${\rm{b}}^{\rm{1}} _{\rm{i}}$$, и $${\rm{b}}^{\rm{2}} _{\rm{i}}$$ : (215.5, 215, 215.5, 206) и (4.5, -3, 1.5, 4). Заметим, что значения $${\rm{b}}^{\rm{2}} _{\rm{i}} $$ достаточно близки к 0. Повторим операцию, рассматривая $${\rm{b}}^{\rm{1}} _{\rm{i}} $$ как $${\rm{a}}_{\rm{i}}$$. Данное действие выполняется как бы рекурсивно, откуда и название алгоритма. Мы получим из (215.5, 215, 215.5, 206): (215.25, 210.75) (0.25, 4.75). Полученные коэффициенты, округлив до целых и сжав, например, с помощью алгоритма Хаффмана с фиксированными таблицами, мы можем поместить в файл.
Заметим, что мы применяли наше преобразование к цепочке только два раза. Реально мы можем позволить себе применение - преобразования 4-6 раз. Более того, дополнительное сжатие можно получить, используя таблицы алгоритма Хаффмана с неравномерным шагом (т.е. нам придется сохранять код Хаффмана для ближайшего в таблице значения). Эти приемы позволяют достичь заметных степеней сжатия.
(215, 211) (0, 5) (5, -3, 2, 4) (см. пример). Постройте строку из восьми значений яркости пикселов, которую воссоздаст алгоритм волнового сжатия.Алгоритм для двумерных данных реализуется аналогично. Если у нас есть квадрат из 4 точек с яркостями $${\rm{a}}_{{\rm{2i}}{\rm{,2j}}} {\rm{, a}}_{{\rm{2i + 1}}{\rm{, 2j}}} {\rm{, a}}_{{\rm{2i}}{\rm{, 2j + 1}}} {\rm{, и a}}_{{\rm{2i + 1}}{\rm{, 2j + 1}}} ,$$ то
$$ b_{i,j}^1 = (a_{2i,2j} + a_{2i + 1,2j} + a_{2i,2j + 1} + a_{2i + 1,2j + 1} )/4 \\ b_{i,j}^2 = (a_{2i,2j} + a_{2i + 1,2j} - a_{2i,2j + 1} - a_{2i + 1,2j + 1} )/4 \\ b_{i,j}^3 = (a_{2i,2j} - a_{2i + 1,2j} + a_{2i,2j + 1} - a_{2i + 1,2j + 1} )/4 \\ b_{i,j}^4 = (a_{2i,2j} - a_{2i + 1,2j} - a_{2i,2j + 1} + a_{2i + 1,2j + 1} )/4 $$
(см. рис. 7.1)
(рис 7.1) Используя эти формулы, мы для изображения 512х512 пикселов получим после первого преобразования 4 матрицы размером 256х256 элементов: (рис. 7.2)
(рис 7.2) В первой, как легко догадаться, будет храниться уменьшенная копия изображения. Во второй - усредненные
К достоинствам этого алгоритма можно отнести то, что он очень легко позволяет реализовать возможность постепенного "проявления" изображения при передаче изображения по сети. Кроме того, поскольку в начале изображения мы фактически храним его уменьшенную копию, упрощается показ "огрубленного" изображения по заголовку.
В отличие от
Степень: 2-200 (Задается пользователем).
Класс изображений: Как у фрактального и
Симметричность: ~1.5
Характерные особенности: Кроме того, при высокой степени сжатия изображение распадается на отдельные блоки.
Алгоритм
Кроме того, на уровне формата поддерживаются включение в изображение информации о копирайте, поддержка
Базовая схема
DCT ) используется дискретное вэйвлет-преобразование ( DWT ).U и V после преобразования цветовых пространств, поскольку при DWT можно достичь того же результата, но более аккуратно.
(рис 7.3) Конвейер операций, используемый в алгоритме JPEG-2000Рассмотрим алгоритм по шагам.
Шаг 1.
В DC ) каждой компоненты ( ) изображения перед преобразованием в . Это делается для выравнивания динамического диапазона (приближения к 0
$$I'(x,y) = I(x,y) - 2^{ST - 1} $$
Значение степени для как каждой компоненты R, G и В свое (определяется при сжатии компрессором). При восстановлении изображения выполняется
$$I'(x,y) = I(x,y) + 2^{ST - 1} $$
Шаг 2.
Переводим изображение из цветового пространства , с компонентами, отвечающими за красную ( Red ), зеленую ( ) и синюю ( Blue ) составляющие цвета точки, в цветовое пространство . Этот шаг аналогичен
$$\left| \begin{array}{c} Y \\ U \\ V \\ \end{array} \right| = \left( \begin{array}{c} {\left\lfloor {{{{\rm{R}} + {\rm{2G}} + {\rm{B}}} \over {\rm{4}}}} \right\rfloor } \\ R-G \\ B-G \\ \end{array} \right) $$
$$\left| \begin{array}{c} R \\ G \\ B \\ \end{array} \right| = \left( \begin{array}{c} U+G \\ Y - {\left\lfloor {{{\rm{U}} + {\rm{V}}} \over {\rm{4}}}} \right\rfloor } \\ V+G \\ \end{array} \right) $$
Шаг 3.
Дискретное преобразование ( DWT ) также может быть двух видов - для случая сжатия с потерями и для сжатия без потерь. Его коэффициенты задаются таблицами, приведенными ниже. Для сжатия с потерями коэффициенты представлены в табл. 7.1 и табл. 7.2
| Коэффициенты при упаковке | ||
|---|---|---|
| i | Низкочастотные коэффициенты $${\rm{h}}_{\rm{L}} {\rm{(i)}}$$ | Высокочастотные коэффициенты $${\rm{h}}_{\rm{H}} {\rm{(i)}}$$ |
| 0 | 1.115087052456994 | 0.6029490182363579 |
| ±1 | 0.5912717631142470 | -0.2668641184428723 |
| ±2 | -0.05754352622849957 | -0.07822326652898785 |
| ±3 | -0.09127176311424948 | 0.01686411844287495 |
| ±4 | 0 | 0.02674875741080976 |
| Другие i | 0 | 0 |
| Коэффициенты при распаковке | ||
|---|---|---|
| i | Низкочастотные коэффициенты $${\rm{g}}_{\rm{L}} {\rm{(i)}}$$ | Высокочастотные коэффициенты $${\rm{g}}_{\rm{H}} {\rm{(i)}}$$ |
| 0 | 0.6029490182363579 | 1.115087052456994 |
| ±1 | -0.2668641184428723 | 0.5912717631142470 |
| ±2 | -0.07822326652898785 | -0.05754352622849957 |
| ±3 | 0.01686411844287495 | -0.09127176311424948 |
| ±4 | 0.02674875741080976 | 0 |
| Другие i | 0 | 0 |
Для сжатия без потерь коэффициенты представлены в табл. 7.3
| При упаковке | При распаковке | |||
|---|---|---|---|---|
| i | Низкочастотные коэффициенты $${\rm{h}}_{\rm{L}} {\rm{(i)}}$$ | Высокочастотные коэффициенты $${\rm{h}}_{\rm{H}} {\rm{(i)}}$$ | Низкочастотные коэффициенты $${\rm{g}}_{\rm{L}} {\rm{(i)}}$$ | Высокочастотные коэффициенты $${\rm{g}}_{\rm{H}} {\rm{(i)}}$$ |
| 0 | 6/8 | 1 | 1 | 6/8 |
| ±1 | 2/8 | -1/2 | 1/2 | -2/8 |
| ±2 | -1/8 | 0 | 0 | -1/8 |
Само преобразование в одномерном случае представляет собой
$$y_{output} (2n) = \sum\limits_{j = 0}^{N - 1} {x_{input} (j) \cdot h_H (j - 2n)} $$
$$y_{output} (2n + 1) = \sum\limits_{j = 0}^{N - 1} {x_{input} (j) \cdot h_L (j - 2n - 1)} $$
Поскольку большинство $${\rm{h}}_{\rm{L}} {\rm{(i)}}$$, кроме i=0, равны 0, то можно переписать приведенные формулы с меньшим количеством операций. Для простоты рассмотрим случай сжатия без потерь.
$$y_{out} (2n) = {{ - x_{in} (2n - 1) + 2 \cdot x_{in} (2n) + 6 \cdot x_{in} (2n + 1) + 2 \cdot x_{in} (2n + 2) - x_{in} (2n + 3)} \over 8} $$
$$y_{out} (2n + 1) = - {{x_{in} (2n)} \over 2} + x_{in} (2n + 1) - {{x_{in} (2n + 2)} \over 2} $$
Легко показать, что данную запись можно эквивалентно переписать, уменьшив еще втрое количество операций умножения и деления (однако теперь необходимо будет подсчитать сначала все нечетные y ). Добавим также операции округления до ближайшего целого, не превышающего заданное число а, обозначаемые как $$\left\lfloor a \right\rfloor $$:
$$y_{out} (2n + 1) = x_{in} (2n + 1) - \left\lfloor {{{x_{in} (2n) + x_{in} (2n + 2)} \over 2}} \right\rfloor $$
$$y_{out} (2n) = x_{in} (2n) + \left\lfloor {{{y_{out} (2n - 1) + y_{out} (2n + 1) + 2} \over 4}} \right\rfloor $$
Рассмотрим на примере, как работает данное преобразование. Для того, чтобы преобразование можно было применять к крайним пикселам изображения, оно симметрично достраивается в обе стороны на несколько пикселов, как показано на рис. 7.4. В худшем случае (сжатие с потерями) нам необходимо достроить изображение на 4 пиксела.
(рис 7.4) Симметричное расширение изображения (яркости АБ…Е) по строке вправо и влевоПусть мы преобразуем строку из 10 пикселов. Расширим ее значения вправо и влево и применим DWT преобразование:

Получившаяся строка 1, 0, 3, 1, 11, 4, 13, -2, 8, -5 и является цепочкой, однозначно задающей исходные данные. Совершив аналогичные преобразования с коэффициентами для распаковки, приведенными выше в таблице, получим необходимые формулы:
$$x_{out} (2n) = y_{out} (2n) - \left\lfloor {{{y_{out} (2n - 1) + y_{out} (2n + 1) + 2} \over 4}} \right\rfloor $$
$$x_{out} (2n + 1) = y_{out} (2n + 1) + \left\lfloor {{{x_{out} (2n) + x_{out} (2n + 2)} \over 2}} \right\rfloor $$
Легко проверить (используя преобразование упаковки), что значения на концах строк в yout также симметричны относительно n =0 и 9. Воспользовавшись этим свойством, расширим нашу строку вправо и влево и применим

Как видим, мы получили исходную цепочку ( $${\rm{x}}_{{\rm{in}}} {\rm{ = x}}_{{\rm{out}}} $$ ).
DWT -преобразования к цепочке из 10 байт:121, 107, 98, 102, 145, 182, 169, 174, 157, 155.
Далее к строке применяется чересстрочное преобразование, суть которого заключается в том, что все четные коэффициенты переписываются в начало строки, а все нечетные - в конец. В результате этого преобразования в начале строки формируется "уменьшенная копия" всей строки (низкочастотная составляющая), а в конце строки - информация о колебаниях значений промежуточных пикселов (высокочастотная составляющая).

Это преобразование применяется сначала ко всем строкам изображения, а затем ко всем столбцам изображения. В результате изображение делится на 4 квадранта (примеры смотрите в описании рекурсивного сжатия). В первом квадранте будет сформирована уменьшенная копия изображения, а в остальных трех - высокочастотная информация. После чего преобразование повторно применяется уже только к первому квадранту изображения по тем же правилам (рис. 7.5).
(рис 7.5) Для корректного сохранения результатов под данные 2 и 3 квадрантов выделяется на один бит больше, а под данные 4-го квадранта - на 2 бита больше. Т.е. если исходные данные были 8-битные, то на 2 и 3 квадранты нужно 9 бит, а на 4-й - 10, независимо от уровня применения DWT. При записи коэффициентов в файл можно использовать иерархическую структуру DWT, помещая коэффициенты преобразований с большего уровня в начало файла. Это позволяет получить "изображение для предварительного просмотра", прочитав небольшой участок данных из начала файла, а не распаковывая весь файл, как это приходилось делать при сжатии изображения целиком. Иерархичность преобразования может также использоваться для плавного улучшения качества изображения при передаче его по сети.
Шаг 4.
Так же, как и в алгоритме DWT применяется квантование. Коэффициенты квадрантов делятся на заранее заданное число. При увеличении этого числа снижается динамический диапазон коэффициентов, они становятся ближе к 0, и мы получаем большую степень сжатия. Варьируя эти числа для разных уровней преобразования, для разных цветовых компонент и для разных квадрантов, мы очень гибко управляем степенью потерь в изображении. Рассчитанные в компрессоре оптимальные коэффициенты
Шаг 5.
Для сжатия получающихся массивов данных в MQ-, прообраз которого ( QM- ) рассматривался еще в стандарте
Основная задача, которую мы решаем - повышение степени сжатия изображений. Когда практически достигнут предел сжатия изображения в целом и различные методы дают очень небольшой выигрыш, мы можем существенно (в разы) увеличить степень сжатия за счет изменения качества разных участков изображения.
Проблемой этого подхода является то, что необходимо каким-то образом получать расположение наиболее важных для человека участков изображения. Например, таким участком на фотографии человека является лицо, а на лице - глаза. Если при сжатии портрета с большими потерями будут
(рис 7.6) Локальное улучшение качества областей изображенияРаботы по автоматическому выделению таких областей активно ведутся. В частности, созданы алгоритмы автоматического выделения лиц на изображениях. Продолжаются исследования методов выделения наиболее значимых (при анализе изображения мозгом человека)
На сегодня вполне реально применение полуавтоматических систем, в которых качество областей изображения будет задаваться интерактивно. Данный подход уменьшает количество возможных областей применения модифицированного алгоритма, но позволяет достичь большей степени сжатия.
Такой подход логично применять, если:
В качестве примеров приложений, удовлетворяющим этим ограничениям, можно привести практически все
Интересным примером являются WWW-сервера. Для них тоже, как правило, выполняются оба изложенных выше условия. При этом совершенно не обязательно индивидуально подходить к каждому изображению, поскольку по статистике 10% изображений будут запрашиваться 90% раз. Т.е. для крупных справочных или игровых серверов появляется возможность уменьшать время загрузки изображений и степень загруженности каналов связи адаптивно.
В
(рис 7.7) Преобразование маски области повышения качества для обработки DWT коэффициентовЭти области обрабатываются далее другими алгоритмами (с меньшими потерями), что и позволяет достичь искомого баланса по общему качеству и степени сжатия.
Степень сжатия: 2-200 (Задается пользователем). Возможно сжатие без потерь.
Класс изображений: Полноцветные 24-битные изображения. Изображения в градациях серого без резких переходов цветов (фотографии). 1-битные изображения.
Симметричность: 1-1,5
Характерные особенности: Позволяет удалять визуально неприятные эффекты, повышая качество в отельных областях. При сильном сжатии появляется блочность и большие волны в вертикальном и горизонтальном направлениях.
В заключение рассмотрим таблицы (7.4 и 7.5), в которых сводятся воедино параметры различных алгоритмов сжатия изображений, рассмотренных нами выше.
| Алгоритм | Особенности изображения, за счет которых происходит сжатие |
|---|---|
|
Подряд идущие одинаковые цвета: 2 2 2 2 2 2 15 15 15 |
|
Одинаковые |
Хаффмана |
Разная частота появления цвета: 2 2 3 2 2 4 3 2 2 2 4 |
|
Преобладание белого цвета в изображении, большие области, заполненные одним цветом |
Рекурсивный |
Плавные переходы цветов и отсутствие резких границ |
|
Отсутствие резких границ |
Фрактальный |
Подобие между элементами изображения |
| Алгоритм | К-ты сжатия | Симметричность по времени | На что ориентирован | Потери | |
|---|---|---|---|---|---|
|
32, 2, 0.5 | 1 | 3,4-х битные | Нет | 1D |
|
1000, 4, 5/7 | 1.2-3 | 1-8 битные | Нет | 1D |
Хаффмана |
8, 1.5, 1 | 1-1.5 | 8 битные | Нет | 1D |
|
213(3), 5, 0.25 | ~1 | 1-битные | Нет | 1D |
JBIG |
2-30 раз | ~1 | 1-битные | Нет | 2D |
|
2 раза | ~1 | 24-бит. сер. | Нет | 2D |
Рекурсивное сжатие |
2-200 раз | 1.5 | 24-битные, серые | Да | 2D |
|
2-200 раз | ~1 | 24-битные, сер. | Да | 2D |
Фрактальный |
2-2000 раз | 1000-10000 | 24-бит. сер. | Да | 2.5D |
В приведенной таблице отчетливо видны тенденции развития алгоритмов графики последних лет:
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, .
В оглавлении вы можете видеть список алгоритмов компрессии. Единственным совпадением оказывается , а это, согласитесь, не повод, чтобы повсеместно использовать слова "формат" и "алгоритм компрессии" как синонимы (что, увы, можно часто наблюдать).
Между этими двумя множествами нет взаимно однозначного соответствия. Так, различные модификации алгоритма реализованы в огромном количестве форматов. В том числе в TIFF, BMP, PCX. И, если в определенном формате какой-либо файл занимает много места, это не означает, что плох соответствующий алгоритм компрессии. Это означат, зачастую лишь то, что реализация алгоритма, использованная в этом формате, дает для данного изображения плохие результаты. Не более того.
В то же время многие современные форматы поддерживают запись с использованием нескольких алгоритмов TIFF 6.0 может сохранять изображения с использованием алгоритмов , а может сохранять изображение без BMP и TGA позволяют сохранять файлы как с использованием алгоритма компрессии (разных модификаций!), так и без использования оной.
Можно пополнить перечень ситуаций некорректного сравнения алгоритмов. При сохранении абсолютно черного изображения в формате 1000х1000х256 цветов в формате BMP без компрессии мы получаем, как и положено, файл размером чуть более 1000000 байт, а при сохранении с компрессией , можно получить файл размером 64 байта. Это был бы превосходный результат - сжатие в 15 000 раз(!), если бы к нему имела отношение компрессия. Дело в том, что данный файл в 64 байта состоит только из заголовка изображения, в котором указаны все его данные. Несмотря на то, что такая короткая запись изображения стала возможна именно благодаря особенности реализации в BMP, еще раз подчеркнем, что в данном случае алгоритм компрессии даже не применялся. И то, что для абсолютно черного изображения 4000х4000х256 мы получаем коэффициент сжатия 250 тысяч раз, совсем не повод для продолжительных эмоций по поводу эффективности . Кстати - данный результат возможен лишь при определенном положении цветов в палитре и далеко не на всех программах, которые умеют записывать BMP с архивацией (однако все стандартные средства, в т.ч. средства системы Windows, читают такой сжатый файл нормально).
Всегда полезно помнить, что на размер файла оказывают существенное влияние большое количество параметров (вариант реализации алгоритма, параметры алгоритма (как внутренние, так и задаваемые пользователем), порядок цветов в палитре и многое другое). Например, для абсолютно черного изображения 1000х1000х256 градаций серого в формате
Дело в том, что даже для простых форматов одно и то же изображение в одном и том же формате с использованием одного и того же алгоритма архивации можно записать в файл несколькими корректными способами. Для сложных форматов и алгоритмов
Приведенные примеры показывают, что встречаются ситуации, когда алгоритмы записи изображения в файл в различных программах различаются. Однако гораздо чаще причиной разницы файлов являются разные параметры алгоритма. Как уже говорилось, многие алгоритмы позволяют в известных пределах менять свои параметры, но не все программы позволяют это делать пользователю.
Английское название рекурсивного сжатия - . На русский язык оно переводится как волновое сжатие, как сжатие с использованием всплесков, а в последнее время и калькой вэйвлет-сжатие. Этот вид
Идея алгоритма заключается в том, что мы сохраняем в файл разницу - число между
Так два числа $${\rm{a}}_{{\rm{2i}}} $$ и $${\rm{a}}_{{\rm{2i + 1}}}$$ всегда можно представить в виде $${\rm{b}}^{\rm{1}} _{\rm{i}} {\rm{ = (a}}_{{\rm{2i}}} {\rm{ + a}}_{{\rm{2i}}} _{{\rm{ + 1}}} {\rm{)/2}} $$ и $${\rm{b}}^{\rm{2}} _{\rm{i}} {\rm{ = (a}}_{{\rm{2i}}} {\rm{ - a}}_{{\rm{2i + 1}}} {\rm{)/2}} $$. Аналогично последовательность $${\rm{a}}_{\rm{i}}$$ может быть попарно переведена в последовательность $${\rm{b}}^{{\rm{1}}{\rm{,2}}} _{\rm{i}} $$.
Разберем конкретный пример: пусть мы сжимаем строку из 8 значений яркости пикселов
( $${\rm{a}}_{\rm{i}}$$ ): (220, 211, 212, 218, 217, 214, 210, 202). Мы получим следующие последовательности $${\rm{b}}^{\rm{1}} _{\rm{i}}$$, и $${\rm{b}}^{\rm{2}} _{\rm{i}}$$ : (215.5, 215, 215.5, 206) и (4.5, -3, 1.5, 4). Заметим, что значения $${\rm{b}}^{\rm{2}} _{\rm{i}} $$ достаточно близки к 0. Повторим операцию, рассматривая $${\rm{b}}^{\rm{1}} _{\rm{i}} $$ как $${\rm{a}}_{\rm{i}}$$. Данное действие выполняется как бы рекурсивно, откуда и название алгоритма. Мы получим из (215.5, 215, 215.5, 206): (215.25, 210.75) (0.25, 4.75). Полученные коэффициенты, округлив до целых и сжав, например, с помощью алгоритма Хаффмана с фиксированными таблицами, мы можем поместить в файл.
Заметим, что мы применяли наше преобразование к цепочке только два раза. Реально мы можем позволить себе применение - преобразования 4-6 раз. Более того, дополнительное сжатие можно получить, используя таблицы алгоритма Хаффмана с неравномерным шагом (т.е. нам придется сохранять код Хаффмана для ближайшего в таблице значения). Эти приемы позволяют достичь заметных степеней сжатия.
(215, 211) (0, 5) (5, -3, 2, 4) (см. пример). Постройте строку из восьми значений яркости пикселов, которую воссоздаст алгоритм волнового сжатия.Алгоритм для двумерных данных реализуется аналогично. Если у нас есть квадрат из 4 точек с яркостями $${\rm{a}}_{{\rm{2i}}{\rm{,2j}}} {\rm{, a}}_{{\rm{2i + 1}}{\rm{, 2j}}} {\rm{, a}}_{{\rm{2i}}{\rm{, 2j + 1}}} {\rm{, и a}}_{{\rm{2i + 1}}{\rm{, 2j + 1}}} ,$$ то
$$ b_{i,j}^1 = (a_{2i,2j} + a_{2i + 1,2j} + a_{2i,2j + 1} + a_{2i + 1,2j + 1} )/4 \\ b_{i,j}^2 = (a_{2i,2j} + a_{2i + 1,2j} - a_{2i,2j + 1} - a_{2i + 1,2j + 1} )/4 \\ b_{i,j}^3 = (a_{2i,2j} - a_{2i + 1,2j} + a_{2i,2j + 1} - a_{2i + 1,2j + 1} )/4 \\ b_{i,j}^4 = (a_{2i,2j} - a_{2i + 1,2j} - a_{2i,2j + 1} + a_{2i + 1,2j + 1} )/4 $$
(см. рис. 7.1)
(рис 7.1) Используя эти формулы, мы для изображения 512х512 пикселов получим после первого преобразования 4 матрицы размером 256х256 элементов: (рис. 7.2)
(рис 7.2) В первой, как легко догадаться, будет храниться уменьшенная копия изображения. Во второй - усредненные
К достоинствам этого алгоритма можно отнести то, что он очень легко позволяет реализовать возможность постепенного "проявления" изображения при передаче изображения по сети. Кроме того, поскольку в начале изображения мы фактически храним его уменьшенную копию, упрощается показ "огрубленного" изображения по заголовку.
В отличие от
Степень: 2-200 (Задается пользователем).
Класс изображений: Как у фрактального и
Симметричность: ~1.5
Характерные особенности: Кроме того, при высокой степени сжатия изображение распадается на отдельные блоки.
Алгоритм
Кроме того, на уровне формата поддерживаются включение в изображение информации о копирайте, поддержка
Базовая схема
DCT ) используется дискретное вэйвлет-преобразование ( DWT ).U и V после преобразования цветовых пространств, поскольку при DWT можно достичь того же результата, но более аккуратно.
(рис 7.3) Конвейер операций, используемый в алгоритме JPEG-2000Рассмотрим алгоритм по шагам.
Шаг 1.
В DC ) каждой компоненты ( ) изображения перед преобразованием в . Это делается для выравнивания динамического диапазона (приближения к 0
$$I'(x,y) = I(x,y) - 2^{ST - 1} $$
Значение степени для как каждой компоненты R, G и В свое (определяется при сжатии компрессором). При восстановлении изображения выполняется
$$I'(x,y) = I(x,y) + 2^{ST - 1} $$
Шаг 2.
Переводим изображение из цветового пространства , с компонентами, отвечающими за красную ( Red ), зеленую ( ) и синюю ( Blue ) составляющие цвета точки, в цветовое пространство . Этот шаг аналогичен
$$\left| \begin{array}{c} Y \\ U \\ V \\ \end{array} \right| = \left( \begin{array}{c} {\left\lfloor {{{{\rm{R}} + {\rm{2G}} + {\rm{B}}} \over {\rm{4}}}} \right\rfloor } \\ R-G \\ B-G \\ \end{array} \right) $$
$$\left| \begin{array}{c} R \\ G \\ B \\ \end{array} \right| = \left( \begin{array}{c} U+G \\ Y - {\left\lfloor {{{\rm{U}} + {\rm{V}}} \over {\rm{4}}}} \right\rfloor } \\ V+G \\ \end{array} \right) $$
Шаг 3.
Дискретное преобразование ( DWT ) также может быть двух видов - для случая сжатия с потерями и для сжатия без потерь. Его коэффициенты задаются таблицами, приведенными ниже. Для сжатия с потерями коэффициенты представлены в табл. 7.1 и табл. 7.2
| Коэффициенты при упаковке | ||
|---|---|---|
| i | Низкочастотные коэффициенты $${\rm{h}}_{\rm{L}} {\rm{(i)}}$$ | Высокочастотные коэффициенты $${\rm{h}}_{\rm{H}} {\rm{(i)}}$$ |
| 0 | 1.115087052456994 | 0.6029490182363579 |
| ±1 | 0.5912717631142470 | -0.2668641184428723 |
| ±2 | -0.05754352622849957 | -0.07822326652898785 |
| ±3 | -0.09127176311424948 | 0.01686411844287495 |
| ±4 | 0 | 0.02674875741080976 |
| Другие i | 0 | 0 |
| Коэффициенты при распаковке | ||
|---|---|---|
| i | Низкочастотные коэффициенты $${\rm{g}}_{\rm{L}} {\rm{(i)}}$$ | Высокочастотные коэффициенты $${\rm{g}}_{\rm{H}} {\rm{(i)}}$$ |
| 0 | 0.6029490182363579 | 1.115087052456994 |
| ±1 | -0.2668641184428723 | 0.5912717631142470 |
| ±2 | -0.07822326652898785 | -0.05754352622849957 |
| ±3 | 0.01686411844287495 | -0.09127176311424948 |
| ±4 | 0.02674875741080976 | 0 |
| Другие i | 0 | 0 |
Для сжатия без потерь коэффициенты представлены в табл. 7.3
| При упаковке | При распаковке | |||
|---|---|---|---|---|
| i | Низкочастотные коэффициенты $${\rm{h}}_{\rm{L}} {\rm{(i)}}$$ | Высокочастотные коэффициенты $${\rm{h}}_{\rm{H}} {\rm{(i)}}$$ | Низкочастотные коэффициенты $${\rm{g}}_{\rm{L}} {\rm{(i)}}$$ | Высокочастотные коэффициенты $${\rm{g}}_{\rm{H}} {\rm{(i)}}$$ |
| 0 | 6/8 | 1 | 1 | 6/8 |
| ±1 | 2/8 | -1/2 | 1/2 | -2/8 |
| ±2 | -1/8 | 0 | 0 | -1/8 |
Само преобразование в одномерном случае представляет собой
$$y_{output} (2n) = \sum\limits_{j = 0}^{N - 1} {x_{input} (j) \cdot h_H (j - 2n)} $$
$$y_{output} (2n + 1) = \sum\limits_{j = 0}^{N - 1} {x_{input} (j) \cdot h_L (j - 2n - 1)} $$
Поскольку большинство $${\rm{h}}_{\rm{L}} {\rm{(i)}}$$, кроме i=0, равны 0, то можно переписать приведенные формулы с меньшим количеством операций. Для простоты рассмотрим случай сжатия без потерь.
$$y_{out} (2n) = {{ - x_{in} (2n - 1) + 2 \cdot x_{in} (2n) + 6 \cdot x_{in} (2n + 1) + 2 \cdot x_{in} (2n + 2) - x_{in} (2n + 3)} \over 8} $$
$$y_{out} (2n + 1) = - {{x_{in} (2n)} \over 2} + x_{in} (2n + 1) - {{x_{in} (2n + 2)} \over 2} $$
Легко показать, что данную запись можно эквивалентно переписать, уменьшив еще втрое количество операций умножения и деления (однако теперь необходимо будет подсчитать сначала все нечетные y ). Добавим также операции округления до ближайшего целого, не превышающего заданное число а, обозначаемые как $$\left\lfloor a \right\rfloor $$:
$$y_{out} (2n + 1) = x_{in} (2n + 1) - \left\lfloor {{{x_{in} (2n) + x_{in} (2n + 2)} \over 2}} \right\rfloor $$
$$y_{out} (2n) = x_{in} (2n) + \left\lfloor {{{y_{out} (2n - 1) + y_{out} (2n + 1) + 2} \over 4}} \right\rfloor $$
Рассмотрим на примере, как работает данное преобразование. Для того, чтобы преобразование можно было применять к крайним пикселам изображения, оно симметрично достраивается в обе стороны на несколько пикселов, как показано на рис. 7.4. В худшем случае (сжатие с потерями) нам необходимо достроить изображение на 4 пиксела.
(рис 7.4) Симметричное расширение изображения (яркости АБ…Е) по строке вправо и влевоПусть мы преобразуем строку из 10 пикселов. Расширим ее значения вправо и влево и применим DWT преобразование:

Получившаяся строка 1, 0, 3, 1, 11, 4, 13, -2, 8, -5 и является цепочкой, однозначно задающей исходные данные. Совершив аналогичные преобразования с коэффициентами для распаковки, приведенными выше в таблице, получим необходимые формулы:
$$x_{out} (2n) = y_{out} (2n) - \left\lfloor {{{y_{out} (2n - 1) + y_{out} (2n + 1) + 2} \over 4}} \right\rfloor $$
$$x_{out} (2n + 1) = y_{out} (2n + 1) + \left\lfloor {{{x_{out} (2n) + x_{out} (2n + 2)} \over 2}} \right\rfloor $$
Легко проверить (используя преобразование упаковки), что значения на концах строк в yout также симметричны относительно n =0 и 9. Воспользовавшись этим свойством, расширим нашу строку вправо и влево и применим

Как видим, мы получили исходную цепочку ( $${\rm{x}}_{{\rm{in}}} {\rm{ = x}}_{{\rm{out}}} $$ ).
DWT -преобразования к цепочке из 10 байт:121, 107, 98, 102, 145, 182, 169, 174, 157, 155.
Далее к строке применяется чересстрочное преобразование, суть которого заключается в том, что все четные коэффициенты переписываются в начало строки, а все нечетные - в конец. В результате этого преобразования в начале строки формируется "уменьшенная копия" всей строки (низкочастотная составляющая), а в конце строки - информация о колебаниях значений промежуточных пикселов (высокочастотная составляющая).

Это преобразование применяется сначала ко всем строкам изображения, а затем ко всем столбцам изображения. В результате изображение делится на 4 квадранта (примеры смотрите в описании рекурсивного сжатия). В первом квадранте будет сформирована уменьшенная копия изображения, а в остальных трех - высокочастотная информация. После чего преобразование повторно применяется уже только к первому квадранту изображения по тем же правилам (рис. 7.5).
(рис 7.5) Для корректного сохранения результатов под данные 2 и 3 квадрантов выделяется на один бит больше, а под данные 4-го квадранта - на 2 бита больше. Т.е. если исходные данные были 8-битные, то на 2 и 3 квадранты нужно 9 бит, а на 4-й - 10, независимо от уровня применения DWT. При записи коэффициентов в файл можно использовать иерархическую структуру DWT, помещая коэффициенты преобразований с большего уровня в начало файла. Это позволяет получить "изображение для предварительного просмотра", прочитав небольшой участок данных из начала файла, а не распаковывая весь файл, как это приходилось делать при сжатии изображения целиком. Иерархичность преобразования может также использоваться для плавного улучшения качества изображения при передаче его по сети.
Шаг 4.
Так же, как и в алгоритме DWT применяется квантование. Коэффициенты квадрантов делятся на заранее заданное число. При увеличении этого числа снижается динамический диапазон коэффициентов, они становятся ближе к 0, и мы получаем большую степень сжатия. Варьируя эти числа для разных уровней преобразования, для разных цветовых компонент и для разных квадрантов, мы очень гибко управляем степенью потерь в изображении. Рассчитанные в компрессоре оптимальные коэффициенты
Шаг 5.
Для сжатия получающихся массивов данных в MQ-, прообраз которого ( QM- ) рассматривался еще в стандарте
Основная задача, которую мы решаем - повышение степени сжатия изображений. Когда практически достигнут предел сжатия изображения в целом и различные методы дают очень небольшой выигрыш, мы можем существенно (в разы) увеличить степень сжатия за счет изменения качества разных участков изображения.
Проблемой этого подхода является то, что необходимо каким-то образом получать расположение наиболее важных для человека участков изображения. Например, таким участком на фотографии человека является лицо, а на лице - глаза. Если при сжатии портрета с большими потерями будут
(рис 7.6) Локальное улучшение качества областей изображенияРаботы по автоматическому выделению таких областей активно ведутся. В частности, созданы алгоритмы автоматического выделения лиц на изображениях. Продолжаются исследования методов выделения наиболее значимых (при анализе изображения мозгом человека)
На сегодня вполне реально применение полуавтоматических систем, в которых качество областей изображения будет задаваться интерактивно. Данный подход уменьшает количество возможных областей применения модифицированного алгоритма, но позволяет достичь большей степени сжатия.
Такой подход логично применять, если:
В качестве примеров приложений, удовлетворяющим этим ограничениям, можно привести практически все
Интересным примером являются WWW-сервера. Для них тоже, как правило, выполняются оба изложенных выше условия. При этом совершенно не обязательно индивидуально подходить к каждому изображению, поскольку по статистике 10% изображений будут запрашиваться 90% раз. Т.е. для крупных справочных или игровых серверов появляется возможность уменьшать время загрузки изображений и степень загруженности каналов связи адаптивно.
В
(рис 7.7) Преобразование маски области повышения качества для обработки DWT коэффициентовЭти области обрабатываются далее другими алгоритмами (с меньшими потерями), что и позволяет достичь искомого баланса по общему качеству и степени сжатия.
Степень сжатия: 2-200 (Задается пользователем). Возможно сжатие без потерь.
Класс изображений: Полноцветные 24-битные изображения. Изображения в градациях серого без резких переходов цветов (фотографии). 1-битные изображения.
Симметричность: 1-1,5
Характерные особенности: Позволяет удалять визуально неприятные эффекты, повышая качество в отельных областях. При сильном сжатии появляется блочность и большие волны в вертикальном и горизонтальном направлениях.
В заключение рассмотрим таблицы (7.4 и 7.5), в которых сводятся воедино параметры различных алгоритмов сжатия изображений, рассмотренных нами выше.
| Алгоритм | Особенности изображения, за счет которых происходит сжатие |
|---|---|
|
Подряд идущие одинаковые цвета: 2 2 2 2 2 2 15 15 15 |
|
Одинаковые |
Хаффмана |
Разная частота появления цвета: 2 2 3 2 2 4 3 2 2 2 4 |
|
Преобладание белого цвета в изображении, большие области, заполненные одним цветом |
Рекурсивный |
Плавные переходы цветов и отсутствие резких границ |
|
Отсутствие резких границ |
Фрактальный |
Подобие между элементами изображения |
| Алгоритм | К-ты сжатия | Симметричность по времени | На что ориентирован | Потери | |
|---|---|---|---|---|---|
|
32, 2, 0.5 | 1 | 3,4-х битные | Нет | 1D |
|
1000, 4, 5/7 | 1.2-3 | 1-8 битные | Нет | 1D |
Хаффмана |
8, 1.5, 1 | 1-1.5 | 8 битные | Нет | 1D |
|
213(3), 5, 0.25 | ~1 | 1-битные | Нет | 1D |
JBIG |
2-30 раз | ~1 | 1-битные | Нет | 2D |
|
2 раза | ~1 | 24-бит. сер. | Нет | 2D |
Рекурсивное сжатие |
2-200 раз | 1.5 | 24-битные, серые | Да | 2D |
|
2-200 раз | ~1 | 24-битные, сер. | Да | 2D |
Фрактальный |
2-2000 раз | 1000-10000 | 24-бит. сер. | Да | 2.5D |
В приведенной таблице отчетливо видны тенденции развития алгоритмов графики последних лет:
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, .
В оглавлении вы можете видеть список алгоритмов компрессии. Единственным совпадением оказывается , а это, согласитесь, не повод, чтобы повсеместно использовать слова "формат" и "алгоритм компрессии" как синонимы (что, увы, можно часто наблюдать).
Между этими двумя множествами нет взаимно однозначного соответствия. Так, различные модификации алгоритма реализованы в огромном количестве форматов. В том числе в TIFF, BMP, PCX. И, если в определенном формате какой-либо файл занимает много места, это не означает, что плох соответствующий алгоритм компрессии. Это означат, зачастую лишь то, что реализация алгоритма, использованная в этом формате, дает для данного изображения плохие результаты. Не более того.
В то же время многие современные форматы поддерживают запись с использованием нескольких алгоритмов TIFF 6.0 может сохранять изображения с использованием алгоритмов , а может сохранять изображение без BMP и TGA позволяют сохранять файлы как с использованием алгоритма компрессии (разных модификаций!), так и без использования оной.
Можно пополнить перечень ситуаций некорректного сравнения алгоритмов. При сохранении абсолютно черного изображения в формате 1000х1000х256 цветов в формате BMP без компрессии мы получаем, как и положено, файл размером чуть более 1000000 байт, а при сохранении с компрессией , можно получить файл размером 64 байта. Это был бы превосходный результат - сжатие в 15 000 раз(!), если бы к нему имела отношение компрессия. Дело в том, что данный файл в 64 байта состоит только из заголовка изображения, в котором указаны все его данные. Несмотря на то, что такая короткая запись изображения стала возможна именно благодаря особенности реализации в BMP, еще раз подчеркнем, что в данном случае алгоритм компрессии даже не применялся. И то, что для абсолютно черного изображения 4000х4000х256 мы получаем коэффициент сжатия 250 тысяч раз, совсем не повод для продолжительных эмоций по поводу эффективности . Кстати - данный результат возможен лишь при определенном положении цветов в палитре и далеко не на всех программах, которые умеют записывать BMP с архивацией (однако все стандартные средства, в т.ч. средства системы Windows, читают такой сжатый файл нормально).
Всегда полезно помнить, что на размер файла оказывают существенное влияние большое количество параметров (вариант реализации алгоритма, параметры алгоритма (как внутренние, так и задаваемые пользователем), порядок цветов в палитре и многое другое). Например, для абсолютно черного изображения 1000х1000х256 градаций серого в формате
Дело в том, что даже для простых форматов одно и то же изображение в одном и том же формате с использованием одного и того же алгоритма архивации можно записать в файл несколькими корректными способами. Для сложных форматов и алгоритмов
Приведенные примеры показывают, что встречаются ситуации, когда алгоритмы записи изображения в файл в различных программах различаются. Однако гораздо чаще причиной разницы файлов являются разные параметры алгоритма. Как уже говорилось, многие алгоритмы позволяют в известных пределах менять свои параметры, но не все программы позволяют это делать пользователю.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.