python 讀取.nii格式圖像實(shí)例
我就廢話不多說了,大家還是直接看代碼吧~
# 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顯示結(jié)果:

ADNI數(shù)據(jù)維度(256,256,170)分段顯示:

補(bǔ)充知識(shí):python nii圖像擴(kuò)充
我就廢話不多說了,大家還是直接看代碼吧~
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格式圖像實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 實(shí)現(xiàn)兩個(gè)列表里元素對(duì)應(yīng)相乘的方法
今天小編就為大家分享一篇Python 實(shí)現(xiàn)兩個(gè)列表里元素對(duì)應(yīng)相乘的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11
用python寫一個(gè)帶有g(shù)ui界面的密碼生成器
這篇文章主要介紹了用python寫一個(gè)帶有g(shù)ui界面的密碼生成器,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-11-11
Python使用tkinter實(shí)現(xiàn)搖骰子小游戲功能的代碼
這篇文章主要介紹了Python使用tkinter實(shí)現(xiàn)的搖骰子小游戲功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
用pyqt5 給按鈕設(shè)置圖標(biāo)和css樣式的方法
今天小編就為大家分享一篇用pyqt5 給按鈕設(shè)置圖標(biāo)和css樣式的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06
TensorFlow通過文件名/文件夾名獲取標(biāo)簽,并加入隊(duì)列的實(shí)現(xiàn)
今天小編就為大家分享一篇TensorFlow通過文件名/文件夾名獲取標(biāo)簽,并加入隊(duì)列的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Python3 翻轉(zhuǎn)二叉樹的實(shí)現(xiàn)
這篇文章主要介紹了Python3 翻轉(zhuǎn)二叉樹的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
python3注冊(cè)全局熱鍵的實(shí)現(xiàn)
這篇文章主要介紹了python3注冊(cè)全局熱鍵的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

