Bonjour,
je dois calculer l'entropie d'une image, j'ai lu un sujet à ce propos sur le forum mais il ne répond pas à mes questions... Voici la définition :
Soit une source S dans laquelle chaque symbole émis est indépendant des symboles précédemment émis. Cette source est une DMS (Discrete Memoryless source). S est caractérisée par un alphabet {s1, s2,...,sn} et les probabilités d'occurence associées {p(s1),p(s2),...,p(sn)}.
Appelons I(si) l'information qu'apporte l'apparition du symbole si. Alors l'intuition nous pousse à dire qu'un symbole de probabilité d'occurrence faible apporte plus d'information lors de son émission par la source qu'un symbole de probabilité élevée. Mathématiquement, cela se traduit par :
I(si) = -log p(si)
Alors l'entropie H de la source est définie par :
H(S) = sommei=1i=n p(si)I(si) en bits / symbole
L'entropie est donc la quantité moyenne d'information par symbole.
J'ai tout de même réalisé une fonction:
J'ai vérifier mes valeurs avec des images de références: broatz, d19, d9... et je trouve toujours des valeurs très éloignées...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 float traitementGray::Entropie(const CGrayImage& imageGray, vector<unsigned long>& histo) { float entropie=0; float proba_xi=0; float nb_pixel_total = imageGray.getNbPixels(); for(int i=0; i < 256; i++) { if(histo[i]>0) { proba_xi = (float)histo[i] / nb_pixel_total; entropie += (proba_xi * (log(proba_xi)/log((float)2))); } } return (-(entropie)); }
Que faut-il faire dans le cas d'une valeur de l'histogramme égale à 0?
merci pour votre aide
fog4000
Partager