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

来源:互联网 发布:multisim for mac下载 编辑:程序博客网 时间:2024/04/29 19:55

 

前段时间写的一个三维显示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'就能看到三维图像了~效果还行~


三,结果截图
2
 
2
 
 
从上面两个图看那个黑色的圈都感觉是被挖去一块,我也被欺骗了,那里实际上只是被挡住,或者被替换成黑色,而不是我们想要的透明色!看下下面这个图就知道了,如果是挖去一块应该能透过去看到对面的峰。。。
 
2
 
四,后话
第一部分的思路本来是想用文字的,后来发现自己到vtk的理解毕竟有限,有些东西还真说不上来,就用插图了~这里用到了VTK Designer,随便向大家推荐这两个软件,主要是向新手了,可以到他的主页去下载:http://www.vcreatelogic.com/products/vtkd/   同时推荐另外一个,叫paraView,可以到http://www.paraview.org/去下载。

从字面上理解,前者应该是用来做设计的,应该属于rad,后者可能主要用于可视化vtk数据。其实这两个软件我也用得不多,我的电脑上安装上这两个东西也就才一个月,也不好做过多评论~当然我介绍这两个东西,并不是让大家,特别是像我这样的新手们去真正用它去做开发,主要我觉得有些时候学习程序真的是一种很枯燥的事情,特别对于vtk这种国内可参考,可借鉴材料又比较少的情况下,没事玩玩那种gui类的软件能很大程度增进我们对vtk的兴趣,抑或增进我们对vtk的理解,比如看了我用VTK Designer做的那个图,vtk管道的理念是不是很清晰地就展现出来了,还有VTK Designer的右边有两个资源管理器,分别可以显示基本的vtk的Algorith,filter,function。。以及它们对应的属性和方法~而且分类很清晰明了!paraView我也就用过一次,它的好处是不用编程直接就能读取所有vtk支持的数据格式,也可以直接添加widget进去交互操作。让你对不同的数据,不同的filter和widget有更深入的理解。。。。其中的好处肯定不止这些,大家自己去发掘吧,毕竟这个比你看我上面那堆冗长的代码要有趣~~

附上VTK Designer的三个截图(这里是运行的是该软件自带的实例):
3
3
 
 
3
paraView的截图:
刚刚截图的过程中再一次感受到paraView的强大,忍不住又多玩了一会~
4
ps:最后还是向大家求助一下,到底用什么filter,能把imagedata挖空一块呢??
原创粉丝点击