python 读取.nii格式图像实例
时间:2022-07-27
本文章向大家介绍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格式图像实例就是小编分享给大家的全部内容了,希望能给大家一个参考。
- 如何在特定的渗透测试中使用正确的Burp扩展插件
- hbase源码系列(十一)Put、Delete在服务端是如何处理?
- 大数据如何帮飞机节油?
- hbase源码系列(十二)Get、Scan在服务端是如何处理?
- OpenStack:建立虚拟的渗透测试实验环境 – 网络篇
- Kettle 添加对应hadoop版本的支持
- Layui常用方法
- 使用Identity Server 4建立Authorization Server (4)
- 使用Identity Server 4建立Authorization Server (3)
- 使用Identity Server 4建立Authorization Server (2)
- 使用Identity Server 4建立Authorization Server (1)
- Java之异常处理
- 挖洞经验 | 看我如何利用SAML漏洞实现Uber内部聊天系统未授权登录
- 使用ichartjs生成图表
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Day17.String字符串处理库
- PHP安装配置(Windows和Linux)-一篇就够了
- JavaSE面试深度剖析 第一讲
- JavaSE面试深度剖析 第二讲
- JavaSE面试深度剖析 第三讲
- docker+consul+ nginx集成分布式的服务发现与注册架构
- CWFF:一款针对模糊测试的自定义字典工具
- HMM、信号、时序、降噪(附代码)
- 原创 | 图解git,用手绘图带你理解git中分支的原理和应用
- Android 天气APP(二十四)地图天气(上)自动定位和地图点击定位
- 3分钟短文:可能是Laravel模板最直白的用法了,没有之一
- Android 天气APP(二十三)增加灾害预警、优化主页面UI
- Android 天气APP(二十一)滑动改变UI、增加更多天气数据展示,最多未来15天天气预报
- Android 读取csv格式数据文件
- Android LitePal的简单使用