Accueil > > > DÉTECTION DES CERCLES DANS UNE IMAGE: HOUGH
DÉTECTION DES CERCLES DANS UNE IMAGE: HOUGH
Information sur la source
Description
Le principe de base de la détection des cercles est très simple: On dessine les contours de l'image et pour tous les points appartenant aux contours, on dessine dans l’accumulateur un cercle de rayon R. Si l'on cherche à détecter un cercle de rayon R alors, le point de l'accumulateur ayant reçu le plus de suffrage sera le centre du cercle recherché. Avantages de cette méthode : on peut détecter un cercle même s'il est partiellement caché ou même si l'image est très bruité. Rapide et très robuste si l'on connais le rayon du cercle rechercher. Inconvénients: ce traitement nécessite de connaître approximativement le rayon du cercle recherché. Cette source propose 3 petits traitements mettant en relief les avantages de cette méthode. Les trois traitements sont accessibles en cliquant sur les trois icônes correspondantes dans la barre d'outil. -Traitement 1 : Découverte de la méthode: on sélectionne un intervalle de rayon possible et le programme trouve le cercle le plus adapté. -Traitement 2 : Robustesse au bruit : on ajoute du bruit dans l'image et on observe si la détection du cercle est toujours bonne.(ici, on détecte un cercle partielle) -Traitement 3 : Application simple: Détection de la pupille et de l'iris d'un œil.
Source
- //****************************************************************************************
- //MORARD Vincent
- //vincent.morard@cpe.fr
- //pistol.petesampras.free.fr
- //****************************************************************************************
-
- #include "CImage.h"
- #include "DlgCallback.h"
- void Message5(HWND hList,HWND hDlg,char *Mes,int Buf)
- {
- SendMessage(hList,LB_ADDSTRING, 0, (LONG)Mes);
- SendMessage(hDlg,WM_UPDATE,Buf,0);
- Sleep(0);
- }
- //************************************************************************************
- //Thread Cercle3 : Détection de cercle sur l'image d'un oeil.
- //Le but de ce traitement est de détecter le contour de la pupile ainsi que le contour de l'iris
- //Le but final étant de trouver le centre de l'oeil et les rayon des cercles associés.
- //************************************************************************************
- DWORD WINAPI DetectionCercle3(LPVOID lpParam )
- {
- HWND hDlg,hOK,hwndList;
- int R,X,Y;
-
- hDlg=(HWND) lpParam;
- hwndList=GetDlgItem(hDlg, IDC_LIST1);
- hOK=GetDlgItem(hDlg, IDOK);
-
- int t = GetTickCount(); //initialisation du temps
-
- SendMessage(hwndList, LB_ADDSTRING, 0, (LONG)"Début du traitement");
-
- if(Img[0].LoadBmp("./Hough.bmp")==0)return 0;
- Img[0].ConvertRGB2Gray();
- Message5(hwndList,hDlg,"Ouverture de l'image : Fait",0);
-
- if(Img[0].Sobel(GRAY,&Img[1])==0)return 0;
- Message5(hwndList,hDlg,"Sobel : Fait",1);
-
- if(Img[1].Threashold(254,&Img[2])==0)return 0;
- Message5(hwndList,hDlg,"Seuillage : Fait",2);
-
- if(Img[2].HoughCircleCompute(36,38,&Img[3],&X,&Y,&R)==0)return 0;
- if(Img[3].HoughContrasteAuto()==0)return 0;
- Message5(hwndList,hDlg,"Hough: détection de cercle : Fait",3);
-
- if(Img[0].DrawCircle(R,X,Y,255,0,0)==0)return 0;
- Message5(hwndList,hDlg,"Dessin du cercle trouvé : Fait",0);
-
- //Fin de la détection de la pupile coord: R, X, Y
-
- if(Img[0].Median(GRAY,9,40,&Img[4])==0)return 0;
- Message5(hwndList,hDlg,"Filtre médian : Fait",4);
-
- if(Img[4].Sobel(GRAY,&Img[5])==0)return 0;
- Message5(hwndList,hDlg,"Sobel : Fait",5);
-
- if(Img[5].Threashold(20,&Img[6])==0)return 0;
- Message5(hwndList,hDlg,"Seuillage: Fait",6);
-
- if(Img[6].HoughCircleCompute(100,100,&Img[7],&X,&Y,&R)==0)return 0;
- if(Img[7].HoughContrasteAuto()==0)return 0;
- Message5(hwndList,hDlg,"Hough: detection de cerlce : Fait",6);
-
- if(Img[0].DrawCircle(R,X+1,Y+1,0,255,0)==0)return 0;
- Message5(hwndList,hDlg,"Dessin du cercle trouvé : Fait",0);
-
- //Fin du traitement, le second cercle est de coordonnée R,X,Y
-
- SendMessage(hwndList, LB_ADDSTRING, 0, (LONG)"Fin du traitement, temps (ms) ");
- t = GetTickCount() - t;
- char Buf[20];
- strcpy(Buf,itoa(t,Buf,10));
- SendMessage(hwndList, LB_ADDSTRING, 0, (LONG)Buf);
-
- EnableWindow(hOK,TRUE);
- return 1;
-
- }
//****************************************************************************************
//MORARD Vincent
//vincent.morard@cpe.fr
//pistol.petesampras.free.fr
//****************************************************************************************
#include "CImage.h"
#include "DlgCallback.h"
void Message5(HWND hList,HWND hDlg,char *Mes,int Buf)
{
SendMessage(hList,LB_ADDSTRING, 0, (LONG)Mes);
SendMessage(hDlg,WM_UPDATE,Buf,0);
Sleep(0);
}
//************************************************************************************
//Thread Cercle3 : Détection de cercle sur l'image d'un oeil.
//Le but de ce traitement est de détecter le contour de la pupile ainsi que le contour de l'iris
//Le but final étant de trouver le centre de l'oeil et les rayon des cercles associés.
//************************************************************************************
DWORD WINAPI DetectionCercle3(LPVOID lpParam )
{
HWND hDlg,hOK,hwndList;
int R,X,Y;
hDlg=(HWND) lpParam;
hwndList=GetDlgItem(hDlg, IDC_LIST1);
hOK=GetDlgItem(hDlg, IDOK);
int t = GetTickCount(); //initialisation du temps
SendMessage(hwndList, LB_ADDSTRING, 0, (LONG)"Début du traitement");
if(Img[0].LoadBmp("./Hough.bmp")==0)return 0;
Img[0].ConvertRGB2Gray();
Message5(hwndList,hDlg,"Ouverture de l'image : Fait",0);
if(Img[0].Sobel(GRAY,&Img[1])==0)return 0;
Message5(hwndList,hDlg,"Sobel : Fait",1);
if(Img[1].Threashold(254,&Img[2])==0)return 0;
Message5(hwndList,hDlg,"Seuillage : Fait",2);
if(Img[2].HoughCircleCompute(36,38,&Img[3],&X,&Y,&R)==0)return 0;
if(Img[3].HoughContrasteAuto()==0)return 0;
Message5(hwndList,hDlg,"Hough: détection de cercle : Fait",3);
if(Img[0].DrawCircle(R,X,Y,255,0,0)==0)return 0;
Message5(hwndList,hDlg,"Dessin du cercle trouvé : Fait",0);
//Fin de la détection de la pupile coord: R, X, Y
if(Img[0].Median(GRAY,9,40,&Img[4])==0)return 0;
Message5(hwndList,hDlg,"Filtre médian : Fait",4);
if(Img[4].Sobel(GRAY,&Img[5])==0)return 0;
Message5(hwndList,hDlg,"Sobel : Fait",5);
if(Img[5].Threashold(20,&Img[6])==0)return 0;
Message5(hwndList,hDlg,"Seuillage: Fait",6);
if(Img[6].HoughCircleCompute(100,100,&Img[7],&X,&Y,&R)==0)return 0;
if(Img[7].HoughContrasteAuto()==0)return 0;
Message5(hwndList,hDlg,"Hough: detection de cerlce : Fait",6);
if(Img[0].DrawCircle(R,X+1,Y+1,0,255,0)==0)return 0;
Message5(hwndList,hDlg,"Dessin du cercle trouvé : Fait",0);
//Fin du traitement, le second cercle est de coordonnée R,X,Y
SendMessage(hwndList, LB_ADDSTRING, 0, (LONG)"Fin du traitement, temps (ms) ");
t = GetTickCount() - t;
char Buf[20];
strcpy(Buf,itoa(t,Buf,10));
SendMessage(hwndList, LB_ADDSTRING, 0, (LONG)Buf);
EnableWindow(hOK,TRUE);
return 1;
}
Conclusion
Le logiciel en lui même permettant ces traitements à aussi été amélioré: -Drag and drop des image provenant de fichier vers le logiciel -Scroll verticale et horizontale
Historique
- 13 février 2008 00:00:38 :
- Mise en forme
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Definir une region circulaire dans une image 12 bit bmp [ par pirate75000 ]
Je travail sur des images de 12 bits de niveau de grisJe desire appliquer des filtre sur cette image,la partie principale etant contenue dans un cercl
Transformée de Hough [ par elo29 ]
Bonjour, Je travaille avec visual C++ et je debute dans le traitement d'image et en programmation C++. Je dois effectuer la detection de cercles dans
traitement image : filtre circulaire [ par jphotension ]
jphotensionBonjour,je traite des images binaires bitmap en programmant en C. J'effectue des traitements sur l'image : érosion, dilatation, ouverture,
image en forme de cercle [ par mathieu57100 ]
bonjour, j'aimerai savoir comment faire appraitre une image seulement dans un cercle, la partie de l'image hors du cercle n'apparaitrait pas.j'ai essa
détection de route dans une image de rue [ par wnxbcvqmsldkfjgh ]
Bonjour,J'ai un projet dans lequel je dois détecter une route dans une image de rue, contenant bâtiments, piétons, voitures... Savez-vous si on peut t
Mise en couleur d'image sur une page HTML [ par stephane85700 ]
bonjour, Je débute dans la création de site, et j'aimerai un peu de vos lumières pour avancer.Je souhaiterais pouvoir créer une page ou il serait poss
traitement d'image [ par salma2011 ]
Slt tt le monde,je cherche un théme pour ma representation de PFE avec powerpoint,j'ai comme sujet le traitement d'image avec vc++,,qq1 peut m'aider??
Probleme avec filtre image en c [ par simomiso ]
Bonjour,tout d'abords un GRAND MERCI a tous ceux ki ont participé ds la conception de ce site.En fait j'ai un proble avec un filtre image avec matrice
demande d'aide sur c++builder(segmentation sequence video) [ par fcbomar2007 ]
slt mes frere,je suis un etudiant en informatiquej'ai un projet de fin d'étudequi se présentedans un petit logiciel ,c'est la segmentation séquence v
Transformée de Hough 3D [ par alice69230 ]
Bonjour,Quelqu'un saurait-il où trouver le code pour faire la transformée de Hough 3D d'un ensemble de points?Merci d'avance!
|
Derniers Blogs
[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010!LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010! par MPOWARE
Toutes les vidéos de ce lancement sont en ligne!
Partie I - Intro
http://www.youtube.com/watch?v=LkQzTQ8T6CA
Partie II - Démo 1
http://www.youtube.com/watch?v=drAhYQ7lqvo
Partie III - Démo 2
http://www.youtube.com/watch?v=c8KM_1Gqybc...
Cliquez pour lire la suite de l'article par MPOWARE
Forum
TABLEAU DE LISTETABLEAU DE LISTE par help26
Cliquez pour lire la suite par help26
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|