2013年1月29日火曜日

OpenCVによる画像の膨張と縮小


FloodFillなどの処理により、マスク画像を取得した後、ノイズ除去や欠落部分の補完に、モルフォロジー演算を行う

よく使用するのは、
画像のノイズやひげを除去する 
cv::erode(from, to, cv::Mat(), cv::Point(-1,-1), 1);

画像の欠損部を補完する
cv::dilate(from, to, cv::Mat(), cv::Point(-1,-1), 1);
がある。

cv::Mat()を指定するとデフォルトのサイズ3x3が選択される

それ以外のサイズを用いる場合には
cv::Mat element(5,5,CV_8U, cv::Scalar(1))などで、エレメントを指定する

サイズは正方形ではなく、長方形にすれば、縦方向のエッジのみ接続するなどできる

この手法は、Mastering OpenCV with Practical Computer Vision Project chap. 5でナンバープレート検出に使用されている

それぞれ、最後のパラメータは適用する回数であり、複数化適用することによりセグメントの分離や結合することができる

ただし、それぞれ1回演算を行うと、サイズが縮小、あるいは拡大するので、サイズを維持する場合には、反対の処理を行う必要がある


OpenCVでは、利便性を考え、複数を処理を行う morphologyEx 関数も準備されいる。

cv::morphologyEx(from, to, op, cv::Mat(), cv::Point(-1,-1), 1)

3番目のパラメータは、処理であり、
MORPH_OPEN オープニング
MORPH_CLOSE クロージング
など指定する


参考
詳解 OpenCVの 5.3の画像のモルフォロジー P119
OpenCV 2 Computer Vision Application Programming Cookbook Chap.5 P117

0 件のコメント:

コメントを投稿