# VagueDenoiser

## Abstrato

autor: Lefungus, Kurosu, Fizick
versão: 0.33.3
download: http://bag.hotmail.ru/vague/vaguedenoiser.dhtml
categoria: Suavizadores Spatial
requisitos:

- YV12 & YUY2 & RGB Colorspace

## O que ele faz

Isto é um Wavelet com base em Denoiser. Basicamente, transforma cada quadro da entrada de vídeo no domínio de wavelet, usando vários de seus filtros. E filtra alguns dos coeficientes obtidos. Faz uma transformação wavelet inversa depois. Devido às propriedades wavelet, deve resultar um bom alisado e ruído reduzido, sem borrar as características do quadro. Esta transformação wavelet pode ser feita em cada superfície do colorspace. Este filtro usa um wavelet do tutorial de Brislawn.

## Exemplos de Uso do filtro VagueDenoiser

(todas as linhas do escrito de avisynth aqui são só exemplos)

### Alguns ajustes Lefungus (comentários sobre percentuais de Qian a vir) como

Para filtrar luz num filme. (medium ->threshold=1-1.5;strong->threshold=2-3)

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

Para filtrar luz num anime. (medium ->threshold=2; strong ->threshold=4)

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

## Sintaxe do filtro VagueDenoiser

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

threshold: flutuante (padrão=0)
Filtro de força. Mais alto, mais filtrado será o clipe. Percentual duro pode usar um valor mais alto que o suave antes do clipe parecer filtrado demais.
Se fixo < 0, então "denoising" (remove ruídos) de luminosidade será desativado
Se fixo = 0, então o percentual é calculado automaticamente (adaptável)

method: -1 a 3 (padrão=3) O método da filtragem que usará.
-1 : Nenhum cálculo de percentual (propósito de depurar)
0 : Cálculo do percentual duro. Todos os valores abaixo do percentual serão zerados.
1 : Cálculo de percentual suave. Todos os valores abaixo do percentual serão zerados. Todos os valores acima serão reduzidos pelo percentual.
2 : Cálculo de percentual pseudo adaptável. Escala a entrada de percentual, dependente dos dados "wavelet" locais (local = nível de decomposição "wavelet"). Este modo está desativado!
3 : O cálculo de percentual Qian. Escala ou anula coeficientes - intermediário entre (mais) suave e cálculo (menor) de percentual duro.

nsteps: (padrão=4)
Número de vezes que o wavelet vai decompor o quadro. Valores altos podem ser mais lentos mas os resultados serão melhores.
Valores sugeridos são 3-6.
O quadro não pode ser decomposto além de um ponto particular (tipicamente, 8 para um quadro 640x480 - como 2^9 = 512 > 480)

chromaT: u m flutuante (padrão=-1)
Valor de percentual fixado pelo filtro Croma. Mais lento, mas dá melhores resultados
Se fixado < 0, então "denoising" de Croma será desativado (modo padrão)
Se fixado = 0, então o percentual é calculado automaticamente (adaptável)

debug: true ou false
Desativa o transformar inverso para exibição direta (mas não normaliza coeficientes).
Também habilita saída para a utilidade Debugview

interlaced: true ou false (padrão=false)
Tenta processar clipe de campos separadamente.

wavelet: um inteiro (padrão=1)
Seleciona o tipo do wavelet:
1 - Cohen-Daubechies-Feauveau 9/7 - popular, provavelmente o melhor
2 - Brislawn 10/10 (aguçado, usado só em todas as versões anteriores, de 0.23 a 0.29)
3 - Villasenor-Belzer-Liao 6/10

Wiener: true ou false (padrão=false)
Ativa dois passos ao WienerChop, modo "denoising" forte com percentual alto (lento).
Primeiro passo é estimação de ruído para transformar com o primeiro wavelet (diferente do selecionado) com colocações selecionadas,
o segundo passo é o ótimo "denoising" de Wiener com segundo wavelet (selecionado).
O segundo wavelet 1 é usado com o primeiro wavelet 3 (estimação),
O segundo wavelet 2 é usado com primeiro wavelet 1 (estimação),
O segundo wavelet 3 é usado com o primeiro wavelet 1 (estimação).

wratio: um flutuante (padrão=0.5)
O valor de desvio normal de ruído para "denoising" Wiener como relação relativa para valor do percentual.

percent: um inteiro de 0 a 100 (padrão=75)
Parcial do "denoising" completo (misturando quadro puro com fonte).

## História e download

- v 0.12 First Release
  - Precision problems corrected, 0 for threshold is now lossless.
- v 0.13
  - Hard thresholding method enabled.
  - Cosmetic changes.
  - Avisynth parameters changed.
- v 0.2
  - Implemented many new wavelet filters, thanks to the wavelet transform coder construction kit. look at http://www.geoffdavis.net/ for more informations.
  - Implemented nsteps parameter, that allow you to use n steps in the selected wavelet tranform.
  - Some nsteps values could produce unvalid results, reducing this value generally solve the problem.
  - Little optimizations from Shodan and Bidoche.
- v 0.22
  - YUY2 colorspace support.
  - Optionnal chroma filtering, (chroma=true/false).
  - Cosmetic changes, code cleaned.
  - Html documentation.
- v 0.23
  - Code cleaned, filters class removed.
  - Better parameters for compilation. Should really works on every cpu now.
  - Removed all filters except Brislawn 10/10, so filter parameter has been removed.(it's like filter=7).
  - A little speed increase (3-5fps on a 640x256 frame with nsteps=6).
- v 0.24
  - Another speed increase, some critical loops unrolled (To infinity and beyond!)
- v 0.241
  - height and width must be mod4, added errors messages if not
  - Cleaned include thanks to Kurosu
- v 0.242
  - Removed restrictions on width/height, fixed bugs
  - Some improvements from Kurosu
- v 0.243
  - Code cleaned
- v 0.25
  - Little speed increase (due to some little profiles and vectorizations)
  - added defaults
  - added a visual.net compiled dll for compatibility purposes. This dll is slower
- v 0.26 (Kurosu)
  - Merged (C++ frenzy) all assembly parts from Kurosu's version into one dll
  - Hence, speed increase
  - Undone previous vectorization optimizations
  - All improvements are available for YV12 only
- v 0.26.1 (Kurosu)
  - Merge from Sh0dan on copy
  - Cleaner and safer management from Bidoche
  - Fixed a crash that may have affected P4 users (Athlons with SSE support weren't affected as 3DNow! code, being the fatest, is always selected).
  - Added debug output and NOOP threshold method (for debug purpose)
- v 0.27.0 (Kurosu)
  - Continued integration and added framework for Haar wavelet (still not functionnal, deactivated)
  - All optimizations proposed by Sh0dan, ARDA and Bidoche
  - Some registers reuse (AMD-64 gonna rock) for some more speed (5%)
  - Added Qian thresholding
- v 0.27.1 (Kurosu)
  - Fixed YUY2 mode
  - Added RGB24 and RGB32 mode
  - The 3 above modes are unlikely to get any speed optimization
- v 0.28.0 (Kurosu)
  - Fixed all modes to properly process what needs to be processed (small speedup)
  - Unrolled float2byte conversion, little speed-up
  - Added interlaced (see option with that name) support to YV12 colorspace
  - Workspace compatible with ICL7. dll isn't compiled in that mode for legal reasons (I don't own ICL)
  - Decteted a major slowdown for MOD64 width. Avoid them, as applying this filter before resizing might be faster in fact (particularly true for widths of 512)
- v 0.28.1 (Kurosu)
  - MOD64 width slowdown is due to something needing a dreadfull rewrite, so no fix
  - Implemented cleaner support of YUY2 and RGB24/32
  - Interlaced mode now works in all mode (processing in interlaced mode is a little bit faster but you loose precision)
- v 0.28.2 (Kurosu)
  - Ported to nasm the assembly parts
- v 0.29 (Kurosu)
  - More nasm
  - More bug fixes
- v 0.30 (Fizick)
  - Added (restored) CDF 9/7 wavelet (C version only) and wavelet selection option
  - Added WienerChop two-pass denoising mode using two different wavelet basises.
  - Replaced boolean "chroma" parameter to float "chromaT" as threshold value for chroma planes
  - Added automatic (adaptive) threshold estimation
  - 3DNow mode of hard thesholding temporary replaced by SSE or C versions.
  - Fixed possible memory leakage bug for non YV12 modes
- v 0.31 (Fizick)
  - Added noise ratio parameter for Wiener pass
  - Fixed interlaced mode. Seems it now work.
  - 3DNow mode of Qian thesholding temporary replaced by SSE or C versions.
- v 0.32 - July 09, 2004 (Released by Fizick, but part of work was done by Kurosu)
  - Added Villasenor-Belzer-Liao 6/10 wavelet (not optimized C version only)
  - Changed estimation wavelets to more optimal pairs for WienerChop mode.
  - 3DNow optimized version of WienerChop and AutoThreshold - thanks to Kurosu.
  - 3DNow mode of hard and Qian thesholding re-enabled after some bugs were fixed by Kurosu and Fizick.
  - Small speed increasing mainly due to copy reverse order(
  - but big slowdown for mod64 width (especially 512!) still exist).
  - SSE float-byte conversion has bug for some width, temporary replaced to C version.
  - Ported to NASM memcopy assembly function (no more non-NASM assembly).
- v 0.32.1 - July 10, 2004 (Fizick)
  - Fixed bug in copy function, introduced in v.0.32
  - Re-enabled SSE optimized float-byte and byte-float conversion after fixing some bugs
- v 0.33 - July 11, 2004 (Fizick)
  - Fixed slowdown for mod64 width by padding (thanks to MfA)
  - Add partial denoising mode (by blending with source)
  - Fixed bug with AutoThreshold for 3DNow.
  - AutoThreshold is now also dependent from "wratio" parameter.
  - Added messages for Debugview utility.
  - Change some parameters default values to more optimal (for me?):
  - thresh=0 (auto), method=3, nsteps=4, wavelet=1, percent=75.
- v 0.33.1 - July 13, 2004 (Fizick)
  - Fixed bug with mod64 width for SSE (by pad increasing from 2 to 4)
- v 0.33.2 - July 17, 2004 (Fizick)
  - Fixed bug with default values.
- v 0.33.3 - July 21, 2004 (Fizick)
  - Fixed bug with YUY2 (introduced in v.0.32.1)

## Créditos

* Todos do Doom9.org para suas deliberações.
* MarcFD por sua documentação html de mpegdec3. Este html é o mesmo mas com conteúdos modificados.
* Lefungus por sua documentação html VagueDenoiser. Este html é o mesmo mas com conteúdos modificados. :)
* Kurosu por sua documentação html VagueDenoiser. Este html é o mesmo mas com conteúdos modificados. :-)
* Geoff Davis, o autor do kit de construção do transformador coder wavelet.
* Lefungus, o criador do VagueDenoiser.
* Kurosu, reorganização e otimizações do código.
* Fizick, algumas desorganizações e desotimizações (?) do código. :-)

## Distribuição do Código

Este é um sofware de distribuição livre sob as condições do GNU-GPL v2

## Contacto

Você pode mandar e-mail a Lefungus para: lefungus (arroba) altern (ponto) org para a maioria das sugestões, relato de bug, pedido de característica, ou o que for.
Os assuntos de Otimização são de Kurosu.
Fizick não é responsável por coisa alguma, mas normalmente se esforça para a perfeição :)
Vá em http://forum.doom9.org para suporte.

`$Date: 2006/03/26 18:11:54 $ Portuguese translation by RoLon`