当前位置: 首页 > 编程笔记 >

python 读取.nii格式图像实例

鄂昌胤
2023-03-14
本文向大家介绍python 读取.nii格式图像实例,包括了python 读取.nii格式图像实例的使用技巧和注意事项,需要的朋友参考一下

我就废话不多说了,大家还是直接看代码吧~

# encoding=utf8
'''
查看和显示nii文件
'''
import matplotlib
matplotlib.use('TkAgg')
 
from matplotlib import pylab as plt
import nibabel as nib
from nibabel import nifti1
from nibabel.viewers import OrthoSlicer3D
 
example_filename = '../ADNI_nii/ADNI_002_S_0413_MR_MPR____N3__Scaled_2_Br_20081001114937668_S14782_I118675.nii'
 
img = nib.load(example_filename)
print (img)
print (img.header['db_name'])  #输出头信息
width,height,queue=img.dataobj.shape
OrthoSlicer3D(img.dataobj).show()
 
num = 1
for i in range(0,queue,10):
 
  img_arr = img.dataobj[:,:,i]
  plt.subplot(5,4,num)
  plt.imshow(img_arr,cmap='gray')
  num +=1
plt.show()
 

3D显示结果:

ADNI数据维度(256,256,170)分段显示:

补充知识:python nii图像扩充

我就废话不多说了,大家还是直接看代码吧~

import os
import nibabel as nib
import numpy as np
import math
 
src_us_folder = 'F:/src/ori'
src_seg_folder = 'G:/src/seg'
 
aug_us_folder = 'G:/aug/ori'
aug_seg_folder = 'G:/aug/seg'
 
img_n= 10
rotate_theta = np.array([0, math.pi/2])
 
# augmentation
aug_cnt = 0
for k in range(img_n):
  src_us_file = os.path.join(src_us_folder, (str(k) + '.nii'))
  src_seg_file = os.path.join(src_seg_folder, (str(k) + '_seg.nii'))
  # load .nii files
  src_us_vol = nib.load(src_us_file)
  src_seg_vol = nib.load(src_seg_file)
  # volume data
  us_vol_data = src_us_vol.get_data()
  us_vol_data = (np.array(us_vol_data)).astype('uint8')
  seg_vol_data = src_seg_vol.get_data()
  seg_vol_data = (np.array(seg_vol_data)).astype('uint8')
  # get refer affine matrix
  ref_affine = src_us_vol.affine
 
  ############### flip volume ###############
  flip_us_vol = np.fliplr(us_vol_data)
  flip_seg_vol = np.fliplr(seg_vol_data)
  # construct new volumes
  new_us_vol = nib.Nifti1Image(flip_us_vol, ref_affine)
  new_seg_vol = nib.Nifti1Image(flip_seg_vol, ref_affine)
  # save
  aug_us_file = os.path.join(aug_us_folder, (str(aug_cnt) + '.nii'))
  aug_seg_file = os.path.join(aug_seg_folder, (str(aug_cnt) + '_seg.nii'))
  nib.save(new_us_vol, aug_us_file)
  nib.save(new_seg_vol, aug_seg_file)
 
  aug_cnt = aug_cnt + 1
 
  ############### rotate volume ###############
  for t in range(len(rotate_theta)):
    print 'rotating %d theta of %d volume...' % (t, k)
    cos_gamma = np.cos(t)
    sin_gamma = np.sin(t)
    rot_affine = np.array([[1, 0, 0, 0],
                [0, cos_gamma, -sin_gamma, 0],
                [0, sin_gamma, cos_gamma, 0],
                [0, 0, 0, 1]])
    new_affine = rot_affine.dot(ref_affine)
    # construct new volumes
    new_us_vol = nib.Nifti1Image(us_vol_data, new_affine)
    new_seg_vol = nib.Nifti1Image(seg_vol_data, new_affine)
    # save
    aug_us_file = os.path.join(aug_us_folder, (str(aug_cnt) + '.nii'))
    aug_seg_file = os.path.join(aug_seg_folder, (str(aug_cnt) + '_seg.nii'))
    nib.save(new_us_vol, aug_us_file)
    nib.save(new_seg_vol, aug_seg_file)
 
    aug_cnt = aug_cnt + 1

以上这篇python 读取.nii格式图像实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍使用Nibabel库对nii格式图像的读写操作,包括了使用Nibabel库对nii格式图像的读写操作的使用技巧和注意事项,需要的朋友参考一下 因为后期主要的研究方向是医学图像处理,而现有手头的大部分数据都是nii格式或者是hdr,img格式的数据,所以首先第一步我们需要解决图像的读写问题。 其实使用OpenCV也可以方便的进行图像读取,但是这里暂时只学习Nibabel这个库,后面有时

  • 我想知道如何通过在Python中快速高效地获取RGBE格式的像素值来读取HDR图像(.HDR)。 以下是我尝试过的一些事情: 或者: 这会读取图像,但会以RGB格式给出值。 如何在不改变RGB值的情况下获得第4rth通道,即每个像素的“E”通道?我更喜欢只涉及imageio的解决方案,因为我仅限于使用该模块。

  • 本文向大家介绍在python下读取并展示raw格式的图片实例,包括了在python下读取并展示raw格式的图片实例的使用技巧和注意事项,需要的朋友参考一下 raw文件可能有些人没有,因此,先用一张图片创建一个raw格式的文件(其实可以是其他类型的格式文件) 有了raw文件,我们就可以读取这个文件,并显示出来。 如果已经拥有了raw文件,就直接运用fromfile读取数据(可能有些raw文件有头文件

  • 本文向大家介绍读取nii或nii.gz文件中的信息即输出图像操作,包括了读取nii或nii.gz文件中的信息即输出图像操作的使用技巧和注意事项,需要的朋友参考一下 读取nii或者nii.gz文件中的信息,并且输出图像。 补充知识:SimpleITK读取医学图像 .nii 数据(2D显示) 【环境】win10 + python3.6 + SimpleITK nii文件是NIFTI格式的文件,出现的原

  • 本文向大家介绍利用python实现.dcm格式图像转为.jpg格式,包括了利用python实现.dcm格式图像转为.jpg格式的使用技巧和注意事项,需要的朋友参考一下 如下所示: 在此处需要安装pydicom库,直接在终端命令窗口使用pip install pydicom命令安装 将.bmp格式图片转为.jpg图像 以上这篇利用python实现.dcm格式图像转为.jpg格式就是小编分享给大家的全

  • 执行javax。图像IO。ImageIO是否读取PPM格式的图像(如原始比特P6)? 没有异常,但是。其他格式如png和jpg工作正常。 我有一个尴尬的解决方法,通过去掉标头并逐行扫描ppm文件。我假设JAVA JAI(现在是JDK的一部分)会开箱即用。 我错过什么了吗?