Warning: Undefined variable $position in /home/pystyles/pystyle.info/public_html/wp/wp-content/themes/lionblog/functions.php on line 4897

OpenCV – メディアンフィルタの仕組みと cv2.medianBlur の使い方

OpenCV – メディアンフィルタの仕組みと cv2.medianBlur の使い方

概要

メディアンフィルタについて解説し、OpenCV の cv2.medianBlur を使用してメディアンフィルタを適用する方法を紹介します。

Advertisement

メディアンフィルタ

メディアンフィルタとは、フィルタ内の画素を小さい順にソートしたときに真ん中にくる画素を出力する非線形フィルタです。 画像の平滑化、ノイズに利用できます。

メディアンフィルタ

cv2.medianBlur

cv2.medianBlur() でバイラテラルフィルタを適用できます。

cv2.medianBlur(src, ksize[, dst]) -> dst
  • 引数
    • src: 入力画像
    • ksize: フィルタサイズ。1以上の奇数でなければなりません。(例: 1, 3, 5, …)

画像に含まれるノイズを除去する

フィルタ内の中央値をとるので、外れ値である画像に含まれるノイズを除去できます。 カーネルサイズを大きくすると、平滑化されて画像がぼやけてしまうのでノイズ除去の目的で使用する場合、フィルタサイズは ksize=3 がオススメです。

sample.jpg

In [1]:
import cv2
import numpy as np
from IPython.display import Image, display


def imshow(img):
    """ndarray 配列をインラインで Notebook 上に表示する。
    """
    ret, encoded = cv2.imencode(".jpg", img)
    display(Image(encoded))

# 画像を読み込む。
img = cv2.imread("sample.jpg")

# メディアンフィルタを適用する。
dst = cv2.medianBlur(img, ksize=3)
imshow(dst)

メディアンフィルタにより、白いノイズが削除できたことを確認しました。

画像を平滑化する

メディアンフィルタは画像の平滑化にも利用できます。フィルタサイズを大きくするほど、ぼやけた画像になります。

In [2]:
# 画像を読み込む。
img = cv2.imread("sample.jpg")

# メディアンフィルタを適用する。
dst = cv2.medianBlur(img, ksize=3)
imshow(dst)
In [3]:
# メディアンフィルタを適用する。
dst = cv2.medianBlur(img, ksize=5)
imshow(dst)
In [4]:
# メディアンフィルタを適用する。
dst = cv2.medianBlur(img, ksize=7)
imshow(dst)