VTK读取DICOM序列转换成vtkPolyData数据类型

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkInteractionStyle);
#include "vtkVolume16Reader.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkMarchingCubes.h"
#include "vtkStripper.h"
#include "vtkActor.h"
#include "vtkPolyDataMapper.h"
#include "vtkProperty.h"
#include "vtkCamera.h"
//#include "vtkBoxWidget.h"
#include "vtkPolyData.h"
#include <iostream>
#include "vtkContourFilter.h"
#include "vtkPolyDataWriter.h"
#include "vtkSTLWriter.h"
#include "vtkDICOMImageReader.h"
int main()
{
    //读取二维切片数据序列
    vtkSmartPointer<vtkDICOMImageReader> reader;
    reader = vtkSmartPointer<vtkDICOMImageReader>::New();//读取Dicom图片
    reader->SetDataByteOrderToLittleEndian();
    reader->SetDirectoryName("E:\\imgdata\\D");

    reader->Update();


    //抽取等值面为骨头的信息
    vtkMarchingCubes *boneExtractor = vtkMarchingCubes::New();
    boneExtractor->SetInputConnection(reader->GetOutputPort());
    boneExtractor->SetValue(0, 500); //设置提取的等值信息

 //剔除旧的或废除的数据单元,提高绘制速度
    vtkStripper *boneStripper = vtkStripper::New(); //三角带连接                                     
    boneStripper->SetInputConnection(boneExtractor->GetOutputPort());

    //建立映射
    vtkPolyDataMapper *boneMapper = vtkPolyDataMapper::New();
    boneMapper->SetInputConnection(boneStripper->GetOutputPort());

    //建立角色
    vtkActor *bone = vtkActor::New();
    bone->SetMapper(boneMapper);

    bone->GetProperty()->SetDiffuseColor(.1, .94, .52);
    bone->GetProperty()->SetSpecular(.3);
    bone->GetProperty()->SetSpecularPower(20);
    //定义绘制器
    vtkRenderer *aRenderer = vtkRenderer::New();
    //定义绘制窗口
    vtkRenderWindow *renWin = vtkRenderWindow::New();
    renWin->AddRenderer(aRenderer);
    //定义窗口交互器
    vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
    iren->SetRenderWindow(renWin);
    
    //创建一个camera
    vtkCamera *aCamera = vtkCamera::New();
    aCamera->SetViewUp(0, 0, -1);
    aCamera->SetPosition(0, 1, 0);
    aCamera->SetFocalPoint(0, 0, 0);

    aRenderer->AddActor(bone);
    aRenderer->SetActiveCamera(aCamera);
    aRenderer->ResetCamera();
    aCamera->Dolly(1.5);
    aRenderer->SetBackground(0, 0, 0);
    aRenderer->ResetCameraClippingRange();

    //保存VTK文件
    vtkSmartPointer<vtkPolyDataWriter> vtkWriter = vtkSmartPointer<vtkPolyDataWriter>::New();
    vtkWriter->SetInputData(boneExtractor->GetOutput());
    vtkWriter->SetFileName("test.vtk");
    vtkWriter->Write();


    iren->Initialize();
    iren->Start();
    reader->Delete();
    iren->Delete();
    return 0;
   
}

下面是提取后的结果

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值