如何从Python的修补程序中恢复3D图像?

如何从Python的修补程序中恢复3D图像?,第1张

如何从Python的修补程序中恢复3D图像?

但是,这样做会相反,因为您的补丁重叠,只有当它们的值在重叠的地方一致时,才能很好地定义

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5663465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存