VTK修炼之道55:图形基本操作进阶_表面重建技术(等值面提取)
来源:互联网 发布:死而后已 不亦远乎 编辑:程序博客网 时间:2024/05/23 13:17
1.等值面提取
等值面(线)提取是一种常用的可视化技术,常应用于医学、地质、气象等领域。例如,在医学图像处理中,由于CT、MRI等图像分辨率越来越高,虽然体绘制技术可以清晰地对数据内部结构进行可视化,但是其计算量和效率却制约了其使用。此时可通过等值面提取技术,仅提取感兴趣的一个或者几个组织轮廓,并生成网格模型以供后续的处理和研究。根据数据类型的不同,VTK中提供了多个等值面提取类,其类图如图所示:VTK中的等值面提取算法多基于MarchingCube算法来实现。MarchingCube是经典的移动立方体等值面提取算法。该算法是由W.E.Lorenson和H.E.Cline在1987年提出的。由于这一方法原理简单,易于实现,目前已经得到了较为广泛的应用,称为三维数据等值面生成的经典算法。等值面提取类根据数据类型的不同而有所侧重。
- vtkImageMarchingCubes:主要处理三维图像数据
- vtkMarchingCubes:主要针对规则体数据生成等值面
- vtkMarchingSquares:则是针对二维规则网格数据生成等值线
- vtkMarchingContourFilter:可以接受任何类型的数据,其内部根据数据不同生成不同的算法对象实现等值面/线的提取,具有较高的效率
- vtkContourFilter:则是一个更加通用的等值面提取类,其可以接受任意的数据类型生成等值线或等值面。
vtkDiscreteMarchingCubes继承自vtkMarchingCubes,主要针对Label图像,比如利用图像分割算法对医学图像进行分割后得到含有不同Label值得数据,每个Label对应一个组织,吐过想要得到其中一个或者几个组织的洛括模型,则可以考虑使用该类。
2.vtkMarchingCubes用于等值线提取实验
上面的几个类的使用方法基本一致,下面仅以vtkMarchingCubes为例来演示提取图像数据等值面的效果:#include <vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL);VTK_MODULE_INIT(vtkRenderingFreeType);VTK_MODULE_INIT(vtkInteractionStyle);#include <vtkSmartPointer.h>#include <vtkMetaImageReader.h>#include <vtkImageData.h>#include <vtkMarchingCubes.h>#include <vtkPolyDataMapper.h>#include <vtkActor.h>#include <vtkProperty.h>#include <vtkRenderer.h>#include <vtkRenderWindow.h>#include <vtkRenderWindowInteractor.h>#include <vtkInteractorStyleImage.h>#include <vtkVoxelModeller.h>int main(){vtkSmartPointer<vtkMetaImageReader> reader =vtkSmartPointer<vtkMetaImageReader>::New();reader->SetFileName("HeadMRVolume.mhd");reader->Update();vtkSmartPointer<vtkMarchingCubes> surface =vtkSmartPointer<vtkMarchingCubes>::New();surface->SetInputData(reader->GetOutput());surface->ComputeNormalsOn();surface->SetValue(0, 100); //第0个等值面 值为:200surface->Update();//surface->GenerateValues(0, 150, 200);///////////////////////////////vtkSmartPointer<vtkPolyDataMapper> surfMapper =vtkSmartPointer<vtkPolyDataMapper>::New();surfMapper->SetInputConnection(surface->GetOutputPort());vtkSmartPointer<vtkActor> surfActor =vtkSmartPointer<vtkActor>::New();surfActor->SetMapper(surfMapper);surfActor->GetProperty()->SetColor(1, 0, 0);////vtkSmartPointer<vtkRenderer> surfRender =vtkSmartPointer<vtkRenderer>::New();surfRender->AddActor(surfActor);surfRender->SetBackground(0, 0, 0);vtkSmartPointer<vtkRenderWindow> rw =vtkSmartPointer<vtkRenderWindow>::New();rw->AddRenderer(surfRender);rw->SetSize(640, 480);rw->SetWindowName("PolyData MarchingCubes");rw->Render();vtkSmartPointer<vtkRenderWindowInteractor> rwi =vtkSmartPointer<vtkRenderWindowInteractor>::New();vtkSmartPointer<vtkInteractorStyleImage> style =vtkSmartPointer<vtkInteractorStyleImage>::New();rwi->SetInteractorStyle(style);rwi->SetRenderWindow(rw);rwi->Initialize();rwi->Start();return 0;}
首先通过一个reader对象来读取一幅图像,并将输入到vtkMarchingCubes中,提取等值面时,最重要的是要设置等值面的数值,SetValue()函数用于设置等值面的值,其第一个参数表示等值面的序号,因此可以通过这个函数设置多个等值面值来提取多个等值面。另外我们也可以通过GenerateValues提取多个等值面。void GenerateValues(int numContours,double range[2]);void GenerateValues(int numContours, double rangStart, double rangeEnd);
其中,numContour为生成等值面的个数,range表示获取等势面数值的范围。其实,这里面还有一个求取法向量的过程,我们可能会感到比较奇怪??!通过前面分析的内容,我们知道,法向量可以提高渲染质量。
3. cannot convert parameter 1 from 'vtkImageData *' to 'vtkDataObject *'
在vtkuser里看到有人提问了。
解决方法很简单:
增加头文件:
#include "vtkImageData.h"即可
4.一直以来未解决的问题
貌似一直以来除了我,没有人遇到过啊???其实在32bit平台上也没有遇到过。。。继续吧。。。
5.参看资料
1.《C++ primer》
2.《The VTK User’s Guide – 11thEdition》
3. 张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015.
0 0
- VTK修炼之道55:图形基本操作进阶_表面重建技术(等值面提取)
- VTK修炼之道56:图形基本操作进阶_表面重建技术(三维点云曲面重建)
- VTK修炼之道54:图形基本操作进阶_表面重建技术(三角剖分)
- VTK修炼之道49:图形基本操作进阶_网格平滑(点云的曲面重建技术)
- VTK 表面重建-等值面提取
- VTK修炼之道58:图形基本操作进阶_点云配准技术(迭代最近点ICP算法)
- VTK修炼之道47:图形基本操作进阶_法向量计算
- VTK修炼之道51:图形基本操作进阶_连通区域分析
- VTK修炼之道59:图形基本操作进阶_纹理映射
- VTK修炼之道57:图形基本操作进阶_点云配准技术(LandMark标记点算法和坐标系显示方法)
- VTK修炼之道52:图形基本操作进阶_多分辨率策略(模型抽取的三种方法)
- VTK修炼之道53:图形基本操作进阶_多分辨率策略(模型细化的三种方法)
- VTK修炼之道48:图形基本操作进阶_符号化操作与模型区率计算
- VTK修炼之道46:图形基本操作进阶_三角网格体积、表面积、测地距离、包围盒
- VTK修炼之道50:图形基本操作进阶_网格模型的特征边 与 封闭性检测
- VTK修炼之道25:图像基本操作_图像子块提取(特征区域提取)
- VTK修炼之道22:图像基本操作_彩色图像成分提取
- VTK修炼之道26:图像基本操作_三维图像切片提取
- Ubuntu 开机进入命令行
- 2015年蓝桥杯省赛B组第3题--三羊献瑞 (暴力和深搜)
- http://www.cnblogs.com/majiangjiang/p/5528198.html
- python之简单主机批量管理工具
- 底片效果
- VTK修炼之道55:图形基本操作进阶_表面重建技术(等值面提取)
- Tomcat双向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端超安全通信
- Emacs 配置文件
- wxPython Phoenix 和python3.4的编程学习
- Spark学习日志4
- LEETCODE--Sum of Left Leaves
- go语言快速入门:Web开发框架(10)
- 黑色星期五
- SQL Server手把手教你使用profile进行性能监控