nifti讀取和操作


1. 前言

python讀取nifti文件需要nibabel這個包,所以在第一次使用的時候需要安裝它。命令是pip install nibabel.

2. 方法

2.1 讀取

import nibabel as nib
nii = nib.load('data.nii')
data = nii.get_fdata()
print(data.shape)

會顯示出矩陣的維度信息。這里的nii表示nifti文件在內存中的表示,data是nifti文件中的矩陣。

2.2 寫入

import nibabel as nib
nii = nib.load('data.nii')
data = nii.get_fdata()
print(data.shape)

# 在內存中創建新的nifti,需要兩個參數,一個是矩陣,另一個是affine矩陣,這里我們用上面的nii文件的affine矩陣來創建
niiNew = nib.Nifti1Image(data, nii.affine)
nib.save(niiNew, 'data_new.nii')

寫入需要一個affine矩陣,我一般都會事先讀入一個nii文件,然后用它的affine屬性去創建新的nifti。然后用nib.save()將內存中的nifti寫入磁盤。

2.3 替換特定值

import nibabel as nib
nii = nib.load('data.nii')
data = nii.get_fdata()
print(data.shape)

# 將矩陣中所有非零元素都重新設置為1,也可以設定其他的閾值來制作不同的模板
data[data!=0]=1
niiNew = nib.Nifti1Image(data, nii.affine)
nib.save(niiNew, 'data_new_mask.nii')

制作mask。將矩陣中所有非零元素都重新設置為1。其他地方都是零。然后保存。這樣如果需要用這個mask提取別的nifti文件中的對應位置上的值的時候,只需要將這個矩陣data和新讀入的nifti中的矩陣乘起來就行,這里默認的乘法是對應位置兩個元素之間相乘。

2.4 官方文檔

https://nipy.org/nibabel/

3. MATLAB讀入矩陣

clc; clear vars; close all;
% 將nii文件讀入內存
vol = spm_vol('data.nii');
% 讀取nii文件中的矩陣
data = spm_read_vols(vol);
% 替換矩陣中的特定值
data(data~=0) = 1;
% 保存
% matlab里面只需要修改vol的fname這個屬性,然后將修改完的data和vol一起寫會磁盤就行
% 如果不改名字,它會覆蓋原來的nifti文件
vol.fname = 'data_new_matlab.nii';
spm_write_vol(vol, data);
disp('Done!');

4. 總結

nifti相關的矩陣操作主要用到的工具有python里面的nibabel包和matlab里面的spm_vol(), spm_read_vols()和spm_write_vol()這三個函數。


免責聲明!

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



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