OpenCV: extraction de la couleur basée sur le modèle de mélange Gaussien

Je suis en train d'utiliser opencv algorithme EM pour faire extraction de la couleur.Je suis en utilisant le code suivant basé sur l'exemple dans opencv documentation:

cv::Mat capturedFrame ( height, width, CV_8UC3 );
int i, j;
int nsamples = 1000;
cv::Mat samples ( nsamples, 2, CV_32FC1 );
cv::Mat labels;
cv::Mat img = cv::Mat::zeros ( height, height, CV_8UC3 );
img = capturedFrame;
cv::Mat sample ( 1, 2, CV_32FC1 );
CvEM em_model;
CvEMParams params;
samples = samples.reshape ( 2, 0 );
for ( i = 0; i < N; i++ )
{           
//from the training samples
cv::Mat samples_part = samples.rowRange ( i*nsamples/N, (i+1)*nsamples/N);
cv::Scalar mean (((i%N)+1)*img.rows/(N1+1),((i/N1)+1)*img.rows/(N1+1));
cv::Scalar sigma (30,30);
cv::randn(samples_part,mean,sigma);                     
}       
samples = samples.reshape ( 1, 0 );
//initialize model parameters
params.covs         = NULL;
params.means        = NULL;
params.weights      = NULL;
params.probs        = NULL;
params.nclusters    = N;
params.cov_mat_type = CvEM::COV_MAT_SPHERICAL;
params.start_step   = CvEM::START_AUTO_STEP;
params.term_crit.max_iter = 300;
params.term_crit.epsilon  = 0.1;
params.term_crit.type   = CV_TERMCRIT_ITER|CV_TERMCRIT_EPS;     
//cluster the data
em_model.train ( samples, Mat(), params, &labels );     
cv::Mat probs;
probs = em_model.getProbs();
cv::Mat weights;
weights = em_model.getWeights();
cv::Mat modelIndex = cv::Mat::zeros ( img.rows, img.cols, CV_8UC3 );
for ( i = 0; i < img.rows; i ++ )
{
for ( j = 0; j < img.cols; j ++ )
{
sample.at<float>(0) = (float)j;
sample.at<float>(1) = (float)i;     
int response = cvRound ( em_model.predict ( sample ) ); 
modelIndex.data [ modelIndex.cols*i + j] = response;
}
}

Ma question ici est:

Tout d'abord, je veux extraire chaque modèle, ici totalement de cinq, puis de stocker ces correspondante des valeurs de pixel dans cinq différentes de la matrice. Dans ce cas, je pourrais avoir cinq différentes couleurs séparément. Ici, j'ai seulement obtenu leur index, est-il un moyen pour atteindre leurs couleurs correspondantes ici? Pour le rendre facile, je peux commencer de trouver la couleur dominante sur la base de ces cinq Mgm.

Deuxièmement, voici mon exemple de points de données sont "100", et il faut à peu près 3 secondes. Mais je veux faire toutes ces choses dans pas plus de 30 millisecondes. Je sais OpenCV fond d'extraction, qui consiste à utiliser GMM, effectue très rapidement, en dessous de 20 ms, ce qui signifie, il doit y avoir un moyen pour moi de faire toutes ces dans un délai de 30 ms pour toutes les 600 x 800=480000 pixels. J'ai trouvé predict de la fonction est le plus de temps.

Cette question est-elle encore active? Ou était-il résolu there ? Ce qui concerne
cette question a été un ancien, mais après j'ai demandé à une autre question que vous avez répondu, j'ai mis à jour celui-ci avec l'extraction de la couleur et de la vitesse de calcul. Pourriez-vous m'aider? Je vous remercie.
Je n'ai pas vraiment compris la question. L'extraction de couleurs ne fait pas de sens pour moi. Êtes-vous essayer de calculer les couleurs dominantes? Ou quantifier les couleurs? Votre code ne pas m'aider beaucoup. Concernant le problème de vitesse, à l'aide de params.cov_mat_type = COV_MAT_DIAGONAL est suffisant pour la plupart des cas, et permettra d'accélérer votre processus de
Je suis en train d'extraire chaque couleur d'une scène, en commençant par le dominant. Merci de m'aider sur ce sujet. Je vous remercie.
J'ai essayé le "params.cov_mat_type = COV_MAT_DIAGONAL" mais elle n'a pas une grosse différence.

OriginalL'auteur E_learner | 2012-09-19