DeScratch

Общая информация

автор: Александр Г. Балахнин aka Fizick
версия: 0.9.0.0
закачка: http://avisynth.org.ru/
категория: Плагины для телепередач (не знаю, почему его так классифицировали :-)
требования: YV12 цветовое пространство

Назначение

Плагин удаляет вертикальные царапины с кинофильмов. Также он может удалять горизонтальные линии помех типа выпадения сигнала при аналоговом захвате с VHS (после поворота изображения).

Как он работает

Плагин сначала обнаруживает царапины, затем удаляет их.
Он работает с каждым кадром, используя только пространственную информацию текущего кадра.
Я адаптировал его к реставрации моих старых 8 мм кинопленок, возможно он окажется полезным кому-нибудь еще.

Обнаружение царапин

Применяем вертикальное смазывание к копии кадра, для подавления тонкой структуры картинки, наклонных линий и шума. Ищем локальные экстремумы интенсивности в каждой строке, с пороговым критерием разности,и симметрии.
Помещаем эти экстремумы на некоторую карту (кадр).
Опционально закрываем вертикальные зазоры в экстремумах на карте путем их вертикального расширения.
Тестируем карту экстремумов с критериями длины и наклона, и так находим настоящие царапины.

Удаление царапин

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

Необходимые программы

Программа является плагином (фильтром) для Avisynth 2.5
Тестировалась с версией 2.55 (некоторые версии имеют ошибку с поворотом Turnleft()!).
Новые версии с 0.3 не нуждаются в Avisynth C Interface (avithynth_c.dll).
Компилирован с MS VC++ Toolkit 2003.

Синтаксис вызова

DeScratch(int mindif, int asym, int maxgap, int maxwidth, int minlen, int maxlen, int maxangle, int blurlen, int keep, int border, int modeY, int modeU, int modeV, int mindifUV, bool mark)

Все параметры именованные и опциональны.

Параметры плагина:

mindif - минимальное различие яркости царапины от соседних пикселов для канала яркости
    (от 1 до 255, по умолчанию 5)
asym - максимальная асимметрия соседних пикселов (от 0 до 255, по умолчанию 10
maxgap - максимальный смыкаемый вертикальный зазор частей царапины (от 0 до 255, по умолчанию 3)
maxwidth - максимальная ширина царапины (1 или 3, по умолчанию =3)
minlen - минимальная длина царапины (по умолчанию 100)
maxlen - максимальная длина царапины (по умолчанию 1000)
maxangle - максимальный угол к вертикали (в градусах, по умолчанию=5)
blurlen - радиус вертикального смазывания для анализа кадра (по умолчанию = 15)
keep - процент удерживаемых деталей царапины (по умолчанию = 100)
border - толщина бордюра вокруг царапины для частичной реставрации (по умолчанию=2)
modeY - режим обработки канала яркости (0 - нет, 1 - низкие(черные), 2 - высокие(белые), 3 - оба, по умолчанию=1)
modeU - режим обработки цветового канала U (0 - нет, 1 - низкие(зеленые), 2 - высокие(красные), 3 - оба, по умолчанию=0)
modeV - режим обработки цветового канала V (0 - нет, 1 - низкие(желтые), 2 - высокие(голубые), 3 - оба, по умолчанию=0)
mindifUV - минимальная различие яркости царапины от соседних пикселов для каналов цветности
    (от 0 до 255, по умолчанию 0):
    если =0, то внутреннее значение mindifUV> равно mindif.
mark - помечать ли царапины в режиме отладки (true или false, по умолчанию =false)
    ( устанавливает отвергнутые экстремумы в серый цвет, а царапины - в белый или черный)

Параметры maxgap, maxwidth, minlen, blurlen, border измеряются в пикселах.

Вы ДОЛЖНЫ подобрать параметры, подходящие для Вашего видео.
Используйте команды AviSynth Greyscale(), UtoY(), VtoY(), и параметр mark для отладки и настройки.

Примеры

Старая 8 мм кинопленка. Верхняя половина кадра - до фильтра, нижняя половина - после фильтра.

Пример скрипта (использованный для показанного примера) :

AviSource("input.avi")
LoadPlugin("descratch.dll")
ConvertToYV12()
DeScratch(mindif=2)

Удаление помех в виде горизонтальных линий

Такие длинные тонкие горизонтальные линии иногда проявляюся в захваченном с аналоговых источников материале (пропуск линий ТВ-тюнером или видеомагнитофоном VHS и т.д). Эта проблема обсуждалась на Doom9, смотри статью Removal of clicks and scratches (July 10-31, 2004). Но в статье первоначально использовался плагин DeSpot, который не очень подходит для этой задачи, из-за очень слабого уровня помехи. DeScratch мог бы быть более эффективен, однако и он не идеален тоже (старые версии обрабатывали только яркостную составляющую). Конечно, вы должны повернуть кадр для обработки Descratch (и не забыть повернуть его обратно после очистки :-).

Посмотрите на результаты для одной из VHS записей (от Ivo).
Верхняя половина кадра - до фильтра, нижняя половина - после фильтра:

Использованный для VHS пример скрипта:

LoadPlugin("descratch.dll")
AviSource("drop-outs_.avi")
ConvertToYV12()
Crop(0,0,-0,288) # выберем верхнюю часть кадра чтобы сохранить экранное место
input=last
AssumeTFF()      # просто для порядка
SeparateFields() # для аналогового чересстрочного видео
TurnLeft()       # повернем кадр на 90 градусов налево (против часовой)
DeScratch(mindif=4, maxgap=20, minlen=300, blurlen=50, keep=100, border=0, maxangle=0)
TurnRight()      # повернем обратно, на 90 градусов направо (по часовой)
Weave()          # восстановим поля
StackVertical(input, last) # Сравним кадр источника и кадр после удаления царапин

Использованы оптимальные значения параметров - большая длина minlen, нулевой угол maxangle.

Для удаления цветных помеховых линий, вы можете использовать режимы modeU, modeV и mindifUV.

Дополнительная информация

Обсуждение плагина - на форуме doom9, ветка http://forum.doom9.org/showthread.php?s=&threadid=67794

Лицензия

Данная программа распространяется свободно, под лицензией GNU GPL v2.

История версий и загрузка:

Ограничения текущей версии:

Максимальная ширина царапины фиксирована 1 или 3.
Плагин работает только в цветовой системе YV12.

$English Date: 2006/12/15 19:29:25 $
Русский текст 17.09.2006 Fizick http://bag.hotmail.ru