Python 3.x 从重叠的图像块重建图像

Python 3.x 从重叠的图像块重建图像,python-3.x,machine-learning,tensorflow,computer-vision,Python 3.x,Machine Learning,Tensorflow,Computer Vision,我使用了tf.extract\u image\u patches()来获得重叠面片的张量 从链接中所述的图像。上述链接中的答案建议使用tf.space\u to\u depth()从重叠的面片重建图像。但问题是,在我的案例中,这并没有给出理想的结果,经过研究,我知道tf.space\u to\u depth()不处理重叠块。我的代码如下所示: import tensorflow as tf import numpy as np c = 3 height = 3900 width = 6000

我使用了
tf.extract\u image\u patches()
来获得重叠面片的张量 从链接中所述的图像。上述链接中的答案建议使用
tf.space\u to\u depth()
从重叠的面片重建图像。但问题是,在我的案例中,这并没有给出理想的结果,经过研究,我知道
tf.space\u to\u depth()
不处理重叠块。我的代码如下所示:

import tensorflow as tf
import numpy as np

c = 3
height = 3900
width = 6000
ksizes = [1, 150, 150, 1]
strides = [1, 75, 75, 1]

image = #image of shape [1, height, width, 3]

patches = tf.extract_image_patches(image, ksizes = ksizes, strides= strides, [1, 1, 1, 1], 'VALID')
patches = tf.reshape(patches, [-1, 150, 150, 3])

reconstructed = tf.reshape(patches, [1, height, width, 3])
rec_new = tf.space_to_depth(reconstructed,75)
rec_new = tf.reshape(rec_new,[height,width,3])
这给了我一个错误:


InvalidArgumentError回溯(最近一次呼叫 最后) D:\AnacondaIDE\lib\site packages\tensorflow\python\framework\common\u shapes.py 在调用cpp形状fn impl(op,需要输入张量)中, 输入\u张量\u作为所需的\u形状,需要\u形状\u fn) 653图形定义版本、节点定义、输入形状、输入张量、, -->654输入张量(形状、状态) 655除错误外。InvalidArgumentError作为错误:

D:\AnacondaIDE\lib\contextlib.py在退出(自身、类型、值、, (回溯) 87尝试: --->88下一个(self.gen) 89除停止迭代外:

D:\AnacondaIDE\lib\site packages\tensorflow\python\framework\errors\u impl.py 在raise_异常_on_not_ok_status()中 465兼容as_文本(pywrap_tensorflow.TF_消息(状态)), -->466 pywrap_tensorflow.TF_GetCode(状态)) 467最后:

无效arguminterror:维度大小必须能被 70200000,但对于带有输入的“重塑”(op:“重塑”)为271957500 形状:[4029150150,3],[4]和输入张量计算为 部分形状:输入=[?,39006000,3]

在处理上述异常期间,发生了另一个异常:

ValueError回溯(最近的调用 最后)在() ---->1重建=tf.重塑(特征,[-1,高度,宽度,通道]) 2 rec_new=tf.空间到深度(重建,75) 3 rec_new=tf.重塑(rec_new[h,h,c])

D:\AnacondaIDE\lib\site packages\tensorflow\python\ops\gen\u array\u ops.py 在重塑(张量、形状、名称)2617“2618结果中= _op_def_lib.apply_op(“重塑”,张量=张量,形状=形状, ->2619 name=name)2620返回结果2621

D:\AnacondaIDE\lib\site packages\tensorflow\python\framework\op_def_library.py 在apply_op中(self,op_type_name,name,**关键字) 765 op=g.创建op(op类型名称、输入、输出类型、名称=范围、, 766输入类型=输入类型,属性=属性协议, -->767 op_def=op_def) 768如果输出_结构: 769输出=操作输出

中的D:\AnacondaIDE\lib\site packages\tensorflow\python\framework\ops.py 创建操作(自我、操作类型、输入、数据类型、输入类型、名称、属性、, 运算定义、计算形状、计算设备)2630
初始值=自身。默认值初始值,初始值=初始值)2631如果 计算形状: ->2632为输出(ret)2633自身设置形状。添加操作(ret)2634
自我记录控制依赖项(ret)看到的操作

中的D:\AnacondaIDE\lib\site packages\tensorflow\python\framework\ops.py 为输出设置形状(op)1909形状函数= _称为cpp形状fn和require操作1910 ->1911 shapes=shape_func(op)1912如果shapes为None:1913引发运行时错误(

中的D:\AnacondaIDE\lib\site packages\tensorflow\python\framework\ops.py 呼叫_,需要_(op)1859 1860 def 需要时呼叫_(op): ->1861返回调用\u cpp\u shape\u fn(op,require\u shape\u fn=True)1862 1863调用\u cpp\u shape\u fn\u和\u require\u op= 用_呼叫_

D:\AnacondaIDE\lib\site packages\tensorflow\python\framework\common\u shapes.py 在调用中\u cpp\u shape\u fn(op,require\u shape\u fn) 593 res=\u call\u cpp\u shape\u fn\u impl(op,需要输入张量, 594根据需要输入张量和形状, -->595(要求形状) 596如果不存在(res,dict): 597#处理_call_cpp_shape_fn_impl调用未知形状(op)的情况

D:\AnacondaIDE\lib\site packages\tensorflow\python\framework\common\u shapes.py 在调用cpp形状fn impl(op,需要输入张量)中, 输入\u张量\u作为所需的\u形状,需要\u形状\u fn) 657缺失_形状_fn=真 658其他: -->659提升值错误(错误消息) 660 661如果缺少形状\u fn:

ValueError:维度大小必须能被70200000整除,但不能为 271957500用于带有输入形状的“重塑_22”(op:“重塑”): [4029150150,3],[4]和输入张量计算为部分张量 形状:输入=[?,39006000,3]


我知道这是由于尺寸不兼容造成的错误,但应该是这样的,对吗?请帮我解决这个问题。

我想问题是,在您发布的链接中,作者对
步幅和
ksizes
使用了相同的值,而您使用的
步幅
等于
ksizes
的一半>。这就是尺寸不匹配的原因,您应该在粘贴补片之前编写减小补片大小的逻辑(例如,通过选择每个补片的中心正方形).

我不明白,文档中说“跨步”将定义面片中心之间的距离,“ksizes”是过滤器的大小,结果是每个面片的大小。它不应该这样工作吗?事实上,作者在链接中使用的是非重叠面片。我也在寻找一种从重叠面片重建的方法艾奇斯