メディアンフィルタ

平滑化フィルタでは注目画素の周辺画素の輝度値を平均し、ノイズを除去していましたが、画像の輪郭もボケてしまう欠点がありました。それに対し、メディアンフィルタでは周辺輝度値の大きさを順に並べ、メディアン(中央値)を注目画素に置き換えることでノイズを除去します。
特に周辺画素の輝度値よりも大きく異なるノイズ(ゴマ塩ノイズとかスパイクノイズという)を除去するのに効果を発揮します。

 

メディアンフィルタ処理前 メディアンフィルタ処理後

輝度値の3D表示

輝度値の3D表示

 

処理の詳細


 

注目画素(画像中央の輝度値165の部分)周辺の輝度値を取得します。
61、96、41、57、165、34、24、30、31

 

この輝度値を順番に並べます。

 

24、30、31、34、41、57、61、96、165

 

並べた輝度値のメディアン(中央値)の41で輝度値165を置き換えます。

この処理を全画素について行うと、ノイズを除去することができます。

 

 

ただし、平滑化処理に比べ、処理が重い...

 

もう少し具体例でいうとこんな感じ

【メディアン処理前】

 

【メディアン処理後】


画像処理アルゴリズムへ戻る

 

ガウシアンフィルタの処理アルゴリズムとその効果

移動平均フィルタでは注目画素周辺の輝度値を単に平均していましが、一般的な画像では 注目画素に近い画素の輝度値は注目画素の輝度値と近い場合が多いですが、注目画素から遠くなればなるほど、注目画素の輝度値とは差が大きくなる場合が多くなります。
この事を考慮し、注目画素に近いほど、平均値を計算するときの重みを大きくし、遠くなるほど重みを小さくなるようにガウス分布の関数

を用いてレートを計算しているのがガウシアンフィルタです。
σの値が小さいほど平滑化の効果は小さくなり、大きいほど効果が大きくなりますが、
よく以下のカーネルが用いられます。

 

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となります。)

 

画像処理アルゴリズムへ戻る

 

平滑化(移動平均)フィルタ

平滑化フィルタは読んで字のごとく、画像の輝度値を平らに滑らかにするための手法です。
画像中のノイズを除去するために用いられます。

平滑化処理前 平滑化処理後

移動平均フィルタ(別名:平均化フィルタ、単に平滑化フィルタともいう)では、注目画素のその周辺の輝度値を用いて、

輝度値を平均し、処理後画像の輝度値とする手法です。

例えば、注目画素とその周辺の輝度値に以下のようなレートを掛け合わせて輝度値を求めます。

この3×3のレートの組合せの事をカーネル、オペレータ、マスクなどと言います。

とくに3×3である必要はなく、5×5の場合では

となります。

ただし、全てのレートを足し合わせてになるように調整して下さい。

 

画像処理アルゴリズムへ戻る

 

関連記事

フィルタ処理の高速化アルゴリズム(重複した計算を行わない)

画像処理フィルタ一覧、比較

各種、画像処理を下記に示します。
処理の名前の部分にリンクが張ってあるものは、より詳細な説明がありますので、そちらを参照願います。

 

処理前 処理後
二値化Pタイル法判別分析法(大津の二値化)
移動平均フィルタ(カーネルサイズ7×7)
ガウシアンフィルタ(カーネルサイズ7×7)
メディアンフィルタ(カーネルサイズ7×7)
ソーベルフィルタ
Canny edge detection
細線化
ガンマ補正
アンシャープマスキング
バイラテラルフィルタ
膨張
収縮
オープニング
クロージング
トップハット
ブラックハット(ボトムハット)
ラベリング
色変換(色相抽出)
疑似カラー

 

 

画像処理アルゴリズムへ戻る