6

我有一个大脑的 3D 图像(我们称之为 flash),它目前是 263 x 256 x 185。我想将它调整为另一个图像的大小(称之为 whole_brain_bravo);256 x 256 x 176,并且(希望)使用 lanczos 插值来重新采样(Image.ANTIALIAS)。我的(失败的)尝试:

from scipy import ndimage as nd
import nibabel as nib
import numpy as np



a = nib.load('flash.hdr') # nib is what I use to load the images
b = nib.load('whole_brain_bravo.hdr')

flash = a.get_data() # Access data as array (in this case memmap)
whole = b.get_data()

downed = nd.interpolation.zoom(flash, zoom=b.shape) # This obviously doesn't work

你们有没有在 3D 图像上做过这种事情?

4

2 回答 2

4

从文档字符串中scipy.ndimage.interpolate.zoom

"""
zoom : float or sequence, optional
    The zoom factor along the axes. If a float, `zoom` is the same for each
    axis. If a sequence, `zoom` should contain one value for each axis.
"""

两幅图像之间的比例因子是多少?它是否在所有轴上都保持不变(即您是否等距缩放)?在这种情况下zoom应该是一个浮点值。否则它应该是一个浮点序列,每个轴一个。

例如,如果的物理尺寸可以假设为相等wholeflash,那么您可以执行以下操作:

 dsfactor = [w/float(f) for w,f in zip(whole.shape, flash.shape)]
 downed = nd.interpolation.zoom(flash, zoom=dsfactor)
于 2013-08-22T16:51:10.947 回答
2

根据文档,zoom参数是“沿轴的缩放因子”。这有点含糊,但听起来它们的意思是比例因子,而不是所需的尺寸。

试试这个:

zoomFactors = [bi/float(ai) for ai, bi in zip(a, b)]
downed = nd.interpolation.zoom(flash, zoom=zoomFactors) 

不确定选择过滤器 - 文档只提到各种阶的样条插值。

于 2013-08-22T16:52:27.993 回答