nrrd格式的读取

1.NRRD文件
NRRD文件介绍官网    http://teem.sourceforge.net/nrrd/format.html

灵活的NRRD格式包含了一个单独的头文件和若干个可以被结合在一起或者分开的图像文件。NRRD头文件为科学可视化和图像处理准确地表征了N维光栅信息。

NRRD格式表征扩散加权图像(DWI)体积和扩散张量图像(DTI)

为了目视确认张量的方向和期望的神经解剖学的结构一致,NRRD DWI NRRD DTI 数据能够被读取为 3D 切片。

nrrd格式的读取_第1张图片

Ø  Magic

NRRD0001: 初始和最基本的版本

NRRD 0002 : 增加key/value (键值对)

NRRD 0003: 增加“kinds”:field

NRRD 0004 : 加入“thicknesses”和“sample units”,added "thicknesses:" and "sample units" fields,general space and orientation information ("space:", "spacedimension:", "space directions:", "space origin:", and"space units:" fields) , and the ability for the "datafile:" field to identify multiple data files.

NRRD 0005: 加入“measurement frame

Ø  句尾的符号“\r\n”表示windows创建的文件  \n”表示用户创建的文件;

Ø  "<field>: <desc>" 指定关于某个字段的信息,每一行称为“field specification”或简称“field

Ø  "<key>:=<value>" 键值对

Key的长度必须多于一个字符,value可以为空

Ø  注释行以#开头

NRRD 文件头包括magic,字段信息,键值对和注释。文件头后面紧跟一空行,分割文件头

Ø  dimension: <int> 维度信息表示

每个轴上的样本数是每个轴的必需信息

sizes: <size[0]> <size[1]> ...<size[dim-1]>

size[i]表示对应轴i上的样本数目,轴排序从最快到最慢(from fastest to slowest)

Ø  type:

type标记包括intfloatuncharblock

Ø  encoding:

说明数据写入的格式,asciirawhex

Ø  Space

指定数组所在的特定空间,

Space dimension:

Space origin :

数组中第一个样本的中心位置,该值在数据文件中首先给出,或者占据最低内存地址

Space directions: ……

给出每个轴的方向和间距



为了读取encoding为gzip格式的nrrd文件,做了很多尝试……

2. NRRD格式内容
encoding格式为gzip格式的nrrd文件,比较小,是经过压缩后的数据存储
用Binary Viewer 软件打开nrrd文件,显示的内容如下:
nrrd格式的读取_第2张图片

是二进制文件
 
3. NRRD文件读取
(1)因为用的软件是使用QT开发的,所以首先尝试用QFile输出文件的内容
nrrd格式的读取_第3张图片

获得的nrrd文件内容如下,和用ImageJ打开看到的内容一致

nrrd格式的读取_第4张图片
但只是head的内容,没有后面data的数据内容。

说明: QT不能实现解压缩,不能读取到gzip压缩过的nrrd文件内容。
(2) VTK
高版本的VTK库有vtkNrrdReader.h,该文件可以操作nrrd文件

(3) ITK
ITK内有处理nrrd文件的代码, itk::NrrdImageIO
itk::NrrdImageIO         https://itk.org/Doxygen/html/classitk_1_1NrrdImageIO.html

(4) C++
用C++直接读取nrrd文件的内容
nrrd格式的读取_第5张图片

以二进制文件的格式打开nrrd文件,能读取到和binary viewer一样的数据

保存下来的数据个数和用binary viewer软件打开的数据一致,如果不以二进制格式打开读取的话,遇到某些字符会判定为结束符,导致读取停止。

4. NRRD数据解压缩
  
(1)根据nrrd文件官网解释,encoding= gzip格式的文件,可以用zlib库实现解压缩,读取到解压缩后的数据
    (a) gzopen()

   

gzopen打开文件进行读取,不能读取nrrd文件格式,可以用于gzip文件

nrrd格式的读取_第6张图片

Ø  结果:Gzopen只读出了头文件的内容,没有解压数据

(b) uncompress()

先读取nrrd文件的二进制数据(压缩后的),然后用uncompress函数进行解压缩

nrrd格式的读取_第7张图片

输出的err-3,表示Z_DATA_ERROR, 数据被破坏,

依次输出source的数据,和以二进制格式打开得到的数据一致,解压缩后得到的数据长度是0,解压缩并没有成功。

(2) Teem 编译产生unu命令行,调用读取nrrd文件,C++程序调用exe程序

 

Ø  WinExec(“unu.exe head –o CL_Merge.nrrd, SW_SHOW,得到nrrd文件头

Ø  Unu.exe data CL_Merge.nrrd data命令行得到的数据结果是乱码
nrrd格式的读取_第8张图片

在C++程序中调用并且将解压缩后的数据输出至指定文件


5. RAW 文件读取

RAW是未经处理、也未经压缩的格式,可以把 RAW 概念化为“原始图像编码数据”或更形象的称为“数字底片”。 RAW格式的 全称RAW  Image Format,在编程中称之为原始 。
raw文件的读取可以直接进行,用C++读取二进制文件的方式进行,即可读取出raw文件的内容。

参考资料: 
                https://blog.csdn.net/damenhanter/article/details/7289701
                https://bbs.csdn.net/wap/topics/290052885

                https://bbs.csdn.net/topics/390768002

                https://blog.csdn.net/songzitea/article/details/8538256

                https://blog.csdn.net/sweet_dew/article/details/40751379

医疗影像数据预处理-nrrd https://blog.csdn.net/github_33934628/article/details/78897565
vtk实战(八)—读取.raw文件        https://blog.csdn.net/u012176176/article/details/51243500
医疗影像分析:文件格式篇      http://www.myzaker.com/article/597ec3ed1bc8e0ab6300003d/

读取图片并显示每个像素处的RGB值      https://blog.csdn.net/u012501459/article/details/36698033

基于WEBGL的医学图像三维重建   http://www.doc88.com/p-7714009579151.html

itk::NrrdImageIO         https://itk.org/Doxygen/html/classitk_1_1NrrdImageIO.html



  

   



你可能感兴趣的:(Medical,Image,Processing,nrrd)