【Python/OpenCV】DoGフィルタでぼかし・輪郭抽出

この記事では、Python版OpenCVでDoGフィルタを実装し、画像をぼかして輪郭を抽出する方法をソースコード付きで解説します。

DoGフィルタ

DoG(Difference of Gaussian)とは、 \sigmaの値が異なる2つのガウシアンフィルタ画像の差分です。
DoGフィルタは、LoGフィルタに近似できます。
そして、計算量も小さいため、LoGフィルタの代わりなどでよく用いられます。
【詳細】DoGフィルタの原理・特徴・計算式

今回は、Python言語とOpenCVを用いてDoGフィルタを実装してみました。

書式

dst = cv2.GaussianBlur(src, ksize, sigmaX)
パラメータ名 説明
src 入力画像
ksize カーネルサイズ
sigmaX ガウス分布の\sigma_x
dst 出力画像

ソースコード(Python3+OpenCV3)

サンプルプログラムのソースコードです。

#-*- coding:utf-8 -*-
import cv2
import numpy as np

# DoGフィルタ
def DoG(gray, ksize, sigma1, sigma2):
    # 標準偏差が異なる2つのガウシアン画像を算出
    g1 = cv2.GaussianBlur(gray, ksize, sigma1)
    g2 = cv2.GaussianBlur(gray, ksize, sigma2)
    # 2つのガウシアン画像の差分を出力
    return g1 - g2
 

def main():
    # 入力画像を読み込み
    img = cv2.imread("input.jpg")

    # グレースケール変換
    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

    # DoGフィルタ処理
    dst = DoG(gray, (3,3), 1.3, 2.6)

    # 結果を出力
    cv2.imwrite("output.jpg", dst )
    

if __name__ == "__main__":
    main()

※動作には、OpenCVライブラリのインストールが必要です。

実行結果

サンプルプログラムの実行結果です。

■入力画像(左)と出力画像(右)

【おすすめ記事】
PythonでOpenCV入門 サンプル集
【Python】画像処理プログラミング入門
【画像処理入門】アルゴリズム&プログラミング

シェア&フォローお願いします!