PDA

Voir la version complète : Sujet sur la reconaissance de forme


TheTiger
25/08/2005, 21h42
J'ai fait pas mal de découverte à ce sujet mais j'ai eu des petits porblèmes comme par exemple comment trouver des caractéristique sur une image ;)

Donc pour pas passer mon temps à écrire pour rien je vous demande si un peu plus de détaille sur le sujet vous intéresse et je vous apporterrais des éléments :D Puis ce sujet pourait alors devenir util bien que moi même j'ai pas trouvé la solutions ultime j'ai besoin de savoir si déjà il y aurai des gens intéréssé voilà tout :)

Lenolian
25/08/2005, 21h54
Je connais un peu les matrices de Sobel pour détecter les contours, mais je m'y suis jamais vraiment penché. Quelques articles seraient toujours les bienvenues.

MrCool
25/08/2005, 23h07
Perso je serais intéressé par des articles un peu plus complexes sur le wiki (reconnaissance de forme, traitement du signal, tracé de courbes ou autres joyeusetés ^^).

Les idées ne manquent pas, mais le problème est que ça demande d'être très bien calé dans le domaine et pas mal de temps :)

TheTiger
25/08/2005, 23h39
Pour commencer je vous donne 2 lien vers des fichiers PDF
Pour vous éviter de vous casser la tête à trouver les bon mots clées :
http://www.google.fr/search?hl=fr&q=cascade+reconnaissance&meta=lr%3Dlang_fr
et dans cette recherche on trouve ces liens sympatiques comme :
http://orasis2005.univ-bpclermont.fr/user/www/orasis/papiers/016.pdf
http://archivesic.ccsd.cnrs.fr/documents/archives0/00/00/11/72/sic_00001172_00/sic_00001172.pdf

Vilà pour commencer

Ces fichiers en PDF sont assez généraliste voici la démarche à suivre pour faire de la reco de forme par cascades de caractères :

Il faut une liste des caractères d'un objet et pour les obtenir il faut faire un algo mais pour le moment je vais expliquer que la parti reconnaissance :

On a donc un rectangle de dimention 2D qui dépendent de la taille de l'objet d'apprentisage à la base

par exemple on a pris une série de photos de visage dans une taille 100*100
L'algorithme de reconaissance va se servir de caractéristiques pour évaluer la probabilité qu'il y ai un visage à un zoom testé j'explique:

en fait chaque caractéristique poura être vérifié par la recherche d'autre formes précises dans une zone donné en claire je sais que je doit chercher les yeux dans le haut du visage et que dans les yeux je dois chercher la pupille et dans la pupille ses caractéristiques qui sont la direction des contours et le seuil des contours...

Cela vous donne une idée mais c'est en gros ce que vous dit les PDF je vais passer aux caractéristique c'est à dire comment les obtenirs

D'abord qu'est ce qu'une matrice de convolution ?
C'est un tableau en 2 dimention qui contient un nombre de ligne et de colone impaire pour ce centrer sur un pixel et les donnés sont des coéficients

je vous donne un exemple d'une matrice de convolution qui rend une image plus net.

0 -1 0
-1 5 -1
0 -1 0

C'est un tableau qui va venir dans l'idée se superposer à l'image pour chaque pixels
et dans une autre image c'est à dire l'image de sortie on va recalculer le pixel comme ceci
on va faire la somme des pixels sous la matrice en tenant compte du coef bon quezaquo ?

je prend l'exemple d'une image ou les pixels sont codés par des chiffres de 0 à 9

0 1 2 3 4 5 6
| | | | | | |
3 8 4 0 3 4 0--0
6 8 4 0 6 8 4--1
6 4 8 0 6 8 4--2
6 0 4 8 0 6 8--3
8 4 5 4 6 8 4--4
4 8 4 6 8 4 0--5

j'applique donc une convolution sur le pixel (1,1)
cela peut se voir ainsi

0 1 2 3 4 5 6
| | | | | | |
! ! ! 0 3 4 0--0
! ! ! 0 6 8 4--1
! ! ! 0 6 8 4--2
6 0 4 8 0 6 8--3
8 4 5 4 6 8 4--4
4 8 4 6 8 4 0--5

les ! représente l'emplacement de la matrice, et je calcule le nouveau pixels sur la nouvel image par :

NewPix=
Somme(
0 -1 0
-1 5 -1
0 -1 0
X
3 8 4
6 8 4
6 4 8
)÷1
= ( 0*3-1*8+0*4-1*6+5*8-1*4+0*6-1*4+0*8 )/1 = 18
Ici on divise par un en effet c'est une matrice de convolution linéaire car la somme de ses coef est différente de 0, certaine matrice qui donne 0 comme celle de Laplace:
-1 -1 -1
-1 8 -1
-1 -1 -1
8-1*8=0 ;)
non pas besoin et ne doivent ( ne peuvent ) pas être divisées par 0
en tout cas pour les linéaires on divise par la somme des coefs

Vila en gros ce qu'est une matrice de convolutions alors attention ils y a défois ou la capacité est dépassé cela arrive...

Concrettement il faut à partir des données de l'image faire un dégradé de gris pour finalement obtenir un tableau à 2 dimentions de l'image qui soit composé de BYTE
aprés
On fait 2 autre tableau de même taille mais avec des entier et on les calcule grace à 2 matrices de convolutions
Un tableau pour les X avec comme matrice de convolutions :
-1 0 1
-2 0 2
-1 0 1
et un tableau pour les Y avec comme matrice de convolutions :
-1 -2 -1
0 0 0
1 2 1

Grace à c'est 2 tableaux on va pouvoir calculer le seuil de contraste des contours ainsi que la directions des tangentes ;)

On fait un autre tableau de la taille de l'image qui contient 2 donné par case
un entier et un byte
int Seuil;
BYTE Dir;

pour chaque case du tableau on calcule comme suite
float Temps,Gx,Gy;


boucle i
boucle j
Gx=TabX[i,j];
Gy=TabY[i,j];
Temps=sqr(Gx*Gx+Gy*Gy)
if(Temps>0)then
DataTab3[i,j].Seuil=(int)Temps;
Gx=(int)(Gx/Temps); // ici il faut que le (int) soit optimiste c'est à dire
Gy=(int)(Gy/Temps); // qu'il faut arrondir au dessu si >=0.5
//aprés on test les 8 cas et en résulte 4 directions
// 4 3 2
// \ | /
// \|/
//1 ---- ---- 1
// /|\
// / | \
// 2 3 4
// on s'intéresse à la direction est non au sens :p
if(Gx==-1)
{
if(Gy==-1)
{
DataTab3[i,j].Dir=4;
}
elseif(Gy==1)
{
DataTab3[i,j].Dir=2;
}
else//if(Gy==0)
{
DataTab3[i,j].Dir=1;
}
}
elseif(Gx==1)
{
if(Gy==-1)
{
DataTab3[i,j].Dir=2;
}
elseif(Gy==1)
{
DataTab3[i,j].Dir=4;
}
else//if(Gy==0)
{
DataTab3[i,j].Dir=1;
}
}
else//if(Gx==0)
{
if(Gy==-1)
{
DataTab3[i,j].Dir=3;
}
elseif(Gy==1)
{
DataTab3[i,j].Dir=3;
}
else//if(Gy==0)
{
DataTab3[i,j].Dir=0;
}
}
else
DataTab3[i,j].Seuil=0;
DataTab3[i,j].Dir=0;
end if
fin j
fin i


aprés quoi vous avez de quoi tirer des caractéristiques mais maintenant il se pose le problème suivant c'est que la direction c'est pas un bon caractère, seul il ne suffit pas à cause du cas ou vous voudriez traiter différents angles donc on peut le coupler avec le seuil mais là encore y a un problème c'est que le seuil est trés différent suivant l'éclairage et le fond ( décor ) donc aprés je ne vois pas à part la teinte qui n'est pas nan plus super super car on reconnais des formes pas des couleurs... J'ai pensé à arranger les seuil suivant l'éclairage faut voir...

Bon c'est tout pour ce soir A+

TheTiger
02/09/2005, 14h34
je vous donne un lien vers une source en c++ qui va vous aider mais c'est chaud à décortiquer alors je vous donne 2 autre liens pour pas être pomé mais faut parler anglais :p et le lire aussi !!!

http://sourceforge.net/projects/opencvlibrary/

http://www.cs.bham.ac.uk/resources/courses/robotics/doc/opencvdocs/ref/OpenCVRef_Experimental.htm
http://www.cs.bham.ac.uk/resources/courses/robotics/doc/opencvdocs/ref/OpenCVRef_ImageProcessing.htm

TheTiger
02/09/2005, 14h37
J'arrive toujours pas à comprendre comment fonctione les intégrales d'image ça faut que l'on m'explique car comme je lit po trés bien l'anglais j'arrive pas à comprendre... Je sais que une intégrale c'est l'air sous la courbe dans un interval donné mais là... Voir une des primitives en ce demerdant bien avec intégrale de A à X de f(x)dx :p

Bon merci d'avance !

Laeti²x
02/09/2005, 17h13
j'ai fouille parce que les convolutions m'avaient interessé dans le passé, et je crois qu'il faut que tu cherches dans géométrie analytique / intégrale. Y a du matching dans google mais j'ai peur que ce ne soit que dans un bon vieux livre de maths que tu trouves.
A la librairie de mon quartier (que je trouve tres "fraiche") j'ai trouve un petit bouquin de maths "pour adultes" (nanaaan y a pas d'integrales nues, c'est juste pas un manuel scolaire) "Laurent vivier Quatre a Quatre la topologie" http://www.amazon.fr/exec/obidos/ASIN/2746501546/171-3807400-5010626 je pense clairement pas que tu sois exactement ce que tu cherches mais la collec est interessante (d'ailleurs la collec prepare un manuel appelle 'les algorithmes')

Desole si je t'ai pas fait avancer.

TheTiger
02/09/2005, 21h08
pos grave ça tourne autour du sujet :p Merci quand même je regarderais :)