Python OpenCV 空間フィルタ #2

株式会社リュディアです。Python を使った画像処理として OpenCV を使った方法をまとめていきます。

前回までの Python OpenCV 空間フィルタ のまとめへのリンクは以下を参考にしてください。

前回はエッジ抽出を行う微分フィルタについてまとめました。今回もエッジ抽出を行う Prewitt (プレヴィット)フィルタについてまとめてみます。微分フィルタに平滑化処理を追加したものと考えてください。ノイズの影響を受けにくくするためです。

では Prewitt フィルタでどのようなカーネルを使うのか見てみましょう。以下の例を見てください。

画像1

X方向については注目画素の左右の列Y 方向については注目画素の上下の行も考慮していることがわかりますね。これがノイズの影響を受けにくくするための平滑化処理の役割を果たしています。具体的なコードでカーネルの値を変えて結果がどのように変わるのか見るのもよいと思います。

では以下のコードを一緒に見ていきましょう。原画像は Lena です。

import cv2
import numpy as np

filebase = 'lena'
path = filebase + '.tiff'
image = cv2.imread(path, 1)
gray_image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

kernel_x = np.array([[0, -1, 0],
                    [0,  0, 0],
                    [0,  1, 0]])
kernel_y = np.array([[ 0,  0, 0],
                    [-1,  0, 1],
                    [ 0,  0, 0]])

prewitt_x = cv2.filter2D(gray_image, cv2.CV_64F, kernel_x)
prewitt_y = cv2.filter2D(gray_image, cv2.CV_64F, kernel_y)

cv2.imshow('prewitt_x', prewitt_x)
cv2.imshow('prewitt_y', prewitt_y)

cv2.waitKey(0)
cv2.destroyAllWindows()

読み込んだ画像をグレイスケールに変換し、X方向のカーネルと Y方向のカーネルでそれぞれ処理したPrewitt フィルタ結果が別ウィンドウで表示されます。以下、X方向、Y方向の順です。

画像2

画像3

今回はエッジ抽出フィルタの 1 つである Prewitt フィルタについてまとめました。

OpenCV 空間フィルタに関するまとめの続きは以下からどうぞ。

では、ごきげんよう。


この記事が気に入ったらサポートをしてみませんか?