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

Traitement d'images Discussion :

Estimation de position de caméra


Sujet :

Traitement d'images

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Estimation de position de caméra
    Bonjour,
    j'ai besoin de l'aide SVP
    problème: dans un environnement je capte une image de la scène avec le caméra j’obtiens l'image à t0 puis à l'instant t1 après un mouvement de la caméra je prends une seconde image de la mème scène. à partir de ces 2 images je dois estimer le mouvement = la rotation et la translation de la caméra à l'instant t1 par rapport au position de la caméra à l'instant t0.
    j'ai suivi les étapes suivantes:
    1- capter et charger les deux images. (je travail avec Matlab 2015a)
    2- détection des points d’intérêt (détecteur de Harris).
    3- mise en correspondance entre les points d’intérêt des deux images.
    4- calculer la matrice fondamental.
    5- calculer la matrice essentiel.
    6- déduire la matrice de rotation (R) et le vecteur de translation (T).
    mais le problème que les résultats obtenus sont toujours fausses.
    quelqu'un dans le domaine peut m'aider. Merci
    voila mon programme:
    Code MATLAB : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    clear all; close all; clc;
    %%%% charger les deux images  %%%%
    ImageColor1=imread ('2.jpg');
    ImageColor2=imread ('3.jpg');
    %%%% convertir de RGB vers niveau de gris %%%%
    ImageGris1=im2double(rgb2gray(ImageColor1));
    ImageGris2=im2double(rgb2gray(ImageColor2));
    %%%% la taille des images %%%%
    taille_image=size (ImageGris1);
    %%%% detection des points d'interet %%%%
    Corners1=detectSURFFeatures(ImageGris1);
    Corners2=detectSURFFeatures(ImageGris2);
     
    [features1, valid_points1] = extractFeatures(ImageGris1, Corners1);
    [features2, valid_points2] = extractFeatures(ImageGris2, Corners2);
     
    indexPairs = matchFeatures(features1, features2);
     
     matchedPoints1 = valid_points1(indexPairs(:, 1), :);
     matchedPoints2 = valid_points2(indexPairs(:, 2), :);
     
     figure; showMatchedFeatures(ImageGris1, ImageGris2, matchedPoints1, matchedPoints2);
     title('Matched SURF points,including outliers');
     
    [tform,inlierPoints1,inlierPoints2] = estimateGeometricTransform(matchedPoints2,matchedPoints1,'similarity');
    figure; showMatchedFeatures(ImageGris1,ImageGris2,inlierPoints2,inlierPoints1);
    title('Matched inlier points');
     
     
    % [fRANSAC, epipolarInliers, status] = estimateFundamentalMatrix(...
    %   matchedPoints1, matchedPoints2, 'Method', 'RANSAC', ...
    %   'NumTrials', 10000, 'DistanceThreshold', 0.1, 'Confidence', 99.99);
     
    fRANSAC1 = estimateFundamentalMatrix(inlierPoints1,inlierPoints2,'Method', 'RANSAC', 'NumTrials', 2000, 'DistanceThreshold', 1e-4)
     FNorm8Point=estimateFundamentalMatrix(inlierPoints1,inlierPoints2,'Method', 'Norm8Point', 'NumTrials', 2000, 'DistanceThreshold', 1e-4)
     load calibrationSessionNew1
    cameraParams1=calibrationSession.CameraParameters;
    cameraParams2=calibrationSession.CameraParameters;
    [R,I]= cameraPose(tform.T,cameraParams1,cameraParams2,matchedPoints1,matchedPoints2)

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut
    il n'y a pas de soucis sur la dernière ligne?
    tu estime R et T a partir du tform issu du recalage des points et non a partir de la matrice fondamentale extraite la ligne d'avant

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour votre remarque gpcbitnik38,
    j'ai essayé avec les deux matrice fondamental et tform mais toujours les résultats fausses.
    Autre mot la matrice fondamental est une relation entre les pixels d'image gauche et celle de l'image droit!? et c'est la même chose avec la matrice tform non??
    merci pour votre aide

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut
    oui mais la tform est estimer localement et non depuis le repère camera. (de plus je viens de voir que ta tform estime une similarity alors que si tu as une rotation de ta camera=> transformation projective sur tes points)

    pour moi ce que tu cherches a faire est une calibration stéréo.
    le problème est que pour faire une calibration il te faut une mire, c'est a dire qu'il faut que tu connaisses les coordonner réel de tes points detectés avec le detecteur surf. ( générallement les calib matlab se font avec un damier dont l'espacement est connu).

    le processus classique est le suivant :
    on imprime une mire (dans matlab la mire fournis est un damier, tu peux en changer mais je te conseil pas, matlab te fournis les fonction de detection pour le damier c'est bien pratique)
    attention lors de l'impression, imprime en qualité photo et surtout attention a ce que l'imprimante ne scale pas tes points (sinon ta calib sera fausse)
    tu poses ta mire
    tu prend une image avec la camera en position 1 puis une image avec la camera en position 2
    tu recommence avec une autre position de la mire
    pour une bonne calibration je te conseil au moins 15 image de chaques. les point de ta mire doive couvrir tout tonc champs de vue sur les 2 camera et tu dois faire bouger ta mire dans l'espace et pas uniquement dans le plan
    ensuite tu donnes les coordonnées des points a la fonction estimatecameraparameters et le tour est joué.

    la calibration te renvoie alors les paramètre interne de la premiere camera et de la deuxieme et une matrice de transformation te permetant de passer de l'une a l'autre. c'est cett matrice qu'il te faut.
    je te renvoie vers les liens mathworks
    la fct que tu dois utiliser : https://fr.mathworks.com/help/vision...arameters.html (en mode stéréo)

    liens utile
    https://fr.mathworks.com/help/vision...libration.html
    https://fr.mathworks.com/help/vision...rator-app.html


    tu as une autre possibilité qui est de calibrer ta caméra avant. (calibration mono, même principe qu'avant mais avec une seule caméra)
    une fois que tu as la matrice avec les paramètre interne de ta camera
    tu estimes la position de ta mire par rapport a ta caméra.
    tu bouge ensuite ta camera
    tu estime la nouvelle position de ta mire dans la nouvlle position de ta camera.
    tu aura les données suivantes : PositionMiredansCameraPose1 (PmCP1) et PMiredansCameraPose2 (PmCP2)
    toi tu cherches PositionCameraPose2dansCameraPose1 PCP2CP1
    il te suffit alors d'inversé la transformation PmCP2 pour obtenir PCP2m et de faire le produit PmCP1*PCP2m pour obtenir PCP2CP1.


    la méthode 1 donnera un résultats bien plus precis car tu vas minimiser les erreur sur plusieurs images. mais la camera 2 ne doit plus bouger
    la méthode 1 est moins precise mais te permet d'estimer d'autre mouvement sans refaire une calibration complète.
    Bref la conclusion c'est qu'il te faut une mire ^^

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    merci pour vos éclaircissements;
    mon aidé général est de faire la calibration de la caméra on utilise la mire etc en mode off ligne (avant le lancement de programme), une fois on extraire les paramètres intrinsèques de caméra (une seul caméra) on les utiliser pour calculer la position de caméra à l'instant t2 par rapport à la position de la même caméra à l'instant t1. (sachant que le déplacement de la même caméra est équivalant à la stéréovision).
    comment?
    on à l'équation qui relié un point dans le repère réel dans le repère image comme suit: (modèle linaire de caméra)

    Nom : modèle linaire de caméra.PNG
Affichages : 1033
Taille : 49,5 Ko
    avec:
    •(Xo,Yo,Zo) sont les coordonnées d'un point objet ( J ) dans le repère réel (relier à la scène).
    •(u, v) sont les coordonnées de point objet ( J ) dans le repère de visualisation (Rs).
    •Mint : le modèle interne de la caméra.
    •Mext : le modèle externe de la caméra.
    •C : le modèle globale linéaire de la caméra.

    chaque point dans l'image elle a cette formule.
    on va prendre un point réel on va capté par la caméra à l’instant t1 on va obtenir la formule précédente; après on va déplacer la caméra et on capte le même point à l'instant t2 on obtient une deuxième formule pour le même point.
    donc on a deux formule ayant les cordonnées de point réel sont les mêmes, les paramètres intrinsèques de la caméra sont les mêmes aussi, les coordonnées de point dans repère image sont connus (u,v),
    la question qui se pose a ce que on peut résoudre cette équation pour extraire les paramètres extrinsèques de la caméra?
    et a ce que on peut déduire la position de la caméra à l'intant t2 par rapport à la caméra à l'intant t1?
    merci de votre temps

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut
    si tu as les points dans le repère scène et la camera calibré il te suffit de resoudre le système.

    tu connais Mint(grace a la calib) u et v (coordonnées pixélique dans ton image) et X0,Y0,Z0 .
    il te reste a déterminer les 6 inconnues (les 3 angles de rotation), la translation et le scaling.
    6 inconnues => il te faut 6 points différents et non alignées

    donc tu retourne ta première équation pour isoler Mext et tu résous le système en utilisant 6 points connus

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    salut; dans le cas où on ne connait pas les coordonnées X0,Y0,Z0, a ce qu'il est possible de résoudre l'équation??
    autre mot, je travail avec une caméra (appareil photo) de type SONY 16.1 mégapixels (DSC-W630), a ce que sa cause un problème dans la partie calibration sachant que ces nouveaux appareil contient un système d'auto focus?
    j'aimerai bien de me donner la méthode pour puisse résoudre l'équation.
    Merci pour votre aide.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut
    tu n'es pas obligé de connaitre la position des points mais il te faut un repère. (2 vecteur et une origine (arrange toi ensuite pour exprimer les point dans le nouveau repère, c'est comme ça que fonctionne la calibration avec une mire)), tu peux fixer arbitrairement un point comme étant l'origine.

    pour l'autofocus je ne suis pas certain de ma réponse, ça date un peu.
    mais il me semble que le focus c'est de faire bouger la position du récepteur (capteur) par rapport a la lentille pour atteindre le point de focalisation de ton objet (en pratique c'est une lentille additionnelle qui bouge mais le principe reste le même)
    du coup dans tes paramètres de ton équation, aucune des constantes physiques n'est modifiés donc normalement ça devrai aller.
    maintenant, un auto-focus, ça induit un mouvement et des vibrations. et ça c'est assez moyen a maintenir, ton système risque de se de-calibrer.

    dans ta scène, est-ilk possible de placer une mire quelque part ? ce sera beaucoup plus simple

Discussions similaires

  1. estimer la position et l’orientation des allumettes
    Par Gakusei dans le forum Traitement d'images
    Réponses: 8
    Dernier message: 23/05/2013, 17h45
  2. Estimer une position d'insertion
    Par Loceka dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 17/10/2012, 20h42
  3. Réponses: 5
    Dernier message: 02/07/2009, 23h56
  4. Réponses: 0
    Dernier message: 11/02/2008, 20h39
  5. Réponses: 2
    Dernier message: 04/11/2007, 13h10

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