2018年4月12日 更新

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

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

25,750 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 件

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

Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

画像処理の一つ,モルフォロジー変換をPython と OpenCVのライブラリを用いて実装し,それを2値画像に対して適用します.
画像の一部を消すInpainting という技術とその実装 (python)

画像の一部を消すInpainting という技術とその実装 (python)

Python + OpenCVにより,画像の修復の技術,「Inpainting 」の実装を行います.
等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

前回の記事「等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 1」の続きです. 実際に実装をして,写像を確かめてみます.
画像のセグメンテーション - Level set 法の実装 (Chan-Vese) -

画像のセグメンテーション - Level set 法の実装 (Chan-Vese) -

画像処理のセグメンテーションの分野で用いられるLevel set 法を用いて画像のセグメンテーションを行います.
Pythonで画像処理② Data Augmentation (画像の水増し)

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

画像の水増し、Data Augmentationと呼ばれる方法になりますが、学習に使う画像に変形を加えたり、ノイズを加えたり、明るさを変えたりといった処理を行う方法を紹介します。学習画像に様々な処理を行うことで認識がロバストになるというメリットがあります。
Mochizuki | 91,743 view

この記事のキーワード

この記事のキュレーター

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