Histogramme

Messages postés
24
Date d'inscription
lundi 21 avril 2003
Statut
Membre
Dernière intervention
24 août 2005
- - Dernière réponse : 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
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
5
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
24 novembre 2005
1
1
Merci
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

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 204 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_S12
Messages postés
252
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
1 mai 2005
0
Merci
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 ...
Commenter la réponse de cs_payen
Messages postés
24
Date d'inscription
lundi 21 avril 2003
Statut
Membre
Dernière intervention
24 août 2005
0
Merci
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....
Commenter la réponse de cs_stockley81
Messages postés
252
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
1 mai 2005
0
Merci
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ô
Commenter la réponse de cs_payen
Messages postés
24
Date d'inscription
lundi 21 avril 2003
Statut
Membre
Dernière intervention
24 août 2005
0
Merci
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
Commenter la réponse de cs_stockley81
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006
0
Merci
- 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
Commenter la réponse de cs_Kaid
Messages postés
5
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
16 juillet 2003
0
Merci
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.
Commenter la réponse de efetel
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
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];
Commenter la réponse de vecchio56