MCPcopy Create free account
hub / github.com/creatale/node-dv / initGMMs

Function initGMMs

deps/opencv/modules/imgproc/src/grabcut.cpp:361–396  ·  view source on GitHub ↗

Initialize GMM background and foreground models using kmeans algorithm. */

Source from the content-addressed store, hash-verified

359 Initialize GMM background and foreground models using kmeans algorithm.
360*/
361static void initGMMs( const Mat& img, const Mat& mask, GMM& bgdGMM, GMM& fgdGMM )
362{
363 const int kMeansItCount = 10;
364 const int kMeansType = KMEANS_PP_CENTERS;
365
366 Mat bgdLabels, fgdLabels;
367 vector<Vec3f> bgdSamples, fgdSamples;
368 Point p;
369 for( p.y = 0; p.y < img.rows; p.y++ )
370 {
371 for( p.x = 0; p.x < img.cols; p.x++ )
372 {
373 if( mask.at<uchar>(p) == GC_BGD || mask.at<uchar>(p) == GC_PR_BGD )
374 bgdSamples.push_back( (Vec3f)img.at<Vec3b>(p) );
375 else // GC_FGD | GC_PR_FGD
376 fgdSamples.push_back( (Vec3f)img.at<Vec3b>(p) );
377 }
378 }
379 CV_Assert( !bgdSamples.empty() && !fgdSamples.empty() );
380 Mat _bgdSamples( (int)bgdSamples.size(), 3, CV_32FC1, &bgdSamples[0][0] );
381 kmeans( _bgdSamples, GMM::componentsCount, bgdLabels,
382 TermCriteria( CV_TERMCRIT_ITER, kMeansItCount, 0.0), 0, kMeansType );
383 Mat _fgdSamples( (int)fgdSamples.size(), 3, CV_32FC1, &fgdSamples[0][0] );
384 kmeans( _fgdSamples, GMM::componentsCount, fgdLabels,
385 TermCriteria( CV_TERMCRIT_ITER, kMeansItCount, 0.0), 0, kMeansType );
386
387 bgdGMM.initLearning();
388 for( int i = 0; i < (int)bgdSamples.size(); i++ )
389 bgdGMM.addSample( bgdLabels.at<int>(i,0), bgdSamples[i] );
390 bgdGMM.endLearning();
391
392 fgdGMM.initLearning();
393 for( int i = 0; i < (int)fgdSamples.size(); i++ )
394 fgdGMM.addSample( fgdLabels.at<int>(i,0), fgdSamples[i] );
395 fgdGMM.endLearning();
396}
397
398/*
399 Assign GMMs components for each pixel.

Callers 1

grabCutMethod · 0.85

Calls 6

initLearningMethod · 0.80
addSampleMethod · 0.80
endLearningMethod · 0.80
push_backMethod · 0.45
emptyMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected