Skip to content

Antoine0703/Image-compressor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📸 ImageCompressor

L’objectif principal du projet ImageCompressor est d’appliquer l’algorithme de K-means pour compresser une image en réduisant son nombre de couleurs, tout en conservant un rendu visuel proche de l’original. Ce projet met en pratique des notions avancées de programmation fonctionnelle en Haskell. À partir d’un fichier contenant les coordonnées et couleurs des pixels, le programme regroupe les couleurs similaires en un nombre limité de clusters, et remplace chaque pixel par la couleur moyenne de son groupe. Cela permet d’illustrer concrètement des techniques de traitement d’image tout en renforçant la maîtrise du paradigme fonctionnel.


🧠 Objectif du projet

L'ImageCompressor regroupe les pixels d’une image selon leur couleur, puis les remplace par la couleur moyenne de chaque groupe. Ce processus permet de compresser l’image en limitant le nombre total de couleurs à un nombre défini (-n).

L'entrée est un fichier texte contenant la position (x,y) et la couleur (r,g,b) de chaque pixel. L'algorithme itère jusqu'à ce que les couleurs des clusters convergent, selon une tolérance donnée (-l).


⚙️ Compilation

Le projet se compile simplement avec :

make

🚀 Utilisation

./imageCompressor -n <nombre_de_clusters> -l <limite_convergence> -f <fichier_d’entrée>

Paramètres :

Option Description
-n Nombre de clusters (ou de couleurs finales)
-l Seuil de convergence (valeur flottante)
-f Chemin vers le fichier contenant les pixels

📄 Format du fichier d’entrée

Chaque ligne du fichier contient les coordonnées d’un pixel et sa couleur RGB :

(x,y) (r,g,b)

Exemple :

(0,0) (255,255,255)
(0,1) (200,200,200)
(1,0) (10,10,10)
...

Format du fichier de sortie


📦 Exemple

Image initial Figure 1 – Image initial

Exemple n°1

./imageCompressor -n 3 -l 0.3 -f img1.txt

Texte final Figure 2 – Résultat après compression avec K=3

Exemple 2

./imageCompressor -n 10 -l 0.1 -f img2.txt

Texte final Figure 3 – Résultat après compression avec K=10

Ce qui produira une sortie de pixels compressés, chaque pixel étant remplacé par la couleur de son cluster.


🔬 Algorithme utilisé : K-means

  1. Initialisation aléatoire de n centres.
  2. Attribution de chaque pixel au cluster le plus proche.
  3. Recalcul du centroïde de chaque cluster.
  4. Répétition jusqu’à ce que les mouvements des centroïdes soient inférieurs à -l.

✅ Exemple de sortie

(0,0) (128,128,128)
(0,1) (128,128,128)
(1,0) (10,10,10)
...

Chaque couleur a été remplacée par celle de son groupe.

About

The ImageCompressor project aims to reduce the number of colors in an image using the K-means algorithm. Implemented in Haskell, it groups pixels according to their similarity and produces a compressed version, while exploring functional programming concepts.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors