2017年3月23日 更新

画像処理におけるフーリエ変換④〜pythonによるフィルタ設計〜

画像処理におけるフーリエ変換の最終回として、pythonによるフィルタ設定についてご紹介します。

220,626 view お気に入り 3
ある帯域のみを通したいときに使います。低周波部分をカットし、かつごま塩ノイズのようなノイズを消したい場合に用います。
バンドパスフィルタ

バンドパスフィルタ

このようなことはImageJでもできますが、完全にカット、完全に通すなどの処理しかできません。うまい比重をかけてフィルタを設計するなどの必要性に迫られたときに困るわけです。

そこでOpenCVを使ってフィルタを実装してみよう、というのが今回の記事の狙うところです。

フーリエ変換の実行

以下、pythonでフーリエ変換を実行していきます。pythonにはnumpy,OpenCVなど、豊富なライブラリがたくさんあります。

それではさっそくフィルタの設計をしていきます。まずは必要なライブラリをimport しておきます。
#coding: UTF-8

import numpy as np
import cv 
import cv2
from PIL import Image
Package Import.py
今回使用する画像はこれです。(hoge01.pngと保存しています。)
 (1640)

以下のコードで画像が表示されるのは前回確認した通りです。
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
出力結果
 (1646)

となります。フーリエ変換により、512[math]\times[/math]512の行列が作られたことがわかります。

逆フーリエ変換は同じようにすればOKです。ただし一つ注意があります。逆変換したものを画像として出力しようとすると
47 件

関連する記事 こんな記事も人気です♪

ImageJ まとめ

ImageJ まとめ

「このページを見れば,ImageJ のこと全てが解決する」をモットーに,日々更新を行っています.
シリーズ5.ImageJマクロ言語を用いた画像解析~マクロ言語のまとめ2~

シリーズ5.ImageJマクロ言語を用いた画像解析~マクロ言語のまとめ2~

【記事の目標】 画像を触ったことがない人を対象として、適切な画像解析を施すまでのImageJのマクロ言語を用いた学習過程を示す。 今回の記事ではImageJのユーザー定義関数について学んでいきます。
シリーズ4.ImageJマクロ言語を用いた画像解析~②二値化処理-3~

シリーズ4.ImageJマクロ言語を用いた画像解析~②二値化処理-3~

【記事の目標】 画像を触ったことがない人を対象として、適切な画像解析を施すまでのImageJのマクロ言語を用いた学習過程を示す。
LP-tech2周年記念#人気記事のまとめ#第15位〜第11位

LP-tech2周年記念#人気記事のまとめ#第15位〜第11位

LP-techが始まってから2周年を迎えました。ここまでLP-techを続けることができたのも読者の皆様のおかげだと思っています。そこで、LP-techの感謝祭ということで、人気の記事を第20位から第1位までをご紹介します。今回は第15位〜第11位までです。
画像の再構成理論〜概要、まとめ〜

画像の再構成理論〜概要、まとめ〜

今回は、以前4回にわたって記事として投稿した画像の再構成理論の概要について述べ、それのまとめをしたいと思います。

この記事のキーワード

この記事のキュレーター

エルピクセル編集部 エルピクセル編集部