【发布时间】:2017-07-15 00:24:52
【问题描述】:
我有一个形状为 DxHxW 的 3D 图像。我成功地将图像提取到补丁pdxphxpw(重叠补丁)。对于每个补丁,我都会做一些处理。现在,我想从处理过的补丁中生成图像,使得新图像必须与原始图像具有相同的形状。你能帮我做吗。
这是我提取补丁的代码
def patch_extract_3D(input,patch_shape,xstep=1,ystep=1,zstep=1):
patches_3D = np.lib.stride_tricks.as_strided(input, ((input.shape[0] - patch_shape[0] + 1) / xstep, (input.shape[1] - patch_shape[1] + 1) / ystep,
(input.shape[2] - patch_shape[2] + 1) / zstep, patch_shape[0], patch_shape[1], patch_shape[2]),
(input.strides[0] * xstep, input.strides[1] * ystep,input.strides[2] * zstep, input.strides[0], input.strides[1],input.strides[2]))
patches_3D= patches_3D.reshape(patches_3D.shape[0]*patches_3D.shape[1]*patches_3D.shape[2], patch_shape[0],patch_shape[1],patch_shape[2])
return patches_3D
这是处理补丁(只是简单的 2 倍数
for i in range(patches_3D.shape[0]):
patches_3D[i]=patches_3D[i];
patches_3D[i]=patches_3D[i]*2;
现在,我需要的是 patch_3D,我想将其重塑为原始图像。谢谢
这是示例代码
patch_shape=[2, 2, 2]
input=np.arange(4*4*6).reshape(4,4,6)
patches_3D=patch_extract_3D(input,patch_shape)
print patches_3D.shape
for i in range(patches_3D.shape[0]):
patches_3D[i]=patches_3D[i]*2
print patches_3D.shape
【问题讨论】:
-
patches_3D是pdxphxpw。2的元素乘法仍将保持为pdxphxpw。所以,我不确定如何从那里获得DxHxW的原始图像形状。 -
我只是多重强度,而不是形状
-
不要以为你明白我的意思。
patches_3D和原图形状不同。如果没有某种减少,你不能从patches_3D回到原来的那个。此外,在您的示例中,patches_3D.shape是 (0,2,2,2)。如果您在发布之前测试样本,那将是有意义的。 -
对不起,上述测试形状2中的步长必须是1。patch_3D的形状是
(45, 2, 2, 2)。
标签: python python-2.7 numpy image-processing