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

Traitement d'images Discussion :

Création d'un cercle plein blanc sur fond noir


Sujet :

Traitement d'images

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par défaut Création d'un cercle plein blanc sur fond noir
    Bonjour,

    J'essaye de crée dans une image, un cercle plein blanc sur fond noir avec pour seul paramètre d'entrée le diamètre du cercle (je connais la valeur de mon pixel en µm).

    Mon algo est basé sur la création d'un pixel blanc centré dans une image et ensuite je dilate ce point blanc 'x' fois jusqu'à l'obtention du diamètre attendu.

    La dilatation est faite en alternant voisinage 'V4' et voisinage 'V8'.

    Le résultat n'est pas se que j'attendais, j'obtiens bien le diamètre voulu, mais j'ai un hexagone et pas un cercle.

    Comment pourrais-je faire pour obtenir ce cercle?

    merci d'avance
    Raphael

  2. #2
    Membre émérite
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Par défaut
    Bonjour.

    J'ai aussi essayer les dilatation ca n'as pa lair efficace.
    Normale pliusisuer chose interviennent.

    -Le maillage utilisé
    -L'element structurant
    -et le nombres de connexités.

    Pourquoi tu ne part pas de ton centre[x,y] et tu colorie les pixels situés a [x+1,y],[x,y+1],[x+1,y+1],[x-1,y] etc .Bref colorier les pixel situé au 8connexités de ton centre et le faire jusqu'a y ajouté D/2 ou D est ton diametre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    while i <D/2:
            colorier 
     
            [(x-i,y+i),(x,y+i),(x+i,y+i)]
            [(x-i,y),    (x,y),  (x+i,y+i)]
            [(x-i,y-i), ( x,y-i), (x+i,y-i)]
     
    whend
    Salutations
    [SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
    Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit

    Mon premier Tutoriel


    A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...

  3. #3
    Membre émérite
    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
    Par défaut
    salut,

    le plus simple pour avoir un disque qui ressemble a un disque, c'est de faire un boucle sur tous les pixels de l'image, et de colorier le pixel en blanc si la distance au centre est inferieure ou egale au rayon.

    Si vous ne voulez pas parcourir toute l'image, une boucle sur tous les pixels dans le carre englobant du disque devrait suffire.

    Si vous voulez un algorithme rapide, regardez du cote de Brensenham, il y a une variante pour les cercles (mais a mon avis ca vaut vraiment le coup que si 'est pour developpez une bibilotheque graphique).

    A+

    PS: en alternant les dilatation avec des carres et des croix, on obtient un octogone, pas un hexagone....

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par défaut
    Merci pour ton aide parp1, mais ta méthode me donnera une étoile dans les direction V8.

    Théoriquement, il y a une méthode qui permet de dilater un pixel pour obtenir un cercle(je crois... :os), mais il faut utiliser la méthode de dilatation avec borgefors. Mais j'ai du mal à l'implémenter.

    Si quelqu'un s'y connais avec borgefors, ou aurait une autre méthode je suis prenneur.

    merci

  5. #5
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    bonjour,

    la méthode de kangourou me semble la plus simple et peut être aussi la plus rapide si tu limites ton balayage par rapport au centre du cercle.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par défaut
    En fait kangourou, j'avais peur que ta méthode soit trop lente car il faut comparer le rayon avec la racine de (i-centrei)²+(j-centrej)², et on sait que racine = très long pour les images...

    mais je l'ai fais et en fais ça ne gène pas, c'est plus rapide que la dilatation. lol

    par contre étant donné que l'image à une déformation dû à la trame de la caméra qui n'est pas carré, j'aimerai construire non-plus un cercle mais une éllipse (je pensait que j'y arriverai facilement une fois que j'aurai fais le prog pour un cercle, et bien non!!)

    donc je planche dessus et si quelqu'un trouve avant moi, se serait sympa de m'avancer un peut.

    merci bcp pour vos conseilles.

  7. #7
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    il me semble que l'équation d'une ellipse est très proche de celle d'une cercle, modulo un coefficient fixe.
    Je pense que au lieu de calculer la distance entre ton pixel et ton centre, il faudrait séparer les coordonnées x et y et faire deux tests. Mais le deuxième tests devra dépandre de l'équation de ton ellipse.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par défaut
    En fait, pour être un peu plus précis, j'aimerai faire une analyse sur une image mais dans une parti seulement de cette image.

    Donc je compare mon image à une image avec un cercle plein blanc, sur fond noir. Ce cercle a pour seul paramètre variable le diamètre de la surface à controler et doit être construit automatiquement. Mais comme mon image est prise avec un capteur à trame rectangulaire (avait pas le choix!! snif) si je fais l'acquisition d'objet rond, il sera elliptique... un pixel sur mon image sera de 6.856µ*6.25µ, et mon image fait 720*578.

    Donc visuellement on voit une éllipse, mais en fait la mesure doit elle etre réelle (un cercle). Voila mon problème.

    Toto13, peut-tu être un peu plus explicite sur ta méthode?

    merci

  9. #9
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Citation Envoyé par Rafoo
    En fait kangourou, j'avais peur que ta méthode soit trop lente car il faut comparer le rayon avec la racine de (i-centrei)²+(j-centrej)², et on sait que racine = très long pour les images...
    Pour peu que l'on compare le carré de la distance au carré du rayon il n'y a plus de racine.

    Je pense aussi qu'il serait avantageux de travailler par ligne et pour chacune de calculer les deux intersections avec le cercle (par symétrie ça fait un seul calcul). Après plus qu'à tracer un segment

    Pour l'ellipse les formules sont proches (http://www.schoolangels.be/math/cours/para/para.html en bas).

  10. #10
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut
    Un peu de mathématiques :

    une elipse, c'est l'ensemble des points à distance constante des 2 centres, pour faire simple...

    par exemple, tu as les centres R1(x1, y1) et R2(x2, y2). Un point(xm, ym) appartient à l'élipse si et seulement si
    racine((xm-x1)²+(ym-y1)²)+racine((xm-x2)²+(xm-y2)²) = K, avec K constant. ( <, si on parle de la surface intérieure de l'élipse).

    Il te manque K et la position des points (mais on peut déduire le 3ème des deux premiers).

    pour calculer K, rien de plus simple. définissons S comme le rayon du "petit coté", T le rayon du grand coté, et admettons que l'élipse est allongée horizontalement)
    K = 2*racine(S²+(x2-x1)²)

    Oui, il nous manque x1 et x2 ;o)

    Appelons le centre du "cercle" de départ, C(xc, yc).
    Prennons le cas particulier du point le plus "à gauche" de l'élipse. Il a pour coordonnée (xc-T, yc). On a donc alors :
    x1-(xc-T)+x2-(xc-T)=K, par définition de l'élipse.

    enfin, on sait dès le départ que |x1-xc|=|x2-xc].

    Voilà, 3 équations, 3 inconnues, vous êtes sur la bonne voie pour trouver les coordonnée de l'élipse incluse dans votre rectangle, et par la même l'ensemble des points à l'intérieur de cette élipse ! :o)


    edit : j'avais pas vu le lien du message juste au dessus, c'est encore plus simple en fait lol 8o) Mais j'aime pas la trigo ;o)p

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 135
    Par défaut
    merci bcp pour vos conseil, ça marche super!!!

    (dsl monstros velu, mais la méthode trigo de sivrit était plus facile à implémenter... :o) et au niveau de la complexité de calcul, moin dense en racine.

    Voila un apperçu de ce que ça donne:
    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
    17
    18
    19
    20
    21
    22
    23
     
     
    for (int i = 0; i<ImgCalquePup.hauteur(); i++)
    {
    	for (int j = 0; j<ImgCalquePup.largeur();j++)
    	{
    		a= (((diamPupille*1e-3)/2)/6.25e-6);
    		b=(((diamPupille*1e-3)/2)/6.856e-6);
    		c=i-289;
    		d=j-360;
     
    		X= (c*c)/(a*a);
    		Y= (d*d)/(b*b);
     
    		tempo= X+Y;
     
    		if(tempo <= 1)        //  X²/a² + Y²/b² =1   equation de l'éllipse
    		{							 
    			ImgCalquePup(i,j)=255;
    		}
     
    	}
    }
    encore merci à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Miktex sur fond noir
    Par moononuk dans le forum Editeurs / Outils
    Réponses: 5
    Dernier message: 20/11/2012, 18h52
  2. les photos sur fond noir
    Par zooffy dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/02/2011, 11h29
  3. Imprimer texte blanc sur fond noir
    Par mickael28 dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 23/04/2009, 17h33
  4. Code sur fond noir
    Par agony dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 31/10/2008, 10h46
  5. Texte blanc sur fond noir
    Par MikeV dans le forum E-Mailing
    Réponses: 2
    Dernier message: 14/01/2008, 20h49

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