auto imagereader = vtkSmartPointer<vtkMetaImageReader>::New();
imagereader->SetFileName("c:\\1.seg.mha");
imagereader->Update();
auto caster = vtkSmartPointer<vtkImageCast>::New();
caster->SetInputData(imagereader->GetOutput());
caster->SetOutputScalarTypeToFloat();
caster->Update();
// read centerline polydata
auto polyreader = vtkSmartPointer<vtkXMLPolyDataReader>::New();
polyreader->SetFileName("c:\\1.cl1.vtp");
polyreader->Update();
// compute normal
auto centerlineAttributes = vtkSmartPointer<vtkvmtkCenterlineAttributesFilter>::New();
centerlineAttributes->SetInputData(polyreader->GetOutput());
centerlineAttributes->SetAbscissasArrayName("Abscissas");
centerlineAttributes->SetParallelTransportNormalsArrayName("ParallelTransportNormals");
centerlineAttributes->Update();
auto Centerlines = centerlineAttributes->GetOutput();
// compute tangent
auto centerlineGeometry = vtkSmartPointer<vtkvmtkCenterlineGeometry>::New();
centerlineGeometry->SetInputData(Centerlines);
centerlineGeometry->SetLengthArrayName("Length");
centerlineGeometry->SetCurvatureArrayName("Curvature");
centerlineGeometry->SetTorsionArrayName("Torsion");
centerlineGeometry->SetTortuosityArrayName("Tortuosity");
centerlineGeometry->SetFrenetTangentArrayName("FrenetTangent");
centerlineGeometry->SetFrenetNormalArrayName("FrenetNormal");
centerlineGeometry->SetFrenetBinormalArrayName("FrenetBinormal");
centerlineGeometry->SetLineSmoothing(0);
centerlineGeometry->SetOutputSmoothedLines(0);
centerlineGeometry->SetNumberOfSmoothingIterations(100);
centerlineGeometry->SetSmoothingFactor(0.1);
centerlineGeometry->Update();
Centerlines = centerlineGeometry->GetOutput();
// using curvedMPRImageFilter
auto curvedMPRImageFilter = vtkSmartPointer<vtkvmtkCurvedMPRImageFilter2>::New();
curvedMPRImageFilter->SetInputData(caster->GetOutput());
curvedMPRImageFilter->SetCenterline(Centerlines);
curvedMPRImageFilter->SetParallelTransportNormalsArrayName("ParallelTransportNormals");
curvedMPRImageFilter->SetFrenetTangentArrayName("FrenetTangent");
curvedMPRImageFilter->SetInplaneOutputSpacing(1, 1);
curvedMPRImageFilter->SetInplaneOutputSize(100, 100);
curvedMPRImageFilter->SetReslicingBackgroundLevel(0);
curvedMPRImageFilter->Update();
auto writer = vtkSmartPointer<vtkMetaImageWriter>::New();
writer->SetFileName("curvedMPRImageFilter.mha");
writer->SetInputData(curvedMPRImageFilter->GetOutput());
writer->Write();
I update the vtkvmtkCurvedMPRImageFilter source code to set the output image component the same with the input