调整三维图像的大小(和重采样)

2024-04-27 17:17:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大脑的三维图像(我们称之为flash),现在是263x256x185。我想把它的大小调整为另一个图像的大小(称之为整个大脑);256 x 256 x 176,并且(希望)使用lanczos插值重新采样(image.antialas)。我(失败)的尝试:

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图像上做过这种事吗?


Tags: 图像importdatagethdrasloadflash
2条回答

scipy.ndimage.interpolate.zoom的docstring:

"""
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)

根据文档,参数zoom是“沿轴的缩放因子”。这有点模糊,但听起来他们是指一个比例因子,而不是期望的维度。

试试这个:

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

不确定如何选择过滤器-文档只提到不同阶次的样条插值。

相关问题 更多 >