【问题标题】:Resizing a 3D image (and resampling)调整 3D 图像的大小(和重新采样)
【发布时间】:2013-08-22 16:40:00
【问题描述】:

我有一个大脑的 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 图像上做过这种事情?

【问题讨论】:

    标签: python scipy python-imaging-library nipy


    【解决方案1】:

    来自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)
    

    【讨论】:

    • 这真的很好,谢谢。您是否也知道如何重新采样被击落的任何机会?
    • 这就是np.interpolation.zoomflash 生成downed 所做的事情!您可以通过 order= 参数更改它使用的样条插值的顺序(我不知道在 numpy/scipy 中有任何 Lanczos 插值的实现)。
    • 啊,我明白你的意思了。我希望我可以使用 Lanczos。不过这没什么大不了的。是的,lanczos 是在 python 成像库中实现的; Image.ANTIALIAS 实际上是一个用 C 编写的 3-lobe lanczos(根据文档)
    • 我相信您已经知道,PIL 仅处理 2D 图像,因此您只能重新采样阵列的 2D 切片。老实说,无论如何,我认为您不会看到 Lanczos 和三次样条插值之间有太多实际区别。
    【解决方案2】:

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

    试试这个:

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

    不确定如何选择过滤器 - 文档仅提及各种阶的样条插值。

    【讨论】:

    • 一般来说,你会如何在 python 中重新采样 3D 图像?比如我给你一张图片,你看着它然后说“哦,这看起来很糟糕,我可能应该做一些最近的邻居让它更好一点”,你会怎么做?
    • 在什么意义上对图像进行下采样会使它看起来更好?如果我想重新采样一个数组,我想我会尝试使用 scipy.ndimage.interpolation.zoom。那不适合你吗?我敢肯定有很多方法可以做到这一点,但除非你描述为什么这个不够好,否则我帮不了你。
    • 这并不是说它不够好,我只是真的很喜欢 lanczos 方案在下采样时的结果,比如 jpeg,所以我想在 3d 图像中重现它。但这没什么大不了的,样条曲线很好(呵呵,我押韵了)。感谢您的帮助!
    • 啊,我明白了。我会环顾四周,但我不知道如何使用 Lanczos 过滤器从头顶进行 3D 重采样 - 祝你好运!
    • @elefun ,order=0 的插值缩放不适用于最近邻下采样吗?
    猜你喜欢
    • 1970-01-01
    • 2015-06-28
    • 2014-06-18
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2011-02-09
    相关资源
    最近更新 更多