天天看點

《itk實用demo》-Image 轉化 vtkPolydata

Image 轉化 vtkPolydata
void ImageToPolyData(ImageType::Pointer sliceimage)
{
    typedef itk::ImageToVTKImageFilter<ImageType> itkVtkConverter;
    itkVtkConverter::Pointer conv=itkVtkConverter::New();
    conv->SetInput(sliceimage);
    conv->Update();

    vtkImageData *pData=conv->GetOutput();

    vtkPoints*points=vtkPoints::New();
    vtkCellArray* vertices =vtkCellArray::New();

    int*dims=pData->GetDimensions();

    double tmp[];
    int id=;

    double *spacing=orginalImage->GetSpacing();
    double *origin=orginalImage->GetOrigin();
    for(int i=; i<dims[]; i++)
    {
        for(int j=; j<dims[]; j++)
        {
            int tmp_point[];
            tmp_point[]=i;
            tmp_point[]=j;
            tmp_point[]=;

            short* gray_value = static_cast<short*>(pData->GetScalarPointer(tmp_point));
            if (*gray_value!=)
            {
                double wordp[];
                tmp_point[]=sliceIndex;
                for(int k=;k<;k++)
                {
                    wordp[k]=tmp_point[k]*(spacing[k])+origin[k];
                }
                vtkIdType pid[];

                pid[] = points->InsertNextPoint(wordp[],wordp[],wordp[]+);
                vertices->InsertNextCell(,pid);

            }
        }
    }

     Convert the image to a polydata
    //vtkImageDataGeometryFilter* imageDataGeometryFilter = vtkImageDataGeometryFilter::New();
    //imageDataGeometryFilter->SetInput(conv->GetOutput());
    //imageDataGeometryFilter->Update();

    this->CLine->SetPoints(points);
    this->CLine->SetVerts(vertices);
    this->CLine->Update();

    vertices->Delete();
    points->Delete();
}