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