将scipy.ndimage.zoom函数应用于MRI分割图像后的怪异图像修改

时间:2019-12-11 02:53:56

标签: python multidimensional-array scipy

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)

img A img B

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

1 个答案:

答案 0 :(得分:1)

对于您获得的值不同于0和1的事实,我不太确定,因为我无法设法进行复制,但是可能在对order=0的调用中设置zoom可以解决。 / p>

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

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)

enter image description here