Featured image of post 外れ値に強いMedianBlur

外れ値に強いMedianBlur

本記事はQrunchからの転載です。


単純平滑化の場合には、局所領域内での平均を取るため、周辺とは大きく異なるピクセル値をもつピクセルがあると、その影響が大きすぎて上手くいかない場合があります。 そのようなケースでは中央値を使うようにすると、上手くいくかもしれません。

medianBlur

OpenCVではmedianBlurという関数で局所領域内の中央値を使うような平滑化をおこなえます。

以下がmedianBlurを実際に実行したコードになります。

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('noro-min.jpeg')

blur = cv2.medianBlur(img, ksize=5)
blur = cv2.cvtColor(blur, cv2.COLOR_BGR2RGB)
plt.imshow(blur[:, :, ::-1])
plt.show()

人工的に画像にノイズを乗せて、blurとmedianBlurを適用した結果を比べてみます。

ノイズを乗せた画像 blurを適用した画像 medianBlurを適用した画像

中央値を使うことで、ノイズを上手く取り除くことができています。 ただし、文字の部分などは結構ボケるようになりました。中央値を使うと、白い背景と近い部分のピクセルはすべて白に置き換えられてしまうからです。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。