J'essaye de tracez un cercle à l'aide d'une matrix Rotation sur une image

Résolu
laura1978 Messages postés 43 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 21 janvier 2008 - 10 janv. 2008 à 14:08
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 - 16 janv. 2008 à 14:11
Salut à tous,
svp, je dois tracez un cercle à l'aide d'une matrix de rotation (dimension 2)
et j'utilise la matrix suivante avec Coordonnés Homogene:
(x')    (x)   (cos(a)  -sin(a)  xm * (1 - cos(a)) + ym * sin(a))
(y') = (y) * (sin(a)   cos(a)  ym * (1 - cos(a)) - xm * sin(a))
 (1 )   (1)   (  0                      0                      1             )

et j'obtiens cet Algoritme :

#include "Drehmatrix.h"

extern FrameGrabber *fg;
extern BYTE *puffer1;  // Originalbild
extern BYTE *puffer2;  // ziel Bil



// Bildmitte ermitteln MAX_ZEILE ist 576 und MAX_SPALTE ist 768
const int Xm = MAX_SPALTE / 2;
const int Ym = MAX_ZEILE / 2;

void Drehmatrix(HDC hdc,COLORREF farbe)
{
 double x_Neu, y_Neu;
 double phi;
 
 int pixel;
 
 double radius = 100.5;
 
 int x_puffer1, y_puffer1;
 
 int x, y, i;
 
 //Umrechnung von Grad nach Bogenmass
 //phi = PI * phi_in_deg / 180;



 pixel=(int)(2.0*(double)radius*PI);
 
 
 for (y = 0; y < MAX_ZEILE; y++)
 {
  for (x = 0; x < MAX_SPALTE; x++)
  {
     i = y * MAX_SPALTE + x;



            phi =(double)i/pixel*2*PI;
    
   // Koordinaten aus dem originalen Bild ermitteln
  
   x_Neu =(double) Xm + cos(phi) * (double)(x - Xm) - sin(phi) *(double) (y - Ym);
   
   
   y_Neu = (double)Ym + sin(phi) * (double)(x - Xm) + cos(phi) * (double)(y - Ym);
     

   // originalen Bild neu Koordinaten
   x_puffer1 =  (int) (x_Neu);
   y_puffer1 = (int) (y_Neu);



   SetPixel (hdc, x_puffer1, y_puffer1 ,farbe);



   
  }
 }



}




 



LRESULT CALLBACK DialogProc_Drehmatrix(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{



 //COLORREF farbe = RGB(255,0,0);
 COLORREF farbe;
  
 switch (message)



 {



  case WM_PAINT:



    HDC      hdc;
    PAINTSTRUCT   ps;
          farbe = 0x0000FF;
    hdc = BeginPaint(hwnd, &ps);   //ganze Bild
       fg->ZeichneFrame(2,hwnd);//
     Drehmatrix(hdc, farbe);



    EndPaint(hwnd, &ps);



    return 0;



    break;




 



  default:       // Nachrichten weiterleiten



    return DefWindowProc(hwnd, message, wParam, lParam);



 



   }



   return 0;




}



mon Problem est que au lieu d'obtenir un cercle j'ai plusieurs cercles.
SVP aidez moi je voudrais bien obtenir un Cercle

43 réponses

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
16 janv. 2008 à 10:08
Pour Hough c'est plus complique:

Moi ce que j'ai fais:
1) Choisir le repere dans l'espace X Y et Rho Theta, (j 'ai pris au centre de l'image pour XY et Height/2 et 0 pour Rho Theta)
2) Pour tous les points de l'image, s'assurer que l'on obtient le bon rho et theta.
3) Pour UN point de l'image de sobel, tracer le sinus correspondant en s'assurant qu'il donne bien ce qu'on veut

Tu es maintenant capable de calculer la transformee de Hough

4) Pour un point dans Hough trouver les coordonnees de rho et Theta et tracer la droite correspondante dans l'espace X,Y

Une fois que tu as la droite que tu souhaites, tu as fais la tranformee de Hough inverse.

La tu as tous fait, il reste plus qu'a racorder le tous.

Mon site internet : http://pistol.petesampras.free.fr
0
laura1978 Messages postés 43 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 21 janvier 2008
16 janv. 2008 à 13:38
Merci j'ai suivie ton conseil et cela marche genialement
donc je peux maintenant sur ce Theme mettre reponse acceptée?
A++
0
laura1978 Messages postés 43 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 21 janvier 2008
16 janv. 2008 à 13:47
le Hough=>
le Prof  a fait l'enoncé autrement ici.,  Je dois tout d'abord
1) dessiner des lignes (verticales, et horizontales) sur une feuilles
2)Transformer à l'aide d'un Sobel(qui est déjà fait et functione sans Problem)
3) maintenant le plus difficile je dois à l'aide du windows api fait as ce que je puisse donner un angle (exemple 2 dégré) et mon Programme doit être en mesure de choisir une ligne sur la dite image qui est située à 2 dégré et apres, je dois être de calculer la transformee de Hough 
4) ici par contre je dois ensuite tracer la droite correspondante (en tenant compte de l'angle 2 dégré)
5) à l'aide du Hough trouver les coordonnees de rho et Theta
6) avec la hessische'sche Normalform donner les coodonnées de la droite
sur l'ecran
as tu au mois compris?
0
Rejoignez-nous