Cette page a été traduite par l'API Cloud Translation.
Switch to English

Conversions d'espace colorimétrique

Voir sur TensorFlow.org Exécuter dans Google Colab Afficher la source sur GitHub Télécharger le carnet

Aperçu

En vision par ordinateur, l'espace colorimétrique sélectionné pourrait avoir un effet significatif sur les performances du modèle. Bien que RGB soit l'espace colorimétrique le plus courant, dans les situations manuelles, le modèle fonctionne mieux lors du passage à des espaces colorimétriques alternatifs tels que YUV , YCbCr , XYZ (CIE) , etc.

Le tensorflow-io fournit une liste d'API de conversion d'espace colorimétrique pouvant être utilisées pour préparer et augmenter les données d'image.

Installer

Installez les packages requis et redémarrez le runtime

pip install -q tensorflow-io

Téléchargez l'image d'exemple

L'exemple d'image utilisé dans ce didacticiel est un chat dans la neige , bien qu'il puisse être remplacé par n'importe quelle image JPEG.

Ce qui suit téléchargera l'image et l'enregistrera sur le disque local sous le nom sample.jpg :

!curl -o sample.jpg -L https://storage.googleapis.com/download.tensorflow.org/example_images/320px-Felis_catus-cat_on_snow.jpg

!ls -ls sample.jpg
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 17858  100 17858    0     0   127k      0 --:--:-- --:--:-- --:--:--  127k
20 -rw-rw-r-- 1 kbuilder kokoro 17858 Aug  3 19:48 sample.jpg

Usage

Lire le fichier image

Lire et décoder l'image en un uint8 Tensor of shape (213, 320, 3)

import tensorflow as tf
import tensorflow_io as tfio

image = tf.image.decode_jpeg(tf.io.read_file('sample.jpg'))

print(image.shape, image.dtype)
(213, 320, 3) <dtype: 'uint8'>

L'image peut être affichée par:

import matplotlib.pyplot as plt

plt.figure()
plt.imshow(image)
plt.axis('off')
plt.show()

png

Convertir RVB en niveaux de gris

Une image RGB peut être convertie en Grayscale de Grayscale pour réduire le canal de 3 à 1 avec tfio.experimental.color.rgb_to_grayscale :

grayscale = tfio.experimental.color.rgb_to_grayscale(image)

print(grayscale.shape, grayscale.dtype)

# use tf.squeeze to remove last channel for plt.imshow to display:
plt.figure()
plt.imshow(tf.squeeze(grayscale, axis=-1), cmap='gray')
plt.axis('off')
plt.show()
(213, 320, 1) <dtype: 'uint8'>

png

Convertir RVB en BGR

Certains fabricants de logiciels d'image et d'appareils photo peuvent préférer BGR , qui peut être obtenu via tfio.experimental.color.rgb_to_bgr :

bgr = tfio.experimental.color.rgb_to_bgr(image)

print(bgr.shape, bgr.dtype)

plt.figure()
plt.imshow(bgr)
plt.axis('off')
plt.show()
(213, 320, 3) <dtype: 'uint8'>

png

Convertir RVB en CIE XYZ

CIE XYZ (ou CIE 1931 XYZ est un espace colorimétrique courant utilisé dans de nombreux programmes de traitement d'image. Voici la conversion de RVB en CIE XYZ via tfio.experimental.color.rgb_to_xyz . Remarque tfio.experimental.color.rgb_to_xyz suppose une entrée en virgule flottante dans la plage de [0, 1] , un prétraitement supplémentaire est donc nécessaire:

# convert to float32
image_float32 = tf.cast(image, tf.float32) / 255.0

xyz_float32 = tfio.experimental.color.rgb_to_xyz(image_float32)

# convert back uint8
xyz = tf.cast(xyz_float32 * 255.0, tf.uint8)

print(xyz.shape, xyz.dtype)

plt.figure()
plt.imshow(xyz)
plt.axis('off')
plt.show()
(213, 320, 3) <dtype: 'uint8'>

png

Convertir RVB en YCbCr

Enfin, YCbCr est l'espace colorimétrique par défaut dans de nombreux systèmes vidéo. La conversion en YCbCr peut être effectuée via tfio.experimental.color.rgb_to_ycbcr :

ycbcr = tfio.experimental.color.rgb_to_ycbcr(image)

print(ycbcr.shape, ycbcr.dtype)

plt.figure()
plt.imshow(ycbcr, cmap='gray')
plt.axis('off')
plt.show()
(213, 320, 3) <dtype: 'uint8'>

png

Ce qui est plus intéressant, cependant, c'est que YCbCr pourrait être décomposé en composants Y' (luma), Cb (chroma différence bleue) et Cr (chroma différence rouge) avec chaque composant transportant des informations perceptuellement significatives:

y, cb, cr = ycbcr[:,:,0], ycbcr[:,:,1], ycbcr[:,:,2]

# Y' component
plt.figure()
plt.imshow(y, cmap='gray')
plt.axis('off')
plt.show()

# Cb component
plt.figure()
plt.imshow(cb, cmap='gray')
plt.axis('off')
plt.show()

# Cr component
plt.figure()
plt.imshow(cr, cmap='gray')
plt.axis('off')
plt.show()

png

png

png