Resize のバックアップ差分(No.2)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
[[AviSynthManual]]
''基本的な使用法:''

afaf
#code{{
BicubicResize(clip clip int target_width, int target_height, float b, float c)
}}

#code{{
BilinearResize(clip clip int target_width, int target_height)
}}

#code{{
LanczosResize(clip clip int target_width, int target_height, int taps)
}}

#code{{
Lanczos4Resize(clip clip int target_width, int target_height)
}}

#code{{
PointResize(clip clip, int target_width, int target_height)
}}

#code{{
Spline16Resize(clip clip, int target_width, int target_height)
}}

#code{{
Spline36Resize(clip clip, int target_width, int target_height)
}}

#code{{
GaussResize(clip clip, int target_width, int target_height, float p)
}}

''高度な使用法'':

#code{{
BicubicResize(clip clip, int target_width, int target_height, float b, float c, float src_left, float src_top, float src_width, float src_height)
}}

#code{{
BilinearResize(clip clip, int target_width, int target_height, float src_left, float src_top, float src_width, float src_height)
}}

#code{{
LanczosResize(clip clip, int target_width, int target_height, float src_left, float src_top, float src_width, float src_height, int taps)
}}

#code{{
Lanczos4Resize(clip clip, int target_width, int target_height, float src_left, float src_top, float src_width, float src_height)
}}

#code{{
PointResize(clip clip, int target_width, int target_height, float src_left, float src_top, float src_width, float src_height)
}}

#code{{
Spline16Resize(clip clip, int target_width, int target_height, float src_left, float src_top, float src_width, float src_height)
}}

#code{{
Spline36Resize(clip clip, int target_width, int target_height, float src_left, float src_top, float src_width, float src_height)
}}

#code{{
GaussResize(clip clip, int target_width, int target_height, float src_left, float src_top, float src_width, float src_height, float p)
}}

v2.56から、すべてのリサイズフィルタに対して、([[Crop]] と同様に)オフセットを使用することができます:

#code{{
xxxResize(clip clip, int target_width, int target_height, float src_left, float src_top, float -src_right, float -src_bottom)
}}

すべてのリサイズに対して、リサイズの前にクロップする拡張されたシンタックスを使用することができます。リサイズの前に [[Crop]] を置くと同じ演算が実行されますが、両者にはわずかなスピードの違いがあります。

#code{{
Crop(10, 10, 200, 300).BilinearResize(100, 150)
}}

これは以下と同じです

#code{{
BilinearResize(100, 150, 10, 10, 200, 300)
}}

重要: AviSynth は、完全に独立した垂直と水平のリサイザを持っています。もし 1 つの軸に関して入力が出力と同じなら、リサイザはスキップされるでしょう。どちらが最初に呼び出されるかは、どちらが最も小さい縮小率を持っているかによって決定されます。これは、最大限の品質を保持するために行われます。このため、2 番目のリサイザは、処理するべき、考えられる最良のピクチャを得ます。データの格納方法((訳者註: RGB24/32かYUY2かYV12か。))は、リサイズとクロップをするときのサイズに関して、どの倍数が使われる'''べき'''かに影響を与えるでしょう。[[Crop]] を参照。

''BilinearResize'' フィルタは、入力されたビデオフレームの大きさを任意の新しい解像度に変更します。オプションのソース引数((訳者註: src_left、src_top、src_width、src_heightなどの「src_」始まる引数のこと。))を与えるなら、BilinearResize の前にそれらの引数を使ってクリップに [[Crop]] を適用したのと結果は(より高速であることを除いて)同じです。

BilinearResize は、スタンダードなバイリニア・フィルタリング((訳者註: bilinear。双線形。参考: [[ASCII24 - アスキー デジタル用語辞典 - バイリニアフィルタリング:http://yougo.ascii24.com/gh/81/008181.html]]))を使用し、VirtualDub の "precise bilinear" リサイズ・オプションとほぼ同じです。VirtualDub のフィルタは、画像の上と右の画素が切り捨てられるか複製されるという結果を伴い、わずかにスケーリング・ファクタを間違えているようなので、"ほぼ"というだけです。(このエラーは、1 つか 2 つ以上のファクタによってフレーム・サイズを拡大するときに顕著です。ほかの方法では大したことはありません。このため、私はそれについてあまり心配はしないでしょう。)

'''(どなたか、この発言の起源を知りませんか?その根拠は正しくありません。というのは、スタンダードなマッピングでは、拡大時に境界線周辺の画素を複製するかミラーを設ければならないからです。ソースを見、出力を比較すると、VirtualDub 1.6 と Avisynth 2.5 は、同じマッピングを生成しているように見えます。この矛盾は、すでに解決されているのではないかと思います。Avery)'''

''使用例:''

#code{{
# ビデオファイルを読み込み、(それが前にどんなサイズであっても、そこから)240x180 にリサイズ
AviSource("video.avi").BilinearResize(240,180)
}}

#code{{
# 720x480(CCIR601)のビデオを読み込み、正しいアスペクト比を保持しながら、
# 352x240(VCD)にリサイズ
AviSource("dv.avi").BilinearResize(352, 240, 8, 0, 704, 480)
}}

#code{{
# もしくは、上と同じもの
AviSource("dv.avi").BilinearResize(352, 240, 8, 0, -8, -0)
}}

#code{{
# 320x240 のビデオの右上の 1/4 を抜き取って、それを
# フレーム全体を埋めるようにズームする
BilinearResize(320, 240, 160, 0, 160, 120)
}}

''BicubicResize'' は、線形フィルタリングの代わりに Mitchell-Netravali の 2 つのパラメータを取るキュービック・フィルタ((訳者註: 原文は「Mitchell-Netravali two-part cubic」。同じフィルタを指すために「Mitchell & Netravali's two-param cubic filter」という表現も使われているようです。このため、訳文のように翻訳することにしました。参考: [[Reconstruction filters in computer-graphics:http://portal.acm.org/citation.cfm?id=378514]]))を使用するということ以外は、BilinearResizeに似ています。パラメータ b と c は、キュービックのプロパティを調整するために使うことができます。それぞれ、"ぼかし(blurring)" と "リンギング(ringing)((訳者註: 参考:[[リンギング / プロフェッショナルビデオ用語辞典 / システムファイブ e-PROSHOP:http://www.system5.jp/asp/contents.asp/fnm/dictionary/ri_019]]、[[ASCII24 - アスキー デジタル用語辞典 - リンギング:http://yougo.ascii24.com/gh/26/002698.html]]))" と呼ばれることがあります。

b = 0 かつ c = 0.75 の場合、このフィルタは VirtualDub の "precise bicubic" とまったく同じであり、結果は上で述べた VirtualDub のスケーリング問題を除けば同じです。デフォルトは、Mitchell と Netravali により、人間の主観テストにおいて最も視覚的に満足の行く結果をもたらすものとして推奨された値である、b = 1./3. と c = 1./3 です。b と c をもっと大きな値にすると、興味深いオプ・アート((訳者註: 参考: [[オプ・アート - Wikipedia:http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%97%E3%82%A2%E3%83%BC%E3%83%88]]))の効果を引き起こすことができます -- たとえば、b = 0 と c = -5 を試してみてください。

もしあなたがビデオを拡大しているなら、BilinearResize を用いるよりも BicubicResize を使ったほうが、はるかに良い結果が得られるでしょう。しかし、もし縮小しているのなら、BilinearResize でもたぶん同じくらいか、むしろ良いくらいです。VirtualDub のバイキュービック・フィルタはバイリニア・フィルタよりも見た目の良い画像を画像つくり出しますが、これは主にバイキュービック・フィルタが画像をシャープにするからであり、サンプリングにおいて優れているからではありません。シャープな画像は見た目はすばらしいですが、それはあなたが圧縮を行おうとするまでのことであり、その瞬間、それらの画像はあなたにとって急激に扱いにくいものになります。BicubicResize の初期設定は、VirtualDub のバイキュービックほどシャープにはしませんが、バイリニアよりはまだシャープにします。あなたがもし低いビットレートでビデオをエンコードするつもりなら、BilinearResize のほうがより良質なものをもたらしたとしても、私はまったく驚かないでしょう。

数の上でもっとも正確なフィルタのためには、以下のように設定しなければなりません。

b + 2 * c = 1

これは、b = 0 に対して、c に対する最大値 = 0.5 を与えます。これは、Catmull-Rom スプライン((訳者註: 参考: [[第3章 第5節 Catmull-Romスプライン曲線:http://markun.cs.shinshu-u.ac.jp/learn/cg/cg3/index5.html]]))であり、シャープネスのための良い提案です。

0.6 より大きい値になると、リンギングが始まります。リアルなシャープネスは得られなくなり、得られるものはテレビの画像のようにくっきりしています。

b については、負の値は許可されていません。そのときは、b=0 のままになります。

''LanczosResize'' は、 c = 0.6 〜 0.75 という非常に強いシャープを生み出す高い値を指定したときの BicubicResize の代わりとなるものです。これは、より優れた品質(だが、より少ない人工ノイズ)とシャープな画像を提供します。

Lanczos は、多くのディテールを保持するという理由から、AviSynth のために作り出されました。御存知かもしれませんが、フレームがより多くのディテールを持てばもつほど、それを圧縮するのは困難になります。このことは、Lanczos が低ビットレートのビデオには適さ''ない''ということを意味します。これには、さまざまな設定が可能な Bicubic のほうが向いています。しかし、もし十分なビットレートが確保できるのなら、Lanczos を使ったほうがよい画像をもたらすでしょう。しかし一般的に、1CD に収まるサイズでエンコードする場合には、これを使うのはお薦めしません。なぜなら、その場合のビットレートは、つねに低いからです(もちろん、例外もあります)。

''Lanczos4Resize'' は、''LanczosResize''(正式な名前は、Lanczos3Resize)と密接に関連しています。リサイズを行うために、後者が 2*3=6 というローブを使うのに対し、前者は 2*4=8 というローブを使用します。結果として、''Lanczos4Resize'' の方がよりシャープな画像をつくり出します。とりわけ、クリップを拡大するときに役に立ちます。

'''補間タップ数(tap パラメータ)'''

「アップサンプリング(画像の拡大)の場合、そのフィルタは、平均化全体で 4 つの入力サンプルに出会うように、大きさに従って分けられます。出力画像がどれだけ大きくなろうとも問題ではありません - 4 タップのままです。ダウンサンプリング(画像の縮小)の場合、平均化は大きさに従って分けられ、4 つの *目的* サンプルに出会います。それは、当然、ソースサンプルよりも広い間隔で間をあけられます。そのため、2 の倍数によるダウンサンプリング(画像を半分の大きさにする)に関しては、このフィルタは 2*4=8 の入力サンプル、すなわち 8 タップを対象とします。3 倍のダウンサンプリングなら、3*4=12 タップを必要とする、などなど。

したがって、ダウンサンプリングのために必要なタップ数の総数は、ダウンサンプリング率×ローブの数となります(つまり、''T''倍のダウンサンプリングと Lanczos''k''Resize なら、T*2*k タップになります)。そして実際には、次の偶数まで切り上げる必要があります。アップサンプリングの場合は、つねに 4 タップです。」ソース: [[[avsforum post]:http://www.avsforum.com/avs-vb/showthread.php?s=&postid=4760581#post4760581]]。

Lanczos4Resize は、LanczosResize(taps=4) の省略形です。

''Spline16Resize'' と ''Spline36Resize''

2 つのスプラインベースのリサイズフィルタ。Spline16Resize は、Spline36Resize よりわずかに高速(v2.56 で追加)。

''GaussResize''

調節可能なシャープネス用パラメータの '''p''' (デフォルト 30)を持つ、ガウシアンリサイズフィルタを使用。'''p''' の取る範囲はおよそ 1 から 100 までで、1 は非常にぼやけ、100 はとてもシャープになります。GaussResize の処理速度は、Lanczos4Resize に似ています(v2.56 で追加)。

''PointResize'' は、考えられうる最もシンプルなリサイズフィルタです。それは、Point Sampler、もしくはニアレストネイバー法のアルゴリズムを使用しますが、通常、結果は非常にブロックの目立つ画像になります。そのため、このフィルタは、一般的に、低品質を意図する場合かクリアなピクセルの描画を必要とする場合にのみ使用されます。検査のために小さな領域を拡大するのに役立ちます。

''更新履歴:''

|v2.55|Lanczos4Resize を追加|
|v2.56|Spline16Resize、Spline36Resize、GaussResize を追加。LanczosResize に taps パラメータを追加。xxxResize の Crop 部分にオフセットを追加|

#hr

註: このページは、[[Resize - avisynth.org:http://www.avisynth.org/Resize]] の日本語訳です。