### [yv12][yuy2][rgb32][rgb24]

# BicubicResize / BilinearResize / LanczosResize / PointResize

## BicubicResize(clip, int target_width, int target_height, float "b", float "c"
[, float "src_left", float "src_top", float "src_width", float "src_height"])
BilinearResize(clip, int target_width, int target_height
[, float "src_left", float "src_top", float "src_width", float "src_height"])
LanczosResize(clip, int target_width, int target_height
[, float "src_left", float "src_top", float "src_width", float "src_height"])
PointResize(clip, int target_width, int target_height
[, float "src_left", float "src_top", float "src_width", float "src_height"])

target_width/target_height: określa szerokość/wysokość w klipie wynikowym
b, c: modyfikuje właściwości cubic klipu wynikowego. Wartości nieujemne są zarezorwowane dla b, a c nie może być większa lub równa 0.6. Domyślnie, oba argumenty, przyjmują wartość 1/3
left/top/width/height: przycina klip z lewej strony/u góry/z prawej strony/na dole klipu (przycina od lewej strony - dla left i width - od góry dla top i height)

Filtry te służą do zmiany rozdzielczości w klipie video, tak więc, jeżeli materiał wejściowy i wyjściowy ma tą samą rozdzielczość filtry te mogą zostać pominięte.
Dodatkowe argumenty (te w kwadratowych nawiasach) mają takie same działanie jak filtr Crop, użyty przed filtrem Resize, jednak może być niewielka różnica w prędkości:
Crop(10,10,200,300).BilinearResize(100,150)
ten sam efekt można uzyskać następująco:
BilinearResize(100,150,10,10,200,300)
Filtr, który jest określony jako pierwszym jest zdeterminowany przez ten, który ma mniejszy stosunek ograniczeń. Jest to zrobione po to, by zachować jak najlepszą jakość, tak więc, drugi w kolejności filtr ma do dyspozycji możliwie jak najlepszą jakość obrazu.
Filtr BilinearResize przeskaluje klatki w wejściowym materiale video do przypadkowej nowej rozdzielczości. BilinearResize wykorzystuje standardowe, dwuliniowe filtrowanie i jest prawie identyczny do filtru 'precise bilinear' w VirtualDub'ie. Tylko 'prawie', ponieważ wydaje się, że filtr VirtualDub'a zaczyna skalowanie odrobinę błędnego współczynnika i w rezultacie piksele w klipie na górze albo po prawej stronie są przycinane lub powielane (błąd ten można zauważyć kiedy rozszerzy się rozmiar klatki, ale jest on nieznaczny i większość użytkowników po prostu tego nie wychwyci, więc nie jest to powód to zmartwień).
BicubicResize jest podobny do BilinearResize tylko, że zamiast filtrowania liniowego używa dwu częściowej cubic Mitchell-Netravali.
Argumenty b i c mogą być użyte do modyfikacji właściwości cubic. Czasami występują błędy takie jak rozmazywanie obrazu czy powstawanie tzw. pierścieni.
Przy ustawieniu b=0 i c=0.75 filtr pracuje właściwie tak samo jak 'precise bicubic' w VirtualDub'ie i rezultaty są identyczne oprócz problemu VirtualDub'a ze skalowaniem. Domyślnie argumenty b i c przyjmują wartość 1/3, która jest wartością sugerowaną przez Mitchell’a i Netravali’ego jako przynosząca najlepsze efekty wizualne w subiektywnym testowaniu (natomiast Catmull-Rom sugeruje takie wartości: b = 0 i c = 0.5). Wyższe wartości dla b i c mogą wytworzyć interesujący efekt op-art – dla przykładu można spróbować: b = 0 i c = -5.
Jeśli rozdzielczość klipu ma zostać powiększona to znacznie lepsze rezultaty otrzyma się z filtrem BicubicResize niż BilinearResize. Jednakże, jeśli rozdzielczość klipu ma zostać pomniejszona, prawdopodobnie, lepszy rezultat uzyska się przy pomocy filtra BilinearResize. Chociaż filtr 'bicubic' w VirtualDub'ie pomniejsza klip lepiej to i tak daje gorszy efekt. Filtr VirtualDub'a wyostrza obraz i dlatego wydaje się, że lepiej pomniejsza klip, nie ma wcale lepszego próbkowania. Wyostrzony obraz jest miły dla oka przy podglądzie, jednak po kompresji nie jest już tak klarownie. BicubicResize domyślnie nie wyostrza tak bardzo jak 'bicubic' w VirtualDub'ie, ale mimo to wyostrza bardziej niż 'bilinear'. Jeśli planowana jest kompresja video z niskim bitrate słusznym wyborem będzie skorzystanie z filtra BilinearResize.
Dla c>0.6 uzyska się niepożądany efekt tzw. pierścieni. Natomiast argument b powinien przyjmować wartości nieujemne. Jeżeli wyostrzanie nie zostanie określone to wyjściowe video może być zbliżone do jakości telewizyjnej.
LanczosResize jest alternatywnym rozwiązaniem dla filtra BicubicResize z większymi wartościami dla c (około 0.6-0.75), które powodują całkiem silne wyostrzenie. Filtr ten zazwyczaj wytwarza najlepszą jakość (najmniej artefaktów) i lepszą ostrość obrazu.
PointResize jest najprostszym z możliwych filtrów zmieniających rozdzielczość. Używa algorytmu Point Sampler (punktowego próbkowania) lub Nearest Neighbour (najbliżej sąsiada), który zazwyczaj wytwarza video bardzo blocky (blokowe?!). Więc generalnie filtru tego nie powinno się używać w normalnych kompresjach, chyba, że zamierza się uzyskać gorszą jakość obrazu. Filtr ten jest bardziej przydatny do powiększania małych obszarów, by potem go przeanalizować.

Przykłady:

AVISource("video.avi") BilinearResize(240,180) | # | wczytuje plik video i zmienia jego rozdzielczość na 240x180 (nie ma znaczenia jaka rozdzielczość była wcześniej)
AVISource("dv.avi") BilinearResize(352,240,8,0,704,480) | # | wczytuje klip o rozdzielczości 720x480 (CCIR601) i zmienia jego rozdzielczość na 352x240 (VCD), zachowuje poprawny aspekt
BilinearResize(320,240,160,0,160,120) | # | wyciąga bardziej poprawny quadrant of a 320x240 video i powiększa go wypełniając całą klatkę

### translated by Slim