Python OpenCV3でBilateralオペレータを使って平滑化

Share on Facebook
Pocket
LINEで送る
Bookmark this on Google Bookmarks

Birateralオペレータを使うとGaussianオペレータのときよりもノイズの少なく平滑化できる。

 

前提

ディレクトリ構成などはこことかこことか。

&nbsp

元画像

Gaussianオペレータと比較するため、カラスの画像(karasu.jpg)を使う。
karasu

 

BilateralFilterオペレータ

Pythonの場合、移動平均を行う場合はBilateralFilterメソッドを使う。
BilateralFilterメソッドの使い方は以下のとおり。

# 平均化する画素の周囲の大きさを指定する。
# 25の場合、個々の画素の地点の周囲25×25マスの平均をとる。
# 数値が大きいほどぼやける。
average_square_size = 25

# 色空間に関する標準偏差
sigma_color = 1

# 距離空間に関する標準偏差
sigma_metric = 1

# Bilateralオペレータを使用して平滑化
img_bilateral = cv2.bilateralFilter(img_src, 
                             average_square_size,
                             sigma_color,
                             sigma_metric)

sourceディレクトリ配下にbilateral.pyを作成する。

# -*- coding: utf-8 -*-

import cv2
import numpy as np

if __name__ == '__main__':
    
    # 画像の読み込み
    img_src = cv2.imread("./image/karasu.jpg", 1)

    # 平均化する画素の周囲の大きさを指定する。
    # 25の場合、個々の画素の地点の周囲25×25マスの平均をとる。
    # 数値が大きいほどぼやける。
    average_square_size = 25

    # 色空間に関する標準偏差
    sigma_color = 1

    # 距離空間に関する標準偏差
    sigma_metric = 1

    # Bilateralオペレータを使用して平滑化
    img_bilateral = cv2.bilateralFilter(img_src, 
                                 average_square_size,
                                 sigma_color,
                                 sigma_metric)

    # 表示
    cv2.imshow("Show BILATERAL Image", img_bilateral)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

実行してみる。

(opencv_python)$ python bilateral.py 

Gaussianオペレータのとき

スクリーンショット 2015-07-04 0.30.06

 

よりもよりノイズが少ないことがわかる。

 

Follow me!

コメントを残す

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