Aller au contenu

mesurer deux objets de centre à centre


gerard33

Messages recommandés

Bonjour

pour un TP, j'ai besoin de mesurer de centre à centre la distance en pixels entre Jupiter et ses satellites

14-04-20-03-41-01-arlic.thumb.jpg.d3c78d10f45d148f22746017050099ee.jpg

connaissez-vous un soft qui placerait automatiquement les repères au centre et qui en mesurerait l'écart en pixels?

merci :)

Lien vers le commentaire
Partager sur d’autres sites

Salut Gérard

Je vois que tu n'as pas beaucoup de propositions de logiciel pour faire ce dont tu as besoin.

 

Me concernant, je ne connais pas non plus de logiciel du commerce qui fasse ce genre de chose sauf ......

 

J'ai développé mon propre logiciel d’acquisition photo dans le but d'utiliser mon A7S sur des séquences photos programmées et automatisées sur plusieurs objets, ce que ne peux pas faire (selon ma connaissance) un logiciel standard du marché avec un driver ASCOM dédié A7S. Il existe bien le driver ASCOM qu'impla007 a développé pour l'A7S mais il fonctionne en wifi, ce qui ne m'allait pas dans mon cas de figure.

 

Bref, dans le logiciel que j'ai développé, j'ai intégré un module de focalisation (manuel assisté ou en automatique / Courbe en V). Afin de pouvoir mesurer la qualité de la focalisation (pseudo FWHM), je suis obligé de déterminer, après pointage d'une étoile (on peut cliquer à proximité de l'étoile, le système est tolérant), le centre précis de la zone de lumière de l'étoile (le centroïde). Cela me permet de faire une "coupe" de l'étoile selon 2 axes perpendiculaires afin de déterminer la variation de luminosité.

 

A titre d'exemple, voici l'écran de contrôle de MAP :

Focalisation.thumb.jpg.171febe235279c65c1e2e8a3a9c4cdef.jpg

 

La visualisation des coordonnées X et Y du centroïde sont arrondies à l'unité, mais le calcul se fait en décimal.

 

Partant de ce principe, je peux te proposer, comme roue de secours si tu ne trouves rien qui réponde, d'extraire la partie du programme qui fait cette manip et de l'adapter à ton besoin (ouverture d'une image, calcul des centroïdes , détermination de la distance entre 2 centroïdes, ...).

 

Les limites du système sont que mes connaissances actuelles se réduisent exclusivement au traitement d'une image jpg. Le programme étant développé sous Visual Studio, les calculs nécessaires à la détermination du centroïde ne se font pas à la vitesse de la lumière. Pour une étoile qui couvre une faible zone, ça va vite. Par contre, Jupiter occupant une surface importante (comparativement à une étoile), le traitement en sera logiquement allongé, mais totalement admissible à l'échelle humaine.

 

Au cas où, je voudrais bien connaitre la finalité de cette mesure. Il est peut-être possible de rajouter des fonctionnalités complémentaires qui ne coutent pas cher en développement.

 

Je voudrais bien connaitre également le délai de réponse car il faut que je me replonge dans le programme et que je l'adapte. Hors, ça fait un petit moment que je n'y ai pas touché.

 

Jean-Pierre

Lien vers le commentaire
Partager sur d’autres sites

Peux tu le faire à la main, image par image ou bien est-ce que ça doit être fait automatiquement sur toutes les images d'un film ?

 

Si tu peux le faire à la main, c'est possible via Photoshop. Il suffit de sélectionner un des objets avec l'outil Baguette Magique réglée à 100% de tolérance. Dans la boite Propriétés du bandeau de droite, on lit alors la largeur et la hauteur L,H de la sélection ainsi que la position en X,Y du coin supérieur gauche du rectangle dans lequel la sélection est inscrite. Pour avoir les coordonnées du centre de la sélection il suffit de faire X' = X+L/2 et Y' = Y+H/2.

 

Par exemple sur ton image on a :

- satellite de gauche : L,H= 9 et 9 px, X, Y = 146 et 229 px donc X',Y'=146+9/2=150.5 et Y'=229+9/2=233.5px

- Jupiter : L,H= 52 et 51 px, X, Y = 435 et 240 px donc X',Y'=435+52/2=461et Y'=240+51/2=265.5px

- satellite de droite : L,H= 8 et 10 px, X, Y = 511 et 219 px donc X',Y'=511+8/2=515 et Y'=219+10/2=224 px

 

Pour plus de précision tu peux jouer sur diverses tolérances de la Baguette magique (par exemple 75%, 50%, 25%), refaire les sélections et calculs puis faire la moyenne entre les résultats.

Lien vers le commentaire
Partager sur d’autres sites

Il y a 1 heure, Discret68 a dit :

Partant de ce principe, je peux te proposer, comme roue de secours si tu ne trouves rien qui réponde, d'extraire la partie du programme qui fait cette manip et de l'adapter à ton besoin (ouverture d'une image, calcul des centroïdes , détermination de la distance entre 2 centroïdes, ...).

Merci Jean-Pierre, étant développeur occasionnel aussi (Lazarus), j'étais partant pour me l'écrire mais faire du code qui ne servira q'une fois.... :(

entre temps j'ai trouvé Mesurim qui semble faire le job mais qui me fait des erreurs système fréquentes

je fouille encore

ne perds pas de temps à changer ton code, comme d'habitude, c'est pour....hier :hm:

pour la finalité, je cite

Citation

La prochaine consiste à essayer avec les photos d'obtenir une approximation de la période et de l'élongation maximale d'au moins un des satellites et de calculer une première approximation de la masse de Jupiter. La dernière consistera à un utiliser un logiciel de géométrie (nous vous proposerons geogebra), pour obtenir plus précisément période et élongation maximale grâce à la détermination de la sinusoïde de l'orbite et ainsi de calculer une meilleure approximation de la masse de Jupiter.

 

ton bout de code permettant de déterminer les centroïdes est basé sur quoi? intensité dans les blancs?

Lien vers le commentaire
Partager sur d’autres sites

il y a 24 minutes, Fred_76 a dit :

Si tu peux le faire à la main, c'est possible via Photoshop. Il suffit de sélectionner un des objets avec l'outil Baguette Magique réglée à 100% de tolérance. Dans la boite Propriétés du bandeau de droite, on lit alors la largeur et la hauteur L,H de la sélection ainsi que la position en X,Y du coin supérieur gauche du rectangle dans lequel la sélection est inscrite. Pour avoir les coordonnées du centre de la sélection il suffit de faire X' = X+L/2 et Y' = Y+H/2.

Salut Fred, oui, j'ai essayé cela hier soir, c'est un peu laborieux mais ça marche

Merci :)

Lien vers le commentaire
Partager sur d’autres sites

Je me demande si Iris ne pourrait pas le faire. On sélectionne un des objets du film puis ensuite il calcule son déplacement en X,Y image par image.

Lien vers le commentaire
Partager sur d’autres sites

il y a 1 minute, Fred_76 a dit :

Je me demande si Iris ne pourrait pas le faire. On sélectionne un des objets du film puis ensuite il calcule son déplacement en X,Y image par image.

il s'agit en fait de comparer des positions sur plusieurs jours pour établir leur orbite, Iris serait capable d'aligner des images où seul Jupiter serait à la même place mais cela ne servirait à rien pour la position changeante des satellites 

j'ai essayé aussi la fonction "coupe" qui peut aider aussi

j'avance avec Mesurim :)

Lien vers le commentaire
Partager sur d’autres sites

Il y a 6 heures, gerard33 a dit :

ton bout de code permettant de déterminer les centroïdes est basé sur quoi? intensité dans les blancs?

 

Pour déterminer le centroïde de l’étoile, on analyse un carré d’image englobant l’étoile.


On a un carré de X pixels de large et de Y pixels de haut. On considère que la référence de l’image globale se situe en haut à gauche et celle du petit carré de mesure se situe également dans son angle supérieur à gauche.


On mesure l’intensité lumineuse de chaque pixel (si mon carré fait 20 x 20 pixels, ça fait 400 mesures).


Pour chacun des pixels du petit carré, on va multiplier la valeur d’intensité lumineuse mesurée, par la valeur de position du pixel par rapport à notre référence du petit carré, une fois sur les X et une fois sur les Y et on additionne toutes les valeurs d’un coté sur les X et de l’autre coté, sur les Y. On fait également la somme totale de la valeur individuelle de luminosité de tous les pixels.

 

Exemple : je prends les premiers pixels de la première ligne. Le 1er pixel a une intensité de 10, le 2ème a 10, le 3ème a 30 et le 4ème a 100. On fait 1x10 + 2x10 + 3x30 + 4x100 et ainsi de suite pour tous les pixels de la ligne 1 et on y ajoute toutes les lignes suivantes pour obtenir la valeur totale des X. On fait le même processus en Y.


En parallèle, la somme des intensités lumineuses donne 10+10+30+100+ …..

 

Une fois ces 3 valeurs obtenues, on divise la somme obtenue en X par la somme de la valeur de luminosité de tous les pixels, ce qui nous donne la position du centroïde sur l’axe des X par rapport à la référence du petit carré.
On fait exactement la même chose sur les Y.

 

Il suffit d’ajouter à nos 2 valeurs X et Y du centroïde dans le petit carré, les valeurs de position de la référence du petit carré dans l’image globale et on a la position du centroïde par rapport à notre point de référence image (en haut à gauche).

On procède ainsi pour déterminer la position X et Y de plusieurs objets sur l’image et il suffit de calculer la diagonale entre chaque objet pour avoir la distance en pixel.

 

Le programme en VB.Net est presque plus facile à comprendre. 2 boucles imbriquées testent les pixels suivant les 2 axes :

 

X_Somme = 0 ' on met à zéro les 2 variables de somme sur les X
Y_Somme = 0 ' et sur les Y

For j = 1 To (V_Carré * 2) ' numéro de colonne ' V_Carré est la demi-largeur du carré de mesure
            For i = 1 To (V_Carré * 2) ' numéro de ligne
                Using g As Graphics = Graphics.FromHwnd(PictureBox2.Handle) ' A partir d'ici, on détermine la valeur d'intensité lumineuse du pixel analysé
                    hdc = g.GetHdc
                    rgb = GetPixel(hdc, X_Origine + i, Y_origine + j)
                    PRed = rgb And &HFF
                    PGreen = (rgb And &HFF00) / 256
                    PBlue = (rgb And &HFF0000) / 65536
                    NivGray = PBlue + PGreen + PRed
                    Coul_point = NivGray - ((3 * FDC) + 10)
                    If Coul_point < 0 Then
                        Coul_point = 0
                    End If       ' Fin de la détermination de la couleur du pixel
                    X_Somme = X_Somme + (i * Coul_point) ' On cumul la valeur de position du pixel multipliée par l'intensité lumineuse à la variable globale
                    Y_Somme = Y_Somme + (j * Coul_point) ' idem sur l'axe Y
                    Intensité = Intensité + Coul_point ' On ajoute la valeur d'intensité lumineuse du pixel analysé à la somme globale des intensités.
                    g.ReleaseHdc(hdc)
                End Using
            Next i 'on passe au pixel suivant sur l'axe des X
        Next j ' on passe à la ligne suivante
        X_Centroide = (X_Somme / Intensité) + X_Pointeur - V_Carré ' on calcule la position X du centroïde sur l'axe des X par rapport à la référence globale image (coin supérieur gauche)
        Y_Centroide = (Y_Somme / Intensité) + Y_Pointeur - V_Carré ' idem pour l'axe Y

 

Et c'est fini pour les calculs. Simple, non ?

 

Pour une étoile, le carré est relativement petit, donc peu de boucles, et temps de calcul rapide. Pour Jupiter, vu la taille du carré englobant, il faudrait un plus grand carré et forcément, un temps de calcul plus long.

 

JP

Lien vers le commentaire
Partager sur d’autres sites

Il y a 3 heures, Discret68 a dit :

Et c'est fini pour les calculs. Simple, non ?

oui

j'avais écrit un code qui agissait par tamis et qui de ce fait était très rapide, faudrait que je fouille dans le passé (20..25 piges au moins :o)

merci pour tes idées 😎

 

Lien vers le commentaire
Partager sur d’autres sites

il y a 4 minutes, Fred_76 a dit :

Impossible d’accéder à ce site déclaré comme pas sur...

 

Il faut passer outre le message d'alerte et ça fonctionne. Je viens de tester, aucun soucis pour télécharger le soft.

 

Lors de l'installation sur mon Mac, il a été nécessaire que je modifie les autorisations sinon, blocage du système également.

J'ai lancé le soft, ouvert une image et fais quelques mesures.

Lien vers le commentaire
Partager sur d’autres sites

Lorsque je sélectionne une étoile avec un carré ou une ellipse, je fais une mesure type "center of mass" qui devrait donner le centroÏd sur analyse de l'intensité lumineuse. Hors la valeur que j'obtiens est différente de celle affichée sur la palette d'outils. Et si je déplace la zone sélectionnée tout en conservant l'étoile dans la zone. Le center of mass varie également.

 

A creuser !!!

 

Mais déjà rien quen pointant le centre d'une étoile avec le pointeur de souris et en zoomant, on obtient les coordonnées sur l'image.

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation !

Vous pouvez répondre maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous pour poster avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.