Obrigado por sintonizar o Google I/O. Veja todas as sessões sob demanda Assista sob demanda

Conversões de espaço de cor

Veja no TensorFlow.org Executar no Google Colab Ver fonte no GitHub Baixar caderno

Visão geral

Na visão computacional, o espaço de cores selecionado pode ter um desempenho significativo do modelo. Enquanto RGB é o espaço de cores mais comum, em situações manay executa o modelo melhor quando se muda a cor espaços alternativos tais como YUV , YCbCr , XYZ (CIE) , etc.

O tensorflow-io pacote fornece uma lista de cores APIs conversões espaciais que podem ser usados para preparar e aumentar os dados de imagem.

Configurar

Instale os pacotes necessários e reinicie o tempo de execução

pip install -q tensorflow-io

Baixe a imagem de amostra

O exemplo a imagem usada neste tutorial é um gato na neve , apesar de que poderia ser substituído por qualquer imagens JPEG.

A seguir irá baixar a imagem e salvar no 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

Ler arquivo de imagem

Ler e descodificar a imagem para um 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'>

A imagem pode ser exibida por:

import matplotlib.pyplot as plt

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

png

Converter RGB em tons de cinza

Uma RGB imagem pode ser convertida em Grayscale para reduzir o canal 3-1 com 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

Converter RGB em BGR

Alguns softwares de imagem e câmera manufacturors pode preferir BGR , que pode ser obtido atravé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

Converter RGB em CIE XYZ

CIE XYZ (ou CIE 1931 XYZ é um espaço de cor comum utilizado em muitos programas de processamento de imagem. O que se segue é a conversão de RGB para CIE XYZ através tfio.experimental.color.rgb_to_xyz . Nota tfio.experimental.color.rgb_to_xyz assume entrada ponto flutuante no intervalo de [0, 1] é necessário pré-processamento de modo 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

Converter RGB em YCbCr

Finalmente, YCbCr é o espaço de cor padrão em muitos sistemas de vídeo. Convertendo para YCbCr poderia ser feito atravé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

O que é mais interessante, contudo, é que YCbCr pode ser decomposto em Y' (luminância), Cb (azul-croma diferença), e Cr componentes com cada componente transportar informação perceptualmente significativas (-diferença vermelho croma):

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