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

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

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

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

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

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



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