當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python tf.keras.preprocessing.image.smart_resize用法及代碼示例

將圖像大小調整為目標大小,而不會出現縱橫比失真。

用法

tf.keras.preprocessing.image.smart_resize(
    x, size, interpolation='bilinear'
)

參數

  • x 輸入圖像或一批圖像(作為張量或 NumPy 數組)。格式必須為 (height, width, channels)(batch_size, height, width, channels)
  • size (height, width) 整數的元組。目標大小。
  • interpolation 字符串,用於調整大小的插值。默認為 'bilinear' 。支持 bilinear , nearest , bicubic , area , lanczos3 , lanczos5 , gaussian , mitchellcubic

返回

  • 形狀為 (size[0], size[1], channels) 的數組。如果輸入圖像是 NumPy 數組,則輸出是 NumPy 數組,如果是 TF 張量,則輸出是 TF 張量。

TensorFlow 圖像數據集通常會生成大小不同的圖像。但是,這些圖像需要進行批處理才能被 Keras 層處理。要進行批處理,圖像需要共享相同的高度和寬度。

你可以簡單地做:

size = (200, 200)
ds = ds.map(lambda img:tf.image.resize(img, size))

但是,如果這樣做,則會扭曲圖像的縱橫比,因為通常它們的縱橫比並不都與 size 相同。在許多情況下這很好,但並非總是如此(例如,對於 GAN,這可能是一個問題)。

請注意,將參數 preserve_aspect_ratio=True 傳遞給 resize 將保留縱橫比,但代價是不再遵守提供的目標大小。因為tf.image.resize 不會裁剪圖像,所以您的輸出圖像仍然會有不同的大小。

這要求:

size = (200, 200)
ds = ds.map(lambda img:smart_resize(img, size))

您的輸出圖像實際上是 (200, 200) ,並且不會失真。相反,圖像中不適合目標尺寸的部分會被裁剪掉。

調整大小的過程是:

  1. 取與目標尺寸具有相同縱橫比的圖像的最大居中裁剪。例如,如果 size=(200, 200) 並且輸入圖像的大小為 (340, 500) ,我們將沿寬度居中裁剪 (340, 340)
  2. 將裁剪後的圖像調整為目標大小。在上麵的示例中,我們將 (340, 340) 裁剪調整為 (200, 200)

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.keras.preprocessing.image.smart_resize。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。