Konversi Ruang Warna

Lihat di TensorFlow.org Jalankan di Google Colab Lihat sumber di GitHub Unduh buku catatan

Ringkasan

Dalam visi komputer, ruang warna yang dipilih dapat memiliki kinerja model yang signifikan. Sementara RGB ruang yang paling umum warna, dalam situasi manay model performa lebih baik ketika beralih ke ruang warna alternatif seperti YUV , YCbCr , XYZ (CIE) , dll

The tensorflow-io paket menyediakan daftar warna API konversi ruang yang dapat digunakan untuk mempersiapkan dan meningkatkan data gambar.

Mempersiapkan

Instal Paket yang diperlukan, dan mulai ulang runtime

pip install -q tensorflow-io

Unduh contoh gambar

Contoh gambar yang digunakan dalam tutorial ini adalah kucing di salju , meskipun itu bisa digantikan oleh gambar JPEG.

Berikut akan men-download gambar dan simpan ke disk lokal sebagai 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

Penggunaan

Baca File Gambar

Baca dan decode gambar menjadi uint8 Tensor bentuk (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'>

Gambar dapat ditampilkan dengan:

import matplotlib.pyplot as plt

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

png

Mengonversi RGB ke Skala Abu-abu

Sebuah RGB gambar dapat dikonversi ke Grayscale untuk mengurangi saluran 3-1 dengan 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

Konversi RGB ke BGR

Beberapa perangkat lunak gambar dan kamera manufacturors mungkin lebih suka BGR , yang dapat diperoleh melalui 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

Mengonversi RGB ke CIE XYZ

CIE XYZ (atau CIE 1931 XYZ adalah ruang warna yang umum digunakan dalam banyak program pengolah gambar. Berikut ini adalah konversi dari RGB ke CIE XYZ melalui tfio.experimental.color.rgb_to_xyz . Catatan tfio.experimental.color.rgb_to_xyz mengasumsikan floating masukan titik di kisaran [0, 1] sehingga tambahan pre-processing yang dibutuhkan:

# 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

Mengonversi RGB ke YCbCr

Akhirnya, YCbCr adalah ruang warna default di banyak sistem video. Konversi ke YCbCr bisa dilakukan melalui 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

Yang lebih menarik, meskipun, adalah bahwa YCbCr dapat didekomposisi menjadi Y' (luma), Cb (biru-perbedaan kroma), dan Cr (merah-perbedaan chroma) komponen dengan masing-masing membawa komponen informasi perseptual bermakna:

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