Archives du mot-clé images

Afficher une photo avec la bonne orientation dans MATLAB

Prenons trois photos d’un même objet prises avec trois orientations de l’appareil photo.
robot-1
robot-3
robot-2

La plupart des logiciels détectent automatiquement l’orientation de la photo et affiche l’objet dans sa position naturelle. Ce n’est pas le cas de MATLAB.

Nous allons donc voir comment afficher automatiquement une photo avec la bonne orientation dans MATLAB. Pour ce faire, nous nous intéresserons à des données complémentaires codées dans le fichier JPEG.

Affichage des photos avec MATLAB

Avec MATLAB, pour afficher une image stockée dans un fichier JPEG, on utilise les fonctions imread et image.

Voici le code MATLAB qui lit les fichiers et affiche les images 

filename = {'robot-1.JPG' 'robot-2.JPG' 'robot-3.JPG'};

figure

for n = 1:3
    X = imread(filename{n}, 'jpg');
    subplot(3,1,n)
    image(X)
    axis image off
end

Voici le résultat :
photos-matlab-1
L’orientation des photos n’est pas automatiquement prise en compte par MATLAB.

Les métadonnées EXIF

En plus de la photo en elle-même, l’appareil photo (ou le smartphone) enregistre d’autres informations dans le fichier JPEG. Ces informations sont connues sous le nom de métadonnées EXIF. Plus d’informations sur la page Wikipédia  Exchangeable image file format.

Pour accéder à ces informations avec MATLAB, on utilise la fonction imfinfo (ou la fonction exifread avec les anciennes versions de MATLAB).

Par exemple :

f = imfinfo('robot-1.JPG')

renvoi :

f =

            Filename: 'C:\Users\Jerome\Desktop\robot-1.JPG'
         FileModDate: '04-May-2016 14:14:26'
            FileSize: 92456
              Format: 'jpg'
       FormatVersion: ''
               Width: 640
              Height: 480
            BitDepth: 24
           ColorType: 'truecolor'
     FormatSignature: ''
     NumberOfSamples: 3
        CodingMethod: 'Huffman'
       CodingProcess: 'Sequential'
             Comment: {}
                Make: 'Panasonic'
               Model: 'DMC-FZ18'
         Orientation: 1
         XResolution: 72
         YResolution: 72
      ResolutionUnit: 'Inch'
            Software: 'Ver.1.0  '
            DateTime: '2016:05:04 14:14:26'
    YCbCrPositioning: 'Co-sited'
       DigitalCamera: [1x1 struct]
         UnknownTags: [2x1 struct]
       ExifThumbnail: [1x1 struct]

On remarque la métadonnées Orientation qui, comme son nom l’indique, stocke l’orientation de l’appareil lors de la prise de vue. Ce champs prend une valeur entre 1 et 8 selon la liste suivante :

  • 1 = Horizontal (normal)
  • 2 = Mirror horizontal
  • 3 = Rotate 180
  • 4 = Mirror vertical
  • 5 = Mirror horizontal and rotate 270 CW
  • 6 = Rotate 90 CW
  • 7 = Mirror horizontal and rotate 90 CW
  • 8 = Rotate 270 CW

Les valeurs qui nous intéressent ici sont 1, 6 et 8.

Prise en compte automatique de l’orientation des photos

Vous l’aurez maintenant compris, il faut donc utiliser imfinfo en plus des fonctions imread et image.

Voici le code :

filename = {'robot-1.JPG' 'robot-2.JPG' 'robot-3.JPG'};
figure

for n = 1:3

    X = imread(filename{n}, 'jpg');
    f = imfinfo(filename{n});
    subplot(3,1,n)
    if f.Orientation == 1
        image(X)
    elseif f.Orientation == 6
        X = rot90(X, -1);
        image(X)
    elseif f.Orientation == 8
        X = rot90(X, 1);
        image(X)
    end
    axis image off
end

Ce qui donne :
photos-matlab-2
L’orientation de chaque photo est maintenant bien prise en compte par MATLAB.

Conclusion

Vous savez maintenant comment afficher automatiquement vos photos avec la bonne orientation dans MATLAB en utilisant imfinfo.

Vous trouverez sans doute d’autres informations utiles dans les métadonnées EXIF, n’hésitez pas à partager vos expériences en commentaire de ce billet.

Rien ne vaut une image

Même si nombreux sont ceux qui considèrent que les graphiques sous MATLAB sont austères, on peut quand même arriver à en améliorer le rendu avec un peu de personnalisation.

Plutôt qu’un long discours, je vous renvoie vers mes premières galeries d’images générées avec MATLAB :

Voici quelques exemples tirés de ces deux galeries :






D’autres galeries suivront, vous en trouverez la liste sur mon site dans la section Portfolio.

Bon visionnage
:cool: