第6回CADセミナー@岐阜 演習7/2値画像の膨張・収縮処理

2値画像の膨張・収縮処理を取り扱います.
膨張収縮処理とは,2値画像の白い領域もしくは黒い領域を 広げたり,小さくしたりする処理です.

もっとも簡単なアルゴリズムは, というものです.
この処理は,一般的には,モルフォロジ処理と呼ばれます.

この演習では,まず膨張収縮処理を構築します.
膨張処理は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を繰り返すとどのような画像になりますか?実験してみましょう.


以上,画像の膨張,収縮処理の例を示しました.まとめると, について,演習を行いました.

なお,Dilation, Erosionを濃淡画像に拡張することも比較的簡単に可能です.
たとえば,8近傍での処理を考えた場合,Dilationでは近傍中の最大値を中心画素に置き換えます.
また,Erosionでは,近傍中の最小値を中心画素に置き換えるようにします.
最大値,最小値を見つける処理が必要になりますが,それは比較的簡単です.
興味ある方は試してみてください.