日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Nifti1文件格式

發布時間:2024/5/14 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nifti1文件格式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Predefined dimensions for space and time(預定義的空間和時間維度)

在Nifti格式中,前三個維度保留用于定義三個空間維度——x、y和z,而第四個維度保留用于定義時間點——t。其余維度(從第五個到第七個)用于其他用途。然而,第五維仍然可以具有一些預定義的用途,例如存儲體素特定的分布參數或保存基于矢量的數據。

Overview of the header structure(頭結構的概述)

為了保持與Analyze格式的兼容性,Nifti頭部的大小與舊格式一樣保持在348字節。一些字段被重用,一些字段被保留,但被忽略,一些字段被完全覆蓋。下表顯示了每個字段、它們的大小和簡要說明。關于應該如何解釋每個字段的更多細節將在下面進一步提供。

注:對于x分布,當p1=1時,為半正態分布;當p1=2時,為瑞利分布;當p1=3時,為Maxwell-Boltzmann分布。其他意圖代碼可用來表明文件包含的數據不是統計性質的。

intent parameters存儲在字段float intent_p1、float intent_p2和float intent_p3中。或者,如果每個體素的參數不同,則它們應該存儲在文件的第五維中。人類可讀的intent name可以存儲在字段char intent_name[16]中,當數據不能或沒有使用上述任何意圖代碼和參數進行編碼時,這可能有助于解釋數據的intention。

Data type and bits per pixel/voxel(數據類型和每像素/體素的比特)

字段int datatype指示存儲的數據的類型。可接受的值包括:

字段short bitpix保存每個體素的比特數的信息。該值必須與如上所示的由數據類型確定的類型相匹配。

Slice acquisition information(切片采集信息)

字段char slice_code、short slice_start、short slice_end和float slice_duration對于存儲有關fMRI采集時序的信息很有用,需要與包含字段slice_dIM的char dim_info一起使用。當且僅當slice_dim不同于零時,slice_code被解釋為:

字段short slice_start和short slice_end分別表明了哪些是對應于實際MRI采集的第一個和最后一個切片。圖像中存在的超出此范圍的切片將被視為填充切片(例如,包含零)。字段float slice_duration表示獲取單個切片所需的時間量。在單獨的字段中具有該信息允許正確地存儲實驗的圖像,其中slice_duration*dim[slice_dim]小于存儲在Pixdim[4]中的值,通常是重復時間(TR)。

切片代碼,用于指定切片采集定時。在本例中,slice_start=2和slice_end=11,表示存儲在文件中的切片#01和#12沒有真正使用MRI獲取,而是被填充到文件中。字段slice_duration指定獲取每個切片所需的時間。對應于切片采集的維度(在本例中為dim[3],z)在字段dim_info中編碼。

Voxel dimensions

每個體素的維度存儲在字段float pixdim[8]中,每個元素與其各自的short dim[8]相匹配。但是,float pixdim[0]中的值具有特殊含義,如下所述;它應始終為-1或1。前4個維度的測量單位在字段xyzt_unit中指定,如下所述。

Voxel offset

對于單個文件(.nii),int vox_offset字段指示成像數據開始之前的字節偏移量。為了與舊軟件兼容,可能的值是16的倍數,最小值是352(大于348的16的最小倍數)。對于文件對(.hdr/.img),如果除圖像數據本身以外的任何信息都不會存儲在.img中(最常見),則應將其設置為零,但它也可以大于零,從而允許將用戶定義的額外信息預先添加到.img中,如dicom標題。然而,在這種情況下,最終可能會違反16的倍數的規則。此字段為浮點型(32位,IEEE-754),允許指定最多224的整數。使用float而不是更自然的選擇int的原因是為了與Analyze格式兼容。

Data scaling

存儲在每個體素中的值可以線性縮放到不同的單位。字段float scl_slope和float scl_inter定義線性函數的斜率和截距。數據擴展功能允許在比數據類型所允許的范圍更廣的范圍內進行存儲。但是,可以在相同的數據類型中使用縮放。對于RGB數據的存儲,這兩個縮放字段都應該被忽略。對于復雜類型,它應該同時應用于實部和虛部。

Data display

對于存儲標量(非向量)數據的文件,字段float cal_min和float cal_max確定打開圖像時的預期顯示范圍。等于或低于cal_min的體素值應顯示為色標中的最小顏色(在灰度可視化中通常為黑色),等于或大于cal_max的值應顯示為色標中的最大顏色(通常為白色)。

Measurement units

用于維度dim[1]到dim[4] (以及分別用于pixdim[])的空間和時間測量單位都在字段char xyzt_unit中編碼。位1-3用于存儲空間維度,位4-6用于時間維度,并且不使用位6和7。可以在字段float toffset中指定時間偏移量。xyzt_unit的代碼(以十進制表示)為

Description

此字段char description p[80]可以包含最多80個字符的任何文本。該標準沒有指定該字符串是否需要以空字符結尾。想必,這取決于應用程序是否正確地處理它。

Auxiliary file

可以在char aux_file[24]字段中指定包含額外信息的補充文件。例如,該文件可以包含網格的面索引,這些點存儲在第五維中,或者包含用于顯示顏色的查找表。

Orientation information

與以前的Analyze格式相比,Nifti格式最明顯的改進是能夠明確地存儲信息方向。文件標準假設體素坐標指的是每個體素的中心,而不是它的任何角點。假設世界坐標系為RAS:+x表示向右,+y表示向前,+z表示向上,這與Analyze中使用的坐標系LAS完全不同。該格式提供了三種不同的方法來將體素坐標(i,j,k)映射到世界坐標(x,y,z)。第一種方法僅允許與分析格式兼容。另外兩種方法可以共存,并傳遞不同的坐標系。這些系統在字段short qform_code和short sform_code中指定,它們可以采用表中指定的值:

原則上,qform_code(下面的方法2)應該包含0、1或2,而sform_code(下面的方法3)可以包含表中所示的任何代碼。
Method1
Method1用于與Analyze兼容,并且不應該用作主要取向方法。世界坐標僅通過縮放體素大小來確定:

Method2
Method2在short qform_code大于零時使用,旨在以類似于dicom header中指定的坐標的方式指示掃描儀坐標。它還可以用于表示圖像與同一對象的前一個會話的對齊(例如用于共同配準)。為簡潔起見,該字段中的信息以四元數(a,b,c,d)的形式存儲,后三個系數位于字段float quatern_b、float quatern_c、float quatern_d中。第一個系數可以從其他三個中
計算出來。這些字段用于構建旋轉矩陣,如下所示:

該旋轉矩陣與體素大小和平移向量一起用于定義從體素到世界空間的最終變換:

q是qfac值,存儲在其他未用的單元pixdim[0]中,只能為1或者-1.任何其他的值都被當做1.
Method 3
當short sform_code大于零時使用Method 3。它依賴于存儲在字段float srow_*[4]中的完整仿射矩陣來將體素映射到世界坐標:

與假設包含將體素索引映射到掃描儀世界坐標或在同一對象的兩個不同圖像之間對齊的變換的Method2不同,方法3用于指示到諸如Talairach或MNI坐標的某些標準世界空間的變換,在這種情況下,坐標系的原點(0,0,0)在大腦的前部。
讀取affine矩陣的代碼:

```python import nibabel as nib # paths_to_origin是存儲nii.gz文件的路徑 sample['affine'] = read_data(paths_to_origin, False).affinedef read_data(path_to_nifti, return_numpy=True):"""Read a NIfTI image. Return a numpy array (default) or `nibabel.nifti1.Nifti1Image` object"""if return_numpy:return nib.load(str(path_to_nifti)).get_fdata()return nib.load(str(path_to_nifti))

結果展示:

Magic string

char magic[4]字段是一個“魔術”字符串,它聲明文件符合Nifti標準。它被放置在header的最末尾,以避免覆蓋Analyze格式所需的字段。但是,理想情況下,應該首先檢查此字符串。對于.hdr/.img對,它應該是‘n+1’(或十六進制的‘6E 69 31 00’),對于.nii單個文件,它應該是‘n+1’(或‘6E 2B 31 00’)。如果沒有此字符串,則應將該文件視為Analyze。Nifti格式的未來版本可能會將字符串遞增到‘n+2’、‘n+3’等。事實上,截至2012年,第二個版本正在準備中。

Unused fileds

Nifti格式不使用char data_type[10]、char db_name[18]、int extents、short session_error和char regular字段,但它們包含在header中,以便與Analyze兼容。區段應該是整數16384,規則應該是字符‘r’。字段int glmin和int glmax分別指定分析格式中整個數據集的最小值和最大值。

Storing extra-information

在標準允許的情況下,可以通過多種方式將額外信息包含在Nifti格式中。在header的末尾,下4個字節(即,從字節349到352,包括349到352)可能存在于.hdr文件中,也可能不存在。但是,這些字節將始終存在于.nii文件中。它們應該解釋為字符數組,即char extension[4]。原則上,這4個字節應該全部設置為零。如果第一個extension[0]非零,則表示存在從字節號353開始的擴展信息。此類擴展信息的大小需要是16的倍數。此擴展的前8個字節應解釋為兩個整數,int_esize和int_ecode。字段esize指示范圍的大小,包括esize和ecode本身的前8個字節。字段ecode指示用于擴展剩余部分的格式。在撰寫本文時,已經定義了三個代碼:

同一文件中可以存在多個擴展名,每個擴展名始終以esize和ecode對開頭,并且其第一個字節緊挨著前一個擴展名的最后一個字節。在單個.nii文件中,必須正確設置浮動vox_offset,以便成像數據僅在最后一個擴展名結束后開始。

總結

以上是生活随笔為你收集整理的Nifti1文件格式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。