Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2527 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [qt designer] Calcul du centre d'un objet

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[qt designer] Calcul du centre d'un objet

n°1341374
heyheyhey7​1
Posté le 07-04-2006 à 12:34:52  profilanswer
 

Voila, j'ai un objet repéré dans une image,
Composition de la matrice de pixel -> 0 = l'objet n'est pas la et 1->objet repéré
donc en gros, en affichant ma matrice, j'aurai une tâche noir correspondant au 1 et le reste en blanc
 
Comment fair pour calculé le centre de cet object en C++
 
Merci pour l'aide...


Message édité par heyheyhey71 le 19-04-2006 à 10:26:24
mood
Publicité
Posté le 07-04-2006 à 12:34:52  profilanswer
 

n°1348715
heyheyhey7​1
Posté le 18-04-2006 à 12:45:57  profilanswer
 

:bounce:

n°1349051
Alban44
Posté le 18-04-2006 à 17:31:37  profilanswer
 

Bonjour,
 
Personnellement (si il s'agit d'un objet simple) j'utiliserai la formule suivante :
 
Px = Somme des absices / nb de 1 trouvés
Py = Somme des ordonnées / nb de 1 trouvés
 
Il y a d'autres algo plus compliqués pour des objets plus complexes, celui ci devrait très bien marché pour tout ce qui est forme de base (carré, rectangle, rond etc)
 
Voilou  :)

n°1349228
SBAM
Best recording of rach 3.
Posté le 18-04-2006 à 22:35:55  profilanswer
 

Tu prend le point le plus en bas a gauche de ta tache (P0).
Tu peux construire n - 1 vecteur partant P0 ver Pn.
Tu fais une analyse en composante principale. Tu conserves le vecteur propre associee a ta plus grande valeur propre.
Tu fais la moyenne des distances de Mahalanobis en te basant sur la matrice de covariance croisee formee par tes vecteurs.
 
Tu en deduis le centre de ta tache.

n°1349381
heyheyhey7​1
Posté le 19-04-2006 à 10:20:55  profilanswer
 

Pour la première réponse, j'avais déja pensé à cet solution mais je pense qu'il faudrais un résultat exacte puisque le centre me servira a guider un robot d'ou un résultat le plus précis possible...
 
Pour la 2ième réponse, je vois a peu près ce que tu veu dir, mais aurais tu un code source a ce sujet car la comme ca, je pourrais rien codé. C'est un peu compliqué...
 
Merci

n°1350268
heyheyhey7​1
Posté le 20-04-2006 à 10:44:38  profilanswer
 

up!

n°1350271
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-04-2006 à 10:47:25  profilanswer
 

Tu peux prendre chaque pixel noir, lui associer un poids de 1, et ensuite calculer le centre de gravité de l'ensemble de tes points. En considérant que l'objet a une masse uniformément répartie, ça te donne le centre réel de ton objet.
Par contre, pour peu que ton image soit en haute résolution et donc ton objet composé de centaines de milliers de points, ça va être un peu lent...

n°1350986
heyheyhey7​1
Posté le 21-04-2006 à 10:21:25  profilanswer
 

ok, et ya t'il des algorithmes pour le calcul du centre de gravité en sachant les corrdonnées [x,y] de mon objet ?

n°1351064
Arjuna
Aircraft Ident.: F-MBSD
Posté le 21-04-2006 à 11:25:23  profilanswer
 

Le centre de gravité d'un nuage de points uniformément pondérés, c'est logiquement la moyenne des x et y de tous les points.
Si t'as par exemple des niveaux de gris indiquant la répartition de la masse (ou à défaut, de l'épaisseur), tu peux améliorer cet algo en faisant la moyenne pondérée par le niveau de gris des coordonnées de poins.

n°1351072
heyheyhey7​1
Posté le 21-04-2006 à 11:33:32  profilanswer
 

ok, ok pour commencer je vais fair cette moyenne, après on verra pour améliorer tout ca...

mood
Publicité
Posté le 21-04-2006 à 11:33:32  profilanswer
 

n°1351106
Arjuna
Aircraft Ident.: F-MBSD
Posté le 21-04-2006 à 12:06:10  profilanswer
 

Voici un exemple de ce que ça donne avec ma méthode, et donc des objets dont le centre de gravité n'est pas vraiment évident si on se contente des bounds de l'objet.
 
Mes objets mesurés :
http://www.bci-logs.fr/medias/object0.PNG http://www.bci-logs.fr/medias/object1.PNG http://www.bci-logs.fr/medias/object2.PNG
 
Le résultat :
http://www.bci-logs.fr/medias/gravite.PNG
 
Le source (C#) :

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5. namespace Gravite
  6. {
  7.     public partial class Form1 : Form
  8.     {
  9.         public Form1()
  10.         {
  11.             InitializeComponent();
  12.         }
  13.         private void Form1_Load(object sender, EventArgs e)
  14.         {
  15.             Cursor.Current = Cursors.WaitCursor;
  16.             this.SuspendLayout();
  17.             // Chargement des 3 images d'exemple
  18.             // Puis recherche du centre de gravite
  19.             // Et affichage
  20.             for (int i = 0; i < 3; i++)
  21.             {
  22.                 Bitmap myBmp = new Bitmap(string.Format(@"c:\object{0}.PNG", i.ToString()));
  23.                 long cumX = 0, cumY = 0, nbPix = 0;
  24.                 int moyX = 0, moyY = 0;
  25.                 for (int x = 0; x < myBmp.Width; x++)
  26.                 {
  27.                     for (int y = 0; y < myBmp.Height; y++)
  28.                     {
  29.                         if (myBmp.GetPixel(x, y).R < 127 || myBmp.GetPixel(x, y).G < 127 || myBmp.GetPixel(x, y).B < 127)
  30.                         {
  31.                             cumX += x;
  32.                             cumY += y;
  33.                             nbPix++;
  34.                         }
  35.                     }
  36.                 }
  37.                 if (nbPix != 0)
  38.                 {
  39.                     moyX = (int)(cumX / nbPix);
  40.                     moyY = (int)(cumY / nbPix);
  41.                     Graphics g = Graphics.FromImage(myBmp);
  42.                     g.DrawLine(Pens.Red, moyX, moyY - 5, moyX, moyY + 5);
  43.                     g.DrawLine(Pens.Red, moyX - 5, moyY, moyX + 5, moyY);
  44.                 }
  45.                 PictureBox tmpPictureBox = new PictureBox();
  46.                 tmpPictureBox.Image = myBmp;
  47.                 tmpPictureBox.Size = tmpPictureBox.Image.Size;
  48.                 this.Controls.Add(tmpPictureBox);
  49.                 tmpPictureBox.Location = new Point((tmpPictureBox.Image.Size.Width + 4) * i + 4, 4);
  50.             }
  51.             this.ResumeLayout();
  52.             Cursor.Current = Cursors.Default;
  53.         }
  54.     }
  55. }

n°1359697
heyheyhey7​1
Posté le 04-05-2006 à 15:13:49  profilanswer
 

ok, pour le calcul du centre, je me suis fait un petit programme, maintenant, il faut que je calcul la surface de l'object détecter, j'ai fait un segmentation pour enlevé le bruit contenu dans l'image donc l'extérieur de l'objet ne contient aucun bruit (tous les pixels sont blancs) et l'objet est dessiné par un nuage noir!!
 
comment fair au plus facile pour calculé sa largeur et hauteur puis ca surface?

n°1359715
heyheyhey7​1
Posté le 04-05-2006 à 15:27:50  profilanswer
 

c'est bon j'ai fait ma fonction ... no soucy


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [qt designer] Calcul du centre d'un objet

 

Sujets relatifs
[resolu]Passer un objet dans une variable de sessionStocker un attribut d'un objet dans une BDD
[qt designer] Détection d'objet dans une image filtre morphologique[Résolu] Créer un objet à partir du nom de son type
Un bon bouquin PHP OBJETrécup méthodes/propriétés objet javascript
cellules calcul erreur ###Application.FileSearch objet requis
[VS 2003] [Qt] Callback, objet, cast. 
Plus de sujets relatifs à : [qt designer] Calcul du centre d'un objet


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR