画像の『膨張・収縮処理』とは、一般に2値化された画像に対し行われ、ターゲットとなるピクセルの周辺に1ピクセルでも 白があれば白に置き換える膨張処理(Dilation)と、逆に1ピクセルでも 黒があれば黒に置き換える収縮処理(Erosion)からなり、ノイズを消す処理に用いるとのこと。
詳しくは 以下のサイトを参照ください かなり詳しく説明されています。
http://imagingsolution.blog107.fc2.com/blog-entry-101.html
http://d.hatena.ne.jp/shokai/20090203/1233608481
Android版OpenCvでは
膨張処理はImgprocクラスのdilateメソッドで行い、収縮処理はerodeメソッドで行います。
static void dilate(Mat src, Mat dst, Mat kernel)
static void dilate(Mat src, Mat dst, Mat kernel, Point anchor)
static void dilate(Mat src, Mat dst, Mat kernel, Point anchor, int iterations)
static void dilate(Mat src, Mat dst, Mat kernel, Point anchor, int iterations, int borderType)
static void dilate(Mat src, Mat dst, Mat kernel, Point anchor, int iterations, int borderType, Scalar borderValue)
static void erode(Mat src, Mat dst, Mat kernel)
static void erode(Mat src, Mat dst, Mat kernel, Point anchor)
static void erode(Mat src, Mat dst, Mat kernel, Point anchor, int iterations)
static void erode(Mat src, Mat dst, Mat kernel, Point anchor, int iterations, int borderType)
static void erode(Mat src, Mat dst, Mat kernel, Point anchor, int iterations, int borderType, Scalar borderValue)
Mat src : 元の画像
Mat dst : 変換後画像
Mat kernel : 膨張または収縮処理のために用いる周辺領域の大きさを示すMat
defaultでは 3*3 つまり上下左右
Point anchor : 要素内のアンカー位置 defaultはkernelの中心を表す特別な値(-1,-1)です。
int iterations : 実行回数
int borderType : ピクセル外挿手法
Scalar borderValue :
borderType = BORDER_CONSTANT(定数指定)の場合 境界外に埋める色を示す定数
borderType borderValue については 『画像を回転する』 を参照してください。
ノイズ・ひび割れの除去のため dilateメソッド・erodeメソッドを単独で使うのではなく、収縮⇒膨張で 小さなゴミを消し 膨張⇒収縮でひび割れを押しつぶす効果があるとのこと。(ここにサンプルがあります)
Kernelを変えた実験は nooj loonさんの ぎーくなぁど に詳しく載っているので省略し ここではDefaultの3*3 とし anchor=Point(-1、-1)のまま実行回数を変えて結果を比較してみます。
テストデータ |
カメラで撮影した画像を 透視変換で直行化・グレースケール化した後 2値化したデータ(下図の最下段の画像)をテストデータとします。
収縮 ⇒ 膨張 |
収縮を先に行って続けて膨張処理をやってみました。
1段目:上記元画像
2段目:収縮1回後 膨張1回
3段目:収縮2回後 膨張2回 うーーーむ なんか石と石の間が潰れてる !!
膨張 ⇒ 収縮 |
今度は膨張を先に行って続けて収縮処理をやってみました。
1段目:上記元画像
2段目:膨張1回後 収縮1回
3段目:膨張2回後 収縮2回 あらら 線が消えちゃった!!
ノイズ除去とかひび割れ退治に有効とはいえ適切な手順・パラメータは 元画像に依存しそう 難しい!!!
by Android2.2 with OpenCv 2.3.1 for Android |