• 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格式处理。

     

  • 相关阅读:
    linux查看cpu、内存信息
    PHP之路,Day1
    Zabbix3.0完整部署
    linux时间同步
    nginx日志切割脚本
    Rsync+sersync文件实时同步
    阿里云自动挂载云盘脚本
    nginx不支持pathinfo 导致thinkphp出错解决办法
    VIM选项配置说明
    vagrant 本地添加box 支持带版本号
  • 原文地址:https://www.cnblogs.com/peixu/p/13185710.html
Copyright © 2020-2023  润新知