traitement d'image sur le langage C
Répondre à la discussion
Affichage des résultats 1 à 22 sur 22

traitement d'image sur le langage C



  1. #1
    invite243c0969

    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. #2
    SuperTux

    Re : traitement d'image sur le langage C

    En noir&blanc ou rgb ?

  3. #3
    invite243c0969

    Re : traitement d'image sur le langage C

    salut,
    en rgb.

  4. #4
    SuperTux

    Re : traitement d'image sur le langage C

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

  5. A voir en vidéo sur Futura
  6. #5
    invite498c56f7

    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. #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

  8. #7
    invite8b867113

    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.

  9. #8
    invite498c56f7

    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

  10. #9
    invite498c56f7

    Re : traitement d'image sur le langage C

    Merci argusazure,
    je vais de ce pas essayer.

  11. #10
    invite498c56f7

    Re : traitement d'image sur le langage C

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

  12. #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.

  13. #12
    invite8b867113

    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)

  14. #13
    invite243c0969

    Re : traitement d'image sur le langage C

    Salut a tous,

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

  15. #14
    invite243c0969

    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.

  16. #15
    invite79d10163

    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.

  17. #16
    invite243c0969

    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.

  18. #17
    invite498c56f7

    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 à 06h31.

  19. #18
    invite498c56f7

    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

  20. #19
    invite8b867113

    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.

  21. #20
    invite79d10163

    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.

  22. #21
    invite498c56f7

    Re : traitement d'image sur le langage C

    merci argusazure

  23. #22
    invite243c0969

    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.

Discussions similaires

  1. Affichage D'image En Langage C Pour Pic
    Par invite442b140d dans le forum Électronique
    Réponses: 3
    Dernier message: 21/04/2008, 23h38
  2. traitement d'image
    Par inviteb51566eb dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 03/12/2007, 09h14
  3. traitement d'image
    Par invite660b457b dans le forum Technologies
    Réponses: 3
    Dernier message: 09/05/2007, 00h07
  4. Traitement d'image
    Par inviteff969718 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 01/10/2006, 11h27
  5. Traitement d'image
    Par invitec85fb8ec dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 22/03/2006, 14h44
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...