はじめに
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 0.24.0 documentation
Using window functions with images — skimage 0.25.0rc2.dev0 documentation
fft2 — SciPy v1.14.1 Manual
コメント