Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

llama / llama_bachelor_MPiTK_2004_VM-1

.pdf
Скачиваний:
4
Добавлен:
16.04.2013
Размер:
475.19 Кб
Скачать

- 31-

Шаг 3. Построить разбиение Ωi = {ωk }kL=−10 множества обучающих векторов {am}, где ячейки разбиения определяются по текущей кодовой книге Ci = {cik }kL=−10 , следующим образом:

ω

k

=

 

a

A

J

(

a

m

,ci

=

min

(

J

(

a

m

,ci

= D

(

a

m

,ci

+ λR

(

a

m

,ci

.

 

 

 

 

{ m

 

 

 

k )

 

j=0,...,L−1

 

 

j )

 

 

 

j )

 

 

 

j ))}

 

 

Шаг 4.

Вычислить

среднее

 

 

значение

функционала

J

 

 

для последовательности

a0 ,...,aM −1 :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

L−1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ei+1 =

 

 

 

å å J (am ,cik ).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

M k =0 amωk

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаг 5. Если

 

Ei

Ei+1

< ε , то положить J probe

= Ei+1

и перейти на шаг 6,

иначе

 

 

 

Ei+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

перейти на шаг 5.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаг 6. Найти новые кодовые векторы усреднением по ячейкам:

 

 

cik

=

 

 

1

 

 

å am ,

k = 0,..., L −1,

где

 

 

 

{am ωk }

 

 

 

количество векторов

 

 

 

 

 

 

 

 

 

 

 

{am

ωk }

 

 

 

 

 

 

 

 

 

 

amωk

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обучающей последовательности, попавших в ячейку ωk .

 

 

 

 

 

 

 

 

Положить i = i +1 и перейти на шаг 3.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаг

7.

Если

 

J probe < JL−1 ,

 

 

то

 

положить

 

 

 

JL

= J probe ,

 

 

j = j +1, C = Ci ,

иначе

положить L = L −1 и q = q +1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаг 8.

Проверка возможности останова. Если

L = Lmax

 

или

q = qmax , то положить

C* = C и завершить работу алгоритма, иначе перейти на шаг 1.

 

 

 

 

Конец.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.4. Общая схема алгоритма сжатия изображений

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

- 32-

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

Вторая часть алгоритма представляет собой обычную реализацию алгоритма GTR (п.1.2.6). Кодирование выходных потоков индексов и скалярно проквантованных

компонент векторов производится адаптивным многомодельным арифметическим кодером [1].

Баланс между качеством и сжатием при кодировании изображения определяется параметром λ , т.е. для каждого значения λ требуется построить свой набор кодовых книг.

2.4.1. Построение кодовых книг по обучающей последовательности векторов

Шаг 1. С помощью алгоритма, описанного в п.1.2.8, найти разбиение матрицы ДКП (8×8 ) на слабо коррелированные друг с другом подмножества (кластеры). Оптимальное число – 14 кластеров.

Шаг 2. Найти поблочное (8×8 ) ДКП обучающего изображения.

Шаг 3. В каждом из получившихся блоков преобразовать набор элементов, входящих в один и тот же кластер, в вектор. Векторы из всех блоков группируются в наборы по кластерам, которым они принадлежат*.

Шаг 4. Построить кодовые книги по каждому набору векторов, полученному на предыдущем шаге (всего 14 книг) с помощью алгоритма, описанного в п.0. Вместе с n -й

кодовой книгой вычисляется и массив вероятностей кодовых векторов { pk0}Lkn=01 , который далее используется при кодировании.

* Приведем пример. Пусть изображение состоит из

N блоков 2× 2 : {B0

æ i

i

ö

а

,..., BN −1} , где Bi = ç b11i

b12i

÷

 

 

èb21

b22

ø

 

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

æ 1

2

ö

. Тогда

i

-й блок будет разделен на два

ç

1

÷

 

è 2

ø

 

 

 

 

 

 

 

вектора: a1i = {b11i ,b22i } и ai2 = {b12i ,b21i } , а группировка векторов будет проведена так:

A1

= {a1i }N −1 ,

A2

= {ai2

}N −1 .

 

 

 

 

 

 

 

i=0

 

 

i=0

- 33-

Шаг 5. Строится массив вероятностей {πk0}kK=0 скалярно проквантованных компонент

векторов, полученных на шаге 3 (здесь K максимальная амплитуда проквантованного сигнала).

Шаг 6. Разбиение матрицы ДКП на кластеры, кодовые книги, массивы вероятностей и параметр λ сохраняются в постоянную память и далее не изменяются.

Конец.

В экспериментах использовались обучающие изображения, «склеенные» из нескольких стандартных тестовых изображений (см. приложение 1):

Лена+Барбара+Goldhill (1536×512 );

Лена+Собор+Лодка (1792×512 ).

2.4.2. Сжатие изображения

Шаг 1. Вычисляется поблочное ДКП изображения (всего M блоков).

Шаг 2. Каждый блок разбивается на кластеры. ДКП-спектр изображения разбивается на подмножества аналогично шагу 3 алгоритма, описанного в п.2.4.1.

Шаг 3. Каждое подмножество кодируется отдельно с помощью алгоритма GTR (используется то же значение параметра λ , с которым были построены кодовые книги),

на выходе которого получается массив индексов векторов кодовой книги {I (c*k )}Mk=0 и

массив {updatek }kN=0 скалярно проквантованных векторов, дополнительно занесенных в

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

минимума функции JSQ = DSQ + λRSQ ,

где битовые затраты на

кодирование

проквантованных компонент вектора оцениваются по вероятностям {πki }K

:

 

k=0

 

RSQ = − å log2 πki .

 

ˆ

ˆ

 

k:ak a

 

Шаг 4. Постоянная составляющая квантуется отдельно скалярным квантователем и кодируется с помощью дифференциальной импульсно-кодовой модуляции (ДИКМ).

Шаг 5. Проводится статистическое кодирование массивов {I (c*k )}Mk=0 и {updatek }kN=0 с

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

- 34-

{updatek }kN=0 кодируются в одной модели. Отдельные модели используются также для

кодирования постоянной составляющей и номеров скалярных квантователей, с помощью которых проводилось квантование.

Шаг 6. Выходной поток данных выводится в файл побайтно в двоичном виде.

Конец.

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

2.5. Реализация алгоритма сжатия изображений

Описанный в предыдущем параграфе алгоритм был реализован на языке пакета MATLAB 6.5 с использованием дополнительных наборов функций Image Processing Toolbox и External Interfaces API. Наиболее критичные для производительности алгоритма функции поблочное ДКП, поиск в кодовой книге вектора с минимальным значением J методом полного перебора и алгоритм GTR – были реализованы на языке C и скомпилированы компилятором CL производства Microsoft в MEX-библиотеки, используемые средой MATLAB. Для реализации арифметического кодера были использованы оригинальные исходные тексты программы на языке C++, описанной в

[1].Они также были скомпилированы в виде MEX-библиотеки.

2.6.Сравнение алгоритма с существующими методами сжатия изображений

2.6.1. Условия тестирования

Реализованный алгоритм сравнивался со стандартным методом JPEG и его модификацией, использующей вместо кодирования Хаффмана арифметическое кодирование. Работа алгоритма тестировалась при различных параметрах: изменялось число кластеров, размеры кодовых книг, параметр λ , величины скалярных квантователей.

Эксперименты проводились на девяти тестовых изображениях: Barbara, Boat, Cathedral, Goldhill, House, Lena, Mandrill, Peppers и Zelda. Для оценки качества сжатия изображения использовалась оценка PSNR (см. п.1.2.2). Мерой битовых затрат являлось число бит, затраченное на кодирование изображения, приходящихся на 1 пиксель (bits

per pixel): BPP = MN8S , где S – размер файла в байтах, а M,N – размеры изображения в пикселях. На всех графиках буквой L обозначены длины кодовых книг. Приведены

 

 

 

 

 

- 35-

 

 

 

 

 

только графики для значения

λ = 2 ; алгоритм тестировался и на других значениях

λ

(0…3), но выигрыш по битовым затратам был для каждого изображения примерно

одинаковым в процентном соотношении.

 

 

 

 

 

2.6.2. Сравнение с алгоритмом JPEG (сжатие по Хаффману и

 

арифметическое)

 

 

 

 

 

 

 

 

 

33

Compression of barbara.tif, λ=2.0 L=[16 32 64 96 128 192 256 ]

 

 

 

 

 

 

 

 

 

 

 

 

 

32

 

 

 

 

 

 

 

 

 

 

31

 

 

 

 

 

 

 

 

 

 

30

 

 

 

 

 

 

 

 

 

dB

29

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PSNR,

28

 

 

 

 

 

 

 

 

 

27

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

26

 

 

 

 

 

 

 

Clusters=10

 

 

25

 

 

 

 

 

 

 

Clusters=12

 

 

 

 

 

 

 

 

 

Clusters=14

 

 

 

 

 

 

 

 

 

 

 

 

24

 

 

 

 

 

 

 

JPEG Arithm.

 

 

 

 

 

 

 

 

 

JPEG Huffman

 

 

 

 

 

 

 

 

 

 

 

 

23

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

 

0.1

 

 

 

 

 

BPP

 

 

 

 

 

 

 

 

Compression of boat.tif, λ=2.0 L=[16 32 64 96 128 192 256 ]

 

 

 

35

 

 

 

 

 

 

 

 

34

 

 

 

 

 

 

 

 

33

 

 

 

 

 

 

 

 

32

 

 

 

 

 

 

 

dB

31

 

 

 

 

 

 

 

PSNR,

 

 

 

 

 

 

 

30

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

29

 

 

 

 

 

Clusters=10

 

 

 

 

 

 

 

 

 

 

28

 

 

 

 

 

Clusters=12

 

 

 

 

 

 

 

 

Clusters=14

 

 

27

 

 

 

 

 

JPEG Arith

 

 

 

 

 

 

 

 

JPEG Huffman

 

 

26

0.2

0.3

0.4

0.5

0.6

0.7

0.8

 

0.1

 

 

 

 

 

BPP

 

 

 

 

 

 

 

 

- 36-

 

 

 

 

 

 

32

 

Compression of cathedral.TIF, λ=2.0 L=[16 32 64 96 128 192 256 ]

 

 

 

 

 

 

 

 

 

 

 

 

31

 

 

 

 

 

 

 

 

 

 

30

 

 

 

 

 

 

 

 

 

 

29

 

 

 

 

 

 

 

 

 

dB

28

 

 

 

 

 

 

 

 

 

PSNR,

 

 

 

 

 

 

 

 

 

27

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

26

 

 

 

 

 

 

 

Clusters=10

 

 

 

 

 

 

 

 

 

 

 

 

25

 

 

 

 

 

 

 

Clusters=12

 

 

 

 

 

 

 

 

 

 

Clusters=14

 

 

24

 

 

 

 

 

 

 

JPEG Arith

 

 

 

 

 

 

 

 

 

 

JPEG Huffman

 

 

23

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

 

0.1

 

 

 

 

 

 

BPP

 

 

 

 

 

 

Compression of goldhill.tif, λ=2.0 L=[16 32 64 96 128 192 256 ]

 

 

 

34

 

 

 

 

 

 

 

 

 

 

33

 

 

 

 

 

 

 

 

 

 

32

 

 

 

 

 

 

 

 

 

dB

31

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PSNR,

30

 

 

 

 

 

 

 

 

 

29

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

28

 

 

 

 

 

 

 

Clusters=10

 

 

 

 

 

 

 

 

 

Clusters=12

 

 

 

 

 

 

 

 

 

 

 

 

27

 

 

 

 

 

 

 

Clusters=14

 

 

 

 

 

 

 

 

 

JPEG Arith

 

 

 

 

 

 

 

 

 

 

JPEG Huffman

 

 

260

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

 

 

 

 

 

BPP

 

 

 

 

 

 

 

 

 

- 37-

 

 

 

 

 

29

 

Compression of house.TIF, λ=2.0 L=[16 32 64 96 128 192 256 ]

 

 

 

 

 

 

 

 

 

 

28

 

 

 

 

 

 

 

 

27

 

 

 

 

 

 

 

dB

26

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PSNR,

25

 

 

 

 

 

 

 

24

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

23

 

 

 

 

 

Clusters=10

 

 

 

 

 

 

 

Clusters=12

 

 

 

 

 

 

 

 

 

 

22

 

 

 

 

 

Clusters=14

 

 

 

 

 

 

 

JPEG Arith

 

 

 

 

 

 

 

 

JPEG Huffman

 

 

210

0.2

0.4

0.6

0.8

1

1.2

1.4

 

 

 

 

 

BPP

 

 

 

 

 

Compression of lena.tif, λ=2.0 L=[16 32 64 96 128 192 256 ]

 

 

 

 

36

 

 

 

 

 

 

 

 

35

 

 

 

 

 

 

 

 

34

 

 

 

 

 

 

 

 

33

 

 

 

 

 

 

 

dB

32

 

 

 

 

 

 

 

PSNR,

 

 

 

 

 

 

 

31

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

30

 

 

 

 

 

Clusters=10

 

 

 

 

 

 

 

 

 

 

29

 

 

 

 

 

Clusters=12

 

 

 

 

 

 

 

 

Clusters=14

 

 

28

 

 

 

 

 

JPEG Arith

 

 

 

 

 

 

 

 

JPEG Huffman

 

 

27

0.2

0.3

0.4

0.5

0.6

0.7

0.8

 

0.1

 

 

 

 

BPP

 

 

 

 

 

 

 

 

- 38-

 

 

 

 

 

29

 

Compression of mandrill.tif, λ=2.0 L=[16 32 64 96 128 192 256 ]

 

 

 

 

 

 

 

 

 

 

28

 

 

 

 

 

 

 

 

27

 

 

 

 

 

 

 

dB

26

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PSNR,

25

 

 

 

 

 

 

 

24

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

23

 

 

 

 

 

Clusters=10

 

 

 

 

 

 

 

Clusters=12

 

 

 

 

 

 

 

 

 

 

22

 

 

 

 

 

Clusters=14

 

 

 

 

 

 

 

JPEG Arith

 

 

210

 

 

 

 

 

JPEG Huffman

 

 

0.2

0.4

0.6

0.8

1

1.2

1.4

 

 

 

 

 

BPP

 

 

 

 

 

 

Compression of peppers.tif, λ=2.0 L=[16 32 64 96 128 192 256 ]

 

 

35

 

 

 

 

 

 

 

 

34

 

 

 

 

 

 

 

 

33

 

 

 

 

 

 

 

dB

32

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PSNR,

31

 

 

 

 

 

 

 

30

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

29

 

 

 

 

 

Clusters=10

 

 

 

 

 

 

 

Clusters=12

 

 

 

 

 

 

 

 

 

 

28

 

 

 

 

 

Clusters=14

 

 

 

 

 

 

 

JPEG Arith

 

 

 

 

 

 

 

 

JPEG Huffman

 

 

27

0.2

0.3

0.4

0.5

0.6

0.7

0.8

 

0.1

 

 

 

 

 

BPP

 

 

 

 

 

 

 

 

- 39-

 

 

 

 

 

 

 

38

 

Compression of zelda.tif, λ=2.0 L=[16 32 64 96 128 192 256 ]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

36

 

 

 

 

 

 

 

 

 

 

PSNR, dB

34

 

 

 

 

 

 

 

 

 

 

32

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Clusters=10

 

 

30

 

 

 

 

 

 

 

Clusters=12

 

 

 

 

 

 

 

 

 

Clusters=14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JPEG Arith

 

 

28

 

 

 

 

 

 

 

JPEG Huffman

 

 

0.1

0.15

0.2

0.25

0.3

0.35

0.4

0.45

0.5

0.55

 

0.05

 

 

 

 

 

BPP

 

 

 

 

 

 

Как видно из графиков, оптимальным является разбиение на 14 кластеров с

большими размерами кодовых книг. Выигрыш по сравнению JPEG составил от 5 до

28%.

 

 

 

 

 

 

 

 

 

 

 

В случае использования арифметического кодирования в алгоритме JPEG общая

картина сохраняется с той лишь разницей, что графики JPEG «сдвинулись» влево на 7-

10%. В результате на одном из изображений результаты были немного ниже JPEG. В

остальных случаях выигрыш составил 3-19%.

 

 

 

 

 

 

Заключение

В настоящей работе были достигнуты следующие результаты:

1.Апробирован алгоритм кластеризации коррелированных данных [4] в применении

кДКП-блокам изображения.

2.Предложен новый метод «условного разделения» для построения начальной кодовой книги алгоритма LBG. В применении к сжатию изображений этот метод оказался эффективнее, чем стандартные способы задания начальной книги.

3.На основе рассмотренных методов создан новый алгоритм сжатия изображений на основе ДКП и векторного квантования кластеров. В сравнении со стандартным алгоритмом JPEG, использующим ДКП и скалярное квантование, данный алгоритм оказывается эффективнее на 5-28% в мере качества PSNR при кодировании тестовых

фотографических изображений.

- 40-

Также проведен обзор теоретических основ сжатия изображений с потерями, в частности, основ векторного квантования.

Существует несколько направлений дальнейшей работы по улучшению созданного алгоритма. Во-первых, возможно использование контекстного кодирования для постоянной составляющей ДКП. Во-вторых можно применять вместо ДКП другие ортогональные преобразования, например, ДВП, так как предлагаемый алгоритм векторного квантования является универсальным и при кодовой книге, построенной по соответствующим обучающим векторам, может использоваться для сжатия любых данных. В-третьих, для более эффективного кодирования индексов векторов можно воспользоваться алгоритмом группировки индексов [10]. В-четвертых, можно использовать контекстное кодирование как индексов векторов, так и скалярно проквантованных их компонент.

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Мы не исправляем ошибки в тексте (почему?), но будем благодарны, если вы все же напишите об ошибках.

Соседние файлы в папке llama