AviSynthのぺーじ/ノイズ除去

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

Convolution3D

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

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

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

Convolution3Dの2つの設定方法

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

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

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

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

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

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

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

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

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

Convolution3D(matrix, ythresh, cthresh, t_ythresh, t_cthresh, influence, debug)

 Convolution3Dには、matrixythreshcthresht_ythresht_cthreshinfluencedebugの7つのパラメータがあります。

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

(1)matrix

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

[matrix = 0]

一つ前のフレーム現在のフレーム一つ後のフレーム
c3d_m0a.pngc3d_m0b.pngc3d_m0c.png

[matrix = 1]

一つ前のフレーム現在のフレーム一つ後のフレーム
c3d_m1a.pngc3d_m1b.pngc3d_m1c.png

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

 各ピクセルに「重み」を持たせた3x3*1の平面に、時間軸の3フレーム(現在のフレーム+前後の2フレーム)を加わえた3x3x3で計算を行い、現在のフレームの中央のピクセルの値を算出します。

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

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

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

(2)ythresh

 輝度のしきい値。

(3)cthresh

 色差のしきい値

(4)t_ythresh

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

(5)t_cthresh

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

(6)influence

 時間軸の影響力。

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

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

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

(7)debug

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

使用例 #1

Convolution3D(0, 3, 4, 3, 4, 2.8, 0)

#2 プリセットを利用する方法

Convolution3D(preset="〜")

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

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

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

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

使用例 #2

Convolution3D(preset="movieHQ")

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

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

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

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

最終更新日 2004年2月11日


*1 UVは5x3で処理されます(Doom9フォーラムでのVlad59氏の発言より)。

最終更新日時: 2014-03-12 (水) 23:36:59 (1990d)