跳轉到內容

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 的情況下計算的。

華夏公益教科書