Copyright
(C) 2003-2008 << 信号処理 ランダム・ウォーク >>
フィルタリングについて詳しく説明してほしいというご要望をいただいたので、もうちょっと粘ってみます。(というか、フィルタリングは必要ですよね。ふつうは予定から外さないよな…)
○ 回復処理と逆フィルター [2003.9.11. 追加]
フィルタリングというと、全く自由に信号を操作するためのものも含めるのですが、ここでは一応理屈の上で根拠のある回復処理に用いられるフィルターについて説明します。
信号の劣化を考えるときには、普通は上の図に示す伝達特性のように周波数毎(帯域毎)の信号の透過率を考えます。伝達特性が1の帯域の信号は全く劣化しませんし、伝達特性が0の帯域の信号は逆に全く検出されません。マイクロホンやアンプなどの測定器関連の劣化であれば、予め帯域毎の透過率を測定しておき伝達特性として持っておけば、後で信号の回復処理に用いることができます。
回復処理で用いる基本的なフィルターは逆フィルターです。逆フィルターは伝達特性と積をとったときに1になるように構成されたフィルターです。伝達特性の逆数をとることになるので逆フィルターと呼ばれます。伝達特性が1の帯域では逆フィルターの値は1になります。伝達特性が0.5の帯域では2になります。伝達特性が0.2の帯域では5に、伝達特性が0.01の帯域では100になります。伝達特性が0になる帯域では逆数は計算できません(0で割ることは許されない)から逆フィルターは定義できません。逆フィルターの基本的な考え方は、信号が半分になってしまうことが予め判っているなら後で2倍にする、信号が3分の1になってしまうことが判っているなら後で3倍にする、というごくごく常識的なものです。
オーディオにはグラフィック・イコライザという装置(オーディオの周波数特性を調整する装置)がありますが、もともとは回復用のフィルター だったことがわかります。イコライザという名前は周波数特性をフラットにする(イコールにする=イコライズ)という目的で使われてたことの名残でしょう。
それで実際の信号はどんな感じになるのかというと、上の図のように A、 B、 C、というピークを持つ原信号があるとすると、AはA'として、BはB'として観測されます。そしてCは観測されず0になってしまいます。逆フィルターを作用させると、観測信号のA’は回復信号のA''に、B’はB''になります。回復処理が理屈通りうまくいけば(=今はノイズを考えない)、AとA''、BとB'' は等しくなります。Cは観測されませんし、とうぜん回復もできません。いったん信号が0になってしまえば、後から何を掛けたとしても0は0です。0とは、いったん吸い込まれたら脱出できないブラックホールのようなものです。
「Cのピークが回復できない」というのがけっこう象徴的で、言い方を変えると「一度失われた情報は二度と回復できない」んです。そんなこともあって信号処理は減点主義な考え方になることが多い。新しい処理を考える時のもっとうは「余計なことは極力しない。できるだけ何もしない(笑)」だったりします。制約が多い中でなんとかやるというのが魅力とも言えますが…
○ ノイズとウィナ・フィルター [2003.10.8.追加]
式を使わないで説明できないかなとずっと考えてたんですが、力不足でダメそうなのでちょっと回避(っていうか、ほんとの意味での理解がまだ足りないということか…)。
逆フィルターのところでは、伝達特性が0にならない帯域については、予め伝達特性を測っておくことで回復できることを説明しました。では0にならなければなんでも良いかと言えば、当然そんなことはありません。世の中にはノイズがあるからです。特に伝達特性が非常に小さい帯域(例えば0.000…001など0に限り無く近い場合)では、観測値そのものが小さくなりノイズの影響を受けやすくなります(いわゆるS/Nが悪い状態です)。伝達特性が小さい帯域では逆フィルターの値は大きくなるので、ノイズが乗った状態の観測信号に逆フィルターを作用させると、けっきょくノイズを大きく増幅するだけになってしまうのですね。
一方で、大きく増幅してしまえばノイズが大きくなってしまい原信号には近づかない。他方で、小さい増幅にしてしまえば観測信号の回復が十分でなくなってしまい、やっぱり原信号には近づかない。と、相反する状況があるわけです。では、どのくらい増幅すれば回復がうまくいき、最も原信号に近い回復信号が得られるだろうか? ウィナ・フィルターはこの質問に答えS/Nを利用して統計的にもっとも良い増幅を与えるフィルターと言うことができます。

N(f)はノイズのパワー・スペクトルです。上の図ではN(f)を周波数領域で一様のように描いてますが、これはノイズに白色雑音を想定したからです(白色雑音以外のノイズを想定するとウィナ・フィルターの式は上とは異なってきますが、ここではかつあい)。H(f)は伝達特性です(*は複素共役を表します。複素数で乗除算をするので形式上これが付きます)。上のウィナ・フィルターの式を見ると、伝達特性H(f)が十分に大きく支配的な帯域ではウィナ・フィルターは逆フィルターとほぼ同じになります。伝達特性H(f)が0の帯域ではウィナ・フィルターも0になります。伝達特性H(f)が0ではないが十分に大きくはない帯域では、ノイズのパワーN(f)の項があることによりウィナ・フィルターの値(すなわち増幅率)は必要以上に大きくなることはありません。
名前が凄そうなんで(>ウィナ・フィルター)がっかりさせてるともうしわけない気もしますが、ウィナ・フィルターを別の言い方で説明すると「ノイズを大きくしない程度に最適に回復する(要するに観測信号のもともとのS/Nで許される範囲でしか回復しないし、得られる回復信号はS/N的に最も良いものになる)」となってしまい、これもまたけっこう常識的な方法(あたりまえか)であることが判ります。
ところで、現実的な信号処理においては、ウィナ・フィルターが「広く一般的に用いることのできる最も良い回復処理手法」ということになります。これ以上回復するとなると、なんらかの先験情報や統計的な偏りが必要になるなど、わりと特殊な条件でしか用いることのできない方法になってしまうんですね。逆に言うとウィナ・フィルターさせ知っておけばなんとかなる?(>回復処理)と言ってしまって良いと思います。ほんとか?
○ コンボリューション(畳み込み積分)・フィルターとフーリエ変換 [2003.11.18.+2003.11.26.+2004.1.13.追加]
コンボリューション(畳み込み積分)は、上に示すようにカーネルの位置をずらしながらカーネルに格納されてる係数を用いて加重加算していく計算方法です。カーネルには適当な数値が入るのですが、例えば上の図で三つある数値が全て”1/3”であれば、コンボリューションは最も単純な移動平均そのものになります(なんで3で割ったかというとフィルタリングの前と後で信号のパワーを保存するためです。信号のパワーを保存するために総和が1になるようにカーネルを調整するのですが、気力があれば後で説明しなおします)。
実はコンボリューション・フィルターは、下に示すように「フーリエ変換→周波数領域のフィルタ(例えば前に説明した逆フィルターやウィナ・フィルター)→逆フーリエ変換」と、数学的には等価なんです。つまり、任意のコンボリューション・フィルター(どんなコンボリューション・フィルターであっても)には、必ず特性の等しい周波数領域のフィルターが存在することになります。

コンボリューション・フィルターを用いるか、周波数領域のフィルターを用いるかは、ケース・バイ・ケースです。フーリエ変換のように重い計算を使いたくない場合や、コンボリューション・フィルターでもカーネルのサイズを小さく保つことができそうな場合には、コンボリューション・フィルターを用いることになるでしょう。反対に必要なフィルターの周波数特性が複雑で、コンボリューションではカーネルのサイズが大きくなってしまいそうな場合には、たぶん周波数領域のフィルターを用いることになると思います。カーネル・サイズの大きいコンボリューション・フィルターは計算時間の面で不利になりますし、処理の周波数特性が複雑なら素直に周波数領域のフィルターを使うほうが良いでしょう。
コンボリューション・フィルターのカーネル・サイズをどうするかは、処理に必要な周波数領域での分解能と計算時間のトレード・オフで決まります。処理に必要な周波数領域での分解能が高ければ、カーネル・サイズは大きくなってしまいますし(このへんは フーリエ変換の実際 で話した周波数分解能の考え方が参考になるはずです)、そうでもないならカーネル・サイズを小さくして計算時間をかせぐことができます。
言い忘れましたが、コンボリューション・フィルターと周波数領域でのフィルターが等価なのは、コンボリューション・フィルターがシフト・インバリアントの場合だけです。シフト・インバリアントとは何かと言うと、「図 コンボリューション・フィルターの概要」 に書いた I[i] や O[i] の i に応じてカーネルの中身が変化しないものです。反対にシフト・バリアントは i に応じてカーネルの中身が変化するものです。

「音」などの1次元データでは、シフト・バリアントを考えることはあまりないのですが、「画像」などの2次元データではシフト・バリアントを考えることもあります。例えば、光学レンズの場合にはレンズの光軸付近と周辺付近で像の劣化(例えばボケかた)の仕方が明らかに異なり、シフト・バリアントで細かく対応して考えるほうが良さそうに思えます。 ただしシフト・バリアントで現実に即して細かく考えることが、ほんとに意味があるかどうかはまた別の話です。信号処理の目的はいろいろありますが、一つの大きな目的は劣化した観測信号に対して回復処理を行い原信号を推定することです。信号の劣化にシフト・バリアントを仮定してしまうと、伝達特性を求めることはできませんし、とうぜん逆フィルターもウィナ・フィルターも求められません。つまり一般的な方法では回復処理ができなくなってしまうんです。これって意味があるでしょうか? シフト・バリアントを仮定してしまうと「定式化はできるけど、その定式化を使って何もできない」という状況になってしまうということです。
光学レンズの劣化は点像分布関数(PSF:PointSpreadFunction)を使って表します。 点像分布関数とは文字通り点を撮影し光学レンズによる像のぼけ方を得たものです。点とは Dirac のデルタ関数を意味しますが、離散的な信号処理では、撮影面における撮像素子の分解能を物体空間に写像した時の大きさ、より十分に小さければ良いことになります。
光学レンズによる劣化にシフト・インバリアントを仮定すると(本当は違うけど)、得られた点像分布関数に2次元フーリエ変換をかければ光学伝達関数(OTF:OpticalTransferFunction)が得られます。光学伝達特性が得られれば逆フィルターやウィナ・フィルターを得て回復処理を行うことができます。

PhotoShop などのレタッチ・ソフトではコンボリューションを多用してます。例えばデジカメで取った画像に対してレタッチ・ソフトを使って像をシャープにするなどの処理をすることがあると思いますが、これなんか典型的なコンボリューションです。回復ということを考えるなら本当はデジカメの光学レンズや撮像素子の特性を予め得て回復しなければならないのですが、そこまでやるのは面倒だしそれに見合う効果があるかどうかもわからないので、普通は最大公約数的にフィルターを決めてしまい処理することになると思います。
「音」などの時間領域の信号だとシフト・バリアントになることはまずないのですが(シフト・バリアントになるということは信号取得時に時間によって特性が異なってしまうことを意味する。そんなことはめったにない)、逆に時間領域の信号ならではの特徴を備えたフィルターを作ることができます。特徴って何かというとようするに因果律のことなんですが、言い方を変えると「過去の影響は未来に伝播するが、未来の影響は過去に伝播することはない」ということで、フィルターの形は以下のようになります。画像の場合に描いたぼけ分布が左右対称だったのとは違い左右非対称のフィルターになってます。

因果律を想定すると、更に面白いフィルターを作ることができます。コンボリューションではカーネルの位置をずらしながら加重加算を行っていくわけですが、今までは入力信号と出力信号をきちんと分けて格納してました。これから説明する下のフィルターでは、得られた加重加算の結果を常に入力信号のほうに戻すようになっています。つまり過去の出力が次にカーネルがずれて再度加重加算を行う時の入力に用いられるのですね。こういうフィルターを IIR ( Infinete Impulse Response ) フィルター(もしくは再帰フィルター)と呼びます(ちなみに今までに説明してきたフィルターは区別するために FIR ( Finite Impulse Response ) フィルターと呼びます)。
FIR フィルターでは過去の影響は最大でもカーネル長の長さまでしか伝播しなかったのですが、IIR フィルターの場合には、再帰的に加重加算が行われる関係で理論上は無限の彼方まで伝播させることができます。これは見かけ上、カーネル長が無限になることを意味します。精度のことを考えると無限はあり得ないですが、一般には同じカーネル長であれば、IIR フィルターの方が FIR フィルターよりも複雑な周波数特性のフィルター(フィルター長が長いほうが周波数分解能が高くなる)にすることができます。
ただし IIR フィルターは定式化に極限値が含まれることになり設計はやっかいになります。
僕自身は IIR フィルターをちゃんと設計したことがないんで、もし詳しい方がいれば逆に教わりたいくらいですが。(-_-;)
最後にフィルターの種類を簡単にまとめておきます。ここで説明した以外にも、例えばエッジ抽出やメデイアン・フィルターなどのいろいろなフィルターがあるので(線形でないフィルターも含む)、いろいろ試してみるのもよいでしょう。

○ 超解像 [2004.2.3. + 2004.2.15. 追加]
今のところ超解像を現実的な場面で用いるのは難しいのですが、考え方が面白いのでここでも取り上げることにしました。まあ単に面白いというだけではなくてですね、そこに用いられているテクニックの数々が今後の進展によっては信号処理の未来に向かって扉を開いてくれると期待したいというのもあります。
僕が超解像を知ったのは天文画像に対する回復処理でしたので、ここではその例に従って説明したいと思います。
上の図は光学望遠鏡のようなものを用いたときに観測画像が得られる様子を簡単に示したものです。光学望遠鏡の伝達特性は光学レンズの OTF でほぼ決まってしまいます。ちなみに光学レンズの OTF は開口数で決まってしまいます。開口数は何かというとレンズの直径を焦点距離で割ったもので、おおざっぱに言えばレンズの直径が大きいほうが、より高周波成分まで通過させることができ観測画像に与える分解能を高くすることができます。まあたとえどんなに開口数の大きいレンズを使ったとしても左に示すように信号が全く伝達されない制限帯域(パワーが零になってしまう帯域)はできてしまいますが。
逆フィルターやウィナ・フィルターのところで説明したように、パワーが零になってしまった帯域はもう回復することができません。普通はここで話は終わってしまうのですが、超解像の場合は違ってきます。
超解像の場合には、先験情報(要するに予め知っている情報)と称して、画像中の背景が一様(つまり濃度値が平ら)であることを仮定するのですね。すると、もし観測画像の背景に濃度の変化があれば、その濃度変化は観測時に零になってしまった制限帯域の影響であると言えるわけです。逆に、観測画像の背景が一様になるように制限帯域に値を戻すことができれば、一度は零になってしまったものを回復できてしまいます。この時に、背景が一様になるのはもちろんですが、同時に観測対象がある領域にも今までは無かったパターンが現れて追加されることになります。 帯域制限が起きる周波数領域と観測画像の空間領域は相補的(一方の領域で一つの値に変化を与えると他方の領域では全ての値が変化する)なんですが、制限帯域に値を加えるということは、観測画像の全て(つまり背景と観測対象の両方に)にサイン波的な濃度変化を加えることになるので、こういったことが起きるわけです。

もちろん、この回復は一筋縄ではいかないことはすぐにわかります。
1)背景は一様であるという仮定が間違っていたら?2)観測対象の位置と大きさが間違っていたら?
3)観測後にノイズが加わってたら?
上のどの項目に該当しても、得られる回復画像には問題が出てしまいますが、これは観測においてはかなり厳しい条件だと思います。
2003.9.11. sigprocrandwalk_at_gmail_com