Vulpetrus
Messages postés70Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention21 décembre 2005 19 oct. 2005 à 13:33
c'est exactement le meme principe que sur un univers à n dimensions :
- première étape : placer les barycentres ( les niveaux de gris sont
quantifiables ? si c pas le cas t'auras du mal à appliquer l'algo des
nuées), tu les repartie de manière qu'ils couvrent uniformement ton
univers.(blanc (0 /n)- gris (n/2 / n) - noir ( n /n) )
- deuxième étape : tu associe à chaque pt (dans ton cas c des barres d'histogramme) le barycentre qui lui est le plus proche.
- troisième étape : tu recalcule chacun des barycentre en fonction des points qui leur sont associés.
- tu reitère autant de fois que tu souhaite les étapes 2 et 3
(normalement ca converge, les barycentre n'évolue plus apres un certain
nombre d'étapes)
si t as placé trois barycentres , à la fin tu trouve tes trois seuils.
cs_S12
Messages postés5Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention24 novembre 20051 20 oct. 2005 à 10:55
Bonjour VULpetrus ,
merci beaucoup de ton aide,
non j'ai pas quatifié mes niveaux de gris , pourquoi les quatifier?
je t'explique si j'ai bien compris :
j'ai un histograme dans mon cas je voudrais troi seuils c'est dire le coupe en 4 (4classe)et aprés je choisi un barycentre dans chaque classe ( je peux choisir des pics de l'histogramme),
je n'ai pas compris la troisième étapes
est ce que je choisi chaque point dans l'histogrmme et je calcule ça distance avec les autre barycentre pour les affecter a la classe.
Vulpetrus
Messages postés70Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention21 décembre 2005 20 oct. 2005 à 14:19
ben la quantification te permet le calcul de barycentres.
----------------------
non trois seuils => trois classes
pour chaque classe tu lui associe un pic d'histogramme.
une classe est déterminée par son barycentre.
dans
notre cas,pour savoir à quelle classe appartient un point de l'histo,
tu determine la distance de ce point par rapport à chacun des
barycentres, le point appartiendra alors à la classe dont le barycentre
est le plus proche.
pour chaque point de l'histogramme tu determine la classe (barycentre) qui lui est la plus proche.
une
fois que tu as fait cela, tu recalcule la valeur du barycentre de
chaque classe : pour cela tu determine le barycentre propre à chaque
classe : calcul du barycentre de tous les points appartenant à la
classe.
tu reassocies à chaque classe son nouveau barycentre...
tu
recherche alors à nouveau pour chaque point de l'histo, le barycentre
qui lui est le plus proche et tu lui associe ce barycentre.
tu refais les etapes autant de fois que possible.
la
troisème étape : elle consiste à calculer le barycentre réel de la
classe, il correspond au point "moyen" qui represente le mieux les
points de cette classe. ( le barycentre entre deux points correspond au
centre de ces deux points, celui de n points quantifiables p1, p2, ...,
pn de valeurs respectives v1,...,vn est : barycentre =
(p1.v1+p2.v2+...+pn.vn)/n
Vulpetrus
Messages postés70Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention21 décembre 2005 22 nov. 2005 à 14:44
je ne suis pas vraiment rentré dans le détail mais bon pour tout ce qui
est nuée dynamique ca à l'air pas mal (initialisation/affectation des
points/calcul des bary/réaffectation.)...par contre tu dois faire une
moyenne pondérée pour calculer le barycentre, dans le cas contaire les
seuils à la fin du traitement ne reflèteront pas ton histogramme : en
fait tu risque de récuperer trois seuils respectivement à 1/3, 2/3 et
3/3 de ton espace.
donc supposons que ton histogramme se represente par la fonction y=f(x),
on aura alors :
% recalcule le barycentre
total1=0;
for j=1 :length(d1)
bary1 = bary1 + d1(j)*f( d1(j) )
total1 = total1 + d1(j)*f( d1(j) )
end
bary1 = bary1/total1
tu fais la même chose pour bary2 et bary3.
j'ai un avis assez partagé sur l'utilisation de ta fonction de lissage qui semble être une bonne idée.
Vulpetrus
Messages postés70Date d'inscriptionjeudi 22 mai 2003StatutMembreDernière intervention21 décembre 2005 24 nov. 2005 à 10:54
mdr ^^
effectivement, excuses-moi je suis allé un peu vite ^^
total1=0;
for j=1 :length(d1)
bary1 = bary1 + d1(j)*f( d1(j) )
total1
= total1 + f( d1(j)
)
( total des repartitions : nb d'elements sur lesquels portent l'histo)
end