-
TR
Time of Repetition 重复时间
-
3T MRI / 1.5T MRI
T代表特斯拉Tesla,指MRI中使用的磁体强度,影响成像质量
-
多序列 Multisequence
Such as:T1-weighted, T1- weighted inversion recovery, and T2-weighted fluid attenuated inversion recovery
-
多模态 multi-modal MR images(跟多序列应该是一个意思)
Such as:T1-weighted, T2-weighted
-
金标准 gold standard
金标准是指当前临床医学界公认的诊断疾病的最可靠方法。(使用金标准的目的就是准确区分受试对象是否为某病患者)
机器学习领域更倾向于使用Ground truth,也可以认为__金标准__能够很好地代表Ground truth
-
部分容积效应 Partial Volume Effect
一张512×512像素的磁共振图像,是把人体那一层的组织切成512×512个小立方体,采集每个小方体里的身体组织T1,T2信号的均值。这个小立方体称为体素。 像素正方体如果刚好处在信号差异大的地方,部分容积效应就明显。
如果刚好一块取到灰质和白质的交界处,那么这块的灰度值就是这部分组织的均值(即灰质和白质的均值),不灰不白,也就会导致边界模糊
一个体素所采样的体积(1x1x1mm,1x1x3mm等)越小,图像质量越高,轮廓细节也就越清晰
图像格式
目前遇到过的格式:
-
Analyze 7.5:使用一对文件来保存图像的完整信息
.img
以二进制保存图像数据,.hdr
保存图像的meta-information(如:朝向orientation 等) -
MINC (Medical Imaging NetCDF):单个
.mnc
文件保存完整的图像信息MINC Toolkit提供了格式转换等工具,Ubuntu可以直接通过
apt install minc-tools
安装,好像没有Windows版本 -
NIfTI-1/2 (Neuroimaging Informatics Technology Initiative):Analyze格式的改良版;保留Analyze的
.hdr/.img
双文件保存形式,另外支持单个.nii
文件保存完整的图像信息
用python读入医学图像
符号:
- S:矢状面 (Sagittal) 的切片数,冠状轴
- C:冠状面 (Coronal) 的切片数,失状轴
- A:横断面 (Axial) 的切片数,垂直轴
Orientation and Voxel-Order Terminology: RAS, LAS, LPI, RPI, XYZ and All That
SimpleITK
>>> import SimpleITK
>>> img = SimpleITK.ReadImage(img_path)
>>> img_np = SimpleITK.GetArrayFromImage(img)
>>> img.GetSize()
(144, 192, 256)
>>> img_np.shape
(256, 192, 144)
关于Analyze格式:新版本的SimpleITK(2.0.1)会显示弃用警告:
WARNING: In /usr/share/miniconda/envs/bld/conda-bld/simpleitk_1602768442566/work/build/ITK/Modules/IO/NIFTI/src/itkNiftiImageIO.cxx, line 1009
NiftiImageIO (0x564c43e95320): .../dataset/iseg2017/subject-0-label.img is Analyze file and it's deprecated
解决方案,在读入图像前,执行:
SimpleITK.ProcessObject_SetGlobalWarningDisplay(False)
关于MINC格式,SimpleITK好像无法读取
RuntimeError:
Exception thrown in SimpleITK ImageFileReader_Execute: /tmp/SimpleITK/Code/IO/src/sitkImageReaderBase.cxx:105:
sitk::ERROR: Unable to determine ImageIO reader for "BrainWeb/slice_thickness/t1_icbm_normal_9mm_pn0_rf0.mnc.gz"
scikit-image
>>> import skimage.io
>>> img_np = skimage.io.imread(img_path, plugin='simpleitk')
>>> img_np.shape # 图像ndarray的形状为 (T, C, S)
(256, 192, 144)
这种方法底层还是调用的SimpleITK包(需要另外安装SimpleITK),也会出现上述弃用警告
NiBabel
>>> import nibabel
>>> import numpy
>>> img = nibabel.load(img_path)
>>> img_np = img.get_fdata() # 可以指定dtype,默认float64
>>> img.shape
(144, 192, 256)
>>> img_np.shape
(144, 192, 256)
以上三种方法读入的图像数据(ndarray)是完全一致的(每个像素都相同):
import skimage.io as io
import SimpleITK as sitk
import nibabel as nib
filename = 'xxx'
plugin = 'simpleitk'
img1 = io.imread(filename, plugin=plugin)
img2 = sitk.ReadImage(filename)
img3 = nib.load(filename)
img2 = sitk.GetArrayFromImage(img2)
img3 = img3.get_fdata().transpose(2, 1, 0)
print((img1 == img2).all()) # True
print((img2 == img3).all()) # True
print((img1 == img3).all()) # True
Convert3D
安装ITK-SNAP会附带这个工具,位于ITK-SNAP安装目录的bin文件夹下 (Windows)
Convert3D (unix name c3d) is a command-line image processing tool that offers complementary features to ITK-SNAP.
设置数据类型(dtype):-type: Specify pixel type for image output
# -type < char | uchar | short | ushort | int | uint | float | double >
c3d input.img -type uchar out.img
设置体素大小(spacing):-spacing: Set voxel spacing
c3d input.nii -spacing 1x1x1mm -o out.img
设置图像方向(spacing):-orient: Change image orientation
c3d input.img -orient LPI -o out.img
设置图像原点(spacing):-origin: Set image origin
c3d input.img -origin 100x100x100mm -o out.img