【问题标题】:Resize image preserving aspect ratio in Tensorflow在 Tensorflow 中调整图像保留纵横比
【发布时间】:2018-02-06 12:38:59
【问题描述】:

我对 TF 还很陌生。我正在尝试调整图像张量的大小,以便图像的最低维度是一个常数值 LO_DIM。 在非 tf 环境中,我会做这样的事情:

if img.size[0] < img.size[1]:
    h = int(float(LO_DIM * img.size[1]) / img.size[0])
    img = resize(img, [LO_DIM, h])
else:
    w = int(float(LO_DIM * img.size[0]) / img.size[1])
    img = resize(img, [w, LO_DIM])

我知道,要调整大小我应该使用tf.image.resize_images,但考虑到张量似乎有shape=&lt;unknown&gt;,我不确定如何计算新的wh

注意:我传递的每个图像可能有不同的大小,这就是我需要动态计算它的原因。而且我使用 LO_DIM 来保持纵横比并且不扭曲图像。

关于如何实现这一点的任何建议?

如果有帮助,处理目标是从缩放后的图像中获取随机 NxN 补丁,但我能找到的只是 resize_image_with_crop_or_pad,它似乎没有进行初始缩放。

【问题讨论】:

    标签: image image-processing tensorflow conv-neural-network


    【解决方案1】:

    这个issue回答了这个问题。

    这是一个用于调整张量图像大小并保持纵横比的示例 sn-p:

    def resize_image_keep_aspect(image, lo_dim=LO_DIM):
      # Take width/height
      initial_width = tf.shape(image)[0]
      initial_height = tf.shape(image)[1]
    
      # Take the greater value, and use it for the ratio
      min_ = tf.minimum(initial_width, initial_height)
      ratio = tf.to_float(min_) / tf.constant(lo_dim, dtype=tf.float32)
    
      new_width = tf.to_int32(tf.to_float(initial_width) / ratio)
      new_height = tf.to_int32(tf.to_float(initial_height) / ratio)
    
      return tf.image.resize_images(image, [new_width, new_height])
    

    张量为shape=&lt;unknown&gt; 的问题可以通过使用tf.image.decode_jpegtf.image.decode_png 等特定类型的解码器来解决,而不是tf.image.decode_image

    【讨论】:

      【解决方案2】:

      Tensorflow 2.x 有一个内置方法可以实现相同的结果。

      默认方法用法:

      import tensorflow as tf
      tf.image.resize(
          images, size, method=ResizeMethod.BILINEAR, preserve_aspect_ratio=False,
          antialias=False, name=None
      )
      

      示例用法:

      >>> max_10_20 = tf.image.resize(image, [10,20], preserve_aspect_ratio=True)
      >>> max_10_20.shape.as_list()
      [1, 10, 10, 1]
      

      preserve_aspect_ratio 标志执行以下操作:

      • 确定是否保留纵横比。
      • 如果设置了该标志,则图像将调整为适合大小的大小,同时保留原始图像的纵横比。
      • 如果尺寸大于图像的当前尺寸,则放大图像。

      来源:https://www.tensorflow.org/api_docs/python/tf/image/resize

      【讨论】:

        猜你喜欢
        • 2013-09-09
        • 1970-01-01
        • 2013-06-26
        • 2012-04-15
        • 1970-01-01
        相关资源
        最近更新 更多