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


Python tf.image.extract_patches用法及代碼示例


images 中提取 patches

用法

tf.image.extract_patches(
    images, sizes, strides, rates, padding, name=None
)

參數

  • images 形狀為 [batch, in_rows, in_cols, depth] 的 4-D 張量。
  • sizes 提取的補丁的大小。必須是 [1, size_rows, size_cols, 1]
  • strides 長度為 4 的一維張量。兩個連續補丁的中心在圖像中的距離。必須是:[1, stride_rows, stride_cols, 1]
  • rates 長度為 4 的一維張量。必須是:[1, rate_rows, rate_cols, 1]。這是輸入步幅,指定兩個連續的補丁樣本在輸入中的距離。相當於使用 patch_sizes_eff = patch_sizes + (patch_sizes - 1) * (rates - 1) 提取補丁,然後以 rates 的因子對它們進行空間二次采樣。這相當於擴張(又名 Atrous)卷積中的 rate
  • padding 要使用的填充算法的類型。
  • name 操作的名稱(可選)。

返回

  • 與輸入類型相同的 4-D 張量。

此操作從輸入圖像中收集補丁,就像應用卷積一樣。所有提取的補丁都堆疊在輸出的深度(最後)維度中。

具體來說,op 提取形狀為 sizes 的塊,這些塊在輸入圖像中相隔 strides。使用rates 參數對輸出進行二次采樣,其方式與"atrous" 或"dilated" 卷積相同。

結果是一個按批次、行和列索引的 4D 張量。 output[i, x, y] 包含大小為 sizes[1], sizes[2] 的扁平補丁,該補丁取自從 images[i, x*strides[1], y*strides[2]] 開始的輸入。

每個輸出補丁都可以重新整形為 sizes[1], sizes[2], depth ,其中 depthimages.shape[3]

輸出元素以 rate 參數給定的間隔從輸入中獲取,就像在擴張卷積中一樣。

padding 參數對每個補丁的大小沒有影響,它決定了提取多少補丁。如果 VALID ,則僅包含完全包含在輸入圖像中的補丁。如果 SAME ,則包括起點在輸入內部的所有補丁,輸入外部的區域默認為零。

例子:

n = 10
  # images is a 1 x 10 x 10 x 1 array that contains the numbers 1 through 100
  images = [[[[x * n + y + 1] for y in range(n)] for x in range(n)]]

  # We generate two outputs as follows:
  # 1. 3x3 patches with stride length 5
  # 2. Same as above, but the rate is increased to 2
  tf.image.extract_patches(images=images,
                           sizes=[1, 3, 3, 1],
                           strides=[1, 5, 5, 1],
                           rates=[1, 1, 1, 1],
                           padding='VALID')

  # Yields:
  [[[[ 1  2  3 11 12 13 21 22 23]
     [ 6  7  8 16 17 18 26 27 28]]
    [[51 52 53 61 62 63 71 72 73]
     [56 57 58 66 67 68 76 77 78]]]]

如果我們用 * 標記輸入圖像中用於輸出的像素,我們會看到以下模式:

*  *  *  4  5  *  *  *  9 10
   *  *  * 14 15  *  *  * 19 20
   *  *  * 24 25  *  *  * 29 30
  31 32 33 34 35 36 37 38 39 40
  41 42 43 44 45 46 47 48 49 50
   *  *  * 54 55  *  *  * 59 60
   *  *  * 64 65  *  *  * 69 70
   *  *  * 74 75  *  *  * 79 80
  81 82 83 84 85 86 87 88 89 90
  91 92 93 94 95 96 97 98 99 100
tf.image.extract_patches(images=images,
                           sizes=[1, 3, 3, 1],
                           strides=[1, 5, 5, 1],
                           rates=[1, 2, 2, 1],
                           padding='VALID')

  # Yields:
  [[[[  1   3   5  21  23  25  41  43  45]
     [  6   8  10  26  28  30  46  48  50]]

    [[ 51  53  55  71  73  75  91  93  95]
     [ 56  58  60  76  78  80  96  98 100]]]]

我們可以再次繪製效果,這次使用符號* , x , +o來區分補丁:

*  2  *  4  *  x  7  x  9  x
  11 12 13 14 15 16 17 18 19 20
   * 22  * 24  *  x 27  x 29  x
  31 32 33 34 35 36 37 38 39 40
   * 42  * 44  *  x 47  x 49  x
   + 52  + 54  +  o 57  o 59  o
  61 62 63 64 65 66 67 68 69 70
   + 72  + 74  +  o 77  o 79  o
  81 82 83 84 85 86 87 88 89 90
   + 92  + 94  +  o 97  o 99  o

相關用法


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