zoukankan      html  css  js  c++  java
  • vtkPolyData 如何转换 vtkImageData ?

    Imgur

    vtkSmartPointer<vtkImageData> polyDataToImageData(vtkSmartPointer<vtkPolyData> polydata)
    {
        vtkSmartPointer<vtkImageData> imageData = vtkSmartPointer<vtkImageData>::New();
        double bounds[6];
        polydata->GetBounds(bounds);
        double spacing[3];// desired volume spacing
        spacing[0] = 0.3;
        spacing[1] = 0.3;
        spacing[2] = 0.3;
        imageData->SetSpacing(spacing);
    
        //compute dimensions
        int dim[3];
        for(int i = 0;i < 3;++i){
            dim[i] = static_cast<int>(ceil((bounds[i*2+1]-bounds[i*2])/spacing[i]));
        }
        imageData->SetDimensions(dim);
        imageData->SetExtent(0,dim[0]-1,0,dim[1]-1,0,dim[2]-1);
    
        double origin[3];
        origin[0] = bounds[0] + spacing[0] / 2;
        origin[1] = bounds[2] + spacing[1] / 2;
        origin[2] = bounds[4] + spacing[2] / 2;
        imageData->SetOrigin(origin);
    
        imageData->AllocateScalars(VTK_UNSIGNED_CHAR,1);
    
        //fill the image with foreground voxels:
        unsigned char inval = 255;
        unsigned char outval = 0;
        vtkIdType count = imageData->GetNumberOfPoints();
        for(vtkIdType i = 0;i < count;++i){
            imageData->GetPointData()->GetScalars()->SetTuple1(i,inval);
        }
    
        //polygonal data --> image stencil:
        vtkSmartPointer<vtkPolyDataToImageStencil> pdtoImageStencil = vtkSmartPointer<vtkPolyDataToImageStencil>::New();
        pdtoImageStencil->SetInputData(polydata);
        pdtoImageStencil->SetOutputOrigin(origin);
        pdtoImageStencil->SetOutputSpacing(spacing);
        pdtoImageStencil->SetOutputWholeExtent(imageData->GetExtent());
        pdtoImageStencil->Update();
    
        //cut the corresponding white image and set the background:
        vtkSmartPointer<vtkImageStencil> imageStencil = vtkSmartPointer<vtkImageStencil>::New();
        imageStencil->SetInputData(imageData);
        imageStencil->SetStencilConnection(pdtoImageStencil->GetOutputPort());
        imageStencil->ReverseStencilOff();
        imageStencil->SetBackgroundValue(outval);
        imageStencil->Update();
    
        imageData->DeepCopy(imageStencil->GetOutput());
        return imageData;
    }
    

    vtkPolyData 转换 vtkImageData

        vtkSmartPointer<vtkImageMarchingCubes> imageMarchingCubes = vtkImageMarchingCubes::New();
        imageMarchingCubes->SetInputData(imageData);
        imageMarchingCubes->SetValue(0,(0+255)/2);
        imageMarchingCubes->SetNumberOfContours(1);
        imageMarchingCubes->Update();
    
        vtkSmartPointer<vtkPolyDataMapper> polyDataMapper = vtkPolyDataMapper::New();
        polyDataMapper->SetInputData(imageMarchingCubes->GetOutput());
    
  • 相关阅读:
    KingPaper初探Java之初学者编码遇到的问题
    KingPaper初探redis之redis数据类型解析(String类型)
    KingPaper初探Java之面向对象对象的声名和实例化(一)
    KingPaper初探百度应用之百度地图API
    MYSQL之用户授权
    nginx入门到精通目录
    nginx入门篇负载均衡策略
    nginx入门篇功能特性
    开博啦
    ubuntu14.04下pycharm的安装及破解
  • 原文地址:https://www.cnblogs.com/cheungxiongwei/p/12694284.html
Copyright © 2011-2022 走看看