2018年4月12日 更新

画像のFilter をPython で視覚的に理解する (Gaussian, Edge 抽出).

Python を用いて,画像のFilter を視覚的に理解してみます.コードを載せていますので,実装可能です.

1,221 view お気に入り 0

Filter とは

Filter と書きましたが,今回扱うのはその中でもSpatial Filter (空間処理フィルタ)です.
空間処理フィルタとは,生の画像データの特徴をより表現するために,取り扱う画像の画素値とその周辺の画素値を用いて,新たな画像を計算する方法です.
 (4687)

ノイズ除去フィルタ

撮影した画像は,必ず何らかのノイズが含まれています.例えば,真っ白の紙を写真で撮ったとしても,画素値が均一になっているとは限りません.光の当たり方であったりとか,そもそも紙が均一ではなかっただとか.
このようなノイズを最低限抑える,というのがこのノイズ除去フィルタです.
Original 画像と Noised 画像

Original 画像と Noised 画像

今回の例では,Original の画像にNoise を加えていますので,もともとの意味とは違いますが,撮影状態によっては右のような画像が得られることがあります.
なお,ノイズに関しては
ImageJ -> Process -> Noise -> Add Noise
によって加えました.

輪郭抽出フィルタ

画像の特徴量(例えばある部分の面積,輪郭線の長さ,曲率など)は,主に画像の画素値の境界付近にあることが多いです.画像の画素値の境界がくっきりと区別される場合ならよいのですが,現実ではそういうことはありません.このようなときに,画素値境界を見つける方法の一つが輪郭抽出フィルタです.
Original 画像とEdge画像

Original 画像とEdge画像

Original 画像にEdge 抽出フィルタを施しています.花びらや草などのEdgeが白く表現されていることがわかります.

ImageJ -> Image -> Type -> 8 bit
で白黒にしたあと,

ImageJ -> Process -> Find Edges
によって処理をしています.

実装に関して

Filter を知るため,Python で実装を行っていきましょう.
まずは以下のようなRectangle 画像を読み込みます.
import numpy as np
import dateutil
import cv2, matplotlib
import matplotlib.pyplot as plt

# import rectangle.jpg.
img = cv2.imread('./picture/rectangle.jpg')
img= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

plt.imshow(img, cmap='gray')
sample.py
 (4692)

これにノイズを付与してみます.
## Add Noise
pix = len(img)
noise = 5*np.random.randn(pix,pix)
img_n = img + noise
plt.imshow(img_n,cmap='gray')
sample.py
32 件

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

Pythonで画像処理② Data Augmentation (画像の水増し)

Pythonで画像処理② Data Augmentation (画像の水増し)

画像の水増し、Data Augmentationと呼ばれる方法になりますが、学習に使う画像に変形を加えたり、ノイズを加えたり、明るさを変えたりといった処理を行う方法を紹介します。学習画像に様々な処理を行うことで認識がロバストになるというメリットがあります。
望月 優輝 | 9,719 view
現役JDと学ぶ画像処理入門①〜openCV入門〜

現役JDと学ぶ画像処理入門①〜openCV入門〜

openCV入門(画像の読み込み、表示、保存、線形変換、拡大縮小)
広部ゆりか | 26,815 view
Pythonで画像処理① マスク処理

Pythonで画像処理① マスク処理

Pythonで画像を操作する方法を簡単に解説しています。
望月 優輝 | 8,359 view
ImageJ Plugin で数値計算をしてみる #5

ImageJ Plugin で数値計算をしてみる #5

非情報科学研究者 (特に生物系研究者) が ImageJ plugin を作るために超えるべき壁やTipsをまとめます。今回は、面積の平均値や中央値、分散を出力するためのコードをご紹介します。
湖城 恵 | 2,153 view
シリーズ5.ImageJマクロ言語を用いた画像解析~マクロ言語のまとめ2~

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

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

この記事のキーワード

この記事のキュレーター

三好 裕之 三好 裕之