Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
llama / llama_master_thesis_MPiTK_2006_VM-1.pdf
Скачиваний:
30
Добавлен:
16.04.2013
Размер:
1.6 Mб
Скачать

2. Алгоритм видеокомпрессии

2. Алгоритм видеокомпрессии

2.1. Общая схема

ˆ

Fi1

Fi

Рис. 6. Общая схема кодера

Общая схема кодера представлена на рис. 6. Его основными составляющими являются:

модуль преобразования сигнала из пространства RGB в YUV;

модуль компенсации движения;

модуль вычисления уточняющего изображения;

модуль сжатия уточняющего изображения (алгоритм SPIHT);

интервальный статистический кодер;

встроенный декодер сжатых кадров.

Алгоритм сжатия поддерживает как I-кадры (ключевые), так и P-кадры.

22

2. Алгоритм видеокомпрессии

Ключевые кадры сжимаются методом SPIHT [17], основанным на дискретном вейвлет-преобразовании. Этот метод обладает рядом достоинств, позволяющих использовать его при реализации видеокодека:

высокая скорость работы;

высокая эффективность кодирования;

возможность остановить кодирование в любой момент времени;

возможность точно контролировать битовые затраты и качество сжатия.

Для компрессии P-кадров применяется схема компенсации движения между текущим и предыдущим кадрами. Кадр делится на блоки 8×8 пикселов, и компенсация проводится в пространственной области. Для каждого блока на новом кадре проводится поиск блока с предыдущего кадра, ближайшего к нему в смысле минимума RD-критерия [21], учитывающего как евклидову метрику между блоками, так и битовые затраты на кодирование вектора движения. Поиск проводится в некоторой окрестности блока; реализовано несколько методов поиска

сразличной эффективностью и вычислительной сложностью.

Вкадре могут появляться новые объекты, которых не было на предыдущих кадрах, и их компенсировать невозможно; кроме того, компенсация движения в некоторых случаях не дает хорошего результата. Поэтому в алгоритме используется уточняющее изображение, которое строится по текущему и предыдущему кадрам с учетом векторов движения. Уточняющее изображение, как правило, состоит из нулевых или близких к нулю пикселов и поэтому хорошо сжимается алгоритмом SPIHT c низкими битовыми затратами.

Опишем модули кодера подробно.

2.2. Компенсация движения

Представленный ниже алгоритм предназначен для межкадровой компенсации перемещения источника видеоданных. Входными данными алгоритма являются два соседних полутоновых кадра, «старый» K1 и «новый» K2 из исходной видеопоследовательности. Каждый из кадров – это матрица фиксированной размерности M × N , элементы которой представляют собой значения уровней яркости соответствующих точек изображения.

23

2. Алгоритм видеокомпрессии

На кадре K1 берутся непересекающиеся блоки Bi ,

i =1,..., NS , размера

NSB × NSB , покрывающие весь кадр. Положение каждого блока задается его крайней

левой верхней точкой (xBi , yBi ). Далее, в следующем кадре

K2 для каждого из

блоков Bi ищется блок Bi , i =1,..., NS , похожий на Bi . Степень схожести блоков определяется с помощью квадрата евклидовой нормы разности двух матриц Bi и

Bj : d(Bi ,Bj )=

 

 

 

Bi Bj

 

 

 

2E

= ∑(Bi (l,m)Bj (l,m))2 . Область поиска представляет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

l,m

собой квадратное поле со стороной 2dS (алгоритм полного перебора, рис. 7).

Расстояние dS определяется возможной скоростью перемещения камеры или объектов в кадре. Ввиду того, что данная процедура является вычислительно сложной, для практического применения можно использовать модифицированный алгоритм поиска похожего блока, который является менее точным, но существенно ускоряет вычисления, например, «кольцевой» трехшаговый алгоритм [18]. Его суть заключается в том, что область поиска блока Bi ограничивается лишь некоторым набором точек (см. рис. 8).

dS

dS

Рис. 7. Область поиска алгоритма полного перебора

На первом шаге алгоритма в область поиска входят 8 точек, расположенных по «кругу» с некоторым «радиусом» от исходного положения блока, и сама исходная

точка (x , y

). Наименьшее из девяти отклонений

min{d (B

,B

, y

)} определяет

i i

 

x, y

i

x

 

 

 

 

 

 

 

координаты точки (x, y), которая будет исходной для следующего шага.

Начальный радиус поиска (на первом шаге) определяется эмпирически (например, 8 пикселов), на втором и на третьем шагах радиусы «колец» составляют

24

(1y)),

2. Алгоритм видеокомпрессии

3 и 1 пиксел соответственно. Конечная точка алгоритма (xi, yi) определяет блок

Bi , наиболее похожий на блок Bi .

Рис. 8. «Кольцевой» трехшаговый алгоритм поиска похожего блока

«Кольцевой» трехшаговый алгоритм существенно выигрывает в производительности по сравнению с полным перебором, но он не позволяет определять небольшие перемещения. Это обусловлено возникновением вокруг начальной точки так называемой «мертвой зоны», в которой проверка не производится. Например, для «кольцевого» алгоритма с радиусами 8, 3, 1 на соответствующих шагах «мертвая зона» будет представлять собой «круг» радиуса 4. Чтобы устранить этот недостаток, к описанному выше алгоритму добавляется еще один блок – поиск небольших перемещений. Тогда конечный алгоритм направленного поиска блока Bi , наиболее похожего на Bi , принимает следующий вид:

Шаг 1. Точный поиск небольших перемещений

Шаг 1.1. Среди девяти блоков Bx,y, (x, y)= (xi + (1x), yi +

(1x) {2,0,2},

(1y) {2,0,2}, ищется блок Bx(1),y(1)

такой, что

d (Bi ,B(1)

 

 

(1) )=

min

 

 

 

 

(1)

 

(1)

 

 

 

,y

 

d Bi ,B

 

 

.

 

 

x

 

 

 

(1)

,

(1)

 

xi +

x

, yi +

y

 

 

 

 

 

 

 

 

 

x

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаг 1.2. Среди девяти блоков Bx,y,

(x, y)= (x(1) +

(x2), y(1) + (y2)),

(x2) {1,0,1},

(y2) {1,0,1}, ищется блок Bx(2),y(2)

такой, что

d (Bi ,B(2)

 

 

(2) )

=

 

 

 

 

 

 

 

 

 

(2 )

 

(1)

(2 )

 

 

,y

min d Bi ,B(1)

+

, y

.

 

x

 

 

 

(2)

(2 )

 

 

x

 

x

 

+ y

 

 

 

 

 

 

 

 

x

 

, y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

25

2. Алгоритм видеокомпрессии

Шаг 2. Грубый поиск больших перемещений

Шаг 2.1. Среди восьми блоков Bx,y, (x, y)= (xi + (x3), yi + (y3)),

( (x3), (y3)) {(8, 0),(0, 8),(8, 0),(0,8),(6, 6),(6, 6),(6,6),(6,6)},

ищется блок Bx(3),y(3)

такой, что

 

 

 

 

 

d (Bi ,B(3)

 

(3) )=

min

 

 

(3)

 

 

 

,y

d Bi ,B

, yi +

(3) .

x

 

(3)

,

(3)

 

xi +

x

y

 

 

 

 

x

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаг 2.2. Среди девяти блоков Bx,y, (x, y)= (x(3) +

(x4), y(3) +

(y4)),

( (x4), (y4)) {(0, 0),(2, 2),(2, 2),(2,2),(2,2),(3, 0),(0, 3),(3, 0),(0,3)},

ищется блок Bx(4),y(4)

такой, что

 

 

 

 

 

 

 

 

 

 

d (Bi ,B(4)

 

(4) )=

min

 

 

(3)

 

(4)

 

(3)

 

(4)

 

 

,y

d Bi ,B

+

, y

+

.

 

x

 

 

(4)

,

(4)

 

x

 

x

 

y

 

 

 

 

 

 

x

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаг 2.3. Среди девяти блоков Bx,y, (x, y)= (x(4) + (x5), y(4) +

(y5)),

(x5) {1,0,1},

(y5) {1,0,1}, ищется блок Bx(5),y(5) такой, что

d (Bi ,B(5)

 

(5) )

=

min

 

 

 

 

(5)

 

(4)

 

(5)

 

 

,y

d Bi ,B(4)

+

, y

+

.

 

x

 

 

(5)

,

(5)

 

x

 

x

 

y

 

 

 

 

 

 

x

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шаг 3. Выбор наиболее похожего блока

Координаты (xi, yi) блока Bi , наиболее похожего на блок Bi ,

определяются из условия

(x(2)

, y(2)), если d (B

,B

(2)

, y

(2) )d (B

,B(5)

, y

(5) )

 

 

 

i

x

 

i

x

 

(xi, yi)=

(5)

(5)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

, y ) , иначе.

 

 

 

 

 

 

(xi , yi )ri (xi, yi)

(x

 

 

i =1,..., NS ,

по

 

Для каждого блока Bi ,

 

 

описанному

выше

алгоритму

 

определяется

 

Bi

вектор перемещения

ri = (xi′ − xi , yi′ − yi )= (xir , yir )

 

Bi

 

 

(см. рис. 9).

 

 

 

 

 

 

 

 

 

 

На выходе алгоритма компенсации движения

 

Рис. 9. Перемещение блока Bi

получается вектор r = {r1,r2 ,...,rNS }. Кроме того,

 

 

 

26

вместе с этим d = {d1, d2 ,..., dNs

2. Алгоритм видеокомпрессии

вектором выводится и служебная информация в виде вектора минимальных значений отклонения для каждого блока. Эта

информация позже используется в алгоритме кодирования.

Выигрыш в производительности алгоритма направленного поиска по сравнению с полным перебором очевиден: вместо (2dS +1)2 вычислений отклонения d (Bi ,Bj ) для каждого из NS блоков необходимо вычислить отклонение лишь 41NS раз для всего кадра, причем это число не зависит от возможного перемещения камеры. Величина dS определяет радиус поиска на шаге

2.1 алгоритма и зависит от конкретного приложения. Выбор оптимального радиуса производится экспериментальным путем.

Рис. 10. Неудачная компенсация быстрого движения

В работе использовалось значение ds =8 : при большем значении поиск становился слишком грубым, а меньшие значения не могли компенсировать быстрое движение, что приводило к неоправданным избыточным битовым затратам.

Следует отметить, что выбранного радиуса первого шага не всегда бывает достаточно при очень быстром движении в кадре (рис. 10). Кроме того, очень часто встречается ситуация, когда несколько соседних блоков имеют близкие векторы перемещения, что приводит к избыточным битовым затратам при их независимом кодировании. Для устранения этих проблем в предложенном алгоритме используется условное контекстное предсказание векторов движения на основе двух уже найденных векторов движения для соседних блоков – верхнего rT и

левого rL (см. рис. 11). По этим векторам вычисляется базовый (прогнозный)

27

 

 

 

 

 

 

 

 

2. Алгоритм видеокомпрессии

вектор

r

= 1

(r

+r )

как

среднее

 

 

 

 

P

2

T

L

 

 

 

 

 

 

арифметическое между ними; от вектора rP

 

rT

 

начинается

работа

алгоритма

направленного

 

 

 

поиска. При этом в выходной поток будет

 

r

 

rL

rP r

 

записываться вектор r'= r rP (здесь r

– вектор

 

движения,

который

получит

декодер

при

Рис. 11. Контекстное кодирование

восстановлении), отсчитанный от этого базового

вектора движения

вектора. Так как декодеру будут известны

 

 

 

векторы-соседи, то он сможет по ним восстановить значение rP , а затем и

исходный вектор по формуле r = r'+rP . Например, если предсказание было сделано

точно, то в выходной поток запишется нулевой вектор, битовые затраты на

кодирование которого незначительны в силу того, что встречается он очень часто.

Однако векторы-соседи не всегда подходят для предсказания базового вектора.

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

то очевидно, что прогноз скорее всего будет некорректным, а значит, контекстное

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

чтобы решить эту проблему, в разработанном алгоритме предлагается критерий

отбора векторов-соседей, которые могут участвовать в вычислении прогнозного

вектора. Значение критерия вычисляется при обработке каждого блока. Вместе с

каждым вектором ri '

в выходной поток выводится значение флага

fi , которое

равно 1 в случае, если этот вектор может участвовать в построении прогноза, и 0 в

противном случае. В критерии учитывается как

искажение

di d ,

вносимое в

восстановленный кадр перемещенным при компенсации движения блоком, так и

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

 

 

 

 

Ji = di +λRi ,

где Ri = −log2νi – битовые затраты на кодирование вектора перемещения, которые вычисляются по вероятности того, как часто он может встретиться в выходном потоке среди других векторов. Значение флага вычисляется следующим образом:

1,

J

i

>ε

i

 

 

 

 

.

fi =

 

 

 

 

 

 

 

 

 

 

0, иначе

 

28

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