当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。