Sehen Sie sich Keynotes, Produktsitzungen, Workshops und mehr in Google I / O an. Siehe Wiedergabeliste

Farbraumkonvertierungen

Ansicht auf TensorFlow.org In Google Colab ausführen Quelle auf GitHub anzeigen Notizbuch herunterladen

Überblick

In der Bildverarbeitung könnte der ausgewählte Farbraum die Leistung des Modells erheblich beeinträchtigen. Während RGB der häufigste Farbraum ist, bietet das Modell in vielen Situationen eine bessere Leistung, wenn auf alternative Farbräume wie YUV , YCbCr , XYZ (CIE) usw. umgeschaltet wird.

Das tensorflow-io Paket enthält eine Liste von Farbraumkonvertierungs-APIs, mit denen die Bilddaten vorbereitet und erweitert werden können.

Einrichten

Installieren Sie die erforderlichen Pakete und starten Sie die Laufzeit neu

pip install -q tensorflow-io

Laden Sie das Beispielbild herunter

Das in diesem Tutorial verwendete Bildbeispiel ist eine Katze im Schnee , obwohl es durch JPEG-Bilder ersetzt werden kann.

Im Folgenden wird das Image heruntergeladen und als sample.jpg auf der lokalen Festplatte 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

Verwendung

Bilddatei lesen

Lesen und dekodieren Sie das Bild in einen uint8 Tensor (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'>

Das Bild kann angezeigt werden durch:

import matplotlib.pyplot as plt

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

png

Konvertieren Sie RGB in Graustufen

Ein RGB Bild kann in Grayscale konvertiert werden, um den Kanal mit tfio.experimental.color.rgb_to_grayscale von 3 auf 1 zu 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

Konvertieren Sie RGB in BGR

Einige Hersteller von tfio.experimental.color.rgb_to_bgr und Kameras bevorzugen möglicherweise die BGR , die über 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

Konvertieren Sie RGB in CIE XYZ

CIE XYZ (oder CIE 1931 XYZ ist ein allgemeiner Farbraum, der in vielen Bildverarbeitungsprogrammen verwendet wird. Im Folgenden wird die Konvertierung von RGB zu CIE XYZ über tfio.experimental.color.rgb_to_xyz . Hinweis: tfio.experimental.color.rgb_to_xyz setzt eine Gleitkomma-Eingabe voraus im Bereich von [0, 1] daher eine zusätzliche Vorverarbeitung erforderlich:

# 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

Konvertieren Sie RGB in YCbCr

Schließlich ist YCbCr in vielen Videosystemen der Standardfarbraum. Die Konvertierung in YCbCr kann über 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

Interessanter ist jedoch, dass YCbCr in Y' (Luma), Cb (Blau-Differenz-Chroma) und Cr (Rot-Differenz-Chroma) Komponenten zerlegt werden kann, wobei jede Komponente wahrnehmungsrelevante Informationen enthält:

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