微分フィルタ及び二階微分フィルタ(Laplacian Filter)

前回の Gaussian Filter のエントリに引き続き,微分フィルタについてもエントリを残しておこうと思います.前回のエントリは下記の通り.
daily-tech.hatenablog.com

一階微分フィルタ・二階微分フィルタとは?

 その名の通り,隣接する画素値の変化率を計算し,その値を出力とするフィルタです.一般的に画像のエッジを取りたいときによく使われます.こちらもググればいっぱい有益な情報が出てくるので,ここでは実際に使ってみてどんな出力が得られるか見てみたいと思います.

2D画像に一階微分フィルタ・二階微分フィルタを適用する.

 手始めに,下記のサンプル画像に対して一階微分フィルタ・二階微分フィルタを適用します.下記の画像はわが母校...ではありませんが,東工大の大岡山キャンパスです.この画像に対して,x方向の一階微分フィルタ,y方向の一階微分フィルタ,二階微分フィルタを適用してみます.

原画像

f:id:rkoichi2001:20200508132858p:plain
大岡山キャンパス

x方向の一階微分フィルタを適用
 x方向に関して,上がりエッジがある場所では値が高く(白く),下がりエッジがある場所では値が低く(黒く)なっている様子がわかります.

f:id:rkoichi2001:20200508132946p:plain
大岡山キャンパス+x方向一階微分フィルタ

y方向の一階微分フィルタを適用
 y方向に関して,上がりエッジがある場所では値が高く(白く),下がりエッジがある場所では値が低く(黒く)なっている様子がわかります.

f:id:rkoichi2001:20200508133017p:plain
大岡山キャンパス+y方向一階微分フィルタ

二階微分ラプラシアン)フィルタを適用
 二階微分フィルタの適用結果ですが,一階微分フィルタの応答とは異なり,よく見るとエッジがあるところが白黒になっていることがわかると思います.

f:id:rkoichi2001:20200508133048p:plain
大岡山キャンパス+二階微分ラプラシアン)フィルタ

二階微分ラプラシアン)フィルタの結果拡大図
 上の画像の一部拡大版ですが,二階微分ラプラシアン)フィルタを適用すると,エッジの存在する箇所が「黒白,もしくは白黒」になっていることがわかります.

f:id:rkoichi2001:20200508133758p:plain
二階微分ラプラシアン)フィルタを適用すると,エッジの箇所が白黒・黒白に.

 次に,一階微分フィルタ・二階微分フィルタの動きを1D画像に適用して見てみます.

1D画像に微分フィルタを適用する.

 ここではそれぞれのフィルタの動きを見るために,問題を簡単化して1D画像で考えます.前回のエントリ同様に白帯の画像を考えます.上から順に,「原画」「原画のx方向断面」「x方向の一階微分フィルタ出力」「二階微分フィルタの出力」となっています.

f:id:rkoichi2001:20200508134236p:plain
一階微分フィルタ・二階微分フィルタの出力

 上記の図から,二階微分フィルタの出力がなぜエッジ付近で「黒白,もしくは白黒」になることがわかるかと思います.上がりエッジが立つと,そのエッジを達成するために一階微分(勾配)が
「0ー>正の値ー>0」
と変化し,この勾配を達成するために二階微分
「0ー>正の値ー>負の値ー>0」
となるためです.二階微分フィルタを適用した大岡山キャンパス画像の出力結果ともつながりました.

 ひとまず,一階微分フィルタ・二階微分フィルタの概要はこのくらいにしておきます.ここではエッジがとてもくっきりしていて,ある意味ではステップ入力のような白帯を使いました.次に,この白帯をGaussian Filter でぼかしたときの二階微分ラプラシアン)フィルタの出力変化を見てみます.

Gaussian Filter と二階微分ラプラシアン)フィルタの関係

 下記,原画に対して Gaussian Filter をかけたときの一階微分フィルタ,二階微分フィルタの応答です.σが大きくなるに従って勾配が緩やかになり,一階微分フィルタ,二階微分フィルタの応答も緩やかになっている様子がわかると思います.

f:id:rkoichi2001:20200508164628p:plain
σを変化させたときの微分フィルタの応答

 σの標準偏差を持つガウスフィルタを適用した場合,ステップ入力の勾配が小さく(緩やかに)なるため,一階微分・二階微分の値は小さくなっていきます.この出力だと形がわからないので,一階微分フィルタ・二階微分フィルタの出力を正規化して,どんな形になっているのか見てみます.(一階微分の出力値にσを,二階微分の出力値にσ^2をそれぞれかけてあげると正規化できます.)

f:id:rkoichi2001:20200508164659p:plain
σを変化させたときの微分フィルタの応答(正規化版)

 正規化した画像から,おもしろいことがわかります.4段目の二階微分フィルタの値を見てほしいのですが,白帯の上がりエッジ・下がりエッジにて発生した波がガウスフィルタの標準偏差(σ)を大きくしていくに従って互いに接近しはじめ....σ = 16 で完全に合体しました.ちなみに,この白帯の幅は 32pix なのですが,白帯の幅のちょうど半分くらいの標準偏差を持つガウスフィルタをかけてあげると,二階微分フィルタの出力が極値を迎えることがわかりました.ということで,

「スケールが 2σ 位の被写体が写っている画像に対して,標準偏差が σ のガウスフィルタと二階微分フィルタを適用すると,被写体の部分が強く反応する.」

ことがわかります.今回は一つの画像に対して σ を変化させて微分フィルタの応答を見ましたが,この σ の方向の次元を 「Scale Space」 と呼びます.Scale Space の極値を見ることによって,(=今回実験したように,σを変えながら二次微分フィルタの極値を探ることによって)被写体の大体のスケールがわかることになります.SIFTではキーポイント検出でこれを使っているのですが,それはまた次のエントリで....

実験に使ったコード.

github.com

参考文献.

Scale-space theory: A basic tool for analyzing structures at different scales

Distinctive image features from scale-invariant keypoints

http://www.cs.unc.edu/~lazebnik/spring11/lec08_blob.pdf