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.")
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")
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")
v2.56 から、すべてのリサイザに対して(Crop と同様に)オフセット*1を使用することができます:
すなわち、
GaussResize
(clip, int target_width, int target_height, float
"src_left", float "src_top", float -"src_right", float
-"src_top")
すべてのリサイザに関して、リサイズ前にクロップを行う拡張シンタックスを使用することができます。リサイズの前に Crop フィルタを置くのと同じ演算が実行されますが、両者にはわずかにスピードの違いがあります。
エッジの意味がわずかに異なります。Crop はクッキリとした完全な境界線を生じますが、リサイザフィルタのローブ*2は画像の物理的なエッジを超えない範囲でクロップされた領域にまで及ぶかもしれません。
クッキリとした縁や VHS のヘッドのスイッチングノイズを取り除くには、Crop を使用してください。リサイザのクロップを使用すると、ノイズを近傍の出力ピクセルにまで増殖させるおそれがあります。完全な画像の一部分を削る際に正確なエッジのレンダリングを維持するには、リサイザのクロップを使用してください。
Crop(10,10,200,300).BilinearResize(100,150) # 上記のスクリプトは、以下とほぼ同じ BilinearResize(100,150,10,10,200,300)
重要: AviSynth は、完全に独立した垂直と水平のリサイザを備えています。もし 1 つの軸に関して入力が出力と同じなら、リサイザはスキップされます。どちらが最初に呼び出されるかは、どちらが最も小さい縮小率かによって決定されます。これは、最大限の品質を保持するために行われます。これにより、2 番目のリサイザは、処理すべき最高のピクチャを得ます。
BilinearResize
フィルタは、入力ビデオフレームを任意の新しい解像度にリスケール(再拡大/再縮小)します。オプションの source 引数*3を与えると、BilinearResize
の前にそれらの引数を使ってクリップに Crop
を適用した場合と同じ結果になります。
BilinearResize
は、標準的なバイリニアフィルタリング*4を使用しており、VirtualDub の「precise bilinear」リサイズオプションとほぼ同じです。「ほぼ」というのは、単に VirtualDub のフィルタが若干スケーリング係数を間違っているようであり、その結果、画像の上と右のピクセルがクリッピングされるかもしくは複製されるからです(このエラーは 1 つないし 2 つ以上の係数によってフレームサイズを拡大するときに顕著ですが、さもなければ大したことはないため、これについて過度に心配することはないと思います)。
使用例: # ビデオファイルを読み込み、(元のサイズに関係なく) 240x180 にリサイズ AVISource("video.avi").BilinearResize(240,180) # 720x480 (ITU-R BT.601)のビデオを読み込み、正しいアスペクト比を保持したまま、 # 352x240(ビデオ CD)にリサイズ AVISource("dv.avi").BilinearResize(352, 240, 8, 0, 704, 480) # 上に同じ AviSource("dv.avi").BilinearResize(352, 240, 8, 0, -8, -0) # 320x240 のビデオの右上の 1/4 を抽出し、それをズームして # フレーム全体を埋める BilinearResize(320,240,160,0,160,120)
線形フィルタリングの代わりに Mitchell-Netravali の 2 つのパラメータを取るキュービック・フィルタ*5を使用するということを除けば、BicubicResize
*6 は BilinearResize
に似ています。パラメータ b と c は、3 次式のプロパティを調整するために使用することができます。それぞれ、「ぼかし」と「リンギング」*7と呼ばれることがあります。
b = 0 かつ c = 0.75 の場合、このフィルタは VirtualDub の「precise bicubic」とまったく同じで、上述の VirtualDub のスケーリング問題を除けば結果もまったく同じです。デフォルト値は b = 1./3. と c = 1./3. です。これは、人間の主観テストにおいて最も視覚的に満足の行く結果をもたらすものとして Mitchell と Netravali により推奨された値です。b と c をもっと大きな値にすると、興味深いオプアート*8効果を引き起こすことができます -- たとえば b = 0、c = -5 を試してみてください。
もしビデオを拡大するのなら、BilinearResize
よりも BicubicResize
の方がはるかに良い結果が得られます。しかし、もし縮小するのなら、BilinearResize
でもおそらく同程度かむしろ良いくらいでしょう。VirtualDub のバイキュービックフィルタはバイリニアフィルタよりもきれいな画像をつくり出しますが、これはおもにバイキュービックフィルタが画像をシャープにするからであり、サンプリングにおいて優れているからではありません。シャープな画像は見た目はすばらしいですが、それは圧縮を試みるまでのことであり、圧縮した瞬間、それらの画像は急激に扱いにくいものになります。BicubicResize
の初期設定は、VirtualDub のバイキュービックほどシャープにはしませんが、バイリニアよりはシャープにします。もし低いビットレートでビデオをエンコードするつもりなら、BilinearResize
のほうが全体的に優れた最終結果をもたらしたとしてもまったく驚きません。
数値的にもっとも正確なフィルタのためには、b と c が以下の式を満たすように制限してください :-
b + 2 * c = 1これにより、b = 0 のとき、c の最大値 0.5 が与えられます。これは Catmull-Rom スプライン*9 と呼ばれるもので、シャープさを得るにはおすすめです。
c が 0.6 より大きくなると、「リンギング」が出始めます。リアルなシャープさではなく、テレビのシャープネスコントロールのようにくっきりしたものが得られるようになります。b に関しては、負の値は許可されていません。c が 0.5 より大きい場合、b = 0 を使用してください。
BlackmanResize
は、タップ数が大きい場合のリンギングノイズをよりうまくコントロールする LanczosResize
の改造版です。taps 引数に関する説明は LanczosResize
を参照してください(デフォルト: taps=4)。(v2.58 で追加)
GaussResize は、調節可能なシャープ用のパラメータ p (デフォルト 30)を持つガウシアンリサイズフィルタを使用します。p の取る範囲はおよそ 1 から 100 までで、1 は非常にぼやけ、100 はとてもシャープになります。GaussResize
は 4 タップを使用し、Lanczos4Resize
に似た処理速度です(v2.56 で追加)。
LanczosResize
*10 は、かなり強いシャープを生み出す c = 0.6 ~ 0.75 という高い値を指定した場合の BicubicResize
の代替となるフィルタです。通常、優れた品質(少ない人工ノイズ)とシャープな画像を提供します。
Lanczos4Resize
(v2.55 から追加)は、LanczosResize
(正式名称: Lanczos3Resize)と密接に関連しています。リサイズを行うために、後者が 2*3=6 ローブを使用するのに対し、前者は 2*4=8 ローブを使用します。結果として、Lanczos4Resize
の方がよりシャープな画像を生成します。とりわけクリップを拡大するときに役立ちます。
Lanczos4Resize は、LanczosResize(taps=4) の簡略表記です。
注: taps という名前の入力引数は、本当は lobes であるべきです(実際、ローブの半分です)。リサイザについて議論するとき、taps は以下で説明されているように異なる意味を持ちます。
taps=4 と仮定すると、アップサンプリング*12に関しては、すべての平均化が 4 つの入力サンプルにわたって起こるようにフィルタ範囲が大きさで分けられ、これを 4 タップフィルタにします。出力画像がどれだけ大きなものになるのかは問題ではありません - 依然として 4 タップのままです。
ダウンサンプリング(画像の縮小)については、4 つの *目的* サンプル(当然、ソースサンプルよりも広く間隔をあけられる)にわたって起こるように大きさによって分けられます。そのため、2 の倍数でのダウンサンプリング(画像を半分の大きさにする)の場合、このフィルタは 2*4=8 の入力サンプルを対象とします。すなわち、事実上の 8 タップです。さらに 3 倍のダウンサンプリングなら、事実上、3*4=12 タップとなる、といった具合になります。
したがって、ダウンサンプリングに関するタップの有効数は、ダウンサンプリング率 × フィルタ入力タップ数です(要するに、T 倍のダウンサンプリングと LanczoskResize は T*k タップになります)。これは、次の偶数まで切り上げられます。アップサンプリングについては、つねに k タップです。ソース: [avsforum の投稿]。
PointResize
は、最もシンプルなリサイズフィルタです。一般に非常にブロックの目立つ画像をもたらすポイントサンプリング(Point Sampler)またはニアレストネイバー(Nearest Neighbour)*13のアルゴリズムを使用します。そのため、一般的にこのフィルタは、意図的に低品質を狙う場合か、クリアなピクセル描画を必要とする場合にのみ使用すべきです。
詳しく調べるためにピクセルの小さな領域を拡大するのに非常に役立ちます。
3 つのスプライン*14ベースのリサイズフィルタ(v2.56/v2.58 で追加)。Spline の論理的根拠は、LanczosResize
よりも少ないリンギングノイズで、可能な限りシャープであることです。Spline16Resize
は sqrt*15(16)=4 つの標本点を使用し、Spline36Resize
は 6 つ、Spline64Resize
は 8 つの標本点を使用します。標本点が多く使用されるほど、クリップはシャープになります。リサイザ間の比較は、こちらにあります。
今日現在、AviSynth の作者は、Spline リサイザで使用されているような係数がどのようにして導き出されるのかわかりません。もし知っている方がいれば、ご連絡ください。
更新履歴:
v2.55 | Lanczos4Resize を追加 |
v2.56 | Spline16Resize、Spline36Resize、GaussResize を追加。LanczosResize に taps パラメータを追加。xxxResize の Crop 部分にオフセットを追加 |
v2.58 | BlackmanResize、Spline64Resize を追加 |
原文 Date: 2007/04/17 03:29:29
日本語訳 $Date: 2008/06/28 00:58:31 $