重采样,双线性插值,双三次插值
| 图源

  图像重采样这个词,可能许多人都会觉得陌生。但是图像放大,图像缩小,图像旋转,图像错切等这些我们熟悉操作背后,增多、减少和移位的像素点值的确定,其实都是通过重采样(resample)来完成的。数字图像,是对连续的模拟图像采样后的结果,而由插值理论我们可以知道,由有限像素点的数字图像,我们可以插值出近似的模拟图像。再对该模拟图像按照要求的采样间隔采样,就可以得到符合要求的重采样结果。常用的插值方法有线性插值,双线性插值,双三次插值,样条插值等。对一般图像进行重采样的工具有很多,比如opencv,matlab,PIL等,但本文主要是介绍对MRI脑影像这一特殊图像进行重采样的方法,文中包括FSL、SPM12、NIfTI_20140122(3D或4D)、dpabi、nilearn(3D或4D)五种工具,无论你用python,还是matlab,无论你用windows还是linux都可以用得着。

  工具: FSL6.0.3、SPM12

copyright ©意疏:https://blog.csdn.net/sinat_35907936/article/details/114086796


图像重采样原理


  • 为什么要重采样——哲学

  数字图像不像模拟图像,它除了每个采样点——像素点处有值外,其他地方没有任何图像信息。而如果我们增大或者减小图像分辨率或者改变图像形状,由于涉及像素点的增减移位,变化后的图像的新像素点就可能出现在原先的采样点与采样点之间的位置,比如分辨率从n * n 变成 2n * 2n,则原先采样点与采样点的中间将出现一个新的像素点。下图中A、B、C三点均为新像素点,图源

  前面说过,数字图像采样点(像素点)与采样点之间没有任何图像信息,而这些新像素点的值又不能凭空产生,那就只能通过周围的像素点值进行估计。常用插值方法插出局部的连续图像,再在连续图像上重采样得到新像素点的值。

双线性插值

  • 如何重采样——技术

  通过插值来实现重采样。插值理论是数值分析中一个重要的板块,它与拟合类似,都是要通过有限的已知点,得到逼近已知点变化规律的连续函数。两者的区别是,插值出来的函数会通过所有已知点,这是符合要求的,因为出现在原来采样点位置上的像素值就应该是原来的值。笔者后面要专门写关于插值的文章,其细节就留到那时再做讨论。

  在数字图像重采样时用的比较多的插值方法有最近邻插值,线性插值和双三次插值等,如图所示,图源。他们需要用到的已知点数是不同的,进而计算复杂度和精度也是不同的。通过图中我们可以看到,插值函数曲线是连续的,通过插值函数我们可以得到两个离散采样点之间任何采样点的值的估计。 图中黑色点就是重采样后的点的值。
重采样,双线性插值,双三次插值


SPM12标准模板重采样


  理论说了一大堆,其实实现起来就是几个按钮和几个函数的问题。脑影像在做配准的时候,会将图像重采样到与参考模板相同的分辨率,所以我们可以用这个工具来实现。MNI官方的T1标准模板都是1mm或者2mm体素尺寸的,但是有的时候我们可能需要其他体素尺寸的标准模板,比如3mm的,此时我们可以用SPM12的Reslice工具来把1mm或者2mm的标准模板重采样到3mm。实际应用中,我们把3mm功能影像配准到T1标准模板时,就需要先对T1标准模板重采样到3mm,以保证维度一致,避免可能出现的错误。

  • 基本操作

  spm->Coregister(Reslice)

在这里插入图片描述
  Image Defining Splace就是参考图像,随便找一个MNI空间的符合体素尺寸要求的nifti图像来作为参考即可。Images to Reslice 即输入图像。插值方法是用的样条插值。

在这里插入图片描述
  笔者用像素尺寸为3mm的AAL_61x73x61_YCG.nii脑图谱作为的参考图像,如下图右,把体素尺寸为1mm的MNI标准模板MNI152_T1_1mm.nii,如下图左,转换成体素尺寸为3mm的MNI标准模板MNI152_T1_3mm.nii。
在这里插入图片描述

  • 结果查看

  用MRIcro查看转换结果:MNI152_T1_3mm.nii。

在这里插入图片描述
  用spm_vol()函数来查看转换结果:MNI152_T1_3mm.nii。

在这里插入图片描述


FSL标准模板重采样


  • flirt线性配准命令

flirt [options] -in <inputvol> -ref <refvol> -out <outputvol>

  同样用体素尺寸为3mm的AAL_61x73x61_YCG.nii脑图谱作为的参考图像,把体素尺寸为2mm的MNI标准模板:MNI152_T1_2mm_brain.nii,转换成体素尺寸为3mm的标准模板:MNI152_T1_3mm_brain.nii,默认采用三线性插值。

flirt -in MNI152_T1_2mm_brain.nii -ref AAL_61x73x61_YCG.nii -out MNI152_T1_3mm_brain.nii

# -interp {trilinear,nearestneighbour,sinc,spline}  (final interpolation: def - trilinear) 
  • 结果查看

  用fslinfo查看转换前:MNI152_T1_2mm.nii和转换后:MNI152_T1_3mm.nii的变化情况。

在这里插入图片描述

  用MRIcro查看转换前:MNI152_T1_2mm.nii和转换后:MNI152_T1_3mm.nii的变化情况。
在这里插入图片描述

copyright ©意疏:https://blog.csdn.net/sinat_35907936/article/details/114086796


各体素尺寸的MNI标准模板


链接:https://pan.baidu.com/s/1A_MjRLCT7PSV8hUFYHapCA
提取码:64kc

MNI152_T1_1mm_brain.nii、MNI152_T1_2mm_brain.nii、MNI152_T1_3mm_brain.nii、MNI152_T1_4mm_brain.nii、MNI152_T1_5mm_brain.nii、MNI152_T1_6mm_brain.nii、MNI152_T1_7mm_brain.nii、MNI152_T1_8mm_brain.nii、MNI152_T1_9mm_brain.nii、MNI152_T1_10mm_brain.nii、MNI152_T1_11mm_brain.nii、MNI152_T1_12mm_brain.nii、MNI152_T1_13mm_brain.nii、MNI152_T1_14mm_brain.nii、MNI152_T1_15mm_brain.nii

它们应当覆盖了所有能够用到的体素尺寸,可以作为上述方法的参考模板,也可以直接使用,来自HMM_Task_Download

在这里插入图片描述


更新


  • NIfTI_20140122脑图谱重采样——数据可以4维

reslice_nii('BN_Atlas_246_1mm.nii','BN_Atlas_246_8mm.nii',8,1,0,2)

  从左到右,第一个为输入图像路径,第二个为输出图像路径,第三个为重采样尺寸,这里为8,表示重采样到8mm的体素尺寸,第五个为插值方法。1:三线性插值(默认),2:最近邻插值,3:Fischer的Bresenham插值。图谱采样为了不增加一些小数,label都是整数,所以一般用最近邻插值。

在这里插入图片描述在这里插入图片描述
  • dpabi脑图谱重采样

  流程
在这里插入图片描述

  结果

在这里插入图片描述在这里插入图片描述
  • nilearn脑图谱重采样——数据可以四维

from nilearn.image import resample_to_img, load_img

template = load_img(r'F:\Lab\MNI152_T1_8mm_brain.nii')   # 参考图像
data = load_img(r'F:\Lab\BN_Atlas_246_1mm.nii')
resampled_img = resample_to_img(data, template)
resampled_img.to_filename(r'F:\Lab\niBN_Atlas_246_8mm.nii')  # 保存重采样后的图像

参考


https://www.youtube.com/watch?v=rvW-D5o3ALA

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐