# FluxSmooth

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

Автор: Ross Thomas (Sansgrip)
Версия: 1.1a
Загрузка: http://www.avisynth.org/warpenterprises/
Категория: пространственно-временные сглаживатели
Требования:

- Цветовое пространство YV12 или YUY2
- поддержка набора инструкций ISSE

## Описание

Одно из основных свойств шума – его случайность. Одно из основных свойств движения – “неслучайность”. Эта предпосылка лежит в основе работы фильтра FluxSmooth. Он анализирует каждый пиксел кадра и сравнивает его с соответствующим пикселом предыдущего и следующего кадров. Сглаживание производится, если значения в предыдущем и следующем кадрах одновременно больше либо одновременно меньше, чем в текущем кадре.

Я называю такую ситуацию “флуктуирующим” пикселом и борюсь с такими пикселами, заменяя их на усреднённые по соседним пикселам значения. В фильтре FluxSmoothST это сглаживание (по умолчанию) делается пространственно-временнЫм образом, то есть для флуктуирующего пиксела в усреднение берутся 8 соседних пикселей в том же кадре и два – в предыдущем и следующем кадрах. Если величина пиксела в пределах порога, он включается в усреднение (прим.перев.: имеется в виду разность между рассматриваемым “флуктуирующим” пикселом и данным соседним; если они тем не менее не сильно отличаются, то этот соседний берётся в расчёт при усреднении). FluxSmoothT выполняет только временнОе усреднение.

Этот фильтр успешно убирает практически весь шум из малошумных источников видео (таких как DVD), и значительную часть шума из сильно зашумлённых (типа ТВ трансляций), при этом сохраняя достаточное количество деталей.

Если процессор поддерживает набор инструкций Integer SSE (Intel Pentium III и старше, AMD Athlon и старше), будет использоваться оптимизированная версия алгоритма.

Для чисто временнОй фильтрации используйте FluxSmoothT вместо FluxSmoothST – это гораздо быстрее (на 50% на моей системе).

## Использование

> `FluxSmoothT` (clip, int "temporal_threshold")
> `FluxSmoothST` (clip, int "temporal_threshold", int "spatial_threshold")

Параметр | Описание | Значение по умолчанию
--- | --- | ---
temporal_threshold | Порог для временнЫх соседей (пикселы в пределах этого порога включаются в усреднение). Если задать -1, временное сглаживание не производится. (Нельзя задать -1 в `FluxSmoothT`.) | 7
spatial_threshold | Порог для пространственных соседей (аналогично предыдущему). Задание -1 отключает пространственное сглаживание. | 7

## Особенности

- Края изображения не обрабатываются.

- Первый и последний кадр видеоклипа не обрабатываются.

- Вроде бы вызывает ошибку access violation при многопроходном кодировании в CCE. Мне не удалось воспроизвести ошибку; возможно, она была вызвана утечками памяти в ранних версиях, исправленных fabrice.

## В планах

- Оптимизация кода под SSE.

## Автор

Ross Thomas <ross at grinfinity.com>

## История версий

- 1.1a Ещё одна “опа!”-версия:). Рассматриваемый пиксел вновь включён в усреднение – я решил, что его выбрасывание делает фильтрацию слишком агрессивной, особенно при быстром движении. Также исправлена ошибочное объявление static некоторых переменных (спасибо krieger2005 и ARDA).
- 1.1 Процедура усреднения изменена таким образом, что текущий пиксел не участвует в усреднении, это даёт лучшее шумоподавление. Код разделён на два фильтра – FluxSmoothT и FluxSmoothST. Первый производит чисто пространственное сглаживание, эквивалентное установке `spatial_threshold=-1` в FluxSmoothST, но гораздо быстрее (около 50%). Ликвидирована поддержка версии для Avisynth 2.0x. Кому-нибудь она нужна? Мои благодарности fabrice и sh0dan за версию 1.01, выпущенную во время моего длительного отсутствия:).
- 1.01 Добавлено sh0dan:
  - Устранены утечки памяти в режиме AviSynth 2.5 YV12 (fabrice)
  - Выровнены таблицы и переменные.
  - Используется AviSynth функции BitBlt для копирования цветовых плоскостей.
  - Не исплоьзуется потоковое хранение (movntq)
  Всё вместе даёт ускорение примерно на 15%. Изменения отмечены "sh0:".
- 1.0 Первый стабильный релиз. Я думаю, что тестировали его достаточно, но подождём пары всплывших ошибок и можно называть меня лжецом. Исправлена ошибка, которая вместе с ошибками во встроенных фильтрах масштабирования приводила в некоторых случаях к ошибке access violation. Спасибо sh0dan за ловлю этого глюка.:). Добавлено "SetCacheHints" и обновлено до "AvisynthPluginInit2" версии 2.5.
- 0.4 Реализована оптимизированная под iSSE версия, которая примерно вдвое быстрее. Небольшие оптимизации в обычной версии. Теперь цветовые каналы также сглаживаются.
- 0.3 Исправлена неприятная ошибка, приводящая к некорректному сглаживанию. Вернул на место значения по умолчанию. Оптимизированы некоторые участки кода – должно быть заметно быстрее.
- 0.2 Исправлена несущественная ошибка – запрашивался кадр за концом клипа. Изменил слишком высокие значения по умолчанию. Первый релиз под версию Avisynth 2.5/YV12.
- 0.1 Первая сырая версия.

`$English Date: 2004/08/13 21:57:25 $ Русский перевод 21.07.2005 Eugene Vasiliev (eugvas@mccme.ru)`