读取nii或nii.gz文件中的信息即输出图像操作

读取nii或者nii.gz文件中的信息,并且输出图像。

import matplotlib
from matplotlib import pylab as plt
import nibabel as nib
from nibabel.viewers import OrthoSlicer3D
file = '' #你的nii或者nii.gz文件路径
img = nib.load(file) 

print(img)
print(img.header['db_name']) #输出nii的头文件
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()

补充知识:SimpleITK读取医学图像 .nii 数据(2D显示)

【环境】win10 + python3.6 + SimpleITK

nii文件是NIFTI格式的文件,出现的原因是原来一种图像格式是ANALYZE 7.5 format,但是这个图像格式缺少一些信息,比如没有方向信息,病人的左右方位等,如果需要包括额外的信息,就需要一个额外的文件,比如ANALYZE7.5就需要一对<.hdr, .img>文件来保存图像的完整信息。

因此,解决这个问题Data Format Working Group (DFWG) 将图像格式完整的定义为NIFTI(Neuroimaging Informatics Technology Initiative)格式

import SimpleITK as sitk
import skimage.io as io

def read_img(path):
 img = sitk.ReadImage(path)
 data = sitk.GetArrayFromImage(img)
 return data
#显示一个系列图
def show_img(data):
 for i in range(data.shape[0]):
  io.imshow(data[i,:,:], cmap = 'gray')
  print(i)
  io.show()

#单张显示
def show_img(ori_img):
 io.imshow(ori_img[100], cmap = 'gray')
 io.show()

#window下的文件夹路径
path = 'D:\\datasets\\Naso_GTV\\1\\data.nii.gz'
data = read_img(path)
show_img(data)

img = sitk.ReadImage(path)
#查看图片深度
print(img.GetDepth())
#144 共144张图
#查看Size
print(img.GetSize())
#(512,512,144) 像素:512*512, 144张图片

更多的函数自己去发现

以上这篇读取nii或nii.gz文件中的信息即输出图像操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Ubuntu+python将nii图像保存成png格式

    这里介绍一个nii文件保存为png格式的方法. 这篇文章是介绍多个nii文件保存为png格式的方法: https://www.jb51.net/article/165692.htm 系统:Ubuntu 16.04 软件: python 3.5 先用pip安装nibabel.numpy.imageio.os. import nibabel as nib import numpy as np import imageio import os def read_niifile(niifile): #读

  • Pytorch 使用 nii数据做输入数据的操作

    使用pix2pix-gan做医学图像合成的时候,如果把nii数据转成png格式会损失很多信息,以为png格式图像的灰度值有256阶,因此直接使用nii的医学图像做输入会更好一点. 但是Pythorch中的Dataloader是不能直接读取nii图像的,因此加一个CreateNiiDataset的类. 先来了解一下pytorch中读取数据的主要途径--Dataset类.在自己构建数据层时都要基于这个类,类似于C++中的虚基类. 自己构建的数据层包含三个部分 class Dataset(object

  • python实现批量nii文件转换为png图像

    之前介绍过单个nii文件转换成png图像: https://www.jb51.net/article/165693.htm 这里介绍将多个nii文件(保存在一个文件夹下)转换成png图像.且图像单个文件夹的名称与nii名字相同. import numpy as np import os #遍历文件夹 import nibabel as nib #nii格式一般都会用到这个包 import imageio #转换成图像 def nii_to_image(niifile): filenames =

  • 读取nii或nii.gz文件中的信息即输出图像操作

    读取nii或者nii.gz文件中的信息,并且输出图像. import matplotlib from matplotlib import pylab as plt import nibabel as nib from nibabel.viewers import OrthoSlicer3D file = '' #你的nii或者nii.gz文件路径 img = nib.load(file) print(img) print(img.header['db_name']) #输出nii的头文件 wid

  • python批量修改xml文件中的信息

    目录 项目场景: 问题描述: 分析: 解决方案: 总结 项目场景: 在做目标检测时,重新进行标注会耗费大量的时间,如果能够批量对xml中的信息进行修改,那么将会节省大量的时间,接下来将详细介绍如何修改标注文件xml中的相关信息. 问题描述: 例如:当我有一批标注好的xml文件,文件格式如下图所示 : <?xml version='1.0' encoding='us-ascii'?> <annotation> <folder>VOC2012</folder>

  • 怎样快速从一个XML文件中查找信息

    在网络时代,XML文件起到了一个保存和传输数据的作用.Soap协议通过Xml交流信息,数据库通过Xml文件存取等等.那么怎样快速的从一个XML文件中取得所需的信息呢? 我们知道,JAVA的JAXP中和Microsoft.Net都有Xml分析器,Microsoft.Net是边读边分析,而JAXP是读到内存中然后才进行分析(还有一种是事件机制去读),总而言之,是不利于快速读取.基于此,Microsoft.Net 和JAXP都提供了XPATH机制,来快速定位到XML文件中所需的节点. 例如有一个XML

  • python批量读取文件名并写入txt文件中

    本文实例为大家分享了python批量读取文件名并写入txt中的具体代码,供大家参考,具体内容如下 先说下脚本使用的环境吧,在做项目的过程中需要动态加载图片,使用Unity的Resources.Load方法,但是百十张图片怎么能一 一写下他们的名字作为加载的路径呢?总不能一个一个编辑后存到数组中吧,(虽然我最初是这么做的).所以必须有一个批量的工具,必须的. 于是乎激发了我的灵感,下面看代码.备注少,不动的给我留言,我会及时回复的. #coding=utf-8 import sys import

  • 从XML文件中获取信息的vbs代码

    复制代码 代码如下: '***************************************************************** '** Script: getxmlelement.vbs '** Version: 1.0 '** Created: 1/8/2009 10:58PM '** Author: Adriaan Westra '** E-mail: '** Purpose / Comments: '** Get an element from a xml fi

  • C++提取文件中信息的方法

    对于文件比较复杂的时候,为了获取文件中的信息,需要一些比较特殊的函数,比如,getline().replace().atoi,atof等 例子一,读取以下文件中的数据,并保存进一个类里面. 首先,类的定义如下,感觉是struct,但是按照struct的处理,我这段代码出错了,不知道什么问题,暂时po出来吧,有空看看. struct ImageLabel{ std::string imagePath;//save图片路径名 int faceBox[4];//输入点集的最外层包络矩形rect四个参数

  • 将python运行结果保存至本地文件中的示例讲解

    一.建立文件,保存数据 1.使用python中内置的open函数 打开txt文件 #mode 模式 #w 只能操作写入 r 只能读取 a 向文件追加 #w+ 可读可写 r+可读可写 a+可读可追加 #wb+写入进制数据 #w模式打开文件,如果而文件中有数据,再次写入内容,会把原来的覆盖掉 file_handle=open('1.txt',mode='w') 2.向文件中写入数据 2.1 write写入 #\n 换行符 file_handle.write('hello word 你好 \n') 2

  • 如何将sql执行的错误消息记录到本地文件中实现过程

    其实大家都知道sql语句的错误信息都可以在sys.messages表里面找到 如: 如果在执行语句在try...catch中 我们可以通过以下方法获取错误信息.sql语句如下: 复制代码 代码如下: BEGIN TRY SELECT 3 / 0 END TRY BEGIN CATCH DECLARE @errornumber INT DECLARE @errorseverity INT DECLARE @errorstate INT DECLARE @errormessage NVARCHAR(

  • 详解PHP如何在两个大文件中找出相同记录

    目录 1.引言 2.思路 3.实操 4.生成测试文件 5.分割文件 6.查找重复记录 7.完整代码 1.引言 给定a,b两个文件, 分别有x,y行数据, 其中(x, y均大于10亿), 机器内存限制100M,该如何找出其中相同的记录? 2.思路 处理该问题的困难主要是无法将这海量数据一次性读进内存中. 一次性读不进内存中,那么是否可以考虑多次呢?如果可以,那么多次读入要怎么计算相同的值呢? 我们可以用分治思想, 大而化小.相同字符串的值hash过后是相等的, 那么我们可以考虑使用hash取模,

  • 详解C++编程中对二进制文件的读写操作

    二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件.因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文件. 对二进制文件的操作也需要先打开文件,用完后要关闭文件.在打开时要用ios::binary指定为以二进制形式传送和存储.二进制文件除了可以作为输入文件或输出文件外,还可以是既能输入又能输出的文件.这是和ASCII文件不同的地方. 用成员函数read和write读写二进制文件 对二进制文件的读写主

随机推荐