Q
画像の収縮と膨張をしようと思いましたが、方法が良く分かりません。モフォロジーの中のopeningとclosingで出来るようですが、概念的に分かりません。膨張と収縮を行う際のStructElementsの設定方法を教えてください。
A
サンプルプログラムでは収縮の方法について3パターン紹介しています。
1. opening_circle
2. erosion_circle
3. opening
この順序でプログラムしました。表示している結果はフィルタ前後の差分のみです。openingとerosionの違いがお分かり頂けると思います。erosion_circleは領域の境界にそって円をのせ、その部分を領域から取り除くといったイメージです。円を使うと境界から一定距離だけ収縮します。縦長の矩形を使うと、縦方向には大きく、横方向には小さく収縮します。これに対してopening_circleは、領域に円を重ねていき、円の内部に隙間がある場合にその部分を領域から取り除きます。従って、三角形の角のみがopening_circleにより取り除かれました。openingの場合は円ではなく任意の形状を扱う事ができます。形状の指定には領域を使いますが、その生成の例としてgen_rectangle2を使いました。Phiを変えると7つの円部分の変化が良くわかり、ご理解を深めるのに役立つと思います。
もう少しモフォロジーについて整理しましょう。正確にはモフォロジーは領域モフォロジーとグレイモフォロジーの2つに分けることができます。ここでは領域のモフォロジーについて説明します。
重ねあわせた画像で画素間のANDをとるのが侵食(erosion)、ORをとるのが膨張(dilation)です。これらの組み合わせによって、画像中の対象物の形状に関するいろいろな処理が可能となります。侵食の次に膨張を行うのがopeningであり、細かい雑音を除去することができます。膨張の次に侵食を行うのが、closingであり、物体中の穴を埋めることができます。侵食・膨張処理の拡張であり、これらは一般に2値画像に対して行われます。HALCONではそれぞれに対して円形、長方形、そして任意の形状で処理を行うことができます。初めはopeningとclosingの概念がわかりにくいかもしれません。openingは「もし切れるならきれろ」、closingは「もしつながるならつなげろ」と覚えると良いかもしれません。
関連オペレーター
erosion_circle
opening
opening_circle
ファイル
サンプルプログラムはmorphology.zipをダウンロードしてください。
morphology.dev
opening_circle、erosion_circle、openingを使ったサンプルプログラム
morphology.txt
opening_circle、erosion_circle、openingを使ったサンプルプログラム(テキスト形式)
morphology2.bmp
morphology.devで使用する画像