VTK 读取ITK处理后显示

实例:VTK读数据,转ITK数据,用ITK处理后,转VTK数据,显示!

重要代码:

( 1 )VTK转ITK

 //VTK 转ITK
    typedef itk::VTKImageToImageFilter< ImageType> vtkToitkFilterType;
    vtkToitkFilterType::Pointer vtkToitkImageFilter = vtkToitkFilterType::New();
    vtkToitkImageFilter->SetInput(Reader->GetOutput());
    vtkToitkImageFilter->Update();

( 2 )ITK转VTK

//ITK 转VTK
    typedef itk::ImageToVTKImageFilter< ImageType> itkTovtkFilterType;
    itkTovtkFilterType::Pointer itkTovtkImageFilter = itkTovtkFilterType::New();
    itkTovtkImageFilter->SetInput(meanFilter->GetOutput());
    itkTovtkImageFilter->Update();

看了很多博客,发现都说这两个函数就OK,但是自己不操作就永远不知道咋来的,因为有的前辈写到需要用CastImageFilter函数进行类型转换,但是我这个并不需要什么转换,说不定什么时候也会用呢!!

下面例子亲测可行:


#include <vtkSmartPointer.h>
#include <vtkMetaImageReader.h>
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkMarchingCubes.h"
#include "vtkStripper.h"
#include "vtkActor.h"
#include "vtkPolyDataMapper.h"
#include "vtkSmoothPolyDataFilter.h"
#include "vtkPolyDataNormals.h"
#include "vtkDecimatePro.h"
#include "vtkProperty.h"
#include <vtkInteractorStyleImage.h>
#include "itkImageToVTKImageFilter.h"
#include "itkVTKImageToImageFilter.h"
#include "itkMeanImageFilter.h"

VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);

const unsigned char Dim = 3;
typedef float PixelType;
typedef itk::Image<PixelType,Dim> ImageType;
int main()
{
    vtkSmartPointer<vtkMetaImageReader> Reader =vtkSmartPointer<vtkMetaImageReader>::New();
    Reader->SetFileName("/Users/mac/Desktop/end.mhd");
    Reader->Update();
   
    //VTK 转ITK
    typedef itk::VTKImageToImageFilter< ImageType> vtkToitkFilterType;
    vtkToitkFilterType::Pointer vtkToitkImageFilter = vtkToitkFilterType::New();
    vtkToitkImageFilter->SetInput(Reader->GetOutput());
    vtkToitkImageFilter->Update();
    
    //均值滤波
    typedef itk::MeanImageFilter<ImageType, ImageType > filterType;
    filterType::Pointer meanFilter = filterType::New();
    meanFilter->SetInput( vtkToitkImageFilter->GetOutput() );
    meanFilter->Update();
  
    //ITK 转VTK
    typedef itk::ImageToVTKImageFilter< ImageType> itkTovtkFilterType;
    itkTovtkFilterType::Pointer itkTovtkImageFilter = itkTovtkFilterType::New();
    itkTovtkImageFilter->SetInput(meanFilter->GetOutput());
    itkTovtkImageFilter->Update();
    //用Marching Cubes 算法
    vtkSmartPointer<vtkMarchingCubes> vesselExtractor = vtkMarchingCubes::New();
    vesselExtractor->SetInputData(itkTovtkImageFilter->GetOutput());
    vesselExtractor->SetNumberOfContours(10);
    vesselExtractor->SetValue( 0 , 1);   //表示轮廓
    
   
    vtkSmartPointer<vtkStripper> vesselStripper = vtkStripper::New();
    vesselStripper->SetInputConnection(vesselExtractor->GetOutputPort());
    
    vtkSmartPointer<vtkPolyDataMapper>  vesselMapper = vtkPolyDataMapper::New();
    vesselMapper->SetInputConnection(vesselStripper->GetOutputPort());
    vesselMapper->SetScalarRange(0,7);
    vesselMapper->ScalarVisibilityOff();
    
    vtkSmartPointer<vtkActor> vessel = vtkActor::New();
    vessel->SetMapper(vesselMapper);
    vessel->GetProperty()->SetColor(0.4,0,1);
   
    vtkSmartPointer<vtkRenderer>  ren = vtkRenderer::New();
    ren->SetBackground( 120, 120, 120 );
 
    vtkSmartPointer<vtkRenderWindow>  renWindow = vtkRenderWindow::New();
    renWindow->SetSize(1000, 1000);
    renWindow->AddRenderer(ren);
    //交互
    cout<<"正在绘制..."<<endl;
    vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkRenderWindowInteractor::New();
    iren->SetRenderWindow (renWindow);
    ren->AddActor(vessel);
    
    renWindow->Render();
    renWindow->SetWindowName("VTK读取ITK处理后显示结果");
    iren->Initialize();
    renWindow->Render();
    // seedWidget->On();
    iren->Start();
    cout<<"绘制完成!"<<endl;
    return 0;
}

 

 

 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值