Pythonで画像処理 ガウシアンフィルタ

昨日のガボールフィルタに続き、

今日はガウシアンフィルタを実装してみます。

ガウシアンフィルタは、画像をぼかしたり、SIFTと呼ばれる特徴量抽出の中でとても

大活躍のフィルタです。

 

\begin{eqnarray*} g(x,y,\sigma )=\frac{1}{\sqrt{2\pi}\sigma}exp(\frac{x^2+y^2}{2\sigma^2}) \end{eqnarray*}

 

C言語で書くとこんな感じです。

 

ガボールフィルタと比べるととても可愛げがあります!

 

今日は、これをPythonでカーネル作るだけでなく、画像をボカすところまでやってしまいます。

コードは下記です。

 

 

ガウシアンフィルタもやっぱりライブラリで用意されてるっ・・・!

 

ゆとり仕様万歳!

 

実行!

 

 

 

 

INPUT

 

OUTPUT

 

 

 

お。

 

 

ぼけてはいるけど思ってたのと少し違う結果が出てきました。

 

縦に伸びるようにぼけてますね。

 

こんな時は、私の場合、下記を疑います。

 

(1) 畳み込み結果の配列の型と、Outputの配列の型が異なる可能性

(2)畳み込みで誤ったFor文が使われている可能性

(3)カーネルの中身が違う可能性

 

今回は、Python + OpenCVってこともあって、

(1)と(2)の線はうすいので

(3)から調べて見ます。

 

カーネルの値をプロットしてみたら、

案の定、ガウシアンフィルタが想定していたものと違いました。

 

どうやら、OpenCVの

getGaussianKernelで用意されているのは、1次元のガウシアンフィルタのようです。

 

なので、2次元のガウシアンフィルタを作って再実行!

コードは下記です。

 

 

結果はこんな感じ。

 

 

綺麗にぼやけました!

 

以上!

 

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください