この記事では、Python版OpenCVでDoGフィルタを実装し、画像をぼかして輪郭を抽出する方法をソースコード付きで解説します。
DoGフィルタ
DoG(Difference of Gaussian)とは、
の値が異なる2つのガウシアンフィルタ画像の差分です。
DoGフィルタは、LoGフィルタに近似できます。
そして、計算量も小さいため、LoGフィルタの代わりなどでよく用いられます。
【詳細】DoGフィルタの原理・特徴・計算式
今回は、Python言語とOpenCVを用いてDoGフィルタを実装してみました。
書式
dst = cv2.GaussianBlur(src, ksize, sigmaX)
| パラメータ名 | 説明 |
|---|---|
| src | 入力画像 |
| ksize | カーネルサイズ |
| sigmaX | ガウス分布の |
| 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で画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。


コメント