# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  Reconnaissance de codes-barres

## GoldenEye

Bonjour  tous
J'ai un code-barres scann  une rsolution relativement faible (disons 150 dpi). Quels sont les algorithmes  utiliser pour reconnaitre ce code
Tranforme de Hough ? Rseau neuronal ? Classification baysienne ? Cela vaut-il le coup de passer l'image du code-barres dans le domaine spectral avant de passer  la reconnaissance proprement dite ?
Merci d'avance

----------


## ToTo13

Bonjour,

 - la transforme de Hough est toute trouve pour rsoudre se problme. Elle te donnera la position des diffrentes barres.

 - D'un autre cot, si ton image est propre (sans bruit) et qu'elle ne comporte que le code barre, un simple comptage des composantes connexes suffira.

----------


## ronan99999

Bonjour,
Il faudrait donner un exemple de tes images, s'il ne reste que tes codes barres ou non dans l'image.
Sinon cela se raproche (de ce je sais) de la reconnaissance de caractre. Il y'a une premiere tape de localisation puis de segmentation pour isoler chaque barre ensuite, la discrimination se fait sur la largeur des barres.

----------


## GoldenEye

Merci de vos rponses
On considre que le code barre est localis. 
La question porte sur la mthode de segmentation/reconnaissance
Hough me donne la position des barres mais par leur largeur
L'ide de compter les composantes connexes me parat-tre une bonne ide encore faut-il tre certain que le bruit est limin
Aprs j'aimerais bien faire une classification baysienne mais je ne suis pas sr que ce soit indiqu
D'autres suggestions ?

----------


## ToTo13

Bonjour,




> Merci de vos rponses
> On considre que le code barre est localis. 
> La question porte sur la mthode de segmentation/reconnaissance


Parfait, il ne reste plus qu'a seuiller : du noir sur fond blanc c'est plutt facile...  :;): 





> L'ide de compter les composantes connexes me parat-tre une bonne ide encore faut-il tre certain que le bruit est limin


Dans ton cas c'est trs facile, il suffit de vrifier que le pixel n'est pas isol et qu'il a au moins un voisin dessus ou dessous.

De mme, si tu applique une transforme de hough sur le contour des barres, tu aura leurs largeurs.




> Aprs j'aimerais bien faire une classification baysienne mais je ne suis pas sr que ce soit indiqu
> D'autres suggestions ?


Effectivement je pense que a ne l'ai pas? La classification est trs bien pour grer les cas ambigs, or l ce n'est pas le cas.

Bonne continuation

----------


## GoldenEye

Gnial, je n'avais pas pens  la transforme de Hough sur les contours
Je considre le sujet clos.
Merci  tous

----------


## m.david

> Bonjour,
> Dans ton cas c'est trs facile, il suffit de vrifier que le pixel n'est pas isol et qu'il a au moins un voisin dessus ou dessous.
> 
> De mme, si tu applique une transforme de hough sur le contour des barres, tu aura leurs largeurs.


Bonjour,

Je me permets de rouvrir ce topic parce qu'en ce moment je suis en face du mme problme, et je dois le rsoudre avec C#.
J'aimerai savoir si possible, comment appliquer la transforme de hough sur le contour des barres?
Sinon, y a t-il d'autres solutions plus simples et efficaces?

Merci d'avance

----------


## ToTo13

Bonsoir,




> J'aimerai savoir si possible, comment appliquer la transforme de hough sur le contour des barres?
> Sinon, y a t-il d'autres solutions plus simples et efficaces?


sur le contour des codes barres ???
Ca veut dire que tu souhaites rcuprer la zone o il y a tous les codes barres ?
Si a marche sur les codes barres et que tu les localises, tu parviendras  localiser la zone o ils se trouvent...

----------


## m.david

> sur le contour des codes barres ???
> Ca veut dire que tu souhaites rcuprer la zone o il y a tous les codes barres ?
> Si a marche sur les codes barres et que tu les localises, tu parviendras  localiser la zone o ils se trouvent...


En fait je dois avoir en entre une image numrique du code barre et en sortie la largeur de chaque barre puis les convertir en chiffres...
Maintenant le problme et d'avoir la largeur de chaque barre et de choisir la mthode la mieux approprie?
D'aprs ce topic la transforme de hough est parfaite pour ce genre de problme, mais je ne sais pas comment l'utiliser pour avoir les largeurs?

Merci

----------


## ToTo13

Bonjour,

la transforme de Hough, va te donner la localisation de chacune des barres => donc tu trouves la zone o se trouve les barres.
Mais un problme peut survenir  ce moment l : ton image peut tre (voire elle l'est surement) tourne !!! C'est ) dire que les barres ne sont pas parfaitement verticales ou horizontales. Et comme tu es dans un espace discret, il y a introduction d'une erreur  ::(: 
Donc il te faut faire une rotation de l'ensemble de ta zone de barres afin que les lignes soit verticale => Tu utilises la droite rsultat fournie par Hough pour laquelle il y a le moins d'ambigut, a va tre la droite la plus troite du code barre.
Un fois que tu as fait ta rotation, il te suffit de faire un simple balayage lattral de ton code barre afin de trouver la largeur de chaque barre. Mais comme il y aura eut rotations, je te conseille fortement de faire plusieurs ballayages  des hauteurs diffrentes.

----------


## m.david

> Mais comme il y aura eut rotations, je te conseille fortement de faire plusieurs ballayages  des hauteurs diffrentes.


Salut,

Mme de cette faon j'aurais de forte chance d'obtienir des valeurs gales puisque les lignes de balayages sont parallles!
Donc comment tre certain que les barres sont inclins ou si possible l'angle de l'inclinaison? 

Merci

----------


## ToTo13

Bonjour,

le rsultat de Hough (dans l'espace d'accumulation) te donne l'angle form par l'intersection de la droite trouve avec l'axe des abscisses.
Donc tu auras l'angle de chacune des droites et donc tu sauras si elle est incline.

Je te conseille de faire le balayage, car je pense trs fortement que l'erreur introduite par la discrtisation te donnera des cart d'un pixel selon la hauteur  laquelle tu balayes.

----------


## m.david

> Bonjour,
> 
> le rsultat de Hough (dans l'espace d'accumulation) te donne l'angle form par l'intersection de la droite trouve avec l'axe des abscisses.
> Donc tu auras l'angle de chacune des droites et donc tu sauras si elle est incline.
> 
> Je te conseille de faire le balayage, car je pense trs fortement que l'erreur introduite par la discrtisation te donnera des cart d'un pixel selon la hauteur  laquelle tu balayes.


Merci beaucoup pour toutes ces explications.
a serai trs sympa de ta part si tu pouvait me conseiller des tutos ou liens pour matriser la transforme de Hough et pouvoir l'utiliser dans C#?

Bonne nuit

----------


## ToTo13

Bonsoir,

en tant trs honnte, fais une recherche sur  ::google:: , tu trouveras TOUT ce qu'il faut savoir.
Voire mme, tu trouveras du code (bien qu'il ne soit pas difficile  faire soit mme). Regardes dans ImageJ, il y a un Plugin qui fait a.
Tout ce que j'ai lu sur la transforme des Hough vient du net.
Pour ce qui est du C#, je ne connais pas.

----------

