niiyan's blog

niiyanの個人ブログ。

iFilterとiFilterTの違い

iFilterTのTは、Temporal(時間軸)のTです。

以前、Doom9フォーラムで、2D(Spatial/空間軸)フィルタにはiFilterの手法を、時間軸フィルタにはiFilterT関数の手法を使うという話が出たことがあったので、こういう名前にしました。

しかし、iFilterが2Dフィルタ用、iFilterTが時間軸フィルタ用、というわけではありません。2Dフィルタに関しては、iFilter/iFilterT、いずれにおいても使用することが可能です。ただし、時間軸フィルタを使用したいときには、どちらの関数(手法)を使うべきか、注意を払う必要があります。

iFilter関数は、トップ/ボトム(偶数/奇数)の両フィールドを交互に並べたクリップを生成して、それに対してフィルタをかけます。このとき、たとえば前後合わせて3フレーム(フィールド)を参照するタイプの時間軸フィルタを使用すると・・・

[トップ] [ボトム] [トップ](または、[ボトム] [トップ] [ボトム])

このように、異なるフィールドの画像を参照します。これにより、異なるフィールドの成分がブレンドされる可能性があります。

一方、iFilterT関数では、フィールド別に処理を行うため・・・

[トップ] [トップ] [トップ](または、[ボトム] [ボトム] [ボトム])

このように、同じフィールドの画像を参照します。異なるフィールドの成分がブレンドされることはありません。

たとえば、テレシネ(3:2プルダウン)されたソース(トップファースト)の場合で考えてみます。

[0] [1] [2] [3]・・・(数字はフレーム番号)

これをテレシネされる前の画像とします。

[0T] [1T] [1T] [2T] [3T]・・・(トップフィールド)
[0B] [1B] [2B] [3B] [3B]・・・(ボトムフィールド)
------------------------
[0f] [1f] [2f] [3f] [4f]・・・(フレーム)

テレシネされた後は、こんな感じになります(例)。Tはオリジナル画像のトップが、Bはオリジナル画像のボトム、fはテレシネ後のフレームを表します。つまり、[0T]と[0B]が[0f](0フレーム)を構成しているということです。

[0T] [0B] [1T] [1B] [1T] [2B] [2T] [3B] [3T] [3B]・・・

AviSynthでフィールド分離(SeparateFields)すると、このような画像の並び順になります(数字は、オリジナルの画像の番号です)。

このビデオに対して時間軸フィルタをかける(つまりiFilterの方法を使用する)と・・・

[1T] [2B] [2T]

このような並び順で、元々別の画像の、異なるフィールドを参照することになり、マズい結果になるかもしれません。

お願い

専門的な知識があるわけではないので、かなりいい加減な説明かもしれません。そのまま鵜呑みにしないようにしてください。あくまでも参考程度に・・・。もし間違っていたら、さりげなく教えてもらえると助かります。