## Bob

`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

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

    bob(0.0, 1.0)

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

b=0.0 かつ c=1.0 の場合のフィルタ係数は、x=1.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 だけなので、結局、タップが正確に同じ距離になりません。詳しくは、こちらの議論を参照してください。

`原文 Date: 2007/03/10 22:35:42`
`日本語訳 $Date: 2008/06/22 07:41:10 $`