Компрессия видеоданных с фиксированным средним коэффициентом сжатия Ковалёв Д.С. Новосибирский Государственный Университет Совместная лаборатория НГУ, МФТИ, SWsoft Академгородок, 2005 Научный руководитель: к.ф.-м.н. Кренделев С.Ф.
План Возникновение проекта Возможности кодека Принцип работы Реализация Что дальше? Вопросы
Возникновение проекта (1) В процессе работы над одним из проектов лаборатории потребовалось сохранять большие объемы видеоданных К кодеку предъявлялись следующие требования: Высокая скорость работы Малые искажения при сжатии с потерями Высокий коэффициент сжатия
Возникновение проекта (2) Существующие решения не подходили по следующим причинам: Кодеки MPEG4 (например, DivX, XviD) Вносят сильные искажения Медленно работают Lossless кодеки (например, HuffYUV, CorePNG, MSU Lossless codeс): Недостаточно гибкое управление сжатием с потерями Медленно работают (кроме HuffYUV) Кодеки, которые стоят денег
Возможности кодека Сжатие как с потерями (lossy), так и без (lossless) Поддержка фиксированного коэффициента сжатия Гибкое регулирование качества при сжатии с потерями Высокая скорость работы
Принцип работы Каждый кадр обрабатывается отдельно от других Каждый кадр обрабатывается по одной и той же схеме Преобразование из RGB в YUV Моделирование Квантование Энтропийное кодирование
Преобразование из RGB в YUV В общем виде преобразование выглядит так: Без потерь (lossless) – (R,G,B) можно точно восстановить по (Y,U,V) С потерями (lossy) – точно восстановить невозможно
Моделирование (1) Моделирование – некоторое преобразование входных данных для уменьшения их энтропии Поддерживается несколько простых и эффективных схем моделирования на основе метода предсказания- коррекции Моделирование осуществляется построчно
Моделирование (2) Значение пикселя «?» предсказывается как: predicted = b predicted = (a+b)/2 predicted = (a+c)/2 Кодируется только ошибка предсказания: error = ? - predicted
Квантование Квантование - процесс перевода чисел из диапазона [a, b] в [c, d]. Например, [0, 10] преобразуется в [0, 5] путём (целочисленного) деления на 2. Поддерживается несколько схем квантования: Деление на фиксированную константу Деление на псевдослучайное число из заданного диапазона
Энтропийное кодирование Энтропийное кодирование – сжатие данных согласно их энтропии. Block Каждый блок кодируется отдельно
Фиксированный коэффициент сжатия Коэффициент сжатия поддерживается примерно одинаковым с помощью адаптивного изменения схемы квантования от кадра к кадру RandomQuantizer.SetUp( RequriedRatio ) while( Movie.HasFrames() ) { Frame = Movie.GetNextFrame(); RealRatio = compress( Frame, RandomQuantizer ); if ( RealRatio < RequriedRatio ) RandomQuantizer.Increase(); else if ( RealRatio > RequriedRatio ) RandomQuantizer.Decrease(); }
Реализация(1) Статическая библиотека c набором.h-файлов. Написана на С++ с использованием ассемблерных вставок Используются только стандартные библиотеки (STL) Core API VFW Codec DirectShow Codec Test Studio
Реализация (2)
Что дальше? Реализация и тестирование кодеков: Video For Windows (VFW) DirectShow Ускорение кодека: Реализация критических участков на ассемблере (MMX, SSE, SSE2) Оптимизация некоторых алгоритмов Добавление процедуры префильтрации кадров Повышение качества изображения Повышение коэффициента сжатия Возможно, обработка межкадровой корреляции
Вопросы