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

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

DoMフィルタ

DoM(Difference of Median)とは、 カーネルサイズが異なる2つのメディアンフィルタ画像の差分です。
DoMフィルタは、積分画像を使って処理を高速化できます。
そのため、DoGの代わりに用いられます。
【詳細】DoMフィルタの原理・特徴・計算式

今回は、Python言語とOpenCVのメディアンフィルタを用いてDoMフィルタを実装してみました。

書式

dst = cv2.medianBlur(src, ksize)
パラメータ名 説明
src 入力画像
kernel フィルタのカーネルサイズ(3なら8近傍)
dst 出力画像

ソースコード(Python3+OpenCV3)

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

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

def DoM(gray, ksize1, ksize2):

    # カーネルサイズの異なる2つのメディアンフィルタ処理
    m1 = cv2.medianBlur(gray, ksize1)
    m2 = cv2.medianBlur(gray, ksize2)

    return m2 - m1


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

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

    # DoMフィルタ処理
    dst = DoM(gray, 3, 5)

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

if __name__ == "__main__":
    main()

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

実行結果

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

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

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

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