Zobacz na TensorFlow.org | Uruchom w Google Colab | Wyświetl źródło na GitHub | Pobierz notatnik |
Przegląd
W widzeniu komputerowym wybrana przestrzeń barw może mieć znaczący wpływ na wydajność modelu. Podczas RGB
jest najczęstszą przestrzeni barw, w sytuacji manay modelowe skuteczniejszy przy włączaniu alternatywnych przestrzeni barw, takich jak YUV
, YCbCr
, XYZ (CIE)
, etc.
tensorflow-io
pakiet zawiera listę konwersji kolorów przestrzeń API, które można stosować do wytwarzania i zwiększenia danych obrazu.
Ustawiać
Zainstaluj wymagane pakiety i uruchom ponownie środowisko wykonawcze
pip install -q tensorflow-io
Pobierz przykładowy obraz
Przykładowy obraz użyte w tym tutorialu jest kot w śniegu , choć może to być zastąpione żadnymi obrazami JPEG.
Poniższy obraz będzie pobrać i zapisać na dysku lokalnym jako 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
Stosowanie
Przeczytaj plik obrazu
Odczytu i dekodowania obrazu w uint8
tensor kształtu (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'>
Obraz można wyświetlić za pomocą:
import matplotlib.pyplot as plt
plt.figure()
plt.imshow(image)
plt.axis('off')
plt.show()
Konwertuj RGB na skalę szarości
RGB
obraz może być przekształcony w Grayscale
w celu ograniczenia kanału od 3 do 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'>
Konwertuj RGB na BGR
Niektóre programy obraz i aparat manufacturors wolą BGR
, który może być uzyskany poprzez 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'>
Konwertuj RGB na CIE XYZ
CIE XYZ
(lub CIE 1931 XYZ
jest wspólna przestrzeń kolorów używana w wielu programach do przetwarzania obrazu. Poniżej znajduje się konwersji z RGB do CIE XYZ
przez tfio.experimental.color.rgb_to_xyz
. Uwaga tfio.experimental.color.rgb_to_xyz
zakłada wejście pływający punkt w przedziale [0, 1]
tak dodatkowa obróbka wstępna jest potrzebna:
# 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'>
Konwertuj RGB na YCbCr
Wreszcie, YCbCr
jest domyślna przestrzeń kolorów w wielu systemach wizyjnych. Konwersja do YCbCr
można zrobić poprzez 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'>
Co jest bardziej interesujące jest jednak to, że YCbCr
mogła być rozłożona na Y'
(luma), Cb
(niebiesko-różnica chroma) i Cr
(czerwono-różnica chroma) komponentów z każdego przeniesienia składnika dostrzegalnie znaczące informacje:
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()