BicubicResize / BilinearResize / LanczosResize / PointResize

BicubicResize(clip, int target_width, int target_height, float "b", float "c")
BilinearResize(clip, int target_width, int target_height)
LanczosResize(clip, int target_width, int target_height)
PointResize(clip, int target_width, int target_height)

Bei allen dieses Filtern zum Grössenändern kann eine erweiterte Syntax verwendet werden, die vor dem Verkleinern bzw. Vergrössern das Bild abschneidet. Die gleiche Operation wird durch ein Crop vor dem Resize erreicht.

Crop(10,10,200,300).BilinearResize(100,150)
  ist das gleiche wie
BilinearResize(100,150,10,10,200,300)

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")

Wichtig:: AviSynth hat (intern) völlig getrennte vertikale und horizontale Filter zur Grössenänderung. Wenn in einer Richtung keine Änderung notwendig ist, wird dieser Teil übersprungen.
Es wird zuerst die Richtung mit dem kleineren Verhältnis bearbeitet, damit die bestmögliche Qualität erhalten wird und das Filter für die zweite Richtung ein möglichst gutes Eingangsbild bekommt.


BilinearResize verwendet ein Standard-Bilinear-Filter, der fast identisch mit dem VirtualDub-Filter "precise bilinear" ist. Nur "fast" deshalb, da VirtualDub hier einen winzigen Skalierungsfehler macht, bei dem die oberste und unterste Zeile abgeschnitten oder verdoppelt werden, was aber nur bei bei einer Vergrösserung um 2 oder mehr auffällt.

Beispiele:
# eine Video-Datei laden und die Grösse auf 240x180 ändern (egal wie gross sie vorher war)
AVISource("video.avi").BilinearResize(240,180)

# ein 720x480 (CCIR601)-Video laden und die Grösse auf 352x240 (VCD-NTSC) ändern,
# wobei das korrekte Seitenverhältnis beibehalten wird
AVISource("dv.avi").BilinearResize(352,240,8,0,704,480)

# das rechte obere Filter eine 320x240-Videos rausschneiden und
# auf den ganzen Frame vergrössern
BilinearResize(320,240,160,0,160,120)


BicubicResize ist ähnlich wie BilinearResize, es wird aber eine zweifach kubische Mitchell-Netravali-Filter-Funktion eingesetzt..
Mit den Parametern b und c kann die Eigenschaft dieser Funktion eingestellt werden, die Parameter werden auch manchmal als "blurring" (verwischen) und "ringing" (Ringe zeichnen) bezeichnet.

Mit b = 0 und c = 0.75 ist das Filter genau gleich wie das VirtualDub-Filter "precise bicubic" (bis auf das genannte Skalierungsproblem). Der Standardwert ist b = 1/3 und c = 1/3, das sind die von Mitchell und Netravali empfohlenen Werte, die das subjektiv schönste Bild ergeben. Mit grösseren Werten von b und c können interessante Effekte entstehen, z.B. mit b = 0 und c = -5.

Beim Vergrössern eines Videos erhält man mit BicubicResize wesentlich bessere Ergebniss als mit BilinearResize. Beim Verkleinern kann BilinearResize gleich gut oder sogar besser sein. Ein bikubisches Filter erzeugt Bilder, die schöner aussehen, allerdings deswegen, da eine leichte Schärfung stattfindet und nicht wegen einer exakteren Abtastung. Scharfe Bilder schauen gut aus, solange man sie nicht komprimiert, dann können sie leicht hässlich werden. Besonders beim Encoden mit niedriger (knapper) Bitrate gibt BilinearResize meist bessere Ergebnisse..

Man muss
b + 2 * c = 1
setzen um ein numerisch genaues Filter zu erhalten.
Daher kann für b = 0 ein maximales c = 0.5 verwendet werden, das ist dann ein Catmull-Rom-Spline und ein guter Wert für maximale Schärfe.

Mit Werten c>0.6 fängt das Filter an, Ring-Artefakte zu produzieren. Es entsteht hier keine echte Schärfe mehr.
Für b dürfen keine negativen Werte verwendet werden.


LanczosResize ist eine Alternative für BicubicResize mit hohen Werten von c von 0.6 ... 0.75 und erzeugt relativ starke Schärfung.
Es bietet eine höhere Qualität (weniger Artefakte) und gleichzeitig ein scharfes Bild.


PointResize ist die denkbar einfachste Methode, die einen Punkt-Sampler oder einen nächster-Nachbar-Algorithmus verwendet, was ein sehr geblocktes Bild erzeugt. Dieses Filter sollte daher nur verwendet werden, wenn man absichtlich eine "schlechte" Bildqualität erzeugen möchte oder klare Pixel-Zeichnungen möchte.
Weiters kann es auch zum testweisen Vergrössern verwendet werden.