Методы сжатия данных
Годовой спецкурс ВМиК МГУ, 2005-2006
     

Задание №6. Универсальный видео кодек

Начало:  17 апреля 2006 года.
Конец:  9 мая 2006 года

Цель задания

Необходимо написать программу, которая умеет сжимать входной видеофайл используя любые алгоритмы.

Описание задания

Введение

Задача - достичь как можно большего соотношения качество / размер.

Ваши кодеки будут проверены на нескольких тестовых видео последовательностях. Все результаты (с фамилиями авторов) будут сведены на двумерные графики - качество/размер выходного видео, где ваши результаты будут в виде параметрических кривых (параметр - параметр Quality у кодека).

Качество будет измеряться по метрике Y-PSNR. Все фильмы будут черно-белыми (т.е. можно брать любую из компонент RGB для сжатия и работать только с ней). Также размер всех фильмов будет кратен 16.

За первое место в любой номинации (после собеседования по алгоритму) - дополнительные баллы вплоть до экзамена автоматом. За второе и третье место - дополнительные баллы.

Если компрессор падает на какой-либо последовательности, то автор получает штрафные баллы.

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

ВНИМАНИЕ! ЭКЗАМЕНА НЕ БУДЕТ! Однако это задание будет оцениваться очень высоко. Легче всего его будет делать тем, кто делал арифметик и контекстное моделирование в первом семестре + компенсацию движения во втором. Однако те, кто не делал могут отличиться, сделав все задание хорошо.

Обязательная часть

Программа должна уметь получать на вход файл и по опции <с> - сжимать его, по опции <d> распаковывать его.

Программа должна быть консольным приложением и запускаться так:

     codec -c test.avi test.cmp -q 100 
test.avi - входной файл, test.cmp - сжатый, 100 - значение параметра качества.

Т.е. тестовый файл test.bat вида:

     codec c file     file.cmp -q 0
     codec d file.cmp file_out.avi
     codec c file     file.cmp -q 20
     codec d file.cmp file_out.avi
     codec c file     file.cmp -q 40
     codec d file.cmp file_out.avi
     codec c file     file.cmp -q 60
     codec d file.cmp file_out.avi
     codec c file     file.cmp -q 80
     codec d file.cmp file_out.avi
     codec c file     file.cmp -q 100
     codec d file.cmp file_out.avi
должен сжимать и разжимать тестовый файл с 6 параметрами качества.

Параметры качества выбираются вами так, чтобы качество было примерно от 25 dB до 45 dB по Y-PSNR. Для упрощения задачи оцениваться будет только Y-PSNR, т.е. на вход будут подаваться только черно-белые фильмы.

Фильмы будут короткие, не более 50 кадров. Т.е. использование не ключевых кадров в середине фильма можно не предусматривать.

Тестирование будет производиться на нескольких фильмах разного характера, в том числе:

  1. Фильме с активным сложным движением
  2. Фильме с плавным движением контрастных обьектов.
  3. Фильме с небольшим движением.

Исходные последовательности могут иметь большой уровень шума.

Чтобы свести к минимуму ваши затраты времени на освоение работы с Avi-файлами и т.п. вам предлагается "болванка" - программа, умеющая:

  • Читать и записывать AVI-файлы
  • Строить скомпенсированный кадр, считать разницу между ним и оригинальным
  • Сохранять полученную информацию в файл и распаковывать её в выходной avi-файл

Что рекомендуется использовать для повышения степени сжатия:

  1. Использовать качественную компенсацию движения. В частности рекомендуется:
    • Использовать полупиксельную точность.
    • Использовать "длинные" вектора движения.
    • Использовать как минимум квадродерево разбиения областей.
  2. Совершенствовать алгоритм сжатия
    • Как минимум - использовать простую межкадровую разницу.
    • Использовать предсказание скомпенсированной разницы по соседям.
    • Использовать DCT и IDCT (брать исходники в сети нельзя).
    Формулы методов можно найти Напомню, что квантование в видео можно делать заметно проще (одинаковые значения), чем квантование изображений.
    Различные методы тюнинговки DCT можно найти на http://www.compression.ru/download/video_dct.html
  3. Использовать хороший алгоритм энтропийного сжатия
    • Самый простой вариант - RLE после квантования
    • Еще более сложные - арифметическое сжатие после квантования
    • И далее - контекстное моделирование и векторов движения.

Требования к программе

Главное требование - сжимать и не падать при этом.

Скорость работы должна быть такова, чтобы у проверяющего хватило терпения проверить вашу работу. :) Т.е. рекомендуется не более 5 минут на прогон (сжатие-распаковка) фильма 320х240 50 кадров.

Язык реализации - С или С++

Программа обязательно должна быть консольной (никакого интерфейса - только командная строка).

За использование чужих исходных текстов или совместное написание - программы всех участников будут сниматься с замеров, и будет выставляться 0 баллов. В качестве альтернативы желающим все-таки получить высокую оценку будет предложено реализовать более сложный алгоритм.

Программа должна устойчиво работать с файлами большого размера. Т.е. если программе на вход дать файл размером 5Мб, то на Pentium4-1700 она должна отработать за 3 минуты, не упасть и корректно распаковать архив.

Внимательно изучите требования к сдаваемым работам на сайте. В частности 0 баллов ставится, если вы забудете исходные тексты.

Оформление работы

ZIP-архив с исходными текстами и исполняемыми файлами, названный по схеме GGG_Z_V_nnnnnnnn.zip (где G - трехзначный номер группы, Z - номер задания, V - номер версии задания, nnnnnnnn - номер студенческого билета) присылайте на

Например, студент 306 группы с номером студенческого билета 05015042, сдающий обновленную (вторую) версию программы по первому заданию, должен прислать архив с именем 306_1_2_05015042.zip.

Также смотрите здесь, какие файлы нам присылать и как их оформить

НЕ ЗАБУДЬТЕ ПОЛОЖИТЬ В АРХИВ файл readme.txt.

Главная | О курсе | Лекции | Библиотека | Задания | Оценки | FAQS
  (с) Лаборатория компьютерной графики, 1997-2005
Дизайн: Алексей Игнатенко