diff --git a/src/Bridge/VtkGlue/CMakeLists.txt b/src/Bridge/VtkGlue/CMakeLists.txt index f45960e7b..34e885e37 100644 --- a/src/Bridge/VtkGlue/CMakeLists.txt +++ b/src/Bridge/VtkGlue/CMakeLists.txt @@ -9,9 +9,4 @@ if(ENABLE_QUICKVIEW) #compare_to_baseline(EXAMPLE_NAME VTKImageToITKImage # BASELINE_PREFIX OutputBaseline # ) - - if(ITK_VERSION_MAJOR LESS 5) - add_example(VisualizeEvolvingDense2DLevelSetAsElevationMap) - add_example(VisualizeEvolvingDense2DLevelSetZeroSet) - endif() endif() diff --git a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/levelsets.gif.cid b/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/levelsets.gif.cid deleted file mode 100644 index eeef77626..000000000 --- a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/levelsets.gif.cid +++ /dev/null @@ -1 +0,0 @@ -bafkreifiaeawclmxlfrf6xk6zdmmjfpelkie46cwfv2i4xk2ebn7kslh4i diff --git a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/levelsets.png.cid b/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/levelsets.png.cid deleted file mode 100644 index 5ff8bee35..000000000 --- a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/levelsets.png.cid +++ /dev/null @@ -1 +0,0 @@ -bafkreibfkdk45ylffokvawtcepltk6b23p5kz3m6smmivspaq2a3a73bla diff --git a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/levelsets.gif.cid b/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/levelsets.gif.cid deleted file mode 100644 index 97c5c389a..000000000 --- a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/levelsets.gif.cid +++ /dev/null @@ -1 +0,0 @@ -bafkreicxozgqar2qalgdxpjnu4vkbksgwff24utta6gybdexal3xa2aig4 diff --git a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/levelsets.png.cid b/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/levelsets.png.cid deleted file mode 100644 index 96944861f..000000000 --- a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/levelsets.png.cid +++ /dev/null @@ -1 +0,0 @@ -bafkreifw55gmpkyzw6rxkflxfcmi5abdr7o6zajsb2fjcrkead4cqxvhhe diff --git a/src/Bridge/VtkGlue/index.rst b/src/Bridge/VtkGlue/index.rst index afcc1865b..0b75280d6 100644 --- a/src/Bridge/VtkGlue/index.rst +++ b/src/Bridge/VtkGlue/index.rst @@ -8,6 +8,4 @@ VtkGlue ConvertAnRGBitkImageTovtkImageData/Documentation.rst ConvertRGBvtkImageDataToAnitkImage/Documentation.rst ConvertvtkImageDataToAnitkImage/Documentation.rst - VisualizeEvolvingDense2DLevelSetAsElevationMap/Documentation.rst - VisualizeEvolvingDense2DLevelSetZeroSet/Documentation.rst VTKImageToITKImage/Documentation.rst diff --git a/src/Segmentation/LevelSetsv4/CMakeLists.txt b/src/Segmentation/LevelSetsv4/CMakeLists.txt index 9e7a449f6..feda596af 100644 --- a/src/Segmentation/LevelSetsv4/CMakeLists.txt +++ b/src/Segmentation/LevelSetsv4/CMakeLists.txt @@ -1,3 +1,5 @@ +add_example(VisualizeEvolvingDense2DLevelSetZeroSet) +add_example(VisualizeEvolvingDense2DLevelSetAsElevationMap) add_example(VisualizeStaticDense2DLevelSetAsElevationMap) add_example(VisualizeStaticDense2DLevelSetZeroSet) add_example(VisualizeStaticWhitaker2DLevelSetLayers) diff --git a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/CMakeLists.txt b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetAsElevationMap/CMakeLists.txt similarity index 76% rename from src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/CMakeLists.txt rename to src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetAsElevationMap/CMakeLists.txt index 4ef6049b5..671fcdb7b 100644 --- a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/CMakeLists.txt +++ b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetAsElevationMap/CMakeLists.txt @@ -17,7 +17,7 @@ target_link_libraries( install( TARGETS ${PROJECT_NAME} - DESTINATION bin/ITKSphinxExamples/Bridge/VtkGlue + DESTINATION bin/ITKSphinxExamples/Segmentation/LevelSetsv4 COMPONENT Runtime ) @@ -26,7 +26,7 @@ install( Code.cxx CMakeLists.txt DESTINATION - share/ITKSphinxExamples/Code/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap + share/ITKSphinxExamples/Code/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetAsElevationMap COMPONENT Code ) @@ -35,7 +35,7 @@ add_test( NAME VisualizeEvolvingDense2DLevelSetAsElevationMapTest COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME} - ${CMAKE_CURRENT_BINARY_DIR}/cells.png 100 + ${CMAKE_CURRENT_BINARY_DIR}/cells.png 100 Output.mha ) set_tests_properties( VisualizeEvolvingDense2DLevelSetAsElevationMapTest diff --git a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/Code.cxx b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetAsElevationMap/Code.cxx similarity index 88% rename from src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/Code.cxx rename to src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetAsElevationMap/Code.cxx index c683cce30..02db5e5dd 100644 --- a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/Code.cxx +++ b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetAsElevationMap/Code.cxx @@ -18,7 +18,6 @@ #include "itkBinaryImageToLevelSetImageAdaptor.h" #include "itkImageFileReader.h" -#include "itkLevelSetIterationUpdateCommand.h" #include "itkLevelSetContainer.h" #include "itkLevelSetEquationChanAndVeseInternalTerm.h" #include "itkLevelSetEquationChanAndVeseExternalTerm.h" @@ -27,18 +26,19 @@ #include "itkLevelSetEvolution.h" #include "itkLevelSetEvolutionNumberOfIterationsStoppingCriterion.h" #include "itkLevelSetDenseImage.h" -#include "itkVTKVisualize2DLevelSetAsElevationMap.h" +#include "itkImageFileWriter.h" #include "itkSinRegularizedHeavisideStepFunction.h" int main(int argc, char * argv[]) { - if (argc != 3) + if (argc != 4) { std::cerr << "Missing Arguments" << std::endl; std::cerr << argv[0] << std::endl; std::cerr << "1- Input Image" << std::endl; std::cerr << "2- Number of Iterations" << std::endl; + std::cerr << "3- Output Image" << std::endl; return EXIT_FAILURE; } @@ -140,13 +140,6 @@ main(int argc, char * argv[]) auto criterion = StoppingCriterionType::New(); criterion->SetNumberOfIterations(numberOfIterations); - // Create the visualizer - using VisualizationType = itk::VTKVisualize2DLevelSetAsElevationMap; - auto visualizer = VisualizationType::New(); - visualizer->SetInputImage(input); - visualizer->SetLevelSet(levelSet); - visualizer->SetScreenCapture(true); - // Create evolution class using LevelSetEvolutionType = itk::LevelSetEvolution; auto evolution = LevelSetEvolutionType::New(); @@ -154,14 +147,17 @@ main(int argc, char * argv[]) evolution->SetStoppingCriterion(criterion); evolution->SetLevelSetContainer(levelSetContainer); - using IterationUpdateCommandType = itk::LevelSetIterationUpdateCommand; - auto iterationUpdateCommand = IterationUpdateCommandType::New(); - iterationUpdateCommand->SetFilterToUpdate(visualizer); - iterationUpdateCommand->SetUpdatePeriod(5); - - evolution->AddObserver(itk::IterationEvent(), iterationUpdateCommand); - evolution->Update(); + try + { + itk::WriteImage(levelSet->GetImage(), argv[3]); + } + catch (const itk::ExceptionObject & error) + { + std::cerr << "Error: " << error << std::endl; + return EXIT_FAILURE; + } + return EXIT_SUCCESS; } diff --git a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/Documentation.rst b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetAsElevationMap/Documentation.rst similarity index 62% rename from src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/Documentation.rst rename to src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetAsElevationMap/Documentation.rst index cc6ffc63f..c9e158c7f 100644 --- a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/Documentation.rst +++ b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetAsElevationMap/Documentation.rst @@ -4,7 +4,6 @@ Visualize an Evolving Dense 2D Level Set as Elevation Map ========================================================= .. index:: - single: VTKVisualize2DLevelSetAsElevationMap single: BinaryImageToLevelSetImageAdaptor single: SinRegularizedHeavisideStepFunction single: LevelSetDenseImage @@ -13,13 +12,13 @@ Visualize an Evolving Dense 2D Level Set as Elevation Map single: LevelSetEquationChanAndVeseExternalTerm single: LevelSetEvolutionNumberOfIterationsStoppingCriterion single: LevelSetEvolution - single: LevelSetIterationUpdateCommand - Synopsis -------- -Visualize an evolving dense level-set function 2D rendered as an elevation map. +Evolve a dense level-set function with the Chan and Vese region terms and write +the final function values as an image. Rendered as a height field, these values +form an elevation map whose zero level is the evolved contour. Results @@ -31,18 +30,6 @@ Results Input image -.. figure:: levelsets.* - :scale: 100% - :alt: Evolving level-sets rendered as an elevation map - - Evolving level-sets - -.. only:: html - - .. image:: levelsets.gif - :scale: 100% - :alt: Evolving level-sets animation - Code ---- @@ -57,4 +44,4 @@ C++ Classes demonstrated -------------------- -.. [breathelink:: itk::VTKVisualize2DLevelSetAsElevationMap] +.. breathelink:: itk::LevelSetEvolution diff --git a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/cells.png.cid b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetAsElevationMap/cells.png.cid similarity index 100% rename from src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetAsElevationMap/cells.png.cid rename to src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetAsElevationMap/cells.png.cid diff --git a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/CMakeLists.txt b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetZeroSet/CMakeLists.txt similarity index 74% rename from src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/CMakeLists.txt rename to src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetZeroSet/CMakeLists.txt index b1555c2ed..978edad39 100644 --- a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/CMakeLists.txt +++ b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetZeroSet/CMakeLists.txt @@ -11,13 +11,14 @@ target_link_libraries( PRIVATE ITK::ITKImageIO ITK::ITKCommonModule + ITK::ITKImageFeatureModule ITK::ITKLevelSetsv4Module ) install( TARGETS ${PROJECT_NAME} - DESTINATION bin/ITKSphinxExamples/Bridge/VtkGlue + DESTINATION bin/ITKSphinxExamples/Segmentation/LevelSetsv4 COMPONENT Runtime ) @@ -26,7 +27,7 @@ install( Code.cxx CMakeLists.txt DESTINATION - share/ITKSphinxExamples/Code/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet + share/ITKSphinxExamples/Code/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetZeroSet COMPONENT Code ) @@ -35,7 +36,7 @@ add_test( NAME VisualizeEvolvingDense2DLevelSetZeroSetTest COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME} - ${CMAKE_CURRENT_BINARY_DIR}/cells.png 100 + ${CMAKE_CURRENT_BINARY_DIR}/cells.png 100 Output.png ) set_tests_properties( VisualizeEvolvingDense2DLevelSetZeroSetTest diff --git a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/Code.cxx b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetZeroSet/Code.cxx similarity index 88% rename from src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/Code.cxx rename to src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetZeroSet/Code.cxx index 6c2b5b62f..dd4abd29f 100644 --- a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/Code.cxx +++ b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetZeroSet/Code.cxx @@ -18,7 +18,6 @@ #include "itkBinaryImageToLevelSetImageAdaptor.h" #include "itkImageFileReader.h" -#include "itkLevelSetIterationUpdateCommand.h" #include "itkLevelSetContainer.h" #include "itkLevelSetEquationChanAndVeseInternalTerm.h" #include "itkLevelSetEquationChanAndVeseExternalTerm.h" @@ -27,18 +26,20 @@ #include "itkLevelSetEvolution.h" #include "itkLevelSetEvolutionNumberOfIterationsStoppingCriterion.h" #include "itkLevelSetDenseImage.h" -#include "itkVTKVisualizeImageLevelSetIsoValues.h" +#include "itkImageFileWriter.h" +#include "itkZeroCrossingImageFilter.h" #include "itkSinRegularizedHeavisideStepFunction.h" int main(int argc, char * argv[]) { - if (argc != 3) + if (argc != 4) { std::cerr << "Missing Arguments" << std::endl; std::cerr << argv[0] << std::endl; std::cerr << "1- Input Image" << std::endl; std::cerr << "2- Number of Iterations" << std::endl; + std::cerr << "3- Output Image" << std::endl; return EXIT_FAILURE; } @@ -140,13 +141,6 @@ main(int argc, char * argv[]) auto criterion = StoppingCriterionType::New(); criterion->SetNumberOfIterations(numberOfIterations); - // Create the visualizer - using VisualizationType = itk::VTKVisualizeImageLevelSetIsoValues; - auto visualizer = VisualizationType::New(); - visualizer->SetInputImage(input); - visualizer->SetLevelSet(levelSet); - visualizer->SetScreenCapture(true); - // Create evolution class using LevelSetEvolutionType = itk::LevelSetEvolution; auto evolution = LevelSetEvolutionType::New(); @@ -154,14 +148,24 @@ main(int argc, char * argv[]) evolution->SetStoppingCriterion(criterion); evolution->SetLevelSetContainer(levelSetContainer); - using IterationUpdateCommandType = itk::LevelSetIterationUpdateCommand; - auto iterationUpdateCommand = IterationUpdateCommandType::New(); - iterationUpdateCommand->SetFilterToUpdate(visualizer); - iterationUpdateCommand->SetUpdatePeriod(5); + evolution->Update(); - evolution->AddObserver(itk::IterationEvent(), iterationUpdateCommand); + using ZeroSetImageType = itk::Image; + using ZeroCrossingFilterType = itk::ZeroCrossingImageFilter; + auto zeroCrossing = ZeroCrossingFilterType::New(); + zeroCrossing->SetInput(levelSet->GetImage()); + zeroCrossing->SetForegroundValue(255); + zeroCrossing->SetBackgroundValue(0); - evolution->Update(); + try + { + itk::WriteImage(zeroCrossing->GetOutput(), argv[3]); + } + catch (const itk::ExceptionObject & error) + { + std::cerr << "Error: " << error << std::endl; + return EXIT_FAILURE; + } return EXIT_SUCCESS; } diff --git a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/Documentation.rst b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetZeroSet/Documentation.rst similarity index 63% rename from src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/Documentation.rst rename to src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetZeroSet/Documentation.rst index 952c9e4c3..7c4df43b1 100644 --- a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/Documentation.rst +++ b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetZeroSet/Documentation.rst @@ -4,7 +4,6 @@ Visualize an Evolving Dense 2D Level-Set Zero-Set ================================================= .. index:: - single: VTKVisualizeImageLevelSetIsoValues single: BinaryImageToLevelSetImageAdaptor single: SinRegularizedHeavisideStepFunction single: LevelSetDenseImage @@ -13,13 +12,14 @@ Visualize an Evolving Dense 2D Level-Set Zero-Set single: LevelSetEquationChanAndVeseExternalTerm single: LevelSetEvolutionNumberOfIterationsStoppingCriterion single: LevelSetEvolution - single: LevelSetIterationUpdateCommand - + single: ZeroCrossingImageFilter Synopsis -------- -Visualize the evolving zero-set of a dense level-set function 2D rendered. +Evolve a dense level-set function with the Chan and Vese region terms, extract +the zero set of the result with itk::ZeroCrossingImageFilter, and write the +contour as an image. Results @@ -31,18 +31,6 @@ Results Input image -.. figure:: levelsets.* - :scale: 100% - :alt: Evolving level-sets - - Evolving level-sets - -.. only:: html - - .. image:: levelsets.gif - :scale: 100% - :alt: Evolving level-sets animation - Code ---- @@ -57,4 +45,4 @@ C++ Classes demonstrated -------------------- -.. [breathelink:: itk::VTKVisualizeImageLevelSetIsoValues] +.. breathelink:: itk::LevelSetEvolution diff --git a/src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/cells.png.cid b/src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetZeroSet/cells.png.cid similarity index 100% rename from src/Bridge/VtkGlue/VisualizeEvolvingDense2DLevelSetZeroSet/cells.png.cid rename to src/Segmentation/LevelSetsv4/VisualizeEvolvingDense2DLevelSetZeroSet/cells.png.cid diff --git a/src/Segmentation/LevelSetsv4/index.rst b/src/Segmentation/LevelSetsv4/index.rst index 671980a97..ebb4c0a5f 100644 --- a/src/Segmentation/LevelSetsv4/index.rst +++ b/src/Segmentation/LevelSetsv4/index.rst @@ -4,6 +4,8 @@ LevelSetsv4 .. toctree:: :maxdepth: 1 + VisualizeEvolvingDense2DLevelSetAsElevationMap/Documentation.rst + VisualizeEvolvingDense2DLevelSetZeroSet/Documentation.rst VisualizeStaticDense2DLevelSetAsElevationMap/Documentation.rst VisualizeStaticDense2DLevelSetZeroSet/Documentation.rst VisualizeStaticMalcolm2DLevelSetLayers/Documentation.rst