Conversiones de espacio de color

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()

png

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'>

png

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'>

png

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'>

png

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'>

png

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()

png

png

png