Python OpenCV 空間フィルタ #8

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

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

今回もぼかすフィルタリングとしてメディアンフィルタについてまとめてみます。

メディアンはわかりますか?中央値と呼ばれる代表値の 1 つです。以前に代表値についてまとめた記事がありますので以下の記事も参考にしてください。

メディアンは数を大きさの順に並べ中央になる数のことを言います。数が偶数個の場合のメディアンの定義などは上記まとめ記事を参考にしてください。今、注目画素と近傍8画素の画素値を大きさの順に並べ中央になる数を新たな注目画素値とします。フィルタリングとしては簡単ですね。

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

cv2.imshow('filtered', filtered)

cv2.waitKey(0)
cv2.destroyAllWindows()

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

以下が出力です。正直なところ差がわかりません。

画像1

このカーネルサイズを 15 x 15 に指定して実行すると以下のようになります。相当にぼんやりしていますね。15 x 15 の広い範囲で中央値をとると元の値に対して大きく異なる値が選択されるためだと思います。

画像2

カーネルサイズをいろいろ変更して動作を確認してみてください。

では、ごきげんよう。


いいなと思ったら応援しよう!