Tensor FLow画像処理

画像のディープラーニングを実行するときに、写真の数が足りない場合や、ネットワークでさらに学習したい場合があります。このとき、既存の写真データを処理して新しい写真にすることができます。ネットワーク認識の精度を向上させる方法を学びます。

1.画像デコード表示

matplotライブラリを使用すると、jupyterで画像を簡単かつ簡潔に描画および出力できます。まず、tf.gfileを介して画像ファイルを開き、関数tf.image.decode_jpegを使用してjpeg画像を3ビットマトリックスにデコードします。次に、描画して画像情報を表示

import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np

#读取图像文件
image_raw=tf.gfile.GFile('D:\Temp\MachineLearning\data\cat.jpeg','rb').read()

with tf.Session() as sess:
    #对jpeg图像解码得到图像的三位矩阵数据
    image_data=tf.image.decode_jpeg(image_raw)
    print(image_data.eval())
    plt.imshow(image_data.eval())
    plt.show()

印刷された画像と表示された画像の3次元マトリックス情報を確認できます。

                            

2.画像​​ズーム

Tensorflowには、画像のサイズを拡大縮小するresize_imageなど、多くの画像処理関数も付属しています。最初のパラメーターは画像データソースを表し、2番目の配列はスケーリングされたサイズを表し、3番目の方法は使用されるスケーリング方法を表します。デフォルトの0は双一次補間法、1は最近傍内挿法、2は双三次法を表します補間法、3はピクセル領域補間法を表します。

    #对图片大小进行缩放
    image_resize=tf.image.resize_images(image_data,[500,500],method=0)
    #tensorflow处理后的图片是float32格式的,需要转化为uint8才能正确输出
    image_resize=np.asarray(image_resize.eval(),dtype='uint8')
    plt.imshow(image_resize)
    plt.show()

3.画像のトリミング

関数tf.image.resize_image_with_crop_or_padは、画像の元の比率を確保しながら、画像をトリミングまたは塗りつぶすことができます。

関数tf.image.random_cropは、中央ではなく画像をランダムに選択してトリミングします。

    #图片裁剪
    image_crop=tf.image.resize_image_with_crop_or_pad(image_data,500,500)
    plt.imshow(image_crop.eval())
    plt.show()
    #随机裁剪
    img_random=tf.image.random_crop(image_data,[300,300,3])
    plt.imshow(img_random.eval())
    plt.show()

                              

resize_image_with_crop_or_padの最初のパラメーターは画像リソースです。最後の2つのパラメーターは、トリミングされた画像のサイズです。元の画像がターゲット値より大きい場合、両側の余分な部分が切り取られます。画像がターゲット値より小さい場合、画像の左右など、黒で塗りつぶされますトリミングされ、上下が黒く塗りつぶされています。

random_cropの最初のパラメーターは画像リソースで、2番目のパラメーターは3桁のテンソルで、ターゲット画像のサイズを表します。

4.画像反転

この機能は、画像を上下左右に反転させるために使用でき、モデルトレーニング中に、元のサンプル画像を反転して、モデルトレーニングの新しい特徴値として入力できます。

    #上下翻转
    img_down=tf.image.flip_up_down(image_data)
    plt.imshow(img_down.eval())
    plt.show()
    
    #左右翻转
    img_left=tf.image.flip_left_right(image_data)
    plt.imshow(img_left.eval())
    plt.show()

5.コントラスト、明るさ、彩度を調整します

tf.image.adjust_contrastを使用して画像のコントラストを調整できます。パラメータが1より大きい場合は濃くなり、1未満の場合は明るくなることを意味します。

tf.image.random_contrastは、指定された範囲内でコントラストをすぐに調整できます

同様に、adjust_brightness、adjust_saturation、adjust_hue明るさ、彩度、色相を調整します

    #加深对比度
    img_deep=tf.image.adjust_contrast(image_data,2)
    plt.imshow(img_deep.eval())
    plt.show()
    #降低对比度
    img_fade=tf.image.adjust_contrast(image_data,0.5)
    plt.imshow(img_fade.eval())
    plt.show()
    #随机对比度
    img_contrast=tf.image.random_contrast(image_data,0.5,2)
    plt.imshow(img_contrast.eval())
    plt.show()

6. VGGネットワ​​ークの入力画像を処理する

Vggネットワークトレーニングで渡される画像パラメーターx_imgは、batch_sizeの単位の4次元データです。たとえば、20 32×32の3チャネル画像が渡され、データは[20,32,32,3]です。しかし、tensorflowの画像処理関数は、3次元の単一画像しか処理できません。したがって、split()関数を使用して20枚の画像を1つの[1,32,32,3]に分割し、reshape()関数を使用して3次元データ[32,32,3]に変換してから、画像処理を呼び出す必要があります。関数は画像を処理し、処理された画像を4次元に復元し、それを配列res_arrに入れて、元の20×32×32×3データのセットにスプライスします。

# 将一批batch_size张图片在第一维上切分为单张图片
img_arr=tf.split(x_img,batch_size,axis=0)
res_arr=[]
# 遍历每个图片对其进行处理
for img in img_arr:
    # 将单张四维的图片[1,32,32,3]处理成三维[32,32,3]
    img=tf.reshape(img,[32,32,3])
    # 对单张图片进行图像增强
    img_flip=tf.image.random_flip_left_right(img)     # 翻转图片
    img_bright=tf.image.random_brightness(img_flip,max_delta=63)    # 随机调整亮度
    img_contrast=tf.image.random_contrast(img_bright,lower=0.2, upper=1.8)  # 调整对比度
    # 将增强后的图片再变回原来的四维格式
    img=tf.reshape(img_contrast,[1,32,32,3])
    # 将每个处理后的图片放在一个数组
    res_arr.append(img)
# 将处理后的单个图片重新拼接在一起    
img_aug=tf.concat(res_arr,axis=0)
元の記事124件を公開 65のような 130,000 以上を 訪問

おすすめ

転載: blog.csdn.net/theVicTory/article/details/100621722