2020年5月24日日曜日

【OpenCV】フィルタリングによる画像のスムージング

 画像処理ライブラリOpenCVにおける画像のスムージング処理について説明する。スムージング処理により画像中の高周波成分(エッジやノイズ)を消すことができる。使用する関数は以下の通り。
blur
GaussianBlur
medianBlur
bilateralFilter
このうちbilateralFilterを除いた3つの関数について説明する。


OpenCVを使うには次のようにインポートが必要。
import cv2

例に用いる画像は以下の'image.png'を使用。




1. blur

 blurはカーネル内の全画素の平均値を適用する。
5x5のカーネルを適用した場合。色の異なる図形の境界部分で色が平均化されることでエッジのギザギザがスムージングされる。ドット状ノイズは色がぼやけるが消しきれない。

import cv2

img = cv2.imread('image.png')
dst = cv2.blur(img, (5, 5))

cv2.imwrite('blur.png', dst) 

実行結果





2. GaussianBlur

 GaussianBlurはカーネル内の全画素の平均値ではなく、注目画素からの距離で重みを付けた値を用いる(近い画素ほど寄与が大きい)。blurに比べコンパクトなぼかしで境界のギザギザを消すことができる。ドット状ノイズは色がぼやけるが消しきれない。

import cv2

img = cv2.imread('image.png')
dst = cv2.GaussianBlur(img, (5, 5), 0)

cv2.imwrite('GaussianBlur.png', dst) 

実行結果





3. medianBlur

 medianBlurはカーネル内の全画素の中央値を適用する。ドット状ノイズが無視されるためドット状ノイズの消去が可能。一方はっきりした境界はスムージングされない。

import cv2

img = cv2.imread('image.png')
dst = cv2.medianBlur(img, 5)

cv2.imwrite('medianBlur.png', dst) 

実行結果





4. リファレンス

OpenCV > Smoothing Images

使用したバージョン:Python 3.7.0 / OpenCV 4.0.0

0 件のコメント:

コメントを投稿