Московский государственный университет имени М.В.Ломоносова
Опубликован: 23.04.2007 | Доступ: свободный | Студентов: 3286 / 447 | Оценка: 4.18 / 3.71 | Длительность: 17:54:00
ISBN: 978-5-9556-0098-7
Специальности: Программист
Лекция 14:

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

< Лекция 13 || Лекция 14: 12345

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

Идея вейвлет-преобразования состоит в разложении сигнала (функции-изображения) по системе функций, имеющих локальный всплеск и быстро убывающих на бесконечности [20]. В этом и последующих параграфах предполагается знакомство читателя с базовыми понятиями функционального анализа (см., например, [3]). Обычно такие функции вейвлет-преобразования2от англ. 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++;
}
Листинг 14.1. Алгоритм

В алгоритме 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, дающего вполне приемлемые результаты.

< Лекция 13 || Лекция 14: 12345