Voir sur TensorFlow.org | Exécuter dans Google Colab | Voir la source sur GitHub | Télécharger le cahier |
Aperçu
En vision par ordinateur, l'espace colorimétrique sélectionné pourrait avoir un impact significatif sur les performances du modèle. Bien que RGB
est le plus grand espace de couleur commun, dans des situations Manay le modèle fonctionne mieux lors du passage à des espaces de couleurs alternatives telles que YUV
, YCbCr
, XYZ (CIE)
, etc.
Le tensorflow-io
package fournit une liste des conversions d'espace couleur API qui peuvent être utilisés pour préparer et compléter les données d'image.
Installer
Installez les packages requis et redémarrez le runtime
pip install -q tensorflow-io
Télécharger l'exemple d'image
L'exemple d'image utilisé dans ce tutoriel est un chat dans la neige , mais il pourrait être remplacé par des images JPEG.
Ce qui suit télécharger l'image et l' enregistrer sur le disque local 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 235k 0 --:--:-- --:--:-- --:--:-- 235k 20 -rw-rw-r-- 1 kbuilder kokoro 17858 Oct 27 16:33 sample.jpg
Usage
Lire le fichier image
Lire et décoder l'image en une uint8
Tenseur de forme (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()
Convertir RVB en niveaux de gris
Un RGB
image peut être convertie en Grayscale
de tfio.experimental.color.rgb_to_grayscale
Grayscale
afin de 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'>
Convertir RVB en BGR
Certains logiciels d'image et de la caméra manufacturors pourraient préférer BGR
, qui peut être obtenu par 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'>
Convertir RVB en CIE XYZ
CIE XYZ
(ou CIE 1931 XYZ
est un espace de couleur commun utilisé dans de nombreux programmes de traitement d'image. Ce qui suit est la conversion de RVB à CIE XYZ
par tfio.experimental.color.rgb_to_xyz
. Remarque tfio.experimental.color.rgb_to_xyz
suppose l' entrée en virgule flottante dans la plage de [0, 1]
afin de pré-traitement supplémentaire est 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'>
Convertir RVB en YCbCr
Enfin, YCbCr
est l'espace de couleurs par défaut dans de nombreux systèmes vidéo. La conversion en YCbCr
pourrait se faire par 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'>
Ce qui est plus intéressant, cependant, est que YCbCr
pourrait être décomposé en Y'
(Luma), Cb
(de chroma bleu différence), et Cr
composants (de chroma rouge de différence) avec chaque carry composante information perceptive significative:
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()