Bonjour,
INTRO et CONTEXTE :
J'aimerais implémenter la transformée de hough en 3D en MATLAB pour détecter des plans dans un jeu de coordonnées x,y,z. Un plan peut être caractérisé par 3 parametres theta,phi 2 angles et rho la distance a l'origine tq :
pour tout point au plan, rho = xi*cos(theta)*sin(phi) + yi*sin(theta)*sin(phi) + i*cos(phi) est vérifié
Voici comment s'articule mon code :
1) calcul de l'accumulateur de hough
2) détection des pics de l'accumulateur i.e. les triplets qui représentent les plans les plus probables
3) dessiner ces plans
L'idée est de tester tous les plans possibles passant par chaque point i.e. trouver tous les parametres theta,phi,rho qui vérifient :
rho = xi*cos(theta)*sin(phi) + yi*sin(theta)*sin(phi) + i*cos(phi)
theta varie de 0 à 180, phi de -90 à 90 et rho de 0 à Dmax
Chaque fois qu'un triplet (theta_j,phi_k,rho_l) convient, j'incrémente l'accumulateur, un tableau de mes paramètres en 3 dimensions :
accumulateur(theta_j,phi_k,rho_l) = accumulateur(theta_j,phi_k,rho_l) + 1
J'ai donc un tableau en 3D dont chaque cellule est le nombre de points ayant voté pour le plan défini par ses paramètres. Les cellules contenant le plus de votes sont en théorie les plans proéminents de l'espace cartésien.
Le problème est que je retrouve plusieurs jeux de paramètres proches qui représentent un même plan. Mon idée est d'effectuer une classification sur mon accumulateur afin d'obtenir un unique pic pour chaque plan.
J'utilise les k-means en spécifiant le nombre de plans voulus. Pour donner plus d'importance aux jeux de paramètres forts, je duplique chaque triplet (theta,phi,rho) par sa valeur dans l'accumulateur accumulateur(theta,phi,rho).
Seulement les résultats ne sont pas bons, et voici ma question (enfin !) :
QUESTION :
Dans un espace 3D [0,180]x[-90,90]x[0,Dmax] représentant 2 angles et 1 distance, cela a-t-il un sens de définir la distance euclidienne d = sqrt(theta^2 + phi^2 + rho^2) ? Ou dois-je définir une nouvelle distance (qui me servirait de distance par défaut pour mes k-means) ?
Partager