Алгоритмические основы растровой графики

Сжатие изображений с потерями

Показывать лекцию целиком

14.1. Необходимость сжатия с потерями

Как указано в первом параграфе предыдущей лекции, объем информации, нужной для хранения изображений, обычно велик. При этом с каждым днем разрешающая способность устройств ввода изображений растет. Некоторое время назад стало очевидно, что классические алгоритмы не обеспечивают достаточной степени сжатия. Являясь алгоритмами общего назначения, они не учитывали того, что сжимаемая информация есть изображение. Соответственно, были разработаны алгоритмы, обеспечивающие сжатие с потерями информации, которые позволили существенно поднять степень компрессии.

Сжатие с потерями основывается на особенностях восприятия человеком изображения: наибольшей чувствительности в определенном диапазоне волн цвета, способности воспринимать изображение как единое целое, не замечая мелких искажений. Также используется тот факт, что изображение - двумерный объект. Главный класс изображений, на который ориентированы алгоритмы сжатия с потерями, - фотографии, изображения с плавными цветовыми переходами.

14.2. Оценка потерь

Напомним, что A называется алгоритмом сжатия c потерями (англ. lossy compression), если он не обеспечивает возможность точного восстановления исходного изображения. Т.е. подбирается пара A, A*, где A* приближенно восстанавливает изображение: для любого изображения I A(I) = I1, A*(I1) = I2 и при этом полученное восстановленное изображение I2 не обязательно точно совпадает с I (см. определение в первом параграфе предыдущей лекции). Возникает вопрос: как оценивать потери визуальной информации, т.е. меру отличия I от I2? Существует множество хороших мер для оценки таких потерь, однако для всех из них можно подобрать такие два изображения, что их мера отличия будет достаточно большой, но на глаз различия будут почти незаметными. И наоборот - можно подобрать изображения, сильно различающиеся на глаз, но имеющие небольшую меру отличия.

Введем сначала норму для значений атрибутов пикселей. Для полутоновых изображений, где на каждое значение атрибута пикселя отводится 8 бит:

$$\Vert I(i, j) \Vert = {\mid I(i, j) \mid}^2 .$$

Причем $$M^* = max \Vert \cdot \Vert$$, т.е. максимально возможное значение для такой нормы равно 255 x 255 = 65025. Для полноцветных изображений с тремя 8 -битными значениями атрибута пикселя (тремя 8 -битными каналами):

$$\Vert I(i, j) \Vert = {\mid R(i, j)\mid}^2 +{\mid G(i, j) \mid}^2 + {\mid B(i, j) \mid}^2 ,$$

следовательно M* = 3 x 255 x 255 = 195075.

Стандартной мерой отличия является мера отношения сигнала к шуму ( PSNR - англ. Peak Signal-to-Noise Ratio), определяемая так:

$$PSNR(I_1, I_2) = 10 log_{10} \left( \frac{M^*}{MSE(I_1, I_2)} \right) ,$$

где MSE(I1, I2) - другая мера - среднеквадратическая ошибка ( L2 -мера, MSE - англ. Mean Squared Error), определяемая так:

$$MSE(I_1, I_2) = \frac{1}{mn} \sum\limits_{i=0}^{m-1} \sum\limits_{j=0}^{n-1} \Vert {I_1(i, j) - I_2(i, j)} \Vert .$$

Тем не менее самой важной "мерой" оценки потерь является мнение наблюдателя. Чем меньше различий (а лучше - их отсутствие) обнаруживает наблюдатель, тем выше качество алгоритма сжатия.

Отметим важный факт, что алгоритмы сжатия с потерями часто предоставляют пользователю возможность выбирать объем "теряемых" данных. Таким образом, существует выбор между качеством и размером сжатого изображения. Естественно, что чем лучше визуальное качество при большем коэффициенте сжатия, тем алгоритм лучше.

(рис 14.1) 8-битное полутоновое изображение

14.3. Изображение как функция

Будем рассматривать изображение как функцию двух переменных, определенную в точках конечного растра (имеется в виду точечная модель растра, см. определение в разделе 1.1). I(x, y) - значение атрибута пикселя (например номер в палитре, интенсивность), зависящее от цветовой модели представления изображения (см. рис. 14.1 и рис. 14.2). Множество таких функций на точках фиксированного конечного растра образуют конечномерное евклидово пространство RX,Y размерности m x n (|X|=m,|Y|= n) со скалярным произведением

$$(I_1, I_2) = \sum\limits_{i, j=0}^{m,n} {I_1(i, j) \cdot I_2(i, j)}.$$ (рис 14.2) Изображение как функция двух переменных

Будем отождествлять с таким пространством L2(X x Y ). В таком пространстве существует базис (см. [3]), т.е. такая система элементов $$\left\{e_k \right\}_{k=1}^{k=m \times n}$$ из RX,Y и такой набор не равных одновременно нулю коэффициентов $$\left\{C_k \right\}_{k=1}^{k=m \times n}$$, что для любой функции I из этого пространства выполнено

$$I =\sum\limits_{k=0}^{m \cdot n} C_k e_k.$$

Если дополнительно предположить ортонормальность базиса, т.е.

$$(e_p, e_q) = { \left\{ \begin{array}{cc} 0, p \ne q\\ 1, p = q \\ \end{array} \right },$$

то выполняется следующее соотношение:

Ck = (I, ek).

Дискретное Преобразование Фурье

Напомним определение двумерного дискретного преобразования Фурье функции I:

$$F(k, l) =\sum\limits_{p=0}^{m} \sum\limits_{q=0}^{n} I(p, q)e^{{- \frac{2 \pi ip}{m} k}e{- \frac{2 \pi iq}{n} l}}$$

для всех k = 1 . . .m, l = 1 . . . n. Обратное преобразование определяется так:

$$I(p, q)=\frac{1}{mn} \sum\limits_{k=0}^{m} \sum\limits_{l=0}^{n} F(k, l)e^{{- \frac{2 \pi ik}{m} p}e{- \frac{2 \pi il}{n} q}}.$$

Система функций $$\left\{e^{2\pi \left ( p\frac{k}{m} + q\frac{l}{n} \right )}\right\}_{k,l=0}^{m,n}$$ образует базис в пространстве функций-изображений (см. [3]).

Такое преобразование очень популярно в области обработки изображений, однако в общем виде практически не используется для сжатия изображений из-за плохой частотно-пространственной локализации.

Дискретное косинусное преобразование

Рассмотрим определение дискретного косинусного преобразования (ДКП) [43]. Пусть изображение имеет размеры N x N. Прямое преобразование записывается так:

$$t(u, v) = c(u)c(v) \sum\limits_{k=0}^{N-1} \sum\limits_{l=0}^{N-1} I(k, l) \cos \frac{(2k + 1)u\pi}{2N} \cos \frac{(2l + 1)v\pi}{2N},$$ $$i, j = 0, . . . ,N - 1, c(i) = { \left\{ \begin{array}{cc} \sqrt{\frac{1}{N}}, i = 0 \\ \sqrt{\frac{2}{N}}, i \ne 0 \\ \end{array} \right }.$$

Обратное преобразование имеет следующий вид:

$$I(k, l) = \sum\limits_{u=0}^{N-1} \sum\limits_{v=0}^{N-1} c(u)c(v) t(u, v) \cos \frac{(2k + 1)u\pi}{2N} \cos \frac{(2l + 1)v\pi}{2N},$$ $$i, j = 0, . . . ,N - 1, c(i) = { \left\{ \begin{array}{cc} \sqrt{\frac{1}{N}}, i = 0 \\ \sqrt{\frac{2}{N}}, i \ne 0 \\ \end{array} \right }.$$

Дискретное преобразование обладает свойствами.

  • Некоррелированность коэффициентов. Коэффициенты независимы друг от друга, т.е. точность представления одного коэффициента не зависит от любого другого.
  • "Уплотнение" энергии (англ. energy compaction). Преобразование сохраняет основную информацию в малом количестве коэффициентов. Данное свойство сильнее всего проявляется на фотореалистичных изображениях.
  • Коэффициенты t(u, v) - это амплитуды пространственных частот изображения. В случае изображений с плавными переходами большая часть информации содержится в низкочастотном спектре (см. лекцию 7).

    Отметим, что применение дискретного косинус-преобразования эквивалентно применению дискретного преобразования Фурье примерно двойной длины к действительным (некомплексным) и четно симметричным данным (эквивалентность вытекает из того, что преобразование Фурье четной действительной функции четно и действительно).

    14.4. Алгоритм сжатия изображений JPEG

    Алгоритм сжатия, используемый в формате хранения изображений JPEGJoint Photographic Experts Group организация, занимающаяся разработкой и стандартизацией алгоритмов и форматов сжатия изображений. см. лекцию 1).

  • Перевод в цветовое пространство YCbCr (подробнее см. лекцию 1). Здесь Y - компонента яркости, Cb и Cr - компоненты цветности. Человеческий глаз более чувствителен к яркости, чем к цвету. Поэтому важнее сохранить большую точность при передаче Y, чем при передаче Cb и Cr. Перевод осуществляется по следующей формуле:$$\left( \begin{array}{c} Y Cb Cr \end{array} \right) ={\left( \begin{array}{ccc} 0,299 0,587 0,114 \\ -0,1687 -0,3313 0,5 \\ 0,5 -0,4187 -0,0813 \end{array} \right)} {\left( \begin{array}{c} R G B \end{array} \right)} + {\left( \begin{array}{c} 0 128 128 \end{array} \right)} ;$$

    обратный перевод:

    $$\left( \begin{array}{c} R G B \end{array} \right)={\left( \begin{array}{ccc} 1 0 1,402 \\ 1 -0,34415 -0,71414 \\ 1 1,772 0 \end{array} \right)}{\left( \begin{array}{c} Y Cb-128 Cr-128 \end{array} \right)}.$$
  • Субдискретизация компонент цветности. После перевода в цветовое пространство YCbCr осуществляется субдискретизация по следующим соотношениям: 4:4:4 (отсутствие передискретизации), 4:2:2 (компоненты цветности меняются через одну по горизонтали), 4:2:0 (компоненты цветности меняются через одну по горизонтали; при этом по вертикали они меняются через строку). Проиллюстрируем подробнее данные соотношения на примерах. Будем преобразовывать блок 4 x 4 пикселя изображения:
    Y00Cb00Cr00 Y01Cb01Cr01 Y02Cb02Cr02 Y03Cb03Cr03
    Y10Cb10Cr10 Y11Cb11Cr11 Y12Cb12Cr12 Y13Cb13Cr13
    Y20Cb20Cr20 Y21Cb21Cr21 Y22Cb22Cr22 Y23Cb23Cr23
    Y30Cb30Cr30 Y31Cb31Cr31 Y32Cb32Cr32 Y33Cb33Cr33

    тогда:

  • 4:4:4. Cубдискретизированный блок будет таким же.
  • 4:2:2. Cубдискретизированный блок будет таким:
    Y00Cb00Cr00 Y01Cb00Cr00 Y02Cb02Cr02 Y03Cb02Cr02
    Y10Cb10Cr10 Y11Cb10Cr10 Y12Cb12Cr12 Y13Cb12Cr12
    Y20Cb20Cr20 Y21Cb20Cr20 Y22Cb22Cr22 Y23Cb22Cr22
    Y30Cb30Cr30 Y31Cb30Cr30 Y32Cb32Cr32 Y33Cb32Cr32
  • 4:2:0. Cубдискретизированный блок будет таким:
    Y00Cb00Cr00 Y01Cb00Cr00 Y02Cb02Cr02 Y03Cb02Cr02
    Y10Cb00Cr00 Y11Cb00Cr00 Y12Cb02Cr02 Y13Cb02Cr02
    Y20Cb20Cr20 Y21Cb20Cr20 Y22Cb22Cr22 Y23Cb22Cr22
    Y30Cb20Cr20 Y31Cb20Cr20 Y32Cb22Cr22 Y33Cb22Cr22
  • В дальнейшем компоненты обрабатываются и хранятся отдельно друг от друга. Таким образом, в последних двух случаях мы сразу убрали $$\frac{1}{3}$$ и $$\frac{1}{2}$$ информации соответственно. Выбор того или иного способа передискретизации влияет на изменение степени сжатия. Очевидно, что при отсутствии передискретизации степень сжатия ухудшится, а при схеме 4:2:0 будет наибольшей. Если изображение не делится нацело на блоки 4 x 4, то оно дополняется по непрерывности, т.е. в случае, если размер по вертикали не делится на 4, то добавляется еще от одной до трех строк, совпадающих с последней снизу. Аналогично делается, если размер по горизонтали не делится на 4 - добавляются столбцы, совпадающие с самым правым.
  • Применение дискретного косинус-преобразования. Изображение (точнее, полученные после субдискретизации компоненты) разбивается на блоки 8 x 8 ; к каждому блоку применяется дискретное косинус-преобразование (отдельно для компонент Y, Cb и Сr ). Если изображение не делится нацело на блоки 8 x 8, то добавляется соответствующее количество строк и столбцов по непрерывности.
  • Квантование. Человеческий глаз практически не замечает изменения в высокочастотных составляющих, следовательно, коэффициенты, отвечающие за высокие частоты, можно хранить с меньшей точностью. Квантование осуществляется с помощью умножения матрицы коэффициентов ДКП на так называемую матрицу квантования:$$\left( \begin{array}{ccc} t11 \ldots t18 \\ \vdots \ddots \vdots \\ t81 \ldots t88 \end{array} \right) \otimes \left( \begin{array}{ccc} q11 \ldots q18 \\ \vdots \ddots \vdots \\ q81 \ldots q88 \end{array} \right) = \left( \begin{array}{ccc} T11 \ldots T18 \\ \vdots \ddots \vdots \\ T81 \ldots T88 \end{array} \right),$$

    где $$\otimes$$ означает покомпонентное умножение и взятие целой части, т.е. Tij = [tijqij ], где tij - исходные коэффициенты ДКП, qij - компоненты матрицы квантования, [] - операция взятия целой части. Таким образом, происходит квантование области определения коэффициентов исходной матрицы. Матрицы квантования разные для компонент цветности и яркости.

    На данной стадии можно задавать степень сжатия путем изменения матриц квантования. Чем ближе к нулю элементы матрицы квантования, тем меньше будет диапазон значений элементов матрицы Tij, а значит, их можно закодировать, затратив меньшее количество информации. Например, если элементы qij достаточно близки к нулю, то большинство элементов Tij будет нулями.

    Матрицы квантования оговорены в стандарте, а для изменения степени сжатия их умножают на определенный коэффициент. Очевидно, что потери на этой стадии самые большие; если убрать слишком много информации из низкочастотных компонент (т.е. слишком сильно огрубить компоненты), то появятся артефакты: распадение на квадраты 8 x 8, эффект Гиббса (возникновение ореола рядом с местами резких цветовых переходов) (см. рис. 14.3 и лекцию 7).

  • Зигзаг-упорядочивание. К каждой квантованной матрице применяется так называемое зигзаг-упорядочивание. Это особый проход матрицы для получения последовательности (см. рис. 14.4). Сначала идет элемент T00, затем T01, T10, T11 . .. Причем для типичных фотореалистических изображений сначала будут идти ненулевые коэффициенты, соответствующие низкочастотным компонентам, а затем - множество нулей.
  • Сжатие методом RLE. Полученная последовательность кодируется с помощью модифицированного алгоритма группового кодирования. Выводятся пары чисел: первое - число нулей, второе - значение после подпоследовательности нулей. Например, закодируем такую последовательность:
    122 0 125 0 0 44 0 0 0 0 -1.
    Получим: (0, 122) (1, 125) (2, 44) (4, -1). Также существует специальный код для обозначения того факта, что оставшиеся значения в последовательности суть нули.
  • Сжатие методом Хаффмена. Проводится кодированием методом Хаффмена со специальной фиксированной таблицей. Подробно этот метод описан в разделе 13.5.
  • (рис 14.4) Артефакты JPEG. Вверху - исходное изображение, внизу - изображение, сжатое в 30 раз алгоритмом JPEG(рис 14.3) Зигзаг-упорядочивание

    Алгоритм восстановления изображения суть инверсия вышеприведенных действий. Степень сжатия от 5 до 100 и более раз (варьируется с помощью матриц квантования и задания метода субдискретизации). При этом визуальное качество для большинства фотореалистичных изображений остается на хорошем уровне при сжатии до 15 раз.

    Данный алгоритм и формат являются самыми распространенными для передачи и хранения полноцветных изображений. Столь широкое распространение объясняется несколькими причинами: относительно невысокой вычислительной сложностью (что было очень актуально до 1996 года), достаточной степенью стандартизованности формата и алгоритма, а также отсутствием необходимости платить какие-либо лицензионные отчисления (т.к. отсутствуют патентованные алгоритмы). К недостаткам алгоритма относят возникновение упоминавшихся выше артефактов, которые слишком заметны для человеческого глаза.

    Описанная выше схема сжатия является типичной для алгоритмов сжатия изображений с потерями (за исключением фрактального). Отличие в основном состоит в типе преобразования на шаге 3. Далее мы рассмотрим другой вид преобразования.

    14.5. Вейвлет-преобразование

    Идея вейвлет-преобразования состоит в разложении сигнала (функции-изображения) по системе функций, имеющих локальный всплеск и быстро убывающих на бесконечности [20]. В этом и последующих параграфах предполагается знакомство читателя с базовыми понятиями функционального анализа (см., например, [3]). Обычно такие функции вейвлет-преобразованияот англ. wavelet transform выводятся из так называемого материнского вейвлета. Материнский вейвлет - это функция $$\psi :$$

    $$\int_{-\infty}^\infty \mid \psi (t) \mid dt < \infty , \int_{-\infty}^\infty {\mid \psi (t) \mid}^2 dt < \infty ,$$

    т.е. $$\psi \in L_2(\mathbb{R}) \cap L_1(\mathbb{R})$$ ; также предполагается, что

    $$\int_{-\infty}^\infty \psi (t) dt =0, \int_{-\infty}^\infty {\mid \psi (t) \mid}^2 dt =1.$$

    Материнский вейвлет преобразовывается следующим образом:

    $$\psi_{ab}(t) =\frac{1}{\sqrt {\mid a \mid }}\psi \left( \frac{t-b}{a} \right),$$

    где $$(a, b) \in \mathbb{R} \backslash \{0\} \times \mathbb{R}$$. Примеры материнских вейвлетов см. на рис. 14.5. В общем случае вейвлет-преобразование записывается так:

    $$W_{\psi} f(a, b) =\frac{1}{\sqrt {\mid a \mid }} \int_{-\infty}^\infty \overline{\psi \left( \frac{t-b}{a} \right)}f(t)dt.$$ (рис 14.5) Примеры материнских вейвлетов

    При практическом применении вейвлет-преобразования анализ такого мощного (а именно континуум) множества коэффициентов невозможен. Поэтому (a, b) выбираются из счетного подмножества плоскости $$\mathbb{R} \backslash \{0\} \times \mathbb{R}$$. Обычно материнский вейвлет и множество значений (a, b) выбирают так, чтобы система $$\{\psi_{ab}\}$$ образовывала ортонормированный базис в пространстве $$L_2(\mathbb{R})$$. Тогда любую функцию f(x) из этого пространства можно разложить по этому базису $$f(x) = \sum_{j,k} c_{jk} \psi_{jk}(x)$$.

    Поясним как применять вейвлет-преобразование к дискретному сигналу (например, изображению). Для простоты будем рассматривать одномерный случай - последовательность конечной длины $${\left\{s_j \right\}}_{j=0}^{N-1}$$. Тогда, при условии что материнский вейвлет $$\psi \in L_2(\mathbb{R})$$, преобразование можно записать так:

    $$W_s(a, b) =\frac{1}{\sqrt{a}}\sum\limits_{j=0}^{N-1}s_j \int_{j}^{j+1}\psi \frac{t-b}{a}dt, a = 1 . . .N, b = 0, . . .N - 1.$$

    Рассмотрим простейшей вейвлет - вейвлет Хаара (англ. Haar wavelet). Рассмотрим пространство $$L_2(\mathbb{R})$$. В этом пространстве ортонормированна следующая система:

    $$\chi_{00}(x) = \left\{ \begin{array}{cc} 1, x \in \left[ 0, \frac{1}{2} \right), \\ -1, x \in \left[ \frac{1}{2}, 1 \right), \\ 0, x \notin \left[ 0, 1 \right). \\ \end{array} \right.$$ $$\chi_{qm}(x) = 2^{q/2}\chi_{00} (2^q x-m), q \in \mathbb{Z}, m \in \mathbb{Z}.$$ (рис 14.6) Материнский вейвлет Хаара

    Данная система называется системой Хаара. Для такого вейвлета материнским является $$\chi_{00}$$ (см. рис. 14.6). В данном случае (a, b) выбраны из $$\mathbb{R} \setminus \{0\} \times \mathbb{R}$$ по такому закону:

    $$a = 2^{-i}, \frac{b}{a}= j, i, j \in \mathbb{Z}$$

    Действие вейвлета Хаара на последовательность, состоящую из 2N элементов, можно рассматривать так: элементы группируются по два, вычисляется сумма и разность каждой пары, разности сохраняются, а из сумм формируется последовательность длины 2N-1 ; далее преобразование выполняется до тех пор, пока не останется одна сумма и соответственно 2N - 1 разность. Такое преобразование задается так называемой матрицей Хаара:

    $$H_2 = \left( \begin{array}{cc} 1 1 \\ 1 -1 \end{array} \right).$$

    Последовательность (a0, . . . , a2N+1) представим так:

    ((a0, a1), . . . , (a2N, a2N+1)).

    Теперь умножим справа векторы (ai, ai+1) на матрицу H2. Получим последовательность сумм и разностей ((s0, d0), . . . , (sN, dN)). Если последовательность имеет длину, кратную 4, то можно применить следующую матрицу Хаара:

    $$H_4 = \left( \begin{array}{cccc} 1 1 1 0 \\ 1 1 -1 0 \\ 1 -1 0 1 \\ 1 -1 0 -1 \end{array} \right).$$

    Очевидно, что данные преобразования легко обратимы. С таким вейвлет-преобразованием тесно связано так называемое S-преобразование. Если мы не хотим, чтобы при преобразовании Хаара границы значений последовательности удваивались (из-за суммирования), надо брать полусумму. Однако при целом делении на 2 мы теряем точность. Решение данной проблемы выглядит так: пусть a и b - пара значений из исходной последовательности. Тогда

    $$s = \left[\frac{a + b}{2}\right], d = a - b,$$

    при этом восстановление выглядит так:

    $$a = s + \left[\frac{d}{2}\right], b = s - \left[\frac{d}{2}\right],$$

    при этом, если d - нечетное, то при d > 0 к a добавляется 1, а если d < 0, то к b добавляется 1.

    // s - сумма, d - разность
    // Round(x) - взятие целой части
    // IsOdd(x) - является ли нечетным
    a = s + Round( d / 2 ); b = s - Round( d / 2 )
    if( IsOdd( d ) )
    {
        if ( d > 0 )
            a++;
        else
            b++;
    }

    В алгоритме JPEG2000 [10] используются так называемые вейвлеты Добеши (англ. Daubechies wavelet). В матричном виде для действия на вектор A длины 8 данное преобразование задается так:

    $$D_4 =\left( \begin{array}{cccccccccc} h_0 h_1 h_2 h_3 0 0 0 0 0 0 \\ g_0 g_1 g_2 g_3 0 0 0 0 0 0 \\ 0 0 h_0 h_1 h_2 h_3 0 0 0 0 \\ 0 0 g_0 g_1 g_2 g_3 0 0 0 0 \\ 0 0 0 0 h_0 h_1 h_2 h_3 0 0 \\ 0 0 0 0 g_0 g_1 g_2 g_3 0 0 \\ 0 0 0 0 0 0 h_0 h_1 h_2 h_3 \\ 0 0 0 0 0 0 g_0 g_1 g_2 g_3 \end{array} \right),$$

    где

    $$h_0 =\frac{1 + \sqrt{3}}{ 4\sqrt{2}}, h_1 =\frac{3 + \sqrt{3}}{ 4\sqrt{2}}, h_2 =\frac{3 - \sqrt{3}}{ 4\sqrt{2}}, h_3 =\frac{1 - \sqrt{3}}{ 4\sqrt{2}}, \\ g_0 = h_3, g_1 = -h_2, g_2 = h_1, g_3 = -h-0.$$

    Как видно, матрица имеет размеры 8 x 10 из-за необходимости участия в суммировании четырех компонент. Т.е. на самом деле, такая матрица умножается на следующий вектор:

    A = (a1a2a3a4a5a6a7a8a9a10)T .

    Обычно полагают либо a9 = a1, a10 = a2, либо a9 = a8, a10 = a7. Использование вейвлет-преобразований при сжатии изображений аналогично использованию дискретного косинус-преобразования в алгоритме JPEG, т.е. само преобразование - лишь ступень конвейера сжатия.

    Вейвлет-преобразования имеют очень хорошую частотно-пространственную локализацию и по этому показателю превосходят традиционные косинус-преобразования и другие преобразования Фурье. Таким образом, становится возможно применять более сильное квантование, улучшая свойства последовательности для последующего сжатия без потерь. Алгоритмы сжатия изображений, основанные на этом преобразовании, при той же степени сжатия показывают лучшие результаты по сохранению качества изображения. К тому же вычислительная сложность очень низка и составляет O(N) (здесь N - длина последовательности, к которой применяется преобразование). Однако распространенность форматов, использующих сжатие на основе вейвлет-преобразования, невелика из-за наличия патентов, а также из-за большой распространенности обычного JPEG, дающего вполне приемлемые результаты.

    14.6. Фрактальное сжатие

    Фрактальное сжатие основывается на поиске и кодировании самоподобных областей в изображении. При этом используются системы итерируемых функций (англ. IFS - Iterated Function System) [31], [12].

    Определение 14.6.1. Отображение $$f \colon R \to R$$ в полном метрическом пространстве $$(R, \rho)$$ называется сжимающим, если $$\exists \alpha < 1 : \forall x, y \in R \rho(f(x), f(y)) < \alpha \rho(x, y)$$.

    Cистеме из $$n$$ сжимающих отображений $$F = {f_1, . . . , f_n}$$, действующих в полном метрическом пространстве $$(R, \rho)$$, ставится в соответствие оператор системы итерируемых функций

    $$F^*(X) =\bigcup_{i=1}^{n}f_i(X),$$

    где $$X \subseteq R, f(X) = \{f(x)|x \in X\}$$. Такое отображение является сжимающим с коэффициентом

    $$\alpha = \max\limits_{1\le i\le n}\alpha_i.$$

    По теореме о сжимающих отображениях [3] существует неподвижное множество $$S\colon F^*(S) = S$$.

    (рис 14.7) Треугольник Серпинского

    Рассмотрим пример действия системы итерируемых функций. Пусть

    $$f_1(x, y) =\left(\frac{1}{2}x,\frac{1}{2}y\right), f_2(x, y) =\left(\frac{1}{2}x+\frac{1}{2},\frac{1}{2}y\right), \\ f_3(x, y) =\left(\frac{1}{2}x+\frac{1}{4},\frac{1}{2}y+\frac{\sqrt{3}}{4}\right),$$

    действуют в пространстве R = [0; 1]2 с евклидовой метрикой. Данные отображения являются сжимающими $$(\alpha_i = \frac{1}{2})$$, и их неподвижные точки есть вершины равностороннего треугольника (их координаты $$(0, 0), (1, 0), (\frac{1}{2},\frac{\sqrt{3}}{2})$$ соответственно). Сначала будем последовательно применять оператор F* данных преобразований к множеству, ограниченному равносторонним треугольником (например, с координатами вершин, указанными выше). Неподвижное множество S, получаемое при действии оператора данной системы итерируемых функций, - это так называемый треугольник Серпинского (см. рис. 14.7). Процесс построения треугольника Серпинского см. на рис. 14.8. Можно начать применять оператор данных преобразований не к треугольнику, а к квадрату. Неподвижное множество будет таким же (см. рис. 14.9). Неважно, с какой области начинать (требуется только компактность), - получим треугольник Серпинского.

    Другим примером неподвижного множества S для оператора F* для некоторой системы F из четырех аффинных преобразований является папоротник Барнсли (см. рис. 14.10).

    (рис 14.9) Построение треугольника Серпинского(рис 14.8) Построение треугольника Серпинского из квадрата

    Изображение папоротника может занимать десятки мегабайт (в хорошем разрешении), а его описание с помощью параметров аффинных преобразования - несколько сотен байт! Соответственно, идея сжатия состоит в поиске таких систем преобразований, которые бы в процессе итерирования приближали желаемое изображение. Задача ставится так:

    по данному множеству S найти систему итерируемых функций F так, что неподвижное множество системы достаточно хорошо приближаетКлассически, подразумевается метрика Хаусдорфа. S.

    Сложность такой задачи в общем случае очень высока. Однако, если рассматривать изображение как функцию (см. введение раздела 14.3) и ограничивать вид преобразований следующим образом:

    $$f(x, y, I(x, y)) =\left( \begin{array}{ccc} a b 0 \\ c d 0 \\ 0 0 L \end{array} \right) \left( \begin{array}{c} x y I(x, y) \end{array} \right) + \left( \begin{array}{c} u v Q \end{array} \right),$$

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

    (рис 14.10) Папоротник Барнсли

    В реальной жизни изображения, подобные папоротнику Барнсли (т.е. состоящие только из самоподобий), встречаются редко, поэтому ожидать похожей степени сжатия нельзя. Тем не менее качество восстановленных изображений при высоких степенях сжатия значительно превосходит JPEG. К недостаткам алгоритма относят очень долгое время сжатия по сравнению с другими методами, а также наличие патентов.

    Вернуться к учебному плану