Histogramme

cs_stockley81 Messages postés 24 Date d'inscription lundi 21 avril 2003 Statut Membre Dernière intervention 24 août 2005 - 15 juil. 2003 à 17:23
cs_S12 Messages postés 5 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 24 novembre 2005 - 13 oct. 2005 à 13:29
Bonjour

j'ai recupere toutes les valeurs des pixels d'une image stockees dans des tableaux et je souhaite realiser un histogramme de l'image. C'est dire que je veux connaitre la recurrence de chacune des couleurs de l'image (en realite je veux juste connaitre la plus utilisee).

Les couleurs ont 3 composantes Rouge, Vert et Bleu, chacune pouvant prendre une valeur entre 0 et 255. Ce qui fait plus de 16millions (255^3) de couleurs differentes.

Merci de votre aide

8 réponses

cs_S12 Messages postés 5 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 24 novembre 2005 1
13 oct. 2005 à 13:29
Bonjour à tous ,

je voudrais appliquer l'algorithme des nuées dunamique sur l'histogramme de niveaus de gris pour trouver trois seuils.

j'ai compris comment l'appliquer directement sur l'image pour segmenter mais pas sur un histograme d'une seule dimension.

merci pour votre aide
1
cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
15 juil. 2003 à 19:59
a priori dans ton cas, on fabrique poutot un histogramme pour chacune des composantes couleur de l'image. si ca te convient, alors, c'est pas tres complique :

- tu declares 1 tableau [2][256]
- tu initialises la 1ere ligne : 0, 1, 2, 3, 4, 5 ... et la deuxieme a 0 pour tous les elements
- tu parcoures chacune des composantes pixel par pixel
- tu incrementes l'element du tableau qui correspond a la valeur du pixel : histo[1][valeur]++;

voila, ton histo est fait ...
0
cs_stockley81 Messages postés 24 Date d'inscription lundi 21 avril 2003 Statut Membre Dernière intervention 24 août 2005
15 juil. 2003 à 21:35
Pour chacun des pixels, j'ai une combimaison Rouge,Vert,Blue. Et cette combinaison forme une couleur. Et je doit absolument faire un histogramme sur ces combinaisons et non sur chacune des 3 composante. C'est bien la le probleme.

Sur une couleur c'est effectivement pas tres dur mais sur les trois ca devient costaud.
J'ai essaye une methode qui mqrche mais qui est tres bourrin et qui consiste a balayer toutes les couleurs possibles les unes apres les autres et les chercher dans l'images (ca fait plus de 16millions d'iterations).minute pour une image 50*50pixels. Je travaille avec des images 512*512 voir plus. C inacceptable comme traitement.

Si tu as une autre idee, je suis preneur....
0
cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
15 juil. 2003 à 21:50
et bien plutot que de balayer toutes les couleurs possibles de l'image, tu devrais balayer l'image et incrementer chaque valeur de ton histogramme des que tu rencontres une couleur donnee ...
bref, comme je te l'ai propose dans le precedent post, mis en ayant un tableau plus grand (histo[2][16M], a declarer en dynamique, ca m'etonnerait que ca marche sinon ...). avec ca, ton histo sera construit en balayant l'image une seule fois, ce qui devrait grandement ameliorer ton temps de calcul ...
si ca convient pas, j'ai encore un peu de temps, sinon, merci de me le dire ...
courage, tchô
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_stockley81 Messages postés 24 Date d'inscription lundi 21 avril 2003 Statut Membre Dernière intervention 24 août 2005
15 juil. 2003 à 22:45
j'avais pense a cette methode. Mais j'ai eu peu de mal avec l'allocation dynamique de memoire et la maitrise de pointeurs c'est pourquoi j'essayait d'envisager d'autre possibilites.

Merci de ton aide
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
15 juil. 2003 à 23:02
- Tu peux déjà transformer des triplets RGB en entier.

- Un tableau à une dimension suffit. L'index dans le tableau correspondra à la couleur et la valeur associée sera le compteur.

Kaid
0
efetel Messages postés 5 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 16 juillet 2003
15 juil. 2003 à 23:45
Effectivement travailler sur les trois dimensions est ardu voir impossible ...

je serais toi si je voulais travailler sur les trois couleurs (RVB)en meme temps je calculerais d'abord des classes de couleurs dans l'espace a trois dimension soit par des cut-offs soit par des algorithme plus specialises comme les nuees dynamiques (ou moving centers) et je formerais un histogram grossier

et ensuite je rafinerais a l'interieur de la(ou des) classes les plus importantes avant de trouver la couleur la plus representee.

Enfin une autre procedure pour ameliorer le calcul est de ne travailler que sur un sampling de ton image obtenue par tirage aleatoire.

si tu as besoin d'aide n'hesite pas
Cordialement
E.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 juil. 2003 à 11:37
Moi j'utiliserait un conteneur associatif comme une map, car c'est impossible de faire un tableau de 16 millions d'entiers.
#include<map>

map m;

et pour chaque pixel tu fais
++m[r + 255*g + 255*255*b];
0
Rejoignez-nous