תמונת תוספות TensorFlow: פעולות

הצג באתר TensorFlow.org הפעל בגוגל קולאב צפה במקור ב-GitHub הורד מחברת

סקירה כללית

מחברת זו תדגים כיצד להשתמש בחלק מפעולות התמונה בתוספות TensorFlow.

להלן רשימת פעולות התמונה שתכסה בדוגמה זו:

להכין

pip install -q -U tensorflow-addons
import tensorflow as tf
import numpy as np
import tensorflow_addons as tfa
import matplotlib.pyplot as plt

הכן ובדוק תמונות

הורד את התמונות

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

בדוק את התמונות

סמל 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

צור גרסה בשחור לבן

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

שחקו עם tfa.image

סינון ממוצע

סינון ממוצע הוא טכניקת סינון, אשר משמשת לעתים קרובות כדי להסיר רעש מתמונה או אות. הרעיון הוא לרוץ דרך התמונה פיקסל אחר פיקסל ולהחליף אותה בערכים הממוצעים של פיקסלים שכנים.

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

png

להתחלף

פעולה זו מסובבת את התמונה הנתונה לפי הזווית (ברדיאנים) שקלט המשתמש.

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

png

שינוי צורה

פעולה זו הופכת את התמונה הנתונה על בסיס וקטור הטרנספורמציה שניתן על ידי המשתמש.

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 אקראי ב-YIQ

פעולה זו משנה את סולם הצבעים של תמונת RGB נתונה ל-YIQ אך כאן ערכי גוון דלתא ורוויה נבחרים באופן אקראי מהטווח הנתון.

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)

png

התאם HSV ב-YIQ

פעולה זו משנה את סולם הצבעים של תמונת RGB נתונה ל-YIQ אך כאן במקום לבחור באופן אקראי, ערכי גוון דלתא ורוויה הם קלט מהמשתמש.

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

עיוות תמונה צפופה

פעולה זו מיועדת לעיוות לא ליניארי של כל תמונה שצוינה על ידי שדה הזרימה של וקטור ההיסט (כאן משתמשים בערכים אקראיים למשל).

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

טרנספורמציה של מרחק אוקלידי

פעולה זו מעדכנת את ערך הפיקסל עם המרחק האוקלידי מפיקסל הקדמי לרקע.

  • הערה: זה לוקח רק תמונה בינארית והתוצאה היא תמונה שעברה טרנספורמציה. אם ניתנת תמונה אחרת זה מביא לתמונה עם ערך בודד
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