Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Konversi Ruang Warna

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

Gambaran

Dalam computer vision, ruang warna yang dipilih dapat memiliki performa model yang signifikan. Meskipun RGB adalah ruang warna yang paling umum, dalam situasi manay, model bekerja lebih baik saat beralih ke ruang warna alternatif seperti YUV , YCbCr , XYZ (CIE) , dll.

Paket tensorflow-io menyediakan daftar API konversi ruang warna yang dapat digunakan untuk mempersiapkan dan menambah data gambar.

Mempersiapkan

Instal Paket yang diperlukan, dan mulai ulang runtime

pip install -q tensorflow-io

Unduh gambar contoh

Contoh gambar yang digunakan dalam tutorial ini adalah kucing di salju , meskipun bisa diganti dengan gambar JPEG.

Berikut ini adalah gambar yang akan diunduh dan disimpan 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   127k      0 --:--:-- --:--:-- --:--:--  127k
20 -rw-rw-r-- 1 kbuilder kokoro 17858 Aug  3 19:48 sample.jpg

Pemakaian

Baca File Gambar

Membaca dan mendekode gambar menjadi bentuk Tensor 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'>

Gambar dapat ditampilkan dengan:

import matplotlib.pyplot as plt

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

png

Ubah RGB ke Grayscale

Gambar RGB dapat diubah menjadi Grayscale untuk mengurangi saluran dari 3 menjadi 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

Ubah RGB ke BGR

Beberapa produsen perangkat lunak gambar dan kamera mungkin lebih menyukai 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

Ubah RGB ke CIE XYZ

CIE XYZ (atau CIE 1931 XYZ adalah ruang warna yang umum digunakan di 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 input floating point dalam kisaran [0, 1] jadi diperlukan pemrosesan awal tambahan:

# 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

Ubah RGB ke YCbCr

Terakhir, YCbCr adalah ruang warna default di banyak sistem video. Konversi ke YCbCr dapat 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, adalah bahwa YCbCr dapat didekomposisi menjadi YCbCr Y' (luma), Cb (blue-difference chroma), dan Cr (red-difference chroma) dengan masing-masing komponen membawa informasi yang bermakna secara perseptual:

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