VTK使用入门(四)

  #include "vtkDICOMImageReader.h"
  #include "vtkRenderer.h"
  #include "vtkRenderWindow.h"
  #include "vtkRenderWindowInteractor.h"
  //#include "vtkVolume16Reader.h"
  #include "vtkPolyDataMapper.h"
  #include "vtkActor.h"
  #include "vtkProperty.h"
  #include "vtkOutlineFilter.h"
  #include "vtkCamera.h"
  #include "vtkPolyDataNormals.h"
  #include "vtkStripper.h"
  #include "vtkMarchingCubes.h" int main(int argc, char **argv)
  {
  if (argc SetDirectoryName("d:/headsq/");
  v16->SetFilePrefix(argv[1]);
  v16->SetDataSpacing(1.0,1.0,1.0);
  v16->Update();
  //=====================重建皮肤=============================
  vtkMarchingCubes *skinExtractor = vtkMarchingCubes::New();
  skinExtractor->SetInputConnection(v16->GetOutputPort ());
  skinExtractor->SetValue(0,500);
  vtkPolyDataNormals *skinNormals = vtkPolyDataNormals::New();
  skinNormals->SetInputConnection(skinExtractor->GetOu tputPort());
  skinNormals->SetFeatureAngle(60.0);
  vtkStripper *skinStripper = vtkStripper::New();
  skinStripper->SetInputConnection(skinNormals->GetOut putPort());
  vtkPolyDataMapper *skinMapper = vtkPolyDataMapper::New();
  skinMapper->SetInputConnection(skinNormals->GetOutpu tPort());
  skinMapper->ScalarVisibilityOff();
  vtkActor *skin = vtkActor::New();
  skin->SetMapper(skinMapper);
  skin->GetProperty()->SetDiffuseColor(1, .49, .25);
  skin->GetProperty()->SetSpecular( .3);
  skin->GetProperty()->SetSpecularPower(20);
  skin->GetProperty()->SetOpacity(1.0);
  //=======================重建骨骼================================
  vtkMarchingCubes *boneExtraractor = vtkMarchingCubes::New();
  boneExtraractor->SetInputConnection(v16->GetOutputPo rt());
  boneExtraractor->SetValue(0,1150);
  vtkPolyDataNormals *boneNormals = vtkPolyDataNormals::New();
  boneNormals->SetInputConnection(boneExtraractor->Get OutputPort());
  boneNormals->SetFeatureAngle(60.0);
  vtkStripper *boneStripper = vtkStripper::New();
  boneStripper->SetInputConnection(boneStripper->GetOu tputPort());
  vtkPolyDataMapper *boneMapper = vtkPolyDataMapper::New();
  boneMapper->SetInputConnection(boneMapper->GetOutput Port());
  boneMapper->ScalarVisibilityOff();
  vtkActor *bone = vtkActor::New();
  bone->SetMapper(boneMapper);
  bone->GetProperty()->SetDiffuseColor(1,1, .9412);
  //=============================建立轮廓============================
  vtkOutlineFilter *outlineData = vtkOutlineFilter::New();
  outlineData->SetInputConnection(v16->GetOutputPort() );
  vtkPolyDataMapper *mapOutline = vtkPolyDataMapper::New();
  mapOutline->SetInputConnection(outlineData->GetOutpu tPort());
  vtkActor *outline = vtkActor::New();
  outline->SetMapper(mapOutline);
  outline->GetProperty()->SetColor(0,0,0);
  //========================建立相机===============================
  vtkCamera *aCamera = vtkCamera::New();
  aCamera->SetViewUp(0,0,-1);
  aCamera->SetPosition(0,1,0);
  aCamera->SetFocalPoint(0,0,0);
  aCamera->ComputeViewPlaneNormal();
  //=======================准备演示=================================
  vtkRenderer *aRenderer = vtkRenderer::New();
  vtkRenderWindow *renWin = vtkRenderWindow::New();
  renWin->AddRenderer(aRenderer);
  vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
  iren->SetRenderWindow(renWin);
  aRenderer->AddActor(outline);
  aRenderer->AddActor(skin);
  aRenderer->AddActor(bone);
  aRenderer->SetActiveCamera(aCamera);
  aRenderer->ResetCamera();
  aCamera->Dolly(1.5);
  aRenderer->SetBackground(1,1,1);
  aRenderer->ResetCameraClippingRange();
  renWin->SetSize(640,480);
  //=========================开始演示==============================
  iren->Initialize();
  iren->Start();
  //==========================演示结束=============================
  v16->Delete();
  skinExtractor->Delete();
  skinNormals->Delete();
  skinStripper->Delete();
  skinMapper->Delete();
  skin->Delete();
  boneExtraractor->Delete();
  boneNormals->Delete();
  boneStripper->Delete();
  boneMapper->Delete();
  bone->Delete();
  outlineData->Delete();
  mapOutline->Delete();
  outline->Delete();
  aCamera->Delete();
  aRenderer->Delete();
  renWin->Delete();
  iren->Delete();
  return 0;
  }
  =============程序来源于《Visual C++数字图象处理技术详解》==================
  以上是在VS2005环境下VTK对医学图像成功3V重建的代码,基于MC算法,当然,前提是你配置好了VTK。
  
  
  【不知道等上传后会不会出现代码丢失。。。。】
  1,头文件的用法,声明,需要进一步搞明白;
  2,程序的模块化后,一步一步,依次,读取-》重建皮肤-》重建骨骼-》建立轮廓-》建立相机-》准备演示-》开始演示-》演示结束~~~ 其实大致就包括信息读取,处理,新建窗口,窗口显示;
  3,需要搞明白其中的算法;
  4,还有很多~~~~~~~~~
  这个只是VTK初探,慢慢学吧,呵呵。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值