我有一个100x100x100 numpy数组,表示由2D切片组成的3D体积。
我想使用从具有最佳信噪比的音量创建的模板,在这些音量上对该音量中的对象进行互相关。
为了简化操作,我尝试进行2D交叉相关,然后通过在每个切片上执行scipy correlate2d然后将该切片放入3D numpy数组来构建3D体积。
我已经测试了correlate2d函数,并且一切似乎都运行良好但是我希望能够拉出这些切片中任何一个切片的任何部分,并根据测量的坐标制作我的模板。
#inputdata, a 3D numpy array with x , y and z image data.
mrc = np.array((mrcfileinput.data))
#The measured coords for the template I want to box out
xtake = np.array(range(64,77))
ytake = np.array([50])
ztake = np.array(range(9,32))
#checking the range is correct
print (xtake, ytake, ztake)
#turning them into lists although not sure this is needed
xlist = list(xtake)
ylist = list(ytake)
zlist = list(ztake)
#attempting to implement numpy.take with very little luck
template = np.take(mrc, ([xlist],[ylist],[zlist]))
print (template)
所以我最初的想法是测量我想要装箱的两个角落。这基本上是一个2D盒子(y轴保持在50)。 numpy take命令似乎不太好用。在我离开之前,想一想如何使用我认为需要的每一个精确的合作伙伴来填充整个数组,我想知道是否有人知道更简单的方法?
(将所有内容变成列表是为了逗号分隔。我不确定这是否真的需要)
答案 0 :(得分:0)
如果我理解正确,您的问题是您想要从3D阵列中取出2D盒子。如果您希望2D框仍然表示为一个轴长度为1的3D阵列,您可以使用:
template = mrc[64:77, 50:51, 9:32] # shape (13, 1, 23)
如果您真的只想要一个2D数组,这简化为:
template = mrc[64:77, 50, 9:32] # shape (13, 23)
希望这有帮助。