NiftyNet安装+基本使用+运行demo
NiftyNet
1. 安装
NiftyNet 基于 Tensorflow,所以首先要安装 Tensorflow:
conda create -n niftynet python=3.5
conda install tensorflow-gpu==1.2 # for TensorFlow with GPU support
conda install tensorflow==1.2 # for CPU-only TensorFlow
安装 NiftyNet:
(1)直接用 pip 命令安装:
pip install niftynet
(2)从 github 安装:
git clone https://github.com/NifTK/NiftyNet.git
# installing dependencies from the list of requirements
cd NiftyNet/
pip install -r requirements-gpu.txt # for TensorFlow with GPU support
pip install -r requirements-cpu.txt # for CPU-only TensorFlow
也可以直接下载压缩包解压到本地:download the code
2. 测试
安装好以后可以运行一个小 Demo,用 NiftyNet 自带的模型和数据运行一个分割任务。
如果用 pip 安装,那么执行以下命令:
(1)下载模型和权重
先用 net_download
进行下载,然后用 net_segment
执行分割任务
net_download dense_vnet_abdominal_ct_model_zoo
net_segment inference -c ~/niftynet/extensions/dense_vnet_abdominal_ct/config.ini
(2)查看结果
分割的输出结果在 ~/niftynet/models/dense_vnet_abdominal_ct/segmentation_output/
文件夹里,可以看到一个名叫 100__niftynet_out.nii.gz
的文件,用 matlab 或者 python 都可以读取。
如果用第二种方法安装,执行以下命令:
# go to the source code directory
cd NiftyNet/
python net_download.py dense_vnet_abdominal_ct_model_zoo
python net_segment.py inference -c ~/niftynet/extensions/dense_vnet_abdominal_ct/config.ini
.nii 文件的处理
1. NIFTI
.nii 文件是 NIFTI 格式的文件,出现的原因是原来一种图像格式是 ANALYZE 7.5 format,但是这个图像格式缺少一些信息(比如没有方向信息,病人的左右方位等),如果需要包括额外的信息,就需要一个额外的文件,比如 ANALYZE7.5 就需要一对 <.hdr, .img> 文件来保存图像的完整信息。因此,为了解决这个问题,Data Format Working Group (DFWG) 将完整的图像格式定义为 NIFTI(Neuroimaging Informatics Technology Initiative)。
2. 利用 matlab 读取 .nii 文件
首先下载 matlab 相关工具包:Tools for NIfTI and ANALYZE image
将 NIfTI_20140122
工具包放在 ~\MATLAB\toolbox
文件夹下,然后进入 Matlab,添加工具包路径:
添加完成并保存后,更新 Matlab 工具包:
这样就可以正常使用 NIfTI 工具包了。
Matlab 代码:用于提取并查看 .nii 数据
close all;
clear all;
clc;
% 加载.nii数据
nii = load_nii( 'data.nii' );
% 加载图像数据
img = nii.img; % 因为nii文件有img和head两个部分,其中img部分是图像数据
% 将数据变成mat格式
save image.mat img
% 加载数据
load 'image.mat'
% 获取.nii文件的三个维度
[n1, n2, n3] = size(img); % 一般1、2维是图像维度,第3维是切片
% 显示第100个切片的图像
% imshow(img(:,:,100),[]);
% 显示所有图像
for i = 1:n3 % 开始切片数据轮寻
figure(i) % 开始显示图片
ti = imshow(img(:,:,i),[]); % 显示每一张切片图像
pause(0.1); % 防止显示过快看不见,简单延时
end
对比着看一下自带数据包里的原图,标签以及分割结果:
nii = load_nii('100__niftynet_out.nii');
img = nii.img;
save image.mat img
load 'image.mat'
[n1, n2, n3] = size(img);
CT = load_nii('100_CT.nii');
img_ct = CT.img;
save ct.mat img_ct
load 'ct.mat'
[c1, c2, c3] = size(img_ct);
label = load_nii('100_Label.nii');
img_l = label.img;
save label.mat img_l
load 'label.mat'
[l1, l2, l3] = size(img_l);
figure(1)
subplot(1,3,1);
imshow(img_ct(:,:,100), []), title('原图');
subplot(1,3,2);
imshow(img_l(:,:,100), []), title('标签');
subplot(1,3,3);
imshow(img(:,:,100), []), title('分割结果');
3. NIfTI 工具包的常用命令
load_nii
:加载 N 维的 NIfTI 文件(N 可以是 3 - 7)make_nii
:生成 N 维的 NIfTI 结构文件,结合 load_nii
命令可以将生成的结构保存为 NIfTI 文件save_nii
:将通过 load_nii
命令加载的或通过 make_nii
生成的数据保存为 N 维的 NIfTI 结构文件