Imagem de complementos do TensorFlow: operações

Ver no TensorFlow.org Executar no Google Colab Ver fonte no GitHub Baixar caderno

Visão geral

Este notebook demonstrará como usar algumas operações de imagem nos complementos do TensorFlow.

Aqui está a lista de operações de imagem que você abordará neste exemplo:

Configurar

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

Prepare e inspecione imagens

Baixe as imagens

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

Inspecione as imagens

Ícone 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

Faça uma versão em preto e branco

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

Brinque com tfa.image

Filtragem média

A filtragem média é uma técnica de filtragem frequentemente usada para remover o ruído de uma imagem ou sinal. A ideia é percorrer a imagem pixel a pixel e substituí-la pelos valores médios dos pixels vizinhos.

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

png

Girar

Esta operação gira a imagem dada pelo ângulo (em radianos) inserido pelo usuário.

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

png

Transformar

Esta operação transforma a imagem fornecida com base no vetor de transformação fornecido pelo usuário.

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 aleatório no YIQ

Esta operação muda a escala de cores de uma determinada imagem RGB para YIQ, mas aqui o matiz delta e os valores de saturação são escolhidos aleatoriamente a partir de um determinado intervalo.

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

Ajuste HSV no YIQ

Esta operação muda a escala de cores de uma determinada imagem RGB para YIQ, mas aqui, em vez de escolher aleatoriamente, o matiz delta e os valores de saturação são entradas do usuário.

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

Densa distorção de imagem

Esta operação é para distorção não linear de qualquer imagem especificada pelo campo de fluxo do vetor de deslocamento (aqui usados ​​valores aleatórios, por exemplo).

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

Transformada de distância euclidiana

Esta operação atualiza o valor do pixel com a distância euclidiana do pixel do primeiro plano ao pixel do fundo.

  • Nota: Leva apenas imagem binária e resulta em imagem transformada. Se uma imagem diferente for fornecida, resultará em uma imagem com valor único
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