目次
概要
メディアンフィルタについて解説し、OpenCV の cv2.medianBlur
を使用してメディアンフィルタを適用する方法を紹介します。
メディアンフィルタ
メディアンフィルタとは、フィルタ内の画素を小さい順にソートしたときに真ん中にくる画素を出力する非線形フィルタです。 画像の平滑化、ノイズに利用できます。
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)
コメント
コメント一覧 (0件)
前半と後半の内容がかみ合ってない・・・
コメントありがとうございます。
記載内容に誤りがあったので、内容を修正しました。