gpt4 book ai didi

python - 了解 tf.extract_image_patches 以从图像中提取补丁

转载 作者:IT老高 更新时间:2023-10-28 21:16:01 28 4
gpt4 key购买 nike

我找到了以下方法tf.extract_image_patches在 tensorflow API 中,但我不清楚它的功能。

假设 batch_size = 1,图像大小为 225x225x3,我们要提取大小为 32x32 的 block 。

这个函数的具体表现如何?具体来说,文档提到输出张量的维度是 [batch, out_rows, out_cols, ksize_rows * ksize_cols * depth] ,但是 out_rowsout_cols 没有提到。

理想情况下,给定大小为 1x225x225x3 的输入图像张量(其中 1 是批量大小),我希望能够获得 Kx32x32x3 作为输出,其中 K 是补丁的总数,32x32x3 是每个补丁的维度。 tensorflow 中是否已经实现了这一点?

最佳答案

这是该方法的工作原理:

  • ksized 用于决定每个补丁的尺寸,或者换句话说,每个补丁应该包含多少像素。

  • strides 表示原始图像中一个补丁的开始与下一个连续补丁的开始之间的间隙长度。

  • rates 是一个数字,本质上意味着我们的补丁应该在原始图像中以 rates 个像素为单位跳跃,以达到我们补丁中的每个连续像素。 (下面的例子有助于说明这一点。)

  • padding 要么是“VALID”,这意味着每个补丁必须完全包含在图像中,或者是“SAME”,这意味着允许补丁不完整(剩余的像素将用零填写)。

以下是一些示例代码,其输出有助于演示其工作原理:

import tensorflow as tf

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

# We generate four outputs as follows:
# 1. 3x3 patches with stride length 5
# 2. Same as above, but the rate is increased to 2
# 3. 4x4 patches with stride length 7; only one patch should be generated
# 4. Same as above, but with padding set to 'SAME'
with tf.Session() as sess:
print tf.extract_image_patches(images=images, ksizes=[1, 3, 3, 1], strides=[1, 5, 5, 1], rates=[1, 1, 1, 1], padding='VALID').eval(), '\n\n'
print tf.extract_image_patches(images=images, ksizes=[1, 3, 3, 1], strides=[1, 5, 5, 1], rates=[1, 2, 2, 1], padding='VALID').eval(), '\n\n'
print tf.extract_image_patches(images=images, ksizes=[1, 4, 4, 1], strides=[1, 7, 7, 1], rates=[1, 1, 1, 1], padding='VALID').eval(), '\n\n'
print tf.extract_image_patches(images=images, ksizes=[1, 4, 4, 1], strides=[1, 7, 7, 1], rates=[1, 1, 1, 1], padding='SAME').eval()

输出:

[[[[ 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]]]]


[[[[ 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]]]]


[[[[ 1 2 3 4 11 12 13 14 21 22 23 24 31 32 33 34]]]]


[[[[ 1 2 3 4 11 12 13 14 21 22 23 24 31 32 33 34]
[ 8 9 10 0 18 19 20 0 28 29 30 0 38 39 40 0]]

[[ 71 72 73 74 81 82 83 84 91 92 93 94 0 0 0 0]
[ 78 79 80 0 88 89 90 0 98 99 100 0 0 0 0 0]]]]

因此,例如,我们的第一个结果如下所示:

 *  *  *  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

如您所见,我们有 2 行 2 列的补丁,这就是 out_rowsout_cols

关于python - 了解 tf.extract_image_patches 以从图像中提取补丁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40731433/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com