# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  Histogrammes, et Ajustement Gaussien

## johnkhm

Bonjour !

Je cherche a discerner plusieures populations sans a avoir a fixer de seuil. Pour cela, je dispose de donnes que j'ai affich sous format d'histogrammes, et on peut trs nettement identifier deux courbes gaussiennes qui se supperposent. 
J'aimerais savoir si il existe des algorithmes permettant de faire un fitting gaussien de cette courbe me permettrant ainsi d'identifier ces deux populations. 
L'idal serait de disposer d'une fonction qui repre automatiquement le nombre de fonctions gaussiennes a reprsenter (en rglant la sensibilit ) , ou encore de spcifier le nombre de fonction gaussiennes qui seraient affiches , en mimant au maximum l'allure de mon histogramme.

Merci beaucoup

----------


## johnkhm

PS : j'essaie d'implmenter ca en python (  ::cry::   ) je n'ai pas trop le choix ... 
Donc si vous disposez de bibliothques, elles seraient les bien venues... 
J'ai regard quelques libs , mais elles ne font que crer et centrer UNE seule gaussienne

----------


## mchk0123

Quel est ton niveau en Mathmatiques ?

car la solution que j'entrevoie et super costaud dans le domaine.

Au fait tes donnes sont comment ?
Quantifies, discretise ? Est ce que ton histogramme est fin,  grosses barres ? Combien  tu as de barres ? Sur quelle intervalle est ton axe de ordonnes ? Veux tu une solution parfaite ou approche ? As tu des soucis de performance ? ...

----------


## johnkhm

Au niveau mathmatique, j'ai quelques notions ( niveau Deug Maths info ), mais je suis motiv pour me plonger dans tes explications  ::mrgreen::  

Au niveau des donnes, mes donnes sont discrtises, mais je dispose de 23000 valeurs a afficher, mon intervalle est [ 20 , -350 ]. La solution que je cherche est une solution exacte car on cherche a discerner plusieures population de lipides, sur lesquelles on va y appliquer des traitements differents. 
Ceci dit, ca dpend de ce que tu appele exacte, mes donnes comportent quand meme pas mal de bruit, donc j'imagine qu'il faudrait dans tout les cas faire queles approximations  ::D:  

J'ai mis en fichier joint un exemple de coube que j'ai obtenu. J'ai commenc a faire un affichage (bidon  ::lol::  ) de courbes gaussiennes. Je n'ai russi a afficher qu'une seule courbe par jeu de donne, donc les rsultats sont pas terribles ( courbe gaussienne centre par la moyenne de mon jeu de donnes, avec comme parametre sigma,  l'cart type )  

Merci !

----------


## pseudocode

> Je cherche a discerner plusieures populations sans a avoir a fixer de seuil. Pour cela, je dispose de donnes que j'ai affich sous format d'histogrammes, et on peut trs nettement identifier deux courbes gaussiennes qui se supperposent. 
> J'aimerais savoir si il existe des algorithmes permettant de faire un fitting gaussien de cette courbe me permettrant ainsi d'identifier ces deux populations.


Un K-Mean avec 2 groupes, en prenant comme heuristique la distance point/gaussienne.




> L'idal serait de disposer d'une fonction qui repre automatiquement le nombre de fonctions gaussiennes a reprsenter (en rglant la sensibilit ) , ou encore de spcifier le nombre de fonction gaussiennes qui seraient affiches , en mimant au maximum l'allure de mon histogramme.


Idem. Un K-Mean avec un nombre parametrable de groupes. Soit ce nombre est fix au dpart par l'utilisateur, soit il est "evalu" par itrations successives (dichotomie, ...)

----------


## mchk0123

Il n'y a pas comme un problme de sensibilit au bruit avec un K-mean ?

Effectivement c'est simple  mettre en oeuvre et rapide  l'excution, mais a bien regarder ses courbes elles sont trs bruites.

----------


## pseudocode

> Il n'y a pas comme un problme de sensibilit au bruit avec un K-mean ?
> 
> Effectivement c'est simple  mettre en oeuvre et rapide  l'excution, mais a bien regarder ses courbes elles sont trs bruites.


Oui le k-mean est sensible au bruit... Mais dans ce cas precis, ce n'est pas la caracterisation des points qui nous interesse: c'est la caracterisation des 2 groupes (= l'equation des gaussiennes).

Donc meme si certains points sont "rangs" dans la mauvaise courbe, l'equation des 2 gaussienne devrait etre assez juste.

----------


## johnkhm

ok merci,  je vais tester ca tout de suite
 ::yaisse2::

----------


## pseudocode

> ok merci,  je vais tester ca tout de suite


2 trucs a savoir:

- L'algo basic du kmean: 1er lien de google

- L'equation d'une gaussienne:  G(x) = A*exp( -(x-c)^2 /  2*s^2 ) 

   c = centre = coordonne x du point le plus elev (peak)
   A = amplitude = le y  du point c
   s = std-dev = FWHM / 2.35  (FWHM = largeur a mi-hauteur)

Edit: formule gaussienne

----------


## Nemerle

Ce type de problme est DIFFICILE. Je doute qu'un k-means, surtout pour k>2, soit pertinent, pour la raison suivante. Grossirement, la difficult principale est que certaines de tes "sous-gaussiennes" peuvent tre "plates", alors que d'autres peuvent tre pointues, et dans ce cas un k-means ne donnera rien de bon.

Si tes gaussiennes sont toutes de mme forme, a serait plus simple...

Une analyse en composantes principales + tests de vraissemblance est  envisager. 

J'essaie de revenir vers toi cette semaine, mais je n'aurai peu-tre pas le temps.

----------


## johnkhm

OW YEAH !

En fait gnuplot dispose exactement de l'outil que je recherchais !
Le didacticiel se trouve a la page suivante :
http://t16web.lanl.gov/Kawano/gnuplo...lotfunc-e.html

J'avais commenc a utiliser le K-Means , mais j'obtenais des valeurs qui ne correspondaient pas forcment aux valeurs attendues... Mais je n'ai pas trop regard en dtail l'algo du K-means

En tout cas , merci bcp de votre aide !! 
Et merci Gnuplot ! 

 ::yaisse2::  
 ::yaisse2::  
 ::yaisse2::

----------


## Delisle

Je suis galement  la recherche d'un programme matlab pour fitter une gaussienne sur des donnes exprimentales.
 J'ai des acquisitions qui correspondent  des profils dont la forme est proches d'une distribution gaussienne, et l'information qui m'intressent est la largeur  mi-hauteur. Je recherche donc  fitter les paramtres suivants : 
A : amplitude
B : moyenne (esprance mathmatique)
C : cart-type 

f(x) = A*exp(- ( (x-B)/C ).^2)

J'ai lu la discussion prcdente, et j'ai t sur gnuplot, mais c'est un programme matlab qui m'intresse.

Merci par avance pour votre aide
Cyril

----------


## pseudocode

Un moindre carr tout bete ca ne suffit pas ?

----------


## Delisle

oui, je pense que a doit suffire.
 Existe -t-il un fonction matlab utilisant la mthode des moindres carrs,
 o il suffit de remplacer la fonction  paramtrer. Si vous avez un tel programme, je suis preneur.

Il existe la fonction 'polyfit' mais les fonctions fittes ne sont que des polynomes.

merci

----------


## pseudocode

> oui, je pense que a doit suffire.
>  Existe -t-il un fonction matlab utilisant la mthode des moindres carrs,
>  o il suffit de remplacer la fonction  paramtrer. Si vous avez un tel programme, je suis preneur.


google et mon petit doigt me disent qu'il y a plein de mthodes de "curve fitting" en Matlab... il faut aller poser la question sur le forum appropri:

developpez - MATLAB

----------


## Delisle

Merci pour ces rponses, pour information j'ai trouv une toolbox appel 'ezyfit' que l'on peut tlcharger gratuitement. a marche trs bien pour fitrer une loie normale Gaussienne.

Autre question : Je voudrais si on peut fitrer un histogramme ?
 car mon problme est que la fonction Matlab pour tracer un histogramme 'hist' fonctionne trs bien, mais comment rcuprer les points de l'histogramme tracs par la fonction 'hist' ?

----------


## ToTo13

Bonjour,

si ton poste est rsolu, pense  le marqu .




> Autre question : Je voudrais si on peut fitrer un histogramme ?
>  car mon problme est que la fonction Matlab pour tracer un histogramme 'hist' fonctionne trs bien, mais comment rcuprer les points de l'histogramme tracs par la fonction 'hist' ?


c'est une question MatLab, pose donc cette question dans le forum adapt.

----------

