跳转到内容

MINC/软件开发/MINC1-程序员参考

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


维度变量和属性名称

[编辑 | 编辑源代码]

在所有这里描述的变量、维度和属性中,只有变量 MIimage 及其维度需要存在于 MINC 文件中。文件中可能存在额外的变量、维度和属性 - 无法识别的变量和属性应该被忽略。

关于属性约定的说明。所有数值应存储在数值类型之一中 (NC_BYTENC_SHORTNC_INTNC_FLOATNC_DOUBLE)。一些数值属性必须以明确的单位指定 - 时间属性 (如 MIrepetition_timeMIradionuclide_halflife) 以秒为单位。其他属性有一个关联的属性来给出单位 - 例如 MIinjection_doseMIdose_units

NetCDF标准属性

[编辑 | 编辑源代码]

这些属性可用于任何变量。可以从 NetCDF 用户指南中获得更完整的描述。

  MIunits

指定变量值的单位,以字符串形式 - 单位应与 udunits 库兼容。

  MIlong_name

一个字符串,用于提供对人类可读的变量的文本描述。

  MIvalid_range

一个包含两个数字的向量,指定变量中有效的最小值和最大值。对于 MINC 例程,顺序并不重要。对于 MIimage 变量,此属性 (或 MIvalid_maxMIvalid_min) 应始终存在,除非整数类型的完整范围和浮点类型的 [0.0,1.0] 默认值是正确的。

  MIvalid_max

一个表示变量有效最大值的数字。

  MIvalid_min

一个表示变量有效最小值的数字。

  MI_FillValue

用于填充变量中未明确写入的值的数字。

  MItitle

一个全局字符串,提供对文件内容的描述。

  MIhistory

一个全局字符串,应存储修改过文件的每个程序的一行。每行应包含程序名称和参数。

MINC通用属性

[编辑 | 编辑源代码]

这些属性适用于文件中的任何变量。

  MIvartype

一个字符串,标识变量的类型。应为 MI_GROUPMI_DIMENSIONMI_DIM_WIDTHMI_VARATT 之一。

  MIvarid

一个字符串,标识变量的来源。所有标准 MINC 变量都应具有此属性,其值为 MI_STDVAR。用户创建的变量应具有与其他应用程序使用的名称不同的独特名称。

  MIsigntype

NetCDF 格式不需要知道变量的符号,因为它不解释值 - 它留给调用程序来处理整数的符号。由于 MINC 接口转换变量,因此它必须具有此信息。MIsigntype 是一个字符串,其值为 MI_SIGNEDMI_UNSIGNED。默认值为字节的 MI_UNSIGNED 和所有其他类型的 MI_SIGNED

  MIparent

一个字符串,按名称标识此变量的父变量 (在数据层次结构中或作为此变量属性的父变量)。

  MIchildren

一个换行符分隔的列表,包含此变量的子变量 (在数据层次结构中)。

  MIcomments

应包含在该变量中的任何文本。

  MIversion

一个字符串,标识文件版本。当前版本为 MI_CURRENT_VERSION。每个版本都可以用 MI_VERSION_1_0 格式的常量标识。

常量 MI_TRUEMI_FALSE 用于布尔属性。

维度和维度变量

[编辑 | 编辑源代码]

以下是维度名称及其对应的维度变量。只有 MIvector_dimension 没有对应的维度变量。

  MIxspace

x 轴的维度和坐标变量。

  MIyspace

y 轴的维度和坐标变量。

  MIzspace

z 轴的维度和坐标变量。

  MItime

变量时间轴的维度和坐标。

  MItfrequency

时间频率的维度和坐标变量。

  MIxfrequency

沿 x 轴的空间频率的维度和坐标变量。

  MIyfrequency

沿 y 轴的空间频率的维度和坐标变量。

  MIzfrequency

沿 z 轴的空间频率的维度和坐标变量。

  MIvector_dimension

仅用于矢量场的组件的维度。

除了维度变量之外,我们还可以拥有维度宽度变量,它们指定每个点的样本的 FWHM 宽度。

  MIxspace_width

沿 x 轴的样本宽度。

  MIyspace_width

沿 y 轴的样本宽度。

  MIzspace_width

沿 z 轴的样本宽度。

  MItime_width

沿时间轴的样本宽度。

  MItfrequency_width

沿时间频率轴的样本宽度。

  MIxfrequency_width

沿 x 空间频率轴的样本宽度。

  MIyfrequency_width

沿 y 空间频率轴的样本宽度。

  MIzfrequency_width

沿 z 空间频率轴的样本宽度。

与维度和维度宽度变量相关的属性如下所示

  MIspacing

一个字符串,其值为 MI_REGULAR (对于等间距网格) 或 MI_IRREGULAR (对于样本的不规则间距)。如果值为 MI_REGULAR,则允许变量为标量而不是随同名维度变化的向量。可用于维度和维度宽度变量。

  MIstep

一个数字,指示等间距样本之间的步长。此值可以为负数,以指示方向 (例如,指定 MIxspace 从患者右侧运行到左侧)。如果间距不规则,则该值可以是平均步长。仅适用于维度变量。

  MIstart

维度的索引 0 的坐标。仅适用于维度变量。

  MIspacetype

一个字符串,标识坐标空间的类型。目前为 MI_NATIVE 之一 (扫描仪的坐标系)、MI_TALAIRACH (标准化的坐标系) 或 MI_CALLOSAL (另一个标准化的坐标系)。仅适用于维度变量。

  MIalignment

一个字符串,指示坐标相对于每个样本的位置 (记住每个样本都有一个宽度)。可以为 MI_STARTMI_CENTREMI_END 之一。仅适用于维度变量。

  MIdirection_cosines

一个包含 MI_NUM_SPACE_DIMS (=3) 个元素的向量,给出轴的方向余弦。虽然轴被标记为 x、y 和 z,但它们实际上可能具有明显不同的方向 - 此属性允许精确地指定相对于真实轴的方向。仅适用于维度变量。请注意,方向余弦与相应轴的点积 <function>(1,0,0), (0,1,0) 或 (0,0,1)</function> 应为正数,以便属性 MIstep 的符号包含方向信息。

  MIwidth

对于规则维度宽度,此数值属性给出所有样本的 FWHM 宽度。它可以用于不规则宽度,以指定平均宽度。仅适用于维度宽度变量。

  MIfiltertype

一个字符串,指定卷积滤波器的形状。目前,可以是以下之一:MI_SQUAREMI_GAUSSIANMI_TRIANGULAR。仅适用于维度宽度变量。

根变量

[编辑 | 编辑源代码]

变量 MIrootvariable 用作数据层次结构的根,其 MIchildren 属性指向第一级组变量(包括所有 MINC 组变量),其 MIparent 属性为空字符串。

图像变量

[编辑 | 编辑源代码]

变量 MIimage 用于存储图像数据。

  MIimagemax

一个变量属性(即指向同名变量的属性),存储图像的真实值最大值。此变量在 MIimage 的图像维度上不应变化。此变量的单位定义图像的单位。

  MIimagemin

类似于 MIimagemax,但存储图像的真实值最小值。MIimagemax 应在没有 MIimagemin 的情况下存在,反之亦然。

  MIcomplete

一个布尔属性(值为 MI_TRUEMI_FALSE),指示该变量是否已完整写入。这可用于在写入处理后的图像时检测程序故障:MIcomplete 在开始时设置为 MI_FALSE,并在处理结束时更改为 MI_TRUE

患者变量

[编辑 | 编辑源代码]

变量 MIpatient 是一个组变量,没有维度,也没有有用的值。它仅用于将有关患者的信息分组在一起。属性是根据 ACR-NEMA 惯例建模的。

  MIfull_name

一个字符串,指定患者的全名。

  MIother_names

一个字符串,给出患者的其他姓名。

  MIidentification

一个字符串,指定患者的识别信息。

  MIother_ids

一个字符串,给出其他 ID。

  MIbirthdate

一个字符串,指定患者的出生日期。

  MIsex

一个字符串,指定患者的性别:MI_MALEMI_FEMALEMI_OTHER

  MIage

一个数字,给出患者的年龄。

  MIweight

患者的体重(公斤)。

  MIsize

患者的身高或身长(米)。

  MIaddress

一个字符串,给出患者的地址。

  MIinsurance_id

一个字符串,给出患者的保险计划 ID。

研究变量

[编辑 | 编辑源代码]

有关研究的信息在 MIstudy 变量中分组在一起,该变量没有维度或值。属性是根据 ACR-NEMA 惯例建模的。

  MIstart_time

字符串,给出研究开始的时间(和日期)。

  MIstart_year

整数,给出开始年份。

  MIstart_month

整数,给出开始月份(1-12)。

  MIstart_day

整数,给出开始日期(1-31)。

  MIstart_hour

整数,给出开始小时(0-23)。

  MIstart_minute

整数,给出开始分钟(0-59)。

  MIstart_seconds

浮点数,给出开始秒数。

  MImodality

成像方式:MI_PETMI_SPECTMI_GAMMAMI_MRIMI_MRSMI_MRAMI_CTMI_DSAMI_DR 之一。

  MImanufacturer

字符串,给出设备制造商的名称。

  MIdevice_model

字符串,标识设备型号。

  MIinstitution

字符串,标识机构。

  MIdepartment

字符串,标识部门。

  MIstation_id

字符串,标识生成图像的机器。

  MIreferring_physician

患者的主治医生的姓名。

  MIattending_physician

执行检查的医生。

  MIradiologist

解释检查的放射科医生。

  MIoperator

操作扫描仪的技术人员的姓名。

  MIadmitting_diagnosis

字符串,描述入院诊断。

  MIprocedure

字符串,描述所采用的程序。

  MIstudy_id

字符串,标识研究。

采集变量

[编辑 | 编辑源代码]

有关采集本身的信息存储为 MIacquisition 变量的属性(同样,没有维度,也没有值)。

  MIprotocol

字符串,描述图像采集的方案。

  MIscanning_sequence

字符串,描述所采集数据的类型(例如,对于 MR - IR、SE、PS 等)。

  MIrepetition_time

脉冲序列之间的间隔时间(秒)。

  MIecho_time

90 度脉冲的中点到自旋回波生成的中点之间的间隔时间(秒)。

  MIinversion_time

反转射频脉冲的中点到检测纵向磁化量的 90 度脉冲的中点之间的间隔时间(秒)。

  MInum_averages

在更改任何参数之前重复给定脉冲序列的次数。

  MIimaging_frequency

成像核的进动频率(Hz)。

  MIimaged_nucleus

字符串,指定在成像频率下共振的核。

  MIradionuclide

字符串,指定给药的同位素。

  MIcontrast_agent

字符串,标识对比剂或推注剂。

  MIradionuclide_halflife

放射性核素的半衰期(秒)。

  MItracer

字符串,标识用注射的放射性核素标记的示踪剂。

  MIinjection_time

字符串,给出注射的时间(和日期)。

  MIinjection_year

整数,给出注射年份。

  MIinjection_month

整数,给出注射月份(1-12)。

  MIinjection_day

整数,给出注射日期(1-31)。

  MIinjection_hour

整数,给出注射小时(0-23)。

  MIinjection_minute

整数,给出注射分钟(0-59)。

  MIinjection_seconds

浮点数,给出注射秒数。

  MIinjection_length

注射持续时间(秒)。

  MIinjection_dose

注射的放射性核素或对比剂的总剂量(以 MIdose_units 指定的单位)。

  MIdose_units

字符串,给出剂量的单位。

  MIinjection_volume

注射体积(mL)。

  MIinjection_route

字符串,标识注射的给药途径。

NetCDF 例程

[编辑 | 编辑源代码]

由于需要使用 NetCDF 例程来访问 MINC 文件,因此在此提供所有 NetCDF 例程的简要说明。有关更多信息,请参阅 NetCDF 用户指南。请注意,头文件 netcdf.h 会由头文件 minc.h 自动包含。

错误处理

[编辑 | 编辑源代码]

如果发生错误,默认行为是打印错误消息并退出。可以通过修改全局变量 ncopts 的值来更改此行为。默认设置是

  ncopts = NC_VERBOSE | NC_FATAL;

这意味着在发生错误时打印错误消息并退出。若要获取错误消息而不出现致命错误,请设置

  ncopts = NC_VERBOSE;

若要既没有错误消息,也没有致命错误,请设置

  ncopts = 0;

在最后两种情况下,调用例程应检查每个对 NetCDF 函数的调用的返回值。所有例程都返回一个整数值。如果该值为 -1 (MI_ERROR),则表示已发生错误。全局变量 ncerr 的值提供了有关错误类型的更多信息(有关错误代码,请参阅文件 netcdf.h)。

NetCDF 文件操作

[编辑 | 编辑源代码]

nccreate:创建由 path 指定的文件。参数 cmode 必须具有 NC_CLOBBERNC_NOCLOBBER 的值。返回值是 NetCDF 文件的标识符,并在后续的 NetCDF 函数调用中使用。

  int nccreate(char* path,int cmode);

ncopen:打开由 path 指定的文件。mode 必须具有 NC_NOWRITENC_WRITE 的值。返回值是 NetCDF 文件标识符。

  int ncopen(char* path,int mode);

ncredef:将打开的文件置于定义模式。

  int ncredef(int cdfid);

ncendef:将文件置于数据模式。

  int ncendef(int cdfid);

ncclose:关闭 NetCDF 文件。

  int ncclose(int cdfid);

ncinquire:查询文件中的维度数量、变量数量、全局属性数量或无限记录维度的 ID。为任何指针传递 NULL 值表示不返回关联的值。

  int ncinquire(int cdfid,int* ndims,int* nvars,int* natts,int* recdim);

ncsync:将打开的文件同步到磁盘。

  int ncsync(int cdfid);

ncabort:如果文件处于定义模式,则中止对文件的任何更改。

  int ncabort(int cdfid);

ncsetfill:在调用 ncendef 时,默认情况下会用填充值填充所有变量。若要关闭此功能,请将 fillmode 设置为 NC_NOFILL 调用此例程(若要将其重新打开,请使用 NC_FILL)。

  int ncsetfill(int cdfid,int fillmode);

维度操作

[编辑 | 编辑源代码]

ncdimdef:定义具有名称和长度的维度。返回值是维度 ID,将在后续调用中使用。

  int ncdimdef(int cdfid,char* name,long length);

ncdimid:从名称获取维度 ID。

  int ncdimid(int cdfid,char* name);

ncdiminq:查询有关维度的信息(名称或长度)。

  int ncdiminq(int cdfid,int dimid,char* name,long* length);

ncdimrename:重命名维度。

  int ncdimrename(int cdfid,int dimid,char* name);

变量操作

[编辑 | 编辑源代码]

ncvardef : 通过名称定义一个变量,给出它的数据类型、维数和下标变量的维数 ID。返回一个变量 ID,用于后续调用。

  int ncvardef(int cdfid,char* name,nc_type datatype,int ndims,int dim[]);

ncvarid : 从名称获取变量 ID。

  int ncvarid(int cdfid,char* name);

ncvarinq : 查询有关变量的信息。任何 NULL 指针都表示不返回相关值。可以获取变量名称、类型、维数、维数 ID 和属性数量。

  int ncvarinq(int cdfid,int varid,char* name,nc_type* datatype,int* ndims,
                 int dim[],int* natts);

ncvarput1 : 在由 coords 指定的坐标处存储单个值。value 必须是正确的数据类型。

  int ncvarput1(int cdfid,int varid,long coords[],void* value);

ncvarget1 : 从由 coords 指定的坐标处获取单个值。

  int ncvarget1(int cdfid,int varid,long coords[],void* value);

ncvarput : 放置一个超立方体(多维矩形)的值,从 start 开始,边长由 count 给出。对于 C 接口,最后一维变化最快。值必须是正确的类型。

  int ncvarput(int cdfid,int varid,long start[],long count[],void* value);

ncvarget : 获取一个超立方体(多维矩形)的值,从 start 开始,边长由 count 给出。对于 C 接口,最后一维变化最快。值必须是正确的类型。

  int ncvarget(int cdfid,int varid,long start[],long count[],void* value);

ncvarrename : 重命名变量。

  int ncvarrename(int cdfid,int varid,char* name);

nctypelen : 获取数据类型的长度(以字节为单位)。

  int nctypelen(nc_type datatype);

属性操作

[edit | edit source]

ncattput : 通过名称存储一个属性,该属性与变量 varid 相关联。必须指定属性的类型和长度。

  int ncattput(int cdfid,int varid,char* name,nc_type datatype,int len,
                void* value);

ncattinq : 查询有关属性的信息,可以通过名称查询。可以获取类型或长度。

  int ncattinq(int cdfid,int varid,char* name,nc_type* datatype,int* len);

ncattget : 通过名称获取属性的值。

  int ncattget(int cdfid,int varid,char* name,void* value);

ncattcopy : 将一个属性从一个变量复制到另一个变量。

  int ncattcopy(int incdf,int invar,char* name,int outcdf,int outvar);

ncattname : 从属性编号获取属性的名称。该编号不是 ID,而是在变量关联的属性数量发生变化时可能发生变化。属性编号从 0 到 natts-1。

  int ncattname(int cdfid,int varid,int attnum,char* name);

ncattrename : 重命名属性。

  int ncattrename(int cdfid,int varid,char* name,char* newname);

ncattdel : 删除属性。

  int ncattdel(int cdfid,int varid,char* name);

MINC 例程

[edit | edit source]

MINC 例程的错误处理与 NetCDF 函数相同,区别在于返回指针的例程在发生错误时会返回 NULL,而不是 MI_ERROR。错误代码(在 ncerr 中返回)可以在头文件 minc.h 中找到。

通用便利函数

[edit | edit source]

miexpand_file : 用于扩展使用 compress、pack、gzip 或 zip(使用 gunzip、zcat 或 pcat)压缩的 minc 文件的例程。返回临时 minc 文件的名称——该字符串必须由调用者释放。如果由 path 指定的文件未压缩,则返回其名称。*create_tempfile 设置为 TRUE,如果创建了临时文件(并且调用者需要删除该文件),则设置为 FALSE,如果返回的是原始文件名。如果 tempfile 为 NULL,则该例程会生成自己的临时文件名,否则,使用用户提供的名称。如果 header_only 为 TRUE,则该例程只会扩展足够的文件以读取头文件。

  public char *miexpand_file(char *path, char *tempfile, int header_only, 
                             int *created_tempfile);

miopen : 类似于 ncopen,但会暂时解压缩以 NC_NOWRITE 模式打开的文件(compress、pack、gzip、zip)。

  public int miopen(char *path, int mode);

micreate : 类似于 nccreate。将来可能会增强功能。

  public int micreate(char *path, int cmode);

miclose : 类似于 ncclose,但会完成 miopenmicreate 的操作。

  public int miclose(int cdfid);

miattget : 类似于 ncattget,但调用者指定所需数值类型和最大值数量。类型通过 datatype 指定(符号是类型的默认值:NC_BYTEMI_UNSIGNED,其他情况为 MI_SIGNED)。max_length 给出了要获取的最大值数量,att_length 返回实际读取的值数量。如果属性类型不是数值类型,则会发生错误。

  public int miattget(int cdfid, int varid, char *name, nc_type datatype,
                      int max_length, void *value, int *att_length);

miattget1 : 类似于 miattget,但只返回一个值。如果有多个值,则会发生错误。

  public int miattget1(int cdfid, int varid, char *name, nc_type datatype,
                      void *value);

miattgetstr : 从属性中获取字符串值。maxlen 给出了要返回的最大字符数量(包括终止符 '\0')。字符串将写入由 value 指定的数组,并返回指向该字符串的指针。

  public char *miattgetstr(int cdfid, int varid, char *name, 
                           int maxlen, char *value);

miattputint : 写入整数属性。

  public int miattputint(int cdfid, int varid, char *name, int value);

miattputdbl : 写入双精度属性。

  public int miattputdbl(int cdfid, int varid, char *name, double value);

miattputstr : 写入字符串属性。

  public int miattputstr(int cdfid, int varid, char *name, char *value);

mivarget : 类似于 ncvarget,但调用者指定所需数值类型和符号(MI_SIGNEDMI_UNSIGNED)。

  public int mivarget(int cdfid, int varid, long start[], long count[],
                      nc_type datatype, char *sign, void *values);

mivarget1 : 类似于 ncvarget1,但调用者指定所需数值类型和符号。

  public int mivarget1(int cdfid, int varid, long mindex[],
                       nc_type datatype, char *sign, void *value);

mivarput : 类似于 ncvarput,但调用者指定要传递的值的数值类型和符号。

  public int mivarput(int cdfid, int varid, long start[], long count[],
                      nc_type datatype, char *sign, void *values);

mivarput1 : 类似于 ncvarput1,但调用者指定要传递的值的数值类型和符号。

  public int mivarput1(int cdfid, int varid, long mindex[],
                       nc_type datatype, char *sign, void *value);

miset_coords : 将坐标向量 coordsnvals 个值设置为 value。返回指向 coords 的指针。

  public long *miset_coords(int nvals, long value, long coords[]);

mitranslate_coords : 将文件 cdfid 中变量 invar 的下标坐标向量 incoords 转换为变量 outvar 的下标坐标向量 outcoords。当两个变量具有相似的维数,但不一定是相同的维数顺序时,这很有用。如果 invar 具有 outvar 中不存在的维数,则忽略相应的坐标。如果 outvar 具有 invar 中不存在的维数,则不会修改相应的坐标。返回指向 outcoords 的指针。

  public long *mitranslate_coords(int cdfid, 
                                  int invar,  long incoords[],
                                  int outvar, long outcoords[]);

micopy_all_atts : 将一个变量的所有属性复制到另一个变量(可能跨文件)。

  public int micopy_all_atts(int incdfid, int invarid, 
                             int outcdfid, int outvarid);

micopy_var_def : 将一个变量定义(包括属性)从一个文件复制到另一个文件。outcdfid 必须处于定义模式。返回新创建变量的 ID。

  public int micopy_var_def(int incdfid, int invarid, int outcdfid);

micopy_var_values : 将一个变量的值从一个文件复制到另一个文件。incdfidoutcdfid 必须处于数据模式。

  public int micopy_var_values(int incdfid, int invarid, 
                               int outcdfid, int outvarid);

micopy_all_var_defs : 将所有变量定义从一个文件复制到另一个文件,排除一个变量列表。nexclude 个变量 ID 列表在 excluded_vars 中给出。outcdfid 必须处于定义模式。

  public int micopy_all_var_defs(int incdfid, int outcdfid, int nexclude,
                                 int excluded_vars[]);

micopy_all_var_values : 将所有变量值从一个文件复制到另一个文件,排除一个变量列表。nexclude 个变量 ID 列表在 excluded_vars 中给出。outcdfid 必须处于数据模式。

  public int micopy_all_var_values(int incdfid, int outcdfid, int nexclude,
                                   int excluded_vars[]);

MINC 特定便利函数

[edit | edit source]

miget_datatype : 获取图像变量的类型和符号信息。符号数据通过将 is_signed 设置为 TRUE 来指示;无符号数据通过 FALSE 来指示。

  public int miget_datatype(int cdfid, int imgid,
                            nc_type *datatype, int *is_signed);

miget_default_range : 返回指定类型和符号的默认范围。

  public int miget_default_range(nc_type datatype, int is_signed,
                                 double default_range[]);

miget_valid_range : 获取图像变量的有效范围信息。此函数处理 valid_range 属性和图像数据之间潜在的类型差异。这些差异(特别是具有双精度 valid_range 的浮点数图像)否则会导致在正确识别无效数据方面出现问题。

  public int miget_valid_range(int cdfid, int imgid, double valid_range[]);

miset_valid_range : 设置图像变量的有效范围信息。此函数遵循 NetCDF 惯例,即变量数据和 valid_range 属性具有相同的类型。

  public int miset_valid_range(int cdfid, int imgid, double valid_range[]);

miget_image_range : 根据图像最小值和图像最大值变量获取图像数据的最大实际范围。

  public int miget_image_range(int cdfid, double image_range[]);

mivar_exists : 测试变量是否存在。如果变量存在,则返回 true。

  public int mivar_exists(int cdfid, char *varname);

miattput_pointer : 在变量 varid 中创建一个属性 name,该属性指向变量 ptrvarid

  public int miattput_pointer(int cdfid, int varid, char *name, int ptrvarid);

miattget_pointer : 返回变量 varid 的属性 name 指向的变量 ID。

  public int miattget_pointer(int cdfid, int varid, char *name);

miadd_child : 将变量 child_varid 的名称添加到变量 parent_varidMIchildren 属性中,并将变量 child_varidMIparent 属性设置为变量 parent_varid 的名称。如果属性不存在,则创建它们。MIchildren 属性中的名称以换行符分隔。

  public int miadd_child(int cdfid, int parent_varid, int child_varid);

micreate_std_variable : 创建任何标准 MINC 变量并设置一些属性。以 ncvardef 的方式调用。返回新创建变量的 ID。对于所有变量,属性 MIvaridMIvartypeMIversion 都已设置。对于维度和维度宽度变量,如果维数为零,则 MIspacing 设置为 MI_REGULAR,否则设置为 MI_IRREGULAR。对于维度变量,MIalignment 设置为 MI_CENTRE,除非变量是 MItime,在这种情况下,它设置为 MI_START。此外,MIcomments 设置为一个字符串,描述空间维度的世界坐标的方向。对于维度宽度变量,MIfiltertype 设置为 MI_SQUARE。对于 MIimage 以及 MIimagemaxMIimagemin,检查维度以确保最后两个不随图像维度变化,并且从 MIimage 创建指向另外两个的属性指针。

  public int micreate_std_variable(int cdfid, char *name, nc_type datatype, 
                                   int ndims, int dim[]);

micreate_group_variable : 与 micreate_std_variable 相似,但 ndims 始终设置为零,数据类型为 NC_INT。返回新创建变量的 ID。

  public int micreate_group_variable(int cdfid, char *name);

图像转换变量函数

[edit | edit source]

miicv_create : 创建图像转换变量并设置默认值 - 返回一个 icv 标识符以供以后使用(如果发生错误,则返回 MI_ERROR)。尽管定义仍然存在,但先前 MI_MAX_NUM_ICV 个 icv 可以在同一时间存在的限制已被移除。

  public int miicv_create();

miicv_free : 释放图像转换变量。

  public int miicv_free(int icvid);

miicv_setdbl : 将数值 icv 属性设置为双精度值。

  public int miicv_setdbl(int icvid, int icv_property, double value);

miicv_setint : 将数值 icv 属性设置为整数值。

  public int miicv_setint(int icvid, int icv_property, int value);

miicv_setlong : 将数值 icv 属性设置为长整数值。

  public int miicv_setlong(int icvid, int icv_property, long value);

miicv_setstr : 设置字符串 icv 属性。

  public int miicv_set(int icvid, int icv_property, char *value);

miicv_inqdbl : 查询数值 icv 属性。value 指向应该返回该值的双精度变量。

  public int miicv_inqdbl(int icvid, int icv_property, double *value);

miicv_inqint : 查询数值 icv 属性。value 指向应该返回该值的整型变量。

  public int miicv_inqint(int icvid, int icv_property, int *value);

miicv_inqlong : 查询数值 icv 属性。value 指向应该返回该值的长整型变量。

  public int miicv_inqlong(int icvid, int icv_property, long *value);

miicv_inqstr : 查询字符串 icv 属性。value 指向应该返回该值的字符数组。调用例程必须为返回字符串分配足够的空间。

  public int miicv_inqstr(int icvid, int icv_property, char *value);

miicv_attach : 将 MINC 文件和图像变量附加到 icv。请注意,在将变量附加到 icv 时,无法修改 icv 属性。如果变量已经附加到 icv,则会自动分离。文件 icvid 必须处于数据模式。

  public int miicv_attach(int icvid, int cdfid, int varid);

miicv_ndattach : 与 miicv_attach 相似,但没有可用的维度转换功能(类似于将 MI_ICV_DO_DIM_CONV 设置为 FALSE)。这避免了在不需要(对于内存可能成为问题的机器)时链接所有维度转换例程。

  public int miicv_ndattach(int icvid, int cdfid, int varid);

miicv_detach : 从 icv 分离变量。

  public int miicv_detach(int icvid);

miicv_get : 通过 icv 从变量获取超立方体值。

  public int miicv_get(int icvid, long start[], long count[], void *values);

miicv_put : 通过 icv 将超立方体值放入变量。

  public int miicv_put(int icvid, long start[], long count[], void *values);

图像转换变量属性

[edit | edit source]

MI_ICV_TYPE (类型 nc_type) : 指定用户想要的值的类型。修改此属性会自动导致 MI_ICV_VALID_MAXMI_ICV_VALID_MIN 设置为其默认值。默认 = NC_SHORT

MI_ICV_SIGN (类型 char *) : 指定用户想要的值的符号(与浮点类型无关)。修改此属性会自动导致 MI_ICV_VALID_MAXMI_ICV_VALID_MIN 设置为其默认值。默认 = MI_SIGNED

MI_ICV_DO_RANGE (类型 int) : 当 TRUE 时,执行范围转换(对于有效最大值和最小值以及值归一化)。当 FALSE 时,不会修改值。默认 = TRUE

MI_ICV_VALID_MAX (类型 double) : 有效最大值(浮点类型忽略)。默认 = 类型和符号的最大合法值(浮点类型为 1.0)。

MI_ICV_VALID_MIN (类型 double) : 有效最小值(浮点类型忽略)。默认 = 类型和符号的最小合法值(浮点类型为 1.0)。

MI_ICV_DO_NORM (类型 int) : 如果 TRUE,则执行值的归一化(有关归一化的详细信息,请参阅用户指南)。默认 = FALSE

MI_ICV_USER_NORM (类型 int) : 如果 TRUE,则用户指定归一化最大值和最小值。如果 FALSE,则将值作为整个图像变量的最大值和最小值。默认 = FALSE

MI_ICV_IMAGE_MAX (类型 double) : 用户归一化的图像最大值。默认 = 1.0。

MI_ICV_IMAGE_MIN (类型 double) : 用户归一化的图像最小值。默认 = 0.0。

MI_ICV_NORM_MAX (类型 double) : 只读值,给出执行归一化时用户图像的最大值(变量中的最大值或用户指定的最大值)。

MI_ICV_NORM_MIN (类型 double) : 只读值,给出执行归一化时用户图像的最小值(变量中的最小值或用户指定的最小值)。

MI_ICV_DO_FILLVALUE (类型 int) : 如果设置为 TRUE,则对输入执行范围检查,并将超出范围的值(文件中的值小于 MIvalid_min 或大于 MIvalid_max)设置为 MI_ICV_FILLVALUE 的值。默认 = FALSE

MI_ICV_FILLVALUE (类型 double) : 像素超出范围时使用的值(仅在输入时)。该值直接写入用户缓冲区,没有任何缩放。默认 = -DBL_MAX

MI_ICV_DO_DIM_CONV (类型 int) : 如果设置为 TRUE,则可以执行维度转换。默认 = FALSE

MI_ICV_DO_SCALAR (类型 int) : 如果 TRUE,则如果 MIvector_dimension 是变量变化最快的维度,则对元素进行平均,icv 的行为就像此维度不存在一样。默认 = TRUE

MI_ICV_XDIM_DIR (类型 int) : 指示 x 图像维度(MIxspaceMIxfrequency)的所需方向。值可以是 MI_ICV_POSITIVEMI_ICV_NEGATIVEMI_ICV_ANYDIR 之一。正方向表示维度的 MIstep 属性为正。MI_ICV_ANYDIR 表示不进行翻转。默认 = MI_ICV_POSITIVE

MI_ICV_YDIM_DIR (类型 int) : 指示 y 图像维度的所需方向。默认 = MI_ICV_POSITIVE

MI_ICV_ZDIM_DIR (类型 int) : 指示 z 图像维度的所需方向。默认 = MI_ICV_POSITIVE

MI_ICV_ADIM_SIZE (类型 long) : 指定变化最快的图像维度的所需大小。值为 MI_ICV_ANYSIZE 表示应该使用维度的实际大小。默认 = MI_ICV_ANYSIZE

MI_ICV_BDIM_SIZE (类型 long) : 指定第二个图像维度的所需大小。默认 = MI_ICV_ANYSIZE

MI_ICV_KEEP_ASPECT (类型 int) : 如果 TRUE,则图像维度按相同量调整大小以保持纵横比。默认 = TRUE

MI_ICV_ADIM_STEP (类型 double) : 只读属性,给出维度转换后第一个(变化最快的)图像维度的 MIstep 属性的等效值。

MI_ICV_BDIM_STEP (类型 double) : 只读属性,给出维度转换后第二个图像维度的 MIstep 属性的等效值。

MI_ICV_ADIM_START (类型 double) : 只读属性,给出维度转换后第一个(变化最快的)图像维度的 MIstart 属性的等效值。

MI_ICV_BDIM_START (类型 double) : 只读属性,给出维度转换后第二个图像维度的 MIstart 属性的等效值。

MI_ICV_NUM_IMGDIMS (类型 int) : 指定维度转换中使用的图像维度数量。默认 = 2。

MI_ICV_DIM_SIZE (类型 long) : 指定图像维度的所需大小。要更改的维度的编号应添加到属性中(添加零对应于变化最快的维度)。默认 = MI_ICV_ANYSIZE

MI_ICV_DIM_STEP (类型 double) : 只读属性,给出维度转换后图像维度的 MIstep 属性的等效值。要查询的维度的编号应添加到属性中(添加零对应于变化最快的维度)。

MI_ICV_DIM_START (类型 double) : 只读属性,给出维度转换后图像维度的 MIstart 属性的等效值。要查询的维度的编号应添加到属性中(添加零对应于变化最快的维度)。

MI_ICV_NUM_DIMS (类型 int) : 只读属性,给出图像变量的维度数量,考虑到将矢量图像转换为标量图像。

MI_ICV_CDFID (类型 int) : 只读属性,给出当前附加的 NetCDF 文件的 ID,如果未附加任何文件,则给出 MI_ERROR

MI_ICV_VARID (类型 int) : 只读属性,给出当前附加的 NetCDF 变量的 ID,如果未附加任何变量,则给出 MI_ERROR

MI_ICV_MAXVAR (类型 char *) : 字符串属性,指定给出图像最大值的变量的名称。默认 = MIimagemax

MI_ICV_MINVAR (类型 char *) : 字符串属性,指定给出图像最小值的变量的名称。默认 = MIimagemin

已知错误

[edit | edit source]

对于使用图像转换变量的维度转换,MI_ICV_DIM_STARTMI_ICV_ADIM_STARTMI_ICV_BDIM_START 的值是在假设 MIalignment 等于 MI_CENTRE 的情况下计算的。

华夏公益教科书