1.读取数据
reader =
reader->SetDataByteOrderToLittle
reader->SetDirectoryName(m_path);
shrink=vtkImageShrink3D::New();//抽取样点,显示数量减少速达加快
shrink->SetShrinkFactors(4,4,1);
shrink->AveragingOn();
shrink->SetInput((vtkDataObject *)reader->GetOutput());
2.提取等值面
vtkMarchingCubes
skinExtractor->SetValue(0,300); //提取出CT
skinExtractor->SetInputConnection(shrink->GetOutputPort());
vtkDecimatePro *deci=vtkDecimatePro::New(); //减少数据读取点,以牺牲数据量加速交互
deci->SetTargetReduction(0.3);
deci->SetInputConnection(skinExtractor->GetOutputPort());
vtkSmoothPolyDataFilter *smooth=vtkSmoothPolyDataFilter::New();
smooth->SetInputConnection(deci->GetOutputPort());
smooth->SetNumberOfIterations(200)
vtkPolyDataNormals * skinNormals = vtkPolyDataNormals::New();
skinNormals->SetInputConnection(smooth->GetOutputPort());
skinNormals->SetFeatureAngle(60.0);
vtkStripper *stripper=vtkStripper::New();
stripper->SetInputConnection(skinNormals->GetOutputPort());
vtkPolyDataMapper *skinMapper = vtkPolyDataMapper::New();
skinMapper->SetInput(stripper->GetOutput());
skinMapper->ScalarVisibilityOff();
利用同样的方法,我们也可以提取出骨骼的等值面。骨骼的CT 值是1150 左右。所以只要在SetValue()方法中将参数设置为1150 就可以了。而且Visualization Toolkit支持多表面重建,所以在实际应用中我们可以设置多个参数值,提取出多个等值面并同时显示出来。在这个应用实例中我们只对血管等值面进行了重建。
//设置照相机
aCamera = vtkCamera::New();
aCamera->ComputeViewPlaneNormal();
//设置Actor相关系数
coneActor = vtkActor::New();
coneActor->GetProperty()->SetAmbient(0.5);
//显示类
renderer = vtkRenderer::New();
renderer->AddActor(coneActor);//添加coneActor对象
renderer->SetBackground(0,0,0);
renderer->SetActiveCamera(aCamera);//添加照相机
renWin = vtkRenderWindow::New();//设置绘图窗口renWin->AddRenderer(renderer);//装载绘图类
iren = vtkWin32RenderWindowInte
iren->SetRenderWindow(renWin);//装载绘图窗口