]> Creatis software - FrontAlgorithms.git/commitdiff
...
authorLeonardo Flórez-Valencia <florez-l@javeriana.edu.co>
Tue, 29 Nov 2016 23:16:43 +0000 (18:16 -0500)
committerLeonardo Flórez-Valencia <florez-l@javeriana.edu.co>
Tue, 29 Nov 2016 23:16:43 +0000 (18:16 -0500)
CMakeLists.txt
appli/CMakeLists.txt
appli/experiments/CMakeLists.txt [new file with mode: 0644]
appli/experiments/Skeleton_00.cxx [new file with mode: 0644]
plugins/ImageAlgorithms/BaseFilter.h

index a5fba660ca6975b8c30b4b5d1c5aeeafae1b7f14..2c06df53b35e3284a99aa042e105f8ac6ca930d9 100644 (file)
@@ -55,6 +55,6 @@ INCLUDE(cmake/Functions.cmake)
 ## == Build different parts ==
 ## ===========================
 
-SUBDIRS(lib plugins)
+SUBDIRS(appli lib plugins)
 
 ## eof - $RCSfile$
index a5a20280dde5e0987ece1f7fb973e8e505b5fbe8..6380a79c2ac2a5a94a8a33272bc43c97f8bd0f05 100644 (file)
@@ -3,4 +3,9 @@ IF(BUILD_EXAMPLES)
   SUBDIRS(examples)
 ENDIF(BUILD_EXAMPLES)
 
+OPTION(BUILD_EXPERIMENTS "Build experiments" OFF)
+IF(BUILD_EXPERIMENTS)
+  SUBDIRS(experiments)
+ENDIF(BUILD_EXPERIMENTS)
+
 ## eof - $RCSfile$
diff --git a/appli/experiments/CMakeLists.txt b/appli/experiments/CMakeLists.txt
new file mode 100644 (file)
index 0000000..3be8e1c
--- /dev/null
@@ -0,0 +1,8 @@
+INCLUDE_DIRECTORIES(
+  ${PROJECT_SOURCE_DIR}/lib
+  ${PROJECT_BINARY_DIR}/lib
+  )
+ADD_EXECUTABLE(fpa_experiments_Skeleton_00 Skeleton_00.cxx)
+TARGET_LINK_LIBRARIES(fpa_experiments_Skeleton_00 ${ITK_LIBRARIES} ${VTK_LIBRARIES})
+
+## eof - $RCSfile$
diff --git a/appli/experiments/Skeleton_00.cxx b/appli/experiments/Skeleton_00.cxx
new file mode 100644 (file)
index 0000000..11b49f2
--- /dev/null
@@ -0,0 +1,91 @@
+#include <itkImage.h>
+#include <itkMinimumMaximumImageCalculator.h>
+#include <itkSignedMaurerDistanceMapImageFilter.h>
+#include <itkImageFileReader.h>
+#include <itkImageFileWriter.h>
+#include <fpa/Image/SkeletonFilter.h>
+#include <cpExtensions/Algorithms/SkeletonToImageFilter.h>
+
+typedef double TScalar;
+typedef itk::Image< TScalar, 3 > TImage;
+typedef itk::MinimumMaximumImageCalculator< TImage > TMinMax;
+typedef itk::SignedMaurerDistanceMapImageFilter< TImage, TImage > TDMap;
+typedef fpa::Image::SkeletonFilter< TImage > TSkeletonFilter;
+typedef TSkeletonFilter::TSkeleton TSkeleton;
+typedef cpExtensions::Algorithms::SkeletonToImageFilter< TSkeleton, TImage > TSkeletonToImage;
+typedef itk::ImageFileReader< TImage > TReader;
+typedef itk::ImageFileWriter< TImage > TWriter;
+
+int main( int argc, char* argv[] )
+{
+  if( argc < 4 )
+  {
+    std::cerr
+      << "Usage: " << argv[ 0 ]
+      << " image prefix number_of_samples [seed_x seed_y seed_z]"
+      << std::endl;
+    return( 1 );
+
+  } // fi
+  std::string image_name = argv[ 1 ];
+
+  TReader::Pointer reader = TReader::New( );
+  reader->SetFileName( image_name );
+  reader->Update( );
+
+  TDMap::Pointer dmap = TDMap::New( );
+  dmap->SetInput( reader->GetOutput( ) );
+  dmap->InsideIsPositiveOn( );
+  dmap->Update( );
+  const TImage* image = dmap->GetOutput( );
+
+  std::string prefix = argv[ 2 ];
+  std::istringstream str( argv[ 3 ] );
+  unsigned int number_of_samples;
+  str >> number_of_samples;
+  TImage::IndexType seed;
+  if( argc < 7 )
+  {
+    TMinMax::Pointer minmax = TMinMax::New( );
+    minmax->SetImage( image );
+    minmax->Compute( );
+    seed = minmax->GetIndexOfMaximum( );
+  }
+  else
+  {
+    std::istringstream str_x( argv[ 4 ] );
+    std::istringstream str_y( argv[ 5 ] );
+    std::istringstream str_z( argv[ 6 ] );
+    TImage::PointType pnt;
+    str_x >> pnt[ 0 ];
+    str_y >> pnt[ 1 ];
+    str_z >> pnt[ 2 ];
+    image->TransformPhysicalPointToIndex( pnt, seed );
+
+  } // fi
+
+  for( unsigned int i = 0; i < number_of_samples; ++i )
+  {
+    std::cout << i << std::endl;
+    TSkeletonFilter::Pointer skeleton = TSkeletonFilter::New( );
+    skeleton->SetInput( image );
+    skeleton->AddSeed( seed, 0 );
+    skeleton->Update( );
+
+    TSkeletonToImage::Pointer sk2im = TSkeletonToImage::New( );
+    sk2im->SetTemplateImage( image );
+    sk2im->SetSkeleton( skeleton->GetSkeleton( ) );
+    sk2im->SetOutsideValue( 0 );
+    sk2im->SetInsideValue( 1 );
+    sk2im->Update( );
+
+    TWriter::Pointer writer = TWriter::New( );
+    writer->SetInput( sk2im->GetOutput( ) );
+    writer->SetFileName( "skeleton.mhd" );
+    writer->Update( );
+
+  } // rof
+  return( 0 );
+}
+
+// eof - $RCSfile$
index 11c97ca1392482e467282681a91559c0722d9e2d..9808e46225099bc1a09435305c3696b2a273385e 100644 (file)
@@ -51,12 +51,14 @@ namespace fpaPluginsImageAlgorithms
 } // ecapseman
 
 // -------------------------------------------------------------------------
-    template< class _TFilter, class _TImage >
+template< class _TFilter, class _TImage >
 void fpaPluginsImageAlgorithms::BaseFilter::
 _ConfigureFilter( _TFilter* filter, _TImage* image )
 {
   typedef typename _TFilter::TNeighborhoodFunction _TNeighborhood;
-  typedef fpa::Image::Functors::SimpleNeighborhood< _TImage > _TSimpleNeigh;
+  typedef
+    fpa::Image::Functors::SimpleNeighborhood< typename _TImage::Superclass >
+    _TSimpleNeigh;
 
   // Simple configuration
   filter->SetInput( image );