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
がオススメです。
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)

-
前の記事
OpenCV – 長方形、円、線、ポリゴンなどを描画する方法 2020.09.02
-
次の記事
OpenCV – バイラテラルフィルタの仕組みと cv2.bilateralFilter の使い方 2020.09.03