# VagueDenoiser

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

авторы: Lefungus, Kurosu, Fizick
версия: 0.35.1
скачать: http://bag.hotmail.ru/vague/vaguedenoiser.dhtml
категория: Пространственные сглаживатели
требования:

- YV12 & YUY2 & RGB цветовые пространства

лицензия: GPL

## Введение

Это основанный на вейвлетах (коротких волнах) шумоподавитель.
По существу, он преобразует каждый кадр входного видео в пространство вейвлетов, используя различные вейвлет-фильтры. Затем он применяет некоторую фильтрацию к полученным коэффициентам. Потом он делает обратное вейвлет-преобразование. Благодаря свойствам вейвлетов, это дает хороший сглаженный результат и снижение шума, без размазывания деталей изображения. Данное вейвлет-преобразование может быть сделано для каждой плоскости цветового пространства. Данный фильтр использует вейвлеты из руководства Брислауна (Brislawn).

## Синтаксис фильтра VagueDenoiser:

`VagueDenoiser`(int "threshold", int "method", int "nsteps", float "chromaT", bool "debug", bool "interlaced", int "wavelet", bool "Wiener", float "wratio", integer "percent", clip "auxclip")

#### Параметры:

threshold: число с плавающей точкой (по умолчанию=0)
Сила фильтрации. Чем выше, тем более фильтрованным будет клип. При жестком установлении порогов можно использовать более высокий порог чем при мягком, до того как клип выглядит чрезмерно фильтрованным.
Если установлен <0, то шумопонижение канала яркости будет отменено
Если установлено =0, то порог оценивается автоматически (адаптивно)

method: от -1 до 3 (по умолчанию=3)
Метод фильтрации, который будет использоваться.
-1: Нет установления порогов (для целей отладки)
0: Жесткое установление порогов. Все величины коэффициентов ниже порога будут занулены.
1: Мягкое установление порогов. Все величины ниже порога будут занулены. Все величины выше порога будут снижены на значение порога.
2: адаптивное установление порогов (метод NormalShrink). Масштабирует входной порог в зависимости от локальных вейвлет данных (локальных - на уровне подзоны вейвлет декомпозиции-разложения).
3: Промежуточное установление порогов (по Qian), удавка. Масштабирует или зануляет коэффициенты - промежуточный между (сильнее) мягким и (слабее) жестким методами установления уровней порогов. 4: Всюду гладкая функция сокращения.

nsteps: целое (по умолчанию=4)
Число шагов вейвлет разложения изображения. Более высокие величины могут работать медленнее, но результаты будут лучше.
Предлагаемые величины 3-6.
Изображение не может быть разложено выше определенного предела (типично 8 для кадрa 640x480 - так как 2^9 = 512 > 480)
Максимальная величина зависит от цветовой плоскости и флага чересстрочности.
Если введен 0 или слишком большая величина, то nsteps будет автоматически ограничен максимально допустимой величиной

chromaT: число с плавающей точкой (по умолчанию=-1)
Устанавливает величину порога для фильтрации цвета (цветоразностных каналов).
Это замедляет, но дает лучшие результаты
Если установлено <0, то шумопонижение цвета отменено (по умолчанию)
Если установлено =0, то порог оценивается автоматически (адаптивно)

debug: true (истина) или false (ложь)
Деактивирует обратное преобразование для отображения прямого (но не нормализованные коэффициенты теперь).
Также разрешает вывод для утилиты Debugview

interlaced: true или false (по умолчанию=false)
Пытается обрабатывать поля клипа отдельно.

wavelet: 1 или 2 или 3 (по умолчанию=1)
Выбирает тип вейвлета:
1 - Cohen-Daubechies-Feauveau 9/7 - популярный, вероятно наилучший
2 - Brislawn 10/10 (резкий, использовался как единственный во всех предыдущих версиях от 0.23 до 0.29)
3 - Villasenor-Belzer-Liao 6/10

Wiener: true или false (по умолчанию=false)
Активирует двух этапный режим WienerChop шумоподавления для сильного шумоподавления с высокими порогами (медленный).
Первый этап - оценка шума путем преобразования с первым вейвлетом (отличным от выбранного вейвлета с указанными настройками.
Второй этап - оптимальная фильтрация по Винеру (Wiener) со вторым (выбранным) вейвлетом.
Второй вейвлет 1 используется с первым (оценочным) вейвлетом 3.
Второй вейвлет 2 используется с первым (оценочным) вейвлетом 1.
Второй вейвлет 3 используется с первым (оценочным) вейвлетом 1.

wratio: число с плавающей точкой (по умолчанию=0.5)
Величина стандартного отклонения шума для шумопонижения по Винеру как относительное значение к величине порога.

percent: целое от 0 до 100 (по умолчанию=85)
Частичное или полное шумоподавление (ограниченное сокращение коэффициентов).

auxClip: дополнительный клип для первого прохода в режиме Винера (по умолчанию=нет, клип-источник)
Предварительно фильтрованный клип источник, предпочтительно с временным или пространственоо-временным фильтром (таким как DeGrainMedian) для наилучшего шумопонижения и подавления артефактов.

## Примеры использования фильтра VagueDenoiser

Все строки Avisynth скриптов здесь только примеры.

### Некоторые настройки (когда-то) нравящиеся Lefungus:

Для легкой фильтрации кино (средняя -> threshold=1-1.5; сильная -> threshold=2-3)

    VagueDenoiser(threshold=0.8, method=1, nsteps=6, chromaT=0.8)

Для легкой фильтрации мультфильмов аниме (средняя -> threshold=2; сильная -> threshold=4)

    VagueDenoiser(threshold=1.5, method=1, nsteps=6, chromaT=2.0)

Использование установления порогов Qian предпочтительно как более подобного оптимальному (байесовому).

### Некоторые мощные (но медленные) настройки от Fizick

Для сильной фильтрации (с высоким порогом) шумного чересстрочного аналогового видео. При этом характерно появление артефактов типа "капель", особенно при жестком установлении порога (оптимально использования режима Qian). Это следствие использования метода быстрого прореженного вейвлет преобразования, а также импульсов от "горячих" пикселов. Используем оптимальную фильтрацию по Винеру. То есть сначала делаем оценку мощности сигнала и шума в одном вейвлет базисе. Затем и использум другой вейвлет базис (почти некоррелированный) для собственно фильтрации, то есть уменьшения амплитуд слабых составляющих (с использованием ранее сделанной оценки мощности). Дополнительно уменьшаем влияние "горячих" пикселов, предварительно устраняя их медианным временным фильтром (undot, degrainmedian), и используя результат как дополнительный клип для оценки шума. Данный дополнительный клип может быть весьма агрессивно отфильтрован, так как мы не используем его как входной для VagueDenoiser. (Кстати получили не строго пространственное сглаживание.) Смотри пример (но работает медленно):

    LoadPlugin("vaguedenoiser.dll")
    LoadPlugin("degrainmedian.dll")
    avisource("input.avi")
    aux=DeGrainMedian(mode=0, limity=7, interlaced=true)
    VagueDenoiser(threshold=7, auxclip=aux, interlaced=true, wiener=true)

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

v0.12 - July 4, 2003 Первый релиз (Lefungus)

- скорректирована проблема точности, 0 для порога теперь беспотерьный.

v 0.13

- Метод жесткое установление порогов включен.
- Avisynth параметры изменены.

v 0.2

- Реализованы много новых вейвлет фильтров, благодаря конструктору вейвлет кодировщика,
  смотри http://www.geoffdavis.net/ для дополнительной информации.
- Реализован параметр nsteps, который позволяет Вам использовать n шагов в выбранно вевлет преобразовании.
- Некоторые величины nsteps могут приводить к плохим результатам, уменьшение этой величины обычно решает проблему.
- Небольшая оптимизация от Shodan и Bidoche.

v 0.22

- Поддержка цветового формата YUY2.
- Опциональная фильтрация цветности,(chroma=true/false).
- Косметические изменения, код очищен.
- Html документация.

v 0.23

- Код очищен, удален класс фильтров.
- Лучшие параметры для компиляции. Должно реально работать на любом процессоре теперь.
- Удалены все фильтры исключая Brislawn 10/10, так что параметр filter удален. (Это подобно filter=7).
- Небольщое увеличение скорости (3-5fps на кадре 640x256 с nsteps=6).

V0.24

- Другое увеличение скорости, некоторые критические циклы развернуты (до бесконечности и за пределы!)

V0.241

- высота и ширина должны быть кратны на 4, добавлено сообщение об ошибке если не так
- Очищены include благодаря Kurosu

V0.242

- Удалены ограничения на высоту/ширину, исправлены ошибки
- Некоторые улучшения от Kurosu

V0.243

- Код очищен

V0.25

- Небольшое увеличение скорости (благодаря некоторым профилям и векторизациям)
- добавлены умолчания
- добавлена компилированная с visual.net dll для целей совместимости. Эта dll медленнее

V0.26 (Kurosu)

- Присоедены (C++ безумна) все ассеммблерные части от версии Kurosu в одну dll
- Сдедовательно, увеличение скорости
- Отменены предыдущие оптимизации векторизации
- Все улучшения доступны только для YV12

V0.26.1 (Kurosu)

- Присоединено от Sh0dan по copy
- Более ясное и безопасное управление от Bidoche
- Исправлена авария, которая могла затронуть пользователей P4 (Athlon с поддержкой SSE не были затронуты, так как 3DNow! код, будучи быстрейшим, всегда выбирался).
- Добавлен отладочный вывод и беспороговый (NOOP) метод (для отладки)

V0.27.0 (Kurosu)

- Продолжена интеграция и добавлен каркас для вейвлета Haar (пока не функционален, деактивирован)
- Все оптимизации предложенные Sh0dan, ARDA и Bidoche
- Некоторое повторное использование регистров (AMD-64 идет камень) для немного большей скорости (5%)
- Добавлено установление порогов по Qian

V0.27.1 (Kurosu)

- Исправлен режим YUY2
- Добавлены режимы RGB24 и RGB32
- Вышеупомянутые режимы врядли получат оптимизацию по скорости

V0.28.0 (Kurosu)

- Исправлены все режимы чтобы правильно обрабатывать то что надо обрабатывать (небольшое ускорение)
- Развернуто преобразование float2byte, небольшое ускорение
- Добавлен параметр interlaced (смотри описание параметра) для поддержки чересстрочного YV12 формата
- Рабочее пространство совместимо с Intel ICL7. DLL не компилирована в этом режиме по законным причинам (я не имею ICL)
- Обнаружено большое замедление для ширины кратной 64 (MOD64). Избегайте их, так что применение этого фильтра перед изменением размеров может быть быстрее фактически (в частности справедливо для ширины 512)

V0.28.1 (Kurosu)

- Замедление для ширины кратной 64 - из-за чего-то требующего полного переписывания, та что не исправлено
- Реализован более чистый подход для YUY2 и RGB24/32
- Чересстрочный режим теперь работает во всех режимах (обработка в чересстрочном режиме немного быстрее, но Вы теряете точность)

V0.28.2 (Kurosu)

- Перенесены в nasm ассемблерные части

V0.29 - December 10, 2003 (Kurosu)

- Больше nasm
- Больше исправлений ошибок

V0.30 - 2 Июля 2004 (Fizick)

- Добавлен (восстановлен) вейвлет CDF 9/7 (C версия только) и выбор вейвлета wavelet
- Добавлен WienerChop двух-проходный (двух шаговый) режим, использующий два различных базиса вейвлетов.
- Заменен двоичный параметр chroma на chromaT с плавающей точной как пороговое значение для плоскостей цветности
- Добавлено автоматическое (адаптивное)оценивание порога
- 3DNow режим жесткого порога временно заменен на SSE или C версии.
- Исправлена возможная ошибка утечки памяти для не-YV12 режимов

V0.31 (Fizick)

- Добавлен параметр отношения шума wratio дляr этапа Винера
- Исправлен чересстрочный режим. Кажется он теперь работает.
- 3DNow режим порога Qian временно заменен на SSE или C версии.

V.0.32 - 9 июля 2004 (Выпущена Fizick, но часть работы была сделана Kurosu)

- Добавлен вейвлет Villasenor-Belzer-Liao 6/10 (неоптимизированная C версия только)
- Изменены вейвлеты оценки на более оптимальные пары для режима WienerChop.
- 3DNow оптимизированная версия WienerChop и AutoThreshold - спасибо Kurosu.
- 3DNow режим жесткого и Qian порогов вновь разрешены после устранения ошибок, сделанное Kurosu и Fizick.
- Небольшое увеличение скорости главным образом благодаря обратному порядку копирования
- Но большое замедлении для ширины кратной 64 (особенно 512!) еще существует).
- SSE float-byte преобразование имеет ошибку для некоторой ширины, временно заменено на C версию.
- Перенесены в NASM memcopy ассемблерная функция (нет больше не-NASM ассемблера).

V.0.32.1 - 10 июля 2004 (Fizick)

- Исправлена ошибка в функции копирования, введенная в v.0.32
- Вновь восстановлены SSE оптимизированное float-byte и byte-float cпреобразования после исправления некоторых ошибок

V.0.33 - 11 июля, 2004 (Fizick)

- Исправлено замедление для ширины кратной 64 путем дополнения (padding) (спасибо MfA)
- Добавлен режим частичного подавления шума percent(путем смешивания с исходным)
- Исправлена ошибка с AutoThreshold для 3DNow.
- AutoThreshold теперь также зависит от параметра wratio.
- Добавлены сообщения для утилиты Debugview.
- Изменены значения по умолчанию некоторых параметров на более оптимальные (для меня?): thresh=0 (auto), method=3, nsteps=4, wavelet=1, percent=75.

V.0.33.1 - 13 июля 2004 (Fizick)

- Исправлена ошибка с шириной кратной 64 для SSE (путем увеличения дополнения с 2 до 4)

V.0.33.2 - 17 июля 2004 (Fizick)

- Исправлена ошибка с величинами по умолчанию (спасибо SILICON за доклад).

V.0.33.3 - 21 июля 2004 (Fizick)

- Исправлена ошибка с YUY2 (введенная в v.0.32.1)

V.0.33.4 - 23 августа 2004 (Fizick)

- Исправлена ошибка с отраженными добавленными пикселами (спасибо Eugen65 за доклад).

V.0.33.5 - 28 сентября 2004 (Fizick)

- Исправлена ошибка с AutoThreshold для чересстрочного режима Винера (спасибо Viperzahn и LigH за доклад).

V.0.33.6 - 13 октября 2004 (Fizick)

- Параметр nsteps теперь автоматически ограничен до максимально допустимой величины, если введенная слишком велика или =0 (не беспокойся, Viperzahn :-)
- Некоторое улучшение обработки исключений (try-catch-throw).

V.0.33.7 -17 октября 2004 (Fizick)

- Снижена максимально допустимая величина nstep чтобы исправить некоторую внутреннюю ошибку (или особенность) (спасибо Viperzahn за настойчивый доклад :-)

V.0.34 - 24 ноября 2004 (Fizick)

- Добавлен дополнительный (auxiliary) (некоторый префильтрованный) клип для первого прохода режима Винера.

V.0.34.1 - 19 декабря 2004 (Fizick)

- Некоторое исправление mem_set для совместимости со старыми процессорами (P2).

V.0.34.2 - 11 марта 2005 (Fizick)

- Исправлена маленькая ошибка (синяя точка) для chromaT>=0 в YV12 для Athlon (спасибо Pavico за доклад).
- Добавлен pitch для внутренних буферов.

V.0.34.2.0 - 13 июня 2005 (Fizick)

- Обновлена документация.

V.0.34.3 - 11 Сентября 2005 (Fizick)

- Исправлен алгоритм автоматического определения порога.

V.0.35 - 17 Сентября 2005 (Fizick)

- Улучшил method=1 - больше не фильтрует самый низкий уровень, не меняется среднюю интенсивность картинки.
- Восстановил method=2 многоуровневого позонного адаптивного установления порогов, реализовал как метод NormalShrink;
- Добавил method=4 равномерно гладкой функции сокращения;
- Заменил режим частичного шумопонижения смешением на ограниченное сокращение малых коэффициентов для всех функций установления порогов;
- Изменил значение по умолчанию percent=85;
- Реализовал новые SSE версии для method=0,3,4 и C версии для остальных (3DNow исключена с 4% падением скорости);
- Добавил 3DNow оптимизированную версию для преобразования вайвлетов 1 и 3 (10% скорости).

V.0.35.1 - 26 Сентября 2005 (Fizick)

- Добавил YUY2 и RGB форматы для auxclip.

## Благодарности :

- Всем на Doom9.org за обсуждение.
- MarcFD за его mpegdec3 html документацию. Этот html - тот же самый но с модифицированным содержимым.
- Lefungus за его VagueDenoiser html документацию. Этот html - тот же самый но с модифицированным содержимым. :)
- Kurosu за его VagueDenoiser html документацию. Этот html - тот же самый но с модифицированным содержимым. :-) (но теперь формат уже изменен)
- Geoff Davis, автор конструктора кодера вейвлет преобразования.
- Lefungus, создатель VagueDenoiser.
- Kurosu, реорганизация и оптимизация кода.
- Fizick, некоторая деорганизация и деоптимизация кода. :-)

## Лицензия распространения кода:

Это свободная программа распространяется с соответствии с условиями лицензии GNU-GPL версии 2

## Контакты:

Вы можете направить e-mail Lefungus по: lefungus (at) altern (dot) org для большинства предложений, сообщений об ошибках, запросу особенностей, и прочее.
Web страница Lefungus: http://perso.wanadoo.fr/reservoir/avisynth.html
Вопросы оптимизации есть вопросы Kurosu.
Еще должно быть очевидным, что Вы можете достичь Kurosu здесь: kurosu (at) inforezo (dot) org
Fizick не ответственен ни за что, но обычно стремится к совершенству :-)
Fizick доступен по: bag (at) hotmail (dot) ru,
и его web страница с последними версиями должна быть на: http://bag.hotmail.ru или ее зеркале.

Идите на форум http://forum.doom9.org/showthread.php?s=&threadid=56871 за поддержкой.

`$English Date: 2005/10/05 18:12:43 $
Русский перевод 13.06.2005-05.10.2005 Fizick http://bag.hotmail.ru`