BicubicResize / BilinearResize / BlackmanResize / GaussResize / LanczosResize / Lanczos4Resize / PointResize / SincResize / Spline16Resize / Spline36Resize / Spline64Resize

BicubicResize (clip, int target_width, int target_height, float "b=1./3.", float "c=1./3.", 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")
BlackmanResize (clip, int target_width, int target_height, float "src_left", float "src_top", float "src_width", float "src_height", int "taps=4")
GaussResize (clip, int target_width, int target_height, float "src_left", float "src_top", float "src_width", float "src_height", float "p=30.0")
LanczosResize (clip, int target_width, int target_height, float "src_left", float "src_top", float "src_width", float "src_height", int "taps=3")
Lanczos4Resize (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")
SincResize (clip, int target_width, int target_height, float "src_left", float "src_top", float "src_width", float "src_height", int "taps=4")
Spline16Resize (clip, int target_width, int target_height, float "src_left", float "src_top", float "src_width", float "src_height")
Spline36Resize (clip, int target_width, int target_height, float "src_left", float "src_top", float "src_width", float "src_height")
Spline64Resize (clip, int target_width, int target_height, float "src_left", float "src_top", float "src_width", float "src_height")

Obecné informace

Od  v2.56 můžete použít posuny (jako v Crop) pro všechny změny velikosti:
t.j.
GaussResize (clip, int target_width, int target_height, float "src_left", float "src_top", float -"src_right", float -"src_top")

Pro všechny změny velikosti můžete použít rozšířenou syntaxi, která provede ořezání před změnou velikosti. Jsou pak provedeny stejné operace jako když vložíte před Resize filtr Crop, jen může být zaznamenán malý rozdíl v rychlosti.

Všimněte si, že obrysy jsou mírně odlišné, Crop dává tvrdé absolutní hranice, okraje (laloky) filtru Resize lze rozšířit do oříznuté oblasti, ale ne za fyzickou hranici obrazu.

Pro odstranění jakýchkoliv tvrdých okrajů nebo pruhů od VHS hlav použijte  Crop, použití ořezání ve filtru Resize může rozšířit šum z pruhů do přilehlých výstupních pixelů. Použijte ořezaní ve filtru Resize pro zachování přesného rendrování obrysů, když vyřezáváte část úplného obrazu.

Crop(10,10,200,300).BilinearResize(100,150)

# což je téměř to samé jako
BilinearResize(100,150,10,10,200,300)

Důležité: AviSynth má zcela oddělenou vertikální a horizontální změnu velikosti. Pokud je vstup stejný jako výstup v jedné ose, pak bude změna velikosti přeskočena. Která změna bude jako první, se určuje podle toho která má nejmenší poměr zmenšení. To je za účelem zachování maximální kvality, tak má v pořadí druhá změna velikosti nejlepší možný zdroj obrazu. Uložení obrazu bude mít dopad na to jaký operand, který "by měl" být použit pro rozměry při změně velikosti a ořezávání, viz. Crop

BilinearResize

Filtr  BilinearResize mění rozměr vstupního video snímku na libovolné nové rozlišení. Když doplníte volitelné argumenty  source , je výsledek stejný jako kdyby jste na klip použili Crop s těmito argumenty před filtr BilinearResize.

BilinearResize používá standardní bilineární filtrování a je téměř identický s s filtrem "precise bilinear" ve VirtualDubu. Pouze "téměř" protože filtr ve VirtualDubu jak se zdá má faktor změny velikosti mírně chybný, a to tak, že pixely vpravo a nahoře jsou buď oříznuty nebo duplikovány. (Tato chyba je pozorovatelná až při dvojnásobném nebo větším zvětšní obrazu, ale jinak je nevýznamná, takže bych se toho zase moc nebál.)

Příklady:
# Načte video soubor a změní velikost snímku na 240x180 (z jakéhokoliv předchozího rozměru)
AVISource("video.avi").BilinearResize(240,180)

#Načte video s rozlišením 720x480 (CCIR601) a změní jeho rozlišení na 352x240 (VCD),
# zachová přitom správný poměr stran
AVISource("dv.avi").BilinearResize(352, 240, 8, 0, 704, 480)

# nebo, což je to samé
AviSource("dv.avi").BilinearResize(352, 240, 8, 0, -8, -0)

# Vyřízne pravý horní kvadrant 320x240 z videa a změní jeho velikost
# aby jím vyplnil celý snímek
BilinearResize(320,240,160,0,160,120)

BicubicResize

BicubicResize je podobný jako BilinearResize, kromě toho, že místo lineární filtrační funkce používá Mitchell-Netravaliho dvouparametrický kubický filtr. Parametry b a c mohou být použity pro úpravu kubických vlastností, někdy se jim přiřazují termíny 'blurring-rozmazání' a nebo  'ringing-oscilace, zvonění'.

b = 0 a c = 0.75 je filtr přesně stejný jako filtr ve VirtualDubu "precise bicubic," a výsledky jsou identické kromě už výše zmíněného problému ve VirtualDubu. Výchozí hodnoty jsou b = 1./3. a c = 1./3., což jsou hodnoty doporučené Mitchellem a Netravalim protože podle subjektivních testů poskytují nejpříjemnější dojem lidskému vnímání. Větší hodnoty  b a c mohou vytvářet zajímavé pop-art efekty -- například zkuste  b = 0 a c = -5.

Pokud zvětšujete vaše video, získáte na pohled mnohem lepší výsledky s BicubicResize než s  BilinearResize. Ale pokud ho zmenšujete, může být výsledek BilinearResize stejně dobrý nebo dokonce lepší. Ačkoliv bikubický filtr ve VirtualDubu vytváří na pohled lepší obraz než jeho bilineární filtr, je to hlavně proto, že bikubický filtr zostřuje obraz, ne proto, že lépe vzorkuje. Ostrý obraz je pěkný na pohled -- dokud se ho nesnažíte zkomprimovat, protože pak se rychle stanou protivnými. Výchozí BicubicResize nezostřuje až tolik jako ve VirtualDub, ale stále zostřuje více než bilineární. Pokud plánujete kódovat vaše video nízkým datovým tokem (bitrate), nedivil bych se kdyby BilinearResize vedl k lepšímu konečnému výsledku.

Pro největší výpočetní přesnost filtru zadávejte b a c tak aby odpovídaly tomuto vztahu :-

  b + 2 * c = 1
To dává maximální hodnotu pro c = 0.5 při b = 0. To je Catmull-Rom-ův splajn. Což je dobrý návrh pro zostření.

Od c > 0.6 začíná filtr "ring- oscilovat, zvonit". To není opravdová ostrost, ale zvýraznění obrysů (crispening) což by jste získali např. při nastavování ostrosti v TV. Záporné hodnoty nejsou povoleny pro b, použijte b = 0 pro hodnoty c > 0.5.

BlackmanResize

BlackmanResize  je modifikací LanczosResize , která má lepší kontrolu zvonících (ringing) artefaktů pro vysoký počet vývodů (taps). Viz. LanczosResize  vysvětlení argumentu taps (výchozí: taps=4 1<=taps<=100). (přidáno ve  v2.58)

GaussResize

GaussResize používá gaussovu změnu velikosti s nastavitelným parametrem p (výchozí je 30). p má rozsah od 1 do 100,  kde 1 znamená velmi rozmazaný a 100 velmi ostrý. GaussResize používá 4 vývody a má podobnou rychlost  jako Lanczos4Resize. (přidán v  v2.56)

LanczosResize / Lanczos4Resize

LanczosResize je alternativou k BicubicResize s vysokými hodnotami c okolo 0.6 ... 0.75 což vytváří poměrně silné zostření. Obvykle nabízí lepší kvalitu (méně artefaktů) a ostrý obraz.

Lanczos byl vytvořen pro AviSynth protože uchovává hodně detailů, dokonce více než BicubicResize(x,y,0,0.75). Jak možná víte, čím více detailů snímek má, tím obtížněji se komprimuje. To znamená, že Lanczos NENÍ vhodný pro vide s nízkým datovým tokem, různé druhy Bicubic jsou pro to mnohem lepší. Nicméně pokud máte dostatečný bitrate, pak vám použití Lanczos dá lepší obraz, ale obecně ho nedoporučuji pro ripy na 1 CD protože bitrate je u nich obvykle příliš nízký (samozřejmě existují výjimky).

Vstupní parametr taps (výchozí 3, 1<=taps<=100) je roven počtu lobes (ignorování zrcadlení kolem originálu).

Lanczos4Resize (přidaný ve v2.55) je zkratkou pro LanczosResize(taps=4). Vytváří ostřejší obraz než LanczosResize s výchozím taps=3, obzvlášť užitečný je při zvětšování snímků klipu.

Upozornění: vstupní argument nazvaný taps by měly být opravdu dílky-laloky (lobes). Když diskutukeme resizery (měniče velikosti), taps má jiný význam, jak je popsáno níže (první paragraf se týká LanczosResize(taps=2)):

"Pro nadvzorkování (zvětšování obrazu), je rozpětí filtru je dáno tak, že celá rovnice zahrnuje (falls across) 4 vstupní vzorky, což z něj dělá filtr se 4 vývody - opěrnými místy (4-tap filter). Nezáleží na tom jak velký bude výstupní obraz - má stále 4 vývody.

Pro podvzorkování (zmenšení obrazu), je rovnice dána rozměry tak, že zahrnuje (fall across) 4 *cílové (destination)* vzorky, které jsou přirozeně umístěny v širších intervalech než zdrojové vzorky. Takže pro podvzorkování se součinitelem 2 (vytváří poloviční obraz), filtr pokrývá 2*4= 8 vstupních vzorků, a proto tomu odpovídá 8 vývodů. Pro 3x podvzorkování, potřebujete 3*4= 12 vývodů, atd.

Tedy celkový počet vývodů (taps), které dostanete pro podvzorkování je poměr podvzorkování  krát počet vstupních vývodů filtru (proto Tx podvzorkování a LanczoskResize vede k počtu vývodů  T*2*k), toto se zaokrouhlí nahoru k nejbližšímu sudému celému číslu. Pro nadvzorkování, je to právě  2*k vývodů". Zdroj: [avsforum post].

PointResize

PointResize je nejjednodušší možná změna velikosti. Používá Point Sampler (Bodový vzorkovač) nebo algoritmus Nearest Neighbour (Nejbližší soused), což obvykle vede k velmi kostkatému obrazu. Proto by měl být obecně použit jen, když chcete podřadnou kvalitu, nebo potřebujete čistě pixelové kresby.
Je velmi užitečný pro zvětšování malých oblastí pixelů při podrobné analýze.

Spline16Resize/Spline36Resize/Spline64Resize

Tři filtry pro změnu velikosti založené na splajnech  (Přidány ve v2.56/v2.58).

Spline16Resize, Spline36Resize a Spline64Resize jsou tři Spline resizery. Jsou to (kubické) splajnové resizery z Panorama tools , které pokládají spline přes body vzorků a pak odvozuje jádro filtru z výsledného smíchání polynomů. Viz. toto vlákno pro podrobnosti.

Smyslem Spline je být co možná nejostřejší při méně zvonících artefaktech než vytváří  LanczosResize . Spline16Resize používá odmocninu sqrt(16)= 4 vzorkových bodů, Spline36Resize používá 6 vzorkových bodů, atd ... Čím více vzorkových bodů je použito, tím bude váš klip ostřejší. Srovnání mezi některými resizery je zde.

SincResize

SincResize je přidán ve v2.6 a používá zkrácenou (truncated) sinc funkci jako resizer. Viz. LanczosResize pro vysvětlení argumentu taps (výchozí: taps=4; 1<=taps<=20).

Seznam změn:

v2.55 přidán Lanczos4Resize
v2.56 přidány Spline16Resize, Spline36Resize, GaussResize a parametr taps v LanczosResize; přidána posunutí v části Crop filtrů xxxResize
v2.58 přidány BlackmanResize, Spline64Resize
v2.6 přidán SincResize

$English Date: 2009/07/12 12:49:34 $

Český překlad:20.9.2009