Ver en TensorFlow.org | Ejecutar en Google Colab | Ver fuente en GitHub | Descargar cuaderno |
Descripción general
En visión por computadora, el espacio de color seleccionado podría tener un desempeño significativo en el modelo. Mientras RGB
es el espacio más de color común, en situaciones manay las preformas modelo mejor cuando se cambia a espacios de color alternativos, tales como YUV
, YCbCr
, XYZ (CIE)
, etc.
El tensorflow-io
paquete proporciona una lista de las API de conversiones de espacio de color que se pueden utilizar para preparar y aumentar los datos de imagen.
Configuración
Instale los paquetes necesarios y reinicie el tiempo de ejecución
pip install -q tensorflow-io
Descarga la imagen de muestra
El ejemplo de imagen utilizado en este tutorial es un gato en la nieve , a pesar de que podría ser sustituido por cualquier imagen JPEG.
La siguiente será descargar la imagen y guardar en el disco local como 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
Uso
Leer archivo de imagen
Lee y decodificar la imagen en un uint8
Tensor de forma (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'>
La imagen se puede mostrar mediante:
import matplotlib.pyplot as plt
plt.figure()
plt.imshow(image)
plt.axis('off')
plt.show()
Convertir RGB a escala de grises
Un RGB
imagen se puede convertir a Grayscale
para reducir el canal de 3 a 1 con 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'>
Convierte RGB a BGR
Algunos manufacturors software de imagen y cámaras podrían preferir BGR
, que se puede obtener a través 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'>
Convierta RGB a CIE XYZ
CIE XYZ
(o CIE 1931 XYZ
es un espacio de color común utilizado en muchos programas de procesamiento de imágenes. La siguiente es la conversión de RGB a CIE XYZ
a través tfio.experimental.color.rgb_to_xyz
. Nota tfio.experimental.color.rgb_to_xyz
asume de entrada en coma flotante en el rango de [0, 1]
se necesita pre-procesamiento de manera adicional:
# 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'>
Convierta RGB a YCbCr
Por último, YCbCr
es el espacio de color por defecto en muchos sistemas de vídeo. La conversión a YCbCr
se podría hacer a través 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'>
Lo que es más interesante, sin embargo, es que YCbCr
podría ser descompuesto en Y'
(luma), Cb
(azul-diferencia croma) y Cr
(rojo-diferencia croma) componentes entre acarreo componente de información perceptualmente significativa:
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()