Xem trên TensorFlow.org | Chạy trong Google Colab | Xem nguồn trên GitHub | Tải xuống sổ ghi chép |
Tổng quat
Trong thị giác máy tính, không gian màu đã chọn có thể có hiệu suất đáng kể của mô hình. Trong khi RGB
là không gian màu sắc phổ biến nhất, trong những tình huống Manay này thực hiện mô hình tốt hơn khi chuyển sang không gian màu thay thế như YUV
, YCbCr
, XYZ (CIE)
, vv
Các tensorflow-io
gói cung cấp một danh sách các màu chuyển đổi không gian API có thể được sử dụng để chuẩn bị và làm tăng thêm các dữ liệu hình ảnh.
Thành lập
Cài đặt các Gói bắt buộc và khởi động lại thời gian chạy
pip install -q tensorflow-io
Tải xuống hình ảnh mẫu
Hình ảnh ví dụ được sử dụng trong hướng dẫn này là một con mèo trong tuyết , mặc dù nó có thể được thay thế bằng bất kỳ hình ảnh JPEG.
Sau đây sẽ tải hình ảnh và lưu vào đĩa địa phương như 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
Cách sử dụng
Đọc tệp hình ảnh
Đọc và giải mã hình ảnh thành một uint8
tensor hình dạng (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'>
Hình ảnh có thể được hiển thị bằng:
import matplotlib.pyplot as plt
plt.figure()
plt.imshow(image)
plt.axis('off')
plt.show()
Chuyển đổi RGB sang thang độ xám
Một RGB
hình ảnh có thể được chuyển đổi sang Grayscale
để giảm kênh 3-1 với 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'>
Chuyển đổi RGB sang BGR
Một số phần mềm hình ảnh và máy ảnh manufacturors có thể thích BGR
, mà có thể thu được thông qua 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'>
Chuyển đổi RGB sang CIE XYZ
CIE XYZ
(hoặc CIE 1931 XYZ
là một không gian màu thông thường được sử dụng trong nhiều chương trình xử lý ảnh. Sau đây là việc chuyển đổi từ RGB để CIE XYZ
qua tfio.experimental.color.rgb_to_xyz
. Lưu ý tfio.experimental.color.rgb_to_xyz
giả định đầu vào dấu chấm động trong khoảng [0, 1]
để thêm tiền xử lý là cần thiết:
# 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'>
Chuyển đổi RGB sang YCbCr
Cuối cùng, YCbCr
là không gian màu mặc định trong nhiều hệ thống video. Chuyển đổi sang YCbCr
có thể được thực hiện thông qua 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'>
Điều thú vị hơn, mặc dù, là YCbCr
có thể được phân tách ra thành Y'
(luma), Cb
(màu xanh-chênh lệch chroma), và Cr
các thành phần với nhau carry thành phần thông tin perceptually ý nghĩa (đỏ-chênh lệch chroma):
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()