AviSynthのぺーじ/ノイズ除去 のバックアップソース(No.1)

'''これは、かつて「にーやんのAviSynthのぺーじ」として公開されていたものを転載したものです。内容は古く、間違いも含まれている可能性があります。より正確で新しい情報を知りたい場合は、AviSynth 付属のヘルプや [[AviSynth 公式サイト:http://avisynth.org/]]を参考にすることをおすすめします。[[AviSynth Wiki:http://www.avisynth.info/]] の [[AviSynth入門]]なども活用してください。'''

#contents

* Convolution3D [#we477ca7]

 ''Convolution3D''は、Vlad59氏作のノイズ除去プラグインです。

 ''Convolution''(畳み込み積分)は、マトリックス内の各ピクセルにそれぞれ「重み」を持たせて平均化する方法のことです(下記「#1 個々のパラメータを指定する方法」の(1)matrixを参照)。

 このため、単純に近傍のピクセルの値を平均化する場合に比べて、比較的細部を保持したままノイズを除去することが可能であるとされています。

* Convolution3Dの2つの設定方法 [#nc095f15]

 ''Convolution3D''には、次の二種類の設定方法があります。

#code{{
#1 個々のパラメータを指定する方法
Convolution3D(matrix, ythresh, cthresh, t_ythresh, t_cthresh, influence, debug)

#2 プリセットを利用する方法
Convolution3D(preset="〜")
}}

 テンプレートでは、32行目にConvolution3Dフィルタの設定行があります。

#code{{
#//--- ノイズ除去 ---//
#Convolution3D(preset="movieHQ")
}}

 比較的簡単に使えるであろうという私の判断で、サンプルでは''#2のプリセットを利用する方法''を用いています。

 より細かい設定を行いたい人は、''#1の個々のパラメータを使用する方法''に変更してください。

 次に、''#1''と''#2''、それぞれの指定方法について見ていきましょう。

* #1 個々のパラメータを指定する方法 [#ybb9f00a]

#code{{
Convolution3D(matrix, ythresh, cthresh, t_ythresh, t_cthresh, influence, debug)
}}

 ''Convolution3D''には、'''matrix'''、'''ythresh'''、'''cthresh'''、'''t_ythresh'''、'''t_cthresh'''、'''influence'''、'''debug'''の7つのパラメータがあります。

 '''influence'''のみ小数で指定し、その他のパラメータは整数で指定します。

** (1)matrix [#wc058d1f]

 '''matrix'''パラメータでは、''Convolution3D''で用意されている二種類のマトリックス(''0''または''1'')から、どちらを適用するかを選択します。

''[matrix = 0]''

|一つ前のフレーム|現在のフレーム|一つ後のフレーム|h
|&ref(c3d_m0a.png);|&ref(c3d_m0b.png);|&ref(c3d_m0c.png);|

''[matrix = 1]''

|一つ前のフレーム|現在のフレーム|一つ後のフレーム|h
|&ref(c3d_m1a.png);|&ref(c3d_m1b.png);|&ref(c3d_m1c.png);|

 上がマトリックス''0''、下がマトリックス''1''です。マトリックス内の各ピクセルの値は「重み」を表します。

 各ピクセルに「重み」を持たせた''3x3''((UVは5x3で処理されます(Doom9フォーラムでのVlad59氏の発言より)。))の平面に、時間軸の''3''フレーム(現在のフレーム+前後の2フレーム)を加わえた''3x3x3''で計算を行い、現在のフレームの中央のピクセルの値を算出します。

 そしてこの処理を、すべてのピクセルに対して行います。

 マトリックス''0''は比較的細部を保持できるので、「実写向き」であるとされています。

 一方、マトリックス''1''は各ピクセルの「重み」が同じであるため、画像細部の保持には向いていません。そのため、「状態が悪いアニメ向き」とされています。

** (2)ythresh [#h85d06a1]

 輝度のしきい値。

** (3)cthresh [#m06da67b]

 色差のしきい値

** (4)t_ythresh [#ra0409b4]

 時間軸での輝度のしきい値

** (5)t_cthresh [#b091fbf4]

 時間軸での色差のしきい値

** (6)influence [#z0cf7358]

 時間軸の影響力。

 このフィルタの処理速度や、時間軸情報(シーンチェンジなど)の取捨選択の程度を調節します。

 この値が小さいほど、このフィルタの処理は速くなりますが、圧縮率(ノイズ除去の程度)は低くなります。逆にこの値が大きいほど、このフィルタの処理は遅くなりますが、圧縮率(ノイズ除去の程度)は高くなります。

 '''influence'''を-1にすると、平面(2D)での処理のみになり、時間軸での処理は行わなくなります。よって処理速度もアップします。

*** (7)debug [#ied157f2]

 デバッグモードの選択。0が通常モード(無効)、1でデバッグモード(有効)になります。

** 使用例 #1 [#b2f0769d]

#code{{
Convolution3D(0, 3, 4, 3, 4, 2.8, 0)
}}

* #2 プリセットを利用する方法 [#lb8500fd]

#code{{
Convolution3D(preset="〜")
}}

 プリセットとは、あらかじめ設定されているパラメータのサンプルのことです。''#1''の方法のように個々のパラメータを指定するのではなく、プリセットの名前を指定します。

 ''Convolution3D''で用意されているプリセットは、次の6つです。

+movieHQ:高品質実写映画用(Movie Hi Quality)
+movieLQ:低品質実写映画用(Movie Low Quality)
+animeHQ:高品質アニメ用(Anime Hi Quality)
+animeLQ:低品質アニメ用(Anime Low Quality)
+animeBQ:最低品質アニメ用(Anime Bad Quality)
+vhdBQ(※):最低品質VHSキャプチャ用(VHS capture Bad Quality)

 例えば、プリセット'''movieHQ'''を使用したい時は、次のように記述します。

** 使用例 #2 [#ybcab1f9]

#code{{
Convolution3D(preset="movieHQ")
}}

 必ず「'''preset'''="〜"」の形で記述してください。

 なお各プリセットは、それぞれ''#1''の方法で次のように設定した場合と同じです。

+movieHQ -> ''Convolution3D''(0, 3, 4, 3, 4, 2.8, 0)と同じ。
+movieLQ -> ''Convolution3D''(0, 6, 10, 6, 8, 2.8, 0)と同じ。
+animeHQ -> ''Convolution3D''(0, 6, 12, 6, 8, 2.8, 0)と同じ。
+animeLQ -> ''Convolution3D''(1, 8, 16, 8, 8, 2.8, 0)と同じ。
+animeBQ -> ''Convolution3D''(1, 12, 22, 8, 8, 2.8, 0)と同じ。
+vhdBQ -> ''Convolution3D''(0, 32, 128, 16, 64, 10, 0)と同じ。

※Convolution3D付属の説明書、およびHPのドキュメントでは'''vhsBQ'''となっていますが、'''vhsBQ'''ではエラーが出てしまいます。ソースを見ると'''vhdBQ'''となっており、このページでの表記も'''vhdBQ'''にしています。ただし、Convolution3DYV12では'''vhsBQ'''です。

最終更新日 2004年2月11日