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")
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
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
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í'.
S 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 = 1To 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
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
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
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
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.
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
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