mala05

Analyse d'EP dans une cave: méthode Starlink par bibi ;)

Recommended Posts

il y a 20 minutes, Cyrille Thieullet a dit :

Sur un cycle.

ah génial, merci d'avoir essayé

du coup c'est jouable, c'était ma grande peur

ton échelle verticale correspond à quoi ? chaque ligne vaut un pixel ?

 

Share this post


Link to post
Share on other sites

Bonjour,

 

 La vitesse de capture est peut être trop élevée.
Ainsi les deltas seraient trop petits ce qui pourrait induire une instabilité par moment qui se verrait sur le graphique ?

A moins que cela ne vienne du motif parfaitement répétitif et l'algo se perdrait  ?

Des deux à la fois ? Ca s'apparenterait à du bruit de lecture qu'il faudrait filtrer.

Quid de micro imperfections sur la mécanique de la monture ? Bon, je n'y crois pas trop.

6554782602899_testpelive.jpg.a6093673a842169f2e3c71c8a7960707.jpg

En zoomant, dans plus de 80% des cas c'est un point qui sort de la courbe.

6554791ed4206_testpepic.jpg.6246f665cf8c3f516f85c2c2a8d198d1.jpg

 

De combien de correction par seconde as tu besoin avec ce type de PE, les capacités de calcul du boitier, la réactivité de la monture ?

Enfin ta zone de netteté est faible. Ca n'aide pas non plus

 

Sur le ciel et les étoiles, avec une prise toute les 700ms, il n'y a pas ce pb, juste le seeing et dans mon cas la "nervosité" naturelle d'une monture à réducteur harmonique sans correction...

65547bb29d324_testpeciel.jpg.dac409e6ed8812ecf2e434d67fb75356.jpg

En zoomant

6554874c858df_testpecielzoom.jpg.c8496422b1191f460699374447cfb923.jpg


 

Cyrille

Share this post


Link to post
Share on other sites
Il y a 2 heures, Cyrille Thieullet a dit :

moins que cela ne vienne du motif parfaitement répétitif et l'algo se perdrait  ?

Des deux à la fois ? Ca s'apparenterait à du bruit de lecture qu'il faudrait filtrer.

Oui je suis persuadé que le motif se voit sur cette courbe...

Le capteur voit environ 3mm en largeur, donc les 1280 pixels.

Soit 2.3um par pixel et aussi (hasard) un mouvement de 2.3 pixel par seconde (la grille fait environ 15cm de diamètre)

Et ca semble correspondre à ce que tes screenshots donnent si je lis bien.

 

Il y a une vingtaine de lignes sur l'écran, dont la largeur est parcourue en 550s

Ce qui fait 27s par ligne et la moitié par bord de ligne soit 13-14s

On dirait bien qu'on voit un battement à cette fréquence, ça indiquerait que le motif joue effectivement.

Malheureusement ça correspond aussi au battement des dents de mes poulies (12s)

Je vais essayer de tester les différentes méthodes du template match, si ça se trouve ça pourrait donner de meilleurs résultats...

 

Par contre, je ne vois qu'une seule explication au battement rapide d'environ 1s : l'approximation subpixel qui extrapole mal, tantôt trop tantôt pas assez

 

Je n'ai malheureusement pas sous la main un courbe d'EP "en vrai" pour cette monture

Dès que je peux j'en sors une pour comparer.

 

Enfin ce qui me met le plus le doute c'est la conclusion si ce truc marche : cette monture est miraculeuse de stabilité.

Et c'est pas normal.

 

J'attends toujours mon microscope usb qui devrait me permettre d'avoir un champ bien meilleur, et même peut-être de pouvoir utiliser un CD en guise de grille.

Ça ferait un motif pseudo aléatoire qui permettrait peut être au templatematch de donner de meilleurs résultats.

 

To be continued...

G.

 

Share this post


Link to post
Share on other sites
4 hours ago, gehelem said:

Enfin ce qui me met le plus le doute c'est la conclusion si ce truc marche : cette monture est miraculeuse de stabilité.

Et c'est pas normal.

C'est parce que j'avais trop d'images et que je n'avais pas la taille des pixels et la durée. En omettant des frames avec des pixels de 2.3 pour arriver autour de 550s de durée ca donne cela :

65550062ed5ee_testpe2.3510s.jpg.a5002ff91178635e9db8000bb935d7f9.jpg

Y a plus le pb de stabilité avec des pics avec un fps moindre ;-)

655500aead7a0_testpe2.3zoom.jpg.1e7a2aa5da4fe5b9dac0485f518beffb.jpg

 

Cyrille

Share this post


Link to post
Share on other sites
Il y a 1 heure, Cyrille Thieullet a dit :

ca donne cela :

C'est diabolique !!!

J'en reviens pas, enfin un truc qui ressemble à une EP, et sacrément précis, fait au sec tranquillou sur le bureau.

Dingue, merci.

 

Je vais donc une fois de plus rereretenter d'obtenir un beau graphe comme ça, j'en suis loin encore

Share this post


Link to post
Share on other sites

ça risque de s'améliorer avec ceci, bien pratique avec l'éclairage intégré

10~15€ sur les "plateformes habituelles"

20231116_101549.thumb.jpg.07f0a819889078e3ec9365982c4000ea.jpg

image.png.3b7761175574bb6f40a803f1c0557978.png

 

Share this post


Link to post
Share on other sites

bon désolé mais je ne vois pas comment faire autrement que de vous embêter avec mon code...

je n'y arrive toujours pas, je ne sais même plus ce que j'arrive à voir : du bruit ou des mouvements

à la sortie de ce machin qui passe environ 10 fois par seconde je m'attendrais à ce que les  variations des valeurs du subpixel me donnent l'EP

Mais non, ça se contente de faire du bruit autour de 0 :

image.png.deeeb42ad5fb1fb01f9afe4898e5450f.png

 

Vous voyez un truc qui clocherait là dedans ?

(je me suis contenté de copier/coller et d'ajouter des annotations, ce n'est pas du "vrai de vrai" )

 

void MainWindow::traiterFrame(Mat frameIn) // ici je traite chaque image qui arrive
{
    cv::Mat frame, gray;
    cv::cvtColor(frameIn, frame, cv::COLOR_BGR2GRAY); // je convertis en noir et blanc
    int sideSel = 10; 
    Rect roi(sideSel, sideSel, frame.size().width - sideSel, frame.size().height - sideSel);
    Mat templ = frame(roi); // je selectionne un partie de l'image qui est arrivée

	/* passage du matchtemplate de base */
	/* "previousFrame" contient l'image précédente convertie elle aussi en NB */

    int match_method = TM_CCORR_NORMED; // celle ci, ou d'autres, marche pas
    cv::Mat result_mat;
    int result_cols =  previousFrame.cols - templ.cols + 1;
    int result_rows = previousFrame.rows - templ.rows + 1;
    result_mat.create( result_rows, result_cols, CV_32FC1 );
    matchTemplate(previousFrame, templ, result_mat, match_method);
    //normalize( result_mat, result_mat, 0, 1, NORM_MINMAX, -1, Mat() ); // je ne sais pas s'il faut normaliser ou pas ... essayé avec et sans ...

	/* detection du min/max */

    double minVal;
    double maxVal;
    Point minLoc, maxLoc, matchLoc;
    minMaxLoc(result_mat, &minVal, &maxVal, &minLoc, &maxLoc, cv::Mat() );
    if( match_method  == TM_SQDIFF || match_method == TM_SQDIFF_NORMED )  matchLoc = minLoc;
    else matchLoc = maxLoc;

	/* et le fameux subpixel, sans rien changer à l'implémentation */
    subPix = (cv::Point2d)matchLoc;
    minMaxLocSubPix(&subPix, result_mat, &matchLoc, 1);

   (...)
}

 

 

image.png.f3605ba5bc6e01f0dd79ece07aebe84d.png

Share this post


Link to post
Share on other sites

Bonjour,

 

Là tu a un matchLoc qui est toujours exactement à 10, 10, comme le coef Sidel qui sert à calculer le roi.

Aussi, d'une frame à l'autre il n'y a aucun mouvement pourtant j'imagine que le film bouge.

Ca veut dire que la pattern (templ) que tu cherches se retrouve toujours au même endroit dans la frame où tu cherches.

Normalement templ est fixe entre N frames et ce n'est qu'après un mouvement qui amène le rectangle de mathcing à sorting de la frame qu'il faut le réinitialiser (> à 10 dans ton cas)

J'ai l'impression que tu fais l'inverse en extrayant  templ à chaque frame et le résultat est statique.

 

Cyrille

Edited by Cyrille Thieullet

Share this post


Link to post
Share on other sites
Il y a 18 heures, Cyrille Thieullet a dit :

Normalement templ est fixe entre N frames et ce n'est qu'après un mouvement qui amène le rectangle de mathcing à sorting de la frame qu'il faut le réinitialiser.

Merci pour ton aide 

J'essaie cette méthode (sans vraiment comprendre la différence) mais encore sans succès depuis hier soir, je vais persévérer.

Je suis sans doute en plein paradoxe de Xenon.

Share this post


Link to post
Share on other sites

Bonjour,

Le principe d'avoir un snapshot fixe de la référence (zone centrale - une bordure à définir) et de la chercher après dans une suite d'image c'est pour stabiliser l'algo.

C'est d'autant plus vrai si la focale est courbe car le mouvement va être très lent.

Plus l'écart est grand plus ca va être fiable : plus j'attends pour changer la référence, plus je vais avoir de mouvement et plus le calcul va fonctionner.

Regarde les courbes avec les pics quand j'ai traité toutes tes images et celle en prenant une image sur 8. Faire du subpixel quand ca bouge pas de plus d'un pixel ca devient plus aléatoire.

Et il arrive un moment où la partie de la référence en superposition avec la zone centrale de l'image en cours est trop petite (à calibrer), alors on en reprend cette nouvelle zone centrale de la dernière image comme référence et c'est reparti.

Cyrille

Share this post


Link to post
Share on other sites
Il y a 2 heures, Cyrille Thieullet a dit :

Bonjour,

Le principe d'avoir un snapshot fixe de la référence (zone centrale - une bordure à définir) et de la chercher après dans une suite d'image c'est pour stabiliser l'algo.

C'est d'autant plus vrai si la focale est courbe car le mouvement va être très lent.

Plus l'écart est grand plus ca va être fiable : plus j'attends pour changer la référence, plus je vais avoir de mouvement et plus le calcul va fonctionner.

Regarde les courbes avec les pics quand j'ai traité toutes tes images et celle en prenant une image sur 8. Faire du subpixel quand ca bouge pas de plus d'un pixel ca devient plus aléatoire.

Et il arrive un moment où la partie de la référence en superposition avec la zone centrale de l'image en cours est trop petite (à calibrer), alors on en reprend cette nouvelle zone centrale de la dernière image comme référence et c'est reparti.

Cyrille

 

oui, je pense avoir compris

du coup j'ai du mieux

mais maintenant "ça saute" au changement de template...

comment fais-tu pour arriver à la continuité ?

je me demande si je ne vais pas faire courir 2 ou 3 templates en déphasé, pour écarter celui qui s'approche du bord si besoin

 

image.png.08b620ddef08c8b6c4b35f594390b567.png

 

  • Like 2

Share this post


Link to post
Share on other sites

Pfff

Suis pas loin du découragement 

Je patauge et je vous enquiquine avec des trucs qui semblent simples, à un moment il faut savoir dire qu'on est une buse...

Je vais continuer ce WE, mais après ça rejoindra l'immense tiroir des tentatives de bidouilles avortées.

Besoin de dormir un peu...

Share this post


Link to post
Share on other sites
Il y a 1 heure, gehelem a dit :

Pfff

Suis pas loin du découragement 

Je patauge et je vous enquiquine avec des trucs qui semblent simples, à un moment il faut savoir dire qu'on est une buse...

Je vais continuer ce WE, mais après ça rejoindra l'immense tiroir des tentatives de bidouilles avortées.

Besoin de dormir un peu...

Cyrille me rependra si j'ai pas bien suivi mais au moment où tu bascules de mire tu appliques le delta de position entre les deux mires à tes nouvelles mesures pour ne pas décrocher et ainsi de suite.

Share this post


Link to post
Share on other sites

Ah Bravo c'est proche du but !

 

Le truc c'est d'arrêter avant le bord. J'ai pas été assez clair au dessus.

Il faut que tu arrêtes le rectangle vert avant le bord.

Je m'arrête quand maxLoc.x <5 ou maxLoc.y<5 ou maxLoc.x+ref.cols > width-5 et maxloc.y+ref.rows >height-5

A ce moment là, je prends une nouvelle ref au centre.

 

Et là il n'y aura plus de saut ;-)

 

Il te faudra redresser le graph avec une regression lnéaire.

 

Après aussi tu peux prendre peut être une zone plus grande ca sera plus stable.

 

Cyrille

Edited by Cyrille Thieullet
  • Like 1

Share this post


Link to post
Share on other sites

@gehelem 100% d'accord avec Cyrille. Tu y es presque! La régression linéaire derrière (attention que sa plage soit bien multiple de ta période de vis sans fin) va te permettre d’annuler la vitesse sidérale et tu l'auras ta courbe d'EP. :)

Share this post


Link to post
Share on other sites
Il y a 2 heures, Cyrille Thieullet a dit :

Le truc c'est d'arrêter avant le bord. J'ai pas été assez clair au dessus.

Il faut que tu arrêtes le rectangle vert avant le bord.

Je m'arrête quand maxLoc.x <5 ou maxLoc.y<5 ou maxLoc.x+ref.cols > width-5 et maxloc.y+ref.rows >height-5

 

oui, c'est ce que j'ai compris et essaie de faire

ce qui est trompeur sur mon screenshot c'est que la position initiale du template c'est le vert, et le rouge c'est là ou je le retrouve sur la frame courante

le mouvement est de droite à gauche et de haut en bas

donc là tu vois que le rouge arrivant à gauche je m’apprêtais à basculer sur un nouveau template, et ça allait décrocher (j'ai fait le screeshot juste avant)

En tout cas je crois bien que je fais ce que tu m'as expliqué.

 

Sur la régression en effet, la difficulté est de trouver les bonnes valeurs...

il suffit que je bouge un peu le capteur et ça me fiche tout par terre

il faudrait que j'arrive à l'estimer à la volée, en disant que grosso modo sur au moins 8 minutes (période de ma VSF) je dois avoir une moyenne à 0

J'en suis pas encore là, je tatonne en la calculant avec une feuille de calcul à posteriori chaque chose en son temps

(sur mon screenshot j'en applique bien une, mais est elle est trop intense car sans régression ça dévie vers le bas)

 

Bref, faut que j'arrive d'abord à faire sauter ces sauts, j'ai encore de la choucroute dans la tête.

 

Il y a 2 heures, mala05 a dit :

@gehelem 100% d'accord avec Cyrille. Tu y es presque! La régression linéaire derrière (attention que sa plage soit bien multiple de ta période de vis sans fin) va te permettre d’annuler la vitesse sidérale et tu l'auras ta courbe d'EP. :)

Merci !

Share this post


Link to post
Share on other sites

hé bin dis donc !!!

cette fois ci je la tiens, qu'à trouver la bonne regression

sur 500s, par d'accrocs, en direct, etc ...

Oouf

Merci pour votre aide

image.png.ac5a53bc6fc0d43d19799ba81702cdcd.png

Share this post


Link to post
Share on other sites
Il y a 6 heures, gehelem a dit :

c'est pas beau ça ?

Belle! Un asservissement en boucle fermée et tu l'as ton TDM! :)

Share this post


Link to post
Share on other sites
Il y a 2 heures, mala05 a dit :

Belle! Un asservissement en boucle fermée et tu l'as ton TDM! :)

 

ça va être une boucherie, j'ai pas fini de vous enquiquiner

image.png.ef2f9c25bdc3bc723da8f2fb89be7eb4.png

  • Haha 1

Share this post


Link to post
Share on other sites

Vous êtes des monstres les gars ! 

Les fabricants d'encodeurs sont en train de trembler :-)

Vous envoyez les corrections à la monture via le port st4 ?

Edited by spider_cochon

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now