【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版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。
この記事を書いた人
西住技研

Python使用歴10年以上。研究、仕事、趣味でデータ分析や作業自動化などに活用してきたノウハウを情報発信しています。
詳しいプロフィールやお問合せはこちらのページまで。
YoutubeX(旧Twitter)でも情報発信中です!

西住技研をフォローする
OpenCV

コメント