Cette page a été traduite par l'API Cloud Translation.
Switch to English

Image des modules complémentaires TensorFlow: opérations

Voir sur TensorFlow.org Exécuter dans Google Colab Afficher la source sur GitHub Télécharger le carnet

Aperçu

Ce cahier vous montrera comment utiliser certaines opérations d'image dans les modules complémentaires TensorFlow.

Voici la liste des opérations d'image que nous allons couvrir 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échargez 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 2us/step

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

png

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

png

Jouez avec tfa.image

Filtrage moyen

Le filtrage moyen est une technique de filtrage 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)

png

Tourner

Cette opération fait pivoter l'image donnée de l'angle (en radians) saisi par l'utilisateur.

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

png

Transformer

Cette opération transforme l'image donnée à partir 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)

png

HSV aléatoire dans YIQ

Cette opération change l'échelle de couleur d'une image RVB donnée en YIQ, mais ici la teinte delta et les valeurs 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)
/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

Ajuster HSV dans YIQ

Cette opération change 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)

png

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 offset (ici utilisé 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)

png

Transformation de distance euclidienne

Cette opération met à jour la valeur du pixel avec la distance euclidienne entre le pixel de premier plan et celui d'arrière-plan.

  • Remarque: cela prend uniquement une image binaire et entraîne 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')

png