04/07/2008, 15h48
|
Message #1 de cette discussion
| Date d'inscription: juillet 2008 Âge: 23
Messages: 6
| 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.
| | | Aujourd'hui
| | | | Liens sponsorisés | | | |
05/07/2008, 03h12
|
Message #2 de cette discussion
| Date d'inscription: septembre 2007 Âge: 22
Messages: 484
| Re : traitement d'image sur le langage C
En noir&blanc ou rgb ?
| | |
06/07/2008, 01h40
|
Message #3 de cette discussion
| Date d'inscription: juillet 2008 Âge: 23
Messages: 6
| Re : traitement d'image sur le langage C
salut,
en rgb.
| | |
06/07/2008, 04h44
|
Message #4 de cette discussion
| Date d'inscription: septembre 2007 Âge: 22
Messages: 484
| Re : traitement d'image sur le langage C
Je ne peux pas t'aider alors, désolé...
| | |
06/07/2008, 16h08
|
Message #5 de cette discussion
| Date d'inscription: juillet 2008
Messages: 8
| 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.
| | |
07/07/2008, 03h49
|
Message #6 de cette discussion
| Date d'inscription: septembre 2007 Âge: 22
Messages: 484
| 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 ?
| | | Aujourd'hui
| | | | Liens sponsorisés | | | |
07/07/2008, 09h47
|
Message #7 de cette discussion
| Date d'inscription: juillet 2006 Localisation: Toulouse Âge: 31
Messages: 620
| Re : traitement d'image sur le langage C Citation:
Envoyé par agent933 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.
| | |
07/07/2008, 18h16
|
Message #8 de cette discussion
| Date d'inscription: juillet 2008
Messages: 8
| 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
| | |
07/07/2008, 18h17
|
Message #9 de cette discussion
| Date d'inscription: juillet 2008
Messages: 8
| Re : traitement d'image sur le langage C
Merci argusazure,
je vais de ce pas essayer.
| | |
07/07/2008, 18h30
|
Message #10 de cette discussion
| Date d'inscription: juillet 2008
Messages: 8
| Re : traitement d'image sur le langage C
Tu peux m'expliquer la fonction RGBtong, parametres et variables utilisees.
| | |
07/07/2008, 22h46
|
Message #11 de cette discussion
| Date d'inscription: septembre 2007 Âge: 22
Messages: 484
| Re : traitement d'image sur le langage C Citation: |
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.
| | |
08/07/2008, 11h25
|
Message #12 de cette discussion
| Date d'inscription: juillet 2006 Localisation: Toulouse Âge: 31
Messages: 620
| Re : traitement d'image sur le langage C Citation:
Envoyé par SuperTux 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)
| | | Aujourd'hui
| | | | Liens sponsorisés | | | |
08/07/2008, 12h44
|
Message #13 de cette discussion
| Date d'inscription: juillet 2008 Âge: 23
Messages: 6
| Re : traitement d'image sur le langage C
Salut a tous,
désolé AGENT933, je ne peux pas vous aider.
| | |
08/07/2008, 12h46
|
Message #14 de cette discussion
| Date d'inscription: juillet 2008 Âge: 23
Messages: 6
| 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.
| | |
08/07/2008, 12h54
|
Message #15 de cette discussion
| Date d'inscription: juillet 2006 Localisation: Fontainebleau
Messages: 249
| 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.
| | |
09/07/2008, 11h08
|
Message #16 de cette discussion
| Date d'inscription: juillet 2008 Âge: 23
Messages: 6
| 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.
| | |
09/07/2008, 18h56
|
Message #17 de cette discussion
| Date d'inscription: juillet 2008
Messages: 8
| 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.
| | |
10/07/2008, 04h26
|
Message #18 de cette discussion
| Date d'inscription: juillet 2008
Messages: 8
| 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
| | | | |