diff --git a/Documentation/docs/contributing/documenting_itk.md b/Documentation/docs/contributing/documenting_itk.md index d59c705cc61..aa5c459a3b0 100644 --- a/Documentation/docs/contributing/documenting_itk.md +++ b/Documentation/docs/contributing/documenting_itk.md @@ -1,15 +1,22 @@ # Documenting ITK -The ITK code documentation is available online at https://itk.org/Doxygen/html/. +The ITK code documentation is available online at https://docs.itk.org/projects/doxygen/. By default, the latest released documentation version is displayed, but documentation for previous versions is available at by choosing the -appropriate version at the bottom of the above page, e.g. -https://itk.org/Doxygen53/html/index.html. +appropriate version from the ReadTheDocs interface at the bottom right of a page, e.g. +https://docs.itk.org/projects/doxygen/en/v5.3.0/. ## Using Doxygen for C++ code -### Dependencies +### Build Option 1: Use Docker + +The ITK Doxygen documentation can be built using Docker as described in the +[ITKDoxygen repository](https://github.com/InsightSoftwareConsortium/ITKDoxygen). + +### Build Option 2: Use CMake, Doxygen Dot + +#### Dependencies Generating a complete Doxygen documentation requires (besides CMake and the ITK source code): @@ -22,7 +29,7 @@ Preferable: - [Dot](https://graphviz.org/doc/info/lang.html) from [GraphViz](https://graphviz.org/) for generating inheritance and dependency graphs. -## Generating the Doxygen documentation +#### Generating the Doxygen documentation Generating the Doxygen documentation for ITK requires: diff --git a/Documentation/docs/index.md b/Documentation/docs/index.md index f5afe29c692..c7ee2e934ab 100644 --- a/Documentation/docs/index.md +++ b/Documentation/docs/index.md @@ -45,7 +45,7 @@ learn/fda_off_the_shelf_sw_guidelines.md :maxdepth: 1 :caption: 🔨 Develop -API +API Discussion Issue tracker supported_compilers diff --git a/Documentation/docs/learn/dicom.md b/Documentation/docs/learn/dicom.md index adbd233e805..ea5e8abf5ed 100644 --- a/Documentation/docs/learn/dicom.md +++ b/Documentation/docs/learn/dicom.md @@ -59,7 +59,7 @@ $ DicomImageReadPrintTags image.dcm | grep "Image Pixel Value" ## Why did the header of my DICOM file change? A common question that frequently arises after using -[`itk::GDCMImageIO`](https://itk.org/Doxygen/html/classitk_1_1GDCMImageIO.html) +[`itk::GDCMImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1GDCMImageIO.html) to read, update and write out a DICOM file is: why did my header file change during the update mechanism? diff --git a/Documentation/docs/learn/faq.md b/Documentation/docs/learn/faq.md index 67b5d46358e..f4f072ec7f5 100644 --- a/Documentation/docs/learn/faq.md +++ b/Documentation/docs/learn/faq.md @@ -13,7 +13,7 @@ optional modules (e.g. [ITKVTKGlue](https://github.com/InsightSoftwareConsortium The following table identifies the file formats that ITK can read/write via a factory mechanism based on the file extension -([`itk::ImageIOFactory`](https://itk.org/Doxygen/html/classitk_1_1ImageIOFactory.html)). Some proprietary files format are only imported. +([`itk::ImageIOFactory`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1ImageIOFactory.html)). Some proprietary files format are only imported. More information on supported file formats is available on the [ITK-Wasm Image File Formats](https://wasm.itk.org/en/latest/introduction/file_formats/images.html) @@ -32,31 +32,31 @@ images. | ----------- | ---------- | ------ | | Analyze 7.5 | `itk::AnalyzeImageIO` | | | [BioRad](https://www.bio-rad.com/) | | | -| [BMP](https://en.wikipedia.org/wiki/BMP_file_format) † | [`itk::BMPImageIO`](https://itk.org/Doxygen/html/classitk_1_1BMPImageIO.html) | | -| [DICOM](https://dicom.nema.org/) | [`itk::GDCMImageIO`](https://itk.org/Doxygen/html/classitk_1_1GDCMImageIO.html) | | +| [BMP](https://en.wikipedia.org/wiki/BMP_file_format) † | [`itk::BMPImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1BMPImageIO.html) | | +| [DICOM](https://dicom.nema.org/) | [`itk::GDCMImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1GDCMImageIO.html) | | | [DICOM Series](https://dicom.nema.org/) | | | -| GE 4x | [`itk::GE4ImageIO`](https://itk.org/Doxygen/html/classitk_1_1GE4ImageIO.html) | | -| GE 5x | [`itk::GE5ImageIO`](https://itk.org/Doxygen/html/classitk_1_1GE5ImageIO.html) | | -| GE Advantage Windows | | [`itk::GEAdwImageIO`](https://itk.org/Doxygen/html/classitk_1_1GEAdwImageIO.html) | -| [GIPL](https://www.ncbi.nlm.nih.gov/pubmed/12956259) (Guy's Image Processing Lab) (.gipl) | [`itk::GiplImageIO`](https://itk.org/Doxygen/html/classitk_1_1GiplImageIO.html) | | -| IPLCommon | [`itk::IPLCommonImageIO`](https://itk.org/Doxygen/html/classitk_1_1IPLCommonImageIO.html) | | +| GE 4x | [`itk::GE4ImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1GE4ImageIO.html) | | +| GE 5x | [`itk::GE5ImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1GE5ImageIO.html) | | +| GE Advantage Windows | | [`itk::GEAdwImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1GEAdwImageIO.html) | +| [GIPL](https://www.ncbi.nlm.nih.gov/pubmed/12956259) (Guy's Image Processing Lab) (.gipl) | [`itk::GiplImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1GiplImageIO.html) | | +| IPLCommon | [`itk::IPLCommonImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1IPLCommonImageIO.html) | | | [ITK HDF5](https://support.hdfgroup.org/HDF5/) | | | -| [JPEG](https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format) † | [`itk::JPEGImageIO`](https://itk.org/Doxygen/html/classitk_1_1JPEGImageIO.html) | | -| [LSM](https://www.openwetware.org/wiki/Dissecting_LSM_files) | [`itk::LSMImageIO`](https://itk.org/Doxygen/html/classitk_1_1LSMImageIO.html) | | -| [MetaImage](https://itk.org/Wiki/ITK/MetaIO/Documentation) (.mha/.mhd) | [`itk::MetaImageIO`](https://itk.org/Doxygen/html/classitk_1_1MetaImageIO.html) | | -| [MINC 2.0](https://en.wikibooks.org/wiki/MINC/SoftwareDevelopment/MINC2.0_File_Format_Reference) (Medical Image NetCDF) | [`itk::MINCImagIO`](https://itk.org/Doxygen/html/classitk_1_1MINCImageIO.html) | | -| [MGH](https://surfer.nmr.mgh.harvard.edu/fswiki/FsTutorial/MghFormat) | [`itk:MGHImageIO`](https://itk.org/Doxygen/html/classitk_1_1MGHImageIO.html) | | -| [MRC](http://www.ccpem.ac.uk/mrc_format/mrc_format.php) | [`itk::MRCImageIO`](https://itk.org/Doxygen/html/classitk_1_1MRCImageIO.html) | | -| [NIfTI](https://nifti.nimh.nih.gov/nifti-1) (.nii) | [`itk::NiftiImageIO`](https://itk.org/Doxygen/html/classitk_1_1NiftiImageIO.html) | | -| [NRRD](http://teem.sourceforge.net/nrrd/format.html) (.nhdr/.nrrd) | [`itk::NrrdImageIO`](https://itk.org/Doxygen/html/classitk_1_1NrrdImageIO.html) | | -| [PNG](https://en.wikipedia.org/wiki/Portable_Network_Graphics) † | [`itk::PNGImageIO`](https://itk.org/Doxygen/html/classitk_1_1PNGImageIO.html) | | -| Raw ‡ | [`itk::RawImageIO`](https://itk.org/Doxygen/html/classitk_1_1RawImageIO.html) | | +| [JPEG](https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format) † | [`itk::JPEGImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1JPEGImageIO.html) | | +| [LSM](https://www.openwetware.org/wiki/Dissecting_LSM_files) | [`itk::LSMImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1LSMImageIO.html) | | +| [MetaImage](https://itk.org/Wiki/ITK/MetaIO/Documentation) (.mha/.mhd) | [`itk::MetaImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1MetaImageIO.html) | | +| [MINC 2.0](https://en.wikibooks.org/wiki/MINC/SoftwareDevelopment/MINC2.0_File_Format_Reference) (Medical Image NetCDF) | [`itk::MINCImagIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1MINCImageIO.html) | | +| [MGH](https://surfer.nmr.mgh.harvard.edu/fswiki/FsTutorial/MghFormat) | [`itk:MGHImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1MGHImageIO.html) | | +| [MRC](http://www.ccpem.ac.uk/mrc_format/mrc_format.php) | [`itk::MRCImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1MRCImageIO.html) | | +| [NIfTI](https://nifti.nimh.nih.gov/nifti-1) (.nii) | [`itk::NiftiImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1NiftiImageIO.html) | | +| [NRRD](http://teem.sourceforge.net/nrrd/format.html) (.nhdr/.nrrd) | [`itk::NrrdImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1NrrdImageIO.html) | | +| [PNG](https://en.wikipedia.org/wiki/Portable_Network_Graphics) † | [`itk::PNGImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1PNGImageIO.html) | | +| Raw ‡ | [`itk::RawImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1RawImageIO.html) | | | [Scanco microCT volume file format](https://www.scanco.ch/en/support/customer-login/faq-customers/faq-customers-import-export.html) | | | -| Siemens Vision | | [`itk::SiemensVisionImageIO`](https://itk.org/Doxygen/html/classitk_1_1SiemensVisionImageIO.html) | -| Stimulate (spr/sdt) | [`itk::StimulateImageIO`](https://itk.org/Doxygen/html/classitk_1_1TIFFImageIO.html) | | +| Siemens Vision | | [`itk::SiemensVisionImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1SiemensVisionImageIO.html) | +| Stimulate (spr/sdt) | [`itk::StimulateImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1TIFFImageIO.html) | | | [TIFF](https://en.wikipedia.org/wiki/TIFF) | [`itk::TIFFImageIO`]() | | | [Varian FDF](https://github.com/InsightSoftwareConsortium/ITKIOFDF) | | | -| [VTK Structured Points](https://www.vtk.org/VTK/img/file-formats.pdf) | [`itk::VTKImageIO`](https://itk.org/Doxygen/html/classitk_1_1VTKImageIO.html) | | +| [VTK Structured Points](https://www.vtk.org/VTK/img/file-formats.pdf) | [`itk::VTKImageIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1VTKImageIO.html) | | † BMP, PNG and JPEG are not very good formats for 3D medical images. They only support 2D images and a limited set of pixel types such as @@ -64,7 +64,7 @@ unsigned char, and unsigned short. The great advantage of BMP, PNG and JPEG is that you can view them with almost any image viewer. It is possible to read/write 3D datasets as collections of 2D slices each one in an independent BMP, PNG or JPEG file by using the -[`ImageSeriesReader`](https://itk.org/Doxygen/html/classitk_1_1ImageSeriesReader.html) and [`itk::ImageSeriesWriter`](https://itk.org/Doxygen/html/classitk_1_1ImageSeriesWriter.html). +[`ImageSeriesReader`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1ImageSeriesReader.html) and [`itk::ImageSeriesWriter`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1ImageSeriesWriter.html). ‡ It is higly recommended not using this format. RAW is not a format, it is insufficient, inconsistent and simply dangerous. A RAW file without a @@ -81,7 +81,7 @@ contains a good set of tools for performing such conversions. You can also take advantage of the VTK readers/importers. All you need is then use the VTKImageToImage adaptor in order to convert the -[`vtkImageData`](https://vtk.org/doc/nightly/html/classvtkImageData.html) into an [`itk::Image`](https://itk.org/Doxygen/html/classitk_1_1Image.html). +[`vtkImageData`](https://vtk.org/doc/nightly/html/classvtkImageData.html) into an [`itk::Image`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1Image.html). Supported VTK file formats can be found in https://docs.vtk.org/en/latest/supported_data_formats.html. @@ -93,13 +93,13 @@ formats: | File Format | Read/Write | Import | | ----------- | ---------- | ------ | | [BYU](http://www.eg-models.de/formats/Format_Byu.html) | - [`itk::BYUMeshIO`](https://itk.org/Doxygen/html/classitk_1_1BYUMeshIO.html) | | -| [FreeSurfer surface, binary and ASCII](http://www.grahamwideman.com/gw/brain/fs/surfacefileformats.htm) | [`itk::FreeSurferBinaryMeshIO`](https://itk.org/Doxygen/html/classitk_1_1FreeSurferBinaryMeshIO.html), [`itk::FreeSurferAsciiMeshIO`](https://itk.org/Doxygen/html/classitk_1_1FreeSurferAsciiMeshIO.html) | | -| [OFF](https://en.wikipedia.org/wiki/OFF_%28file_format%29) | [`ìtk::OFFMeshIO`](https://itk.org/Doxygen/html/classitk_1_1OFFMeshIO.html) | | + [`itk::BYUMeshIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1BYUMeshIO.html) | | +| [FreeSurfer surface, binary and ASCII](http://www.grahamwideman.com/gw/brain/fs/surfacefileformats.htm) | [`itk::FreeSurferBinaryMeshIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1FreeSurferBinaryMeshIO.html), [`itk::FreeSurferAsciiMeshIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1FreeSurferAsciiMeshIO.html) | | +| [OFF](https://en.wikipedia.org/wiki/OFF_%28file_format%29) | [`ìtk::OFFMeshIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1OFFMeshIO.html) | | | [STL](https://en.wikipedia.org/wiki/STL_%28file_format%29) | | | | [SWC Neuron Morphology](https://swc-specification.readthedocs.io/en/latest/) | | | -| [OBJ](https://en.wikipedia.org/wiki/Wavefront_.obj_file) | [`ìtk::OBJMeshIO`](https://itk.org/Doxygen/html/classitk_1_1OBJMeshIO.html) | | -| [VTK legacy file format for vtkPolyData](https://www.vtk.org/wp-content/uploads/2015/04/file-formats.pdf) | [`itk::VTKPolyDataMeshIO`](https://itk.org/Doxygen/html/classitk_1_1VTKPolyDataMeshIO.html) | | +| [OBJ](https://en.wikipedia.org/wiki/Wavefront_.obj_file) | [`ìtk::OBJMeshIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1OBJMeshIO.html) | | +| [VTK legacy file format for vtkPolyData](https://www.vtk.org/wp-content/uploads/2015/04/file-formats.pdf) | [`itk::VTKPolyDataMeshIO`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1VTKPolyDataMeshIO.html) | | More information on supported mesh and point set file formats is available on the [ITK-Wasm Mesh and Point Set File Formats](https://wasm.itk.org/en/latest/introduction/file_formats/meshes.html) @@ -111,9 +111,9 @@ ITK supports reading and writing the following transform file formats: | File Format | Read/Write | Import | | ----------- | ---------- | ------ | -| InsightLegacy | [`itk::TxtTransformIOTemplate`](https://itk.org/Doxygen/html/classitk_1_1TxtTransformIOTemplate.html) | | -| ITK HDF5 | [`itk::HDF5TransformIOTemplate`](https://itk.org/Doxygen/html/classitk_1_1HDF5TransformIOTemplate.html) | | -| MATLAB | [`itk::MatlabTransformIOTemplate`](https://itk.org/Doxygen/html/classitk_1_1MatlabTransformIOTemplate.html) | | +| InsightLegacy | [`itk::TxtTransformIOTemplate`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1TxtTransformIOTemplate.html) | | +| ITK HDF5 | [`itk::HDF5TransformIOTemplate`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1HDF5TransformIOTemplate.html) | | +| MATLAB | [`itk::MatlabTransformIOTemplate`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1MatlabTransformIOTemplate.html) | | | MINC (Medical Image NetCDF) | `itk::MINCTransformIOTemplate` | | #### DICOM data @@ -127,7 +127,7 @@ in case of desperation. 1. Use the [itk-wasm dicom](https://itk-wasm-dicom-docs.on.fleek.co/#/), package, which is available from [here](https://itk-wasm-dicom-python-docs.on.fleek.co/). It has the broadest support and is the easiest to use. -1. Use the [`itk::ImageSeriesReader`](https://itk.org/Doxygen/html/classitk_1_1ImageSeriesReader.html) in combination with the +1. Use the [`itk::ImageSeriesReader`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1ImageSeriesReader.html) in combination with the `DicomSeriesFileNames`. For a full example on how to do this, please look at the [`DicomSeriesReadImageWrite2.cxx`](https://github.com/InsightSoftwareConsortium/ITK/blob/master/Examples/IO/DicomSeriesReadImageWrite2.cxx) code. @@ -520,8 +520,8 @@ overview](http://www.itk.org/CourseWare/Training/RegistrationMethodsOverview.pdf ### Why can't I read any image files? or Why am I getting the exception message: `There are no registered IO factories.`? -When trying to read or write a file using the [`itk::ImageFileReader`](https://itk.org/Doxygen/html/classitk_1_1ImageFileReader.html) -or the [`itk::ImageFileWriter`](https://itk.org/Doxygen/html/classitk_1_1ImageFileWriter.html) I got an exception with the following message: +When trying to read or write a file using the [`itk::ImageFileReader`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1ImageFileReader.html) +or the [`itk::ImageFileWriter`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1ImageFileWriter.html) I got an exception with the following message: ```{bash} itk::ImageFileReaderException (00F7F494) diff --git a/Documentation/docs/migration_guides/itk_5_migration_guide.md b/Documentation/docs/migration_guides/itk_5_migration_guide.md index 884c93bb3e9..2adb64817ad 100644 --- a/Documentation/docs/migration_guides/itk_5_migration_guide.md +++ b/Documentation/docs/migration_guides/itk_5_migration_guide.md @@ -69,8 +69,8 @@ Availability of the C++11 standard allows use of many Standard Library features. These were previously implemented as portable ITK classes. The standard library classes are preferred over ITK's implementations. The most notable examples of this are: - * [atomic integers](https://itk.org/Doxygen413/html/classitk_1_1AtomicInt.html) should be replaced by `std::atomic`. - * [mutex locks](https://itk.org/Doxygen413/html/classitk_1_1MutexLock.html) + * [atomic integers](https://docs.itk.org/projects/doxygen/en/v4.13.0/classitk_1_1AtomicInt.html) should be replaced by `std::atomic`. + * [mutex locks](https://docs.itk.org/projects/doxygen/en/v4.13.0/classitk_1_1MutexLock.html) and related classes should be replaced by the similarly named classes from STL's [``](https://en.cppreference.com/w/cpp/header/mutex) header. * `itksys::hash_map` should be replaced by [std::unordered_map](https://en.cppreference.com/w/cpp/container/unordered_map). @@ -368,7 +368,7 @@ It should be replaced by [itk::SimpleFilterWatcher](../../../Modules/Core/Common `itksys::hash_map` has been removed. It should be replaced by `std::unordered_map`. `WatershedImageFilter` produces slightly different results due to changes of `hash_map`. -Generally, [MorphologicalWatersheds](https://itk.org/Doxygen/html/classitk_1_1MorphologicalWatershedImageFilter.html) +Generally, [MorphologicalWatersheds](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1MorphologicalWatershedImageFilter.html) produce more stable results and should be preferred to regular watersheds. Since `itk::ProgressReporter` does not work well with the new threading model, diff --git a/Documentation/docs/releases/2.0.md b/Documentation/docs/releases/2.0.md index 105b78b8036..e188e5e04e4 100644 --- a/Documentation/docs/releases/2.0.md +++ b/Documentation/docs/releases/2.0.md @@ -16,7 +16,7 @@ formats are: - ACR-NEMA version 1 and 2 - Dicom version 3.0 (including various encodings of jpeg, RLE) -Class Reference : [GDCMImageIO](https://www.itk.org/Doxygen/html/classitk_1_1GDCMImageIO.html), [GDCMSeriesFileNames](https://www.itk.org/Doxygen/html/classitk_1_1GDCMSeriesFileNames.html)\ +Class Reference : [GDCMImageIO](https://docs.itk.org/projects/doxygen/en/v2.2.0/classitk_1_1GDCMImageIO.html), [GDCMSeriesFileNames](https://docs.itk.org/projects/doxygen/en/v2.2.0/classitk_1_1GDCMSeriesFileNames.html)\ Examples : (None) ## New itkVesselTubeSpatialObject with metaIO file format to support vessel representation diff --git a/Documentation/docs/releases/4.6.md b/Documentation/docs/releases/4.6.md index 7f380eb12db..4a367d28d11 100644 --- a/Documentation/docs/releases/4.6.md +++ b/Documentation/docs/releases/4.6.md @@ -11,7 +11,7 @@ the Sphinx repository and the Wiki, which can now also be build as Remote modules. The Software Guide was split into two books and configure and build instructions were revised. -\[1\] +\[1\] New Features diff --git a/Documentation/docs/releases/5.0.md b/Documentation/docs/releases/5.0.md index 570ccd0438f..72df851eddc 100644 --- a/Documentation/docs/releases/5.0.md +++ b/Documentation/docs/releases/5.0.md @@ -61,7 +61,7 @@ Additionally, a major upgrade of the ITK Spatial Object framework, which provide **Ranges** -ITK 5.0 has a new [Experimental namespace](https://itk.org/Doxygen/html/namespaceitk_1_1Experimental.html). This namespace includes three _range_ class templates, `ShapedImageNeighborhoodRange`, `IndexRange`, and `ImageBufferRange`, to iterate efficiently over a neighborhood of pixels, the indices of an image region, and the pixels of an image buffer, respectively. These ranges can be used in a C++11 range-base for-loop. Their `begin()` and `end()` can be passed directly to an `std` algorithm. +ITK 5.0 has a new [Experimental namespace](https://docs.itk.org/projects/doxygen/en/stable/namespaceitk_1_1Experimental.html). This namespace includes three _range_ class templates, `ShapedImageNeighborhoodRange`, `IndexRange`, and `ImageBufferRange`, to iterate efficiently over a neighborhood of pixels, the indices of an image region, and the pixels of an image buffer, respectively. These ranges can be used in a C++11 range-base for-loop. Their `begin()` and `end()` can be passed directly to an `std` algorithm. **New Features** diff --git a/Documentation/docs/releases/5.0a02.md b/Documentation/docs/releases/5.0a02.md index 0b1787e8ee5..d7aaf1b2acb 100644 --- a/Documentation/docs/releases/5.0a02.md +++ b/Documentation/docs/releases/5.0a02.md @@ -15,9 +15,9 @@ ITK 5.0 Alpha 2 emphasizes performance improvements: 1) A refactored multithread 5. A [ParallelizeImageRegion](https://github.com/InsightSoftwareConsortium/ITK/blob/9382f7bdd89f08a1122d57f8144702ac9341caf3/Modules/Core/Common/include/itkMultiThreaderBase.h#L185) method allows multi-threaded processing without writing a full-blown filter class. As evident in [this example](https://itk.org/ITKExamples/src/Core/Common/FilterAndParallelizeImageRegion/Documentation.html), multiple parallelized operations of arbitrary complexity can now be concisely specified and executed with [C++11 lamda](https://en.cppreference.com/w/cpp/language/lambda)'s or [std::function](https://en.cppreference.com/w/cpp/utility/functional/function)'s. -6. The new [itk::UnaryGeneratorImageFilter](https://itk.org/Doxygen/html/classitk_1_1UnaryGeneratorImageFilter.html) and [itk::BinaryGeneratorImageFilter](https://itk.org/Doxygen/html/classitk_1_1BinaryGeneratorImageFilter.html)'s allow per-pixel operations to be specified in several ways: 1) traditional "Functor", with `operator()`, 2) C++11 lambda functions, with closures, 3) C++11 std::function 4) C-style function pointers. +6. The new [itk::UnaryGeneratorImageFilter](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1UnaryGeneratorImageFilter.html) and [itk::BinaryGeneratorImageFilter](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1BinaryGeneratorImageFilter.html)'s allow per-pixel operations to be specified in several ways: 1) traditional "Functor", with `operator()`, 2) C++11 lambda functions, with closures, 3) C++11 std::function 4) C-style function pointers. -7. New, experimental classes for C++11 iteration in [range-based for loops](https://en.cppreference.com/w/cpp/language/range-for), e.g. [itk::Experimental::ShapedImageNeighborhoodRange](https://itk.org/Doxygen/html/classitk_1_1Experimental_1_1ShapedImageNeighborhoodRange.html), provide a modern, convenient syntax for image pixel iteration, and dramatic performance improvements. +7. New, experimental classes for C++11 iteration in [range-based for loops](https://en.cppreference.com/w/cpp/language/range-for), e.g. [itk::Experimental::ShapedImageNeighborhoodRange](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1Experimental_1_1ShapedImageNeighborhoodRange.html), provide a modern, convenient syntax for image pixel iteration, and dramatic performance improvements. Furthmore, ITK 5 improves performance by leveraging [Rvalue references](http://thbecker.net/articles/rvalue_references/section_01.html) to implement move semantics and perfect forwarding. diff --git a/Documentation/docs/releases/5.0b01.md b/Documentation/docs/releases/5.0b01.md index b533d0b22e1..9eaca784685 100644 --- a/Documentation/docs/releases/5.0b01.md +++ b/Documentation/docs/releases/5.0b01.md @@ -83,8 +83,8 @@ New Classes -------------------------------- - A [set of new iterators and a band pass filter](https://github.com/InsightSoftwareConsortium/ITK/commit/e16d0bc4eec7b3ee7ab63c3469077d54390df5c6) are available in a new *ITKImageFrequency* module. These classes help when operating in the dual domain and with the output of FFT's. More details are available [in this Insight Journal article](https://www.insight-journal.org/browse/publication/986). -- New, experimental [ShapedImageNeighborhoodRange](https://itk.org/Doxygen/html/classitk_1_1Experimental_1_1ShapedImageNeighborhoodRange.html), [HyperrectangularImageNeighborhoodShape](https://itk.org/Doxygen/html/classitk_1_1Experimental_1_1HyperrectangularImageNeighborhoodShape.html) classes are available, providing modern, C++ range operations and high performance. -- A new [Simple Linear Iterative Clustering (SLIC) super-pixel segmentation filter](https://itk.org/Doxygen/html/classitk_1_1SLICImageFilter.html) is available. This implementation improves or the original algorithm by supporting arbitrary dimensions, multi-component images, and a parallized implementation. More details are available [in the Insight Journal article](https://hdl.handle.net/1926/3596). +- New, experimental [ShapedImageNeighborhoodRange](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1Experimental_1_1ShapedImageNeighborhoodRange.html), [HyperrectangularImageNeighborhoodShape](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1Experimental_1_1HyperrectangularImageNeighborhoodShape.html) classes are available, providing modern, C++ range operations and high performance. +- A new [Simple Linear Iterative Clustering (SLIC) super-pixel segmentation filter](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1SLICImageFilter.html) is available. This implementation improves or the original algorithm by supporting arbitrary dimensions, multi-component images, and a parallized implementation. More details are available [in the Insight Journal article](https://hdl.handle.net/1926/3596). ![visiblesuperpixel](https://user-images.githubusercontent.com/25432/45373250-ed07f180-b5bc-11e8-89ca-b149e6fadbeb.png) *Visible Human superpixel segmentation. A 2D slice of 3D superpixel. For more information, see the Insight Journal article, Scalable Simple Linear Iterative Clustering (SSLIC) Using a Generic and Parallel Approach, Lowekamp, B et al, https://hdl.handle.net/1926/3596*. diff --git a/Documentation/docs/releases/5.0rc02.md b/Documentation/docs/releases/5.0rc02.md index b2761808c0d..ae173b96a24 100644 --- a/Documentation/docs/releases/5.0rc02.md +++ b/Documentation/docs/releases/5.0rc02.md @@ -32,7 +32,7 @@ Unpack optional testing data in the same directory where the Library Source is u - [MD5SUMS](https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.0rc02/MD5SUMS) - [SHA512SUMS](https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.0rc02/SHA512SUMS) -This release features a major upgrade to the ITK *Spatial Object* framework, lead by Stephen Aylward, with contributions from Hastings Greer, Forrest Lee, Niels Dekker, Dženan Zukić, and Hans Johnson. In ITK, a [`itk::SpatialObject`](https://itk.org/Doxygen/html/classitk_1_1SpatialObject.html) provides a representation of *objects* and the mechanism to specify their spatial relationship relative to other objects in a scene. Objects can be images but also abstract, parametric entities, such as a ellipse, box, or arrow, or point-based, such as a tube, contour, or surface. Objects can be organized into spatial hierarchies.`SpatialObject`s are key for model-based registration, integration of segmentation results in multiple formats, conversions to and from images, and capturing spatial relationships between structures. +This release features a major upgrade to the ITK *Spatial Object* framework, lead by Stephen Aylward, with contributions from Hastings Greer, Forrest Lee, Niels Dekker, Dženan Zukić, and Hans Johnson. In ITK, a [`itk::SpatialObject`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1SpatialObject.html) provides a representation of *objects* and the mechanism to specify their spatial relationship relative to other objects in a scene. Objects can be images but also abstract, parametric entities, such as a ellipse, box, or arrow, or point-based, such as a tube, contour, or surface. Objects can be organized into spatial hierarchies.`SpatialObject`s are key for model-based registration, integration of segmentation results in multiple formats, conversions to and from images, and capturing spatial relationships between structures. In ITK 5, the `SpatialObject` framework was refactored to improve consistency in the the programming interface and simplify implementation and usage. As a result, incorrect or unexpected behaviors are avoided. Complexity and dependency were reduced by removing a dependency on the VNL tree data structures. Additionally, *IndexSpace* was removed from the API of all `SpatialObject`s to prevent ambiguity while providing a consistent and intuitive interface. Only two reference spaces are consistently and explicitly available in the API: *ObjectSpace* and *WorldSpace*. *ObjectSpace* is the space local to each object, where the object's parameters are defined. *WorldSpace* is the coordinate system defined by the top-level `SpatialObject` in a hierachy, which is defined by parent-child object relationships. Only two transforms are now consistently and explicitly available in the API: *ObjectToParent* transform and *ObjectToWorld* transform. The *ObjectToParent* transform moves an object within its parent's *ObjectSpace*. The *ObjectToWorld* transform is derived from component *ObjectToParent* transforms and is provided for convenience and to reduce redundant computations. The API is now more explicit regarding the space that an operation applies to. For instance, `IsInside(point)` is now `IsInsideInObjectSpace(point)` or `IsInsideInWorldSpace(point)`. For more information on the `SpatialObject`s changes, see the [ITK 5 Migration Guide](https://github.com/InsightSoftwareConsortium/ITK/blob/master/Documentation/ITK5MigrationGuide.md). diff --git a/Documentation/docs/releases/5.1.md b/Documentation/docs/releases/5.1.md index 8771dc3e1f6..d8e1d38e3da 100644 --- a/Documentation/docs/releases/5.1.md +++ b/Documentation/docs/releases/5.1.md @@ -144,7 +144,7 @@ A Git commit hook will automatically apply `clang-format` to changed C++ code. ### Enhanced Modern C++ Range Support -In addition to the [`ImageBufferRange`](https://itk.org/Doxygen/html/classitk_1_1Experimental_1_1ImageBufferRange.html), [`ShapedImageNeighborhoodRange`](https://itk.org/Doxygen/html/classitk_1_1Experimental_1_1ShapedImageNeighborhoodRange.html), and [`IndexRange`](https://itk.org/Doxygen/html/classitk_1_1Experimental_1_1IndexRange.html) classes introduced in ITK 5.0, ITK 5.1 adds an [`ImageRegionRange`](https://itk.org/Doxygen/html/classitk_1_1Experimental_1_1ImageRegionRange.html). These range classes conform to the Standard C++ Iterator requirements so they can be used in range-based for loop's and passed to Standard C++ algorithms. Range-based for loops provide an elegant syntax for iteration. Moreover, they are often more performant than other iteration classes available. +In addition to the [`ImageBufferRange`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1Experimental_1_1ImageBufferRange.html), [`ShapedImageNeighborhoodRange`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1Experimental_1_1ShapedImageNeighborhoodRange.html), and [`IndexRange`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1Experimental_1_1IndexRange.html) classes introduced in ITK 5.0, ITK 5.1 adds an [`ImageRegionRange`](https://docs.itk.org/projects/doxygen/en/stable/classitk_1_1Experimental_1_1ImageRegionRange.html). These range classes conform to the Standard C++ Iterator requirements so they can be used in range-based for loop's and passed to Standard C++ algorithms. Range-based for loops provide an elegant syntax for iteration. Moreover, they are often more performant than other iteration classes available. For example, to add 42 to every pixel: diff --git a/Documentation/docs/releases/5.3rc03.md b/Documentation/docs/releases/5.3rc03.md index e247815c69d..12b5f2c9ef1 100644 --- a/Documentation/docs/releases/5.3rc03.md +++ b/Documentation/docs/releases/5.3rc03.md @@ -5,7 +5,7 @@ We are happy to announce the [Insight Toolkit (ITK)](https://itk.org) 5.3 Releas ITK 5.3 is a feature release that accelerates performance, provides new segmentation and shape analysis algorithms, improves documentation, among many more improvements. For more information about performance improvements, see [the 5.3 RC 1 Release Notes](https://github.com/InsightSoftwareConsortium/ITK/releases/tag/v5.3rc01). For more information about new segmentation and shape analysis algorithms, see [the 5.3 RC 2 Release Notes](https://github.com/InsightSoftwareConsortium/ITK/releases/tag/v5.3rc02). -ITK 5.3 RC 3 highlights documentation improvements. The ITK Software Guide has been updated for ITK's modern C++ improvements. The guide now also includes a helpful primer for debugging native Python extension modules across platforms. The PDF's remain available for free download (links below), and an updated hardcopy can be purchased from Amazon. [ITK's Sphinx Examples](https://examples.itk.org/) were updated to the latest ITK and Sphinx. [Join us for a hackathon](https://discourse.itk.org/t/itk-examples-hackathon-2022/4913) to work on the examples on Friday, May 20th. [Doxygen API documentation](https://itk.org/Doxygen/html/index.html) now uses MathJax and SVG, and Doxygen HTML archives are significantly smaller. +ITK 5.3 RC 3 highlights documentation improvements. The ITK Software Guide has been updated for ITK's modern C++ improvements. The guide now also includes a helpful primer for debugging native Python extension modules across platforms. The PDF's remain available for free download (links below), and an updated hardcopy can be purchased from Amazon. [ITK's Sphinx Examples](https://examples.itk.org/) were updated to the latest ITK and Sphinx. [Join us for a hackathon](https://discourse.itk.org/t/itk-examples-hackathon-2022/4913) to work on the examples on Friday, May 20th. [Doxygen API documentation](https://docs.itk.org/projects/doxygen/en/stable/index.html) now uses MathJax and SVG, and Doxygen HTML archives are significantly smaller. ITK 5.3 RC 3 also includes FFT backend registration through the object factory, Python wrapping for more registration methods, metrics, and registration of point sets, and new remote modules to facilitate rendering of meshes and ITK filtering with CUDA. And, there any many more improvements and fixes detailed in the log below.