تبدیل فضای رنگ

مشاهده در TensorFlow.org در Google Colab اجرا شود مشاهده منبع در GitHub دانلود دفترچه یادداشت

بررسی اجمالی

در بینایی کامپیوتر، فضای رنگی انتخاب شده می تواند عملکرد قابل توجهی از مدل داشته باشد. در حالی که RGB بیشترین فضا رنگ مشترک، در شرایط manay انجام مدل بهتر است در هنگام تعویض به فضاهای رنگ های جایگزین مانند YUV ، YCbCr ، XYZ (CIE) ، و غیره

tensorflow-io بسته یک لیست از تبدیل فضای رنگی رابط های برنامه کاربردی است که می تواند مورد استفاده قرار گیرد برای آماده سازی و تقویت داده های تصویر را فراهم می کند.

برپایی

بسته های مورد نیاز را نصب کنید و زمان اجرا را مجددا راه اندازی کنید

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 را به Grayscale تبدیل کنید

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