[scikit-image] 99. 画像にバンドパスフィルタ(skimage.filters.difference_of_gaussians)をかけて2Dフーリエ変換

matplotlib

はじめに

skimage.filters の difference_of_gaussiansで画像にバンドパスフィルタを適用して、フーリエ変換する方法について説明する。

解説

モジュールのインポートなど

バージョン

画像の読み込み

アストロフィツム属の兜丸の写真を用いる。rgb2grayでグレースケール画像に変換した後にimg_as_floatで0-1の形式にする。

バンドパスフィルターと窓関数をかける

wimageはgaussianフィルターでノイズを滑らかにした後に窓関数をかけた画像となる。バンドパスフィルタはdifference_of_gaussiansでかけることができる。処理としてはぼやけの多いhigh_sigma画像がぼやけの少ないlow_sigma画像から差し引かれる処理が行われる。これによって特定の周波数のみを強調した画像を得られる。ここでは、low_sigmaを5とし、 high_sigmaを10とした。

フーリエ変換

fftshift(np.abs(fftn(wimage)))でwimageのフーリエ変換を行い、FFT magnitude imageを出力する。
バンドパスフィルタと窓関数を適用したfiltered_wimageも同様にして、フーリエ変換を行う。

結果の表示

Magnitude像は中心が低周波数域、外側が高周波数域に対応するので、バンドパスフィルタによって高周波数が低減し、低、中周波数域が強調された画像が得られていることがわかる。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

Band-pass filtering by Difference of Gaussians — skimage v0.18.0 docs
Using window functions with images — skimage v0.19.0.dev0 docs
scipy.fft.fft2 — SciPy v1.7.1 Manual

コメント