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