Lihat di TensorFlow.org | Jalankan di Google Colab | Lihat sumber di GitHub | Unduh buku catatan |
Gambaran
Notebook ini akan menunjukkan cara menggunakan beberapa operasi gambar di Addons TensorFlow.
Berikut adalah daftar operasi gambar yang akan Anda bahas dalam contoh ini:
Mempersiapkan
pip install -q -U tensorflow-addons
import tensorflow as tf
import numpy as np
import tensorflow_addons as tfa
import matplotlib.pyplot as plt
Siapkan dan Periksa Gambar
Unduh gambar
img_path = tf.keras.utils.get_file('tensorflow.png','https://tensorflow.org/images/tf_logo.png')
Downloading data from https://tensorflow.org/images/tf_logo.png 40960/39781 [==============================] - 0s 3us/step
Periksa gambar
Ikon TensorFlow
img_raw = tf.io.read_file(img_path)
img = tf.io.decode_image(img_raw)
img = tf.image.convert_image_dtype(img, tf.float32)
img = tf.image.resize(img, [500,500])
plt.title("TensorFlow Logo with shape {}".format(img.shape))
_ = plt.imshow(img)
Buat versi hitam putih
bw_img = 1.0 - tf.image.rgb_to_grayscale(img)
plt.title("Mask image with shape {}".format(bw_img.shape))
_ = plt.imshow(bw_img[...,0], cmap='gray')
Mainkan dengan tfa.image
Penyaringan rata-rata
Mean filtering adalah teknik filtering, yang sering digunakan untuk menghilangkan noise dari sebuah gambar atau sinyal. Idenya adalah untuk menelusuri piksel gambar demi piksel dan menggantinya dengan nilai rata-rata piksel tetangga.
mean = tfa.image.mean_filter2d(img, filter_shape=11)
_ = plt.imshow(mean)
Memutar
Operasi ini memutar gambar yang diberikan oleh input sudut (dalam radian) oleh pengguna.
rotate = tfa.image.rotate(img, tf.constant(np.pi/8))
_ = plt.imshow(rotate)
Mengubah
Operasi ini mengubah gambar yang diberikan berdasarkan vektor transformasi yang diberikan oleh pengguna.
transform = tfa.image.transform(img, [1.0, 1.0, -250, 0.0, 1.0, 0.0, 0.0, 0.0])
_ = plt.imshow(transform)
HSV acak di YIQ
Operasi ini mengubah skala warna dari gambar RGB yang diberikan ke YIQ tetapi di sini delta hue dan nilai saturasi dipilih secara acak dari rentang yang diberikan.
delta = 0.5
lower_saturation = 0.1
upper_saturation = 0.9
lower_value = 0.2
upper_value = 0.8
rand_hsvinyiq = tfa.image.random_hsv_in_yiq(img, delta, lower_saturation, upper_saturation, lower_value, upper_value)
_ = plt.imshow(rand_hsvinyiq)
Sesuaikan HSV di YIQ
Operasi ini mengubah skala warna dari gambar RGB yang diberikan ke YIQ tetapi di sini alih-alih memilih secara acak, nilai delta hue dan saturasi adalah input dari pengguna.
delta = 0.5
saturation = 0.3
value = 0.6
adj_hsvinyiq = tfa.image.adjust_hsv_in_yiq(img, delta, saturation, value)
_ = plt.imshow(adj_hsvinyiq)
Warp Gambar Padat
Operasi ini untuk warp non-linear dari setiap gambar yang ditentukan oleh bidang aliran vektor offset (di sini digunakan nilai acak misalnya).
input_img = tf.image.convert_image_dtype(tf.expand_dims(img, 0), tf.dtypes.float32)
flow_shape = [1, input_img.shape[1], input_img.shape[2], 2]
init_flows = np.float32(np.random.normal(size=flow_shape) * 2.0)
dense_img_warp = tfa.image.dense_image_warp(input_img, init_flows)
dense_img_warp = tf.squeeze(dense_img_warp, 0)
_ = plt.imshow(dense_img_warp)
Transformasi Jarak Euclidian
Operasi ini memperbarui nilai piksel dengan jarak euclidian dari piksel latar depan ke piksel latar belakang.
- Catatan : Dibutuhkan hanya citra biner dan menghasilkan citra yang ditransformasi. Jika gambar yang berbeda diberikan, itu menghasilkan gambar dengan nilai tunggal
gray = tf.image.convert_image_dtype(bw_img,tf.uint8)
# The op expects a batch of images, so add a batch dimension
gray = tf.expand_dims(gray, 0)
eucid = tfa.image.euclidean_dist_transform(gray)
eucid = tf.squeeze(eucid, (0, -1))
_ = plt.imshow(eucid, cmap='gray')