Соседние видеокадры в потоке обычно похожи друг на друга
Представляемая к защите дипломная работа называется “Разработка алгоритма компенсации движения для видеокодека реального времени на основе дискретного вейвлет-преобразования”
2.
Целью данной дипломной работы является разработка нового алгоритма компенсации движения для видеокодека. Основные задачи, решение которых требуется для достижения поставленной цели, следующие:
(перечислить)
На защиту выносятся следующие положения:
(перечислить)
3.
Общая схема кодера представлена на рисунке. Его основными составляющими являются:
§ модуль преобразования сигнала из пространства RGB в YUV
§ модуль компенсации движения
§ модуль вычисления уточняющего изображения
§ модуль сжатия уточняющего изображения (алгоритм SPIHT)
§ интервальный статистический кодер
§ декодер сжатых кадров
Алгоритм сжатия поддерживает как ключевые I-кадры, так и предсказанные P-кадры. Алгоритм SPIHT, который используется в кодере, обладает следующими полезными особенностями:
§ Высокая производительность: время сжатия одного кадра составляет порядка 10 миллисекунд
§ На любом этапе декодирования качество отображаемой в этот момент картинки является наилучшим для введенного объема информации
§ Может иметь любой из двух критериев остановки работы: либо по достижении заданного качества сжатия, либо по достижении заданного размера сжатого файла
4.
Соседние видеокадры в потоке обычно похожи друг на друга, то есть, кроме пространственной корреляции значений соседних пикселов в одном кадре, существует еще и временная корреляция.
Простейший способ учесть временную зависимость – попиксельная разность кадров. Это эффективно для неподвижных сцен, но если в кадре есть какое-то движение, то недостатки метода сразу же проявляются, в разностом кадре наблюдаются резкие переходы яркостей и такой кадр плохо подходит для сжатия. Поэтому все современные алгоритмы сжимают не просто попиксельную разность двух соседних кадров, а так называемый скомпенсированный кадр. Для вычисления скомпенсированного кадра необходимо сначала преобразовать один из соседних уже сжатых кадров следующим образом: объекты в кадре должны быть перемещены так, чтобы этот измененный кадр был как можно более близок в некоторой метрике к текущему кодируемому кадру. Разность преобразованного и текущего кадра называется скомпенсированным кадром и подвергается сжатию. Основная сложность состоит в грамотном перемещении объектов.
В описываемом кодере компенсация движения реализована следующим образом: кадр делиться на блоки 8x8 пикселей и ищутся вектора перемещений этих блоков от текущего к предыдущему кадру (в качестве метрики используется среднеквадратичное отклонение по всем пикселям блока). На рисунке 3 такой вектор обозначен как v. Область поиска, естественно, ограничена и составляет порядка нескольких десятков пикселей, иначе время работы кодера было бы неприемлимым. В том случае, когда в видеопоследовательности присутствует резкое движение, из-за малой области поиска может получиться так что вектор перемещения будет найден неверно и это приведёт к резким переходам яркости в разностном кадре. Поэтому, при поиске векторов перемещения блоков, нужно использовать так называемое “предсказание” перемещения блока.
Делается это следующим образом, блоки делятся на 3 слоя, как показано на рисунке 1. Сперва обрабатывается 1й слой. Для каждого блока 1го слоя мы берём векторы перемещения, которые уже были найдены для его соседей (рисунок 2.а) и подвергаем их медианной фильтрации, получившийся вектор мы называем “вектором предсказания” (он отмечен на рисунке 3 как Vpred). Этот вектор показывает “усреднённое” направление перемещения соседних блоков и мы предполагаем, что и текущий блок должен двигаться примерно в этом направлении, поэтому поиск мы ведём не просто от текущего блока, а от текущего блока, сдвинутого на Vpred. Область поиска не меняется, но теперь у нас больше шансов найти правильный блок, т.к мы сдвинулись ближе к той области, в которой его нахождение наиболее вероятно.
На втором и третьем слое поиск ведётся аналогичным образом (рисунки 2.б и 2.в).
Полученные вектора перемещений блоков сжимаются статистическим кодером без потерь, точнее сжимаются не сами вектора, а разница вектора и “предсказания”, она обозначена как v’ на рисунке 3.
В процессе нахождения вектора v’ проводится RD-оптимизация, т. е. минимизация функции Лагранжа (показать). Здесь лямбда — множитель Лагранжа, задающий баланс между качеством сжатия и битовыми затратами. Лямбда является одним из параметров кодера, задающегося пользователем.
5.
Ну а теперь перейдём непосредственно к теме моей работы – разработка и оптимизация алгоритмов компенсации движения.
Как было сказано ранее, для того чтобы найти вектор перемещения, нужно искать похожий блок в некоторой малой области по некоторой метрике, в нашем случае это среднеквадратичное отклонение по пикселям блока, т.е корень из суммы 64 значений, корень не извлекается в целях эффективности. Используемая область — 32x32 пикселя, если искать похожий блок в каждой точке, это займёт слишком много времени, поэтому было предложено использовать один из 3х алгоритмов (рис 1,2,3, 31x31 пиксель – рассказать, не забыть про второй шаг поиска, 4/8 пикселей). Учитывая особенности временной корреляции и предсказание движения, область, близкую к точке старта, стоит рассматривать более тщательно. Более отдалённые области не нуждаются в столь тщательном рассмотрении, однако, если выяснится, что наиболее похожий блок находится в наиболее “разреженной” области, то необходимо проверить и соседние точки.
6.
Далее, были проведены ещё две полезных модификации:
§ Реализована глобальная компенсация движения
§ Реализована глобальная компенсация движения с предсказанием.
Идея глобальной компенсации движения состоит в том чтобы определить “движение камеры”, если таковое присутствует. При перемещений сюжета (особенно быстром) может получиться так что поиск перемещённых блоков будет работать не совсем эффективно, т.к блоки перемещаются на слишком большое расстояние. Если найти вектор перемещение камеры, то можно искать похожие блоки, начиная с этой позиции. В данной работе был реализован следующий алгоритм поиска глобальной компенсации: выбирается 1/16 часть всех блоков кадра так как показано на рисунке 1. Затем производится их медианная фильтрация и результирующий вектор считается за вектор движения камеры, далее он используется в 1м слое трёхслойной схемы для поиска блоков. На последующих слоях он не учитывается, т.к они зависят от 1го слоя, а там он уже учтён.
Глобальная компенсация движения с предсказанием является модификацией обычной глобальной компенсации движения, в которой также учитывается и вектор Vpred, в битовый поток кодируются разности найденных векторов перемещения и вектора Vpred.
7.
Вернёмся к функции Лагранжа и параметру лямбда, задающегося пользователем. Оказывается, параметр лямбда фактически является константой и нет необходимости в его задании пользователем. В работе были проведены эксперименты, некоторые результаты представлены на рисунках, из которых видно, что при лямда = 50-200 (исключение составляет tennis на 0.15bpp) качество сжатия является наилучшим, поэтому было принято решение исключить лямбду как параметр кодера и сделать его константой.
8, 9.