跳转到内容

MINC/软件开发/MINC 2.0 文件格式参考

来自维基教科书,开放世界中的开放书籍

MINC 2.0 文件格式

[编辑 | 编辑源代码]

MINC (医学影像 NetCDF) 1.0 文件格式被设计为医学影像数据的文件格式,它基于 NetCDF (网络通用数据格式) 标准 NETCDF。MINC 专为医学影像研究界设计,提供了一种模态中立的方式来存储医学图像以及丰富且灵活的辅助数据集合。

虽然 MINC 1.0 文件格式在过去十年中被证明既强大又实用,但其用户也发现了一些局限性。特别是,其中三个局限性推动了 MINC 2.0 的设计,这是 MINC 演进的下一步。

第一个局限性是当前版本的 NetCDF 不支持大于 2 GB 的文件。这对于较新的高分辨率功能和解剖影像应用来说是一个重要的局限性。

第二个是需要允许单个医学影像文件包含多个分辨率级别的数据。例如,这对网络图像查看应用非常有用。HDF5 的 HDF5 层次结构组织和支持的更大文件尺寸有助于实现此功能。

第三个动机是需要内部透明的数据压缩。MINC 1.0 库允许使用外部程序(如 gzip、bzip2 等)压缩文件。不幸的是,外部压缩要求即使只检查图像的一小部分,也要解压缩整个文件。此外,压缩必须作为创建文件后的显式后处理步骤应用。这些问题的影响随着文件大小的增加而增加。

为了解决这些问题和其他问题,MINC 开发团队选择实现对 HDF5 (层次结构数据格式 5) 的支持。与 NetCDF 相比,HDF5 提供了对复杂文件结构、层次结构命名空间、结构化和枚举数据类型以及内部压缩的增强支持。

本文档旨在通过定义这些文件使用的特定变量、属性、组织和约定,来描述 MINC 2.0 文件格式的细节,这些约定作为通用 HDF5 格式的专门化实现。本文档中的许多信息摘自 Peter Neelin 撰写的《MINC 程序员参考手册》。

注意:在本文档中,字面 MINC 变量名称、属性名称和预定义值以固定宽度字体显示。

坐标和维度

[编辑 | 编辑源代码]

MINC 2.0 将医学图像的维度与助记文本名称(如 xspacetime)相关联。这种关联既有助于阐明每个维度的解释,也有助于指定共享相同坐标空间的变量之间的关系。维度长度在文件创建时定义,并且在文件写入存储介质后无法更改。

MINC 2.0 坐标系

[编辑 | 编辑源代码]

与 MINC 1.0 一样,MINC 2.0 定义了“体素”和“世界”空间坐标系。体素坐标类似于数组索引:体素坐标值是非负整数,范围从零到沿轴的数据点数量减 1,原点固定在图像的一个角上。

相反,“世界”坐标系反映了图像的真实世界单位和空间方向。MINC 世界坐标是使用维度变量属性 direction_cosinesstepstart 从体素坐标派生的。方向余弦向量是为每个空间维度定义的单位向量。使用 cij 表示轴在 j 方向上的分量 i,则轴 i 的余弦向量 ci 可以写成

ci =( cix, ciy, ciz)

使用 stepi 表示空间轴 istep 属性的值,并类似地定义 starti 表示 start 属性,则该轴上相邻元素之间的向量 vi

vi = stepi * ci

体素坐标中的原点 (0,0,0) 位于世界坐标 (ox,oy,oz),如下所示:

体素空间中的任何齐次坐标 (vx,vy,vz, 1) 可以使用以下缩放、旋转和平移变换转换为其在世界空间中的等效坐标

将这些矩阵相乘,得到以下公式

从世界空间到体素空间的逆变换可以使用以下公式进行

虽然 MINC 2.0 文件可以存储任何方向的数据,但 MINC 2.0 遵循医学成像的惯例,定义世界空间坐标相对于患者的方向。惯例是,正的 x 轴从患者的左侧向右侧增加,正的 y 轴从患者的后方向前增加,正的 z 轴从患者的下部向上增加。

维度变量

[编辑 | 编辑源代码]

为了表示与 MINC 维度对象相关联的完整属性集,MINC 2.0 定义了一个“维度变量”,该变量与相应的维度对象具有相同的名称。在 MINC 2.0 中,这些变量与所有其他变量一样,都作为 HDF5“数据集”实现。

MINC 维度可以具有规则不规则间隔。规则采样维度以恒定间隔采样,而 不规则采样维度以轴上的任意位置采样。

由于规则维度以恒定间隔采样,因此它们完全由它们的原点和步长大小定义。因此,规则维度的维度变量不包含任何有意义的数据。

对于不规则维度,维度变量的值必须是一个向量,其长度等于沿维度采样的点数。向量在给定索引处的值给出该采样点处的维度值。

将 HDF5 数据空间与 MINC 维度相关联

[编辑 | 编辑源代码]

NetCDF 定义了一个命名维度抽象,它允许将维度及其长度与文本符号相关联。然后可以使用该维度来定义任意数量的 NetCDF 变量。MINC 1.0 依赖于此功能来链接相关对象的维度。不幸的是,HDF5 没有实现可比的维度抽象。相反,所有 HDF5 数据对象(数据集和属性)都与称为“数据空间”的 HDF5 结构相关联。HDF5 中的数据空间可以是两种类别之一,“标量”或“简单”。简单数据空间由维度长度的有序列表组成。HDF5 中的数据空间不是全局实体,不能分配符号名称——每个数据对象都与其自己的数据空间相关联。

由于数据空间的结构本身不足以允许软件发现相关数据对象维度之间的关系,因此 MINC 2.0 定义了一个dimorder 属性,该属性使这些关系显式。每个非标量数据对象都必须有一个关联的dimorder 属性。

dimorder 属性的值是一个字符串,它由与维度关联的助记符名称的有序、逗号分隔的列表组成。这为 NetCDF 的命名维度提供了一个足够(尽管不完美)的替代品。


标准维度名称

[编辑 | 编辑源代码]

MINC 为以下维度名称定义了标准解释。专用应用程序可以随意使用其他名称定义替代或补充维度。


  • xspace - 空间轴,定义为从患者的左侧向右侧增加。
  • yspace - 空间轴,定义为从患者的后方向前增加。
  • zspace - 空间轴,定义为从患者的下部向上增加。
  • time - 时间轴。
  • xfrequency - 空间频率轴。
  • yfrequency - 空间频率轴。
  • zfrequency - 空间频率轴。
  • tfrequency - 时间频率轴。
  • vector_dimension - 用于向量或复数数据的轴。如果存在,则必须是最后一个(即变化最快的)维度。


变量

[edit | edit source]

MINC 变量分为四类。第一类是 group 类,它适用于那些用于保存实际图像数据和支持信息的数据对象和名称。第二类是 var-attribute 类,它包含用于限定另一个变量的数据,例如,通过指定另一个变量数据的范围。第三类和第四类是 dimension 类和 dimension-width 类,它们指定 MINC 文件中维度的属性。

为了保持一致性,所有 MINC 变量都作为 HDF5 数据集实现,包括那些可能不包含有用数据的变量。

在 MINC 2.0 中,imageimage-maximage-min 变量不再像 MINC 1.0 中那样是单个对象。一个文件可以包含任意数量的这三个变量的集合,对应于全分辨率数据和可能与图像相关的任何低分辨率“缩略图”数据。

标准 MINC 变量名称

[edit | edit source]
  • image - image 变量属于 group 类。它是实际包含 MINC 文件中图像数据的变量,因此它使用任何类型和维度来表示图像。按照惯例,MINC 将 image 变量的第一个空间维度视为“切片”维度,任何其他空间维度都被视为“图像”维度。image 变量是唯一一个必须出现在 MINC 文件中的变量。
  • image-min - image-min 变量属于 var-attribute 类。如果启用每个切片的图像数据缩放,则此变量必须包含 64 位浮点数据,这些数据提供每个切片的实际范围的最低值。image-minimage-max 变量的维度对应于 image 变量的前一到两个维度。例如,在一个维度顺序为 timezspaceyspacexspace 的 fMRI 数据集中,image-min 变量可能是一个具有 timezspace 维度的二维数组。image-min 的维度更低是可以接受的。例如,该变量可以是沿 time 维度的一维数组,或者它可以是一个标量来指定全局最小实际值。
  • image-max - image-maximage-min 变量的对应变量,只是它包含每个数据切片的实际数据范围的最大值。
  • study - 此变量属于 group 类。它不包含任何有用数据,只用于对包含有关此图像所属研究的信息的那些属性进行分组。由于该变量不包含任何数据,因此类型无关紧要。
  • patient - 与 study 变量一样,此变量属于 group 类并且不包含任何数据。它用于对指定患者身份和特征的属性进行分组。
  • acquisition - acquisition 变量属于 group 类。与 studypatient 变量一样,acquisition 变量从不包含有用数据,只用于对包含有关图像采集参数、模态等的信息的那些属性进行分组。
  • xspace - 属于 dimension 类,它对指定 X 轴的属性进行分组。
  • yspace - 属于 dimension 类,它对指定 Y 轴的属性进行分组。
  • zspace - 属于 dimension 类,它对指定 Z 轴的属性进行分组。
  • time - 属于 dimension 类,它对指定时间轴的属性进行分组。
  • xfrequency - 属于 dimension 类,它对指定空间频率轴的属性进行分组。
  • yfrequency - 属于 dimension 类,它对指定空间频率轴的属性进行分组。
  • zfrequency - 属于 dimension 类,它对指定空间频率轴的属性进行分组。
  • tfrequency - 属于 dimension 类,它对指定时间频率轴的属性进行分组。
  • xspace-width - 属于 dimension-width 类,它对指定沿 X 轴样本宽度的属性进行分组。
  • yspace-width - 属于 dimension-width 类,它对指定沿 Y 轴样本宽度的属性进行分组。
  • zspace-width - 属于 dimension-width 类,它对指定沿 Z 轴样本宽度的属性进行分组。
  • time-width - 属于 dimension-width 类,它对指定沿时间轴样本宽度的属性进行分组。
  • xfrequency-width - 属于 dimension-width 类,它对指定沿空间频率轴样本宽度的属性进行分组。
  • yfrequency-width - 属于 dimension-width 类,它对指定沿空间频率轴样本宽度的属性进行分组。
  • zfrequency-width - 属于 dimension-width 类,它对指定沿空间频率轴样本宽度的属性进行分组。
  • tfrequency-width - 属于 dimension-width 类,它对指定沿时间频率轴样本宽度的属性进行分组。


层次结构

[edit | edit source]

MINC 2.0 广泛使用 HDF5 的层次结构功能。HDF5 允许创建“组”,这大致对应于 UNIX 目录,以及“数据集”,这大致对应于 UNIX 文件。HDF5 组是一个容器,它可以包含任意数量的其他组或数据集。

文件中的所有 HDF5 对象都被视为“根”组的子对象,类似于 UNIX 文件系统中的根目录。

为了允许 MINC 2.0 数据与单个 HDF5 文件中的其他数据结构共存,并帮助将 MINC 2.0 文件与其他 HDF5 文件区分开来,在 HDF5 根组中创建了一个名为 minc-2.0 的 MINC 组。此组应该是 MINC 程序在 HDF5 根组中创建的唯一条目。所有其他 MINC 对象都在 minc-2.0 组内(或“下方”)创建。

所有 MINC 2.0 维度变量都放置在一个名为 dimensions 的子组中。这些维度变量被认为是对文件中的所有 MINC 对象全局的。

MINC 2.0 信息变量(studypatient 等)放置在一个名为 info 的子组中。此子组旨在作为与扫描、模态、研究等相关的所有辅助数据的存储库。

MINC 2.0 图像变量放置在一个名为 image 的子组中。对于文件中存储的每个分辨率,必须有一个名为 012 等等的子组。全分辨率数据存储在组 0 中,并且每个连续整数对应于所有图像维度的 2 倍缩减。在这些子组中的每一个中,都有三个数据集:imageimage-minimage-max

这种层次结构的主要理由是为了预测 MINC 文件格式的未来扩展。其他类别的 数据可以存储在一个与 image 组并列的组中。例如,可以添加一个 geometryobjects 组来包含与图像相关联或从图像派生的几何数据。这些几何对象可能与图像共享维度。 图 1:MINC2.0 层次结构

属性

[edit | edit source]

属性是辅助数据对象,通常大小有限,与 MINC 2.0 文件中的另一个对象相关联。这些属性通常由文本或数字数据组成。在 MINC 中,属性用于指定有关变量或文件的附加信息。

MINC 属性可以被认为属于三类:应用于整个 MINC 文件本身的属性,在定义 MINC 文件组织方面起结构作用的属性,以及包含与特定组或数据对象相关联的数据或参数的属性。

某些字符串属性是“自由格式”,可以包含任何值,而不会对格式和长度有任何限制。其他字符串属性被认为具有特定的格式。仍然其他字符串属性必须包含多个众所周知的 值之一。在这种情况下,众所周知的字符串使用下划线字符填充到最长合法值的长度。采用此约定是为了避免 NetCDF 对增加现有属性长度施加的限制。由于 HDF5 中取消了此限制,因此未来的属性无需遵循此约定。

数值属性可以是整数或浮点格式。MINC 库提供属性访问例程,这些例程在检索时会自动将值转换为所需的类型。

HDF5 属性可以附加到任何组或数据集。在 MINC 2.0 中,两个属性,historytitle,附加到 minc-2.0 组。所有其他 MINC 属性都是特定变量的局部属性。

MINC 2.0 全局属性

[edit | edit source]

这两个属性,每个属性都由一个文本字符串组成,适用于整个 MINC 文件。因此,它们附加到 minc-2.0 组。

  • history - 一个 全局 字符串属性,用于实现审计跟踪。这是一个字符数组,对修改过数据集的每个程序调用都有一个行。所有 MINC 应用程序都应该为每个处理步骤追加包含以下内容的行:日期、时间、用户名、程序名称和命令参数。此属性应被视为强制性的。
  • title - 一个 全局 字符串属性,它提供对 MINC 文件内容的描述。实际上,这是可选的,并且很少使用。


MINC 2.0 结构属性

[编辑 | 编辑源代码]

多个 MINC 属性用于描述变量类型以及变量之间的关系。

这些变量被认为是“结构性”的,因为它们不传达有关 MINC 文件中存储的医学图像的任何有用信息,而是用于支持 MINC 格式本身。

comments 外,每个属性都应被视为任何 MINC 标准变量的必需属性。

  • comments - 字符串,提供有关变量或组的描述性信息,仅供参考。
  • dimorder - 字符串,标识与数据对象关联的符号维度。此属性是一个有序的、用逗号分隔的这些维度名称列表。所有非标量 MINC 变量都必须定义此属性。
  • vartype - 字符串,标识变量的类别,为 group________dimension____dim-width____var_attribute 之一。
  • varid - 字符串,标识变量与 MINC 规范的关系。所有 MINC 标准变量都应将其设置为“MINC standard variable”。非标准变量可以忽略此属性或将其设置为其他字符串值。
  • version - 字符串,标识此变量的版本。这指的是变量的格式,而不是文件的格式本身。在 MINC 2.0 中,此字符串始终设置为 MINC Version 1.0,用于 MINC 标准变量。此值用于与 MINC 1.0 软件向后兼容。

MINC 2.0 信息属性

[编辑 | 编辑源代码]

这些属性在提供有关图像数据的支持信息方面发挥信息作用。

MINC 中的信息属性可以是文本字符串或数字。

image 变量属性

[编辑 | 编辑源代码]

这些属性提供有关 MINC 2.0 文件中包含的图像数据的状态和类型的其他信息。

  • complete - 布尔属性(值为 true_false),指示变量是否已完整写入。这可用于在写入图像时检测程序故障,因为在处理时 complete 被设置为 false,并且在所有数据都被处理并写入文件后被设置为 true_
  • valid_range - 包含两个数字的向量,指定此变量的最小值和最大有效值。此范围之外的值必须被视为缺失或未初始化。在 MINC 中,向量中两个值的顺序无关紧要。此属性应被视为 MINC image 变量的必需属性,除非变量使用默认范围,默认范围被定义为(可能为有符号或无符号)整数类型的完整范围,或浮点类型的区间 (0.0, 1.0)。对于任何其他 MINC 变量,它不是必需的。

study 变量属性

[编辑 | 编辑源代码]

这些属性提供有关收集图像的研究的辅助信息。这些属性与 study 变量分组,用于命名空间组织目的,并且基于 ACR-NEMA 约定 ACRNEMA88。所有这些属性都是可选的,并且没有定义默认值。


  • admitting_diagnosis - 收治诊断的字符串描述。
  • attending_physician - 字符串,给出执行检查的医生的姓名。
  • department - 字符串,标识进行研究的部门。
  • device_model - 字符串,指定成像设备的型号。
  • institution - 字符串,标识进行研究的机构。
  • manufacturer - 字符串,指定成像设备制造商的名称。
  • modality - 字符串,表示使用的成像方式,通常为:PET__SPECTGAMMAMRI__MRS__MRA__CT___DSA__DR___label 之一。
  • operator - 字符串,给出成像设备操作员的姓名。
  • procedure - 字符串,描述所采用的程序。
  • radiologist - 字符串,给出解释检查的放射科医生的姓名。
  • referring_physician - 字符串,给出患者的主治医生的姓名。
  • start_year - 数字,给出研究开始日期的年份。
  • start_day - 数字,给出研究开始日期的日(1-31)。
  • start_hour - 数字,给出研究开始时间的时(0-23)。
  • start_minute - 数字,给出研究开始时间的分(0-59)。
  • start_month - 数字,给出研究开始日期的月(1-12)。
  • start_seconds - 数字,给出研究开始时间的秒(如果需要,包括秒的几分之一)。如果不需要,可以省略整个时间表示或秒的几分之一。
  • start_time - 字符串,给出研究开始的时间和日期,格式为 YYYYMMDD HHMMSS.FFFFFF,其中 FFFFFF 是秒的几分之一的字符串表示。如果不需要,可以省略整个时间表示或秒的几分之一。
  • station_id - 字符串,标识生成图像的特定成像系统。
  • study_id - 字符串,标识研究。


patient 变量属性

[编辑 | 编辑源代码]

这些属性提供有关患者或受试者的识别信息,与 patient 变量分组,用于命名空间组织目的。它们基于 ACR-NEMA ACRNEMA88 约定,用于患者识别。所有这些属性都是可选的,并且没有定义默认值。

  • address - 字符串,给出患者的地址。
  • age - 数字,给出患者的年龄(以年为单位)。
  • birthdate - 字符串,以 YYYYMMDD 格式指定患者的出生日期。
  • full_name - 字符串,指定患者的全名。
  • identification - 字符串,指定患者的识别信息。
  • insurance_id - 字符串,给出患者的保险计划 ID。
  • other_ids - 字符串,给出患者的其他识别信息。
  • other_names - 字符串,给出患者的其他姓名。
  • sex - 字符串,指定患者的性别:male__femaleother_
  • size - 数字,给出患者的身高或长度(以米为单位)。
  • weight - 数字,给出患者的体重(以公斤为单位)。


acquisition 变量属性

[编辑 | 编辑源代码]

这些属性存储有关采集的参数。所有这些属性都是可选的,并且没有定义默认值。


  • contrast_agent - 字符串,标识对比剂或推动剂。
  • dose_units - 字符串,给出剂量单位。
  • echo_time - 数字,给出 90 度脉冲的中间与自旋回波产生的中间之间的时间(以秒为单位)。
  • imaged_nucleus - 字符串,指定在成像频率下产生共振的原子核。
  • imaging_frequency - 成像原子核的进动频率(以赫兹为单位)。
  • injection_day - 整数,给出注射的日(1-31)。
  • injection_hour - 整数,给出注射的时(0-23)。
  • injection_length - 数字,给出注射的时间持续时间(以秒为单位)。
  • injection_minute 整数,给出注射的分(0-59)。
  • injection_month - 整数,给出注射的月(1-12)。
  • injection_seconds - 浮点数,给出注射的秒。
  • injection_time - 字符串,给出注射的时间(和日期)。
  • injection_year - 整数,给出注射的年。
  • injection_dose - 注射的放射性核素或对比剂的总剂量(以 dose_units 指定的单位为单位)。
  • injection_route - 字符串,标识注射的给药途径。
  • injection_volume - 数字,给出注射的体积(以毫升为单位)。
  • inversion_time - 从反转射频脉冲的中间到检测纵向磁化量的 90 度脉冲的中间之间的时间(以秒为单位)。
  • num_averages - 在更改任何参数之前重复给定脉冲序列的次数。
  • protocol - 字符串,描述图像采集的协议。
  • radionuclide - 字符串,指定给药的同位素。
  • radionuclide_halflife - 放射性核素的半衰期(以秒为单位)。
  • repetition_time - 数字,给出脉冲序列之间的时间(以秒为单位)。
  • scanning_sequence - 字符串,描述采集的数据类型(例如,对于 MR - IR、SE、PS 等)。
  • tracer - 字符串,标识注射的用放射性核素标记的示踪剂。


维度变量属性

[编辑 | 编辑源代码]

本节介绍与维度或维度宽度变量相关的属性。


  • alignment - 字符串,指示坐标相对于每个样本的位置,为 start_centreend___ 之一。当第一次创建变量时,此属性对于 time 维度设置为 start_,对于空间维度设置为 centre。仅适用于维度变量。注意: 此属性不会被 MINC 工具或库使用,因此应被视为仅用于信息目的。
  • direction_cosines - 包含 3 个元素的数字向量,给出轴的指向余弦。虽然轴被标记为 x、y 和 z,但它们实际上可能具有显著不同的方向 - 此属性允许精确地指定相对于真实轴的方向。向量应为归一化单位向量。

如果这些属性不存在,则假定它们具有以下默认值

对于 xspace:(1, 0, 0),对于 yspace:(0, 1, 0),对于 zspace:(0, 0, 1)

direction_cosines 属性仅适用于维度变量。

  • length - 指定此维度长度(以样本数计)的整数。
  • filtertype - 指定卷积滤波器形状的字符串。目前,可以是 square____gaussian__triangular 之一。如果缺少此属性,则应假定值为 square____。仅适用于维度宽度变量。
  • spacetype - 识别坐标空间类型的字符串。目前为 native___(扫描仪的坐标系)、talairach_(脑图像的标准化坐标系)或 callosal__(另一个标准化坐标系)之一。如果缺少此属性,则应假定 spacetypenative___。仅适用于维度变量。
  • spacing - 字符串,值为 regular__ 表示规则间隔网格,值为 irregular 表示样本间隔不规则。如果此属性的值为 irregular,则维度变量必须是随同名维度的向量变化。如果缺少此属性,则应假定值为 regular__。可用于维度和维度宽度变量。
  • start - 指定维度索引 0 的世界坐标的数字(在应用余弦变换后)。如果缺少此属性,则应假定值为 0.0。仅适用于维度变量。
  • step - 表示规则间隔样本间步长的数字。此值可能为负数以反转方向(例如,指定 xspace 从病人右侧运行到左侧)。如果间隔为 irregular,则该值应为平均步长。如果缺少此属性,则应假定值为 1.0。仅适用于维度变量。
  • units - 指定维度的单位的字符串(如果适用)。单位应与 UCAR udunits 库兼容。在 MINC 2.0 中,此属性通常仅用于提供信息,不会被 MINC 库代码解释。
  • width - 数值属性,用于给出规则采样维度的所有样本的半峰全宽。它可以用于不规则宽度以指定平均宽度。如果缺少此属性,则应假定值为 1.0。仅适用于维度宽度变量。


功能细节

[编辑 | 编辑源代码]

数据类型

[编辑 | 编辑源代码]

与当前可用的 NetCDF 版本不同,HDF5 支持结构化(记录)和枚举数据类型。

结构化和复杂数据类型

[编辑 | 编辑源代码]

在此版本规范中,MINC 2.0 支持的唯一结构化数据类型是多维数组。这允许 MINC 2.0 应用程序实现向量或张量数据类型,并反过来允许将这些数据类型作为“额外”维度访问,如果需要的话。

此规范定义了四种“复杂”数据类型:16 位有符号整数、32 位有符号整数、32 位浮点数和 64 位浮点数。在所有情况下,实数值都位于给定体素中的虚数值之前。

任何可能发生的整数到实数的缩放都将针对复杂或结构化数据类型的每个成员进行统一计算。缩放不适用于浮点复数。

此规范没有定义任何向量和张量实现的细节,这些结构对于当前目的而言是特定于应用程序的。

MINC 2.0 继续支持通过使用 vector_dimension 维度来支持向量和复杂数据的另一种机制。

枚举数据类型

[编辑 | 编辑源代码]

枚举数据类型将符号名称分配给数据类型所取的每个合法值。此功能最明显的应用是针对所谓的“带标签”图像,例如,组织分类算法的输出。

此功能将使用 HDF5 库对枚举数据类型的本机支持来实现。HDF5 库允许任何整数类型(有符号或无符号)用作枚举的基本类型。

MINC 2.0 库仅对标准整数和自定义枚举数据类型之间的范围检查和转换提供最小的支持。

目前,此规范没有定义任何标准枚举数据类型。程序员可以以最适合应用程序的方式定义自定义枚举。在规范的未来版本中,我们可能会定义一些常见枚举的实现和解释(例如,对于组织类型)。


压缩和块结构

[编辑 | 编辑源代码]

MINC 文件可以自由使用 HDF5 1.6.0 库支持的任何形式的压缩。这包括两种无损压缩方法:“gzip”压缩(一种修改后的 Lempel-Ziv 方法)和“szip”(一种由 R.F.Rice 开发的无损压缩方法 Rice79)。压缩通常对应用程序程序员不可见,尽管程序员可以查询文件的压缩状态。

压缩在 HDF5 文件中以每个数据集为基础应用,因此可以压缩某些数据集,而将其他数据集保持为未压缩状态。为了简化,MINC 2.0 库将对文件中的所有图像数据应用相同的压缩算法,并且不会支持其他数据集的压缩。

在 HDF5 中启用压缩时,压缩数据集必须使用 chunked 布局存储。分块数据集存储在一系列块中,这些块具有与数据集相同的维度。这种存储方法可能会提高某些图像处理算法的平均数据访问时间,因此 MINC 2.0 库允许指定分块,而无需压缩。

多分辨率图像

[编辑 | 编辑源代码]

MINC 2.0 中的多分辨率图像使用“多缩略图”方法实现,其中一个或多个低分辨率图像派生自全分辨率图像。每个连续缩略图图像的尺寸将相对于下一高分辨率图像减少一半。这意味着,忽略存储开销,缩略图图像最多应增加全分辨率数据的 14.29%(1/7)。

如前所述,多分辨率图像存储在一系列单独的 imageimage-maximage-min 变量中,称为 resolution groups。全分辨率数据存储在路径 /minc-2.0/image/0/image 下,半分辨率数据存储在路径 /minc-2.0/image/1/image 下,依此类推。

只有全分辨率图像可以被应用程序直接修改。库将重新计算 MINC 2.0 文件中定义的所有分辨率组的降分辨率数据,无论是显式地响应程序员的请求,还是隐式地响应文件关闭操作。

在 MINC 2.0 的初始实现中,缩略图图像体素将使用下一高分辨率图像的体素的简单平均值来计算。但是,MINC 2.0 库将提供扩展机制,供程序员实现和使用更复杂的缩略图计算(如果需要)。

使用多种分辨率完全是可选的。MINC 库仅重新计算已定义分辨率组条目的低分辨率图像。并非所有中间分辨率组都需要存在才能使文件有效。除了强制性的全分辨率数据之外,MINC 2.0 文件还可以定义路径 /minc-2.0/image/3/image 下的单个 1/8 分辨率缩略图,库必须仅重新计算并存储该分辨率。

所有缩略图图像必须具有与全分辨率图像相同的数据类型和维度顺序。

必须对定义的所有分辨率使用和遵守 complete 属性。此属性用于确定每个图像的有效性。

最小 MINC 2.0 文件

[编辑 | 编辑源代码]

在所有这里描述的变量、维度和属性中,只有 image 变量及其关联的维度是定义有效 MINC 文件所必需的。

但是,所有 MINC 2.0 文件都应至少包含一个空组框架,该框架包含 minc-2.0 组和三个主要子组 imageinfodimensions

任何缺失的属性都假定具有默认值或未定义。

非标准对象

[编辑 | 编辑源代码]

虽然 MINC 指定了许多对象的结构和解释,但 MINC 程序必须以优雅的方式处理包含非标准结构的 MINC 文件。这对 MINC 程序提出了两项要求。首先,MINC 程序必须在包含非标准变量和属性的文件上正确运行。其次,MINC 程序必须将非标准属性和变量从输入文件复制到结果输出文件,而不进行更改。

这种行为允许添加任意变量和/或属性,这些变量和/或属性扩展了标准 MINC 命名空间。作为一个小例子,这在数据库应用程序中已经证明非常有用,在数据库应用程序中,数字签名被添加到 MINC 文件中,以对数据提供冗余检查。

强烈建议将任何其他或非标准信息属性放在层次结构的 info 分支下。存在特定编程接口来支持此约定。

已弃用关键字

[编辑 | 编辑源代码]

MINC 1.0 规范中定义的一些对象名称在 MINC 2.0 规范中不再使用。但是,为了避免潜在的错误或混淆,这些名称应被视为“保留”名称,并且在未来的应用程序中不得重新定义。在某些情况下,库可能会解释或模拟这些关键字,以提供与 MINC 1.0 的向后兼容性。

  • rootvariable - 被 HDF5 层次结构取代。
  • parent - 被 HDF5 层次结构取代。
  • children - 被 HDF5 层次结构取代。
  • signtype - HDF5 定义了有符号和无符号类型。
  • _FillValue - HDF5 定义了用于控制数据集“填充值”的显式机制。


Robert D. Vincent

Leila Baghdadi(修复了损坏的链接并在 2012/10/19 上传了修改后的层次结构图像)

Vladimir S. FONOV(修复了之前修复者遗留的未修复问题)

Tarek Sherif(修复了坐标转换方程)

华夏公益教科书