[Python][OpenCV] ノイズ除去する画像処理手法 – メディアンフィルタ

 今回はノイズ除去できる画像処理手法であるメディアンフィルタについて説明していきます。

メディアンフィルタの仕組み


 対象の画素をp(i, j)とすると、その周囲数ピクセルの輝度の中央値をp(i,j)の値とする。これを全ピクセルに適用します。

 周辺の何ピクセルを見るかの値をカーネルサイズと言います。この値を変えるとどう変わるかはこの後説明します。

どういうノイズ除去に使えるか・デメリット


 メディアンフィルタは点々になっているノイズや細かい線を消すことができます。ただし、エッジがぼやけたり、画像全体がぼやけてしまいます。

 カーネルサイズが大きくなると、ノイズをより消せる反面、エッジがぼやけたり、画像全体もぼやけてしまいます。

 例えばこの夜景の絵の画像。

 メディアンフィルタを適用すると星が消えてます。カーネルサイズを上げるとより大きい星が消える反面、下の建物の輪郭がぼやけていきます。

 次に古い感じの線が入った画像。

 メディアンフィルタを適用したら、画像全体がぼやけるものの細い線がある程度消えていることが分かります。

Python OpenCVを使った実装


 Python、OpenCV使えばこれだけで済む。

import cv2

img = cv2.imread(ファイルパス)
kernel_size = 3
img = cv2.medianBlur(img, kernel_size)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です