Bob のバックアップ差分(No.3)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#code{{
Bob (clip, float "b", float "c", float "height")
}}

Bob はクリップを受け取って、Bob 方式によるインターレース解除を行います。Bob 方式では、ライン間を補間することによって、各フィールドをそれ自身がフレームとなるように拡大します。トップフィールドは、ボトムフィールドに比べて、ほんの少し上にずらされます。このため、実際に画像が上下に動いているようには見えないでしょう。しかし静止した場面では、補間によってもう一方のフィールドをあまり正確に再現できないため、「ゆらめく」ように見えるでしょう。

このフィルタは、その肝となる補間作業に BicubicResize を使用します。'''b''' と '''c''' の値は、調整することができます。さらに '''height''' パラメータを使って、垂直解像度を変更することも可能です。

Bob フィルタは、実際にフィールドの物理的な位置を移動させるわけではありません。ただフィールドを元々あった位置に戻すだけです。単に SeparateFields() でフィールドを分離すると、半分の高さのフレームが 2 つ得られます: 分離前のライン 0 は分離後のフレーム 0 の ライン 0 に、分離前のライン 1 は分離後のフレーム 1 のライン 0 になります。したがって、分離前のライン 0 とライン 1 は同じ位置になるのです!Bob は、さらに分離後のフレームを基本的に垂直方向に 2 倍にリサイズしますが、ちょうど元々あった位置に合わる形で、最初のフレームでは偶数ラインに対してオリジナルのラインを使用し、2 番目のフレームでは奇数ラインに対してオリジナルのラインを使用します。もし SeparateFields() の後に各フレームを垂直方向に 2 倍に拡大するなら、フィールドの物理的な位置が移動するため、正しい結果が得られないでしょう。

概要:~
ライン 0o、1o、2o、3o、... がオリジナルのライン、0i、1i、2i、3i、... が補間されたラインであると仮定します。

ソース

|ライン番号|フレーム 0|
|0)|0o|
|1)|1o|
|2)|2o|
|3)|3o|

フィールド分離後

|ライン番号|フレーム 0|フレーム 1|
|0)|0o|1o|
|1)|2o|3o|

縦に 2 倍に拡大

|ライン番号|フレーム 0|フレーム 1|
|0)|0o|1o|
|1)|1i|2i|
|2)|2o|3o|
|3)|3i|4i|

しかし、フィールドの物理的な位置が変化するため、これは間違いです。

一方、Bob はこれを正しく行います

|ライン番号|フレーム 0|フレーム 1|
|0)|0o|0i|
|1)|1i|1o|
|2)|2o|2i|
|3)|3i|3o|

*** オリジナルのフィールドを厳密に保持し、失われたラインを埋めるだけにするには [#we2fdb7f]

#code{{
bob(0.0, 1.0)
}}

Bob(0.0, 1.0) は、RGB と YUY2 に関してはオリジナルのフィールドを保持します。YV12 に関しては輝度は保持しますが、色差は保持しません。

b=0.0 かつ c=1.0 の場合のフィルタ係数は、x1.0/2.0 なら 0、x=0 なら 1 となります。オリジナルのフィールド位置で起こる ±0.25 のシフトのどちらでも、もう一方のフィールドについては、x=0.5/1.5 タップに対して -1/8 5/8 5/8 -1/8 という係数を伴う非常に簡潔なキュービックフィルタになります。

しかしながら、色差平面でのシフトは YV12 の場合は 0.125 だけなので、結局、タップが正確に同じ距離になりません。[[フォーラムにおける議論:http://forum.doom9.org/showthread.php?p=826073#post826073]]

#hr

註: このページは、AviSynth 2.5.7 に同梱されているマニュアル(英語版)の日本語訳です。原文は、AviSynth をインストールしたフォルダ内の Docs/english/corefilters/bob.htm にあります。なお、このページのテキストおよび画像のライセンスは、オリジナルのそれに準じます。