用VTK读二进制文件问题

phoenixzz 2003-07-21 10:06:38
现有一二进制文件,不知道怎么让VTK可以读入,并且绘出等值面?
...全文
240 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
phoenixzz 2003-07-29
  • 打赏
  • 举报
回复
受益非浅!感谢CrazyHippo(河马) ,问题解决了,散分!
CrazyHippo 2003-07-28
  • 打赏
  • 举报
回复
看看examples吧,简单的基本的功能好像都有(我也刚开始看)
比如下面的一段从medical1.cxx中节录的:

// The following reader is used to read a series of 2D slices (images)
// that compose the volume. The slice dimensions are set, and the
// pixel spacing. The data Endianness must also be specified. The reader
// usese the FilePrefix in combination with the slice number to construct
// filenames using the format FilePrefix.%d. (In this case the FilePrefix
// is the root name of the file: quarter.)
vtkVolume16Reader *v16 = vtkVolume16Reader::New();
v16->SetDataDimensions (64,64);
v16->SetImageRange (1,93);
v16->SetDataByteOrderToLittleEndian();
v16->SetFilePrefix (argv[1]);
v16->SetDataSpacing (3.0, 3.0, 1.5);

// An isosurface, or contour value of 500 is known to correspond to the
// skin of the patient. Once generated, a vtkPolyDataNormals filter is
// is used to create normals for smooth surface shading during rendering.
vtkContourFilter *skinExtractor = vtkContourFilter::New();
skinExtractor->SetInput((vtkDataSet *) v16->GetOutput());
skinExtractor->SetValue(0, 500);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
待提取的等值面灰度值

vtkPolyDataNormals *skinNormals = vtkPolyDataNormals::New();
skinNormals->SetInput(skinExtractor->GetOutput());
skinNormals->SetFeatureAngle(60.0);
vtkPolyDataMapper *skinMapper = vtkPolyDataMapper::New();
skinMapper->SetInput(skinNormals->GetOutput());
skinMapper->ScalarVisibilityOff();
vtkActor *skin = vtkActor::New();
skin->SetMapper(skinMapper);


phoenixzz 2003-07-27
  • 打赏
  • 举报
回复
谁帮帮我啊?
amagic 2003-07-24
  • 打赏
  • 举报
回复
你试试vtkMarchingCubes这个filter,它就是用MC算法对三维数据进行面绘制,你只需要设置一下等值面的值就可以了。
allendragon 2003-07-23
  • 打赏
  • 举报
回复
那你处理后应该知道等值面处的灰度值,你把该灰度值作为阈值不就可以了吗?
phoenixzz 2003-07-23
  • 打赏
  • 举报
回复
感谢 allendragon() 的回答.现在的数据是处理后的,打个比方,一个64*64*15的数据场,已经按顺序读进vtkfloatArrary里,现在怎么显示其等值面?
red-fly 2003-07-23
  • 打赏
  • 举报
回复
VTK是什么?
allendragon 2003-07-23
  • 打赏
  • 举报
回复
那就是数据处理的问题了,而不是文件读入的问题啊,而且我还不太理解你的意思,你要读的文件是处理前,还是处理后的?要是处理前的,如果你的三维图像是由比如BMP位图叠加而成的,三维图像里虽然存在isosurface,但是你需要处理才能分割出来isosurface,要是处理后的,难道你把三维图像存成二值图像了吗?即只有背景和等值面?
phoenixzz 2003-07-23
  • 打赏
  • 举报
回复
是普通二进制文件,文件读入是可以完成,现在的问题是怎样象读入JPEG、BMP等文件那样显示其等值面?
phoenixzz 2003-07-23
  • 打赏
  • 举报
回复
是啊,等值面处的灰度值知道,就是不知道怎么用?能给个例子吗?
calthus 2003-07-23
  • 打赏
  • 举报
回复
他要读入的是一个数据场,现在是不知道如何把这个数据场变为生成等值面的类所能接受的输入形式。
phoenixzz 2003-07-22
  • 打赏
  • 举报
回复
啊,没有人会吗?
Turing_0 2003-07-22
  • 打赏
  • 举报
回复
gz
allendragon 2003-07-22
  • 打赏
  • 举报
回复
你读的是普通文件还是vtk文件,要是一般文件的话,用c语言就可以读啊,如果是vtk文件,你弄清楚它的格式,也可以用c读啊。vtk文件的一般格式为:
*)文件头:vtk的版本号
*)数据类型:ASCII或Binary
*)数据几何体及表面形状:指定结构点,结构网格,非结构网格等
*)数据点:数据属性,数据需与数据设置指定的点相一致。

4,446

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧