Python OpenCV 空間フィルタ #6

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

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

前回まではエッジ抽出でしたが、今回からは逆にぼかすフィルタリングについてまとめていきます。

画像の細部まではっきりしすぎていて視覚的にノイズに感じる場合は逆にぼんやりさせることで人間の目にとって綺麗に見せることができます。くっきりするだけが常に良いわけでは無いのです。人工的な画像はノイズ無しでくっきりさせることができますが自然画にはノイズが多く含まれます。そのためぼかす技術も重要になります。

ではぼかすとはどのような処理をすればよいのでしょうか?注目画素に対して周囲の画素との差がくっきりしないようにすればよいですね。エッジ抽出とは逆の動作になります。まずはイメージ図を見てください。

画像1

注目画素の8近傍の画素をあわせて平均をとるのが最も簡単な方法です。注目画素のみ2倍してから平均値をとることもあります。これが基本的な考え方です。周囲の画素との平均をとることで極端に値が外れている画素をぼやかす技術ですね。このようなフィルタを平均値フィルタと呼びます。そのままです。

では以下のコードを一緒に見ていきましょう。原画像は 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)

filtered = cv2.blur(gray_image, ksize=(3, 3))

cv2.imshow('filtered', filtered)

cv2.waitKey(0)
cv2.destroyAllWindows()

読み込んだ画像をグレイスケールに変換し、OpenCV 標準の blur() を使います。カーネルサイズを 3 x 3 に指定しています。

以下が出力です。キャプチャした画像だとわかりにくいのですが自分でコードを作って変換してみると原画像よりぼんやりしていることがわかると思います。

画像2

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

では、ごきげんよう。


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