# FluxSmooth

## Přehled

autor: Ross Thomas (Sansgrip)
verze: 1.1b
stáhnout: http://bengal.missouri.edu/~kes25c/FluxSmooth-1.1b.zip, http://kvcd.net/sansgrip/avisynth/, http://www.avisynth.org/warpenterprises/
kategorie: Prostorově-časové vyhlazovače
požadavky:

- YV12 & YUY2 Barevné prostředí
- ISSE podpora

## Popis

Jednou ze základních vlastností šumu je, že je nahodilý. Jednou ze základních vlastností pohybu je, že není nahodilý. To je předpoklad práce FluxSmooth, který prověřuje každý pixel a srovnává ho s odpovídajícím pixelem v předchozím a násedujícím snímku. Vyhlazení nastane, pokud hodnota jak předchozího tak následujícího snímku je větší, nebo pokud jsou obě menší, než hodnota v aktuálním snímku.
Nazývám to "fluktuačním" pixelem, a rád bych takový pixel vyhladil zprůměrováním s jeho sousedy. Ve FluxSmoothST se to dělá (ve výchozím stavu) prostorově-časovým způsobem, což je, že pro zprůměrování každého fluktuačního pixelu se bere jeho 8 nejbližších sousedů ze stejného snímku a jeho 2 časové sousedy (z předchozího a následujícího snímku). Pokud hodnota každého pixelu je uvnitř zadané hodnoty, pak je zahrnut do zprůměrování. Pokud ne, není zprůměrován. FluxSmoothT provádí jen časové zprůměrování.
Tento filtr jak se zdá, odstraňuje téměř veškerý šum z málo zašumělých zdrojů (jako DVD) a hodně šumu ze silně zašumělých zdrojů (jako nahrávky z kabelových TV), a zachovává dobré množství detailů.
Pokud vaše CPU podporuje Integer SSE operace (Intel Pentium III a lepší, AMD Athlon a lepší) bude použita optimalizovaná verze algoritmu.
Použití FluxSmoothT místo FluxSmoothST pro pouze časové vyhlazení je mnohem, mnohem rychlejší (o 50% rychlejší na mém systému).

## Použití

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

Parametr | Význam | Výchozí
--- | --- | ---
temporal_threshold | Časové sousední pixely uvnitř této prahové hodnoty od aktuálního pixelu jsou zahrnuty do průměru. Pokud jej nastavíte na -1, nedojde k žádnému časovému vyhlazení. (Nelze nastavit na -1 ve `FluxSmoothT`.) | 7
spatial_threshold | Prostorové sousední pixely uvnitř této prahové hodnoty od aktuálního pixelu jsou zahrnuty do průměru. Pokud jej nastavíte na -1, nedojde k žádnému prostorovému vyhlazení. | 7

## Známé problémy

- Okraje snímku se nezpracovávají.
- První a poslední snímek klipu se nezpracovává.
- Vyvolává chybu access violation při použití ve víceprůchodovém enkódování v CCE. Nejsem schopen tuto chybu vyvolat. Možná se vztahovala k přetékání paměti ve starších verzích spravených od fabrice.

## Na dopracování

- Optimalizace SSE kódu.

## Autor

Ross Thomas <ross at grinfinity.com>

## Historie

- 1.1b Fixed assuming previous and next frame pitches were the same as the current frame pitch.
- 1.1a Yet another "oops" release. Current pixel is once again considered in the averaging code -- I found the lack of it too aggressive, especially during fast motion. Also fixed stupid "3am bug" involving a couple of variables I'd declared static that shouldn't've been. Thanks to krieger2005 for spotting that one, and ARDA for diagnosing it.
- 1.1 Changed the averaging code so that the current pixel is excluded, which produces better noise reduction. Also split the code into two different filters, FluxSmoothT and FluxSmoothST. The former does temporal-only smoothing (equivalent to setting "spatial_threshold=-1" in FluxSmoothST) and is about 50% faster. Removed Avisynth 2.0x version to tidy up the code base. Does anyone actually use it any more? My thanks to fabrice and sh0dan for the 1.01 release during my extended absence :).
- 1.01 Added by sh0dan:
  - Removed leak in AviSynth 2.5 YV12 mode (code by fabrice)
  - Aligned tables and variables.
  - Use AviSynth BitBlt for copying chroma.
  - Don't use streaming store. (movntq)
  All in all an approximate 15% speedup compared to previous version. All changes are marked with "sh0:".
- 1.0 First "stable" release. I think it's been tested enough, but wait for a bunch of bugs to emerge and make me a liar... Fixed a bug that, in conjunction with a bug in the built-in resizers, caused an access violation under certain circumstances. Thanks to sh0dan for spotting that one :). Added "SetCacheHints" and upgraded to "AvisynthPluginInit2" in 2.5 version.
- 0.4 Implemented iSSE-optimized version, which runs roughly double the speed of the C++ version. Some small optimizations to C++ version. Now smooths chroma as well as luma.
- 0.3 Fixed bad bug that caused incorrect smoothing: no more in-place filtering. Changed defaults back to what they were, now that the algorithm works correctly. Spent some time benchmarking and tweaking various pieces of code, so should now be significantly faster.
- 0.2 Fixed non-fatal bug that caused a request for one frame beyond the end of the clip. Changed to in-place filtering so could squeeze a few optimizations here and there. Changed too-high defaults. First Avisynth 2.5/YV12 release.
- 0.1 First release. Alpha code.

`$English Date: 2004/08/13 21:57:25 $`

`Český překlad:23.4.2009`