由于最近碰到了数据格式的问题,重建不出效果很是头疼,所以简单总结下数据格式相关内容,我的主要开发包是ITK+VTK+QT,所以要说的格式内容基本和VTK相关。
1. Fileformats(
几种数据格式介绍
)
Images
dcm (DICOM Image,only Read): DICOM的 全 称 是 Digital Imaging and Communications in Medicine (DICOM),它是用于处理,存储,打印,和在医学成像发送信息的标准 ,它包括文件格式定义和一个网络通信协议。至于文件格式定义,可以参考其他资料。
mha/mhd(Meta Image): 它指定表示该元信息中关于像素数据的报头的一个标准化的方法;
vti (VTK XML Image Data): 可视化工具包(VTK)的
图像格式
;带有嵌入二进制数据的XML语法;非常灵活;可以代表在同一文件的多个标量/矢量/张量数据;不支持图像方向(尽管它可以包括表示方向矩阵的自定义数据。注意:是image data!
Surfaces
vtp (VTK XML): 可视化工具包(VTK)的表示表面的数据;带有嵌入二进制数据的XML语法; POLYDATA(VTP,在VTK的数据体系中就是:串行vtkPolyData(非结构化)
stl (Stereolithography): STL(立体光刻)是一种文件格式,原产于通过3D系统创建的立体CAD软件。STL中也被称为标准的Tessellation语言。 STL文件描述三维物体的只是表面的几何形状没有颜色的任何声明,质地或其他常见的CAD模型属性。 STL的格式指定ASCII和二进制表示。二进制文件是比较常见的,因为他们更紧凑
Meshes
vtu (VTK XML): 可视化工具包(VTK)为网格格式;带有嵌入二进制数据的XML语法; UnstructuredGrid(VTU)—在VTK的数据体系中就是:串行vtkUnstructuredGrid (非结构化)
xda (libMesh, only Write): libMesh meshfiles consist of two sections, the header and the data. The header containsimportant size information. It defines the number of elements, number of nodes,etc… that are in the mesh. The data section contains the actual elementconnectivity, the nodal coordinates, and any boundary condition information
vtk: 可视化工具包(VTK)为网格格式;ASCII或二进制格式
具体可以参考:http://www.vmtk.org/documentation/getting-started.html
2. Image formatconversion(图像格式转换)
我做的方向是点云重建这一块,刚刚起步,目前碰到的数据格式并不多。所以这里且当抛砖引玉好了。
1) dicom格式到.vti格式:
Suppose youwant to write the image volume in vti format (the VTK XML format for images -it’s convenient because it’s internally gzip’d):
如果你装了VMTK,可以:
vmtkimagereader-f dicom -d dicom_directory_path --pipe vmtkimagewriter -ofile image_volume.vti
2) polydata转到volumerepresentation (vtkImageData)
参考:
http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/PolyDataToImageData
里面附带了全部的源代码,编译后就可以运行的。
3) Read vtp fileand write a ply file
参考:http://www.cmake.org/Wiki/VTK/Examples/Cxx/IO/ConvertFile
4) 一个开源包:gdcm2vtk(太强大了)
The gdcm2vtktakes as input any file supported by VTK (including DICOM file) and willgenerate as output a DICOM file.
http://manpages.ubuntu.com/manpages/oneiric/man1/gdcm2vtk.1.html
http://gdcm.sourceforge.net/html/gdcm2vtk.html
5)利用paraview软件(免费)
paraview支持的格式:
.boundary,.cas, .case, .cosmo, .cube, .csv, .dem, .d3plot, .e, .ex, .ex2v2, .exo, .exoii,.foam, .g, .gen, .gadget2, .hierarchy, .inp, .isdyna, .k, .mha, .mhd, .nc,.ncdf, .netcdf, .nhdr, .nrrd, .obj, .particles, .pdb, .pht, .ply, .png, .pop,.pvd, .pvti, .pvtk, .pvtp, .pvtr, .pvts, .pvtu, .raw, .res, .sesame, .sos,.spcth, .stl, .tec, .tiff, .tp, .vpc, .vrml, .vthb, .vti, .vtk, .vtm, .vtmb,.vtp, .vtr, .vts, .vtu, .wind, .wrl, .xdmf, .xmf, .xyz
还有一个好处就是这个软件是可视化的,有很多参数可以一目了然
vtkImageData* storedImage = vtkImageData::New();
storedImage->ShallowCopy(this->Image);
storedImage->SetOrigin(this->LongitudeRange[0], this->LatitudeRange[0], 0);
storedImage->SetSpacing(this->LongitudeRange[1], this->LatitudeRange[1], 0);
vtkXMLImageDataWriter* writer = vtkXMLImageDataWriter::New();
char fn[512];
sprintf(fn, "%s/tile_%d_%ld.vti", prefix, this->Level, this->Id);
writer->SetFileName(fn);
writer->SetInputData(storedImage);
writer->Write();
writer->Delete();
storedImage->Delete();
医学图像数据格式和格式转换
由于最近碰到了数据格式的问题,重建不出效果很是头疼,所以简单总结下数据格式相关内容,我的主要开发包是ITK+VTK+QT,所以要说的格式内容基本和VTK相关。
1. Fileformats(
几种数据格式介绍
)
Images
dcm (DICOM Image,only Read): DICOM的 全 称 是 Digital Imaging and Communications in Medicine (DICOM),它是用于处理,存储,打印,和在医学成像发送信息的标准 ,它包括文件格式定义和一个网络通信协议。至于文件格式定义,可以参考其他资料。
mha/mhd(Meta Image): 它指定表示该元信息中关于像素数据的报头的一个标准化的方法;
vti (VTK XML Image Data): 可视化工具包(VTK)的
图像格式
;带有嵌入二进制数据的XML语法;非常灵活;可以代表在同一文件的多个标量/矢量/张量数据;不支持图像方向(尽管它可以包括表示方向矩阵的自定义数据。注意:是image data!
Surfaces
vtp (VTK XML): 可视化工具包(VTK)的表示表面的数据;带有嵌入二进制数据的XML语法; POLYDATA(VTP,在VTK的数据体系中就是:串行vtkPolyData(非结构化)
stl (Stereolithography): STL(立体光刻)是一种文件格式,原产于通过3D系统创建的立体CAD软件。STL中也被称为标准的Tessellation语言。 STL文件描述三维物体的只是表面的几何形状没有颜色的任何声明,质地或其他常见的CAD模型属性。 STL的格式指定ASCII和二进制表示。二进制文件是比较常见的,因为他们更紧凑
Meshes
vtu (VTK XML): 可视化工具包(VTK)为网格格式;带有嵌入二进制数据的XML语法; UnstructuredGrid(VTU)—在VTK的数据体系中就是:串行vtkUnstructuredGrid (非结构化)
xda (libMesh, only Write): libMesh meshfiles consist of two sections, the header and the data. The header containsimportant size information. It defines the number of elements, number of nodes,etc… that are in the mesh. The data section contains the actual elementconnectivity, the nodal coordinates, and any boundary condition information
vtk: 可视化工具包(VTK)为网格格式;ASCII或二进制格式
具体可以参考:http://www.vmtk.org/documentation/getting-started.html
2. Image formatconversion(图像格式转换)
我做的方向是点云重建这一块,刚刚起步,目前碰到的数据格式并不多。所以这里且当抛砖引玉好了。
1) dicom格式到.vti格式:
Suppose youwant to write the image volume in vti format (the VTK XML format for images -it’s convenient because it’s internally gzip’d):
如果你装了VMTK,可以:
vmtkimagereader-f dicom -d dicom_directory_path --pipe vmtkimagewriter -ofile image_volume.vti
2) polydata转到volumerepresentation (vtkImageData)
参考:
http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/PolyDataToImageData
里面附带了全部的源代码,编译后就可以运行的。
3) Read vtp fileand write a ply file
参考:http://www.cmake.org/Wiki/VTK/Examples/Cxx/IO/ConvertFile
4) 一个开源包:gdcm2vtk(太强大了)
The gdcm2vtktakes as input any file supported by VTK (including DICOM file) and willgenerate as output a DICOM file.
http://manpages.ubuntu.com/manpages/oneiric/man1/gdcm2vtk.1.html
http://gdcm.sourceforge.net/html/gdcm2vtk.html
5)利用paraview软件(免费)
paraview支持的格式:
.boundary,.cas, .case, .cosmo, .cube, .csv, .dem, .d3plot, .e, .ex, .ex2v2, .exo, .exoii,.foam, .g, .gen, .gadget2, .hierarchy, .inp, .isdyna, .k, .mha, .mhd, .nc,.ncdf, .netcdf, .nhdr, .nrrd, .obj, .particles, .pdb, .pht, .ply, .png, .pop,.pvd, .pvti, .pvtk, .pvtp, .pvtr, .pvts, .pvtu, .raw, .res, .sesame, .sos,.spcth, .stl, .tec, .tiff, .tp, .vpc, .vrml, .vthb, .vti, .vtk, .vtm, .vtmb,.vtp, .vtr, .vts, .vtu, .wind, .wrl, .xdmf, .xmf, .xyz
还有一个好处就是这个软件是可视化的,有很多参数可以一目了然
vtkImageData* storedImage = vtkImageData::New();
storedImage->ShallowCopy(this->Image);
storedImage->SetOrigin(this->LongitudeRange[0], this->LatitudeRange[0], 0);
storedImage->SetSpacing(this->LongitudeRange[1], this->LatitudeRange[1], 0);
vtkXMLImageDataWriter* writer = vtkXMLImageDataWriter::New();
char fn[512];
sprintf(fn, "%s/tile_%d_%ld.vti", prefix, this->Level, this->Id);
writer->SetFileName(fn);
writer->SetInputData(storedImage);
writer->Write();
writer->Delete();
storedImage->Delete();
javascript 固话 js调用电话
selectPhoneNumber(str) {
var regx = /(1[3|4|5|7|8][\d]{9}|0[\d]{2,3}-[\d]{7,8}|400[-]?[\d]{3}[-]?[\d]{4})/g;
var phoneNums = str.match(regx);
if (phoneNums) {
for (var i = 0;