Répondre à la discussion
Affichage des résultats 1 à 22 sur 22

traitement d'image sur le langage C



  1. #1
    dali_sfax

    traitement d'image sur le langage C

    salut,

    je fais une implémentation des outils morphologiques de traitement d'images, et je voudrais que quelqu'un m'aide avec le code de la dilatation.

    merci pour vos aides.

    -----


  2. Publicité
  3. #2
    SuperTux

    Re : traitement d'image sur le langage C

    En noir&blanc ou rgb ?

  4. #3
    dali_sfax

    Re : traitement d'image sur le langage C

    salut,
    en rgb.

  5. #4
    SuperTux

    Re : traitement d'image sur le langage C

    Je ne peux pas t'aider alors, désolé...

  6. #5
    agent933

    Re : traitement d'image sur le langage C

    salut,
    je fais un programme de reconnaissances de formes(chiffres) et j'aimerai convertir une image rgb(ppm) en noir et blanc threshold et avoir une representation de cette image sous forme de matrices.Peux-tu m'aider?
    Merci d'avance.

  7. A voir en vidéo sur Futura
  8. #6
    SuperTux

    Re : traitement d'image sur le langage C

    dali_sfax : J'ai trouvé une doc pour la dilatation en rgb
    Voir : http://francoislouislaillier.develop...uto1/#LIII-B-2

    Après implémentation de l'algo, cela semble donner le même résultat qu'avec le filtre de dilatation de Gimp (voir fichiers attachés), donc ca doit être le bon à prioris.

    Une routine vite fait en C (ne gère pas les bords) :

    Code:
      for(i = 1; i < (image->height - 1); i++)
      {
        for(j = 1; j < (image->width - 1); j++)
        {
          red_max = 0;
          green_max = 0;
          blue_max = 0;
    
          for(a = -1; a <= 1; a++)
          {
            for(b = -1; b <= 1; b++)
            {
              if((a == 0) && (b == 0))
              {
                continue;
              }
    
              tga_get_pixel(image, j + b, i + a, &red, &green, &blue);
    
              if((red + green + blue) > (red_max + green_max + blue_max))
              {
                red_max = red;
                green_max = green;
                blue_max = blue;
              }
            }
          }
    
          tga_set_pixel(result, j, i, red_max, green_max, blue_max);
        }
      }

    Si tous ca te dépannes, tant mieux


    agent933 : C'est quoi que tu appels "noir et blanc threshold" ? Un simple seuillage ?
    Images attachées Images attachées

  9. Publicité
  10. #7
    argusazure

    Re : traitement d'image sur le langage C

    Citation Envoyé par agent933 Voir le message
    salut,
    je fais un programme de reconnaissances de formes(chiffres) et j'aimerai convertir une image rgb(ppm) en noir et blanc threshold et avoir une representation de cette image sous forme de matrices.Peux-tu m'aider?
    Merci d'avance.

    Code:
    int RGBToNg(int _nW,int _nH,unsigned char *_aucImgRgb,unsigned char **_paucImg)
    {
    	int i,nSize=_nW*_nH;
    	if (*_paucImg==NULL) 
    		(*_paucImg)=new unsigned char[nSize];
    	if ((*_paucImg)==NULL) return 1;
    	int i3=0;
    	int nSum;
    	for (i=0;i<nSize;i++)
    	{
    		nSum =_aucImgRgb[i3];
    		i3++;
    		nSum+=_aucImgRgb[i3]+_aucImgRgb[i3];
    		i3++;
    		nSum+=_aucImgRgb[i3];
    		i3++;
    		(*_paucImg)[i]=nSum/4;
    	}
    	return 0;
    }
    
    int getint(FILE *fp)
    {
    	int c, i;//, garbage;
    	// note:  if it sees a '#' character, all characters from there to end of
    	// line are appended to the comment string
    	// skip forward to start of next number
    	c = getc(fp);
    	while (true)
    	{
    		// eat comments
    		if (c=='#')
    			while (((c=getc(fp))!='\n') && (c!=EOF)) {};
    			if (c==EOF) return 0;
    			if (c>='0' && c<='9') break;
    			// see if we are getting garbage (non-whitespace)
    			//if (c!=' ' && c!='\t' && c!='\r' && c!='\n' && c!=',') garbage=1;
    			c = getc(fp);
        }
    	// we're at the start of a number, continue until we hit a non-number
    	i = 0;
    	while (true)
        {
    		i = (i*10) + (c - '0');
    		c = getc(fp);
    		if (c==EOF) return i;
    		if (c<'0' || c>'9') break;
    	}
    	return i;
    }
    
    int ReadFileColor(char *fname,unsigned char ** data, int *width, int *height)
    {
    	FILE          		*fp;
    	// Ouvrir le fichier
    	if (!(fp = fopen(fname, "rb")))
    		return 1;
    	
    	// Vérifier son format
    	char c  = (char)getc(fp);
    	char c1 = (char)getc(fp);
    	if (c!='P' || c1!='6')
    		return 1;
    	
    	// Lire les dimensions de l'image
    	*width  = getint(fp);
    	*height = getint(fp);
    	long size = 3*(*width)*(*height);
    	/*int GrayLevelNb =*/getint(fp); // inutilisé mais fait avancer le fichier au début des données
    	
    	// On crée l'espace pour accueillir les données en mémoire
        
    	(*data) = new unsigned char[size];
    	// On y met effectivement le contenu du fichier, après le header
    	
    	long numgot = fread(*data, 1, size, fp);
    	
    	if (numgot != size)
    		return 2;
    	
    	// On peut abandonner l'accés disque
    	fclose(fp);
    	return 0;	
    }
    Du code, du code, qui n'en veut, pour les jeunes qui n'en veulent.

  11. #8
    agent933

    Re : traitement d'image sur le langage C

    Par threshold je parle d'image noir et blanc.En fait je veux binariser l'image.
    Merci

  12. #9
    agent933

    Re : traitement d'image sur le langage C

    Merci argusazure,
    je vais de ce pas essayer.

  13. #10
    agent933

    Re : traitement d'image sur le langage C

    Tu peux m'expliquer la fonction RGBtong, parametres et variables utilisees.

  14. #11
    SuperTux

    Re : traitement d'image sur le langage C

    Tu peux m'expliquer la fonction RGBtong, parametres et variables utilisees.
    Sa fonction convertie en niveau de gris. Elle ajoute les trois composantes RGB (deux fois le G d'ailleur, je ne comprend pas pourquoi) et divise par 4 donc pour en faire un niveau de gris.

    Si tu veux faire un seuillage binaire il faut alors que tu fasse quelque chose comme :

    Code:
    #define THRESHOLD 100 // Definie le seuil
    
    if((red + green + blue) >= THRESHOLD)
    {
      image_bin[x][y] = 1;
    }
    else
    {
      image_bin[x][y] = 0;
    }

    Si ton pixels est inférieur à ton seuil de luminosité c'est du noir, si il est supérieur alors c'est du blanc.

  15. #12
    argusazure

    Re : traitement d'image sur le langage C

    Citation Envoyé par SuperTux Voir le message
    deux fois le G d'ailleur, je ne comprend pas pourquoi
    La sensibilité de l'oeil humain aux intensités lumineuses relatives aux trois couleurs primaire est inégale. On peut ajouter R+G+B mais le résultat est meilleur si on fait R+2*G+B et une division par 4 est moins couteuse qu'une division par 3.
    On peut aussi fait (30*R+59*G+11*B)/100 si on veut un meilleur résultat.

    (RGBToNg = RedGreenBlue To NiveauDeGris)

  16. Publicité
  17. #13
    dali_sfax

    Re : traitement d'image sur le langage C

    Salut a tous,

    désolé AGENT933, je ne peux pas vous aider.

  18. #14
    dali_sfax

    Re : traitement d'image sur le langage C

    Salut à tous,

    Est ce quelqu'un a une idée sur les élements structurants configurables en taille et en forme?

    Merci.

  19. #15
    skydancer

    Re : traitement d'image sur le langage C

    Bonjour à tous,

    J'aimerais préciser que les oprérateurs que vous avez implémenté ne correspondent pas à des dilatations et des érosions au sens de la morphologie mathématique. Les dilatations vectoriel sous entendent que l'espace vectoriel sous jacent soit totalement ordoné, ce qui n'est pas le cas pour l'espace des couleurs RGB.

    En ce qui concerne les éléments structurant configurables, vous cherchez une implémentation ou bien des références ? si ce sont des références, je vous conseille de regarder vers ce qu'on appelle les amibes morphologiques.

  20. #16
    dali_sfax

    Re : traitement d'image sur le langage C

    Salut à tous,

    je veux bien une documentation des élements structurants. Mais j'ai pas trouvé un lien vers les "amibes morphologiques". Est ce que vous pouvez me procurer un lien qui peux m'aider.

    Cordialement.

  21. #17
    agent933

    Re : traitement d'image sur le langage C

    Salut merci a tous pour votre aide j'ai finalement reussi a avoir ce que je voulais.
    Au cas ou ca pourrai servir a d'autre, j'ai utilise une structure au lieu de tableau :

    Code:
    void rgbtobw(IMAGE *imrgb)
    {	int i;
    	for (i=0;i<(640*480*3);i+=3){
    		if (((imrgb->data[i]+imrgb->data[i+1]+imrgb->data[i+2])/4) >= 50){
    				imrgb->data[i]=255;
    				imrgb->data[i+1]=255;
    				imrgb->data[i+2]=255;
    		}
    		else{
    				imrgb->data[i]=0;
    				imrgb->data[i+1]=0;
    				imrgb->data[i+2]=0;
    		}
    	}
    }
    Merci encore a tous
    Dernière modification par yoda1234 ; 10/07/2008 à 05h31.

  22. #18
    agent933

    Re : traitement d'image sur le langage C

    Salut la plupart de mes amis ont divise par 3 pour avoir le niveau de gris.
    Tu voulais dire quoi par une division par 4 est moins couteuse qu'une division par 3.
    Merci d'avance

  23. Publicité
  24. #19
    argusazure

    Re : traitement d'image sur le langage C

    Citation Envoyé par agent933 Voir le message
    Salut la plupart de mes amis ont divise par 3 pour avoir le niveau de gris.
    Tu voulais dire quoi par une division par 4 est moins couteuse qu'une division par 3.
    Merci d'avance
    Je parlais en terme de temps processeur. En vitesse d'exécution si tu prefères.

  25. #20
    skydancer

    Re : traitement d'image sur le langage C

    Bonjour,

    au sujet des amibes morphologiques :

    il y a deux ou trois articles couvrant le sujet des éléments structurants dynamique:
    NOISE REDUCTION IN 3D IMAGES USING MORPHOLOGICAL AMOEBAS
    Image filtering using morphological amoebas-

    L'idée est d'utiliser des éléments structrants qui s'adaptent en chaque point de l'image, en fonction du gradient, ou d'autre critères.

  26. #21
    agent933

    Re : traitement d'image sur le langage C

    merci argusazure

  27. #22
    dali_sfax

    Re : traitement d'image sur le langage C

    salut,

    je veux savoir si quelqun peut m'aider à programmer un algo de conversion rgb2hsv en dsp; j'ai pas compris comment faire la division en asembleur.

    Merci.

Sur le même thème :

Discussions similaires

  1. Affichage D'image En Langage C Pour Pic
    Par poulpe82 dans le forum Électronique
    Réponses: 3
    Dernier message: 21/04/2008, 22h38
  2. traitement d'image
    Par lak2007 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 03/12/2007, 08h14
  3. traitement d'image
    Par weeckett dans le forum Technologies
    Réponses: 3
    Dernier message: 08/05/2007, 23h07
  4. Traitement d'image
    Par selmour dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 01/10/2006, 10h27
  5. Traitement d'image
    Par Ravaner dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 22/03/2006, 13h44