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

Задание №5. Алгоритм шумоподавления видео

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

Скачать job-файл для VirtualDub(6Kb). Инструкции по использованию смотри в тексте задания

Цель задания

Необходимо написать фильтр к VirtualDub, который умеет, получая на вход параметр степени подавления шумов, подавлять обычный шум и шумовые артефакты используя bi-directional motion compensation и рассказанные на лекции алгоритмы (Guassian denoising, медианная фильтрация, фильтрация с учетом яркости артефактов, фильтрация с учетом качества компенсации) и ваши собственные идеи.

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

Замер будет проводиться в двух номинациях (в этот раз обе обязательны):

  • (обязательная) "Помоги DivX". Фильм будет прогоняться через ваш фильтр несколько раз с разными параметрами шумоподавления, а потом результат будет замерен по качеству-степени сжатия на двух битрейтах с помощью DivX 4.12 в quality-based режиме.
  • (обязательная) "Чистка пленки". Фильм будет прогоняться через ваш фильтр с максимальным значением параметра подавления. Ваш фильтр имеет право в этом случае изменять алгоритм под наилучшее подавление дефектов черно-белого видео с пленки.

Результат будет первой части задания будет оцениваться в 2 координатах - PSNR/степень сжатия, задача достичь как можно лучшего их соотношения (т.е. ваша линия на графике должна пройти выше - в качестве примера оценки по 2 параметрами смотрите результаты проверки фрактального сжатия).

Мерой качества будет служить PSNR для распакованного видео по сравнению с ИСХОДНЫМ (а не с прошедшим денойзинг!) видео. Ориентироваться следует на YUV-PSNR и Y-PSNR в выложенной программе метрики. (Надо в YUV-PSNR выложенной программы несколько переделать вычисления, сделав их более корректными - считать логарифм после суммирования изменения по компонентам. Если изменения в метрике будут сделаны до окончания задания - измерения будут в новой YUV-PSNR, иначе - в Y-PSNR.)

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

Для сравнения будет использован кодек DivX 4.12. Именно он, поскольку его легко найти (например на компактах с фильмами :), и в нем еще нет хорошей префильтрации видео.

Результат второй части будет проверяться так: параметр шумоподавления будет выставлен в максимальное значение (при этом вы имеете право немного по-другому заточить алгоритм), несколько "военных" роликов будут собраны в единый фильм и этот фильм будет прогнан через фильтр.

По "датчику случайных чисел" - единицам секунд и минут отправления ваших писем в порядке их прихода на проверку будут выбраны кадры фильма, идущие на проверку. (Например, из первого десятка кадров - из единиц минут первого письма, из второго десятка кадров - из единиц секунд второго письма, из третьего - из десятков минут второго и т.д.)

Пару кадров я оставляю право добавить "от себя" (с сильным движением и сменой сцены, если на них ничего не попадет случайно).

Далее полученные в итоге кадры оцениваются по такой шкале: 3 балла - хорошее шумоподавление, 2 балла - нормальное шумоподавление, 1 балл - слабое шумоподавление, 0 баллов - серьезные артефакты (кадр попорчен).

В ролике будут простые кадры, которые фактически делает хорошо (на 3 балла) уже выложенная болванка (вам главное - ничего не испортить :), но будут также и сложные кадры, которые может испортить и навороченный алгоритм. Так что будьте аккуратны при написании!

Также помните, что прогон фильтров с разными параметрами будет осуществляться автоматически, поэтому рекомендуется в начале работы (до изменений в болванке) создать JOB-файл для такого прогона и далее следить, чтобы он оставался работоспособным. Если работа с job будет попорчена - проверка работы не гарантируется!!!

Вот пример job-файла, обрабатывающего фильм c:\video1.avi фильтром "denoise_YOUR_NAME" шесть раз с различной степенью подавления шума (параметр strength равен 0, 20, 40, 60, 80 и 100) и записывающего обработанные фильмы в файлы c:\video1_000.avi, c:\video1_020.avi и так далее. job-файл предсталяет собой обычный текстовый файл, так что вы можете в текстовом редакторе глобальной заменой изменить пути к файлам и название фильтра на более подходящие. Файл с job'ами нужно поместить в папку с virtualdub.exe.

Тестовый фильм для первой части вы можете взять из предыдущего задания, "военный фильм" можно скачать отсюда или отсюда. Также рекомендуется использовать свои собственные фильмы. Например, вы можете взять любой свой фильм и обработать его фильтрами http://compression.ru/video/noise_generation/ (для первой части задания) и http://compression.ru/video/old_cinema/ (для второй части задания). Соль добавлять по вкусу.

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

  1. Искать моушн-вектора методом полного перебора в обоих направлениях (выдавая результат со смещением во времени в один кадр).
  2. Показывать скомпенсированное видео в обе стороны, межкадровую разницу и результат шумоподавления.
  3. Подавлять шумы медианным алгоритмом с задаваемым порогом.

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

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

В отличие от прошлой болванки - можно менять любой код (только работу с Jobs не попортите, а то проверка не будет гарантироваться). В частности - если у вас в прошлом задании неплохой результат - рекомендуется заменить полный перебор своим алгоритмом - это существенно ускорит вашу работу с фильтром.

Также фильтр ОБЯЗАТЕЛЬНО должен быть подписан так, чтобы ваша фамилия показывалась в списке фильтров (см. строку "PUT YOUR NAME HERE" в коде). Это заметно уменьшит шанс, что вас с кем-то перепутают. :)

И еще - код болванки позволить использовать ее с механизмом JOB-ов, т.е. делать прогоны в автоматическом режиме. Необходимо, чтобы ваш фильтр позволял также работать с теми же JOB файлами. Это делается, чтобы существенно сократить время проверки.

Фильтр-"болванка" работает с VirtualDub, соответственно у вас не будет проблем с чтением любых стандартных AVI файлов, записью скомпенсированных файлов и т.п.

Настоятельно рекомендуется использовать следующие возможности VD для отладки:

  1. Выбрать какой-то кадр с характерным движением в тестовой последовательности, и сохранять его обработанный вид (Ctrl-2) в отдельный слой изображения в PhotoShop (Ctrl-N - создать изображение в первый раз - если кадр был в буффере, новое изображение будет его размера, Ctrl-Ins - вставить слой). Переключение между слоями поможет вам лучше понимать, что происходит в алгоритме при вносимых изменениях. Рекомендуется подписывать слои (правая кнопка - rename), чтобы не забыть, чтож вы такого делали, что у вас так хорошо получалось вчера в середине работы.
  2. Также для отладки первой части рекомендуется сохранять логи качества работы фильтра при его изменении, а потом визуализировать их в Excel или MathCad. При этом, если у вас какой-то кадр или какой-то фильм резко просядет при изменении алгоритма - вы это сразу увидите. И дальше уже сможете предметно с ним разобраться, бага это или фича. :) (Такой подход в разы быстрее просмотра "глазами", особенно когда основные баги будут вычищены и уже пойдет "отладка и заточка").

За первое место (после собеседования по алгоритму) - большие дополнительные баллы.

За второе и третье место - дополнительные баллы.

Для улучшения результата в своем алгоритме рекомендуется использовать следующие методы:

  1. Учет качества приближения области в окрестности данного пиксела.
  2. Использование варианта размывания с гауссовским ядром в зависимости от дисперсии области.
  3. Модифицированную медианную фильтрацию - взвешанное значение пикселов, с уменьшением веса наиболее удаленного значения.
  4. Использование значения SAD конкретного блока для определения его веса (отбрасывание заведомо плохо пойманного движения).
  5. Использование минимального значения SAD кадра (при анализе за несколько кадров) для оценки уровня шума фильма и уровня движения в кадре (вплоть до определения смены сцены).
  6. Для второй части: использование крайних по яркости значений областей для отбрасывания их при фильтрации как мусор.

Также настоятельно рекомендует увеличить размер блока (вплоть до 7х7, например), по которому будет определяться, что данная область плохо приближена при компенсации.

Общий рекомендуемый порядок действий такой - реализуйте простое размытие от дисперсии и модифицируйте медианную фильтрацию. Добейтесь, чтобы у вас появилось улучшение по сравнению с DivX. Далее внесите проверку на плохую компенсацию и проверьте результат на сильном движении. Далее проверьте результат на военном фильме и поправьте заведомо неудачные области кадра.

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

ВНИМАНИЕ! Баллов, набираемых на экзамене (письменном) по курсу будет недостаточно для положительной оценки. Т.е. необходимо выполнить УСПЕШНО хотя бы одно задание.

Литература

  1. Подборка статей по подавлению шума:
    http://library.graphicon.ru:8080/catalog/278.
    Если вы найдете еще хорошие статьи - пожалуйста сообщайте, мы их добавим!!! Присылать ссылки можно на адрес задания!
  2. Описание можно найти в материалах семинара.
  3. VirtualDub доступен на: http://www.virtualdub.org/
  4. Программа для измерения PSNR доступна в библиотеке: исполняемый файл и исходный код

Требования к фильтру

Главное требование - выполнить обязательную часть задания.

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

Программа должна быть написана с использованием тестового примера.

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

Программа должна устойчиво работать с фильмами с размерами, кратными 16.

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

Фильтр должен называться denoising_YOUR_SURNAME.vdf для того, чтобы можно было тестировать несколько фильтров одновременно. В названии фильтра обязательно должна быть указана ваша фамилия и номер группы.

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

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

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

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

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

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