Classification non-supervisé de pixel : application des kmeans

Le but de cette exercice est de montrer l'utilisation de kmeans sur un cas « concret » appliquer à de l'analyse d'image. On souhaite ici quantifier le nombre de teinte/cluster nécéssaire pour représenter une image sans trop la dégradé. On charge alors une image quelqonque en matrice de couleur et on fait une première transformation en HSV (Teinte, Saturation, Valeur) dont on ne garde que la teinte, le tout ranger dans un tableau 1D en gardant un ordre sur les données de la forme [i*height +j] pour avoir une correspondance avec les coordonnées de la matrice de l’image. De cette façon nous pouvons juste utiliser l’algorithme kmeans que nous avons développez précédement qui permettait déjà de traiter un problème en n-dimensions. Pour initialiser les centres, on découpe l’espace des teintes en n valeurs pour maximiser les chances de trouver toutes les couleurs peu importe l’environnent sur lequel est traitée l’information.



preview

 

if K==1:
    centers = [0.5]
elif K==2:
    centers=[0., 1.]
else:
    centers = list(zeros(K))
    for groupe in range(K):
        centers[groupe] = (groupe)/(K-1)
    centers[K-1]=1.

Application des kmeans

Lors de l’exécution de l’algorithme les teintes sous-représentées vont se décaler, faire des spectres plus visibles. C’est comme si on prenait un histogramme et que l’on ne prenait que les n plus fortes teintes représentées pour ensuite affecter les autres teintes aux teintes les plus proches (les centres), cette algorithme peut donc être utilisé pour de la compression d'image :

  • Image Matisse Original

  • Matisse 1 teinte

  • Matisse 2 teinte

  • Matisse 3 teinte

  • Matisse 4 teinte

  • Matisse 5 teinte

  • Matisse 6 teinte

  • Matisse 7 teinte

  • Matisse 8 teinte

  • Matisse 9 teinte

  • Matisse 10 teinte

  • Matisse 11 teinte

  • Matisse 12 teinte

  • Matisse 13 teinte

  • Matisse 14 teinte

  • Matisse 15 teinte

  • Matisse 16 teinte

  • Matisse 17 teinte

  • Matisse 18 teinte

  • Matisse 19 teinte

  • Matisse 20 teinte

  • Matisse 21 teinte

  • Matisse 22 teinte

  • Matisse 23 teinte

  • Matisse 24 teinte

  • Matisse 25 teinte

  • Matisse 26 teinte

  • Matisse 27 teinte

  • Matisse 28 teinte

  • Matisse 29 teinte

Pour les échantillons de l’image « matisse.jpg » nous avons constaté que les feuilles de teinte jaune ou orange sont très difficiles à être trouvées car elles sont largement sous-représentées en nombre de pixels il faut donc compter 14 teintes minimum ou 35 pour avoir les deux teintes de feuilles proches de l’original

  • Image Miro Original

  • Miro 1 teinte

  • Miro 2 teinte

  • Miro 3 teinte

  • Miro 4 teinte

  • Miro 5 teinte

  • Miro 6 teinte

  • Miro 7 teinte

  • Miro 8 teinte

  • Miro 9 teinte

  • Miro 10 teinte

  • Miro 11 teinte

  • Miro 12 teinte

  • Miro 13 teinte

  • Miro 14 teinte

  • Miro 15 teinte

  • Miro 16 teinte

  • Miro 17 teinte

  • Miro 18 teinte

  • Miro 19 teinte

  • Miro 20 teinte

  • Miro 21 teinte

  • Miro 22 teinte

  • Miro 23 teinte

  • Miro 24 teinte

  • Miro 25 teinte

  • Miro 26 teinte

  • Miro 27 teinte

  • Miro 28 teinte

  • Miro 29 teinte

Bonne représentation de l’image « miro.jpg » à partir de 6 teintes, après les contours sont plus lisses donc visuellement plus propres

  • Image Picasso Original

  • Picasso 1 teinte

  • Picasso 2 teinte

  • Picasso 3 teinte

  • Picasso 4 teinte

  • Picasso 5 teinte

  • Picasso 6 teinte

  • Picasso 7 teinte

  • Picasso 8 teinte

  • Picasso 9 teinte

  • Picasso 10 teinte

  • Picasso 11 teinte

  • Picasso 12 teinte

  • Picasso 13 teinte

  • Picasso 14 teinte

  • Picasso 15 teinte

Illustration de la progression de classement sur le nombre de classes (ie : nombre de teintes) comme ce tableau a des zones de couleur bien distinctes et que le nombre de couleurs est limité la détection est facile et bien opérée.

Comment évaluer la classification produite ?

On peu comparer visuellement si le paramètre K(nombre de teintes) est trop faible il y a forcement des zones mal classées, et lorsque certaines composantes sont sous-représentées également mais ces dernières n’introduisent pas une grosse marge d’erreur. Mais la mise en place de mesure est toujours à privilégier plutöt que l'oeil humain qui reste subjectif et imprécis. Pour cela il y a plusieurs approches possible que vous pouvez implémenté est tester, par exemple :

  • on soustrait la teinte de l’image originelle et la teinte de l’image « classifiée »
  • on fait un histogramme, les classes mal classées sont plus représentées
  • on fait la moyenne des erreurs de classement
  • on compare à un seuil fixe