begin process at 2012 05 30 14:06:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

Programme C algorithme de Hough


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Programme C algorithme de Hough

lundi 22 février 2010 à 14:38:16 | Programme C algorithme de Hough

Waouuu

Bonjour, je suis actuellement en échange au Japon et dans mon labo mon prof m'a donné a programmer la transformée de Hough pour detecter les lignes de routes dans une image. Je suis debutante en C et j ai deja demandé de l'aide plusieurs fois dans mon labo mais j'attend toujours et je n'ose plus redemander...
Si quelqu'un peut me dire pourquoi mon code fait n'importe quoi? (il compile mais apparement quelque chose dans l'algo cloche je pense...). Merci d'avance!



extern "C"
{
#include <pgm.h>
}
#include <stdio.h>

#include <math.h>

#include <pam.h>



main(int argc, char *argv[])
{



int x, y;
int dx,dy;
int G;
FILE *infile, *outfile;
int cols, lignes, format,thetadeg,rr;
gray maxval;
gray **table1, **table2, ;//two * to have a 2 dimension table **accumulateur
int k,e,d,max,p,q,retient,bidul,s,lala,a,b,acc,rint,tint,yint,A,B,rint2,lala2;
int m=0;
int j=0;
int i=0;
double rmax,r,theta,c;
double co,pi,thetaRad;
const int m_FacteurEtalement = 20000;







int **accumulateur2= new int*[m_FacteurEtalement];
for(lala=0;lala<m_FacteurEtalement;lala++) {
accumulateur2[lala] = new int[m_FacteurEtalement];

}


if (argc!=3) {
printf("Mauvais Nombres Arguments\n");
return 0 ;
}


// Reading of the file
pgm_init(&argc, argv);
infile = pm_openr(argv[1]);
pgm_readpgminit( infile, &cols, &lignes, &maxval, &format );//reading of the file called infile
table1 = new gray*[lignes];// reservation of an espace of the memory. the espace size is "rows"/
table2 = new gray*[lignes];


for (y = 0; y <lignes; y++) {//for each ligne y
table1[y] = pgm_allocrow (cols);// reservation of a memory space with the size of one column
table2[y] = pgm_allocrow (cols);

pgm_readpgmrow( infile, table1[y], cols, maxval, format);//read but also filed the new created space (grayrow) with the original image(whiwh is in the file infile)
}


rmax=floor( sqrt(lignes^2+cols^2)+1);



//INITIALISATION IMAGE2

for(y = 0; y < lignes; y++)
{
for(x = 0; x < cols; x++){

table2[y][x]=0;
}
}


//INITIALISATION ACCUMULATEUR

for(y = 0; y < m_FacteurEtalement; y++)
{
for(x = 0; x < m_FacteurEtalement; x++)
{
accumulateur2[y][x]=0;
}
}









//INCREMENTATION ACCUMULATEUR

for(x = 0; x < lignes; x++)
{

for(y = 0; y < cols; y++)//parcours de l'image1

{

if (table1[x][y]>60 )//si le pixel est blanc

{

for (thetadeg = 0; thetadeg <360; thetadeg++)

{
thetaRad=6.28*thetadeg/360;//conversion en radian
r=x*cos(thetaRad)+y*sin(thetaRad) ; // tracage des "lignes" dans l accumulateur
rint = static_cast<int>(r); // j en fait un entier car je devrais l'utiliser comme indice de tableau
rint2=-rint;

if (-rint<m_FacteurEtalement && rint<0 )
{

accumulateur2[rint2][thetadeg]++;

}
}
}
}
}






//TRACAGE DE LIGNES DANS LA NOUVELLE IMAGE


for(rr = 0; rr < m_FacteurEtalement; rr++) //parcours de l accumulateur -------------> nombre pê a changer
{
for(thetadeg = 0; thetadeg < 360; thetadeg++)
{

if (accumulateur2[rr][thetadeg]>59) // --------------pê a changer

{
for(x = 0; x< lignes; x++) //parcours de l image2
{
thetaRad=6.28*thetadeg/360;
A=static_cast<int>((cos(thetaRad))/sin(thetaRad));
B=static_cast<int>(-rr/sin(thetaRad));

if (-A*x+B<cols && -A*x+B>0 && A!=0){
table2[x][-A*x+B]=255;
}

}

}
}

}






// Saving
outfile = pm_openw(argv[2]);
pgm_writepgminit( outfile, cols, lignes, maxval, 0 );
for (y = 0; y<lignes; y++){
pgm_writepgmrow(outfile, table2[y],cols, maxval, 0);
}




//release of space

for (y=0; y<lignes;y++){
pgm_freerow( table1[y] );
pgm_freerow( table2[y] );

}
free(table1);
free(table2);

pm_close( outfile );
pm_close( infile );




for(lala=0;lala<rmax;lala++){
delete accumulateur2[lala];
}
delete [] accumulateur2;




}

lundi 22 février 2010 à 14:52:19 | Re : Programme C algorithme de Hough

Pistol_Pete

Salut
J'ai pas le temps de regarder ton algo mais en voici un fonctionnel:

Détection de droite:
http://www.cppfrance.com/codes/TRANSFORMEE-HOUGH-DETECTION-DROITES_43381.aspx
et
http://www.cppfrance.com/codes/DETECTION-DROITES-DANS-IMAGE-HOUGH_43486.aspx

Détection de cercle:
http://www.cppfrance.com/codes/DETECTION-CERCLES-DANS-IMAGE-HOUGH_45729.aspx
A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
mardi 23 février 2010 à 06:00:41 | Re : Programme C algorithme de Hough

Waouuu

Merci beaucoup mais ca n est pas vraiment ca du tout ce que je demande. De plus je dois le faire en C, non en C++ que je connais encore moins...!
Si quelqu un a le temps de regarder mon code je vous en supplie!!!
Merci!
mercredi 2 mars 2011 à 17:11:12 | Re : Programme C algorithme de Hough

ccgousset

Membre Club

Avec un an de retard je cherche a faire marcher hough mais en VB6. Par hasard aurai tu ton morceau de code fonctionnel. Si oui ca m'interesse. J'ai vu les code de pistolpate mais c'est le tien qui m'intereessse . Il pourrai tourner en small C . Si tu l'as operationnel donne le moi s'il te plait. En attendant je vais essayer de le faire fonctionner pour le transrire en VB6. Merci. J'ai publie une detection de cercle par algo bresenham si ta besoin. Christophe. ccgousset@gmail.com


Cette discussion est classée dans : int, lignes, for, lala, outfile


Répondre à ce message

Sujets en rapport avec ce message

c++ algo [ par altay ] L'analyste programmeur a 3 dimensionest ce que quelqu'un pourrait me faire l'algo de ce code merci d'avance :#pragma hdrstop#include #include algo C++ [ par altay ] L'analyste programmeur a 3 dimensionest ce que quelqu'un pourrait me faire l'algo de ce code merci d'avance :#pragma hdrstop#include #include C ANSI allocation dynamique de tableau [ par pedu ] Ce petit pro beug en sortie, pourquoi et que faire ?#include #include int (*pi)[1][1]; /* pointeur sur un tableau d'entiers */void main(void){ unsi Problem Affichage de mon Tableau [ par Orezza ] salut à tous, j'ai un blem à l'affichage du tableau. l'utilisateur parametre son tableau, c lui qui l'initilize mais j'arrive pas à afficher apres le POINTEUR aye aye aye [ par djkill55 ] quelqun peut m expliquer pk ce programe ne marche pa svp...???le but c de remplir une matrice [3][3]a l aide des pointeur, la fct initializ est celle petit probleme de pause [ par sozer2 ] Bonjour je suis débutant en C++ et j'ai un ptit problemeJe souhaite faire une pause sous linux mais la fonction system("pause"); ne marche que sous wi Segmentation Fault....en traitement d'image [ par psysta ] Bonjour,je suis nouveau dans la programmation en C. J'ai un programme Matlab qui marche bien, et je souhaiterais l'implémenter en C. Le pgm compile bi utiliser en vb++ une dll faite en c++ [ par jon26 ] Bonjour, je me casse la tête à tenter d'appeler une fonction de ma dll vc++ 6.0 en vb6.0.Voici le code de ma fonction exemple dans la dllextern "C" __ Création de 2 tableaux dynamik à 2D [ par flopflopp ] Bonjour, je voudrais soumettre un petit problème en C++, j'ai une simple fonction qui crée un tableau dynamique à 2 dimensions, le rempli avec des 1 e


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,546 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales