第6回CADセミナー@岐阜 演習7/2値画像の膨張・収縮処理
2値画像の膨張・収縮処理を取り扱います.
膨張収縮処理とは,2値画像の白い領域もしくは黒い領域を
広げたり,小さくしたりする処理です.
もっとも簡単なアルゴリズムは,
- 注目画素の8近傍のうち,1つでも白(黒)があったら,注目画素を白(黒)にする
というものです.
この処理は,一般的には,モルフォロジ処理と呼ばれます.
この演習では,まず膨張収縮処理を構築します.
膨張処理はDilation(ダイレーション),収縮処理はErosion(エロージョン)と呼ばれます.
この2つの処理を組み合わせた演算に,Opening, Closingという処理があります.
Openingは,erosion処理後にdilation処理を行う処理であり,Closingは,dilation処理後に
erosionを行う処理です.
それらの構築についても演習を行います.
白い領域の膨張処理(Dilation)
この演習では,白い領域の膨張処理を実行します.
最初は,画像の平均値で2値化を行います.
そして,その2値画像にDilation処理を行います.
プログラムのmain.cはこちら.すべて入っています.
コンパイル例:gcc proc main.c
実行例:proc chest.raw 512 512 out.raw
白い領域の収縮処理(Erosion)
この演習では,白い領域の収縮処理を実行します.
最初は,画像の平均値で2値化を行います.
そして,その2値画像にErosion処理を行います.
プログラムのmain.cはこちら.すべて入っています.
コンパイル例:gcc proc main.c
実行例:proc chest.raw 512 512 out.raw
白い領域のOpening処理
つぎに,学んだ2つの処理を組み合わせた処理を実現します.膨張,収縮処理は,使いやすいように別ファイルにしました.したがって,コンパイル方法が変わります.
コンパイル例:gcc proc main.c dilation.c erosion.c
実行例:proc chest.raw 512 512 out.raw
プログラムのmain.cはこちら.
膨張処理:dilation.cはこちら.
収縮処理:erosion.cはこちら.
白い領域のClosing処理
つぎに,学んだ2つの処理を組み合わせた処理を実現します.膨張,収縮処理は,使いやすいように別ファイルにしました.さらに便利にコンパイルできるようにMakefileを用意しました.Makefileの詳細については演習3:諧調処理の符号無し10ビット画像の処理についてを参照してください.
したがって,コンパイル方法が変わります.
コンパイル例:make のみ
実行例:proc chest.raw 512 512 out.raw
プログラムのmain.cはこちら.
膨張処理:dilation.cはこちら.
収縮処理:erosion.cはこちら.
さらには...
膨張処理,収縮処理を繰り返すとどのような画像になりますか?実験してみましょう.
同様に,Opening, Closingを繰り返すとどのような画像になりますか?実験してみましょう.
以上,画像の膨張,収縮処理の例を示しました.まとめると,
- 2値画像の膨張収縮処理を学んだ
- Dilation, Erosionというモルフォロジ処理である
- 2つの処理を組み合わせたOpening, Closing処理もある.
- Makefileをつかったコンパイル方法
について,演習を行いました.
なお,Dilation, Erosionを濃淡画像に拡張することも比較的簡単に可能です.
たとえば,8近傍での処理を考えた場合,Dilationでは近傍中の最大値を中心画素に置き換えます.
また,Erosionでは,近傍中の最小値を中心画素に置き換えるようにします.
最大値,最小値を見つける処理が必要になりますが,それは比較的簡単です.
興味ある方は試してみてください.