Difference between revisions of "Proposals:Increasing WrapITK Coverage"

From KitwarePublic
Jump to navigationJump to search
(Some template parameters from Tom Vercauteren)
m (Minor fromatting changes, add template parameters for FastMarchingUpwindGradientImageFilter)
Line 11: Line 11:


= List of Unwrapped Filters =
= List of Unwrapped Filters =
''(Add to list below with template parameters and remove from this list)''


* BSplineScatteredDataPointSetToImageFilter
* BSplineScatteredDataPointSetToImageFilter
Line 30: Line 31:
* DeformableSimplexMesh3DGradientConstraintForceFilter
* DeformableSimplexMesh3DGradientConstraintForceFilter
* DeformationFieldJacobianDeterminantFilter
* DeformationFieldJacobianDeterminantFilter
* DiffeomorphicDemonsRegistrationFilter
* DifferenceOfGaussiansGradientImageFilter
* DifferenceOfGaussiansGradientImageFilter
* DiffusionTensor3DReconstructionImageFilter
* DiffusionTensor3DReconstructionImageFilter
* DisplacementFieldJacobianDeterminantFilter
* EigenAnalysis2DImageFilter
* EigenAnalysis2DImageFilter
* ExponentialDeformationFieldImageFilter
* ExtensionVelocitiesImageFilter
* ExtensionVelocitiesImageFilter
* ExtractOrthogonalSwath2DImageFilter
* ExtractOrthogonalSwath2DImageFilter
Line 42: Line 40:
* FFTWComplexToComplexImageFilter
* FFTWComplexToComplexImageFilter
* FastMarchingExtensionImageFilter
* FastMarchingExtensionImageFilter
* FastMarchingUpwindGradientImageFilter
* FastSymmetricForcesDemonsRegistrationFilter
* FiniteDifferenceSparseImageFilter
* FiniteDifferenceSparseImageFilter
* GetAverageSliceImageFilter
* GetAverageSliceImageFilter
* GradientImageToBloxBoundaryPointImageFilter
* GradientImageToBloxBoundaryPointImageFilter
* GradientVectorFlowImageFilter
* GradientVectorFlowImageFilter
* GridForwardWarpImageFilter
* HardConnectedComponentImageFilter
* HardConnectedComponentImageFilter
* HistogramToEntropyImageFilter
* HistogramToEntropyImageFilter
Line 126: Line 121:
* VectorGradientMagnitudeImageFilter
* VectorGradientMagnitudeImageFilter
* VectorNeighborhoodOperatorImageFilter
* VectorNeighborhoodOperatorImageFilter
* VectorResampleImageFilter
* VectorRescaleIntensityImageFilter
* VectorRescaleIntensityImageFilter
* VectorThresholdSegmentationLevelSetImageFilter
* VectorThresholdSegmentationLevelSetImageFilter
Line 137: Line 131:


= List of Filters with Template Parameters Waiting to be Wrapped =
= List of Filters with Template Parameters Waiting to be Wrapped =
''(Add to list below when in WrapITK and remove from this list)''


* '''ComposeRGBAImageFilter< TInputImage, TOutputImage >'''
* '''ComposeRGBAImageFilter< TInputImage, TOutputImage >'''
Line 142: Line 137:
** See ComposeRGBImageFilter, need to add WRAP_ITK_RGBA to WrapBasicTypes.cmake
** See ComposeRGBImageFilter, need to add WRAP_ITK_RGBA to WrapBasicTypes.cmake


  WRAP_CLASS("itk::ComposeRGBAImageFilter")
  WRAP_CLASS("itk::ComposeRGBAImageFilter" POINTER)
   
   
   IF(WRAP_rgba_unsigned_char AND WRAP_unsigned_char)
   IF(WRAP_rgba_unsigned_char AND WRAP_unsigned_char)
Line 154: Line 149:
  END_WRAP_CLASS()
  END_WRAP_CLASS()


 
* '''DiffeomorphicDemonsRegistrationFilter'''
* DiffeomorphicDemonsRegistrationFilter
 
  itk::DiffeomorphicDemonsRegistrationFilter< itk::Image<float,2>, itk::Image<float,2>, itk::Image<itk::Vector<float,2>,2> >
  itk::DiffeomorphicDemonsRegistrationFilter< itk::Image<float,2>, itk::Image<float,2>, itk::Image<itk::Vector<float,2>,2> >
  itk::DiffeomorphicDemonsRegistrationFilter< itk::Image<float,3>, itk::Image<float,3>, itk::Image<itk::Vector<float,3>,3> >
  itk::DiffeomorphicDemonsRegistrationFilter< itk::Image<float,3>, itk::Image<float,3>, itk::Image<itk::Vector<float,3>,3> >


 
* '''DisplacementFieldJacobianDeterminantFilter'''
* DisplacementFieldJacobianDeterminantFilter
 
  itk::DisplacementFieldJacobianDeterminantFilter< itk::Image<itk::Vector<float,2>,2>, float >
  itk::DisplacementFieldJacobianDeterminantFilter< itk::Image<itk::Vector<float,2>,2>, float >
  itk::DisplacementFieldJacobianDeterminantFilter< itk::Image<itk::Vector<float,2>,2>, double >
  itk::DisplacementFieldJacobianDeterminantFilter< itk::Image<itk::Vector<float,2>,2>, double >
Line 168: Line 159:
  itk::DisplacementFieldJacobianDeterminantFilter< itk::Image<itk::Vector<float,3>,3>, double >
  itk::DisplacementFieldJacobianDeterminantFilter< itk::Image<itk::Vector<float,3>,3>, double >


 
* '''ExponentialDeformationFieldImageFilter'''
* ExponentialDeformationFieldImageFilter
 
  itk::ExponentialDeformationFieldImageFilter< itk::Image<itk::Vector<float,2>,2>, itk::Image<itk::Vector<float,2>,2>
  itk::ExponentialDeformationFieldImageFilter< itk::Image<itk::Vector<float,2>,2>, itk::Image<itk::Vector<float,2>,2>
  itk::ExponentialDeformationFieldImageFilter< itk::Image<itk::Vector<float,3>,3>, itk::Image<itk::Vector<float,3>,3>
  itk::ExponentialDeformationFieldImageFilter< itk::Image<itk::Vector<float,3>,3>, itk::Image<itk::Vector<float,3>,3>


* '''FastMarchingUpwindGradientImageFilter<TLevelSet, TSpeedImage>'''
** FastMarchingUpwindGradientImageFilter< Image<ScalarPixelType, Dimension>, Image<ScalarPixelType, Dimension> >
** Same template parameters as FastMarchingImageFilter


* FastSymmetricForcesDemonsRegistrationFilter
WRAP_CLASS("itk::FastMarchingUpwindGradientImageFilter" POINTER)
  #WRAP_IMAGE_FILTER_USIGN_INT(2)
  #WRAP_IMAGE_FILTER_SIGN_INT(2)
  WRAP_IMAGE_FILTER_REAL(2)
END_WRAP_CLASS()


* '''FastSymmetricForcesDemonsRegistrationFilter'''
  itk::FastSymmetricForcesDemonsRegistrationFilter< itk::Image<float,2>, itk::Image<float,2>, itk::Image<itk::Vector<float,2>,2> >
  itk::FastSymmetricForcesDemonsRegistrationFilter< itk::Image<float,2>, itk::Image<float,2>, itk::Image<itk::Vector<float,2>,2> >
  itk::FastSymmetricForcesDemonsRegistrationFilter< itk::Image<float,3>, itk::Image<float,3>, itk::Image<itk::Vector<float,3>,3> >
  itk::FastSymmetricForcesDemonsRegistrationFilter< itk::Image<float,3>, itk::Image<float,3>, itk::Image<itk::Vector<float,3>,3> >


 
* '''GridForwardWarpImageFilter'''
* GridForwardWarpImageFilter
 
  itk::GridForwardWarpImageFilter< itk::Image<itk::Vector<float,2>,2>, itk::Image<unsigned char,2> >
  itk::GridForwardWarpImageFilter< itk::Image<itk::Vector<float,2>,2>, itk::Image<unsigned char,2> >
  itk::GridForwardWarpImageFilter< itk::Image<itk::Vector<float,3>,3>, itk::Image<unsigned char,3> >
  itk::GridForwardWarpImageFilter< itk::Image<itk::Vector<float,3>,3>, itk::Image<unsigned char,3> >
Line 188: Line 183:
* '''HessianRecursiveGaussianImageFilter< TInputImage, TOutputImage >'''
* '''HessianRecursiveGaussianImageFilter< TInputImage, TOutputImage >'''
** Hessian3DToVesselnessMeasureImageFilter< Image<ScalarPixelType, Dimension> >
** Hessian3DToVesselnessMeasureImageFilter< Image<ScalarPixelType, Dimension> >
** Use the default for TOutputImage
** Use the default for TOutputImage (the default is expected by Hessian3DToVesselnessMeasureImageFilter)


  WRAP_CLASS("itk::HessianRecursiveGaussianImageFilter")
  WRAP_CLASS("itk::HessianRecursiveGaussianImageFilter" POINTER)
   
   
   WRAP_IMAGE_FILTER_USIGN_INT(1)
   WRAP_IMAGE_FILTER_USIGN_INT(1)
Line 201: Line 196:
** Hessian3DToVesselnessMeasureImageFilter< ScalarPixelType >
** Hessian3DToVesselnessMeasureImageFilter< ScalarPixelType >


  WRAP_CLASS("itk::Hessian3DToVesselnessMeasureImageFilter")
  WRAP_CLASS("itk::Hessian3DToVesselnessMeasureImageFilter" POINTER)
   
   
   FOREACH(t ${WRAP_ITK_SCALAR})
   FOREACH(t ${WRAP_ITK_SCALAR})
Line 209: Line 204:
  END_WRAP_CLASS()
  END_WRAP_CLASS()


 
* '''VectorResampleImageFilter'''
* VectorResampleImageFilter
 
  itk::VectorResampleImageFilter< itk::Image<itk::Vector<float,2>,2>, itk::Image<itk::Vector<float,2>,2> >
  itk::VectorResampleImageFilter< itk::Image<itk::Vector<float,2>,2>, itk::Image<itk::Vector<float,2>,2> >
  itk::VectorResampleImageFilter< itk::Image<itk::Vector<float,3>,3>, itk::Image<itk::Vector<float,3>,3> >
  itk::VectorResampleImageFilter< itk::Image<itk::Vector<float,3>,3>, itk::Image<itk::Vector<float,3>,3> >
Line 218: Line 211:
** ZeroCrossingBasedEdgeDetectionImageFilter< Image<ScalarPixelType, Dimension>, Image<ScalarPixelType, Dimension> >
** ZeroCrossingBasedEdgeDetectionImageFilter< Image<ScalarPixelType, Dimension>, Image<ScalarPixelType, Dimension> >


  WRAP_CLASS("itk::ZeroCrossingBasedEdgeDetectionImageFilter")
  WRAP_CLASS("itk::ZeroCrossingBasedEdgeDetectionImageFilter" POINTER)
   
   
   WRAP_IMAGE_FILTER_REAL(2 2+)
   WRAP_IMAGE_FILTER_REAL(2 2+)
Line 225: Line 218:


= List of excluded filters =
= List of excluded filters =
 
''(The filters to NOT wrap)''
The filters to NOT wrap.


* DeformationFieldJacobianDeterminantFilter (useless)
* DeformationFieldJacobianDeterminantFilter (useless)
* WarpJacobianDeterminantFilter (deprecated)
* WarpJacobianDeterminantFilter (deprecated)
= List of filters added to WrapITK =
''(Filters recently wrapped)''

Revision as of 23:54, 2 October 2008

Motivation

You may know that WrapITK has greatly enhanced the filter coverage, compared to what was previously available in tcl, java and python. Currently, 66% of the filters in ITK are usable in WrapITK. In the future, the goal is to reach 100% of filter coverage. This is a quite difficult task for a single person, because it requires a quite good knowledge of the whole ITK, to be able to select, for all the classes, the relevant template parameters to instantiate. I made my best to complete this task, but obviously, I can't go further, because I'm not able to make a decision on the remaining non wrapped filters.

I think that the weekly tcon can be a great place to select the template parameters needed to instantiate the missing filters in WrapITK. For many of the filters, I'm quite sure the right template parameters to use are obvious for many of us, and that they only need to be collected. With those data, I would be able to implement the wrappers and to add them in WrapITK. Also, some of the filters may not be of direct interest for the user, because they are intended to be used only internally in some other code, or because they can only be used as a superclass (like UnaryFunctorImageFilter). In that case, they should be added in the excluded filters list for the filter coverage.

A good goal, for the next release, would be to cover 80% of ITK's filter, which means 51 new filters added in WrapITK or in the excluded filters list. 51 filters may look like a big number of classes (and it is, for the final python/tcl/java user), but many of the remaining filters seems similar, so it should be easy to choose the template parameters for a group of filters, instead of processing them one by one.

Also, note that adding new stuff in WrapITK would not only benefit to WrapITK users: because building a class in WrapITK builds every methods in that class, we have found many bugs in ITK code during the addition of new classes in WrapITK in the past. It is likely that we would uncover a few more bugs by adding new classes, bugs which won't be found by final users.

List of Unwrapped Filters

(Add to list below with template parameters and remove from this list)

  • BSplineScatteredDataPointSetToImageFilter
  • BalloonForceFilter
  • BayesianClassifierImageFilter
  • BayesianClassifierInitializationImageFilter
  • BinaryMaskToNarrowBandPointSetFilter
  • BloxBoundaryPointImageToBloxBoundaryProfileImageFilter
  • BloxBoundaryPointToCoreAtomImageFilter
  • BloxBoundaryProfileImageToBloxCoreAtomImageFilter
  • ChainCodeToFourierSeriesPathFilter
  • ConformalFlatteningMeshFilter
  • ConnectedRegionsMeshFilter
  • ContourExtractor2DImageFilter
  • CurvatureRegistrationFilter
  • DeformableMesh3DFilter
  • DeformableSimplexMesh3DBalloonForceFilter
  • DeformableSimplexMesh3DFilter
  • DeformableSimplexMesh3DGradientConstraintForceFilter
  • DeformationFieldJacobianDeterminantFilter
  • DifferenceOfGaussiansGradientImageFilter
  • DiffusionTensor3DReconstructionImageFilter
  • EigenAnalysis2DImageFilter
  • ExtensionVelocitiesImageFilter
  • ExtractOrthogonalSwath2DImageFilter
  • FEMRegistrationFilter
  • FFTComplexToComplexImageFilter
  • FFTWComplexToComplexImageFilter
  • FastMarchingExtensionImageFilter
  • FiniteDifferenceSparseImageFilter
  • GetAverageSliceImageFilter
  • GradientImageToBloxBoundaryPointImageFilter
  • GradientVectorFlowImageFilter
  • HardConnectedComponentImageFilter
  • HistogramToEntropyImageFilter
  • HistogramToImageFilter
  • HistogramToIntensityImageFilter
  • HistogramToLogProbabilityImageFilter
  • HistogramToProbabilityImageFilter
  • HoughTransform2DCirclesImageFilter
  • HoughTransform2DLinesImageFilter
  • ImageAndPathToImageFilter
  • ImageToMeshFilter
  • ImageToParametricSpaceFilter
  • ImageToPathFilter
  • ImageToVectorImageFilter
  • ImplicitManifoldNormalVectorFilter
  • InteriorExteriorMeshFilter
  • InterpolateImagePointsFilter
  • InverseDeformationFieldImageFilter
  • IsoContourDistanceImageFilter
  • IterativeInverseDeformationFieldImageFilter
  • JoinImageFilter
  • KLMRegionGrowImageFilter
  • ListSampleToHistogramFilter
  • MRFImageFilter
  • MRIBiasFieldCorrectionFilter
  • MagnitudeAndPhaseToComplexImageFilter
  • MaskNeighborhoodOperatorImageFilter
  • MaskedMovingHistogramImageFilter
  • MatrixIndexSelectionImageFilter
  • MeshToMeshFilter
  • NarrowBandCurvesLevelSetImageFilter
  • NeighborhoodOperatorImageFilter
  • NormalizedCorrelationImageFilter
  • OrthogonalSwath2DPathFilter
  • ParametricSpaceToImageSpaceMeshFilter
  • PathAndImageToPathFilter
  • PathToChainCodePathFilter
  • PathToImageFilter
  • PathToPathFilter
  • PointSetToImageFilter
  • PolylineMask2DImageFilter
  • PolylineMaskImageFilter
  • QuadEdgeMeshCleanFilter
  • QuadEdgeMeshDecimationFilter
  • QuadEdgeMeshDelaunayConformingFilter
  • QuadEdgeMeshEdgeMergeDecimationFilter
  • QuadEdgeMeshNormalFilter
  • QuadEdgeMeshToQuadEdgeMeshFilter
  • RGBGibbsPriorFilter
  • RealAndImaginaryToComplexImageFilter
  • ReinitializeLevelSetImageFilter
  • SampleMeanShiftBlurringFilter
  • SampleMeanShiftClusteringFilter
  • SampleSelectiveMeanShiftBlurringFilter
  • SampleToHistogramProjectionFilter
  • ScalarImageKmeansImageFilter
  • ScalarToArrayCastImageFilter
  • SimpleFuzzyConnectednessRGBImageFilter
  • SimpleFuzzyConnectednessScalarImageFilter
  • SimplexMeshAdaptTopologyFilter
  • SimplexMeshToTriangleMeshFilter
  • SpatialFunctionImageEvaluatorFilter
  • SpatialObjectToPointSetFilter
  • SymmetricEigenAnalysisImageFilter
  • TensorFractionalAnisotropyImageFilter
  • TensorRelativeAnisotropyImageFilter
  • TransformMeshFilter
  • TriangleMeshToBinaryImageFilter
  • TriangleMeshToSimplexMeshFilter
  • UnsharpMaskLevelSetImageFilter
  • VectorConfidenceConnectedImageFilter
  • VectorConnectedComponentImageFilter
  • VectorCurvatureAnisotropicDiffusionImageFilter
  • VectorExpandImageFilter
  • VectorFuzzyConnectednessImageFilter
  • VectorGradientAnisotropicDiffusionImageFilter
  • VectorGradientMagnitudeImageFilter
  • VectorNeighborhoodOperatorImageFilter
  • VectorRescaleIntensityImageFilter
  • VectorThresholdSegmentationLevelSetImageFilter
  • VoronoiPartitioningImageFilter
  • VoronoiSegmentationRGBImageFilter
  • WarpJacobianDeterminantFilter
  • WarpMeshFilter
  • WarpVectorImageFilter
  • WrapPadImageFilter

List of Filters with Template Parameters Waiting to be Wrapped

(Add to list below when in WrapITK and remove from this list)

  • ComposeRGBAImageFilter< TInputImage, TOutputImage >
    • ComposeRGBAImageFilter< Image<ScalarPixelType, Dimension>, Image<RGBAPixel, Dimension> >
    • See ComposeRGBImageFilter, need to add WRAP_ITK_RGBA to WrapBasicTypes.cmake
WRAP_CLASS("itk::ComposeRGBAImageFilter" POINTER)

  IF(WRAP_rgba_unsigned_char AND WRAP_unsigned_char)
    WRAP_IMAGE_FILTER_TYPES(UC RGBAUC) # NEED TO ADD RGBA
  ENDIF(WRAP_rgba_unsigned_char AND WRAP_unsigned_char)
  
  IF(WRAP_rgba_unsigned_short AND WRAP_unsigned_short)
    WRAP_IMAGE_FILTER_TYPES(US RGBAUS) # NEED TO ADD RGBA
  ENDIF(WRAP_rgba_unsigned_short AND WRAP_unsigned_short)

END_WRAP_CLASS()
  • DiffeomorphicDemonsRegistrationFilter
itk::DiffeomorphicDemonsRegistrationFilter< itk::Image<float,2>, itk::Image<float,2>, itk::Image<itk::Vector<float,2>,2> >
itk::DiffeomorphicDemonsRegistrationFilter< itk::Image<float,3>, itk::Image<float,3>, itk::Image<itk::Vector<float,3>,3> >
  • DisplacementFieldJacobianDeterminantFilter
itk::DisplacementFieldJacobianDeterminantFilter< itk::Image<itk::Vector<float,2>,2>, float >
itk::DisplacementFieldJacobianDeterminantFilter< itk::Image<itk::Vector<float,2>,2>, double >
itk::DisplacementFieldJacobianDeterminantFilter< itk::Image<itk::Vector<float,3>,3>, float >
itk::DisplacementFieldJacobianDeterminantFilter< itk::Image<itk::Vector<float,3>,3>, double >
  • ExponentialDeformationFieldImageFilter
itk::ExponentialDeformationFieldImageFilter< itk::Image<itk::Vector<float,2>,2>, itk::Image<itk::Vector<float,2>,2>
itk::ExponentialDeformationFieldImageFilter< itk::Image<itk::Vector<float,3>,3>, itk::Image<itk::Vector<float,3>,3>
  • FastMarchingUpwindGradientImageFilter<TLevelSet, TSpeedImage>
    • FastMarchingUpwindGradientImageFilter< Image<ScalarPixelType, Dimension>, Image<ScalarPixelType, Dimension> >
    • Same template parameters as FastMarchingImageFilter
WRAP_CLASS("itk::FastMarchingUpwindGradientImageFilter" POINTER)
  #WRAP_IMAGE_FILTER_USIGN_INT(2)
  #WRAP_IMAGE_FILTER_SIGN_INT(2)
  WRAP_IMAGE_FILTER_REAL(2)
END_WRAP_CLASS()
  • FastSymmetricForcesDemonsRegistrationFilter
itk::FastSymmetricForcesDemonsRegistrationFilter< itk::Image<float,2>, itk::Image<float,2>, itk::Image<itk::Vector<float,2>,2> >
itk::FastSymmetricForcesDemonsRegistrationFilter< itk::Image<float,3>, itk::Image<float,3>, itk::Image<itk::Vector<float,3>,3> >
  • GridForwardWarpImageFilter
itk::GridForwardWarpImageFilter< itk::Image<itk::Vector<float,2>,2>, itk::Image<unsigned char,2> >
itk::GridForwardWarpImageFilter< itk::Image<itk::Vector<float,3>,3>, itk::Image<unsigned char,3> >
  • HessianRecursiveGaussianImageFilter< TInputImage, TOutputImage >
    • Hessian3DToVesselnessMeasureImageFilter< Image<ScalarPixelType, Dimension> >
    • Use the default for TOutputImage (the default is expected by Hessian3DToVesselnessMeasureImageFilter)
WRAP_CLASS("itk::HessianRecursiveGaussianImageFilter" POINTER)

  WRAP_IMAGE_FILTER_USIGN_INT(1)
  WRAP_IMAGE_FILTER_SIGN_INT(1)
  WRAP_IMAGE_FILTER_REAL(1)

END_WRAP_CLASS()
  • Hessian3DToVesselnessMeasureImageFilter< TPixel >
    • Hessian3DToVesselnessMeasureImageFilter< ScalarPixelType >
WRAP_CLASS("itk::Hessian3DToVesselnessMeasureImageFilter" POINTER)

  FOREACH(t ${WRAP_ITK_SCALAR})
    WRAP_TEMPLATE("${ITKM_${t}}" "${ITKT_${t}}")
  ENDFOREACH(t)

END_WRAP_CLASS()
  • VectorResampleImageFilter
itk::VectorResampleImageFilter< itk::Image<itk::Vector<float,2>,2>, itk::Image<itk::Vector<float,2>,2> >
itk::VectorResampleImageFilter< itk::Image<itk::Vector<float,3>,3>, itk::Image<itk::Vector<float,3>,3> >
  • ZeroCrossingBasedEdgeDetectionImageFilter< TInputImage, TOutputImage >
    • ZeroCrossingBasedEdgeDetectionImageFilter< Image<ScalarPixelType, Dimension>, Image<ScalarPixelType, Dimension> >
WRAP_CLASS("itk::ZeroCrossingBasedEdgeDetectionImageFilter" POINTER)

  WRAP_IMAGE_FILTER_REAL(2 2+)

END_WRAP_CLASS()

List of excluded filters

(The filters to NOT wrap)

  • DeformationFieldJacobianDeterminantFilter (useless)
  • WarpJacobianDeterminantFilter (deprecated)

List of filters added to WrapITK

(Filters recently wrapped)