本节内容提取自《TensorFlow实战Google深度学习框架》,为自己学习所感。
import tensorflow as tf#导入TensorFlow框架
1、来自实际问题的数据往往有很多格式和属性,于是TensorFlow采用名为TFRecord的数据存储格式来统一存储数据。
1.1、TFRecord文件中的数据通过tf.train.Example Protocol Buffer的格式存储的,具体代码请参考该书P170。
2、TensorFlow中的图像处理算法
2.1、图像编码处理算法
(1)将图像使用jpeg的格式解码从而得到图像对应的三维矩阵。解码后结果为一个张量。
img_data=tf.image.decode_jpeg(image_raw_data)
当然,为了追求效率,可以使用Python中的PIL库进行图片的解码工作,其用法在网上都有教程。
(2)要将得到的张量转成TensorFlow中的Tensor,以便传入TensorFlow的计算图。(如果不理解计算图,后面会上传)
img_data=tf.image.convert_image_dtype(img_data,dtype=tf.float32)
(3)神经网络的结点个数是固定的,所以要进行图像大小调整,下面给出四个样例。
resized=tf.image.resize_image(img_data,[300,300],method=0)
当method为0时,采用双线性插值算法(详细讲解参考http://en.wikipedia.org/wiki/Bilinear_interpolation)。
resized=tf.image.resize_image(img_data,[300,300],method=1)
当method为1时,采用最近邻居算法(详细参考http://en.wikipedia.org/wiki/Nearest-neighbor_interpolation)。
resized=tf.image.resize_image(img_data,[300,300],method=2)
当method为2时,采用双三次插值算法(详细参考
http://en.wikipedia.org/wiki/Bicubic_interpolation)。
resized=tf.image.resize_image(img_data,[300,300],method=3)
当method为3时,采用面积插值算法。
通过以上四种方法调整,得到一个大小300*300的图片。
(4)TensorFlow还提供了API对图像进行裁剪和填充,以下给出示例。
croped=tf.image.resize_image_with_crop_or_pad(img_data,1000,1000)
以上代码表示如果目标图像大于1000*1000,则自动 截取图像居中的部分。
padded=tf.image.resize_image_with_crop_or_pad(img_data,3000,3000)
以上代码表示如果目标图像小于3000*3000,则自动在图像周围全0填充(0在图片矩阵中表示黑色)。
2.2、图像翻转算法
(1)以下代码实现图像的上下翻转。
flipped=tf.image.flip_up_down(img_data)
(2)以下代码实现图像的左右翻转。
flipped=tf.image.flip_left_right(img_data)
(3)以下代码实现图像沿对角线翻转。
flipped=tf.image.transpose_image(img_data)
(4)以下代码实现以一定概率上下翻转图像。
flipped=tf.image.random_flip_up_down(img_data)
(5)以下代码实现以一定概率左右翻转图像。
flipped=tf.image.random_flip_left_right(img_data)
2.3、图像色彩调整算法
(1)以下代码实现调整图像的亮度。
adjusted=tf.image.adjust_brightness(img_data,-0.5)#-0.5为调整的亮度参数
(2)以下代码实现在[-max_delta,max_delta]的范围随机调整亮度。
adjusted=tf.image.random_brightness(img_data,max_delta)
(3)以下代码实现调整图像对比度。
adjusted=tf.image.adjust_contrast(img_data,-5)#-5为对比度参数
(4)以下代码实现在[lower,upper]的范围随机调整图像对比度。
adjusted=tf.image.random_contrast(img_data,lower,upper)
(5)以下代码实现调整图像色相。
adjusted=tf.image.adjust_hue(img_data,0.1)#0.1为色相参数
(6)以下代码实现在[-max_delta,max_delta]的范围随机调整图像色相。
adjusted=tf.image.random_hue(img_data,max_delta)#max_delta的取值在[0,0.5]之间
(7)以下代码实现调整图像饱和度。
adjusted=tf.image.adjust_saturation(img_data,-5)#-5为饱和度参数
(8)以下代码实现在[lower,upper]的范围随机调整饱和度。
adjusted=tf.image.random_saturation(img_data,lower,upper)
(9)以下代码实现图像标准化。(标准化就是将图像上的亮度均值变为0,方差变为1)
adjusted=tf.image.per_image_whitening(img_data)