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

MFC Discussion :

Calcul de Seuil et Binarisation


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 5
    Par défaut Calcul de Seuil et Binarisation
    Sauriez comment procéder afin de calculer le seuil d'une image en 256 niveaux de gris et enfin la binariser.
    Je recherche un procédé qui fonctionne sous visual c++ .net
    Merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 5
    Par défaut
    Je relance mon post car c'est tres important desole

  3. #3
    Membre actif

    Inscrit en
    Mars 2002
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 83
    Par défaut Re
    Sous visual c++ .net
    Il y a un forum pour les technos .NET
    http://www.developpez.net/forums/viewforum.php?f=49

    Sinon je ne sais pas si c'est ce que tu veux. Mais il existe une fonction qui permet de déteminer le niveau de gris d'une couleur. Tu peux l'utiliser pour vérifier ts les pixels. Sinon je ne sais pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public float GetBrightness();

  4. #4
    mat.M
    Invité(e)
    Par défaut
    Comme le suggère ZeBiloute , la question n'est pas claire.
    En informatique il faut avoir 2 qualités :
    RIGUEUR et METHODE

    IL faut distinguer 2 étapes :
    *le traitement des pixels en lui-même : cela reléve de la méthode mathématique ( traitement numérique ) et algorithmique (transformations de Fourier etc...)
    Donc poser sa question dans le forum approprié

    * l'affichage en lui-même des données traitées donc spécifiques à l'OS ( Microsoft ) /environnement de dev. utilisé librairies graphiques (VC++ /GDI )
    Donc pour cela la classe MFC ou les API win32 se chargent de l'affichage graphique ; pour cela consulter le MSDN .
    SetDIBBits par ex. affiche un buffer de pixel étant donné une profondeur de pixels ( donc ici 256 niveaux de gris )

    Sinon pour un projet pro , il ya des librairies /OCX /dll payant (Leadtools )

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 5
    Par défaut
    Binariser : passer d'une image en 256 niveaux de gris en une image noir et blanc uniquement a partir d'une valeur de seuil donées.
    Voila si quelqu'un aurait un code capable de réaliser cela.
    Merci

  6. #6
    Membre averti
    Profil pro
    Développeur Full Stack
    Inscrit en
    Février 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Février 2003
    Messages : 29
    Par défaut
    En supposant que tu ais une image de profondeur 8 bits.
    2 cas ton image utilise une palette:Tu parcours la palette.Toutes les valeurs superieure au seuil tu remplace par 0xff et en dessous par 0.
    Si l'image n'utilise pas la palette,tu fais la même chose mais directement sur le buffer RGB
    Après pour recupérer,modifier la palette et le buffer il faut utiliser les fonctions fournies par l'api windows

  7. #7
    Membre actif

    Inscrit en
    Mars 2002
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 83
    Par défaut Re
    Oki .
    Le truc que tu cherches est se que l'on appel Dithering. Mais bon c'est assez complex comme truc. Il faut utiliser des matices de transformations. Il y a pleins de methodes et d'algo. Le basic est celui que t'as donné CHARON. Des plus complex gèrent la propagation d'erreur en fonction d'une matrice.

    Par contre je ne connais pas d'API qui le fond. Regardes dans les librairies OpenGl, ou DirectDraw.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 5
    Par défaut
    En fait je connais la procédure afin de binariser mais c'est le codage sous vc++ .net qui pose probleme ...
    Quelqu'un aurait-il un exemple ?

  9. #9
    Membre actif

    Inscrit en
    Mars 2002
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 83
    Par défaut Re
    C'est quoi EXACTEMENT le Pb : C'est que tu n'arrives pas à programmer ton algorithme de dithering ou alors tu n'y connais rien en programmation (Là ça va être très dur !!!).

    Même si c'est long décris précisement ton Pb parceque là on est dans le flou total.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 5
    Par défaut
    Bon dacor je commence :

    -je dois acquérir une image d'une camera a travers une carte d'acquisition qui fournit quelques fonctions de base dans ces dll (pas trop dure)
    -ensuite je dois binarisé cette image afin d'obtenir une image uniquement en noir et blanc(c'est la que ca bloque)
    -ensuite a partir de cette photo je dois determiner le nombre d'encoche de la croix de malte representé sur la photo.(je nai pas encore attaquer cette partie mais tout ceci est une autre histoire)

    Sauf que voila comme ZeBiloute la di je suis tres nul en programmation sous vc++ .net car ayant appris a coder sous Builder.
    Maintenant si vous avez une idee toute proposition serait interressante.

  11. #11
    Membre averti
    Profil pro
    Développeur Full Stack
    Inscrit en
    Février 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Full Stack

    Informations forums :
    Inscription : Février 2003
    Messages : 29
    Par défaut
    sur le site de msdn j'ai trouvé ce lien:
    http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/filter/OVERVIEW/filter_ext_ovw_entry.asp
    ca parle des DXsurface de directx un DirectDrawSurface plus élaboré.Tu peux appliquer des filtres sur les images(transform).Il y a entre autre le dithering.Je ne connais pas vraiment le .net,mais j'ai entendu dire qu'on peut faire du COM très facilement.En l'occurence c'est du COM donc tu devrais pouvoir l'utiliser.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 20
    Par défaut
    Je peux te donner un pt coup de pouces, car je suis sur project similaire:
    Je reçois des datas d'une sonde que je transforme en image.
    Donc je te donne la procédure a suivre pour créer une image.
    En prmier il faut detecter le mode d'affichage:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    // init Picture buffer
    CDC dc;
    dc.CreateDC(_T("DISPLAY"), _T("\\.\DISPLAY1"), NULL, NULL); 
    int m_iBitsPixel = dc.GetDeviceCaps(BITSPIXEL);
     
    HBITMAP hBitmap;
    if(m_iBitsPixel)
    { 
    	switch(m_iBitsPixel)
    	{
    	case 16: //2Bytes RGBQUAD Structure ; 1-B5-R5-G5 b -> 32 step by color
    		hBitmap = (HBITMAP)::CreateBitmap _iSourceWidth,m_iSourceHeight,1,16,NULL);
    		break;
    	case 24:// codage BGR
    		hBitmap = (HBITMAP)::CreateBitmap(m_iSourceWidth,m_iSourceHeight,1,24,NULL);
    		break;
    	case 32:// codage BGRA
    		hBitmap = (HBITMAP)::CreateBitmap(m_iSourceWidth,m_iSourceHeight,1,32,NULL);
     		break;
    	}
    }
     
     
    //determiner la taille d'image et créer un buffer de travail
    //le meme process est utiliser pour récupérer une image
     
    CBitmap cBitmap;
    BITMAP bmpX;
    cBitmap.Attach(hBitmap);
    cBitmap.GetBitmap(&bmpX); 
    int m_iStride = bmpX.bmWidthBytes; //nbr byte / ligne de pixel
    int m_iPicHeight = 400 ;
    BYTE* m_bImageBuffer= (BYTE*)GlobalAlloc(GPTR,m_iStride*m_iPicHeight);
    il suffit de manipuller ton buffer a ta guise et d'utiliser :
    StretchBlt ou BitBlt pour afficher l'image.

    Je pense que cella te donnera un coup de main.
    Bon courage
    [/code]

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 20
    Par défaut
    Une erreur s'est glissée dans le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    case 16: //2Bytes RGBQUAD Structure ; 1-B5-R5-G5 b -> 32 step by color 
    hBitmap = (HBITMAP)::CreateBitmap(m__iSourceWidth,m_iSourceHeight,1,16,NULL); 
          break;
    Voilà qui est corrigé .
    n'oublie pas de détruire le buffer avec :
    GlobalFree((HGLOBAL)m_bImageBuffer);

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/06/2014, 18h00
  2. [XL-2003] calcul seuil rentabilité avec algorithme (simulation de Monte Carlo)
    Par Les Bats dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/03/2011, 15h39
  3. Réponses: 2
    Dernier message: 02/11/2010, 11h53
  4. Créer un slider qui fait varier le seuil de binarisation
    Par samiov dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 13/04/2010, 15h34
  5. calcul des seuils pour Hysteresis
    Par Mr.ux dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 22/04/2009, 14h16

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