用途 : aviutilのフィルタプラグイン ファイル : bnf_alfa01.zip バージョン : あるふぁ01 書いた人 : さちほ 作成日 : 10/20 (2004)
原理
(キャプチャ機器での)ビートノイズは、 恐らくチューナの電源ラインから進入した他のデジタルチップ等のノイズが、 画像全体に縞模様のようなノイズとなって現れる現象です。 我が家の MTU2400F ではアンテナを屋根の上にちゃんと立てていないせいもあって盛大に出ます。
( MTV2200SX の場合が http://homepage2.nifty.com/ugee/mtv2200sx.htm に詳しく説明されています。)
したがって、特にキャプチャ機器自身が発するノイズの場合、時間方向にはあまり変化せず、 ある程度動いたりはするものの、常に縞模様が居座った状態になり、3DNRでも取ることができません。
しかし、目で見れば縞模様がノイズであることは明らかであり、これを機械的に判定することも できるはずです。というか、横方向のラインに、特定のサインカーブのような濃淡が重なっている、 と考えることができるので、1ラインを周波数に変換し、特定の周波数成分だけを消してやれば 目的のノイズだけが消えるでしょう。
使いかた
横40どっとごとの塊で処理しているので、カットする周波数を5〜9程度、 カット幅は2-4程度にして、しきい値は10以下くらいで使います。
カット周波数と幅で、ビートノイズ縞がもっとも薄くなるところを探したら、 しきい値を調節して、ノイズ以外の輪郭線がなるべく分裂しないようなところを探してください。
実装
わたしの経験不足により、フーリエ変換は知っていますがちゃんと実装する能力がありません。 というわけで、ryokoさんのDCTライブ説明 http://d.hatena.ne.jp/ryoko/197601 にあった 解説用ソースをほぼそのまま使っています。 というか、このページを見なかったら棚上げのままお蔵入りになっていたきがします。 ありがとうございます(ぺこり)
いくらなんでも解説用コードそのままではあれなので、
- 一度に処理するのを横40ドットごとに分割して利用
- 解説ソースではcos関数をループ内で使っていたので、事前にdouble型テーブルに格納した
くらいの努力はしましたが、整数化などのまじめな高速化はしてありません。 検索能力の高いひとなら、既存の高速DCTルーチンを探してきてぺたっと貼ればすむのでしょうが… そのへんは自分も含めて、需要が高ければ努力します。
問題点
頑張って調節しても、ノイズを消すと、別の輪郭線が 誤爆されてゴーストが出現することがよくあります。下の例ではりんごの輪郭線や、 文字が分裂して逆に汚くなっています。
今のところ何の工夫もしていないので、 しきい値を頑張って選ぶ以外には対策がないのですが、例によって需要が高ければ努力します…