recalage de nuages de points 3D matlab
Répondre à la discussion
Affichage des résultats 1 à 24 sur 24

recalage de nuages de points 3D matlab



  1. #1
    inviteff84b07b

    recalage de nuages de points 3D matlab


    ------

    bonjour , je dois recaler deux nuages de points 3d issu de deux vues différentes d'un objet en utilisant l'algorithme iterative closest point ICP pour ainsi avoir le profil complet de cet objet .le problème c'est que je sais pas comment m 'y prendre, comment dois je choisir les points caractéristiques ,est ce que je dois les marqués sur l 'objet ,si oui, avec quoi ,sachant que c'est un algorithme itératif comment dois je l'initialiser .merci pour votre aide (je travaille sous Matlab).

    -----

  2. #2
    pesdecoa

    Re : recalage de nuages de points 3D matlab

    Bonsoir macilia,

    Pourriez-vous préciser si votre problème se situe dans l'acquisition des matrices de points ou si vous bûtez sur l'implémentation de l'algorithme ICP?

    Cordialement

  3. #3
    inviteff84b07b

    Re : recalage de nuages de points 3D matlab

    bonsoir ,
    enfait mon problème réside dans le fait que j'arrive pas à appliquer l'algorithme ICP sur les matrices de points que j'ai acquises je pense que j'ai compris le principe de l'ICP mais j'ai pas bien saisi comment l'appliquer sur des données réelles .j'espere vraiment que vous pouvez m'aider .merci

  4. #4
    Dlzlogic

    Re : recalage de nuages de points 3D matlab

    Bonjour,
    C'est un problème que je connais un peu.
    A la première lecture, l'expression "nuage de points" m'a un peu dérouté, je préfère "ensemble de points".
    Il semble que votre méthode utilise un algorithme itératif, personnellement je préfère la méthode basée sur les moindres carrés.
    Il faudrait que vous me donniez plus de détails.

  5. A voir en vidéo sur Futura
  6. #5
    inviteff84b07b

    Re : recalage de nuages de points 3D matlab

    bonjour,
    effectivement ICP est un algorithme itératif ,pour vous fournir plus de détails je vous joints les fichier .xyz contenant l'ensemble des points issus de 4vues d'un objet(ici on a pris une bouteille comme objet exemple ) ,ainsi que l'algorithme ICP que j'utilise (je l'ai télécharger ) sous matlab.votre aide sera des plus nécessaire vu que le temps n'est pas en ma faveur en ce moment .
    Fichiers attachés Fichiers attachés

  7. #6
    inviteff84b07b

    Re : recalage de nuages de points 3D matlab

    pour lire ces fichiers xyz j'utilise cette fonction 'read vertices' comme suit :

    [V1,N1]=read_vertices('POINT_CLOUD1.x yz');
    [V2,N2]=read_vertices('POINT_CLOUD2.x yz');.............


    AVEC :

    function [V,N] = read_vertices(filename)

    V = zeros(0,3);
    vertex_index = 1;
    fid = fopen(filename,'rt');
    line = fgets(fid);
    while ischar(line)
    vertex = sscanf(line,'%f %f %f');

    if(size(vertex)>0)
    V(vertex_index,: ) = vertex;
    vertex_index = vertex_index+1;
    end
    line = fgets(fid);
    end
    N=vertex_index;

    fclose(fid);
    end
    ENSUITE J'AFFICHE MES DONNEES COMME SUIT :
    plot3(V1(:,1),V1(:,2),V1(:,3), '*r');
    plot3(V2(:,1),V2(:,2),V2(:,3), '*g');
    UNE FOIS V1,V2 AFFICHEES , J'UTILSE LE CURSEUR DE MATLAB POUR SELECTIONNER DES POINTS DE ZONE COMMUNES AUSSI BIEN EN V1 QUE EN V2
    APRES J'APPLIQUE L'ICP A CES POINTS LA. VOICI UN EXEMPLE :
    m1=[3 150 4.22;
    64 152 4.806;
    122 153 4.591;
    181 153 4.508];

    m2=[204 -25 -9.452;
    146 -18 -9.896;
    79 -13 -9.884;
    31 -164 -8.559];



    [R, T] = icp(m1,m2);

    vROT2=[];
    vROT0=0;
    for i=1:N2-1
    vROT0=R*V1(i,: )'+T;
    vROT2=[vROT2;vROT0'];
    end;
    figure(3)
    plot3(vROT2(:,1),vROT2(:,2),vR OT2(:,3),'*Y');


    le problème est que j'arrive pas à recaler plus de deux vues et je sais même pas si c'est la bonne méthode à suivre lors de l’utilisation de l'ICP .

  8. #7
    inviteff84b07b

    Re : recalage de nuages de points 3D matlab

    voici mon dossier
    Fichiers attachés Fichiers attachés

  9. #8
    Dlzlogic

    Re : recalage de nuages de points 3D matlab

    Bonjour,
    J'ai tout chargé, Ok.
    Est-ce que vous pourriez me donner quelques détails ?
    1- les points ce possédant pas d'altitude (NAN) sont des points "hors objet"
    2- que représentent les coordonnées
    1.0000000 20.0000000 8.6495821
    1.0000000 20.0000000 9.3294986
    1.0000000 20.0000000 8.7824938
    1.0000000 20.0000000 8.6761799
    Ci dessus, le 20è point de chacun de 4 fichiers ils ont le même X et Y, mais pas le même Z
    Donc ma question : a-t-on une information sur la position des systèmes de référence ?
    J'aimerais bien savoir aussi le contexte : recherche universitaire, recherche professionnelle, ... ?
    Manifestement le pas pour X et Y est l'unité, et donc on mesure le Z.

  10. #9
    inviteff84b07b

    Re : recalage de nuages de points 3D matlab

    bonjour ,
    oui, les points ne possédant pas d'altitude (NAN) sont des points "hors objet".Effectivement on mesure le Z .je vou résume donc comment on obtenu ces ensembles de points :
    on génère des franges (lumiere structurée) ,on projette ces franges sur un objet . ces dernieres sont deformées(deplacées ) selon la forme de l'objet donc l'information sur la profondeur de l'objet est codée dans la deformation de ces franges . en fait cette deformation des franges correspond à une modulation de leur phase . on fait donc une acquisition d'images de ces franges deformées par l'objet grace à une caméra CCD puis on applique des algorithme d'extraction de la phase . une fois la phase retrouvée ,on remonte au Z (la profondeur ) puisque celle ci est reliée à la phase linéairement .
    je travaille en binome sur ce thème dans le cadre d'un projet de fin d'etudes (telecommunications).

  11. #10
    inviteff84b07b

    Re : recalage de nuages de points 3D matlab

    [QUOTE=macilia;3982142]1233334456

  12. #11
    Dlzlogic

    Re : recalage de nuages de points 3D matlab

    Bonjour,
    J'ai visualisé les 2 premiers fichiers, plus de 40000 chacun, c'est beaucoup.
    En fait, je n'ai pas compris ce que vous cherchez à faire.
    Vous avez un premier fichier en XYZ. Cela défini un objet en 3 dimensions.
    Vous avez un deuxième fichier en XYZ du même objet. Ca défini le même objet en 3 dimensions.
    Ces deux fichiers apparaissent comme une "surface" dans le sens où Z=f(X,Y).
    Je suppose que le troisième et le quatrième ont la même définition.

    Vous cherchez à les "recaler", c'est à dite effectuer la transformation qui mettra ces 4 fichiers dans un système XYZ unique, et tel que des points physiquement identique, mais appartenant à deux ou plus images différentes aient la même position, c'est à dire une position unique dans le système XYZ résultat.

    Ceci pourrait permettre par exemple d'obtenir un objet qui ait un "volume", et donc pouvoir le faire tourner.
    Pour caler deux ensembles de points, il faut une information sur la position relative de ces deux ensembles. Cela peut être la position de chaque "prise de vue" ou d'identification de couples de points identiques dans les 2 systèmes.

    Sauf des opérations relativement élémentaires, j'imagine mal un logiciel comme Matlab travailler sur 4 fichiers de plus de 40000 points chacun, mais sur ce détail, je peux me tromper.

    Donc, pour résumer, que représentent ces 4 fichiers et que voulez-vous en faire ?

  13. #12
    inviteff84b07b

    Re : recalage de nuages de points 3D matlab

    bonjour,
    enfaite je cherche à recaler 4 vues d'un même objet pour en former le volume complet , ces vues ont été obtenues sous différents angles de vue . ces quatre fichiers paraissent être les mêmes du fait que l'objet pris est à symétrie révolutionnaire(toutes les vues sont identiques ).en ce qui concerne la position relative , ces vues ont été prises en faisant tourner l'objet d'un angle de 9Odegrés. l'algorithme ICP réalise bien le recalage à l'aide de transformation rigide mais je n'arrive pas à retrouver le volume complet. ensuite je devrai faire un placage de texture 3D sur tout l'objet .

  14. #13
    Dlzlogic

    Re : recalage de nuages de points 3D matlab

    J'avais bien vu que les fichiers étaient différents, mais il pouvait y avoir toute sorte de raisons.
    On peut donc considérer que l'objet est fixe et qu'il a été observé de 4 point de vue différents situés strictement dans les 4 directions perpendiculaires.
    Comme apparemment aucun point de calage n'est identifiable, le seul point fixe est le centre, intersection des axes == centre de rotation.

    En première approche, il faudrait repérer dans deux vues ayant une zone commune, trois ou 4 éléments de surface, c'est à dire une dizaine de points liés, que l'on pourrait identifier, c'est à dire mettre en correspondance. Mais s'il n'y a aucun élément caractéristique (symétrie révolutionnaire) c'est impossible.
    Si c'est une bouteille cylindrique, alors le diamètre apparent est comparable, ainsi que la hauteur.
    C'est la seule méthode que j'imagine.

    Mais pour l'instant, ça me parait bien compliqué.

  15. #14
    inviteff84b07b

    Re : recalage de nuages de points 3D matlab

    c'est justement ce que j'ai fait:j'ai pris quatre points de zone commune dans deux vues puis j'ai estimé avec la rotation à appliquer ,une fois celle ci estimée je l'applique à l'ensemble des points j'ai pu grace à ca recaler deux vue j'arrive ainsi à retrouver la moitié de la bouteille ,le probleme réside dans les autres vues comment recaler les vues pour obtenir le reste de la bouteille

  16. #15
    Dlzlogic

    Re : recalage de nuages de points 3D matlab

    Oui, mais j'ai du mal à imaginer comment vous avez réussi à identifier 4 points correspondants sur 2 images.
    Avec 2 images, vous devriez avoir un peu moins de 3/4 de bouteille, avec un peu moins de 1/4 de partie commune.
    Si vous avez réussi avec 2 vous pouvez assembler la troisième au résultat des 2 premières, vous aurez ainsi une bouteille presque complète, la dernière vue bouchera le petit trou qui reste.

  17. #16
    inviteff84b07b

    Re : recalage de nuages de points 3D matlab

    je vais essayer.Merci à vous.

  18. #17
    Dlzlogic

    Re : recalage de nuages de points 3D matlab

    Bonjour,
    Je vous avais fait un joli message hier, mais j'ai l'impression que les forums ont des soucis ces derniers jours à cause d'attaques de toute sorte.

    J'ai visualisé les 4 images et j'ai relevé les coordonnées de 4 points
    1- le point en bas à gauche, c'est à dire le point droit du culot
    2- le point en haut à gauche, c'est à dire le point gauche du culot
    3- un point situé sensiblement au milieu de 1-2
    4- un point situé sensiblement sur la même génératrice que le point 3 et à une distance de l'ordre de la moitié de 1-2.

    Pour les 4 images, on peut évaluer le rayon par la 1/2 différence d'ordonnée entre les point 1 et 2, d'autre part en prenant la plus grande différence de la coordonnée Z. On obtient les résultats suivants :
    vue 1 : rayon = 70.5 dZ = 8.94
    vue 2 : rayon = 75.0 dZ = 10.50
    vue 3 : rayon = 75.0 dZ = 11.36
    vue 4 : rayon = 69.5 dZ = 8.91
    On constate une certaine homogénéité entre les valeurs, par contre, l'unité des Z est considérablement différente de celle des X et Y.
    Il en résulte qu'il est impossible d'assembler les vues pour réaliser un objet 3D, par simple rotation sans faire une affinité.

    Voila la méthode que l'on pourrait imaginer. On détermine un certain nombre de coupes suivant l'horizontale, c'est à dire perpendiculaires à l'axe des X.
    Chaque courbe doit avoir un maximum et deux minima, ont peut donc isoler deux courbes de courbure monotone, avec un petit recouvrement, qui peuvent normalement être ajustée suivant une parabole.
    Un 1/8 d'ellipse est très proche d'un arc de parabole. Tous ces résultats devraient permettre de déterminer le coefficient K d'affinité à appliquer à la coordonnée Z, et ainsi pouvoir assembler les 4 images.

    Qu'en pensez-vous ?

  19. #18
    inviteff84b07b

    Re : recalage de nuages de points 3D matlab

    bonjour, j'avoue que je n'ai pas très bien saisi votre idée

  20. #19
    Dlzlogic

    Re : recalage de nuages de points 3D matlab

    D'abord, il faut comprendre pourquoi dans l'état actuel, ça ne peut pas marcher.
    Si vous faites 4 coupes à la même hauteur sur les 4 images, vous aurez 4 arcs de cercles, (en fait plutôt des arcs d'ellipse).
    Mais, au lieu que ce soit chaque fois presque un 1/2 cercle, c'est un arc très plat, puisque la flèche vaut à peu près 1/7 du rayon, alors qu'elle devrait presque lui être égale.
    Il faut donc trouver le rapport d'affinité K pour transformer l'ellipse en arc de cercle.
    L'équation de l'ellipse est assez difficile, par contre un 1/2 quart d'ellipse est très proche d'un arc de parabole. Cette dernière fonction est facile à ajuster.
    Une fois cela fait, on connait les dimensions du grand axe et du petit axe de l'ellipse, ce qui permet d'appliquer l'affinité, transformer les valeurs des Z et enfin permettre le recalage par simple rotation.

  21. #20
    inviteff84b07b

    Re : recalage de nuages de points 3D matlab

    ça parrait logique . je vais y travailler et je vous tiendrai au courant si ça marche .merci

  22. #21
    Dlzlogic

    Re : recalage de nuages de points 3D matlab

    J'ai naturellement tous les outils pour calculer cela.

  23. #22
    inviteff84b07b

    Re : recalage de nuages de points 3D matlab

    et ou puis -je me procurer ces' outils ' moi aussi ?

  24. #23
    inviteff84b07b

    Re : recalage de nuages de points 3D matlab

    enfait j'ai pas compris quand vous dites 'Une fois cela fait, on connait les dimensions du grand axe et du petit axe de l'ellipse, ce qui permet d'appliquer l'affinité, transformer les valeurs des Z '

  25. #24
    Dlzlogic

    Re : recalage de nuages de points 3D matlab

    Concernant cet outil, donnez-moi votre adresse mail par MP ou joignez-moi sur www.dlzlogic.com.
    Pour l'ellipse.
    Prenons une coupe, on l'a divisée en 2 pour avoir une fonction monotone. On a donc à peu près 1/4 d'ellipse.
    La différence avec un arc de parabole est faible, mais il vaut mieux la diviser en deux avec un petit recouvrement.
    On aura donc 2 lignes à ajuster, et si mon hypothèse de forme elliptique est bonne, ce qui reste à vérifier, l'ajustement donnera 2 arcs de parabole que l'on assimilera à 1 arc d'ellipse. A partir du moment où on connait un arc d'ellipse, on peut déterminer son grand axe et son petit axe, c'est à dire le coefficient K à appliquer pour obtenir un arc de cercle.

Discussions similaires

  1. Comparaison de nuages de points
    Par invite27321f60 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 12/03/2012, 08h55
  2. Points et equations en Matlab
    Par invite9f90c9cc dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 05/04/2011, 20h41
  3. Nuages de points de la fonction abs(ln(a))
    Par stephane75016 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 18/03/2010, 09h54
  4. détection de nuages dans le ciel avec matlab
    Par invited1cfc771 dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 17/03/2008, 19h20
  5. Comparer deux nuages de points
    Par invitef23d125d dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 01/02/2004, 23h24