用VTK实现CT图片的三维重建过程
1.读取数据 首先,读取切片数据,并将其转换为我们的开发工具VTK所支持的一种数据表达形式。我们给CT数据建立的是比较抽象的等值面模型,最后将物理组件与抽象的模型结合在一起来建立对CT 数据的可视化,以帮助用户正确理解数据。利用VTK中的vtkDICOMImageReader 我们可以很方便的读取切片数据,读取数据的代码如下所示:reader = vtkDICOMImageRe
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);//装载绘图窗口
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)