Renk Alanı Dönüşümleri

TensorFlow.org'da görüntüleyin Google Colab'da çalıştırın Kaynağı GitHub'da görüntüleyin Not defterini indir

genel bakış

Bilgisayarla görmede, seçilen renk uzayı, modelin performansına önemli ölçüde sahip olabilir. Birlikte RGB modeli gerçekleştirir daha manay durumlarda en çok renk alanı olduğu gibi, alternatif renk uzayı geçildiğinde YUV , YCbCr , XYZ (CIE) , vs.

tensorflow-io paket görüntü verilerini hazırlayıp güçlendirmek için kullanılabilir renk alanı dönüşüm API'ler bir listesini sağlar.

Kurmak

Gerekli Paketleri kurun ve çalışma zamanını yeniden başlatın

pip install -q tensorflow-io

Örnek resmi indirin

Bu eğitimde kullanılan görüntü örneği olan karda kedi herhangi JPEG görüntüleri yerini olabilir gerçi.

Görüntüyü indirmek ve yerel diske kaydeder aşağıdaki 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

kullanım

Resim Dosyasını Oku

Okuma ve görüntüyü deşifre uint8 şeklinin tensör (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'>

Görüntü şu şekilde görüntülenebilir:

import matplotlib.pyplot as plt

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

png

RGB'yi Gri Tonlamaya Dönüştür

Bir RGB görüntü dönüştürülebilir Grayscale ile 1: 3 ile bir kanal azaltma 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'yi BGR'ye dönüştür

Bazı resim yazılım ve kamera manufacturors tercih edebilirsiniz BGR yoluyla elde edilebilir, 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'yi CIE XYZ'ye Dönüştür

CIE XYZ (veya CIE 1931 XYZ birçok görüntü işleme programlarında kullanılan yaygın bir renk alanıdır. Aşağıdaki RGB dönüşüm CIE XYZ aracılığıyla tfio.experimental.color.rgb_to_xyz . Not tfio.experimental.color.rgb_to_xyz kayan nokta girişi varsayar aralığında [0, 1] nedenle ek bir ön işleme tabi:

# 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'yi YCbCr'ye Dönüştür

Son olarak, YCbCr birçok video sistemlerinde varsayılan renk alanıdır. Dönüştürülüyor YCbCr yoluyla yapılabilir 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

Ne olsa, yani daha ilginç YCbCr ayrılabilirdi Y' (luma), Cb (mavi-fark kroma) ve Cr (kırmızı-fark kroma) her bir bileşen taşıma algısal anlamlı bilgiler ile bileşenler:

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