Python中三维数组的任意切片
我将三维体积数据存储在三维数组中,背景值为0,体积值为1。 现在我想得到这个体积的任意剖面。我在这里读到了答案: 但似乎接受的答案是错误的,它生成xoy平面的映射坐标,而不是切片坐标。 那么如何获得切片平面的正确形状呢?是否有将贴图形状转换为原始形状的方法?Python中三维数组的任意切片,python,arrays,slice,Python,Arrays,Slice,我将三维体积数据存储在三维数组中,背景值为0,体积值为1。 现在我想得到这个体积的任意剖面。我在这里读到了答案: 但似乎接受的答案是错误的,它生成xoy平面的映射坐标,而不是切片坐标。 那么如何获得切片平面的正确形状呢?是否有将贴图形状转换为原始形状的方法? 谢谢 该问题可能已经过时,但看起来fromscipy.ndimage可能会解决您的问题 scipy.ndimage.interpolation.rotate所做的是将整个3d阵列围绕3个轴中的任一轴旋转一定角度,将存储的值插值到新的“单元”
谢谢 该问题可能已经过时,但看起来from
scipy.ndimage
可能会解决您的问题
scipy.ndimage.interpolation.rotate
所做的是将整个3d阵列围绕3个轴中的任一轴旋转一定角度,将存储的值插值到新的“单元”。它还相应地调整(扩展)新数组的大小,用指定的值填充新的空单元格。在这之后,您可以像平常一样获取切片,比如说:array[:,sy//2,:]
简而言之,这是一个围绕平行于z轴的对角线的中心切口(为简单起见):
sz,sy,sx=array.shape
数组[:,sy//2,:]#这是x-z平面上的一个切口。。。
# ... 穿过y轴的中间
#绕z轴旋转45度。。。
# ... `(2,1)`is`(x,y)`定义了旋转平面
数组_rotated=scipy.ndimage.interpolation.rotate(数组,角度=45,轴=(2,1))
sz,sy,sx=阵列形状
#现在你会注意到'sz'是一样的。。。
# ... 但是'sx'和'sy'增加了,因为对角线更长
数组_旋转[:,sy//2,:]#此切片现在位于新的x'-z'平面中。。。
# ... 但就原始数组而言。。。
# ... 它沿着z穿过x-y的对角线
实际上,您可以进一步思考,通过绕不同的轴旋转几次,将其扩展到任意切片
注:如果您觉得需要花费太多时间,可以通过传递
order=0
(默认值为order=3
)来牺牲插值质量。这将运行得更快。您是指python意义上的“切片”(使用下标,例如选择平行于其中一个轴的3d阵列的2D子阵列),还是指沿平面插值体积数据时的切片(平面不一定平行于任何轴)?其中第一个要比第二个简单得多second@Alex对不起,对不起,我没有很好地表达我的问题。实际上问题应该是第二种情况,插值方法是必要的。