Стабилизация оцифрованной кинопленки

Предпосылки

Устройство используемое мною для оцифровки 35мм кинопленки не дает удовлетворительный результат по стабилизации кадра.

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

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

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

Подготовка секвенции для анализа

Корректировку смещения для каждого кадра будем вычислять по перфорации. Для этого обрабатываемую секвенцию нужно преобразовать в черно-белое изображение, где перфорация будет белым цветом, а черным — сама пленка.

Если динамический диапазон изображения достаточно широкий, а само цифровое изображение проэкспонировано правильно — отделить перфорацию будет не сложно. Должны соблюдаться следующие условия:

  • равномерная освещенность кадрового окна
  • корректное экспонирование изображения (пересвет допускается только в перфорации)

Для получения чб маски используются фильтры:

  1. Black-and-white (черно-белое)
  2. Levels (уровни) — с установкой значения уровня входного черного почти на максимум. Гаммой нужно подобрать наилучшее значение для получения требуемого результата.

После настройки фильтров — рендер изображения в jpg секвенцию (настройка качества jpg — качество 30% достаточно).

Анализ секвенции

Для корректировки позиционирования кадра используется утилита написанная на языке Python с использованием библиотеки opencv (opencv.org).

Алгоритм программы строится на поочередном анализе каждого кадра секвенции. С помощью специальных маркеров размещенных по контуру перфорации определятся вертикальное и горизонтальное смещение кадра. На основе этих данных вычисляется требуемое смещение каждого кадра относительно эталонного (за референс берется первый кадр секвенции).

В результате выполнения обработки создается файл JSX (файл скрипта для Adobe AE) в котором содержаться инструкции для создания ключей Position, они смещают каждый кадр секвенции на нужное количество пикселей.

Далее JSX файл запускается в AE: File -> Scripts -> Run Script File . В результате создаются ключи Position для каждого кадра секвенции.

Результаты

Видео, демонстрирующее работу алгоритма для оцифрованной 8мм кинопленки:

Для оцифрованной 35мм кинопленки: