2019年4月2日 更新

ディジタル画像処理~pythonによる空間フィルタリングpart1~ 

ディジタル画像処理を解説します.今回は,代表的な空間フィルタリングをpythonで実行してみました。

13,595 view お気に入り 2
import cv2
import matplotlib.pyplot as plt
Package import.py

今回はこの画像を使用していきます。

img_example

img_example

この白黒画像の画像表示を行います。

img_bgr = cv2.imread("img_example.jpg")
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
Picture show.py
img_g = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)
plt.gray()
plt.imshow(img_g)
Picture show2.py

pythonのライブラリから、numpyをインポートし平均化フィルタを用いた畳み込み演算を設計します。 平均化フィルタは以下のような行列です。

\begin{equation} H = \begin{pmatrix} 1/9 & 1/9 & 1/9\\ 1/9 & 1/9 & 1/9\\ 1/9 & 1/9 & 1/9 \end{pmatrix} \end{equation}
import numpy as np

shp = np.shape(F) ## 画像のshape を保存
H = np.ones([3,3])/9 ## フィルタの要素をセット
F = img_g
G = np.zeros(shp)
for i in range(shp[0]):
    for j in range(shp[1]):
        for n in range(-1,2):
            for m in range(-1,2):
                G[i,j] = G[i,j] + F[(i+m)%shp[0], (j+n)%shp[1]] * H[m,n]
Calculation design.py

これを実際の画像に適用させます。

plt.subplot(1,2,1)
plt.gray()
plt.imshow(F)
plt.title("Before")
plt.subplot(1,2,2)
plt.gray()
plt.imshow(G)
plt.title("After")
Applied picture.py

出力結果はこんな感じになります。うまく画像をぼかすことができました。

平滑化フィルタの実行

平滑化フィルタの実行

次に、エッジ抽出フィルタの畳み込み演算を設計します。フィルタは以下のとおりです。

\begin{align} H'' = \begin{pmatrix} 0 & 1 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 0 \end{pmatrix} \end{align}
36 件

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

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

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

非情報科学研究者 (特に生物系研究者) が ImageJ plugin を作るために超えるべき壁やTipsをまとめます。今回は、面積の平均値や中央値、分散を出力するためのコードをご紹介します。
湖城 恵 | 10,086 view
Extracting Straight Lines〜画像から境界線を効率よく求める方法〜

Extracting Straight Lines〜画像から境界線を効率よく求める方法〜

本記事では,IEEE Transactions on Pattern Analysis and Machine Intelligence に投稿された,「Extracting Straight Lines」の論文を説明し,実装を行います.1986年に投稿された少し古めの論文ですが,アイディアは非常に面白いです.
Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

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

画像処理の一つ,モルフォロジー変換をPython と OpenCVのライブラリを用いて実装し,それを2値画像に対して適用します.
Julia と画像処理②〜画像のセグメンテーション(Seed Region Growing とFelzenszwalbアルゴリズム)〜

Julia と画像処理②〜画像のセグメンテーション(Seed Region Growing とFelzenszwalbアルゴリズム)〜

プログラミング言語「julia」を用いて画像処理を行います.インストールに続き,今回は画像のセグメンテーションのライブラリを用いて,セグメンテーションを行います.
等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

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

前回の記事「等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 1」の続きです. 実際に実装をして,写像を確かめてみます.

この記事のキーワード

この記事のキュレーター

亀谷 桃子 亀谷 桃子