ImageData的三维可视化实例[mask, warp, normals, LookupTable]

 

前段时间写的一个三维显示imageDate的例子,也是摸索了好久,现在发出来大家探讨一下,因为所有的filter都是我自己一边看资料一边试出来的,所以可能不是最好的解决方案,欢迎提出意见!

一,设计思路:
如下图所示:
1
 
 
上面有些filter都有很多参数的 设置,例如vtkPolyDataNormals,我在代码中有少量注释,大家也可以自己修改相关的参数,试验一下效果!
另外,上面为了大家能够方便测试,我用的是vtkdata里面的数据(编译是可能要改变成你自己的路径),但具体 应用的时候,肯定要使用我们自己的数据,下面也附上imagedata的生成方法:
        //---------------------------------------------------------
        //vtkImageData
        //nx ny分别为行列数,space为cell的大小,ori_x和ori_y分别为x和y的起始坐标
        double        *data =        new double[nx*ny];
        //输入或者从文件中读取data
        vtkDoubleArray *scalars = vtkDoubleArray::New();
        scalars->SetArray(data,nx*ny,1);
        vtkImageData *id = vtkImageData::New();
        id->GetPointData()->SetScalars(scalars);
        id->SetDimensions(nx,ny,1);
        id->SetScalarTypeToDouble();
        id->SetSpacing(space,space,1.0);
        id->SetOrigin(ori_x,ori_y,0.0);

二,程序代码
这段代码是我刚刚跟 [尼罗河里的猫] 一起探讨vtkImageMask时的测试程序,后来也没有把相关部分删除,也可以让大家参考下mageMask的用法~而且在这里我们也遇到了一个问题,如果这张图里面我想做出一个空洞的效果(就像gif图片里的透明色),该如何完成,想到用mageMask::SetMaskAlpha(1),后来发现这个方法只是挡住了,mask的1值所在部分,并不是挖出一个圆来~这个到底如何实现呢,知道的朋友还望指教一二~

另外,在这段代码中我也用到了imageviewer来做二维显示,当然你如果只是想显示二维图像,用这个是最快捷的~但这里的交互style是用鼠标改变ColorWindow和ColorLevel,不太另人满意,当然你可以给鼠标事件添加obersver来屏蔽!显示完二维图像按'e'或者'q'就能看到三维图像了~效果还行~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在Python中使用VTK可视化三维数组的步骤与C++类似。以下是一些简单的步骤: 1. 导入必要的VTK库和模块。 ``` import vtk import numpy as np ``` 2. 创建一个numpy数组并将其转换为vtkImageData对象。 ``` dataArray = np.random.rand(xDim, yDim, zDim) # 创建一个随机数据的三维数组 imageData = vtk.vtkImageData() imageData.SetDimensions(xDim, yDim, zDim) # 设置vtkImageData对象的维度 imageData.SetOrigin(0, 0, 0) # 设置vtkImageData对象的原点 imageData.SetSpacing(1, 1, 1) # 设置vtkImageData对象的间距 vtkData = vtk.vtkFloatArray() # 创建vtkFloatArray对象 vtkData.SetNumberOfComponents(1) vtkData.SetNumberOfTuples(xDim * yDim * zDim) for i in range(xDim): for j in range(yDim): for k in range(zDim): value = dataArray[i][j][k] # 从数组中获取数据 vtkData.SetValue(i * yDim * zDim + j * zDim + k, value) # 将数据添加到vtkFloatArray对象中 imageData.GetPointData().SetScalars(vtkData) # 将vtkFloatArray对象添加到vtkImageData对象中 ``` 3. 创建一个vtkImageActor对象并将vtkImageData对象添加到其中。 ``` imageActor = vtk.vtkImageActor() imageActor.SetInputData(imageData) # 设置vtkImageData对象 ``` 4. 创建一个vtkRenderer对象并将vtkImageActor对象添加到其中。 ``` renderer = vtk.vtkRenderer() renderer.AddActor(imageActor) # 添加vtkImageActor对象 ``` 5. 创建一个vtkRenderWindow对象并将vtkRenderer对象添加到其中。 ``` renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) # 添加vtkRenderer对象 ``` 6. 创建一个vtkRenderWindowInteractor对象并将其与vtkRenderWindow对象关联。 ``` interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) # 设置vtkRenderWindow对象 ``` 7. 最后,初始化vtkRenderWindowInteractor对象并进入事件循环。 ``` interactor.Initialize() # 初始化vtkRenderWindowInteractor对象 renderWindow.Render() # 渲染vtkRenderWindow对象 interactor.Start() # 进入事件循环 ``` 以上就是使用VTK可视化三维数组的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值