VagueDenoiser
Přehled
autor: Lefungus, Kurosu, Fizick
verze: 0.35.1
stáhnout: http://avisynth.org.ru,
http://avisynth.org/warpenterprises/
kategorie: Prostorové vyhlazovače
požadavky:
- YV12 & YUY2 & RGB barevné prostředí
licence: GPL
Úvod
Toto vlnový (Wavelet) odšumovač.
V zásadě převádí každý snímek ze vstupního videa do
vlnové oblasti, použitím různých vlnových (wavelet) filtrů. Pak aplikuje nějaké
filtrování k získaným koeficientům. Potom provede inverzi vlnového
převodu. Kvůli vlnovým vlastnostem, by měl dávat pěkný hladký
výsledek, a snížit šum, bez rozmazání rysů obrazu.
Tento vlnový převod může být udělán na každé ploše barevného prostředí.
Tento filtr používá vlny (wavelets) z Brislawnova tutorialu.
Syntaxe filtru VagueDenoiser
VagueDenoiser
(clip, int "threshold", int "method", int "nsteps", float "chromaT", bool "debug",
bool "interlaced", int "wavelet", bool "Wiener", float "wratio", integer "percent", clip "auxclip")
Parametry:
threshold: desetinný (float) (výchozí=0)
Síla filtrování. Čím vyšší, tím více bude klip filtrovaný.
Při tvrdém nastavení se může použít vyšší prahová hodnota než při měkkém nastavení
dokud klip nevypadá přefiltrovaný.
Při nastavení < 0 bude vypnuto odstraňování šumu na jasové složce
Pokud je nastaveno = 0, tak je prahová hodnota odhadnuta automaticky (adaptivně)
method: -1 až 4 (výchozí=3)
Filtrační metoda, kterou filtr použije.
-1 : Bez stanovení prahových hodnot (ladící účely)
0 : Tvrdé stanovení prahových hodnot. Všechny hodnoty pod prahovou hodnotou budou vynulovány.
1 : Měkké stanovení prahových hodnot. Všechny hodnoty pod prahovou hodnotou budou vynulovány. Všechny hodnoty nad, budou sníženy o prahovou hodnotu.
2 : Adaptivní stanovení prahových hodnot (metoda NormalSrink). Násobí vstupní prahovou hodnotu podle lokálních vlnových dat (lokální = úrovně podpásma vlnové úrovně).
3 : Qianovo (garrotovo) stanovení prahových hodnot. Násobí nebo nuluje koeficienty - střední mezi (více) měkkým a (méně) tvrdým stanovením prahových hodnot.
4 : Jednotně hladká smršťující funkce.
nsteps: celočíselný (výchozí=4)
Počet kroků v kolika vlny rozloží obraz. Vysoké hodnoty mohou být pomalejší, ale výsledky budou lepší.
Navrhované hodnoty jsou 3-6.
Obraz nelze rozkládat za určitou mez (typicky 8 pro snímek 640x480 - protože 2^9 = 512 > 480)
chromaT: desetinný (float) (výchozí=-1)
Nastavuje prahovou hodnotu filtrování barevnosti (chroma). Je to pomalejší, ale dává lepší výsledky.
Pokud je nastaven < 0, tak bude odšumění barevnosti vypnuto (výchozí režim)
Pokud je nastaveno = 0, tak je prahová hodnota odhadnuta automaticky (adaptivně)
debug: true nebo false
Deaktivuje inverzní převod pro přímé zobrazení (ale nenormalizuje nyní koeficienty).
Také zapíná výstup pro utilitu Debugview
interlaced: true nebo false (výchozí=false)
Snaží se zpracovat pole klipu jednotlivě.
wavelet: celočíselný 1, 2 a nebo 3 (výchozí=1)
Vybírá typ vln (wavelet):
1 - Cohen-Daubechies-Feauveau 9/7 - populární, pravděpodobně nejlepší
2 - Brislawn 10/10 (ostrý, používal se jako jediný ve všech předchozích verzích od 0.23 do 0.29)
3 - Villasenor-Belzer-Liao 6/10
Wiener: true nebo false (výchozí=false)
Aktivuje WienerChop dvouprůchodový režim odšumění pro silné odšumění s vysokou prahovou hodnotou (pomalý).
V prvním průchodu se dělá odhad šumu převodem s první vlnou (jiná než vybraná vlna) s vybranými nataveními,
druhý průchod je optimální Wienerovo odšumění druhou (vybranou) vlnou.
Druhá vlna 1 je použita s první (odhadovací) vlnou 3,
Druhá vlna 2 je použita s první (odhadovací) vlnou 1,
Druhá vlna 3 je použita s první (odhadovací) vlnou 1.
wratio: desetinný (float) (výchozí=0.5)
Hodnota standardní odchylky šumu pro Wienerovo odšumění jako relativní poměr k hodnotě prahové hodnoty.
percent: celočíselný od 0 do 100 (výchozí=85)
Částečné nebo plné odšumění (omezené zmenšení koeficientů).
auxclip: pomocný klip pro první průchod Wienerova režimu (výchozí=není, zdroj)
Předfiltrovaný zdrojový klip, nejlépe s
časovým nebo prostorově-časovým filtrem (jako DeGrainMedian) pro nejlepší
odšumění a potlačení artefaktů.
Příklady použití filtru VagueDenoiser
(všechny řádky avisynth skriptů zde jsou jen příklady)
Některá oblíbená (kdysi) nastavení Lefunguse
Pro mírné filtrování obyčejného videa. (střední->threshold=1-1.5; silné->threshold=2-3)
VagueDenoiser(threshold=0.8, method=1, nsteps=6, chromaT=0.8)
Pro mírné filtrování animovaného videa. (střední->threshold=2; silné->threshold=4)
VagueDenoiser(threshold=1.5, method=1, nsteps=6, chromaT=2.0)
Quianovo stanovení prahových hodnot je upřednostněnou metodou, protože je podobnější optimálnímu (Bayesian).
Některá silná (ale pomalá) nastavení od Fizick
Pro silné filtrování (s vysokou prahovou hodnotou) zašumělého prokládaného analogového videa.
V tomto případě je charakteristické objevování artefaktů "kapek" ,
obzvláště pro tvrdé stanovení prahových hodnot (Quianův režim je optimální). To je
důsledek použití rychlého decimovaného vlnového převodu, a také pulsování "horkých"
pixelů. Použijte optimální Wienerův filtr. Nejdříve proveďte odhad výkonu signálu
a šumu v jednom vlnovém základu. Pak
použijte jiný vlnový základ (téměř nekorelovaný) pro filtrování, t.j.
slabé snížení hodnoty (použitím předchozího odhadu). Dodatečně snižte vliv
"horkých pixelů" mediánovým
časovým předfiltrováním (undot, degrainmedian),
a použijte výsledek jako pomocný klip pro odhad šumu.
Tento pomocný klip lze silně filtrovat protože ho
nepoužíváte jako vstup pro Vaguedenoiser.
(Ostatně, teď nezískáte přísně prostorové vyhlazení).
Viz příklad (pomalý):
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)
Historie a stažení
- 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
- 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)
- 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 exists.
- 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)
- V.0.33.4 - August 23, 2004 (Fizick)
- Fixed bug with mirrored padded pixels (thanks to Eugen65 for report).
- V.0.33.5 - September 28, 2004 (Fizick)
- Fixed bug with AutoThreshold for Interlaced Wiener mode (thanks to Viperzahn and LigH for report).
- V.0.33.6 - October 13, 2004 (Fizick)
- Nsteps parameter now is auto-limited to max admissible value if input too big or =0 (don't worry, Viperzahn :-)
- Some improving of exception handling (try-catch-throw).
- V.0.33.7 - October 17, 2004 (Fizick)
- Decreased max admissible value of nsteps to fix some internal bug (or feature)
(thanks to Viperzahn for insistent report :-)
- V.0.34 - November 24, 2004 (Fizick)
- Added auxiliary (some prefiltered) clip for first pass of Wiener mode.
- V.0.34.1 - December 19, 2004 (Fizick)
- Some fix for mem_set compatibility with old CPU (P2).
- V.0.34.2 - March 11, 2005 (Fizick)
- Fixed small bug (blue dot) for chromaT>=0 in YV12 for Athlon (Thanks to Pavico for report).
- Added pitch for internal buffers.
- V.0.34.2.0 - June 13, 2005 (Fizick)
- V.0.34.3 - September 11, 2005 (Fizick)
- Fixed AutoThreshold algorithm.
- V.0.35 - September 17, 2005 (Fizick)
- Improving soft method=1 - do not filter lowest level anymore, mean picture intensity is not changed now .
- Re-enabled method=2 of multilevel subband adaptive thresholding, implemented as NormalShrink method;
- Added method=4 uniformly smooth shrinking function;
- Replaced partial denoising blend mode by limited shrinking of small coefficients for all thresholding functions;
- Changed default percent=85;
- Implemented new SSE versions for method=0,3,4 and C versions for rest (3DNow disabled with 4% speed decreasing);
- Added 3DNow optimized versions for transform of wavelet 1 and 3 (10% speed).
- V.0.35.1 - September 26, 2005 (Fizick)
- Added YUY2 and RGB format for auxclip
Poděkování
* Všem na Doom9.org za jejich rady.
* MarcFD za jeho mpegdec3 html dokumentaci. Tento html soubor je stejný, ale s upraveným obsahem.
* Lefungusovi za jeho VagueDenoiser html dokumentaci. Tento html soubor je stejný, ale s upraveným obsahem. :)
* Kurosu za jeho VagueDenoiser html dokumentaci. Tento html soubor je stejný, ale s upraveným obsahem. :-) (ale nyní částečně přeformátovaný)
* Geoffu Davisovi, autorovi konstrukčního nástroje kodéru vlnového (wavelet) převodu.
* Lefungusovi, tvůrci VagueDenoiser.
* Kurosu, reorganizce a optimalizace kódu.
* Fizick, nějaká deorganizace a deoptimalizace kódu. :-)
Distribuce kódu
Toto je svobodný software šířený za podmínek GNU-GPL v2 .
Kontakt
Můžete napsat e-mail Lefungusovi: lefungus (at) altern (dot) org s většinou návrhů, hlášením chyb, požadavkům na funkce, a další.
Lefungusova webová stránka: http://perso.wanadoo.fr/reservoir/avisynth.html
Otázky optimalizace jsou pro Kurosu.
Ještě by jste měli vědět, že najdete Kurosu zde: kurosu (at) inforezo (dot) org
Fizick není za nic odpovědný, ale obvykle se snaží o dokonalost :)
Fizick je k přístupný na: bag (at) hotmail (dot) ru,
a jeho webová stránka s pozdějšími verzemi musí být na: http://avisynth.org.ru nebo jeho zrcadle.
Pro podporu jděte na fórum http://forum.doom9.org/showthread.php?s=&threadid=56871.
$English Date: 2005/10/05 18:12:43 $
Český překlad:22.3.2009