Conversioni dello spazio colore

Visualizza su TensorFlow.org Esegui in Google Colab Visualizza l'origine su GitHub Scarica quaderno

Panoramica

Nella visione artificiale, lo spazio colore selezionato potrebbe avere una resa significativa del modello. Mentre RGB è più spazio colore comune, in situazioni Manay del modello esegue meglio quando si passa a spazi colore alternativi come YUV , YCbCr , XYZ (CIE) , etc.

Il tensorflow-io pacchetto fornisce un elenco di conversione spazio-colore API che possono essere usati per preparare e aumentare i dati di immagine.

Impostare

Installa i pacchetti richiesti e riavvia il runtime

pip install -q tensorflow-io

Scarica l'immagine di esempio

L'esempio immagine utilizzata in questo tutorial è un gatto in mezzo alla neve , anche se potrebbe essere sostituito da qualsiasi immagine JPEG.

Di seguito si scarica l'immagine e salvarla sul disco locale come 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

utilizzo

Leggi file immagine

Lettura e decodifica l'immagine in un uint8 Tensor di 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'>

L'immagine può essere visualizzata da:

import matplotlib.pyplot as plt

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

png

Converti RGB in scala di grigi

Un RGB dell'immagine può essere convertita in Grayscale per ridurre il canale da 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

Converti RGB in BGR

Alcuni software immagine e la fotocamera manufacturors potrebbero preferire BGR , che può essere ottenuto attraverso 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

Converti RGB in CIE XYZ

CIE XYZ (o CIE 1931 XYZ è uno spazio colore comune utilizzato in molti programmi di elaborazione delle immagini. La seguente è la conversione da RGB a CIE XYZ attraverso tfio.experimental.color.rgb_to_xyz . Nota tfio.experimental.color.rgb_to_xyz assume ingresso virgola mobile nell'intervallo [0, 1] è necessaria così ulteriore pretrattamento:

# 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

Converti RGB in YCbCr

Infine, YCbCr è lo spazio colore predefinito in molti sistemi video. Conversione in YCbCr potrebbe essere fatto attraverso 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

Ciò che è più interessante, però, è che YCbCr potrebbe essere scomposto in Y' (luma), Cb (blu-differenza chroma) e Cr (rosso-differenza chroma) componenti tra riporto componente informazioni percettivamente 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()

png

png

png