但是,这样做会相反,因为您的补丁重叠,只有当它们的值在重叠的地方一致时,才能很好地定义
def stuff_patches_3D(out_shape,patches,xstep=12,ystep=12,zstep=12): out = np.zeros(out_shape, patches.dtype) patch_shape = patches.shape[-3:] patches_6D = np.lib.stride_tricks.as_strided(out, ((out.shape[0] - patch_shape[0] + 1) // xstep, (out.shape[1] - patch_shape[1] + 1) // ystep, (out.shape[2] - patch_shape[2] + 1) // zstep, patch_shape[0], patch_shape[1], patch_shape[2]), (out.strides[0] * xstep, out.strides[1] * ystep,out.strides[2] * zstep, out.strides[0], out.strides[1],out.strides[2])) patches_6D[...] = patches.reshape(patches_6D.shape) return out
更新:这是平均重叠像素的更安全版本:
def stuff_patches_3D(out_shape,patches,xstep=12,ystep=12,zstep=12): out = np.zeros(out_shape, patches.dtype) denom = np.zeros(out_shape, patches.dtype) patch_shape = patches.shape[-3:] patches_6D = np.lib.stride_tricks.as_strided(out, ((out.shape[0] - patch_shape[0] + 1) // xstep, (out.shape[1] - patch_shape[1] + 1) // ystep, (out.shape[2] - patch_shape[2] + 1) // zstep, patch_shape[0], patch_shape[1], patch_shape[2]), (out.strides[0] * xstep, out.strides[1] * ystep,out.strides[2] * zstep, out.strides[0], out.strides[1],out.strides[2])) denom_6D = np.lib.stride_tricks.as_strided(denom, ((denom.shape[0] - patch_shape[0] + 1) // xstep, (denom.shape[1] - patch_shape[1] + 1) // ystep, (denom.shape[2] - patch_shape[2] + 1) // zstep, patch_shape[0], patch_shape[1], patch_shape[2]), (denom.strides[0] * xstep, denom.strides[1] * ystep,denom.strides[2] * zstep, denom.strides[0], denom.strides[1],denom.strides[2])) np.add.at(patches_6D, tuple(x.ravel() for x in np.indices(patches_6D.shape)), patches.ravel()) np.add.at(denom_6D, tuple(x.ravel() for x in np.indices(patches_6D.shape)), 1) return out/denom
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)