[YV12] lub [YUY2] oraz [wspomaganie ISSE]

Convolution3D

Convolution3D(int matrix, int ythresh, int cthresh, int t_ythresh, int t_cthresh, float influence, int debug)

autor: Vlad59
wersja: 1.01 (YUY2)
             beta 4 (YV12)
download: download


matrix: wybór matrycy (domyślnie 0):
0: oryginalna matryca, która przydatna jest przy normalnym filmie (nie animowanym), ponieważ zachowuje większość szczegółów:
1 2 1 2 4 2 1 2 1
2 4 1 4 8 4 2 4 1
1 2 1 2 4 2 1 2 1

1: matryca jedynkowa (świetny pomysł), która bardziej przydatna jest w filmach animowanych lub w słabo jakościowym materiale źródłowym, ponieważ ma mniejszy stopień zamazania (czyli usuwa większość szumu)
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1

ythresh, cthresh, t_ythresh, t_cthresh: progi odszumiania, litera t oznacza czasowe odszumianie, natomiast pozostałe argumenty dotyczą przestrzennego odszumiania (y -> lumy, c -> chromy); domyślnie ythresh=3, cthresh=4, t_ythresh=3, t_cthresh=4

influence: zastosowany w filtrze wpływ czasowy ma za zadanie odrobinę poprawić szybkość filtra i ominąć używanie czasowych informacji kiedy nie są one potrzebne (zmiana sceny, ściemnianie ...). Po pierwsze stworzyłem limit, limit = próg_czasowy_lumy * wpływ_czasowy, czyli dla każdych z dwóch pikseli (z powodu MMX, 2 piksele w tym samym czasie) najpierw sprawdziłem to:

if 
  (Abs (Y0 - Y0[poprzednia klatka]) +
  Abs (Y0 - Y0[następna klatka]) +
  Abs (Y1 - Y1[poprzednia klatka]) +
  Abs (Y1 - Y1[następna klatka])) > limit
  then
    pracuj_przestrzennie (tylko z matrycą 3*3)
else
    pracuj_czasowo-przestrzennie (z matrycą 3*3*3)

jeśli
bezwzględna wartość z wyrażenia Y0 - Y0[poprzednia klatka] dodać bezwzględną wartość z wyrażenia Y0 - Y0[następna klatka] dodać bezwzględną wartość z wyrażenia Y1 - Y1[poprzednia klatka] dodać bezwzględną wartość z wyrażenia Y1 - Y1[następna klatka] jest większe od limit
wtedy
pracuj_przestrzennie z matrycą 3*3
jesli nie
to pracuj_czasowo-przestrzennie z matrycą 3*3*3

Niższe wartości spowodują szybszą pracę filtra, ale spadek kompresowalność, natomiast wyższe wartości spowodują wolniejszą pracę filtra, ale zwiększą kompresowalność filmu. Jeśli influence=-1 to wtedy filtr pracuje tylko przestrzennie (z wysoką prędkość); domyślnie 3

debug: przyjmuje wartości 0 (włącza) i 1(wyłącza), i uruchamia/nie uruchamia wewnętrzny zapis debug; domyślnie debug=0


Convolution3D jest filtrem AviSynth, który będzie stosował convolution 3D na wszystkich pikselach klatki. Przetestowałem Convolution3D z materiałem przechwyconym z TV o bardzo słabej jakości i w tym przypadku możesz zwiększyć wartość parametru cthresh (spowoduje powstanie drobnego efektu duchów, ale ogólna jakość wydaje się być lepsza). Osobiście używam, takich ustawień: Convolution3D(0, 32, 128, 32, 128, 10, 0). 
Progi Convolution3D są tylko po to by wziąć pod uwagę krawędzie i zmiany scen. Możesz zwiększyć jeden parametr przestrzenny (w szczególności próg chromy), ale nie przesadź!
By ominąć tzw. efektu duchów powinieneś ustawić jeden z argumentów czasowych poniżej 10. Powinieneś szczególnie wziąć pod uwagę próg przy korzystaniu z matrycy 1, ponieważ, z tą matrycą, bieżąca klatka ma niższą wartość, więc skutkiem ubocznym będzie tzw. efekt duchów.


Gotowe matryce:

Convolution3D(preset="movieHQ")

#

Movie Hi Quality (dobre źródło DVD) – dobra jakość filmu
tak samo jak: Convolution3D(0, 3, 4, 3, 4, 2.8, 0) 

 

Convolution3D(preset="movieLQ")

#

Movie Low Quality (zaszumione źródło DVD source) – słaba jakość filmu
tak samo jak: Convolution3D(0, 6, 10, 6, 8, 2.8, 0) 

 

Convolution3D(preset="animeHQ")

#

Anime Hi Quality (dobre źródło DVD) – dobra jakość filmu animowanego
tak samo jak: Convolution3D(0, 6, 12, 6, 8, 2.8, 0) 

 

Convolution3D(preset="animeLQ")

#

Anime Low Quality (źródło DVD) - słaba jakość filmu animowanego
tak samo jak: Convolution3D(1, 8, 16, 8, 8, 2.8, 0) 

 

Convolution3D(preset="animeBQ")

#

Anime Bad Quality (???) – bardzo słaba jakość filmu animowanego
tak samo jak: Convolution3D(1, 12, 22, 8, 8, 2.8, 0) 

 

Convolution3D(preset="vhsBQ")

#

VHS capture Bad Quality (kaseta VHS) – materiał przechwycony z kasety VHS, bardzo słaba jakość
tak samo jak: Convolution3D(0, 32, 128, 16, 64, 10, 0)


translated by Slim