1、将VTKImageData转化成VTKPolydata,应该其他数据类型转化polydata也行
vtkSmartPointer<vtkImageDataGeometryFilter>ConvertImageToPloy = vtkSmartPointer<vtkImageDataGeometryFilter>::New();
2、vtkPolyDataToImageStencil、vtkImageStencil切割vtkimageData,输入模型可以是polydata.
vtkSmartPointer<vtkPolyDataToImageStencil > poly2Stencil = vtkSmartPointer<vtkPolyDataToImageStencil >::New(); poly2Stencil->SetInputConnection(m_spAppendPolyData->GetOutputPort()); int originalExtent[6] = {0}; vtkSmartPointer<vtkImageData>GropResut = NULL; if (m_pMipMprViewModel != NULL) { GropResut =m_pMipMprViewModel->GetCropResultImageData(); //GropResut->GetExtent(originalExtent); } else { GropResut = m_VrOriData; // m_VrOriData->GetExtent(originalExtent); } poly2Stencil->SetOutputOrigin(GropResut->GetOrigin()); poly2Stencil->SetOutputSpacing(GropResut->GetSpacing()); poly2Stencil->SetOutputWholeExtent(originalExtent); poly2Stencil->Update(); vtkSmartPointer<vtkImageStencil> ellipseStencil =vtkSmartPointer<vtkImageStencil>::New();
ellipseStencil->SetStencilData(poly2Stencil->GetOutput());ellipseStencil->SetInputData( GropResut); ellipseStencil->ReverseStencilOff(); double dRange[2] = {.0}; GropResut->GetScalarRange( dRange ); ellipseStencil->SetBackgroundValue(dRange[0]);ellipseStencil->Update();
3、简单的管道建立
vtkSmartPointer<vtkPolyDataMapper> testPolyDataMapper =vtkSmartPointer<vtkPolyDataMapper>::New(); vtkSmartPointer<vtkActor>testActor = vtkSmartPointer<vtkActor>::New(); vtkSmartPointer<vtkRenderer> testRenderer =vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> testWindow =vtkSmartPointer<vtkRenderWindow>::New(); vtkSmartPointer<vtkRenderWindowInteractor>testWindowIter = vtkSmartPointer<vtkRenderWindowInteractor>::New(); testPolyDataMapper->SetInputConnection(IntersectionData->GetOutputPort()); testPolyDataMapper->ScalarVisibilityOff(); testActor->SetMapper(testPolyDataMapper); testRenderer->AddViewProp(testActor); testRenderer->AddActor(testActor); testWindow->AddRenderer(testRenderer); testWindowIter->SetRenderWindow(testWindow); testWindow->Render(); testWindowIter->Start();
4、vtkImageShrink3D类实现图像降采样。降采样需要设置每个方向的采样率,降采样率越大,图像越模糊。升采样的原理与降采样原理一致,只是增加采样点数来增加图像的维数。VTK中vtkImageMagnify来实现图像的升采样。
vtkSmartPointer<vtkImageShrink3D> shrinkFilter = vtkSmartPointer<vtkImageShrink3D>::New(); shrinkFilter->SetInputConnection(reader->GetOutputPort());//建立管道 shrinkFilter->SetShrinkFactors(16, 16, 1);//设置降采样率 shrinkFilter->Update(); vtkSmartPointer<vtkImageMagnify> magnifyFilter = vtkSmartPointer<vtkImageMagnify>::New(); magnifyFilter->SetInputConnection(reader->GetOutputPort()); magnifyFilter->SetMagnificationFactors(10, 10, 1); magnifyFilter->Update();