Python版OpenCV(cv2.dilate, cv2.erode)もしくはNumPyで膨張・収縮フィルタ処理を実装する方法をソースコード付きで解説します。
【はじめに】膨張・収縮フィルタとは
膨張・収縮フィルタとは、二値画像からノイズ除去したりするのに使われるアルゴリズムです。
– | 処理内容 |
---|---|
膨張処理 | 白色(255)の領域を膨張 |
収縮処理 | 白色(255)の領域を収縮 |
参考記事 | 膨張・収縮処理の原理・特徴・計算式 |
■クロージング処理の例
※入力画像(左)→膨張画像(中央)→収縮画像(右)
動画解説
今回は、以下の2通りの方法で処理を実装してみました。
– | 概要 |
---|---|
方法① | NumPyで膨張・収縮フィルタのアルゴリズムを書いて実装 |
方法② | OpenCVで簡単に実装 |
書式
dst = cv2.dilate(src, kernel, iterations) # 膨張処理 dst = cv2.erode(src, kernel, iterations) # 収縮処理
パラメータ名 | 説明 |
---|---|
src | 入力画像 |
kernel | カーネル(1の近傍画素を膨張・収縮処理に利用) |
dst | 出力画像 |
ソースコード(Python3+OpenCV3)
サンプルプログラムのソースコードです。
【方法1】
【方法2】
※動作には、OpenCVライブラリのインストールが必要です。
– | 関連記事 |
---|---|
1 | PythonでOpenCV入門 サンプル集 |
2 | 【Python】画像処理プログラミング入門 |
3 | 【画像処理入門】アルゴリズム&プログラミング |
コメント
参考にさせていただきました。
ありがとうございます。
1つ質問したいことがあります。
カーネルの値が6に設定されていますが、8近傍の場合3×3のカーネルサイズのため、値を3に設定するべきではないのでしょうか?
よろしくお願いします。
※中村和樹 様
ご報告ありがとうございます。
ご指摘頂いたとおり、「8近傍」という記載は誤りですね。
該当箇所は修正致しました。