私は実際に頭側の輪郭検出に取り組んでいます。写真は白い壁の前で撮影されるため、しきい値で処理された写真に対してスネーク(アクティブな輪郭モデル アルゴリズム) を実行することにしました。
問題は、ヘビが鼻、口、口の下の周りにうまくフィットしないことです (下の写真でわかるように)。
//load file from disk and apply threshold
IplImage* img = cvLoadImage (file.c_str (), 0);
cvThreshold(img, img, 170, 255, CV_THRESH_BINARY);
float alpha = 0.1; // Weight of continuity energy
float beta = 0.5; // Weight of curvature energy
float gamma = 0.4; // Weight of image energy
CvSize size; // Size of neighborhood of every point used to search the minimumm have to be odd
size.width = 5;
size.height = 5;
CvTermCriteria criteria;
criteria.type = CV_TERMCRIT_ITER; // terminate processing after X iteration
criteria.max_iter = 10000;
criteria.epsilon = 0.1;
// snake is an array of cpt=40 points, read from a file, set by hand
cvSnakeImage(img, snake, cpt, &alpha, &beta, &gamma, CV_VALUE, size, criteria, 0);
アルファ/ベータ/ガンマ パラメータまたは反復回数を変更しようとしましたが、以下の出力ショーよりも良い結果が見つかりませんでした。なぜ鼻がカットされ、顔が口の周りにフィットしないのか理解できません。曲率には十分なポイントがあると思いますが、いくつかの (>2) ポイントで構成された線がまだいくつかあります。
入力画像:
出力スネーク :
青:手動で設定したポイント
緑 : 出力スネーク
どんな助けやアイデアも大歓迎です。ありがとう !