Header
🠖 Chapitre 4 : Python - Les types construits

Projet Traitement d'Image

1. Les formats de fichiers

Dès les premières normes de codage (ASCII, UTF-8, etc…), les informaticiens ont voulu coder autre chose que du texte : des sons, des images, etc…
Pour différencier les formats de fichier qui commençaient à naître, ils ont imposé d'ajouter derrière le nom d'un fichier, une extension qui indiquerait son format et donc le logiciel qui serait capable de le lire.
Type de fichierExtension de fichierLogiciels
Texte.txt .py ...Notepad++, Bloc-note ...
Texte .odt .docx ... LibreOffice, OnlyOffice, Word ...
Image.jpg .bmp .gif .png .webp ... Gimp, Paint, Photoshop ...
Son.wav .mp3 .flac ... VLC ...
Vidéo.avi .mp4 ... VLC ...
Quelques exemples de situation :
  • Pour une simple prise de note → un format .txt léger mais avec peu d'options de mise en forme peut convenir.
  • Pour la rédaction d'un compte-rendu → un format .odt ou .docx avec une mise en forme est plus adapté, mais plus lourd.
  • Pour une chanson écoutée sur un smartphone → un format .mp3 de qualité moyenne mais léger convient.
  • Pour de la musique diffusée dans une salle de spectacle → un format .wav très lourd sera nécessaire.
  • Pour une image sur un site web → le format .jpg compressé et léger se chargera rapidement. Il existe aussi les formats .webp ou .avif qui sont plus performants mais pas encore universellement reconnus comme l'est le .jpg.
  • Pour une image d'un photographe professionnel → le format .raw brut non compressé sera privilégié.

2. Codage d'une image matricielle

Une image matricielle est une image comportant des pixels rangés en quadrillage. Chaque couleur de pixel est alors codée par une valeur stockée dans un tableau (une matrice).

Exemples de formats d'image en texte brut
Format Contenu du fichier et #commentaires explicatifs Résultat
.pbm
pour
« Portable Bit Map »
P1            # code le format PBM
6             # nombre de colonnes
3             # nombre de lignes
0 0 0 1 1 1   # valeurs codant chaque
1 1 1 1 0 0   # pixel : 0 noir
0 0 0 1 1 1   #       / 1 blanc
.pgm
pour
« Portable Grey Map »
P2      # P2 code le format PGM
5       # nombre de colonnes
3       # nombre de lignes
255     # valeur max pour les teintes
  0  50 100 150 200     # Valeurs codant
  0   0  50 100 150     # l'image (1 par
 50   0   0  50 100     # pixel, gris)
.ppm
pour
« Portable Pix Map »
P3    # code le format PPM
3     # nombre de colonnes
3     # nombre de lignes
255   # valeur max pour les composantes
255 255   0 255   0   0 255 255 255   # 3 valeurs pour
  0 255 255   0 255   0 125 125 125   # chaque pixel
255   0 255   0   0 255   0   0   0
Format d'image matricielle
  1. Ouvrir l'image image1 au format PBM avec le bloc-note. Prévoir ce qu'elle représente puis vérifier votre hypothèse en l'ouvrant avec GIMP ou tout autre logiciel compatible.
    image1.pbm contient le nom « SALVA » écrit en noir sur fond blanc.
  2. De combien de pixels cette image est-elle composée ?
    Elle contient 7 lignes de pixels sur 21 colonnes soit 147 pixels au total.
  3. Quelle couleur est codée par 0 ? Par 1 ?
    Dans un fichier PBM, un 0 code pour le blanc et un 1 pour le noir.
  4. Ouvrir l'image monochrome image2 au format PGM avec le bloc-note. Prévoir ce qu'elle représente puis vérifier votre hypothèse en l'ouvrant avec GIMP ou tout autre logiciel compatible.
    L'image contient le nom SALVA avec des lettres de plus en plus claires sur un fond noir.
  5. Qu'apporte le format PGM de plus que le format PBM ?
    Le format PGM apporte 256 niveau de gris pour chaque pixel quand le format PBM ne propose que deux niveaux : noir ou blanc.
  6. Ouvrir l'image monochrome image3 au format PPM avec le bloc-note. Prévoir ce qu'elle représente puis vérifier votre hypothèse en l'ouvrant avec GIMP.
    image3.ppm contient le nom « SALVA » avec une couleur différente pour chaque lettre.
  7. Qu'apporte le format PPM ?
    Le format PPM apporte la couleur.
  8. Pourquoi a-t-on choisi 256 valeurs (de 0 à 255) pour coder la teinte ?
    La teinte est codée sur 256 valeur pour contenir dans un octet.
  9. Comparer sa taille aux fichiers précédent et justifier-la.
    Cette image est trois fois plus volumineuse car chaque pixel nécessite trois fois plus de données : le niveau de rouge, de bleu et de vert.
Format brut
  1. Charger l'image lena.bmp. Cette image a été enregistrée au format BMP-24bits.
  2. Déterminer la résolution de l'image et la taille du fichier (clic droit / propriété).
    lena512.bmp pèse 769Ko. Sa résolution est de 512x512 pixels.
  3. Combien de bits sont alloués à chaque pixel ? Justifier l'appellation du format BMP-24bits.
    Chaque pixel est codé sur 3 octets. En effet si on divise le poids du fichier par son nombre de pixel, on trouve un résultat proche de 3.
Format compressé avec et sans perte
  1. Estimer la taille en Mo du fichier d'une image 4K de 4096x2160 pixels codée en BMP-24bits.
    Une image 4K de 4096x2160 dont chaque pixel est codé sur 3 octets devrait peser 26,5 Mo.
    Le désir d'obtenir des images de meilleure qualité (couleur et résolution) fait face aux limites de stockage de nos disques durs et de bande passante des réseaux. Des formats de compression ont alors été inventés pour palier à ces limitations comme les formats JPEG (ou JPG) et PNG qui prédominent largement.
  2. Ouvrir les images lena512.bmp, lena512.png. Que constatez-vous en terme de qualité d'image ? Justifiez la différence de taille entre ces fichiers.
    lena512.bmp - 769ko
    lena512.png - 464ko
    Les images sont de qualité identique, cependant l'image PNG est moins volumineuse que l'image BMP car il s'agit d'un format d'image compressé sans perte d'information.
  3. Le format JPG est un format compressé qui entraîne la perte d'information (les pixels sont modifiés).
  4. Ouvrir les images lena512.bmp, lena512max.jpg et lena512min.jpg. Que constatez-vous en terme de qualité d'image ? Justifiez la différence de taille entre ces fichiers.
    lena512max.jpg - 340ko
    lena512min.jpg - 32ko
    lena512.bmp et lena512max.jpg semblent de qualité identique mais lena512min.jpg est clairement moins détaillée. Le format JPG est un format d'image compressé qui accepte la perte d'information pour réduire le poids du fichier.
  5. Pourquoi le format JPG est-il largement privilégié sur internet par rapport au format BMP ?
    Le format JPG est privilégié sur internet car les débits y sont limités.
  6. Cette photo de Lena Söderberg fait partie de l'histoire de l'informatique. Rechercher sa légende.
    Source Wikipédia : Lena est un morceau de photo d'une playmate prise dans le numéro de novembre (miss novembre) 1972 du magazine Playboy. Elle sert d'image de test pour les algorithmes de traitement d'image et est devenue de facto un standard industriel et scientifique.

3. Projet : Logiciel de traitement d'image

Mener à bien un projet informatique demande beaucoup de temps et d'argent. Il faut agir efficacement et pour cela une réflexion doit se faire en amont de la programmation (écriture du code) pour définir le besoin et concevoir l'architecture du projet.

3.1. Méthode du cycle de développement en V

  1. Définition : Rédaction d'un cahier des charges précisant les demandes du client. Il répond à la question « Quoi ? ». Il est rédigé en étroite collaboration avec le client.
  2. Conception : Rédaction d'un document fonctionnel décortiquant le projet en blocs fonctionnels (architecture du logiciel). Il répond à la question « Comment ? ». Cette étape est extrêmement importante pour gagner un temps considérable par la suite.
  3. Codage : Écriture du code dans différents fichiers (module) contenant chacun des fonctions du programme et leurs éventuels tests.
  4. Intégration : Cette étape consiste à rassembler tous les modules et à tester leur fonctionnement ensemble. Si le programme ne valide pas certains tests, il faut revenir à l'étape du codage, voire de la conception et plus exceptionnellement à la définition. Tous les résultats des tests sont consignés dans un cahier de test d'intégration.
  5. Validation : Le programme entier passe des tests de conformité pour s'assurer qu'il répond au cahier des charges. Ces tests et leurs résultats sont consignés dans un document de validation qui correspond à une garanti pour la livraison du programme au client.
Remarques :
  • Le code n'est pas immuable. Parfois, il faut savoir réécrire une portion entière du code plutôt que de le corriger à l'infini et d'y introduire d'éventuelles erreurs.
  • Le travail en équipe est souhaitable pour diviser le travail et gagner du temps mais il est alors très important de se réunir pour que chaque membre de l'équipe présente son travail aux autres. En effet, le regard des autres permet souvent d'optimiser le code et de faire en sorte que les membres ne se spécialisent pas et gardent une vue globale du projet afin de pouvoir palier la défaillance d'un équipier.
  • Des méthodes dites « Agiles » existent. Elles sont basées sur l'expérience et le bon sens. Elle se libère du cadre de la méthode du cycle en V pour être plus efficace et offrir une grande réactivité aux demandes du client qui est impliqué au maximum dans le processus de développement.

3.2. Cahier des charges

Le logiciel de traitement d'image doit permettre de réaliser des opérations basiques de traitement d’image sur trois formats d’image qui sont .pbm, .pgm et .ppm. Le développement doit se faire en Python 3.x.
Il doit permettre :
  1. d'ouvrir un fichier dans le logiciel et de l'afficher ;
  2. d'appliquer des transformations ;
  3. d'enregistrer le fichier image obtenu.
Récupérez l'archive du projet Projet_Traitement_Image_Initial.7z et la compléter en équipe !
Récupérer le tableau d'évaluation du projet avec les critères de notations : evaluation_des_projets.ods

Extension au cahier des charges : Club Astronomie

Il faut analyser des photographies du soleil afin de déterminer automatiquement le nombre de taches solaires.
Par exemple : La fonction doit être capable de renvoyer l'entier 10, pour l'image ci-contre fournie en argument.

Le jeu de photographies aux formats .pbm, .pgm, .ppm et .jpg, est à télécharger ici :
soleil.7z
soleil02.jpg