Numpy 从top_k函数返回到图像

Numpy 从top_k函数返回到图像,numpy,tensorflow,image-processing,keras,deep-learning,Numpy,Tensorflow,Image Processing,Keras,Deep Learning,我解决了我的问题,但我仍然被许多功能所淹没。我希望使用tf.top_k并返回到第一张图像。熟悉tensorflow的人能帮我解决这个问题吗 详细问题:图像(4×4)作为张量-->tf.top_k-->4个值(2×2)和4个索引(2×2)-->片段-->图像(4,4)作为张量 例如,假设我们有一个图像 image = np.array([[1, 2, 3, 4], [7, 8, 9, 10], [19, 20, 21, 22]

我解决了我的问题,但我仍然被许多功能所淹没。我希望使用tf.top_k并返回到第一张图像。熟悉tensorflow的人能帮我解决这个问题吗

详细问题:图像(4×4)作为张量-->tf.top_k-->4个值(2×2)和4个索引(2×2)-->片段-->图像(4,4)作为张量

例如,假设我们有一个图像

image = np.array([[1, 2, 3, 4],
                  [7, 8, 9, 10],
                  [19, 20, 21, 22],
                  [25, 26, 27, 28]])

x = tf.placeholder(tf.float32, [None, img_height, img_width, 1], name='x')
patches = tf.extract_image_patches(x, [1, 2, 2, 1], [1, 2, 2, 1], [1, 1, 1, 1], "SAME")
ktop, indices = tf.nn.top_k(patches, k=4, sorted=True, name=None) 
现在,我希望给ktop和索引,以获得像第一个状态一样的图像

image = np.array([[1, 2, 3, 4],
                  [7, 8, 9, 10],
                  [19, 20, 21, 22],
                  [25, 26, 27, 28]])
我尝试了很多东西,比如tf.one_hot、tf.gatter等等,但我无法得到(4,4)图像。我应该在输入和输出中有一个张量,似乎我不能使用numpy或for循环。我以前问过类似的问题,但我在这里再次问,并给出了更清楚的解释。 你能找个人帮忙解决这个问题吗。这对别人来说应该很容易,但对我来说很难

这个片段给了我第一个图像,但不是(1,4,4,1),而是(2,2,2,2)或其他形状

z1 = tf.assign(z1, tf.reshape(tf.gather(ktop[0, 0, 0, :], [indices[0, 0, 0, :]]), [2, 2]))
z2 = tf.assign(z2, tf.reshape(tf.gather(ktop[0, 0, 1, :], [indices[0, 0, 1, :]]), [2, 2]))
z3 = tf.assign(z3, tf.reshape(tf.gather(ktop[0, 1, 0, :], [indices[0, 1, 0, :]]), [2, 2]))
z4 = tf.assign(z4, tf.reshape(tf.gather(ktop[0, 1, 1, :], [indices[0, 1, 1, :]]), [2, 2]))

z = tf.concat([[z1, z2], [z3, z4]], 0)

在没有明确解释如何从2x4张量到4x4x1张量的情况下,我只能提出以下建议:

img_out = tf.reshape(ktop, [-1, 4, 4, 1])

最后,我找到了TENSORFLOW追随者至今没有重播的答案。要从top_k返回到图像,我们应该使用depth_to_space函数:

输出图像=tf.depth\u到空间( 输出图像, 2. 名称=无, 数据格式='NHWC'
)

我不确定我是否理解您的问题,您希望如何从2x2x4变为4x4x1?什么是
代码片段
?谢谢您的回答。如果您运行我的代码段,它会给出一个(1,4,4,1)图像作为x。然后从top_k提供8个张量:四个值(1,2,2,4)和四个索引(1,2,2,4)。现在,我想回到图像(1,4,4,1)。这是我的问题?我脑海中一个可能的解决方案是对每个值[0,:,:,0]、值[0,:,:,1]、。。。使用相应的索引获取值,并得到(1,4,4,1)的4个张量,每个张量包含值和0。然后将它们组合在一起以获得第一张图像。但是我不知道怎么做?我添加了我的代码片段以供返回。如果是MATLAB,我可以添加for循环,所有问题都可以轻松解决,但使用Tensorflow很困难。您的代码片段将更改top_k的形状,但不使用索引。我在问题中添加了一个图像,您可以单击链接查看。在这幅图中,我用一个例子详细地解释了我的问题。请你看一看,并给我一些小建议好吗?