IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Besoin d'aide pour algorithme de traitement d'images


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Besoin d'aide pour algorithme de traitement d'images
    Bonjour à tous, voilà je suis sur un projet de reconnaissance de pièces via webcam. Les pièce sont des bouchons de bouteilles (rouge, bleu ou autre = invalide). Je fais l'acquisition puis le traitement de l'image pour détecter une pièce, puis la traiter.

    La première chose à faire et de "nettoyer" l'image, c'est à dire avoir un fond parfaitement blanc derrière l'objet. Mais voilà, je bloque sur cette algorithme, comment faire ceci??? Il s'agit d'un seuillage mais comment puis-je faire pour ne nettoyer QUE le fond? Si vous aviez des idées cela pourrait m'aider.

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Points : 451
    Points
    451
    Par défaut
    1 - En fait ce que tu proposes n'est pas un prétraitement mais un traitement à lui tout seul car si tu arrives à faire ça (ne nettoyer QUE le fond) tu as déjà gagné, il ne te reste plus rien à faire: l'objet est déjà segmenté...

    2- Pourquoi ne veux-tu que nettoyer le fond blanc ? Je pense que tu n'as pas besoin de te fatiguer, tu fais un filtrage gaussien/médian/autre (en fonction du type de bruit) sur toute l'image !
    Ensuite tu n'as plus qu'à utiliser l'information couleur pour séparer ton objet...
    Je te dis filtrage et non seuillage car le seuillage a la facheuse tendance à mettre des pixels dans la mauvaise catégorie (surtout avec du bruit ça peut pas marcher): ex: pixel du bouchon va devenir blanc alors qu'il devrait être noir....

    A +

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Le truc c'est que je code en C++ mon appli, et je cherche un algo, pas une technique

    Le but est d'avoir un fond blanc pour pouvoir faciliter la detection et le traitement (recherche de la couleur du bouchon, et calcul de la position sur l'image)...

  4. #4
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Points : 451
    Points
    451
    Par défaut
    Hum,
    je cherche un algo, pas une technique
    Bah oui, mais je peux te filer un algo qui compte le nombre de carottes dans un pot au feu ça t'avancera pas beaucoup

    Avant un algo, il te faut une technique ! Je connais pas d'algo miracle qui sache faire tout : sinon il n'y aurait plus de recherche....

    Ce que je veux dire, c'est que ton seuillage ne semble pas être une bonne approche car pour ne seuiller QUE le fond, c'est que tu sais ce qui N'EST PAS le fond ! Donc si tu sais ça, je vois pas pourquoi tu as besoin de seuiller puisque tu sais OU EST l'objet, et ton problème se mord la queue !

    Donc avant tout, il fait que tu saches comment tu vas faire pour séparer le fond du reste, c'est là le fond du problème ---> Quelle technique utiliser ???

    @+

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour
    Un petit lien qui propose plein d'algorithmes compliqués pour réaliser des détection de formes, de cercles, d'ellipses, de centres de symétrie...
    http://www.tsi.enst.fr/tsi/enseignement/ressources/mti/RdF.html
    Si ca peut aider

  6. #6
    Membre régulier Avatar de hamster
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 137
    Points : 123
    Points
    123
    Par défaut
    Pourquoi tu travailles pas sur fond blanc quand tu prends la photo ?
    Ca faciliterait énormément le travail !

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    J'essaye de travailler avec le peu de matériel qu'on a au bahut, et pour le projet on a un tapis blanc qui est très crade donc plutot gris que blanc. Une WebCam de qualité médiocre qui prend des clichés médiocre...

    Pour c qui est du seuillage, je part la dessus car il est donné comme ceci dans le cahier des charges :S De plus ma pièce est en mouvement (quand le tapis veut bien fonctionner... ) donc je dois analyser les X premières lignes pour savoir si j'ai une pièce ou non, et pour cette opération je balaye les X premières lignes et si je n'ai que du blanc, alors je n'ai pas de pièce... D'où mon désir d'avoir un fond parfaitement blanc....

  8. #8
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Points : 451
    Points
    451
    Par défaut
    Pour c qui est du seuillage, je part la dessus car il est donné comme ceci dans le cahier des charges
    Ok ! Bah dans ce cas je te conseille de faire déjà un débruitage sur toute l'image (cad filtrage gaussien à mon avis).

    Pour le filtrage gaussien tu peux aller à ce lien (c'est du C mais bon facilement adaptable en C++) http://lab.erasme.org/filter/gaussian.html.

    Si ça marche pas, essaye aussi le filtrage médian (attention beaucoup plus long donc je sais pas si ça marche en temps réel) :
    http://lab.erasme.org/filter/median.html

    Tu devrais obtenir déjà une image plus sympa, et ensuite tu fais un seuillage.
    En ce qui concerne le seuillage, utilise l'information couleur plutôt que la recherche de ce qui est blanc : tu cherches ce qui est à dominance rouge ou dominance bleue, c'est beaucoup plus robuste !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    // w, h = largeur, hauteur de l'image
    void CalculRouge(BYTE *src, BYTE *dst, int w, int h, double coef)
    {				
    	BYTE R,G,B;
    		for (int i=0;i<h;i++)
    			for (int j=0;j<w;j++)
    			{
    				B=src[(i*w+j)*3];
    				G=src[(i*w+j)*3+1];
    				R=src[(i*w+j)*3+2];
     
                            // Carte binaire : noir = rouge, blanc = autre	
    			dst[((h-i-1)*w+j)]=(R>coef*(G+B))?0:255;
    			}
    }
    où coeff est un paramètre à règler, mais c'est souvent 0.6 je crois...

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour votre aide c'est génial, j'ai avancé mon projet d'un grand coup

    Donc en gros j'ai appliqué un flou gaussien pour lisser l'image, ensuite, étant donné que ma pièce se situera toujours au milieu de l'image je fais les choses suivantes :

    - Je parcours les bords de l'image et je fait la moyenne des composantes RVB (étant donné que je suis sur d'etre sur le fond et non sur la pièce )

    - Je parcours la ligne médianne de l'image et je teste si les pixels s'écartent beaucoup de la valeur moyenne calculée précédemment

    - Je cherche le centre de la pièce

    - J'encadre le pixel central, et je fais une nouvelle moyenne des diverses composantes

    - Je regarde ces moyennes pour déterminer la couleur de la pièce


    Voilà encore merci à tous

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    j'ai fait le même genre de projet que toi mais moi j'avais pris un fond noir!!! c'est quand même plus simple!! tu n'as pas plein de peites taches dans tous les sens et des fonds noirs on entrouve partout!!!

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Bein oui mais là le tapis roulant qui roule pas est blanc

  12. #12
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    salut,

    bon, si la couleur du tapis et la couleur des pieces est connue, ca doit pas etre trop dur a filtrer , non ?

    Pour les images couelurs, il y a des regles de conversion RGB vers HSV, qui est teinte, saturation luminance, je crois. En gros le premier parametre est un nombre entre 0 et 2*pi, qui donne la couleur la plus proche de chaque pixel. Ensuite ca peut etre plus ou moins sature, c'est le deuxieme parametre. A priori, le fond blanc devrait etre plutot sature. Donc seuiller la dessus, ca peut etre pratique.

    mais le meilleur moyen a mon avis est de faire qlq essais avec un petit logiciel de traitement d'images (tel ImageJ, par exemple), et de voir ce que ca donne. Ou meme gimp, y'a pas mal de filtres.

    voila,
    A+

  13. #13
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Points : 451
    Points
    451
    Par défaut
    - Je parcours les bords de l'image et je fait la moyenne des composantes RVB (étant donné que je suis sur d'etre sur le fond et non sur la pièce Wink )

    - Je parcours la ligne médianne de l'image et je teste si les pixels s'écartent beaucoup de la valeur moyenne calculée précédemment

    - Je cherche le centre de la pièce

    - J'encadre le pixel central, et je fais une nouvelle moyenne des diverses composantes

    - Je regarde ces moyennes pour déterminer la couleur de la pièce
    Effectivement ça devrait marcher, mais essaye quand même avec un filtrage couleur du même genre que celui que j'ai mis plus haut, ça avait vraiment bien marché pour moi, et le calcul est très rapide! Et en plus je pense que c'est plus robuste : tu devrais toujours voir ton bouchon apparaître.
    Ensuite tu fais plus facilement (moins d'erreurs) un repérage de ton bouchon sur une image binaire N&B.

    Sinon comme le dit Kangourou il existe des librairies qui font ça très bien...
    Si tu fais ça en Linux effectivement tu peux récupérer les fonctions de TheGimp directement dans le code...

    @+

  14. #14
    Membre actif
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Points : 291
    Points
    291
    Par défaut
    Sabate n'a toujours pas réussi à avoir un outil de classement efficace?

Discussions similaires

  1. Besoin d'aide pour un petit Algorithme
    Par arnolem dans le forum Langage SQL
    Réponses: 13
    Dernier message: 28/02/2011, 16h15
  2. Réponses: 2
    Dernier message: 13/12/2010, 18h18
  3. Besoin d'aide pour optimiser un algorithme
    Par predat dans le forum Général Python
    Réponses: 5
    Dernier message: 21/08/2010, 01h29
  4. Besoin d'aide pour un petit Algorithme
    Par arnolem dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/08/2010, 23h51
  5. [AIDE] besoin d'aide pour réaliser un algorithme
    Par quaresma dans le forum Algorithmes et structures de données
    Réponses: 40
    Dernier message: 18/01/2008, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo