ある帯域のみを通したいときに使います。低周波部分をカットし、かつごま塩ノイズのようなノイズを消したい場合に用います。
このようなことはImageJでもできますが、完全にカット、完全に通すなどの処理しかできません。うまい比重をかけてフィルタを設計するなどの必要性に迫られたときに困るわけです。
そこでOpenCVを使ってフィルタを実装してみよう、というのが今回の記事の狙うところです。
そこでOpenCVを使ってフィルタを実装してみよう、というのが今回の記事の狙うところです。
フーリエ変換の実行
以下、pythonでフーリエ変換を実行していきます。pythonにはnumpy,OpenCVなど、豊富なライブラリがたくさんあります。
それではさっそくフィルタの設計をしていきます。まずは必要なライブラリをimport しておきます。
それではさっそくフィルタの設計をしていきます。まずは必要なライブラリをimport しておきます。
#coding: UTF-8 import numpy as np import cv import cv2 from PIL import Image
Package Import.py
今回使用する画像はこれです。(hoge01.pngと保存しています。)
以下のコードで画像が表示されるのは前回確認した通りです。
image = cv2.imread("hoge01.png",0) cv2.imshow("original",image) cv2.waitKey(0) cv2.destroyWindow()
Picture show.py
それではこれをフーリエ変換してみます。numpyには高速フーリエ変換を実行するnumpy.fftというライブラリがあるので、それを使うことで画像のフーリエ変換を行っていきます。
fimage = np.fft.fft2(image) print fimage print fimage.shape
Fourier Transform.py
出力結果
となります。フーリエ変換により、512[math]\times[/math]512の行列が作られたことがわかります。
逆フーリエ変換は同じようにすればOKです。ただし一つ注意があります。逆変換したものを画像として出力しようとすると
逆フーリエ変換は同じようにすればOKです。ただし一つ注意があります。逆変換したものを画像として出力しようとすると