]> Creatis software - cpPlugins.git/commitdiff
...
authorLeonardo Flórez-Valencia <florez-l@javeriana.edu.co>
Tue, 4 Oct 2016 23:19:29 +0000 (18:19 -0500)
committerLeonardo Flórez-Valencia <florez-l@javeriana.edu.co>
Tue, 4 Oct 2016 23:19:29 +0000 (18:19 -0500)
16 files changed:
lib/cpExtensions/Algorithms/IsoImageSlicer.h
plugins/CMakeLists.txt
plugins/ImageArithmeticFilters/AddImageFilter.cxx [new file with mode: 0644]
plugins/ImageArithmeticFilters/AddImageFilter.h [new file with mode: 0644]
plugins/ImageArithmeticFilters/DivideImageFilter.cxx [new file with mode: 0644]
plugins/ImageArithmeticFilters/DivideImageFilter.h [new file with mode: 0644]
plugins/ImageArithmeticFilters/DivideOrZeroOutImageFilter.cxx [new file with mode: 0644]
plugins/ImageArithmeticFilters/DivideOrZeroOutImageFilter.h [new file with mode: 0644]
plugins/ImageArithmeticFilters/MultiplyImageFilter.cxx [new file with mode: 0644]
plugins/ImageArithmeticFilters/MultiplyImageFilter.h [new file with mode: 0644]
plugins/ImageArithmeticFilters/PowImageFilter.cxx [new file with mode: 0644]
plugins/ImageArithmeticFilters/PowImageFilter.h [new file with mode: 0644]
plugins/ImageArithmeticFilters/SubtractImageFilter.cxx [new file with mode: 0644]
plugins/ImageArithmeticFilters/SubtractImageFilter.h [new file with mode: 0644]
plugins/ImageGenericFilters/MinimumMaximumCalculator.cxx [new file with mode: 0644]
plugins/ImageGenericFilters/MinimumMaximumCalculator.h [new file with mode: 0644]

index 9e7e3ecc040a713b11063a31d17579095bb57374..dad9c7a485b9ca6ba5414852fb80b3f6cea59f70 100644 (file)
@@ -5,6 +5,7 @@
 #ifndef __CPEXTENSIONS__ALGORITHMS__ISOIMAGESLICER__H__
 #define __CPEXTENSIONS__ALGORITHMS__ISOIMAGESLICER__H__
 
+#include <cpExtensions/Config.h>
 #include <itkAffineTransform.h>
 #include <itkExtractImageFilter.h>
 #include <itkImage.h>
index cbf2528277fb86ceae88a28bab9dfcc2292296ae..4e194de3c3518feacd448555daeb38badbe0ebf8 100644 (file)
@@ -6,6 +6,7 @@ SET(
   _dirlist
   AnisotropicDiffusion
   GenericFilters
+  ImageArithmeticFilters
   ImageBooleanFilters
   ImageDistanceMaps
   ImageGenericFilters
diff --git a/plugins/ImageArithmeticFilters/AddImageFilter.cxx b/plugins/ImageArithmeticFilters/AddImageFilter.cxx
new file mode 100644 (file)
index 0000000..a0398d6
--- /dev/null
@@ -0,0 +1,53 @@
+#include <plugins/ImageArithmeticFilters/AddImageFilter.h>
+#include <cpPlugins/DataObjects/Image.h>
+
+#include <itkAddImageFilter.h>
+#include <itkBinaryFunctorImageFilter.hxx>
+
+// -------------------------------------------------------------------------
+cpPluginsImageArithmeticFilters::AddImageFilter::
+AddImageFilter( )
+  : Superclass( )
+{
+  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input0", true, false );
+  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input1", true, false );
+  this->_ConfigureOutput< cpPlugins::DataObjects::Image >( "Output" );
+}
+
+// -------------------------------------------------------------------------
+cpPluginsImageArithmeticFilters::AddImageFilter::
+~AddImageFilter( )
+{
+}
+
+// -------------------------------------------------------------------------
+void cpPluginsImageArithmeticFilters::AddImageFilter::
+_GenerateData( )
+{
+  auto o = this->GetInputData( "Input0" );
+  cpPlugins_Demangle_ImageIntegers_Dims( o, _GD0 );
+  else this->_Error( "Invalid input image." );
+}
+
+// -------------------------------------------------------------------------
+template< class _TImage >
+void cpPluginsImageArithmeticFilters::AddImageFilter::
+_GD0( _TImage* image0 )
+{
+  typedef itk::AddImageFilter< _TImage, _TImage > _TFilter;
+
+  auto image1 = this->GetInputData< _TImage >( "Input1" );
+  if( image1 == NULL )
+    this->_Error( "Incompatible second input image." );
+
+  // Configure filter
+  auto filter = this->_CreateITK< _TFilter >( );
+  filter->SetInput( 0, image0 );
+  filter->SetInput( 1, image1 );
+  filter->Update( );
+
+  // Connect output
+  this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
+}
+
+// eof - $RCSfile$
diff --git a/plugins/ImageArithmeticFilters/AddImageFilter.h b/plugins/ImageArithmeticFilters/AddImageFilter.h
new file mode 100644 (file)
index 0000000..7f48c52
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef __cpPluginsImageArithmeticFilters__AddImageFilter__h__
+#define __cpPluginsImageArithmeticFilters__AddImageFilter__h__
+
+#include <plugins/cpPluginsImageArithmeticFilters_Export.h>
+#include <cpPlugins/BaseObjects/ProcessObject.h>
+
+namespace cpPluginsImageArithmeticFilters
+{
+  /**
+   */
+  class cpPluginsImageArithmeticFilters_EXPORT AddImageFilter
+    : public cpPlugins::BaseObjects::ProcessObject
+  {
+    cpPluginsObject(
+      AddImageFilter,
+      cpPlugins::BaseObjects::ProcessObject,
+      ImageBooleanFilters
+      );
+
+  protected:
+    template< class _TImage >
+      inline void _GD0( _TImage* image0 );
+  };
+
+} // ecapseman
+
+#endif // __cpPluginsImageArithmeticFilters__AddImageFilter__h__
+
+// eof - $RCSfile$
diff --git a/plugins/ImageArithmeticFilters/DivideImageFilter.cxx b/plugins/ImageArithmeticFilters/DivideImageFilter.cxx
new file mode 100644 (file)
index 0000000..a802667
--- /dev/null
@@ -0,0 +1,53 @@
+#include <plugins/ImageArithmeticFilters/DivideImageFilter.h>
+#include <cpPlugins/DataObjects/Image.h>
+
+#include <itkDivideImageFilter.h>
+#include <itkBinaryFunctorImageFilter.hxx>
+
+// -------------------------------------------------------------------------
+cpPluginsImageArithmeticFilters::DivideImageFilter::
+DivideImageFilter( )
+  : Superclass( )
+{
+  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input0", true, false );
+  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input1", true, false );
+  this->_ConfigureOutput< cpPlugins::DataObjects::Image >( "Output" );
+}
+
+// -------------------------------------------------------------------------
+cpPluginsImageArithmeticFilters::DivideImageFilter::
+~DivideImageFilter( )
+{
+}
+
+// -------------------------------------------------------------------------
+void cpPluginsImageArithmeticFilters::DivideImageFilter::
+_GenerateData( )
+{
+  auto o = this->GetInputData( "Input0" );
+  cpPlugins_Demangle_ImageScalars_Dims( o, _GD0 );
+  else this->_Error( "Invalid input image." );
+}
+
+// -------------------------------------------------------------------------
+template< class _TImage >
+void cpPluginsImageArithmeticFilters::DivideImageFilter::
+_GD0( _TImage* image0 )
+{
+  typedef itk::DivideImageFilter< _TImage, _TImage, _TImage > _TFilter;
+
+  auto image1 = this->GetInputData< _TImage >( "Input1" );
+  if( image1 == NULL )
+    this->_Error( "Incompatible second input image." );
+
+  // Configure filter
+  auto filter = this->_CreateITK< _TFilter >( );
+  filter->SetInput( 0, image0 );
+  filter->SetInput( 1, image1 );
+  filter->Update( );
+
+  // Connect output
+  this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
+}
+
+// eof - $RCSfile$
diff --git a/plugins/ImageArithmeticFilters/DivideImageFilter.h b/plugins/ImageArithmeticFilters/DivideImageFilter.h
new file mode 100644 (file)
index 0000000..7825c8c
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef __cpPluginsImageArithmeticFilters__DivideImageFilter__h__
+#define __cpPluginsImageArithmeticFilters__DivideImageFilter__h__
+
+#include <plugins/cpPluginsImageArithmeticFilters_Export.h>
+#include <cpPlugins/BaseObjects/ProcessObject.h>
+
+namespace cpPluginsImageArithmeticFilters
+{
+  /**
+   */
+  class cpPluginsImageArithmeticFilters_EXPORT DivideImageFilter
+    : public cpPlugins::BaseObjects::ProcessObject
+  {
+    cpPluginsObject(
+      DivideImageFilter,
+      cpPlugins::BaseObjects::ProcessObject,
+      ImageBooleanFilters
+      );
+
+  protected:
+    template< class _TImage >
+      inline void _GD0( _TImage* image0 );
+  };
+
+} // ecapseman
+
+#endif // __cpPluginsImageArithmeticFilters__DivideImageFilter__h__
+
+// eof - $RCSfile$
diff --git a/plugins/ImageArithmeticFilters/DivideOrZeroOutImageFilter.cxx b/plugins/ImageArithmeticFilters/DivideOrZeroOutImageFilter.cxx
new file mode 100644 (file)
index 0000000..4a80569
--- /dev/null
@@ -0,0 +1,57 @@
+#include <plugins/ImageArithmeticFilters/DivideOrZeroOutImageFilter.h>
+#include <cpPlugins/DataObjects/Image.h>
+
+#include <itkDivideOrZeroOutImageFilter.h>
+#include <itkBinaryFunctorImageFilter.hxx>
+
+// -------------------------------------------------------------------------
+cpPluginsImageArithmeticFilters::DivideOrZeroOutImageFilter::
+DivideOrZeroOutImageFilter( )
+  : Superclass( )
+{
+  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input0", true, false );
+  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input1", true, false );
+  this->_ConfigureOutput< cpPlugins::DataObjects::Image >( "Output" );
+
+  this->m_Parameters.ConfigureAsReal( "Threshold" );
+  this->m_Parameters.SetReal( "Threshold", 1e-10 );
+}
+
+// -------------------------------------------------------------------------
+cpPluginsImageArithmeticFilters::DivideOrZeroOutImageFilter::
+~DivideOrZeroOutImageFilter( )
+{
+}
+
+// -------------------------------------------------------------------------
+void cpPluginsImageArithmeticFilters::DivideOrZeroOutImageFilter::
+_GenerateData( )
+{
+  auto o = this->GetInputData( "Input0" );
+  cpPlugins_Demangle_ImageScalars_Dims( o, _GD0 );
+  else this->_Error( "Invalid input image." );
+}
+
+// -------------------------------------------------------------------------
+template< class _TImage >
+void cpPluginsImageArithmeticFilters::DivideOrZeroOutImageFilter::
+_GD0( _TImage* image0 )
+{
+  typedef itk::DivideOrZeroOutImageFilter< _TImage, _TImage, _TImage > _TFilter;
+
+  auto image1 = this->GetInputData< _TImage >( "Input1" );
+  if( image1 == NULL )
+    this->_Error( "Incompatible second input image." );
+
+  // Configure filter
+  auto filter = this->_CreateITK< _TFilter >( );
+  filter->SetInput( 0, image0 );
+  filter->SetInput( 1, image1 );
+  filter->SetThreshold( this->m_Parameters.GetReal( "Threshold" ) );
+  filter->Update( );
+
+  // Connect output
+  this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
+}
+
+// eof - $RCSfile$
diff --git a/plugins/ImageArithmeticFilters/DivideOrZeroOutImageFilter.h b/plugins/ImageArithmeticFilters/DivideOrZeroOutImageFilter.h
new file mode 100644 (file)
index 0000000..e7f6ff0
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef __cpPluginsImageArithmeticFilters__DivideOrZeroOutImageFilter__h__
+#define __cpPluginsImageArithmeticFilters__DivideOrZeroOutImageFilter__h__
+
+#include <plugins/cpPluginsImageArithmeticFilters_Export.h>
+#include <cpPlugins/BaseObjects/ProcessObject.h>
+
+namespace cpPluginsImageArithmeticFilters
+{
+  /**
+   */
+  class cpPluginsImageArithmeticFilters_EXPORT DivideOrZeroOutImageFilter
+    : public cpPlugins::BaseObjects::ProcessObject
+  {
+    cpPluginsObject(
+      DivideOrZeroOutImageFilter,
+      cpPlugins::BaseObjects::ProcessObject,
+      ImageBooleanFilters
+      );
+
+  protected:
+    template< class _TImage >
+      inline void _GD0( _TImage* image0 );
+  };
+
+} // ecapseman
+
+#endif // __cpPluginsImageArithmeticFilters__DivideOrZeroOutImageFilter__h__
+
+// eof - $RCSfile$
diff --git a/plugins/ImageArithmeticFilters/MultiplyImageFilter.cxx b/plugins/ImageArithmeticFilters/MultiplyImageFilter.cxx
new file mode 100644 (file)
index 0000000..3736968
--- /dev/null
@@ -0,0 +1,53 @@
+#include <plugins/ImageArithmeticFilters/MultiplyImageFilter.h>
+#include <cpPlugins/DataObjects/Image.h>
+
+#include <itkMultiplyImageFilter.h>
+#include <itkBinaryFunctorImageFilter.hxx>
+
+// -------------------------------------------------------------------------
+cpPluginsImageArithmeticFilters::MultiplyImageFilter::
+MultiplyImageFilter( )
+  : Superclass( )
+{
+  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input0", true, false );
+  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input1", true, false );
+  this->_ConfigureOutput< cpPlugins::DataObjects::Image >( "Output" );
+}
+
+// -------------------------------------------------------------------------
+cpPluginsImageArithmeticFilters::MultiplyImageFilter::
+~MultiplyImageFilter( )
+{
+}
+
+// -------------------------------------------------------------------------
+void cpPluginsImageArithmeticFilters::MultiplyImageFilter::
+_GenerateData( )
+{
+  auto o = this->GetInputData( "Input0" );
+  cpPlugins_Demangle_ImageIntegers_Dims( o, _GD0 );
+  else this->_Error( "Invalid input image." );
+}
+
+// -------------------------------------------------------------------------
+template< class _TImage >
+void cpPluginsImageArithmeticFilters::MultiplyImageFilter::
+_GD0( _TImage* image0 )
+{
+  typedef itk::MultiplyImageFilter< _TImage, _TImage > _TFilter;
+
+  auto image1 = this->GetInputData< _TImage >( "Input1" );
+  if( image1 == NULL )
+    this->_Error( "Incompatible second input image." );
+
+  // Configure filter
+  auto filter = this->_CreateITK< _TFilter >( );
+  filter->SetInput( 0, image0 );
+  filter->SetInput( 1, image1 );
+  filter->Update( );
+
+  // Connect output
+  this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
+}
+
+// eof - $RCSfile$
diff --git a/plugins/ImageArithmeticFilters/MultiplyImageFilter.h b/plugins/ImageArithmeticFilters/MultiplyImageFilter.h
new file mode 100644 (file)
index 0000000..8614096
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef __cpPluginsImageArithmeticFilters__MultiplyImageFilter__h__
+#define __cpPluginsImageArithmeticFilters__MultiplyImageFilter__h__
+
+#include <plugins/cpPluginsImageArithmeticFilters_Export.h>
+#include <cpPlugins/BaseObjects/ProcessObject.h>
+
+namespace cpPluginsImageArithmeticFilters
+{
+  /**
+   */
+  class cpPluginsImageArithmeticFilters_EXPORT MultiplyImageFilter
+    : public cpPlugins::BaseObjects::ProcessObject
+  {
+    cpPluginsObject(
+      MultiplyImageFilter,
+      cpPlugins::BaseObjects::ProcessObject,
+      ImageBooleanFilters
+      );
+
+  protected:
+    template< class _TImage >
+      inline void _GD0( _TImage* image0 );
+  };
+
+} // ecapseman
+
+#endif // __cpPluginsImageArithmeticFilters__MultiplyImageFilter__h__
+
+// eof - $RCSfile$
diff --git a/plugins/ImageArithmeticFilters/PowImageFilter.cxx b/plugins/ImageArithmeticFilters/PowImageFilter.cxx
new file mode 100644 (file)
index 0000000..f0b4c8e
--- /dev/null
@@ -0,0 +1,56 @@
+#include <plugins/ImageArithmeticFilters/PowImageFilter.h>
+#include <cpPlugins/DataObjects/Image.h>
+
+#include <itkPowImageFilter.h>
+#include <itkBinaryFunctorImageFilter.hxx>
+
+// -------------------------------------------------------------------------
+cpPluginsImageArithmeticFilters::PowImageFilter::
+PowImageFilter( )
+  : Superclass( )
+{
+  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input0", true, false );
+  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input1", false, false );
+  this->_ConfigureOutput< cpPlugins::DataObjects::Image >( "Output" );
+
+  this->m_Parameters.ConfigureAsReal( "Constant" );
+  this->m_Parameters.SetReal( "Constant", 1 );
+}
+
+// -------------------------------------------------------------------------
+cpPluginsImageArithmeticFilters::PowImageFilter::
+~PowImageFilter( )
+{
+}
+
+// -------------------------------------------------------------------------
+void cpPluginsImageArithmeticFilters::PowImageFilter::
+_GenerateData( )
+{
+  auto o = this->GetInputData( "Input0" );
+  cpPlugins_Demangle_ImageScalars_Dims( o, _GD0 );
+  else this->_Error( "Invalid input image." );
+}
+
+// -------------------------------------------------------------------------
+template< class _TImage >
+void cpPluginsImageArithmeticFilters::PowImageFilter::
+_GD0( _TImage* image0 )
+{
+  typedef itk::PowImageFilter< _TImage, _TImage > _TFilter;
+
+  // Configure filter
+  auto filter = this->_CreateITK< _TFilter >( );
+  filter->SetInput1( image0 );
+  auto image1 = this->GetInputData< _TImage >( "Input1" );
+  if( image1 == NULL )
+    filter->SetConstant( this->m_Parameters.GetReal( "Constant" ) );
+  else
+    filter->SetInput2( image1 );
+  filter->Update( );
+
+  // Connect output
+  this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
+}
+
+// eof - $RCSfile$
diff --git a/plugins/ImageArithmeticFilters/PowImageFilter.h b/plugins/ImageArithmeticFilters/PowImageFilter.h
new file mode 100644 (file)
index 0000000..4882c6a
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef __cpPluginsImageArithmeticFilters__PowImageFilter__h__
+#define __cpPluginsImageArithmeticFilters__PowImageFilter__h__
+
+#include <plugins/cpPluginsImageArithmeticFilters_Export.h>
+#include <cpPlugins/BaseObjects/ProcessObject.h>
+
+namespace cpPluginsImageArithmeticFilters
+{
+  /**
+   */
+  class cpPluginsImageArithmeticFilters_EXPORT PowImageFilter
+    : public cpPlugins::BaseObjects::ProcessObject
+  {
+    cpPluginsObject(
+      PowImageFilter,
+      cpPlugins::BaseObjects::ProcessObject,
+      ImageBooleanFilters
+      );
+
+  protected:
+    template< class _TImage >
+      inline void _GD0( _TImage* image0 );
+  };
+
+} // ecapseman
+
+#endif // __cpPluginsImageArithmeticFilters__PowImageFilter__h__
+
+// eof - $RCSfile$
diff --git a/plugins/ImageArithmeticFilters/SubtractImageFilter.cxx b/plugins/ImageArithmeticFilters/SubtractImageFilter.cxx
new file mode 100644 (file)
index 0000000..0b0c1cf
--- /dev/null
@@ -0,0 +1,53 @@
+#include <plugins/ImageArithmeticFilters/SubtractImageFilter.h>
+#include <cpPlugins/DataObjects/Image.h>
+
+#include <itkSubtractImageFilter.h>
+#include <itkBinaryFunctorImageFilter.hxx>
+
+// -------------------------------------------------------------------------
+cpPluginsImageArithmeticFilters::SubtractImageFilter::
+SubtractImageFilter( )
+  : Superclass( )
+{
+  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input0", true, false );
+  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input1", true, false );
+  this->_ConfigureOutput< cpPlugins::DataObjects::Image >( "Output" );
+}
+
+// -------------------------------------------------------------------------
+cpPluginsImageArithmeticFilters::SubtractImageFilter::
+~SubtractImageFilter( )
+{
+}
+
+// -------------------------------------------------------------------------
+void cpPluginsImageArithmeticFilters::SubtractImageFilter::
+_GenerateData( )
+{
+  auto o = this->GetInputData( "Input0" );
+  cpPlugins_Demangle_ImageIntegers_Dims( o, _GD0 );
+  else this->_Error( "Invalid input image." );
+}
+
+// -------------------------------------------------------------------------
+template< class _TImage >
+void cpPluginsImageArithmeticFilters::SubtractImageFilter::
+_GD0( _TImage* image0 )
+{
+  typedef itk::SubtractImageFilter< _TImage, _TImage > _TFilter;
+
+  auto image1 = this->GetInputData< _TImage >( "Input1" );
+  if( image1 == NULL )
+    this->_Error( "Incompatible second input image." );
+
+  // Configure filter
+  auto filter = this->_CreateITK< _TFilter >( );
+  filter->SetInput( 0, image0 );
+  filter->SetInput( 1, image1 );
+  filter->Update( );
+
+  // Connect output
+  this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
+}
+
+// eof - $RCSfile$
diff --git a/plugins/ImageArithmeticFilters/SubtractImageFilter.h b/plugins/ImageArithmeticFilters/SubtractImageFilter.h
new file mode 100644 (file)
index 0000000..f8e529f
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef __cpPluginsImageArithmeticFilters__SubtractImageFilter__h__
+#define __cpPluginsImageArithmeticFilters__SubtractImageFilter__h__
+
+#include <plugins/cpPluginsImageArithmeticFilters_Export.h>
+#include <cpPlugins/BaseObjects/ProcessObject.h>
+
+namespace cpPluginsImageArithmeticFilters
+{
+  /**
+   */
+  class cpPluginsImageArithmeticFilters_EXPORT SubtractImageFilter
+    : public cpPlugins::BaseObjects::ProcessObject
+  {
+    cpPluginsObject(
+      SubtractImageFilter,
+      cpPlugins::BaseObjects::ProcessObject,
+      ImageBooleanFilters
+      );
+
+  protected:
+    template< class _TImage >
+      inline void _GD0( _TImage* image0 );
+  };
+
+} // ecapseman
+
+#endif // __cpPluginsImageArithmeticFilters__SubtractImageFilter__h__
+
+// eof - $RCSfile$
diff --git a/plugins/ImageGenericFilters/MinimumMaximumCalculator.cxx b/plugins/ImageGenericFilters/MinimumMaximumCalculator.cxx
new file mode 100644 (file)
index 0000000..4c605cd
--- /dev/null
@@ -0,0 +1,115 @@
+#include <plugins/ImageGenericFilters/MinimumMaximumCalculator.h>
+#include <cpPlugins/DataObjects/Image.h>
+#include <cpPlugins/DataObjects/Mesh.h>
+
+#include <itkMinimumMaximumImageCalculator.h>
+
+// -------------------------------------------------------------------------
+cpPluginsImageGenericFilters::MinimumMaximumCalculator::
+MinimumMaximumCalculator( )
+  : Superclass( )
+{
+  this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input", true, false );
+  this->_ConfigureOutput< cpPlugins::DataObjects::Mesh >( "Maximum" );
+  this->_ConfigureOutput< cpPlugins::DataObjects::Mesh >( "Minimum" );
+}
+
+// -------------------------------------------------------------------------
+cpPluginsImageGenericFilters::MinimumMaximumCalculator::
+~MinimumMaximumCalculator( )
+{
+}
+
+// -------------------------------------------------------------------------
+void cpPluginsImageGenericFilters::MinimumMaximumCalculator::
+_GenerateData( )
+{
+  auto o = this->GetInputData( "Input" );
+  cpPlugins_Demangle_ImageScalars_Dims( o, _GD0 );
+  else this->_Error( "Invalid input image." );
+}
+
+// -------------------------------------------------------------------------
+template< class _TImage >
+void cpPluginsImageGenericFilters::MinimumMaximumCalculator::
+_GD0( _TImage* input )
+{
+  typedef itk::MinimumMaximumImageCalculator< _TImage > _TFilter;
+  typedef typename _TImage::IndexType _TIndex;
+  typedef typename _TImage::PointType _TPoint;
+
+  auto filter = this->_CreateITK< _TFilter >( );
+  filter->SetImage( input );
+  filter->Compute( );
+
+  _TIndex min_idx = filter->GetIndexOfMinimum( );
+  _TIndex max_idx = filter->GetIndexOfMaximum( );
+
+  _TPoint min_pnt, max_pnt;
+  input->TransformIndexToPhysicalPoint( min_idx, min_pnt );
+  input->TransformIndexToPhysicalPoint( max_idx, max_pnt );
+
+  auto min_pd = this->GetOutputData< vtkPolyData >( "Minimum" );
+  if( min_pd == NULL )
+  {
+    auto points = vtkSmartPointer< vtkPoints >::New( );
+    auto verts = vtkSmartPointer< vtkCellArray >::New( );
+    auto lines = vtkSmartPointer< vtkCellArray >::New( );
+    auto polys = vtkSmartPointer< vtkCellArray >::New( );
+    auto strips = vtkSmartPointer< vtkCellArray >::New( );
+    auto pd = vtkSmartPointer< vtkPolyData >::New( );
+    pd->SetPoints( points );
+    pd->SetVerts( verts );
+    pd->SetLines( lines );
+    pd->SetPolys( polys );
+    pd->SetStrips( strips );
+
+    points->InsertNextPoint( 0, 0, 0 );
+    verts->InsertNextCell( 1 );
+    verts->InsertCellPoint( 0 );
+
+    this->GetOutput( "Minimum" )->SetVTK( pd );
+    min_pd = this->GetOutputData< vtkPolyData >( "Minimum" );
+
+  } // fi
+
+  if( _TImage::ImageDimension == 1 )
+    min_pd->GetPoints( )->SetPoint( 0, min_pnt[ 0 ], 0, 0 );
+  else if( _TImage::ImageDimension == 2 )
+    min_pd->GetPoints( )->SetPoint( 0, min_pnt[ 0 ], min_pnt[ 1 ], 0 );
+  else if( _TImage::ImageDimension > 2 )
+    min_pd->GetPoints( )->SetPoint( 0, min_pnt[ 0 ], min_pnt[ 1 ], min_pnt[ 2 ] );
+
+  auto max_pd = this->GetOutputData< vtkPolyData >( "Maximum" );
+  if( max_pd == NULL )
+  {
+    auto points = vtkSmartPointer< vtkPoints >::New( );
+    auto verts = vtkSmartPointer< vtkCellArray >::New( );
+    auto lines = vtkSmartPointer< vtkCellArray >::New( );
+    auto polys = vtkSmartPointer< vtkCellArray >::New( );
+    auto strips = vtkSmartPointer< vtkCellArray >::New( );
+    auto pd = vtkSmartPointer< vtkPolyData >::New( );
+    pd->SetPoints( points );
+    pd->SetVerts( verts );
+    pd->SetLines( lines );
+    pd->SetPolys( polys );
+    pd->SetStrips( strips );
+
+    points->InsertNextPoint( 0, 0, 0 );
+    verts->InsertNextCell( 1 );
+    verts->InsertCellPoint( 0 );
+
+    this->GetOutput( "Maximum" )->SetVTK( pd );
+    max_pd = this->GetOutputData< vtkPolyData >( "Maximum" );
+
+  } // fi
+
+  if( _TImage::ImageDimension == 1 )
+    max_pd->GetPoints( )->SetPoint( 0, max_pnt[ 0 ], 0, 0 );
+  else if( _TImage::ImageDimension == 2 )
+    max_pd->GetPoints( )->SetPoint( 0, max_pnt[ 0 ], max_pnt[ 1 ], 0 );
+  else if( _TImage::ImageDimension > 2 )
+    max_pd->GetPoints( )->SetPoint( 0, max_pnt[ 0 ], max_pnt[ 1 ], max_pnt[ 2 ] );
+}
+
+// eof - $RCSfile$
diff --git a/plugins/ImageGenericFilters/MinimumMaximumCalculator.h b/plugins/ImageGenericFilters/MinimumMaximumCalculator.h
new file mode 100644 (file)
index 0000000..bc18f97
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef __cpPluginsImageGenericFilters__MinimumMaximumCalculator__h__
+#define __cpPluginsImageGenericFilters__MinimumMaximumCalculator__h__
+
+#include <plugins/cpPluginsImageGenericFilters_Export.h>
+#include <cpPlugins/BaseObjects/ProcessObject.h>
+
+namespace cpPluginsImageGenericFilters
+{
+  /**
+   */
+  class cpPluginsImageGenericFilters_EXPORT MinimumMaximumCalculator
+    : public cpPlugins::BaseObjects::ProcessObject
+  {
+    cpPluginsObject(
+      MinimumMaximumCalculator,
+      cpPlugins::BaseObjects::ProcessObject,
+      ImageFilters
+      );
+
+  protected:
+    template< class _TImage >
+      inline void _GD0( _TImage* input );
+  };
+
+} // ecapseman
+
+#endif // __cpPluginsImageGenericFilters__MinimumMaximumCalculator__h__
+
+// eof - $RCSfile$