OpenCV: Farbe-Extraktion basierend auf Gaussian mixture model

Ich bin versucht, opencv EM-Algorithmus zu tun, Farb-Extraktion.Ich benutze folgende code basiert auf dem Beispiel in der opencv-Dokumentation:

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;

    }
}

Meine Frage hier ist:

Erstens, ich will zu extrahieren jedes Modell, hier insgesamt fünf, und speichern Sie dann die entsprechenden pixel-Werte in fünf verschiedenen matrix. In diesem Fall hätte ich fünf verschiedene Farben getrennt. Hier habe ich nur erhalten, Ihre Indizes, gibt es eine Möglichkeit, um Ihre entsprechenden Farben hier? Machen Sie es sich einfach, kann ich damit beginnen, von der Suche nach der dominanten Farbe, die basierend auf diesen fünf GVM.

Zweitens, hier mein Beispiel Datenpunkte sind "100", und es dauert fast 3 Sekunden für Sie. Aber ich möchte all diese Dinge zu tun, die in nicht mehr als 30 Millisekunden. Ich weiß, OpenCV hintergrund-Extraktion, die mit GMM, führt wirklich schnell, unter 20ms, das heißt, es muss einen Weg für mich zu tun, alle diese innerhalb von 30 ms für alle 600x800=480000 Pixel. Ich fand predict Funktion ist die meiste Zeit verbrauchen.

  • Ist diese Frage noch aktiv? Oder wurde es gelöst there ? Grüße
  • diese Frage war ein altes, aber nachdem ich eine weitere Frage gestellt, die du beantwortet, ich aktualisiert, das ist eine Farbe, die Extraktion und Berechnung Geschwindigkeit. Könnten Sie mir helfen? Danke.
  • Ich nicht wirklich verstehen, diese Frage. Extrahieren von Farben ist nicht sinnvoll für mich. Sind Sie versuchen, zu berechnen, die dominierenden Farben? Oder die Quantisierung der Farben? Ihr code dont helfen mir viel. Hinsichtlich Geschwindigkeit Problem, mit params.cov_mat_type = COV_MAT_DIAGONAL ist genug für die meisten Fälle und beschleunigt Ihren Prozess
  • Ich bin versucht zu extrahieren, die jede Farbe einer Szene, von der dominante. Bitte helfen Sie mir zu diesem Thema. Danke.
  • Ich habe versucht, "params.cov_mat_type = COV_MAT_DIAGONAL" aber es hat keinen großen Unterschied.
InformationsquelleAutor E_learner | 2012-09-19
Schreibe einen Kommentar