Преобразования цветового пространства

Посмотреть на TensorFlow.org Запускаем в Google Colab Посмотреть исходный код на GitHub Скачать блокнот

Обзор

В компьютерном зрении выбранное цветовое пространство может существенно повлиять на производительность модели. В то время как RGB , является наиболее распространенным цветовым пространство, в manay ситуаций модели работает лучше при переключении на альтернативные цветовые пространства , такие как YUV , YCbCr , XYZ (CIE) , и т.д.

tensorflow-io пакет содержит список цветового APIs пространства преобразования , которые могут быть использованы для подготовки и увеличения данных изображения.

Настраивать

Установите необходимые пакеты и перезапустите среду выполнения.

pip install -q tensorflow-io

Скачать образец изображения

Пример изображения , используемый в этом учебнике , это кот в снегу , хотя он может быть заменен на любые изображения JPEG.

Ниже будет загрузить изображение и сохранить на локальный диск в 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

использование

Чтение файла изображения

Чтение и декодировать изображение в uint8 тензорной формы (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'>

Изображение может отображаться:

import matplotlib.pyplot as plt

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

png

Преобразование RGB в оттенки серого

RGB - изображение может быть преобразовано в Grayscale для уменьшения канала от 3 до 1 с 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

Преобразование RGB в BGR

Некоторые программные изображения и камеры manufacturors могут предпочесть BGR , который может быть получен через 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

Преобразование RGB в CIE XYZ

CIE XYZ (или CIE 1931 XYZ , является общим цветовым пространством используется во многих программах обработки изображений. Ниже преобразование из RGB в CIE XYZ через tfio.experimental.color.rgb_to_xyz . Примечание tfio.experimental.color.rgb_to_xyz принимает входной сигнал с плавающей точкой в диапазоне [0, 1] так , дополнительная предварительная обработка необходима:

# 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

Преобразование RGB в YCbCr

Наконец, YCbCr цветовое пространство по умолчанию во многих видеосистем. Преобразование YCbCr может быть сделано через 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

Что более интересно, однако, является то, что YCbCr может быть разложен на Y' (яркостный), Cb (синяя разница цветности) и Cr (красная разница цветности) компоненты с каждым компонентом переноса перцептивна значимой информацией:

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