Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Gambar Addons TensorFlow: Operasi

Lihat di TensorFlow.org Jalankan di Google Colab Lihat sumber di GitHub Unduh buku catatan

Gambaran

Notebook ini akan mendemonstrasikan cara menggunakan beberapa operasi gambar di Addons TensorFlow.

Berikut adalah daftar operasi gambar yang akan kami 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 gambarnya

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 2us/step

Periksa gambarnya

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)

png

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')

png

Bermain dengan tfa.image

Berarti penyaringan

Mean filtering adalah teknik penyaringan, yang sering digunakan untuk menghilangkan noise dari suatu gambar atau sinyal. Idenya adalah menjalankan gambar piksel demi piksel dan menggantinya dengan nilai rata-rata piksel tetangga.

mean = tfa.image.mean_filter2d(img, filter_shape=11)
_ = plt.imshow(mean)
.dll

png

Memutar

Operasi ini memutar gambar yang diberikan dengan sudut (dalam radian) yang dimasukkan oleh pengguna.

rotate = tfa.image.rotate(img, tf.constant(np.pi/8))
_ = plt.imshow(rotate)

png

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)

png

HSV acak di YIQ

Operasi ini mengubah skala warna gambar RGB yang diberikan menjadi YIQ, tetapi di sini nilai rona delta dan saturasi diambil 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)
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_addons/utils/resource_loader.py:103: UserWarning: You are currently using TensorFlow 2.3.0 and trying to load a custom op (custom_ops/image/_distort_image_ops.so).
TensorFlow Addons has compiled its custom ops against TensorFlow 2.2.0, and there are no compatibility guarantees between the two versions. 
This means that you might get segfaults when loading the custom op, or other kind of low-level errors.
 If you do, do not file an issue on Github. This is a known limitation.

It might help you to fallback to pure Python ops with TF_ADDONS_PY_OPS . To do that, see https://github.com/tensorflow/addons#gpucpu-custom-ops 

You can also change the TensorFlow version installed on your system. You would need a TensorFlow version equal to or above 2.2.0 and strictly below 2.3.0.
 Note that nightly versions of TensorFlow, as well as non-pip TensorFlow like `conda install tensorflow` or compiled from source are not supported.

The last solution is to find the TensorFlow Addons version that has custom ops compatible with the TensorFlow installed on your system. To do that, refer to the readme: https://github.com/tensorflow/addons
  UserWarning,

png

Sesuaikan HSV dalam YIQ

Operasi ini mengubah skala warna gambar RGB yang diberikan menjadi YIQ tetapi di sini alih-alih memilih secara acak, nilai rona delta 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)

png

Gambar Padat Warp

Operasi ini adalah untuk lengkungan non-linier gambar apa pun 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)

png

Transformasi Jarak Euclidian

Operasi ini memperbarui nilai piksel dengan jarak euclidian dari piksel latar depan ke latar belakang.

  • Catatan: Dibutuhkan hanya gambar biner dan menghasilkan gambar yang diubah. 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')

png