tensorflow入门之---------图像大小调整

版权声明:本博客内原创文章禁止转载 https://blog.csdn.net/qq_32466233/article/details/81116613

在深度学习的过程中,往往对输入图像的大小需要进行一个调整,特别是对于拥有全连接层的神经网络,因为全连接层的节点数是固定的。因此,为了满足全连接层的一个输入的要求,我们可以利用tensorflow自带的函数来进行图像大小的调整。

总体来说一共有三个函数。原始图像大小为1242*375.

一、tf.image.resize_images(image,shape,method)

一共有三个参数,第一个是原始图像,第二个是重采样目标影像大小,第三个是重采样的方法。双线性插值算法(Bilinear interpolation);Method取值为:0;最近邻居法(Nearest  neighbor interpolation);Method取值为:1;双三次插值法(Bicubic interpolation);Method取值为:2;

这个函数是通过插值的方式实现图像的大小变换,包括最近邻插值,双线性插值,双三次插值等。

双线性插值图像变小
双线性插值图像变大

二、tf.image.resize_image_with_crop_or_pad(image,IMG_W,IMG_H)

一共有三个参数,分别是原始图像,目标图像的宽,目标图像的高。

这个函数不是通过插值改变图像大小,而是直接通过裁剪和填充。这么做的好处就是不会让图像看上去又明显的畸变,但是会使得原始图像不完整。

cropping
padding

三、tf.image.central_crop(image,rate)

这个函数一共有两个参数,一个是原始图像,另一个是原始图像调整的比例。注意,这种算法rate只能在0-1之间,否则会出现错误。

raise ValueError('central_fraction must be within (0, 1]')

ValueError: central_fraction must be within (0, 1]

这个函数是对原始图像整体的比例进行调整。实际上,有点类似于第二个函数,在缩小的时候实际上是采用了类似于裁剪的方法,图片中的部分物体是被裁剪掉的。

所有实验的源代码如下: 

# -*- coding: utf-8 -*-
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt#这个可以用来
"""
Created on Thu Jul 19 15:42:38 2018

@author: Lenovo
"""
IMG_W1 = 208  # resize图像,太大的话训练时间久
IMG_H1 = 208
IMG_W2=2000
IMG_H2=2000
BATCH_SIZE = 2

picdir1 = 'E:/Study/研究生文档/密集匹配程序/train/image_2/000000_10.png'

image_raw=tf.gfile.GFile(picdir1,'rb').read()
image_raw = tf.image.decode_png(image_raw)

with tf.Session() as sess:
      plt.imshow(image_raw.eval())
      plt.show()
     #第一种方法,采用resize函数,采用双线性插值
      img_resized1 = tf.image.resize_images(image_raw, [100,800],method=0) 
      img_resized1 = np.asarray(img_resized1.eval(),dtype='uint8')
      plt.imshow(img_resized1)
      plt.show()
      
      img_resized1 = tf.image.resize_images(image_raw, [900,2700],method=0) 
      img_resized1 = np.asarray(img_resized1.eval(),dtype='uint8')
      plt.imshow(img_resized1)
      plt.show()
     
      croped = tf.image.resize_image_with_crop_or_pad(image_raw,300,300)    #目标图像大小<原始图像的大小,则截取原始图像的居中部分,
      padded = tf.image.resize_image_with_crop_or_pad(image_raw,1500,1500)    #目标图像大小>原始图像的大小,则会在原始图像的四周填充全为0背景
      plt.imshow(croped.eval())
      plt.show()
      plt.imshow(padded.eval())
      plt.show()
      
      central_cropped = tf.image.central_crop(image_raw,0.25)                #按照比例裁剪图像,第二个参数为调整比例,比例取值[0,1]
      plt.imshow(central_cropped.eval())
      plt.show()

 总结,这次主要试验了三种不同的图像大小调整的方式。有些方式会产生形变,但内容中的物体不会丢失。有些方法虽然不会产生形变,但是内容中的物体会丢失。所以应该根据自己的需要使用。

参考博客:tensorflow改变图像大小

猜你喜欢

转载自blog.csdn.net/qq_32466233/article/details/81116613