VTK教程之十 可视化基础算法-三维轮廓面(等值面)提取
来源:互联网 发布:linux zip 解压命令 编辑:程序博客网 时间:2024/05/18 19:44
在VTK中,轮廓面提取功能主要面对的是三维规则网格数据集,三维规则网格数据集的单元一般为立方体单元,轮廓面的提取主要采用移动立方体算法(Marching Cubes),VTK提供的类对该算法进行了封装,下面给出三维轮廓面提取的示例程序。
#include "stdafx.h"
#include <vtkSmartPointer.h>
#include <vtkVolume16Reader.h>
#include <vtkMarchingCubes.h>
#include <vtkVectorNorm.h>
#include <vtkPolyDataMapper.h>
#include "vtkActor.h"
#include "vtkCamera.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include <vtkMergePoints.h>
int _tmain(int argc, _TCHAR* argv[])
{
//读取bit的图像数据
vtkSmartPointer<vtkVolume16Reader>pVol16Read=vtkVolume16Reader::New();
//设置每幅图像的像数尺寸
pVol16Read->SetDataDimensions(64,64);
//标识所读取文件的字节序,对于PC机,进行该设置
pVol16Read->SetDataByteOrderToLittleEndian();
//设置读取的图像文件名前缀
pVol16Read->SetFilePrefix(".\\headsq\\quarter");
//设定读取的图像数量
pVol16Read->SetImageRange(1,93);
pVol16Read->SetDataOrigin(0,0,0);
pVol16Read->SetDataSpacing(3.2,3.2,1.5);
//定义移动立方体过滤器对象
vtkSmartPointer<vtkMarchingCubes>pMarchCube=vtkMarchingCubes::New();
//归并重合的点
vtkSmartPointer<vtkMergePoints>pMeragePoint=vtkMergePoints::New();
pMeragePoint->SetDivisions(32,32,46);
pMeragePoint->SetNumberOfPointsPerBucket(100);
//处理体数据
pMarchCube->SetInput((vtkDataObject *)pVol16Read->GetOutput());
//设置提取的等值面的值
pMarchCube->SetValue(0,1150);
//计算梯度
pMarchCube->ComputeGradientsOn();
pMarchCube->ComputeScalarsOff();
pMarchCube->SetLocator(pMeragePoint);
//生成等值面单元、顶点的标量值
vtkSmartPointer<vtkVectorNorm>pVectorNormal=vtkVectorNorm::New();
pVectorNormal->SetInput(pMarchCube->GetOutput());
//得到生成的标量值范围
double Rang[2];
pVectorNormal->GetOutput()->GetScalarRange(Rang);
//定义映射器
vtkSmartPointer<vtkPolyDataMapper>pMapper=vtkPolyDataMapper::New();
pMapper->SetInput((vtkPolyData *)pVectorNormal->GetOutput());
pMapper->ScalarVisibilityOn();
pMapper->SetScalarRange(0,1250);//Rang[0],Rang[1]);
vtkSmartPointer<vtkActor>pActor = vtkActor::New();
pActor->SetMapper(pMapper);
//绘制
vtkSmartPointer<vtkRenderer>renderer = vtkRenderer::New();
vtkSmartPointer<vtkRenderWindow>renWin = vtkRenderWindow::New();
renWin->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor>iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
renderer->AddActor(pActor);
renderer->ResetCamera();
renderer->SetBackground(1,1,1);
renWin->SetSize(300,300);
renWin->Render();
iren->Start();
return 0;
}
该示例程序读取一系列的头骨切片图像数据,构建体数据,然后利用移动立方体算法提取属性值为1150的表面,程序中利用vtkMarchingCubes类进行表面提取,该类对移动立方体法进行了封装,程序运行结果如下:
- VTK教程之十 可视化基础算法-三维轮廓面(等值面)提取
- VTK 三维轮廓等值面的提取
- VTK教程之十 可视化基础算法-三维…
- vtk 提取等值面并显示
- VTK 表面重建-等值面提取
- VTK修炼之道55:图形基本操作进阶_表面重建技术(等值面提取)
- MarchingCubes算法提取等值面的基本原理
- VTK教程之十三 可视化基础算法-位…
- VTK教程之七 可视化基础算法-概述
- VTK教程之八 可视化基础算法-颜色…
- VTK教程之九 可视化基础算法-二维…
- VTK教程之十一 可视化基础算法-方…
- VTK教程之十二 可视化基础算法-几…
- VTK 面绘制 三维数据源
- VTK修炼之道61:体绘制_光线投影+最大密度投影+等值面法
- VTK轮廓提取
- VTK学习之路——可视化基础算法
- 图形处理(九)点云重建(下)法矢求取、有向距离场等值面提取
- Solr多核配置
- [iPhone高级] 基于XMPP的IOS聊天客户端程序(IOS端一)
- linux 学习笔记01
- Qt使用AES加密算法对字符串进行加密
- 情以何堪的伤感QQ日志分享:一句话,了断一切
- VTK教程之十 可视化基础算法-三维轮廓面(等值面)提取
- [iPhone高级] 基于XMPP的IOS聊天客户端程序(IOS端二)
- [iPhone高级] 基于XMPP的IOS聊天客户端程序(IOS端三)
- UPnP协议编程实践
- Hibernate多对一双表关联配置属性理解
- Android美工坊--listview更改选中时item背景色
- Android之ListView原理学习与优化总结
- 理解ASM(一)ASM与LVM、ASM实例与RDBMS实例的简单类比
- 迷茫的双眼,看不清世界的浑浊