移動平均フィルタでは注目画素周辺の輝度値を単に平均していましが、一般的な画像では 注目画素に近い画素の輝度値は注目画素の輝度値と近い場合が多いですが、注目画素から遠くなればなるほど、注目画素の輝度値とは差が大きくなる場合が多くなります。
この事を考慮し、注目画素に近いほど、平均値を計算するときの重みを大きくし、遠くなるほど重みを小さくなるようにガウス分布の関数
を用いてレートを計算しているのがガウシアンフィルタです。
σの値が小さいほど平滑化の効果は小さくなり、大きいほど効果が大きくなりますが、
よく以下のカーネルが用いられます。
3×3の場合
5×5の場合
ガウシアンフィルタにはローパスフィルタと同様の効果があるそうです。
ということで、フィルタ処理した画像をフーリエ変換し、確かめてみました。
オリジナル(処理前)の画像はこちら↓
オリジナル画像 | 二次元フーリエ変換画像 |
上記の画像にノイズ除去系のガウシアンフィルタ、移動平均フィルタ、メディアンフィルタの
処理を行い、二次元フーリエ変換を行い確認してみました。
上記画像に5×5のガウシアンフィルタ処理を行うと
5×5のガウシアンフィルタ処理 | 二次元フーリエ変換画像 |
5×5の移動平均処理を行うと
5×5の移動平均処理 | 二次元フーリエ変換画像 |
5×5のメディアンフィルタ処理を行うと
5×5のメディアンフィルタ処理 | 二次元フーリエ変換画像 |
確かに処理結果を見てみると、ガウシアンフィルタが最も高周波成分を除去できているように
思います。
なぜ、そうなるのか?
本には数式においても、この効果が証明できるような事が書いてありましたが、ちょっと難しいので、
カーネルの値について見てみたいと思います。
そもそも、ある特定の周期の成分を消すためには、どうすれば良いか?というと、
周期の半分の離れた2点のデータを平均していけば、その周波数の成分を消す事が出来ます。
ここで、画像で表すことのできる最も高い周波数は
明 暗 明 暗 明 暗 明 暗 明 暗 明 暗 明 暗 明 暗 明 暗
となる2画素周期のパターンで、このパターンを消すためには、隣り合う2画素の輝度値を
平均すると、画像データから最も高周波の成分を除去する事が出来ます。
しかし、隣り合う2画素の平均の結果は、画素間の位置の輝度値を示してしまうので、
この平均のさらに平均値を取ります。
連続する5つの輝度値の値をI-2~I2とすると、平均した値の平均値は
となり、なんとこの結果が3×3のガウシアンフィルタの横方向(縦方向)の係数と等しくなります。
さらに、平均の平均を取ると、5×5のガウシアンフィルタの係数と同じ。
7×7のガウシアンフィルタまで確認してみましたが、この平均の平均で表すことが出来るようです。
という訳で、ガウシアンフィルタの式
で表される係数なら何でも良いと思いつつも、
の係数が良く使われるのかも?しれませんね。
さらにこの係数、半分の半分で求めるのは、ちょっと面倒。
これがまた都合よく、(a+b)nの式を展開したときの係数に使われる
パスカルの三角形の値
と一次元のガウシアンフィルタの係数と等しくなります。(少なくとも7×7ぐらいまでは)
これを以下のように二次元的に掛け合わせて、係数の合計で割ればガウシアンフィルタの係数となります。
例えば7×7のガウシアンフィルタの係数では下図のようになります。
この値を係数の合計(=4096)で割ればガウシアンフィルタの係数の出来上がり!!!
(このときσの値は約1.3となります。)
ピンバック: Canny edge detector | イメージングソリューション
ピンバック: 【Kinect SDK】RawBayerデータとは? | イメージングソリューション
ピンバック: バイラテラルフィルタ | イメージングソリューション
ピンバック: 画像処理フィルタ一覧、比較 | イメージングソリューション