Плагин для AviSynth 2.5
Версия 1.1
Copyright (C)2003-2016 Александр Г. Балахнин aka Fizick
http://avisynth.org.ru
Плагин сначала обнаруживает царапины, затем удаляет их.
Он работает с каждым кадром, используя только пространственную информацию текущего кадра.
Я адаптировал его к реставрации моих старых 8 мм кинопленок, возможно он окажется полезным кому-нибудь еще.
Применяем вертикальное смазывание к копии кадра, для подавления тонкой структуры картинки, наклонных линий и шума. Ищем локальные экстремумы интенсивности в каждой строке, с пороговым критерием разности и симметрии для царапин с шириной не более заданного максимума.
Помещаем эти экстремумы на некоторую карту (кадр). Ищем и удаляем экстремумы для ширины царапин менее заданного минимума.
Опционально закрываем вертикальные зазоры в экстремумах на карте путем их вертикального расширения.
Тестируем карту экстремумов с критериями длины и наклона, и так находим настоящие царапины.
Царапины могут быть либо частично прозрачными, плавными (с деталями картинки), либо непрозрачными (без деталей или почти полностью поврежденными).
В первом случае можно вычесть сглаженную часть вариации точек царапины из образа. Следовательно, детали изображения останутся.
Во втором случае плагин заменяет пикселы царапины на среднее из некоторых соседних пикселов в той же строке.
Мы можем также иметь промежуточный случай, установив процент сохранения деталей.
Во всех случаях, могут частично заменяться и некоторые соседние пикселы для плавного перехода.
Программа является плагином (фильтром) для Avisynth 2.5
Тестировалась с версией 2.55 до 2.5.8. Должна работать с 2.6.0
Компилирован с 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, int minwidth, int left, int right)
Все параметры именованные и опциональны.
mindif - минимальное различие яркости царапины от соседних пикселов для канала яркости
(от 1 до 255, по умолчанию 5)
asym - максимальная асимметрия соседних пикселов (от 0 до 255, по умолчанию 10
maxgap - максимальный смыкаемый вертикальный зазор частей царапины (от 0 до 255, по умолчанию 3)
maxwidth - максимальная ширина царапины (нечетная от 1 до 15, по умолчанию =3)
minlen - минимальная длина царапины (по умолчанию 100)
maxlen - максимальная длина царапины (по умолчанию 2048)
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)
( устанавливает отвергнутые экстремумы в серый цвет, а царапины - в белый или черный)
minwidth - минимальная ширина царапины (нечетная от 1 до 15, по умолчанию =1)
left - левая граница обрабатываемого окна (включительно), по умолчанию=0
right - правая граница обрабатываемого окна (не включительно), по умолчанию=ширина кадра или 4096
Параметры maxgap, maxwidth, minwidth, minlen, blurlen, border, left, right измеряются в пикселах.
Вы ДОЛЖНЫ подобрать параметры, подходящие для Вашего видео.
Используйте команды 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).
Верхняя половина кадра - до фильтра, нижняя половина - после фильтра:
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.
Прошу материальной поддержки.
Плагин работает только в цветовой системе YV12.