Voir sur TensorFlow.org | Exécuter dans Google Colab | Voir la source sur GitHub | Télécharger le cahier |
Aperçu
Ce bloc-notes montrera comment utiliser certaines opérations d'image dans les modules complémentaires TensorFlow.
Voici la liste des opérations d'image que vous couvrirez dans cet exemple :
Installer
pip install -q -U tensorflow-addons
import tensorflow as tf
import numpy as np
import tensorflow_addons as tfa
import matplotlib.pyplot as plt
Préparer et inspecter les images
Télécharger les images
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
Inspecter les images
Icône 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)
Faire une version noir et blanc
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')
Jouez avec tfa.image
Filtrage moyen
Le filtrage moyen est une technique de filtrage, qui est souvent utilisée pour supprimer le bruit d'une image ou d'un signal. L'idée est de parcourir l'image pixel par pixel et de la remplacer par les valeurs moyennes des pixels voisins.
mean = tfa.image.mean_filter2d(img, filter_shape=11)
_ = plt.imshow(mean)
Tourner
Cette opération fait pivoter l'image donnée selon l'angle (en radians) saisi par l'utilisateur.
rotate = tfa.image.rotate(img, tf.constant(np.pi/8))
_ = plt.imshow(rotate)
Transformer
Cette opération transforme l'image donnée sur la base du vecteur de transformation donné par l'utilisateur.
transform = tfa.image.transform(img, [1.0, 1.0, -250, 0.0, 1.0, 0.0, 0.0, 0.0])
_ = plt.imshow(transform)
HSV aléatoire dans YIQ
Cette opération modifie l'échelle de couleurs d'une image RVB donnée en YIQ, mais ici les valeurs de teinte delta et de saturation sont choisies au hasard dans la plage donnée.
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)
Ajuster HSV dans YIQ
Cette opération modifie l'échelle de couleurs d'une image RVB donnée en YIQ, mais ici, au lieu de choisir au hasard, les valeurs de teinte delta et de saturation sont des entrées de l'utilisateur.
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)
Déformation d'image dense
Cette opération est pour la déformation non linéaire de toute image spécifiée par le champ de flux du vecteur de décalage (ici on utilise des valeurs aléatoires par exemple).
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)
Transformée de distance euclidienne
Cette opération met à jour la valeur du pixel avec la distance euclidienne du pixel du premier plan à celui de l'arrière-plan.
- Remarque : il ne prend qu'une image binaire et donne une image transformée. Si une image différente est donnée, il en résulte une image avec une valeur unique
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')