Ngày Cộng đồng ML là ngày 9 tháng 11! Tham gia với chúng tôi để cập nhật từ TensorFlow, JAX, và nhiều hơn nữa Tìm hiểu thêm

TensorFlow Addons Hình ảnh: Hoạt động

Xem trên TensorFlow.org Chạy trong Google Colab Xem nguồn trên GitHub Tải xuống sổ ghi chép

Tổng quat

Sổ tay này sẽ trình bày cách sử dụng một số thao tác hình ảnh trong TensorFlow Addons.

Đây là danh sách các thao tác hình ảnh mà bạn sẽ đề cập trong ví dụ này:

Thiết lập

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

Chuẩn bị và Kiểm tra Hình ảnh

Tải xuống các hình ảnh

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

Kiểm tra hình ảnh

Biểu tượng 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

Tạo phiên bản đen trắng

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

Chơi với tfa.image

Lọc trung bình

Lọc trung bình là một kỹ thuật lọc, thường được sử dụng để loại bỏ nhiễu khỏi hình ảnh hoặc tín hiệu. Ý tưởng là chạy qua từng pixel hình ảnh và thay thế nó bằng các giá trị trung bình của các pixel lân cận.

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

png

Quay

Thao tác này xoay hình ảnh đã cho theo góc (tính bằng radian) do người dùng nhập vào.

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

png

Biến đổi

Thao tác này biến đổi hình ảnh đã cho trên cơ sở véc tơ biến đổi do người dùng đưa ra.

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 ngẫu nhiên trong YIQ

Thao tác này thay đổi thang màu của một hình ảnh RGB nhất định thành YIQ nhưng ở đây các giá trị màu đồng bằng và độ bão hòa được chọn ngẫu nhiên từ phạm vi nhất định.

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

Điều chỉnh HSV trong YIQ

Thao tác này thay đổi thang màu của hình ảnh RGB nhất định thành YIQ nhưng ở đây thay vì chọn ngẫu nhiên, các giá trị màu delta và độ bão hòa là đầu vào của người dùng.

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

Hình ảnh dày đặc Warp

Thao tác này dành cho độ cong không tuyến tính của bất kỳ hình ảnh nào được xác định bởi trường dòng của vectơ bù (ví dụ ở đây được sử dụng các giá trị ngẫu nhiên).

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

Biến đổi khoảng cách Euclidian

Thao tác này cập nhật giá trị pixel với khoảng cách euclidian từ pixel nền trước đến pixel nền.

  • Lưu ý: Nó chỉ lấy hình ảnh nhị phân và kết quả là hình ảnh được biến đổi. Nếu một hình ảnh khác được cung cấp, nó sẽ dẫn đến một hình ảnh có giá trị duy nhất
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