【Python/OpenCV】DoGフィルタで輪郭検出

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

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

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

コメント