Сжатие данных, звука и изображений
.pdfГлава 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) Порядок отображения.
Вычитание по блокам: Этот метод является развитием мето да вычитаний. Изображение делится на блоки пикселов и каждый блок В сравнивается с соответствующим блоком Р предыдущего кадра. Если число различающихся пикселов этих блоков не превос ходит некоторую заданную величину, то блок В сжимается в ви де записи координат отличных пикселов и значений их разностей. Преимущество такого подхода проявляется в том, что координаты
вблоке являются малыми числами, и такие числа будут записаны всего один раз для всего блока. Недостаток такого решения состоит
втом, что в противном случае приходится записывать в файл все