本文具体数据集与源代码可从我的GitHub地址获取
https://github.com/liuzuoping/Deep_Learning_note

数据预处理

编码处理

  • 以下代码示范对 JPEG 格式图像的解码处理
#--coding--:utf-8
import tensorflow as tf
import matplotlib.pyplot as plt

# 读取图像的原始数据
image_raw_data = tf.gfile.FastGFile('images/plate1.jpg', 'rb').read()


# 使用pyplot显示图像
def show(img_data):
    plt.imshow(img_data.eval())
    plt.show()


with tf.Session() as sess:
    # 将原始数据解码成多维矩阵
    img_data = tf.image.decode_jpeg(image_raw_data)
    print(img_data.eval())
    show(img_data)

    # 将图像的矩阵编码成图像并存入文件
    encoded_image = tf.image.encode_jpeg(img_data)
    with tf.gfile.GFile('preprocess/output.jpg', 'wb') as f:
        f.write(encoded_image.eval())

    # 将图像数据的类型转为实数类型,便于对图像进行处理
    img_data = tf.image.convert_image_dtype(img_data, dtype=tf.float32)

TensorFlow中的图像处理_tensorflow

大小调整

  • 以下代码都是在图像编码处理代码的基础下运行,省去了加载原始图像,定义会话等过程
# 用resize_images调整图像大小
# 第一个参数为原始图像
# 第二个参数为调整后的图像大小[new_height,new_width],跟旧版本分为两个参数不一样
# method参数给出了调整图像大小的算法
with tf.Session() as sess:
    # 将原始数据解码成多维矩阵
    img_data = tf.image.decode_jpeg(image_raw_data)
    #print(img_data.eval())
    print ("原始图像:")
    show(img_data)

    # 将图像的矩阵编码成图像并存入文件
    encoded_image = tf.image.encode_jpeg(img_data)
    with tf.gfile.GFile('preprocess/output.jpg', 'wb') as f:
        f.write(encoded_image.eval())

    # 将图像数据的类型转为实数类型,便于对图像进行处理
    img_data = tf.image.convert_image_dtype(img_data, dtype=tf.float32)
    resized = tf.image.resize_images(img_data, [300, 300], method=0)
    #print(resized.get_shape())  # 图像深度没有显式指定则为问号
    print ("裁剪后的图像:")
    show(resized)
    
    # 用resize_image_with_crop_or_pad调整图像大小
    # 第一个参数为原始图像
    # 第二个和第三个参数是调整后的图像大小,大于原图则填充,小于则裁剪居中部分
    croped = tf.image.resize_image_with_crop_or_pad(img_data, 200, 200)
    print ("通过resize_image_with_crop_or_pad处理后的图像,此图为裁剪后:")
    show(croped)
    padded = tf.image.resize_image_with_crop_or_pad(img_data, 500, 700)
    print ("通过resize_image_with_crop_or_pad处理后的图像,此图为填充后:")
    show(padded)
    
    # 用central_crop调整图像大小
    # 第一个参数是原始图像
    # 第二个参数为调整比例,是(0,1]的实数
    central_cropped = tf.image.central_crop(img_data, 0.5)
    print ("通过比例裁剪后的图像:")
    show(central_cropped)

TensorFlow中的图像处理_深度学习_02
TensorFlow中的图像处理_深度学习_03
TensorFlow中的图像处理_tensorflow_04
TensorFlow中的图像处理_Python机器学习与深度学习_05
TensorFlow中的图像处理_Python机器学习与深度学习_06

图像翻转

  • 以下代码示范了将图像进行上下翻转、左右翻转及沿对角线翻转
with tf.Session() as sess:
    # 将原始数据解码成多维矩阵
    img_data = tf.image.decode_jpeg(image_raw_data)
    #print(img_data.eval())
    print ("原始图像:")
    show(img_data)
    
    # 图像翻转
    flipped = tf.image.flip_up_down(img_data)  # 上下
    print ("上下翻转后:")
    show(flipped)
    flipped = tf.image.flip_left_right(img_data)  # 左右
    print ("左右翻转后:")
    show(flipped)
    transposed = tf.image.transpose_image(img_data)  # 对角线
    print ("沿对角线反转后: ")
    show(transposed)
    
    # 随机翻转图像
    flipped = tf.image.random_flip_up_down(img_data)  # 随机上下
    print ("随机上下翻转后:")
    show(flipped)
    flipped = tf.image.random_flip_left_right(img_data)  # 随机左右
    print ("随机左右翻转后:")
    show(flipped)

TensorFlow中的图像处理_深度学习_07
TensorFlow中的图像处理_Python机器学习与深度学习_08
TensorFlow中的图像处理_TensorFlow_09

色彩调整

图像的色彩调整有四方面:

  • 亮度
  • 对比度
  • 饱和度
  • 色相
with tf.Session() as sess:
    # 将原始数据解码成多维矩阵
    img_data = tf.image.decode_jpeg(image_raw_data)
    #print(img_data.eval())
    print ("原始图像:")
    show(img_data)

    # 调整图像的亮度
    adjusted = tf.image.adjust_brightness(img_data, 0.5)  # 将图像的亮度+0.5
    print ("将图像的亮度+0.5:")
    show(adjusted)
    adjusted = tf.image.random_brightness(
        img_data, max_delta=0.5)  # 在[-0.5,0.5]范围内随机调整图像亮度
    print ("在[-0.5,0.5]范围内随机调整图像亮度:")
    show(adjusted)
    
    # 调整图像的对比度
    adjusted = tf.image.adjust_contrast(img_data, -5)  # 将图像的对比度-5
    print ("将图像的对比度-5:")
    show(adjusted)
    adjusted = tf.image.adjust_contrast(img_data, 5)  # 将图像的对比度+5
    print ("将图像的对比度+5:")
    show(adjusted)
    adjusted = tf.image.random_contrast(img_data, lower=1, upper=5)  # 随机调整对比度
    
    # 调整图像的饱和度
    adjusted = tf.image.adjust_saturation(img_data, -5)  # 将饱和度-5
    print ("将饱和度-5:")
    show(adjusted)
    adjusted = tf.image.adjust_saturation(img_data, 5)  # 将饱和度+5
    print ("将饱和度+5:")
    show(adjusted)
    adjusted = tf.image.random_saturation(img_data, lower=1, upper=5)  # 随机调整饱和度
    
    # 调整图像的色相
    adjusted = tf.image.adjust_hue(img_data, 0.5)  # 将色相+0.5
    print ("将色相+0.5:")
    show(adjusted)
    adjusted = tf.image.random_hue(img_data, max_delta=0.5)  # 随机调整色相
    print ("随机调整色相:")
    show(adjusted)

TensorFlow中的图像处理_tensorflow_10
TensorFlow中的图像处理_python_11
TensorFlow中的图像处理_python_12
TensorFlow中的图像处理_python_13
TensorFlow中的图像处理_python_14

更多文章请关注《万象专栏》