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 un 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.

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 Explications Résultat
.pbm
pour
« Portable Bit Map »
P1
6
3
0 0 0 1 1 1
1 1 1 1 0 0
0 0 0 1 1 1
La première ligne code le format de l’image P1 correspond à .pbm.
La deuxième ligne donne le nombre de colonne.
La troisième ligne donne le nombre de ligne.
Les lignes suivantes contiennent des valeurs codant chaque pixel de l’image :
1 (noir) ou 0 (blanc).
.pgm
pour
« Portable Grey Map »
P2
5
3
255
0 50 100 150 200
0 0 50 100 150
50 0 0 50 100
La première ligne contient le format de l’image P2 pour .pgm.
La deuxième ligne donne le nombre de colonne.
La troisième ligne donne le nombre de ligne.
La quatrième ligne contient la valeur maximale pour l’échelle de teinte.
Les lignes suivantes contiennent des valeurs codant chaque pixel de l’image :
0 (noir) et 255 (blanc).
.ppm
pour
« Portable Pix Map »
P3
3
3
255
255 255 0 255 0 0 255 255 255
0 255 255 0 255 0 125 125 125
255 0 255 0 0 255 0 0 0
La première ligne contient le format de l’image P3 pour .ppm.
La deuxième ligne donne le nombre de colonne.
La troisième ligne donne le nombre de ligne.
La quatrième ligne contient la valeur maximale pour l’échelle de teinte.
Les lignes suivantes contiennent des valeurs codant 3 par 3 pour un pixel.
Ces trois valeurs comprises entre 0 et 255 indiquent respectivement la quantité
de rouge, de vert et de bleu du pixel.
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. L’environnement de développement est 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.
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