הצג באתר 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)
צור גרסה בשחור לבן
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')
שחקו עם tfa.image
סינון ממוצע
סינון ממוצע הוא טכניקת סינון, אשר משמשת לעתים קרובות כדי להסיר רעש מתמונה או אות. הרעיון הוא לרוץ דרך התמונה פיקסל אחר פיקסל ולהחליף אותה בערכים הממוצעים של פיקסלים שכנים.
mean = tfa.image.mean_filter2d(img, filter_shape=11)
_ = plt.imshow(mean)
להתחלף
פעולה זו מסובבת את התמונה הנתונה לפי הזווית (ברדיאנים) שקלט המשתמש.
rotate = tfa.image.rotate(img, tf.constant(np.pi/8))
_ = plt.imshow(rotate)
שינוי צורה
פעולה זו הופכת את התמונה הנתונה על בסיס וקטור הטרנספורמציה שניתן על ידי המשתמש.
transform = tfa.image.transform(img, [1.0, 1.0, -250, 0.0, 1.0, 0.0, 0.0, 0.0])
_ = plt.imshow(transform)
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)
התאם 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)
עיוות תמונה צפופה
פעולה זו מיועדת לעיוות לא ליניארי של כל תמונה שצוינה על ידי שדה הזרימה של וקטור ההיסט (כאן משתמשים בערכים אקראיים למשל).
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)
טרנספורמציה של מרחק אוקלידי
פעולה זו מעדכנת את ערך הפיקסל עם המרחק האוקלידי מפיקסל הקדמי לרקע.
- הערה: זה לוקח רק תמונה בינארית והתוצאה היא תמונה שעברה טרנספורמציה. אם ניתנת תמונה אחרת זה מביא לתמונה עם ערך בודד
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')