]> Creatis software - FrontAlgorithms.git/commitdiff
...
authorLeonardo Flórez-Valencia <florez-l@javeriana.edu.co>
Mon, 12 Sep 2016 15:15:51 +0000 (10:15 -0500)
committerLeonardo Flórez-Valencia <florez-l@javeriana.edu.co>
Mon, 12 Sep 2016 15:15:51 +0000 (10:15 -0500)
162 files changed:
CMakeLists.txt [deleted file]
COMPILATION [deleted file]
README [deleted file]
appli/CMakeLists.txt [deleted file]
appli/TempAirwaysAppli/CMakeLists.txt [deleted file]
appli/TempAirwaysAppli/TempAirwaysAppli.cxx [deleted file]
appli/examples/CMakeLists.txt [deleted file]
appli/examples/example_BinaryDistanceMap.cxx [deleted file]
appli/examples/example_CircleOfWillis.cxx [deleted file]
appli/examples/example_HausdorffDistance.cxx [deleted file]
appli/examples/example_ImageAlgorithmDijkstra_00.cxx [deleted file]
appli/examples/example_ImageAlgorithmDijkstra_01.cxx [deleted file]
appli/examples/example_ImageAlgorithmDijkstra_02.cxx [deleted file]
appli/examples/example_ImageAlgorithmDijkstra_03.cxx [deleted file]
appli/examples/example_ImageAlgorithmFastMarching_00.cxx [deleted file]
appli/examples/example_ImageAlgorithmFastMarching_01.cxx [deleted file]
appli/examples/example_ImageAlgorithmRegionGrow_00.cxx [deleted file]
appli/examples/example_ImageAlgorithmRegionGrow_01.cxx [deleted file]
appli/examples/example_ImageAlgorithmRegionGrow_MultipleThresholds.cxx [deleted file]
appli/examples/example_ImageAlgorithm_Skeletonization.cxx [deleted file]
appli/examples/example_Image_Dijkstra_AbsoluteDifferenceCost.cxx [deleted file]
appli/examples/example_Image_Dijkstra_CostFromInput.cxx [deleted file]
appli/examples/example_Image_Dijkstra_CostFromRGBInput.cxx [deleted file]
appli/examples/example_Image_Dijkstra_DanielssonCost.cxx [deleted file]
appli/examples/example_Image_Dijkstra_DanielssonCost_TwoSeedsPath.cxx [deleted file]
appli/examples/example_Image_Dijkstra_EndPointDetection.cxx [deleted file]
appli/examples/example_Image_Dijkstra_EndPointDetection_WithoutVTK.cxx [deleted file]
appli/examples/example_Image_Dijkstra_LabelSkeleton.cxx [deleted file]
appli/examples/example_Image_IncrementalRegionGrow_Thresholds.cxx [deleted file]
appli/examples/example_Image_RegionGrow_AllPixels.cxx [deleted file]
appli/examples/example_Image_RegionGrow_AllRGBPixels.cxx [deleted file]
appli/examples/example_Image_RegionGrow_ConnectedPixels.cxx [deleted file]
appli/examples/example_Image_RegionGrow_ConnectedRGBPixels.cxx [deleted file]
appli/examples/example_Image_RegionGrow_GaussianModelEstimation.cxx [deleted file]
appli/examples/example_IncrementalRegionGrow_Thresholds.cxx [deleted file]
appli/examples/example_ShowSkeleton.cxx [deleted file]
appli/examples/example_Thinning.cxx [deleted file]
appli/examples/fpa_Utility.h [deleted file]
cmake/CMakeLists.txt [deleted file]
cmake/FrontAlgorithmsConfig.cmake.in [deleted file]
cmake/fpa_Policies.cmake [deleted file]
data/binary_test_2D_00.png [deleted file]
data/ones_image.png [deleted file]
data/workspaces/workspace_airwaysappli.wxml [deleted file]
doc/UML/fpa.dia [deleted file]
lib/Airways/AirwaysLib/CMakeLists.txt [deleted file]
lib/Airways/AirwaysLib/airwaysEdge.cxx [deleted file]
lib/Airways/AirwaysLib/airwaysEdge.h [deleted file]
lib/Airways/AirwaysLib/airwaysNode.cxx [deleted file]
lib/Airways/AirwaysLib/airwaysNode.h [deleted file]
lib/Airways/AirwaysLib/airwaysTree.cxx [deleted file]
lib/Airways/AirwaysLib/airwaysTree.h [deleted file]
lib/Airways/AirwaysLib/airwaysTreeTypeDefinition.h [deleted file]
lib/Airways/CMakeLists.txt [deleted file]
lib/Airways/MathLib/CMakeLists.txt [deleted file]
lib/Airways/MathLib/Quaternion.cpp [deleted file]
lib/Airways/MathLib/Quaternion.h [deleted file]
lib/Airways/MathLib/vec3.cxx [deleted file]
lib/Airways/MathLib/vec3.h [deleted file]
lib/Airways/fpa2Airways/Converter.h [deleted file]
lib/Airways/fpa2Airways/Converter.hxx [deleted file]
lib/CMakeLists.txt [deleted file]
lib/fpa/Base/Algorithm.h [deleted file]
lib/fpa/Base/Algorithm.hxx [deleted file]
lib/fpa/Base/Dijkstra.h [deleted file]
lib/fpa/Base/Dijkstra.hxx [deleted file]
lib/fpa/Base/Events.h [deleted file]
lib/fpa/Base/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h [deleted file]
lib/fpa/Base/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.hxx [deleted file]
lib/fpa/Base/ExtractPathFromMinimumSpanningTree.h [deleted file]
lib/fpa/Base/ExtractPathFromMinimumSpanningTree.hxx [deleted file]
lib/fpa/Base/FastMarching.h [deleted file]
lib/fpa/Base/FastMarching.hxx [deleted file]
lib/fpa/Base/Functors/InvertCostFunction.h [deleted file]
lib/fpa/Base/Functors/TautologyFunction.h [deleted file]
lib/fpa/Base/ImageSkeleton.h [deleted file]
lib/fpa/Base/ImageSkeleton.hxx [deleted file]
lib/fpa/Base/IncrementalRegionGrow.h [deleted file]
lib/fpa/Base/IncrementalRegionGrow.hxx [deleted file]
lib/fpa/Base/MinimumSpanningTree.h [deleted file]
lib/fpa/Base/MinimumSpanningTree.hxx [deleted file]
lib/fpa/Base/RegionGrow.h [deleted file]
lib/fpa/Base/RegionGrow.hxx [deleted file]
lib/fpa/Base/RegionGrowWithMultipleCriteria.h [deleted file]
lib/fpa/Base/RegionGrowWithMultipleCriteria.hxx [deleted file]
lib/fpa/Common.cxx.in [deleted file]
lib/fpa/Common.h [deleted file]
lib/fpa/IO/MinimumSpanningTreeReader.h [deleted file]
lib/fpa/IO/MinimumSpanningTreeReader.hxx [deleted file]
lib/fpa/IO/MinimumSpanningTreeWriter.h [deleted file]
lib/fpa/IO/MinimumSpanningTreeWriter.hxx [deleted file]
lib/fpa/Image/Algorithm.h [deleted file]
lib/fpa/Image/Algorithm.hxx [deleted file]
lib/fpa/Image/Dijkstra.h [deleted file]
lib/fpa/Image/Dijkstra.hxx [deleted file]
lib/fpa/Image/DijkstraWithEndPointDetection.h [deleted file]
lib/fpa/Image/DijkstraWithEndPointDetection.hxx [deleted file]
lib/fpa/Image/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h [deleted file]
lib/fpa/Image/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.hxx [deleted file]
lib/fpa/Image/FastMarching.h [deleted file]
lib/fpa/Image/Functors/FluxMedialness.h [deleted file]
lib/fpa/Image/Functors/FluxMedialness.hxx [deleted file]
lib/fpa/Image/Functors/GaussianModelEstimatorFunction.h [deleted file]
lib/fpa/Image/Functors/GaussianModelEstimatorFunction.hxx [deleted file]
lib/fpa/Image/Functors/GradientImageFunctionBase.h [deleted file]
lib/fpa/Image/Functors/GradientImageFunctionBase.hxx [deleted file]
lib/fpa/Image/Functors/GulsunTekMedialness.h [deleted file]
lib/fpa/Image/Functors/GulsunTekMedialness.hxx [deleted file]
lib/fpa/Image/Functors/ImageAbsoluteDifferenceCostFunction.h [deleted file]
lib/fpa/Image/Functors/ImageCostFunction.h [deleted file]
lib/fpa/Image/Functors/MFluxMedialness.h [deleted file]
lib/fpa/Image/Functors/MFluxMedialness.hxx [deleted file]
lib/fpa/Image/Functors/RegionGrowAllBelongsFunction.h [deleted file]
lib/fpa/Image/Functors/RegionGrowThresholdFunction.h [deleted file]
lib/fpa/Image/IncrementalRegionGrow.h [deleted file]
lib/fpa/Image/IncrementalRegionGrow.hxx [deleted file]
lib/fpa/Image/MinimumSpanningTree.h [deleted file]
lib/fpa/Image/MinimumSpanningTree.hxx [deleted file]
lib/fpa/Image/RegionGrow.h [deleted file]
lib/fpa/Image/RegionGrow.hxx [deleted file]
lib/fpa/Image/RegionGrowWithMultipleCriteria.h [deleted file]
lib/fpa/Image/RegionGrowWithMultipleThresholds.h [deleted file]
lib/fpa/Image/RegionGrowWithMultipleThresholds.hxx [deleted file]
lib/fpa/VTK/Image/ImageSkeletonToPolyData.h [deleted file]
lib/fpa/VTK/Image/ImageSkeletonToPolyData.hxx [deleted file]
lib/fpa/VTK/Image/Observer2D.h [deleted file]
lib/fpa/VTK/Image/Observer2D.hxx [deleted file]
lib/fpa/VTK/Image/Observer3D.h [deleted file]
lib/fpa/VTK/Image/Observer3D.hxx [deleted file]
lib/fpa_Instances/Backtracking.i [deleted file]
lib/fpa_Instances/CMakeLists.txt [deleted file]
lib/fpa_Instances/Filters.i [deleted file]
lib/fpa_Instances/Functors.i [deleted file]
lib/fpa_Instances/Instances.i [deleted file]
lib/fpa_Instances/Observers.i [deleted file]
plugins/CMakeLists.txt [deleted file]
plugins/fpa/BaseImageFilter.cxx [deleted file]
plugins/fpa/BaseImageFilter.h [deleted file]
plugins/fpa/BaseImageFilter.hxx [deleted file]
plugins/fpa/CMakeLists.txt [deleted file]
plugins/fpa/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.cxx [deleted file]
plugins/fpa/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h [deleted file]
plugins/fpa/ExtractPathFromMinimumSpanningTree.cxx [deleted file]
plugins/fpa/ExtractPathFromMinimumSpanningTree.h [deleted file]
plugins/fpa/GradientBaseImageFunctionSource.cxx [deleted file]
plugins/fpa/GradientBaseImageFunctionSource.h [deleted file]
plugins/fpa/ImageDijkstra.cxx [deleted file]
plugins/fpa/ImageDijkstra.h [deleted file]
plugins/fpa/ImageRegionGrow.cxx [deleted file]
plugins/fpa/ImageRegionGrow.h [deleted file]
plugins/fpa/ImageSkeleton.cxx [deleted file]
plugins/fpa/ImageSkeleton.h [deleted file]
plugins/fpa/InvertCostFunction.cxx [deleted file]
plugins/fpa/InvertCostFunction.h [deleted file]
plugins/fpa/MinimumSpanningTree.cxx [deleted file]
plugins/fpa/MinimumSpanningTree.h [deleted file]
plugins/fpa/MinimumSpanningTreeReader.cxx [deleted file]
plugins/fpa/MinimumSpanningTreeReader.h [deleted file]
plugins/fpa/MinimumSpanningTreeWriter.cxx [deleted file]
plugins/fpa/MinimumSpanningTreeWriter.h [deleted file]
plugins/fpa/RegionGrowThresholdFunction.cxx [deleted file]
plugins/fpa/RegionGrowThresholdFunction.h [deleted file]

diff --git a/CMakeLists.txt b/CMakeLists.txt
deleted file mode 100644 (file)
index 30f36c0..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-INCLUDE(cmake/fpa_Policies.cmake)
-
-## ==================
-## == Project name ==
-## ==================
-
-PROJECT(FrontAlgorithms)
-SET(prj_MAJ_VER "0")
-SET(prj_MIN_VER "1")
-SET(prj_REL_VER "0")
-SET(prj_VER "${prj_MAJ_VER}.${prj_MIN_VER}.${prj_REL_VER}")
-SET(prj_sVER "${prj_MAJ_VER}")
-
-## =====================
-## == Main dependency ==
-## =====================
-
-FIND_PACKAGE(cpPlugins REQUIRED)
-
-## =============
-## == Options ==
-## =============
-
-OPTION(BUILD_PLUGINS "Build plugins" ON)
-OPTION(BUILD_TempAirwaysAppli "Build temporary appli" OFF)
-
-## =========================
-## == Include directories ==
-## =========================
-
-INCLUDE_DIRECTORIES(
-  ${PROJECT_SOURCE_DIR}
-  ${PROJECT_BINARY_DIR}
-  ${PROJECT_SOURCE_DIR}/lib
-  ${PROJECT_BINARY_DIR}/lib
-  ${PROJECT_SOURCE_DIR}/lib/fpa_Instances
-  ${PROJECT_BINARY_DIR}/lib/fpa_Instances
-  ${PROJECT_SOURCE_DIR}/plugins
-  ${PROJECT_BINARY_DIR}/plugins
-  )
-
-## =============================
-## == Subdirs containing code ==
-## =============================
-
-SUBDIRS(
-  cmake
-  lib
-  plugins
-  appli
-  )
-
-## eof - $RCSfile$
diff --git a/COMPILATION b/COMPILATION
deleted file mode 100644 (file)
index d4f2408..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-@description
-  The project uses CMake as compilation helper. It should compile on the three
-  major box flavors (linux, windows, mac). However, as of december 2014, it
-  has only been tested on linux Fedora 20 and Ubuntu 14.04.
-
-@prerequisites
-  1. CMake (>=2.8.12.2)
-
-  3. Insight Toolkit -ITK- (>=4.6.0)
-    3.1 Required cmake flags:
-      BUILD_SHARED_LIBS:BOOL=ON
-    3.2 [OPTIONAL] If USE_VTK=ON
-      Module_ITKVtkGlue:BOOL=ON
-
-  4. [OPTIONAL] Visualization Toolkit -VTK- (>=6.1.0)
-    4.1 Required cmake flags:
-      BUILD_SHARED_LIBS:BOOL=ON
-
-  5. [OPTIONAL] cpPlugins (>=0.0.1)
-    5.1 Required cmake flags:
-      BUILD_SHARED_LIBS:BOOL=ON
-
-@cmake_flags
-  BUILD_EXAMPLES:BOOL
-    Build example applications? (most of them are command line)
-  CMAKE_BUILD_TYPE:STRING
-    Debug/Release?
-  CMAKE_INSTALL_PREFIX:STRING
-    Where to put installation products? (in windows this option has no use)
-
-## eof - $RCSfile$
diff --git a/README b/README
deleted file mode 100644 (file)
index 4ebdcfb..0000000
--- a/README
+++ /dev/null
@@ -1,21 +0,0 @@
-
-@project
-  FrontAlgorithms: Generic implementation of front propagation algorithms
-                   with some extra features
-
-@version
-  0.0.1 (2014-12-31)
-
-@authors
-  Maciej ORKISZ (maciej.orkisz@creatis.insa-lyon.fr)
-  Leonardo FLOREZ-VALENCIA (florez-l@javeriana.edu.co)
-  <Who else?>
-
-@description
-  <Write a fancy description and some historical notes>
-
-@license
-   <What do we put here?>
-
-
-## eof - $RCSfile$
diff --git a/appli/CMakeLists.txt b/appli/CMakeLists.txt
deleted file mode 100644 (file)
index 0e315a1..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-IF(BUILD_TempAirwaysAppli)
-  SUBDIRS(
-    TempAirwaysAppli
-    )
-ENDIF(BUILD_TempAirwaysAppli)
-
-## eof - $RCSfile$
diff --git a/appli/TempAirwaysAppli/CMakeLists.txt b/appli/TempAirwaysAppli/CMakeLists.txt
deleted file mode 100644 (file)
index b038389..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-## Find Boost
-FIND_PACKAGE(Boost REQUIRED system filesystem program_options)
-INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
-
-INCLUDE_DIRECTORIES(
-  ${PROJECT_SOURCE_DIR}/lib/Airways/MathLib
-  ${PROJECT_SOURCE_DIR}/lib/Airways/AirwaysLib
-  ${PROJECT_BINARY_DIR}/lib/Airways/MathLib
-  ${PROJECT_BINARY_DIR}/lib/Airways/AirwaysLib
-  )
-ADD_EXECUTABLE(TempAirwaysAppli TempAirwaysAppli.cxx)
-TARGET_LINK_LIBRARIES(
-  TempAirwaysAppli
-  ${Boost_LIBRARIES} TempAirwaysAppli_AirwaysLib
-  cpPlugins
-  ${fpa_LIBRARIES}
-  )
-
-## eof - $RCSfile$
diff --git a/appli/TempAirwaysAppli/TempAirwaysAppli.cxx b/appli/TempAirwaysAppli/TempAirwaysAppli.cxx
deleted file mode 100644 (file)
index 2664f78..0000000
+++ /dev/null
@@ -1,1065 +0,0 @@
-#include <iostream>
-#include <cstdlib>
-#include <sstream>
-
-#include <boost/filesystem.hpp>
-#include <boost/program_options.hpp>
-
-#include "vec3.h"
-#include "airwaysTree.h"
-
-#include <cpPlugins/Interface.h>
-#include <cpPlugins/Workspace.h>
-
-using namespace airways;
-namespace po = boost::program_options;
-
-namespace
-{
-  const size_t ERROR_IN_COMMAND_LINE = 1;
-  const size_t SUCCESS = 0;
-  const size_t ERROR_UNHANDLED_EXCEPTION = 2;
-} // namespace
-
-typedef std::vector< AirwaysTree > AirwaysVector;
-
-// Auxiliar struct to save info for execution.
-typedef void* TImagePointer;
-struct TreeInfo{
-
-  TreeInfo( )
-    {
-      this->myWorkspace = new cpPlugins::Workspace( );
-    }
-  ~TreeInfo( )
-    {
-      /*
-        if( this->IsMyWorkspace )
-        delete this->myWorkspace;
-      */
-    }
-
-  void CastImage( )
-    {
-      try
-      {
-        this->myWorkspace->Execute( "cast" );
-      }
-      catch( itk::ExceptionObject& err )
-      {
-        std::cerr << "Error: " << err << std::endl;
-        std::exit( 1 );
-
-      } // yrt
-      this->Image =
-        this->myWorkspace->GetFilter( "cast" )->GetOutputData( "Output" )->
-        GetITK< TInputImage >( );
-    }
-
-  TInputImage::Pointer Image;
-  cpPlugins::Workspace* myWorkspace;
-  bool IsMyWorkspace;
-  Vec3 seed;
-  std::string folderpath_pigResults;
-  std::string pig_name;
-  std::string image_name;
-
-};
-// Constants
-unsigned char red[3]   = { 255, 0, 0 };
-unsigned char green[3] = { 0, 255, 0 };
-unsigned char blue[3]  = { 0, 0, 255 };
-unsigned char yellow[3]= { 255, 255, 0 };
-unsigned char purple[3]= { 255, 0, 255 };
-unsigned char cyan[3]= { 0, 255, 255 };
-
-cpPlugins::Interface myPlugins;
-
-// -------------------------------------------------------------------------
-void Load_cpPlugins( const std::string& plugins );
-void CreateResultDirectory(AirwaysTree tree);
-void DrawVTKLinesFromTree(AirwaysTree& tree, const std::string filename, bool common);
-AirwaysTree& CreateAirwaysTreeFromSegmentation(Vec3 seed, TInputImage* input_image, cpPlugins::Workspace& ws );
-vector<TreeInfo> ReadInputFile(const char* filename);
-void printCommonTreeBetweenTwoTrees(AirwaysTree tree_A, AirwaysTree tree_B, std::vector< std::pair< std::pair<Node*, Node*>, std::pair<Node*, Node*> > > vector_pair_edges_A_to_B, unsigned int Q, unsigned int F);
-void printMatchingResultToFile(AirwaysTree tree_A, AirwaysTree tree_B, std::map< unsigned int, std::vector<Node*> > map_A_to_B, std::map< unsigned int, std::vector<Node*> > map_B_to_A, unsigned int Q, unsigned int F);
-void createLinesAndPointsForVTK(const Node* node, vtkSmartPointer<vtkPoints>& pts,vtkSmartPointer<vtkCellArray>& lines,        vtkSmartPointer<vtkUnsignedCharArray>& colors, bool common, bool isRoot);
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  Load_cpPlugins( "./plugins.cfg" );
-
-  try
-  {
-    // Define and parse the program options
-    po::options_description desc("Options");
-    desc.add_options()("use_file", po::value<std::string>(), "Adds the filepath containing the file to be used in creaAirwaysTree -- Mandatory")
-      ("build_trees","Creates trees from a given filepath (arg) and stores it in a .vtk file")
-      ("subtree_levels", po::value<int>(),"Get a subtree(s) by levels - result: a vtk and reconstructed img .mhd")
-      ("subtree_length", po::value<float>(),"Get a subtree(s) by length - result: a vtk and reconstructed img .mhd")
-      ("subtree_diameter", po::value<float>(),"Get a subtree(s) by diameter - result: a vtk and reconstructed img .mhd")
-      ("compare_trees",        "Compare the trees given in the input file or the subtrees using an option - result: a vtk and reconstructed img .mhd");
-    //TODO: Fix image segmentation. ("segment_images",  "Creates a binary image corresponding to the segmentation of of a given original image (arg) and seed (arg), saves it to a .mhd file and uses it for subsequent operations")
-    po::variables_map vm;
-    try
-    {
-      std::string fileName;
-      vector<TreeInfo> treeInfoVector;
-      AirwaysVector aVector;
-      TImagePointer segmentationImage;
-      Vec3 seed;
-      po::store(po::parse_command_line(argc, argv, desc), vm); // can throw
-      if (vm.count("use_file"))
-      {
-        fileName = vm["use_file"].as<std::string>();
-        treeInfoVector = ReadInputFile(fileName.c_str());
-      }
-
-      if(vm.count("segment_images"))
-      {
-      }
-
-      // Build trees option
-      if (vm.count("build_trees"))
-      {
-        for(unsigned int i = 0; i < treeInfoVector.size(); ++ i){
-          TreeInfo info = treeInfoVector[i];
-          try
-          {
-            info.myWorkspace->PrintExecutionOn( );
-            info.myWorkspace->Execute( "eb" );
-          }
-          catch( itk::ExceptionObject& err )
-          {
-            std::cerr << "Error: " << err << std::endl;
-            std::exit( 1 );
-
-          } // fi
-          info.CastImage( );
-          AirwaysTree tree = CreateAirwaysTreeFromSegmentation( info.seed, info.Image, *(info.myWorkspace ));
-          tree.SetResultPath(info.folderpath_pigResults);
-          tree.SetImageName(info.image_name);
-          aVector.push_back(tree);
-        }
-        for (unsigned int i = 0; i < aVector.size(); ++i)
-        {
-          CreateResultDirectory(aVector[i]);
-          std::string fullPath = aVector[i].GetResultPath() + "/" + aVector[i].GetImageName() + ".vtk";
-          DrawVTKLinesFromTree(aVector[i], fullPath, false);
-
-        } //for
-      } //if
-
-      // Subtree levels option
-      if (vm.count("subtree_levels"))
-      {
-      } //if
-      else if (vm.count("subtree_length"))
-      {
-      } //if
-      else if (vm.count("subtree_diameter"))
-      {
-      } //if
-
-      if (vm.count("compare_trees"))
-      {
-        std::cout << "Option: Compare trees" << std::endl;
-        /**
-         * this piece of code only test in the case of two trees, so it can be replaced
-         * to a code which does a cascade
-         */
-
-        //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-        //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-        //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-        //CODIGO DE COMPARACIÓN DE ARBOLES
-        //std::cout << "Comparing trees ..." << std::endl;
-        //aVector[0].CompareTrees(aVector[1]);
-        //std::cout << "Comparing trees ... OK" << std::endl;
-
-        std::cout << "Tree A ... " << std::endl;
-        //aVector[0].printNodeAndChildrenIds();
-        std::cout << "Tree A ... OK" << std::endl;
-
-        std::cout << "Tree B ... " << std::endl;
-        //aVector[1].printNodeAndChildrenIds();
-        std::cout << "Tree B ... OK" << std::endl;
-
-        std::cout << "Comparing trees Orkisz-Morales..." << std::endl;
-        // Vectors to save the common and uncommon nodes
-        vec_nodes commonA;
-        vec_nodes commonB;
-        vec_nodes nonCommonA;
-        vec_nodes nonCommonB;
-        std::map< unsigned int, std::vector<Node*> > map_A_to_B;
-        std::map< unsigned int, std::vector<Node*> > map_B_to_A;
-        std::vector< std::pair< std::pair<Node*, Node*>, std::pair<Node*, Node*> > > vector_pair_edges_A_to_B;
-
-        // Input parameter for comparison
-        unsigned int Q = 1; // Corresponds to the depth to select "fathers" nodes
-        unsigned int F = 1; // Correspond to the depth to select "family" nodes
-        std::cout << "Q = " << Q << std::endl;
-        std::cout << "F = " << F << std::endl;
-
-        clock_t before_compare = clock();
-        aVector[0].CompareTreesOrkiszMorales(aVector[1], Q, F, commonA, commonB, nonCommonA, nonCommonB, map_A_to_B, map_B_to_A, vector_pair_edges_A_to_B);
-        clock_t after_compare = clock();
-        double compare_time = double(after_compare - before_compare) / CLOCKS_PER_SEC;
-        std::cout << "Matching time: " << compare_time << std::endl;
-
-        // Print the common tree with common edges
-        printCommonTreeBetweenTwoTrees(aVector[0], aVector[1], vector_pair_edges_A_to_B, Q, F);
-        printMatchingResultToFile(aVector[0], aVector[1], map_A_to_B, map_B_to_A, Q, F);
-        //printSeparatedCommonTrees(aVector[0], aVector[1], vector_pair_edges_A_to_B, Q, F);
-        //reconstructAndSaveCommonTrees(aVector[0], aVector[1], vector_pair_edges_A_to_B, Q, F);
-
-        // Print all the maps that have more that two connections
-        std::cout << "Printing multiple relation A to B. Total relations: " << map_A_to_B.size() << std::endl;
-        for(std::map< unsigned int, std::vector<Node*> >::iterator it_map_A_to_B = map_A_to_B.begin(); it_map_A_to_B != map_A_to_B.end(); ++it_map_A_to_B)
-        {
-          if((*it_map_A_to_B).second.size() > 1)
-          {
-            std::cout << "Multiple relation A to B with size:" << (*it_map_A_to_B).second.size() << ", from Id:" << (*it_map_A_to_B).first << std::endl;
-            for(std::vector<Node*>::iterator it_node = (*it_map_A_to_B).second.begin(); it_node != (*it_map_A_to_B).second.end(); ++it_node)
-            {
-              std::cout << "Id: " << (*it_node)->GetId() << std::endl;
-            }
-          }
-        }
-        std::cout << "Printing multiple relation A to B ... OK" << std::endl;
-
-        std::cout << "Printing multiple relation B to A. Total relations: " << map_B_to_A.size() << std::endl;
-        for(std::map< unsigned int, std::vector<Node*> >::iterator it_map_B_to_A = map_B_to_A.begin(); it_map_B_to_A != map_B_to_A.end(); ++it_map_B_to_A)
-        {
-          if((*it_map_B_to_A).second.size() > 1)
-          {
-            std::cout << "Multiple relation B to A with size:" << (*it_map_B_to_A).second.size() << ", from Id:" << (*it_map_B_to_A).first << std::endl;
-            for(std::vector<Node*>::iterator it_node = (*it_map_B_to_A).second.begin(); it_node != (*it_map_B_to_A).second.end(); ++it_node)
-            {
-              std::cout << "Id: " << (*it_node)->GetId() << std::endl;
-            }
-          }
-        }
-        std::cout << "Printing multiple relation B to A  ... OK" << std::endl;
-
-        // Mark only the common nodes
-        aVector[0].UnMarkAll();
-        aVector[1].UnMarkAll();
-
-        // --------------------------------------
-        // ------ Get common paths marked -------
-        // --------------------------------------
-
-        /*
-          std::string path_folder = "/run/media/alfredo/Data/Pulmones/results/airwaysGraphs/comparisonResutls/probes/";
-          std::string suffix_vtk = ".vtk";
-          std::string name_tree = "TreeA_dP2P";
-          int iteration = 1;
-          for(vec_nodes::iterator it_A = commonA.begin(); it_A != commonA.end(); ++it_A)
-          {
-          aVector[0].MarkPathFromNodeToNode(aVector[0].GetRoot(), (*it_A));
-
-          std::stringstream filepath_actualIteration;
-          filepath_actualIteration << path_folder << name_tree << "__" << iteration << "_idA_" << (*it_A)->GetId() << suffix_vtk;
-
-          DrawVTKLinesFromTree(aVector[0], filepath_actualIteration.str(), true);
-          ++iteration;
-          }
-
-          iteration = 1;
-          name_tree = "TreeB_dP2P";
-          for(vec_nodes::iterator it_B = commonB.begin(); it_B != commonB.end(); ++it_B)
-          {
-          aVector[1].MarkPathFromNodeToNode(aVector[1].GetRoot(), (*it_B));
-
-          std::stringstream filepath_actualIteration;
-          filepath_actualIteration << path_folder << name_tree << "__" << iteration << "_idB_" << (*it_B)->GetId() << suffix_vtk;
-
-          DrawVTKLinesFromTree(aVector[1], filepath_actualIteration.str(), true);
-          ++iteration;
-          }
-        */
-
-        // --------------------------------------
-        // --------------------------------------
-
-        /*
-        //XXXXXXXXXXXXXXXXXXXXXXXXXXXX
-        //1. PRINT EACH NODE OF EACH TREE AND SAVE IT USING AS NAME ITS ID
-
-        // Tree A
-        for(int i = 2; i < aVector[0].GetWeight(); ++i)
-        {
-        //std::cout << "Writing idA: " << i << std::endl;
-        AirwaysTree* tree_id = aVector[0].GetSingleDetachedTreeNodeById(i);
-        //std::cout << "Got id: " << i << ", numberOfNodes: " << tree_id->GetWeight() <<  std::endl;
-        if(tree_id)
-        {
-        std::stringstream filepath_actualIteration;
-        filepath_actualIteration << aVector[0].GetResultPath() << "/" << aVector[0].GetImageName() << "_id_" << i << suffix_vtk;
-        DrawVTKLinesFromTree(*tree_id, filepath_actualIteration.str(), false);
-        delete(tree_id);
-        }
-        else
-        std::cout << "Tree NULL" << std::endl;
-        }
-
-        // Tree B
-        for(int i = 2; i < aVector[1].GetWeight(); ++i)
-        {
-        //std::cout << "Writing idA: " << i << std::endl;
-        AirwaysTree* tree_id = aVector[1].GetSingleDetachedTreeNodeById(i);
-        //std::cout << "Got id: " << i << ", numberOfNodes: " << tree_id->GetWeight() <<  std::endl;
-        if(tree_id)
-        {
-        std::stringstream filepath_actualIteration;
-        filepath_actualIteration << aVector[1].GetResultPath() << "/" << aVector[1].GetImageName() << "_id_" << i << suffix_vtk;
-        DrawVTKLinesFromTree(*tree_id, filepath_actualIteration.str(), false);
-        delete(tree_id);
-        }
-        else
-        std::cout << "Tree NULL" << std::endl;
-        }
-
-        std::cout << "Comparing trees Orkisz-Morales... OK" << std::endl;
-
-        */
-
-        //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-        //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-        //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-        /*// AMP
-          aVector[0].SubIsomorphism(aVector[1]);
-
-          std::cout << "Flag after SubIsomorphism" << std::endl;
-          std::string fullPathA = aVector[0].GetResultPath() + "/" + aVector[0].GetImageName() + "_CMP.vtk";
-          std::string fullPathB = aVector[1].GetResultPath() + "/" + aVector[1].GetImageName() + "_CMP.vtk";
-          DrawVTKLinesFromTree(aVector[0], fullPathA, true);
-          DrawVTKLinesFromTree(aVector[1], fullPathB, true);
-
-          std::cout << "Flag after write vtk" << std::endl;
-          TInputImage::Pointer imgA, imgB;
-          aVector[0].ImageReconstruction(imgA);
-          std::cout << "Flag after Reconstruction A" << std::endl;
-
-          aVector[1].ImageReconstruction(imgB);
-          std::cout << "Flag after Reconstruction B" << std::endl;
-
-          std::string fullPathA_mhd = aVector[0].GetResultPath() + "/" + aVector[0].GetImageName() + "_CMP.vtk";
-          std::string fullPathB_mhd = aVector[1].GetResultPath() + "/" + aVector[1].GetImageName() + "_CMP.vtk";
-          WriteImage(imgA, fullPathA_mhd);
-          WriteImage(imgB, fullPathB_mhd);
-
-          //AMP*/
-      }
-      po::notify(vm); // throws on error, so do after help in case
-    }
-    catch (std::exception& e)
-    {
-      std::cerr << "Unhandled Exception reached the top of main: " << e.what() << ", application will now exit" << std::endl;
-      return ERROR_UNHANDLED_EXCEPTION;
-    } // yrt
-  }
-  catch (std::exception& e)
-  {
-    std::cerr << "Unhandled Exception reached the top of main: " << e.what() << ", application will now exit" << std::endl;
-    return ERROR_UNHANDLED_EXCEPTION;
-  } // yrt
-  return( 0 );
-}
-
-// -------------------------------------------------------------------------
-void Load_cpPlugins( const std::string& plugins )
-{
-  myPlugins.LoadConfiguration( plugins );
-}
-
-// -------------------------------------------------------------------------
-void CreateResultDirectory(AirwaysTree tree)
-{
-  boost::filesystem::path dir(tree.GetResultPath());
-  if (boost::filesystem::create_directories(dir))
-  {
-    std::cout << "FolderName = " << tree.GetResultPath() << " has been created" << std::endl;
-  } //if
-  else
-    std::cout << "FolderName = " << tree.GetResultPath() << " already exists" << std::endl;
-}
-
-// -------------------------------------------------------------------------
-void DrawVTKLinesFromTree(AirwaysTree& tree, const std::string filepath, bool common)
-{
-  // Create the array of points, lines, and colors
-  vtkSmartPointer<vtkPoints> pts = vtkSmartPointer<vtkPoints>::New();
-  vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();
-  vtkSmartPointer<vtkUnsignedCharArray> colors = vtkSmartPointer<vtkUnsignedCharArray>::New();
-  colors->SetNumberOfComponents(3);
-  colors->SetName("Colors");
-
-  //vtk sphere for sources
-  //vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();
-  //Vec3 root = tree.GetRoot()->GetCoords();
-  //sphereSource->SetCenter(root[0], root[1], root[2]);
-  //sphereSource->SetRadius(1);
-  //UndirectedGraph
-
-  srand(time(NULL));
-  unsigned int id = 1;
-
-  // Create and fill the points, lines, and color vectors
-  //CalculateVTKLinesFromEdges(tree.GetRoot(), 0, id, pts, lines, colors, common);
-  pts->SetNumberOfPoints(tree.GetWeight()+1);
-  createLinesAndPointsForVTK(tree.GetRoot(), pts, lines, colors, common, true);
-
-  // Create the polydata
-  vtkSmartPointer<vtkPolyData> linesPolyData = vtkSmartPointer<vtkPolyData>::New();
-
-  // Set the points, lines, and colors
-  linesPolyData->SetPoints(pts);
-  linesPolyData->SetLines(lines);
-  linesPolyData->GetCellData()->SetScalars(colors);
-
-  // Write the file
-  vtkSmartPointer<vtkPolyDataWriter> writer = vtkSmartPointer<vtkPolyDataWriter>::New();
-  writer->SetFileName(filepath.c_str());
-
-#if VTK_MAJOR_VERSION <= 5
-  writer->SetInput(linesPolyData);
-#else
-  writer->SetInputData(linesPolyData);
-#endif
-  writer->Write();
-
-  //The following code is to test the vtk polydata and visualize it
-  /*   // Visualize
-        vtkSmartPointer<vtkPolyDataMapper> mapper =
-        vtkSmartPointer<vtkPolyDataMapper>::New();
-        #if VTK_MAJOR_VERSION <= 5
-        mapper->SetInput(linesPolyData);
-        #else
-        mapper->SetInputData(linesPolyData);
-        #endif
-        vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
-        actor->SetMapper(mapper);
-
-        //sphere
-        vtkSmartPointer<vtkPolyDataMapper> mapperSphere = vtkSmartPointer<
-        vtkPolyDataMapper>::New();
-        mapperSphere->SetInputConnection(sphereSource->GetOutputPort());
-
-        vtkSmartPointer<vtkActor> actorSphere = vtkSmartPointer<vtkActor>::New();
-        actorSphere->SetMapper(mapperSphere);
-        //end sphere
-
-        vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
-        vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<
-        vtkRenderWindow>::New();
-        renderWindow->AddRenderer(renderer);
-        vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
-        vtkSmartPointer<vtkRenderWindowInteractor>::New();
-        renderWindowInteractor->SetRenderWindow(renderWindow);
-        renderer->AddActor(actorSphere);
-        renderer->AddActor(actor);
-
-        renderWindow->Render();
-        renderWindowInteractor->Start();*/
-}
-
-// -------------------------------------------------------------------------
-#include <fpa/Base/ImageSkeleton.h>
-#include <fpa/Image/MinimumSpanningTree.h>
-#include <cpExtensions/DataStructures/ImageIndexesContainer.h>
-#include <itkImage.h>
-#include <queue>
-
-template< class TImage, class TVertex >
-Node* FAVertexToNode( TVertex vertex, TImage* image )
-{
-  //The FrontAlgorithms Vertex is an TImageType::IndexType
-  typename TImage::PointType point;
-  image->TransformIndexToPhysicalPoint( vertex, point );
-  Vec3 alfPoint(point[0],point[1],point[2]);
-  return new Node(alfPoint);
-}
-
-AirwaysTree& ConvertFilterToAirwaysTree( TInputImage* input_image, cpPlugins::Workspace& ws )
-{
-  typedef
-    fpa::Base::ImageSkeleton< fpa::Image::MinimumSpanningTree< 3 > >
-    TFASkeleton;
-  typedef TFASkeleton::TVertex    TVertexFA;
-  typedef TFASkeleton::TVertexCmp TVertexCompareFA;
-  typedef cpExtensions::DataStructures::ImageIndexesContainer< 3 > TVerticesFA;
-
-  typedef Node TVertexAirways;
-  typedef Edge TEdgeAirways;
-  typedef pair_posVox_rad TSkelePoint;
-  typedef vec_pair_posVox_rad TSkelePoints;
-  typedef std::map< TVertexFA, TVertexAirways*, TVertexCompareFA > VertexMap;
-  VertexMap vertexMap;
-  std::time_t start,end;
-  std::time(&start);
-  std::cout << "Starting conversion " << std::endl;
-
-  auto w_filter = ws.GetFilter( "eb" );
-  auto distance_map =
-    ws.GetFilter( "dmap" )->GetOutputData( "Output" )->
-    GetITK< itk::Image< float, 3 > >( );
-  auto sk =
-    w_filter->GetOutputData( "Skeleton" )->GetITK< TFASkeleton >( );
-  const auto& branches = sk->Get( );
-  auto seed0 =
-    ws.GetFilter( "seed" )->GetOutputData( "Output" )->
-    GetITK< TVerticesFA >( )->Get( )[ 0 ];
-
-  std::queue< TVertexFA > q;
-  // TODO: std::set< TVertexFA, TVertexCompareFA > marks;
-  q.push( seed0 );
-  while( !q.empty( ) )
-  {
-    auto sVertex = q.front( );
-    q.pop( );
-    auto sIt = branches.find( sVertex );
-    /* TODO
-       if( marks.find( sVertex ) != marks.end( ) )
-       {
-       std::cout << "MARK!!!!! : " << sVertex << std::endl;
-       }
-       marks.insert( sVertex );
-    */
-
-    // End node... do nothing
-    if( sIt == branches.end( ) )
-      continue;
-
-    // Create source node
-    auto srcIt = vertexMap.find( sVertex );
-    if( srcIt == vertexMap.end( ) )
-      srcIt = vertexMap.insert(
-        VertexMap::value_type(
-          sVertex, FAVertexToNode( sVertex, input_image )
-          )
-        ).first;
-
-    // TODO: std::cout << sVertex << " " << " " << sLevel << " " << seed0 << std::endl;
-    // Create destination nodes
-    for( auto eIt = sIt->second.begin( ); eIt != sIt->second.end( ); ++eIt )
-    {
-      auto dstIt = vertexMap.find( eIt->first );
-      if( dstIt == vertexMap.end( ) )
-        dstIt = vertexMap.insert(
-          VertexMap::value_type(
-            eIt->first, FAVertexToNode( eIt->first, input_image )
-            )
-          ).first;
-
-      // Connect in the acyclic graph
-      dstIt->second->SetFather( srcIt->second );
-      srcIt->second->AddChild( dstIt->second );
-
-      // Create detailed edge
-      TEdgeAirways* edge = new Edge( );
-      edge->SetSource( srcIt->second );
-      edge->SetTarget( dstIt->second );
-      auto path = eIt->second->GetVertexList( );
-      for( unsigned int pIt = 0; pIt < path->Size( ); ++pIt )
-      {
-        itk::ImageBase< 3 >::PointType pnt;
-        auto cidx = path->GetElement( pIt );
-        input_image->TransformContinuousIndexToPhysicalPoint( cidx, pnt );
-        TVertexFA idx;
-        input_image->TransformPhysicalPointToIndex( pnt, idx );
-        Vec3 coords = FAVertexToNode( idx, input_image )->GetCoords( );
-        pair_posVox_rad skPair( coords, distance_map->GetPixel( idx ) );
-        edge->AddSkeletonPairInfo( skPair );
-
-      } // rof
-
-      // Finish association
-      dstIt->second->SetEdge( edge );
-
-      // Put it as next candidate
-      q.push( eIt->first );
-
-    } // rof
-
-  } // elihw
-
-  AirwaysTree* tree =
-    new AirwaysTree( input_image, NULL, vertexMap[ seed0 ], false );
-  std::time(&end);
-  std::cout << "Finished conversion. New AlfTree has weight: "<<tree->GetWeight()<<". Takes "<<(end-start)<<" s." << std::endl;
-  return *tree;
-}
-
-// -------------------------------------------------------------------------
-AirwaysTree& CreateAirwaysTreeFromSegmentation(Vec3 seed, TInputImage* input_image, cpPlugins::Workspace& ws )
-{
-  return( ConvertFilterToAirwaysTree( input_image, ws ) );
-}
-
-// -------------------------------------------------------------------------
-vector<TreeInfo> ReadInputFile(const char* filename)
-{
-  // Variables
-  std::ifstream infile(filename);
-  std::string line;
-  std::string folderpath_allResults;
-  vector<TreeInfo> vectorInfo;
-  // Parse the file
-  bool firstLine = false;
-
-  while (std::getline(infile, line))
-  {
-    // First line contains the output folder
-    std::istringstream iss(line);
-    if (!firstLine)
-    {
-      if (!(iss >> folderpath_allResults))
-      {
-        std::cout << "no file" << std::endl;
-        return vectorInfo;
-      } //if
-      firstLine = true;
-    } //if
-    // Other lines, not the first one, contain the information for the airways to be created
-    else
-    {
-      TreeInfo treeInfo;
-      float point_trachea[3];
-      std::string filepath_airwayImage, name_pig, name_image;
-      if (!(iss >> point_trachea[0] >> point_trachea[1] >> point_trachea[2] >> filepath_airwayImage >> name_pig >> name_image))
-      {
-        std::cout << "There is no tree information in the file." << std::endl;
-        break;
-      } //if
-      else
-      {
-        // Print information
-        std::cout << "Point trachea:[" << point_trachea[0] << "," << point_trachea[1] << "," << point_trachea[2] << "]" << std::endl;
-      }
-
-      //Save info.
-
-      //Save seed info.
-      Vec3 seed(point_trachea[0], point_trachea[1], point_trachea[2]); //real coords seed
-      treeInfo.seed = seed;
-      // Create the outputs
-      treeInfo.folderpath_pigResults = folderpath_allResults + "/" + name_pig + "/";
-      treeInfo.pig_name = name_pig;
-      treeInfo.image_name = name_image;
-      // Read the image
-      /*
-        treeInfo.image = ReadImage<TInputImage>(filepath_airwayImage);
-      */
-      // Execute first pipeline's part
-      std::stringstream seed_stream;
-      seed_stream
-        << point_trachea[0] << " "
-        << point_trachea[1] << " "
-        << point_trachea[2];
-
-      treeInfo.myWorkspace->SetInterface( &myPlugins );
-      std::string err = treeInfo.myWorkspace->LoadWorkspace( "./workspace_airwaysappli.wxml" );
-      if( err != "" )
-      {
-        std::cerr << "Error: " << err << std::endl;
-        std::exit( 1 );
-
-      } // fi
-      treeInfo.myWorkspace->SetParameter( "FileNames@reader", filepath_airwayImage );
-      treeInfo.myWorkspace->SetParameter( "Text@seed", seed_stream.str( ) );
-      vectorInfo.push_back(treeInfo);
-
-    } //else
-  } //while
-  return vectorInfo;
-}
-
-// -------------------------------------------------------------------------
-void printCommonTreeBetweenTwoTrees(AirwaysTree tree_A, AirwaysTree tree_B, std::vector< std::pair< std::pair<Node*, Node*>, std::pair<Node*, Node*> > > vector_pair_edges_A_to_B, unsigned int Q, unsigned int F)
-{
-  std::cout << "printCommonTreeBetweenTwoTrees, edges:" << vector_pair_edges_A_to_B.size() << std::endl;
-
-  // Vtk points, cell array, and colors
-  vtkSmartPointer<vtkPoints> points_common = vtkSmartPointer<vtkPoints>::New();
-  vtkSmartPointer<vtkCellArray> lines_common = vtkSmartPointer<vtkCellArray>::New();
-  vtkSmartPointer<vtkUnsignedCharArray> colors_common = vtkSmartPointer<vtkUnsignedCharArray>::New();
-  colors_common->SetNumberOfComponents(3);
-  colors_common->SetName("Colors");
-
-  // Add all the points
-  // 0 - 1000 points for tree A and from 1001 for tree B
-  points_common->SetNumberOfPoints(1000 + tree_B.GetWeight() + 100);
-
-  // Add points for tree A
-  vec_nodes vector_nodesA = tree_A.GetNodes();
-  for(vec_nodes::iterator it_nodesA = vector_nodesA.begin(); it_nodesA != vector_nodesA.end(); ++it_nodesA)
-  {
-    points_common->SetPoint((*it_nodesA)->GetId(),(*it_nodesA)->GetCoords().GetVec3());
-  }
-
-  // Add points for tree B
-  vec_nodes vector_nodesB = tree_B.GetNodes();
-  for(vec_nodes::iterator it_nodesB = vector_nodesB.begin(); it_nodesB != vector_nodesB.end(); ++it_nodesB)
-  {
-    points_common->SetPoint((*it_nodesB)->GetId()+1000,(*it_nodesB)->GetCoords().GetVec3());
-  }
-
-  // Add the edges for both trees
-  std::vector< std::pair< std::pair<Node*, Node*>, std::pair<Node*, Node*> > >::iterator it_edges = vector_pair_edges_A_to_B.begin();
-  int number_pairs = 0;
-  for(; it_edges != vector_pair_edges_A_to_B.end(); ++it_edges)
-  {
-    std::cout << "Pair:" << number_pairs << std::endl;
-    std::pair<Node*, Node*> edge_A = (*it_edges).first;
-    std::pair<Node*, Node*> edge_B = (*it_edges).second;
-
-    vec_nodes path_A;
-    edge_A.first->GetPathToNode(edge_A.second, path_A);
-
-    vec_nodes path_B;
-    edge_B.first->GetPathToNode(edge_B.second, path_B);
-
-    // Set color to be used
-    int numColor = number_pairs % 6;
-    unsigned char color[3];
-    color[0] = green[0];
-    color[1] = green[1];
-    color[2] = green[2];
-    if(numColor == 1)
-    {
-      color[0] = red[0];
-      color[1] = red[1];
-      color[2] = red[2];
-    }
-    else if(numColor == 2)
-    {
-      color[0] = blue[0];
-      color[1] = blue[1];
-      color[2] = blue[2];
-    }
-    else if(numColor == 3)
-    {
-      color[0] = yellow[0];
-      color[1] = yellow[1];
-      color[2] = yellow[2];
-    }
-    else if(numColor == 4)
-    {
-      color[0] = purple[0];
-      color[1] = purple[1];
-      color[2] = purple[2];
-    }
-    else if(numColor == 5)
-    {
-      color[0] = cyan[0];
-      color[1] = cyan[1];
-      color[2] = cyan[2];
-    }
-
-    number_pairs++;
-
-    // Trace line A
-    //if(path_A.size() > 0 && number_pairs < 50)
-    if( path_A.size() )
-    {
-      vtkSmartPointer<vtkLine> line = vtkSmartPointer<vtkLine>::New();
-      lines_common->InsertNextCell(path_A.size());
-      int id_point = 0;
-      for(vec_nodes::iterator it_pathA = path_A.begin(); it_pathA != path_A.end(); ++it_pathA)
-      {
-        lines_common->InsertCellPoint((*it_pathA)->GetId());
-        //line->GetPointIds()->SetId( id_point, (*it_pathA)->GetId() );
-        //id_point++;
-      }
-      //lines_common->InsertNextCell(line);
-      colors_common->InsertNextTupleValue(color);
-    }
-    else
-    {
-      std::cout << "No path A" << std::endl;
-    }
-
-
-    // Trace line B
-    //if(path_B.size() > 0 && number_pairs < 50)
-    if( path_B.size() )
-    {
-      vtkSmartPointer<vtkLine> line = vtkSmartPointer<vtkLine>::New();
-      lines_common->InsertNextCell(path_B.size());
-      int id_point = 0;
-      for(vec_nodes::iterator it_pathB = path_B.begin(); it_pathB != path_B.end(); ++it_pathB)
-      {
-        lines_common->InsertCellPoint((*it_pathB)->GetId()+1000);
-        //line->GetPointIds()->SetId( id_point, (*it_pathB)->GetId()+1000 );
-        id_point++;
-      }
-      //lines_common->InsertNextCell(line);
-      colors_common->InsertNextTupleValue(color);
-    }
-    else
-    {
-      std::cout << "No path B" << std::endl;
-    }
-  }
-
-  // Save the polydata
-  // Create the polydata
-  vtkSmartPointer<vtkPolyData> linesPolyData = vtkSmartPointer<vtkPolyData>::New();
-
-  // Set the points, lines, and colors
-  linesPolyData->SetPoints(points_common);
-  linesPolyData->SetLines(lines_common);
-  linesPolyData->GetCellData()->SetScalars(colors_common);
-
-  // ------------------------------------------------
-  // Write the vtk file
-
-  // Create the pathfile to save
-  std::stringstream filepath_actualIteration;
-  filepath_actualIteration << tree_A.GetResultPath() << "/" << tree_A.GetImageName() << "_" << tree_B.GetImageName() << "_Q_" << Q << "_F_" << F << ".vtk";
-  std::cout << "File to save:" << filepath_actualIteration.str() << std::endl;
-
-  // Create the writer
-  vtkSmartPointer<vtkPolyDataWriter> writer = vtkSmartPointer<vtkPolyDataWriter>::New();
-  writer->SetFileName(filepath_actualIteration.str().c_str());
-
-  // Set input and write
-#if VTK_MAJOR_VERSION <= 5
-  writer->SetInput(linesPolyData);
-#else
-  writer->SetInputData(linesPolyData);
-#endif
-  writer->Write();
-
-
-
-  // ***************************************
-  // Save the links in a file
-  // *******
-
-  // Create the outputfile
-  std::stringstream filepath_evaluation;
-  filepath_evaluation << tree_A.GetResultPath() << "/" << tree_A.GetImageName() << "_" << tree_B.GetImageName() << "_Q_" << Q << "_F_" << F << ".csv";
-
-  std::ofstream file(filepath_evaluation.str().c_str());
-  if(file.is_open())
-  {
-    // Save the header
-    //file << "Node_" << tree_A.GetImageName() << " " << "Node_" << tree_B.GetImageName()<< "\n";
-    file << "TreeName "
-      "idLocalN1 idLocalN2 "
-      "Node1x Node1y Node1z "
-      "Node2x Node2y Node2z "
-      "idGlobalN1 "
-      "idMatch" << std::endl;
-
-
-    std::vector< std::pair< std::pair<Node*, Node*>, std::pair<Node*, Node*> > >::iterator it_edges = vector_pair_edges_A_to_B.begin();
-    for(; it_edges != vector_pair_edges_A_to_B.end(); ++it_edges)
-    {
-
-      std::pair<Node*, Node*> edge_A = (*it_edges).first;
-      std::pair<Node*, Node*> edge_B = (*it_edges).second;
-
-      //file << edge_A.second->GetId() << " " << edge_B.second->GetId()+1000 << "\n";
-      Vec3 coord_EndNodeA = edge_A.second->GetCoords();
-      Vec3 coord_EndNodeB = edge_B.second->GetCoords();
-      file << tree_A.GetImageName() << " " <<
-        edge_A.second->GetId() << " " << edge_B.second->GetId()+1000 << " " <<
-        coord_EndNodeA[0] << " " << coord_EndNodeA[1] << " " << coord_EndNodeA[2] << " " <<
-        coord_EndNodeB[0] << " " << coord_EndNodeB[1] << " " << coord_EndNodeB[2] << " " <<
-        tree_A.GetImageName() << coord_EndNodeA[0] << coord_EndNodeA[1] << coord_EndNodeA[2] << " " <<
-        tree_B.GetImageName() << coord_EndNodeB[0] << coord_EndNodeB[1] << coord_EndNodeB[2] <<"\n";
-
-      file << tree_B.GetImageName() << " " <<
-        edge_B.second->GetId()+1000 << " " << edge_A.second->GetId() << " " <<
-        coord_EndNodeB[0] << " " << coord_EndNodeB[1] << " " << coord_EndNodeB[2] << " " <<
-        coord_EndNodeA[0] << " " << coord_EndNodeA[1] << " " << coord_EndNodeA[2] << " " <<
-        tree_B.GetImageName() << coord_EndNodeB[0] << coord_EndNodeB[1] << coord_EndNodeB[2] << " " <<
-        tree_A.GetImageName() << coord_EndNodeA[0] << coord_EndNodeA[1] << coord_EndNodeA[2] << "\n";
-    }
-  }
-
-  file.close();
-  // *******
-  // ***************************************
-
-
-
-
-  std::cout << "printCommonTreeBetweenTwoTrees ... OK" << std::endl;
-}
-
-// -------------------------------------------------------------------------
-void printMatchingResultToFile(AirwaysTree tree_A, AirwaysTree tree_B, std::map< unsigned int, std::vector<Node*> > map_A_to_B, std::map< unsigned int, std::vector<Node*> > map_B_to_A, unsigned int Q, unsigned int F)
-{
-  std::cout << "Printing matching result ... " << std::endl;
-
-  // Variables and types
-  typedef std::map< unsigned int, vec_nodes > map_id_node;
-
-  // Create the outputfile
-  std::stringstream filepath_evaluation;
-  filepath_evaluation << tree_A.GetResultPath() << "/" << tree_A.GetImageName() << "_" << tree_B.GetImageName() << "_Q_" << Q << "_F_" << F << "_matching.csv";
-
-  std::ofstream file(filepath_evaluation.str().c_str());
-  if(file.is_open())
-  {
-    // Save the header
-    file << "TreeName idLocalN1 idLocalN2 "
-      "Node1x Node1y Node1z "
-      "Node2x Node2y Node2z "
-      "idGlobalN1 "
-      "idMatch "
-      "typeMatch_match_1_nonmatch_0 "
-      "depth "
-      "leaf"<< std::endl;
-
-    // ---------------
-    // From A to B
-
-    // Save the match or non-match for each node from A to B
-    for(int id_a=1; id_a <= tree_A.GetWeight( ); ++id_a)
-    {
-      // Get the actual node in tree A
-      Node* node_a = tree_A.GetNodeById( id_a );
-      Vec3 coords_a = node_a->GetCoords();
-      unsigned int depth_a = tree_A.GetDepthById(id_a);
-      bool leaf_a = node_a->IsLeaf();
-
-      // Check if the node was matched
-      map_id_node::iterator it_a2b = map_A_to_B.find( id_a );
-      if( it_a2b != map_A_to_B.end( ) )
-      {
-        // Get the correspoding matching nodes and print them
-        vec_nodes nodes_B = (*it_a2b).second;
-
-        vec_nodes::iterator it_nodes_b = nodes_B.begin( );
-        for( ; it_nodes_b != nodes_B.end( ); ++it_nodes_b)
-        {
-          Vec3 coords_b = (*it_nodes_b)->GetCoords();
-
-          file << tree_A.GetImageName() << " " << id_a << " " << (*it_nodes_b)->GetId()+1000 << " "
-               << coords_a[0] << " " << coords_a[1] << " " << coords_a[2] << " "
-               << coords_b[0] << " " << coords_b[1] << " " << coords_b[2] << " "
-               << tree_A.GetImageName() << coords_a[0] << coords_a[1] << coords_a[2] << " "
-               << tree_A.GetImageName() << coords_a[0] << coords_a[1] << coords_a[2] << coords_b[0] << coords_b[1] << coords_b[2] << " "
-               << "1" << " "
-               << depth_a << " "
-               << leaf_a << "\n";
-        }
-      }
-      else
-      {
-        file << tree_A.GetImageName() << " " << id_a << " " << "0" << " "
-             << coords_a[0] << " " << coords_a[1] << " " << coords_a[2] << " "
-             << "0" << " " << "0" << " " << "0" << " "
-             << tree_A.GetImageName() << coords_a[0] << coords_a[1] << coords_a[2] << " "
-             << tree_A.GetImageName() << coords_a[0] << coords_a[1] << coords_a[2] << "0" << "0" << "0" << " "
-             << "0" << " "
-             << depth_a << " "
-             << leaf_a  << "\n";
-      }
-    }
-
-    // ---------------
-    // From B to A
-
-    // Save the match or non-match for each node from A to B
-    for(int id_b=1; id_b <= tree_B.GetWeight( ); ++id_b)
-    {
-      // Get the actual node in tree B
-      Node* node_b = tree_B.GetNodeById( id_b );
-      Vec3 coords_b = node_b->GetCoords();
-      unsigned int depth_b = tree_B.GetDepthById(id_b);
-      bool leaf_b = node_b->IsLeaf();
-
-      // Check if the node was matched
-      map_id_node::iterator it_b2a = map_B_to_A.find( id_b );
-      if( it_b2a != map_B_to_A.end( ) )
-      {
-        // Get the correspoding matching nodes and print them
-        vec_nodes nodes_A = (*it_b2a).second;
-
-        vec_nodes::iterator it_nodes_a = nodes_A.begin( );
-        for( ; it_nodes_a != nodes_A.end( ); ++it_nodes_a)
-        {
-          Vec3 coords_a = (*it_nodes_a)->GetCoords();
-
-          file << tree_B.GetImageName() << " " << id_b+1000 << " " << (*it_nodes_a)->GetId() << " "
-               << coords_b[0] << " " << coords_b[1] << " " << coords_b[2] << " "
-               << coords_a[0] << " " << coords_a[1] << " " << coords_a[2] << " "
-               << tree_B.GetImageName() << coords_b[0] << coords_b[1] << coords_b[2] << " "
-               << tree_B.GetImageName() << coords_b[0] << coords_b[1] << coords_b[2] << coords_a[0] << coords_a[1] << coords_a[2] << " "
-               << "1" << " "
-               << depth_b << " "
-               << leaf_b  << "\n";
-        }
-      }
-      else
-      {
-        file << tree_B.GetImageName() << " " << id_b+1000 << " " << "0" << " "
-             << coords_b[0] << " " << coords_b[1] << " " << coords_b[2] << " "
-             << "0" << " " << "0" << " " << "0" << " "
-             << tree_B.GetImageName() << coords_b[0] << coords_b[1] << coords_b[2] << " "
-             << tree_B.GetImageName() << coords_b[0] << coords_b[1] << coords_b[2] << "0" << "0" << "0" << " "
-             << "0" << " "
-             << depth_b << " "
-             << leaf_b  << "\n";
-      }//esle
-    }//rof
-  }//fi
-
-  file.close(); // Close the file
-
-  std::cout << "Printing matching result DONE" << std::endl;
-}
-
-// -------------------------------------------------------------------------
-void createLinesAndPointsForVTK(const Node* node, vtkSmartPointer<vtkPoints>& pts,vtkSmartPointer<vtkCellArray>& lines,        vtkSmartPointer<vtkUnsignedCharArray>& colors, bool common, bool isRoot)
-{
-  // Insert the actual point/node
-  //vtkIdType id_father = idNonRoot;
-  //if(isRoot)
-  //id_father = pts->InsertNextPoint(node->GetCoords().GetVec3());
-  vtkIdType id_father = node->GetId();
-  if(isRoot)
-    pts->SetPoint(id_father,node->GetCoords().GetVec3());
-
-  // Iterate over the children
-  const vec_nodes children = node->GetChildren();
-  for (vec_nodes::const_iterator it_child = children.begin(); it_child != children.end(); ++it_child)
-  {
-    if (!(*it_child)->IsMarked() && common)
-      continue;
-
-    //vtkIdType id_son = pts->InsertNextPoint((*it_child)->GetCoords().GetVec3());
-    vtkIdType id_son = (*it_child)->GetId();
-    pts->SetPoint(id_son,(*it_child)->GetCoords().GetVec3());
-
-    // Set color to be used
-    int numColor = (*it_child)->GetLevel() % 4;
-    if(numColor == 0)
-      colors->InsertNextTupleValue(green);
-    else if(numColor == 1)
-      colors->InsertNextTupleValue(red);
-    else if(numColor == 2)
-      colors->InsertNextTupleValue(red);
-    else
-      colors->InsertNextTupleValue(red);
-
-    // Add the line
-    vtkSmartPointer<vtkLine> line = vtkSmartPointer<vtkLine>::New();
-    line->GetPointIds()->SetId(0, id_father);
-    line->GetPointIds()->SetId(1, id_son);
-    lines->InsertNextCell(line);
-
-    createLinesAndPointsForVTK(*it_child, pts, lines, colors, common, false);
-  } //for
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/CMakeLists.txt b/appli/examples/CMakeLists.txt
deleted file mode 100644 (file)
index b2d1450..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-SET(
-  SIMPLE_EXAMPLES
-  example_Image_Dijkstra_EndPointDetection_WithoutVTK
-  )
-FOREACH(EX ${SIMPLE_EXAMPLES})
-  ADD_EXECUTABLE(${EX} ${EX}.cxx)
-  TARGET_LINK_LIBRARIES(${EX} FrontAlgorithms)
-ENDFOREACH(EX)
-
-SET(
-  SIMPLE_VTK_EXAMPLES
-  example_Image_RegionGrow_AllPixels
-  example_Image_RegionGrow_AllRGBPixels
-  example_Image_RegionGrow_ConnectedPixels
-  example_Image_RegionGrow_ConnectedRGBPixels
-  example_Image_Dijkstra_AbsoluteDifferenceCost
-  example_Image_Dijkstra_EndPointDetection
-  #  example_Image_RegionGrow_GaussianModelEstimation
-  #  example_Image_IncrementalRegionGrow_Thresholds
-  #  example_Image_Dijkstra_CostFromInput
-  #  example_Image_Dijkstra_CostFromRGBInput
-  #  example_Image_Dijkstra_DanielssonCost
-  #  example_Image_Dijkstra_DanielssonCost_TwoSeedsPath
-  #  example_Image_Dijkstra_LabelSkeleton
-  #  example_ShowSkeleton
-  #  example_CircleOfWillis
-  )
-FOREACH(EX ${SIMPLE_VTK_EXAMPLES})
-  ADD_EXECUTABLE(${EX} ${EX}.cxx)
-  TARGET_LINK_LIBRARIES(
-    ${EX} FrontAlgorithms
-    )
-ENDFOREACH(EX)
-
-## eof - $RCSfile$
diff --git a/appli/examples/example_BinaryDistanceMap.cxx b/appli/examples/example_BinaryDistanceMap.cxx
deleted file mode 100644 (file)
index 7628ebf..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <ctime>
-#include <iostream>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageFileReader.h>
-#include <itkImageFileWriter.h>
-#include <itkInvertIntensityImageFilter.h>
-#include <itkMinimumMaximumImageCalculator.h>
-#include <itkDanielssonDistanceMapImageFilter.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 3;
-typedef unsigned char                        TPixel;
-typedef float                                TScalar;
-typedef itk::Image< TPixel, Dim >            TImage;
-typedef itk::Image< TScalar, Dim >           TScalarImage;
-typedef itk::ImageFileReader< TImage >       TImageReader;
-typedef itk::ImageFileWriter< TScalarImage > TImageWriter;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 3 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image output_image"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  std::string output_image_fn = argv[ 2 ];
-
-  // Read image
-  TImageReader::Pointer input_image_reader = TImageReader::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr << "Error caught: " << err << std::endl;
-    return( 1 );
-
-  } // yrt
-
-  // Invert intensity
-  typedef itk::MinimumMaximumImageCalculator< TImage > TMinMax;
-  TMinMax::Pointer minmax = TMinMax::New( );
-  minmax->SetImage( input_image_reader->GetOutput( ) );
-  minmax->Compute( );
-
-  typedef itk::InvertIntensityImageFilter< TImage > TInvert;
-  TInvert::Pointer invert = TInvert::New( );
-  invert->SetInput( input_image_reader->GetOutput( ) );
-  invert->SetMaximum( minmax->GetMaximum( ) );
-
-  typedef itk::DanielssonDistanceMapImageFilter< TImage, TScalarImage > TDistance;
-  TDistance::Pointer distance = TDistance::New( );
-  distance->SetInput( invert->GetOutput( ) );
-  distance->InputIsBinaryOn( );
-  distance->SquaredDistanceOn( );
-  std::clock_t start = std::clock( );
-  distance->Update( );
-  std::clock_t end = std::clock( );
-  double seconds = double( end - start ) / double( CLOCKS_PER_SEC );
-  std::cout << "Distance map time = " << seconds << std::endl;
-
-  TImageWriter::Pointer writer = TImageWriter::New( );
-  writer->SetInput( distance->GetOutput( ) );
-  writer->SetFileName( output_image_fn );
-  writer->Update( );
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_CircleOfWillis.cxx b/appli/examples/example_CircleOfWillis.cxx
deleted file mode 100644 (file)
index e00ca3d..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-#include <iostream>
-#include <fstream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
-#include <itkImageFileReader.h>
-
-#include <vtkCellArray.h>
-#include <vtkFloatArray.h>
-#include <vtkPointData.h>
-#include <vtkPoints.h>
-#include <vtkPolyData.h>
-#include <vtkSmartPointer.h>
-
-#include <fpa/VTK/ImageMPR.h>
-
-// -------------------------------------------------------------------------
-const   unsigned int Dimension = 3;
-typedef short        TPixel;
-
-typedef itk::Image< TPixel, Dimension > TImage;
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 3 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image input_seeds"
-      << std::endl;
-      return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  std::string input_seeds_fn = argv[ 2 ];
-
-  // Read image
-  itk::ImageFileReader< TImage >::Pointer input_image_reader =
-    itk::ImageFileReader< TImage >::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr << "Error caugth: " << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TImage::ConstPointer input_image = input_image_reader->GetOutput( );
-  itk::ImageToVTKImageFilter< TImage >::Pointer input_image_vtk =
-    itk::ImageToVTKImageFilter< TImage >::New( );
-  input_image_vtk->SetInput( input_image );
-  input_image_vtk->Update( );
-
-  // Read seeds
-  std::ifstream input_seeds_fs( input_seeds_fn.c_str( ) );
-  if( !input_seeds_fs )
-  {
-    std::cerr
-      << "Error opening file \"" << input_seeds_fn << "\"" << std::endl;
-    return( 1 );
-
-  } // fi
-
-  // Read seed points
-  std::string str_val;
-  unsigned int number_of_points;
-  input_seeds_fs >> str_val >> number_of_points;
-  input_seeds_fs >> str_val; // X
-  input_seeds_fs >> str_val; // Y
-  input_seeds_fs >> str_val; // Z
-  input_seeds_fs >> str_val; // value
-  input_seeds_fs >> str_val; // Label
-
-  vtkSmartPointer< vtkPoints > input_seeds_points =
-    vtkSmartPointer< vtkPoints >::New( );
-  vtkSmartPointer< vtkCellArray > input_seeds_cells =
-    vtkSmartPointer< vtkCellArray >::New( );
-  vtkSmartPointer< vtkFloatArray > input_seeds_ids =
-    vtkSmartPointer< vtkFloatArray >::New( );
-
-  input_seeds_ids->SetNumberOfComponents( 1 );
-  input_seeds_ids->SetNumberOfTuples( number_of_points );
-
-  double min_value = std::numeric_limits< double >::max( );
-  double max_value = double( 0 );
-  for( unsigned int i = 0; i < number_of_points; ++i )
-  {
-    unsigned int x, y, z;
-    double value;
-    input_seeds_fs >> x >> y >> z >> value >> str_val;
-
-    min_value = ( value < min_value )? value: min_value;
-    max_value = ( value > max_value )? value: max_value;
-
-    TImage::IndexType idx;
-    idx[ 0 ] = x;
-    idx[ 1 ] = y;
-    idx[ 2 ] = z;
-    TImage::PointType pnt;
-    input_image->TransformIndexToPhysicalPoint( idx, pnt );
-
-    input_seeds_points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
-    input_seeds_cells->InsertNextCell( 1 );
-    input_seeds_cells->InsertCellPoint( i );
-    input_seeds_ids->SetTuple1(
-      i, double( i ) / double( number_of_points - 1 )
-      );
-
-
-  } // rof
-  input_seeds_fs.close( );
-
-  vtkSmartPointer< vtkPolyData > input_seeds =
-    vtkSmartPointer< vtkPolyData >::New( );
-  input_seeds->SetPoints( input_seeds_points );
-  input_seeds->SetVerts( input_seeds_cells );
-  input_seeds->GetPointData( )->SetScalars( input_seeds_ids );
-
-  // Show input image and let some interaction
-  fpa::VTK::ImageMPR view;
-  view.SetBackground( 0.3, 0.2, 0.8 );
-  view.SetSize( 600, 600 );
-  view.SetImage( input_image_vtk->GetOutput( ) );
-  view.SetWindowLevel(
-    max_value - min_value,
-    ( min_value + max_value ) / double( 2 )
-    );
-  view.AddPolyData( input_seeds );
-  view.Render( );
-  view.Start( );
-
-  return( 0 );
-}
-// eof - $RCSfile$
diff --git a/appli/examples/example_HausdorffDistance.cxx b/appli/examples/example_HausdorffDistance.cxx
deleted file mode 100644 (file)
index ebcede0..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <ctime>
-#include <iostream>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageFileReader.h>
-#include <itkImageFileWriter.h>
-#include <itkHausdorffDistanceImageFilter.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 3;
-typedef unsigned short                 TPixel;
-typedef float                          TScalar;
-typedef itk::Image< TPixel, Dim >      TImage;
-typedef itk::ImageFileReader< TImage > TImageReader;
-typedef itk::HausdorffDistanceImageFilter< TImage, TImage > TDistance;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 3 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " first_image second_image"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string first_image_fn = argv[ 1 ];
-  std::string second_image_fn = argv[ 2 ];
-
-  // Read image
-  TImageReader::Pointer first_image_reader = TImageReader::New( );
-  TImageReader::Pointer second_image_reader = TImageReader::New( );
-  first_image_reader->SetFileName( first_image_fn );
-  second_image_reader->SetFileName( second_image_fn );
-  try
-  {
-    first_image_reader->Update( );
-    second_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr << "Error caught: " << err << std::endl;
-    return( 1 );
-
-  } // yrt
-
-  TDistance::Pointer distance = TDistance::New( );
-  distance->SetInput1( first_image_reader->GetOutput( ) );
-  distance->SetInput2( second_image_reader->GetOutput( ) );
-  distance->Update( );
-  std::cout << "Hausdorff distance = " << distance->GetHausdorffDistance( ) << std::endl;
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_ImageAlgorithmDijkstra_00.cxx b/appli/examples/example_ImageAlgorithmDijkstra_00.cxx
deleted file mode 100644 (file)
index 86cff08..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <iostream>
-#include <itkImage.h>
-
-#include <fpa/Image/Dijkstra.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TPixel;
-typedef double        TCost;
-typedef itk::Image< TPixel, Dim > TImage;
-
-typedef fpa::Image::Dijkstra< TImage, TCost > TFrontAlgorithm;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  // Create a dummy image
-  TImage::SizeType imageSize;
-  imageSize.Fill( 100 );
-
-  TImage::SpacingType imageSpacing;
-  imageSpacing.Fill( 1 );
-
-  TImage::Pointer image = TImage::New( );
-  image->SetRegions( imageSize );
-  image->SetSpacing( imageSpacing );
-  image->Allocate( );
-  image->FillBuffer( TPixel( 1 ) );
-
-  // Seed
-  TImage::IndexType seed;
-  seed.Fill( 50 );
-
-  // Configure algorithm
-  TFrontAlgorithm::Pointer algorithm = TFrontAlgorithm::New( );
-  algorithm->AddSeed( seed, TCost( 0 ) );
-  algorithm->SetInput( image );
-  algorithm->SetNeighborhoodOrder( 1 );
-  algorithm->Update( );
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_ImageAlgorithmDijkstra_01.cxx b/appli/examples/example_ImageAlgorithmDijkstra_01.cxx
deleted file mode 100644 (file)
index 6bcf5b3..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-#include <cmath>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageFileReader.h>
-#include <itkImageToVTKImageFilter.h>
-#include <itkMinimumMaximumImageCalculator.h>
-#include <itkInvertIntensityImageFilter.h>
-#include <itkDanielssonDistanceMapImageFilter.h>
-#include <itkUnaryFunctorImageFilter.h>
-
-#include <vtkImageActor.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSeedRepresentation.h>
-#include <vtkSeedWidget.h>
-#include <vtkSmartPointer.h>
-
-#include <fpa/Image/Dijkstra.h>
-#include <fpa/VTK/Image2DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TPixel;
-typedef double TScalar;
-typedef itk::Image< TPixel, Dim >  TImage;
-typedef itk::Image< TScalar, Dim >  TScalarImage;
-typedef itk::ImageToVTKImageFilter< TImage > TVTKImage;
-
-typedef itk::ImageFileReader< TImage > TImageReader;
-typedef fpa::Image::Dijkstra< TScalarImage, TScalar > TFrontAlgorithm;
-
-typedef
-fpa::VTK::Image2DObserver< TFrontAlgorithm, vtkRenderWindow >
-TObserver;
-
-// -------------------------------------------------------------------------
-class InvertPixelFunctor
-{
-public:
-  InvertPixelFunctor( )
-    { }
-  virtual ~InvertPixelFunctor( )
-    { }
-  bool operator!=( const InvertPixelFunctor& other ) const
-    { return( false ); }
-  bool operator==( const InvertPixelFunctor& other ) const
-    { return( !( *this != other ) ); }
-  inline TScalar operator()( const TScalar& A ) const
-    {
-      return( TScalar( 1 ) / std::pow( TScalar( 1 ) + A, TScalar( 4 ) ) );
-    }
-};
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 3 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image neighborhood_order [stop_at_one_front]"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  unsigned int neighborhood_order = std::atoi( argv[ 2 ] );
-  bool stop_at_one_front = false;
-  if( 3 < argc )
-    stop_at_one_front = ( std::atoi( argv[ 3 ] ) == 1 );
-
-  // Read image
-  TImageReader::Pointer input_image_reader = TImageReader::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr << "Error caught: " << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TImage::ConstPointer input_image = input_image_reader->GetOutput( );
-
-  TVTKImage::Pointer vtk_image = TVTKImage::New( );
-  vtk_image->SetInput( input_image );
-  vtk_image->Update( );
-
-  // VTK visualization
-  vtkSmartPointer< vtkImageActor > actor =
-    vtkSmartPointer< vtkImageActor >::New( );
-  actor->SetInputData( vtk_image->GetOutput( ) );
-
-  vtkSmartPointer< vtkRenderer > renderer =
-    vtkSmartPointer< vtkRenderer >::New( );
-  renderer->SetBackground( 0.1, 0.2, 0.7 );
-  renderer->AddActor( actor );
-  vtkSmartPointer< vtkRenderWindow > window =
-    vtkSmartPointer< vtkRenderWindow >::New( );
-  window->SetSize( 800, 800 );
-  window->AddRenderer( renderer );
-
-  // VTK interaction
-  vtkSmartPointer< vtkInteractorStyleImage > imageStyle =
-    vtkSmartPointer< vtkInteractorStyleImage >::New( );
-  vtkSmartPointer< vtkRenderWindowInteractor > interactor =
-    vtkSmartPointer< vtkRenderWindowInteractor >::New( );
-  interactor->SetInteractorStyle( imageStyle );
-  window->SetInteractor( interactor );
-  window->Render( );
-
-  // Create the widget and its representation
-  vtkSmartPointer< vtkPointHandleRepresentation3D > handle =
-    vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
-  handle->GetProperty( )->SetColor( 1, 0, 0 );
-  vtkSmartPointer< vtkSeedRepresentation > rep =
-    vtkSmartPointer< vtkSeedRepresentation >::New( );
-  rep->SetHandleRepresentation( handle );
-
-  vtkSmartPointer< vtkSeedWidget > widget =
-    vtkSmartPointer< vtkSeedWidget >::New( );
-  widget->SetInteractor( interactor );
-  widget->SetRepresentation( rep );
-
-  // Let some interaction
-  interactor->Initialize( );
-  window->Render( );
-  widget->On( );
-  interactor->Start( );
-
-  // Compute cost map
-  typedef itk::MinimumMaximumImageCalculator< TImage > TMinMax;
-  typedef itk::InvertIntensityImageFilter< TImage > TInvert;
-  typedef itk::DanielssonDistanceMapImageFilter< TImage, TScalarImage > TDanielsson;
-  typedef itk::UnaryFunctorImageFilter< TScalarImage, TScalarImage, InvertPixelFunctor > TInvertFunctor;
-
-  TMinMax::Pointer input_image_min_max = TMinMax::New( );
-  input_image_min_max->SetImage( input_image );
-  input_image_min_max->Compute( );
-
-  TInvert::Pointer invert = TInvert::New( );
-  invert->SetInput( input_image );
-  invert->SetMaximum( input_image_min_max->GetMaximum( ) );
-
-  TDanielsson::Pointer danielsson = TDanielsson::New( );
-  danielsson->SetInput( invert->GetOutput( ) );
-  danielsson->InputIsBinaryOn( );
-  danielsson->SquaredDistanceOff( );
-  danielsson->UseImageSpacingOn( );
-
-  TInvertFunctor::Pointer invert_pixels = TInvertFunctor::New( );
-  invert_pixels->SetInput( danielsson->GetOutput( ) );
-  invert_pixels->Update( );
-
-  // Configure observer
-  TObserver::Pointer obs = TObserver::New( );
-  obs->SetImage( invert_pixels->GetOutput( ), window );
-
-  // Configure algorithm
-  TFrontAlgorithm::Pointer algorithm = TFrontAlgorithm::New( );
-  for( unsigned int s = 0; s < rep->GetNumberOfSeeds( ); s++ )
-  {
-    double pos[ 3 ];
-    rep->GetSeedWorldPosition( s, pos );
-
-    TImage::PointType pnt;
-    pnt[ 0 ] = pos[ 0 ];
-    pnt[ 1 ] = pos[ 1 ];
-
-    TImage::IndexType idx;
-    if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-    {
-      algorithm->AddSeed( idx, 0 );
-      std::cout << " Seed --> " << idx << std::endl;
-
-    } // fi
-
-  } // rof
-  algorithm->AddObserver( itk::AnyEvent( ), obs );
-  algorithm->ThrowEventsOn( );
-  algorithm->SetInput( invert_pixels->GetOutput( ) );
-  algorithm->SetNeighborhoodOrder( neighborhood_order );
-  algorithm->SetStopAtOneFront( stop_at_one_front );
-  algorithm->Update( );
-
-  // One last interaction
-  window->Render( );
-  interactor->Start( );
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_ImageAlgorithmDijkstra_02.cxx b/appli/examples/example_ImageAlgorithmDijkstra_02.cxx
deleted file mode 100644 (file)
index 728313e..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageFileReader.h>
-#include <itkRGBAPixel.h>
-#include <itkSignedDanielssonDistanceMapImageFilter.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <vtkImageActor.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSeedRepresentation.h>
-#include <vtkSeedWidget.h>
-#include <vtkSmartPointer.h>
-
-#include <fpa/Image/Dijkstra.h>
-#include <fpa/Base/Functors/InvertCostFunction.h>
-#include <fpa/Base/TreeExtractor.h>
-#include <fpa/VTK/Image2DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TPixel;
-typedef itk::RGBAPixel< TPixel > TRGBAPixel;
-typedef double TScalar;
-typedef itk::Image< TPixel, Dim >  TImage;
-typedef itk::Image< TScalar, Dim > TDistanceMap;
-typedef itk::Image< TRGBAPixel, Dim > TRGBAImage;
-typedef itk::ImageToVTKImageFilter< TImage > TVTKImage;
-typedef itk::ImageToVTKImageFilter< TRGBAImage > TVTKRGBAImage;
-
-typedef itk::ImageFileReader< TImage > TImageReader;
-typedef
-itk::SignedDanielssonDistanceMapImageFilter< TImage, TDistanceMap >
-TDistanceFilter;
-
-typedef fpa::Image::Dijkstra< TDistanceMap, TScalar > TFrontAlgorithm;
-typedef fpa::Base::TreeExtractor< TFrontAlgorithm >   TExtractor;
-typedef fpa::Base::Functors::InvertCostFunction< TScalar > TScalarFunction;
-
-typedef
-fpa::VTK::Image2DObserver< TExtractor, vtkRenderWindow >
-TObserver;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 2 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image [stop_at_one_front]" << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  bool stop_at_one_front = false;
-  if( 2 < argc )
-    stop_at_one_front = ( std::atoi( argv[ 2 ] ) == 1 );
-
-  // Read image
-  TImageReader::Pointer input_image_reader = TImageReader::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr << "Error caught: " << err << std::endl;
-    return( 1 );
-
-  } // yrt
-    
-  TDistanceFilter::Pointer dist_filter = TDistanceFilter::New( );
-  dist_filter->SetInput( input_image_reader->GetOutput( ) );
-  dist_filter->InsideIsPositiveOn( );
-  dist_filter->SquaredDistanceOff( );
-  dist_filter->Update( );
-
-  TImage::ConstPointer input_image = input_image_reader->GetOutput( );
-
-  TVTKImage::Pointer vtk_image = TVTKImage::New( );
-  vtk_image->SetInput( input_image );
-  vtk_image->Update( );
-
-  // VTK visualization
-  vtkSmartPointer< vtkImageActor > actor =
-    vtkSmartPointer< vtkImageActor >::New( );
-  actor->SetInputData( vtk_image->GetOutput( ) );
-
-  vtkSmartPointer< vtkRenderer > renderer =
-    vtkSmartPointer< vtkRenderer >::New( );
-  renderer->SetBackground( 0.1, 0.2, 0.7 );
-  renderer->AddActor( actor );
-  vtkSmartPointer< vtkRenderWindow > window =
-    vtkSmartPointer< vtkRenderWindow >::New( );
-  window->SetSize( 800, 800 );
-  window->AddRenderer( renderer );
-
-  // VTK interaction
-  vtkSmartPointer< vtkInteractorStyleImage > imageStyle =
-    vtkSmartPointer< vtkInteractorStyleImage >::New( );
-  vtkSmartPointer< vtkRenderWindowInteractor > interactor =
-    vtkSmartPointer< vtkRenderWindowInteractor >::New( );
-  interactor->SetInteractorStyle( imageStyle );
-  window->SetInteractor( interactor );
-  window->Render( );
-
-  // Create the widget and its representation
-  vtkSmartPointer< vtkPointHandleRepresentation3D > handle =
-    vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
-  handle->GetProperty( )->SetColor( 1, 0, 0 );
-  vtkSmartPointer< vtkSeedRepresentation > rep =
-    vtkSmartPointer< vtkSeedRepresentation >::New( );
-  rep->SetHandleRepresentation( handle );
-
-  vtkSmartPointer< vtkSeedWidget > widget =
-    vtkSmartPointer< vtkSeedWidget >::New( );
-  widget->SetInteractor( interactor );
-  widget->SetRepresentation( rep );
-
-  // Let some interaction
-  interactor->Initialize( );
-  window->Render( );
-  widget->On( );
-  interactor->Start( );
-
-  // Configure observer
-  TObserver::Pointer obs = TObserver::New( );
-  obs->SetImage( dist_filter->GetOutput( ), window );
-
-  // Configure membership function
-  TScalarFunction::Pointer cost_function = TScalarFunction::New( );
-
-  // Configure algorithm
-  TExtractor::Pointer algorithm = TExtractor::New( );
-  for( unsigned int s = 0; s < rep->GetNumberOfSeeds( ); s++ )
-  {
-    double pos[ 3 ];
-    rep->GetSeedWorldPosition( s, pos );
-
-    TImage::PointType pnt;
-    pnt[ 0 ] = pos[ 0 ];
-    pnt[ 1 ] = pos[ 1 ];
-
-    TImage::IndexType idx;
-    if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-    {
-      algorithm->AddSeed( idx, 0 );
-      if( s == 0 )
-        algorithm->SetRoot( idx );
-      else
-        algorithm->AddLeaf( idx );
-
-    } // fi
-
-  } // rof
-  algorithm->AddObserver( itk::AnyEvent( ), obs );
-  algorithm->ThrowEventsOn( );
-  algorithm->SetInput( dist_filter->GetOutput( ) );
-  algorithm->SetNeighborhoodOrder( 1 );
-  algorithm->SetStopAtOneFront( stop_at_one_front );
-  algorithm->SetCostConversion( cost_function );
-  algorithm->Update( );
-
-  // Create image with tree
-  TPixel transparent_color[] = { 0, 0, 0, 0 };
-  TPixel solid_color[] = { 255, 255, 0, 255 };
-  TRGBAImage::Pointer tree_image = TRGBAImage::New( );
-  tree_image->CopyInformation( input_image );
-  tree_image->SetRequestedRegionToLargestPossibleRegion( );
-  tree_image->SetBufferedRegion( tree_image->GetRequestedRegion( ) );
-  tree_image->Allocate( );
-  tree_image->FillBuffer( TRGBAPixel( transparent_color ) );
-
-  const TExtractor::TTree& tree = algorithm->GetTree( );
-  TExtractor::TTree::const_iterator tIt = tree.begin( );
-  for( ; tIt != tree.end( ); ++tIt )
-    tree_image->SetPixel( tIt->first, TRGBAPixel( solid_color ) );
-
-  TVTKRGBAImage::Pointer vtk_tree_image = TVTKRGBAImage::New( );
-  vtk_tree_image->SetInput( tree_image );
-  vtk_tree_image->Update( );
-
-  vtkSmartPointer< vtkImageActor > tree_actor =
-    vtkSmartPointer< vtkImageActor >::New( );
-  tree_actor->SetInputData( vtk_tree_image->GetOutput( ) );
-
-  renderer->AddActor( tree_actor );
-  window->Render( );
-
-  // One last interaction
-  interactor->Start( );
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_ImageAlgorithmDijkstra_03.cxx b/appli/examples/example_ImageAlgorithmDijkstra_03.cxx
deleted file mode 100644 (file)
index 9f529f1..0000000
+++ /dev/null
@@ -1,304 +0,0 @@
-#include <cmath>
-#include <ctime>
-#include <deque>
-#include <fstream>
-#include <iostream>
-#include <iomanip>
-#include <limits>
-#include <map>
-#include <string>
-
-#include <itkConstNeighborhoodIterator.h>
-#include <itkNeighborhoodIterator.h>
-#include <itkDanielssonDistanceMapImageFilter.h>
-#include <itkImage.h>
-#include <itkImageFileReader.h>
-#include <itkImageFileWriter.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <itkMinimumMaximumImageCalculator.h>
-#include <itkInvertIntensityImageFilter.h>
-
-#include <vtkPoints.h>
-#include <vtkCellArray.h>
-#include <vtkFloatArray.h>
-#include <vtkPolyData.h>
-#include <vtkPolyDataWriter.h>
-#include <vtkSmartPointer.h>
-#include <vtkImageMarchingCubes.h>
-#include <vtkLookupTable.h>
-
-#include <fpa/Image/DijkstraWithSphereBacktracking.h>
-#include <fpa/VTK/ImageMPR.h>
-#include <fpa/VTK/Image3DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 3;
-typedef float                                TPixel;
-typedef float                                TScalar;
-typedef itk::Image< TPixel, Dim >            TImage;
-typedef itk::ImageToVTKImageFilter< TImage > TVTKImage;
-
-typedef itk::ImageFileReader< TImage >          TImageReader;
-typedef itk::ImageFileWriter< TImage >    TImageWriter;
-typedef fpa::Image::DijkstraWithSphereBacktracking< TImage, TScalar > TDijkstra;
-
-typedef fpa::VTK::ImageMPR TMPR;
-typedef fpa::VTK::Image3DObserver< TDijkstra, vtkRenderWindow > TDijkstraObs;
-
-struct TBranch
-{
-  double Length;
-  TImage::PointType::VectorType V1;
-  TImage::PointType::VectorType V2;
-
-  bool operator<( const TBranch& other ) const
-    {
-      return( other.Length < this->Length );
-    }
-};
-typedef std::multiset< TBranch > TBranches;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 8 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image x y z output_image output_imagej output_vtk"
-      << " visual_debug"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  TImage::PointType seed_pnt;
-  seed_pnt[ 0 ] = std::atof( argv[ 2 ] );
-  seed_pnt[ 1 ] = std::atof( argv[ 3 ] );
-  seed_pnt[ 2 ] = std::atof( argv[ 4 ] );
-  std::string output_image_fn = argv[ 5 ];
-  std::string output_imagej_fn = argv[ 6 ];
-  std::string output_vtk_fn = argv[ 7 ];
-  bool visual_debug = false;
-  if( argc > 8 )
-    visual_debug = ( std::atoi( argv[ 8 ] ) == 1 );
-
-  // Read image
-  TImageReader::Pointer input_image_reader = TImageReader::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr << "Error caught: " << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TImage::ConstPointer input_image = input_image_reader->GetOutput( );
-
-  // Show image
-  TVTKImage::Pointer vtk_image = TVTKImage::New( );
-  vtk_image->SetInput( input_image );
-  vtk_image->Update( );
-
-  TMPR view;
-  view.SetBackground( 0.3, 0.2, 0.8 );
-  view.SetSize( 800, 800 );
-  view.SetImage( vtk_image->GetOutput( ) );
-
-  /* TODO
-     vtkSmartPointer< vtkImageMarchingCubes > mc =
-     vtkSmartPointer< vtkImageMarchingCubes >::New( );
-     mc->SetInputData( vtk_image->GetOutput( ) );
-     mc->SetValue( 0, 1e-2 );
-     mc->Update( );
-     view.AddPolyData( mc->GetOutput( ), 1, 1, 1, 0.4 );
-  */
-
-  // Allow some interaction
-  view.Render( );
-  if( visual_debug )
-    view.Start( );
-
-  TImage::IndexType seed_idx;
-  input_image->TransformPhysicalPointToIndex( seed_pnt, seed_idx );
-  /* TODO
-     std::cout << seed_idx << " " << seed_pnt << std::endl;
-     seed_idx[ 0 ] = 256;
-     seed_idx[ 1 ] = 313;
-     seed_idx[ 2 ] = 381;
-  */
-
-  // Extract paths
-  TDijkstra::Pointer paths = TDijkstra::New( );
-  paths->AddSeed( seed_idx, TScalar( 0 ) );
-  paths->SetInput( input_image );
-  paths->SetNeighborhoodOrder( 2 );
-
-  if( visual_debug )
-  {
-    // Configure observer
-    TDijkstraObs::Pointer obs = TDijkstraObs::New( );
-    obs->SetRenderWindow( view.GetWindow( ) );
-    paths->AddObserver( itk::AnyEvent( ), obs );
-    paths->ThrowEventsOn( );
-  }
-  else
-    paths->ThrowEventsOff( );
-  std::clock_t start = std::clock( );
-  paths->Update( );
-  std::clock_t end = std::clock( );
-  double seconds = double( end - start ) / double( CLOCKS_PER_SEC );
-  std::cout << "Paths extraction time = " << seconds << std::endl;
-
-  // Create polydata
-  vtkSmartPointer< vtkPoints > points =
-    vtkSmartPointer< vtkPoints >::New( );
-  vtkSmartPointer< vtkCellArray > cells =
-    vtkSmartPointer< vtkCellArray >::New( );
-  vtkSmartPointer< vtkFloatArray > scalars =
-    vtkSmartPointer< vtkFloatArray >::New( );
-
-  TDijkstra::TMarkImage::Pointer new_marks = TDijkstra::TMarkImage::New( );
-  new_marks->SetLargestPossibleRegion( input_image->GetLargestPossibleRegion( ) );
-  new_marks->SetRequestedRegion( input_image->GetRequestedRegion( ) );
-  new_marks->SetBufferedRegion( input_image->GetBufferedRegion( ) );
-  new_marks->SetOrigin( input_image->GetOrigin( ) );
-  new_marks->SetSpacing( input_image->GetSpacing( ) );
-  new_marks->SetDirection( input_image->GetDirection( ) );
-  new_marks->Allocate( );
-  new_marks->FillBuffer( 0 );
-
-  const TDijkstra::TMarkImage* marks = paths->GetOutputMarkImage( );
-  TDijkstra::TMark max_mark = paths->GetNumberOfBranches( );
-  const TDijkstra::TVertices& endpoints = paths->GetEndPoints( );
-  const TDijkstra::TVertices& bifurcations = paths->GetBifurcationPoints( );
-  const TDijkstra::TTree& tree = paths->GetFullTree( );
-  const TDijkstra::TTree& reduced_tree = paths->GetReducedTree( );
-  TDijkstra::TVertices::const_iterator epIt = endpoints.begin( );
-
-  TBranches branches;
-  TImage::PointType ori = input_image->GetOrigin( );
-
-  TDijkstra::TTree::const_iterator rIt = reduced_tree.begin( );
-  for( ; rIt != reduced_tree.end( ); ++rIt )
-  {
-    TDijkstra::TTree::const_iterator tIt = tree.find( rIt->first );
-
-    // Prepare branch "a la ImageJ"
-    TBranch branch;
-    TImage::PointType p1, p2;
-    input_image->TransformIndexToPhysicalPoint( rIt->second.first, p1 );
-    input_image->TransformIndexToPhysicalPoint( rIt->first, p2 );
-    branch.V1 = p1 - ori;
-    branch.V2 = p2 - ori;
-    branch.Length = double( 0 );
-      
-    double pd =
-      ( double( tIt->second.second ) - double( 1 ) ) /
-      ( double( max_mark ) - double( 1 ) );
-    bool start = true;
-    TImage::PointType prev;
-    do
-    {
-      TDijkstra::TVertex idx = tIt->first;
-      new_marks->SetPixel( idx, 255 );
-      TImage::PointType pnt;
-      input_image->TransformIndexToPhysicalPoint( idx, pnt );
-      points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
-      scalars->InsertNextTuple1( pd );
-      if( !start )
-      {
-        cells->InsertNextCell( 2 );
-        cells->InsertCellPoint( points->GetNumberOfPoints( ) - 2 );
-        cells->InsertCellPoint( points->GetNumberOfPoints( ) - 1 );
-        branch.Length += prev.EuclideanDistanceTo( pnt );
-
-      } // fi
-      start = false;
-      prev = pnt;
-      tIt = tree.find( tIt->second.first );
-
-    } while( tIt->first != rIt->second.first );
-
-    // Last point
-    TDijkstra::TVertex idx = tIt->first;
-    new_marks->SetPixel( idx, 255 );
-    TImage::PointType pnt;
-    input_image->TransformIndexToPhysicalPoint( idx, pnt );
-    points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
-    scalars->InsertNextTuple1( pd );
-    if( !start )
-    {
-      cells->InsertNextCell( 2 );
-      cells->InsertCellPoint( points->GetNumberOfPoints( ) - 2 );
-      cells->InsertCellPoint( points->GetNumberOfPoints( ) - 1 );
-      branch.Length += prev.EuclideanDistanceTo( pnt );
-
-    } // fi
-    branches.insert( branch );
-
-  } // rof
-
-  std::ofstream bout( output_imagej_fn.c_str( ) );
-  if( !bout )
-  {
-    std::cerr << "Error: could not open " << output_imagej_fn << std::endl;
-    return( 1 );
-
-  } // fi
-  int i = 1;
-  for( TBranches::const_iterator bIt = branches.begin( ); bIt != branches.end( ); ++bIt, ++i )
-  {
-    bout
-      << std::setiosflags( std::ios::fixed) << std::setprecision( 3 )
-      << i << "\t1.000\t"
-      << bIt->Length << "\t"
-      << bIt->V1[ 0 ] << "\t"
-      << bIt->V1[ 1 ] << "\t"
-      << bIt->V1[ 2 ] << "\t"
-      << bIt->V2[ 0 ] << "\t"
-      << bIt->V2[ 1 ] << "\t"
-      << bIt->V2[ 2 ] << "\t"
-      << ( bIt->V2 - bIt->V1 ).GetNorm( )
-      << std::endl;
-
-  } // rof
-  bout.close( );
-
-  vtkSmartPointer< vtkPolyData > vtk_tree =
-    vtkSmartPointer< vtkPolyData >::New( );
-  vtk_tree->SetPoints( points );
-  vtk_tree->SetLines( cells );
-  vtk_tree->GetPointData( )->SetScalars( scalars );
-
-  view.AddPolyData( vtk_tree );
-  view.Render( );
-  if( visual_debug )
-    view.Start( );
-
-  vtkSmartPointer< vtkPolyDataWriter > writer =
-    vtkSmartPointer< vtkPolyDataWriter >::New( );
-  writer->SetInputData( vtk_tree );
-  writer->SetFileName( output_vtk_fn.c_str( ) );
-  writer->Update( );
-
-  itk::ImageFileWriter< TDijkstra::TMarkImage >::Pointer marks_writer =
-    itk::ImageFileWriter< TDijkstra::TMarkImage >::New( );
-  marks_writer->SetInput( new_marks );
-  marks_writer->SetFileName( output_image_fn );
-  marks_writer->Update( );
-
-  TImageWriter::Pointer dijkstra_writer =
-    TImageWriter::New( );
-  dijkstra_writer->SetInput( paths->GetOutput( ) );
-  dijkstra_writer->SetFileName( "dijkstra.mhd" );
-  dijkstra_writer->Update( );
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_ImageAlgorithmFastMarching_00.cxx b/appli/examples/example_ImageAlgorithmFastMarching_00.cxx
deleted file mode 100644 (file)
index 1573ce6..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <iostream>
-#include <itkImage.h>
-
-#include <fpa/Image/FastMarching.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TPixel;
-typedef double        TCost;
-typedef itk::Image< TPixel, Dim > TImage;
-
-typedef fpa::Image::FastMarching< TImage, TCost > TFrontAlgorithm;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  // Create a dummy image
-  TImage::SizeType imageSize;
-  imageSize.Fill( 100 );
-
-  TImage::SpacingType imageSpacing;
-  imageSpacing.Fill( 1 );
-
-  TImage::Pointer image = TImage::New( );
-  image->SetRegions( imageSize );
-  image->SetSpacing( imageSpacing );
-  image->Allocate( );
-  image->FillBuffer( TPixel( 1 ) );
-
-  // Seed
-  TImage::IndexType seed;
-  seed.Fill( 50 );
-
-  // Configure algorithm
-  TFrontAlgorithm::Pointer algorithm = TFrontAlgorithm::New( );
-  algorithm->AddSeed( seed, TCost( 0 ) );
-  algorithm->SetInput( image );
-  algorithm->SetNeighborhoodOrder( 1 );
-  algorithm->Update( );
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_ImageAlgorithmFastMarching_01.cxx b/appli/examples/example_ImageAlgorithmFastMarching_01.cxx
deleted file mode 100644 (file)
index cfa306f..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageFileReader.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <vtkImageActor.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSeedRepresentation.h>
-#include <vtkSeedWidget.h>
-#include <vtkSmartPointer.h>
-
-#include <fpa/Image/FastMarching.h>
-#include <fpa/VTK/Image2DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TPixel;
-typedef double TScalar;
-typedef itk::Image< TPixel, Dim >  TImage;
-typedef itk::ImageToVTKImageFilter< TImage > TVTKImage;
-
-typedef itk::ImageFileReader< TImage > TImageReader;
-typedef fpa::Image::FastMarching< TImage, TScalar > TFrontAlgorithm;
-
-typedef
-fpa::VTK::Image2DObserver< TFrontAlgorithm, vtkRenderWindow >
-TObserver;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 2 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image [stop_at_one_front]" << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  bool stop_at_one_front = false;
-  if( 2 < argc )
-    stop_at_one_front = ( std::atoi( argv[ 2 ] ) == 1 );
-
-  // Read image
-  TImageReader::Pointer input_image_reader = TImageReader::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr << "Error caught: " << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TImage::ConstPointer input_image = input_image_reader->GetOutput( );
-
-  TVTKImage::Pointer vtk_image = TVTKImage::New( );
-  vtk_image->SetInput( input_image );
-  vtk_image->Update( );
-
-  // VTK visualization
-  vtkSmartPointer< vtkImageActor > actor =
-    vtkSmartPointer< vtkImageActor >::New( );
-  actor->SetInputData( vtk_image->GetOutput( ) );
-
-  vtkSmartPointer< vtkRenderer > renderer =
-    vtkSmartPointer< vtkRenderer >::New( );
-  renderer->SetBackground( 0.1, 0.2, 0.7 );
-  renderer->AddActor( actor );
-  vtkSmartPointer< vtkRenderWindow > window =
-    vtkSmartPointer< vtkRenderWindow >::New( );
-  window->SetSize( 800, 800 );
-  window->AddRenderer( renderer );
-
-  // VTK interaction
-  vtkSmartPointer< vtkInteractorStyleImage > imageStyle =
-    vtkSmartPointer< vtkInteractorStyleImage >::New( );
-  vtkSmartPointer< vtkRenderWindowInteractor > interactor =
-    vtkSmartPointer< vtkRenderWindowInteractor >::New( );
-  interactor->SetInteractorStyle( imageStyle );
-  window->SetInteractor( interactor );
-  window->Render( );
-
-  // Create the widget and its representation
-  vtkSmartPointer< vtkPointHandleRepresentation3D > handle =
-    vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
-  handle->GetProperty( )->SetColor( 1, 0, 0 );
-  vtkSmartPointer< vtkSeedRepresentation > rep =
-    vtkSmartPointer< vtkSeedRepresentation >::New( );
-  rep->SetHandleRepresentation( handle );
-
-  vtkSmartPointer< vtkSeedWidget > widget =
-    vtkSmartPointer< vtkSeedWidget >::New( );
-  widget->SetInteractor( interactor );
-  widget->SetRepresentation( rep );
-
-  // Let some interaction
-  interactor->Initialize( );
-  window->Render( );
-  widget->On( );
-  interactor->Start( );
-
-  // Configure observer
-  TObserver::Pointer obs = TObserver::New( );
-  obs->SetImage( input_image, window );
-
-  // Configure algorithm
-  TFrontAlgorithm::Pointer algorithm = TFrontAlgorithm::New( );
-  for( unsigned int s = 0; s < rep->GetNumberOfSeeds( ); s++ )
-  {
-    double pos[ 3 ];
-    rep->GetSeedWorldPosition( s, pos );
-
-    TImage::PointType pnt;
-    pnt[ 0 ] = pos[ 0 ];
-    pnt[ 1 ] = pos[ 1 ];
-
-    TImage::IndexType idx;
-    if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-    {
-      algorithm->AddSeed( idx, 0 );
-      std::cout << " Seed --> " << idx << std::endl;
-
-    } // fi
-
-  } // rof
-  algorithm->AddObserver( itk::AnyEvent( ), obs );
-  algorithm->ThrowEventsOn( );
-  algorithm->SetInput( input_image );
-  algorithm->SetNeighborhoodOrder( 1 );
-  algorithm->SetStopAtOneFront( stop_at_one_front );
-  algorithm->Update( );
-
-  // One last interaction
-  window->Render( );
-  interactor->Start( );
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_ImageAlgorithmRegionGrow_00.cxx b/appli/examples/example_ImageAlgorithmRegionGrow_00.cxx
deleted file mode 100644 (file)
index 149977a..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <iostream>
-#include <itkImage.h>
-
-#include <fpa/Image/RegionGrow.h>
-#include <fpa/Image/Functors/RegionGrowAllBelongsFunction.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TPixel;
-typedef itk::Image< TPixel, Dim > TImage;
-
-typedef fpa::Image::RegionGrow< TImage > TFrontAlgorithm;
-typedef
-fpa::Image::Functors::RegionGrowAllBelongsFunction< TImage >
-TMembershipFunction;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  // Create a dummy image
-  TImage::SizeType imageSize;
-  imageSize.Fill( 10 );
-
-  TImage::SpacingType imageSpacing;
-  imageSpacing.Fill( 1 );
-
-  TImage::Pointer image = TImage::New( );
-  image->SetRegions( imageSize );
-  image->SetSpacing( imageSpacing );
-  image->Allocate( );
-  image->FillBuffer( TPixel( 1 ) );
-
-  // Seed
-  TImage::IndexType seed;
-  seed.Fill( 5 );
-
-  // Configure membership function
-  TMembershipFunction::Pointer membership = TMembershipFunction::New( );
-
-  // Configure algorithm
-  TFrontAlgorithm::Pointer algorithm = TFrontAlgorithm::New( );
-  algorithm->AddSeed( seed, 0 );
-  algorithm->SetInput( image );
-  algorithm->SetNeighborhoodOrder( 1 );
-  algorithm->SetMembershipFunction( membership );
-  algorithm->Update( );
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_ImageAlgorithmRegionGrow_01.cxx b/appli/examples/example_ImageAlgorithmRegionGrow_01.cxx
deleted file mode 100644 (file)
index e41b65d..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageFileReader.h>
-#include <itkSignedDanielssonDistanceMapImageFilter.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <vtkImageActor.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSeedRepresentation.h>
-#include <vtkSeedWidget.h>
-#include <vtkSmartPointer.h>
-
-#include <fpa/Image/RegionGrow.h>
-#include <fpa/Image/Functors/RegionGrowThresholdFunction.h>
-#include <fpa/VTK/Image2DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TPixel;
-typedef double TScalar;
-typedef itk::Image< TPixel, Dim >  TImage;
-typedef itk::ImageToVTKImageFilter< TImage > TVTKImage;
-
-typedef itk::ImageFileReader< TImage >   TImageReader;
-typedef fpa::Image::RegionGrow< TImage > TFrontAlgorithm;
-
-typedef
-fpa::Image::Functors::RegionGrowThresholdFunction< TImage >
-TMembershipFunction;
-
-typedef
-fpa::VTK::Image2DObserver< TFrontAlgorithm, vtkRenderWindow >
-TObserver;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 4 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image lower_threshold upper_threshold" << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  TPixel lower_threshold = TPixel( std::atof( argv[ 2 ] ) );
-  TPixel upper_threshold = TPixel( std::atof( argv[ 3 ] ) );
-
-  // Read image
-  TImageReader::Pointer input_image_reader = TImageReader::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr << "Error caught: " << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TImage::ConstPointer input_image = input_image_reader->GetOutput( );
-
-  TVTKImage::Pointer vtk_image = TVTKImage::New( );
-  vtk_image->SetInput( input_image );
-  vtk_image->Update( );
-
-  // VTK visualization
-  vtkSmartPointer< vtkImageActor > actor =
-    vtkSmartPointer< vtkImageActor >::New( );
-  actor->SetInputData( vtk_image->GetOutput( ) );
-
-  vtkSmartPointer< vtkRenderer > renderer =
-    vtkSmartPointer< vtkRenderer >::New( );
-  renderer->SetBackground( 0.1, 0.2, 0.7 );
-  renderer->AddActor( actor );
-  vtkSmartPointer< vtkRenderWindow > window =
-    vtkSmartPointer< vtkRenderWindow >::New( );
-  window->SetSize( 800, 800 );
-  window->AddRenderer( renderer );
-
-  // VTK interaction
-  vtkSmartPointer< vtkInteractorStyleImage > imageStyle =
-    vtkSmartPointer< vtkInteractorStyleImage >::New( );
-  vtkSmartPointer< vtkRenderWindowInteractor > interactor =
-    vtkSmartPointer< vtkRenderWindowInteractor >::New( );
-  interactor->SetInteractorStyle( imageStyle );
-  window->SetInteractor( interactor );
-  window->Render( );
-
-  // Create the widget and its representation
-  vtkSmartPointer< vtkPointHandleRepresentation3D > handle =
-    vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
-  handle->GetProperty( )->SetColor( 1, 0, 0 );
-  vtkSmartPointer< vtkSeedRepresentation > rep =
-    vtkSmartPointer< vtkSeedRepresentation >::New( );
-  rep->SetHandleRepresentation( handle );
-
-  vtkSmartPointer< vtkSeedWidget > widget =
-    vtkSmartPointer< vtkSeedWidget >::New( );
-  widget->SetInteractor( interactor );
-  widget->SetRepresentation( rep );
-
-  // Let some interaction
-  interactor->Initialize( );
-  window->Render( );
-  widget->On( );
-  interactor->Start( );
-
-  // Configure observer
-  TObserver::Pointer obs = TObserver::New( );
-  obs->SetImage( input_image, window );
-
-  // Configure membership function
-  TMembershipFunction::Pointer membership = TMembershipFunction::New( );
-  membership->SetLowerThreshold( lower_threshold );
-  membership->SetUpperThreshold( upper_threshold );
-
-  // Configure algorithm
-  TFrontAlgorithm::Pointer algorithm = TFrontAlgorithm::New( );
-  for( unsigned int s = 0; s < rep->GetNumberOfSeeds( ); s++ )
-  {
-    double pos[ 3 ];
-    rep->GetSeedWorldPosition( s, pos );
-
-    TImage::PointType pnt;
-    pnt[ 0 ] = TScalar( pos[ 0 ] );
-    pnt[ 1 ] = TScalar( pos[ 1 ] );
-
-    TImage::IndexType idx;
-    if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-      algorithm->AddSeed( idx, 0 );
-
-  } // rof
-  algorithm->AddObserver( itk::AnyEvent( ), obs );
-  algorithm->ThrowEventsOn( );
-  algorithm->SetInput( input_image );
-  algorithm->SetNeighborhoodOrder( 1 );
-  algorithm->SetMembershipFunction( membership );
-  algorithm->Update( );
-
-  // One last interaction
-  interactor->Start( );
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_ImageAlgorithmRegionGrow_MultipleThresholds.cxx b/appli/examples/example_ImageAlgorithmRegionGrow_MultipleThresholds.cxx
deleted file mode 100644 (file)
index d2f6b2a..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-#include <ctime>
-#include <iostream>
-#include <limits>
-#include <set>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageFileReader.h>
-#include <itkImageFileWriter.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <vtkImageActor.h>
-#include <vtkImageMarchingCubes.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSmartPointer.h>
-#include <vtkSphereSource.h>
-
-#include <fpa/Image/RegionGrowWithMultipleThresholds.h>
-#include <fpa/VTK/ImageMPR.h>
-#include <fpa/VTK/Image3DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 3;
-typedef short TPixel;
-typedef double TScalar;
-typedef itk::Image< TPixel, Dim >  TImage;
-typedef itk::ImageToVTKImageFilter< TImage > TVTKImage;
-
-typedef itk::ImageFileReader< TImage >   TImageReader;
-typedef itk::ImageFileWriter< TImage >   TImageWriter;
-
-typedef
-fpa::Image::RegionGrowWithMultipleThresholds< TImage >
-TFrontAlgorithm;
-typedef
-fpa::VTK::Image3DObserver< TFrontAlgorithm, vtkRenderWindow >
-TObserver;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 6 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image thr_0 thr_1 step output_image"
-      << " visual_debug"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  TPixel thr_0 = TPixel( std::atof( argv[ 2 ] ) );
-  TPixel thr_1 = TPixel( std::atof( argv[ 3 ] ) );
-  unsigned int step = std::atoi( argv[ 4 ] );
-  std::string output_image_fn = argv[ 5 ];
-  bool visual_debug = false;
-  if( argc > 6 )
-    visual_debug = ( std::atoi( argv[ 6 ] ) == 1 );
-  
-  // Read image
-  TImageReader::Pointer input_image_reader = TImageReader::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr << "Error caught: " << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TImage::ConstPointer input_image = input_image_reader->GetOutput( );
-  TImage::SpacingType spac = input_image->GetSpacing( );
-  double min_spac = spac[ 0 ];
-  for( unsigned int d = 1; d < Dim; d++ )
-    min_spac = ( spac[ d ] < min_spac )? spac[ d ]: min_spac;
-
-  TVTKImage::Pointer vtk_image = TVTKImage::New( );
-  vtk_image->SetInput( input_image );
-  vtk_image->Update( );
-
-  fpa::VTK::ImageMPR view;
-  view.SetBackground( 0.3, 0.2, 0.8 );
-  view.SetSize( 800, 800 );
-  view.SetImage( vtk_image->GetOutput( ) );
-
-  // Wait for a seed to be given
-  while( view.GetNumberOfSeeds( ) == 0 )
-    view.Start( );
-
-  // Convert seed
-  double seed[ 3 ];
-  view.GetSeed( 0, seed );
-  TImage::PointType seed_pnt;
-  seed_pnt[ 0 ] = seed[ 0 ];
-  seed_pnt[ 1 ] = seed[ 1 ];
-  seed_pnt[ 2 ] = seed[ 2 ];
-  TImage::IndexType seed_idx;
-  input_image->TransformPhysicalPointToIndex( seed_pnt, seed_idx );
-
-  // Configure algorithm
-  TFrontAlgorithm::Pointer algorithm = TFrontAlgorithm::New( );
-  algorithm->AddThresholds( thr_0, thr_1, step );
-  algorithm->AddSeed( seed_idx, 0 );
-  algorithm->SetInput( input_image );
-  algorithm->SetNeighborhoodOrder( 1 );
-  algorithm->SetDifferenceThreshold( double( 3 ) );
-  algorithm->SetInsideValue( 0 );
-  algorithm->SetOutsideValue( 1 );
-
-  if( visual_debug )
-  {
-    // Configure observer
-    TObserver::Pointer obs = TObserver::New( );
-    obs->SetRenderWindow( view.GetWindow( ) );
-    algorithm->AddObserver( itk::AnyEvent( ), obs );
-    algorithm->ThrowEventsOn( );
-  }
-  else
-    algorithm->ThrowEventsOff( );
-
-  std::clock_t start = std::clock( );
-  algorithm->Update( );
-  std::clock_t end = std::clock( );
-  double seconds = double( end - start ) / double( CLOCKS_PER_SEC );
-  std::cout << "Execution time = " << seconds << std::endl;
-
-  // Show result
-  TVTKImage::Pointer output_image_vtk = TVTKImage::New( );
-  output_image_vtk->SetInput( algorithm->GetOutput( ) );
-  output_image_vtk->Update( );
-
-  vtkSmartPointer< vtkImageMarchingCubes > mc =
-    vtkSmartPointer< vtkImageMarchingCubes >::New( );
-  mc->SetInputData( output_image_vtk->GetOutput( ) );
-  mc->SetValue(
-    0,
-    double( algorithm->GetInsideValue( ) ) * double( 0.95 )
-    );
-  mc->Update( );
-
-  // Let some interaction and close program
-  view.AddPolyData( mc->GetOutput( ), 0.1, 0.6, 0.8, 0.5 );
-  view.Start( );
-
-  // Write resulting image
-  TImageWriter::Pointer output_image_writer = TImageWriter::New( );
-  output_image_writer->SetInput( algorithm->GetOutput( ) );
-  output_image_writer->SetFileName( output_image_fn );
-  try
-  {
-    output_image_writer->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr << "Error caught: " << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_ImageAlgorithm_Skeletonization.cxx b/appli/examples/example_ImageAlgorithm_Skeletonization.cxx
deleted file mode 100644 (file)
index 22b85e7..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-#include <ctime>
-#include <iostream>
-#include <string>
-
-#include <itkConstNeighborhoodIterator.h>
-#include <itkDanielssonDistanceMapImageFilter.h>
-#include <itkImage.h>
-#include <itkImageFileReader.h>
-#include <itkImageFileWriter.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <vtkImageMarchingCubes.h>
-
-#include <fpa/Image/RegionGrowWithMultipleThresholds.h>
-#include <fpa/Image/DijkstraWithSphereBacktracking.h>
-#include <fpa/VTK/ImageMPR.h>
-#include <fpa/VTK/Image3DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 3;
-typedef short                                TPixel;
-typedef float                                TScalar;
-typedef itk::Image< TPixel, Dim >            TImage;
-typedef itk::Image< TScalar, Dim >           TDistanceMap;
-typedef itk::ImageToVTKImageFilter< TImage > TVTKImage;
-typedef itk::ImageToVTKImageFilter< TDistanceMap > TVTKDistanceMap;
-
-typedef itk::ImageFileReader< TImage >                       TImageReader;
-typedef itk::ImageFileWriter< TImage >                       TImageWriter;
-typedef itk::ImageFileWriter< TDistanceMap >           TDistanceMapWriter;
-typedef fpa::Image::RegionGrowWithMultipleThresholds< TImage > TSegmentor;
-typedef
-itk::DanielssonDistanceMapImageFilter< TImage, TDistanceMap >
-TDistanceFilter;
-typedef
-fpa::Image::DijkstraWithSphereBacktracking< TDistanceMap, TScalar >
-TDijkstra;
-
-typedef fpa::VTK::ImageMPR TMPR;
-typedef fpa::VTK::Image3DObserver< TSegmentor, vtkRenderWindow > TSegmentorObs;
-typedef fpa::VTK::Image3DObserver< TDijkstra, vtkRenderWindow > TDijkstraObs;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 8 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image thr_0 thr_1 step"
-      << " output_segmentation output_distancemap output_dijkstra"
-      << " visual_debug"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  TPixel thr_0 = TPixel( std::atof( argv[ 2 ] ) );
-  TPixel thr_1 = TPixel( std::atof( argv[ 3 ] ) );
-  unsigned int step = std::atoi( argv[ 4 ] );
-  std::string output_segmentation_fn = argv[ 5 ];
-  std::string output_distancemap_fn = argv[ 6 ];
-  std::string output_dijkstra_fn = argv[ 7 ];
-  bool visual_debug = false;
-  if( argc > 8 )
-    visual_debug = ( std::atoi( argv[ 8 ] ) == 1 );
-
-  // Read image
-  TImageReader::Pointer input_image_reader = TImageReader::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr << "Error caught: " << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TImage::ConstPointer input_image = input_image_reader->GetOutput( );
-
-  // Show image
-  TVTKImage::Pointer vtk_image = TVTKImage::New( );
-  vtk_image->SetInput( input_image );
-  vtk_image->Update( );
-
-  TMPR view;
-  view.SetBackground( 0.3, 0.2, 0.8 );
-  view.SetSize( 800, 800 );
-  view.SetImage( vtk_image->GetOutput( ) );
-
-  // Wait for a seed to be given
-  while( view.GetNumberOfSeeds( ) == 0 )
-    view.Start( );
-
-  // Get seed from user
-  double seed[ 3 ];
-  view.GetSeed( 0, seed );
-  TImage::PointType seed_pnt;
-  seed_pnt[ 0 ] = seed[ 0 ];
-  seed_pnt[ 1 ] = seed[ 1 ];
-  seed_pnt[ 2 ] = seed[ 2 ];
-  TImage::IndexType seed_idx;
-  input_image->TransformPhysicalPointToIndex( seed_pnt, seed_idx );
-
-  // Segment input image
-  TSegmentor::Pointer segmentor = TSegmentor::New( );
-  segmentor->AddThresholds( thr_0, thr_1, step );
-  segmentor->AddSeed( seed_idx, 0 );
-  segmentor->SetInput( input_image );
-  segmentor->SetNeighborhoodOrder( 1 );
-  segmentor->SetDifferenceThreshold( double( 3 ) );
-  segmentor->SetInsideValue( TPixel( 0 ) );  // WARNING: This is to optimize
-  segmentor->SetOutsideValue( TPixel( 1 ) ); // distance map calculation
-  if( visual_debug )
-  {
-    // Configure observer
-    TSegmentorObs::Pointer obs = TSegmentorObs::New( );
-    obs->SetRenderWindow( view.GetWindow( ) );
-    segmentor->AddObserver( itk::AnyEvent( ), obs );
-    segmentor->ThrowEventsOn( );
-  }
-  else
-    segmentor->ThrowEventsOff( );
-  std::clock_t start = std::clock( );
-  segmentor->Update( );
-  std::clock_t end = std::clock( );
-  double seconds = double( end - start ) / double( CLOCKS_PER_SEC );
-  std::cout << "Segmentation time = " << seconds << std::endl;
-
-  // Extract distance map
-  TDistanceFilter::Pointer distanceMap = TDistanceFilter::New( );
-  distanceMap->SetInput( segmentor->GetOutput( ) );
-  distanceMap->InputIsBinaryOn( );
-  distanceMap->SquaredDistanceOn( );
-  distanceMap->UseImageSpacingOn( );
-  start = std::clock( );
-  distanceMap->Update( );
-  end = std::clock( );
-  seconds = double( end - start ) / double( CLOCKS_PER_SEC );
-  std::cout << "Distance map time = " << seconds << std::endl;
-
-  TVTKDistanceMap::Pointer vtk_distanceMap = TVTKDistanceMap::New( );
-  vtk_distanceMap->SetInput( distanceMap->GetOutput( ) );
-  vtk_distanceMap->Update( );
-
-  vtkSmartPointer< vtkImageMarchingCubes > mc =
-    vtkSmartPointer< vtkImageMarchingCubes >::New( );
-  mc->SetInputData( vtk_distanceMap->GetOutput( ) );
-  mc->SetValue( 0, 1e-2 );
-  mc->Update( );
-  view.AddPolyData( mc->GetOutput( ), 1, 1, 1, 0.4 );
-  view.Render( );
-
-  // Extract paths
-  TDijkstra::Pointer paths = TDijkstra::New( );
-  paths->AddSeed( segmentor->GetSeed( 0 ), TScalar( 0 ) );
-  paths->SetInput( distanceMap->GetOutput( ) );
-  paths->SetNeighborhoodOrder( 2 );
-
-  if( visual_debug )
-  {
-    // Configure observer
-    TDijkstraObs::Pointer obs = TDijkstraObs::New( );
-    obs->SetRenderWindow( view.GetWindow( ) );
-    paths->AddObserver( itk::AnyEvent( ), obs );
-    paths->ThrowEventsOn( );
-  }
-  else
-    paths->ThrowEventsOff( );
-  start = std::clock( );
-  paths->Update( );
-  end = std::clock( );
-  seconds = double( end - start ) / double( CLOCKS_PER_SEC );
-  std::cout << "Paths extraction time = " << seconds << std::endl;
-
-  std::cout << "Final seed: " << paths->GetSeed( 0 ) << std::endl;
-
-  // Create polydata
-  vtkSmartPointer< vtkPoints > points =
-    vtkSmartPointer< vtkPoints >::New( );
-  vtkSmartPointer< vtkCellArray > cells =
-    vtkSmartPointer< vtkCellArray >::New( );
-  vtkSmartPointer< vtkFloatArray > scalars =
-    vtkSmartPointer< vtkFloatArray >::New( );
-
-  const TDijkstra::TVertices& endpoints = paths->GetEndPoints( );
-  const TDijkstra::TTree& tree = paths->GetFullTree( );
-  TDijkstra::TVertices::const_iterator epIt = endpoints.begin( );
-  for( unsigned int epId = 0; epIt != endpoints.end( ); ++epIt, ++epId )
-  {
-    double pd = double( epId ) / double( endpoints.size( ) - 1 );
-
-    TDijkstra::TVertex idx = *epIt;
-    do
-    {
-      TImage::PointType pnt;
-      input_image->TransformIndexToPhysicalPoint( idx, pnt );
-
-      points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
-      scalars->InsertNextTuple1( pd );
-      if( idx != *epIt )
-      {
-        cells->InsertNextCell( 2 );
-        cells->InsertCellPoint( points->GetNumberOfPoints( ) - 2 );
-        cells->InsertCellPoint( points->GetNumberOfPoints( ) - 1 );
-
-      } // fi
-         idx = tree.find( idx )->second.first;
-
-    } while( idx != tree.find( idx )->second.first );
-
-  } // rof
-
-  vtkSmartPointer< vtkPolyData > vtk_tree =
-    vtkSmartPointer< vtkPolyData >::New( );
-  vtk_tree->SetPoints( points );
-  vtk_tree->SetLines( cells );
-  vtk_tree->GetPointData( )->SetScalars( scalars );
-
-  view.AddPolyData( vtk_tree );
-  view.Render( );
-  view.Start( );
-
-  itk::ImageFileWriter< TImage >::Pointer segmentation_writer =
-    itk::ImageFileWriter< TImage >::New( );
-  segmentation_writer->SetInput( segmentor->GetOutput( ) );
-  segmentation_writer->SetFileName( output_segmentation_fn );
-
-  itk::ImageFileWriter< TDistanceMap >::Pointer dmap_writer =
-    itk::ImageFileWriter< TDistanceMap >::New( );
-  dmap_writer->SetInput( distanceMap->GetOutput( ) );
-  dmap_writer->SetFileName( output_distancemap_fn );
-
-  itk::ImageFileWriter< TDistanceMap >::Pointer dijk_writer =
-    itk::ImageFileWriter< TDistanceMap >::New( );
-  dijk_writer->SetInput( paths->GetOutput( ) );
-  dijk_writer->SetFileName( output_dijkstra_fn );
-
-  try
-  {
-    segmentation_writer->Update( );
-    dmap_writer->Update( );
-    dijk_writer->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr << "Error caught: " << err << std::endl;
-    return( -1 );
-
-  } // yrt
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Image_Dijkstra_AbsoluteDifferenceCost.cxx b/appli/examples/example_Image_Dijkstra_AbsoluteDifferenceCost.cxx
deleted file mode 100644 (file)
index 47affc1..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-#include <cstdlib>
-#include <iostream>
-#include <fstream>
-#include <limits>
-#include <string>
-#include <vector>
-
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <itkImageFileReader.h>
-#include <itkImageFileWriter.h>
-
-#include <vtkCamera.h>
-#include <vtkImageActor.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSeedRepresentation.h>
-#include <vtkSeedWidget.h>
-#include <vtkSmartPointer.h>
-
-#include <fpa/Image/Dijkstra.h>
-#include <fpa/Image/Functors/ImageAbsoluteDifferenceCostFunction.h>
-#include <fpa/VTK/ImageMPR.h>
-#include <fpa/VTK/Image3DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 3;
-typedef float TInputPixel;
-typedef float TOutputPixel;
-
-typedef itk::Image< TInputPixel, Dim >            TInputImage;
-typedef itk::Image< TOutputPixel, Dim >           TOutputImage;
-typedef itk::ImageToVTKImageFilter< TInputImage > TVTKInputImage;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 8 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image input_seeds output_image"
-      << " neighborhood_order stop_at_one_front"
-      << " init_seed end_seed"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  std::string input_seeds_fn = argv[ 2 ];
-  std::string output_image_fn = argv[ 3 ];
-  unsigned int neighborhood_order = std::atoi( argv[ 4 ] );
-  bool stop_at_one_front = ( std::atoi( argv[ 5 ] ) != 0 );
-  unsigned int init_seed = std::atoi( argv[ 6 ] );
-  unsigned int end_seed = std::atoi( argv[ 7 ] );
-
-  // Read image
-  itk::ImageFileReader< TInputImage >::Pointer input_image_reader =
-    itk::ImageFileReader< TInputImage >::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while reading image from " << input_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TInputImage::ConstPointer input_image = input_image_reader->GetOutput( );
-  TVTKInputImage::Pointer vtk_input_image = TVTKInputImage::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  // Show input image and let some interaction
-  fpa::VTK::ImageMPR view;
-  view.SetBackground( 0.3, 0.2, 0.8 );
-  view.SetSize( 600, 600 );
-  view.SetImage( vtk_input_image->GetOutput( ) );
-
-  // Allow some interaction
-  view.Render( );
-  view.Start( );
-
-  // Prepare region grow filter and cost function
-  typedef fpa::Image::Dijkstra< TInputImage, TOutputImage > TFilter;
-  typedef fpa::Image::Functors::
-    ImageAbsoluteDifferenceCostFunction< TFilter::TInputImage, TFilter::TResult >
-    TCost;
-
-  TCost::Pointer cost = TCost::New( );
-
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( input_image );
-  filter->SetCostFunction( cost );
-  filter->SetConversionFunction( NULL );
-  filter->SetNeighborhoodOrder( neighborhood_order );
-  filter->SetStopAtOneFront( stop_at_one_front );
-
-  // Get user-given seeds
-  std::ifstream input_seeds_str( input_seeds_fn.c_str( ) );
-  if( !input_seeds_str )
-  {
-    std::cerr << "Error opening \"" << input_seeds_fn << "\"" << std::endl;
-    return( 1 );
-
-  } // fi
-
-  unsigned int nSeeds;
-  input_seeds_str >> nSeeds;
-  std::vector< TInputImage::IndexType > input_seeds;
-  for( unsigned int s = 0; s < nSeeds; s++ )
-  {
-    TInputImage::IndexType idx;
-    input_seeds_str >> idx[ 0 ] >> idx[ 1 ] >> idx[ 2 ];
-    input_seeds.push_back( idx );
-
-  } // rof
-  input_seeds_str.close( );
-
-  filter->AddSeed( input_seeds[ init_seed ], 0 );
-  filter->AddSeed( input_seeds[ end_seed ], 0 );
-
-  // Prepare graphical debugger
-  typedef fpa::VTK::Image3DObserver< TFilter, vtkRenderWindow > TDebugger;
-  TDebugger::Pointer debugger = TDebugger::New( );
-  debugger->SetRenderWindow( view.GetWindow( ) );
-  debugger->SetRenderPercentage( 0.0001 );
-  filter->AddObserver( itk::AnyEvent( ), debugger );
-  filter->ThrowEventsOn( );
-
-  // Go!
-  filter->Update( );
-
-  // Save final total cost map
-  itk::ImageFileWriter< TOutputImage >::Pointer output_image_writer =
-    itk::ImageFileWriter< TOutputImage >::New( );
-  output_image_writer->SetFileName( output_image_fn );
-  output_image_writer->SetInput( filter->GetOutput( ) );
-  try
-  {
-    output_image_writer->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while writing image to " << output_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Image_Dijkstra_CostFromInput.cxx b/appli/examples/example_Image_Dijkstra_CostFromInput.cxx
deleted file mode 100644 (file)
index 65003e2..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-#include <cstdlib>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <itkImageFileReader.h>
-#include <itkImageFileWriter.h>
-
-#include <vtkCamera.h>
-#include <vtkImageActor.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSeedRepresentation.h>
-#include <vtkSeedWidget.h>
-#include <vtkSmartPointer.h>
-
-#include <fpa/Image/Dijkstra.h>
-#include <fpa/VTK/Image2DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TInputPixel;
-typedef float         TOutputPixel;
-
-typedef itk::Image< TInputPixel, Dim >            TInputImage;
-typedef itk::Image< TOutputPixel, Dim >           TOutputImage;
-typedef itk::ImageToVTKImageFilter< TInputImage > TVTKInputImage;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 5 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image output_image neighborhood_order stop_at_one_front"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  std::string output_image_fn = argv[ 2 ];
-  unsigned int neighborhood_order = std::atoi( argv[ 3 ] );
-  bool stop_at_one_front = ( std::atoi( argv[ 4 ] ) != 0 );
-
-  // Read image
-  itk::ImageFileReader< TInputImage >::Pointer input_image_reader =
-    itk::ImageFileReader< TInputImage >::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while reading image from " << input_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TInputImage::ConstPointer input_image = input_image_reader->GetOutput( );
-  TVTKInputImage::Pointer vtk_input_image = TVTKInputImage::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  // VTK visualization
-  vtkSmartPointer< vtkImageActor > actor =
-    vtkSmartPointer< vtkImageActor >::New( );
-  actor->SetInputData( vtk_input_image->GetOutput( ) );
-
-  vtkSmartPointer< vtkRenderer > renderer =
-    vtkSmartPointer< vtkRenderer >::New( );
-  renderer->SetBackground( 0.1, 0.2, 0.7 );
-  renderer->AddActor( actor );
-  vtkSmartPointer< vtkRenderWindow > window =
-    vtkSmartPointer< vtkRenderWindow >::New( );
-  window->SetSize( 800, 800 );
-  window->AddRenderer( renderer );
-
-  // Correct camera due to the loaded image
-  vtkCamera* camera = renderer->GetActiveCamera( );
-  camera->SetViewUp( 0, -1, 0 );
-  camera->SetPosition( 0, 0, -1 );
-  camera->SetFocalPoint( 0, 0, 0 );
-
-  // VTK interaction
-  vtkSmartPointer< vtkInteractorStyleImage > imageStyle =
-    vtkSmartPointer< vtkInteractorStyleImage >::New( );
-  vtkSmartPointer< vtkRenderWindowInteractor > interactor =
-    vtkSmartPointer< vtkRenderWindowInteractor >::New( );
-  interactor->SetInteractorStyle( imageStyle );
-  window->SetInteractor( interactor );
-
-  // Create the widget and its representation
-  vtkSmartPointer< vtkPointHandleRepresentation3D > handle =
-    vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
-  handle->GetProperty( )->SetColor( 1, 0, 0 );
-  vtkSmartPointer< vtkSeedRepresentation > rep =
-    vtkSmartPointer< vtkSeedRepresentation >::New( );
-  rep->SetHandleRepresentation( handle );
-
-  vtkSmartPointer< vtkSeedWidget > widget =
-    vtkSmartPointer< vtkSeedWidget >::New( );
-  widget->SetInteractor( interactor );
-  widget->SetRepresentation( rep );
-
-  // Let some interaction
-  interactor->Initialize( );
-  renderer->ResetCamera( );
-  window->Render( );
-  widget->On( );
-  interactor->Start( );
-
-  // Prepare region grow filter
-  typedef fpa::Image::Dijkstra< TInputImage, TOutputImage > TFilter;
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( input_image );
-  filter->SetNeighborhoodOrder( neighborhood_order );
-  filter->SetStopAtOneFront( stop_at_one_front );
-
-  // Get user-given seeds
-  for( unsigned int s = 0; s < rep->GetNumberOfSeeds( ); s++ )
-  {
-    double pos[ 3 ];
-    rep->GetSeedWorldPosition( s, pos );
-
-    TInputImage::PointType pnt;
-    pnt[ 0 ] = TInputImage::PointType::ValueType( pos[ 0 ] );
-    pnt[ 1 ] = TInputImage::PointType::ValueType( pos[ 1 ] );
-
-    TInputImage::IndexType idx;
-    if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-      filter->AddSeed( idx, 0 );
-
-  } // rof
-
-  // Prepare graphical debugger
-  typedef fpa::VTK::Image2DObserver< TFilter, vtkRenderWindow > TDebugger;
-  TDebugger::Pointer debugger = TDebugger::New( );
-  debugger->SetRenderWindow( window );
-  debugger->SetRenderPercentage( 0.001 );
-  filter->AddObserver( itk::AnyEvent( ), debugger );
-  filter->ThrowEventsOn( );
-
-  // Go!
-  filter->Update( );
-
-  // Save final total cost map
-  itk::ImageFileWriter< TOutputImage >::Pointer output_image_writer =
-    itk::ImageFileWriter< TOutputImage >::New( );
-  output_image_writer->SetFileName( output_image_fn );
-  output_image_writer->SetInput( filter->GetOutput( ) );
-  try
-  {
-    output_image_writer->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while writing image to " << output_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Image_Dijkstra_CostFromRGBInput.cxx b/appli/examples/example_Image_Dijkstra_CostFromRGBInput.cxx
deleted file mode 100644 (file)
index c181359..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-#include <cstdlib>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
-#include <itkRGBPixel.h>
-
-#include <itkImageFileReader.h>
-#include <itkImageFileWriter.h>
-
-#include <vtkCamera.h>
-#include <vtkImageActor.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSeedRepresentation.h>
-#include <vtkSeedWidget.h>
-#include <vtkSmartPointer.h>
-
-#include <fpa/Image/Dijkstra.h>
-#include <fpa/VTK/Image2DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef itk::RGBPixel< unsigned char > TInputPixel;
-typedef float                          TOutputPixel;
-
-typedef itk::Image< TInputPixel, Dim >            TInputImage;
-typedef itk::Image< TOutputPixel, Dim >           TOutputImage;
-typedef itk::ImageToVTKImageFilter< TInputImage > TVTKInputImage;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 5 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image output_image neighborhood_order stop_at_one_front"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  std::string output_image_fn = argv[ 2 ];
-  unsigned int neighborhood_order = std::atoi( argv[ 3 ] );
-  bool stop_at_one_front = ( std::atoi( argv[ 4 ] ) != 0 );
-
-  // Read image
-  itk::ImageFileReader< TInputImage >::Pointer input_image_reader =
-    itk::ImageFileReader< TInputImage >::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while reading image from " << input_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TInputImage::ConstPointer input_image = input_image_reader->GetOutput( );
-  TVTKInputImage::Pointer vtk_input_image = TVTKInputImage::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  // VTK visualization
-  vtkSmartPointer< vtkImageActor > actor =
-    vtkSmartPointer< vtkImageActor >::New( );
-  actor->SetInputData( vtk_input_image->GetOutput( ) );
-
-  vtkSmartPointer< vtkRenderer > renderer =
-    vtkSmartPointer< vtkRenderer >::New( );
-  renderer->SetBackground( 0.1, 0.2, 0.7 );
-  renderer->AddActor( actor );
-  vtkSmartPointer< vtkRenderWindow > window =
-    vtkSmartPointer< vtkRenderWindow >::New( );
-  window->SetSize( 800, 800 );
-  window->AddRenderer( renderer );
-
-  // Correct camera due to the loaded image
-  vtkCamera* camera = renderer->GetActiveCamera( );
-  camera->SetViewUp( 0, -1, 0 );
-  camera->SetPosition( 0, 0, -1 );
-  camera->SetFocalPoint( 0, 0, 0 );
-
-  // VTK interaction
-  vtkSmartPointer< vtkInteractorStyleImage > imageStyle =
-    vtkSmartPointer< vtkInteractorStyleImage >::New( );
-  vtkSmartPointer< vtkRenderWindowInteractor > interactor =
-    vtkSmartPointer< vtkRenderWindowInteractor >::New( );
-  interactor->SetInteractorStyle( imageStyle );
-  window->SetInteractor( interactor );
-
-  // Create the widget and its representation
-  vtkSmartPointer< vtkPointHandleRepresentation3D > handle =
-    vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
-  handle->GetProperty( )->SetColor( 1, 0, 0 );
-  vtkSmartPointer< vtkSeedRepresentation > rep =
-    vtkSmartPointer< vtkSeedRepresentation >::New( );
-  rep->SetHandleRepresentation( handle );
-
-  vtkSmartPointer< vtkSeedWidget > widget =
-    vtkSmartPointer< vtkSeedWidget >::New( );
-  widget->SetInteractor( interactor );
-  widget->SetRepresentation( rep );
-
-  // Let some interaction
-  interactor->Initialize( );
-  renderer->ResetCamera( );
-  window->Render( );
-  widget->On( );
-  interactor->Start( );
-
-  // Prepare region grow filter
-  typedef fpa::Image::Dijkstra< TInputImage, TOutputImage > TFilter;
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( input_image );
-  filter->SetNeighborhoodOrder( neighborhood_order );
-  filter->SetStopAtOneFront( stop_at_one_front );
-
-  // Get user-given seeds
-  for( unsigned int s = 0; s < rep->GetNumberOfSeeds( ); s++ )
-  {
-    double pos[ 3 ];
-    rep->GetSeedWorldPosition( s, pos );
-
-    TInputImage::PointType pnt;
-    pnt[ 0 ] = TInputImage::PointType::ValueType( pos[ 0 ] );
-    pnt[ 1 ] = TInputImage::PointType::ValueType( pos[ 1 ] );
-
-    TInputImage::IndexType idx;
-    if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-      filter->AddSeed( idx, 0 );
-
-  } // rof
-
-  // Prepare graphical debugger
-  typedef fpa::VTK::Image2DObserver< TFilter, vtkRenderWindow > TDebugger;
-  TDebugger::Pointer debugger = TDebugger::New( );
-  debugger->SetRenderWindow( window );
-  debugger->SetRenderPercentage( 0.001 );
-  filter->AddObserver( itk::AnyEvent( ), debugger );
-  filter->ThrowEventsOn( );
-
-  // Go!
-  filter->Update( );
-
-  // Save final total cost map
-  itk::ImageFileWriter< TOutputImage >::Pointer output_image_writer =
-    itk::ImageFileWriter< TOutputImage >::New( );
-  output_image_writer->SetFileName( output_image_fn );
-  output_image_writer->SetInput( filter->GetOutput( ) );
-  try
-  {
-    output_image_writer->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while writing image to " << output_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Image_Dijkstra_DanielssonCost.cxx b/appli/examples/example_Image_Dijkstra_DanielssonCost.cxx
deleted file mode 100644 (file)
index 3eb387f..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-#include <cstdlib>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <itkImageFileReader.h>
-#include <itkMinimumMaximumImageCalculator.h>
-#include <itkInvertIntensityImageFilter.h>
-#include <itkDanielssonDistanceMapImageFilter.h>
-#include <itkImageFileWriter.h>
-
-#include <vtkCamera.h>
-#include <vtkImageActor.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSeedRepresentation.h>
-#include <vtkSeedWidget.h>
-#include <vtkSmartPointer.h>
-
-#include <fpa/Image/Dijkstra.h>
-#include <fpa/Base/Functors/InvertCostFunction.h>
-#include <fpa/VTK/Image2DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TInputPixel;
-typedef float         TOutputPixel;
-
-typedef itk::Image< TInputPixel, Dim >            TInputImage;
-typedef itk::Image< TOutputPixel, Dim >           TOutputImage;
-typedef itk::ImageToVTKImageFilter< TInputImage > TVTKInputImage;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 5 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image output_image neighborhood_order stop_at_one_front"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  std::string output_image_fn = argv[ 2 ];
-  unsigned int neighborhood_order = std::atoi( argv[ 3 ] );
-  bool stop_at_one_front = ( std::atoi( argv[ 4 ] ) != 0 );
-
-  // Read image
-  itk::ImageFileReader< TInputImage >::Pointer input_image_reader =
-    itk::ImageFileReader< TInputImage >::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while reading image from " << input_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TInputImage::ConstPointer input_image = input_image_reader->GetOutput( );
-  TVTKInputImage::Pointer vtk_input_image = TVTKInputImage::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  // VTK visualization
-  vtkSmartPointer< vtkImageActor > actor =
-    vtkSmartPointer< vtkImageActor >::New( );
-  actor->SetInputData( vtk_input_image->GetOutput( ) );
-
-  vtkSmartPointer< vtkRenderer > renderer =
-    vtkSmartPointer< vtkRenderer >::New( );
-  renderer->SetBackground( 0.1, 0.2, 0.7 );
-  renderer->AddActor( actor );
-  vtkSmartPointer< vtkRenderWindow > window =
-    vtkSmartPointer< vtkRenderWindow >::New( );
-  window->SetSize( 800, 800 );
-  window->AddRenderer( renderer );
-
-  // Correct camera due to the loaded image
-  vtkCamera* camera = renderer->GetActiveCamera( );
-  camera->SetViewUp( 0, -1, 0 );
-  camera->SetPosition( 0, 0, -1 );
-  camera->SetFocalPoint( 0, 0, 0 );
-
-  // VTK interaction
-  vtkSmartPointer< vtkInteractorStyleImage > imageStyle =
-    vtkSmartPointer< vtkInteractorStyleImage >::New( );
-  vtkSmartPointer< vtkRenderWindowInteractor > interactor =
-    vtkSmartPointer< vtkRenderWindowInteractor >::New( );
-  interactor->SetInteractorStyle( imageStyle );
-  window->SetInteractor( interactor );
-
-  // Create the widget and its representation
-  vtkSmartPointer< vtkPointHandleRepresentation3D > handle =
-    vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
-  handle->GetProperty( )->SetColor( 1, 0, 0 );
-  vtkSmartPointer< vtkSeedRepresentation > rep =
-    vtkSmartPointer< vtkSeedRepresentation >::New( );
-  rep->SetHandleRepresentation( handle );
-
-  vtkSmartPointer< vtkSeedWidget > widget =
-    vtkSmartPointer< vtkSeedWidget >::New( );
-  widget->SetInteractor( interactor );
-  widget->SetRepresentation( rep );
-
-  // Let some interaction
-  interactor->Initialize( );
-  renderer->ResetCamera( );
-  window->Render( );
-  widget->On( );
-  interactor->Start( );
-
-  // Invert input image
-  itk::MinimumMaximumImageCalculator< TInputImage >::Pointer minmax =
-    itk::MinimumMaximumImageCalculator< TInputImage >::New( );
-  minmax->SetImage( input_image );
-  minmax->Compute( );
-
-  itk::InvertIntensityImageFilter< TInputImage >::Pointer invert =
-    itk::InvertIntensityImageFilter< TInputImage >::New( );
-  invert->SetInput( input_image );
-  invert->SetMaximum( minmax->GetMaximum( ) );
-
-  itk::DanielssonDistanceMapImageFilter< TInputImage, TOutputImage >::Pointer dmap =
-    itk::DanielssonDistanceMapImageFilter< TInputImage, TOutputImage >::New( );
-  dmap->SetInput( invert->GetOutput( ) );
-  dmap->InputIsBinaryOn( );
-  dmap->SquaredDistanceOn( );
-  dmap->UseImageSpacingOn( );
-  dmap->Update( );
-
-  typedef fpa::Base::Functors::InvertCostFunction< TOutputPixel > TFunction;
-  TFunction::Pointer function = TFunction::New( );
-
-  // Prepare region grow filter
-  typedef fpa::Image::Dijkstra< TOutputImage, TOutputImage > TFilter;
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( dmap->GetOutput( ) );
-  filter->SetConversionFunction( function );
-  filter->SetNeighborhoodOrder( neighborhood_order );
-  filter->SetStopAtOneFront( stop_at_one_front );
-
-  // Get user-given seeds
-  for( unsigned int s = 0; s < rep->GetNumberOfSeeds( ); s++ )
-  {
-    double pos[ 3 ];
-    rep->GetSeedWorldPosition( s, pos );
-
-    TInputImage::PointType pnt;
-    pnt[ 0 ] = TInputImage::PointType::ValueType( pos[ 0 ] );
-    pnt[ 1 ] = TInputImage::PointType::ValueType( pos[ 1 ] );
-
-    TInputImage::IndexType idx;
-    if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-      filter->AddSeed( idx, 0 );
-
-  } // rof
-
-  // Prepare graphical debugger
-  typedef fpa::VTK::Image2DObserver< TFilter, vtkRenderWindow > TDebugger;
-  TDebugger::Pointer debugger = TDebugger::New( );
-  debugger->SetRenderWindow( window );
-  debugger->SetRenderPercentage( 0.001 );
-  filter->AddObserver( itk::AnyEvent( ), debugger );
-  filter->ThrowEventsOn( );
-
-  // Go!
-  filter->Update( );
-
-  // Save final total cost map
-  itk::ImageFileWriter< TOutputImage >::Pointer output_image_writer =
-    itk::ImageFileWriter< TOutputImage >::New( );
-  output_image_writer->SetFileName( output_image_fn );
-  output_image_writer->SetInput( filter->GetOutput( ) );
-  try
-  {
-    output_image_writer->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while writing image to " << output_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Image_Dijkstra_DanielssonCost_TwoSeedsPath.cxx b/appli/examples/example_Image_Dijkstra_DanielssonCost_TwoSeedsPath.cxx
deleted file mode 100644 (file)
index 8a5eab0..0000000
+++ /dev/null
@@ -1,253 +0,0 @@
-#include <cstdlib>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkRGBAPixel.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <itkImageFileReader.h>
-#include <itkMinimumMaximumImageCalculator.h>
-#include <itkInvertIntensityImageFilter.h>
-#include <itkDanielssonDistanceMapImageFilter.h>
-#include <itkImageFileWriter.h>
-
-#include <vtkCamera.h>
-#include <vtkImageActor.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSeedRepresentation.h>
-#include <vtkSeedWidget.h>
-#include <vtkSmartPointer.h>
-
-#include <fpa/Image/Dijkstra.h>
-#include <fpa/Base/Functors/InvertCostFunction.h>
-#include <fpa/VTK/Image2DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TInputPixel;
-typedef float         TOutputPixel;
-
-typedef itk::Image< TInputPixel, Dim >            TInputImage;
-typedef itk::Image< TOutputPixel, Dim >           TOutputImage;
-typedef itk::ImageToVTKImageFilter< TInputImage > TVTKInputImage;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 5 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image output_image neighborhood_order stop_at_one_front"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  std::string output_image_fn = argv[ 2 ];
-  unsigned int neighborhood_order = std::atoi( argv[ 3 ] );
-  bool stop_at_one_front = ( std::atoi( argv[ 4 ] ) != 0 );
-
-  // Read image
-  itk::ImageFileReader< TInputImage >::Pointer input_image_reader =
-    itk::ImageFileReader< TInputImage >::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while reading image from " << input_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TInputImage::ConstPointer input_image = input_image_reader->GetOutput( );
-  TVTKInputImage::Pointer vtk_input_image = TVTKInputImage::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  // VTK visualization
-  vtkSmartPointer< vtkImageActor > actor =
-    vtkSmartPointer< vtkImageActor >::New( );
-  actor->SetInputData( vtk_input_image->GetOutput( ) );
-
-  vtkSmartPointer< vtkRenderer > renderer =
-    vtkSmartPointer< vtkRenderer >::New( );
-  renderer->SetBackground( 0.1, 0.2, 0.7 );
-  renderer->AddActor( actor );
-  vtkSmartPointer< vtkRenderWindow > window =
-    vtkSmartPointer< vtkRenderWindow >::New( );
-  window->SetSize( 800, 800 );
-  window->AddRenderer( renderer );
-
-  // Correct camera due to the loaded image
-  vtkCamera* camera = renderer->GetActiveCamera( );
-  camera->SetViewUp( 0, -1, 0 );
-  camera->SetPosition( 0, 0, -1 );
-  camera->SetFocalPoint( 0, 0, 0 );
-
-  // VTK interaction
-  vtkSmartPointer< vtkInteractorStyleImage > imageStyle =
-    vtkSmartPointer< vtkInteractorStyleImage >::New( );
-  vtkSmartPointer< vtkRenderWindowInteractor > interactor =
-    vtkSmartPointer< vtkRenderWindowInteractor >::New( );
-  interactor->SetInteractorStyle( imageStyle );
-  window->SetInteractor( interactor );
-
-  // Create the widget and its representation
-  vtkSmartPointer< vtkPointHandleRepresentation3D > handle =
-    vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
-  handle->GetProperty( )->SetColor( 1, 0, 0 );
-  vtkSmartPointer< vtkSeedRepresentation > rep =
-    vtkSmartPointer< vtkSeedRepresentation >::New( );
-  rep->SetHandleRepresentation( handle );
-
-  vtkSmartPointer< vtkSeedWidget > widget =
-    vtkSmartPointer< vtkSeedWidget >::New( );
-  widget->SetInteractor( interactor );
-  widget->SetRepresentation( rep );
-
-  // Let some interaction
-  interactor->Initialize( );
-  renderer->ResetCamera( );
-  window->Render( );
-  widget->On( );
-  interactor->Start( );
-
-  // Invert input image
-  itk::MinimumMaximumImageCalculator< TInputImage >::Pointer minmax =
-    itk::MinimumMaximumImageCalculator< TInputImage >::New( );
-  minmax->SetImage( input_image );
-  minmax->Compute( );
-
-  itk::InvertIntensityImageFilter< TInputImage >::Pointer invert =
-    itk::InvertIntensityImageFilter< TInputImage >::New( );
-  invert->SetInput( input_image );
-  invert->SetMaximum( minmax->GetMaximum( ) );
-
-  itk::DanielssonDistanceMapImageFilter< TInputImage, TOutputImage >::Pointer dmap =
-    itk::DanielssonDistanceMapImageFilter< TInputImage, TOutputImage >::New( );
-  dmap->SetInput( invert->GetOutput( ) );
-  dmap->InputIsBinaryOn( );
-  dmap->SquaredDistanceOn( );
-  dmap->UseImageSpacingOn( );
-  dmap->Update( );
-
-  typedef fpa::Base::Functors::InvertCostFunction< TOutputPixel > TFunction;
-  TFunction::Pointer function = TFunction::New( );
-
-  // Prepare region grow filter
-  typedef fpa::Image::Dijkstra< TOutputImage, TOutputImage > TFilter;
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( dmap->GetOutput( ) );
-  filter->SetConversionFunction( function );
-  filter->SetNeighborhoodOrder( neighborhood_order );
-  filter->SetStopAtOneFront( stop_at_one_front );
-
-  // Get user-given seeds
-  for( unsigned int s = 0; s < rep->GetNumberOfSeeds( ); s++ )
-  {
-    double pos[ 3 ];
-    rep->GetSeedWorldPosition( s, pos );
-
-    TInputImage::PointType pnt;
-    pnt[ 0 ] = TInputImage::PointType::ValueType( pos[ 0 ] );
-    pnt[ 1 ] = TInputImage::PointType::ValueType( pos[ 1 ] );
-
-    TInputImage::IndexType idx;
-    if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-      filter->AddSeed( idx, 0 );
-
-  } // rof
-
-  // Prepare graphical debugger
-  typedef fpa::VTK::Image2DObserver< TFilter, vtkRenderWindow > TDebugger;
-  TDebugger::Pointer debugger = TDebugger::New( );
-  debugger->SetRenderWindow( window );
-  debugger->SetRenderPercentage( 0.001 );
-  filter->AddObserver( itk::AnyEvent( ), debugger );
-  filter->ThrowEventsOn( );
-
-  // Go!
-  filter->Update( );
-
-  // Save final total cost map
-  itk::ImageFileWriter< TOutputImage >::Pointer output_image_writer =
-    itk::ImageFileWriter< TOutputImage >::New( );
-  output_image_writer->SetFileName( output_image_fn );
-  output_image_writer->SetInput( filter->GetOutput( ) );
-  try
-  {
-    output_image_writer->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while writing image to " << output_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-
-  // Draw the path between the two seeds
-  if( filter->GetNumberOfSeeds( ) > 1 )
-  {
-    TInputImage::IndexType a = filter->GetSeed( 0 );
-    TInputImage::IndexType b =
-      filter->GetSeed( filter->GetNumberOfSeeds( ) - 1 );
-
-    std::vector< TInputImage::IndexType > path;
-    filter->GetMinimumSpanningTree( )->GetPath( path, a, b );
-
-    typedef itk::Image< itk::RGBAPixel< unsigned char >, Dim > TColorImage;
-    TColorImage::Pointer path_image = TColorImage::New( );
-    path_image->SetLargestPossibleRegion(
-      input_image->GetLargestPossibleRegion( )
-      );
-    path_image->SetRequestedRegion( input_image->GetRequestedRegion( ) );
-    path_image->SetBufferedRegion( input_image->GetBufferedRegion( ) );
-    path_image->SetSpacing( input_image->GetSpacing( ) );
-    path_image->SetOrigin( input_image->GetOrigin( ) );
-    path_image->SetDirection( input_image->GetDirection( ) );
-    path_image->Allocate( );
-
-    unsigned char background[ 4 ] = { 0, 0, 0, 0 };
-    unsigned char color[ 4 ] = { 255, 0, 0, 255 };
-    path_image->FillBuffer( itk::RGBAPixel< unsigned char >( background ) );
-
-    for( unsigned int pId = 0; pId < path.size( ); ++pId )
-      path_image->SetPixel(
-        path[ pId ], itk::RGBAPixel< unsigned char >( color )
-        );
-
-    itk::ImageToVTKImageFilter< TColorImage >::Pointer vtk_path_image =
-      itk::ImageToVTKImageFilter< TColorImage >::New( );
-    vtk_path_image->SetInput( path_image );
-    vtk_path_image->Update( );
-
-    vtkSmartPointer< vtkImageActor > path_image_actor =
-      vtkSmartPointer< vtkImageActor >::New( );
-    path_image_actor->SetInputData( vtk_path_image->GetOutput( ) );
-    renderer->AddActor( path_image_actor );
-
-    // More interaction
-    window->Render( );
-    widget->Off( );
-    interactor->Start( );
-
-  } // fi
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Image_Dijkstra_EndPointDetection.cxx b/appli/examples/example_Image_Dijkstra_EndPointDetection.cxx
deleted file mode 100644 (file)
index 9e79437..0000000
+++ /dev/null
@@ -1,331 +0,0 @@
-#include <cstdlib>
-#include <ctime>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <itkSignedMaurerDistanceMapImageFilter.h>
-
-#include <vtkOutlineSource.h>
-
-#include <fpa/Base/Functors/InvertCostFunction.h>
-#include <fpa/Image/DijkstraWithEndPointDetection.h>
-#include <fpa/VTK/Image3DObserver.h>
-#include <fpa/IO/MinimumSpanningTreeWriter.h>
-#include <fpa/IO/UniqueValuesContainerWriter.h>
-#include <fpa/IO/MatrixValuesContainerWriter.h>
-#include <fpa/VTK/UniqueVerticesToPolyDataFilter.h>
-
-#include "fpa_Utility.h"
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 3;
-typedef unsigned char TPixel;
-typedef float         TScalar;
-typedef itk::Image< TPixel, Dim >  TImage;
-typedef itk::Image< TScalar, Dim > TScalarImage;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 7 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ] << std::endl
-      << "\tinput_image" << std::endl
-      << "\toutput_labels" << std::endl
-      << "\toutput_minimum_spanning_tree" << std::endl
-      << "\toutput_endpoints" << std::endl
-      << "\toutput_bifurcations" << std::endl
-      << "\toutput_branches" << std::endl
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  std::string output_labels_fn = argv[ 2 ];
-  std::string output_minimum_spanning_tree_fn = argv[ 3 ];
-  std::string output_endpoints_fn = argv[ 4 ];
-  std::string output_bifurcations_fn = argv[ 5 ];
-  std::string output_branches_fn = argv[ 6 ];
-
-  // Read image
-  TImage::Pointer input_image;
-  std::string err = fpa_Utility::ReadImage( input_image, input_image_fn );
-  if( err != "" )
-  {
-    std::cerr << err << std::endl;
-    return( 1 );
-
-  } // fi
-
-  // Show image and wait for, at least, one seed
-  itk::ImageToVTKImageFilter< TImage >::Pointer vtk_input_image =
-    itk::ImageToVTKImageFilter< TImage >::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  vtkSmartPointer<vtkOutlineSource> outline =
-    vtkSmartPointer<vtkOutlineSource>::New();
-  outline->SetBounds(vtk_input_image->GetOutput( )->GetBounds());
-
-  vtkSmartPointer<vtkPolyDataMapper> mapper =
-    vtkSmartPointer<vtkPolyDataMapper>::New( );
-  mapper->SetInputConnection( outline->GetOutputPort( ) );
-
-  vtkSmartPointer<vtkActor> actor =
-    vtkSmartPointer<vtkActor>::New( );
-  actor->SetMapper( mapper );
- vtkSmartPointer<vtkRenderer> aRenderer =
-    vtkSmartPointer<vtkRenderer>::New();
-  vtkSmartPointer<vtkRenderWindow> renWin =
-    vtkSmartPointer<vtkRenderWindow>::New();
-  renWin->AddRenderer(aRenderer);
-
-  vtkSmartPointer<vtkRenderWindowInteractor> iren =
-    vtkSmartPointer<vtkRenderWindowInteractor>::New();
-  iren->SetRenderWindow(renWin);
-
-  aRenderer->AddActor( actor );
-iren->Initialize();
-  iren->Start();
-
- /*
-  fpa_Utility::Viewer2DWithSeeds viewer;
-  viewer.SetImage( vtk_input_image->GetOutput( ) );
-  while( viewer.GetNumberOfSeeds( ) == 0 )
-    viewer.Start( );
-  */
-
-  // Compute squared distance map
-  itk::SignedMaurerDistanceMapImageFilter< TImage, TScalarImage >::Pointer
-    dmap =
-    itk::SignedMaurerDistanceMapImageFilter< TImage, TScalarImage >::New( );
-  dmap->SetInput( input_image );
-  dmap->SetBackgroundValue( TPixel( 0 ) );
-  dmap->InsideIsPositiveOn( );
-  dmap->SquaredDistanceOn( );
-  dmap->UseImageSpacingOn( );
-
-  std::time_t start, end;
-  std::time( &start );
-  dmap->Update( );
-  std::time( &end );
-  std::cout
-    << "Distance map time = "
-    << std::difftime( end, start )
-    << "s." << std::endl;
-
-  // Prepare cost conversion function
-  typedef fpa::Base::Functors::InvertCostFunction< TScalar > TCostFunction;
-  TCostFunction::Pointer cost_f = TCostFunction::New( );
-
-  // Prepare Dijkstra filter
-  typedef fpa::Image::
-    DijkstraWithEndPointDetection< TScalarImage, TScalarImage > TFilter;
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( dmap->GetOutput( ) );
-  filter->SetConversionFunction( cost_f );
-  filter->SetNeighborhoodOrder( 2 );
-  filter->StopAtOneFrontOff( );
-
-  // Associate seed
-  TImage::PointType pnt;
-  TImage::IndexType idx;
-  /*
-    viewer.GetSeed( pnt, 0 );
-  */
-  pnt[ 0 ] = 0.879066;
-  pnt[ 1 ] =  -109.36591;
-  pnt[ 2 ] =  1942.480988; 
-
-  if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-    filter->AddSeed( idx, 0 );
-
-  // Prepare graphical debugger
-  typedef fpa::VTK::Image3DObserver< TFilter, vtkRenderWindow > TDebugger;
-  TDebugger::Pointer debugger = TDebugger::New( );
-  debugger->SetRenderWindow( renWin );
-  debugger->SetRenderPercentage( 0.0001 );
-  filter->AddObserver( itk::AnyEvent( ), debugger );
-  filter->ThrowEventsOn( );
-
-  // Go!
-  std::time( &start );
-  filter->Update( );
-  std::time( &end );
-  std::cout
-    << "Extraction time = "
-    << std::difftime( end, start )
-    << "s." << std::endl;
-
-  // Create new actors
-  typedef vtkSmartPointer< fpa::VTK::UniqueVerticesToPolyDataFilter< TFilter::TUniqueVertices, TFilter::TInputImage > > TVertices2PD;
-
-  TVertices2PD endpoints2pd = TVertices2PD::New( );
-  endpoints2pd->SetInput( filter->GetEndPoints( ) );
-  endpoints2pd->SetImage( filter->GetInput( ) );
-  endpoints2pd->Update( );
-
-  vtkSmartPointer< vtkPolyDataMapper > endpoints_mapper =
-    vtkSmartPointer< vtkPolyDataMapper >::New( );
-  endpoints_mapper->SetInputConnection( endpoints2pd->GetOutputPort( ) );
-
-  vtkSmartPointer< vtkActor > endpoints_actor =
-    vtkSmartPointer< vtkActor >::New( );
-  endpoints_actor->SetMapper( endpoints_mapper );
-  endpoints_actor->GetProperty( )->SetColor( 0, 1, 0 );
-  endpoints_actor->GetProperty( )->SetPointSize( 5 );
-  aRenderer->AddActor( endpoints_actor );
-
-  TVertices2PD bifurcations2pd = TVertices2PD::New( );
-  bifurcations2pd->SetInput( filter->GetBifurcations( ) );
-  bifurcations2pd->SetImage( filter->GetInput( ) );
-  bifurcations2pd->Update( );
-
-  vtkSmartPointer< vtkPolyDataMapper > bifurcations_mapper =
-    vtkSmartPointer< vtkPolyDataMapper >::New( );
-  bifurcations_mapper->SetInputConnection( bifurcations2pd->GetOutputPort( ) );
-
-  vtkSmartPointer< vtkActor > bifurcations_actor =
-    vtkSmartPointer< vtkActor >::New( );
-  bifurcations_actor->SetMapper( bifurcations_mapper );
-  bifurcations_actor->GetProperty( )->SetColor( 1, 0, 0 );
-  bifurcations_actor->GetProperty( )->SetPointSize( 5 );
-  aRenderer->AddActor( bifurcations_actor );
-
-  // Some more interaction and finish
-iren->Initialize();
-  iren->Start();
-
-  // Save results
-  err = fpa_Utility::SaveImage( filter->GetLabelImage( ), output_labels_fn );
-  if( err != "" )
-    std::cerr << err << std::endl;
-
-  fpa::IO::MinimumSpanningTreeWriter< TFilter::TMinimumSpanningTree >::Pointer
-    mst_writer =
-    fpa::IO::MinimumSpanningTreeWriter< TFilter::TMinimumSpanningTree >::New( );
-  mst_writer->SetInput( filter->GetMinimumSpanningTree( ) );
-  mst_writer->SetFileName( output_minimum_spanning_tree_fn );
-  mst_writer->Update( );
-
-  fpa::IO::UniqueValuesContainerWriter< TFilter::TUniqueVertices >::Pointer
-    endpoints_writer =
-    fpa::IO::UniqueValuesContainerWriter< TFilter::TUniqueVertices >::New( );
-  endpoints_writer->SetInput( filter->GetEndPoints( ) );
-  endpoints_writer->SetFileName( output_endpoints_fn );
-  endpoints_writer->Update( );
-
-  fpa::IO::UniqueValuesContainerWriter< TFilter::TUniqueVertices >::Pointer
-    bifurcations_writer =
-    fpa::IO::UniqueValuesContainerWriter< TFilter::TUniqueVertices >::New( );
-  bifurcations_writer->SetInput( filter->GetBifurcations( ) );
-  bifurcations_writer->SetFileName( output_bifurcations_fn );
-  bifurcations_writer->Update( );
-
-  fpa::IO::MatrixValuesContainerWriter< TFilter::TBranches >::Pointer
-    branches_writer =
-    fpa::IO::MatrixValuesContainerWriter< TFilter::TBranches >::New( );
-  branches_writer->SetInput( filter->GetBranches( ) );
-  branches_writer->SetFileName( output_branches_fn );
-  branches_writer->Update( );
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
-
-/* TODO
-   vtkSmartPointer< vtkPoints > simple_branches_points =
-   vtkSmartPointer< vtkPoints >::New( );
-   vtkSmartPointer< vtkCellArray > simple_branches_cells =
-   vtkSmartPointer< vtkCellArray >::New( );
-
-   vtkSmartPointer< vtkPoints > detailed_branches_points =
-   vtkSmartPointer< vtkPoints >::New( );
-   vtkSmartPointer< vtkCellArray > detailed_branches_cells =
-   vtkSmartPointer< vtkCellArray >::New( );
-   vtkSmartPointer< vtkFloatArray > detailed_branches_scalars =
-   vtkSmartPointer< vtkFloatArray >::New( );
-
-   TFilter::TBranches::ConstIterator brIt = branches->Begin( );
-   for( ; brIt != branches->End( ); ++brIt )
-   {
-   // Branch's first point
-   TImage::PointType first_point;
-   input_image->TransformIndexToPhysicalPoint( brIt->first, first_point );
-   unsigned long first_id = simple_branches_points->GetNumberOfPoints( );
-   simple_branches_points->InsertNextPoint(
-   first_point[ 0 ], first_point[ 1 ], first_point[ 2 ]
-   );
-
-   TFilter::TBranches::ConstRowIterator brRowIt = branches->Begin( brIt );
-   for( ; brRowIt != branches->End( brIt ); ++brRowIt )
-   {
-   // Branch's second point
-   TImage::PointType second_point;
-   input_image->
-   TransformIndexToPhysicalPoint( brRowIt->first, second_point );
-   unsigned long second_id = simple_branches_points->GetNumberOfPoints( );
-   simple_branches_points->InsertNextPoint(
-   second_point[ 0 ], second_point[ 1 ], second_point[ 2 ]
-   );
-   simple_branches_cells->InsertNextCell( 2 );
-   simple_branches_cells->InsertCellPoint( first_id );
-   simple_branches_cells->InsertCellPoint( second_id );
-
-   // Detailed path
-   double pathId = double( brRowIt->second - 1 ) / double( nBranches - 1 );
-   TFilter::TVertices path;
-   mst->GetPath( path, brIt->first, brRowIt->first );
-   TFilter::TVertices::const_iterator pIt = path.begin( );
-   for( ; pIt != path.end( ); ++pIt )
-   {
-   TImage::PointType path_point;
-   input_image->TransformIndexToPhysicalPoint( *pIt, path_point );
-   detailed_branches_points->InsertNextPoint(
-   path_point[ 0 ], path_point[ 1 ], path_point[ 2 ]
-   );
-   detailed_branches_scalars->InsertNextTuple1( pathId );
-   if( pIt != path.begin( ) )
-   {
-   unsigned long nPoints =
-   detailed_branches_points->GetNumberOfPoints( );
-   detailed_branches_cells->InsertNextCell( 2 );
-   detailed_branches_cells->InsertCellPoint( nPoints - 2 );
-   detailed_branches_cells->InsertCellPoint( nPoints - 1 );
-
-   } // fi
-
-   } // rof
-
-   } // rof
-
-   } // rof
-   vtkSmartPointer< vtkPolyData > simple_branches_polydata =
-   vtkSmartPointer< vtkPolyData >::New( );
-   simple_branches_polydata->SetPoints( simple_branches_points );
-   simple_branches_polydata->SetLines( simple_branches_cells );
-   view.AddPolyData( simple_branches_polydata, 1, 0, 1, 1 );
-
-   vtkSmartPointer< vtkPolyData > detailed_branches_polydata =
-   vtkSmartPointer< vtkPolyData >::New( );
-   detailed_branches_polydata->SetPoints( detailed_branches_points );
-   detailed_branches_polydata->SetLines( detailed_branches_cells );
-   detailed_branches_polydata->
-   GetPointData( )->SetScalars( detailed_branches_scalars );
-   view.AddPolyData( detailed_branches_polydata, 1 );
-
-   // Let some more interaction
-   view.Render( );
-   view.Start( );
-
-   return( 0 );
-   }
-*/
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Image_Dijkstra_EndPointDetection_WithoutVTK.cxx b/appli/examples/example_Image_Dijkstra_EndPointDetection_WithoutVTK.cxx
deleted file mode 100644 (file)
index 1a8b476..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-#include <cstdlib>
-#include <ctime>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-
-#include <itkImageFileReader.h>
-#include <itkMinimumMaximumImageCalculator.h>
-#include <itkShiftScaleImageFilter.h>
-
-#include <itkSignedMaurerDistanceMapImageFilter.h>
-
-#include <itkImageFileWriter.h>
-
-#include <fpa/Image/DijkstraWithEndPointDetection.h>
-#include <fpa/Base/Functors/InvertCostFunction.h>
-
-#include <fpa/IO/MinimumSpanningTreeWriter.h>
-#include <fpa/IO/UniqueValuesContainerWriter.h>
-#include <fpa/IO/MatrixValuesContainerWriter.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 3;
-typedef unsigned char TPixel;
-typedef float         TScalar;
-
-typedef itk::Image< TPixel, Dim >  TImage;
-typedef itk::Image< TScalar, Dim > TScalarImage;
-
-// -------------------------------------------------------------------------
-template< class I >
-void ReadImage( typename I::Pointer& image, const std::string& filename );
-
-template< class I >
-void SaveImage( const I* image, const std::string& filename );
-
-template< class I, class O >
-void DistanceMap(
-  const typename I::Pointer& input, typename O::Pointer& output
-  );
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 12 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ] << std::endl
-      << " input_image" << std::endl
-      << " seed_x seed_y seed_z" << std::endl
-      << " output_distancemap" << std::endl
-      << " output_costmap" << std::endl
-      << " output_labels" << std::endl
-      << " output_minimum_spanning_tree" << std::endl
-      << " output_endpoints" << std::endl
-      << " output_bifurcations" << std::endl
-      << " output_branches" << std::endl
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  double seed_x = std::atof( argv[ 2 ] );
-  double seed_y = std::atof( argv[ 3 ] );
-  double seed_z = std::atof( argv[ 4 ] );
-  std::string distancemap_fn = argv[ 5 ];
-  std::string output_costmap_fn = argv[ 6 ];
-  std::string output_labels_fn = argv[ 7 ];
-  std::string mst_output_fn = argv[ 8 ];
-  std::string endpoints_output_fn = argv[ 9 ];
-  std::string bifurcations_output_fn = argv[ 10 ];
-  std::string branches_output_fn = argv[ 11 ];
-
-  // Read image
-  TImage::Pointer input_image;
-  try
-  {
-    ReadImage< TImage >( input_image, input_image_fn );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error caught while reading \""
-      << input_image_fn << "\": " << err
-      << std::endl;
-    return( 1 );
-
-  } // yrt
-
-  // Get seed
-  double p[ 3 ];
-  TImage::PointType pnt;
-  TImage::IndexType seed;
-  pnt[ 0 ] = seed_x;
-  pnt[ 1 ] = seed_y;
-  pnt[ 2 ] = seed_z;
-  input_image->TransformPhysicalPointToIndex( pnt, seed );
-
-  // Compute squared distance map
-  TScalarImage::Pointer dmap;
-  DistanceMap< TImage, TScalarImage >( input_image, dmap );
-
-  // Prepare cost conversion function
-  typedef fpa::Base::Functors::InvertCostFunction< TScalar > TFunction;
-  TFunction::Pointer function = TFunction::New( );
-
-  // Prepare Dijkstra filter
-  typedef fpa::Image::DijkstraWithEndPointDetection< TScalarImage, TScalarImage > TFilter;
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( dmap );
-  filter->SetConversionFunction( function );
-  filter->SetNeighborhoodOrder( 2 );
-  filter->StopAtOneFrontOff( );
-  filter->AddSeed( seed, TScalar( 0 ) );
-
-  // Go!
-  std::time_t start, end;
-  std::time( &start );
-  filter->Update( );
-  std::time( &end );
-  std::cout
-    << "Extraction time = "
-    << std::difftime( end, start )
-    << " s." << std::endl;
-
-  // Outputs
-  const TFilter::TOutputImage* accumulated_costs = filter->GetOutput( );
-  const TFilter::TLabelImage* labeled_image = filter->GetLabelImage( );
-  const TFilter::TMinimumSpanningTree* mst = filter->GetMinimumSpanningTree( );
-  const TFilter::TUniqueVertices* endpoints = filter->GetEndPoints( );
-  const TFilter::TUniqueVertices* bifurcations = filter->GetBifurcations( );
-  const TFilter::TBranches* branches = filter->GetBranches( );
-  unsigned long nBranches = filter->GetNumberOfBranches( );
-
-  // Save outputs
-  SaveImage( dmap.GetPointer( ), distancemap_fn );
-  SaveImage( accumulated_costs, output_costmap_fn );
-  SaveImage( labeled_image, output_labels_fn );
-
-  fpa::IO::MinimumSpanningTreeWriter< TFilter::TMinimumSpanningTree >::Pointer
-    mst_writer =
-    fpa::IO::MinimumSpanningTreeWriter< TFilter::TMinimumSpanningTree >::New( );
-  mst_writer->SetInput( mst );
-  mst_writer->SetFileName( mst_output_fn );
-  mst_writer->Update( );
-
-  fpa::IO::UniqueValuesContainerWriter< TFilter::TUniqueVertices >::Pointer
-    endpoints_writer =
-    fpa::IO::UniqueValuesContainerWriter< TFilter::TUniqueVertices >::New( );
-  endpoints_writer->SetInput( endpoints );
-  endpoints_writer->SetFileName( endpoints_output_fn );
-  endpoints_writer->Update( );
-
-  fpa::IO::UniqueValuesContainerWriter< TFilter::TUniqueVertices >::Pointer
-    bifurcations_writer =
-    fpa::IO::UniqueValuesContainerWriter< TFilter::TUniqueVertices >::New( );
-  bifurcations_writer->SetInput( bifurcations );
-  bifurcations_writer->SetFileName( bifurcations_output_fn );
-  bifurcations_writer->Update( );
-
-  fpa::IO::MatrixValuesContainerWriter< TFilter::TBranches >::Pointer
-    branches_writer =
-    fpa::IO::MatrixValuesContainerWriter< TFilter::TBranches >::New( );
-  branches_writer->SetInput( branches );
-  branches_writer->SetFileName( branches_output_fn );
-  branches_writer->Update( );
-
-  return( 0 );
-}
-
-// -------------------------------------------------------------------------
-template< class I >
-void ReadImage( typename I::Pointer& image, const std::string& filename )
-{
-  typename itk::ImageFileReader< I >::Pointer reader =
-    itk::ImageFileReader< I >::New( );
-  reader->SetFileName( filename );
-  reader->Update( );
-
-  typename itk::MinimumMaximumImageCalculator< I >::Pointer minmax =
-    itk::MinimumMaximumImageCalculator< I >::New( );
-  minmax->SetImage( reader->GetOutput( ) );
-  minmax->Compute( );
-  double vmin = double( minmax->GetMinimum( ) );
-  double vmax = double( minmax->GetMaximum( ) );
-
-  typename itk::ShiftScaleImageFilter< I, I >::Pointer shift =
-    itk::ShiftScaleImageFilter< I, I >::New( );
-  shift->SetInput( reader->GetOutput( ) );
-  shift->SetScale( vmax - vmin );
-  shift->SetShift( vmin / ( vmax - vmin ) );
-  shift->Update( );
-
-  image = shift->GetOutput( );
-  image->DisconnectPipeline( );
-}
-
-// -------------------------------------------------------------------------
-template< class I >
-void SaveImage( const I* image, const std::string& filename )
-{
-  typename itk::ImageFileWriter< I >::Pointer writer =
-    itk::ImageFileWriter< I >::New( );
-  writer->SetInput( image );
-  writer->SetFileName( filename );
-  try
-  {
-    writer->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error saving \"" << filename << "\": " << err
-      << std::endl;
-
-  } // yrt
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void DistanceMap(
-  const typename I::Pointer& input, typename O::Pointer& output
-  )
-{
-  typename itk::SignedMaurerDistanceMapImageFilter< I, O >::Pointer dmap =
-    itk::SignedMaurerDistanceMapImageFilter< I, O >::New( );
-  dmap->SetInput( input );
-  dmap->SetBackgroundValue( ( typename I::PixelType )( 0 ) );
-  dmap->InsideIsPositiveOn( );
-  dmap->SquaredDistanceOn( );
-  dmap->UseImageSpacingOn( );
-
-  std::time_t start, end;
-  std::time( &start );
-  dmap->Update( );
-  std::time( &end );
-  std::cout
-    << "Distance map time = "
-    << std::difftime( end, start )
-    << " s." << std::endl;
-
-  output = dmap->GetOutput( );
-  output->DisconnectPipeline( );
-}
-
-// eof - $RCSfile$
-
diff --git a/appli/examples/example_Image_Dijkstra_LabelSkeleton.cxx b/appli/examples/example_Image_Dijkstra_LabelSkeleton.cxx
deleted file mode 100644 (file)
index 4e65d9d..0000000
+++ /dev/null
@@ -1,421 +0,0 @@
-#include <cstdlib>
-#include <ctime>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <itkImageFileReader.h>
-#include <itkImageFileWriter.h>
-
-#include <fpa/Image/Functors/ImageCostFunction.h>
-#include <fpa/Image/DijkstraWithEndPointDetection.h>
-#include <fpa/VTK/ImageMPR.h>
-#include <fpa/VTK/Image3DObserver.h>
-
-#include <fpa/IO/MinimumSpanningTreeWriter.h>
-#include <fpa/IO/UniqueValuesContainerWriter.h>
-#include <fpa/IO/MatrixValuesContainerWriter.h>
-
-#include <vtkCellArray.h>
-#include <vtkFloatArray.h>
-#include <vtkImageMarchingCubes.h>
-#include <vtkPoints.h>
-#include <vtkPolyData.h>
-#include <vtkSmartPointer.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 3;
-typedef unsigned char TPixel;
-typedef float         TScalar;
-
-typedef itk::Image< TPixel, Dim >            TImage;
-typedef itk::Image< TScalar, Dim >           TScalarImage;
-typedef itk::ImageToVTKImageFilter< TImage > TVTKInputImage;
-
-// -------------------------------------------------------------------------
-template< class I >
-void ReadImage( typename I::Pointer& image, const std::string& filename );
-
-template< class I >
-void SaveImage( const I* image, const std::string& filename );
-
-// -------------------------------------------------------------------------
-template< class F >
-class SkeletonCostFunction
-  : public fpa::Image::Functors::ImageCostFunction< typename F::TInputImage, typename F::TResult >
-{
-public:
-  typedef fpa::Image::Functors::ImageCostFunction< typename F::TInputImage, typename F::TResult > Superclass;
-  typedef SkeletonCostFunction            Self;
-  typedef itk::SmartPointer< Self >       Pointer;
-  typedef itk::SmartPointer< const Self > ConstPointer;
-
-  typedef typename Superclass::TInputImage TInputImage;
-  typedef typename Superclass::TResult     TResult;
-  typedef typename Superclass::TIndex      TIndex;
-
-public:
-  itkNewMacro( Self );
-  itkTypeMacro( SkeletonCostFunction, fpa_Image_Functors_ImageCostFunction );
-
-public:
-  virtual void SetInputImage( const TInputImage* img )
-    {
-      this->Superclass::SetInputImage( img );
-
-      typename TInputImage::SpacingType spac = img->GetSpacing( );
-      typename TInputImage::SpacingType::ValueType min_spac = spac[ 0 ];
-      for( unsigned int d = 1; d < TInputImage::ImageDimension; ++d )
-        min_spac = ( spac[ d ] < min_spac )? spac[ d ]: min_spac;
-      this->m_Distance = TResult( min_spac );
-    }
-
-  virtual TResult Evaluate( const TIndex& v, const TIndex& p ) const
-    {
-      TResult res = this->Superclass::Evaluate( v, p );
-      if( res > TResult( 0 ) )
-        return( this->m_Distance );
-      else
-        return( TResult( -1 ) );
-    }
-
-protected:
-  SkeletonCostFunction( )
-    : Superclass( )
-    { }
-  virtual ~SkeletonCostFunction( )
-    { }
-
-private:
-  // Purposely not implemented
-  SkeletonCostFunction( const Self& );
-  void operator=( const Self& );
-
-protected:
-  TResult m_Distance;
-};
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 11 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ] << std::endl
-      << " input_image" << std::endl
-      << " seed_x seed_y seed_z" << std::endl
-      << " output_costmap" << std::endl
-      << " output_labels" << std::endl
-      << " output_minimum_spanning_tree" << std::endl
-      << " output_endpoints" << std::endl
-      << " output_bifurcations" << std::endl
-      << " output_branches" << std::endl
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  std::string output_costmap_fn = argv[ 5 ];
-  std::string output_labels_fn = argv[ 6 ];
-  std::string mst_output_fn = argv[ 7 ];
-  std::string endpoints_output_fn = argv[ 8 ];
-  std::string bifurcations_output_fn = argv[ 9 ];
-  std::string branches_output_fn = argv[ 10 ];
-
-  // Get seed
-  TImage::PointType pnt;
-  pnt[ 0 ] = TImage::PointType::ValueType( std::atof( argv[ 2 ] ) );
-  pnt[ 1 ] = TImage::PointType::ValueType( std::atof( argv[ 3 ] ) );
-  pnt[ 2 ] = TImage::PointType::ValueType( std::atof( argv[ 4 ] ) );
-
-  // Read image
-  TImage::Pointer input_image;
-  try
-  {
-    ReadImage< TImage >( input_image, input_image_fn );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error caught while reading \""
-      << input_image_fn << "\": " << err
-      << std::endl;
-    return( 1 );
-
-  } // yrt
-
-  TVTKInputImage::Pointer vtk_input_image = TVTKInputImage::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  // Show input image and let some interaction
-  fpa::VTK::ImageMPR view;
-  view.SetBackground( 0.3, 0.2, 0.8 );
-  view.SetSize( 500, 500 );
-  view.SetImage( vtk_input_image->GetOutput( ) );
-
-  vtkSmartPointer< vtkImageMarchingCubes > mc =
-    vtkSmartPointer< vtkImageMarchingCubes >::New( );
-  mc->SetInputData( vtk_input_image->GetOutput( ) );
-  mc->SetValue( 0, 1e-1 );
-  mc->Update( );
-  view.AddPolyData( mc->GetOutput( ), 1, 1, 1, 0.4 );
-
-  // Allow some interaction and wait for, at least, one seed
-  view.Render( );
-  view.Start( );
-
-  // Transform seed
-  TImage::IndexType seed;
-  input_image->TransformPhysicalPointToIndex( pnt, seed );
-
-  // Prepare Dijkstra filter
-  typedef fpa::Image::DijkstraWithEndPointDetection< TImage, TScalarImage > TFilter;
-  typedef SkeletonCostFunction< TFilter > TFunction;
-
-  TFunction::Pointer function = TFunction::New( );
-
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( input_image );
-  filter->SetCostFunction( function );
-  filter->SetNeighborhoodOrder( 2 );
-  filter->SetSafetyNeighborhoodSize( 0 );
-  filter->StopAtOneFrontOff( );
-  filter->CorrectSeedsOff( );
-  filter->CorrectEndPointsOff( );
-  filter->AddSeed( seed, TScalar( 0 ) );
-
-  // Prepare graphical debugger
-  typedef fpa::VTK::Image3DObserver< TFilter, vtkRenderWindow > TDebugger;
-  TDebugger::Pointer debugger = TDebugger::New( );
-  debugger->SetRenderWindow( view.GetWindow( ) );
-  debugger->SetRenderPercentage( 0.0000001 );
-  filter->AddObserver( itk::AnyEvent( ), debugger );
-  filter->ThrowEventsOn( );
-
-  // Go!
-  std::time_t start, end;
-  std::time( &start );
-  filter->Update( );
-  std::time( &end );
-  std::cout
-    << "Extraction time = "
-    << std::difftime( end, start )
-    << " s." << std::endl;
-
-  // Outputs
-  const TFilter::TOutputImage* accumulated_costs = filter->GetOutput( );
-  const TFilter::TLabelImage* labeled_image = filter->GetLabelImage( );
-  const TFilter::TMinimumSpanningTree* mst = filter->GetMinimumSpanningTree( );
-  const TFilter::TUniqueVertices* endpoints = filter->GetEndPoints( );
-  const TFilter::TUniqueVertices* bifurcations = filter->GetBifurcations( );
-  const TFilter::TBranches* branches = filter->GetBranches( );
-  unsigned long nBranches = filter->GetNumberOfBranches( );
-
-  // Save outputs
-  SaveImage( accumulated_costs, output_costmap_fn );
-  SaveImage( labeled_image, output_labels_fn );
-
-  fpa::IO::MinimumSpanningTreeWriter< TFilter::TMinimumSpanningTree >::Pointer
-    mst_writer =
-    fpa::IO::MinimumSpanningTreeWriter< TFilter::TMinimumSpanningTree >::New( );
-  mst_writer->SetInput( mst );
-  mst_writer->SetFileName( mst_output_fn );
-  mst_writer->Update( );
-
-  fpa::IO::UniqueValuesContainerWriter< TFilter::TUniqueVertices >::Pointer
-    endpoints_writer =
-    fpa::IO::UniqueValuesContainerWriter< TFilter::TUniqueVertices >::New( );
-  endpoints_writer->SetInput( endpoints );
-  endpoints_writer->SetFileName( endpoints_output_fn );
-  endpoints_writer->Update( );
-
-  fpa::IO::UniqueValuesContainerWriter< TFilter::TUniqueVertices >::Pointer
-    bifurcations_writer =
-    fpa::IO::UniqueValuesContainerWriter< TFilter::TUniqueVertices >::New( );
-  bifurcations_writer->SetInput( bifurcations );
-  bifurcations_writer->SetFileName( bifurcations_output_fn );
-  bifurcations_writer->Update( );
-
-  fpa::IO::MatrixValuesContainerWriter< TFilter::TBranches >::Pointer
-    branches_writer =
-    fpa::IO::MatrixValuesContainerWriter< TFilter::TBranches >::New( );
-  branches_writer->SetInput( branches );
-  branches_writer->SetFileName( branches_output_fn );
-  branches_writer->Update( );
-
-  // Show endpoints
-  vtkSmartPointer< vtkPoints > endpoints_points =
-    vtkSmartPointer< vtkPoints >::New( );
-  vtkSmartPointer< vtkCellArray > endpoints_cells =
-    vtkSmartPointer< vtkCellArray >::New( );
-  for(
-    TFilter::TUniqueVertices::ConstIterator epIt = endpoints->Begin( );
-    epIt != endpoints->End( );
-    ++epIt
-    )
-  {
-    TImage::PointType pnt;
-    input_image->TransformIndexToPhysicalPoint( *epIt, pnt );
-    endpoints_points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
-    endpoints_cells->InsertNextCell( 1 );
-    endpoints_cells->
-      InsertCellPoint( endpoints_points->GetNumberOfPoints( ) - 1 );
-
-  } // rof
-  vtkSmartPointer< vtkPolyData > endpoints_polydata =
-    vtkSmartPointer< vtkPolyData >::New( );
-  endpoints_polydata->SetPoints( endpoints_points );
-  endpoints_polydata->SetVerts( endpoints_cells );
-  view.AddPolyData( endpoints_polydata, 0, 0, 1, 1 );
-
-  // Show bifurcations
-  vtkSmartPointer< vtkPoints > bifurcations_points =
-    vtkSmartPointer< vtkPoints >::New( );
-  vtkSmartPointer< vtkCellArray > bifurcations_cells =
-    vtkSmartPointer< vtkCellArray >::New( );
-  for(
-    TFilter::TUniqueVertices::ConstIterator bfIt = bifurcations->Begin( );
-    bfIt != bifurcations->End( );
-    ++bfIt
-    )
-  {
-    TImage::PointType pnt;
-    input_image->TransformIndexToPhysicalPoint( *bfIt, pnt );
-    bifurcations_points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
-    bifurcations_cells->InsertNextCell( 1 );
-    bifurcations_cells->
-      InsertCellPoint( bifurcations_points->GetNumberOfPoints( ) - 1 );
-
-  } // rof
-  vtkSmartPointer< vtkPolyData > bifurcations_polydata =
-    vtkSmartPointer< vtkPolyData >::New( );
-  bifurcations_polydata->SetPoints( bifurcations_points );
-  bifurcations_polydata->SetVerts( bifurcations_cells );
-  view.AddPolyData( bifurcations_polydata, 0, 1, 0, 1 );
-
-  // Show branches (simple and detailed)
-  vtkSmartPointer< vtkPoints > simple_branches_points =
-    vtkSmartPointer< vtkPoints >::New( );
-  vtkSmartPointer< vtkCellArray > simple_branches_cells =
-    vtkSmartPointer< vtkCellArray >::New( );
-
-  vtkSmartPointer< vtkPoints > detailed_branches_points =
-    vtkSmartPointer< vtkPoints >::New( );
-  vtkSmartPointer< vtkCellArray > detailed_branches_cells =
-    vtkSmartPointer< vtkCellArray >::New( );
-  vtkSmartPointer< vtkFloatArray > detailed_branches_scalars =
-    vtkSmartPointer< vtkFloatArray >::New( );
-
-  TFilter::TBranches::ConstIterator brIt = branches->Begin( );
-  for( ; brIt != branches->End( ); ++brIt )
-  {
-    // Branch's first point
-    TImage::PointType first_point;
-    input_image->TransformIndexToPhysicalPoint( brIt->first, first_point );
-    unsigned long first_id = simple_branches_points->GetNumberOfPoints( );
-    simple_branches_points->InsertNextPoint(
-      first_point[ 0 ], first_point[ 1 ], first_point[ 2 ]
-      );
-
-    TFilter::TBranches::ConstRowIterator brRowIt = branches->Begin( brIt );
-    for( ; brRowIt != branches->End( brIt ); ++brRowIt )
-    {
-      // Branch's second point
-      TImage::PointType second_point;
-      input_image->
-        TransformIndexToPhysicalPoint( brRowIt->first, second_point );
-      unsigned long second_id = simple_branches_points->GetNumberOfPoints( );
-      simple_branches_points->InsertNextPoint(
-        second_point[ 0 ], second_point[ 1 ], second_point[ 2 ]
-        );
-      simple_branches_cells->InsertNextCell( 2 );
-      simple_branches_cells->InsertCellPoint( first_id );
-      simple_branches_cells->InsertCellPoint( second_id );
-
-      // Detailed path
-      double pathId = double( brRowIt->second - 1 ) / double( nBranches - 1 );
-      TFilter::TVertices path;
-      mst->GetPath( path, brIt->first, brRowIt->first );
-      TFilter::TVertices::const_iterator pIt = path.begin( );
-      for( ; pIt != path.end( ); ++pIt )
-      {
-        TImage::PointType path_point;
-        input_image->TransformIndexToPhysicalPoint( *pIt, path_point );
-        detailed_branches_points->InsertNextPoint(
-          path_point[ 0 ], path_point[ 1 ], path_point[ 2 ]
-          );
-        detailed_branches_scalars->InsertNextTuple1( pathId );
-        if( pIt != path.begin( ) )
-        {
-          unsigned long nPoints =
-            detailed_branches_points->GetNumberOfPoints( );
-          detailed_branches_cells->InsertNextCell( 2 );
-          detailed_branches_cells->InsertCellPoint( nPoints - 2 );
-          detailed_branches_cells->InsertCellPoint( nPoints - 1 );
-
-        } // fi
-
-      } // rof
-
-    } // rof
-
-  } // rof
-  vtkSmartPointer< vtkPolyData > simple_branches_polydata =
-    vtkSmartPointer< vtkPolyData >::New( );
-  simple_branches_polydata->SetPoints( simple_branches_points );
-  simple_branches_polydata->SetLines( simple_branches_cells );
-  view.AddPolyData( simple_branches_polydata, 1, 0, 1, 1 );
-
-  vtkSmartPointer< vtkPolyData > detailed_branches_polydata =
-    vtkSmartPointer< vtkPolyData >::New( );
-  detailed_branches_polydata->SetPoints( detailed_branches_points );
-  detailed_branches_polydata->SetLines( detailed_branches_cells );
-  detailed_branches_polydata->
-    GetPointData( )->SetScalars( detailed_branches_scalars );
-  view.AddPolyData( detailed_branches_polydata, 1 );
-
-  // Let some more interaction
-  view.Render( );
-  view.Start( );
-
-  return( 0 );
-}
-
-// -------------------------------------------------------------------------
-template< class I >
-void ReadImage( typename I::Pointer& image, const std::string& filename )
-{
-  typename itk::ImageFileReader< I >::Pointer reader =
-    itk::ImageFileReader< I >::New( );
-  reader->SetFileName( filename );
-  reader->Update( );
-  image = reader->GetOutput( );
-  image->DisconnectPipeline( );
-}
-
-// -------------------------------------------------------------------------
-template< class I >
-void SaveImage( const I* image, const std::string& filename )
-{
-  typename itk::ImageFileWriter< I >::Pointer writer =
-    itk::ImageFileWriter< I >::New( );
-  writer->SetInput( image );
-  writer->SetFileName( filename );
-  try
-  {
-    writer->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error saving \"" << filename << "\": " << err
-      << std::endl;
-
-  } // yrt
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Image_IncrementalRegionGrow_Thresholds.cxx b/appli/examples/example_Image_IncrementalRegionGrow_Thresholds.cxx
deleted file mode 100644 (file)
index 3261b60..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-#include <cstdlib>
-#include <iostream>
-#include <fstream>
-#include <string>
-#include <vector>
-
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <itkImageFileReader.h>
-#include <itkImageFileWriter.h>
-
-#include <fpa/VTK/ImageMPR.h>
-#include <fpa/Image/IncrementalRegionGrow.h>
-#include <fpa/Image/Functors/RegionGrowThresholdFunction.h>
-
-/*
-  #include <vtkCamera.h>
-  #include <vtkImageActor.h>
-  #include <vtkInteractorStyleImage.h>
-  #include <vtkPointHandleRepresentation3D.h>
-  #include <vtkProperty.h>
-  #include <vtkRenderer.h>
-  #include <vtkRenderWindow.h>
-  #include <vtkRenderWindowInteractor.h>
-  #include <vtkSeedRepresentation.h>
-  #include <vtkSeedWidget.h>
-  #include <vtkSmartPointer.h>
-
-  #include <fpa/Image/Functors/ImageAbsoluteDifferenceCostFunction.h>
-  #include <fpa/VTK/Image3DObserver.h>
-*/
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 3;
-typedef short TInputPixel;
-typedef short TOutputPixel;
-
-typedef itk::Image< TInputPixel, Dim >            TInputImage;
-typedef itk::Image< TOutputPixel, Dim >           TOutputImage;
-typedef itk::ImageToVTKImageFilter< TInputImage > TVTKInputImage;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 8 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ] << std::endl
-      << "\tinput_image" << std::endl
-      << "\toutput_image" << std::endl
-      << "\tneighborhood_order" << std::endl
-      << "\tstop_at_one_front" << std::endl
-      << "\tinit_threshold" << std::endl
-      << "\tend_threshold" << std::endl
-      << "\tsamples" << std::endl
-      << "\t[input_seeds]" << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  std::string output_image_fn = argv[ 2 ];
-  unsigned int neighborhood_order = std::atoi( argv[ 3 ] );
-  bool stop_at_one_front = ( std::atoi( argv[ 4 ] ) != 0 );
-  TInputPixel init_threshold = TInputPixel( std::atof( argv[ 5 ] ) );
-  TInputPixel end_threshold = TInputPixel( std::atof( argv[ 6 ] ) );
-  unsigned int samples = TInputPixel( std::atof( argv[ 7 ] ) );
-  std::string input_seeds_fn = ( argc >= 9 )? argv[ 8 ]: "";
-
-  // Read image
-  itk::ImageFileReader< TInputImage >::Pointer input_image_reader =
-    itk::ImageFileReader< TInputImage >::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while reading image from " << input_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TInputImage::ConstPointer input_image = input_image_reader->GetOutput( );
-  TVTKInputImage::Pointer vtk_input_image = TVTKInputImage::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  // Show input image and let some interaction
-  fpa::VTK::ImageMPR view;
-  view.SetBackground( 0.3, 0.2, 0.8 );
-  view.SetSize( 600, 600 );
-  view.SetImage( vtk_input_image->GetOutput( ) );
-  view.Render( );
-
-  // Read seeds
-  std::vector< TInputImage::IndexType > input_seeds;
-  if( input_seeds_fn != "" )
-  {
-    std::ifstream input_seeds_str( input_seeds_fn.c_str( ) );
-    if( input_seeds_str )
-    {
-      unsigned int nSeeds;
-      input_seeds_str >> nSeeds;
-      for( unsigned int i = 0; i < nSeeds; ++i )
-      {
-        TInputImage::PointType pnt;
-        input_seeds_str >> pnt[ 0 ] >> pnt[ 1 ] >> pnt[ 2 ];
-
-        TInputImage::IndexType idx;
-        input_image_reader->GetOutput( )->
-          TransformPhysicalPointToIndex( pnt, idx );
-        input_seeds.push_back( idx );
-
-        view.AddSeed( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
-
-      } // rof
-      input_seeds_str.close( );
-    }
-    else
-      std::cerr << "Error reading \"" << input_seeds_fn << "\"" << std::endl;
-
-  } // fi
-
-  // Allow some interaction
-  view.Render( );
-  if( input_seeds.size( ) == 0 )
-  {
-    while( view.GetNumberOfSeeds( ) == 0 )
-      view.Start( );
-
-    for( unsigned int i = 0; i < view.GetNumberOfSeeds( ); ++i )
-    {
-      double p[ 3 ];
-      view.GetSeed( i, p );
-
-      TInputImage::PointType pnt;
-      pnt[ 0 ] = p[ 0 ];
-      pnt[ 1 ] = p[ 1 ];
-      pnt[ 2 ] = p[ 2 ];
-
-      TInputImage::IndexType idx;
-      input_image_reader->GetOutput( )->
-        TransformPhysicalPointToIndex( pnt, idx );
-      input_seeds.push_back( idx );
-
-    } // rof
-  }
-  else
-    view.Start( );
-
-  // Prepare region grow filter and cost function
-  typedef fpa::Image::
-    IncrementalRegionGrow< TInputImage, TOutputImage > TFilter;
-  typedef fpa::Image::Functors::
-    RegionGrowThresholdFunction< TInputImage > TFunction;
-
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( input_image_reader->GetOutput( ) );
-
-  /*
-    typedef fpa::Image::Dijkstra< TInputImage, TOutputImage > TFilter;
-    typedef fpa::Image::Functors::
-    ImageAbsoluteDifferenceCostFunction< TFilter::TInputImage, TFilter::TResult >
-    TCost;
-
-    TCost::Pointer cost = TCost::New( );
-
-    TFilter::Pointer filter = TFilter::New( );
-    filter->SetInput( input_image );
-    filter->SetCostFunction( cost );
-    filter->SetConversionFunction( NULL );
-    filter->SetNeighborhoodOrder( neighborhood_order );
-    filter->SetStopAtOneFront( stop_at_one_front );
-
-    // Get user-given seeds
-    std::ifstream input_seeds_str( input_seeds_fn.c_str( ) );
-    if( !input_seeds_str )
-    {
-    std::cerr << "Error opening \"" << input_seeds_fn << "\"" << std::endl;
-    return( 1 );
-
-    } // fi
-
-    unsigned int nSeeds;
-    input_seeds_str >> nSeeds;
-    std::vector< TInputImage::IndexType > input_seeds;
-    for( unsigned int s = 0; s < nSeeds; s++ )
-    {
-    TInputImage::IndexType idx;
-    input_seeds_str >> idx[ 0 ] >> idx[ 1 ] >> idx[ 2 ];
-    input_seeds.push_back( idx );
-
-    } // rof
-    input_seeds_str.close( );
-
-    filter->AddSeed( input_seeds[ init_seed ], 0 );
-    filter->AddSeed( input_seeds[ end_seed ], 0 );
-
-    // Prepare graphical debugger
-    typedef fpa::VTK::Image3DObserver< TFilter, vtkRenderWindow > TDebugger;
-    TDebugger::Pointer debugger = TDebugger::New( );
-    debugger->SetRenderWindow( view.GetWindow( ) );
-    debugger->SetRenderPercentage( 0.0001 );
-    filter->AddObserver( itk::AnyEvent( ), debugger );
-    filter->ThrowEventsOn( );
-
-    // Go!
-    filter->Update( );
-
-    // Save final total cost map
-    itk::ImageFileWriter< TOutputImage >::Pointer output_image_writer =
-    itk::ImageFileWriter< TOutputImage >::New( );
-    output_image_writer->SetFileName( output_image_fn );
-    output_image_writer->SetInput( filter->GetOutput( ) );
-    try
-    {
-    output_image_writer->Update( );
-    }
-    catch( itk::ExceptionObject& err )
-    {
-    std::cerr
-    << "Error while writing image to " << output_image_fn << ": "
-    << err << std::endl;
-    return( 1 );
-
-    } // yrt
-  */
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Image_RegionGrow_AllPixels.cxx b/appli/examples/example_Image_RegionGrow_AllPixels.cxx
deleted file mode 100644 (file)
index db7db5f..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-#include <cstdlib>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <fpa/Image/RegionGrow.h>
-#include <fpa/Image/Functors/RegionGrowAllBelongsFunction.h>
-#include <fpa/VTK/Image2DObserver.h>
-
-#include "fpa_Utility.h"
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TPixel;
-typedef itk::Image< TPixel, Dim > TImage;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 4 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image neighborhood_order stop_at_one_front"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  unsigned int neighborhood_order = std::atoi( argv[ 2 ] );
-  bool stop_at_one_front = ( std::atoi( argv[ 3 ] ) != 0 );
-
-  // Read image
-  TImage::Pointer input_image;
-  std::string err = fpa_Utility::ReadImage( input_image, input_image_fn );
-  if( err != "" )
-  {
-    std::cerr << err << std::endl;
-    return( 1 );
-
-  } // fi
-
-  // Show image and wait for, at least, one seed
-  itk::ImageToVTKImageFilter< TImage >::Pointer vtk_input_image =
-    itk::ImageToVTKImageFilter< TImage >::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  fpa_Utility::Viewer2DWithSeeds viewer;
-  viewer.SetImage( vtk_input_image->GetOutput( ) );
-  while( viewer.GetNumberOfSeeds( ) == 0 )
-    viewer.Start( );
-
-  // Region growing types
-  typedef fpa::Image::RegionGrow< TImage > TFilter;
-  typedef fpa::Image::Functors::
-    RegionGrowAllBelongsFunction< TImage > TFunction;
-
-  // Prepare region grow function
-  TFunction::Pointer function = TFunction::New( );
-
-  // Prepare region grow filter
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( input_image );
-  filter->SetGrowingFunction( function );
-  filter->SetNeighborhoodOrder( neighborhood_order );
-  filter->SetOutsideValue( TPixel( 0 ) );
-  filter->SetInsideValue( std::numeric_limits< TPixel >::max( ) );
-  filter->SetStopAtOneFront( stop_at_one_front );
-
-  // Associate seeds
-  for( unsigned long s = 0; s < viewer.GetNumberOfSeeds( ); ++s )
-  {
-    TImage::PointType pnt;
-    TImage::IndexType idx;
-    viewer.GetSeed( pnt, s );
-    if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-      filter->AddSeed( idx, 0 );
-
-  } // rof
-
-  // Prepare graphical debugger
-  typedef fpa::VTK::Image2DObserver< TFilter, vtkRenderWindow > TDebugger;
-  TDebugger::Pointer debugger = TDebugger::New( );
-  debugger->SetRenderWindow( viewer.Window );
-  debugger->SetRenderPercentage( 0.01 );
-  filter->AddObserver( itk::AnyEvent( ), debugger );
-  filter->ThrowEventsOn( );
-
-  // Go!
-  filter->Update( );
-
-  // Some more interaction and finish
-  viewer.Start( );
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Image_RegionGrow_AllRGBPixels.cxx b/appli/examples/example_Image_RegionGrow_AllRGBPixels.cxx
deleted file mode 100644 (file)
index c46c758..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <cstdlib>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkRGBPixel.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <fpa/Image/RegionGrow.h>
-#include <fpa/Image/Functors/RegionGrowAllBelongsFunction.h>
-#include <fpa/VTK/Image2DObserver.h>
-
-#include "fpa_Utility.h"
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TPixel;
-typedef itk::Image< itk::RGBPixel< TPixel >, Dim > TColorImage;
-typedef itk::Image< TPixel, Dim >                  TImage;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 4 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image neighborhood_order stop_at_one_front"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  unsigned int neighborhood_order = std::atoi( argv[ 2 ] );
-  bool stop_at_one_front = ( std::atoi( argv[ 3 ] ) != 0 );
-
-  // Read image
-  TColorImage::Pointer input_image;
-  std::string err = fpa_Utility::ReadImage( input_image, input_image_fn );
-  if( err != "" )
-  {
-    std::cerr << err << std::endl;
-    return( 1 );
-
-  } // fi
-
-  // Show image and wait for, at least, one seed
-  itk::ImageToVTKImageFilter< TColorImage >::Pointer vtk_input_image =
-    itk::ImageToVTKImageFilter< TColorImage >::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  fpa_Utility::Viewer2DWithSeeds viewer;
-  viewer.SetImage( vtk_input_image->GetOutput( ) );
-  while( viewer.GetNumberOfSeeds( ) == 0 )
-    viewer.Start( );
-
-  // Region growing types
-  typedef fpa::Image::RegionGrow< TColorImage, TImage > TFilter;
-  typedef fpa::Image::Functors::
-    RegionGrowAllBelongsFunction< TColorImage > TFunction;
-
-  // Prepare region grow function
-  TFunction::Pointer function = TFunction::New( );
-
-  // Prepare region grow filter
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( input_image );
-  filter->SetGrowingFunction( function );
-  filter->SetNeighborhoodOrder( neighborhood_order );
-  filter->SetOutsideValue( TPixel( 0 ) );
-  filter->SetInsideValue( std::numeric_limits< TPixel >::max( ) );
-  filter->SetStopAtOneFront( stop_at_one_front );
-
-  // Associate seeds
-  for( unsigned long s = 0; s < viewer.GetNumberOfSeeds( ); ++s )
-  {
-    TImage::PointType pnt;
-    TImage::IndexType idx;
-    viewer.GetSeed( pnt, s );
-    if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-      filter->AddSeed( idx, 0 );
-
-  } // rof
-
-  // Prepare graphical debugger
-  typedef fpa::VTK::Image2DObserver< TFilter, vtkRenderWindow > TDebugger;
-  TDebugger::Pointer debugger = TDebugger::New( );
-  debugger->SetRenderWindow( viewer.Window );
-  debugger->SetRenderPercentage( 0.01 );
-  filter->AddObserver( itk::AnyEvent( ), debugger );
-  filter->ThrowEventsOn( );
-
-  // Go!
-  filter->Update( );
-
-  // Some more interaction and finish
-  viewer.Start( );
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Image_RegionGrow_ConnectedPixels.cxx b/appli/examples/example_Image_RegionGrow_ConnectedPixels.cxx
deleted file mode 100644 (file)
index 4f65ce6..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-#include <cstdlib>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <fpa/Image/RegionGrow.h>
-#include <fpa/Image/Functors/RegionGrowThresholdFunction.h>
-#include <fpa/VTK/Image2DObserver.h>
-
-#include "fpa_Utility.h"
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TPixel;
-typedef itk::Image< TPixel, Dim > TImage;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 3 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image neighborhood_order"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  unsigned int neighborhood_order = std::atoi( argv[ 2 ] );
-
-  // Read image
-  TImage::Pointer input_image;
-  std::string err = fpa_Utility::ReadImage( input_image, input_image_fn );
-  if( err != "" )
-  {
-    std::cerr << err << std::endl;
-    return( 1 );
-
-  } // fi
-
-  // Show image and wait for, at least, one seed
-  itk::ImageToVTKImageFilter< TImage >::Pointer vtk_input_image =
-    itk::ImageToVTKImageFilter< TImage >::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  fpa_Utility::Viewer2DWithSeeds viewer;
-  viewer.SetImage( vtk_input_image->GetOutput( ) );
-  while( viewer.GetNumberOfSeeds( ) == 0 )
-    viewer.Start( );
-
-  // Region growing types
-  typedef fpa::Image::RegionGrow< TImage > TFilter;
-  typedef fpa::Image::Functors::
-    RegionGrowThresholdFunction< TImage > TFunction;
-
-  // Prepare region grow function
-  TFunction::Pointer function = TFunction::New( );
-
-  // Prepare region grow filter
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( input_image );
-  filter->SetGrowingFunction( function );
-  filter->SetNeighborhoodOrder( neighborhood_order );
-  filter->SetOutsideValue( TPixel( 0 ) );
-  filter->SetInsideValue( std::numeric_limits< TPixel >::max( ) );
-  filter->StopAtOneFrontOff( );
-
-  // Associate seed
-  TImage::PointType pnt;
-  TImage::IndexType idx;
-  viewer.GetSeed( pnt, 0 );
-  if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-    filter->AddSeed( idx, 0 );
-  function->SetLowerThreshold( input_image->GetPixel( idx ) );
-  function->SetUpperThreshold( input_image->GetPixel( idx ) );
-
-  // Prepare graphical debugger
-  typedef fpa::VTK::Image2DObserver< TFilter, vtkRenderWindow > TDebugger;
-  TDebugger::Pointer debugger = TDebugger::New( );
-  debugger->SetRenderWindow( viewer.Window );
-  debugger->SetRenderPercentage( 0.01 );
-  filter->AddObserver( itk::AnyEvent( ), debugger );
-  filter->ThrowEventsOn( );
-
-  // Go!
-  filter->Update( );
-
-  // Some more interaction and finish
-  viewer.Start( );
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Image_RegionGrow_ConnectedRGBPixels.cxx b/appli/examples/example_Image_RegionGrow_ConnectedRGBPixels.cxx
deleted file mode 100644 (file)
index 0dc0137..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-#include <cstdlib>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkRGBPixel.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <fpa/Image/RegionGrow.h>
-#include <fpa/Image/Functors/RegionGrowThresholdFunction.h>
-#include <fpa/VTK/Image2DObserver.h>
-
-#include "fpa_Utility.h"
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TPixel;
-typedef itk::Image< itk::RGBPixel< TPixel >, Dim > TColorImage;
-typedef itk::Image< TPixel, Dim > TImage;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 3 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image neighborhood_order"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  unsigned int neighborhood_order = std::atoi( argv[ 2 ] );
-
-  // Read image
-  TColorImage::Pointer input_image;
-  std::string err = fpa_Utility::ReadImage( input_image, input_image_fn );
-  if( err != "" )
-  {
-    std::cerr << err << std::endl;
-    return( 1 );
-
-  } // fi
-
-  // Show image and wait for, at least, one seed
-  itk::ImageToVTKImageFilter< TColorImage >::Pointer vtk_input_image =
-    itk::ImageToVTKImageFilter< TColorImage >::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  fpa_Utility::Viewer2DWithSeeds viewer;
-  viewer.SetImage( vtk_input_image->GetOutput( ) );
-  while( viewer.GetNumberOfSeeds( ) == 0 )
-    viewer.Start( );
-
-  // Region growing types
-  typedef fpa::Image::RegionGrow< TColorImage, TImage > TFilter;
-  typedef fpa::Image::Functors::
-    RegionGrowThresholdFunction< TColorImage > TFunction;
-
-  // Prepare region grow function
-  TFunction::Pointer function = TFunction::New( );
-
-  // Prepare region grow filter
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( input_image );
-  filter->SetGrowingFunction( function );
-  filter->SetNeighborhoodOrder( neighborhood_order );
-  filter->SetOutsideValue( TPixel( 0 ) );
-  filter->SetInsideValue( std::numeric_limits< TPixel >::max( ) );
-  filter->StopAtOneFrontOff( );
-
-  // Associate seed
-  TImage::PointType pnt;
-  TImage::IndexType idx;
-  viewer.GetSeed( pnt, 0 );
-  if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-    filter->AddSeed( idx, 0 );
-  function->SetLowerThreshold( input_image->GetPixel( idx ) );
-  function->SetUpperThreshold( input_image->GetPixel( idx ) );
-
-  // Prepare graphical debugger
-  typedef fpa::VTK::Image2DObserver< TFilter, vtkRenderWindow > TDebugger;
-  TDebugger::Pointer debugger = TDebugger::New( );
-  debugger->SetRenderWindow( viewer.Window );
-  debugger->SetRenderPercentage( 0.01 );
-  filter->AddObserver( itk::AnyEvent( ), debugger );
-  filter->ThrowEventsOn( );
-
-  // Go!
-  filter->Update( );
-
-  // Some more interaction and finish
-  viewer.Start( );
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Image_RegionGrow_GaussianModelEstimation.cxx b/appli/examples/example_Image_RegionGrow_GaussianModelEstimation.cxx
deleted file mode 100644 (file)
index 914e3fa..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-#include <cstdlib>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
-#include <itkRGBPixel.h>
-
-#include <itkImageFileReader.h>
-
-#include <vtkCamera.h>
-#include <vtkImageActor.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSeedRepresentation.h>
-#include <vtkSeedWidget.h>
-#include <vtkSmartPointer.h>
-
-#include <fpa/Image/RegionGrow.h>
-#include <fpa/VTK/Image2DObserver.h>
-#include <fpa/Image/Functors/GaussianModelEstimatorFunction.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 2;
-typedef unsigned char TPixel;
-typedef float         TScalar;
-
-typedef itk::Image< itk::RGBPixel< TPixel >, Dim > TColorImage;
-typedef itk::Image< TPixel, Dim >                  TImage;
-typedef itk::ImageToVTKImageFilter< TColorImage >  TVTKImage;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 4 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image neighborhood_order support [model_file]"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  unsigned int neighborhood_order = std::atoi( argv[ 2 ] );
-  unsigned long support = std::atoi( argv[ 3 ] );
-
-  // Read image
-  itk::ImageFileReader< TColorImage >::Pointer input_image_reader =
-    itk::ImageFileReader< TColorImage >::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while reading image from " << input_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TColorImage::ConstPointer input_image = input_image_reader->GetOutput( );
-  TVTKImage::Pointer vtk_input_image = TVTKImage::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  // VTK visualization
-  vtkSmartPointer< vtkImageActor > actor =
-    vtkSmartPointer< vtkImageActor >::New( );
-  actor->SetInputData( vtk_input_image->GetOutput( ) );
-
-  vtkSmartPointer< vtkRenderer > renderer =
-    vtkSmartPointer< vtkRenderer >::New( );
-  renderer->SetBackground( 0.1, 0.2, 0.7 );
-  renderer->AddActor( actor );
-  vtkSmartPointer< vtkRenderWindow > window =
-    vtkSmartPointer< vtkRenderWindow >::New( );
-  window->SetSize( 800, 800 );
-  window->AddRenderer( renderer );
-
-  // Correct camera due to the loaded image
-  vtkCamera* camera = renderer->GetActiveCamera( );
-  camera->SetViewUp( 0, -1, 0 );
-  camera->SetPosition( 0, 0, -1 );
-  camera->SetFocalPoint( 0, 0, 0 );
-
-  // VTK interaction
-  vtkSmartPointer< vtkInteractorStyleImage > imageStyle =
-    vtkSmartPointer< vtkInteractorStyleImage >::New( );
-  vtkSmartPointer< vtkRenderWindowInteractor > interactor =
-    vtkSmartPointer< vtkRenderWindowInteractor >::New( );
-  interactor->SetInteractorStyle( imageStyle );
-  window->SetInteractor( interactor );
-
-  // Create the widget and its representation
-  vtkSmartPointer< vtkPointHandleRepresentation3D > handle =
-    vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
-  handle->GetProperty( )->SetColor( 1, 0, 0 );
-  vtkSmartPointer< vtkSeedRepresentation > rep =
-    vtkSmartPointer< vtkSeedRepresentation >::New( );
-  rep->SetHandleRepresentation( handle );
-
-  vtkSmartPointer< vtkSeedWidget > widget =
-    vtkSmartPointer< vtkSeedWidget >::New( );
-  widget->SetInteractor( interactor );
-  widget->SetRepresentation( rep );
-
-  // Let some interaction
-  interactor->Initialize( );
-  renderer->ResetCamera( );
-  window->Render( );
-  widget->On( );
-  interactor->Start( );
-
-  // Prepare region grow function
-  typedef fpa::Image::Functors::GaussianModelEstimatorFunction< TColorImage, TScalar > TFunction;
-  TFunction::Pointer function = TFunction::New( );
-  function->SetModelSupport( support );
-  if( argc > 4 )
-    function->LoadModelFromFile( argv[ 4 ] );
-  
-  // Prepare region grow filter
-  typedef fpa::Image::RegionGrow< TColorImage, TImage > TFilter;
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( input_image );
-  filter->SetMembershipFunction( function );
-  filter->SetNeighborhoodOrder( neighborhood_order );
-  filter->SetOutsideValue( TPixel( 0 ) );
-  filter->SetInsideValue( std::numeric_limits< TPixel >::max( ) );
-  filter->StopAtOneFrontOff( );
-
-  // Get user-given seeds
-  for( unsigned int s = 0; s < rep->GetNumberOfSeeds( ); s++ )
-  {
-    double pos[ 3 ];
-    rep->GetSeedWorldPosition( s, pos );
-
-    TImage::PointType pnt;
-    pnt[ 0 ] = TImage::PointType::ValueType( pos[ 0 ] );
-    pnt[ 1 ] = TImage::PointType::ValueType( pos[ 1 ] );
-
-    TImage::IndexType idx;
-    if( input_image->TransformPhysicalPointToIndex( pnt, idx ) )
-      filter->AddSeed( idx, 0 );
-
-  } // rof
-
-  // Prepare graphical debugger
-  typedef fpa::VTK::Image2DObserver< TFilter, vtkRenderWindow > TDebugger;
-  TDebugger::Pointer debugger = TDebugger::New( );
-  debugger->SetRenderWindow( window );
-  debugger->SetRenderPercentage( 0.001 );
-  filter->AddObserver( itk::AnyEvent( ), debugger );
-  filter->ThrowEventsOn( );
-
-  // Go!
-  filter->Update( );
-
-  window->Render( );
-  widget->Off( );
-  interactor->Start( );
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_IncrementalRegionGrow_Thresholds.cxx b/appli/examples/example_IncrementalRegionGrow_Thresholds.cxx
deleted file mode 100644 (file)
index 47affc1..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-#include <cstdlib>
-#include <iostream>
-#include <fstream>
-#include <limits>
-#include <string>
-#include <vector>
-
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <itkImageFileReader.h>
-#include <itkImageFileWriter.h>
-
-#include <vtkCamera.h>
-#include <vtkImageActor.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSeedRepresentation.h>
-#include <vtkSeedWidget.h>
-#include <vtkSmartPointer.h>
-
-#include <fpa/Image/Dijkstra.h>
-#include <fpa/Image/Functors/ImageAbsoluteDifferenceCostFunction.h>
-#include <fpa/VTK/ImageMPR.h>
-#include <fpa/VTK/Image3DObserver.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 3;
-typedef float TInputPixel;
-typedef float TOutputPixel;
-
-typedef itk::Image< TInputPixel, Dim >            TInputImage;
-typedef itk::Image< TOutputPixel, Dim >           TOutputImage;
-typedef itk::ImageToVTKImageFilter< TInputImage > TVTKInputImage;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 8 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ]
-      << " input_image input_seeds output_image"
-      << " neighborhood_order stop_at_one_front"
-      << " init_seed end_seed"
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  std::string input_seeds_fn = argv[ 2 ];
-  std::string output_image_fn = argv[ 3 ];
-  unsigned int neighborhood_order = std::atoi( argv[ 4 ] );
-  bool stop_at_one_front = ( std::atoi( argv[ 5 ] ) != 0 );
-  unsigned int init_seed = std::atoi( argv[ 6 ] );
-  unsigned int end_seed = std::atoi( argv[ 7 ] );
-
-  // Read image
-  itk::ImageFileReader< TInputImage >::Pointer input_image_reader =
-    itk::ImageFileReader< TInputImage >::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  try
-  {
-    input_image_reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while reading image from " << input_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-  TInputImage::ConstPointer input_image = input_image_reader->GetOutput( );
-  TVTKInputImage::Pointer vtk_input_image = TVTKInputImage::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  // Show input image and let some interaction
-  fpa::VTK::ImageMPR view;
-  view.SetBackground( 0.3, 0.2, 0.8 );
-  view.SetSize( 600, 600 );
-  view.SetImage( vtk_input_image->GetOutput( ) );
-
-  // Allow some interaction
-  view.Render( );
-  view.Start( );
-
-  // Prepare region grow filter and cost function
-  typedef fpa::Image::Dijkstra< TInputImage, TOutputImage > TFilter;
-  typedef fpa::Image::Functors::
-    ImageAbsoluteDifferenceCostFunction< TFilter::TInputImage, TFilter::TResult >
-    TCost;
-
-  TCost::Pointer cost = TCost::New( );
-
-  TFilter::Pointer filter = TFilter::New( );
-  filter->SetInput( input_image );
-  filter->SetCostFunction( cost );
-  filter->SetConversionFunction( NULL );
-  filter->SetNeighborhoodOrder( neighborhood_order );
-  filter->SetStopAtOneFront( stop_at_one_front );
-
-  // Get user-given seeds
-  std::ifstream input_seeds_str( input_seeds_fn.c_str( ) );
-  if( !input_seeds_str )
-  {
-    std::cerr << "Error opening \"" << input_seeds_fn << "\"" << std::endl;
-    return( 1 );
-
-  } // fi
-
-  unsigned int nSeeds;
-  input_seeds_str >> nSeeds;
-  std::vector< TInputImage::IndexType > input_seeds;
-  for( unsigned int s = 0; s < nSeeds; s++ )
-  {
-    TInputImage::IndexType idx;
-    input_seeds_str >> idx[ 0 ] >> idx[ 1 ] >> idx[ 2 ];
-    input_seeds.push_back( idx );
-
-  } // rof
-  input_seeds_str.close( );
-
-  filter->AddSeed( input_seeds[ init_seed ], 0 );
-  filter->AddSeed( input_seeds[ end_seed ], 0 );
-
-  // Prepare graphical debugger
-  typedef fpa::VTK::Image3DObserver< TFilter, vtkRenderWindow > TDebugger;
-  TDebugger::Pointer debugger = TDebugger::New( );
-  debugger->SetRenderWindow( view.GetWindow( ) );
-  debugger->SetRenderPercentage( 0.0001 );
-  filter->AddObserver( itk::AnyEvent( ), debugger );
-  filter->ThrowEventsOn( );
-
-  // Go!
-  filter->Update( );
-
-  // Save final total cost map
-  itk::ImageFileWriter< TOutputImage >::Pointer output_image_writer =
-    itk::ImageFileWriter< TOutputImage >::New( );
-  output_image_writer->SetFileName( output_image_fn );
-  output_image_writer->SetInput( filter->GetOutput( ) );
-  try
-  {
-    output_image_writer->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    std::cerr
-      << "Error while writing image to " << output_image_fn << ": "
-      << err << std::endl;
-    return( 1 );
-
-  } // yrt
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_ShowSkeleton.cxx b/appli/examples/example_ShowSkeleton.cxx
deleted file mode 100644 (file)
index ae522ac..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-#include <cstdlib>
-#include <ctime>
-#include <iostream>
-#include <limits>
-#include <string>
-
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
-
-#include <itkImageFileReader.h>
-#include <fpa/VTK/ImageMPR.h>
-
-#include <fpa/Image/DijkstraWithEndPointDetection.h>
-#include <fpa/IO/MinimumSpanningTreeReader.h>
-#include <fpa/IO/UniqueValuesContainerReader.h>
-#include <fpa/IO/MatrixValuesContainerReader.h>
-
-#include <vtkCellArray.h>
-#include <vtkFloatArray.h>
-#include <vtkImageMarchingCubes.h>
-#include <vtkPoints.h>
-#include <vtkPointData.h>
-#include <vtkPolyData.h>
-#include <vtkSmartPointer.h>
-
-// -------------------------------------------------------------------------
-const unsigned int Dim = 3;
-typedef unsigned char TPixel;
-
-typedef itk::Image< TPixel, Dim >            TImage;
-typedef itk::ImageToVTKImageFilter< TImage > TVTKInputImage;
-
-typedef fpa::Image::DijkstraWithEndPointDetection< TImage, TImage > TFilter;
-typedef TFilter::TMinimumSpanningTree TMinimumSpanningTree;
-typedef TFilter::TUniqueVertices TUniqueVertices;
-typedef TFilter::TBranches TBranches;
-typedef TFilter::TVertices TVertices;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
-  if( argc < 6 )
-  {
-    std::cerr
-      << "Usage: " << argv[ 0 ] << std::endl
-      << " input_image" << std::endl
-      << " input_minimum_spanning_tree" << std::endl
-      << " input_endpoints" << std::endl
-      << " input_bifurcations" << std::endl
-      << " input_branches" << std::endl
-      << std::endl;
-    return( 1 );
-
-  } // fi
-  std::string input_image_fn = argv[ 1 ];
-  std::string mst_input_fn = argv[ 2 ];
-  std::string endpoints_input_fn = argv[ 3 ];
-  std::string bifurcations_input_fn = argv[ 4 ];
-  std::string branches_input_fn = argv[ 5 ];
-
-  // Read image
-  itk::ImageFileReader< TImage >::Pointer input_image_reader =
-    itk::ImageFileReader< TImage >::New( );
-  input_image_reader->SetFileName( input_image_fn );
-  input_image_reader->Update( );
-  TImage::ConstPointer input_image = input_image_reader->GetOutput( );
-
-  TVTKInputImage::Pointer vtk_input_image = TVTKInputImage::New( );
-  vtk_input_image->SetInput( input_image );
-  vtk_input_image->Update( );
-
-  // Read minimum spanning tree
-  fpa::IO::MinimumSpanningTreeReader< TMinimumSpanningTree >::Pointer
-    mst_input_reader =
-    fpa::IO::MinimumSpanningTreeReader< TMinimumSpanningTree >::New( );
-  mst_input_reader->SetFileName( mst_input_fn );
-  mst_input_reader->Update( );
-  TMinimumSpanningTree::ConstPointer mst_input = mst_input_reader->GetOutput( );
-
-  fpa::IO::UniqueValuesContainerReader< TUniqueVertices >::Pointer
-    endpoints_input_reader =
-    fpa::IO::UniqueValuesContainerReader< TUniqueVertices >::New( );
-  endpoints_input_reader->SetFileName( endpoints_input_fn );
-  endpoints_input_reader->Update( );
-  TUniqueVertices::ConstPointer endpoints_input = endpoints_input_reader->GetOutput( );
-
-  fpa::IO::UniqueValuesContainerReader< TUniqueVertices >::Pointer
-    bifurcations_input_reader =
-    fpa::IO::UniqueValuesContainerReader< TUniqueVertices >::New( );
-  bifurcations_input_reader->SetFileName( bifurcations_input_fn );
-  bifurcations_input_reader->Update( );
-  TUniqueVertices::ConstPointer bifurcations_input =
-    bifurcations_input_reader->GetOutput( );
-
-  fpa::IO::MatrixValuesContainerReader< TBranches >::Pointer
-    branches_input_reader =
-    fpa::IO::MatrixValuesContainerReader< TBranches >::New( );
-  branches_input_reader->SetFileName( branches_input_fn );
-  branches_input_reader->Update( );
-  TBranches::ConstPointer branches_input = branches_input_reader->GetOutput( );
-  unsigned int nBranches = branches_input_reader->GetNumberOfLabels( );
-
-  // Show input image and let some interaction
-  fpa::VTK::ImageMPR view;
-  view.SetBackground( 0.3, 0.2, 0.8 );
-  view.SetSize( 800, 800 );
-  view.SetImage( vtk_input_image->GetOutput( ) );
-
-  vtkSmartPointer< vtkImageMarchingCubes > mc =
-    vtkSmartPointer< vtkImageMarchingCubes >::New( );
-  mc->SetInputData( vtk_input_image->GetOutput( ) );
-  mc->SetValue( 0, 1e-1 );
-  mc->Update( );
-  view.AddPolyData( mc->GetOutput( ), 1, 1, 1, 0.4 );
-
-  // Show endpoints
-  vtkSmartPointer< vtkPoints > endpoints_points =
-    vtkSmartPointer< vtkPoints >::New( );
-  vtkSmartPointer< vtkCellArray > endpoints_cells =
-    vtkSmartPointer< vtkCellArray >::New( );
-  for(
-    TUniqueVertices::ConstIterator epIt = endpoints_input->Begin( );
-    epIt != endpoints_input->End( );
-    ++epIt
-    )
-  {
-    TImage::PointType pnt;
-    input_image->TransformIndexToPhysicalPoint( *epIt, pnt );
-    endpoints_points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
-    endpoints_cells->InsertNextCell( 1 );
-    endpoints_cells->
-      InsertCellPoint( endpoints_points->GetNumberOfPoints( ) - 1 );
-
-  } // rof
-  vtkSmartPointer< vtkPolyData > endpoints_polydata =
-    vtkSmartPointer< vtkPolyData >::New( );
-  endpoints_polydata->SetPoints( endpoints_points );
-  endpoints_polydata->SetVerts( endpoints_cells );
-  view.AddPolyData( endpoints_polydata, 0, 0, 1, 1 );
-
-  // Show bifurcations
-  vtkSmartPointer< vtkPoints > bifurcations_points =
-    vtkSmartPointer< vtkPoints >::New( );
-  vtkSmartPointer< vtkCellArray > bifurcations_cells =
-    vtkSmartPointer< vtkCellArray >::New( );
-  for(
-    TUniqueVertices::ConstIterator bfIt = bifurcations_input->Begin( );
-    bfIt != bifurcations_input->End( );
-    ++bfIt
-    )
-  {
-    TImage::PointType pnt;
-    input_image->TransformIndexToPhysicalPoint( *bfIt, pnt );
-    bifurcations_points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
-    bifurcations_cells->InsertNextCell( 1 );
-    bifurcations_cells->
-      InsertCellPoint( bifurcations_points->GetNumberOfPoints( ) - 1 );
-
-  } // rof
-  vtkSmartPointer< vtkPolyData > bifurcations_polydata =
-    vtkSmartPointer< vtkPolyData >::New( );
-  bifurcations_polydata->SetPoints( bifurcations_points );
-  bifurcations_polydata->SetVerts( bifurcations_cells );
-  view.AddPolyData( bifurcations_polydata, 0, 1, 0, 1 );
-
-  // Show branches (simple and detailed)
-  vtkSmartPointer< vtkPoints > simple_branches_points =
-    vtkSmartPointer< vtkPoints >::New( );
-  vtkSmartPointer< vtkCellArray > simple_branches_cells =
-    vtkSmartPointer< vtkCellArray >::New( );
-
-  vtkSmartPointer< vtkPoints > detailed_branches_points =
-    vtkSmartPointer< vtkPoints >::New( );
-  vtkSmartPointer< vtkCellArray > detailed_branches_cells =
-    vtkSmartPointer< vtkCellArray >::New( );
-  vtkSmartPointer< vtkFloatArray > detailed_branches_scalars =
-    vtkSmartPointer< vtkFloatArray >::New( );
-
-  TBranches::ConstIterator brIt = branches_input->Begin( );
-  for( ; brIt != branches_input->End( ); ++brIt )
-  {
-    // Branch's first point
-    TImage::PointType first_point;
-    input_image->TransformIndexToPhysicalPoint( brIt->first, first_point );
-    unsigned long first_id = simple_branches_points->GetNumberOfPoints( );
-    simple_branches_points->InsertNextPoint(
-      first_point[ 0 ], first_point[ 1 ], first_point[ 2 ]
-      );
-
-    TBranches::ConstRowIterator brRowIt = branches_input->Begin( brIt );
-    for( ; brRowIt != branches_input->End( brIt ); ++brRowIt )
-    {
-      // Branch's second point
-      TImage::PointType second_point;
-      input_image->
-        TransformIndexToPhysicalPoint( brRowIt->first, second_point );
-      unsigned long second_id = simple_branches_points->GetNumberOfPoints( );
-      simple_branches_points->InsertNextPoint(
-        second_point[ 0 ], second_point[ 1 ], second_point[ 2 ]
-        );
-      simple_branches_cells->InsertNextCell( 2 );
-      simple_branches_cells->InsertCellPoint( first_id );
-      simple_branches_cells->InsertCellPoint( second_id );
-
-      // Detailed path
-      double pathId = double( brRowIt->second - 1 ) / double( nBranches - 1 );
-      TVertices path;
-      mst_input->GetPath( path, brIt->first, brRowIt->first );
-      TVertices::const_iterator pIt = path.begin( );
-      for( ; pIt != path.end( ); ++pIt )
-      {
-        TImage::PointType path_point;
-        input_image->TransformIndexToPhysicalPoint( *pIt, path_point );
-        detailed_branches_points->InsertNextPoint(
-          path_point[ 0 ], path_point[ 1 ], path_point[ 2 ]
-          );
-        detailed_branches_scalars->InsertNextTuple1( pathId );
-        if( pIt != path.begin( ) )
-        {
-          unsigned long nPoints =
-            detailed_branches_points->GetNumberOfPoints( );
-          detailed_branches_cells->InsertNextCell( 2 );
-          detailed_branches_cells->InsertCellPoint( nPoints - 2 );
-          detailed_branches_cells->InsertCellPoint( nPoints - 1 );
-
-        } // fi
-
-      } // rof
-
-    } // rof
-
-  } // rof
-  vtkSmartPointer< vtkPolyData > simple_branches_polydata =
-    vtkSmartPointer< vtkPolyData >::New( );
-  simple_branches_polydata->SetPoints( simple_branches_points );
-  simple_branches_polydata->SetLines( simple_branches_cells );
-  view.AddPolyData( simple_branches_polydata, 1, 0, 1, 1 );
-
-  vtkSmartPointer< vtkPolyData > detailed_branches_polydata =
-    vtkSmartPointer< vtkPolyData >::New( );
-  detailed_branches_polydata->SetPoints( detailed_branches_points );
-  detailed_branches_polydata->SetLines( detailed_branches_cells );
-  detailed_branches_polydata->
-    GetPointData( )->SetScalars( detailed_branches_scalars );
-  view.AddPolyData( detailed_branches_polydata, 1 );
-
-  // Allow some interaction
-  view.Render( );
-  view.Start( );
-
-  return( 0 );
-}
-
-// eof - $RCSfile$
diff --git a/appli/examples/example_Thinning.cxx b/appli/examples/example_Thinning.cxx
deleted file mode 100644 (file)
index abd6144..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "itkBinaryThinningImageFilter.h"
-#include "itkImage.h"
-#include "itkImageFileReader.h"
-#include "itkImageFileWriter.h"
-#include "itkRescaleIntensityImageFilter.h"
-typedef itk::Image<short, 3>  ImageType;
-int main(int argc, char *argv[])
-{
-  
-  typedef itk::ImageFileReader<ImageType> ImageReader;
-  ImageReader::Pointer reader = ImageReader::New();
-  std::string fileName = argv[1];
-  reader->SetFileName(fileName);
-  reader->Update();
-  ImageType::Pointer image = reader->GetOutput();
-  typedef itk::BinaryThinningImageFilter <ImageType, ImageType> BinaryThinningImageFilterType;
-  BinaryThinningImageFilterType::Pointer binaryThinningImageFilter = BinaryThinningImageFilterType::New();
-  binaryThinningImageFilter->SetInput(image);
-  binaryThinningImageFilter->Update();
-  // Rescale the image so that it can be seen (the output is 0 and 1, we want 0 and 255)
-  typedef itk::RescaleIntensityImageFilter< ImageType, ImageType > RescaleType;
-  RescaleType::Pointer rescaler = RescaleType::New();
-  rescaler->SetInput( binaryThinningImageFilter->GetOutput() );
-  rescaler->SetOutputMinimum(0);
-  rescaler->SetOutputMaximum(255);
-  rescaler->Update();
-  typedef  itk::ImageFileWriter< ImageType  > WriterType;
-  WriterType::Pointer writer = WriterType::New();
-  writer->SetFileName(argv[2]);
-  writer->SetInput(rescaler->GetOutput());
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/appli/examples/fpa_Utility.h b/appli/examples/fpa_Utility.h
deleted file mode 100644 (file)
index 4cdf521..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-#ifndef __FPA__UTILITY__H__
-#define __FPA__UTILITY__H__
-
-#include <sstream>
-
-#include <itkImageFileReader.h>
-#include <itkImageFileWriter.h>
-
-#include <vtkCamera.h>
-#include <vtkImageActor.h>
-#include <vtkImageData.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkPointHandleRepresentation3D.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkSeedRepresentation.h>
-#include <vtkSeedWidget.h>
-#include <vtkSmartPointer.h>
-
-namespace fpa_Utility
-{
-  /**
-   */
-  struct Viewer2DWithSeeds
-  {
-    vtkSmartPointer< vtkImageData >                   Image;
-    vtkSmartPointer< vtkImageActor >                  ImageActor;
-    vtkSmartPointer< vtkRenderer >                    Renderer;
-    vtkSmartPointer< vtkRenderWindow >                Window;
-    vtkSmartPointer< vtkInteractorStyleImage >        Style;
-    vtkSmartPointer< vtkRenderWindowInteractor >      Interactor;
-    vtkSmartPointer< vtkPointHandleRepresentation3D > Handle;
-    vtkSmartPointer< vtkSeedRepresentation >          Representation;
-    vtkSmartPointer< vtkSeedWidget >                  Widget;
-
-    Viewer2DWithSeeds( )
-      {
-        this->ImageActor = vtkSmartPointer< vtkImageActor >::New( );
-        this->Renderer = vtkSmartPointer< vtkRenderer >::New( );
-        this->Window = vtkSmartPointer< vtkRenderWindow >::New( );
-        this->Style = vtkSmartPointer< vtkInteractorStyleImage >::New( );
-        this->Interactor = vtkSmartPointer< vtkRenderWindowInteractor >::New( );
-        this->Handle = vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
-        this->Representation = vtkSmartPointer< vtkSeedRepresentation >::New( );
-        this->Widget = vtkSmartPointer< vtkSeedWidget >::New( );
-
-        this->Renderer->SetBackground( 0.1, 0.2, 0.7 );
-        this->Window->SetSize( 600, 600 );
-        this->Window->AddRenderer( this->Renderer );
-        this->Interactor->SetInteractorStyle( this->Style );
-        this->Window->SetInteractor( this->Interactor );
-        this->Handle->GetProperty( )->SetColor( 1, 0, 0 );
-        this->Representation->SetHandleRepresentation( this->Handle );
-        this->Widget->SetInteractor( this->Interactor );
-        this->Widget->SetRepresentation( this->Representation );
-      }
-    void SetImage( vtkImageData* image )
-      {
-        this->Image = image;
-        this->ImageActor->SetInputData( this->Image );
-        this->Renderer->AddActor( this->ImageActor );
-
-        // Correct camera due to the loaded image
-        vtkCamera* camera = this->Renderer->GetActiveCamera( );
-        camera->SetViewUp( 0, -1, 0 );
-        camera->SetPosition( 0, 0, -1 );
-        camera->SetFocalPoint( 0, 0, 0 );
-
-        // Prepare visualization
-        this->Interactor->Initialize( );
-        this->Renderer->ResetCamera( );
-      }
-    void Render( )
-      {
-        this->Window->Render( );
-      }
-    void Start( )
-      {
-        this->Window->Render( );
-        this->Widget->On( );
-        this->Interactor->Start( );
-      }
-    unsigned long GetNumberOfSeeds( ) const
-      {
-        return( this->Representation->GetNumberOfSeeds( ) );
-      }
-
-    template< class P >
-    bool GetSeed( P& seed, unsigned long i )
-      {
-        if( i < this->Representation->GetNumberOfSeeds( ) )
-        {
-          double pos[ 3 ];
-          this->Representation->GetSeedWorldPosition( i, pos );
-
-          seed[ 0 ] = ( typename P::ValueType )( pos[ 0 ] );
-          seed[ 1 ] = ( typename P::ValueType )( pos[ 1 ] );
-
-          return( true );
-        }
-        else
-          return( false );
-      }
-  };
-
-  // -----------------------------------------------------------------------
-  template< class Ip >
-  std::string ReadImage( Ip& image, const std::string& fname )
-  {
-    typename itk::ImageFileReader< typename Ip::ObjectType >::Pointer r =
-      itk::ImageFileReader< typename Ip::ObjectType >::New( );
-    r->SetFileName( fname );
-    try
-    {
-      r->Update( );
-    }
-    catch( itk::ExceptionObject& err )
-    {
-      std::stringstream str;
-      str << "Error while reading image from " << fname << ": " << err;
-      return( str.str( ) );
-
-    } // yrt
-    image = r->GetOutput( );
-    image->DisconnectPipeline( );
-    return( "" );
-  }
-
-  // -----------------------------------------------------------------------
-  template< class I >
-  std::string SaveImage( const I* image, const std::string& fname )
-  {
-    typename itk::ImageFileWriter< I >::Pointer w =
-      itk::ImageFileWriter< I >::New( );
-    w->SetInput( image );
-    w->SetFileName( fname );
-    try
-    {
-      w->Update( );
-    }
-    catch( itk::ExceptionObject& err )
-    {
-      std::stringstream str;
-      str << "Error while reading image from " << fname << ": " << err;
-      return( str.str( ) );
-
-    } // yrt
-    return( "" );
-  }
-
-} // ecapseman
-
-#endif // __FPA__UTILITY__H__
-
-// eof - $RCSfile$
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
deleted file mode 100644 (file)
index 44467ab..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-CONFIGURE_FILE(
-  FrontAlgorithmsConfig.cmake.in
-  ${PROJECT_BINARY_DIR}/FrontAlgorithmsConfig.cmake
-  @ONLY
-  )
-
-## ========================
-## == Installation rules ==
-## ========================
-
-INSTALL(
-  FILES
-  ${PROJECT_BINARY_DIR}/FrontAlgorithmsConfig.cmake
-  DESTINATION share/cmake
-  )
-
-## eof - $RCSfile$
diff --git a/cmake/FrontAlgorithmsConfig.cmake.in b/cmake/FrontAlgorithmsConfig.cmake.in
deleted file mode 100644 (file)
index e84ecba..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# =========================
-# == Include directories ==
-# =========================
-
-INCLUDE_DIRECTORIES(
-  @PROJECT_SOURCE_DIR@/lib
-  @PROJECT_BINARY_DIR@/lib
-  @PROJECT_SOURCE_DIR@/lib/fpa_Instances
-  @PROJECT_BINARY_DIR@/lib/fpa_Instances
-  @CMAKE_INSTALL_PREFIX@/include
-  )
-
-# =========================
-# == Library directories ==
-# =========================
-
-IF(MSVC)
-  LINK_DIRECTORIES(
-    @PROJECT_BINARY_DIR@/$(ConfigurationName)
-    @CMAKE_INSTALL_PREFIX@/bin
-    @CMAKE_INSTALL_PREFIX@/lib
-    )
-ELSE(MSVC)
-  LINK_DIRECTORIES(
-    @PROJECT_BINARY_DIR@
-    @CMAKE_INSTALL_PREFIX@/bin
-    @CMAKE_INSTALL_PREFIX@/lib
-    )
-ENDIF(MSVC)
-
-# ===================
-# == Library names ==
-# ===================
-
-SET(FrontAlgorithms_LIBRARY FrontAlgorithms)
-
-## eof - $RCSfile$
diff --git a/cmake/fpa_Policies.cmake b/cmake/fpa_Policies.cmake
deleted file mode 100644 (file)
index a26f448..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-SET(
-  policies
-  CMP0015
-  CMP0020
-  CMP0042
-  )
-FOREACH(policy ${policies})
-  IF(POLICY ${policy})
-    CMAKE_POLICY(SET ${policy} NEW)
-  ENDIF(POLICY ${policy})
-ENDFOREACH(policy)
-
-## eof - $RCSfile$
diff --git a/data/binary_test_2D_00.png b/data/binary_test_2D_00.png
deleted file mode 100644 (file)
index fbe9d39..0000000
Binary files a/data/binary_test_2D_00.png and /dev/null differ
diff --git a/data/ones_image.png b/data/ones_image.png
deleted file mode 100644 (file)
index f7afaab..0000000
Binary files a/data/ones_image.png and /dev/null differ
diff --git a/data/workspaces/workspace_airwaysappli.wxml b/data/workspaces/workspace_airwaysappli.wxml
deleted file mode 100644 (file)
index 9b80164..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-<cpPlugins_Workspace>
-    <filter category="ImageFilters" class="CastImageFilter" name="cast" ViewX="-1098" ViewY="-242">
-        <parameter name="CastType" value="char#short#int#long#uchar#ushort#uint#ulong#float#double@double" type="Choices"/>
-    </filter>
-    <filter category="fpaImageAlgorithmFunctors" class="InvertCostFunction" name="cost" ViewX="-951" ViewY="-428">
-        <parameter name="Alpha" value="1" type="Real"/>
-        <parameter name="Beta" value="1" type="Real"/>
-        <parameter name="ScalarType" value="float#double@float" type="Choices"/>
-    </filter>
-    <filter category="fpaImageAlgorithm" class="ImageDijkstra" name="dijkstra" ViewX="-735" ViewY="-176">
-        <parameter name="FillNodeQueue" value="1" type="Bool"/>
-        <parameter name="NeighborhoodOrder" value="1#2@1" type="Choices"/>
-        <parameter name="StopAtOneFront" value="0" type="Bool"/>
-        <parameter name="VisualDebug" value="1" type="Bool"/>
-    </filter>
-    <filter category="ImageFilters" class="SignedMaurerDistanceMapImageFilter" name="dmap" ViewX="-1093" ViewY="-379">
-        <parameter name="BackgroundValue" value="0" type="Real"/>
-        <parameter name="InsideIsPositive" value="1" type="Bool"/>
-        <parameter name="OutputResolution" value="float#double@float" type="Choices"/>
-        <parameter name="SquaredDistance" value="0" type="Bool"/>
-        <parameter name="UseImageSpacing" value="1" type="Bool"/>
-    </filter>
-    <filter category="fpaImageAlgorithm" class="ExtractEndPointsAndBifurcationsFromMinimumSpanningTree" name="eb" ViewX="-491" ViewY="-267">
-        <parameter name="SquaredDistanceMap" value="0" type="Bool"/>
-    </filter>
-    <filter category="IO" class="ImageReader" name="reader" ViewX="-1366" ViewY="-264">
-        <parameter name="FileNames" value="" type="OpenFileNameList"/>
-    </filter>
-    <filter category="Widgets" class="NoInteractiveSeedWidget" name="seed" ViewX="-1116" ViewY="-124">
-        <parameter name="Text" value="" type="String"/>
-    </filter>
-    <connection>
-        <origin filter="cost" name="Output"/>
-        <destination filter="dijkstra" name="CostFunctor"/>
-    </connection>
-    <connection>
-        <origin filter="dijkstra" name="Output"/>
-        <destination filter="eb" name="CostsImage"/>
-    </connection>
-    <connection>
-        <origin filter="dijkstra" name="MST"/>
-        <destination filter="eb" name="MST"/>
-    </connection>
-    <connection>
-        <origin filter="dmap" name="Output"/>
-        <destination filter="dijkstra" name="Input"/>
-    </connection>
-    <connection>
-        <origin filter="dmap" name="Output"/>
-        <destination filter="eb" name="DistanceMap"/>
-    </connection>
-    <connection>
-        <origin filter="reader" name="Output"/>
-        <destination filter="cast" name="Input"/>
-    </connection>
-    <connection>
-        <origin filter="reader" name="Output"/>
-        <destination filter="dmap" name="Input"/>
-    </connection>
-    <connection>
-        <origin filter="reader" name="Output"/>
-        <destination filter="seed" name="ReferenceImage"/>
-    </connection>
-    <connection>
-        <origin filter="seed" name="Output"/>
-        <destination filter="dijkstra" name="Seeds"/>
-    </connection>
-    <exposed_output_port port_name="bifurcations" filter="eb" filter_port_name="Bifurcations"/>
-    <exposed_output_port port_name="endpoints" filter="eb" filter_port_name="EndPoints"/>
-    <exposed_output_port port_name="input_image_casted" filter="CastImageFilter" filter_port_name="Output"/>
-    <exposed_output_port port_name="input_image_dmap" filter="dmap" filter_port_name="Output"/>
-    <exposed_output_port port_name="skeleton" filter="eb" filter_port_name="Skeleton"/>
-</cpPlugins_Workspace>
diff --git a/doc/UML/fpa.dia b/doc/UML/fpa.dia
deleted file mode 100644 (file)
index 8ed637d..0000000
Binary files a/doc/UML/fpa.dia and /dev/null differ
diff --git a/lib/Airways/AirwaysLib/CMakeLists.txt b/lib/Airways/AirwaysLib/CMakeLists.txt
deleted file mode 100644 (file)
index 712dc25..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-## =============================
-## = Set names and directories =
-## =============================
-
-SET(lib_NAME TempAirwaysAppli_AirwaysLib)
-
-INCLUDE_DIRECTORIES(
-  ${CMAKE_CURRENT_SOURCE_DIR}/../MathLib
-  ${CMAKE_CURRENT_BINARY_DIR}/../MathLib
-  )
-
-## ===============
-## = Source code =
-## ===============
-
-FILE(GLOB lib_HEADERS_H   "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
-FILE(GLOB lib_HEADERS_HPP "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp")
-FILE(GLOB lib_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx")
-FILE(GLOB lib_SOURCES_C   "${CMAKE_CURRENT_SOURCE_DIR}/*.c")
-FILE(GLOB lib_SOURCES_CPP "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
-FILE(GLOB lib_SOURCES_CXX "${CMAKE_CURRENT_SOURCE_DIR}/*.cxx")
-
-## =====================
-## = Compilation rules =
-## =====================
-
-ADD_LIBRARY(
-  ${lib_NAME}
-  SHARED
-  ${lib_SOURCES_C}
-  ${lib_SOURCES_CPP}
-  ${lib_SOURCES_CXX}
-  )
-GENERATE_EXPORT_HEADER(
-  ${lib_NAME}
-  BASE_NAME ${lib_NAME}
-  EXPORT_MACRO_NAME ${lib_NAME}_EXPORT
-  EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/${lib_NAME}_Export.h
-  STATIC_DEFINE ${lib_NAME}_BUILT_AS_STATIC
-  )
-TARGET_LINK_LIBRARIES(${lib_NAME} TempAirwaysAppli_MathLib ${ITK_LIBRARIES} ${VTK_LIBRARIES})
-
-## eof - $RCSfile$
diff --git a/lib/Airways/AirwaysLib/airwaysEdge.cxx b/lib/Airways/AirwaysLib/airwaysEdge.cxx
deleted file mode 100644 (file)
index 56a9084..0000000
+++ /dev/null
@@ -1,739 +0,0 @@
-/*
- * airwaysEdge.cxx
- *
- *  Created on: May 12, 2014
- *      Author: caceres
- */
-
-#include "airwaysEdge.h"
-#include <iostream>
-
-namespace airways
-{
-
-Edge::Edge() : m_id(0), m_source(NULL), m_target(NULL), m_mark(false), m_angle(0), m_length(
-               0), m_eDistance(0), m_aRadius(0), m_minRadius(0), m_maxRadius(0)
-{
-
-}
-
-Edge::Edge(Edge* edge) :  m_id(0), m_source(NULL), m_target(NULL), m_mark(false), m_angle(0), m_length(
-               0), m_eDistance(0), m_aRadius(0), m_minRadius(0), m_maxRadius(0)
-{
-       this->m_id = edge->m_id;
-       this->m_source = edge->m_source;
-       this->m_target = edge->m_target;
-       this->m_angle = edge->m_angle;
-       this->m_length = edge->m_length;
-       this->m_eDistance = edge->m_eDistance;
-       this->m_vec_pair_posVox_rad = edge->m_vec_pair_posVox_rad;
-       this->m_aRadius = edge->m_aRadius;
-       this->m_minRadius = edge->m_minRadius;
-       this->m_maxRadius = edge->m_maxRadius;
-}
-
-Edge::~Edge()
-{
-}
-
-int  Edge::GetAngle() const
-{
-       return this->m_angle;
-}
-
-double  Edge::GetARadius() const
-{
-       return this->m_aRadius;
-}
-
-double  Edge::GetEDistance() const
-{
-       return this->m_eDistance;
-}
-
-double  Edge::GetLength() const
-{
-       return this->m_length;
-}
-
-double  Edge::GetMaxRadius() const
-{
-       return this->m_maxRadius;
-}
-
-double  Edge::GetMinRadius() const
-{
-       return this->m_minRadius;
-}
-
-Node*  Edge::GetSource() const
-{
-       return this->m_source;
-}
-
-Node*  Edge::GetTarget() const
-{
-       return this->m_target;
-}
-
-const vec_pair_posVox_rad&  Edge::GetEdgeInfo() const
-{
-       return m_vec_pair_posVox_rad;
-}
-
-bool  Edge::IsMarked() const
-{
-       return this->m_mark;
-}
-
-bool Edge::IsPointInfluencedByEdge(float point_x, float point_y, float point_z) const
-{
-       // Variables
-       float minDistance = -1.0;
-       bool first = true;
-       float distanceTemp = 0.0;
-       bool influenced = false;
-       Vec3 vector(point_x, point_y, point_z);
-
-       // Iterate over all voxel in the edge
-       vec_pair_posVox_rad::const_iterator it = this->m_vec_pair_posVox_rad.begin();
-       for (; it != this->m_vec_pair_posVox_rad.end() && !influenced; ++it)
-       {
-               // Get the vector from the compared source to each voxel
-               Vec3 voxel_actual = ((*it).first);
-               //Vec3 source_actual = this->m_source->GetCoords( );
-               //Vec3 vector_actual(voxel_actual - source_actual);
-
-               // Get the difference vector
-               Vec3 vector_diff = vector - voxel_actual;
-
-               // Get the distance
-               distanceTemp = vector_diff.Norm();
-
-               // Get the minimum
-               if(first)
-               {
-                       minDistance = distanceTemp;
-                       first = false;
-                       if(minDistance < ((*it).second*1.8))
-                               influenced = true;
-               }
-               else if(distanceTemp < minDistance)
-               {
-                       minDistance = distanceTemp;
-                       if(minDistance < ((*it).second)*1.8)
-                               influenced = true;
-               }
-       }
-
-       return influenced;
-}
-
-void  Edge::SetAngle(const double& angle)
-{
-       this->m_angle = angle;
-}
-
-void  Edge::SetARadius(const double& aRadius)
-{
-       this->m_aRadius = aRadius;
-}
-
-void  Edge::SetEDistance(const double& eDistance)
-{
-       this->m_eDistance = eDistance;
-}
-
-void  Edge::SetLength(const double& length)
-{
-       this->m_length = length;
-}
-
-void  Edge::SetMaxRadius(const unsigned int& maxRadius)
-{
-       this->m_maxRadius = maxRadius;
-}
-
-void  Edge::SetMinRadius(const unsigned int& minRadius)
-{
-       this->m_minRadius = minRadius;
-}
-
-void  Edge::SetSource(Node* source)
-{
-       this->m_source = source;
-}
-
-void  Edge::SetTarget(Node* target)
-{
-       this->m_target = target;
-}
-
-void  Edge::AddSkeletonPairInfo(const pair_posVox_rad& skPairInfo)
-{
-       this->m_vec_pair_posVox_rad.push_back(skPairInfo);
-}
-
-void  Edge::SetSkeletonPairVector(const vec_pair_posVox_rad& skPInfoVector)
-{
-       this->m_vec_pair_posVox_rad = skPInfoVector;
-       UpdateEdgeInfo();
-}
-
-void  Edge::UpdateEdgeInfo()
-{
-       if (this->m_vec_pair_posVox_rad.empty())
-       {
-               std::cout << "   ------------------------ This edge has no information" << std::endl;
-               std::cout << "Source:" << this->m_source->GetCoords() << std::endl;
-               std::cout << "Target:" << this->m_target->GetCoords() << std::endl;
-               return;
-       }
-       double min = std::numeric_limits<unsigned int>::max();
-       double max = std::numeric_limits<unsigned int>::min();
-       double average = 0;
-       vec_pair_posVox_rad::iterator it = this->m_vec_pair_posVox_rad.begin();
-       for (; it != this->m_vec_pair_posVox_rad.end(); ++it)
-       {
-               pair_posVox_rad info = *it;
-               average += info.second;
-               if (info.second < min)
-                       min = info.second;
-               else if (info.second > max)
-                       max = info.second;
-       }
-       this->m_aRadius = average / this->m_vec_pair_posVox_rad.size();
-       this->m_minRadius = min;
-       this->m_maxRadius = max;
-}
-
-double Edge::CompareWith(Edge* edge)
-{
-       //std::cout << "Comparing ... " << std::endl;
-       // To compared the edges, the distance in each component
-       // is calculated and a distance function between edges is calculated.
-       // The components are:
-       // - Each component of the quaternion (son-parent quaterion). (4 components)
-       // - Edge distance
-       // - Edge average radius
-
-       // Difference in each quaternion component
-       //                  p
-       //                  |
-       //                  |
-       //                  |
-       //                  s
-       //                 /
-       //                              /
-       //               /
-       //              g
-       /*const Edge* edgeActualParent = this->m_source->GetEdge( );
-       Vec3 sourceActualParent = edgeActualParent->m_source->GetCoords( );
-       Vec3 targetActualParent = edgeActualParent->m_target->GetCoords( );
-       Vec3 sourceActual = this->m_source->GetCoords( );
-       Vec3 targetActual = this->m_target->GetCoords( );
-
-       Vec3 sp_actual( sourceActualParent - targetActualParent );
-       Vec3 sg_actual( targetActual - sourceActual );
-
-       const Edge* edgeComparedParent = edge.m_source->GetEdge( );
-       Vec3 sourceComparedParent = edgeComparedParent->m_source->GetCoords( );
-       Vec3 targetComparedParent = edgeComparedParent->m_target->GetCoords( );
-       Vec3 sourceCompared = edge.m_source->GetCoords( );
-       Vec3 targetCompared = edge.m_target->GetCoords( );
-
-       Vec3 sp_compared( sourceComparedParent - targetComparedParent );
-       Vec3 sg_compared( targetCompared - sourceCompared );
-
-       Quaternion q_actual(sp_actual, sg_actual);
-       Quaternion q_compared(sp_compared, sg_compared);
-
-       float dif_r = q_actual.getR() - q_compared.getR();
-       float dif_i = q_actual.getI() - q_compared.getI();
-       float dif_j = q_actual.getJ() - q_compared.getJ();
-       float dif_k = q_actual.getK() - q_compared.getK();
-       float dif_distance = this->m_length - edge.m_length;
-       float dif_radius = this->m_aRadius - edge.m_aRadius;
-        */
-       double distanceEdge = GetDistanceToEdge(edge);
-
-       //std::cout << "Comparing ... OK" << std::endl;
-
-       return distanceEdge;
-}
-
-float Edge::GetDistanceToEdge(Edge* edge)
-{
-       // a. The parent edges must be aligned before calculate the distance.
-       // b. Parent end-points are aligned also.
-       // Steps a and b represent a rotation and a translation respectively.
-       // c. For each point in the actual Edge (this) the closest point in the
-       // compared edge is found. This distance is calculated and then averaged
-       // for all the points. Must be done in both ways?
-       // We can take the maximum of both distances max(D(a,b),D(b,a))
-
-       // Variables
-       float averageDistance = 0.0;
-       float numPoints = 0;
-
-       // Get the parent Edges
-       /*const Edge* edgeActualParent = this->m_source->GetEdge( );
-       Vec3 sourceActualParent = edgeActualParent->m_source->GetCoords( );
-       Vec3 targetActualParent = edgeActualParent->m_target->GetCoords( );
-       Vec3 sourceActual = this->m_source->GetCoords( );
-       Vec3 targetActual = this->m_target->GetCoords( );
-
-       Vec3 sp_actual( sourceActualParent - targetActualParent );
-       Vec3 sg_actual( targetActual - sourceActual );
-
-       const Edge* edgeComparedParent = edge.m_source->GetEdge( );
-       Vec3 sourceComparedParent = edgeComparedParent->m_source->GetCoords( );
-       Vec3 targetComparedParent = edgeComparedParent->m_target->GetCoords( );
-       Vec3 sourceCompared = edge.m_source->GetCoords( );
-       Vec3 targetCompared = edge.m_target->GetCoords( );
-
-       Vec3 sp_compared( sourceComparedParent - targetComparedParent );
-       Vec3 sg_compared( targetCompared - sourceCompared );
-
-       //Get the quaternion between parents
-       Quaternion q_parent(sp_actual, sp_compared);
-
-       // Get the translation vector to translate the compared parent to the actual parent
-       const Vec3 transParents( targetActualParent - targetComparedParent);
-        */
-
-       // Iterate over the voxels in the compared edge
-       for(vec_pair_posVox_rad::iterator it = edge->m_vec_pair_posVox_rad.begin(); it != edge->m_vec_pair_posVox_rad.end(); ++it)
-       {
-               // Get the vector from the compared source to each voxel in the compared edge
-               Vec3 voxel_actual = (*it).first;
-               /*Vec3 vector_compared(voxel_actual - sourceCompared);
-
-               // Rotate the vector using the parental quaternion
-               Vec3 vector_compared_rotated = q_parent.rotateVector(vector_compared);
-                */
-
-               // Find the distance to the closest point in the actual edge
-               //averageDistance += getDistanceToClosestPoint(sourceActual+vector_compared_rotated);
-               averageDistance += this->GetSmallestDistanceToPoint(voxel_actual);
-
-               ++numPoints;
-       }
-
-       // Get the average value
-       if(numPoints > 0)
-               averageDistance = averageDistance / numPoints;
-
-       return averageDistance;
-}
-
-float Edge::GetDistanceToTranslatedEdge(Edge* edge, Vec3 vector_translation)
-{
-       // a. The parent edges must be aligned before calculate the distance.
-       // b. Parent end-points are aligned also.
-       // Steps a and b represent a rotation and a translation respectively.
-       // c. For each point in the actual Edge (this) the closest point in the
-       // compared edge is found. This distance is calculated and then averaged
-       // for all the points. Must be done in both ways?
-       // We can take the maximum of both distances max(D(a,b),D(b,a))
-
-       // Variables
-       float averageDistance = 0.0;
-       float numPoints = 0;
-
-       // Iterate over the voxels in the compared edge
-       for(vec_pair_posVox_rad::iterator it = edge->m_vec_pair_posVox_rad.begin(); it != edge->m_vec_pair_posVox_rad.end(); ++it)
-       {
-               // Get the vector from the compared source to each voxel in the compared edge
-               Vec3 voxel_actual = (*it).first;
-
-               // Translate the voxel
-               Vec3 voxel_translated = voxel_actual + vector_translation;
-
-               // Find the distance to the closest point in the actual edge
-               averageDistance += this->GetSmallestDistanceToPoint(voxel_translated);
-
-               ++numPoints;
-       }
-
-       // Get the average value
-       if(numPoints > 0)
-               averageDistance = averageDistance / numPoints;
-
-       return averageDistance;
-}
-
-float Edge::GetDistanceWeigthedToTranslatedEdge(Edge* edge, Vec3 vector_translation)
-{
-       // a. The parent edges must be aligned before calculate the distance.
-       // b. Parent end-points are aligned also.
-       // Steps a and b represent a rotation and a translation respectively.
-       // c. For each point in the actual Edge (this) the closest point in the
-       // compared edge is found. This distance is calculated and then averaged
-       // for all the points. Must be done in both ways?
-       // We can take the maximum of both distances max(D(a,b),D(b,a))
-
-       // Variables
-       double alfa = 4; // Weight for duplicated closest points
-       float distance_average = 0.0;
-       float distance_actual = 0.0;
-       float numPoints = 0;
-       std::map<Vec3, vec_pair_posVox_rad > map_vector_pair_vector_distance; // Map to save the correspondences between the given edge voxels and this voxels, and the distance between them.
-
-       // Iterate over the voxels in the compared edge
-       for(vec_pair_posVox_rad::iterator it = edge->m_vec_pair_posVox_rad.begin(); it != edge->m_vec_pair_posVox_rad.end(); ++it)
-       {
-               // Get the vector from the compared source to each voxel in the compared edge
-               Vec3 voxel_actual = (*it).first;
-
-               // Translate the voxel
-               Vec3 voxel_translated = voxel_actual + vector_translation;
-
-               // Find the distance to the closest point in the actual edge
-               Vec3 point_closest = this->GetClosestPoint(voxel_translated, distance_actual);
-               distance_average += distance_actual;
-
-               // Add the link
-               pair_posVox_rad pair_vector_distance(voxel_actual, distance_actual);
-               map_vector_pair_vector_distance[point_closest].push_back(pair_vector_distance);
-
-               ++numPoints;
-       }
-
-       // Add the weight to shared closest points
-       float distance_weighted = 0.0;
-       for(std::map<Vec3, vec_pair_posVox_rad>::iterator it = map_vector_pair_vector_distance.begin(); it != map_vector_pair_vector_distance.end(); ++it)
-       {
-               vec_pair_posVox_rad vector_pair_vector_distance = (*it).second;
-               if(vector_pair_vector_distance.size() > 1)
-               {
-                       for(vec_pair_posVox_rad::iterator it_vector = vector_pair_vector_distance.begin(); it_vector != vector_pair_vector_distance.end(); ++it_vector)
-                               distance_weighted += (*it_vector).second * alfa;
-               }
-               else
-               {
-                       for(vec_pair_posVox_rad::iterator it_vector = vector_pair_vector_distance.begin(); it_vector != vector_pair_vector_distance.end(); ++it_vector)
-                               distance_weighted += (*it_vector).second;
-               }
-       }
-
-       // Get the average value
-       if(numPoints > 0)
-       {
-               distance_average = distance_average / numPoints;
-               distance_weighted = distance_weighted / numPoints;
-       }
-
-       //std::cout << "[DistanceW;DistAvg][" << distance_weighted << ";" << distance_average << "];;";
-       //return distance_average;
-       return distance_weighted;
-}
-
-float Edge::GetDistanceToPoint(Vec3 point)
-{
-       // Variables
-       bool first = true;
-       float distance = 0.0;
-
-       // Iterate over all voxel in the edge
-       vec_pair_posVox_rad::iterator it = this->m_vec_pair_posVox_rad.begin();
-       for (; it != this->m_vec_pair_posVox_rad.end(); ++it)
-       {
-               // Get the vector from the compared source to each voxel
-               Vec3 voxel_actual = ((*it).first);
-
-               // Get the difference vector
-               Vec3 vector_diff = point - voxel_actual;
-
-               // Get the distance
-               distance += vector_diff.Norm();
-       }
-
-       return distance;
-}
-
-
-float Edge::GetSmallestDistanceToPoint(Vec3 vector)
-{
-       // Variables
-       float minDistance = -1.0;
-       bool first = true;
-       float distanceTemp = 0.0;
-
-       // Iterate over all voxel in the edge
-       vec_pair_posVox_rad::iterator it = this->m_vec_pair_posVox_rad.begin();
-       for (; it != this->m_vec_pair_posVox_rad.end(); ++it)
-       {
-               // Get the vector from the compared source to each voxel
-               Vec3 voxel_actual = ((*it).first);
-               //Vec3 source_actual = this->m_source->GetCoords( );
-               //Vec3 vector_actual(voxel_actual - source_actual);
-
-               // Get the difference vector
-               Vec3 vector_diff = vector - voxel_actual;
-
-               // Get the distance
-               distanceTemp = vector_diff.Norm();
-
-               // Get the minimum
-               if(first)
-               {
-                       minDistance = distanceTemp;
-                       first = false;
-               }
-               else if(distanceTemp < minDistance)
-                       minDistance = distanceTemp;
-       }
-
-       return minDistance;
-}
-
-Vec3 Edge::GetClosestPoint(Vec3 vector, float& distance)
-{
-       // Variables
-       Vec3 point_closest;
-       bool first = true;
-       float distanceTemp = 0.0;
-
-       // Iterate over all voxel in the edge
-       vec_pair_posVox_rad::iterator it = this->m_vec_pair_posVox_rad.begin();
-       for (; it != this->m_vec_pair_posVox_rad.end(); ++it)
-       {
-               // Get the vector from the compared source to each voxel
-               Vec3 voxel_actual = ((*it).first);
-               //Vec3 source_actual = this->m_source->GetCoords( );
-               //Vec3 vector_actual(voxel_actual - source_actual);
-
-               // Get the difference vector
-               Vec3 vector_diff = vector - voxel_actual;
-
-               // Get the distance
-               distanceTemp = vector_diff.Norm();
-
-               // Get the minimum
-               if(first)
-               {
-                       point_closest = voxel_actual;
-                       distance = distanceTemp;
-                       first = false;
-               }
-               else if(distanceTemp < distance)
-               {
-                       point_closest = voxel_actual;
-                       distance = distanceTemp;
-               }
-       }
-
-       return point_closest;
-}
-
-Edge* Edge::ConcatenateToSuperior(Edge* superior)
-{
-       if(superior == NULL)
-               return new Edge(this);
-
-       // Check concatenation condition in the nodes
-       if(superior->GetTarget()->GetCoords() != this->GetSource()->GetCoords())
-       {
-               std::cout << "Edge::ConcatenateToSuperior - superior.target != actualEdge.source. Actual idNode:" << this->m_id << std::endl;
-               std::cout << "[superior.target;actualEdge.source]: [" << superior->GetTarget()->GetCoords() << ";" << this->GetSource()->GetCoords() << "]" << std::endl;
-               return NULL;
-       }
-
-       // Check concatenation condition in the edge information
-       vec_pair_posVox_rad vectorInfo_thisEdge = this->GetEdgeInfo(); // Actual edge information
-       vec_pair_posVox_rad vectorInfo_superiorEdge = superior->GetEdgeInfo(); // Superior edge information
-
-       // Check that last superior edge position is equal to first initial actual edge position
-       if(vectorInfo_superiorEdge[vectorInfo_superiorEdge.size()-1].first != vectorInfo_thisEdge[0].first)
-       {
-               std::cout << "Edge::ConcatenateToSuperior - superior.info[end] != actualEdge.info[begin]. Actual idNode:" << this->m_id << std::endl;
-               return NULL;
-       }
-
-       // Change the superior edge target, the superior length, and the euclidian distance
-       superior->SetTarget(this->GetTarget());
-       superior->SetLength(superior->GetLength()+this->GetLength()-1);
-       superior->SetEDistance(superior->GetEDistance()+this->GetEDistance());
-
-       // Add the position information
-       vec_pair_posVox_rad::iterator it_actualInfo = vectorInfo_thisEdge.begin();
-       ++it_actualInfo; // Skip the first position because is it shared between both edges
-       for(; it_actualInfo != vectorInfo_thisEdge.end(); ++it_actualInfo)
-               vectorInfo_superiorEdge.push_back((*it_actualInfo));
-
-       // Set the new information
-       superior->SetSkeletonPairVector(vectorInfo_superiorEdge);
-
-       return superior;
-
-}
-
-Edge&  Edge::operator=(Edge& edge)
-{
-       this->m_mark = edge.m_mark;
-       this->m_angle = edge.m_angle;
-       this->m_length = edge.m_length;
-       this->m_eDistance = edge.m_eDistance;
-       this->m_aRadius = edge.m_aRadius;
-       this->m_minRadius = edge.m_minRadius;
-       this->m_maxRadius = edge.m_maxRadius;
-       this->m_source = edge.m_source;
-       this->m_target = edge.m_target;
-       this->m_vec_pair_posVox_rad = edge.m_vec_pair_posVox_rad;
-       return *this;
-}
-
-const Edge&  Edge::operator=(const Edge& edge)
-{
-       this->m_mark = edge.m_mark;
-       this->m_angle = edge.m_angle;
-       this->m_length = edge.m_length;
-       this->m_eDistance = edge.m_eDistance;
-       this->m_aRadius = edge.m_aRadius;
-       this->m_minRadius = edge.m_minRadius;
-       this->m_maxRadius = edge.m_maxRadius;
-       this->m_source = edge.m_source;
-       this->m_target = edge.m_target;
-       this->m_vec_pair_posVox_rad = edge.m_vec_pair_posVox_rad;
-       return *this;
-}
-
-bool  Edge::operator==(const Edge& edge)
-                                                                                                                 {
-       bool cmp1 = true;
-       bool cmp2 = true;
-       bool cmp3 = true;
-       bool cmp4 = true;
-       bool cmp5 = true;
-       bool cmp6 = true;
-       /*if (this->m_angle != edge.m_angle)
-     {
-     double max =
-     this->m_angle >= edge.m_angle ? this->m_angle : edge.m_angle;
-     double tol = 0.3 * max;
-     double diff = this->m_angle - edge.m_angle;
-     if (!((-tol <= diff) && (diff <= tol)))
-     cmp1 = false;
-     }*/
-       if (this->m_length != edge.m_length)
-       {
-               double max =
-                               this->m_length >= edge.m_length ? this->m_length : edge.m_length;
-               double tol = 0.3 * max;
-               double diff = abs(this->m_length - edge.m_length);
-               if (diff > tol)
-                       cmp2 = false;
-       }
-       if (this->m_eDistance != edge.m_eDistance)
-       {
-               double max =
-                               this->m_eDistance >= edge.m_eDistance ?
-                                               this->m_eDistance : edge.m_eDistance;
-               double tol = 0.3 * max;
-               double diff = abs(this->m_eDistance - edge.m_eDistance);
-               if (diff > tol)
-                       cmp3 = false;
-       }
-       /*if (this->m_aRadius != edge.m_aRadius)
-     {
-     double max =
-     this->m_aRadius >= edge.m_aRadius ?
-     this->m_aRadius : edge.m_aRadius;
-     double tol = 0.3 * max;
-     double diff = abs(this->m_aRadius - edge.m_aRadius);
-     if (diff > tol)
-     cmp4 = false;
-     }
-     if (this->m_minRadius != edge.m_minRadius)
-     {
-     double max =
-     this->m_minRadius >= edge.m_minRadius ?
-     this->m_minRadius : edge.m_minRadius;
-     double tol = 0.3 * max;
-     double diff = abs(this->m_minRadius - edge.m_minRadius);
-     if (diff > tol)
-     cmp5 = false;
-     }
-     if (this->m_maxRadius != edge.m_maxRadius)
-     {
-     double max =
-     this->m_maxRadius >= edge.m_maxRadius ?
-     this->m_maxRadius : edge.m_maxRadius;
-     double tol = 0.3 * max;
-     double diff = abs(this->m_maxRadius - edge.m_maxRadius);
-     if (diff > tol)
-     cmp6 = false;
-     }*/
-       return (cmp1 && cmp2 && cmp3 && cmp4 && cmp5 && cmp6);
-                                                                                                                 }
-
-bool  Edge::operator!=(const Edge& edge)
-                                                                                                                 {
-       return !(*this == edge);
-                                                                                                                 }
-
-bool  Edge::operator<(const Edge& edge)
-{
-       bool cmp1 = true;
-       bool cmp2 = true;
-       if (this->m_length != edge.m_length)
-       {
-               double max =
-                               this->m_length >= edge.m_length ? this->m_length : edge.m_length;
-               double tol = 0.3 * max;
-               double diff = abs(this->m_length - edge.m_length);
-               if (diff > tol)
-                       cmp2 = false;
-       }
-       if (this->m_eDistance != edge.m_eDistance)
-       {
-               double max =
-                               this->m_eDistance >= edge.m_eDistance ?
-                                               this->m_eDistance : edge.m_eDistance;
-               double tol = 0.3 * max;
-               double diff = abs(this->m_eDistance - edge.m_eDistance);
-               if (diff > tol)
-                       cmp2 = false;
-       }
-       if (cmp1 && cmp2)
-               return false;
-       if ((this->m_length < edge.m_length)
-                       || (this->m_eDistance < edge.m_eDistance))
-               return true;
-       return false;
-
-}
-
-bool  Edge::operator>(const Edge& edge)
-{
-       bool cmp1 = true;
-       bool cmp2 = true;
-       if (this->m_length != edge.m_length)
-       {
-               double max =
-                               this->m_length >= edge.m_length ? this->m_length : edge.m_length;
-               double tol = 0.3 * max;
-               double diff = abs(this->m_length - edge.m_length);
-               if (diff > tol)
-                       cmp2 = false;
-       }
-       if (this->m_eDistance != edge.m_eDistance)
-       {
-               double max =
-                               this->m_eDistance >= edge.m_eDistance ?
-                                               this->m_eDistance : edge.m_eDistance;
-               double tol = 0.3 * max;
-               double diff = abs(this->m_eDistance - edge.m_eDistance);
-               if (diff > tol)
-                       cmp2 = false;
-       }
-       if (cmp1 && cmp2)
-               return false;
-       if ((this->m_length > edge.m_length)
-                       || (this->m_eDistance > edge.m_eDistance))
-               return true;
-       return false;
-}
-
-} /* namespace airways */
diff --git a/lib/Airways/AirwaysLib/airwaysEdge.h b/lib/Airways/AirwaysLib/airwaysEdge.h
deleted file mode 100644 (file)
index 8157793..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * airwaysEdge.h
- *
- *  Created on: May 12, 2014
- *      Author: caceres
- */
-
-#ifndef AIRWAYSEDGE_H_
-#define AIRWAYSEDGE_H_
-
-#include <cstddef>
-#include <cstdlib>
-#include <vector>
-#include <utility>
-#include <limits>
-
-#include "airwaysNode.h"
-#include "Quaternion.h"
-#include <Airways/AirwaysLib/TempAirwaysAppli_AirwaysLib_Export.h>
-
-/**
- * @brief Airways project namespace
- */
-namespace airways
-{
-
-/*
- * Pair of <Vec3,double> which means the position of the skeleton point
- * between two nodes (including branch-points) and it radius (obtained from
- * the Danielsson's distance map algorithm)
- */
-typedef std::pair<Vec3, double> pair_posVox_rad;
-
-/*
- * A vector stocking all the points between two nodes
- */
-typedef std::vector<pair_posVox_rad> vec_pair_posVox_rad;
-
-class Node;
-
-/*
- * This class represents an edge in a tree. Particularly, this edge represents the relation from child to father.
- * This means that the edge source corresponds to the father and the target to the child. This implies that the root
- * node has a NULL edge.
- */
-class TempAirwaysAppli_AirwaysLib_EXPORT Edge
-{
-public:
-       /*!
-        * Default constructor
-        */
-       Edge();
-
-       /*!
-        * Alternative constructor (copy)
-        * @param edge
-        */
-       Edge(Edge* edge);
-
-       /*!
-        * Destructor
-        */
-       virtual ~Edge();
-
-
-       //Getters
-
-       /*!
-        * This method returns the angle between two vectors using its parent as
-        * reference
-        * @return
-        */
-       int GetAngle() const;
-
-       /*!
-        * This method returns the Average radius between two branch-points
-        * @return
-        */
-       double GetARadius() const;
-
-       /*!
-        * This method returns the euclidean distance between two branch-points
-        * @return
-        */
-       double GetEDistance() const;
-
-       /*!
-        * This method returns the geodesic distance between two branch-points
-        * @return
-        */
-       double GetLength() const;
-
-       /*!
-        * This method returns the maximum radius between two branch-points
-        * @return
-        */
-       double GetMaxRadius() const;
-
-       /*!
-        * This method returns the minimum radius between two branch-points
-        * @return
-        */
-       double GetMinRadius() const;
-
-       /*!
-        * This method returns the source node of an edge
-        * @return
-        */
-       Node*   GetSource() const;
-
-       /*!
-        * This method returns the target node of an edge
-        * @return
-        */
-       Node*   GetTarget() const;
-
-       /*!
-        * This method returns the SKPairInfoVector of an edge
-        * @return
-        */
-       const vec_pair_posVox_rad&      GetEdgeInfo() const;
-
-       /*!
-        * This method returns true if an edge is marked
-        * @return
-        */
-       bool IsMarked() const;
-
-       /**
-        * Method that returns if a voxel is influenced by this edge, i.e. if the distance
-        * to the closest voxel of the edge is smaller than the radius on the closest voxel.
-        * @param x,y,z are the voxel positions in coordinates x, y, and z respectively.
-        * @return true is the voxel is influenced, false otherwise
-        */
-       bool IsPointInfluencedByEdge(float point_x, float point_y, float point_z) const;
-
-       //Setters and Modifiers
-
-       /*!
-        * This method sets the angle between two vectors using its parent
-        * as reference
-        * @param angle
-        */
-       void SetAngle(const double& angle);
-
-       /*!
-        * This method sets the average radius between two nodes
-        * @param aRadius
-        */
-       void SetARadius(const double& aRadius);
-
-
-       /*!
-        * This method sets the Euclidean distance between two nodes
-        * @param eDistance
-        */
-       void SetEDistance(const double& eDistance);
-
-       /*!
-        * This method sets the geodesical length between two nodes
-        * @param length
-        */
-       void SetLength(const double& length);
-
-       /*!
-        * This method sets the maximum radius between two nodes
-        * @param maxRadius
-        */
-       void SetMaxRadius(const unsigned int& maxRadius);
-
-       /*!
-        * This method sets the minimum radius between two nodes
-        * @param minRadius
-        */
-       void SetMinRadius(const unsigned int& minRadius);
-
-       /*!
-        * This method sets the source node of an edge
-        * @param source
-        */
-       void SetSource(Node* source);
-
-       /*!
-        * This method sets the target node of an edge
-        * @param target
-        */
-       void SetTarget(Node* target);
-
-       /*!
-        * This method adds a pair <Coordinate, Radius> into skPInfoVector
-        * @param skPairInfo
-        */
-       void AddSkeletonPairInfo(const pair_posVox_rad& skPairInfo);
-
-       /*!
-        * This method sets the skPInfoVector
-        * @param skPInfoVector
-        */
-       void SetSkeletonPairVector(const vec_pair_posVox_rad& skPInfoVector);
-
-       /*!
-        * This method updates all the attributes of an edge using the information
-        * provided from m_skInfoPairVector attribute.
-        */
-       void UpdateEdgeInfo();
-
-       /**
-        * Method that compares two edges.
-        * @pre The actual and the edge given by parameter both have a parent edge
-        * @param edge is the edge to be compared with
-        * @return the evalation value
-        */
-       double CompareWith(Edge* edge);
-
-       /**
-        * Method that obtains the distance between two edges
-        * @param edge is the edge to be compared with
-        * @return the average distance from all points in the given edge
-        * to this edge. The distance from each in point in the edge to this
-        * edge is defined as the minimum distance to all the point in this
-        * edge.
-        */
-       float GetDistanceToEdge(Edge* edge);
-
-       float GetDistanceToTranslatedEdge(Edge* edge, Vec3 vector_translation);
-
-       /**
-        * Method that returns the distance point to point to the edge given by parameter.
-        * Additionally, the points that share the same closest point receive more weight in the distance.
-        * @param edge is the edge to be compared with
-        * @param vector_translation is the translation vector to translate the given edge
-        * @return the weigthed distance to the given edge
-        */
-       float GetDistanceWeigthedToTranslatedEdge(Edge* edge, Vec3 vector_translation);
-
-       /**
-        * Method that calculates the distance from edge to one point in the space
-        * @point is the point in the space
-        * @return the distance from edge to one point in the space
-        */
-       float GetDistanceToPoint(Vec3 point);
-
-       /**
-        * Method that returns the smallest distance of the edge voxels to the given voxel (represented as a vector)
-        * @param vector is the point to be compared
-        * @return the smallest distance of the edge voxels to the given voxel
-        */
-       float GetSmallestDistanceToPoint(Vec3 vector);
-
-       /**
-        * Method that returns the closest point in the edge to the given point (represented as a vector) and the distance between them (by parameter)
-        * @param vector is the point to be compared
-        * @param distance is the returned distance to the closes point
-        * @return the closest vector and the minimum distance of the point to the points in the edge by parameter.
-        */
-       Vec3 GetClosestPoint(Vec3 vector, float& distance);
-
-       /**
-        * Method that concatenates the actual edge to a superior one given by parameter
-        * @param superior is the superio edge. The target of the superior edge must be the source of the actual edge
-        *       in terms of voxel position.
-        * @return the composed edge to the superior edge
-        */
-       Edge* ConcatenateToSuperior(Edge* superior);
-
-       //Operator Overload
-
-       Edge& operator=(Edge& edge);
-
-       const Edge&     operator=(const Edge& edge);
-
-       bool operator==(const Edge& edge);
-
-       bool operator!=(const Edge& edge);
-
-       bool operator<(const Edge& edge);
-
-       bool operator>(const Edge& edge);
-
-protected:
-
-       unsigned int m_id;
-
-       /**
-        * Source node representing the father
-        */
-       Node* m_source;
-
-       /**
-        * Target node representing the child
-        */
-       Node* m_target;
-
-       bool m_mark; //!Mark attribute
-
-       double m_angle; //!Angle between two vectors having its parent as reference
-
-       double m_length; //!Geodesic distance
-
-       double m_eDistance; //!Euclidean distance
-
-       double m_aRadius; //!Average radius between two nodes
-
-       unsigned int m_minRadius; //!Minimum radius between two nodes
-
-       unsigned int m_maxRadius; //!Maximum radius between two nodes
-
-       /*!
-        * The m_vec_pair_posVox_rad is a vector containing all centerline points,
-        * in real coordinates of the image, and radius information of an edge.
-        * i.e., for each point of the skeleton between two nodes there is a pair
-        * <position real coordinates, radius>
-        */
-       vec_pair_posVox_rad m_vec_pair_posVox_rad;
-
-       friend class AirwaysTree; //!Friend class AirwaysTree
-
-       friend class Node; //!Friend class Node
-};
-
-} /* namespace airways */
-
-#endif /* AIRWAYSEDGE_H_ */
diff --git a/lib/Airways/AirwaysLib/airwaysNode.cxx b/lib/Airways/AirwaysLib/airwaysNode.cxx
deleted file mode 100644 (file)
index 27f6845..0000000
+++ /dev/null
@@ -1,1655 +0,0 @@
-/*
- * airwaysNode.cxx
- *
- *  Created on: May 12, 2014
- *  Author: Diego Cáceres
- *
- *  Modified by: Alfredo Morales Pinzón
- */
-
-#include <iostream>
-
-#include "airwaysNode.h"
-
-namespace airways
-{
-
-Node::Node() : m_id(0), m_children(), m_edge(NULL), m_coords(0, 0, 0), m_level(-1), m_mark(false)
-{
-}
-
-Node::Node(const Vec3& coord) : m_id(0), m_children(), m_edge(NULL), m_level(-1), m_mark(false)
-{
-       this->m_coords = coord;
-       this->m_level = 0;
-}
-
-Node::Node(Node* node) : m_id(0), m_children(), m_mark(false)
-{
-       this->m_coords = node->m_coords;
-       this->m_level = node->m_level;
-       this->m_edge = new Edge(node->m_edge);
-}
-
-Node::~Node()
-{
-}
-
-//Getters
-
-const std::vector<Node*>& Node::GetChildren() const
-{
-       return this->m_children;
-}
-
-const unsigned int Node::GetId() const
-{
-       return this->m_id;
-}
-
-const Vec3& Node::GetCoords() const
-{
-       return this->m_coords;
-}
-
-Edge* Node::GetEdge() const
-{
-       return this->m_edge;
-}
-
-Node* Node::GetFather() const
-{
-       return this->father;
-}
-
-unsigned int Node::GetLevel() const
-{
-       return this->m_level;
-}
-
-int Node::GetDepthById(unsigned int idNode) const
-{
-       if( this->m_id == idNode)
-               return 0;
-
-       vec_nodes::const_iterator it = this->m_children.begin();
-       for( ; it != this->m_children.end(); ++it)
-       {
-               if((*it)->HasNodeId(idNode))
-                       return 1 + (*it)->GetDepthById(idNode);
-       }
-
-       std::cout << "GetDepthById - The idNode: " << idNode <<  "does not exist" << std::endl;
-
-       return -1;
-}
-
-unsigned int Node::GetWeight() const
-{
-       if(this->IsLeaf())
-               return 1;
-
-       unsigned int weight = 0;
-
-       vec_nodes::const_iterator it = this->m_children.begin();
-       for( ; it != this->m_children.end(); ++it)
-               weight += (*it)->GetWeight();
-
-       return 1 + weight;
-}
-
-unsigned int Node::GetHeight() const
-{
-       unsigned int heightChildren = 0;
-
-       vec_nodes::const_iterator it=this->m_children.begin();
-       for( ; it != this->m_children.end(); ++it)
-       {
-               unsigned int actualHeight = (*it)->GetHeight();
-               if(actualHeight > heightChildren)
-                       heightChildren = actualHeight;
-       }
-
-       // Return my heigh plus my children height
-       return 1 + heightChildren;
-}
-
-unsigned int Node::GetNumberOfChildren() const
-{
-       return this->m_children.size();
-}
-
-unsigned int Node::GetNumberOfNonMarkedChildren( unsigned int depth ) const
-{
-       if(depth > 0)
-       {
-               unsigned int nonMarked = 0;
-
-               for(vec_nodes::const_iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-               {
-                       if( !(*it)->m_mark )
-                               ++nonMarked;
-                       nonMarked += (*it)->GetNumberOfNonMarkedChildren( depth - 1 );
-               }
-               return nonMarked;
-       }
-       return 0;
-}
-
-unsigned int Node::GetNumberOfLeafs() const
-{
-       if(this->IsLeaf())
-               return 1;
-
-       unsigned int leafs = 0;
-       vec_nodes::const_iterator it = this->m_children.begin();
-       for( ; it != this->m_children.end(); ++it)
-               leafs += (*it)->GetNumberOfLeafs();
-
-       return leafs;
-}
-
-Node* Node::GetNodeById(unsigned int nId)
-{
-       // Base case
-       if( m_id == nId)
-               return this;
-
-       Node* node_searched = NULL;
-
-       // Search in the children
-       vec_nodes::iterator it_children = m_children.begin();
-       for( ; it_children != m_children.end() && node_searched == NULL; ++it_children)
-               node_searched = (*it_children)->GetNodeById(nId);
-
-       return node_searched;
-}
-
-Node* Node::GetClosestBranchNodeToPoint(float point_x, float point_y, float point_z, float &distance)
-{
-       // Get the actual distance
-       distance = GetBranchDistanceToPoint(point_x, point_y, point_z);
-
-       // Make as closest "this" node
-       Node* node_closest = this;
-
-       // Iterate over the children
-       vec_nodes::iterator it_children = m_children.begin();
-       for( ; it_children != m_children.end(); ++it_children)
-       {
-               // Get actual child distance
-               float distance_actual = 0;
-               Node* bestNodeChild = (*it_children)->GetClosestBranchNodeToPoint(point_x, point_y, point_z, distance_actual);
-
-               // If the child distance is smaller then switch
-               if(distance_actual < distance)
-               {
-                       node_closest = bestNodeChild;
-                       distance = distance_actual;
-               }
-       }
-
-       return node_closest;
-}
-
-Node* Node::GetClosestNodeToPoint(Vec3 position, double& distance)
-{
-       // Calculate actual distance to point
-       Vec3 vector_diff = position - this->m_coords;
-       distance = vector_diff.Norm();
-
-       if(this->IsLeaf())
-               return this;
-
-       // Variables
-       double actualDistance = -1;
-       Node* node_Best = this;
-       Node* node_Actual = NULL;
-
-       // Check the children and get the best
-       for(vec_nodes::const_iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-       {
-               node_Actual = (*it)->GetClosestNodeToPoint(position, actualDistance);
-
-               if(actualDistance < distance)
-               {
-                       node_Best = node_Actual;
-                       distance = actualDistance;
-               }
-       }
-
-       if(actualDistance == -1)
-               std::cout << "GetClosestNodeToPoint NOT FOUND!" << std::endl;
-
-       return node_Best;
-}
-
-float Node::GetBranchDistanceToPoint(int voxel_x, int voxel_y, int voxel_z)
-{
-       Vec3 voxel(voxel_x,voxel_y, voxel_z);
-       if(this->m_edge != NULL)
-               return this->m_edge->GetSmallestDistanceToPoint(voxel);
-       else
-       {
-               Vec3 vector_diff = this->m_coords - voxel;
-               return vector_diff.Norm();
-       }
-}
-
-bool Node::HasMinimumLevels(int levels)
-{
-       if(levels == 1)
-               return true;
-
-       bool minimum = false;
-
-       vec_nodes::iterator it=this->m_children.begin();
-       for( ; it != this->m_children.end() && !minimum; ++it)
-               if((*it)->HasMinimumLevels(levels-1))
-                       minimum = true;
-
-       return minimum;
-}
-
-bool Node::IsLeaf() const
-{
-       return this->m_children.empty();
-}
-
-bool Node::IsMarked() const
-{
-       return this->m_mark;
-}
-
-bool Node::HasMarkedChildren() const
-{
-       if(this->IsLeaf())
-               return false;
-
-       // Check the children
-       vec_nodes::const_iterator it = this->m_children.begin();
-       for( ; it != this->m_children.end(); ++it)
-               if( (*it)->IsMarked() || (*it)->HasMarkedChildren())
-                       return true;
-
-       return false;
-}
-
-bool Node::HasNode(Node* node_searched) const
-{
-       if(this->m_id == node_searched->m_id)
-               return true;
-
-       bool found = false;
-
-       vec_nodes::const_iterator it = this->m_children.begin();
-       for( ; it != this->m_children.end() && !found; ++it)
-               if( (*it)->HasNode(node_searched) )
-                       found = true;
-
-       return found;
-}
-
-bool Node::HasNodeId(unsigned int id_node_searched) const
-{
-       // If this is the node then return true
-       if(this->m_id == id_node_searched)
-               return true;
-
-       // Search in the children
-       bool found = false;
-       vec_nodes::const_iterator it = this->m_children.begin();
-       for( ; it != this->m_children.end() && !found; ++it)
-               if( (*it)->HasNodeId(id_node_searched) )
-                       found = true;
-
-       return found;
-}
-
-bool Node::IsPointInfluencedByNode(float point_x, float point_y, float point_z) const
-{
-       if(this->m_edge)
-               return m_edge->IsPointInfluencedByEdge(point_x, point_y, point_z);
-
-       return false;
-}
-
-void Node::GetBrancheNodesInfluencingPoint(float point_x, float point_y, float point_z, vec_nodes& vec_nodes_influence)
-{
-       if(this->IsPointInfluencedByNode(point_x, point_y, point_z))
-               vec_nodes_influence.push_back(this);
-
-       vec_nodes::const_iterator it = this->m_children.begin();
-       for( ; it != this->m_children.end(); ++it)
-               (*it)->GetBrancheNodesInfluencingPoint(point_x, point_y, point_z, vec_nodes_influence);
-}
-
-void Node::GetChildrenUptoDepth(unsigned int Q, vec_nodes& fathers)
-{
-       if(Q > 0)
-       {
-               vec_nodes::const_iterator it = this->m_children.begin();
-               for( ; it != this->m_children.end(); ++it)
-               {
-                       fathers.push_back((*it));
-                       (*it)->GetChildrenUptoDepth(Q-1, fathers);
-               }
-               /*// Add this node
-               fathers.push_back(this);
-
-               // If the depth is greater that 1 then add the children of this node
-               if(Q > 1)
-               {
-                       vec_nodes::const_iterator it = this->m_children.begin();
-                       for( ; it != this->m_children.end(); ++it)
-                               (*it)->GetChildrenUptoDepth(Q-1, fathers);
-               }*/
-       }
-}
-
-void Node::CompareSubTreesOrkiszMorales(Node* nodeB, unsigned int Q, unsigned int F, vec_nodes& commonA, vec_nodes& commonB, vec_nodes& nonCommonA, vec_nodes& nonCommonB, map_id_vecnodes& map_A_to_B, map_id_vecnodes& map_B_to_A, std::vector< std::pair< pair_nodes, pair_nodes > >& vector_pair_edges)
-{
-       //std::cout << "---------------------------------------------------------" << std::endl;
-       //std::cout << "Comparing [A,B]: " << this->m_id << "," << nodeB->m_id << std::endl;
-
-       // Variables
-       double distanceAtoB = 0;
-       double distanceBtoA = 0;
-       Node* node_bestA = NULL;
-       Node* node_bestB = NULL;
-
-       // Algorithm
-       // The algorithm is recursive it is implemented the node class. The idea is to overlap the initial nodes of the subtrees
-       // and find the best branch correspondence for the first level of the trees.
-       // Hypothesis: It is supposed that the roots of the trees are common, so the algorithm does not run in the root nodes
-       // 1. Translate one of the subtree so that the initial nodes overlap.
-       // 2. While one of the trees has non-marked child
-       //   2.1 Compare each child to all the branches is the other tree.
-       //   2.2 Select the pair, child and branch in the other tree, that has the lowest distance function.
-       //   2.3 Add the pair and the distance to the final result.
-       //   2.4 Mark the nodes
-       //   2.5 Find and mark the omitted nodes in the similar branch. If the selected branch has more that 2 nodes it means that intermediary nodes do not have correspondence.
-       //   2.6 Run the process (First step) using the found pair of nodes.
-
-       //1. Translate one of the subtree so that the initial nodes overlap.
-       // The translation must be applied later
-
-       Vec3 vector_trans_B_to_A = this->m_coords - nodeB->m_coords;
-
-       // ------------------------
-       // ------------------------
-       // Making the matching faster
-       std::multimap<double, pair_nodes> map_dist_pairNodes_A_to_B = this->CalculateDistanceToAllBranches_FatherAndFamily(nodeB, Q, F);
-       std::multimap<double, pair_nodes> map_dist_pairNodes_B_to_A = nodeB->CalculateDistanceToAllBranches_FatherAndFamily(this, Q, F);
-
-       // ------------------------
-       // ------------------------
-
-       while( this->GetNumberOfNonMarkedChildren( Q ) > 0 && nodeB->GetNumberOfNonMarkedChildren( Q ) > 0 )
-       {
-               //   2.1 Compare each child to all the branches is the other tree.
-
-               //     2.1.1 Get best translated branch from A to B
-               //std::pair<pair_nodes,double> pair_A_to_B = this->GetClosestBranch_FatherAndFamily(nodeB);
-               //     2.1.2 Get best translated branch from B to A
-               //std::pair<pair_nodes,double> pair_B_to_A = nodeB->GetClosestBranch_FatherAndFamily(this);
-
-               // ------------------------
-               // ------------------------
-               // Making the matching faster
-               // Get the next best pair
-               std::pair<double,pair_nodes> pair_A_to_B = GetPairWithClosestDistance_FirstNodeNonMarked(map_dist_pairNodes_A_to_B);
-               std::pair<double,pair_nodes> pair_B_to_A = GetPairWithClosestDistance_FirstNodeNonMarked(map_dist_pairNodes_B_to_A);
-
-               if( ! pair_A_to_B.second.first || ! pair_A_to_B.second.second )
-                       std::cout << "There is no closest-non-marked branch!" << std::endl;
-
-               distanceAtoB = pair_A_to_B.first;
-               distanceBtoA = pair_B_to_A.first;
-
-               //std::map<double, pair_nodes> map_dist_pairNodes_A_to_B = this->CalculateDistanceToAllBranches_FatherAndFamily(nodeB);
-               //std::map<double, pair_nodes> map_dist_pairNodes_B_to_A = nodeB->CalculateDistanceToAllBranches_FatherAndFamily(this);
-               // ------------------------
-               // ------------------------
-
-
-               // Assign the distances
-               //distanceAtoB = pair_A_to_B.second;
-               //distanceBtoA = pair_B_to_A.second;
-
-               //   2.2 Select the pair, child and branch in the other tree, that has the lowest distance function.
-               if(distanceAtoB < distanceBtoA)
-               {
-                       //node_bestA = pair_A_to_B.first.first;
-                       //node_bestB = pair_A_to_B.first.second;
-                       node_bestA = pair_A_to_B.second.first;
-                       node_bestB = pair_A_to_B.second.second;
-
-                       //std::cout << "Best Pair [A',B]: " << node_bestA->m_id << "," << node_bestB->m_id << std::endl;
-
-                       // 2.2.1 Check that there are no topological problems before adding the pair
-                       // Search all the nodes in the tree A linked to the found best node in B
-                       vec_nodes nodesA_linkedToBestB = map_B_to_A[node_bestB->m_id];
-
-                       // Look for topological problems
-                       bool topo_problem = false;
-                       for(vec_nodes::iterator it = nodesA_linkedToBestB.begin(); it != nodesA_linkedToBestB.end() && !topo_problem; ++it)
-                       {
-                               if( ! ( (*it)->HasNode( node_bestA ) || node_bestA->HasNode( (*it) ) ) )
-                               {
-                                       topo_problem = true;
-                                       //std::cout << "Topological problem adding node:" << node_bestA->m_id << std::endl;
-                               }
-                       }
-
-                       if(! topo_problem)
-                       {
-                               // 2.3 Add the pair and the distance to the final result.
-                               commonA.push_back(node_bestA);
-                               commonB.push_back(node_bestB);
-                               map_A_to_B[node_bestA->m_id].push_back(node_bestB);
-                               map_B_to_A[node_bestB->m_id].push_back(node_bestA);
-
-                               // Add the edge link
-                               pair_nodes pair_edgeA(this, node_bestA);
-                               pair_nodes pair_edgeB(nodeB, node_bestB);
-                               std::pair< pair_nodes, pair_nodes > pair_edge(pair_edgeA, pair_edgeB);
-                               vector_pair_edges.push_back(pair_edge);
-
-
-                               // 2.4 Mark the nodes
-                               node_bestA->Mark();
-                               node_bestB->Mark();
-
-                               // 2.5 Find and mark the omitted nodes in the similar branch. If the selected branch has more that 2 nodes it means that intermediary nodes do not have correspondence.
-                               Node* node_nextA = this->GetNextNodeInPathToNode(node_bestA);
-                               //bool markedA = node_nextA->MarkNodesUntilNode(node_bestA);
-                               //if(!markedA)
-                               //      std::cout << "NodeA not found for marking [A]:" << node_bestA->m_id << std::endl;
-
-                               Node* node_nextB = nodeB->GetNextNodeInPathToNode(node_bestB);
-                               //bool markedB = node_nextB->MarkNodesUntilNode(node_bestB);
-                               //if(!markedB)
-                               //      std::cout << "NodeB not found for marking [B]:" << node_bestB->m_id << std::endl;
-
-                               // 2.6 Run the process (First step) using the found pair of nodes.
-                               node_bestA->CompareSubTreesOrkiszMorales(node_bestB, Q, F, commonA, commonB, nonCommonA, nonCommonB, map_A_to_B, map_B_to_A, vector_pair_edges);
-                       }
-                       else
-                       {
-                               // 2.4 Mark the wrong node
-                               node_bestA->Mark();
-                               nonCommonA.push_back(node_bestA);
-                       }
-               }
-               else
-               {
-                       //node_bestA = pair_B_to_A.first.second;
-                       //node_bestB = pair_B_to_A.first.first;
-                       node_bestA = pair_B_to_A.second.second;
-                       node_bestB = pair_B_to_A.second.first;
-
-                       //std::cout << "Best Pair [A,B']: " << node_bestA->m_id << "," << node_bestB->m_id << std::endl;
-
-                       // 2.29 Check that there are no topological problems before adding the pair
-                       // 2.291 Search all the nodes in the A tree linked to the found best node in B
-                       vec_nodes nodesB_linkedToBestA = map_A_to_B[node_bestA->m_id];
-
-                       // 2.292 Look for topological problems
-                       bool topo_problem = false;
-                       for(vec_nodes::iterator it = nodesB_linkedToBestA.begin(); it != nodesB_linkedToBestA.end() && !topo_problem; ++it)
-                       {
-                               if( ! ( (*it)->HasNode(node_bestB) || node_bestB->HasNode( (*it) ) ) )
-                               {
-                                       topo_problem = true;
-                                       //std::cout << "Topological problem adding node:" << node_bestB->m_id << std::endl;
-                               }
-                       }
-
-                       if(! topo_problem)
-                       {
-                               // 2.3 Add the pair and the distance to the final result.
-                               commonA.push_back(node_bestA);
-                               commonB.push_back(node_bestB);
-                               map_A_to_B[node_bestA->m_id].push_back(node_bestB);
-                               map_B_to_A[node_bestB->m_id].push_back(node_bestA);
-
-                               // Add the edge link
-                               pair_nodes pair_edgeA(this, node_bestA);
-                               pair_nodes pair_edgeB(nodeB, node_bestB);
-                               std::pair< pair_nodes, pair_nodes > pair_edge(pair_edgeA, pair_edgeB);
-                               vector_pair_edges.push_back(pair_edge);
-
-                               // 2.4 Mark the nodes
-                               node_bestA->Mark();
-                               node_bestB->Mark();
-
-                               // 2.5 Find and mark the omitted nodes in the similar branch. If the selected branch has more that 2 nodes it means that intermediary nodes do not have correspondence.
-                               Node* node_nextA = this->GetNextNodeInPathToNode(node_bestA);
-                               //bool markedA = node_nextA->MarkNodesUntilNode(node_bestA);
-                               //if(!markedA)
-                               //      std::cout << "NodeA not found for marking [A]:" << node_bestA->m_id << std::endl;
-
-                               Node* node_nextB = nodeB->GetNextNodeInPathToNode(node_bestB);
-                               //bool markedB = node_nextB->MarkNodesUntilNode(node_bestB);
-                               //if(!markedB)
-                               //      std::cout << "NodeB not found for marking [B]:" << node_bestB->m_id << std::endl;
-
-                               // 2.6 Run the process (First step) using the found pair of nodes.
-                               //node_bestB->CompareSubTreesOrkiszMorales(node_bestA, commonB, commonA, nonCommonB, nonCommonA, map_B_to_A, map_A_to_B, vector_pair_edges);
-                               node_bestA->CompareSubTreesOrkiszMorales(node_bestB, Q, F, commonA, commonB, nonCommonA, nonCommonB, map_A_to_B, map_B_to_A, vector_pair_edges);
-                       }
-                       else
-                       {
-                               // 2.4 Mark the wrong node
-                               node_bestB->Mark();
-                               nonCommonB.push_back(node_bestB);
-                       }
-               }
-
-       }
-       //std::cout << "OUT Comparing [A,B]: " << this->m_id << "," << nodeB->m_id << std::endl;
-       //std::cout << "---------------------------------------------------------" << std::endl;
-}
-
-std::pair< std::pair<Node*, Node*>, double> Node::GetBestBranches_ActualTranslatedOneLevelBranches_To_AllPossibleBranches(Node* nodeB)
-{
-       // Variables
-       double distance = -1;
-       double distance_bestFinal = -1;
-       Node* node_A_bestFinal = NULL;
-       Node* node_B_bestFinal = NULL;
-       bool first = true;
-
-       // Get the translation vector for root ovelapping
-       Vec3 vector_trans_A_to_B = nodeB->m_coords - this->m_coords;
-
-       // Iterate over my children
-       for(vec_nodes::iterator it_A = this->m_children.begin(); it_A != this->m_children.end(); ++it_A)
-       {
-               if( !(*it_A)->IsMarked() )
-               {
-                       // Get the position of the actual child of this node
-                       Vec3 position_actual = (*it_A)->m_coords;
-
-                       // Translate the position
-                       Vec3 position_translated = position_actual + vector_trans_A_to_B;
-
-                       // Find the "closest" node in the subtree nodeB using a distance function
-                       // a. Distance to ending point
-                       //Node* bestNode_actual = nodeB->GetClosestRelativeToPoint(position_translated, distance);
-                       // b. Distance point to point
-                       Node* bestNode_actual = nodeB->GetClosestRelativeToBranch( (*it_A)->m_edge, vector_trans_A_to_B, distance);
-
-                       if(first)
-                       {
-                               first = false;
-                               node_A_bestFinal = (*it_A);
-                               node_B_bestFinal = bestNode_actual;
-                               distance_bestFinal = distance;
-                       }
-                       else if(distance < distance_bestFinal)
-                       {
-                               node_A_bestFinal = (*it_A);
-                               node_B_bestFinal = bestNode_actual;
-                               distance_bestFinal = distance;
-                       }
-               }
-       }
-
-       if(first)
-               std::cout << "GetBestTranslatedBranchFromOtherTree NOT FOUND!" << std::endl;
-
-       pair_nodes pair_best(node_A_bestFinal, node_B_bestFinal);
-       std::pair<pair_nodes,double> best_pair_score(pair_best, distance_bestFinal);
-       return best_pair_score;
-}
-
-std::multimap< double, std::pair<Node*, Node*> > Node::CalculateDistanceToAllBranches_FatherAndFamily(Node* node_gradfather, unsigned int Q, unsigned int F)
-{
-       // "this" is a grandfather node
-       // Variables
-       std::multimap< double, pair_nodes > map_dist_pairNodeNode;
-       double distance_actual = -1;
-
-       // Get the translation vector for root overlapping
-       Vec3 vector_trans_A_to_B_grandfathers = node_gradfather->m_coords - this->m_coords;
-
-       // Get all the possible "fathers" based on Q
-       vec_nodes fathers;
-       this->GetChildrenUptoDepth(Q, fathers);
-       //fathers = this->m_children;
-
-       // Iterate over my children which actually are fathers
-
-       //vec_nodes::iterator it_father = this->m_children.begin();
-       vec_nodes::iterator it_father = fathers.begin();
-       //for( ; it_father != this->m_children.end(); ++it_father)
-       for( ; it_father != fathers.end(); ++it_father)
-       {
-               if( ! (*it_father)->IsMarked() )
-               {
-
-                       Node* node_actualBest = node_gradfather->GetClosestRelativeFatherAndFamily( this, (*it_father), F, vector_trans_A_to_B_grandfathers, distance_actual);
-
-                       pair_nodes pair_actual((*it_father), node_actualBest);
-
-                       std::pair<double,pair_nodes> actual_dist_pair(distance_actual,pair_actual);
-                       map_dist_pairNodeNode.insert(actual_dist_pair);
-               }
-       }
-
-       return map_dist_pairNodeNode;
-}
-
-
-/*std::pair< std::pair<Node*, Node*>, double> Node::GetClosestBranch_FatherAndFamily(Node* node_gradfather)
-{
-       // "this" is a grandfather node
-       // Variables
-       double distance_actual = -1;
-       double distance_bestFinal = -1;
-       Node* node_A_bestFinal = NULL;
-       Node* node_B_bestFinal = NULL;
-       bool first = true;
-
-       // Get the translation vector for root overlapping
-       Vec3 vector_trans_A_to_B_grandfathers = node_gradfather->m_coords - this->m_coords;
-
-       // Iterate over my children which actually are fathers
-       vec_nodes::iterator it_father = this->m_children.begin();
-       for( ; it_father != this->m_children.end(); ++it_father)
-       {
-               if( !(*it_father)->IsMarked() )
-               {
-                       // Get the position of the actual child of this node
-                       //Vec3 position_actualFather = (*it_father)->m_coords;
-
-                       // Find the "closest" node in the subtree nodeB using a distance function
-                       // a. Distance to ending point
-                       // Translate the position
-                       //Vec3 position_translated = position_actualFather + vector_trans_A_to_B_grandfathers;
-                       //Node* bestNode_actual = nodeB->GetClosestRelativeToPoint(position_translated, distance);
-                       // b. Distance point to point
-                       Node* node_actualBest = node_gradfather->GetClosestRelativeFatherAndFamily( (*it_father), vector_trans_A_to_B_grandfathers, distance_actual);
-
-                       if(first)
-                       {
-                               first = false;
-                               node_A_bestFinal = (*it_father);
-                               node_B_bestFinal = node_actualBest;
-                               distance_bestFinal = distance_actual;
-                       }
-                       else if(distance_actual < distance_bestFinal)
-                       {
-                               node_A_bestFinal = (*it_father);
-                               node_B_bestFinal = node_actualBest;
-                               distance_bestFinal = distance_actual;
-                       }
-               }
-       }
-
-       if(first)
-               std::cout << "GetBestTranslatedBranchFromOtherTree NOT FOUND!" << std::endl;
-
-       pair_nodes pair_best(node_A_bestFinal, node_B_bestFinal);
-       std::pair<pair_nodes,double> best_pair_score(pair_best, distance_bestFinal);
-       return best_pair_score;
-}
-*/
-
-Node* Node::GetClosestRelativeToPoint(Vec3 position, double& distance)
-{
-       if(this->IsLeaf())
-       {
-               distance = -1;
-               return NULL;
-       }
-
-       distance = -1;
-       bool first = true;
-       double actualDistance = -1;
-       Node* node_Best = NULL;
-       Node* node_Actual = NULL;
-
-       for(vec_nodes::const_iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-       {
-               node_Actual = (*it)->GetClosestNodeToPoint(position, actualDistance);
-
-               if(first)
-               {
-                       first = false;
-                       node_Best = node_Actual;
-                       distance = actualDistance;
-               }
-               else if(actualDistance < distance)
-               {
-                       node_Best = node_Actual;
-                       distance = actualDistance;
-               }
-       }
-
-       if(first)
-               std::cout << "GetClosestRelativeToPoint NOT FOUND!" << std::endl;
-
-       if(!node_Best)
-               std::cout << "GetClosestRelativeToPoint NULL!" << std::endl;
-
-       return node_Best;
-}
-
-Node* Node::GetClosestRelativeToBranch(Edge* branch, Vec3 vector_translation, double& distance)
-{
-       if(this->IsLeaf())
-       {
-               distance = -1;
-               //std::cout << "GetClosestRelativeToBranch -- This node is a leaf" << std::endl;
-               return NULL;
-       }
-
-       distance = -1;
-       bool first = true;
-       double actualDistance = -1;
-       Node* node_Best = NULL;
-       Node* node_Actual = NULL;
-
-       for(vec_nodes::const_iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-       {
-               node_Actual = (*it)->GetClosestBranchToTranslatedBranch(branch,vector_translation, actualDistance, NULL);
-
-               if(first)
-               {
-                       first = false;
-                       node_Best = node_Actual;
-                       distance = actualDistance;
-               }
-               else if(actualDistance < distance)
-               {
-                       node_Best = node_Actual;
-                       distance = actualDistance;
-               }
-       }
-
-       if(first)
-               std::cout << "GetClosestRelativeToPoint NOT FOUND!" << std::endl;
-
-       if(!node_Best)
-               std::cout << "GetClosestRelativeToPoint NULL!" << std::endl;
-
-       return node_Best;
-}
-
-Node* Node::GetClosestRelativeFatherAndFamily(Node* node_grandfather, Node* node_father, unsigned int F, Vec3 vector_translation, double& distance)
-{
-       // "this" is a grandfather node
-
-       distance = -1;
-       if(this->IsLeaf())
-               return NULL;
-
-       bool first = true;
-       double actualDistance = -1;
-       Node* node_Best = NULL;
-       Node* node_Actual = NULL;
-
-       // Iterate over the children of this granfather which means
-       // iterate over the fathers
-       vec_nodes::const_iterator it_father = this->m_children.begin();
-
-       for( ; it_father != this->m_children.end(); ++it_father)
-       {
-               node_Actual = (*it_father)->GetClosestFatherAndFamilyToTranslatedFatherAndFamily(node_grandfather, node_father, F, vector_translation, actualDistance, NULL);
-
-               if(first)
-               {
-                       first = false;
-                       node_Best = node_Actual;
-                       distance = actualDistance;
-               }
-               else if(actualDistance < distance)
-               {
-                       node_Best = node_Actual;
-                       distance = actualDistance;
-               }
-       }
-
-       if(first)
-               std::cout << "GetClosestRelativeToPoint NOT FOUND!" << std::endl;
-
-       if(!node_Best)
-               std::cout << "GetClosestRelativeToPoint NULL!" << std::endl;
-
-       return node_Best;
-}
-
-Node* Node::GetClosestBranchToTranslatedBranch(Edge* branch, Vec3 vector_translation, double& distance, Edge* edgeSuperior)
-{
-       Node* node_best = this;
-       Node* node_Actual = NULL;
-       Edge* edge_composed = NULL;
-
-       // Joint the superior edge with this edge
-       edge_composed = this->ConcatenateEdgeToSuperiorEdge(edgeSuperior);
-
-       distance = edge_composed->GetDistanceToTranslatedEdge(branch, vector_translation);
-       distance += branch->GetDistanceToTranslatedEdge(edge_composed, -vector_translation);
-       //distance = edge_composed->GetDistanceWeigthedToTranslatedEdge(branch, vector_translation);
-       //distance += branch->GetDistanceWeigthedToTranslatedEdge(edge_composed, -vector_translation);
-       //std::cout << "DW[thisId,toBranchTargetId,Dist]:[" << this->m_id << "," << branch->GetTarget()->GetId() << "," << distance << "]";
-
-       // Lance the recursion and the the minumum distance and node
-       double distance_actual = -1;
-
-       // Check the children and get the best
-       for(vec_nodes::iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-       {
-               Edge* edge_forChild = new Edge(edge_composed);
-               node_Actual = (*it)->GetClosestBranchToTranslatedBranch(branch, vector_translation, distance_actual, edge_forChild);
-
-               if(distance_actual < distance)
-               {
-                       node_best = node_Actual;
-                       distance = distance_actual;
-               }
-               delete(edge_forChild);
-       }
-
-       return node_best;
-}
-
-Node* Node::GetClosestFatherAndFamilyToTranslatedFatherAndFamily(Node* node_grandfather, Node* node_father, unsigned int F, Vec3 vector_translation, double& distance, Edge* edgeSuperior)
-{
-       // "this" is a father node_father
-       Node* node_best = this;         // Best matching node is "this" in the beginnig.
-       Node* node_Actual = NULL;
-       Edge* edge_composed = NULL;
-
-       // Joint the superior edge with this edge
-       edge_composed = this->ConcatenateEdgeToSuperiorEdge(edgeSuperior);
-
-       //distance = edge_composed->GetDistanceToTranslatedEdge(branch, vector_translation);
-       //distance += branch->GetDistanceToTranslatedEdge(edge_composed, -vector_translation);
-
-       //Edge* branch_father = node_father->m_edge;
-       Edge* branch_father = node_father->GetEdgeToAncestor(node_grandfather, NULL);
-       if( branch_father == NULL )
-               std::cout << "No branch father" << std::endl;
-
-
-       distance = edge_composed->GetDistanceWeigthedToTranslatedEdge(branch_father, vector_translation);
-       distance += branch_father->GetDistanceWeigthedToTranslatedEdge(edge_composed, -vector_translation);
-
-       // Find the family distance from the node_father family to this family
-       double distance_family_A_to_B = 0;
-       // Add the distances to the family, up to one generation by the moment
-       Vec3 vector_translation_child_A_to_B = this->m_coords - node_father->m_coords; // Vector that align the fathers
-
-       // Get the family up to depth F
-       vec_nodes family;
-       node_father->GetChildrenUptoDepth(F, family);
-       //vec_nodes family = node_father->m_children;
-
-       vec_nodes::iterator it_child_other = family.begin();
-       for(; it_child_other != family.end(); ++it_child_other)
-       {
-               // Create the "child" edge
-               Edge* childEdge = (*it_child_other)->GetEdgeToAncestor(node_father, NULL);
-               //Edge* childEdge = (*it_child_other)->m_edge;
-
-               double distance_child = 0;
-               if(this->IsLeaf())
-               {
-                       // The distance of the each point edge to the root point because the fathers are aligned
-                       distance_child = childEdge->GetDistanceToPoint(this->m_coords);
-               }
-               else
-               {
-                       this->GetClosestRelativeToBranch(childEdge,vector_translation_child_A_to_B, distance_child);
-               }
-               distance_family_A_to_B += distance_child;
-       }
-
-       distance += distance_family_A_to_B;
-
-       // Find the family distance from this family to node_father family
-       double distance_family_B_to_A = 0;
-
-       // Add the distances to the family, up to one generation by the moment
-       Vec3 vector_translation_child_B_to_A = node_father->m_coords - this->m_coords; // Vector that align the fathers
-
-       // Get the family up to depth F
-       vec_nodes my_family;
-       this->GetChildrenUptoDepth(F, my_family);
-       //vec_nodes my_family = this->m_children;
-
-       vec_nodes::iterator it_child_my = my_family.begin();
-       for(; it_child_my != my_family.end(); ++it_child_my)
-       {
-               // Create the "child" edge
-               Edge* my_childEdge = (*it_child_my)->GetEdgeToAncestor(this, NULL);
-               //Edge* my_childEdge = (*it_child_my)->m_edge;
-
-               double distance_child = 0;
-               if(node_father->IsLeaf())
-               {
-                       // The distance of the each point edge to the root point because the fathers are aligned
-                       distance_child = my_childEdge->GetDistanceToPoint(node_father->m_coords);
-               }
-               else
-               {
-                       node_father->GetClosestRelativeToBranch(my_childEdge, vector_translation_child_B_to_A, distance_child);
-               }
-               distance_family_B_to_A += distance_child;
-       }
-
-       distance += distance_family_B_to_A;
-
-       //std::cout << "DW[thisId,toBranchTargetId,Dist]:[" << this->m_id << "," << branch->GetTarget()->GetId() << "," << distance << "]";
-
-       // Lance the recursion and the minimum distance and node_father
-       double distance_actual = -1;
-
-       // Check the children and get the best
-       vec_nodes::iterator it = this->m_children.begin();
-       for( ; it != this->m_children.end(); ++it)
-       {
-               Edge* edge_forChild = new Edge(edge_composed);
-               node_Actual = (*it)->GetClosestFatherAndFamilyToTranslatedFatherAndFamily(node_grandfather, node_father, F, vector_translation, distance_actual, edge_forChild);
-
-               if(distance_actual < distance)
-               {
-                       node_best = node_Actual;
-                       distance = distance_actual;
-               }
-               delete(edge_forChild);
-       }
-
-       return node_best;
-}
-
-const Node* Node::GetClosestCommonAscendingNode() const
-{
-       Node* node_closestCommonAscendingNode = NULL;
-
-       if(this->m_edge)
-       {
-               if(this->m_edge->GetSource()->IsMarked() || this->m_edge->GetSource()->HasMarkedChildren())
-                       node_closestCommonAscendingNode =  this->m_edge->GetSource();
-               else
-                       return this->m_edge->GetSource()->GetClosestCommonAscendingNode();
-       }
-
-       return node_closestCommonAscendingNode;
-}
-
-bool Node::MarkNodesUntilNode(Node* nodeB)
-{
-       this->Mark();
-
-       if(this->m_id == nodeB->m_id)
-               return true;
-
-       bool found = false;
-       bool actualFound = false;
-       for(vec_nodes::const_iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-       {
-               actualFound = (*it)->MarkNodesUntilNode(nodeB);
-
-               if(actualFound)
-                       found = true;
-       }
-
-       return found;
-}
-
-Node* Node::GetNextNodeInPathToNode(Node* node_searched)
-{
-       Node* nextNode = NULL;
-       for(vec_nodes::const_iterator it = this->m_children.begin(); it != this->m_children.end() && !nextNode; ++it)
-       {
-               if( (*it)->HasNode(node_searched) )
-                       nextNode = (*it);
-       }
-
-       return nextNode;
-}
-
-void Node::GetPathToNode(Node* node_end, vec_nodes& vector_pathNodes)
-{
-       if(!this->HasNode(node_end))
-               return;
-
-       vector_pathNodes.push_back(this);
-       for(vec_nodes::const_iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-               (*it)->GetPathToNode(node_end, vector_pathNodes);
-}
-
-void Node::MarkPathFromNodeToNode(Node* node_begin, Node* node_end)
-{
-       if(this->m_id == node_begin->m_id)
-       {
-               if(this->HasNode(node_end))
-                       this->MarkPathNodesToNode(node_end);
-       }
-       else
-               for(vec_nodes::const_iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-                       (*it)->MarkPathFromNodeToNode(node_begin, node_end);
-}
-
-void Node::MarkPathNodesToNode(Node* node_end)
-{
-       if(this->HasNode(node_end))
-               this->Mark();
-
-       for(vec_nodes::const_iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-               (*it)->MarkPathNodesToNode(node_end);
-}
-
-Node* Node::GetDetachedRootCopy()
-{
-       Node* node_copy = new Node(this);
-
-       // Change properties for root node
-       Node* root_detached = new Node();
-       root_detached->m_coords = node_copy->m_edge->GetSource()->GetCoords();
-       root_detached->m_edge = NULL;
-       vec_nodes vector_new;
-       vector_new.push_back(node_copy);
-       root_detached->m_children = vector_new;
-
-       // Change properties for the copy node
-       node_copy->m_edge->SetSource(root_detached);
-
-       return root_detached;
-}
-
-bool Node::CompareNodes(Node* nodeTreeB)
-{
-       if (this == NULL && nodeTreeB == NULL)
-               return true;
-       else if (this == NULL || nodeTreeB == NULL)
-               return false;
-       vec_nodes::iterator it = this->m_children.begin();
-       for (; it != this->m_children.end(); ++it)
-       {
-               if ((*it)->m_mark)
-                       continue;
-               bool suc = false;
-               vec_nodes::iterator it2 = nodeTreeB->m_children.begin();
-               for (; it2 != nodeTreeB->m_children.end(); ++it2)
-                       suc = (*it)->CompareNodes(*it2);
-               if (!suc)
-                       return false;
-       } //for
-       if (*this != *nodeTreeB)
-               return false;
-       this->m_mark = true;
-       nodeTreeB->m_mark = true;
-       return true;
-}
-
-Edge* Node::GetComposedEdge(unsigned int idNode)
-{
-       // If this is the node, then a copy edge (to the parent) is returned
-       if(this->m_id == idNode)
-       {
-               //std::cout << "This is the searched idNode: " << this->m_id << std::endl;
-               Edge* nEdge = new Edge(this->m_edge);
-               return nEdge;
-       }
-
-
-       Edge* composedEdge = NULL;
-
-       for(std::vector<Node*>::iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-       {
-               // If one of my children has the composed node, then my edge must be added
-               // and the composed edge is returned
-               Edge* childEdge = (*it)->GetComposedEdge(idNode);
-               if(childEdge)
-               {
-                       //std::cout << "My id: " << this->m_id << ", Looking for: " << idNode << std::endl;
-                       return AddChildEdgeInformation(childEdge);
-               }
-       }
-
-       return composedEdge;
-}
-
-Edge* Node::AddChildEdgeInformation(Edge* nEdge)
-{
-       // If this is the root then the edge to be compose is null, so the same edge must be returned
-       if(this->m_edge == NULL)
-       {
-               //std::cout << "This is the root node" << std::endl;
-               return nEdge;
-       }
-
-       // New information vector
-       vec_pair_posVox_rad vector_newInformation;
-       vec_pair_posVox_rad actualEdgeInformation = this->m_edge->GetEdgeInfo();
-       vec_pair_posVox_rad composedInformation = nEdge->GetEdgeInfo();
-
-       // Check that last and initial information, from this and the other edge respectively, are equal.
-       if(actualEdgeInformation[actualEdgeInformation.size()-1].first != composedInformation[0].first)
-       {
-
-               std::cout << "actualEdgeInformation[0;end]: [" << actualEdgeInformation[0].first << ";" << actualEdgeInformation[actualEdgeInformation.size()-1].first << "], Points: " << actualEdgeInformation.size() << std::endl;
-               std::cout << "ActualEdge[source;target]: [" << this->m_edge->GetSource()->GetCoords() << "];[" << this->m_edge->GetTarget()->GetCoords() << "]" << std::endl;
-               std::cout << "-- -- -- " << std::endl;
-               std::cout << "composedInformation[0;end]: [" << composedInformation[0].first << ";" << composedInformation[composedInformation.size()-1].first << "], Points: " << composedInformation.size() << std::endl;
-               std::cout << "AddChildEdge[source;target]: [" << nEdge->GetSource()->GetCoords() << "];[" << nEdge->GetTarget()->GetCoords() << "]" << std::endl;
-               std::cout << "End and initial information are not equal! : " << actualEdgeInformation[actualEdgeInformation.size()-1].first << " , " << composedInformation[0].first << std::endl;
-
-
-               std::cout << "Print composed edge information" << std::endl;
-               std::cout << "Composed [source, target] " << nEdge->GetSource()->GetCoords() << "];[" << nEdge->GetTarget()->GetCoords() << "]" << std::endl;
-               std::cout << "Composed information using iterator:" << std::endl;
-
-               for(vec_pair_posVox_rad::const_iterator it_composed = nEdge->GetEdgeInfo().begin(); it_composed != nEdge->GetEdgeInfo().end(); ++it_composed)
-                       std::cout << "[" << (*it_composed).first << "], ";
-       }
-
-       // Change the source
-       nEdge->SetSource(this->m_edge->GetSource());
-
-       // Change properties
-       nEdge->SetLength(nEdge->GetLength()+this->m_edge->GetLength());
-       nEdge->SetEDistance(nEdge->GetEDistance()+this->m_edge->GetEDistance());
-
-       // Create the new information vector and calculate the new radii attributes
-       for(vec_pair_posVox_rad::iterator it_actual = actualEdgeInformation.begin(); it_actual != actualEdgeInformation.end(); ++it_actual)
-               vector_newInformation.push_back((*it_actual));
-
-       bool connectionVoxel = true;
-       for(vec_pair_posVox_rad::iterator it_composed = composedInformation.begin(); it_composed != composedInformation.end(); ++it_composed)
-       {
-               if(connectionVoxel)
-                       connectionVoxel = false;
-               else
-                       vector_newInformation.push_back((*it_composed));
-       }
-
-       // Set the new information
-       nEdge->SetSkeletonPairVector(vector_newInformation);
-
-       return nEdge;
-}
-
-Edge* Node::GetEdgeToAncestor(Node* node_ancestor, Edge* edge)
-{
-       Edge* edge_composed = NULL;
-
-       // Compose the edge
-       if(edge == NULL)
-               edge_composed = new Edge(this->m_edge);
-       else
-               edge_composed = edge->ConcatenateToSuperior(new Edge(this->m_edge));
-
-       // Check if the father is the ancestor
-       if(this->m_edge->GetSource()->GetId() == node_ancestor->GetId())
-               return edge_composed;
-
-       return this->m_edge->GetSource()->GetEdgeToAncestor(node_ancestor, edge_composed);
-}
-
-Edge* Node::ConcatenateEdgeToSuperiorEdge(Edge* superiorEdge)
-{
-       if(superiorEdge == NULL)
-               return new Edge(this->m_edge);
-
-       // Check concatenation condition in the nodes
-       if(superiorEdge->GetTarget()->GetCoords() != this->m_edge->GetSource()->GetCoords())
-       {
-               std::cout << "Node::ConcatenateEdgeToSuperiorEdge - superiorEdge.target != actualEdge.source. Actual idNode:" << this->m_id << std::endl;
-               std::cout << "[superiorEdge.target;actualEdge.source]: [" << superiorEdge->GetTarget()->GetCoords() << ";" << this->m_edge->GetSource()->GetCoords() << "]" << std::endl;
-               return NULL;
-       }
-
-       // Check concatenation condition in the edge information
-       vec_pair_posVox_rad vectorInfo_thisEdge = this->m_edge->GetEdgeInfo(); // Actual edge information
-       vec_pair_posVox_rad vectorInfo_superiorEdge = superiorEdge->GetEdgeInfo(); // Superior edge information
-
-       // Check that last superior edge position is equal to first initial actual edge position
-       if(vectorInfo_superiorEdge[vectorInfo_superiorEdge.size()-1].first != vectorInfo_thisEdge[0].first)
-       {
-               std::cout << "Node::ConcatenateEdgeToSuperiorEdge - superiorEdge.info[end] != actualEdge.info[begin]. Actual idNode:" << this->m_id << std::endl;
-               return NULL;
-       }
-
-       // Change the superior edge target, the superior length, and the euclidian distance
-       superiorEdge->SetTarget(this->m_edge->GetTarget());
-       superiorEdge->SetLength(superiorEdge->GetLength()+this->m_edge->GetLength()-1);
-       superiorEdge->SetEDistance(superiorEdge->GetEDistance()+this->m_edge->GetEDistance());
-
-       // Add the position information
-       vec_pair_posVox_rad::iterator it_actualInfo = vectorInfo_thisEdge.begin();
-       ++it_actualInfo; // Skip the first position because is it shared between both edges
-       for(; it_actualInfo != vectorInfo_thisEdge.end(); ++it_actualInfo)
-               vectorInfo_superiorEdge.push_back((*it_actualInfo));
-
-       // Set the new information
-       superiorEdge->SetSkeletonPairVector(vectorInfo_superiorEdge);
-
-       return superiorEdge;
-}
-
-bool Node::FindSimilarEdgeByAccumulation(Node* nodeB, Node* nodeBAcc)
-{
-       bool firstTime = false;
-       if (nodeBAcc == NULL)
-       {
-               nodeBAcc = new Node();
-               nodeBAcc->m_edge = new Edge();
-               firstTime = true;
-       } //if
-       nodeBAcc->m_coords = nodeB->m_coords;
-       nodeBAcc->m_level = this->m_level;
-       Edge* edgeBAcc = nodeBAcc->m_edge;
-       Edge* edgeB = nodeB->m_edge;
-       edgeBAcc->m_angle = edgeB->m_angle;
-       edgeBAcc->m_eDistance = edgeB->m_eDistance;
-       if (!firstTime)
-       {
-               edgeBAcc->m_length += edgeB->m_length;
-               //edgeBAcc->m_aRadius = (edgeB->m_aRadius + edgeBAcc->m_aRadius) / 2.0;
-               edgeBAcc->m_maxRadius = edgeB->m_maxRadius > edgeBAcc->m_maxRadius ? edgeB->m_maxRadius : edgeBAcc->m_maxRadius;
-               edgeBAcc->m_minRadius = edgeB->m_minRadius < edgeBAcc->m_minRadius ? edgeB->m_minRadius : edgeBAcc->m_minRadius;
-       } //fi
-       else
-       {
-               edgeBAcc->m_length = edgeB->m_length;
-               edgeBAcc->m_aRadius = edgeB->m_aRadius;
-               edgeBAcc->m_maxRadius = edgeB->m_maxRadius;
-               edgeBAcc->m_minRadius = edgeB->m_minRadius;
-       } //else
-
-       if (*this == *nodeBAcc)
-               return true;
-       Node* aux = NULL;
-       bool suc = false;
-       vec_nodes::iterator it = nodeB->m_children.begin();
-       for (; it != nodeB->m_children.end(); ++it)
-       {
-               aux = *it;
-               if (this->FindSimilarEdgeByAccumulation(aux, nodeBAcc))
-               {
-                       suc = true;
-                       break;
-               } //if
-       } //for
-       if (suc)
-       {
-               nodeB = aux;
-               return true;
-       }//if
-       return false;
-}
-
-bool Node::FindMarked(Node* result)
-{
-       vec_nodes::iterator it = this->m_children.begin();
-       for (; it != this->m_children.end(); ++it)
-               if ((*it)->m_mark)
-               {
-                       result = *it;
-                       return true;
-               } //if
-               else if ((*it)->FindMarked(result))
-                       return true;
-       result = NULL;
-       return false;
-}
-
-bool Node::MarkPath(Node* nodeB)
-{
-       if (this == NULL || nodeB == NULL)
-               return false;
-       //comparing addresses
-       if (this == nodeB)
-       {
-               nodeB->m_mark = true;
-               return true;
-       } //if
-       vec_nodes::iterator it = this->m_children.begin();
-       for (; it != this->m_children.end(); ++it)
-               if ((*it)->MarkPath(nodeB))
-               {
-                       (*it)->m_mark = true;
-                       return true;
-               } //if
-       return false;
-
-}
-
-unsigned int Node::GetCost(Node* nodeB)
-{
-       if (this == NULL || nodeB == NULL)
-               return 0;
-       unsigned int maxCost = 0;
-       if (*this == *nodeB)
-       {
-               vec_nodes::iterator it = this->m_children.begin();
-               for (; it != this->m_children.end(); ++it)
-               {
-                       vec_nodes::iterator it2 = nodeB->m_children.begin();
-                       for (; it2 != nodeB->m_children.end(); ++it2)
-                       {
-                               unsigned int currentCost = (*it)->GetCost(*it2);
-                               if (currentCost > maxCost)
-                                       maxCost = currentCost;
-                       } //for
-               } //for
-               maxCost += 1;
-       } //if
-       return maxCost;
-}
-
-
-//Setters and Modifiers
-
-void Node::SetId(unsigned int nM_id)
-{
-       m_id = nM_id;
-}
-
-
-void Node::AddChild(Node* node)
-{
-       this->m_children.push_back(node);
-}
-
-void Node::SetChildren(std::vector<Node*>& children)
-{
-       this->m_children = children;
-}
-
-void Node::SetFather(Node* nFather)
-{
-       father = nFather;
-}
-
-void Node::SetEdge(Edge* edge)
-{
-       this->m_edge = edge;
-}
-
-void Node::SetCoords(const Vec3& coords)
-{
-       this->m_coords = coords;
-}
-
-void Node::SetLevel(const int& level)
-{
-       this->m_level = level;
-}
-
-bool Node::DeleteNodeById(unsigned int nId)
-{
-       if(this->IsLeaf())
-               return false;
-
-       bool deleted = false;
-
-       vec_nodes::iterator it = this->m_children.begin();
-       while(it != this->m_children.end() && !deleted)
-       {
-               if((*it)->m_id == nId)
-               {
-                       it = m_children.erase(it);
-                       deleted = true;
-               }
-               else
-                       ++it;
-       }
-
-       if(!deleted)
-       {
-               for(vec_nodes::const_iterator it = this->m_children.begin(); it != this->m_children.end() && !deleted; ++it)
-               {
-                       deleted = (*it)->DeleteNodeById(nId);
-               }
-       }
-
-       return deleted;
-}
-
-void Node::MergeNodes(Node* nodeB)
-{
-       if (nodeB == NULL)
-               return;
-       this->m_coords = nodeB->m_coords;
-       Edge* edgeA = this->m_edge;
-       Edge* edgeB = nodeB->m_edge;
-       edgeA->m_angle = edgeB->m_angle;
-       edgeA->m_eDistance = edgeB->m_eDistance;
-       edgeA->m_length += edgeB->m_length;
-       edgeA->m_aRadius = (edgeB->m_aRadius + edgeA->m_aRadius) / 2.0;
-       edgeA->m_maxRadius = edgeB->m_maxRadius > edgeA->m_maxRadius ? edgeB->m_maxRadius : edgeA->m_maxRadius;
-       edgeA->m_minRadius = edgeB->m_minRadius < edgeA->m_minRadius ? edgeB->m_minRadius : edgeA->m_minRadius;
-       edgeA->m_vec_pair_posVox_rad.insert(edgeA->m_vec_pair_posVox_rad.end(), edgeB->m_vec_pair_posVox_rad.begin(), edgeB->m_vec_pair_posVox_rad.end());
-}
-
-void Node::Mark()
-{
-       this->m_mark = true;
-}
-
-void Node::UnMark()
-{
-       this->m_mark = false;
-}
-
-void Node::UpdateLevels(unsigned int level)
-{
-       this->m_level = level;
-       level++;
-       vec_nodes::iterator it = this->m_children.begin();
-       for (; it != this->m_children.end(); ++it)
-               (*it)->UpdateLevels(level);
-}
-
-void Node::printUpToLevel(int level)
-{
-       // Print myself
-       cout << "level" << level << " " << m_coords << " || " << endl;
-       if(level == 1)
-               return;
-
-       // Print my children
-       for (vec_nodes::iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-       {
-               (*it)->printUpToLevel(level-1);
-       }
-}
-
-void Node::printNodeAndChildrenIds( )
-{
-       std::cout << "------------------------------------------" << std::endl;
-       std::cout << "Id: " << this->m_id << std::endl;
-
-       // Print children
-       for(vec_nodes::const_iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-               std::cout << (*it)->m_id << ";";
-
-       // Recursion
-       for(vec_nodes::const_iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-               (*it)->printNodeAndChildrenIds( );
-}
-
-void Node::printChildrenIds( )
-{
-       std::cout << "------------------------------------------" << std::endl;
-       std::cout << "Id: " << this->m_id << std::endl;
-
-       // Print children
-       for(vec_nodes::const_iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-               std::cout << (*it)->m_id << ";";
-}
-
-void Node::createQuaternionsUpToLevel(int level, int requiredLevel)
-{
-       //cout << "Level:" << requiredLevel-level <<endl;
-
-       if(level >= 2 && this->HasMinimumLevels(2))
-       {
-               // 1. Take the vector to each son (SP - The vector that points from the son to the parent [P-S]).
-               // 2. For each son take each vector from son to grandson (SG - the vector that points from the son to the grandson [G-S])
-               // 3. For each combination SP-SG calculate the quaternion
-               for(vec_nodes::iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-               {
-                       // Create vector from son to parent (SP = [P - S])
-                       Vec3 sp(this->m_coords - (*it)->m_coords);
-
-                       // Get the mean radius for the parent-son branch
-                       double radMeanSP=(*it)->m_edge->GetARadius();
-
-                       // Get distance son to parent
-                       double distSonParent = (*it)->m_edge->GetEDistance();
-
-                       // Get the vectors from son to each grandson (SG = [G - S] )
-                       for(vec_nodes::iterator itps = (*it)->m_children.begin(); itps != (*it)->m_children.end(); ++itps)
-                       {
-                               // Build the sg vector and get the quaternion
-                               Vec3 sg((*itps)->m_coords - (*it)->m_coords);
-                               Quaternion q(sp, sg);
-
-                               // Get distance son to grandson
-                               double distSonGrandson = (*itps)->m_edge->GetEDistance();
-
-                               // Get the mean radius for the son-grandson branch
-                               double radMeanSG=(*itps)->m_edge->GetARadius();
-
-                               //cout << "Vectors:" << ps << sg <<endl;
-                               //cout << "Q:" << q << ", Distance=" << (*itps)->m_edge->GetEDistance() << endl << endl;
-                               // Printing
-                               // Level | PositionSon | SPvector | SGvector | Quaternion | distanceSonParent | distanceSonGrandSon | meanRadiusSP | meanRadiusSG
-                               cout << requiredLevel-level << " " << (*it)->m_coords << " " << sp << " " << sg << " " << q << " " << distSonParent << " " << distSonGrandson << " " << radMeanSP << " " << radMeanSG << endl;
-                       }
-               }
-
-               for(vec_nodes::iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-               {
-                       (*it)->createQuaternionsUpToLevel(level-1, requiredLevel);
-               }
-       }
-}
-
-std::pair<double, std::pair<Node*, Node*> > Node::GetPairWithClosestDistance_FirstNodeNonMarked(std::multimap<double, pair_nodes> map_dist_pairNodes)
-{
-       // Variables
-       bool pairFound = false;
-       std::pair<Node*, Node*> pairNodes_null (NULL, NULL);
-       std::pair<double, std::pair<Node*, Node*> > pair_closest_dist_pairNodes (-1, pairNodes_null);
-
-       std::multimap<double, pair_nodes>::iterator it = map_dist_pairNodes.begin();
-
-       for( ; it != map_dist_pairNodes.end() && !pairFound; ++it)
-       {
-               if( ! (*it).second.first->IsMarked() )
-               {
-                       pair_closest_dist_pairNodes.first=(*it).first;
-                       pair_closest_dist_pairNodes.second=(*it).second;
-                       pairFound = true;
-               }
-       }
-
-       return pair_closest_dist_pairNodes;
-}
-
-void Node::getStasticsBifurcations(int* p)
-{
-       int numBif = this->m_children.size();
-       if(numBif>0 && numBif<=6)
-               p[numBif-1]=p[numBif-1]+1;
-
-       for(vec_nodes::iterator it = this->m_children.begin(); it != this->m_children.end(); ++it)
-       {
-               (*it)->getStasticsBifurcations(p);
-       }
-}
-
-//Operator Overloads
-
-Node &Node::operator=(Node & node)
-{
-       this->m_children = node.m_children;
-       this->m_edge = node.m_edge;
-       this->m_coords = node.m_coords;
-       this->m_level = node.m_level;
-       this->m_mark = node.m_mark;
-       return *this;
-}
-
-const Node&Node::operator=(const Node& node)
-{
-       this->m_children = node.m_children;
-       this->m_edge = node.m_edge;
-       this->m_coords = node.m_coords;
-       this->m_level = node.m_level;
-       this->m_mark = node.m_mark;
-       return *this;
-}
-
-bool Node::operator ==(const Node& node)
-{
-       bool comp = false;
-       if (this->m_edge == NULL && this->m_edge != NULL)
-               return false;
-       else if (this->m_edge != NULL && this->m_edge == NULL)
-               return false;
-       else if (this->m_edge == NULL && this->m_edge == NULL)
-               comp = true;
-       else
-               comp = ((*this->m_edge) == (*node.m_edge));
-       bool ret = (/*(this->m_coords == node.m_coords)
-     && (this->m_children.size() == node.m_children.size())
-     && */(this->m_level == node.m_level) && comp);
-       return ret;
-}
-
-bool Node::operator !=(const Node& node)
-{
-       bool comp = false;
-       if (this->m_edge == NULL && this->m_edge != NULL)
-               return false;
-       else if (this->m_edge != NULL && this->m_edge == NULL)
-               return false;
-       else if (this->m_edge == NULL && this->m_edge == NULL)
-               comp = true;
-       else
-               comp = ((*this->m_edge) == (*node.m_edge));
-       return (/*(this->m_coords != node.m_coords)
-     && (this->m_children.size() != node.m_children.size())
-     && */(this->m_level != node.m_level) && !comp);
-}
-
-bool Node::operator <(const Node& node)
-{
-       bool comp = false;
-       if (this->m_edge == NULL && this->m_edge != NULL)
-               return false;
-       else if (this->m_edge != NULL && this->m_edge == NULL)
-               return false;
-       else if (this->m_edge == NULL && this->m_edge == NULL)
-               comp = false;
-       else
-               comp = ((*this->m_edge) < (*node.m_edge));
-       return comp;
-}
-
-bool Node::operator >(const Node& node)
-{
-       bool comp = false;
-       if (this->m_edge == NULL && this->m_edge != NULL)
-               return false;
-       else if (this->m_edge != NULL && this->m_edge == NULL)
-               return false;
-       else if (this->m_edge == NULL && this->m_edge == NULL)
-               comp = false;
-       else
-               comp = ((*this->m_edge) > (*node.m_edge));
-       return comp;
-}
-
-} /* namespace airways */
diff --git a/lib/Airways/AirwaysLib/airwaysNode.h b/lib/Airways/AirwaysLib/airwaysNode.h
deleted file mode 100644 (file)
index cdffe31..0000000
+++ /dev/null
@@ -1,597 +0,0 @@
-/*
- * airwaysNode.h
- *
- *  Created on: May 12, 2014
- *  Author: caceres
- *  
- *  Modified by: Alfredo Morales Pinzón
- */
-
-#ifndef AIRWAYSNODE_H_
-#define AIRWAYSNODE_H_
-
-#include <vector>
-#include <map>
-
-#include "../MathLib/vec3.h"
-#include "airwaysEdge.h"
-#include "Quaternion.h"
-#include <Airways/AirwaysLib/TempAirwaysAppli_AirwaysLib_Export.h>
-
-// Namespaces
-using namespace std;
-
-namespace airways
-{
-
-class AirwaysTree;
-class Edge;
-
-/*
- * This class represents a node in a tree.
- */
-class TempAirwaysAppli_AirwaysLib_EXPORT Node
-{
-
-public:
-
-       // Pair of nodes
-       typedef std::pair<Node*, Node*> pair_nodes;
-
-       // Vector of nodes
-       typedef std::vector<Node*> vec_nodes;
-
-       // Map to link an id node to a list of nodes
-       typedef std::map< unsigned int, vec_nodes > map_id_vecnodes;
-
-       /*!
-        * This is the default constructor
-        */
-       Node();
-
-       /*!
-        * This is the alternative constructor
-        * @param coord
-        */
-       Node(const Vec3& coord);
-
-       /*!
-        * This is the alternative constructor (copy)
-        * @param node
-        */
-       Node(Node* node);
-
-       /*!
-        * This is the destructor
-        */
-       virtual ~Node();
-
-       //Getters
-
-       /*!
-        * This method returns the vector of the node children (const)
-        * @return
-        */
-       const std::vector<Node*>& GetChildren() const;
-
-       /**
-        * Method that returns the node id
-        * @return the id of the node
-        */
-       const unsigned int GetId() const;
-
-       /*!
-        * This method returns the spatial position of a node
-        * @return
-        */
-       const Vec3&     GetCoords() const;
-
-       /*
-        * Method that returns the edge between the current node and its parent
-        * @return the edge
-        */
-       Edge* GetEdge() const;
-
-       /*
-        * Method that returns the father
-        * @return the father
-        */
-       Node* GetFather() const;
-
-       /*
-        * This method returns the level of the node
-        * @return the level of the node
-        */
-       unsigned int GetLevel() const;
-
-       /**
-        * Method that returns the depth of the node whose id is given by parameter
-        * @pre the node exist in the sub-tree
-        * @param idNode is the search node id
-        * @return the depth of the node up to the actual node
-        */
-       int GetDepthById(unsigned int idNode) const;
-
-       /**
-        * Method that returns the weight of the tree
-        * @return the weight of the tree which is the number of nodes in the tree.
-        */
-       unsigned int GetWeight() const;
-
-       /**
-        * Method that returns the height of the tree
-        * @return the height of the tree
-        */
-       unsigned int GetHeight() const;
-
-       /*!
-        * This method returns the size of the children vector
-        * @return the number of children
-        */
-       unsigned int GetNumberOfChildren() const;
-
-       /**
-        * Method that returns the number of children non-marked
-        * @param depth is the depth up to which the non-marked child are taken into account
-        * @return the number of children non-marked
-        */
-       unsigned int GetNumberOfNonMarkedChildren( unsigned int depth ) const;
-
-       /**
-        * Method that returns the number of leafs in the node and its children
-        * @return the number of leafs in the in the node and its children
-        */
-       unsigned int GetNumberOfLeafs( ) const;
-
-       /**
-        * This method returns the node that has the requested id
-        * @param nId is the requested id
-        * @return is the node that has the requested id, NULL if the node is not found.
-        */
-       Node* GetNodeById(unsigned int nId);
-
-       /**
-        * Method that returns the closest node to the givel voxel
-        * The closes node is the one whose path (skeleton) to the father has the closest point to the given point.
-        * @param voxel_x x componente of the voxel
-        * @param voxel_y y componente of the voxel
-        * @param voxel_z z componente of the voxel
-        * @param distance return the distance to the closest node
-        * @return the closest node to the given voxel
-        */
-       Node* GetClosestBranchNodeToPoint(float point_x, float point_y, float point_z, float &distance);
-
-       /**
-        * Method that returns the closest node to the position given by parameter
-        * @param position is the position to be compares with
-        * @param distance is the minimum distance found
-        * return the closest node to the position given by parameter
-        */
-       Node* GetClosestNodeToPoint(Vec3 position, double& distance);
-
-       /**
-        * Method that return the closest distance of the node skeleton
-        * @param voxel_x x componente of the voxel
-        * @param voxel_y y componente of the voxel
-        * @param voxel_z z componente of the voxel
-        * @return the closest distance of the node skeleton
-        */
-       float GetBranchDistanceToPoint(int voxel_x, int voxel_y, int voxel_z);
-
-       /**
-        * Method that returns if the tree has a minimum of levels
-        * @return true if the tree has the minimum of levels, false otherwise
-        */
-       bool HasMinimumLevels(int levels);
-
-
-       /*!
-        * This method returns true if the node is a leaf
-        * @return
-        */
-       bool IsLeaf() const;
-
-       /*!
-        * This method returns true if the node is marked
-        * @return
-        */
-       bool IsMarked() const;
-
-       /**
-        * Method that tells if a node has marked children
-        * @return true if the node has marked children, false otherwise
-        */
-       bool HasMarkedChildren() const;
-
-       /**
-        * Method that returns if a node is in the descending set of nodes
-        * @return true is the given node is in the descending set of nodes, false otherwise
-        */
-       bool HasNode(Node* node_searched) const;
-
-       /**
-        * Method that return if a node is in the tree
-        * @param id_node_searched id of the searched node
-        * @return true is the node is in the tree, false otherwise
-        */
-       bool HasNodeId(unsigned int id_node_searched) const;
-
-       /**
-        * Method that returns if a voxel is influenced by a node, i.e. if the distance
-        * to the closest voxel of the edge is smaller than the radius on the closest voxel.
-        * @param x,y,z are the voxel positions in coordinates x, y, and z respectively.
-        * @return true is the voxel is influenced, false otherwise.
-        */
-       bool IsPointInfluencedByNode(float point_x, float point_y, float point_z) const;
-
-       /**
-        * Method that returns the list of nodes that influence the given point
-        * @param point_x, point_y, point_z are the position of the point in real coordinates x, y, and z respectively.
-        * @param vec_nodes_influence vector to save the nodes
-        */
-       void GetBrancheNodesInfluencingPoint(float point_x, float point_y, float point_z, vec_nodes& vec_nodes_influence);
-
-       /**
-        * Method that adds to a vector all the children with a maximum depth Q from actual node.
-        * If Q = 0, no nodes are added.
-        * @param Q the depth to find the children
-        * @param fathers vector to return the children
-        */
-       void GetChildrenUptoDepth(unsigned int Q, vec_nodes& fathers);
-
-       /**
-        * This method compares the subtrees that start in this node and one given by parameter.
-        * @param nodeB is the stating node of the subtree to be compared with
-        * @param Q is the depth to select "fathers" nodes
-        * @param F is the depth to select "family" nodes
-        * @param commonA vector to save the common nodes for this subtree
-        * @param commonA vector to save the common nodes for the subtree given by parameter
-        * @param nonCommonA vector to save the non-common nodes for this subtree
-        * @param nonCommonB vector to save the non-common nodes for the subtree given by parameter
-        */
-       void CompareSubTreesOrkiszMorales(Node* nodeB, unsigned int Q, unsigned int F, vec_nodes& commonA, vec_nodes& commonB, vec_nodes& nonCommonA, vec_nodes& nonCommonB, map_id_vecnodes& map_A_to_B, map_id_vecnodes& map_B_to_A, std::vector< std::pair< pair_nodes, pair_nodes > >& vector_pair_edges);
-
-       /**
-        * Method that returns the pair of branches (one node for each tree) that has the minimum distance after root overlapping.
-        * Valid branches for the actual node are the one level branches those the branches up to this child (height = 2).
-        * Root overlapping means the translation of branch so that root overlap.
-        * @pre: The actual branch is not marked.
-        * @param nodeB is the subtree root node to be compared with
-        * @return the pair of branches (one node for each tree) that has the minimum distance after root overlapping
-        */
-       std::pair< std::pair<Node*, Node*>, double> GetBestBranches_ActualTranslatedOneLevelBranches_To_AllPossibleBranches(Node* nodeB);
-
-       /**
-        * Method that returns all the distances to all the non-marked branches, i.e., the end node of the branch is non-marked,
-        * inside a multimap (key, value) structure where the value elementent corresponds to the compared branches.
-        * @param node_gradfather is the grandfather node to be compared
-        * @param Q is the depth to select "fathers"
-        * @param F is the depth to select "family" nodes
-        * @return multimap where the key is the distance between branches and the value is the pair of compared branches end-nodes.
-        */
-       std::multimap< double, std::pair<Node*, Node*> > CalculateDistanceToAllBranches_FatherAndFamily(Node* node_gradfather, unsigned int Q, unsigned int F);
-
-       /**
-        * Method is executed by grandfather nodes. It returns the closest pair of nodes,
-        * one must be my child and the other one of the relatives given node.
-        * The closest pair is the one that has the minimal distance between the children and the families.
-        * The distance is the sum of fathers distances and family distances.
-        * @param nodeB is the node to be compared with
-        * @return the closest pair of nodes, one must be my child and the other on of the relatives given node.
-        */
-       //std::pair< std::pair<Node*, Node*>, double> GetClosestBranch_FatherAndFamily(Node* nodeB);
-
-       /**
-        * Method that returns the closest relative node, all the nodes but this, whose position is the closest to the point given by parameter
-        * @param position is the point to be compared with
-        * @param distance is the minimum distance found in the relatives
-        * @return the closest relative node, all the nodes but this, whose position is the closest to the point given by parameter
-        */
-       Node* GetClosestRelativeToPoint(Vec3 position, double& distance);
-
-
-       Node* GetClosestRelativeToBranch(Edge* branch, Vec3 vector_translation, double& distance);
-
-       /**
-        * Method that returns the closest node to the given by node.
-        * Closest involve the distance between fathers and family.
-        * @param node_grandfather is the father of the "node_father" which can be different from the direct father.
-        *        this is the case when the father distance is the algorithm, given by Q, is greater than 1.
-        * @param node_father is the node to be compared with
-        * @param F is the depth to select "family" nodes
-        * @param vector_translation is the translation vector to translate the "father" branch
-        * @param distance is the distance to be returned by parameter
-        * @return the closest node to the given by node.
-        */
-       Node* GetClosestRelativeFatherAndFamily(Node* node_grandfather, Node* node_father, unsigned int F, Vec3 vector_translation, double& distance);
-
-       Node* GetClosestBranchToTranslatedBranch(Edge* branch, Vec3 vector_translation, double& distance, Edge* edgeSuperior);
-
-       /**
-        * This method returns the closest father and family, in this subtree, that is the closest to the subtree given by parameter
-        * The returned node represents the father.
-        * @param node_grandfather is the father of the "node_father" which can be different from the direct father.
-        *        this is the case when the father distance is the algorithm, given by Q, is greater than 1.
-        * @param node_father is the node father to be compared with
-        * @param F is the depth to select "family" nodes
-        * @param vector_translation is the translation vector to translation the father given by parameter
-        * @param distance is the closest distances to be returned by parameter
-        * @param edgeSuperior is a superior edge where the actual edge must be attached
-        * @returns the closest father and family, in this subtree, that is the closest to the subtree given by parameter
-        */
-       Node* GetClosestFatherAndFamilyToTranslatedFatherAndFamily(Node* node_grandfather, Node* node_father, unsigned int F, Vec3 vector_translation, double& distance, Edge* edgeSuperior);
-
-       /**
-        * Method that return the closest ascending node that is marked as common.
-        * A common node may common if:
-        *   (1) it is marked or (2) one of their descendants is marked
-        * return the closest ascending common node. NULL is there is no such node.
-        */
-       const Node* GetClosestCommonAscendingNode() const;
-
-       /**
-        * Method that marks all nodes between this node and the one given by parameter. If the searched node is not found then all nodes are marked.
-        * @param nodeB is the searched node
-        * @return true is the node was found, false otherwise
-        */
-       bool MarkNodesUntilNode(Node* nodeB);
-
-       Node* GetNextNodeInPathToNode(Node* node_searched);
-
-       /**
-        * Method that returns the path from the actual node to the searched node
-        * @param node_end is the searched node
-        * @param vector_pathNodes vector_pathNodesis the vector to return the path
-        */
-       void GetPathToNode(Node* node_end, vec_nodes& vector_pathNodes);
-
-       void MarkPathFromNodeToNode(Node* node_begin, Node* node_end);
-
-       void MarkPathNodesToNode(Node* node_end);
-
-       /**
-        * Method that returns a root with a copy of this node as single child
-        * @return a root with a copy of this node as single child
-        */
-       Node* GetDetachedRootCopy();
-
-       /*!
-        * This method return true if two nodes are equals
-        * @param nodeTreeB
-        * @return
-        */
-       bool CompareNodes(Node* nodeTreeB);
-
-       /**
-        * Method that returns a new composed edge from this node to the searched node.
-        * @param idNode is the searched id node
-        * @return the edge to the searched node. Null if the node is not found.
-        */
-       Edge* GetComposedEdge(unsigned int idNode);
-
-       /**
-        * Method that composes the actual edge with the edge given by parameter
-        * @param nEdge edge to be composed with
-        * @return final composed edge
-        */
-       Edge* AddChildEdgeInformation(Edge* nEdge);
-
-       /**
-        * Method that returns a "composed edge" up to the ancestor
-        * @pre the ancesto node must be a real ancestor
-        * @param node_ancestor is the ancestor node to with the edge must be composed
-        * @param edge is the actual composed edge. NULL if the fist iteration
-        * @return the composed edge up to the ancesto node
-        */
-       Edge* GetEdgeToAncestor(Node* node_ancestor, Edge* edge);
-
-       /**
-        * Method that concatenates the actual edge to a superior edge given by parameter.
-        * As the given edge is superior then the actual edge must be concatenate at the end of the superior edge,
-        * this means that superiorEdge.target must equal to the actualEdge.source.
-        * @param superiorEdge is the superior edge where the actual edge must be added
-        * @return - a copy of the actual edge if the superior edge is NULL
-        *                 - if superiorEdge.target == actualEdge.source the the superior edge with the actual edge concatenated
-        *                 - NULL otherwise (superiorEdge.target != actualEdge.source)
-        */
-       Edge* ConcatenateEdgeToSuperiorEdge(Edge* superiorEdge);
-
-       /*!
-        * This method returns true if the accumulation of a set of nodes are equals
-        * (in tolerance) to the compared node (this). This method tries to find
-        * edges in the case of edge losses.
-        * When this method returns true, NodeB pointer is replaced to the node (target)
-        * found by accumulation (See the report to understand what this means).
-        * @param nodeB - Current node to compare
-        * @param nodeBAcc - Accumulator Node (Optional)
-        * @return
-        */
-       bool FindSimilarEdgeByAccumulation(Node* nodeB, Node* nodeBAcc = NULL);
-
-       /*!
-        * This method returns true if there is a marked node along the hierarchy
-        * @param result
-        * @return
-        */
-       bool FindMarked(Node* result);
-
-       /*!
-        * This method marks the path between two nodes and returns true if a path
-        * has found.
-        * @param nodeB
-        * @return
-        */
-       bool MarkPath(Node* nodeB);
-
-       /*!
-        * This method returns the cost between two nodes.
-        * @param nodeB
-        * @return
-        */
-       unsigned int GetCost(Node* nodeB);
-
-       //Setters and Modifiers
-
-       /*
-        * Method that sets the id of the node
-        * @param nM_id is the new id
-        */
-       void SetId(unsigned int nM_id);
-
-       /*!
-        * This method adds a node in the children vector
-        * @param node is the node to be added
-        */
-       void AddChild(Node* node);
-
-       /*!
-        * This method sets the children vector
-        * @param children
-        */
-       void SetChildren(std::vector<Node*>& children);
-
-       /**
-        * Method that sets the father
-        * @param nFather is the father
-        */
-       void SetFather(Node* nFather);
-
-       /*!
-        * This method sets an edge between the current node and its parent
-        * @param edge
-        */
-       void SetEdge(Edge* edge);
-
-       /*!
-        * This method sets the coordinates of the node
-        * @param coords
-        */
-       void SetCoords(const Vec3& coords);
-
-       /**
-        * Method that sets the level of the node
-        * @param level is the level of the node
-        */
-       void SetLevel(const int& level);
-
-       /**
-        * Method that deleted a node and all his children, from the tree
-        * @return true if the node was deleted (found), false otherwise
-        */
-       bool DeleteNodeById(unsigned int nId);
-
-       /*!
-        * This method merges the nodeB into this
-        * @param nodeB
-        */
-       void MergeNodes(Node* nodeB);
-
-       /*!
-        * This method marks a node
-        */
-       void Mark();
-
-       /*!
-        * This method unmarks a node
-        */
-       void UnMark();
-
-       /*!
-        * This method update all levels along the hierarchy
-        * @param level
-        */
-       void UpdateLevels(unsigned int level = 0);
-
-
-       /**
-        * Method that prints the tree up to a given level
-        * @param level where the print must finish
-        */
-       void printUpToLevel(int level);
-
-       void printNodeAndChildrenIds( );
-
-       void printChildrenIds( );
-
-       /**
-        * Method that creates the quaternions of the airways up the maxLevel
-        * @param level is the level where the extraction must end
-        * @param requiredLevel is the required level until the extraction must be done
-        * @pre level >= 2
-        */
-       void createQuaternionsUpToLevel(int level, int requiredLevel);
-
-       /**
-        * Method that returns the closest pair node, based on their distance, having the first node of the pair as non-marked.
-        * The pair is found on the given a multimap of distances and pair of nodes. It is supposed that the multimap sorts
-        * the elements by its key. In this case the key corresponds to the distance.
-        * @param map_dist_pairNodes is the map containing the distances (keys) and the pair of nodes (value)
-        * @return the closest pair nodes, based on their distance, given a multimap of distances and pair of nodes. If
-        *         no pair was found with the pair node nonmaked, a null pair is returned.
-        *         Actually the method returns the pair and its distances in a pair <distance, pair>
-        */
-       std::pair<double, std::pair<Node*, Node*> > GetPairWithClosestDistance_FirstNodeNonMarked(std::multimap<double, pair_nodes> map_dist_pairNodes);
-
-       /**
-        * Add the statistics of number of bifurcations in the tree to the array given by parameter
-        * @param p array to save the statistics
-        */
-       void getStasticsBifurcations(int* p);
-
-       //Operator Overloads
-
-       Node& operator=(Node& node);
-
-       const Node& operator=(const Node& node);
-
-       bool operator ==(const Node& node);
-
-       bool operator !=(const Node& node);
-
-       bool operator <(const Node& node);
-
-       bool operator >(const Node& node);
-
-protected:
-
-       /**
-        * Node id
-        */
-       unsigned int m_id;
-
-       /**
-        * Children nodes vector
-        */
-       vec_nodes m_children;
-
-       /**
-        * Father node
-        */
-       Node* father;
-
-       /**
-        * Edge between the current node and its parent.
-        * The source of the edge corresponds to the parent en the target to the child,
-        * in this case to "this" node.
-        */
-       Edge* m_edge;
-
-       /**
-        * Spatial 3D position of the node in real coordinates of the image
-        */
-       Vec3 m_coords;
-
-       /**
-        * Node level
-        */
-       int m_level;
-
-       /**
-        * Node mark
-        */
-       bool m_mark;
-};
-
-} /* namespace airways */
-
-#endif /* AIRWAYSNODE_H_ */
diff --git a/lib/Airways/AirwaysLib/airwaysTree.cxx b/lib/Airways/AirwaysLib/airwaysTree.cxx
deleted file mode 100644 (file)
index 0f0f821..0000000
+++ /dev/null
@@ -1,2251 +0,0 @@
-/*
- * airwaysTree.txx
- *
- *  Created on: May 3, 2014
- *      Author: caceres@creatis.insa-lyon.fr
- *      Modifications by: Alfredo Morales Pinzón
- */
-
-#ifndef _AIRWAYS_TREE_TXX_
-#define _AIRWAYS_TREE_TXX_
-
-#include "airwaysTree.h"
-
-namespace airways
-{
-
-AirwaysTree::AirwaysTree() :  m_root(NULL)
-{
-
-}
-
-//Ceron
-AirwaysTree::AirwaysTree(TInputImage::Pointer img, TInputImage::Pointer img_skele, Node* root, bool shouldUpdate){
-    this->m_root = root;
-    this->m_root->SetLevel(0);
-    this->m_img = img;
-    this->m_skeleton = img_skele;
-    //TODO: Should this calculate levels and populate edges and nodes vectors?
-    FillTree(root);
-    if(shouldUpdate) this->UpdateEdges();
-}
-
-void AirwaysTree::FillTree(Node* node){
-    //std::cout << "Calls fill tree for " << node->GetCoords() << std::endl;
-    this->m_nodes.push_back(node);
-    node->SetId(this->m_nodes.size());
-    if(node->GetEdge() != NULL){
-        this->m_edges.push_back(node->GetEdge());
-        node->GetEdge()->UpdateEdgeInfo();
-    }
-    int level = node->GetLevel();
-    //std::cout << "Node is at level " << level << std::endl;
-    vec_nodes::const_iterator it = node->GetChildren().begin();
-       for (; it != node->GetChildren().end(); ++it){
-        (*it)->SetLevel(level+1);
-        this->FillTree(*it);
-    }
-}
-
-AirwaysTree::AirwaysTree(TInputImage::Pointer img, TInputImage::Pointer img_sk, Node* root)
-{
-       this->m_root = root;
-       this->m_root->SetLevel(0);
-       this->m_skeleton = img_sk;
-       this->m_img = img;
-       this->UpdateEdges();
-}
-
-AirwaysTree::AirwaysTree(TInputImage::Pointer image_airwaySegmentation, TInputImage::Pointer image_skeletonDM, EdgeVector& vector_edges, Edge* edge_trachea)
-{
-       std::cout << "AirwaysTree::AirwaysTree(TInputImage::Pointer img, TInputImage::Pointer img_sk, EdgeVector& tEdgeVector, Edge* trachea)" << std::endl;
-       std::cout << "Edges to add:" << vector_edges.size() << std::endl;
-
-       if(edge_trachea == NULL)
-               std::cout << "The trachea edge is NULL" << std::endl;
-
-       // Set the attribtes
-       this->m_skeleton = image_skeletonDM;
-       this->m_img = image_airwaySegmentation;
-       this->m_root = edge_trachea->m_source;
-       this->m_root->SetLevel(0);
-
-       this->m_nodes.push_back(edge_trachea->m_source);        // Add the first node, the root to the nodes of the tree
-       edge_trachea->m_source->SetId(this->m_nodes.size());// Set the root id
-
-       // Insert the trachea edge
-       this->Insert(edge_trachea);
-
-       // Insert all edges
-       unsigned int iniSize = vector_edges.size();
-
-       while (!vector_edges.empty())
-       {
-               bool oneEdgeAdded = false;
-               EdgeVector::iterator it = vector_edges.begin();
-               while (it != vector_edges.end())
-               {
-                       if (this->Insert(*it))
-                       {
-                               std::cout << "Edges added: [" << (*it)->GetSource()->GetCoords() << "]->[" << (*it)->GetTarget()->GetCoords() << "], missing: " << vector_edges.size()-1 << std::endl;
-                               oneEdgeAdded = true;
-                               it = vector_edges.erase(it);
-                       }
-                       else
-                               ++it;
-               } //while
-
-               // If there are edges to be added but they could not be added
-               if(!oneEdgeAdded)
-               {
-                       std::cout << "Edges not added:" << vector_edges.size() << std::endl;
-                       for (EdgeVector::iterator it = vector_edges.begin(); it != vector_edges.end(); ++it)
-                               std::cout << "Edge missing: [" << (*it)->GetSource()->GetCoords() << "]->[" << (*it)->GetTarget()->GetCoords() << "]" << std::endl;
-                       break;
-               }
-               // AMP: I did not find any explanation for this "exception"
-               /*count++;
-               if (count == iniSize)
-               {
-                       std::cout << "handled exception: arwaysTree.txx, AirwaysTree" << std::endl;
-                       break;
-               } //if
-                */
-       } //while
-       this->UpdateEdges();
-
-       std::cout << "AirwaysTree::AirwaysTree(TInputImage::Pointer img, TInputImage::Pointer img_sk, EdgeVector& tEdgeVector, Edge* trachea) ...  OK" << std::endl;
-}
-
-AirwaysTree::~AirwaysTree()
-{
-
-}
-
-Node* AirwaysTree::GetRoot() const
-{
-       return this->m_root;
-}
-
-std::string AirwaysTree::GetImageName() const
-{
-       return (this->m_img_name);
-}
-
-std::string AirwaysTree::GetResultPath() const
-{
-       return (this->m_result_path);
-}
-
-TInputImage::Pointer AirwaysTree::GetSegmentedImage() const
-{
-       return this->m_img;
-}
-
-TInputImage::Pointer AirwaysTree::GetSkeletonImage() const
-{
-       return this->m_skeleton;
-}
-
-const Node* AirwaysTree::GetNode(const Vec3 nodeCoords) const
-{
-       return this->GetNode(nodeCoords);
-}
-
-Node* AirwaysTree::GetNodeById(unsigned int nId)
-{
-       return this->m_root->GetNodeById(nId);
-}
-
-int AirwaysTree::GetDepthById(unsigned int nId)
-{
-       return this->m_root->GetDepthById(nId);
-}
-
-unsigned int AirwaysTree::CountMarkedNodes(Node* current) const
-{
-       if (current == NULL)
-               current = this->m_root;
-       Node* aux = NULL;
-       bool found = current->FindMarked(aux);
-       if (!found && !current->IsMarked())
-               return 0;
-       if (aux != NULL && found)
-               current = aux;
-       unsigned int count = 1;
-       vec_nodes::const_iterator it = current->GetChildren().begin();
-       for (; it != current->GetChildren().end(); ++it)
-               count += this->CountMarkedNodes(*it);
-       return count;
-}
-
-unsigned int AirwaysTree::GetWeight( ) const
-{
-       if (this->m_root == NULL)
-               return 0;
-
-       return this->m_root->GetWeight();
-}
-
-unsigned int AirwaysTree::GetHeight(Node* current) const
-{
-       if (current == NULL)
-               current = this->m_root;
-       if (current->IsLeaf())
-               return 1;
-       unsigned int max = 0;
-       vec_nodes::const_iterator it = current->GetChildren().begin();
-       for (; it != current->GetChildren().end(); ++it)
-       {
-               unsigned int cMax = this->GetHeight(*it);
-               if (cMax > max)
-                       max = cMax;
-       } //rof
-       if (current == this->m_root)
-               return max;
-       return ++max;
-}
-
-unsigned int AirwaysTree::GetLevels(Node* current, unsigned int cLevel) const
-{
-       if (current == NULL)
-               current = this->m_root;
-       if (current->IsLeaf())
-               return current->GetLevel();
-       unsigned int maxLevel = cLevel;
-       vec_nodes::const_iterator it = current->GetChildren().begin();
-       for (; it != current->GetChildren().end(); ++it)
-       {
-               unsigned int level = this->GetLevels(*it, maxLevel);
-               if (level > maxLevel)
-                       maxLevel = level;
-       } //rof
-       return maxLevel;
-}
-
-unsigned int AirwaysTree::GetNumberOfLeafs( ) const
-{
-       if(!this->m_root)
-               return 0;
-
-       return this->m_root->GetNumberOfLeafs( );
-}
-
-const EdgeVector& AirwaysTree::GetEdges() const
-{
-       return this->m_edges;
-}
-
-const vec_nodes& AirwaysTree::GetNodes() const
-{
-       return this->m_nodes;
-}
-
-const Node* AirwaysTree::GetClosestBrachNodeToIndex(float point_x, float point_y, float point_z) const
-{
-       float distance = 0;
-       Node* closestNode = this->m_root->GetClosestBranchNodeToPoint(point_x, point_y, point_z, distance);
-       return closestNode;
-}
-
-void AirwaysTree::GetBrancheNodesInfluencingPoint(float point_x, float point_y, float point_z, vec_nodes& vec_nodes_influence)
-{
-       if(this->m_root)
-       {
-               std::cout << "AirwaysTree::GetBrancheNodesInfluencingPoint" << std::endl;
-               this->m_root->GetBrancheNodesInfluencingPoint(point_x, point_y, point_z, vec_nodes_influence);
-       }
-}
-
-AirwaysTree& AirwaysTree::GetTreeFromMarkedNodes(Node* currentNode, AirwaysTree* tree)
-{
-       if (tree == NULL)
-       {
-               if (!this->m_root->IsMarked())
-                       return *(new AirwaysTree());
-               currentNode = this->m_root;
-               tree = new AirwaysTree();
-               Node* current = new Node(currentNode->GetCoords());
-               tree->SetRoot(current);
-               vec_nodes::const_iterator it = currentNode->GetChildren().begin();
-               for (; it != currentNode->GetChildren().end(); ++it)
-                       this->GetTreeFromMarkedNodes(*it, tree);
-               this->ImageReconstruction(tree->m_img);
-               //this->ImageReconstruction(tree->m_skeleton);
-               return *tree;
-       } //fi
-       if (currentNode->IsMarked())
-       {
-               Edge* edge = new Edge();
-               *edge = *currentNode->GetEdge();
-               Node* target = new Node(currentNode->GetCoords());
-               edge->m_target = target;
-               tree->Insert(edge);
-               vec_nodes::const_iterator it = currentNode->GetChildren().begin();
-               for (; it != currentNode->GetChildren().end(); ++it)
-                       this->GetTreeFromMarkedNodes(*it, tree);
-       } //fi
-       return *(new AirwaysTree());
-}
-
-AirwaysTree& AirwaysTree::GetSubTreeFromNode(Node* node, AirwaysTree* tree)
-{
-       if (tree == NULL)
-       {
-               tree = new AirwaysTree();
-               Node* current = new Node(node->GetCoords());
-               tree->SetRoot(current);
-               vec_nodes::const_iterator it = node->GetChildren().begin();
-               for (; it != node->GetChildren().end(); ++it)
-                       this->GetSubTreeFromNode(*it, tree);
-               this->ImageReconstructionFromNode(tree->m_img, node);
-               //this->ImageReconstructionFromNode(tree->m_skeleton, node, true);
-               return *tree;
-       } //fi
-       Edge* edge = new Edge();
-       *edge = *node->GetEdge();
-       Node* target = new Node(node->GetCoords());
-       edge->m_target = target;
-       tree->Insert(edge);
-       vec_nodes::const_iterator it = node->GetChildren().begin();
-       for (; it != node->GetChildren().end(); ++it)
-               this->GetSubTreeFromNode(*it, tree);
-
-       return *(new AirwaysTree());
-}
-
-AirwaysTree& AirwaysTree::GetSubTreeByLevels(const int& level, Node* node,
-               AirwaysTree* tree)
-{
-       if (tree == NULL)
-       {
-               node = this->m_root;
-               tree = new AirwaysTree();
-               Node* current = new Node(node->GetCoords());
-               tree->SetRoot(current);
-               if (node->GetLevel() <= level)
-               {
-                       node->Mark();
-                       vec_nodes::const_iterator it = node->GetChildren().begin();
-                       for (; it != node->GetChildren().end(); ++it)
-                               this->GetSubTreeByLevels(level, *it, tree);
-               } //fi
-               if (node->GetLevel() == level)
-               {
-                       DuplicatorType::Pointer duplicator = DuplicatorType::New();
-                       duplicator->SetInputImage(this->m_img);
-                       duplicator->Update();
-                       tree->m_img = duplicator->GetOutput();
-                       duplicator->SetInputImage(this->m_skeleton);
-                       duplicator->Update();
-                       tree->m_skeleton = duplicator->GetOutput();
-               } //if
-               else
-               {
-                       this->ImageReconstruction(tree->m_img);
-                       //this->ImageReconstruction(tree->m_skeleton, true);
-               } //else
-               this->UnMarkAll();
-               return *tree;
-       } //fi
-       if (node->GetLevel() <= level)
-       {
-               node->Mark();
-               Edge* edge = new Edge();
-               *edge = *node->GetEdge();
-               Node* target = new Node(node->GetCoords());
-               edge->m_target = target;
-               tree->Insert(edge);
-               vec_nodes::const_iterator it = node->GetChildren().begin();
-               for (; it != node->GetChildren().end(); ++it)
-                       this->GetSubTreeByLevels(level, *it, tree);
-               if (node->GetChildren().size() == 1)
-               {
-                       Node* child = *(node->GetChildren().begin());
-                       node->MergeNodes(child);
-                       const Edge* edge = (child)->GetEdge();
-                       //removing from nodeVector and edgeVector
-                       EdgeVector::iterator it2 = this->m_edges.begin();
-                       for (; it2 != this->m_edges.end(); ++it2)
-                               if (edge == *it2)
-                               {
-                                       this->m_edges.erase(it2);
-                                       break;
-                               } //if
-                       vec_nodes::iterator it3 = this->m_nodes.begin();
-                       for (; it3 != this->m_nodes.end(); ++it3)
-                               if (child == *it3)
-                               {
-                                       this->m_nodes.erase(it3);
-                                       break;
-                               } //if
-               } //if
-       } //if
-       return *(new AirwaysTree());
-}
-
-AirwaysTree& AirwaysTree::GetSubTreeByLength(const double& length, Node* node,
-               AirwaysTree* tree, double cLenght)
-{
-       if (tree == NULL)
-       {
-               node = this->m_root;
-               tree = new AirwaysTree();
-               Node* current = new Node(node->GetCoords());
-               tree->SetRoot(current);
-               node->Mark();
-               vec_nodes::const_iterator it = node->GetChildren().begin();
-               for (; it != node->GetChildren().end(); ++it)
-                       this->GetSubTreeByLength(length, *it, tree);
-               this->ImageReconstruction(tree->m_img);
-               //this->ImageReconstruction(tree->m_skeleton, true);
-               this->UnMarkAll();
-               return *tree;
-       } //fi
-       cLenght += node->GetEdge()->m_length;
-       if (cLenght <= length)
-       {
-               node->Mark();
-               Edge* edge = new Edge();
-               *edge = *node->GetEdge();
-               Node* target = new Node(node->GetCoords());
-               edge->m_target = target;
-               tree->Insert(edge);
-               vec_nodes::const_iterator it = node->GetChildren().begin();
-               for (; it != node->GetChildren().end(); ++it)
-                       this->GetSubTreeByLength(length, *it, tree, cLenght);
-               if (node->GetChildren().size() == 1)
-               {
-                       Node* child = *(node->GetChildren().begin());
-                       node->MergeNodes(child);
-                       const Edge* edge = (child)->GetEdge();
-                       //removing from nodeVector and edgeVector
-                       EdgeVector::iterator it2 = this->m_edges.begin();
-                       for (; it2 != this->m_edges.end(); ++it2)
-                               if (edge == *it2)
-                               {
-                                       this->m_edges.erase(it2);
-                                       break;
-                               } //if
-                       vec_nodes::iterator it3 = this->m_nodes.begin();
-                       for (; it3 != this->m_nodes.end(); ++it3)
-                               if (child == *it3)
-                               {
-                                       this->m_nodes.erase(it3);
-                                       break;
-                               } //if
-               } //if
-       } //if
-       return *(new AirwaysTree());
-}
-
-AirwaysTree& AirwaysTree::GetSubTreeByRadius(const double& radius, Node* node,
-               AirwaysTree* tree, double cRadius)
-{
-       if (tree == NULL)
-       {
-               node = this->m_root;
-               tree = new AirwaysTree();
-               Node* current = new Node(node->GetCoords());
-               tree->SetRoot(current);
-               node->Mark();
-               vec_nodes::const_iterator it = node->GetChildren().begin();
-               for (; it != node->GetChildren().end(); ++it)
-                       this->GetSubTreeByRadius(radius, *it, tree);
-               this->ImageReconstruction(tree->m_img);
-               //this->ImageReconstruction(tree->m_skeleton, true);
-               this->UnMarkAll();
-               return *tree;
-       } //fi
-       cRadius += node->GetEdge()->m_aRadius;
-       if (cRadius >= radius)
-       {
-               node->Mark();
-               Edge* edge = new Edge();
-               *edge = *node->GetEdge();
-               Node* target = new Node(node->GetCoords());
-               edge->m_target = target;
-               tree->Insert(edge);
-               vec_nodes::const_iterator it = node->GetChildren().begin();
-               for (; it != node->GetChildren().end(); ++it)
-                       this->GetSubTreeByRadius(radius, *it, tree, cRadius);
-               if (node->GetChildren().size() == 1)
-               {
-                       Node* child = *(node->GetChildren().begin());
-                       node->MergeNodes(child);
-                       const Edge* edge = (child)->GetEdge();
-                       //removing from nodeVector and edgeVector
-                       EdgeVector::iterator it2 = this->m_edges.begin();
-                       for (; it2 != this->m_edges.end(); ++it2)
-                               if (edge == *it2)
-                               {
-                                       this->m_edges.erase(it2);
-                                       break;
-                               } //if
-                       vec_nodes::iterator it3 = this->m_nodes.begin();
-                       for (; it3 != this->m_nodes.end(); ++it3)
-                               if (child == *it3)
-                               {
-                                       this->m_nodes.erase(it3);
-                                       break;
-                               } //if
-               } //if
-       } //if
-       return *(new AirwaysTree());
-}
-
-void AirwaysTree::MarkLevels(const int& level, Node* currentNode)
-{
-       if (currentNode == NULL)
-               currentNode = this->m_root;
-       if (currentNode->GetLevel() <= level)
-       {
-               currentNode->Mark();
-               vec_nodes::const_iterator it = currentNode->GetChildren().begin();
-               for (; it != currentNode->GetChildren().end(); it++)
-                       this->MarkLevels(level, *it);
-       } //if
-}
-
-bool AirwaysTree::IsEmpty() const
-{
-       return this->m_root == NULL;
-}
-
-bool AirwaysTree::IsNodeInsidePath(unsigned int idNode_starting, unsigned int  idNode_ending, unsigned int  idNode_searched)
-{
-       // Check if the starting point exist
-       Node* node_starting = this->m_root->GetNodeById(idNode_starting);
-       if(!node_starting)
-               return false;
-
-       // Check if the searched node exist in the subtree of the starting node
-       Node* node_searched = node_starting->GetNodeById(idNode_searched);
-       if(!node_searched)
-               return false;
-
-       // Check if the ending node exist in the subtree of the searched node
-       if(!node_searched->HasNodeId(idNode_ending))
-               return false;
-
-       // If all conditions were true then the node is in the path
-       return true;
-}
-
-void AirwaysTree::SetRoot(Node* root)
-{
-       this->m_root = root;
-       this->m_root->SetLevel(0);
-       this->m_nodes.push_back(this->m_root);
-}
-
-void AirwaysTree::SetImageName(const std::string& img_name)
-{
-       this->m_img_name = img_name;
-}
-
-void AirwaysTree::SetResultPath(const std::string& folderPath)
-{
-       this->m_result_path = folderPath;
-}
-
-bool AirwaysTree::Insert(Edge* edge)
-{
-       if (this->m_root == NULL)
-               return false;
-       // Search if the source or target coordinates exist in the tree
-       Node* source = this->GetNode(edge->m_source->GetCoords());
-       Node* target = this->GetNode(edge->m_target->GetCoords());
-
-       // If the source and the target coordinates do not exist then the
-       // edge can not be added, also if both exist in the tree.
-       if ( ( source == NULL && target == NULL ) || ( source != NULL && target != NULL) )
-               return false;
-       else if (source == NULL && target != NULL) // If target was found
-       {
-               // Change the direction of the edge
-               edge->m_target = edge->m_source;
-               edge->m_source = target;
-       }
-       else
-               edge->m_source = source;
-
-       // Set the target and source nodes for the Edge
-       edge->m_target->SetEdge(edge);
-       edge->m_target->SetLevel(edge->m_source->GetLevel() + 1);
-       edge->m_source->AddChild(edge->m_target);
-
-
-       // Add the new child node
-       this->m_nodes.push_back(edge->m_target);
-       this->m_edges.push_back(edge);
-
-       // Set the id node
-       edge->m_target->SetId(this->m_nodes.size());
-       return true;
-}
-
-void AirwaysTree::UnMarkAll(Node* currentNode)
-{
-       if (currentNode == NULL)
-               currentNode = this->m_root;
-       currentNode->UnMark();
-
-       vec_nodes::const_iterator it = currentNode->GetChildren().begin();
-       for (; it != currentNode->GetChildren().end(); ++it)
-               this->UnMarkAll(*it);
-}
-
-void AirwaysTree::UpdateLevels(unsigned int levels)
-{
-       this->m_root->UpdateLevels(levels);
-}
-
-void AirwaysTree::CompareTreesOrkiszMorales(AirwaysTree& treeB, unsigned int Q, unsigned int F, vec_nodes& commonA, vec_nodes& commonB, vec_nodes& nonCommonA, vec_nodes& nonCommonB, std::map< unsigned int, std::vector<Node*> >& map_A_to_B, std::map< unsigned int, std::vector<Node*> >& map_B_to_A, std::vector< std::pair< std::pair<Node*, Node*>, std::pair<Node*, Node*> > >& vector_pair_edges_A_to_B)
-{
-       // Algorithm
-       // The algorithm is recursive it is implemented the node class. The idea is to overlap the initial nodes of the subtrees
-       // and find the best branch correspondence for the first level of the trees.
-       // Hypothesis: It is supposed that the roots of the trees are common, so the algorithm does not run in the root nodes
-       // 1. Translate one of the subtree so that the initial nodes overlap.
-       // 2. While one of the trees has non-marked child
-       //   2.1 Compare each child to all the branches is the other tree.
-       //   2.2 Select the pair, child and branch in the other tree, that has the lowest distance function.
-       //   2.3 Add the pair and the distance to the final result.
-       //   2.4 Mark the nodes
-       //   2.5 Find and mark the omitted nodes in the similar branch. If the selected branch has more that 2 nodes it means that intemediary nodes do not have correpondece.
-       //   2.6 Run the process (First step) using the found pair of nodes.
-
-       if( !this->IsEmpty() && !treeB.IsEmpty() )
-       {
-
-               // ----------------------------
-               // ---- Pre-Matching steps ----
-
-               // Get the root nodes
-               Node* root_A = this->m_root;
-               Node* root_B = treeB.m_root;
-
-               // Mark the roots
-               root_A->Mark();
-               root_B->Mark();
-
-               // Add the root match
-               map_A_to_B[root_A->GetId()].push_back(root_B);
-               map_B_to_A[root_B->GetId()].push_back(root_A);
-
-               // Add the root nodes match
-               pair_nodes pair_edgeA(root_A, root_A);
-               pair_nodes pair_edgeB(root_B, root_B);
-               std::pair< pair_nodes, pair_nodes > pairRoorNodes_edge(pair_edgeA, pair_edgeB);
-               vector_pair_edges_A_to_B.push_back(pairRoorNodes_edge);
-
-               // ----------------------------
-               // ----- Run the comparison----
-
-               root_A->CompareSubTreesOrkiszMorales(root_B, Q, F, commonA, commonB, nonCommonA, nonCommonB, map_A_to_B, map_B_to_A, vector_pair_edges_A_to_B);
-
-       }
-       else
-               std::cout << "Trees are empties." << std::endl;
-}
-
-void AirwaysTree::MarkPathFromNodeToNode(Node* node_begin, Node* node_end)
-{
-       if(this->m_root)
-               this->m_root->MarkPathFromNodeToNode(node_begin, node_end);
-}
-
-void AirwaysTree::CompareTrees(AirwaysTree& treeB)
-{
-       // Compare all the "branches" (paths) in treeA with all branches in treeB
-       Vector_Pair_PairNodes_Score vectorPairNodesScore = this->CompareAllBranches(treeB);
-
-       std::cout << "Vector pairs size:" <<  vectorPairNodesScore.size() << std::endl;
-
-       // Algorithm to find the comment branches (paths)
-       // Until one of the trees is empty
-       // 1. Find the pair, with at least one leaf in the pair, with the lowest score
-       // 2. Compare the score of the father node of the leaf, or one of the leafs, with the correspondent pair leaf
-       //   If the score is lower that the score of the actual pair
-       //      - The compared leaf is not common. Mark the compared leaf, delete the compared leave and save the leaf as not common.
-       //   If the score is greater
-       //      - The leafs are common then mark both leafs as commons. Mark both leaves, delete them and save them as common leafs.
-
-       // Variables
-       //AirwaysTree* tree_copyA = this->GetCopy();
-       //AirwaysTree* tree_copyB = treeB.GetCopy();
-
-       //NodeVector nonCommonNodes_A;
-       //NodeVector commonNodes_A;
-       //NodeVector nonCommonNodes_B;
-       //NodeVector commonNodes_B;
-
-       std::map<unsigned int, Node*> nonCommonNodes_A;
-       std::map<unsigned int, Node*> commonNodes_A;
-       std::map<unsigned int, Node*> nonCommonNodes_B;
-       std::map<unsigned int, Node*> commonNodes_B;
-
-       // Until one of the trees is not empty
-       while( this->GetWeight() > 1 && treeB.GetWeight() > 1 )
-       {
-               // Print the weight of the trees
-               std::cout << "Weight [A,B]: [" << this->GetWeight() << "," << treeB.GetWeight() << "]" << std::endl;
-               std::cout << "Leafs [A,B]: [" << this->GetNumberOfLeafs() << "," << treeB.GetNumberOfLeafs() << "]" << std::endl;
-               std::cout << "Vector pairs size:" <<  vectorPairNodesScore.size() << std::endl;
-
-
-               // 1. Find the pair, with at least one leaf in the pair, with the lowest score
-               Pair_PairNodes_Score pair_nonMarked = this->GetBestLeaf(vectorPairNodesScore);
-               Node* node_actualA = pair_nonMarked.first.first;
-               Node* node_actualB = pair_nonMarked.first.second;
-               double score_actual = pair_nonMarked.second;
-
-               // 2. Take the leaf (L) and his father (F), the other node is called (O). Compare the score of the father node (F) with the correspondent pair leaf (O).
-               if(node_actualA->IsLeaf())
-               {
-                       //const Edge* edgeActual = node_actualA->GetEdge();
-                       //Node* targetActual = edgeActual->GetTarget();
-                       //const unsigned int id_father = targetActual->GetId();
-                       //double score_fatherA_to_B = this->GetPairNodes_Score(vectorPairNodesScore, 0, node_actualB->GetId());
-                       double score_fatherA_to_B = this->GetPairNodes_Score(vectorPairNodesScore, node_actualA->GetEdge()->GetTarget()->GetId(), node_actualB->GetId());
-                       //double score_fatherA_to_B =  pair_fatherA_to_B.second;
-                       // If the score is lower than the score of the actual pair
-                       if(score_fatherA_to_B < score_actual)
-                       {
-                               //- The compared leaf is not common. Mark the compared leaf, delete the compared leave and save the leaf as not common.
-                               node_actualA->Mark();
-                               std::map<unsigned int, Node*>::iterator it;
-                               it=nonCommonNodes_A.find(node_actualA->GetId());
-                               if(it==nonCommonNodes_A.end())
-                                       nonCommonNodes_A[node_actualA->GetId()] = node_actualA;
-                               //nonCommonNodes_A.push_back(node_actualA);
-                       }
-                       // If the score is greater
-                       else
-                       {
-                               // - The leafs are common then mark both leafs as commons. Mark both leaves, delete them and save them as common leafs.
-                               node_actualA->Mark();
-                               node_actualB->Mark();
-
-                               std::map<unsigned int, Node*>::iterator it;
-                               it=commonNodes_B.find(node_actualB->GetId());
-                               if(it==commonNodes_B.end())
-                                       commonNodes_B[node_actualB->GetId()] = node_actualB;
-
-                               it=commonNodes_A.find(node_actualA->GetId());
-                               if(it==commonNodes_A.end())
-                               {
-                                       std::cout << "CommonNode A:" << node_actualA->GetId() << std::endl;
-                                       commonNodes_A[node_actualA->GetId()] = node_actualA;
-                               }
-
-                               //commonNodes_B.push_back(node_actualB);
-                               //commonNodes_A.push_back(node_actualA);
-                       }
-                       this->DeleteNodeById(node_actualA->GetId());
-                       this->DeleteEntriesByIdNode(vectorPairNodesScore, 0, node_actualA->GetId());
-               }
-               else
-               {
-                       double score_fatherB_to_A = this->GetPairNodes_Score(vectorPairNodesScore, node_actualA->GetId(), node_actualB->GetEdge()->GetTarget()->GetId());
-                       //double score_fatherB_to_A =  pair_fatherB_to_A.second;
-                       // If the score is lower that the score of the actual pair
-                       if(score_fatherB_to_A < score_actual)
-                       {
-                               //- The compared leaf is not common. Mark the compared leaf, delete the compared leave and save the leaf as not common.
-                               node_actualB->Mark();
-                               std::map<unsigned int, Node*>::iterator it;
-                               it=nonCommonNodes_B.find(node_actualB->GetId());
-                               if(it==nonCommonNodes_B.end())
-                                       nonCommonNodes_B[node_actualB->GetId()] = node_actualB;
-                               //nonCommonNodes_B.push_back(node_actualB);
-                       }
-                       // If the score is greater
-                       else
-                       {
-                               // - The leafs are common then mark both leafs as commons. Mark both leaves, delete them and save them as common leafs.
-                               node_actualA->Mark();
-                               node_actualB->Mark();
-                               //commonNodes_B.push_back(node_actualB);
-                               //commonNodes_A.push_back(node_actualA);
-
-                               std::map<unsigned int, Node*>::iterator it;
-                               it=commonNodes_B.find(node_actualB->GetId());
-                               if(it==commonNodes_B.end())
-                                       commonNodes_B[node_actualB->GetId()] = node_actualB;
-
-                               it=commonNodes_A.find(node_actualA->GetId());
-                               if(it==commonNodes_A.end())
-                                       commonNodes_A[node_actualA->GetId()] = node_actualA;
-                       }
-                       treeB.DeleteNodeById(node_actualB->GetId());
-                       this->DeleteEntriesByIdNode(vectorPairNodesScore, 1, node_actualB->GetId());
-               }
-       }
-
-       // Print the results
-       std::cout << "Non-CommonNodes [A,B]" <<  nonCommonNodes_A.size() << ", " << nonCommonNodes_B.size() << std::endl;
-       std::cout << "CommonNodes [A,B]" <<  commonNodes_A.size() << ", " << commonNodes_B.size() << std::endl;
-
-       // Get the branches with the lowest difference
-       /*bool first = true;
-       double lowestValue = 0;
-       Pair_Node_Node bestPairNodes;
-       int iteration = 1;
-       for(Vector_Pair_PairNodes_Score::iterator it = vectorPairNodesScore.begin(); it != vectorPairNodesScore.end(); ++it )
-       {
-               if(first)
-               {
-                       lowestValue = (*it).second;
-                       bestPairNodes = (*it).first;
-                       first = false;
-               }
-               else if( (*it).second < lowestValue )
-               {
-                       lowestValue = (*it).second;
-                       bestPairNodes = (*it).first;
-               }
-       }
-
-       // Print the best pair of nodes
-       if(vectorPairNodesScore.size() > 0)
-               std::cout << "Best pair: Node A:" << (bestPairNodes).first->GetId() << ", Node B:" << (bestPairNodes).second->GetId() << std::endl;
-        */
-
-       /*// AMP - This code was commented after a meeting with Leonardo Florez
-       // We make the hypothesis that both roots are equal and
-       // that the root has only one child.
-       // The comparison of two branches implies the alignment
-       // of the mother branches and then the comparison of the
-       // daughters branches using intrinsic characteristics of
-       // each branch and a distance function between both.
-
-       if (this->IsEmpty() || treeB.IsEmpty())
-       {
-               std::cout << "One or both airways are empty." << std::endl;
-               return;
-       }
-
-       Edge actualRootEdge = this->m_root->GetEdge();
-       Edge comparedRootEdge = treeB.m_root->GetEdge();
-
-       // By the hypothesis, both root edges are similar. So we have to compared
-       // the edged of the root edges.
-       actualRootEdge.compareChildEdges(comparedRootEdge);
-        */
-}
-
-Pair_PairNodes_Score AirwaysTree::GetBestLeaf(Vector_Pair_PairNodes_Score vectorPairNodesScore)
-{
-       // Variables
-       Pair_PairNodes_Score pairNodesScore_final;
-       bool first = true;
-
-       for(Vector_Pair_PairNodes_Score::iterator it = vectorPairNodesScore.begin(); it != vectorPairNodesScore.end(); ++it)
-       {
-               // Check that one of the node is a leaf
-               pair_nodes pair_actual = (*it).first;
-               Node* a = pair_actual.first;
-               Node* b = pair_actual.second;
-               if( a->IsLeaf() || b->IsLeaf() )
-               {
-                       if(first)
-                       {
-                               first = false;
-                               pairNodesScore_final = (*it);
-                       }
-                       else if((*it).second < pairNodesScore_final.second)
-                       {
-                               pairNodesScore_final = (*it);
-                       }
-               }
-       }
-
-       if(first)
-               std::cout << "Best leaf not found" << std::endl;
-
-       return pairNodesScore_final;
-}
-
-double AirwaysTree::GetPairNodes_Score(Vector_Pair_PairNodes_Score vectorPairNodesScore, const unsigned int idA, const unsigned int idB)
-{
-       bool found = false;
-       double score = -1;
-
-       for(Vector_Pair_PairNodes_Score::iterator it = vectorPairNodesScore.begin(); it != vectorPairNodesScore.end(); ++it)
-       {
-               // Check that one of the node is a leaf
-               pair_nodes pair_actual = (*it).first;
-               Node* a = pair_actual.first;
-               Node* b = pair_actual.second;
-               if( a->GetId() == idA && b->GetId() == idB )
-               {
-                       found = true;
-                       score = (*it).second;
-               }
-       }
-
-       if(!found)
-               std::cout << "Pair of Ids not found: " << idA << ", " << idB << std::endl;
-
-       return score;
-}
-
-bool AirwaysTree::DeleteNodeById(unsigned int nId)
-{
-       bool deleted = false;
-       if(m_root->GetId() == nId)
-       {
-               delete(m_root);
-               m_root = NULL;
-               return true;
-       }
-
-       return this->m_root->DeleteNodeById(nId);
-}
-
-unsigned int AirwaysTree::DeleteEntriesByIdNode(Vector_Pair_PairNodes_Score& vectorPairNodesScore, unsigned int component, unsigned int nId)
-{
-       unsigned int pairs_deleted = 0;
-
-       Vector_Pair_PairNodes_Score::iterator it = vectorPairNodesScore.begin();
-       while(it != vectorPairNodesScore.end())
-       {
-               // Check that one of the node is a leaf
-               pair_nodes pair_actual = (*it).first;
-               unsigned int id_actual = -1;
-               if(component == 0)
-                       id_actual = pair_actual.first->GetId();
-               else
-                       id_actual = pair_actual.second->GetId();
-
-               if( id_actual == nId)
-               {
-                       it = vectorPairNodesScore.erase(it);
-                       ++pairs_deleted;
-               }
-               else
-                       ++it;
-       }
-
-       std::cout << "Pairs deleted: " << pairs_deleted << std::endl;
-
-       return pairs_deleted;
-}
-
-AirwaysTree* AirwaysTree::GetCopy()
-{
-       return NULL;
-}
-
-Vector_Pair_PairNodes_Score AirwaysTree::CompareAllBranches(AirwaysTree& treeB)
-{
-       std::cout << "Compare all branches  ..." << std::endl;
-       // Variables
-       int nodesA = this->m_nodes.size();
-       int nodesB = treeB.m_nodes.size();
-
-       Vector_Pair_PairNodes_Score vectorPairNodesScore;
-
-       // For all the actual branches ( nodes different from the root)
-       for(unsigned int idA = 2; idA <= nodesA; ++idA)
-       {
-               // Get the actual branch in A
-               Edge* branchA = this->GetComposedEdge(idA);
-
-               //Get the final actual node in A
-               Node* node_actualA = this->GetNodeById(idA);
-
-               std::cout << "IdA: " << idA << std::endl;
-
-               // For all the branches in B tree
-               for(unsigned int idB = 2; idB <= nodesB; ++idB)
-               {
-                       // Get the actual branch in B
-                       Edge* branchB = treeB.GetComposedEdge(idB);
-
-                       //Get the final actual node in B
-                       Node* node_actualB = treeB.GetNodeById(idB);
-
-                       // Get the score from A to B and from B to A
-                       double scoreA2B = branchA->CompareWith(branchB);
-                       double scoreB2A = branchB->CompareWith(branchA);
-
-                       // Get the final score
-                       // Options:
-                       // A. Maximum score
-                       //double score = scoreB2A > scoreA2B ? scoreB2A : scoreA2B ;
-
-                       // B. Sum of scores
-                       double score = scoreB2A + scoreA2B;
-
-                       // Build the pair of nodes
-                       pair_nodes actualPairNodes(node_actualA, node_actualB);
-
-                       Pair_PairNodes_Score actualPairNodesScore(actualPairNodes, score);
-                       vectorPairNodesScore.push_back(actualPairNodesScore);
-
-                       //std::cout << "IdA: " << idA << ", IdB: " << idB << ", score: " << score << ", ... OK" << std::endl;
-                       delete(branchB);
-               }
-               delete(branchA);
-       }
-
-       std::cout << "Compare all branches  ... OK" << std::endl;
-       return vectorPairNodesScore;
-}
-
-Edge* AirwaysTree::GetComposedEdge(unsigned int idNode)
-{
-       return this->m_root->GetComposedEdge(idNode);
-}
-
-AirwaysTree* AirwaysTree::GetSingleDetachedTreeNodeById(unsigned int nId)
-{
-       AirwaysTree* tree_detached = NULL;
-       Node* node_searched = this->GetNodeById(nId);
-       if(node_searched)
-       {
-               Node* node_root_detached = node_searched->GetDetachedRootCopy();
-               tree_detached = new AirwaysTree();
-               tree_detached->m_root = node_root_detached;
-       }
-       else
-               std::cout << "Node not found" << std::endl;
-       return tree_detached;
-}
-
-void AirwaysTree::SubIsomorphism(AirwaysTree& treeB)
-{
-       if (this->IsEmpty() || treeB.IsEmpty())
-               return;
-       //Marking the root node
-       this->m_root->Mark();
-       treeB.m_root->Mark();
-
-       //iterating children - first step
-       vec_nodes::const_iterator it = this->m_root->GetChildren().begin();
-       for (; it != this->m_root->GetChildren().end(); ++it)
-       {
-               unsigned int totalCost = 0;
-               Node* currentB = NULL;
-               Node* currentA = *it;
-               if (currentA->IsMarked())
-                       continue;
-               vec_nodes::const_iterator it2 = treeB.m_root->GetChildren().begin();
-               for (; it2 != treeB.m_root->GetChildren().end(); ++it2)
-               {
-                       if ((*it2)->IsMarked())
-                               continue;
-                       unsigned int currentCost = (*it)->GetCost(*it2);
-                       if (totalCost < currentCost)
-                       {
-                               currentB = *it2;
-                               totalCost = currentCost;
-                       } //if
-               } //for
-               if (currentB != NULL)
-                       if (*currentA == *currentB)
-                               this->GetSubTreeByDetachingNode(currentA).SubIsomorphism(
-                                               treeB.GetSubTreeByDetachingNode(currentB));
-       } //for
-       //end of first step
-       //second step
-       it = this->m_root->GetChildren().begin();
-       for (; it != this->m_root->GetChildren().end(); ++it)
-       {
-               if ((*it)->IsMarked())
-                       continue;
-               vec_nodes::const_iterator it2 = treeB.m_root->GetChildren().begin();
-               for (; it2 != treeB.m_root->GetChildren().end(); ++it2)
-               {
-                       Node* currentB = *it2;
-                       Node* currentA = *it;
-                       if (*currentB > *currentA)
-                               continue;
-                       if (currentA->FindSimilarEdgeByAccumulation(currentB))
-                       {
-                               AirwaysTree subTreeA = this->GetSubTreeByDetachingNode(
-                                               currentA);
-                               AirwaysTree subTreeB = treeB.GetSubTreeByDetachingNode(
-                                               currentB);
-                               subTreeB.UpdateLevels((*it2)->GetLevel());
-                               subTreeA.SubIsomorphism(subTreeB);
-                               treeB.m_root->UpdateLevels(treeB.m_root->GetLevel());
-                               currentA->Mark();
-                               if (!(*it2)->MarkPath(currentB))
-                                       std::cout << "Error finding path" << std::endl;
-                               break;
-                       } //if
-               } //for
-       } //for
-       vec_nodes::const_iterator it2 = treeB.m_root->GetChildren().begin();
-       for (; it2 != treeB.m_root->GetChildren().end(); ++it2)
-       {
-               if ((*it2)->IsMarked())
-                       continue;
-               it = this->m_root->GetChildren().begin();
-               for (; it != this->m_root->GetChildren().end(); ++it)
-               {
-                       Node* currentB = *it2;
-                       Node* currentA = *it;
-                       if (*currentA > *currentB)
-                               continue;
-                       if (currentB->FindSimilarEdgeByAccumulation(currentA))
-                       {
-                               AirwaysTree subTreeA = this->GetSubTreeByDetachingNode(
-                                               currentA);
-                               AirwaysTree subTreeB = treeB.GetSubTreeByDetachingNode(
-                                               currentB);
-                               subTreeA.UpdateLevels((*it)->GetLevel());
-                               subTreeA.SubIsomorphism(subTreeB);
-                               this->m_root->UpdateLevels(this->m_root->GetLevel());
-                               currentB->Mark();
-                               if (!(*it)->MarkPath(currentA))
-                                       std::cout << "Error finding path" << std::endl;
-                               break;
-                       } //if
-               } //for
-       }
-       //End of second step
-}
-
-bool AirwaysTree::Isomorphism(AirwaysTree& tree)
-{
-       if ((this->GetWeight() != tree.GetWeight())
-                       || (this->GetHeight() != tree.GetHeight()))
-               return false;
-       return this->m_root->CompareNodes(tree.m_root);
-}
-
-void AirwaysTree::ImageReconstructionFromNode(TInputImage::Pointer& result,    Node* node, bool skeleton)
-{
-       if (node == NULL)
-               return;
-       //Finding the center of the sphere
-       const Edge* edge = node->GetEdge();
-       if (edge == NULL)
-               return;
-       //making a copy of the current image
-       TInputImage::Pointer copy;
-       DuplicatorType::Pointer duplicator = DuplicatorType::New();
-       if (skeleton)
-               duplicator->SetInputImage(this->m_skeleton);
-       else
-               duplicator->SetInputImage(this->m_img);
-       duplicator->Update();
-       copy = duplicator->GetOutput();
-       //First remove the node brothers -- the following code in a way does not
-       // make sense but I'll just comment it if it is necessary
-       /*Node* parent = edge->m_source;
-     NodeVector::iterator pIt = parent->m_children.begin();
-     for (; pIt != parent->m_children.end(); ++pIt)
-     if ((*pIt) != node)
-     this->RemoveBranchFromImage(copy, node);
-     //end of brother removal*/
-       pair_posVox_rad center;
-       vec_pair_posVox_rad::const_iterator it = edge->m_vec_pair_posVox_rad.begin();
-       for (; it != edge->m_vec_pair_posVox_rad.end(); ++it)
-               if (edge->m_source->GetCoords() == (*it).first)
-                       center = *it;
-       //converting to index
-       TInputImage::PointType point;
-       point[0] = center.first[0];
-       point[1] = center.first[1];
-       point[2] = center.first[2];
-       TInputImage::IndexType indCenter;
-       if (skeleton)
-               this->m_skeleton->TransformPhysicalPointToIndex(point, indCenter);
-       else
-               this->m_img->TransformPhysicalPointToIndex(point, indCenter);
-       //creating itk sphere
-       SphereType::Pointer sphere = SphereType::New();
-       sphere->SetRadius(center.second * 4);
-       SphereType::InputType sphereCenter;
-       sphereCenter[0] = indCenter[0];
-       sphereCenter[1] = indCenter[1];
-       sphereCenter[2] = indCenter[2];
-       sphere->SetCenter(sphereCenter);
-
-       //testing code
-       //      std::cout<<"center = "<< indCenter << std::endl;
-       //std::cout << "Radio = " << center.second << std::endl;
-       TInputImage::SizeType regionSize;
-       regionSize[0] = 8 * center.second;
-       regionSize[1] = 8 * center.second;
-       regionSize[2] = 8 * center.second;
-       //std::cout << "RegionSize = " << regionSize << std::endl;
-
-       TInputImage::IndexType regionIndex;
-       regionIndex[0] = indCenter[0] - center.second * 4;
-       regionIndex[1] = indCenter[1] - center.second * 4;
-       regionIndex[2] = indCenter[2] - center.second * 4;
-       //      std::cout << "regionIndex = " << regionIndex << std::endl;
-
-       TInputImage::RegionType region;
-       region.SetSize(regionSize);
-       region.SetIndex(regionIndex);
-       RegionIterator it2(copy, region);
-       while (!it2.IsAtEnd())
-       {
-               TInputImage::IndexType ind = it2.GetIndex();
-               SphereType::InputType point;
-               point[0] = ind[0];
-               point[1] = ind[1];
-               point[2] = ind[2];
-               SphereType::OutputType output = sphere->Evaluate(point);
-               if (output)
-                       it2.Set(0);
-               ++it2;
-       }
-
-       /*
-        * First region growing - Segmenting the wanted branch to be removed
-        * Removing the branch from the image
-        */
-       if (!ComputeSimpleRegionGrowing(copy, this->m_root->GetCoords()))
-               return;
-       SubtractImageFilterType::Pointer subtractFilter =
-                       SubtractImageFilterType::New();
-       if (skeleton)
-               subtractFilter->SetInput1(this->m_skeleton);
-       else
-               subtractFilter->SetInput1(this->m_img);
-       subtractFilter->SetInput2(copy);
-       subtractFilter->Update();
-       TInputImage::Pointer diff = subtractFilter->GetOutput();
-       /*
-        * Second region growing - Cleaning the resulting image
-        */
-       Node* leaf = this->GetLeaf(node);
-       if (ComputeSimpleRegionGrowing(diff, leaf->GetCoords()))
-               result = diff;
-       else
-               std::cout << "problemas" << std::endl;
-       //cin.ignore().get(); //Pause Command for Linux Terminal
-
-}
-
-void AirwaysTree::ImageReconstruction(TInputImage::Pointer& result, bool skeleton, Node* node)
-{
-       if (node == NULL)
-       {
-               DuplicatorType::Pointer duplicator = DuplicatorType::New();
-               if (skeleton)
-                       duplicator->SetInputImage(this->m_skeleton);
-               else
-                       duplicator->SetInputImage(this->m_img);
-               duplicator->Update();
-               result = duplicator->GetOutput();
-               node = this->m_root;
-       } //if
-       if (!node->IsMarked())
-       {
-               this->RemoveBranchFromImage(result, node);
-               return;
-       }
-       vec_nodes::const_iterator it = node->GetChildren().begin();
-       for (; it != node->GetChildren().end(); ++it)
-               this->ImageReconstruction(result, skeleton, *it);
-
-}
-
-void AirwaysTree::ImageReconstructionBySpheres(TInputImage::Pointer& result, Node* node, bool useMarks)
-{
-       if (node == NULL)
-       {
-               node = this->m_root;
-               DuplicatorType::Pointer duplicator = DuplicatorType::New();
-               duplicator->SetInputImage(m_img);
-               duplicator->Update();
-               result = duplicator->GetOutput();
-               //Removing white pixels -- cleaning image
-               TInputImage::RegionType lRegion = result->GetLargestPossibleRegion();
-               RegionIterator it(result, lRegion);
-               while (!it.IsAtEnd())
-               {
-                       it.Set(0);
-                       ++it;
-               } //while
-       } //if
-       if (node->IsMarked() || !useMarks)
-       {
-               this->CreateSpheres(result, node);
-               vec_nodes::const_iterator it = node->GetChildren().begin();
-               for (; it != node->GetChildren().end(); ++it)
-                       this->ImageReconstructionBySpheres(result, *it);
-       } //if
-}
-
-Node* AirwaysTree::GetNode(const Vec3 nodeCoords, Node* current)
-{
-       if (current == NULL)
-               current = this->m_root;
-       if (current->GetCoords() == nodeCoords)
-               return current;
-       vec_nodes::const_iterator it = current->GetChildren().begin();
-       for (; it != current->GetChildren().end(); ++it)
-       {
-               Node* child = GetNode(nodeCoords, *it);
-               if (child != NULL)
-                       return child;
-       } //rof
-       return NULL;
-}
-
-Node* AirwaysTree::GetLeaf(Node* current)
-{
-       if (current == NULL)
-               current = this->m_root;
-       if (current->IsLeaf())
-               return current;
-       vec_nodes::const_iterator it = current->GetChildren().begin();
-       Node* node = NULL;
-       unsigned int maxHeight = 0;
-       for (; it != current->GetChildren().end(); ++it)
-       {
-               unsigned int cHeight = this->GetHeight(*it);
-               if (maxHeight <= cHeight)
-               {
-                       maxHeight = cHeight;
-                       node = *it;
-               } //if
-       } //for
-       if (node != NULL)
-               return this->GetLeaf(node);
-       return NULL;
-}
-
-void AirwaysTree::UpdateEdges(Node* node)
-{
-       if (node == NULL)
-               node = this->m_root;
-
-       if (node->GetEdge() != NULL)
-       {
-               Edge* edge = node->GetEdge();
-               //edge->m_skInfoPairVector = this->GetSkeletonInfoFromEdge(edge->m_source->GetCoords(), edge->m_target->GetCoords());
-               edge->SetSkeletonPairVector( this->GetSkeletonInfoFromEdge(edge->m_source->GetCoords(), edge->m_target->GetCoords()) );
-               node->GetEdge()->UpdateEdgeInfo();
-       }
-       vec_nodes::const_iterator it = node->GetChildren().begin();
-       for (; it != node->GetChildren().end(); ++it)
-               this->UpdateEdges(*it);
-}
-
-AirwaysTree& AirwaysTree::GetSubTreeByDetachingNode(Node* node)
-{
-       AirwaysTree* tree = new AirwaysTree();
-       tree->m_root = node;
-       return *tree;
-}
-
-DiGraph_EdgePair AirwaysTree::AddBoostEdge(const pair_posVox_rad& source, const pair_posVox_rad& target, DiGraph& graph)
-{
-       bool vFound[2] = { false, false };
-       DiGraph_VertexDescriptor vDescriptor[2];
-
-       //Remember that DiGraph_VertexIteratorPair, first = begin, second = end
-       DiGraph_VertexIndexMap index = get(boost::vertex_index, graph);
-
-       //Search the vertex in the graph
-       for (DiGraph_VertexIteratorPair vPair = boost::vertices(graph); vPair.first != vPair.second && (!vFound[0] || !vFound[1]); ++vPair.first)
-       {
-               // Get the current information [vector, intensity]
-               pair_posVox_rad current = graph[index[*vPair.first]];
-
-               // Check if current is equal to the source or target vertex
-               if (current.first == source.first)
-               {
-                       vDescriptor[0] = index[*vPair.first];
-                       vFound[0] = true;
-               } //if
-               else if (current.first == target.first)
-               {
-                       vDescriptor[1] = index[*vPair.first];
-                       vFound[1] = true;
-               } //if
-       } //for
-
-       // If one of the vertices is not in the graph, adds the new vertex
-
-       // Add the vertices if they are not in the graph
-       if (!vFound[0])
-               vDescriptor[0] = boost::add_vertex(source, graph);
-       if (!vFound[1])
-               vDescriptor[1] = boost::add_vertex(target, graph);
-
-       // Check if the edge exist in the graph
-       // boost::edge returns the pair<edge_descriptor, bool>, with bool=true is the edge exists
-       DiGraph_EdgePair edgeC1 = boost::edge(vDescriptor[0], vDescriptor[1],graph);
-       DiGraph_EdgePair edgeC2 = boost::edge(vDescriptor[1], vDescriptor[0],graph);
-
-       // If the edge does not exist, then add it
-       if (!edgeC1.second && !edgeC2.second)
-       {
-               DiGraph_EdgePair nEdge = boost::add_edge(vDescriptor[0], vDescriptor[1], graph);
-               return nEdge;
-       } //if
-
-       // If an edge has not been added then -> second = false
-       // Remove the added vertices because the edge already exists.
-       if (!vFound[0])
-               boost::remove_vertex(vDescriptor[0], graph);
-
-       if (!vFound[1])
-               boost::remove_vertex(vDescriptor[1], graph);
-
-       edgeC1.second = false;
-       edgeC1.second = false;
-
-       return edgeC1;
-}
-
-bool AirwaysTree::FindNeighborhood(DiGraph& graph, Vec3Queue& queue, Vec3List& used, const Vec3& end, ConstNeighborhoodIterator& iterator)
-{
-       if (queue.empty())
-               return false;
-
-       // Get the next pixel in the queue
-       Vec3 current = queue.front();
-
-       // Put the pixel in the used list
-       used.push_back(current);
-
-       // Delete next pixel from the queu
-       queue.pop();
-
-       //AMP//iterator.GoToBegin();
-       //AMP//while (!iterator.IsAtEnd())
-       //AMP//{
-
-       // AMP commented
-       /*unsigned int centerIndex = iterator.GetCenterNeighborhoodIndex();
-               TInputImage::IndexType index = iterator.GetIndex(centerIndex);
-               SKPairInfo src(Vec3(index[0], index[1], index[2]),
-                               iterator.GetPixel(iterator.GetCenterNeighborhoodIndex()));
-               if (src.first != current)
-               {
-                       ++iterator;
-                       continue;
-               }       //if
-        */
-       //PMA commented
-
-       // AMP
-
-       // Set the current index to the actual pixel
-       TInputImage::IndexType indexActual;
-       indexActual[0] = current[0];
-       indexActual[1] = current[1];
-       indexActual[2] = current[2];
-
-       // Place the iterator in the actual index
-       iterator.SetLocation(indexActual);
-
-       // Create the pair [vector, intensity] for the actual index
-       pair_posVox_rad src(current, iterator.GetPixel(iterator.GetCenterNeighborhoodIndex()));
-
-       // PMA
-
-       // Iterate over the neighbors
-       for (unsigned int i = 0; i < iterator.Size(); i++)
-       {
-               //AMP//if (iterator.GetPixel(i) != 0 && i != centerIndex)
-
-               // If the intensity is not zero and it's the center
-               if (iterator.GetPixel(i) != 0 && i != iterator.GetCenterNeighborhoodIndex())
-               {
-                       // Get the index of the iterator
-                       TInputImage::IndexType ind = iterator.GetIndex(i);
-
-                       // Create the target pair [vector, intensity] for the target
-                       pair_posVox_rad target(Vec3(ind[0], ind[1], ind[2]),    iterator.GetPixel(i));
-
-                       // Add the edge to the graph
-                       bool added = AddBoostEdge(src, target, graph).second;
-
-                       // If it could not be added then it is because it already exist, then go to next neighboor
-                       if (!added)
-                               continue;
-
-                       // The edge was added. Stop the adding process if the target vertex was reached.
-                       if (target.first == end)
-                               return true;
-
-                       // If it the edge was added and it is not the target then add it to the queue, if and only if
-                       // it was not already used.
-                       if (std::find(used.begin(), used.end(), target.first)== used.end())
-                               queue.push(target.first);
-               }//if
-       }//for
-       //AMP//break;
-       //AMP//}        //while
-       return false;
-}
-
-DiGraph AirwaysTree::GetGraphShortestPath(const DiGraph& graph, const Vec3& begin, const Vec3& end)
-{
-       // Variables
-       DiGraph ret; // Returning graph with the shortest path
-       DiGraph_EdgeIterator ei, eo; // Initial and final iterators
-
-       // Iterate over the edges of the graph
-       boost::tie(ei, eo) = boost::edges(graph);
-       for (; ei != eo; ++ei)
-       {
-               // Get the source of the actual edge
-               pair_posVox_rad src = graph[boost::source(*ei, graph)];
-
-               // If the source corresponds to the begin pixel
-               if (src.first == begin)
-               {
-                       // Get the target of the actual edge
-                       pair_posVox_rad target = graph[boost::target(*ei, graph)];
-
-                       // If the actual target corresponds to the end pixel
-                       if (target.first == end)
-                       {
-                               // Add the edge to the final path
-                               AddBoostEdge(src, target, ret);
-
-                               //AMP
-                               std::cout << "Add final target [src]-[ target]:[" << src.first << "]-[" << target.first << "], numVertices:" << boost::num_vertices(ret) << std::endl;
-                               //PMA
-
-                               // Return the path
-                               return ret;
-                       }
-
-                       // If the actual target does not correspond to the end pixel, then add it to the returning path
-                       // and run the shortest path with the target of the actual edge.
-                       ret = GetGraphShortestPath(graph, target.first, end);
-
-                       // If the path is empty then the iteration continues
-                       if (boost::num_vertices(ret) == 0)
-                               continue;
-
-                       // if not return ret + new edge
-                       // If the path was found then add the actual edge and return the path
-                       AddBoostEdge(src, target, ret);
-                       //AMP
-                       //std::cout << "Add found edge [src]-[ target]:[" << src.first << "]-[" << target.first << "], numVertices:" << boost::num_vertices(ret) << std::endl;
-                       //PMA
-                       return ret;
-
-               }//fi
-       }
-       return ret;
-}
-
-vec_pair_posVox_rad AirwaysTree::GetGraphShortestPath_AMP(const DiGraph& graph, const Vec3& begin, const Vec3& end)
-{
-       //std::cout << "SKPairInfoVector AirwaysTree::GetGraphShortestPath_AMP(const DiGraph& graph, const Vec3& begin, const Vec3& end)" << std::endl;
-       // Variables
-       vec_pair_posVox_rad path;
-       DiGraph ret; // Returning graph with the shortest path
-       DiGraph_EdgeIterator ei, eo; // Initial and final iterators
-
-       // Iterate over the edges of the graph
-       boost::tie(ei, eo) = boost::edges(graph);
-       for (; ei != eo; ++ei)
-       {
-               // Get the source of the actual edge
-               pair_posVox_rad src = graph[boost::source(*ei, graph)];
-
-               // If the source corresponds to the begin pixel
-               if (src.first == begin)
-               {
-                       // Get the target of the actual edge
-                       pair_posVox_rad target = graph[boost::target(*ei, graph)];
-
-                       // If the actual target corresponds to the end pixel
-                       if (target.first == end)
-                       {
-                               // Add the edge to the final path
-                               AddBoostEdge(src, target, ret);
-                               path.push_back(target);
-                               path.push_back(src);
-
-                               //AMP
-                               //std::cout << "Add final target [src]-[ target]:[" << src.first << "]-[" << target.first << "], numVertices:" << boost::num_vertices(ret) << ", path_size:" << path.size() << std::endl;
-                               //PMA
-
-                               // Return the path
-                               //std::cout << "SKPairInfoVector AirwaysTree::GetGraphShortestPath_AMP(const DiGraph& graph, const Vec3& begin, const Vec3& end) ... FIRST ... OK" << std::endl;
-                               return path;
-                       }
-
-                       //std::cout << "Not yet in the target voxel" << std::endl;
-                       // If the actual target does not correspond to the end pixel, then add it to the returning path
-                       // and run the shortest path with the target of the actual edge.
-                       path = GetGraphShortestPath_AMP(graph, target.first, end);
-                       //std::cout << "Path found, path size:" << path.size() << std::endl;
-
-                       // If the path is empty then the iteration continues
-                       if (path.size() == 0)
-                               continue;
-
-                       // if not return ret + new edge
-                       // If the path was found then add the actual edge and return the path
-                       AddBoostEdge(src, target, ret);
-                       path.push_back(src);
-                       //AMP
-                       //std::cout << "Add found edge [src]-[ target]:[" << src.first << "]-[" << target.first << "], numVertices:" << boost::num_vertices(ret)  << ", path_size:" << path.size() << std::endl;
-                       //PMA
-                       //std::cout << "SKPairInfoVector AirwaysTree::GetGraphShortestPath_AMP(const DiGraph& graph, const Vec3& begin, const Vec3& end) ... SECOND ... OK" << std::endl;
-                       return path;
-
-               }//fi
-       }
-
-       //std::cout << "SKPairInfoVector AirwaysTree::GetGraphShortestPath_AMP(const DiGraph& graph, const Vec3& begin, const Vec3& end) ... END ... OK" << std::endl;
-       return path;
-}
-
-vec_pair_posVox_rad AirwaysTree::GetSkeletonInfoFromEdge(const Vec3& source, const Vec3& target)
-{
-       //converting to pixel
-       TInputImage::PointType pointSource;
-       pointSource[0] = source[0];
-       pointSource[1] = source[1];
-       pointSource[2] = source[2];
-
-       TInputImage::PointType pointTarget;
-       pointTarget[0] = target[0];
-       pointTarget[1] = target[1];
-       pointTarget[2] = target[2];
-
-       TInputImage::IndexType indexSource;
-       TInputImage::IndexType indexTarget;
-
-       this->m_skeleton->TransformPhysicalPointToIndex(pointSource, indexSource);
-       this->m_skeleton->TransformPhysicalPointToIndex(pointTarget, indexTarget);
-       //end of conversion
-
-       // AMP // Print the initial and final voxels to verify their positions
-       //std::cout << "Begin: [" << indexSource[0] << "," << indexSource[1] << "," << indexSource[2] << "] -- " << this->m_skeleton->GetPixel(indexSource) << std::endl;
-       //std::cout << "End: [" << indexTarget[0] << "," << indexTarget[1] << "," << indexTarget[2] << "] -- " << this->m_skeleton->GetPixel(indexTarget) << std::endl;
-       //std::cout << "BeginVoxel: [" << pointSource[0] << "," << pointSource[1] << "," << pointSource[2] << "]"<< std::endl;
-       //std::cout << "EndVoxel: [" << pointTarget[0] << "," << pointTarget[1] << "," << pointTarget[2] << "]" << std::endl;
-       // PMA //
-
-       Vec3 sourcePxl(indexSource[0], indexSource[1], indexSource[2]);
-       Vec3 targetPxl(indexTarget[0], indexTarget[1], indexTarget[2]);
-
-       // AMP // Commented
-       /*
-       // Compute the distance in each direction and add "21" in each one
-       float dstX = beginPxl.EculideanDistance(
-                       Vec3(endPxl[0], beginPxl[1], beginPxl[2])) + 21;
-       float dstY = beginPxl.EculideanDistance(
-                       Vec3(beginPxl[0], endPxl[1], beginPxl[2])) + 21;
-       float dstZ = beginPxl.EculideanDistance(
-                       Vec3(beginPxl[0], beginPxl[1], endPxl[2])) + 21;
-
-       //start point
-       TInputImage::IndexType index;
-       index[0] = beginPxl[0] < endPxl[0] ? beginPxl[0] : endPxl[0];
-       index[1] = beginPxl[1] < endPxl[1] ? beginPxl[1] : endPxl[1];
-       index[2] = beginPxl[2] < endPxl[2] ? beginPxl[2] : endPxl[2];
-
-       index[0] -= index[0] <= 10 ? 0 : 10;
-       index[1] -= index[1] <= 10 ? 0 : 10;
-       index[2] -= index[2] <= 10 ? 0 : 10;
-
-
-       //size of region
-       TInputImage::SizeType size;
-       size[0] = ceil(dstX);
-       size[1] = ceil(dstY);
-       size[2] = ceil(dstZ);
-
-       TInputImage::RegionType region;
-       region.SetSize(size);
-       region.SetIndex(index);
-
-       //ConstNeighborhoodIterator iterator(radius, this->m_skeleton, region);
-       // PMA // Commented
-        */
-
-       TInputImage::SizeType radius;
-       radius[0] = 1;
-       radius[1] = 1;
-       radius[2] = 1;
-       ConstNeighborhoodIterator iterator(radius, this->m_skeleton, this->m_skeleton->GetLargestPossibleRegion());
-
-       DiGraph graph;
-       Vec3Queue queue;
-       Vec3List used;
-
-       // Set the first pixel as starting pixel
-       queue.push(sourcePxl);
-
-       //FindNeighborhood(graph, queue, used, endPxl, iterator);
-
-       // Add to the graph all the connected voxel until the ending pixel is found
-       bool endFound = false;
-       while (!queue.empty() && !endFound)
-               endFound = FindNeighborhood(graph, queue, used, targetPxl, iterator);
-
-       if(!endFound)
-               std::cout << "***************** END NOT FOUND!!!!" << std::endl;
-       else
-               std::cout << "***************** END FOUND!!!! - Graph Vertices:" << boost::num_vertices(graph) << ", Graph Edges:" << boost::num_edges(graph) << std::endl;
-
-       // Get the shortest path between the begin and end pixels
-       //std::cout << "GetGraphShortestPath [from]-[to]:[" << sourcePxl << "]-[" << targetPxl << "]" << std::endl;
-       //DiGraph result = GetGraphShortestPath(graph, sourcePxl, targetPxl);
-       vec_pair_posVox_rad path = GetGraphShortestPath_AMP(graph, sourcePxl, targetPxl);
-       //std::cout << "GetGraphShortestPath ... OK , numVertices:" << boost::num_vertices(result) << std::endl;
-
-       //AMP
-       bool beginPixelFound = false;
-       bool endPixelFound = false;
-       vec_pair_posVox_rad vector;
-
-       for(vec_pair_posVox_rad::reverse_iterator it_path = path.rbegin(); it_path != path.rend(); ++it_path)
-       {
-               TInputImage::IndexType ind;
-               ind[0] = (*it_path).first[0];
-               ind[1] = (*it_path).first[1];
-               ind[2] = (*it_path).first[2];
-               //std::cout << "["<< (*it_path).first << "], ";
-
-               // To avoid precision problems
-               if (indexSource == ind)
-               {
-                       beginPixelFound = true;
-                       (*it_path).first = source;
-               }
-               else if (indexTarget == ind)
-               {
-                       endPixelFound = true;
-                       (*it_path).first = target;
-               }
-               else
-               {
-                       TInputImage::PointType pnt;
-                       this->m_skeleton->TransformIndexToPhysicalPoint(ind, pnt);
-                       (*it_path).first = Vec3(pnt[0], pnt[1], pnt[2]);
-               }
-               vector.push_back((*it_path));
-       }
-       //vector = path;
-       //PMA
-
-       // Variables to iterate over the shortest path and save the results
-       /*// AMP
-       DiGraph_VertexIterator i, e;
-       SKPairInfoVector vector;
-
-       // Iterate over the shortest path and add each vertex in real coordinates
-       boost::tie(i, e) = boost::vertices(result);
-       std::cout << "Inserting ... [begin,end]: [" << begin << "], [" << end << "]" << std::endl;
-       for (; i != e; ++i)
-       //for (; e != i; --e)
-       {
-               // Get the actual vertex
-               SKPairInfo vertex = result[*i];
-               //SKPairInfo vertex = result[*e];
-               std::cout << "["<< vertex.first << "], ";
-
-               // Get the index (voxel position) of the actual vertex
-               TInputImage::IndexType ind;
-               ind[0] = vertex.first[0];
-               ind[1] = vertex.first[1];
-               ind[2] = vertex.first[2];
-
-               // To avoid precision problems
-               if (indexBegin == ind)
-               {
-                       beginPixelFound = true;
-                       vertex.first = begin;
-               }
-               else if (indexEnd == ind)
-               {
-                       endPixelFound = true;
-                       vertex.first = end;
-               }
-               else
-               {
-                       TInputImage::PointType pnt;
-                       this->m_skeleton->TransformIndexToPhysicalPoint(ind, pnt);
-                       vertex.first = Vec3(pnt[0], pnt[1], pnt[2]);
-               }
-               vector.push_back(vertex);
-       }
-       std::cout << "Inserting ... OK" << std::endl;
-
-
-        *///AMP
-
-
-       if(!beginPixelFound)
-               std::cout << "Begin not found: "<< source << std::endl;
-       if(!endPixelFound)
-               std::cout << "End not found:" << target << std::endl;
-
-       return vector;
-}
-
-bool AirwaysTree::ComputeSimpleRegionGrowing(TInputImage::Pointer& img,
-               const Vec3 seedPtn)
-{
-       TInputImage::PointType targetPtn;
-       targetPtn[0] = seedPtn[0];
-       targetPtn[1] = seedPtn[1];
-       targetPtn[2] = seedPtn[2];
-       TInputImage::IndexType seed;
-       img->TransformPhysicalPointToIndex(targetPtn, seed);
-       if (img->GetPixel(seed) == 0)
-       {
-               //std::cout << "seed is 0" << std::endl;
-               return false;
-       }
-       ConnectedFilterType::Pointer neighborhoodConnected =
-                       ConnectedFilterType::New();
-       neighborhoodConnected->SetLower(1);
-       neighborhoodConnected->SetUpper(1);
-       neighborhoodConnected->SetReplaceValue(1);
-       neighborhoodConnected->SetSeed(seed);
-       neighborhoodConnected->SetInput(img);
-       neighborhoodConnected->Update();
-       img = neighborhoodConnected->GetOutput();
-       return true;
-}
-
-void AirwaysTree::RemoveBranchFromImage(TInputImage::Pointer& img, Node* node)
-{
-       //typedef itk::ImageFileWriter<TInputImage> WriterType;
-       //Finding the center of the sphere
-       const Edge* edge = node->GetEdge();
-       if (edge == NULL)
-               return;
-       pair_posVox_rad center;
-       vec_pair_posVox_rad::const_iterator it = edge->m_vec_pair_posVox_rad.begin();
-       for (; it != edge->m_vec_pair_posVox_rad.end(); ++it)
-               if (edge->m_source->GetCoords() == (*it).first)
-                       center = *it;
-       //converting to index
-       TInputImage::PointType point;
-       point[0] = center.first[0];
-       point[1] = center.first[1];
-       point[2] = center.first[2];
-       TInputImage::IndexType indCenter;
-       img->TransformPhysicalPointToIndex(point, indCenter);
-       double radius = center.second;
-       //creating itk sphere
-       SphereType::Pointer sphere = SphereType::New();
-       SphereType::InputType sphereCenter;
-       sphereCenter[0] = indCenter[0];
-       sphereCenter[1] = indCenter[1];
-       sphereCenter[2] = indCenter[2];
-       sphere->SetCenter(sphereCenter);
-       unsigned int objCount = 0;
-       unsigned int obj3Count = 0; // to assure 3 Connected obj
-       //Number of connected components, children_size + parent
-       unsigned int nCConnex = edge->m_source->GetNumberOfChildren() + 1;
-       TInputImage::Pointer copy;
-       //std::cout << "entró" << std::endl;
-       while (objCount < nCConnex || obj3Count <= nCConnex)
-       {
-               if (objCount >= 3)
-                       obj3Count++;
-               radius += 1.0;
-               sphere->SetRadius(radius);
-               //making a copy of the current image
-               DuplicatorType::Pointer duplicator = DuplicatorType::New();
-               duplicator->SetInputImage(img);
-               duplicator->Update();
-               copy = duplicator->GetOutput();
-
-               //testing code
-               //      std::cout<<"center = "<< indCenter << std::endl;
-               //std::cout << "Radio = " << center.second << std::endl;
-               TInputImage::SizeType regionSize;
-               regionSize[0] = 4 * radius;
-               regionSize[1] = 4 * radius;
-               regionSize[2] = 4 * radius;
-               //std::cout << "RegionSize = " << regionSize << std::endl;
-               TInputImage::SizeType size = img->GetLargestPossibleRegion().GetSize();
-               TInputImage::IndexType regionIndex;
-               regionIndex[0] = indCenter[0] - (radius * 2);
-               if (regionIndex[0] < 0)
-                       regionIndex[0] = indCenter[0];
-               else if (regionIndex[0] > (unsigned int) size[0])
-                       regionIndex[0] = size[0];
-               regionIndex[1] = indCenter[1] - (radius * 2);
-               if (regionIndex[1] < 0)
-                       regionIndex[1] = indCenter[1];
-               else if (regionIndex[1] > (unsigned int) size[1])
-                       regionIndex[1] = size[1];
-               regionIndex[2] = indCenter[2] - (radius * 2);
-               if (regionIndex[2] < 0)
-                       regionIndex[2] = indCenter[2];
-               else if (regionIndex[2] > (unsigned int) size[2])
-                       regionIndex[2] = size[2];
-               int diff[3];
-               diff[0] = size[0] - (regionSize[0] + regionIndex[0]);
-               diff[1] = size[1] - (regionSize[1] + regionIndex[1]);
-               diff[2] = size[2] - (regionSize[2] + regionIndex[2]);
-               //std::cout << "(1) Region Index = " << regionIndex << std::endl;
-               //std::cout << "(1) Region size = " << regionSize << std::endl;
-               if (diff[0] < 0)
-                       regionSize[0] = size[0] - regionIndex[0];
-               if (diff[1] < 0)
-                       regionSize[1] = size[1] - regionIndex[1];
-               if (diff[2] < 0)
-                       regionSize[2] = size[2] - regionIndex[2];
-               //      std::cout << "regionIndex = " << regionIndex << std::endl;
-               //std::cout << "(2) Region Index = " << regionIndex << std::endl;
-               //std::cout << "(2) Region size = " << regionSize << std::endl;
-               TInputImage::RegionType region;
-               region.SetSize(regionSize);
-               region.SetIndex(regionIndex);
-               RegionIterator it2(copy, region);
-               while (!it2.IsAtEnd())
-               {
-                       TInputImage::IndexType ind = it2.GetIndex();
-                       SphereType::InputType point;
-                       point[0] = ind[0];
-                       point[1] = ind[1];
-                       point[2] = ind[2];
-                       SphereType::OutputType output = sphere->Evaluate(point);
-                       if (output)
-                               it2.Set(0);
-                       ++it2;
-               }                               //while
-               if (node->IsLeaf())
-               {
-                       TInputImage::PointType ptn;
-                       ptn[0] = node->GetCoords()[0];
-                       ptn[1] = node->GetCoords()[1];
-                       ptn[2] = node->GetCoords()[2];
-                       TInputImage::IndexType tgt;
-                       img->TransformPhysicalPointToIndex(ptn, tgt);
-                       if (img->GetPixel(tgt) == 0)
-                       {
-                               std::cout << "It entered here!!!!" << std::endl;
-                               return;
-                       }
-               }                               //if
-               CastFilterType::Pointer castFilter = CastFilterType::New();
-               castFilter->SetInput(copy);
-               castFilter->Update();
-               ConnectedComponentImageFilterType::Pointer connFilter =
-                               ConnectedComponentImageFilterType::New();
-               connFilter->SetFullyConnected(true);
-               connFilter->SetInput(castFilter->GetOutput());
-               connFilter->Update();
-               objCount = connFilter->GetObjectCount();
-               //test
-               /*WriterType::Pointer writer = WriterType::New();
-         writer->SetInput(copy);
-         writer->SetFileName("output_antes.mhd");
-         writer->Update();*/
-       }                               //while
-       //std::cout << "salio" << std::endl;
-       /*
-        * First region growing - Segmenting the wanted branch to be removed
-        * Removing the branch from the image
-        */
-       Node* leaf = this->GetLeaf(node);
-       if (!ComputeSimpleRegionGrowing(copy, leaf->GetCoords()))
-               return;
-       SubtractImageFilterType::Pointer subtractFilter =
-                       SubtractImageFilterType::New();
-       subtractFilter->SetInput1(img);
-       subtractFilter->SetInput2(copy);
-       subtractFilter->Update();
-       TInputImage::Pointer diff = subtractFilter->GetOutput();
-       /*
-        * Second region growing - Cleaning the resulting image
-        */
-       if (ComputeSimpleRegionGrowing(diff, this->m_root->GetCoords()))
-               img = diff;
-       /*else
-     std::cout << "problemas" << std::endl;*/
-       //cin.ignore().get(); //Pause Command for Linux Terminal
-}
-
-//Metodo obsoleto, ya no nos interesa la reconstruccion por esferas
-void AirwaysTree::CreateSpheres(TInputImage::Pointer& img, Node* node)
-{
-       if (node->GetEdge() == NULL)
-               return;
-       const Edge* edge = node->GetEdge();
-       vec_pair_posVox_rad::const_iterator it = edge->m_vec_pair_posVox_rad.begin();
-       for (; it != edge->m_vec_pair_posVox_rad.end(); ++it)
-       {
-               //converting to index
-               TInputImage::PointType point;
-               point[0] = (*it).first[0];
-               point[1] = (*it).first[1];
-               point[2] = (*it).first[2];
-               TInputImage::IndexType indexPoint;
-               img->TransformPhysicalPointToIndex(point, indexPoint);
-               //creating itk sphere
-               SphereType::Pointer sphere = SphereType::New();
-               sphere->SetRadius((*it).second);
-               SphereType::InputType sphereCenter;
-               sphereCenter[0] = indexPoint[0];
-               sphereCenter[1] = indexPoint[1];
-               sphereCenter[2] = indexPoint[2];
-               sphere->SetCenter(sphereCenter);
-               //creating region
-               TInputImage::SizeType regionSize;
-               regionSize[0] = 4 * (*it).second;
-               regionSize[1] = 4 * (*it).second;
-               regionSize[2] = 4 * (*it).second;
-               TInputImage::IndexType regionIndex;
-               regionIndex[0] = indexPoint[0] - 2 * ceil((*it).second);
-               regionIndex[1] = indexPoint[1] - 2 * ceil((*it).second);
-               regionIndex[2] = indexPoint[2] - 2 * ceil((*it).second);
-               TInputImage::RegionType region;
-               region.SetSize(regionSize);
-               region.SetIndex(regionIndex);
-               RegionIterator it2(img, region);
-               while (!it2.IsAtEnd())
-               {
-                       TInputImage::IndexType ind = it2.GetIndex();
-                       SphereType::InputType point;
-                       point[0] = ind[0];
-                       point[1] = ind[1];
-                       point[2] = ind[2];
-                       SphereType::OutputType output = sphere->Evaluate(point);
-                       if (output)
-                               it2.Set(1);
-                       ++it2;
-               }               //while
-       }               //for
-}
-
-void AirwaysTree::printUpToLevel(int level)
-{
-       cout << "Printing up to level: " << level <<endl;
-       this->m_root->printUpToLevel(level);
-       cout << "Printing done" <<endl;
-}
-
-void AirwaysTree::printNodeAndChildrenIds()
-{
-       cout << "Printing nodes and children: " <<endl;
-       this->m_root->printNodeAndChildrenIds( );
-       cout << "Printing nodes and children DONE" <<endl;
-}
-
-void AirwaysTree::createQuaternionsUpToLevel(int level)
-{
-       cout << "Creating quaternions up to level: " << level <<endl;
-       if(level >= 2)
-       {
-               // Print header
-               cout << "Level" << " " << "SonPositionX" << " " << "SonPositionY" << " " << "SonPositionZ" << " "
-                               "ParentVectorX" << " " << "ParentVectorY" << " " << "ParentVectorZ" << " " <<
-                               "ChildVectorX" << " " << "ChildVectorY" << " " << "ChildVectorZ"<< " " <<
-                               "Qr" << " " << "Qx" << " " << "Qy" " " << "Qz" " " << "Qtheta" << " " <<
-                               "Wx" << " " << "Wy" << " " << "Wz" << " " <<
-                               "EuclDistSonParent" << " " <<"EuclDistSonGrandson" << " " <<
-                               "RadMeanSonParent" << " " << "RadMeanSonGrandson" <<endl;
-
-               this->m_root->createQuaternionsUpToLevel(level, level);
-       }
-       else
-               cout << "Quaternions must be created from level 2." <<endl;
-       cout << "Creating quaternions done" <<endl;
-}
-
-void AirwaysTree::getStatisticsBifurcations()
-{
-       cout << "Statistics bifurcations ... " <<endl;
-
-       int p[6] = {0,0,0,0,0,0};
-
-       this->m_root->getStasticsBifurcations(p);
-
-       cout << "Bifurcations:" << endl;
-       for(int i = 0; i < 6; i++)
-       {
-               cout << i+1 << "->" << p[i] << endl;
-       }
-
-       cout << "Statistics bifurcations done " <<endl;
-}
-
-void AirwaysTree::saveAirwayToImage(std::string filename, int dims[3], double spc[3], double nOrigin[3])
-{
-       TInputImage::Pointer imagePointer;
-       imagePointer = TInputImage::New();
-
-       TInputImage::IndexType start;
-       start[0] = 0;
-       start[1] = 0;
-       start[2] = 0;
-
-       TInputImage::SizeType size;
-       size[0] = dims[0];
-       size[1] = dims[1];
-       size[2] = dims[2];
-
-       TInputImage::RegionType region;
-       region.SetSize( size );
-       region.SetIndex( start );
-
-       TInputImage::SpacingType spacing;
-       spacing[0] = spc[0];
-       spacing[1] = spc[1];
-       spacing[2] = spc[2];
-
-       TInputImage::PointType origin;
-       origin[0] = nOrigin[0];
-       origin[1] = nOrigin[1];
-       origin[2] = nOrigin[2];
-
-       imagePointer->SetRegions( region );
-       imagePointer->SetSpacing( spacing );
-       imagePointer->SetOrigin( origin );
-       imagePointer->Allocate();
-
-       //this->m_root->saveToImage(_imagePointer);
-       vec_nodes nodes_children_root = this->m_root->GetChildren();
-       vec_nodes::const_iterator it_children = nodes_children_root.begin();
-       for( ; it_children != nodes_children_root.end(); ++it_children)
-       {
-               Vec3 coords_father = (*it_children)->GetEdge()->GetSource()->GetCoords();
-               Vec3 coords_child = (*it_children)->GetCoords();
-               drawLineInImage(coords_father, coords_child, imagePointer);
-       }
-
-       cout << "Writing ..." << endl;
-       typedef itk::ImageFileWriter<TInputImage> WriterType;
-       WriterType::Pointer writer = WriterType::New();
-       writer->SetInput(imagePointer);
-       writer->SetFileName(filename);
-       writer->Update();
-       cout << "Writing ... done" << endl;
-}
-
-void AirwaysTree::drawLineInImage(Vec3 initVoxel, Vec3 endVoxel, TInputImage::Pointer imagePointer)
-{
-       TInputImage::RegionType region = imagePointer->GetLargestPossibleRegion();
-
-       TInputImage::SpacingType spacing = imagePointer->GetSpacing();
-
-       TInputImage::PointType origin = imagePointer->GetOrigin();
-
-       TInputImage::IndexType init;
-       init[0]=(initVoxel[0]-origin[0])/spacing[0];
-       init[1]=(initVoxel[1]-origin[1])/spacing[1];
-       init[2]=(initVoxel[2]-origin[2])/spacing[2];
-
-       TInputImage::IndexType end;
-       end[0]=(endVoxel[0]-origin[0])/spacing[0];
-       end[1]=(endVoxel[1]-origin[1])/spacing[1];
-       end[2]=(endVoxel[2]-origin[2])/spacing[2];
-
-       TPixel pixel;
-       pixel = 1;
-
-       itk::LineIterator<TInputImage> it(imagePointer, init, end);
-       it.GoToBegin();
-       while (!it.IsAtEnd())
-       {
-               it.Set(pixel);
-               ++it;
-       }
-}
-
-//To store the graph in a vtk
-void AirwaysTree::saveAirwayAsVTK(const std::string filename, bool common)
-{
-       vtkSmartPointer<vtkUnsignedCharArray> colors = vtkSmartPointer<vtkUnsignedCharArray>::New();
-       colors->SetNumberOfComponents(3);
-       colors->SetName("Colors");
-
-       //pointer of lines and points
-       vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();
-       vtkSmartPointer<vtkPoints> pts = vtkSmartPointer<vtkPoints>::New();
-
-       Vec3 root = this->m_root->GetCoords();
-
-       //UndirectedGraph
-
-       srand(time(NULL));
-       unsigned int id = 1;
-
-       CalculateVTKLinesFromEdges(this->m_root, 0, id, pts, lines, colors, common);
-
-       vtkSmartPointer<vtkPolyData> linesPolyData = vtkSmartPointer<vtkPolyData>::New();
-       linesPolyData->SetPoints(pts);
-       linesPolyData->SetLines(lines);
-
-       linesPolyData->GetCellData()->SetScalars(colors);
-
-       // Write the file
-       vtkSmartPointer<vtkPolyDataWriter> writer = vtkSmartPointer<vtkPolyDataWriter>::New();
-       writer->SetFileName(filename.c_str());
-#if VTK_MAJOR_VERSION <= 5
-       writer->SetInput(linesPolyData);
-#else
-       writer->SetInputData(linesPolyData);
-#endif
-       writer->Write();
-}
-
-//To store the graph in a vtk
-void AirwaysTree::CalculateVTKLinesFromEdges(const Node* node, const unsigned int& parentId,
-               unsigned int& cId, vtkSmartPointer<vtkPoints>& pts,
-               vtkSmartPointer<vtkCellArray>& lines,
-               vtkSmartPointer<vtkUnsignedCharArray>& colors, bool common)
-{
-       if (node == NULL)
-               return;
-
-       // Colors
-       unsigned char red[3] = { 255, 0, 0 };
-       unsigned char green[3] = { 0, 255, 0 };
-       unsigned char blue[3] = { 0, 0, 255 };
-       unsigned char yellow[3] = { 255, 255, 0 };
-
-       const vec_nodes children = node->GetChildren();
-
-       for(vec_nodes::const_iterator it = children.begin(); it != children.end(); ++it)
-       {
-               if (!(*it)->IsMarked() && common)
-                       continue;
-
-               const Edge* edge = (*it)->GetEdge();
-               //pts->InsertNextPoint(edge->GetSource()->GetCoords().GetVec3());
-               //pts->InsertNextPoint(edge->GetTarget()->GetCoords().GetVec3());
-
-               pts->InsertNextPoint(node->GetCoords().GetVec3());
-               pts->InsertNextPoint((*it)->GetCoords().GetVec3());
-
-               // Set color to be used
-               int numColor = node->GetLevel() % 4;
-               if(numColor == 0)
-                       colors->InsertNextTupleValue(green);
-               else if(numColor == 1)
-                       colors->InsertNextTupleValue(red);
-               else if(numColor == 2)
-                       colors->InsertNextTupleValue(blue);
-               else
-                       colors->InsertNextTupleValue(yellow);
-
-               vtkSmartPointer<vtkLine> line = vtkSmartPointer<vtkLine>::New();
-               line->GetPointIds()->SetId(0, parentId);
-               line->GetPointIds()->SetId(1, cId++);
-               lines->InsertNextCell(line);
-               unsigned int newParent = cId++;
-               CalculateVTKLinesFromEdges(*it, newParent, cId, pts, lines, colors,     common);
-       } //for
-}
-
-
-} /* namespace airways */
-
-
-#endif
-
diff --git a/lib/Airways/AirwaysLib/airwaysTree.h b/lib/Airways/AirwaysLib/airwaysTree.h
deleted file mode 100644 (file)
index 9b9775d..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * airwaysTree.h
- *
- *  Created on: May 3, 2014
- *      Author: caceres@creatis.insa-lyon.fr
- */
-
-#ifndef _AIRWAYS_TREE_H_
-#define _AIRWAYS_TREE_H_
-
-#include "airwaysTreeTypeDefinition.h"
-
-// VTK
-#include <vtkVersion.h>
-#include <vtkSmartPointer.h>
-#include <vtkCellArray.h>
-#include <vtkCellData.h>
-#include <vtkLine.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkPolyDataWriter.h>
-#include <vtkSphereSource.h>
-
-// ITK
-#include "itkImage.h"
-#include "itkImageRegionIterator.h"
-#include "itkLineIterator.h"
-#include <itkImageFileWriter.h>
-#include <Airways/AirwaysLib/TempAirwaysAppli_AirwaysLib_Export.h>
-
-namespace airways
-{
-
-// Types
-
-// Vector of nodes
-typedef std::vector<Node*> vec_nodes;
-
-// Pair of nodes
-typedef std::pair<Node*, Node*> pair_nodes;
-
-//Pair of a pair of nodes and a score
-typedef std::pair<pair_nodes,double> Pair_PairNodes_Score;
-
-/**
- *
- */
-//typedef std::pair<pair_nodes,double> Pair_PairNodes_Score;
-
-/**
- * Vector of pairs of a pair of nodes and a score
- */
-typedef std::vector<Pair_PairNodes_Score> Vector_Pair_PairNodes_Score;
-
-/*!
- * A vector stocking all the points between two nodes
- */
-typedef std::vector<pair_posVox_rad> vec_pair_posVox_rad;
-
-class TempAirwaysAppli_AirwaysLib_EXPORT AirwaysTree
-{
-public:
-
-       AirwaysTree();
-
-       AirwaysTree(TInputImage::Pointer img, TInputImage::Pointer img_sk, Node* root);
-
-       AirwaysTree(TInputImage::Pointer image_airwaySegmentation, TInputImage::Pointer image_skeletonDM, EdgeVector& vector_edges, Edge* edge_trachea);
-
-
-    //CERON
-    // New constructor that doesn't update path info between nodes.
-    AirwaysTree(TInputImage::Pointer image, TInputImage::Pointer image_skeleton, Node* root, bool shouldUpdate);
-       virtual ~AirwaysTree();
-
-       /**
-        * Getters
-        */
-
-       Node*   GetRoot() const;
-
-       std::string     GetImageName() const;
-
-       std::string     GetResultPath() const;
-
-       TInputImage::Pointer GetSegmentedImage() const;
-
-       TInputImage::Pointer GetSkeletonImage() const;
-
-       const Node*     GetNode(const Vec3 nodeCoords) const;
-
-       /**
-        * Method that return the node with the specified id
-        * @param nId is id of the requested node
-        * @return the requested id, NULL if not found
-        */
-       Node* GetNodeById(unsigned int nId);
-
-       /**
-        * Method that returns the depth of the node whose id is given by parameter
-        * @pre the node exist in the sub-tree
-        * @param idNode is the search node id
-        * @return the depth of the node up to the actual node
-        */
-       int GetDepthById(unsigned int nId);
-
-       unsigned int CountMarkedNodes(Node* current = NULL) const;
-
-       /**
-        * Method that returns the weight of the tree
-        * @return the weight of the tree which is the number of nodes in the tree.
-        */
-       unsigned int GetWeight( ) const;
-
-       unsigned int GetHeight(Node* current = NULL) const;
-
-       unsigned int GetLevels(Node* current = NULL, unsigned int cLevel = 0) const;
-
-       /**
-        * Method that returns the number of leafs in the tree
-        * @return the number of leafs in the tree
-        */
-       unsigned int GetNumberOfLeafs() const;
-
-       const EdgeVector& GetEdges() const;
-
-       const vec_nodes& GetNodes() const;
-
-       /**
-        * Method that returns the closest node of a given voxel.
-        * The closes node is the one whose path to the father has the closest point to the given point
-        * in real coordinates of the image.
-        * @param voxel_x x componente of the voxel
-        * @param voxel_y y componente of the voxel
-        * @param voxel_z z componente of the voxel
-        * @return the closest node to the given voxel
-        */
-       const Node* GetClosestBrachNodeToIndex(float point_x, float point_y, float point_z) const;
-
-       /**
-        * Method that returns the list of nodes that influence the given point
-        * @param point_x, point_y, point_z are the position of the point in real coordinates x, y, and z respectively.
-        * @param vec_nodes_influence vector to save the nodes
-        */
-       void GetBrancheNodesInfluencingPoint(float point_x, float point_y, float point_z, vec_nodes& vec_nodes_influence);
-
-       AirwaysTree& GetTreeFromMarkedNodes(Node* currentNode = NULL, AirwaysTree* tree = NULL);
-
-       AirwaysTree& GetSubTreeFromNode(Node* node, AirwaysTree* tree = NULL);
-
-       AirwaysTree& GetSubTreeByLevels(const int& level, Node* node = NULL, AirwaysTree* tree = NULL);
-
-       AirwaysTree& GetSubTreeByLength(const double& length, Node* node = NULL, AirwaysTree* tree = NULL, double cLenght = 0.0);
-
-       AirwaysTree& GetSubTreeByRadius(const double& radius, Node* node = NULL, AirwaysTree* tree = NULL, double cRadius = 0.0);
-
-       void MarkLevels(const int& level, Node* currentNode = NULL);
-
-       bool IsEmpty() const;
-
-       /**
-        * Method that search a node inside a path. The path is defined by the starting and ending nodes
-        * @param idNode_starting is the id of the starting node
-        * @param idNode_ending is the id of the ending node
-        * @param idNode_searched is the of the searched node
-        * @return true if the searched node is inside the path, false otherwise
-        */
-       bool IsNodeInsidePath(unsigned int idNode_starting, unsigned int  idNode_ending, unsigned int  idNode_searched);
-
-       void SetRoot(Node* root);
-
-       void SetImageName(const std::string& img_name);
-
-       void SetResultPath(const std::string& folderPath);
-
-       bool Insert(Edge* edge);
-
-       void UnMarkAll(Node* currentNode = NULL);
-
-       /**
-        * Method that compares two tree starting from the root node.
-        * @param treeB is the tree to be compared with
-        * @param Q is the depth to select "fathers" nodes
-        * @param F is the depth to select "family" nodes
-        * @param commonA vector to save the common nodes for this subtree
-        * @param commonA vector to save the common nodes for the subtree given by parameter
-        * @param nonCommonA vector to save the non-common nodes for this subtree
-        * @param nonCommonB vector to save the non-common nodes for the subtree given by parameter
-        */
-       void CompareTreesOrkiszMorales(AirwaysTree& treeB, unsigned int Q, unsigned int F, vec_nodes& commonA, vec_nodes& commonB, vec_nodes& nonCommonA, vec_nodes& nonCommonB, std::map< unsigned int, std::vector<Node*> >& map_A_to_B, std::map< unsigned int, std::vector<Node*> >& map_B_to_A, std::vector< std::pair< std::pair<Node*, Node*>, std::pair<Node*, Node*> > >& vector_pair_edges_A_to_B);
-
-       void MarkPathFromNodeToNode(Node* node_begin, Node* node_end);
-
-       /**
-        * Method that compares the actual tree with another given by parameter
-        * @param treeB the tree to be compared with
-        */
-       void CompareTrees(AirwaysTree& treeB);
-
-       /**
-        * Method that finds the pair, at least one is a leaf, with the lowest score
-        * @param vectorPairNodesScore is the vector of pairs
-        * @return the pair, at least one is a leaf, with the lowest score
-        */
-       Pair_PairNodes_Score GetBestLeaf(Vector_Pair_PairNodes_Score vectorPairNodesScore);
-
-       /**
-        * Method that returns the pair of pair nodes and score for the given ids.
-        * @param vectorPairNodesScore vector of pair nodes and score
-        * @param idA is the first id if the pair nodes
-        * @param idB is the second id if the pair nodes
-        * @return the score for the given pair.
-        */
-       double GetPairNodes_Score(Vector_Pair_PairNodes_Score vectorPairNodesScore, const unsigned int idA, const unsigned int idB);
-
-       /**
-        * Method that returns a copy of the tree
-        * @return the copy of this tree
-        */
-       AirwaysTree* GetCopy();
-
-       /**
-        * Method that deleted a node, all his children, from the tree
-        * @return true if the node was deleted (found), false otherwise
-        */
-       bool DeleteNodeById(unsigned int nId);
-
-       /**
-        * Method that removes all the pairs that contains the a given id is a given component position.
-        * @param vectorPairNodesScore the vector of pair nodes and score
-        * @param component is the component position to be analyzed
-        * @param nId is the searched id
-        * @return the number of deleted pairs
-        */
-       unsigned int DeleteEntriesByIdNode(Vector_Pair_PairNodes_Score& vectorPairNodesScore, unsigned int component, unsigned int nId);
-
-       /**
-        * Method that compares all the actual branches to all branches in the tree given by parameter
-        * @param treeB in the tree to be compared with
-        */
-       Vector_Pair_PairNodes_Score CompareAllBranches(AirwaysTree& treeB);
-
-       /**
-        * Method that return the composed edge from the root node to the node whose id is given by parameter
-        * @param idNode is the id of the node where the complex edge ends.
-        */
-       Edge* GetComposedEdge(unsigned int idNode);
-
-       /**
-        * Method that detaches a node and return a tree with a root and just the detaches node
-        * @param nId is the id node to be searched
-        * @return a tree with a root and just the detaches node
-        */
-       AirwaysTree* GetSingleDetachedTreeNodeById(unsigned int nId);
-
-       void UpdateLevels(unsigned int levels = 0);
-
-       void SubIsomorphism(AirwaysTree& treeB);
-
-       bool Isomorphism(AirwaysTree& tree);
-
-       void ImageReconstructionFromNode(TInputImage::Pointer& result, Node* node, bool skeleton = false);
-
-       void ImageReconstruction(TInputImage::Pointer& result, bool skeleton = false, Node* node = NULL);
-
-       void ImageReconstructionBySpheres(TInputImage::Pointer& result, Node* node = NULL, bool useMarks = false);
-
-
-       /**
-        * Method that prints the airway up to a given level
-        * @level is the level where the printing stops
-        */
-       void printUpToLevel(int level);
-
-       void printNodeAndChildrenIds();
-
-       /**
-        * Method that creates the quaternions of the airways up to a given level
-        * @level is the level where the creation stops.
-        * @pre level >= 2
-        */
-       void createQuaternionsUpToLevel(int level);
-
-       /**
-        * Method that prints the statistics of number of bifurcations in each node
-        */
-       void getStatisticsBifurcations();
-
-       void saveAirwayAsVTK(const std::string filename, bool common = false);
-
-       /**
-        * Method that save the airways in a image
-        * @param filename is the name of the image to be saved
-        * @param dims is the image dimensions
-        * @param spacing is the image spacing
-        * @param origin is the image origin
-        */
-       void saveAirwayToImage(std::string filename, int dims[3], double spc[3], double origin[3]);
-
-       /**
-        * Method that draws a line in an image
-        * @initVoxel is the initial voxel
-        * @endVoxel is the final voxel
-        * @imagePointer is the image pointer
-        */
-       void drawLineInImage(Vec3 initVoxel, Vec3 endVoxel, TInputImage::Pointer imagePointer);
-
-       void drawLine(int* pixelPointInit, int* pixelPointEnd, TInputImage::Pointer _imagePointer);
-
-
-protected:
-
-       Node* GetNode(const Vec3 nodeCoords, Node* current = NULL);
-
-       Node* GetLeaf(Node* current = NULL);
-
-       void UpdateEdges(Node* node = NULL);
-
-       AirwaysTree& GetSubTreeByDetachingNode(Node* node);
-
-       /**
-        * Method that adds an edge to the graph given by parameter
-        * @param source is the source vertex of the edge
-        * @param target is the target vertex of the edge
-        * @param graph is the graph to add the new edge
-        */
-       DiGraph_EdgePair AddBoostEdge(const pair_posVox_rad& source, const pair_posVox_rad& target, DiGraph& graph);
-
-       bool FindNeighborhood(DiGraph& graph, Vec3Queue& queue, Vec3List& used, const Vec3& end, ConstNeighborhoodIterator& iterator);
-
-       /**
-        * Method that return the shortest* path between two nodes, begin and end. *As we are dealing with arborescent trees
-        * then there is just one path between two nodes!
-        * The path goes from the end to the begin pixel!
-        * @param graph containing all the nodes and edges
-        * @param begin is the starting node
-        * @param end is the ending node
-        * @return the shortest path between the starting and ending nodes or vertices.
-        */
-       DiGraph GetGraphShortestPath(const DiGraph& graph, const Vec3& begin, const Vec3& end);
-
-       vec_pair_posVox_rad GetGraphShortestPath_AMP(const DiGraph& graph, const Vec3& begin, const Vec3& end);
-
-       vec_pair_posVox_rad GetSkeletonInfoFromEdge(const Vec3& begin, const Vec3& end);
-
-       bool ComputeSimpleRegionGrowing(TInputImage::Pointer& img, const Vec3 seedPtn);
-
-       void RemoveBranchFromImage(TInputImage::Pointer& img, Node* node);
-
-       void CreateSpheres(TInputImage::Pointer& img, Node* node);
-
-       void CalculateVTKLinesFromEdges(const Node* node, const unsigned int& parentId,
-                       unsigned int& cId, vtkSmartPointer<vtkPoints>& pts,
-                       vtkSmartPointer<vtkCellArray>& lines,
-                       vtkSmartPointer<vtkUnsignedCharArray>& colors, bool common);
-    void FillTree(Node* node);
-
-protected:
-
-       std::string m_img_name;
-       std::string m_result_path;
-       TInputImage::Pointer m_skeleton;
-       TInputImage::Pointer m_img;
-       Node* m_root;
-       vec_nodes m_nodes;
-       EdgeVector m_edges;
-};
-} /* namespace airways */
-
-#endif /* AIRWAYSTREE_H_ */
diff --git a/lib/Airways/AirwaysLib/airwaysTreeTypeDefinition.h b/lib/Airways/AirwaysLib/airwaysTreeTypeDefinition.h
deleted file mode 100644 (file)
index 235430a..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * airwaysTreeTypeDefinition.h
- *
- *  Created on: May 19, 2014
- *      Author: caceres
- */
-
-#ifndef AIRWAYSTREETYPEDEFINITION_H_
-#define AIRWAYSTREETYPEDEFINITION_H_
-
-//std
-#include <vector>
-#include <queue>
-#include <cstddef>
-#include <utility>
-//boost
-#include <boost/graph/adjacency_list.hpp>
-//itk
-#include "itkImage.h"
-#include "itkConnectedComponentImageFilter.h"
-#include "itkConstNeighborhoodIterator.h"
-#include "itkImageDuplicator.h"
-#include "itkSphereSpatialFunction.h"
-#include "itkConnectedThresholdImageFilter.h"
-#include "itkSubtractImageFilter.h"
-#include "itkCastImageFilter.h"
-//airways
-#include "../MathLib/vec3.h"
-#include "airwaysNode.h"
-#include "airwaysEdge.h"
-
-namespace airways
-{
-       typedef std::pair<Vec3, double> pair_posVox_rad;
-       typedef std::vector<pair_posVox_rad> vec_pair_posVox_rad;
-
-       /**
-        * Pair of id nodes
-        */
-
-
-       /**
-        * Pair of a pair of nodes and a score
-        */
-       //typedef std::pair<pair_node_node,double> Pair_PairNodes_Score;
-
-       //----------------------------------------------------------------------------
-       /*
-        * Typedef declaration
-        */
-       /**
-        * @typedef Defines a graph using the Boost DiGraph library
-        */
-       typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS,
-                       pair_posVox_rad> DiGraph;
-       //end typedef Graph
-       //--------------------------------------------------------------------------
-       /**
-        * @typedef Defines boost::vertex_descriptor of DiGraph
-        */
-       typedef boost::graph_traits<DiGraph>::vertex_descriptor DiGraph_VertexDescriptor;
-       //--------------------------------------------------------------------------
-       ///DiGraph edge_descriptor
-       typedef boost::graph_traits<DiGraph>::edge_descriptor DiGraph_EdgeDescriptor;
-       //--------------------------------------------------------------------------
-       ///DiGraph edge pair
-       typedef std::pair<DiGraph_EdgeDescriptor, bool> DiGraph_EdgePair;
-       //--------------------------------------------------------------------------
-       ///DiGraph Vertex IndexMap
-       typedef boost::property_map<DiGraph, boost::vertex_index_t>::type DiGraph_VertexIndexMap;
-       //--------------------------------------------------------------------------
-       ///DiGraph VertexIterator
-       typedef boost::graph_traits<DiGraph>::vertex_iterator DiGraph_VertexIterator;
-       //--------------------------------------------------------------------------
-       ///DiGraph Vertex iterator pair
-       typedef std::pair<DiGraph_VertexIterator, DiGraph_VertexIterator> DiGraph_VertexIteratorPair;
-       //--------------------------------------------------------------------------
-       ///DiGraph Edge iterator
-       typedef boost::graph_traits<DiGraph>::edge_iterator DiGraph_EdgeIterator;
-       //--------------------------------------------------------------------------
-       ///DiGraph In Edge iterator
-       typedef boost::graph_traits<DiGraph>::in_edge_iterator DiGraph_InEdgeIterator;
-       //--------------------------------------------------------------------------
-       ///DiGraph Out Edge iterator
-       typedef boost::graph_traits<DiGraph>::out_edge_iterator DiGraph_OutEdgeIterator;
-       //--------------------------------------------------------------------------
-       ///DiGraph Adjacency iterator
-       typedef boost::graph_traits<DiGraph>::adjacency_iterator DiGraph_AdjacencyIterator;
-       //--------------------------------------------------------------------------
-       ///DiGraph Vertex descriptor vector
-       typedef std::vector<DiGraph_VertexDescriptor> DiGraph_VertexVector;
-       //--------------------------------------------------------------------------
-       ///DiGraph Vertex descriptor queue
-       typedef std::queue<DiGraph_VertexDescriptor> DiGraph_VertexQueue;
-       //--------------------------------------------------------------------------
-       ///DiGraph Edge descriptor vector
-       typedef std::vector<DiGraph_EdgeDescriptor> DiGraph_EdgeVector;
-       //----------------------------------------------------------------------------
-       const unsigned int Dim = 3;
-       typedef double TPixel;
-       typedef unsigned char TPixel2;
-       typedef itk::Image<TPixel, Dim> TInputImage;
-       typedef itk::Image<TPixel2, Dim> TInputImage2;
-       typedef itk::Image<unsigned short, Dim> TInputImage3;
-       //----------------------------------------------------------------------------
-       typedef itk::ImageDuplicator<TInputImage> DuplicatorType;
-       //--------------------------------------------------------------------------
-       typedef itk::ConstNeighborhoodIterator<TInputImage> ConstNeighborhoodIterator;
-       typedef itk::ImageRegionIterator<TInputImage> RegionIterator;
-       //----------------------------------------------------------------------------
-       typedef itk::SphereSpatialFunction<> SphereType;
-       //----------------------------------------------------------------------------
-       typedef itk::ConnectedThresholdImageFilter<TInputImage, TInputImage> ConnectedFilterType;
-       //----------------------------------------------------------------------------
-       typedef itk::SubtractImageFilter<TInputImage, TInputImage> SubtractImageFilterType;
-       //----------------------------------------------------------------------------
-       typedef itk::CastImageFilter<TInputImage, TInputImage2> CastFilterType;
-       typedef itk::ConnectedComponentImageFilter<TInputImage2, TInputImage3> ConnectedComponentImageFilterType;
-       //----------------------------------------------------------------------------
-
-       //----------------------------------------------------------------------------
-       typedef std::vector<Edge*> EdgeVector;
-       //----------------------------------------------------------------------------
-       typedef std::queue<Vec3> Vec3Queue;
-       typedef std::vector<Vec3> Vec3List;
-//
-/*
- * End of typedef declaration
- */
-}
-
-#endif /* AIRWAYSTREETYPEDEFINITION_H_ */
diff --git a/lib/Airways/CMakeLists.txt b/lib/Airways/CMakeLists.txt
deleted file mode 100644 (file)
index b609a0d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-SUBDIRS(
-  MathLib
-  AirwaysLib
-  )
-
-## eof - $RCSfile$
diff --git a/lib/Airways/MathLib/CMakeLists.txt b/lib/Airways/MathLib/CMakeLists.txt
deleted file mode 100644 (file)
index cc436e0..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-## =============================
-## = Set names and directories =
-## =============================
-
-SET(lib_NAME TempAirwaysAppli_MathLib)
-
-## ===============
-## = Source code =
-## ===============
-
-FILE(GLOB lib_HEADERS_H   "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
-FILE(GLOB lib_HEADERS_HPP "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp")
-FILE(GLOB lib_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx")
-FILE(GLOB lib_SOURCES_C   "${CMAKE_CURRENT_SOURCE_DIR}/*.c")
-FILE(GLOB lib_SOURCES_CPP "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
-FILE(GLOB lib_SOURCES_CXX "${CMAKE_CURRENT_SOURCE_DIR}/*.cxx")
-
-## =====================
-## = Compilation rules =
-## =====================
-
-ADD_LIBRARY(
-  ${lib_NAME}
-  SHARED
-  ${lib_SOURCES_C}
-  ${lib_SOURCES_CPP}
-  ${lib_SOURCES_CXX}
-  )
-GENERATE_EXPORT_HEADER(
-  ${lib_NAME}
-  BASE_NAME ${lib_NAME}
-  EXPORT_MACRO_NAME ${lib_NAME}_EXPORT
-  EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/${lib_NAME}_Export.h
-  STATIC_DEFINE ${lib_NAME}_BUILT_AS_STATIC
-  )
-
-## eof - $RCSfile$
diff --git a/lib/Airways/MathLib/Quaternion.cpp b/lib/Airways/MathLib/Quaternion.cpp
deleted file mode 100644 (file)
index 6beaa48..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-//----------------------------------------------------------------------------
-// Class definition include
-//----------------------------------------------------------------------------
-
-#include "Quaternion.h"
-
-//----------------------------------------------------------------------------
-// Class implementation
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Builder
-//----------------------------------------------------------------------------
-
-Quaternion::Quaternion( )
-{
-       theta = 0.0;
-       w = Vec3(0,0,0);
-       r = cos(theta/2);
-       double sinHalfTheta = sin(theta/2);
-       im = w*sinHalfTheta;
-}
-
-Quaternion::Quaternion(Vec3 v1, Vec3 v2)
-{
-       // Normalize the vectors
-       v1.Normalize();
-       v2.Normalize();
-
-       // Dot product
-       float cosTheta = v1.Dot(v2);
-       theta = acos(cosTheta);
-
-       // Cross product
-       w = v1.Cross(v2);
-
-       // Normalization
-       w.Normalize();
-
-       // Build the quaternion
-       r = cos(theta/2);
-       double sinHalfTheta = sin(theta/2);
-       im = w*sinHalfTheta;
-}
-
-Quaternion::Quaternion(float nTheta, Vec3 nW)
-{
-       theta = nTheta;
-       w = nW;
-       w.Normalize();
-
-       // Build the quaternion
-       r = cos(theta/2);
-       double sinHalfTheta = sin(theta/2);
-       im = w*sinHalfTheta;
-}
-
-Quaternion::Quaternion(float nR, float nI, float nJ, float nK)
-{
-       r = nR;
-       im = Vec3(nI, nJ, nK);
-
-       theta = 2*acos(r);
-       double sinHalfTheta = sin(theta/2);
-       w = im/sinHalfTheta;
-}
-
-//----------------------------------------------------------------------------
-// Destructor
-//----------------------------------------------------------------------------
-
-Quaternion::~Quaternion( )
-{
-
-}
-//----------------------------------------------------------------------------
-// Methods
-//----------------------------------------------------------------------------
-
-float Quaternion::getR()
-{
-       return r;
-}
-
-float Quaternion::getI()
-{
-       return w[0];
-}
-
-float Quaternion::getJ()
-{
-       return w[1];
-}
-
-float Quaternion::getK()
-{
-       return w[2];
-}
-
-Vec3 Quaternion::getW()
-{
-       return w;
-}
-
-Quaternion Quaternion::conjugate( )
-{
-       return Quaternion(theta, -w);
-}
-
-Vec3 Quaternion::rotateVector(Vec3 vector)
-{
-       // Quaterion representing the vector
-       vector.Normalize();
-       Quaternion qv(0,vector[0],vector[1],vector[2]);
-       Quaternion qthis(r,im[0],im[1],im[2]);
-       Quaternion qthis_conj = qthis.conjugate();
-
-
-       cout << "Qv: [" << qv << "]" << endl;
-       cout << "Qthis: [" << qthis << "]" << endl;
-       cout << "QthisConj: [" << qthis_conj << "]" << endl;
-
-       // Final quaternion
-       Quaternion Qtemp = qthis*qv;
-       cout << "Qtemp: [" << Qtemp << "]" << endl;
-
-       Quaternion qf = Qtemp*qthis_conj;
-
-       cout << "Qf: [" << qf << "]" << endl;
-
-       return qf.im;
-       //return Vec3(0,0,0);
-}
-
-//----------------------------------------------------------------------------
-// Operators
-//----------------------------------------------------------------------------
-
-const float& Quaternion::operator[](unsigned int i) const
-{
-       return (i == 0 ? r : (im)[i-1]);
-}
-
-Quaternion Quaternion::operator*(Quaternion q)
-{
-       float a1 = this->r;
-       float b1 = this->w[0];
-       float c1 = this->w[1];
-       float d1 = this->w[2];
-
-       float a2 = q.r;
-       float b2 = q.w[0];
-       float c2 = q.w[1];
-       float d2 = q.w[2];
-
-       float r_n = a1*a2 - b1*b2 - c1*c2 - d1*d2;
-       float i_n = a1*b2 + a2*b1 + c1*d2 - c2*d1;
-       float j_n = a1*c2 - b1*d2 + a2*c1 + b2*d1;
-       float k_n = a1*d2 + b1*c2 - b2*c1 + a2*d1;
-
-       return Quaternion(r_n, i_n, j_n, k_n);
-}
-
-std::ostream& operator<<(std::ostream& os, const Quaternion& q)
-{
-       os << q[0] << " " << q[1] << " " << q[2] << " " << q[3];
-       os << " " <<q.theta*180/M_PI << " " << q.w;
-       return os;
-}
diff --git a/lib/Airways/MathLib/Quaternion.h b/lib/Airways/MathLib/Quaternion.h
deleted file mode 100644 (file)
index 9cef552..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/**
- * Class that represents a Quaternion
- * Author: Alfredo Morales Pinzón
- * Date: October 7, 2014
- */
-
-#ifndef __Quaternion_h__
-#define __Quaternion_h__
-
-//-----------------
-// C++
-//-----------------
-#include <math.h>
-
-//-----------------
-// OWN
-//-----------------
-#include <Airways/MathLib/TempAirwaysAppli_MathLib_Export.h>
-#include "vec3.h"
-
-// Namespaces
-using namespace std;
-
-//------------------------------------------------------------------------------
-// Class that represents a Quaterion with all its operations
-//------------------------------------------------------------------------------
-class TempAirwaysAppli_MathLib_EXPORT Quaternion
-{
-public:
-
-       //------------------------------------------------------------
-       //Builder
-       //------------------------------------------------------------
-
-       /*
-        * Class builder
-        */
-       Quaternion( );
-
-       /*
-        * Class builder using two vectors
-        * @param v1 is the first vector
-        * @param v2 is the second vector
-        */
-       Quaternion(Vec3 v1, Vec3 v2);
-
-       /*
-        * Class builder using theta and w vector
-        * @param nTheta is the theta angle
-        * @param nW is the w vector
-        */
-       Quaternion(float nTheta, Vec3 nW);
-
-       /*
-        * Class builder using r and im
-        * @param nR in the real part of the quaternion
-        * @param nI, nJ and nK are the imaginary parts of the quaternion
-        */
-       Quaternion(float nR, float nI, float nJ, float nK);
-
-       //------------------------------------------------------------
-       //Destructor
-       //------------------------------------------------------------
-
-       ~Quaternion();
-
-       //------------------------------------------------------------
-       //Public methods
-       //------------------------------------------------------------
-
-       /**
-        * Method that returns the real (r) component
-        * @return the r component
-        */
-       float getR();
-
-       /**
-        * Method that returns the i component
-        * @return the i component
-        */
-       float getI();
-
-       /**
-        * Method that returns the j component
-        * @return the j component
-        */
-       float getJ();
-
-       /**
-        * Method that returns the k component
-        * @return the k component
-        */
-       float getK();
-
-       /**
-        * Method that returns the w vector
-        * @return the w vector
-        */
-       Vec3 getW();
-
-       /**
-        * Method that returns the conjugate of the quaternion
-        * @return the conjugate of the quaternion
-        */
-       Quaternion conjugate( );
-
-       /**
-        * Method that returns a vector transformed by the quaternion
-        * @param vector to be rotated
-        * @return the transformed vector
-        */
-       Vec3 rotateVector(Vec3 vector);
-
-       //------------------------------------------------------------
-       //Operators
-       //------------------------------------------------------------
-
-       /*
-        * Definition of operator *
-        * @param is the quaternion to be multiplied with
-        * @return the multiplication quaternion
-        */
-       Quaternion operator*(Quaternion q);
-
-       /**
-        * Definition of operator []
-        * @param Position of the quanternion to be returned. Position 0 corresponds
-        * to the real component and 1, 2, and 3 to the complex components.
-        * @param The value on the specified position is returned.
-        *
-        */
-       const float& operator[](unsigned int i) const;
-
-       /**
-        * Operator to print
-        */
-       friend std::ostream& operator<<(std::ostream& os, const Quaternion& coord);
-
-
-private:
-
-       //------------------------------------------------------------
-       //Private methods
-       //------------------------------------------------------------
-
-
-       //------------------------------------------------------------
-       //Atributes
-       //------------------------------------------------------------
-
-       /**
-        * Real part of the quaternion
-        */
-       float r;
-
-       /**
-        * Angle between vectors
-        */
-       float theta;
-
-       /**
-        * Rotation vector
-        */
-       Vec3 w;
-
-       /**
-        * Vector the quaternion
-        */
-       Vec3 im;
-
-};
-
-//------------------------------------------------------------------------------
-#endif
diff --git a/lib/Airways/MathLib/vec3.cxx b/lib/Airways/MathLib/vec3.cxx
deleted file mode 100644 (file)
index ca35977..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-#include "vec3.h"
-
-
-Vec3::Vec3() : x(0.0), y(0.0), z(0.0)
-{
-}
-
-Vec3::Vec3(const float& x, const float& y, const float& z)
-{
-       this->x = x;
-       this->y = y;
-       this->z = z;
-}
-
-const float* Vec3::GetVec3() const
-{
-       float* ret = new float[3];
-       ret[0] = this->x;
-       ret[1] = this->y;
-       ret[2] = this->z;
-       return ret;
-}
-
-float* Vec3::GetVec3()
-{
-       float* ret = new float[3];
-       ret[0] = this->x;
-       ret[1] = this->y;
-       ret[2] = this->z;
-       return ret;
-}
-
-Vec3& Vec3::operator=(const Vec3& vec)
-{
-       this->x = vec.x;
-       this->y = vec.y;
-       this->z = vec.z;
-       return *this;
-}
-
-float& Vec3::operator[](unsigned int i)
-{
-       return (i == 0 ? x : i == 1 ? y : z);
-}
-
-const float& Vec3::operator[](unsigned int i) const
-{
-       return (i == 0 ? this->x : i == 1 ? this->y : this->z);
-}
-
-Vec3 Vec3::operator+() const
-{
-       return *this;
-}
-
-Vec3 Vec3::operator-() const
-{
-       return Vec3(-this->x, -this->y, -this->z);
-}
-
-Vec3& Vec3::operator+=(const Vec3& b)
-                                                                                               {
-       this->x += b.x;
-       this->y += b.y;
-       this->z += b.z;
-       return *this;
-                                                                                               }
-
-Vec3& Vec3::operator-=(const Vec3& b)
-                                                                                               {
-       this->x -= b.x;
-       this->y -= b.y;
-       this->z -= b.z;
-       return *this;
-                                                                                               }
-
-Vec3& Vec3::operator*=(const float& k)
-                                                                                               {
-       this->x *= k;
-       this->y *= k;
-       this->z *= k;
-       return *this;
-                                                                                               }
-
-Vec3& Vec3::operator/=(const float& k)
-                                                                                               {
-       this->x /= k;
-       this->y /= k;
-       this->z /= k;
-       return *this;
-                                                                                               }
-
-Vec3 Vec3::operator+(const Vec3& b)
-{
-       return Vec3(this->x + b.x, this->y + b.y, this->z + b.z);
-}
-
-Vec3 Vec3::operator-(const Vec3& b)
-{
-       return Vec3(this->x - b.x, this->y - b.y, this->z - b.z);
-}
-
-Vec3 Vec3::operator*(const float& k)
-{
-       return Vec3(this->x * k, this->y * k, this->z * k);
-}
-
-Vec3 Vec3::operator/(const float& k)
-{
-       return Vec3(this->x / k, this->y / k, this->z / k);
-}
-
-bool Vec3::operator==(const Vec3& b) const
-{
-       //double epsilon = std::numeric_limits<double>::epsilon();
-       //return (fabs(this->x - b.x) <= epsilon) && (fabs(this->y - b.y) <= epsilon)
-                       //&& (fabs(this->z - b.z) <= epsilon);
-       return this->x == b.x && this->y == b.y && this->z == b.z;
-}
-
-bool Vec3::operator!=(const Vec3& b) const
-                                                                                               {
-       return (!(*this == b));
-                                                                                               }
-
-bool Vec3::operator<(const Vec3& b) const
-{
-       if(this->x < b.x)
-               return true;
-       else if(this->x > b.x)
-               return false;
-       else
-       {
-               if(this->y < b.y)
-                       return true;
-               else if(this->y > b.y)
-                       return false;
-               else
-               {
-                       if(this->z < b.z)
-                               return true;
-                       return false;
-               }
-       }
-}
-
-bool Vec3::operator>(const Vec3& b)
-{
-       if(this->x > b.x)
-               return true;
-       else if(this->x < b.x)
-               return false;
-       else
-       {
-               if(this->y > b.y)
-                       return true;
-               else if(this->y < b.y)
-                       return false;
-               else
-               {
-                       if(this->z > b.z)
-                               return true;
-                       return false;
-               }
-       }
-}
-
-float Vec3::Norm() const
-{
-       return sqrt(this->x * this->x + this->y * this->y + this->z * this->z);
-}
-
-void Vec3::Normalize()
-{
-       float norm = sqrt(this->x * this->x + this->y * this->y + this->z * this->z);
-       this->x = this->x / norm;
-       this->y = this->y / norm;
-       this->z = this->z / norm;
-}
-
-void Vec3::set(const float& x, const float& y, const float& z)
-{
-       this->x = x;
-       this->y = y;
-       this->z = z;
-}
-
-float Vec3::Dot(const Vec3& b) const
-{
-       return (this->x * b.x + this->y * b.y + this->z * b.z);
-}
-
-Vec3 Vec3::Orthogonal(const Vec3& b) const
-{
-       Vec3 u = Vec3(fabs(b.x), fabs(b.y), fabs(b.z));
-       int i = 0;
-       int j = 1;
-       if ((u.x > u.y) && (u.z > u.y))
-               j = 2;
-       else
-       {
-               i = 1;
-               j = 2;
-               if (u.x > u.z)
-                       j = 0;
-       }
-       u = Vec3();
-       u[i] = b[j];
-       u[j] = -b[i];
-       return u;
-}
-
-Vec3 Vec3::Cross(const Vec3& b) const
-{
-       return Vec3(this->y * b.z - this->z * b.y, this->z * b.x - this->x * b.z,
-                       this->x * b.y - this->y * b.x);
-}
-
-
-float Vec3::EculideanDistance(const Vec3& b) const
-{
-       return sqrt(
-                       pow(this->x - b.x, 2.0) + pow(this->y - b.y, 2.0)
-                       + pow(this->z - b.z, 2.0));
-}
-
-std::ostream&
-operator<<(std::ostream& os, const Vec3& coord)
-{
-       os << coord[0] << "  " << coord[1] << "  " << coord[2];
-       return os;
-}
-
diff --git a/lib/Airways/MathLib/vec3.h b/lib/Airways/MathLib/vec3.h
deleted file mode 100644 (file)
index 6adbe42..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-/**
- * Class that models a vector in 3D
- * Author: Diego Cáceres
- * Modifications by: Alfredo Morales Pinzón
- * Date modifications: Octobre 7, 2014
- */
-#ifndef VEC3_H
-#define VEC3_H
-
-#include <Airways/MathLib/TempAirwaysAppli_MathLib_Export.h>
-#include <cmath>
-#include <iostream>
-#include <limits>       // std::numeric_limits
-
-//------------------------------------------------------------------------------
-/**
- * @brief The Vec3 class that represents a vector in 3D
- */
-class TempAirwaysAppli_MathLib_EXPORT Vec3
-{
-private:
-       float x, y, z; //!< Coordinates
-public:
-       //----------------------------------------------------------------------------
-       /**
-        * @brief Vec3
-        */
-       Vec3();
-       //----------------------------------------------------------------------------
-       /**
-        * @brief Vec3
-        * @param x
-        * @param y
-        * @param z
-        */
-       Vec3(const float& x, const float& y, const float& z);
-       //----------------------------------------------------------------------------
-       //Getters
-       //----------------------------------------------------------------------------
-       /**
-        * @brief GetVec3
-        * @return
-        */
-       const float* GetVec3() const;
-       //----------------------------------------------------------------------------
-       /**
-        * @brief GetVec3
-        * @return
-        */
-       float* GetVec3();
-       //----------------------------------------------------------------------------
-       /**
-        * @brief Norm
-        * @return
-        */
-       float Norm() const;
-
-       /**
-        * Method that normalizes the vector. v = v/|v|
-        */
-       void Normalize();
-
-       /**
-        * Method that sets all the values
-        */
-       void set(const float& x, const float& y, const float& z);
-
-       /**
-        * @brief Dot
-        * @param b
-        * @return
-        */
-       float Dot(const Vec3& b) const;
-       //----------------------------------------------------------------------------
-       /**
-        * @brief Orthogonal
-        * @param b
-        * @return
-        */
-       Vec3 Orthogonal(const Vec3& b) const;
-       //----------------------------------------------------------------------------
-       /**
-        * @brief Cross
-        * @param b
-        * @return
-        */
-       Vec3 Cross(const Vec3& b) const;
-       //----------------------------------------------------------------------------
-       /**
-        * @brief EculideanDistance between two points
-        * @param b
-        * @return
-        */
-       float EculideanDistance(const Vec3& b) const;
-       //----------------------------------------------------------------------------
-       //Operator Overloads
-       //----------------------------------------------------------------------------
-       /**
-        * @brief The copy operator
-        * @param vec
-        * @return
-        */
-       Vec3& operator=(const Vec3& vec);
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator []
-        * @param i
-        * @return
-        */
-       float& operator[](unsigned int i);
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator []
-        * @param i
-        * @return
-        */
-       const float& operator[](unsigned int i) const;
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator +
-        * @return
-        */
-       Vec3 operator+() const;
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator -
-        * @return
-        */
-       Vec3 operator-() const;
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator +=
-        * @param b
-        * @return
-        */
-       Vec3& operator+=(const Vec3& b);
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator -=
-        * @param b
-        * @return
-        */
-       Vec3& operator-=(const Vec3& b);
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator *=
-        * @param k
-        * @return
-        */
-       Vec3& operator*=(const float& k);
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator /=
-        * @param k
-        * @return
-        */
-       Vec3& operator/=(const float& k);
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator +
-        * @param b
-        * @return
-        */
-       Vec3 operator+(const Vec3& b);
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator -
-        * @param b
-        * @return
-        */
-       Vec3 operator-(const Vec3& b);
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator *
-        * @param k
-        * @return
-        */
-       Vec3 operator*(const float& k);
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator /
-        * @param k
-        * @return
-        */
-       Vec3 operator/(const float& k);
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator ==
-        * @param b
-        * @return
-        */
-       bool operator==(const Vec3& b) const;
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator !=
-        * @param b
-        * @return
-        */
-       bool operator!=(const Vec3& b) const;
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator <
-        * @param b
-        * @return
-        */
-       bool operator<(const Vec3& b) const;
-       //----------------------------------------------------------------------------
-       /**
-        * @brief operator >
-        * @param b
-        * @return
-        */
-       bool operator>(const Vec3& b);
-       //----------------------------------------------------------------------------
-       friend std::ostream& operator<<(std::ostream& os, const Vec3& coord);
-       //----------------------------------------------------------------------------
-
-};
-//------------------------------------------------------------------------------
-
-#endif // VEC3_H
diff --git a/lib/Airways/fpa2Airways/Converter.h b/lib/Airways/fpa2Airways/Converter.h
deleted file mode 100644 (file)
index 13e31b2..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef __AIRWAYS__FPA2AIRWAYS__CONVERTER__H__
-#define __AIRWAYS__FPA2AIRWAYS__CONVERTER__H__
-
-#include <itkProcessObject.h>
-#include <itkSimpleDataObjectDecorator.h>
-
-namespace fpa2Airways
-{
-  /**
-   */
-  template< class _TSkeleton, class _TAirways >
-  class Converter
-    : public itk::ProcessObject
-  {
-  public:
-    typedef Converter                       Self;
-    typedef itk::ProcessObject              Superclass;
-    typedef itk::SmartPointer< Self >       Pointer;
-    typedef itk::SmartPointer< const Self > ConstPointer;
-
-    typedef _TSkeleton TSkeleton;
-    typedef _TAirways  TAirways; 
-    typedef itk::SimpleDataObjectDecorator< _TAirways* > TOutput;
-
-  public:
-    itkNewMacro( Self );
-    itkTypeMacro( Converter, itk::ProcessObject );
-
-  public:
-    void SetInput( const TSkeleton* sk );
-    TSkeleton* GetInput( );
-    const TSkeleton* GetInput( ) const;
-    TAirways* GetOutput( );
-    const TAirways* GetOutput( ) const;
-
-  protected:
-    Converter( );
-    virtual ~Converter( );
-
-    virtual void GenerateData( ) ITK_OVERRIDE;
-
-  private:
-    // Purposely not implemented.
-    Converter( const Self& );
-    Self& operator=( const Self& );
-  };
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION 
-#include <Airways/fpa2Airways/Converter.hxx> 
-#endif // ITK_MANUAL_INSTANTIATION 
-
-#endif // __AIRWAYS__FPA2AIRWAYS__CONVERTER__H__
-
-// eof - $RCSfile$
diff --git a/lib/Airways/fpa2Airways/Converter.hxx b/lib/Airways/fpa2Airways/Converter.hxx
deleted file mode 100644 (file)
index e3a564e..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-#ifndef __AIRWAYS__FPA2AIRWAYS__CONVERTER__HXX__
-#define __AIRWAYS__FPA2AIRWAYS__CONVERTER__HXX__
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton, class _TAirways >
-void fpa2Airways::Converter< _TSkeleton, _TAirways >::
-SetInput( const _TSkeleton* sk )
-{
-  this->itk::ProcessObject::SetNthInput( 0, const_cast< _TSkeleton* >( sk ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton, class _TAirways >
-_TSkeleton* fpa2Airways::Converter< _TSkeleton, _TAirways >::
-GetInput( )
-{
-  return(
-    dynamic_cast< _TSkeleton* >( this->itk::ProcessObject::GetInput( 0 ) )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton, class _TAirways >
-const _TSkeleton* fpa2Airways::Converter< _TSkeleton, _TAirways >::
-GetInput( ) const
-{
-  return(
-    dynamic_cast< const _TSkeleton* >(
-      this->itk::ProcessObject::GetInput( 0 )
-      )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton, class _TAirways >
-_TAirways* fpa2Airways::Converter< _TSkeleton, _TAirways >::
-GetOutput( )
-{
-  auto o = dynamic_cast< _TAirways* >(
-    this->itk::ProcessObject::GetOutput( 0 )
-    );
-  return( o->Get( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton, class _TAirways >
-const _TAirways* fpa2Airways::Converter< _TSkeleton, _TAirways >::
-GetOutput( ) const
-{
-  auto o = dynamic_cast< const _TAirways* >(
-    this->itk::ProcessObject::GetOutput( 0 )
-    );
-  return( o->Get( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton, class _TAirways >
-fpa2Airways::Converter< _TSkeleton, _TAirways >::
-Converter( )
-  : Superclass( )
-{
-  this->SetNumberOfRequiredInputs( 1 );
-  this->SetNumberOfRequiredOutputs( 1 );
-  typename TOutput::Pointer o = TOutput::New( );
-  this->itk::ProcessObject::SetNthOutput( 0, o.GetPointer( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton, class _TAirways >
-fpa2Airways::Converter< _TSkeleton, _TAirways >::
-~Converter( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton, class _TAirways >
-void fpa2Airways::Converter< _TSkeleton, _TAirways >::
-GenerateData( )
-{
-}
-
-#endif // __AIRWAYS__FPA2AIRWAYS__CONVERTER__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
deleted file mode 100644 (file)
index 0afa2df..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-IF(BUILD_TempAirwaysAppli)
-  SUBDIRS(
-    Airways
-    )
-ENDIF(BUILD_TempAirwaysAppli)
-IF(BUILD_PLUGINS)
-  SUBDIRS(
-    fpa_Instances
-    )
-ENDIF(BUILD_PLUGINS)
-
-## eof - $RCSfile$
diff --git a/lib/fpa/Base/Algorithm.h b/lib/fpa/Base/Algorithm.h
deleted file mode 100644 (file)
index 94d1ddd..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-#ifndef __FPA__BASE__ALGORITHM__H__
-#define __FPA__BASE__ALGORITHM__H__
-
-#include <map>
-#include <utility>
-#include <vector>
-#include <fpa/Base/Events.h>
-
-namespace fpa
-{
-  namespace Base
-  {
-    /**
-     * Base front propagation algorithm. From a series of start seeds with
-     * costs, a priority queue is filled and emptied updating costs. Each
-     * vertex could be marked as "visited", "in the front", "not yet there"
-     * or "freezed".
-     *
-     * @param V  Vertex type.
-     * @param C  Vertex value type.
-     * @param R  Result value type.
-     * @param S  Space type where vertices are.
-     * @param VC Vertex lexicographical compare.
-     * @param B  Base class for this algorithm. It should be any itk-based
-     *           filter (itk::ProcessObject).
-     *
-     */
-    template< class V, class C, class R, class S, class VC, class B >
-    class Algorithm
-      : public B
-    {
-    public:
-      typedef Algorithm                       Self;
-      typedef B                               Superclass;
-      typedef itk::SmartPointer< Self >       Pointer;
-      typedef itk::SmartPointer< const Self > ConstPointer;
-
-      typedef V  TVertex;
-      typedef C  TValue;
-      typedef R  TResult;
-      typedef S  TSpace;
-      typedef VC TVertexCompare;
-
-      fpa_Base_NewEvent( TStartEvent );
-      fpa_Base_NewEvent( TStartLoopEvent );
-      fpa_Base_NewEvent( TStartBacktrackingEvent );
-      fpa_Base_NewEvent( TEndEvent );
-      fpa_Base_NewEvent( TEndLoopEvent );
-      fpa_Base_NewEvent( TEndBacktrackingEvent );
-      fpa_Base_NewEventWithVertex( TAliveEvent, TVertex );
-      fpa_Base_NewEventWithVertex( TFrontEvent, TVertex );
-      fpa_Base_NewEventWithVertex( TFreezeEvent, TVertex );
-      fpa_Base_NewEventWithVertex( TBacktrackingEvent, TVertex );
-
-    protected:
-      typedef std::vector< TVertex >         _TVertices;
-      typedef std::pair< TVertex, bool >     _TCollision;
-      typedef std::vector< _TCollision >     _TCollisionsRow;
-      typedef std::vector< _TCollisionsRow > _TCollisions;
-
-      /**
-       */
-      enum _TNodeLabel
-      {
-        FarLabel = 0,
-        FrontLabel,
-        AliveLabel
-      };
-
-      /**
-       */
-      class _TNode
-      {
-      public:
-        _TNode( );
-        virtual ~_TNode( );
-
-      public:
-        TVertex Parent;
-        TResult Result;
-        short   FrontId;
-        char    Label;
-      };
-      typedef std::map< TVertex, _TNode, TVertexCompare > _TNodes;
-
-    public:
-      itkTypeMacro( Algorithm, B );
-
-      itkBooleanMacro( ThrowEvents );
-      itkBooleanMacro( StopAtOneFront );
-
-      itkGetConstMacro( ThrowEvents, bool );
-      itkGetConstMacro( StopAtOneFront, bool );
-
-      itkSetMacro( ThrowEvents, bool );
-      itkSetMacro( StopAtOneFront, bool );
-
-    public:
-      virtual void InvokeEvent( const itk::EventObject& e );
-      virtual void InvokeEvent( const itk::EventObject& e ) const;
-
-      void AddSeed( const TVertex& s, const TResult& r );
-      const TVertex& GetSeed( const unsigned int& id ) const;
-      void ClearSeeds( );
-      unsigned long GetNumberOfSeeds( ) const;
-
-    protected:
-      Algorithm( );
-      virtual ~Algorithm( );
-
-      // Connection with itk's pipeline
-      virtual void GenerateData( ) ITK_OVERRIDE;
-
-      // Main loop algorithm
-      virtual void _Loop( );
-
-      // Supporting methods for loop
-      virtual void _BeforeGenerateData( );
-      virtual void _AfterGenerateData( );
-      virtual void _BeforeLoop( );
-      virtual void _AfterLoop( );
-
-      // Methods to control forced stops
-      virtual bool _UpdateCollisions( const TVertex& a, const TVertex& b );
-      virtual bool _NeedToStop( ) const;
-
-      // Graph-related abstract methods
-      virtual unsigned long _NumberOfVertices( ) const = 0;
-      virtual const TValue& _VertexValue( const TVertex& v ) const = 0;
-      virtual double _Distance(
-        const TVertex& a, const TVertex& b
-        ) const = 0;
-      virtual bool _HasEdge( const TVertex& a, const TVertex& b ) const = 0;
-      virtual void _Neighborhood(
-        _TVertices& neighborhood, const TVertex& v
-        ) const = 0;
-
-      // Results-related abstract methods
-      virtual bool _ComputeNeighborResult(
-        TResult& result, const TVertex& neighbor, const TVertex& parent
-        ) const = 0;
-      virtual void _InitResults( ) = 0;
-      virtual const TResult& _Result( const TVertex& v ) const = 0;
-      virtual void _SetResult( const TVertex& v, const _TNode& n );
-
-      // Marks-related abstract methods
-      virtual _TNode& _Node( const TVertex& v );
-      virtual const _TNode& _Node( const TVertex& v ) const;
-      virtual void _InitMarks( );
-      virtual void _Mark( const TVertex& v, const _TNode& node );
-
-      // Queue-related abstract methods
-      virtual void _InitQueue( );
-      virtual bool _IsQueueEmpty( ) const = 0;
-      virtual void _QueuePush( const TVertex& v, const _TNode& n ) = 0;
-      virtual void _QueuePop( TVertex& v, _TNode& n ) = 0;
-      virtual void _QueueClear( ) = 0;
-
-    private:
-      // Purposely not implemented
-      Algorithm( const Self& other );
-      Self& operator=( const Self& other );
-
-    protected:
-      bool         m_ThrowEvents;
-      bool         m_StopAtOneFront;
-      _TNodes      m_Seeds;
-      _TVertices   m_SeedVertices;
-      _TNodes      m_Marks;
-      _TCollisions m_Collisions;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Base/Algorithm.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__BASE__ALGORITHM__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/Algorithm.hxx b/lib/fpa/Base/Algorithm.hxx
deleted file mode 100644 (file)
index 3530787..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-#ifndef __FPA__BASE__ALGORITHM__HXX__
-#define __FPA__BASE__ALGORITHM__HXX__
-
-#include <queue>
-#include <itkProcessObject.h>
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-fpa::Base::Algorithm< V, C, R, S, VC, B >::_TNode::
-_TNode( )
-  : Result( TResult( 0 ) ),
-    FrontId( -1 ),
-    Label( Self::FarLabel )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-fpa::Base::Algorithm< V, C, R, S, VC, B >::_TNode::
-~_TNode( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-InvokeEvent( const itk::EventObject& e )
-{
-  if( this->m_ThrowEvents )
-    this->Superclass::InvokeEvent( e );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-InvokeEvent( const itk::EventObject& e ) const
-{
-  if( this->m_ThrowEvents )
-    this->Superclass::InvokeEvent( e );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-AddSeed( const TVertex& s, const TResult& r )
-{
-  _TNode ns;
-  ns.Parent = s;
-  ns.Result = r;
-  ns.FrontId = this->m_SeedVertices.size( );
-  ns.Label = Self::FrontLabel;
-  this->m_Seeds[ s ] = ns;
-  this->m_SeedVertices.push_back( s );
-  this->Modified( );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-const typename fpa::Base::Algorithm< V, C, R, S, VC, B >::
-TVertex& fpa::Base::Algorithm< V, C, R, S, VC, B >::
-GetSeed( const unsigned int& id ) const
-{
-  return( this->m_SeedVertices[ id ] );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-ClearSeeds( )
-{
-  this->m_Seeds.clear( );
-  this->m_SeedVertices.clear( );
-  this->Modified( );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-unsigned long fpa::Base::Algorithm< V, C, R, S, VC, B >::
-GetNumberOfSeeds( ) const
-{
-  return( this->m_Seeds.size( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-fpa::Base::Algorithm< V, C, R, S, VC, B >::
-Algorithm( )
-  : Superclass( ),
-    m_ThrowEvents( false ),
-    m_StopAtOneFront( false )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-fpa::Base::Algorithm< V, C, R, S, VC, B >::
-~Algorithm( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-GenerateData( )
-{
-  unsigned long N = this->m_Seeds.size( );
-  if( N == 0 )
-    return;
-
-  this->InvokeEvent( TStartEvent( ) );
-  this->_BeforeGenerateData( );
-
-  this->m_Collisions.clear( );
-  this->m_Collisions.
-    resize( N, _TCollisionsRow( N, _TCollision( TVertex( ), false ) ) );
-  this->_InitResults( );
-  this->_InitMarks( );
-  this->_InitQueue( );
-  this->_Loop( );
-  this->_AfterGenerateData( );
-  this->InvokeEvent( TEndEvent( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_Loop( )
-{
-  this->InvokeEvent( TStartLoopEvent( ) );
-  this->_BeforeLoop( );
-  while( !( this->_IsQueueEmpty( ) ) )
-  {
-    // Get next candidate
-    TVertex vertex;
-    _TNode node;
-    this->_QueuePop( vertex, node );
-    if( this->_Node( vertex ).Label == Self::AliveLabel )
-      continue;
-
-    // Mark it as "Alive" and update final result
-    node.Label = Self::AliveLabel;
-    this->_Mark( vertex, node );
-    this->_SetResult( vertex, node );
-    this->InvokeEvent( TAliveEvent( vertex, node.FrontId ) );
-
-    // Check if a forced stop condition arises
-    if( !( this->_NeedToStop( ) ) )
-    {
-      // Compute neighborhood
-      _TVertices neighborhood;
-      this->_Neighborhood( neighborhood, vertex );
-
-      // Iterate over neighbors
-      typename _TVertices::iterator nIt = neighborhood.begin( );
-      while( nIt != neighborhood.end( ) )
-      {
-        _TNode neighbor = this->_Node( *nIt );
-        if( neighbor.Label == Self::AliveLabel )
-        {
-          // Update collisions
-          if( this->_UpdateCollisions( vertex, *nIt ) )
-          {
-            this->_QueueClear( );
-            nIt = neighborhood.end( );
-            continue;
-
-          } // fi
-        }
-        else
-        {
-          // Add new candidate to queue
-          if( this->_ComputeNeighborResult( neighbor.Result, *nIt, vertex ) )
-          {
-            neighbor.FrontId = node.FrontId;
-            neighbor.Parent = vertex;
-            neighbor.Label = Self::FrontLabel;
-            this->_QueuePush( *nIt, neighbor );
-            this->_Mark( *nIt, neighbor );
-            this->InvokeEvent( TFrontEvent( *nIt, node.FrontId ) );
-          }
-          else
-            this->InvokeEvent( TFreezeEvent( *nIt, node.FrontId ) );
-
-        } // fi
-        ++nIt;
-
-      } // elihw
-    }
-    else
-      this->_QueueClear( );
-
-  } // elihw
-  this->_AfterLoop( );
-  this->InvokeEvent( TEndLoopEvent( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_BeforeGenerateData( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_AfterGenerateData( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_BeforeLoop( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_AfterLoop( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-bool fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_UpdateCollisions( const TVertex& a, const TVertex& b )
-{
-  bool ret = false;
-  _TNode na = this->_Node( a );
-  _TNode nb = this->_Node( b );
-  long fa = na.FrontId;
-  long fb = nb.FrontId;
-
-  if( fa != fb )
-  {
-    // Mark collision, if it is new
-    bool exists = this->m_Collisions[ fa ][ fb ].second;
-    exists     &= this->m_Collisions[ fb ][ fa ].second;
-        
-    if( !exists )
-    {
-      this->m_Collisions[ fa ][ fb ].first = a;
-      this->m_Collisions[ fa ][ fb ].second = true;
-      this->m_Collisions[ fb ][ fa ].first = b;
-      this->m_Collisions[ fb ][ fa ].second = true;
-
-      // Stop if one front is desired
-      if( this->m_StopAtOneFront )
-      {
-        // Perform a depth-first iteration on front graph
-        unsigned long N = this->GetNumberOfSeeds( );
-        unsigned long count = 0;
-        std::vector< bool > m( N, false );
-        std::queue< unsigned long > q;
-        q.push( 0 );
-        while( !q.empty( ) )
-        {
-          unsigned long f = q.front( );
-          q.pop( );
-
-          if( m[ f ] )
-            continue;
-          m[ f ] = true;
-          count++;
-
-          for( unsigned int n = 0; n < N; ++n )
-            if( this->m_Collisions[ f ][ n ].second && !m[ n ] )
-              q.push( n );
-
-        } // elihw
-        ret = ( count == N );
-
-      } // fi
-
-    } // fi
-
-  } // fi
-  return( ret );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-bool fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_NeedToStop( ) const
-{
-  return( false );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-typename fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_TNode& fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_Node( const TVertex& v )
-{
-  typename _TNodes::iterator vIt = this->m_Marks.find( v );
-  if( vIt == this->m_Marks.end( ) )
-  {
-    _TNode new_node;
-    new_node.Parent = v;
-    new_node.Result = TResult( 0 );
-    new_node.FrontId = -1;
-    new_node.Label = Self::FarLabel;
-    this->m_Marks[ v ] = new_node;
-    vIt = this->m_Marks.find( v );
-
-  } // fi
-  return( vIt->second );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_SetResult( const TVertex& v, const _TNode& n )
-{
-  // Do nothing at this hierarchy level
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-const typename fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_TNode& fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_Node( const TVertex& v ) const
-{
-  typename _TNodes::const_iterator vIt = this->m_Marks.find( v );
-  return( vIt->second );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_InitMarks( )
-{
-  this->m_Marks.clear( );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_Mark( const TVertex& v, const _TNode& node )
-{
-  this->m_Marks[ v ] = node;
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::Algorithm< V, C, R, S, VC, B >::
-_InitQueue( )
-{
-  this->_QueueClear( );
-  for(
-    typename _TNodes::const_iterator sIt = this->m_Seeds.begin( );
-    sIt != this->m_Seeds.end( );
-    sIt++
-    )
-  {
-    this->_QueuePush( sIt->first, sIt->second );
-    this->_Mark( sIt->first, sIt->second );
-
-  } // rof
-}
-
-#endif // __FPA__BASE__ALGORITHM__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/Dijkstra.h b/lib/fpa/Base/Dijkstra.h
deleted file mode 100644 (file)
index 115447b..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-#ifndef __FPA__BASE__DIJKSTRA__H__
-#define __FPA__BASE__DIJKSTRA__H__
-
-#include <vector>
-#include <fpa/Base/Algorithm.h>
-#include <fpa/Base/MinimumSpanningTree.h>
-
-namespace fpa
-{
-  namespace Base
-  {
-    /**
-     * Dijkstra is a front propagation algorithm that minimizes costs
-     *
-     * @param V   Vertex type.
-     * @param C   Vertex value type.
-     * @param R   Result value type.
-     * @param S   Space type where vertices are.
-     * @param VC  Vertex lexicographical compare.
-     * @param MST Minimum spanning tree type.
-     * @param B   Base class for this algorithm. It should be any itk-based
-     *            filter (itk::ProcessObject).
-     *
-     */
-    template< class V, class C, class R, class S, class VC, class MST, class B >
-    class Dijkstra
-      : public Algorithm< V, C, R, S, VC, B >
-    {
-    public:
-      typedef Dijkstra                         Self;
-      typedef Algorithm< V, C, R, S, VC, B >   Superclass;
-      typedef itk::SmartPointer< Self >        Pointer;
-      typedef itk::SmartPointer< const Self >  ConstPointer;
-
-      typedef MST TMinimumSpanningTree;
-      typedef typename Superclass::TVertex        TVertex;
-      typedef typename Superclass::TValue         TValue;
-      typedef typename Superclass::TResult        TResult;
-      typedef typename Superclass::TSpace         TSpace;
-      typedef typename Superclass::TVertexCompare TVertexCompare;
-
-      typedef typename Superclass::TStartEvent     TStartEvent;
-      typedef typename Superclass::TStartLoopEvent TStartLoopEvent;
-      typedef typename Superclass::TEndEvent       TEndEvent;
-      typedef typename Superclass::TEndLoopEvent   TEndLoopEvent;
-      typedef typename Superclass::TAliveEvent     TAliveEvent;
-      typedef typename Superclass::TFrontEvent     TFrontEvent;
-      typedef typename Superclass::TFreezeEvent    TFreezeEvent;
-
-      typedef typename Superclass::TStartBacktrackingEvent TStartBacktrackingEvent;
-      typedef typename Superclass::TEndBacktrackingEvent TEndBacktrackingEvent;
-      typedef typename Superclass::TBacktrackingEvent TBacktrackingEvent;
-
-    protected:
-      typedef typename Superclass::_TVertices      _TVertices;
-      typedef typename Superclass::_TCollision     _TCollision;
-      typedef typename Superclass::_TCollisionsRow _TCollisionsRow;
-      typedef typename Superclass::_TCollisions    _TCollisions;
-      typedef typename Superclass::_TNode          _TNode;
-      typedef typename Superclass::_TNodes         _TNodes;
-
-      struct _TQueueNode
-      {
-        TVertex Vertex;
-        _TNode  Node;
-
-        // Make the min-heap behave as a max-heap
-        bool operator<( const _TQueueNode& other ) const
-          { return( other.Node.Result < this->Node.Result ); }
-      };
-      typedef std::vector< _TQueueNode > _TQueue;
-
-    public:
-      itkTypeMacro( Dijkstra, Algorithm );
-
-      itkBooleanMacro( LocalCosts );
-      itkBooleanMacro( FillNodeQueue );
-      itkGetConstMacro( LocalCosts, bool );
-      itkGetConstMacro( FillNodeQueue, bool );
-      itkSetMacro( LocalCosts, bool );
-      itkSetMacro( FillNodeQueue, bool );
-
-    public:
-      TMinimumSpanningTree* GetMinimumSpanningTree( );
-      const TMinimumSpanningTree* GetMinimumSpanningTree( ) const;
-      void GraftMinimumSpanningTree( itk::DataObject* obj );
-
-    protected:
-      Dijkstra( );
-      virtual ~Dijkstra( );
-
-      virtual TResult _Cost( const TVertex& v, const TVertex& p ) const = 0;
-
-      virtual void _BeforeGenerateData( ) ITK_OVERRIDE;
-
-      // Results-related abstract methods
-      virtual bool _ComputeNeighborResult(
-        TResult& result, const TVertex& neighbor, const TVertex& parent
-        ) const ITK_OVERRIDE;
-      virtual void _SetResult( const TVertex& v, const _TNode& n ) ITK_OVERRIDE;
-
-      // Queue-related abstract methods
-      virtual bool _IsQueueEmpty( ) const ITK_OVERRIDE;
-      virtual void _QueuePush( const TVertex& v, const _TNode& n ) ITK_OVERRIDE;
-      virtual void _QueuePop( TVertex& v, _TNode& n ) ITK_OVERRIDE;
-      virtual void _QueueClear( ) ITK_OVERRIDE;
-
-    private:
-      // Purposely not implemented
-      Dijkstra( const Self& other );
-      Self& operator=( const Self& other );
-
-    protected:
-      bool m_LocalCosts;
-      bool m_FillNodeQueue;
-      _TQueue m_Queue;
-      unsigned int m_MSTIdx;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Base/Dijkstra.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__BASE__DIJKSTRA__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/Dijkstra.hxx b/lib/fpa/Base/Dijkstra.hxx
deleted file mode 100644 (file)
index bad348b..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-#ifndef __FPA__BASE__DIJKSTRA__HXX__
-#define __FPA__BASE__DIJKSTRA__HXX__
-
-#include <algorithm>
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-typename fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-TMinimumSpanningTree* fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-GetMinimumSpanningTree( )
-{
-  return(
-    dynamic_cast< TMinimumSpanningTree* >(
-      this->itk::ProcessObject::GetOutput( this->m_MSTIdx )
-      )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-const typename fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-TMinimumSpanningTree* fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-GetMinimumSpanningTree( ) const
-{
-  return(
-    dynamic_cast< const TMinimumSpanningTree* >(
-      this->itk::ProcessObject::GetOutput( this->m_MSTIdx )
-      )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-void fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-GraftMinimumSpanningTree( itk::DataObject* obj )
-{
-  TMinimumSpanningTree* mst = dynamic_cast< TMinimumSpanningTree* >( obj );
-  if( mst != NULL )
-    this->GraftNthOutput( this->m_MSTIdx, mst );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-Dijkstra( )
-  : Superclass( ),
-    m_LocalCosts( false ),
-    m_FillNodeQueue( false )
-{
-  this->m_MSTIdx = this->GetNumberOfRequiredOutputs( );
-  this->SetNumberOfRequiredOutputs( this->m_MSTIdx + 1 );
-  this->itk::ProcessObject::SetNthOutput(
-    this->m_MSTIdx, TMinimumSpanningTree::New( )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-~Dijkstra( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-void fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-_BeforeGenerateData( )
-{
-  this->Superclass::_BeforeGenerateData( );
-  this->GetMinimumSpanningTree( )->SetFillNodeQueue( this->m_FillNodeQueue );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-bool fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-_ComputeNeighborResult(
-  TResult& result, const TVertex& neighbor, const TVertex& parent
-  ) const
-{
-  result  = this->_Cost( neighbor, parent );
-  result *= TResult( this->_Distance( neighbor, parent ) );
-
-  // WARNING: Dijkstra does not work on negative values!
-  if( result >= TResult( 0 ) )
-  {
-    _TNode pn = this->_Node( parent );
-    if( pn.Label == Self::AliveLabel && !this->m_LocalCosts )
-      result += pn.Result;
-    return( true );
-  }
-  else
-    return( false );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-void fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-_SetResult( const TVertex& v, const _TNode& n )
-{
-  this->GetMinimumSpanningTree( )->SetNode( v, n.Parent, n.FrontId, n.Result );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-bool fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-_IsQueueEmpty( ) const
-{
-  return( this->m_Queue.empty( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-void fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-_QueuePush( const TVertex& v, const _TNode& n )
-{
-  _TQueueNode qn;
-  qn.Vertex = v;
-  qn.Node = n;
-  this->m_Queue.push_back( qn );
-  std::push_heap( this->m_Queue.begin( ), this->m_Queue.end( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-void fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-_QueuePop( TVertex& v, _TNode& n )
-{
-  _TQueueNode qn = this->m_Queue.front( );
-  std::pop_heap( this->m_Queue.begin( ), this->m_Queue.end( ) );
-  this->m_Queue.pop_back( );
-  v = qn.Vertex;
-  n = qn.Node;
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-void fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-_QueueClear( )
-{
-  this->m_Queue.clear( );
-}
-
-#endif // __FPA__BASE__DIJKSTRA__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/Events.h b/lib/fpa/Base/Events.h
deleted file mode 100644 (file)
index 09f0637..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#ifndef __FPA__BASE__EVENTS__H__
-#define __FPA__BASE__EVENTS__H__
-
-#include <vector>
-#include <itkProcessObject.h>
-
-// -------------------------------------------------------------------------
-#define fpa_Base_NewEvent( name )                               \
-  class name                                                    \
-    : public BaseEvent                                          \
-  {                                                             \
-  public:                                                       \
-    name( ) : BaseEvent( ) { }                                  \
-    virtual ~name( ) { }                                        \
-    const char* GetEventName( ) const                           \
-    { return( "fpa::Base::##name" ); }                          \
-    bool CheckEvent( const itk::EventObject* e ) const          \
-    { return( dynamic_cast< const name* >( e ) != NULL ); }     \
-    itk::EventObject* MakeObject( ) const                       \
-    { return( new name( ) ); }                                  \
-  };
-
-// -------------------------------------------------------------------------
-#define fpa_Base_NewEventWithVertex( name, type )               \
-  class name                                                    \
-    : public BaseEventWithVertex< type >                        \
-  {                                                             \
-  public:                                                       \
-    name( ) : BaseEventWithVertex< type >( ) { }                \
-    name( const type& v, long fid )                             \
-        : BaseEventWithVertex< type >( v, fid ) { }             \
-    virtual ~name( ) { }                                        \
-    const char* GetEventName( ) const                           \
-    { return( "fpa::Base::##name" ); }                          \
-    bool CheckEvent( const itk::EventObject* e ) const          \
-    { return( dynamic_cast< const name* >( e ) != NULL ); }     \
-    itk::EventObject* MakeObject( ) const                       \
-    { return( new name( ) ); }                                  \
-  };
-
-namespace fpa
-{
-  namespace Base
-  {
-    /**
-     */
-    class BaseEvent
-      : public itk::AnyEvent
-    {
-    public:
-      BaseEvent( )
-        : itk::AnyEvent( )
-        { }
-      virtual ~BaseEvent( )
-        { }
-      const char* GetEventName( ) const
-        { return( "fpa::Base::BaseEvent" ); }
-      bool CheckEvent( const itk::EventObject* e ) const
-        { return( dynamic_cast< const BaseEvent* >( e ) != NULL ); }
-      itk::EventObject* MakeObject( ) const
-        { return( new BaseEvent( ) ); }
-    };
-
-    /**
-     */
-    template< class V >
-    class BaseEventWithVertex
-      : public BaseEvent
-    {
-    public:
-      BaseEventWithVertex( )
-        : BaseEvent( )
-        { }
-      BaseEventWithVertex( const V& v, long fid )
-        : BaseEvent( ),
-          Vertex( v ),
-          FrontId( fid )
-        { }
-      virtual ~BaseEventWithVertex( )
-        { }
-      const char* GetEventName( ) const
-        { return( "fpa::Base::BaseEventWithVertex" ); }
-      bool CheckEvent( const itk::EventObject* e ) const
-        {
-          return(
-            dynamic_cast< const BaseEventWithVertex< V >* >( e ) != NULL
-            );
-        }
-      itk::EventObject* MakeObject( ) const
-        { return( new BaseEventWithVertex< V >( ) ); }
-
-    public:
-      V Vertex;
-      long FrontId;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#endif // __FPA__BASE__EVENTS__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h b/lib/fpa/Base/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h
deleted file mode 100644 (file)
index 9a12904..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#ifndef __FPA__BASE__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__H__
-#define __FPA__BASE__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__H__
-
-#include <utility>
-#include <vector>
-#include <itkProcessObject.h>
-#include <itkSimpleDataObjectDecorator.h>
-#include <cpExtensions/DataStructures/ImageIndexesContainer.h>
-
-namespace fpa
-{
-  namespace Base
-  {
-    /**
-     */
-    template< class _TMST >
-    class ExtractEndPointsAndBifurcationsFromMinimumSpanningTree
-      : public itk::ProcessObject
-    {
-    public:
-      typedef ExtractEndPointsAndBifurcationsFromMinimumSpanningTree Self;
-      typedef itk::ProcessObject                                     Superclass;
-      typedef itk::SmartPointer< Self >                              Pointer;
-      typedef itk::SmartPointer< const Self >                        ConstPointer;
-
-      typedef _TMST  TMinimumSpanningTree;
-      typedef typename _TMST::TVertex       TVertex;
-      typedef std::pair< TVertex, TVertex > TBranch;
-      typedef std::vector< TBranch >        TBranches;
-
-      typedef
-      cpExtensions::DataStructures::ImageIndexesContainer< TVertex::Dimension >
-      TVertices;
-
-    public:
-      itkTypeMacro(
-        ExtractEndPointsAndBifurcationsFromMinimumSpanningTree,
-        itk::ProcessObject
-        );
-
-    public:
-      const TMinimumSpanningTree* GetMinimumSpanningTree( );
-      void SetMinimumSpanningTree( TMinimumSpanningTree* mst );
-
-      TVertices* GetEndPoints( );
-      TVertices* GetBifurcations( );
-      TVertices* GetCollisions( );
-
-      virtual void Update( ) ITK_OVERRIDE
-        {
-          this->GenerateData( );
-        }
-
-    protected:
-      ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( );
-      virtual ~ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( );
-
-      virtual void GenerateData( ) ITK_OVERRIDE;
-
-      virtual void _MarkSkeleton(
-        const TVertex& v, const unsigned long& l
-        ) = 0;
-      virtual void _MarkSphere(
-        const TVertex& v,
-        const double& r,
-        const unsigned long& l
-        ) = 0;
-      virtual unsigned long _Mark( const TVertex& v ) = 0;
-      virtual unsigned long _SkeletonMark( const TVertex& v ) = 0;
-      virtual double _Radius( const TVertex& v ) = 0;
-
-      virtual void _Tmp( ) = 0;
-
-    private:
-      // Purposely not implemented
-      ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( const Self& other );
-      Self& operator=( const Self& other );
-
-    protected:
-      TBranches m_Branches;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Base/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__BASE__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.hxx b/lib/fpa/Base/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.hxx
deleted file mode 100644 (file)
index 82debb4..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-#ifndef __FPA__BASE__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__HXX__
-#define __FPA__BASE__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__HXX__
-
-#include <cmath>
-#include <map>
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-const typename
-fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >::
-TMinimumSpanningTree*
-fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >::
-GetMinimumSpanningTree( )
-{
-  return(
-    dynamic_cast< const _TMST* >( this->itk::ProcessObject::GetInput( 0 ) )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-void
-fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >::
-SetMinimumSpanningTree( TMinimumSpanningTree* mst )
-{
-  this->itk::ProcessObject::SetNthInput( 0, const_cast< _TMST* >( mst ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-typename
-fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >::
-TVertices*
-fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >::
-GetEndPoints( )
-{
-  return(
-    dynamic_cast< TVertices* >( this->itk::ProcessObject::GetOutput( 0 ) )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-typename
-fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >::
-TVertices*
-fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >::
-GetBifurcations( )
-{
-  return(
-    dynamic_cast< TVertices* >( this->itk::ProcessObject::GetOutput( 1 ) )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-typename
-fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >::
-TVertices*
-fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >::
-GetCollisions( )
-{
-  return(
-    dynamic_cast< TVertices* >( this->itk::ProcessObject::GetOutput( 2 ) )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >::
-ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
-  : Superclass( )
-{
-  this->SetNumberOfRequiredInputs( 1 );
-  this->SetNumberOfRequiredOutputs( 4 );
-  typename TVertices::Pointer ep = TVertices::New( );
-  typename TVertices::Pointer bf = TVertices::New( );
-  typename TVertices::Pointer co = TVertices::New( );
-  this->itk::ProcessObject::SetNthOutput( 0, ep.GetPointer( ) );
-  this->itk::ProcessObject::SetNthOutput( 1, bf.GetPointer( ) );
-  this->itk::ProcessObject::SetNthOutput( 2, co.GetPointer( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >::
-~ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-void
-fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >::
-GenerateData( )
-{
-  typedef std::multimap< double, TVertex > _TQueue;
-  typedef std::pair< TVertex, TVertex >    _TBranch;
-  typedef std::vector< _TBranch >          _TBranches;
-  typedef typename _TQueue::value_type     _TQueueValue;
-
-  // 0. Useful objects and values
-  auto mst = this->GetMinimumSpanningTree( );
-  auto endpoints = this->GetEndPoints( );
-  auto bifurcations = this->GetBifurcations( );
-  auto collisions = this->GetCollisions( );
-  endpoints->Get( ).clear( );
-  bifurcations->Get( ).clear( );
-  collisions->Get( ).clear( );
-  this->m_Branches.clear( );
-
-  // 1. Get priority queue
-  auto& q = mst->GetNodeQueue( );
-
-  // 2. Main loop: iterate in inverse order (max-priority)
-  unsigned long label = 0;
-  for( auto qIt = q.rbegin( ); qIt != q.rend( ); ++qIt )
-  {
-    auto gCost = qIt->first;
-    auto vertex = qIt->second;
-
-    // 2.1. Check if the vertex has already been visited
-    if( this->_Mark( vertex ) > 0 || this->_SkeletonMark( vertex ) > 0 )
-      continue;
-
-    // 2.2. Get path from front seed
-    auto path = mst->GetPath( vertex );
-
-    // 2.3. Prepare new branch data and prepare new end-point
-    label++;
-    this->m_Branches.push_back( _TBranch( vertex, vertex ) );
-    endpoints->Get( ).push_back( vertex );
-
-    // 2.4. Backtracking
-    auto pIt = path.begin( );
-    TVertex last_collision;
-    bool inCollision = false;
-    while( pIt != path.end( ) )
-    {
-      auto mark = this->_SkeletonMark( *pIt );
-      if( mark > 0 && mark != label )
-      {
-        // 2.4.1. A bifurcation has been reached
-        bifurcations->Get( ).push_back( *pIt );
-
-        // Reorder labels
-        auto coll_branch = this->m_Branches[ mark - 1 ];
-        this->m_Branches[ mark - 1 ] = _TBranch( coll_branch.first, *pIt );
-        this->m_Branches[ label - 1 ] = _TBranch( qIt->second, *pIt );
-        this->m_Branches.push_back( _TBranch( *pIt, coll_branch.second ) );
-
-        // Mark skeleton (b,coll_branch_second) with the new label
-        label++;
-        while( *pIt != coll_branch.second && pIt != path.end( ) )
-        {
-          this->_MarkSkeleton( *pIt, label );
-          pIt++;
-
-        } // elihw
-        if( pIt != path.end( ) )
-          this->_MarkSkeleton( *pIt, label );
-
-        // Force inner loop termination
-        pIt = path.end( );
-      }
-      else
-      {
-        if( !inCollision )
-        {
-          mark = this->_Mark( *pIt );
-          if( mark > 0 && mark != label )
-          {
-            // 2.4.2. A collision has been reached
-            last_collision = *pIt;
-            collisions->Get( ).push_back( *pIt );
-            inCollision = true;
-          }
-          else
-          {
-            // 2.4.3. Just mark sphere and skeleton
-            double r = this->_Radius( *pIt );
-            this->_MarkSkeleton( *pIt, label );
-            this->_MarkSphere( *pIt, r, label );
-            this->m_Branches[ label - 1 ].second = *pIt;
-
-            // 2.4.4. Is this a seed? -> add it to endpoints
-            auto sIt = pIt;
-            sIt++;
-            if( sIt == path.end( ) )
-              endpoints->Get( ).push_back( *pIt );
-
-          } // fi
-
-        } // fi
-        pIt++;
-
-      } // fi
-
-    } // elihw
-
-  } // rof
-
-  // Remove illegal branches
-  auto dIt = this->m_Branches.begin( );
-  while( dIt != this->m_Branches.end( ) )
-  {
-    if( dIt->first == dIt->second )
-      dIt = this->m_Branches.erase( dIt );
-    else
-      dIt++;
-    
-  } // fi
-
-  // Finish
-  endpoints->SetReferenceImage( mst );
-  bifurcations->SetReferenceImage( mst );
-  collisions->SetReferenceImage( mst );
-}
-
-#endif // __FPA__BASE__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/ExtractPathFromMinimumSpanningTree.h b/lib/fpa/Base/ExtractPathFromMinimumSpanningTree.h
deleted file mode 100644 (file)
index 2b65112..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#ifndef __FPA__BASE__EXTRACTPATHFROMMINIMUMSPANNINGTREE__H__
-#define __FPA__BASE__EXTRACTPATHFROMMINIMUMSPANNINGTREE__H__
-
-#include <set>
-#include <itkProcessObject.h>
-#include <cpExtensions/DataStructures/PolyLineParametricPath.h>
-
-namespace fpa
-{
-  namespace Base
-  {
-    /**
-     */
-    template< class T >
-    class ExtractPathFromMinimumSpanningTree
-      : public itk::ProcessObject
-    {
-    public:
-      typedef ExtractPathFromMinimumSpanningTree Self;
-      typedef itk::ProcessObject                 Superclass;
-      typedef itk::SmartPointer< Self >          Pointer;
-      typedef itk::SmartPointer< const Self >    ConstPointer;
-
-      typedef T                   TMinimumSpanningTree;
-      typedef typename T::TVertex TVertex;
-      typedef
-      cpExtensions::DataStructures::PolyLineParametricPath< TVertex::Dimension >
-      TPath;
-      typedef std::pair< TVertex, TVertex >    _TBranch;
-      typedef std::vector< _TBranch >          _TBranches;
-
-    public:
-      itkNewMacro( Self );
-      itkTypeMacro( ExtractPathFromMinimumSpanningTree, itk::ProcessObject );
-
-      itkGetConstMacro( Vertex0, TVertex );
-      itkGetConstMacro( Vertex1, TVertex );
-
-      itkSetMacro( Vertex0, TVertex );
-      itkSetMacro( Vertex1, TVertex );
-
-    public:
-      const T* GetInput( ) const;
-      void SetInput( const T* tree );
-
-      TPath* GetOutput( );
-
-    protected:
-      ExtractPathFromMinimumSpanningTree( );
-      virtual ~ExtractPathFromMinimumSpanningTree( );
-
-      virtual void GenerateData( ) ITK_OVERRIDE;
-
-    private:
-      // Purposely not implemented
-      ExtractPathFromMinimumSpanningTree( const Self& other );
-      Self& operator=( const Self& other );
-
-    protected:
-      TVertex m_Vertex0;
-      TVertex m_Vertex1;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Base/ExtractPathFromMinimumSpanningTree.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__BASE__EXTRACTPATHFROMMINIMUMSPANNINGTREE__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/ExtractPathFromMinimumSpanningTree.hxx b/lib/fpa/Base/ExtractPathFromMinimumSpanningTree.hxx
deleted file mode 100644 (file)
index 400642c..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef __FPA__BASE__EXTRACTPATHFROMMINIMUMSPANNINGTREE__HXX__
-#define __FPA__BASE__EXTRACTPATHFROMMINIMUMSPANNINGTREE__HXX__
-
-// -------------------------------------------------------------------------
-template< class T >
-const T* fpa::Base::ExtractPathFromMinimumSpanningTree< T >::
-GetInput( ) const
-{
-  return(
-    dynamic_cast< const T* >( this->itk::ProcessObject::GetInput( 0 ) )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class T >
-void fpa::Base::ExtractPathFromMinimumSpanningTree< T >::
-SetInput( const T* tree )
-{
-  this->itk::ProcessObject::SetNthInput( 0, const_cast< T* >( tree ) );
-}
-
-// -------------------------------------------------------------------------
-template< class T >
-typename fpa::Base::ExtractPathFromMinimumSpanningTree< T >::
-TPath* fpa::Base::ExtractPathFromMinimumSpanningTree< T >::
-GetOutput( )
-{
-  return(
-    itkDynamicCastInDebugMode< TPath* >( this->GetPrimaryOutput( ) )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class T >
-fpa::Base::ExtractPathFromMinimumSpanningTree< T >::
-ExtractPathFromMinimumSpanningTree( )
-  : Superclass( )
-{
-  this->itk::ProcessObject::SetNumberOfRequiredInputs( 1 );
-
-  typename TPath::Pointer out = TPath::New( );
-  this->itk::ProcessObject::SetNumberOfRequiredOutputs( 1 );
-  this->itk::ProcessObject::SetNthOutput( 0, out.GetPointer( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class T >
-fpa::Base::ExtractPathFromMinimumSpanningTree< T >::
-~ExtractPathFromMinimumSpanningTree( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class T >
-void fpa::Base::ExtractPathFromMinimumSpanningTree< T >::
-GenerateData( )
-{
-  auto tree = this->GetInput( );
-  auto path = this->GetOutput( );
-
-  auto lst = tree->GetPath( this->m_Vertex0, this->m_Vertex1 );
-  path->Initialize( );
-  for( auto i = lst.begin( ); i != lst.end( ); ++i )
-    path->AddVertex( *i );
-  path->SetReferenceImage( tree );
-}
-
-#endif // __FPA__BASE__EXTRACTPATHFROMMINIMUMSPANNINGTREE__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/FastMarching.h b/lib/fpa/Base/FastMarching.h
deleted file mode 100644 (file)
index b615f8e..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#ifndef __FPA__BASE__FASTMARCHING__H__
-#define __FPA__BASE__FASTMARCHING__H__
-
-#include <fpa/Base/Dijkstra.h>
-
-namespace fpa
-{
-  namespace Base
-  {
-    /**
-     */
-    template< class V, class C, class VV, class VC, class B >
-    class FastMarching
-      : public Dijkstra< V, C, VV, VC, B >
-    {
-    public:
-      // Templated types
-      typedef V  TVertex;
-      typedef C  TCost;
-      typedef VV TVertexValue;
-      typedef B  TBaseFilter;
-
-      // Standard class typdedefs
-      typedef FastMarching                    Self;
-      typedef Dijkstra< V, C, VV, VC, B >     Superclass;
-      typedef itk::SmartPointer< Self >       Pointer;
-      typedef itk::SmartPointer< const Self > ConstPointer;
-
-      typedef typename Superclass::TResult TResult;
-      typedef typename Superclass::TTraits TTraits;
-
-    protected:
-      typedef typename Superclass::_TFrontId _TFrontId;
-      typedef typename Superclass::_TNode    _TNode;
-      typedef typename Superclass::_TNodes   _TNodes;
-      struct _TNodeEikonalSort
-      {
-        bool operator()( const _TNode& a, const _TNode& b ) const
-          { return( a.Result < b.Result ); }
-      };
-
-    public:
-      itkTypeMacro( FastMarching, Dijkstra );
-
-    protected:
-      FastMarching( );
-      virtual ~FastMarching( );
-
-      virtual bool _UpdateNeigh( _TNode& nn, const _TNode& n );
-
-      /**
-       * Eikonal solution method
-       *
-       * This method returns the computed time and a flag indicating if the
-       * determinant was valid.
-       */
-      bool _SolveEikonal( double& re, const _TNode& n, const double& F );
-
-    private:
-      // Purposely not implemented
-      FastMarching( const Self& );
-      void operator=( const Self& );
-
-    protected:
-      static const double LargestValue;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Base/FastMarching.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__BASE__FASTMARCHING__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/FastMarching.hxx b/lib/fpa/Base/FastMarching.hxx
deleted file mode 100644 (file)
index ef1f634..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-#ifndef __FPA__BASE__FASTMARCHING__HXX__
-#define __FPA__BASE__FASTMARCHING__HXX__
-
-#include <cmath>
-#include <limits>
-
-#include <itkExceptionObject.h>
-
-// ---------------------------------------------------------------------
-template< class V, class C, class VV, class VC, class B >
-const double fpa::Base::FastMarching< V, C, VV, VC, B >::
-LargestValue = std::numeric_limits< double >::max( );
-
-// -------------------------------------------------------------------------
-template< class V, class C, class VV, class VC, class B >
-fpa::Base::FastMarching< V, C, VV, VC, B >::
-FastMarching( )
-  : Superclass( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class VV, class VC, class B >
-fpa::Base::FastMarching< V, C, VV, VC, B >::
-~FastMarching( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class VV, class VC, class B >
-bool fpa::Base::FastMarching< V, C, VV, VC, B >::
-_UpdateNeigh( _TNode& nn, const _TNode& n )
-{
-  bool r = true;
-  if( !( this->_IsMarked( nn.Vertex ) ) )
-  {
-    double re;
-    double F = double( this->_Value( nn.Vertex ) );
-    r = this->_SolveEikonal( re, nn, F );
-    if( r )
-    {
-      nn.Result = TResult( re );
-      nn.Cost = TCost( re );
-
-    } // fi
-
-  } // fi
-  return( r );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class VV, class VC, class B >
-bool fpa::Base::FastMarching< V, C, VV, VC, B >::
-_SolveEikonal( double& re, const _TNode& n, const double& F )
-{
-  _TNodes neighs;
-  this->_Neighs( n, neighs );
-
-  // Compute interest nodes (i.e. the smallest valued in each dimension)
-  _TNodes minNodes;
-  unsigned int i = 0;
-  while( i < neighs.size( ) )
-  {
-    V nm = neighs[ i++ ].Vertex;
-    V np = neighs[ i++ ].Vertex;
-    bool mm = this->_IsMarked( nm );
-    bool mp = this->_IsMarked( np );
-    TResult rm = this->_Result( nm );
-    TResult rp = this->_Result( np );
-
-    _TNode Ti;
-    if( mm && mp )
-      minNodes.push_back(
-        ( rm < rp )?
-        _TNode( nm, rm, n.FrontId ):
-        _TNode( np, rp, n.FrontId )
-        );
-    else if( !mm && mp )
-      minNodes.push_back( _TNode( np, rp, n.FrontId ) );
-    else if( mm && !mp )
-      minNodes.push_back( _TNode( nm, rm, n.FrontId ) );
-
-  } // elihw
-  std::sort( minNodes.begin( ), minNodes.end( ), _TNodeEikonalSort( ) );
-
-  // Compute solution
-  double al = double( 0 );
-  double be = double( 0 );
-  double ga = double( -1 ) / ( F * F );
-  re = Self::LargestValue;
-
-  typename _TNodes::const_iterator nIt = minNodes.begin( );
-  bool valid = true;
-  while( nIt != minNodes.end( ) && valid )
-  {
-    if( !( re < double( nIt->Result ) ) )
-    {
-      double d = this->_Norm( n.Vertex, nIt->Vertex );
-      double s = double( 1 ) / ( d * d );
-      double v = double( nIt->Result );
-
-      al += s;
-      be += v * s;
-      ga += v * v * s;
-
-      double de = ( be * be ) - ( al * ga );
-      valid = !( de < double( 0 ) );
-      if( valid )
-        re = ( be + std::sqrt( de ) ) / al;
-      nIt++;
-    }
-    else
-      nIt = minNodes.end( );
-
-  } // elihw
-  return( valid );
-}
-
-#endif // __FPA__BASE__FASTMARCHING__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/Functors/InvertCostFunction.h b/lib/fpa/Base/Functors/InvertCostFunction.h
deleted file mode 100644 (file)
index 22644ad..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#ifndef __FPA__BASE__FUNCTORS__INVERTCOSTFUNCTION__H__
-#define __FPA__BASE__FUNCTORS__INVERTCOSTFUNCTION__H__
-
-#include <cmath>
-#include <itkFunctionBase.h>
-
-namespace fpa
-{
-  namespace Base
-  {
-    namespace Functors
-    {
-      /**
-       */
-      template< class C >
-      class InvertCostFunction
-        : public itk::FunctionBase< C, C >
-      {
-      public:
-        /// Type-related and pointers
-        typedef InvertCostFunction              Self;
-        typedef itk::FunctionBase< C, C >       Superclass;
-        typedef itk::SmartPointer< Self >       Pointer;
-        typedef itk::SmartPointer< const Self > ConstPointer;
-
-      public:
-        itkNewMacro( Self );
-        itkTypeMacro( InvertCostFunction, itkFunctionBase );
-
-        itkGetConstMacro( Alpha, C );
-        itkGetConstMacro( Beta, C );
-
-        itkSetMacro( Alpha, C );
-        itkSetMacro( Beta, C );
-
-      public:
-        virtual C Evaluate( const C& input ) const ITK_OVERRIDE
-          {
-            C a = std::pow( input, this->m_Alpha );
-            if( input >= C( 0 ) )
-              return( std::pow( C( 1 ) / ( C( 1 ) + a ), this->m_Beta ) );
-            else
-              return( std::pow( C( -1 ) / ( C( 1 ) - a ), this->m_Beta ) );
-          }
-
-      protected:
-        InvertCostFunction( )
-          : Superclass( ),
-            m_Alpha( C( 1 ) ),
-            m_Beta( C( 1 ) )
-          { }
-        virtual ~InvertCostFunction( )
-          { }
-
-      private:
-        // Purposely not implemented
-        InvertCostFunction( const Self& );
-        void operator=( const Self& );
-
-      protected:
-        C m_Alpha;
-        C m_Beta;
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#endif // __FPA__BASE__FUNCTORS__INVERTCOSTFUNCTION__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/Functors/TautologyFunction.h b/lib/fpa/Base/Functors/TautologyFunction.h
deleted file mode 100644 (file)
index 82498d0..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef __FPA__BASE__FUNCTORS__TAUTOLOGYFUNCTION__H__
-#define __FPA__BASE__FUNCTORS__TAUTOLOGYFUNCTION__H__
-
-#include <itkFunctionBase.h>
-
-namespace fpa
-{
-  namespace Base
-  {
-    namespace Functors
-    {
-      /**
-       */
-      template< class S, class V >
-      class TautologyFunction
-        : public itk::FunctionBase< V, bool >
-      {
-      public:
-        typedef TautologyFunction               Self;
-        typedef itk::FunctionBase< V, bool >    Superclass;
-        typedef itk::SmartPointer< Self >       Pointer;
-        typedef itk::SmartPointer< const Self > ConstPointer;
-
-        typedef S TSpace;
-        typedef V TVertex;
-
-      public:
-        itkNewMacro( Self );
-        itkTypeMacro( TautologyFunction, itkFunctionBase );
-
-        itkGetConstObjectMacro( Space, TSpace );
-        itkSetConstObjectMacro( Space, TSpace );
-
-      public:
-        virtual bool Evaluate( const TVertex& input ) const ITK_OVERRIDE
-          { return( true ); }
-
-      protected:
-        TautologyFunction( )
-          : Superclass( )
-          { }
-        virtual ~TautologyFunction( )
-          { }
-
-      private:
-        // Purposely not implemented
-        TautologyFunction( const Self& );
-        void operator=( const Self& );
-
-      protected:
-        typename TSpace::ConstPointer m_Space;
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#endif // __FPA__BASE__FUNCTORS__TAUTOLOGYFUNCTION__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/ImageSkeleton.h b/lib/fpa/Base/ImageSkeleton.h
deleted file mode 100644 (file)
index d7ca832..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef __FPA__BASE__IMAGESKELETON__H__
-#define __FPA__BASE__IMAGESKELETON__H__
-
-#include <itkSimpleDataObjectDecorator.h>
-#include <cpExtensions/DataStructures/PolyLineParametricPath.h>
-
-namespace fpa
-{
-  namespace Base
-  {
-    /**
-     */
-    template< class _TMST >
-    class ImageSkeleton
-      : public itk::SimpleDataObjectDecorator< std::map< typename _TMST::TVertex, std::map< typename _TMST::TVertex, typename cpExtensions::DataStructures::PolyLineParametricPath< _TMST::TVertex::Dimension >::Pointer, typename _TMST::TVertex::LexicographicCompare >, typename _TMST::TVertex::LexicographicCompare > >
-    {
-    public:
-      // Base types
-      typedef _TMST                                  TMinimumSpanningTree;
-      typedef typename _TMST::TVertex                TVertex;
-      typedef typename TVertex::LexicographicCompare TVertexCmp;
-      typedef
-      cpExtensions::DataStructures::PolyLineParametricPath< TVertex::Dimension >
-      TPath;
-      typedef
-      std::map< TVertex, typename TPath::Pointer, TVertexCmp >
-      TSkeletonRow;
-      typedef std::map< TVertex, TSkeletonRow, TVertexCmp > TSkeleton;
-
-      // ITK-related types
-      typedef ImageSkeleton                               Self;
-      typedef itk::SimpleDataObjectDecorator< TSkeleton > Superclass;
-      typedef itk::SmartPointer< Self >                   Pointer;
-      typedef itk::SmartPointer< const Self >             ConstPointer;
-
-    public:
-      itkNewMacro( Self );
-      itkTypeMacro( ImageSkeleton, itk::SimpleDataObjectDecorator );
-
-      itkGetConstObjectMacro( MinimumSpanningTree, _TMST );
-      itkSetConstObjectMacro( MinimumSpanningTree, _TMST );
-
-    public:
-      void AddBranch( const TVertex& a, const TVertex& b );
-      const TPath* GetBranch( const TVertex& a, const TVertex& b ) const;
-
-    protected:
-      ImageSkeleton( );
-      virtual ~ImageSkeleton( );
-
-    private:
-      // Purposely not implemented
-      ImageSkeleton( const Self& other );
-      Self& operator=( const Self& other );
-
-    protected:
-      typename _TMST::ConstPointer m_MinimumSpanningTree;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Base/ImageSkeleton.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__BASE__IMAGESKELETON__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/ImageSkeleton.hxx b/lib/fpa/Base/ImageSkeleton.hxx
deleted file mode 100644 (file)
index 747d9de..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-#ifndef __FPA__BASE__IMAGESKELETON__HXX__
-#define __FPA__BASE__IMAGESKELETON__HXX__
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-void fpa::Base::ImageSkeleton< _TMST >::
-AddBranch( const TVertex& a, const TVertex& b )
-{
-  if( this->m_MinimumSpanningTree.IsNull( ) )
-    return;
-
-  // Check if the branch already exists
-  bool found = false;
-  auto aIt = this->Get( ).find( a );
-  if( aIt != this->Get( ).end( ) )
-    found = ( aIt->second.find( b ) != aIt->second.end( ) );
-  if( found )
-    return;
-
-  // Create path
-  auto vertices = this->m_MinimumSpanningTree->GetPath( a, b );
-  typename TPath::Pointer path = TPath::New( );
-  for( auto vIt = vertices.begin( ); vIt != vertices.end( ); ++vIt )
-    path->AddVertex( *vIt );
-
-  // Assign path vertices
-  path->SetReferenceImage( this->m_MinimumSpanningTree );
-
-  typedef typename TSkeleton::value_type _T1;
-  typedef typename TSkeletonRow::value_type _T2;
-
-  TSkeleton& sk = this->Get( );
-  auto sIt = sk.find( a );
-  if( sIt == sk.end( ) )
-  {
-    sIt = sk.insert( _T1( a, TSkeletonRow( ) ) ).first;
-    this->Modified( );
-
-  } // fi
-  if( sIt->second.find( b ) == sIt->second.end( ) )
-  {
-    sIt->second.insert( _T2( b, path ) );
-    this->Modified( );
-
-  } // fi
-}
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-const typename fpa::Base::ImageSkeleton< _TMST >::
-TPath* fpa::Base::ImageSkeleton< _TMST >::
-GetBranch( const TVertex& a, const TVertex& b ) const
-{
-  auto aIt = this->Get( ).find( a );
-  if( aIt != this->Get( ).end( ) )
-  {
-    auto bIt = aIt->second.find( b );
-    if( bIt != aIt->second.end( ) )
-      return( bIt->second.GetPointer( ) );
-    else
-      return( NULL );
-  }
-  else
-    return( NULL );
-}
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-fpa::Base::ImageSkeleton< _TMST >::
-ImageSkeleton( )
-  : Superclass( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-fpa::Base::ImageSkeleton< _TMST >::
-~ImageSkeleton( )
-{
-}
-
-#endif // __FPA__BASE__IMAGESKELETON__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/IncrementalRegionGrow.h b/lib/fpa/Base/IncrementalRegionGrow.h
deleted file mode 100644 (file)
index 7104777..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#ifndef __FPA__BASE__INCREMENTALREGIONGROW__H__
-#define __FPA__BASE__INCREMENTALREGIONGROW__H__
-
-#include <vector>
-#include <itkFunctionBase.h>
-#include <fpa/Base/RegionGrow.h>
-
-namespace fpa
-{
-  namespace Base
-  {
-    /**
-     * Region grow is a front propagation with no costs.
-     */
-    template< class V, class R, class VV, class VC, class B >
-    class IncrementalRegionGrow
-      : public RegionGrow< V, R, VV, VC, B >
-    {
-    public:
-      /// Standard class typdedefs
-      typedef IncrementalRegionGrow  Self;
-      typedef RegionGrow< V, R, VV, VC, B >   Superclass;
-      typedef itk::SmartPointer< Self >       Pointer;
-      typedef itk::SmartPointer< const Self > ConstPointer;
-
-      typedef typename Superclass::TVertex          TVertex;
-      typedef typename Superclass::TValue           TValue;
-      typedef typename Superclass::TResult          TResult;
-      typedef typename Superclass::TVertexCompare   TVertexCompare;
-      typedef typename Superclass::TGrowingFunction TGrowingFunction;
-
-      typedef std::vector< typename TGrowingFunction::Pointer > TFunctions;
-      typedef std::vector< unsigned long >                      TVolumes;
-
-    protected:
-      typedef typename Superclass::_TVertices      _TVertices;
-      typedef typename Superclass::_TCollision     _TCollision;
-      typedef typename Superclass::_TCollisionsRow _TCollisionsRow;
-      typedef typename Superclass::_TCollisions    _TCollisions;
-      typedef typename Superclass::_TNode          _TNode;
-      typedef typename Superclass::_TNodes         _TNodes;
-      typedef typename Superclass::_TQueue         _TQueue;
-
-    public:
-      itkTypeMacro( IncrementalRegionGrow, RegionGrow );
-
-    public:
-      TGrowingFunction* GetGrowingFunction( unsigned int i );
-      const TGrowingFunction* GetGrowingFunction( unsigned int i ) const;
-      unsigned long GetGrowingFunctionVolume( unsigned int i ) const;
-      unsigned int GetNumberOfGrowingFunctions( ) const;
-      void ClearGrowingFunctions( );
-      unsigned int AddGrowingFunction( TGrowingFunction* function );
-
-    protected:
-      IncrementalRegionGrow( );
-      virtual ~IncrementalRegionGrow( );
-
-      virtual void _BeforeGenerateData( );
-      virtual void _AfterLoop( );
-      virtual void _Loop( );
-      virtual bool _CheckMembership( const TVertex& v ) const;
-
-    private:
-      // Purposely not implemented.
-      IncrementalRegionGrow( const Self& );
-      void operator=( const Self& );
-
-    protected:
-      mutable _TQueue m_AuxiliaryQueue;
-
-      TFunctions m_Functions;
-      TVolumes   m_Volumes;
-      unsigned int m_ActualFunction;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Base/IncrementalRegionGrow.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__BASE__INCREMENTALREGIONGROW__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/IncrementalRegionGrow.hxx b/lib/fpa/Base/IncrementalRegionGrow.hxx
deleted file mode 100644 (file)
index d5d9447..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-#ifndef __FPA__BASE__INCREMENTALREGIONGROW__HXX__
-#define __FPA__BASE__INCREMENTALREGIONGROW__HXX__
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-typename fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-TGrowingFunction* fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-GetGrowingFunction( unsigned int i )
-{
-  if( i < this->m_Functions.size( ) )
-    return( this->m_Functions[ i ] );
-  else
-    return( NULL );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-const typename fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-TGrowingFunction* fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-GetGrowingFunction( unsigned int i ) const
-{
-  if( i < this->m_Functions.size( ) )
-    return( this->m_Functions[ i ] );
-  else
-    return( NULL );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-unsigned long fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-GetGrowingFunctionVolume( unsigned int i ) const
-{
-  if( i < this->m_Volumes.size( ) )
-    return( this->m_Volumes[ i ] );
-  else
-    return( NULL );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-unsigned int fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-GetNumberOfGrowingFunctions( ) const
-{
-  return( this->m_Functions.size( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-void fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-ClearGrowingFunctions( )
-{
-  this->m_Functions.clear( );
-  this->m_Volumes.clear( );
-  this->Modified( );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-unsigned int fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-AddGrowingFunction( TGrowingFunction* function )
-{
-  this->m_Functions.push_back( function );
-  this->m_Volumes.push_back( 0 );
-  this->Modified( );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-IncrementalRegionGrow( )
-  : Superclass( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-~IncrementalRegionGrow( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-void fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-_BeforeGenerateData( )
-{
-  this->Superclass::_BeforeGenerateData( );
-  this->m_ActualFunction = 0;
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-void fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-_AfterLoop( )
-{
-  /* TODO
-  this->Superclass::_AfterLoop( );
-
-  // Replace queue
-  this->_QueueClear( );
-  while( !( this->m_AuxiliaryQueue.empty( ) ) )
-  {
-    // Get node
-    _TNode node = this->m_AuxiliaryQueue.front( );
-    this->m_AuxiliaryQueue.pop( );
-    this->_QueuePush( node );
-
-    // Unmark it
-    typename _TMarks::iterator mIt = this->m_Marks.find( node.Vertex );
-    if( mIt != this->m_Marks.end( ) )
-      this->m_Marks.erase( mIt );
-
-  } // elihw
-
-  // Move to next function
-  this->m_ActualFunction++;
-  */
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-void fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-_Loop( )
-{
-  while( this->m_ActualFunction < this->m_Functions.size( ) )
-    this->Superclass::_Loop( );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-bool fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
-_CheckMembership( const TVertex& v ) const
-{
-  /* TODO
-
-  if( this->m_ActualFunction < this->m_Functions.size( ) )
-  {
-    bool ret =
-      this->m_Functions[ this->m_ActualFunction ]->Evaluate( v );
-    if( !ret )
-      this->m_AuxiliaryQueue.push( n );
-    else
-      this->m_Volumes[ this->m_ActualFunction ]++;
-    return( ret );
-  }
-  else
-    return( false );
-*/
-  return( false );
-}
-
-#endif // __FPA__BASE__INCREMENTALREGIONGROW__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/MinimumSpanningTree.h b/lib/fpa/Base/MinimumSpanningTree.h
deleted file mode 100644 (file)
index bc9ce93..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-#ifndef __FPA__BASE__MINIMUMSPANNINGTREE__H__
-#define __FPA__BASE__MINIMUMSPANNINGTREE__H__
-
-#include <map>
-#include <vector>
-#include <utility>
-#include <itkPoint.h>
-#include <itkSmartPointer.h>
-
-namespace fpa
-{
-  namespace Base
-  {
-    /**
-     */
-    template< class _TSuperclass, class _TVertex >
-    class MinimumSpanningTree
-      : public _TSuperclass
-    {
-    public:
-      typedef MinimumSpanningTree             Self;
-      typedef _TSuperclass                    Superclass;
-      typedef itk::SmartPointer< Self >       Pointer;
-      typedef itk::SmartPointer< const Self > ConstPointer;
-
-      typedef _TVertex                       TVertex;
-      typedef std::vector< TVertex >         TVertices;
-      typedef std::pair< TVertex, bool >     TCollision;
-      typedef std::vector< TCollision >      TCollisionsRow;
-      typedef std::vector< TCollisionsRow >  TCollisions;
-
-      typedef itk::Point< double, TVertex::Dimension > TPoint;
-      typedef std::vector< TPoint >                    TPoints;
-      typedef std::multimap< double, TVertex >         TNodeQueue;
-
-    protected:
-      typedef std::vector< unsigned long > _TRow;
-      typedef std::vector< _TRow >         _TMatrix;
-
-    public:
-      itkTypeMacro( MinimumSpanningTree, _TSuperclass );
-
-      itkBooleanMacro( FillNodeQueue );
-
-      itkGetConstReferenceMacro( Collisions, TCollisions );
-      itkGetConstReferenceMacro( NodeQueue, TNodeQueue );
-      itkGetConstMacro( FillNodeQueue, bool );
-
-      itkSetMacro( FillNodeQueue, bool );
-
-    public:
-      void SetCollisions( const TCollisions& collisions );
-      TVertices GetPath( const TVertex& a ) const;
-      TVertices GetPath( const TVertex& a, const TVertex& b ) const;
-
-      virtual TPoints GetEuclideanPath( const TVertex& a ) const;
-      virtual TPoints GetEuclideanPath(
-        const TVertex& a, const TVertex& b
-        ) const;
-      virtual bool IsDefinedInEuclideanSpace( ) const;
-
-      virtual void SetNode(
-        const TVertex& v,
-        const TVertex& p,
-        const short& fid,
-        const double& cost
-        );
-      virtual void Clear( );
-
-    protected:
-      MinimumSpanningTree( );
-      virtual ~MinimumSpanningTree( );
-
-      virtual bool _HasVertex( const TVertex& a ) const = 0;
-      virtual short _FrontId( const TVertex& a ) const = 0;
-      virtual void _Path( TVertices& path, const TVertex& a ) const = 0;
-
-    private:
-      // Purposely not implemented
-      MinimumSpanningTree( const Self& other );
-      Self& operator=( const Self& other );
-
-    protected:
-      TCollisions m_Collisions;
-      _TMatrix    m_FrontPaths;
-      TNodeQueue  m_NodeQueue;
-      bool        m_FillNodeQueue;
-
-      static const unsigned long INF_VALUE;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Base/MinimumSpanningTree.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__BASE__MINIMUMSPANNINGTREE__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/MinimumSpanningTree.hxx b/lib/fpa/Base/MinimumSpanningTree.hxx
deleted file mode 100644 (file)
index c53a071..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-#ifndef __FPA__BASE__MINIMUMSPANNINGTREE__HXX__
-#define __FPA__BASE__MINIMUMSPANNINGTREE__HXX__
-
-#include <limits>
-
-// -------------------------------------------------------------------------
-template< class _TSuperclass, class _TVertex >
-const unsigned long fpa::Base::
-MinimumSpanningTree< _TSuperclass, _TVertex >::INF_VALUE =
-  std::numeric_limits< unsigned long >::max( );
-  
-// -------------------------------------------------------------------------
-template< class _TSuperclass, class _TVertex >
-void fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-SetCollisions( const TCollisions& collisions )
-{
-  // Prepare a front graph
-  this->m_Collisions = collisions;
-  unsigned long nSeeds = this->m_Collisions.size( );
-  _TMatrix dist( nSeeds, _TRow( nSeeds, Self::INF_VALUE ) );
-  this->m_FrontPaths = dist;
-  for( unsigned long i = 0; i < nSeeds; ++i )
-  {
-    for( unsigned long j = 0; j < nSeeds; ++j )
-    {
-      if( this->m_Collisions[ i ][ j ].second )
-      {
-        dist[ i ][ j ] = 1;
-        dist[ j ][ i ] = 1;
-        this->m_FrontPaths[ i ][ j ] = j;
-        this->m_FrontPaths[ j ][ i ] = i;
-
-      } // fi
-
-    } // rof
-    dist[ i ][ i ] = 0;
-    this->m_FrontPaths[ i ][ i ] = i;
-
-  } // rof
-
-  // Use Floyd-Warshall to compute all possible paths
-  for( unsigned long k = 0; k < nSeeds; ++k )
-  {
-    for( unsigned long i = 0; i < nSeeds; ++i )
-    {
-      for( unsigned long j = 0; j < nSeeds; ++j )
-      {
-        if( ( dist[ i ][ k ] + dist[ k ][ j ] ) < dist[ i ][ j ] )
-        {
-          dist[ i ][ j ] = dist[ i ][ k ] + dist[ k ][ j ];
-          this->m_FrontPaths[ i ][ j ] = this->m_FrontPaths[ i ][ k ];
-
-        } // fi
-
-      } // rof
-
-    } // rof
-
-  } // rof
-  this->Modified( );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSuperclass, class _TVertex >
-typename fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-TVertices fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-GetPath( const TVertex& a ) const
-{
-  TVertices path;
-  if( this->_HasVertex( a ) )
-    this->_Path( path, a );
-  return( path );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSuperclass, class _TVertex >
-typename fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-TVertices fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-GetPath( const TVertex& a, const TVertex& b ) const
-{
-  TVertices path;
-
-  // Check existence
-  if( !this->_HasVertex( a ) || !this->_HasVertex( b ) )
-    return( path );
-  
-  // Get front ids
-  short fa = this->_FrontId( a );
-  short fb = this->_FrontId( b );
-
-  if( fa == fb )
-  {
-    // Get paths
-    TVertices ap, bp;
-    this->_Path( ap, a );
-    this->_Path( bp, b );
-
-    // Ignore common part: find common ancestor
-    auto raIt = ap.rbegin( );
-    auto rbIt = bp.rbegin( );
-    while( *raIt == *rbIt && raIt != ap.rend( ) && rbIt != bp.rend( ) )
-    {
-      ++raIt;
-      ++rbIt;
-
-    } // elihw
-    if( raIt != ap.rbegin( ) ) --raIt;
-    if( rbIt != bp.rbegin( ) ) --rbIt;
-
-    // Add part from a
-    for( auto iaIt = ap.begin( ); iaIt != ap.end( ) && *iaIt != *raIt; ++iaIt )
-      path.push_back( *iaIt );
-
-    // Add part from b
-    for( ; rbIt != bp.rend( ); ++rbIt )
-      path.push_back( *rbIt );
-  }
-  else
-  {
-    // Use this->m_FrontPaths from Floyd-Warshall
-    if( this->m_FrontPaths[ fa ][ fb ] < Self::INF_VALUE )
-    {
-      // Compute front path
-      std::vector< long > fpath;
-      fpath.push_back( fa );
-      while( fa != fb )
-      {
-        fa = this->m_FrontPaths[ fa ][ fb ];
-        fpath.push_back( fa );
-
-      } // elihw
-
-      // Continue only if both fronts are connected
-      unsigned int N = fpath.size( );
-      if( N > 0 )
-      {
-        // First path: from start vertex to first collision
-        path = this->GetPath(
-          a, this->m_Collisions[ fpath[ 0 ] ][ fpath[ 1 ] ].first
-          );
-
-        // Intermediary paths
-        for( unsigned int i = 1; i < N - 1; ++i )
-        {
-          TVertices ipath =
-            this->GetPath(
-              this->m_Collisions[ fpath[ i ] ][ fpath[ i - 1 ] ].first,
-              this->m_Collisions[ fpath[ i ] ][ fpath[ i + 1 ] ].first
-              );
-          path.insert( path.end( ), ipath.begin( ), ipath.end( ) );
-
-        } // rof
-
-        // Final path: from last collision to end point
-        TVertices lpath =
-          this->GetPath(
-            this->m_Collisions[ fpath[ N - 1 ] ][ fpath[ N - 2 ] ].first, b
-            );
-        path.insert( path.end( ), lpath.begin( ), lpath.end( ) );
-
-      } // fi
-
-    } // fi
-
-  } // fi
-  return( path );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSuperclass, class _TVertex >
-typename fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-TPoints fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-GetEuclideanPath( const TVertex& a ) const
-{
-  TPoints points;
-  return( points );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSuperclass, class _TVertex >
-typename fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-TPoints fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-GetEuclideanPath( const TVertex& a, const TVertex& b ) const
-{
-  TPoints points;
-  return( points );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSuperclass, class _TVertex >
-bool fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-IsDefinedInEuclideanSpace( ) const
-{
-  return( false );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSuperclass, class _TVertex >
-void fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-SetNode(
-  const TVertex& v, const TVertex& p,
-  const short& fid, const double& cost
-  )
-{
-  typedef typename TNodeQueue::value_type _TNodeQueueValue;
-  if( this->m_FillNodeQueue )
-    this->m_NodeQueue.insert( _TNodeQueueValue( cost, v ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSuperclass, class _TVertex >
-void fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-Clear( )
-{
-  this->m_NodeQueue.clear( );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSuperclass, class _TVertex >
-fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-MinimumSpanningTree( )
-  : Superclass( ),
-    m_FillNodeQueue( false )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TSuperclass, class _TVertex >
-fpa::Base::MinimumSpanningTree< _TSuperclass, _TVertex >::
-~MinimumSpanningTree( )
-{
-}
-
-#endif // __FPA__BASE__MINIMUMSPANNINGTREE__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/RegionGrow.h b/lib/fpa/Base/RegionGrow.h
deleted file mode 100644 (file)
index 8bc2776..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef __FPA__BASE__REGIONGROW__H__
-#define __FPA__BASE__REGIONGROW__H__
-
-#include <queue>
-#include <utility>
-#include <fpa/Base/Algorithm.h>
-#include <fpa/Base/Functors/TautologyFunction.h>
-
-namespace fpa
-{
-  namespace Base
-  {
-    /**
-     * Region grow is a front propagation with no costs.
-     *
-     * @param V  Vertex type.
-     * @param C  Vertex value type.
-     * @param R  Result value type.
-     * @param S  Space type where vertices are.
-     * @param VC Vertex lexicographical compare.
-     * @param B  Base class for this algorithm. It should be any itk-based
-     *           filter (itk::ProcessObject).
-     *
-     */
-    template< class V, class C, class R, class S, class VC, class B >
-    class RegionGrow
-      : public Algorithm< V, C, R, S, VC, B >
-    {
-    public:
-      typedef RegionGrow                       Self;
-      typedef Algorithm< V, C, R, S, VC, B >   Superclass;
-      typedef itk::SmartPointer< Self >        Pointer;
-      typedef itk::SmartPointer< const Self >  ConstPointer;
-
-      typedef typename Superclass::TVertex        TVertex;
-      typedef typename Superclass::TValue         TValue;
-      typedef typename Superclass::TResult        TResult;
-      typedef typename Superclass::TSpace         TSpace;
-      typedef typename Superclass::TVertexCompare TVertexCompare;
-
-      typedef fpa::Base::Functors::TautologyFunction< S, V > TGrowingFunction;
-
-    protected:
-      typedef typename Superclass::_TVertices      _TVertices;
-      typedef typename Superclass::_TCollision     _TCollision;
-      typedef typename Superclass::_TCollisionsRow _TCollisionsRow;
-      typedef typename Superclass::_TCollisions    _TCollisions;
-      typedef typename Superclass::_TNode          _TNode;
-      typedef typename Superclass::_TNodes         _TNodes;
-
-      typedef std::queue< std::pair< TVertex, _TNode > > _TQueue;
-
-    public:
-      itkTypeMacro( RegionGrow, Algorithm );
-
-      itkGetConstMacro( InsideValue, TResult );
-      itkGetConstMacro( OutsideValue, TResult );
-      itkGetObjectMacro( GrowingFunction, TGrowingFunction );
-      itkGetConstObjectMacro( GrowingFunction, TGrowingFunction );
-
-      itkSetMacro( InsideValue, TResult );
-      itkSetMacro( OutsideValue, TResult );
-      itkSetObjectMacro( GrowingFunction, TGrowingFunction );
-
-    protected:
-      RegionGrow( );
-      virtual ~RegionGrow( );
-
-      virtual bool _CheckMembership( const TVertex& v ) const;
-
-      // Results-related abstract methods
-      virtual bool _ComputeNeighborResult(
-        TResult& result, const TVertex& neighbor, const TVertex& parent
-        ) const ITK_OVERRIDE;
-
-      // Queue-related abstract methods
-      virtual bool _IsQueueEmpty( ) const ITK_OVERRIDE;
-      virtual void _QueuePush( const TVertex& v, const _TNode& n ) ITK_OVERRIDE;
-      virtual void _QueuePop( TVertex& v, _TNode& n ) ITK_OVERRIDE;
-      virtual void _QueueClear( ) ITK_OVERRIDE;
-
-    private:
-      // Purposely not implemented
-      RegionGrow( const Self& other );
-      Self& operator=( const Self& other );
-
-    protected:
-      TResult m_InsideValue;
-      TResult m_OutsideValue;
-      _TQueue m_Queue;
-
-      typename TGrowingFunction::Pointer m_GrowingFunction;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Base/RegionGrow.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__BASE__REGIONGROW__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/RegionGrow.hxx b/lib/fpa/Base/RegionGrow.hxx
deleted file mode 100644 (file)
index 8542f30..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-#ifndef __FPA__BASE__REGIONGROWING__HXX__
-#define __FPA__BASE__REGIONGROWING__HXX__
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-fpa::Base::RegionGrow< V, C, R, S, VC, B >::
-RegionGrow( )
-  : Superclass( ),
-    m_InsideValue( TResult( 1 ) ),
-    m_OutsideValue( TResult( 0 ) )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-fpa::Base::RegionGrow< V, C, R, S, VC, B >::
-~RegionGrow( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-bool fpa::Base::RegionGrow< V, C, R, S, VC, B >::
-_CheckMembership( const TVertex& v ) const
-{
-  if( this->m_GrowingFunction.IsNotNull( ) )
-    return( this->m_GrowingFunction->Evaluate( v ) );
-  else
-    return( true );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-bool fpa::Base::RegionGrow< V, C, R, S, VC, B >::
-_ComputeNeighborResult(
-  TResult& result, const TVertex& neighbor, const TVertex& parent
-  ) const
-{
-  if( this->_CheckMembership( neighbor ) )
-  {
-    result = this->m_InsideValue;
-    return( true );
-  }
-  else
-  {
-    result = this->m_OutsideValue;
-    return( false );
-
-  } // fi
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-bool fpa::Base::RegionGrow< V, C, R, S, VC, B >::
-_IsQueueEmpty( ) const
-{
-  return( this->m_Queue.empty( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::RegionGrow< V, C, R, S, VC, B >::
-_QueuePush( const TVertex& v, const _TNode& n )
-{
-  this->m_Queue.push( std::pair< TVertex, _TNode >( v, n ) );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::RegionGrow< V, C, R, S, VC, B >::
-_QueuePop( TVertex& v, _TNode& n )
-{
-  v = this->m_Queue.front( ).first;
-  n = this->m_Queue.front( ).second;
-  this->m_Queue.pop( );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class B >
-void fpa::Base::RegionGrow< V, C, R, S, VC, B >::
-_QueueClear( )
-{
-  while( this->m_Queue.size( ) > 0 )
-    this->m_Queue.pop( );
-}
-
-#endif // __FPA__BASE__REGIONGROWING__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/RegionGrowWithMultipleCriteria.h b/lib/fpa/Base/RegionGrowWithMultipleCriteria.h
deleted file mode 100644 (file)
index cce7dbf..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef __FPA__BASE__REGIONGROWWITHMULTIPLECRITERIA__H__
-#define __FPA__BASE__REGIONGROWWITHMULTIPLECRITERIA__H__
-
-#include <vector>
-#include <itkFunctionBase.h>
-#include <fpa/Base/RegionGrow.h>
-
-namespace fpa
-{
-  namespace Base
-  {
-    /**
-     * Region grow is a front propagation with no costs.
-     */
-    template< class V, class R, class VV, class VC, class B >
-    class RegionGrowWithMultipleCriteria
-      : public RegionGrow< V, R, VV, VC, B >
-    {
-    public:
-      typedef V  TVertex;
-      typedef R  TResult;
-      typedef VV TVertexValue;
-      typedef B  TBaseFilter;
-
-      /// Standard class typdedefs
-      typedef RegionGrowWithMultipleCriteria  Self;
-      typedef RegionGrow< V, R, VV, VC, B >   Superclass;
-      typedef itk::SmartPointer< Self >       Pointer;
-      typedef itk::SmartPointer< const Self > ConstPointer;
-
-      typedef typename Superclass::TTraits  TTraits;
-      typedef typename Superclass::TCost    TCost;
-      typedef itk::FunctionBase< V, TCost > TMembershipFunction;
-      typedef
-      typename TMembershipFunction::Pointer
-      TMembershipFunctionPointer;
-      typedef std::vector< TMembershipFunctionPointer > TFunctions;
-
-    protected:
-      typedef typename Superclass::_TFrontId  _TFrontId;
-      typedef typename Superclass::_TNode     _TNode;
-      typedef typename Superclass::_TNodes    _TNodes;
-      typedef typename Superclass::_TQueue    _TQueue;
-      typedef typename Superclass::_TMarks    _TMarks;
-
-    public:
-      itkTypeMacro( RegionGrowWithMultipleCriteria, RegionGrow );
-
-    public:
-      unsigned int GetNumberOfMembershipFunctions( ) const;
-      void ClearMembershipFunctions( );
-      void AddMembershipFunction( TMembershipFunction* function );
-
-    protected:
-      RegionGrowWithMultipleCriteria( );
-      virtual ~RegionGrowWithMultipleCriteria( );
-
-      virtual void _BeforeMainLoop( );
-      virtual void _AfterLoop( );
-      virtual void _Loop( );
-      virtual bool _CheckMembership( const _TNode& n ) const;
-
-    private:
-      RegionGrowWithMultipleCriteria( const Self& ); // Not impl.
-      void operator=( const Self& );                 // Not impl.
-
-    protected:
-      mutable _TQueue m_AuxiliaryQueue;
-      TFunctions m_Functions;
-      typename TFunctions::iterator m_ActualFunction;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Base/RegionGrowWithMultipleCriteria.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__BASE__REGIONGROWWITHMULTIPLECRITERIA__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Base/RegionGrowWithMultipleCriteria.hxx b/lib/fpa/Base/RegionGrowWithMultipleCriteria.hxx
deleted file mode 100644 (file)
index 0fd4378..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-#ifndef __FPA__BASE__REGIONGROWWITHMULTIPLECRITERIA__HXX__
-#define __FPA__BASE__REGIONGROWWITHMULTIPLECRITERIA__HXX__
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-unsigned int fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
-GetNumberOfMembershipFunctions( ) const
-{
-  return( this->m_Functions.size( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-void fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
-ClearMembershipFunctions( )
-{
-  this->m_Functions.clear( );
-  this->Modified( );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-void fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
-AddMembershipFunction( TMembershipFunction* function )
-{
-  this->m_Functions.push_back( function );
-  this->Modified( );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
-RegionGrowWithMultipleCriteria( )
-  : Superclass( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
-~RegionGrowWithMultipleCriteria( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-void fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
-_BeforeMainLoop( )
-{
-  this->Superclass::_BeforeMainLoop( );
-  this->m_ActualFunction = this->m_Functions.begin( );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-void fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
-_AfterLoop( )
-{
-  this->Superclass::_AfterLoop( );
-
-  // Replace queue
-  this->_QueueClear( );
-  while( !( this->m_AuxiliaryQueue.empty( ) ) )
-  {
-    // Get node
-    _TNode node = this->m_AuxiliaryQueue.front( );
-    this->m_AuxiliaryQueue.pop( );
-    this->_QueuePush( node );
-
-    // Unmark it
-    typename _TMarks::iterator mIt = this->m_Marks.find( node.Vertex );
-    if( mIt != this->m_Marks.end( ) )
-      this->m_Marks.erase( mIt );
-    
-  } // elihw
-
-  // Move to next function
-  this->m_ActualFunction++;
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-void fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
-_Loop( )
-{
-  while( this->m_ActualFunction != this->m_Functions.end( ) )
-    this->Superclass::_Loop( );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class R, class VV, class VC, class B >
-bool fpa::Base::RegionGrowWithMultipleCriteria< V, R, VV, VC, B >::
-_CheckMembership( const _TNode& n ) const
-{
-  if( this->m_ActualFunction != this->m_Functions.end( ) )
-  {
-    bool ret = ( *( this->m_ActualFunction ) )->Evaluate( n.Vertex );
-    if( !ret )
-      this->m_AuxiliaryQueue.push( n );
-    return( ret );
-  }
-  else
-    return( false );
-}
-
-#endif // __FPA__BASE__REGIONGROWWITHMULTIPLECRITERIA__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Common.cxx.in b/lib/fpa/Common.cxx.in
deleted file mode 100644 (file)
index 2b1a193..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <fpa/Common.h>
-
-// -------------------------------------------------------------------------
-std::string fpa::GetVersion( )
-{
-  return( "@VERSION_STRING@" );
-}
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Common.h b/lib/fpa/Common.h
deleted file mode 100644 (file)
index c46ae57..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef __FPA__COMMON__H__
-#define __FPA__COMMON__H__
-
-#include <string>
-#include <fpa/fpa_Export.h>
-
-namespace fpa
-{
-  std::string fpa_EXPORT GetVersion( );
-
-} // ecapseman
-
-#endif // __FPA__COMMON__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/IO/MinimumSpanningTreeReader.h b/lib/fpa/IO/MinimumSpanningTreeReader.h
deleted file mode 100644 (file)
index 0430ad9..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#ifndef __FPA__IO__MINIMUMSPANNINGTREEREADER__H__
-#define __FPA__IO__MINIMUMSPANNINGTREEREADER__H__
-
-#include <string>
-#include <itkProcessObject.h>
-
-namespace fpa
-{
-  namespace IO
-  {
-    /**
-     */
-    template< class _TTree >
-    class MinimumSpanningTreeReader
-      : public itk::ProcessObject
-    {
-    public:
-      typedef MinimumSpanningTreeReader       Self;
-      typedef itk::ProcessObject              Superclass;
-      typedef itk::SmartPointer< Self >       Pointer;
-      typedef itk::SmartPointer< const Self > ConstPointer;
-
-      typedef _TTree TTree;
-
-    public:
-      itkNewMacro( Self );
-      itkTypeMacro( MinimumSpanningTreeReader, itkProcessObject );
-
-      itkGetConstMacro( FileName, std::string );
-      itkSetMacro( FileName, std::string );
-
-    public:
-      _TTree* GetOutput( );
-      virtual void Update( ) ITK_OVERRIDE;
-
-    protected:
-      MinimumSpanningTreeReader( );
-      virtual ~MinimumSpanningTreeReader( );
-
-      virtual void GenerateData( ) ITK_OVERRIDE;
-
-    private:
-      // Purposely not implemented
-      MinimumSpanningTreeReader( const Self& other );
-      Self& operator=( const Self& other );
-
-    protected:
-      std::string m_FileName;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/IO/MinimumSpanningTreeReader.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IO__MINIMUMSPANNINGTREEREADER__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/IO/MinimumSpanningTreeReader.hxx b/lib/fpa/IO/MinimumSpanningTreeReader.hxx
deleted file mode 100644 (file)
index 72eecc2..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-#ifndef __FPA__IO__MINIMUMSPANNINGTREEREADER__HXX__
-#define __FPA__IO__MINIMUMSPANNINGTREEREADER__HXX__
-
-#include <fstream>
-#include <sstream>
-#include <itkMacro.h>
-#include <itkOffset.h>
-
-// -------------------------------------------------------------------------
-template< class _TTree >
-_TTree* fpa::IO::MinimumSpanningTreeReader< _TTree >::
-GetOutput( )
-{
-  return(
-    dynamic_cast< _TTree* >( this->itk::ProcessObject::GetOutput( 0 ) )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTree >
-void fpa::IO::MinimumSpanningTreeReader< _TTree >::
-Update( )
-{
-  this->GenerateData( );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTree >
-fpa::IO::MinimumSpanningTreeReader< _TTree >::
-MinimumSpanningTreeReader( )
-  : Superclass( ),
-    m_FileName( "" )
-{
-  this->SetNumberOfRequiredInputs( 0 );
-  this->SetNumberOfRequiredOutputs( 0 );
-  typename _TTree::Pointer out = _TTree::New( );
-  this->itk::ProcessObject::SetNthOutput( 0, out.GetPointer( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTree >
-fpa::IO::MinimumSpanningTreeReader< _TTree >::
-~MinimumSpanningTreeReader( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TTree >
-void fpa::IO::MinimumSpanningTreeReader< _TTree >::
-GenerateData( )
-{
-  _TTree* tree = this->GetOutput( );
-
-  char* buff = NULL;
-  std::ifstream file(
-    this->m_FileName.c_str( ),
-    std::ios::in | std::ios::binary | std::ios::ate
-    );
-  if( !file )
-  {
-    itkExceptionMacro(
-      << "Error opening file to read a minimum spanning tree: \""
-      << this->m_FileName
-      << "\""
-      );
-    return;
-
-  } // fi
-
-  // Put all file into a memory buffer
-  auto size = file.tellg( );
-  buff = new char[ size ];
-  file.seekg( 0, std::ios::beg );
-  file.read ( buff, size );
-  file.close( );
-  std::istringstream in( buff );
-
-  // Read basic data
-  unsigned int dim, fill_queue;
-  in >> dim >> fill_queue;
-  tree->SetFillNodeQueue( fill_queue == 1 );
-
-  // Read regions
-  typename _TTree::IndexType li, ri, bi;
-  typename _TTree::SizeType ls, rs, bs;
-  li.Fill( 0 );
-  ri = bi = li;
-  ls.Fill( 0 );
-  rs = bs = ls;
-  for( unsigned int d = 0; d < dim; ++d )
-    if( d < _TTree::ImageDimension )
-      in >> li[ d ] >> ls[ d ];
-  for( unsigned int d = 0; d < dim; ++d )
-    if( d < _TTree::ImageDimension )
-      in >> ri[ d ] >> rs[ d ];
-  for( unsigned int d = 0; d < dim; ++d )
-    if( d < _TTree::ImageDimension )
-      in >> bi[ d ] >> bs[ d ];
-  typename _TTree::RegionType lr, rr, br;
-  lr.SetIndex( li ); lr.SetSize( ls );
-  rr.SetIndex( ri ); rr.SetSize( rs );
-  br.SetIndex( bi ); br.SetSize( bs );
-
-  // Read spatial information
-  typename _TTree::SpacingType   spc;
-  typename _TTree::PointType     ori;
-  typename _TTree::DirectionType dir;
-  for( unsigned int d = 0; d < dim; ++d )
-    if( d < _TTree::ImageDimension )
-      in >> ori[ d ];
-  for( unsigned int d = 0; d < dim; ++d )
-    if( d < _TTree::ImageDimension )
-      in >> spc[ d ];
-  for( unsigned int d = 0; d < dim; ++d )
-  {
-    if( d < _TTree::ImageDimension )
-    {
-      for( unsigned int e = 0; e < dim; ++e )
-        if( e < _TTree::ImageDimension )
-          in >> dir[ d ][ e ];
-
-    } // fi
-
-  } // rof
-
-  // Allocate memory and prepare it
-  tree->SetLargestPossibleRegion( lr );
-  tree->SetRequestedRegion( rr );
-  tree->SetBufferedRegion( br );
-  tree->SetOrigin( ori );
-  tree->SetSpacing( spc );
-  tree->SetDirection( dir );
-  tree->Allocate( );
-  tree->Clear( );
-
-  // Read collisions
-  typedef typename _TTree::TCollision     _TCollision;
-  typedef typename _TTree::TCollisionsRow _TCollisionsRow;
-  typename _TTree::TCollisions coll;
-  unsigned long coll_size;
-  in >> coll_size;
-  for( unsigned long i = 0; i < coll_size; ++i )
-  {
-    coll.push_back( _TCollisionsRow( ) );
-
-    unsigned long row_size;
-    in >> row_size;
-    for( unsigned long j = 0; j < row_size; ++j )
-    {
-      typename _TTree::IndexType v;
-      for( unsigned int d = 0; d < dim; ++d )
-        if( d < _TTree::ImageDimension )
-          in >> v[ d ];
-      unsigned int b;
-      in >> b;
-      coll[ i ].push_back( _TCollision( v, b == 1 ) );
-      
-    } // rof
-
-  } // rof
-  tree->SetCollisions( coll );
-
-  // Read vertices
-  while( !in.eof( ) )
-  {
-    short fid;
-    double cost;
-    typename _TTree::IndexType v;
-    typename _TTree::IndexType::OffsetType p;
-    in >> fid >> cost;
-    for( unsigned int d = 0; d < dim; ++d )
-      if( d < _TTree::ImageDimension )
-        in >> v[ d ];
-    for( unsigned int d = 0; d < dim; ++d )
-      if( d < _TTree::ImageDimension )
-        in >> p[ d ];
-    tree->SetNode( v, v + p, fid, cost );
-
-  } // elihw
-
-  // Free buffer
-  delete [] buff;
-}
-
-#endif // __FPA__IO__MINIMUMSPANNINGTREEREADER__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/IO/MinimumSpanningTreeWriter.h b/lib/fpa/IO/MinimumSpanningTreeWriter.h
deleted file mode 100644 (file)
index 0b384fc..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef __FPA__IO__MINIMUMSPANNINGTREEWRITER__H__
-#define __FPA__IO__MINIMUMSPANNINGTREEWRITER__H__
-
-#include <string>
-#include <itkProcessObject.h>
-
-namespace fpa
-{
-  namespace IO
-  {
-    /**
-     */
-    template< class _TTree >
-    class MinimumSpanningTreeWriter
-      : public itk::ProcessObject
-    {
-    public:
-      typedef MinimumSpanningTreeWriter       Self;
-      typedef itk::ProcessObject              Superclass;
-      typedef itk::SmartPointer< Self >       Pointer;
-      typedef itk::SmartPointer< const Self > ConstPointer;
-
-      typedef _TTree TTree;
-
-    public:
-      itkNewMacro( Self );
-      itkTypeMacro( MinimumSpanningTreeWriter, itkProcessObject );
-
-      itkGetConstMacro( FileName, std::string );
-      itkSetMacro( FileName, std::string );
-
-    public:
-      void SetInput( const _TTree* input );
-      _TTree* GetInput( );
-      const _TTree* GetInput( ) const;
-      virtual void Update( ) ITK_OVERRIDE;
-
-    protected:
-      MinimumSpanningTreeWriter( );
-      virtual ~MinimumSpanningTreeWriter( );
-
-      virtual void GenerateData( ) ITK_OVERRIDE;
-
-    private:
-      // Purposely not implemented
-      MinimumSpanningTreeWriter( const Self& other );
-      Self& operator=( const Self& other );
-
-    protected:
-      std::string m_FileName;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/IO/MinimumSpanningTreeWriter.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IO__MINIMUMSPANNINGTREEWRITER__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/IO/MinimumSpanningTreeWriter.hxx b/lib/fpa/IO/MinimumSpanningTreeWriter.hxx
deleted file mode 100644 (file)
index d4b1f12..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-#ifndef __FPA__IO__MINIMUMSPANNINGTREEWRITER__HXX__
-#define __FPA__IO__MINIMUMSPANNINGTREEWRITER__HXX__
-
-#include <fstream>
-#include <sstream>
-#include <itkMacro.h>
-#include <itkOffset.h>
-#include <itkImageRegionConstIteratorWithIndex.h>
-
-// -------------------------------------------------------------------------
-template< class _TTree >
-void fpa::IO::MinimumSpanningTreeWriter< _TTree >::
-SetInput( const _TTree* input )
-{
-  this->itk::ProcessObject::SetNthInput( 0, const_cast< _TTree* >( input ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTree >
-_TTree* fpa::IO::MinimumSpanningTreeWriter< _TTree >::
-GetInput( )
-{
-  return(
-    dynamic_cast< _TTree* >( this->itk::ProcessObject::GetInput( 0 ) )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTree >
-const _TTree* fpa::IO::MinimumSpanningTreeWriter< _TTree >::
-GetInput( ) const
-{
-  return(
-    dynamic_cast< const _TTree* >( this->itk::ProcessObject::GetInput( 0 ) )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTree >
-void fpa::IO::MinimumSpanningTreeWriter< _TTree >::
-Update( )
-{
-  _TTree* input = this->GetInput( );
-  if( input != NULL )
-  {
-    input->UpdateOutputInformation( );
-    input->UpdateOutputData( );
-    this->GenerateData( );
-    this->ReleaseInputs( );
-
-  } // fi
-}
-
-// -------------------------------------------------------------------------
-template< class _TTree >
-fpa::IO::MinimumSpanningTreeWriter< _TTree >::
-MinimumSpanningTreeWriter( )
-  : Superclass( ),
-    m_FileName( "" )
-{
-  this->SetNumberOfRequiredInputs( 1 );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTree >
-fpa::IO::MinimumSpanningTreeWriter< _TTree >::
-~MinimumSpanningTreeWriter( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TTree >
-void fpa::IO::MinimumSpanningTreeWriter< _TTree >::
-GenerateData( )
-{
-  typedef itk::Offset< _TTree::ImageDimension > _TOffset;
-  _TOffset zero_off;
-  zero_off.Fill( 0 );
-  const _TTree* input = this->GetInput( );
-
-  // Create buffer
-  std::stringstream out;
-
-  // Get tree properties
-  unsigned int dim = _TTree::ImageDimension;
-  auto lr = input->GetLargestPossibleRegion( );
-  auto rr = input->GetRequestedRegion( );
-  auto br = input->GetBufferedRegion( );
-  auto ori = input->GetOrigin( );
-  auto spc = input->GetSpacing( );
-  auto dir = input->GetDirection( );
-
-  // Write tree dimension
-  out << dim << std::endl;
-  out << ( ( input->GetFillNodeQueue( ) )? 1: 0 ) << std::endl;
-
-  // Write tree regions
-  out << lr.GetIndex( )[ 0 ] << " " << lr.GetSize( )[ 0 ];
-  for( unsigned int d = 1; d < dim; ++d )
-    out << " " << lr.GetIndex( )[ d ] << " " << lr.GetSize( )[ d ];
-  out << std::endl;
-  out << rr.GetIndex( )[ 0 ] << " " << rr.GetSize( )[ 0 ];
-  for( unsigned int d = 1; d < dim; ++d )
-    out << " " << rr.GetIndex( )[ d ] << " " << rr.GetSize( )[ d ];
-  out << std::endl;
-  out << br.GetIndex( )[ 0 ] << " " << br.GetSize( )[ 0 ];
-  for( unsigned int d = 1; d < dim; ++d )
-    out << " " << br.GetIndex( )[ d ] << " " << br.GetSize( )[ d ];
-  out << std::endl;
-
-  // Write spatial properties
-  out << ori[ 0 ];
-  for( unsigned int d = 1; d < dim; ++d )
-    out << " " << ori[ d ];
-  out << std::endl;
-  out << spc[ 0 ];
-  for( unsigned int d = 1; d < dim; ++d )
-    out << " " << spc[ d ];
-  out << std::endl;
-  out << dir[ 0 ][ 0 ];
-  for( unsigned int d = 0; d < dim; ++d )
-    for( unsigned int e = 0; e < dim; ++e )
-      if( d != 0 || e != 0 )
-        out << " " << dir[ d ][ e ];
-  out << std::endl;
-
-  // Write collisions
-  auto& coll = input->GetCollisions( );
-  out << coll.size( ) << std::endl;
-  for( unsigned long i = 0; i < coll.size( ); ++i )
-  {
-    out << coll[ i ].size( );
-    for( unsigned long j = 0; j < coll[ i ].size( ); ++j )
-    {
-      for( unsigned int d = 0; d < dim; ++d )
-        out << " " << coll[ i ][ j ].first[ d ];
-      out << " " << coll[ i ][ j ].second << std::endl;
-
-    } // rof
-
-  } // rof
-
-  // Write vertices
-  itk::ImageRegionConstIteratorWithIndex< _TTree > vIt( input, rr );
-  for( vIt.GoToBegin( ); !vIt.IsAtEnd( ); ++vIt )
-  {
-    if(
-      vIt.Get( ).Parent != zero_off ||
-      vIt.Get( ).GlobalCost > double( 0 )
-      )
-    {
-      out << vIt.Get( ).FrontId << " " << vIt.Get( ).GlobalCost;
-      for( unsigned int d = 0; d < dim; ++d )
-        out << " " << vIt.GetIndex( )[ d ];
-      for( unsigned int d = 0; d < dim; ++d )
-        out << " " << vIt.Get( ).Parent[ d ];
-      out << std::endl;
-
-    } // fi
-
-  } // rof
-
-  // Real file write
-  std::ofstream file(
-    this->m_FileName.c_str( ), std::ios::binary | std::ios::trunc
-    );
-  if( !file )
-  {
-    itkExceptionMacro(
-      << "Error opening file to write a minimum spanning tree: \""
-      << this->m_FileName
-      << "\""
-      );
-    return;
-
-  } // fi
-  file.write( out.str( ).c_str( ), out.str( ).size( ) );
-  file.close( );
-}
-
-#endif // __FPA__IO__MINIMUMSPANNINGTREEWRITER__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Algorithm.h b/lib/fpa/Image/Algorithm.h
deleted file mode 100644 (file)
index 6d68bb5..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-#ifndef __FPA__IMAGE__ALGORITHM__H__
-#define __FPA__IMAGE__ALGORITHM__H__
-
-#include <itkImage.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    /**
-     * A generic front propagation algorithm were vertices are image pixels.
-     *
-     * @param I Input image type
-     * @param O Output image type
-     * @param A Base algorithm (RegionGrow, Dijkstra or FastMarching)
-     */
-    template< class I, class O, class A >
-    class Algorithm
-      : public A
-    {
-    public:
-      /// Standard class typdedefs
-      typedef Algorithm                       Self;
-      typedef A                               Superclass;
-      typedef itk::SmartPointer< Self >       Pointer;
-      typedef itk::SmartPointer< const Self > ConstPointer;
-
-      /// Template input values
-      typedef I TInputImage;
-      typedef O TOutputImage;
-
-      typedef typename Superclass::TVertex        TVertex;
-      typedef typename Superclass::TValue         TValue;
-      typedef typename Superclass::TResult        TResult;
-      typedef typename Superclass::TSpace         TSpace;
-      typedef typename Superclass::TVertexCompare TVertexCompare;
-
-    protected:
-      typedef typename Superclass::_TVertices      _TVertices;
-      typedef typename Superclass::_TCollision     _TCollision;
-      typedef typename Superclass::_TCollisionsRow _TCollisionsRow;
-      typedef typename Superclass::_TCollisions    _TCollisions;
-      typedef typename Superclass::_TNode          _TNode;
-      typedef typename Superclass::_TNodes         _TNodes;
-
-    public:
-      itkTypeMacro( Algorithm, TAlgorithm );
-
-      /// Set/Get
-      itkGetConstMacro( NeighborhoodOrder, unsigned int );
-      itkSetMacro( NeighborhoodOrder, unsigned int );
-
-    protected:
-      Algorithm( );
-      virtual ~Algorithm( );
-
-      virtual void _BeforeGenerateData( ) ITK_OVERRIDE;
-
-      // Graph-related abstract methods
-      virtual unsigned long _NumberOfVertices( ) const ITK_OVERRIDE;
-      virtual const TValue& _VertexValue( const TVertex& v ) const ITK_OVERRIDE;
-      virtual double _Distance(
-        const TVertex& a, const TVertex& b
-        ) const ITK_OVERRIDE;
-      virtual bool _HasEdge( const TVertex& a, const TVertex& b ) const ITK_OVERRIDE;
-      virtual void _Neighborhood(
-        _TVertices& neighborhood, const TVertex& v
-        ) const ITK_OVERRIDE;
-
-      // Results-related abstract methods
-      virtual void _InitResults( ) ITK_OVERRIDE;
-      virtual const TResult& _Result( const TVertex& v ) const ITK_OVERRIDE;
-      virtual void _SetResult( const TVertex& v, const _TNode& n ) ITK_OVERRIDE;
-
-    private:
-      // Purposely not implemented
-      Algorithm( const Self& other );
-      Self& operator=( const Self& other );
-
-    protected:
-      unsigned int m_NeighborhoodOrder;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Image/Algorithm.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IMAGE__ALGORITHM__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Algorithm.hxx b/lib/fpa/Image/Algorithm.hxx
deleted file mode 100644 (file)
index 2eda502..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-#ifndef __FPA__IMAGE__ALGORITHM__HXX__
-#define __FPA__IMAGE__ALGORITHM__HXX__
-
-#include <cmath>
-#include <itkConstNeighborhoodIterator.h>
-
-// -------------------------------------------------------------------------
-template< class I, class O, class A >
-fpa::Image::Algorithm< I, O, A >::
-Algorithm( )
-  : Superclass( ),
-    m_NeighborhoodOrder( 1 )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O, class A >
-fpa::Image::Algorithm< I, O, A >::
-~Algorithm( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O, class A >
-void fpa::Image::Algorithm< I, O, A >::
-_BeforeGenerateData( )
-{
-  this->Superclass::_BeforeGenerateData( );
-  this->AllocateOutputs( );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O, class A >
-unsigned long fpa::Image::Algorithm< I, O, A >::
-_NumberOfVertices( ) const
-{
-  return( this->GetInput( )->GetRequestedRegion( ).GetNumberOfPixels( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O, class A >
-const typename fpa::Image::Algorithm< I, O, A >::
-TValue& fpa::Image::Algorithm< I, O, A >::
-_VertexValue( const TVertex& v ) const
-{
-  return( this->GetInput( )->GetPixel( v ) );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O, class A >
-double fpa::Image::Algorithm< I, O, A >::
-_Distance( const TVertex& a, const TVertex& b ) const
-{
-  typename I::PointType pa, pb;
-  this->GetInput( )->TransformIndexToPhysicalPoint( a, pa );
-  this->GetInput( )->TransformIndexToPhysicalPoint( b, pb );
-  return( double( pa.EuclideanDistanceTo( pb ) ) );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O, class A >
-bool fpa::Image::Algorithm< I, O, A >::
-_HasEdge( const TVertex& a, const TVertex& b ) const
-{
-  unsigned long dist = 0;
-  for( unsigned int d = 0; d < I::ImageDimension; d++ )
-    dist += std::abs( long( a[ d ] ) - long( b[ d ] ) );
-  if( this->m_NeighborhoodOrder == 1 )
-    return( dist <= 1 );
-  else
-    return( dist <= I::ImageDimension );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O, class A >
-void fpa::Image::Algorithm< I, O, A >::
-_Neighborhood( _TVertices& neighborhood, const TVertex& v ) const
-{
-  typename I::RegionType reg = this->GetInput( )->GetRequestedRegion( );
-
-  neighborhood.clear( );
-  if( this->m_NeighborhoodOrder == 1 )
-  {
-    for( unsigned int d = 0; d < I::ImageDimension; d++ )
-    {
-      for( int i = -1; i <= 1; i += 2 )
-      {
-        TVertex n = v;
-        n[ d ] += i;
-        if( reg.IsInside( n ) )
-          neighborhood.push_back( n );
-
-      } // rof
-
-    } // rof
-  }
-  else
-  {
-    typedef itk::ConstNeighborhoodIterator< I > TNeighIt;
-    typename I::SizeType nSize;
-    nSize.Fill( 1 );
-
-    TNeighIt nIt( nSize, this->GetInput( ), reg );
-    nIt.SetLocation( v );
-    for( unsigned int i = 0; i < nIt.Size( ); i++ )
-    {
-      TVertex n = nIt.GetIndex( i );
-      if( n == v )
-        continue;
-      if( reg.IsInside( n ) )
-        neighborhood.push_back( n );
-
-    } // rof
-
-  } // fi
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O, class A >
-void fpa::Image::Algorithm< I, O, A >::
-_InitResults( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O, class A >
-const typename fpa::Image::Algorithm< I, O, A >::
-TResult& fpa::Image::Algorithm< I, O, A >::
-_Result( const TVertex& v ) const
-{
-  return( this->GetOutput( )->GetPixel( v ) );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O, class A >
-void fpa::Image::Algorithm< I, O, A >::
-_SetResult( const TVertex& v, const _TNode& n )
-{
-  this->Superclass::_SetResult( v, n );
-  this->GetOutput( )->SetPixel( v, n.Result );
-}
-
-#endif // __FPA__IMAGE__ALGORITHM__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Dijkstra.h b/lib/fpa/Image/Dijkstra.h
deleted file mode 100644 (file)
index f4da123..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef __FPA__IMAGE__DIJKSTRA__H__
-#define __FPA__IMAGE__DIJKSTRA__H__
-
-#include <itkFunctionBase.h>
-#include <itkImageToImageFilter.h>
-#include <fpa/Base/Dijkstra.h>
-#include <fpa/Image/Algorithm.h>
-#include <fpa/Image/MinimumSpanningTree.h>
-#include <fpa/Image/Functors/ImageCostFunction.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    /**
-     * @param I Input image type
-     * @param O Output image type
-     */
-    template< class I, class O = I >
-    class Dijkstra
-      : public Algorithm< I, O, fpa::Base::Dijkstra< typename I::IndexType, typename I::PixelType, typename O::PixelType, I, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, fpa::Image::MinimumSpanningTree< I::ImageDimension >, itk::ImageToImageFilter< I, O > > >
-    {
-    public:
-      typedef fpa::Base::Dijkstra< typename I::IndexType, typename I::PixelType, typename O::PixelType, I, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, fpa::Image::MinimumSpanningTree< I::ImageDimension >, itk::ImageToImageFilter< I, O > > TBaseAlgorithm;
-      typedef Dijkstra                          Self;
-      typedef Algorithm< I, O, TBaseAlgorithm > Superclass;
-      typedef itk::SmartPointer< Self >         Pointer;
-      typedef itk::SmartPointer< const Self >   ConstPointer;
-
-      typedef typename Superclass::TInputImage  TInputImage;
-      typedef typename Superclass::TOutputImage TOutputImage;
-      typedef typename Superclass::TVertex      TVertex;
-      typedef typename Superclass::TValue       TValue;
-      typedef typename Superclass::TResult      TResult;
-      typedef typename Superclass::TSpace       TSpace;
-
-      typedef typename Superclass::TStartEvent     TStartEvent;
-      typedef typename Superclass::TStartLoopEvent TStartLoopEvent;
-      typedef typename Superclass::TEndEvent       TEndEvent;
-      typedef typename Superclass::TEndLoopEvent   TEndLoopEvent;
-      typedef typename Superclass::TAliveEvent     TAliveEvent;
-      typedef typename Superclass::TFrontEvent     TFrontEvent;
-      typedef typename Superclass::TFreezeEvent    TFreezeEvent;
-
-      typedef typename Superclass::TStartBacktrackingEvent TStartBacktrackingEvent;
-      typedef typename Superclass::TEndBacktrackingEvent TEndBacktrackingEvent;
-      typedef typename Superclass::TBacktrackingEvent TBacktrackingEvent;
-
-      typedef typename TBaseAlgorithm::TMinimumSpanningTree TMinimumSpanningTree;
-
-      typedef fpa::Image::Functors::ImageCostFunction< TInputImage, TResult > TCostFunction;
-      typedef itk::FunctionBase< TResult, TResult > TConversionFunction;
-
-    protected:
-      typedef typename Superclass::_TVertices      _TVertices;
-      typedef typename Superclass::_TCollision     _TCollision;
-      typedef typename Superclass::_TCollisionsRow _TCollisionsRow;
-      typedef typename Superclass::_TCollisions    _TCollisions;
-      typedef typename Superclass::_TNode          _TNode;
-      typedef typename Superclass::_TNodes         _TNodes;
-
-    public:
-      itkNewMacro( Self );
-      itkTypeMacro( Dijkstra, Algorithm );
-
-      itkGetObjectMacro( CostFunction, TCostFunction );
-      itkGetObjectMacro( ConversionFunction, TConversionFunction );
-
-      itkGetConstObjectMacro( CostFunction, TCostFunction );
-      itkGetConstObjectMacro( ConversionFunction, TConversionFunction );
-
-      itkSetObjectMacro( CostFunction, TCostFunction );
-      itkSetObjectMacro( ConversionFunction, TConversionFunction );
-
-    protected:
-      Dijkstra( );
-      virtual ~Dijkstra( );
-
-      virtual TResult _Cost( const TVertex& v, const TVertex& p ) const ITK_OVERRIDE;
-
-      virtual void _BeforeGenerateData( ) ITK_OVERRIDE;
-      virtual void _AfterGenerateData( ) ITK_OVERRIDE;
-      virtual void _InitResults( ) ITK_OVERRIDE;
-
-    private:
-      // Purposely not implemented
-      Dijkstra( const Self& other );
-      Self& operator=( const Self& other );
-
-    protected:
-      typename TCostFunction::Pointer m_CostFunction;
-      typename TConversionFunction::Pointer m_ConversionFunction;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Image/Dijkstra.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IMAGE__DIJKSTRA__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Dijkstra.hxx b/lib/fpa/Image/Dijkstra.hxx
deleted file mode 100644 (file)
index 76df258..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-#ifndef __FPA__IMAGE__DIJKSTRA__HXX__
-#define __FPA__IMAGE__DIJKSTRA__HXX__
-
-#include <limits>
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-fpa::Image::Dijkstra< I, O >::
-Dijkstra( )
-  : Superclass( )
-{
-  this->m_CostFunction = TCostFunction::New( );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-fpa::Image::Dijkstra< I, O >::
-~Dijkstra( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-typename fpa::Image::Dijkstra< I, O >::
-TResult fpa::Image::Dijkstra< I, O >::
-_Cost( const TVertex& v, const TVertex& p ) const
-{
-  if( this->_HasEdge( v, p ) )
-  {
-    TResult c = this->m_CostFunction->Evaluate( v, p );
-    if( this->m_ConversionFunction.IsNotNull( ) )
-      c = this->m_ConversionFunction->Evaluate( c );
-    return( c );
-  }
-  else
-    return( std::numeric_limits< TResult >::max( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::Dijkstra< I, O >::
-_BeforeGenerateData( )
-{
-  this->Superclass::_BeforeGenerateData( );
-  this->m_CostFunction->SetInputImage( this->GetInput( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::Dijkstra< I, O >::
-_AfterGenerateData( )
-{
-  this->Superclass::_AfterGenerateData( );
-  this->GetMinimumSpanningTree( )->SetCollisions( this->m_Collisions );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::Dijkstra< I, O >::
-_InitResults( )
-{
-  this->Superclass::_InitResults( );
-  this->GetOutput( )->FillBuffer( TResult( 0 ) );
-}
-
-#endif // __FPA__IMAGE__DIJKSTRA__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/DijkstraWithEndPointDetection.h b/lib/fpa/Image/DijkstraWithEndPointDetection.h
deleted file mode 100644 (file)
index 2158f16..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-#ifndef __FPA__IMAGE__DIJKSTRAWITHENDPOINTDETECTION__H__
-#define __FPA__IMAGE__DIJKSTRAWITHENDPOINTDETECTION__H__
-
-#include <map>
-#include <itkImage.h>
-#include <fpa/Image/Dijkstra.h>
-#include <fpa/Base/MatrixValuesContainer.h>
-#include <fpa/Base/UniqueValuesContainer.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    /**
-     * @param I Input image type
-     * @param O Output image type
-     */
-    template< class I, class O >
-    class DijkstraWithEndPointDetection
-      : public Dijkstra< I, O >
-    {
-    public:
-      typedef DijkstraWithEndPointDetection   Self;
-      typedef Dijkstra< I, O >                Superclass;
-      typedef itk::SmartPointer< Self >       Pointer;
-      typedef itk::SmartPointer< const Self > ConstPointer;
-
-      typedef typename Superclass::TInputImage          TInputImage;
-      typedef typename Superclass::TOutputImage         TOutputImage;
-      typedef typename Superclass::TVertex              TVertex;
-      typedef typename Superclass::TVertexCompare       TVertexCompare;
-      typedef typename Superclass::TValue               TValue;
-      typedef typename Superclass::TResult              TResult;
-      typedef typename Superclass::TSpace               TSpace;
-      typedef typename Superclass::TMinimumSpanningTree TMinimumSpanningTree;
-      typedef typename Superclass::TCostFunction        TCostFunction;
-      typedef typename Superclass::TConversionFunction  TConversionFunction;
-      typedef typename Superclass::_TVertices           TVertices;
-
-      typedef typename Superclass::TStartEvent     TStartEvent;
-      typedef typename Superclass::TStartLoopEvent TStartLoopEvent;
-      typedef typename Superclass::TEndEvent       TEndEvent;
-      typedef typename Superclass::TEndLoopEvent   TEndLoopEvent;
-      typedef typename Superclass::TAliveEvent     TAliveEvent;
-      typedef typename Superclass::TFrontEvent     TFrontEvent;
-      typedef typename Superclass::TFreezeEvent    TFreezeEvent;
-
-      typedef typename
-      Superclass::TStartBacktrackingEvent TStartBacktrackingEvent;
-      typedef typename
-      Superclass::TEndBacktrackingEvent TEndBacktrackingEvent;
-      typedef typename
-      Superclass::TBacktrackingEvent TBacktrackingEvent;
-
-      typedef unsigned short                          TLabel;
-      typedef itk::Image< TLabel, I::ImageDimension > TLabelImage;
-
-      typedef fpa::Base::
-      UniqueValuesContainer< TVertex, TVertexCompare > TUniqueVertices;
-      typedef fpa::Base::
-      MatrixValuesContainer< TVertex, TLabel, TVertexCompare > TBranches;
-
-    protected:
-      typedef typename Superclass::_TVertices      _TVertices;
-      typedef typename Superclass::_TCollision     _TCollision;
-      typedef typename Superclass::_TCollisionsRow _TCollisionsRow;
-      typedef typename Superclass::_TCollisions    _TCollisions;
-      typedef typename Superclass::_TNode          _TNode;
-      typedef typename Superclass::_TNodes         _TNodes;
-
-      typedef typename I::PixelType  _TPixel;
-      typedef typename I::RegionType _TRegion;
-      typedef typename I::SizeType   _TSize;
-
-      typedef std::pair< TResult, TVertex >     _TCandidate;
-      typedef std::multimap< TResult, TVertex > _TCandidates;
-
-    public:
-      itkNewMacro( Self );
-      itkTypeMacro( DijkstraWithEndPointDetection, Dijkstra );
-
-      itkBooleanMacro( CorrectSeeds );
-      itkBooleanMacro( CorrectEndPoints );
-
-      itkGetConstMacro( CorrectSeeds, bool );
-      itkGetConstMacro( CorrectEndPoints, bool );
-      itkGetConstMacro( SafetyNeighborhoodSize, unsigned int );
-
-      itkGetConstMacro( NumberOfBranches, unsigned long );
-
-      itkSetMacro( CorrectSeeds, bool );
-      itkSetMacro( CorrectEndPoints, bool );
-      itkSetMacro( SafetyNeighborhoodSize, unsigned int );
-
-    public:
-      TLabelImage* GetLabelImage( );
-      const TLabelImage* GetLabelImage( ) const;
-      void GraftLabelImage( itk::DataObject* obj );
-
-      TUniqueVertices* GetEndPoints( );
-      const TUniqueVertices* GetEndPoints( ) const;
-      void GraftEndPoints( itk::DataObject* obj );
-
-      TUniqueVertices* GetBifurcations( );
-      const TUniqueVertices* GetBifurcations( ) const;
-      void GraftBifurcations( itk::DataObject* obj );
-
-      TBranches* GetBranches( );
-      const TBranches* GetBranches( ) const;
-      void GraftBranches( itk::DataObject* obj );
-
-    protected:
-      DijkstraWithEndPointDetection( );
-      virtual ~DijkstraWithEndPointDetection( );
-
-      virtual void _BeforeGenerateData( );
-      virtual void _AfterGenerateData( );
-      virtual void _SetResult( const TVertex& v, const _TNode& n );
-
-      void _EndPointsAndBifurcations( );
-      void _FindBranches( );
-      void _LabelAll( );
-
-      _TRegion _Region( const TVertex& c, const double& r );
-
-      template< class _T >
-      TVertex _MaxInRegion(
-        const _T* image, const TVertex& v, const double& r
-        );
-
-    private:
-      // Purposely not implemented
-      DijkstraWithEndPointDetection( const Self& other );
-      Self& operator=( const Self& other );
-
-    protected:
-      unsigned int m_LabelImageIndex;
-      unsigned int m_BifurcationsIndex;
-      unsigned int m_EndPointsIndex;
-      unsigned int m_BranchesIndex;
-
-      bool m_CorrectSeeds;
-      bool m_CorrectEndPoints;
-      unsigned int m_SafetyNeighborhoodSize;
-
-      _TCandidates  m_Candidates;
-      unsigned long m_NumberOfBranches;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Image/DijkstraWithEndPointDetection.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IMAGE__DIJKSTRAWITHENDPOINTDETECTION__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/DijkstraWithEndPointDetection.hxx b/lib/fpa/Image/DijkstraWithEndPointDetection.hxx
deleted file mode 100644 (file)
index 3bbf8c5..0000000
+++ /dev/null
@@ -1,561 +0,0 @@
-#ifndef __FPA__IMAGE__DIJKSTRAWITHENDPOINTDETECTION__HXX__
-#define __FPA__IMAGE__DIJKSTRAWITHENDPOINTDETECTION__HXX__
-
-#include <vector>
-#include <set>
-#include <itkImageRegionConstIteratorWithIndex.h>
-#include <itkImageRegionIteratorWithIndex.h>
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-typename fpa::Image::DijkstraWithEndPointDetection< I, O >::
-TLabelImage* fpa::Image::DijkstraWithEndPointDetection< I, O >::
-GetLabelImage( )
-{
-  return(
-    dynamic_cast< TLabelImage* >(
-      this->itk::ProcessObject::GetOutput( this->m_LabelImageIndex )
-      )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-const typename fpa::Image::DijkstraWithEndPointDetection< I, O >::
-TLabelImage* fpa::Image::DijkstraWithEndPointDetection< I, O >::
-GetLabelImage( ) const
-{
-  return(
-    dynamic_cast< const TLabelImage* >(
-      this->itk::ProcessObject::GetOutput( this->m_LabelImageIndex )
-      )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::DijkstraWithEndPointDetection< I, O >::
-GraftLabelImage( itk::DataObject* obj )
-{
-  TLabelImage* lbl =
-    dynamic_cast< TLabelImage* >(
-      this->itk::ProcessObject::GetOutput( this->m_LabelImageIndex )
-      );
-  if( lbl != NULL )
-    this->GraftNthOutput( this->m_LabelImageIndex, lbl );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-typename fpa::Image::DijkstraWithEndPointDetection< I, O >::
-TUniqueVertices* fpa::Image::DijkstraWithEndPointDetection< I, O >::
-GetEndPoints( )
-{
-  return(
-    dynamic_cast< TUniqueVertices* >(
-      this->itk::ProcessObject::GetOutput( this->m_EndPointsIndex )
-      )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-const typename fpa::Image::DijkstraWithEndPointDetection< I, O >::
-TUniqueVertices* fpa::Image::DijkstraWithEndPointDetection< I, O >::
-GetEndPoints( ) const
-{
-  return(
-    dynamic_cast< const TUniqueVertices* >(
-      this->itk::ProcessObject::GetOutput( this->m_EndPointsIndex )
-      )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::DijkstraWithEndPointDetection< I, O >::
-GraftEndPoints( itk::DataObject* obj )
-{
-  TUniqueVertices* lbl =
-    dynamic_cast< TUniqueVertices* >(
-      this->itk::ProcessObject::GetOutput( this->m_EndPointsIndex )
-      );
-  if( lbl != NULL )
-    this->GraftNthOutput( this->m_EndPointsIndex, lbl );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-typename fpa::Image::DijkstraWithEndPointDetection< I, O >::
-TUniqueVertices* fpa::Image::DijkstraWithEndPointDetection< I, O >::
-GetBifurcations( )
-{
-  return(
-    dynamic_cast< TUniqueVertices* >(
-      this->itk::ProcessObject::GetOutput( this->m_BifurcationsIndex )
-      )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-const typename fpa::Image::DijkstraWithEndPointDetection< I, O >::
-TUniqueVertices* fpa::Image::DijkstraWithEndPointDetection< I, O >::
-GetBifurcations( ) const
-{
-  return(
-    dynamic_cast< const TUniqueVertices* >(
-      this->itk::ProcessObject::GetOutput( this->m_BifurcationsIndex )
-      )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::DijkstraWithEndPointDetection< I, O >::
-GraftBifurcations( itk::DataObject* obj )
-{
-  TUniqueVertices* lbl =
-    dynamic_cast< TUniqueVertices* >(
-      this->itk::ProcessObject::GetOutput( this->m_BifurcationsIndex )
-      );
-  if( lbl != NULL )
-    this->GraftNthOutput( this->m_BifurcationsIndex, lbl );
-}
-
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-typename fpa::Image::DijkstraWithEndPointDetection< I, O >::
-TBranches* fpa::Image::DijkstraWithEndPointDetection< I, O >::
-GetBranches( )
-{
-  return(
-    dynamic_cast< TBranches* >(
-      this->itk::ProcessObject::GetOutput( this->m_BranchesIndex )
-      )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-const typename fpa::Image::DijkstraWithEndPointDetection< I, O >::
-TBranches* fpa::Image::DijkstraWithEndPointDetection< I, O >::
-GetBranches( ) const
-{
-  return(
-    dynamic_cast< const TBranches* >(
-      this->itk::ProcessObject::GetOutput( this->m_BranchesIndex )
-      )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::DijkstraWithEndPointDetection< I, O >::
-GraftBranches( itk::DataObject* obj )
-{
-  TBranches* lbl =
-    dynamic_cast< TBranches* >(
-      this->itk::ProcessObject::GetOutput( this->m_BranchesIndex )
-      );
-  if( lbl != NULL )
-    this->GraftNthOutput( this->m_BranchesIndex, lbl );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-fpa::Image::DijkstraWithEndPointDetection< I, O >::
-DijkstraWithEndPointDetection( )
-  : Superclass( ),
-    m_CorrectSeeds( true ),
-    m_CorrectEndPoints( true ),
-    m_SafetyNeighborhoodSize( 3 )
-{
-  this->m_LabelImageIndex = this->GetNumberOfRequiredOutputs( );
-  this->m_EndPointsIndex = this->m_LabelImageIndex + 1;
-  this->m_BifurcationsIndex = this->m_LabelImageIndex + 2;
-  this->m_BranchesIndex = this->m_LabelImageIndex + 3;
-  this->SetNumberOfRequiredOutputs( this->m_LabelImageIndex + 4 );
-  this->itk::ProcessObject::SetNthOutput(
-    this->m_LabelImageIndex, TLabelImage::New( )
-    );
-  this->itk::ProcessObject::SetNthOutput(
-    this->m_EndPointsIndex, TUniqueVertices::New( )
-    );
-  this->itk::ProcessObject::SetNthOutput(
-    this->m_BifurcationsIndex, TUniqueVertices::New( )
-    );
-  this->itk::ProcessObject::SetNthOutput(
-    this->m_BranchesIndex, TBranches::New( )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-fpa::Image::DijkstraWithEndPointDetection< I, O >::
-~DijkstraWithEndPointDetection( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::DijkstraWithEndPointDetection< I, O >::
-_BeforeGenerateData( )
-{
-  if( this->m_CorrectSeeds )
-  {
-    const I* input = this->GetInput( );
-    typename I::SpacingType spac = input->GetSpacing( );
-    double max_spac = double( spac[ 0 ] );
-    for( unsigned int d = 1; d < I::ImageDimension; ++d )
-      max_spac =
-        ( double( spac[ d ] ) > max_spac )? double( spac[ d ] ): max_spac;
-    max_spac *= double( 3 );
-
-    // Correct seeds
-    for( unsigned int s = 0; s < this->m_SeedVertices.size( ); ++s )
-    {
-      TVertex seed = this->m_SeedVertices[ s ];
-      _TNode n = this->m_Seeds[ seed ];
-      _TRegion region = this->_Region( seed, max_spac );
-      itk::ImageRegionConstIteratorWithIndex< I > iIt( input, region );
-
-      iIt.GoToBegin( );
-      _TPixel max_value = iIt.Get( );
-      for( ++iIt; !iIt.IsAtEnd( ); ++iIt )
-      {
-        if( iIt.Get( ) > max_value )
-        {
-          this->m_SeedVertices[ s ] = iIt.GetIndex( );
-          max_value = iIt.Get( );
-
-        } // fi
-
-      } // rof
-      this->m_Seeds.erase( seed );
-      n.Parent = this->m_SeedVertices[ s ];
-      this->m_Seeds[ this->m_SeedVertices[ s ] ] = n;
-
-    } // rof
-
-  } // fi
-
-  // End initialization
-  this->Superclass::_BeforeGenerateData( );
-  this->m_Candidates.clear( );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::DijkstraWithEndPointDetection< I, O >::
-_AfterGenerateData( )
-{
-  // Finish base algorithm
-  this->Superclass::_AfterGenerateData( );
-
-  // Check if backtracking has any sense
-  if( this->m_Candidates.size( ) == 0 )
-    return;
-  this->InvokeEvent( TEndEvent( ) );
-  this->InvokeEvent( TStartBacktrackingEvent( ) );
-
-  // Detect endpoints and bifurcations
-  this->_EndPointsAndBifurcations( );
-
-  // Find branches
-  this->_FindBranches( );
-
-  // Label pixels and branches
-  this->_LabelAll( );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::DijkstraWithEndPointDetection< I, O >::
-_SetResult( const TVertex& v, const _TNode& n )
-{
-  this->Superclass::_SetResult( v, n );
-  this->m_Candidates.insert( _TCandidate( n.Result, v ) );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::DijkstraWithEndPointDetection< I, O >::
-_EndPointsAndBifurcations( )
-{
-  // Prepare backtracking objects
-  TUniqueVertices* endpoints = this->GetEndPoints( );
-  TUniqueVertices* bifurcations = this->GetBifurcations( );
-  endpoints->Clear( );
-  bifurcations->Clear( );
-
-  // Get some input values
-  TVertex seed = this->GetSeed( 0 );
-  const I* input = this->GetInput( );
-  const TMinimumSpanningTree* mst = this->GetMinimumSpanningTree( );
-
-  // Prepare a pixel marks structure
-  typedef std::map< TVertex, bool, TVertexCompare > _TPixelMarks;
-  _TPixelMarks pixel_marks;
-
-  // Object to hold tree-nodes marks
-  typedef std::set< TVertex, TVertexCompare > _TTreeMarks;
-  _TTreeMarks tree_marks;
-
-  // Iterate over the candidates, starting from the candidates that
-  // are near thin branches (high accumulated cost)
-  typename _TCandidates::const_reverse_iterator cIt =
-    this->m_Candidates.rbegin( );
-  for( ; cIt != this->m_Candidates.rend( ); ++cIt )
-  {
-    // If pixel has already been visited, pass
-    TVertex v = cIt->second;
-    if( pixel_marks[ v ] )
-      continue;
-
-    // Correct it to nearest start candidate (high distance value)
-    double vr = std::sqrt( double( input->GetPixel( v ) ) );
-    if( this->m_CorrectEndPoints )
-      v = this->_MaxInRegion( input, v, vr * double( 1.5 ) );
-
-    // Now, check for real marking conditions
-    //   1. Has it been visited by dijkstra?
-    if( this->_Node( v ).Label == Self::FarLabel )
-      continue;
-    //   2. Is it already marked?
-    if( pixel_marks[ v ] )
-      continue;
-    //   3. Is it already an endpoint?
-    if( endpoints->Find( v ) )
-      continue;
-    //   4. Ok, it is completely new!
-    endpoints->Insert( v );
-
-    // Get the path all the way to global seed
-    TVertices path = mst->GetPath( v, seed );
-
-    // Backtracking to find endpoints and bifurcations
-    bool adding_new_points = true;
-    typename TVertices::const_iterator pIt = path.begin( );
-    for( ; pIt != path.end( ) && adding_new_points; ++pIt )
-    {
-      this->InvokeEvent( TBacktrackingEvent( *pIt, 1 ) );
-      if( tree_marks.find( *pIt ) == tree_marks.end( ) )
-      {
-        // Mark current point as a tree point
-        tree_marks.insert( *pIt );
-
-        // Mark a region around current point as visited
-        vr = std::sqrt( double( input->GetPixel( *pIt ) ) );
-        _TRegion region = this->_Region( *pIt, vr );
-        if( region.GetNumberOfPixels( ) > 0 )
-        {
-          itk::ImageRegionConstIteratorWithIndex< I > iIt( input, region );
-          for( iIt.GoToBegin( ); !iIt.IsAtEnd( ); ++iIt )
-            pixel_marks[ iIt.GetIndex( ) ] = true;
-        }
-        else
-          pixel_marks[ *pIt ] = true;
-      }
-      else
-      {
-        // A bifurcation point has been reached!
-        if( *pIt != seed )
-        {
-          bifurcations->Insert( *pIt );
-          adding_new_points = false;
-
-        } // fi
-
-      } // fi
-
-    } // rof
-    this->InvokeEvent( TEndBacktrackingEvent( ) );
-
-  } // rof
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::DijkstraWithEndPointDetection< I, O >::
-_FindBranches( )
-{
-  // Configure and obtain inputs
-  TVertex seed = this->GetSeed( 0 );
-  const TMinimumSpanningTree* mst = this->GetMinimumSpanningTree( );
-  const TUniqueVertices* endpoints = this->GetEndPoints( );
-  const TUniqueVertices* bifurcations = this->GetBifurcations( );
-  TBranches* branches = this->GetBranches( );
-  branches->Clear( );
-
-  // Reconstruct pixels
-  typename TUniqueVertices::ConstIterator eIt = endpoints->Begin( );
-  for( ; eIt != endpoints->End( ); ++eIt )
-  {
-    // Get the path all the way to global seed
-    TVertices path = mst->GetPath( *eIt, seed );
-
-    TVertex start_vertex = *eIt;
-    typename TVertices::const_iterator pIt = path.begin( );
-    for( ; pIt != path.end( ); ++pIt )
-    {
-      if( bifurcations->Find( *pIt ) )
-      {
-        branches->SetValue( start_vertex, *pIt, 1 );
-        start_vertex = *pIt;
-
-      } // fi
-
-    } // rof
-
-    // Finish with branches to global seed
-    branches->SetValue( start_vertex, seed, 1 );
-
-  } // rof
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::DijkstraWithEndPointDetection< I, O >::
-_LabelAll( )
-{
-  // Configure and obtain inputs
-  const I* input = this->GetInput( );
-  const TMinimumSpanningTree* mst = this->GetMinimumSpanningTree( );
-  const TUniqueVertices* bifurcations = this->GetBifurcations( );
-  TBranches* branches = this->GetBranches( );
-  TLabelImage* label = this->GetLabelImage( );
-  label->FillBuffer( 0 );
-
-  // Label branches
-  typename TBranches::Iterator bIt = branches->Begin( );
-  TLabel actual_label = 0;
-  for( ; bIt != branches->End( ); ++bIt )
-  {
-    typename TBranches::RowIterator brIt = branches->Begin( bIt );
-    for( ; brIt != branches->End( bIt ); ++brIt )
-    {
-      actual_label++;
-      brIt->second = actual_label;
-
-      TVertices path = mst->GetPath( bIt->first, brIt->first );
-      typename TVertices::const_iterator pIt = path.begin( );
-      for( ; pIt != path.end( ); ++pIt )
-      {
-        double d = std::sqrt( double( input->GetPixel( *pIt ) ) );
-        _TRegion region = this->_Region( *pIt, d );
-        itk::ImageRegionConstIteratorWithIndex< I > iIt( input, region );
-        itk::ImageRegionIteratorWithIndex< TLabelImage > lIt( label, region );
-        iIt.GoToBegin( );
-        lIt.GoToBegin( );
-        for( ; !iIt.IsAtEnd( ); ++iIt, ++lIt )
-        {
-          // Mask real input image
-          if(
-            !( iIt.Get( ) < ( typename I::PixelType )( 0 ) ) &&
-            lIt.Get( ) == TLabel( 0 )
-            )
-            lIt.Set( actual_label );
-          
-        } // rof
-
-      } // rof
-
-    } // rof
-
-  } // rof
-  this->m_NumberOfBranches = actual_label;
-
-  // Label bifurcations
-  typename TUniqueVertices::ConstIterator bifIt =
-    bifurcations->Begin( );
-  for( ; bifIt != bifurcations->End( ); ++bifIt )
-  {
-    actual_label++;
-    double d = std::sqrt( double( input->GetPixel( *bifIt ) ) );
-    _TRegion region = this->_Region( *bifIt, d * 1.5 );
-    itk::ImageRegionConstIteratorWithIndex< I > iIt( input, region );
-    itk::ImageRegionIteratorWithIndex< TLabelImage > lIt( label, region );
-    iIt.GoToBegin( );
-    lIt.GoToBegin( );
-    for( ; !iIt.IsAtEnd( ); ++iIt, ++lIt )
-    {
-      // Mask real input image
-      if( !( iIt.Get( ) < ( typename I::PixelType )( 0 ) ) )
-        lIt.Set( actual_label );
-
-    } // rof
-
-  } // rof
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-typename fpa::Image::DijkstraWithEndPointDetection< I, O >::
-_TRegion fpa::Image::DijkstraWithEndPointDetection< I, O >::
-_Region( const TVertex& c, const double& r )
-{
-  typename I::ConstPointer input = this->GetInput( );
-  typename I::SpacingType spac = input->GetSpacing( );
-  _TRegion region = input->GetLargestPossibleRegion( );
-  typename I::IndexType idx0 = region.GetIndex( );
-  typename I::IndexType idx1 = idx0 + region.GetSize( );
-
-  // Compute region size and index
-  typename I::IndexType i0, i1;
-  _TSize size;
-  for( unsigned int d = 0; d < I::ImageDimension; ++d )
-  {
-    // NOTE: 3 is a minimum neighborhood size
-    long s =
-      long( std::ceil( r / double( spac[ d ] ) ) ) +
-      long( this->m_SafetyNeighborhoodSize );
-    i0[ d ] = c[ d ] - s;
-    i1[ d ] = c[ d ] + s;
-
-    if( i0[ d ] < idx0[ d ] ) i0[ d ] = idx0[ d ];
-    if( i1[ d ] < idx0[ d ] ) i1[ d ] = idx0[ d ];
-    if( i0[ d ] > idx1[ d ] ) i0[ d ] = idx1[ d ];
-    if( i1[ d ] > idx1[ d ] ) i1[ d ] = idx1[ d ];
-    size[ d ] = i1[ d ] - i0[ d ];
-
-  }  // rof
-
-  // Prepare region and return it
-  region.SetIndex( i0 );
-  region.SetSize( size );
-
-  return( region );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-template< class _T > 
-typename fpa::Image::DijkstraWithEndPointDetection< I, O >::
-TVertex fpa::Image::DijkstraWithEndPointDetection< I, O >::
-_MaxInRegion( const _T* image, const TVertex& v, const double& r )
-{
-  typedef itk::ImageRegionConstIteratorWithIndex< _T > _TIt;
-
-  _TIt iIt( image, this->_Region( v, r ) );
-  iIt.GoToBegin( );
-  TVertex max_vertex = iIt.GetIndex( );
-  typename _T::PixelType max_value = iIt.Get( );
-  for( ++iIt; !iIt.IsAtEnd( ); ++iIt )
-  {
-    typename _T::PixelType value = iIt.Get( );
-    if( value > max_value )
-    {
-      max_value = value;
-      max_vertex = iIt.GetIndex( );
-
-    } // fi
-
-  } // rof
-  return( max_vertex );
-}
-
-#endif // __FPA__IMAGE__DIJKSTRAWITHENDPOINTDETECTION__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h b/lib/fpa/Image/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h
deleted file mode 100644 (file)
index 002afb4..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#ifndef __FPA__IMAGE__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__H__
-#define __FPA__IMAGE__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__H__
-
-#include <fpa/Base/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h>
-#include <fpa/Base/ImageSkeleton.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    /**
-     */
-    template< class _TImage, class _TMST >
-    class ExtractEndPointsAndBifurcationsFromMinimumSpanningTree
-      : public fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >
-    {
-    public:
-      typedef
-        fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TMST >
-        Superclass;
-      typedef ExtractEndPointsAndBifurcationsFromMinimumSpanningTree Self;
-      typedef itk::SmartPointer< Self >                              Pointer;
-      typedef itk::SmartPointer< const Self >                        ConstPointer;
-
-      typedef _TImage TImage;
-      typedef typename Superclass::TMinimumSpanningTree TMinimumSpanningTree;
-      typedef typename Superclass::TVertex              TVertex;
-
-      typedef itk::Image< unsigned short, TImage::ImageDimension > TMarkImage;
-      typedef fpa::Base::ImageSkeleton< _TMST > TSkeleton;
-
-    public:
-      itkNewMacro( Self );
-      itkTypeMacro(
-        ExtractEndPointsAndBifurcationsFromMinimumSpanningTree,
-        fpa::Base::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree
-        );
-
-      itkBooleanMacro( SquaredDistanceMap );
-      itkGetConstMacro( SquaredDistanceMap, bool );
-      itkSetMacro( SquaredDistanceMap, bool );
-
-    public:
-      const TImage* GetCostsImage( );
-      const TImage* GetDistanceMap( );
-      TSkeleton* GetSkeleton( );
-      void SetCostsImage( TImage* image );
-      void SetDistanceMap( TImage* image );
-
-    protected:
-      ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( );
-      virtual ~ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( );
-
-      virtual void GenerateData( ) ITK_OVERRIDE;
-
-      virtual void _MarkSkeleton(
-        const TVertex& v, const unsigned long& l
-        ) ITK_OVERRIDE;
-      virtual void _MarkSphere(
-        const TVertex& v,
-        const double& r,
-        const unsigned long& l
-        ) ITK_OVERRIDE;
-      virtual unsigned long _Mark( const TVertex& v ) ITK_OVERRIDE;
-      virtual unsigned long _SkeletonMark( const TVertex& v ) ITK_OVERRIDE;
-      virtual double _Radius( const TVertex& v ) ITK_OVERRIDE;
-
-      virtual void _Tmp( ) ITK_OVERRIDE
-        {
-        }
-
-    private:
-      // Purposely not implemented
-      ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( const Self& other );
-      Self& operator=( const Self& other );
-
-    protected:
-      typename TMarkImage::Pointer m_MarkImage;
-      typename TMarkImage::Pointer m_SkeletonImage;
-      bool m_SquaredDistanceMap;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Image/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IMAGE__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.hxx b/lib/fpa/Image/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.hxx
deleted file mode 100644 (file)
index cdc34fb..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-#ifndef __FPA__IMAGE__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__HXX__
-#define __FPA__IMAGE__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__HXX__
-
-#include <cmath>
-#include <itkImageRegionIteratorWithIndex.h>
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TMST >
-const typename
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-TImage*
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-GetCostsImage( )
-{
-  return(
-    dynamic_cast< const _TImage* >( this->itk::ProcessObject::GetInput( 1 ) )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TMST >
-const typename
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-TImage*
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-GetDistanceMap( )
-{
-  return(
-    dynamic_cast< const _TImage* >( this->itk::ProcessObject::GetInput( 2 ) )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TMST >
-typename
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-TSkeleton*
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-GetSkeleton( )
-{
-  return(
-    dynamic_cast< TSkeleton* >(
-      this->itk::ProcessObject::GetOutput(
-        this->GetNumberOfRequiredOutputs( ) - 1
-        )
-      )
-    );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TMST >
-void
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-SetCostsImage( TImage* image )
-{
-  this->itk::ProcessObject::SetNthInput( 1, const_cast< _TImage* >( image ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TMST >
-void
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-SetDistanceMap( TImage* image )
-{
-  this->itk::ProcessObject::SetNthInput( 2, const_cast< _TImage* >( image ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TMST >
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
-  : Superclass( ),
-    m_SquaredDistanceMap( false )
-{
-  this->SetNumberOfRequiredInputs( 3 );
-  unsigned int nOuts = this->GetNumberOfRequiredOutputs( );
-  this->SetNumberOfRequiredOutputs( nOuts + 1 );
-  typename TSkeleton::Pointer sk = TSkeleton::New( );
-  this->itk::ProcessObject::SetNthOutput( nOuts, sk.GetPointer( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TMST >
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-~ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TMST >
-void
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-GenerateData( )
-{
-  // Create auxiliary objects
-  auto image = this->GetCostsImage( );
-  this->m_MarkImage = TMarkImage::New( );
-  this->m_MarkImage->SetLargestPossibleRegion( image->GetLargestPossibleRegion( ) );
-  this->m_MarkImage->SetRequestedRegion( image->GetRequestedRegion( ) );
-  this->m_MarkImage->SetBufferedRegion( image->GetBufferedRegion( ) );
-  this->m_MarkImage->SetDirection( image->GetDirection( ) );
-  this->m_MarkImage->SetOrigin( image->GetOrigin( ) );
-  this->m_MarkImage->SetSpacing( image->GetSpacing( ) );
-  this->m_MarkImage->Allocate( );
-  this->m_MarkImage->FillBuffer( 0 );
-  this->m_SkeletonImage = TMarkImage::New( );
-  this->m_SkeletonImage->SetLargestPossibleRegion( image->GetLargestPossibleRegion( ) );
-  this->m_SkeletonImage->SetRequestedRegion( image->GetRequestedRegion( ) );
-  this->m_SkeletonImage->SetBufferedRegion( image->GetBufferedRegion( ) );
-  this->m_SkeletonImage->SetDirection( image->GetDirection( ) );
-  this->m_SkeletonImage->SetOrigin( image->GetOrigin( ) );
-  this->m_SkeletonImage->SetSpacing( image->GetSpacing( ) );
-  this->m_SkeletonImage->Allocate( );
-  this->m_SkeletonImage->FillBuffer( 0 );
-
-  // Real execution
-  this->Superclass::GenerateData( );
-
-  // Build skeleton
-  auto sk = this->GetSkeleton( );
-  sk->SetMinimumSpanningTree( this->GetMinimumSpanningTree( ) );
-  auto bIt = this->m_Branches.begin( );
-  for( ; bIt != this->m_Branches.end( ); ++bIt )
-    sk->AddBranch( bIt->second, bIt->first );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TMST >
-void
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-_MarkSkeleton( const TVertex& v, const unsigned long& l )
-{
-  if( this->m_SkeletonImage->GetRequestedRegion( ).IsInside( v ) )
-    this->m_SkeletonImage->SetPixel( v, l );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TMST >
-void
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-_MarkSphere(
-  const TVertex& v,
-  const double& r,
-  const unsigned long& l
-  )
-{
-  double rr = r * double( 1.1 );
-
-  // Get marking region
-  auto rreg = this->m_MarkImage->GetRequestedRegion( );
-  auto spac = this->m_MarkImage->GetSpacing( );
-  TVertex ireg = rreg.GetIndex( );
-  TVertex jreg = ireg + rreg.GetSize( );
-  TVertex idx, jdx;
-  typename _TImage::SizeType size;
-  bool all = false;
-  for( unsigned int d = 0; d < _TImage::ImageDimension; ++d )
-  {
-    unsigned long s = std::ceil( rr / double( spac[ d ] ) );
-    if( s < 3 )
-    {
-      s = 3;
-      all = true;
-
-    } // fi
-    s += 3;
-    idx[ d ] = v[ d ] - s;
-    jdx[ d ] = v[ d ] + s;
-
-    jreg[ d ]--;
-    if( idx[ d ] < ireg[ d ] ) idx[ d ] = ireg[ d ];
-    if( idx[ d ] > jreg[ d ] ) idx[ d ] = jreg[ d ];
-    if( jdx[ d ] < ireg[ d ] ) jdx[ d ] = ireg[ d ];
-    if( jdx[ d ] > jreg[ d ] ) jdx[ d ] = jreg[ d ];
-    size[ d ] = jdx[ d ] - idx[ d ] + 1;
-
-  } // rof
-  typename _TImage::RegionType region;
-  region.SetIndex( idx );
-  region.SetSize( size );
-
-  // Mark region
-  typename _TImage::PointType c;
-  this->m_MarkImage->TransformIndexToPhysicalPoint( v, c );
-  itk::ImageRegionIteratorWithIndex< TMarkImage >
-    spIt( this->m_MarkImage, region );
-  for( spIt.GoToBegin( ); !spIt.IsAtEnd( ); ++spIt )
-  {
-    typename _TImage::PointType pnt;
-    this->m_MarkImage->TransformIndexToPhysicalPoint( spIt.GetIndex( ), pnt );
-    /*
-      if( double( pnt.EuclideanDistanceTo( c ) ) <= rr || all )
-      if( spIt.Get( ) == 0 )
-    */
-    spIt.Set( l );
-
-  } // rof
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TMST >
-unsigned long
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-_Mark( const TVertex& v )
-{
-  return( this->m_MarkImage->GetPixel( v ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TMST >
-unsigned long fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-_SkeletonMark( const TVertex& v )
-{
-  return( this->m_SkeletonImage->GetPixel( v ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TMST >
-double
-fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST >::
-_Radius( const TVertex& v )
-{
-  double d = double( this->GetDistanceMap( )->GetPixel( v ) );
-  double s = std::fabs( d );
-  if( s > double( 0 ) )
-    s /= d;
-  if( this->m_SquaredDistanceMap )
-    return( s * std::sqrt( std::fabs( d ) ) );
-  else
-    return( d );
-}
-
-#endif // __FPA__IMAGE__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/FastMarching.h b/lib/fpa/Image/FastMarching.h
deleted file mode 100644 (file)
index d86d99d..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef __FPA__IMAGE__FASTMARCHING__H__
-#define __FPA__IMAGE__FASTMARCHING__H__
-
-#include <itkImage.h>
-#include <itkImageFunction.h>
-#include <itkImageToImageFilter.h>
-#include <itkIndex.h>
-#include <fpa/Base/FastMarching.h>
-#include <fpa/Image/Algorithm.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    /**
-     * @param I Input image type
-     */
-    template< class I, class C >
-    class FastMarching
-      : public Algorithm< I, fpa::Base::FastMarching< typename I::IndexType, C, typename I::PixelType, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, itk::ImageToImageFilter< I, itk::Image< C, I::ImageDimension > > > >
-    {
-    public:
-      // Standard class typdedefs
-      typedef typename I::IndexType TVertex;
-      typedef typename I::PixelType TVertexValue;
-      typedef itk::Image< C, I::ImageDimension > TCostImage;
-      typedef itk::ImageToImageFilter< I, TCostImage > TBaseFilter;
-      typedef fpa::Base::FastMarching< TVertex, C, TVertexValue, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, TBaseFilter > TBaseAlgorithm;
-
-      typedef FastMarching                        Self;
-      typedef Algorithm< I, TBaseAlgorithm >  Superclass;
-      typedef itk::SmartPointer< Self >       Pointer;
-      typedef itk::SmartPointer< const Self > ConstPointer;
-
-    public:
-      itkNewMacro( Self );
-      itkTypeMacro( FastMarching, fpaBaseFastMarching );
-
-    protected:
-      FastMarching( )
-        : Superclass( )
-        { }
-      virtual ~FastMarching( )
-        { }
-
-    private:
-      // Purposely not implemented
-      FastMarching( const Self& );
-      void operator=( const Self& );
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#endif // __FPA__IMAGE__FASTMARCHING__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/FluxMedialness.h b/lib/fpa/Image/Functors/FluxMedialness.h
deleted file mode 100644 (file)
index 4aa7e8a..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__FLUXMEDIALNESS__H__
-#define __FPA__IMAGE__FUNCTORS__FLUXMEDIALNESS__H__
-
-#include <fpa/Image/Functors/GradientImageFunctionBase.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    namespace Functors
-    {
-      /**
-       */
-      template< class _TGradient >
-      class FluxMedialness
-        : public GradientImageFunctionBase< _TGradient >
-      {
-      public:
-        typedef FluxMedialness                          Self;
-        typedef GradientImageFunctionBase< _TGradient > Superclass;
-        typedef itk::SmartPointer< Self >               Pointer;
-        typedef itk::SmartPointer< const Self >         ConstPointer;
-
-        itkStaticConstMacro( Dimension, unsigned int, Superclass::Dimension );
-
-        typedef typename Superclass::TOutput TOutput;
-        typedef typename Superclass::TScalar TScalar;
-        typedef typename Superclass::TIndex  TIndex;
-        typedef typename Superclass::TVector TVector;
-        typedef typename Superclass::TPoint  TPoint;
-
-        typedef std::vector< double > TRCandidates;
-
-      public:
-        itkNewMacro( Self );
-        itkTypeMacro( FluxMedialness, GradientImageFunctionBase );
-
-        itkGetConstMacro( RadiusStep, double );
-        itkGetConstMacro( MinRadius, double );
-        itkGetConstMacro( MaxRadius, double );
-        itkGetConstMacro( RadialSampling, unsigned int );
-
-        itkSetMacro( RadiusStep, double );
-        itkSetMacro( MinRadius, double );
-        itkSetMacro( MaxRadius, double );
-        itkSetMacro( RadialSampling, unsigned int );
-
-      protected:
-        FluxMedialness( );
-        virtual ~FluxMedialness( );
-
-        virtual TOutput _Evaluate( const TIndex& i ) const ITK_OVERRIDE;
-
-      private:
-        // Purposely not implemented.
-        FluxMedialness( const Self& );
-        void operator=( const Self& );
-
-      protected:
-        double       m_MinRadius;
-        double       m_MaxRadius;
-        unsigned int m_RadialSampling;
-        double       m_RadiusStep;
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Image/Functors/FluxMedialness.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IMAGE__FUNCTORS__FLUXMEDIALNESS__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/FluxMedialness.hxx b/lib/fpa/Image/Functors/FluxMedialness.hxx
deleted file mode 100644 (file)
index 8f8651b..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__FLUXMEDIALNESS__HXX__
-#define __FPA__IMAGE__FUNCTORS__FLUXMEDIALNESS__HXX__
-
-#include <cmath>
-#include <vnl/vnl_math.h>
-#include <itkLineConstIterator.h>
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-fpa::Image::Functors::FluxMedialness< _TGradient >::
-FluxMedialness( )
-  : Superclass( ),
-    m_MinRadius( double( 0 ) ),
-    m_MaxRadius( double( 1 ) ),
-    m_RadialSampling( 4 ),
-    m_RadiusStep( double( 1 ) )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-fpa::Image::Functors::FluxMedialness< _TGradient >::
-~FluxMedialness( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-typename fpa::Image::Functors::FluxMedialness< _TGradient >::
-TOutput fpa::Image::Functors::FluxMedialness< _TGradient >::
-_Evaluate( const TIndex& i ) const
-{
-  itk::Object::GlobalWarningDisplayOff( );
-
-  double pi2n = double( 2 ) * double( vnl_math::pi );
-  pi2n /= int( this->m_RadialSampling );
-  const _TGradient* img = this->GetInputImage( );
-  // Gradient in central pixel
-  //TVector grad_idx = img->GetPixel( i );
-
-  double Flux1 = 0;
-  double Flux = 0;
-
-  TRCandidates FluxFinal;
-  TRCandidates radiusGenerated;
-  double dR = double( 0 );
-  double optR = double( 0 );
-  TPoint center;
-  img->TransformIndexToPhysicalPoint( i, center );
-  double radius = double(0);
-
-  for( unsigned int cx = 0; cx < Self::Dimension - 1; cx++ )
-  {
-    for( unsigned int cy = cx + 1; cy < Self::Dimension; cy++ )
-    {
-      dR = double( 0 );
-      FluxFinal.clear();
-      radiusGenerated.clear();
-      radius = this->m_MinRadius;
-      while( radius <= this->m_MaxRadius )
-      {
-        Flux = 0;
-        for( unsigned int I_radial = 0; I_radial < this->m_RadialSampling ; I_radial++ )
-        {
-          Flux1 = 0;
-
-          // Direction of first profile
-          typename TPoint::VectorType dir1;
-          dir1.Fill( double( 0 ) );
-          dir1[ cx ] = std::cos( pi2n * double( I_radial ) );
-          dir1[ cy ] = std::sin( pi2n * double( I_radial ) );
-          dir1 *= (radius);
-          TIndex rIdx;
-          if (img->TransformPhysicalPointToIndex( center + dir1, rIdx ))
-          {
-            TVector grad_rIdx = img->GetPixel( rIdx );
-            TVector u_i1;
-            u_i1.SetVnlVector( ( center - ( center + dir1 ) ).GetVnlVector( ) );
-            u_i1.Normalize( );
-            // dot product
-            Flux1 = grad_rIdx * u_i1;
-          }
-
-          Flux += Flux1;
-
-        } // rof
-        //std::cout<<" radius:"<<radius<<std::endl;
-        //std::cout<<"Center:"<<center[0]<<" "<<center[1]<<std::endl;
-        //std::cout<<"edge:"<<center[0]+radius*std::cos( pi2n * double( 0 ) )<<std::endl;
-        Flux /= this->m_RadialSampling;
-        FluxFinal.push_back(Flux);
-        radiusGenerated.push_back(radius);
-        radius += this->m_RadiusStep;
-
-      }     //elihw
-
-      dR= *( std::max_element( FluxFinal.begin(), FluxFinal.end() ) );
-      optR= (dR>optR)? dR:optR;
-
-    } // rof
-
-  } // rof
-  return( TScalar(optR) );
-}
-
-#endif // __FPA__IMAGE__FUNCTORS__FLUXMEDIALNESS__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/GaussianModelEstimatorFunction.h b/lib/fpa/Image/Functors/GaussianModelEstimatorFunction.h
deleted file mode 100644 (file)
index 0b7727d..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__GAUSSIANMODELESTIMATORFUNCTION__H__
-#define __FPA__IMAGE__FUNCTORS__GAUSSIANMODELESTIMATORFUNCTION__H__
-
-#include <cpPlugins/Extensions/Algorithms/IterativeGaussianModelEstimator.h>
-#include <cpPlugins/Extensions/Algorithms/RGBToYPbPrFunction.h>
-#include <itkFunctionBase.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    namespace Functors
-    {
-      /**
-       */
-      template< class I, class S >
-      class GaussianModelEstimatorFunction
-        : public itk::FunctionBase< typename I::PixelType, bool >
-      {
-      public:
-        // Type-related and pointers
-        typedef GaussianModelEstimatorFunction                   Self;
-        typedef itk::FunctionBase< typename I::PixelType, bool > Superclass;
-        typedef itk::SmartPointer< Self >                        Pointer;
-        typedef itk::SmartPointer< const Self >                  ConstPointer;
-
-        // Superclass' types
-        typedef cpPlugins::Extensions::Algorithms::IterativeGaussianModelEstimator< S, 3 > TEstimator;
-        typedef cpPlugins::Extensions::Algorithms::RGBToYPbPrFunction< S > TYPbPrFunction;
-
-      public:
-        itkNewMacro( Self );
-        itkTypeMacro( GaussianModelEstimatorFunction, itkFunctionBase );
-
-        itkGetConstMacro( ModelSupport, unsigned long );
-
-      public:
-        bool SaveModelToFile( const std::string& filename ) const;
-        bool LoadModelFromFile( const std::string& filename );
-
-        virtual void SetModelSupport( const unsigned long& s );
-        virtual bool Evaluate( const typename I::PixelType& rgb ) const;
-
-      protected:
-        GaussianModelEstimatorFunction( );
-        virtual ~GaussianModelEstimatorFunction( );
-
-      private:
-        // Purposely not implemented
-        GaussianModelEstimatorFunction( const Self& );
-        void operator=( const Self& );
-
-      protected:
-        typename TEstimator::Pointer m_Estimator;
-        TYPbPrFunction m_YPbPrFunction;
-
-        unsigned long m_ModelSupport;
-        unsigned long m_RealModelSupport;
-        mutable bool m_Estimating;
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Image/Functors/GaussianModelEstimatorFunction.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IMAGE__FUNCTORS__GAUSSIANMODELESTIMATORFUNCTION__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/GaussianModelEstimatorFunction.hxx b/lib/fpa/Image/Functors/GaussianModelEstimatorFunction.hxx
deleted file mode 100644 (file)
index accfb27..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__GAUSSIANMODELESTIMATORFUNCTION__HXX__
-#define __FPA__IMAGE__FUNCTORS__GAUSSIANMODELESTIMATORFUNCTION__HXX__
-
-// -------------------------------------------------------------------------
-template< class I, class S >
-bool fpa::Image::Functors::GaussianModelEstimatorFunction< I, S >::
-SaveModelToFile( const std::string& filename ) const
-{
-  this->m_Estimator->SaveModelToFile( filename );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class S >
-bool fpa::Image::Functors::GaussianModelEstimatorFunction< I, S >::
-LoadModelFromFile( const std::string& filename )
-{
-  this->m_Estimator->LoadModelFromFile( filename );
-  this->m_RealModelSupport =
-    this->m_ModelSupport + this->m_Estimator->GetNumberOfSamples( );
-  this->m_Estimating = false;
-  this->Modified( );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class S >
-void fpa::Image::Functors::GaussianModelEstimatorFunction< I, S >::
-SetModelSupport( const unsigned long& s )
-{
-  this->m_ModelSupport = s;
-  this->m_RealModelSupport = s;
-  this->Modified( );
-}
-
-// -------------------------------------------------------------------------
-template< class I, class S >
-bool fpa::Image::Functors::GaussianModelEstimatorFunction< I, S >::
-Evaluate( const typename I::PixelType& rgb ) const
-{
-  if( !this->m_Estimating && this->m_ModelSupport > 0 )
-  {
-    this->m_Estimator->AddSample( this->m_YPbPrFunction( rgb ) );
-    if( this->m_Estimator->GetNumberOfSamples( ) == this->m_RealModelSupport )
-      this->m_Estimating = true;
-    return( true );
-  }
-  else
-  {
-    S p = this->m_Estimator->Probability( this->m_YPbPrFunction( rgb ) );
-    return( p >= 0.3 );
-
-  } // fi
-}
-
-// -------------------------------------------------------------------------
-template< class I, class S >
-fpa::Image::Functors::GaussianModelEstimatorFunction< I, S >::
-GaussianModelEstimatorFunction( )
-  : Superclass( ),
-    m_ModelSupport( 10 ),
-    m_RealModelSupport( 10 )
-{
-  this->m_Estimator = TEstimator::New( );
-  this->m_Estimator->Clear( );
-  this->m_Estimating = false;
-}
-
-// -------------------------------------------------------------------------
-template< class I, class S >
-fpa::Image::Functors::GaussianModelEstimatorFunction< I, S >::
-~GaussianModelEstimatorFunction( )
-{
-}
-
-#endif // __FPA__IMAGE__FUNCTORS__GAUSSIANMODELESTIMATORFUNCTION__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/GradientImageFunctionBase.h b/lib/fpa/Image/Functors/GradientImageFunctionBase.h
deleted file mode 100644 (file)
index fa93034..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__GRADIENTIMAGEFUNCTIONBASE__H__
-#define __FPA__IMAGE__FUNCTORS__GRADIENTIMAGEFUNCTIONBASE__H__
-
-#include <itkImageFunction.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    namespace Functors
-    {
-      /**
-       * Base class to compute values based on image gradients (vector).
-       * It allows incremental computation of the gradient.
-       */
-      template< class _TGradient >
-      class GradientImageFunctionBase
-        : public itk::ImageFunction< _TGradient, typename _TGradient::PixelType::ValueType, typename _TGradient::PixelType::ValueType >
-      {
-      public:
-        // Types from input arguments
-        typedef _TGradient                     TGradient;
-        typedef typename _TGradient::PixelType TVector;
-        typedef typename TVector::ValueType    TScalar;
-        itkStaticConstMacro( Dimension, unsigned int, _TGradient::ImageDimension );
-
-        // Standard itk types
-        typedef GradientImageFunctionBase                          Self;
-        typedef itk::ImageFunction< _TGradient, TScalar, TScalar > Superclass;
-        typedef itk::SmartPointer< Self >                          Pointer;
-        typedef itk::SmartPointer< const Self >                    ConstPointer;
-
-        // Types from base itk::ImageFunction
-        typedef typename Superclass::InputType           TInput;
-        typedef typename Superclass::OutputType          TOutput;
-        typedef typename Superclass::PointType           TPoint;
-        typedef typename Superclass::ContinuousIndexType TContIndex;
-        typedef typename Superclass::IndexType           TIndex;
-
-      public:
-        itkTypeMacro( GradientImageFunctionBase, itkImageFunction );
-
-      public:
-        virtual void Prepare( ) const;
-        virtual TOutput Evaluate( const TPoint& p ) const ITK_OVERRIDE;
-        virtual TOutput EvaluateAtIndex( const TIndex& i ) const ITK_OVERRIDE;
-        virtual TOutput EvaluateAtContinuousIndex( const TContIndex& i ) const ITK_OVERRIDE;
-
-      protected:
-        GradientImageFunctionBase( );
-        virtual ~GradientImageFunctionBase( );
-
-        virtual TOutput _Evaluate( const TIndex& i ) const = 0;
-
-      private:
-        // Purposely not implemented.
-        GradientImageFunctionBase( const Self& );
-        void operator=( const Self& );
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Image/Functors/GradientImageFunctionBase.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IMAGE__FUNCTORS__GRADIENTIMAGEFUNCTIONBASE__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/GradientImageFunctionBase.hxx b/lib/fpa/Image/Functors/GradientImageFunctionBase.hxx
deleted file mode 100644 (file)
index 34acf1c..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__GRADIENTIMAGEFUNCTIONBASE__HXX__
-#define __FPA__IMAGE__FUNCTORS__GRADIENTIMAGEFUNCTIONBASE__HXX__
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-void fpa::Image::Functors::GradientImageFunctionBase< _TGradient >::
-Prepare( ) const
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-typename fpa::Image::Functors::GradientImageFunctionBase< _TGradient >::
-TOutput fpa::Image::Functors::GradientImageFunctionBase< _TGradient >::
-Evaluate( const TPoint& p ) const
-{
-  TIndex i;
-  this->GetInputImage( )->TransformPhysicalPointToIndex( p, i );
-  return( this->EvaluateAtIndex( i ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-typename fpa::Image::Functors::GradientImageFunctionBase< _TGradient >::
-TOutput fpa::Image::Functors::GradientImageFunctionBase< _TGradient >::
-EvaluateAtIndex( const TIndex& i ) const
-{
-  return( this->_Evaluate( i ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-typename fpa::Image::Functors::GradientImageFunctionBase< _TGradient >::
-TOutput fpa::Image::Functors::GradientImageFunctionBase< _TGradient >::
-EvaluateAtContinuousIndex( const TContIndex& i ) const
-{
-  TPoint p;
-  this->GetInputImage( )->TransformContinuousIndexToPhysicalPoint( i, p );
-  return( this->Evaluate( p ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-fpa::Image::Functors::GradientImageFunctionBase< _TGradient >::
-GradientImageFunctionBase( )
-  : Superclass( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-fpa::Image::Functors::GradientImageFunctionBase< _TGradient >::
-~GradientImageFunctionBase( )
-{
-}
-
-#endif // __FPA__IMAGE__FUNCTORS__GRADIENTIMAGEFUNCTIONBASE__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/GulsunTekMedialness.h b/lib/fpa/Image/Functors/GulsunTekMedialness.h
deleted file mode 100644 (file)
index 4a26aab..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__GULSUNTEKMEDIALNESS__H__
-#define __FPA__IMAGE__FUNCTORS__GULSUNTEKMEDIALNESS__H__
-
-#include <fpa/Image/Functors/GradientImageFunctionBase.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    namespace Functors
-    {
-      /**
-       */
-      template< class _TGradient >
-      class GulsunTekMedialness
-        : public GradientImageFunctionBase< _TGradient >
-      {
-      public:
-        typedef GulsunTekMedialness                     Self;
-        typedef GradientImageFunctionBase< _TGradient > Superclass;
-        typedef itk::SmartPointer< Self >               Pointer;
-        typedef itk::SmartPointer< const Self >         ConstPointer;
-
-        itkStaticConstMacro( Dimension, unsigned int, Superclass::Dimension );
-
-        typedef typename Superclass::TOutput TOutput;
-        typedef typename Superclass::TScalar TScalar;
-        typedef typename Superclass::TIndex  TIndex;
-        typedef typename Superclass::TVector TVector;
-        typedef typename Superclass::TPoint  TPoint;
-        typedef typename TIndex::OffsetType  TOffset;
-
-        typedef std::vector< double >  TProfile;
-        typedef std::vector< TOffset > TOffsets;
-
-      public:
-        itkNewMacro( Self );
-        itkTypeMacro( GulsunTekMedialness, GradientImageFunctionBase );
-
-        itkGetConstMacro( MinRadius, double );
-        itkGetConstMacro( MaxRadius, double );
-        itkGetConstMacro( ProfileSampling, unsigned int );
-        itkGetConstMacro( RadialSampling, unsigned int );
-
-        itkSetMacro( MinRadius, double );
-        itkSetMacro( MaxRadius, double );
-        itkSetMacro( ProfileSampling, unsigned int );
-        itkSetMacro( RadialSampling, unsigned int );
-
-      protected:
-        GulsunTekMedialness( );
-        virtual ~GulsunTekMedialness( );
-
-        virtual TOutput _Evaluate( const TIndex& i ) const ITK_OVERRIDE;
-
-      private:
-        // Purposely not implemented.
-        GulsunTekMedialness( const Self& );
-        void operator=( const Self& );
-
-      protected:
-        double       m_MinRadius;
-        double       m_MaxRadius;
-        unsigned int m_ProfileSampling;
-        unsigned int m_RadialSampling;
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Image/Functors/GulsunTekMedialness.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IMAGE__FUNCTORS__GULSUNTEKMEDIALNESS__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/GulsunTekMedialness.hxx b/lib/fpa/Image/Functors/GulsunTekMedialness.hxx
deleted file mode 100644 (file)
index 9cf48c9..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__GULSUNTEKMEDIALNESS__HXX__
-#define __FPA__IMAGE__FUNCTORS__GULSUNTEKMEDIALNESS__HXX__
-
-#include <cmath>
-#include <vnl/vnl_math.h>
-#include <itkLineConstIterator.h>
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-fpa::Image::Functors::GulsunTekMedialness< _TGradient >::
-GulsunTekMedialness( )
-  : Superclass( ),
-    m_MinRadius( double( 0 ) ),
-    m_MaxRadius( double( 1 ) ),
-    m_ProfileSampling( 4 ),
-    m_RadialSampling( 10 )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-fpa::Image::Functors::GulsunTekMedialness< _TGradient >::
-~GulsunTekMedialness( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-typename fpa::Image::Functors::GulsunTekMedialness< _TGradient >::
-TOutput fpa::Image::Functors::GulsunTekMedialness< _TGradient >::
-_Evaluate( const TIndex& i ) const
-{
-  itk::Object::GlobalWarningDisplayOff( );
-
-  // Various values
-  const _TGradient* in = this->GetInputImage( );
-  double pi2n =
-    double( 2 ) * double( vnl_math::pi ) /
-    double( this->m_ProfileSampling );
-  double rOff = this->m_MaxRadius / double( this->m_RadialSampling - 1 );
-  double optR = double( 0 );
-  TPoint pnt;
-  in->TransformIndexToPhysicalPoint( i, pnt );
-
-  // Main loop
-  for( unsigned int cx = 0; cx < Self::Dimension - 1; cx++ )
-  {
-    for( unsigned int cy = cx + 1; cy < Self::Dimension; cy++ )
-    {
-      TProfile maxProfile( this->m_RadialSampling, double( 0 ) );
-      for( unsigned int p = 0; p < this->m_ProfileSampling; p++ )
-      {
-        double a = pi2n * double( p );
-
-        // Direction of this profile
-        TVector dir;
-        dir.Fill( TScalar( 0 ) );
-        dir[ cx ] = TScalar( std::cos( a ) );
-        dir[ cy ] = TScalar( std::sin( a ) );
-
-        double maxrise = double( 0 );
-        double maxfall = double( -1 );
-        TProfile profile;
-        for( unsigned int r = 0; r < this->m_RadialSampling; r++ )
-        {
-          double radius = double( r ) * rOff;
-          TIndex idx;
-          typename TPoint::VectorType aux;
-          aux.SetVnlVector( dir.GetVnlVector( ) );
-          if(
-            in->TransformPhysicalPointToIndex( pnt + ( aux * radius ), idx )
-            )
-          {
-            TVector g = in->GetPixel( idx );
-            double b = double( g.GetNorm( ) );
-            if( double( g * dir ) < double( 0 ) )
-              b *= double( -1 );
-            maxrise = ( b > maxrise )? b: maxrise;
-            if( radius >= this->m_MinRadius )
-              maxfall = ( b < maxfall )? b: maxfall;
-            profile.push_back( -b - maxrise );
-          }
-          else
-            profile.push_back( double( 0 ) );
-
-        } // rof
-
-        for( unsigned int r = 0; r < this->m_RadialSampling; r++ )
-        {
-          double E = profile[ r ] / -maxfall;
-          E = ( E < double( 0 ) )? double( 0 ): E;
-          E = ( E > double( 1 ) )? double( 1 ): E;
-          maxProfile[ r ] += E;
-
-        } // rof
-
-      } // rof
-
-      for( unsigned int r = 0; r < this->m_RadialSampling; r++ )
-      {
-        double E = maxProfile[ r ] / double( this->m_RadialSampling );
-        optR = ( E > optR )? E: optR;
-
-      } // rof
-
-    } // rof
-
-  } // rof
-  return( TScalar( optR ) );
-}
-
-#endif // __FPA__IMAGE__FUNCTORS__GULSUNTEKMEDIALNESS__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/ImageAbsoluteDifferenceCostFunction.h b/lib/fpa/Image/Functors/ImageAbsoluteDifferenceCostFunction.h
deleted file mode 100644 (file)
index 6171f26..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__IMAGEABSOLUTEDIFFERENCECOSTFUNCTION__H__
-#define __FPA__IMAGE__FUNCTORS__IMAGEABSOLUTEDIFFERENCECOSTFUNCTION__H__
-
-#include <fpa/Image/Functors/ImageCostFunction.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    namespace Functors
-    {
-      /**
-       */
-      template< class I, class R >
-      class ImageAbsoluteDifferenceCostFunction
-        : public fpa::Image::Functors::ImageCostFunction< I, R >
-      {
-      public:
-        /// Type-related and pointers
-        typedef ImageAbsoluteDifferenceCostFunction                   Self;
-        typedef fpa::Image::Functors::ImageCostFunction< I, R > Superclass;
-        typedef itk::SmartPointer< Self >                          Pointer;
-        typedef itk::SmartPointer< const Self >               ConstPointer;
-
-        typedef typename Superclass::TInputImage TInputImage;
-        typedef typename Superclass::TResult     TResult;
-        typedef typename Superclass::TIndex      TIndex;
-
-      public:
-        itkNewMacro( Self );
-        itkTypeMacro( ImageAbsoluteDifferenceCostFunction, itkObject );
-
-      public:
-        virtual R Evaluate( const TIndex& v, const TIndex& p ) const
-          {
-            typedef typename I::PixelType                    _TPixel;
-            typedef typename itk::NumericTraits< _TPixel >   _TTraits;
-            typedef typename _TTraits::MeasurementVectorType _TVector;
-            typedef typename _TTraits::ValueType             _TValue;
-
-            if( this->m_InputImage.IsNotNull( ) )
-            {
-              _TPixel pix = this->m_InputImage->GetPixel( v );
-              pix        -= this->m_InputImage->GetPixel( p );
-              if( typeid( _TPixel ) != typeid( _TValue ) )
-              {
-                _TVector* a = reinterpret_cast< _TVector* >( &pix );
-                unsigned int n =
-                  this->m_InputImage->GetNumberOfComponentsPerPixel( );
-                double sum = double( 0 );
-                for( unsigned int i = 0; i < n; ++i )
-                  sum += ( double( ( *a )[ i ] ) * double( ( *a )[ i ] ) );
-                return( R( std::sqrt( sum ) ) );
-              }
-              else
-              {
-                double pix_val =
-                  double( *( reinterpret_cast< _TValue* >( &pix ) ) );
-                return( R( std::fabs( pix_val ) ) );
-              }
-            }
-            else
-              return( std::numeric_limits< R >::max( ) );
-          }
-
-      protected:
-        ImageAbsoluteDifferenceCostFunction( )
-          : Superclass( )
-          { }
-        virtual ~ImageAbsoluteDifferenceCostFunction( )
-          { }
-
-      private:
-        // Purposely not implemented
-        ImageAbsoluteDifferenceCostFunction( const Self& );
-        void operator=( const Self& );
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#endif // __FPA__IMAGE__FUNCTORS__IMAGEABSOLUTEDIFFERENCECOSTFUNCTION__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/ImageCostFunction.h b/lib/fpa/Image/Functors/ImageCostFunction.h
deleted file mode 100644 (file)
index 533b64b..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__IMAGECOSTFUNCTION__H__
-#define __FPA__IMAGE__FUNCTORS__IMAGECOSTFUNCTION__H__
-
-#include <limits>
-#include <itkNumericTraits.h>
-#include <itkObject.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    namespace Functors
-    {
-      /**
-       */
-      template< class I, class R >
-      class ImageCostFunction
-        : public itk::Object
-      {
-      public:
-        /// Type-related and pointers
-        typedef ImageCostFunction               Self;
-        typedef itk::Object                     Superclass;
-        typedef itk::SmartPointer< Self >       Pointer;
-        typedef itk::SmartPointer< const Self > ConstPointer;
-
-        typedef I TInputImage;
-        typedef R TResult;
-        typedef typename I::IndexType TIndex;
-
-      public:
-        itkNewMacro( Self );
-        itkTypeMacro( ImageCostFunction, itkObject );
-
-        itkGetConstObjectMacro( InputImage, I );
-        itkSetConstObjectMacro( InputImage, I );
-
-      public:
-        virtual R Evaluate( const TIndex& v, const TIndex& p ) const
-          {
-            typedef typename I::PixelType                    _TPixel;
-            typedef typename itk::NumericTraits< _TPixel >   _TTraits;
-            typedef typename _TTraits::MeasurementVectorType _TVector;
-            typedef typename _TTraits::ValueType             _TValue;
-
-            if( this->m_InputImage.IsNotNull( ) )
-            {
-              _TPixel pix = this->m_InputImage->GetPixel( v );
-              if( typeid( _TPixel ) != typeid( _TValue ) )
-              {
-                _TVector* array = reinterpret_cast< _TVector* >( &pix );
-                unsigned int n =
-                  this->m_InputImage->GetNumberOfComponentsPerPixel( );
-                R sum = R( 0 );
-                for( unsigned int i = 0; i < n; ++i )
-                  sum += R( ( *array )[ i ] );
-                return( sum / R( n ) );
-              }
-              else
-                return( R( *( reinterpret_cast< _TValue* >( &pix ) ) ) );
-            }
-            else
-              return( std::numeric_limits< R >::max( ) );
-          }
-
-      protected:
-        ImageCostFunction( )
-          : Superclass( )
-          { }
-        virtual ~ImageCostFunction( )
-          { }
-
-      private:
-        // Purposely not implemented
-        ImageCostFunction( const Self& );
-        void operator=( const Self& );
-
-      protected:
-        typename I::ConstPointer m_InputImage;
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#endif // __FPA__IMAGE__FUNCTORS__IMAGECOSTFUNCTION__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/MFluxMedialness.h b/lib/fpa/Image/Functors/MFluxMedialness.h
deleted file mode 100644 (file)
index d109ea8..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__MFLUXMEDIALNESS__H__
-#define __FPA__IMAGE__FUNCTORS__MFLUXMEDIALNESS__H__
-
-#include <fpa/Image/Functors/GradientImageFunctionBase.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    namespace Functors
-    {
-      /**
-       */
-      template< class _TGradient >
-      class MFluxMedialness
-        : public GradientImageFunctionBase< _TGradient >
-      {
-      public:
-        typedef MFluxMedialness                         Self;
-        typedef GradientImageFunctionBase< _TGradient > Superclass;
-        typedef itk::SmartPointer< Self >               Pointer;
-        typedef itk::SmartPointer< const Self >         ConstPointer;
-
-        itkStaticConstMacro( Dimension, unsigned int, Superclass::Dimension );
-
-        typedef typename Superclass::TOutput TOutput;
-        typedef typename Superclass::TScalar TScalar;
-        typedef typename Superclass::TIndex  TIndex;
-        typedef typename Superclass::TVector TVector;
-        typedef typename Superclass::TPoint  TPoint;
-
-        typedef std::vector< double > TRCandidates;
-
-      public:
-        itkNewMacro( Self );
-        itkTypeMacro( MFluxMedialness, GradientImageFunctionBase );
-
-        itkGetConstMacro( RadiusStep, double );
-        itkGetConstMacro( MinRadius, double );
-        itkGetConstMacro( MaxRadius, double );
-        itkGetConstMacro( RadialSampling, unsigned int );
-
-        itkSetMacro( RadiusStep, double );
-        itkSetMacro( MinRadius, double );
-        itkSetMacro( MaxRadius, double );
-        itkSetMacro( RadialSampling, unsigned int );
-
-      protected:
-        MFluxMedialness( );
-        virtual ~MFluxMedialness( );
-
-        virtual TOutput _Evaluate( const TIndex& i ) const ITK_OVERRIDE;
-
-      private:
-        // Purposely not implemented.
-        MFluxMedialness( const Self& );
-        void operator=( const Self& );
-
-      protected:
-        double       m_MinRadius;
-        double       m_MaxRadius;
-        unsigned int m_RadialSampling;
-        double       m_RadiusStep;
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Image/Functors/MFluxMedialness.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IMAGE__FUNCTORS__MFLUXMEDIALNESS__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/MFluxMedialness.hxx b/lib/fpa/Image/Functors/MFluxMedialness.hxx
deleted file mode 100644 (file)
index 5e902e5..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__MFLUXMEDIALNESS__HXX__
-#define __FPA__IMAGE__FUNCTORS__MFLUXMEDIALNESS__HXX__
-
-#include <cmath>
-#include <vnl/vnl_math.h>
-#include <itkLineConstIterator.h>
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-fpa::Image::Functors::MFluxMedialness< _TGradient >::
-MFluxMedialness( )
-  : Superclass( ),
-    m_MinRadius( double( 0 ) ),
-    m_MaxRadius( double( 1 ) ),
-    m_RadialSampling( 4 ),
-    m_RadiusStep( double( 1 ) )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-fpa::Image::Functors::MFluxMedialness< _TGradient >::
-~MFluxMedialness( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TGradient >
-typename fpa::Image::Functors::MFluxMedialness< _TGradient >::
-TOutput fpa::Image::Functors::MFluxMedialness< _TGradient >::
-_Evaluate( const TIndex& i ) const
-{
-  itk::Object::GlobalWarningDisplayOff( );
-
-  double pi2n = double( 2 ) * double( vnl_math::pi );
-  pi2n /= int( this->m_RadialSampling );
-  const _TGradient* img = this->GetInputImage( );
-  //const itk::Image::SpacingType& input_spacing = img->GetSpacing( );
-
-  double Flux1 = 0;
-  double Flux2 = 0;
-  double MFlux = 0;
-
-  TRCandidates FluxFinal;
-  TRCandidates radiusGenerated;
-  double dR = double( 0 );
-  double optR = double( 0 );
-  TPoint center;
-  img->TransformIndexToPhysicalPoint( i, center );
-  double radius;
-
-  for( unsigned int cx = 0; cx < Self::Dimension - 1; cx++ )
-  {
-    for( unsigned int cy = cx + 1; cy < Self::Dimension; cy++ )
-    {
-      dR = double( 0 );
-      FluxFinal.clear();
-      radiusGenerated.clear();
-      radius = this->m_MinRadius;
-      while( radius <= this->m_MaxRadius )
-      {
-        MFlux = 0;
-        for( unsigned int I_radial = 0; I_radial < this->m_RadialSampling / 2; I_radial++ )
-        {
-          Flux1 = 0;
-          Flux2 = 0;
-
-          // Direction of first profile
-          typename TPoint::VectorType dir1;
-          dir1.Fill( double( 0 ) );
-          dir1[ cx ] = std::cos( pi2n * double( I_radial ) );
-          dir1[ cy ] = std::sin( pi2n * double( I_radial ) );
-          //dir1 *= (radius);
-
-          TIndex rIdx;
-
-          if ( img->TransformPhysicalPointToIndex( center + (dir1*radius), rIdx ) )
-          {
-            TVector grad_rIdx = img->GetPixel( rIdx );
-            TVector u_i1;
-            u_i1.SetVnlVector( ( center - ( center + dir1 ) ).GetVnlVector( ) );
-            u_i1.Normalize( );
-            // dot product
-            Flux1 = grad_rIdx * u_i1;
-          }
-          else
-          {
-            //if (Self::Dimension==3)
-            //{
-            //std::cout<<"Point Edge x:"<<center[0]+dir1[0] ;
-            //std::cout<<" y:"<<center[1]+dir1[1]<<" z:"<<center[2]+dir1[2]<<std::endl;
-            //}
-            //else if (Self::Dimension==2)
-            //{
-            //std::cout<<"Point Edge x:"<<center[0]+dir1[0] ;
-            //std::cout<<" y:"<<center[1]+dir1[1]<<std::endl;
-            //}
-          }
-
-          // Direction of second profile
-          // pi2n*Iradial + 180°
-          typename TPoint::VectorType dir2;
-          dir2.Fill( double( 0 ) );
-          dir2[ cx ] =  std::cos( (pi2n) * double( I_radial ) + double( vnl_math::pi ));
-          dir2[ cy ] =  std::sin( (pi2n) * double( I_radial ) + double( vnl_math::pi ));
-
-          TIndex rIdx2;
-
-          if ( img->TransformPhysicalPointToIndex( center + (dir2*radius), rIdx2 ) )
-          {
-            TVector grad_rIdx2 = img->GetPixel( rIdx2 );
-            TVector u_i2;
-            u_i2.SetVnlVector( ( center - ( center + dir2 ) ).GetVnlVector( ) );
-            u_i2.Normalize( );
-
-            Flux2 = grad_rIdx2 * u_i2;
-          }
-          else
-          {
-            //if (Self::Dimension==3)
-            //{
-            //std::cout<<"Point Edge x:"<<center[0]+dir2[0] ;
-            //std::cout<<" y:"<<center[1]+dir2[1]<<" z:"<<center[2]+dir2[2]<<std::endl;
-            //}
-            //else if (Self::Dimension==2)
-            //{
-            //std::cout<<"Point Edge x:"<<center[0]+dir2[0] ;
-            //std::cout<<" y:"<<center[1]+dir2[1]<<std::endl;
-            //}
-          }
-
-          MFlux += std::min( Flux1, Flux2 );
-        } // rof
-
-        //std::cout<<Self::Dimension<<" radius:"<<radius<<std::endl;
-        //std::cout<<"Center:"<<center[0]<<" "<<center[1]<<std::endl;
-        //std::cout<<"edge:"<<center[0]+radius*std::cos( pi2n * double( 0 ) )<<std::endl;
-
-        MFlux *= 2;
-        MFlux /= this->m_RadialSampling;
-        FluxFinal.push_back(MFlux);
-        radiusGenerated.push_back(radius);
-
-        radius += this->m_RadiusStep;
-
-      }     //elihw
-
-      dR= *( std::max_element( FluxFinal.begin(), FluxFinal.end() ) );
-      optR= (dR>optR)? dR:optR;
-
-    } // rof
-
-  } // rof
-  return( TScalar(optR) );
-}
-
-#endif // __FPA__IMAGE__FUNCTORS__MFLUXMEDIALNESS__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/RegionGrowAllBelongsFunction.h b/lib/fpa/Image/Functors/RegionGrowAllBelongsFunction.h
deleted file mode 100644 (file)
index 8aef295..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__REGIONGROWALLBELONGSFUNCTION__H__
-#define __FPA__IMAGE__FUNCTORS__REGIONGROWALLBELONGSFUNCTION__H__
-
-#include <fpa/Base/Functors/TautologyFunction.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    namespace Functors
-    {
-      /**
-       */
-      template< class I >
-      class RegionGrowAllBelongsFunction
-        : public fpa::Base::Functors::TautologyFunction< I, typename I::IndexType >
-      {
-      public:
-        /// Type-related and pointers
-        typedef RegionGrowAllBelongsFunction    Self;
-        typedef itk::SmartPointer< Self >       Pointer;
-        typedef itk::SmartPointer< const Self > ConstPointer;
-        typedef fpa::Base::Functors::
-        TautologyFunction< I, typename I::IndexType >
-        Superclass;
-
-        // Superclass' types
-        typedef I                     TInputImage;
-        typedef typename I::IndexType TIndex;
-
-      public:
-        itkNewMacro( Self );
-        itkTypeMacro( RegionGrowAllBelongsFunction, itkImageFunction );
-
-      public:
-        virtual bool Evaluate( const TIndex& v ) const ITK_OVERRIDE
-          { return( true ); }
-
-      protected:
-        RegionGrowAllBelongsFunction( )
-          : Superclass( )
-          { }
-        virtual ~RegionGrowAllBelongsFunction( )
-          { }
-
-      private:
-        // Purposely not implemented
-        RegionGrowAllBelongsFunction( const Self& );
-        void operator=( const Self& );
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#endif // __FPA__IMAGE__FUNCTORS__REGIONGROWALLBELONGSFUNCTION__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/Functors/RegionGrowThresholdFunction.h b/lib/fpa/Image/Functors/RegionGrowThresholdFunction.h
deleted file mode 100644 (file)
index 4ec4bbf..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-#ifndef __FPA__IMAGE__FUNCTORS__REGIONGROWTHRESHOLDFUNCTION__H__
-#define __FPA__IMAGE__FUNCTORS__REGIONGROWTHRESHOLDFUNCTION__H__
-
-#include <itkNumericTraits.h>
-#include <fpa/Image/Functors/RegionGrowAllBelongsFunction.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    namespace Functors
-    {
-      /**
-       */
-      template< class I >
-      class RegionGrowThresholdFunction
-        : public RegionGrowAllBelongsFunction< I >
-      {
-      public:
-        /// Type-related and pointers
-        typedef RegionGrowThresholdFunction       Self;
-        typedef RegionGrowAllBelongsFunction< I > Superclass;
-        typedef itk::SmartPointer< Self >         Pointer;
-        typedef itk::SmartPointer< const Self >   ConstPointer;
-
-        // Superclass' types
-        typedef I                     TInputImage;
-        typedef typename I::IndexType TIndex;
-        typedef typename I::PixelType TPixel;
-
-      public:
-        itkNewMacro( Self );
-        itkTypeMacro(
-          RegionGrowThresholdFunction,
-          RegionGrowAllBelongsFunction
-          );
-
-        itkGetConstMacro( LowerThreshold, TPixel );
-        itkGetConstMacro( UpperThreshold, TPixel );
-
-        itkSetMacro( LowerThreshold, TPixel );
-        itkSetMacro( UpperThreshold, TPixel );
-
-      public:
-        virtual bool Evaluate( const TIndex& idx ) const ITK_OVERRIDE
-          {
-            const I* img = this->GetSpace( );
-
-            if( img != NULL )
-            {
-              TPixel v = img->GetPixel( idx );
-              return(
-                !( v < this->m_LowerThreshold || this->m_UpperThreshold < v )
-                );
-
-            } // fi
-            return( false );
-          }
-
-      protected:
-        RegionGrowThresholdFunction( )
-          : Superclass( )
-          {
-            itk::NumericTraits< TPixel >::min( this->m_LowerThreshold );
-            itk::NumericTraits< TPixel >::max( this->m_UpperThreshold );
-          }
-        virtual ~RegionGrowThresholdFunction( )
-          { }
-
-      private:
-        // Purposely not implemented
-        RegionGrowThresholdFunction( const Self& );
-        void operator=( const Self& );
-
-      protected:
-        TPixel m_LowerThreshold;
-        TPixel m_UpperThreshold;
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#endif // __FPA__IMAGE__FUNCTORS__REGIONGROWTHRESHOLDFUNCTION__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/IncrementalRegionGrow.h b/lib/fpa/Image/IncrementalRegionGrow.h
deleted file mode 100644 (file)
index 70d13c8..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-#ifndef __FPA__IMAGE__INCREMENTALREGIONGROW__H__
-#define __FPA__IMAGE__INCREMENTALREGIONGROW__H__
-
-#include <itkFunctionBase.h>
-#include <itkImageToImageFilter.h>
-#include <itkIndex.h>
-#include <fpa/Base/IncrementalRegionGrow.h>
-#include <fpa/Image/Algorithm.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    /**
-     * @param I Input image type
-     * @param O Output image type
-     */
-    template< class I, class O >
-    class IncrementalRegionGrow
-      : public Algorithm< I, O, fpa::Base::IncrementalRegionGrow< typename I::IndexType, typename I::PixelType, typename O::PixelType, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, itk::ImageToImageFilter< I, O > > >
-    {
-    public:
-      typedef fpa::Base::IncrementalRegionGrow< typename I::IndexType, typename I::PixelType, typename O::PixelType, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, itk::ImageToImageFilter< I, O > > TBaseAlgorithm;
-
-      typedef IncrementalRegionGrow             Self;
-      typedef Algorithm< I, O, TBaseAlgorithm > Superclass;
-      typedef itk::SmartPointer< Self >         Pointer;
-      typedef itk::SmartPointer< const Self >   ConstPointer;
-
-      typedef typename Superclass::TInputImage      TInputImage;
-      typedef typename Superclass::TOutputImage     TOutputImage;
-      typedef typename Superclass::TVertex          TVertex;
-      typedef typename Superclass::TValue           TValue;
-      typedef typename Superclass::TResult          TResult;
-      typedef typename Superclass::TGrowingFunction TGrowingFunction;
-
-    protected:
-      typedef typename Superclass::_TVertices      _TVertices;
-      typedef typename Superclass::_TCollision     _TCollision;
-      typedef typename Superclass::_TCollisionsRow _TCollisionsRow;
-      typedef typename Superclass::_TCollisions    _TCollisions;
-      typedef typename Superclass::_TNode          _TNode;
-      typedef typename Superclass::_TNodes         _TNodes;
-
-    public:
-      itkNewMacro( Self );
-      itkTypeMacro( IncrementalRegionGrow, Algorithm );
-
-    protected:
-      IncrementalRegionGrow( );
-      virtual ~IncrementalRegionGrow( );
-
-      virtual void _InitResults( );
-
-    private:
-      // Purposely not implemented
-      IncrementalRegionGrow( const Self& other );
-      Self& operator=( const Self& other );
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Image/IncrementalRegionGrow.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IMAGE__INCREMENTALREGIONGROW__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/IncrementalRegionGrow.hxx b/lib/fpa/Image/IncrementalRegionGrow.hxx
deleted file mode 100644 (file)
index 740b2f8..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef __FPA__IMAGE__INCREMENTALREGIONGROW__HXX__
-#define __FPA__IMAGE__INCREMENTALREGIONGROW__HXX__
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-fpa::Image::IncrementalRegionGrow< I, O >::
-IncrementalRegionGrow( )
-  : Superclass( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-fpa::Image::IncrementalRegionGrow< I, O >::
-~IncrementalRegionGrow( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::IncrementalRegionGrow< I, O >::
-_InitResults( )
-{
-  this->Superclass::_InitResults( );
-  this->GetOutput( )->FillBuffer( this->m_OutsideValue );
-}
-
-#endif // __FPA__IMAGE__INCREMENTALREGIONGROW__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/MinimumSpanningTree.h b/lib/fpa/Image/MinimumSpanningTree.h
deleted file mode 100644 (file)
index 0d26c20..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-#ifndef __FPA__IMAGE__MINIMUMSPANNINGTREE__H__
-#define __FPA__IMAGE__MINIMUMSPANNINGTREE__H__
-
-#include <vector>
-#include <itkImage.h>
-#include <fpa/Base/MinimumSpanningTree.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    template< unsigned int _NDim >
-    struct MinimumSpanningTreeData
-    {
-      typedef itk::Offset< _NDim > TOffset;
-      TOffset Parent;
-      short   FrontId;
-      double  GlobalCost;
-    };
-
-    /**
-     */
-    template< unsigned int _NDim >
-    class MinimumSpanningTree
-      : public fpa::Base::MinimumSpanningTree< itk::Image< MinimumSpanningTreeData< _NDim >, _NDim >, itk::Index< _NDim > >
-    {
-    public:
-      typedef MinimumSpanningTreeData< _NDim >                 TInfo;
-      typedef itk::Image< TInfo, _NDim >                       TBase;
-      typedef itk::Index< _NDim >                              TVertex;
-      typedef fpa::Base::MinimumSpanningTree< TBase, TVertex > Superclass;
-      typedef MinimumSpanningTree                              Self;
-      typedef itk::SmartPointer< Self >                        Pointer;
-      typedef itk::SmartPointer< const Self >                  ConstPointer;
-
-      typedef typename Superclass::TVertices TVertices;
-      typedef typename Superclass::TPoint    TPoint;
-      typedef typename Superclass::TPoints   TPoints;
-      itkStaticConstMacro( Dimension, unsigned int, _NDim );
-
-    public:
-      itkNewMacro( Self );
-      itkTypeMacro( MinimumSpanningTree, _TSuperclass );
-
-    public:
-      void CopyMetaData( itk::ImageBase< _NDim >* infoImage );
-      virtual void SetNode(
-        const TVertex& v,
-        const TVertex& p,
-        const short& fid,
-        const double& cost
-        ) override;
-      virtual void Clear( ) override;
-
-      virtual TPoints GetEuclideanPath( const TVertex& a ) const override;
-      virtual TPoints GetEuclideanPath(
-        const TVertex& a, const TVertex& b
-        ) const override;
-      virtual bool IsDefinedInEuclideanSpace( ) const override;
-
-    protected:
-      MinimumSpanningTree( );
-      virtual ~MinimumSpanningTree( );
-
-      virtual bool _HasVertex( const TVertex& a ) const override;
-      virtual short _FrontId( const TVertex& a ) const override;
-      virtual void _Path( TVertices& path, const TVertex& a ) const override;
-
-    private:
-      // Purposely not implemented
-      MinimumSpanningTree( const Self& other );
-      Self& operator=( const Self& other );
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Image/MinimumSpanningTree.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IMAGE__MINIMUMSPANNINGTREE__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/MinimumSpanningTree.hxx b/lib/fpa/Image/MinimumSpanningTree.hxx
deleted file mode 100644 (file)
index 616365e..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-#ifndef __FPA__IMAGE__MINIMUMSPANNINGTREE__HXX__
-#define __FPA__IMAGE__MINIMUMSPANNINGTREE__HXX__
-
-#include <limits>
-
-// -------------------------------------------------------------------------
-template< unsigned int _NDim >
-void fpa::Image::MinimumSpanningTree< _NDim >::
-CopyMetaData( itk::ImageBase< _NDim >* infoImage )
-{
-  this->SetLargestPossibleRegion( infoImage->GetLargestPossibleRegion( ) );
-  this->SetRequestedRegion( infoImage->GetRequestedRegion( ) );
-  this->SetBufferedRegion( infoImage->GetBufferedRegion( ) );
-  this->SetDirection( infoImage->GetDirection( ) );
-  this->SetOrigin( infoImage->GetOrigin( ) );
-  this->SetSpacing( infoImage->GetSpacing( ) );
-  this->Allocate( );
-  this->Clear( );
-}
-
-// -------------------------------------------------------------------------
-template< unsigned int _NDim >
-void fpa::Image::MinimumSpanningTree< _NDim >::
-SetNode(
-  const TVertex& v, const TVertex& p,
-  const short& fid, const double& cost
-  )
-{
-  this->Superclass::SetNode( v, p, fid, cost );
-  TInfo info;
-  info.Parent = p - v;
-  info.FrontId = fid;
-  info.GlobalCost = cost;
-  this->SetPixel( v, info );
-}
-
-// -------------------------------------------------------------------------
-template< unsigned int _NDim >
-void fpa::Image::MinimumSpanningTree< _NDim >::
-Clear( )
-{
-  this->Superclass::Clear( );
-  TInfo info;
-  info.Parent.Fill( 0 );
-  info.FrontId = std::numeric_limits< short >::max( );
-  info.GlobalCost = double( 0 );
-  this->FillBuffer( info );
-}
-
-// -------------------------------------------------------------------------
-template< unsigned int _NDim >
-typename fpa::Image::MinimumSpanningTree< _NDim >::
-TPoints fpa::Image::MinimumSpanningTree< _NDim >::
-GetEuclideanPath( const TVertex& a ) const
-{
-  TPoints path;
-  auto vertices = this->GetPath( a );
-  for( auto vIt = vertices.begin( ); vIt != vertices.end( ); ++vIt )
-  {
-    TPoint pnt;
-    this->TransformIndexToPhysicalPoint( *vIt, pnt );
-    path.push_back( pnt );
-
-  } // rof
-  return( path );
-}
-
-// -------------------------------------------------------------------------
-template< unsigned int _NDim >
-typename fpa::Image::MinimumSpanningTree< _NDim >::
-TPoints fpa::Image::MinimumSpanningTree< _NDim >::
-GetEuclideanPath( const TVertex& a, const TVertex& b ) const
-{
-  TPoints path;
-  auto vertices = this->GetPath( a, b );
-  for( auto vIt = vertices.begin( ); vIt != vertices.end( ); ++vIt )
-  {
-    TPoint pnt;
-    this->TransformIndexToPhysicalPoint( *vIt, pnt );
-    path.push_back( pnt );
-
-  } // rof
-  return( path );
-}
-
-// -------------------------------------------------------------------------
-template< unsigned int _NDim >
-bool fpa::Image::MinimumSpanningTree< _NDim >::
-IsDefinedInEuclideanSpace( ) const
-{
-  return( true );
-}
-
-// -------------------------------------------------------------------------
-template< unsigned int _NDim >
-fpa::Image::MinimumSpanningTree< _NDim >::
-MinimumSpanningTree( )
-  : Superclass( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< unsigned int _NDim >
-fpa::Image::MinimumSpanningTree< _NDim >::
-~MinimumSpanningTree( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< unsigned int _NDim >
-bool fpa::Image::MinimumSpanningTree< _NDim >::
-_HasVertex( const TVertex& a ) const
-{
-  return( this->_FrontId( a ) < std::numeric_limits< short >::max( ) );
-}
-
-// -------------------------------------------------------------------------
-template< unsigned int _NDim >
-short fpa::Image::MinimumSpanningTree< _NDim >::
-_FrontId( const TVertex& a ) const
-{
-  static const short MAX_ID = std::numeric_limits< short >::max( );
-  if( this->GetRequestedRegion( ).IsInside( a ) )
-    return( this->GetPixel( a ).FrontId );
-  else
-    return( MAX_ID );
-}
-
-// -------------------------------------------------------------------------
-template< unsigned int _NDim >
-void fpa::Image::MinimumSpanningTree< _NDim >::
-_Path( TVertices& path, const TVertex& a ) const
-{
-  if( this->_HasVertex( a ) )
-  {
-    typename TVertex::OffsetType zero;
-    zero.Fill( 0 );
-    auto it = a;
-    do
-    {
-      path.push_back( it );
-      it += this->GetPixel( it ).Parent;
-
-    } while( this->GetPixel( it ).Parent != zero );
-    path.push_back( it );
-
-  } // fi
-}
-
-#endif // __FPA__IMAGE__MINIMUMSPANNINGTREE__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/RegionGrow.h b/lib/fpa/Image/RegionGrow.h
deleted file mode 100644 (file)
index 59e97da..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-#ifndef __FPA__IMAGE__REGIONGROW__H__
-#define __FPA__IMAGE__REGIONGROW__H__
-
-#include <itkFunctionBase.h>
-#include <itkImageToImageFilter.h>
-#include <itkIndex.h>
-#include <fpa/Base/RegionGrow.h>
-#include <fpa/Image/Algorithm.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    /**
-     * @param I Input image type
-     * @param O Output image type
-     */
-    template< class I, class O = I >
-    class RegionGrow
-      : public Algorithm< I, O, fpa::Base::RegionGrow< typename I::IndexType, typename I::PixelType, typename O::PixelType, I, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, itk::ImageToImageFilter< I, O > > >
-    {
-    public:
-      typedef fpa::Base::RegionGrow< typename I::IndexType, typename I::PixelType, typename O::PixelType, I, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, itk::ImageToImageFilter< I, O > > TBaseAlgorithm;
-
-      typedef RegionGrow                        Self;
-      typedef Algorithm< I, O, TBaseAlgorithm > Superclass;
-      typedef itk::SmartPointer< Self >         Pointer;
-      typedef itk::SmartPointer< const Self >   ConstPointer;
-
-      typedef typename Superclass::TInputImage      TInputImage;
-      typedef typename Superclass::TOutputImage     TOutputImage;
-      typedef typename Superclass::TVertex          TVertex;
-      typedef typename Superclass::TValue           TValue;
-      typedef typename Superclass::TResult          TResult;
-      typedef typename Superclass::TSpace           TSpace;
-      typedef typename Superclass::TGrowingFunction TGrowingFunction;
-
-    protected:
-      typedef typename Superclass::_TVertices      _TVertices;
-      typedef typename Superclass::_TCollision     _TCollision;
-      typedef typename Superclass::_TCollisionsRow _TCollisionsRow;
-      typedef typename Superclass::_TCollisions    _TCollisions;
-      typedef typename Superclass::_TNode          _TNode;
-      typedef typename Superclass::_TNodes         _TNodes;
-
-    public:
-      itkNewMacro( Self );
-      itkTypeMacro( RegionGrow, Algorithm );
-
-    protected:
-      RegionGrow( );
-      virtual ~RegionGrow( );
-
-      virtual void _InitResults( ) ITK_OVERRIDE;
-
-    private:
-      // Purposely not implemented
-      RegionGrow( const Self& other );
-      Self& operator=( const Self& other );
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Image/RegionGrow.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IMAGE__REGIONGROW__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/RegionGrow.hxx b/lib/fpa/Image/RegionGrow.hxx
deleted file mode 100644 (file)
index a56c919..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef __FPA__IMAGE__REGIONGROW__HXX__
-#define __FPA__IMAGE__REGIONGROW__HXX__
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-fpa::Image::RegionGrow< I, O >::
-RegionGrow( )
-  : Superclass( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-fpa::Image::RegionGrow< I, O >::
-~RegionGrow( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class I, class O >
-void fpa::Image::RegionGrow< I, O >::
-_InitResults( )
-{
-  this->Superclass::_InitResults( );
-  if( this->m_GrowingFunction.IsNotNull( ) )
-    this->m_GrowingFunction->SetSpace( this->GetInput( ) );
-  this->GetOutput( )->FillBuffer( this->m_OutsideValue );
-}
-
-#endif // __FPA__IMAGE__REGIONGROW__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/RegionGrowWithMultipleCriteria.h b/lib/fpa/Image/RegionGrowWithMultipleCriteria.h
deleted file mode 100644 (file)
index 2b06837..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef __FPA__IMAGE__REGIONGROWWITHMULTIPLECRITERIA__H__
-#define __FPA__IMAGE__REGIONGROWWITHMULTIPLECRITERIA__H__
-
-#include <itkImageToImageFilter.h>
-#include <itkIndex.h>
-#include <fpa/Base/RegionGrowWithMultipleCriteria.h>
-#include <fpa/Image/Algorithm.h>
-#include <fpa/Image/Functors/ImageFunction.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    /**
-     * @param I Input image type
-     */
-    template< class I >
-    class RegionGrowWithMultipleCriteria
-      : public Algorithm< I, fpa::Base::RegionGrowWithMultipleCriteria< typename I::IndexType, typename I::PixelType, typename I::PixelType, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, itk::ImageToImageFilter< I, I > > >
-    {
-    public:
-      // Standard class typdedefs
-      typedef typename I::IndexType TVertex;
-      typedef typename I::PixelType TResult;
-      typedef typename I::PixelType TVertexValue;
-      typedef itk::ImageToImageFilter< I, I > TBaseFilter;
-      typedef fpa::Base::RegionGrowWithMultipleCriteria< TVertex, TResult, TVertexValue, itk::Functor::IndexLexicographicCompare< I::ImageDimension >, TBaseFilter > TBaseAlgorithm;
-
-      typedef RegionGrowWithMultipleCriteria  Self;
-      typedef Algorithm< I, TBaseAlgorithm >  Superclass;
-      typedef itk::SmartPointer< Self >       Pointer;
-      typedef itk::SmartPointer< const Self > ConstPointer;
-
-      typedef
-      fpa::Image::Functors::ImageFunction< I, bool >
-      TMembershipFunction;
-      typedef typename Superclass::TFunctions TFunctions;
-
-    public:
-      itkNewMacro( Self );
-      itkTypeMacro(
-        RegionGrowWithMultipleCriteria,
-        fpaBaseRegionGrowWithMultipleCriteria
-        );
-
-    protected:
-      RegionGrowWithMultipleCriteria( )
-        : Superclass( )
-        { }
-      virtual ~RegionGrowWithMultipleCriteria( )
-        { }
-
-    private:
-      // Purposely not implemented
-      RegionGrowWithMultipleCriteria( const Self& );
-      void operator=( const Self& );
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#endif // __FPA__IMAGE__REGIONGROWWITHMULTIPLECRITERIA__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/RegionGrowWithMultipleThresholds.h b/lib/fpa/Image/RegionGrowWithMultipleThresholds.h
deleted file mode 100644 (file)
index f538e7b..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-#ifndef __FPA__IMAGE__REGIONGROWWITHMULTIPLETHRESHOLDS__H__
-#define __FPA__IMAGE__REGIONGROWWITHMULTIPLETHRESHOLDS__H__
-
-#include <map>
-#include <set>
-#include <fpa/Image/RegionGrowWithMultipleCriteria.h>
-#include <fpa/Image/Functors/RegionGrowThresholdFunction.h>
-
-namespace fpa
-{
-  namespace Image
-  {
-    /**
-     * @param I Input image type
-     */
-    template< class I >
-    class RegionGrowWithMultipleThresholds
-      : public RegionGrowWithMultipleCriteria< I >
-    {
-    public:
-      typedef RegionGrowWithMultipleThresholds    Self;
-      typedef RegionGrowWithMultipleCriteria< I > Superclass;
-      typedef itk::SmartPointer< Self >           Pointer;
-      typedef itk::SmartPointer< const Self >     ConstPointer;
-
-      typedef typename I::PixelType TPixel;
-
-      typedef std::map< TPixel, unsigned long >        THistogram;
-      typedef typename Superclass::TBaseAlgorithm      TBaseAlgorithm;
-      typedef typename Superclass::TMembershipFunction TMembershipFunction;
-      typedef typename Superclass::TFunctions          TFunctions;
-
-      typedef std::set< TPixel >                                   TThresholds;
-      typedef fpa::Image::Functors::RegionGrowThresholdFunction< I > TFunction;
-
-    protected:
-      typedef typename TBaseAlgorithm::_TNode _TNode;
-
-    public:
-      itkNewMacro( Self );
-      itkTypeMacro( RegionGrowWithMultipleThresholds, RegionGrow );
-
-      itkGetConstMacro( InsideValue, TPixel );
-      itkGetConstMacro( OutsideValue, TPixel );
-      itkGetConstMacro( DifferenceThreshold, double );
-
-      itkSetMacro( InsideValue, TPixel );
-      itkSetMacro( OutsideValue, TPixel );
-      itkSetMacro( DifferenceThreshold, double );
-
-    public:
-      void AddThreshold( const TPixel& v );
-      void AddThresholds(
-        const TPixel& t0,
-        const TPixel& t1,
-        const unsigned int& s
-        );
-
-    protected:
-      RegionGrowWithMultipleThresholds( );
-      virtual ~RegionGrowWithMultipleThresholds( );
-
-      virtual void _BeforeMainLoop( );
-      virtual void _AfterMainLoop( );
-      virtual void _AfterLoop( );
-      virtual bool _UpdateResult( _TNode& n );
-      virtual void _Mark( const _TNode& n );
-      virtual bool _CheckStopCondition( );
-
-    private:
-      RegionGrowWithMultipleThresholds( const Self& ); // Not impl.
-      void operator=( const Self& );                   // Not impl.
-
-    protected:
-      TThresholds m_Thresholds;
-      TPixel m_InsideValue;
-      TPixel m_OutsideValue;
-      double m_DifferenceThreshold;
-      THistogram m_Histogram;
-      unsigned long m_TotalCount;
-      double m_LastDiff;
-      bool m_StopForced;
-      TPixel m_StopThreshold;
-    };
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/Image/RegionGrowWithMultipleThresholds.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__IMAGE__REGIONGROWWITHMULTIPLETHRESHOLDS__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/Image/RegionGrowWithMultipleThresholds.hxx b/lib/fpa/Image/RegionGrowWithMultipleThresholds.hxx
deleted file mode 100644 (file)
index 4725c54..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-#ifndef __FPA__IMAGE__REGIONGROWWITHMULTIPLETHRESHOLDS__HXX__
-#define __FPA__IMAGE__REGIONGROWWITHMULTIPLETHRESHOLDS__HXX__
-
-#include <limits>
-#include <itkBinaryThresholdImageFilter.h>
-#include <itkConstNeighborhoodIterator.h>
-
-// -------------------------------------------------------------------------
-template< class I >
-void fpa::Image::RegionGrowWithMultipleThresholds< I >::
-AddThreshold( const TPixel& v )
-{
-  this->m_Thresholds.insert( v );
-  this->Modified( );
-}
-
-// -------------------------------------------------------------------------
-template< class I >
-void fpa::Image::RegionGrowWithMultipleThresholds< I >::
-AddThresholds( const TPixel& t0, const TPixel& t1, const unsigned int& s )
-{
-  for( TPixel t = t0; t <= t1; t += TPixel( s ) )
-    this->AddThreshold( t );
-}
-
-// -------------------------------------------------------------------------
-template< class I >
-fpa::Image::RegionGrowWithMultipleThresholds< I >::
-RegionGrowWithMultipleThresholds( )
-  : Superclass( ),
-    m_InsideValue( TPixel( 1 ) ),
-    m_OutsideValue( TPixel( 0 ) ),
-    m_DifferenceThreshold( double( 3 ) ),
-    m_TotalCount( 0 ),
-    m_LastDiff( double( 0 ) ),
-    m_StopForced( false ),
-    m_StopThreshold( TPixel( 0 ) )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class I >
-fpa::Image::RegionGrowWithMultipleThresholds< I >::
-~RegionGrowWithMultipleThresholds( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class I >
-void fpa::Image::RegionGrowWithMultipleThresholds< I >::
-_BeforeMainLoop( )
-{
-  const I* img = this->GetInput( );
-
-  // Clear all states
-  this->ClearMembershipFunctions( );
-  this->m_Histogram.clear( );
-  this->m_TotalCount = img->GetLargestPossibleRegion( ).GetNumberOfPixels( );
-  this->m_LastDiff = double( -1 );
-  this->m_StopForced = false;
-
-  // Initialize thresholding functors
-  typename TThresholds::const_iterator tIt = this->m_Thresholds.begin( );
-  TPixel min_thr = std::numeric_limits< TPixel >::min( );
-  for( ; tIt != this->m_Thresholds.end( ); ++tIt )
-  {
-    typename TFunction::Pointer function = TFunction::New( );
-    function->SetInputImage( img );
-    function->SetLowerThreshold( min_thr );
-    function->SetUpperThreshold( *tIt );
-    this->AddMembershipFunction( function );
-
-  } // rof
-
-  // Correct seeds
-  typename I::SizeType radius;
-  radius.Fill( 3 );
-  itk::ConstNeighborhoodIterator< I > it(
-    radius, img, img->GetRequestedRegion( )
-    );
-  for( unsigned int s = 0; s < this->m_Seeds.size( ); ++s )
-  {
-    _TNode seed = this->m_Seeds[ s ];
-    it.SetLocation( seed.Vertex );
-
-    typename I::SizeType size = it.GetSize( );
-    unsigned int nN = 1;
-    for( unsigned int d = 0; d < I::ImageDimension; ++d )
-      nN *= size[ d ];
-    TPixel min_value = img->GetPixel( seed.Vertex );
-    for( unsigned int i = 0; i < nN; ++i )
-    {
-      if( it.GetPixel( i ) < min_value )
-      {
-        seed.Vertex = it.GetIndex( i );
-        seed.Parent = seed.Vertex;
-        min_value = it.GetPixel( i );
-
-      } // fi
-
-    } // rof
-    this->m_Seeds[ s ] = seed;
-
-  } // rof
-
-  // Continue all initializations
-  this->Superclass::_BeforeMainLoop( );
-}
-
-// -------------------------------------------------------------------------
-template< class I >
-void fpa::Image::RegionGrowWithMultipleThresholds< I >::
-_AfterMainLoop( )
-{
-  typedef itk::BinaryThresholdImageFilter< I, I > _TBinFilter;
-
-  // Binarize, inplace, the grown region
-  if( this->m_Histogram.size( ) > 1 )
-  {
-    typename _TBinFilter::Pointer bin = _TBinFilter::New( );
-    bin->SetInput( this->GetOutput( ) );
-    bin->SetInsideValue( this->m_InsideValue );
-    bin->SetOutsideValue( this->m_OutsideValue );
-    bin->InPlaceOn( );
-    if( this->m_StopForced )
-      bin->SetUpperThreshold( this->m_StopThreshold );
-    else
-      bin->SetUpperThreshold( this->m_Histogram.rbegin( )->first );
-    bin->GraftOutput( this->GetOutput( ) );
-    bin->Update( );
-    this->GraftOutput( bin->GetOutput( ) );
-
-  } // fi
-
-  this->Superclass::_AfterMainLoop( );
-}
-
-// -------------------------------------------------------------------------
-template< class I >
-void fpa::Image::RegionGrowWithMultipleThresholds< I >::
-_AfterLoop( )
-{
-  if( this->m_ActualFunction != this->m_Functions.end( ) )
-  {
-    TFunction* f =
-      dynamic_cast< TFunction* >( this->m_ActualFunction->GetPointer( ) );
-    this->m_Histogram[ f->GetUpperThreshold( ) ] = this->m_Marks.size( );
-
-    /* TODO: code to print the signal for demo purposes
-       std::cout
-       << f->GetUpperThreshold( ) << " "
-       << this->m_Marks.size( )
-       << std::endl;
-    */
-
-    // Get the two last complete count, if any, and compute last
-    // finite difference
-    if( this->m_Histogram.size( ) > 1 )
-    {
-      typename THistogram::const_reverse_iterator hIt =
-        this->m_Histogram.rbegin( );
-      typename THistogram::const_reverse_iterator gIt = hIt;
-      gIt++;
-
-      this->m_LastDiff  = double( hIt->second ) - double( gIt->second );
-      this->m_LastDiff /= double( hIt->first )  - double( gIt->first );
-      this->m_LastDiff *= m_DifferenceThreshold;
-    }
-    else
-      this->m_LastDiff = double( -1 );
-    
-  } // fi
-  this->Superclass::_AfterLoop( );
-}
-
-// -------------------------------------------------------------------------
-template< class I >
-bool fpa::Image::RegionGrowWithMultipleThresholds< I >::
-_UpdateResult( _TNode& n )
-{
-  // Here, the output is changed to the threshold used to compute the
-  // growing condition of the actual vertex n
-  bool ret = this->Superclass::_UpdateResult( n );
-  if( this->m_ActualFunction != this->m_Functions.end( ) )
-  {
-    TFunction* f =
-      dynamic_cast< TFunction* >( this->m_ActualFunction->GetPointer( ) );
-    if( f != NULL )
-      this->GetOutput( )->SetPixel( n.Vertex, f->GetUpperThreshold( ) );
-
-  } // fi
-  return( ret );
-}
-
-// -------------------------------------------------------------------------
-template< class I >
-void fpa::Image::RegionGrowWithMultipleThresholds< I >::
-_Mark( const _TNode& n )
-{
-  this->Superclass::_Mark( n );
-
-  // Check if the histogram's support is enough
-  if( this->m_Histogram.size( ) < 2 )
-    return;
-  typename THistogram::const_reverse_iterator hIt =
-    this->m_Histogram.rbegin( );
-
-  // Get the actual function
-  TFunction* f =
-    dynamic_cast< TFunction* >( this->m_ActualFunction->GetPointer( ) );
-  if( f == NULL )
-    return;
-
-  // Previous pixel count
-  unsigned long prev_aCount = hIt->second;
-  double prev_p = double( prev_aCount ) / double( this->m_TotalCount );
-
-  // Actual pixel count
-  unsigned long aCount = this->m_Marks.size( );
-  double p = double( aCount ) / double( this->m_TotalCount );
-
-  // Loop over, at least, 0.1% of the total number of pixels before
-  // performing stop analysis 
-  if( double( 1e-3 ) < p && double( 1e-3 ) < prev_p )
-  {
-    // Does the difference is worthy to be analyzed?
-    if( aCount > hIt->second )
-    {
-      // Compute finite difference and compare it to the previous one
-      double diff = double( aCount ) - double( hIt->second );
-      diff /= double( f->GetUpperThreshold( ) ) - double( hIt->first );
-      if( diff > this->m_LastDiff )
-      {
-        /* TODO: comment this for demo purposes
-         */
-        this->m_StopForced = true;
-        this->m_StopThreshold = hIt->first;
-
-      } // fi
-
-    } // fi
-    
-  } // fi
-}
-
-// -------------------------------------------------------------------------
-template< class I >
-bool fpa::Image::RegionGrowWithMultipleThresholds< I >::
-_CheckStopCondition( )
-{
-  return( this->m_StopForced );
-}
-
-#endif // __FPA__IMAGE__REGIONGROWWITHMULTIPLETHRESHOLDS__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/VTK/Image/ImageSkeletonToPolyData.h b/lib/fpa/VTK/Image/ImageSkeletonToPolyData.h
deleted file mode 100644 (file)
index 3c19b7b..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifndef __FPA__VTK__IMAGESKELETONTOPOLYDATA__H__
-#define __FPA__VTK__IMAGESKELETONTOPOLYDATA__H__
-
-#include <vtkPolyDataAlgorithm.h>
-
-namespace fpa
-{
-  namespace VTK
-  {
-    namespace Image
-    {
-      /**
-       */
-      template< class _TSkeleton >
-      class ImageSkeletonToPolyData
-        : public vtkPolyDataAlgorithm
-      {
-      public:
-        typedef ImageSkeletonToPolyData Self;
-        typedef _TSkeleton TSkeleton;
-
-      public:
-        vtkTypeMacro( ImageSkeletonToPolyData, vtkPolyDataAlgorithm );
-
-      public:
-        static Self* New( );
-
-        const TSkeleton* GetInput( ) const;
-        void SetInput( const TSkeleton* sk );
-
-      protected:
-        ImageSkeletonToPolyData( );
-        virtual ~ImageSkeletonToPolyData( );
-
-        int RequestData(
-          vtkInformation* information,
-          vtkInformationVector** input,
-          vtkInformationVector* output
-          );
-        int RequestInformation(
-          vtkInformation* information,
-          vtkInformationVector** input,
-          vtkInformationVector* output
-          );
-
-      private:
-        // Purposely not implemented
-        ImageSkeletonToPolyData( const Self& );
-        void operator=( const Self& );
-
-      protected:
-        const TSkeleton* m_Skeleton;
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/VTK/Image/ImageSkeletonToPolyData.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif //  __FPA__VTK__IMAGESKELETONTOPOLYDATA__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/VTK/Image/ImageSkeletonToPolyData.hxx b/lib/fpa/VTK/Image/ImageSkeletonToPolyData.hxx
deleted file mode 100644 (file)
index 5e41358..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-#ifndef __FPA__VTK__IMAGESKELETONTOPOLYDATA__HXX__
-#define __FPA__VTK__IMAGESKELETONTOPOLYDATA__HXX__
-
-#include <vtkInformation.h>
-#include <vtkInformationVector.h>
-#include <vtkSmartPointer.h>
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton >
-typename fpa::VTK::Image::ImageSkeletonToPolyData< _TSkeleton >::
-Self* fpa::VTK::Image::ImageSkeletonToPolyData< _TSkeleton >::
-New( )
-{
-  return( new Self( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton >
-const _TSkeleton* fpa::VTK::Image::ImageSkeletonToPolyData< _TSkeleton >::
-GetInput( ) const
-{
-  return( this->m_Skeleton );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton >
-void fpa::VTK::Image::ImageSkeletonToPolyData< _TSkeleton >::
-SetInput( const _TSkeleton* sk )
-{
-  if( this->m_Skeleton != sk )
-  {
-    this->m_Skeleton = sk;
-    this->Modified( );
-
-  } // fi
-}
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton >
-fpa::VTK::Image::ImageSkeletonToPolyData< _TSkeleton >::
-ImageSkeletonToPolyData( )
-  : vtkPolyDataAlgorithm( ),
-    m_Skeleton( NULL )
-{
-  this->SetNumberOfInputPorts( 0 );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton >
-fpa::VTK::Image::ImageSkeletonToPolyData< _TSkeleton >::
-~ImageSkeletonToPolyData( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton >
-int fpa::VTK::Image::ImageSkeletonToPolyData< _TSkeleton >::
-RequestData(
-  vtkInformation* information,
-  vtkInformationVector** input,
-  vtkInformationVector* output
-  )
-{
-  typedef typename _TSkeleton::TVertex              _TVertex;
-  typedef typename _TSkeleton::TVertexCmp           _TCmp;
-  typedef itk::Point< double, _TVertex::Dimension > _TPoint;
-  typedef
-    std::map< _TVertex, std::map< _TVertex, bool, _TCmp >, _TCmp >
-    _TMarks;
-  static const unsigned int dim = _TVertex::Dimension;
-
-  if( this->m_Skeleton == NULL )
-    return( 0 );
-
-  // Get output
-  vtkInformation* info = output->GetInformationObject( 0 );
-  vtkPolyData* out = vtkPolyData::SafeDownCast(
-    info->Get( vtkDataObject::DATA_OBJECT( ) )
-    );
-
-  // Prepare points and cells
-  vtkSmartPointer< vtkPoints > points =
-    vtkSmartPointer< vtkPoints >::New( );
-  vtkSmartPointer< vtkCellArray > lines =
-    vtkSmartPointer< vtkCellArray >::New( );
-
-  // Iterator over input data
-  auto& sk = this->m_Skeleton->Get( );
-  auto mst = this->m_Skeleton->GetMinimumSpanningTree( );
-  _TMarks marks;
-  for( auto i = sk.begin( ); i != sk.end( ); ++i )
-  {
-    for( auto j = i->second.begin( ); j != i->second.end( ); ++j )
-    {
-      if( !marks[ i->first ][ j->first ] )
-      {
-        auto path = j->second.GetPointer( );
-        if( path != NULL )
-        {
-          auto vertices = path->GetVertexList( );
-          for( unsigned int v = 0; v < vertices->Size( ); ++v )
-          {
-            auto idx = vertices->GetElement( v );
-            _TPoint pnt;
-            mst->TransformContinuousIndexToPhysicalPoint( idx, pnt );
-            if( dim == 1 )
-              points->InsertNextPoint( pnt[ 0 ], 0, 0 );
-            else if( dim == 2 )
-              points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], 0 );
-            else
-              points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
-            if( v > 0 )
-            {
-              lines->InsertNextCell( 2 );
-              lines->InsertCellPoint( points->GetNumberOfPoints( ) - 2 );
-              lines->InsertCellPoint( points->GetNumberOfPoints( ) - 1 );
-
-            } // fi
-
-          } // rof
-
-        } // fi
-
-        // Mark path and its symmetric as visited
-        marks[ i->first ][ j->first ] = true;
-        marks[ j->first ][ i->first ] = true;
-
-      } // fi
-
-    } // rof
-
-  } // rof
-  out->SetPoints( points );
-  out->SetLines( lines );
-  return( 1 );
-}
-
-// -------------------------------------------------------------------------
-template< class _TSkeleton >
-int fpa::VTK::Image::ImageSkeletonToPolyData< _TSkeleton >::
-RequestInformation(
-  vtkInformation* information,
-  vtkInformationVector** input,
-  vtkInformationVector* output
-  )
-{
-  vtkInformation* info = output->GetInformationObject( 0 );
-  /* TODO
-     info->Set(
-     vtkStreamingDemandDrivenPipeline::MAXIMUM_NUMBER_OF_PIECES( ), -1
-     );
-  */
-
-  if( this->m_Skeleton != NULL )
-  {
-    /* TODO
-       typename C::TScalar len = this->m_RGC->GetTotalLength( );
-       typename C::TScalar s0 = this->m_RGC->Gets0( );
-       typename C::TPoint p0 = this->m_RGC->Axis( s0 );
-       typename C::TPoint p1 = this->m_RGC->Axis( s0 + len );
-
-       info->Set(
-       vtkStreamingDemandDrivenPipeline::WHOLE_BOUNDING_BOX( ),
-       double( p0[ 0 ] ), double( p1[ 0 ] ),
-       double( p0[ 1 ] ), double( p1[ 1 ] ),
-       double( p0[ 2 ] ), double( p1[ 2 ] )
-       );
-    */
-
-  } // fi
-  return( 1 );
-}
-
-#endif //  __FPA__VTK__IMAGESKELETONTOPOLYDATA__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/VTK/Image/Observer2D.h b/lib/fpa/VTK/Image/Observer2D.h
deleted file mode 100644 (file)
index 8abbecf..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-#ifndef __FPA__VTK__IMAGE__OBSERVER2D__H__
-#define __FPA__VTK__IMAGE__OBSERVER2D__H__
-
-#include <set>
-#include <itkCommand.h>
-#include <vtkActor.h>
-#include <vtkImageActor.h>
-#include <vtkImageData.h>
-#include <vtkPolyData.h>
-#include <vtkSmartPointer.h>
-
-namespace fpa
-{
-  namespace VTK
-  {
-    namespace Image
-    {
-      /**
-       */
-      template< class F, class R >
-      class Observer2D
-        : public itk::Command
-      {
-      public:
-        typedef Observer2D                 Self;
-        typedef itk::Command                    Superclass;
-        typedef itk::SmartPointer< Self >       Pointer;
-        typedef itk::SmartPointer< const Self > ConstPointer;
-
-        typedef F                             TFilter;
-        typedef R                             TRenderWindow;
-        typedef typename TFilter::TInputImage TImage;
-        typedef typename TFilter::TVertex     TVertex;
-
-        typedef std::set< TVertex > TVertices;
-
-      public:
-        itkNewMacro( Self );
-        itkTypeMacro( Observer2D, itkCommand );
-
-        itkGetConstMacro( RenderPercentage, double );
-        itkSetMacro( RenderPercentage, double );
-
-      public:
-        void SetRenderWindow( R* rw );
-        void SetPixel(
-          typename TImage::IndexType idx,
-          unsigned char red,
-          unsigned char green,
-          unsigned char blue,
-          unsigned char alpha
-          );
-        void Render( );
-        void Execute( itk::Object* c, const itk::EventObject& e ) ITK_OVERRIDE
-          { this->Execute( ( const itk::Object* )( c ), e ); }
-        void Execute( const itk::Object* c, const itk::EventObject& e ) ITK_OVERRIDE;
-
-      protected:
-        Observer2D( );
-        virtual ~Observer2D( );
-
-      private:
-        Observer2D( const Self& ); // Not impl.
-        void operator=( const Self& );  // Not impl.
-
-      protected:
-        vtkSmartPointer< vtkImageData >  m_Stencil;
-        vtkSmartPointer< vtkImageActor > m_StencilActor;
-
-        R*            m_RenderWindow;
-        unsigned long m_Count;
-        unsigned long m_RenderCount;
-        double        m_RenderPercentage;
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/VTK/Image/Observer2D.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__VTK__IMAGE__OBSERVER2D__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/VTK/Image/Observer2D.hxx b/lib/fpa/VTK/Image/Observer2D.hxx
deleted file mode 100644 (file)
index da4c7bf..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-#ifndef __FPA__VTK__IMAGE__OBSERVER2D__HXX__
-#define __FPA__VTK__IMAGE__OBSERVER2D__HXX__
-
-#include <vtkCellArray.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkPoints.h>
-#include <vtkPointData.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRendererCollection.h>
-
-// -------------------------------------------------------------------------
-template< class F, class R >
-void fpa::VTK::Image::Observer2D< F, R >::
-SetRenderWindow( R* rw )
-{
-  this->m_RenderWindow = rw;
-}
-
-// -------------------------------------------------------------------------
-template< class F, class R >
-void fpa::VTK::Image::Observer2D< F, R >::
-SetPixel(
-  typename TImage::IndexType idx,
-  unsigned char red,
-  unsigned char green,
-  unsigned char blue,
-  unsigned char alpha
-  )
-{
-  this->m_Stencil->SetScalarComponentFromDouble
-    ( idx[ 0 ], idx[ 1 ], 0, 0, red );
-  this->m_Stencil->SetScalarComponentFromDouble
-    ( idx[ 0 ], idx[ 1 ], 0, 1, green );
-  this->m_Stencil->SetScalarComponentFromDouble
-    ( idx[ 0 ], idx[ 1 ], 0, 2, blue );
-  this->m_Stencil->SetScalarComponentFromDouble
-    ( idx[ 0 ], idx[ 1 ], 0, 3, alpha );
-  this->m_Stencil->Modified( );
-  this->m_StencilActor->Modified( );
-}
-
-// -------------------------------------------------------------------------
-template< class F, class R >
-void fpa::VTK::Image::Observer2D< F, R >::
-Render( )
-{
-  if( this->m_RenderWindow != NULL )
-    this->m_RenderWindow->Render( );
-}
-
-// -------------------------------------------------------------------------
-template< class F, class R >
-void fpa::VTK::Image::Observer2D< F, R >::
-Execute( const itk::Object* c, const itk::EventObject& e )
-{
-  typedef typename F::TStartEvent     _TStartEvent;
-  typedef typename F::TStartLoopEvent _TStartLoopEvent;
-  typedef typename F::TEndEvent       _TEndEvent;
-  typedef typename F::TEndLoopEvent   _TEndLoopEvent;
-  typedef typename F::TAliveEvent     _TAliveEvent;
-  typedef typename F::TFrontEvent     _TFrontEvent;
-  typedef typename F::TFreezeEvent    _TFreezeEvent;
-
-  typedef typename F::TStartBacktrackingEvent _TStartBacktrackingEvent;
-  typedef typename F::TEndBacktrackingEvent   _TEndBacktrackingEvent;
-  typedef typename F::TBacktrackingEvent      _TBacktrackingEvent;
-
-  static unsigned char Colors[][4] =
-    {
-      {   0,   0, 127, 127 },
-      {   0, 127, 127, 127 },
-      { 127,   0, 127, 127 },
-      { 127, 127,   0, 127 },
-      {   0,   0,  63, 127 },
-      {   0,  63,  63, 127 },
-      {  63,   0,  63, 127 },
-      {  63,  63,   0, 127 },
-      {  63,  63, 127, 127 },
-      {  63, 127, 127, 127 },
-      { 127,  63, 127, 127 },
-      { 127, 127,  63, 127 },
-      { 127, 127,  63, 127 },
-      { 127,  63,  63, 127 },
-      {  63, 127,  63, 127 },
-      {  63,  63, 127, 127 }
-    };
-
-  const F* filter = dynamic_cast< const F* >( c );
-  if( this->m_RenderWindow == NULL || filter == NULL )
-    return;
-
-  const _TStartEvent* startEvt = dynamic_cast< const _TStartEvent* >( &e );
-  const _TStartBacktrackingEvent* startBackEvt =
-    dynamic_cast< const _TStartBacktrackingEvent* >( &e );
-  if( startEvt != NULL || startBackEvt != NULL )
-  {
-    const typename F::TInputImage* img = filter->GetInput( );
-    unsigned int minD = F::TInputImage::ImageDimension;
-    minD = ( minD < 3 )? minD: 3;
-
-    int e[ 6 ] = { 0 };
-    typename F::TInputImage::RegionType reg = img->GetRequestedRegion( );
-    for( unsigned int i = 0; i < minD; i++ )
-    {
-      e[ ( i << 1 ) + 0 ] = reg.GetIndex( )[ i ];
-      e[ ( i << 1 ) + 1 ] = reg.GetIndex( )[ i ] + reg.GetSize( )[ i ] - 1;
-
-    } // rof
-
-    typename F::TInputImage::SpacingType spac = img->GetSpacing( );
-    double s[ 3 ] = { 1, 1, 1 };
-    for( unsigned int i = 0; i < minD; i++ )
-      s[ i ] = double( spac[ i ] );
-
-    typename F::TInputImage::PointType orig = img->GetOrigin( );
-    double o[ 3 ] = { 0 };
-    for( unsigned int i = 0; i < minD; i++ )
-      o[ i ] = double( orig[ i ] );
-
-    this->m_Stencil->SetExtent( e );
-    this->m_Stencil->SetSpacing( s );
-    this->m_Stencil->SetOrigin( o );
-    this->m_Stencil->AllocateScalars( VTK_UNSIGNED_CHAR, 4 );
-    for( unsigned int i = 0; i < 3; i++ )
-      this->m_Stencil->GetPointData( )->
-        GetScalars( )->FillComponent( i, 255 );
-    this->m_Stencil->GetPointData( )->GetScalars( )->FillComponent( 3, 0 );
-
-    this->m_StencilActor->SetInputData( this->m_Stencil );
-    this->m_StencilActor->InterpolateOff( );
-
-    this->m_Count = 0;
-    this->m_RenderCount = reg.GetNumberOfPixels( );
-
-    vtkRenderer* ren =
-      this->m_RenderWindow->GetRenderers( )->GetFirstRenderer( );
-    ren->AddActor( this->m_StencilActor );
-    return;
-
-  } // fi
-
-  const _TAliveEvent* aliveEvt = dynamic_cast< const _TAliveEvent* >( &e );
-  const _TFrontEvent* frontEvt = dynamic_cast< const _TFrontEvent* >( &e );
-  if( aliveEvt != NULL || frontEvt != NULL )
-  {
-    if( aliveEvt != NULL )
-      this->SetPixel(
-        aliveEvt->Vertex,
-        Colors[ aliveEvt->FrontId ][ 0 ],
-        Colors[ aliveEvt->FrontId ][ 1 ],
-        Colors[ aliveEvt->FrontId ][ 2 ],
-        Colors[ aliveEvt->FrontId ][ 3 ]
-        );
-    else if( frontEvt != NULL )
-      this->SetPixel( frontEvt->Vertex, 255, 0, 0, 255 );
-    this->m_Count++;
-
-    // Render visual debug
-    double per = double( this->m_RenderCount ) * this->m_RenderPercentage;
-    if( double( this->m_Count ) >= per )
-      this->Render( );
-    if( double( this->m_Count ) >= per )
-      this->m_Count = 0;
-
-    return;
-
-  } // fi
-
-  const _TEndEvent* endEvt = dynamic_cast< const _TEndEvent* >( &e );
-  if( endEvt != NULL )
-  {
-    vtkRenderer* ren =
-      this->m_RenderWindow->GetRenderers( )->GetFirstRenderer( );
-    ren->RemoveActor( this->m_StencilActor );
-    this->Render( );
-    return;
-
-  } // fi
-
-  const _TBacktrackingEvent* backEvt =
-    dynamic_cast< const _TBacktrackingEvent* >( &e );
-  const _TEndBacktrackingEvent* endBackEvt =
-    dynamic_cast< const _TEndBacktrackingEvent* >( &e );
-  if( backEvt != NULL )
-  {
-    this->SetPixel( backEvt->Vertex, 0, 0, 255, 255 );
-    return;
-
-  } // fi
-
-  if( endBackEvt != NULL )
-  {
-    this->m_RenderWindow->Render( );
-    /* TODO: DEBUG
-       std::cout << "Press enter: " << std::ends;
-       int aux;
-       std::cin >> aux;
-    */
-    return;
-
-  } // fi
-}
-
-// -------------------------------------------------------------------------
-template< class F, class R >
-fpa::VTK::Image::Observer2D< F, R >::
-Observer2D( )
-  : Superclass( ),
-    m_RenderWindow( NULL ),
-    m_RenderPercentage( double( 0.01 ) )
-{
-  this->m_Stencil = vtkSmartPointer< vtkImageData >::New( );
-  this->m_StencilActor = vtkSmartPointer< vtkImageActor >::New( );
-}
-
-// -------------------------------------------------------------------------
-template< class F, class R >
-fpa::VTK::Image::Observer2D< F, R >::
-~Observer2D( )
-{
-}
-
-#endif // __FPA__VTK__IMAGE__OBSERVER2D__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/VTK/Image/Observer3D.h b/lib/fpa/VTK/Image/Observer3D.h
deleted file mode 100644 (file)
index ce3c053..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-#ifndef __FPA__VTK__IMAGE__OBSERVER3D__H__
-#define __FPA__VTK__IMAGE__OBSERVER3D__H__
-
-#include <map>
-
-#include <itkCommand.h>
-
-#include <vtkActor.h>
-#include <vtkPolyData.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkSmartPointer.h>
-
-namespace fpa
-{
-  namespace VTK
-  {
-    namespace Image
-    {
-      /**
-       */
-      template< class F, class R >
-      class Observer3D
-        : public itk::Command
-      {
-      public:
-        typedef Observer3D                      Self;
-        typedef itk::Command                    Superclass;
-        typedef itk::SmartPointer< Self >       Pointer;
-        typedef itk::SmartPointer< const Self > ConstPointer;
-
-        typedef F                                TFilter;
-        typedef R                                TRenderWindow;
-        typedef typename TFilter::TInputImage    TImage;
-        typedef typename TFilter::TVertex        TVertex;
-        typedef typename TFilter::TVertexCompare TVertexCompare;
-
-        typedef std::set< TVertex > TVertices;
-
-      public:
-        itkNewMacro( Self );
-        itkTypeMacro( Observer3D, itkCommand );
-
-        itkGetConstMacro( RenderPercentage, double );
-        itkSetMacro( RenderPercentage, double );
-
-      public:
-        void SetRenderWindow( R* rw );
-        void Render( );
-        void Execute( itk::Object* c, const itk::EventObject& e ) ITK_OVERRIDE
-          { this->Execute( ( const itk::Object* )( c ), e ); }
-        void Execute( const itk::Object* c, const itk::EventObject& e ) ITK_OVERRIDE;
-
-      protected:
-        Observer3D( );
-        virtual ~Observer3D( );
-
-      private:
-        Observer3D( const Self& );     // Not impl.
-        void operator=( const Self& ); // Not impl.
-
-      protected:
-        vtkSmartPointer< vtkPolyData >       m_PolyData;
-        vtkSmartPointer< vtkPolyDataMapper > m_PolyDataMapper;
-        vtkSmartPointer< vtkActor >          m_PolyDataActor;
-        std::map< TVertex, unsigned long, TVertexCompare >   m_PointsToReplace;
-        std::map< TVertex, unsigned long, TVertexCompare >   m_PointsInFront;
-
-        R*            m_RenderWindow;
-        unsigned long m_Count;
-        unsigned long m_RenderCount;
-        double        m_RenderPercentage;
-      };
-
-    } // ecapseman
-
-  } // ecapseman
-
-} // ecapseman
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include <fpa/VTK/Observer3D.hxx>
-#endif // ITK_MANUAL_INSTANTIATION
-
-#endif // __FPA__VTK__IMAGE__OBSERVER3D__H__
-
-// eof - $RCSfile$
diff --git a/lib/fpa/VTK/Image/Observer3D.hxx b/lib/fpa/VTK/Image/Observer3D.hxx
deleted file mode 100644 (file)
index 871142b..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-#ifndef __FPA__VTK__IMAGE__OBSERVER3D__HXX__
-#define __FPA__VTK__IMAGE__OBSERVER3D__HXX__
-
-#include <vtkCellArray.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkPoints.h>
-#include <vtkPointData.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRendererCollection.h>
-
-// -------------------------------------------------------------------------
-template< class F, class R >
-void fpa::VTK::Image::Observer3D< F, R >::
-SetRenderWindow( R* rw )
-{
-  this->m_RenderWindow = rw;
-}
-
-// -------------------------------------------------------------------------
-template< class F, class R >
-void fpa::VTK::Image::Observer3D< F, R >::
-Render( )
-{
-  if( this->m_RenderWindow != NULL )
-    this->m_RenderWindow->Render( );
-}
-
-// -------------------------------------------------------------------------
-template< class F, class R >
-void fpa::VTK::Image::Observer3D< F, R >::
-Execute( const itk::Object* c, const itk::EventObject& e )
-{
-  typedef typename F::TStartEvent     _TStartEvent;
-  typedef typename F::TStartLoopEvent _TStartLoopEvent;
-  typedef typename F::TEndEvent       _TEndEvent;
-  typedef typename F::TEndLoopEvent   _TEndLoopEvent;
-  typedef typename F::TAliveEvent     _TAliveEvent;
-  typedef typename F::TFrontEvent     _TFrontEvent;
-  typedef typename F::TFreezeEvent    _TFreezeEvent;
-
-  typedef typename F::TStartBacktrackingEvent _TStartBacktrackingEvent;
-  typedef typename F::TEndBacktrackingEvent   _TEndBacktrackingEvent;
-  typedef typename F::TBacktrackingEvent      _TBacktrackingEvent;
-
-  static unsigned char Colors[][4] =
-    {
-      {   0,   0, 127, 127 },
-      {   0, 127, 127, 127 },
-      { 127,   0, 127, 127 },
-      { 127, 127,   0, 127 },
-      {   0,   0,  63, 127 },
-      {   0,  63,  63, 127 },
-      {  63,   0,  63, 127 },
-      {  63,  63,   0, 127 },
-      {  63,  63, 127, 127 },
-      {  63, 127, 127, 127 },
-      { 127,  63, 127, 127 },
-      { 127, 127,  63, 127 },
-      { 127, 127,  63, 127 },
-      { 127,  63,  63, 127 },
-      {  63, 127,  63, 127 },
-      {  63,  63, 127, 127 }
-    };
-
-  const F* filter = dynamic_cast< const F* >( c );
-  if( this->m_RenderWindow == NULL || filter == NULL )
-    return;
-  auto image = filter->GetInput( );
-  if( image == NULL )
-    return;
-
-  const _TStartEvent* startEvt = dynamic_cast< const _TStartEvent* >( &e );
-  const _TStartBacktrackingEvent* startBackEvt =
-    dynamic_cast< const _TStartBacktrackingEvent* >( &e );
-  if( startEvt != NULL || startBackEvt != NULL )
-  {
-    this->m_Count = 0;
-    this->m_RenderCount =
-      image->GetLargestPossibleRegion( ).GetNumberOfPixels( );
-    this->m_PointsToReplace.clear( );
-    this->m_PointsInFront.clear( );
-
-    vtkRenderer* ren =
-      this->m_RenderWindow->GetRenderers( )->GetFirstRenderer( );
-    ren->AddActor( this->m_PolyDataActor );
-    return;
-
-  } // fi
-
-  const _TFrontEvent* frontEvt = dynamic_cast< const _TFrontEvent* >( &e );
-  if( frontEvt != NULL )
-  {
-    typename F::TInputImage::PointType pnt;
-    image->TransformIndexToPhysicalPoint( frontEvt->Vertex, pnt );
-    if( this->m_PointsToReplace.empty( ) )
-    {
-      unsigned long nPoints = this->m_PolyData->GetNumberOfPoints( );
-      this->m_PolyData->GetPoints( )->
-        InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
-      this->m_PolyData->GetVerts( )->InsertNextCell( 1 );
-      this->m_PolyData->GetVerts( )->InsertCellPoint( nPoints );
-      this->m_PointsInFront[ frontEvt->Vertex ] = nPoints;
-    }
-    else
-    {
-      auto pIt = this->m_PointsToReplace.begin( );
-      this->m_PolyData->GetPoints( )->
-        SetPoint( pIt->second, pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
-      this->m_PointsToReplace.erase( pIt );
-
-    } // fi
-    this->m_PolyData->Modified( );
-    this->m_PolyDataMapper->Modified( );
-    this->m_PolyDataActor->Modified( );
-
-    // Render visual debug
-    this->m_Count++;
-    double per = double( this->m_RenderCount ) * this->m_RenderPercentage;
-    if( double( this->m_Count ) >= per )
-      this->Render( );
-    if( double( this->m_Count ) >= per )
-      this->m_Count = 0;
-
-    return;
-
-  } // fi
-
-  const _TAliveEvent* aliveEvt = dynamic_cast< const _TAliveEvent* >( &e );
-  if( aliveEvt != NULL )
-  {
-    auto pIt = this->m_PointsInFront.find( aliveEvt->Vertex );
-    if( pIt != this->m_PointsInFront.end( ) )
-    {
-      this->m_PointsToReplace[ pIt->first ] = pIt->second;
-      this->m_PointsInFront.erase( pIt );
-
-    } // fi
-    return;
-
-  } // fi
-
-  const _TEndEvent* endEvt = dynamic_cast< const _TEndEvent* >( &e );
-  if( endEvt != NULL )
-  {
-    vtkRenderer* ren =
-      this->m_RenderWindow->GetRenderers( )->GetFirstRenderer( );
-    ren->RemoveActor( this->m_PolyDataActor );
-    this->Render( );
-    return;
-
-  } // fi
-
-  const _TBacktrackingEvent* backEvt =
-    dynamic_cast< const _TBacktrackingEvent* >( &e );
-  const _TEndBacktrackingEvent* endBackEvt =
-    dynamic_cast< const _TEndBacktrackingEvent* >( &e );
-  if( backEvt != NULL )
-  {
-    // TODO: 
-    return;
-
-  } // fi
-
-  if( endBackEvt != NULL )
-  {
-    this->m_RenderWindow->Render( );
-
-    /* TODO: DEBUG
-       std::cout << "Press enter: " << std::ends;
-       int aux;
-       std::cin >> aux;
-    */
-    return;
-
-  } // fi
-}
-
-// -------------------------------------------------------------------------
-template< class F, class R >
-fpa::VTK::Image::Observer3D< F, R >::
-Observer3D( )
-  : Superclass( ),
-    m_RenderWindow( NULL ),
-    m_RenderPercentage( double( 0.001 ) )
-{
-  this->m_PolyData = vtkSmartPointer< vtkPolyData >::New( );
-  this->m_PolyDataMapper = vtkSmartPointer< vtkPolyDataMapper >::New( );
-  this->m_PolyDataActor =vtkSmartPointer< vtkActor >::New( );
-
-  vtkSmartPointer< vtkPoints > points =
-    vtkSmartPointer< vtkPoints >::New( );
-  vtkSmartPointer< vtkCellArray > verts =
-    vtkSmartPointer< vtkCellArray >::New( );
-  this->m_PolyData->SetPoints( points );
-  this->m_PolyData->SetVerts( verts );
-  this->m_PolyDataMapper->SetInputData( this->m_PolyData );
-  this->m_PolyDataActor->SetMapper( this->m_PolyDataMapper );
-  this->m_PolyDataActor->GetProperty( )->SetColor( 0, 1, 0 );
-}
-
-// -------------------------------------------------------------------------
-template< class F, class R >
-fpa::VTK::Image::Observer3D< F, R >::
-~Observer3D( )
-{
-}
-
-#endif // __FPA__VTK__IMAGE__OBSERVER3D__HXX__
-
-// eof - $RCSfile$
diff --git a/lib/fpa_Instances/Backtracking.i b/lib/fpa_Instances/Backtracking.i
deleted file mode 100644 (file)
index dd5916a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-d #dims=2;3
-d #floats=float;double
-d #mst=fpa::Image::MinimumSpanningTree
-d #path=ExtractPathFromMinimumSpanningTree
-d #ebc=ExtractEndPointsAndBifurcationsFromMinimumSpanningTree
-
-f fpa_Instances/Instances.h
-
-i utility
-i vector
-t fpa/Base/#path.h
-t fpa/Base/#ebc.h
-t fpa/Image/#ebc.h
-t itkSimpleDataObjectDecorator.h
-
-c itk::SimpleDataObjectDecorator< std::vector< std::pair< itk::Index< #dims >, itk::Index< #dims > > > >
-c fpa::Base::#path< #mst< #dims > >
-c fpa::Base::#ebc< #mst< #dims > >
-c fpa::Image::#ebc< itk::Image< #floats, #dims >, #mst< #dims > >
-
-* eof - $RCSfile$
diff --git a/lib/fpa_Instances/CMakeLists.txt b/lib/fpa_Instances/CMakeLists.txt
deleted file mode 100644 (file)
index 536b61c..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-## =================================
-## == Compile instances libraries ==
-## =================================
-
-SET(pfx "fpa_")
-SET(arg ${pfx} ${prj_VER} ${prj_sVER})
-
-cpPlugins_WrapInstances(Instances ${arg} ${cpPlugins_LIBRARIES} ${ITK_LIBRARIES} ${VTK_LIBRARIES})
-cpPlugins_WrapInstances(Functors ${arg} ${pfx}Instances)
-cpPlugins_WrapInstances(Filters ${arg} ${pfx}Instances)
-cpPlugins_WrapInstances(Backtracking ${arg} ${pfx}Instances)
-cpPlugins_WrapInstances(Observers ${arg} ${pfx}Filters ${VTK_LIBRARIES})
-
-SET(
-  fpa_LIBRARIES
-  ${pfx}Instances
-  ${pfx}Functors
-  ${pfx}Filters
-  ${pfx}Backtracking
-  ${pfx}Observers
-  CACHE INTERNAL "All valid instances." FORCE
-  )
-
-## eof - $RCSfile$
diff --git a/lib/fpa_Instances/Filters.i b/lib/fpa_Instances/Filters.i
deleted file mode 100644 (file)
index d4269e9..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-f fpa_Instances/Instances.h
-
-t fpa/Base/Algorithm.h
-t fpa/Base/RegionGrow.h
-t fpa/Base/Dijkstra.h
-
-t fpa/Image/Algorithm.h
-t fpa/Image/RegionGrow.h
-t fpa/Image/Dijkstra.h
-
-d #dims=2;3
-d #int=char;short;int;long
-d #uint=unsigned #int
-d #float=float;double
-d #pixels=#int;#uint;#float
-d #b=fpa::Base
-d #i=fpa::Image
-d #mst=MinimumSpanningTree
-d #rg_ins=#pixels
-d #rg_outs=unsigned short;unsigned char
-d #d_ins=#pixels
-d #d_outs=#float
-d #inputs=#pixels
-d #outputs=#pixels
-
-* =====================
-* == Base algorithms ==
-* =====================
-
-c #b::Algorithm< itk::Index< #dims >, #inputs, #outputs, itk::Image< #inputs, #dims >, itk::Functor::IndexLexicographicCompare< #dims >, itk::ImageToImageFilter< itk::Image< #inputs, #dims >, itk::Image< #outputs, #dims > > >
-
-c #i::Algorithm< itk::Image< #rg_ins, #dims >, itk::Image< #rg_outs, #dims >, fpa::Base::RegionGrow< itk::Index< #dims >, #rg_ins, #rg_outs, itk::Image< #rg_ins, #dims >, itk::Functor::IndexLexicographicCompare< #dims >, itk::ImageToImageFilter< itk::Image< #rg_ins, #dims >, itk::Image< #rg_outs, #dims >  >  >  >
-
-c #b::Dijkstra< itk::Index< #dims >, #d_ins, #d_outs, itk::Image< #d_ins, #dims >, itk::Functor::IndexLexicographicCompare< #dims >, #i::MinimumSpanningTree< #dims >, itk::ImageToImageFilter< itk::Image< #d_ins, #dims >, itk::Image< #d_outs, #dims > > >
-
-* ======================
-* == Image algorithms ==
-* ======================
-
-c #i::RegionGrow< itk::Image< #rg_ins, #dims >, itk::Image< #rg_outs, #dims > >
-c #i::Dijkstra< itk::Image< #d_ins, #dims >, itk::Image< #d_outs, #dims > >
-
-* eof - $RCSfile$
diff --git a/lib/fpa_Instances/Functors.i b/lib/fpa_Instances/Functors.i
deleted file mode 100644 (file)
index 0bb83ff..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-d #functors=GulsunTekMedialness;FluxMedialness;MFluxMedialness
-d #filter=cpExtensions::Algorithms::ImageFunctionFilter
-d #vectors=itk::CovariantVector
-d #k=itk::Image
-
-f fpa_Instances/Instances.h
-
-t itkImageFunction.h
-t fpa/Image/Functors/#functors.h
-t fpa/Image/Functors/GradientImageFunctionBase.h
-t cpExtensions/Algorithms/ImageFunctionFilter.h
-
-d #dims=2;3
-d #int=char;short;int;long
-d #uint=unsigned #int
-d #float=float;double
-d #pixels=#int;#uint;#float
-d #b=fpa::Base
-d #i=fpa::Image
-d #mst=MinimumSpanningTree
-d #rg_ins=#pixels
-d #rg_outs=unsigned short;unsigned char
-d #d_ins=#pixels
-d #d_outs=#float
-d #inputs=#pixels
-d #outputs=#pixels
-
-c #i::Functors::#functors< #k< #vectors< #float, #dims >, #dims > >
-c #filter< #k< #vectors< #float, #dims >, #dims >, #k< #float, #dims >, #i::Functors::#functors< #k< #vectors< #float, #dims >, #dims > > >
-
-* eof - $RCSfile$
diff --git a/lib/fpa_Instances/Instances.i b/lib/fpa_Instances/Instances.i
deleted file mode 100644 (file)
index 9c8d6d7..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-f cpPlugins_Instances/ScalarImagesBaseFilters.h
-
-t fpa/Base/MinimumSpanningTree.h
-t fpa/Image/MinimumSpanningTree.h
-t fpa/IO/MinimumSpanningTreeReader.h
-t fpa/IO/MinimumSpanningTreeWriter.h
-t fpa/Base/ImageSkeleton.h
-t fpa/VTK/Image/ImageSkeletonToPolyData.h
-
-t itkImage.h
-t itkImportImageContainer.h
-t itkImageRegionConstIteratorWithIndex.h
-t itkImageConstIteratorWithIndex.h
-t itkSimpleDataObjectDecorator.h
-
-d #dims=2;3
-d #int=char;short;int;long
-d #uint=unsigned #int
-d #float=float;double
-d #pixels=#int;#uint;#float
-d #b=fpa::Base
-d #i=fpa::Image
-d #mst=MinimumSpanningTree
-d #rg_ins=#pixels
-d #rg_outs=unsigned short;unsigned char
-d #d_ins=#pixels
-d #d_outs=#float
-d #inputs=#pixels
-d #outputs=#pixels
-
-* ================
-* == Base types ==
-* ================
-
-c itk::ImportImageContainer< unsigned long, #i::{#mst}Data< #dims > >
-c itk::Image< #i::{#mst}Data< #dims >, #dims >
-c #b::#mst< itk::Image< #i::{#mst}Data< #dims >, #dims >, itk::Index< #dims > >
-c #i::#mst@{Data;{}}< #dims >
-c #b::ImageSkeleton< #i::#mst< #dims > >
-
-c itk::ImageConstIteratorWithIndex< #i::#mst< #dims > >
-c itk::ImageRegionConstIteratorWithIndex< #i::#mst< #dims > >
-c fpa::IO::MinimumSpanningTree@{Reader;Writer}< #i::#mst< #dims > >
-
-* ========================
-* == Conversion filters ==
-* ========================
-
-c fpa::VTK::Image::ImageSkeletonToPolyData< #b::ImageSkeleton< #i::#mst< #dims > > >
-
-* eof - $RCSfile$
diff --git a/lib/fpa_Instances/Observers.i b/lib/fpa_Instances/Observers.i
deleted file mode 100644 (file)
index 247788b..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-d #dims=2;3
-d #int=char;short;int;long
-d #uint=unsigned #int
-d #float=float;double
-d #pixels=#int;#uint;#float
-d #rg_ins=#pixels
-d #rg_outs=unsigned short;unsigned char
-d #d_ins=#pixels
-d #d_outs=#float
-d #cls=fpa::VTK::Image::Observer
-d #i=fpa::Image
-d #k=itk::Image
-
-f fpa_Instances/Filters.h
-
-i vtkRenderWindow.h
-
-t fpa/VTK/Image/Observer2D.h
-t fpa/VTK/Image/Observer3D.h
-
-c {#cls}{#dims}D< #i::RegionGrow< #k< #rg_ins, #dims >, #k< #rg_outs, #dims > >, vtkRenderWindow >
-c {#cls}{#dims}D< #i::Dijkstra< #k< #d_ins, #dims >, #k< #d_outs, #dims > >, vtkRenderWindow >
-
-* eof - $RCSfile$
diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt
deleted file mode 100644 (file)
index fd17844..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-IF(BUILD_PLUGINS)
-  SUBDIRS(
-    fpa
-    )
-ENDIF(BUILD_PLUGINS)
-
-## eof - $RCSfile$
diff --git a/plugins/fpa/BaseImageFilter.cxx b/plugins/fpa/BaseImageFilter.cxx
deleted file mode 100644 (file)
index 88e80f3..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#include "BaseImageFilter.h"
-#include <cpPlugins/Image.h>
-
-// -------------------------------------------------------------------------
-bool fpaPlugins::BaseImageFilter::
-IsInteractive( )
-{
-  return( true );
-}
-
-// -------------------------------------------------------------------------
-void fpaPlugins::BaseImageFilter::
-SetInteractionObjects( const std::vector< void* >& objs )
-{
-  if( objs.size( ) > 0 )
-    this->m_SingleInteractor =
-      reinterpret_cast< vtkRenderWindowInteractor* >( objs[ 0 ] );
-  if( objs.size( ) > 1 )
-    this->m_MPRViewer = reinterpret_cast< TMPRWidget* >( objs[ 1 ] );
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::BaseImageFilter::
-BaseImageFilter( )
-  : Superclass( )
-{
-  this->_AddInput( "Input" );
-  this->_AddInput( "Seeds" );
-  this->_AddOutput< cpPlugins::Image >( "Output" );
-
-  this->m_Parameters.ConfigureAsBool( "VisualDebug" );
-  this->m_Parameters.ConfigureAsBool( "StopAtOneFront" );
-  this->m_Parameters.SetBool( "VisualDebug", false );
-  this->m_Parameters.SetBool( "StopAtOneFront", false );
-
-  std::vector< std::string > orders;
-  orders.push_back( "1" );
-  orders.push_back( "2" );
-  this->m_Parameters.ConfigureAsChoices( "NeighborhoodOrder", orders );
-  this->m_Parameters.SetSelectedChoice( "NeighborhoodOrder", "1" );
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::BaseImageFilter::
-~BaseImageFilter( )
-{
-}
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/BaseImageFilter.h b/plugins/fpa/BaseImageFilter.h
deleted file mode 100644 (file)
index 3069f49..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-#ifndef __FPAPLUGINS__BASEIMAGEFILTER__H__
-#define __FPAPLUGINS__BASEIMAGEFILTER__H__
-
-#include <fpa/fpaPlugins_Export.h>
-#include <cpPlugins/ProcessObject.h>
-
-#include <cpExtensions/QT/SimpleMPRWidget.h>
-#include <vtkRenderWindowInteractor.h>
-
-namespace fpaPlugins
-{
-  /**
-   */
-  class fpaPlugins_EXPORT BaseImageFilter
-    : public cpPlugins::ProcessObject
-  {
-  public:
-    typedef BaseImageFilter                 Self;
-    typedef cpPlugins::ProcessObject        Superclass;
-    typedef itk::SmartPointer< Self >       Pointer;
-    typedef itk::SmartPointer< const Self > ConstPointer;
-
-    typedef cpExtensions::QT::SimpleMPRWidget TMPRWidget;
-
-  public:
-    itkTypeMacro( BaseImageFilter, cpPlugins::ProcessObject );
-    cpPlugins_Id_Macro( BaseImageFilter, fpaImageAlgorithm );
-
-  public:
-    virtual bool IsInteractive( ) override;
-    virtual void SetInteractionObjects(
-      const std::vector< void* >& objs
-      ) override;
-
-  protected:
-    BaseImageFilter( );
-    virtual ~BaseImageFilter( );
-
-    template< class _TFilter >
-      inline _TFilter* _ConfigureFilter( );
-
-    template< class _TFilter >
-      inline void _ExecuteFilter( _TFilter* filter );
-
-    template< class _TFilter >
-      inline void _ConfigureDebugger( _TFilter* filter );
-
-    template< class _TFilter >
-      inline void _DeconfigureDebugger( _TFilter* filter );
-
-  private:
-    // Purposely not implemented.
-    BaseImageFilter( const Self& other );
-    Self& operator=( const Self& other );
-
-  protected:
-    TMPRWidget*                m_MPRViewer;
-    vtkRenderWindowInteractor* m_SingleInteractor;
-    std::set< unsigned long >  m_Observers;
-  };
-
-} // ecapseman
-
-#include "BaseImageFilter.hxx"
-
-#endif // __FPAPLUGINS__BASEIMAGEFILTER__H__
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/BaseImageFilter.hxx b/plugins/fpa/BaseImageFilter.hxx
deleted file mode 100644 (file)
index 965514f..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-#ifndef __FPAPLUGINS__BASEIMAGEFILTER__HXX__
-#define __FPAPLUGINS__BASEIMAGEFILTER__HXX__
-
-#include <cpExtensions/DataStructures/ImageIndexesContainer.h>
-#include <fpa_Instances/Observers.h>
-
-// -------------------------------------------------------------------------
-template< class _TFilter >
-_TFilter* fpaPlugins::BaseImageFilter::
-_ConfigureFilter( )
-{
-  typedef typename _TFilter::TInputImage _TImage;
-  static const unsigned int Dim = _TImage::ImageDimension;
-
-  auto image = this->GetInputData< _TImage >( "Input" );
-  if( image == NULL )
-    return( NULL );
-  auto seeds = this->GetInputData< vtkPoints >( "Seeds" );
-
-  // Create filter and connect input
-  auto filter = this->_CreateITK< _TFilter >( );
-  filter->SetInput( image );
-
-  // Set numeric parameters
-  filter->SetNeighborhoodOrder(
-    this->m_Parameters.GetSelectedChoice( "NeighborhoodOrder" )[ 0 ] - '0'
-    );
-  filter->SetStopAtOneFront( this->m_Parameters.GetBool( "StopAtOneFront" ) );
-
-  // Assign seeds
-  filter->ClearSeeds( );
-  if( seeds != NULL )
-  {
-    typename _TImage::PointType pnt;
-    typename _TImage::IndexType idx;
-    unsigned int dim =
-      ( _TImage::ImageDimension < 3 )? _TImage::ImageDimension: 3;
-    for( unsigned int i = 0; i < seeds->GetNumberOfPoints( ); ++i )
-    {
-      double buf[ 3 ];
-      seeds->GetPoint( i, buf );
-      pnt.Fill( 0 );
-      for( unsigned int d = 0; d < dim; ++d )
-        pnt[ d ] = buf[ d ];
-
-      if( image->TransformPhysicalPointToIndex( pnt, idx ) )
-        filter->AddSeed( idx, 0 );
-
-    } // rof
-
-  } // fi
-
-  // Ok!
-  return( filter );
-}
-
-// -------------------------------------------------------------------------
-template< class _TFilter >
-void fpaPlugins::BaseImageFilter::
-_ExecuteFilter( _TFilter* filter )
-{
-  // Go!!!
-  this->_ConfigureDebugger( filter );
-  filter->Update( );
-  this->_DeconfigureDebugger( filter );
-
-  // Connect output
-  this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TFilter >
-void fpaPlugins::BaseImageFilter::
-_ConfigureDebugger( _TFilter* filter )
-{
-  typedef typename _TFilter::TInputImage _TImage;
-  typedef fpa::VTK::Image::Observer2D< _TFilter, vtkRenderWindow > _2D;
-  typedef fpa::VTK::Image::Observer3D< _TFilter, vtkRenderWindow > _3D;
-
-  this->m_Observers.clear( );
-  if( this->m_Parameters.GetBool( "VisualDebug" ) )
-  {
-    if( this->m_MPRViewer != NULL )
-    {
-      if( _TImage::ImageDimension == 2 )
-      {
-        auto iren = this->m_MPRViewer->GetInteractor( 2 );
-        if( iren != NULL )
-        {
-          typename _2D::Pointer debugger = _2D::New( );
-          debugger->SetRenderWindow( iren->GetRenderWindow( ) );
-          debugger->SetRenderPercentage( 0.01 );
-          this->m_Observers.insert(
-            filter->AddObserver( itk::AnyEvent( ), debugger )
-            );
-          filter->ThrowEventsOn( );
-
-        } // fi
-      }
-      else if( _TImage::ImageDimension == 3 )
-      {
-        auto iren = this->m_MPRViewer->GetInteractor( 3 );
-        if( iren != NULL )
-        {
-          typename _3D::Pointer debugger = _3D::New( );
-          debugger->SetRenderWindow( iren->GetRenderWindow( ) );
-          debugger->SetRenderPercentage( 0.001 );
-          this->m_Observers.insert(
-            filter->AddObserver( itk::AnyEvent( ), debugger )
-            );
-          filter->ThrowEventsOn( );
-
-        } // fi
-
-      } // fi
-
-    } // fi
-
-    if( this->m_SingleInteractor != NULL )
-    {
-      if( _TImage::ImageDimension == 2 )
-      {
-      }
-      else if( _TImage::ImageDimension == 3 )
-      {
-      } // fi
-
-    } // fi
-
-  } // fi
-}
-
-// -------------------------------------------------------------------------
-template< class F >
-void fpaPlugins::BaseImageFilter::
-_DeconfigureDebugger( F* filter )
-{
-  if( filter != NULL )
-  {
-    auto oIt = this->m_Observers.begin( );
-    for( ; oIt != this->m_Observers.end( ); ++oIt )
-      filter->RemoveObserver( *oIt );
-
-  } // fi
-  this->m_Observers.clear( );
-}
-
-#endif // __FPAPLUGINS__BASEIMAGEFILTER__HXX__
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/CMakeLists.txt b/plugins/fpa/CMakeLists.txt
deleted file mode 100644 (file)
index 84f58c3..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-SET(lib_NAME fpaPlugins)
-SET(
-  lib_HEADERS
-  ${CMAKE_CURRENT_SOURCE_DIR}/GradientBaseImageFunctionSource.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/ImageRegionGrow.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/ImageDijkstra.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/MinimumSpanningTreeReader.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/MinimumSpanningTreeWriter.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/RegionGrowThresholdFunction.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/InvertCostFunction.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/ExtractPathFromMinimumSpanningTree.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h
-  )
-SET(
-  lib_SOURCES
-  ${CMAKE_CURRENT_SOURCE_DIR}/GradientBaseImageFunctionSource.cxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/ImageRegionGrow.cxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/ImageDijkstra.cxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/MinimumSpanningTreeReader.cxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/MinimumSpanningTreeWriter.cxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/RegionGrowThresholdFunction.cxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/InvertCostFunction.cxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/ExtractPathFromMinimumSpanningTree.cxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.cxx
-  )
-SET(
-  lib_OTHER_SOURCES
-  ${CMAKE_CURRENT_SOURCE_DIR}/BaseImageFilter.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/BaseImageFilter.hxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/BaseImageFilter.cxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/MinimumSpanningTree.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/MinimumSpanningTree.cxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/ImageSkeleton.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/ImageSkeleton.cxx
-  )
-SET(lib_QT4_HEADERS "")
-
-cpPlugins_WrapPlugins(
-  ${lib_NAME} ${prj_VER} ${prj_sVER}
-  "${lib_HEADERS}"
-  "${lib_SOURCES}"
-  "${lib_OTHER_SOURCES}"
-  "${lib_QT4_HEADERS}"
-  ${cpExtensions_LIBRARY}
-  ${fpa_LIBRARIES}
-  )
-
-## ========================
-## -- Installation rules --
-## ========================
-
-#INSTALL(
-#  TARGETS ${lib_NAME}
-#  RUNTIME DESTINATION bin
-#  LIBRARY DESTINATION lib
-#  ARCHIVE DESTINATION lib/static
-#  )
-
-## eof - $RCSfile$
diff --git a/plugins/fpa/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.cxx b/plugins/fpa/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.cxx
deleted file mode 100644 (file)
index ea2c37a..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#include "ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h"
-
-#include <fpa_Instances/Backtracking.h>
-#include <cpPlugins/Image.h>
-#include <cpPlugins/ImageIndexesContainer.h>
-#include <plugins/fpa/ImageSkeleton.h>
-
-// -------------------------------------------------------------------------
-fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
-ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
-  : Superclass( )
-{
-  this->_AddInput( "CostsImage" );
-  this->_AddInput( "DistanceMap" );
-  this->_AddInput( "MST" );
-  this->_AddOutput< cpPlugins::ImageIndexesContainer >( "EndPoints" );
-  this->_AddOutput< cpPlugins::ImageIndexesContainer >( "Bifurcations" );
-  this->_AddOutput< cpPlugins::ImageIndexesContainer >( "Collisions" );
-  this->_AddOutput< fpaPlugins::ImageSkeleton >( "Skeleton" );
-
-  this->m_Parameters.ConfigureAsBool( "SquaredDistanceMap" );
-  this->m_Parameters.SetBool( "SquaredDistanceMap", false );
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
-~ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( )
-{
-}
-
-// -------------------------------------------------------------------------
-void fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
-_GenerateData( )
-{
-  auto image = this->GetInputData< itk::DataObject >( "CostsImage" );
-  cpPlugins_Image_Demangle_Pixel_AllFloats     ( _GD0, image, 2 );
-  else cpPlugins_Image_Demangle_Pixel_AllFloats( _GD0, image, 3 );
-  else this->_Error( "Invalid input costs." );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage >
-void fpaPlugins::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree::
-_GD0( _TImage* image )
-{
-  typedef fpa::Image::MinimumSpanningTree< _TImage::ImageDimension > _TMST;
-  typedef fpa::Image::ExtractEndPointsAndBifurcationsFromMinimumSpanningTree< _TImage, _TMST > _TFilter;
-
-  // Check input objects' integrity
-  auto dmap = this->GetInputData< _TImage >( "DistanceMap" );
-  if( dmap == NULL )
-    this->_Error( "Distance map does not have the same type as the costs image." );
-  auto mst = this->GetInputData< _TMST >( "MST" );
-  if( mst == NULL )
-    this->_Error( "No valid input tree." );
-
-  // Create filter and connect inputs
-  _TFilter* filter = this->_CreateITK< _TFilter >( );
-  filter->SetCostsImage( image );
-  filter->SetDistanceMap( dmap );
-  filter->SetMinimumSpanningTree( mst );
-  filter->SetSquaredDistanceMap(
-    this->m_Parameters.GetBool( "SquaredDistanceMap" )
-    );
-  filter->Update( );
-
-  this->GetOutput( "EndPoints" )->SetITK( filter->GetEndPoints( ) );
-  this->GetOutput( "Bifurcations" )->SetITK( filter->GetBifurcations( ) );
-  this->GetOutput( "Collisions" )->SetITK( filter->GetCollisions( ) );
-  this->GetOutput( "Skeleton" )->SetITK( filter->GetSkeleton( ) );
-}
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h b/plugins/fpa/ExtractEndPointsAndBifurcationsFromMinimumSpanningTree.h
deleted file mode 100644 (file)
index 27b0efc..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef __FPAPLUGINS__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__H__
-#define __FPAPLUGINS__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__H__
-
-#include <fpa/fpaPlugins_Export.h>
-#include <cpPlugins/ProcessObject.h>
-
-namespace fpaPlugins
-{
-  /**
-   */
-  class fpaPlugins_EXPORT ExtractEndPointsAndBifurcationsFromMinimumSpanningTree
-    : public cpPlugins::ProcessObject
-  {
-  public:
-    typedef ExtractEndPointsAndBifurcationsFromMinimumSpanningTree Self;
-    typedef cpPlugins::ProcessObject           Superclass;
-    typedef itk::SmartPointer< Self >          Pointer;
-    typedef itk::SmartPointer< const Self >    ConstPointer;
-
-  public:
-    itkNewMacro( Self );
-    itkTypeMacro(
-      ExtractEndPointsAndBifurcationsFromMinimumSpanningTree,
-      cpPlugins::ProcessObject
-      );
-    cpPlugins_Id_Macro(
-      ExtractEndPointsAndBifurcationsFromMinimumSpanningTree,
-      fpaImageAlgorithm
-      );
-
-  protected:
-    ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( );
-    virtual ~ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( );
-
-    virtual void _GenerateData( ) ITK_OVERRIDE;
-
-    template< class _TImage >
-      inline void _GD0( _TImage* image );
-
-  private:
-    // Purposely not implemented.
-    ExtractEndPointsAndBifurcationsFromMinimumSpanningTree( const Self& other );
-    Self& operator=( const Self& other );
-  };
-
-} // ecapseman
-
-#endif // __FPAPLUGINS__EXTRACTENDPOINTSANDBIFURCATIONSFROMMINIMUMSPANNINGTREE__H__
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/ExtractPathFromMinimumSpanningTree.cxx b/plugins/fpa/ExtractPathFromMinimumSpanningTree.cxx
deleted file mode 100644 (file)
index 0f717ab..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-#include "ExtractPathFromMinimumSpanningTree.h"
-#include <cpPlugins/Path.h>
-#include <cpExtensions/DataStructures/ImageIndexesContainer.h>
-#include <fpa_Instances/Backtracking.h>
-
-// -------------------------------------------------------------------------
-fpaPlugins::ExtractPathFromMinimumSpanningTree::
-ExtractPathFromMinimumSpanningTree( )
-  : Superclass( )
-{
-  this->_AddInput( "MST" );
-  this->_AddInput( "Seeds" );
-  this->_AddOutput< cpPlugins::Path >( "Output" );
-
-  this->m_Parameters.ConfigureAsUint( "Vertex0" );
-  this->m_Parameters.ConfigureAsUint( "Vertex1" );
-  this->m_Parameters.SetUint( "Vertex0", 0 );
-  this->m_Parameters.SetUint( "Vertex1", 1 );
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::ExtractPathFromMinimumSpanningTree::
-~ExtractPathFromMinimumSpanningTree( )
-{
-}
-
-// -------------------------------------------------------------------------
-void fpaPlugins::ExtractPathFromMinimumSpanningTree::
-_GenerateData( )
-{
-  typedef fpa::Image::MinimumSpanningTree< 2 > _2DMST;
-  typedef fpa::Image::MinimumSpanningTree< 3 > _3DMST;
-
-  auto mst = this->GetInputData< itk::DataObject >( "MST" );
-  auto mst2 = dynamic_cast< _2DMST* >( mst );
-  auto mst3 = dynamic_cast< _3DMST* >( mst );
-  if     ( mst2 != NULL ) this->_GD0( mst2 );
-  else if( mst3 != NULL ) this->_GD0( mst3 );
-  else this->_Error( "Invalid input MST." );
-}
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-void fpaPlugins::ExtractPathFromMinimumSpanningTree::
-_GD0( _TMST* mst )
-{
-  typedef fpa::Base::ExtractPathFromMinimumSpanningTree< _TMST > _TFilter;
-  auto vertices = this->GetInputData< vtkPoints >( "Seeds" );
-  if( vertices == NULL )
-    this->_Error( "No valid vertices." );
-  if( vertices->GetNumberOfPoints( ) < 2 )
-    this->_Error( "Not enough vertices." );
-
-  double b0[ 3 ], b1[ 3 ];
-  vertices->GetPoint( this->m_Parameters.GetUint( "Vertex0" ), b0 );
-  vertices->GetPoint( this->m_Parameters.GetUint( "Vertex1" ), b1 );
-
-  typename _TMST::PointType p0, p1;
-  unsigned int dim = ( _TMST::ImageDimension < 3 )? _TMST::ImageDimension: 3;
-  for( unsigned int d = 0; d < dim; ++d )
-  {
-    p0[ d ] = b0[ d ];
-    p1[ d ] = b1[ d ];
-
-  } // rof
-  typename _TMST::TVertex v0, v1;
-  mst->TransformPhysicalPointToIndex( p0, v0 );
-  mst->TransformPhysicalPointToIndex( p1, v1 );
-
-  // Create filter and connect input
-  _TFilter* filter = this->_CreateITK< _TFilter >( );
-  filter->SetInput( mst );
-  filter->SetVertex0( v0 );
-  filter->SetVertex1( v1 );
-  filter->Update( );
-
-  // Connect output and finish
-  this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
-}
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/ExtractPathFromMinimumSpanningTree.h b/plugins/fpa/ExtractPathFromMinimumSpanningTree.h
deleted file mode 100644 (file)
index fd445bd..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef __FPAPLUGINS__EXTRACTPATHFROMMINIMUMSPANNINGTREE__H__
-#define __FPAPLUGINS__EXTRACTPATHFROMMINIMUMSPANNINGTREE__H__
-
-#include <fpa/fpaPlugins_Export.h>
-#include <cpPlugins/ProcessObject.h>
-
-namespace fpaPlugins
-{
-  /**
-   */
-  class fpaPlugins_EXPORT ExtractPathFromMinimumSpanningTree
-    : public cpPlugins::ProcessObject
-  {
-  public:
-    typedef ExtractPathFromMinimumSpanningTree Self;
-    typedef cpPlugins::ProcessObject           Superclass;
-    typedef itk::SmartPointer< Self >          Pointer;
-    typedef itk::SmartPointer< const Self >    ConstPointer;
-
-  public:
-    itkNewMacro( Self );
-    itkTypeMacro(
-      ExtractPathFromMinimumSpanningTree, cpPlugins::ProcessObject
-      );
-    cpPlugins_Id_Macro(
-      ExtractPathFromMinimumSpanningTree, fpaBaseAlgorithm
-      );
-
-  protected:
-    ExtractPathFromMinimumSpanningTree( );
-    virtual ~ExtractPathFromMinimumSpanningTree( );
-
-    virtual void _GenerateData( ) ITK_OVERRIDE;
-
-    template< class _TMST >
-      inline void _GD0( _TMST* mst );
-
-  private:
-    // Purposely not implemented.
-    ExtractPathFromMinimumSpanningTree( const Self& other );
-    Self& operator=( const Self& other );
-  };
-
-} // ecapseman
-
-#endif // __FPAPLUGINS__EXTRACTPATHFROMMINIMUMSPANNINGTREE__H__
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/GradientBaseImageFunctionSource.cxx b/plugins/fpa/GradientBaseImageFunctionSource.cxx
deleted file mode 100644 (file)
index 85a79ce..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#include "GradientBaseImageFunctionSource.h"
-
-#include <cpPlugins/Image.h>
-#include <fpa_Instances/Functors.h>
-
-// -------------------------------------------------------------------------
-fpaPlugins::GradientBaseImageFunctionSource::
-GradientBaseImageFunctionSource( )
-  : Superclass( )
-{
-  this->_AddInput( "Input" );
-  this->_AddOutput< cpPlugins::Image >( "Output" );
-
-  std::vector< std::string > choices;
-  choices.push_back( "Gulsun&Tek" );
-  choices.push_back( "Flux" );
-  choices.push_back( "MFlux" );
-  this->m_Parameters.ConfigureAsChoices( "FunctionType", choices );
-  this->m_Parameters.SetSelectedChoice( "FunctionType", "Gulsun&Tek" );
-
-  this->m_Parameters.ConfigureAsReal( "MinRadius" );
-  this->m_Parameters.ConfigureAsReal( "MaxRadius" );
-  this->m_Parameters.ConfigureAsUint( "ProfileSampling" );
-  this->m_Parameters.ConfigureAsUint( "RadialSampling" );
-  this->m_Parameters.SetReal( "MinRadius", 0 );
-  this->m_Parameters.SetReal( "MaxRadius", 1 );
-  this->m_Parameters.SetUint( "ProfileSampling", 4 );
-  this->m_Parameters.SetUint( "RadialSampling", 10 );
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::GradientBaseImageFunctionSource::
-~GradientBaseImageFunctionSource( )
-{
-}
-
-// -------------------------------------------------------------------------
-void fpaPlugins::GradientBaseImageFunctionSource::
-_GenerateData( )
-{
-  auto image = this->GetInputData< itk::DataObject >( "Input" );
-  cpPlugins_Image_Demangle_VectorPixel_AllFloats     ( _GD0, image, CovariantVector, 2 );
-  else cpPlugins_Image_Demangle_VectorPixel_AllFloats( _GD0, image, CovariantVector, 3 );
-  else this->_Error( "Invalid input image." );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage >
-void fpaPlugins::GradientBaseImageFunctionSource::
-_GD0( _TImage* image )
-{
-  typedef fpa::Image::Functors::GulsunTekMedialness< _TImage > _TGT;
-  typedef fpa::Image::Functors::FluxMedialness< _TImage > _TFl;
-  typedef fpa::Image::Functors::MFluxMedialness< _TImage > _TMFl;
-
-  auto ft = this->m_Parameters.GetSelectedChoice( "FunctionType" );
-  if     ( ft == "Gulsun&Tek" ) this->_GD1< _TImage, _TGT >( image );
-  else if( ft == "Flux" )       this->_GD1< _TImage, _TFl >( image );
-  else if( ft == "MFlux" )      this->_GD1< _TImage, _TMFl >( image );
-  else this->_Error( "Invalid function type." );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage, class _TFunction >
-void fpaPlugins::GradientBaseImageFunctionSource::
-_GD1( _TImage* image )
-{
-  typedef itk::Image< typename _TFunction::TOutput, _TImage::ImageDimension > _TOutImage;
-  typedef cpExtensions::Algorithms::ImageFunctionFilter< _TImage, _TOutImage, _TFunction > _TFilter;
-
-  _TFilter* filter = this->_CreateITK< _TFilter >( );
-  filter->SetInput( image );
-  _TFunction* function = filter->GetFunction( );
-  if( function == NULL )
-  {
-    filter->SetFunction( _TFunction::New( ) );
-    function = filter->GetFunction( );
-
-  } // fi
-  function->SetMinRadius( this->m_Parameters.GetReal( "MinRadius" ) );
-  function->SetMaxRadius( this->m_Parameters.GetReal( "MaxRadius" ) );
-  /*
-    function->SetProfileSampling( this->m_Parameters.GetUint( "ProfileSampling" ) );
-    function->SetRadialSampling( this->m_Parameters.GetUint( "RadialSampling" ) );
-  */
-
-  filter->Update( );
-
-  // Connect output and finish
-  this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
-}
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/GradientBaseImageFunctionSource.h b/plugins/fpa/GradientBaseImageFunctionSource.h
deleted file mode 100644 (file)
index feae730..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef __FPAPLUGINS__GRADIENTBASEIMAGEFUNCTIONSOURCE__H__
-#define __FPAPLUGINS__GRADIENTBASEIMAGEFUNCTIONSOURCE__H__
-
-#include <fpa/fpaPlugins_Export.h>
-#include <cpPlugins/ProcessObject.h>
-
-namespace fpaPlugins
-{
-  /**
-   */
-  class fpaPlugins_EXPORT GradientBaseImageFunctionSource
-    : public cpPlugins::ProcessObject
-  {
-  public:
-    typedef GradientBaseImageFunctionSource Self;
-    typedef cpPlugins::ProcessObject        Superclass;
-    typedef itk::SmartPointer< Self >       Pointer;
-    typedef itk::SmartPointer< const Self > ConstPointer;
-
-  public:
-    itkNewMacro( Self );
-    itkTypeMacro(
-      GradientBaseImageFunctionSource, cpPlugins::ProcessObject
-      );
-    cpPlugins_Id_Macro(
-      GradientBaseImageFunctionSource, fpaImageAlgorithmFunctors
-      );
-
-  protected:
-    GradientBaseImageFunctionSource( );
-    virtual ~GradientBaseImageFunctionSource( );
-
-    virtual void _GenerateData( ) ITK_OVERRIDE;
-
-    template< class _TImage >
-      inline void _GD0( _TImage* image );
-
-    template< class _TImage, class _TFunction >
-      inline void _GD1( _TImage* image );
-
-  private:
-    // Purposely not implemented.
-    GradientBaseImageFunctionSource( const Self& other );
-    Self& operator=( const Self& other );
-  };
-
-} // ecapseman
-
-#endif // __FPAPLUGINS__GRADIENTBASEIMAGEFUNCTIONSOURCE__H__
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/ImageDijkstra.cxx b/plugins/fpa/ImageDijkstra.cxx
deleted file mode 100644 (file)
index ef86917..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-#include "ImageDijkstra.h"
-#include "MinimumSpanningTree.h"
-
-#include <cpPlugins/Image.h>
-#include <fpa_Instances/Filters.h>
-
-// -------------------------------------------------------------------------
-fpaPlugins::ImageDijkstra::
-ImageDijkstra( )
-  : Superclass( )
-{
-  this->_AddInput( "CostFunctor", false );
-  this->_AddOutput< fpaPlugins::MinimumSpanningTree >( "MST" );
-  this->m_Parameters.ConfigureAsBool( "FillNodeQueue" );
-  this->m_Parameters.SetBool( "FillNodeQueue", false );
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::ImageDijkstra::
-~ImageDijkstra( )
-{
-}
-
-// -------------------------------------------------------------------------
-void fpaPlugins::ImageDijkstra::
-_GenerateData( )
-{
-  auto image = this->GetInputData< itk::DataObject >( "Input" );
-  cpPlugins_Image_Demangle_Pixel_AllScalars     ( _GD0, image, 2 );
-  else cpPlugins_Image_Demangle_Pixel_AllScalars( _GD0, image, 3 );
-  else this->_Error( "No valid input image." );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage >
-void fpaPlugins::ImageDijkstra::
-_GD0( _TImage* image )
-{
-  typedef float                                          _TPixel;
-  typedef itk::Image< _TPixel, _TImage::ImageDimension > _TOutImage;
-  typedef fpa::Image::Dijkstra< _TImage, _TOutImage >    _TFilter;
-  typedef typename _TFilter::TResult                     _TCost;
-  typedef itk::FunctionBase< _TCost, _TCost >            _TCostFunctor;
-  typedef typename _TFilter::TMinimumSpanningTree        _TMST;
-
-  auto base_functor =
-    this->GetInputData< itk::LightObject >( "CostFunctor" );
-  _TCostFunctor* functor = NULL;
-  if( base_functor != NULL )
-  {
-    functor = dynamic_cast< _TCostFunctor* >( base_functor );
-    if( functor == NULL )
-      this->_Error( "Given cost functor is invalid." );
-
-  } // fi
-  
-  // Create filter
-  _TFilter* filter = this->_ConfigureFilter< _TFilter >( );
-  filter->SetFillNodeQueue( this->m_Parameters.GetBool( "FillNodeQueue" ) );
-  filter->SetConversionFunction( functor );
-
-  // Go!!!
-  this->_ExecuteFilter( filter );
-
-  // Connect remaining output
-  this->GetOutput( "MST" )->SetITK( filter->GetMinimumSpanningTree( ) );
-}
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/ImageDijkstra.h b/plugins/fpa/ImageDijkstra.h
deleted file mode 100644 (file)
index e4cb3de..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef __FPAPLUGINS__IMAGEDIJKSTRA__H__
-#define __FPAPLUGINS__IMAGEDIJKSTRA__H__
-
-#include "BaseImageFilter.h"
-
-namespace fpaPlugins
-{
-  /**
-   */
-  class fpaPlugins_EXPORT ImageDijkstra
-    : public BaseImageFilter
-  {
-  public:
-    typedef ImageDijkstra                   Self;
-    typedef BaseImageFilter                 Superclass;
-    typedef itk::SmartPointer< Self >       Pointer;
-    typedef itk::SmartPointer< const Self > ConstPointer;
-
-  public:
-    itkNewMacro( Self );
-    itkTypeMacro( ImageDijkstra, BaseImageFilter );
-    cpPlugins_Id_Macro( ImageDijkstra, fpaImageAlgorithm );
-
-  protected:
-    ImageDijkstra( );
-    virtual ~ImageDijkstra( );
-
-    virtual void _GenerateData( ) ITK_OVERRIDE;
-
-    template< class _TImage >
-      inline void _GD0( _TImage* image );
-
-  private:
-    // Purposely not implemented.
-    ImageDijkstra( const Self& other );
-    Self& operator=( const Self& other );
-  };
-
-} // ecapseman
-
-#endif // __FPAPLUGINS__IMAGEDIJKSTRA__H__
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/ImageRegionGrow.cxx b/plugins/fpa/ImageRegionGrow.cxx
deleted file mode 100644 (file)
index 333c708..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-#include "ImageRegionGrow.h"
-
-#include <cpPlugins/Image.h>
-#include <fpa_Instances/Filters.h>
-
-// -------------------------------------------------------------------------
-fpaPlugins::ImageRegionGrow::
-ImageRegionGrow( )
-  : Superclass( )
-{
-  this->_AddInput( "GrowFunctor", false );
-  this->m_Parameters.ConfigureAsUint( "InsideValue" );
-  this->m_Parameters.ConfigureAsUint( "OutsideValue" );
-  this->m_Parameters.SetUint( "InsideValue", 1 );
-  this->m_Parameters.SetUint( "OutsideValue", 0 );
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::ImageRegionGrow::
-~ImageRegionGrow( )
-{
-}
-
-// -------------------------------------------------------------------------
-void fpaPlugins::ImageRegionGrow::
-_GenerateData( )
-{
-  auto image = this->GetInputData< itk::DataObject >( "Input" );
-  cpPlugins_Image_Demangle_Pixel_AllScalars     ( _GD0, image, 2 );
-  else cpPlugins_Image_Demangle_Pixel_AllScalars( _GD0, image, 3 );
-  else this->_Error( "No valid input image." );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage >
-void fpaPlugins::ImageRegionGrow::
-_GD0( _TImage* image )
-{
-  typedef unsigned short _TPixel;
-  typedef itk::Image< _TPixel, _TImage::ImageDimension > _TOutImage;
-  typedef fpa::Image::RegionGrow< _TImage, _TOutImage >  _TFilter;
-  typedef typename _TFilter::TGrowingFunction            _TGrowFunctor;
-  typedef typename _TFilter::TResult                     _TResult;
-
-  // Create filter
-  _TFilter* filter = this->_ConfigureFilter< _TFilter >( );
-
-  typename _TGrowFunctor::Pointer functor;
-  auto wrap_functor = this->GetInput( "GrowFunctor" );
-  if( wrap_functor != NULL )
-    functor = wrap_functor->GetITK< _TGrowFunctor >( );
-  if( functor.IsNull( ) )
-    filter->SetGrowingFunction( functor );
-  filter->SetInsideValue(
-    _TResult( this->m_Parameters.GetUint( "InsideValue" ) )
-    );
-  filter->SetOutsideValue(
-    _TResult( this->m_Parameters.GetUint( "OutsideValue" ) )
-    );
-
-  // Go!!!
-  this->_ExecuteFilter( filter );
-}
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/ImageRegionGrow.h b/plugins/fpa/ImageRegionGrow.h
deleted file mode 100644 (file)
index ce6a82e..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef __FPAPLUGINS__IMAGEREGIONGROW__H__
-#define __FPAPLUGINS__IMAGEREGIONGROW__H__
-
-#include "BaseImageFilter.h"
-
-namespace fpaPlugins
-{
-  /**
-   */
-  class fpaPlugins_EXPORT ImageRegionGrow
-    : public BaseImageFilter
-  {
-  public:
-    typedef ImageRegionGrow                   Self;
-    typedef BaseImageFilter                 Superclass;
-    typedef itk::SmartPointer< Self >       Pointer;
-    typedef itk::SmartPointer< const Self > ConstPointer;
-
-  public:
-    itkNewMacro( Self );
-    itkTypeMacro( ImageRegionGrow, BaseImageFilter );
-    cpPlugins_Id_Macro( ImageRegionGrow, fpaImageAlgorithm );
-
-  protected:
-    ImageRegionGrow( );
-    virtual ~ImageRegionGrow( );
-
-    virtual void _GenerateData( ) ITK_OVERRIDE;
-
-    template< class _TImage >
-      inline void _GD0( _TImage* image );
-
-  private:
-    // Purposely not implemented.
-    ImageRegionGrow( const Self& other );
-    Self& operator=( const Self& other );
-  };
-
-} // ecapseman
-
-#endif // __FPAPLUGINS__IMAGEREGIONGROW__H__
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/ImageSkeleton.cxx b/plugins/fpa/ImageSkeleton.cxx
deleted file mode 100644 (file)
index f121d66..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <plugins/fpa/ImageSkeleton.h>
-#include <fpa_Instances/Instances.h>
-#include <fpa/VTK/Image/ImageSkeletonToPolyData.h>
-
-// -------------------------------------------------------------------------
-void fpaPlugins::ImageSkeleton::
-SetITK( itk::LightObject* o )
-{
-  typedef
-    fpa::Base::ImageSkeleton< fpa::Image::MinimumSpanningTree< 2 > > _I2;
-  typedef
-    fpa::Base::ImageSkeleton< fpa::Image::MinimumSpanningTree< 3 > > _I3;
-
-  bool     r = this->_SetITK< _I2 >( o );
-  if( !r ) r = this->_SetITK< _I3 >( o );
-  if( !r )
-    this->Superclass::SetITK( NULL );
-}
-
-// -------------------------------------------------------------------------
-void fpaPlugins::ImageSkeleton::
-SetVTK( vtkObjectBase* o )
-{
-  // Do nothing: this only has sense in ITK
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::ImageSkeleton::
-ImageSkeleton( )
-  : Superclass( )
-{
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::ImageSkeleton::
-~ImageSkeleton( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-bool fpaPlugins::ImageSkeleton::
-_SetITK( itk::LightObject* o )
-{
-  typedef fpa::VTK::Image::ImageSkeletonToPolyData< _TMST > _TFilter;
-
-  _TMST* mst = dynamic_cast< _TMST* >( o );
-  if( mst != NULL )
-  {
-    _TFilter* f = dynamic_cast< _TFilter* >( this->m_ITKvVTK.GetPointer( ) );
-    if( f == NULL )
-    {
-      vtkSmartPointer< _TFilter > nf = _TFilter::New( );
-      this->m_ITKvVTK = nf.GetPointer( );
-      f = nf.GetPointer( );
-
-    } // fi
-    f->SetInput( mst );
-    f->Update( );
-
-    // Keep object track
-    this->m_ITKObject = o;
-    this->m_VTKObject = f->GetOutput( );
-    return( true );
-  }
-  else
-  {
-    this->Superclass::SetITK( NULL );
-    this->Superclass::SetVTK( NULL );
-    return( false );
-
-  } // fi
-}
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/ImageSkeleton.h b/plugins/fpa/ImageSkeleton.h
deleted file mode 100644 (file)
index e8a1345..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef __FPAPLUGINS__IMAGESKELETON__H__
-#define __FPAPLUGINS__IMAGESKELETON__H__
-
-#include <fpa/fpaPlugins_Export.h>
-#include <cpPlugins/DataObject.h>
-#include <vtkPolyDataAlgorithm.h>
-#include <vtkSmartPointer.h>
-
-// -------------------------------------------------------------------------
-namespace fpaPlugins
-{
-  /**
-   */
-  class fpaPlugins_EXPORT ImageSkeleton
-    : public cpPlugins::DataObject
-  {
-  public:
-    typedef ImageSkeleton             Self;
-    typedef cpPlugins::DataObject           Superclass;
-    typedef itk::SmartPointer< Self >       Pointer;
-    typedef itk::SmartPointer< const Self > ConstPointer;
-
-  public:
-    itkNewMacro( Self );
-    itkTypeMacro( ImageSkeleton, cpPlugins::DataObject );
-    cpPlugins_Id_Macro( ImageSkeleton, ImageSkeleton );
-
-  public:
-    virtual void SetITK( itk::LightObject* o ) override;
-    virtual void SetVTK( vtkObjectBase* o ) override;
-
-  protected:
-    ImageSkeleton( );
-    virtual ~ImageSkeleton( );
-
-    template< class _TMST >
-      inline bool _SetITK( itk::LightObject* o );
-
-  private:
-    // Purposely not implemented
-    ImageSkeleton( const Self& );
-    Self& operator=( const Self& );
-
-  protected:
-    vtkSmartPointer< vtkPolyDataAlgorithm > m_ITKvVTK;
-      };
-
-} // ecapseman
-
-#endif // __FPAPLUGINS__IMAGESKELETON__H__
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/InvertCostFunction.cxx b/plugins/fpa/InvertCostFunction.cxx
deleted file mode 100644 (file)
index 3664bfa..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#include "InvertCostFunction.h"
-
-#include <cpPlugins/Image.h>
-#include <fpa/Base/Functors/InvertCostFunction.h>
-
-// -------------------------------------------------------------------------
-fpaPlugins::InvertCostFunction::
-InvertCostFunction( )
-  : Superclass( )
-{
-  this->_AddOutput< cpPlugins::DataObject >( "Output" );
-
-  this->m_Parameters.ConfigureAsReal( "Alpha" );
-  this->m_Parameters.ConfigureAsReal( "Beta" );
-
-  std::vector< std::string > choices;
-  choices.push_back( "float" );
-  choices.push_back( "double" );
-  this->m_Parameters.ConfigureAsChoices( "ScalarType", choices );
-
-  this->m_Parameters.SetReal( "Alpha", 1 );
-  this->m_Parameters.SetReal( "Beta", 1 );
-  this->m_Parameters.SetSelectedChoice( "ScalarType", "float" );
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::InvertCostFunction::
-~InvertCostFunction( )
-{
-}
-
-// -------------------------------------------------------------------------
-void fpaPlugins::InvertCostFunction::
-_GenerateData( )
-{
-  auto choice = this->m_Parameters.GetSelectedChoice( "ScalarType" );
-  if     ( choice == "float" )  this->_GD0< float >( );
-  else if( choice == "double" ) this->_GD0< double >( );
-  else this->_Error( "Invalid scalar type." );
-}
-
-// -------------------------------------------------------------------------
-template< class _TScalar >
-void fpaPlugins::InvertCostFunction::
-_GD0( )
-{
-  typedef fpa::Base::Functors::InvertCostFunction< _TScalar > _TFunctor;
-  auto out = this->GetOutput( "Output" );
-  auto f = out->GetITK< _TFunctor >( );
-  if( f == NULL )
-  {
-    typename _TFunctor::Pointer ptr_f = _TFunctor::New( );
-    f = ptr_f.GetPointer( );
-    out->SetITK( f );
-
-  } // fi
-  f->SetAlpha( this->m_Parameters.GetReal( "Alpha" ) );
-  f->SetBeta( this->m_Parameters.GetReal( "Beta" ) );
-}
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/InvertCostFunction.h b/plugins/fpa/InvertCostFunction.h
deleted file mode 100644 (file)
index c623914..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef __FPAPLUGINS__INVERTCOSTFUNCTION__H__
-#define __FPAPLUGINS__INVERTCOSTFUNCTION__H__
-
-#include <fpa/fpaPlugins_Export.h>
-#include <cpPlugins/ProcessObject.h>
-
-namespace fpaPlugins
-{
-  /**
-   */
-  class fpaPlugins_EXPORT InvertCostFunction
-    : public cpPlugins::ProcessObject
-  {
-  public:
-    typedef InvertCostFunction              Self;
-    typedef cpPlugins::ProcessObject        Superclass;
-    typedef itk::SmartPointer< Self >       Pointer;
-    typedef itk::SmartPointer< const Self > ConstPointer;
-
-  public:
-    itkNewMacro( Self );
-    itkTypeMacro( InvertCostFunction, cpPlugins::ProcessObject );
-    cpPlugins_Id_Macro( InvertCostFunction, fpaImageAlgorithmFunctors );
-
-  protected:
-    InvertCostFunction( );
-    virtual ~InvertCostFunction( );
-
-    virtual void _GenerateData( ) ITK_OVERRIDE;
-
-    template< class _TScalar >
-      inline void _GD0( );
-
-  private:
-    // Purposely not implemented.
-    InvertCostFunction( const Self& other );
-    Self& operator=( const Self& other );
-  };
-
-} // ecapseman
-
-#endif // __FPAPLUGINS__INVERTCOSTFUNCTION__H__
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/MinimumSpanningTree.cxx b/plugins/fpa/MinimumSpanningTree.cxx
deleted file mode 100644 (file)
index 53bcdaf..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <plugins/fpa/MinimumSpanningTree.h>
-#include <fpa_Instances/Instances.h>
-
-// -------------------------------------------------------------------------
-void fpaPlugins::MinimumSpanningTree::
-SetITK( itk::LightObject* o )
-{
-  typedef fpa::Image::MinimumSpanningTree< 2 > _I2;
-  typedef fpa::Image::MinimumSpanningTree< 3 > _I3;
-
-  bool     r = this->_SetITK< _I2 >( o );
-  if( !r ) r = this->_SetITK< _I3 >( o );
-  if( !r )
-    this->Superclass::SetITK( NULL );
-}
-
-// -------------------------------------------------------------------------
-void fpaPlugins::MinimumSpanningTree::
-SetVTK( vtkObjectBase* o )
-{
-  // Do nothing: this only has sense in ITK
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::MinimumSpanningTree::
-MinimumSpanningTree( )
-  : Superclass( )
-{
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::MinimumSpanningTree::
-~MinimumSpanningTree( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TMST >
-bool fpaPlugins::MinimumSpanningTree::
-_SetITK( itk::LightObject* o )
-{
-  _TMST* mst = dynamic_cast< _TMST* >( o );
-  if( mst != NULL )
-  {
-    this->Superclass::SetITK( o );
-    return( true );
-  }
-  else
-  {
-    this->Superclass::SetITK( NULL );
-    this->Superclass::SetVTK( NULL );
-    return( false );
-
-  } // fi
-}
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/MinimumSpanningTree.h b/plugins/fpa/MinimumSpanningTree.h
deleted file mode 100644 (file)
index e391ae6..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef __FPAPLUGINS__MINIMUMSPANNINGTREE__H__
-#define __FPAPLUGINS__MINIMUMSPANNINGTREE__H__
-
-#include <fpa/fpaPlugins_Export.h>
-#include <cpPlugins/DataObject.h>
-
-// -------------------------------------------------------------------------
-namespace fpaPlugins
-{
-  /**
-   */
-  class fpaPlugins_EXPORT MinimumSpanningTree
-    : public cpPlugins::DataObject
-  {
-  public:
-    typedef MinimumSpanningTree             Self;
-    typedef cpPlugins::DataObject           Superclass;
-    typedef itk::SmartPointer< Self >       Pointer;
-    typedef itk::SmartPointer< const Self > ConstPointer;
-
-  public:
-    itkNewMacro( Self );
-    itkTypeMacro( MinimumSpanningTree, cpPlugins::DataObject );
-    cpPlugins_Id_Macro( MinimumSpanningTree, MinimumSpanningTree );
-
-  public:
-    virtual void SetITK( itk::LightObject* o ) override;
-    virtual void SetVTK( vtkObjectBase* o ) override;
-
-  protected:
-    MinimumSpanningTree( );
-    virtual ~MinimumSpanningTree( );
-
-    template< class _TMST >
-      inline bool _SetITK( itk::LightObject* o );
-
-  private:
-    // Purposely not implemented
-    MinimumSpanningTree( const Self& );
-    Self& operator=( const Self& );
-  };
-
-} // ecapseman
-
-#endif // __FPAPLUGINS__MINIMUMSPANNINGTREE__H__
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/MinimumSpanningTreeReader.cxx b/plugins/fpa/MinimumSpanningTreeReader.cxx
deleted file mode 100644 (file)
index e0c4ffe..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-#include "MinimumSpanningTreeReader.h"
-#include "MinimumSpanningTree.h"
-
-#include <fpa_Instances/Instances.h>
-
-// -------------------------------------------------------------------------
-fpaPlugins::MinimumSpanningTreeReader::
-MinimumSpanningTreeReader( )
-  : Superclass( )
-{
-  this->_AddOutput< fpaPlugins::MinimumSpanningTree >( "Output" );
-  this->m_Parameters.Clear( );
-  this->m_Parameters.ConfigureAsOpenFileName( "FileName" );
-  this->m_Parameters.SetAcceptedFileExtensions(
-    "FileName",
-    "Minimum spanning tree files (*.mst)"
-    );
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::MinimumSpanningTreeReader::
-~MinimumSpanningTreeReader( )
-{
-}
-
-// -------------------------------------------------------------------------
-void fpaPlugins::MinimumSpanningTreeReader::
-_GenerateData( )
-{
-  // Infere MST dimensions
-  auto fname = this->m_Parameters.GetOpenFileName( "FileName" );
-  std::ifstream input( fname.c_str( ) );
-  if( !input )
-    this->_Error(
-      std::string( "MinimumSpanningTreeReader: Error opening file \"" ) +
-      fname +
-      std::string( "\"" )
-      );
-  unsigned int dim;
-  input >> dim;
-
-  // Real execution
-  if     ( dim == 2 ) this->_GD0< 2 >( fname );
-  else if( dim == 3 ) this->_GD0< 3 >( fname );
-  else this->_Error( "Invalid dimensions." );
-}
-
-// -------------------------------------------------------------------------
-template< unsigned int _NDim >
-void fpaPlugins::MinimumSpanningTreeReader::
-_GD0( const std::string& fname )
-{
-  typedef fpa::Image::MinimumSpanningTree< _NDim >     _TTree;
-  typedef fpa::IO::MinimumSpanningTreeReader< _TTree > _TFilter;
-
-  _TFilter* reader = this->_CreateITK< _TFilter >( );
-  reader->SetFileName( this->m_Parameters.GetOpenFileName( "FileName" ) );
-  try
-  {
-    reader->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    this->_Error( err.GetDescription( ) );
-
-  } // yrt
-  this->GetOutput( "Output" )->SetITK( reader->GetOutput( ) );
-}
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/MinimumSpanningTreeReader.h b/plugins/fpa/MinimumSpanningTreeReader.h
deleted file mode 100644 (file)
index dce25da..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef __FPAPLUGINS__MINIMUMSPANNINGTREEREADER__H__
-#define __FPAPLUGINS__MINIMUMSPANNINGTREEREADER__H__
-
-#include <fpa/fpaPlugins_Export.h>
-#include <cpPlugins/ProcessObject.h>
-
-namespace fpaPlugins
-{
-  /**
-   */
-  class fpaPlugins_EXPORT MinimumSpanningTreeReader
-    : public cpPlugins::ProcessObject
-  {
-  public:
-    typedef MinimumSpanningTreeReader Self;
-    typedef cpPlugins::ProcessObject           Superclass;
-    typedef itk::SmartPointer< Self >          Pointer;
-    typedef itk::SmartPointer< const Self >    ConstPointer;
-
-  public:
-    itkNewMacro( Self );
-    itkTypeMacro( MinimumSpanningTreeReader, cpPlugins::ProcessObject );
-    cpPlugins_Id_Macro( MinimumSpanningTreeReader, fpaIO );
-
-  protected:
-    MinimumSpanningTreeReader( );
-    virtual ~MinimumSpanningTreeReader( );
-
-    virtual void _GenerateData( ) ITK_OVERRIDE;
-
-    template< unsigned int _NDim >
-      inline void _GD0( const std::string& fname );
-
-  private:
-    // Purposely not implemented.
-    MinimumSpanningTreeReader( const Self& other );
-    Self& operator=( const Self& other );
-  };
-
-} // ecapseman
-
-#endif // __FPAPLUGINS__MINIMUMSPANNINGTREEREADER__H__
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/MinimumSpanningTreeWriter.cxx b/plugins/fpa/MinimumSpanningTreeWriter.cxx
deleted file mode 100644 (file)
index 9910908..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-#include "MinimumSpanningTreeWriter.h"
-#include "MinimumSpanningTree.h"
-
-#include <fpa_Instances/Instances.h>
-
-// -------------------------------------------------------------------------
-fpaPlugins::MinimumSpanningTreeWriter::
-MinimumSpanningTreeWriter( )
-  : Superclass( )
-{
-  this->_AddInput( "Input" );
-  this->m_Parameters.Clear( );
-  this->m_Parameters.ConfigureAsSaveFileName( "FileName" );
-  this->m_Parameters.SetAcceptedFileExtensions(
-    "FileName",
-    "Minimum spanning tree files (*.mst)"
-    );
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::MinimumSpanningTreeWriter::
-~MinimumSpanningTreeWriter( )
-{
-}
-
-// -------------------------------------------------------------------------
-void fpaPlugins::MinimumSpanningTreeWriter::
-_GenerateData( )
-{
-  typedef fpa::Image::MinimumSpanningTree< 2 > _2D;
-  typedef fpa::Image::MinimumSpanningTree< 3 > _3D;
-
-  auto _2d = this->GetInputData< _2D >( "Input" );
-  auto _3d = this->GetInputData< _3D >( "Input" );
-
-  if     ( _2d != NULL ) this->_GD0( _2d );
-  else if( _3d != NULL ) this->_GD0( _3d );
-  else this->_Error( "Not a valid MST." );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTree >
-void fpaPlugins::MinimumSpanningTreeWriter::
-_GD0( _TTree* tree )
-{
-  typedef fpa::IO::MinimumSpanningTreeWriter< _TTree > _TFilter;
-
-  _TFilter* writer = this->_CreateITK< _TFilter >( );
-  writer->SetInput( tree );
-  writer->SetFileName( this->m_Parameters.GetSaveFileName( "FileName" ) );
-  try
-  {
-    writer->Update( );
-  }
-  catch( itk::ExceptionObject& err )
-  {
-    this->_Error( err.GetDescription( ) );
-
-  } // yrt
-}
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/MinimumSpanningTreeWriter.h b/plugins/fpa/MinimumSpanningTreeWriter.h
deleted file mode 100644 (file)
index 6d2c02b..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef __FPAPLUGINS__MINIMUMSPANNINGTREEWRITER__H__
-#define __FPAPLUGINS__MINIMUMSPANNINGTREEWRITER__H__
-
-#include <fpa/fpaPlugins_Export.h>
-#include <cpPlugins/ProcessObject.h>
-
-namespace fpaPlugins
-{
-  /**
-   */
-  class fpaPlugins_EXPORT MinimumSpanningTreeWriter
-    : public cpPlugins::ProcessObject
-  {
-  public:
-    typedef MinimumSpanningTreeWriter Self;
-    typedef cpPlugins::ProcessObject           Superclass;
-    typedef itk::SmartPointer< Self >          Pointer;
-    typedef itk::SmartPointer< const Self >    ConstPointer;
-
-  public:
-    itkNewMacro( Self );
-    itkTypeMacro( MinimumSpanningTreeWriter, cpPlugins::ProcessObject );
-    cpPlugins_Id_Macro( MinimumSpanningTreeWriter, fpaIO );
-
-  protected:
-    MinimumSpanningTreeWriter( );
-    virtual ~MinimumSpanningTreeWriter( );
-
-    virtual void _GenerateData( ) ITK_OVERRIDE;
-
-    template< class _TTree >
-      inline void _GD0( _TTree* tree );
-
-  private:
-    // Purposely not implemented.
-    MinimumSpanningTreeWriter( const Self& other );
-    Self& operator=( const Self& other );
-  };
-
-} // ecapseman
-
-#endif // __FPAPLUGINS__MINIMUMSPANNINGTREEWRITER__H__
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/RegionGrowThresholdFunction.cxx b/plugins/fpa/RegionGrowThresholdFunction.cxx
deleted file mode 100644 (file)
index 4e8ca64..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#include "RegionGrowThresholdFunction.h"
-
-#include <cpPlugins/Image.h>
-#include <fpa/Image/Functors/RegionGrowThresholdFunction.h>
-
-// -------------------------------------------------------------------------
-fpaPlugins::RegionGrowThresholdFunction::
-RegionGrowThresholdFunction( )
-  : Superclass( )
-{
-  this->_AddInput( "ReferenceImage" );
-  this->_AddOutput< cpPlugins::DataObject >( "Output" );
-
-  this->m_Parameters.ConfigureAsReal( "LowerThreshold" );
-  this->m_Parameters.ConfigureAsReal( "UpperThreshold" );
-
-  this->m_Parameters.SetReal( "LowerThreshold", 0 );
-  this->m_Parameters.SetReal( "UpperThreshold", 1 );
-}
-
-// -------------------------------------------------------------------------
-fpaPlugins::RegionGrowThresholdFunction::
-~RegionGrowThresholdFunction( )
-{
-}
-
-// -------------------------------------------------------------------------
-void fpaPlugins::RegionGrowThresholdFunction::
-_GenerateData( )
-{
-  auto image = this->GetInputData< itk::DataObject >( "ReferenceImage" );
-  cpPlugins_Image_Demangle_Pixel_AllScalars     ( _GD0, image, 2 );
-  else cpPlugins_Image_Demangle_Pixel_AllScalars( _GD0, image, 3 );
-  else this->_Error( "No valid input image." );
-}
-
-// -------------------------------------------------------------------------
-template< class _TImage >
-void fpaPlugins::RegionGrowThresholdFunction::
-_GD0( _TImage* image )
-{
-  typedef
-    fpa::Image::Functors::RegionGrowThresholdFunction< _TImage >
-    _TFunctor;
-
-  auto out = this->GetOutput( "Output" );
-  auto f = out->GetITK< _TFunctor >( );
-  if( f == NULL )
-  {
-    typename _TFunctor::Pointer ptr_f = _TFunctor::New( );
-    f = ptr_f.GetPointer( );
-    out->SetITK( f );
-
-  } // fi
-  f->SetLowerThreshold( this->m_Parameters.GetReal( "LowerThreshold" ) );
-  f->SetUpperThreshold( this->m_Parameters.GetReal( "UpperThreshold" ) );
-}
-
-// eof - $RCSfile$
diff --git a/plugins/fpa/RegionGrowThresholdFunction.h b/plugins/fpa/RegionGrowThresholdFunction.h
deleted file mode 100644 (file)
index f2348c6..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef __FPAPLUGINS__REGIONGROWTHRESHOLDFUNCTION__H__
-#define __FPAPLUGINS__REGIONGROWTHRESHOLDFUNCTION__H__
-
-#include <fpa/fpaPlugins_Export.h>
-#include <cpPlugins/ProcessObject.h>
-
-namespace fpaPlugins
-{
-  /**
-   */
-  class fpaPlugins_EXPORT RegionGrowThresholdFunction
-    : public cpPlugins::ProcessObject
-  {
-  public:
-    typedef RegionGrowThresholdFunction     Self;
-    typedef cpPlugins::ProcessObject        Superclass;
-    typedef itk::SmartPointer< Self >       Pointer;
-    typedef itk::SmartPointer< const Self > ConstPointer;
-
-  public:
-    itkNewMacro( Self );
-    itkTypeMacro( RegionGrowThresholdFunction, cpPlugins::ProcessObject );
-    cpPlugins_Id_Macro(
-      RegionGrowThresholdFunction, fpaImageAlgorithmFunctors
-      );
-
-  protected:
-    RegionGrowThresholdFunction( );
-    virtual ~RegionGrowThresholdFunction( );
-
-    virtual void _GenerateData( ) ITK_OVERRIDE;
-
-    template< class _TImage >
-      inline void _GD0( _TImage* image );
-
-  private:
-    // Purposely not implemented.
-    RegionGrowThresholdFunction( const Self& other );
-    Self& operator=( const Self& other );
-  };
-
-} // ecapseman
-
-#endif // __FPAPLUGINS__REGIONGROWTHRESHOLDFUNCTION__H__
-
-// eof - $RCSfile$