IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Problème utilisation de cvCalcCovarMatrix


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Par défaut Problème utilisation de cvCalcCovarMatrix
    Bonjour à tous!

    Je suis en train d'implémenter une méthode de reconstruction de surface à partir d'un nuage de point non structuré.
    Pour cela, je dois approximer la normale en chaque point. Pour chaque point, je détermine ces k-plus proches voisins. Je détermine la normale en utilisant une analyse en composante principale. Et à ce niveau que j'ai un problème: j'utilise la méthode "cvCalcCovarMatrix" pour déterminer la matrice de covariance des k-ppv. Le vecteur propre correspondant à la plus petite valeur propre sera la normale cherché.

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    // 2. calcul matrice de covariance
     
        CvMat **srcMatrix;
        CvMat *M=cvCreateMat(1,K,CV_32FC1);
        srcMatrix=&M;
     
        for (unsigned int j=0; j<iKppv.size(); j++) {
          srcMatrix[j]=cvCreateMat(1,3,CV_32FC1);
          cvmSet(srcMatrix[j],0,0,pt[iKppv[j]][0]);
          cvmSet(srcMatrix[j],0,1,pt[iKppv[j]][1]);
          cvmSet(srcMatrix[j],0,2,pt[iKppv[j]][2]);
        }
        CvMat *cov=cvCreateMat(K,K,CV_32FC1);
        CvMat *avgVector=cvCreateMat(1,3,CV_32FC1);
        cvCalcCovarMatrix((const void **) srcMatrix ,K, cov, avgVector, CV_COVAR_NORMAL); 
        // cvCalcCovarMatrix((const void **)srcMatrix,K,cov,avgVector,CV_COVAR_SCRAMBLED);
     
        // 3. valeur propre matrice de cov
        CvMat* vectP  = cvCreateMat(K,K,CV_32FC1);  //vecteurs propres de cov
        CvMat* valP  = cvCreateMat(K,1,CV_32FC1);  //valeurs propres de cov
        double eps= pow(10,-75);
        cvEigenVV(cov, vectP, valP,eps); 
     
        // 4. normale = vecteur propre de la plus petite valeur propre
        double norm;
        norm=sqrt(cvmGet(vectP,K-1,0)*cvmGet(vectP,K-1,0)+cvmGet(vectP,K-1,1)*cvmGet(vectP,K-1,1)+cvmGet(vectP,K-1,2)*cvmGet(vectP,K-1,2));
        normale=Vec3Df(cvmGet(vectP,K-1,0)/norm,cvmGet(vectP,K-1,1)/norm,cvmGet(vectP,K-1,2)/norm);
    J'ai effectué des tests:
    - lorsque K=3 avec le flag CV_COVAR_NORMAL pour cvCalcCovarMatrix tout fonctionne bien;
    - par contre, dès que j'augmente K j'ai une erreur avec le flag CV_COVAR_NORMAL. J'ai alors effectué des tests avec le flag CV_COVAR_SCRAMBLED mais je n'obtients pas le bon résultat.

    Auriez-vous une idée de mon erreur?

    Merci d'avance pour votre aide!

  2. #2
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    as tu essayé avec le flag CV_COVAR_ROWS ?

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Par défaut
    Merci pour ta réponse.
    J'ai essayé avec le flag CV_COVAR_ROWS, j'obtiens une erreur indiquant que la taille des arguments est mauvaise (OpenCV ERROR: Sizes of input arguments do not match () ).

    Pour plus de détails, avec les 5-plus-proches-voisins suivant:
    (1,0,0) ; (0,1,0) ; (0,0,0) ; (0,-1,0) ; (-1,0,0)
    j'obtiens comme normale : (0.71,0,0).

  4. #4
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    par contre, dès que j'augmente K j'ai une erreur avec le flag CV_COVAR_NORMAL
    de quelle type l'erreur ?

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Par défaut
    L'erreur obtenue pour K=4 avec CV_COVAR_NORMAL est la suivante:
    OpenCV ERROR: Sizes of input arguments do not match (The size of input vectors does not match with the size of covariation matrix)

  6. #6
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    une matrice de covariance n'est pas forcément carré.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CvMat* vectP  = cvCreateMat(K,K,CV_32FC1);
    cette ligne n'est pas bonne, je dirais plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CvMat* vectP  = cvCreateMat(K,3,CV_32FC1);
    y'a autant de ligne que dans tes vecteurs et autant de colonne que de vecteur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème utilisation DLL
    Par Tub-95 dans le forum MFC
    Réponses: 4
    Dernier message: 02/11/2005, 12h00
  2. [Tomcat][Spring] Problème utilisation mémoire
    Par Wutintin dans le forum Hibernate
    Réponses: 12
    Dernier message: 08/09/2005, 14h57
  3. [JSTL] [EL] Problème utilisation <c:out>
    Par XavierL dans le forum Taglibs
    Réponses: 7
    Dernier message: 14/08/2005, 20h12
  4. (Problème) Utilisation de l'API mySQL [Delphi 2005 Perso]
    Par will-scs dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/08/2005, 18h26
  5. [JAR]Problème utilisation manifest et jar
    Par doudine dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 07/01/2005, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo