Python版OpenCVでDoGフィルタを実装し、画像の輪郭を検出する方法をソースコード付きで解説します。
DoGフィルタとは
DoG(Difference of Gaussian)とは、ガウス関数の標準偏差$\sigma$の値が異なる2つのガウシアンフィルタ画像の差分です。DoGフィルタは、LoGフィルタに近似となり、計算量も小さいため、LoGフィルタの代わりの輪郭検出用フィルタとして用いられます。DoGフィルタの仕組みの詳細は以下ページで別途解説しています。

【画像処理】DoGフィルターの原理・特徴・計算式
画像処理におけるDoGフィルターの原理・特徴・計算方法についてまとめました。
今回は、Python言語とOpenCVを用いてDoGフィルタを実装してみました。
サンプルコード①
以下は、「cv2.GaussianBlur」で標準偏差σの値が異なる2つのガウシアンフィルタを実装し、その差分を取ることでDoGフィルタを実装したサンプルコードです。
実行結果
サンプルプログラムの実行結果です。輪郭は検出できていますが、パラメータを調整してもノイズも多めとなりました。
■入力画像(左)と出力画像(右)
サンプルコード②
以下は、Python版OpenCVの「cv2.filter2D」でDoGフィルタを実装したサンプルコードです。
実行結果
サンプルプログラムの実行結果です。
うまくパラメータを調整することで、サンプルコード①よりもノイズが抑えることができました。
■入力画像(左)と出力画像(右)
同様に、Python版OpenCVの「cv2.filter2D」でLoGフィルタを実装した際の処理時間は約7.9ミリ秒、今回のDoGフィルタだと約2.4ミリ秒と3倍以上高速化できています。

【Python/OpenCV】LoGフィルタで輪郭検出
Python版OpenCVでLoGフィルタを実装し、ノイズを抑えて画像の輪郭を検出する方法をソースコード付きで解説します。
関連ページ

【PythonとOpenCVで画像処理超入門】使い方とサンプルコードを解説
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。
コメント