llama / llama_bachelor_MPiTK_2004_VM-1
.pdf- 1-
Содержание
Содержание...................................................................................................................... |
1 |
Введение........................................................................................................................... |
3 |
1. Теоретические аспекты сжатия изображений ............................................................ |
4 |
1.1. Цифровые изображения........................................................................................ |
4 |
1.2. Векторное квантование......................................................................................... |
4 |
1.2.1. Определение ................................................................................................... |
4 |
1.2.2. Мера искажения ............................................................................................. |
5 |
1.2.3. Проблема построения векторного квантователя .......................................... |
6 |
1.2.4. Свойства оптимального векторного квантователя ....................................... |
7 |
1.2.5. Практическая реализация векторного квантователя .................................... |
8 |
1.2.6. Адаптивное векторное квантование............................................................. |
10 |
1.2.7. Проблемы практической реализации векторных квантователей................ |
11 |
1.2.8. Алгоритм кластеризации коррелированных данных................................... |
12 |
1.3. Эффективное кодирование сообщений дискретного источника без памяти .... |
14 |
1.3.1. Понятие энтропии ......................................................................................... |
14 |
1.3.2. Арифметическое кодирование...................................................................... |
15 |
1.4. Ортогональные преобразования.......................................................................... |
18 |
1.4.1. Корреляция как мера статистической зависимости данных ....................... |
18 |
1.4.2. Применение ортогональных преобразований.............................................. |
20 |
1.4.3. Дискретный марковский процесс первого порядка..................................... |
20 |
1.4.4. Дискретное косинусное преобразование ..................................................... |
21 |
1.5. RD-оптимизация................................................................................................... |
22 |
2. Разработка алгоритма сжатия изображений.............................................................. |
25 |
2.1. Краткий обзор существующих подходов ........................................................... |
25 |
2.2. Тестирование алгоритма кластеризации............................................................. |
25 |
2.3. Задание начальной кодовой книги алгоритма LBG ........................................... |
28 |
2.4. Общая схема алгоритма сжатия изображений.................................................... |
31 |
2.4.1. Построение кодовых книг по обучающей последовательности векторов .32 |
|
2.4.2. Сжатие изображения..................................................................................... |
33 |
2.5. Реализация алгоритма сжатия изображений....................................................... |
34 |
2.6. Сравнение алгоритма с существующими методами сжатия изображений ....... |
34 |
- 2- |
|
2.6.1. Условия тестирования................................................................................... |
34 |
2.6.2. Сравнение с алгоритмом JPEG (сжатие по Хаффману и арифметическое) |
|
....................................................................................................................................... |
35 |
Заключение ..................................................................................................................... |
39 |
Литература ...................................................................................................................... |
41 |
Приложение 1. Тестовые изображения.......................................................................... |
43 |
Приложение 2. Исходные коды программ .................................................................... |
45 |
Файл build_codebooks.m ............................................................................................. |
45 |
Файл build_upd_stat.m................................................................................................. |
47 |
Файл decode.m............................................................................................................. |
47 |
Файл display_graphs.m ................................................................................................ |
48 |
Файл encode_dc.m ....................................................................................................... |
49 |
Файл img_prepare.m .................................................................................................... |
49 |
Файл jpeg_psnr_plot.m ................................................................................................ |
49 |
Файл main.m................................................................................................................ |
50 |
Файл quantize.m........................................................................................................... |
52 |
Файл test_algorithm.m ................................................................................................. |
52 |
Файл quant_mtx.m ....................................................................................................... |
54 |
Файл gtr.c..................................................................................................................... |
54 |
- 3-
Введение
Внастоящее время алгоритмы сжатия цифровых данных используются повсеместно. Это связано с тем, что количество информации, хранимой на устройствах памяти, увеличивается быстрее, чем происходит совершенствование этих устройств, а хранимая информация почти всегда обладает избыточностью. Избыточность информации означает, что можно уменьшить занимаемый ей на устройстве памяти объем, не уменьшая (или почти не уменьшая) ее количество; свойством избыточности обладают практически все используемые человеком виды информации: текст, звукозапись, изображение, видеозапись.
Методы сжатия данных делятся на два больших класса: методы сжатия без потерь информации и методы сжатия с ее потерями. Первые, как правило, используются для сжатия текста, исполняемых файлов компьютерных программ, изображений графического характера. Вторые – для сжатия видео- и звукозаписей, полноцветных фотографических изображений. Сжатие без потерь означает, что восстановленные данные ничем не отличаются от исходных, а сжатие с потерями – что восстановленные данные отличаются от исходных, но это отличие незаметно или почти незаметно для человека.
Существует множество методов сжатия изображений с потерями; из них наибольшее распространение получил алгоритм JPEG [17], созданный в начале 90-х годов XX века. Он основан на дискретном косинусном преобразовании (ДКП), скалярном квантовании
истатистическом кодировании Хаффмана, обеспечивая степень сжатия в 10-50 раз при приемлемом качестве восстановленного изображения. Позже был создан более эффективный алгоритм JPEG2000, использующий дискретное вейвлет-преобразование и арифметическое кодирование; при приблизительно одинаковом с JPEG качестве восстановленного изображения оно занимает меньший объем в памяти при хранении.
Эта работа посвящена разработке однопроходного алгоритма сжатия цифровых изображений с потерями, основанного на применении ДКП и адаптивного векторного квантования.
Вглаве 1 рассмотрены теоретические аспекты сжатия изображений; в главе 2 описано построение алгоритма, проанализированы полученные результаты и описаны перспективы дальнейшего развития предложенного метода.
-4-
1.Теоретические аспекты сжатия изображений
1.1.Цифровые изображения
Монохроматическим цифровым изображением называется неотрицательная дискретная функция распределения яркости I (i, j) на плоскости, где i, j ! − декартовы координаты.
Как правило, цифровое изображение представляется в виде матрицы целых чисел – уровней яркости.
Характерной особенностью изображений реальных объектов является то, что они состоят из областей, разделенных более или менее резкими световыми границами, внутри которых яркость меняется сравнительно медленно. Эти световые границы (контуры) передают форму объекта и содержат в себе основную информацию о нем.
Цифровые изображения хорошо описываются моделями кусочно-стационарных случайных процессов, причем разрывы стационарности происходят, как правило, на контурах.
1.2.Векторное квантование
1.2.1.Определение
Векторным квантователем Q называется отображение из евклидова пространства
! n в множество C ! n , состоящее из m векторов размерности n . Множество C
называется кодовой книгой.
Для любого вектора из ! n существует ближайший (в смысле минимума метрики) к
нему вектор из C , и при кодировании последовательности векторов из ! n очередной вектор заменяется индексом i (т.е. порядковым номером в кодовой книге) ближайшего к нему вектора ci C .
Очевидно, векторное квантование является обобщением скалярного квантования при
n = 1.
Как правило, в реальных системах сжатия данных используется двоичный канал связи, поэтому количество векторов в кодовой книге обычно берут равным степени двойки: m = 2k . В этом случае на кодирование каждого вектора затрачивается
R = log2 m = k бит, а на каждую компоненту этого вектора – mk бит. Таким образом, в
- 5-
отличие от скалярного квантования, количество бит на один отсчет сигнала может быть и дробным.
1.2.2. Мера искажения
|
ˆ |
|
|
|
|
|
Мера искажения – это функционал D(x,x) , определяющий «отличие» исходного |
||||||
|
ˆ |
= |
|
−1 |
é |
ù |
вектора |
x от проквантованного и восстановленного вектора x |
|
Q |
|
ëQ(x)û . |
Мера искажения в методах сжатия изображений должна удовлетворять следующим требованиям:
-выражаться аналитически;
-легко вычисляться;
-отражать человеческое восприятие искажения.
Как правило, в качестве меры искажения используется евклидова метрика:
|
|
|
|
|
|
|
|
|
= |
n−1 |
2 |
|
|
ˆ |
|
|
|
ˆ |
|
|
|
|
ˆ |
, |
(1) |
||
|
|
|
|
||||||||||
D(x,x) = |
|
|
|
x − x |
|
|
|
E |
å(xi − xi ) |
|
|||
|
|
|
|
|
|
|
|
|
|
i=0 |
|
|
|
где xi , xˆi – i -е компоненты векторов x и xˆ соответственно.
На практике для оценки искажения, вносимого квантователем в реальный случайный процесс, чаще всего используется усредненное по времени искажение [9]:
|
|
= lim 1 |
k−1 |
|
|
|
|
|
|
åD(xi ,xˆi ) . |
|
(2) |
|||
D |
|
||||||
|
|
k→∞ k |
i=0 |
|
|
|
|
Если случайный процесс X ( xi |
X ) является |
стационарным. |
то предел (2) |
||||
|
|
|
é |
ˆ ù |
|
|
|
существует и равен математическому ожиданию E ëD(X , X )û . |
|
|
|
||||
Квантователь будем считать «хорошим» в случае, |
если значение |
|
|
невелико, и |
|||
D |
|||||||
«плохим» в противном случае. |
|
|
|
|
|
Для оценки общего искажения, внесенного в цифровое изображение в результате сжатия с потерями, применяют похожий подход. Одним из наиболее простых критериев является среднеквадратичное отклонение значений яркости пикселей:
|
|
|
|
|
|
( |
|
å(I (i, j) - Iˆ(i, j))2 |
|
|
|
|
i, j |
|
|
||
d (I, I ) = |
, |
||||
MN |
|||||
|
|
|
|
где I (i, j) – яркость пикселя с координатами (i, j) в исходном изображении, Iˆ(i, j) – в
восстановленном изображении, M , N – размеры изображения. Согласно ему,
изображение будет сильно испорчено при понижении яркости всего на 5% (хотя глаз
- 6-
этого практически не заметит). В то же время изображения «со снегом» – резким изменением яркости отдельных точек, слабыми полосами или «муаром» – будут признаны «почти не изменившимися». Свои недостатки есть и у других критериев.
Например, мера максимального отклонения
d(I, Iˆ) = max I (i, j) - Iˆ(i, j)
i, j
крайне чувствительна к биению отдельных пикселей. На изображении может существенно изменится значение только одного пикселя, но при этом, согласно данной мере, изображение будет сильно испорчено.
Мера, которая наиболее часто используется на практике, называется пиковым отношением сигнала к шуму (PSNR):
|
æ |
|
|
|
ö |
|
|
|
ç |
|
|
2552 |
÷ |
|
|
PSNR =10lg |
ç |
|
|
|
|
÷ . |
(3) |
|
1 |
å(I (i, j) - Iˆ(i, j)) |
|
||||
|
ç |
|
2 ÷ |
|
|||
|
ç |
|
|
÷ |
|
||
|
è |
|
MN i, j |
ø |
|
Данная мера по сути аналогична среднеквадратичному отклонению, однако пользоваться ей несколько удобнее за счет логарифмического масштаба шкалы.
1.2.3. Проблема построения векторного квантователя
Как указано выше, предел (2) существует в случае стационарности случайного процесса и совпадает с его математическим ожиданием. Это свойство полезно для теоретического вычисления минимально возможного D , но при работе с реальными сигналами математическое ожидание вычислить, как правило, невозможно, так как неизвестна функция распределения. В этом случае векторный квантователь строится по достаточно представительной обучающей выборке, D вычисляется как выборочное среднее, и в случае, если рассматриваемый процесс является стационарным и эргодическим, D будет примерно равно математическому ожиданию.
Реальные процессы редко бывают стационарными, однако оказалось, что при
некоторых условиях все же возможно построить квантователь по обучающей выборке так, чтобы среднее искажение при квантовании векторов из любой другой выборки
данного случайного процесса слабо отличалось от среднего искажения обучающей выборки. Эти условия таковы:
- Выборка должна быть достаточно велика.
-7-
-Случайный процесс должен быть либо стационарным, либо кусочно- стационарным, либо асимптотически стационарным [9].
Данные требования дают основания для построения векторного квантователя по обучающей выборке из реальных случайных процессов, так как многие из них (например, речь или фотографические изображения) хорошо описываются кусочно- стационарными или асимптотически стационарными случайными процессами.
1.2.4. Свойства оптимального векторного квантователя
Оптимальным называется такой векторный квантователь Q* , для которого
функционал |
D |
( |
ë |
û) |
достигает |
своего |
глобального минимума среди всех |
|||||
|
x,Q−1 éQ(x)ù |
|||||||||||
возможных векторных квантователей: |
( |
|
|
( |
|
)û) |
|
|||||
|
|
|
|
|
Q |
|
ë |
x |
. |
|||
|
|
|
|
Q* = arg min D |
|
x,Q−1 éQ |
|
ù |
Для стационарного случайного процесса {xi } оптимальный квантователь всегда существует.
Для любого наперед заданного среднего искажения, вносимого векторным квантователем, существует нижняя граница битовых затрат на кодирование компоненты случайного вектора:
"D $R* (D) : R* = min R(D) .
Кроме того, для любого наперед заданного среднего искажения можно построить такой векторный квантователь, который при неограниченном увеличении размерности
векторов кодовой книги обеспечит приближение к минимуму битовых затрат на кодирование компоненты случайного вектора:
"D $Q* : lim 1 |
R ëéQ* ({xi})ûù |
= R* . |
n→∞ n |
|
|
Поэтому векторное квантование является асимптотически оптимальным по битовым затратам на кодирование.
Существуют два необходимых условия оптимальности векторного квантователя (в данном случае под квантователем понимается пара кодер-декодер):
1°. (Условие «ближайшего соседа»). При кодировании вектора x оптимальный квантователь поставит ему в соответствие такой вектор c* , который обеспечит
- 8-
наименьшее искажение вектора x среди всех векторов кодовой книги данного квантователя:
c |
* |
= arg min D(ck |
,Q |
−1* é |
* |
ù |
|
ëQ |
|
(x)û). |
|||
|
|
ck C |
|
|
|
|
2°.(Условие центроидов). При декодировании индекса i оптимальный квантователь поставит ему в соответствие вектор x* , являющийся центром масс всех векторов, ранее
закодированных индексом i : |
||||||
x* = |
|
1 |
|
|
å xk , где M = {xk | Q* (xk ) = i} . |
|
|
|
M |
|
|
||
|
|
|||||
|
|
|
|
|
xk M |
Условие 1° задает разбиение пространства ! n на домены Вороного, где в один домен входят такие векторы, которые отображаются квантователем в один и тот же кодовый вектор xˆ .
1.2.5. Практическая реализация векторного квантователя
Основываясь на приведенных выше необходимых условиях оптимальности, можно создать алгоритм построения векторного квантователя (алгоритм LBG или обобщенный алгоритм Ллойда, [14]).
Шаг 1. Инициализация.
Задать некоторую кодовую книгу C0 = {c0k }kL=−10 ,
положить среднюю ошибку E0 = +¥ , установить счетчик итераций i = 0 .
Шаг 2. Построить разбиение Wi = {ωk }kL=−10 множества обучающих векторов {am}, где
ячейки разбиения определяются по текущей кодовой книге Ci = {cik }L−1 |
, следующим |
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
k =0 |
|
образом: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ω |
|
|
|
( |
|
|
,ci |
|
|
|
( |
|
|
,ci |
|
|
|
k |
= a |
Î A |
D |
a |
m |
= min |
−1 |
D |
a |
m |
. |
|
|||||
|
{ m |
|
|
|
k ) |
j=0,...,L |
|
|
j )} |
|
|
Шаг 3. Вычислить среднюю ошибку векторного квантования для последовательности a0 ,...,aM −1 :
1 L−1
Ei = M å å D(am ,cik ). k =0 amωk
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 9- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Шаг |
|
|
4. |
Проверка |
|
возможности |
|
останова. Если |
Ei−1 |
− Ei |
< ε , |
то |
прекратить |
||||||||||||||||||||||||||
|
|
|
|
|
|
Ei |
|
|
|
||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
вычисления, положив C = Ci , иначе перейти на шаг 5. |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||
Шаг 5. Найти новые кодовые векторы усреднением по ячейкам: |
|
|
|
||||||||||||||||||||||||||||||||||||
cik = |
|
|
|
1 |
|
|
|
å am , |
k = 0,..., L −1, |
|
где |
|
{am ωk } |
|
|
– |
|
|
количество |
векторов |
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||
|
{am ωk } |
|
|
|
|||||||||||||||||||||||||||||||||||
|
|
amωk |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
обучающей последовательности, попавших в ячейку ωk . |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||
Положить i = i +1 и перейти на шаг 2. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
Конец. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
При последующем векторном квантовании для произвольного входного вектора |
x |
||||||||||||||||||||||||||||||||||||||
из кодовой |
книги |
будет |
|
выбираться |
|
ближайший |
|
вектор |
|
с j |
= arg min D(ck ,x), |
а |
|||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ck C |
|
|
кодироваться будет индекс |
j . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
Алгоритм |
|
всегда |
|
сходится, так как значение D на |
|
каждой итерации |
не |
||||||||||||||||||||||||||||||||
увеличивается, а величина D ограничена снизу нулем. |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||
Развитием этого алгоритма является алгоритм ECVQ [6], учитывающий не только |
|||||||||||||||||||||||||||||||||||||||
ошибку квантования |
D(c j ,x), |
но и битовые затраты, |
необходимые для кодирования |
||||||||||||||||||||||||||||||||||||
индекса |
|
|
j . |
|
Его отличие от приведенного алгоритма |
|
построения |
векторного |
|||||||||||||||||||||||||||||||
квантователя состоит в том, что на шаге 2 строится разбиение по RD-критерию (см. |
|||||||||||||||||||||||||||||||||||||||
п.1.5): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
( |
|
|
|
|
|
|
|
( |
|
|
|
|
( |
|
|
|
|
( |
|
|
|
|
|
|
||||||||||
ω |
k |
= a |
m |
A |
J |
a |
m |
,ci |
|
= |
min |
J |
a |
m |
,ci |
= D |
a |
m |
,ci |
+ λR |
a |
m |
,ci |
, |
|
|
|||||||||||||
|
|
|
{ |
|
|
|
|
|
k ) |
|
j=0,...,L−1( |
|
|
j ) |
|
|
|
|
j ) |
|
|
|
|
|
j ))} |
|
|
|
где λ – параметр, задающий баланс между уровнем сжатия и ошибкой представления данных, а битовые затраты R(am ,cij ) = −log2ν j на кодирование индекса j оцениваются
по частоте ν j |
= |
|
{a ω j } |
|
|
M |
попадания векторов обучающей |
последовательности |
|
|
|||||||
A = {a0 ,...,aM −1} |
в |
ячейку |
ω j , |
которая соответствует кодовому |
вектору cij . Выбор |
вектора из кодовой книги при последующем кодировании произвольного вектора x также осуществляется по критерию минимума RD-функции Лагранжа с тем же параметром λ , который использовался при построении квантователя.
Приведенный алгоритм не лишен недостатков. Во-первых, хотя он и сходится, но лишь к локальному, а не глобальному минимуму; во-вторых, скорость его работы невелика, и в-третьих, результирующая кодовая книга сильно зависит от начальной
- 10-
кодовой книги C0 . Существует несколько подходов к заданию начальной кодовой книги:
1.Случайная инициализация.
2.«Разделение» (splitting): изначально кодовая книга содержит всего один вектор; в
процессе работы каждый вектор кодовой книги разделяется на два с помощью следующего преобразования [6]:
x = (x0 |
|
ì |
+ |
= (x0 |
+ ε, x1 |
+ ε,..., xn−1 + ε ) . |
|
, x1 |
,..., xn−1 ) Þ íïx |
|
|||||
|
|
ïx− |
= (x |
- ε , x - ε ,..., x |
- ε ) |
||
|
|
î |
|
0 |
1 |
n−1 |
|
После разделения запускается алгоритм LBG с увеличенной начальной кодовой книгой, а после завершения его работы вновь происходит «разделение» кодовой книги. Этот процесс повторяется до тех пор, пока кодовая книга не достигнет необходимого размера.
1.2.6. Адаптивное векторное квантование
Векторные квантователи, построенные с помощью существующих алгоритмов, все же не являются оптимальными, а реальные процессы, подвергаемые квантованию, не всегда удовлетворяют требованию стационарности. Поэтому разумно ввести в схему векторного квантования адаптивность – возможность изменения кодовой книги в случае, если характеристики процесса значительно изменились. Квантователь как бы «приспосабливается», адаптируется к изменившимся условиям работы.
Одним из самых простых и эффективных методов адаптивного векторного квантования является алгоритм GTR [7]. Ниже приведена его схема.
Шаг 1. Инициализация. Задать начальную кодовую книгу C0 = {c0k }kL=−10 , начальные массивы вероятностей P0 = {pk0}kL=−10 , P0 = {πk0}kN=−01 , установить счетчик i = 0 .
Шаг 2. Для кодируемого вектора ai найти индекс «ближайшего» вектора из Ci :
I* = arg =min− JVQ (ai ,cik ), где JVQ (ai ,cik ) = (D(ai ,cik ) + λR(ai ,cik )), k 0,...,L 1
R(ai ,cik ) = -log2 pk .
Шаг 3. Проквантовать вектор скалярно: aˆi = QS (ai ) и вычислить
JSQ = D(QS−1 (aˆi ),ai ) + λR(aˆi ) , где R(aˆi ) = - å log2 πk . k:aki ai