python處理nii文件


第一步安裝nibabel,可以使用命令:pip install nibabel

之后:

from nibabel.viewers import OrthoSlicer3D as osd
import nibabel as nib
filename = 'image.nii'
img = nib.load(filename)
#輸出文件信息
print(img)
w,h,q = img.dataobj.shape
#顯示3D圖像
osd(img.dataobj).show()
 
結果:
<class 'nibabel.nifti1.Nifti1Image'>
data shape (512, 512, 333)
affine:
[[  -0.82617199    0.            0.          204.01400757]
 [   0.           -0.82617199    0.          211.5       ]
 [   0.            0.            1.25       -431.97399902]
 [   0.            0.            0.            1.        ]]
metadata:
<class 'nibabel.nifti1.Nifti1Header'> object, endian='<'
sizeof_hdr      : 348
data_type       : b''
db_name         : b''
extents         : 0
session_error   : 0
regular         : b'r'
dim_info        : 0
dim             : [  3 512 512 333   1   1   1   1]
intent_p1       : 0.0
intent_p2       : 0.0
intent_p3       : 0.0
intent_code     : none
datatype        : int32
bitpix          : 32
slice_start     : 0
pixdim          : [1.       0.826172 0.826172 1.25     0.       0.       0.       0.      ]
vox_offset      : 0.0
scl_slope       : nan
scl_inter       : nan
slice_end       : 0
slice_code      : unknown
xyzt_units      : 2
cal_max         : 0.0
cal_min         : 0.0
slice_duration  : 0.0
toffset         : 0.0
glmax           : 0
glmin           : 0
descrip         : b''
aux_file        : b''
qform_code      : scanner
sform_code      : unknown
quatern_b       : 0.0
quatern_c       : 0.0
quatern_d       : 1.0
qoffset_x       : 204.014
qoffset_y       : 211.5
qoffset_z       : -431.974
srow_x          : [0. 0. 0. 0.]
srow_y          : [0. 0. 0. 0.]
srow_z          : [0. 0. 0. 0.]
intent_name     : b''
magic           : b'n+1'
 
各字段意義:
sizeof_hdr:sizeof_hdr 是保存文件的頭文件大小,如果是NIFTI-1或者ANALYZE格式的文件sizeof_hdr=348.
 
dim_info:dim_info字段存儲着頻率編碼方向(1,2,3),相位編碼方向(1,2,3)和采集期間層選擇方向(1,2,3),對於徑向采集來講,頻率編碼和相位編碼都設置為0。
 
dim:short dim[8]保存着前面提到的圖像的維度信息。如果第0維不是(1-7)之間的數字,那么這個數據具有相反的字節順序,所以應該進行字節交換(NIFTI標准沒有提供字節順序的字段,提倡使用dim[0])。
 
intent系列影響到圖像數據的讀取和存儲)
 
datatype和bitpix
datatype中存儲的是數據的類型,可接受類型如下:
而bitpix字段必須與datatype中的代碼所對應的bit(s)/pix的大小相等。
 
slice切片信息
包含字段:slice_start,slice_end, slice_code, slice_duration
slice_duration是存儲功能磁共振成像采集的時間相關信息,需要與dim_info字段一起使用。
 
pixdim體素維度:每個體素維度信息都保存在pixdim[8]中,各自對應dim[8],但pixdim[0]有特殊意義,其值只能是-1或1。前四個維度將在xyzt_units字段中指定。
 
vox_offset體素偏移量:vox_offset指 單個文件(.nii)圖像數據的字節偏移量。
 
scl_slope和scl_inter數據縮放的斜率和截距
存儲在每個體素中的值可以線性縮放到不同的單位。字段float scl_slope和float scl_inter定義一個斜率和一個線性函數的截距。數據縮放功能允許存儲在比數據類型所允許的范圍更廣的范圍內。但是,可以在相同的數據類型中使用縮放。對於rgb數據的存儲,兩個縮放字段都應該被忽略。對於復雜類型,它應用於實部和虛部。
 
cal_max 和cal_min數據顯示
 存儲標量數據的文件,這兩個字段用來圖像打開時默認顯示范圍。體素值小於等於cal_min的像素顯示為顯示范圍中的最小值(灰度范圍內通常為黑),大於等於cal_max的值顯示為顯示范圍中的最大值(通常為白色),注意:這里並不是真實改變數據大小,而是改變顯示大小。
 
xyzt_units 度量單位
在dim[1]和dim[4]中用到的空間和時間測量單元(對應各自的pixdim[1]和pixdim[4]),編碼在xyzt_units字段中,1-3 bit用來存儲空間維度,4-6 bit用來存儲時間維度,6-7 bit沒有使用。時間偏移量放在float toffset字段中,xyzt_units十進制編碼如下:
 

descrip描述

該字段char descrip[80]可以包含最多80個字符的文本。標准中沒有指定這個字符串是否需要被空字符終止

aux_file附加文件

包含額外信息的補充文件可放在該字段中

magic

該字符串聲明文件符合NIFTI標准。
理想情況下,應該先檢查該字段,如果字段中存儲為”ni1”(或者是16進制的‘6E 69 31 00’),那么是.hdr/.img文件對形式;如果是’n+1’(或’6E 2B 31 00’),那么就是單一的.nii文件;而如果缺少字符串,那么就按照ANALYZE格式處理。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM