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

1 / Salmon_sjatie_dannyh_izobrajeniy_i_zvuka[torrents.ru]

.pdf
Скачиваний:
24
Добавлен:
05.06.2015
Размер:
7.92 Mб
Скачать

Глава 4- Вейвлетные методы

Декодер работает по алгоритму рис. 4.38. Он всегда действует синхронно с кодером, и следующие замечания проясняют совершае­ мые действия.

1.Шаг 2.2 алгоритма выполняется для всех записей списка LIS. Од­ нако шаг 2.2.1 добавляет некоторые записи в LIS (типа В)^ а шаг 2.2.2 добавляет другие записи в LIS (типа А). Важно понять, что эти действия применяются ко всем записям шага 2.2 в одной итерации.

2.Величина п уменьшается после каждой итерации, но это не обя­ зательно должно продолжаться до нулевого значения. Цикл можно остановить после любой итерации, в результате произойдет сжатие

счастичной потерей данных. Обычно пользователь сам определяет число совершаемых итераций, но он может также задавать допу­ стимый порог отклонения сжатого изображения оригинала ( в еди­ ницах MSE), а декодер сам определит необходимое число итераций, исходя из уравнений (4.15).

3.Кодер знает точные значения вейвлетных коэффициентов Cij и использует их для определения битов Sn (уравнение (4.16)), которые будут посылаться в канал связи (или записываться в сжатый файл). Эти биты будут подаваться на вход декодера, который будет их использовать для вычисления значений Cij. Алгоритм, выполняемый декодером, в точности совпадает с алгоритмом рис. 4.38, но слово «выход» следует заменить на «вход».

4.Отсортированная информация, ранее обозначаемая т(А;), восста­ навливается, когда координаты существенных коэффициентов до­ бавляются в список LSP на шаге 2.1.2 и 2.2.1. Это означает, что вейвлетные коэффициенты с координатами из списка LSP, упорядо­ чены в соответствии с условием

|.bg2|c^(A;)|J > [^Og2\Cm{k+l)\\

ДЛЯ всех значений к. Декодер восстанавливает этот порядок, так как все три списка (LIS, LIP и LSP) обновляются в той же после­ довательности, в которой это делает кодер (напомним, что декодер работает синхронно с кодером). Когда декодер вводит данные, эти три списка идентичны спискам кодер в тот момент, когда он выво­ дит эти данные.

5. Кодер начинает работать с готовыми коэффициентами Cij вейвлетного преобразования образа; он никогда не «видел» настояще­ го изображения. А декодер должен показывать изображение и об­ новлять его после каждой итерации. При каждой итерации, когда координаты (г,7) коэффициента Cij помещаются в список LSP в

4.9. SPIHT 28J^

качестве записи, становится известно (и кодеру и декодеру), что 2^ < \ci^j\ < 2 ^ + 1 .

1.Установить порог. Поместить в LIP коэффициенты всех корневых узлов. По­ местить в LIS все деревья (присвоив им тип D). Сделать список LSP пу­ стым.

2.Сортировка: Проверить все коэффициенты из LSP на существенность:

2.1. Если он существенный, то выдать на выход 1, затем выдать на выход бит знака и переместить этот коэффициент в LSP.

2.2. Если он несущественный, то выдать на выход 0.

3.Проверить на существенность все деревья из LIS в соответствии с типом дерева:

3.1. Для деревьев типа D :

3.1.1.Если оно существенное, то выдать на выход 1 и закодировать его первых потомков:

3.1.1.1.Если первый потомок существенный, то выдать на вы­ ход 1, затем выдать на выход бит знака и добавить его в список LSP.

3.1.1.2.Если первый потомок несущественный, то выдать на выход О и добавить его в LIP.

3.1.1.3.Если этот потомок имеет прямых потомков, переме­ стить дерево в конец списка LIP, присвоив ему тип L; в противном случае удалить его из LIS.

3.1.2.Если оно несущественное, то выдать на выход 0.

3.2.Для деревьев типа L :

3.2.1.Если оно существенное, то выдать на выход 1, добавить всех

первых потомков в конец списка LIS в виде записи с типом D

иудалить родительское дерево из LIS.

3.2.2.Если оно несущественное, то выдать на выход 0.

4.Цикл: уменьшить порог на единицу и перейти к шагу 2, если необходимо.

Рис. 4.39. Упрощенный алгоритм кодирования SPIHT.

В результате, лучшим приближенным значением cij этого коэффи­ циента может служить середина между числами 2^ и 2^"^^ = 2 x 2 ^ . Тогда декодер устанавливает c^j = ±1.5 х 2^ (знак числа Q J вводит­ ся декодером сразу после вставки). Во время этапа поправки, когда декодер вводит истинное значение п-го бита коэффициента c^j, он

Глава 4' Вейвлетные методы

исправляет значение 1.5 х 2^, добавляя к нему 2*^"^, если вводимый бит равен 1, или вычитая 2^~^, если этот бит равен 0. Таким обра­ зом, декодер способен улучшать показываемое зрителю изображе­ ние (уменьшать его расхождение с оригиналом) после прохождения каоюдого из этапов: сортировки и поправки.

Производительность алгоритма 8РШТ можно повысить с помощью энтропийного кодирования выхода, но из опытов известно, что это вносит весьма незначительное улучшение, которое не покрывают вре­ менные расходы на его выполнение кодером и декодером. Оказыва­ ется, что распределение знаков и индивидуальных битов вейвлетных коэффициентов, производимых на каждой итерации, близко к равномерному, поэтому энтропийное кодирование не дает эффекта сжатия. С другой стороны, биты Sn{i,j) и Sn{T>(i,j)) распределены неравномерно и это может дать выигрыш при таком кодировании.

18

6

8

-7

3

-5

13

1

2

 

1 - 6 3

2

- 2 4 - 2

 

 

Рис. 4.40. Шестнадцать коэффициентов и пространственно

 

 

 

ориентированное дерево.

4*9.4- Пример

Предполагается, что изображение размера 4 x 4 уже преобразовано и полученные 16 коэффициентов сохранены в памяти компьютера в виде целых чисел со знаком длины 6 бит (знаковый бит, за которым следует 5 битов модуля числа). Все они показаны на рис. 4.40 вместе с единственным пространственно ориентированным деревом. Ал­ горитм кодирования инициализирует список LIP одноэлементным множеством {(1,1)}, список LIS множеством {Х>(1,1)}, а список LSP делает пустым. Наибольший коэффициент равен 18, поэтому пере­ менная п равна [log2 18J = 4 . Приведем первые две итерации.

Сортировка 1: 2^* = 16.

Существен ли (1,1)? Да. Выход: 1. LSP = {(1,1)}. Выход: бит знака: 0.

Существенно ли 2>(1,1)? Нет. Выход: 0.

19. SPIHT

LSP = {(1,1)}, LIP - 0, LIS = p ( l , 1)}. Ha выходе три бита.

Поправка: нет ничего на выходе (эта шаг работает с коэффициен­ тами, отсортированными при итерации п — 1).

Уменьшаем п до 3. Сортировка 2:

2^ = 8.

Существенно ли Х>(1,1)? Да. Выход: 1. Существен ли (1,2)? Нет. Выход: 0. Существен ли (2,1)? Нет. Выход: 0. Существен ли (2,2)? Нет. Выход: 0.

LIP = {(1,2), (2,1), (2,2)}, LIS = {£(1,1)}. Существенно ли £(1,1)? Да. Выход: 1. LIS={P(1,2), Р(2,1), 2)(2,2)}. Существенно ли Х>(1,2)? Да. Выход: 1. Существен ли (1,3)? Да. Выход: 1.

LSP = {(1,1), (1,3)}. Выход: бит знака: 1. Существен ли (2,3)? Да. Выход: 1.

LSP ^ {(1,1), (1,3), (2,3)}. Выход: бит знака: 1. Существен ли (1,4)? Нет. Выход: 0.

Существен ли (2,4)? Нет. Выход: 0. LIP = {(1,2), (2,1), (2,2), (1,4), (2,4)}, LIS = {P(2,1), Р(2,2)}.

Существенно ли Х>(2,1)? Нет. Выход: 0. Существенно ли 2>(2,2)? Нет. Выход: 0. LIP = {(1,2), (2,1), (2,2), (1,4), (2,4)}, LIS = {2?(2,1), 2>(2,2)},

LSP = {(1,1), (1,3), (2,3)}. Четырнадцать битов на выходе.

Поправка 2: после итерации 1, в списке LSP находится запись (1,1), чье значение 18 = 100102Один бит на выходе.

Уменьшаем п до 2. Сортировка 3:

22 = 4.

Существен ли (1,2)? Да. Выход: 1.

LSP = {(1,1), (1,3), (2,3), (1,2)}. Выход: бит знака: 1. Существен ли (2,1)? Нет. Выход: 0.

Существен ли (2,2)? Да. Выход: 1.

LSP = {(1,1), (1,3), (2,3), (1,2), (2,2)}. Выход: бит знака: 0. Существен ли (1,4)? Да. Выход: 1.

LSP = {(1,1), (1,3), (2,3), (1,2), (2,2), (1,4)}. Выход: бит знака: 1.

Глава 4- Вейвлетные методы

Существен ли (2,4)? Нет. Выход: 0. LIP = {(2,1), (2,4)}.

Существенно ли D(2,1)? Нет. Выход: 0. Существенно ли 2>(2,2)? Да. Выход: 1. Существен ли (3,3)? Да. Выход: 1.

LSP = {(1,1), (1,3), (2,3), (1,2), (2,2), (1,4), (3,3)}. Выход: бит

знака: 0.

 

 

 

Существен ли (4,3)? Да. Выход: 1.

 

 

 

LSP = {(1,1), (1,3), (2,3), (1,2), (2,2), (1,4),

(3,3),

(4,3)}. Выход:

бит знака: 1.

 

 

 

Существен ли (3,4)? Нет. Выход: 0.

 

 

 

ЫР = {(2,1), (2,4), (3,4)}.

 

 

 

Существен ли (4,4)? Нет. Выход: 0.

 

 

 

ЫР = {(2,1), (2,4), (3,4), (4,4)}.

 

 

 

ЫР = {(2,1), (2,4), (3,4), (4,4)}, LIS = {Р(2,1)},

 

 

LSP = {(1,1), (1,3), (2,3), (1,2), (2,2), (1,4),

(3,3),

(4,3)}.

Шестнадцать битов на выходе.

 

 

 

Поправка 3: после итерации 2, в списке LSP записаны

(1,1), (1,3)

и (2,3), со значениями, соответственно, 18 =

IOOIO2,

8 = IOOO2 и

13 = 11012.

Три бита на выходе.

После двух итераций общее число битов на выходе равно 37.

4.9.5.QTCQ

Близким к методу SPIHT является алгоритм QTCQ (quadtree clas­ sification and trellis coding, классификация четвертичных деревьев и решетчатое кодирование) из работы [Banister, Fischer 99], который использует меньше списков, чем SPIHT, и явно формирует классы вейвлетных коэффициентов для дальнейшего квантования с помо­ щью методов ACTCQ и TCQ из [Joshi, Crump, Fischer 93].

Этот метод основан на пространственно ориентированных дере­ вьях, построенных для SPIHT. Этот тип деревьев является особым случаем четвертичных деревьев. Алгоритм кодирования является итеративным. На п-той итерации, если обнаружено, что некоторый элемент этого четвертичного дерева является существенным, то че­ тырем верхним элементам дерева присваивается класс п. Одновре­ менно эти элементы становятся корнями четырех новых четвертич­ ных деревьев. Каждое из полученных деревьев проверяется на суще­ ственность, перемещаясь вниз по дереву пока не будут обнаружены все существенные элементы. Все вейвлетные коэффициенты, отне­ сенные к классу п, сохраняются в списке пикселов (LP, list of pixels).

4.9. SPIHT

В начале список LP заполнен всеми веивлетными коэффициентами из низкочастотного поддиапазона LFS (lowest frequency subband). Тест на существенность совершается с помощью функции Зт{к), которая определяется по формуле

5 (к) = I

^'

^^^iij)ek \Cij\ > Т,

\

О,

иначе.

где Т - это текущий порог существенности, а А; - дерево вейвлетных коэффициентов. Алгоритм QTCQ, использующий этот тест, приве­ ден на рис. 4.41.

Алгоритм декодирования QTCQ устроен похоже. Все строки с выводом данных надо заменить на ввод этих данных, а кодирование ACTCQ следует заменить на декодирование ACTCQ.

1. Инициализация:

из LFS,

Заполнить список LP всеми dj

Заполнить список LIS всеми родительскими узлами,

Выдать на выход п = [log2 (max.\Cij\

/q)\.

Задать порог Т = q2^, где q -

множитель качества.

2. Сортировка:

 

 

 

Для каждого узла к из списка LIS выполнить

 

Выдать на выход ST (к)

 

Если 8т(к) = 1, то

 

Для каждого отпрыска к выполнить

 

Переместить коэффициенты в список LP

 

Добавить в список LIS в виде нового узла

 

Конец Для

 

Удалить к из LIS

 

Конец Если

 

Конец Для

3.

Квантование: Для каждого элемента из LP,

 

Квантовать и кодировать его с помощью ACTCQ.

 

(Использовать размер шага TCQ А — \а • q\).

4.

Обновление: Удалить все элементы из LP. Присвоить Т = Т/2.

 

Идти на шаг 2.

Рис . 4 . 41 . Кодирование QTCQ (псевдокод).

Реализация метода QTCQ, приведенная в [Banister, Fischer 99], не предусматривает прогрессирующей передачи изображений, однако авторы утверждают, что такое свойство может быть добавлено в программу реализации.

Что такое вейвлет,ы? Вейвлет,ы расширяют, анализ Фурье. Как вычисляют,сл вейвлеты? Быстрые преобразования делают это.

Ив Нивергельт,

«Вейвлеты делают, эт.о проще».

ГЛАВА 5

СЖАТИЕ ВИДЕО

В середине сороковых годов прошлого века, сразу после окончания Второй мировой войны, группа молодых инженеров, среди кото­ рых были Ален Тьюринг, Джон Атанасов, Джон Мошли и Преспер Эккман, начала разрабатывать первые электронные компьютеры. Пионерам-изобретателям компьютеры представлялись быстрыми и надежными устройствами для совершения вычислений над числа­ ми. Однако очень скоро многие разработчики компьютеров осо­ знали, что их можно применять не только в узковычислительных целях. Первые нечисловые приложения, разработанные в пятидеся­ тые годы, обрабатывали тексты, потом пришла очередь изображе­ ний (шестидесятые годы), компьютерной анимации (семидесятые годы) и оцифрованного звука (восьмидесятые годы). В настояш,ее время компьютеры в основном используются для коммуникаций и развлечений, поэтому они выполняют всевозможные мультимедий­ ные приложения, в которых приходится обрабатывать тексты, изо­ бражения, видео и звук. Все эти оцифрованные массивы приходится отображать, редактировать и передавать по линиям связи другим пользователям.

Любые типы компьютерных данных могут только суш;ественно выиграть от применения эффективного сжатия. Однако, особенно полезной компрессия становится при работе с файлами, содержа­ щими видео. Уже файл единичного изображения имеет достаточно большой объем. Что же говорить о видеофайле, который состоит из тысяч изображений? При обработке изображений, как мы зна­ ем, часто применяется сжатие с потерями. При работе же с видео это становится просто необходимым. Сжатие изображений основы­ вается на корреляции пикселов, а компрессия видео может исполь­ зовать не только корреляцию близких пикселов каждого кадра, но

икорреляцию между последовательными кадрами (см. §5.1).

Вэтой небольшой главе излагаются основные принципы и тех­ нические приемы, используемые при сжатии видеоданных. Мы не будем рассматривать здесь конкретные алгоритмы. Тем, кто хочет ближе познакомиться с методом сжатия MPEG или с другими ал­ горитмами, мы рекомендуем обратиться к книге [Salomon 2000].

5.1. Основные принципы

5.1. Основные принципы

Сжатие видео основано на двух важных принципах. Первый ~ это пространственная избыточность, присущая каждому кадру видео­ ряда. А второй принцип основан на том факте, что большую часть времени каждый кадр похож на своего предшественника. Это на­ зывается временная избыточность. Таким образом, типичный ме­ тод сжатия видео начинает с кодирования первого кадра с помо­ щью некоторого алгоритма компрессии изображения. Затем следу­ ет кодировать каждый последующий кадр, находя расхождение или разность между этим кадром и его предшественником и кодируя эту разность. Если новый кадр сильно отличается от предыдущего (это происходит, например, с первым кадром последовательности), то его можно кодировать независимым образом. В литературе по сжатию видеоданных, кадр, кодируемый с помощью своего предше­ ственника называется внутренним. В противном случае он называ­ ется внешним кадром.

Сжатие видео, обычно, допускает частичную потерю информа­ ции. Кодирование кадра Fi с помощью его предшественника F^-i вносит определенные искажения. Затем кодирование кадра Fi^i на основе кадра Fi добавляет еще большее искажение. Даже при ис­ пользовании сжатия без потерь, это может привести к потере неко­ торых битов данных. То же может случиться при передаче файла или после долгого хранения ленты на полке. Если кадр Fi потерял некоторые биты, то все последующие кадры будут иметь искаже­ ния вплоть до следующего внешнего кадра. Это приводит к неже­ лательному накапливанию ошибок. Поэтому необходимо регулярно использовать внеишие кадры при кодировании последовательного видео­ ряда, а не только в его начале. Внешние кадры обозначаются сим­ волом /, а внутренние кадры - символом Р (от «предсказанный»).

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

Глава 5. Cotcamue видео

чем стандартная скорость смены кадров (довольно большое число кадров должно появиться на экране за секунду времени для нор­ мального восприятия). Поэтому типичный видеодекодер работает в параллельном режиме, то есть, одновременно в работе находится несколько кадров.

Имея это в виду, представим себе, что кодер кодирует кадр 2 с помощью кадров 1 и 3, а затем записывает сжатую информацию в выходной поток в последовательности 1, 3, 2. Декодер читает их в этом порядке, параллельно декодирует кадры 1 и 3, а потом деко­ дирует кадр 2 на основе кадров 1 и 3. Конечно, эти кадры должны быть правильно помечены. Кадры, которые кодируются с примене­ нием прошлых и будущих кадров обозначаются буквой В {bidirec­ tional, двунаправленный).

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

Идея кадров типа В настолько полезна, что большинство кадров сжимается с помощью этого приема. Итак, мы имеем дело с кадрами трех типов: I, В и Р. Кадр / кодируется независимо от всех осталь­ ных кадров. Кадр Р кодируется на основе кадров / или Р. Наконец, кодирование кадра типа В использует предыдущий кадр и следую­ щий кадр типа / или Р. На рис. 5.1а показан пример последователь­ ности кадров в том порядке, в котором они генерируются кодером (и входом декодера). На рис. 5.lb отображена последовательность кадров, которая поступает на выход декодера и отображается на экране дисплея. Ясно, что кадр с номером 2 должен быть отобра­ жен ранее кадра 5. Следовательно, каждый кадр должен иметь две метки, а именно, время кодирования и время отображения.

Для начала рассмотрим два интуитивных метода сжатия видео. Прорелсивание: Кодер выбирает кадры через одного и за­ писывает их в сжатый поток. Это приводит к фактору сжатия 2.

Декодер принимает кадры и дублирует их подряд два раза. Вычитание: Кадр сравнивается со своим предшественником.

Если разница между ними мала (всего в нескольких пикселах), то кодер кодирует только эти отличающиеся пикселы, то есть, запи­ сывает в выходной поток три числа для каждого из отличающихся

5.1. Основные принципы 289J

пикселов: его координаты и разность пикселов двух кадров. Если различие между кадрами велико, то в файл пишется текущий кадр в «сыром» виде. Вариант с частичной потерей для метода вычи­ тания анализирует величину расхождения пикселов. Если разность между двумя значениями меньше некоторого порога, то пикселы не считаются разными.

П И

и и

 

* Время

1 ^J^tJ^ RJ^ hJ' iw^^ r^^ 1^^ ^^* ^ ^ /^ /^ /

Рис. 5.1. (a) Порядок кодирования, (b) Порядок отображения.

Вычитание по блокам: Этот метод является развитием мето­ да вычитаний. Изображение делится на блоки пикселов и каждый блок В сравнивается с соответствующим блоком Р предыдущего кадра. Если число различающихся пикселов этих блоков не превос­ ходит некоторую заданную величину, то блок В сжимается в ви­ де записи координат отличных пикселов и значений их разностей. Преимущество такого подхода проявляется в том, что координаты

вблоке являются малыми числами, и такие числа будут записаны всего один раз для всего блока. Недостаток такого решения состоит

втом, что в противном случае приходится записывать в файл все

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