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:
Cài đặt
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)
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')
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)
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)
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)
HSV ngẫu nhiên 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 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)
Đ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)
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 chỉ đị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)
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')