Numpy 如何通过三维图像生成二维剪切?

Numpy 如何通过三维图像生成二维剪切?,numpy,3d,image-rotation,scikit-image,ndimage,Numpy,3d,Image Rotation,Scikit Image,Ndimage,我有一个包含一些数据的3D阵列(光栅3D图像)。我想通过使用一些合适的插值(最好是线性的,在这种情况下可能是“三线性的”)得到一个二维的数组。然而,可以方便地描述切割平面,例如使用法向量和距离 如果切割与其中一个轴平行,这很简单,只需切片3D阵列(使用numpy索引切片)。但是如果切口不平行于轴,我看不出一个好的方法来解决这个问题。我想到的唯一一件事是旋转3D阵列(可能使用2D旋转的组合),使切割平行于轴,但这似乎效率极低 我在python中使用numpy、ndimage和skimage。任何其

我有一个包含一些数据的3D阵列(光栅3D图像)。我想通过使用一些合适的插值(最好是线性的,在这种情况下可能是“三线性的”)得到一个二维的数组。然而,可以方便地描述切割平面,例如使用法向量和距离

如果切割与其中一个轴平行,这很简单,只需切片3D阵列(使用numpy索引切片)。但是如果切口不平行于轴,我看不出一个好的方法来解决这个问题。我想到的唯一一件事是旋转3D阵列(可能使用2D旋转的组合),使切割平行于轴,但这似乎效率极低


我在python中使用numpy、ndimage和skimage。任何其他python模块都可能被认为是可用的。

并没有真正测试这一点,但它确实生成了各种各样的图像。基于@Daniel Forsman的建议

import numpy as np
from scipy.interpolate import RegularGridInterpolator

# stack coordinates
z0,z1,z2 = 20, 20, 20
zz0,zz1,zz2 = np.linspace(0, 1, z0), np.linspace(0, 1, z1), np.linspace(0, 1, z2)

# fake stack data
d0,d1,d2 = np.ix_(0.5-np.abs(zz0-0.5), 0.5-np.abs(zz1-0.5), 0.5-np.abs(zz2-0.5))
data = np.minimum(np.minimum(d0, d1), d2)

# define picture (same coords as stack)
tl = np.array((0.1, -0.02, 0.3)) # top left corner
yo = np.array((-0.01, 0.1, 0.01))
yo /= np.sqrt((yo*yo).sum()) # y-axis unit
xo = np.array((0.1, 0, 0.1))
xo -= (xo*yo).sum() * yo # should be perpendicular now
xo /= np.sqrt((xo*xo).sum()) # x-axis unit

# build picture grid
nx,ny = 20j, 20j
ya, xa = np.ogrid[:1:ny, :1:nx]
grid = tl + ya[..., None] * yo + xa[..., None] * xo

picture = RegularGridInterpolator((zz0,zz1,zz2), data, bounds_error=False)(grid)

您可以旋转平面坐标并使用@DanielForsman。非常感谢,这听起来似乎可以完成这项工作。如果你愿意的话,你可以发布一些示例代码作为答案,我接受你的回答。如果你真的不知道如何给出一个完整的答案,那就更简单了。