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

matplotlib

はじめに

この記事では、scikit-imageライブラリのdifference_of_gaussians関数を使って画像にバンドパスフィルタを適用し、2Dフーリエ変換を行う方法について解説します。バンドパスフィルタは特定の周波数帯域を通過させる処理で、画像解析において重要なテクニックです。

解説

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

バージョン

画像の読み込み

本実験ではアストロフィツム属の兜丸の写真を使用します。まず画像を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についても、同じ方法でフーリエ変換を行います。

結果の表示

マグニチュード像では中心部が低周波数域、外側が高周波数域に対応しています。そのため、バンドパスフィルタを適用することで高周波数成分が抑制され、低周波数と中周波数域が強調された画像が得られていることが確認できます。

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

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

まとめ

本記事では、scikit-imageライブラリのdifference_of_gaussians関数を使って画像にバンドパスフィルタを適用し、2Dフーリエ変換で解析する方法を紹介しました。この手法は、画像内の特定の周波数成分を抽出したい場合や、ノイズ除去を行いたい場合に非常に有効です。コード例と視覚的な結果を通じて、実際の画像処理ワークフローへの応用方法を示しました。

参考

Band-pass filtering by Difference of Gaussians — skimage 0.25.2 documentation
Using window functions with images — skimage 0.26.0rc0.dev0 documentation
fft2 — SciPy v1.16.1 Manual

コメント