【问题标题】:A weird image modification after applying scipy.ndimage.zoom function to a mri segmentation image将 scipy.ndimage.zoom 函数应用于 mri 分割图像后的奇怪图像修改
【发布时间】:2019-12-11 02:53:56
【问题描述】:

a seg img A - 3d numpy 数组图像,形状 (150, 418, 406),仅包含两个值 0, 1
调整大小的 img B - 上述调整大小的版本 (160, 192, 128),许多数组值 [-0.26 ~ 1.28]

调整大小的过程是由这段代码运行的:

def resize(img, shape, mode='constant', orig_shape=None):
    """
    Wrapper for scipy.ndimage.zoom suited for MRI images.
    """

    if orig_shape == None: orig_shape = img.shape

    assert len(shape) == 3, "Can not have more than 3 dimensions"
    factors = (
        shape[0]/orig_shape[0],
        shape[1]/orig_shape[1], 
        shape[2]/orig_shape[2]
    )

    # Resize to the given shape
    return zoom(img, factors, mode=mode)

下面的图像是每个 3d 图像的第 80 个切片。 (A, B)

我只想对 mri 分割图像进行下采样,不想对图像进行奇怪的修改。任何帮助,将不胜感激。

【问题讨论】:

    标签: python multidimensional-array scipy


    【解决方案1】:

    由于您得到的值不同于 0 和 1,我不太确定,因为我无法重现,但可能在对 zoom 的调用中设置 order=0 可以解决它。

    然后,对于您的图像比较,我很确定您没有比较可比较的图像。当您调用缩放时,图像的边界保持不变,但采样点的数量会发生变化。因此,在矩阵表示的情况下,矩阵的形状会发生变化,在您的情况下从 (150, 418, 406) 变为 (160, 192, 128)。因此,沿原始图像的第一个轴访问第 80 个元素不会映射到沿新生成的图像的第一个轴访问第 80 个元素。它实际上会更接近 80 / 150 * 160,大约是 85。例如,请参见下图的 sn-p。请注意第一行中的图像如何具有可比性,但第二行中的图像不具有可比性。应用我刚才提到的校正,第三行中的图像变得可比较。

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.ndimage import zoom
    
    image = np.random.default_rng(0).integers(2, size=(100, 25, 25))
    imageZ = zoom(image, zoom=(1.2, 0.8, 0.8), order=0)
    fig, axarr = plt.subplots(nrows=3, ncols=2, figsize=(8, 12))
    axarr[0, 0].imshow(image[-1, :, :], cmap='binary')
    axarr[0, 1].imshow(imageZ[-1, :, :], cmap='binary')
    axarr[1, 0].imshow(image[70, :, :], cmap='binary')
    axarr[1, 1].imshow(imageZ[70, :, :], cmap='binary')
    axarr[2, 0].imshow(image[70, :, :], cmap='binary')
    axarr[2, 1].imshow(imageZ[84, :, :], cmap='binary')
    fig.savefig('so.png', bbox_inches='tight', dpi=300)
    

    【讨论】:

    • 谢谢。将 order 设置为 0 解决了这个问题。你能给我一个解释原因的链接吗?
    • 不用担心。请务必考虑调整数组大小时索引的变化,因为这很重要。有关说明,请参阅 WikipediaScipy Tutorial。最后,如果你觉得有用,请upvote and accept我的回答。
    • 我发布了一个与这篇文章相关的新问题,如果你能帮助我,我会很高兴。 stackoverflow.com/questions/61953238/…
    猜你喜欢
    • 2022-10-17
    • 2017-08-05
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 2018-09-24
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多