From d4df5281db54b96a88095ed6bf64651f34e42dad Mon Sep 17 00:00:00 2001 From: Kenneth Moreland Date: Thu, 19 Oct 2017 15:39:26 -0600 Subject: [PATCH 001/400] git-gitlab-push: Add the ability to set an upstream topic branch Add the ability to git-gitlab-push to set the upstream branch for the topic branch. This will make it easier for users to determine if they have local changes (git status will report the remote is behind N commits). Added a --no-upstream flag to turn off this behavior. --- git-gitlab-push | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/git-gitlab-push b/git-gitlab-push index 6aa5b3db1..a7128cecd 100755 --- a/git-gitlab-push +++ b/git-gitlab-push @@ -30,6 +30,9 @@ OPTIONS --no-topic Do not push the topic HEAD. + +--no-upstream + Do not set an upstream branch (i.e. tracking) for the topic ' OPTIONS_SPEC= SUBDIRECTORY_OK=Yes @@ -65,14 +68,16 @@ lease_flag='' no_topic='' no_default='' dry_run='' +set_upstream=true # Parse the command line options. while test $# != 0; do case "$1" in - -f|--force) force='+'; lease=true ;; - --no-topic) no_topic=1 ;; - --dry-run) dry_run=--dry-run ;; - --no-default) no_default=1 ;; + -f|--force) force='+'; lease=true ;; + --no-topic) no_topic=1; set_upstream=false ;; + --dry-run) dry_run=--dry-run ;; + --no-default) no_default=1 ;; + --no-upstream) set_upstream=false ;; --) shift; break ;; -*) usage ;; *) test -z "$remote" || usage ; remote="$1" ;; @@ -175,6 +180,8 @@ not pushing an outdated branch." echo ' Add "-f" or "--force" to push a rewritten topic.' fi +elif $set_upstream && test -n "$topic"; then + git branch -u "$remote/$topic" fi # Reproduce the push exit code. From d5f46be4790e47bc084bab2ab1a60600655d0660 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 26 Oct 2017 10:35:20 -0400 Subject: [PATCH 002/400] git-gitlab-support: drop the lease check with multiple -f --- git-gitlab-push | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/git-gitlab-push b/git-gitlab-push index a7128cecd..ae33ac8a1 100755 --- a/git-gitlab-push +++ b/git-gitlab-push @@ -23,7 +23,8 @@ OPTIONS Show what would be pushed without actually updating the destination -f,--force - Force-push the topic HEAD to rewrite the destination branch + Force-push the topic HEAD to rewrite the destination branch (use twice + to ignore stale remote tracking branches) --no-default Do not push the default branch (e.g. master) @@ -73,7 +74,14 @@ set_upstream=true # Parse the command line options. while test $# != 0; do case "$1" in - -f|--force) force='+'; lease=true ;; + -f|--force) + if test -n "$force"; then + lease=false + else + lease=true + fi + force='+' + ;; --no-topic) no_topic=1; set_upstream=false ;; --dry-run) dry_run=--dry-run ;; --no-default) no_default=1 ;; From 0cc0739bd15e76bbe1db64fd3d1f56c574ac8afc Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 1 Dec 2017 07:39:47 -0500 Subject: [PATCH 003/400] git-gitlab-sync: Fix wording of error on master branch --- git-gitlab-sync | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git-gitlab-sync b/git-gitlab-sync index 275a5d2e6..944d47643 100755 --- a/git-gitlab-sync +++ b/git-gitlab-sync @@ -64,7 +64,7 @@ test -n "$remote" || remote="gitlab" # Identify and validate the topic branch name. head="$(git symbolic-ref HEAD)" && topic="${head#refs/heads/}" || topic='' if test -z "$topic" -o "$topic" = "master"; then - die 'You cant sync the master branch, please checkout the correct a branch with: + die 'You cannot sync the master branch. Please checkout the correct branch with: git checkout ' fi From 0c624503275165dfff19eab319801403058f5144 Mon Sep 17 00:00:00 2001 From: Shawn Waldon Date: Mon, 25 Jun 2018 13:55:46 -0400 Subject: [PATCH 004/400] git-gitlab-sync: Add a trailing newline to the output --- git-gitlab-sync | 1 + 1 file changed, 1 insertion(+) diff --git a/git-gitlab-sync b/git-gitlab-sync index 944d47643..69d649727 100755 --- a/git-gitlab-sync +++ b/git-gitlab-sync @@ -127,6 +127,7 @@ then else reset_stdout=$(git reset --hard FETCH_HEAD); fetch_exit=$? gettext "$reset_stdout" + echo fi fi From 5667a575a7c1efcce344121cde99cb7ae110a500 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 2 Jan 2019 13:53:27 -0500 Subject: [PATCH 005/400] Bumping version to 1.3 for development --- Version.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Version.cmake b/Version.cmake index 1e28ab9f3..8e646a34a 100644 --- a/Version.cmake +++ b/Version.cmake @@ -9,7 +9,7 @@ # Version info set(SimpleITK_VERSION_MAJOR 1) -set(SimpleITK_VERSION_MINOR 2) +set(SimpleITK_VERSION_MINOR 3) set(SimpleITK_VERSION_PATCH 0) #set(SimpleITK_VERSION_TWEAK "") From 552e2941e7dc7daf11d2be8fb450efe3e390f7e6 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 4 Jan 2019 16:04:05 -0500 Subject: [PATCH 006/400] Create a docker image to generate SimpleITK doxygen --- Utilities/GenerateDocs/docker/Dockerfile | 10 +++++++++ Utilities/GenerateDocs/docker/cmd.sh | 23 +++++++++++++++++++++ Utilities/GenerateDocs/docker/run.sh | 26 ++++++++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 Utilities/GenerateDocs/docker/Dockerfile create mode 100755 Utilities/GenerateDocs/docker/cmd.sh create mode 100755 Utilities/GenerateDocs/docker/run.sh diff --git a/Utilities/GenerateDocs/docker/Dockerfile b/Utilities/GenerateDocs/docker/Dockerfile new file mode 100644 index 000000000..cb725f52f --- /dev/null +++ b/Utilities/GenerateDocs/docker/Dockerfile @@ -0,0 +1,10 @@ +FROM ubuntu:16.04 + +RUN apt-get update && \ + apt-get install -y cmake cmake-curses-gui gcc g++ git python python-dev doxygen ninja-build gnuplot wget texlive-full + +WORKDIR /tmp/ +COPY ./cmd.sh /work/ +RUN chmod o+rx /work/cmd.sh + +ENTRYPOINT [ "bash", "-c", "groupadd -o -g $_GROUPID $_USER && useradd -m -o -g $_GROUPID $_USER -u $_USERID && su $_USER /work/cmd.sh" ] diff --git a/Utilities/GenerateDocs/docker/cmd.sh b/Utilities/GenerateDocs/docker/cmd.sh new file mode 100755 index 000000000..56c09b28e --- /dev/null +++ b/Utilities/GenerateDocs/docker/cmd.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -eux + +# this script is indented to be included in the docker image and run a container + +OUT_DIR=/work/io +SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG:-v1.1rc1} + +git clone https://github.com/SimpleITK/SimpleITK.git && ( cd SimpleITK && git checkout ${SIMPLEITK_GIT_TAG} ) + +mkdir bld && cd bld + +cmake \ + -G Ninja \ + -DBUILD_DOXYGEN:BOOL=ON \ + -DBUILD_EXAMPLES:BOOL=OFF \ + -DWRAP_DEFAULT:BOOL=OFF \ + ../SimpleITK/SuperBuild + +ninja SimpleITK-doc + +cd SimpleITK-build/Documentation/ +tar -zcvf ${OUT_DIR}/simpleitk_doxygen_html_${SIMPLEITK_GIT_TAG}.tar.gz html diff --git a/Utilities/GenerateDocs/docker/run.sh b/Utilities/GenerateDocs/docker/run.sh new file mode 100755 index 000000000..31653bcb6 --- /dev/null +++ b/Utilities/GenerateDocs/docker/run.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +# +# Genrates a SimpleITK Doxygen tarball for a tag +# +# Example usage: $ SIMPLEITK_GIT_TAG=v1.2.0 run.sh +# +# This script build build a docker image, then run the SimpleITK build step inorder to generate the Doxygen. By mounting the current directory onto the container a Doxygen tar-ball will be produced. + + +if [ -n "$ExternalData_OBJECT_STORES" -a -d "$ExternalData_OBJECT_STORES" ] ; then + extra_args="-v ${ExternalData_OBJECT_STORES}:/var/io/.ExternalData -e ExternalData_OBJECT_STORES=/var/io/.ExternalData" +fi + +if [ ! -z "${SIMPLEITK_GIT_TAG}" ] ; then + extra_args="${extra_args} -e SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG}" +fi + + +echo " extra_args: " ${extra_args} + +DOCKER_TAG=simpleitk_doxygen + +docker build --pull=true --rm=true -t ${DOCKER_TAG} -f Dockerfile . + +docker run --rm -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) $extra_args -v $(pwd):/work/io -t ${DOCKER_TAG} From aec8653089f37d53d13e1526ce2379a05e66604d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 10 Jan 2019 17:52:26 -0500 Subject: [PATCH 007/400] Add script to generate download links used on simpleitk.org --- .../GeneratePythonDownloadsPage.py | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100755 Utilities/Maintenance/GeneratePythonDownloadsPage.py diff --git a/Utilities/Maintenance/GeneratePythonDownloadsPage.py b/Utilities/Maintenance/GeneratePythonDownloadsPage.py new file mode 100755 index 000000000..063a3e24b --- /dev/null +++ b/Utilities/Maintenance/GeneratePythonDownloadsPage.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python +#========================================================================= +# +# Copyright Insight Software Consortium +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#========================================================================= + +import hashlib +import argparse +import re +import os + +parser = argparse.ArgumentParser( description="Given a list of python wheels, generate a list of hyperlinks to GitHub with sha512 fragment identifier" ) +parser.add_argument( '--hash', choices=['md5','sha256', 'sha512'], default='sha512') +parser.add_argument( '-f', '--format', choices=['html','md'], default='html') +parser.add_argument( 'files', metavar="python.whl", type=argparse.FileType(mode='rb'), nargs='+' ) + + +args = parser.parse_args() + + +for f in args.files: + name = os.path.basename(f.name) + #version="1.1.0" + version = re.match(r'SimpleITK-([0-9]+\.[0-9]+(\.[0-9]+)?(rc[0-9]+)?)', name ).group(1) + print("version:{0}".format(version)) + if args.hash == "md5": + hash_value = hashlib.md5(f.read()).hexdigest() + elif args.hash == "sha256": + hash_value = hashlib.sha256(f.read()).hexdigest() + elif args.hash == "sha512": + hash_value = hashlib.sha512(f.read()).hexdigest() + + + tag = "v{0}".format(version) + + #host="SourceForge" + #url = "https://sourceforge.net/projects/simpleitk/files/SimpleITK/{0}/Python/{1}#{2}={3}".format(version,name,args.hash,hash_value) + + host = "GitHub" + url = "https://github.com/SimpleITK/SimpleITK/releases/download/{0}/{1}#{2}={3}".format(tag,name,args.hash,hash_value) + + if args.format == 'html': + print "
  • {1} (hosted at {2})
  • ".format(url,name,host) + elif args.format == 'md': + print "[{1}]({0})".format(url,name) + + f.close() From cf7b116da88fb1de9a77985340dfd5467a809e04 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 9 Jan 2019 14:09:54 -0500 Subject: [PATCH 008/400] Separate entry point script to add user to container --- Utilities/GenerateDocs/docker/Dockerfile | 9 ++++++--- Utilities/GenerateDocs/docker/entrypoint.sh | 8 ++++++++ Utilities/GenerateDocs/docker/run.sh | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) create mode 100755 Utilities/GenerateDocs/docker/entrypoint.sh diff --git a/Utilities/GenerateDocs/docker/Dockerfile b/Utilities/GenerateDocs/docker/Dockerfile index cb725f52f..80f3f3ea9 100644 --- a/Utilities/GenerateDocs/docker/Dockerfile +++ b/Utilities/GenerateDocs/docker/Dockerfile @@ -4,7 +4,10 @@ RUN apt-get update && \ apt-get install -y cmake cmake-curses-gui gcc g++ git python python-dev doxygen ninja-build gnuplot wget texlive-full WORKDIR /tmp/ -COPY ./cmd.sh /work/ -RUN chmod o+rx /work/cmd.sh +COPY ./cmd.sh /work/bin/ +COPY ./entrypoint.sh /work/bin/ +RUN chmod o+rx /work/bin/*.sh -ENTRYPOINT [ "bash", "-c", "groupadd -o -g $_GROUPID $_USER && useradd -m -o -g $_GROUPID $_USER -u $_USERID && su $_USER /work/cmd.sh" ] + +ENTRYPOINT ["/work/bin/entrypoint.sh"] +CMD ["/work/bin/cmd.sh"] diff --git a/Utilities/GenerateDocs/docker/entrypoint.sh b/Utilities/GenerateDocs/docker/entrypoint.sh new file mode 100755 index 000000000..679aa027d --- /dev/null +++ b/Utilities/GenerateDocs/docker/entrypoint.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -eux +umask 000 +groupadd -o -g $_GROUPID $_USER +useradd -m -o -g $_GROUPID $_USER -u $_USERID +unset _GROUPID _USERID +su $_USER $@ diff --git a/Utilities/GenerateDocs/docker/run.sh b/Utilities/GenerateDocs/docker/run.sh index 31653bcb6..75f326758 100755 --- a/Utilities/GenerateDocs/docker/run.sh +++ b/Utilities/GenerateDocs/docker/run.sh @@ -23,4 +23,4 @@ DOCKER_TAG=simpleitk_doxygen docker build --pull=true --rm=true -t ${DOCKER_TAG} -f Dockerfile . -docker run --rm -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) $extra_args -v $(pwd):/work/io -t ${DOCKER_TAG} +docker run --rm -t -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) $extra_args -v $(pwd):/work/io ${DOCKER_TAG} From 5273cd89184cabcf138d0bd25c5976ab0d4d6eee Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 10 Jan 2019 17:16:35 -0500 Subject: [PATCH 009/400] Upgrade to Ubuntu 18.04 with newer system CMake --- Utilities/GenerateDocs/docker/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Utilities/GenerateDocs/docker/Dockerfile b/Utilities/GenerateDocs/docker/Dockerfile index 80f3f3ea9..394fad929 100644 --- a/Utilities/GenerateDocs/docker/Dockerfile +++ b/Utilities/GenerateDocs/docker/Dockerfile @@ -1,7 +1,7 @@ -FROM ubuntu:16.04 +FROM ubuntu:18.04 RUN apt-get update && \ - apt-get install -y cmake cmake-curses-gui gcc g++ git python python-dev doxygen ninja-build gnuplot wget texlive-full + DEBIAN_FRONTEND=noninteractive apt-get install -y cmake cmake-curses-gui gcc g++ git python python-dev doxygen ninja-build gnuplot wget texlive-full WORKDIR /tmp/ COPY ./cmd.sh /work/bin/ From e43249fd02a1cee72bb498f8132a30aae7c99337 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 10 Jan 2019 17:17:10 -0500 Subject: [PATCH 010/400] Add support to specify SimpleITK git tag --- Utilities/GenerateDocs/docker/run.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Utilities/GenerateDocs/docker/run.sh b/Utilities/GenerateDocs/docker/run.sh index 75f326758..bcc420e0c 100755 --- a/Utilities/GenerateDocs/docker/run.sh +++ b/Utilities/GenerateDocs/docker/run.sh @@ -21,6 +21,8 @@ echo " extra_args: " ${extra_args} DOCKER_TAG=simpleitk_doxygen +SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG:-v1.2.0} + docker build --pull=true --rm=true -t ${DOCKER_TAG} -f Dockerfile . -docker run --rm -t -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) $extra_args -v $(pwd):/work/io ${DOCKER_TAG} +docker run --rm -t -e SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG} -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) $extra_args -v $(pwd):/work/io ${DOCKER_TAG} From 404bd6efe25789468a4b8f07e55f69cf8a67eb69 Mon Sep 17 00:00:00 2001 From: Richard Beare Date: Fri, 11 Jan 2019 15:35:14 +1100 Subject: [PATCH 011/400] Fix R documentation generation - corrected escaping. Percent signs were not being escaped. Rd is a latex flavour and percent signs are comments. Quotes were being escaped and shouldn't be. This patch escapes percent signs are removes escapes from quotes. --- Utilities/GenerateDocs/doxy2swig.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Utilities/GenerateDocs/doxy2swig.py b/Utilities/GenerateDocs/doxy2swig.py index ab37f50e9..b82434e5e 100755 --- a/Utilities/GenerateDocs/doxy2swig.py +++ b/Utilities/GenerateDocs/doxy2swig.py @@ -468,6 +468,24 @@ def __init__(self, src, javaFlag=0): self.mathstuff6 = re.compile(r"\\f\$(.+?)\\f\$") # alignment tags self.mathstuff7 = re.compile(r" & ") + # Rd related issues - %, \" etc + self.Rdpercent = re.compile("%") + self.escapedquote=re.compile(r'\\"') + + def rdescape(self, value): + """escape percent signs in Rd files""" + v1=self.Rdpercent.sub(r"\%", value) + v1=self.escapedquote.sub(r'"', v1) + return(v1) + + def add_text(self, value): + """Adds text corresponding to `value` into `self.pieces`.""" + if type(value) in (list, tuple): + value=[self.rdescape(x) for x in value] + self.pieces.extend(value) + else: + value=self.rdescape(value) + self.pieces.append(value) def filterLatexMath(self, txt): """ From ae368b261fe26fd92d8621b29f89363f86eea5e8 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 15 Jan 2019 09:52:46 -0500 Subject: [PATCH 012/400] Explicitly cast the mask file input to the required Uint8 image type --- Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R | 2 +- Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R b/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R index e945fe668..2b2d11924 100644 --- a/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R +++ b/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R @@ -32,7 +32,7 @@ if (length(args) < 2) { inputImage <- ReadImage(args[[1]]) if (length( args ) > 4) { - maskImage <- ReadImage( args[[4]] ) + maskImage <- ReadImage( args[[4]], 'sitkUint8' ) } else { maskImage <- OtsuThreshold( inputImage, 0, 1, 200 ) } diff --git a/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py b/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py index f55c049c0..dd51c4df8 100755 --- a/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py +++ b/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py @@ -33,7 +33,7 @@ inputImage = sitk.ReadImage( sys.argv[1] ) if len ( sys.argv ) > 4: - maskImage = sitk.ReadImage( sys.argv[4] ) + maskImage = sitk.ReadImage( sys.argv[4], sitk.sitkUint8 ) else: maskImage = sitk.OtsuThreshold( inputImage, 0, 1, 200 ) From 9c0d79aa58898227a67e1767cc3dc63b05e82473 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 15 Jan 2019 15:37:14 -0500 Subject: [PATCH 013/400] Add documentation for the N4 bias field example --- Documentation/docs/source/conventions.rst | 1 + .../N4BiasFieldCorrection/Documentation.rst | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/Documentation/docs/source/conventions.rst b/Documentation/docs/source/conventions.rst index be1129421..c9cbe0b42 100644 --- a/Documentation/docs/source/conventions.rst +++ b/Documentation/docs/source/conventions.rst @@ -17,6 +17,7 @@ Image Access `Image `_ access is in x,y,z order, ``GetPixel(x,y,z)`` or ``image[x,y,z]``, with zero based indexing. +.. _lbl_conventions_mask_image: Mask Image Types and Default Values ................................... diff --git a/Examples/N4BiasFieldCorrection/Documentation.rst b/Examples/N4BiasFieldCorrection/Documentation.rst index 27b023dce..1131b4f6b 100644 --- a/Examples/N4BiasFieldCorrection/Documentation.rst +++ b/Examples/N4BiasFieldCorrection/Documentation.rst @@ -5,6 +5,37 @@ N4 Bias Field Correction Overview -------- +The N4 bias field correction algorithm is a popular method for +correcting low frequency intensity non-uniformity present in MRI image +data known as a bias or gain field. The method has also been +successfully applied as flat-field correction in microscopy data. This +method assumes a simple parametric model and does not require tissue +classification. + +This example demonstrates how to use the SimpleITK +`N4BiasFieldCorrectionImageFilter +`_ +class. This filter has one required input image which is affected by a +bias field we wish to correct. The primary input is required to have a +"real" pixel type of either `sitkFloat32` or +`sitkFloat64`. Additionally, there is an optional "MaskImage" input +which specifies which pixels are used to estimate the bias-field and +suppress pixels close to zero. It is recommended that the mask image +follows the common conventions for :ref:`masked images +`, which is being of pixel type +`sitkUint8` and having values of 0 and 1 representing the +mask. Additionally, the mask image and the main input image must +occupy the same physical space to ensure pixel to pixel +correspondence. + +Some basic parameters for using this algorithm are parsed from the +command line in this example. The shrink factor is used to reduce the +size and complexity of the image. The N4 algorithm uses a multi-scale +optimization approach to compute the bias field. The +**SetMaximumNumberOfIterations** method takes an array used to set +the limit of iterations per resolution level, thereby setting both the +iterations and the number of scales ( from the length of the array +). The output of the filter is the bias corrected input image. Code ---- From 7c0c29a139f3cbdc2f368aab6a8c3ba865e4dc9c Mon Sep 17 00:00:00 2001 From: Alessandro Gentilini Date: Sun, 20 Jan 2019 16:18:53 +0100 Subject: [PATCH 014/400] Fix typo. --- Documentation/docs/source/faq.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/docs/source/faq.rst b/Documentation/docs/source/faq.rst index 12ebf4637..5e8c72f96 100644 --- a/Documentation/docs/source/faq.rst +++ b/Documentation/docs/source/faq.rst @@ -54,7 +54,7 @@ How do I read a RAW image into SimpleITK? ----------------------------------------- In general raw image files are missing information. They do not contain -the nessesary header information to describe the basic size and type for +the necessary header information to describe the basic size and type for the data, so this format is intrinsically deficient. The `RawImageIO `__ class is not available in SimpleITK so there is no direct way to From 4ebba06eacc16b396e330d062c557dbc5f0b0035 Mon Sep 17 00:00:00 2001 From: Richard Beare Date: Fri, 11 Jan 2019 10:09:14 +1100 Subject: [PATCH 015/400] configuration file for python/java/r package docs --- Utilities/GenerateDocs/docker/config_vars.sh | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100755 Utilities/GenerateDocs/docker/config_vars.sh diff --git a/Utilities/GenerateDocs/docker/config_vars.sh b/Utilities/GenerateDocs/docker/config_vars.sh new file mode 100755 index 000000000..7ae23e759 --- /dev/null +++ b/Utilities/GenerateDocs/docker/config_vars.sh @@ -0,0 +1,9 @@ +#! /bin/sh + +SIMPLEITK="/tmp/SimpleITK" + +ITK_XML="${HOME}/temp/xml" + +SITK_BUILD_DIR="/tmp/bld/SimpleITK-build" + +PYTHON_EXECUTABLE="python" From 2aa11323cc68939d8f45abecb26e709ffec2848d Mon Sep 17 00:00:00 2001 From: Richard Beare Date: Fri, 11 Jan 2019 10:10:31 +1100 Subject: [PATCH 016/400] Extended docker config to support build of python/java/R package docs --- Utilities/GenerateDocs/README | 27 ++++++++++++++++++++++++ Utilities/GenerateDocs/docker/Dockerfile | 3 ++- Utilities/GenerateDocs/docker/cmd.sh | 27 +++++++++++++++++++++++- Utilities/GenerateDocs/docker/run.sh | 14 ++++++------ 4 files changed, 62 insertions(+), 9 deletions(-) diff --git a/Utilities/GenerateDocs/README b/Utilities/GenerateDocs/README index e62c24a84..cf54a22f1 100644 --- a/Utilities/GenerateDocs/README +++ b/Utilities/GenerateDocs/README @@ -15,6 +15,33 @@ the SwigDocUpdate.sh script can be run to convert the SimpleITK Doxygen XML into Swig .i files so that when SimpleITK is built, inline documenation for some wrapped languages will be available. +Building documentation with docker + A docker configuration is available in the docker subdirectory. + It contains a Dockerfile and run scripts to build the documentation. + Results are saved in the docker folder. The process is executed from + the docker folder using a command like: + + SIMPLEITK_GIT_TAG=v1.2.0 ./run.sh + + or to use another git repo: + + SIMPLEITK_GIT_TAG=MyTestBranch SIMPLEITK_GIT_REPO=https://github.com/username/SimpleITK.git ./run.sh + + Testing changes to the documentation scripts can use the docker framework as follows: + 1) Execute run.sh to create the appropriate container. + 2) Enter the docker via the bash entry point, with environment variables specifying the appropriate repo and branch: + + docker run -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) \ + -e SIMPLEITK_GIT_TAG=v1.2.0 -e SIMPLEITK_GIT_REPO=https://github.com/username/SimpleITK.git \ + -v $(pwd):/work/io -ti --entrypoint /bin/bash simpleitk_doxygen + + The bash entrypoint will place you in the /tmp directory. Run the documentation process using: + + /work/bin/cmd.sh + + This will check out SimpleITK and build the documents. You can change the documentation scripts for testing within the + checked out copies. + Building the documentation target from the SuperBuild framework requires: The correct cmake flags: -DBUILD_DOXYGEN:BOOL=ON Run "make SimpleITK-doc" after a SuperBuild config, or "make Documentation" diff --git a/Utilities/GenerateDocs/docker/Dockerfile b/Utilities/GenerateDocs/docker/Dockerfile index 394fad929..f3e788930 100644 --- a/Utilities/GenerateDocs/docker/Dockerfile +++ b/Utilities/GenerateDocs/docker/Dockerfile @@ -1,11 +1,12 @@ FROM ubuntu:18.04 RUN apt-get update && \ - DEBIAN_FRONTEND=noninteractive apt-get install -y cmake cmake-curses-gui gcc g++ git python python-dev doxygen ninja-build gnuplot wget texlive-full + DEBIAN_FRONTEND=noninteractive apt-get install -y cmake cmake-curses-gui gcc g++ git python python-dev python-regex doxygen ninja-build gnuplot wget texlive-full WORKDIR /tmp/ COPY ./cmd.sh /work/bin/ COPY ./entrypoint.sh /work/bin/ +COPY ./config_vars.sh /work/bin/ RUN chmod o+rx /work/bin/*.sh diff --git a/Utilities/GenerateDocs/docker/cmd.sh b/Utilities/GenerateDocs/docker/cmd.sh index 56c09b28e..c2b4e0ac5 100755 --- a/Utilities/GenerateDocs/docker/cmd.sh +++ b/Utilities/GenerateDocs/docker/cmd.sh @@ -5,8 +5,11 @@ set -eux OUT_DIR=/work/io SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG:-v1.1rc1} +SIMPLEITK_GIT_REPO=${SIMPLEITK_GIT_REPO:-https://github.com/SimpleITK/SimpleITK.git} -git clone https://github.com/SimpleITK/SimpleITK.git && ( cd SimpleITK && git checkout ${SIMPLEITK_GIT_TAG} ) +git clone ${SIMPLEITK_GIT_REPO} && ( cd SimpleITK && git checkout ${SIMPLEITK_GIT_TAG} ) + +here=$(pwd) mkdir bld && cd bld @@ -20,4 +23,26 @@ cmake \ ninja SimpleITK-doc cd SimpleITK-build/Documentation/ + tar -zcvf ${OUT_DIR}/simpleitk_doxygen_html_${SIMPLEITK_GIT_TAG}.tar.gz html + +cd ${here} + +if [ ! -e bld/SimpleITK-build/Documentation/xml/sitkImage_8h.xml ] +then + echo "SimpleITK documentation target hasn't been built" + exit 1 +fi + + +rm -f ${here}/SimpleITK/Wrapping/R/Packaging/SimpleITK/man/*.Rd + +cd ${here}/SimpleITK/Utilities/GenerateDocs/ +cp /work/bin/config_vars.sh . +./SwigDocUpdate.sh + +cp ${here}/SimpleITK/Wrapping/Python/PythonDocstrings.i ${OUT_DIR}/ +cp ${here}/SimpleITK/Wrapping/Java/JavaDoc.i ${OUT_DIR} + +cd ${here}/SimpleITK/Wrapping/R/Packaging/SimpleITK/man +tar -zcvf ${OUT_DIR}/sitkRdfiles_${SIMPLEITK_GIT_TAG}.tar.gz *.Rd diff --git a/Utilities/GenerateDocs/docker/run.sh b/Utilities/GenerateDocs/docker/run.sh index bcc420e0c..7d3b331e7 100755 --- a/Utilities/GenerateDocs/docker/run.sh +++ b/Utilities/GenerateDocs/docker/run.sh @@ -3,7 +3,9 @@ # # Genrates a SimpleITK Doxygen tarball for a tag # -# Example usage: $ SIMPLEITK_GIT_TAG=v1.2.0 run.sh +# Example usage: $ SIMPLEITK_GIT_TAG=v1.2.0 ./run.sh +# +# Example usage: $SIMPLEITK_GIT_TAG=v1.2.0 SIMPLEITK_GIT_REPO=https://github.com/SimpleITK/SimpleITK.git ./run.sh # # This script build build a docker image, then run the SimpleITK build step inorder to generate the Doxygen. By mounting the current directory onto the container a Doxygen tar-ball will be produced. @@ -12,17 +14,15 @@ if [ -n "$ExternalData_OBJECT_STORES" -a -d "$ExternalData_OBJECT_STORES" ] ; th extra_args="-v ${ExternalData_OBJECT_STORES}:/var/io/.ExternalData -e ExternalData_OBJECT_STORES=/var/io/.ExternalData" fi -if [ ! -z "${SIMPLEITK_GIT_TAG}" ] ; then - extra_args="${extra_args} -e SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG}" -fi - - echo " extra_args: " ${extra_args} DOCKER_TAG=simpleitk_doxygen SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG:-v1.2.0} +SIMPLEITK_GIT_REPO=${SIMPLEITK_GIT_REPO:-https://github.com/SimpleITK/SimpleITK.git} + +docker_args="-e SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG} -e SIMPLEITK_GIT_REPO=${SIMPLEITK_GIT_REPO} -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g)" docker build --pull=true --rm=true -t ${DOCKER_TAG} -f Dockerfile . -docker run --rm -t -e SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG} -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) $extra_args -v $(pwd):/work/io ${DOCKER_TAG} +docker run --rm -t $docker_args $extra_args -v $(pwd):/work/io ${DOCKER_TAG} From 04986fd483944065d93e1eccfb137dc1b7ce5fbd Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 28 Jan 2019 17:02:07 -0500 Subject: [PATCH 017/400] Allow for tolerance comparison of BSpline domain origin In ITKv5 with the commit 794c82d16ebc4b4035f37e0675176e7677f9bd68, the consistency of the parameters has been fix but there is a little variability with some of the transform domain values derived from the parameters. This patch adds tolerance to certain test of derived transform domain values as needed. --- Testing/Unit/sitkTransformTests.cxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Testing/Unit/sitkTransformTests.cxx b/Testing/Unit/sitkTransformTests.cxx index 24b005a39..ea7da36c0 100644 --- a/Testing/Unit/sitkTransformTests.cxx +++ b/Testing/Unit/sitkTransformTests.cxx @@ -776,7 +776,7 @@ TEST(TransformTest,BSplineTransform) tx.reset(new sitk::BSplineTransform(2)); EXPECT_EQ( tx->SetTransformDomainDirection(v4(-1.0,0.0,0.0,-1.0)).GetTransformDomainDirection(), v4(-1.0,0.0,0.0,-1.0) ); - EXPECT_EQ( tx->SetTransformDomainOrigin( v2(1.1,1.2) ).GetTransformDomainOrigin(), v2(1.1,1.2) ); + EXPECT_VECTOR_DOUBLE_NEAR( tx->SetTransformDomainOrigin( v2(1.1,1.2) ).GetTransformDomainOrigin(), v2(1.1,1.2), 1e-15 ); // copy constructor sitk::BSplineTransform tx1( *(tx.get()) ); @@ -786,7 +786,7 @@ TEST(TransformTest,BSplineTransform) EXPECT_EQ( tx1.GetNumberOfFixedParameters(), 10u ); EXPECT_EQ( tx1.GetTransformDomainDirection(), v4(-1.0,0.0,0.0,-1.0) ); EXPECT_EQ( tx1.GetTransformDomainMeshSize(), std::vector(2,1u) ); - EXPECT_EQ( tx1.GetTransformDomainOrigin(), v2(1.1,1.2) ); + EXPECT_VECTOR_DOUBLE_NEAR( tx1.GetTransformDomainOrigin(), v2(1.1,1.2), 1e-15); EXPECT_EQ( tx1.GetTransformDomainPhysicalDimensions(), v2(1.0,1.0) ); sitk::BSplineTransform tx2(2); @@ -805,8 +805,8 @@ TEST(TransformTest,BSplineTransform) // copy on write tx1.SetTransformDomainOrigin( v2(1.3,1.4) ); - EXPECT_EQ( tx1.GetTransformDomainOrigin(), v2(1.3,1.4) ); - EXPECT_EQ( tx2.GetTransformDomainOrigin(), v2(2.3,2.4) ); + EXPECT_VECTOR_DOUBLE_NEAR( tx1.GetTransformDomainOrigin(), v2(1.3,1.4), 1e-15); + EXPECT_VECTOR_DOUBLE_NEAR( tx2.GetTransformDomainOrigin(), v2(2.3,2.4), 1e-15); EXPECT_EQ( tx1.GetNumberOfFixedParameters(), tx2.GetNumberOfFixedParameters() ); EXPECT_EQ( tx1.GetTransformDomainDirection(), tx2.GetTransformDomainDirection() ); @@ -934,7 +934,7 @@ TEST(TransformTest,BSplineTransform_coefficientImages) EXPECT_EQ( tx.GetNumberOfFixedParameters(), 10u ); EXPECT_EQ( tx.GetTransformDomainDirection(), v4(1.0,0.0,0.0,1.0) ); EXPECT_EQ( tx.GetTransformDomainMeshSize(), std::vector(2,7u) ); - EXPECT_EQ( tx.GetTransformDomainOrigin(), v2(3.0,3.0) ); + EXPECT_VECTOR_DOUBLE_NEAR( tx.GetTransformDomainOrigin(), v2(3.0,3.0), 1e-15 ); EXPECT_EQ( tx.GetTransformDomainPhysicalDimensions(), v2(21.0,21.0) ); std::vector originalParams = tx.GetParameters(); From a7d8c7b98f5787a6dc41e564f0a12ff4d2161c46 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 29 Jan 2019 09:33:16 -0500 Subject: [PATCH 018/400] Add isysroot as require flag in non-cmake superbuild projects With XCode 10, the system headers are no longer installed in the normal /usr/incude paths, even when the commandline tools are installed. The passage of the SDK root via isysroot is nearly required. This issue manifests itself during the PCRE configuration step where the it is reported: "error: cannot run C compiled programs." --- SuperBuild/External_PCRE.cmake | 6 ++++++ SuperBuild/External_Swig.cmake | 5 +++++ SuperBuild/pcre_configure_step.cmake.in | 4 ++-- SuperBuild/swig_configure_step.cmake.in | 4 ++-- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/SuperBuild/External_PCRE.cmake b/SuperBuild/External_PCRE.cmake index 16c232128..4f52870dd 100644 --- a/SuperBuild/External_PCRE.cmake +++ b/SuperBuild/External_PCRE.cmake @@ -29,6 +29,12 @@ if(NOT PCRE_DIR) set(pcre_source_dir ${CMAKE_CURRENT_BINARY_DIR}/PCRE-prefix/src/PCRE) set(pcre_install_dir ${CMAKE_CURRENT_BINARY_DIR}/PCRE) + if ( APPLE AND DEFINED CMAKE_OSX_SYSROOT ) + message( "CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT}") + set(REQUIRED_C_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}") + set(REQUIRED_CXX_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}") + endif() + configure_file( pcre_configure_step.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/pcre_configure_step.cmake diff --git a/SuperBuild/External_Swig.cmake b/SuperBuild/External_Swig.cmake index 2e863c79a..90c917cf5 100644 --- a/SuperBuild/External_Swig.cmake +++ b/SuperBuild/External_Swig.cmake @@ -85,6 +85,11 @@ if(NOT SWIG_DIR) set(swig_source_dir ${CMAKE_CURRENT_BINARY_DIR}/Swig-prefix/src/Swig) set(swig_install_dir ${CMAKE_CURRENT_BINARY_DIR}/Swig) + if ( APPLE AND DEFINED CMAKE_OSX_SYSROOT ) + set(REQUIRED_C_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}") + set(REQUIRED_CXX_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}") + endif() + # configure step configure_file( swig_configure_step.cmake.in diff --git a/SuperBuild/pcre_configure_step.cmake.in b/SuperBuild/pcre_configure_step.cmake.in index 7d0e89124..37fde8202 100644 --- a/SuperBuild/pcre_configure_step.cmake.in +++ b/SuperBuild/pcre_configure_step.cmake.in @@ -5,7 +5,7 @@ # be addressed in CMake with the same structure. set(ENV{CC} "@CMAKE_C_COMPILER_LAUNCHER@ @CMAKE_C_COMPILER@") -set(ENV{CFLAGS} "@CMAKE_C_FLAGS@ @CMAKE_C_FLAGS_RELEASE@") +set(ENV{CFLAGS} "@REQUIRED_C_FLAGS@ @CMAKE_C_FLAGS@ @CMAKE_C_FLAGS_RELEASE@") set(ENV{LDFLAGS} "@CMAKE_LINKER_FLAGS@ @CMAKE_LINKER_FLAGS_RELEASE@") set(ENV{LIBS} "$ENV{LIBS}") @@ -15,7 +15,7 @@ set(ENV{CPPFLAGS} "$ENV{CPPFLAGS}") set(ENV{CXXPP} "$ENV{CXXPP}") set(ENV{CXX} "@CMAKE_CXX_COMPILER_LAUNCHER@ @CMAKE_CXX_COMPILER@") -set(ENV{CXXFLAGS} "@CMAKE_CXX_FLAGS@ @CMAKE_CXX_FLAGS_RELEASE@") +set(ENV{CXXFLAGS} "@REQUIRED_CXX_FLAGS@ @CMAKE_CXX_FLAGS@ @CMAKE_CXX_FLAGS_RELEASE@") set(ENV{YACC} "@BISON_EXECUTABLE@" ) diff --git a/SuperBuild/swig_configure_step.cmake.in b/SuperBuild/swig_configure_step.cmake.in index e8e16efa0..6a8f70ff8 100644 --- a/SuperBuild/swig_configure_step.cmake.in +++ b/SuperBuild/swig_configure_step.cmake.in @@ -7,7 +7,7 @@ cmake_policy(VERSION 3.10.0) set(ENV{CC} "@CMAKE_C_COMPILER_LAUNCHER@ @CMAKE_C_COMPILER@") -set(ENV{CFLAGS} "@CMAKE_C_FLAGS@ @CMAKE_C_FLAGS_RELEASE@") +set(ENV{CFLAGS} "@REQUIRED_C_FLAGS@ @CMAKE_C_FLAGS@ @CMAKE_C_FLAGS_RELEASE@") set(ENV{LDFLAGS} "@CMAKE_LINKER_FLAGS@ @CMAKE_LINKER_FLAGS_RELEASE@") set(ENV{LIBS} "$ENV{LIBS}") @@ -15,7 +15,7 @@ set(ENV{CPP} "$ENV{CPP}") set(ENV{CPPFLAGS} "$ENV{CPPFLAGS}") set(ENV{CXX} "@CMAKE_CXX_COMPILER_LAUNCHER@ @CMAKE_CXX_COMPILER@") -set(ENV{CXXFLAGS} "@CMAKE_CXX_FLAGS@ @CMAKE_CXX_FLAGS_RELEASE@") +set(ENV{CXXFLAGS} "@REQUIRED_CXX_FLAGS@ @CMAKE_CXX_FLAGS@ @CMAKE_CXX_FLAGS_RELEASE@") set(ENV{YACC} "@BISON_EXECUTABLE@" ) set(ENV{YFLAGS} "@BISON_FLAGS@" ) From 855099a63ab8b1932fb037fd2083b0259f56cc50 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 29 Jan 2019 12:58:05 -0500 Subject: [PATCH 019/400] Update the copyright date in the ReadTheDocs documentation --- conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf.py b/conf.py index ad6999860..99fadd3f0 100644 --- a/conf.py +++ b/conf.py @@ -52,7 +52,7 @@ # General information about the project. project = u'SimpleITK' -copyright = u'2017, Insight Software Consortium' +copyright = u'2019, Insight Software Consortium' author = u'Insight Software Consortium' # TODO: Get proper version from CMake From 4dfecbfc7128cdfc0b0786dc1d1ae880bf340320 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 30 Jan 2019 11:15:33 -0500 Subject: [PATCH 020/400] Don't use CMAKE_OSX_SYSROOT is empty string --- SuperBuild/External_PCRE.cmake | 2 +- SuperBuild/External_Swig.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/SuperBuild/External_PCRE.cmake b/SuperBuild/External_PCRE.cmake index 4f52870dd..106fad5c3 100644 --- a/SuperBuild/External_PCRE.cmake +++ b/SuperBuild/External_PCRE.cmake @@ -29,7 +29,7 @@ if(NOT PCRE_DIR) set(pcre_source_dir ${CMAKE_CURRENT_BINARY_DIR}/PCRE-prefix/src/PCRE) set(pcre_install_dir ${CMAKE_CURRENT_BINARY_DIR}/PCRE) - if ( APPLE AND DEFINED CMAKE_OSX_SYSROOT ) + if ( APPLE AND CMAKE_OSX_SYSROOT ) message( "CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT}") set(REQUIRED_C_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}") set(REQUIRED_CXX_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}") diff --git a/SuperBuild/External_Swig.cmake b/SuperBuild/External_Swig.cmake index 90c917cf5..4304374ac 100644 --- a/SuperBuild/External_Swig.cmake +++ b/SuperBuild/External_Swig.cmake @@ -85,7 +85,7 @@ if(NOT SWIG_DIR) set(swig_source_dir ${CMAKE_CURRENT_BINARY_DIR}/Swig-prefix/src/Swig) set(swig_install_dir ${CMAKE_CURRENT_BINARY_DIR}/Swig) - if ( APPLE AND DEFINED CMAKE_OSX_SYSROOT ) + if ( APPLE AND CMAKE_OSX_SYSROOT ) set(REQUIRED_C_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}") set(REQUIRED_CXX_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}") endif() From fbc34dfffaad069c96c4e5620bad0decd07c8c0d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 31 Jan 2019 16:15:40 -0500 Subject: [PATCH 021/400] Add user Applications to show search path When a user on Mac OSX does not have admin privileges, the Fiji.app should be placed in ~/Applications. Search for this too. --- Code/IO/src/sitkImageViewer.cxx | 6 ++++++ Code/IO/src/sitkShow.cxx | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/Code/IO/src/sitkImageViewer.cxx b/Code/IO/src/sitkImageViewer.cxx index e00156bc5..b591710dd 100644 --- a/Code/IO/src/sitkImageViewer.cxx +++ b/Code/IO/src/sitkImageViewer.cxx @@ -174,6 +174,12 @@ void ImageViewer::initializeDefaults() m_GlobalDefaultSearchPath.push_back( "/Developer/" ); m_GlobalDefaultSearchPath.push_back( "/opt/" ); m_GlobalDefaultSearchPath.push_back( "/usr/local/" ); + std::string homedir; + if ( itksys::SystemTools::GetEnv ( "HOME", homedir ) ) + { + m_GlobalDefaultSearchPath.push_back( homedir + "/Applications/" ); + } + #else diff --git a/Code/IO/src/sitkShow.cxx b/Code/IO/src/sitkShow.cxx index 8f34d1aa0..8d8c808cd 100644 --- a/Code/IO/src/sitkShow.cxx +++ b/Code/IO/src/sitkShow.cxx @@ -411,6 +411,12 @@ namespace itk paths.push_back( "/Developer" ); paths.push_back( "/opt/" + directory ); paths.push_back( "/usr/local/" + directory ); + std::string homedir; + if ( itksys::SystemTools::GetEnv ( "HOME", homedir ) ) + { + paths.push_back( homedir + "/Applications/" + directory ); + } + ExecutableName = itksys::SystemTools::FindDirectory( name.c_str(), paths ); From cf63311ff38de6b5dadfba06369c31e85ddcf86e Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 6 Feb 2019 12:35:21 -0500 Subject: [PATCH 022/400] Update ITK Superbuild version along 4.13 release branch This include a patch for fix some CMake warnings. --- SuperBuild/External_ITK.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index bdee518e4..3baf38df2 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,7 +52,7 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(ITK_GIT_TAG "4a6e8c84198a741d18a2a39e616c26dda09b6686" CACHE +set(ITK_GIT_TAG "8bbd7e7ac6ee71932bfb4b00a34c70f1ac02f7e7" CACHE STRING "Tag in ITK git repo") # release-4.13 mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From f5c2e85c5a48ae86aa90710e9eda62284afabf50 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 6 Feb 2019 12:57:31 -0500 Subject: [PATCH 023/400] Update CMake version to use 13.3 --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8750fe02e..7173bd6e1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -25,7 +25,7 @@ referenced: sudo apt-get install -y rsync lua5.1 ccache kwstyle sudo python -m pip install --upgrade pip sudo python -m pip install scikit-ci-addons # Provides "ctest_junit_formatter" add-on - sudo python -m pip install cmake==3.10.3 + sudo python -m pip install cmake==3.13.3 generate-hash-step: &generate-hash-step run: name: Generate external data hash From e363a430095564583f7407d643f6e19a3b5705ad Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 7 Feb 2019 13:02:08 -0500 Subject: [PATCH 024/400] Remove extraneous CMake message statement --- SuperBuild/External_PCRE.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/SuperBuild/External_PCRE.cmake b/SuperBuild/External_PCRE.cmake index 106fad5c3..3b80f8c76 100644 --- a/SuperBuild/External_PCRE.cmake +++ b/SuperBuild/External_PCRE.cmake @@ -30,7 +30,6 @@ if(NOT PCRE_DIR) set(pcre_install_dir ${CMAKE_CURRENT_BINARY_DIR}/PCRE) if ( APPLE AND CMAKE_OSX_SYSROOT ) - message( "CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT}") set(REQUIRED_C_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}") set(REQUIRED_CXX_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}") endif() From 86cdb126189a2953f1858b1779e59b466c7b85ac Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 4 Feb 2019 10:34:19 -0500 Subject: [PATCH 025/400] Set up CI with Azure Pipelines --- Testing/Unit/CMakeLists.txt | 2 +- azure-pipelines.yml | 120 ++++++++++++++++++++++++++++++++++++ azure.cmake | 101 ++++++++++++++++++++++++++++++ 3 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 azure-pipelines.yml create mode 100644 azure.cmake diff --git a/Testing/Unit/CMakeLists.txt b/Testing/Unit/CMakeLists.txt index 99bd6d62a..c2819804c 100644 --- a/Testing/Unit/CMakeLists.txt +++ b/Testing/Unit/CMakeLists.txt @@ -265,7 +265,7 @@ target_compile_options( sitkSystemInformationTest # CMake 3.10 added this method, to avoid configure time introspection if(NOT CMAKE_CROSSCOMPILING) - gtest_discover_tests( SimpleITKUnitTestDriver0 DISCOVERY_TIMEOUT 15 ) + gtest_discover_tests( SimpleITKUnitTestDriver0 DISCOVERY_TIMEOUT 60 ) else() gtest_add_tests(SimpleITKUnitTestDriver0 "" ${SimpleITKUnitTestSource}) endif() diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 000000000..6337ed13e --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,120 @@ +# Starter pipeline +# Start with a minimal pipeline that you can customize to build and deploy your code. +# Add steps that build, run tests, deploy, and more: +# https://aka.ms/yaml + +trigger: + - master + - next + - release +jobs: + - job: Linux + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'Ubuntu-16.04' + + steps: + - checkout: self + clean: true + fetchDepth: 5 + - bash: | + set -x + if [ -n "$(System.PullRequest.SourceCommitId)" ]; then + git checkout $(System.PullRequest.SourceCommitId) + fi + - bash: | + set -x + git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + displayName: Download dashboard scripts + workingDirectory: $(Agent.BuildDirectory) + - script: sudo python -m pip install ninja + displayName: 'Install ninja dependency' + - bash: | + set -x + c++ --version + cmake --version + ninja --version + ctest -S ${BUILD_SOURCESDIRECTORY}/azure.cmake -V -j 4 + displayName: Build and test + env: + CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + workingDirectory: $(Agent.BuildDirectory) + - job: macOS + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'macOS-10.13' + + steps: + - checkout: self + clean: true + fetchDepth: 5 + - bash: | + set -x + if [ -n "$(System.PullRequest.SourceCommitId)" ]; then + git checkout $(System.PullRequest.SourceCommitId) + fi + - bash: | + set -x + git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + displayName: Download dashboard scripts + workingDirectory: $(Agent.BuildDirectory) + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + addToPath: true + - script: sudo python -m pip install ninja + displayName: 'Install ninja dependency' + - bash: | + set -x + c++ --version + cmake --version + ninja --version + ctest -S ${BUILD_SOURCESDIRECTORY}/azure.cmake -V -j 4 + displayName: Build and test + env: + CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + workingDirectory: $(Agent.BuildDirectory) + + - job: Windows + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'vs2017-win2016' + + steps: + - checkout: self + clean: true + fetchDepth: 5 + - script: | + if DEFINED SYSTEM_PULLREQUEST_SOURCECOMMITID git checkout $(System.PullRequest.SourceCommitId) + displayName: Checkout pull request HEAD + - bash: | + set -x + git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + displayName: Download dashboard scripts + workingDirectory: $(Agent.BuildDirectory) + - script: python -m pip install ninja + displayName: 'Install ninja dependency' + - bash: | + set -x + cmake --version + ninja --version + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat" + ctest -S ${BUILD_SOURCESDIRECTORY}/azure.cmake -V -j 4 + displayName: Build and test + env: + CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + workingDirectory: $(Agent.BuildDirectory) diff --git a/azure.cmake b/azure.cmake new file mode 100644 index 000000000..6eeeb3795 --- /dev/null +++ b/azure.cmake @@ -0,0 +1,101 @@ + +# set_from_env +# ------------ +# +# Sets a CMake variable from an environment variable. If the +# environment variable is not defined then either a fatal error is +# generated or the CMake variable is not modified. +# +# set_from_env( [REQUIRED|DEFAULT value] ) +function(set_from_env var env_var) + if(NOT DEFINED ENV{${env_var}}) + if (ARGV2 STREQUAL "REQUIRED") + message(FATAL_ERROR "Required environment variable \"${env_var}\" not defined.") + elseif (ARGV2 STREQUAL "DEFAULT") + set(${var} ${ARGV3} PARENT_SCOPE) + endif() + else() + set(${var} $ENV{${env_var}} PARENT_SCOPE) + endif() +endfunction() + +set_from_env(CTEST_SITE "AGENT_MACHINENAME" REQUIRED) +set(CTEST_SITE "Azure.${CTEST_SITE}") +set(CTEST_UPDATE_VERSION_ONLY 1) + +set_from_env(PARALLEL_LEVEL "PARALLEL_LEVEL" DEFAULT 2 ) +set( CTEST_TEST_ARGS ${CTEST_TEST_ARGS} PARALLEL_LEVEL ${PARALLEL_LEVEL}) +set_from_env(workspace "AGENT_BUILDDIRECTORY" REQUIRED) +file(TO_CMAKE_PATH "${workspace}" CTEST_DASHBOARD_ROOT) +file(RELATIVE_PATH dashboard_source_name "${workspace}" "$ENV{BUILD_SOURCESDIRECTORY}") + +# Make environment variables to CMake variables for CTest +set_from_env(CTEST_CMAKE_GENERATOR "CTEST_CMAKE_GENERATOR" DEFAULT "Ninja" ) +set_from_env(CTEST_CONFIGURATION_TYPE "CTEST_CONFIGURATION_TYPE" DEFAULT "Release") +set_from_env(CTEST_SOURCE_DIRECTORY "BUILD_SOURCESDIRECTORY" REQUIRED) +#set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY") +#set_from_env(CTEST_BUILD_FLAGS "CTEST_BUILD_FLAGS") +set_from_env(CTEST_BUILD_TARGET "CTEST_BUILD_TARGET") +set_from_env(CTEST_TEST_ARGS "CTEST_TEST_ARGS") + + +set_from_env(DASHBOARD_BRANCH_DIRECTORY "DASHBOARD_BRANCH_DIRECTORY" REQUIRED) + +# Construct build name based on what is being built +set(dashboard_loop 0) + + + +if(NOT CTEST_BUILD_NAME) + if(DEFINED ENV{SYSTEM_PULLREQUEST_SOURCEBRANCH}) + set(branch "-$ENV{SYSTEM_PULLREQUEST_SOURCEBRANCH}") + set(dashboard_model "Experimental") + elseif(ENV{BUILD_SOURCEBRANCHNAME} STREQUAL "master") + set(branch "-master") + set(dashboard_model "Continuous") + else() + set(branch "-$ENV{BUILD_SOURCEBRANCHNAME}") + set(dashboard_model "Experimental") + endif() + + if(DEFINED ENV{SYSTEM_PULLREQUEST_PULLREQUESTNUMBER}) + set(pr "-PR$ENV{SYSTEM_PULLREQUEST_PULLREQUESTNUMBER}") + else() + set(pr "") + endif() + + set(CTEST_BUILD_NAME + "$ENV{AGENT_OS}-Build$ENV{BUILD_BUILDID}${pr}${branch}${wrapping}") +endif() + +if ( EXISTS "${CTEST_SOURCE_DIRECTORY}/azure.yml") + list(APPEND CTEST_NOTES_FILES + "${CTEST_SOURCE_DIRECTORY}/azure.yml" + ) +endif() + + + +SET (_dashboard_cache " + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=OFF + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + CMAKE_JOB_POOLS:STRING=link=1 + CMAKE_JOB_POOL_LINK:STRING=link + SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF + + WRAP_DEFAULT:BOOL=OFF +" ) + +set_from_env(dashboard_cache "CTEST_CACHE" DEFAULT ${_dashboard_cache}) + +endif() + + + + +string(TIMESTAMP build_date "%Y-%m-%d") +message("CDash Build Identifier: ${build_date} ${CTEST_BUILD_NAME}") + +include("${DASHBOARD_BRANCH_DIRECTORY}/simpleitk_common.cmake") From 151532f771c0fe00ba7ad8713d8ad9c37742e0d8 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 8 Feb 2019 10:23:55 -0500 Subject: [PATCH 026/400] Do not limit number of link jobs on Azure --- azure.cmake | 2 -- 1 file changed, 2 deletions(-) diff --git a/azure.cmake b/azure.cmake index 6eeeb3795..1a926f21c 100644 --- a/azure.cmake +++ b/azure.cmake @@ -81,8 +81,6 @@ SET (_dashboard_cache " BUILD_EXAMPLES:BOOL=OFF BUILD_SHARED_LIBS:BOOL=OFF BUILD_TESTING:BOOL=ON - CMAKE_JOB_POOLS:STRING=link=1 - CMAKE_JOB_POOL_LINK:STRING=link SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF WRAP_DEFAULT:BOOL=OFF From ae0a90068aa7d36798cb548c2a22d6b951fc0d30 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 7 Feb 2019 17:34:24 -0500 Subject: [PATCH 027/400] Download the last release testing data tar-ball on azure This is a faster way to download the data. --- azure-pipelines.yml | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 6337ed13e..5c2ba2bb5 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -7,6 +7,8 @@ trigger: - master - next - release +variables: + ExternalDataVersion: 1.2.0 jobs: - job: Linux timeoutInMinutes: 0 @@ -26,7 +28,11 @@ jobs: - bash: | set -x git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - displayName: Download dashboard scripts + + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 + displayName: Download dashboard scripts and testing data workingDirectory: $(Agent.BuildDirectory) - script: sudo python -m pip install ninja displayName: 'Install ninja dependency' @@ -61,7 +67,11 @@ jobs: - bash: | set -x git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - displayName: Download dashboard scripts + + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 + displayName: Download dashboard scripts and testing data workingDirectory: $(Agent.BuildDirectory) - task: UsePythonVersion@0 displayName: Enable Python @@ -101,7 +111,11 @@ jobs: - bash: | set -x git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - displayName: Download dashboard scripts + + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename "SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5" "$(Build.SourcesDirectory)/.ExternalData/MD5" + displayName: Download dashboard scripts and testing data workingDirectory: $(Agent.BuildDirectory) - script: python -m pip install ninja displayName: 'Install ninja dependency' From a89fb38b26d471ae9b2bcbf646bfe7d6dd13d996 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 8 Feb 2019 12:00:47 -0500 Subject: [PATCH 028/400] Use VisualStudio CMake generator --- azure-pipelines.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 6337ed13e..98386e962 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -105,16 +105,16 @@ jobs: workingDirectory: $(Agent.BuildDirectory) - script: python -m pip install ninja displayName: 'Install ninja dependency' - - bash: | - set -x + - script: | cmake --version - ninja --version - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat" - ctest -S ${BUILD_SOURCESDIRECTORY}/azure.cmake -V -j 4 + ctest -S "$(Build.SourcesDirectory)/azure.cmake" -V -j 4 displayName: Build and test env: CTEST_BUILD_CONFIGURATION: MinSizeRel CTEST_OUTPUT_ON_FALURE: 1 + CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017 Win64" DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CXXFLAGS: /MP + CFLAGS: /MP workingDirectory: $(Agent.BuildDirectory) From 324c0c5a647774f23b2f1fe95c29c26d0b1651da Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 8 Feb 2019 12:25:15 -0500 Subject: [PATCH 029/400] Fix ExternalData Path to in source location --- CMake/sitkExternalData.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMake/sitkExternalData.cmake b/CMake/sitkExternalData.cmake index 896792abf..8fba2b77f 100644 --- a/CMake/sitkExternalData.cmake +++ b/CMake/sitkExternalData.cmake @@ -19,7 +19,7 @@ if(NOT ExternalData_OBJECT_STORES) endif() list(APPEND ExternalData_OBJECT_STORES # Local data store populated by the ITK pre-commit hook - "${SimpleITK_SOURCE_DIR}/../.ExternalData" + "${SimpleITK_SOURCE_DIR}/.ExternalData" ) set(ExternalData_BINARY_ROOT ${CMAKE_BINARY_DIR}/ExternalData) From d63a2f17a1966aad721674a56c38851ced481d27 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 11 Feb 2019 11:39:40 -0500 Subject: [PATCH 030/400] Move Azure Pipes configuration to sub-directory --- azure-pipelines.yml => Testing/CI/Azure/azure-pipelines.yml | 6 +++--- azure.cmake => Testing/CI/Azure/azure.cmake | 0 2 files changed, 3 insertions(+), 3 deletions(-) rename azure-pipelines.yml => Testing/CI/Azure/azure-pipelines.yml (95%) rename azure.cmake => Testing/CI/Azure/azure.cmake (100%) diff --git a/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml similarity index 95% rename from azure-pipelines.yml rename to Testing/CI/Azure/azure-pipelines.yml index 2e5ae9076..037bc7535 100644 --- a/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -41,7 +41,7 @@ jobs: c++ --version cmake --version ninja --version - ctest -S ${BUILD_SOURCESDIRECTORY}/azure.cmake -V -j 4 + ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 4 displayName: Build and test env: CTEST_BUILD_CONFIGURATION: MinSizeRel @@ -86,7 +86,7 @@ jobs: c++ --version cmake --version ninja --version - ctest -S ${BUILD_SOURCESDIRECTORY}/azure.cmake -V -j 4 + ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 4 displayName: Build and test env: CTEST_BUILD_CONFIGURATION: MinSizeRel @@ -121,7 +121,7 @@ jobs: displayName: 'Install ninja dependency' - script: | cmake --version - ctest -S "$(Build.SourcesDirectory)/azure.cmake" -V -j 4 + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V -j 4 displayName: Build and test env: CTEST_BUILD_CONFIGURATION: MinSizeRel diff --git a/azure.cmake b/Testing/CI/Azure/azure.cmake similarity index 100% rename from azure.cmake rename to Testing/CI/Azure/azure.cmake From 227a3006ce49ea570297342276d65264fc63c797 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 11 Feb 2019 15:58:42 -0500 Subject: [PATCH 031/400] Adding Azure Pipelines configuration from master branch This is the current configuration from: ea50cf1e7898571c37c4e78e9c3074fa0134b8f0 --- Testing/CI/Azure/azure-pipelines.yml | 134 +++++++++++++++++++++++++++ Testing/CI/Azure/azure.cmake | 99 ++++++++++++++++++++ 2 files changed, 233 insertions(+) create mode 100644 Testing/CI/Azure/azure-pipelines.yml create mode 100644 Testing/CI/Azure/azure.cmake diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml new file mode 100644 index 000000000..037bc7535 --- /dev/null +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -0,0 +1,134 @@ +# Starter pipeline +# Start with a minimal pipeline that you can customize to build and deploy your code. +# Add steps that build, run tests, deploy, and more: +# https://aka.ms/yaml + +trigger: + - master + - next + - release +variables: + ExternalDataVersion: 1.2.0 +jobs: + - job: Linux + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'Ubuntu-16.04' + + steps: + - checkout: self + clean: true + fetchDepth: 5 + - bash: | + set -x + if [ -n "$(System.PullRequest.SourceCommitId)" ]; then + git checkout $(System.PullRequest.SourceCommitId) + fi + - bash: | + set -x + git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 + displayName: Download dashboard scripts and testing data + workingDirectory: $(Agent.BuildDirectory) + - script: sudo python -m pip install ninja + displayName: 'Install ninja dependency' + - bash: | + set -x + c++ --version + cmake --version + ninja --version + ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 4 + displayName: Build and test + env: + CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + workingDirectory: $(Agent.BuildDirectory) + - job: macOS + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'macOS-10.13' + + steps: + - checkout: self + clean: true + fetchDepth: 5 + - bash: | + set -x + if [ -n "$(System.PullRequest.SourceCommitId)" ]; then + git checkout $(System.PullRequest.SourceCommitId) + fi + - bash: | + set -x + git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 + displayName: Download dashboard scripts and testing data + workingDirectory: $(Agent.BuildDirectory) + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + addToPath: true + - script: sudo python -m pip install ninja + displayName: 'Install ninja dependency' + - bash: | + set -x + c++ --version + cmake --version + ninja --version + ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 4 + displayName: Build and test + env: + CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + workingDirectory: $(Agent.BuildDirectory) + + - job: Windows + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'vs2017-win2016' + + steps: + - checkout: self + clean: true + fetchDepth: 5 + - script: | + if DEFINED SYSTEM_PULLREQUEST_SOURCECOMMITID git checkout $(System.PullRequest.SourceCommitId) + displayName: Checkout pull request HEAD + - bash: | + set -x + git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename "SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5" "$(Build.SourcesDirectory)/.ExternalData/MD5" + displayName: Download dashboard scripts and testing data + workingDirectory: $(Agent.BuildDirectory) + - script: python -m pip install ninja + displayName: 'Install ninja dependency' + - script: | + cmake --version + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V -j 4 + displayName: Build and test + env: + CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017 Win64" + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CXXFLAGS: /MP + CFLAGS: /MP + workingDirectory: $(Agent.BuildDirectory) diff --git a/Testing/CI/Azure/azure.cmake b/Testing/CI/Azure/azure.cmake new file mode 100644 index 000000000..1a926f21c --- /dev/null +++ b/Testing/CI/Azure/azure.cmake @@ -0,0 +1,99 @@ + +# set_from_env +# ------------ +# +# Sets a CMake variable from an environment variable. If the +# environment variable is not defined then either a fatal error is +# generated or the CMake variable is not modified. +# +# set_from_env( [REQUIRED|DEFAULT value] ) +function(set_from_env var env_var) + if(NOT DEFINED ENV{${env_var}}) + if (ARGV2 STREQUAL "REQUIRED") + message(FATAL_ERROR "Required environment variable \"${env_var}\" not defined.") + elseif (ARGV2 STREQUAL "DEFAULT") + set(${var} ${ARGV3} PARENT_SCOPE) + endif() + else() + set(${var} $ENV{${env_var}} PARENT_SCOPE) + endif() +endfunction() + +set_from_env(CTEST_SITE "AGENT_MACHINENAME" REQUIRED) +set(CTEST_SITE "Azure.${CTEST_SITE}") +set(CTEST_UPDATE_VERSION_ONLY 1) + +set_from_env(PARALLEL_LEVEL "PARALLEL_LEVEL" DEFAULT 2 ) +set( CTEST_TEST_ARGS ${CTEST_TEST_ARGS} PARALLEL_LEVEL ${PARALLEL_LEVEL}) +set_from_env(workspace "AGENT_BUILDDIRECTORY" REQUIRED) +file(TO_CMAKE_PATH "${workspace}" CTEST_DASHBOARD_ROOT) +file(RELATIVE_PATH dashboard_source_name "${workspace}" "$ENV{BUILD_SOURCESDIRECTORY}") + +# Make environment variables to CMake variables for CTest +set_from_env(CTEST_CMAKE_GENERATOR "CTEST_CMAKE_GENERATOR" DEFAULT "Ninja" ) +set_from_env(CTEST_CONFIGURATION_TYPE "CTEST_CONFIGURATION_TYPE" DEFAULT "Release") +set_from_env(CTEST_SOURCE_DIRECTORY "BUILD_SOURCESDIRECTORY" REQUIRED) +#set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY") +#set_from_env(CTEST_BUILD_FLAGS "CTEST_BUILD_FLAGS") +set_from_env(CTEST_BUILD_TARGET "CTEST_BUILD_TARGET") +set_from_env(CTEST_TEST_ARGS "CTEST_TEST_ARGS") + + +set_from_env(DASHBOARD_BRANCH_DIRECTORY "DASHBOARD_BRANCH_DIRECTORY" REQUIRED) + +# Construct build name based on what is being built +set(dashboard_loop 0) + + + +if(NOT CTEST_BUILD_NAME) + if(DEFINED ENV{SYSTEM_PULLREQUEST_SOURCEBRANCH}) + set(branch "-$ENV{SYSTEM_PULLREQUEST_SOURCEBRANCH}") + set(dashboard_model "Experimental") + elseif(ENV{BUILD_SOURCEBRANCHNAME} STREQUAL "master") + set(branch "-master") + set(dashboard_model "Continuous") + else() + set(branch "-$ENV{BUILD_SOURCEBRANCHNAME}") + set(dashboard_model "Experimental") + endif() + + if(DEFINED ENV{SYSTEM_PULLREQUEST_PULLREQUESTNUMBER}) + set(pr "-PR$ENV{SYSTEM_PULLREQUEST_PULLREQUESTNUMBER}") + else() + set(pr "") + endif() + + set(CTEST_BUILD_NAME + "$ENV{AGENT_OS}-Build$ENV{BUILD_BUILDID}${pr}${branch}${wrapping}") +endif() + +if ( EXISTS "${CTEST_SOURCE_DIRECTORY}/azure.yml") + list(APPEND CTEST_NOTES_FILES + "${CTEST_SOURCE_DIRECTORY}/azure.yml" + ) +endif() + + + +SET (_dashboard_cache " + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=OFF + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF + + WRAP_DEFAULT:BOOL=OFF +" ) + +set_from_env(dashboard_cache "CTEST_CACHE" DEFAULT ${_dashboard_cache}) + +endif() + + + + +string(TIMESTAMP build_date "%Y-%m-%d") +message("CDash Build Identifier: ${build_date} ${CTEST_BUILD_NAME}") + +include("${DASHBOARD_BRANCH_DIRECTORY}/simpleitk_common.cmake") From 665fb245ceb0dfdbd909e3a94e12fe48c4e6894f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 11 Feb 2019 16:24:04 -0500 Subject: [PATCH 032/400] Add Azure status badges --- Readme.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Readme.md b/Readme.md index c90d7f32d..459911148 100644 --- a/Readme.md +++ b/Readme.md @@ -1,11 +1,11 @@ SimpleITK ========= -| | CircleCI | ReadTheDocs | -|:-------:|:---------:|:-------------:| -| release | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=release)](http://simpleitk.readthedocs.io/en/release/) | -| master | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=master)](http://simpleitk.readthedocs.io/en/master/) | -| next | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/next.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/next) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=next)](http://simpleitk.readthedocs.io/en/next/) | +| | CircleCI | ReadTheDocs | AzurePipelines | +|:-------:|:---------:|:-------------:|:-------------:| +| release | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=release)](http://simpleitk.readthedocs.io/en/release/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=release)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=release) | +| master | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=master)](http://simpleitk.readthedocs.io/en/master/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=release)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=release) | +| next | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/next.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/next) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=next)](http://simpleitk.readthedocs.io/en/next/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=release)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=release) | SimpleITK is an image analysis toolkit with a large number of components supporting general filtering operations, image segmentation and registration. It is built on top of the Insight Segmentation and Registration Toolkit [ITK](https://www.itk.org) with the intent of providing a simplified interface to ITK. SimpleITK itself is written in C++ but is available for a large number of programming languages. Currently these include: From 3cb5f7d8da6874208d423fa4f9327c3d44798111 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 12 Feb 2019 16:12:53 -0500 Subject: [PATCH 033/400] Update ITK version along 4.13 release branch This patch contains numerous CMake configuration warning fixes. --- SuperBuild/External_ITK.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index 3baf38df2..c031b676d 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,8 +52,7 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(ITK_GIT_TAG "8bbd7e7ac6ee71932bfb4b00a34c70f1ac02f7e7" CACHE - STRING "Tag in ITK git repo") # release-4.13 +set(ITK_GIT_TAG "8862e36ad879b46d6cb3e8682852d78d5673accd" CACHE STRING "Tag in ITK git repo") # along release-4.13 mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From 72b7e817da6678c2599f3c9473ef4e988ec02550 Mon Sep 17 00:00:00 2001 From: Kasper Marstal Date: Fri, 15 Feb 2019 16:22:02 +0100 Subject: [PATCH 034/400] ENH: Update elastix (#211) --- SuperBuild/External_Elastix.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_Elastix.cmake b/SuperBuild/External_Elastix.cmake index 4e3c8a60f..b51673aa2 100644 --- a/SuperBuild/External_Elastix.cmake +++ b/SuperBuild/External_Elastix.cmake @@ -2,7 +2,7 @@ set( proj Elastix ) file( WRITE "${CMAKE_CURRENT_BINARY_DIR}/${proj}-build/CMakeCacheInit.txt" "${ep_common_cache}" ) set( ELASTIX_GIT_REPOSITORY ${git_protocol}://github.com/SuperElastix/elastix ) -set( ELASTIX_GIT_TAG 143cdc99290a5013271c95d991725e0d49a69a51 ) +set( ELASTIX_GIT_TAG 33b41a2747cbd83db0aca9f18032d49a93395f8a ) ExternalProject_Add( ${proj} GIT_REPOSITORY ${ELASTIX_GIT_REPOSITORY} From fe35c5b1b18dc04507753138a55c7fc5b4b018f7 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 11 Feb 2019 14:57:03 -0500 Subject: [PATCH 035/400] Add azure pipeline configuration to do converage --- Testing/CI/Azure/azure-pipelines-coverage.yml | 63 +++++++++++++++++++ Testing/CI/Azure/azure.cmake | 6 +- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Testing/CI/Azure/azure-pipelines-coverage.yml diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml new file mode 100644 index 000000000..1ff36fb15 --- /dev/null +++ b/Testing/CI/Azure/azure-pipelines-coverage.yml @@ -0,0 +1,63 @@ +# Nightly Coverage + +trigger: + branches: + exclude: + - "*" +pr: none + +variables: + ExternalDataVersion: 1.2.0 +jobs: + - job: Linux + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'Ubuntu-16.04' + + steps: + - checkout: self + clean: true + fetchDepth: 5 + - bash: | + set -x + if [ -n "$(System.PullRequest.SourceCommitId)" ]; then + git checkout $(System.PullRequest.SourceCommitId) + fi + - bash: | + set -x + git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 + displayName: Download dashboard scripts and testing data + workingDirectory: $(Agent.BuildDirectory) + - script: sudo python -m pip install ninja + displayName: 'Install ninja dependency' + - bash: | + ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake + displayName: Build and test + env: + CTEST_BUILD_CONFIGURATION: Debug + CTEST_OUTPUT_ON_FALURE: 1 + CTEST_CMAKE_GENERATOR: "Ninja" + CTEST_COVERAGE_COMMAND: /usr/bin/gcov + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=OFF + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + CMAKE_CXX_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage + CMAKE_C_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage + CMAKE_EXE_LINKER_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage + CMAKE_JOB_POOLS:STRING=compile=2;link=1 + CMAKE_JOB_POOL_COMPILE:STRING=compile + CMAKE_JOB_POOL_LINK:STRING=link + COVERAGE_COMMAND:PATH=/usr/bin/gcov + SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF + WRAP_DEFAULT:BOOL=OFF + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + DASHBOARD_DO_COVERAGE: 1 + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 1 + workingDirectory: $(Agent.BuildDirectory) diff --git a/Testing/CI/Azure/azure.cmake b/Testing/CI/Azure/azure.cmake index 1a926f21c..2881d2146 100644 --- a/Testing/CI/Azure/azure.cmake +++ b/Testing/CI/Azure/azure.cmake @@ -34,13 +34,17 @@ set_from_env(CTEST_CMAKE_GENERATOR "CTEST_CMAKE_GENERATOR" DEFAULT "Ninja" ) set_from_env(CTEST_CONFIGURATION_TYPE "CTEST_CONFIGURATION_TYPE" DEFAULT "Release") set_from_env(CTEST_SOURCE_DIRECTORY "BUILD_SOURCESDIRECTORY" REQUIRED) #set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY") -#set_from_env(CTEST_BUILD_FLAGS "CTEST_BUILD_FLAGS") +set_from_env(CTEST_BUILD_FLAGS "CTEST_BUILD_FLAGS") set_from_env(CTEST_BUILD_TARGET "CTEST_BUILD_TARGET") set_from_env(CTEST_TEST_ARGS "CTEST_TEST_ARGS") set_from_env(DASHBOARD_BRANCH_DIRECTORY "DASHBOARD_BRANCH_DIRECTORY" REQUIRED) + +set_from_env(dashboard_do_coverage "DASHBOARD_DO_COVERAGE" 0) +set_from_env(CTEST_COVERAGE_COMMAND "CTEST_COVERAGE_COMMAND") + # Construct build name based on what is being built set(dashboard_loop 0) From e6f2eb75e7d7deea05582fbb38a8bce9f9da5440 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 18 Feb 2019 18:11:04 -0800 Subject: [PATCH 036/400] Use Makefile generator for coverage When the Ninja generator is used it appears that the source files in the build directory are not include in the coverage. This reduces the lines available by 75%. --- Testing/CI/Azure/azure-pipelines-coverage.yml | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml index 1ff36fb15..0409f6e98 100644 --- a/Testing/CI/Azure/azure-pipelines-coverage.yml +++ b/Testing/CI/Azure/azure-pipelines-coverage.yml @@ -33,15 +33,14 @@ jobs: cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 displayName: Download dashboard scripts and testing data workingDirectory: $(Agent.BuildDirectory) - - script: sudo python -m pip install ninja - displayName: 'Install ninja dependency' - bash: | ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake - displayName: Build and test + displayName: Build and test with coverage env: CTEST_BUILD_CONFIGURATION: Debug + CTEST_BUILD_FLAGS: -j 2 CTEST_OUTPUT_ON_FALURE: 1 - CTEST_CMAKE_GENERATOR: "Ninja" + CTEST_CMAKE_GENERATOR: "Unix Makefiles" CTEST_COVERAGE_COMMAND: /usr/bin/gcov CTEST_CACHE: | BUILD_DOCUMENTS:BOOL=OFF @@ -51,9 +50,6 @@ jobs: CMAKE_CXX_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage CMAKE_C_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage CMAKE_EXE_LINKER_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage - CMAKE_JOB_POOLS:STRING=compile=2;link=1 - CMAKE_JOB_POOL_COMPILE:STRING=compile - CMAKE_JOB_POOL_LINK:STRING=link COVERAGE_COMMAND:PATH=/usr/bin/gcov SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF WRAP_DEFAULT:BOOL=OFF From ee650d4a875451beffd754489d4abc3f621f2b00 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 21 Feb 2019 10:45:01 -0500 Subject: [PATCH 037/400] Remove outdate coverage exclude files --- CMake/CTestCustom.cmake.in | 7 ------- 1 file changed, 7 deletions(-) diff --git a/CMake/CTestCustom.cmake.in b/CMake/CTestCustom.cmake.in index 5f61b72bb..f8c470ed5 100644 --- a/CMake/CTestCustom.cmake.in +++ b/CMake/CTestCustom.cmake.in @@ -14,13 +14,6 @@ SET(CTEST_CUSTOM_COVERAGE_EXCLUDE # Exclude files from the Testing directories ".*/Testing/.*" - - # Exclude files from the Utilities directories - ".*/Utilities/.*" - - # exclude certain wrapping files - "/Wrapping/SimpleITKLuaMain.cxx" - "/Wrapping/.*_wrap.cxx" ) SET(CTEST_CUSTOM_WARNING_EXCEPTION From 70a08592bff596e797de3c948d75ce56aa5d7cdb Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 2 Jan 2019 13:53:27 -0500 Subject: [PATCH 038/400] Bumping version to 1.3 for development --- Version.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Version.cmake b/Version.cmake index 1e28ab9f3..8e646a34a 100644 --- a/Version.cmake +++ b/Version.cmake @@ -9,7 +9,7 @@ # Version info set(SimpleITK_VERSION_MAJOR 1) -set(SimpleITK_VERSION_MINOR 2) +set(SimpleITK_VERSION_MINOR 3) set(SimpleITK_VERSION_PATCH 0) #set(SimpleITK_VERSION_TWEAK "") From 40b03a3e7c44ebf8ee703e2dd179602b51782454 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 4 Jan 2019 16:04:05 -0500 Subject: [PATCH 039/400] Create a docker image to generate SimpleITK doxygen --- Utilities/GenerateDocs/docker/Dockerfile | 10 +++++++++ Utilities/GenerateDocs/docker/cmd.sh | 23 +++++++++++++++++++++ Utilities/GenerateDocs/docker/run.sh | 26 ++++++++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 Utilities/GenerateDocs/docker/Dockerfile create mode 100755 Utilities/GenerateDocs/docker/cmd.sh create mode 100755 Utilities/GenerateDocs/docker/run.sh diff --git a/Utilities/GenerateDocs/docker/Dockerfile b/Utilities/GenerateDocs/docker/Dockerfile new file mode 100644 index 000000000..cb725f52f --- /dev/null +++ b/Utilities/GenerateDocs/docker/Dockerfile @@ -0,0 +1,10 @@ +FROM ubuntu:16.04 + +RUN apt-get update && \ + apt-get install -y cmake cmake-curses-gui gcc g++ git python python-dev doxygen ninja-build gnuplot wget texlive-full + +WORKDIR /tmp/ +COPY ./cmd.sh /work/ +RUN chmod o+rx /work/cmd.sh + +ENTRYPOINT [ "bash", "-c", "groupadd -o -g $_GROUPID $_USER && useradd -m -o -g $_GROUPID $_USER -u $_USERID && su $_USER /work/cmd.sh" ] diff --git a/Utilities/GenerateDocs/docker/cmd.sh b/Utilities/GenerateDocs/docker/cmd.sh new file mode 100755 index 000000000..56c09b28e --- /dev/null +++ b/Utilities/GenerateDocs/docker/cmd.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -eux + +# this script is indented to be included in the docker image and run a container + +OUT_DIR=/work/io +SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG:-v1.1rc1} + +git clone https://github.com/SimpleITK/SimpleITK.git && ( cd SimpleITK && git checkout ${SIMPLEITK_GIT_TAG} ) + +mkdir bld && cd bld + +cmake \ + -G Ninja \ + -DBUILD_DOXYGEN:BOOL=ON \ + -DBUILD_EXAMPLES:BOOL=OFF \ + -DWRAP_DEFAULT:BOOL=OFF \ + ../SimpleITK/SuperBuild + +ninja SimpleITK-doc + +cd SimpleITK-build/Documentation/ +tar -zcvf ${OUT_DIR}/simpleitk_doxygen_html_${SIMPLEITK_GIT_TAG}.tar.gz html diff --git a/Utilities/GenerateDocs/docker/run.sh b/Utilities/GenerateDocs/docker/run.sh new file mode 100755 index 000000000..31653bcb6 --- /dev/null +++ b/Utilities/GenerateDocs/docker/run.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +# +# Genrates a SimpleITK Doxygen tarball for a tag +# +# Example usage: $ SIMPLEITK_GIT_TAG=v1.2.0 run.sh +# +# This script build build a docker image, then run the SimpleITK build step inorder to generate the Doxygen. By mounting the current directory onto the container a Doxygen tar-ball will be produced. + + +if [ -n "$ExternalData_OBJECT_STORES" -a -d "$ExternalData_OBJECT_STORES" ] ; then + extra_args="-v ${ExternalData_OBJECT_STORES}:/var/io/.ExternalData -e ExternalData_OBJECT_STORES=/var/io/.ExternalData" +fi + +if [ ! -z "${SIMPLEITK_GIT_TAG}" ] ; then + extra_args="${extra_args} -e SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG}" +fi + + +echo " extra_args: " ${extra_args} + +DOCKER_TAG=simpleitk_doxygen + +docker build --pull=true --rm=true -t ${DOCKER_TAG} -f Dockerfile . + +docker run --rm -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) $extra_args -v $(pwd):/work/io -t ${DOCKER_TAG} From ab03d7e0ffb4c3a82f5b9bee88d6b06a375f9276 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 10 Jan 2019 17:52:26 -0500 Subject: [PATCH 040/400] Add script to generate download links used on simpleitk.org --- .../GeneratePythonDownloadsPage.py | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100755 Utilities/Maintenance/GeneratePythonDownloadsPage.py diff --git a/Utilities/Maintenance/GeneratePythonDownloadsPage.py b/Utilities/Maintenance/GeneratePythonDownloadsPage.py new file mode 100755 index 000000000..063a3e24b --- /dev/null +++ b/Utilities/Maintenance/GeneratePythonDownloadsPage.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python +#========================================================================= +# +# Copyright Insight Software Consortium +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#========================================================================= + +import hashlib +import argparse +import re +import os + +parser = argparse.ArgumentParser( description="Given a list of python wheels, generate a list of hyperlinks to GitHub with sha512 fragment identifier" ) +parser.add_argument( '--hash', choices=['md5','sha256', 'sha512'], default='sha512') +parser.add_argument( '-f', '--format', choices=['html','md'], default='html') +parser.add_argument( 'files', metavar="python.whl", type=argparse.FileType(mode='rb'), nargs='+' ) + + +args = parser.parse_args() + + +for f in args.files: + name = os.path.basename(f.name) + #version="1.1.0" + version = re.match(r'SimpleITK-([0-9]+\.[0-9]+(\.[0-9]+)?(rc[0-9]+)?)', name ).group(1) + print("version:{0}".format(version)) + if args.hash == "md5": + hash_value = hashlib.md5(f.read()).hexdigest() + elif args.hash == "sha256": + hash_value = hashlib.sha256(f.read()).hexdigest() + elif args.hash == "sha512": + hash_value = hashlib.sha512(f.read()).hexdigest() + + + tag = "v{0}".format(version) + + #host="SourceForge" + #url = "https://sourceforge.net/projects/simpleitk/files/SimpleITK/{0}/Python/{1}#{2}={3}".format(version,name,args.hash,hash_value) + + host = "GitHub" + url = "https://github.com/SimpleITK/SimpleITK/releases/download/{0}/{1}#{2}={3}".format(tag,name,args.hash,hash_value) + + if args.format == 'html': + print "
  • {1} (hosted at {2})
  • ".format(url,name,host) + elif args.format == 'md': + print "[{1}]({0})".format(url,name) + + f.close() From 6480ac54600f8061b53405af5c59b361d384a100 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 9 Jan 2019 14:09:54 -0500 Subject: [PATCH 041/400] Separate entry point script to add user to container --- Utilities/GenerateDocs/docker/Dockerfile | 9 ++++++--- Utilities/GenerateDocs/docker/entrypoint.sh | 8 ++++++++ Utilities/GenerateDocs/docker/run.sh | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) create mode 100755 Utilities/GenerateDocs/docker/entrypoint.sh diff --git a/Utilities/GenerateDocs/docker/Dockerfile b/Utilities/GenerateDocs/docker/Dockerfile index cb725f52f..80f3f3ea9 100644 --- a/Utilities/GenerateDocs/docker/Dockerfile +++ b/Utilities/GenerateDocs/docker/Dockerfile @@ -4,7 +4,10 @@ RUN apt-get update && \ apt-get install -y cmake cmake-curses-gui gcc g++ git python python-dev doxygen ninja-build gnuplot wget texlive-full WORKDIR /tmp/ -COPY ./cmd.sh /work/ -RUN chmod o+rx /work/cmd.sh +COPY ./cmd.sh /work/bin/ +COPY ./entrypoint.sh /work/bin/ +RUN chmod o+rx /work/bin/*.sh -ENTRYPOINT [ "bash", "-c", "groupadd -o -g $_GROUPID $_USER && useradd -m -o -g $_GROUPID $_USER -u $_USERID && su $_USER /work/cmd.sh" ] + +ENTRYPOINT ["/work/bin/entrypoint.sh"] +CMD ["/work/bin/cmd.sh"] diff --git a/Utilities/GenerateDocs/docker/entrypoint.sh b/Utilities/GenerateDocs/docker/entrypoint.sh new file mode 100755 index 000000000..679aa027d --- /dev/null +++ b/Utilities/GenerateDocs/docker/entrypoint.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -eux +umask 000 +groupadd -o -g $_GROUPID $_USER +useradd -m -o -g $_GROUPID $_USER -u $_USERID +unset _GROUPID _USERID +su $_USER $@ diff --git a/Utilities/GenerateDocs/docker/run.sh b/Utilities/GenerateDocs/docker/run.sh index 31653bcb6..75f326758 100755 --- a/Utilities/GenerateDocs/docker/run.sh +++ b/Utilities/GenerateDocs/docker/run.sh @@ -23,4 +23,4 @@ DOCKER_TAG=simpleitk_doxygen docker build --pull=true --rm=true -t ${DOCKER_TAG} -f Dockerfile . -docker run --rm -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) $extra_args -v $(pwd):/work/io -t ${DOCKER_TAG} +docker run --rm -t -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) $extra_args -v $(pwd):/work/io ${DOCKER_TAG} From e5d951c3c8592a773ea247b8fa4d240a167d875c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 10 Jan 2019 17:16:35 -0500 Subject: [PATCH 042/400] Upgrade to Ubuntu 18.04 with newer system CMake --- Utilities/GenerateDocs/docker/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Utilities/GenerateDocs/docker/Dockerfile b/Utilities/GenerateDocs/docker/Dockerfile index 80f3f3ea9..394fad929 100644 --- a/Utilities/GenerateDocs/docker/Dockerfile +++ b/Utilities/GenerateDocs/docker/Dockerfile @@ -1,7 +1,7 @@ -FROM ubuntu:16.04 +FROM ubuntu:18.04 RUN apt-get update && \ - apt-get install -y cmake cmake-curses-gui gcc g++ git python python-dev doxygen ninja-build gnuplot wget texlive-full + DEBIAN_FRONTEND=noninteractive apt-get install -y cmake cmake-curses-gui gcc g++ git python python-dev doxygen ninja-build gnuplot wget texlive-full WORKDIR /tmp/ COPY ./cmd.sh /work/bin/ From 7479d80319aaf75ce5666e77b196e3790de4b656 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 10 Jan 2019 17:17:10 -0500 Subject: [PATCH 043/400] Add support to specify SimpleITK git tag --- Utilities/GenerateDocs/docker/run.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Utilities/GenerateDocs/docker/run.sh b/Utilities/GenerateDocs/docker/run.sh index 75f326758..bcc420e0c 100755 --- a/Utilities/GenerateDocs/docker/run.sh +++ b/Utilities/GenerateDocs/docker/run.sh @@ -21,6 +21,8 @@ echo " extra_args: " ${extra_args} DOCKER_TAG=simpleitk_doxygen +SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG:-v1.2.0} + docker build --pull=true --rm=true -t ${DOCKER_TAG} -f Dockerfile . -docker run --rm -t -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) $extra_args -v $(pwd):/work/io ${DOCKER_TAG} +docker run --rm -t -e SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG} -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) $extra_args -v $(pwd):/work/io ${DOCKER_TAG} From 27ceb159f38240834132d65b6558c2629723ca68 Mon Sep 17 00:00:00 2001 From: Richard Beare Date: Fri, 11 Jan 2019 15:35:14 +1100 Subject: [PATCH 044/400] Fix R documentation generation - corrected escaping. Percent signs were not being escaped. Rd is a latex flavour and percent signs are comments. Quotes were being escaped and shouldn't be. This patch escapes percent signs are removes escapes from quotes. --- Utilities/GenerateDocs/doxy2swig.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Utilities/GenerateDocs/doxy2swig.py b/Utilities/GenerateDocs/doxy2swig.py index ab37f50e9..b82434e5e 100755 --- a/Utilities/GenerateDocs/doxy2swig.py +++ b/Utilities/GenerateDocs/doxy2swig.py @@ -468,6 +468,24 @@ def __init__(self, src, javaFlag=0): self.mathstuff6 = re.compile(r"\\f\$(.+?)\\f\$") # alignment tags self.mathstuff7 = re.compile(r" & ") + # Rd related issues - %, \" etc + self.Rdpercent = re.compile("%") + self.escapedquote=re.compile(r'\\"') + + def rdescape(self, value): + """escape percent signs in Rd files""" + v1=self.Rdpercent.sub(r"\%", value) + v1=self.escapedquote.sub(r'"', v1) + return(v1) + + def add_text(self, value): + """Adds text corresponding to `value` into `self.pieces`.""" + if type(value) in (list, tuple): + value=[self.rdescape(x) for x in value] + self.pieces.extend(value) + else: + value=self.rdescape(value) + self.pieces.append(value) def filterLatexMath(self, txt): """ From 0b883e5f27164cc0ac63404bea168ec7a6d31d79 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 15 Jan 2019 09:52:46 -0500 Subject: [PATCH 045/400] Explicitly cast the mask file input to the required Uint8 image type --- Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R | 2 +- Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R b/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R index e945fe668..2b2d11924 100644 --- a/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R +++ b/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R @@ -32,7 +32,7 @@ if (length(args) < 2) { inputImage <- ReadImage(args[[1]]) if (length( args ) > 4) { - maskImage <- ReadImage( args[[4]] ) + maskImage <- ReadImage( args[[4]], 'sitkUint8' ) } else { maskImage <- OtsuThreshold( inputImage, 0, 1, 200 ) } diff --git a/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py b/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py index f55c049c0..dd51c4df8 100755 --- a/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py +++ b/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py @@ -33,7 +33,7 @@ inputImage = sitk.ReadImage( sys.argv[1] ) if len ( sys.argv ) > 4: - maskImage = sitk.ReadImage( sys.argv[4] ) + maskImage = sitk.ReadImage( sys.argv[4], sitk.sitkUint8 ) else: maskImage = sitk.OtsuThreshold( inputImage, 0, 1, 200 ) From 331a127876ac2fa28ba19b7698e7df1ad483bd00 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 15 Jan 2019 15:37:14 -0500 Subject: [PATCH 046/400] Add documentation for the N4 bias field example --- Documentation/docs/source/conventions.rst | 1 + .../N4BiasFieldCorrection/Documentation.rst | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/Documentation/docs/source/conventions.rst b/Documentation/docs/source/conventions.rst index be1129421..c9cbe0b42 100644 --- a/Documentation/docs/source/conventions.rst +++ b/Documentation/docs/source/conventions.rst @@ -17,6 +17,7 @@ Image Access `Image `_ access is in x,y,z order, ``GetPixel(x,y,z)`` or ``image[x,y,z]``, with zero based indexing. +.. _lbl_conventions_mask_image: Mask Image Types and Default Values ................................... diff --git a/Examples/N4BiasFieldCorrection/Documentation.rst b/Examples/N4BiasFieldCorrection/Documentation.rst index 27b023dce..1131b4f6b 100644 --- a/Examples/N4BiasFieldCorrection/Documentation.rst +++ b/Examples/N4BiasFieldCorrection/Documentation.rst @@ -5,6 +5,37 @@ N4 Bias Field Correction Overview -------- +The N4 bias field correction algorithm is a popular method for +correcting low frequency intensity non-uniformity present in MRI image +data known as a bias or gain field. The method has also been +successfully applied as flat-field correction in microscopy data. This +method assumes a simple parametric model and does not require tissue +classification. + +This example demonstrates how to use the SimpleITK +`N4BiasFieldCorrectionImageFilter +`_ +class. This filter has one required input image which is affected by a +bias field we wish to correct. The primary input is required to have a +"real" pixel type of either `sitkFloat32` or +`sitkFloat64`. Additionally, there is an optional "MaskImage" input +which specifies which pixels are used to estimate the bias-field and +suppress pixels close to zero. It is recommended that the mask image +follows the common conventions for :ref:`masked images +`, which is being of pixel type +`sitkUint8` and having values of 0 and 1 representing the +mask. Additionally, the mask image and the main input image must +occupy the same physical space to ensure pixel to pixel +correspondence. + +Some basic parameters for using this algorithm are parsed from the +command line in this example. The shrink factor is used to reduce the +size and complexity of the image. The N4 algorithm uses a multi-scale +optimization approach to compute the bias field. The +**SetMaximumNumberOfIterations** method takes an array used to set +the limit of iterations per resolution level, thereby setting both the +iterations and the number of scales ( from the length of the array +). The output of the filter is the bias corrected input image. Code ---- From f4f5aa88842e802807295beabbed37f340477826 Mon Sep 17 00:00:00 2001 From: Alessandro Gentilini Date: Sun, 20 Jan 2019 16:18:53 +0100 Subject: [PATCH 047/400] Fix typo. --- Documentation/docs/source/faq.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/docs/source/faq.rst b/Documentation/docs/source/faq.rst index 12ebf4637..5e8c72f96 100644 --- a/Documentation/docs/source/faq.rst +++ b/Documentation/docs/source/faq.rst @@ -54,7 +54,7 @@ How do I read a RAW image into SimpleITK? ----------------------------------------- In general raw image files are missing information. They do not contain -the nessesary header information to describe the basic size and type for +the necessary header information to describe the basic size and type for the data, so this format is intrinsically deficient. The `RawImageIO `__ class is not available in SimpleITK so there is no direct way to From 74f2c0c1618e743af549bc05ce998f0a09635ec6 Mon Sep 17 00:00:00 2001 From: Richard Beare Date: Fri, 11 Jan 2019 10:09:14 +1100 Subject: [PATCH 048/400] configuration file for python/java/r package docs --- Utilities/GenerateDocs/docker/config_vars.sh | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100755 Utilities/GenerateDocs/docker/config_vars.sh diff --git a/Utilities/GenerateDocs/docker/config_vars.sh b/Utilities/GenerateDocs/docker/config_vars.sh new file mode 100755 index 000000000..7ae23e759 --- /dev/null +++ b/Utilities/GenerateDocs/docker/config_vars.sh @@ -0,0 +1,9 @@ +#! /bin/sh + +SIMPLEITK="/tmp/SimpleITK" + +ITK_XML="${HOME}/temp/xml" + +SITK_BUILD_DIR="/tmp/bld/SimpleITK-build" + +PYTHON_EXECUTABLE="python" From 34337819be5bc2a01dd22128331e924a9c371526 Mon Sep 17 00:00:00 2001 From: Richard Beare Date: Fri, 11 Jan 2019 10:10:31 +1100 Subject: [PATCH 049/400] Extended docker config to support build of python/java/R package docs --- Utilities/GenerateDocs/README | 27 ++++++++++++++++++++++++ Utilities/GenerateDocs/docker/Dockerfile | 3 ++- Utilities/GenerateDocs/docker/cmd.sh | 27 +++++++++++++++++++++++- Utilities/GenerateDocs/docker/run.sh | 14 ++++++------ 4 files changed, 62 insertions(+), 9 deletions(-) diff --git a/Utilities/GenerateDocs/README b/Utilities/GenerateDocs/README index e62c24a84..cf54a22f1 100644 --- a/Utilities/GenerateDocs/README +++ b/Utilities/GenerateDocs/README @@ -15,6 +15,33 @@ the SwigDocUpdate.sh script can be run to convert the SimpleITK Doxygen XML into Swig .i files so that when SimpleITK is built, inline documenation for some wrapped languages will be available. +Building documentation with docker + A docker configuration is available in the docker subdirectory. + It contains a Dockerfile and run scripts to build the documentation. + Results are saved in the docker folder. The process is executed from + the docker folder using a command like: + + SIMPLEITK_GIT_TAG=v1.2.0 ./run.sh + + or to use another git repo: + + SIMPLEITK_GIT_TAG=MyTestBranch SIMPLEITK_GIT_REPO=https://github.com/username/SimpleITK.git ./run.sh + + Testing changes to the documentation scripts can use the docker framework as follows: + 1) Execute run.sh to create the appropriate container. + 2) Enter the docker via the bash entry point, with environment variables specifying the appropriate repo and branch: + + docker run -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) \ + -e SIMPLEITK_GIT_TAG=v1.2.0 -e SIMPLEITK_GIT_REPO=https://github.com/username/SimpleITK.git \ + -v $(pwd):/work/io -ti --entrypoint /bin/bash simpleitk_doxygen + + The bash entrypoint will place you in the /tmp directory. Run the documentation process using: + + /work/bin/cmd.sh + + This will check out SimpleITK and build the documents. You can change the documentation scripts for testing within the + checked out copies. + Building the documentation target from the SuperBuild framework requires: The correct cmake flags: -DBUILD_DOXYGEN:BOOL=ON Run "make SimpleITK-doc" after a SuperBuild config, or "make Documentation" diff --git a/Utilities/GenerateDocs/docker/Dockerfile b/Utilities/GenerateDocs/docker/Dockerfile index 394fad929..f3e788930 100644 --- a/Utilities/GenerateDocs/docker/Dockerfile +++ b/Utilities/GenerateDocs/docker/Dockerfile @@ -1,11 +1,12 @@ FROM ubuntu:18.04 RUN apt-get update && \ - DEBIAN_FRONTEND=noninteractive apt-get install -y cmake cmake-curses-gui gcc g++ git python python-dev doxygen ninja-build gnuplot wget texlive-full + DEBIAN_FRONTEND=noninteractive apt-get install -y cmake cmake-curses-gui gcc g++ git python python-dev python-regex doxygen ninja-build gnuplot wget texlive-full WORKDIR /tmp/ COPY ./cmd.sh /work/bin/ COPY ./entrypoint.sh /work/bin/ +COPY ./config_vars.sh /work/bin/ RUN chmod o+rx /work/bin/*.sh diff --git a/Utilities/GenerateDocs/docker/cmd.sh b/Utilities/GenerateDocs/docker/cmd.sh index 56c09b28e..c2b4e0ac5 100755 --- a/Utilities/GenerateDocs/docker/cmd.sh +++ b/Utilities/GenerateDocs/docker/cmd.sh @@ -5,8 +5,11 @@ set -eux OUT_DIR=/work/io SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG:-v1.1rc1} +SIMPLEITK_GIT_REPO=${SIMPLEITK_GIT_REPO:-https://github.com/SimpleITK/SimpleITK.git} -git clone https://github.com/SimpleITK/SimpleITK.git && ( cd SimpleITK && git checkout ${SIMPLEITK_GIT_TAG} ) +git clone ${SIMPLEITK_GIT_REPO} && ( cd SimpleITK && git checkout ${SIMPLEITK_GIT_TAG} ) + +here=$(pwd) mkdir bld && cd bld @@ -20,4 +23,26 @@ cmake \ ninja SimpleITK-doc cd SimpleITK-build/Documentation/ + tar -zcvf ${OUT_DIR}/simpleitk_doxygen_html_${SIMPLEITK_GIT_TAG}.tar.gz html + +cd ${here} + +if [ ! -e bld/SimpleITK-build/Documentation/xml/sitkImage_8h.xml ] +then + echo "SimpleITK documentation target hasn't been built" + exit 1 +fi + + +rm -f ${here}/SimpleITK/Wrapping/R/Packaging/SimpleITK/man/*.Rd + +cd ${here}/SimpleITK/Utilities/GenerateDocs/ +cp /work/bin/config_vars.sh . +./SwigDocUpdate.sh + +cp ${here}/SimpleITK/Wrapping/Python/PythonDocstrings.i ${OUT_DIR}/ +cp ${here}/SimpleITK/Wrapping/Java/JavaDoc.i ${OUT_DIR} + +cd ${here}/SimpleITK/Wrapping/R/Packaging/SimpleITK/man +tar -zcvf ${OUT_DIR}/sitkRdfiles_${SIMPLEITK_GIT_TAG}.tar.gz *.Rd diff --git a/Utilities/GenerateDocs/docker/run.sh b/Utilities/GenerateDocs/docker/run.sh index bcc420e0c..7d3b331e7 100755 --- a/Utilities/GenerateDocs/docker/run.sh +++ b/Utilities/GenerateDocs/docker/run.sh @@ -3,7 +3,9 @@ # # Genrates a SimpleITK Doxygen tarball for a tag # -# Example usage: $ SIMPLEITK_GIT_TAG=v1.2.0 run.sh +# Example usage: $ SIMPLEITK_GIT_TAG=v1.2.0 ./run.sh +# +# Example usage: $SIMPLEITK_GIT_TAG=v1.2.0 SIMPLEITK_GIT_REPO=https://github.com/SimpleITK/SimpleITK.git ./run.sh # # This script build build a docker image, then run the SimpleITK build step inorder to generate the Doxygen. By mounting the current directory onto the container a Doxygen tar-ball will be produced. @@ -12,17 +14,15 @@ if [ -n "$ExternalData_OBJECT_STORES" -a -d "$ExternalData_OBJECT_STORES" ] ; th extra_args="-v ${ExternalData_OBJECT_STORES}:/var/io/.ExternalData -e ExternalData_OBJECT_STORES=/var/io/.ExternalData" fi -if [ ! -z "${SIMPLEITK_GIT_TAG}" ] ; then - extra_args="${extra_args} -e SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG}" -fi - - echo " extra_args: " ${extra_args} DOCKER_TAG=simpleitk_doxygen SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG:-v1.2.0} +SIMPLEITK_GIT_REPO=${SIMPLEITK_GIT_REPO:-https://github.com/SimpleITK/SimpleITK.git} + +docker_args="-e SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG} -e SIMPLEITK_GIT_REPO=${SIMPLEITK_GIT_REPO} -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g)" docker build --pull=true --rm=true -t ${DOCKER_TAG} -f Dockerfile . -docker run --rm -t -e SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG} -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) $extra_args -v $(pwd):/work/io ${DOCKER_TAG} +docker run --rm -t $docker_args $extra_args -v $(pwd):/work/io ${DOCKER_TAG} From 8603b560228d6f3f030afbb835f326f13e19173d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 28 Jan 2019 17:02:07 -0500 Subject: [PATCH 050/400] Allow for tolerance comparison of BSpline domain origin In ITKv5 with the commit 794c82d16ebc4b4035f37e0675176e7677f9bd68, the consistency of the parameters has been fix but there is a little variability with some of the transform domain values derived from the parameters. This patch adds tolerance to certain test of derived transform domain values as needed. --- Testing/Unit/sitkTransformTests.cxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Testing/Unit/sitkTransformTests.cxx b/Testing/Unit/sitkTransformTests.cxx index 24b005a39..ea7da36c0 100644 --- a/Testing/Unit/sitkTransformTests.cxx +++ b/Testing/Unit/sitkTransformTests.cxx @@ -776,7 +776,7 @@ TEST(TransformTest,BSplineTransform) tx.reset(new sitk::BSplineTransform(2)); EXPECT_EQ( tx->SetTransformDomainDirection(v4(-1.0,0.0,0.0,-1.0)).GetTransformDomainDirection(), v4(-1.0,0.0,0.0,-1.0) ); - EXPECT_EQ( tx->SetTransformDomainOrigin( v2(1.1,1.2) ).GetTransformDomainOrigin(), v2(1.1,1.2) ); + EXPECT_VECTOR_DOUBLE_NEAR( tx->SetTransformDomainOrigin( v2(1.1,1.2) ).GetTransformDomainOrigin(), v2(1.1,1.2), 1e-15 ); // copy constructor sitk::BSplineTransform tx1( *(tx.get()) ); @@ -786,7 +786,7 @@ TEST(TransformTest,BSplineTransform) EXPECT_EQ( tx1.GetNumberOfFixedParameters(), 10u ); EXPECT_EQ( tx1.GetTransformDomainDirection(), v4(-1.0,0.0,0.0,-1.0) ); EXPECT_EQ( tx1.GetTransformDomainMeshSize(), std::vector(2,1u) ); - EXPECT_EQ( tx1.GetTransformDomainOrigin(), v2(1.1,1.2) ); + EXPECT_VECTOR_DOUBLE_NEAR( tx1.GetTransformDomainOrigin(), v2(1.1,1.2), 1e-15); EXPECT_EQ( tx1.GetTransformDomainPhysicalDimensions(), v2(1.0,1.0) ); sitk::BSplineTransform tx2(2); @@ -805,8 +805,8 @@ TEST(TransformTest,BSplineTransform) // copy on write tx1.SetTransformDomainOrigin( v2(1.3,1.4) ); - EXPECT_EQ( tx1.GetTransformDomainOrigin(), v2(1.3,1.4) ); - EXPECT_EQ( tx2.GetTransformDomainOrigin(), v2(2.3,2.4) ); + EXPECT_VECTOR_DOUBLE_NEAR( tx1.GetTransformDomainOrigin(), v2(1.3,1.4), 1e-15); + EXPECT_VECTOR_DOUBLE_NEAR( tx2.GetTransformDomainOrigin(), v2(2.3,2.4), 1e-15); EXPECT_EQ( tx1.GetNumberOfFixedParameters(), tx2.GetNumberOfFixedParameters() ); EXPECT_EQ( tx1.GetTransformDomainDirection(), tx2.GetTransformDomainDirection() ); @@ -934,7 +934,7 @@ TEST(TransformTest,BSplineTransform_coefficientImages) EXPECT_EQ( tx.GetNumberOfFixedParameters(), 10u ); EXPECT_EQ( tx.GetTransformDomainDirection(), v4(1.0,0.0,0.0,1.0) ); EXPECT_EQ( tx.GetTransformDomainMeshSize(), std::vector(2,7u) ); - EXPECT_EQ( tx.GetTransformDomainOrigin(), v2(3.0,3.0) ); + EXPECT_VECTOR_DOUBLE_NEAR( tx.GetTransformDomainOrigin(), v2(3.0,3.0), 1e-15 ); EXPECT_EQ( tx.GetTransformDomainPhysicalDimensions(), v2(21.0,21.0) ); std::vector originalParams = tx.GetParameters(); From 441c950576663e6b0b070cfde5cf16e40cf0872f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 29 Jan 2019 12:58:05 -0500 Subject: [PATCH 051/400] Update the copyright date in the ReadTheDocs documentation --- conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf.py b/conf.py index ad6999860..99fadd3f0 100644 --- a/conf.py +++ b/conf.py @@ -52,7 +52,7 @@ # General information about the project. project = u'SimpleITK' -copyright = u'2017, Insight Software Consortium' +copyright = u'2019, Insight Software Consortium' author = u'Insight Software Consortium' # TODO: Get proper version from CMake From 8f01a7dfddd0cbcd492bb91dfecb8eaf9fc922ba Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 31 Jan 2019 16:15:40 -0500 Subject: [PATCH 052/400] Add user Applications to show search path When a user on Mac OSX does not have admin privileges, the Fiji.app should be placed in ~/Applications. Search for this too. --- Code/IO/src/sitkImageViewer.cxx | 6 ++++++ Code/IO/src/sitkShow.cxx | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/Code/IO/src/sitkImageViewer.cxx b/Code/IO/src/sitkImageViewer.cxx index e00156bc5..b591710dd 100644 --- a/Code/IO/src/sitkImageViewer.cxx +++ b/Code/IO/src/sitkImageViewer.cxx @@ -174,6 +174,12 @@ void ImageViewer::initializeDefaults() m_GlobalDefaultSearchPath.push_back( "/Developer/" ); m_GlobalDefaultSearchPath.push_back( "/opt/" ); m_GlobalDefaultSearchPath.push_back( "/usr/local/" ); + std::string homedir; + if ( itksys::SystemTools::GetEnv ( "HOME", homedir ) ) + { + m_GlobalDefaultSearchPath.push_back( homedir + "/Applications/" ); + } + #else diff --git a/Code/IO/src/sitkShow.cxx b/Code/IO/src/sitkShow.cxx index 8f34d1aa0..8d8c808cd 100644 --- a/Code/IO/src/sitkShow.cxx +++ b/Code/IO/src/sitkShow.cxx @@ -411,6 +411,12 @@ namespace itk paths.push_back( "/Developer" ); paths.push_back( "/opt/" + directory ); paths.push_back( "/usr/local/" + directory ); + std::string homedir; + if ( itksys::SystemTools::GetEnv ( "HOME", homedir ) ) + { + paths.push_back( homedir + "/Applications/" + directory ); + } + ExecutableName = itksys::SystemTools::FindDirectory( name.c_str(), paths ); From 80a9015d1cb75037f077557b67f540a97d79070a Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 6 Feb 2019 12:57:31 -0500 Subject: [PATCH 053/400] Update CMake version to use 13.3 --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8750fe02e..7173bd6e1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -25,7 +25,7 @@ referenced: sudo apt-get install -y rsync lua5.1 ccache kwstyle sudo python -m pip install --upgrade pip sudo python -m pip install scikit-ci-addons # Provides "ctest_junit_formatter" add-on - sudo python -m pip install cmake==3.10.3 + sudo python -m pip install cmake==3.13.3 generate-hash-step: &generate-hash-step run: name: Generate external data hash From 4f0794b078c71cde90610988a49570cccf0f0c5c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 4 Feb 2019 10:34:19 -0500 Subject: [PATCH 054/400] Set up CI with Azure Pipelines --- Testing/Unit/CMakeLists.txt | 2 +- azure-pipelines.yml | 120 ++++++++++++++++++++++++++++++++++++ azure.cmake | 101 ++++++++++++++++++++++++++++++ 3 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 azure-pipelines.yml create mode 100644 azure.cmake diff --git a/Testing/Unit/CMakeLists.txt b/Testing/Unit/CMakeLists.txt index 99bd6d62a..c2819804c 100644 --- a/Testing/Unit/CMakeLists.txt +++ b/Testing/Unit/CMakeLists.txt @@ -265,7 +265,7 @@ target_compile_options( sitkSystemInformationTest # CMake 3.10 added this method, to avoid configure time introspection if(NOT CMAKE_CROSSCOMPILING) - gtest_discover_tests( SimpleITKUnitTestDriver0 DISCOVERY_TIMEOUT 15 ) + gtest_discover_tests( SimpleITKUnitTestDriver0 DISCOVERY_TIMEOUT 60 ) else() gtest_add_tests(SimpleITKUnitTestDriver0 "" ${SimpleITKUnitTestSource}) endif() diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 000000000..6337ed13e --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,120 @@ +# Starter pipeline +# Start with a minimal pipeline that you can customize to build and deploy your code. +# Add steps that build, run tests, deploy, and more: +# https://aka.ms/yaml + +trigger: + - master + - next + - release +jobs: + - job: Linux + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'Ubuntu-16.04' + + steps: + - checkout: self + clean: true + fetchDepth: 5 + - bash: | + set -x + if [ -n "$(System.PullRequest.SourceCommitId)" ]; then + git checkout $(System.PullRequest.SourceCommitId) + fi + - bash: | + set -x + git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + displayName: Download dashboard scripts + workingDirectory: $(Agent.BuildDirectory) + - script: sudo python -m pip install ninja + displayName: 'Install ninja dependency' + - bash: | + set -x + c++ --version + cmake --version + ninja --version + ctest -S ${BUILD_SOURCESDIRECTORY}/azure.cmake -V -j 4 + displayName: Build and test + env: + CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + workingDirectory: $(Agent.BuildDirectory) + - job: macOS + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'macOS-10.13' + + steps: + - checkout: self + clean: true + fetchDepth: 5 + - bash: | + set -x + if [ -n "$(System.PullRequest.SourceCommitId)" ]; then + git checkout $(System.PullRequest.SourceCommitId) + fi + - bash: | + set -x + git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + displayName: Download dashboard scripts + workingDirectory: $(Agent.BuildDirectory) + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + addToPath: true + - script: sudo python -m pip install ninja + displayName: 'Install ninja dependency' + - bash: | + set -x + c++ --version + cmake --version + ninja --version + ctest -S ${BUILD_SOURCESDIRECTORY}/azure.cmake -V -j 4 + displayName: Build and test + env: + CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + workingDirectory: $(Agent.BuildDirectory) + + - job: Windows + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'vs2017-win2016' + + steps: + - checkout: self + clean: true + fetchDepth: 5 + - script: | + if DEFINED SYSTEM_PULLREQUEST_SOURCECOMMITID git checkout $(System.PullRequest.SourceCommitId) + displayName: Checkout pull request HEAD + - bash: | + set -x + git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + displayName: Download dashboard scripts + workingDirectory: $(Agent.BuildDirectory) + - script: python -m pip install ninja + displayName: 'Install ninja dependency' + - bash: | + set -x + cmake --version + ninja --version + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat" + ctest -S ${BUILD_SOURCESDIRECTORY}/azure.cmake -V -j 4 + displayName: Build and test + env: + CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + workingDirectory: $(Agent.BuildDirectory) diff --git a/azure.cmake b/azure.cmake new file mode 100644 index 000000000..6eeeb3795 --- /dev/null +++ b/azure.cmake @@ -0,0 +1,101 @@ + +# set_from_env +# ------------ +# +# Sets a CMake variable from an environment variable. If the +# environment variable is not defined then either a fatal error is +# generated or the CMake variable is not modified. +# +# set_from_env( [REQUIRED|DEFAULT value] ) +function(set_from_env var env_var) + if(NOT DEFINED ENV{${env_var}}) + if (ARGV2 STREQUAL "REQUIRED") + message(FATAL_ERROR "Required environment variable \"${env_var}\" not defined.") + elseif (ARGV2 STREQUAL "DEFAULT") + set(${var} ${ARGV3} PARENT_SCOPE) + endif() + else() + set(${var} $ENV{${env_var}} PARENT_SCOPE) + endif() +endfunction() + +set_from_env(CTEST_SITE "AGENT_MACHINENAME" REQUIRED) +set(CTEST_SITE "Azure.${CTEST_SITE}") +set(CTEST_UPDATE_VERSION_ONLY 1) + +set_from_env(PARALLEL_LEVEL "PARALLEL_LEVEL" DEFAULT 2 ) +set( CTEST_TEST_ARGS ${CTEST_TEST_ARGS} PARALLEL_LEVEL ${PARALLEL_LEVEL}) +set_from_env(workspace "AGENT_BUILDDIRECTORY" REQUIRED) +file(TO_CMAKE_PATH "${workspace}" CTEST_DASHBOARD_ROOT) +file(RELATIVE_PATH dashboard_source_name "${workspace}" "$ENV{BUILD_SOURCESDIRECTORY}") + +# Make environment variables to CMake variables for CTest +set_from_env(CTEST_CMAKE_GENERATOR "CTEST_CMAKE_GENERATOR" DEFAULT "Ninja" ) +set_from_env(CTEST_CONFIGURATION_TYPE "CTEST_CONFIGURATION_TYPE" DEFAULT "Release") +set_from_env(CTEST_SOURCE_DIRECTORY "BUILD_SOURCESDIRECTORY" REQUIRED) +#set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY") +#set_from_env(CTEST_BUILD_FLAGS "CTEST_BUILD_FLAGS") +set_from_env(CTEST_BUILD_TARGET "CTEST_BUILD_TARGET") +set_from_env(CTEST_TEST_ARGS "CTEST_TEST_ARGS") + + +set_from_env(DASHBOARD_BRANCH_DIRECTORY "DASHBOARD_BRANCH_DIRECTORY" REQUIRED) + +# Construct build name based on what is being built +set(dashboard_loop 0) + + + +if(NOT CTEST_BUILD_NAME) + if(DEFINED ENV{SYSTEM_PULLREQUEST_SOURCEBRANCH}) + set(branch "-$ENV{SYSTEM_PULLREQUEST_SOURCEBRANCH}") + set(dashboard_model "Experimental") + elseif(ENV{BUILD_SOURCEBRANCHNAME} STREQUAL "master") + set(branch "-master") + set(dashboard_model "Continuous") + else() + set(branch "-$ENV{BUILD_SOURCEBRANCHNAME}") + set(dashboard_model "Experimental") + endif() + + if(DEFINED ENV{SYSTEM_PULLREQUEST_PULLREQUESTNUMBER}) + set(pr "-PR$ENV{SYSTEM_PULLREQUEST_PULLREQUESTNUMBER}") + else() + set(pr "") + endif() + + set(CTEST_BUILD_NAME + "$ENV{AGENT_OS}-Build$ENV{BUILD_BUILDID}${pr}${branch}${wrapping}") +endif() + +if ( EXISTS "${CTEST_SOURCE_DIRECTORY}/azure.yml") + list(APPEND CTEST_NOTES_FILES + "${CTEST_SOURCE_DIRECTORY}/azure.yml" + ) +endif() + + + +SET (_dashboard_cache " + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=OFF + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + CMAKE_JOB_POOLS:STRING=link=1 + CMAKE_JOB_POOL_LINK:STRING=link + SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF + + WRAP_DEFAULT:BOOL=OFF +" ) + +set_from_env(dashboard_cache "CTEST_CACHE" DEFAULT ${_dashboard_cache}) + +endif() + + + + +string(TIMESTAMP build_date "%Y-%m-%d") +message("CDash Build Identifier: ${build_date} ${CTEST_BUILD_NAME}") + +include("${DASHBOARD_BRANCH_DIRECTORY}/simpleitk_common.cmake") From e98880a2ba3a5b77fba94d3992bc405d61a22bd9 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 8 Feb 2019 10:23:55 -0500 Subject: [PATCH 055/400] Do not limit number of link jobs on Azure --- azure.cmake | 2 -- 1 file changed, 2 deletions(-) diff --git a/azure.cmake b/azure.cmake index 6eeeb3795..1a926f21c 100644 --- a/azure.cmake +++ b/azure.cmake @@ -81,8 +81,6 @@ SET (_dashboard_cache " BUILD_EXAMPLES:BOOL=OFF BUILD_SHARED_LIBS:BOOL=OFF BUILD_TESTING:BOOL=ON - CMAKE_JOB_POOLS:STRING=link=1 - CMAKE_JOB_POOL_LINK:STRING=link SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF WRAP_DEFAULT:BOOL=OFF From 3bc5b59cf2faf8051972700053fb7882e433727d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 7 Feb 2019 17:34:24 -0500 Subject: [PATCH 056/400] Download the last release testing data tar-ball on azure This is a faster way to download the data. --- azure-pipelines.yml | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 6337ed13e..5c2ba2bb5 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -7,6 +7,8 @@ trigger: - master - next - release +variables: + ExternalDataVersion: 1.2.0 jobs: - job: Linux timeoutInMinutes: 0 @@ -26,7 +28,11 @@ jobs: - bash: | set -x git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - displayName: Download dashboard scripts + + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 + displayName: Download dashboard scripts and testing data workingDirectory: $(Agent.BuildDirectory) - script: sudo python -m pip install ninja displayName: 'Install ninja dependency' @@ -61,7 +67,11 @@ jobs: - bash: | set -x git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - displayName: Download dashboard scripts + + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 + displayName: Download dashboard scripts and testing data workingDirectory: $(Agent.BuildDirectory) - task: UsePythonVersion@0 displayName: Enable Python @@ -101,7 +111,11 @@ jobs: - bash: | set -x git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - displayName: Download dashboard scripts + + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename "SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5" "$(Build.SourcesDirectory)/.ExternalData/MD5" + displayName: Download dashboard scripts and testing data workingDirectory: $(Agent.BuildDirectory) - script: python -m pip install ninja displayName: 'Install ninja dependency' From d0cf1fe21f16350dcf69e4f9daf085e46d0bc4ba Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 8 Feb 2019 12:00:47 -0500 Subject: [PATCH 057/400] Use VisualStudio CMake generator --- azure-pipelines.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 5c2ba2bb5..2e5ae9076 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -119,16 +119,16 @@ jobs: workingDirectory: $(Agent.BuildDirectory) - script: python -m pip install ninja displayName: 'Install ninja dependency' - - bash: | - set -x + - script: | cmake --version - ninja --version - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat" - ctest -S ${BUILD_SOURCESDIRECTORY}/azure.cmake -V -j 4 + ctest -S "$(Build.SourcesDirectory)/azure.cmake" -V -j 4 displayName: Build and test env: CTEST_BUILD_CONFIGURATION: MinSizeRel CTEST_OUTPUT_ON_FALURE: 1 + CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017 Win64" DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CXXFLAGS: /MP + CFLAGS: /MP workingDirectory: $(Agent.BuildDirectory) From 8a1e934a46da3cee2a44e6b0d1665d76888be560 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 8 Feb 2019 12:25:15 -0500 Subject: [PATCH 058/400] Fix ExternalData Path to in source location --- CMake/sitkExternalData.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMake/sitkExternalData.cmake b/CMake/sitkExternalData.cmake index 896792abf..8fba2b77f 100644 --- a/CMake/sitkExternalData.cmake +++ b/CMake/sitkExternalData.cmake @@ -19,7 +19,7 @@ if(NOT ExternalData_OBJECT_STORES) endif() list(APPEND ExternalData_OBJECT_STORES # Local data store populated by the ITK pre-commit hook - "${SimpleITK_SOURCE_DIR}/../.ExternalData" + "${SimpleITK_SOURCE_DIR}/.ExternalData" ) set(ExternalData_BINARY_ROOT ${CMAKE_BINARY_DIR}/ExternalData) From 439a5bba367f52884a5ccfda3f5b4f612750725e Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 11 Feb 2019 11:39:40 -0500 Subject: [PATCH 059/400] Move Azure Pipes configuration to sub-directory --- azure-pipelines.yml | 134 -------------------------------------------- azure.cmake | 99 -------------------------------- 2 files changed, 233 deletions(-) delete mode 100644 azure-pipelines.yml delete mode 100644 azure.cmake diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index 2e5ae9076..000000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,134 +0,0 @@ -# Starter pipeline -# Start with a minimal pipeline that you can customize to build and deploy your code. -# Add steps that build, run tests, deploy, and more: -# https://aka.ms/yaml - -trigger: - - master - - next - - release -variables: - ExternalDataVersion: 1.2.0 -jobs: - - job: Linux - timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 - pool: - vmImage: 'Ubuntu-16.04' - - steps: - - checkout: self - clean: true - fetchDepth: 5 - - bash: | - set -x - if [ -n "$(System.PullRequest.SourceCommitId)" ]; then - git checkout $(System.PullRequest.SourceCommitId) - fi - - bash: | - set -x - git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - - curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 - displayName: Download dashboard scripts and testing data - workingDirectory: $(Agent.BuildDirectory) - - script: sudo python -m pip install ninja - displayName: 'Install ninja dependency' - - bash: | - set -x - c++ --version - cmake --version - ninja --version - ctest -S ${BUILD_SOURCESDIRECTORY}/azure.cmake -V -j 4 - displayName: Build and test - env: - CTEST_BUILD_CONFIGURATION: MinSizeRel - CTEST_OUTPUT_ON_FALURE: 1 - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - workingDirectory: $(Agent.BuildDirectory) - - job: macOS - timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 - pool: - vmImage: 'macOS-10.13' - - steps: - - checkout: self - clean: true - fetchDepth: 5 - - bash: | - set -x - if [ -n "$(System.PullRequest.SourceCommitId)" ]; then - git checkout $(System.PullRequest.SourceCommitId) - fi - - bash: | - set -x - git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - - curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 - displayName: Download dashboard scripts and testing data - workingDirectory: $(Agent.BuildDirectory) - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.6' - architecture: 'x64' - addToPath: true - - script: sudo python -m pip install ninja - displayName: 'Install ninja dependency' - - bash: | - set -x - c++ --version - cmake --version - ninja --version - ctest -S ${BUILD_SOURCESDIRECTORY}/azure.cmake -V -j 4 - displayName: Build and test - env: - CTEST_BUILD_CONFIGURATION: MinSizeRel - CTEST_OUTPUT_ON_FALURE: 1 - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - workingDirectory: $(Agent.BuildDirectory) - - - job: Windows - timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 - pool: - vmImage: 'vs2017-win2016' - - steps: - - checkout: self - clean: true - fetchDepth: 5 - - script: | - if DEFINED SYSTEM_PULLREQUEST_SOURCECOMMITID git checkout $(System.PullRequest.SourceCommitId) - displayName: Checkout pull request HEAD - - bash: | - set -x - git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - - curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E rename "SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5" "$(Build.SourcesDirectory)/.ExternalData/MD5" - displayName: Download dashboard scripts and testing data - workingDirectory: $(Agent.BuildDirectory) - - script: python -m pip install ninja - displayName: 'Install ninja dependency' - - script: | - cmake --version - ctest -S "$(Build.SourcesDirectory)/azure.cmake" -V -j 4 - displayName: Build and test - env: - CTEST_BUILD_CONFIGURATION: MinSizeRel - CTEST_OUTPUT_ON_FALURE: 1 - CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017 Win64" - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - CXXFLAGS: /MP - CFLAGS: /MP - workingDirectory: $(Agent.BuildDirectory) diff --git a/azure.cmake b/azure.cmake deleted file mode 100644 index 1a926f21c..000000000 --- a/azure.cmake +++ /dev/null @@ -1,99 +0,0 @@ - -# set_from_env -# ------------ -# -# Sets a CMake variable from an environment variable. If the -# environment variable is not defined then either a fatal error is -# generated or the CMake variable is not modified. -# -# set_from_env( [REQUIRED|DEFAULT value] ) -function(set_from_env var env_var) - if(NOT DEFINED ENV{${env_var}}) - if (ARGV2 STREQUAL "REQUIRED") - message(FATAL_ERROR "Required environment variable \"${env_var}\" not defined.") - elseif (ARGV2 STREQUAL "DEFAULT") - set(${var} ${ARGV3} PARENT_SCOPE) - endif() - else() - set(${var} $ENV{${env_var}} PARENT_SCOPE) - endif() -endfunction() - -set_from_env(CTEST_SITE "AGENT_MACHINENAME" REQUIRED) -set(CTEST_SITE "Azure.${CTEST_SITE}") -set(CTEST_UPDATE_VERSION_ONLY 1) - -set_from_env(PARALLEL_LEVEL "PARALLEL_LEVEL" DEFAULT 2 ) -set( CTEST_TEST_ARGS ${CTEST_TEST_ARGS} PARALLEL_LEVEL ${PARALLEL_LEVEL}) -set_from_env(workspace "AGENT_BUILDDIRECTORY" REQUIRED) -file(TO_CMAKE_PATH "${workspace}" CTEST_DASHBOARD_ROOT) -file(RELATIVE_PATH dashboard_source_name "${workspace}" "$ENV{BUILD_SOURCESDIRECTORY}") - -# Make environment variables to CMake variables for CTest -set_from_env(CTEST_CMAKE_GENERATOR "CTEST_CMAKE_GENERATOR" DEFAULT "Ninja" ) -set_from_env(CTEST_CONFIGURATION_TYPE "CTEST_CONFIGURATION_TYPE" DEFAULT "Release") -set_from_env(CTEST_SOURCE_DIRECTORY "BUILD_SOURCESDIRECTORY" REQUIRED) -#set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY") -#set_from_env(CTEST_BUILD_FLAGS "CTEST_BUILD_FLAGS") -set_from_env(CTEST_BUILD_TARGET "CTEST_BUILD_TARGET") -set_from_env(CTEST_TEST_ARGS "CTEST_TEST_ARGS") - - -set_from_env(DASHBOARD_BRANCH_DIRECTORY "DASHBOARD_BRANCH_DIRECTORY" REQUIRED) - -# Construct build name based on what is being built -set(dashboard_loop 0) - - - -if(NOT CTEST_BUILD_NAME) - if(DEFINED ENV{SYSTEM_PULLREQUEST_SOURCEBRANCH}) - set(branch "-$ENV{SYSTEM_PULLREQUEST_SOURCEBRANCH}") - set(dashboard_model "Experimental") - elseif(ENV{BUILD_SOURCEBRANCHNAME} STREQUAL "master") - set(branch "-master") - set(dashboard_model "Continuous") - else() - set(branch "-$ENV{BUILD_SOURCEBRANCHNAME}") - set(dashboard_model "Experimental") - endif() - - if(DEFINED ENV{SYSTEM_PULLREQUEST_PULLREQUESTNUMBER}) - set(pr "-PR$ENV{SYSTEM_PULLREQUEST_PULLREQUESTNUMBER}") - else() - set(pr "") - endif() - - set(CTEST_BUILD_NAME - "$ENV{AGENT_OS}-Build$ENV{BUILD_BUILDID}${pr}${branch}${wrapping}") -endif() - -if ( EXISTS "${CTEST_SOURCE_DIRECTORY}/azure.yml") - list(APPEND CTEST_NOTES_FILES - "${CTEST_SOURCE_DIRECTORY}/azure.yml" - ) -endif() - - - -SET (_dashboard_cache " - BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=OFF - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_TESTING:BOOL=ON - SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF - - WRAP_DEFAULT:BOOL=OFF -" ) - -set_from_env(dashboard_cache "CTEST_CACHE" DEFAULT ${_dashboard_cache}) - -endif() - - - - -string(TIMESTAMP build_date "%Y-%m-%d") -message("CDash Build Identifier: ${build_date} ${CTEST_BUILD_NAME}") - -include("${DASHBOARD_BRANCH_DIRECTORY}/simpleitk_common.cmake") From fc85a34901afdfa23de96d0c30cbe5e41424491c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 11 Feb 2019 16:24:04 -0500 Subject: [PATCH 060/400] Add Azure status badges --- Readme.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Readme.md b/Readme.md index c90d7f32d..459911148 100644 --- a/Readme.md +++ b/Readme.md @@ -1,11 +1,11 @@ SimpleITK ========= -| | CircleCI | ReadTheDocs | -|:-------:|:---------:|:-------------:| -| release | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=release)](http://simpleitk.readthedocs.io/en/release/) | -| master | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=master)](http://simpleitk.readthedocs.io/en/master/) | -| next | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/next.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/next) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=next)](http://simpleitk.readthedocs.io/en/next/) | +| | CircleCI | ReadTheDocs | AzurePipelines | +|:-------:|:---------:|:-------------:|:-------------:| +| release | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=release)](http://simpleitk.readthedocs.io/en/release/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=release)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=release) | +| master | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=master)](http://simpleitk.readthedocs.io/en/master/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=release)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=release) | +| next | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/next.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/next) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=next)](http://simpleitk.readthedocs.io/en/next/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=release)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=release) | SimpleITK is an image analysis toolkit with a large number of components supporting general filtering operations, image segmentation and registration. It is built on top of the Insight Segmentation and Registration Toolkit [ITK](https://www.itk.org) with the intent of providing a simplified interface to ITK. SimpleITK itself is written in C++ but is available for a large number of programming languages. Currently these include: From c47428a17f1a35c3fe378da106983a2e42793fab Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 12 Feb 2019 16:12:53 -0500 Subject: [PATCH 061/400] Update ITK version along 4.13 release branch This patch contains numerous CMake configuration warning fixes. --- SuperBuild/External_ITK.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index 3baf38df2..c031b676d 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,8 +52,7 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(ITK_GIT_TAG "8bbd7e7ac6ee71932bfb4b00a34c70f1ac02f7e7" CACHE - STRING "Tag in ITK git repo") # release-4.13 +set(ITK_GIT_TAG "8862e36ad879b46d6cb3e8682852d78d5673accd" CACHE STRING "Tag in ITK git repo") # along release-4.13 mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From c0dda5e3086c4de7c7b01ed9be81b414e2c16188 Mon Sep 17 00:00:00 2001 From: Dave Chen Date: Mon, 25 Feb 2019 15:16:54 -0500 Subject: [PATCH 062/400] Fix for hang in Show function on Windows It was re-deleting a previously deleted process. --- Code/IO/src/sitkShow.cxx | 2 -- 1 file changed, 2 deletions(-) diff --git a/Code/IO/src/sitkShow.cxx b/Code/IO/src/sitkShow.cxx index 8d8c808cd..5df8ef28b 100644 --- a/Code/IO/src/sitkShow.cxx +++ b/Code/IO/src/sitkShow.cxx @@ -598,8 +598,6 @@ namespace itk itksysProcess_Delete( kp ); sitkExceptionMacro ( << "Unexpected process state!" << "\nCommand line: " << cmdstream.str() ); } - - itksysProcess_Delete( kp ); } void Show( const Image &image, const std::string& title, const bool debugOn) From d4a1351d29e002c7f0eb6fddce5ba2d7cd1ad534 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 26 Feb 2019 16:42:56 -0500 Subject: [PATCH 063/400] Correct continuous model detection and improve build name --- Testing/CI/Azure/azure.cmake | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Testing/CI/Azure/azure.cmake b/Testing/CI/Azure/azure.cmake index 2881d2146..6aa6f67f9 100644 --- a/Testing/CI/Azure/azure.cmake +++ b/Testing/CI/Azure/azure.cmake @@ -49,12 +49,11 @@ set_from_env(CTEST_COVERAGE_COMMAND "CTEST_COVERAGE_COMMAND") set(dashboard_loop 0) - if(NOT CTEST_BUILD_NAME) if(DEFINED ENV{SYSTEM_PULLREQUEST_SOURCEBRANCH}) set(branch "-$ENV{SYSTEM_PULLREQUEST_SOURCEBRANCH}") set(dashboard_model "Experimental") - elseif(ENV{BUILD_SOURCEBRANCHNAME} STREQUAL "master") + elseif("$ENV{BUILD_SOURCEBRANCHNAME}" STREQUAL "master") set(branch "-master") set(dashboard_model "Continuous") else() @@ -68,8 +67,7 @@ if(NOT CTEST_BUILD_NAME) set(pr "") endif() - set(CTEST_BUILD_NAME - "$ENV{AGENT_OS}-Build$ENV{BUILD_BUILDID}${pr}${branch}${wrapping}") + set(CTEST_BUILD_NAME "$ENV{AGENT_NAME}-$ENV{AGENT_JOBNAME}-$ENV{BUILD_BUILDID}${pr}${branch}") endif() if ( EXISTS "${CTEST_SOURCE_DIRECTORY}/azure.yml") From bf6f667bb5293deccf18c8c8ce99b792fd1e6fdf Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 26 Feb 2019 16:43:39 -0500 Subject: [PATCH 064/400] Adding batch build on azure for merges --- Testing/CI/Azure/azure-pipelines-batch.yml | 81 ++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 Testing/CI/Azure/azure-pipelines-batch.yml diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml new file mode 100644 index 000000000..3e858a812 --- /dev/null +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -0,0 +1,81 @@ +trigger: + batch: true + branches: + include: + - master + - release +pr: none +jobs: + - job: 'VS19' + pool: + name: 'Default' + demands: + - VisualStudio_16.0 + timeoutInMinutes: 360 + workspace: + clean: all + steps: + - script: | + git clone -b dashboard --single-branch $(Build.Repository.Uri) SimpleITK-dashboard + displayName: Download dashboard scripts and testing data + workingDirectory: $(Agent.BuildDirectory) + - script: | + env + cmake --version + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + displayName: Build and test + env: + CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + CTEST_CMAKE_GENERATOR: "Visual Studio 16 2019" + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CXXFLAGS: /MP + CFLAGS: /MP + workingDirectory: $(Agent.BuildDirectory) + - job: 'LinuxGCC' + pool: + name: 'Default' + demands: + - Agent.OS -equals Linux + strategy: + matrix: + default: {} + devtools-3: + env_file: '/opt/rh/devtoolset-3/enable' + devtools-4: + env_file: '/opt/rh/devtoolset-4/enable' + devtools-6: + env_file: '/opt/rh/devtoolset-6/enable' + devtools-7: + env_file: '/opt/rh/devtoolset-7/enable' + devtools-8: + env_file: '/opt/rh/devtoolset-8/enable' + timeoutInMinutes: 360 + workspace: + clean: all + steps: + - script: | + git clone -b dashboard --single-branch $(Build.Repository.Uri) SimpleITK-dashboard + displayName: Download dashboard scripts and testing data + workingDirectory: $(Agent.BuildDirectory) + - script: | + [[ ! -z "$(env_file)" ]] && source $(env_file) + cmake --version + gcc --version + ccache -p + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + ccache --show-stats + displayName: Build and test + env: + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=ON + CMAKE_CXX_COMPILER_LAUNCHER=/usr/bin/ccache + CMAKE_C_COMPILER_LAUNCHER=/usr/bin/ccache + workingDirectory: $(Agent.BuildDirectory) From dc5c1a1dc511b7e137acd206ee20fe40406838de Mon Sep 17 00:00:00 2001 From: Dave Chen Date: Mon, 25 Feb 2019 15:16:54 -0500 Subject: [PATCH 065/400] Fix for hang in Show function on Windows It was re-deleting a previously deleted process. --- Code/IO/src/sitkShow.cxx | 2 -- 1 file changed, 2 deletions(-) diff --git a/Code/IO/src/sitkShow.cxx b/Code/IO/src/sitkShow.cxx index 8f34d1aa0..fb476073f 100644 --- a/Code/IO/src/sitkShow.cxx +++ b/Code/IO/src/sitkShow.cxx @@ -592,8 +592,6 @@ namespace itk itksysProcess_Delete( kp ); sitkExceptionMacro ( << "Unexpected process state!" << "\nCommand line: " << cmdstream.str() ); } - - itksysProcess_Delete( kp ); } void Show( const Image &image, const std::string& title, const bool debugOn) From f74474e8c817e874fd8fbec7169dcd6e10b56aac Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 28 Feb 2019 12:09:02 -0500 Subject: [PATCH 066/400] Print ctest variables being set in Azure build script --- Testing/CI/Azure/azure.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Testing/CI/Azure/azure.cmake b/Testing/CI/Azure/azure.cmake index 6aa6f67f9..564de9fe2 100644 --- a/Testing/CI/Azure/azure.cmake +++ b/Testing/CI/Azure/azure.cmake @@ -12,9 +12,11 @@ function(set_from_env var env_var) if (ARGV2 STREQUAL "REQUIRED") message(FATAL_ERROR "Required environment variable \"${env_var}\" not defined.") elseif (ARGV2 STREQUAL "DEFAULT") + message("Setting \"${var}\" to default \"${ARGV3}\".") set(${var} ${ARGV3} PARENT_SCOPE) endif() else() + message("Setting \"${var}\" to \"$ENV{${env_var}}\" from environment.") set(${var} $ENV{${env_var}} PARENT_SCOPE) endif() endfunction() From dc2e84a1d3ce4f9065cc86ec332ca37d7c0385ad Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 28 Feb 2019 13:03:44 -0500 Subject: [PATCH 067/400] Remove batch option from azure pipeline --- Testing/CI/Azure/azure-pipelines-batch.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index 3e858a812..43c36ecd9 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -1,9 +1,6 @@ trigger: - batch: true - branches: - include: - - master - - release + - master + - release pr: none jobs: - job: 'VS19' From 1501c3564681b27df0143a09dbe69708043bc9e5 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 1 Mar 2019 12:03:39 -0500 Subject: [PATCH 068/400] Explicitly enable python 3.6 on windows azure --- Testing/CI/Azure/azure-pipelines.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 037bc7535..6faa49273 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -117,7 +117,15 @@ jobs: cmake -E rename "SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5" "$(Build.SourcesDirectory)/.ExternalData/MD5" displayName: Download dashboard scripts and testing data workingDirectory: $(Agent.BuildDirectory) - - script: python -m pip install ninja + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + addToPath: true + - script: | + python --version + python -m pip install ninja displayName: 'Install ninja dependency' - script: | cmake --version From 653340ad54f4b911ef5a3a6ad77b4709366b7249 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 1 Mar 2019 09:51:12 -0500 Subject: [PATCH 069/400] Update SimpleITK Superbuild version to 4.13.2 --- SuperBuild/External_ITK.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index c031b676d..c90417b72 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,7 +52,8 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(ITK_GIT_TAG "8862e36ad879b46d6cb3e8682852d78d5673accd" CACHE STRING "Tag in ITK git repo") # along release-4.13 +set(ITK_GIT_TAG "v4.13.2" CACHE + STRING "Tag in ITK git repo") # release-4.13 mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From 0747b5c896063b7d722f0adea3e203c0841e745c Mon Sep 17 00:00:00 2001 From: Ziv Yaniv Date: Sat, 2 Mar 2019 19:35:35 -0500 Subject: [PATCH 070/400] Moved SPIE course from upcoming to past section. --- Documentation/docs/source/tutorialsAndCourses.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Documentation/docs/source/tutorialsAndCourses.rst b/Documentation/docs/source/tutorialsAndCourses.rst index a98ab3aba..556f2c40d 100644 --- a/Documentation/docs/source/tutorialsAndCourses.rst +++ b/Documentation/docs/source/tutorialsAndCourses.rst @@ -36,11 +36,12 @@ SimpleITK tutorials and courses have been given in the following venues: Upcoming ++++++++ -* SPIE Medical Imaging 2019 Course, San Diego CA, USA: `SimpleITK Jupyter Notebooks: Biomedical Image Analysis in Python `__ [`git repository `__]. + Past ++++ +* SPIE Medical Imaging 2019 Course, San Diego CA, USA: `SimpleITK Jupyter Notebooks: Biomedical Image Analysis in Python `__ [`git repository `__]. * IEEE International Symposium on Biomedical Imaging (ISBI)2018 Tutorial, Washington DC, USA: `Biomedical Image Analysis in Python and R using SimpleITK Jupyter Notebooks `__ [`git repository `__]. * SPIE Medical Imaging 2018 Course, Houston TX, USA: `SimpleITK Jupyter Notebooks: Biomedical Image Analysis in Python `__ [`git repository `__]. * The International Symposium on Biomedical Imaging (ISBI) 2016, Prague, Czech republic: `SimpleITK: An Interactive, Python-Based Introduction to SimpleITK with the Insight Segmentation and Registration Toolkit (ITK) `__. From 83701e479fb5df36971d366e42eb0a61d907bff8 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 4 Mar 2019 16:19:36 -0500 Subject: [PATCH 071/400] Add JUint testing output --- Testing/CI/Azure/azure-pipelines.yml | 52 +++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 6faa49273..698cbaf47 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -34,7 +34,16 @@ jobs: cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 displayName: Download dashboard scripts and testing data workingDirectory: $(Agent.BuildDirectory) - - script: sudo python -m pip install ninja + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + addToPath: true + - script: | + python --version + sudo python -m pip install setuptools + sudo python -m pip install ninja scikit-ci-addons displayName: 'Install ninja dependency' - bash: | set -x @@ -49,6 +58,17 @@ jobs: DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 workingDirectory: $(Agent.BuildDirectory) + - script: | + ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + condition: succeededOrFailed() + displayName: 'Format CTest output in JUnit format' + - task: PublishTestResults@2 + inputs: + testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" + testRunTitle: 'CTest $(Agent.OS)' + condition: succeededOrFailed() + displayName: 'Publish test results' + - job: macOS timeoutInMinutes: 0 cancelTimeoutInMinutes: 300 @@ -79,7 +99,10 @@ jobs: versionSpec: '3.6' architecture: 'x64' addToPath: true - - script: sudo python -m pip install ninja + - script: | + python --version + sudo python -m pip install setuptools + sudo python -m pip install ninja scikit-ci-addons displayName: 'Install ninja dependency' - bash: | set -x @@ -94,6 +117,16 @@ jobs: DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 workingDirectory: $(Agent.BuildDirectory) + - script: | + ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + condition: succeededOrFailed() + displayName: 'Format CTest output in JUnit format' + - task: PublishTestResults@2 + inputs: + testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" + testRunTitle: 'CTest $(Agent.OS)' + condition: succeededOrFailed() + displayName: 'Publish test results' - job: Windows timeoutInMinutes: 0 @@ -124,8 +157,9 @@ jobs: architecture: 'x64' addToPath: true - script: | - python --version - python -m pip install ninja + python --version + python -m pip install setuptools + python -m pip install ninja scikit-ci-addons displayName: 'Install ninja dependency' - script: | cmake --version @@ -140,3 +174,13 @@ jobs: CXXFLAGS: /MP CFLAGS: /MP workingDirectory: $(Agent.BuildDirectory) + - script: | + ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + condition: succeededOrFailed() + displayName: 'Format CTest output in JUnit format' + - task: PublishTestResults@2 + inputs: + testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" + testRunTitle: 'CTest $(Agent.OS)' + condition: succeededOrFailed() + displayName: 'Publish test results' From a6a1d01978242f684a4678b26e6aa1da7258d432 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 6 Mar 2019 11:31:50 -0500 Subject: [PATCH 072/400] Reader ImageInformation compare to image read Extend the ImageFileReader_ImageInformation test to additionally compare the read information to an image's meta-data that has been read. --- Testing/Unit/sitkImageIOTests.cxx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Testing/Unit/sitkImageIOTests.cxx b/Testing/Unit/sitkImageIOTests.cxx index 74c5eab62..692f66320 100644 --- a/Testing/Unit/sitkImageIOTests.cxx +++ b/Testing/Unit/sitkImageIOTests.cxx @@ -563,23 +563,32 @@ TEST(IO, ImageFileReader_ImageInformation ) EXPECT_ANY_THROW( reader.GetMetaData("nothing") ); + sitk::Image image = sitk::ReadImage(dicomFile1); reader.ReadImageInformation(); EXPECT_EQ(reader.GetPixelID(), sitk::sitkInt16); + EXPECT_EQ(reader.GetPixelID(), image.GetPixelID()); EXPECT_EQ(reader.GetPixelIDValue(), sitk::sitkInt16); + EXPECT_EQ(reader.GetPixelIDValue(), image.GetPixelIDValue()); EXPECT_EQ(reader.GetDimension(), 3u); + EXPECT_EQ(reader.GetDimension(), image.GetDimension()); EXPECT_EQ(reader.GetNumberOfComponents(), 1u); + EXPECT_EQ(reader.GetNumberOfComponents(), image.GetNumberOfComponentsPerPixel()); EXPECT_VECTOR_DOUBLE_NEAR(reader.GetOrigin(), v3(-112, -21.687999, 126.894000 ), 1e-6); + EXPECT_VECTOR_DOUBLE_NEAR(reader.GetOrigin(), image.GetOrigin(), 1e-6); EXPECT_VECTOR_DOUBLE_NEAR(reader.GetSpacing(), v3(0.859375, 0.8593899, 1.600000 ), 1e-6); + EXPECT_VECTOR_DOUBLE_NEAR(reader.GetSpacing(), image.GetSpacing(), 1e-6); EXPECT_VECTOR_DOUBLE_NEAR(reader.GetDirection(), v9(1, 0, 0, 0, 0.46665081166793676, -0.88444164305490258, -0, 0.88444164305490258, 0.46665081166793676 ), 1e-8); + EXPECT_VECTOR_DOUBLE_NEAR(reader.GetDirection(), image.GetDirection(), 1e-16); EXPECT_VECTOR_NEAR(reader.GetSize(), v3(256.0, 256.0, 1.0), 1e-10); std::vector keys = reader.GetMetaDataKeys(); for(unsigned int i = 0; i < keys.size(); ++i ) { EXPECT_TRUE( reader.HasMetaDataKey(keys[i]) ); + EXPECT_TRUE( image.HasMetaDataKey(keys[i]) ); EXPECT_NO_THROW( reader.GetMetaData( keys[i]) ); } EXPECT_EQ(reader.GetMetaData( "0008|0031"), "153128"); From 13e6f35f7484149179625bec92134383961a73a6 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 6 Mar 2019 13:42:02 -0500 Subject: [PATCH 073/400] BUG: Fix ImageFileReader::GetDirection matrix order The itk::ImageIOBase::GetDirection() returns matrix columns of the direction cosine matrix. This was coppied in the wrong order to the SimpleITK matrix array. The copy has been corrected to produce a row-major 1-D direction matrix in the sitk::ImageFileReader ivar. --- Code/IO/src/sitkImageFileReader.cxx | 10 +++++----- Testing/Unit/sitkImageIOTests.cxx | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Code/IO/src/sitkImageFileReader.cxx b/Code/IO/src/sitkImageFileReader.cxx index 3baa61d22..6d93c5619 100644 --- a/Code/IO/src/sitkImageFileReader.cxx +++ b/Code/IO/src/sitkImageFileReader.cxx @@ -134,9 +134,7 @@ namespace itk { PixelIDValueType pixelType; this->GetPixelIDFromImageIO(iobase, pixelType, m_Dimension); - std::vector direction; - - direction.reserve(m_Dimension*m_Dimension); + std::vector direction(m_Dimension*m_Dimension); std::vector origin(m_Dimension); std::vector spacing(m_Dimension); @@ -146,8 +144,10 @@ namespace itk { origin[i] = iobase->GetOrigin(i); spacing[i] = iobase->GetSpacing(i); size[i] = iobase->GetDimensions(i); - const std::vector< double > temp_direction = iobase->GetDirection(i); - direction.insert(direction.end(), temp_direction.begin(), temp_direction.end()); + for( unsigned int col = 0; col < m_Dimension; ++col) + { + direction[i*m_Dimension+col] = iobase->GetDirection(col)[i]; + } } // release functions bound to old meta data dictionary diff --git a/Testing/Unit/sitkImageIOTests.cxx b/Testing/Unit/sitkImageIOTests.cxx index 692f66320..7fecf260e 100644 --- a/Testing/Unit/sitkImageIOTests.cxx +++ b/Testing/Unit/sitkImageIOTests.cxx @@ -578,9 +578,9 @@ TEST(IO, ImageFileReader_ImageInformation ) EXPECT_VECTOR_DOUBLE_NEAR(reader.GetOrigin(), image.GetOrigin(), 1e-6); EXPECT_VECTOR_DOUBLE_NEAR(reader.GetSpacing(), v3(0.859375, 0.8593899, 1.600000 ), 1e-6); EXPECT_VECTOR_DOUBLE_NEAR(reader.GetSpacing(), image.GetSpacing(), 1e-6); - EXPECT_VECTOR_DOUBLE_NEAR(reader.GetDirection(), v9(1, 0, 0, - 0, 0.46665081166793676, -0.88444164305490258, - -0, 0.88444164305490258, 0.46665081166793676 ), 1e-8); + EXPECT_VECTOR_DOUBLE_NEAR(reader.GetDirection(), v9(1, 0, -0, + 0, 0.46665081166793676, 0.88444164305490258, + 0, -0.88444164305490258, 0.46665081166793676 ), 1e-8); EXPECT_VECTOR_DOUBLE_NEAR(reader.GetDirection(), image.GetDirection(), 1e-16); EXPECT_VECTOR_NEAR(reader.GetSize(), v3(256.0, 256.0, 1.0), 1e-10); From c1efa68601da3c44b89041db36a1fdf2a323d474 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 5 Mar 2019 13:52:12 -0500 Subject: [PATCH 074/400] Support additional CMake generator variables in Superbuild Ensure propagation of generator variables such as the architecture to the superbuild subprojects. --- SuperBuild/SuperBuild.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SuperBuild/SuperBuild.cmake b/SuperBuild/SuperBuild.cmake index 8816fabb5..8caac544d 100644 --- a/SuperBuild/SuperBuild.cmake +++ b/SuperBuild/SuperBuild.cmake @@ -237,6 +237,9 @@ list( APPEND ep_common_list CMAKE_JOB_POOL_COMPILE CMAKE_GENERATOR + CMAKE_GENERATOR_INSTANCE + CMAKE_GENERATOR_PLATFORM + CMAKE_GENERATOR_TOOLSET CMAKE_EXTRA_GENERATOR MEMORYCHECK_COMMAND_OPTIONS MEMORYCHECK_SUPPRESSIONS_FILE From 3fcd889f50a8b8d5b17523f3707d7d153097bb51 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 6 Mar 2019 15:56:58 -0500 Subject: [PATCH 075/400] Document details about the ImageIO information --- Code/IO/include/sitkImageFileReader.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Code/IO/include/sitkImageFileReader.h b/Code/IO/include/sitkImageFileReader.h index 36c66d777..3dddc6256 100644 --- a/Code/IO/include/sitkImageFileReader.h +++ b/Code/IO/include/sitkImageFileReader.h @@ -40,7 +40,10 @@ namespace itk { * * An interface is also provided to access the information from * the underlying itk::ImageIO. This information can be loaded - * with the ReadImageInformation method. + * with the ReadImageInformation method. The information is from + * the itk::ImageIO interface. In some degenerate cases reading + * the bulk data may produce different results. Please see + * itk::ImageFileReader for more details. * * Reading takes place by the ITK ImageIO factory mechanism. ITK * contains many ImageIO classes which are responsible for reading From 43b236a0458bd0158f7f53768ebf47e2f67e1728 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 7 Mar 2019 10:03:19 -0500 Subject: [PATCH 076/400] Replace self-host vs2019 image with azure hosted --- Testing/CI/Azure/azure-pipelines-batch.yml | 65 +++++++++++++--------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index 43c36ecd9..eacad7550 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -1,35 +1,50 @@ trigger: + - master - release +variables: + ExternalDataVersion: 1.2.0 pr: none jobs: - - job: 'VS19' + - job: VS2019 + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 pool: - name: 'Default' - demands: - - VisualStudio_16.0 - timeoutInMinutes: 360 - workspace: - clean: all + vmImage: 'windows-2019' + steps: - - script: | - git clone -b dashboard --single-branch $(Build.Repository.Uri) SimpleITK-dashboard - displayName: Download dashboard scripts and testing data - workingDirectory: $(Agent.BuildDirectory) - - script: | - env - cmake --version - ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V - displayName: Build and test - env: - CTEST_BUILD_CONFIGURATION: MinSizeRel - CTEST_OUTPUT_ON_FALURE: 1 - CTEST_CMAKE_GENERATOR: "Visual Studio 16 2019" - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - CXXFLAGS: /MP - CFLAGS: /MP - workingDirectory: $(Agent.BuildDirectory) + - checkout: self + clean: true + fetchDepth: 5 + - script: | + if DEFINED SYSTEM_PULLREQUEST_SOURCECOMMITID git checkout $(System.PullRequest.SourceCommitId) + displayName: Checkout pull request HEAD + - bash: | + set -x + # 3.14.0 is required for VS2019 by 3.14.0-rc3 does not detect the VS2019 installation + choco install cmake.portable --pre --version 3.14.0-rc2 + displayName: "Chocolatey install..." + - bash: | + git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename "SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5" "$(Build.SourcesDirectory)/.ExternalData/MD5" + displayName: Download dashboard scripts and testing data + workingDirectory: $(Agent.BuildDirectory) + - script: | + cmake --version + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + displayName: Build and test + workingDirectory: $(Agent.BuildDirectory) + env: + CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_CMAKE_GENERATOR: "Visual Studio 16 2019" + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CXXFLAGS: /MP + CFLAGS: /MP + - job: 'LinuxGCC' pool: name: 'Default' From 1885d7f7dbcc516da75f14f536112205e4464b83 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 1 Mar 2019 09:51:12 -0500 Subject: [PATCH 077/400] Update SimpleITK Superbuild version to 4.13.2 --- SuperBuild/External_ITK.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index 3baf38df2..c90417b72 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,7 +52,7 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(ITK_GIT_TAG "8bbd7e7ac6ee71932bfb4b00a34c70f1ac02f7e7" CACHE +set(ITK_GIT_TAG "v4.13.2" CACHE STRING "Tag in ITK git repo") # release-4.13 mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From fa3907a8a806379d0e0f7c1632941fd7cc9ea4df Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 8 Mar 2019 16:33:06 -0500 Subject: [PATCH 078/400] Updating Azure Pipeline configuration from master branch --- Testing/CI/Azure/azure-pipelines-batch.yml | 93 +++++++++++++++++++ Testing/CI/Azure/azure-pipelines-coverage.yml | 59 ++++++++++++ Testing/CI/Azure/azure-pipelines.yml | 58 +++++++++++- Testing/CI/Azure/azure.cmake | 14 ++- 4 files changed, 216 insertions(+), 8 deletions(-) create mode 100644 Testing/CI/Azure/azure-pipelines-batch.yml create mode 100644 Testing/CI/Azure/azure-pipelines-coverage.yml diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml new file mode 100644 index 000000000..eacad7550 --- /dev/null +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -0,0 +1,93 @@ +trigger: + + - master + - release +variables: + ExternalDataVersion: 1.2.0 +pr: none +jobs: + - job: VS2019 + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'windows-2019' + + steps: + - checkout: self + clean: true + fetchDepth: 5 + - script: | + if DEFINED SYSTEM_PULLREQUEST_SOURCECOMMITID git checkout $(System.PullRequest.SourceCommitId) + displayName: Checkout pull request HEAD + - bash: | + set -x + # 3.14.0 is required for VS2019 by 3.14.0-rc3 does not detect the VS2019 installation + choco install cmake.portable --pre --version 3.14.0-rc2 + displayName: "Chocolatey install..." + - bash: | + git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename "SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5" "$(Build.SourcesDirectory)/.ExternalData/MD5" + displayName: Download dashboard scripts and testing data + workingDirectory: $(Agent.BuildDirectory) + - script: | + cmake --version + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + displayName: Build and test + workingDirectory: $(Agent.BuildDirectory) + env: + CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_CMAKE_GENERATOR: "Visual Studio 16 2019" + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CXXFLAGS: /MP + CFLAGS: /MP + + - job: 'LinuxGCC' + pool: + name: 'Default' + demands: + - Agent.OS -equals Linux + strategy: + matrix: + default: {} + devtools-3: + env_file: '/opt/rh/devtoolset-3/enable' + devtools-4: + env_file: '/opt/rh/devtoolset-4/enable' + devtools-6: + env_file: '/opt/rh/devtoolset-6/enable' + devtools-7: + env_file: '/opt/rh/devtoolset-7/enable' + devtools-8: + env_file: '/opt/rh/devtoolset-8/enable' + timeoutInMinutes: 360 + workspace: + clean: all + steps: + - script: | + git clone -b dashboard --single-branch $(Build.Repository.Uri) SimpleITK-dashboard + displayName: Download dashboard scripts and testing data + workingDirectory: $(Agent.BuildDirectory) + - script: | + [[ ! -z "$(env_file)" ]] && source $(env_file) + cmake --version + gcc --version + ccache -p + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + ccache --show-stats + displayName: Build and test + env: + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=ON + CMAKE_CXX_COMPILER_LAUNCHER=/usr/bin/ccache + CMAKE_C_COMPILER_LAUNCHER=/usr/bin/ccache + workingDirectory: $(Agent.BuildDirectory) diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml new file mode 100644 index 000000000..0409f6e98 --- /dev/null +++ b/Testing/CI/Azure/azure-pipelines-coverage.yml @@ -0,0 +1,59 @@ +# Nightly Coverage + +trigger: + branches: + exclude: + - "*" +pr: none + +variables: + ExternalDataVersion: 1.2.0 +jobs: + - job: Linux + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'Ubuntu-16.04' + + steps: + - checkout: self + clean: true + fetchDepth: 5 + - bash: | + set -x + if [ -n "$(System.PullRequest.SourceCommitId)" ]; then + git checkout $(System.PullRequest.SourceCommitId) + fi + - bash: | + set -x + git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 + displayName: Download dashboard scripts and testing data + workingDirectory: $(Agent.BuildDirectory) + - bash: | + ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake + displayName: Build and test with coverage + env: + CTEST_BUILD_CONFIGURATION: Debug + CTEST_BUILD_FLAGS: -j 2 + CTEST_OUTPUT_ON_FALURE: 1 + CTEST_CMAKE_GENERATOR: "Unix Makefiles" + CTEST_COVERAGE_COMMAND: /usr/bin/gcov + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=OFF + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + CMAKE_CXX_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage + CMAKE_C_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage + CMAKE_EXE_LINKER_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage + COVERAGE_COMMAND:PATH=/usr/bin/gcov + SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF + WRAP_DEFAULT:BOOL=OFF + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + DASHBOARD_DO_COVERAGE: 1 + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 1 + workingDirectory: $(Agent.BuildDirectory) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 037bc7535..698cbaf47 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -34,7 +34,16 @@ jobs: cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 displayName: Download dashboard scripts and testing data workingDirectory: $(Agent.BuildDirectory) - - script: sudo python -m pip install ninja + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + addToPath: true + - script: | + python --version + sudo python -m pip install setuptools + sudo python -m pip install ninja scikit-ci-addons displayName: 'Install ninja dependency' - bash: | set -x @@ -49,6 +58,17 @@ jobs: DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 workingDirectory: $(Agent.BuildDirectory) + - script: | + ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + condition: succeededOrFailed() + displayName: 'Format CTest output in JUnit format' + - task: PublishTestResults@2 + inputs: + testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" + testRunTitle: 'CTest $(Agent.OS)' + condition: succeededOrFailed() + displayName: 'Publish test results' + - job: macOS timeoutInMinutes: 0 cancelTimeoutInMinutes: 300 @@ -79,7 +99,10 @@ jobs: versionSpec: '3.6' architecture: 'x64' addToPath: true - - script: sudo python -m pip install ninja + - script: | + python --version + sudo python -m pip install setuptools + sudo python -m pip install ninja scikit-ci-addons displayName: 'Install ninja dependency' - bash: | set -x @@ -94,6 +117,16 @@ jobs: DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 workingDirectory: $(Agent.BuildDirectory) + - script: | + ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + condition: succeededOrFailed() + displayName: 'Format CTest output in JUnit format' + - task: PublishTestResults@2 + inputs: + testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" + testRunTitle: 'CTest $(Agent.OS)' + condition: succeededOrFailed() + displayName: 'Publish test results' - job: Windows timeoutInMinutes: 0 @@ -117,7 +150,16 @@ jobs: cmake -E rename "SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5" "$(Build.SourcesDirectory)/.ExternalData/MD5" displayName: Download dashboard scripts and testing data workingDirectory: $(Agent.BuildDirectory) - - script: python -m pip install ninja + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + addToPath: true + - script: | + python --version + python -m pip install setuptools + python -m pip install ninja scikit-ci-addons displayName: 'Install ninja dependency' - script: | cmake --version @@ -132,3 +174,13 @@ jobs: CXXFLAGS: /MP CFLAGS: /MP workingDirectory: $(Agent.BuildDirectory) + - script: | + ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + condition: succeededOrFailed() + displayName: 'Format CTest output in JUnit format' + - task: PublishTestResults@2 + inputs: + testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" + testRunTitle: 'CTest $(Agent.OS)' + condition: succeededOrFailed() + displayName: 'Publish test results' diff --git a/Testing/CI/Azure/azure.cmake b/Testing/CI/Azure/azure.cmake index 1a926f21c..564de9fe2 100644 --- a/Testing/CI/Azure/azure.cmake +++ b/Testing/CI/Azure/azure.cmake @@ -12,9 +12,11 @@ function(set_from_env var env_var) if (ARGV2 STREQUAL "REQUIRED") message(FATAL_ERROR "Required environment variable \"${env_var}\" not defined.") elseif (ARGV2 STREQUAL "DEFAULT") + message("Setting \"${var}\" to default \"${ARGV3}\".") set(${var} ${ARGV3} PARENT_SCOPE) endif() else() + message("Setting \"${var}\" to \"$ENV{${env_var}}\" from environment.") set(${var} $ENV{${env_var}} PARENT_SCOPE) endif() endfunction() @@ -34,23 +36,26 @@ set_from_env(CTEST_CMAKE_GENERATOR "CTEST_CMAKE_GENERATOR" DEFAULT "Ninja" ) set_from_env(CTEST_CONFIGURATION_TYPE "CTEST_CONFIGURATION_TYPE" DEFAULT "Release") set_from_env(CTEST_SOURCE_DIRECTORY "BUILD_SOURCESDIRECTORY" REQUIRED) #set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY") -#set_from_env(CTEST_BUILD_FLAGS "CTEST_BUILD_FLAGS") +set_from_env(CTEST_BUILD_FLAGS "CTEST_BUILD_FLAGS") set_from_env(CTEST_BUILD_TARGET "CTEST_BUILD_TARGET") set_from_env(CTEST_TEST_ARGS "CTEST_TEST_ARGS") set_from_env(DASHBOARD_BRANCH_DIRECTORY "DASHBOARD_BRANCH_DIRECTORY" REQUIRED) + +set_from_env(dashboard_do_coverage "DASHBOARD_DO_COVERAGE" 0) +set_from_env(CTEST_COVERAGE_COMMAND "CTEST_COVERAGE_COMMAND") + # Construct build name based on what is being built set(dashboard_loop 0) - if(NOT CTEST_BUILD_NAME) if(DEFINED ENV{SYSTEM_PULLREQUEST_SOURCEBRANCH}) set(branch "-$ENV{SYSTEM_PULLREQUEST_SOURCEBRANCH}") set(dashboard_model "Experimental") - elseif(ENV{BUILD_SOURCEBRANCHNAME} STREQUAL "master") + elseif("$ENV{BUILD_SOURCEBRANCHNAME}" STREQUAL "master") set(branch "-master") set(dashboard_model "Continuous") else() @@ -64,8 +69,7 @@ if(NOT CTEST_BUILD_NAME) set(pr "") endif() - set(CTEST_BUILD_NAME - "$ENV{AGENT_OS}-Build$ENV{BUILD_BUILDID}${pr}${branch}${wrapping}") + set(CTEST_BUILD_NAME "$ENV{AGENT_NAME}-$ENV{AGENT_JOBNAME}-$ENV{BUILD_BUILDID}${pr}${branch}") endif() if ( EXISTS "${CTEST_SOURCE_DIRECTORY}/azure.yml") From da7daac729aaff1aea577b752b571f5c523bef91 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 13 Mar 2019 13:56:59 -0400 Subject: [PATCH 079/400] Add new data download service Replace old NLM servers with AWS S3 mirrored data service. --- CMake/sitkExternalData.cmake | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CMake/sitkExternalData.cmake b/CMake/sitkExternalData.cmake index 896792abf..536db140a 100644 --- a/CMake/sitkExternalData.cmake +++ b/CMake/sitkExternalData.cmake @@ -34,10 +34,7 @@ if(NOT SimpleITK_FORBID_DOWNLOADS) list(APPEND ExternalData_URL_TEMPLATES # Data mirrored from SimpleITKExternalData repository - "https://erie.nlm.nih.gov/SimpleITKExternalData/%(algo)/%(hash)" - - # Data published by MIDAS - "https://placid.nlm.nih.gov/api/rest?method=midas.bitstream.download&checksum=%(hash)&algorithm=%(algo)" + "https://s3.amazonaws.com/simpleitk/public/%(algo)/%(hash)" # Data published on GitHub Pages "https://simpleitk.github.io/SimpleITKExternalData/%(algo)/%(hash)" From ca9af981ba57858e02a52a753ff3ca9225705cb3 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 15 Mar 2019 16:08:35 -0400 Subject: [PATCH 080/400] Fix Rpackaging failure to copy packaging directory The default build directory for R packages include "R.INSTALL", which matched the regular expression "*.in", which case insensitive file systems. Add end of input marked to ensure file extension is at the end of the string. Add sha512 exclusion too. --- Wrapping/R/CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Wrapping/R/CMakeLists.txt b/Wrapping/R/CMakeLists.txt index feaacbb0c..39259b36d 100644 --- a/Wrapping/R/CMakeLists.txt +++ b/Wrapping/R/CMakeLists.txt @@ -48,7 +48,7 @@ endif() # copy the R files a binary package file( COPY "${CMAKE_CURRENT_SOURCE_DIR}/Packaging" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}" - REGEX "(.*\\.in)|(.*\\.md5)" EXCLUDE ) + REGEX "(.*\\.in$)|(.*\\.md5$)|(.*\\.sha512$)" EXCLUDE ) set(SimpleITKR_VERSION "${SimpleITK_VERSION_MAJOR}.${SimpleITK_VERSION_MINOR}") @@ -78,7 +78,7 @@ file( GLOB_RECURSE image_links RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_C foreach(link ${image_links}) string( REGEX REPLACE "\\.md5$" "" link ${link} ) - ExternalData_Expand_Arguments( SimpleITKRpackageData + ExternalData_Expand_Arguments( SimpleITKRpackageData image_location DATA{${link}} ) @@ -93,10 +93,11 @@ file( GLOB_RECURSE doc_links RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CUR foreach(link ${doc_links}) string( REGEX REPLACE "\\.md5$" "" link ${link} ) - ExternalData_Expand_Arguments( SimpleITKRpackageData + ExternalData_Expand_Arguments( SimpleITKRpackageData doc_location DATA{${link}} ) + file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/Packaging/SimpleITK/man/") set( EXTRACT_RMAN_COMMAND ${EXTRACT_RMAN_COMMAND} COMMAND ${CMAKE_COMMAND} -E tar xzf ${doc_location} WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/Packaging/SimpleITK/man/" ) endforeach() @@ -110,6 +111,7 @@ add_dependencies( ${SWIG_MODULE_SimpleITK_TARGET_NAME} SimpleITKRpackageData ) # copy sample images and extract documentation - used in vignette add_custom_command( TARGET ${SWIG_MODULE_SimpleITK_TARGET_NAME} PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/Packaging/SimpleITK/inst/extdata/" ${COPY_DATA_COMMAND} ${EXTRACT_RMAN_COMMAND} ) From cfd43fb247dcbb4929bc3196ce4a425aad7374be Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 18 Mar 2019 10:46:07 -0400 Subject: [PATCH 081/400] With Azure Pipelines automatically set the build parallel level Use CMake's ProcessorCount module to determine the number of core and parrallelism to use while building and testing SimpleITK. --- Testing/CI/Azure/azure.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Testing/CI/Azure/azure.cmake b/Testing/CI/Azure/azure.cmake index 564de9fe2..18392144d 100644 --- a/Testing/CI/Azure/azure.cmake +++ b/Testing/CI/Azure/azure.cmake @@ -25,8 +25,12 @@ set_from_env(CTEST_SITE "AGENT_MACHINENAME" REQUIRED) set(CTEST_SITE "Azure.${CTEST_SITE}") set(CTEST_UPDATE_VERSION_ONLY 1) -set_from_env(PARALLEL_LEVEL "PARALLEL_LEVEL" DEFAULT 2 ) +include( ProcessorCount ) +ProcessorCount( _processor_count ) +set_from_env(PARALLEL_LEVEL "PARALLEL_LEVEL" DEFAULT "${_processor_count}" ) set( CTEST_TEST_ARGS ${CTEST_TEST_ARGS} PARALLEL_LEVEL ${PARALLEL_LEVEL}) + + set_from_env(workspace "AGENT_BUILDDIRECTORY" REQUIRED) file(TO_CMAKE_PATH "${workspace}" CTEST_DASHBOARD_ROOT) file(RELATIVE_PATH dashboard_source_name "${workspace}" "$ENV{BUILD_SOURCESDIRECTORY}") From 2a05977b4ce3af8f2adae6d71e7dbaa34b500d6e Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 18 Mar 2019 10:52:18 -0400 Subject: [PATCH 082/400] Update Azure coverage build to use self hosted agent --- Testing/CI/Azure/azure-pipelines-coverage.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml index 0409f6e98..9300c066e 100644 --- a/Testing/CI/Azure/azure-pipelines-coverage.yml +++ b/Testing/CI/Azure/azure-pipelines-coverage.yml @@ -9,12 +9,13 @@ pr: none variables: ExternalDataVersion: 1.2.0 jobs: - - job: Linux + - job: LinuxCoverage timeoutInMinutes: 0 cancelTimeoutInMinutes: 300 pool: - vmImage: 'Ubuntu-16.04' - + name: 'Default' + demands: + - Agent.OS -equals Linux steps: - checkout: self clean: true @@ -38,9 +39,7 @@ jobs: displayName: Build and test with coverage env: CTEST_BUILD_CONFIGURATION: Debug - CTEST_BUILD_FLAGS: -j 2 CTEST_OUTPUT_ON_FALURE: 1 - CTEST_CMAKE_GENERATOR: "Unix Makefiles" CTEST_COVERAGE_COMMAND: /usr/bin/gcov CTEST_CACHE: | BUILD_DOCUMENTS:BOOL=OFF From 7efbd4c5038f7804ba9f9144df4a7819dc00d1ae Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 18 Mar 2019 11:02:31 -0400 Subject: [PATCH 083/400] Add Azure Pipeline Valgrind job --- Testing/CI/Azure/azure-pipelines-coverage.yml | 46 +++++++++++++++++++ Testing/CI/Azure/azure.cmake | 7 +++ 2 files changed, 53 insertions(+) diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml index 9300c066e..f353ce43a 100644 --- a/Testing/CI/Azure/azure-pipelines-coverage.yml +++ b/Testing/CI/Azure/azure-pipelines-coverage.yml @@ -56,3 +56,49 @@ jobs: DASHBOARD_DO_COVERAGE: 1 ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 1 workingDirectory: $(Agent.BuildDirectory) + - job: 'LinuxValgrind' + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + name: 'Default' + demands: + - Agent.OS -equals Linux + workspace: + clean: all + steps: + - checkout: self + clean: true + fetchDepth: 5 + - bash: | + set -x + if [ -n "$(System.PullRequest.SourceCommitId)" ]; then + git checkout $(System.PullRequest.SourceCommitId) + fi + - script: | + git clone -b dashboard --single-branch $(Build.Repository.Uri) SimpleITK-dashboard + displayName: Download dashboard scripts and testing data + workingDirectory: $(Agent.BuildDirectory) + - script: | + [[ ! -z "$(env_file)" ]] && source $(env_file) + cmake --version + gcc --version + ccache -p + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + displayName: Build and test + env: + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + DASHBOARD_DO_MEMCHECK: 1 + CTEST_MEMORYCHECK_COMMAND: "/usr/bin/valgrind" + CTEST_MEMORYCHECK_COMMAND_OPTIONS: "--trace-children=yes --quiet --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=50 --verbose --demangle=yes --gen-suppressions=all --child-silent-after-fork=yes" + CTEST_OUTPUT_ON_FALURE: 1 + CTEST_TEST_TIMEOUT: 10000 + CTEST_BUILD_CONFIGURATION: "Debug" + CTEST_CACHE: | + BUILD_SHARED_LIBS:BOOL=ON + SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF + WRAP_DEFAULT:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + CMAKE_CXX_COMPILER_LAUNCHER=/usr/bin/ccache + CMAKE_C_COMPILER_LAUNCHER=/usr/bin/ccache + workingDirectory: $(Agent.BuildDirectory) diff --git a/Testing/CI/Azure/azure.cmake b/Testing/CI/Azure/azure.cmake index 18392144d..171cb4df9 100644 --- a/Testing/CI/Azure/azure.cmake +++ b/Testing/CI/Azure/azure.cmake @@ -45,12 +45,19 @@ set_from_env(CTEST_BUILD_TARGET "CTEST_BUILD_TARGET") set_from_env(CTEST_TEST_ARGS "CTEST_TEST_ARGS") +set_from_env(CTEST_TEST_TIMEOUT "CTEST_TEST_TIMEOUT") + set_from_env(DASHBOARD_BRANCH_DIRECTORY "DASHBOARD_BRANCH_DIRECTORY" REQUIRED) set_from_env(dashboard_do_coverage "DASHBOARD_DO_COVERAGE" 0) set_from_env(CTEST_COVERAGE_COMMAND "CTEST_COVERAGE_COMMAND") +set_from_env(dashboard_do_memcheck "DASHBOARD_DO_MEMCHECK" 0) +set_from_env(CTEST_MEMORYCHECK_COMMAND "CTEST_MEMORYCHECK_COMMAND") +set_from_env(CTEST_MEMORYCHECK_COMMAND_OPTIONS "CTEST_MEMORYCHECK_COMMAND_OPTIONS") + + # Construct build name based on what is being built set(dashboard_loop 0) From f47b2dddc4e7c76f3fe7e59093d2b45ce87b9ca4 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 18 Mar 2019 14:48:03 -0400 Subject: [PATCH 084/400] Consistenly use CTEST_CONFIGURATION_TYPE The older CTest varible CTEST_BUILD_CONFIGURATION was not being propagated to the test script. Add a warning when used and consistenly uses the newer and proper CTEST_CONFIGURATION_TYPE variable. --- Testing/CI/Azure/azure-pipelines-batch.yml | 2 +- Testing/CI/Azure/azure-pipelines-coverage.yml | 4 ++-- Testing/CI/Azure/azure-pipelines.yml | 6 +++--- Testing/CI/Azure/azure.cmake | 3 +++ 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index eacad7550..46cd47eea 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -38,7 +38,7 @@ jobs: displayName: Build and test workingDirectory: $(Agent.BuildDirectory) env: - CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_CONFIGURATION_TYPE: MinSizeRel CTEST_CMAKE_GENERATOR: "Visual Studio 16 2019" DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml index f353ce43a..afe203cc7 100644 --- a/Testing/CI/Azure/azure-pipelines-coverage.yml +++ b/Testing/CI/Azure/azure-pipelines-coverage.yml @@ -38,7 +38,7 @@ jobs: ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake displayName: Build and test with coverage env: - CTEST_BUILD_CONFIGURATION: Debug + CTEST_CONFIGURATION_TYPE: Debug CTEST_OUTPUT_ON_FALURE: 1 CTEST_COVERAGE_COMMAND: /usr/bin/gcov CTEST_CACHE: | @@ -92,7 +92,7 @@ jobs: CTEST_MEMORYCHECK_COMMAND_OPTIONS: "--trace-children=yes --quiet --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=50 --verbose --demangle=yes --gen-suppressions=all --child-silent-after-fork=yes" CTEST_OUTPUT_ON_FALURE: 1 CTEST_TEST_TIMEOUT: 10000 - CTEST_BUILD_CONFIGURATION: "Debug" + CTEST_CONFIGURATION_TYPE: Debug CTEST_CACHE: | BUILD_SHARED_LIBS:BOOL=ON SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 698cbaf47..6e6fff96f 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -53,7 +53,7 @@ jobs: ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 4 displayName: Build and test env: - CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_CONFIGURATION_TYPE: MinSizeRel CTEST_OUTPUT_ON_FALURE: 1 DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 @@ -112,7 +112,7 @@ jobs: ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 4 displayName: Build and test env: - CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_CONFIGURATION_TYPE: MinSizeRel CTEST_OUTPUT_ON_FALURE: 1 DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 @@ -166,7 +166,7 @@ jobs: ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V -j 4 displayName: Build and test env: - CTEST_BUILD_CONFIGURATION: MinSizeRel + CTEST_CONFIGURATION_TYPE: MinSizeRel CTEST_OUTPUT_ON_FALURE: 1 CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017 Win64" DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard diff --git a/Testing/CI/Azure/azure.cmake b/Testing/CI/Azure/azure.cmake index 171cb4df9..885ba57c5 100644 --- a/Testing/CI/Azure/azure.cmake +++ b/Testing/CI/Azure/azure.cmake @@ -37,6 +37,9 @@ file(RELATIVE_PATH dashboard_source_name "${workspace}" "$ENV{BUILD_SOURCESDIREC # Make environment variables to CMake variables for CTest set_from_env(CTEST_CMAKE_GENERATOR "CTEST_CMAKE_GENERATOR" DEFAULT "Ninja" ) +if (DEFINED ENV{CTEST_BUILD_CONFIGURATION}) + message(WARNING "Ignoring depricated variable CTEST_BUILD_CONFIGURATION") +endif() set_from_env(CTEST_CONFIGURATION_TYPE "CTEST_CONFIGURATION_TYPE" DEFAULT "Release") set_from_env(CTEST_SOURCE_DIRECTORY "BUILD_SOURCESDIRECTORY" REQUIRED) #set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY") From 423cdc4c888ef6b694b2495d3db4315174a25070 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 19 Mar 2019 09:42:17 -0400 Subject: [PATCH 085/400] Azure batch pipeline add ctest cache variable Add ctest.cache variable which the matrix jobs can use to specify inital cmake cache configuration. --- Testing/CI/Azure/azure-pipelines-batch.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index eacad7550..813aab02c 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -4,6 +4,7 @@ trigger: - release variables: ExternalDataVersion: 1.2.0 + ctest.cache: '' pr: none jobs: - job: VS2019 @@ -90,4 +91,5 @@ jobs: WRAP_DEFAULT:BOOL=ON CMAKE_CXX_COMPILER_LAUNCHER=/usr/bin/ccache CMAKE_C_COMPILER_LAUNCHER=/usr/bin/ccache + $(ctest.cache) workingDirectory: $(Agent.BuildDirectory) From 937675ba5f1dabbda28737f3be692ce69092fa9a Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 19 Mar 2019 13:01:23 -0400 Subject: [PATCH 086/400] Clean up workspace for coverage build --- Testing/CI/Azure/azure-pipelines-coverage.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml index afe203cc7..05017a8c5 100644 --- a/Testing/CI/Azure/azure-pipelines-coverage.yml +++ b/Testing/CI/Azure/azure-pipelines-coverage.yml @@ -16,6 +16,8 @@ jobs: name: 'Default' demands: - Agent.OS -equals Linux + workspace: + clean: all steps: - checkout: self clean: true From b8608f95633a6af8d54d45064761fd6352ad759d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 19 Mar 2019 18:08:38 -0400 Subject: [PATCH 087/400] Azure Valgrind do not use ccache The debug object files are too big, and remove too many other entries in the compiler cache. --- Testing/CI/Azure/azure-pipelines-coverage.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml index 05017a8c5..1e9f8bc09 100644 --- a/Testing/CI/Azure/azure-pipelines-coverage.yml +++ b/Testing/CI/Azure/azure-pipelines-coverage.yml @@ -101,6 +101,4 @@ jobs: WRAP_DEFAULT:BOOL=OFF BUILD_EXAMPLES:BOOL=ON BUILD_SHARED_LIBS:BOOL=OFF - CMAKE_CXX_COMPILER_LAUNCHER=/usr/bin/ccache - CMAKE_C_COMPILER_LAUNCHER=/usr/bin/ccache workingDirectory: $(Agent.BuildDirectory) From 0cba3214718d2fa9aba494144fa403b9c44c52d3 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 19 Mar 2019 10:18:42 -0400 Subject: [PATCH 088/400] Add Azure linux build against ITK master --- Testing/CI/Azure/azure-pipelines-batch.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index 813aab02c..077636b8e 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -47,6 +47,7 @@ jobs: CFLAGS: /MP - job: 'LinuxGCC' + timeoutInMinutes: 360 pool: name: 'Default' demands: @@ -54,6 +55,10 @@ jobs: strategy: matrix: default: {} + ITK-master: + ctest.cache: | + ITK_GIT_TAG:STRING=master + CMAKE_CXX_STANDARD:STRING=11 devtools-3: env_file: '/opt/rh/devtoolset-3/enable' devtools-4: @@ -64,7 +69,6 @@ jobs: env_file: '/opt/rh/devtoolset-7/enable' devtools-8: env_file: '/opt/rh/devtoolset-8/enable' - timeoutInMinutes: 360 workspace: clean: all steps: From 517dfa91dd845c00f48e8b5b86777f708935cfb6 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 21 Mar 2019 13:25:28 -0400 Subject: [PATCH 089/400] Improve formatting for measurements in generator Add new line at the end of a line for measurements related generated lines. --- .../Components/ExecuteInternalUpdateAndReturn.cxx.in | 3 ++- ExpandTemplateGenerator/Components/ToStringBody.cxx.in | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ExpandTemplateGenerator/Components/ExecuteInternalUpdateAndReturn.cxx.in b/ExpandTemplateGenerator/Components/ExecuteInternalUpdateAndReturn.cxx.in index f284d80b8..df617e07c 100644 --- a/ExpandTemplateGenerator/Components/ExecuteInternalUpdateAndReturn.cxx.in +++ b/ExpandTemplateGenerator/Components/ExecuteInternalUpdateAndReturn.cxx.in @@ -61,7 +61,8 @@ $(when measurements $(foreach measurements $(if not active and custom_itk_cast then OUT=[[ ${custom_itk_cast}]] elseif not active then - OUT=[[ this->m_${name} = filter->Get${name}();]] + OUT=[[ this->m_${name} = filter->Get${name}(); +]] end))) $(if no_return_image then diff --git a/ExpandTemplateGenerator/Components/ToStringBody.cxx.in b/ExpandTemplateGenerator/Components/ToStringBody.cxx.in index f331954a1..12c68a8ba 100644 --- a/ExpandTemplateGenerator/Components/ToStringBody.cxx.in +++ b/ExpandTemplateGenerator/Components/ToStringBody.cxx.in @@ -38,7 +38,8 @@ if active then } out << std::endl;]] else -OUT=[[ out << " ${name}: " << this->m_${name} << std::endl;]] +OUT=[[ out << " ${name}: " << this->m_${name} << std::endl; +]] end end))) out << ProcessObject::ToString(); From df9e1646e7b92d1e66d75f7e09af6bc26cf293c7 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 21 Mar 2019 13:29:14 -0400 Subject: [PATCH 090/400] Explicitly disable ccache The coverage build is running out of disk space. Don't create a copy of the object files in the cache. --- Testing/CI/Azure/azure-pipelines-coverage.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml index 1e9f8bc09..e38a83f24 100644 --- a/Testing/CI/Azure/azure-pipelines-coverage.yml +++ b/Testing/CI/Azure/azure-pipelines-coverage.yml @@ -40,6 +40,7 @@ jobs: ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake displayName: Build and test with coverage env: + CCACHE_DISABLE: 1 CTEST_CONFIGURATION_TYPE: Debug CTEST_OUTPUT_ON_FALURE: 1 CTEST_COVERAGE_COMMAND: /usr/bin/gcov @@ -88,6 +89,7 @@ jobs: ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V displayName: Build and test env: + CCACHE_DISABLE: 1 DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard DASHBOARD_DO_MEMCHECK: 1 CTEST_MEMORYCHECK_COMMAND: "/usr/bin/valgrind" From 376dd29a65dfb55dfebd20d140a606ebcfae8223 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 25 Mar 2019 15:29:41 -0400 Subject: [PATCH 091/400] Azure Coverage reduce linking parallelism The system is running out of memory during linking, so only do one linkage at a time. --- Testing/CI/Azure/azure-pipelines-coverage.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml index e38a83f24..19574808a 100644 --- a/Testing/CI/Azure/azure-pipelines-coverage.yml +++ b/Testing/CI/Azure/azure-pipelines-coverage.yml @@ -49,6 +49,8 @@ jobs: BUILD_EXAMPLES:BOOL=OFF BUILD_SHARED_LIBS:BOOL=OFF BUILD_TESTING:BOOL=ON + CMAKE_JOB_POOLS:STRING=link=1 + CMAKE_JOB_POOL_LINK:STRING=link CMAKE_CXX_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage CMAKE_C_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage CMAKE_EXE_LINKER_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage From d96d5dab31b29825eebadcefae11b2d43c55f8cb Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 26 Mar 2019 14:06:20 -0400 Subject: [PATCH 092/400] Add GetVoronoiMap to SignedDanielssonDistanceMap The added the additional output image as a measurement. --- .../json/SignedDanielssonDistanceMapImageFilter.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Code/BasicFilters/json/SignedDanielssonDistanceMapImageFilter.json b/Code/BasicFilters/json/SignedDanielssonDistanceMapImageFilter.json index 28e04f3a3..928ca9c2a 100644 --- a/Code/BasicFilters/json/SignedDanielssonDistanceMapImageFilter.json +++ b/Code/BasicFilters/json/SignedDanielssonDistanceMapImageFilter.json @@ -35,6 +35,17 @@ "detaileddescriptionGet" : "Get whether spacing is used." } ], + "measurements" : [ + { + "name" : "VoronoiMap", + "type" : "Image", + "default" : "Image()", + "custom_itk_cast" : "this->m_VoronoiMap = this->CastITKToImage(filter->GetVoronoiMap());", + "no_print" : true, + "briefdescriptionGet" : "", + "detaileddescriptionGet" : "Get Voronoi Map This map shows for each pixel what object is closest to it. Each object should be labeled by a number (larger than 0), so the map has a value for each pixel corresponding to the label of the closest object." + } + ], "tests" : [ { "tag" : "default", From 744d83b0971991c933d79a652b7cd862ca8ea0b6 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 26 Mar 2019 16:05:27 -0400 Subject: [PATCH 093/400] Updating utility script for Python 3 --- Utilities/GenerateDocs/GenerateDoc.py | 9 ++++----- Utilities/JSON/JSONBeautify.py | 15 ++++++--------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/Utilities/GenerateDocs/GenerateDoc.py b/Utilities/GenerateDocs/GenerateDoc.py index d6a7295fa..9e25f6cab 100755 --- a/Utilities/GenerateDocs/GenerateDoc.py +++ b/Utilities/GenerateDocs/GenerateDoc.py @@ -309,8 +309,7 @@ def format_description(xml_node, debug): if backup_flag: os.rename(sitk_json, sitk_json + ".BAK") - fp = io.open(sitk_json, "w", encoding='utf8') - json_string = json.dumps(json_obj, indent=2, separators=(u',', u' : '), ensure_ascii=False, encoding='utf8') - fp.write(json_string) - print (u"", file=fp) - fp.close() + with io.open(sitk_json, "w", encoding='utf8') as fp: + json_string = json.dumps(json_obj, indent=2, separators=(u',', u' : '), ensure_ascii=False) + fp.write(json_string) + print (u"", file=fp) diff --git a/Utilities/JSON/JSONBeautify.py b/Utilities/JSON/JSONBeautify.py index 4fb985e9b..352c0b690 100755 --- a/Utilities/JSON/JSONBeautify.py +++ b/Utilities/JSON/JSONBeautify.py @@ -12,14 +12,11 @@ fname = sys.argv[1] -print "Processing ", fname +print( "Processing ", fname) -fp = file( fname, "r" ) -j = json.load( fp,object_pairs_hook=OrderedDict ) -fp.close() +with open( fname, "r" ) as fp: + j = json.load( fp, object_pairs_hook=OrderedDict ) - -fp = file( fname, "w" ) -json.dump( j, fp, indent=2, separators=(',',' : ') ) -print >>fp, "" -fp.close() +with open( fname, "w" ) as fp: + json.dump( j, fp, indent=2, separators=(',',' : ') ) + print("", file=fp) From da8af993c567ae1c2d6ea480cc2ca040c2a76d6c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 1 Apr 2019 14:43:53 -0400 Subject: [PATCH 094/400] Azure CI enable wrapping with Python, Java, CSharp This enables testing of the examples and wrapping for these languages. --- Testing/CI/Azure/azure-pipelines.yml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 6e6fff96f..a2754f6c6 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -57,6 +57,13 @@ jobs: CTEST_OUTPUT_ON_FALURE: 1 DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + WRAP_JAVA:BOOL=ON workingDirectory: $(Agent.BuildDirectory) - script: | ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml @@ -101,7 +108,7 @@ jobs: addToPath: true - script: | python --version - sudo python -m pip install setuptools + sudo python -m pip install setuptools numpy sudo python -m pip install ninja scikit-ci-addons displayName: 'Install ninja dependency' - bash: | @@ -116,6 +123,14 @@ jobs: CTEST_OUTPUT_ON_FALURE: 1 DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + WRAP_PYTHON:BOOL=ON + WRAP_JAVA:BOOL=ON workingDirectory: $(Agent.BuildDirectory) - script: | ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml @@ -173,6 +188,13 @@ jobs: ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 CXXFLAGS: /MP CFLAGS: /MP + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + WRAP_CSHARP:BOOL=ON workingDirectory: $(Agent.BuildDirectory) - script: | ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml From ff7ee0a568b6ddf47aa76b9fc6d77140b4fd77ab Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 25 Mar 2019 15:00:24 -0400 Subject: [PATCH 095/400] Azure batch update VS20019 latest CMake --- Testing/CI/Azure/azure-pipelines-batch.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index 46e83d488..4fea95d34 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -22,9 +22,9 @@ jobs: displayName: Checkout pull request HEAD - bash: | set -x - # 3.14.0 is required for VS2019 by 3.14.0-rc3 does not detect the VS2019 installation - choco install cmake.portable --pre --version 3.14.0-rc2 - displayName: "Chocolatey install..." + # Atleast 3.14 is required for VS2019, install the latest + choco install cmake.portable + displayName: "Chocolatey install of CMake..." - bash: | git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard From f76fe650b4252aa7a928f778111f3af66e9a1abe Mon Sep 17 00:00:00 2001 From: Jens-Peter Tuppatsch Date: Sun, 14 Apr 2019 10:34:00 +0200 Subject: [PATCH 096/400] added files --- Examples/CSharp/CMakeLists.txt | 11 +++ .../CSharp/ConnectedThresholdSegmentation.cs | 94 +++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 Examples/CSharp/ConnectedThresholdSegmentation.cs diff --git a/Examples/CSharp/CMakeLists.txt b/Examples/CSharp/CMakeLists.txt index 70571a89e..94b717b41 100644 --- a/Examples/CSharp/CMakeLists.txt +++ b/Examples/CSharp/CMakeLists.txt @@ -12,3 +12,14 @@ sitk_add_csharp_test( Example.ImageGetBuffer DATA{${SimpleITK_DATA_ROOT}/Input/RA-Short.nrrd}) set_tests_properties( CSharp.Example.ImageGetBuffer PROPERTIES PASS_REGULAR_EXPRESSION "total: 1009713" ) + + sitk_add_csharp_test( Example.ConnectedThresholdSegmentation + "${CMAKE_CURRENT_SOURCE_DIR}/ConnectedThresholdSegmentation.cs" + DATA{${SimpleITK_DATA_ROOT}/Input/BrainProtonDensitySlice.png} + "${SimpleITK_TEST_OUTPUT_DIR}/CSharp.ConnectedThresholdOutput2.png" + 210 250 + 81 112 + IMAGE_MD5_COMPARE + "${SimpleITK_TEST_OUTPUT_DIR}/CSharp.ConnectedThresholdOutput2.png" + "a9695df04cde5b9c5481d8c253a5b3aa" + ) diff --git a/Examples/CSharp/ConnectedThresholdSegmentation.cs b/Examples/CSharp/ConnectedThresholdSegmentation.cs new file mode 100644 index 000000000..4a0e71ffc --- /dev/null +++ b/Examples/CSharp/ConnectedThresholdSegmentation.cs @@ -0,0 +1,94 @@ +/*========================================================================= + * + * Copyright Insight Software Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0.txt + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *=========================================================================*/ + + + +using System; +using System.Globalization; + +using PixelId = itk.simple.PixelIDValueEnum; +using SitkImage = itk.simple.Image; +using sitk = itk.simple; + +namespace itk.simple.examples +{ + public class Program + { + static void Main(string[] args) + { + if (args.Length < 6) + { + Console.WriteLine("Missing Parameters "); + Console.WriteLine("Usage: " + System.AppDomain.CurrentDomain.FriendlyName + + " inputImage outputImage" + + " lowerThreshold upperThreshold seedX seedY [seed2X seed2Y ... ]"); + return; + } + + string inputFilename = args[0]; + string outputFilename = args[1]; + + double lowerThreshold = double.Parse(args[2], CultureInfo.InvariantCulture); + double upperThreshold = double.Parse(args[3], CultureInfo.InvariantCulture); + + // + // Read the image + // + + SitkImage inputImage = SimpleITK.ReadImage(inputFilename, PixelIDValueEnum.sitkFloat32); + + // + // Blur using CurvatureFlowImageFilter + // + CurvatureFlowImageFilter blurFilter = new sitk.CurvatureFlowImageFilter(); + blurFilter.SetNumberOfIterations(5); + blurFilter.SetTimeStep(0.125); + inputImage = blurFilter.Execute(inputImage); + + + // + // Set up ConnectedThresholdImageFilter for segmentation + // + + ConnectedThresholdImageFilter segmentationFilter = new sitk.ConnectedThresholdImageFilter(); + segmentationFilter.SetLower(lowerThreshold); + segmentationFilter.SetUpper(upperThreshold); + segmentationFilter.SetReplaceValue(255); + + for (uint i = 4; i + 1 < args.Length; i += 2) + { + VectorUInt32 seed = new VectorUInt32(new uint[] { Convert.ToUInt32(args[i]), Convert.ToUInt32(args[i + 1]), 0 }); + segmentationFilter.AddSeed(seed); + Console.WriteLine("Adding a seed at: "); + for (int j = 0; j + 1 < seed.Count; j++) + { + Console.WriteLine(seed[j] + " "); + } + } + SitkImage outImage = segmentationFilter.Execute(inputImage); + + // + // Write out the resulting file + // + + SimpleITK.WriteImage(outImage, outputFilename); + + return; + } + } +} From 5869b32208b9cc7e3f95aeee3c72870bbb396ead Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 17 Apr 2019 12:51:31 -0400 Subject: [PATCH 097/400] Remove references to next branch in top-level ReadMe --- Readme.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index 459911148..c05816d2d 100644 --- a/Readme.md +++ b/Readme.md @@ -5,7 +5,6 @@ SimpleITK |:-------:|:---------:|:-------------:|:-------------:| | release | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=release)](http://simpleitk.readthedocs.io/en/release/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=release)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=release) | | master | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=master)](http://simpleitk.readthedocs.io/en/master/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=release)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=release) | -| next | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/next.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/next) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=next)](http://simpleitk.readthedocs.io/en/next/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=release)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=release) | SimpleITK is an image analysis toolkit with a large number of components supporting general filtering operations, image segmentation and registration. It is built on top of the Insight Segmentation and Registration Toolkit [ITK](https://www.itk.org) with the intent of providing a simplified interface to ITK. SimpleITK itself is written in C++ but is available for a large number of programming languages. Currently these include: @@ -42,7 +41,7 @@ Documentation ------------- With massive libraries like SimpleITK, good documentation is a must. The documentation for SimpleITK is split up into multiple levels: 1. [API Documentation](https://itk.org/SimpleITKDoxygen/html/) - This contains class and function documentation. The descriptions for functions and classes are primarily borrowed from the original ITK C++ classes. -2. [SimpleITK Documentation](http://simpleitk.readthedocs.io/en/next/) - This site contains high-level guides (fundamental SimpleITK concepts, common conventions, etc.), details with respect to the toolkit's binary distributions, instructions for building the toolkit, as well as SimpleITK examples in all supported programming languages. [This site replaced the +2. [SimpleITK Documentation](http://simpleitk.readthedocs.io/en/master/) - This site contains high-level guides (fundamental SimpleITK concepts, common conventions, etc.), details with respect to the toolkit's binary distributions, instructions for building the toolkit, as well as SimpleITK examples in all supported programming languages. [This site replaced the [SimpleITK Wiki](https://itk.org/Wiki/SimpleITK) which is mostly of interest for historical reasons.] 3. [Juypyter Notebook Repository](http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/) - This repository contains a collection of Jupyter Notebooks illustrating the use of SimpleITK for educational and research activities. The notebooks demonstrate the use of SimpleITK for interactive image analysis using the Python and R programming languages. Recommended reading, if you are starting with SimpleITK. From 81f2231ead688c0e30b50c4693322ee2808b2aa3 Mon Sep 17 00:00:00 2001 From: Ziv Yaniv Date: Wed, 17 Apr 2019 14:46:15 -0400 Subject: [PATCH 098/400] DOC: updating documenation for R installation. The previous instructions assumed R was run from the commnadline, so the path to installed R libraries was available from an environment variable. When running RStudio not from commandline, the path to the libraries was not set. The updated documenation works for commandline and just opening RStudio. --- Documentation/docs/source/building.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/docs/source/building.rst b/Documentation/docs/source/building.rst index 20397a876..316b85be7 100644 --- a/Documentation/docs/source/building.rst +++ b/Documentation/docs/source/building.rst @@ -297,13 +297,13 @@ your fellow users you can install the package in a local directory: mkdir my_R_libs -2. Add an environment variable to your .bashrc +2. In your home directory create a file named .Renviron with the following line .. code-block :: bash - export R_LIBS="/path_to/my_R_libs" + R_LIBS_USER="/path_to/my_R_libs" -3. source your .bashrc and check the R library path, in an R shell +3. Check that the R library paths include this directory, in an R shell or from RStudio: .. code-block :: R From 177fd77c2a82858214e8ac5c72613c5ac3ca32d6 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 17 Apr 2019 17:17:37 -0400 Subject: [PATCH 099/400] Azure remove fetch depth The whole git repository is needed to for git describe to work properly. The is addressed CMake warnings in sitkSourceVersion.cmake --- Testing/CI/Azure/azure-pipelines-batch.yml | 1 - Testing/CI/Azure/azure-pipelines.yml | 3 --- 2 files changed, 4 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index 4fea95d34..0fe8be74b 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -16,7 +16,6 @@ jobs: steps: - checkout: self clean: true - fetchDepth: 5 - script: | if DEFINED SYSTEM_PULLREQUEST_SOURCECOMMITID git checkout $(System.PullRequest.SourceCommitId) displayName: Checkout pull request HEAD diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index a2754f6c6..7ca48556d 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -19,7 +19,6 @@ jobs: steps: - checkout: self clean: true - fetchDepth: 5 - bash: | set -x if [ -n "$(System.PullRequest.SourceCommitId)" ]; then @@ -85,7 +84,6 @@ jobs: steps: - checkout: self clean: true - fetchDepth: 5 - bash: | set -x if [ -n "$(System.PullRequest.SourceCommitId)" ]; then @@ -152,7 +150,6 @@ jobs: steps: - checkout: self clean: true - fetchDepth: 5 - script: | if DEFINED SYSTEM_PULLREQUEST_SOURCECOMMITID git checkout $(System.PullRequest.SourceCommitId) displayName: Checkout pull request HEAD From caa5edd4cb0a8a15c4416948cffc084b481a3974 Mon Sep 17 00:00:00 2001 From: Peter petta123 Date: Sat, 30 Mar 2019 19:30:48 +0100 Subject: [PATCH 100/400] Add CSharpExample ImageReistrationMethod2 updated documentation.rst and cmakelist.txt --- .../ImageRegistrationMethod2/CMakeLists.txt | 11 +++ .../Documentation.rst | 6 ++ .../ImageRegistrationMethod2.cs | 99 +++++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100644 Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cs diff --git a/Examples/ImageRegistrationMethod2/CMakeLists.txt b/Examples/ImageRegistrationMethod2/CMakeLists.txt index 55fa34bfe..7cc6fdca6 100644 --- a/Examples/ImageRegistrationMethod2/CMakeLists.txt +++ b/Examples/ImageRegistrationMethod2/CMakeLists.txt @@ -18,6 +18,17 @@ sitk_add_test(NAME CXX.Example.ImageRegistrationMethod2 0.02 ) +sitk_add_csharp_test( Example.ImageRegistrationMethod2 + "${CMAKE_CURRENT_SOURCE_DIR}/ImageRegistrationMethod2.cs" + DATA{${SimpleITK_DATA_ROOT}/Input/BrainProtonDensitySliceBorder20.png} + DATA{${SimpleITK_DATA_ROOT}/Input/BrainProtonDensitySliceShifted13x17y.png} + ${SimpleITK_TEST_OUTPUT_DIR}/CSharpImageRegistrationMethod2Test.hdf5 + TRANSFORM_COMPARE + ${SimpleITK_TEST_OUTPUT_DIR}/CSharpImageRegistrationMethod2Test.hdf5 + DATA{${SimpleITK_DATA_ROOT}/Baseline/displacement_13x17y.mha} + 0.02 + ) + sitk_add_python_test( Example.ImageRegistrationMethod2 "${CMAKE_CURRENT_SOURCE_DIR}/ImageRegistrationMethod2.py" DATA{${SimpleITK_DATA_ROOT}/Input/BrainProtonDensitySliceBorder20.png} diff --git a/Examples/ImageRegistrationMethod2/Documentation.rst b/Examples/ImageRegistrationMethod2/Documentation.rst index 6033bb3ac..48abb584f 100644 --- a/Examples/ImageRegistrationMethod2/Documentation.rst +++ b/Examples/ImageRegistrationMethod2/Documentation.rst @@ -12,6 +12,12 @@ Code .. tabs:: + .. tab:: C# + + .. literalinclude:: ImageRegistrationMethod2.cs + :language: c# + :lines: 18- + .. tab:: C++ .. literalinclude:: ImageRegistrationMethod2.cxx diff --git a/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cs b/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cs new file mode 100644 index 000000000..2d9af63aa --- /dev/null +++ b/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cs @@ -0,0 +1,99 @@ +/*========================================================================= +* +* Copyright Insight Software Consortium +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0.txt +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*=========================================================================*/ + +using System; +using itk.simple; + +namespace itk.simple.examples +{ + + + class IterationUpdate : Command + { + + private ImageRegistrationMethod m_Method; + + public IterationUpdate(ImageRegistrationMethod m) + { + m_Method = m; + } + + public override void Execute() + { + VectorDouble pos = m_Method.GetOptimizerPosition(); + Console.WriteLine("{0:3} = {1:10.5} : [{2}, {3}]", + m_Method.GetOptimizerIteration(), + m_Method.GetMetricValue(), + pos[0], pos[1]); + } + } + + class ImageRegistrationMethod2 + { + + static void Main(string[] args) + { + + if (args.Length < 3) + { + Console.WriteLine("Usage: %s \n", "ImageRegistrationMethod2"); + return; + } + + ImageFileReader reader = new ImageFileReader(); + reader.SetOutputPixelType(PixelIDValueEnum.sitkFloat32); + + reader.SetFileName(args[0]); + Image fixedImage = reader.Execute(); + fixedImage = SimpleITK.Normalize(fixedImage); + SimpleITK.DiscreteGaussian(fixedImage, 2.0); + + reader.SetFileName(args[1]); + Image movingImage = reader.Execute(); + movingImage=SimpleITK.Normalize(movingImage); + movingImage = SimpleITK.DiscreteGaussian(movingImage, 2.0); + + ImageRegistrationMethod R = new ImageRegistrationMethod(); + R.SetMetricAsJointHistogramMutualInformation(); + + double learningRate = 1; + uint numberOfIterations = 200; + double convergenceMinimumValue = 1e-4; + uint convergenceWindowSize = 5; + + R.SetOptimizerAsGradientDescentLineSearch(learningRate, + numberOfIterations, + convergenceMinimumValue, + convergenceWindowSize); + + R.SetInitialTransform(new TranslationTransform(fixedImage.GetDimension())); + R.SetInterpolator(InterpolatorEnum.sitkLinear); + + IterationUpdate cmd = new IterationUpdate(R); + R.AddCommand(EventEnum.sitkIterationEvent, cmd); + + Transform outTx = R.Execute(fixedImage, movingImage); + + outTx.WriteTransform(args[2]); + + } + + } + +} + From 7092b67ce6d3c9276bd4ca1d372018b95d13d0c0 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 18 Apr 2019 13:15:19 -0400 Subject: [PATCH 101/400] Add CTest suppression for clang unused -ansi flag This warning occurs during compilation of SWIG. --- CMake/CTestCustom.cmake.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMake/CTestCustom.cmake.in b/CMake/CTestCustom.cmake.in index f8c470ed5..a97bdcdfe 100644 --- a/CMake/CTestCustom.cmake.in +++ b/CMake/CTestCustom.cmake.in @@ -55,6 +55,9 @@ SET(CTEST_CUSTOM_WARNING_EXCEPTION # Warning when compiling ITK v4.5.1 with clang "clang: warning: argument unused during.*-fno-ipa-cp-clone" + # Warning when compiling SWIG + "clang: warning: argument unused.*-ansi" + # Warning from RHEL5 GCC 4.1 about visibility change "warning: lowering visibility of .* to match its type" From fbbdabeeaee506302ff3367c1befb600c778312b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 25 Mar 2019 17:57:48 -0400 Subject: [PATCH 102/400] Add example for FastMarching Segmentation This example is derived from a simular ITK example. --- Examples/CMakeLists.txt | 1 + .../FastMarchingSegmentation/CMakeLists.txt | 20 ++++ .../FastMarchingSegmentation.cxx | 103 ++++++++++++++++++ .../FastMarchingSegmentation1.mha.sha512 | 1 + 4 files changed, 125 insertions(+) create mode 100644 Examples/FastMarchingSegmentation/CMakeLists.txt create mode 100644 Examples/FastMarchingSegmentation/FastMarchingSegmentation.cxx create mode 100644 Testing/Data/Baseline/FastMarchingSegmentation1.mha.sha512 diff --git a/Examples/CMakeLists.txt b/Examples/CMakeLists.txt index 83dd27a6d..abf6d6f4a 100644 --- a/Examples/CMakeLists.txt +++ b/Examples/CMakeLists.txt @@ -34,6 +34,7 @@ set(TEST_HARNESS_TEMP_DIRECTORY ${SimpleITK_BINARY_DIR}/Testing/Temporary) # Add example organized sub-directories with multiple languages add_subdirectory(HelloWorld) +add_subdirectory(FastMarchingSegmentation) add_subdirectory(SimpleGaussian) add_subdirectory(ImageRegistrationMethod1) add_subdirectory(ImageRegistrationMethod2) diff --git a/Examples/FastMarchingSegmentation/CMakeLists.txt b/Examples/FastMarchingSegmentation/CMakeLists.txt new file mode 100644 index 000000000..e74b7ec01 --- /dev/null +++ b/Examples/FastMarchingSegmentation/CMakeLists.txt @@ -0,0 +1,20 @@ + +add_executable ( FastMarchingSegmentation FastMarchingSegmentation.cxx ) +target_link_libraries ( FastMarchingSegmentation ${SimpleITK_LIBRARIES} ) + +if(NOT BUILD_TESTING) + return() +endif() + + +sitk_add_test(NAME CXX.Example.FastMarchingSegmentation1 + COMMAND + $ + DATA{${SimpleITK_DATA_ROOT}/Input/BrainProtonDensitySlice.png} + ${SimpleITK_TEST_OUTPUT_DIR}/CXXFastMarchingSegmentation1.mha + 81 114 1.0 -0.5 3.0 100 100 + IMAGE_COMPARE + ${SimpleITK_TEST_OUTPUT_DIR}/CXXFastMarchingSegmentation1.mha + DATA{${SimpleITK_DATA_ROOT}/Baseline/FastMarchingSegmentation1.mha} + 0.01 + ) diff --git a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cxx b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cxx new file mode 100644 index 000000000..c17691ae7 --- /dev/null +++ b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cxx @@ -0,0 +1,103 @@ +/*========================================================================= +* +* Copyright Insight Software Consortium +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0.txt +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*=========================================================================*/ + +// This example is based on ITK's FastMarchingImageFilter.cxx example + + +#include +#include +#include +#include + +namespace sitk = itk::simple; + + +int main(int argc, char *argv[]) +{ + + if ( argc < 10 ) + { + std::cerr << "Missing Parameters " << std::endl; + std::cerr << "Usage: " << argv[0]; + std::cerr << " inputImage outputImage seedX seedY"; + std::cerr << " Sigma SigmoidAlpha SigmoidBeta TimeThreshold" << std::endl; + + return EXIT_FAILURE; + } + + const std::string inputFilename(argv[1]); + const std::string outputFilename(argv[2]); + + unsigned int seedPosition[2]; + seedPosition[0] = atoi( argv[3] ); + seedPosition[1] = atoi( argv[4] ); + + const double sigma = atof( argv[5] ); + const double alpha = atof( argv[6] ); + const double beta = atof( argv[7] ); + const double timeThreshold = atof( argv[8] ); + + + sitk::Image inputImage = sitk::ReadImage( inputFilename, sitk::sitkFloat32 ); + + + sitk::CurvatureAnisotropicDiffusionImageFilter smoothing; + smoothing.SetTimeStep( 0.125 ); + smoothing.SetNumberOfIterations( 5 ); + smoothing.SetConductanceParameter( 9.0 ); + sitk::Image smoothingOutput = smoothing.Execute( inputImage ); + + sitk::GradientMagnitudeRecursiveGaussianImageFilter gradientMagnitude; + gradientMagnitude.SetSigma( sigma ); + sitk::Image gradientMagnitudeOutput = gradientMagnitude.Execute( smoothingOutput ); + + sitk::SigmoidImageFilter sigmoid; + sigmoid.SetOutputMinimum( 0.0 ); + sigmoid.SetOutputMaximum( 1.0 ); + sigmoid.SetAlpha( alpha ); + sigmoid.SetBeta( beta ); + sitk::Image sigmoidOutput = sigmoid.Execute( gradientMagnitudeOutput ); + + + sitk::FastMarchingImageFilter fastMarching; + + std::vector< unsigned int > trialPoint(3); + + + trialPoint[0] = seedPosition[0]; + trialPoint[1] = seedPosition[1]; + + trialPoint[2] = 0u; // Seed Value + + fastMarching.AddTrialPoint( trialPoint ); + + sitk::Image fastmarchingOutput = fastMarching.Execute( sigmoidOutput ); + + + sitk::BinaryThresholdImageFilter thresholder; + thresholder.SetLowerThreshold( 0.0 ); + thresholder.SetUpperThreshold( timeThreshold ); + thresholder.SetOutsideValue( 0 ); + thresholder.SetInsideValue( 255 ); + + sitk::Image result = thresholder.Execute(fastmarchingOutput); + + sitk::WriteImage(result, outputFilename); + + return 0; +} diff --git a/Testing/Data/Baseline/FastMarchingSegmentation1.mha.sha512 b/Testing/Data/Baseline/FastMarchingSegmentation1.mha.sha512 new file mode 100644 index 000000000..296146870 --- /dev/null +++ b/Testing/Data/Baseline/FastMarchingSegmentation1.mha.sha512 @@ -0,0 +1 @@ +9ae46bc6c40bb48e987ea5a40db2f8912ee19fb7fa0f665e1d720c3019ded89b4e2d7fef2a01061dfe3ca3c59cf26f2c0d2660bd9847cb6c77645e762dc5b7b4 From e0c0ba0b8e59f145939d1dc9751bc4a21f37d774 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 16 Apr 2019 13:52:22 -0400 Subject: [PATCH 103/400] Add FastMarching Python example --- .../FastMarchingSegmentation/CMakeLists.txt | 11 +++ .../FastMarchingSegmentation.py | 82 +++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100755 Examples/FastMarchingSegmentation/FastMarchingSegmentation.py diff --git a/Examples/FastMarchingSegmentation/CMakeLists.txt b/Examples/FastMarchingSegmentation/CMakeLists.txt index e74b7ec01..92d0d3d84 100644 --- a/Examples/FastMarchingSegmentation/CMakeLists.txt +++ b/Examples/FastMarchingSegmentation/CMakeLists.txt @@ -18,3 +18,14 @@ sitk_add_test(NAME CXX.Example.FastMarchingSegmentation1 DATA{${SimpleITK_DATA_ROOT}/Baseline/FastMarchingSegmentation1.mha} 0.01 ) + +sitk_add_python_test( Example.FastMarchingSegmentation1 + "${CMAKE_CURRENT_SOURCE_DIR}/FastMarchingSegmentation.py" + DATA{${SimpleITK_DATA_ROOT}/Input/BrainProtonDensitySlice.png} + ${SimpleITK_TEST_OUTPUT_DIR}/PythonFastMarchingSegmentation1.mha + 81 114 1.0 -0.5 3.0 100 100 + IMAGE_COMPARE + ${SimpleITK_TEST_OUTPUT_DIR}/PythonFastMarchingSegmentation1.mha + DATA{${SimpleITK_DATA_ROOT}/Baseline/FastMarchingSegmentation1.mha} + 0.01 + ) diff --git a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.py b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.py new file mode 100755 index 000000000..ec5179350 --- /dev/null +++ b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python +#========================================================================= +# +# Copyright Insight Software Consortium +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#========================================================================= + +from __future__ import print_function + +import SimpleITK as sitk +import sys +import os + +if len(sys.argv) < 4: + print("Usage: {0} ".format(sys.argv[0])) + sys.exit(1) + +inputFilename = sys.argv[1] +outputFilename = sys.argv[2] + +seedPosition = (int(sys.argv[3]), int(sys.argv[4])) + +sigma = float(sys.argv[5]) +alpha = float(sys.argv[6]) +beta = float(sys.argv[7]) +timeThreshold = float(sys.argv[8]) + +inputImage = sitk.ReadImage(inputFilename, sitk.sitkFloat32) + +print(inputImage) + +smoothing = sitk.CurvatureAnisotropicDiffusionImageFilter() +smoothing.SetTimeStep(0.125) +smoothing.SetNumberOfIterations(5) +smoothing.SetConductanceParameter(9.0) +smoothingOutput = smoothing.Execute(inputImage) + +gradientMagnitude = sitk.GradientMagnitudeRecursiveGaussianImageFilter() +gradientMagnitude.SetSigma(sigma) +gradientMagnitudeOutput = gradientMagnitude.Execute(smoothingOutput) + +sigmoid = sitk.SigmoidImageFilter() +sigmoid.SetOutputMinimum(0.0) +sigmoid.SetOutputMaximum(1.0) +sigmoid.SetAlpha(alpha) +sigmoid.SetBeta(beta) +sigmoid.DebugOn() +sigmoidOutput = sigmoid.Execute(gradientMagnitudeOutput) + + +fastMarching = sitk.FastMarchingImageFilter() + +seedValue = 0 +trialPoint = (seedPosition[0], seedPosition[1], seedValue) + + +fastMarching.AddTrialPoint(trialPoint) + +fastMarchingOutput = fastMarching.Execute(sigmoidOutput) + + +thresholder = sitk.BinaryThresholdImageFilter() +thresholder.SetLowerThreshold(0.0) +thresholder.SetUpperThreshold(timeThreshold) +thresholder.SetOutsideValue(0) +thresholder.SetInsideValue(255) + +result = thresholder.Execute(fastMarchingOutput) + +sitk.WriteImage(result, outputFilename) From 7a607b62dd464910ee1df8adf32683e7d13d8388 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 16 Apr 2019 15:16:09 -0400 Subject: [PATCH 104/400] Adding documentation file for fast marching example --- .../Documentation.rst | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Examples/FastMarchingSegmentation/Documentation.rst diff --git a/Examples/FastMarchingSegmentation/Documentation.rst b/Examples/FastMarchingSegmentation/Documentation.rst new file mode 100644 index 000000000..0fd8b7f7d --- /dev/null +++ b/Examples/FastMarchingSegmentation/Documentation.rst @@ -0,0 +1,63 @@ +Fast Marching Segmentation +========================== + + +Overview +-------- + +The fast marching method is a simple form of level-set evolution where +only a positive speed term is used to govern the differential +equation. The resulting level-set contour only grows over +time. Practically, this algorithm can be used as an advanced region +growing segmentation which is controlled by a speed image. + +A good propagation speed image for segmentation is close to zero +near object boundaries and relatively high in between. In this example, +an input feature image is smoothed with an `anisotropic +diffusion `_ +method, then the gradient magnitude is used to produce an edge +image. A Gaussian with a parameterized *sigma* is used during the +gradient computation to enable the level-set to slow down near +edges. The `Sigmoid filter +`_ +performs a linear transform on the gradient magnitude so that +boundaries are near zero and homogeneous regions are close to one. The +values for *alpha* and *beta* are provided in the testing code. The heuristics used to +estimate good values are dependent on the minimum value along a boundary +and the mean value of the gradient in the object's region. + +Lastly the `fast marching filter +`_ +is configured with an initial trial point and starting value. Each +trial point consists of a tuple for an image index including an optional +unsigned starting seed value at the trial point. The trial points are +the starting location of the level-set. The output of the fast +marching filter is a *time-crossing map* that indicate the time of +arrival of the propagated level-set front. We threshold the result to +the region the level-set front propagated through to form the +segmented object. A graphical interface can be constructed to show the +contour propagation over time, enabling a user to select a the desired +segmentation. + +Code +---- + +.. tabs:: + + .. tab:: C# + + .. literalinclude:: FastMarchingSegmentation.cs + :language: c# + :lines: 18- + + .. tab:: C++ + + .. literalinclude:: FastMarchingSegmentation.cxx + :language: C++ + :lines: 1,19- + + .. tab:: Python + + .. literalinclude:: FastMarchingSegmentation.py + :language: python + :lines: 1,19- From 4ab0554c81f67a252d35df606b90d24dc4d7a220 Mon Sep 17 00:00:00 2001 From: Ziv Yaniv Date: Sun, 21 Apr 2019 11:55:14 -0400 Subject: [PATCH 105/400] Adding link to EMBC tutorial/workshop. --- Documentation/docs/source/tutorialsAndCourses.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/docs/source/tutorialsAndCourses.rst b/Documentation/docs/source/tutorialsAndCourses.rst index 556f2c40d..854057b19 100644 --- a/Documentation/docs/source/tutorialsAndCourses.rst +++ b/Documentation/docs/source/tutorialsAndCourses.rst @@ -35,6 +35,7 @@ SimpleITK tutorials and courses have been given in the following venues: Upcoming ++++++++ +* IEEE Engineering in Medicine and Biology Conference (EMBC) 2019, Berlin Germany: `SimpleITK: A Tool for Biomedical Image Processing, from Cells to Anatomical Structures `__ . From bb314f74813636ae19d8a0b4346fe13a9761674b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 23 Apr 2019 11:46:03 -0400 Subject: [PATCH 106/400] Use Azure's image cmake The current version of the windows-2019 image has CMake 3.14.1 installed. Removing the chocolatey installed version. --- Testing/CI/Azure/azure-pipelines-batch.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index 0fe8be74b..e82f7a64e 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -19,11 +19,6 @@ jobs: - script: | if DEFINED SYSTEM_PULLREQUEST_SOURCECOMMITID git checkout $(System.PullRequest.SourceCommitId) displayName: Checkout pull request HEAD - - bash: | - set -x - # Atleast 3.14 is required for VS2019, install the latest - choco install cmake.portable - displayName: "Chocolatey install of CMake..." - bash: | git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard From b6fc7d230c316cf9c443411e92c846f515427076 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 23 Apr 2019 16:11:49 -0400 Subject: [PATCH 107/400] Adding the FastMarchingSegmentation example to sphix docs --- Examples/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/Examples/index.rst b/Examples/index.rst index d08ad5a02..29a3d5983 100644 --- a/Examples/index.rst +++ b/Examples/index.rst @@ -15,6 +15,7 @@ Examples DicomSeriesReader/Documentation DicomSeriesReadModifyWrite/Documentation DicomSeriesFromArray/Documentation + FastMarchingSegmentation/Documentation FilterProgressReporting/Documentation ImageGridManipulation/Documentation ImageRegistrationMethod1/Documentation From b67b7c975aca588b4867aa45194b2f48285eceec Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 19 Mar 2019 18:27:15 -0400 Subject: [PATCH 108/400] Wrap CannySegmentationLevelSetImageFilter --- .../CannySegmentationLevelSetImageFilter.json | 143 ++++++++++++++++++ ...tionLevelSetImageFilter_cthead.nrrd.sha512 | 1 + 2 files changed, 144 insertions(+) create mode 100644 Code/BasicFilters/json/CannySegmentationLevelSetImageFilter.json create mode 100644 Testing/Data/Baseline/BasicFilters_CannySegmentationLevelSetImageFilter_cthead.nrrd.sha512 diff --git a/Code/BasicFilters/json/CannySegmentationLevelSetImageFilter.json b/Code/BasicFilters/json/CannySegmentationLevelSetImageFilter.json new file mode 100644 index 000000000..37c9c2c0b --- /dev/null +++ b/Code/BasicFilters/json/CannySegmentationLevelSetImageFilter.json @@ -0,0 +1,143 @@ +{ + "name" : "CannySegmentationLevelSetImageFilter", + "template_code_filename" : "ImageFilter", + "template_test_filename" : "ImageFilter", + "number_of_inputs" : 2, + "pixel_types" : "RealPixelIDTypeList", + "filter_type" : "itk::CannySegmentationLevelSetImageFilter", + "custom_set_input" : "filter->SetInput( image1 ); filter->SetFeatureImage( image2 );", + "members" : [ + { + "name" : "Threshold", + "type" : "double", + "default" : "0.0", + "briefdescriptionSet" : "", + "detaileddescriptionSet" : "Set the Threshold parameter of the CannyEdgeDetectionImageFilter used by the underlying level set function.", + "briefdescriptionGet" : "", + "detaileddescriptionGet" : "Set the Threshold parameter of the CannyEdgeDetectionImageFilter used by the underlying level set function." + }, + { + "name" : "Variance", + "type" : "double", + "default" : "0.0", + "briefdescriptionSet" : "", + "detaileddescriptionSet" : "Set the Variance parameter of the CannyEdgeDetectionImageFilter used by the underlying level set function.", + "briefdescriptionGet" : "", + "detaileddescriptionGet" : "Set the Variance parameter of the CannyEdgeDetectionImageFilter used by the underlying level set function." + }, + { + "name" : "MaximumRMSError", + "type" : "double", + "default" : 0.02, + "doc" : "Value of RMS change below which the filter should stop. This is a convergence criterion." + }, + { + "name" : "PropagationScaling", + "type" : "double", + "default" : "1.0", + "doc" : "Weight of direct propagation contribution to the speed term" + }, + { + "name" : "CurvatureScaling", + "type" : "double", + "default" : "1.0", + "doc" : "Weight of the curvature contribution to the speed term" + }, + { + "name" : "AdvectionScaling", + "type" : "double", + "default" : "1.0", + "doc" : "Weight of the advection contribution to the speed term" + }, + { + "name" : "NumberOfIterations", + "type" : "uint32_t", + "default" : "1000u", + "doc" : "Number of iterations to run" + }, + { + "name" : "ReverseExpansionDirection", + "type" : "bool", + "default" : "false", + "doc" : "Turn On/Off the flag which determines whether Positive or Negative speed terms will cause surface expansion. If set to TRUE then negative speed terms will cause the surface to expand and positive speed terms will cause the surface to contract. If set to FALSE (default) then positive speed terms will cause the surface to expand and negative speed terms will cause the surface to contract. This method can be safely used to reverse the expansion/contraction as appropriate to a particular application or data set." + }, + { + "name" : "IsoSurfaceValue", + "type" : "double", + "default" : "0.0", + "doc" : "" + } + ], + "measurements" : [ + { + "name" : "ElapsedIterations", + "type" : "uint32_t", + "default" : 0, + "briefdescriptionGet" : "Number of iterations run." + }, + { + "name" : "RMSChange", + "type" : "double", + "default" : 0.0, + "briefdescriptionGet" : "The Root Mean Square of the levelset upon termination." + }, + { + "name" : "CannyImage", + "type" : "Image", + "default" : "Image()", + "custom_itk_cast" : "this->CastITKToImage(filter->GetCannyImage());", + "no_print" : true, + "briefdescriptionGet" : "", + "detaileddescriptionGet" : "Get the Canny image that was used to create the speed and advection images" + } + ], + "tests" : [ + { + "tag" : "cthead", + "description" : "segmentation around cerebellum in CT slice", + "settings" : [ + { + "parameter" : "Threshold", + "value" : "5.0" + }, + { + "parameter" : "Variance", + "value" : "1.0" + }, + { + "parameter" : "PropagationScaling", + "value" : "1.0" + }, + { + "parameter" : "CurvatureScaling", + "value" : "0.0" + }, + { + "parameter" : "AdvectionScaling", + "value" : "0.1" + } + ], + "tolerance" : 0.1, + "measurements_results" : [ + { + "name" : "ElapsedIterations", + "value" : 360, + "tolerance" : 10 + }, + { + "name" : "RMSChange", + "value" : 0.02, + "tolerance" : 0.001 + } + ], + "inputs" : [ + "Input/cthead1-ls-seed.nrrd", + "Input/cthead1-Float.mha" + ] + } + ], + "briefdescription" : "Segments structures in images based on image features derived from pseudo-canny-edges.", + "detaileddescription" : "\\par IMPORTANT\nThe SegmentationLevelSetImageFilter class and the CannySegmentationLevelSetFunction class contain additional information necessary to the full understanding of how to use this filter.\n\n\\par OVERVIEW\nThis class is a level set method segmentation filter. It constructs a speed function which is designed to lock onto edges as detected by a Canny filter.\n\n\\par \nThe CannySegmentationLevelSetImageFilter can be a tool for refining an existing segmentation, or it can be used to try to segment a region by itself. Like all other level-set based segmentation filters (see SegmentationLevelSetImageFilter ), it works by first constructing a scalar speed term and a vector advection field based on edge features in the image. The level set front is then moved according to these two terms with the addition of a third curvature term to contol the smoothness of the solution.\n\n\\par \nThe speed term is constructed as the Danielsson distance transform of the Canny edge image, as calculated by the CannyEdgeDetectionImageFilter . This scalar speed can be tuned in and out of the final evolution equation by setting the PropagationScaling parameter (a value of 0 removes the speed term).\n\n\\par \nThe advection field term is constructed by minimizing Danielsson distance squared. i.e. \\f$ \\mbox{min} \\int D^2 \\Rightarrow D \\nabla D \\f$ . This term moves the level set down the gradient of the distance transform.\n\n\\par \nIn practice, you may set the speed (propagation) term to zero if your initialization is already close to the edge you are interested in. If you are trying to segment a region by seeding with a small surface (blob, sphere) then you will likely want to add speed (propagation) to the equation so that the levelsets can expand along zero gradients. The relative influence of these two terms are controlled by the SetPropagationScaling and SetAdvectionScaling parameters.\n\n\\par INPUTS\nThis filter requires two inputs. The first input is a seed image. This seed image must contain an isosurface that you want to use as the seed for your segmentation. It can be a binary, graylevel, or floating point image. The only requirement is that it contain a closed isosurface that you will identify as the seed by setting the IsosurfaceValue parameter of the filter. For a binary image you will want to set your isosurface value halfway between your on and off values (i.e. for 0's and 1's, use an isosurface value of 0.5).\n\n\\par \nThe second input is the feature image. This is the image from which the speed function will be calculated. For most applications, this is the image that you want to segment. The desired isosurface in your seed image should lie within the region of your feature image that you are trying to segment.\n\n\\par \nSee SegmentationLevelSetImageFilter for more information on Inputs.\n\n\\par OUTPUTS\nThe filter outputs a single, scalar, real-valued image. Positive *values in the output image are inside the segmentated region and negative *values in the image are outside of the inside region. The zero crossings of *the image correspond to the position of the level set front.\n\n\\par \nSee SparseFieldLevelSetImageFilter and SegmentationLevelSetImageFilter for more information.\n\n\\par PARAMETERS\nThere are five parameters important for controlling the behavior of this filter. \n\n\\par \n(1) Threshold. Sets the thresholding value of the Canny edge detection. See CannyEdgeDetectionImageFilter for more information. \n\n\\par \n(2) Variance. Controls the smoothing parameter of the gaussian filtering done during Canny edge detection. \n\n\\par \n(3) CurvatureScaling. Controls the degree to which curvature influences the evolution of the level set. Higher values relative to Propagation and Advection scalings will yield a smoother surface. \n\n\\par \n(4) PropagationScaling. Scales the propagation (speed) term of the level set equation. Set this term to zero to allow the level set to flow only down the gradient of the distance transform. \n\n\\par \n(5) AdvectionScaling. Scales influence of the advection field relative to curvature and propagation terms.\n\n\\see SegmentationLevelSetImageFilter \n\n\\see CannySegmentationLevelSetFunction , \n\n\\see SparseFieldLevelSetImageFilter", + "itk_module" : "ITKLevelSets", + "itk_group" : "LevelSets" +} diff --git a/Testing/Data/Baseline/BasicFilters_CannySegmentationLevelSetImageFilter_cthead.nrrd.sha512 b/Testing/Data/Baseline/BasicFilters_CannySegmentationLevelSetImageFilter_cthead.nrrd.sha512 new file mode 100644 index 000000000..d0822c886 --- /dev/null +++ b/Testing/Data/Baseline/BasicFilters_CannySegmentationLevelSetImageFilter_cthead.nrrd.sha512 @@ -0,0 +1 @@ +f85805b77e010c4394aa4fde8e523a8d458b47838114d1bc3b9a2af1546dc42c9be62af77ec085cb1a67f9df69084f90132ab36b1acd28c9dc34d9a99e863248 From 563268ec3dbde42e911a7b0cd264a901c6a883af Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 23 Apr 2019 21:54:10 +0000 Subject: [PATCH 109/400] Updating level set segmentation filters to use named inputs --- .../CannySegmentationLevelSetImageFilter.json | 15 ++++++++++++--- .../GeodesicActiveContourLevelSetImageFilter.json | 13 +++++++++++-- .../LaplacianSegmentationLevelSetImageFilter.json | 13 +++++++++++-- .../json/ShapeDetectionLevelSetImageFilter.json | 13 +++++++++++-- .../ThresholdSegmentationLevelSetImageFilter.json | 13 +++++++++++-- 5 files changed, 56 insertions(+), 11 deletions(-) diff --git a/Code/BasicFilters/json/CannySegmentationLevelSetImageFilter.json b/Code/BasicFilters/json/CannySegmentationLevelSetImageFilter.json index 37c9c2c0b..d8791cb2e 100644 --- a/Code/BasicFilters/json/CannySegmentationLevelSetImageFilter.json +++ b/Code/BasicFilters/json/CannySegmentationLevelSetImageFilter.json @@ -2,10 +2,19 @@ "name" : "CannySegmentationLevelSetImageFilter", "template_code_filename" : "ImageFilter", "template_test_filename" : "ImageFilter", - "number_of_inputs" : 2, + "number_of_inputs" : 0, "pixel_types" : "RealPixelIDTypeList", "filter_type" : "itk::CannySegmentationLevelSetImageFilter", - "custom_set_input" : "filter->SetInput( image1 ); filter->SetFeatureImage( image2 );", + "inputs" : [ + { + "name" : "InitialImage", + "type" : "Image" + }, + { + "name" : "FeatureImage", + "type" : "Image" + } + ], "members" : [ { "name" : "Threshold", @@ -85,7 +94,7 @@ "name" : "CannyImage", "type" : "Image", "default" : "Image()", - "custom_itk_cast" : "this->CastITKToImage(filter->GetCannyImage());", + "custom_itk_cast" : "this->m_CannyImage = this->CastITKToImage(filter->GetCannyImage());", "no_print" : true, "briefdescriptionGet" : "", "detaileddescriptionGet" : "Get the Canny image that was used to create the speed and advection images" diff --git a/Code/BasicFilters/json/GeodesicActiveContourLevelSetImageFilter.json b/Code/BasicFilters/json/GeodesicActiveContourLevelSetImageFilter.json index 1d76f2605..3f15c1f2f 100644 --- a/Code/BasicFilters/json/GeodesicActiveContourLevelSetImageFilter.json +++ b/Code/BasicFilters/json/GeodesicActiveContourLevelSetImageFilter.json @@ -2,11 +2,20 @@ "name" : "GeodesicActiveContourLevelSetImageFilter", "template_code_filename" : "ImageFilter", "template_test_filename" : "ImageFilter", - "number_of_inputs" : 2, + "number_of_inputs" : 0, "doc" : "Level Set filter that uses propagation, curvature and advection terms.", "pixel_types" : "RealPixelIDTypeList", "filter_type" : "itk::GeodesicActiveContourLevelSetImageFilter", - "custom_set_input" : "filter->SetInput( image1 ); filter->SetFeatureImage( image2 );", + "inputs" : [ + { + "name" : "InitialImage", + "type" : "Image" + }, + { + "name" : "FeatureImage", + "type" : "Image" + } + ], "members" : [ { "name" : "MaximumRMSError", diff --git a/Code/BasicFilters/json/LaplacianSegmentationLevelSetImageFilter.json b/Code/BasicFilters/json/LaplacianSegmentationLevelSetImageFilter.json index ff07a5808..c9c503c22 100644 --- a/Code/BasicFilters/json/LaplacianSegmentationLevelSetImageFilter.json +++ b/Code/BasicFilters/json/LaplacianSegmentationLevelSetImageFilter.json @@ -2,10 +2,19 @@ "name" : "LaplacianSegmentationLevelSetImageFilter", "template_code_filename" : "ImageFilter", "template_test_filename" : "ImageFilter", - "number_of_inputs" : 2, + "number_of_inputs" : 0, "pixel_types" : "RealPixelIDTypeList", "filter_type" : "itk::LaplacianSegmentationLevelSetImageFilter", - "custom_set_input" : "filter->SetInput( image1 ); filter->SetFeatureImage( image2 );", + "inputs" : [ + { + "name" : "InitialImage", + "type" : "Image" + }, + { + "name" : "FeatureImage", + "type" : "Image" + } + ], "members" : [ { "name" : "MaximumRMSError", diff --git a/Code/BasicFilters/json/ShapeDetectionLevelSetImageFilter.json b/Code/BasicFilters/json/ShapeDetectionLevelSetImageFilter.json index 4c5bea68e..9f9411720 100644 --- a/Code/BasicFilters/json/ShapeDetectionLevelSetImageFilter.json +++ b/Code/BasicFilters/json/ShapeDetectionLevelSetImageFilter.json @@ -2,11 +2,20 @@ "name" : "ShapeDetectionLevelSetImageFilter", "template_code_filename" : "ImageFilter", "template_test_filename" : "ImageFilter", - "number_of_inputs" : 2, + "number_of_inputs" : 0, "doc" : "Level Set filter that uses propagation and curvature terms.", "pixel_types" : "RealPixelIDTypeList", "filter_type" : "itk::ShapeDetectionLevelSetImageFilter", - "custom_set_input" : "filter->SetInput( image1 ); filter->SetFeatureImage( image2 );", + "inputs" : [ + { + "name" : "InitialImage", + "type" : "Image" + }, + { + "name" : "FeatureImage", + "type" : "Image" + } + ], "members" : [ { "name" : "MaximumRMSError", diff --git a/Code/BasicFilters/json/ThresholdSegmentationLevelSetImageFilter.json b/Code/BasicFilters/json/ThresholdSegmentationLevelSetImageFilter.json index 4e9278df9..5d7415874 100644 --- a/Code/BasicFilters/json/ThresholdSegmentationLevelSetImageFilter.json +++ b/Code/BasicFilters/json/ThresholdSegmentationLevelSetImageFilter.json @@ -2,10 +2,19 @@ "name" : "ThresholdSegmentationLevelSetImageFilter", "template_code_filename" : "ImageFilter", "template_test_filename" : "ImageFilter", - "number_of_inputs" : 2, + "number_of_inputs" : 0, "pixel_types" : "RealPixelIDTypeList", "filter_type" : "itk::ThresholdSegmentationLevelSetImageFilter", - "custom_set_input" : "filter->SetInput( image1 ); filter->SetFeatureImage( image2 );", + "inputs" : [ + { + "name" : "InitialImage", + "type" : "Image" + }, + { + "name" : "FeatureImage", + "type" : "Image" + } + ], "members" : [ { "name" : "LowerThreshold", From 0aa73781066185ef41ee6b9eea06a4d6c789ea80 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 24 Apr 2019 11:41:20 -0400 Subject: [PATCH 110/400] Create Aruze template step for code checkout This template step does the checkout with a standard task, then checkouts out the actual commit. Next it checkout the dashboard branch and downloads a recent data tarball. --- Testing/CI/Azure/azure-pipelines-batch.yml | 19 +------ Testing/CI/Azure/azure-pipelines-coverage.yml | 31 +----------- Testing/CI/Azure/azure-pipelines.yml | 50 ++----------------- .../CI/Azure/templates/git-download-steps.yml | 33 ++++++++++++ 4 files changed, 40 insertions(+), 93 deletions(-) create mode 100644 Testing/CI/Azure/templates/git-download-steps.yml diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index e82f7a64e..0be3c5ccc 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -14,19 +14,7 @@ jobs: vmImage: 'windows-2019' steps: - - checkout: self - clean: true - - script: | - if DEFINED SYSTEM_PULLREQUEST_SOURCECOMMITID git checkout $(System.PullRequest.SourceCommitId) - displayName: Checkout pull request HEAD - - bash: | - git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - - curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E rename "SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5" "$(Build.SourcesDirectory)/.ExternalData/MD5" - displayName: Download dashboard scripts and testing data - workingDirectory: $(Agent.BuildDirectory) + - template: templates/git-download-steps.yml - script: | cmake --version ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V @@ -66,10 +54,7 @@ jobs: workspace: clean: all steps: - - script: | - git clone -b dashboard --single-branch $(Build.Repository.Uri) SimpleITK-dashboard - displayName: Download dashboard scripts and testing data - workingDirectory: $(Agent.BuildDirectory) + - template: templates/git-download-steps.yml - script: | [[ ! -z "$(env_file)" ]] && source $(env_file) cmake --version diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml index 19574808a..455163320 100644 --- a/Testing/CI/Azure/azure-pipelines-coverage.yml +++ b/Testing/CI/Azure/azure-pipelines-coverage.yml @@ -19,23 +19,7 @@ jobs: workspace: clean: all steps: - - checkout: self - clean: true - fetchDepth: 5 - - bash: | - set -x - if [ -n "$(System.PullRequest.SourceCommitId)" ]; then - git checkout $(System.PullRequest.SourceCommitId) - fi - - bash: | - set -x - git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - - curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 - displayName: Download dashboard scripts and testing data - workingDirectory: $(Agent.BuildDirectory) + - template: templates/git-download-steps.yml - bash: | ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake displayName: Build and test with coverage @@ -71,18 +55,7 @@ jobs: workspace: clean: all steps: - - checkout: self - clean: true - fetchDepth: 5 - - bash: | - set -x - if [ -n "$(System.PullRequest.SourceCommitId)" ]; then - git checkout $(System.PullRequest.SourceCommitId) - fi - - script: | - git clone -b dashboard --single-branch $(Build.Repository.Uri) SimpleITK-dashboard - displayName: Download dashboard scripts and testing data - workingDirectory: $(Agent.BuildDirectory) + - template: templates/git-download-steps.yml - script: | [[ ! -z "$(env_file)" ]] && source $(env_file) cmake --version diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 7ca48556d..5bef88992 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -17,22 +17,7 @@ jobs: vmImage: 'Ubuntu-16.04' steps: - - checkout: self - clean: true - - bash: | - set -x - if [ -n "$(System.PullRequest.SourceCommitId)" ]; then - git checkout $(System.PullRequest.SourceCommitId) - fi - - bash: | - set -x - git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - - curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 - displayName: Download dashboard scripts and testing data - workingDirectory: $(Agent.BuildDirectory) + - template: templates/git-download-steps.yml - task: UsePythonVersion@0 displayName: Enable Python inputs: @@ -82,22 +67,7 @@ jobs: vmImage: 'macOS-10.13' steps: - - checkout: self - clean: true - - bash: | - set -x - if [ -n "$(System.PullRequest.SourceCommitId)" ]; then - git checkout $(System.PullRequest.SourceCommitId) - fi - - bash: | - set -x - git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - - curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E rename SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5 $(Build.SourcesDirectory)/.ExternalData/MD5 - displayName: Download dashboard scripts and testing data - workingDirectory: $(Agent.BuildDirectory) + - template: templates/git-download-steps.yml - task: UsePythonVersion@0 displayName: Enable Python inputs: @@ -146,22 +116,8 @@ jobs: cancelTimeoutInMinutes: 300 pool: vmImage: 'vs2017-win2016' - steps: - - checkout: self - clean: true - - script: | - if DEFINED SYSTEM_PULLREQUEST_SOURCECOMMITID git checkout $(System.PullRequest.SourceCommitId) - displayName: Checkout pull request HEAD - - bash: | - set -x - git clone -b dashboard --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard - - curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz - cmake -E rename "SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5" "$(Build.SourcesDirectory)/.ExternalData/MD5" - displayName: Download dashboard scripts and testing data - workingDirectory: $(Agent.BuildDirectory) + - template: templates/git-download-steps.yml - task: UsePythonVersion@0 displayName: Enable Python inputs: diff --git a/Testing/CI/Azure/templates/git-download-steps.yml b/Testing/CI/Azure/templates/git-download-steps.yml new file mode 100644 index 000000000..959271154 --- /dev/null +++ b/Testing/CI/Azure/templates/git-download-steps.yml @@ -0,0 +1,33 @@ +parameters: + downloadData: True # defaults for any parameters that aren't specified + +steps: + - checkout: self + clean: true + - ${{ if ne(variables['Agent.OS'], 'Windows_NT') }}: + - bash: | + set -x + if [ -n "$(System.PullRequest.SourceCommitId)" ]; then + git checkout $(System.PullRequest.SourceCommitId) + fi + displayName: Checkout pull request HEAD + - bash: | + set -x + git clone -b dashboard --depth 1 --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + displayName: Download dashboard scripts and testing data + workingDirectory: $(Agent.BuildDirectory) + - ${{ if eq(variables['Agent.OS'], 'Windows_NT') }}: + - script: | + if DEFINED SYSTEM_PULLREQUEST_SOURCECOMMITID git checkout $(System.PullRequest.SourceCommitId) + displayName: Checkout pull request HEAD + - script: | + git clone -b dashboard --depth 1 --single-branch ${BUILD_REPOSITORY_URI} SimpleITK-dashboard + workingDirectory: $(Agent.BuildDirectory) + displayName: 'Download dashboard script' + - ${{ if parameters.downloadData }}: + - script: | + curl -L -O https://github.com/SimpleITK/SimpleITK/releases/download/v$(ExternalDataVersion)/SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E tar xfz SimpleITKData-$(ExternalDataVersion).tar.gz + cmake -E rename "SimpleITK-$(ExternalDataVersion)/.ExternalData/MD5" "$(Build.SourcesDirectory)/.ExternalData/MD5" + workingDirectory: $(Agent.BuildDirectory) + displayName: 'Download test data' From 3c07266e1f61c9d3b27e03fff8d460becab13cd4 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 25 Apr 2019 11:02:38 -0400 Subject: [PATCH 111/400] Fix empty CTEST_CACHE environment variable The yaml ctest.cache was conflicting and overriding the CTEST_CACHE environment variable. --- Testing/CI/Azure/azure-pipelines-batch.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index 0be3c5ccc..111df7f62 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -4,7 +4,7 @@ trigger: - release variables: ExternalDataVersion: 1.2.0 - ctest.cache: '' + ctest.cache_extra: '' pr: none jobs: - job: VS2019 @@ -38,7 +38,7 @@ jobs: matrix: default: {} ITK-master: - ctest.cache: | + ctest.cache_extra: | ITK_GIT_TAG:STRING=master CMAKE_CXX_STANDARD:STRING=11 devtools-3: @@ -74,5 +74,5 @@ jobs: WRAP_DEFAULT:BOOL=ON CMAKE_CXX_COMPILER_LAUNCHER=/usr/bin/ccache CMAKE_C_COMPILER_LAUNCHER=/usr/bin/ccache - $(ctest.cache) + $(ctest.cache_extra) workingDirectory: $(Agent.BuildDirectory) From d633e406fe02325bb4702c28e380110a069decf1 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 24 Apr 2019 16:51:55 -0400 Subject: [PATCH 112/400] Testing XCode matrix for build --- .circleci/circleci.cmake | 99 ------ .circleci/config.yml | 358 --------------------- Testing/CI/Azure/azure-pipelines-batch.yml | 78 ----- Testing/CI/Azure/azure-pipelines.yml | 208 ++++-------- 4 files changed, 54 insertions(+), 689 deletions(-) delete mode 100644 .circleci/circleci.cmake delete mode 100644 .circleci/config.yml delete mode 100644 Testing/CI/Azure/azure-pipelines-batch.yml diff --git a/.circleci/circleci.cmake b/.circleci/circleci.cmake deleted file mode 100644 index 82cf38c4b..000000000 --- a/.circleci/circleci.cmake +++ /dev/null @@ -1,99 +0,0 @@ - -# set_from_env -# ------------ -# -# Sets a CMake variable from an environment variable. If the -# environment variable is not defined then either a fatal error is -# generated or the CMake variable is not modified. -# -# set_from_env( [REQUIRED|DEFAULT value] ) -function(set_from_env var env_var) - if(NOT DEFINED ENV{${env_var}}) - if (ARGV2 STREQUAL "REQUIRED") - message(FATAL_ERROR "Required environment variable \"${env_var}\" not defined.") - elseif (ARGV2 STREQUAL "DEFAULT") - set(${var} ${ARGV3} PARENT_SCOPE) - endif() - else() - set(${var} $ENV{${env_var}} PARENT_SCOPE) - endif() -endfunction() - -set(CTEST_SITE "CircleCI") -set(CTEST_UPDATE_VERSION_ONLY 1) - - -# Make environment variables to CMake variables for CTest -set_from_env(CTEST_CMAKE_GENERATOR "CTEST_CMAKE_GENERATOR" DEFAULT "Unix Makefiles" ) -set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY") -set_from_env(CTEST_DASHBOARD_ROOT "CTEST_DASHBOARD_ROOT" REQUIRED) -set_from_env(CTEST_SOURCE_DIRECTORY "CTEST_SOURCE_DIRECTORY" REQUIRED) -set_from_env(CTEST_CONFIGURATION_TYPE "CTEST_CONFIGURATION_TYPE" DEFAULT "Release") -set_from_env(CTEST_BUILD_FLAGS "CTEST_BUILD_FLAGS") -set_from_env(CTEST_BUILD_TARGET "CTEST_BUILD_TARGET") -set_from_env(CTEST_TEST_ARGS "CTEST_TEST_ARGS") - - -set_from_env(PARALLEL_LEVEL "PARALLEL_LEVEL" DEFAULT 2 ) -set( CTEST_TEST_ARGS ${CTEST_TEST_ARGS} PARALLEL_LEVEL ${PARALLEL_LEVEL}) - -set_from_env(DASHBOARD_BRANCH_DIRECTORY "DASHBOARD_BRANCH_DIRECTORY" REQUIRED) - -# Construct build name based on what is being built -string(SUBSTRING $ENV{CIRCLE_SHA1} 0 7 commit_sha1) -set(CTEST_BUILD_NAME "CircleCI-$ENV{CIRCLE_BRANCH}-$ENV{CIRCLE_STAGE}-${commit_sha1}") - -set_from_env(dashboard_git_branch "CIRCLE_BRANCH") -set_from_env(dashboard_model "DASHBOARD_MODEL" DEFAULT "Experimental" ) -set(dashboard_loop 0) - - -if ( EXISTS "${CTEST_SOURCE_DIRECTORY}/circle.yml") - list(APPEND CTEST_NOTES_FILES - "${CTEST_SOURCE_DIRECTORY}/circle.yml" - ) -endif() - -if ( EXISTS "${CTEST_SOURCE_DIRECTORY}/.circleci/config.yml") - list(APPEND CTEST_NOTES_FILES - "${CTEST_SOURCE_DIRECTORY}/.circleci/config.yml" - ) -endif() - - -SET (_dashboard_cache " - BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=OFF - BUILD_SHARED_LIBS:BOOL=ON - BUILD_TESTING:BOOL=ON - - SimpleITK_USE_SYSTEM_LUA:BOOL=ON - SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF - - WRAP_DEFAULT:BOOL=OFF -" ) - -set_from_env(dashboard_cache "CTEST_CACHE" DEFAULT ${_dashboard_cache}) - - -if (DEFINED ENV{DISTCC_DIR}) - SET (dashboard_cache "${dashboard_cache} - CMAKE_CXX_COMPILER_LAUNCHER:STRING=distcc - CMAKE_C_COMPILER_LAUNCHER:STRING=distcc -" ) -endif() - - - -include("${DASHBOARD_BRANCH_DIRECTORY}/simpleitk_common.cmake") - -if(NOT ${configure_return} EQUAL 0 OR - NOT ${build_return} EQUAL 0 OR - NOT ${build_errors} EQUAL 0 OR - NOT ${build_warnings} EQUAL 0 OR - NOT ${test_return} EQUAL 0) - message(FATAL_ERROR - "Build did not complete without warnings, errors, or failures.") -else() - return(0) -endif() diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 7173bd6e1..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,358 +0,0 @@ -referenced: - defaults: &defaults - docker: - - image: circleci/python:2.7-stretch - working_directory: ~/ - resource_class: large - default_environment_keys: &default_environment - <<: &default_environment_keys - CTEST_DASHBOARD_ROOT: /home/circleci - CTEST_SOURCE_DIRECTORY: /home/circleci/SimpleITK - CTEST_BINARY_DIRECTORY: /home/circleci/SimpleITK-build - ROOT_BINARY_DIRECTORY: /home/circleci/SimpleITK-build - CTEST_BUILD_FLAGS: "-j 4" - CTEST_CONFIGURATION_TYPE: "Release" - CTEST_OUTPUT_ON_FAILURE: 1 - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - PARALLEL_LEVEL: 4 - DASHBOARD_BRANCH_DIRECTORY: /home/circleci/dashboard - ExternalData_OBJECT_STORES: /home/circleci/.ExternalData - CCACHE_NODIRECT: 1 - dependencies: &dependencies - run: - name: Dependencies - command: | - sudo apt-get install -y rsync lua5.1 ccache kwstyle - sudo python -m pip install --upgrade pip - sudo python -m pip install scikit-ci-addons # Provides "ctest_junit_formatter" add-on - sudo python -m pip install cmake==3.13.3 - generate-hash-step: &generate-hash-step - run: - name: Generate external data hash - command: | - cd SimpleITK - git log -n 1 ${CTEST_SOURCE_DIRECTORY}/Testing/Data/ | tee /home/circleci/external-data.hashable - restore-data-step: &restore-data-step - restore_cache: - keys: - - 'v1-external-data-{{ checksum "/home/circleci/external-data.hashable" }}' - - 'v1-external-data' - restore-ccache-step: &restore-ccache-step - restore_cache: - keys: - - ccache-{{ arch }}-{{ .Branch }} - - ccache-{{ arch }}-master - clone-dashboard-step: &clone-dashboard-step - run: - name: Cloning dashboard branch - command: | - git clone --single-branch ${CIRCLE_REPOSITORY_URL} -b dashboard ${DASHBOARD_BRANCH_DIRECTORY} - env-step: &env-step - run: - name: Additional Environment Variables - command: | - echo 'export DASHBOARD_MODEL=$( [[ "$CIRCLE_BRANCH" = "master" || "$CIRCLE_BRANCH" = "next" || "$CIRCLE_BRANCH" = "release" ]] && echo Continuous || echo Experimental )' >> $BASH_ENV - echo 'export PATH=/usr/lib/ccache:${PATH}' >> $BASH_ENV - junit-fotmatting: &junit-fotmatting - run: - name: Formatting CTest for JUnit - when: always - command: | - env - mkdir -p /tmp/test-results - ci_addons ctest_junit_formatter ${CTEST_BINARY_DIRECTORY} > /tmp/test-results/JUnit-${CIRCLE_NODE_INDEX}.xml - junit-store-test-results: &junit-store-test-results - store_test_results: - path: /tmp/test-results - destination: ctest - -version: 2 -jobs: - build-and-test: - <<: *defaults - environment: - <<: *default_environment_keys - steps: - - checkout: - path : ~/SimpleITK - - *generate-hash-step - - *restore-data-step - - *restore-ccache-step - - *clone-dashboard-step - - *dependencies - - *env-step - - run: - name: CCache initialization - command: | - ccache --show-stats - ccache --zero-stats - ccache --max-size=2.0G - - run: - name: Build and Testing with CTest - no_output_timeout: 20.0m - command: | - export LD_LIBRARY_PATH="${ROOT_BINARY_DIRECTORY}/ITK-prefix/lib/:${ROOT_BINARY_DIRECTORY}/SimpleITK-build/lib" - export CTEST_CACHE=" - BUILD_EXAMPLES:BOOL=OFF - BUILD_SHARED_LIBS:BOOL=ON - - SimpleITK_USE_SYSTEM_LUA:BOOL=ON - SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF - - WRAP_DEFAULT:BOOL=OFF" - ctest -V -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake" - - run: - name: ccache stats - when: always - command: | - ccache --show-stats - - *junit-fotmatting - - *junit-store-test-results - - save_cache: - key: 'ccache-{{ arch }}-{{ .Branch }}-{{ epoch }}' - paths: [ "/home/circleci/.ccache" ] - - save_cache: - key: 'v1-external-data-{{ checksum "/home/circleci/external-data.hashable" }}' - paths: [ "/home/circleci/.ExternalData" ] - - run: - name: Cleanup build - command: | - rm -rf "${CTEST_BINARY_DIRECTORY}/ITK" "${CTEST_BINARY_DIRECTORY}/ITK-build" - rm -rf "${CTEST_BINARY_DIRECTORY}/SimpleITK" "${CTEST_BINARY_DIRECTORY}/SimpleITK-build" - - persist_to_workspace: - root: /home/circleci/SimpleITK-build - paths: - - "*" - python2.7-and-test: - <<: *defaults - environment: - <<: *default_environment_keys - CTEST_BUILD_FLAGS: "-j 2" - PARALLEL_LEVEL: 2 - CTEST_BINARY_DIRECTORY: "/home/circleci/SimpleITK-py" - resource_class: medium - steps: - - checkout: - path : ~/SimpleITK - - *generate-hash-step - - *restore-data-step - - *clone-dashboard-step - - *dependencies - - *env-step - - run: - name: Additional Dependencies - command: | - python --version - sudo pip install numpy - - attach_workspace: - at: /home/circleci/SimpleITK-build - - run: - name: Build Python and Testing with CTest - no_output_timeout: 20.0m - command: | - env - export LD_LIBRARY_PATH="${ROOT_BINARY_DIRECTORY}/ITK-prefix/lib/:${ROOT_BINARY_DIRECTORY}/lib" - export CTEST_CACHE=" - CMAKE_PREFIX_PATH:PATH=${ROOT_BINARY_DIRECTORY} - SWIG_EXECUTABLE:PATH=${ROOT_BINARY_DIRECTORY}/Swig/bin/swig - BUILD_EXAMPLES:BOOL=ON" - ctest -V -Ddashboard_source_config_dir:PATH="Wrapping/Python" -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake" - - *junit-fotmatting - - *junit-store-test-results - python3.6-and-test: - <<: *defaults - docker: - - image: circleci/python:3.6-stretch - environment: - <<: *default_environment_keys - CTEST_BUILD_FLAGS: "-j 2" - PARALLEL_LEVEL: 2 - CTEST_BINARY_DIRECTORY: "/home/circleci/SimpleITK-py" - resource_class: medium - steps: - - checkout: - path : ~/SimpleITK - - *generate-hash-step - - *restore-data-step - - *clone-dashboard-step - - *dependencies - - *env-step - - run: - name: Additional Dependencies - command: | - python --version - sudo pip install numpy - - attach_workspace: - at: /home/circleci/SimpleITK-build - - run: - name: Build Python and Testing with CTest - no_output_timeout: 20.0m - command: | - env - export LD_LIBRARY_PATH="${ROOT_BINARY_DIRECTORY}/ITK-prefix/lib/:${ROOT_BINARY_DIRECTORY}/lib" - export CTEST_CACHE=" - CMAKE_PREFIX_PATH:PATH=${ROOT_BINARY_DIRECTORY} - SWIG_EXECUTABLE:PATH=${ROOT_BINARY_DIRECTORY}/Swig/bin/swig - BUILD_EXAMPLES:BOOL=ON" - ctest -V -Ddashboard_source_config_dir:PATH="Wrapping/Python" -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake" - - *junit-fotmatting - - *junit-store-test-results - r-and-test: - <<: *defaults - resource_class: medium - environment: - <<: *default_environment_keys - CTEST_BUILD_FLAGS: "-j 2" - PARALLEL_LEVEL: 2 - CTEST_BINARY_DIRECTORY: "/home/circleci/SimpleITK-R" - steps: - - checkout: - path : ~/SimpleITK - - *generate-hash-step - - *restore-data-step - - *clone-dashboard-step - - *dependencies - - *env-step - - run: - name: Additional Dependencies - command: | - sudo apt-get update -y - sudo apt-get -y install dirmngr apt-transport-https software-properties-common - sudo apt-key adv --keyserver http://keyserver.ubuntu.com --recv-key 'E19F5F87128899B192B1A2C2AD5F960A256A04AF' - sudo add-apt-repository -y "deb https://cloud.r-project.org/bin/linux/debian stretch-cran35/" - sudo apt-get update -y - sudo apt-get install -y r-base r-base-dev - - attach_workspace: - at: /home/circleci/SimpleITK-build - - run: - name: Build R and Testing with CTest - no_output_timeout: 20.0m - command: | - export LD_LIBRARY_PATH="${ROOT_BINARY_DIRECTORY}/ITK-prefix/lib/:${ROOT_BINARY_DIRECTORY}/lib" - export CTEST_CACHE=" - CMAKE_PREFIX_PATH:PATH=${ROOT_BINARY_DIRECTORY} - SWIG_EXECUTABLE:PATH=${ROOT_BINARY_DIRECTORY}/Swig/bin/swig - BUILD_EXAMPLES:BOOL=ON" - ctest -V -Ddashboard_source_config_dir:PATH="Wrapping/R" -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake" - - *junit-fotmatting - - *junit-store-test-results - java-and-test: - <<: *defaults - docker: - - image: circleci/openjdk:8-jdk-stretch - resource_class: medium - environment: - <<: *default_environment_keys - CTEST_BUILD_FLAGS: "-j 2" - PARALLEL_LEVEL: 2 - CTEST_BINARY_DIRECTORY: "/home/circleci/SimpleITK-Java" - steps: - - checkout: - path : ~/SimpleITK - - *generate-hash-step - - *restore-data-step - - *clone-dashboard-step - - run: - name: Prerequisite Dependencies - command: | - sudo apt-get install -y python-pip - - *dependencies - - *env-step - - run: - name: Additional Dependencies - command: | - echo "none" - - attach_workspace: - at: /home/circleci/SimpleITK-build - - run: - name: Build Java and Testing with CTest - no_output_timeout: 20.0m - command: | - export LD_LIBRARY_PATH="${ROOT_BINARY_DIRECTORY}/ITK-prefix/lib/:${ROOT_BINARY_DIRECTORY}/lib" - export CTEST_CACHE=" - CMAKE_PREFIX_PATH:PATH=${ROOT_BINARY_DIRECTORY} - SWIG_EXECUTABLE:PATH=${ROOT_BINARY_DIRECTORY}/Swig/bin/swig - BUILD_EXAMPLES:BOOL=ON" - ctest -V -Ddashboard_source_config_dir:PATH="Wrapping/Java" -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake" - - *junit-fotmatting - - *junit-store-test-results - docs: - <<: *defaults - environment: - <<: *default_environment_keys - steps: - - checkout: - path : ~/SimpleITK - - *generate-hash-step - - *restore-data-step - - *restore-ccache-step - - *clone-dashboard-step - - *dependencies - - *env-step - - run: - name: Additional Dependencies - command: | - sudo apt-get install -y doxygen - - run: - name: Building and Generating Doxygen - no_output_timeout: 20.0m - command: | - export CTEST_BUILD_TARGET=SimpleITK-doc - export CTEST_CACHE=" - BUILD_SHARED_LIBS:BOOL=ON - WRAP_DEFAULT=OFF - BUILD_DOXYGEN=ON - SimpleITK_USE_SYSTEM_LUA:BOOL=ON" - ctest -V -Ddashboard_no_test:BOOL=1\ - -Ddashboard_track:BOOL=Doxygen\ - -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake" - - run: - name: Archiving directory for artifact - command: | - cd ${CTEST_BINARY_DIRECTORY}/SimpleITK-build/Documentation/ - tar -zcvf simpleitk_doxygen_html.tar.gz html - - store_artifacts: - path: /home/circleci/SimpleITK-build/SimpleITK-build/Documentation/simpleitk_doxygen_html.tar.gz -workflows: - version: 2 - build_and_test: - jobs: - - build-and-test: - filters: - branches: - ignore: - - gh-pages - - dashboard - - hooks - - python2.7-and-test: - requires: - - build-and-test - filters: - branches: - ignore: next - - python3.6-and-test: - requires: - - build-and-test - - r-and-test: - requires: - - build-and-test - filters: - branches: - ignore: next - - java-and-test: - requires: - - build-and-test - filters: - branches: - ignore: next - - nightly: - triggers: - - schedule: - cron: "0 3 * * *" - filters: - branches: - only: - - master - jobs: - - docs diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml deleted file mode 100644 index 0be3c5ccc..000000000 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ /dev/null @@ -1,78 +0,0 @@ -trigger: - - - master - - release -variables: - ExternalDataVersion: 1.2.0 - ctest.cache: '' -pr: none -jobs: - - job: VS2019 - timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 - pool: - vmImage: 'windows-2019' - - steps: - - template: templates/git-download-steps.yml - - script: | - cmake --version - ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V - displayName: Build and test - workingDirectory: $(Agent.BuildDirectory) - env: - CTEST_CONFIGURATION_TYPE: MinSizeRel - CTEST_CMAKE_GENERATOR: "Visual Studio 16 2019" - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - CXXFLAGS: /MP - CFLAGS: /MP - - - job: 'LinuxGCC' - timeoutInMinutes: 360 - pool: - name: 'Default' - demands: - - Agent.OS -equals Linux - strategy: - matrix: - default: {} - ITK-master: - ctest.cache: | - ITK_GIT_TAG:STRING=master - CMAKE_CXX_STANDARD:STRING=11 - devtools-3: - env_file: '/opt/rh/devtoolset-3/enable' - devtools-4: - env_file: '/opt/rh/devtoolset-4/enable' - devtools-6: - env_file: '/opt/rh/devtoolset-6/enable' - devtools-7: - env_file: '/opt/rh/devtoolset-7/enable' - devtools-8: - env_file: '/opt/rh/devtoolset-8/enable' - workspace: - clean: all - steps: - - template: templates/git-download-steps.yml - - script: | - [[ ! -z "$(env_file)" ]] && source $(env_file) - cmake --version - gcc --version - ccache -p - ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V - ccache --show-stats - displayName: Build and test - env: - CTEST_OUTPUT_ON_FALURE: 1 - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - CTEST_CACHE: | - BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=ON - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_TESTING:BOOL=ON - WRAP_DEFAULT:BOOL=ON - CMAKE_CXX_COMPILER_LAUNCHER=/usr/bin/ccache - CMAKE_C_COMPILER_LAUNCHER=/usr/bin/ccache - $(ctest.cache) - workingDirectory: $(Agent.BuildDirectory) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 5bef88992..f0380bf34 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -1,161 +1,61 @@ -# Starter pipeline -# Start with a minimal pipeline that you can customize to build and deploy your code. -# Add steps that build, run tests, deploy, and more: -# https://aka.ms/yaml - trigger: - master - - next - release variables: ExternalDataVersion: 1.2.0 -jobs: - - job: Linux - timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 - pool: - vmImage: 'Ubuntu-16.04' - - steps: - - template: templates/git-download-steps.yml - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.6' - architecture: 'x64' - addToPath: true - - script: | - python --version - sudo python -m pip install setuptools - sudo python -m pip install ninja scikit-ci-addons - displayName: 'Install ninja dependency' - - bash: | - set -x - c++ --version - cmake --version - ninja --version - ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 4 - displayName: Build and test - env: - CTEST_CONFIGURATION_TYPE: MinSizeRel - CTEST_OUTPUT_ON_FALURE: 1 - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - CTEST_CACHE: | - BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=ON - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_TESTING:BOOL=ON - WRAP_DEFAULT:BOOL=OFF - WRAP_JAVA:BOOL=ON - workingDirectory: $(Agent.BuildDirectory) - - script: | - ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml - condition: succeededOrFailed() - displayName: 'Format CTest output in JUnit format' - - task: PublishTestResults@2 - inputs: - testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" - testRunTitle: 'CTest $(Agent.OS)' - condition: succeededOrFailed() - displayName: 'Publish test results' - - - job: macOS - timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 - pool: - vmImage: 'macOS-10.13' +strategy: + maxParallel: 2 + matrix: + XCode_10: + imageName: 'macos-10.13' + xcodeVersion: 10.2 - steps: - - template: templates/git-download-steps.yml - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.6' - architecture: 'x64' - addToPath: true - - script: | - python --version - sudo python -m pip install setuptools numpy - sudo python -m pip install ninja scikit-ci-addons - displayName: 'Install ninja dependency' - - bash: | - set -x - c++ --version - cmake --version - ninja --version - ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 4 - displayName: Build and test - env: - CTEST_CONFIGURATION_TYPE: MinSizeRel - CTEST_OUTPUT_ON_FALURE: 1 - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - CTEST_CACHE: | - BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=ON - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_TESTING:BOOL=ON - WRAP_DEFAULT:BOOL=OFF - WRAP_PYTHON:BOOL=ON - WRAP_JAVA:BOOL=ON - workingDirectory: $(Agent.BuildDirectory) - - script: | - ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml - condition: succeededOrFailed() - displayName: 'Format CTest output in JUnit format' - - task: PublishTestResults@2 - inputs: - testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" - testRunTitle: 'CTest $(Agent.OS)' - condition: succeededOrFailed() - displayName: 'Publish test results' +pool: + vmImage: $(imageName) - - job: Windows - timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 - pool: - vmImage: 'vs2017-win2016' - steps: - - template: templates/git-download-steps.yml - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.6' - architecture: 'x64' - addToPath: true - - script: | - python --version - python -m pip install setuptools - python -m pip install ninja scikit-ci-addons - displayName: 'Install ninja dependency' - - script: | - cmake --version - ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V -j 4 - displayName: Build and test - env: - CTEST_CONFIGURATION_TYPE: MinSizeRel - CTEST_OUTPUT_ON_FALURE: 1 - CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017 Win64" - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - CXXFLAGS: /MP - CFLAGS: /MP - CTEST_CACHE: | - BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=ON - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_TESTING:BOOL=ON - WRAP_DEFAULT:BOOL=OFF - WRAP_CSHARP:BOOL=ON - workingDirectory: $(Agent.BuildDirectory) - - script: | - ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml - condition: succeededOrFailed() - displayName: 'Format CTest output in JUnit format' - - task: PublishTestResults@2 - inputs: - testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" - testRunTitle: 'CTest $(Agent.OS)' - condition: succeededOrFailed() - displayName: 'Publish test results' +steps: + - template: templates/git-download-steps.yml + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + addToPath: true + - script: | + python --version + sudo python -m pip install setuptools numpy + sudo python -m pip install ninja scikit-ci-addons + displayName: 'Install ninja dependency' + - bash: | + set -x + env + sudo xcode-select -s /Applications/Xcode_$(xcodeVersion).app/Contents/Developer/ + c++ --version + cmake --version + ninja --version + ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 2 + displayName: Build and test + env: + CTEST_CONFIGURATION_TYPE: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + WRAP_PYTHON:BOOL=ON + WRAP_JAVA:BOOL=ON + workingDirectory: $(Agent.BuildDirectory) + - script: | + ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + condition: succeededOrFailed() + displayName: 'Format CTest output in JUnit format' + - task: PublishTestResults@2 + inputs: + testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" + testRunTitle: 'CTest $(Agent.OS)' + condition: succeededOrFailed() + displayName: 'Publish test results' From 8bc6cb6625db1584a0ba8d2a0c21871f204d063d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 25 Apr 2019 13:11:07 -0400 Subject: [PATCH 113/400] Revert "Testing XCode matrix for build" This reverts commit d633e406fe02325bb4702c28e380110a069decf1. --- .circleci/circleci.cmake | 99 ++++++ .circleci/config.yml | 358 +++++++++++++++++++++ Testing/CI/Azure/azure-pipelines-batch.yml | 78 +++++ Testing/CI/Azure/azure-pipelines.yml | 208 ++++++++---- 4 files changed, 689 insertions(+), 54 deletions(-) create mode 100644 .circleci/circleci.cmake create mode 100644 .circleci/config.yml create mode 100644 Testing/CI/Azure/azure-pipelines-batch.yml diff --git a/.circleci/circleci.cmake b/.circleci/circleci.cmake new file mode 100644 index 000000000..82cf38c4b --- /dev/null +++ b/.circleci/circleci.cmake @@ -0,0 +1,99 @@ + +# set_from_env +# ------------ +# +# Sets a CMake variable from an environment variable. If the +# environment variable is not defined then either a fatal error is +# generated or the CMake variable is not modified. +# +# set_from_env( [REQUIRED|DEFAULT value] ) +function(set_from_env var env_var) + if(NOT DEFINED ENV{${env_var}}) + if (ARGV2 STREQUAL "REQUIRED") + message(FATAL_ERROR "Required environment variable \"${env_var}\" not defined.") + elseif (ARGV2 STREQUAL "DEFAULT") + set(${var} ${ARGV3} PARENT_SCOPE) + endif() + else() + set(${var} $ENV{${env_var}} PARENT_SCOPE) + endif() +endfunction() + +set(CTEST_SITE "CircleCI") +set(CTEST_UPDATE_VERSION_ONLY 1) + + +# Make environment variables to CMake variables for CTest +set_from_env(CTEST_CMAKE_GENERATOR "CTEST_CMAKE_GENERATOR" DEFAULT "Unix Makefiles" ) +set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY") +set_from_env(CTEST_DASHBOARD_ROOT "CTEST_DASHBOARD_ROOT" REQUIRED) +set_from_env(CTEST_SOURCE_DIRECTORY "CTEST_SOURCE_DIRECTORY" REQUIRED) +set_from_env(CTEST_CONFIGURATION_TYPE "CTEST_CONFIGURATION_TYPE" DEFAULT "Release") +set_from_env(CTEST_BUILD_FLAGS "CTEST_BUILD_FLAGS") +set_from_env(CTEST_BUILD_TARGET "CTEST_BUILD_TARGET") +set_from_env(CTEST_TEST_ARGS "CTEST_TEST_ARGS") + + +set_from_env(PARALLEL_LEVEL "PARALLEL_LEVEL" DEFAULT 2 ) +set( CTEST_TEST_ARGS ${CTEST_TEST_ARGS} PARALLEL_LEVEL ${PARALLEL_LEVEL}) + +set_from_env(DASHBOARD_BRANCH_DIRECTORY "DASHBOARD_BRANCH_DIRECTORY" REQUIRED) + +# Construct build name based on what is being built +string(SUBSTRING $ENV{CIRCLE_SHA1} 0 7 commit_sha1) +set(CTEST_BUILD_NAME "CircleCI-$ENV{CIRCLE_BRANCH}-$ENV{CIRCLE_STAGE}-${commit_sha1}") + +set_from_env(dashboard_git_branch "CIRCLE_BRANCH") +set_from_env(dashboard_model "DASHBOARD_MODEL" DEFAULT "Experimental" ) +set(dashboard_loop 0) + + +if ( EXISTS "${CTEST_SOURCE_DIRECTORY}/circle.yml") + list(APPEND CTEST_NOTES_FILES + "${CTEST_SOURCE_DIRECTORY}/circle.yml" + ) +endif() + +if ( EXISTS "${CTEST_SOURCE_DIRECTORY}/.circleci/config.yml") + list(APPEND CTEST_NOTES_FILES + "${CTEST_SOURCE_DIRECTORY}/.circleci/config.yml" + ) +endif() + + +SET (_dashboard_cache " + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=OFF + BUILD_SHARED_LIBS:BOOL=ON + BUILD_TESTING:BOOL=ON + + SimpleITK_USE_SYSTEM_LUA:BOOL=ON + SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF + + WRAP_DEFAULT:BOOL=OFF +" ) + +set_from_env(dashboard_cache "CTEST_CACHE" DEFAULT ${_dashboard_cache}) + + +if (DEFINED ENV{DISTCC_DIR}) + SET (dashboard_cache "${dashboard_cache} + CMAKE_CXX_COMPILER_LAUNCHER:STRING=distcc + CMAKE_C_COMPILER_LAUNCHER:STRING=distcc +" ) +endif() + + + +include("${DASHBOARD_BRANCH_DIRECTORY}/simpleitk_common.cmake") + +if(NOT ${configure_return} EQUAL 0 OR + NOT ${build_return} EQUAL 0 OR + NOT ${build_errors} EQUAL 0 OR + NOT ${build_warnings} EQUAL 0 OR + NOT ${test_return} EQUAL 0) + message(FATAL_ERROR + "Build did not complete without warnings, errors, or failures.") +else() + return(0) +endif() diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..7173bd6e1 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,358 @@ +referenced: + defaults: &defaults + docker: + - image: circleci/python:2.7-stretch + working_directory: ~/ + resource_class: large + default_environment_keys: &default_environment + <<: &default_environment_keys + CTEST_DASHBOARD_ROOT: /home/circleci + CTEST_SOURCE_DIRECTORY: /home/circleci/SimpleITK + CTEST_BINARY_DIRECTORY: /home/circleci/SimpleITK-build + ROOT_BINARY_DIRECTORY: /home/circleci/SimpleITK-build + CTEST_BUILD_FLAGS: "-j 4" + CTEST_CONFIGURATION_TYPE: "Release" + CTEST_OUTPUT_ON_FAILURE: 1 + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + PARALLEL_LEVEL: 4 + DASHBOARD_BRANCH_DIRECTORY: /home/circleci/dashboard + ExternalData_OBJECT_STORES: /home/circleci/.ExternalData + CCACHE_NODIRECT: 1 + dependencies: &dependencies + run: + name: Dependencies + command: | + sudo apt-get install -y rsync lua5.1 ccache kwstyle + sudo python -m pip install --upgrade pip + sudo python -m pip install scikit-ci-addons # Provides "ctest_junit_formatter" add-on + sudo python -m pip install cmake==3.13.3 + generate-hash-step: &generate-hash-step + run: + name: Generate external data hash + command: | + cd SimpleITK + git log -n 1 ${CTEST_SOURCE_DIRECTORY}/Testing/Data/ | tee /home/circleci/external-data.hashable + restore-data-step: &restore-data-step + restore_cache: + keys: + - 'v1-external-data-{{ checksum "/home/circleci/external-data.hashable" }}' + - 'v1-external-data' + restore-ccache-step: &restore-ccache-step + restore_cache: + keys: + - ccache-{{ arch }}-{{ .Branch }} + - ccache-{{ arch }}-master + clone-dashboard-step: &clone-dashboard-step + run: + name: Cloning dashboard branch + command: | + git clone --single-branch ${CIRCLE_REPOSITORY_URL} -b dashboard ${DASHBOARD_BRANCH_DIRECTORY} + env-step: &env-step + run: + name: Additional Environment Variables + command: | + echo 'export DASHBOARD_MODEL=$( [[ "$CIRCLE_BRANCH" = "master" || "$CIRCLE_BRANCH" = "next" || "$CIRCLE_BRANCH" = "release" ]] && echo Continuous || echo Experimental )' >> $BASH_ENV + echo 'export PATH=/usr/lib/ccache:${PATH}' >> $BASH_ENV + junit-fotmatting: &junit-fotmatting + run: + name: Formatting CTest for JUnit + when: always + command: | + env + mkdir -p /tmp/test-results + ci_addons ctest_junit_formatter ${CTEST_BINARY_DIRECTORY} > /tmp/test-results/JUnit-${CIRCLE_NODE_INDEX}.xml + junit-store-test-results: &junit-store-test-results + store_test_results: + path: /tmp/test-results + destination: ctest + +version: 2 +jobs: + build-and-test: + <<: *defaults + environment: + <<: *default_environment_keys + steps: + - checkout: + path : ~/SimpleITK + - *generate-hash-step + - *restore-data-step + - *restore-ccache-step + - *clone-dashboard-step + - *dependencies + - *env-step + - run: + name: CCache initialization + command: | + ccache --show-stats + ccache --zero-stats + ccache --max-size=2.0G + - run: + name: Build and Testing with CTest + no_output_timeout: 20.0m + command: | + export LD_LIBRARY_PATH="${ROOT_BINARY_DIRECTORY}/ITK-prefix/lib/:${ROOT_BINARY_DIRECTORY}/SimpleITK-build/lib" + export CTEST_CACHE=" + BUILD_EXAMPLES:BOOL=OFF + BUILD_SHARED_LIBS:BOOL=ON + + SimpleITK_USE_SYSTEM_LUA:BOOL=ON + SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF + + WRAP_DEFAULT:BOOL=OFF" + ctest -V -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake" + - run: + name: ccache stats + when: always + command: | + ccache --show-stats + - *junit-fotmatting + - *junit-store-test-results + - save_cache: + key: 'ccache-{{ arch }}-{{ .Branch }}-{{ epoch }}' + paths: [ "/home/circleci/.ccache" ] + - save_cache: + key: 'v1-external-data-{{ checksum "/home/circleci/external-data.hashable" }}' + paths: [ "/home/circleci/.ExternalData" ] + - run: + name: Cleanup build + command: | + rm -rf "${CTEST_BINARY_DIRECTORY}/ITK" "${CTEST_BINARY_DIRECTORY}/ITK-build" + rm -rf "${CTEST_BINARY_DIRECTORY}/SimpleITK" "${CTEST_BINARY_DIRECTORY}/SimpleITK-build" + - persist_to_workspace: + root: /home/circleci/SimpleITK-build + paths: + - "*" + python2.7-and-test: + <<: *defaults + environment: + <<: *default_environment_keys + CTEST_BUILD_FLAGS: "-j 2" + PARALLEL_LEVEL: 2 + CTEST_BINARY_DIRECTORY: "/home/circleci/SimpleITK-py" + resource_class: medium + steps: + - checkout: + path : ~/SimpleITK + - *generate-hash-step + - *restore-data-step + - *clone-dashboard-step + - *dependencies + - *env-step + - run: + name: Additional Dependencies + command: | + python --version + sudo pip install numpy + - attach_workspace: + at: /home/circleci/SimpleITK-build + - run: + name: Build Python and Testing with CTest + no_output_timeout: 20.0m + command: | + env + export LD_LIBRARY_PATH="${ROOT_BINARY_DIRECTORY}/ITK-prefix/lib/:${ROOT_BINARY_DIRECTORY}/lib" + export CTEST_CACHE=" + CMAKE_PREFIX_PATH:PATH=${ROOT_BINARY_DIRECTORY} + SWIG_EXECUTABLE:PATH=${ROOT_BINARY_DIRECTORY}/Swig/bin/swig + BUILD_EXAMPLES:BOOL=ON" + ctest -V -Ddashboard_source_config_dir:PATH="Wrapping/Python" -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake" + - *junit-fotmatting + - *junit-store-test-results + python3.6-and-test: + <<: *defaults + docker: + - image: circleci/python:3.6-stretch + environment: + <<: *default_environment_keys + CTEST_BUILD_FLAGS: "-j 2" + PARALLEL_LEVEL: 2 + CTEST_BINARY_DIRECTORY: "/home/circleci/SimpleITK-py" + resource_class: medium + steps: + - checkout: + path : ~/SimpleITK + - *generate-hash-step + - *restore-data-step + - *clone-dashboard-step + - *dependencies + - *env-step + - run: + name: Additional Dependencies + command: | + python --version + sudo pip install numpy + - attach_workspace: + at: /home/circleci/SimpleITK-build + - run: + name: Build Python and Testing with CTest + no_output_timeout: 20.0m + command: | + env + export LD_LIBRARY_PATH="${ROOT_BINARY_DIRECTORY}/ITK-prefix/lib/:${ROOT_BINARY_DIRECTORY}/lib" + export CTEST_CACHE=" + CMAKE_PREFIX_PATH:PATH=${ROOT_BINARY_DIRECTORY} + SWIG_EXECUTABLE:PATH=${ROOT_BINARY_DIRECTORY}/Swig/bin/swig + BUILD_EXAMPLES:BOOL=ON" + ctest -V -Ddashboard_source_config_dir:PATH="Wrapping/Python" -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake" + - *junit-fotmatting + - *junit-store-test-results + r-and-test: + <<: *defaults + resource_class: medium + environment: + <<: *default_environment_keys + CTEST_BUILD_FLAGS: "-j 2" + PARALLEL_LEVEL: 2 + CTEST_BINARY_DIRECTORY: "/home/circleci/SimpleITK-R" + steps: + - checkout: + path : ~/SimpleITK + - *generate-hash-step + - *restore-data-step + - *clone-dashboard-step + - *dependencies + - *env-step + - run: + name: Additional Dependencies + command: | + sudo apt-get update -y + sudo apt-get -y install dirmngr apt-transport-https software-properties-common + sudo apt-key adv --keyserver http://keyserver.ubuntu.com --recv-key 'E19F5F87128899B192B1A2C2AD5F960A256A04AF' + sudo add-apt-repository -y "deb https://cloud.r-project.org/bin/linux/debian stretch-cran35/" + sudo apt-get update -y + sudo apt-get install -y r-base r-base-dev + - attach_workspace: + at: /home/circleci/SimpleITK-build + - run: + name: Build R and Testing with CTest + no_output_timeout: 20.0m + command: | + export LD_LIBRARY_PATH="${ROOT_BINARY_DIRECTORY}/ITK-prefix/lib/:${ROOT_BINARY_DIRECTORY}/lib" + export CTEST_CACHE=" + CMAKE_PREFIX_PATH:PATH=${ROOT_BINARY_DIRECTORY} + SWIG_EXECUTABLE:PATH=${ROOT_BINARY_DIRECTORY}/Swig/bin/swig + BUILD_EXAMPLES:BOOL=ON" + ctest -V -Ddashboard_source_config_dir:PATH="Wrapping/R" -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake" + - *junit-fotmatting + - *junit-store-test-results + java-and-test: + <<: *defaults + docker: + - image: circleci/openjdk:8-jdk-stretch + resource_class: medium + environment: + <<: *default_environment_keys + CTEST_BUILD_FLAGS: "-j 2" + PARALLEL_LEVEL: 2 + CTEST_BINARY_DIRECTORY: "/home/circleci/SimpleITK-Java" + steps: + - checkout: + path : ~/SimpleITK + - *generate-hash-step + - *restore-data-step + - *clone-dashboard-step + - run: + name: Prerequisite Dependencies + command: | + sudo apt-get install -y python-pip + - *dependencies + - *env-step + - run: + name: Additional Dependencies + command: | + echo "none" + - attach_workspace: + at: /home/circleci/SimpleITK-build + - run: + name: Build Java and Testing with CTest + no_output_timeout: 20.0m + command: | + export LD_LIBRARY_PATH="${ROOT_BINARY_DIRECTORY}/ITK-prefix/lib/:${ROOT_BINARY_DIRECTORY}/lib" + export CTEST_CACHE=" + CMAKE_PREFIX_PATH:PATH=${ROOT_BINARY_DIRECTORY} + SWIG_EXECUTABLE:PATH=${ROOT_BINARY_DIRECTORY}/Swig/bin/swig + BUILD_EXAMPLES:BOOL=ON" + ctest -V -Ddashboard_source_config_dir:PATH="Wrapping/Java" -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake" + - *junit-fotmatting + - *junit-store-test-results + docs: + <<: *defaults + environment: + <<: *default_environment_keys + steps: + - checkout: + path : ~/SimpleITK + - *generate-hash-step + - *restore-data-step + - *restore-ccache-step + - *clone-dashboard-step + - *dependencies + - *env-step + - run: + name: Additional Dependencies + command: | + sudo apt-get install -y doxygen + - run: + name: Building and Generating Doxygen + no_output_timeout: 20.0m + command: | + export CTEST_BUILD_TARGET=SimpleITK-doc + export CTEST_CACHE=" + BUILD_SHARED_LIBS:BOOL=ON + WRAP_DEFAULT=OFF + BUILD_DOXYGEN=ON + SimpleITK_USE_SYSTEM_LUA:BOOL=ON" + ctest -V -Ddashboard_no_test:BOOL=1\ + -Ddashboard_track:BOOL=Doxygen\ + -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake" + - run: + name: Archiving directory for artifact + command: | + cd ${CTEST_BINARY_DIRECTORY}/SimpleITK-build/Documentation/ + tar -zcvf simpleitk_doxygen_html.tar.gz html + - store_artifacts: + path: /home/circleci/SimpleITK-build/SimpleITK-build/Documentation/simpleitk_doxygen_html.tar.gz +workflows: + version: 2 + build_and_test: + jobs: + - build-and-test: + filters: + branches: + ignore: + - gh-pages + - dashboard + - hooks + - python2.7-and-test: + requires: + - build-and-test + filters: + branches: + ignore: next + - python3.6-and-test: + requires: + - build-and-test + - r-and-test: + requires: + - build-and-test + filters: + branches: + ignore: next + - java-and-test: + requires: + - build-and-test + filters: + branches: + ignore: next + + nightly: + triggers: + - schedule: + cron: "0 3 * * *" + filters: + branches: + only: + - master + jobs: + - docs diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml new file mode 100644 index 000000000..0be3c5ccc --- /dev/null +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -0,0 +1,78 @@ +trigger: + + - master + - release +variables: + ExternalDataVersion: 1.2.0 + ctest.cache: '' +pr: none +jobs: + - job: VS2019 + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'windows-2019' + + steps: + - template: templates/git-download-steps.yml + - script: | + cmake --version + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + displayName: Build and test + workingDirectory: $(Agent.BuildDirectory) + env: + CTEST_CONFIGURATION_TYPE: MinSizeRel + CTEST_CMAKE_GENERATOR: "Visual Studio 16 2019" + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CXXFLAGS: /MP + CFLAGS: /MP + + - job: 'LinuxGCC' + timeoutInMinutes: 360 + pool: + name: 'Default' + demands: + - Agent.OS -equals Linux + strategy: + matrix: + default: {} + ITK-master: + ctest.cache: | + ITK_GIT_TAG:STRING=master + CMAKE_CXX_STANDARD:STRING=11 + devtools-3: + env_file: '/opt/rh/devtoolset-3/enable' + devtools-4: + env_file: '/opt/rh/devtoolset-4/enable' + devtools-6: + env_file: '/opt/rh/devtoolset-6/enable' + devtools-7: + env_file: '/opt/rh/devtoolset-7/enable' + devtools-8: + env_file: '/opt/rh/devtoolset-8/enable' + workspace: + clean: all + steps: + - template: templates/git-download-steps.yml + - script: | + [[ ! -z "$(env_file)" ]] && source $(env_file) + cmake --version + gcc --version + ccache -p + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + ccache --show-stats + displayName: Build and test + env: + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=ON + CMAKE_CXX_COMPILER_LAUNCHER=/usr/bin/ccache + CMAKE_C_COMPILER_LAUNCHER=/usr/bin/ccache + $(ctest.cache) + workingDirectory: $(Agent.BuildDirectory) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index f0380bf34..5bef88992 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -1,61 +1,161 @@ +# Starter pipeline +# Start with a minimal pipeline that you can customize to build and deploy your code. +# Add steps that build, run tests, deploy, and more: +# https://aka.ms/yaml + trigger: - master + - next - release variables: ExternalDataVersion: 1.2.0 -strategy: - maxParallel: 2 - matrix: - XCode_10: - imageName: 'macos-10.13' - xcodeVersion: 10.2 +jobs: + - job: Linux + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'Ubuntu-16.04' + + steps: + - template: templates/git-download-steps.yml + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + addToPath: true + - script: | + python --version + sudo python -m pip install setuptools + sudo python -m pip install ninja scikit-ci-addons + displayName: 'Install ninja dependency' + - bash: | + set -x + c++ --version + cmake --version + ninja --version + ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 4 + displayName: Build and test + env: + CTEST_CONFIGURATION_TYPE: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + WRAP_JAVA:BOOL=ON + workingDirectory: $(Agent.BuildDirectory) + - script: | + ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + condition: succeededOrFailed() + displayName: 'Format CTest output in JUnit format' + - task: PublishTestResults@2 + inputs: + testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" + testRunTitle: 'CTest $(Agent.OS)' + condition: succeededOrFailed() + displayName: 'Publish test results' + + - job: macOS + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'macOS-10.13' -pool: - vmImage: $(imageName) + steps: + - template: templates/git-download-steps.yml + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + addToPath: true + - script: | + python --version + sudo python -m pip install setuptools numpy + sudo python -m pip install ninja scikit-ci-addons + displayName: 'Install ninja dependency' + - bash: | + set -x + c++ --version + cmake --version + ninja --version + ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 4 + displayName: Build and test + env: + CTEST_CONFIGURATION_TYPE: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + WRAP_PYTHON:BOOL=ON + WRAP_JAVA:BOOL=ON + workingDirectory: $(Agent.BuildDirectory) + - script: | + ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + condition: succeededOrFailed() + displayName: 'Format CTest output in JUnit format' + - task: PublishTestResults@2 + inputs: + testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" + testRunTitle: 'CTest $(Agent.OS)' + condition: succeededOrFailed() + displayName: 'Publish test results' -steps: - - template: templates/git-download-steps.yml - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.6' - architecture: 'x64' - addToPath: true - - script: | - python --version - sudo python -m pip install setuptools numpy - sudo python -m pip install ninja scikit-ci-addons - displayName: 'Install ninja dependency' - - bash: | - set -x - env - sudo xcode-select -s /Applications/Xcode_$(xcodeVersion).app/Contents/Developer/ - c++ --version - cmake --version - ninja --version - ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 2 - displayName: Build and test - env: - CTEST_CONFIGURATION_TYPE: MinSizeRel - CTEST_OUTPUT_ON_FALURE: 1 - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - CTEST_CACHE: | - BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=ON - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_TESTING:BOOL=ON - WRAP_DEFAULT:BOOL=OFF - WRAP_PYTHON:BOOL=ON - WRAP_JAVA:BOOL=ON - workingDirectory: $(Agent.BuildDirectory) - - script: | - ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml - condition: succeededOrFailed() - displayName: 'Format CTest output in JUnit format' - - task: PublishTestResults@2 - inputs: - testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" - testRunTitle: 'CTest $(Agent.OS)' - condition: succeededOrFailed() - displayName: 'Publish test results' + - job: Windows + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + pool: + vmImage: 'vs2017-win2016' + steps: + - template: templates/git-download-steps.yml + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + addToPath: true + - script: | + python --version + python -m pip install setuptools + python -m pip install ninja scikit-ci-addons + displayName: 'Install ninja dependency' + - script: | + cmake --version + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V -j 4 + displayName: Build and test + env: + CTEST_CONFIGURATION_TYPE: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017 Win64" + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CXXFLAGS: /MP + CFLAGS: /MP + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + WRAP_CSHARP:BOOL=ON + workingDirectory: $(Agent.BuildDirectory) + - script: | + ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + condition: succeededOrFailed() + displayName: 'Format CTest output in JUnit format' + - task: PublishTestResults@2 + inputs: + testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" + testRunTitle: 'CTest $(Agent.OS)' + condition: succeededOrFailed() + displayName: 'Publish test results' From ed20501244b53f899163894e15082e82d8015509 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 25 Apr 2019 14:00:11 -0400 Subject: [PATCH 114/400] Azure add XCode build matrix to batch jobs --- Testing/CI/Azure/azure-pipelines-batch.yml | 67 +++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index 111df7f62..4b2559ac5 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -1,5 +1,4 @@ trigger: - - master - release variables: @@ -28,6 +27,72 @@ jobs: CXXFLAGS: /MP CFLAGS: /MP + - job: macOS + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + strategy: + maxParallel: 2 + matrix: + XCode_10: + imageName: 'macos-10.14' + xcodeVersion: 10.2 + XCode_9_4: + imageName: 'macos-10.14' + xcodeVersion: 9.4.1 + XCode_9_3: + imageName: 'macos-10.13' + xcodeVersion: 9.3 + pool: + vmImage: $(imageName) + + steps: + - template: templates/git-download-steps.yml + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + addToPath: true + - script: | + python --version + sudo python -m pip install setuptools numpy + sudo python -m pip install ninja scikit-ci-addons + displayName: 'Install ninja dependency' + - bash: | + set -x + xcode-select -p + sudo xcode-select -s /Applications/Xcode_$(xcodeVersion).app/Contents/Developer/ + xcode-select -p + c++ --version + cmake --version + ninja --version + ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 2 + displayName: Build and test + env: + CTEST_CONFIGURATION_TYPE: MinSizeRel + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + WRAP_PYTHON:BOOL=ON + WRAP_JAVA:BOOL=ON + workingDirectory: $(Agent.BuildDirectory) + - script: | + ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + condition: succeededOrFailed() + displayName: 'Format CTest output in JUnit format' + - task: PublishTestResults@2 + inputs: + testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" + testRunTitle: 'CTest $(Agent.OS)' + condition: succeededOrFailed() + displayName: 'Publish test results' + - job: 'LinuxGCC' timeoutInMinutes: 360 pool: From ac3deb725df8a624d2a3c12fc41979aa0947869c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 1 May 2019 15:53:16 -0400 Subject: [PATCH 115/400] Removing old development setup scripts --- .../SetupGitAliases.sh | 48 ------------------ .../DevelopmentSetupScripts/SetupHooks.sh | 50 ------------------- 2 files changed, 98 deletions(-) delete mode 100755 Utilities/DevelopmentSetupScripts/SetupGitAliases.sh delete mode 100755 Utilities/DevelopmentSetupScripts/SetupHooks.sh diff --git a/Utilities/DevelopmentSetupScripts/SetupGitAliases.sh b/Utilities/DevelopmentSetupScripts/SetupGitAliases.sh deleted file mode 100755 index 57dc87c82..000000000 --- a/Utilities/DevelopmentSetupScripts/SetupGitAliases.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash - -# Set up some useful git aliases, global aliases for general things -echo -n "Would you like general Git aliases to be global? [y/N]:" -read answer - -if [ "$answer" == "y" ]; then - global="--global" -elif [ "$answer" == "yes" ]; then - global="--global" -elif [ "$answer" == "Yes" ]; then - global="--global" -else - global="" -fi - -GIT=git - -GITCONFIG="${GIT} config ${global}" - -# General aliases that could be global - -# Pull all updates - first a general pull and then submodules. -${GITCONFIG} alias.pullall "!bash -c \"git pull && git submodule update --init\"" -# Useful alias to see what commits are on the current branch with respect -# to origin/master. -${GITCONFIG} alias.prepush 'log --graph --stat origin/master..' - -# Staging aliases - can help streamline staging topic branches. -GITCONFIG="${GIT} config" -stage_cmd='ssh git@itk.org stage SimpleITK' -git_branch="\$(git symbolic-ref HEAD | sed -e 's|^refs/heads/||')" -# General alias to run the SSH command, e.g. git stage-cmd merge -b master mytopic. -${GITCONFIG} alias.stage-cmd "!${stage_cmd}" -# Push the current topic branch to the stage. -${GITCONFIG} alias.stage-push "!bash -c \"git fetch stage --prune && git push stage HEAD\"" -# List all staged topic branches. -${GITCONFIG} alias.stage-branch "!bash -c \"${stage_cmd} print\"" -${GITCONFIG} alias.stage-print "!bash -c \"${stage_cmd} print\"" -# Merge the current topic branch (if staged) into the next branch. -${GITCONFIG} alias.stage-merge "!bash -c \"${stage_cmd} merge -b next ${git_branch}\"" -# Merge the current topic branch (if staged) into the master branch. -# this should be harder to do, and only done by a few, so no alias is provided -#${GITCONFIG} alias.stage-merge "!bash -c \"${stage_cmd} merge ${git_branch}\"" - -# Remove old gerrit alias -${GITCONFIG} alias.gerrit-push >/dev/null && ${GITCONFIG} --unset alias.gerrit-push || true -${GITCONFIG} alias.gerrit-merge >/dev/null && ${GITCONFIG} --unset alias.gerrit-merge || true diff --git a/Utilities/DevelopmentSetupScripts/SetupHooks.sh b/Utilities/DevelopmentSetupScripts/SetupHooks.sh deleted file mode 100755 index 7a00b82c3..000000000 --- a/Utilities/DevelopmentSetupScripts/SetupHooks.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash -#========================================================================== -# -# Copyright Insight Software Consortium -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0.txt -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -#==========================================================================*/ - - -# Run this script to set up the git hooks for committing changes to SimpleITK. -# For more information, see: -# https://www.itk.org/Wiki/Git/Hooks - -egrep-q() { - egrep "$@" >/dev/null 2>/dev/null -} - -die() { - echo 'failure during hook setup' 1>&2 - echo '-------------------------' 1>&2 - echo '' 1>&2 - echo "$@" 1>&2 - exit 1 -} - -# Disable the 'hooks' branch submodule check. -# We have a check that blocks addition of submodules. -git config hooks.submodule false - -# We don't have as must style setup as ITK, but we may... -# Set up KWStyle hook. -git config hooks.KWStyle.conf "Utilities/KWStyle/SITK.kws.xml.in" -git config hooks.KWStyle.overwriteRulesConf "Utilities/KWStyle/SITKOverwrite.txt" - - -echo "Setting up JSON validation with python..." -PYTHON_EXECUTABLE=$(which python) || die "No python found for hooks." -git config hooks.python ${PYTHON_EXECUTABLE} -git config hooks.ValidateJSON true From 71d6e75dd16f90c6252033304e49303eb886e323 Mon Sep 17 00:00:00 2001 From: Dave Chen Date: Thu, 2 May 2019 11:04:42 -0400 Subject: [PATCH 116/400] Fixed a bunch of typos --- Documentation/Doxygen/Conventions.dox | 8 ++++---- Documentation/Doxygen/Developer.dox | 4 ++-- Documentation/Doxygen/FilterTemplates.dox | 14 +++++++------- .../{GitPhilosopy.dox => GitPhilosophy.dox} | 2 +- Documentation/Doxygen/MainPage.dox | 2 +- Documentation/docs/source/conventions.rst | 6 +++--- Documentation/docs/source/faq.rst | 8 ++++---- Documentation/docs/source/filters.rst | 6 +++--- Documentation/docs/source/installation.rst | 2 +- Documentation/docs/source/setUp.rst | 4 ++-- Documentation/docs/source/tutorialsAndCourses.rst | 8 ++++---- 11 files changed, 32 insertions(+), 32 deletions(-) rename Documentation/Doxygen/{GitPhilosopy.dox => GitPhilosophy.dox} (99%) diff --git a/Documentation/Doxygen/Conventions.dox b/Documentation/Doxygen/Conventions.dox index a1fa8b8b8..4af3643cd 100644 --- a/Documentation/Doxygen/Conventions.dox +++ b/Documentation/Doxygen/Conventions.dox @@ -16,9 +16,9 @@ be truncated. The SimpleITK image class can contain 2 or 3 dimensional images. In ITK proper, certain types such as indexes, points, and sizes are -templeted over the image dimensions. In SimpleITK we utilize the -variable length std::vector for these types, so that non-templeted -calls can wrap ITK's templeted image class. These types are called +templated over the image dimensions. In SimpleITK we utilize the +variable length std::vector for these types, so that non-templated +calls can wrap ITK's templated image class. These types are called Dimensional Vectors. If a dimensional vector's length is less that the dimension of the image, an exception will be generated when converted to the ITK type. If there are extra elements in the dimensional vector @@ -62,7 +62,7 @@ in row major order. The vector \f$[1,2,3,4,5,6]\f$ represents the matrix The itk::ImageRegion is a frequently used class in ITK to define a sub-image area. It is defined by itk::Index and itk::Size of signed -and unsigned integer types respecfully. In SimpleITK, the index and +and unsigned integer types respectfully. In SimpleITK, the index and size elements are usually separated into two arguments with separate Set and Get methods. diff --git a/Documentation/Doxygen/Developer.dox b/Documentation/Doxygen/Developer.dox index 80c7549f8..77ff932ce 100644 --- a/Documentation/Doxygen/Developer.dox +++ b/Documentation/Doxygen/Developer.dox @@ -104,7 +104,7 @@ The following is a brief overview on how to contribute a nightly build to SimpleITK. Additional relevant information can be found on the CTest -documentation page along with simular information on how to setup a +documentation page along with similar information on how to setup a dashboard for ITK. @@ -173,7 +173,7 @@ $ ctest -S ~/Dashboards/SimpleITKScripts/simpleitk_nightly.cmake Depending on your system the tool needed is different. For Unix and Mac OSX operating system it's the cron daemon, while on windows it is -Schedualer. More information can be found on the general CMake Scripting Of CTest wiki page. diff --git a/Documentation/Doxygen/FilterTemplates.dox b/Documentation/Doxygen/FilterTemplates.dox index 69196f0dc..2ef8dffcc 100644 --- a/Documentation/Doxygen/FilterTemplates.dox +++ b/Documentation/Doxygen/FilterTemplates.dox @@ -93,7 +93,7 @@ into SimpleITK. - \b name: (\e string) This must be the name of the ITK filter. -- \b templage_code_filename: (\e string) Which of the template files should be +- \b template_code_filename: (\e string) Which of the template files should be used to generate the filter. Choices are: "ImageFilter", "RegionGrowingImageFilter", "StructuringElementImageFilter", "LevelSetImageFilter", "MathematicalMorphologyImageFilter" @@ -148,7 +148,7 @@ additional header files to include in the cxx file for this filter. pixel type to use for the output image of the filter. - [OPTIONAL] \b filter_type: (\e string) Explicitly sets the - FilterType used. This method overides + FilterType used. This method overrides additional_template_types. Useful typedefs are InputImageType, and OutputImageType. @@ -188,7 +188,7 @@ custom method are: - \b body: (\e string) This string is the body of the method and will be placed directly into the header file. The parameter names specified with - \b var_name in each of the parameter obects can be used in this body + \b var_name in each of the parameter objects can be used in this body A sample custom method might look like: @@ -249,14 +249,14 @@ non-basic types (std::vector< unsigned int >() for example) - \b briefdescriptionSet/briefdescriptionGet: (\e string) Brief Doxygen documentation for this individual parameter. The two forms (Set/Get) are used for the SetMember and GetMember functions. This - field is automatically generated from ITK's Doxgen for members that + field is automatically generated from ITK's Doxygen for members that mirror ITK's members. If the member if a custom, this field will not be modified. - \b detaileddescriptionSet/detaileddescriptionGet: (\e string) Detailed Doxygen documentation for this individual parameter. The two forms (Set/Get) are used for the SetMember and GetMember - functions. This field is automatically generated from ITK's Doxgen + functions. This field is automatically generated from ITK's Doxygen for members that mirror ITK's members. If the member if a custom, this field will not be modified. @@ -315,7 +315,7 @@ each test. - \b tag: (\e string) The tag to identify this specific test for the filter -- \b descriptoin: (\e string) Documentation to describe this specific test +- \b description: (\e string) Documentation to describe this specific test - \b inputA: (\e string) The path from the SOURCE_DIR/Testing/Data directory for the (first) input image @@ -395,7 +395,7 @@ The code generation system is designed to be agnostic of what subdirectory is being parsed. An example of this is BasicFilters. Here will just refer to $FILTER_DIR -There are four important subdirectores in +There are four important subdirectories in $SimpleITK_SOURCE_DIR/Code/$FILTER_DIR: - \b include: Manually written header files diff --git a/Documentation/Doxygen/GitPhilosopy.dox b/Documentation/Doxygen/GitPhilosophy.dox similarity index 99% rename from Documentation/Doxygen/GitPhilosopy.dox rename to Documentation/Doxygen/GitPhilosophy.dox index ee3355c21..d3dab9058 100644 --- a/Documentation/Doxygen/GitPhilosopy.dox +++ b/Documentation/Doxygen/GitPhilosophy.dox @@ -2,7 +2,7 @@ namespace itk { namespace simple { /** \page GitPage Git philosophy -This document records the standard operating procedure and philosopy +This document records the standard operating procedure and philosophy of SimpleITK's use of Git. \section TopicBranch The life of a topic branch diff --git a/Documentation/Doxygen/MainPage.dox b/Documentation/Doxygen/MainPage.dox index 3d2b7f189..e7cdbbcce 100644 --- a/Documentation/Doxygen/MainPage.dox +++ b/Documentation/Doxygen/MainPage.dox @@ -34,7 +34,7 @@ https://www.itk.org \section howto How to use this documentation This documentation describes the C++ API of the SimpleITK interface -to the Insight Toolkit. The wrapped languages have a very simular +to the Insight Toolkit. The wrapped languages have a very similar interface, that should only be trivially different. The Related Pages link presents interface conventions, user and developer information. Additionally the Example tab provides a diff --git a/Documentation/docs/source/conventions.rst b/Documentation/docs/source/conventions.rst index c9cbe0b42..91af29c08 100644 --- a/Documentation/docs/source/conventions.rst +++ b/Documentation/docs/source/conventions.rst @@ -9,7 +9,7 @@ Dimensional Vectors Dimensional Vectors must contain at least the number of elements as the dimensions of the image, elements beyond the image's dimension will be truncated. -The SimpleITK image class can contain 2 or 3 dimensional images. In ITK proper, certain types such as indexes, points, and sizes are templeted over the image dimensions. In SimpleITK we utilize the variable length ``std::vector`` for these types, so that non-templeted calls can wrap ITK's templeted image class. These types are called Dimensional Vectors. If a dimensional vector's length is less that the dimension of the image, an exception will be generated when converted to the ITK type. If there are extra elements in the dimensional vector these values will be ignored. +The SimpleITK image class can contain 2 or 3 dimensional images. In ITK proper, certain types such as indexes, points, and sizes are templated over the image dimensions. In SimpleITK we utilize the variable length ``std::vector`` for these types, so that non-templated calls can wrap ITK's templated image class. These types are called Dimensional Vectors. If a dimensional vector's length is less that the dimension of the image, an exception will be generated when converted to the ITK type. If there are extra elements in the dimensional vector these values will be ignored. Image Access @@ -48,7 +48,7 @@ Matrices are represented as a single dimensional vector with the entries in row Image Regions as Index and Size ............................... -The `itk::ImageRegion `_ is a frequently used class in ITK to define a sub-image area. It is defined by `itk::Index `_ and `itk::Size `_ of signed and unsigned integer types respecfully. In SimpleITK, the index and size elements are usually separated into two arguments with separate Set and Get methods. +The `itk::ImageRegion `_ is a frequently used class in ITK to define a sub-image area. It is defined by `itk::Index `_ and `itk::Size `_ of signed and unsigned integer types respectfully. In SimpleITK, the index and size elements are usually separated into two arguments with separate Set and Get methods. When specified as a single argument value, it is a 1 dimensional array with the index values followed by the size values i.e. :math:`[idx_x, idx_y, idx_z, size_x, size_y, size_z]`. @@ -60,4 +60,4 @@ The dimensionality (2D or 3D) and pixel type (``sitkUInt8``, ``sitkFloat64``...) The `ImageRegistrationMethod `_ only supports images with ``sitkFloat32`` and ``sitkFloat64`` pixel types. -Casting an image's pixel type into another is done with the SimpleITK `Cast() `_ function. \ No newline at end of file +Casting an image's pixel type into another is done with the SimpleITK `Cast() `_ function. diff --git a/Documentation/docs/source/faq.rst b/Documentation/docs/source/faq.rst index 5e8c72f96..252d7763e 100644 --- a/Documentation/docs/source/faq.rst +++ b/Documentation/docs/source/faq.rst @@ -20,7 +20,7 @@ I am using the binary distribution of SimpleITK for Anaconda, why do I get an er   Referenced from: .../lib/python2.7/site-packages/SimpleITK/_SimpleITK.so   Reason: image not found -This type of error can occour if a library SimpleITK depends on can +This type of error can occur if a library SimpleITK depends on can not be found. It may be that the version of the dependent library has changed in the Python environment and is no longer compatible. One solution is to create a `environment.yml` file with all the packages @@ -202,7 +202,7 @@ compiler. The first lines set a variable pointing to the standard location for the ImageJ directory. If ImageJ is installed somewhere else, the line should be modified. The second line provides the command to launch ImageJ using -the Java compiler. It includes flags that point to ImageJ's plugiin +the Java compiler. It includes flags that point to ImageJ's plugin directory and ImageJ's ij.jar file. The SITK\_SHOW\_COMMAND tells SimpleITK.Show() to launch Java with @@ -228,7 +228,7 @@ different Python versions and distributions have different programs for creating and managing virtual environments. The use of a virtual environment allows you to elegantly deal with -package compatability issues, to quote `The Hitchhiker’s Guide to +package compatibility issues, to quote `The Hitchhiker’s Guide to Python! `__: A Virtual Environment is a tool to keep the dependencies required by @@ -274,7 +274,7 @@ Is my compiler supported? ------------------------- SimpleITK uses advanced C++ meta-programming to instantiate ITK's Images -and Filters. Addtionally, we use some headers which are included in the +and Filters. Additionally, we use some headers which are included in the C99 and C++ TR1 extension. Therefore SimpleITK places additional requirements on the compiler beyond what is required for ITK. In principle we require C++x03 with C99's "stdint.h" and TR1's diff --git a/Documentation/docs/source/filters.rst b/Documentation/docs/source/filters.rst index e35e74c81..5ca665d03 100644 --- a/Documentation/docs/source/filters.rst +++ b/Documentation/docs/source/filters.rst @@ -107,7 +107,7 @@ SimpleITK Filters * - `ClosingByReconstructionImageFilter `_ - Closing by reconstruction of an image. * - `CoherenceEnhancingDiffusionImageFilter `_ - - Coherence enhanging diffusion and edge enhancing diffusion. + - Coherence enhancing diffusion and edge enhancing diffusion. * - `CollidingFrontsImageFilter `_ - Selects a region of space where two independent fronts run towards each other. * - `ComplexToImaginaryImageFilter `_ @@ -217,7 +217,7 @@ SimpleITK Filters * - `GradientRecursiveGaussianImageFilter `_ - Computes the gradient of an image by convolution with the first derivative of a Gaussian. * - `GrayscaleConnectedClosingImageFilter `_ - - Enhance pixels associated with a dark object (identified by a seed pixel) where the dark object is surrounded by a brigher object. + - Enhance pixels associated with a dark object (identified by a seed pixel) where the dark object is surrounded by a brighter object. * - `GrayscaleConnectedOpeningImageFilter `_ - Enhance pixels associated with a bright object (identified by a seed pixel) where the bright object is surrounded by a darker object. * - `GrayscaleDilateImageFilter `_ @@ -387,7 +387,7 @@ SimpleITK Filters * - `MorphologicalWatershedFromMarkersImageFilter `_ - Morphological watershed transform from markers. * - `MorphologicalWatershedImageFilter `_ - - Watershed segmentation implementation with morphogical operators. + - Watershed segmentation implementation with morphological operators. * - `MultiLabelSTAPLEImageFilter `_ - This filter performs a pixelwise combination of an arbitrary number of input images, where each of them represents a segmentation of the same scene (i.e., image). * - `MultiplyImageFilter `_ diff --git a/Documentation/docs/source/installation.rst b/Documentation/docs/source/installation.rst index ad8b8d2d0..f834ee489 100644 --- a/Documentation/docs/source/installation.rst +++ b/Documentation/docs/source/installation.rst @@ -3,7 +3,7 @@ Installation SimpleITK provides a simplified interface to ITK in a variety of languages. You can either download binaries, if they are available for -your platform and prefered language, or you can :ref:`build SimpleITK ` +your platform and preferred language, or you can :ref:`build SimpleITK ` yourself from the source code. Additionally, there are several recommended third-party software diff --git a/Documentation/docs/source/setUp.rst b/Documentation/docs/source/setUp.rst index dd85f5c6f..14218d89b 100644 --- a/Documentation/docs/source/setUp.rst +++ b/Documentation/docs/source/setUp.rst @@ -17,7 +17,7 @@ For any other OS, you must build the binaries yourself. Set Up Eclipse --------------- -Download `Eclipse `_ on your platform of choice. Eclipse is a commonly used integrated development environemnt (IDE) used for Java because it makes development, debugging and deployment streamlined. +Download `Eclipse `_ on your platform of choice. Eclipse is a commonly used integrated development environment (IDE) used for Java because it makes development, debugging and deployment streamlined. Then, create a new project in Eclipse. Choose *File --> New --> Project...*, choosing Java Project in the Eclipse project wizard dialog, and name the project as you like. In this example, our project is called SimpleITK Demo. Create a new class by choosing *File --> New --> Class*, or simply copy the code below and paste into the project item in the Package Explorer view and Eclipse will automatically create the class and hierarchy for you. @@ -166,4 +166,4 @@ Then click *Build -> Build Solution*. Assuming you have followed all of the step .. figure:: ../images/VisualStudioExample.jpg :scale: 60% :align: center - :alt: Visual Studio Example Build \ No newline at end of file + :alt: Visual Studio Example Build diff --git a/Documentation/docs/source/tutorialsAndCourses.rst b/Documentation/docs/source/tutorialsAndCourses.rst index 854057b19..5a85a4247 100644 --- a/Documentation/docs/source/tutorialsAndCourses.rst +++ b/Documentation/docs/source/tutorialsAndCourses.rst @@ -3,11 +3,11 @@ Tutorials and Courses --------------------- -Whether you are a student at the beginging of a research career in biomedical image analysis or a seasoned veteran, you will +Whether you are a student at the beginning of a research career in biomedical image analysis or a seasoned veteran, you will likely find attending a SimpleITK tutorial beneficial. These tutorials will shorten the time it -takes you to master SimpleITK, with all of the material (code, data, presentations) provided using permisive licenses. After the -tutorial, you can readily use the code in your research or go on to use it in your own teaching activities. Additionaly, -attending a tutorial allows you to directly interact with the SimpleITK team. This is your oppurtunity to request specific features, +takes you to master SimpleITK, with all of the material (code, data, presentations) provided using permissive licenses. After the +tutorial, you can readily use the code in your research or go on to use it in your own teaching activities. Additionally, +attending a tutorial allows you to directly interact with the SimpleITK team. This is your opportunity to request specific features, and get advice on how to best utilize SimpleITK for your research needs. While SimpleITK supports eight programming languages, the lingua franca of the biomedical data science community is either From 05aed951f6c4417e5eaa13f441a14c05e5d8dce8 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 2 May 2019 11:14:40 -0400 Subject: [PATCH 117/400] Importing additional git configuration scripts from ITK --- Utilities/GitSetup/setup-github | 159 ++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100755 Utilities/GitSetup/setup-github diff --git a/Utilities/GitSetup/setup-github b/Utilities/GitSetup/setup-github new file mode 100755 index 000000000..d9ce34992 --- /dev/null +++ b/Utilities/GitSetup/setup-github @@ -0,0 +1,159 @@ +#!/usr/bin/env bash +#============================================================================= +# Copyright 2018 Kitware, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#============================================================================= + +# Run this script to set up the local Git repository to push to +# a personal fork for this project in GitHub. + +# Project configuration instructions: +# +# - Populate adjacent "config" file with: +# github.protocol = Top GitHub protocol, if not 'https' +# github.host = Top GitHub fully qualified host name, if not github.com +# github.site = Top GitHub URL, if not "://" +# github.organization-name = Name of organization containing project in GitHub +# github.repo-name = Name of repository within GitHub organization +# github.url = GitHub push URL with "$username" placeholder, +# if not "/$username/.git" +# github.pushurl = GitHub push URL with "$username" placeholder, +# if not "git@:$username/.git" +# github.remote = GitHub remote name, if not "origin" +# upstream.url = Preferred fetch url for upstream remote +# upstream.remote = Preferred name for upstream remote + +die() { + echo 1>&2 "$@" ; exit 1 +} + +# Make sure we are inside the repository. +cd "${BASH_SOURCE%/*}" && + +# Load the project configuration. +protocol=$(git config -f config --get github.protocol || + echo "https") && +host=$(git config -f config --get github.host || echo "github.com") && +site=$(git config -f config --get github.site || + echo "$protocol://$host") && +organization_name=$(git config -f config --get github.organization-name) && +repo_name=$(git config -f config --get github.repo-name) && +pushurl_=$(git config -f config --get github.pushurl || + echo "git@$host:\$username/$repo_name.git") && +remote=$(git config -f config --get github.remote || + echo "origin") && +fetchurl_=$(git config -f config --get github.url || + echo "$site/\$username/$repo_name.git") || +die 'This project is not configured to use GitHub.' + +read -ep "Remote name for your forked repository? ['"$remote"']: " ans && + if [ -n "$ans" ] && [ ! "$ans" == "$remote" ]; then + remote=$ans + fi +git config github.fork.remote $remote + +# Get standard upstream url +upstream_url=$(git config -f config --get upstream.url) +upstream_remote=$(git config -f config --get upstream.remote) +remote_url=$(git config --get remote."$remote".url) +# Check if the remote was cloned with the upstream URL and recommend removal +# if so. +if test "$upstream_url" = "$remote_url"; then + echo 'Remote "'"$remote"'" uses the repository recommended to use as the "'"$upstream_remote"'" repository.' + read -ep 'Remove "'"$remote"'" remote and reconfigure as recommended? [y/N]: ' ans && + if [ "$ans" == "y" ] || [ "$ans" == "Y" ]; then + git remote remove "$remote" + setup=1 + else + setup='' + fi +fi + +# Get current github push URL. +pushurl=$(git config --get remote."$remote".pushurl || + git config --get remote."$remote".url || echo '') && + +# Tell user about current configuration. +if test -n "$pushurl"; then + echo 'Remote "'"$remote"'" is currently configured to push to + + '"$pushurl"' +' && + read -ep 'Reconfigure GitHub? [y/N]: ' ans && + if [ "$ans" == "y" ] || [ "$ans" == "Y" ]; then + setup=1 + else + setup='' + fi +else + echo 'Remote "'"$remote"'" is not configured. +' && + read -ep 'Configure GitHub to contribute to '"$repo_name"'? [Y/n]: ' ans && + if [ "$ans" == "n" ] || [ "$ans" == "N" ]; then + exit 0 + else + setup=1 + fi +fi && + +setup_instructions='Add your SSH public keys at + + '"$site"'/settings/keys + +Then visit the main repository at: + + '"$site/$organization_name/$repo_name"' + +and use the Fork button in the upper right. +' + +# Perform setup if necessary. +if test -n "$setup"; then + echo 'Sign-in to GitHub to get/set your username at + + '"$site/login"' + +'"$setup_instructions" && + read -ep "GitHub username? [$USER]: " gu && + if test -z "$gu"; then + gu="$USER" + fi && + fetchurl="${fetchurl_/\$username/$gu}" && + if test -z "$pushurl"; then + git remote add "$remote" "$fetchurl" + else + git config remote."$remote".url "$fetchurl" + fi && + pushurl="${pushurl_/\$username/$gu}" && + git config remote."$remote".pushurl "$pushurl" && + echo 'Remote "'"$remote"'" is now configured to push to + + '"$pushurl"' +' +fi && + +# Optionally test GitHub access. +if test -n "$pushurl"; then + read -ep 'Test access to GitHub (SSH)? [y/N]: ' ans && + if [ "$ans" == "y" ] || [ "$ans" == "Y" ]; then + echo -n 'Testing GitHub access by SSH...' + if git ls-remote --heads "$pushurl" >/dev/null; then + echo 'passed.' + else + echo 'failed.' && + die 'Could not access your GitHub fork of this project. +'"$setup_instructions" + fi + fi +fi From 148eff38e43c54027bfca69859e0b4cd65ed4afb Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 2 May 2019 12:51:33 -0400 Subject: [PATCH 118/400] Updating SetupForDevelopment to version 4 with Github upstream Configure for new SimpleITK development workflow with github.com SimpelITK/SimpleITK as the official upstream repository. Remove the old itk.org repositories and alias. --- Utilities/GitSetup/config | 24 ++++------------ Utilities/GitSetup/github-tips | 1 + Utilities/GitSetup/setup-git-aliases | 10 +++++++ Utilities/SetupForDevelopment.sh | 41 ++++++++++++++++------------ 4 files changed, 41 insertions(+), 35 deletions(-) create mode 100755 Utilities/GitSetup/github-tips create mode 100755 Utilities/GitSetup/setup-git-aliases diff --git a/Utilities/GitSetup/config b/Utilities/GitSetup/config index fc469296a..fb0b9727f 100644 --- a/Utilities/GitSetup/config +++ b/Utilities/GitSetup/config @@ -1,20 +1,8 @@ -# Kitware Local Git Setup Scripts - Sample Project Configuration -# -# Copy to "config" and edit as necessary. - [hooks] - url = https://itk.org/ITK.git - branch = hooks - -[ssh] - host = itk.org - key = id_git_itk - request-url = https://www.kitware.com/Admin/SendPassword.cgi - -[stage] - url = git://itk.org/stage/SimpleITK.git - pushurl = git@itk.org:stage/SimpleITK.git - + url = http://public.kitware.com/GitSetup.git [upstream] - url = https://itk.org/SimpleITK.git - #pushurl = git@/itk.org/SimpleITK.git + url = https://github.com/SimpleITK/SimpleITK.git + remote = upstream +[github] + organization-name = SimpleITK + repo-name = SimpleITK diff --git a/Utilities/GitSetup/github-tips b/Utilities/GitSetup/github-tips new file mode 100755 index 000000000..f1f641af1 --- /dev/null +++ b/Utilities/GitSetup/github-tips @@ -0,0 +1 @@ +#!/usr/bin/env bash diff --git a/Utilities/GitSetup/setup-git-aliases b/Utilities/GitSetup/setup-git-aliases new file mode 100755 index 000000000..6f316fa66 --- /dev/null +++ b/Utilities/GitSetup/setup-git-aliases @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +# Useful alias to see what commits are on the current branch with respect to +# upstream/master +git config alias.prepush 'log --graph --stat upstream/master..' + + + +# Remove old gerrit alias +git config alias.gerrit-push >/dev/null && git config --unset alias.gerrit-push +git config alias.gerrit-merge >/dev/null && git config --unset alias.gerrit-merge diff --git a/Utilities/SetupForDevelopment.sh b/Utilities/SetupForDevelopment.sh index 69cd61a45..1bdbfc28f 100755 --- a/Utilities/SetupForDevelopment.sh +++ b/Utilities/SetupForDevelopment.sh @@ -78,31 +78,38 @@ elif test ${git_version_arr[0]} -eq $git_required_major_version; then fi echo -e "Git version $git_version is OK.\n" -cd "${BASH_SOURCE%/*}/.." && Utilities/GitSetup/setup-user && echo && -Utilities/GitSetup/setup-hooks && Utilities/DevelopmentSetupScripts/SetupHooks.sh && echo && -( read -ep "Do you want to setup access itk.org? [y/N]: " access; - if [ "$access" == "y" ] || [ "$access" == "Y" ]; then - Utilities/GitSetup/setup-upstream && echo && - Utilities/GitSetup/setup-stage && echo && - Utilities/GitSetup/setup-ssh || - echo 'Failed to setup SSH. Run this again to retry.' - fi) && echo && -Utilities/GitSetup/tips +Utilities/GitSetup/setup-hooks && echo && +(Utilities/GitSetup/setup-upstream || + echo 'Failed to setup origin. Run this again to retry.') && echo && +(Utilities/GitSetup/setup-github || + echo 'Failed to setup GitHub. Run this again to retry.') && echo && +Utilities/GitSetup/tips && +Utilities/GitSetup/github-tips +### LOCAL CONFIG TO REVIEW -cd Utilities/DevelopmentSetupScripts +# Rebase master by default +git config rebase.stat true +git config branch.master.rebase true -echo "Setting up useful Git aliases..." -./SetupGitAliases.sh || exit 1 -echo # Disable legacy Gerrit hooks -echo "Disable legacy Gerrit hook..." -git config --unset hooks.GerritId +hook=$(git config --get hooks.GerritId) && +if "$hook"; then + echo "Disable legacy Gerrit hook..." && + git config hooks.GerritId false && + (git config --get remote.gerrit.url > /dev/null && + git remote remove gerrit) +fi + +git config --get remote.stage.url > /dev/null && + ( echo "Removing legacy stage repo..." && + git remote remove stage ) + # Record the version of this setup so Hooks/pre-commit can check it. -SetupForDevelopment_VERSION=3 +SetupForDevelopment_VERSION=4 git config hooks.SetupForDevelopment ${SetupForDevelopment_VERSION} From 25a03e53e9482c017f2573cf6a3b9e46a03019a6 Mon Sep 17 00:00:00 2001 From: Jens-Peter Tuppatsch Date: Sat, 4 May 2019 09:04:03 +0200 Subject: [PATCH 119/400] added files --- .../FastMarchingSegmentation/CMakeLists.txt | 11 ++ .../FastMarchingSegmentation.cs | 109 ++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs diff --git a/Examples/FastMarchingSegmentation/CMakeLists.txt b/Examples/FastMarchingSegmentation/CMakeLists.txt index 92d0d3d84..046849020 100644 --- a/Examples/FastMarchingSegmentation/CMakeLists.txt +++ b/Examples/FastMarchingSegmentation/CMakeLists.txt @@ -29,3 +29,14 @@ sitk_add_python_test( Example.FastMarchingSegmentation1 DATA{${SimpleITK_DATA_ROOT}/Baseline/FastMarchingSegmentation1.mha} 0.01 ) + +sitk_add_csharp_test( Example.FastMarchingSegmentation1 + "${CMAKE_CURRENT_SOURCE_DIR}/FastMarchingSegmentation.cs" + DATA{${SimpleITK_DATA_ROOT}/Input/BrainProtonDensitySlice.png} + "${SimpleITK_TEST_OUTPUT_DIR}/CSharpFastMarchingSegmentation1.png" + 81 114 1.0 -0.5 3.0 100 100 + IMAGE_COMPARE + ${SimpleITK_TEST_OUTPUT_DIR}/CSharpFastMarchingSegmentation1.mha + DATA{${SimpleITK_DATA_ROOT}/Baseline/FastMarchingSegmentation1.mha} + 0.01 + ) diff --git a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs new file mode 100644 index 000000000..ce499b1ba --- /dev/null +++ b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs @@ -0,0 +1,109 @@ + +/*========================================================================= +* +* Copyright Insight Software Consortium +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0.txt +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*=========================================================================*/ + +// This example is based on ITK's FastMarchingImageFilter.cxx example + +//INPUTS: {BrainProtonDensitySlice.png} +// OUTPUTS: {FastMarchingImageFilterOutput5.png} +// ARGUMENTS: 81 114 1.0 -0.5 3.0 100 100 + + +using System; + +using SitkImage = itk.simple.Image; +using System.Globalization; + +namespace itk.simple.examples +{ + public class FastMarchingSegmentation + { + static void Main(string[] args) + { + if (args.Length < 9) + { + Console.WriteLine("Missing Parameters "); + Console.WriteLine("Usage: " + System.AppDomain.CurrentDomain.FriendlyName + + " inputImage outputImage seedX seedY " + + " Sigma SigmoidAlpha SigmoidBeta TimeThreshold"); + return; + } + + string inputFilename = args[0]; + string outputFilename = args[1]; + + uint[] seedPosition = { Convert.ToUInt32(args[2]), Convert.ToUInt32(args[3]) }; + + double sigma = double.Parse(args[4], CultureInfo.InvariantCulture); + double alpha = double.Parse(args[5], CultureInfo.InvariantCulture); ; + double beta = double.Parse(args[6], CultureInfo.InvariantCulture); + double timeThreshold = double.Parse(args[7], CultureInfo.InvariantCulture); + double stoppingTime = double.Parse(args[8], CultureInfo.InvariantCulture); + + // Read input image + + SitkImage inputImage = SimpleITK.ReadImage(inputFilename, PixelIDValueEnum.sitkFloat32); + + // The input image will be processed with a few iterations of + // feature-preserving diffusion. We create a filter and set the + // appropriate parameters. + + CurvatureAnisotropicDiffusionImageFilter smoothing = new CurvatureAnisotropicDiffusionImageFilter(); + smoothing.SetTimeStep(0.125); + smoothing.SetNumberOfIterations(5); + smoothing.SetConductanceParameter(9.0); + SitkImage smoothingOutput = smoothing.Execute(inputImage); + + SitkImage gradientMagnitudeOutput = SimpleITK.GradientMagnitudeRecursiveGaussian(smoothingOutput, sigma); + + SitkImage sigmoidOutput = SimpleITK.Sigmoid(gradientMagnitudeOutput, alpha, beta, 1.0, 0.0); + + + FastMarchingImageFilter fastMarching = new FastMarchingImageFilter(); + + //VectorUIntList trialPoints; Add trialPoints into list if using multiple seeds. Here we only use one seedpoint + + VectorUInt32 trialPoint = new VectorUInt32() { seedPosition[0], seedPosition[1], 0 }; + + + fastMarching.AddTrialPoint(trialPoint); + + // Since the front representing the contour will propagate continuously + // over time, it is desirable to stop the process once a certain time has + // been reached. This allows us to save computation time under the + // assumption that the region of interest has already been computed. The + // value for stopping the process is defined with the method + // SetStoppingValue(). In principle, the stopping value should be a + // little bit higher than the threshold value. + + //fastMarching.SetStoppingValue(stoppingTime); + + SitkImage fastmarchingOutput = fastMarching.Execute(sigmoidOutput); + + BinaryThresholdImageFilter thresholder = new BinaryThresholdImageFilter(); + thresholder.SetLowerThreshold(0.0); + thresholder.SetUpperThreshold(timeThreshold); + thresholder.SetOutsideValue(0); + thresholder.SetInsideValue(255); + SitkImage result = thresholder.Execute(fastmarchingOutput); + + SimpleITK.WriteImage(result, outputFilename); + + } + } +} From 0718f6d15eb0eb685647d751a1773d667961b516 Mon Sep 17 00:00:00 2001 From: Jens-Peter Tuppatsch Date: Sat, 4 May 2019 12:19:24 +0200 Subject: [PATCH 120/400] changed initialization of VectorUint32 --- .../FastMarchingSegmentation.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs index ce499b1ba..0ce5c782e 100644 --- a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs +++ b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs @@ -1,5 +1,4 @@ - -/*========================================================================= +/*========================================================================= * * Copyright Insight Software Consortium * @@ -47,7 +46,7 @@ static void Main(string[] args) string inputFilename = args[0]; string outputFilename = args[1]; - uint[] seedPosition = { Convert.ToUInt32(args[2]), Convert.ToUInt32(args[3]) }; + uint[] seedPosition = { Convert.ToUInt32(args[2]), Convert.ToUInt32(args[3]),0 }; double sigma = double.Parse(args[4], CultureInfo.InvariantCulture); double alpha = double.Parse(args[5], CultureInfo.InvariantCulture); ; @@ -78,8 +77,10 @@ static void Main(string[] args) //VectorUIntList trialPoints; Add trialPoints into list if using multiple seeds. Here we only use one seedpoint - VectorUInt32 trialPoint = new VectorUInt32() { seedPosition[0], seedPosition[1], 0 }; - + VectorUInt32 trialPoint = new VectorUInt32(3); + trialPoint[0] = seedPosition[0]; + trialPoint[1] = seedPosition[1]; + trialPoint[2] = seedPosition[2]; fastMarching.AddTrialPoint(trialPoint); From 84d1ef1462c163c1eb351c4ba11335c5848be7aa Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 6 May 2019 16:01:25 -0400 Subject: [PATCH 121/400] Fix array access exception Use the "Add" method to automatically resize the vector array as needed. --- .../FastMarchingSegmentation/FastMarchingSegmentation.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs index 0ce5c782e..5a583865b 100644 --- a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs +++ b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs @@ -78,9 +78,9 @@ static void Main(string[] args) //VectorUIntList trialPoints; Add trialPoints into list if using multiple seeds. Here we only use one seedpoint VectorUInt32 trialPoint = new VectorUInt32(3); - trialPoint[0] = seedPosition[0]; - trialPoint[1] = seedPosition[1]; - trialPoint[2] = seedPosition[2]; + trialPoint.Add(seedPosition[0]); + trialPoint.Add(seedPosition[1]); + trialPoint.Add(seedPosition[2]); fastMarching.AddTrialPoint(trialPoint); From 848eda19ba4c9c9901d6efbe4b4b494c2da0209a Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 6 May 2019 16:20:08 -0400 Subject: [PATCH 122/400] Correct output file extension to match the tested extension The full filename now match. --- Examples/FastMarchingSegmentation/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Examples/FastMarchingSegmentation/CMakeLists.txt b/Examples/FastMarchingSegmentation/CMakeLists.txt index 046849020..7527f20ff 100644 --- a/Examples/FastMarchingSegmentation/CMakeLists.txt +++ b/Examples/FastMarchingSegmentation/CMakeLists.txt @@ -33,8 +33,8 @@ sitk_add_python_test( Example.FastMarchingSegmentation1 sitk_add_csharp_test( Example.FastMarchingSegmentation1 "${CMAKE_CURRENT_SOURCE_DIR}/FastMarchingSegmentation.cs" DATA{${SimpleITK_DATA_ROOT}/Input/BrainProtonDensitySlice.png} - "${SimpleITK_TEST_OUTPUT_DIR}/CSharpFastMarchingSegmentation1.png" - 81 114 1.0 -0.5 3.0 100 100 + "${SimpleITK_TEST_OUTPUT_DIR}/CSharpFastMarchingSegmentation1.mha" + 81 114 1.0 -0.5 3.0 100 110 IMAGE_COMPARE ${SimpleITK_TEST_OUTPUT_DIR}/CSharpFastMarchingSegmentation1.mha DATA{${SimpleITK_DATA_ROOT}/Baseline/FastMarchingSegmentation1.mha} From acd5a32838640aa65da199369a63b73fcd4b52c9 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 6 May 2019 16:20:57 -0400 Subject: [PATCH 123/400] Consistently use the stopping time parameter in fast marching example --- Examples/FastMarchingSegmentation/CMakeLists.txt | 4 ++-- .../FastMarchingSegmentation/FastMarchingSegmentation.cs | 2 +- .../FastMarchingSegmentation/FastMarchingSegmentation.cxx | 6 ++++-- .../FastMarchingSegmentation/FastMarchingSegmentation.py | 5 ++++- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Examples/FastMarchingSegmentation/CMakeLists.txt b/Examples/FastMarchingSegmentation/CMakeLists.txt index 7527f20ff..b703304de 100644 --- a/Examples/FastMarchingSegmentation/CMakeLists.txt +++ b/Examples/FastMarchingSegmentation/CMakeLists.txt @@ -12,7 +12,7 @@ sitk_add_test(NAME CXX.Example.FastMarchingSegmentation1 $ DATA{${SimpleITK_DATA_ROOT}/Input/BrainProtonDensitySlice.png} ${SimpleITK_TEST_OUTPUT_DIR}/CXXFastMarchingSegmentation1.mha - 81 114 1.0 -0.5 3.0 100 100 + 81 114 1.0 -0.5 3.0 100 110 IMAGE_COMPARE ${SimpleITK_TEST_OUTPUT_DIR}/CXXFastMarchingSegmentation1.mha DATA{${SimpleITK_DATA_ROOT}/Baseline/FastMarchingSegmentation1.mha} @@ -23,7 +23,7 @@ sitk_add_python_test( Example.FastMarchingSegmentation1 "${CMAKE_CURRENT_SOURCE_DIR}/FastMarchingSegmentation.py" DATA{${SimpleITK_DATA_ROOT}/Input/BrainProtonDensitySlice.png} ${SimpleITK_TEST_OUTPUT_DIR}/PythonFastMarchingSegmentation1.mha - 81 114 1.0 -0.5 3.0 100 100 + 81 114 1.0 -0.5 3.0 100 110 IMAGE_COMPARE ${SimpleITK_TEST_OUTPUT_DIR}/PythonFastMarchingSegmentation1.mha DATA{${SimpleITK_DATA_ROOT}/Baseline/FastMarchingSegmentation1.mha} diff --git a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs index 5a583865b..c5ff7f039 100644 --- a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs +++ b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs @@ -92,7 +92,7 @@ static void Main(string[] args) // SetStoppingValue(). In principle, the stopping value should be a // little bit higher than the threshold value. - //fastMarching.SetStoppingValue(stoppingTime); + fastMarching.SetStoppingValue(stoppingTime); SitkImage fastmarchingOutput = fastMarching.Execute(sigmoidOutput); diff --git a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cxx b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cxx index c17691ae7..95f0a382f 100644 --- a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cxx +++ b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cxx @@ -35,7 +35,7 @@ int main(int argc, char *argv[]) std::cerr << "Missing Parameters " << std::endl; std::cerr << "Usage: " << argv[0]; std::cerr << " inputImage outputImage seedX seedY"; - std::cerr << " Sigma SigmoidAlpha SigmoidBeta TimeThreshold" << std::endl; + std::cerr << " Sigma SigmoidAlpha SigmoidBeta TimeThreshold StoppingTime" << std::endl; return EXIT_FAILURE; } @@ -51,7 +51,7 @@ int main(int argc, char *argv[]) const double alpha = atof( argv[6] ); const double beta = atof( argv[7] ); const double timeThreshold = atof( argv[8] ); - + const double stoppingTime = atof( argv[9] ); sitk::Image inputImage = sitk::ReadImage( inputFilename, sitk::sitkFloat32 ); @@ -86,6 +86,8 @@ int main(int argc, char *argv[]) fastMarching.AddTrialPoint( trialPoint ); + fastMarching.SetStoppingValue(stoppingTime); + sitk::Image fastmarchingOutput = fastMarching.Execute( sigmoidOutput ); diff --git a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.py b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.py index ec5179350..2a3446570 100755 --- a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.py +++ b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.py @@ -23,7 +23,7 @@ import sys import os -if len(sys.argv) < 4: +if len(sys.argv) < 10: print("Usage: {0} ".format(sys.argv[0])) sys.exit(1) @@ -36,6 +36,7 @@ alpha = float(sys.argv[6]) beta = float(sys.argv[7]) timeThreshold = float(sys.argv[8]) +stoppingTime = float(sys.argv[9]) inputImage = sitk.ReadImage(inputFilename, sitk.sitkFloat32) @@ -68,6 +69,8 @@ fastMarching.AddTrialPoint(trialPoint) +fastMarching.SetStoppingValue(stoppingTime) + fastMarchingOutput = fastMarching.Execute(sigmoidOutput) From 1cbddb94f6f060d85447f3678da151f1a4cdc921 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 6 May 2019 16:34:47 -0400 Subject: [PATCH 124/400] Check the ctest variable results for the return value of the script Print a useful message about what error occurred during regression testing. --- Testing/CI/Azure/azure.cmake | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Testing/CI/Azure/azure.cmake b/Testing/CI/Azure/azure.cmake index 885ba57c5..93903292d 100644 --- a/Testing/CI/Azure/azure.cmake +++ b/Testing/CI/Azure/azure.cmake @@ -115,3 +115,27 @@ string(TIMESTAMP build_date "%Y-%m-%d") message("CDash Build Identifier: ${build_date} ${CTEST_BUILD_NAME}") include("${DASHBOARD_BRANCH_DIRECTORY}/simpleitk_common.cmake") + +function(print_if var) + if( NOT ${${var}} EQUAL 0 ) + message(SEND_ERROR "\tUnexpected result ${var}: ${${var}}") + endif() +endfunction() + + +if(NOT ${configure_return} EQUAL 0 OR + NOT ${build_return} EQUAL 0 OR + NOT ${build_errors} EQUAL 0 OR + NOT ${build_warnings} EQUAL 0 OR + NOT ${test_return} EQUAL 0) + message(FATAL_ERROR + "Build did not complete without warnings, errors, or failures.") + print_if(configure_return) + print_if(build_return) + print_if(build_errors) + print_if(build_warnings) + print_if(test_return) + +else() + return(0) +endif() From 872658e8956bf7bbc3cf50b08d4034aac7d6d914 Mon Sep 17 00:00:00 2001 From: Jens-Peter Tuppatsch Date: Sat, 27 Apr 2019 18:03:47 +0200 Subject: [PATCH 125/400] Adding CSharp CannySegementation example --- Examples/CSharp/CMakeLists.txt | 11 ++ .../CannySegmentationLevelSetImageFilter.cs | 126 ++++++++++++++++++ ...ldSegmentationLevelSetVentricle.png.sha512 | 1 + 3 files changed, 138 insertions(+) create mode 100644 Examples/CSharp/CannySegmentationLevelSetImageFilter.cs create mode 100644 Testing/Data/Input/ThresholdSegmentationLevelSetVentricle.png.sha512 diff --git a/Examples/CSharp/CMakeLists.txt b/Examples/CSharp/CMakeLists.txt index 94b717b41..f52bd22c1 100644 --- a/Examples/CSharp/CMakeLists.txt +++ b/Examples/CSharp/CMakeLists.txt @@ -23,3 +23,14 @@ set_tests_properties( CSharp.Example.ImageGetBuffer "${SimpleITK_TEST_OUTPUT_DIR}/CSharp.ConnectedThresholdOutput2.png" "a9695df04cde5b9c5481d8c253a5b3aa" ) + + sitk_add_csharp_test( Example.CannySegmentationLevelSetImageFilter + "${CMAKE_CURRENT_SOURCE_DIR}/CannySegmentationLevelSetImageFilter.cs" + DATA{${SimpleITK_DATA_ROOT}/Input/BrainProtonDensitySlice.png} + DATA{${SimpleITK_DATA_ROOT}/Input/ThresholdSegmentationLevelSetVentricle.png} + "${SimpleITK_TEST_OUTPUT_DIR}/CSharp.CannySegmentationLevelSetImageFilter.png" + 7.0 0.1 -10.0 + 127.5 15 + IMAGE_MD5_COMPARE + "${SimpleITK_TEST_OUTPUT_DIR}/CSharp.CannySegmentationLevelSetImageFilter.png" + "a275b65bab21559f1398e4cf5765938a") diff --git a/Examples/CSharp/CannySegmentationLevelSetImageFilter.cs b/Examples/CSharp/CannySegmentationLevelSetImageFilter.cs new file mode 100644 index 000000000..d229e77a4 --- /dev/null +++ b/Examples/CSharp/CannySegmentationLevelSetImageFilter.cs @@ -0,0 +1,126 @@ +/*========================================================================= +* +* Copyright Insight Software Consortium +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0.txt +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*=========================================================================*/ + +using System; +using System.Globalization; + +using PixelId = itk.simple.PixelIDValueEnum; +using SitkImage = itk.simple.Image; + +namespace itk.simple.examples +{ + public class Program + { + static void Main(string[] args) + { + if (args.Length < 8) + { + Console.WriteLine("Missing Parameters "); + Console.WriteLine("Usage: " + System.AppDomain.CurrentDomain.FriendlyName + + "inputImage initialModel outputImage cannyThreshold " + + "cannyVariance advectionWeight initialModelIsovalue maximumIterations "); + return; + } + + string inputFilename = args[0]; + string initialModelFilename = args[1]; + + string outputFilename = args[2]; + + double cannyThreshold = double.Parse(args[3], CultureInfo.InvariantCulture); + double cannyVariance = double.Parse(args[4], CultureInfo.InvariantCulture); + double advectionWeight = double.Parse(args[5], CultureInfo.InvariantCulture); + double intialModelIsovalue = double.Parse(args[6], CultureInfo.InvariantCulture); + uint maxIterations = uint.Parse(args[7], CultureInfo.InvariantCulture); + + // Read input image + + SitkImage inputImage = SimpleITK.ReadImage(inputFilename, PixelId.sitkFloat32); + SitkImage initialModel = SimpleITK.ReadImage(initialModelFilename, PixelId.sitkFloat32); + + // The input image will be processed with a few iterations of + // feature-preserving diffusion. We create a filter and set the + // appropriate parameters. + + GradientAnisotropicDiffusionImageFilter diffusion=new GradientAnisotropicDiffusionImageFilter(); + diffusion.SetConductanceParameter(1.0); + diffusion.SetTimeStep(0.125); + diffusion.SetNumberOfIterations(5); + SitkImage diffusedImage=diffusion.Execute(inputImage); + + // As with the other ITK level set segmentation filters, the terms of the + // CannySegmentationLevelSetImageFilter level set equation can be + // weighted by scalars. For this application we will modify the relative + // weight of the advection term. The propagation and curvature term weights + // are set to their defaults of 0 and 1, respectively. + + CannySegmentationLevelSetImageFilter cannySegmentation = new CannySegmentationLevelSetImageFilter(); + cannySegmentation.SetAdvectionScaling(advectionWeight); + cannySegmentation.SetCurvatureScaling(1.0); + cannySegmentation.SetPropagationScaling(0.0); + + // The maximum number of iterations is specified from the command line. + // It may not be desirable in some applications to run the filter to + // convergence. Only a few iterations may be required. + + cannySegmentation.SetMaximumRMSError(0.01); + cannySegmentation.SetNumberOfIterations(maxIterations); + + // There are two important parameters in the + // CannySegmentationLevelSetImageFilter to control the behavior of the + // Canny edge detection. The variance parameter controls the + // amount of Gaussian smoothing on the input image. The threshold + // parameter indicates the lowest allowed value in the output image. + // Thresholding is used to suppress Canny edges whose gradient magnitudes + // fall below a certain value. + + cannySegmentation.SetThreshold(cannyThreshold); + cannySegmentation.SetVariance(cannyVariance); + + // Finally, it is very important to specify the isovalue of the surface in + // the initial model input image. In a binary image, for example, the + // isosurface is found midway between the foreground and background values. + + cannySegmentation.SetIsoSurfaceValue(intialModelIsovalue); + + SitkImage output = cannySegmentation.Execute(initialModel, diffusedImage); + + BinaryThresholdImageFilter thresholder= new BinaryThresholdImageFilter(); + thresholder.SetUpperThreshold(10.0); + thresholder.SetLowerThreshold(0.0); + + thresholder.SetOutsideValue(0); + thresholder.SetInsideValue(255); + output=thresholder.Execute(output); + + + output = SimpleITK.Cast(output, PixelIDValueEnum.sitkUInt8); + + SimpleITK.WriteImage(output,outputFilename); + + // Print out some useful information + Console.WriteLine(""); + Console.WriteLine("Max. no. iterations: {0}", cannySegmentation.GetNumberOfIterations()); + Console.WriteLine("Max. RMS error: {0}", cannySegmentation.GetMaximumRMSError()); + Console.WriteLine(""); + Console.WriteLine("No. elpased iterations: {0}", cannySegmentation.GetElapsedIterations()); + Console.WriteLine("RMS change: {0}", cannySegmentation.GetRMSChange()); + + } + } +} diff --git a/Testing/Data/Input/ThresholdSegmentationLevelSetVentricle.png.sha512 b/Testing/Data/Input/ThresholdSegmentationLevelSetVentricle.png.sha512 new file mode 100644 index 000000000..96c8bda9f --- /dev/null +++ b/Testing/Data/Input/ThresholdSegmentationLevelSetVentricle.png.sha512 @@ -0,0 +1 @@ +4a75c62c8b9778683f39eafcd31fc4274fcb7c9096d4cbbbb1f798da5a37becc5657a24d24092f887c1919dfade1aa9964399cf982ace4a3b79865c501b8d746 From 6052c5def2e20cfab5425ed62776ddc23f0bfc6f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 21 May 2019 14:59:16 -0400 Subject: [PATCH 126/400] COMP: Update statistics filter without indexed inputs Updates to ITKv5 removed the generic image indexed inputs methods. Updated the affected filters to use the names input interface. --- Code/BasicFilters/json/MinimumMaximumImageFilter.json | 8 +++++++- Code/BasicFilters/json/StatisticsImageFilter.json | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Code/BasicFilters/json/MinimumMaximumImageFilter.json b/Code/BasicFilters/json/MinimumMaximumImageFilter.json index 99e43fb75..e76b59d51 100644 --- a/Code/BasicFilters/json/MinimumMaximumImageFilter.json +++ b/Code/BasicFilters/json/MinimumMaximumImageFilter.json @@ -2,11 +2,17 @@ "name" : "MinimumMaximumImageFilter", "template_code_filename" : "ImageFilter", "template_test_filename" : "ImageFilter", - "number_of_inputs" : 1, + "number_of_inputs" : 0, "pixel_types" : "BasicPixelIDTypeList", "filter_type" : "itk::MinimumMaximumImageFilter", "no_procedure" : true, "no_return_image" : true, + "inputs" : [ + { + "name" : "Image", + "type" : "Image" + } + ], "members" : [], "measurements" : [ { diff --git a/Code/BasicFilters/json/StatisticsImageFilter.json b/Code/BasicFilters/json/StatisticsImageFilter.json index 31dccffe1..6ce25925f 100644 --- a/Code/BasicFilters/json/StatisticsImageFilter.json +++ b/Code/BasicFilters/json/StatisticsImageFilter.json @@ -2,12 +2,18 @@ "name" : "StatisticsImageFilter", "template_code_filename" : "ImageFilter", "template_test_filename" : "ImageFilter", - "number_of_inputs" : 1, + "number_of_inputs" : 0, "doc" : "Docs", "pixel_types" : "BasicPixelIDTypeList", "filter_type" : "itk::StatisticsImageFilter", "no_procedure" : true, "no_return_image" : true, + "inputs" : [ + { + "name" : "Image", + "type" : "Image" + } + ], "members" : [], "measurements" : [ { From 12e10b4d452c0f1985aa9051d373eb27105b9414 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 21 May 2019 14:59:16 -0400 Subject: [PATCH 127/400] COMP: Update statistics filter without indexed inputs Updates to ITKv5 removed the generic image indexed inputs methods. Updated the affected filters to use the names input interface. --- Code/BasicFilters/json/MinimumMaximumImageFilter.json | 8 +++++++- Code/BasicFilters/json/StatisticsImageFilter.json | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Code/BasicFilters/json/MinimumMaximumImageFilter.json b/Code/BasicFilters/json/MinimumMaximumImageFilter.json index 99e43fb75..e76b59d51 100644 --- a/Code/BasicFilters/json/MinimumMaximumImageFilter.json +++ b/Code/BasicFilters/json/MinimumMaximumImageFilter.json @@ -2,11 +2,17 @@ "name" : "MinimumMaximumImageFilter", "template_code_filename" : "ImageFilter", "template_test_filename" : "ImageFilter", - "number_of_inputs" : 1, + "number_of_inputs" : 0, "pixel_types" : "BasicPixelIDTypeList", "filter_type" : "itk::MinimumMaximumImageFilter", "no_procedure" : true, "no_return_image" : true, + "inputs" : [ + { + "name" : "Image", + "type" : "Image" + } + ], "members" : [], "measurements" : [ { diff --git a/Code/BasicFilters/json/StatisticsImageFilter.json b/Code/BasicFilters/json/StatisticsImageFilter.json index 31dccffe1..6ce25925f 100644 --- a/Code/BasicFilters/json/StatisticsImageFilter.json +++ b/Code/BasicFilters/json/StatisticsImageFilter.json @@ -2,12 +2,18 @@ "name" : "StatisticsImageFilter", "template_code_filename" : "ImageFilter", "template_test_filename" : "ImageFilter", - "number_of_inputs" : 1, + "number_of_inputs" : 0, "doc" : "Docs", "pixel_types" : "BasicPixelIDTypeList", "filter_type" : "itk::StatisticsImageFilter", "no_procedure" : true, "no_return_image" : true, + "inputs" : [ + { + "name" : "Image", + "type" : "Image" + } + ], "members" : [], "measurements" : [ { From 44f7706960dcc46ee22b47544674f2a75ff56e33 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 13 Mar 2019 13:56:59 -0400 Subject: [PATCH 128/400] Add new data download service Replace old NLM servers with AWS S3 mirrored data service. --- CMake/sitkExternalData.cmake | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CMake/sitkExternalData.cmake b/CMake/sitkExternalData.cmake index 896792abf..536db140a 100644 --- a/CMake/sitkExternalData.cmake +++ b/CMake/sitkExternalData.cmake @@ -34,10 +34,7 @@ if(NOT SimpleITK_FORBID_DOWNLOADS) list(APPEND ExternalData_URL_TEMPLATES # Data mirrored from SimpleITKExternalData repository - "https://erie.nlm.nih.gov/SimpleITKExternalData/%(algo)/%(hash)" - - # Data published by MIDAS - "https://placid.nlm.nih.gov/api/rest?method=midas.bitstream.download&checksum=%(hash)&algorithm=%(algo)" + "https://s3.amazonaws.com/simpleitk/public/%(algo)/%(hash)" # Data published on GitHub Pages "https://simpleitk.github.io/SimpleITKExternalData/%(algo)/%(hash)" From d472b14d02d77d276232040dbef2a5acadb34acc Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 28 Jan 2019 17:02:07 -0500 Subject: [PATCH 129/400] Allow for tolerance comparison of BSpline domain origin In ITKv5 with the commit 794c82d16ebc4b4035f37e0675176e7677f9bd68, the consistency of the parameters has been fix but there is a little variability with some of the transform domain values derived from the parameters. This patch adds tolerance to certain test of derived transform domain values as needed. --- Testing/Unit/sitkTransformTests.cxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Testing/Unit/sitkTransformTests.cxx b/Testing/Unit/sitkTransformTests.cxx index 24b005a39..ea7da36c0 100644 --- a/Testing/Unit/sitkTransformTests.cxx +++ b/Testing/Unit/sitkTransformTests.cxx @@ -776,7 +776,7 @@ TEST(TransformTest,BSplineTransform) tx.reset(new sitk::BSplineTransform(2)); EXPECT_EQ( tx->SetTransformDomainDirection(v4(-1.0,0.0,0.0,-1.0)).GetTransformDomainDirection(), v4(-1.0,0.0,0.0,-1.0) ); - EXPECT_EQ( tx->SetTransformDomainOrigin( v2(1.1,1.2) ).GetTransformDomainOrigin(), v2(1.1,1.2) ); + EXPECT_VECTOR_DOUBLE_NEAR( tx->SetTransformDomainOrigin( v2(1.1,1.2) ).GetTransformDomainOrigin(), v2(1.1,1.2), 1e-15 ); // copy constructor sitk::BSplineTransform tx1( *(tx.get()) ); @@ -786,7 +786,7 @@ TEST(TransformTest,BSplineTransform) EXPECT_EQ( tx1.GetNumberOfFixedParameters(), 10u ); EXPECT_EQ( tx1.GetTransformDomainDirection(), v4(-1.0,0.0,0.0,-1.0) ); EXPECT_EQ( tx1.GetTransformDomainMeshSize(), std::vector(2,1u) ); - EXPECT_EQ( tx1.GetTransformDomainOrigin(), v2(1.1,1.2) ); + EXPECT_VECTOR_DOUBLE_NEAR( tx1.GetTransformDomainOrigin(), v2(1.1,1.2), 1e-15); EXPECT_EQ( tx1.GetTransformDomainPhysicalDimensions(), v2(1.0,1.0) ); sitk::BSplineTransform tx2(2); @@ -805,8 +805,8 @@ TEST(TransformTest,BSplineTransform) // copy on write tx1.SetTransformDomainOrigin( v2(1.3,1.4) ); - EXPECT_EQ( tx1.GetTransformDomainOrigin(), v2(1.3,1.4) ); - EXPECT_EQ( tx2.GetTransformDomainOrigin(), v2(2.3,2.4) ); + EXPECT_VECTOR_DOUBLE_NEAR( tx1.GetTransformDomainOrigin(), v2(1.3,1.4), 1e-15); + EXPECT_VECTOR_DOUBLE_NEAR( tx2.GetTransformDomainOrigin(), v2(2.3,2.4), 1e-15); EXPECT_EQ( tx1.GetNumberOfFixedParameters(), tx2.GetNumberOfFixedParameters() ); EXPECT_EQ( tx1.GetTransformDomainDirection(), tx2.GetTransformDomainDirection() ); @@ -934,7 +934,7 @@ TEST(TransformTest,BSplineTransform_coefficientImages) EXPECT_EQ( tx.GetNumberOfFixedParameters(), 10u ); EXPECT_EQ( tx.GetTransformDomainDirection(), v4(1.0,0.0,0.0,1.0) ); EXPECT_EQ( tx.GetTransformDomainMeshSize(), std::vector(2,7u) ); - EXPECT_EQ( tx.GetTransformDomainOrigin(), v2(3.0,3.0) ); + EXPECT_VECTOR_DOUBLE_NEAR( tx.GetTransformDomainOrigin(), v2(3.0,3.0), 1e-15 ); EXPECT_EQ( tx.GetTransformDomainPhysicalDimensions(), v2(21.0,21.0) ); std::vector originalParams = tx.GetParameters(); From a5546b95f0c288c56579619bdf72d9ced8bf3232 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 31 May 2019 13:21:10 -0400 Subject: [PATCH 130/400] Import ISC's code of conduct from ITK --- CODE_OF_CONDUCT.md | 432 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 432 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..77da77438 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,432 @@ +ITK Community Participation Guidelines +====================================== + +Version 1.0 – Updated May, 2018 + +The [Insight Software Consortium](http://www.insightsoftwareconsortium.org/) +(ISC) as the copyright holder of the Insight +Toolkit (ITK) has adopted the following Code of +Conduct for SimpleITK. + +Purpose +------- + +The primary goal of the ITK community is to be inclusive of the largest number +of contributors, with the most varied and diverse backgrounds. Please read our +[Motivation](Documentation/CodeOfConduct/Motivation.md) statement. + +Our community is built upon [values](#our-values), and we welcome and encourage +members to [lead by example](#lead-by-example). However, we are aware that we +must ensure a safe, welcoming and productive environment, where all people +should feel safe to participate, introduce new ideas and inspire others. Hence, +we acknowledge the importance of providing mechanisms for participants to +[report](Documentation/CodeOfConduct/Reporting.md) [unacceptable behavior](#unacceptable-behavior), and the +responsibility of the community to [enforce](Documentation/CodeOfConduct/Enforcement.md) these guidelines. + +Our Values +---------- + +The following behaviors are expected of all ITK community members: + +### Be open + +We invite anyone to participate in our community. We are accepting of all who +wish to take part in our activities, fostering an environment where anyone can +participate and everyone can make a difference. Members of the community are +expected to be open to collaboration in any aspect of the project, whether it's +on + + * developing cutting-edge features, + * fixing bugs, + * improving documentation, + * adding examples or or enhancing the existing ones, + * improving the testing framework, + * enhancing the code coverage, + * improving the ITK ecosystem with new tools, + * hosting ISC-endorsed events, + * or otherwise. + +We are receptive to constructive comment and criticism; gracefully accept +others' advice, as the experiences and skill sets of other members contribute +to the whole of our efforts. + +Remember that we are different. The strength of our community comes from its +diversity, people from a wide range of backgrounds. Different people have +different perspectives on issues, and all of them may help in finding the most +appropriate solution in each situation. + +We prefer to use public methods of communication for project-related messages, +unless discussing something sensitive (e.g. potential conflicts of interest). +This applies to messages for help or project-related support, too; not only is +a public support request much more likely to result in an answer to a question, +it also ensures that any inadvertent mistakes in answering are more easily +detected and corrected. Please avoid seeking for help privately; asking in the +official ITK discussion forums will increase your chances of getting an answer. + +### Be welcoming + +We strive to be a community that welcomes and supports people of all +backgrounds and identities. Be positive and engaging. Refrain from being +snarky. + +If someone asks for help, it is because they need it. Politely suggest specific +documentation or more appropriate venues where adequate. Avoid aggressive or +vague responses. + +### Be inclusive + +Seek diverse perspectives. Diversity of views and of people on teams powers +innovation, even if it is not always comfortable. Encourage all voices. Help +new perspectives be heard and listen actively. If you find yourself dominating +a discussion, it is especially important to step back and encourage other +voices to join in. Be aware of how much time is taken up by dominant members of +the group. Provide alternative ways to contribute or participate when possible. + +Be inclusive of everyone in an interaction, respecting and facilitating +people's participation whether they are: + + * Remote (on video or phone) + * Non-native language speakers + * Coming from a different culture + * Using pronouns other than "he" or "she" + * Living in a different time zone + * Facing other challenges to participate + +Think about how you might facilitate alternative ways to contribute or +participate. Make way for other voices and listen actively to them. + +### Be civil and considerate + +Your work will be used by other people, and you in turn will depend on the work +of others. Any decision you take will affect users and colleagues, and you +should take those consequences into account when making decisions. Remember +that we are a world-wide community. You may be communicating with someone with +a different primary language or cultural background. + +Members of the community are considerate of their peers. We are thoughtful when +addressing the efforts of others, keeping in mind that often times the labor +was completed simply for the good of the community. + +### Be respectful + +We are respectful of others, their positions, their skills, their commitments, +and their efforts. We are respectful of the volunteer efforts that permeate the +ITK community. We are respectful of the processes set forth in the community, +and we work within them. When we disagree, we are courteous in raising our +issues. + +We *must* be able to speak directly when we disagree and when we think we need +to improve. We cannot withhold hard truths. Doing so respectfully is hard, +doing so when others do not seem to be listening is harder, and hearing such +comments when one is the recipient can be even harder still. We need to be +honest and direct, as well as respectful. + +Value each other's ideas, styles and viewpoints. When we disagree, try to +understand why. Being unable to understand why someone holds a viewpoint does +not mean that they are wrong. Be respectful to differing viewpoints and +experiences. Disagreements, both social and technical, happen all the time and +ITK is no exception. Try to understand where others are coming from, as seeing +a question from their viewpoint may help find a new path forward. Be open to +different possibilities and to being wrong. Be kind in all interactions and +communications, especially when debating the merits of different options. Our +goal should not be to "win" every disagreement or argument. A more productive +goal is to be open to ideas that make our own ideas better. The best solutions +to hard problems rarely come from a single angle. Strive to be an example for +inclusive thinking. "Winning" is when different perspectives make our work +richer and stronger. + +Do not forget that it is human to err: blaming each other does not get us +anywhere, while we can learn from mistakes to find better solutions. + +Most importantly, disagreement is no excuse for poor manners. We might all +experience some frustration now and then, but we cannot allow that frustration +to turn into a personal attack. We do not allow disagreement to persist and +fester leaving others uncertain of the agreed direction. We work together to +resolve conflict, assume good intentions and do our best to act in an empathic +fashion. We work together to resolve conflict, and assume good intentions. We +may all experience some frustration from time to time, but we do not allow +frustration to turn into a personal attack. + +A community where people feel uncomfortable or threatened is not a productive +one. + +### Be collaborative + +What we produce is a complex whole made of many parts, it is the sum of many +efforts, long working hours, personal endeavors and sleepless nights. +Collaboration between teams that each have their own goal and vision is +essential; for the whole to be more than the sum of its parts, each part must +make an effort to understand the whole. + +Our work will be used by other people, and in turn we will depend on the work +of others. When we make something for the benefit of the project, we are +willing to explain to others how it works, so that they can build on the work +to make it even better. Any decision we make will affect users and colleagues, +and we take those consequences seriously when making decisions. + +Collaboration reduces redundancy and improves the quality of our work. +Internally and externally, we celebrate good collaboration. Wherever possible, +we work closely with upstream projects and others in the free software +community to coordinate our efforts. We prefer to work transparently and +involve interested parties as early as possible. + +We recognize that the project works better when we trust the teams closest to a +problem to make the decision for the project. We strive to find common ground, +and failing that, the matter can be escalated to the ITK governance structure +represented by the ISC members and its designated leaders who can review the +decision, arbitrate and provide clarity and direction. Ultimately, if a +decision has been taken by the people responsible for it, and is supported by +the project governance, it will stand. None of us expects to agree with every +decision, and we value highly the willingness to stand by the project and help +it deliver even on the occasions when we ourselves may prefer a different +route. + +We value discussion, data, decisiveness and consensus. We gather opinions, data +and commitments from concerned parties before taking a decision. We expect +leaders to help teams come to a decision in a reasonable time, to seek guidance +or be willing to take the decision themselves when consensus is lacking, and to +take responsibility for implementation. + +The poorest decision of all is no decision: clarity of direction has value in +itself. Sometimes all the data are not available, or consensus is elusive. A +decision must still be made because it enables the project as a whole to move +forward faster and to adapt to times. There is no guarantee of a perfect +decision every time - we prefer to err, learn, and err less in future than to +postpone action indefinitely. + +Resoluteness in decisions demands considerateness; take bold decisions, but do +so mindful of the challenges they present for other community members and the +use of ITK itself across different projects, and work to soften the impact of +those decisions on them. Communicating changes and their reasoning clearly and +early on is as important as the implementation of the change itself. + +### Be careful in the words that we choose + +We are careful and respectful in our communication and we take responsibility +for our own speech. Be kind to others. Do not insult or put down other +participants. We will not accept harassment or other exclusionary behavior. + +### Take responsibility for our words and our actions + +Be aware of your impact and how intense interactions may be affecting people. +Be direct, constructive and positive. We can all make mistakes; when we do, we +take responsibility for your impact and your mistakes - if someone says they +have been harmed through your words or actions, listen carefully, apologize +sincerely, and correct the behavior going forward. If someone has been harmed +or offended, we listen carefully and respectfully, and work to right the wrong. + +A simple apology can go a long way. It can often de-escalate a situation, and +telling someone that you are sorry is an act of empathy that does not +automatically imply an admission of guilt. + +### Be concise + +Value each other's time. Keep in mind that what you write once will be read +by hundreds of persons. Writing a short message means people can understand the +conversation as efficiently as possible. Messages that are brief and to the +point take more time to write, but are repaid many times over when other +members of the list make the same effort. Short messages should always strive +to be empathetic, welcoming, friendly and patient. When a long explanation is +necessary, consider adding a summary. + +Try to bring new ideas to a conversation so that each message adds something +unique to the thread, keeping in mind that the rest of the thread still +contains the other messages with arguments that have already been made. + +Try to stay on topic, especially in discussions that are already fairly large. +If you must change the topic, start a new thread. Also, avoid flooding the list +with long threads by reading the entire thread first, instead of responding +quickly to many emails in a short period of time. + +### Be inquisitive + +Nobody knows everything! We will try hard to be responsive and helpful. + +### Moderate your expectations + +Please respect that community members choose how they spend their time in the +project. A thoughtful question about your expectations is preferable to demands +for another person's time. Respect the time and energy of long-time community +members. + +### Ask for help when unsure + +Nobody is expected to be perfect in the ITK community. Asking questions early, +and bringing discussions to the table through the appropriate channels, avoids +many problems (whether they are technical, such as design flaws, technical +debt, etc., or intellectual, etc.) later, so questions are encouraged, though +they may be directed to the appropriate forum. Those who are asked should be +responsive and helpful. + +We do our best to answer to all questions and concerns in a timely manner. But +we may fail to do so sometimes. Please, assume good faith and do not feel +discouraged. It may be a matter of asking incomplete, poorly formatted or too +broad or generic questions; some other times, the questions may have been +answered previously. Please take some time by doing research in FAQs, +documentation and other ITK resources, as well as with search engines before +asking questions. + +We welcome new members, and love to see them becoming important people in our +community. + +### Step down considerately + +When somebody leaves or disengages from the ITK project, we ask that they do so +in a way that minimizes disruption to the Project. They should tell people they +are leaving and take the proper steps to ensure that others can pick up where +they left off. + +Lead By Example +--------------- + +We all lead by example, in debate and in action. We encourage new participants +to feel empowered to lead, to take action, and to experiment when they feel +innovation could improve the project. Leadership can be exercised by anyone +simply by taking action, there is no need to wait for recognition when the +opportunity to lead presents itself. + +To err is human; whenever we make a mistake, we take responsibility for it, and +we work to right the wrong. + +We encourage everyone to participate and are committed to building a community +for all. Although we may not be able to satisfy everyone, we all agree that +everyone is equal. Whenever a participant has made a mistake, we expect them to +take responsibility for it. + +Unacceptable Behavior +--------------------- + +Code of Conduct violations reduce the value of the community for everyone and +we take them seriously. + +The following behaviors are considered to be unacceptable under these +guidelines: + + * Personal attacks and violent threats or language directed against another + person, including but not limited to offensive comments related to gender, + gender identity and expression, gender identity, sexual orientation, ability, + physical appearance, body, age, race, ethnicity, nationality, language, + religion or otherwise dimension of diversity. + * Sexist, racist, or otherwise discriminatory jokes and insults. + * Deliberate misgendering or use of "dead" or rejected names. + * Unwelcome comments regarding a person's lifestyle choices and practices, + including those related to food, health, parenting, drugs, and employment. + * Derogatory language. + * Sustained disruption of discussion. + * Excessive profanity. Avoid swearwords; people differ greatly in their + sensitivity to swearing. + * Publishing (or threatening to publish) other people's personally + identifying information and/or material ("doxing"). + * Deliberate "outing" of any aspect of a person's identity without their + consent except as necessary to protect other community members or other + vulnerable people from intentional abuse. + * Sharing of non-harassing private communication, such as emails sent + privately or non-publicly, or unlogged forums such as IRC channel history, + without the sender's consent. + +Harassment will not be tolerated in any of its forms either. Specifically: + + * Unwelcome sexual attention or physical contact, including simulated + contact (e.g., textual descriptions like "hug" or "backrub"), or otherwise + creating sexualized environment. + * Posting gratuitous or off-topic sexually explicit or violent material. + * Incitement of violence towards any individual, including encouraging a + person to commit suicide or to engage in self-harm. + * Deliberate intimidation. + * Stalking or following. + * Harassing photography or recording, including logging online activity for + harassment purposes + * Pattern of inappropriate social contact, such as requesting/assuming + inappropriate levels of intimacy with others. + * Continued one-on-one communication after requests to cease. + +Although the above list cannot be exhaustive, we will not tolerate +discrimination based on any of the protected characteristics in our +[Diversity Statement](Documentation/CodeOfConduct/Motivation.md#diversity-statement). + +The relative anonymity (if any) in the discussion forums is no shelter for +unacceptable behavior. + +Influencing Unacceptable Behavior +--------------------------------- + +We will treat advocating for, influencing or encouraging other members to cause +hostility, or leading to any of the above behavior or activities the same way +we treat the activities themselves, and thus the same consequences apply. + +Sharing Data +------------ + +When sharing your testing data, either as an input to an ITK contribution or as +part of a discussion topic or help request, please bear in mind that you must +remove any Personal Identifiable Information (PII) from your images prior to +making them available. Please bear in mind that besides cleaning pixel data, +other meta-data (such as individual attributes when dealing with DICOM files) +may require additional de-identification processes. + +For dealing with DICOM files/medical images, please read the related +documentation (namely, the +[DICOM Supplement 55](ftp://medical.nema.org/medical/dicom/final/sup55_ft.pdf) +and +[DICOM Supplement 142](ftp://medical.nema.org/medical/dicom/final/sup142_ft.pdf)). +If you still need help for de-identifying your images, please ask on the +[ITK discussion](https://discourse.itk.org/). + +Please, simply avoid using images that, despite having been used in image +analysis and related areas historically (e.g. "Lena"), may be interpreted as +being degrading to part of our community, or reinforcing stereotypes. + +Community members shall not attempt to identify de-identified images. + +Feedback +-------- + +Everyone is encouraged to ask questions about these guidelines. We would be +happy to hear suggestions to improve any aspect of this Code of Conduct. + +If you are organizing an event or activity where ITK is a building block, +please reach us for including a policies concerning aspects of ITK. + +Modifications to these Guidelines +--------------------------------- + +The ISC may amend these guidelines in order to adapt to, and may also vary the +associated procedures where appropriate in a particular case. Community +members' agreement to comply with these guidelines will be deemed agreement to +any changes to it. In case ISC amends the guidelines, the new guidelines will +be reachable as a new version of this document. You can sign up for updates by +subscribing to this repository's notifications in your settings. + +License and Attribution +----------------------- + +This document and all associated processes are only possible with the hard work +of many, many ITK community members, and other open-source initiative members. +These guidelines have sought inspiration and have drawn content with +modification from + + * [The Open Source Initiative](https://opensource.org/codeofconduct) + * [GitLab](https://about.gitlab.com/handbook/support/policies/#code-of-conduct) + * [Python](https://www.python.org/psf/codeofconduct/) + * [Django](https://www.djangoproject.com/conduct/reporting/) + * [Scipy](https://docs.scipy.org/doc/scipy//reference/dev/conduct/code_of_conduct.html) + * [Nipype](https://github.com/nipy/nipype/blob/master/CODE_OF_CONDUCT.md) + * [Jupyter](https://github.com/jupyter/governance/blob/master/conduct/code_of_conduct.md) + * [The Linux Foundation](https://www.linuxfoundation.org/events/code-of-conduct/) + * [Ubuntu](https://www.ubuntu.com/about/about-ubuntu/conduct) + * [Brainhack](http://www.brainhack.org/code-of-conduct.html) + * [Mozilla](https://www.mozilla.org/en-US/about/governance/policies/participation/) + * [Contributor Covenant](https://www.contributor-covenant.org/) + +Additional text from the +[Citizen Code of Conduct](http://citizencodeofconduct.org), the +[Geek Feminism Wiki Harassment Policy contents](http://geekfeminism.wikia.com/wiki/Category:Harassment_policy), +and the +[TODO Group Open Code of Conduct](http://todogroup.org/opencodeofconduct/) +have also been adapted to build this Code of Conduct. + +We are grateful to those projects for contributing these materials under open +licensing terms for us to easily reuse. + +All content on this page is licensed under a Creative Commons Attribution +license. From 29e76e22a437720ee3e60d439a09ff221f27c3cc Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 31 May 2019 15:20:03 -0400 Subject: [PATCH 131/400] Updating contributing guide for after full GitHub migration --- .github/CONTRIBUTING.md | 44 ++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 9dab81c85..154a0bfbd 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,32 +1,48 @@ - -# Development +# Contributing to SimpleITK We welcome contributions from the community! -SimpleITK uses the [Git](http://git-scm.com/) distributed version control system. The main repository is hosted on [itk.org](https://itk.org/SimpleITK.git) and mirrored to [Github](https://github.com/SimpleITK/SimpleITK.git). We are currently using Github for pull requests, and issue tracking. +SimpleITK uses the [Git](http://git-scm.com/) distributed version control system. The main repository is hosted on [Github](https://github.com/SimpleITK/SimpleITK.git) and mirrored on [itk.org](https://itk.org/SimpleITK.git) and the [Insight Software Consortium](https://github.com/InsightSoftwareConsortium/SimpleITK). For pull requests and issue tracking Github is also used. + +There are many ways to contribute to SimpleITK: + - Report Bugs and Issues + - Improve SimpleITK Examples and Documentation + - Request new features + - Enhance the code coverage + - Contribute code to fix bugs or add new features. + +## Setup for development + +The following documentation is for an advanced contributor who is already familiar with git and GitHub workflow. The [ITK](https://github.com/InsightSoftwareConsortium/ITK) documentation may provide more details, or many online resource can orient you. -# Contribute +After you have cloned and forked the SimpleITK repository run the following command from the root: +``` +./Utilities/SetupForDevelopment.sh +``` -To submit code to SimpleITK, simply follow the standard GitHub workflow to make a pull request. More information can be found [here](https://guides.github.com/activities/forking/) and [here](https://gist.github.com/Chaser324/ce0505fbed06b947d962) regarding the workflow and getting your computer setup. +This script will configure your local checkout with the `upstream` repository and your own fork. Additionally, local hooks and aliases are added. -New feature topics should be based on the `master` branch, while bugs fixes for the recent release should be based on the `release` branch. A topic should *never* be based on the `next` branch. +## Workflow -## Setup +Submitting code to SimpleITK follows the standard pull request GitHub workflow. More information can be found [here](https://guides.github.com/activities/forking/) and [here](https://guides.github.com/introduction/flow/) regarding the workflow and getting your computer setup. -After cloning the repository, run `./Utilities/SetupForDevelopment.sh` from within the SimpleITK repository to setup Git hooks. Say "no" to setting up access to itk.org as only core developers need access for merging pull requests. +SimpleITK uses a branchy workflow where each PR should be a new topic branch. Locally, you create a branch with a concise and precise name then commit your changes to that branch. The branch should be based on your target branch which will usually be `master` for new features and improvements or `release` for back patches such as bugs fixes. -This setup script also sets up some alias for the legacy ITK's Gerrit review system. +After completing the local branch, push it to your fork, then create a GitHub pull request in the SimpleITK upstream repository. The pull request is then required to have an approving *code review*, and the *continuous integration* testing pass before the topic is merged into the upstream repository. ## Branches -* **next** - An unstable branch which contains future features for testing. These will be tested nightly on [CDash](https://open.cdash.org/index.php?project=SimpleITK). If the tests pass, then they will be merged into master. Pull requests should never be based on this branch, however this is the default branch you should push changes to. -* **master** - Stable branch of the code and suitable for most users when building SimpleITK. New features should be based on this branch. -* **release** - Branch of the code from the stable release. Patches which are bug fixes for the most recent releae should be based on the `release` branch. +* **master** - Stable branch of the code which is expected to available to users when building SimpleITK. New features should be based on this branch. +* **release** - Branch of the code from the stable release. Patches which are bug fixes for the most recent release should be based on the `release` branch. +* **dashboard** - CMake scripts used for continuous integration and nightly testing ## Testing Testing is very important for SimpleITK, to ensure quality and reliable code that "just works". Please include tests in pull request that add features or fix bugs. -Pull request will be reviewed and run through the continuous integration building and testing infrastructure to ensure quality code before being merged into the **next** branch for nightly testing. +Pull requests are run through the continuous integration building and +testing infrastructure to ensure quality code. Many options are tested +on the PR, but more are run when merged into master. It is important +to check the [CDash Dashboard](https://open.cdash.org/index.php?project=SimpleITK) to verify no new warnings or regression test failures are introduced after your patch has been merged. -The comprehensive regression testing is reported to the [CDash Dashboard](https://open.cdash.org/index.php?project=SimpleITK). This include the extensive nightly testing on the **next** branch, nightly distributions packages on the **release** or **master** branch, and continuous integration from Github pull requests. +The regression testing is reported to the [CDash Dashboard](https://open.cdash.org/index.php?project=SimpleITK). From ee135b83fcbbdcfb20ddd4e07364304e5dd4e6bc Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 4 Jun 2019 09:29:52 -0400 Subject: [PATCH 132/400] Improve basic definition of a SimpleITK image Be more specific with the types supported in SimpleITK. --- Documentation/docs/source/fundamentalConcepts.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Documentation/docs/source/fundamentalConcepts.rst b/Documentation/docs/source/fundamentalConcepts.rst index 58be9d83d..6e61192a8 100644 --- a/Documentation/docs/source/fundamentalConcepts.rst +++ b/Documentation/docs/source/fundamentalConcepts.rst @@ -18,9 +18,10 @@ that treat an image as an array which has two implications: (1) pixel/voxel spac is assumed to be isotropic and (2) there is no notion of an image's location in physical space. -SimpleITK images are either 2D, 3D, or 4D and can have an arbitrary number of -channels with a scalar or complex value in each channel. The physical -region in space which an image occupies is defined by the image's: +SimpleITK images are either 2D, 3D, or 4D and can be a scalar, labelmap +(scalar with run length encoding), complex value or have an arbitrary +number of scalar channels. The region in physical space which an +image occupies is defined by the image's: 1. Origin (vector like type) - location in the world coordinate system of the voxel with all zero indexes. From 5f6113c56f39e846606e7b22fbd9f794ad3ccc3e Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 4 Jun 2019 19:38:53 -0400 Subject: [PATCH 133/400] Use named inputs for Chan and Vese level set filter Adding named inputs clarifies usage of the filter and what the expected inputs are. Note the itk::ScalarChanAndVeseDenseLevelSetImageFilter::SetFeatureImage does not currently accept a pointer to a constant image only a constant pointer. --- ...ScalarChanAndVeseDenseLevelSetImageFilter.json | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Code/BasicFilters/json/ScalarChanAndVeseDenseLevelSetImageFilter.json b/Code/BasicFilters/json/ScalarChanAndVeseDenseLevelSetImageFilter.json index 67001bb60..f84f8307a 100644 --- a/Code/BasicFilters/json/ScalarChanAndVeseDenseLevelSetImageFilter.json +++ b/Code/BasicFilters/json/ScalarChanAndVeseDenseLevelSetImageFilter.json @@ -2,14 +2,25 @@ "name" : "ScalarChanAndVeseDenseLevelSetImageFilter", "template_code_filename" : "ImageFilter", "template_test_filename" : "ImageFilter", - "number_of_inputs" : 2, + "number_of_inputs" : 0, "pixel_types" : "RealPixelIDTypeList", "filter_type" : "itk::ScalarChanAndVeseDenseLevelSetImageFilter >", "include_files" : [ "itkAtanRegularizedHeavisideStepFunction.h", "itkHeavisideStepFunction.h" ], - "custom_set_input" : "filter->SetFunctionCount( 1 );\n filter->SetLevelSet( 0, image1 );\n filter->SetInput( image2 );", + "inputs" : [ + { + "name" : "InitialImage", + "type" : "Image", + "custom_itk_cast" : "filter->SetFunctionCount( 1 ); filter->SetLevelSet(0, this->CastImageToITK(*inInitialImage));" + }, + { + "name" : "FeatureImage", + "type" : "Image", + "custom_itk_cast" : "filter->SetInput(this->CastImageToITK(*inFeatureImage));" + } + ], "members" : [ { "name" : "MaximumRMSError", From 7e0365e83aae782edbd65bef300b64386e5eee94 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 5 Jun 2019 18:04:20 -0400 Subject: [PATCH 134/400] BUG: Use md5 file in source repository for SuperBuild source Use the md5 file to ensure the file is archived in the data archive and synchronized across SimpleITK's data repositories. --- SuperBuild/ExternalSource/lua-5.1.5.tar.gz.md5 | 1 + SuperBuild/ExternalSource/pcre-8.40.tar.gz.md5 | 1 + SuperBuild/ExternalSource/swig-3.0.12.tar.gz.md5 | 1 + SuperBuild/ExternalSource/swigwin-3.0.12.zip.md5 | 1 + .../ExternalSource/virtualenv-15.1.0.tar.gz.md5 | 1 + SuperBuild/External_Lua.cmake | 5 +---- SuperBuild/External_PCRE.cmake | 4 +--- SuperBuild/External_Swig.cmake | 9 ++------- SuperBuild/External_virtualenv.cmake | 4 +--- SuperBuild/SuperBuild.cmake | 13 +++++++++---- 10 files changed, 19 insertions(+), 21 deletions(-) create mode 100644 SuperBuild/ExternalSource/lua-5.1.5.tar.gz.md5 create mode 100644 SuperBuild/ExternalSource/pcre-8.40.tar.gz.md5 create mode 100644 SuperBuild/ExternalSource/swig-3.0.12.tar.gz.md5 create mode 100644 SuperBuild/ExternalSource/swigwin-3.0.12.zip.md5 create mode 100644 SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.md5 diff --git a/SuperBuild/ExternalSource/lua-5.1.5.tar.gz.md5 b/SuperBuild/ExternalSource/lua-5.1.5.tar.gz.md5 new file mode 100644 index 000000000..d8c15cd25 --- /dev/null +++ b/SuperBuild/ExternalSource/lua-5.1.5.tar.gz.md5 @@ -0,0 +1 @@ +2e115fe26e435e33b0d5c022e4490567 diff --git a/SuperBuild/ExternalSource/pcre-8.40.tar.gz.md5 b/SuperBuild/ExternalSource/pcre-8.40.tar.gz.md5 new file mode 100644 index 000000000..64a5eaf31 --- /dev/null +++ b/SuperBuild/ExternalSource/pcre-8.40.tar.gz.md5 @@ -0,0 +1 @@ +890c808122bd90f398e6bc40ec862102 diff --git a/SuperBuild/ExternalSource/swig-3.0.12.tar.gz.md5 b/SuperBuild/ExternalSource/swig-3.0.12.tar.gz.md5 new file mode 100644 index 000000000..fa68e9d52 --- /dev/null +++ b/SuperBuild/ExternalSource/swig-3.0.12.tar.gz.md5 @@ -0,0 +1 @@ +82133dfa7bba75ff9ad98a7046be687c diff --git a/SuperBuild/ExternalSource/swigwin-3.0.12.zip.md5 b/SuperBuild/ExternalSource/swigwin-3.0.12.zip.md5 new file mode 100644 index 000000000..37762aac2 --- /dev/null +++ b/SuperBuild/ExternalSource/swigwin-3.0.12.zip.md5 @@ -0,0 +1 @@ +a49524dad2c91ae1920974e7062bfc93 diff --git a/SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.md5 b/SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.md5 new file mode 100644 index 000000000..caaa89aee --- /dev/null +++ b/SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.md5 @@ -0,0 +1 @@ +44e19f4134906fe2d75124427dc9b716 diff --git a/SuperBuild/External_Lua.cmake b/SuperBuild/External_Lua.cmake index be91ec2d6..7757b811b 100644 --- a/SuperBuild/External_Lua.cmake +++ b/SuperBuild/External_Lua.cmake @@ -8,14 +8,12 @@ set(${CMAKE_CURRENT_LIST_FILENAME}_FILE_INCLUDED 1) set(proj Lua) set(lua_TARGET_VERSION 5.1.5) -set(lua_DOWNLOAD_SOURCE_HASH "2e115fe26e435e33b0d5c022e4490567") - # follow the standard EP_PREFIX locations set(lua_binary_dir ${CMAKE_CURRENT_BINARY_DIR}/${proj}-prefix/src/${proj}-build) set(lua_source_dir ${CMAKE_CURRENT_BINARY_DIR}/${proj}-prefix/src/${proj}) set(lua_install_dir ${CMAKE_CURRENT_BINARY_DIR}/${proj}) -sitkSourceDownload(lua_URL "lua-${lua_TARGET_VERSION}.tar.gz" ${lua_DOWNLOAD_SOURCE_HASH}) +sitkSourceDownload(lua_URL "lua-${lua_TARGET_VERSION}.tar.gz" ) file(WRITE "${lua_binary_dir}/CMakeCacheInit.txt" "${ep_common_cache}" ) @@ -27,7 +25,6 @@ set(lua_PATCH_COMMAND ${CMAKE_COMMAND} -E copy_if_different ExternalProject_Add(Lua URL "${lua_URL}" - URL_HASH MD5=${lua_DOWNLOAD_SOURCE_HASH} PATCH_COMMAND ${lua_PATCH_COMMAND} CMAKE_GENERATOR ${gen} CMAKE_ARGS diff --git a/SuperBuild/External_PCRE.cmake b/SuperBuild/External_PCRE.cmake index 3b80f8c76..bbfbd33ec 100644 --- a/SuperBuild/External_PCRE.cmake +++ b/SuperBuild/External_PCRE.cmake @@ -20,8 +20,7 @@ if(NOT PCRE_DIR) # set(PCRE_TARGET_VERSION 8.40) - set(PCRE_DOWNLOAD_SOURCE_HASH "890c808122bd90f398e6bc40ec862102") - sitkSourceDownload(PCRE_URL "pcre-${PCRE_TARGET_VERSION}.tar.gz" ${PCRE_DOWNLOAD_SOURCE_HASH}) + sitkSourceDownload(PCRE_URL "pcre-${PCRE_TARGET_VERSION}.tar.gz") # follow the standard EP_PREFIX locations @@ -43,7 +42,6 @@ if(NOT PCRE_DIR) ExternalProject_add(PCRE URL "${PCRE_URL}" - URL_HASH MD5=${PCRE_DOWNLOAD_SOURCE_HASH} CONFIGURE_COMMAND ${pcre_CONFIGURE_COMMAND} DEPENDS "${PCRE_DEPENDENCIES}" ${External_Project_USES_TERMINAL} diff --git a/SuperBuild/External_Swig.cmake b/SuperBuild/External_Swig.cmake index 4304374ac..9aedb9cbe 100644 --- a/SuperBuild/External_Swig.cmake +++ b/SuperBuild/External_Swig.cmake @@ -28,21 +28,17 @@ if(NOT SWIG_DIR) mark_as_advanced(SWIG_GIT_TAG) endif() - set(SWIG_DOWNLOAD_SOURCE_HASH "82133dfa7bba75ff9ad98a7046be687c") - set(SWIGWIN_DOWNLOAD_HASH "a49524dad2c91ae1920974e7062bfc93" ) - if(WIN32) # binary SWIG for windows #------------------------------------------------------------------------------ - sitkSourceDownload(SWIGWIN_URL "swigwin-${SWIG_TARGET_VERSION}.zip" ${SWIGWIN_DOWNLOAD_HASH}) + sitkSourceDownload(SWIGWIN_URL "swigwin-${SWIG_TARGET_VERSION}.zip") set(swig_source_dir "${CMAKE_CURRENT_BINARY_DIR}/swigwin") # swig.exe available as pre-built binary on Windows: ExternalProject_Add(Swig URL "${SWIGWIN_URL}" - URL_HASH MD5=${SWIGWIN_DOWNLOAD_HASH} SOURCE_DIR ${swig_source_dir} CONFIGURE_COMMAND "" BUILD_COMMAND "" @@ -103,10 +99,9 @@ if(NOT SWIG_DIR) GIT_TAG "${SWIG_GIT_TAG}" ) else() - sitkSourceDownload(SWIG_URL "swig-${SWIG_TARGET_VERSION}.tar.gz" ${SWIG_DOWNLOAD_SOURCE_HASH}) + sitkSourceDownload(SWIG_URL "swig-${SWIG_TARGET_VERSION}.tar.gz") set(SWIG_DOWNLOAD_STEP URL "${SWIG_URL}" - URL_HASH MD5=${SWIG_DOWNLOAD_SOURCE_HASH} ) endif() diff --git a/SuperBuild/External_virtualenv.cmake b/SuperBuild/External_virtualenv.cmake index 6ea48b699..4079601de 100644 --- a/SuperBuild/External_virtualenv.cmake +++ b/SuperBuild/External_virtualenv.cmake @@ -8,7 +8,6 @@ set(${CMAKE_CURRENT_LIST_FILENAME}_FILE_INCLUDED 1) set(proj virtualenv) set(${proj}_TARGET_VERSION 15.1.0) -set(${proj}_DOWNLOAD_SOURCE_HASH "44e19f4134906fe2d75124427dc9b716") # based on the standard EP_PREFIX locations, but since we don't build # or install, then standards install directory is also the source @@ -16,11 +15,10 @@ set(${proj}_binary_dir ${CMAKE_CURRENT_BINARY_DIR}/${proj}-prefix/src/${proj}-bu set(${proj}_source_dir ${CMAKE_CURRENT_BINARY_DIR}/${proj}) set(${proj}_install_dir ${CMAKE_CURRENT_BINARY_DIR}/${proj}) -sitkSourceDownload(${proj}_URL "virtualenv-${${proj}_TARGET_VERSION}.tar.gz" ${${proj}_DOWNLOAD_SOURCE_HASH}) +sitkSourceDownload(${proj}_URL "virtualenv-${${proj}_TARGET_VERSION}.tar.gz") ExternalProject_Add(${proj} URL "${${proj}_URL}" - URL_HASH MD5=${${proj}_DOWNLOAD_SOURCE_HASH} SOURCE_DIR ${${proj}_source_dir} BINARY_DIR ${${proj}_binary_dir} INSTALL_DIR ${${proj}_install_dir} diff --git a/SuperBuild/SuperBuild.cmake b/SuperBuild/SuperBuild.cmake index 8816fabb5..d5c5714d7 100644 --- a/SuperBuild/SuperBuild.cmake +++ b/SuperBuild/SuperBuild.cmake @@ -53,7 +53,7 @@ include( sitkSITKLegacyNaming ) add_custom_target( SuperBuildSimpleITKSource ) # -# sitkSourceDownload( ) +# sitkSourceDownload( ) # # A function to get a filename for an ExternalData source file used in # a superbuild. Adds a target which downloads all source code @@ -69,9 +69,14 @@ add_custom_target( SuperBuildSimpleITKSource ) # Note: Hash files are created under the SOURCE directory in the # .ExternalSource sub-directory during configuration. # -function(sitkSourceDownload outVar filename hash) - set(link_file "${CMAKE_CURRENT_SOURCE_DIR}/.ExternalSource/${filename}") - file(WRITE "${link_file}.md5" ${hash} ) +function(sitkSourceDownload outVar filename) + + set(link_file "${CMAKE_CURRENT_SOURCE_DIR}/ExternalSource/${filename}") + if( NOT EXISTS "${link_file}.md5") + set(link_file "${CMAKE_CURRENT_SOURCE_DIR}/.ExternalSource/${filename}") + file(WRITE "${link_file}.md5" ${hash} ) + endif() + ExternalData_Expand_arguments( SuperBuildSimpleITKSourceReal link From fa77dd1cb02f23de2d9191a34d830eed0f078938 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 6 Jun 2019 16:40:31 -0400 Subject: [PATCH 135/400] Adding sha512 files for source code --- SuperBuild/ExternalSource/lua-5.1.5.tar.gz.sha512 | 1 + SuperBuild/ExternalSource/pcre-8.40.tar.gz.sha512 | 1 + SuperBuild/ExternalSource/swig-3.0.12.tar.gz.sha512 | 1 + SuperBuild/ExternalSource/swigwin-3.0.12.zip.sha512 | 1 + SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.sha512 | 1 + 5 files changed, 5 insertions(+) create mode 100644 SuperBuild/ExternalSource/lua-5.1.5.tar.gz.sha512 create mode 100644 SuperBuild/ExternalSource/pcre-8.40.tar.gz.sha512 create mode 100644 SuperBuild/ExternalSource/swig-3.0.12.tar.gz.sha512 create mode 100644 SuperBuild/ExternalSource/swigwin-3.0.12.zip.sha512 create mode 100644 SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.sha512 diff --git a/SuperBuild/ExternalSource/lua-5.1.5.tar.gz.sha512 b/SuperBuild/ExternalSource/lua-5.1.5.tar.gz.sha512 new file mode 100644 index 000000000..7ed4e6c79 --- /dev/null +++ b/SuperBuild/ExternalSource/lua-5.1.5.tar.gz.sha512 @@ -0,0 +1 @@ +0142fefcbd13afcd9b201403592aa60620011cc8e8559d4d2db2f92739d18186860989f48caa45830ff4f99bfc7483287fd3ff3a16d4dec928e2767ce4d542a9 diff --git a/SuperBuild/ExternalSource/pcre-8.40.tar.gz.sha512 b/SuperBuild/ExternalSource/pcre-8.40.tar.gz.sha512 new file mode 100644 index 000000000..795258ae1 --- /dev/null +++ b/SuperBuild/ExternalSource/pcre-8.40.tar.gz.sha512 @@ -0,0 +1 @@ +b722e4b75bda548913917677348d4f892fef5eb2c879c0e8cc187c21fb8c1afcd0f7782fba95b3730335fdcba9759f945714779c03b5575f0044c1a667d1d308 diff --git a/SuperBuild/ExternalSource/swig-3.0.12.tar.gz.sha512 b/SuperBuild/ExternalSource/swig-3.0.12.tar.gz.sha512 new file mode 100644 index 000000000..58360e4bd --- /dev/null +++ b/SuperBuild/ExternalSource/swig-3.0.12.tar.gz.sha512 @@ -0,0 +1 @@ +5eaa2e06d8e4197fd02194051db1e518325dbb074a4c55a91099ad9c55193874f577764afc9029409a41bd520a95154095f26e33ef5add5c102bb2c1d98d33eb diff --git a/SuperBuild/ExternalSource/swigwin-3.0.12.zip.sha512 b/SuperBuild/ExternalSource/swigwin-3.0.12.zip.sha512 new file mode 100644 index 000000000..8e4174bb5 --- /dev/null +++ b/SuperBuild/ExternalSource/swigwin-3.0.12.zip.sha512 @@ -0,0 +1 @@ +f47024e850e2a7eca97e2d67c6a3e88677a44678bf0bf9cc0cd4f784648d325645e05dee5b3d661caa24b9653054447d3b53eefe005a09ad6a82cdc286c3c22b diff --git a/SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.sha512 b/SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.sha512 new file mode 100644 index 000000000..9769aeb1a --- /dev/null +++ b/SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.sha512 @@ -0,0 +1 @@ +d7e95b8c017ec076210f30b6fd4bb44be2f7dc0257492c25bb00fee597d3ade34226d03539180f1edaf2d27b361f8efdabb92d3476e13785b890878ee1295cb2 From f6fb9a52dc58ad8fd14e4358739936ae7c2e9de1 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 5 Jun 2019 12:40:08 -0400 Subject: [PATCH 136/400] Add support for slicing operations on 4D images Instatiate the SliceImageFilter in 4D. The Extract image filter is alread instatiated in 4D. Added support for detection of extract index to 4+ dimensions. --- Code/BasicFilters/json/SliceImageFilter.json | 2 + Testing/Unit/Python/CMakeLists.txt | 2 +- ...dexingTest.py => sitkImageIndexingTest.py} | 80 ++++++++++++++++++- Wrapping/Python/Python.i | 4 +- 4 files changed, 83 insertions(+), 5 deletions(-) rename Testing/Unit/Python/{ImageIndexingTest.py => sitkImageIndexingTest.py} (68%) diff --git a/Code/BasicFilters/json/SliceImageFilter.json b/Code/BasicFilters/json/SliceImageFilter.json index 43b6e602e..b66e113e9 100644 --- a/Code/BasicFilters/json/SliceImageFilter.json +++ b/Code/BasicFilters/json/SliceImageFilter.json @@ -4,6 +4,8 @@ "template_test_filename" : "ImageFilter", "number_of_inputs" : 1, "pixel_types" : "NonLabelPixelIDTypeList", + "custom_register" : "#ifdef SITK_4D_IMAGES\n this->m_MemberFactory->RegisterMemberFunctions< PixelIDTypeList, 4 > ();\n #endif\n this->m_MemberFactory->RegisterMemberFunctions< PixelIDTypeList, 3 > ();\n this->m_MemberFactory->RegisterMemberFunctions< PixelIDTypeList, 2 > ();", + "members" : [ { "name" : "Start", diff --git a/Testing/Unit/Python/CMakeLists.txt b/Testing/Unit/Python/CMakeLists.txt index 717d50d5c..989f23971 100644 --- a/Testing/Unit/Python/CMakeLists.txt +++ b/Testing/Unit/Python/CMakeLists.txt @@ -6,7 +6,7 @@ sitk_add_python_test( Test.ImageTests "${CMAKE_CURRENT_SOURCE_DIR}/sitkImageTests.py" ) sitk_add_python_test( Test.ImageIndexing - "${CMAKE_CURRENT_SOURCE_DIR}/ImageIndexingTest.py" ) + "${CMAKE_CURRENT_SOURCE_DIR}/sitkImageIndexingTest.py" ) sitk_add_python_test( Test.IOTest "${CMAKE_CURRENT_SOURCE_DIR}/IOTest.py" diff --git a/Testing/Unit/Python/ImageIndexingTest.py b/Testing/Unit/Python/sitkImageIndexingTest.py similarity index 68% rename from Testing/Unit/Python/ImageIndexingTest.py rename to Testing/Unit/Python/sitkImageIndexingTest.py index cc4e47d11..9367c5230 100644 --- a/Testing/Unit/Python/ImageIndexingTest.py +++ b/Testing/Unit/Python/sitkImageIndexingTest.py @@ -102,7 +102,7 @@ def test_2d(self): def test_3d_extract(self): - """testing __getitem__ for extrating 2D slices from 3D image""" + """testing __getitem__ for extracting 2D slices from 3D image""" nda = np.linspace(0, 59, 60 ).reshape(3,4,5) @@ -124,7 +124,7 @@ def test_3d_extract(self): def test_3d(self): - """testing __getitem__ for extrating 2D slices from 3D image""" + """testing __getitem__ for 3D sub-region""" nda = np.linspace(0, 59, 60 ).reshape(3,4,5) @@ -155,6 +155,82 @@ def test_3d(self): self.assertImageNDArrayEquals(img[:,::-2,::-1], nda[::-1,::-2,:]) self.assertImageNDArrayEquals(img[-1:-4:-1,:,:], nda[:,:,-1:-4:-1]) + + def test_4d_extract(self): + """testing __getitem__ for extracting 3D slices from 4D image""" + + + # Check if we have 4D Image support + try: + sitk.Image([2,2,2,2], sitk.sitkFloat32) + except RuntimeError: + return # exit and don't run the test + + nda = np.linspace(0, 119, 120 ).reshape(2,3,4,5) + + img = sitk.GetImageFromArray( nda, isVector=False ) + + # check some exceptions + self.assertRaises(IndexError, lambda : img[0,3] ) + self.assertRaises(IndexError, lambda : img[0,3,:,:] ) + self.assertRaises(IndexError, lambda : img[0, 1, 2,:] ) + self.assertRaises(IndexError, lambda : img[:,0,3] ) + self.assertRaises(IndexError, lambda : img[:,0,3,:,:] ) + self.assertRaises(IndexError, lambda : img[:,0,3,4,:] ) + self.assertRaises(IndexError, lambda : img[2,0,3,4,:] ) + self.assertRaises(IndexError, lambda : img[:,1:1,3,:] ) + self.assertRaises(IndexError, lambda : img[:,:,1:0,3] ) + + self.assertImageNDArrayEquals(img[1], nda[:,:,:,1]) + self.assertImageNDArrayEquals(img[-1], nda[:,:,:,-1]) + self.assertImageNDArrayEquals(img[:,-2], nda[:,:,-2]) + self.assertImageNDArrayEquals(img[:,:,2,:], nda[:,2]) + + self.assertImageNDArrayEquals(img[::-1,:,-2,:], nda[:,-2,:,::-1]) + self.assertImageNDArrayEquals(img[::-1,0,:,0:-1], nda[0:-1,:,0,::-1]) + + + def test_4d(self): + """testing __getitem__ for getting 4D sub-regions""" + + # Check if we have 4D Image support + try: + sitk.Image([2,2,2,2], sitk.sitkFloat32) + except RuntimeError: + return # exit and don't run the test + + nda = np.linspace(0, 119, 120 ).reshape(2,3,4,5) + + img = sitk.GetImageFromArray( nda, isVector=False ) + + # check some exceptions + self.assertRaises(IndexError, lambda : img[0,1,0,0,0] ) + self.assertRaises(IndexError, lambda : img[0,4,0,0] ) + self.assertRaises(IndexError, lambda : img[0,0,0,2] ) + self.assertRaises(IndexError, lambda : img[-6,0,0,0] ) + self.assertRaises(IndexError, lambda : img[0,0,0,-3] ) + + # check basic indexing + self.assertEqual( img[0,0,0,0], 0.0 ) + self.assertEqual( img[(1,0,0,0)], 1.0 ) + self.assertEqual( img[[2,0,0,0]], 2.0 ) + self.assertEqual( img[3,2,1,0], 33.0 ) + self.assertEqual( img[-4,-3,-2,-1], 86.0 ) + self.assertEqual( img[-4,-3,-2,-1], nda[-1,-2,-3,-4] ) + + + self.assertImageNDArrayEquals(img[1:-1,1:-1,1:-1], nda[1:-1,1:-1,1:-1]) + self.assertImageNDArrayEquals(img[1:-1,1:-1,1:-1], nda[1:-1,1:-1,1:-1,:]) + self.assertImageNDArrayEquals(img[:,:,:,1:2],nda[1:2,:,:,:]) + self.assertImageNDArrayEquals(img[3:6,1:5,2:4,0:2],nda[0:2,2:4,1:5,3:6]) + self.assertImageNDArrayEquals(img[1:,2:,:2,:],nda[:,:2,2:,1:]) + + # some negative cases + self.assertImageNDArrayEquals(img[::-1,::-1,::-1,::-1], nda[::-1,::-1,::-1,::-1]) + self.assertImageNDArrayEquals(img[:,::-2,::-1,::-3], nda[::-3,::-1,::-2,:]) + self.assertImageNDArrayEquals(img[-1:-4:-1,:,:,:], nda[:,:,:,-1:-4:-1]) + + def test_compare(self): img = sitk.Image(1,1,sitk.sitkFloat32) diff --git a/Wrapping/Python/Python.i b/Wrapping/Python/Python.i index 01b9a9e86..1264b7a0a 100644 --- a/Wrapping/Python/Python.i +++ b/Wrapping/Python/Python.i @@ -378,8 +378,8 @@ # If we have a 3D image, we can extract 2D image if one index is an int and the reset are slices slice_dim = -1 - if ( dim == 3 ): - # find only a single dimension with has an integer index + if ( dim > 2 ): + # find only a single dimension which has an integer index for i in range(len(idx)): if type(idx[i]) is slice: continue From 4a5434d7ce6659112968295b9246901935730244 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 7 Jun 2019 12:59:04 -0400 Subject: [PATCH 137/400] Clarify documentation for isVector from GetImageFromArray --- Wrapping/Python/Python.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Wrapping/Python/Python.i b/Wrapping/Python/Python.i index 1264b7a0a..0aa82cecc 100644 --- a/Wrapping/Python/Python.i +++ b/Wrapping/Python/Python.i @@ -762,7 +762,7 @@ def GetArrayFromImage(image): def GetImageFromArray( arr, isVector=None): - """Get a SimpleITK Image from a numpy array. If isVector is True, then the Image will have a Vector pixel type, and the last dimension of the array will be considered the component index. By default when isVector is None, 4D images are automatically considered 3D vector images.""" + """Get a SimpleITK Image from a numpy array. If isVector is True, then the Image will have a Vector pixel type, and the last dimension of the array will be considered the component index. By default when isVector is None, 4D arrays are automatically considered 3D vector images, but 3D arrays are 3D images.""" if not HAVE_NUMPY: raise ImportError('Numpy not available.') From d9608effda0b6d679f22a1d2b8edc2dd7b8722c6 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 13 Jun 2019 09:55:38 -0400 Subject: [PATCH 138/400] Add support for complex pixel type to GetBuffer methods The buffer is returned as a pointer to intrinsic types i.e. float or double. The std::complex data type as a guarantee of "array oriented access" which enables this to be safe access. --- Code/Common/include/sitkImage.h | 7 +++++-- Code/Common/src/sitkPimpleImageBase.hxx | 28 ++++++++++++++++++------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Code/Common/include/sitkImage.h b/Code/Common/include/sitkImage.h index 52d3726f7..b3f4917b0 100644 --- a/Code/Common/include/sitkImage.h +++ b/Code/Common/include/sitkImage.h @@ -400,8 +400,11 @@ namespace simple * * The pointer to the buffer is not referenced * counted. Additionally, while this image is made unique before - * returnign the pointer, additional copying and usage may - * introduce unexpected aliasing. + * returning the pointer, additional copying and usage may + * introduce unexpected aliasing of the image's buffer. + * + * Vector and Complex pixel types are both accessed via the + * appropriate component type method. * * The correct method for the current pixel type of the image must * be called or else an exception will be generated. For vector diff --git a/Code/Common/src/sitkPimpleImageBase.hxx b/Code/Common/src/sitkPimpleImageBase.hxx index 4293b5b22..bef7f5149 100644 --- a/Code/Common/src/sitkPimpleImageBase.hxx +++ b/Code/Common/src/sitkPimpleImageBase.hxx @@ -451,12 +451,18 @@ namespace itk { if ( IsVector::Value ) return this->InternalGetBuffer< VectorPixelID >( ); + if (nsstd::is_same >, typename ImageTypeToPixelID::PixelIDType>::value) + return reinterpret_cast(this->InternalGetBuffer< BasicPixelID > >()); return this->InternalGetBuffer< BasicPixelID >( ); } virtual double *GetBufferAsDouble( ) { if ( IsVector::Value ) return this->InternalGetBuffer< VectorPixelID >( ); + if (nsstd::is_same >, typename ImageTypeToPixelID::PixelIDType>::value) + { + return reinterpret_cast(this->InternalGetBuffer< BasicPixelID > >()); + } return this->InternalGetBuffer< BasicPixelID >( ); } @@ -476,49 +482,55 @@ namespace itk { if ( IsVector::Value ) return const_cast(this)->InternalGetBuffer< VectorPixelID >( ); - return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); + return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); } virtual const uint16_t *GetBufferAsUInt16( ) const { if ( IsVector::Value ) return const_cast(this)->InternalGetBuffer< VectorPixelID >( ); - return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); + return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); } virtual const int32_t *GetBufferAsInt32( ) const { if ( IsVector::Value ) return const_cast(this)->InternalGetBuffer< VectorPixelID >( ); - return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); + return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); } virtual const uint32_t *GetBufferAsUInt32( ) const { if ( IsVector::Value ) return const_cast(this)->InternalGetBuffer< VectorPixelID >( ); - return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); + return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); } virtual const int64_t *GetBufferAsInt64( ) const { if ( IsVector::Value ) return const_cast(this)->InternalGetBuffer< VectorPixelID >( ); - return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); + return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); } virtual const uint64_t *GetBufferAsUInt64( ) const { if ( IsVector::Value ) return const_cast(this)->InternalGetBuffer< VectorPixelID >( ); - return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); + return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); } virtual const float *GetBufferAsFloat( ) const { if ( IsVector::Value ) return const_cast(this)->InternalGetBuffer< VectorPixelID >( ); - return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); + if (nsstd::is_same >, typename ImageTypeToPixelID::PixelIDType>::value) + return reinterpret_cast(const_cast(this)->InternalGetBuffer< BasicPixelID > >()); + return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); } virtual const double *GetBufferAsDouble( ) const { if ( IsVector::Value ) return const_cast(this)->InternalGetBuffer< VectorPixelID >( ); - return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); + if (nsstd::is_same >, typename ImageTypeToPixelID::PixelIDType>::value) + { + return reinterpret_cast(const_cast(this)->InternalGetBuffer< BasicPixelID > >()); + } + return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); } virtual void SetPixelAsInt8( const std::vector &idx, int8_t v ) From e61bfb6a07aa7226d731ec1ba590e7ffcbed217c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 13 Jun 2019 11:51:53 -0400 Subject: [PATCH 139/400] Add testing for complex buffer access --- Testing/Unit/sitkImageTests.cxx | 44 +++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/Testing/Unit/sitkImageTests.cxx b/Testing/Unit/sitkImageTests.cxx index 35ebf44af..38b3a643c 100644 --- a/Testing/Unit/sitkImageTests.cxx +++ b/Testing/Unit/sitkImageTests.cxx @@ -1432,21 +1432,17 @@ TEST_F(Image, GetBuffer) ASSERT_ANY_THROW( img.GetBufferAsDouble() ) << " Get with wrong type"; - // currently Int64 pixel types are instantiated yet, - // so an exception will be thrown. - try + // Int64 pixel types might not be instantiated + if ( sitk::sitkUInt64 != sitk::sitkUnknown ) { img = sitk::Image( 10, 10, sitk::sitkUInt64 ); EXPECT_EQ( img.GetBufferAsUInt64()[99], 0u ) << " Get last element in buffer "; - - img = sitk::Image( 10, 10, sitk::sitkInt64 ); - EXPECT_EQ( img.GetBufferAsInt64()[99], 0u ) << " Get last element in buffer "; } - catch ( std::exception &e) + if ( sitk::sitkInt64 != sitk::sitkUnknown ) { - std::cout << "Exception: " << e.what() << std::endl; + img = sitk::Image( 10, 10, sitk::sitkInt64 ); + EXPECT_EQ( img.GetBufferAsInt64()[99], 0u ) << " Get last element in buffer "; } - img = sitk::Image( 10, 10, sitk::sitkFloat32 ); EXPECT_EQ( img.GetBufferAsFloat()[99], 0u ) << " Get last element in buffer "; ASSERT_ANY_THROW( img.GetBufferAsInt16() ) << " Get with wrong type"; @@ -1463,6 +1459,22 @@ TEST_F(Image, GetBuffer) ASSERT_ANY_THROW( img.GetBufferAsUInt32() ) << " Get with wrong type"; ASSERT_ANY_THROW( img.GetBufferAsFloat() ) << " Get with wrong type"; + img = sitk::Image( 10, 10, sitk::sitkComplexFloat32 ); + EXPECT_EQ( img.GetBufferAsFloat()[199], 0.0f ) << " Get last element in buffer "; + ASSERT_ANY_THROW( img.GetBufferAsInt16() ) << " Get with wrong type"; + ASSERT_ANY_THROW( img.GetBufferAsUInt16() ) << " Get with wrong type"; + ASSERT_ANY_THROW( img.GetBufferAsInt32() ) << " Get with wrong type"; + ASSERT_ANY_THROW( img.GetBufferAsDouble() ) << " Get with wrong type"; + + img = sitk::Image( 10, 10, sitk::sitkComplexFloat64 ); + EXPECT_EQ( img.GetBufferAsDouble()[199], 0.0 ) << " Get last element in buffer "; + ASSERT_ANY_THROW( img.GetBufferAsUInt8() ) << " Get with wrong type"; + ASSERT_ANY_THROW( img.GetBufferAsInt16() ) << " Get with wrong type"; + ASSERT_ANY_THROW( img.GetBufferAsUInt16() ) << " Get with wrong type"; + ASSERT_ANY_THROW( img.GetBufferAsInt32() ) << " Get with wrong type"; + ASSERT_ANY_THROW( img.GetBufferAsUInt32() ) << " Get with wrong type"; + ASSERT_ANY_THROW( img.GetBufferAsFloat() ) << " Get with wrong type"; + } @@ -1540,20 +1552,16 @@ TEST_F(Image, GetBufferVector) ASSERT_ANY_THROW( img.GetBufferAsFloat() ) << " Get with wrong type"; ASSERT_ANY_THROW( img.GetBufferAsDouble() ) << " Get with wrong type"; - - // currently Int64 pixel types are instantiated yet, - // so an exception will be thrown. - try + // Int64 pixel types might not be instantiated + if ( sitk::sitkVectorUInt64 != sitk::sitkUnknown ) { img = sitk::Image( 10, 10, sitk::sitkVectorUInt64 ); EXPECT_EQ( img.GetBufferAsUInt64()[99], 0u ) << " Get last element in buffer "; - - img = sitk::Image( 10, 10, sitk::sitkVectorInt64 ); - EXPECT_EQ( img.GetBufferAsInt64()[99], 0u ) << " Get last element in buffer "; } - catch ( std::exception &e) + if ( sitk::sitkVectorInt64 != sitk::sitkUnknown ) { - std::cout << "Exception: " << e.what() << std::endl; + img = sitk::Image( 10, 10, sitk::sitkVectorInt64 ); + EXPECT_EQ( img.GetBufferAsInt64()[99], 0u ) << " Get last element in buffer "; } img = sitk::Image( 10, 10, sitk::sitkVectorFloat32 ); From db6a0810aa3af8cae7c6c39e7674834b1ffdd162 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 13 Jun 2019 11:55:05 -0400 Subject: [PATCH 140/400] Adding Python array access for complex numbers --- .../Python/sitkNumpyArrayConversionTest.py | 41 ++++++++++++++++++- Wrapping/Python/Python.i | 4 +- Wrapping/Python/sitkNumpyArrayConversion.cxx | 14 +++++-- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/Testing/Unit/Python/sitkNumpyArrayConversionTest.py b/Testing/Unit/Python/sitkNumpyArrayConversionTest.py index febd25211..00d8d7f77 100644 --- a/Testing/Unit/Python/sitkNumpyArrayConversionTest.py +++ b/Testing/Unit/Python/sitkNumpyArrayConversionTest.py @@ -57,8 +57,8 @@ def test_type_to_numpy(self): self._helper_check_sitk_to_numpy_type(sitk.sitkInt64, np.int64) self._helper_check_sitk_to_numpy_type(sitk.sitkFloat32, np.float32) self._helper_check_sitk_to_numpy_type(sitk.sitkFloat64, np.float64) - #self._helper_check_sitk_to_numpy_type(sitk.sitkComplexFloat32, np.complex64) - #self._helper_check_sitk_to_numpy_type(sitk.sitkComplexFloat64, np.complex128) + self._helper_check_sitk_to_numpy_type(sitk.sitkComplexFloat32, np.complex64) + self._helper_check_sitk_to_numpy_type(sitk.sitkComplexFloat64, np.complex128) self._helper_check_sitk_to_numpy_type(sitk.sitkVectorUInt8, np.uint8) self._helper_check_sitk_to_numpy_type(sitk.sitkVectorInt8, np.int8) self._helper_check_sitk_to_numpy_type(sitk.sitkVectorUInt16, np.uint16) @@ -175,6 +175,43 @@ def test_isVector(self): self.assertEqual(img.GetPixel([0,0,1,0]), (126,127)) + def test_complex_image_to_numpy(self): + """Test converting back and forth between numpy and SimpleITK + images where the SimpleITK image is of complex type.""" + + + # Check 2D + img_real = sitk.GaussianSource( sitk.sitkFloat32, [100,100], sigma=[10]*3, mean = [50,50] ) + img_imaginary = sitk.GaussianSource( sitk.sitkFloat32, [100,100], sigma=[20]*3, mean = [10,10] ) + img = sitk.RealAndImaginaryToComplex(img_real, img_imaginary); + h = sitk.Hash( img ) + + nda = sitk.GetArrayFromImage(img) + + self.assertEqual(nda.shape, (100,100)) + self.assertEqual(nda[0,0], img.GetPixel([0,0])) + self.assertEqual(nda[2,1], img.GetPixel([1,2])) + + img2 = sitk.GetImageFromArray( nda ) + self.assertEqual( h, sitk.Hash(img2) ) + self.assertEqual( img.GetSize(), (100,100) ) + + # check 4D + img = sitk.Image( [10, 9, 8, 7], sitk.sitkComplexFloat64 ) + h = sitk.Hash( img ) + + nda = sitk.GetArrayFromImage(img) + + self.assertEqual(nda.shape, (7,8,9,10)) + self.assertEqual(nda[0,0,0,0], 0+0j) + + + img2 = sitk.GetImageFromArray(nda) + self.assertEqual(img2.GetSize(), img.GetSize()) + self.assertEqual(img2.GetNumberOfComponentsPerPixel(), img.GetNumberOfComponentsPerPixel()) + self.assertEqual(h, sitk.Hash(img2)) + + def test_vector_image_to_numpy(self): """Test converting back and forth between numpy and SimpleITK images were the SimpleITK image has multiple componets and diff --git a/Wrapping/Python/Python.i b/Wrapping/Python/Python.i index 0aa82cecc..a9a8932e9 100644 --- a/Wrapping/Python/Python.i +++ b/Wrapping/Python/Python.i @@ -714,7 +714,7 @@ def _get_sitk_vector_pixelid(numpy_array_type): for key in _np_sitk: if numpy.issubdtype(numpy_array_type.dtype, key): return _np_sitk[key] - raise TypeError('dtype: {0} is not supported.'.format(numpy_array_type.dtype)) + raise TypeError('dtype: {0} is not supported as an array.'.format(numpy_array_type.dtype)) # SimplyITK <-> Numpy Array conversion support. @@ -770,7 +770,7 @@ def GetImageFromArray( arr, isVector=None): z = numpy.asarray( arr ) if isVector is None: - if z.ndim == 4: + if z.ndim == 4 and z.dtype != numpy.complex64 and z.dtype != numpy.complex128: isVector = True if isVector: diff --git a/Wrapping/Python/sitkNumpyArrayConversion.cxx b/Wrapping/Python/sitkNumpyArrayConversion.cxx index c96098440..50d896360 100644 --- a/Wrapping/Python/sitkNumpyArrayConversion.cxx +++ b/Wrapping/Python/sitkNumpyArrayConversion.cxx @@ -125,9 +125,12 @@ sitk_GetMemoryViewFromImage( PyObject *SWIGUNUSEDPARM(self), PyObject *args ) pixelSize = sizeof( double ); break; case sitk::ConditionalValue< sitk::sitkComplexFloat32 != sitk::sitkUnknown, sitk::sitkComplexFloat32, -12 >::Value: + sitkBufferPtr = (const void *)sitkImage->GetBufferAsFloat(); + pixelSize = 2*sizeof( float ); + break; case sitk::ConditionalValue< sitk::sitkComplexFloat64 != sitk::sitkUnknown, sitk::sitkComplexFloat64, -13 >::Value: - PyErr_SetString( PyExc_RuntimeError, "Images of Complex Pixel types currently are not supported." ); - SWIG_fail; + sitkBufferPtr = (const void *)sitkImage->GetBufferAsDouble(); + pixelSize = 2*sizeof( double ); break; default: PyErr_SetString( PyExc_RuntimeError, "Unknown pixel type." ); @@ -287,9 +290,12 @@ sitk_SetImageFromArray( PyObject *SWIGUNUSEDPARM(self), PyObject *args ) pixelSize = sizeof( double ); break; case sitk::ConditionalValue< sitk::sitkComplexFloat32 != sitk::sitkUnknown, sitk::sitkComplexFloat32, -12 >::Value: + sitkBufferPtr = (void *)sitkImage->GetBufferAsFloat(); + pixelSize = 2*sizeof( float ); + break; case sitk::ConditionalValue< sitk::sitkComplexFloat64 != sitk::sitkUnknown, sitk::sitkComplexFloat64, -13 >::Value: - PyErr_SetString( PyExc_RuntimeError, "Images of Complex Pixel types currently are not supported." ); - goto fail; + sitkBufferPtr = (void *)sitkImage->GetBufferAsDouble(); + pixelSize = 2*sizeof( double ); break; default: PyErr_SetString( PyExc_RuntimeError, "Unknown pixel type." ); From 040605427ec733cc6b2b466d327f841eda75c5a6 Mon Sep 17 00:00:00 2001 From: Ziv Yaniv Date: Fri, 14 Jun 2019 10:57:49 -0400 Subject: [PATCH 141/400] Updating the tutorials page, adding link to EMBC19 workshop. --- Documentation/docs/source/tutorialsAndCourses.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/docs/source/tutorialsAndCourses.rst b/Documentation/docs/source/tutorialsAndCourses.rst index 5a85a4247..836ebe133 100644 --- a/Documentation/docs/source/tutorialsAndCourses.rst +++ b/Documentation/docs/source/tutorialsAndCourses.rst @@ -35,7 +35,7 @@ SimpleITK tutorials and courses have been given in the following venues: Upcoming ++++++++ -* IEEE Engineering in Medicine and Biology Conference (EMBC) 2019, Berlin Germany: `SimpleITK: A Tool for Biomedical Image Processing, from Cells to Anatomical Structures `__ . +* IEEE Engineering in Medicine and Biology Conference (EMBC) 2019, Berlin Germany: `SimpleITK: A Tool for Biomedical Image Processing, from Cells to Anatomical Structures `__ [`git repository `__]. From e83cecb7b171de0b4fc610b3ced1fef6c1b86186 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 9 Jul 2019 13:00:17 -0400 Subject: [PATCH 142/400] Change Doxygen URL to SimpleITK Doxygen --- Utilities/JSON/JSONGenerateSphinxFiltersDoc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utilities/JSON/JSONGenerateSphinxFiltersDoc.py b/Utilities/JSON/JSONGenerateSphinxFiltersDoc.py index b976a3e25..052adf22d 100755 --- a/Utilities/JSON/JSONGenerateSphinxFiltersDoc.py +++ b/Utilities/JSON/JSONGenerateSphinxFiltersDoc.py @@ -26,7 +26,7 @@ * - Filter Name\n - Brief Description''') -entryFormat = "\n * - `{0} `_\n - {2}" +entryFormat = "\n * - `{0} `_\n - {2}" json_list = [] for fname in sys.argv[1:]: with open( fname, "r" ) as fp: From cddcabcb72a2ca231c70f7a387585ee5d27bb9bc Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 9 Jul 2019 13:02:50 -0400 Subject: [PATCH 143/400] Change URL in documentation to link to SimpleITK Doxygen --- Documentation/docs/source/filters.rst | 582 +++++++++++++------------- 1 file changed, 291 insertions(+), 291 deletions(-) diff --git a/Documentation/docs/source/filters.rst b/Documentation/docs/source/filters.rst index e35e74c81..971106c3c 100644 --- a/Documentation/docs/source/filters.rst +++ b/Documentation/docs/source/filters.rst @@ -10,585 +10,585 @@ SimpleITK Filters * - Filter Name - Brief Description - * - `AbsImageFilter `_ + * - `AbsImageFilter `_ - Computes the absolute value of each pixel. - * - `AbsoluteValueDifferenceImageFilter `_ + * - `AbsoluteValueDifferenceImageFilter `_ - Implements pixel-wise the computation of absolute value difference. - * - `AcosImageFilter `_ + * - `AcosImageFilter `_ - Computes the inverse cosine of each pixel. - * - `AdaptiveHistogramEqualizationImageFilter `_ + * - `AdaptiveHistogramEqualizationImageFilter `_ - Power Law Adaptive Histogram Equalization. - * - `AddImageFilter `_ + * - `AddImageFilter `_ - Pixel-wise addition of two images. - * - `AdditiveGaussianNoiseImageFilter `_ + * - `AdditiveGaussianNoiseImageFilter `_ - Alter an image with additive Gaussian white noise. - * - `AggregateLabelMapFilter `_ + * - `AggregateLabelMapFilter `_ - Collapses all labels into the first label. - * - `AndImageFilter `_ + * - `AndImageFilter `_ - Implements the AND bitwise operator pixel-wise between two images. - * - `AntiAliasBinaryImageFilter `_ + * - `AntiAliasBinaryImageFilter `_ - A method for estimation of a surface from a binary volume. - * - `ApproximateSignedDistanceMapImageFilter `_ + * - `ApproximateSignedDistanceMapImageFilter `_ - Create a map of the approximate signed distance from the boundaries of a binary image. - * - `AsinImageFilter `_ + * - `AsinImageFilter `_ - Computes the sine of each pixel. - * - `Atan2ImageFilter `_ + * - `Atan2ImageFilter `_ - Computes two argument inverse tangent. - * - `AtanImageFilter `_ + * - `AtanImageFilter `_ - Computes the one-argument inverse tangent of each pixel. - * - `BSplineDecompositionImageFilter `_ + * - `BSplineDecompositionImageFilter `_ - Calculates the B-Spline coefficients of an image. Spline order may be from 0 to 5. - * - `BilateralImageFilter `_ + * - `BilateralImageFilter `_ - Blurs an image while preserving edges. - * - `BinShrinkImageFilter `_ + * - `BinShrinkImageFilter `_ - Reduce the size of an image by an integer factor in each dimension while performing averaging of an input neighborhood. - * - `BinaryClosingByReconstructionImageFilter `_ + * - `BinaryClosingByReconstructionImageFilter `_ - binary closing by reconstruction of an image. - * - `BinaryContourImageFilter `_ + * - `BinaryContourImageFilter `_ - Labels the pixels on the border of the objects in a binary image. - * - `BinaryDilateImageFilter `_ + * - `BinaryDilateImageFilter `_ - Fast binary dilation. - * - `BinaryErodeImageFilter `_ + * - `BinaryErodeImageFilter `_ - Fast binary erosion. - * - `BinaryFillholeImageFilter `_ + * - `BinaryFillholeImageFilter `_ - Remove holes not connected to the boundary of the image. - * - `BinaryGrindPeakImageFilter `_ + * - `BinaryGrindPeakImageFilter `_ - Remove the objects not connected to the boundary of the image. - * - `BinaryImageToLabelMapFilter `_ + * - `BinaryImageToLabelMapFilter `_ - Label the connected components in a binary image and produce a collection of label objects. - * - `BinaryMagnitudeImageFilter `_ + * - `BinaryMagnitudeImageFilter `_ - Computes the square root of the sum of squares of corresponding input pixels. - * - `BinaryMedianImageFilter `_ + * - `BinaryMedianImageFilter `_ - Applies a version of the median filter optimized for binary images. - * - `BinaryMinMaxCurvatureFlowImageFilter `_ + * - `BinaryMinMaxCurvatureFlowImageFilter `_ - Denoise a binary image using min/max curvature flow. - * - `BinaryMorphologicalClosingImageFilter `_ + * - `BinaryMorphologicalClosingImageFilter `_ - binary morphological closing of an image. - * - `BinaryMorphologicalOpeningImageFilter `_ + * - `BinaryMorphologicalOpeningImageFilter `_ - binary morphological opening of an image. - * - `BinaryNotImageFilter `_ + * - `BinaryNotImageFilter `_ - Implements the BinaryNot logical operator pixel-wise between two images. - * - `BinaryOpeningByReconstructionImageFilter `_ + * - `BinaryOpeningByReconstructionImageFilter `_ - binary morphological closing of an image. - * - `BinaryProjectionImageFilter `_ + * - `BinaryProjectionImageFilter `_ - Binary projection. - * - `BinaryReconstructionByDilationImageFilter `_ + * - `BinaryReconstructionByDilationImageFilter `_ - binary reconstruction by dilation of an image - * - `BinaryReconstructionByErosionImageFilter `_ + * - `BinaryReconstructionByErosionImageFilter `_ - binary reconstruction by erosion of an image - * - `BinaryThinningImageFilter `_ + * - `BinaryThinningImageFilter `_ - This filter computes one-pixel-wide edges of the input image. - * - `BinaryThresholdImageFilter `_ + * - `BinaryThresholdImageFilter `_ - Binarize an input image by thresholding. - * - `BinaryThresholdProjectionImageFilter `_ + * - `BinaryThresholdProjectionImageFilter `_ - BinaryThreshold projection. - * - `BinomialBlurImageFilter `_ + * - `BinomialBlurImageFilter `_ - Performs a separable blur on each dimension of an image. - * - `BitwiseNotImageFilter `_ + * - `BitwiseNotImageFilter `_ - Implements pixel-wise generic operation on one image. - * - `BlackTopHatImageFilter `_ + * - `BlackTopHatImageFilter `_ - Black top hat extracts local minima that are smaller than the structuring element. - * - `BoundedReciprocalImageFilter `_ + * - `BoundedReciprocalImageFilter `_ - Computes 1/(1+x) for each pixel in the image. - * - `BoxMeanImageFilter `_ + * - `BoxMeanImageFilter `_ - Implements a fast rectangular mean filter using the accumulator approach. - * - `BoxSigmaImageFilter `_ + * - `BoxSigmaImageFilter `_ - Implements a fast rectangular sigma filter using the accumulator approach. - * - `CannyEdgeDetectionImageFilter `_ + * - `CannyEdgeDetectionImageFilter `_ - This filter is an implementation of a Canny edge detector for scalar-valued images. - * - `ChangeLabelImageFilter `_ + * - `ChangeLabelImageFilter `_ - Change Sets of Labels. - * - `ChangeLabelLabelMapFilter `_ + * - `ChangeLabelLabelMapFilter `_ - Replace the label Ids of selected LabelObjects with new label Ids. - * - `CheckerBoardImageFilter `_ + * - `CheckerBoardImageFilter `_ - Combines two images in a checkerboard pattern. - * - `ClampImageFilter `_ + * - `ClampImageFilter `_ - Casts input pixels to output pixel type and clamps the output pixel values to a specified range. - * - `ClosingByReconstructionImageFilter `_ + * - `ClosingByReconstructionImageFilter `_ - Closing by reconstruction of an image. - * - `CoherenceEnhancingDiffusionImageFilter `_ + * - `CoherenceEnhancingDiffusionImageFilter `_ - Coherence enhanging diffusion and edge enhancing diffusion. - * - `CollidingFrontsImageFilter `_ + * - `CollidingFrontsImageFilter `_ - Selects a region of space where two independent fronts run towards each other. - * - `ComplexToImaginaryImageFilter `_ + * - `ComplexToImaginaryImageFilter `_ - Computes pixel-wise the imaginary part of a complex image. - * - `ComplexToModulusImageFilter `_ + * - `ComplexToModulusImageFilter `_ - Computes pixel-wise the Modulus of a complex image. - * - `ComplexToPhaseImageFilter `_ + * - `ComplexToPhaseImageFilter `_ - Computes pixel-wise the modulus of a complex image. - * - `ComplexToRealImageFilter `_ + * - `ComplexToRealImageFilter `_ - Computes pixel-wise the real(x) part of a complex image. - * - `ComposeImageFilter `_ + * - `ComposeImageFilter `_ - ComposeImageFilter combine several scalar images into a multicomponent image. - * - `ConfidenceConnectedImageFilter `_ + * - `ConfidenceConnectedImageFilter `_ - Segment pixels with similar statistics using connectivity. - * - `ConnectedComponentImageFilter `_ + * - `ConnectedComponentImageFilter `_ - Label the objects in a binary image. - * - `ConnectedThresholdImageFilter `_ + * - `ConnectedThresholdImageFilter `_ - Label pixels that are connected to a seed and lie within a range of values. - * - `ConstantPadImageFilter `_ + * - `ConstantPadImageFilter `_ - Increase the image size by padding with a constant value. - * - `ConvolutionImageFilter `_ + * - `ConvolutionImageFilter `_ - Convolve a given image with an arbitrary image kernel. - * - `CosImageFilter `_ + * - `CosImageFilter `_ - Computes the cosine of each pixel. - * - `CropImageFilter `_ + * - `CropImageFilter `_ - Decrease the image size by cropping the image by an itk::Size at both the upper and lower bounds of the largest possible region. - * - `CurvatureAnisotropicDiffusionImageFilter `_ + * - `CurvatureAnisotropicDiffusionImageFilter `_ - - * - `CurvatureFlowImageFilter `_ + * - `CurvatureFlowImageFilter `_ - Denoise an image using curvature driven flow. - * - `CyclicShiftImageFilter `_ + * - `CyclicShiftImageFilter `_ - Perform a cyclic spatial shift of image intensities on the image grid. - * - `DanielssonDistanceMapImageFilter `_ + * - `DanielssonDistanceMapImageFilter `_ - This filter computes the distance map of the input image as an approximation with pixel accuracy to the Euclidean distance. - * - `DemonsRegistrationFilter `_ + * - `DemonsRegistrationFilter `_ - Deformably register two images using the demons algorithm. - * - `DerivativeImageFilter `_ + * - `DerivativeImageFilter `_ - Computes the directional derivative of an image. The directional derivative at each pixel location is computed by convolution with a derivative operator of user-specified order. - * - `DiffeomorphicDemonsRegistrationFilter `_ + * - `DiffeomorphicDemonsRegistrationFilter `_ - Deformably register two images using a diffeomorphic demons algorithm. - * - `DilateObjectMorphologyImageFilter `_ + * - `DilateObjectMorphologyImageFilter `_ - dilation of an object in an image - * - `DiscreteGaussianDerivativeImageFilter `_ + * - `DiscreteGaussianDerivativeImageFilter `_ - Calculates image derivatives using discrete derivative gaussian kernels. This filter calculates Gaussian derivative by separable convolution of an image and a discrete Gaussian derivative operator (kernel). - * - `DiscreteGaussianImageFilter `_ + * - `DiscreteGaussianImageFilter `_ - Blurs an image by separable convolution with discrete gaussian kernels. This filter performs Gaussian blurring by separable convolution of an image and a discrete Gaussian operator (kernel). - * - `DisplacementFieldJacobianDeterminantFilter `_ + * - `DisplacementFieldJacobianDeterminantFilter `_ - Computes a scalar image from a vector image (e.g., deformation field) input, where each output scalar at each pixel is the Jacobian determinant of the vector field at that location. This calculation is correct in the case where the vector image is a "displacement" from the current location. The computation for the jacobian determinant is: det[ dT/dx ] = det[ I + du/dx ]. - * - `DivideFloorImageFilter `_ + * - `DivideFloorImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `DivideImageFilter `_ + * - `DivideImageFilter `_ - Pixel-wise division of two images. - * - `DivideRealImageFilter `_ + * - `DivideRealImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `DoubleThresholdImageFilter `_ + * - `DoubleThresholdImageFilter `_ - Binarize an input image using double thresholding. - * - `EdgePotentialImageFilter `_ + * - `EdgePotentialImageFilter `_ - Computes the edge potential of an image from the image gradient. - * - `EqualImageFilter `_ + * - `EqualImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `ErodeObjectMorphologyImageFilter `_ + * - `ErodeObjectMorphologyImageFilter `_ - Erosion of an object in an image. - * - `ExpImageFilter `_ + * - `ExpImageFilter `_ - Computes the exponential function of each pixel. - * - `ExpNegativeImageFilter `_ + * - `ExpNegativeImageFilter `_ - Computes the function exp(-K.x) for each input pixel. - * - `ExpandImageFilter `_ + * - `ExpandImageFilter `_ - Expand the size of an image by an integer factor in each dimension. - * - `ExtractImageFilter `_ + * - `ExtractImageFilter `_ - Decrease the image size by cropping the image to the selected region bounds. - * - `FFTConvolutionImageFilter `_ + * - `FFTConvolutionImageFilter `_ - Convolve a given image with an arbitrary image kernel using multiplication in the Fourier domain. - * - `FFTNormalizedCorrelationImageFilter `_ + * - `FFTNormalizedCorrelationImageFilter `_ - Calculate normalized cross correlation using FFTs. - * - `FFTPadImageFilter `_ + * - `FFTPadImageFilter `_ - Pad an image to make it suitable for an FFT transformation. - * - `FFTShiftImageFilter `_ + * - `FFTShiftImageFilter `_ - Shift the zero-frequency components of a Fourier transform to the center of the image. - * - `FastApproximateRankImageFilter `_ + * - `FastApproximateRankImageFilter `_ - A separable rank filter. - * - `FastMarchingBaseImageFilter `_ + * - `FastMarchingBaseImageFilter `_ - Apply the Fast Marching method to solve an Eikonal equation on an image. - * - `FastMarchingImageFilter `_ + * - `FastMarchingImageFilter `_ - Solve an Eikonal equation using Fast Marching. - * - `FastMarchingUpwindGradientImageFilter `_ + * - `FastMarchingUpwindGradientImageFilter `_ - Generates the upwind gradient field of fast marching arrival times. - * - `FastSymmetricForcesDemonsRegistrationFilter `_ + * - `FastSymmetricForcesDemonsRegistrationFilter `_ - Deformably register two images using a symmetric forces demons algorithm. - * - `FlipImageFilter `_ + * - `FlipImageFilter `_ - Flips an image across user specified axes. - * - `ForwardFFTImageFilter `_ + * - `ForwardFFTImageFilter `_ - Base class for forward Fast Fourier Transform . - * - `GaborImageSource `_ + * - `GaborImageSource `_ - Generate an n-dimensional image of a Gabor filter. - * - `GaussianImageSource `_ + * - `GaussianImageSource `_ - Generate an n-dimensional image of a Gaussian. - * - `GeodesicActiveContourLevelSetImageFilter `_ + * - `GeodesicActiveContourLevelSetImageFilter `_ - Segments structures in images based on a user supplied edge potential map. - * - `GradientAnisotropicDiffusionImageFilter `_ + * - `GradientAnisotropicDiffusionImageFilter `_ - - * - `GradientImageFilter `_ + * - `GradientImageFilter `_ - Computes the gradient of an image using directional derivatives. - * - `GradientMagnitudeImageFilter `_ + * - `GradientMagnitudeImageFilter `_ - Computes the gradient magnitude of an image region at each pixel. - * - `GradientMagnitudeRecursiveGaussianImageFilter `_ + * - `GradientMagnitudeRecursiveGaussianImageFilter `_ - Computes the Magnitude of the Gradient of an image by convolution with the first derivative of a Gaussian. - * - `GradientRecursiveGaussianImageFilter `_ + * - `GradientRecursiveGaussianImageFilter `_ - Computes the gradient of an image by convolution with the first derivative of a Gaussian. - * - `GrayscaleConnectedClosingImageFilter `_ + * - `GrayscaleConnectedClosingImageFilter `_ - Enhance pixels associated with a dark object (identified by a seed pixel) where the dark object is surrounded by a brigher object. - * - `GrayscaleConnectedOpeningImageFilter `_ + * - `GrayscaleConnectedOpeningImageFilter `_ - Enhance pixels associated with a bright object (identified by a seed pixel) where the bright object is surrounded by a darker object. - * - `GrayscaleDilateImageFilter `_ + * - `GrayscaleDilateImageFilter `_ - Grayscale dilation of an image. - * - `GrayscaleErodeImageFilter `_ + * - `GrayscaleErodeImageFilter `_ - Grayscale erosion of an image. - * - `GrayscaleFillholeImageFilter `_ + * - `GrayscaleFillholeImageFilter `_ - Remove local minima not connected to the boundary of the image. - * - `GrayscaleGeodesicDilateImageFilter `_ + * - `GrayscaleGeodesicDilateImageFilter `_ - geodesic gray scale dilation of an image - * - `GrayscaleGeodesicErodeImageFilter `_ + * - `GrayscaleGeodesicErodeImageFilter `_ - geodesic gray scale erosion of an image - * - `GrayscaleGrindPeakImageFilter `_ + * - `GrayscaleGrindPeakImageFilter `_ - Remove local maxima not connected to the boundary of the image. - * - `GrayscaleMorphologicalClosingImageFilter `_ + * - `GrayscaleMorphologicalClosingImageFilter `_ - gray scale dilation of an image - * - `GrayscaleMorphologicalOpeningImageFilter `_ + * - `GrayscaleMorphologicalOpeningImageFilter `_ - gray scale dilation of an image - * - `GreaterEqualImageFilter `_ + * - `GreaterEqualImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `GreaterImageFilter `_ + * - `GreaterImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `GridImageSource `_ + * - `GridImageSource `_ - Generate an n-dimensional image of a grid. - * - `HConcaveImageFilter `_ + * - `HConcaveImageFilter `_ - Identify local minima whose depth below the baseline is greater than h. - * - `HConvexImageFilter `_ + * - `HConvexImageFilter `_ - Identify local maxima whose height above the baseline is greater than h. - * - `HMaximaImageFilter `_ + * - `HMaximaImageFilter `_ - Suppress local maxima whose height above the baseline is less than h. - * - `HMinimaImageFilter `_ + * - `HMinimaImageFilter `_ - Suppress local minima whose depth below the baseline is less than h. - * - `HalfHermitianToRealInverseFFTImageFilter `_ + * - `HalfHermitianToRealInverseFFTImageFilter `_ - Base class for specialized complex-to-real inverse Fast Fourier Transform . - * - `HausdorffDistanceImageFilter `_ + * - `HausdorffDistanceImageFilter `_ - Computes the Hausdorff distance between the set of non-zero pixels of two images. - * - `HistogramMatchingImageFilter `_ + * - `HistogramMatchingImageFilter `_ - Normalize the grayscale values between two images by histogram matching. - * - `HuangThresholdImageFilter `_ + * - `HuangThresholdImageFilter `_ - Threshold an image using the Huang Threshold. - * - `IntensityWindowingImageFilter `_ + * - `IntensityWindowingImageFilter `_ - Applies a linear transformation to the intensity levels of the input Image that are inside a user-defined interval. Values below this interval are mapped to a constant. Values over the interval are mapped to another constant. - * - `IntermodesThresholdImageFilter `_ + * - `IntermodesThresholdImageFilter `_ - Threshold an image using the Intermodes Threshold. - * - `InverseDeconvolutionImageFilter `_ + * - `InverseDeconvolutionImageFilter `_ - The direct linear inverse deconvolution filter. - * - `InverseDisplacementFieldImageFilter `_ + * - `InverseDisplacementFieldImageFilter `_ - Computes the inverse of a displacement field. - * - `InverseFFTImageFilter `_ + * - `InverseFFTImageFilter `_ - Base class for inverse Fast Fourier Transform . - * - `InvertDisplacementFieldImageFilter `_ + * - `InvertDisplacementFieldImageFilter `_ - Iteratively estimate the inverse field of a displacement field. - * - `InvertIntensityImageFilter `_ + * - `InvertIntensityImageFilter `_ - Invert the intensity of an image. - * - `IsoContourDistanceImageFilter `_ + * - `IsoContourDistanceImageFilter `_ - Compute an approximate distance from an interpolated isocontour to the close grid points. - * - `IsoDataThresholdImageFilter `_ + * - `IsoDataThresholdImageFilter `_ - Threshold an image using the IsoData Threshold. - * - `IsolatedConnectedImageFilter `_ + * - `IsolatedConnectedImageFilter `_ - Label pixels that are connected to one set of seeds but not another. - * - `IsolatedWatershedImageFilter `_ + * - `IsolatedWatershedImageFilter `_ - Isolate watershed basins using two seeds. - * - `IterativeInverseDisplacementFieldImageFilter `_ + * - `IterativeInverseDisplacementFieldImageFilter `_ - Computes the inverse of a displacement field. - * - `JoinSeriesImageFilter `_ + * - `JoinSeriesImageFilter `_ - Join N-D images into an (N+1)-D image. - * - `KittlerIllingworthThresholdImageFilter `_ + * - `KittlerIllingworthThresholdImageFilter `_ - Threshold an image using the KittlerIllingworth Threshold. - * - `LabelContourImageFilter `_ + * - `LabelContourImageFilter `_ - Labels the pixels on the border of the objects in a labeled image. - * - `LabelImageToLabelMapFilter `_ + * - `LabelImageToLabelMapFilter `_ - convert a labeled image to a label collection image - * - `LabelIntensityStatisticsImageFilter `_ + * - `LabelIntensityStatisticsImageFilter `_ - a convenient class to convert a label image to a label map and valuate the statistics attributes at once - * - `LabelMapContourOverlayImageFilter `_ + * - `LabelMapContourOverlayImageFilter `_ - Apply a colormap to the contours (outlines) of each object in a label map and superimpose it on top of the feature image. - * - `LabelMapMaskImageFilter `_ + * - `LabelMapMaskImageFilter `_ - Mask and image with a LabelMap . - * - `LabelMapOverlayImageFilter `_ + * - `LabelMapOverlayImageFilter `_ - Apply a colormap to a label map and superimpose it on an image. - * - `LabelMapToBinaryImageFilter `_ + * - `LabelMapToBinaryImageFilter `_ - Convert a LabelMap to a binary image. - * - `LabelMapToLabelImageFilter `_ + * - `LabelMapToLabelImageFilter `_ - Converts a LabelMap to a labeled image. - * - `LabelMapToRGBImageFilter `_ + * - `LabelMapToRGBImageFilter `_ - Convert a LabelMap to a colored image. - * - `LabelOverlapMeasuresImageFilter `_ + * - `LabelOverlapMeasuresImageFilter `_ - Computes overlap measures between the set same set of labels of pixels of two images. Background is assumed to be 0. - * - `LabelOverlayImageFilter `_ + * - `LabelOverlayImageFilter `_ - Apply a colormap to a label image and put it on top of the input image. - * - `LabelSetDilateImageFilter `_ + * - `LabelSetDilateImageFilter `_ - Class for binary morphological erosion of label images. - * - `LabelSetErodeImageFilter `_ + * - `LabelSetErodeImageFilter `_ - Class for binary morphological erosion of label images. - * - `LabelShapeStatisticsImageFilter `_ + * - `LabelShapeStatisticsImageFilter `_ - Converts a label image to a label map and valuates the shape attributes. - * - `LabelStatisticsImageFilter `_ + * - `LabelStatisticsImageFilter `_ - Given an intensity image and a label map, compute min, max, variance and mean of the pixels associated with each label or segment. - * - `LabelToRGBImageFilter `_ + * - `LabelToRGBImageFilter `_ - Apply a colormap to a label image. - * - `LabelUniqueLabelMapFilter `_ + * - `LabelUniqueLabelMapFilter `_ - Make sure that the objects are not overlapping. - * - `LabelVotingImageFilter `_ + * - `LabelVotingImageFilter `_ - This filter performs pixelwise voting among an arbitrary number of input images, where each of them represents a segmentation of the same scene (i.e., image). - * - `LandweberDeconvolutionImageFilter `_ + * - `LandweberDeconvolutionImageFilter `_ - Deconvolve an image using the Landweber deconvolution algorithm. - * - `LaplacianImageFilter `_ + * - `LaplacianImageFilter `_ - - * - `LaplacianRecursiveGaussianImageFilter `_ + * - `LaplacianRecursiveGaussianImageFilter `_ - Computes the Laplacian of Gaussian (LoG) of an image. - * - `LaplacianSegmentationLevelSetImageFilter `_ + * - `LaplacianSegmentationLevelSetImageFilter `_ - Segments structures in images based on a second derivative image features. - * - `LaplacianSharpeningImageFilter `_ + * - `LaplacianSharpeningImageFilter `_ - This filter sharpens an image using a Laplacian. LaplacianSharpening highlights regions of rapid intensity change and therefore highlights or enhances the edges. The result is an image that appears more in focus. - * - `LessEqualImageFilter `_ + * - `LessEqualImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `LessImageFilter `_ + * - `LessImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `LevelSetMotionRegistrationFilter `_ + * - `LevelSetMotionRegistrationFilter `_ - Deformably register two images using level set motion. - * - `LiThresholdImageFilter `_ + * - `LiThresholdImageFilter `_ - Threshold an image using the Li Threshold. - * - `Log10ImageFilter `_ + * - `Log10ImageFilter `_ - Computes the log10 of each pixel. - * - `LogImageFilter `_ + * - `LogImageFilter `_ - Computes the log() of each pixel. - * - `MagnitudeAndPhaseToComplexImageFilter `_ + * - `MagnitudeAndPhaseToComplexImageFilter `_ - Implements pixel-wise conversion of magnitude and phase data into complex voxels. - * - `MaskImageFilter `_ + * - `MaskImageFilter `_ - Mask an image with a mask. - * - `MaskNegatedImageFilter `_ + * - `MaskNegatedImageFilter `_ - Mask an image with the negation (or logical compliment) of a mask. - * - `MaskedFFTNormalizedCorrelationImageFilter `_ + * - `MaskedFFTNormalizedCorrelationImageFilter `_ - Calculate masked normalized cross correlation using FFTs. - * - `MaximumEntropyThresholdImageFilter `_ + * - `MaximumEntropyThresholdImageFilter `_ - Threshold an image using the MaximumEntropy Threshold. - * - `MaximumImageFilter `_ + * - `MaximumImageFilter `_ - Implements a pixel-wise operator Max(a,b) between two images. - * - `MaximumProjectionImageFilter `_ + * - `MaximumProjectionImageFilter `_ - Maximum projection. - * - `MeanImageFilter `_ + * - `MeanImageFilter `_ - Applies an averaging filter to an image. - * - `MeanProjectionImageFilter `_ + * - `MeanProjectionImageFilter `_ - Mean projection. - * - `MedianImageFilter `_ + * - `MedianImageFilter `_ - Applies a median filter to an image. - * - `MedianProjectionImageFilter `_ + * - `MedianProjectionImageFilter `_ - Median projection. - * - `MergeLabelMapFilter `_ + * - `MergeLabelMapFilter `_ - Merges several Label Maps. - * - `MinMaxCurvatureFlowImageFilter `_ + * - `MinMaxCurvatureFlowImageFilter `_ - Denoise an image using min/max curvature flow. - * - `MinimumImageFilter `_ + * - `MinimumImageFilter `_ - Implements a pixel-wise operator Min(a,b) between two images. - * - `MinimumMaximumImageFilter `_ + * - `MinimumMaximumImageFilter `_ - Computes the minimum and the maximum intensity values of an image. - * - `MinimumProjectionImageFilter `_ + * - `MinimumProjectionImageFilter `_ - Minimum projection. - * - `MirrorPadImageFilter `_ + * - `MirrorPadImageFilter `_ - Increase the image size by padding with replicants of the input image value. - * - `ModulusImageFilter `_ + * - `ModulusImageFilter `_ - Computes the modulus (x % dividend) pixel-wise. - * - `MomentsThresholdImageFilter `_ + * - `MomentsThresholdImageFilter `_ - Threshold an image using the Moments Threshold. - * - `MorphologicalGradientImageFilter `_ + * - `MorphologicalGradientImageFilter `_ - gray scale dilation of an image - * - `MorphologicalWatershedFromMarkersImageFilter `_ + * - `MorphologicalWatershedFromMarkersImageFilter `_ - Morphological watershed transform from markers. - * - `MorphologicalWatershedImageFilter `_ + * - `MorphologicalWatershedImageFilter `_ - Watershed segmentation implementation with morphogical operators. - * - `MultiLabelSTAPLEImageFilter `_ + * - `MultiLabelSTAPLEImageFilter `_ - This filter performs a pixelwise combination of an arbitrary number of input images, where each of them represents a segmentation of the same scene (i.e., image). - * - `MultiplyImageFilter `_ + * - `MultiplyImageFilter `_ - Pixel-wise multiplication of two images. - * - `N4BiasFieldCorrectionImageFilter `_ + * - `N4BiasFieldCorrectionImageFilter `_ - Implementation of the N4 bias field correction algorithm. - * - `NaryAddImageFilter `_ + * - `NaryAddImageFilter `_ - Pixel-wise addition of N images. - * - `NaryMaximumImageFilter `_ + * - `NaryMaximumImageFilter `_ - Computes the pixel-wise maximum of several images. - * - `NeighborhoodConnectedImageFilter `_ + * - `NeighborhoodConnectedImageFilter `_ - Label pixels that are connected to a seed and lie within a neighborhood. - * - `NoiseImageFilter `_ + * - `NoiseImageFilter `_ - Calculate the local noise in an image. - * - `NormalizeImageFilter `_ + * - `NormalizeImageFilter `_ - Normalize an image by setting its mean to zero and variance to one. - * - `NormalizeToConstantImageFilter `_ + * - `NormalizeToConstantImageFilter `_ - Scales image pixel intensities to make the sum of all pixels equal a user-defined constant. - * - `NormalizedCorrelationImageFilter `_ + * - `NormalizedCorrelationImageFilter `_ - Computes the normalized correlation of an image and a template. - * - `NotEqualImageFilter `_ + * - `NotEqualImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `NotImageFilter `_ + * - `NotImageFilter `_ - Implements the NOT logical operator pixel-wise on an image. - * - `ObjectnessMeasureImageFilter `_ + * - `ObjectnessMeasureImageFilter `_ - Enhance M-dimensional objects in N-dimensional images. - * - `OpeningByReconstructionImageFilter `_ + * - `OpeningByReconstructionImageFilter `_ - Opening by reconstruction of an image. - * - `OrImageFilter `_ + * - `OrImageFilter `_ - Implements the OR bitwise operator pixel-wise between two images. - * - `OtsuMultipleThresholdsImageFilter `_ + * - `OtsuMultipleThresholdsImageFilter `_ - Threshold an image using multiple Otsu Thresholds. - * - `OtsuThresholdImageFilter `_ + * - `OtsuThresholdImageFilter `_ - Threshold an image using the Otsu Threshold. - * - `PasteImageFilter `_ + * - `PasteImageFilter `_ - Paste an image into another image. - * - `PatchBasedDenoisingImageFilter `_ + * - `PatchBasedDenoisingImageFilter `_ - Derived class implementing a specific patch-based denoising algorithm, as detailed below. - * - `PermuteAxesImageFilter `_ + * - `PermuteAxesImageFilter `_ - Permutes the image axes according to a user specified order. - * - `PhysicalPointImageSource `_ + * - `PhysicalPointImageSource `_ - Generate an image of the physical locations of each pixel. - * - `PowImageFilter `_ + * - `PowImageFilter `_ - Computes the powers of 2 images. - * - `ProjectedLandweberDeconvolutionImageFilter `_ + * - `ProjectedLandweberDeconvolutionImageFilter `_ - Deconvolve an image using the projected Landweber deconvolution algorithm. - * - `RankImageFilter `_ + * - `RankImageFilter `_ - Rank filter of a greyscale image. - * - `RealAndImaginaryToComplexImageFilter `_ + * - `RealAndImaginaryToComplexImageFilter `_ - ComposeImageFilter combine several scalar images into a multicomponent image. - * - `RealToHalfHermitianForwardFFTImageFilter `_ + * - `RealToHalfHermitianForwardFFTImageFilter `_ - Base class for specialized real-to-complex forward Fast Fourier Transform . - * - `ReconstructionByDilationImageFilter `_ + * - `ReconstructionByDilationImageFilter `_ - grayscale reconstruction by dilation of an image - * - `ReconstructionByErosionImageFilter `_ + * - `ReconstructionByErosionImageFilter `_ - grayscale reconstruction by erosion of an image - * - `RecursiveGaussianImageFilter `_ + * - `RecursiveGaussianImageFilter `_ - Base class for computing IIR convolution with an approximation of a Gaussian kernel. - * - `RegionOfInterestImageFilter `_ + * - `RegionOfInterestImageFilter `_ - Extract a region of interest from the input image. - * - `RegionalMaximaImageFilter `_ + * - `RegionalMaximaImageFilter `_ - Produce a binary image where foreground is the regional maxima of the input image. - * - `RegionalMinimaImageFilter `_ + * - `RegionalMinimaImageFilter `_ - Produce a binary image where foreground is the regional minima of the input image. - * - `RelabelComponentImageFilter `_ + * - `RelabelComponentImageFilter `_ - Relabel the components in an image such that consecutive labels are used. - * - `RelabelLabelMapFilter `_ + * - `RelabelLabelMapFilter `_ - This filter relabels the LabelObjects; the new labels are arranged consecutively with consideration for the background value. - * - `RenyiEntropyThresholdImageFilter `_ + * - `RenyiEntropyThresholdImageFilter `_ - Threshold an image using the RenyiEntropy Threshold. - * - `ResampleImageFilter `_ + * - `ResampleImageFilter `_ - Resample an image via a coordinate transform. - * - `RescaleIntensityImageFilter `_ + * - `RescaleIntensityImageFilter `_ - Applies a linear transformation to the intensity levels of the input Image . - * - `RichardsonLucyDeconvolutionImageFilter `_ + * - `RichardsonLucyDeconvolutionImageFilter `_ - Deconvolve an image using the Richardson-Lucy deconvolution algorithm. - * - `RoundImageFilter `_ + * - `RoundImageFilter `_ - Rounds the value of each pixel. - * - `SLICImageFilter `_ + * - `SLICImageFilter `_ - Simple Linear Iterative Clustering (SLIC) super-pixel segmentation. - * - `STAPLEImageFilter `_ + * - `STAPLEImageFilter `_ - The STAPLE filter implements the Simultaneous Truth and Performance Level Estimation algorithm for generating ground truth volumes from a set of binary expert segmentations. - * - `SaltAndPepperNoiseImageFilter `_ + * - `SaltAndPepperNoiseImageFilter `_ - Alter an image with fixed value impulse noise, often called salt and pepper noise. - * - `ScalarChanAndVeseDenseLevelSetImageFilter `_ + * - `ScalarChanAndVeseDenseLevelSetImageFilter `_ - Dense implementation of the Chan and Vese multiphase level set image filter. - * - `ScalarConnectedComponentImageFilter `_ + * - `ScalarConnectedComponentImageFilter `_ - A connected components filter that labels the objects in an arbitrary image. Two pixels are similar if they are within threshold of each other. Uses ConnectedComponentFunctorImageFilter . - * - `ScalarImageKmeansImageFilter `_ + * - `ScalarImageKmeansImageFilter `_ - Classifies the intensity values of a scalar image using the K-Means algorithm. - * - `ScalarToRGBColormapImageFilter `_ + * - `ScalarToRGBColormapImageFilter `_ - Implements pixel-wise intensity->rgb mapping operation on one image. - * - `ShanbhagThresholdImageFilter `_ + * - `ShanbhagThresholdImageFilter `_ - Threshold an image using the Shanbhag Threshold. - * - `ShapeDetectionLevelSetImageFilter `_ + * - `ShapeDetectionLevelSetImageFilter `_ - Segments structures in images based on a user supplied edge potential map. - * - `ShiftScaleImageFilter `_ + * - `ShiftScaleImageFilter `_ - Shift and scale the pixels in an image. - * - `ShotNoiseImageFilter `_ + * - `ShotNoiseImageFilter `_ - Alter an image with shot noise. - * - `ShrinkImageFilter `_ + * - `ShrinkImageFilter `_ - Reduce the size of an image by an integer factor in each dimension. - * - `SigmoidImageFilter `_ + * - `SigmoidImageFilter `_ - Computes the sigmoid function pixel-wise. - * - `SignedDanielssonDistanceMapImageFilter `_ + * - `SignedDanielssonDistanceMapImageFilter `_ - - * - `SignedMaurerDistanceMapImageFilter `_ + * - `SignedMaurerDistanceMapImageFilter `_ - This filter calculates the Euclidean distance transform of a binary image in linear time for arbitrary dimensions. - * - `SimilarityIndexImageFilter `_ + * - `SimilarityIndexImageFilter `_ - Measures the similarity between the set of non-zero pixels of two images. - * - `SimpleContourExtractorImageFilter `_ + * - `SimpleContourExtractorImageFilter `_ - Computes an image of contours which will be the contour of the first image. - * - `SinImageFilter `_ + * - `SinImageFilter `_ - Computes the sine of each pixel. - * - `SliceImageFilter `_ + * - `SliceImageFilter `_ - Slices an image based on a starting index and a stopping index, and a step size. - * - `SmoothingRecursiveGaussianImageFilter `_ + * - `SmoothingRecursiveGaussianImageFilter `_ - Computes the smoothing of an image by convolution with the Gaussian kernels implemented as IIR filters. - * - `SobelEdgeDetectionImageFilter `_ + * - `SobelEdgeDetectionImageFilter `_ - A 2D or 3D edge detection using the Sobel operator. - * - `SpeckleNoiseImageFilter `_ + * - `SpeckleNoiseImageFilter `_ - Alter an image with speckle (multiplicative) noise. - * - `SqrtImageFilter `_ + * - `SqrtImageFilter `_ - Computes the square root of each pixel. - * - `SquareImageFilter `_ + * - `SquareImageFilter `_ - Computes the square of the intensity values pixel-wise. - * - `SquaredDifferenceImageFilter `_ + * - `SquaredDifferenceImageFilter `_ - Implements pixel-wise the computation of squared difference. - * - `StandardDeviationProjectionImageFilter `_ + * - `StandardDeviationProjectionImageFilter `_ - Mean projection. - * - `StatisticsImageFilter `_ + * - `StatisticsImageFilter `_ - Compute min. max, variance and mean of an Image . - * - `StochasticFractalDimensionImageFilter `_ + * - `StochasticFractalDimensionImageFilter `_ - This filter computes the stochastic fractal dimension of the input image. - * - `SubtractImageFilter `_ + * - `SubtractImageFilter `_ - Pixel-wise subtraction of two images. - * - `SumProjectionImageFilter `_ + * - `SumProjectionImageFilter `_ - Sum projection. - * - `SymmetricForcesDemonsRegistrationFilter `_ + * - `SymmetricForcesDemonsRegistrationFilter `_ - Deformably register two images using the demons algorithm. - * - `TanImageFilter `_ + * - `TanImageFilter `_ - Computes the tangent of each input pixel. - * - `TernaryAddImageFilter `_ + * - `TernaryAddImageFilter `_ - Pixel-wise addition of three images. - * - `TernaryMagnitudeImageFilter `_ + * - `TernaryMagnitudeImageFilter `_ - Compute the pixel-wise magnitude of three images. - * - `TernaryMagnitudeSquaredImageFilter `_ + * - `TernaryMagnitudeSquaredImageFilter `_ - Compute the pixel-wise squared magnitude of three images. - * - `ThresholdImageFilter `_ + * - `ThresholdImageFilter `_ - Set image values to a user-specified value if they are below, above, or between simple threshold values. - * - `ThresholdMaximumConnectedComponentsImageFilter `_ + * - `ThresholdMaximumConnectedComponentsImageFilter `_ - Finds the threshold value of an image based on maximizing the number of objects in the image that are larger than a given minimal size. - * - `ThresholdSegmentationLevelSetImageFilter `_ + * - `ThresholdSegmentationLevelSetImageFilter `_ - Segments structures in images based on intensity values. - * - `TikhonovDeconvolutionImageFilter `_ + * - `TikhonovDeconvolutionImageFilter `_ - An inverse deconvolution filter regularized in the Tikhonov sense. - * - `TileImageFilter `_ + * - `TileImageFilter `_ - Tile multiple input images into a single output image. - * - `TobogganImageFilter `_ + * - `TobogganImageFilter `_ - toboggan image segmentation The Toboggan segmentation takes a gradient magnitude image as input and produces an (over-)segmentation of the image based on connecting each pixel to a local minimum of gradient. It is roughly equivalent to a watershed segmentation of the lowest level. - * - `TransformToDisplacementFieldFilter `_ + * - `TransformToDisplacementFieldFilter `_ - Generate a displacement field from a coordinate transform. - * - `TriangleThresholdImageFilter `_ + * - `TriangleThresholdImageFilter `_ - Threshold an image using the Triangle Threshold. - * - `UnaryMinusImageFilter `_ + * - `UnaryMinusImageFilter `_ - Implements pixel-wise generic operation on one image. - * - `UnsharpMaskImageFilter `_ + * - `UnsharpMaskImageFilter `_ - Edge enhancement filter. - * - `ValuedRegionalMaximaImageFilter `_ + * - `ValuedRegionalMaximaImageFilter `_ - Transforms the image so that any pixel that is not a regional maxima is set to the minimum value for the pixel type. Pixels that are regional maxima retain their value. - * - `ValuedRegionalMinimaImageFilter `_ + * - `ValuedRegionalMinimaImageFilter `_ - Transforms the image so that any pixel that is not a regional minima is set to the maximum value for the pixel type. Pixels that are regional minima retain their value. - * - `VectorConfidenceConnectedImageFilter `_ + * - `VectorConfidenceConnectedImageFilter `_ - Segment pixels with similar statistics using connectivity. - * - `VectorConnectedComponentImageFilter `_ + * - `VectorConnectedComponentImageFilter `_ - A connected components filter that labels the objects in a vector image. Two vectors are pointing similar directions if one minus their dot product is less than a threshold. Vectors that are 180 degrees out of phase are similar. Assumes that vectors are normalized. - * - `VectorIndexSelectionCastImageFilter `_ + * - `VectorIndexSelectionCastImageFilter `_ - Extracts the selected index of the vector that is the input pixel type. - * - `VectorMagnitudeImageFilter `_ + * - `VectorMagnitudeImageFilter `_ - Take an image of vectors as input and produce an image with the magnitude of those vectors. - * - `VotingBinaryHoleFillingImageFilter `_ + * - `VotingBinaryHoleFillingImageFilter `_ - Fills in holes and cavities by applying a voting operation on each pixel. - * - `VotingBinaryImageFilter `_ + * - `VotingBinaryImageFilter `_ - Applies a voting operation in a neighborhood of each pixel. - * - `VotingBinaryIterativeHoleFillingImageFilter `_ + * - `VotingBinaryIterativeHoleFillingImageFilter `_ - Fills in holes and cavities by iteratively applying a voting operation. - * - `WarpImageFilter `_ + * - `WarpImageFilter `_ - Warps an image using an input displacement field. - * - `WhiteTopHatImageFilter `_ + * - `WhiteTopHatImageFilter `_ - White top hat extracts local maxima that are larger than the structuring element. - * - `WienerDeconvolutionImageFilter `_ + * - `WienerDeconvolutionImageFilter `_ - The Wiener deconvolution image filter is designed to restore an image convolved with a blurring kernel while keeping noise enhancement to a minimum. - * - `WrapPadImageFilter `_ + * - `WrapPadImageFilter `_ - Increase the image size by padding with replicants of the input image value. - * - `XorImageFilter `_ + * - `XorImageFilter `_ - Computes the XOR bitwise operator pixel-wise between two images. - * - `YenThresholdImageFilter `_ + * - `YenThresholdImageFilter `_ - Threshold an image using the Yen Threshold. - * - `ZeroCrossingBasedEdgeDetectionImageFilter `_ + * - `ZeroCrossingBasedEdgeDetectionImageFilter `_ - This filter implements a zero-crossing based edge detecor. - * - `ZeroCrossingImageFilter `_ + * - `ZeroCrossingImageFilter `_ - This filter finds the closest pixel to the zero-crossings (sign changes) in a signed itk::Image . - * - `ZeroFluxNeumannPadImageFilter `_ + * - `ZeroFluxNeumannPadImageFilter `_ - Increase the image size by padding according to the zero-flux Neumann boundary condition. From 94fe94b5f260ba784091688ab8b1cd682a7ef7a9 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 9 Jul 2019 17:17:39 -0400 Subject: [PATCH 144/400] Correct URL to SimpleITK doxygen --- Documentation/docs/source/filters.rst | 582 +++++++++--------- .../JSON/JSONGenerateSphinxFiltersDoc.py | 2 +- 2 files changed, 292 insertions(+), 292 deletions(-) diff --git a/Documentation/docs/source/filters.rst b/Documentation/docs/source/filters.rst index 971106c3c..ac2467f7c 100644 --- a/Documentation/docs/source/filters.rst +++ b/Documentation/docs/source/filters.rst @@ -10,585 +10,585 @@ SimpleITK Filters * - Filter Name - Brief Description - * - `AbsImageFilter `_ + * - `AbsImageFilter `_ - Computes the absolute value of each pixel. - * - `AbsoluteValueDifferenceImageFilter `_ + * - `AbsoluteValueDifferenceImageFilter `_ - Implements pixel-wise the computation of absolute value difference. - * - `AcosImageFilter `_ + * - `AcosImageFilter `_ - Computes the inverse cosine of each pixel. - * - `AdaptiveHistogramEqualizationImageFilter `_ + * - `AdaptiveHistogramEqualizationImageFilter `_ - Power Law Adaptive Histogram Equalization. - * - `AddImageFilter `_ + * - `AddImageFilter `_ - Pixel-wise addition of two images. - * - `AdditiveGaussianNoiseImageFilter `_ + * - `AdditiveGaussianNoiseImageFilter `_ - Alter an image with additive Gaussian white noise. - * - `AggregateLabelMapFilter `_ + * - `AggregateLabelMapFilter `_ - Collapses all labels into the first label. - * - `AndImageFilter `_ + * - `AndImageFilter `_ - Implements the AND bitwise operator pixel-wise between two images. - * - `AntiAliasBinaryImageFilter `_ + * - `AntiAliasBinaryImageFilter `_ - A method for estimation of a surface from a binary volume. - * - `ApproximateSignedDistanceMapImageFilter `_ + * - `ApproximateSignedDistanceMapImageFilter `_ - Create a map of the approximate signed distance from the boundaries of a binary image. - * - `AsinImageFilter `_ + * - `AsinImageFilter `_ - Computes the sine of each pixel. - * - `Atan2ImageFilter `_ + * - `Atan2ImageFilter `_ - Computes two argument inverse tangent. - * - `AtanImageFilter `_ + * - `AtanImageFilter `_ - Computes the one-argument inverse tangent of each pixel. - * - `BSplineDecompositionImageFilter `_ + * - `BSplineDecompositionImageFilter `_ - Calculates the B-Spline coefficients of an image. Spline order may be from 0 to 5. - * - `BilateralImageFilter `_ + * - `BilateralImageFilter `_ - Blurs an image while preserving edges. - * - `BinShrinkImageFilter `_ + * - `BinShrinkImageFilter `_ - Reduce the size of an image by an integer factor in each dimension while performing averaging of an input neighborhood. - * - `BinaryClosingByReconstructionImageFilter `_ + * - `BinaryClosingByReconstructionImageFilter `_ - binary closing by reconstruction of an image. - * - `BinaryContourImageFilter `_ + * - `BinaryContourImageFilter `_ - Labels the pixels on the border of the objects in a binary image. - * - `BinaryDilateImageFilter `_ + * - `BinaryDilateImageFilter `_ - Fast binary dilation. - * - `BinaryErodeImageFilter `_ + * - `BinaryErodeImageFilter `_ - Fast binary erosion. - * - `BinaryFillholeImageFilter `_ + * - `BinaryFillholeImageFilter `_ - Remove holes not connected to the boundary of the image. - * - `BinaryGrindPeakImageFilter `_ + * - `BinaryGrindPeakImageFilter `_ - Remove the objects not connected to the boundary of the image. - * - `BinaryImageToLabelMapFilter `_ + * - `BinaryImageToLabelMapFilter `_ - Label the connected components in a binary image and produce a collection of label objects. - * - `BinaryMagnitudeImageFilter `_ + * - `BinaryMagnitudeImageFilter `_ - Computes the square root of the sum of squares of corresponding input pixels. - * - `BinaryMedianImageFilter `_ + * - `BinaryMedianImageFilter `_ - Applies a version of the median filter optimized for binary images. - * - `BinaryMinMaxCurvatureFlowImageFilter `_ + * - `BinaryMinMaxCurvatureFlowImageFilter `_ - Denoise a binary image using min/max curvature flow. - * - `BinaryMorphologicalClosingImageFilter `_ + * - `BinaryMorphologicalClosingImageFilter `_ - binary morphological closing of an image. - * - `BinaryMorphologicalOpeningImageFilter `_ + * - `BinaryMorphologicalOpeningImageFilter `_ - binary morphological opening of an image. - * - `BinaryNotImageFilter `_ + * - `BinaryNotImageFilter `_ - Implements the BinaryNot logical operator pixel-wise between two images. - * - `BinaryOpeningByReconstructionImageFilter `_ + * - `BinaryOpeningByReconstructionImageFilter `_ - binary morphological closing of an image. - * - `BinaryProjectionImageFilter `_ + * - `BinaryProjectionImageFilter `_ - Binary projection. - * - `BinaryReconstructionByDilationImageFilter `_ + * - `BinaryReconstructionByDilationImageFilter `_ - binary reconstruction by dilation of an image - * - `BinaryReconstructionByErosionImageFilter `_ + * - `BinaryReconstructionByErosionImageFilter `_ - binary reconstruction by erosion of an image - * - `BinaryThinningImageFilter `_ + * - `BinaryThinningImageFilter `_ - This filter computes one-pixel-wide edges of the input image. - * - `BinaryThresholdImageFilter `_ + * - `BinaryThresholdImageFilter `_ - Binarize an input image by thresholding. - * - `BinaryThresholdProjectionImageFilter `_ + * - `BinaryThresholdProjectionImageFilter `_ - BinaryThreshold projection. - * - `BinomialBlurImageFilter `_ + * - `BinomialBlurImageFilter `_ - Performs a separable blur on each dimension of an image. - * - `BitwiseNotImageFilter `_ + * - `BitwiseNotImageFilter `_ - Implements pixel-wise generic operation on one image. - * - `BlackTopHatImageFilter `_ + * - `BlackTopHatImageFilter `_ - Black top hat extracts local minima that are smaller than the structuring element. - * - `BoundedReciprocalImageFilter `_ + * - `BoundedReciprocalImageFilter `_ - Computes 1/(1+x) for each pixel in the image. - * - `BoxMeanImageFilter `_ + * - `BoxMeanImageFilter `_ - Implements a fast rectangular mean filter using the accumulator approach. - * - `BoxSigmaImageFilter `_ + * - `BoxSigmaImageFilter `_ - Implements a fast rectangular sigma filter using the accumulator approach. - * - `CannyEdgeDetectionImageFilter `_ + * - `CannyEdgeDetectionImageFilter `_ - This filter is an implementation of a Canny edge detector for scalar-valued images. - * - `ChangeLabelImageFilter `_ + * - `ChangeLabelImageFilter `_ - Change Sets of Labels. - * - `ChangeLabelLabelMapFilter `_ + * - `ChangeLabelLabelMapFilter `_ - Replace the label Ids of selected LabelObjects with new label Ids. - * - `CheckerBoardImageFilter `_ + * - `CheckerBoardImageFilter `_ - Combines two images in a checkerboard pattern. - * - `ClampImageFilter `_ + * - `ClampImageFilter `_ - Casts input pixels to output pixel type and clamps the output pixel values to a specified range. - * - `ClosingByReconstructionImageFilter `_ + * - `ClosingByReconstructionImageFilter `_ - Closing by reconstruction of an image. - * - `CoherenceEnhancingDiffusionImageFilter `_ + * - `CoherenceEnhancingDiffusionImageFilter `_ - Coherence enhanging diffusion and edge enhancing diffusion. - * - `CollidingFrontsImageFilter `_ + * - `CollidingFrontsImageFilter `_ - Selects a region of space where two independent fronts run towards each other. - * - `ComplexToImaginaryImageFilter `_ + * - `ComplexToImaginaryImageFilter `_ - Computes pixel-wise the imaginary part of a complex image. - * - `ComplexToModulusImageFilter `_ + * - `ComplexToModulusImageFilter `_ - Computes pixel-wise the Modulus of a complex image. - * - `ComplexToPhaseImageFilter `_ + * - `ComplexToPhaseImageFilter `_ - Computes pixel-wise the modulus of a complex image. - * - `ComplexToRealImageFilter `_ + * - `ComplexToRealImageFilter `_ - Computes pixel-wise the real(x) part of a complex image. - * - `ComposeImageFilter `_ + * - `ComposeImageFilter `_ - ComposeImageFilter combine several scalar images into a multicomponent image. - * - `ConfidenceConnectedImageFilter `_ + * - `ConfidenceConnectedImageFilter `_ - Segment pixels with similar statistics using connectivity. - * - `ConnectedComponentImageFilter `_ + * - `ConnectedComponentImageFilter `_ - Label the objects in a binary image. - * - `ConnectedThresholdImageFilter `_ + * - `ConnectedThresholdImageFilter `_ - Label pixels that are connected to a seed and lie within a range of values. - * - `ConstantPadImageFilter `_ + * - `ConstantPadImageFilter `_ - Increase the image size by padding with a constant value. - * - `ConvolutionImageFilter `_ + * - `ConvolutionImageFilter `_ - Convolve a given image with an arbitrary image kernel. - * - `CosImageFilter `_ + * - `CosImageFilter `_ - Computes the cosine of each pixel. - * - `CropImageFilter `_ + * - `CropImageFilter `_ - Decrease the image size by cropping the image by an itk::Size at both the upper and lower bounds of the largest possible region. - * - `CurvatureAnisotropicDiffusionImageFilter `_ + * - `CurvatureAnisotropicDiffusionImageFilter `_ - - * - `CurvatureFlowImageFilter `_ + * - `CurvatureFlowImageFilter `_ - Denoise an image using curvature driven flow. - * - `CyclicShiftImageFilter `_ + * - `CyclicShiftImageFilter `_ - Perform a cyclic spatial shift of image intensities on the image grid. - * - `DanielssonDistanceMapImageFilter `_ + * - `DanielssonDistanceMapImageFilter `_ - This filter computes the distance map of the input image as an approximation with pixel accuracy to the Euclidean distance. - * - `DemonsRegistrationFilter `_ + * - `DemonsRegistrationFilter `_ - Deformably register two images using the demons algorithm. - * - `DerivativeImageFilter `_ + * - `DerivativeImageFilter `_ - Computes the directional derivative of an image. The directional derivative at each pixel location is computed by convolution with a derivative operator of user-specified order. - * - `DiffeomorphicDemonsRegistrationFilter `_ + * - `DiffeomorphicDemonsRegistrationFilter `_ - Deformably register two images using a diffeomorphic demons algorithm. - * - `DilateObjectMorphologyImageFilter `_ + * - `DilateObjectMorphologyImageFilter `_ - dilation of an object in an image - * - `DiscreteGaussianDerivativeImageFilter `_ + * - `DiscreteGaussianDerivativeImageFilter `_ - Calculates image derivatives using discrete derivative gaussian kernels. This filter calculates Gaussian derivative by separable convolution of an image and a discrete Gaussian derivative operator (kernel). - * - `DiscreteGaussianImageFilter `_ + * - `DiscreteGaussianImageFilter `_ - Blurs an image by separable convolution with discrete gaussian kernels. This filter performs Gaussian blurring by separable convolution of an image and a discrete Gaussian operator (kernel). - * - `DisplacementFieldJacobianDeterminantFilter `_ + * - `DisplacementFieldJacobianDeterminantFilter `_ - Computes a scalar image from a vector image (e.g., deformation field) input, where each output scalar at each pixel is the Jacobian determinant of the vector field at that location. This calculation is correct in the case where the vector image is a "displacement" from the current location. The computation for the jacobian determinant is: det[ dT/dx ] = det[ I + du/dx ]. - * - `DivideFloorImageFilter `_ + * - `DivideFloorImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `DivideImageFilter `_ + * - `DivideImageFilter `_ - Pixel-wise division of two images. - * - `DivideRealImageFilter `_ + * - `DivideRealImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `DoubleThresholdImageFilter `_ + * - `DoubleThresholdImageFilter `_ - Binarize an input image using double thresholding. - * - `EdgePotentialImageFilter `_ + * - `EdgePotentialImageFilter `_ - Computes the edge potential of an image from the image gradient. - * - `EqualImageFilter `_ + * - `EqualImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `ErodeObjectMorphologyImageFilter `_ + * - `ErodeObjectMorphologyImageFilter `_ - Erosion of an object in an image. - * - `ExpImageFilter `_ + * - `ExpImageFilter `_ - Computes the exponential function of each pixel. - * - `ExpNegativeImageFilter `_ + * - `ExpNegativeImageFilter `_ - Computes the function exp(-K.x) for each input pixel. - * - `ExpandImageFilter `_ + * - `ExpandImageFilter `_ - Expand the size of an image by an integer factor in each dimension. - * - `ExtractImageFilter `_ + * - `ExtractImageFilter `_ - Decrease the image size by cropping the image to the selected region bounds. - * - `FFTConvolutionImageFilter `_ + * - `FFTConvolutionImageFilter `_ - Convolve a given image with an arbitrary image kernel using multiplication in the Fourier domain. - * - `FFTNormalizedCorrelationImageFilter `_ + * - `FFTNormalizedCorrelationImageFilter `_ - Calculate normalized cross correlation using FFTs. - * - `FFTPadImageFilter `_ + * - `FFTPadImageFilter `_ - Pad an image to make it suitable for an FFT transformation. - * - `FFTShiftImageFilter `_ + * - `FFTShiftImageFilter `_ - Shift the zero-frequency components of a Fourier transform to the center of the image. - * - `FastApproximateRankImageFilter `_ + * - `FastApproximateRankImageFilter `_ - A separable rank filter. - * - `FastMarchingBaseImageFilter `_ + * - `FastMarchingBaseImageFilter `_ - Apply the Fast Marching method to solve an Eikonal equation on an image. - * - `FastMarchingImageFilter `_ + * - `FastMarchingImageFilter `_ - Solve an Eikonal equation using Fast Marching. - * - `FastMarchingUpwindGradientImageFilter `_ + * - `FastMarchingUpwindGradientImageFilter `_ - Generates the upwind gradient field of fast marching arrival times. - * - `FastSymmetricForcesDemonsRegistrationFilter `_ + * - `FastSymmetricForcesDemonsRegistrationFilter `_ - Deformably register two images using a symmetric forces demons algorithm. - * - `FlipImageFilter `_ + * - `FlipImageFilter `_ - Flips an image across user specified axes. - * - `ForwardFFTImageFilter `_ + * - `ForwardFFTImageFilter `_ - Base class for forward Fast Fourier Transform . - * - `GaborImageSource `_ + * - `GaborImageSource `_ - Generate an n-dimensional image of a Gabor filter. - * - `GaussianImageSource `_ + * - `GaussianImageSource `_ - Generate an n-dimensional image of a Gaussian. - * - `GeodesicActiveContourLevelSetImageFilter `_ + * - `GeodesicActiveContourLevelSetImageFilter `_ - Segments structures in images based on a user supplied edge potential map. - * - `GradientAnisotropicDiffusionImageFilter `_ + * - `GradientAnisotropicDiffusionImageFilter `_ - - * - `GradientImageFilter `_ + * - `GradientImageFilter `_ - Computes the gradient of an image using directional derivatives. - * - `GradientMagnitudeImageFilter `_ + * - `GradientMagnitudeImageFilter `_ - Computes the gradient magnitude of an image region at each pixel. - * - `GradientMagnitudeRecursiveGaussianImageFilter `_ + * - `GradientMagnitudeRecursiveGaussianImageFilter `_ - Computes the Magnitude of the Gradient of an image by convolution with the first derivative of a Gaussian. - * - `GradientRecursiveGaussianImageFilter `_ + * - `GradientRecursiveGaussianImageFilter `_ - Computes the gradient of an image by convolution with the first derivative of a Gaussian. - * - `GrayscaleConnectedClosingImageFilter `_ + * - `GrayscaleConnectedClosingImageFilter `_ - Enhance pixels associated with a dark object (identified by a seed pixel) where the dark object is surrounded by a brigher object. - * - `GrayscaleConnectedOpeningImageFilter `_ + * - `GrayscaleConnectedOpeningImageFilter `_ - Enhance pixels associated with a bright object (identified by a seed pixel) where the bright object is surrounded by a darker object. - * - `GrayscaleDilateImageFilter `_ + * - `GrayscaleDilateImageFilter `_ - Grayscale dilation of an image. - * - `GrayscaleErodeImageFilter `_ + * - `GrayscaleErodeImageFilter `_ - Grayscale erosion of an image. - * - `GrayscaleFillholeImageFilter `_ + * - `GrayscaleFillholeImageFilter `_ - Remove local minima not connected to the boundary of the image. - * - `GrayscaleGeodesicDilateImageFilter `_ + * - `GrayscaleGeodesicDilateImageFilter `_ - geodesic gray scale dilation of an image - * - `GrayscaleGeodesicErodeImageFilter `_ + * - `GrayscaleGeodesicErodeImageFilter `_ - geodesic gray scale erosion of an image - * - `GrayscaleGrindPeakImageFilter `_ + * - `GrayscaleGrindPeakImageFilter `_ - Remove local maxima not connected to the boundary of the image. - * - `GrayscaleMorphologicalClosingImageFilter `_ + * - `GrayscaleMorphologicalClosingImageFilter `_ - gray scale dilation of an image - * - `GrayscaleMorphologicalOpeningImageFilter `_ + * - `GrayscaleMorphologicalOpeningImageFilter `_ - gray scale dilation of an image - * - `GreaterEqualImageFilter `_ + * - `GreaterEqualImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `GreaterImageFilter `_ + * - `GreaterImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `GridImageSource `_ + * - `GridImageSource `_ - Generate an n-dimensional image of a grid. - * - `HConcaveImageFilter `_ + * - `HConcaveImageFilter `_ - Identify local minima whose depth below the baseline is greater than h. - * - `HConvexImageFilter `_ + * - `HConvexImageFilter `_ - Identify local maxima whose height above the baseline is greater than h. - * - `HMaximaImageFilter `_ + * - `HMaximaImageFilter `_ - Suppress local maxima whose height above the baseline is less than h. - * - `HMinimaImageFilter `_ + * - `HMinimaImageFilter `_ - Suppress local minima whose depth below the baseline is less than h. - * - `HalfHermitianToRealInverseFFTImageFilter `_ + * - `HalfHermitianToRealInverseFFTImageFilter `_ - Base class for specialized complex-to-real inverse Fast Fourier Transform . - * - `HausdorffDistanceImageFilter `_ + * - `HausdorffDistanceImageFilter `_ - Computes the Hausdorff distance between the set of non-zero pixels of two images. - * - `HistogramMatchingImageFilter `_ + * - `HistogramMatchingImageFilter `_ - Normalize the grayscale values between two images by histogram matching. - * - `HuangThresholdImageFilter `_ + * - `HuangThresholdImageFilter `_ - Threshold an image using the Huang Threshold. - * - `IntensityWindowingImageFilter `_ + * - `IntensityWindowingImageFilter `_ - Applies a linear transformation to the intensity levels of the input Image that are inside a user-defined interval. Values below this interval are mapped to a constant. Values over the interval are mapped to another constant. - * - `IntermodesThresholdImageFilter `_ + * - `IntermodesThresholdImageFilter `_ - Threshold an image using the Intermodes Threshold. - * - `InverseDeconvolutionImageFilter `_ + * - `InverseDeconvolutionImageFilter `_ - The direct linear inverse deconvolution filter. - * - `InverseDisplacementFieldImageFilter `_ + * - `InverseDisplacementFieldImageFilter `_ - Computes the inverse of a displacement field. - * - `InverseFFTImageFilter `_ + * - `InverseFFTImageFilter `_ - Base class for inverse Fast Fourier Transform . - * - `InvertDisplacementFieldImageFilter `_ + * - `InvertDisplacementFieldImageFilter `_ - Iteratively estimate the inverse field of a displacement field. - * - `InvertIntensityImageFilter `_ + * - `InvertIntensityImageFilter `_ - Invert the intensity of an image. - * - `IsoContourDistanceImageFilter `_ + * - `IsoContourDistanceImageFilter `_ - Compute an approximate distance from an interpolated isocontour to the close grid points. - * - `IsoDataThresholdImageFilter `_ + * - `IsoDataThresholdImageFilter `_ - Threshold an image using the IsoData Threshold. - * - `IsolatedConnectedImageFilter `_ + * - `IsolatedConnectedImageFilter `_ - Label pixels that are connected to one set of seeds but not another. - * - `IsolatedWatershedImageFilter `_ + * - `IsolatedWatershedImageFilter `_ - Isolate watershed basins using two seeds. - * - `IterativeInverseDisplacementFieldImageFilter `_ + * - `IterativeInverseDisplacementFieldImageFilter `_ - Computes the inverse of a displacement field. - * - `JoinSeriesImageFilter `_ + * - `JoinSeriesImageFilter `_ - Join N-D images into an (N+1)-D image. - * - `KittlerIllingworthThresholdImageFilter `_ + * - `KittlerIllingworthThresholdImageFilter `_ - Threshold an image using the KittlerIllingworth Threshold. - * - `LabelContourImageFilter `_ + * - `LabelContourImageFilter `_ - Labels the pixels on the border of the objects in a labeled image. - * - `LabelImageToLabelMapFilter `_ + * - `LabelImageToLabelMapFilter `_ - convert a labeled image to a label collection image - * - `LabelIntensityStatisticsImageFilter `_ + * - `LabelIntensityStatisticsImageFilter `_ - a convenient class to convert a label image to a label map and valuate the statistics attributes at once - * - `LabelMapContourOverlayImageFilter `_ + * - `LabelMapContourOverlayImageFilter `_ - Apply a colormap to the contours (outlines) of each object in a label map and superimpose it on top of the feature image. - * - `LabelMapMaskImageFilter `_ + * - `LabelMapMaskImageFilter `_ - Mask and image with a LabelMap . - * - `LabelMapOverlayImageFilter `_ + * - `LabelMapOverlayImageFilter `_ - Apply a colormap to a label map and superimpose it on an image. - * - `LabelMapToBinaryImageFilter `_ + * - `LabelMapToBinaryImageFilter `_ - Convert a LabelMap to a binary image. - * - `LabelMapToLabelImageFilter `_ + * - `LabelMapToLabelImageFilter `_ - Converts a LabelMap to a labeled image. - * - `LabelMapToRGBImageFilter `_ + * - `LabelMapToRGBImageFilter `_ - Convert a LabelMap to a colored image. - * - `LabelOverlapMeasuresImageFilter `_ + * - `LabelOverlapMeasuresImageFilter `_ - Computes overlap measures between the set same set of labels of pixels of two images. Background is assumed to be 0. - * - `LabelOverlayImageFilter `_ + * - `LabelOverlayImageFilter `_ - Apply a colormap to a label image and put it on top of the input image. - * - `LabelSetDilateImageFilter `_ + * - `LabelSetDilateImageFilter `_ - Class for binary morphological erosion of label images. - * - `LabelSetErodeImageFilter `_ + * - `LabelSetErodeImageFilter `_ - Class for binary morphological erosion of label images. - * - `LabelShapeStatisticsImageFilter `_ + * - `LabelShapeStatisticsImageFilter `_ - Converts a label image to a label map and valuates the shape attributes. - * - `LabelStatisticsImageFilter `_ + * - `LabelStatisticsImageFilter `_ - Given an intensity image and a label map, compute min, max, variance and mean of the pixels associated with each label or segment. - * - `LabelToRGBImageFilter `_ + * - `LabelToRGBImageFilter `_ - Apply a colormap to a label image. - * - `LabelUniqueLabelMapFilter `_ + * - `LabelUniqueLabelMapFilter `_ - Make sure that the objects are not overlapping. - * - `LabelVotingImageFilter `_ + * - `LabelVotingImageFilter `_ - This filter performs pixelwise voting among an arbitrary number of input images, where each of them represents a segmentation of the same scene (i.e., image). - * - `LandweberDeconvolutionImageFilter `_ + * - `LandweberDeconvolutionImageFilter `_ - Deconvolve an image using the Landweber deconvolution algorithm. - * - `LaplacianImageFilter `_ + * - `LaplacianImageFilter `_ - - * - `LaplacianRecursiveGaussianImageFilter `_ + * - `LaplacianRecursiveGaussianImageFilter `_ - Computes the Laplacian of Gaussian (LoG) of an image. - * - `LaplacianSegmentationLevelSetImageFilter `_ + * - `LaplacianSegmentationLevelSetImageFilter `_ - Segments structures in images based on a second derivative image features. - * - `LaplacianSharpeningImageFilter `_ + * - `LaplacianSharpeningImageFilter `_ - This filter sharpens an image using a Laplacian. LaplacianSharpening highlights regions of rapid intensity change and therefore highlights or enhances the edges. The result is an image that appears more in focus. - * - `LessEqualImageFilter `_ + * - `LessEqualImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `LessImageFilter `_ + * - `LessImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `LevelSetMotionRegistrationFilter `_ + * - `LevelSetMotionRegistrationFilter `_ - Deformably register two images using level set motion. - * - `LiThresholdImageFilter `_ + * - `LiThresholdImageFilter `_ - Threshold an image using the Li Threshold. - * - `Log10ImageFilter `_ + * - `Log10ImageFilter `_ - Computes the log10 of each pixel. - * - `LogImageFilter `_ + * - `LogImageFilter `_ - Computes the log() of each pixel. - * - `MagnitudeAndPhaseToComplexImageFilter `_ + * - `MagnitudeAndPhaseToComplexImageFilter `_ - Implements pixel-wise conversion of magnitude and phase data into complex voxels. - * - `MaskImageFilter `_ + * - `MaskImageFilter `_ - Mask an image with a mask. - * - `MaskNegatedImageFilter `_ + * - `MaskNegatedImageFilter `_ - Mask an image with the negation (or logical compliment) of a mask. - * - `MaskedFFTNormalizedCorrelationImageFilter `_ + * - `MaskedFFTNormalizedCorrelationImageFilter `_ - Calculate masked normalized cross correlation using FFTs. - * - `MaximumEntropyThresholdImageFilter `_ + * - `MaximumEntropyThresholdImageFilter `_ - Threshold an image using the MaximumEntropy Threshold. - * - `MaximumImageFilter `_ + * - `MaximumImageFilter `_ - Implements a pixel-wise operator Max(a,b) between two images. - * - `MaximumProjectionImageFilter `_ + * - `MaximumProjectionImageFilter `_ - Maximum projection. - * - `MeanImageFilter `_ + * - `MeanImageFilter `_ - Applies an averaging filter to an image. - * - `MeanProjectionImageFilter `_ + * - `MeanProjectionImageFilter `_ - Mean projection. - * - `MedianImageFilter `_ + * - `MedianImageFilter `_ - Applies a median filter to an image. - * - `MedianProjectionImageFilter `_ + * - `MedianProjectionImageFilter `_ - Median projection. - * - `MergeLabelMapFilter `_ + * - `MergeLabelMapFilter `_ - Merges several Label Maps. - * - `MinMaxCurvatureFlowImageFilter `_ + * - `MinMaxCurvatureFlowImageFilter `_ - Denoise an image using min/max curvature flow. - * - `MinimumImageFilter `_ + * - `MinimumImageFilter `_ - Implements a pixel-wise operator Min(a,b) between two images. - * - `MinimumMaximumImageFilter `_ + * - `MinimumMaximumImageFilter `_ - Computes the minimum and the maximum intensity values of an image. - * - `MinimumProjectionImageFilter `_ + * - `MinimumProjectionImageFilter `_ - Minimum projection. - * - `MirrorPadImageFilter `_ + * - `MirrorPadImageFilter `_ - Increase the image size by padding with replicants of the input image value. - * - `ModulusImageFilter `_ + * - `ModulusImageFilter `_ - Computes the modulus (x % dividend) pixel-wise. - * - `MomentsThresholdImageFilter `_ + * - `MomentsThresholdImageFilter `_ - Threshold an image using the Moments Threshold. - * - `MorphologicalGradientImageFilter `_ + * - `MorphologicalGradientImageFilter `_ - gray scale dilation of an image - * - `MorphologicalWatershedFromMarkersImageFilter `_ + * - `MorphologicalWatershedFromMarkersImageFilter `_ - Morphological watershed transform from markers. - * - `MorphologicalWatershedImageFilter `_ + * - `MorphologicalWatershedImageFilter `_ - Watershed segmentation implementation with morphogical operators. - * - `MultiLabelSTAPLEImageFilter `_ + * - `MultiLabelSTAPLEImageFilter `_ - This filter performs a pixelwise combination of an arbitrary number of input images, where each of them represents a segmentation of the same scene (i.e., image). - * - `MultiplyImageFilter `_ + * - `MultiplyImageFilter `_ - Pixel-wise multiplication of two images. - * - `N4BiasFieldCorrectionImageFilter `_ + * - `N4BiasFieldCorrectionImageFilter `_ - Implementation of the N4 bias field correction algorithm. - * - `NaryAddImageFilter `_ + * - `NaryAddImageFilter `_ - Pixel-wise addition of N images. - * - `NaryMaximumImageFilter `_ + * - `NaryMaximumImageFilter `_ - Computes the pixel-wise maximum of several images. - * - `NeighborhoodConnectedImageFilter `_ + * - `NeighborhoodConnectedImageFilter `_ - Label pixels that are connected to a seed and lie within a neighborhood. - * - `NoiseImageFilter `_ + * - `NoiseImageFilter `_ - Calculate the local noise in an image. - * - `NormalizeImageFilter `_ + * - `NormalizeImageFilter `_ - Normalize an image by setting its mean to zero and variance to one. - * - `NormalizeToConstantImageFilter `_ + * - `NormalizeToConstantImageFilter `_ - Scales image pixel intensities to make the sum of all pixels equal a user-defined constant. - * - `NormalizedCorrelationImageFilter `_ + * - `NormalizedCorrelationImageFilter `_ - Computes the normalized correlation of an image and a template. - * - `NotEqualImageFilter `_ + * - `NotEqualImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `NotImageFilter `_ + * - `NotImageFilter `_ - Implements the NOT logical operator pixel-wise on an image. - * - `ObjectnessMeasureImageFilter `_ + * - `ObjectnessMeasureImageFilter `_ - Enhance M-dimensional objects in N-dimensional images. - * - `OpeningByReconstructionImageFilter `_ + * - `OpeningByReconstructionImageFilter `_ - Opening by reconstruction of an image. - * - `OrImageFilter `_ + * - `OrImageFilter `_ - Implements the OR bitwise operator pixel-wise between two images. - * - `OtsuMultipleThresholdsImageFilter `_ + * - `OtsuMultipleThresholdsImageFilter `_ - Threshold an image using multiple Otsu Thresholds. - * - `OtsuThresholdImageFilter `_ + * - `OtsuThresholdImageFilter `_ - Threshold an image using the Otsu Threshold. - * - `PasteImageFilter `_ + * - `PasteImageFilter `_ - Paste an image into another image. - * - `PatchBasedDenoisingImageFilter `_ + * - `PatchBasedDenoisingImageFilter `_ - Derived class implementing a specific patch-based denoising algorithm, as detailed below. - * - `PermuteAxesImageFilter `_ + * - `PermuteAxesImageFilter `_ - Permutes the image axes according to a user specified order. - * - `PhysicalPointImageSource `_ + * - `PhysicalPointImageSource `_ - Generate an image of the physical locations of each pixel. - * - `PowImageFilter `_ + * - `PowImageFilter `_ - Computes the powers of 2 images. - * - `ProjectedLandweberDeconvolutionImageFilter `_ + * - `ProjectedLandweberDeconvolutionImageFilter `_ - Deconvolve an image using the projected Landweber deconvolution algorithm. - * - `RankImageFilter `_ + * - `RankImageFilter `_ - Rank filter of a greyscale image. - * - `RealAndImaginaryToComplexImageFilter `_ + * - `RealAndImaginaryToComplexImageFilter `_ - ComposeImageFilter combine several scalar images into a multicomponent image. - * - `RealToHalfHermitianForwardFFTImageFilter `_ + * - `RealToHalfHermitianForwardFFTImageFilter `_ - Base class for specialized real-to-complex forward Fast Fourier Transform . - * - `ReconstructionByDilationImageFilter `_ + * - `ReconstructionByDilationImageFilter `_ - grayscale reconstruction by dilation of an image - * - `ReconstructionByErosionImageFilter `_ + * - `ReconstructionByErosionImageFilter `_ - grayscale reconstruction by erosion of an image - * - `RecursiveGaussianImageFilter `_ + * - `RecursiveGaussianImageFilter `_ - Base class for computing IIR convolution with an approximation of a Gaussian kernel. - * - `RegionOfInterestImageFilter `_ + * - `RegionOfInterestImageFilter `_ - Extract a region of interest from the input image. - * - `RegionalMaximaImageFilter `_ + * - `RegionalMaximaImageFilter `_ - Produce a binary image where foreground is the regional maxima of the input image. - * - `RegionalMinimaImageFilter `_ + * - `RegionalMinimaImageFilter `_ - Produce a binary image where foreground is the regional minima of the input image. - * - `RelabelComponentImageFilter `_ + * - `RelabelComponentImageFilter `_ - Relabel the components in an image such that consecutive labels are used. - * - `RelabelLabelMapFilter `_ + * - `RelabelLabelMapFilter `_ - This filter relabels the LabelObjects; the new labels are arranged consecutively with consideration for the background value. - * - `RenyiEntropyThresholdImageFilter `_ + * - `RenyiEntropyThresholdImageFilter `_ - Threshold an image using the RenyiEntropy Threshold. - * - `ResampleImageFilter `_ + * - `ResampleImageFilter `_ - Resample an image via a coordinate transform. - * - `RescaleIntensityImageFilter `_ + * - `RescaleIntensityImageFilter `_ - Applies a linear transformation to the intensity levels of the input Image . - * - `RichardsonLucyDeconvolutionImageFilter `_ + * - `RichardsonLucyDeconvolutionImageFilter `_ - Deconvolve an image using the Richardson-Lucy deconvolution algorithm. - * - `RoundImageFilter `_ + * - `RoundImageFilter `_ - Rounds the value of each pixel. - * - `SLICImageFilter `_ + * - `SLICImageFilter `_ - Simple Linear Iterative Clustering (SLIC) super-pixel segmentation. - * - `STAPLEImageFilter `_ + * - `STAPLEImageFilter `_ - The STAPLE filter implements the Simultaneous Truth and Performance Level Estimation algorithm for generating ground truth volumes from a set of binary expert segmentations. - * - `SaltAndPepperNoiseImageFilter `_ + * - `SaltAndPepperNoiseImageFilter `_ - Alter an image with fixed value impulse noise, often called salt and pepper noise. - * - `ScalarChanAndVeseDenseLevelSetImageFilter `_ + * - `ScalarChanAndVeseDenseLevelSetImageFilter `_ - Dense implementation of the Chan and Vese multiphase level set image filter. - * - `ScalarConnectedComponentImageFilter `_ + * - `ScalarConnectedComponentImageFilter `_ - A connected components filter that labels the objects in an arbitrary image. Two pixels are similar if they are within threshold of each other. Uses ConnectedComponentFunctorImageFilter . - * - `ScalarImageKmeansImageFilter `_ + * - `ScalarImageKmeansImageFilter `_ - Classifies the intensity values of a scalar image using the K-Means algorithm. - * - `ScalarToRGBColormapImageFilter `_ + * - `ScalarToRGBColormapImageFilter `_ - Implements pixel-wise intensity->rgb mapping operation on one image. - * - `ShanbhagThresholdImageFilter `_ + * - `ShanbhagThresholdImageFilter `_ - Threshold an image using the Shanbhag Threshold. - * - `ShapeDetectionLevelSetImageFilter `_ + * - `ShapeDetectionLevelSetImageFilter `_ - Segments structures in images based on a user supplied edge potential map. - * - `ShiftScaleImageFilter `_ + * - `ShiftScaleImageFilter `_ - Shift and scale the pixels in an image. - * - `ShotNoiseImageFilter `_ + * - `ShotNoiseImageFilter `_ - Alter an image with shot noise. - * - `ShrinkImageFilter `_ + * - `ShrinkImageFilter `_ - Reduce the size of an image by an integer factor in each dimension. - * - `SigmoidImageFilter `_ + * - `SigmoidImageFilter `_ - Computes the sigmoid function pixel-wise. - * - `SignedDanielssonDistanceMapImageFilter `_ + * - `SignedDanielssonDistanceMapImageFilter `_ - - * - `SignedMaurerDistanceMapImageFilter `_ + * - `SignedMaurerDistanceMapImageFilter `_ - This filter calculates the Euclidean distance transform of a binary image in linear time for arbitrary dimensions. - * - `SimilarityIndexImageFilter `_ + * - `SimilarityIndexImageFilter `_ - Measures the similarity between the set of non-zero pixels of two images. - * - `SimpleContourExtractorImageFilter `_ + * - `SimpleContourExtractorImageFilter `_ - Computes an image of contours which will be the contour of the first image. - * - `SinImageFilter `_ + * - `SinImageFilter `_ - Computes the sine of each pixel. - * - `SliceImageFilter `_ + * - `SliceImageFilter `_ - Slices an image based on a starting index and a stopping index, and a step size. - * - `SmoothingRecursiveGaussianImageFilter `_ + * - `SmoothingRecursiveGaussianImageFilter `_ - Computes the smoothing of an image by convolution with the Gaussian kernels implemented as IIR filters. - * - `SobelEdgeDetectionImageFilter `_ + * - `SobelEdgeDetectionImageFilter `_ - A 2D or 3D edge detection using the Sobel operator. - * - `SpeckleNoiseImageFilter `_ + * - `SpeckleNoiseImageFilter `_ - Alter an image with speckle (multiplicative) noise. - * - `SqrtImageFilter `_ + * - `SqrtImageFilter `_ - Computes the square root of each pixel. - * - `SquareImageFilter `_ + * - `SquareImageFilter `_ - Computes the square of the intensity values pixel-wise. - * - `SquaredDifferenceImageFilter `_ + * - `SquaredDifferenceImageFilter `_ - Implements pixel-wise the computation of squared difference. - * - `StandardDeviationProjectionImageFilter `_ + * - `StandardDeviationProjectionImageFilter `_ - Mean projection. - * - `StatisticsImageFilter `_ + * - `StatisticsImageFilter `_ - Compute min. max, variance and mean of an Image . - * - `StochasticFractalDimensionImageFilter `_ + * - `StochasticFractalDimensionImageFilter `_ - This filter computes the stochastic fractal dimension of the input image. - * - `SubtractImageFilter `_ + * - `SubtractImageFilter `_ - Pixel-wise subtraction of two images. - * - `SumProjectionImageFilter `_ + * - `SumProjectionImageFilter `_ - Sum projection. - * - `SymmetricForcesDemonsRegistrationFilter `_ + * - `SymmetricForcesDemonsRegistrationFilter `_ - Deformably register two images using the demons algorithm. - * - `TanImageFilter `_ + * - `TanImageFilter `_ - Computes the tangent of each input pixel. - * - `TernaryAddImageFilter `_ + * - `TernaryAddImageFilter `_ - Pixel-wise addition of three images. - * - `TernaryMagnitudeImageFilter `_ + * - `TernaryMagnitudeImageFilter `_ - Compute the pixel-wise magnitude of three images. - * - `TernaryMagnitudeSquaredImageFilter `_ + * - `TernaryMagnitudeSquaredImageFilter `_ - Compute the pixel-wise squared magnitude of three images. - * - `ThresholdImageFilter `_ + * - `ThresholdImageFilter `_ - Set image values to a user-specified value if they are below, above, or between simple threshold values. - * - `ThresholdMaximumConnectedComponentsImageFilter `_ + * - `ThresholdMaximumConnectedComponentsImageFilter `_ - Finds the threshold value of an image based on maximizing the number of objects in the image that are larger than a given minimal size. - * - `ThresholdSegmentationLevelSetImageFilter `_ + * - `ThresholdSegmentationLevelSetImageFilter `_ - Segments structures in images based on intensity values. - * - `TikhonovDeconvolutionImageFilter `_ + * - `TikhonovDeconvolutionImageFilter `_ - An inverse deconvolution filter regularized in the Tikhonov sense. - * - `TileImageFilter `_ + * - `TileImageFilter `_ - Tile multiple input images into a single output image. - * - `TobogganImageFilter `_ + * - `TobogganImageFilter `_ - toboggan image segmentation The Toboggan segmentation takes a gradient magnitude image as input and produces an (over-)segmentation of the image based on connecting each pixel to a local minimum of gradient. It is roughly equivalent to a watershed segmentation of the lowest level. - * - `TransformToDisplacementFieldFilter `_ + * - `TransformToDisplacementFieldFilter `_ - Generate a displacement field from a coordinate transform. - * - `TriangleThresholdImageFilter `_ + * - `TriangleThresholdImageFilter `_ - Threshold an image using the Triangle Threshold. - * - `UnaryMinusImageFilter `_ + * - `UnaryMinusImageFilter `_ - Implements pixel-wise generic operation on one image. - * - `UnsharpMaskImageFilter `_ + * - `UnsharpMaskImageFilter `_ - Edge enhancement filter. - * - `ValuedRegionalMaximaImageFilter `_ + * - `ValuedRegionalMaximaImageFilter `_ - Transforms the image so that any pixel that is not a regional maxima is set to the minimum value for the pixel type. Pixels that are regional maxima retain their value. - * - `ValuedRegionalMinimaImageFilter `_ + * - `ValuedRegionalMinimaImageFilter `_ - Transforms the image so that any pixel that is not a regional minima is set to the maximum value for the pixel type. Pixels that are regional minima retain their value. - * - `VectorConfidenceConnectedImageFilter `_ + * - `VectorConfidenceConnectedImageFilter `_ - Segment pixels with similar statistics using connectivity. - * - `VectorConnectedComponentImageFilter `_ + * - `VectorConnectedComponentImageFilter `_ - A connected components filter that labels the objects in a vector image. Two vectors are pointing similar directions if one minus their dot product is less than a threshold. Vectors that are 180 degrees out of phase are similar. Assumes that vectors are normalized. - * - `VectorIndexSelectionCastImageFilter `_ + * - `VectorIndexSelectionCastImageFilter `_ - Extracts the selected index of the vector that is the input pixel type. - * - `VectorMagnitudeImageFilter `_ + * - `VectorMagnitudeImageFilter `_ - Take an image of vectors as input and produce an image with the magnitude of those vectors. - * - `VotingBinaryHoleFillingImageFilter `_ + * - `VotingBinaryHoleFillingImageFilter `_ - Fills in holes and cavities by applying a voting operation on each pixel. - * - `VotingBinaryImageFilter `_ + * - `VotingBinaryImageFilter `_ - Applies a voting operation in a neighborhood of each pixel. - * - `VotingBinaryIterativeHoleFillingImageFilter `_ + * - `VotingBinaryIterativeHoleFillingImageFilter `_ - Fills in holes and cavities by iteratively applying a voting operation. - * - `WarpImageFilter `_ + * - `WarpImageFilter `_ - Warps an image using an input displacement field. - * - `WhiteTopHatImageFilter `_ + * - `WhiteTopHatImageFilter `_ - White top hat extracts local maxima that are larger than the structuring element. - * - `WienerDeconvolutionImageFilter `_ + * - `WienerDeconvolutionImageFilter `_ - The Wiener deconvolution image filter is designed to restore an image convolved with a blurring kernel while keeping noise enhancement to a minimum. - * - `WrapPadImageFilter `_ + * - `WrapPadImageFilter `_ - Increase the image size by padding with replicants of the input image value. - * - `XorImageFilter `_ + * - `XorImageFilter `_ - Computes the XOR bitwise operator pixel-wise between two images. - * - `YenThresholdImageFilter `_ + * - `YenThresholdImageFilter `_ - Threshold an image using the Yen Threshold. - * - `ZeroCrossingBasedEdgeDetectionImageFilter `_ + * - `ZeroCrossingBasedEdgeDetectionImageFilter `_ - This filter implements a zero-crossing based edge detecor. - * - `ZeroCrossingImageFilter `_ + * - `ZeroCrossingImageFilter `_ - This filter finds the closest pixel to the zero-crossings (sign changes) in a signed itk::Image . - * - `ZeroFluxNeumannPadImageFilter `_ + * - `ZeroFluxNeumannPadImageFilter `_ - Increase the image size by padding according to the zero-flux Neumann boundary condition. diff --git a/Utilities/JSON/JSONGenerateSphinxFiltersDoc.py b/Utilities/JSON/JSONGenerateSphinxFiltersDoc.py index 052adf22d..b813fd9fe 100755 --- a/Utilities/JSON/JSONGenerateSphinxFiltersDoc.py +++ b/Utilities/JSON/JSONGenerateSphinxFiltersDoc.py @@ -26,7 +26,7 @@ * - Filter Name\n - Brief Description''') -entryFormat = "\n * - `{0} `_\n - {2}" +entryFormat = "\n * - `{0} `_\n - {2}" json_list = [] for fname in sys.argv[1:]: with open( fname, "r" ) as fp: From 48da2825a44151ecb32c0530489186ebb1195b5c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 9 Jul 2019 17:34:46 -0400 Subject: [PATCH 145/400] Need to update before installing apt-get package --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8750fe02e..531a2537f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -255,6 +255,7 @@ jobs: - run: name: Prerequisite Dependencies command: | + sudo apt-get update -y sudo apt-get install -y python-pip - *dependencies - *env-step From 699c519bd39bc81e1c4591d86177ff0c45e1ca1e Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 12 Jul 2019 13:46:37 -0400 Subject: [PATCH 146/400] Update filter list URL from JSONGenerateSphinxFiltersDoc.py script --- Documentation/docs/source/filters.rst | 584 +++++++++++++------------- 1 file changed, 293 insertions(+), 291 deletions(-) diff --git a/Documentation/docs/source/filters.rst b/Documentation/docs/source/filters.rst index 5ca665d03..157e15520 100644 --- a/Documentation/docs/source/filters.rst +++ b/Documentation/docs/source/filters.rst @@ -10,585 +10,587 @@ SimpleITK Filters * - Filter Name - Brief Description - * - `AbsImageFilter `_ + * - `AbsImageFilter `_ - Computes the absolute value of each pixel. - * - `AbsoluteValueDifferenceImageFilter `_ + * - `AbsoluteValueDifferenceImageFilter `_ - Implements pixel-wise the computation of absolute value difference. - * - `AcosImageFilter `_ + * - `AcosImageFilter `_ - Computes the inverse cosine of each pixel. - * - `AdaptiveHistogramEqualizationImageFilter `_ + * - `AdaptiveHistogramEqualizationImageFilter `_ - Power Law Adaptive Histogram Equalization. - * - `AddImageFilter `_ + * - `AddImageFilter `_ - Pixel-wise addition of two images. - * - `AdditiveGaussianNoiseImageFilter `_ + * - `AdditiveGaussianNoiseImageFilter `_ - Alter an image with additive Gaussian white noise. - * - `AggregateLabelMapFilter `_ + * - `AggregateLabelMapFilter `_ - Collapses all labels into the first label. - * - `AndImageFilter `_ + * - `AndImageFilter `_ - Implements the AND bitwise operator pixel-wise between two images. - * - `AntiAliasBinaryImageFilter `_ + * - `AntiAliasBinaryImageFilter `_ - A method for estimation of a surface from a binary volume. - * - `ApproximateSignedDistanceMapImageFilter `_ + * - `ApproximateSignedDistanceMapImageFilter `_ - Create a map of the approximate signed distance from the boundaries of a binary image. - * - `AsinImageFilter `_ + * - `AsinImageFilter `_ - Computes the sine of each pixel. - * - `Atan2ImageFilter `_ + * - `Atan2ImageFilter `_ - Computes two argument inverse tangent. - * - `AtanImageFilter `_ + * - `AtanImageFilter `_ - Computes the one-argument inverse tangent of each pixel. - * - `BSplineDecompositionImageFilter `_ + * - `BSplineDecompositionImageFilter `_ - Calculates the B-Spline coefficients of an image. Spline order may be from 0 to 5. - * - `BilateralImageFilter `_ + * - `BilateralImageFilter `_ - Blurs an image while preserving edges. - * - `BinShrinkImageFilter `_ + * - `BinShrinkImageFilter `_ - Reduce the size of an image by an integer factor in each dimension while performing averaging of an input neighborhood. - * - `BinaryClosingByReconstructionImageFilter `_ + * - `BinaryClosingByReconstructionImageFilter `_ - binary closing by reconstruction of an image. - * - `BinaryContourImageFilter `_ + * - `BinaryContourImageFilter `_ - Labels the pixels on the border of the objects in a binary image. - * - `BinaryDilateImageFilter `_ + * - `BinaryDilateImageFilter `_ - Fast binary dilation. - * - `BinaryErodeImageFilter `_ + * - `BinaryErodeImageFilter `_ - Fast binary erosion. - * - `BinaryFillholeImageFilter `_ + * - `BinaryFillholeImageFilter `_ - Remove holes not connected to the boundary of the image. - * - `BinaryGrindPeakImageFilter `_ + * - `BinaryGrindPeakImageFilter `_ - Remove the objects not connected to the boundary of the image. - * - `BinaryImageToLabelMapFilter `_ + * - `BinaryImageToLabelMapFilter `_ - Label the connected components in a binary image and produce a collection of label objects. - * - `BinaryMagnitudeImageFilter `_ + * - `BinaryMagnitudeImageFilter `_ - Computes the square root of the sum of squares of corresponding input pixels. - * - `BinaryMedianImageFilter `_ + * - `BinaryMedianImageFilter `_ - Applies a version of the median filter optimized for binary images. - * - `BinaryMinMaxCurvatureFlowImageFilter `_ + * - `BinaryMinMaxCurvatureFlowImageFilter `_ - Denoise a binary image using min/max curvature flow. - * - `BinaryMorphologicalClosingImageFilter `_ + * - `BinaryMorphologicalClosingImageFilter `_ - binary morphological closing of an image. - * - `BinaryMorphologicalOpeningImageFilter `_ + * - `BinaryMorphologicalOpeningImageFilter `_ - binary morphological opening of an image. - * - `BinaryNotImageFilter `_ + * - `BinaryNotImageFilter `_ - Implements the BinaryNot logical operator pixel-wise between two images. - * - `BinaryOpeningByReconstructionImageFilter `_ + * - `BinaryOpeningByReconstructionImageFilter `_ - binary morphological closing of an image. - * - `BinaryProjectionImageFilter `_ + * - `BinaryProjectionImageFilter `_ - Binary projection. - * - `BinaryReconstructionByDilationImageFilter `_ + * - `BinaryReconstructionByDilationImageFilter `_ - binary reconstruction by dilation of an image - * - `BinaryReconstructionByErosionImageFilter `_ + * - `BinaryReconstructionByErosionImageFilter `_ - binary reconstruction by erosion of an image - * - `BinaryThinningImageFilter `_ + * - `BinaryThinningImageFilter `_ - This filter computes one-pixel-wide edges of the input image. - * - `BinaryThresholdImageFilter `_ + * - `BinaryThresholdImageFilter `_ - Binarize an input image by thresholding. - * - `BinaryThresholdProjectionImageFilter `_ + * - `BinaryThresholdProjectionImageFilter `_ - BinaryThreshold projection. - * - `BinomialBlurImageFilter `_ + * - `BinomialBlurImageFilter `_ - Performs a separable blur on each dimension of an image. - * - `BitwiseNotImageFilter `_ + * - `BitwiseNotImageFilter `_ - Implements pixel-wise generic operation on one image. - * - `BlackTopHatImageFilter `_ + * - `BlackTopHatImageFilter `_ - Black top hat extracts local minima that are smaller than the structuring element. - * - `BoundedReciprocalImageFilter `_ + * - `BoundedReciprocalImageFilter `_ - Computes 1/(1+x) for each pixel in the image. - * - `BoxMeanImageFilter `_ + * - `BoxMeanImageFilter `_ - Implements a fast rectangular mean filter using the accumulator approach. - * - `BoxSigmaImageFilter `_ + * - `BoxSigmaImageFilter `_ - Implements a fast rectangular sigma filter using the accumulator approach. - * - `CannyEdgeDetectionImageFilter `_ + * - `CannyEdgeDetectionImageFilter `_ - This filter is an implementation of a Canny edge detector for scalar-valued images. - * - `ChangeLabelImageFilter `_ + * - `CannySegmentationLevelSetImageFilter `_ + - Segments structures in images based on image features derived from pseudo-canny-edges. + * - `ChangeLabelImageFilter `_ - Change Sets of Labels. - * - `ChangeLabelLabelMapFilter `_ + * - `ChangeLabelLabelMapFilter `_ - Replace the label Ids of selected LabelObjects with new label Ids. - * - `CheckerBoardImageFilter `_ + * - `CheckerBoardImageFilter `_ - Combines two images in a checkerboard pattern. - * - `ClampImageFilter `_ + * - `ClampImageFilter `_ - Casts input pixels to output pixel type and clamps the output pixel values to a specified range. - * - `ClosingByReconstructionImageFilter `_ + * - `ClosingByReconstructionImageFilter `_ - Closing by reconstruction of an image. - * - `CoherenceEnhancingDiffusionImageFilter `_ + * - `CoherenceEnhancingDiffusionImageFilter `_ - Coherence enhancing diffusion and edge enhancing diffusion. - * - `CollidingFrontsImageFilter `_ + * - `CollidingFrontsImageFilter `_ - Selects a region of space where two independent fronts run towards each other. - * - `ComplexToImaginaryImageFilter `_ + * - `ComplexToImaginaryImageFilter `_ - Computes pixel-wise the imaginary part of a complex image. - * - `ComplexToModulusImageFilter `_ + * - `ComplexToModulusImageFilter `_ - Computes pixel-wise the Modulus of a complex image. - * - `ComplexToPhaseImageFilter `_ + * - `ComplexToPhaseImageFilter `_ - Computes pixel-wise the modulus of a complex image. - * - `ComplexToRealImageFilter `_ + * - `ComplexToRealImageFilter `_ - Computes pixel-wise the real(x) part of a complex image. - * - `ComposeImageFilter `_ + * - `ComposeImageFilter `_ - ComposeImageFilter combine several scalar images into a multicomponent image. - * - `ConfidenceConnectedImageFilter `_ + * - `ConfidenceConnectedImageFilter `_ - Segment pixels with similar statistics using connectivity. - * - `ConnectedComponentImageFilter `_ + * - `ConnectedComponentImageFilter `_ - Label the objects in a binary image. - * - `ConnectedThresholdImageFilter `_ + * - `ConnectedThresholdImageFilter `_ - Label pixels that are connected to a seed and lie within a range of values. - * - `ConstantPadImageFilter `_ + * - `ConstantPadImageFilter `_ - Increase the image size by padding with a constant value. - * - `ConvolutionImageFilter `_ + * - `ConvolutionImageFilter `_ - Convolve a given image with an arbitrary image kernel. - * - `CosImageFilter `_ + * - `CosImageFilter `_ - Computes the cosine of each pixel. - * - `CropImageFilter `_ + * - `CropImageFilter `_ - Decrease the image size by cropping the image by an itk::Size at both the upper and lower bounds of the largest possible region. - * - `CurvatureAnisotropicDiffusionImageFilter `_ + * - `CurvatureAnisotropicDiffusionImageFilter `_ - - * - `CurvatureFlowImageFilter `_ + * - `CurvatureFlowImageFilter `_ - Denoise an image using curvature driven flow. - * - `CyclicShiftImageFilter `_ + * - `CyclicShiftImageFilter `_ - Perform a cyclic spatial shift of image intensities on the image grid. - * - `DanielssonDistanceMapImageFilter `_ + * - `DanielssonDistanceMapImageFilter `_ - This filter computes the distance map of the input image as an approximation with pixel accuracy to the Euclidean distance. - * - `DemonsRegistrationFilter `_ + * - `DemonsRegistrationFilter `_ - Deformably register two images using the demons algorithm. - * - `DerivativeImageFilter `_ + * - `DerivativeImageFilter `_ - Computes the directional derivative of an image. The directional derivative at each pixel location is computed by convolution with a derivative operator of user-specified order. - * - `DiffeomorphicDemonsRegistrationFilter `_ + * - `DiffeomorphicDemonsRegistrationFilter `_ - Deformably register two images using a diffeomorphic demons algorithm. - * - `DilateObjectMorphologyImageFilter `_ + * - `DilateObjectMorphologyImageFilter `_ - dilation of an object in an image - * - `DiscreteGaussianDerivativeImageFilter `_ + * - `DiscreteGaussianDerivativeImageFilter `_ - Calculates image derivatives using discrete derivative gaussian kernels. This filter calculates Gaussian derivative by separable convolution of an image and a discrete Gaussian derivative operator (kernel). - * - `DiscreteGaussianImageFilter `_ + * - `DiscreteGaussianImageFilter `_ - Blurs an image by separable convolution with discrete gaussian kernels. This filter performs Gaussian blurring by separable convolution of an image and a discrete Gaussian operator (kernel). - * - `DisplacementFieldJacobianDeterminantFilter `_ + * - `DisplacementFieldJacobianDeterminantFilter `_ - Computes a scalar image from a vector image (e.g., deformation field) input, where each output scalar at each pixel is the Jacobian determinant of the vector field at that location. This calculation is correct in the case where the vector image is a "displacement" from the current location. The computation for the jacobian determinant is: det[ dT/dx ] = det[ I + du/dx ]. - * - `DivideFloorImageFilter `_ + * - `DivideFloorImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `DivideImageFilter `_ + * - `DivideImageFilter `_ - Pixel-wise division of two images. - * - `DivideRealImageFilter `_ + * - `DivideRealImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `DoubleThresholdImageFilter `_ + * - `DoubleThresholdImageFilter `_ - Binarize an input image using double thresholding. - * - `EdgePotentialImageFilter `_ + * - `EdgePotentialImageFilter `_ - Computes the edge potential of an image from the image gradient. - * - `EqualImageFilter `_ + * - `EqualImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `ErodeObjectMorphologyImageFilter `_ + * - `ErodeObjectMorphologyImageFilter `_ - Erosion of an object in an image. - * - `ExpImageFilter `_ + * - `ExpImageFilter `_ - Computes the exponential function of each pixel. - * - `ExpNegativeImageFilter `_ + * - `ExpNegativeImageFilter `_ - Computes the function exp(-K.x) for each input pixel. - * - `ExpandImageFilter `_ + * - `ExpandImageFilter `_ - Expand the size of an image by an integer factor in each dimension. - * - `ExtractImageFilter `_ + * - `ExtractImageFilter `_ - Decrease the image size by cropping the image to the selected region bounds. - * - `FFTConvolutionImageFilter `_ + * - `FFTConvolutionImageFilter `_ - Convolve a given image with an arbitrary image kernel using multiplication in the Fourier domain. - * - `FFTNormalizedCorrelationImageFilter `_ + * - `FFTNormalizedCorrelationImageFilter `_ - Calculate normalized cross correlation using FFTs. - * - `FFTPadImageFilter `_ + * - `FFTPadImageFilter `_ - Pad an image to make it suitable for an FFT transformation. - * - `FFTShiftImageFilter `_ + * - `FFTShiftImageFilter `_ - Shift the zero-frequency components of a Fourier transform to the center of the image. - * - `FastApproximateRankImageFilter `_ + * - `FastApproximateRankImageFilter `_ - A separable rank filter. - * - `FastMarchingBaseImageFilter `_ + * - `FastMarchingBaseImageFilter `_ - Apply the Fast Marching method to solve an Eikonal equation on an image. - * - `FastMarchingImageFilter `_ + * - `FastMarchingImageFilter `_ - Solve an Eikonal equation using Fast Marching. - * - `FastMarchingUpwindGradientImageFilter `_ + * - `FastMarchingUpwindGradientImageFilter `_ - Generates the upwind gradient field of fast marching arrival times. - * - `FastSymmetricForcesDemonsRegistrationFilter `_ + * - `FastSymmetricForcesDemonsRegistrationFilter `_ - Deformably register two images using a symmetric forces demons algorithm. - * - `FlipImageFilter `_ + * - `FlipImageFilter `_ - Flips an image across user specified axes. - * - `ForwardFFTImageFilter `_ + * - `ForwardFFTImageFilter `_ - Base class for forward Fast Fourier Transform . - * - `GaborImageSource `_ + * - `GaborImageSource `_ - Generate an n-dimensional image of a Gabor filter. - * - `GaussianImageSource `_ + * - `GaussianImageSource `_ - Generate an n-dimensional image of a Gaussian. - * - `GeodesicActiveContourLevelSetImageFilter `_ + * - `GeodesicActiveContourLevelSetImageFilter `_ - Segments structures in images based on a user supplied edge potential map. - * - `GradientAnisotropicDiffusionImageFilter `_ + * - `GradientAnisotropicDiffusionImageFilter `_ - - * - `GradientImageFilter `_ + * - `GradientImageFilter `_ - Computes the gradient of an image using directional derivatives. - * - `GradientMagnitudeImageFilter `_ + * - `GradientMagnitudeImageFilter `_ - Computes the gradient magnitude of an image region at each pixel. - * - `GradientMagnitudeRecursiveGaussianImageFilter `_ + * - `GradientMagnitudeRecursiveGaussianImageFilter `_ - Computes the Magnitude of the Gradient of an image by convolution with the first derivative of a Gaussian. - * - `GradientRecursiveGaussianImageFilter `_ + * - `GradientRecursiveGaussianImageFilter `_ - Computes the gradient of an image by convolution with the first derivative of a Gaussian. - * - `GrayscaleConnectedClosingImageFilter `_ + * - `GrayscaleConnectedClosingImageFilter `_ - Enhance pixels associated with a dark object (identified by a seed pixel) where the dark object is surrounded by a brighter object. - * - `GrayscaleConnectedOpeningImageFilter `_ + * - `GrayscaleConnectedOpeningImageFilter `_ - Enhance pixels associated with a bright object (identified by a seed pixel) where the bright object is surrounded by a darker object. - * - `GrayscaleDilateImageFilter `_ + * - `GrayscaleDilateImageFilter `_ - Grayscale dilation of an image. - * - `GrayscaleErodeImageFilter `_ + * - `GrayscaleErodeImageFilter `_ - Grayscale erosion of an image. - * - `GrayscaleFillholeImageFilter `_ + * - `GrayscaleFillholeImageFilter `_ - Remove local minima not connected to the boundary of the image. - * - `GrayscaleGeodesicDilateImageFilter `_ + * - `GrayscaleGeodesicDilateImageFilter `_ - geodesic gray scale dilation of an image - * - `GrayscaleGeodesicErodeImageFilter `_ + * - `GrayscaleGeodesicErodeImageFilter `_ - geodesic gray scale erosion of an image - * - `GrayscaleGrindPeakImageFilter `_ + * - `GrayscaleGrindPeakImageFilter `_ - Remove local maxima not connected to the boundary of the image. - * - `GrayscaleMorphologicalClosingImageFilter `_ + * - `GrayscaleMorphologicalClosingImageFilter `_ - gray scale dilation of an image - * - `GrayscaleMorphologicalOpeningImageFilter `_ + * - `GrayscaleMorphologicalOpeningImageFilter `_ - gray scale dilation of an image - * - `GreaterEqualImageFilter `_ + * - `GreaterEqualImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `GreaterImageFilter `_ + * - `GreaterImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `GridImageSource `_ + * - `GridImageSource `_ - Generate an n-dimensional image of a grid. - * - `HConcaveImageFilter `_ + * - `HConcaveImageFilter `_ - Identify local minima whose depth below the baseline is greater than h. - * - `HConvexImageFilter `_ + * - `HConvexImageFilter `_ - Identify local maxima whose height above the baseline is greater than h. - * - `HMaximaImageFilter `_ + * - `HMaximaImageFilter `_ - Suppress local maxima whose height above the baseline is less than h. - * - `HMinimaImageFilter `_ + * - `HMinimaImageFilter `_ - Suppress local minima whose depth below the baseline is less than h. - * - `HalfHermitianToRealInverseFFTImageFilter `_ + * - `HalfHermitianToRealInverseFFTImageFilter `_ - Base class for specialized complex-to-real inverse Fast Fourier Transform . - * - `HausdorffDistanceImageFilter `_ + * - `HausdorffDistanceImageFilter `_ - Computes the Hausdorff distance between the set of non-zero pixels of two images. - * - `HistogramMatchingImageFilter `_ + * - `HistogramMatchingImageFilter `_ - Normalize the grayscale values between two images by histogram matching. - * - `HuangThresholdImageFilter `_ + * - `HuangThresholdImageFilter `_ - Threshold an image using the Huang Threshold. - * - `IntensityWindowingImageFilter `_ + * - `IntensityWindowingImageFilter `_ - Applies a linear transformation to the intensity levels of the input Image that are inside a user-defined interval. Values below this interval are mapped to a constant. Values over the interval are mapped to another constant. - * - `IntermodesThresholdImageFilter `_ + * - `IntermodesThresholdImageFilter `_ - Threshold an image using the Intermodes Threshold. - * - `InverseDeconvolutionImageFilter `_ + * - `InverseDeconvolutionImageFilter `_ - The direct linear inverse deconvolution filter. - * - `InverseDisplacementFieldImageFilter `_ + * - `InverseDisplacementFieldImageFilter `_ - Computes the inverse of a displacement field. - * - `InverseFFTImageFilter `_ + * - `InverseFFTImageFilter `_ - Base class for inverse Fast Fourier Transform . - * - `InvertDisplacementFieldImageFilter `_ + * - `InvertDisplacementFieldImageFilter `_ - Iteratively estimate the inverse field of a displacement field. - * - `InvertIntensityImageFilter `_ + * - `InvertIntensityImageFilter `_ - Invert the intensity of an image. - * - `IsoContourDistanceImageFilter `_ + * - `IsoContourDistanceImageFilter `_ - Compute an approximate distance from an interpolated isocontour to the close grid points. - * - `IsoDataThresholdImageFilter `_ + * - `IsoDataThresholdImageFilter `_ - Threshold an image using the IsoData Threshold. - * - `IsolatedConnectedImageFilter `_ + * - `IsolatedConnectedImageFilter `_ - Label pixels that are connected to one set of seeds but not another. - * - `IsolatedWatershedImageFilter `_ + * - `IsolatedWatershedImageFilter `_ - Isolate watershed basins using two seeds. - * - `IterativeInverseDisplacementFieldImageFilter `_ + * - `IterativeInverseDisplacementFieldImageFilter `_ - Computes the inverse of a displacement field. - * - `JoinSeriesImageFilter `_ + * - `JoinSeriesImageFilter `_ - Join N-D images into an (N+1)-D image. - * - `KittlerIllingworthThresholdImageFilter `_ + * - `KittlerIllingworthThresholdImageFilter `_ - Threshold an image using the KittlerIllingworth Threshold. - * - `LabelContourImageFilter `_ + * - `LabelContourImageFilter `_ - Labels the pixels on the border of the objects in a labeled image. - * - `LabelImageToLabelMapFilter `_ + * - `LabelImageToLabelMapFilter `_ - convert a labeled image to a label collection image - * - `LabelIntensityStatisticsImageFilter `_ + * - `LabelIntensityStatisticsImageFilter `_ - a convenient class to convert a label image to a label map and valuate the statistics attributes at once - * - `LabelMapContourOverlayImageFilter `_ + * - `LabelMapContourOverlayImageFilter `_ - Apply a colormap to the contours (outlines) of each object in a label map and superimpose it on top of the feature image. - * - `LabelMapMaskImageFilter `_ + * - `LabelMapMaskImageFilter `_ - Mask and image with a LabelMap . - * - `LabelMapOverlayImageFilter `_ + * - `LabelMapOverlayImageFilter `_ - Apply a colormap to a label map and superimpose it on an image. - * - `LabelMapToBinaryImageFilter `_ + * - `LabelMapToBinaryImageFilter `_ - Convert a LabelMap to a binary image. - * - `LabelMapToLabelImageFilter `_ + * - `LabelMapToLabelImageFilter `_ - Converts a LabelMap to a labeled image. - * - `LabelMapToRGBImageFilter `_ + * - `LabelMapToRGBImageFilter `_ - Convert a LabelMap to a colored image. - * - `LabelOverlapMeasuresImageFilter `_ + * - `LabelOverlapMeasuresImageFilter `_ - Computes overlap measures between the set same set of labels of pixels of two images. Background is assumed to be 0. - * - `LabelOverlayImageFilter `_ + * - `LabelOverlayImageFilter `_ - Apply a colormap to a label image and put it on top of the input image. - * - `LabelSetDilateImageFilter `_ + * - `LabelSetDilateImageFilter `_ - Class for binary morphological erosion of label images. - * - `LabelSetErodeImageFilter `_ + * - `LabelSetErodeImageFilter `_ - Class for binary morphological erosion of label images. - * - `LabelShapeStatisticsImageFilter `_ + * - `LabelShapeStatisticsImageFilter `_ - Converts a label image to a label map and valuates the shape attributes. - * - `LabelStatisticsImageFilter `_ + * - `LabelStatisticsImageFilter `_ - Given an intensity image and a label map, compute min, max, variance and mean of the pixels associated with each label or segment. - * - `LabelToRGBImageFilter `_ + * - `LabelToRGBImageFilter `_ - Apply a colormap to a label image. - * - `LabelUniqueLabelMapFilter `_ + * - `LabelUniqueLabelMapFilter `_ - Make sure that the objects are not overlapping. - * - `LabelVotingImageFilter `_ + * - `LabelVotingImageFilter `_ - This filter performs pixelwise voting among an arbitrary number of input images, where each of them represents a segmentation of the same scene (i.e., image). - * - `LandweberDeconvolutionImageFilter `_ + * - `LandweberDeconvolutionImageFilter `_ - Deconvolve an image using the Landweber deconvolution algorithm. - * - `LaplacianImageFilter `_ + * - `LaplacianImageFilter `_ - - * - `LaplacianRecursiveGaussianImageFilter `_ + * - `LaplacianRecursiveGaussianImageFilter `_ - Computes the Laplacian of Gaussian (LoG) of an image. - * - `LaplacianSegmentationLevelSetImageFilter `_ + * - `LaplacianSegmentationLevelSetImageFilter `_ - Segments structures in images based on a second derivative image features. - * - `LaplacianSharpeningImageFilter `_ + * - `LaplacianSharpeningImageFilter `_ - This filter sharpens an image using a Laplacian. LaplacianSharpening highlights regions of rapid intensity change and therefore highlights or enhances the edges. The result is an image that appears more in focus. - * - `LessEqualImageFilter `_ + * - `LessEqualImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `LessImageFilter `_ + * - `LessImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `LevelSetMotionRegistrationFilter `_ + * - `LevelSetMotionRegistrationFilter `_ - Deformably register two images using level set motion. - * - `LiThresholdImageFilter `_ + * - `LiThresholdImageFilter `_ - Threshold an image using the Li Threshold. - * - `Log10ImageFilter `_ + * - `Log10ImageFilter `_ - Computes the log10 of each pixel. - * - `LogImageFilter `_ + * - `LogImageFilter `_ - Computes the log() of each pixel. - * - `MagnitudeAndPhaseToComplexImageFilter `_ + * - `MagnitudeAndPhaseToComplexImageFilter `_ - Implements pixel-wise conversion of magnitude and phase data into complex voxels. - * - `MaskImageFilter `_ + * - `MaskImageFilter `_ - Mask an image with a mask. - * - `MaskNegatedImageFilter `_ + * - `MaskNegatedImageFilter `_ - Mask an image with the negation (or logical compliment) of a mask. - * - `MaskedFFTNormalizedCorrelationImageFilter `_ + * - `MaskedFFTNormalizedCorrelationImageFilter `_ - Calculate masked normalized cross correlation using FFTs. - * - `MaximumEntropyThresholdImageFilter `_ + * - `MaximumEntropyThresholdImageFilter `_ - Threshold an image using the MaximumEntropy Threshold. - * - `MaximumImageFilter `_ + * - `MaximumImageFilter `_ - Implements a pixel-wise operator Max(a,b) between two images. - * - `MaximumProjectionImageFilter `_ + * - `MaximumProjectionImageFilter `_ - Maximum projection. - * - `MeanImageFilter `_ + * - `MeanImageFilter `_ - Applies an averaging filter to an image. - * - `MeanProjectionImageFilter `_ + * - `MeanProjectionImageFilter `_ - Mean projection. - * - `MedianImageFilter `_ + * - `MedianImageFilter `_ - Applies a median filter to an image. - * - `MedianProjectionImageFilter `_ + * - `MedianProjectionImageFilter `_ - Median projection. - * - `MergeLabelMapFilter `_ + * - `MergeLabelMapFilter `_ - Merges several Label Maps. - * - `MinMaxCurvatureFlowImageFilter `_ + * - `MinMaxCurvatureFlowImageFilter `_ - Denoise an image using min/max curvature flow. - * - `MinimumImageFilter `_ + * - `MinimumImageFilter `_ - Implements a pixel-wise operator Min(a,b) between two images. - * - `MinimumMaximumImageFilter `_ + * - `MinimumMaximumImageFilter `_ - Computes the minimum and the maximum intensity values of an image. - * - `MinimumProjectionImageFilter `_ + * - `MinimumProjectionImageFilter `_ - Minimum projection. - * - `MirrorPadImageFilter `_ + * - `MirrorPadImageFilter `_ - Increase the image size by padding with replicants of the input image value. - * - `ModulusImageFilter `_ + * - `ModulusImageFilter `_ - Computes the modulus (x % dividend) pixel-wise. - * - `MomentsThresholdImageFilter `_ + * - `MomentsThresholdImageFilter `_ - Threshold an image using the Moments Threshold. - * - `MorphologicalGradientImageFilter `_ + * - `MorphologicalGradientImageFilter `_ - gray scale dilation of an image - * - `MorphologicalWatershedFromMarkersImageFilter `_ + * - `MorphologicalWatershedFromMarkersImageFilter `_ - Morphological watershed transform from markers. - * - `MorphologicalWatershedImageFilter `_ + * - `MorphologicalWatershedImageFilter `_ - Watershed segmentation implementation with morphological operators. - * - `MultiLabelSTAPLEImageFilter `_ + * - `MultiLabelSTAPLEImageFilter `_ - This filter performs a pixelwise combination of an arbitrary number of input images, where each of them represents a segmentation of the same scene (i.e., image). - * - `MultiplyImageFilter `_ + * - `MultiplyImageFilter `_ - Pixel-wise multiplication of two images. - * - `N4BiasFieldCorrectionImageFilter `_ + * - `N4BiasFieldCorrectionImageFilter `_ - Implementation of the N4 bias field correction algorithm. - * - `NaryAddImageFilter `_ + * - `NaryAddImageFilter `_ - Pixel-wise addition of N images. - * - `NaryMaximumImageFilter `_ + * - `NaryMaximumImageFilter `_ - Computes the pixel-wise maximum of several images. - * - `NeighborhoodConnectedImageFilter `_ + * - `NeighborhoodConnectedImageFilter `_ - Label pixels that are connected to a seed and lie within a neighborhood. - * - `NoiseImageFilter `_ + * - `NoiseImageFilter `_ - Calculate the local noise in an image. - * - `NormalizeImageFilter `_ + * - `NormalizeImageFilter `_ - Normalize an image by setting its mean to zero and variance to one. - * - `NormalizeToConstantImageFilter `_ + * - `NormalizeToConstantImageFilter `_ - Scales image pixel intensities to make the sum of all pixels equal a user-defined constant. - * - `NormalizedCorrelationImageFilter `_ + * - `NormalizedCorrelationImageFilter `_ - Computes the normalized correlation of an image and a template. - * - `NotEqualImageFilter `_ + * - `NotEqualImageFilter `_ - Implements pixel-wise generic operation of two images, or of an image and a constant. - * - `NotImageFilter `_ + * - `NotImageFilter `_ - Implements the NOT logical operator pixel-wise on an image. - * - `ObjectnessMeasureImageFilter `_ + * - `ObjectnessMeasureImageFilter `_ - Enhance M-dimensional objects in N-dimensional images. - * - `OpeningByReconstructionImageFilter `_ + * - `OpeningByReconstructionImageFilter `_ - Opening by reconstruction of an image. - * - `OrImageFilter `_ + * - `OrImageFilter `_ - Implements the OR bitwise operator pixel-wise between two images. - * - `OtsuMultipleThresholdsImageFilter `_ + * - `OtsuMultipleThresholdsImageFilter `_ - Threshold an image using multiple Otsu Thresholds. - * - `OtsuThresholdImageFilter `_ + * - `OtsuThresholdImageFilter `_ - Threshold an image using the Otsu Threshold. - * - `PasteImageFilter `_ + * - `PasteImageFilter `_ - Paste an image into another image. - * - `PatchBasedDenoisingImageFilter `_ + * - `PatchBasedDenoisingImageFilter `_ - Derived class implementing a specific patch-based denoising algorithm, as detailed below. - * - `PermuteAxesImageFilter `_ + * - `PermuteAxesImageFilter `_ - Permutes the image axes according to a user specified order. - * - `PhysicalPointImageSource `_ + * - `PhysicalPointImageSource `_ - Generate an image of the physical locations of each pixel. - * - `PowImageFilter `_ + * - `PowImageFilter `_ - Computes the powers of 2 images. - * - `ProjectedLandweberDeconvolutionImageFilter `_ + * - `ProjectedLandweberDeconvolutionImageFilter `_ - Deconvolve an image using the projected Landweber deconvolution algorithm. - * - `RankImageFilter `_ + * - `RankImageFilter `_ - Rank filter of a greyscale image. - * - `RealAndImaginaryToComplexImageFilter `_ + * - `RealAndImaginaryToComplexImageFilter `_ - ComposeImageFilter combine several scalar images into a multicomponent image. - * - `RealToHalfHermitianForwardFFTImageFilter `_ + * - `RealToHalfHermitianForwardFFTImageFilter `_ - Base class for specialized real-to-complex forward Fast Fourier Transform . - * - `ReconstructionByDilationImageFilter `_ + * - `ReconstructionByDilationImageFilter `_ - grayscale reconstruction by dilation of an image - * - `ReconstructionByErosionImageFilter `_ + * - `ReconstructionByErosionImageFilter `_ - grayscale reconstruction by erosion of an image - * - `RecursiveGaussianImageFilter `_ + * - `RecursiveGaussianImageFilter `_ - Base class for computing IIR convolution with an approximation of a Gaussian kernel. - * - `RegionOfInterestImageFilter `_ + * - `RegionOfInterestImageFilter `_ - Extract a region of interest from the input image. - * - `RegionalMaximaImageFilter `_ + * - `RegionalMaximaImageFilter `_ - Produce a binary image where foreground is the regional maxima of the input image. - * - `RegionalMinimaImageFilter `_ + * - `RegionalMinimaImageFilter `_ - Produce a binary image where foreground is the regional minima of the input image. - * - `RelabelComponentImageFilter `_ + * - `RelabelComponentImageFilter `_ - Relabel the components in an image such that consecutive labels are used. - * - `RelabelLabelMapFilter `_ + * - `RelabelLabelMapFilter `_ - This filter relabels the LabelObjects; the new labels are arranged consecutively with consideration for the background value. - * - `RenyiEntropyThresholdImageFilter `_ + * - `RenyiEntropyThresholdImageFilter `_ - Threshold an image using the RenyiEntropy Threshold. - * - `ResampleImageFilter `_ + * - `ResampleImageFilter `_ - Resample an image via a coordinate transform. - * - `RescaleIntensityImageFilter `_ + * - `RescaleIntensityImageFilter `_ - Applies a linear transformation to the intensity levels of the input Image . - * - `RichardsonLucyDeconvolutionImageFilter `_ + * - `RichardsonLucyDeconvolutionImageFilter `_ - Deconvolve an image using the Richardson-Lucy deconvolution algorithm. - * - `RoundImageFilter `_ + * - `RoundImageFilter `_ - Rounds the value of each pixel. - * - `SLICImageFilter `_ + * - `SLICImageFilter `_ - Simple Linear Iterative Clustering (SLIC) super-pixel segmentation. - * - `STAPLEImageFilter `_ + * - `STAPLEImageFilter `_ - The STAPLE filter implements the Simultaneous Truth and Performance Level Estimation algorithm for generating ground truth volumes from a set of binary expert segmentations. - * - `SaltAndPepperNoiseImageFilter `_ + * - `SaltAndPepperNoiseImageFilter `_ - Alter an image with fixed value impulse noise, often called salt and pepper noise. - * - `ScalarChanAndVeseDenseLevelSetImageFilter `_ + * - `ScalarChanAndVeseDenseLevelSetImageFilter `_ - Dense implementation of the Chan and Vese multiphase level set image filter. - * - `ScalarConnectedComponentImageFilter `_ + * - `ScalarConnectedComponentImageFilter `_ - A connected components filter that labels the objects in an arbitrary image. Two pixels are similar if they are within threshold of each other. Uses ConnectedComponentFunctorImageFilter . - * - `ScalarImageKmeansImageFilter `_ + * - `ScalarImageKmeansImageFilter `_ - Classifies the intensity values of a scalar image using the K-Means algorithm. - * - `ScalarToRGBColormapImageFilter `_ + * - `ScalarToRGBColormapImageFilter `_ - Implements pixel-wise intensity->rgb mapping operation on one image. - * - `ShanbhagThresholdImageFilter `_ + * - `ShanbhagThresholdImageFilter `_ - Threshold an image using the Shanbhag Threshold. - * - `ShapeDetectionLevelSetImageFilter `_ + * - `ShapeDetectionLevelSetImageFilter `_ - Segments structures in images based on a user supplied edge potential map. - * - `ShiftScaleImageFilter `_ + * - `ShiftScaleImageFilter `_ - Shift and scale the pixels in an image. - * - `ShotNoiseImageFilter `_ + * - `ShotNoiseImageFilter `_ - Alter an image with shot noise. - * - `ShrinkImageFilter `_ + * - `ShrinkImageFilter `_ - Reduce the size of an image by an integer factor in each dimension. - * - `SigmoidImageFilter `_ + * - `SigmoidImageFilter `_ - Computes the sigmoid function pixel-wise. - * - `SignedDanielssonDistanceMapImageFilter `_ + * - `SignedDanielssonDistanceMapImageFilter `_ - - * - `SignedMaurerDistanceMapImageFilter `_ + * - `SignedMaurerDistanceMapImageFilter `_ - This filter calculates the Euclidean distance transform of a binary image in linear time for arbitrary dimensions. - * - `SimilarityIndexImageFilter `_ + * - `SimilarityIndexImageFilter `_ - Measures the similarity between the set of non-zero pixels of two images. - * - `SimpleContourExtractorImageFilter `_ + * - `SimpleContourExtractorImageFilter `_ - Computes an image of contours which will be the contour of the first image. - * - `SinImageFilter `_ + * - `SinImageFilter `_ - Computes the sine of each pixel. - * - `SliceImageFilter `_ + * - `SliceImageFilter `_ - Slices an image based on a starting index and a stopping index, and a step size. - * - `SmoothingRecursiveGaussianImageFilter `_ + * - `SmoothingRecursiveGaussianImageFilter `_ - Computes the smoothing of an image by convolution with the Gaussian kernels implemented as IIR filters. - * - `SobelEdgeDetectionImageFilter `_ + * - `SobelEdgeDetectionImageFilter `_ - A 2D or 3D edge detection using the Sobel operator. - * - `SpeckleNoiseImageFilter `_ + * - `SpeckleNoiseImageFilter `_ - Alter an image with speckle (multiplicative) noise. - * - `SqrtImageFilter `_ + * - `SqrtImageFilter `_ - Computes the square root of each pixel. - * - `SquareImageFilter `_ + * - `SquareImageFilter `_ - Computes the square of the intensity values pixel-wise. - * - `SquaredDifferenceImageFilter `_ + * - `SquaredDifferenceImageFilter `_ - Implements pixel-wise the computation of squared difference. - * - `StandardDeviationProjectionImageFilter `_ + * - `StandardDeviationProjectionImageFilter `_ - Mean projection. - * - `StatisticsImageFilter `_ + * - `StatisticsImageFilter `_ - Compute min. max, variance and mean of an Image . - * - `StochasticFractalDimensionImageFilter `_ + * - `StochasticFractalDimensionImageFilter `_ - This filter computes the stochastic fractal dimension of the input image. - * - `SubtractImageFilter `_ + * - `SubtractImageFilter `_ - Pixel-wise subtraction of two images. - * - `SumProjectionImageFilter `_ + * - `SumProjectionImageFilter `_ - Sum projection. - * - `SymmetricForcesDemonsRegistrationFilter `_ + * - `SymmetricForcesDemonsRegistrationFilter `_ - Deformably register two images using the demons algorithm. - * - `TanImageFilter `_ + * - `TanImageFilter `_ - Computes the tangent of each input pixel. - * - `TernaryAddImageFilter `_ + * - `TernaryAddImageFilter `_ - Pixel-wise addition of three images. - * - `TernaryMagnitudeImageFilter `_ + * - `TernaryMagnitudeImageFilter `_ - Compute the pixel-wise magnitude of three images. - * - `TernaryMagnitudeSquaredImageFilter `_ + * - `TernaryMagnitudeSquaredImageFilter `_ - Compute the pixel-wise squared magnitude of three images. - * - `ThresholdImageFilter `_ + * - `ThresholdImageFilter `_ - Set image values to a user-specified value if they are below, above, or between simple threshold values. - * - `ThresholdMaximumConnectedComponentsImageFilter `_ + * - `ThresholdMaximumConnectedComponentsImageFilter `_ - Finds the threshold value of an image based on maximizing the number of objects in the image that are larger than a given minimal size. - * - `ThresholdSegmentationLevelSetImageFilter `_ + * - `ThresholdSegmentationLevelSetImageFilter `_ - Segments structures in images based on intensity values. - * - `TikhonovDeconvolutionImageFilter `_ + * - `TikhonovDeconvolutionImageFilter `_ - An inverse deconvolution filter regularized in the Tikhonov sense. - * - `TileImageFilter `_ + * - `TileImageFilter `_ - Tile multiple input images into a single output image. - * - `TobogganImageFilter `_ + * - `TobogganImageFilter `_ - toboggan image segmentation The Toboggan segmentation takes a gradient magnitude image as input and produces an (over-)segmentation of the image based on connecting each pixel to a local minimum of gradient. It is roughly equivalent to a watershed segmentation of the lowest level. - * - `TransformToDisplacementFieldFilter `_ + * - `TransformToDisplacementFieldFilter `_ - Generate a displacement field from a coordinate transform. - * - `TriangleThresholdImageFilter `_ + * - `TriangleThresholdImageFilter `_ - Threshold an image using the Triangle Threshold. - * - `UnaryMinusImageFilter `_ + * - `UnaryMinusImageFilter `_ - Implements pixel-wise generic operation on one image. - * - `UnsharpMaskImageFilter `_ + * - `UnsharpMaskImageFilter `_ - Edge enhancement filter. - * - `ValuedRegionalMaximaImageFilter `_ + * - `ValuedRegionalMaximaImageFilter `_ - Transforms the image so that any pixel that is not a regional maxima is set to the minimum value for the pixel type. Pixels that are regional maxima retain their value. - * - `ValuedRegionalMinimaImageFilter `_ + * - `ValuedRegionalMinimaImageFilter `_ - Transforms the image so that any pixel that is not a regional minima is set to the maximum value for the pixel type. Pixels that are regional minima retain their value. - * - `VectorConfidenceConnectedImageFilter `_ + * - `VectorConfidenceConnectedImageFilter `_ - Segment pixels with similar statistics using connectivity. - * - `VectorConnectedComponentImageFilter `_ + * - `VectorConnectedComponentImageFilter `_ - A connected components filter that labels the objects in a vector image. Two vectors are pointing similar directions if one minus their dot product is less than a threshold. Vectors that are 180 degrees out of phase are similar. Assumes that vectors are normalized. - * - `VectorIndexSelectionCastImageFilter `_ + * - `VectorIndexSelectionCastImageFilter `_ - Extracts the selected index of the vector that is the input pixel type. - * - `VectorMagnitudeImageFilter `_ + * - `VectorMagnitudeImageFilter `_ - Take an image of vectors as input and produce an image with the magnitude of those vectors. - * - `VotingBinaryHoleFillingImageFilter `_ + * - `VotingBinaryHoleFillingImageFilter `_ - Fills in holes and cavities by applying a voting operation on each pixel. - * - `VotingBinaryImageFilter `_ + * - `VotingBinaryImageFilter `_ - Applies a voting operation in a neighborhood of each pixel. - * - `VotingBinaryIterativeHoleFillingImageFilter `_ + * - `VotingBinaryIterativeHoleFillingImageFilter `_ - Fills in holes and cavities by iteratively applying a voting operation. - * - `WarpImageFilter `_ + * - `WarpImageFilter `_ - Warps an image using an input displacement field. - * - `WhiteTopHatImageFilter `_ + * - `WhiteTopHatImageFilter `_ - White top hat extracts local maxima that are larger than the structuring element. - * - `WienerDeconvolutionImageFilter `_ + * - `WienerDeconvolutionImageFilter `_ - The Wiener deconvolution image filter is designed to restore an image convolved with a blurring kernel while keeping noise enhancement to a minimum. - * - `WrapPadImageFilter `_ + * - `WrapPadImageFilter `_ - Increase the image size by padding with replicants of the input image value. - * - `XorImageFilter `_ + * - `XorImageFilter `_ - Computes the XOR bitwise operator pixel-wise between two images. - * - `YenThresholdImageFilter `_ + * - `YenThresholdImageFilter `_ - Threshold an image using the Yen Threshold. - * - `ZeroCrossingBasedEdgeDetectionImageFilter `_ + * - `ZeroCrossingBasedEdgeDetectionImageFilter `_ - This filter implements a zero-crossing based edge detecor. - * - `ZeroCrossingImageFilter `_ + * - `ZeroCrossingImageFilter `_ - This filter finds the closest pixel to the zero-crossings (sign changes) in a signed itk::Image . - * - `ZeroFluxNeumannPadImageFilter `_ + * - `ZeroFluxNeumannPadImageFilter `_ - Increase the image size by padding according to the zero-flux Neumann boundary condition. From df4a27bf68f6312011e77107b3a7928da5303f3f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 12 Jul 2019 14:56:21 -0400 Subject: [PATCH 147/400] Another correction to proper sitk Doxygen on script --- Utilities/JSON/JSONGenerateSphinxFiltersDoc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utilities/JSON/JSONGenerateSphinxFiltersDoc.py b/Utilities/JSON/JSONGenerateSphinxFiltersDoc.py index 052adf22d..b813fd9fe 100755 --- a/Utilities/JSON/JSONGenerateSphinxFiltersDoc.py +++ b/Utilities/JSON/JSONGenerateSphinxFiltersDoc.py @@ -26,7 +26,7 @@ * - Filter Name\n - Brief Description''') -entryFormat = "\n * - `{0} `_\n - {2}" +entryFormat = "\n * - `{0} `_\n - {2}" json_list = [] for fname in sys.argv[1:]: with open( fname, "r" ) as fp: From bfd0ed8d7d2d06ec1dea5f7a28852de13bfbdb79 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 12 Jul 2019 15:30:40 -0400 Subject: [PATCH 148/400] Update Readme from master --- Readme.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Readme.md b/Readme.md index c90d7f32d..c05816d2d 100644 --- a/Readme.md +++ b/Readme.md @@ -1,11 +1,10 @@ SimpleITK ========= -| | CircleCI | ReadTheDocs | -|:-------:|:---------:|:-------------:| -| release | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=release)](http://simpleitk.readthedocs.io/en/release/) | -| master | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=master)](http://simpleitk.readthedocs.io/en/master/) | -| next | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/next.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/next) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=next)](http://simpleitk.readthedocs.io/en/next/) | +| | CircleCI | ReadTheDocs | AzurePipelines | +|:-------:|:---------:|:-------------:|:-------------:| +| release | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=release)](http://simpleitk.readthedocs.io/en/release/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=release)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=release) | +| master | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=master)](http://simpleitk.readthedocs.io/en/master/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=release)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=release) | SimpleITK is an image analysis toolkit with a large number of components supporting general filtering operations, image segmentation and registration. It is built on top of the Insight Segmentation and Registration Toolkit [ITK](https://www.itk.org) with the intent of providing a simplified interface to ITK. SimpleITK itself is written in C++ but is available for a large number of programming languages. Currently these include: @@ -42,7 +41,7 @@ Documentation ------------- With massive libraries like SimpleITK, good documentation is a must. The documentation for SimpleITK is split up into multiple levels: 1. [API Documentation](https://itk.org/SimpleITKDoxygen/html/) - This contains class and function documentation. The descriptions for functions and classes are primarily borrowed from the original ITK C++ classes. -2. [SimpleITK Documentation](http://simpleitk.readthedocs.io/en/next/) - This site contains high-level guides (fundamental SimpleITK concepts, common conventions, etc.), details with respect to the toolkit's binary distributions, instructions for building the toolkit, as well as SimpleITK examples in all supported programming languages. [This site replaced the +2. [SimpleITK Documentation](http://simpleitk.readthedocs.io/en/master/) - This site contains high-level guides (fundamental SimpleITK concepts, common conventions, etc.), details with respect to the toolkit's binary distributions, instructions for building the toolkit, as well as SimpleITK examples in all supported programming languages. [This site replaced the [SimpleITK Wiki](https://itk.org/Wiki/SimpleITK) which is mostly of interest for historical reasons.] 3. [Juypyter Notebook Repository](http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/) - This repository contains a collection of Jupyter Notebooks illustrating the use of SimpleITK for educational and research activities. The notebooks demonstrate the use of SimpleITK for interactive image analysis using the Python and R programming languages. Recommended reading, if you are starting with SimpleITK. From a8ac87c9c74e982b56e42b8e374500846df32296 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 17 Jul 2019 11:26:14 -0400 Subject: [PATCH 149/400] Add URL_HASH to external projects Update the function used to download source code via CMake's ExternalData to also produce a hash variable, then used it in the external project calls. This addresses warning produce by CMake that the URL_HASH is missing. --- SuperBuild/External_Lua.cmake | 1 + SuperBuild/External_PCRE.cmake | 1 + SuperBuild/External_Swig.cmake | 2 ++ SuperBuild/External_virtualenv.cmake | 1 + SuperBuild/SuperBuild.cmake | 13 ++++++++----- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/SuperBuild/External_Lua.cmake b/SuperBuild/External_Lua.cmake index 7757b811b..30068d152 100644 --- a/SuperBuild/External_Lua.cmake +++ b/SuperBuild/External_Lua.cmake @@ -25,6 +25,7 @@ set(lua_PATCH_COMMAND ${CMAKE_COMMAND} -E copy_if_different ExternalProject_Add(Lua URL "${lua_URL}" + URL_HASH "${lua_URL_HASH}" PATCH_COMMAND ${lua_PATCH_COMMAND} CMAKE_GENERATOR ${gen} CMAKE_ARGS diff --git a/SuperBuild/External_PCRE.cmake b/SuperBuild/External_PCRE.cmake index bbfbd33ec..804db3d3d 100644 --- a/SuperBuild/External_PCRE.cmake +++ b/SuperBuild/External_PCRE.cmake @@ -42,6 +42,7 @@ if(NOT PCRE_DIR) ExternalProject_add(PCRE URL "${PCRE_URL}" + URL_HASH "${PCRE_URL_HASH}" CONFIGURE_COMMAND ${pcre_CONFIGURE_COMMAND} DEPENDS "${PCRE_DEPENDENCIES}" ${External_Project_USES_TERMINAL} diff --git a/SuperBuild/External_Swig.cmake b/SuperBuild/External_Swig.cmake index 9aedb9cbe..c65651628 100644 --- a/SuperBuild/External_Swig.cmake +++ b/SuperBuild/External_Swig.cmake @@ -39,6 +39,7 @@ if(NOT SWIG_DIR) # swig.exe available as pre-built binary on Windows: ExternalProject_Add(Swig URL "${SWIGWIN_URL}" + URL_HASH "${SWIGWIN_URL_HASH}" SOURCE_DIR ${swig_source_dir} CONFIGURE_COMMAND "" BUILD_COMMAND "" @@ -102,6 +103,7 @@ if(NOT SWIG_DIR) sitkSourceDownload(SWIG_URL "swig-${SWIG_TARGET_VERSION}.tar.gz") set(SWIG_DOWNLOAD_STEP URL "${SWIG_URL}" + URL_HASH "${SWIG_URL_HASH}" ) endif() diff --git a/SuperBuild/External_virtualenv.cmake b/SuperBuild/External_virtualenv.cmake index 4079601de..7a4dece81 100644 --- a/SuperBuild/External_virtualenv.cmake +++ b/SuperBuild/External_virtualenv.cmake @@ -19,6 +19,7 @@ sitkSourceDownload(${proj}_URL "virtualenv-${${proj}_TARGET_VERSION}.tar.gz") ExternalProject_Add(${proj} URL "${${proj}_URL}" + URL_HASH "${${proj}_URL_HASH}" SOURCE_DIR ${${proj}_source_dir} BINARY_DIR ${${proj}_binary_dir} INSTALL_DIR ${${proj}_install_dir} diff --git a/SuperBuild/SuperBuild.cmake b/SuperBuild/SuperBuild.cmake index 13d11c237..73310b262 100644 --- a/SuperBuild/SuperBuild.cmake +++ b/SuperBuild/SuperBuild.cmake @@ -61,22 +61,25 @@ add_custom_target( SuperBuildSimpleITKSource ) # the build tree, and can be locally cache with other ExternalData # controlled environment variables. # +# is set to the downloaded file. +# _HASH is set to a hash of the file of the form ALGO=HASH_VALUE +# # The "SuperBuildSimpleITKSource" target needs to be manually added as # a dependencies to the ExternalProject. # # add_dependencies( PROJ "SuperBuildSimpleITKSource" ) # -# Note: Hash files are created under the SOURCE directory in the -# .ExternalSource sub-directory during configuration. -# function(sitkSourceDownload outVar filename) set(link_file "${CMAKE_CURRENT_SOURCE_DIR}/ExternalSource/${filename}") if( NOT EXISTS "${link_file}.md5") - set(link_file "${CMAKE_CURRENT_SOURCE_DIR}/.ExternalSource/${filename}") - file(WRITE "${link_file}.md5" ${hash} ) + message(FATALERROR "The source download file: \"${link_file}.md5\" does not exists.") endif() + file(READ "${link_file}.md5" _HASH) + string(STRIP "${_HASH}" _HASH) + set(${outVar}_HASH "MD5=${_HASH}" PARENT_SCOPE) + ExternalData_Expand_arguments( SuperBuildSimpleITKSourceReal link From 33c26a92c0cf90c7d98107438d414075de010efc Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 17 Jul 2019 13:33:56 -0400 Subject: [PATCH 150/400] Update version to 1.2.2 --- Version.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Version.cmake b/Version.cmake index 1e28ab9f3..5a13193e0 100644 --- a/Version.cmake +++ b/Version.cmake @@ -10,7 +10,7 @@ set(SimpleITK_VERSION_MAJOR 1) set(SimpleITK_VERSION_MINOR 2) -set(SimpleITK_VERSION_PATCH 0) +set(SimpleITK_VERSION_PATCH 2) #set(SimpleITK_VERSION_TWEAK "") From 1a98e2f75d07b32c0727a901e8f7d6e37d7d12ba Mon Sep 17 00:00:00 2001 From: Jirka Date: Fri, 7 Jun 2019 17:56:04 +0200 Subject: [PATCH 151/400] drop missing func --- Documentation/Sphinx/PointBasedRegistration.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/Sphinx/PointBasedRegistration.rst b/Documentation/Sphinx/PointBasedRegistration.rst index b844bcd50..b50579505 100644 --- a/Documentation/Sphinx/PointBasedRegistration.rst +++ b/Documentation/Sphinx/PointBasedRegistration.rst @@ -80,7 +80,7 @@ We can apply a transformation computed with SimpleElastix to a point set with Si .. warning:: - The input points are specified in the fixed image domain (!) and warped from the fixed image to moving image since the transformation direction is from fixed to moving image. If we want to warp points from the moving image to fixed image, we need the inverse transform. This can be computed manually (see section 6.1.6 in the `elastix manual `_) or via :code:`elastixImageFilter.ExecuteInverse()`. + The input points are specified in the fixed image domain (!) and warped from the fixed image to moving image since the transformation direction is from fixed to moving image. If we want to warp points from the moving image to fixed image, we need the inverse transform. This can be computed manually, see section 6.1.6 and Figure 2.3 in the `elastix manual `_. From 69be7e8e83447866a2f31e13342122866efb6848 Mon Sep 17 00:00:00 2001 From: Ziv Yaniv Date: Thu, 1 Aug 2019 16:14:56 -0400 Subject: [PATCH 152/400] Moving EMBC'19 workshop from future to past section. --- Documentation/docs/source/tutorialsAndCourses.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Documentation/docs/source/tutorialsAndCourses.rst b/Documentation/docs/source/tutorialsAndCourses.rst index 836ebe133..158a84256 100644 --- a/Documentation/docs/source/tutorialsAndCourses.rst +++ b/Documentation/docs/source/tutorialsAndCourses.rst @@ -35,13 +35,11 @@ SimpleITK tutorials and courses have been given in the following venues: Upcoming ++++++++ -* IEEE Engineering in Medicine and Biology Conference (EMBC) 2019, Berlin Germany: `SimpleITK: A Tool for Biomedical Image Processing, from Cells to Anatomical Structures `__ [`git repository `__]. - - Past ++++ +* IEEE Engineering in Medicine and Biology Conference (EMBC) 2019, Berlin Germany: `SimpleITK: A Tool for Biomedical Image Processing, from Cells to Anatomical Structures `__ [`git repository `__]. * SPIE Medical Imaging 2019 Course, San Diego CA, USA: `SimpleITK Jupyter Notebooks: Biomedical Image Analysis in Python `__ [`git repository `__]. * IEEE International Symposium on Biomedical Imaging (ISBI)2018 Tutorial, Washington DC, USA: `Biomedical Image Analysis in Python and R using SimpleITK Jupyter Notebooks `__ [`git repository `__]. * SPIE Medical Imaging 2018 Course, Houston TX, USA: `SimpleITK Jupyter Notebooks: Biomedical Image Analysis in Python `__ [`git repository `__]. From 6f88f60097f75de8cf2667572fda7812f3e58c20 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 5 Aug 2019 14:54:47 -0400 Subject: [PATCH 153/400] Improve set_from_env function support already defined values --- Testing/CI/Azure/azure.cmake | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Testing/CI/Azure/azure.cmake b/Testing/CI/Azure/azure.cmake index 93903292d..3b566e060 100644 --- a/Testing/CI/Azure/azure.cmake +++ b/Testing/CI/Azure/azure.cmake @@ -3,21 +3,22 @@ # ------------ # # Sets a CMake variable from an environment variable. If the -# environment variable is not defined then either a fatal error is -# generated or the CMake variable is not modified. +# environment variable is not defined then the exist CMake value will +# persist. Next if a "DEFAULT" argument is provided then the "value" +# parameter will be use to set the variable. # # set_from_env( [REQUIRED|DEFAULT value] ) function(set_from_env var env_var) - if(NOT DEFINED ENV{${env_var}}) - if (ARGV2 STREQUAL "REQUIRED") - message(FATAL_ERROR "Required environment variable \"${env_var}\" not defined.") - elseif (ARGV2 STREQUAL "DEFAULT") - message("Setting \"${var}\" to default \"${ARGV3}\".") - set(${var} ${ARGV3} PARENT_SCOPE) - endif() - else() + if( DEFINED ENV{${env_var}}) message("Setting \"${var}\" to \"$ENV{${env_var}}\" from environment.") set(${var} $ENV{${env_var}} PARENT_SCOPE) + elseif (DEFINED ${var}) + message("Using defined value for \"${var}\" of \"${${var}}\"") + elseif (ARGV2 STREQUAL "REQUIRED") + message(FATAL_ERROR "Required environment variable \"${env_var}\" not defined.") + elseif (ARGV2 STREQUAL "DEFAULT") + message("Setting \"${var}\" to default \"${ARGV3}\".") + set(${var} ${ARGV3} PARENT_SCOPE) endif() endfunction() From 81a9eb3cfdea327ff44e8ebc00e39d8af94f85d6 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 5 Aug 2019 14:56:31 -0400 Subject: [PATCH 154/400] Add dashboard_git_branch support to set branch to build --- Testing/CI/Azure/azure.cmake | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/Testing/CI/Azure/azure.cmake b/Testing/CI/Azure/azure.cmake index 3b566e060..8a712af3e 100644 --- a/Testing/CI/Azure/azure.cmake +++ b/Testing/CI/Azure/azure.cmake @@ -24,7 +24,24 @@ endfunction() set_from_env(CTEST_SITE "AGENT_MACHINENAME" REQUIRED) set(CTEST_SITE "Azure.${CTEST_SITE}") -set(CTEST_UPDATE_VERSION_ONLY 1) + +set_from_env(workspace "AGENT_BUILDDIRECTORY" REQUIRED) +file(TO_CMAKE_PATH "${workspace}" CTEST_DASHBOARD_ROOT) + +set_from_env(dashboard_git_branch "DASHBOARD_GIT_BRANCH") +if( DEFINED dashboard_git_branch) + set(CTEST_UPDATE_VERSION_ONLY 1) + set_from_env(CTEST_SOURCE_DIRECTORY "CTEST_SOURCE_DIRECTORY" DEFAULT "${CTEST_DASHBOARD_ROOT}/sitk") + if (EXISTS "${CTEST_SOURCE_DIRECTORY}") + message(WARNING "The source path \"${CTEST_SOURCE_DIRECTORY}\" already exists!") + endif() +else() + set(CTEST_UPDATE_VERSION_ONLY 1) + file(RELATIVE_PATH dashboard_source_name "${workspace}" "$ENV{BUILD_SOURCESDIRECTORY}") + set_from_env(CTEST_SOURCE_DIRECTORY "BUILD_SOURCESDIRECTORY" REQUIRED) +endif() +set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY") + include( ProcessorCount ) ProcessorCount( _processor_count ) @@ -32,9 +49,6 @@ set_from_env(PARALLEL_LEVEL "PARALLEL_LEVEL" DEFAULT "${_processor_count}" ) set( CTEST_TEST_ARGS ${CTEST_TEST_ARGS} PARALLEL_LEVEL ${PARALLEL_LEVEL}) -set_from_env(workspace "AGENT_BUILDDIRECTORY" REQUIRED) -file(TO_CMAKE_PATH "${workspace}" CTEST_DASHBOARD_ROOT) -file(RELATIVE_PATH dashboard_source_name "${workspace}" "$ENV{BUILD_SOURCESDIRECTORY}") # Make environment variables to CMake variables for CTest set_from_env(CTEST_CMAKE_GENERATOR "CTEST_CMAKE_GENERATOR" DEFAULT "Ninja" ) @@ -42,8 +56,6 @@ if (DEFINED ENV{CTEST_BUILD_CONFIGURATION}) message(WARNING "Ignoring depricated variable CTEST_BUILD_CONFIGURATION") endif() set_from_env(CTEST_CONFIGURATION_TYPE "CTEST_CONFIGURATION_TYPE" DEFAULT "Release") -set_from_env(CTEST_SOURCE_DIRECTORY "BUILD_SOURCESDIRECTORY" REQUIRED) -#set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY") set_from_env(CTEST_BUILD_FLAGS "CTEST_BUILD_FLAGS") set_from_env(CTEST_BUILD_TARGET "CTEST_BUILD_TARGET") set_from_env(CTEST_TEST_ARGS "CTEST_TEST_ARGS") From c0e6f3784581b84144746f407a9db8e0314fe904 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 5 Aug 2019 14:57:23 -0400 Subject: [PATCH 155/400] Add support for generator toolset and platform --- Testing/CI/Azure/azure.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Testing/CI/Azure/azure.cmake b/Testing/CI/Azure/azure.cmake index 8a712af3e..9ec235087 100644 --- a/Testing/CI/Azure/azure.cmake +++ b/Testing/CI/Azure/azure.cmake @@ -52,6 +52,8 @@ set( CTEST_TEST_ARGS ${CTEST_TEST_ARGS} PARALLEL_LEVEL ${PARALLEL_LEVEL}) # Make environment variables to CMake variables for CTest set_from_env(CTEST_CMAKE_GENERATOR "CTEST_CMAKE_GENERATOR" DEFAULT "Ninja" ) +set_from_env(CTEST_CMAKE_GENERATOR_TOOLSET "CTEST_CMAKE_GENERATOR_TOOLSET") +set_from_env(CTEST_CMAKE_GENERATOR_PLATFORM "CTEST_CMAKE_GENERATOR_PLATFORM") if (DEFINED ENV{CTEST_BUILD_CONFIGURATION}) message(WARNING "Ignoring depricated variable CTEST_BUILD_CONFIGURATION") endif() From 50e96d540e971885ba81117f79b3514caee1b354 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 5 Aug 2019 14:58:56 -0400 Subject: [PATCH 156/400] Fix typo in CTEST_OUTPUT_ON_FAILURE add script support --- Testing/CI/Azure/azure-pipelines-batch.yml | 4 ++-- Testing/CI/Azure/azure-pipelines-coverage.yml | 4 ++-- Testing/CI/Azure/azure-pipelines.yml | 6 +++--- Testing/CI/Azure/azure.cmake | 5 +++-- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index 4b2559ac5..53e3da243 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -70,7 +70,7 @@ jobs: displayName: Build and test env: CTEST_CONFIGURATION_TYPE: MinSizeRel - CTEST_OUTPUT_ON_FALURE: 1 + CTEST_OUTPUT_ON_FAILURE: 1 DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 CTEST_CACHE: | @@ -129,7 +129,7 @@ jobs: ccache --show-stats displayName: Build and test env: - CTEST_OUTPUT_ON_FALURE: 1 + CTEST_OUTPUT_ON_FAILURE: 1 DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard CTEST_CACHE: | BUILD_DOCUMENTS:BOOL=OFF diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml index 455163320..f65881757 100644 --- a/Testing/CI/Azure/azure-pipelines-coverage.yml +++ b/Testing/CI/Azure/azure-pipelines-coverage.yml @@ -26,7 +26,7 @@ jobs: env: CCACHE_DISABLE: 1 CTEST_CONFIGURATION_TYPE: Debug - CTEST_OUTPUT_ON_FALURE: 1 + CTEST_OUTPUT_ON_FAILURE: 1 CTEST_COVERAGE_COMMAND: /usr/bin/gcov CTEST_CACHE: | BUILD_DOCUMENTS:BOOL=OFF @@ -69,7 +69,7 @@ jobs: DASHBOARD_DO_MEMCHECK: 1 CTEST_MEMORYCHECK_COMMAND: "/usr/bin/valgrind" CTEST_MEMORYCHECK_COMMAND_OPTIONS: "--trace-children=yes --quiet --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=50 --verbose --demangle=yes --gen-suppressions=all --child-silent-after-fork=yes" - CTEST_OUTPUT_ON_FALURE: 1 + CTEST_OUTPUT_ON_FAILURE: 1 CTEST_TEST_TIMEOUT: 10000 CTEST_CONFIGURATION_TYPE: Debug CTEST_CACHE: | diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 5bef88992..a99fcfd22 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -38,7 +38,7 @@ jobs: displayName: Build and test env: CTEST_CONFIGURATION_TYPE: MinSizeRel - CTEST_OUTPUT_ON_FALURE: 1 + CTEST_OUTPUT_ON_FAILURE: 1 DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 CTEST_CACHE: | @@ -88,7 +88,7 @@ jobs: displayName: Build and test env: CTEST_CONFIGURATION_TYPE: MinSizeRel - CTEST_OUTPUT_ON_FALURE: 1 + CTEST_OUTPUT_ON_FAILURE: 1 DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 CTEST_CACHE: | @@ -135,7 +135,7 @@ jobs: displayName: Build and test env: CTEST_CONFIGURATION_TYPE: MinSizeRel - CTEST_OUTPUT_ON_FALURE: 1 + CTEST_OUTPUT_ON_FAILURE: 1 CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017 Win64" DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 diff --git a/Testing/CI/Azure/azure.cmake b/Testing/CI/Azure/azure.cmake index 9ec235087..4b6c9796b 100644 --- a/Testing/CI/Azure/azure.cmake +++ b/Testing/CI/Azure/azure.cmake @@ -3,9 +3,9 @@ # ------------ # # Sets a CMake variable from an environment variable. If the -# environment variable is not defined then the exist CMake value will +# environment variable is not defined then the existing CMake value will # persist. Next if a "DEFAULT" argument is provided then the "value" -# parameter will be use to set the variable. +# parameter will be used to set the variable. # # set_from_env( [REQUIRED|DEFAULT value] ) function(set_from_env var env_var) @@ -64,6 +64,7 @@ set_from_env(CTEST_TEST_ARGS "CTEST_TEST_ARGS") set_from_env(CTEST_TEST_TIMEOUT "CTEST_TEST_TIMEOUT") +set_from_env(CTEST_OUTPUT_ON_FAILURE "CTEST_OUTPUT_ON_FAILURE") set_from_env(DASHBOARD_BRANCH_DIRECTORY "DASHBOARD_BRANCH_DIRECTORY" REQUIRED) From b12b653700694996736e38b3c1a7004c4560f5ac Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 13 Aug 2019 16:15:58 -0400 Subject: [PATCH 157/400] Allow manylinux packaging to continue with test failure --- Utilities/Distribution/manylinux/imagefiles/cmd.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utilities/Distribution/manylinux/imagefiles/cmd.sh b/Utilities/Distribution/manylinux/imagefiles/cmd.sh index b1addee79..781ae3549 100755 --- a/Utilities/Distribution/manylinux/imagefiles/cmd.sh +++ b/Utilities/Distribution/manylinux/imagefiles/cmd.sh @@ -82,6 +82,6 @@ for PYTHON in ${PYTHON_VERSIONS}; do PYTHON_EXECUTABLE=/opt/python/${PYTHON}/bin/python PLATFORM=$(${PYTHON_EXECUTABLE} -c "import distutils.util; print(distutils.util.get_platform())") build_simpleitk_python && - ( ctest -j ${NPROC} -LE UNSTABLE | tee ${OUT_DIR}/ctest_${PLATFORM}_${PYTHON}.log || + ( ctest -j ${NPROC} -LE UNSTABLE | tee ${OUT_DIR}/ctest_${PLATFORM}_${PYTHON}.log; auditwheel repair $(find ${BLD_DIR}-${PYTHON}/ -name SimpleITK*.whl) -w ${OUT_DIR}/wheelhouse/ ) done From 893c0e3ec65fcd82777d8d718e9e235cca7359e6 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 13 Aug 2019 16:16:24 -0400 Subject: [PATCH 158/400] Support environment variable to specify manylinux architecture build --- Utilities/Distribution/manylinux/run.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Utilities/Distribution/manylinux/run.sh b/Utilities/Distribution/manylinux/run.sh index 3ed040fe8..cfa722ef7 100755 --- a/Utilities/Distribution/manylinux/run.sh +++ b/Utilities/Distribution/manylinux/run.sh @@ -13,10 +13,13 @@ if [ ! -z "${PYTHON_VERSIONS}" ] ; then extra_args="${extra_args} -e PYTHON_VERSIONS=${PYTHON_VERSIONS}" fi -for ARCH in i686 x86_64; do + +ARCHS=${ARCH:-"i686 x86_64"} + +for ARCH in ${ARCHS}; do docker build --pull=true --rm=true -t simpleitk_manylinux_${ARCH} -f Dockerfile-${ARCH} . - docker run --storage-opt size=150G --rm -e _USER=$(id -un) -e _USERID=$(id -u) -e_GROUPID=$(id -g) $extra_args -v $(pwd):/work/io -t simpleitk_manylinux_${ARCH} + docker run --rm --env _USER=$(id -un) --env _USERID=$(id -u) --env _GROUPID=$(id -g) $extra_args -v $(pwd):/work/io -t simpleitk_manylinux_${ARCH} # use this command to get an interactive prompt to debug behavior #docker run --rm -i -t --entrypoint=/bin/bash -u=root $extra_args -v $(pwd):/work/io simpleitk_manylinux_${ARCH} From e4462d5d7c1b2348cca64cce3765dfbb905d406b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 15 Aug 2019 15:36:33 -0400 Subject: [PATCH 159/400] Adding Azure Pipeline to package on Linux, MacOS, and Windows Perform packaging for Linux for manylinux1 Python wheels in Docker container 32 and 64-bits. Package MacOS wheels just of 64-bits. On Windows build on Visual Studio for Python 2.7 and Visual Studio 2017 with v140 (VS2015) compiler, for both 32 and 64-bits. --- Testing/CI/Azure/azure-pipelines-package.yml | 316 +++++++++++++++++++ Testing/CI/Azure/mac_build_python.sh | 40 +++ Testing/CI/Azure/win_build_csharp.sh | 34 ++ Testing/CI/Azure/win_build_java.sh | 34 ++ Testing/CI/Azure/win_build_python.sh | 43 +++ 5 files changed, 467 insertions(+) create mode 100644 Testing/CI/Azure/azure-pipelines-package.yml create mode 100755 Testing/CI/Azure/mac_build_python.sh create mode 100755 Testing/CI/Azure/win_build_csharp.sh create mode 100755 Testing/CI/Azure/win_build_java.sh create mode 100755 Testing/CI/Azure/win_build_python.sh diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml new file mode 100644 index 000000000..673e1d147 --- /dev/null +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -0,0 +1,316 @@ +trigger: + tags: + include: + - '*' + branches: + exclude: + - '*' +variables: + ExternalDataVersion: 1.2.0 +jobs: + - job: Configure + displayName: Configure Variables + pool: + vmImage: 'Ubuntu-16.04' + steps: + - checkout: none + - bash: | + echo "##vso[task.setvariable variable=BuildHash;isOutput=true]${CONFIGURE_BUILDHASH:-release}" + name: configure + - job: Linux + dependsOn: Configure + condition: ne( variables['configure.skiplinux'], 'true' ) + timeoutInMinutes: 200 + strategy: + matrix: + manylinux1_i686: + ARCH: i686 + manylinux1_x86_64: + ARCH: x86_64 + pool: + vmImage: 'Ubuntu-16.04' + variables: + SIMPLEITK_GIT_TAG: $[ dependencies.Configure.outputs['configure.BuildHash'] ] + steps: + - template: templates/git-download-steps.yml + - bash: | + cd ${BUILD_SOURCESDIRECTORY}/Utilities/Distribution/manylinux + docker build --pull=true --rm=true -t simpleitk_manylinux_${ARCH} -f Dockerfile-${ARCH} . + displayName: Build Docker Image + - bash: | + echo "Building SimpleITK tag \"${SIMPLEITK_GIT_TAG}\"..." + cd ${BUILD_SOURCESDIRECTORY}/Utilities/Distribution/manylinux + ./run.sh + env: + ExternalData_OBJECT_STORES: "$(Build.SourcesDirectory)/.ExternalData/MD5" + SIMPLEITK_GIT_TAG: "$(SimpleITKBuildHash)" + - task: CopyFiles@2 + inputs: + sourceFolder: '$(Build.SourcesDirectory)/Utilities/Distribution/manylinux/wheelhouse' + contents: '*.whl' + targetFolder: $(Build.ArtifactStagingDirectory)/python + flattenFolders: true + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/python + artifactName: Python + + - job: MacOS + dependsOn: Configure + condition: ne( variables['configure.skipmacos'], 'true' ) + timeoutInMinutes: 200 + variables: + xcodeVersion: 9.4.1 + coreBinaryDirectory: '$(Agent.BuildDirectory)/sitk-build' + CTEST_CONFIGURATION_TYPE: Release + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + DASHBOARD_GIT_BRANCH: $[ dependencies.Configure.outputs['configure.BuildHash'] ] + pool: + vmImage: 'macos-10.13' + steps: + - template: templates/git-download-steps.yml + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + - script: | + python --version + sudo python -m pip install setuptools numpy + sudo python -m pip install ninja scikit-ci-addons + displayName: 'Install ninja dependency' + - bash: | + set -x + xcode-select -p + sudo xcode-select -s /Applications/Xcode_$(xcodeVersion).app/Contents/Developer/ + xcode-select -p + c++ --version + cmake --version + ninja --version + displayName: 'XCode configuration' + - bash: | + ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 2 + displayName: 'Build and test core' + workingDirectory: $(Agent.BuildDirectory) + env: + CTEST_BINARY_DIRECTORY: $(coreBinaryDirectory) + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CTEST_CACHE: | + CMAKE_CXX_FLAGS:STRING=-fvisibility=hidden -fvisibility-inlines-hidden + CMAKE_C_FLAGS:STRING=-fvisibility=hidden + CMAKE_OSX_DEPLOYMENT_TARGET=10.6 + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=OFF + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + SimpleITK_BUILD_DISTRIBUTE:BOOL=ON + - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh + displayName: Build Python 36 + continueOnError: true + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.7' + architecture: 'x64' + - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh + displayName: Build Python 37 + continueOnError: true + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.5' + architecture: 'x64' + - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh + displayName: Build Python 35 + continueOnError: true + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '2.7' + architecture: 'x64' + - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh + displayName: Build Python 27 + continueOnError: true + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/python + artifactName: Python + + - job: VS2017 + dependsOn: Configure + condition: ne( variables['configure.skipwindows'], 'true' ) + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + strategy: + matrix: + x86: + PYTHON_ARCH: x86 + CMAKE_PLATFORM: Win32 + VCVAR_OPTIONS: x86 + x64: + PYTHON_ARCH: x64 + CMAKE_PLATFORM: x64 + VCVAR_OPTIONS: amd64 + pool: + vmImage: 'vs2017-win2016' + variables: + coreBinaryDirectory: '$(Agent.BuildDirectory)/sitk-build' + CTEST_CONFIGURATION_TYPE: Release + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + DASHBOARD_GIT_BRANCH: $[ dependencies.Configure.outputs['configure.BuildHash'] ] + steps: + - template: templates/git-download-steps.yml + - bash: | + choco install ninja -fdvy + which jar.exe + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 + cmake --version + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + true + displayName: Build and test + workingDirectory: $(Agent.BuildDirectory) + env: + CTEST_BINARY_DIRECTORY: $(coreBinaryDirectory) + CTEST_CMAKE_GENERATOR: "Ninja" + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CXXFLAGS: /MP + CFLAGS: /MP + CC: cl.exe + CXX: cl.exe + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + SimpleITK_BUILD_DISTRIBUTE:BOOL=ON + - bash : | + rm -rf ${COREBINARYDIRECTORY}/ITK ${COREBINARYDIRECTORY}/ITK-build + rm -rf ${COREBINARYDIRECTORY}/SimpleITK-build + displayName: Cleanup build + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 + bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_java.sh + displayName: Build Java + continueOnError: true + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/java + artifactName: Java + continueOnError: true + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 + bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_csharp.sh + displayName: Build CSharp + continueOnError: true + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/csharp + artifactName: CSharp + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.7' + architecture: '$(PYTHON_ARCH)' + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 + bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh + displayName: Build Python 37 + continueOnError: true + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: '$(PYTHON_ARCH)' + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 + bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh + displayName: Build Python 36 + continueOnError: true + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.5' + architecture: '$(PYTHON_ARCH)' + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 + bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh + displayName: Build Python 35 + continueOnError: true + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/python + artifactName: Python + + - job: VS2009 + dependsOn: Configure + condition: ne( variables['configure.skipwindows'], 'true' ) + timeoutInMinutes: 0 + cancelTimeoutInMinutes: 300 + strategy: + matrix: + x86: + PYTHON_ARCH: x86 + VCVAR_OPTIONS: x86 + CMAKE_PLATFORM: Win32 + x64: + PYTHON_ARCH: x64 + CMAKE_PLATFORM: x64 + VCVAR_OPTIONS: amd64 + pool: + vmImage: 'vs2017-win2016' + variables: + coreBinaryDirectory: '$(Agent.BuildDirectory)/sitk-build' + CTEST_CONFIGURATION_TYPE: MinSizeRel + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + DASHBOARD_GIT_BRANCH: $[ dependencies.Configure.outputs['configure.BuildHash'] ] + steps: + - template: templates/git-download-steps.yml + - bash: | + choco upgrade vcpython27 -fdv -y --debug + choco install ninja -fdvy + displayName: "Installing Visual Studio for Python 2.7..." + - script: | + call "C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat" $(VCVAR_OPTIONS) + cmake --version + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + true + displayName: Build and test + workingDirectory: $(Agent.BuildDirectory) + continueOnError: true + env: + CTEST_BINARY_DIRECTORY: $(coreBinaryDirectory) + CTEST_CMAKE_GENERATOR: "Ninja" + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CXXFLAGS: /MP + CFLAGS: /MP + CC: cl.exe + CXX: cl.exe + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=OFF + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + SimpleITK_BUILD_DISTRIBUTE:BOOL=ON + - bash : | + rm -rf ${COREBINARYDIRECTORY}/ITK ${COREBINARYDIRECTORY}/ITK-build + rm -rf ${COREBINARYDIRECTORY}/SimpleITK-build + displayName: Cleanup build + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '2.7' + architecture: '$(PYTHON_ARCH)' + - script: | + call "C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat" $(VCVAR_OPTIONS) + bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh + displayName: Build Python 27 + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/python + artifactName: Python diff --git a/Testing/CI/Azure/mac_build_python.sh b/Testing/CI/Azure/mac_build_python.sh new file mode 100755 index 000000000..c3654a5f0 --- /dev/null +++ b/Testing/CI/Azure/mac_build_python.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +set -ex + +export ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS=2 + +echo "COREBINARYDIRECTORY: ${COREBINARYDIRECTORY}" + +which python +python --version +PYTHON_VERSION=$(python -c 'import sys;print ("{0}{1}".format(sys.version_info[0], sys.version_info[1]))') + +python -m pip install numpy --progress-bar off + +read -r -d '' CTEST_CACHE << EOM || true +CMAKE_PREFIX_PATH:PATH=${COREBINARYDIRECTORY} +CMAKE_CXX_VISIBILITY_PRESET:STRING=hidden +CMAKE_VISIBILITY_INLINES_HIDDEN:BOOL=ON +CMAKE_OSX_DEPLOYMENT_TARGET=10.6 +SWIG_EXECUTABLE:FILEPATH=${COREBINARYDIRECTORY}/Swig/bin/swig +PYTHON_VIRTUALENV_SCRIPT:FILEPATH=${COREBINARYDIRECTORY}/virtualenv/virtualenv.py +BUILD_EXAMPLES:BOOL=ON +BUILD_TESTING:BOOL=ON +SimpleITK_PYTHON_PLAT_NAME:STRING=macosx-10.6-x86_64 +SimpleITK_BUILD_DISTRIBUTE:BOOL=ON +SimpleITK_PYTHON_WHEEL:BOOL=1 +EOM + +export CTEST_CACHE +export CTEST_BINARY_DIRECTORY="${AGENT_BUILDDIRECTORY}/py${PYTHON_VERSION}" + +ctest -D dashboard_source_config_dir="Wrapping/Python" \ + -D "CTEST_BUILD_NAME:STRING=${AGENT_NAME}-${AGENT_JOBNAME}-py${PYTHON_VERSION}" \ + -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 2 + +cmake --build "${CTEST_BINARY_DIRECTORY}" --target dist + + +mkdir -p "${BUILD_ARTIFACTSTAGINGDIRECTORY}/python" +find ${CTEST_BINARY_DIRECTORY} -name "SimpleITK*.whl" -exec cp -v {} "${BUILD_ARTIFACTSTAGINGDIRECTORY}/python" \; diff --git a/Testing/CI/Azure/win_build_csharp.sh b/Testing/CI/Azure/win_build_csharp.sh new file mode 100755 index 000000000..fdfd50e0b --- /dev/null +++ b/Testing/CI/Azure/win_build_csharp.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +set -ex + +export ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS=2 + +read -r -d '' CTEST_CACHE << EOM || true +CMAKE_PREFIX_PATH:PATH=${COREBINARYDIRECTORY} +SWIG_EXECUTABLE:FILEPATH=${COREBINARYDIRECTORY}\swigwin\swig.exe +BUILD_TESTING:BOOL=ON +BUILD_EXAMPLES:BOOL=ON +SimpleITK_BUILD_DISTRIBUTE:BOOL=ON +Java_JAR_EXECUTABLE:FILEPATH=jar.exe +CSHARP_PLATFORM:STRING=${PYTHON_ARCH} +EOM + + +export CTEST_CACHE +export CTEST_BINARY_DIRECTORY="${AGENT_BUILDDIRECTORY}/csharp" + +export CC=cl.exe +export CXX=cl.exe + + +ctest -D dashboard_source_config_dir="Wrapping/CSharp" \ + -D "CTEST_BUILD_NAME:STRING=${AGENT_NAME}-${AGENT_JOBNAME}-csharp" \ + -D "CTEST_CMAKE_GENERATOR:STRING=Ninja" \ + -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V || true + +( cd ${CTEST_BINARY_DIRECTORY} && cmake --build "${CTEST_BINARY_DIRECTORY}" --config "${CTEST_CONFIGURATION_TYPE}" --target dist -v ) + + +mkdir -p "${BUILD_ARTIFACTSTAGINGDIRECTORY}/csharp" +find ${CTEST_BINARY_DIRECTORY}/dist -name "SimpleITK*.zip" -exec cp -v {} "${BUILD_ARTIFACTSTAGINGDIRECTORY}/csharp" \; diff --git a/Testing/CI/Azure/win_build_java.sh b/Testing/CI/Azure/win_build_java.sh new file mode 100755 index 000000000..3acece0b8 --- /dev/null +++ b/Testing/CI/Azure/win_build_java.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +set -ex + +export ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS=2 + +read -r -d '' CTEST_CACHE << EOM || true +CMAKE_PREFIX_PATH:PATH=${COREBINARYDIRECTORY} +SWIG_EXECUTABLE:FILEPATH=${COREBINARYDIRECTORY}\swigwin\swig.exe +BUILD_TESTING:BOOL=ON +BUILD_EXAMPLES:BOOL=ON +SimpleITK_BUILD_DISTRIBUTE:BOOL=ON +CSHARP_PLATFORM:STRING=${PYTHON_ARCH} +EOM + + +export CTEST_CACHE +export CTEST_BINARY_DIRECTORY="${AGENT_BUILDDIRECTORY}/Java" + +export CC=cl.exe +export CXX=cl.exe + + +ctest -D dashboard_source_config_dir="Wrapping/Java" \ + -D "CTEST_BUILD_NAME:STRING=${AGENT_NAME}-${AGENT_JOBNAME}-java" \ + -D "CTEST_CMAKE_GENERATOR:STRING=Ninja" \ + -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V || true + +( cd ${CTEST_BINARY_DIRECTORY} && cmake --build "${CTEST_BINARY_DIRECTORY}" --config "${CTEST_CONFIGURATION_TYPE}" --target dist -v ) + + +ls -laR "${CTEST_BINARY_DIRECTORY}/dist" +mkdir -p "${BUILD_ARTIFACTSTAGINGDIRECTORY}/java" +find "${CTEST_BINARY_DIRECTORY}/dist" -name "SimpleITK*.zip" -exec cp -v {} "${BUILD_ARTIFACTSTAGINGDIRECTORY}/java" \; diff --git a/Testing/CI/Azure/win_build_python.sh b/Testing/CI/Azure/win_build_python.sh new file mode 100755 index 000000000..773b01c52 --- /dev/null +++ b/Testing/CI/Azure/win_build_python.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +set -ex + +export ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS=2 + +echo "COREBINARYDIRECTORY: ${COREBINARYDIRECTORY}" + +which python +python --version +PYTHON_VERSION=$(python -c 'import sys;print ("{0}{1}".format(sys.version_info[0], sys.version_info[1]))') + +python -m pip install numpy --progress-bar off + +_PYTHON_VIRTUALENV_SCRIPT=$(echo "${COREBINARYDIRECTORY}\virtualenv\virtualenv.py" |sed 's/\\/\//g') + +read -r -d '' CTEST_CACHE << EOM || true +CMAKE_PREFIX_PATH:PATH=${COREBINARYDIRECTORY} +SWIG_EXECUTABLE:FILEPATH=${COREBINARYDIRECTORY}\swigwin\swig.exe +PYTHON_VIRTUALENV_SCRIPT:FILEPATH=${_PYTHON_VIRTUALENV_SCRIPT} +BUILD_TESTING:BOOL=ON +BUILD_EXAMPLES:BOOL=ON +SimpleITK_BUILD_DISTRIBUTE:BOOL=ON +SimpleITK_PYTHON_WHEEL:BOOL=1 +EOM + + +export CTEST_CACHE +export CTEST_BINARY_DIRECTORY="${AGENT_BUILDDIRECTORY}/py${PYTHON_VERSION}" + +export CC=cl.exe +export CXX=cl.exe + +ctest -D dashboard_source_config_dir="Wrapping/Python" \ + -D "CTEST_BUILD_NAME:STRING=${AGENT_NAME}-${AGENT_JOBNAME}-py${PYTHON_VERSION}" \ + -D "CTEST_CMAKE_GENERATOR:STRING=Ninja" \ + -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V || true + +( cd ${CTEST_BINARY_DIRECTORY} && cmake --build "${CTEST_BINARY_DIRECTORY}" --config "${CTEST_CONFIGURATION_TYPE}" --target dist ) + + +mkdir -p "${BUILD_ARTIFACTSTAGINGDIRECTORY}/python" +find ${CTEST_BINARY_DIRECTORY} -name "SimpleITK*.whl" -exec cp -v {} "${BUILD_ARTIFACTSTAGINGDIRECTORY}/python" \; From c08fbaab98c41689c4fc44d117a8867cdce6c35e Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 16 Aug 2019 08:58:12 -0400 Subject: [PATCH 160/400] Use CMake for md5sum and curl over wget This improve the compatibility to run on MacOSX --- Utilities/Maintenance/SourceTarball.bash | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Utilities/Maintenance/SourceTarball.bash b/Utilities/Maintenance/SourceTarball.bash index a3d35d098..70ee4902f 100755 --- a/Utilities/Maintenance/SourceTarball.bash +++ b/Utilities/Maintenance/SourceTarball.bash @@ -47,7 +47,7 @@ find_data_objects() { } validate_MD5() { - md5sum=$(md5sum "$1" | sed 's/ .*//') && + md5sum=$(cmake -E md5sum "$1" | sed 's/ .*//') && if test "$md5sum" != "$2"; then die "Object MD5/$2 is corrupt: $1" fi @@ -56,8 +56,8 @@ validate_MD5() { download_object() { algo="$1" ; hash="$2" ; path="$3" mkdir -p $(dirname "$path") && - if wget "https://simpleitk.github.io/SimpleITKExternalData/$algo/$hash" -O "$path.tmp$$" 1>&2 || - wget "https://www.itk.org/files/ExternalData/$algo/$hash" -O "$path.tmp$$" 1>&2; then + if curl "https://simpleitk.github.io/SimpleITKExternalData/$algo/$hash" --output "$path.tmp$$" 1>&2 || + curl "https://www.itk.org/files/ExternalData/$algo/$hash" --output "$path.tmp$$" 1>&2; then mv "$path.tmp$$" "$path" else rm -f "$path.tmp$$" From c453db25090001abcbb60baa5b1c0f26e9301365 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 16 Aug 2019 09:00:06 -0400 Subject: [PATCH 161/400] Use AZP warning logging command for csharp/java build issue --- Testing/CI/Azure/win_build_csharp.sh | 2 +- Testing/CI/Azure/win_build_java.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Testing/CI/Azure/win_build_csharp.sh b/Testing/CI/Azure/win_build_csharp.sh index fdfd50e0b..f34797831 100755 --- a/Testing/CI/Azure/win_build_csharp.sh +++ b/Testing/CI/Azure/win_build_csharp.sh @@ -25,7 +25,7 @@ export CXX=cl.exe ctest -D dashboard_source_config_dir="Wrapping/CSharp" \ -D "CTEST_BUILD_NAME:STRING=${AGENT_NAME}-${AGENT_JOBNAME}-csharp" \ -D "CTEST_CMAKE_GENERATOR:STRING=Ninja" \ - -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V || true + -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V || echo "##vso[task.logissue type=warning]There was a build or testing issue." ( cd ${CTEST_BINARY_DIRECTORY} && cmake --build "${CTEST_BINARY_DIRECTORY}" --config "${CTEST_CONFIGURATION_TYPE}" --target dist -v ) diff --git a/Testing/CI/Azure/win_build_java.sh b/Testing/CI/Azure/win_build_java.sh index 3acece0b8..13d8412d4 100755 --- a/Testing/CI/Azure/win_build_java.sh +++ b/Testing/CI/Azure/win_build_java.sh @@ -24,7 +24,7 @@ export CXX=cl.exe ctest -D dashboard_source_config_dir="Wrapping/Java" \ -D "CTEST_BUILD_NAME:STRING=${AGENT_NAME}-${AGENT_JOBNAME}-java" \ -D "CTEST_CMAKE_GENERATOR:STRING=Ninja" \ - -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V || true + -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V || echo "##vso[task.logissue type=warning]There was a build or testing issue." ( cd ${CTEST_BINARY_DIRECTORY} && cmake --build "${CTEST_BINARY_DIRECTORY}" --config "${CTEST_CONFIGURATION_TYPE}" --target dist -v ) From 7a8ddec5c572de950ad368277a5eb7f131f07e71 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 16 Aug 2019 09:47:38 -0400 Subject: [PATCH 162/400] Add generation of source and data archives --- Testing/CI/Azure/azure-pipelines-package.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index 673e1d147..00710a5d3 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -107,6 +107,18 @@ jobs: BUILD_TESTING:BOOL=ON WRAP_DEFAULT:BOOL=OFF SimpleITK_BUILD_DISTRIBUTE:BOOL=ON + - bash: | + set -x + Utilities/Maintenance/SourceTarball.bash --tgz --txz --zip $(coreBinaryDirectory)/SimpleITK-build + mkdir -p $(Build.ArtifactStagingDirectory)/archives + shopt -s extglob + mv SimpleITK@(Data|)*@(zip|gz|xz) $(Build.ArtifactStagingDirectory)/archives + workingDirectory: $(Build.SourcesDirectory) + displayName: Generate Source and Data Archives + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/archives + artifactName: Archives - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh displayName: Build Python 36 continueOnError: true From 50a28fe0d477e58715dc7f024e3f8bff5fbb899b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 16 Aug 2019 12:06:57 -0400 Subject: [PATCH 163/400] Add FAQ entry for missing windows dll dependency SimpleITK windows dll library is also dependent on the C++ library. For VS2015 that is MSVCP140.dll, which is not packages with some Python distributions. --- Documentation/docs/source/faq.rst | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Documentation/docs/source/faq.rst b/Documentation/docs/source/faq.rst index 252d7763e..42da6a685 100644 --- a/Documentation/docs/source/faq.rst +++ b/Documentation/docs/source/faq.rst @@ -30,6 +30,20 @@ required for your project, then create a new environment: conda env create -f environment.yml +Why am I getting "ModuleNotFoundError: No module named '_SimpleITK'" when importing SimpleITK on Windows? +--------------------------------------------------------------------------------------------------------- + + Traceback (most recent call last): + File "C:\Python37\lib\site-packages\SimpleITK\SimpleITK.py", line 14, in swig_import_helper + return importlib.import_module(mname) + ... + File "", line 219, in _call_with_frames_removed + ImportError: DLL load failed: The specified module could not be found. + +The above error occurs on Microsoft windows when system libraries SimpleITK depends on are not available on the system. +This issue can be resolved by installing the appropriate +`Redistributable for Visual Studio `__ package. + How to Use ========== From 067610d96d789d3640719f92941a153a2c7d6dad Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 16 Aug 2019 17:36:39 -0400 Subject: [PATCH 164/400] Ignore PR for AZP packaging --- Testing/CI/Azure/azure-pipelines-package.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index 00710a5d3..f3467709a 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -5,6 +5,7 @@ trigger: branches: exclude: - '*' +pr: none variables: ExternalDataVersion: 1.2.0 jobs: From 6699fe9d3117efb9dcd7f7a88fb4913bf92c20f1 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 16 Aug 2019 22:49:34 -0400 Subject: [PATCH 165/400] remove AZP packaging canceltimeout --- Testing/CI/Azure/azure-pipelines-package.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index f3467709a..2505faa96 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -156,7 +156,6 @@ jobs: dependsOn: Configure condition: ne( variables['configure.skipwindows'], 'true' ) timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 strategy: matrix: x86: @@ -263,7 +262,6 @@ jobs: dependsOn: Configure condition: ne( variables['configure.skipwindows'], 'true' ) timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 strategy: matrix: x86: From 46910582d461b4f3b25c59c8866e3c7041f3d1fa Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Sat, 17 Aug 2019 04:17:28 -0400 Subject: [PATCH 166/400] Explicitly set AZP package timeout for VS2009 --- Testing/CI/Azure/azure-pipelines-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index 2505faa96..8f8bd6c2f 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -261,7 +261,7 @@ jobs: - job: VS2009 dependsOn: Configure condition: ne( variables['configure.skipwindows'], 'true' ) - timeoutInMinutes: 0 + timeoutInMinutes: 360 strategy: matrix: x86: From ef6a2ee8bcb3c321ee1227d1ed8c5ec1f2bf068f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 19 Aug 2019 10:01:07 -0400 Subject: [PATCH 167/400] Add symbol stripping to OSX wheel in AZP packaging --- Testing/CI/Azure/mac_build_python.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/Testing/CI/Azure/mac_build_python.sh b/Testing/CI/Azure/mac_build_python.sh index c3654a5f0..5a494e3c0 100755 --- a/Testing/CI/Azure/mac_build_python.sh +++ b/Testing/CI/Azure/mac_build_python.sh @@ -24,6 +24,7 @@ BUILD_TESTING:BOOL=ON SimpleITK_PYTHON_PLAT_NAME:STRING=macosx-10.6-x86_64 SimpleITK_BUILD_DISTRIBUTE:BOOL=ON SimpleITK_PYTHON_WHEEL:BOOL=1 +SimpleITK_BUILD_STRIP:BOOL=1 EOM export CTEST_CACHE From d754fb45d551c4af5c81b6ef2356c273f6bb4446 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 19 Aug 2019 10:01:38 -0400 Subject: [PATCH 168/400] In AZP archive packaging use compiled source code path, specify hash --- Testing/CI/Azure/azure-pipelines-package.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index 8f8bd6c2f..2caaf513c 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -109,11 +109,12 @@ jobs: WRAP_DEFAULT:BOOL=OFF SimpleITK_BUILD_DISTRIBUTE:BOOL=ON - bash: | - set -x - Utilities/Maintenance/SourceTarball.bash --tgz --txz --zip $(coreBinaryDirectory)/SimpleITK-build + set -xe + Utilities/Maintenance/SourceTarball.bash ${DASHBOARD_GIT_BRANCH:+-v ${DASHBOARD_GIT_BRANCH}} --tgz --txz --zip $(coreBinaryDirectory)/SimpleITK-build mkdir -p $(Build.ArtifactStagingDirectory)/archives + ls -la shopt -s extglob - mv SimpleITK@(Data|)*@(zip|gz|xz) $(Build.ArtifactStagingDirectory)/archives + mv SimpleITK@(Data|)-*@(zip|gz|xz) $(Build.ArtifactStagingDirectory)/archives workingDirectory: $(Build.SourcesDirectory) displayName: Generate Source and Data Archives - task: PublishBuildArtifacts@1 From 03a79707513e590b33f503eb7dc2250ebd858bba Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 21 Aug 2019 09:52:16 -0400 Subject: [PATCH 169/400] Fix AZP master branch badge link --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index c05816d2d..ea09fb402 100644 --- a/Readme.md +++ b/Readme.md @@ -4,7 +4,7 @@ SimpleITK | | CircleCI | ReadTheDocs | AzurePipelines | |:-------:|:---------:|:-------------:|:-------------:| | release | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/release) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=release)](http://simpleitk.readthedocs.io/en/release/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=release)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=release) | -| master | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=master)](http://simpleitk.readthedocs.io/en/master/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=release)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=release) | +| master | [![CircleCI](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master.svg?style=shield)](https://circleci.com/gh/SimpleITK/SimpleITK/tree/master) | [![ReadTheDoc](https://readthedocs.org/projects/simpleitk/badge/?version=master)](http://simpleitk.readthedocs.io/en/master/) | [![Build Status](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_apis/build/status/SimpleITK.SimpleITK?branchName=master)](https://dev.azure.com/SimpleITK-DevOps/SimpleITK/_build/latest?definitionId=2&branchName=master) | SimpleITK is an image analysis toolkit with a large number of components supporting general filtering operations, image segmentation and registration. It is built on top of the Insight Segmentation and Registration Toolkit [ITK](https://www.itk.org) with the intent of providing a simplified interface to ITK. SimpleITK itself is written in C++ but is available for a large number of programming languages. Currently these include: From 87a26e73f7d10678d261a082db0e7cc53c78e9eb Mon Sep 17 00:00:00 2001 From: Ziv Yaniv Date: Wed, 21 Aug 2019 13:20:33 -0400 Subject: [PATCH 170/400] Adding an acknowledgments section to the GitHub readme. --- Readme.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Readme.md b/Readme.md index c05816d2d..d1c97090b 100644 --- a/Readme.md +++ b/Readme.md @@ -24,6 +24,16 @@ Unlike ITK's support of n-dimensional spatio-temporal images, SimpleITK supports SimpleITK is licensed under the [Apache License](http://www.opensource.org/licenses/apache2.0.php) in the [same way as ITK](https://www.itk.org/Wiki/ITK_Release_4/Licensing). +Acknowledgments +-------------- +SimpleITK development has been supported by: + +* The Intramural Research Program of the National Institutes of Health, National Institute of Allergy and Infectious Diseases. + +* The US National Library of Medicine under the American Recovery and Reinvestment Act (ARRA) and under the Intramural Research Program of the U.S. National Institutes of Health. + +* The Insight Software Consortium and the ITK user and developer communities. + How to Cite -------- From 6343902434a32d0333dea45aa8a0549c6ec6a2b3 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 21 Aug 2019 14:11:34 -0400 Subject: [PATCH 171/400] Update SimpleITK along release-4.13.2 git log --oneline v4.13.2..upstream/release-4.13 432dd1b9dc ENH: back-porting #1165 to support Visual Studio 2019 90ad651db4 BUG: Patch missing const qualifier to GDCM dircos_comp comparison a47c974f64 COMP: a fix for non-system double-conversion build ac26e1c55f Merge pull request #969 from dzenanz/release-4.13 3ee6f1e5c9 ENH: use double-conversion's CMake targets a0922944b4 Merge pull request #911 from thewtex/4.13-vxl-gcc-9 9825d546c4 COMP: Add VXL support for GCC 9 c2cfd2b6d1 COMP: VtkGlue module-Provide support for VTK new cmake targets 38c6ca0d76 COMP: Prevent duplicate wrapping ouput file specification --- SuperBuild/External_ITK.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index c90417b72..9e7fcb426 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,8 +52,8 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(ITK_GIT_TAG "v4.13.2" CACHE - STRING "Tag in ITK git repo") # release-4.13 +set(ITK_GIT_TAG "4a6e8c84198a741d18a2a39e616c26dda09b6686" CACHE + STRING "Tag in ITK git repo") # after 4.13.2 along release-4.13 mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From 23fde6d2211b2eb83caccd269249385126baefac Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 3 Jan 2019 15:31:38 -0500 Subject: [PATCH 172/400] Add script to upload binary data to data.kitware.com --- Utilities/UploadBinaryData.py | 206 ---------------------------------- Utilities/UploadBinaryData.sh | 193 +++++++++++++++++++++++++++++++ 2 files changed, 193 insertions(+), 206 deletions(-) delete mode 100755 Utilities/UploadBinaryData.py create mode 100755 Utilities/UploadBinaryData.sh diff --git a/Utilities/UploadBinaryData.py b/Utilities/UploadBinaryData.py deleted file mode 100755 index a8cab39fc..000000000 --- a/Utilities/UploadBinaryData.py +++ /dev/null @@ -1,206 +0,0 @@ -#!/usr/bin/env python - -from __future__ import print_function - -description = """ -Upload binary data to Midas. - -Since every local Git repository contains a copy of the entire project history, -it is important to avoid adding large binary files directly to the repository. -Large binary files added and removed through the history of a project will cause -the repository to become bloated, take up too much disk space, require excessive -time and bandwidth to download, etc. - -The solution to this problem adopted by this project is to store binary files, -such as images, in a separate location outside the repository, then download the -files at build time with CMake. - -A "content link" file containing an identifying MD5 checksum is stored in the -Git repository at the path where the file would exist with the ".md5" extension -added to the file. CMake will find these content link files at build time, -download them from a list of server resources, and create symlinks or copies of -the original files at the corresponding location in the build tree. - -The Midas server at - - https://midas3.kitware.com/midas/ - -is an ITK community resource where any community member can upload binary data -files. This script automates the upload of data to the server and generation of -the content link file. Before using this script, please go to the Midas -website, register, and join the ITK community. - -This script requires the Python module pydas: - - https://github.com/midasplatform/pydas - -which can be installed with:: - - pip install pydas - -Pass in the input binary files to be uploaded. These should be files -located in the SimpleITK source tree. They will be uploaded and -replaced with a *.md5 file that can be added to the current -commit with "git add -- path/to/file.md5". -""" - -import optparse -import hashlib -import os -import subprocess -import sys -import pydas - - -def connect_to_midas(email=None, api_key=None): - midas_url = 'https://midas3.kitware.com/midas/' - #pydas.login(url=midas_url, email=email, api_key=api_key) - try: - pydas.login(url=midas_url, email=email, api_key=api_key) - except: - print('Error occurred while logging in to ' + midas_url) - sys.exit(1) - session = pydas.session - communicator = session.communicator - return session, communicator - - -def upload_to_midas(input_file, output_file, folders, session, communicator): - # get the MD5 checksum - print('Computing MD5 checksum...') - md5 = hashlib.md5() - with open(input_file, 'rb') as fp: - for chunk in iter(lambda: fp.read(128 * md5.block_size), b''): - md5.update(chunk) - md5hash = md5.hexdigest() - print('Checksum: ' + md5hash) - - # upload to Midas - def get_child_folder(parent, child_name): - children = communicator.folder_children(session.token, - parent['folder_id']) - for folder in children['folders']: - if folder['name'] == child_name: - return folder - return None - itk_community = communicator.get_community_by_name('ITK') - itk_public = get_child_folder(itk_community, 'Public') - simpleitk = get_child_folder(itk_public, 'SimpleITK') - - current_folder = simpleitk - for folder in folders: - child_folder = get_child_folder(current_folder, folder) - if child_folder is None: - print('Creating folder: ' + folder) - current_folder = \ - communicator.create_folder(session.token, - folder, - current_folder['folder_id']) - else: - current_folder = child_folder - - # get the existing or create a new item to hold the file - item_name = os.path.basename(input_file) - item_id = None - current_folder_children = \ - communicator.folder_children(session.token, - current_folder['folder_id']) - if 'items' in current_folder_children: - for item in current_folder_children['items']: - if item['name'] == item_name: - item_id = item['item_id'] - break - - if item_id is None: - new_item = communicator.create_item(session.token, item_name, - current_folder['folder_id']) - item_id = new_item['item_id'] - - upload_token = communicator.generate_upload_token(session.token, - item_id, - item_name, - md5hash) - if upload_token != "": - communicator.perform_upload(upload_token, - item_name, - item_id=item_id, - revision='head', - filepath=input_file) - - # write the content link file - with open(output_file, 'w') as fp: - fp.write(md5hash) - fp.write('\n') - - -def find_git_dir(filepath): - """Find our best estimate of GIT_DIR to locate the root of the SimpleITK - repository.""" - filepath = os.path.abspath(filepath) - head, tail = os.path.split(filepath) - previous_head = '' - while head != previous_head: - if os.path.exists(os.path.join(head, '.git')): - return head - previous_head = head - head, tail = os.path.split(head) - print('Could not find the root of the SimpleITK repository!') - sys.exit(1) - - -def run(input_files, output_files, - email=None, api_key=None, - no_delete=False): - git_dir = find_git_dir(input_files[0]) - - git_email_cmd = subprocess.Popen(['git', 'config', 'user.email'], - cwd=git_dir, - stdout=subprocess.PIPE) - if git_email_cmd.wait() is 0: - git_email = git_email_cmd.stdout.readline().strip() - email_input = raw_input('Email [' + git_email + ']: ') - if email_input == '': - email = git_email - else: - email = email_input - - session, communicator = connect_to_midas(email, api_key) - - for ii in range(len(input_files)): - input_abspath = os.path.abspath(input_files[ii]) - folders = input_abspath[len(git_dir)+1:].split(os.path.sep)[:-1] - upload_to_midas(input_files[ii], output_files[ii], folders, - session, communicator) - - if not no_delete: - os.remove(input_files[ii]) - - -if __name__ == '__main__': - usage = "%prog [options] input1 input2 ... inputN" - parser = optparse.OptionParser(usage=usage) - parser.add_option('--api-key-file', '-k', dest='api_key_file', - help="A file that contains your Midas user's API key.") - parser.add_option('--email', '-e', - help="Email address associated with your Midas account.") - parser.add_option('--no-delete', '-n', action='store_true', - dest='no_delete', - help='Do not remove the input files after upload.') - (options, input_files) = parser.parse_args() - - if options.api_key_file: - with open(options.api_key_file, 'r') as fp: - api_key = fp.readline() - api_key = api_key.strip() - else: - api_key = None - - output_files = [] - for ii in range(len(input_files)): - output_files.append(input_files[ii] + '.md5') - - no_delete = options.no_delete - - run(input_files, output_files, - email=options.email, api_key=api_key, - no_delete=no_delete) diff --git a/Utilities/UploadBinaryData.sh b/Utilities/UploadBinaryData.sh new file mode 100755 index 000000000..50c99d31d --- /dev/null +++ b/Utilities/UploadBinaryData.sh @@ -0,0 +1,193 @@ +#!/usr/bin/env bash +#========================================================================== +# +# Copyright Insight Software Consortium +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#==========================================================================*/ + +# Utility functions +print_help() { +cat << EOF +Usage: $0 [--folder-id ] [ ...] + + +Use this script to upload binary testing data for SimpleITK and related projects. + +Binary data, e.g. test input images, are not stored in Git because they +will bloat a Git repository's size. + + +To use the script: + +1. Sign up for an account at https://data.kitware.com +2. Place the binary file at the desired location in the Git repository. +3. Run this script, and pass in the binary file(s) as arguments to script. +4. In test/CMakeLists.txt, use the sitk_add_test macro and reference the file + path with \`DATA\` and braces, e.g.: DATA{}. +5. Re-build SimpleITK, and the testing data will be downloaded into the build tree. + + +If a GIRDER_API_KEY environmental variable is not set, a prompt will appear +for your username and password. The API key can be created in the +data.kitware.com user account web browser interface. + + +The script will authenticate to data.kitware.com, upload the file to your +user account's Public folder, and create a *.sha512 CMake ExternalData +content link file. To specify a different folder, use the --folder flag. +After the content link has been created, add the *.sha512 file to your +git commit. The binary file will be removed from the source tree following +upload. +EOF +} + +die() { + echo "$@" 1>&2; exit 1 +} + +json_field() { + local key=$1 + local json=$2 + echo $json | awk 'BEGIN { FS="\""; RS="," }; { if ($2 == "'$key'") {print $4} }' +} + + +# Parse arguments +help=false +folder_id="" +while test $# -gt 0; +do + opt="$1"; + case "$opt" in + "-h"|"--help") + shift; + help=true + break;; + "-f"|"--folder-id") + shift; + folder_id="$1" + shift;; + *) + break;; + esac +done +binary_files="$@" + +if test "${binary_files}" = "" || $help; then + print_help + exit 1 +fi + + +# Check for required dependencies +if ! type curl > /dev/null; then + die "Please install the curl executable." +fi +if ! type wc > /dev/null; then + die "Please install the wc executable." +fi + + +# Authenticate +token="" +if test -n "${GIRDER_API_KEY}"; then + token_response=$(curl -s -X POST --header 'Content-Length: 0' --header 'Content-Type: application/json' --header 'Accept: application/json' "https://data.kitware.com/api/v1/api_key/token?key=${GIRDER_API_KEY}&duration=1" || die "Could not retrieve token from API key.") + token=$(json_field "token" "${token_response}") +fi +if test -z "${token}"; then + if ! type base64 > /dev/null; then + die "Please install the base64 executable." + fi + echo "Please provide your" + echo "" + echo " https://data.kitware.com" + echo "" + read -p "username: " username + read -p "password: " -s password + basic_content=$(echo -n "${username}:${password}" | base64) + token_response=$(curl -s -X GET --header "Girder-Authorization: Basic ${basic_content}" --header 'Accept: */*' --header 'Host: data.kitware.com' --header 'Referer: https://data.kitware.com' 'https://data.kitware.com/api/v1/user/authentication' || die "Could not retrieve token from username / password.") + token=$(json_field "token" "${token_response}") +fi +if test -z "${token}"; then + die "Could not authenticate to https://data.kitware.com" +fi + + +# Get user / folder +user_id_response=$(curl -s -X GET --header 'Accept: application/json' --header "Girder-Token: ${token}" 'https://data.kitware.com/api/v1/user/me' || die 'Could not get user id.') +user_id=$(json_field "_id" "${user_id_response}") + +if test -z "$folder_id"; then + folder_id_response=$(curl -s -X GET --header 'Accept: application/json' --header "Girder-Token: ${token}" "https://data.kitware.com/api/v1/folder?parentType=user&parentId=${user_id}&name=Public&limit=3&sort=lowerName&sortdir=1" || die 'Could not get folder id.') + folder_id=$(json_field "_id" "${folder_id_response}") +fi + + +# Upload files and create content links +generated_content_links="" +md5_content_link_conflicts="" +for binary_file in $binary_files; do + if test ! -e $binary_file; then + die "$binary_file does not exist." + fi + item_name=$(basename "$binary_file") + + create_item_response=$(curl -s -X POST --header 'Content-Length: 0' --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' --header "Girder-Token: ${token}" "https://data.kitware.com/api/v1/item?folderId=${folder_id}&name=${item_name}&description=SimpleITK%20testing%20data%20uploaded%20by%20SimpleITK%2FUtilities%2FUploadBinaryData.sh&reuseExisting=true" || die 'Could not create item.') + item_id=$(json_field "_id" "${create_item_response}") + + size=$(wc -c < "$binary_file" | sed 's/^[[:space:]]*//') + echo "Uploading ${item_name}..." + upload_file_response=$(curl -X POST --data-binary "@${binary_file}" --header 'Content-Type: application/json' --header 'Accept: application/json' --header "Girder-Token: ${token}" "https://data.kitware.com/api/v1/file?parentType=item&parentId=${item_id}&name=${item_name}&size=${size}" || die 'Could not upload file.') + file_id=$(json_field "_id" "${upload_file_response}") + + curl -s -X GET --output "${binary_file}.sha512" --header 'Accept: text/plain' --header "Girder-Token: ${token}" "https://data.kitware.com/api/v1/file/${file_id}/hashsum_file/sha512" || die 'Could not get file sha512sum.' + generated_content_links="$generated_content_links ${binary_file}.sha512" + if type cmake > /dev/null; then + cmake_sha512sum=$(cmake -E sha512sum "$binary_file" 2> /dev/null) + # If sufficient CMake version, ... + if test $? -eq 0; then + local_sha512=$(echo $cmake_sha512sum | awk '{print $1}') + remote_sha512=$(cat "${binary_file}.sha512") + if test "$local_sha512" != "$remote_sha512"; then + die "Local file hash does not match uploaded file hash." + fi + fi + fi + + md5_content_link="${binary_file}.md5" + if test -e "$md5_content_link"; then + md5_content_link_conflicts="$md5_content_link_conflicts $md5_content_link" + fi + rm $binary_file +done + + +# Recommend next steps +cat << EOF + +Testing data upload complete. + +Now run: + + git add --$generated_content_links + +EOF +if test -n "$md5_content_link_conflicts"; then +cat << EOF +and: + + git rm --$md5_content_link_conflicts +EOF +fi From dfae9b339abeb8cd1d481cb127822f6ff170f118 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 22 Aug 2019 14:12:00 -0400 Subject: [PATCH 173/400] Add support for sha512 data files to SourceTarball.bash The script now archives BOTH *.md5 and *.sha512 file into the data archive. [skip ci] --- Utilities/Maintenance/SourceTarball.bash | 68 +++++++++++++++++++++--- 1 file changed, 60 insertions(+), 8 deletions(-) diff --git a/Utilities/Maintenance/SourceTarball.bash b/Utilities/Maintenance/SourceTarball.bash index 70ee4902f..58452c549 100755 --- a/Utilities/Maintenance/SourceTarball.bash +++ b/Utilities/Maintenance/SourceTarball.bash @@ -35,24 +35,77 @@ return_pipe_status() { } find_data_objects() { + # Find all content links in the tree. git ls-tree --full-tree -r "$1" | - egrep '\.(md5)$' | + egrep '\.(md5|sha512)$' | while read mode type obj path; do case "$path" in *.md5) echo MD5/$(git cat-file blob $obj) ;; + *.sha512) echo SHA512/$(git cat-file blob $obj);; *) die "Unknown ExternalData content link: $path" ;; esac done | sort | uniq return_pipe_status } -validate_MD5() { - md5sum=$(cmake -E md5sum "$1" | sed 's/ .*//') && - if test "$md5sum" != "$2"; then - die "Object MD5/$2 is corrupt: $1" - fi +# Check for a tool to get MD5 sums from. +if type -p md5sum >/dev/null; then + readonly md5tool="md5sum" + readonly md5regex="s/ .*//" +elif type -p md5 >/dev/null; then + readonly md5tool="md5" + readonly md5regex="s/.*= //" +elif type -p cmake >/dev/null; then + readonly md5tool="cmake -E md5sum" + readonly md5regex="s/ .*//" +else + die "No 'md5sum' or 'md5' tool found." +fi + +compute_MD5() { + $md5tool "$1" | sed -e "$md5regex" } + +# Check for a tool to get SHA512 sums from. +if type -p sha512sum >/dev/null; then + readonly sha512tool="sha512sum" + readonly sha512regex="s/ .*//" +elif type -p cmake >/dev/null; then + readonly sha512tool="cmake -E sha512" + readonly sha512regex="s/ .*//" +else + die "No 'sha512sum' tool found." +fi + +compute_SHA512 () { + $sha512tool "$1" | sed -e "$sha512regex" +} + + +validate () { + local algo="$1" + readonly algo + shift + + local file="$1" + readonly file + shift + + local expected="$1" + readonly expected + shift + + local actual="$( "compute_$algo" "$file" )" + readonly actual + + + if ! [ "$actual" = "$expected" ]; then + die "Object $expected is corrupt: $file" + fi +} + + download_object() { algo="$1" ; hash="$2" ; path="$3" mkdir -p $(dirname "$path") && @@ -78,8 +131,7 @@ index_data_objects() { else download_object "$algo" "$hash" "$path" && file="$path" - fi && - validate_$algo "$file" "$hash" && + fi && validate "$algo" "$file" "$hash" && obj=$(git hash-object -t blob -w "$file") && echo "100644 blob $obj $path" || return From 885a8391d611986c92bb2190622e8a92dbfc2890 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 22 Aug 2019 16:24:07 -0400 Subject: [PATCH 174/400] Use always available CMake executable for zipping archive Available since CMake 3.3 the "format" option for the tar command allows for generation of zip archive. --- Wrapping/CSharp/dist/CMakeLists.txt | 91 ++++++++++++++--------------- 1 file changed, 44 insertions(+), 47 deletions(-) diff --git a/Wrapping/CSharp/dist/CMakeLists.txt b/Wrapping/CSharp/dist/CMakeLists.txt index 8966fe0f8..74b042ba4 100644 --- a/Wrapping/CSharp/dist/CMakeLists.txt +++ b/Wrapping/CSharp/dist/CMakeLists.txt @@ -2,65 +2,62 @@ # # CSharp Packaging # -if( Java_JAR_EXECUTABLE ) - set(_files "") - list( APPEND _files - ${SimpleITK_DOC_FILES} - "${CSHARP_BINARY_DIRECTORY}/SimpleITKCSharpManaged.dll" - ) +set(_files "") +list( APPEND _files + ${SimpleITK_DOC_FILES} + "${CSHARP_BINARY_DIRECTORY}/SimpleITKCSharpManaged.dll" + ) - if(NOT DEFINED SimpleITK_CSHARP_ARCH) - if(MSVC) - if (CMAKE_CL_64) - set(SimpleITK_CSHARP_ARCH "win64") - else() - set(SimpleITK_CSHARP_ARCH "win32") - endif() +if(NOT DEFINED SimpleITK_CSHARP_ARCH) + if(MSVC) + if (CMAKE_CL_64) + set(SimpleITK_CSHARP_ARCH "win64") else() - set(SimpleITK_CSHARP_ARCH "unknown") - endif() - - if(CSHARP_PLATFORM) - set(SimpleITK_CSHARP_ARCH "${SimpleITK_CSHARP_ARCH}-${CSHARP_PLATFORM}") + set(SimpleITK_CSHARP_ARCH "win32") endif() + else() + set(SimpleITK_CSHARP_ARCH "unknown") endif() - set( CSHARP_PACKAGE_STAGE_DIR "SimpleITK-${SimpleITK_VERSION}-CSharp-${SimpleITK_CSHARP_ARCH}") + if(CSHARP_PLATFORM) + set(SimpleITK_CSHARP_ARCH "${SimpleITK_CSHARP_ARCH}-${CSHARP_PLATFORM}") + endif() +endif() - add_custom_target( dist.CSharp - COMMENT "Creating CSharp package ${CSHARP_PACKAGE_STAGE_DIR}.zip" - DEPENDS SimpleITKCSharpManaged - ) +set( CSHARP_PACKAGE_STAGE_DIR "SimpleITK-${SimpleITK_VERSION}-CSharp-${SimpleITK_CSHARP_ARCH}") - add_custom_command( TARGET dist.CSharp - PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E remove_directory "${CSHARP_PACKAGE_STAGE_DIR}" - COMMAND ${CMAKE_COMMAND} -E make_directory "${CSHARP_PACKAGE_STAGE_DIR}" - COMMENT "Creating CSharp staging directory..." - ) +add_custom_target( dist.CSharp + COMMENT "Creating CSharp package ${CSHARP_PACKAGE_STAGE_DIR}.zip" + DEPENDS SimpleITKCSharpManaged + ) - foreach(_f ${_files}) - get_filename_component(_f_name ${_f} NAME ) - add_custom_command( TARGET dist.CSharp - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_f}" "${CSHARP_PACKAGE_STAGE_DIR}/${_f_name}" - COMMENT "Copying ${_f_name} to CSharp stage..." - ) - endforeach() +add_custom_command( TARGET dist.CSharp + PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E remove_directory "${CSHARP_PACKAGE_STAGE_DIR}" + COMMAND ${CMAKE_COMMAND} -E make_directory "${CSHARP_PACKAGE_STAGE_DIR}" + COMMENT "Creating CSharp staging directory..." + ) +foreach(_f ${_files}) + get_filename_component(_f_name ${_f} NAME ) add_custom_command( TARGET dist.CSharp POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CSHARP_PACKAGE_STAGE_DIR}" - COMMENT "Copying $ to CSharp stage..." -# COMMAND ${CMAKE_COMMAND} -E copy "$" "${CSHARP_PACKAGE_STAGE_DIR}" -# COMMENT "Copying $ to CSharp stage..." - - SimpleITKCSharpManaged - COMMAND ${Java_JAR_EXECUTABLE} cfM "${CSHARP_PACKAGE_STAGE_DIR}.zip" "${CSHARP_PACKAGE_STAGE_DIR}" - COMMENT "Packaging CSHARP distribution..." + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_f}" "${CSHARP_PACKAGE_STAGE_DIR}/${_f_name}" + COMMENT "Copying ${_f_name} to CSharp stage..." ) +endforeach() - add_dependencies( dist dist.CSharp ) +add_custom_command( TARGET dist.CSharp + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "$" "${CSHARP_PACKAGE_STAGE_DIR}" + COMMENT "Copying $ to CSharp stage..." + # COMMAND ${CMAKE_COMMAND} -E copy "$" "${CSHARP_PACKAGE_STAGE_DIR}" + # COMMENT "Copying $ to CSharp stage..." -endif() + SimpleITKCSharpManaged + COMMAND ${CMAKE_COMMAND} -E tar cf "${CSHARP_PACKAGE_STAGE_DIR}.zip" "${CSHARP_PACKAGE_STAGE_DIR}" + COMMENT "Packaging CSHARP distribution..." + ) + +add_dependencies( dist dist.CSharp ) From 50b6d3c7289c66bf7da2e34d6ca579ca1cf65e8e Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 20 Dec 2018 16:45:39 -0500 Subject: [PATCH 175/400] Use SHA512 for data file in R wrapping --- Wrapping/R/CMakeLists.txt | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Wrapping/R/CMakeLists.txt b/Wrapping/R/CMakeLists.txt index 39259b36d..e2bba8ae0 100644 --- a/Wrapping/R/CMakeLists.txt +++ b/Wrapping/R/CMakeLists.txt @@ -74,11 +74,14 @@ configure_file( # data store. include(sitkExternalData) -file( GLOB_RECURSE image_links RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/Packaging/SimpleITK/inst/extdata/*.md5" ) + +set(_algo "sha512") + +file( GLOB_RECURSE image_links RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/Packaging/SimpleITK/inst/extdata/*.${_algo}" ) foreach(link ${image_links}) - string( REGEX REPLACE "\\.md5$" "" link ${link} ) - ExternalData_Expand_Arguments( SimpleITKRpackageData + string( REGEX REPLACE "\\.${_algo}$" "" link ${link} ) + ExternalData_Expand_Arguments( SimpleITKRpackageData image_location DATA{${link}} ) @@ -89,11 +92,11 @@ endforeach() # The downloaded tar ball of documentation has been generated with # the "Utilities/GenerateDocs/SwigDocUpdate.sh". This documentation # should be generated for each release. -file( GLOB_RECURSE doc_links RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/Packaging/SimpleITK/man/*.md5" ) +file( GLOB_RECURSE doc_links RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/Packaging/SimpleITK/man/*.${_algo}" ) foreach(link ${doc_links}) - string( REGEX REPLACE "\\.md5$" "" link ${link} ) - ExternalData_Expand_Arguments( SimpleITKRpackageData + string( REGEX REPLACE "\\.${_algo}$" "" link ${link} ) + ExternalData_Expand_Arguments( SimpleITKRpackageData doc_location DATA{${link}} ) From 561dd8d581c702219d97bc37b71d829066adac47 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 23 Aug 2019 13:00:50 -0400 Subject: [PATCH 176/400] Use only sha512 data file remove md5 --- Documentation/docs/images/BuildPathConfiguration.jpg.md5 | 1 - Documentation/docs/images/EclipseConfigureBuildPath.jpg.md5 | 1 - Documentation/docs/images/ImageOriginAndSpacing.svg.md5 | 1 - Documentation/docs/images/ManagedLibrary.jpg.md5 | 1 - Documentation/docs/images/NativeLibraryProperties.jpg.md5 | 1 - Documentation/docs/images/NewVisualStudioProject.jpg.md5 | 1 - Documentation/docs/images/SimpleITKCSharpUnzip.jpg.md5 | 1 - .../docs/images/VisualStudioConfigurationManager.jpg.md5 | 1 - Documentation/docs/images/VisualStudioExample.jpg.md5 | 1 - Documentation/docs/images/imageJ.png.md5 | 1 - Documentation/docs/images/isbi.png.md5 | 1 - Documentation/docs/images/miccai.png.md5 | 1 - Documentation/docs/images/nonisotropicVsIsotropic.svg.md5 | 1 - Documentation/docs/images/simpleitk_logo.png.md5 | 1 - Documentation/docs/images/spatialRelationship.svg.md5 | 1 - Documentation/docs/images/spie.png.md5 | 1 - SuperBuild/ExternalSource/lua-5.1.5.tar.gz.md5 | 1 - SuperBuild/ExternalSource/pcre-8.40.tar.gz.md5 | 1 - SuperBuild/ExternalSource/swig-3.0.12.tar.gz.md5 | 1 - SuperBuild/ExternalSource/swigwin-3.0.12.zip.md5 | 1 - SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.md5 | 1 - Testing/Data/Baseline/BasicFilters_AbsImageFilter_float.nrrd.md5 | 1 - Testing/Data/Baseline/BasicFilters_AbsImageFilter_short.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_AbsImageFilter_vector.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_AcosImageFilter_defaults.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_AcosImageFilter_vector.nrrd.md5 | 1 - ..._AdaptiveHistogramEqualizationImageFilter_defaults.1.nrrd.md5 | 1 - ...rs_AdaptiveHistogramEqualizationImageFilter_defaults.nrrd.md5 | 1 - ...ers_AdaptiveHistogramEqualizationImageFilter_histo.1.nrrd.md5 | 1 - ...lters_AdaptiveHistogramEqualizationImageFilter_histo.nrrd.md5 | 1 - .../BasicFilters_AdditiveGaussianNoiseImageFilter_2d.nrrd.md5 | 1 - .../BasicFilters_AdditiveGaussianNoiseImageFilter_3d.nrrd.md5 | 1 - .../BasicFilters_AdditiveGaussianNoiseImageFilter_rgb.nrrd.md5 | 1 - .../BasicFilters_AntiAliasBinaryImageFilter_cthead.nrrd.md5 | 1 - ...rs_ApproximateSignedDistanceMapImageFilter_default.1.nrrd.md5 | 1 - ...ters_ApproximateSignedDistanceMapImageFilter_default.nrrd.md5 | 1 - ...proximateSignedDistanceMapImageFilter_modified_parms.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_AsinImageFilter_defaults.nrrd.md5 | 1 - .../Baseline/BasicFilters_Atan2ImageFilter_defaults.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_AtanImageFilter_defaults.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_AtanImageFilter_vector.nrrd.md5 | 1 - ...asicFilters_BSplineDecompositionImageFilter_defaults.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_BilateralImageFilter_3d.nrrd.md5 | 1 - .../Baseline/BasicFilters_BinaryMagnitudeImageFilter_3d.nrrd.md5 | 1 - ...ilters_BinaryMinMaxCurvatureFlowImageFilter_defaults.nrrd.md5 | 1 - ...cFilters_BinaryMinMaxCurvatureFlowImageFilter_longer.nrrd.md5 | 1 - .../BasicFilters_BoundedReciprocalImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_BoundedReciprocalImageFilter_vector.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_ClampImageFilter_double.nrrd.md5 | 1 - ...ters_CoherenceEnhancingDiffusionImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_CollidingFrontsImageFilter_around_dots.nrrd.md5 | 1 - .../BasicFilters_ComplexToModulusImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_ComplexToPhaseImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_ConvolutionImageFilter_defaults.nrrd.md5 | 1 - Testing/Data/Baseline/BasicFilters_CosImageFilter_float.nrrd.md5 | 1 - Testing/Data/Baseline/BasicFilters_CosImageFilter_short.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_CosImageFilter_vector.nrrd.md5 | 1 - ...rs_CurvatureAnisotropicDiffusionImageFilter_defaults.nrrd.md5 | 1 - ...ters_CurvatureAnisotropicDiffusionImageFilter_longer.nrrd.md5 | 1 - .../BasicFilters_CurvatureFlowImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_CurvatureFlowImageFilter_longer.nrrd.md5 | 1 - ...asicFilters_DanielssonDistanceMapImageFilter_default.nrrd.md5 | 1 - .../Baseline/BasicFilters_DemonsRegistrationFilter_2d.nrrd.md5 | 1 - ...asicFilters_DemonsRegistrationFilter_2d_with_initial.nrrd.md5 | 1 - .../BasicFilters_DerivativeImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_DerivativeImageFilter_zsecondorder.nrrd.md5 | 1 - ...asicFilters_DiffeomorphicDemonsRegistrationFilter_2d.nrrd.md5 | 1 - ...iffeomorphicDemonsRegistrationFilter_2d_with_initial.nrrd.md5 | 1 - ...BasicFilters_DilateObjectMorphologyImageFilter_float.nrrd.md5 | 1 - ...BasicFilters_DilateObjectMorphologyImageFilter_short.nrrd.md5 | 1 - ...Filters_DiscreteGaussianDerivativeImageFilter_float1.nrrd.md5 | 1 - ...lters_DiscreteGaussianDerivativeImageFilter_float_10.nrrd.md5 | 1 - ...lters_DiscreteGaussianDerivativeImageFilter_float_dx.nrrd.md5 | 1 - ...ters_DiscreteGaussianDerivativeImageFilter_float_dy2.nrrd.md5 | 1 - .../BasicFilters_DiscreteGaussianImageFilter_float.nrrd.md5 | 1 - .../BasicFilters_DiscreteGaussianImageFilter_short.nrrd.md5 | 1 - ...ilters_DisplacementFieldJacobianDeterminantFilter_2d.nrrd.md5 | 1 - ...isplacementFieldJacobianDeterminantFilter_2d_weights.nrrd.md5 | 1 - .../BasicFilters_DivideRealImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_EdgePotentialImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_ErodeObjectMorphologyImageFilter_float.nrrd.md5 | 1 - .../BasicFilters_ErodeObjectMorphologyImageFilter_short.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_ExpImageFilter_defaults.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_ExpImageFilter_vector.nrrd.md5 | 1 - .../BasicFilters_ExpNegativeImageFilter_defaults.nrrd.md5 | 1 - .../Baseline/BasicFilters_ExpNegativeImageFilter_vector.nrrd.md5 | 1 - .../Baseline/BasicFilters_ExpandImageFilter_Expand2x3.nrrd.md5 | 1 - .../BasicFilters_ExpandImageFilter_Interpolator_BSpline.nrrd.md5 | 1 - ...BasicFilters_ExpandImageFilter_Interpolator_Gaussian.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_ExpandImageFilter_Vector.nrrd.md5 | 1 - .../BasicFilters_FFTConvolutionImageFilter_defaults.1.nrrd.md5 | 1 - .../BasicFilters_FFTConvolutionImageFilter_defaults.nrrd.md5 | 1 - ...asicFilters_FFTNormalizedCorrelationImageFilter_3D.1.nrrd.md5 | 1 - .../BasicFilters_FFTNormalizedCorrelationImageFilter_3D.nrrd.md5 | 1 - ...ers_FFTNormalizedCorrelationImageFilter_EvenKernel.1.nrrd.md5 | 1 - ...lters_FFTNormalizedCorrelationImageFilter_EvenKernel.nrrd.md5 | 1 - ...lters_FFTNormalizedCorrelationImageFilter_defaults.1.nrrd.md5 | 1 - ...Filters_FFTNormalizedCorrelationImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_FastMarchingBaseImageFilter_default.nrrd.md5 | 1 - .../BasicFilters_FastMarchingImageFilter_default.nrrd.md5 | 1 - ...ilters_FastMarchingUpwindGradientImageFilter_default.nrrd.md5 | 1 - ...lters_FastSymmetricForcesDemonsRegistrationFilter_2d.nrrd.md5 | 1 - ...metricForcesDemonsRegistrationFilter_2d_with_initial.nrrd.md5 | 1 - .../BasicFilters_ForwardFFTImageFilter_defaults.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_GaborImageSource_default.nrrd.md5 | 1 - .../BasicFilters_GaborSourceImageFilter_default.nrrd.md5 | 1 - .../Baseline/BasicFilters_GaussianImageSource_default.nrrd.md5 | 1 - .../BasicFilters_GaussianSourceImageFilter_default.nrrd.md5 | 1 - ...rs_GeodesicActiveContourLevelSetImageFilter_defaults.nrrd.md5 | 1 - ...ers_GradientAnisotropicDiffusionImageFilter_defaults.nrrd.md5 | 1 - ...lters_GradientAnisotropicDiffusionImageFilter_longer.nrrd.md5 | 1 - .../Baseline/BasicFilters_GradientImageFilter_default.nrrd.md5 | 1 - .../BasicFilters_GradientImageFilter_default_float.nrrd.md5 | 1 - .../BasicFilters_GradientMagnitudeImageFilter_default.nrrd.md5 | 1 - ...radientMagnitudeRecursiveGaussianImageFilter_default.nrrd.md5 | 1 - ...Filters_GradientRecursiveGaussianImageFilter_default.nrrd.md5 | 1 - ...cFilters_GradientRecursiveGaussianImageFilter_vector.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_GridImageSource_default.nrrd.md5 | 1 - .../Baseline/BasicFilters_GridSourceImageFilter_default.nrrd.md5 | 1 - ...rs_HalfHermitianToRealInverseFFTImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_HistogramMatchingImageFilter_defaults.nrrd.md5 | 1 - ...icFilters_InverseDeconvolutionImageFilter_defaults.1.nrrd.md5 | 1 - ...asicFilters_InverseDeconvolutionImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_InverseDisplacementFieldImageFilter_2d.nrrd.md5 | 1 - .../BasicFilters_InverseFFTImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_InvertDisplacementFieldImageFilter_2d.nrrd.md5 | 1 - .../BasicFilters_IsoContourDistanceImageFilter_default.nrrd.md5 | 1 - ...ters_IterativeInverseDisplacementFieldImageFilter_2d.nrrd.md5 | 1 - ...Filters_LandweberDeconvolutionImageFilter_defaults.1.nrrd.md5 | 1 - ...icFilters_LandweberDeconvolutionImageFilter_defaults.nrrd.md5 | 1 - .../Baseline/BasicFilters_LaplacianImageFilter_default.nrrd.md5 | 1 - ...ilters_LaplacianRecursiveGaussianImageFilter_default.nrrd.md5 | 1 - ...ters_LaplacianSegmentationLevelSetImageFilter_cthead.nrrd.md5 | 1 - .../BasicFilters_LaplacianSharpeningImageFilter_default.nrrd.md5 | 1 - .../BasicFilters_LevelSetMotionRegistrationFilter_2d.nrrd.md5 | 1 - .../Baseline/BasicFilters_Log10ImageFilter_defaults.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_LogImageFilter_defaults.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_LogImageFilter_vector.nrrd.md5 | 1 - ...lters_MagnitudeAndPhaseToComplexImageFilter_defaults.nrrd.md5 | 1 - ...lters_MaskedFFTNormalizedCorrelationImageFilter_3D.1.nrrd.md5 | 1 - ...Filters_MaskedFFTNormalizedCorrelationImageFilter_3D.nrrd.md5 | 1 - ...MaskedFFTNormalizedCorrelationImageFilter_defaults.1.nrrd.md5 | 1 - ...s_MaskedFFTNormalizedCorrelationImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_MeanProjectionImageFilter_z_projection.nrrd.md5 | 1 - ...BasicFilters_MinMaxCurvatureFlowImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_MinMaxCurvatureFlowImageFilter_longer.nrrd.md5 | 1 - ...sicFilters_N4BiasFieldCorrectionImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_NeighborhoodConnectedImageFilter_2d.nrrd.md5 | 1 - .../Baseline/BasicFilters_NormalizeImageFilter_defaults.nrrd.md5 | 1 - .../Baseline/BasicFilters_NormalizeImageFilter_vector.nrrd.md5 | 1 - ...BasicFilters_NormalizeToConstantImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_NormalizeToConstantImageFilter_vector.nrrd.md5 | 1 - ...cFilters_NormalizedCorrelationImageFilter_EvenKernel.nrrd.md5 | 1 - ...sicFilters_NormalizedCorrelationImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_ObjectnessMeasureImageFilter_dark_dots.nrrd.md5 | 1 - .../BasicFilters_ObjectnessMeasureImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_PatchBasedDenoisingImageFilter_default.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_PowImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_PowToConstantImageFilter_defaults.nrrd.md5 | 1 - ...sicFilters_PowToConstantImageFilter_setting_constant.nrrd.md5 | 1 - ..._ProjectedLandweberDeconvolutionImageFilter_defaults.nrrd.md5 | 1 - ...rs_RealToHalfHermitianForwardFFTImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_RecursiveGaussianImageFilter_default.nrrd.md5 | 1 - .../BasicFilters_RecursiveGaussianImageFilter_rgb_image.nrrd.md5 | 1 - .../BasicFilters_ResampleImageFilter_bspline_resample.nrrd.md5 | 1 - .../Baseline/BasicFilters_ResampleImageFilter_defaults.nrrd.md5 | 1 - .../Baseline/BasicFilters_ResampleImageFilter_vector.nrrd.md5 | 1 - .../BasicFilters_ResampleImageFilter_wCastwInterpolator.nrrd.md5 | 1 - .../BasicFilters_RescaleIntensityImageFilter_3d.nrrd.md5 | 1 - ...ters_RichardsonLucyDeconvolutionImageFilter_defaults.nrrd.md5 | 1 - .../Baseline/BasicFilters_SLICImageFilter_gray_scale.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_SLICImageFilter_minimum.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_STAPLEImageFilter_basic.nrrd.md5 | 1 - .../BasicFilters_SaltAndPepperNoiseImageFilter_2d.nrrd.md5 | 1 - .../BasicFilters_SaltAndPepperNoiseImageFilter_3d.nrrd.md5 | 1 - .../BasicFilters_SaltAndPepperNoiseImageFilter_rgb.nrrd.md5 | 1 - ...ers_ScalarChanAndVeseDenseLevelSetImageFilter_cthead.nrrd.md5 | 1 - ...icFilters_ShapeDetectionLevelSetImageFilter_defaults.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_ShotNoiseImageFilter_2d.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_ShotNoiseImageFilter_3d.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_ShotNoiseImageFilter_rgb.nrrd.md5 | 1 - ...lters_SignedDanielssonDistanceMapImageFilter_default.nrrd.md5 | 1 - ...icFilters_SignedMaurerDistanceMapImageFilter_default.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_SinImageFilter_defaults.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_SinImageFilter_vector.nrrd.md5 | 1 - ...ilters_SmoothingRecursiveGaussianImageFilter_default.nrrd.md5 | 1 - ...ters_SmoothingRecursiveGaussianImageFilter_rgb_image.nrrd.md5 | 1 - .../BasicFilters_SobelEdgeDetectionImageFilter_defaults.nrrd.md5 | 1 - .../Baseline/BasicFilters_SpeckleNoiseImageFilter_2d.nrrd.md5 | 1 - .../Baseline/BasicFilters_SpeckleNoiseImageFilter_3d.nrrd.md5 | 1 - .../Baseline/BasicFilters_SpeckleNoiseImageFilter_rgb.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_SqrtImageFilter_defaults.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_SqrtImageFilter_vector.nrrd.md5 | 1 - ...cFilters_SquaredDifferenceImageFilter_2DStapleImages.nrrd.md5 | 1 - ...asicFilters_SquaredDifferenceImageFilter_Ramp_Short1.nrrd.md5 | 1 - ...asicFilters_SquaredDifferenceImageFilter_Ramp_Short2.nrrd.md5 | 1 - ..._StandardDeviationProjectionImageFilter_z_projection.nrrd.md5 | 1 - ...ilters_StochasticFractalDimensionImageFilter_default.nrrd.md5 | 1 - ...icFilters_StochasticFractalDimensionImageFilter_mask.nrrd.md5 | 1 - .../BasicFilters_SumProjectionImageFilter_z_projection.nrrd.md5 | 1 - ...icFilters_SymmetricForcesDemonsRegistrationFilter_2d.nrrd.md5 | 1 - ...metricForcesDemonsRegistrationFilter_2d_with_initial.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_TanImageFilter_defaults.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_TanImageFilter_vector.nrrd.md5 | 1 - .../BasicFilters_TernaryMagnitudeImageFilter_3d.nrrd.md5 | 1 - .../BasicFilters_TernaryMagnitudeSquaredImageFilter_3d.nrrd.md5 | 1 - ...ters_ThresholdSegmentationLevelSetImageFilter_cthead.nrrd.md5 | 1 - ...cFilters_TikhonovDeconvolutionImageFilter_defaults.1.nrrd.md5 | 1 - ...sicFilters_TikhonovDeconvolutionImageFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_TransformToDisplacementFieldFilter_32.nrrd.md5 | 1 - ...cFilters_TransformToDisplacementFieldFilter_defaults.nrrd.md5 | 1 - .../BasicFilters_UnsharpMaskImageFilter_default.nrrd.md5 | 1 - .../BasicFilters_UnsharpMaskImageFilter_local_contrast.nrrd.md5 | 1 - .../Baseline/BasicFilters_VectorMagnitudeImageFilter_3d.nrrd.md5 | 1 - .../Data/Baseline/BasicFilters_WarpImageFilter_cthead1.nrrd.md5 | 1 - Testing/Data/Baseline/BasicFilters_WarpImageFilter_vm.nrrd.md5 | 1 - ...sicFilters_WienerDeconvolutionImageFilter_defaults.1.nrrd.md5 | 1 - ...BasicFilters_WienerDeconvolutionImageFilter_defaults.nrrd.md5 | 1 - ...s_ZeroCrossingBasedEdgeDetectionImageFilter_defaults.nrrd.md5 | 1 - .../Data/Baseline/DemonsRegistration1Test_displacement.mha.md5 | 1 - .../Data/Baseline/DemonsRegistration2Test_displacement.mha.md5 | 1 - Testing/Data/Baseline/Example_SimpleDerivative.nrrd.md5 | 1 - Testing/Data/Baseline/Example_SimpleGaussian_2.0.nrrd.md5 | 1 - Testing/Data/Baseline/ImageRegistrationMethod3Test1.mha.md5 | 1 - Testing/Data/Baseline/ImageRegistrationMethod3Test2.mha.md5 | 1 - Testing/Data/Baseline/ImageRegistrationMethodBSpline1.1.mha.md5 | 1 - Testing/Data/Baseline/ImageRegistrationMethodBSpline1.mha.md5 | 1 - Testing/Data/Baseline/ImageRegistrationMethodBSpline2.1.mha.md5 | 1 - Testing/Data/Baseline/ImageRegistrationMethodBSpline2.mha.md5 | 1 - .../Data/Baseline/ImageRegistrationMethodDisplacement1.mha.md5 | 1 - .../Baseline/ImageRegistrationMethodDisplacement1Test2.mha.md5 | 1 - .../Data/Baseline/ImageRegistrationMethodExhaustiveTest1.mha.md5 | 1 - Testing/Data/Baseline/Registration_Resample_Resample.nrrd.md5 | 1 - Testing/Data/Baseline/displacement_-13x-17y.mha.md5 | 1 - Testing/Data/Baseline/displacement_13x17y.mha.md5 | 1 - Testing/Data/Input/2th_cthead1.mha.md5 | 1 - Testing/Data/Input/2th_cthead1.png.md5 | 1 - Testing/Data/Input/2th_cthead1_distance.nrrd.md5 | 1 - Testing/Data/Input/4D.nii.gz.md5 | 1 - Testing/Data/Input/BlackDots.png.md5 | 1 - Testing/Data/Input/BrainProtonDensitySlice.png.md5 | 1 - .../Input/BrainProtonDensitySlice20InitialDisplacement.mha.md5 | 1 - Testing/Data/Input/BrainProtonDensitySliceBSplined10.png.md5 | 1 - Testing/Data/Input/BrainProtonDensitySliceBorder20.png.md5 | 1 - Testing/Data/Input/BrainProtonDensitySliceBorder20Mask.png.md5 | 1 - Testing/Data/Input/BrainProtonDensitySliceR10X13Y17.png.md5 | 1 - Testing/Data/Input/BrainProtonDensitySliceR10X13Y17S12.png.md5 | 1 - Testing/Data/Input/BrainProtonDensitySliceShifted13x17y.png.md5 | 1 - Testing/Data/Input/BrainT1SliceBorder20.png.md5 | 1 - Testing/Data/Input/DeconvolutionInput.nrrd.md5 | 1 - Testing/Data/Input/DeconvolutionKernel.nrrd.md5 | 1 - Testing/Data/Input/DicomSeries/Image0075.dcm.md5 | 1 - Testing/Data/Input/DicomSeries/Image0076.dcm.md5 | 1 - Testing/Data/Input/DicomSeries/Image0077.dcm.md5 | 1 - Testing/Data/Input/Gaussian_1.5.nrrd.md5 | 1 - Testing/Data/Input/LargeWhiteCircle.nrrd.md5 | 1 - Testing/Data/Input/LargeWhiteCircle_Float.nrrd.md5 | 1 - Testing/Data/Input/OAS1_0001_MR1_mpr-1_anon.nrrd.md5 | 1 - Testing/Data/Input/OAS1_0002_MR1_mpr-1_anon.nrrd.md5 | 1 - Testing/Data/Input/RA-FFT-Complex.nrrd.md5 | 1 - Testing/Data/Input/RA-Float.nrrd.md5 | 1 - Testing/Data/Input/RA-Gradient.nrrd.md5 | 1 - Testing/Data/Input/RA-HalfFFT-Complex.nrrd.md5 | 1 - Testing/Data/Input/RA-Short.nrrd.md5 | 1 - Testing/Data/Input/RA-Slice-Float.nrrd.md5 | 1 - Testing/Data/Input/RA-Slice-Short.nrrd.md5 | 1 - Testing/Data/Input/RA-Slice-Short.png.md5 | 1 - Testing/Data/Input/Ramp-Down-Short.nrrd.md5 | 1 - Testing/Data/Input/Ramp-One-Zero-Float.nrrd.md5 | 1 - Testing/Data/Input/Ramp-Up-Short.nrrd.md5 | 1 - Testing/Data/Input/Ramp-Zero-One-Float.nrrd.md5 | 1 - Testing/Data/Input/STAPLE1-binary.png.md5 | 1 - Testing/Data/Input/STAPLE1.png.md5 | 1 - Testing/Data/Input/STAPLE2-binary.png.md5 | 1 - Testing/Data/Input/STAPLE2.png.md5 | 1 - Testing/Data/Input/SmallWhiteCircle.nrrd.md5 | 1 - Testing/Data/Input/SmallWhiteCircle_Float.nrrd.md5 | 1 - Testing/Data/Input/VM1111Shrink-RGB.png.md5 | 1 - Testing/Data/Input/VM1111Shrink-RGBFloat.nrrd.md5 | 1 - Testing/Data/Input/VM1111Shrink-RGBNorm.nrrd.md5 | 1 - Testing/Data/Input/VM1111Shrink-dis1.nrrd.md5 | 1 - Testing/Data/Input/VM1111Shrink-mask.png.md5 | 1 - Testing/Data/Input/WhiteDots.png.md5 | 1 - Testing/Data/Input/cthead1-Float.mha.md5 | 1 - Testing/Data/Input/cthead1-dis1.nrrd.md5 | 1 - Testing/Data/Input/cthead1-grad-mag.mha.md5 | 1 - Testing/Data/Input/cthead1-grad-mag.nrrd.md5 | 1 - Testing/Data/Input/cthead1-ls-seed.nrrd.md5 | 1 - Testing/Data/Input/cthead1-marker.png.md5 | 1 - Testing/Data/Input/cthead1-mask.png.md5 | 1 - Testing/Data/Input/cthead1-seed.png.md5 | 1 - Testing/Data/Input/cthead1.png.md5 | 1 - Testing/Data/Input/displacement.mha.md5 | 1 - Testing/Data/Input/fruit.png.md5 | 1 - Testing/Data/Input/noisy-vector-grid.nrrd.md5 | 1 - Testing/Data/Input/points_5d.mha.md5 | 1 - Testing/Data/Input/simple-label-b.png.md5 | 1 - Testing/Data/Input/simple-label-c.png.md5 | 1 - Testing/Data/Input/simple-label-d.png.md5 | 1 - Testing/Data/Input/simple-label-e.png.md5 | 1 - Testing/Data/Input/xforms/affine_i_3.txt.md5 | 1 - Testing/Data/Input/xforms/bspline_ceoff0.mha.md5 | 1 - Testing/Data/Input/xforms/composite_i_3.txt.md5 | 1 - Testing/Data/Input/xforms/displacement_-13x-17y.txt.md5 | 1 - Testing/Data/Input/xforms/i_3.txt.md5 | 1 - Testing/Data/Input/xforms/quaternion_rigid_i_3.txt.md5 | 1 - Testing/Data/Input/xforms/scale_i_3.txt.md5 | 1 - Testing/Data/Input/xforms/scale_logarithmic_i_3.txt.md5 | 1 - Testing/Data/Input/xforms/translation_-13x-17y.txt.md5 | 1 - Testing/Data/Input/xforms/translation_i_3.txt.md5 | 1 - Testing/Data/Input/xforms/versor_i_3.txt.md5 | 1 - .../R/Packaging/SimpleITK/inst/extdata/cthead1-Float.mha.md5 | 1 - Wrapping/R/Packaging/SimpleITK/inst/extdata/cthead1.png.md5 | 1 - Wrapping/R/Packaging/SimpleITK/man/sitkRdfiles.tar.gz.md5 | 1 - 314 files changed, 314 deletions(-) delete mode 100644 Documentation/docs/images/BuildPathConfiguration.jpg.md5 delete mode 100644 Documentation/docs/images/EclipseConfigureBuildPath.jpg.md5 delete mode 100644 Documentation/docs/images/ImageOriginAndSpacing.svg.md5 delete mode 100644 Documentation/docs/images/ManagedLibrary.jpg.md5 delete mode 100644 Documentation/docs/images/NativeLibraryProperties.jpg.md5 delete mode 100644 Documentation/docs/images/NewVisualStudioProject.jpg.md5 delete mode 100644 Documentation/docs/images/SimpleITKCSharpUnzip.jpg.md5 delete mode 100644 Documentation/docs/images/VisualStudioConfigurationManager.jpg.md5 delete mode 100644 Documentation/docs/images/VisualStudioExample.jpg.md5 delete mode 100644 Documentation/docs/images/imageJ.png.md5 delete mode 100644 Documentation/docs/images/isbi.png.md5 delete mode 100644 Documentation/docs/images/miccai.png.md5 delete mode 100644 Documentation/docs/images/nonisotropicVsIsotropic.svg.md5 delete mode 100644 Documentation/docs/images/simpleitk_logo.png.md5 delete mode 100644 Documentation/docs/images/spatialRelationship.svg.md5 delete mode 100644 Documentation/docs/images/spie.png.md5 delete mode 100644 SuperBuild/ExternalSource/lua-5.1.5.tar.gz.md5 delete mode 100644 SuperBuild/ExternalSource/pcre-8.40.tar.gz.md5 delete mode 100644 SuperBuild/ExternalSource/swig-3.0.12.tar.gz.md5 delete mode 100644 SuperBuild/ExternalSource/swigwin-3.0.12.zip.md5 delete mode 100644 SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AbsImageFilter_float.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AbsImageFilter_short.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AbsImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AcosImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AcosImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_defaults.1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_histo.1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_histo.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AdditiveGaussianNoiseImageFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AdditiveGaussianNoiseImageFilter_3d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AdditiveGaussianNoiseImageFilter_rgb.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AntiAliasBinaryImageFilter_cthead.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ApproximateSignedDistanceMapImageFilter_default.1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ApproximateSignedDistanceMapImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ApproximateSignedDistanceMapImageFilter_modified_parms.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AsinImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_Atan2ImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AtanImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_AtanImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_BSplineDecompositionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_BilateralImageFilter_3d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_BinaryMagnitudeImageFilter_3d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_BinaryMinMaxCurvatureFlowImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_BinaryMinMaxCurvatureFlowImageFilter_longer.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_BoundedReciprocalImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_BoundedReciprocalImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ClampImageFilter_double.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_CoherenceEnhancingDiffusionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_CollidingFrontsImageFilter_around_dots.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ComplexToModulusImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ComplexToPhaseImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ConvolutionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_CosImageFilter_float.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_CosImageFilter_short.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_CosImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_CurvatureAnisotropicDiffusionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_CurvatureAnisotropicDiffusionImageFilter_longer.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_CurvatureFlowImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_CurvatureFlowImageFilter_longer.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DanielssonDistanceMapImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DemonsRegistrationFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DemonsRegistrationFilter_2d_with_initial.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DerivativeImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DerivativeImageFilter_zsecondorder.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DiffeomorphicDemonsRegistrationFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DiffeomorphicDemonsRegistrationFilter_2d_with_initial.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DilateObjectMorphologyImageFilter_float.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DilateObjectMorphologyImageFilter_short.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float_10.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float_dx.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float_dy2.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DiscreteGaussianImageFilter_float.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DiscreteGaussianImageFilter_short.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DisplacementFieldJacobianDeterminantFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DisplacementFieldJacobianDeterminantFilter_2d_weights.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_DivideRealImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_EdgePotentialImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ErodeObjectMorphologyImageFilter_float.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ErodeObjectMorphologyImageFilter_short.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ExpImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ExpImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ExpNegativeImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ExpNegativeImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Expand2x3.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Interpolator_BSpline.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Interpolator_Gaussian.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_FFTConvolutionImageFilter_defaults.1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_FFTConvolutionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_3D.1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_3D.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_EvenKernel.1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_EvenKernel.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_defaults.1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_FastMarchingBaseImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_FastMarchingImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_FastMarchingUpwindGradientImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_FastSymmetricForcesDemonsRegistrationFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_FastSymmetricForcesDemonsRegistrationFilter_2d_with_initial.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ForwardFFTImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GaborImageSource_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GaborSourceImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GaussianImageSource_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GaussianSourceImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GeodesicActiveContourLevelSetImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GradientAnisotropicDiffusionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GradientAnisotropicDiffusionImageFilter_longer.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GradientImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GradientImageFilter_default_float.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GradientMagnitudeImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GradientMagnitudeRecursiveGaussianImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GradientRecursiveGaussianImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GradientRecursiveGaussianImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GridImageSource_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_GridSourceImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_HalfHermitianToRealInverseFFTImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_HistogramMatchingImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_InverseDeconvolutionImageFilter_defaults.1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_InverseDeconvolutionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_InverseDisplacementFieldImageFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_InverseFFTImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_InvertDisplacementFieldImageFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_IsoContourDistanceImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_IterativeInverseDisplacementFieldImageFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_LandweberDeconvolutionImageFilter_defaults.1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_LandweberDeconvolutionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_LaplacianImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_LaplacianRecursiveGaussianImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_LaplacianSegmentationLevelSetImageFilter_cthead.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_LaplacianSharpeningImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_LevelSetMotionRegistrationFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_Log10ImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_LogImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_LogImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_MagnitudeAndPhaseToComplexImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_3D.1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_3D.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_defaults.1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_MeanProjectionImageFilter_z_projection.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_MinMaxCurvatureFlowImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_MinMaxCurvatureFlowImageFilter_longer.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_N4BiasFieldCorrectionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_NeighborhoodConnectedImageFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_NormalizeImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_NormalizeImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_NormalizeToConstantImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_NormalizeToConstantImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_NormalizedCorrelationImageFilter_EvenKernel.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_NormalizedCorrelationImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ObjectnessMeasureImageFilter_dark_dots.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ObjectnessMeasureImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_PatchBasedDenoisingImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_PowImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_PowToConstantImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_PowToConstantImageFilter_setting_constant.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ProjectedLandweberDeconvolutionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_RealToHalfHermitianForwardFFTImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_RecursiveGaussianImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_RecursiveGaussianImageFilter_rgb_image.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ResampleImageFilter_bspline_resample.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ResampleImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ResampleImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ResampleImageFilter_wCastwInterpolator.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_RescaleIntensityImageFilter_3d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_RichardsonLucyDeconvolutionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SLICImageFilter_gray_scale.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SLICImageFilter_minimum.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_STAPLEImageFilter_basic.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SaltAndPepperNoiseImageFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SaltAndPepperNoiseImageFilter_3d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SaltAndPepperNoiseImageFilter_rgb.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ScalarChanAndVeseDenseLevelSetImageFilter_cthead.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ShapeDetectionLevelSetImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ShotNoiseImageFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ShotNoiseImageFilter_3d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ShotNoiseImageFilter_rgb.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SignedDanielssonDistanceMapImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SignedMaurerDistanceMapImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SinImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SinImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SmoothingRecursiveGaussianImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SmoothingRecursiveGaussianImageFilter_rgb_image.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SobelEdgeDetectionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SpeckleNoiseImageFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SpeckleNoiseImageFilter_3d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SpeckleNoiseImageFilter_rgb.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SqrtImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SqrtImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SquaredDifferenceImageFilter_2DStapleImages.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SquaredDifferenceImageFilter_Ramp_Short1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SquaredDifferenceImageFilter_Ramp_Short2.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_StandardDeviationProjectionImageFilter_z_projection.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_StochasticFractalDimensionImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_StochasticFractalDimensionImageFilter_mask.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SumProjectionImageFilter_z_projection.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SymmetricForcesDemonsRegistrationFilter_2d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_SymmetricForcesDemonsRegistrationFilter_2d_with_initial.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_TanImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_TanImageFilter_vector.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_TernaryMagnitudeImageFilter_3d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_TernaryMagnitudeSquaredImageFilter_3d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ThresholdSegmentationLevelSetImageFilter_cthead.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_TikhonovDeconvolutionImageFilter_defaults.1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_TikhonovDeconvolutionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_TransformToDisplacementFieldFilter_32.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_TransformToDisplacementFieldFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_UnsharpMaskImageFilter_default.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_UnsharpMaskImageFilter_local_contrast.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_VectorMagnitudeImageFilter_3d.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_WarpImageFilter_cthead1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_WarpImageFilter_vm.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_WienerDeconvolutionImageFilter_defaults.1.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_WienerDeconvolutionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/BasicFilters_ZeroCrossingBasedEdgeDetectionImageFilter_defaults.nrrd.md5 delete mode 100644 Testing/Data/Baseline/DemonsRegistration1Test_displacement.mha.md5 delete mode 100644 Testing/Data/Baseline/DemonsRegistration2Test_displacement.mha.md5 delete mode 100644 Testing/Data/Baseline/Example_SimpleDerivative.nrrd.md5 delete mode 100644 Testing/Data/Baseline/Example_SimpleGaussian_2.0.nrrd.md5 delete mode 100644 Testing/Data/Baseline/ImageRegistrationMethod3Test1.mha.md5 delete mode 100644 Testing/Data/Baseline/ImageRegistrationMethod3Test2.mha.md5 delete mode 100644 Testing/Data/Baseline/ImageRegistrationMethodBSpline1.1.mha.md5 delete mode 100644 Testing/Data/Baseline/ImageRegistrationMethodBSpline1.mha.md5 delete mode 100644 Testing/Data/Baseline/ImageRegistrationMethodBSpline2.1.mha.md5 delete mode 100644 Testing/Data/Baseline/ImageRegistrationMethodBSpline2.mha.md5 delete mode 100644 Testing/Data/Baseline/ImageRegistrationMethodDisplacement1.mha.md5 delete mode 100644 Testing/Data/Baseline/ImageRegistrationMethodDisplacement1Test2.mha.md5 delete mode 100644 Testing/Data/Baseline/ImageRegistrationMethodExhaustiveTest1.mha.md5 delete mode 100644 Testing/Data/Baseline/Registration_Resample_Resample.nrrd.md5 delete mode 100644 Testing/Data/Baseline/displacement_-13x-17y.mha.md5 delete mode 100644 Testing/Data/Baseline/displacement_13x17y.mha.md5 delete mode 100644 Testing/Data/Input/2th_cthead1.mha.md5 delete mode 100644 Testing/Data/Input/2th_cthead1.png.md5 delete mode 100644 Testing/Data/Input/2th_cthead1_distance.nrrd.md5 delete mode 100644 Testing/Data/Input/4D.nii.gz.md5 delete mode 100644 Testing/Data/Input/BlackDots.png.md5 delete mode 100644 Testing/Data/Input/BrainProtonDensitySlice.png.md5 delete mode 100644 Testing/Data/Input/BrainProtonDensitySlice20InitialDisplacement.mha.md5 delete mode 100644 Testing/Data/Input/BrainProtonDensitySliceBSplined10.png.md5 delete mode 100644 Testing/Data/Input/BrainProtonDensitySliceBorder20.png.md5 delete mode 100644 Testing/Data/Input/BrainProtonDensitySliceBorder20Mask.png.md5 delete mode 100644 Testing/Data/Input/BrainProtonDensitySliceR10X13Y17.png.md5 delete mode 100644 Testing/Data/Input/BrainProtonDensitySliceR10X13Y17S12.png.md5 delete mode 100644 Testing/Data/Input/BrainProtonDensitySliceShifted13x17y.png.md5 delete mode 100644 Testing/Data/Input/BrainT1SliceBorder20.png.md5 delete mode 100644 Testing/Data/Input/DeconvolutionInput.nrrd.md5 delete mode 100644 Testing/Data/Input/DeconvolutionKernel.nrrd.md5 delete mode 100644 Testing/Data/Input/DicomSeries/Image0075.dcm.md5 delete mode 100644 Testing/Data/Input/DicomSeries/Image0076.dcm.md5 delete mode 100644 Testing/Data/Input/DicomSeries/Image0077.dcm.md5 delete mode 100644 Testing/Data/Input/Gaussian_1.5.nrrd.md5 delete mode 100644 Testing/Data/Input/LargeWhiteCircle.nrrd.md5 delete mode 100644 Testing/Data/Input/LargeWhiteCircle_Float.nrrd.md5 delete mode 100644 Testing/Data/Input/OAS1_0001_MR1_mpr-1_anon.nrrd.md5 delete mode 100644 Testing/Data/Input/OAS1_0002_MR1_mpr-1_anon.nrrd.md5 delete mode 100644 Testing/Data/Input/RA-FFT-Complex.nrrd.md5 delete mode 100644 Testing/Data/Input/RA-Float.nrrd.md5 delete mode 100644 Testing/Data/Input/RA-Gradient.nrrd.md5 delete mode 100644 Testing/Data/Input/RA-HalfFFT-Complex.nrrd.md5 delete mode 100644 Testing/Data/Input/RA-Short.nrrd.md5 delete mode 100644 Testing/Data/Input/RA-Slice-Float.nrrd.md5 delete mode 100644 Testing/Data/Input/RA-Slice-Short.nrrd.md5 delete mode 100644 Testing/Data/Input/RA-Slice-Short.png.md5 delete mode 100644 Testing/Data/Input/Ramp-Down-Short.nrrd.md5 delete mode 100644 Testing/Data/Input/Ramp-One-Zero-Float.nrrd.md5 delete mode 100644 Testing/Data/Input/Ramp-Up-Short.nrrd.md5 delete mode 100644 Testing/Data/Input/Ramp-Zero-One-Float.nrrd.md5 delete mode 100644 Testing/Data/Input/STAPLE1-binary.png.md5 delete mode 100644 Testing/Data/Input/STAPLE1.png.md5 delete mode 100644 Testing/Data/Input/STAPLE2-binary.png.md5 delete mode 100644 Testing/Data/Input/STAPLE2.png.md5 delete mode 100644 Testing/Data/Input/SmallWhiteCircle.nrrd.md5 delete mode 100644 Testing/Data/Input/SmallWhiteCircle_Float.nrrd.md5 delete mode 100644 Testing/Data/Input/VM1111Shrink-RGB.png.md5 delete mode 100644 Testing/Data/Input/VM1111Shrink-RGBFloat.nrrd.md5 delete mode 100644 Testing/Data/Input/VM1111Shrink-RGBNorm.nrrd.md5 delete mode 100644 Testing/Data/Input/VM1111Shrink-dis1.nrrd.md5 delete mode 100644 Testing/Data/Input/VM1111Shrink-mask.png.md5 delete mode 100644 Testing/Data/Input/WhiteDots.png.md5 delete mode 100644 Testing/Data/Input/cthead1-Float.mha.md5 delete mode 100644 Testing/Data/Input/cthead1-dis1.nrrd.md5 delete mode 100644 Testing/Data/Input/cthead1-grad-mag.mha.md5 delete mode 100644 Testing/Data/Input/cthead1-grad-mag.nrrd.md5 delete mode 100644 Testing/Data/Input/cthead1-ls-seed.nrrd.md5 delete mode 100644 Testing/Data/Input/cthead1-marker.png.md5 delete mode 100644 Testing/Data/Input/cthead1-mask.png.md5 delete mode 100644 Testing/Data/Input/cthead1-seed.png.md5 delete mode 100644 Testing/Data/Input/cthead1.png.md5 delete mode 100644 Testing/Data/Input/displacement.mha.md5 delete mode 100644 Testing/Data/Input/fruit.png.md5 delete mode 100644 Testing/Data/Input/noisy-vector-grid.nrrd.md5 delete mode 100644 Testing/Data/Input/points_5d.mha.md5 delete mode 100644 Testing/Data/Input/simple-label-b.png.md5 delete mode 100644 Testing/Data/Input/simple-label-c.png.md5 delete mode 100644 Testing/Data/Input/simple-label-d.png.md5 delete mode 100644 Testing/Data/Input/simple-label-e.png.md5 delete mode 100644 Testing/Data/Input/xforms/affine_i_3.txt.md5 delete mode 100644 Testing/Data/Input/xforms/bspline_ceoff0.mha.md5 delete mode 100644 Testing/Data/Input/xforms/composite_i_3.txt.md5 delete mode 100644 Testing/Data/Input/xforms/displacement_-13x-17y.txt.md5 delete mode 100644 Testing/Data/Input/xforms/i_3.txt.md5 delete mode 100644 Testing/Data/Input/xforms/quaternion_rigid_i_3.txt.md5 delete mode 100644 Testing/Data/Input/xforms/scale_i_3.txt.md5 delete mode 100644 Testing/Data/Input/xforms/scale_logarithmic_i_3.txt.md5 delete mode 100644 Testing/Data/Input/xforms/translation_-13x-17y.txt.md5 delete mode 100644 Testing/Data/Input/xforms/translation_i_3.txt.md5 delete mode 100644 Testing/Data/Input/xforms/versor_i_3.txt.md5 delete mode 100644 Wrapping/R/Packaging/SimpleITK/inst/extdata/cthead1-Float.mha.md5 delete mode 100644 Wrapping/R/Packaging/SimpleITK/inst/extdata/cthead1.png.md5 delete mode 100644 Wrapping/R/Packaging/SimpleITK/man/sitkRdfiles.tar.gz.md5 diff --git a/Documentation/docs/images/BuildPathConfiguration.jpg.md5 b/Documentation/docs/images/BuildPathConfiguration.jpg.md5 deleted file mode 100644 index 6c9c68b0f..000000000 --- a/Documentation/docs/images/BuildPathConfiguration.jpg.md5 +++ /dev/null @@ -1 +0,0 @@ -0230c21833c951b31f46ceed2ed1a825 diff --git a/Documentation/docs/images/EclipseConfigureBuildPath.jpg.md5 b/Documentation/docs/images/EclipseConfigureBuildPath.jpg.md5 deleted file mode 100644 index e878f0852..000000000 --- a/Documentation/docs/images/EclipseConfigureBuildPath.jpg.md5 +++ /dev/null @@ -1 +0,0 @@ -3be1b23e16f72eb96989dbf93bd7d7a8 diff --git a/Documentation/docs/images/ImageOriginAndSpacing.svg.md5 b/Documentation/docs/images/ImageOriginAndSpacing.svg.md5 deleted file mode 100644 index 44413faca..000000000 --- a/Documentation/docs/images/ImageOriginAndSpacing.svg.md5 +++ /dev/null @@ -1 +0,0 @@ -bf725d73b86f450662ff9df55532f631 diff --git a/Documentation/docs/images/ManagedLibrary.jpg.md5 b/Documentation/docs/images/ManagedLibrary.jpg.md5 deleted file mode 100644 index 91cef2c99..000000000 --- a/Documentation/docs/images/ManagedLibrary.jpg.md5 +++ /dev/null @@ -1 +0,0 @@ -e20de331dd26f57d7c9a2032f5060d14 diff --git a/Documentation/docs/images/NativeLibraryProperties.jpg.md5 b/Documentation/docs/images/NativeLibraryProperties.jpg.md5 deleted file mode 100644 index d6f2d4e0e..000000000 --- a/Documentation/docs/images/NativeLibraryProperties.jpg.md5 +++ /dev/null @@ -1 +0,0 @@ -fdc4185dd464e978d45dea3a0f685539 diff --git a/Documentation/docs/images/NewVisualStudioProject.jpg.md5 b/Documentation/docs/images/NewVisualStudioProject.jpg.md5 deleted file mode 100644 index d796af266..000000000 --- a/Documentation/docs/images/NewVisualStudioProject.jpg.md5 +++ /dev/null @@ -1 +0,0 @@ -28be5758db37f69c242b23ef6f8b2517 diff --git a/Documentation/docs/images/SimpleITKCSharpUnzip.jpg.md5 b/Documentation/docs/images/SimpleITKCSharpUnzip.jpg.md5 deleted file mode 100644 index 2770c2d7b..000000000 --- a/Documentation/docs/images/SimpleITKCSharpUnzip.jpg.md5 +++ /dev/null @@ -1 +0,0 @@ -596ec27054a6ec4011a06994fc6f5d3e diff --git a/Documentation/docs/images/VisualStudioConfigurationManager.jpg.md5 b/Documentation/docs/images/VisualStudioConfigurationManager.jpg.md5 deleted file mode 100644 index 8bf784487..000000000 --- a/Documentation/docs/images/VisualStudioConfigurationManager.jpg.md5 +++ /dev/null @@ -1 +0,0 @@ -9688985243bfd3184feb2b2324f76f7a diff --git a/Documentation/docs/images/VisualStudioExample.jpg.md5 b/Documentation/docs/images/VisualStudioExample.jpg.md5 deleted file mode 100644 index e2dd6ce72..000000000 --- a/Documentation/docs/images/VisualStudioExample.jpg.md5 +++ /dev/null @@ -1 +0,0 @@ -dfd609cc4c05ab56bc63d07c8c61927b diff --git a/Documentation/docs/images/imageJ.png.md5 b/Documentation/docs/images/imageJ.png.md5 deleted file mode 100644 index 6612bd3be..000000000 --- a/Documentation/docs/images/imageJ.png.md5 +++ /dev/null @@ -1 +0,0 @@ -18d541873a9dd2426348240282969658 diff --git a/Documentation/docs/images/isbi.png.md5 b/Documentation/docs/images/isbi.png.md5 deleted file mode 100644 index 24ea39638..000000000 --- a/Documentation/docs/images/isbi.png.md5 +++ /dev/null @@ -1 +0,0 @@ -f24da8033eccaf621b7b252669003609 diff --git a/Documentation/docs/images/miccai.png.md5 b/Documentation/docs/images/miccai.png.md5 deleted file mode 100644 index 41856f848..000000000 --- a/Documentation/docs/images/miccai.png.md5 +++ /dev/null @@ -1 +0,0 @@ -cae0f33349bfe32356d30dcdd5668f1a diff --git a/Documentation/docs/images/nonisotropicVsIsotropic.svg.md5 b/Documentation/docs/images/nonisotropicVsIsotropic.svg.md5 deleted file mode 100644 index a0b1dfdc1..000000000 --- a/Documentation/docs/images/nonisotropicVsIsotropic.svg.md5 +++ /dev/null @@ -1 +0,0 @@ -4dcf820ef47c435190900a38f22f550e diff --git a/Documentation/docs/images/simpleitk_logo.png.md5 b/Documentation/docs/images/simpleitk_logo.png.md5 deleted file mode 100644 index 527f0548b..000000000 --- a/Documentation/docs/images/simpleitk_logo.png.md5 +++ /dev/null @@ -1 +0,0 @@ -94ce12d0af1dbae1652060a3b17cfc20 diff --git a/Documentation/docs/images/spatialRelationship.svg.md5 b/Documentation/docs/images/spatialRelationship.svg.md5 deleted file mode 100644 index c66f1d6f5..000000000 --- a/Documentation/docs/images/spatialRelationship.svg.md5 +++ /dev/null @@ -1 +0,0 @@ -ff80e0d8d3eac481a8e0d62d19e45fdf diff --git a/Documentation/docs/images/spie.png.md5 b/Documentation/docs/images/spie.png.md5 deleted file mode 100644 index da2ae99db..000000000 --- a/Documentation/docs/images/spie.png.md5 +++ /dev/null @@ -1 +0,0 @@ -9b06d1aaf85e5b99d53e553a3157b6d3 diff --git a/SuperBuild/ExternalSource/lua-5.1.5.tar.gz.md5 b/SuperBuild/ExternalSource/lua-5.1.5.tar.gz.md5 deleted file mode 100644 index d8c15cd25..000000000 --- a/SuperBuild/ExternalSource/lua-5.1.5.tar.gz.md5 +++ /dev/null @@ -1 +0,0 @@ -2e115fe26e435e33b0d5c022e4490567 diff --git a/SuperBuild/ExternalSource/pcre-8.40.tar.gz.md5 b/SuperBuild/ExternalSource/pcre-8.40.tar.gz.md5 deleted file mode 100644 index 64a5eaf31..000000000 --- a/SuperBuild/ExternalSource/pcre-8.40.tar.gz.md5 +++ /dev/null @@ -1 +0,0 @@ -890c808122bd90f398e6bc40ec862102 diff --git a/SuperBuild/ExternalSource/swig-3.0.12.tar.gz.md5 b/SuperBuild/ExternalSource/swig-3.0.12.tar.gz.md5 deleted file mode 100644 index fa68e9d52..000000000 --- a/SuperBuild/ExternalSource/swig-3.0.12.tar.gz.md5 +++ /dev/null @@ -1 +0,0 @@ -82133dfa7bba75ff9ad98a7046be687c diff --git a/SuperBuild/ExternalSource/swigwin-3.0.12.zip.md5 b/SuperBuild/ExternalSource/swigwin-3.0.12.zip.md5 deleted file mode 100644 index 37762aac2..000000000 --- a/SuperBuild/ExternalSource/swigwin-3.0.12.zip.md5 +++ /dev/null @@ -1 +0,0 @@ -a49524dad2c91ae1920974e7062bfc93 diff --git a/SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.md5 b/SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.md5 deleted file mode 100644 index caaa89aee..000000000 --- a/SuperBuild/ExternalSource/virtualenv-15.1.0.tar.gz.md5 +++ /dev/null @@ -1 +0,0 @@ -44e19f4134906fe2d75124427dc9b716 diff --git a/Testing/Data/Baseline/BasicFilters_AbsImageFilter_float.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AbsImageFilter_float.nrrd.md5 deleted file mode 100644 index fe6932a8f..000000000 --- a/Testing/Data/Baseline/BasicFilters_AbsImageFilter_float.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -1b5092c4cb11f846977f1fc175accd3c \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_AbsImageFilter_short.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AbsImageFilter_short.nrrd.md5 deleted file mode 100644 index 74b47649a..000000000 --- a/Testing/Data/Baseline/BasicFilters_AbsImageFilter_short.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -bbe245e3cbf925edcf5d023203bd6b82 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_AbsImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AbsImageFilter_vector.nrrd.md5 deleted file mode 100644 index 362cac1e1..000000000 --- a/Testing/Data/Baseline/BasicFilters_AbsImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -b7634fc4ab8598e937f2245d15f4155c \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_AcosImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AcosImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 0091b6555..000000000 --- a/Testing/Data/Baseline/BasicFilters_AcosImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -d34537916d8ca912bf7632d2353b595f \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_AcosImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AcosImageFilter_vector.nrrd.md5 deleted file mode 100644 index 6bb65eb45..000000000 --- a/Testing/Data/Baseline/BasicFilters_AcosImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2d1218cbfb433ab0412b90ac26702136 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_defaults.1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_defaults.1.nrrd.md5 deleted file mode 100644 index 36476f9d4..000000000 --- a/Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_defaults.1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -8484d918ce9f99837e96d7efeba7e848 diff --git a/Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 512181d92..000000000 --- a/Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -b7bd29a3ad27c03d22bb1877e51b5922 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_histo.1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_histo.1.nrrd.md5 deleted file mode 100644 index 5fbb5c248..000000000 --- a/Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_histo.1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -fe2ea78da192cf9dc2eb1826063e761b diff --git a/Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_histo.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_histo.nrrd.md5 deleted file mode 100644 index acf152d76..000000000 --- a/Testing/Data/Baseline/BasicFilters_AdaptiveHistogramEqualizationImageFilter_histo.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -cb1101685e7d817ee6be4eeb948a76dd \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_AdditiveGaussianNoiseImageFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AdditiveGaussianNoiseImageFilter_2d.nrrd.md5 deleted file mode 100644 index 353cd24ec..000000000 --- a/Testing/Data/Baseline/BasicFilters_AdditiveGaussianNoiseImageFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -a69e5de3e1082e4ab8a02adf3b4e41f9 diff --git a/Testing/Data/Baseline/BasicFilters_AdditiveGaussianNoiseImageFilter_3d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AdditiveGaussianNoiseImageFilter_3d.nrrd.md5 deleted file mode 100644 index 79e20eb49..000000000 --- a/Testing/Data/Baseline/BasicFilters_AdditiveGaussianNoiseImageFilter_3d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2c7d2a654961d2b9d1d997d1f20e2ed2 diff --git a/Testing/Data/Baseline/BasicFilters_AdditiveGaussianNoiseImageFilter_rgb.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AdditiveGaussianNoiseImageFilter_rgb.nrrd.md5 deleted file mode 100644 index 6dc94c820..000000000 --- a/Testing/Data/Baseline/BasicFilters_AdditiveGaussianNoiseImageFilter_rgb.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -8997bfcb80a429e089709b291e5b4ba2 diff --git a/Testing/Data/Baseline/BasicFilters_AntiAliasBinaryImageFilter_cthead.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AntiAliasBinaryImageFilter_cthead.nrrd.md5 deleted file mode 100644 index bea7e0d6d..000000000 --- a/Testing/Data/Baseline/BasicFilters_AntiAliasBinaryImageFilter_cthead.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -6672c754701745de1f6aced9cb16e31b \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ApproximateSignedDistanceMapImageFilter_default.1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ApproximateSignedDistanceMapImageFilter_default.1.nrrd.md5 deleted file mode 100644 index ad19190af..000000000 --- a/Testing/Data/Baseline/BasicFilters_ApproximateSignedDistanceMapImageFilter_default.1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -607fda60a271c0963ecba199a546d439 diff --git a/Testing/Data/Baseline/BasicFilters_ApproximateSignedDistanceMapImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ApproximateSignedDistanceMapImageFilter_default.nrrd.md5 deleted file mode 100644 index 2cc4995a5..000000000 --- a/Testing/Data/Baseline/BasicFilters_ApproximateSignedDistanceMapImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -3b9bdb244fbf030c83a034f71ac46f8a \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ApproximateSignedDistanceMapImageFilter_modified_parms.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ApproximateSignedDistanceMapImageFilter_modified_parms.nrrd.md5 deleted file mode 100644 index b62b818d1..000000000 --- a/Testing/Data/Baseline/BasicFilters_ApproximateSignedDistanceMapImageFilter_modified_parms.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -068f40a06b09350a7d019198165bf44c \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_AsinImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AsinImageFilter_defaults.nrrd.md5 deleted file mode 100644 index a7e398429..000000000 --- a/Testing/Data/Baseline/BasicFilters_AsinImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -3e15c3bc5d5ccdb290dce33e03a42644 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_Atan2ImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_Atan2ImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 34df7153e..000000000 --- a/Testing/Data/Baseline/BasicFilters_Atan2ImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -7c29e6e4ecf6135edd6a2170f6e98a5f \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_AtanImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AtanImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 82de0033f..000000000 --- a/Testing/Data/Baseline/BasicFilters_AtanImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -779451803d29db0bf6e342010bf1b0b5 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_AtanImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_AtanImageFilter_vector.nrrd.md5 deleted file mode 100644 index daab4101c..000000000 --- a/Testing/Data/Baseline/BasicFilters_AtanImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -8d6e12a750d16132a397bdcd1d0dee01 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_BSplineDecompositionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_BSplineDecompositionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 944ba1350..000000000 --- a/Testing/Data/Baseline/BasicFilters_BSplineDecompositionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -f75e62841166c27b1127f621ec386c4a diff --git a/Testing/Data/Baseline/BasicFilters_BilateralImageFilter_3d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_BilateralImageFilter_3d.nrrd.md5 deleted file mode 100644 index a7d36ab6e..000000000 --- a/Testing/Data/Baseline/BasicFilters_BilateralImageFilter_3d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c1fedbb3a9c8093fcb0d0c4e74da3239 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_BinaryMagnitudeImageFilter_3d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_BinaryMagnitudeImageFilter_3d.nrrd.md5 deleted file mode 100644 index fdd00b5f7..000000000 --- a/Testing/Data/Baseline/BasicFilters_BinaryMagnitudeImageFilter_3d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -736f80072fcc908bacd2b9f640f6d5a0 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_BinaryMinMaxCurvatureFlowImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_BinaryMinMaxCurvatureFlowImageFilter_defaults.nrrd.md5 deleted file mode 100644 index a1947a003..000000000 --- a/Testing/Data/Baseline/BasicFilters_BinaryMinMaxCurvatureFlowImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -aefe3f464f648d6c51d8b46fe8e67cad \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_BinaryMinMaxCurvatureFlowImageFilter_longer.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_BinaryMinMaxCurvatureFlowImageFilter_longer.nrrd.md5 deleted file mode 100644 index d22bf4cb7..000000000 --- a/Testing/Data/Baseline/BasicFilters_BinaryMinMaxCurvatureFlowImageFilter_longer.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -35ab8690ee1e1ca4bfce40c7950770af \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_BoundedReciprocalImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_BoundedReciprocalImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 499fecf59..000000000 --- a/Testing/Data/Baseline/BasicFilters_BoundedReciprocalImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -cf18602654ef1943c877bd9ccf3de40b \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_BoundedReciprocalImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_BoundedReciprocalImageFilter_vector.nrrd.md5 deleted file mode 100644 index 2c3b7cb32..000000000 --- a/Testing/Data/Baseline/BasicFilters_BoundedReciprocalImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -3ef93ff5e8a4eb690d487aeb8fca7e5d \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ClampImageFilter_double.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ClampImageFilter_double.nrrd.md5 deleted file mode 100644 index 3ab14407a..000000000 --- a/Testing/Data/Baseline/BasicFilters_ClampImageFilter_double.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -a53e9c3e966e96cdb71ca93ffac8f621 diff --git a/Testing/Data/Baseline/BasicFilters_CoherenceEnhancingDiffusionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_CoherenceEnhancingDiffusionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 1455546bd..000000000 --- a/Testing/Data/Baseline/BasicFilters_CoherenceEnhancingDiffusionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -04138742e50b3a748f055d3787b0aa1a diff --git a/Testing/Data/Baseline/BasicFilters_CollidingFrontsImageFilter_around_dots.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_CollidingFrontsImageFilter_around_dots.nrrd.md5 deleted file mode 100644 index 33b7e6b2d..000000000 --- a/Testing/Data/Baseline/BasicFilters_CollidingFrontsImageFilter_around_dots.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -a838f534dd1645e01e85cd813994c456 diff --git a/Testing/Data/Baseline/BasicFilters_ComplexToModulusImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ComplexToModulusImageFilter_defaults.nrrd.md5 deleted file mode 100644 index b05092aa4..000000000 --- a/Testing/Data/Baseline/BasicFilters_ComplexToModulusImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -96718455b11636c22aeb2c208dd2006d \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ComplexToPhaseImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ComplexToPhaseImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 1f0e46cd0..000000000 --- a/Testing/Data/Baseline/BasicFilters_ComplexToPhaseImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -1473956c389899d311c837105532618e \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ConvolutionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ConvolutionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index ba9bb29bf..000000000 --- a/Testing/Data/Baseline/BasicFilters_ConvolutionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -3050849aa59e82b6f1905fd7ebabf73a \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_CosImageFilter_float.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_CosImageFilter_float.nrrd.md5 deleted file mode 100644 index c2bccf4fa..000000000 --- a/Testing/Data/Baseline/BasicFilters_CosImageFilter_float.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -cfdad459f24d9d60ec490206fc8478f6 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_CosImageFilter_short.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_CosImageFilter_short.nrrd.md5 deleted file mode 100644 index 21c590498..000000000 --- a/Testing/Data/Baseline/BasicFilters_CosImageFilter_short.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -95c844603b837c1f84805e4b5acf5241 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_CosImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_CosImageFilter_vector.nrrd.md5 deleted file mode 100644 index 4fed0d222..000000000 --- a/Testing/Data/Baseline/BasicFilters_CosImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -283531b2b58b124c0eefb8bac36347e1 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_CurvatureAnisotropicDiffusionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_CurvatureAnisotropicDiffusionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 0d96866d7..000000000 --- a/Testing/Data/Baseline/BasicFilters_CurvatureAnisotropicDiffusionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -e1dfe637c7781e1022488e884c516148 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_CurvatureAnisotropicDiffusionImageFilter_longer.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_CurvatureAnisotropicDiffusionImageFilter_longer.nrrd.md5 deleted file mode 100644 index 9e5966a52..000000000 --- a/Testing/Data/Baseline/BasicFilters_CurvatureAnisotropicDiffusionImageFilter_longer.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -1034591338d279a4904bb87a670943a2 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_CurvatureFlowImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_CurvatureFlowImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 66acc5b54..000000000 --- a/Testing/Data/Baseline/BasicFilters_CurvatureFlowImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -d3713fc4b100da700ff3c0d90b9af229 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_CurvatureFlowImageFilter_longer.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_CurvatureFlowImageFilter_longer.nrrd.md5 deleted file mode 100644 index 0704a3a9c..000000000 --- a/Testing/Data/Baseline/BasicFilters_CurvatureFlowImageFilter_longer.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -67a71e63921eb2f08f816a51983e3ef2 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_DanielssonDistanceMapImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DanielssonDistanceMapImageFilter_default.nrrd.md5 deleted file mode 100644 index 6df1e4b9e..000000000 --- a/Testing/Data/Baseline/BasicFilters_DanielssonDistanceMapImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -79987be0aa720216d2adb8c896c59a05 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_DemonsRegistrationFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DemonsRegistrationFilter_2d.nrrd.md5 deleted file mode 100644 index 553793ebb..000000000 --- a/Testing/Data/Baseline/BasicFilters_DemonsRegistrationFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -ef7843afe869fa10a70e6a431976d9aa diff --git a/Testing/Data/Baseline/BasicFilters_DemonsRegistrationFilter_2d_with_initial.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DemonsRegistrationFilter_2d_with_initial.nrrd.md5 deleted file mode 100644 index 1de6f42a2..000000000 --- a/Testing/Data/Baseline/BasicFilters_DemonsRegistrationFilter_2d_with_initial.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -1251f0509f87a61589353b2dc7cb4670 diff --git a/Testing/Data/Baseline/BasicFilters_DerivativeImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DerivativeImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 1f22c377b..000000000 --- a/Testing/Data/Baseline/BasicFilters_DerivativeImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -fd4e809e6b2529292e15e3e02773be37 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_DerivativeImageFilter_zsecondorder.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DerivativeImageFilter_zsecondorder.nrrd.md5 deleted file mode 100644 index 98bd4bee6..000000000 --- a/Testing/Data/Baseline/BasicFilters_DerivativeImageFilter_zsecondorder.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -50feae81e860de04a3d7fa29b74442cb \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_DiffeomorphicDemonsRegistrationFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DiffeomorphicDemonsRegistrationFilter_2d.nrrd.md5 deleted file mode 100644 index 96629847f..000000000 --- a/Testing/Data/Baseline/BasicFilters_DiffeomorphicDemonsRegistrationFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -66ee861a199ef23e7a6392ca162b3da1 diff --git a/Testing/Data/Baseline/BasicFilters_DiffeomorphicDemonsRegistrationFilter_2d_with_initial.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DiffeomorphicDemonsRegistrationFilter_2d_with_initial.nrrd.md5 deleted file mode 100644 index 145e1485e..000000000 --- a/Testing/Data/Baseline/BasicFilters_DiffeomorphicDemonsRegistrationFilter_2d_with_initial.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -fe9a10248552ef1f122ef76ee2fc081e diff --git a/Testing/Data/Baseline/BasicFilters_DilateObjectMorphologyImageFilter_float.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DilateObjectMorphologyImageFilter_float.nrrd.md5 deleted file mode 100644 index fe6932a8f..000000000 --- a/Testing/Data/Baseline/BasicFilters_DilateObjectMorphologyImageFilter_float.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -1b5092c4cb11f846977f1fc175accd3c \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_DilateObjectMorphologyImageFilter_short.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DilateObjectMorphologyImageFilter_short.nrrd.md5 deleted file mode 100644 index 74b47649a..000000000 --- a/Testing/Data/Baseline/BasicFilters_DilateObjectMorphologyImageFilter_short.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -bbe245e3cbf925edcf5d023203bd6b82 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float1.nrrd.md5 deleted file mode 100644 index 9c420f60a..000000000 --- a/Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -50e6c855fcee80a195980421bdd71140 diff --git a/Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float_10.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float_10.nrrd.md5 deleted file mode 100644 index 13e3ca943..000000000 --- a/Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float_10.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -39b1d744b15679e43c40fb21c3057ff0 diff --git a/Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float_dx.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float_dx.nrrd.md5 deleted file mode 100644 index a755aeeb4..000000000 --- a/Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float_dx.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -3a1d580c01b3ac705fefc280f3947d3a diff --git a/Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float_dy2.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float_dy2.nrrd.md5 deleted file mode 100644 index 0f21673cb..000000000 --- a/Testing/Data/Baseline/BasicFilters_DiscreteGaussianDerivativeImageFilter_float_dy2.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -f7305c52c69b75f737eb6364497024ff diff --git a/Testing/Data/Baseline/BasicFilters_DiscreteGaussianImageFilter_float.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DiscreteGaussianImageFilter_float.nrrd.md5 deleted file mode 100644 index da7c34814..000000000 --- a/Testing/Data/Baseline/BasicFilters_DiscreteGaussianImageFilter_float.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -f6725d2a11a1d934b1a22f7cfec8a215 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_DiscreteGaussianImageFilter_short.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DiscreteGaussianImageFilter_short.nrrd.md5 deleted file mode 100644 index 7d442774d..000000000 --- a/Testing/Data/Baseline/BasicFilters_DiscreteGaussianImageFilter_short.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -146277cf45f28feffc9e2a18b97ccbf3 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_DisplacementFieldJacobianDeterminantFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DisplacementFieldJacobianDeterminantFilter_2d.nrrd.md5 deleted file mode 100644 index e2b7895cc..000000000 --- a/Testing/Data/Baseline/BasicFilters_DisplacementFieldJacobianDeterminantFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c17e5e3e68062a94a9785e2fe603bd39 diff --git a/Testing/Data/Baseline/BasicFilters_DisplacementFieldJacobianDeterminantFilter_2d_weights.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DisplacementFieldJacobianDeterminantFilter_2d_weights.nrrd.md5 deleted file mode 100644 index f87201c43..000000000 --- a/Testing/Data/Baseline/BasicFilters_DisplacementFieldJacobianDeterminantFilter_2d_weights.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -146051c2bf30cf847f88fce59fba4ff7 diff --git a/Testing/Data/Baseline/BasicFilters_DivideRealImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_DivideRealImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 9f0af2b1a..000000000 --- a/Testing/Data/Baseline/BasicFilters_DivideRealImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -a0afe9d9aaf61b334a8635bd08ec65ba \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_EdgePotentialImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_EdgePotentialImageFilter_defaults.nrrd.md5 deleted file mode 100644 index a6b92ee40..000000000 --- a/Testing/Data/Baseline/BasicFilters_EdgePotentialImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -378c52e56aa415145da3dd085c97d881 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ErodeObjectMorphologyImageFilter_float.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ErodeObjectMorphologyImageFilter_float.nrrd.md5 deleted file mode 100644 index fe6932a8f..000000000 --- a/Testing/Data/Baseline/BasicFilters_ErodeObjectMorphologyImageFilter_float.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -1b5092c4cb11f846977f1fc175accd3c \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ErodeObjectMorphologyImageFilter_short.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ErodeObjectMorphologyImageFilter_short.nrrd.md5 deleted file mode 100644 index 74b47649a..000000000 --- a/Testing/Data/Baseline/BasicFilters_ErodeObjectMorphologyImageFilter_short.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -bbe245e3cbf925edcf5d023203bd6b82 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ExpImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ExpImageFilter_defaults.nrrd.md5 deleted file mode 100644 index e7c0f8e12..000000000 --- a/Testing/Data/Baseline/BasicFilters_ExpImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -5df678da0f93c87e7d1db59f2a3ad3cb \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ExpImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ExpImageFilter_vector.nrrd.md5 deleted file mode 100644 index 51daaca16..000000000 --- a/Testing/Data/Baseline/BasicFilters_ExpImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -838e98cdf86af069ff66c078ac3e0dd9 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ExpNegativeImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ExpNegativeImageFilter_defaults.nrrd.md5 deleted file mode 100644 index e81bc2a22..000000000 --- a/Testing/Data/Baseline/BasicFilters_ExpNegativeImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2bbf15c53a6e9d1e5d9b6912ebac7f2f \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ExpNegativeImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ExpNegativeImageFilter_vector.nrrd.md5 deleted file mode 100644 index daeb1f9b6..000000000 --- a/Testing/Data/Baseline/BasicFilters_ExpNegativeImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -08059625205b2c39e14d636aa9d29520 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Expand2x3.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Expand2x3.nrrd.md5 deleted file mode 100644 index af6484eb8..000000000 --- a/Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Expand2x3.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -b5019ba71afd28fb7424ed39e850ef23 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Interpolator_BSpline.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Interpolator_BSpline.nrrd.md5 deleted file mode 100644 index 4afef9859..000000000 --- a/Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Interpolator_BSpline.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -67ff0f7e48928916bdec4f7afd5e4574 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Interpolator_Gaussian.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Interpolator_Gaussian.nrrd.md5 deleted file mode 100644 index b87e86820..000000000 --- a/Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Interpolator_Gaussian.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -238556b8f784284b64aec7259b1568a5 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Vector.nrrd.md5 deleted file mode 100644 index b1e5bda50..000000000 --- a/Testing/Data/Baseline/BasicFilters_ExpandImageFilter_Vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -e26a86d2559079cdc629ba67864598f2 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_FFTConvolutionImageFilter_defaults.1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_FFTConvolutionImageFilter_defaults.1.nrrd.md5 deleted file mode 100644 index 6c5f2902c..000000000 --- a/Testing/Data/Baseline/BasicFilters_FFTConvolutionImageFilter_defaults.1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -6579847e807d468278a56c289eb28288 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_FFTConvolutionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_FFTConvolutionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index af5580c14..000000000 --- a/Testing/Data/Baseline/BasicFilters_FFTConvolutionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -287c913079332c7d924143fd0601038e diff --git a/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_3D.1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_3D.1.nrrd.md5 deleted file mode 100644 index 608b2d08f..000000000 --- a/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_3D.1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -fda191030c45a5f88166c98ba6fc0d90 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_3D.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_3D.nrrd.md5 deleted file mode 100644 index 5de684a27..000000000 --- a/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_3D.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -53b68a3bc02def098ac1cd38b28b494a diff --git a/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_EvenKernel.1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_EvenKernel.1.nrrd.md5 deleted file mode 100644 index 8d3ed5342..000000000 --- a/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_EvenKernel.1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c9516efe9e3167ae67ee3d015c9a3d0e \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_EvenKernel.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_EvenKernel.nrrd.md5 deleted file mode 100644 index 7f80310a9..000000000 --- a/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_EvenKernel.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -6aff753cb0e5e8c56ad170fa4bcdc1e8 diff --git a/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_defaults.1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_defaults.1.nrrd.md5 deleted file mode 100644 index 4cad99bfd..000000000 --- a/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_defaults.1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -03f553511c60c0f3d8aa7637e446a237 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 7d56cc27b..000000000 --- a/Testing/Data/Baseline/BasicFilters_FFTNormalizedCorrelationImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -368b198113c8125237b7a1a3ffbf6c2f diff --git a/Testing/Data/Baseline/BasicFilters_FastMarchingBaseImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_FastMarchingBaseImageFilter_default.nrrd.md5 deleted file mode 100644 index 27a9d4c36..000000000 --- a/Testing/Data/Baseline/BasicFilters_FastMarchingBaseImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -9be63f4acfa8b8e1e24fd76ac7b5dd67 diff --git a/Testing/Data/Baseline/BasicFilters_FastMarchingImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_FastMarchingImageFilter_default.nrrd.md5 deleted file mode 100644 index 4a46974e3..000000000 --- a/Testing/Data/Baseline/BasicFilters_FastMarchingImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -7d88b6fe5235d1d27ade4bde1f67710d diff --git a/Testing/Data/Baseline/BasicFilters_FastMarchingUpwindGradientImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_FastMarchingUpwindGradientImageFilter_default.nrrd.md5 deleted file mode 100644 index f23a275ba..000000000 --- a/Testing/Data/Baseline/BasicFilters_FastMarchingUpwindGradientImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -64bdbe959708265931c62b9b90df3e61 diff --git a/Testing/Data/Baseline/BasicFilters_FastSymmetricForcesDemonsRegistrationFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_FastSymmetricForcesDemonsRegistrationFilter_2d.nrrd.md5 deleted file mode 100644 index cff6e482e..000000000 --- a/Testing/Data/Baseline/BasicFilters_FastSymmetricForcesDemonsRegistrationFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -caee43bdb17214e9ad9e3b64c16dfb70 diff --git a/Testing/Data/Baseline/BasicFilters_FastSymmetricForcesDemonsRegistrationFilter_2d_with_initial.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_FastSymmetricForcesDemonsRegistrationFilter_2d_with_initial.nrrd.md5 deleted file mode 100644 index ac41ed4e9..000000000 --- a/Testing/Data/Baseline/BasicFilters_FastSymmetricForcesDemonsRegistrationFilter_2d_with_initial.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -73f7d156b10ce68e871f05fab2dc6de2 diff --git a/Testing/Data/Baseline/BasicFilters_ForwardFFTImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ForwardFFTImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 931044d84..000000000 --- a/Testing/Data/Baseline/BasicFilters_ForwardFFTImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -fa5962abbcfb984aaf42774a81457fed \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GaborImageSource_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GaborImageSource_default.nrrd.md5 deleted file mode 100644 index e55011043..000000000 --- a/Testing/Data/Baseline/BasicFilters_GaborImageSource_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -02744de5f4990b6b61556b1447739263 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GaborSourceImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GaborSourceImageFilter_default.nrrd.md5 deleted file mode 100644 index e55011043..000000000 --- a/Testing/Data/Baseline/BasicFilters_GaborSourceImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -02744de5f4990b6b61556b1447739263 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GaussianImageSource_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GaussianImageSource_default.nrrd.md5 deleted file mode 100644 index f86f6a60d..000000000 --- a/Testing/Data/Baseline/BasicFilters_GaussianImageSource_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -013c84e2b924eb8ff658b75ba63b989c \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GaussianSourceImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GaussianSourceImageFilter_default.nrrd.md5 deleted file mode 100644 index f86f6a60d..000000000 --- a/Testing/Data/Baseline/BasicFilters_GaussianSourceImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -013c84e2b924eb8ff658b75ba63b989c \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GeodesicActiveContourLevelSetImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GeodesicActiveContourLevelSetImageFilter_defaults.nrrd.md5 deleted file mode 100644 index bcdec5200..000000000 --- a/Testing/Data/Baseline/BasicFilters_GeodesicActiveContourLevelSetImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -b513a975094f16472f5c9b6713a72c60 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GradientAnisotropicDiffusionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GradientAnisotropicDiffusionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 1dcd8f7bd..000000000 --- a/Testing/Data/Baseline/BasicFilters_GradientAnisotropicDiffusionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -757eefaf9501ba4b43c64459d705891f \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GradientAnisotropicDiffusionImageFilter_longer.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GradientAnisotropicDiffusionImageFilter_longer.nrrd.md5 deleted file mode 100644 index f18b36fb7..000000000 --- a/Testing/Data/Baseline/BasicFilters_GradientAnisotropicDiffusionImageFilter_longer.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -ac3b7df50e79bdbb67ff8b89263f03f3 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GradientImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GradientImageFilter_default.nrrd.md5 deleted file mode 100644 index dfa5d9bbb..000000000 --- a/Testing/Data/Baseline/BasicFilters_GradientImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -ecc217e9396303e2bf0fcba322d6ef28 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GradientImageFilter_default_float.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GradientImageFilter_default_float.nrrd.md5 deleted file mode 100644 index 5db3a909c..000000000 --- a/Testing/Data/Baseline/BasicFilters_GradientImageFilter_default_float.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -fd0136d5fd3f708d8d9712fe796385be \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GradientMagnitudeImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GradientMagnitudeImageFilter_default.nrrd.md5 deleted file mode 100644 index 4ad8fd24a..000000000 --- a/Testing/Data/Baseline/BasicFilters_GradientMagnitudeImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -7a985895c1f926118dee50aef12856ef \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GradientMagnitudeRecursiveGaussianImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GradientMagnitudeRecursiveGaussianImageFilter_default.nrrd.md5 deleted file mode 100644 index 5f5dd7f5f..000000000 --- a/Testing/Data/Baseline/BasicFilters_GradientMagnitudeRecursiveGaussianImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -7a86f3b164dae7684d2e5c40399028fe \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GradientRecursiveGaussianImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GradientRecursiveGaussianImageFilter_default.nrrd.md5 deleted file mode 100644 index ff9060992..000000000 --- a/Testing/Data/Baseline/BasicFilters_GradientRecursiveGaussianImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -36ba9922bf82a81692198a126ead8cc4 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GradientRecursiveGaussianImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GradientRecursiveGaussianImageFilter_vector.nrrd.md5 deleted file mode 100644 index 039d0946a..000000000 --- a/Testing/Data/Baseline/BasicFilters_GradientRecursiveGaussianImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -7ad00981b969c430ad7247c95eaefb95 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GridImageSource_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GridImageSource_default.nrrd.md5 deleted file mode 100644 index 016b06b32..000000000 --- a/Testing/Data/Baseline/BasicFilters_GridImageSource_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -3b6e25b80225dafaacfdbf233f36b9b7 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_GridSourceImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_GridSourceImageFilter_default.nrrd.md5 deleted file mode 100644 index 016b06b32..000000000 --- a/Testing/Data/Baseline/BasicFilters_GridSourceImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -3b6e25b80225dafaacfdbf233f36b9b7 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_HalfHermitianToRealInverseFFTImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_HalfHermitianToRealInverseFFTImageFilter_defaults.nrrd.md5 deleted file mode 100644 index ca2351706..000000000 --- a/Testing/Data/Baseline/BasicFilters_HalfHermitianToRealInverseFFTImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -e4d82f1b622fb34fbfe17cffbb3b3af2 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_HistogramMatchingImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_HistogramMatchingImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 015f5015a..000000000 --- a/Testing/Data/Baseline/BasicFilters_HistogramMatchingImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c7c25f7ac51ca4634858303986832dea \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_InverseDeconvolutionImageFilter_defaults.1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_InverseDeconvolutionImageFilter_defaults.1.nrrd.md5 deleted file mode 100644 index e9265e123..000000000 --- a/Testing/Data/Baseline/BasicFilters_InverseDeconvolutionImageFilter_defaults.1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -ade10e95c97fdc72399e210bc77e1a27 diff --git a/Testing/Data/Baseline/BasicFilters_InverseDeconvolutionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_InverseDeconvolutionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 52c9864f1..000000000 --- a/Testing/Data/Baseline/BasicFilters_InverseDeconvolutionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -df7e6ed58e1c53243307c34a909cb1f5 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_InverseDisplacementFieldImageFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_InverseDisplacementFieldImageFilter_2d.nrrd.md5 deleted file mode 100644 index 86a92995f..000000000 --- a/Testing/Data/Baseline/BasicFilters_InverseDisplacementFieldImageFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -3b6925c5797024cf3e433642f96caf05 diff --git a/Testing/Data/Baseline/BasicFilters_InverseFFTImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_InverseFFTImageFilter_defaults.nrrd.md5 deleted file mode 100644 index ff7e34ea1..000000000 --- a/Testing/Data/Baseline/BasicFilters_InverseFFTImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -5cefe54ac1a93a84be84480875e7c6de \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_InvertDisplacementFieldImageFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_InvertDisplacementFieldImageFilter_2d.nrrd.md5 deleted file mode 100644 index 356ad1444..000000000 --- a/Testing/Data/Baseline/BasicFilters_InvertDisplacementFieldImageFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -f218d9b9ffff761bb35fffe099237ca7 diff --git a/Testing/Data/Baseline/BasicFilters_IsoContourDistanceImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_IsoContourDistanceImageFilter_default.nrrd.md5 deleted file mode 100644 index 5d739a968..000000000 --- a/Testing/Data/Baseline/BasicFilters_IsoContourDistanceImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -f1c92a79d9ef24a6fdaa8f43bd4bb3c5 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_IterativeInverseDisplacementFieldImageFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_IterativeInverseDisplacementFieldImageFilter_2d.nrrd.md5 deleted file mode 100644 index b774631f3..000000000 --- a/Testing/Data/Baseline/BasicFilters_IterativeInverseDisplacementFieldImageFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -8aafe9df4b3d498c185876d47c17dd70 diff --git a/Testing/Data/Baseline/BasicFilters_LandweberDeconvolutionImageFilter_defaults.1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_LandweberDeconvolutionImageFilter_defaults.1.nrrd.md5 deleted file mode 100644 index 5d8b5e5cb..000000000 --- a/Testing/Data/Baseline/BasicFilters_LandweberDeconvolutionImageFilter_defaults.1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -6ab6025929136899d3e3f91fe62fae15 diff --git a/Testing/Data/Baseline/BasicFilters_LandweberDeconvolutionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_LandweberDeconvolutionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 3a088a7e0..000000000 --- a/Testing/Data/Baseline/BasicFilters_LandweberDeconvolutionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2f2b1eb279357c2bdd75f70a865bdb40 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_LaplacianImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_LaplacianImageFilter_default.nrrd.md5 deleted file mode 100644 index cf4ba717e..000000000 --- a/Testing/Data/Baseline/BasicFilters_LaplacianImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -f535d9da1587b8e3546118f54513b10b \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_LaplacianRecursiveGaussianImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_LaplacianRecursiveGaussianImageFilter_default.nrrd.md5 deleted file mode 100644 index cb65f28b2..000000000 --- a/Testing/Data/Baseline/BasicFilters_LaplacianRecursiveGaussianImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -8521ac77f502bfe853eafc59570140b3 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_LaplacianSegmentationLevelSetImageFilter_cthead.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_LaplacianSegmentationLevelSetImageFilter_cthead.nrrd.md5 deleted file mode 100644 index 549064e7a..000000000 --- a/Testing/Data/Baseline/BasicFilters_LaplacianSegmentationLevelSetImageFilter_cthead.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -93de39d24dd71864c1afee13f9418d40 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_LaplacianSharpeningImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_LaplacianSharpeningImageFilter_default.nrrd.md5 deleted file mode 100644 index 133797231..000000000 --- a/Testing/Data/Baseline/BasicFilters_LaplacianSharpeningImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -1dd7f6cc56938b1b1f3b06a2a5e45dbb \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_LevelSetMotionRegistrationFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_LevelSetMotionRegistrationFilter_2d.nrrd.md5 deleted file mode 100644 index b26b2a11d..000000000 --- a/Testing/Data/Baseline/BasicFilters_LevelSetMotionRegistrationFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c62ce79035715645be603a8bd7e19eb5 diff --git a/Testing/Data/Baseline/BasicFilters_Log10ImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_Log10ImageFilter_defaults.nrrd.md5 deleted file mode 100644 index e81db975f..000000000 --- a/Testing/Data/Baseline/BasicFilters_Log10ImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -58a3778027be2dc4471258a6da94b7b2 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_LogImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_LogImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 1f326bc95..000000000 --- a/Testing/Data/Baseline/BasicFilters_LogImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -282c1cc32168ee4c55e88c9006743277 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_LogImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_LogImageFilter_vector.nrrd.md5 deleted file mode 100644 index b0ecf4966..000000000 --- a/Testing/Data/Baseline/BasicFilters_LogImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -aef2e096cc43fb1e19147936b01722fa \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_MagnitudeAndPhaseToComplexImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_MagnitudeAndPhaseToComplexImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 7f158f7be..000000000 --- a/Testing/Data/Baseline/BasicFilters_MagnitudeAndPhaseToComplexImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c5a88626e8461cf03934ea67f2532b87 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_3D.1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_3D.1.nrrd.md5 deleted file mode 100644 index ea83b1f62..000000000 --- a/Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_3D.1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -b1d283e9edf5ff174f6e61a5cec6a1d8 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_3D.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_3D.nrrd.md5 deleted file mode 100644 index 20c8b1663..000000000 --- a/Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_3D.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -083918d2115d313927180b088e8147d4 diff --git a/Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_defaults.1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_defaults.1.nrrd.md5 deleted file mode 100644 index 82202aa8b..000000000 --- a/Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_defaults.1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2bae98b0565eaaa7f6ccc49d3490ddda \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 797e07094..000000000 --- a/Testing/Data/Baseline/BasicFilters_MaskedFFTNormalizedCorrelationImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2f9abc34f4ae45e2347f940df04b9ed6 diff --git a/Testing/Data/Baseline/BasicFilters_MeanProjectionImageFilter_z_projection.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_MeanProjectionImageFilter_z_projection.nrrd.md5 deleted file mode 100644 index d26fa3d89..000000000 --- a/Testing/Data/Baseline/BasicFilters_MeanProjectionImageFilter_z_projection.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c4abe94c3c280f5074fcfd9bcc402330 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_MinMaxCurvatureFlowImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_MinMaxCurvatureFlowImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 51028ad64..000000000 --- a/Testing/Data/Baseline/BasicFilters_MinMaxCurvatureFlowImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -1eff97fdb9d327928b7176d17f63782d \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_MinMaxCurvatureFlowImageFilter_longer.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_MinMaxCurvatureFlowImageFilter_longer.nrrd.md5 deleted file mode 100644 index 71bc484c1..000000000 --- a/Testing/Data/Baseline/BasicFilters_MinMaxCurvatureFlowImageFilter_longer.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -bdd72f979216f08500f7356cc3c6b4a2 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_N4BiasFieldCorrectionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_N4BiasFieldCorrectionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 0e904b428..000000000 --- a/Testing/Data/Baseline/BasicFilters_N4BiasFieldCorrectionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -a64bdaa642e3d5bd40ef15a27c73d4f4 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_NeighborhoodConnectedImageFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_NeighborhoodConnectedImageFilter_2d.nrrd.md5 deleted file mode 100644 index 0e8928915..000000000 --- a/Testing/Data/Baseline/BasicFilters_NeighborhoodConnectedImageFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -4fab0a2cf4b9c8805dee5076be1829f8 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_NormalizeImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_NormalizeImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 1ffe9e9ba..000000000 --- a/Testing/Data/Baseline/BasicFilters_NormalizeImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -44b4327d5dfb341dfda56391d1a9d261 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_NormalizeImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_NormalizeImageFilter_vector.nrrd.md5 deleted file mode 100644 index 29c509095..000000000 --- a/Testing/Data/Baseline/BasicFilters_NormalizeImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -bcae996a3cce0bf203c7a737297991df \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_NormalizeToConstantImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_NormalizeToConstantImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 1a3b11fb0..000000000 --- a/Testing/Data/Baseline/BasicFilters_NormalizeToConstantImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -acad12ef7a397be141336e872a74aa72 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_NormalizeToConstantImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_NormalizeToConstantImageFilter_vector.nrrd.md5 deleted file mode 100644 index edd0dd00b..000000000 --- a/Testing/Data/Baseline/BasicFilters_NormalizeToConstantImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -74e30f08e9cd6d28a9dcf26533b57aef \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_NormalizedCorrelationImageFilter_EvenKernel.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_NormalizedCorrelationImageFilter_EvenKernel.nrrd.md5 deleted file mode 100644 index 710f601cb..000000000 --- a/Testing/Data/Baseline/BasicFilters_NormalizedCorrelationImageFilter_EvenKernel.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -1fc06256e3ad4d5f0f45a7e152f7021a \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_NormalizedCorrelationImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_NormalizedCorrelationImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 5d88272c5..000000000 --- a/Testing/Data/Baseline/BasicFilters_NormalizedCorrelationImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -504b5fe9ee6273fa5e40d7f31ae50ff7 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ObjectnessMeasureImageFilter_dark_dots.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ObjectnessMeasureImageFilter_dark_dots.nrrd.md5 deleted file mode 100644 index b7fc7c9b8..000000000 --- a/Testing/Data/Baseline/BasicFilters_ObjectnessMeasureImageFilter_dark_dots.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c5abd06668159d690d69e34fe7728ba8 diff --git a/Testing/Data/Baseline/BasicFilters_ObjectnessMeasureImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ObjectnessMeasureImageFilter_defaults.nrrd.md5 deleted file mode 100644 index bce34778e..000000000 --- a/Testing/Data/Baseline/BasicFilters_ObjectnessMeasureImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -b40a6ebef8ae675d9789e2cc61009a97 diff --git a/Testing/Data/Baseline/BasicFilters_PatchBasedDenoisingImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_PatchBasedDenoisingImageFilter_default.nrrd.md5 deleted file mode 100644 index 94fa62549..000000000 --- a/Testing/Data/Baseline/BasicFilters_PatchBasedDenoisingImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -1682d737596d036a1d8d62755bdc0554 diff --git a/Testing/Data/Baseline/BasicFilters_PowImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_PowImageFilter_defaults.nrrd.md5 deleted file mode 100644 index b3139774e..000000000 --- a/Testing/Data/Baseline/BasicFilters_PowImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -3bd4fa6ee34378b2318dd9bf55a2b8df \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_PowToConstantImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_PowToConstantImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 9e3bb5272..000000000 --- a/Testing/Data/Baseline/BasicFilters_PowToConstantImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -35acd568f8ca9324e0e7346a77f255fc \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_PowToConstantImageFilter_setting_constant.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_PowToConstantImageFilter_setting_constant.nrrd.md5 deleted file mode 100644 index ef9e78dc8..000000000 --- a/Testing/Data/Baseline/BasicFilters_PowToConstantImageFilter_setting_constant.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c2e73eb99072452592ad9ab566d6c5d5 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ProjectedLandweberDeconvolutionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ProjectedLandweberDeconvolutionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index c57dc7b76..000000000 --- a/Testing/Data/Baseline/BasicFilters_ProjectedLandweberDeconvolutionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -9d7295e53861e4fa19b5abf9cda5df5e \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_RealToHalfHermitianForwardFFTImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_RealToHalfHermitianForwardFFTImageFilter_defaults.nrrd.md5 deleted file mode 100644 index b6f41dd9e..000000000 --- a/Testing/Data/Baseline/BasicFilters_RealToHalfHermitianForwardFFTImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -00da43039a19ec8777cd493efccb16d9 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_RecursiveGaussianImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_RecursiveGaussianImageFilter_default.nrrd.md5 deleted file mode 100644 index 37403c7f9..000000000 --- a/Testing/Data/Baseline/BasicFilters_RecursiveGaussianImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -19e2eefeaf79b3a1eeafed0f8e53abd1 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_RecursiveGaussianImageFilter_rgb_image.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_RecursiveGaussianImageFilter_rgb_image.nrrd.md5 deleted file mode 100644 index 9b7f60771..000000000 --- a/Testing/Data/Baseline/BasicFilters_RecursiveGaussianImageFilter_rgb_image.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -b5c69b60a6feccda5b65773ae3ddee58 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_bspline_resample.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_bspline_resample.nrrd.md5 deleted file mode 100644 index b6039aabc..000000000 --- a/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_bspline_resample.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -7f2e604bf0986270d097a6bdb5fa816b diff --git a/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_defaults.nrrd.md5 deleted file mode 100644 index c7e460b5a..000000000 --- a/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c72fda16dbac9167962b871a539def78 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_vector.nrrd.md5 deleted file mode 100644 index a77e2a326..000000000 --- a/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -a7dc892acf626377065878b38b99ca54 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_wCastwInterpolator.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_wCastwInterpolator.nrrd.md5 deleted file mode 100644 index f7e7db2ff..000000000 --- a/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_wCastwInterpolator.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -46c83ad189ea2e0800e7df0f1d4c0025 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_RescaleIntensityImageFilter_3d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_RescaleIntensityImageFilter_3d.nrrd.md5 deleted file mode 100644 index c646af145..000000000 --- a/Testing/Data/Baseline/BasicFilters_RescaleIntensityImageFilter_3d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -dc79562f168bdda5fd3743c6adf997e9 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_RichardsonLucyDeconvolutionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_RichardsonLucyDeconvolutionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 5ea59aa00..000000000 --- a/Testing/Data/Baseline/BasicFilters_RichardsonLucyDeconvolutionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -9dd64abe00b86a82b88bf46a9d3f3e9c \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_SLICImageFilter_gray_scale.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SLICImageFilter_gray_scale.nrrd.md5 deleted file mode 100644 index adfe6bc52..000000000 --- a/Testing/Data/Baseline/BasicFilters_SLICImageFilter_gray_scale.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -63e7a78688c0356828d9c724626ba7c0 diff --git a/Testing/Data/Baseline/BasicFilters_SLICImageFilter_minimum.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SLICImageFilter_minimum.nrrd.md5 deleted file mode 100644 index 50d1ebdfb..000000000 --- a/Testing/Data/Baseline/BasicFilters_SLICImageFilter_minimum.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -dc8af4b43dc67316bed12b4eee8e6a2b diff --git a/Testing/Data/Baseline/BasicFilters_STAPLEImageFilter_basic.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_STAPLEImageFilter_basic.nrrd.md5 deleted file mode 100644 index 79b583070..000000000 --- a/Testing/Data/Baseline/BasicFilters_STAPLEImageFilter_basic.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -3dc1d9ebe8e603598bf2f55b996e7f3e diff --git a/Testing/Data/Baseline/BasicFilters_SaltAndPepperNoiseImageFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SaltAndPepperNoiseImageFilter_2d.nrrd.md5 deleted file mode 100644 index 353cd24ec..000000000 --- a/Testing/Data/Baseline/BasicFilters_SaltAndPepperNoiseImageFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -a69e5de3e1082e4ab8a02adf3b4e41f9 diff --git a/Testing/Data/Baseline/BasicFilters_SaltAndPepperNoiseImageFilter_3d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SaltAndPepperNoiseImageFilter_3d.nrrd.md5 deleted file mode 100644 index 79e20eb49..000000000 --- a/Testing/Data/Baseline/BasicFilters_SaltAndPepperNoiseImageFilter_3d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2c7d2a654961d2b9d1d997d1f20e2ed2 diff --git a/Testing/Data/Baseline/BasicFilters_SaltAndPepperNoiseImageFilter_rgb.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SaltAndPepperNoiseImageFilter_rgb.nrrd.md5 deleted file mode 100644 index 6dc94c820..000000000 --- a/Testing/Data/Baseline/BasicFilters_SaltAndPepperNoiseImageFilter_rgb.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -8997bfcb80a429e089709b291e5b4ba2 diff --git a/Testing/Data/Baseline/BasicFilters_ScalarChanAndVeseDenseLevelSetImageFilter_cthead.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ScalarChanAndVeseDenseLevelSetImageFilter_cthead.nrrd.md5 deleted file mode 100644 index fcef116a9..000000000 --- a/Testing/Data/Baseline/BasicFilters_ScalarChanAndVeseDenseLevelSetImageFilter_cthead.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -0e8d3a203f0c1fc585b15717d5771cad \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ShapeDetectionLevelSetImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ShapeDetectionLevelSetImageFilter_defaults.nrrd.md5 deleted file mode 100644 index ccad7da68..000000000 --- a/Testing/Data/Baseline/BasicFilters_ShapeDetectionLevelSetImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -05336a7e84d56f110741f46b38163a8c \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ShotNoiseImageFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ShotNoiseImageFilter_2d.nrrd.md5 deleted file mode 100644 index 353cd24ec..000000000 --- a/Testing/Data/Baseline/BasicFilters_ShotNoiseImageFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -a69e5de3e1082e4ab8a02adf3b4e41f9 diff --git a/Testing/Data/Baseline/BasicFilters_ShotNoiseImageFilter_3d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ShotNoiseImageFilter_3d.nrrd.md5 deleted file mode 100644 index 79e20eb49..000000000 --- a/Testing/Data/Baseline/BasicFilters_ShotNoiseImageFilter_3d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2c7d2a654961d2b9d1d997d1f20e2ed2 diff --git a/Testing/Data/Baseline/BasicFilters_ShotNoiseImageFilter_rgb.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ShotNoiseImageFilter_rgb.nrrd.md5 deleted file mode 100644 index 6dc94c820..000000000 --- a/Testing/Data/Baseline/BasicFilters_ShotNoiseImageFilter_rgb.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -8997bfcb80a429e089709b291e5b4ba2 diff --git a/Testing/Data/Baseline/BasicFilters_SignedDanielssonDistanceMapImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SignedDanielssonDistanceMapImageFilter_default.nrrd.md5 deleted file mode 100644 index be4c27add..000000000 --- a/Testing/Data/Baseline/BasicFilters_SignedDanielssonDistanceMapImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -970cd3c90e677e4422923cef5cdf61b3 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_SignedMaurerDistanceMapImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SignedMaurerDistanceMapImageFilter_default.nrrd.md5 deleted file mode 100644 index 88b23280a..000000000 --- a/Testing/Data/Baseline/BasicFilters_SignedMaurerDistanceMapImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -239d33db0b6f03fdceb9b4807460a81d \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_SinImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SinImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 28df44e55..000000000 --- a/Testing/Data/Baseline/BasicFilters_SinImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -3cade3f7b90d71d1020ee024a01ce15f \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_SinImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SinImageFilter_vector.nrrd.md5 deleted file mode 100644 index 2232e2972..000000000 --- a/Testing/Data/Baseline/BasicFilters_SinImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -a4a7aac9f929f9e19f8b78c7f0cc82d7 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_SmoothingRecursiveGaussianImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SmoothingRecursiveGaussianImageFilter_default.nrrd.md5 deleted file mode 100644 index 4ae46066f..000000000 --- a/Testing/Data/Baseline/BasicFilters_SmoothingRecursiveGaussianImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2a0f8ee9d1d0f30855771c49d868d8d4 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_SmoothingRecursiveGaussianImageFilter_rgb_image.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SmoothingRecursiveGaussianImageFilter_rgb_image.nrrd.md5 deleted file mode 100644 index f816150e9..000000000 --- a/Testing/Data/Baseline/BasicFilters_SmoothingRecursiveGaussianImageFilter_rgb_image.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -9a10eeacd4f926ea94bbe00c45448136 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_SobelEdgeDetectionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SobelEdgeDetectionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 0ee4c4bc6..000000000 --- a/Testing/Data/Baseline/BasicFilters_SobelEdgeDetectionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -1517e9756dfcb07633b00b575edc3766 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_SpeckleNoiseImageFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SpeckleNoiseImageFilter_2d.nrrd.md5 deleted file mode 100644 index 353cd24ec..000000000 --- a/Testing/Data/Baseline/BasicFilters_SpeckleNoiseImageFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -a69e5de3e1082e4ab8a02adf3b4e41f9 diff --git a/Testing/Data/Baseline/BasicFilters_SpeckleNoiseImageFilter_3d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SpeckleNoiseImageFilter_3d.nrrd.md5 deleted file mode 100644 index 79e20eb49..000000000 --- a/Testing/Data/Baseline/BasicFilters_SpeckleNoiseImageFilter_3d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2c7d2a654961d2b9d1d997d1f20e2ed2 diff --git a/Testing/Data/Baseline/BasicFilters_SpeckleNoiseImageFilter_rgb.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SpeckleNoiseImageFilter_rgb.nrrd.md5 deleted file mode 100644 index 6dc94c820..000000000 --- a/Testing/Data/Baseline/BasicFilters_SpeckleNoiseImageFilter_rgb.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -8997bfcb80a429e089709b291e5b4ba2 diff --git a/Testing/Data/Baseline/BasicFilters_SqrtImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SqrtImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 7369180a9..000000000 --- a/Testing/Data/Baseline/BasicFilters_SqrtImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -fb9b000917392dc835a7c45f686f7a23 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_SqrtImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SqrtImageFilter_vector.nrrd.md5 deleted file mode 100644 index 109b4bf80..000000000 --- a/Testing/Data/Baseline/BasicFilters_SqrtImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -81865a31269864cb5aad15b42de57549 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_SquaredDifferenceImageFilter_2DStapleImages.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SquaredDifferenceImageFilter_2DStapleImages.nrrd.md5 deleted file mode 100644 index eb6d90ef1..000000000 --- a/Testing/Data/Baseline/BasicFilters_SquaredDifferenceImageFilter_2DStapleImages.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -31995770b31eaeb212ebf59695e5f250 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_SquaredDifferenceImageFilter_Ramp_Short1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SquaredDifferenceImageFilter_Ramp_Short1.nrrd.md5 deleted file mode 100644 index 48bf0491a..000000000 --- a/Testing/Data/Baseline/BasicFilters_SquaredDifferenceImageFilter_Ramp_Short1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2b8f66caa1b6dd0b945e579357c0517f \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_SquaredDifferenceImageFilter_Ramp_Short2.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SquaredDifferenceImageFilter_Ramp_Short2.nrrd.md5 deleted file mode 100644 index 51689e6a3..000000000 --- a/Testing/Data/Baseline/BasicFilters_SquaredDifferenceImageFilter_Ramp_Short2.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2386d6ea4c8958e0b4f6b82d28a4fc00 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_StandardDeviationProjectionImageFilter_z_projection.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_StandardDeviationProjectionImageFilter_z_projection.nrrd.md5 deleted file mode 100644 index 8ff0f4ec8..000000000 --- a/Testing/Data/Baseline/BasicFilters_StandardDeviationProjectionImageFilter_z_projection.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -fc0ec7b3808f1c906b9c3450852fb68e \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_StochasticFractalDimensionImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_StochasticFractalDimensionImageFilter_default.nrrd.md5 deleted file mode 100644 index c96e99655..000000000 --- a/Testing/Data/Baseline/BasicFilters_StochasticFractalDimensionImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2bf73b03f2bf30b04a6b1870ad753a2c diff --git a/Testing/Data/Baseline/BasicFilters_StochasticFractalDimensionImageFilter_mask.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_StochasticFractalDimensionImageFilter_mask.nrrd.md5 deleted file mode 100644 index 48bebb1fb..000000000 --- a/Testing/Data/Baseline/BasicFilters_StochasticFractalDimensionImageFilter_mask.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -74c95e80fd66fd59647734ce072068ee diff --git a/Testing/Data/Baseline/BasicFilters_SumProjectionImageFilter_z_projection.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SumProjectionImageFilter_z_projection.nrrd.md5 deleted file mode 100644 index 509d7ed1d..000000000 --- a/Testing/Data/Baseline/BasicFilters_SumProjectionImageFilter_z_projection.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -4b3eeb33cfe1f4e2a8e3df5cbe185c7e \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_SymmetricForcesDemonsRegistrationFilter_2d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SymmetricForcesDemonsRegistrationFilter_2d.nrrd.md5 deleted file mode 100644 index 7b78efac8..000000000 --- a/Testing/Data/Baseline/BasicFilters_SymmetricForcesDemonsRegistrationFilter_2d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -0018a552a6a1f951943a6e7bbce24d04 diff --git a/Testing/Data/Baseline/BasicFilters_SymmetricForcesDemonsRegistrationFilter_2d_with_initial.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_SymmetricForcesDemonsRegistrationFilter_2d_with_initial.nrrd.md5 deleted file mode 100644 index cef5db384..000000000 --- a/Testing/Data/Baseline/BasicFilters_SymmetricForcesDemonsRegistrationFilter_2d_with_initial.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -85f1400b374d38312d03dc8acb874b7c diff --git a/Testing/Data/Baseline/BasicFilters_TanImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_TanImageFilter_defaults.nrrd.md5 deleted file mode 100644 index 90bf27adf..000000000 --- a/Testing/Data/Baseline/BasicFilters_TanImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -bfa527fe87f6938731546a2323955ba2 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_TanImageFilter_vector.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_TanImageFilter_vector.nrrd.md5 deleted file mode 100644 index 285e9d199..000000000 --- a/Testing/Data/Baseline/BasicFilters_TanImageFilter_vector.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c24561fcdefaa7af0e650f55994fb96d \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_TernaryMagnitudeImageFilter_3d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_TernaryMagnitudeImageFilter_3d.nrrd.md5 deleted file mode 100644 index f05358cd6..000000000 --- a/Testing/Data/Baseline/BasicFilters_TernaryMagnitudeImageFilter_3d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -404c49e9e4caec16efea719d8d061b02 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_TernaryMagnitudeSquaredImageFilter_3d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_TernaryMagnitudeSquaredImageFilter_3d.nrrd.md5 deleted file mode 100644 index 17eb40ae9..000000000 --- a/Testing/Data/Baseline/BasicFilters_TernaryMagnitudeSquaredImageFilter_3d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -6e882edcffbc57024eedd35334c0142f \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ThresholdSegmentationLevelSetImageFilter_cthead.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ThresholdSegmentationLevelSetImageFilter_cthead.nrrd.md5 deleted file mode 100644 index e0d60cf64..000000000 --- a/Testing/Data/Baseline/BasicFilters_ThresholdSegmentationLevelSetImageFilter_cthead.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c480d7f2e7659c12e42895af1593084d \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_TikhonovDeconvolutionImageFilter_defaults.1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_TikhonovDeconvolutionImageFilter_defaults.1.nrrd.md5 deleted file mode 100644 index 9e551d170..000000000 --- a/Testing/Data/Baseline/BasicFilters_TikhonovDeconvolutionImageFilter_defaults.1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -788099cb89927e7a5039313cc8476388 diff --git a/Testing/Data/Baseline/BasicFilters_TikhonovDeconvolutionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_TikhonovDeconvolutionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index b41cd9aaa..000000000 --- a/Testing/Data/Baseline/BasicFilters_TikhonovDeconvolutionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -d3e41fb89c9fd36d0c55e51450794d25 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_TransformToDisplacementFieldFilter_32.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_TransformToDisplacementFieldFilter_32.nrrd.md5 deleted file mode 100644 index f9d26ba29..000000000 --- a/Testing/Data/Baseline/BasicFilters_TransformToDisplacementFieldFilter_32.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -977d220e392168a93607c4d0e88347a5 diff --git a/Testing/Data/Baseline/BasicFilters_TransformToDisplacementFieldFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_TransformToDisplacementFieldFilter_defaults.nrrd.md5 deleted file mode 100644 index 7bd84bfa9..000000000 --- a/Testing/Data/Baseline/BasicFilters_TransformToDisplacementFieldFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -573fda07c579e017396b4e6ff0e53f42 diff --git a/Testing/Data/Baseline/BasicFilters_UnsharpMaskImageFilter_default.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_UnsharpMaskImageFilter_default.nrrd.md5 deleted file mode 100644 index 1629dccb5..000000000 --- a/Testing/Data/Baseline/BasicFilters_UnsharpMaskImageFilter_default.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -56b93c36ba9bd30fdbfdd3a83bc4616d diff --git a/Testing/Data/Baseline/BasicFilters_UnsharpMaskImageFilter_local_contrast.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_UnsharpMaskImageFilter_local_contrast.nrrd.md5 deleted file mode 100644 index 69156812a..000000000 --- a/Testing/Data/Baseline/BasicFilters_UnsharpMaskImageFilter_local_contrast.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -19744c71d237c153700a172b06ae15e8 diff --git a/Testing/Data/Baseline/BasicFilters_VectorMagnitudeImageFilter_3d.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_VectorMagnitudeImageFilter_3d.nrrd.md5 deleted file mode 100644 index 9c2332efb..000000000 --- a/Testing/Data/Baseline/BasicFilters_VectorMagnitudeImageFilter_3d.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -55dacdce3013e4e086cb5a3e3bdfd2f9 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_WarpImageFilter_cthead1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_WarpImageFilter_cthead1.nrrd.md5 deleted file mode 100644 index 51b37e170..000000000 --- a/Testing/Data/Baseline/BasicFilters_WarpImageFilter_cthead1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -dc36e35d7b966829f3a6ec4d870a3a9a diff --git a/Testing/Data/Baseline/BasicFilters_WarpImageFilter_vm.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_WarpImageFilter_vm.nrrd.md5 deleted file mode 100644 index 26c172c06..000000000 --- a/Testing/Data/Baseline/BasicFilters_WarpImageFilter_vm.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -30e08f2e5cf9126e2a09707c25507a74 diff --git a/Testing/Data/Baseline/BasicFilters_WienerDeconvolutionImageFilter_defaults.1.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_WienerDeconvolutionImageFilter_defaults.1.nrrd.md5 deleted file mode 100644 index 9e551d170..000000000 --- a/Testing/Data/Baseline/BasicFilters_WienerDeconvolutionImageFilter_defaults.1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -788099cb89927e7a5039313cc8476388 diff --git a/Testing/Data/Baseline/BasicFilters_WienerDeconvolutionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_WienerDeconvolutionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index b41cd9aaa..000000000 --- a/Testing/Data/Baseline/BasicFilters_WienerDeconvolutionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -d3e41fb89c9fd36d0c55e51450794d25 \ No newline at end of file diff --git a/Testing/Data/Baseline/BasicFilters_ZeroCrossingBasedEdgeDetectionImageFilter_defaults.nrrd.md5 b/Testing/Data/Baseline/BasicFilters_ZeroCrossingBasedEdgeDetectionImageFilter_defaults.nrrd.md5 deleted file mode 100644 index bbd203613..000000000 --- a/Testing/Data/Baseline/BasicFilters_ZeroCrossingBasedEdgeDetectionImageFilter_defaults.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -023dc8f62b17cf627f55cfbb28fec730 \ No newline at end of file diff --git a/Testing/Data/Baseline/DemonsRegistration1Test_displacement.mha.md5 b/Testing/Data/Baseline/DemonsRegistration1Test_displacement.mha.md5 deleted file mode 100644 index 3370fe95b..000000000 --- a/Testing/Data/Baseline/DemonsRegistration1Test_displacement.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -f0998498df32e1321a045082a0e5000c diff --git a/Testing/Data/Baseline/DemonsRegistration2Test_displacement.mha.md5 b/Testing/Data/Baseline/DemonsRegistration2Test_displacement.mha.md5 deleted file mode 100644 index db99471e3..000000000 --- a/Testing/Data/Baseline/DemonsRegistration2Test_displacement.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -059a97d1e6f0a9b05162b9b44a2fd786 diff --git a/Testing/Data/Baseline/Example_SimpleDerivative.nrrd.md5 b/Testing/Data/Baseline/Example_SimpleDerivative.nrrd.md5 deleted file mode 100644 index ba9ef77ab..000000000 --- a/Testing/Data/Baseline/Example_SimpleDerivative.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2e0a58005a74a02147c5e0517615ce58 diff --git a/Testing/Data/Baseline/Example_SimpleGaussian_2.0.nrrd.md5 b/Testing/Data/Baseline/Example_SimpleGaussian_2.0.nrrd.md5 deleted file mode 100644 index 5d2ce7333..000000000 --- a/Testing/Data/Baseline/Example_SimpleGaussian_2.0.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -df1d5f49dfcf581cbcd866709840c1e8 \ No newline at end of file diff --git a/Testing/Data/Baseline/ImageRegistrationMethod3Test1.mha.md5 b/Testing/Data/Baseline/ImageRegistrationMethod3Test1.mha.md5 deleted file mode 100644 index 0238182ba..000000000 --- a/Testing/Data/Baseline/ImageRegistrationMethod3Test1.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -7dd22432002df480c761923405e82097 diff --git a/Testing/Data/Baseline/ImageRegistrationMethod3Test2.mha.md5 b/Testing/Data/Baseline/ImageRegistrationMethod3Test2.mha.md5 deleted file mode 100644 index b7cf8ede4..000000000 --- a/Testing/Data/Baseline/ImageRegistrationMethod3Test2.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -79670de66f750e0b67432f80faf020ff diff --git a/Testing/Data/Baseline/ImageRegistrationMethodBSpline1.1.mha.md5 b/Testing/Data/Baseline/ImageRegistrationMethodBSpline1.1.mha.md5 deleted file mode 100644 index 7b8e7448e..000000000 --- a/Testing/Data/Baseline/ImageRegistrationMethodBSpline1.1.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -75c41e20d6af0ec74e407348fabf8724 diff --git a/Testing/Data/Baseline/ImageRegistrationMethodBSpline1.mha.md5 b/Testing/Data/Baseline/ImageRegistrationMethodBSpline1.mha.md5 deleted file mode 100644 index d76c0cb70..000000000 --- a/Testing/Data/Baseline/ImageRegistrationMethodBSpline1.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -7b2072f5318f1e8022e6253ffc65404e diff --git a/Testing/Data/Baseline/ImageRegistrationMethodBSpline2.1.mha.md5 b/Testing/Data/Baseline/ImageRegistrationMethodBSpline2.1.mha.md5 deleted file mode 100644 index eae1fd020..000000000 --- a/Testing/Data/Baseline/ImageRegistrationMethodBSpline2.1.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -3c2ba33cff5fd6e7ba9d9a396d55ecb1 diff --git a/Testing/Data/Baseline/ImageRegistrationMethodBSpline2.mha.md5 b/Testing/Data/Baseline/ImageRegistrationMethodBSpline2.mha.md5 deleted file mode 100644 index 627950116..000000000 --- a/Testing/Data/Baseline/ImageRegistrationMethodBSpline2.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -62f8f57ba22917a9ad2aa4d120d12fa9 diff --git a/Testing/Data/Baseline/ImageRegistrationMethodDisplacement1.mha.md5 b/Testing/Data/Baseline/ImageRegistrationMethodDisplacement1.mha.md5 deleted file mode 100644 index 471706d10..000000000 --- a/Testing/Data/Baseline/ImageRegistrationMethodDisplacement1.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -68d9fb40ae60af52190f347dbecbbab7 diff --git a/Testing/Data/Baseline/ImageRegistrationMethodDisplacement1Test2.mha.md5 b/Testing/Data/Baseline/ImageRegistrationMethodDisplacement1Test2.mha.md5 deleted file mode 100644 index 62b2cf2ed..000000000 --- a/Testing/Data/Baseline/ImageRegistrationMethodDisplacement1Test2.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -2f356fdb6b9229d3c14599e19b5d5bae diff --git a/Testing/Data/Baseline/ImageRegistrationMethodExhaustiveTest1.mha.md5 b/Testing/Data/Baseline/ImageRegistrationMethodExhaustiveTest1.mha.md5 deleted file mode 100644 index 01f817c24..000000000 --- a/Testing/Data/Baseline/ImageRegistrationMethodExhaustiveTest1.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -744f66e30e2f58b4909a583a9594becf diff --git a/Testing/Data/Baseline/Registration_Resample_Resample.nrrd.md5 b/Testing/Data/Baseline/Registration_Resample_Resample.nrrd.md5 deleted file mode 100644 index 81ff327e5..000000000 --- a/Testing/Data/Baseline/Registration_Resample_Resample.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -1cbe1c6627fe6d1429e783a88756ebe4 \ No newline at end of file diff --git a/Testing/Data/Baseline/displacement_-13x-17y.mha.md5 b/Testing/Data/Baseline/displacement_-13x-17y.mha.md5 deleted file mode 100644 index aca699ebd..000000000 --- a/Testing/Data/Baseline/displacement_-13x-17y.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -a0cf117c18fcfed8431636dfb3a8c7aa diff --git a/Testing/Data/Baseline/displacement_13x17y.mha.md5 b/Testing/Data/Baseline/displacement_13x17y.mha.md5 deleted file mode 100644 index 52d19d591..000000000 --- a/Testing/Data/Baseline/displacement_13x17y.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -07106ed67d0da496856c7a2a8daf7125 diff --git a/Testing/Data/Input/2th_cthead1.mha.md5 b/Testing/Data/Input/2th_cthead1.mha.md5 deleted file mode 100644 index fbabe5161..000000000 --- a/Testing/Data/Input/2th_cthead1.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -6d5d80a2ea307fa15d41aaabad466751 \ No newline at end of file diff --git a/Testing/Data/Input/2th_cthead1.png.md5 b/Testing/Data/Input/2th_cthead1.png.md5 deleted file mode 100644 index 9903efca4..000000000 --- a/Testing/Data/Input/2th_cthead1.png.md5 +++ /dev/null @@ -1 +0,0 @@ -40a0feefdbb30c6f852f5c6f0d1814b9 diff --git a/Testing/Data/Input/2th_cthead1_distance.nrrd.md5 b/Testing/Data/Input/2th_cthead1_distance.nrrd.md5 deleted file mode 100644 index 2180d7ef4..000000000 --- a/Testing/Data/Input/2th_cthead1_distance.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c049894935864bd2fef8e5d254d3b242 \ No newline at end of file diff --git a/Testing/Data/Input/4D.nii.gz.md5 b/Testing/Data/Input/4D.nii.gz.md5 deleted file mode 100644 index 6a3350182..000000000 --- a/Testing/Data/Input/4D.nii.gz.md5 +++ /dev/null @@ -1 +0,0 @@ -58e10b6898a5d5271a890eecf25093c2 diff --git a/Testing/Data/Input/BlackDots.png.md5 b/Testing/Data/Input/BlackDots.png.md5 deleted file mode 100644 index 6ab5fe310..000000000 --- a/Testing/Data/Input/BlackDots.png.md5 +++ /dev/null @@ -1 +0,0 @@ -4a91cbab8f591cb6a7799136de3f39b6 diff --git a/Testing/Data/Input/BrainProtonDensitySlice.png.md5 b/Testing/Data/Input/BrainProtonDensitySlice.png.md5 deleted file mode 100644 index 274d1daae..000000000 --- a/Testing/Data/Input/BrainProtonDensitySlice.png.md5 +++ /dev/null @@ -1 +0,0 @@ -073df8eb397d1746d2343c78dd4bd964 diff --git a/Testing/Data/Input/BrainProtonDensitySlice20InitialDisplacement.mha.md5 b/Testing/Data/Input/BrainProtonDensitySlice20InitialDisplacement.mha.md5 deleted file mode 100644 index 38e5be808..000000000 --- a/Testing/Data/Input/BrainProtonDensitySlice20InitialDisplacement.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -0afc39fa47bc5582f6de48d3273c39e2 diff --git a/Testing/Data/Input/BrainProtonDensitySliceBSplined10.png.md5 b/Testing/Data/Input/BrainProtonDensitySliceBSplined10.png.md5 deleted file mode 100644 index c6ab3aa57..000000000 --- a/Testing/Data/Input/BrainProtonDensitySliceBSplined10.png.md5 +++ /dev/null @@ -1 +0,0 @@ -4ced84b250c6799a472f569779022044 diff --git a/Testing/Data/Input/BrainProtonDensitySliceBorder20.png.md5 b/Testing/Data/Input/BrainProtonDensitySliceBorder20.png.md5 deleted file mode 100644 index 6302135e8..000000000 --- a/Testing/Data/Input/BrainProtonDensitySliceBorder20.png.md5 +++ /dev/null @@ -1 +0,0 @@ -9967b9c9bae3af9c3aac9676663ee05d diff --git a/Testing/Data/Input/BrainProtonDensitySliceBorder20Mask.png.md5 b/Testing/Data/Input/BrainProtonDensitySliceBorder20Mask.png.md5 deleted file mode 100644 index 3e5cf3a48..000000000 --- a/Testing/Data/Input/BrainProtonDensitySliceBorder20Mask.png.md5 +++ /dev/null @@ -1 +0,0 @@ -646be5659d98e7cef40b63b3dff86726 diff --git a/Testing/Data/Input/BrainProtonDensitySliceR10X13Y17.png.md5 b/Testing/Data/Input/BrainProtonDensitySliceR10X13Y17.png.md5 deleted file mode 100644 index 8058585db..000000000 --- a/Testing/Data/Input/BrainProtonDensitySliceR10X13Y17.png.md5 +++ /dev/null @@ -1 +0,0 @@ -610392a128986d934dfc0a1b0dc27e91 diff --git a/Testing/Data/Input/BrainProtonDensitySliceR10X13Y17S12.png.md5 b/Testing/Data/Input/BrainProtonDensitySliceR10X13Y17S12.png.md5 deleted file mode 100644 index 42e5aa498..000000000 --- a/Testing/Data/Input/BrainProtonDensitySliceR10X13Y17S12.png.md5 +++ /dev/null @@ -1 +0,0 @@ -eefa617b3220c1cea47bdc4672541b2d diff --git a/Testing/Data/Input/BrainProtonDensitySliceShifted13x17y.png.md5 b/Testing/Data/Input/BrainProtonDensitySliceShifted13x17y.png.md5 deleted file mode 100644 index 98dda2901..000000000 --- a/Testing/Data/Input/BrainProtonDensitySliceShifted13x17y.png.md5 +++ /dev/null @@ -1 +0,0 @@ -d3568c0d5c44afedb78305f620c0a79b diff --git a/Testing/Data/Input/BrainT1SliceBorder20.png.md5 b/Testing/Data/Input/BrainT1SliceBorder20.png.md5 deleted file mode 100644 index b51fb4304..000000000 --- a/Testing/Data/Input/BrainT1SliceBorder20.png.md5 +++ /dev/null @@ -1 +0,0 @@ -9413fa5d446c05593a53f810e3ddc241 diff --git a/Testing/Data/Input/DeconvolutionInput.nrrd.md5 b/Testing/Data/Input/DeconvolutionInput.nrrd.md5 deleted file mode 100644 index 6274aeaac..000000000 --- a/Testing/Data/Input/DeconvolutionInput.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -76eef439e0eb023945d94c1bb656948e \ No newline at end of file diff --git a/Testing/Data/Input/DeconvolutionKernel.nrrd.md5 b/Testing/Data/Input/DeconvolutionKernel.nrrd.md5 deleted file mode 100644 index 9d7302f13..000000000 --- a/Testing/Data/Input/DeconvolutionKernel.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -a6659d27180f14085a5f4db3563c0557 \ No newline at end of file diff --git a/Testing/Data/Input/DicomSeries/Image0075.dcm.md5 b/Testing/Data/Input/DicomSeries/Image0075.dcm.md5 deleted file mode 100644 index a3e0ff877..000000000 --- a/Testing/Data/Input/DicomSeries/Image0075.dcm.md5 +++ /dev/null @@ -1 +0,0 @@ -ccc05a53f8c4a7f74b75a07b2cfba7b1 \ No newline at end of file diff --git a/Testing/Data/Input/DicomSeries/Image0076.dcm.md5 b/Testing/Data/Input/DicomSeries/Image0076.dcm.md5 deleted file mode 100644 index 2974cfedc..000000000 --- a/Testing/Data/Input/DicomSeries/Image0076.dcm.md5 +++ /dev/null @@ -1 +0,0 @@ -0866419dc414715fddc551d6a30fd423 \ No newline at end of file diff --git a/Testing/Data/Input/DicomSeries/Image0077.dcm.md5 b/Testing/Data/Input/DicomSeries/Image0077.dcm.md5 deleted file mode 100644 index 1ec490312..000000000 --- a/Testing/Data/Input/DicomSeries/Image0077.dcm.md5 +++ /dev/null @@ -1 +0,0 @@ -94241ced01d7cff864c6371b9f68bf72 \ No newline at end of file diff --git a/Testing/Data/Input/Gaussian_1.5.nrrd.md5 b/Testing/Data/Input/Gaussian_1.5.nrrd.md5 deleted file mode 100644 index 43fb20c96..000000000 --- a/Testing/Data/Input/Gaussian_1.5.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -efdb1c71a617fbfea06d2f748417b9de \ No newline at end of file diff --git a/Testing/Data/Input/LargeWhiteCircle.nrrd.md5 b/Testing/Data/Input/LargeWhiteCircle.nrrd.md5 deleted file mode 100644 index 875dca6bc..000000000 --- a/Testing/Data/Input/LargeWhiteCircle.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -34592e2640fe5f18ec00c2e1792e2ed4 \ No newline at end of file diff --git a/Testing/Data/Input/LargeWhiteCircle_Float.nrrd.md5 b/Testing/Data/Input/LargeWhiteCircle_Float.nrrd.md5 deleted file mode 100644 index 75e1ca19f..000000000 --- a/Testing/Data/Input/LargeWhiteCircle_Float.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -fe1150a03de8937341b470a52ab6fd28 \ No newline at end of file diff --git a/Testing/Data/Input/OAS1_0001_MR1_mpr-1_anon.nrrd.md5 b/Testing/Data/Input/OAS1_0001_MR1_mpr-1_anon.nrrd.md5 deleted file mode 100644 index 52d8753b0..000000000 --- a/Testing/Data/Input/OAS1_0001_MR1_mpr-1_anon.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -034e616e71ade1535cba4a77180ad79d \ No newline at end of file diff --git a/Testing/Data/Input/OAS1_0002_MR1_mpr-1_anon.nrrd.md5 b/Testing/Data/Input/OAS1_0002_MR1_mpr-1_anon.nrrd.md5 deleted file mode 100644 index 151510ada..000000000 --- a/Testing/Data/Input/OAS1_0002_MR1_mpr-1_anon.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -49129770e7152ea5d203a519ac17be43 \ No newline at end of file diff --git a/Testing/Data/Input/RA-FFT-Complex.nrrd.md5 b/Testing/Data/Input/RA-FFT-Complex.nrrd.md5 deleted file mode 100644 index bbdea42ff..000000000 --- a/Testing/Data/Input/RA-FFT-Complex.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -11bda04eb63e37b655cd8a21bb2d01ac \ No newline at end of file diff --git a/Testing/Data/Input/RA-Float.nrrd.md5 b/Testing/Data/Input/RA-Float.nrrd.md5 deleted file mode 100644 index ff876ba5e..000000000 --- a/Testing/Data/Input/RA-Float.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -6f397b22835e552c14d762e5ff73c288 \ No newline at end of file diff --git a/Testing/Data/Input/RA-Gradient.nrrd.md5 b/Testing/Data/Input/RA-Gradient.nrrd.md5 deleted file mode 100644 index 4ffb6816f..000000000 --- a/Testing/Data/Input/RA-Gradient.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -ff9e33e423f9ff38944cc05982b9eea9 \ No newline at end of file diff --git a/Testing/Data/Input/RA-HalfFFT-Complex.nrrd.md5 b/Testing/Data/Input/RA-HalfFFT-Complex.nrrd.md5 deleted file mode 100644 index b6f41dd9e..000000000 --- a/Testing/Data/Input/RA-HalfFFT-Complex.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -00da43039a19ec8777cd493efccb16d9 \ No newline at end of file diff --git a/Testing/Data/Input/RA-Short.nrrd.md5 b/Testing/Data/Input/RA-Short.nrrd.md5 deleted file mode 100644 index d060d6033..000000000 --- a/Testing/Data/Input/RA-Short.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -5a9cdc76f66bb911460cb99f14955a6f \ No newline at end of file diff --git a/Testing/Data/Input/RA-Slice-Float.nrrd.md5 b/Testing/Data/Input/RA-Slice-Float.nrrd.md5 deleted file mode 100644 index 8c3b04313..000000000 --- a/Testing/Data/Input/RA-Slice-Float.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -231f8de5271265dbcc49bac754ae1ad8 \ No newline at end of file diff --git a/Testing/Data/Input/RA-Slice-Short.nrrd.md5 b/Testing/Data/Input/RA-Slice-Short.nrrd.md5 deleted file mode 100644 index f4f8902dc..000000000 --- a/Testing/Data/Input/RA-Slice-Short.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -6d7b447232907ddf7b898b94b688416a \ No newline at end of file diff --git a/Testing/Data/Input/RA-Slice-Short.png.md5 b/Testing/Data/Input/RA-Slice-Short.png.md5 deleted file mode 100644 index aab9aafad..000000000 --- a/Testing/Data/Input/RA-Slice-Short.png.md5 +++ /dev/null @@ -1 +0,0 @@ -c6032ffd5d006e092204d195d5bd7f66 diff --git a/Testing/Data/Input/Ramp-Down-Short.nrrd.md5 b/Testing/Data/Input/Ramp-Down-Short.nrrd.md5 deleted file mode 100644 index 9be4b91ea..000000000 --- a/Testing/Data/Input/Ramp-Down-Short.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -a96ab975b6dcca318a554ae586e77bcc \ No newline at end of file diff --git a/Testing/Data/Input/Ramp-One-Zero-Float.nrrd.md5 b/Testing/Data/Input/Ramp-One-Zero-Float.nrrd.md5 deleted file mode 100644 index 6c95a661d..000000000 --- a/Testing/Data/Input/Ramp-One-Zero-Float.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -020ea32135e137235cb3031607fca59a \ No newline at end of file diff --git a/Testing/Data/Input/Ramp-Up-Short.nrrd.md5 b/Testing/Data/Input/Ramp-Up-Short.nrrd.md5 deleted file mode 100644 index a2013ca51..000000000 --- a/Testing/Data/Input/Ramp-Up-Short.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -35c331f3f43dfe1dd5f3825b0d2707ef \ No newline at end of file diff --git a/Testing/Data/Input/Ramp-Zero-One-Float.nrrd.md5 b/Testing/Data/Input/Ramp-Zero-One-Float.nrrd.md5 deleted file mode 100644 index 44cf76b17..000000000 --- a/Testing/Data/Input/Ramp-Zero-One-Float.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -b040816b6e4da7984bf0187944789163 \ No newline at end of file diff --git a/Testing/Data/Input/STAPLE1-binary.png.md5 b/Testing/Data/Input/STAPLE1-binary.png.md5 deleted file mode 100644 index 19af73fd5..000000000 --- a/Testing/Data/Input/STAPLE1-binary.png.md5 +++ /dev/null @@ -1 +0,0 @@ -e25c66ea26dce2141c7857ee05392857 diff --git a/Testing/Data/Input/STAPLE1.png.md5 b/Testing/Data/Input/STAPLE1.png.md5 deleted file mode 100644 index c1caa8229..000000000 --- a/Testing/Data/Input/STAPLE1.png.md5 +++ /dev/null @@ -1 +0,0 @@ -a5f3879544aa56e12bfa2d3f7fdf155b diff --git a/Testing/Data/Input/STAPLE2-binary.png.md5 b/Testing/Data/Input/STAPLE2-binary.png.md5 deleted file mode 100644 index 17485e827..000000000 --- a/Testing/Data/Input/STAPLE2-binary.png.md5 +++ /dev/null @@ -1 +0,0 @@ -103bda839c77c0fafac2cc0ef3fc3a6e diff --git a/Testing/Data/Input/STAPLE2.png.md5 b/Testing/Data/Input/STAPLE2.png.md5 deleted file mode 100644 index f2fa93070..000000000 --- a/Testing/Data/Input/STAPLE2.png.md5 +++ /dev/null @@ -1 +0,0 @@ -591eeda7a3b79c067532360bf069ee3e diff --git a/Testing/Data/Input/SmallWhiteCircle.nrrd.md5 b/Testing/Data/Input/SmallWhiteCircle.nrrd.md5 deleted file mode 100644 index d0669dc51..000000000 --- a/Testing/Data/Input/SmallWhiteCircle.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -ac608d7f74d0574a7a43f53104cef7c5 \ No newline at end of file diff --git a/Testing/Data/Input/SmallWhiteCircle_Float.nrrd.md5 b/Testing/Data/Input/SmallWhiteCircle_Float.nrrd.md5 deleted file mode 100644 index fdd8bb19e..000000000 --- a/Testing/Data/Input/SmallWhiteCircle_Float.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -2de60c03217b0e6684b8a69bdfe48ec3 \ No newline at end of file diff --git a/Testing/Data/Input/VM1111Shrink-RGB.png.md5 b/Testing/Data/Input/VM1111Shrink-RGB.png.md5 deleted file mode 100644 index 288bc4d04..000000000 --- a/Testing/Data/Input/VM1111Shrink-RGB.png.md5 +++ /dev/null @@ -1 +0,0 @@ -baff8620519e23330f77c65b0fe5bc01 diff --git a/Testing/Data/Input/VM1111Shrink-RGBFloat.nrrd.md5 b/Testing/Data/Input/VM1111Shrink-RGBFloat.nrrd.md5 deleted file mode 100644 index 362cac1e1..000000000 --- a/Testing/Data/Input/VM1111Shrink-RGBFloat.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -b7634fc4ab8598e937f2245d15f4155c \ No newline at end of file diff --git a/Testing/Data/Input/VM1111Shrink-RGBNorm.nrrd.md5 b/Testing/Data/Input/VM1111Shrink-RGBNorm.nrrd.md5 deleted file mode 100644 index c28e39e4e..000000000 --- a/Testing/Data/Input/VM1111Shrink-RGBNorm.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -efd7cf9f6ce3b3e7e235413092371873 \ No newline at end of file diff --git a/Testing/Data/Input/VM1111Shrink-dis1.nrrd.md5 b/Testing/Data/Input/VM1111Shrink-dis1.nrrd.md5 deleted file mode 100644 index 2773c456e..000000000 --- a/Testing/Data/Input/VM1111Shrink-dis1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -b8467e10c1f01ca47ab25324f95a1a00 diff --git a/Testing/Data/Input/VM1111Shrink-mask.png.md5 b/Testing/Data/Input/VM1111Shrink-mask.png.md5 deleted file mode 100644 index 448e8bdef..000000000 --- a/Testing/Data/Input/VM1111Shrink-mask.png.md5 +++ /dev/null @@ -1 +0,0 @@ -887994459da44cf9fb4f3f0db2987d29 diff --git a/Testing/Data/Input/WhiteDots.png.md5 b/Testing/Data/Input/WhiteDots.png.md5 deleted file mode 100644 index aaf85f0b8..000000000 --- a/Testing/Data/Input/WhiteDots.png.md5 +++ /dev/null @@ -1 +0,0 @@ -55d916b5b65201c6e9c5d362899bc808 diff --git a/Testing/Data/Input/cthead1-Float.mha.md5 b/Testing/Data/Input/cthead1-Float.mha.md5 deleted file mode 100644 index 815300480..000000000 --- a/Testing/Data/Input/cthead1-Float.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -25de5707b18c0c684fd5fa30351bf787 \ No newline at end of file diff --git a/Testing/Data/Input/cthead1-dis1.nrrd.md5 b/Testing/Data/Input/cthead1-dis1.nrrd.md5 deleted file mode 100644 index 37e1214d3..000000000 --- a/Testing/Data/Input/cthead1-dis1.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -b76b61c345883fc9870a1ec9839bdf08 diff --git a/Testing/Data/Input/cthead1-grad-mag.mha.md5 b/Testing/Data/Input/cthead1-grad-mag.mha.md5 deleted file mode 100644 index a84cd18c4..000000000 --- a/Testing/Data/Input/cthead1-grad-mag.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -e8996c1cdc3ab478482d927143f7fa3f diff --git a/Testing/Data/Input/cthead1-grad-mag.nrrd.md5 b/Testing/Data/Input/cthead1-grad-mag.nrrd.md5 deleted file mode 100644 index c895c6f70..000000000 --- a/Testing/Data/Input/cthead1-grad-mag.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -9b4b931636f25786ee9e13436f26a5b7 \ No newline at end of file diff --git a/Testing/Data/Input/cthead1-ls-seed.nrrd.md5 b/Testing/Data/Input/cthead1-ls-seed.nrrd.md5 deleted file mode 100644 index e3db7541c..000000000 --- a/Testing/Data/Input/cthead1-ls-seed.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c4d636321830bfbf1a623d315a45cb2d \ No newline at end of file diff --git a/Testing/Data/Input/cthead1-marker.png.md5 b/Testing/Data/Input/cthead1-marker.png.md5 deleted file mode 100644 index 1786a76b9..000000000 --- a/Testing/Data/Input/cthead1-marker.png.md5 +++ /dev/null @@ -1 +0,0 @@ -e06d0a2bdb16ac6ed5ceb5618e88d5e6 diff --git a/Testing/Data/Input/cthead1-mask.png.md5 b/Testing/Data/Input/cthead1-mask.png.md5 deleted file mode 100644 index b28a66abf..000000000 --- a/Testing/Data/Input/cthead1-mask.png.md5 +++ /dev/null @@ -1 +0,0 @@ -324b302006c8897110167b794a1ff65e diff --git a/Testing/Data/Input/cthead1-seed.png.md5 b/Testing/Data/Input/cthead1-seed.png.md5 deleted file mode 100644 index ecb03f22f..000000000 --- a/Testing/Data/Input/cthead1-seed.png.md5 +++ /dev/null @@ -1 +0,0 @@ -46b46ab71376789e5e998d0591f08818 diff --git a/Testing/Data/Input/cthead1.png.md5 b/Testing/Data/Input/cthead1.png.md5 deleted file mode 100644 index 16027314d..000000000 --- a/Testing/Data/Input/cthead1.png.md5 +++ /dev/null @@ -1 +0,0 @@ -b23198c9e44a48edfd5b83f075eb455c diff --git a/Testing/Data/Input/displacement.mha.md5 b/Testing/Data/Input/displacement.mha.md5 deleted file mode 100644 index c7f073361..000000000 --- a/Testing/Data/Input/displacement.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -d924c8865957a8b9be899ed66dd438de diff --git a/Testing/Data/Input/fruit.png.md5 b/Testing/Data/Input/fruit.png.md5 deleted file mode 100644 index 04340720e..000000000 --- a/Testing/Data/Input/fruit.png.md5 +++ /dev/null @@ -1 +0,0 @@ -fff3603333662de0b5344531810017d8 diff --git a/Testing/Data/Input/noisy-vector-grid.nrrd.md5 b/Testing/Data/Input/noisy-vector-grid.nrrd.md5 deleted file mode 100644 index 6fa9d8a02..000000000 --- a/Testing/Data/Input/noisy-vector-grid.nrrd.md5 +++ /dev/null @@ -1 +0,0 @@ -c152ebd08f40d65ddb9214fe2acc721e \ No newline at end of file diff --git a/Testing/Data/Input/points_5d.mha.md5 b/Testing/Data/Input/points_5d.mha.md5 deleted file mode 100644 index 2ec9c1ec4..000000000 --- a/Testing/Data/Input/points_5d.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -497222c71a29711434ee2e5c171fd83d diff --git a/Testing/Data/Input/simple-label-b.png.md5 b/Testing/Data/Input/simple-label-b.png.md5 deleted file mode 100644 index 12d84fe4f..000000000 --- a/Testing/Data/Input/simple-label-b.png.md5 +++ /dev/null @@ -1 +0,0 @@ -4cec8cbcd795d40d7be1c3d920e1e024 diff --git a/Testing/Data/Input/simple-label-c.png.md5 b/Testing/Data/Input/simple-label-c.png.md5 deleted file mode 100644 index e2b26780f..000000000 --- a/Testing/Data/Input/simple-label-c.png.md5 +++ /dev/null @@ -1 +0,0 @@ -d4ca7f23ff5fc72c52ef3ad37d10f2cb diff --git a/Testing/Data/Input/simple-label-d.png.md5 b/Testing/Data/Input/simple-label-d.png.md5 deleted file mode 100644 index 9f1e9bd24..000000000 --- a/Testing/Data/Input/simple-label-d.png.md5 +++ /dev/null @@ -1 +0,0 @@ -862d9806e7d6fced2ac0c06d52925b72 diff --git a/Testing/Data/Input/simple-label-e.png.md5 b/Testing/Data/Input/simple-label-e.png.md5 deleted file mode 100644 index c38a2377e..000000000 --- a/Testing/Data/Input/simple-label-e.png.md5 +++ /dev/null @@ -1 +0,0 @@ -97e5a051efb6d8691f867958da58baa4 diff --git a/Testing/Data/Input/xforms/affine_i_3.txt.md5 b/Testing/Data/Input/xforms/affine_i_3.txt.md5 deleted file mode 100644 index e596ac6a0..000000000 --- a/Testing/Data/Input/xforms/affine_i_3.txt.md5 +++ /dev/null @@ -1 +0,0 @@ -a55260196088347b84534faeed9d8233 \ No newline at end of file diff --git a/Testing/Data/Input/xforms/bspline_ceoff0.mha.md5 b/Testing/Data/Input/xforms/bspline_ceoff0.mha.md5 deleted file mode 100644 index 2a96f1eaa..000000000 --- a/Testing/Data/Input/xforms/bspline_ceoff0.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -88c80e17e67492cf531554655995106b diff --git a/Testing/Data/Input/xforms/composite_i_3.txt.md5 b/Testing/Data/Input/xforms/composite_i_3.txt.md5 deleted file mode 100644 index 247e739a2..000000000 --- a/Testing/Data/Input/xforms/composite_i_3.txt.md5 +++ /dev/null @@ -1 +0,0 @@ -434dabc647640c80c239440b49e8ee13 \ No newline at end of file diff --git a/Testing/Data/Input/xforms/displacement_-13x-17y.txt.md5 b/Testing/Data/Input/xforms/displacement_-13x-17y.txt.md5 deleted file mode 100644 index 1930e505c..000000000 --- a/Testing/Data/Input/xforms/displacement_-13x-17y.txt.md5 +++ /dev/null @@ -1 +0,0 @@ -0ab6f55004ed273f0666b5d03cb4c95b diff --git a/Testing/Data/Input/xforms/i_3.txt.md5 b/Testing/Data/Input/xforms/i_3.txt.md5 deleted file mode 100644 index 30b038274..000000000 --- a/Testing/Data/Input/xforms/i_3.txt.md5 +++ /dev/null @@ -1 +0,0 @@ -15d4c05e69d3fb2e5bc879fd7190a440 \ No newline at end of file diff --git a/Testing/Data/Input/xforms/quaternion_rigid_i_3.txt.md5 b/Testing/Data/Input/xforms/quaternion_rigid_i_3.txt.md5 deleted file mode 100644 index 161f1f1f3..000000000 --- a/Testing/Data/Input/xforms/quaternion_rigid_i_3.txt.md5 +++ /dev/null @@ -1 +0,0 @@ -095fd41dca46f9651e623c62aec8989e \ No newline at end of file diff --git a/Testing/Data/Input/xforms/scale_i_3.txt.md5 b/Testing/Data/Input/xforms/scale_i_3.txt.md5 deleted file mode 100644 index 8781f27b8..000000000 --- a/Testing/Data/Input/xforms/scale_i_3.txt.md5 +++ /dev/null @@ -1 +0,0 @@ -b6ad0c0c35458afeb93dd0b1d46679dc diff --git a/Testing/Data/Input/xforms/scale_logarithmic_i_3.txt.md5 b/Testing/Data/Input/xforms/scale_logarithmic_i_3.txt.md5 deleted file mode 100644 index 74e0d9bf0..000000000 --- a/Testing/Data/Input/xforms/scale_logarithmic_i_3.txt.md5 +++ /dev/null @@ -1 +0,0 @@ -6ce23a65b0e176d3d1bf2ea68c2f7033 diff --git a/Testing/Data/Input/xforms/translation_-13x-17y.txt.md5 b/Testing/Data/Input/xforms/translation_-13x-17y.txt.md5 deleted file mode 100644 index b16d5afec..000000000 --- a/Testing/Data/Input/xforms/translation_-13x-17y.txt.md5 +++ /dev/null @@ -1 +0,0 @@ -a53598c8213ff83630739e1ab1621b2f diff --git a/Testing/Data/Input/xforms/translation_i_3.txt.md5 b/Testing/Data/Input/xforms/translation_i_3.txt.md5 deleted file mode 100644 index 962ca7805..000000000 --- a/Testing/Data/Input/xforms/translation_i_3.txt.md5 +++ /dev/null @@ -1 +0,0 @@ -08a33cd9429e453c57eeb8ff242cc489 \ No newline at end of file diff --git a/Testing/Data/Input/xforms/versor_i_3.txt.md5 b/Testing/Data/Input/xforms/versor_i_3.txt.md5 deleted file mode 100644 index e3aee5c53..000000000 --- a/Testing/Data/Input/xforms/versor_i_3.txt.md5 +++ /dev/null @@ -1 +0,0 @@ -efae3d661dd824cf11d6233e0c00889f \ No newline at end of file diff --git a/Wrapping/R/Packaging/SimpleITK/inst/extdata/cthead1-Float.mha.md5 b/Wrapping/R/Packaging/SimpleITK/inst/extdata/cthead1-Float.mha.md5 deleted file mode 100644 index 815300480..000000000 --- a/Wrapping/R/Packaging/SimpleITK/inst/extdata/cthead1-Float.mha.md5 +++ /dev/null @@ -1 +0,0 @@ -25de5707b18c0c684fd5fa30351bf787 \ No newline at end of file diff --git a/Wrapping/R/Packaging/SimpleITK/inst/extdata/cthead1.png.md5 b/Wrapping/R/Packaging/SimpleITK/inst/extdata/cthead1.png.md5 deleted file mode 100644 index 16027314d..000000000 --- a/Wrapping/R/Packaging/SimpleITK/inst/extdata/cthead1.png.md5 +++ /dev/null @@ -1 +0,0 @@ -b23198c9e44a48edfd5b83f075eb455c diff --git a/Wrapping/R/Packaging/SimpleITK/man/sitkRdfiles.tar.gz.md5 b/Wrapping/R/Packaging/SimpleITK/man/sitkRdfiles.tar.gz.md5 deleted file mode 100644 index 0ea57d372..000000000 --- a/Wrapping/R/Packaging/SimpleITK/man/sitkRdfiles.tar.gz.md5 +++ /dev/null @@ -1 +0,0 @@ -f39ee5b792b0f3efb52d2601fe01022e From 3348013dd0621069a9706cb7ef958a96939709eb Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 23 Aug 2019 13:19:33 -0400 Subject: [PATCH 177/400] Update superbuild source download to use sha512 --- SuperBuild/SuperBuild.cmake | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/SuperBuild/SuperBuild.cmake b/SuperBuild/SuperBuild.cmake index 73310b262..12ba8b89d 100644 --- a/SuperBuild/SuperBuild.cmake +++ b/SuperBuild/SuperBuild.cmake @@ -71,14 +71,16 @@ add_custom_target( SuperBuildSimpleITKSource ) # function(sitkSourceDownload outVar filename) + set(algo "SHA512") + set(algo_extension ".sha512") set(link_file "${CMAKE_CURRENT_SOURCE_DIR}/ExternalSource/${filename}") - if( NOT EXISTS "${link_file}.md5") - message(FATALERROR "The source download file: \"${link_file}.md5\" does not exists.") + if( NOT EXISTS "${link_file}${algo_extension}") + message(FATALERROR "The source download file: \"${link_file}${algo_extension}\" does not exists.") endif() - file(READ "${link_file}.md5" _HASH) + file(READ "${link_file}${algo_extension}" _HASH) string(STRIP "${_HASH}" _HASH) - set(${outVar}_HASH "MD5=${_HASH}" PARENT_SCOPE) + set(${outVar}_HASH "${algo}=${_HASH}" PARENT_SCOPE) ExternalData_Expand_arguments( SuperBuildSimpleITKSourceReal From 57afbfe11e72e341402da506871ebda15b5e0e2e Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 23 Aug 2019 16:56:52 -0400 Subject: [PATCH 178/400] Add option to disable matching size in dual dispatched filters The WarpImageFilter does not require the displacement field to match the domain and parameters of the input image. closes #702 --- Code/BasicFilters/json/WarpImageFilter.json | 3 ++- .../templates/sitkDualImageFilterTemplate.cxx.in | 12 +++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Code/BasicFilters/json/WarpImageFilter.json b/Code/BasicFilters/json/WarpImageFilter.json index b65243b7d..ea522cb1f 100644 --- a/Code/BasicFilters/json/WarpImageFilter.json +++ b/Code/BasicFilters/json/WarpImageFilter.json @@ -17,7 +17,8 @@ }, { "name" : "DisplacementField", - "type" : "Image" + "type" : "Image", + "no_size_check" : true } ], "members" : [ diff --git a/Code/BasicFilters/templates/sitkDualImageFilterTemplate.cxx.in b/Code/BasicFilters/templates/sitkDualImageFilterTemplate.cxx.in index a28564cc0..f93bcbf6f 100644 --- a/Code/BasicFilters/templates/sitkDualImageFilterTemplate.cxx.in +++ b/Code/BasicFilters/templates/sitkDualImageFilterTemplate.cxx.in @@ -88,18 +88,24 @@ OUT=[[ ]] end local inputName2 = "image2" +local input2_size_check = true if not (number_of_inputs > 1) and (inputs and (#inputs > 1)) then inputName2 = inputs[2].name:sub(1,1):lower() .. inputs[2].name:sub(2,-1) + input2_size_check = not inputs[2].no_size_check end if number_of_inputs >= 2 or (inputs and (#inputs >= 2)) then OUT=OUT..[[ PixelIDValueType type2 = ]]..inputName2..[[.GetPixelIDValue(); // todo need better error handling and potential type conversion - if ( ]]..inputName1..[[.GetDimension() != ]]..inputName2..[[.GetDimension() || - ]]..inputName1..[[.GetSize() != ]]..inputName2..[[.GetSize() ) + if ( ]]..inputName1..[[.GetDimension() != ]]..inputName2..[[.GetDimension()]] + if input2_size_check then + OUT=OUT..[[ || + ]]..inputName1..[[.GetSize() != ]]..inputName2..[[.GetSize()]] + end + OUT=OUT..[[ ) { - sitkExceptionMacro ( "Both images for ${name} don't match type or dimension!" ); + sitkExceptionMacro ( "Both images for ${name} do not match dimension or size!" ); }]] else OUT=OUT..[[ From 48c3cb1febf8184c17d0150160ba41c678c78507 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Sat, 24 Aug 2019 08:23:56 -0400 Subject: [PATCH 179/400] Update Sphinx to use sha512 hashes --- Documentation/docs/images/CMakeLists.txt | 5 +++-- Documentation/docs/images/Readme.md | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Documentation/docs/images/CMakeLists.txt b/Documentation/docs/images/CMakeLists.txt index 0551007e8..77e53f38e 100644 --- a/Documentation/docs/images/CMakeLists.txt +++ b/Documentation/docs/images/CMakeLists.txt @@ -14,10 +14,11 @@ include(sitkExternalData) set(_target "SimpleITKSphinx-Data") set(_output_path "${CMAKE_CURRENT_SOURCE_DIR}/") -file( GLOB_RECURSE image_links RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/*.md5" ) +set(_algo "sha512") +file( GLOB_RECURSE image_links RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/*.${_algo}" ) foreach(link ${image_links}) - string( REGEX REPLACE "\\.md5$" "" link ${link} ) + string( REGEX REPLACE "\\.${_algo}$" "" link ${link} ) ExternalData_Expand_Arguments( "${_target}" image_location DATA{${link}} diff --git a/Documentation/docs/images/Readme.md b/Documentation/docs/images/Readme.md index 284825da4..4f9e9cff5 100644 --- a/Documentation/docs/images/Readme.md +++ b/Documentation/docs/images/Readme.md @@ -4,9 +4,9 @@ Readme This directory is for images used by for the Sphinx documentation. Because images are relatively large files compared to source code, they are not stored in the git repository. Instead we -just store MD5/SHA512 hashed of the files then utilize [CMake's +just store SHA512 hashed of the files then utilize [CMake's ExternalData](https://cmake.org/cmake/help/v3.10/module/ExternalData.html) module to download the data. To add data to this directory, the file must be uploaded to one of the -binary data stores, and the md5 and sha512 files are committed to the repository. +binary data stores, and the sha512 files are committed to the repository. From 2d8add9d76b4b5f4d6ac60625dbd1368e8642aac Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 9 Sep 2019 11:46:54 -0400 Subject: [PATCH 180/400] Fix FindLuaInterp handling of standard arguments The FindLuaInterp find package module was not handling the standard arguments correctly. So if the required lua executable was not set or found correctly, the CMake processing would continue with unexpected error messages and behavior. --- CMake/FindLuaInterp.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMake/FindLuaInterp.cmake b/CMake/FindLuaInterp.cmake index ddb610db7..c3f72bed9 100644 --- a/CMake/FindLuaInterp.cmake +++ b/CMake/FindLuaInterp.cmake @@ -38,7 +38,7 @@ endif() # handle the QUIETLY and REQUIRED arguments and set LUA_FOUND to TRUE if # all listed variables are TRUE include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Lua +find_package_handle_standard_args(LuaInterp REQUIRED_VARS LUA_EXECUTABLE VERSION_VAR LUA_VERSION_STRING) From 79ec87619dde1d9c74bfeb688b33d99159440b08 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 9 Sep 2019 11:47:15 -0400 Subject: [PATCH 181/400] Fix find_package argument order to match documentation --- CMake/sitkGenerateFilterSource.cmake | 2 +- SuperBuild/SuperBuild.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMake/sitkGenerateFilterSource.cmake b/CMake/sitkGenerateFilterSource.cmake index 2b506d6ad..c4af3e7b0 100644 --- a/CMake/sitkGenerateFilterSource.cmake +++ b/CMake/sitkGenerateFilterSource.cmake @@ -6,7 +6,7 @@ if ( NOT SimpleITK_LUA_EXECUTABLE ) get_property( SAVE_LUA_EXECUTABLE_TYPE CACHE LUA_EXECUTABLE PROPERTY TYPE ) get_property( SAVE_LUA_EXECUTABLE_DOCSTRING CACHE LUA_EXECUTABLE PROPERTY HELPSTRING ) - find_package( LuaInterp REQUIRED 5.1 ) + find_package( LuaInterp 5.1 REQUIRED ) set( SimpleITK_LUA_EXECUTABLE ${LUA_EXECUTABLE} CACHE PATH "Lua executable used for code generation." ) if (DEFINED SAVE_LUA_EXECUTABLE) diff --git a/SuperBuild/SuperBuild.cmake b/SuperBuild/SuperBuild.cmake index 8816fabb5..65db60022 100644 --- a/SuperBuild/SuperBuild.cmake +++ b/SuperBuild/SuperBuild.cmake @@ -281,7 +281,7 @@ option ( SimpleITK_USE_SYSTEM_LUA "Use a pre-compiled version of LUA 5.1 previou sitk_legacy_naming( SimpleITK_USE_SYSTEM_LUA USE_SYSTEM_LUA) mark_as_advanced(SimpleITK_USE_SYSTEM_LUA) if ( SimpleITK_USE_SYSTEM_LUA ) - find_package( LuaInterp REQUIRED 5.1 ) + find_package( LuaInterp 5.1 REQUIRED ) set( SimpleITK_LUA_EXECUTABLE ${LUA_EXECUTABLE} CACHE PATH "Lua executable used for code generation." ) mark_as_advanced( SimpleITK_LUA_EXECUTABLE ) unset( LUA_EXECUTABLE CACHE ) From 35ea0d48b2b4a392f357b8e450a684e493361c3e Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 15 Aug 2019 11:42:02 -0400 Subject: [PATCH 182/400] ENH: Wrapping BinaryPrunningImageFilter This filter only operates on 0 and 1 binary images, so it is only being instantiated with uint8_t --- .../json/BinaryPruningImageFilter.json | 50 +++++++++++++++++++ Testing/Data/Input/branchy-lines.png.sha512 | 1 + 2 files changed, 51 insertions(+) create mode 100644 Code/BasicFilters/json/BinaryPruningImageFilter.json create mode 100644 Testing/Data/Input/branchy-lines.png.sha512 diff --git a/Code/BasicFilters/json/BinaryPruningImageFilter.json b/Code/BasicFilters/json/BinaryPruningImageFilter.json new file mode 100644 index 000000000..3334c85e2 --- /dev/null +++ b/Code/BasicFilters/json/BinaryPruningImageFilter.json @@ -0,0 +1,50 @@ +{ + "name" : "BinaryPruningImageFilter", + "template_code_filename" : "ImageFilter", + "template_test_filename" : "ImageFilter", + "number_of_inputs" : 1, + "doc" : "\\todo this filter may not work in 3D\n \\note the output of this filter is still the same as the input type eventhough the output is 0 or 1.", + "pixel_types" : "typelist::MakeTypeList >::Type", + "members" : [ + { + "name" : "Iteration", + "type" : "uint32_t", + "default" : "3u", + "doc" : "", + "briefdescriptionSet" : "", + "detaileddescriptionSet" : "Set/Get the iteration value", + "briefdescriptionGet" : "", + "detaileddescriptionGet" : "Set/Get the iteration value" + } + ], + "custom_methods" : [], + "tests" : [ + { + "tag" : "default", + "description" : "Test binary thinning", + "md5hash" : "784e596c5f22c6eac7b09c1cdc266d95", + "settings" : [], + "inputs" : [ + "Input/branchy-lines.png" + ] + }, + { + "tag" : "oneHundred", + "description" : "Test binary thinning with 100", + "md5hash" : "4a6958635cc09b4f34f74a31296ef6d7", + "settings" : [ + { + "parameter" : "Iteration", + "value" : 100 + } + ], + "inputs" : [ + "Input/branchy-lines.png" + ] + } + ], + "briefdescription" : "This filter removes \"spurs\" of less than a certain length in the input image.", + "detaileddescription" : "This class is parametrized over the type of the input image and the type of the output image.\n\nThe input is assumed to be a binary image.\n\nThis filter is a sequential pruning algorithm and known to be computational time dependable of the image size. The algorithm is the N-dimensional version of that given for two dimensions in:\n\nRafael C. Gonzales and Richard E. Woods. Digital Image Processing. Addison Wesley, 491-494, (1993).\n\n\\see MorphologyImageFilter \n\n\n\\see BinaryErodeImageFilter \n\n\n\\see BinaryDilateImageFilter \n\n\n\\see BinaryThinningImageFilter \n\n\n\\par ITK Sphinx Examples:\n\n\n\n\\par \\li All ITK Sphinx Examples\n\n\n\n\n\\li Prune Binary Image", + "itk_module" : "ITKBinaryMathematicalMorphology", + "itk_group" : "BinaryMathematicalMorphology" +} diff --git a/Testing/Data/Input/branchy-lines.png.sha512 b/Testing/Data/Input/branchy-lines.png.sha512 new file mode 100644 index 000000000..2e7fc4ebf --- /dev/null +++ b/Testing/Data/Input/branchy-lines.png.sha512 @@ -0,0 +1 @@ +3e441ec953fb34a3abde7473641f21ec257cae086549ac7ab310a42932e3f767d5ea7557349691c23221f6ef89c7c679e485cbebc80fcbb1aec97d3624990228 From 301d82c8ce31da25539bf42402a4d9df20dbaae7 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 9 Sep 2019 14:59:27 -0400 Subject: [PATCH 183/400] Update ITK version along 4.13.2 release $ git log v4.13.2..upstream/release-4.13 --oneline 3213404416 BUG: Update CI scripts from current ITK master 7aac4a6748 BUG: Address bug with small size in output of SliceImageFilter 432dd1b9dc ENH: back-porting #1165 to support Visual Studio 2019 90ad651db4 BUG: Patch missing const qualifier to GDCM dircos_comp comparison a47c974f64 COMP: a fix for non-system double-conversion build ac26e1c55f Merge pull request #969 from dzenanz/release-4.13 3ee6f1e5c9 ENH: use double-conversion's CMake targets a0922944b4 Merge pull request #911 from thewtex/4.13-vxl-gcc-9 9825d546c4 COMP: Add VXL support for GCC 9 c2cfd2b6d1 COMP: VtkGlue module-Provide support for VTK new cmake targets 38c6ca0d76 COMP: Prevent duplicate wrapping ouput file specification --- SuperBuild/External_ITK.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index 9e7fcb426..7b1ca9976 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,7 +52,7 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(ITK_GIT_TAG "4a6e8c84198a741d18a2a39e616c26dda09b6686" CACHE +set(ITK_GIT_TAG "3213404416666c17dbabc8fb0a07f1d27362f32c" CACHE STRING "Tag in ITK git repo") # after 4.13.2 along release-4.13 mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From a37b7bdbec58062831e4bbe6c4d72f6c6490e22c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 12 Sep 2019 15:31:22 -0400 Subject: [PATCH 184/400] Add testing for proper image size after stride indexing This add testing for the image slicing being smaller than that of numpy. The issue was raised on ITK Discourse: https://discourse.itk.org/t/image-slicing-in-python/2160 The test added includes the example provided on Discourse. --- Testing/Unit/Python/ImageIndexingTest.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Testing/Unit/Python/ImageIndexingTest.py b/Testing/Unit/Python/ImageIndexingTest.py index cc4e47d11..c725e5895 100644 --- a/Testing/Unit/Python/ImageIndexingTest.py +++ b/Testing/Unit/Python/ImageIndexingTest.py @@ -82,6 +82,17 @@ def test_2d(self): self.assertImageNDArrayEquals(img[1::2,0::2],nda[0::2,1::2]) self.assertImageNDArrayEquals(img[:3:2,:2:2],nda[:2:2,:3:2]) + # check step size indexing + self.assertImageNDArrayEquals(img[::2,:],nda[:,::2]) + self.assertImageNDArrayEquals(img[:,::2],nda[::2,:]) + self.assertImageNDArrayEquals(img[::2,::2],nda[::2,::2]) + self.assertImageNDArrayEquals(img[::3,:],nda[:,::3]) + self.assertImageNDArrayEquals(img[:,::3],nda[::3,:]) + self.assertImageNDArrayEquals(img[::3,::3],nda[::3,::3]) + self.assertImageNDArrayEquals(img[::2,::3],nda[::3,::2]) + self.assertImageNDArrayEquals(img[::3,::2],nda[::2,::3]) + + # some negative cases self.assertImageNDArrayEquals(img[-4:-1,-2:-1],nda[-2:-1,-4:-1]) @@ -122,6 +133,12 @@ def test_3d_extract(self): self.assertImageNDArrayEquals(img[::-1,:,-2], nda[-2,:,::-1]) self.assertImageNDArrayEquals(img[::-1,0,1:-1], nda[1:-1,0,::-1]) + test_array = np.array([0,1,2,3,4]*6).reshape(3,2,5) + test_array = test_array.swapaxes(2,0) + test_img = sitk.GetImageFromArray(test_array) + sliced = test_img[:,:,::2] + self.assertEqual(sliced.GetSize(), (3,2,3)) + def test_3d(self): """testing __getitem__ for extrating 2D slices from 3D image""" From 76722a8df18a9c6e4a793543a1d2a3b4214f392b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 17 Sep 2019 14:40:23 -0400 Subject: [PATCH 185/400] Add more CMake find related variables including framework options --- SuperBuild/SuperBuild.cmake | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/SuperBuild/SuperBuild.cmake b/SuperBuild/SuperBuild.cmake index 8816fabb5..d84b257f9 100644 --- a/SuperBuild/SuperBuild.cmake +++ b/SuperBuild/SuperBuild.cmake @@ -221,7 +221,14 @@ list( APPEND ep_common_list CMAKE_STRIP_FLAGS CMAKE_PREFIX_PATH + CMAKE_INCLUDE_PATH + CMAKE_LIBRARY_PATH + CMAKE_PROGRAM_PATH + CMAKE_IGNORE_PATH + + CMAKE_FIND_FRAMEWORK CMAKE_FRAMEWORK_PATH + CMAKE_SYSTEM_FRAMEWORK_PATH CMAKE_DL_LIBS CMAKE_THREAD_LIBS_INIT From 4f2189cb4aeebb5a961a542292b4ee9ba6f20d39 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 18 Sep 2019 16:30:19 -0400 Subject: [PATCH 186/400] Add more Superbuild variables to support find root --- SuperBuild/SuperBuild.cmake | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/SuperBuild/SuperBuild.cmake b/SuperBuild/SuperBuild.cmake index d84b257f9..54af6239f 100644 --- a/SuperBuild/SuperBuild.cmake +++ b/SuperBuild/SuperBuild.cmake @@ -230,6 +230,16 @@ list( APPEND ep_common_list CMAKE_FRAMEWORK_PATH CMAKE_SYSTEM_FRAMEWORK_PATH + CMAKE_APPBUNDLE_PATH + CMAKE_FIND_APPBUNDLE + CMAKE_SYSTEM_APPBUNDLE_PATH + + CMAKE_FIND_ROOT_PATH + CMAKE_FIND_ROOT_PATH_MODE_INCLUDE + CMAKE_FIND_ROOT_PATH_MODE_LIBRARY + CMAKE_FIND_ROOT_PATH_MODE_PROGRAM + CMAKE_FIND_ROOT_PATH_MODE_PACKAGE + CMAKE_DL_LIBS CMAKE_THREAD_LIBS_INIT From 836e865a4baaa0c035128916027ec64993e17801 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 23 Sep 2019 15:40:08 -0400 Subject: [PATCH 187/400] Correct CMake command for SHA512 --- Utilities/Maintenance/SourceTarball.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utilities/Maintenance/SourceTarball.bash b/Utilities/Maintenance/SourceTarball.bash index 58452c549..064f7a311 100755 --- a/Utilities/Maintenance/SourceTarball.bash +++ b/Utilities/Maintenance/SourceTarball.bash @@ -72,7 +72,7 @@ if type -p sha512sum >/dev/null; then readonly sha512tool="sha512sum" readonly sha512regex="s/ .*//" elif type -p cmake >/dev/null; then - readonly sha512tool="cmake -E sha512" + readonly sha512tool="cmake -E sha512sum" readonly sha512regex="s/ .*//" else die "No 'sha512sum' tool found." From b3667ca5b3c5d7897a49c909393100bf5ead88dc Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 24 Sep 2019 13:55:48 -0400 Subject: [PATCH 188/400] Support using cmake for md5 sha512 sums CMake will be available on any system building SimpleITK, OS X does not have the hash sum programs available by default. --- .../Maintenance/ContentLinkSynchronization.sh | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/Utilities/Maintenance/ContentLinkSynchronization.sh b/Utilities/Maintenance/ContentLinkSynchronization.sh index d5adc021d..ccb676118 100755 --- a/Utilities/Maintenance/ContentLinkSynchronization.sh +++ b/Utilities/Maintenance/ContentLinkSynchronization.sh @@ -39,13 +39,41 @@ if test $# -lt 1 || test "$1" = "-h" || test "$1" = "--help"; then die "Usage: $0 " fi -if ! type md5sum > /dev/null; then - die "Please install the md5sum executable." + +# Check for a tool to get MD5 sums from. +if type -p md5sum >/dev/null; then + readonly md5tool="md5sum" + readonly md5regex="s/ .*//" +elif type -p md5 >/dev/null; then + readonly md5tool="md5" + readonly md5regex="s/.*= //" +elif type -p cmake >/dev/null; then + readonly md5tool="cmake -E md5sum" + readonly md5regex="s/ .*//" +else + die "No 'md5sum' or 'md5' tool found." fi -if ! type sha512sum > /dev/null; then - die "Please install the sha512sum executable." + +compute_md5() { + $md5tool "$1" | sed -e "$md5regex" +} + + +# Check for a tool to get SHA512 sums from. +if type -p sha512sum >/dev/null; then + readonly sha512tool="sha512sum" + readonly sha512regex="s/ .*//" +elif type -p cmake >/dev/null; then + readonly sha512tool="cmake -E sha512sum" + readonly sha512regex="s/ .*//" +else + die "No 'sha512sum' tool found." fi +compute_sha512 () { + $sha512tool "$1" | sed -e "$sha512regex" +} + top_level_dir=$(git rev-parse --show-toplevel) cd "$top_level_dir" @@ -82,12 +110,12 @@ verify_and_create() { fi fi echo "Verifying ${algo_file}..." - object_algo_hash=$(${algo}sum "${object_store}/${algo_upper}/${algo_hash}" | cut -f 1 -d ' ') + object_algo_hash=$(compute_${algo} "${object_store}/${algo_upper}/${algo_hash}" ) if test "${algo_hash}" != "${object_algo_hash}"; then die "${algo}sum for ${object_store}/${algo_upper}/${algo_hash} does not equal hash in ${algo_file}!" fi - object_alt_algo_hash=$(${alt_algo}sum "${object_store}/${algo_upper}/${algo_hash}" | cut -f 1 -d ' ') + object_alt_algo_hash=$(compute_${alt_algo} "${object_store}/${algo_upper}/${algo_hash}" ) if test -e "${alt_algo_file}"; then echo "Verifying ${alt_algo_file}..." alt_algo_hash=$(cat "${alt_algo_file}" | tr -d '[[:space:]]') From b979dd94a1e920a9eaa5e6e4cbd66bd97271d14c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 24 Sep 2019 13:57:44 -0400 Subject: [PATCH 189/400] Fix bug when wrong content file being created. --- Utilities/Maintenance/ContentLinkSynchronization.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utilities/Maintenance/ContentLinkSynchronization.sh b/Utilities/Maintenance/ContentLinkSynchronization.sh index ccb676118..29e63720c 100755 --- a/Utilities/Maintenance/ContentLinkSynchronization.sh +++ b/Utilities/Maintenance/ContentLinkSynchronization.sh @@ -125,7 +125,7 @@ verify_and_create() { else echo "Creating ${alt_algo_file}..." echo "${object_alt_algo_hash}" > "${alt_algo_file}" - cp "${object_store}/${algo_upper}/${algo_hash}" "${object_store}/${alt_algo_upper}/${alt_algo_hash}" + cp "${object_store}/${algo_upper}/${algo_hash}" "${object_store}/${alt_algo_upper}/${object_alt_algo_hash}" fi done || exit 1 } From 765ef4e7766eb468209e7e67f89970533f5eca87 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 24 Sep 2019 13:58:55 -0400 Subject: [PATCH 190/400] Do not overwrite existing content file. --- Utilities/Maintenance/ContentLinkSynchronization.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Utilities/Maintenance/ContentLinkSynchronization.sh b/Utilities/Maintenance/ContentLinkSynchronization.sh index 29e63720c..114b98578 100755 --- a/Utilities/Maintenance/ContentLinkSynchronization.sh +++ b/Utilities/Maintenance/ContentLinkSynchronization.sh @@ -125,7 +125,9 @@ verify_and_create() { else echo "Creating ${alt_algo_file}..." echo "${object_alt_algo_hash}" > "${alt_algo_file}" - cp "${object_store}/${algo_upper}/${algo_hash}" "${object_store}/${alt_algo_upper}/${object_alt_algo_hash}" + if [ ! -x "${object_store}/${alt_algo_upper}/${object_alt_algo_hash}" ]; then + cp "${object_store}/${algo_upper}/${algo_hash}" "${object_store}/${alt_algo_upper}/${object_alt_algo_hash}" + fi fi done || exit 1 } From f87c853d4262fe90492ef27062cd69d00ca6bcd3 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 24 Sep 2019 13:59:49 -0400 Subject: [PATCH 191/400] Add cleanup option to ContentLinkSynchronization This option came from the upstream InsightToolkit project. --- .../Maintenance/ContentLinkSynchronization.sh | 46 +++++++++++++++++-- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/Utilities/Maintenance/ContentLinkSynchronization.sh b/Utilities/Maintenance/ContentLinkSynchronization.sh index 114b98578..017ff0f31 100755 --- a/Utilities/Maintenance/ContentLinkSynchronization.sh +++ b/Utilities/Maintenance/ContentLinkSynchronization.sh @@ -34,9 +34,24 @@ die() { echo "$@" 1>&2; exit 1 } - -if test $# -lt 1 || test "$1" = "-h" || test "$1" = "--help"; then - die "Usage: $0 " +do_cleanup=false +object_store="" +help=false +while [[ $# -gt 0 ]] ; +do + opt="$1"; + shift; + case "$opt" in + "-h"|"--help") + help=true;; + "--cleanup" ) + do_cleanup=true;; + *) if test "${object_store}" = "" ; then object_store=$opt; else echo >&2 "Invalid option: $opt"; exit 1; fi;; + esac +done + +if test "${object_store}" = "" || $help; then + die "Usage: $0 [--cleanup]" fi @@ -77,8 +92,6 @@ compute_sha512 () { top_level_dir=$(git rev-parse --show-toplevel) cd "$top_level_dir" -object_store=$1 - mkdir -p ${object_store}/{MD5,SHA512} verify_and_create() { @@ -132,9 +145,32 @@ verify_and_create() { done || exit 1 } +cleanup() { + algo=$1 + alt_algo=$2 + + algo_upper=$(echo $algo | awk '{print toupper($0)}') + alt_algo_upper=$(echo $alt_algo | awk '{print toupper($0)}') + + for algo_file_name in `ls "${object_store}/${algo_upper}"`; do + algo_file=${object_store}/${algo_upper}/${algo_file_name} + echo "Verifying ${algo_file}" + alt_algo_file=$("compute_${algo}" "${algo_file}") + if test ! -e "${object_store}/${alt_algo_upper}/${alt_algo_file}"; then + die "extra file ${algo_file} ..." + fi + done || exit 1 +} + + verify_and_create md5 sha512 verify_and_create sha512 md5 +if $do_cleanup; then + cleanup md5 sha512 + cleanup sha512 md5 +fi + echo "" echo "Verification completed successfully." echo "" From 98fd37286d795d6cd4c7ad24c5e34846a21c3b8c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 16 Aug 2019 17:44:25 -0400 Subject: [PATCH 192/400] Use Package dashboard track of AZP language packages --- Testing/CI/Azure/mac_build_python.sh | 1 + Testing/CI/Azure/win_build_csharp.sh | 1 + Testing/CI/Azure/win_build_java.sh | 1 + Testing/CI/Azure/win_build_python.sh | 1 + 4 files changed, 4 insertions(+) diff --git a/Testing/CI/Azure/mac_build_python.sh b/Testing/CI/Azure/mac_build_python.sh index 5a494e3c0..9f7861423 100755 --- a/Testing/CI/Azure/mac_build_python.sh +++ b/Testing/CI/Azure/mac_build_python.sh @@ -31,6 +31,7 @@ export CTEST_CACHE export CTEST_BINARY_DIRECTORY="${AGENT_BUILDDIRECTORY}/py${PYTHON_VERSION}" ctest -D dashboard_source_config_dir="Wrapping/Python" \ + -D "dashboard_track:STRING=Package" \ -D "CTEST_BUILD_NAME:STRING=${AGENT_NAME}-${AGENT_JOBNAME}-py${PYTHON_VERSION}" \ -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 2 diff --git a/Testing/CI/Azure/win_build_csharp.sh b/Testing/CI/Azure/win_build_csharp.sh index f34797831..1963a9b12 100755 --- a/Testing/CI/Azure/win_build_csharp.sh +++ b/Testing/CI/Azure/win_build_csharp.sh @@ -23,6 +23,7 @@ export CXX=cl.exe ctest -D dashboard_source_config_dir="Wrapping/CSharp" \ + -D "dashboard_track:STRING=Package" \ -D "CTEST_BUILD_NAME:STRING=${AGENT_NAME}-${AGENT_JOBNAME}-csharp" \ -D "CTEST_CMAKE_GENERATOR:STRING=Ninja" \ -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V || echo "##vso[task.logissue type=warning]There was a build or testing issue." diff --git a/Testing/CI/Azure/win_build_java.sh b/Testing/CI/Azure/win_build_java.sh index 13d8412d4..196ce9b3e 100755 --- a/Testing/CI/Azure/win_build_java.sh +++ b/Testing/CI/Azure/win_build_java.sh @@ -22,6 +22,7 @@ export CXX=cl.exe ctest -D dashboard_source_config_dir="Wrapping/Java" \ + -D "dashboard_track:STRING=Package" \ -D "CTEST_BUILD_NAME:STRING=${AGENT_NAME}-${AGENT_JOBNAME}-java" \ -D "CTEST_CMAKE_GENERATOR:STRING=Ninja" \ -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V || echo "##vso[task.logissue type=warning]There was a build or testing issue." diff --git a/Testing/CI/Azure/win_build_python.sh b/Testing/CI/Azure/win_build_python.sh index 773b01c52..e7fc9330f 100755 --- a/Testing/CI/Azure/win_build_python.sh +++ b/Testing/CI/Azure/win_build_python.sh @@ -32,6 +32,7 @@ export CC=cl.exe export CXX=cl.exe ctest -D dashboard_source_config_dir="Wrapping/Python" \ + -D "dashboard_track:STRING=Package" \ -D "CTEST_BUILD_NAME:STRING=${AGENT_NAME}-${AGENT_JOBNAME}-py${PYTHON_VERSION}" \ -D "CTEST_CMAKE_GENERATOR:STRING=Ninja" \ -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V || true From b9a08e892efb5c569b651d961829e24072360e4e Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 7 Oct 2019 17:03:04 -0400 Subject: [PATCH 193/400] Update version to 1.2.3 --- Version.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Version.cmake b/Version.cmake index 5a13193e0..dd7e133d8 100644 --- a/Version.cmake +++ b/Version.cmake @@ -10,7 +10,7 @@ set(SimpleITK_VERSION_MAJOR 1) set(SimpleITK_VERSION_MINOR 2) -set(SimpleITK_VERSION_PATCH 2) +set(SimpleITK_VERSION_PATCH 3) #set(SimpleITK_VERSION_TWEAK "") From 9733310a679b4068fa0c82347e1e14d0258e858c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 8 Oct 2019 12:07:20 -0400 Subject: [PATCH 194/400] Correct uage of SourceTarball.bash Corretly specifiy the git hash if the tar ball to generate. --- Testing/CI/Azure/azure-pipelines-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index 2caaf513c..e96113c07 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -110,7 +110,7 @@ jobs: SimpleITK_BUILD_DISTRIBUTE:BOOL=ON - bash: | set -xe - Utilities/Maintenance/SourceTarball.bash ${DASHBOARD_GIT_BRANCH:+-v ${DASHBOARD_GIT_BRANCH}} --tgz --txz --zip $(coreBinaryDirectory)/SimpleITK-build + Utilities/Maintenance/SourceTarball.bash --tgz --txz --zip $(coreBinaryDirectory)/SimpleITK-build ${DASHBOARD_GIT_BRANCH} mkdir -p $(Build.ArtifactStagingDirectory)/archives ls -la shopt -s extglob From 0741d5573b56e220b8a77bf08f22947c3c59a6e3 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 8 Oct 2019 12:08:28 -0400 Subject: [PATCH 195/400] Correct AZP VS2008 packaging name --- Testing/CI/Azure/azure-pipelines-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index e96113c07..4a94ba248 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -259,7 +259,7 @@ jobs: pathtoPublish: $(Build.ArtifactStagingDirectory)/python artifactName: Python - - job: VS2009 + - job: VS2008 dependsOn: Configure condition: ne( variables['configure.skipwindows'], 'true' ) timeoutInMinutes: 360 From b8f9a39582bcf6ef3de882bb66b80163a8a6fe6b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 9 Oct 2019 13:37:52 -0400 Subject: [PATCH 196/400] Only remove ITK Legacy code with default known version of ITK This enables SimpleITK to build against ITKv5 by default. Particularly, ITK 5.1 uses new enums which are not backwards compatible by default. --- SuperBuild/External_ITK.cmake | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index 7b1ca9976..ca8741e9a 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,8 +52,8 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(ITK_GIT_TAG "3213404416666c17dbabc8fb0a07f1d27362f32c" CACHE - STRING "Tag in ITK git repo") # after 4.13.2 along release-4.13 +set(_DEFAULT_ITK_GIT_TAG "3213404416666c17dbabc8fb0a07f1d27362f32c") # after 4.13.2 along release-4.13 +set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") @@ -73,6 +73,14 @@ else() "-DITK_TEMPLATE_VISIBILITY_DEFAULT:BOOL=OFF" ) endif() + +if( ITK_GIT_TAG STREQUAL _DEFAULT_ITK_GIT_TAG ) + # only remove legacy with the tested, and predefined version of ITK + list( APPEND ep_itk_args + "-DITK_LEGACY_REMOVE:BOOL=ON" + ) +endif() + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${proj}-build/CMakeCacheInit.txt" "${ep_itk_cache}\n${ep_common_cache}" ) ExternalProject_Add(${proj} @@ -85,7 +93,6 @@ ExternalProject_Add(${proj} CMAKE_ARGS --no-warn-unused-cli -C "${CMAKE_CURRENT_BINARY_DIR}/${proj}-build/CMakeCacheInit.txt" - -DITK_LEGACY_REMOVE:BOOL=ON ${ep_itk_args} ${ep_common_args} -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON From ad7513602571c133131da28390d400ae99c53267 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 10 Oct 2019 11:38:08 -0400 Subject: [PATCH 197/400] Update the SimpleITK Examples superbuild sitk directory --- SuperBuild/External_SimpleITKExamples.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_SimpleITKExamples.cmake b/SuperBuild/External_SimpleITKExamples.cmake index 37e59b03c..2b93358d6 100644 --- a/SuperBuild/External_SimpleITKExamples.cmake +++ b/SuperBuild/External_SimpleITKExamples.cmake @@ -21,7 +21,7 @@ if (${BUILD_EXAMPLES} ) -C "${CMAKE_CURRENT_BINARY_DIR}/${proj}-build/CMakeCacheInit.txt" ${ep_common_args} -DITK_DIR:PATH=${ITK_DIR} - -DSimpleITK_DIR:PATH=${CMAKE_INSTALL_PREFIX}/lib/cmake/SimpleITK-1.1/ + -DSimpleITK_DIR:PATH=${CMAKE_INSTALL_PREFIX}/lib/cmake/SimpleITK-1.3/ -DCMAKE_SKIP_RPATH:BOOL=ON -DCMAKE_INSTALL_PREFIX:PATH= BUILD_COMMAND ${BUILD_COMMAND_STRING} From ecbe54a0fdc45a27ed1aa2cdf7a02ef8c3ef7124 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 10 Oct 2019 15:54:04 -0400 Subject: [PATCH 198/400] Add methods to get per label measure from LabelOverlapMeasures. --- .../json/LabelOverlapMeasuresImageFilter.json | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) diff --git a/Code/BasicFilters/json/LabelOverlapMeasuresImageFilter.json b/Code/BasicFilters/json/LabelOverlapMeasuresImageFilter.json index 754bfd5d9..504ee39ea 100644 --- a/Code/BasicFilters/json/LabelOverlapMeasuresImageFilter.json +++ b/Code/BasicFilters/json/LabelOverlapMeasuresImageFilter.json @@ -16,6 +16,20 @@ "briefdescriptionGet" : "", "detaileddescriptionGet" : "Get the false negative error for the specified individual label." }, + { + "name" : "FalseNegativeError", + "type" : "double", + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" :[ + { + "name" : "label", + "type" : "int64_t" + } + ], + "detaileddescriptionGet" : "Get the false negative error over all labels." + }, { "name" : "FalsePositiveError", "type" : "double", @@ -23,6 +37,20 @@ "briefdescriptionGet" : "", "detaileddescriptionGet" : "Get the false positive error for the specified individual label." }, + { + "name" : "FalsePositiveError", + "type" : "double", + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" :[ + { + "name" : "label", + "type" : "int64_t" + } + ], + "detaileddescriptionGet" : "Get the false positive error over all labels." + }, { "name" : "MeanOverlap", "type" : "double", @@ -30,6 +58,22 @@ "briefdescriptionGet" : "", "detaileddescriptionGet" : "Get the mean overlap (Dice coefficient) for the specified individual label." }, + { + "name" : "MeanOverlap", + "type" : "double", + "default" : 0.0, + "briefdescriptionGet" : "", + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" :[ + { + "name" : "label", + "type" : "int64_t" + } + ], + "detaileddescriptionGet" : "Get the mean overlap (Dice coefficient) over all labels." + }, { "name" : "UnionOverlap", "type" : "double", @@ -37,6 +81,22 @@ "briefdescriptionGet" : "", "detaileddescriptionGet" : "Get the union overlap (Jaccard coefficient) for the specified individual label." }, + { + "name" : "UnionOverlap", + "type" : "double", + "default" : 0.0, + "briefdescriptionGet" : "", + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" :[ + { + "name" : "label", + "type" : "int64_t" + } + ], + "detaileddescriptionGet" : "Get the union overlap (Jaccard coefficient) over all labels." + }, { "name" : "VolumeSimilarity", "type" : "double", @@ -44,6 +104,22 @@ "briefdescriptionGet" : "", "detaileddescriptionGet" : "Get the volume similarity for the specified individual label." }, + { + "name" : "VolumeSimilarity", + "type" : "double", + "default" : 0.0, + "briefdescriptionGet" : "", + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" :[ + { + "name" : "label", + "type" : "int64_t" + } + ], + "detaileddescriptionGet" : "Get the volume similarity over all labels." + }, { "name" : "JaccardCoefficient", "type" : "double", @@ -51,12 +127,44 @@ "briefdescriptionGet" : "", "detaileddescriptionGet" : "Get the union overlap (Jaccard coefficient) for the specified individual label." }, + { + "name" : "JaccardCoefficient", + "type" : "double", + "default" : 0.0, + "briefdescriptionGet" : "", + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" :[ + { + "name" : "label", + "type" : "int64_t" + } + ], + "detaileddescriptionGet" : "Get the union overlap (Jaccard coefficient) over all labels." + }, { "name" : "DiceCoefficient", "type" : "double", "default" : 0.0, "briefdescriptionGet" : "", "detaileddescriptionGet" : "Get the mean overlap (Dice coefficient) for the specified individual label." + }, + { + "name" : "DiceCoefficient", + "type" : "double", + "default" : 0.0, + "briefdescriptionGet" : "", + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" :[ + { + "name" : "label", + "type" : "int64_t" + } + ], + "detaileddescriptionGet" : "Get the mean overlap (Dice coefficient) over all labels." } ], "tests" : [ @@ -145,6 +253,62 @@ "name" : "DiceCoefficient", "value" : 0.8842423479027586, "tolerance" : 1e-05 + }, + { + "name" : "FalseNegativeError", + "value" : 0.1632896305125149, + "tolerance" : 1e-05, + "parameters" : [ + "1" + ] + }, + { + "name" : "FalsePositiveError", + "value" : 0.0625, + "tolerance" : 1e-05, + "parameters" : [ + "1" + ] + }, + { + "name" : "MeanOverlap", + "value" : 0.8842423479027586, + "tolerance" : 1e-05, + "parameters" : [ + "1" + ] + }, + { + "name" : "UnionOverlap", + "value" : 0.7925039512305261, + "tolerance" : 1e-05, + "parameters" : [ + "1" + ] + }, + { + "name" : "VolumeSimilarity", + "value" : -0.11361, + "tolerance" : 1e-05, + "parameters" : [ + "1" + ] + }, + { + "name" : "JaccardCoefficient", + "value" : 0.7925039512305261, + "tolerance" : 1e-05, + "parameters" : [ + "1" + ] + }, + { + "name" : "DiceCoefficient", + "value" : 0.8842423479027586, + "tolerance" : 1e-05, + "parameters" : [ + "1" + ] } ], "inputs" : [ From 8fe51f7ac5454eceb4407678d879df0ad5682b47 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 16 Oct 2019 13:36:48 -0400 Subject: [PATCH 199/400] Add copy deepcopy implementation for Python Image class --- Testing/Unit/Python/sitkImageTests.py | 46 +++++++++++++++++++++++++-- Wrapping/Python/Python.i | 11 ++++++- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/Testing/Unit/Python/sitkImageTests.py b/Testing/Unit/Python/sitkImageTests.py index d22ee7b0c..d6fbb5cb0 100644 --- a/Testing/Unit/Python/sitkImageTests.py +++ b/Testing/Unit/Python/sitkImageTests.py @@ -26,10 +26,52 @@ class ImageTests(unittest.TestCase): """These tests are suppose to test the python interface to the sitk::Image""" + def setUp(self): + super(ImageTests, self).setUp() + self.addTypeEqualityFunc(sitk.Image, self.assertImageEqual) + def assertImageEqual(self, img1, img2, msg=None): + """ utility to compare two images""" + self.assertEqual(img1.GetPixelID(), img2.GetPixelID()) + self.assertEqual(img1.GetOrigin(), img2.GetOrigin()) + self.assertEqual(img1.GetSpacing(), img2.GetSpacing()) + self.assertEqual(img1.GetDirection(), img2.GetDirection()) + + self.assertEqual(img1.GetMetaDataKeys(), img2.GetMetaDataKeys()) + + for k in img1.GetMetaDataKeys(): + aself.assertEqual(img1.GetMetaData(k), img2.GetMetaData(k)) + + self.assertEqual(sitk.Hash(img1), sitk.Hash(img2)) + + def test_deepcopy(self): + """Test the custom __deepcopy__ method""" + + import copy + + sz = [10, 10] + img = sitk.Image(sz, sitk.sitkFloat32) + img[1, 2] = 3.14 + img.SetSpacing([1.2, 3.4]) + + img_dc = copy.deepcopy(img) + + self.assertEqual(img, img_dc) + + img_dc.SetOrigin([7, 8]) + self.assertNotEqual(img.GetOrigin(), img_dc.GetOrigin()) + + img_dc.SetOrigin(img.GetOrigin()) + + img_dc[9, 9] = 1.234 + self.assertNotEqual(sitk.Hash(img), sitk.Hash(img_dc)) + + img_c = copy.copy(img) + self.assertEqual(img, img_c) + + img_c.SetOrigin([7, 8]) + self.assertNotEqual(img.GetOrigin(), img_c.GetOrigin()) - def setUp(self): - pass def test_iterable(self): """Test that the Image object is iterable""" diff --git a/Wrapping/Python/Python.i b/Wrapping/Python/Python.i index a9a8932e9..b74fad05c 100644 --- a/Wrapping/Python/Python.i +++ b/Wrapping/Python/Python.i @@ -87,9 +87,18 @@ %extend itk::simple::Image { - %pythoncode %{ + def __copy__(self): + """Create a SimpleITK shallow copy, where the internal image share is shared with copy on write implementation.""" + return Image(self) + + def __deepcopy__(self, memo): + """Create a new copy of the data and image class.""" + dc = Image(self) + dc.MakeUnique() + return dc + # mathematical operators def __add__( self, other ): From 42d39a42003a35249f8f72d2af640e8535a975b3 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 18 Oct 2019 11:11:25 -0400 Subject: [PATCH 200/400] AZP use nightly dashboard track for coverage and valgrind --- Testing/CI/Azure/azure-pipelines-coverage.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml index f65881757..7a92ae93f 100644 --- a/Testing/CI/Azure/azure-pipelines-coverage.yml +++ b/Testing/CI/Azure/azure-pipelines-coverage.yml @@ -21,7 +21,7 @@ jobs: steps: - template: templates/git-download-steps.yml - bash: | - ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake + ctest -D "dashboard_track:STRING=Nightly" -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake displayName: Build and test with coverage env: CCACHE_DISABLE: 1 @@ -61,7 +61,7 @@ jobs: cmake --version gcc --version ccache -p - ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + ctest -D "dashboard_track:STRING=Nightly" -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V displayName: Build and test env: CCACHE_DISABLE: 1 From b084f787877953441cd5af4e780f1d2444b7fd1a Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 18 Oct 2019 10:50:06 -0400 Subject: [PATCH 201/400] AZP improve language coverage for CI pipeline Build Python wrapping on all platforms and wrap R, CShap and Java. --- Testing/CI/Azure/azure-pipelines.yml | 30 +++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index a99fcfd22..3d80a6b3c 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -1,7 +1,5 @@ -# Starter pipeline -# Start with a minimal pipeline that you can customize to build and deploy your code. -# Add steps that build, run tests, deploy, and more: -# https://aka.ms/yaml +# These pipelines are executed on every PR, and merge. They should provide quick +# coverage for the common wrapped language and the SimpleITK core and examples. trigger: - master @@ -18,6 +16,17 @@ jobs: steps: - template: templates/git-download-steps.yml + - bash: | + set -x + sudo apt-get update + sudo apt-get -y install software-properties-common libcurl4-openssl-dev libssh2-1-dev + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 + sudo add-apt-repository -y "deb https://cloud.r-project.org/bin/linux/ubuntu xenial/" + sudo apt-get update + sudo apt-get -y install r-base-dev + R --version + displayName: System Dependencies + workingDirectory: $(Agent.BuildDirectory) - task: UsePythonVersion@0 displayName: Enable Python inputs: @@ -26,9 +35,10 @@ jobs: addToPath: true - script: | python --version - sudo python -m pip install setuptools - sudo python -m pip install ninja scikit-ci-addons - displayName: 'Install ninja dependency' + python -m pip install --upgrade pip + python -m pip install setuptools + python -m pip install numpy ninja scikit-ci-addons + displayName: 'Install python tools and dependency' - bash: | set -x c++ --version @@ -47,7 +57,8 @@ jobs: BUILD_SHARED_LIBS:BOOL=OFF BUILD_TESTING:BOOL=ON WRAP_DEFAULT:BOOL=OFF - WRAP_JAVA:BOOL=ON + WRAP_R:BOOL=ON + WRAP_PYTHON:BOOL=ON workingDirectory: $(Agent.BuildDirectory) - script: | ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml @@ -126,7 +137,7 @@ jobs: addToPath: true - script: | python --version - python -m pip install setuptools + python -m pip install setuptools numpy python -m pip install ninja scikit-ci-addons displayName: 'Install ninja dependency' - script: | @@ -148,6 +159,7 @@ jobs: BUILD_TESTING:BOOL=ON WRAP_DEFAULT:BOOL=OFF WRAP_CSHARP:BOOL=ON + WRAP_PYTHON:BOOL=ON workingDirectory: $(Agent.BuildDirectory) - script: | ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml From bfbf34b0ecfc623c9c1b04b668e5c06b2803beb7 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 16 Oct 2019 13:38:53 -0400 Subject: [PATCH 202/400] Use CircleCI medium resource class The resource classes are limited to medium for free opensource projects. --- .circleci/config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 58dc29792..03aad15ea 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,18 +3,18 @@ referenced: docker: - image: circleci/python:2.7-stretch working_directory: ~/ - resource_class: large + resource_class: medium default_environment_keys: &default_environment <<: &default_environment_keys CTEST_DASHBOARD_ROOT: /home/circleci CTEST_SOURCE_DIRECTORY: /home/circleci/SimpleITK CTEST_BINARY_DIRECTORY: /home/circleci/SimpleITK-build ROOT_BINARY_DIRECTORY: /home/circleci/SimpleITK-build - CTEST_BUILD_FLAGS: "-j 4" - CTEST_CONFIGURATION_TYPE: "Release" + CTEST_BUILD_FLAGS: "-j 1" + CTEST_CONFIGURATION_TYPE: "MinSizeRel" CTEST_OUTPUT_ON_FAILURE: 1 ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - PARALLEL_LEVEL: 4 + PARALLEL_LEVEL: 2 DASHBOARD_BRANCH_DIRECTORY: /home/circleci/dashboard ExternalData_OBJECT_STORES: /home/circleci/.ExternalData CCACHE_NODIRECT: 1 From 0dfae3e91dded3eeeb0501b0d00d35f09ed1fe0b Mon Sep 17 00:00:00 2001 From: Damian Wrobel Date: Mon, 21 Oct 2019 23:24:00 +0200 Subject: [PATCH 203/400] Add support for lua v5.3.x (fixes #849) --- .circleci/config.yml | 2 +- .travis.yml | 2 +- CMake/sitkGenerateFilterSource.cmake | 8 ++++---- Documentation/docs/source/building.rst | 4 ++-- .../ExecuteInternalSetITKFilterInputs.cxx.in | 2 +- ExpandTemplateGenerator/ExpandTemplate.lua | 20 +++++++++++++++++-- SuperBuild/External_Lua.cmake | 2 +- SuperBuild/SuperBuild.cmake | 4 ++-- 8 files changed, 30 insertions(+), 14 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 58dc29792..3c995d64c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -22,7 +22,7 @@ referenced: run: name: Dependencies command: | - sudo apt-get install -y rsync lua5.1 ccache kwstyle + sudo apt-get install -y rsync lua5.3 ccache kwstyle sudo python -m pip install --upgrade pip sudo python -m pip install scikit-ci-addons # Provides "ctest_junit_formatter" add-on sudo python -m pip install cmake==3.13.3 diff --git a/.travis.yml b/.travis.yml index 36a1f4a6f..1e8d5aa07 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ matrix: sudo: required before_script: - - sudo apt-get remove cmake && sudo apt-get install swig lua5.1 libinsighttoolkit4-dev doxygen graphviz + - sudo apt-get remove cmake && sudo apt-get install swig lua5.3 libinsighttoolkit4-dev doxygen graphviz - cd ${ExternalData_OBJECT_STORES} && if [[ ! -e ${CMAKE_DOWNLOAD_FILE} ]]; then curl -sSO https://cmake.org/files/v3.6/${CMAKE_DOWNLOAD_FILE}; fi - echo "y\n" | sudo bash "${ExternalData_OBJECT_STORES}/${CMAKE_DOWNLOAD_FILE}" --prefix=/usr/local --exclude-subdir - cmake --version diff --git a/CMake/sitkGenerateFilterSource.cmake b/CMake/sitkGenerateFilterSource.cmake index c4af3e7b0..f7403959e 100644 --- a/CMake/sitkGenerateFilterSource.cmake +++ b/CMake/sitkGenerateFilterSource.cmake @@ -6,7 +6,7 @@ if ( NOT SimpleITK_LUA_EXECUTABLE ) get_property( SAVE_LUA_EXECUTABLE_TYPE CACHE LUA_EXECUTABLE PROPERTY TYPE ) get_property( SAVE_LUA_EXECUTABLE_DOCSTRING CACHE LUA_EXECUTABLE PROPERTY HELPSTRING ) - find_package( LuaInterp 5.1 REQUIRED ) + find_package( LuaInterp 5.3 REQUIRED ) set( SimpleITK_LUA_EXECUTABLE ${LUA_EXECUTABLE} CACHE PATH "Lua executable used for code generation." ) if (DEFINED SAVE_LUA_EXECUTABLE) @@ -45,10 +45,10 @@ endif() if( SITK_LUA_VERSION_RESULT_VARIABLE OR - NOT ${SimpleITK_LUA_EXECUTABLE_VERSION} VERSION_GREATER "5.1" + NOT ${SimpleITK_LUA_EXECUTABLE_VERSION} VERSION_GREATER "5.3" OR - NOT ${SimpleITK_LUA_EXECUTABLE_VERSION} VERSION_LESS "5.2" ) - message(SEND_ERROR "Lua version 5.1 is required for SimpleITK_LUA_EXECUTABLE_VERSION.") + NOT ${SimpleITK_LUA_EXECUTABLE_VERSION} VERSION_LESS "5.4" ) + message(SEND_ERROR "Lua version 5.3 is required for SimpleITK_LUA_EXECUTABLE_VERSION.") endif() # Sets "out_var" variable name to the value in the json path specified diff --git a/Documentation/docs/source/building.rst b/Documentation/docs/source/building.rst index 316b85be7..20c903d0f 100644 --- a/Documentation/docs/source/building.rst +++ b/Documentation/docs/source/building.rst @@ -43,7 +43,7 @@ To build SimpleITK you need: - The R package requires R version 3.3 or greater. -- The Lua package requires Lua version 5.1 or greater. +- The Lua package requires Lua version 5.3 or greater. Recipes / Formulas / Short cuts =============================== @@ -166,7 +166,7 @@ The following are dependencies you will need when not using the SuperBuild: with SimpleITK, as future ITK versions are generally backwards compatible. -#. `Lua `__ 5.1 +#. `Lua `__ 5.3.5 #. `SWIG `__ >= 3.0.11 diff --git a/ExpandTemplateGenerator/Components/ExecuteInternalSetITKFilterInputs.cxx.in b/ExpandTemplateGenerator/Components/ExecuteInternalSetITKFilterInputs.cxx.in index b2070ecce..ebd0e93b6 100644 --- a/ExpandTemplateGenerator/Components/ExecuteInternalSetITKFilterInputs.cxx.in +++ b/ExpandTemplateGenerator/Components/ExecuteInternalSetITKFilterInputs.cxx.in @@ -8,7 +8,7 @@ end) $(if inputs then for i = 1,#inputs do if inputs[i].optional then - OUT = OUT .. ' if ( in'..inputs[i].name..' != NULL )\ {\n ' + OUT = OUT .. ' if ( in'..inputs[i].name..' != NULL ) {\n' else OUT = OUT .. ' assert( '..'in' .. inputs[i].name ..' != NULL );\n' end diff --git a/ExpandTemplateGenerator/ExpandTemplate.lua b/ExpandTemplateGenerator/ExpandTemplate.lua index 5788c6e0d..4d856c438 100644 --- a/ExpandTemplateGenerator/ExpandTemplate.lua +++ b/ExpandTemplateGenerator/ExpandTemplate.lua @@ -9,14 +9,30 @@ local push = table.insert local pop = table.remove local concat = table.concat +-- based on http://lua-users.org/lists/lua-l/2010-06/msg00314.html +-- this assumes f is a function +local function findenv(f) + local level = 1 + repeat + local name, value = debug.getupvalue(f, level) + if name == '_ENV' then return level, value end + level = level + 1 + until name == nil + return nil end +getfenv = function (f) return(select(2, findenv(f)) or _G) end +setfenv = function (f, t) + local level = findenv(f) + if level then debug.setupvalue(f, level, t) end + return f end + local statements = {} -for w in string.gfind('do if for while repeat', '%a+') do +for w in string.gmatch('do if for while repeat', '%a+') do statements[w] = true end function expand(str, ...) assert(type(str)=='string', 'expecting string') - local searchlist = arg + local searchlist = table.pack(...) local estring,evar function estring(str) diff --git a/SuperBuild/External_Lua.cmake b/SuperBuild/External_Lua.cmake index 30068d152..4a26b13f1 100644 --- a/SuperBuild/External_Lua.cmake +++ b/SuperBuild/External_Lua.cmake @@ -7,7 +7,7 @@ set(${CMAKE_CURRENT_LIST_FILENAME}_FILE_INCLUDED 1) set(proj Lua) -set(lua_TARGET_VERSION 5.1.5) +set(lua_TARGET_VERSION 5.3.5) # follow the standard EP_PREFIX locations set(lua_binary_dir ${CMAKE_CURRENT_BINARY_DIR}/${proj}-prefix/src/${proj}-build) diff --git a/SuperBuild/SuperBuild.cmake b/SuperBuild/SuperBuild.cmake index dd9d77c06..caef71a56 100644 --- a/SuperBuild/SuperBuild.cmake +++ b/SuperBuild/SuperBuild.cmake @@ -307,11 +307,11 @@ include(ExternalProject) #------------------------------------------------------------------------------ # Lua #------------------------------------------------------------------------------ -option ( SimpleITK_USE_SYSTEM_LUA "Use a pre-compiled version of LUA 5.1 previously configured for your system" OFF ) +option ( SimpleITK_USE_SYSTEM_LUA "Use a pre-compiled version of LUA 5.3 previously configured for your system" OFF ) sitk_legacy_naming( SimpleITK_USE_SYSTEM_LUA USE_SYSTEM_LUA) mark_as_advanced(SimpleITK_USE_SYSTEM_LUA) if ( SimpleITK_USE_SYSTEM_LUA ) - find_package( LuaInterp 5.1 REQUIRED ) + find_package( LuaInterp 5.3 REQUIRED ) set( SimpleITK_LUA_EXECUTABLE ${LUA_EXECUTABLE} CACHE PATH "Lua executable used for code generation." ) mark_as_advanced( SimpleITK_LUA_EXECUTABLE ) unset( LUA_EXECUTABLE CACHE ) From 2cb81906934f808124a49e26a5cf613bcd5145e4 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 21 Oct 2019 10:28:44 -0400 Subject: [PATCH 204/400] Update Superbuild to Lua 5.3.5 --- SuperBuild/ExternalSource/lua-5.1.5.tar.gz.sha512 | 1 - SuperBuild/ExternalSource/lua-5.3.5.tar.gz.sha512 | 1 + SuperBuild/lua.cmake | 9 ++++++--- 3 files changed, 7 insertions(+), 4 deletions(-) delete mode 100644 SuperBuild/ExternalSource/lua-5.1.5.tar.gz.sha512 create mode 100644 SuperBuild/ExternalSource/lua-5.3.5.tar.gz.sha512 diff --git a/SuperBuild/ExternalSource/lua-5.1.5.tar.gz.sha512 b/SuperBuild/ExternalSource/lua-5.1.5.tar.gz.sha512 deleted file mode 100644 index 7ed4e6c79..000000000 --- a/SuperBuild/ExternalSource/lua-5.1.5.tar.gz.sha512 +++ /dev/null @@ -1 +0,0 @@ -0142fefcbd13afcd9b201403592aa60620011cc8e8559d4d2db2f92739d18186860989f48caa45830ff4f99bfc7483287fd3ff3a16d4dec928e2767ce4d542a9 diff --git a/SuperBuild/ExternalSource/lua-5.3.5.tar.gz.sha512 b/SuperBuild/ExternalSource/lua-5.3.5.tar.gz.sha512 new file mode 100644 index 000000000..fb31ebaad --- /dev/null +++ b/SuperBuild/ExternalSource/lua-5.3.5.tar.gz.sha512 @@ -0,0 +1 @@ +4f9516acc4659dfd0a9e911bfa00c0788f0ad9348e5724fe8fb17aac59e9c0060a64378f82be86f8534e49c6c013e7488ad17321bafcc787831d3d67406bd0f4 diff --git a/SuperBuild/lua.cmake b/SuperBuild/lua.cmake index cd044075c..2a80aa140 100644 --- a/SuperBuild/lua.cmake +++ b/SuperBuild/lua.cmake @@ -31,6 +31,8 @@ if(NOT LUA_INSTALL_INCLUDE_DIR) set(LUA_INSTALL_INCLUDE_DIR "include") endif() +set_property(GLOBAL PROPERTY C_STANDARD 99) +add_definitions(-DLUA_COMPAT_5_2) if( MSVC ) # suppress warning in Visual Studio about the securtiy of methods @@ -46,15 +48,16 @@ if("${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang" ) SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-empty-body -Wno-deprecated-declarations" ) endif() + # define the lua core source files -set (LUA_CORE_SRCS src/lapi.c src/lcode.c src/ldebug.c src/ldo.c src/ldump.c +set (LUA_CORE_SRCS src/lapi.c src/lcode.c src/lctype.c src/ldebug.c src/ldo.c src/ldump.c src/lfunc.c src/lgc.c src/llex.c src/lmem.c src/lobject.c src/lopcodes.c src/lparser.c src/lstate.c src/lstring.c src/ltable.c src/ltm.c src/lundump.c src/lvm.c src/lzio.c) # define the lua lib source files -set (LUA_LIB_SRCS src/lauxlib.c src/lbaselib.c src/ldblib.c src/liolib.c - src/lmathlib.c src/loslib.c src/ltablib.c src/lstrlib.c src/loadlib.c src/linit.c) +set (LUA_LIB_SRCS src/lauxlib.c src/lbaselib.c src/lbitlib.c src/lcorolib.c src/ldblib.c src/liolib.c + src/lmathlib.c src/loslib.c src/ltablib.c src/lstrlib.c src/lutf8lib.c src/loadlib.c src/linit.c) # create the library add_library (lua ${LUA_LIB_SRCS} ${LUA_CORE_SRCS}) From 77a3d8943f3c9a4d5b5dcc1452827cb228b7aa2e Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 21 Oct 2019 13:42:35 -0400 Subject: [PATCH 205/400] Lua 5.2 deprecated loadstring and replaced it with load --- ExpandTemplateGenerator/ExpandTemplate.lua | 2 +- ExpandTemplateGenerator/JSONQuery.lua | 2 +- ExpandTemplateGenerator/json.lua | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ExpandTemplateGenerator/ExpandTemplate.lua b/ExpandTemplateGenerator/ExpandTemplate.lua index 4d856c438..c18263073 100644 --- a/ExpandTemplateGenerator/ExpandTemplate.lua +++ b/ExpandTemplateGenerator/ExpandTemplate.lua @@ -193,7 +193,7 @@ function expand(str, ...) else -- expression var = 'return '.. var end - local f = assert(loadstring(var)) + local f = assert(load(var)) local t = searchlist[1] assert(type(t)=='table' or type(t)=='userdata', 'expecting table') setfenv(f, setmetatable({}, {__index=get, __newindex=t})) diff --git a/ExpandTemplateGenerator/JSONQuery.lua b/ExpandTemplateGenerator/JSONQuery.lua index 9dc528d5d..3ce55d87d 100644 --- a/ExpandTemplateGenerator/JSONQuery.lua +++ b/ExpandTemplateGenerator/JSONQuery.lua @@ -45,7 +45,7 @@ bad_count = 0 for i=2,#arg do json_path=arg[i] - cmd = loadstring("return json_table."..json_path) + cmd = load("return json_table."..json_path) if not cmd then io.stderr:write("Warning: bad path -> "..json_path.."\n") bad_count = bad_count+1 diff --git a/ExpandTemplateGenerator/json.lua b/ExpandTemplateGenerator/json.lua index 82adf71ca..5d371e0b2 100644 --- a/ExpandTemplateGenerator/json.lua +++ b/ExpandTemplateGenerator/json.lua @@ -231,7 +231,7 @@ function decode_scanNumber(s,startPos) endPos = endPos + 1 end local stringValue = 'return ' .. string.sub(s,startPos, endPos-1) - local stringEval = base.loadstring(stringValue) + local stringEval = load(stringValue) base.assert(stringEval, 'Failed to scan number [ ' .. stringValue .. '] in JSON string at position ' .. startPos .. ' : ' .. endPos) return stringEval(), endPos end @@ -305,7 +305,7 @@ function decode_scanString(s,startPos) base.assert(endPos <= stringLen+1, "String decoding failed: unterminated string at position " .. endPos) until bEnded local stringValue = 'return ' .. string.sub(s, startPos, endPos-1) - local stringEval = base.loadstring(stringValue) + local stringEval = load(stringValue) base.assert(stringEval, 'Failed to load string [ ' .. stringValue .. '] in JSON4Lua.decode_scanString at position ' .. startPos .. ' : ' .. endPos) return stringEval(), endPos end From 1e659778b11877665b4e85b4932cdf1cbbed8a20 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 22 Oct 2019 14:25:13 -0400 Subject: [PATCH 206/400] Parameters explicitly float on CSharp/JAVA tests --- .../json/AdaptiveHistogramEqualizationImageFilter.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Code/BasicFilters/json/AdaptiveHistogramEqualizationImageFilter.json b/Code/BasicFilters/json/AdaptiveHistogramEqualizationImageFilter.json index 1451caa82..4071ae028 100644 --- a/Code/BasicFilters/json/AdaptiveHistogramEqualizationImageFilter.json +++ b/Code/BasicFilters/json/AdaptiveHistogramEqualizationImageFilter.json @@ -50,11 +50,15 @@ "settings" : [ { "parameter" : "Alpha", - "value" : 0.0 + "value" : 0.0, + "java_value" : "0.0f", + "csharp_value" : "0.0f" }, { "parameter" : "Beta", - "value" : 0.0 + "value" : 0.0, + "java_value" : "0.0f", + "csharp_value" : "0.0f" } ], "tolerance" : "1e-5", From 15307e54add128f8d075dc3e29128412f1837433 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 23 Oct 2019 10:59:22 -0400 Subject: [PATCH 207/400] Allow using system lua version 5.2 --- CMake/sitkGenerateFilterSource.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMake/sitkGenerateFilterSource.cmake b/CMake/sitkGenerateFilterSource.cmake index f7403959e..ea1afb4fd 100644 --- a/CMake/sitkGenerateFilterSource.cmake +++ b/CMake/sitkGenerateFilterSource.cmake @@ -45,7 +45,7 @@ endif() if( SITK_LUA_VERSION_RESULT_VARIABLE OR - NOT ${SimpleITK_LUA_EXECUTABLE_VERSION} VERSION_GREATER "5.3" + NOT ${SimpleITK_LUA_EXECUTABLE_VERSION} VERSION_GREATER "5.2" OR NOT ${SimpleITK_LUA_EXECUTABLE_VERSION} VERSION_LESS "5.4" ) message(SEND_ERROR "Lua version 5.3 is required for SimpleITK_LUA_EXECUTABLE_VERSION.") From d26c722a4ce89e34a4a5ea3515e5ec6d8d01da45 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 23 Oct 2019 12:02:54 -0400 Subject: [PATCH 208/400] Include version suffix in lua executable search --- CMake/FindLuaInterp.cmake | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/CMake/FindLuaInterp.cmake b/CMake/FindLuaInterp.cmake index c3f72bed9..0e544dcdd 100644 --- a/CMake/FindLuaInterp.cmake +++ b/CMake/FindLuaInterp.cmake @@ -10,8 +10,18 @@ # LUA_EXECUTABLE_FOUND - If false, don't attempt to use lua # LUA_EXECUTABLE_VERSION_STRING - version of lua found + +set(_NAMES lua) + +if(NOT LuaInterp_FIND_VERSION_MAJOR EQUAL 0) + list(INSERT _NAMES 0 lua${LuaInterp_FIND_VERSION_MAJOR}) + if(NOT LuaInterp_FIND_VERSION_MINOR EQUAL 0) + list(INSERT _NAMES 0 lua${LuaInterp_FIND_VERSION_MAJOR}.${LuaInterp_FIND_VERSION_MINOR}) + endif() +endif() + find_program(LUA_EXECUTABLE - NAMES lua + NAMES ${_NAMES} ) if(LUA_EXECUTABLE) From 990f1dc7e13ab7d4f7b91590c4123b10e48d0d45 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 18 Oct 2019 15:38:25 -0400 Subject: [PATCH 209/400] Add support to Python for "pickling" an Image object --- Testing/Unit/Python/sitkImageTests.py | 72 ++++++++++++++++++++++++++- Wrapping/Python/Python.i | 43 ++++++++++++++++ 2 files changed, 113 insertions(+), 2 deletions(-) diff --git a/Testing/Unit/Python/sitkImageTests.py b/Testing/Unit/Python/sitkImageTests.py index d6fbb5cb0..e6b18771b 100644 --- a/Testing/Unit/Python/sitkImageTests.py +++ b/Testing/Unit/Python/sitkImageTests.py @@ -21,14 +21,21 @@ import SimpleITK as sitk import sys - +import tempfile +import os.path +import shutil class ImageTests(unittest.TestCase): - """These tests are suppose to test the python interface to the sitk::Image""" + """Tests for the Python interface for the Image class""" def setUp(self): super(ImageTests, self).setUp() self.addTypeEqualityFunc(sitk.Image, self.assertImageEqual) + self.test_dir = tempfile.mkdtemp() + + def tearDown(self): + shutil.rmtree(self.test_dir) + def assertImageEqual(self, img1, img2, msg=None): """ utility to compare two images""" @@ -72,6 +79,67 @@ def test_deepcopy(self): img_c.SetOrigin([7, 8]) self.assertNotEqual(img.GetOrigin(), img_c.GetOrigin()) + def test_pickle_file(self): + """Test the custom pickling and un-pickling interface""" + + try: + import pickle5 as pickle + except ImportError: + import pickle + + import copy + + # test the default protocol + img = sitk.Image( [10, 9, 11], sitk.sitkFloat32 ) + img = sitk.AdditiveGaussianNoise(img) + + fname = os.path.join(self.test_dir, "image_protocol_default.pickle") + with open(fname, 'wb') as fp: + p = pickle.dump(copy.deepcopy(img), fp) + + with open(fname, 'rb') as fp: + ret = pickle.load(fp) + + self.assertEqual(img, ret, msg="pickle file with default protocol") + + # test all available protocols + for prot in reversed(range(1, pickle.HIGHEST_PROTOCOL+1)): + fname = os.path.join(self.test_dir, "image_protocol_{0}.pickle".format(prot)) + + print("Testing pickle protocol {0}.".format(fname)) + with open(fname, 'wb') as fp: + pickle.dump(copy.deepcopy(img), fp, protocol=prot) + + with open(fname, 'rb') as fp: + ret = pickle.load(fp) + + self.assertEqual(img, ret, msg="pickle file with {0}".format(fname)) + + def test_pickle(self): + """Test the custom pickling and un-pickling interface""" + + try: + import pickle5 as pickle + except ImportError: + import pickle + + import copy + + # test the default protocol + img = sitk.Image( [10, 9, 11], sitk.sitkFloat32 ) + img = sitk.AdditiveGaussianNoise(img) + + p = pickle.dumps(copy.deepcopy(img)) + ret = pickle.loads(p) + + self.assertEqual(img, ret, msg="pickle with default protocol") + + # test all available protocols + for prot in reversed(range(1, pickle.HIGHEST_PROTOCOL+1)): + print("Testing pickle protocol {0}.".format(prot)) + p = pickle.dumps(copy.deepcopy(img), protocol=prot) + ret = pickle.loads(p) + self.assertEqual(img, ret, msg="pickle with {0} protocol".format(prot)) def test_iterable(self): """Test that the Image object is iterable""" diff --git a/Wrapping/Python/Python.i b/Wrapping/Python/Python.i index b74fad05c..ccbf852a1 100644 --- a/Wrapping/Python/Python.i +++ b/Wrapping/Python/Python.i @@ -83,6 +83,7 @@ %pythoncode %{ import operator import sys + from collections import namedtuple %} %extend itk::simple::Image { @@ -99,6 +100,48 @@ dc.MakeUnique() return dc + def __setstate__(self, args): + if args[0] != 0: + raise ValueError("Unable to handle SimpleITK.Image pickle version {0}".args[0]) + + state = namedtuple('state_tuple_0', "version buffer origin spacing direction metadata")(*args) + + _SetImageFromArray(state.buffer, self) + self.SetOrigin(state.origin) + self.SetSpacing(state.spacing) + self.SetDirection(state.direction) + for k,v in state.metadata.items(): + self.SetMetaData(k,v) + + def __reduce_ex__(self, protocol ): + version = 0 + size = tuple(self.GetSize()) + t = int(self.GetPixelIDValue()) + ncomponents = int(self.GetNumberOfComponentsPerPixel()) + + mv = _GetMemoryViewFromImage(self) + origin = tuple(self.GetOrigin()) + spacing = tuple(self.GetSpacing()) + direction = tuple(self.GetDirection()) + metadata = {k:self.GetMetaData(k) for k in self.GetMetaDataKeys()} + + if protocol >= 5: + import sys + if sys.hexversion >= 0x03080000: + import pickle + elif sys.hexversion >= 0x03060000: + try: + import pickle5 as pickle + except ImportError: + raise ImportError("Pickle protocol 5 requires the pickle5 module for Python 3.6, 3.7") + P = (version, pickle.PickleBuffer(mv), origin, spacing, direction, metadata) + else: + P = (version, mv.tobytes(), origin, spacing, direction, metadata) + + return self.__class__, (size, t, ncomponents), P + + + # mathematical operators def __add__( self, other ): From 5c2e68ef511f421e99fff5440e2daf2d8daf6e6c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 24 Oct 2019 08:17:27 -0400 Subject: [PATCH 210/400] AZP add Python 3.8 to Windows and OSX packaging --- Testing/CI/Azure/azure-pipelines-package.yml | 21 +++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index 4a94ba248..b1c279188 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -122,7 +122,15 @@ jobs: pathtoPublish: $(Build.ArtifactStagingDirectory)/archives artifactName: Archives - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh - displayName: Build Python 36 + displayName: Build Python 38 + continueOnError: true + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.8' + architecture: 'x64' + - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh + displayName: Build Python 37 continueOnError: true - task: UsePythonVersion@0 displayName: Enable Python @@ -224,6 +232,17 @@ jobs: inputs: pathtoPublish: $(Build.ArtifactStagingDirectory)/csharp artifactName: CSharp + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.8' + architecture: '$(PYTHON_ARCH)' + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 + bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh + displayName: Build Python 37 + continueOnError: true + - task: UsePythonVersion@0 displayName: Enable Python inputs: From 73f3899c4109fc169939d35eb61ecdcef1da31c2 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 28 Oct 2019 10:34:34 -0400 Subject: [PATCH 211/400] Add to AZP Xcode 11 and remove 9.3 --- Testing/CI/Azure/azure-pipelines-batch.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index 53e3da243..1d78a39a1 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -33,15 +33,15 @@ jobs: strategy: maxParallel: 2 matrix: + XCode_11: + imageName: 'macos-10.14' + xcodeVersion: 11.1 XCode_10: imageName: 'macos-10.14' xcodeVersion: 10.2 XCode_9_4: imageName: 'macos-10.14' xcodeVersion: 9.4.1 - XCode_9_3: - imageName: 'macos-10.13' - xcodeVersion: 9.3 pool: vmImage: $(imageName) From e41f85daba7e65fe5a8dd0fd39bfdcc599334311 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 29 Oct 2019 09:49:27 -0400 Subject: [PATCH 212/400] Fix AZP CI Mac python configuration to match batch version --- Testing/CI/Azure/azure-pipelines.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 3d80a6b3c..ab22d3b2a 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -74,8 +74,11 @@ jobs: - job: macOS timeoutInMinutes: 0 cancelTimeoutInMinutes: 300 + variables: + imageName: 'macos-10.14' + xcodeVersion: 10.2 pool: - vmImage: 'macOS-10.13' + vmImage: $(imageName) steps: - template: templates/git-download-steps.yml @@ -92,10 +95,13 @@ jobs: displayName: 'Install ninja dependency' - bash: | set -x + xcode-select -p + sudo xcode-select -s /Applications/Xcode_$(xcodeVersion).app/Contents/Developer/ + xcode-select -p c++ --version cmake --version ninja --version - ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 4 + ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 2 displayName: Build and test env: CTEST_CONFIGURATION_TYPE: MinSizeRel From e60240e92e91f940b40fc0f29c87c52ddb5dbd1c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 29 Oct 2019 17:00:17 -0400 Subject: [PATCH 213/400] Update to PCRE 8.43 --- SuperBuild/ExternalSource/pcre-8.40.tar.gz.sha512 | 1 - SuperBuild/ExternalSource/pcre-8.43.tar.gz.sha512 | 1 + SuperBuild/External_PCRE.cmake | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 SuperBuild/ExternalSource/pcre-8.40.tar.gz.sha512 create mode 100644 SuperBuild/ExternalSource/pcre-8.43.tar.gz.sha512 diff --git a/SuperBuild/ExternalSource/pcre-8.40.tar.gz.sha512 b/SuperBuild/ExternalSource/pcre-8.40.tar.gz.sha512 deleted file mode 100644 index 795258ae1..000000000 --- a/SuperBuild/ExternalSource/pcre-8.40.tar.gz.sha512 +++ /dev/null @@ -1 +0,0 @@ -b722e4b75bda548913917677348d4f892fef5eb2c879c0e8cc187c21fb8c1afcd0f7782fba95b3730335fdcba9759f945714779c03b5575f0044c1a667d1d308 diff --git a/SuperBuild/ExternalSource/pcre-8.43.tar.gz.sha512 b/SuperBuild/ExternalSource/pcre-8.43.tar.gz.sha512 new file mode 100644 index 000000000..147506888 --- /dev/null +++ b/SuperBuild/ExternalSource/pcre-8.43.tar.gz.sha512 @@ -0,0 +1 @@ +7624a2746a19936fc2aaec3c75b63f6eb5fc2e9e7de73c167e84d45f46a864e53cf248d26581658e5b804a12b8709126e42c5d5bf73b8a0a8155db5ccb54b2e8 diff --git a/SuperBuild/External_PCRE.cmake b/SuperBuild/External_PCRE.cmake index 804db3d3d..4384734d0 100644 --- a/SuperBuild/External_PCRE.cmake +++ b/SuperBuild/External_PCRE.cmake @@ -19,7 +19,7 @@ if(NOT PCRE_DIR) # PCRE (Perl Compatible Regular Expressions) # - set(PCRE_TARGET_VERSION 8.40) + set(PCRE_TARGET_VERSION 8.43) sitkSourceDownload(PCRE_URL "pcre-${PCRE_TARGET_VERSION}.tar.gz") From 5f0acbfe1fab4d13fc387ebc361735da20de90cf Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 30 Oct 2019 16:46:58 -0400 Subject: [PATCH 214/400] Add option for nearest neighbor extrapolator for ResampleImageFilter --- .../include/sitkAdditionalProcedures.h | 9 ++-- .../json/ResampleImageFilter.json | 47 ++++++++++++++++++- .../src/sitkAdditionalProcedures.cxx | 13 +++-- ...er_NearestNeighborExtrapolator.nrrd.sha512 | 1 + 4 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 Testing/Data/Baseline/BasicFilters_ResampleImageFilter_NearestNeighborExtrapolator.nrrd.sha512 diff --git a/Code/BasicFilters/include/sitkAdditionalProcedures.h b/Code/BasicFilters/include/sitkAdditionalProcedures.h index 5a2070b00..d66e9d4c3 100644 --- a/Code/BasicFilters/include/sitkAdditionalProcedures.h +++ b/Code/BasicFilters/include/sitkAdditionalProcedures.h @@ -48,14 +48,16 @@ SITKBasicFilters_EXPORT Image Resample ( const Image& image1, Transform transform = itk::simple::Transform(), InterpolatorEnum interpolator = itk::simple::sitkLinear, double defaultPixelValue = 0.0, - PixelIDValueEnum outputPixelType = sitkUnknown ); + PixelIDValueEnum outputPixelType = sitkUnknown, + bool useNearestNeighborExtrapolator = false); SITKBasicFilters_EXPORT Image Resample ( const Image& image1, const Image& referenceImage, Transform transform = itk::simple::Transform(), InterpolatorEnum interpolator = itk::simple::sitkLinear, double defaultPixelValue = 0.0, - PixelIDValueEnum outputPixelType = sitkUnknown ); + PixelIDValueEnum outputPixelType = sitkUnknown, + bool useNearestNeighborExtrapolator = false); SITKBasicFilters_EXPORT Image Resample ( const Image& image1, std::vector size, @@ -65,7 +67,8 @@ SITKBasicFilters_EXPORT Image Resample ( const Image& image1, std::vector outputSpacing = std::vector(3, 1.0), std::vector outputDirection = std::vector(), double defaultPixelValue = 0.0, - PixelIDValueEnum outputPixelType = sitkUnknown ); + PixelIDValueEnum outputPixelType = sitkUnknown, + bool useNearestNeighborExtrapolator = false); /**@}*/ diff --git a/Code/BasicFilters/json/ResampleImageFilter.json b/Code/BasicFilters/json/ResampleImageFilter.json index 292afaeff..68bcb71e4 100644 --- a/Code/BasicFilters/json/ResampleImageFilter.json +++ b/Code/BasicFilters/json/ResampleImageFilter.json @@ -14,7 +14,8 @@ "no_procedure" : "1", "include_files" : [ "sitkCreateInterpolator.hxx", - "sitkTransform.h" + "sitkTransform.h", + "itkNearestNeighborExtrapolateImageFunction.h" ], "members" : [ { @@ -103,6 +104,13 @@ "custom_itk_cast" : "", "briefdescriptionSet" : "Set the output pixel type, if sitkUnknown then the input type is used.", "briefdescriptionGet" : "Get the ouput pixel type." + }, + { + "name" : "UseNearestNeighborExtrapolator", + "type" : "bool", + "default" : 0, + "custom_itk_cast" : "if (m_UseNearestNeighborExtrapolator) {filter->SetExtrapolator(itk::NearestNeighborExtrapolateImageFunction::New());}", + "briefdescriptionSet" : "Enables the nearest neighbor extrapolator as opposed to the constant pixel value." } ], "custom_methods" : [ @@ -250,10 +258,45 @@ "inputs" : [ "Input/VM1111Shrink-RGBFloat.nrrd" ] + }, + { + "tag" : "NearestNeighborExtrapolator", + "description" : "enable nearest neighbort extrapolator", + "settings" : [ + { + "parameter" : "Size", + "type" : "uint32_t", + "dim_vec" : 1, + "value" : [ + 520, + 540 + ] + }, + { + "parameter" : "OutputOrigin", + "type" : "double", + "dim_vec" : 1, + "value" : [ + "-40.0", + "-140.0" + ] + }, + { + "parameter" : "UseNearestNeighborExtrapolator", + "type" : "bool", + "value" : "true", + "python_value" : "True", + "R_value" : "TRUE" + } + ], + "tolerance" : "0.001", + "inputs" : [ + "Input/VM1111Shrink-RGBFloat.nrrd" + ] } ], "briefdescription" : "Resample an image via a coordinate transform.", - "detaileddescription" : "ResampleImageFilter resamples an existing image through some coordinate transform, interpolating via some image function. The class is templated over the types of the input and output images.\n\nNote that the choice of interpolator function can be important. This function is set via SetInterpolator() . The default is LinearInterpolateImageFunction , which is reasonable for ordinary medical images. However, some synthetic images have pixels drawn from a finite prescribed set. An example would be a mask indicating the segmentation of a brain into a small number of tissue types. For such an image, one does not want to interpolate between different pixel values, and so NearestNeighborInterpolateImageFunction < InputImageType, TCoordRep > would be a better choice.\n\nIf an sample is taken from outside the image domain, the default behavior is to use a default pixel value. If different behavior is desired, an extrapolator function can be set with SetExtrapolator() .\n\nOutput information (spacing, size and direction) for the output image should be set. This information has the normal defaults of unit spacing, zero origin and identity direction. Optionally, the output information can be obtained from a reference image. If the reference image is provided and UseReferenceImage is On, then the spacing, origin and direction of the reference image will be used.\n\nSince this filter produces an image which is a different size than its input, it needs to override several of the methods defined in ProcessObject in order to properly manage the pipeline execution model. In particular, this filter overrides ProcessObject::GenerateInputRequestedRegion() and ProcessObject::GenerateOutputInformation() .\n\nThis filter is implemented as a multithreaded filter. It provides a ThreadedGenerateData() method for its implementation. \\warning For multithreading, the TransformPoint method of the user-designated coordinate transform must be threadsafe.", + "detaileddescription" : "ResampleImageFilter resamples an existing image through some coordinate transform, interpolating via some image function. The class is templated over the types of the input and output images.\n\nNote that the choice of interpolator function can be important. This function is set via SetInterpolator() . The default is LinearInterpolateImageFunction , which is reasonable for ordinary medical images. However, some synthetic images have pixels drawn from a finite prescribed set. An example would be a mask indicating the segmentation of a brain into a small number of tissue types. For such an image, one does not want to interpolate between different pixel values, and so NearestNeighborInterpolateImageFunction < InputImageType, TCoordRep > would be a better choice.\n\nIf an sample is taken from outside the image domain, the default behavior is to use a default pixel value. If different behavior is desired, an extrapolator function can be set with SetExtrapolator() .\n\nOutput information (spacing, size and direction) for the output image should be set. This information has the normal defaults of unit spacing, zero origin and identity direction. Optionally, the output information can be obtained from a reference image. If the reference image is provided and UseReferenceImage is On, then the spacing, origin and direction of the reference image will be used.\n\nSince this filter produces an image which is a different size than its input, it needs to override several of the methods defined in ProcessObject in order to properly manage the pipeline execution model. In particular, this filter overrides ProcessObject::GenerateInputRequestedRegion() and ProcessObject::GenerateOutputInformation() .\n\nThis filter is implemented as a multithreaded filter. It provides a DynamicThreadedGenerateData() method for its implementation. \\warning For multithreading, the TransformPoint method of the user-designated coordinate transform must be threadsafe.\n\n\n\\par ITK Sphinx Examples:\n\n\n\n\\par \\li All ITK Sphinx Examples\n\n\n\n\n\\li Translate Image \n\n\n\n\n\\li Upsampling An Image \n\n\n\n\n\\li Resample An Image", "itk_module" : "ITKImageGrid", "itk_group" : "ImageGrid" } diff --git a/Code/BasicFilters/src/sitkAdditionalProcedures.cxx b/Code/BasicFilters/src/sitkAdditionalProcedures.cxx index d3b4fbded..e3312d599 100644 --- a/Code/BasicFilters/src/sitkAdditionalProcedures.cxx +++ b/Code/BasicFilters/src/sitkAdditionalProcedures.cxx @@ -34,7 +34,8 @@ SITKBasicFilters_EXPORT Image Resample ( const Image& image1, Transform transform, InterpolatorEnum interpolator, double defaultPixelValue, - PixelIDValueEnum outputPixelType ) + PixelIDValueEnum outputPixelType, + bool useNearestNeighborExtrapolator) { ResampleImageFilter filter; filter.SetReferenceImage( image1 ); @@ -42,6 +43,7 @@ SITKBasicFilters_EXPORT Image Resample ( const Image& image1, filter.SetInterpolator( interpolator ); filter.SetDefaultPixelValue( defaultPixelValue ); filter.SetOutputPixelType(outputPixelType); + filter.SetUseNearestNeighborExtrapolator(useNearestNeighborExtrapolator); return filter.Execute ( image1); } @@ -50,7 +52,8 @@ Image Resample ( const Image& image1, Transform transform, InterpolatorEnum interpolator, double defaultPixelValue, - PixelIDValueEnum outputPixelType ) + PixelIDValueEnum outputPixelType, + bool useNearestNeighborExtrapolator) { ResampleImageFilter filter; filter.SetReferenceImage( referenceImage ); @@ -58,6 +61,7 @@ Image Resample ( const Image& image1, filter.SetInterpolator( interpolator ); filter.SetDefaultPixelValue( defaultPixelValue ); filter.SetOutputPixelType(outputPixelType); + filter.SetUseNearestNeighborExtrapolator(useNearestNeighborExtrapolator); return filter.Execute ( image1); } @@ -70,10 +74,11 @@ SITKBasicFilters_EXPORT Image Resample ( const Image& image1, std::vector outputSpacing, std::vector outputDirection, double defaultPixelValue, - PixelIDValueEnum outputPixelType ) + PixelIDValueEnum outputPixelType, + bool useNearestNeighborExtrapolator) { ResampleImageFilter filter; - return filter.Execute ( image1, size, transform, interpolator, outputOrigin, outputSpacing, outputDirection, defaultPixelValue, outputPixelType ); + return filter.Execute ( image1, size, transform, interpolator, outputOrigin, outputSpacing, outputDirection, defaultPixelValue, outputPixelType, useNearestNeighborExtrapolator); } SITKBasicFilters_EXPORT Image PatchBasedDenoising (const Image& image1, diff --git a/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_NearestNeighborExtrapolator.nrrd.sha512 b/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_NearestNeighborExtrapolator.nrrd.sha512 new file mode 100644 index 000000000..ad7e67995 --- /dev/null +++ b/Testing/Data/Baseline/BasicFilters_ResampleImageFilter_NearestNeighborExtrapolator.nrrd.sha512 @@ -0,0 +1 @@ +746930ee58997f7d0aab5f3fea3307f35d612b320afa6a7302fae58ed817674434f625d4bf2235f15f18952b70cf107967116b6011b398bbca7edc6bf8f76e27 From 2f0df5f5952024d66a4f959fa8d212b951f72161 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 9 Oct 2019 13:37:52 -0400 Subject: [PATCH 215/400] Only remove ITK Legacy code with default known version of ITK This enables SimpleITK to build against ITKv5 by default. Particularly, ITK 5.1 uses new enums which are not backwards compatible by default. --- SuperBuild/External_ITK.cmake | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index 7b1ca9976..ca8741e9a 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,8 +52,8 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(ITK_GIT_TAG "3213404416666c17dbabc8fb0a07f1d27362f32c" CACHE - STRING "Tag in ITK git repo") # after 4.13.2 along release-4.13 +set(_DEFAULT_ITK_GIT_TAG "3213404416666c17dbabc8fb0a07f1d27362f32c") # after 4.13.2 along release-4.13 +set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") @@ -73,6 +73,14 @@ else() "-DITK_TEMPLATE_VISIBILITY_DEFAULT:BOOL=OFF" ) endif() + +if( ITK_GIT_TAG STREQUAL _DEFAULT_ITK_GIT_TAG ) + # only remove legacy with the tested, and predefined version of ITK + list( APPEND ep_itk_args + "-DITK_LEGACY_REMOVE:BOOL=ON" + ) +endif() + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${proj}-build/CMakeCacheInit.txt" "${ep_itk_cache}\n${ep_common_cache}" ) ExternalProject_Add(${proj} @@ -85,7 +93,6 @@ ExternalProject_Add(${proj} CMAKE_ARGS --no-warn-unused-cli -C "${CMAKE_CURRENT_BINARY_DIR}/${proj}-build/CMakeCacheInit.txt" - -DITK_LEGACY_REMOVE:BOOL=ON ${ep_itk_args} ${ep_common_args} -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON From e3c33632c6678fdb1ff094f45c2de5329b552722 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 16 Oct 2019 13:38:53 -0400 Subject: [PATCH 216/400] Use CircleCI medium resource class The resource classes are limited to medium for free opensource projects. --- .circleci/config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 531a2537f..a72b16d83 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,18 +3,18 @@ referenced: docker: - image: circleci/python:2.7-stretch working_directory: ~/ - resource_class: large + resource_class: medium default_environment_keys: &default_environment <<: &default_environment_keys CTEST_DASHBOARD_ROOT: /home/circleci CTEST_SOURCE_DIRECTORY: /home/circleci/SimpleITK CTEST_BINARY_DIRECTORY: /home/circleci/SimpleITK-build ROOT_BINARY_DIRECTORY: /home/circleci/SimpleITK-build - CTEST_BUILD_FLAGS: "-j 4" - CTEST_CONFIGURATION_TYPE: "Release" + CTEST_BUILD_FLAGS: "-j 1" + CTEST_CONFIGURATION_TYPE: "MinSizeRel" CTEST_OUTPUT_ON_FAILURE: 1 ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - PARALLEL_LEVEL: 4 + PARALLEL_LEVEL: 2 DASHBOARD_BRANCH_DIRECTORY: /home/circleci/dashboard ExternalData_OBJECT_STORES: /home/circleci/.ExternalData CCACHE_NODIRECT: 1 From 689208af2b0e1175b6feb44fb3370db877fb681f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 1 Nov 2019 12:04:05 -0400 Subject: [PATCH 217/400] Add support for .git configuration for data repository --- Utilities/UploadBinaryData.sh | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Utilities/UploadBinaryData.sh b/Utilities/UploadBinaryData.sh index 50c99d31d..86ce291ef 100755 --- a/Utilities/UploadBinaryData.sh +++ b/Utilities/UploadBinaryData.sh @@ -39,9 +39,11 @@ To use the script: 5. Re-build SimpleITK, and the testing data will be downloaded into the build tree. -If a GIRDER_API_KEY environmental variable is not set, a prompt will appear -for your username and password. The API key can be created in the -data.kitware.com user account web browser interface. +If the Git `girder.api-key` config or `GIRDER_API_KEY` environmental variable +is not set, a prompt will appear for your username and password. The API key +can be created in the data.kitware.com user account web browser interface. The + Git config can be set by running: + `git config girder.api-key YOUR_GIRDER_API_KEY` The script will authenticate to data.kitware.com, upload the file to your @@ -102,7 +104,12 @@ fi # Authenticate token="" -if test -n "${GIRDER_API_KEY}"; then +git_config_api_key=$(git config --get girder.api-key || echo '') +if test -n "${git_config_api_key}"; then + token_response=$(curl -s -X POST --header 'Content-Length: 0' --header 'Content-Type: application/json' --header 'Accept: application/json' "https://data.kitware.com/api/v1/api_key/token?key=${git_config_api_key}&duration=1" || die "Could not retrieve token from API key.") + token=$(json_field "token" "${token_response}") +fi +if test -z "${token}" -a -n "${GIRDER_API_KEY}"; then token_response=$(curl -s -X POST --header 'Content-Length: 0' --header 'Content-Type: application/json' --header 'Accept: application/json' "https://data.kitware.com/api/v1/api_key/token?key=${GIRDER_API_KEY}&duration=1" || die "Could not retrieve token from API key.") token=$(json_field "token" "${token_response}") fi From 3ece73e8ce46474dd223b086bd37441a52be59df Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 1 Nov 2019 14:44:57 -0400 Subject: [PATCH 218/400] Increase the GTest discover timeout to ensure generation the 60 second timeout was encountered, so it's increased. --- Testing/Unit/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Testing/Unit/CMakeLists.txt b/Testing/Unit/CMakeLists.txt index c2819804c..53c9fb6e6 100644 --- a/Testing/Unit/CMakeLists.txt +++ b/Testing/Unit/CMakeLists.txt @@ -265,7 +265,7 @@ target_compile_options( sitkSystemInformationTest # CMake 3.10 added this method, to avoid configure time introspection if(NOT CMAKE_CROSSCOMPILING) - gtest_discover_tests( SimpleITKUnitTestDriver0 DISCOVERY_TIMEOUT 60 ) + gtest_discover_tests( SimpleITKUnitTestDriver0 DISCOVERY_TIMEOUT 180 ) else() gtest_add_tests(SimpleITKUnitTestDriver0 "" ${SimpleITKUnitTestSource}) endif() From 90177e37af0c1f54c3aa700829ba8f0e6789e0e1 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 1 Nov 2019 11:20:36 -0400 Subject: [PATCH 219/400] Adding VS2008 CI for just release branch --- Testing/CI/Azure/azure-pipelines.yml | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 698cbaf47..b83bb8fd0 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -184,3 +184,50 @@ jobs: testRunTitle: 'CTest $(Agent.OS)' condition: succeededOrFailed() displayName: 'Publish test results' + - job: WindowsVS2008 + timeoutInMinutes: 240 + strategy: + matrix: + x86: + CTEST_CMAKE_GENERATOR: "Visual Studio 9 2008" + x64: + CTEST_CMAKE_GENERATOR: "Visual Studio 9 2008 Win64" + pool: + name: 'Default' + demands: + - VS90COMNTOOLS + workspace: + clean: all + variables: + coreBinaryDirectory: '$(Agent.BuildDirectory)/sitk-build' + CTEST_CONFIGURATION_TYPE: MinSizeRel + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + DASHBOARD_GIT_BRANCH: $[ dependencies.Configure.outputs['configure.BuildHash'] ] + steps: + - checkout: self + clean: true + fetchDepth: 5 + - script: | + if DEFINED SYSTEM_PULLREQUEST_SOURCECOMMITID git checkout $(System.PullRequest.SourceCommitId) + displayName: Checkout pull request HEAD + - script: | + git clone -b dashboard --single-branch %BUILD_REPOSITORY_URI% SimpleITK-dashboard + displayName: Download dashboard scripts + workingDirectory: $(Agent.BuildDirectory) + - script: | + cmake --version + ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + displayName: Build and test + workingDirectory: $(Agent.BuildDirectory) + env: + CTEST_BINARY_DIRECTORY: $(coreBinaryDirectory) + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CXXFLAGS: /MP + CFLAGS: /MP + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=N + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + SimpleITK_BUILD_DISTRIBUTE:BOOL=ON From 5e1bd788b61a0ebd496cb705fc8a09603e93627c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 6 Nov 2019 10:46:37 -0500 Subject: [PATCH 220/400] Simplify the recommended conda install command. --- Documentation/docs/source/installation.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/docs/source/installation.rst b/Documentation/docs/source/installation.rst index f834ee489..86259b80d 100644 --- a/Documentation/docs/source/installation.rst +++ b/Documentation/docs/source/installation.rst @@ -74,14 +74,14 @@ From the command line prompt, execute: .. code-block :: bash - conda install -c https://conda.anaconda.org/simpleitk SimpleITK + conda install -c simpleitk simpleitk Beta and release candidate packages are also available on Anaconda cloud under the dev label: .. code-block :: bash - conda install -c https://conda.anaconda.org/simpleitk/label/dev SimpleITK + conda install -c simpleitk/label/dev simpleitk C# binary files From 22e9964314cbacbf3e33e933458b59719a0f57fa Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 6 Nov 2019 15:42:48 -0500 Subject: [PATCH 221/400] Updating ITK Superbuild along release-4.13 branch $ git log 3213404416666c17dbabc8fb0a07f1d27362f32c..upstream/release-4.13 --format="%C(auto) %h %s" 28fd1cb66a Merge pull request #1400 from blowekamp/FixGDCMHeapOverflowForRelease4.13 5df152b4c3 BUG: Address buffer overflow with deprecated GDCM1 interface f64fdf66b1 Merge pull request #1392 from blowekamp/FixN4MTimeForRelease4.13 63d148715e BUG: Don't use InsertElement which modifies MTime ebaca30f07 Merge pull request #1389 from blowekamp/UpdateGDCMForRelease4.13 08dc0116fe BUG: update CircleCI configuration with selections from master 90e6da1ff6 ENH: Update GDCM to latest on the release-2.8 branch 20f10c2e20 Merge branch 'upstream-GDCM' into UpdateGDCMForRelease4.13 0353bb40ed GDCM 2019-11-04 (7e3be76f) --- SuperBuild/External_ITK.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index ca8741e9a..8f4f12c5a 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,7 +52,7 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(_DEFAULT_ITK_GIT_TAG "3213404416666c17dbabc8fb0a07f1d27362f32c") # after 4.13.2 along release-4.13 +set(_DEFAULT_ITK_GIT_TAG "28fd1cb66a77441e0a7999128c16e97e1b7291ff") # after 4.13.2 along release-4.13 set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From 279000900ae14c1af9ce7d1b78f8215cb38286dc Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 11 Nov 2019 10:44:16 -0500 Subject: [PATCH 222/400] Include the SimplITK and ITK Readme and license files in setup.py --- Wrapping/Python/Packaging/setup.py.in | 1 + 1 file changed, 1 insertion(+) diff --git a/Wrapping/Python/Packaging/setup.py.in b/Wrapping/Python/Packaging/setup.py.in index d8b2f2653..9802bcd8b 100644 --- a/Wrapping/Python/Packaging/setup.py.in +++ b/Wrapping/Python/Packaging/setup.py.in @@ -77,6 +77,7 @@ setup( ext_modules=[Extension('SimpleITK._SimpleITK', [r'@SimpleITK_BINARY_MODULE@'])], packages= ['SimpleITK'], package_dir = {'SimpleITK':r'@SimpleITK_PYTHON_PACKAGE_DIR@'}, + data_files = [("", doc_files)], download_url = r'https://www.itk.org/SimpleITKDoxygen/html/PyDownloadPage.html', platforms = [], description = r'SimpleITK is a simplified interface to the Insight Toolkit (ITK) for image registration and segmentation', From 69741e79f37fa2e7463e88c2473b11a3219a04a3 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 12 Nov 2019 08:30:09 -0500 Subject: [PATCH 223/400] Increment minor version to 1.2.4 --- Version.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Version.cmake b/Version.cmake index dd7e133d8..354a8a729 100644 --- a/Version.cmake +++ b/Version.cmake @@ -10,7 +10,7 @@ set(SimpleITK_VERSION_MAJOR 1) set(SimpleITK_VERSION_MINOR 2) -set(SimpleITK_VERSION_PATCH 3) +set(SimpleITK_VERSION_PATCH 4) #set(SimpleITK_VERSION_TWEAK "") From dd0ee1758121ddef4b0c18268586effdc76d51bd Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 11 Nov 2019 10:44:16 -0500 Subject: [PATCH 224/400] Include the SimplITK and ITK Readme and license files in setup.py --- Wrapping/Python/Packaging/setup.py.in | 1 + 1 file changed, 1 insertion(+) diff --git a/Wrapping/Python/Packaging/setup.py.in b/Wrapping/Python/Packaging/setup.py.in index d8b2f2653..9802bcd8b 100644 --- a/Wrapping/Python/Packaging/setup.py.in +++ b/Wrapping/Python/Packaging/setup.py.in @@ -77,6 +77,7 @@ setup( ext_modules=[Extension('SimpleITK._SimpleITK', [r'@SimpleITK_BINARY_MODULE@'])], packages= ['SimpleITK'], package_dir = {'SimpleITK':r'@SimpleITK_PYTHON_PACKAGE_DIR@'}, + data_files = [("", doc_files)], download_url = r'https://www.itk.org/SimpleITKDoxygen/html/PyDownloadPage.html', platforms = [], description = r'SimpleITK is a simplified interface to the Insight Toolkit (ITK) for image registration and segmentation', From 941e3ef302072866d4e56745df876a649b45d168 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 12 Nov 2019 12:49:18 -0500 Subject: [PATCH 225/400] Correct the AZP Python version displayed when building python package --- Testing/CI/Azure/azure-pipelines-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index b1c279188..8e527052c 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -130,7 +130,7 @@ jobs: versionSpec: '3.8' architecture: 'x64' - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh - displayName: Build Python 37 + displayName: Build Python 38 continueOnError: true - task: UsePythonVersion@0 displayName: Enable Python @@ -240,7 +240,7 @@ jobs: - script: | call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh - displayName: Build Python 37 + displayName: Build Python 38 continueOnError: true - task: UsePythonVersion@0 From 3850bb7695f662ea060509fbfc643a33fe910697 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 12 Aug 2019 15:51:14 -0400 Subject: [PATCH 226/400] Fix quoting in testing for string parameters. --- Testing/Unit/sitkImageFilterTestTemplate.cxx.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Testing/Unit/sitkImageFilterTestTemplate.cxx.in b/Testing/Unit/sitkImageFilterTestTemplate.cxx.in index b0f883c93..70d69f0a9 100644 --- a/Testing/Unit/sitkImageFilterTestTemplate.cxx.in +++ b/Testing/Unit/sitkImageFilterTestTemplate.cxx.in @@ -251,7 +251,7 @@ $(foreach settings filter.Set${parameter} ( vec );\ for(unsigned int i = 0; i < filter.Get${parameter}().size(); ++i)\ {\ - ASSERT_EQ ( filter.Get${parameter}()[i], vec[i] ) << "Failed to set ${parameter} to ${value}";\ + ASSERT_EQ ( filter.Get${parameter}()[i], vec[i] ) << "Failed to set ${parameter} to: \\\"" << vec << "\\\"";\ }\ }' else @@ -270,7 +270,7 @@ $(foreach settings ASSERT_FALSE ( filter.Get${parameter}() ) << "Failed to set ${parameter} to ${temp}";' else OUT = OUT .. '\ - ASSERT_EQ ( ${temp}, filter.Get${parameter}() ) << "Failed to set ${parameter} to ${temp}";' + ASSERT_EQ ( ${temp}, filter.Get${parameter}() ) << "Failed to set ${parameter} to: \\\"" << ${temp} << "\\\"";' end end end) From 98864f84a00b94daa24d7986747deb1350f5b765 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 12 Aug 2019 15:47:54 -0400 Subject: [PATCH 227/400] Add support for testing vector measurements --- Testing/Unit/sitkImageFilterTestTemplate.cxx.in | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Testing/Unit/sitkImageFilterTestTemplate.cxx.in b/Testing/Unit/sitkImageFilterTestTemplate.cxx.in index 70d69f0a9..de025b59a 100644 --- a/Testing/Unit/sitkImageFilterTestTemplate.cxx.in +++ b/Testing/Unit/sitkImageFilterTestTemplate.cxx.in @@ -321,7 +321,20 @@ $(for i = 1,#measurements_results do PARAMS=PARAMS..' ' end if measurements_results[i].tolerance then - OUT=OUT..' EXPECT_NEAR( '..measurements_results[i].value..', filter.Get'..measurements_results[i].name..'('..PARAMS..'), '..measurements_results[i].tolerance..' ) << "Measurement failure";' + if measurements_results[i].dim_vec then + OUT=OUT..'{\ + double arr[] = {' + for j=1,#measurements_results[i].value-1 do + OUT=OUT..measurements_results[i].value[j]..", " + end + OUT=OUT..measurements_results[i].value[#measurements_results[i].value] + OUT=OUT..'};\ + std::vector< double > vec1(arr, arr + '..#measurements_results[i].value..');\ + EXPECT_VECTOR_NEAR( vec1, filter.Get'..measurements_results[i].name..'('..PARAMS..'), '..measurements_results[i].tolerance..' ) << "Measurement failure";\ + }' + else + OUT=OUT..' EXPECT_NEAR( '..measurements_results[i].value..', filter.Get'..measurements_results[i].name..'('..PARAMS..'), '..measurements_results[i].tolerance..' ) << "Measurement failure";' + end else if (measurements_results[i].value == "true") then OUT=OUT..' EXPECT_TRUE( filter.Get'..measurements_results[i].name..'('..PARAMS..') ) << "Measurement failure";' From f204d103135d3e6a9efa5df823dad1d7d2b66c55 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 18 Nov 2019 16:33:16 -0500 Subject: [PATCH 228/400] Adding baseline vector measurements for label shape statistics --- .../json/LabelShapeStatisticsImageFilter.json | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) diff --git a/Code/BasicFilters/json/LabelShapeStatisticsImageFilter.json b/Code/BasicFilters/json/LabelShapeStatisticsImageFilter.json index 719700ca3..def98fba5 100644 --- a/Code/BasicFilters/json/LabelShapeStatisticsImageFilter.json +++ b/Code/BasicFilters/json/LabelShapeStatisticsImageFilter.json @@ -390,6 +390,46 @@ } ], "measurements_results" : [ + { + "name" : "BoundingBox", + "dim_vec" : 1, + "value" : [ + 17, + 12, + 17, + 31 + ], + "tolerance" : 1e-23, + "parameters" : [ + "50" + ] + }, + { + "name" : "Region", + "dim_vec" : 1, + "value" : [ + 17, + 12, + 17, + 31 + ], + "tolerance" : 1e-23, + "parameters" : [ + "50" + ] + }, + { + "name" : "Centroid", + "dim_vec" : 1, + "value" : [ + 25, + 27 + ], + "tolerance" : 1e-23, + "parameters" : [ + "50" + ] + }, { "name" : "Elongation", "value" : 1.8257418583505538, @@ -398,6 +438,18 @@ "50" ] }, + { + "name" : "EquivalentEllipsoidDiameter", + "dim_vec" : 1, + "value" : [ + 19.1708196, + 35.0009678 + ], + "tolerance" : 1e-06, + "parameters" : [ + "50" + ] + }, { "name" : "EquivalentSphericalPerimeter", "value" : 81.37860476665404, @@ -476,6 +528,32 @@ "50" ] }, + { + "name" : "PrincipalAxes", + "dim_vec" : 1, + "value" : [ + 1, + 0, + 0, + 1 + ], + "tolerance" : 1e-23, + "parameters" : [ + "50" + ] + }, + { + "name" : "PrincipalMoments", + "dim_vec" : 1, + "value" : [ + 24, + 80 + ], + "tolerance" : 1e-23, + "parameters" : [ + "50" + ] + }, { "name" : "Roundness", "value" : 0.905182442271278, @@ -483,6 +561,50 @@ "parameters" : [ "50" ] + }, + { + "name" : "OrientedBoundingBoxSize", + "dim_vec" : 1, + "value" : [ + 17, + 31 + ], + "tolerance" : 1e-23, + "parameters" : [ + "50" + ] + }, + { + "name" : "OrientedBoundingBoxDirection", + "dim_vec" : 1, + "value" : [ + 1, + 0, + 0, + 1 + ], + "tolerance" : 1e-23, + "parameters" : [ + "50" + ] + }, + { + "name" : "OrientedBoundingBoxVertices", + "dim_vec" : 1, + "value" : [ + 16.5, + 11.5, + 16.5, + 42.5, + 33.5, + 11.5, + 33.5, + 42.5 + ], + "tolerance" : 1e-23, + "parameters" : [ + "50" + ] } ], "inputs" : [ From d7d0be1c1268be927c59d21608fa900c05635d02 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 19 Nov 2019 10:54:02 -0500 Subject: [PATCH 229/400] Fix conversion warning in test for resample filter on Windows --- Code/BasicFilters/json/ResampleImageFilter.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Code/BasicFilters/json/ResampleImageFilter.json b/Code/BasicFilters/json/ResampleImageFilter.json index 68bcb71e4..3c246d2d5 100644 --- a/Code/BasicFilters/json/ResampleImageFilter.json +++ b/Code/BasicFilters/json/ResampleImageFilter.json @@ -108,9 +108,9 @@ { "name" : "UseNearestNeighborExtrapolator", "type" : "bool", - "default" : 0, - "custom_itk_cast" : "if (m_UseNearestNeighborExtrapolator) {filter->SetExtrapolator(itk::NearestNeighborExtrapolateImageFunction::New());}", - "briefdescriptionSet" : "Enables the nearest neighbor extrapolator as opposed to the constant pixel value." + "default" : "false", + "custom_itk_cast" : "if (m_UseNearestNeighborExtrapolator) {filter->SetExtrapolator(itk::NearestNeighborExtrapolateImageFunction::New());}", + "briefdescriptionSet" : "Enables the nearest neighbor extrapolator as opposed to the constant pixel value." } ], "custom_methods" : [ From cc02f269ba511997d0668d4b99314abf0dc563bf Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 19 Nov 2019 10:57:00 -0500 Subject: [PATCH 230/400] Fix spelling in comment --- Code/Common/include/sitkImage.h | 2 +- Code/IO/include/sitkImageFileWriter.h | 2 +- Code/IO/include/sitkImageReaderBase.h | 2 +- Code/IO/include/sitkImageSeriesWriter.h | 2 +- Code/IO/src/sitkImageIOUtilities.h | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Code/Common/include/sitkImage.h b/Code/Common/include/sitkImage.h index b3f4917b0..a1ab88aa6 100644 --- a/Code/Common/include/sitkImage.h +++ b/Code/Common/include/sitkImage.h @@ -33,7 +33,7 @@ namespace itk { -// Forward decalaration for pointer +// Forward declaration for pointer class DataObject; template diff --git a/Code/IO/include/sitkImageFileWriter.h b/Code/IO/include/sitkImageFileWriter.h index b60686191..45271b09c 100644 --- a/Code/IO/include/sitkImageFileWriter.h +++ b/Code/IO/include/sitkImageFileWriter.h @@ -28,7 +28,7 @@ namespace itk { -// Forward decalaration for pointer +// Forward declaration for pointer class ImageIOBase; template diff --git a/Code/IO/include/sitkImageReaderBase.h b/Code/IO/include/sitkImageReaderBase.h index 0382d7f7b..e9846c595 100644 --- a/Code/IO/include/sitkImageReaderBase.h +++ b/Code/IO/include/sitkImageReaderBase.h @@ -24,7 +24,7 @@ namespace itk { -// Forward decalaration for pointer +// Forward declaration for pointer class ImageIOBase; template diff --git a/Code/IO/include/sitkImageSeriesWriter.h b/Code/IO/include/sitkImageSeriesWriter.h index 8f37b6744..9e1ddc733 100644 --- a/Code/IO/include/sitkImageSeriesWriter.h +++ b/Code/IO/include/sitkImageSeriesWriter.h @@ -26,7 +26,7 @@ namespace itk { -// Forward decalaration for pointer +// Forward declaration for pointer class ImageIOBase; namespace simple { diff --git a/Code/IO/src/sitkImageIOUtilities.h b/Code/IO/src/sitkImageIOUtilities.h index 75f1b1f01..db5a87835 100644 --- a/Code/IO/src/sitkImageIOUtilities.h +++ b/Code/IO/src/sitkImageIOUtilities.h @@ -26,7 +26,7 @@ namespace itk { -// Forward decalaration for pointer +// Forward declaration for pointer class ImageIOBase; From e6f24375d09b9ec9ee8c7a0eb4b31c1b5532f39d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 18 Nov 2019 16:34:47 -0500 Subject: [PATCH 231/400] Extract method to search for multiple baseline images --- Testing/Unit/TestBase/sitkCompareDriver.cxx | 54 ++++++++++++--------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/Testing/Unit/TestBase/sitkCompareDriver.cxx b/Testing/Unit/TestBase/sitkCompareDriver.cxx index 1d10007e3..a6bf99b21 100644 --- a/Testing/Unit/TestBase/sitkCompareDriver.cxx +++ b/Testing/Unit/TestBase/sitkCompareDriver.cxx @@ -400,6 +400,36 @@ int ProcessArguments(int *ac, ArgumentStringType *av, ProcessedOutputType * proc return 0; } +// For a baselineFilename of 'something.ext' search for existing files with names of the format 'something.#.ext' +// starting at 1, until the filename does not exist. Then return a list the existing files discovered. +std::vector GetExistingBaselineFileNames( const std::string &baselineFilename ) +{ + // Generate all possible baseline file names + + const std::string extension = itksys::SystemTools::GetFilenameLastExtension(baselineFilename); + const std::string name = itksys::SystemTools::GetFilenameWithoutLastExtension(baselineFilename); + const std::string path = itksys::SystemTools::GetFilenamePath(baselineFilename); + std::vector baselineFilenames; + baselineFilenames.push_back(baselineFilename); + + int x = 0; + + while (++x) { + std::ostringstream filename_stream; + filename_stream << path << "/" + << name << "." << x << extension; + + const std::string filename(filename_stream.str()); + + if (!itksys::SystemTools::FileExists(filename, true)) { + break; + } + baselineFilenames.push_back(filename); + } + + return baselineFilenames; +} + } @@ -512,29 +542,7 @@ int main(int argc, char *argv[]) imageCompare.setTolerance(tolerance); // Generate all possible baseline file names - - const std::string extension = itksys::SystemTools::GetFilenameLastExtension( baselineFilename ); - const std::string name = itksys::SystemTools::GetFilenameWithoutLastExtension( baselineFilename ); - const std::string path = itksys::SystemTools::GetFilenamePath( baselineFilename ); - std::vector baselineFilenames; - baselineFilenames.push_back(baselineFilename); - - int x = 0; - - while ( ++x ) - { - std::ostringstream filename_stream; - filename_stream << path << "/" - << name << "." << x << extension; - - const std::string filename(filename_stream.str()); - - if (!itksys::SystemTools::FileExists ( filename, true ) ) - { - break; - } - baselineFilenames.push_back(filename); - } + const std::vector baselineFilenames = GetExistingBaselineFileNames( baselineFilename ); std::vector::const_iterator iterName; std::string bestBaselineName = *baselineFilenames.begin(); From eddde95cc2fbfac4705b7623c5654b36260287c3 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 19 Nov 2019 16:19:39 -0500 Subject: [PATCH 232/400] Fix image comparison measurement name --- Testing/Unit/TestBase/sitkImageCompare.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Testing/Unit/TestBase/sitkImageCompare.cxx b/Testing/Unit/TestBase/sitkImageCompare.cxx index 0c89abbef..44eae9cf4 100644 --- a/Testing/Unit/TestBase/sitkImageCompare.cxx +++ b/Testing/Unit/TestBase/sitkImageCompare.cxx @@ -143,7 +143,7 @@ float ImageCompare::testImages( const itk::simple::Image& testImage, { // The measurement errors should be reported for both success and errors // to facilitate setting tight tolerances of tests. - std::cout << "" << rms << "" << std::endl; + std::cout << "" << rms << "" << std::endl; } else { @@ -152,7 +152,7 @@ float ImageCompare::testImages( const itk::simple::Image& testImage, msg << "\n"; mMessage = msg.str(); - std::cout << "" << rms << "" << std::endl; + std::cout << "" << rms << "" << std::endl; std::cout << "" << mTolerance << "" << std::endl; std::string volumeName = OutputDir + "/" + shortFilename + ".nrrd"; From b54657756ce12dc80b312e840755d7a51ec67041 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 19 Nov 2019 16:39:27 -0500 Subject: [PATCH 233/400] Use public and private linkages for SimpleITKUnitTestBase library --- Testing/Unit/TestBase/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Testing/Unit/TestBase/CMakeLists.txt b/Testing/Unit/TestBase/CMakeLists.txt index f0250a3f5..42b80872a 100644 --- a/Testing/Unit/TestBase/CMakeLists.txt +++ b/Testing/Unit/TestBase/CMakeLists.txt @@ -6,7 +6,11 @@ set ( SimpleITKUnitTestBaseSource ) add_library ( SimpleITKUnitTestBase STATIC ${SimpleITKUnitTestBaseSource} ) -target_link_libraries( SimpleITKUnitTestBase GTest::GTest ${SimpleITK_LIBRARIES} ${ITK_LIBRARIES} ) +target_link_libraries( SimpleITKUnitTestBase + PUBLIC + GTest::GTest ${SimpleITK_LIBRARIES} + PRIVATE + ${ITK_LIBRARIES} ) target_include_directories( SimpleITKUnitTestBase PUBLIC $ From c851f0036e49811d437bafd691348924858e4769 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 19 Nov 2019 16:40:10 -0500 Subject: [PATCH 234/400] Add image comparison sitkTestDriver test case --- Testing/Unit/TestBase/CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Testing/Unit/TestBase/CMakeLists.txt b/Testing/Unit/TestBase/CMakeLists.txt index 42b80872a..55d883162 100644 --- a/Testing/Unit/TestBase/CMakeLists.txt +++ b/Testing/Unit/TestBase/CMakeLists.txt @@ -58,3 +58,12 @@ sitk_add_test(NAME CompareDriver2 DATA{${SimpleITK_DATA_ROOT}/Input/xforms/translation_-13x-17y.txt} DATA{${SimpleITK_DATA_ROOT}/Baseline/displacement_-13x-17y.mha} ) + + +sitk_add_test(NAME CompareDriver3 + COMMAND + $ + --compare + DATA{${SimpleITK_DATA_ROOT}/Input/2th_cthead1.mha} + DATA{${SimpleITK_DATA_ROOT}/Input/2th_cthead1.mha} + ) From 986eb37a7bb52c6b11548955d991627e28cc9936 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 19 Nov 2019 16:44:35 -0500 Subject: [PATCH 235/400] Add rms return to transform comparison --- .../Unit/TestBase/sitkTransformCompare.cxx | 42 +++++++++---------- Testing/Unit/TestBase/sitkTransformCompare.h | 8 ++-- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Testing/Unit/TestBase/sitkTransformCompare.cxx b/Testing/Unit/TestBase/sitkTransformCompare.cxx index c1e490b1e..f769b1ae6 100644 --- a/Testing/Unit/TestBase/sitkTransformCompare.cxx +++ b/Testing/Unit/TestBase/sitkTransformCompare.cxx @@ -26,8 +26,7 @@ TransformCompare::TransformCompare() } - -bool TransformCompare::Compare( const itk::simple::Transform &transform, +float TransformCompare::Compare( const itk::simple::Transform &transform, const itk::simple::Transform &baselineTransform, const itk::simple::Image &fixedImage ) { @@ -42,38 +41,37 @@ bool TransformCompare::Compare( const itk::simple::Transform &transform, } -bool TransformCompare::Compare( const itk::simple::Transform &transform, - const itk::simple::Image &baselineDisplacement ) +float +TransformCompare::Compare(const itk::simple::Transform & transform, + const itk::simple::Image & baselineDisplacement, + bool reportErrors) { namespace sitk = itk::simple; sitk::TransformToDisplacementFieldFilter toDisplacementField; - toDisplacementField.SetOutputPixelType( baselineDisplacement.GetPixelID() ); - toDisplacementField.SetReferenceImage( baselineDisplacement ); - sitk::Image displacement = toDisplacementField.Execute( transform ); + toDisplacementField.SetOutputPixelType(baselineDisplacement.GetPixelID()); + toDisplacementField.SetReferenceImage(baselineDisplacement); + sitk::Image displacement = toDisplacementField.Execute(transform); - sitk::Image diff = sitk::Subtract( displacement, baselineDisplacement ); + sitk::Image magnitude = sitk::VectorMagnitude(sitk::Subtract(displacement, baselineDisplacement)); - diff = sitk::VectorMagnitude(diff); - diff = sitk::Multiply(diff, diff); + sitk::Image diff_squared = sitk::Multiply(magnitude, magnitude); sitk::StatisticsImageFilter stats; - stats.Execute ( diff ); - double rms = std::sqrt ( stats.GetMean() ); - - std::cout << "" << rms << "" << std::endl; + stats.Execute(diff_squared); + double rms = std::sqrt(stats.GetMean()); - if ( rms > m_Tolerance ) - { + if (reportErrors && rms > m_Tolerance) + { std::ostringstream msg; - msg << "TransformCompare: transformed image points Root Mean Square (RMS) difference was " << rms << " which exceeds the tolerance of " << m_Tolerance; + msg << "TransformCompare: transformed image points Root Mean Square (RMS) difference was " << rms + << " which exceeds the tolerance of " << m_Tolerance; msg << "\n"; m_Message = msg.str(); - std::cout << "" << m_Tolerance << "" << std::endl; - - return false; - } + std::cout << "" << m_Tolerance << "" + << std::endl; + } - return true; + return rms; } diff --git a/Testing/Unit/TestBase/sitkTransformCompare.h b/Testing/Unit/TestBase/sitkTransformCompare.h index af601e94a..49e3c8ffb 100644 --- a/Testing/Unit/TestBase/sitkTransformCompare.h +++ b/Testing/Unit/TestBase/sitkTransformCompare.h @@ -30,12 +30,14 @@ class TransformCompare public: TransformCompare(); - bool Compare( const itk::simple::Transform &transform, + float Compare( const itk::simple::Transform &transform, const itk::simple::Transform &baselineTransform, const itk::simple::Image &fixedImage ); - bool Compare( const itk::simple::Transform &transform, - const itk::simple::Image &baselineDisplacement ); + float Compare( const itk::simple::Transform &transform, + const itk::simple::Image &baselineDisplacement, + bool reportErrors=true); + // Return the message from the previous image comparison. const std::string &GetMessage() const { return m_Message; } From eaedef9b177802d264d9ec3d63e77dd2b3e02646 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 19 Nov 2019 16:48:25 -0500 Subject: [PATCH 236/400] Add support for multiple baseline transforms --- Testing/Unit/TestBase/sitkCompareDriver.cxx | 75 ++++++++++++++++----- 1 file changed, 60 insertions(+), 15 deletions(-) diff --git a/Testing/Unit/TestBase/sitkCompareDriver.cxx b/Testing/Unit/TestBase/sitkCompareDriver.cxx index a6bf99b21..a7d98ae14 100644 --- a/Testing/Unit/TestBase/sitkCompareDriver.cxx +++ b/Testing/Unit/TestBase/sitkCompareDriver.cxx @@ -26,7 +26,6 @@ #include - namespace sitk = itk::simple; // declared in SimpleITKTestHarness @@ -507,26 +506,72 @@ int main(int argc, char *argv[]) } } - // compare transforms - for (size_t i = 0; i < regressionTestParameters.transformTestList.size(); ++i ) + // compare transforms + for (size_t i = 0; i < regressionTestParameters.transformTestList.size(); ++i) { - const char * transformFileName = regressionTestParameters.transformTestList[i].transform; - const char * baselineFileName = regressionTestParameters.transformTestList[i].displacement; - const float tolerance = regressionTestParameters.transformTestList[i].tolerance; + const char * transformFileName = regressionTestParameters.transformTestList[i].transform; + const char * baselineFileName = regressionTestParameters.transformTestList[i].displacement; + const float tolerance = regressionTestParameters.transformTestList[i].tolerance; + + + std::cout << "Reading test transform: \"" << transformFileName << "\"..." << std::endl; + sitk::Transform transform = sitk::ReadTransform(transformFileName); + + // Generate all possible baseline file names + const std::vector baselineFilenames = GetExistingBaselineFileNames(baselineFileName); + + std::string bestBaselineName = *baselineFilenames.begin(); + float bestRMS = std::numeric_limits::max(); + + + std::vector::const_iterator iterName; + for (iterName = baselineFilenames.begin(); iterName != baselineFilenames.end(); ++iterName) + { + sitk::Image baseline(0, 0, sitk::sitkUInt8); + float RMS = -1.0; + + try + { + + std::cout << "Reading baseline displacement: \"" << *iterName << "\"..." << std::endl; + baseline = sitk::ReadImage(*iterName); + } + catch (std::exception & e) + { + std::cerr << "Failed to load transform " + *iterName + " because: " + e.what(); + continue; + } + + TransformCompare compare; + compare.SetTolerance(tolerance); - std::cout << "Reading test transform: \"" << transformFileName << "\"..." << std::endl; - sitk::Transform transform = sitk::ReadTransform(transformFileName); + RMS = compare.Compare(transform, baseline, false); + std::string shortFileName = itksys::SystemTools::GetFilenameName(*iterName); + std::cout << "" << RMS + << "" << std::endl; - std::cout << "Reading baseline displacement: \"" << baselineFileName << "\"..." << std::endl; - sitk::Image baseline = sitk::ReadImage(baselineFileName); + if (RMS == -1.0) + { + std::cerr << compare.GetMessage() << std::endl; + } + else if (RMS >= 0.0 && RMS < bestRMS) + { + bestBaselineName = *iterName; + bestRMS = RMS; + } + } - TransformCompare compare; - compare.SetTolerance(tolerance); - if (!compare.Compare(transform, baseline)) + if ( bestRMS > fabs ( tolerance ) ) { - result += 1; + TransformCompare compare; + compare.SetTolerance(tolerance); + + const sitk::Image baseline = sitk::ReadImage( bestBaselineName ); + compare.Compare( transform, baseline, true ); + + ++result; } - } + } // compare images for (size_t i = 0; i < regressionTestParameters.compareList.size(); ++i ) From f1a545241aa89a3acb31714f425127fb63f6295d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 19 Nov 2019 10:37:35 -0500 Subject: [PATCH 237/400] Upgrade to using ITK version 5.1b01 ITKV4 compatibility is enabled, along with not removing deprecated code. The goal of migration to ITKv5 for SimpleITK is to maintain a compatible SimpleITK interface and provide as little disruption as possible to the algorithms. --- SuperBuild/External_ITK.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index 8f4f12c5a..911886ece 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,7 +52,7 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(_DEFAULT_ITK_GIT_TAG "28fd1cb66a77441e0a7999128c16e97e1b7291ff") # after 4.13.2 along release-4.13 +set(_DEFAULT_ITK_GIT_TAG "v5.1b01") set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") @@ -77,7 +77,8 @@ endif() if( ITK_GIT_TAG STREQUAL _DEFAULT_ITK_GIT_TAG ) # only remove legacy with the tested, and predefined version of ITK list( APPEND ep_itk_args - "-DITK_LEGACY_REMOVE:BOOL=ON" + "-DITK_LEGACY_REMOVE:BOOL=OFF" + "-DITKV4_COMPATIBILITY:BOOL=ON" ) endif() From 8bc7c41dd4dd6c6f5d89673f875aa3dd6f1dd642 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 20 Nov 2019 15:14:12 -0500 Subject: [PATCH 238/400] Add alternative baseline images for registration examples These examples' results are slightly different with ITKv5 due to the change of the Gaussian smoothing method used in the registration framework. --- .../ImageRegistrationMethodBSpline2/CMakeLists.txt | 4 ++-- .../ImageRegistrationMethodBSpline3/CMakeLists.txt | 4 ++-- .../CMakeLists.txt | 12 ++++++------ .../ImageRegistrationMethodBSpline3.1.mha.sha512 | 1 + ...ImageRegistrationMethodDisplacement1.1.mha.sha512 | 1 + ...RegistrationMethodDisplacement1Test2.1.mha.sha512 | 1 + 6 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 Testing/Data/Baseline/ImageRegistrationMethodBSpline3.1.mha.sha512 create mode 100644 Testing/Data/Baseline/ImageRegistrationMethodDisplacement1.1.mha.sha512 create mode 100644 Testing/Data/Baseline/ImageRegistrationMethodDisplacement1Test2.1.mha.sha512 diff --git a/Examples/ImageRegistrationMethodBSpline2/CMakeLists.txt b/Examples/ImageRegistrationMethodBSpline2/CMakeLists.txt index 37a4262b5..4c0c4325d 100644 --- a/Examples/ImageRegistrationMethodBSpline2/CMakeLists.txt +++ b/Examples/ImageRegistrationMethodBSpline2/CMakeLists.txt @@ -10,7 +10,7 @@ sitk_add_python_test(Example.ImageRegistrationMethodBSpline2 ${SimpleITK_TEST_OUTPUT_DIR}/PythonImageRegistrationMethodBSpline2.hdf5 TRANSFORM_COMPARE ${SimpleITK_TEST_OUTPUT_DIR}/PythonImageRegistrationMethodBSpline2.hdf5 - DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodBSpline2.mha} + DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodBSpline2.mha,:} 0.02 ) @@ -21,6 +21,6 @@ sitk_add_r_test(Example.ImageRegistrationMethodBSpline2 ${SimpleITK_TEST_OUTPUT_DIR}/RImageRegistrationMethodBSpline2.hdf5 TRANSFORM_COMPARE ${SimpleITK_TEST_OUTPUT_DIR}/RImageRegistrationMethodBSpline2.hdf5 - DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodBSpline2.mha} + DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodBSpline2.mha,:} 0.02 ) diff --git a/Examples/ImageRegistrationMethodBSpline3/CMakeLists.txt b/Examples/ImageRegistrationMethodBSpline3/CMakeLists.txt index 944598e9c..6fb3a2362 100644 --- a/Examples/ImageRegistrationMethodBSpline3/CMakeLists.txt +++ b/Examples/ImageRegistrationMethodBSpline3/CMakeLists.txt @@ -15,7 +15,7 @@ sitk_add_test(NAME CXX.Example.ImageRegistrationMethodBSpline3 ${SimpleITK_TEST_OUTPUT_DIR}/CXXImageRegistrationMethodBSpline3.hdf5 TRANSFORM_COMPARE ${SimpleITK_TEST_OUTPUT_DIR}/CXXImageRegistrationMethodBSpline3.hdf5 - DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodBSpline3.mha} + DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodBSpline3.mha,:} 0.02 ) @@ -26,6 +26,6 @@ sitk_add_python_test(Example.ImageRegistrationMethodBSpline3 ${SimpleITK_TEST_OUTPUT_DIR}/PythonImageRegistrationMethodBSpline3.hdf5 TRANSFORM_COMPARE ${SimpleITK_TEST_OUTPUT_DIR}/PythonImageRegistrationMethodBSpline3.hdf5 - DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodBSpline3.mha} + DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodBSpline3.mha,:} 0.02 ) diff --git a/Examples/ImageRegistrationMethodDisplacement1/CMakeLists.txt b/Examples/ImageRegistrationMethodDisplacement1/CMakeLists.txt index 8290bdb06..5275dd43e 100644 --- a/Examples/ImageRegistrationMethodDisplacement1/CMakeLists.txt +++ b/Examples/ImageRegistrationMethodDisplacement1/CMakeLists.txt @@ -14,7 +14,7 @@ sitk_add_test(NAME CXX.Example.ImageRegistrationMethodDisplacement1 ${SimpleITK_TEST_OUTPUT_DIR}/ImageRegistrationMethodDisplacement1.hdf5 TRANSFORM_COMPARE ${SimpleITK_TEST_OUTPUT_DIR}/ImageRegistrationMethodDisplacement1.hdf5 - DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodDisplacement1.mha} + DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodDisplacement1.mha,:} 0.02 ) @@ -27,7 +27,7 @@ sitk_add_test(NAME CXX.Example.ImageRegistrationMethodDisplacement1Test2 ${SimpleITK_TEST_OUTPUT_DIR}/ImageRegistrationMethodDisplacement1Test2.hdf5 TRANSFORM_COMPARE ${SimpleITK_TEST_OUTPUT_DIR}/ImageRegistrationMethodDisplacement1Test2.hdf5 - DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodDisplacement1Test2.mha} + DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodDisplacement1Test2.mha,:} 0.02 ) @@ -39,7 +39,7 @@ sitk_add_python_test(Example.ImageRegistrationMethodDisplacement1 ${SimpleITK_TEST_OUTPUT_DIR}/PythonImageRegistrationMethodDisplacement1.hdf5 TRANSFORM_COMPARE ${SimpleITK_TEST_OUTPUT_DIR}/PythonImageRegistrationMethodDisplacement1.hdf5 - DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodDisplacement1.mha} + DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodDisplacement1.mha,:} 0.02 ) @@ -50,7 +50,7 @@ sitk_add_python_test(Example.ImageRegistrationMethodDisplacement1Test2 ${SimpleITK_TEST_OUTPUT_DIR}/PythonImageRegistrationMethodDisplacement1Test2.hdf5 TRANSFORM_COMPARE ${SimpleITK_TEST_OUTPUT_DIR}/PythonImageRegistrationMethodDisplacement1Test2.hdf5 - DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodDisplacement1Test2.mha} + DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodDisplacement1Test2.mha,:} 0.02 ) @@ -62,7 +62,7 @@ sitk_add_r_test(Example.ImageRegistrationMethodDisplacement1 ${SimpleITK_TEST_OUTPUT_DIR}/RImageRegistrationMethodDisplacement1.hdf5 TRANSFORM_COMPARE ${SimpleITK_TEST_OUTPUT_DIR}/RImageRegistrationMethodDisplacement1.hdf5 - DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodDisplacement1.mha} + DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodDisplacement1.mha,:} 0.02 ) @@ -73,6 +73,6 @@ sitk_add_r_test(Example.ImageRegistrationMethodDisplacement1Test2 ${SimpleITK_TEST_OUTPUT_DIR}/RImageRegistrationMethodDisplacement1Test2.hdf5 TRANSFORM_COMPARE ${SimpleITK_TEST_OUTPUT_DIR}/RImageRegistrationMethodDisplacement1Test2.hdf5 - DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodDisplacement1Test2.mha} + DATA{${SimpleITK_DATA_ROOT}/Baseline/ImageRegistrationMethodDisplacement1Test2.mha,:} 0.02 ) diff --git a/Testing/Data/Baseline/ImageRegistrationMethodBSpline3.1.mha.sha512 b/Testing/Data/Baseline/ImageRegistrationMethodBSpline3.1.mha.sha512 new file mode 100644 index 000000000..9104eddce --- /dev/null +++ b/Testing/Data/Baseline/ImageRegistrationMethodBSpline3.1.mha.sha512 @@ -0,0 +1 @@ +325f10c81a3ba3ad2f8a19ef98da058c71e902abb25886d0a2739186895860b3d56664dc3dda8ade033c0b08b82dd208fd155e3a7dd8d56cfbdc10059443d5c0 diff --git a/Testing/Data/Baseline/ImageRegistrationMethodDisplacement1.1.mha.sha512 b/Testing/Data/Baseline/ImageRegistrationMethodDisplacement1.1.mha.sha512 new file mode 100644 index 000000000..4ca1e9a7c --- /dev/null +++ b/Testing/Data/Baseline/ImageRegistrationMethodDisplacement1.1.mha.sha512 @@ -0,0 +1 @@ +eb8a6889a31221635131c5576939fe017dd03692985d9256b8cad1f413d1ecf08c391593f3202f5430d144686432c0b706be0708f4258166010e63b11231f6af diff --git a/Testing/Data/Baseline/ImageRegistrationMethodDisplacement1Test2.1.mha.sha512 b/Testing/Data/Baseline/ImageRegistrationMethodDisplacement1Test2.1.mha.sha512 new file mode 100644 index 000000000..015a6b44d --- /dev/null +++ b/Testing/Data/Baseline/ImageRegistrationMethodDisplacement1Test2.1.mha.sha512 @@ -0,0 +1 @@ +a3b5b7f89f959f7e0c1abd87abf9cda6c1620ecd11f89317082d9e808c212f7e6da0b17d08a86bc059520e7ca90497ee2a582fd0bff4dc9e25b564ed612a6948 From 9a9f67416683d69c1c8d2362ba6e50c4848803b2 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 20 Nov 2019 15:30:50 -0500 Subject: [PATCH 239/400] Update SLICImageFilter's module --- Code/BasicFilters/json/SLICImageFilter.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/BasicFilters/json/SLICImageFilter.json b/Code/BasicFilters/json/SLICImageFilter.json index 2ffba2f4c..0e9ced7d7 100644 --- a/Code/BasicFilters/json/SLICImageFilter.json +++ b/Code/BasicFilters/json/SLICImageFilter.json @@ -156,7 +156,7 @@ ] } ], - "itk_module" : "SimpleITKFilters", + "itk_module" : "ITKSuperPixel", "detaileddescription" : "The Simple Linear Iterative Clustering (SLIC) algorithm groups pixels into a set of labeled regions or super-pixels. Super-pixels follow natural image boundaries, are compact, and are nearly uniform regions which can be used as a larger primitive for more efficient computation. The SLIC algorithm can be viewed as a spatially constrained iterative k-means method.\n\nThe original algorithm was designed to cluster on the joint domain of the images index space and it's CIELAB color space. This implementation works with images of arbitrary dimension as well as scalar, single channel, images and most multi-component image types including ITK's arbitrary length VectorImage .\n\nThe distance between a pixel and a cluster is the sum of squares of the difference between their joint range and domains ( index and value ). The computation is done in index space with scales provided by the SpatialProximityWeight parameters.\n\nThe output is a label image with each label representing a superpixel cluster. Every pixel in the output is labeled, and the starting label id is zero.\n\nThis code was contributed in the Insight Journal paper: \"Scalable Simple Linear Iterative Clustering (SSLIC) Using a\nGeneric and Parallel Approach\" by Lowekamp B. C., Chen D. T., Yaniv Z.", "briefdescription" : "Simple Linear Iterative Clustering (SLIC) super-pixel segmentation." } From befe6a5a31278c57f20ad2e1392eb985183f7fbd Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 20 Nov 2019 15:37:45 -0500 Subject: [PATCH 240/400] Update baseline hash for change in Li threshold calculator Baseline changed due to: e3ce370f67 BUG: Fix Li threshold calculator for negative image values --- Code/BasicFilters/json/LiThresholdImageFilter.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Code/BasicFilters/json/LiThresholdImageFilter.json b/Code/BasicFilters/json/LiThresholdImageFilter.json index 6b772495d..819fd2f7a 100644 --- a/Code/BasicFilters/json/LiThresholdImageFilter.json +++ b/Code/BasicFilters/json/LiThresholdImageFilter.json @@ -81,14 +81,14 @@ "tag" : "default", "description" : "Default parameter settings", "settings" : [], - "md5hash" : "6ab8967612e2637bec64dc5ef14023f1", + "md5hash" : "11c1fb2abfe5880e2dbc6e30a53bbe7d", "inputs" : [ "Input/RA-Short.nrrd" ], "measurements_results" : [ { "name" : "Threshold", - "value" : 27402 + "value" : 27535 } ] }, @@ -96,7 +96,7 @@ "tag" : "cthead1_with_mask", "description" : "CT Head with mask", "settings" : [], - "md5hash" : "1264c8ec6e23856e5e752cb87712f886", + "md5hash" : "bc7e7cd90ce693de8e3be1a53f163710", "inputs" : [ "Input/cthead1.png", "Input/cthead1-mask.png" @@ -104,7 +104,7 @@ "measurements_results" : [ { "name" : "Threshold", - "value" : 182.0 + "value" : 183.0 } ] }, From 5c99b411d01d904a688016434d1c9cd36d65b10d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 20 Nov 2019 15:47:58 -0500 Subject: [PATCH 241/400] Update baseline hash for unsorted relabel component test case ITKv5 changed the map used internally which changed the order of the labels when not sorted: 0e2d4f2dc5 ENH: replace itksys::hash_map and hash_set by std equivalents --- Code/BasicFilters/json/RelabelComponentImageFilter.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/BasicFilters/json/RelabelComponentImageFilter.json b/Code/BasicFilters/json/RelabelComponentImageFilter.json index 113389254..531f14a93 100644 --- a/Code/BasicFilters/json/RelabelComponentImageFilter.json +++ b/Code/BasicFilters/json/RelabelComponentImageFilter.json @@ -98,7 +98,7 @@ "value" : "2u" } ], - "md5hash" : "c8485314800c21580cc125fb240ada6d", + "md5hash" : "58af064e929f08f9d5bacc8be44ed92e", "inputs" : [ "Input/2th_cthead1.png" ] From 9f61f0e917834ec0d34fd0f11a21f3b3dde02303 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 20 Nov 2019 16:15:42 -0500 Subject: [PATCH 242/400] Add ReturnMidPoint parameter to OtsuThreshold filters This value is defaulting to the ITKv4 value to maintain compatibility with the tests. --- .../BasicFilters/json/OtsuMultipleThresholdsImageFilter.json | 5 +++++ Code/BasicFilters/json/OtsuThresholdImageFilter.json | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json b/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json index fa6abff5a..db9dc191f 100644 --- a/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json +++ b/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json @@ -44,6 +44,11 @@ "detaileddescriptionSet" : "Set/Get the use of valley emphasis. Default is false.", "briefdescriptionGet" : "", "detaileddescriptionGet" : "Set/Get the use of valley emphasis. Default is false." + }, + { + "name" : "ReturnBinMidpoint", + "type" : "bool", + "default" : "true" } ], "measurements" : [ diff --git a/Code/BasicFilters/json/OtsuThresholdImageFilter.json b/Code/BasicFilters/json/OtsuThresholdImageFilter.json index 4b07f5a38..340db2029 100644 --- a/Code/BasicFilters/json/OtsuThresholdImageFilter.json +++ b/Code/BasicFilters/json/OtsuThresholdImageFilter.json @@ -66,6 +66,11 @@ "detaileddescriptionSet" : "The value in the mask image, if used, indicating voxels that should be included. Default is the max of pixel type, as in the MaskedImageToHistogramFilter", "briefdescriptionGet" : "", "detaileddescriptionGet" : "" + }, + { + "name" : "ReturnBinMidpoint", + "type" : "bool", + "default" : "true" } ], "measurements" : [ From d705c3b2850a993e33040f1ccd54439860e7bb25 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 21 Nov 2019 13:18:59 -0500 Subject: [PATCH 243/400] Replace statistics filter with distance to test aborts The progress reporting has been reduced in ITKv5, so setting aborts are not always effective. The StatisticsImageFilter is replaced with the SignedMaurerDistanceMapImageFilter which is implemented as a composite filter that response better to the abort flag. --- Testing/Unit/sitkBasicFiltersTests.cxx | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Testing/Unit/sitkBasicFiltersTests.cxx b/Testing/Unit/sitkBasicFiltersTests.cxx index 291496ed2..e535b83d6 100644 --- a/Testing/Unit/sitkBasicFiltersTests.cxx +++ b/Testing/Unit/sitkBasicFiltersTests.cxx @@ -52,6 +52,7 @@ #include #include #include +#include #include "itkVectorImage.h" #include "itkVector.h" @@ -823,17 +824,23 @@ TEST(BasicFilters,Cast_Commands) { } -TEST(BasicFilters,Statistics_Abort) { - // test Statistics filter with a bunch of commands - +TEST(BasicFilters,SignedMaurerDistanceMap_Abort) { + // test the abort functionality + // With ITKv5 the abort functionality does not work well with many basic image filters since they no longer report + // detailed progress. This filter is a composite filter namespace sitk = itk::simple; sitk::Image img = sitk::ReadImage( dataFinder.GetFile ( "Input/RA-Short.nrrd" ) ); EXPECT_EQ ( "a963bd6a755b853103a2d195e01a50d3", sitk::Hash(img, sitk::HashImageFilter::MD5)); - sitk::StatisticsImageFilter stats; - stats.SetNumberOfThreads(1); + sitk::SignedMaurerDistanceMapImageFilter stats; + stats.SetNumberOfThreads(16); + + float abortAtProgress = 0.35f; + + AbortAtCommand abortAtCommand(stats,abortAtProgress); + stats.AddCommand(sitk::sitkProgressEvent, abortAtCommand); - AbortAtCommand progressCmd(stats,.05); + ProgressUpdate progressCmd(stats); stats.AddCommand(sitk::sitkProgressEvent, progressCmd); CountCommand abortCmd(stats); @@ -862,6 +869,7 @@ TEST(BasicFilters,Statistics_Abort) { EXPECT_EQ ( 0, iterCmd.m_Count ); EXPECT_EQ ( 1, startCmd.m_Count ); EXPECT_EQ ( 0, userCmd.m_Count ); + EXPECT_LE( abortAtProgress, progressCmd.m_Progress ); } From 251bb7b7696860af5d5855cf893eeaf0c90cb74f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 21 Nov 2019 15:24:08 -0500 Subject: [PATCH 244/400] Set the CXX standard to C++11 --- CMake/sitkCheckRequiredFlags.cmake | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/CMake/sitkCheckRequiredFlags.cmake b/CMake/sitkCheckRequiredFlags.cmake index 12b37f5e1..1001b160c 100644 --- a/CMake/sitkCheckRequiredFlags.cmake +++ b/CMake/sitkCheckRequiredFlags.cmake @@ -84,32 +84,10 @@ if( DEFINED CMAKE_CXX_STANDARD endif() elseif(NOT HAS_CXX_STD_FLAG) -# -# Check if we need to enable C++11 with a compiler flag -# - - check_cxx_compiler_flag( "-std=c++11" CXX_HAS_stdcxx11) - - if (CXX_HAS_stdcxx11) - - message(STATUS "Checking if c++11 is required...") - try_compile(SITK_CXX11_NOT_REQUIRED - "${PROJECT_BINARY_DIR}" - "${CMAKE_CURRENT_LIST_DIR}/sitk_check_cxx11_required.cxx" - OUTPUT_VARIABLE OUTPUT) - if(SITK_CXX11_NOT_REQUIRED) - message(STATUS "Checking if c++11 is required... NO" ) - else() - message(STATUS "Checking if c++11 is required... YES" ) - file(APPEND ${CMAKE_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/CMakeError.log - "Checking if C++11 required try_compile failed with the following output:\n" - "${OUTPUT}\n") - list(APPEND SimpleITK_PUBLIC_COMPILE_OPTIONS "-std=c++11") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") - endif() - - endif() - +# Brute force set the standard for the whole project. +# TODO: Use target_compile_features on each library. +set(CMAKE_CXX_STANDARD 11) +message(STATUS "Setting cxx standard to C++11") endif() list(REMOVE_DUPLICATES SimpleITK_PUBLIC_COMPILE_OPTIONS) From f2bbea75a3f4f15bacd8359bdb0c42892d4b9506 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 22 Nov 2019 15:44:10 -0500 Subject: [PATCH 245/400] Add new baseline for change in results for ITKv5 registration The change in results is due to the change to using the recursive Gaussian image filter. --- .../Data/Baseline/ImageRegistrationMethodBSpline2.2.mha.sha512 | 1 + 1 file changed, 1 insertion(+) create mode 100644 Testing/Data/Baseline/ImageRegistrationMethodBSpline2.2.mha.sha512 diff --git a/Testing/Data/Baseline/ImageRegistrationMethodBSpline2.2.mha.sha512 b/Testing/Data/Baseline/ImageRegistrationMethodBSpline2.2.mha.sha512 new file mode 100644 index 000000000..fbfc526fa --- /dev/null +++ b/Testing/Data/Baseline/ImageRegistrationMethodBSpline2.2.mha.sha512 @@ -0,0 +1 @@ +2f6d938d5a9ab3b2306a3b8bd46338341b9b7beaa2535ce18b4a8a073670505098a26e8a6a9639aa52b3d2f1ce99f18f0b17ce5dc545236352337c9ea3995aa4 From ddde6bf0d262877ed3d822d160463f47d952c088 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 22 Nov 2019 12:09:11 -0500 Subject: [PATCH 246/400] Disable the explicit template instantiating by default But continue to use is by default with MSVC to avoid a linking error likely due to memory limitation. --- CMakeLists.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 042451675..810c1049d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -91,8 +91,11 @@ list(APPEND SimpleITK_PRIVATE_COMPILE_OPTIONS ${CXX_ADDITIONAL_WARNING_FLAGS}) option(BUILD_SHARED_LIBS "Build SimpleITK ITK with shared libraries. This does not effect wrapped languages." OFF) set(SITK_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) - -option(SimpleITK_EXPLICIT_INSTANTIATION "Enable an ITK static library of explicitly instantiated templates." ON) +set(SimpleITK_EXPLICIT_INSTATIATION_DEFAULT OFF) +if(MSCV) + set(SimpleITK_EXPLICIT_INSTATIATION_DEFAULT ON) +endif() +option(SimpleITK_EXPLICIT_INSTANTIATION "Enable an ITK static library of explicitly instantiated templates." ${SimpleITK_EXPLICIT_INSTATIATION_DEFAULT}) sitk_legacy_naming(SimpleITK_EXPLICIT_INSTANTIATION) if ( MSVC AND SITK_BUILD_SHARED_LIBS ) From cdc408361a01ae2a4144f4e7c4e3b740ae697fff Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 23 Aug 2019 13:24:00 -0400 Subject: [PATCH 247/400] Use ITK's enum typedefs to qualify enum value Enables compatibility with ITKv5 C++11 class based enums. --- ...andmarkBasedTransformInitializerFilter.cxx | 3 +- Code/Common/src/sitkPimpleTransform.hxx | 3 +- Code/IO/src/sitkImageFileWriter.cxx | 2 +- Code/IO/src/sitkImageReaderBase.cxx | 2 +- Code/IO/src/sitkImageSeriesWriter.cxx | 2 +- Testing/Unit/sitkBasicFiltersTests.cxx | 74 +++++++++---------- 6 files changed, 44 insertions(+), 42 deletions(-) diff --git a/Code/BasicFilters/src/sitkLandmarkBasedTransformInitializerFilter.cxx b/Code/BasicFilters/src/sitkLandmarkBasedTransformInitializerFilter.cxx index d9cb77deb..fc0f17a57 100644 --- a/Code/BasicFilters/src/sitkLandmarkBasedTransformInitializerFilter.cxx +++ b/Code/BasicFilters/src/sitkLandmarkBasedTransformInitializerFilter.cxx @@ -181,8 +181,9 @@ Transform LandmarkBasedTransformInitializerFilter::ExecuteInternal ( const Trans filter->SetLandmarkWeight ( this->m_LandmarkWeight ); + typedef typename FilterType::TransformType::TransformCategoryType TransformCategoryType; // BSpline specific setup - if( itkTx->GetTransformCategory() == itkTx->BSpline ) + if( itkTx->GetTransformCategory() == TransformCategoryType::BSpline ) { if ( this->m_ReferenceImage.GetSize() == std::vector(this->m_ReferenceImage.GetDimension(), 0u) ) { diff --git a/Code/Common/src/sitkPimpleTransform.hxx b/Code/Common/src/sitkPimpleTransform.hxx index b403012da..6a5bb0150 100644 --- a/Code/Common/src/sitkPimpleTransform.hxx +++ b/Code/Common/src/sitkPimpleTransform.hxx @@ -147,7 +147,8 @@ public: virtual bool IsLinear() const { - return (this->GetTransformBase()->GetTransformCategory() == TransformBase::Linear); + typedef itk::TransformBaseTemplate::TransformCategoryType TransformCategoryType; + return (this->GetTransformBase()->GetTransformCategory() == TransformCategoryType::Linear); } diff --git a/Code/IO/src/sitkImageFileWriter.cxx b/Code/IO/src/sitkImageFileWriter.cxx index 9719b6677..327eb10a1 100644 --- a/Code/IO/src/sitkImageFileWriter.cxx +++ b/Code/IO/src/sitkImageFileWriter.cxx @@ -161,7 +161,7 @@ ::GetImageIOBase(const std::string &fileName) itk::ImageIOBase::Pointer iobase; if (this->m_ImageIOName == "") { - iobase = itk::ImageIOFactory::CreateImageIO( fileName.c_str(), itk::ImageIOFactory::WriteMode); + iobase = itk::ImageIOFactory::CreateImageIO( fileName.c_str(), itk::ImageIOFactory::FileModeType::WriteMode); } else { diff --git a/Code/IO/src/sitkImageReaderBase.cxx b/Code/IO/src/sitkImageReaderBase.cxx index d9b4d272d..10dd52437 100644 --- a/Code/IO/src/sitkImageReaderBase.cxx +++ b/Code/IO/src/sitkImageReaderBase.cxx @@ -84,7 +84,7 @@ ::GetImageIOBase(const std::string &fileName) itk::ImageIOBase::Pointer iobase; if (this->m_ImageIOName == "") { - iobase = itk::ImageIOFactory::CreateImageIO( fileName.c_str(), itk::ImageIOFactory::ReadMode); + iobase = itk::ImageIOFactory::CreateImageIO( fileName.c_str(), itk::ImageIOFactory::FileModeType::ReadMode); } else { diff --git a/Code/IO/src/sitkImageSeriesWriter.cxx b/Code/IO/src/sitkImageSeriesWriter.cxx index 131bd928d..ad574e42f 100644 --- a/Code/IO/src/sitkImageSeriesWriter.cxx +++ b/Code/IO/src/sitkImageSeriesWriter.cxx @@ -114,7 +114,7 @@ namespace itk { itk::ImageIOBase::Pointer iobase; if (this->m_ImageIOName == "") { - iobase = itk::ImageIOFactory::CreateImageIO( fileName.c_str(), itk::ImageIOFactory::WriteMode); + iobase = itk::ImageIOFactory::CreateImageIO( fileName.c_str(), itk::ImageIOFactory::FileModeType::WriteMode); } else { diff --git a/Testing/Unit/sitkBasicFiltersTests.cxx b/Testing/Unit/sitkBasicFiltersTests.cxx index e535b83d6..e3a1d9a5d 100644 --- a/Testing/Unit/sitkBasicFiltersTests.cxx +++ b/Testing/Unit/sitkBasicFiltersTests.cxx @@ -108,43 +108,43 @@ TEST(BasicFilter,DiffeomorphicDemonsRegistrationFilter_ENUMCHECK) { TEST(BasicFilters,MergeLabelMap_ENUMCHECK) { typedef itk::MergeLabelMapFilter< itk::LabelMap< itk::LabelObject > > ITKType; - EXPECT_EQ( (int)ITKType::KEEP, (int)itk::simple::MergeLabelMapFilter::Keep); - EXPECT_EQ( (int)ITKType::AGGREGATE, (int)itk::simple::MergeLabelMapFilter::Aggregate); - EXPECT_EQ( (int)ITKType::PACK, (int)itk::simple::MergeLabelMapFilter::Pack); - EXPECT_EQ( (int)ITKType::STRICT, (int)itk::simple::MergeLabelMapFilter::Strict); + EXPECT_EQ( (int)ITKType::MethodChoice::KEEP, (int)itk::simple::MergeLabelMapFilter::Keep); + EXPECT_EQ( (int)ITKType::MethodChoice::AGGREGATE, (int)itk::simple::MergeLabelMapFilter::Aggregate); + EXPECT_EQ( (int)ITKType::MethodChoice::PACK, (int)itk::simple::MergeLabelMapFilter::Pack); + EXPECT_EQ( (int)ITKType::MethodChoice::STRICT, (int)itk::simple::MergeLabelMapFilter::Strict); } TEST(BasicFilters,ScalarToRGBColormap_ENUMCHECK) { typedef itk::ScalarToRGBColormapImageFilter< itk::Image, itk::Image< itk::RGBPixel,3> > ITKType; - EXPECT_EQ( (int)ITKType::Red, (int)itk::simple::ScalarToRGBColormapImageFilter::Red); - EXPECT_EQ( (int)ITKType::Green, (int)itk::simple::ScalarToRGBColormapImageFilter::Green); - EXPECT_EQ( (int)ITKType::Blue, (int)itk::simple::ScalarToRGBColormapImageFilter::Blue); - EXPECT_EQ( (int)ITKType::Grey, (int)itk::simple::ScalarToRGBColormapImageFilter::Grey); - EXPECT_EQ( (int)ITKType::Hot, (int)itk::simple::ScalarToRGBColormapImageFilter::Hot); - EXPECT_EQ( (int)ITKType::Cool, (int)itk::simple::ScalarToRGBColormapImageFilter::Cool); - EXPECT_EQ( (int)ITKType::Spring, (int)itk::simple::ScalarToRGBColormapImageFilter::Spring); - EXPECT_EQ( (int)ITKType::Summer, (int)itk::simple::ScalarToRGBColormapImageFilter::Summer); - EXPECT_EQ( (int)ITKType::Autumn, (int)itk::simple::ScalarToRGBColormapImageFilter::Autumn); - EXPECT_EQ( (int)ITKType::Winter, (int)itk::simple::ScalarToRGBColormapImageFilter::Winter); - EXPECT_EQ( (int)ITKType::Copper, (int)itk::simple::ScalarToRGBColormapImageFilter::Copper); - EXPECT_EQ( (int)ITKType::Jet, (int)itk::simple::ScalarToRGBColormapImageFilter::Jet); - EXPECT_EQ( (int)ITKType::HSV, (int)itk::simple::ScalarToRGBColormapImageFilter::HSV); - EXPECT_EQ( (int)ITKType::OverUnder, (int)itk::simple::ScalarToRGBColormapImageFilter::OverUnder); + EXPECT_EQ( (int)ITKType::ColormapEnumType::Red, (int)itk::simple::ScalarToRGBColormapImageFilter::Red); + EXPECT_EQ( (int)ITKType::ColormapEnumType::Green, (int)itk::simple::ScalarToRGBColormapImageFilter::Green); + EXPECT_EQ( (int)ITKType::ColormapEnumType::Blue, (int)itk::simple::ScalarToRGBColormapImageFilter::Blue); + EXPECT_EQ( (int)ITKType::ColormapEnumType::Grey, (int)itk::simple::ScalarToRGBColormapImageFilter::Grey); + EXPECT_EQ( (int)ITKType::ColormapEnumType::Hot, (int)itk::simple::ScalarToRGBColormapImageFilter::Hot); + EXPECT_EQ( (int)ITKType::ColormapEnumType::Cool, (int)itk::simple::ScalarToRGBColormapImageFilter::Cool); + EXPECT_EQ( (int)ITKType::ColormapEnumType::Spring, (int)itk::simple::ScalarToRGBColormapImageFilter::Spring); + EXPECT_EQ( (int)ITKType::ColormapEnumType::Summer, (int)itk::simple::ScalarToRGBColormapImageFilter::Summer); + EXPECT_EQ( (int)ITKType::ColormapEnumType::Autumn, (int)itk::simple::ScalarToRGBColormapImageFilter::Autumn); + EXPECT_EQ( (int)ITKType::ColormapEnumType::Winter, (int)itk::simple::ScalarToRGBColormapImageFilter::Winter); + EXPECT_EQ( (int)ITKType::ColormapEnumType::Copper, (int)itk::simple::ScalarToRGBColormapImageFilter::Copper); + EXPECT_EQ( (int)ITKType::ColormapEnumType::Jet, (int)itk::simple::ScalarToRGBColormapImageFilter::Jet); + EXPECT_EQ( (int)ITKType::ColormapEnumType::HSV, (int)itk::simple::ScalarToRGBColormapImageFilter::HSV); + EXPECT_EQ( (int)ITKType::ColormapEnumType::OverUnder, (int)itk::simple::ScalarToRGBColormapImageFilter::OverUnder); } TEST(BasicFilters,RecursiveGaussian_ENUMCHECK) { typedef itk::RecursiveGaussianImageFilter< itk::Image > ITKRecursiveGausianType; - EXPECT_EQ( (int)ITKRecursiveGausianType::ZeroOrder, (int)itk::simple::RecursiveGaussianImageFilter::ZeroOrder ); - EXPECT_EQ( (int)ITKRecursiveGausianType::FirstOrder, (int)itk::simple::RecursiveGaussianImageFilter::FirstOrder ); - EXPECT_EQ( (int)ITKRecursiveGausianType::SecondOrder, (int)itk::simple::RecursiveGaussianImageFilter::SecondOrder ); + EXPECT_EQ( (int)ITKRecursiveGausianType::OrderEnumType::ZeroOrder, (int)itk::simple::RecursiveGaussianImageFilter::ZeroOrder ); + EXPECT_EQ( (int)ITKRecursiveGausianType::OrderEnumType::FirstOrder, (int)itk::simple::RecursiveGaussianImageFilter::FirstOrder ); + EXPECT_EQ( (int)ITKRecursiveGausianType::OrderEnumType::SecondOrder, (int)itk::simple::RecursiveGaussianImageFilter::SecondOrder ); } TEST(BasicFilters,Extract_ENUMCHECK) { typedef itk::ExtractImageFilter< itk::Image, itk::Image > ITKExtractType; - EXPECT_EQ( (int)ITKExtractType::DIRECTIONCOLLAPSETOUNKOWN, (int)itk::simple::ExtractImageFilter::DIRECTIONCOLLAPSETOUNKOWN ); - EXPECT_EQ( (int)ITKExtractType::DIRECTIONCOLLAPSETOIDENTITY, (int)itk::simple::ExtractImageFilter::DIRECTIONCOLLAPSETOIDENTITY ); - EXPECT_EQ( (int)ITKExtractType::DIRECTIONCOLLAPSETOSUBMATRIX, (int)itk::simple::ExtractImageFilter::DIRECTIONCOLLAPSETOSUBMATRIX ); - EXPECT_EQ( (int)ITKExtractType::DIRECTIONCOLLAPSETOGUESS, (int)itk::simple::ExtractImageFilter::DIRECTIONCOLLAPSETOGUESS ); + EXPECT_EQ( (int)ITKExtractType::DirectionCollapseStrategyEnum::DIRECTIONCOLLAPSETOUNKOWN, (int)itk::simple::ExtractImageFilter::DIRECTIONCOLLAPSETOUNKOWN ); + EXPECT_EQ( (int)ITKExtractType::DirectionCollapseStrategyEnum::DIRECTIONCOLLAPSETOIDENTITY, (int)itk::simple::ExtractImageFilter::DIRECTIONCOLLAPSETOIDENTITY ); + EXPECT_EQ( (int)ITKExtractType::DirectionCollapseStrategyEnum::DIRECTIONCOLLAPSETOSUBMATRIX, (int)itk::simple::ExtractImageFilter::DIRECTIONCOLLAPSETOSUBMATRIX ); + EXPECT_EQ( (int)ITKExtractType::DirectionCollapseStrategyEnum::DIRECTIONCOLLAPSETOGUESS, (int)itk::simple::ExtractImageFilter::DIRECTIONCOLLAPSETOGUESS ); } TEST(BasicFilters,FastMarching_ENUMCHECK) { @@ -156,38 +156,38 @@ TEST(BasicFilters,FastMarching_ENUMCHECK) { TEST(BasicFilters,InverseDeconvolution_ENUMCHECK) { typedef itk::InverseDeconvolutionImageFilter< itk::Image, itk::Image > ITKType; - EXPECT_EQ( (int) ITKType::SAME, (int) itk::simple::InverseDeconvolutionImageFilter::SAME ); - EXPECT_EQ( (int) ITKType::VALID, (int) itk::simple::InverseDeconvolutionImageFilter::VALID ); + EXPECT_EQ( (int) ITKType::OutputRegionModeType::SAME, (int) itk::simple::InverseDeconvolutionImageFilter::SAME ); + EXPECT_EQ( (int) ITKType::OutputRegionModeType::VALID, (int) itk::simple::InverseDeconvolutionImageFilter::VALID ); } TEST(BasicFilters,TikhonovDeconvolution_ENUMCHECK) { typedef itk::TikhonovDeconvolutionImageFilter< itk::Image, itk::Image > ITKType; - EXPECT_EQ( (int) ITKType::SAME, (int) itk::simple::TikhonovDeconvolutionImageFilter::SAME ); - EXPECT_EQ( (int) ITKType::VALID, (int) itk::simple::TikhonovDeconvolutionImageFilter::VALID ); + EXPECT_EQ( (int) ITKType::OutputRegionModeType::SAME, (int) itk::simple::TikhonovDeconvolutionImageFilter::SAME ); + EXPECT_EQ( (int) ITKType::OutputRegionModeType::VALID, (int) itk::simple::TikhonovDeconvolutionImageFilter::VALID ); } TEST(BasicFilters,WienerDeconvolution_ENUMCHECK) { typedef itk::WienerDeconvolutionImageFilter< itk::Image, itk::Image > ITKType; - EXPECT_EQ( (int) ITKType::SAME, (int) itk::simple::WienerDeconvolutionImageFilter::SAME ); - EXPECT_EQ( (int) ITKType::VALID, (int) itk::simple::WienerDeconvolutionImageFilter::VALID ); + EXPECT_EQ( (int) ITKType::OutputRegionModeType::SAME, (int) itk::simple::WienerDeconvolutionImageFilter::SAME ); + EXPECT_EQ( (int) ITKType::OutputRegionModeType::VALID, (int) itk::simple::WienerDeconvolutionImageFilter::VALID ); } TEST(BasicFilters,LandweberDeconvolution_ENUMCHECK) { typedef itk::LandweberDeconvolutionImageFilter< itk::Image, itk::Image > ITKType; - EXPECT_EQ( (int) ITKType::SAME, (int) itk::simple::LandweberDeconvolutionImageFilter::SAME ); - EXPECT_EQ( (int) ITKType::VALID, (int) itk::simple::LandweberDeconvolutionImageFilter::VALID ); + EXPECT_EQ( (int) ITKType::OutputRegionModeType::SAME, (int) itk::simple::LandweberDeconvolutionImageFilter::SAME ); + EXPECT_EQ( (int) ITKType::OutputRegionModeType::VALID, (int) itk::simple::LandweberDeconvolutionImageFilter::VALID ); } TEST(BasicFilters,ProjectedLandweberDeconvolution_ENUMCHECK) { typedef itk::ProjectedLandweberDeconvolutionImageFilter< itk::Image, itk::Image > ITKType; - EXPECT_EQ( (int) ITKType::SAME, (int) itk::simple::ProjectedLandweberDeconvolutionImageFilter::SAME ); - EXPECT_EQ( (int) ITKType::VALID, (int) itk::simple::ProjectedLandweberDeconvolutionImageFilter::VALID ); + EXPECT_EQ( (int) ITKType::OutputRegionModeType::SAME, (int) itk::simple::ProjectedLandweberDeconvolutionImageFilter::SAME ); + EXPECT_EQ( (int) ITKType::OutputRegionModeType::VALID, (int) itk::simple::ProjectedLandweberDeconvolutionImageFilter::VALID ); } TEST(BasicFilters,RichardsonLucyDeconvolution_ENUMCHECK) { typedef itk::RichardsonLucyDeconvolutionImageFilter< itk::Image, itk::Image > ITKType; - EXPECT_EQ( (int) ITKType::SAME, (int) itk::simple::RichardsonLucyDeconvolutionImageFilter::SAME ); - EXPECT_EQ( (int) ITKType::VALID, (int) itk::simple::RichardsonLucyDeconvolutionImageFilter::VALID ); + EXPECT_EQ( (int) ITKType::OutputRegionModeType::SAME, (int) itk::simple::RichardsonLucyDeconvolutionImageFilter::SAME ); + EXPECT_EQ( (int) ITKType::OutputRegionModeType::VALID, (int) itk::simple::RichardsonLucyDeconvolutionImageFilter::VALID ); } TEST(BasicFilters,LabelMapContourOverlay_ENUMCHECK) { From 1862d611ed5f03104143886bfd43af767700b72f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 25 Nov 2019 10:04:59 -0500 Subject: [PATCH 248/400] Use C++11 compile features and removing try compiles for tr1 --- CMake/sitkCheckCXX11.cmake | 43 ++-------------------------- CMake/sitkCheckRequiredFlags.cmake | 6 ---- Code/BasicFilters/src/CMakeLists.txt | 2 ++ Code/Common/src/CMakeLists.txt | 2 +- Code/Common/src/sitkConfigure.h.in | 6 ---- Code/Explicit/src/CMakeLists.txt | 1 + Code/IO/src/CMakeLists.txt | 1 + Code/Registration/src/CMakeLists.txt | 1 + 8 files changed, 8 insertions(+), 54 deletions(-) diff --git a/CMake/sitkCheckCXX11.cmake b/CMake/sitkCheckCXX11.cmake index 8e890ee66..bccb12666 100644 --- a/CMake/sitkCheckCXX11.cmake +++ b/CMake/sitkCheckCXX11.cmake @@ -25,6 +25,8 @@ function(sitkCXX11Test VARIABLE) if(NOT DEFINED ${VARIABLE}) message(STATUS "Performing Test ${VARIABLE}") + set(CMAKE_CXX_STANDARD 11) + if(NOT POLICY CMP0067) if(DEFINED CMAKE_CXX_STANDARD) set(cmake_flags "${cmake_flags} -DCMAKE_CXX_STANDARD:STRING:=${CMAKE_CXX_STANDARD}") @@ -69,44 +71,3 @@ sitkCXX11Test(SITK_HAS_CXX11_UNORDERED_MAP) sitkCXX11Test(SITK_HAS_CXX11_NULLPTR) sitkCXX11Test(SITK_HAS_CXX11_UNIQUE_PTR) sitkCXX11Test(SITK_HAS_CXX11_ALIAS_TEMPLATE) - - - -# Microsoft Visual Studio 2008sp1,2010,2012 don't need tr1 as a path -# prefix to tr1 headers, while libc++ -sitkCXX11Test(SITK_HAS_TR1_SUB_INCLUDE) - -if (SITK_HAS_TR1_SUB_INCLUDE) - list(APPEND CMAKE_REQUIRED_DEFINITIONS "-DHAS_TR1_SUB_INCLUDE") -endif() - -# -# Check for TR1 features -# -sitkCXX11Test(SITK_HAS_TR1_FUNCTIONAL) -sitkCXX11Test(SITK_HAS_TR1_TYPE_TRAITS) -sitkCXX11Test(SITK_HAS_TR1_UNORDERED_MAP) - -# restore variable -cmake_pop_check_state() - - -if ( (NOT SITK_HAS_TR1_FUNCTIONAL AND NOT SITK_HAS_CXX11_FUNCTIONAL) - OR - (NOT SITK_HAS_TR1_TYPE_TRAITS AND NOT SITK_HAS_CXX11_TYPE_TRAITS) - ) - if (MSVC) - message( FATAL_ERROR - "SimpleITK requires usage of C++11 or C++ Technical Report 1 (TR1).\n" - "It may be available as an optional download for your compiler or difference CXX_FLAGS." - "Please see the FAQs for details." - "http://simpleitk.readthedocs.io/en/master/Documentation/docs/source/faq.html#do-i-need-to-download-an-option-package-for-tr1-support\n") - else() - message( FATAL_ERROR - "SimpleITK requires usage of C++11 or C++ Technical Report 1 " - "(TR1), but were neither able to detect TR1 nor automatically " - "enable C++11. Please review your configuration settings and " - "enable C++11.\n") - - endif() -endif () diff --git a/CMake/sitkCheckRequiredFlags.cmake b/CMake/sitkCheckRequiredFlags.cmake index 1001b160c..c945ef1dd 100644 --- a/CMake/sitkCheckRequiredFlags.cmake +++ b/CMake/sitkCheckRequiredFlags.cmake @@ -82,12 +82,6 @@ if( DEFINED CMAKE_CXX_STANDARD message(SEND_ERROR "CMake CXX standard variables are not supported concurrently with CXX flag: \"-std=\"! Use only one to configure CXX standard.") endif() -elseif(NOT HAS_CXX_STD_FLAG) - -# Brute force set the standard for the whole project. -# TODO: Use target_compile_features on each library. -set(CMAKE_CXX_STANDARD 11) -message(STATUS "Setting cxx standard to C++11") endif() list(REMOVE_DUPLICATES SimpleITK_PUBLIC_COMPILE_OPTIONS) diff --git a/Code/BasicFilters/src/CMakeLists.txt b/Code/BasicFilters/src/CMakeLists.txt index 5876ba69a..52f354b15 100644 --- a/Code/BasicFilters/src/CMakeLists.txt +++ b/Code/BasicFilters/src/CMakeLists.txt @@ -44,6 +44,7 @@ function(add_filter_library library_name src_list_var itk_module_list_var) ${SimpleITK_PUBLIC_COMPILE_OPTIONS} PRIVATE ${SimpleITK_PRIVATE_COMPILE_OPTIONS} ) + target_compile_features( ${library_name} PUBLIC cxx_std_11 ) add_dependencies ( ${library_name} BasicFiltersSourceCode ) @@ -84,6 +85,7 @@ target_compile_options( SimpleITKBasicFilters0 ${SimpleITK_PUBLIC_COMPILE_OPTIONS} PRIVATE ${SimpleITK_PRIVATE_COMPILE_OPTIONS} ) +target_compile_features( SimpleITKBasicFilters0 PUBLIC cxx_std_11 ) sitk_install_exported_target( SimpleITKBasicFilters0 ) # append this new library to the globally cached list diff --git a/Code/Common/src/CMakeLists.txt b/Code/Common/src/CMakeLists.txt index fd1423efa..e06d427aa 100644 --- a/Code/Common/src/CMakeLists.txt +++ b/Code/Common/src/CMakeLists.txt @@ -51,7 +51,7 @@ target_compile_options( SimpleITKCommon ${SimpleITK_PUBLIC_COMPILE_OPTIONS} PRIVATE ${SimpleITK_PRIVATE_COMPILE_OPTIONS} ) - +target_compile_features( SimpleITKCommon PUBLIC cxx_std_11 ) sitk_install_exported_target( SimpleITKCommon ) diff --git a/Code/Common/src/sitkConfigure.h.in b/Code/Common/src/sitkConfigure.h.in index c9011282e..40da38603 100644 --- a/Code/Common/src/sitkConfigure.h.in +++ b/Code/Common/src/sitkConfigure.h.in @@ -38,12 +38,6 @@ #cmakedefine SITK_HAS_CXX11_UNIQUE_PTR #cmakedefine SITK_HAS_CXX11_ALIAS_TEMPLATE -#cmakedefine SITK_HAS_TR1_SUB_INCLUDE - -#cmakedefine SITK_HAS_TR1_FUNCTIONAL -#cmakedefine SITK_HAS_TR1_TYPE_TRAITS -#cmakedefine SITK_HAS_TR1_UNORDERED_MAP - // defined if compiler supports using template keyword to disambiguate // dependent names #cmakedefine SITK_HAS_TEMPLATE_DISAMBIGUATOR_DEPENDENT_NAME diff --git a/Code/Explicit/src/CMakeLists.txt b/Code/Explicit/src/CMakeLists.txt index 0dff49b7e..694e0f5c4 100644 --- a/Code/Explicit/src/CMakeLists.txt +++ b/Code/Explicit/src/CMakeLists.txt @@ -46,5 +46,6 @@ target_compile_options( SimpleITKExplicit ${SimpleITK_PUBLIC_COMPILE_OPTIONS} PRIVATE ${SimpleITK_PRIVATE_COMPILE_OPTIONS} ) +target_compile_features( SimpleITKExplicit PUBLIC cxx_std_11 ) sitk_install_exported_target( SimpleITKExplicit ) diff --git a/Code/IO/src/CMakeLists.txt b/Code/IO/src/CMakeLists.txt index ee1728ce8..8577a45e3 100644 --- a/Code/IO/src/CMakeLists.txt +++ b/Code/IO/src/CMakeLists.txt @@ -35,6 +35,7 @@ target_compile_options( SimpleITKIO ${SimpleITK_PUBLIC_COMPILE_OPTIONS} PRIVATE ${SimpleITK_PRIVATE_COMPILE_OPTIONS} ) +target_compile_features( SimpleITKIO PUBLIC cxx_std_11 ) sitk_install_exported_target( SimpleITKIO ) diff --git a/Code/Registration/src/CMakeLists.txt b/Code/Registration/src/CMakeLists.txt index 9b2e47795..50e1d1d15 100644 --- a/Code/Registration/src/CMakeLists.txt +++ b/Code/Registration/src/CMakeLists.txt @@ -29,5 +29,6 @@ target_compile_options( SimpleITKRegistration ${SimpleITK_PUBLIC_COMPILE_OPTIONS} PRIVATE ${SimpleITK_PRIVATE_COMPILE_OPTIONS} ) +target_compile_features( SimpleITKRegistration PUBLIC cxx_std_11 ) sitk_install_exported_target( SimpleITKRegistration ) From d51a18e3fd1acbbd81e8cc750431d5f704fe8136 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 25 Nov 2019 16:38:14 -0500 Subject: [PATCH 249/400] Add support to specify compression level and compressor --- Code/IO/include/sitkImageFileWriter.h | 31 +++++++++++++++-- Code/IO/src/sitkImageFileWriter.cxx | 49 +++++++++++++++++++++++++-- 2 files changed, 75 insertions(+), 5 deletions(-) diff --git a/Code/IO/include/sitkImageFileWriter.h b/Code/IO/include/sitkImageFileWriter.h index 45271b09c..501738275 100644 --- a/Code/IO/include/sitkImageFileWriter.h +++ b/Code/IO/include/sitkImageFileWriter.h @@ -82,6 +82,27 @@ class SmartPointer; SITK_RETURN_SELF_TYPE_HEADER UseCompressionOff( void ) { return this->SetUseCompression(false); } /** @} */ + + /** \brief A hint for the amount of compression to be applied during writing. + * + * After compression is enabled and if the itk::ImageIO support this option, then this value may be used. The range is + * dependent upon the compression algorithm used. It is generally 0-100 for JPEG like lossy compression and 0-9 + * for lossless zip or LZW like compression algorithms. Please see the specific itk::ImageIO for details. + * @{ */ + SITK_RETURN_SELF_TYPE_HEADER SetCompressionLevel(int); + int GetCompressionLevel(void) const; + /** @} */ + + /** \brief A compression algorithm hint + * + * The default is an empty string which enables the default compression of the ImageIO if compression is enabled. + * If the string identifier is not known a warning is produced and the default compressor is used. Please see the + * itk::ImageIO for details. + * @{ */ + SITK_RETURN_SELF_TYPE_HEADER SetCompressor(const std::string &); + std::string GetCompressor(void); + /** @} */ + /** \brief Set/Get name of ImageIO to use * * An option to override the automatically detected ImageIO used @@ -118,7 +139,7 @@ class SmartPointer; std::string GetFileName() const; SITK_RETURN_SELF_TYPE_HEADER Execute ( const Image& ); - SITK_RETURN_SELF_TYPE_HEADER Execute ( const Image& , const std::string &inFileName, bool useCompression ); + SITK_RETURN_SELF_TYPE_HEADER Execute ( const Image& , const std::string &inFileName, bool useCompression, int compressionLevel ); private: @@ -127,6 +148,9 @@ class SmartPointer; template Self& ExecuteInternal ( const Image& ); bool m_UseCompression; + int m_CompressionLevel; + std::string m_Compressor; + std::string m_FileName; bool m_KeepOriginalImageUID; std::string m_ImageIOName; @@ -141,7 +165,10 @@ class SmartPointer; }; - SITKIO_EXPORT void WriteImage ( const Image& image, const std::string &fileName, bool useCompression=false ); + SITKIO_EXPORT void WriteImage ( const Image& image, + const std::string &fileName, + bool useCompression=false, + int compressionLevel=-1); } } diff --git a/Code/IO/src/sitkImageFileWriter.cxx b/Code/IO/src/sitkImageFileWriter.cxx index 327eb10a1..f95076ea0 100644 --- a/Code/IO/src/sitkImageFileWriter.cxx +++ b/Code/IO/src/sitkImageFileWriter.cxx @@ -27,10 +27,10 @@ namespace itk { namespace simple { -void WriteImage ( const Image& image, const std::string &inFileName, bool useCompression ) +void WriteImage ( const Image& image, const std::string &inFileName, bool useCompression, int compressionLevel ) { ImageFileWriter writer; - writer.Execute ( image, inFileName, useCompression ); + writer.Execute ( image, inFileName, useCompression, compressionLevel ); } @@ -42,6 +42,7 @@ ImageFileWriter::ImageFileWriter() { this->m_UseCompression = false; this->m_KeepOriginalImageUID = false; + this->m_CompressionLevel = -1; this->m_MemberFactory.reset( new detail::MemberFunctionFactory( this ) ); @@ -62,6 +63,14 @@ std::string ImageFileWriter::ToString() const this->ToStringHelper(out, this->m_UseCompression); out << std::endl; + out << " CompressionLevel: "; + this->ToStringHelper( out, this->m_CompressionLevel); + out << std::endl; + + out << " Compressor: "; + this->ToStringHelper( out, this->m_Compressor); + out << std::endl; + out << " KeepOriginalImageUID: "; this->ToStringHelper(out, this->m_KeepOriginalImageUID); out << std::endl; @@ -98,6 +107,33 @@ bool ImageFileWriter::GetUseCompression( void ) const return this->m_UseCompression; } +ImageFileWriter::Self & +ImageFileWriter::SetCompressionLevel(int CompressionLevel) +{ + this->m_CompressionLevel = CompressionLevel; + return *this; +} + +int +ImageFileWriter::GetCompressionLevel(void) const +{ + return m_CompressionLevel; +} + +ImageFileWriter::Self & +ImageFileWriter::SetCompressor(const std::string &Compressor) +{ + this->m_Compressor = Compressor; + return *this; +} + +std::string +ImageFileWriter::GetCompressor(void) +{ + return m_Compressor; +} + + ImageFileWriter::Self& ImageFileWriter::SetKeepOriginalImageUID( bool KeepOriginalImageUID ) { @@ -121,10 +157,11 @@ std::string ImageFileWriter::GetFileName() const return this->m_FileName; } -ImageFileWriter& ImageFileWriter::Execute ( const Image& image, const std::string &inFileName, bool useCompression ) +ImageFileWriter& ImageFileWriter::Execute ( const Image& image, const std::string &inFileName, bool useCompression, int compressionLevel ) { this->SetFileName( inFileName ); this->SetUseCompression( useCompression ); + this->SetCompressionLevel( compressionLevel ); return this->Execute( image ); } @@ -192,11 +229,17 @@ ImageFileWriter& ImageFileWriter::ExecuteInternal( const Image& inImage ) typedef itk::ImageFileWriter Writer; typename Writer::Pointer writer = Writer::New(); writer->SetUseCompression( this->m_UseCompression ); + writer->SetCompressionLevel( this->m_CompressionLevel ); writer->SetFileName ( this->m_FileName.c_str() ); writer->SetInput ( image ); itk::ImageIOBase::Pointer imageio = this->GetImageIOBase( this->m_FileName ); + if (this->m_Compressor != "") + { + imageio->SetCompressor(this->m_Compressor); + } + sitkDebugMacro( "ImageIO: " << imageio->GetNameOfClass() ); writer->SetImageIO( imageio ); From 8aee4108b51cfe0086f6f3cc47edcb812ae0d75d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 26 Nov 2019 15:23:54 -0500 Subject: [PATCH 250/400] Adding compression options support to ImageSeriesWriter --- Code/IO/include/sitkImageSeriesWriter.h | 35 +++++++++++++++-- Code/IO/src/sitkImageSeriesWriter.cxx | 52 +++++++++++++++++++++++-- 2 files changed, 80 insertions(+), 7 deletions(-) diff --git a/Code/IO/include/sitkImageSeriesWriter.h b/Code/IO/include/sitkImageSeriesWriter.h index 9e1ddc733..9ab2263db 100644 --- a/Code/IO/include/sitkImageSeriesWriter.h +++ b/Code/IO/include/sitkImageSeriesWriter.h @@ -95,6 +95,26 @@ class ImageIOBase; SITK_RETURN_SELF_TYPE_HEADER UseCompressionOff( void ) { return this->SetUseCompression(false); } /** @} */ + /** \brief A hint for the amount of compression to be applied during writing. + * + * After compression is enabled and if the itk::ImageIO support this option, then this value may be used. The range is + * dependent upon the compression algorithm used. It is generally 0-100 for JPEG like lossy compression and 0-9 + * for lossless zip or LZW like compression algorithms. Please see the specific itk::ImageIO for details. + * @{ */ + SITK_RETURN_SELF_TYPE_HEADER SetCompressionLevel(int); + int GetCompressionLevel(void) const; + /** @} */ + + /** \brief A compression algorithm hint + * + * The default is an empty string which enables the default compression of the ImageIO if compression is enabled. + * If the string identifier is not known a warning is produced and the default compressor is used. Please see the + * itk::ImageIO for details. + * @{ */ + SITK_RETURN_SELF_TYPE_HEADER SetCompressor(const std::string &); + std::string GetCompressor(void); + /** @} */ + /** The filenames to where the image slices are written. * * The number of filenames must match the number of slices in @@ -106,7 +126,7 @@ class ImageIOBase; SITK_RETURN_SELF_TYPE_HEADER Execute( const Image& ); - SITK_RETURN_SELF_TYPE_HEADER Execute( const Image &image, const std::vector &inFileNames, bool useCompression ); + SITK_RETURN_SELF_TYPE_HEADER Execute( const Image &image, const std::vector &inFileNames, bool useCompression, int compressionLevel ); protected: @@ -123,14 +143,21 @@ class ImageIOBase; friend struct detail::MemberFunctionAddressor; nsstd::auto_ptr > m_MemberFactory; - bool m_UseCompression; + bool m_UseCompression; + int m_CompressionLevel; + std::string m_Compressor; + std::vector m_FileNames; std::string m_ImageIOName; }; - SITKIO_EXPORT void WriteImage ( const Image & image, const std::vector &fileNames, bool useCompression=false ); - } + SITKIO_EXPORT void + WriteImage(const Image & image, + const std::vector & fileNames, + bool useCompression = false, + int compressionLevel = -1); + } } #endif diff --git a/Code/IO/src/sitkImageSeriesWriter.cxx b/Code/IO/src/sitkImageSeriesWriter.cxx index ad574e42f..3ed38e4ba 100644 --- a/Code/IO/src/sitkImageSeriesWriter.cxx +++ b/Code/IO/src/sitkImageSeriesWriter.cxx @@ -32,10 +32,10 @@ namespace itk { namespace simple { - void WriteImage ( const Image& inImage, const std::vector &filenames, bool useCompression ) + void WriteImage ( const Image& inImage, const std::vector &filenames, bool useCompression, int compressionLevel ) { ImageSeriesWriter writer; - writer.Execute( inImage, filenames, useCompression ); + writer.Execute( inImage, filenames, useCompression, compressionLevel ); } ImageSeriesWriter::~ImageSeriesWriter() @@ -46,6 +46,7 @@ namespace itk { { this->m_UseCompression = false; + this->m_CompressionLevel = -1; // list of pixel types supported typedef NonLabelPixelIDTypeList PixelIDTypeList; @@ -67,6 +68,14 @@ namespace itk { this->ToStringHelper(out, this->m_UseCompression); out << std::endl; + out << " CompressionLevel: "; + this->ToStringHelper( out, this->m_CompressionLevel); + out << std::endl; + + out << " Compressor: "; + this->ToStringHelper( out, this->m_Compressor); + out << std::endl; + out << " FileNames:" << std::endl; std::vector::const_iterator iter = m_FileNames.begin(); while( iter != m_FileNames.end() ) @@ -142,6 +151,32 @@ namespace itk { return this->m_UseCompression; } + ImageSeriesWriter::Self & + ImageSeriesWriter::SetCompressionLevel(int CompressionLevel) + { + this->m_CompressionLevel = CompressionLevel; + return *this; + } + + int + ImageSeriesWriter::GetCompressionLevel(void) const + { + return m_CompressionLevel; + } + + ImageSeriesWriter::Self & + ImageSeriesWriter::SetCompressor(const std::string &Compressor) + { + this->m_Compressor = Compressor; + return *this; + } + + std::string + ImageSeriesWriter::GetCompressor(void) + { + return m_Compressor; + } + ImageSeriesWriter& ImageSeriesWriter::SetFileNames ( const std::vector &filenames ) { @@ -155,10 +190,11 @@ namespace itk { } - ImageSeriesWriter& ImageSeriesWriter::Execute ( const Image& image, const std::vector &inFileNames, bool useCompression ) + ImageSeriesWriter& ImageSeriesWriter::Execute ( const Image& image, const std::vector &inFileNames, bool useCompression, int compressionLevel ) { this->SetFileNames( inFileNames ); this->SetUseCompression( useCompression ); + this->SetCompressionLevel( compressionLevel ); return this->Execute( image ); } @@ -211,6 +247,16 @@ namespace itk { itk::ImageIOBase::Pointer imageio = this->GetImageIOBase( this->m_FileNames[0] ); + if (this->m_Compressor != "") + { + imageio->SetCompressor(this->m_Compressor); + } + + if (this->m_CompressionLevel != -1) + { + imageio->SetCompressionLevel(this->m_CompressionLevel); + } + sitkDebugMacro( "ImageIO: " << imageio->GetNameOfClass() ); writer->SetImageIO( imageio ); From bdc014684af03f827613e92c2f723df2329d6cef Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 26 Nov 2019 15:24:19 -0500 Subject: [PATCH 251/400] Add testing for compression options --- Testing/Unit/sitkImageIOTests.cxx | 55 +++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/Testing/Unit/sitkImageIOTests.cxx b/Testing/Unit/sitkImageIOTests.cxx index 7fecf260e..aafc62702 100644 --- a/Testing/Unit/sitkImageIOTests.cxx +++ b/Testing/Unit/sitkImageIOTests.cxx @@ -199,6 +199,58 @@ TEST(IO,ImageFileWriter) { } +TEST(IO,ImageFileWriter_Compression) +{ + namespace sitk = itk::simple; + + sitk::Image generatedImage = sitk::Image(10, 10, sitk::sitkUInt8); + + generatedImage = sitk::AdditiveGaussianNoise(generatedImage, 32.0, 0.0, 99u); + const std::string expectedHash = sitk::Hash(generatedImage); + + std::string filename = dataFinder.GetOutputFile("IO.ImageFileWriter_Compression.nrrd"); + + sitk::ImageFileWriter writer; + + EXPECT_EQ(writer.GetCompressor(), ""); + EXPECT_EQ(writer.GetCompressionLevel(), -1); + + writer.UseCompressionOn(); + + writer.SetFileName(filename); + writer.SetCompressor("does_not_exist"); + writer.SetCompressionLevel(10); + EXPECT_NO_THROW(writer.Execute(generatedImage)); + EXPECT_EQ(expectedHash, sitk::Hash(sitk::ReadImage(filename))); + EXPECT_EQ("does_not_exist", writer.GetCompressor()); + EXPECT_EQ(10, writer.GetCompressionLevel()); + + writer.SetCompressor("gzip"); + writer.SetCompressionLevel(9); + EXPECT_NO_THROW(writer.Execute(generatedImage)); + EXPECT_EQ(expectedHash, sitk::Hash(sitk::ReadImage(filename))); + + writer.SetCompressor("gzip"); + writer.SetCompressionLevel(1); + EXPECT_NO_THROW(writer.Execute(generatedImage)); + EXPECT_EQ(expectedHash, sitk::Hash(sitk::ReadImage(filename))); + + filename = dataFinder.GetOutputFile("IO.ImageFileWriter_Compression.tiff"); + + writer.SetFileName(filename); + + writer.SetCompressor("JPEG"); + writer.SetCompressionLevel(50); + EXPECT_NO_THROW(writer.Execute(generatedImage)); + // No hash comparison due to lossy compression + // EXPECT_EQ(expectedHash, sitk::Hash(sitk::ReadImage(filename))); + + writer.SetCompressor("packbits"); + writer.SetCompressionLevel(1); + EXPECT_NO_THROW(writer.Execute(generatedImage)); + EXPECT_EQ(expectedHash, sitk::Hash(sitk::ReadImage(filename))); +} + TEST(IO,ReadWrite) { namespace sitk = itk::simple; sitk::HashImageFilter hasher; @@ -455,6 +507,9 @@ TEST(IO, ImageSeriesWriter ) writer.UseCompressionOff(); EXPECT_FALSE(writer.GetUseCompression()); + EXPECT_EQ(writer.GetCompressor(), ""); + EXPECT_EQ(writer.GetCompressionLevel(), -1); + EXPECT_NO_THROW ( writer.ToString() ); From 8edb6c99df6a5bf8c73b3ed2a2a2202a4c6b21e8 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 1 Aug 2019 13:18:31 -0400 Subject: [PATCH 252/400] Add to batch build different MSVC toolsets --- Testing/CI/Azure/azure-pipelines-batch.yml | 37 ++++++++++++++++++---- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index 1d78a39a1..14c6f27d0 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -6,11 +6,39 @@ variables: ctest.cache_extra: '' pr: none jobs: - - job: VS2019 + - job: VisualStudio timeoutInMinutes: 0 cancelTimeoutInMinutes: 300 + strategy: + maxParallel: 1 + matrix: + v141-64: + CTEST_CMAKE_GENERATOR_TOOLSET: v141 + CTEST_CMAKE_GENERATOR_PLATFORM: x64 + CTEST_CONFIGURATION_TYPE: Release + CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017" + imageName: 'vs2017-win2016' + v142-64: + CTEST_CMAKE_GENERATOR_TOOLSET: v142 + CTEST_CMAKE_GENERATOR_PLATFORM: x64 + CTEST_CONFIGURATION_TYPE: Release + CTEST_CMAKE_GENERATOR: "Visual Studio 16 2019" + imageName: 'windows-2019' + v140-64: + CTEST_CMAKE_GENERATOR_TOOLSET: v140 + CTEST_CMAKE_GENERATOR_PLATFORM: x64 + CTEST_CONFIGURATION_TYPE: MinSizeRel + CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017" + imageName: 'vs2017-win2016' + v140-32: + CTEST_CMAKE_GENERATOR_TOOLSET: v140 + CTEST_CMAKE_GENERATOR_PLATFORM: Win32 + CTEST_CONFIGURATION_TYPE: MinSizeRel + CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017" + imageName: 'vs2017-win2016' + pool: - vmImage: 'windows-2019' + vmImage: $(imageName) steps: - template: templates/git-download-steps.yml @@ -20,10 +48,7 @@ jobs: displayName: Build and test workingDirectory: $(Agent.BuildDirectory) env: - CTEST_CONFIGURATION_TYPE: MinSizeRel - CTEST_CMAKE_GENERATOR: "Visual Studio 16 2019" DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 CXXFLAGS: /MP CFLAGS: /MP @@ -31,7 +56,7 @@ jobs: timeoutInMinutes: 0 cancelTimeoutInMinutes: 300 strategy: - maxParallel: 2 + maxParallel: 1 matrix: XCode_11: imageName: 'macos-10.14' From e7ad4cb7b090a578fc386a57aa70b6485610f81a Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 29 Nov 2019 09:39:29 -0500 Subject: [PATCH 253/400] Update along ITK superbuild build version along 5.1 development --- SuperBuild/External_ITK.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index 911886ece..f33225ff7 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,7 +52,7 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(_DEFAULT_ITK_GIT_TAG "v5.1b01") +set(_DEFAULT_ITK_GIT_TAG "9c5a74d213130f9e1f7bedb9ea34b4a5ae1f642e") set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From ecd4b51f9741f1e47a50b36ace0b6e708cd1c7b1 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 29 Nov 2019 09:46:11 -0500 Subject: [PATCH 254/400] Update label shape statistics oriented bound box base line This order of the vertices has been corrected in ITK. See commit ITK commit: 50c695540aae006a71ab94f0970ac827e7dad28c for details. --- Testing/Unit/sitkLabelStatisticsTest.cxx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Testing/Unit/sitkLabelStatisticsTest.cxx b/Testing/Unit/sitkLabelStatisticsTest.cxx index 5b0e04e68..46f09722d 100644 --- a/Testing/Unit/sitkLabelStatisticsTest.cxx +++ b/Testing/Unit/sitkLabelStatisticsTest.cxx @@ -194,12 +194,12 @@ TEST(LabelStatistics,Shape_OBB) { EXPECT_VECTOR_DOUBLE_NEAR( v4(0.713199, -0.700961, 0.700961, 0.713199), lssFilter.GetOrientedBoundingBoxDirection(100), 1e-6 ); std::vector verticesExpected = v9( -86.190355427717947, 83.719933383265925, - -86.190355427717947, - 377.31123819498737, - 140.63830354316519, - 83.719933383265925, - 140.63830354316519, - 377.31123819498737, + 119.60574447063291, + 293.10909147813277, + 75.583720150438126, + -75.278145225760852, + 281.37982004878904, + 134.11101286910596, 0.0); verticesExpected.pop_back(); EXPECT_VECTOR_DOUBLE_NEAR( verticesExpected, lssFilter.GetOrientedBoundingBoxVertices(100), 1e-4); From 72982d190026bfd4b3056e7d874ce757be024359 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 29 Nov 2019 13:54:17 -0500 Subject: [PATCH 255/400] Change number of expected tags in DICOM file Two new MetaDataDictionary tags have been added to all files when read. They are ITK_original_direction and ITK_original_spacing. --- Testing/Unit/sitkImageIOTests.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Testing/Unit/sitkImageIOTests.cxx b/Testing/Unit/sitkImageIOTests.cxx index aafc62702..89e6f6738 100644 --- a/Testing/Unit/sitkImageIOTests.cxx +++ b/Testing/Unit/sitkImageIOTests.cxx @@ -481,7 +481,7 @@ TEST(IO, DicomSeriesReader) { for (unsigned int i = 0; i < image.GetSize()[2]; ++i) { std::vector keys = reader.GetMetaDataKeys(0); - EXPECT_EQ( 93u, keys.size() ); + EXPECT_EQ( 95u, keys.size() ); for(unsigned int j = 0; j < keys.size(); ++j ) { From 5e1d56a366baa6ad26d0d6a46d318f0834c38e2d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 2 Dec 2019 12:55:20 -0500 Subject: [PATCH 256/400] Update IOTest.py to detect main execution This enables unittest discover to import the script without executing it. --- Testing/Unit/Python/IOTest.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Testing/Unit/Python/IOTest.py b/Testing/Unit/Python/IOTest.py index a0b387895..8b2232cff 100644 --- a/Testing/Unit/Python/IOTest.py +++ b/Testing/Unit/Python/IOTest.py @@ -22,15 +22,17 @@ # this test is suppose to test the python interface to the IO classes -if len ( sys.argv ) != 2: - print( "Usage: %s outputPath" % ( sys.argv[0] ) ) +if __name__ == '__main__': -outputPath = sys.argv[1] + if len ( sys.argv ) != 2: + print( "Usage: %s outputPath" % ( sys.argv[0] ) ) -image = sitk.Image( 10, 10, sitk.sitkInt32 ) + outputPath = sys.argv[1] + image = sitk.Image( 10, 10, sitk.sitkInt32 ) -try: - sitk.WriteImage( image, "this.isafilenamewithnoimageio" ) -except RuntimeError as e: - print( "Caught expected error" ) + + try: + sitk.WriteImage( image, "this.isafilenamewithnoimageio" ) + except RuntimeError as e: + print( "Caught expected error" ) From 7bbfbb5320744b2cf52621719e46a289a2b6346d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 29 Nov 2019 15:04:37 -0500 Subject: [PATCH 257/400] Enable BSplineTransform to take const vector of images The Python bindings require a const vector<> & to be able to implicitly convert from tuple or lists of images to the SWIG ImageOfVector type. --- Code/Common/include/sitkBSplineTransform.h | 4 ++-- Code/Common/src/sitkBSplineTransform.cxx | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Code/Common/include/sitkBSplineTransform.h b/Code/Common/include/sitkBSplineTransform.h index a8d69d0fb..a90d45b25 100644 --- a/Code/Common/include/sitkBSplineTransform.h +++ b/Code/Common/include/sitkBSplineTransform.h @@ -52,7 +52,7 @@ class SITKCommon_EXPORT BSplineTransform * transform domain. The transform domain is reduced by the spline * order. */ - explicit BSplineTransform( std::vector &coefficientImages, unsigned int order=3 ); + explicit BSplineTransform( const std::vector &coefficientImages, unsigned int order=3 ); BSplineTransform( const BSplineTransform & ); @@ -133,7 +133,7 @@ class SITKCommon_EXPORT BSplineTransform nsstd::function ()> m_pfGetCoefficientImages; nsstd::function< unsigned int()> m_pfGetOrder; - nsstd::function &)> m_pfSetCoefficientImages; + nsstd::function &)> m_pfSetCoefficientImages; }; diff --git a/Code/Common/src/sitkBSplineTransform.cxx b/Code/Common/src/sitkBSplineTransform.cxx index c9262b72d..1523b6d31 100644 --- a/Code/Common/src/sitkBSplineTransform.cxx +++ b/Code/Common/src/sitkBSplineTransform.cxx @@ -49,7 +49,7 @@ unsigned int sitkGetOrder(void) template -void SetCoefficientImages(TBSplineTransform* bspline, std::vector coefficientImages) +void SetCoefficientImages(TBSplineTransform* bspline, const std::vector &coefficientImages) { unsigned char numberOfDimensions = TBSplineTransform::SpaceDimension; @@ -63,7 +63,7 @@ void SetCoefficientImages(TBSplineTransform* bspline, std::vector coeffic for (unsigned int i = 0; i < numberOfDimensions; ++i) { - Image &sitkImage = coefficientImages[i]; + const Image &sitkImage = coefficientImages[i]; if (sitkImage.GetPixelID() != sitkFloat64) { @@ -84,7 +84,7 @@ void SetCoefficientImages(TBSplineTransform* bspline, std::vector coeffic typedef typename TBSplineTransform::ImageType itkImageType; - itkImageType * itkImage = dynamic_cast (sitkImage.GetITKBase()); + const itkImageType * itkImage = dynamic_cast (sitkImage.GetITKBase()); if ( itkImage == SITK_NULLPTR ) { @@ -92,7 +92,7 @@ void SetCoefficientImages(TBSplineTransform* bspline, std::vector coeffic } // The images are deep copied inside the BSpline transform, so no // additional copying is needed. - itkImages[i] = itkImage; + itkImages[i] = const_cast(itkImage); } bspline->SetCoefficientImages(itkImages); @@ -113,7 +113,7 @@ BSplineTransform::BSplineTransform(unsigned int dimensions, unsigned int order) } -BSplineTransform::BSplineTransform(std::vector &coefficientImages, unsigned int order) +BSplineTransform::BSplineTransform(const std::vector &coefficientImages, unsigned int order) : Transform( CreateBSplinePimpleTransform(coefficientImages.size(), order) ) { Self::InternalInitialization(Self::GetITKBase()); From d601dc88cf897b7850c776f0d0a07c041deffd17 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 29 Nov 2019 15:27:33 -0500 Subject: [PATCH 258/400] Add pickling support for transform classes --- Wrapping/Python/Python.i | 47 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/Wrapping/Python/Python.i b/Wrapping/Python/Python.i index ccbf852a1..6c633e4e8 100644 --- a/Wrapping/Python/Python.i +++ b/Wrapping/Python/Python.i @@ -653,6 +653,53 @@ } + +%extend itk::simple::Transform { + %pythoncode %{ + + def __copy__(self): + """Create a SimpleITK shallow copy, where the internal transform is shared with a copy on write implementation.""" + return self.__class__(self) + + def __deepcopy__(self, memo): + """Create a new copy of the data and internal ITK Transform object.""" + dc = self.__class__(self) + dc.MakeUnique() + return dc + + def __setstate__(self, args): + if args[0] != 0: + raise ValueError("Unable to handle SimpleITK.Transform pickle version {0}".args[0]) + + if len(args) == 1: + return + + state = namedtuple('state_tuple_0', "version fixed_parameters parameters")(*args) + + self.SetFixedParameters(state.fixed_parameters) + self.SetParameters(state.parameters) + + + def __reduce_ex__(self, protocol ): + version = 0 + + if self.__class__ is DisplacementFieldTransform: + args = (self.GetDisplacementField(), ) + S = (version, ) + if self.__class__ is BSplineTransform: + args = (tuple(self.GetCoefficientImages()), self.GetOrder()) + S = (version, ) + else: + args = (self.GetDimension(),) + S = (version, self.GetFixedParameters(), self.GetParameters()) + + return self.__class__, args, S + + %} + +}; + + // This is included inline because SwigMethods (SimpleITKPYTHON_wrap.cxx) // is declared static. %{ From 462fedccca1a66157ed38fb8ae7e14fd5e32e693 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 29 Nov 2019 15:59:25 -0500 Subject: [PATCH 259/400] Adding test for pickling transforms --- Testing/Unit/Python/CMakeLists.txt | 3 + Testing/Unit/Python/sitkTransformTests.py | 192 ++++++++++++++++++++++ 2 files changed, 195 insertions(+) create mode 100644 Testing/Unit/Python/sitkTransformTests.py diff --git a/Testing/Unit/Python/CMakeLists.txt b/Testing/Unit/Python/CMakeLists.txt index 989f23971..7b9cdae8e 100644 --- a/Testing/Unit/Python/CMakeLists.txt +++ b/Testing/Unit/Python/CMakeLists.txt @@ -5,6 +5,9 @@ sitk_add_python_test( Test.ImageTests "${CMAKE_CURRENT_SOURCE_DIR}/sitkImageTests.py" ) +sitk_add_python_test( Test.TransformTests + "${CMAKE_CURRENT_SOURCE_DIR}/sitkTransformTests.py" ) + sitk_add_python_test( Test.ImageIndexing "${CMAKE_CURRENT_SOURCE_DIR}/sitkImageIndexingTest.py" ) diff --git a/Testing/Unit/Python/sitkTransformTests.py b/Testing/Unit/Python/sitkTransformTests.py new file mode 100644 index 000000000..942fa5c44 --- /dev/null +++ b/Testing/Unit/Python/sitkTransformTests.py @@ -0,0 +1,192 @@ +#========================================================================== +# +# Copyright Insight Software Consortium +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#==========================================================================*/ + +from __future__ import print_function +import unittest +import tempfile +import os.path +import shutil + +import SimpleITK as sitk +try: + import pickle5 as pickle +except ImportError: + import pickle + + +class TransformTests(unittest.TestCase): + """Tests for the Python interface for Transform classes""" + + def setUp(self): + super(TransformTests, self).setUp() + + # Register a "assertEqual" function for all transform types, there appears no way to support subclasses + transform_type_list = [sitk.AffineTransform, + sitk.BSplineTransform, + sitk.DisplacementFieldTransform, + sitk.Euler2DTransform, + sitk.Euler3DTransform, + sitk.ScaleSkewVersor3DTransform, + sitk.ScaleTransform, + sitk.ScaleVersor3DTransform, + sitk.Similarity2DTransform, + sitk.Similarity3DTransform, + sitk.Transform, + sitk.TranslationTransform, + sitk.VersorRigid3DTransform, + sitk.VersorTransform] + + for transform_type in transform_type_list: + self.addTypeEqualityFunc(transform_type, self.assertTransformEqual) + + # Create a temporary directory for output files + self.test_dir = tempfile.mkdtemp() + + def tearDown(self): + + # Delete the create temporary directory and files with in. Perhaps if tests fail then the output should stick + # around to debug the problem + shutil.rmtree(self.test_dir) + + def assertTransformEqual(self, tx1, tx2, msg=None): + """Utility to compare 2 transforms""" + + self.assertEqual(tx1.__class__, tx2.__class__) + self.assertEqual(tx1.GetDimension(), tx2.GetDimension()) + self.assertEqual(tx1.GetFixedParameters(), tx2.GetFixedParameters()) + self.assertEqual(tx1.GetParameters(), tx2.GetParameters()) + + def test_bspline_constructor(self): + + img1 = sitk.Image([10, 10], sitk.sitkFloat64) + img1 += -.1 + + img2 = sitk.Image([10, 10], sitk.sitkFloat64) + img2 -= 0.1 + + tx = sitk.BSplineTransform([img1, img2], 2) + self.assertEqual(tx.GetOrder(), 2) + + def test_bspline_pickle(self): + + M = [0, 1, + 1, 0] + + img1 = sitk.Image([10, 10], sitk.sitkFloat64) + img1.SetOrigin((.01, 5.2)) + img1.SetDirection(M) + img1 += -.1 + + img2 = sitk.Image([10, 10], sitk.sitkFloat64) + img2.SetOrigin([.01, 5.2]) + img2.SetDirection(M) + img2 -= 0.1 + + tx = sitk.BSplineTransform([img1, img2], 3) + dump = pickle.dumps(tx) + tx2 = pickle.loads(dump) + + self.assertEqual(tx, tx2) + + def test_bspline_pickle_file(self): + """Test the custom pickling and un-pickling interface""" + + import copy + + M = [0, 1, + 1, 0] + + img1 = sitk.Image([10, 10], sitk.sitkFloat64) + img1.SetOrigin((.01, 5.2)) + img1.SetDirection(M) + img1 = sitk.AdditiveGaussianNoise(img1) + + img2 = sitk.Image([10, 10], sitk.sitkFloat64) + img2.SetOrigin((.01, 5.2)) + img2.SetDirection(M) + img2 = sitk.AdditiveGaussianNoise(img2) + + tx = sitk.BSplineTransform([img1, img2], 3) + + fname = os.path.join(self.test_dir, "bspline_protocol_default.pickle") + with open(fname, 'wb') as fp: + p = pickle.dump(copy.deepcopy(tx), fp) + + with open(fname, 'rb') as fp: + ret = pickle.load(fp) + + self.assertEqual(ret, ret, msg="pickle file with default protocol") + + + def test_displacement_pickle(self): + + displacement = sitk.Image((512, 512), sitk.sitkVectorFloat64, 2) + displacement.SetOrigin((6, 5.2)) + + tx = sitk.DisplacementFieldTransform(displacement) + dump = pickle.dumps(tx) + tx2 = pickle.loads(dump) + + self.assertEqual(tx, tx2) + + def test_affine_pickle(self): + tx = sitk.AffineTransform(3) + + tx.SetCenter([2.3, 4.5, 6.7]) + tx.SetMatrix([9, 8, 7, 6, 5, 4, 3, 2, 1]) + + dump = pickle.dumps(tx) + tx2 = pickle.loads(dump) + + self.assertEqual(tx, tx2) + + def test_translation_pickle(self): + tx = sitk.TranslationTransform(2) + tx.SetOffset([1.23456, 9876.54321]) + + dump = pickle.dumps(tx) + tx2 = pickle.loads(dump) + + self.assertEqual(tx, tx2) + + def test_deepcopy(self): + """Test the custom __deepcopy__ method""" + + import copy + + tx = sitk.AffineTransform(2) + + tx.SetMatrix([.6, -.5, -.2, .8]) + + tx_dc = copy.deepcopy(tx) + + self.assertEqual(tx, tx_dc) + + tx_dc.SetCenter([7, 8]) + self.assertNotEqual(tx.GetCenter(), tx_dc.GetCenter()) + + tx_c = copy.copy(tx) + + self.assertEqual(tx, tx_c) + + tx_c.SetCenter([9, 10]) + self.assertNotEqual(tx.GetCenter(), tx_c.GetCenter()) + + +if __name__ == '__main__': + unittest.main() From 29d4a55f14c285e56d14ea4ae44a37955f06c53b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 2 Dec 2019 17:26:23 -0500 Subject: [PATCH 260/400] Use temporary directory for test output --- Testing/Unit/Python/ConcurrentImageRead.py | 24 +++++++++------- Testing/Unit/Python/ImageReadWriteInt64.py | 32 +++++++++++++++++----- Testing/Unit/Python/sitkTransformTests.py | 2 +- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/Testing/Unit/Python/ConcurrentImageRead.py b/Testing/Unit/Python/ConcurrentImageRead.py index 4435e0dc6..0ae57f03c 100644 --- a/Testing/Unit/Python/ConcurrentImageRead.py +++ b/Testing/Unit/Python/ConcurrentImageRead.py @@ -19,6 +19,8 @@ import sys import os import unittest +import tempfile +import shutil import SimpleITK as sitk @@ -28,10 +30,16 @@ class ConcurrentImageRead(unittest.TestCase): """Testing thread concurrent reading of Images""" - temp_directory = "" - def setUp(self): - pass + + # Create a temporary directory for output files + self.test_dir = tempfile.mkdtemp() + + def tearDown(self): + + # Delete the temporary directory and files contained within. Perhaps if tests fail then the output should stick + # around to debug the problem + shutil.rmtree(self.test_dir) def _create_data(self, img_extension, img_type): """Method to create the many temporary image for reading""" @@ -44,8 +52,7 @@ def _create_data(self, img_extension, img_type): for i in range(0,n): img = sitk.GaussianSource(t, [s,s], mean=[256*(i+1)]*2) fname = "g_{0}.{1}".format(i, img_extension) - if ConcurrentImageRead.temp_directory: - fname = os.path.join(ConcurrentImageRead.temp_directory, fname) + fname = os.path.join(self.test_dir, fname) files.append(fname) sitk.WriteImage(img, files[-1]) @@ -62,12 +69,12 @@ def _threaded_read_test(self, files, expected_hash): def generate_test(img_extension, expected_hash, img_type=sitk.sitkUInt32): """Generate additional test by adding a generated member function """ def do_test(self): - files = self._create_data(img_extension,img_type) + files = self._create_data(img_extension, img_type) files *= 64 self._threaded_read_test(files, expected_hash) test_method = do_test - test_method.__name__ = "test_threaded_read_{0}".format(p_ext_hash[0]); + test_method.__name__ = "test_threaded_read_{0}".format(p_ext_hash[0]) setattr(ConcurrentImageRead, test_method.__name__, test_method) @@ -80,7 +87,4 @@ def do_test(self): if __name__ == '__main__': - # hacky to get a temporary directory - if len(sys.argv) > 1: - ConcurrentImageRead.temp_directory = sys.argv.pop() unittest.main() diff --git a/Testing/Unit/Python/ImageReadWriteInt64.py b/Testing/Unit/Python/ImageReadWriteInt64.py index 6f384df3e..3ea3e164d 100644 --- a/Testing/Unit/Python/ImageReadWriteInt64.py +++ b/Testing/Unit/Python/ImageReadWriteInt64.py @@ -19,6 +19,8 @@ import sys import os import unittest +import tempfile +import shutil import SimpleITK as sitk @@ -27,7 +29,27 @@ class ImageReadWriteInt64(unittest.TestCase): """Test reading and writing to 64 bit integers""" - temp_directory = "" + def setUp(self): + + # Create a temporary directory for output files + self.test_dir = tempfile.mkdtemp() + + def tearDown(self): + + # Delete the temporary directory and files contained within. Perhaps if tests fail then the output should stick + # around to debug the problem + shutil.rmtree(self.test_dir) + + def setUp(self): + + # Create a temporary directory for output files + self.test_dir = tempfile.mkdtemp() + + def tearDown(self): + + # Delete the create temporary directory and files with in. Perhaps if tests fail then the output should stick + # around to debug the problem + shutil.rmtree(self.test_dir) def _create_img(self, img_type): """Method to create an image""" @@ -60,13 +82,12 @@ def generate_test(img_extension, img_type=sitk.sitkInt64): """Generate additional test by adding a generated member function """ def do_test(self): fname = "test64.{0}".format(img_extension) - if ImageReadWriteInt64.temp_directory: - fname = os.path.join(ImageReadWriteInt64.temp_directory, fname) + fname = os.path.join(self.test_dir, fname) img = self._create_img(img_type) self._read_write_test(img, fname) test_method = do_test - test_method.__name__ = "test_read_write_int64{0}{1}".format(img_extension,int(img_type)); + test_method.__name__ = "test_read_write_int64{0}{1}".format(img_extension,int(img_type)) setattr(ImageReadWriteInt64, test_method.__name__, test_method) @@ -81,7 +102,4 @@ def do_test(self): if __name__ == '__main__': - # hacky to get a temporary directory - if len(sys.argv) > 1: - ImageReadWriteInt64.temp_directory = sys.argv.pop() unittest.main() diff --git a/Testing/Unit/Python/sitkTransformTests.py b/Testing/Unit/Python/sitkTransformTests.py index 942fa5c44..f03f5dbee 100644 --- a/Testing/Unit/Python/sitkTransformTests.py +++ b/Testing/Unit/Python/sitkTransformTests.py @@ -59,7 +59,7 @@ def setUp(self): def tearDown(self): - # Delete the create temporary directory and files with in. Perhaps if tests fail then the output should stick + # Delete the temporary directory and files contained within. Perhaps if tests fail then the output should stick # around to debug the problem shutil.rmtree(self.test_dir) From f7f247236de29e6dfed0735dc23c05d142d99a4f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 3 Dec 2019 13:20:58 -0500 Subject: [PATCH 261/400] Use Default pool for Linux builds for CI Remove the system installed packages. Install Python packages into a custom user site path. --- Testing/CI/Azure/azure-pipelines.yml | 34 ++++++++++------------------ 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index ab22d3b2a..8834d318c 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -12,32 +12,22 @@ jobs: timeoutInMinutes: 0 cancelTimeoutInMinutes: 300 pool: - vmImage: 'Ubuntu-16.04' - + name: 'Default' + demands: + - Agent.OS -equals Linux + variables: + PYTHONUSERBASE: $(Agent.BuildDirectory)/.pypkgs + workspace: + clean: all steps: - template: templates/git-download-steps.yml - - bash: | - set -x - sudo apt-get update - sudo apt-get -y install software-properties-common libcurl4-openssl-dev libssh2-1-dev - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 - sudo add-apt-repository -y "deb https://cloud.r-project.org/bin/linux/ubuntu xenial/" - sudo apt-get update - sudo apt-get -y install r-base-dev - R --version - displayName: System Dependencies - workingDirectory: $(Agent.BuildDirectory) - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.6' - architecture: 'x64' - addToPath: true - script: | + mkdir -p ${PYTHONUSERBASE} python --version - python -m pip install --upgrade pip - python -m pip install setuptools - python -m pip install numpy ninja scikit-ci-addons + python -m site --user-site + python -m pip install --upgrade --user pip + python -m pip install --user setuptools + python -m pip install --user numpy scikit-ci-addons displayName: 'Install python tools and dependency' - bash: | set -x From 3bac80e4b740c2c4b7b83625e453e5864b1daa38 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 3 Dec 2019 16:39:31 -0500 Subject: [PATCH 262/400] AZP CI manually set the MSVC tool preference to 64 bits --- Testing/CI/Azure/azure-pipelines.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index ab22d3b2a..91165c600 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -159,12 +159,13 @@ jobs: CXXFLAGS: /MP CFLAGS: /MP CTEST_CACHE: | + CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE=x64 BUILD_DOCUMENTS:BOOL=OFF BUILD_EXAMPLES:BOOL=ON BUILD_SHARED_LIBS:BOOL=OFF BUILD_TESTING:BOOL=ON WRAP_DEFAULT:BOOL=OFF - WRAP_CSHARP:BOOL=ON + WRAP_CSHARP:BOOL=OFF WRAP_PYTHON:BOOL=ON workingDirectory: $(Agent.BuildDirectory) - script: | From b801da5ea8000e7f4e421cd5b40484007cc3f15f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 3 Dec 2019 16:57:07 -0500 Subject: [PATCH 263/400] AZP CI disable R on the linux build This is a temporary change to avoid an "error" in the R build process related to "R.css" missing. --- Testing/CI/Azure/azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 8834d318c..09f10e5dc 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -47,7 +47,7 @@ jobs: BUILD_SHARED_LIBS:BOOL=OFF BUILD_TESTING:BOOL=ON WRAP_DEFAULT:BOOL=OFF - WRAP_R:BOOL=ON + WRAP_R:BOOL=OFF WRAP_PYTHON:BOOL=ON workingDirectory: $(Agent.BuildDirectory) - script: | From 959c69c382fc3f478024976f14448e8e28199ddf Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 3 Dec 2019 19:29:24 -0500 Subject: [PATCH 264/400] Propagate cmake vs platform related cmake variables to sub-projects --- SuperBuild/SuperBuild.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SuperBuild/SuperBuild.cmake b/SuperBuild/SuperBuild.cmake index caef71a56..9274d5eee 100644 --- a/SuperBuild/SuperBuild.cmake +++ b/SuperBuild/SuperBuild.cmake @@ -267,6 +267,9 @@ list( APPEND ep_common_list CMAKE_GENERATOR_INSTANCE CMAKE_GENERATOR_PLATFORM CMAKE_GENERATOR_TOOLSET + CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE + CMAKE_VS_PLATFORM_TOOLSET_VERSION + CMAKE_VS_PLATFORM_TOOLSET CMAKE_EXTRA_GENERATOR MEMORYCHECK_COMMAND_OPTIONS MEMORYCHECK_SUPPRESSIONS_FILE From 65befede43647798e753dbfbb375c6006d7e97a5 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 4 Dec 2019 10:08:00 -0500 Subject: [PATCH 265/400] Use python executable to invoke ci_addons module --- Testing/CI/Azure/azure-pipelines.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 09f10e5dc..01cd29cfc 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -51,7 +51,7 @@ jobs: WRAP_PYTHON:BOOL=ON workingDirectory: $(Agent.BuildDirectory) - script: | - ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + python -m ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml condition: succeededOrFailed() displayName: 'Format CTest output in JUnit format' - task: PublishTestResults@2 @@ -108,7 +108,7 @@ jobs: WRAP_JAVA:BOOL=ON workingDirectory: $(Agent.BuildDirectory) - script: | - ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + python -m ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml condition: succeededOrFailed() displayName: 'Format CTest output in JUnit format' - task: PublishTestResults@2 @@ -158,7 +158,7 @@ jobs: WRAP_PYTHON:BOOL=ON workingDirectory: $(Agent.BuildDirectory) - script: | - ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml + python -m ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml condition: succeededOrFailed() displayName: 'Format CTest output in JUnit format' - task: PublishTestResults@2 From 2bcf8dc25c0dfac75c7dc2d51302bd0ab6dfa8e8 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 4 Dec 2019 10:28:24 -0500 Subject: [PATCH 266/400] Specify host tool set in CTEST_CMAKE_GENERATOR_TOOLSET --- Testing/CI/Azure/azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 91165c600..7823247c7 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -154,12 +154,12 @@ jobs: CTEST_CONFIGURATION_TYPE: MinSizeRel CTEST_OUTPUT_ON_FAILURE: 1 CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017 Win64" + CTEST_CMAKE_GENERATOR_TOOLSET: v141,host=x64 DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 CXXFLAGS: /MP CFLAGS: /MP CTEST_CACHE: | - CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE=x64 BUILD_DOCUMENTS:BOOL=OFF BUILD_EXAMPLES:BOOL=ON BUILD_SHARED_LIBS:BOOL=OFF From 926d6398bfc60b2617792f4a50f2d477dac901ce Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 9 Dec 2019 09:55:29 -0500 Subject: [PATCH 267/400] Update ITK superbuild version to 5.1rc01 --- SuperBuild/External_ITK.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index f33225ff7..22bc1124e 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,7 +52,7 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(_DEFAULT_ITK_GIT_TAG "9c5a74d213130f9e1f7bedb9ea34b4a5ae1f642e") +set(_DEFAULT_ITK_GIT_TAG "v5.1rc01") set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From c575a688543e95f5f0a4b1fb96adef0e0944c2c2 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 9 Dec 2019 12:00:19 -0500 Subject: [PATCH 268/400] Change ITK enums type The ITK types used for enums have been changes in a non-compatible manner: commit 33daf9494eb93940c4646f9e9a83e8e24a9bf376 Author: Matt McCormick Date: Thu Dec 5 13:16:17 2019 -0500 --- ...oherenceEnhancingDiffusionImageFilter.json | 2 +- .../json/ConvolutionImageFilter.json | 2 +- .../json/FFTConvolutionImageFilter.json | 2 +- .../json/InverseDeconvolutionImageFilter.json | 2 +- .../LandweberDeconvolutionImageFilter.json | 2 +- ...ctedLandweberDeconvolutionImageFilter.json | 2 +- ...ichardsonLucyDeconvolutionImageFilter.json | 2 +- .../TikhonovDeconvolutionImageFilter.json | 2 +- .../json/WienerDeconvolutionImageFilter.json | 2 +- ...andmarkBasedTransformInitializerFilter.cxx | 4 ++-- Code/Common/src/sitkPimpleTransform.hxx | 4 ++-- Code/IO/src/sitkImageFileWriter.cxx | 2 +- Code/IO/src/sitkImageReaderBase.cxx | 2 +- Code/IO/src/sitkImageSeriesWriter.cxx | 2 +- Testing/Unit/sitkBasicFiltersTests.cxx | 24 +++++++++---------- 15 files changed, 28 insertions(+), 28 deletions(-) diff --git a/Code/BasicFilters/json/CoherenceEnhancingDiffusionImageFilter.json b/Code/BasicFilters/json/CoherenceEnhancingDiffusionImageFilter.json index 008549d42..2d7f5c9fe 100644 --- a/Code/BasicFilters/json/CoherenceEnhancingDiffusionImageFilter.json +++ b/Code/BasicFilters/json/CoherenceEnhancingDiffusionImageFilter.json @@ -31,7 +31,7 @@ "Isotropic" ], "default" : "itk::simple::CoherenceEnhancingDiffusionImageFilter::CED", - "itk_type" : "typename FilterType::EnhancementType", + "itk_type" : "typename FilterType::EnhancementEnum", "briefdescriptionSet" : "Switch between CED, EED, and variants.", "detaileddescriptionSet" : "", "briefdescriptionGet" : "", diff --git a/Code/BasicFilters/json/ConvolutionImageFilter.json b/Code/BasicFilters/json/ConvolutionImageFilter.json index 3fa1a254d..acc6e0001 100644 --- a/Code/BasicFilters/json/ConvolutionImageFilter.json +++ b/Code/BasicFilters/json/ConvolutionImageFilter.json @@ -48,7 +48,7 @@ "VALID" ], "default" : "itk::simple::ConvolutionImageFilter::SAME", - "custom_itk_cast" : "filter->SetOutputRegionMode( typename FilterType::OutputRegionModeType( int( this->m_OutputRegionMode ) ) );" + "custom_itk_cast" : "filter->SetOutputRegionMode( typename FilterType::OutputRegionModeEnum( int( this->m_OutputRegionMode ) ) );" } ], "tests" : [ diff --git a/Code/BasicFilters/json/FFTConvolutionImageFilter.json b/Code/BasicFilters/json/FFTConvolutionImageFilter.json index 2bad2874a..129323470 100644 --- a/Code/BasicFilters/json/FFTConvolutionImageFilter.json +++ b/Code/BasicFilters/json/FFTConvolutionImageFilter.json @@ -48,7 +48,7 @@ "VALID" ], "default" : "itk::simple::FFTConvolutionImageFilter::SAME", - "itk_type" : "typename FilterType::OutputRegionModeType" + "itk_type" : "typename FilterType::OutputRegionModeEnum" } ], "tests" : [ diff --git a/Code/BasicFilters/json/InverseDeconvolutionImageFilter.json b/Code/BasicFilters/json/InverseDeconvolutionImageFilter.json index a18ef8889..af6799c22 100644 --- a/Code/BasicFilters/json/InverseDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/InverseDeconvolutionImageFilter.json @@ -46,7 +46,7 @@ "VALID" ], "default" : "itk::simple::InverseDeconvolutionImageFilter::SAME", - "itk_type" : "typename FilterType::OutputRegionModeType" + "itk_type" : "typename FilterType::OutputRegionModeEnum" } ], "tests" : [ diff --git a/Code/BasicFilters/json/LandweberDeconvolutionImageFilter.json b/Code/BasicFilters/json/LandweberDeconvolutionImageFilter.json index 6e6df2e28..047f6eeb0 100644 --- a/Code/BasicFilters/json/LandweberDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/LandweberDeconvolutionImageFilter.json @@ -55,7 +55,7 @@ "VALID" ], "default" : "itk::simple::LandweberDeconvolutionImageFilter::SAME", - "itk_type" : "typename FilterType::OutputRegionModeType" + "itk_type" : "typename FilterType::OutputRegionModeEnum" } ], "tests" : [ diff --git a/Code/BasicFilters/json/ProjectedLandweberDeconvolutionImageFilter.json b/Code/BasicFilters/json/ProjectedLandweberDeconvolutionImageFilter.json index a08d39822..34decf892 100644 --- a/Code/BasicFilters/json/ProjectedLandweberDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/ProjectedLandweberDeconvolutionImageFilter.json @@ -55,7 +55,7 @@ "VALID" ], "default" : "itk::simple::ProjectedLandweberDeconvolutionImageFilter::SAME", - "itk_type" : "typename FilterType::OutputRegionModeType" + "itk_type" : "typename FilterType::OutputRegionModeEnum" } ], "tests" : [ diff --git a/Code/BasicFilters/json/RichardsonLucyDeconvolutionImageFilter.json b/Code/BasicFilters/json/RichardsonLucyDeconvolutionImageFilter.json index 8816bdfdf..1ef5bacd5 100644 --- a/Code/BasicFilters/json/RichardsonLucyDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/RichardsonLucyDeconvolutionImageFilter.json @@ -46,7 +46,7 @@ "VALID" ], "default" : "itk::simple::RichardsonLucyDeconvolutionImageFilter::SAME", - "itk_type" : "typename FilterType::OutputRegionModeType" + "itk_type" : "typename FilterType::OutputRegionModeEnum" } ], "tests" : [ diff --git a/Code/BasicFilters/json/TikhonovDeconvolutionImageFilter.json b/Code/BasicFilters/json/TikhonovDeconvolutionImageFilter.json index c9430615e..d63e9c988 100644 --- a/Code/BasicFilters/json/TikhonovDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/TikhonovDeconvolutionImageFilter.json @@ -46,7 +46,7 @@ "VALID" ], "default" : "itk::simple::TikhonovDeconvolutionImageFilter::SAME", - "itk_type" : "typename FilterType::OutputRegionModeType" + "itk_type" : "typename FilterType::OutputRegionModeEnum" } ], "tests" : [ diff --git a/Code/BasicFilters/json/WienerDeconvolutionImageFilter.json b/Code/BasicFilters/json/WienerDeconvolutionImageFilter.json index efccc47c8..804488f0d 100644 --- a/Code/BasicFilters/json/WienerDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/WienerDeconvolutionImageFilter.json @@ -46,7 +46,7 @@ "VALID" ], "default" : "itk::simple::WienerDeconvolutionImageFilter::SAME", - "itk_type" : "typename FilterType::OutputRegionModeType" + "itk_type" : "typename FilterType::OutputRegionModeEnum" } ], "tests" : [ diff --git a/Code/BasicFilters/src/sitkLandmarkBasedTransformInitializerFilter.cxx b/Code/BasicFilters/src/sitkLandmarkBasedTransformInitializerFilter.cxx index fc0f17a57..389020a7c 100644 --- a/Code/BasicFilters/src/sitkLandmarkBasedTransformInitializerFilter.cxx +++ b/Code/BasicFilters/src/sitkLandmarkBasedTransformInitializerFilter.cxx @@ -181,9 +181,9 @@ Transform LandmarkBasedTransformInitializerFilter::ExecuteInternal ( const Trans filter->SetLandmarkWeight ( this->m_LandmarkWeight ); - typedef typename FilterType::TransformType::TransformCategoryType TransformCategoryType; + typedef typename FilterType::TransformType::TransformCategoryEnum TransformCategoryEnum; // BSpline specific setup - if( itkTx->GetTransformCategory() == TransformCategoryType::BSpline ) + if( itkTx->GetTransformCategory() == TransformCategoryEnum::BSpline ) { if ( this->m_ReferenceImage.GetSize() == std::vector(this->m_ReferenceImage.GetDimension(), 0u) ) { diff --git a/Code/Common/src/sitkPimpleTransform.hxx b/Code/Common/src/sitkPimpleTransform.hxx index 6a5bb0150..2d592a43f 100644 --- a/Code/Common/src/sitkPimpleTransform.hxx +++ b/Code/Common/src/sitkPimpleTransform.hxx @@ -147,8 +147,8 @@ public: virtual bool IsLinear() const { - typedef itk::TransformBaseTemplate::TransformCategoryType TransformCategoryType; - return (this->GetTransformBase()->GetTransformCategory() == TransformCategoryType::Linear); + typedef itk::TransformBaseTemplate::TransformCategoryEnum TransformCategoryEnum; + return (this->GetTransformBase()->GetTransformCategory() == TransformCategoryEnum::Linear); } diff --git a/Code/IO/src/sitkImageFileWriter.cxx b/Code/IO/src/sitkImageFileWriter.cxx index f95076ea0..436ec10fd 100644 --- a/Code/IO/src/sitkImageFileWriter.cxx +++ b/Code/IO/src/sitkImageFileWriter.cxx @@ -198,7 +198,7 @@ ::GetImageIOBase(const std::string &fileName) itk::ImageIOBase::Pointer iobase; if (this->m_ImageIOName == "") { - iobase = itk::ImageIOFactory::CreateImageIO( fileName.c_str(), itk::ImageIOFactory::FileModeType::WriteMode); + iobase = itk::ImageIOFactory::CreateImageIO( fileName.c_str(), itk::ImageIOFactory::FileModeEnum::WriteMode); } else { diff --git a/Code/IO/src/sitkImageReaderBase.cxx b/Code/IO/src/sitkImageReaderBase.cxx index 10dd52437..b8c93a2ac 100644 --- a/Code/IO/src/sitkImageReaderBase.cxx +++ b/Code/IO/src/sitkImageReaderBase.cxx @@ -84,7 +84,7 @@ ::GetImageIOBase(const std::string &fileName) itk::ImageIOBase::Pointer iobase; if (this->m_ImageIOName == "") { - iobase = itk::ImageIOFactory::CreateImageIO( fileName.c_str(), itk::ImageIOFactory::FileModeType::ReadMode); + iobase = itk::ImageIOFactory::CreateImageIO( fileName.c_str(), itk::ImageIOFactory::FileModeEnum::ReadMode); } else { diff --git a/Code/IO/src/sitkImageSeriesWriter.cxx b/Code/IO/src/sitkImageSeriesWriter.cxx index 3ed38e4ba..1b61a774d 100644 --- a/Code/IO/src/sitkImageSeriesWriter.cxx +++ b/Code/IO/src/sitkImageSeriesWriter.cxx @@ -123,7 +123,7 @@ namespace itk { itk::ImageIOBase::Pointer iobase; if (this->m_ImageIOName == "") { - iobase = itk::ImageIOFactory::CreateImageIO( fileName.c_str(), itk::ImageIOFactory::FileModeType::WriteMode); + iobase = itk::ImageIOFactory::CreateImageIO( fileName.c_str(), itk::ImageIOFactory::FileModeEnum::WriteMode); } else { diff --git a/Testing/Unit/sitkBasicFiltersTests.cxx b/Testing/Unit/sitkBasicFiltersTests.cxx index e3a1d9a5d..1fb42ceac 100644 --- a/Testing/Unit/sitkBasicFiltersTests.cxx +++ b/Testing/Unit/sitkBasicFiltersTests.cxx @@ -156,38 +156,38 @@ TEST(BasicFilters,FastMarching_ENUMCHECK) { TEST(BasicFilters,InverseDeconvolution_ENUMCHECK) { typedef itk::InverseDeconvolutionImageFilter< itk::Image, itk::Image > ITKType; - EXPECT_EQ( (int) ITKType::OutputRegionModeType::SAME, (int) itk::simple::InverseDeconvolutionImageFilter::SAME ); - EXPECT_EQ( (int) ITKType::OutputRegionModeType::VALID, (int) itk::simple::InverseDeconvolutionImageFilter::VALID ); + EXPECT_EQ( (int) ITKType::OutputRegionModeEnum::SAME, (int) itk::simple::InverseDeconvolutionImageFilter::SAME ); + EXPECT_EQ( (int) ITKType::OutputRegionModeEnum::VALID, (int) itk::simple::InverseDeconvolutionImageFilter::VALID ); } TEST(BasicFilters,TikhonovDeconvolution_ENUMCHECK) { typedef itk::TikhonovDeconvolutionImageFilter< itk::Image, itk::Image > ITKType; - EXPECT_EQ( (int) ITKType::OutputRegionModeType::SAME, (int) itk::simple::TikhonovDeconvolutionImageFilter::SAME ); - EXPECT_EQ( (int) ITKType::OutputRegionModeType::VALID, (int) itk::simple::TikhonovDeconvolutionImageFilter::VALID ); + EXPECT_EQ( (int) ITKType::OutputRegionModeEnum::SAME, (int) itk::simple::TikhonovDeconvolutionImageFilter::SAME ); + EXPECT_EQ( (int) ITKType::OutputRegionModeEnum::VALID, (int) itk::simple::TikhonovDeconvolutionImageFilter::VALID ); } TEST(BasicFilters,WienerDeconvolution_ENUMCHECK) { typedef itk::WienerDeconvolutionImageFilter< itk::Image, itk::Image > ITKType; - EXPECT_EQ( (int) ITKType::OutputRegionModeType::SAME, (int) itk::simple::WienerDeconvolutionImageFilter::SAME ); - EXPECT_EQ( (int) ITKType::OutputRegionModeType::VALID, (int) itk::simple::WienerDeconvolutionImageFilter::VALID ); + EXPECT_EQ( (int) ITKType::OutputRegionModeEnum::SAME, (int) itk::simple::WienerDeconvolutionImageFilter::SAME ); + EXPECT_EQ( (int) ITKType::OutputRegionModeEnum::VALID, (int) itk::simple::WienerDeconvolutionImageFilter::VALID ); } TEST(BasicFilters,LandweberDeconvolution_ENUMCHECK) { typedef itk::LandweberDeconvolutionImageFilter< itk::Image, itk::Image > ITKType; - EXPECT_EQ( (int) ITKType::OutputRegionModeType::SAME, (int) itk::simple::LandweberDeconvolutionImageFilter::SAME ); - EXPECT_EQ( (int) ITKType::OutputRegionModeType::VALID, (int) itk::simple::LandweberDeconvolutionImageFilter::VALID ); + EXPECT_EQ( (int) ITKType::OutputRegionModeEnum::SAME, (int) itk::simple::LandweberDeconvolutionImageFilter::SAME ); + EXPECT_EQ( (int) ITKType::OutputRegionModeEnum::VALID, (int) itk::simple::LandweberDeconvolutionImageFilter::VALID ); } TEST(BasicFilters,ProjectedLandweberDeconvolution_ENUMCHECK) { typedef itk::ProjectedLandweberDeconvolutionImageFilter< itk::Image, itk::Image > ITKType; - EXPECT_EQ( (int) ITKType::OutputRegionModeType::SAME, (int) itk::simple::ProjectedLandweberDeconvolutionImageFilter::SAME ); - EXPECT_EQ( (int) ITKType::OutputRegionModeType::VALID, (int) itk::simple::ProjectedLandweberDeconvolutionImageFilter::VALID ); + EXPECT_EQ( (int) ITKType::OutputRegionModeEnum::SAME, (int) itk::simple::ProjectedLandweberDeconvolutionImageFilter::SAME ); + EXPECT_EQ( (int) ITKType::OutputRegionModeEnum::VALID, (int) itk::simple::ProjectedLandweberDeconvolutionImageFilter::VALID ); } TEST(BasicFilters,RichardsonLucyDeconvolution_ENUMCHECK) { typedef itk::RichardsonLucyDeconvolutionImageFilter< itk::Image, itk::Image > ITKType; - EXPECT_EQ( (int) ITKType::OutputRegionModeType::SAME, (int) itk::simple::RichardsonLucyDeconvolutionImageFilter::SAME ); - EXPECT_EQ( (int) ITKType::OutputRegionModeType::VALID, (int) itk::simple::RichardsonLucyDeconvolutionImageFilter::VALID ); + EXPECT_EQ( (int) ITKType::OutputRegionModeEnum::SAME, (int) itk::simple::RichardsonLucyDeconvolutionImageFilter::SAME ); + EXPECT_EQ( (int) ITKType::OutputRegionModeEnum::VALID, (int) itk::simple::RichardsonLucyDeconvolutionImageFilter::VALID ); } TEST(BasicFilters,LabelMapContourOverlay_ENUMCHECK) { From cc142c4e3256d75cb6ac70779764c53068aecdb0 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 10 Dec 2019 11:35:43 -0500 Subject: [PATCH 269/400] Support downloading from data.kitware in tarball script --- Utilities/Maintenance/SourceTarball.bash | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Utilities/Maintenance/SourceTarball.bash b/Utilities/Maintenance/SourceTarball.bash index 064f7a311..e1d3b37a9 100755 --- a/Utilities/Maintenance/SourceTarball.bash +++ b/Utilities/Maintenance/SourceTarball.bash @@ -110,7 +110,8 @@ download_object() { algo="$1" ; hash="$2" ; path="$3" mkdir -p $(dirname "$path") && if curl "https://simpleitk.github.io/SimpleITKExternalData/$algo/$hash" --output "$path.tmp$$" 1>&2 || - curl "https://www.itk.org/files/ExternalData/$algo/$hash" --output "$path.tmp$$" 1>&2; then + curl "https://www.itk.org/files/ExternalData/$algo/$hash" --output "$path.tmp$$" 1>&2 || + curl "https://data.kitware.com/midas3/api/rest?method=midas.bitstream.download&checksum=${hash}&algorithm=${algo}" --output 1>&2; then mv "$path.tmp$$" "$path" else rm -f "$path.tmp$$" From ce94cd42d4895bfb7fe56e78398bb496b726e26d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 2 Dec 2019 17:35:46 -0500 Subject: [PATCH 270/400] AZP packaging disable ITK automatically setting architecture flags --- Testing/CI/Azure/azure-pipelines-package.yml | 4 ++++ Utilities/Distribution/manylinux/imagefiles/cmd.sh | 2 ++ 2 files changed, 6 insertions(+) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index 8e527052c..09ca24801 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -102,6 +102,8 @@ jobs: CMAKE_CXX_FLAGS:STRING=-fvisibility=hidden -fvisibility-inlines-hidden CMAKE_C_FLAGS:STRING=-fvisibility=hidden CMAKE_OSX_DEPLOYMENT_TARGET=10.6 + ITK_C_OPTIMIZATION_FLAGS:STRING= + ITK_CXX_OPTIMIZATION_FLAGS:STRING= BUILD_DOCUMENTS:BOOL=OFF BUILD_EXAMPLES:BOOL=OFF BUILD_SHARED_LIBS:BOOL=OFF @@ -208,6 +210,8 @@ jobs: BUILD_SHARED_LIBS:BOOL=OFF BUILD_TESTING:BOOL=ON WRAP_DEFAULT:BOOL=OFF + ITK_C_OPTIMIZATION_FLAGS:STRING= + ITK_CXX_OPTIMIZATION_FLAGS:STRING= SimpleITK_BUILD_DISTRIBUTE:BOOL=ON - bash : | rm -rf ${COREBINARYDIRECTORY}/ITK ${COREBINARYDIRECTORY}/ITK-build diff --git a/Utilities/Distribution/manylinux/imagefiles/cmd.sh b/Utilities/Distribution/manylinux/imagefiles/cmd.sh index 781ae3549..7c17b3faa 100755 --- a/Utilities/Distribution/manylinux/imagefiles/cmd.sh +++ b/Utilities/Distribution/manylinux/imagefiles/cmd.sh @@ -31,6 +31,8 @@ function build_simpleitk { -DBUILD_SHARED_LIBS:BOOL=OFF \ -DWRAP_DEFAULT:BOOL=OFF \ -DITK_GIT_REPOSITORY:STRING="https://github.com/InsightSoftwareConsortium/ITK.git" \ + -DITK_C_OPTIMIZATION_FLAGS:STRING="" \ + -DITK_CXX_OPTIMIZATION_FLAGS:STRING="" \ ${SRC_DIR}/SuperBuild && make && find ./ -name \*.o -delete From e138832ae3aceb92b061a6c8abad772878a7c148 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 2 Dec 2019 17:37:19 -0500 Subject: [PATCH 271/400] AZP packaging remove Python 2.7 support --- Testing/CI/Azure/azure-pipelines-package.yml | 77 +------------------- 1 file changed, 1 insertion(+), 76 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index 09ca24801..89b0f4ce7 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -45,6 +45,7 @@ jobs: env: ExternalData_OBJECT_STORES: "$(Build.SourcesDirectory)/.ExternalData/MD5" SIMPLEITK_GIT_TAG: "$(SimpleITKBuildHash)" + PYTHON_VERSIONS: "cp34-cp34m cp35-cp35m cp36-cp36m cp37-cp37m cp38-cp38" - task: CopyFiles@2 inputs: sourceFolder: '$(Build.SourcesDirectory)/Utilities/Distribution/manylinux/wheelhouse' @@ -150,14 +151,6 @@ jobs: - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh displayName: Build Python 35 continueOnError: true - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '2.7' - architecture: 'x64' - - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh - displayName: Build Python 27 - continueOnError: true - task: PublishBuildArtifacts@1 inputs: pathtoPublish: $(Build.ArtifactStagingDirectory)/python @@ -281,71 +274,3 @@ jobs: inputs: pathtoPublish: $(Build.ArtifactStagingDirectory)/python artifactName: Python - - - job: VS2008 - dependsOn: Configure - condition: ne( variables['configure.skipwindows'], 'true' ) - timeoutInMinutes: 360 - strategy: - matrix: - x86: - PYTHON_ARCH: x86 - VCVAR_OPTIONS: x86 - CMAKE_PLATFORM: Win32 - x64: - PYTHON_ARCH: x64 - CMAKE_PLATFORM: x64 - VCVAR_OPTIONS: amd64 - pool: - vmImage: 'vs2017-win2016' - variables: - coreBinaryDirectory: '$(Agent.BuildDirectory)/sitk-build' - CTEST_CONFIGURATION_TYPE: MinSizeRel - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - DASHBOARD_GIT_BRANCH: $[ dependencies.Configure.outputs['configure.BuildHash'] ] - steps: - - template: templates/git-download-steps.yml - - bash: | - choco upgrade vcpython27 -fdv -y --debug - choco install ninja -fdvy - displayName: "Installing Visual Studio for Python 2.7..." - - script: | - call "C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat" $(VCVAR_OPTIONS) - cmake --version - ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V - true - displayName: Build and test - workingDirectory: $(Agent.BuildDirectory) - continueOnError: true - env: - CTEST_BINARY_DIRECTORY: $(coreBinaryDirectory) - CTEST_CMAKE_GENERATOR: "Ninja" - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - CXXFLAGS: /MP - CFLAGS: /MP - CC: cl.exe - CXX: cl.exe - CTEST_CACHE: | - BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=OFF - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_TESTING:BOOL=ON - WRAP_DEFAULT:BOOL=OFF - SimpleITK_BUILD_DISTRIBUTE:BOOL=ON - - bash : | - rm -rf ${COREBINARYDIRECTORY}/ITK ${COREBINARYDIRECTORY}/ITK-build - rm -rf ${COREBINARYDIRECTORY}/SimpleITK-build - displayName: Cleanup build - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '2.7' - architecture: '$(PYTHON_ARCH)' - - script: | - call "C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat" $(VCVAR_OPTIONS) - bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh - displayName: Build Python 27 - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: $(Build.ArtifactStagingDirectory)/python - artifactName: Python From 1b3ff7fa2b7555d69041e5c459534b84f89a227f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 25 Nov 2019 10:46:06 -0500 Subject: [PATCH 272/400] AZP packaging update OSX to build with 10.9 deployment target ITK now requires a minimum of 10.7 target. --- Testing/CI/Azure/azure-pipelines-package.yml | 2 +- Testing/CI/Azure/mac_build_python.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index 89b0f4ce7..182cd3c14 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -102,7 +102,7 @@ jobs: CTEST_CACHE: | CMAKE_CXX_FLAGS:STRING=-fvisibility=hidden -fvisibility-inlines-hidden CMAKE_C_FLAGS:STRING=-fvisibility=hidden - CMAKE_OSX_DEPLOYMENT_TARGET=10.6 + CMAKE_OSX_DEPLOYMENT_TARGET=10.9 ITK_C_OPTIMIZATION_FLAGS:STRING= ITK_CXX_OPTIMIZATION_FLAGS:STRING= BUILD_DOCUMENTS:BOOL=OFF diff --git a/Testing/CI/Azure/mac_build_python.sh b/Testing/CI/Azure/mac_build_python.sh index 9f7861423..e84ebdbcf 100755 --- a/Testing/CI/Azure/mac_build_python.sh +++ b/Testing/CI/Azure/mac_build_python.sh @@ -16,12 +16,12 @@ read -r -d '' CTEST_CACHE << EOM || true CMAKE_PREFIX_PATH:PATH=${COREBINARYDIRECTORY} CMAKE_CXX_VISIBILITY_PRESET:STRING=hidden CMAKE_VISIBILITY_INLINES_HIDDEN:BOOL=ON -CMAKE_OSX_DEPLOYMENT_TARGET=10.6 +CMAKE_OSX_DEPLOYMENT_TARGET=10.9 SWIG_EXECUTABLE:FILEPATH=${COREBINARYDIRECTORY}/Swig/bin/swig PYTHON_VIRTUALENV_SCRIPT:FILEPATH=${COREBINARYDIRECTORY}/virtualenv/virtualenv.py BUILD_EXAMPLES:BOOL=ON BUILD_TESTING:BOOL=ON -SimpleITK_PYTHON_PLAT_NAME:STRING=macosx-10.6-x86_64 +SimpleITK_PYTHON_PLAT_NAME:STRING=macosx-10.9-x86_64 SimpleITK_BUILD_DISTRIBUTE:BOOL=ON SimpleITK_PYTHON_WHEEL:BOOL=1 SimpleITK_BUILD_STRIP:BOOL=1 From 4b148c757165fe66b35434d109a598172edd498d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 3 Dec 2019 11:11:51 -0500 Subject: [PATCH 273/400] Fix manylinux run script issue with spaces in parameters --- Utilities/Distribution/manylinux/run.sh | 26 ++++++++++++------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/Utilities/Distribution/manylinux/run.sh b/Utilities/Distribution/manylinux/run.sh index cfa722ef7..c701ee45c 100755 --- a/Utilities/Distribution/manylinux/run.sh +++ b/Utilities/Distribution/manylinux/run.sh @@ -1,25 +1,23 @@ #!/bin/sh if [ -n "$ExternalData_OBJECT_STORES" -a -d "$ExternalData_OBJECT_STORES" ] ; then - extra_args="-v ${ExternalData_OBJECT_STORES}:/var/io/.ExternalData -e ExternalData_OBJECT_STORES=/var/io/.ExternalData" + extra_args="-v ${ExternalData_OBJECT_STORES}:/var/io/.ExternalData --env ExternalData_OBJECT_STORES=/var/io/.ExternalData" fi -if [ ! -z "${SIMPLEITK_GIT_TAG}" ] ; then - extra_args="${extra_args} -e SIMPLEITK_GIT_TAG=${SIMPLEITK_GIT_TAG}" -fi - -# example versions: "cp27-cp27m cp27-cp27mu cp36-cp36m" -if [ ! -z "${PYTHON_VERSIONS}" ] ; then - extra_args="${extra_args} -e PYTHON_VERSIONS=${PYTHON_VERSIONS}" -fi - - ARCHS=${ARCH:-"i686 x86_64"} for ARCH in ${ARCHS}; do - docker build --pull=true --rm=true -t simpleitk_manylinux_${ARCH} -f Dockerfile-${ARCH} . - - docker run --rm --env _USER=$(id -un) --env _USERID=$(id -u) --env _GROUPID=$(id -g) $extra_args -v $(pwd):/work/io -t simpleitk_manylinux_${ARCH} + docker build --pull=true --rm=true -t simpleitk_manylinux_${ARCH} -f Dockerfile-${ARCH} . + + docker run --rm \ + --env _USER=$(id -un) \ + --env "_USERID=$(id -u)" \ + --env "_GROUPID=$(id -g)" \ + ${extra_args} \ + ${SIMPLEITK_GIT_TAG:+--env SIMPLEITK_GIT_TAG="${SIMPLEITK_GIT_TAG}"} \ + ${PYTHON_VERSIONS:+--env PYTHON_VERSIONS="${PYTHON_VERSIONS}"} \ + -v "$(pwd):/work/io" \ + -t simpleitk_manylinux_${ARCH} # use this command to get an interactive prompt to debug behavior #docker run --rm -i -t --entrypoint=/bin/bash -u=root $extra_args -v $(pwd):/work/io simpleitk_manylinux_${ARCH} From 2a8f38ca9e6d1f77dcb4bea5233aab9dfd4899fe Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 3 Dec 2019 11:41:57 -0500 Subject: [PATCH 274/400] AZP packaging post ctest results to package dashboard track --- Testing/CI/Azure/azure-pipelines-package.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index 182cd3c14..5f5821698 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -91,7 +91,7 @@ jobs: ninja --version displayName: 'XCode configuration' - bash: | - ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 2 + ctest -D "dashboard_track:STRING=Package" -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 2 displayName: 'Build and test core' workingDirectory: $(Agent.BuildDirectory) env: @@ -185,7 +185,7 @@ jobs: - script: | call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 cmake --version - ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + ctest -D "dashboard_track:STRING=Package" -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V true displayName: Build and test workingDirectory: $(Agent.BuildDirectory) From aa490409c4b88c5b076aec0950a816e21086c32c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 3 Dec 2019 14:30:48 -0500 Subject: [PATCH 275/400] AZP packaging support for branches The DASHBOARD_GIT_BRANCH variable is converted to a hash if it is not a tag. --- Testing/CI/Azure/azure-pipelines-package.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index 5f5821698..79a0632f5 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -113,13 +113,20 @@ jobs: SimpleITK_BUILD_DISTRIBUTE:BOOL=ON - bash: | set -xe - Utilities/Maintenance/SourceTarball.bash --tgz --txz --zip $(coreBinaryDirectory)/SimpleITK-build ${DASHBOARD_GIT_BRANCH} + if GIT_DIR=${BUILD_SOURCESDIRECTORY}/.git git rev-parse "${DASHBOARD_GIT_BRANCH}^{tag}" >/dev/null 2>&1 + then + COMMIT=${DASHBOARD_GIT_BRANCH} + else + COMMIT=$(git rev-parse origin/${DASHBOARD_GIT_BRANCH}) + fi + Utilities/Maintenance/SourceTarball.bash --tgz --txz --zip $(coreBinaryDirectory)/SimpleITK-build ${COMMIT} mkdir -p $(Build.ArtifactStagingDirectory)/archives ls -la shopt -s extglob mv SimpleITK@(Data|)-*@(zip|gz|xz) $(Build.ArtifactStagingDirectory)/archives workingDirectory: $(Build.SourcesDirectory) displayName: Generate Source and Data Archives + continueOnError: true - task: PublishBuildArtifacts@1 inputs: pathtoPublish: $(Build.ArtifactStagingDirectory)/archives From e9cb2fe841a5b36421b4e1efed0572d52cb2e82d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 4 Dec 2019 13:51:37 -0500 Subject: [PATCH 276/400] AZP packaging splitting jobs into template files This will allow the replacement of matrix, with template parameters. Switch windows build to use Visual Studio generator. --- Testing/CI/Azure/azure-pipelines-package.yml | 272 +----------------- .../CI/Azure/templates/package-linux-job.yml | 36 +++ .../CI/Azure/templates/package-mac-job.yml | 106 +++++++ .../CI/Azure/templates/package-win-job.yml | 113 ++++++++ Testing/CI/Azure/win_build_csharp.sh | 2 +- 5 files changed, 265 insertions(+), 264 deletions(-) create mode 100644 Testing/CI/Azure/templates/package-linux-job.yml create mode 100644 Testing/CI/Azure/templates/package-mac-job.yml create mode 100644 Testing/CI/Azure/templates/package-win-job.yml diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index 79a0632f5..c26789112 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -18,266 +18,12 @@ jobs: - bash: | echo "##vso[task.setvariable variable=BuildHash;isOutput=true]${CONFIGURE_BUILDHASH:-release}" name: configure - - job: Linux - dependsOn: Configure - condition: ne( variables['configure.skiplinux'], 'true' ) - timeoutInMinutes: 200 - strategy: - matrix: - manylinux1_i686: - ARCH: i686 - manylinux1_x86_64: - ARCH: x86_64 - pool: - vmImage: 'Ubuntu-16.04' - variables: - SIMPLEITK_GIT_TAG: $[ dependencies.Configure.outputs['configure.BuildHash'] ] - steps: - - template: templates/git-download-steps.yml - - bash: | - cd ${BUILD_SOURCESDIRECTORY}/Utilities/Distribution/manylinux - docker build --pull=true --rm=true -t simpleitk_manylinux_${ARCH} -f Dockerfile-${ARCH} . - displayName: Build Docker Image - - bash: | - echo "Building SimpleITK tag \"${SIMPLEITK_GIT_TAG}\"..." - cd ${BUILD_SOURCESDIRECTORY}/Utilities/Distribution/manylinux - ./run.sh - env: - ExternalData_OBJECT_STORES: "$(Build.SourcesDirectory)/.ExternalData/MD5" - SIMPLEITK_GIT_TAG: "$(SimpleITKBuildHash)" - PYTHON_VERSIONS: "cp34-cp34m cp35-cp35m cp36-cp36m cp37-cp37m cp38-cp38" - - task: CopyFiles@2 - inputs: - sourceFolder: '$(Build.SourcesDirectory)/Utilities/Distribution/manylinux/wheelhouse' - contents: '*.whl' - targetFolder: $(Build.ArtifactStagingDirectory)/python - flattenFolders: true - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: $(Build.ArtifactStagingDirectory)/python - artifactName: Python - - - job: MacOS - dependsOn: Configure - condition: ne( variables['configure.skipmacos'], 'true' ) - timeoutInMinutes: 200 - variables: - xcodeVersion: 9.4.1 - coreBinaryDirectory: '$(Agent.BuildDirectory)/sitk-build' - CTEST_CONFIGURATION_TYPE: Release - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - DASHBOARD_GIT_BRANCH: $[ dependencies.Configure.outputs['configure.BuildHash'] ] - pool: - vmImage: 'macos-10.13' - steps: - - template: templates/git-download-steps.yml - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.6' - architecture: 'x64' - - script: | - python --version - sudo python -m pip install setuptools numpy - sudo python -m pip install ninja scikit-ci-addons - displayName: 'Install ninja dependency' - - bash: | - set -x - xcode-select -p - sudo xcode-select -s /Applications/Xcode_$(xcodeVersion).app/Contents/Developer/ - xcode-select -p - c++ --version - cmake --version - ninja --version - displayName: 'XCode configuration' - - bash: | - ctest -D "dashboard_track:STRING=Package" -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 2 - displayName: 'Build and test core' - workingDirectory: $(Agent.BuildDirectory) - env: - CTEST_BINARY_DIRECTORY: $(coreBinaryDirectory) - CTEST_OUTPUT_ON_FALURE: 1 - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - CTEST_CACHE: | - CMAKE_CXX_FLAGS:STRING=-fvisibility=hidden -fvisibility-inlines-hidden - CMAKE_C_FLAGS:STRING=-fvisibility=hidden - CMAKE_OSX_DEPLOYMENT_TARGET=10.9 - ITK_C_OPTIMIZATION_FLAGS:STRING= - ITK_CXX_OPTIMIZATION_FLAGS:STRING= - BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=OFF - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_TESTING:BOOL=ON - WRAP_DEFAULT:BOOL=OFF - SimpleITK_BUILD_DISTRIBUTE:BOOL=ON - - bash: | - set -xe - if GIT_DIR=${BUILD_SOURCESDIRECTORY}/.git git rev-parse "${DASHBOARD_GIT_BRANCH}^{tag}" >/dev/null 2>&1 - then - COMMIT=${DASHBOARD_GIT_BRANCH} - else - COMMIT=$(git rev-parse origin/${DASHBOARD_GIT_BRANCH}) - fi - Utilities/Maintenance/SourceTarball.bash --tgz --txz --zip $(coreBinaryDirectory)/SimpleITK-build ${COMMIT} - mkdir -p $(Build.ArtifactStagingDirectory)/archives - ls -la - shopt -s extglob - mv SimpleITK@(Data|)-*@(zip|gz|xz) $(Build.ArtifactStagingDirectory)/archives - workingDirectory: $(Build.SourcesDirectory) - displayName: Generate Source and Data Archives - continueOnError: true - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: $(Build.ArtifactStagingDirectory)/archives - artifactName: Archives - - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh - displayName: Build Python 38 - continueOnError: true - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.8' - architecture: 'x64' - - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh - displayName: Build Python 38 - continueOnError: true - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.7' - architecture: 'x64' - - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh - displayName: Build Python 37 - continueOnError: true - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.5' - architecture: 'x64' - - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh - displayName: Build Python 35 - continueOnError: true - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: $(Build.ArtifactStagingDirectory)/python - artifactName: Python - - - job: VS2017 - dependsOn: Configure - condition: ne( variables['configure.skipwindows'], 'true' ) - timeoutInMinutes: 0 - strategy: - matrix: - x86: - PYTHON_ARCH: x86 - CMAKE_PLATFORM: Win32 - VCVAR_OPTIONS: x86 - x64: - PYTHON_ARCH: x64 - CMAKE_PLATFORM: x64 - VCVAR_OPTIONS: amd64 - pool: - vmImage: 'vs2017-win2016' - variables: - coreBinaryDirectory: '$(Agent.BuildDirectory)/sitk-build' - CTEST_CONFIGURATION_TYPE: Release - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - DASHBOARD_GIT_BRANCH: $[ dependencies.Configure.outputs['configure.BuildHash'] ] - steps: - - template: templates/git-download-steps.yml - - bash: | - choco install ninja -fdvy - which jar.exe - - script: | - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 - cmake --version - ctest -D "dashboard_track:STRING=Package" -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V - true - displayName: Build and test - workingDirectory: $(Agent.BuildDirectory) - env: - CTEST_BINARY_DIRECTORY: $(coreBinaryDirectory) - CTEST_CMAKE_GENERATOR: "Ninja" - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - CXXFLAGS: /MP - CFLAGS: /MP - CC: cl.exe - CXX: cl.exe - CTEST_CACHE: | - BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=ON - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_TESTING:BOOL=ON - WRAP_DEFAULT:BOOL=OFF - ITK_C_OPTIMIZATION_FLAGS:STRING= - ITK_CXX_OPTIMIZATION_FLAGS:STRING= - SimpleITK_BUILD_DISTRIBUTE:BOOL=ON - - bash : | - rm -rf ${COREBINARYDIRECTORY}/ITK ${COREBINARYDIRECTORY}/ITK-build - rm -rf ${COREBINARYDIRECTORY}/SimpleITK-build - displayName: Cleanup build - - script: | - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 - bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_java.sh - displayName: Build Java - continueOnError: true - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: $(Build.ArtifactStagingDirectory)/java - artifactName: Java - continueOnError: true - - script: | - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 - bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_csharp.sh - displayName: Build CSharp - continueOnError: true - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: $(Build.ArtifactStagingDirectory)/csharp - artifactName: CSharp - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.8' - architecture: '$(PYTHON_ARCH)' - - script: | - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 - bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh - displayName: Build Python 38 - continueOnError: true - - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.7' - architecture: '$(PYTHON_ARCH)' - - script: | - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 - bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh - displayName: Build Python 37 - continueOnError: true - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.6' - architecture: '$(PYTHON_ARCH)' - - script: | - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 - bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh - displayName: Build Python 36 - continueOnError: true - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.5' - architecture: '$(PYTHON_ARCH)' - - script: | - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" $(VCVAR_OPTIONS) -vcvars_ver=14.0 - bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh - displayName: Build Python 35 - continueOnError: true - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: $(Build.ArtifactStagingDirectory)/python - artifactName: Python + - template: templates/package-linux-job.yml + parameters: + ARCH: x86_64 + - template: templates/package-mac-job.yml + - template: templates/package-win-job.yml + parameters: + PYTHON_ARCH: x64 + CMAKE_PLATFORM: x64 + VCVAR_OPTIONS: amd64 diff --git a/Testing/CI/Azure/templates/package-linux-job.yml b/Testing/CI/Azure/templates/package-linux-job.yml new file mode 100644 index 000000000..97cc8cee0 --- /dev/null +++ b/Testing/CI/Azure/templates/package-linux-job.yml @@ -0,0 +1,36 @@ +parameters: + ARCH: x86_64 + PYTHON_VERSIONS: "cp34-cp34m cp35-cp35m cp36-cp36m cp37-cp37m cp38-cp38" + +jobs: + - job: Linux + dependsOn: Configure + condition: ne( variables['configure.skiplinux'], 'true' ) + timeoutInMinutes: 300 + variables: + SIMPLEITK_GIT_TAG: $[ dependencies.Configure.outputs['configure.BuildHash'] ] + steps: + - template: ./git-download-steps.yml + - bash: | + cd ${BUILD_SOURCESDIRECTORY}/Utilities/Distribution/manylinux + docker build --pull=true --rm=true -t simpleitk_manylinux_${{ parameters.ARCH }} -f Dockerfile-${{ parameters.ARCH }} . + displayName: Build Docker Image + - bash: | + echo "Building SimpleITK tag \"${SIMPLEITK_GIT_TAG}\"..." + cd ${BUILD_SOURCESDIRECTORY}/Utilities/Distribution/manylinux + ./run.sh + env: + ExternalData_OBJECT_STORES: "$(Build.SourcesDirectory)/.ExternalData/MD5" + SIMPLEITK_GIT_TAG: "$(SimpleITKBuildHash)" + PYTHON_VERSIONS: ${{ parameters.PYTHON_VERSIONS }} + ARCH: ${{ parameters.ARCH }} + - task: CopyFiles@2 + inputs: + sourceFolder: '$(Build.SourcesDirectory)/Utilities/Distribution/manylinux/wheelhouse' + contents: '*.whl' + targetFolder: $(Build.ArtifactStagingDirectory)/python + flattenFolders: true + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/python + artifactName: Python diff --git a/Testing/CI/Azure/templates/package-mac-job.yml b/Testing/CI/Azure/templates/package-mac-job.yml new file mode 100644 index 000000000..a8cd792aa --- /dev/null +++ b/Testing/CI/Azure/templates/package-mac-job.yml @@ -0,0 +1,106 @@ +jobs: + - job: MacOS + dependsOn: Configure + condition: ne( variables['configure.skipmacos'], 'true' ) + timeoutInMinutes: 200 + variables: + xcodeVersion: 9.4.1 + coreBinaryDirectory: '$(Agent.BuildDirectory)/sitk-build' + CTEST_CONFIGURATION_TYPE: Release + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + DASHBOARD_GIT_BRANCH: $[ dependencies.Configure.outputs['configure.BuildHash'] ] + pool: + vmImage: 'macos-10.13' + steps: + - template: ./git-download-steps.yml + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: 'x64' + - script: | + python --version + sudo python -m pip install setuptools numpy + sudo python -m pip install ninja scikit-ci-addons + displayName: 'Install ninja dependency' + - bash: | + set -x + xcode-select -p + sudo xcode-select -s /Applications/Xcode_$(xcodeVersion).app/Contents/Developer/ + xcode-select -p + c++ --version + cmake --version + ninja --version + displayName: 'XCode configuration' + - bash: | + ctest -D "dashboard_track:STRING=Package" -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 2 + displayName: 'Build and test core' + workingDirectory: $(Agent.BuildDirectory) + env: + CTEST_BINARY_DIRECTORY: $(coreBinaryDirectory) + CTEST_OUTPUT_ON_FALURE: 1 + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CTEST_CACHE: | + CMAKE_CXX_FLAGS:STRING=-fvisibility=hidden -fvisibility-inlines-hidden + CMAKE_C_FLAGS:STRING=-fvisibility=hidden + CMAKE_OSX_DEPLOYMENT_TARGET=10.9 + ITK_C_OPTIMIZATION_FLAGS:STRING= + ITK_CXX_OPTIMIZATION_FLAGS:STRING= + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=OFF + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + SimpleITK_BUILD_DISTRIBUTE:BOOL=ON + - bash: | + set -xe + if GIT_DIR=${BUILD_SOURCESDIRECTORY}/.git git rev-parse "${DASHBOARD_GIT_BRANCH}^{tag}" >/dev/null 2>&1 + then + COMMIT=${DASHBOARD_GIT_BRANCH} + else + COMMIT=$(git rev-parse origin/${DASHBOARD_GIT_BRANCH}) + fi + Utilities/Maintenance/SourceTarball.bash --tgz --txz --zip $(coreBinaryDirectory)/SimpleITK-build ${COMMIT} + mkdir -p $(Build.ArtifactStagingDirectory)/archives + ls -la + shopt -s extglob + mv SimpleITK@(Data|)-*@(zip|gz|xz) $(Build.ArtifactStagingDirectory)/archives + workingDirectory: $(Build.SourcesDirectory) + displayName: Generate Source and Data Archives + continueOnError: true + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/archives + artifactName: Archives + - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh + displayName: Build Python 38 + continueOnError: true + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.8' + architecture: 'x64' + - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh + displayName: Build Python 38 + continueOnError: true + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.7' + architecture: 'x64' + - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh + displayName: Build Python 37 + continueOnError: true + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.5' + architecture: 'x64' + - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh + displayName: Build Python 35 + continueOnError: true + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/python + artifactName: Python diff --git a/Testing/CI/Azure/templates/package-win-job.yml b/Testing/CI/Azure/templates/package-win-job.yml new file mode 100644 index 000000000..5ce7f7724 --- /dev/null +++ b/Testing/CI/Azure/templates/package-win-job.yml @@ -0,0 +1,113 @@ +parameters: + PYTHON_ARCH: x64 + CMAKE_PLATFORM: x64 + VCVAR_OPTIONS: amd64 +jobs: + - job: VS2017 + dependsOn: Configure + condition: ne( variables['configure.skipwindows'], 'true' ) + timeoutInMinutes: 0 + pool: + vmImage: 'vs2017-win2016' + variables: + coreBinaryDirectory: '$(Agent.BuildDirectory)/sitk-build' + CTEST_CONFIGURATION_TYPE: Release + DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard + DASHBOARD_GIT_BRANCH: $[ dependencies.Configure.outputs['configure.BuildHash'] ] + CMAKE_PLATFORM: ${{ parameters.CMAKE_PLATFORM }} + steps: + - template: ./git-download-steps.yml + - script: | + cmake --version + ctest -D "dashboard_track:STRING=Package" -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V + displayName: Build and test + workingDirectory: $(Agent.BuildDirectory) + continueOnError: true + env: + CTEST_OUTPUT_ON_FAILURE: 1 + CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017 Win64" + CTEST_CMAKE_GENERATOR_TOOLSET: v141,host=x64 + CTEST_BINARY_DIRECTORY: $(coreBinaryDirectory) + ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 + CXXFLAGS: /MP + CFLAGS: /MP + CTEST_CACHE: | + BUILD_DOCUMENTS:BOOL=OFF + BUILD_EXAMPLES:BOOL=ON + BUILD_SHARED_LIBS:BOOL=OFF + BUILD_TESTING:BOOL=ON + WRAP_DEFAULT:BOOL=OFF + ITK_C_OPTIMIZATION_FLAGS:STRING= + ITK_CXX_OPTIMIZATION_FLAGS:STRING= + SimpleITK_BUILD_DISTRIBUTE:BOOL=ON + - bash : | + rm -rf ${COREBINARYDIRECTORY}/ITK ${COREBINARYDIRECTORY}/ITK-build + rm -rf ${COREBINARYDIRECTORY}/SimpleITK-build + displayName: Cleanup build + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ parameters.VCVAR_OPTIONS }} -vcvars_ver=14.0 + bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_java.sh + displayName: Build Java + continueOnError: true + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/java + artifactName: Java + continueOnError: true + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ parameters.VCVAR_OPTIONS }} -vcvars_ver=14.0 + bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_csharp.sh + displayName: Build CSharp + continueOnError: true + env: + CSHARP_PLATFORM: '${{ parameters.PYTHON_ARCH }}' + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/csharp + artifactName: CSharp + continueOnError: true + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.8' + architecture: '${{ parameters.PYTHON_ARCH }}' + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ parameters.VCVAR_OPTIONS }} -vcvars_ver=14.0 + bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh + displayName: Build Python 38 + continueOnError: true + + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.7' + architecture: '${{ parameters.PYTHON_ARCH }}' + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ parameters.VCVAR_OPTIONS }} -vcvars_ver=14.0 + bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh + displayName: Build Python 37 + continueOnError: true + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.6' + architecture: '${{ parameters.PYTHON_ARCH }}' + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ parameters.VCVAR_OPTIONS }} -vcvars_ver=14.0 + bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh + displayName: Build Python 36 + continueOnError: true + - task: UsePythonVersion@0 + displayName: Enable Python + inputs: + versionSpec: '3.5' + architecture: '${{ parameters.PYTHON_ARCH }}' + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ parameters.VCVAR_OPTIONS }} -vcvars_ver=14.0 + bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh + displayName: Build Python 35 + continueOnError: true + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/python + artifactName: Python diff --git a/Testing/CI/Azure/win_build_csharp.sh b/Testing/CI/Azure/win_build_csharp.sh index 1963a9b12..49f8227ed 100755 --- a/Testing/CI/Azure/win_build_csharp.sh +++ b/Testing/CI/Azure/win_build_csharp.sh @@ -11,7 +11,7 @@ BUILD_TESTING:BOOL=ON BUILD_EXAMPLES:BOOL=ON SimpleITK_BUILD_DISTRIBUTE:BOOL=ON Java_JAR_EXECUTABLE:FILEPATH=jar.exe -CSHARP_PLATFORM:STRING=${PYTHON_ARCH} +CSHARP_PLATFORM:STRING=${CSHARP_PLATFORM} EOM From a3f4e3ba653c165b301e4e2f9074fa3214a7cf50 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 12 Dec 2019 17:15:28 -0500 Subject: [PATCH 277/400] AZP remove the cancel timeout Builds should just be killed when canceled. --- Testing/CI/Azure/azure-pipelines-batch.yml | 2 -- Testing/CI/Azure/azure-pipelines.yml | 3 --- 2 files changed, 5 deletions(-) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index 14c6f27d0..b1b3f967f 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -8,7 +8,6 @@ pr: none jobs: - job: VisualStudio timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 strategy: maxParallel: 1 matrix: @@ -54,7 +53,6 @@ jobs: - job: macOS timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 strategy: maxParallel: 1 matrix: diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index 1829ba7b0..ccc57d100 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -10,7 +10,6 @@ variables: jobs: - job: Linux timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 pool: name: 'Default' demands: @@ -63,7 +62,6 @@ jobs: - job: macOS timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 variables: imageName: 'macos-10.14' xcodeVersion: 10.2 @@ -120,7 +118,6 @@ jobs: - job: Windows timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 pool: vmImage: 'vs2017-win2016' steps: From 33fe1db5e1acb70574fb12670f95c2795023056a Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 13 Dec 2019 14:00:41 -0500 Subject: [PATCH 278/400] AZP packaging add daily cron job This will run at 10pm on the master branch when changes have occurred. --- Testing/CI/Azure/azure-pipelines-package.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index c26789112..ef3e82a4c 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -1,3 +1,4 @@ + trigger: tags: include: @@ -6,6 +7,14 @@ trigger: exclude: - '*' pr: none +schedules: +- cron: "0 3 * * *" # 10 pm EST->UTC + displayName: Daily build + branches: + include: + - master + always: false + variables: ExternalDataVersion: 1.2.0 jobs: From df05f7b983ec2918d9b9d614b6149082117e293d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 13 Dec 2019 16:59:19 -0500 Subject: [PATCH 279/400] Use smaller title mark up for Anaconda installation Anaconda installation is under the broader Python installation. --- Documentation/docs/source/installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/docs/source/installation.rst b/Documentation/docs/source/installation.rst index 86259b80d..97d41499d 100644 --- a/Documentation/docs/source/installation.rst +++ b/Documentation/docs/source/installation.rst @@ -68,7 +68,7 @@ Alternatively, the wheels can be manually downloaded from `sourceforge Conda-based distributions (Anaconda, Miniconda) ------------------------------------------------ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From the command line prompt, execute: From 55c25e0ee92ef4a61f4316c663faaa0f278112cf Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 13 Dec 2019 17:00:27 -0500 Subject: [PATCH 280/400] Update installation instruction to latest tag on GitHub --- Documentation/docs/source/installation.rst | 26 ++++++++++++---------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/Documentation/docs/source/installation.rst b/Documentation/docs/source/installation.rst index 97d41499d..315ac8392 100644 --- a/Documentation/docs/source/installation.rst +++ b/Documentation/docs/source/installation.rst @@ -120,20 +120,22 @@ sub-directory. Installation instructions are available at `a visual guide to SimpleITK in Java `__. -Nightly binaries +Latest binaries ---------------- -The **latest binaries** for the current development version of SimpleITK -are also generally available. Binary packages are built as part of the -nightly regression testing system. The download links are available from -the `CDash dashboard `__ -in the "Nightly Packages" section. - -Each row on the dashboard is a SimpleITK build on a particular system, -and if the build was successful there will be a **package icon**: -https://open.cdash.org/img/package.png which links to the packages build -by the system. A user may directly download the built package from such -a link. +If the latest SimpleITK bug fixes or features are required then +pre-release binaries are needed. The pre-release binaries are build +from the actively developed master branch. The SimpleITK packages are +available on `Github releases +`__ under +the "latest" tag. The packages include Python, CSharp and Java. To +install the latest pre-release Python binary package run: + + +.. code-block :: bash + + pip install --pre SimpleITK --find-links https://github.com/SimpleITK/SimpleITK/releases/tag/latest + Recommended Software From 300aaa100369773a4b34cef599264cde99bc74ca Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 13 Dec 2019 17:40:52 -0500 Subject: [PATCH 281/400] Update Java and CSharp installation documentation Point to Github releases to download binaries. Replace old Wiki links with current sphinx links. --- Documentation/docs/source/installation.rst | 37 +++++++++------------- Documentation/docs/source/setUp.rst | 5 +++ 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/Documentation/docs/source/installation.rst b/Documentation/docs/source/installation.rst index 315ac8392..20aedbc07 100644 --- a/Documentation/docs/source/installation.rst +++ b/Documentation/docs/source/installation.rst @@ -62,8 +62,8 @@ filenames. You can update your version of pip using ``pip install -U pip``. Also your Python environment must be compatible with one of the pre-compiled binary wheels. -Alternatively, the wheels can be manually downloaded from `sourceforge -`__ or +Alternatively, the wheels can be manually downloaded from `GitHub releases +`__ or `PyPI `__, and then installed with pip. @@ -87,44 +87,37 @@ under the dev label: C# binary files --------------- -**Binaries for select C# platforms** can be found on `SimpleITK's -SourceForge -page `__ -under the version directory then the CSharp sub-directory. Installing -the library should only involve importing the unzipped files into you -C# environment. The files have the following naming convention: +**Binaries for select C# platforms** can be found on SimpleITK's +`GitHub releases +`__ +under the appropriate version. Installing the library should only +involve importing the unzipped files into you C# environment. The +files have the following naming convention: ``SimpleITK-version-CSharp-buildplatform-targetplatform.zip`` eg. -| ``SimpleITK-1.2.0-CSharp-win32-x86.zip`` | ``SimpleITK-1.2.0-CSharp-win64-x64.zip`` Details about how to set up a C# Visual Studio project with SimpleITK -can be found in the `Visual Guide to SimpleITK with -CSharp `__. +can be found in the :ref:`setup SimpleITK with CSharp `. -More information about getting started with a sample C# program can be -found in `A visual guide to building SimpleITK on -Linux `__ Java binary files ----------------- -**Binaries for select Java platforms** can be found on `SimpleITK's -SourceForge -page `__ -under the version directory then the CSharp -sub-directory. Installation instructions are available at `a visual -guide to SimpleITK in -Java `__. +**Binaries for select Java platforms** can be found on SimpleITK's +`GitHub releases page +`__ +under the appropriate version. Installation instructions are available +at :ref:`setup SimpleITK with Java `. Latest binaries ---------------- If the latest SimpleITK bug fixes or features are required then -pre-release binaries are needed. The pre-release binaries are build +pre-release binaries are needed. The pre-release binaries are built from the actively developed master branch. The SimpleITK packages are available on `Github releases `__ under diff --git a/Documentation/docs/source/setUp.rst b/Documentation/docs/source/setUp.rst index 14218d89b..ca571af47 100644 --- a/Documentation/docs/source/setUp.rst +++ b/Documentation/docs/source/setUp.rst @@ -1,6 +1,8 @@ Setting Up Eclipse and Visual Studio ************************************ +.. _setup-java: + Java ==== @@ -95,6 +97,9 @@ SimpleITK Java Conventions -------------------------- The SimpleITK Java bindings closely follow the C++ conventions, i.e. each class contains the public member functions. However, the functional interface is handled differently in Java. In particular, every static Java function must belong to a class, unlike C++. In SimpleITK, the functional interface is contained in a class called *org.itk.simple.SimpleITK*. This class contains the functional interfaces as static member functions, i.e. *org.itk.simple.SimpleITK.readImage* as shown in `GaussianExample`_. The naming conventions for all SimpleITK classes follows the C++ conventions, but member functions and the function interface follow the Java conventions of using *CamelCase* with the first letter lowercase. In Java, the C++ function *itk::simple::ReadImage* becomes *org.itk.simple.SimpleITK.readImage*. + +.. _setup-csharp: + C# == From 97e640d62e7763e77e4af2442de60bd4e6f1104f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 13 Dec 2019 10:12:56 -0500 Subject: [PATCH 282/400] Add CMake option to use ccache if available --- CMake/sitkUseCCache.cmake | 14 ++++++++++++++ SuperBuild/SuperBuild.cmake | 1 + 2 files changed, 15 insertions(+) create mode 100644 CMake/sitkUseCCache.cmake diff --git a/CMake/sitkUseCCache.cmake b/CMake/sitkUseCCache.cmake new file mode 100644 index 000000000..34673f119 --- /dev/null +++ b/CMake/sitkUseCCache.cmake @@ -0,0 +1,14 @@ +# Add CMake option to automatically use ccache. +# +# The ccache in CMAKE_CXX_COMPILER_LAUNCHER and +# CMAKE_C_COMPILER_LAUNCHER variables. + +option(USE_CCACHE "Use ccache to expedite re-compilations. Recommended for development" OFF) +if(USE_CCACHE) + find_program(CCACHE_PROGRAM ccache) + if(CCACHE_PROGRAM) + message(STATUS "Enabling ccache") + set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_PROGRAM}) + set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_PROGRAM}) + endif() +endif() diff --git a/SuperBuild/SuperBuild.cmake b/SuperBuild/SuperBuild.cmake index 9274d5eee..f11a47050 100644 --- a/SuperBuild/SuperBuild.cmake +++ b/SuperBuild/SuperBuild.cmake @@ -47,6 +47,7 @@ include(sitkPreventInBuildInstalls) include(VariableList) include(sitkExternalData) include( sitkSITKLegacyNaming ) +include(sitkUseCCache) From 8411c4470f5a299b0b6240d14f9135743c63b5e8 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 13 Dec 2019 10:14:12 -0500 Subject: [PATCH 283/400] Enable gold linker by default, add CMake Option USE_GOLD_LINKER --- CMake/sitkUseGoldLinker.cmake | 31 +++++++++++++++++++++++++++++++ SuperBuild/SuperBuild.cmake | 1 + 2 files changed, 32 insertions(+) create mode 100644 CMake/sitkUseGoldLinker.cmake diff --git a/CMake/sitkUseGoldLinker.cmake b/CMake/sitkUseGoldLinker.cmake new file mode 100644 index 000000000..755af8af0 --- /dev/null +++ b/CMake/sitkUseGoldLinker.cmake @@ -0,0 +1,31 @@ +# Add CMake option for linker flags to enable GNU's gold linker. +# +# By default the if the "use-ld=gold" flag is supported by the +# compiler then it is used. +# +# USE_GOLD_LINKER - a CMake option used to control the usage of the +# gold linker. + +include(CheckCXXCompilerFlag) + +function(sitk_check_gold_linker output_var) + if (MSVC) + set(have_fold 0) + else() + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fuse-ld=gold") + check_cxx_source_compiles("int main() {return 0;}" have_gold) + endif() + set("${output_var}" "${have_gold}" PARENT_SCOPE) +endfunction() + +if(NOT DEFINED USE_GOLD_LINKER) + sitk_check_gold_linker(_USE_GOLD_LINKER_default) +endif() + +option(USE_GOLD_LINKER "Use ld.gold linker (decreases linking time if available)" ${_USE_GOLD_LINKER_default}) +mark_as_advanced(USE_GOLD_LINKER) +if(USE_GOLD_LINKER) + set(CMAKE_EXE_LINKER_FLAGS "-fuse-ld=gold ${CMAKE_EXE_LINKER_FLAGS}") + set(CMAKE_MODULE_LINKER_FLAGS "-fuse-ld=gold ${CMAKE_MODULE_LINKER_FLAGS}") + set(CMAKE_SHARED_LINKER_FLAGS "-fuse-ld=gold ${CMAKE_SHARED_LINKER_FLAGS}") +endif() diff --git a/SuperBuild/SuperBuild.cmake b/SuperBuild/SuperBuild.cmake index f11a47050..c90bc4c68 100644 --- a/SuperBuild/SuperBuild.cmake +++ b/SuperBuild/SuperBuild.cmake @@ -48,6 +48,7 @@ include(VariableList) include(sitkExternalData) include( sitkSITKLegacyNaming ) include(sitkUseCCache) +include(sitkUseGoldLinker) From 37aadba25ed9a3c58105134cf4a36c3b511c33b0 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 16 Dec 2019 10:57:32 -0500 Subject: [PATCH 284/400] Update GTest version to 1.10.0 in super build --- SuperBuild/External_GTest.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_GTest.cmake b/SuperBuild/External_GTest.cmake index 55ec78264..d0f5c3a90 100644 --- a/SuperBuild/External_GTest.cmake +++ b/SuperBuild/External_GTest.cmake @@ -10,7 +10,7 @@ set(proj GTest) set(GTEST_GIT_REPOSITORY "${git_protocol}://github.com/google/googletest.git" CACHE STRING "Google Test repository") mark_as_advanced(GTEST_GIT_REPOSITORY) -set(GTEST_GIT_TAG "0fe96607d85cf3a25ac40da369db62bbee2939a5" CACHE STRING "Tag or hash for GTtest git repo") +set(GTEST_GIT_TAG "release-1.10.0" CACHE STRING "Tag or hash for GTtest git repo") mark_as_advanced(GTEST_GIT_TAG) set(GTEST_TAG_COMMAND GIT_TAG "${GTEST_GIT_TAG}") From f421479720a0d354a6ded126aa76d37c7e709598 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 16 Dec 2019 15:02:59 -0500 Subject: [PATCH 285/400] Update URL to follow ITK commit hooks --- Utilities/GitSetup/config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utilities/GitSetup/config b/Utilities/GitSetup/config index fb0b9727f..b6efbbc9a 100644 --- a/Utilities/GitSetup/config +++ b/Utilities/GitSetup/config @@ -1,5 +1,5 @@ [hooks] - url = http://public.kitware.com/GitSetup.git + url = https://github.com/InsightSoftwareConsortium/ITK.git [upstream] url = https://github.com/SimpleITK/SimpleITK.git remote = upstream From c180348d3c3b9668619a161850ee55f1acfc2c0b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 16 Dec 2019 16:12:19 -0500 Subject: [PATCH 286/400] Replaced by the Filter Progress Reported example --- Documentation/Doxygen/CommandsAndEvents.dox | 65 --------------------- 1 file changed, 65 deletions(-) delete mode 100644 Documentation/Doxygen/CommandsAndEvents.dox diff --git a/Documentation/Doxygen/CommandsAndEvents.dox b/Documentation/Doxygen/CommandsAndEvents.dox deleted file mode 100644 index 987c6e982..000000000 --- a/Documentation/Doxygen/CommandsAndEvents.dox +++ /dev/null @@ -1,65 +0,0 @@ -namespace itk { -namespace simple { -/** \page CommandPage Commands and Events for SimpleITK - -SimpleITK has the ability to add commands or callbacks as observers of -events that may occur during data processing. This feature can be used to add -progress reporting to a console, to monitor the process of optimization, -to abort a process, or to improve the integration of -SimpleITK into Graphical User Interface event queues. - -\section Events - -Events are a simple enumerated type in SimpleITK, represented by -the #EventEnum type. More information about each event type can be -found in the documentation for the enum. All SimpleITK filters, including the reading -and writing ones, are derived from the ProcessObject class which has -support for events. SimpleITK utilizes the native ITK event system -but has simpler events and methods to add an observer or commands. The goal -is to provide a simpler interface more suitable for scripting -languages. - -\section Commands - -The command design pattern is used to allow user code to be executed -when an event occurs. It is encapsulated in the Command class. The -Command class provides a virtual Execute method to be overridden in -derived classes. Additionally, SimpleITK provides internal reference -tracking between the ProcessObject and the Command. This reference tracking -allows an object to be created on the stack or dynamically allocated, without -additional burden when the object - -\subsection CommandDirector Command Directors for Wrapped Languages - -SimpleITK uses SWIG's director feature to enable wrapped languages to -derive classes from the Command class. Thus a user may override the -Command class's Execute method for custom call-backs. The following -languages support deriving classes from the Command class: - -\subsubsection CommandPython -\snippet FilterProgressReporting.py python director command - -\subsubsection CommandCSharp -\snippet FilterProgressReporting.cs csharp director command - -\subsubsection CommandRuby -\snippet FilterProgressReporting.rb ruby director command - - -\subsection CommandFunction Command Functions and Lambdas for Wrapped Languages - -Not all scripting languages are naturally object oriented, and it is -often easier to simply define a callback inline with a lambda -function. The following language supports inline function definitions -for functions for the ProcessObject::AddCommand method: - -\subsubsection CommandFunctionPython -\snippet FilterProgressReporting.py python lambda command - -\subsubsection CommandFunctionR -\snippet FilterProgressReporting.R R lambda command - - -*/ -} -} From 6a1686bba9e08f33d88e4544d30535114f924ef4 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 16 Dec 2019 16:14:43 -0500 Subject: [PATCH 287/400] Replaced by the Fundamental Concepts sphix page --- Documentation/Doxygen/Conventions.dox | 91 --------------------------- 1 file changed, 91 deletions(-) delete mode 100644 Documentation/Doxygen/Conventions.dox diff --git a/Documentation/Doxygen/Conventions.dox b/Documentation/Doxygen/Conventions.dox deleted file mode 100644 index 4af3643cd..000000000 --- a/Documentation/Doxygen/Conventions.dox +++ /dev/null @@ -1,91 +0,0 @@ -namespace itk { -namespace simple { -/** \page ConventionsPage Common Conventions for SimpleITK - -This document contains common conventions that SimpleITK filters, and -objects follow. It is intended to describe the interfaces that users -should use and developers should implement. If a method or class does -not specify different behavior or default values then those described -here, it should be assumed that it follows the following conventions. - -\section DimensionVectors Dimensional Vectors - -Dimensional Vectors must contain at least the number of elements as -the dimensions of the image, elements beyond the image's dimension will -be truncated. - -The SimpleITK image class can contain 2 or 3 dimensional images. In -ITK proper, certain types such as indexes, points, and sizes are -templated over the image dimensions. In SimpleITK we utilize the -variable length std::vector for these types, so that non-templated -calls can wrap ITK's templated image class. These types are called -Dimensional Vectors. If a dimensional vector's length is less that the -dimension of the image, an exception will be generated when converted -to the ITK type. If there are extra elements in the dimensional vector -these values will be ignored. - -\section ImageAccess Image Access - -Image access is in x,y,z order, GetPixel(x,y,z) or image[x,y,z], -with zero based indexing. - -\section MaskDefaults Mask Image Types and Default Values - -The default mask image type is a scalar image of sitkUInt8 or uint8_t -pixels. The default values are 0 and 1, with 1s representing the mask. - -These defaults are for filter which create masks such as -thresholding, and certain other segmentation filters. Additionally, these -are the defaults for the binary morphology filters, so that they can -easily be applied after segmentation. This choice makes many mask -manipulations easier. For example, "masking" an image ( scalar or -vector ) is simply a matter of multiplying by a mask an -image. Additionally, the set of { 0, 1 } pixels is closed under the -logical Boolean operators. - -\section ProcedualParameters Order of Procedural Parameters - -The order of the procedural parameters should be with the most -frequently modified parameters at the beginning of the parameter -list. While the last parameter, may be ones that the user does not -need to set or are infrequently used. - -\section MatricesAsParameters Matrices as Parameters - -Matrices are represented as a single dimensional vector with the entries -in row major order. The vector \f$[1,2,3,4,5,6]\f$ represents the matrix -\f[ -\left[\begin{array}{ccc} 1 & 2 & 3 \\ 4 & 5 & 6 \end{array}\right] -\f] - -\section ImageRegions Image Regions as Index and Size - -The itk::ImageRegion is a frequently used class in ITK to define a -sub-image area. It is defined by itk::Index and itk::Size of signed -and unsigned integer types respectfully. In SimpleITK, the index and -size elements are usually separated into two arguments with separate -Set and Get methods. - -When specified as a single argument value, it is a 1 dimensional -array with the index values followed by the size values i.e. \f$[idx_x, -idx_y, idx_z, size_x, size_y, size_z]\f$. - - -\section ImagesAsParameters Images As Parameters - -The dimensionality (2D or 3D) and pixel type (sitkUInt8, sitkFloat64...) of images is required to be the same -for most methods that receive multiple images as input. - -The ImageRegistrationMethod only supports images with sitkFloat32 and sitkFloat64 pixel types. - -Casting an image's pixel type into another is done with the SimpleITK Cast() function. - - -\section FollowITK Follow ITK Conventions - -If not explicitly stated otherwise, then filter parameters are the -same default values as those in ITK proper. - - -*/ -}} From d89baf07cf2c347d6ad8d5b2f9e1c5e9fbb0a213 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 16 Dec 2019 16:15:18 -0500 Subject: [PATCH 288/400] Remove old git philosophy page --- Documentation/Doxygen/GitPhilosophy.dox | 62 ------------------------- 1 file changed, 62 deletions(-) delete mode 100644 Documentation/Doxygen/GitPhilosophy.dox diff --git a/Documentation/Doxygen/GitPhilosophy.dox b/Documentation/Doxygen/GitPhilosophy.dox deleted file mode 100644 index d3dab9058..000000000 --- a/Documentation/Doxygen/GitPhilosophy.dox +++ /dev/null @@ -1,62 +0,0 @@ -namespace itk { -namespace simple { -/** -\page GitPage Git philosophy -This document records the standard operating procedure and philosophy -of SimpleITK's use of Git. - -\section TopicBranch The life of a topic branch - -In order to properly manage this workflow, we need to be very careful -about always basing our branches off of master and tracking the -dependencies of each branch. The steps needed to do this are: - --# base new topics off of the most up to date master --# merge to next --# if there is a conflict when merging to next, abort the merge, find the branch that causes the conflict, and merge it into your branch, resolving conflicts here --# merge to next only when there are no conflicts left - - Here are the details: -\code - $ git checkout master - $ git pull (just to make sure master is up to date) - $ git checkout -b BRANCHNAME (we should also standardize our branch names) - ... do work and make commits on BRANCHNAME ... - $ git stage-push - $ git stage-merge -\endcode -Here's where the tricky part is. If you get conflicts here, that -means that there's some branch that's been merged to next which -conflicts with your changes and isn't in master. Instead of just -resolving this conflict while merging BRANCH_NAME, you should -introduce a dependency with the conflicting branch. To do this you -need to find the branch that conflicts and merge it with your own -(resolving the conflict here instead). - -The stage should produce a message to aid in the process of resolving -the failed merge. - -\section Discussion A philosophical discussion - - Ok, that was a lot of git jargon and was probably more than you - wanted to know. The question now is whether it's all worth it. This - workflow is really nice because it keeps topics in nice, logically - isolated, branches where dependencies between topics only exist when - necessary. That being said, who cares? - - The main advantage here is a clean history and a nicely stable branch - that stays up to date with all finished work (rather than needing to - prep releases at regular intervals). Since SimpleITK is under heavy - development, we aren't trying to provide any guarantees to anyone - about a stable master branch and since most of us are only working - part time on this project, using this workflow might just be too much - overhead (especially if we're going to switch to using Gerrit soon - anyway). - - The alternative would be to just go back to a single "wild west" - style integration branch. This would offer the advantage of lowering - the git bar significantly, but it would also mean that we would lose - our designated QA space (the role that next currently plays). - Thoughts? Competing theories? -*/ -}} From c501bcfde7e8d4a6b8ec389d372947ea85eeb0ee Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 16 Dec 2019 16:17:02 -0500 Subject: [PATCH 289/400] Remove old out of date developer Doxygen page. This page has been replaced by .github/CONTRIBUTING.md --- Documentation/Doxygen/Developer.dox | 228 ---------------------------- 1 file changed, 228 deletions(-) delete mode 100644 Documentation/Doxygen/Developer.dox diff --git a/Documentation/Doxygen/Developer.dox b/Documentation/Doxygen/Developer.dox deleted file mode 100644 index 77ff932ce..000000000 --- a/Documentation/Doxygen/Developer.dox +++ /dev/null @@ -1,228 +0,0 @@ -namespace itk { -namespace simple { -/** -\page DeveloperPage SimpleITK Developer Notes - -\section Procedures Procedures - -\subsection Contributions User Contributions - -Users can contribute patches through the gerrit code review system: -http://review.source.kitware.com/#q,SimpleITK,n,z - -General information about Gerrit can be found here: -http://gerrit.googlecode.com/svn/documentation/2.2.1/user-upload.html - - -For those already familiar with git, gerrit, ITK and building SimpelITK, here is a quick overview of the process: - -The first thing which should be done before any code is committed locally is running the script to setup your local git repository for development. - -\code -$ Utilities/SetupForDevelopment.sh -\endcode - -This will guide you through the processes of adding several repositories and local configuration options. - -The following is an overview of how to add commits locally, and push the changes to gerrit: - -\code -$ git checkout master -$ git pull -$ git checkout -b $MyTopic$ -hack and edit -compile and test -$ git add $MyHackedFiles$ -$ git commit -$ git prepush -$ git gerrit-push -\endcode - -The goal of this workflow here is just have one or two commits in the -topic, so that it will be easy to review. If longer topics are needed, -that is OK to, but please try to reach out to the SimpleITK -development community first. Please upload any new testing data as described -below. - -If you are not too familiar with these tools, this aspect of submitting -patch to gerrit is the same as for ITK development. So the overview of -ITK development process may be a better starting point: -https://www.itk.org/Wiki/ITK/Git/Develop - -\subsection Add Binary Data to a Commit - -Since every local Git repository contains a copy of the entire project history, -it is important to avoid adding large binary files directly to the repository. -Large binary files added and removed through the history of a project will cause -the repository to become bloated, take up too much disk space, require excessive -time and bandwidth to download, etc. - -The solution to this problem adopted by this project is to store binary files, -such as images, in a separate location outside the repository, then download the -files at build time with CMake. - -A content link file containing an identifying MD5 checksum is stored in the -Git repository at the path where the file would exist with the .md5 extension -added to the file. CMake will find these content link files at build time, -download them from a list of server resources, and create symlinks or copies of -the original files at the corresponding location in the build tree. - -The Midas server is an ITK -community resource where any community member can upload binary data files. -This script automates the upload of data to the server and generation of the -content link file. Before using this script, please go to the Midas website, -register, and join the ITK community. - -This script requires the Python module pydas: which can be -installed with: - -\code -$ pip install pydas -\endcode - -Please use the content link system for all new test images and other binary -data. An example: - -\code -cd ~/src/SimpleITK -cp /path/to/NewInput.png ./Testing/Input/ -python ./Utilities/UploadBinaryData.py ./Testing/Input/NewInput.png -git add -- ./Testing/Input/NewInput.png.md5 -\endcode - -\subsection Dashboards Setup a Dashboard - -The SimpleITK Dashboard is a central location where systems report on -continuous or nightly compilation and testing results. It is a -invaluable tool in the extreme programming or agile development -process. The SimpleITK -dashboard is now a standalone dashboard. - -The following is a brief overview on how to contribute a nightly -build to SimpleITK. Additional relevant information can be found on -the CTest -documentation page along with similar information on how to setup a -dashboard for ITK. - -SimpleITK uses CTest to run the nightly dashboards. There are 3 things -which are needed to setup a nightly dashboard. The first is the common -CTest scripts. Second, is a custom script to configure SimpleITK for -your system, and third is the configuration of a system tool to run -the CTest script each night. - -- The common script(s) are contained in the dashboards - branch. Essentially, this branch contains the - "simpleitk_common.cmake" file which will be included in the next - step. It can be retrieved as follows: -\code -$ mkdir -p ~/Dashboards/SimpleITKScripts -$ cd ~/Dashboards/SimpleITKScripts -$ git init -$ git remote add -t dashboard origin git://itk.org/SimpleITK.git -$ git pull origin -\endcode - -- Next, we need to create a custom CTest script for our system. More - information on the variable are describe in the header of - "simpleitk_common.cmake". Here is a sample which can be place in - "~/Dashboards/SimpleITKScripts/simpleitk_nightly.cmake": -\code -# -# Maintainer: blowekamp@mail.nih.gov -# - -# Set names -set( CTEST_SITE "mini5.nlm" ) -set( CTEST_BUILD_NAME "MacOSX-SimpleITK-super-next" ) - -# Set how and where to build -set( CTEST_BUILD_CONFIGURATION "Release" ) -set( CTEST_CMAKE_GENERATOR "Unix Makefiles" ) -set ( CTEST_DASHBOARD_ROOT "$ENV{PLAYPEN}/${CTEST_BUILD_NAME}" ) - -set( dashboard_model Nightly ) - -set ( dashboard_git_branch "next" ) - -# Enable usage of multi-processors -set ( CTEST_BUILD_FLAGS -j2 ) -set ( CTEST_TEST_ARGS PARALLEL_LEVEL 2 ) - - -# Set initial values for the CMakeCache -set ( dashboard_cache " -CMAKE_CXX_COMPILER:STRING=$ENV{HOME}/local/bin/ccache-c++ -CMAKE_CXX_FLAGS:STRING=-Wall -CMAKE_C_COMPILER:STRING=$ENV{HOME}/local/bin/ccache-cc -CMAKE_C_FLAGS:STRING=-Wall -") - -# Include common ctest script -include(${CTEST_SCRIPT_DIRECTORY}/simpleitk_common.cmake) -\endcode - -- Lastly, the following needs to be executed each night: -\code -$ ctest -S ~/Dashboards/SimpleITKScripts/simpleitk_nightly.cmake -\endcode - -Depending on your system the tool needed is different. For Unix and -Mac OSX operating system it's the cron daemon, while on windows it is -Scheduler. More information can be found on the general CMake -Scripting Of CTest wiki page. - - -\section TandT Tips and Tricks - -\subsection JSONTips Working with JSON file. - -SimpleITK uses a large number of JSON files as input for generated code. Adding support for your text editor to understand the syntax is advantageous. - --Emacs - -The following can be added to your ".emacs" file. - -\verbatim -; Add JSON files to automode list, use javascript mode -(add-to-list 'auto-mode-alist '("\\.json\\'" . js-mode) ) -(add-hook 'js-mode-hook (function (lambda () - (setq tab-width 2 - c-basic-offset 2 - show-trailing-whitespace 1) ) ) ) -\endverbatim - -\subsection CCacheTips Using ccache to accelerate re-compilation. - -SimpleITK has a complicated set of dependency that is handled the best -it can be with CMake and the code generation tools -implemented. However, when switching between branches and making -changes to certain files, such as the "Expand" templates a large -number of files will have to be re-compiled. Even though the generated -code may not have changed, it's impossible for CMake or your make-file -tool to determine this. - -Fortunately, there is a tool which can cache results of compilation and -reduce recompilation. Using ccache -can greatly accelerate the development time when rebuilding -SimpleITK frequently. Usage is quite simple, download and -install. However, getting CMake to work with the compiler requires -setting a few environmental variables: - -\verbatim -CXX=/usr/local/bin/ccache /usr/bin/g++-4.2 -CC=/usr/local/bin/ccache /usr/bin/gcc-4.2 -\endverbatim - -These variables need to be set bfore CMake is run, so that it will -correctly detect the compiler and configure SimpleITK. Now enjoy the -faster re-compilation times. - - -*/ -}} From a0d2d8f6fff66411b54f6ce84c569ea0e3d0e451 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 17 Dec 2019 06:58:26 -0500 Subject: [PATCH 290/400] Explicitly enable C++11 when building google test Per the GTest documentation it is expected C++11 is enabled at configuration time. It is also marked as a required feature when using the library. --- CMake/sitkUseGTest.cmake | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CMake/sitkUseGTest.cmake b/CMake/sitkUseGTest.cmake index 8b8f5ea5d..f2892544e 100644 --- a/CMake/sitkUseGTest.cmake +++ b/CMake/sitkUseGTest.cmake @@ -31,6 +31,10 @@ function(_sitk_gtest_use_gtest_source) set(CMAKE_CXX_VISIBILITY_PRESET) set(CMAKE_VISIBILITY_INLINES_HIDDEN) + set(CMAKE_CXX_STANDARD 11) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + + set(BUILD_GTEST ON ) set(BUILD_GMOCK OFF) @@ -70,6 +74,9 @@ if( DEFINED GTEST_ROOT AND EXISTS "${GTEST_ROOT}/CMakeLists.txt") _sitk_gtest_use_gtest_source() + target_compile_features(${GTEST_LIBRARIES} PUBLIC cxx_std_11) + target_compile_features(${GTEST_MAIN_LIBRARIES} PUBLIC cxx_std_11) + add_library(GTest::GTest ALIAS ${GTEST_LIBRARIES}) add_library(GTest::Main ALIAS ${GTEST_MAIN_LIBRARIES}) From 805e8fc2b8b686c59c8c8507f329467f02ab1fd1 Mon Sep 17 00:00:00 2001 From: Ziv Yaniv Date: Tue, 17 Dec 2019 10:50:51 -0500 Subject: [PATCH 291/400] Changed the github links from directly pointing to the latest release. The previous link led to a page which only contained information with respect to the latest version/release. It is better to point to the page where all releases appear and the user can search that page. Otherwise they won't know where to go if by latest release, they actually wanted the release and not latest development version. --- Documentation/docs/source/installation.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/docs/source/installation.rst b/Documentation/docs/source/installation.rst index 20aedbc07..86fd323e0 100644 --- a/Documentation/docs/source/installation.rst +++ b/Documentation/docs/source/installation.rst @@ -89,7 +89,7 @@ C# binary files **Binaries for select C# platforms** can be found on SimpleITK's `GitHub releases -`__ +`__ under the appropriate version. Installing the library should only involve importing the unzipped files into you C# environment. The files have the following naming convention: @@ -109,7 +109,7 @@ Java binary files **Binaries for select Java platforms** can be found on SimpleITK's `GitHub releases page -`__ +`__ under the appropriate version. Installation instructions are available at :ref:`setup SimpleITK with Java `. From 70e4ad38c6ec3ee3112e78d1d8b304be600407e4 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 17 Dec 2019 13:25:28 -0500 Subject: [PATCH 292/400] Move filter template doxygen page to sphinx docs path --- .../FilterTemplates.dox => docs/source/FilterTemplates.rst} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Documentation/{Doxygen/FilterTemplates.dox => docs/source/FilterTemplates.rst} (100%) diff --git a/Documentation/Doxygen/FilterTemplates.dox b/Documentation/docs/source/FilterTemplates.rst similarity index 100% rename from Documentation/Doxygen/FilterTemplates.dox rename to Documentation/docs/source/FilterTemplates.rst From e19657a98ab0d4f847dd884fb85467358f2ab982 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 17 Dec 2019 13:26:31 -0500 Subject: [PATCH 293/400] Update to sphinx/rst markup --- Documentation/docs/source/FilterTemplates.rst | 868 +++++++++--------- 1 file changed, 448 insertions(+), 420 deletions(-) diff --git a/Documentation/docs/source/FilterTemplates.rst b/Documentation/docs/source/FilterTemplates.rst index 2ef8dffcc..8bdf37676 100644 --- a/Documentation/docs/source/FilterTemplates.rst +++ b/Documentation/docs/source/FilterTemplates.rst @@ -1,436 +1,464 @@ -namespace itk { -namespace simple { -/** -\page FilterTemplatesPage Image Filter Templates ReadMe - -This ReadMe outlines the system used to generate SimpleITK files using json -data files in conjunction with the template .h and .cxx files - - -\section Overview Overview -In order to create a uniform body of image filters, we use an automated code -generation system to wrap existing ITK filters into SimpleITK filters. The -development process consists of writing a JSON data file which specifies the -information needed to fill in the fields of the template file. During -compilation, all of the .json files are parsed using a lua template engine -which fills in the appropriate template file from the provided fields. This -ReadMe provides a detailed description of the fields that can be used in the -json data files and what effect each field has on the resulting image filter. -When writing your own json file, it should be saved in: - -$SimpleITK_SOURCE_DIR/Code/$FILTER_DIR/json - -Here $FILTER_DIR is the directory in which the code for the generated filter -should live. For simple filters this is the "BasicFilters" directory. - -\section FileStructure JSON File Structure -JSON (JavaScript Object Notation) is a simple text formatting system used to -specify data values. A full description of the specification can be found at -http://www.json.org/. For the purposes of SimpleITK, a json file consists of -a single data object (denoted by {}) which contains several string : value -pairs (here value may be a list denoted by []) and sub-objects. Here is an -example from LaplacianRecursiveGaussian: - -\verbatim -{ - "name" : "LaplacianRecursiveGaussianImageFilter", - "template_code_filename" : "ImageFilter", - "template_test_filename" : "ImageFilter", - "doc" : "", - "number_of_inputs" : 1, - "pixel_types" : "BasicPixelIDTypeList", - "output_pixel_type" : "float", - "members" : [ - { - "name" : "Sigma", - "type" : "double", - "default" : "1.0", - "doc" : "", - "briefdescriptionSet" : "", - "detaileddescriptionSet" : "Set Sigma value. Sigma is measured in the units of image spacing.", - "briefdescriptionGet" : "", - "detaileddescriptionGet" : "Set Sigma value. Sigma is measured in the units of image spacing." - }, - { - "name" : "NormalizeAcrossScale", - "type" : "bool", - "default" : "false", - "doc" : "", - "briefdescriptionSet" : "", - "detaileddescriptionSet" : "Define which normalization factor will be used for the Gaussian \\see RecursiveGaussianImageFilter::SetNormalizeAcrossScale", - "briefdescriptionGet" : "", - "detaileddescriptionGet" : "Define which normalization factor will be used for the Gaussian \\see RecursiveGaussianImageFilter::SetNormalizeAcrossScale" - } - ], - "tests" : [ - { - "tag" : "default", - "description" : "Simply run with default settings", - "settings" : [], - "tolerance" : 0.0001, - "inputs" : [ - "Input/RA-Float.nrrd" - ] - } - ], - "briefdescription" : "Computes the Laplacian of Gaussian (LoG) of an image.", - "detaileddescription" : "Computes the Laplacian of Gaussian (LoG) of an image by convolution with the second derivative of a Gaussian. This filter is implemented using the recursive gaussian filters.", - "itk_module" : "ITKImageFeature", - "itk_group" : "ImageFeature" -} -\endverbatim - -In this example, we see that all pairs must use a string as the key, but may -have any valid type as the value (string - "Abs", number - 1, list - [], -object - {}). - -\section GlobalFields Fields For All Templates - -This section describes the minimal set of fields required to wrap an ITK filter -into SimpleITK. - -\subsection TopLevelFields Top Level Fields - -- \b name: (\e string) This must be the name of the ITK filter. - -- \b template_code_filename: (\e string) Which of the template files should be -used to generate the filter. Choices are: "ImageFilter", -"RegionGrowingImageFilter", "StructuringElementImageFilter", -"LevelSetImageFilter", "MathematicalMorphologyImageFilter" - -- \b template_test_filename: (\e string) Which of the template files should be -used to generate the test for this filter. Choices are: "ImageFilter", -"RegionGrowingImageFilter" - -- \b number_of_inputs: (\e integer) How many input images are used for this -filter. Currently, the template system only supports filters with 1 or 2 input -images - -- \b briefdescription: (\e string) Brief description of the class - (Doxygen format). This string is automatically generated by the - Utilities/BuildDocs and Utilities/GenerateDocumentation.groovy - scripts. If no corresponding ITK class exists, this field will not - be modified. This field is maintained with the JSONDocUpdate.sh script. - -- \b detaileddescription: (\e string) More detailed description of the class - (Doxygen format). This string is automatically generated by the - Utilities/BuildDocs and Utilities/GenerateDocumentation.groovy - scripts. If no corresponding ITK class exists, this field will not - be modified. This field is maintained with the JSONDocUpdate.sh script. - -- \b pixel_types: (\e string) Which of the pixel type lists should be supported -for this filter. The type lists are defined in sitkPixelIDTypeLists.h - -- \b members: (\e list) This list specifies all member variables that should be -accessible to the user with a Get/Set mechanism and should be part of the -Execute signature for the filter. Each entry in the list must be an object - -- \b tests: (\e list) This list specifies all automatic tests that should be -generated for the filter. Each entry in the list must be an object. If no tests -are specified, a test will be generated that fails with the message that a test -must be written for the filter - -- \b itk_module: (\e string) A string naming the ITK module the filter - originates from. If the ITK installation used for building SimpleITK does - not have this named module then the filter will be omitted in SimpleITK. This filed - is maintained JSONUpdateITKModules.py script. - -- \b itk_group: (\e string) A string naming the ITK group the ITK filter originates. - -- [OPTIONAL] \b include_files: (\e list) This list of strings specifies -additional header files to include in the cxx file for this filter. - -- [OPTIONAL] \b custom_set_intput: (\e string) Code which is used to - set input or multiple inputs to the filter. This overrides the - standard setting of the inputs. - -- [OPTIONAL] \b output_pixel_type: (\e string) String representing the specific -pixel type to use for the output image of the filter. - -- [OPTIONAL] \b filter_type: (\e string) Explicitly sets the - FilterType used. This method overrides - additional_template_types. Useful typedefs are InputImageType, and - OutputImageType. - -- [OPTIONAL] \b public_declarations: (\e string) Any c++ code written in this -field will be placed into the public section of the filter's header file - -- [OPTIONAL] \b additional_template_types: (\e list) The standard ITK image -filter template signature is: - -\verbatim - -\endverbatim - -Some filters require additional template types between the list of input image -types and the output image type such as the input type of a constant. This list -allows these additional parameters to be added so that the template signature -looks like: - -\verbatim - -\endverbatim - -Each type in the list is specified by an object with a only a \b type field -which is a string specifying the type to be used. - -- [OPTIONAL] \b custom_methods: (\e list) This is a list of objects specifying -custom methods that should be added to the filter. The fields required for a -custom method are: - - \b doc: (\e string) Documentation for this custom method - - \b name: (\e string) The name of the method - - \b return_type: (\e string) the return type of the method - - [OPTIONAL] \b parameters: (\e list) A list of parameters for the method. - Each method is specified by an object with the following fields: - - \b type: (\e string) The parameter's type - - \b var_name: (\e string) The name of the variable to be used in the \b body - field for the custom method +Image Filter Templates ReadMe +***************************** + +This document outlines the system used to generate SimpleITK files using +json data files in conjunction with the template .h and .cxx files. + +.. + .. contents:: On this page + :local: + :backlinks: none + +Overview +======== + +In order to create a uniform body of image filters, we use an automated +code generation system to wrap existing ITK filters into SimpleITK +filters. The development process consists of writing a JSON data file +which specifies the information needed to fill in the fields of the +template file. During compilation, all of the .json files are parsed +using a lua template engine which fills in the appropriate template file +from the provided fields. This ReadMe provides a detailed description of +the fields that can be used in the json data files and what effect each +field has on the resulting image filter. When writing your own json +file, it should be saved in: +``SimpleITK_SOURCE_DIR/Code/$FILTER_DIR/json`` + +Here ``$FILTER_DIR`` is the directory in which the code for the +generated filter should live. For simple filters this is the +“BasicFilters” directory. + +JSON File Structure +=================== + +JSON (JavaScript Object Notation) is a simple text formatting system +used to specify data values. A full description of the specification can +be found at http://www.json.org/. For the purposes of SimpleITK, a json +file consists of a single data object (denoted by {}) which contains +several string : value pairs (here value may be a list denoted by []) +and sub-objects. Here is an example from LaplacianRecursiveGaussian: + +:: + + { + "name" : "LaplacianRecursiveGaussianImageFilter", + "template_code_filename" : "ImageFilter", + "template_test_filename" : "ImageFilter", + "doc" : "", + "number_of_inputs" : 1, + "pixel_types" : "BasicPixelIDTypeList", + "output_pixel_type" : "float", + "members" : [ + { + "name" : "Sigma", + "type" : "double", + "default" : "1.0", + "doc" : "", + "briefdescriptionSet" : "", + "detaileddescriptionSet" : "Set Sigma value. Sigma is measured in the units of image spacing.", + "briefdescriptionGet" : "", + "detaileddescriptionGet" : "Set Sigma value. Sigma is measured in the units of image spacing." + }, + { + "name" : "NormalizeAcrossScale", + "type" : "bool", + "default" : "false", + "doc" : "", + "briefdescriptionSet" : "", + "detaileddescriptionSet" : "Define which normalization factor will be used for the Gaussian \\see RecursiveGaussianImageFilter::SetNormalizeAcrossScale", + "briefdescriptionGet" : "", + "detaileddescriptionGet" : "Define which normalization factor will be used for the Gaussian \\see RecursiveGaussianImageFilter::SetNormalizeAcrossScale" + } + ], + "tests" : [ + { + "tag" : "default", + "description" : "Simply run with default settings", + "settings" : [], + "tolerance" : 0.0001, + "inputs" : [ + "Input/RA-Float.nrrd" + ] + } + ], + "briefdescription" : "Computes the Laplacian of Gaussian (LoG) of an image.", + "detaileddescription" : "Computes the Laplacian of Gaussian (LoG) of an image by convolution with the second derivative of a Gaussian. This filter is implemented using the recursive gaussian filters.", + "itk_module" : "ITKImageFeature", + "itk_group" : "ImageFeature" + } + +In this example, we see that all pairs must use a string as the key, but +may have any valid type as the value (string - “Abs”, number - 1, list - +[], object - {}). + +Fields For All Templates +------------------------ + +This section describes the minimal set of fields required to wrap an ITK +filter into SimpleITK. + +Top Level Fields +---------------- + +- **name**: (*string*) This must be the name of the ITK filter. + +- **template_code_filename**: (*string*) Which of the template files + should be used to generate the filter. Choices are: “ImageFilter”, + “RegionGrowingImageFilter”, “StructuringElementImageFilter”, + “LevelSetImageFilter”, “MathematicalMorphologyImageFilter” + +- **template_test_filename**: (*string*) Which of the template files + should be used to generate the test for this filter. Choices are: + “ImageFilter”, “RegionGrowingImageFilter” + +- **number_of_inputs**: (*integer*) How many input images are used for + this filter. Currently, the template system only supports filters + with 1 or 2 input images + +- **briefdescription**: (*string*) Brief description of the class + (Doxygen format). This string is automatically generated by the + Utilities/BuildDocs and Utilities/GenerateDocumentation.groovy + scripts. If no corresponding ITK class exists, this field will not be + modified. This field is maintained with the JSONDocUpdate.sh script. + +- **detaileddescription**: (*string*) More detailed description of the + class (Doxygen format). This string is automatically generated by the + Utilities/BuildDocs and Utilities/GenerateDocumentation.groovy + scripts. If no corresponding ITK class exists, this field will not be + modified. This field is maintained with the JSONDocUpdate.sh script. + +- **pixel_types**: (*string*) Which of the pixel type lists should be + supported for this filter. The type lists are defined in + sitkPixelIDTypeLists.h + +- **members**: (*list*) This list specifies all member variables that + should be accessible to the user with a Get/Set mechanism and should + be part of the Execute signature for the filter. Each entry in the + list must be an object + +- **tests**: (*list*) This list specifies all automatic tests that + should be generated for the filter. Each entry in the list must be an + object. If no tests are specified, a test will be generated that + fails with the message that a test must be written for the filter + +- **itk_module**: (*string*) A string naming the ITK module the filter + originates from. If the ITK installation used for building SimpleITK + does not have this named module then the filter will be omitted in + SimpleITK. This filed is maintained JSONUpdateITKModules.py script. + +- **itk_group**: (*string*) A string naming the ITK group the ITK + filter originates. + +- [OPTIONAL] **include_files**: (*list*) This list of strings specifies + additional header files to include in the cxx file for this filter. + +- [OPTIONAL] **custom_set_intput**: (*string*) Code which is used to + set input or multiple inputs to the filter. This overrides the + standard setting of the inputs. + +- [OPTIONAL] **output_pixel_type**: (*string*) String representing the + specific pixel type to use for the output image of the filter. + +- [OPTIONAL] **filter_type**: (*string*) Explicitly sets the FilterType + used. This method overrides additional_template_types. Useful + typedefs are InputImageType, and OutputImageType. + +- [OPTIONAL] **public_declarations**: (*string*) Any c++ code written + in this field will be placed into the public section of the filter’s + header file + +- [OPTIONAL] **additional_template_types**: (*list*) The standard ITK + image filter template signature is: + +:: + + + +Some filters require additional template types between the list of input +image types and the output image type such as the input type of a +constant. This list allows these additional parameters to be added so +that the template signature looks like: + +:: + + + +Each type in the list is specified by an object with a only a **type** +field which is a string specifying the type to be used. + +- [OPTIONAL] **custom_methods**: (*list*) This is a list of objects + specifying custom methods that should be added to the filter. The + fields required for a custom method are: + + - **doc**: (*string*) Documentation for this custom method + - **name**: (*string*) The name of the method + - **return_type:** (*string*) the return type of the method + - [OPTIONAL] **parameters**: (*list*) A list of parameters for the + method. Each method is specified by an object with the following + fields: + + - **type**: (*string*) The parameter’s type + - **var_name**: (*string*) The name of the variable to be used in + the \**body field for the custom method - - \b body: (\e string) This string is the body of the method and will be - placed directly into the header file. The parameter names specified with - \b var_name in each of the parameter objects can be used in this body + - **body**: (*string*) This string is the body of the method and + will be placed directly into the header file. The parameter names + specified with **var_name** in each of the parameter objects can + be used in this body A sample custom method might look like: -\verbatim -{ "name" : "Foo", - "doc" : "This method checks if a string is equal to Foo" - "return_type" : "bool", - "parameters" : [ - { "type" : "std::string", - "var_name" : "inString" - } - ], - "body" : "if (!strcmp(inString.c_str(), "Foo")) { return true; } else { return false; }" -} -\endverbatim +:: + + { "name" : "Foo", + "doc" : "This method checks if a string is equal to Foo" + "return_type" : "bool", + "parameters" : [ + { "type" : "std::string", + "var_name" : "inString" + } + ], + "body" : "if (!strcmp(inString.c_str(), "Foo")) { return true; } else { return false; }" + } This will translate to a custom method that looks like: -\verbatim - /** - * This method checks if a string is equal to Foo - */ - bool Foo( std::string inString ) - { - if (!strcmp(inString.c_str(), "Foo")) { return true; } else { return false; } - } -\endverbatim +:: + /** + * This method checks if a string is equal to Foo + */ + bool Foo( std::string inString ) + { + if (!strcmp(inString.c_str(), "Foo")) { return true; } else { return false; } + } +MemberFields Member Fields +-------------------------- -\subsection MemberFileds Member Fields A basic member object looks like: -\verbatim -{ - "name" : "Sigma", - "type" : "double", - "default" : 1.0, - "briefdescriptionSet" : "", - "detaileddescriptionSet" : "Define which normalization factor will be used for the Gaussian\\see RecursiveGaussianImageFilter::SetNormalizeAcrossScale\n\n", - "briefdescriptionGet" : "", - "detaileddescriptionGet" : "" - } -\endverbatim - -- \b name: (\e string) The name of the member variable. A variable named "Var" -will be accessible with the methods "GetVar" and "SetVar" - -- \b type: (\e string) The c++ type for this member. If using a type contained -in a certain namespace (itk::simple for example), this must be included in the -type description. If the member variable is of type bool, the -additional ${name}On, and ${name}Off member functions are added. - -- \b default: (\e string or \e number) The default value for this member. This -can be a number for numerical types or a string specifying the constructor for -non-basic types (std::vector< unsigned int >() for example) - -- \b briefdescriptionSet/briefdescriptionGet: (\e string) Brief - Doxygen documentation for this individual parameter. The two forms - (Set/Get) are used for the SetMember and GetMember functions. This - field is automatically generated from ITK's Doxygen for members that - mirror ITK's members. If the member if a custom, - this field will not be modified. - -- \b detaileddescriptionSet/detaileddescriptionGet: (\e string) - Detailed Doxygen documentation for this individual parameter. The - two forms (Set/Get) are used for the SetMember and GetMember - functions. This field is automatically generated from ITK's Doxygen - for members that mirror ITK's members. If the member if a custom, - this field will not be modified. - -- [OPTIONAL] \b no_set_method: (0 or 1) If set to 1, the filter will not have a -Set method for this member - -- [OPTIONAL] \b no_get_method: (0 or 1) If set to 1, the filter will not have a -Get method for this member - -- [OPTIONAL] \b no_print: (0 or 1) If set to 1, this member will not be printed -in the ToString method - -- [OPTIONAL] \b dim_vec: (0 or 1) If set to 1, this indicates that the member -is a std::vector with size equal to the dimension of the input image. As such, -it will be printed out correctly and cast to its corresponding ITK type -correctly - -- [OPTIONAL] \b set_as_scalar: (0 or 1) If parameter is a dim_vec, - then this method adds an additional set member method to set the - variable as a scalar so that all components are the same - - -- [OPTIONAL] \b enum: [ "enum1", "enum2", ... ] Creates a member type - of the class with the array of strings with a type defined by the - name of this parameter. This field makes the "type" parameter - optional. It is recommended to add a test to ensure the SimpleITK - values correspond to the ITK values. - -- [OPTIONAL] \b custom_itk_cast: (\e string) Some non-basic types will require -a custom cast before the corresponding ITK filter's member can be set. This -field allows the developer to specify exactly how the ITK filter sets the -member's value from the SimpleITK member's value for example: - -\verbatim -"custom_itk_cast" : - "filter->SetObjectValue(static_cast(this->GetObjectValue()) );" -\endverbatim - - -\subsection TestFields Test Fields +:: + + { + "name" : "Sigma", + "type" : "double", + "default" : 1.0, + "briefdescriptionSet" : "", + "detaileddescriptionSet" : "Define which normalization factor will be used for the Gaussian\\see RecursiveGaussianImageFilter::SetNormalizeAcrossScale\n\n", + "briefdescriptionGet" : "", + "detaileddescriptionGet" : "" + } + +- **name**: (*string*) The name of the member variable. A variable + named “Var” will be accessible with the methods “GetVar” and “SetVar” + +- **type**: (*string*) The c++ type for this member. If using a type + contained in a certain namespace (itk::simple for example), this must + be included in the type description. If the member variable is of + type bool, the additional ${name}On, and ${name}Off member functions + are added. + +- **default**: (*string* or *number*) The default value for this + member. This can be a number for numerical types or a string + specifying the constructor for non-basic types (std::vector< unsigned + int >() for example) + +- **briefdescriptionSet/briefdescriptionGet**: (*string*) Brief Doxygen + documentation for this individual parameter. The two forms (Set/Get) + are used for the SetMember and GetMember functions. This field is + automatically generated from ITK’s Doxygen for members that mirror + ITK’s members. If the member if a custom, this field will not be + modified. + +- **detaileddescriptionSet/detaileddescriptionGet**: (*string*) + Detailed Doxygen documentation for this individual parameter. The two + forms (Set/Get) are used for the SetMember and GetMember functions. + This field is automatically generated from ITK’s Doxygen for members + that mirror ITK’s members. If the member if a custom, this field will + not be modified. + +- [OPTIONAL] **no_set_method**: (0 or 1) If set to 1, the filter will + not have a Set method for this member + +- [OPTIONAL] **no_get_method**: (0 or 1) If set to 1, the filter will + not have a Get method for this member + +- [OPTIONAL] **no_print**: (0 or 1) If set to 1, this member will not + be printed in the ToString method + +- [OPTIONAL] **dim_vec**: (0 or 1) If set to 1, this indicates that the + member is a std::vector with size equal to the dimension of the input + image. As such, it will be printed out correctly and cast to its + corresponding ITK type correctly + +- [OPTIONAL] **set_as_scalar**: (0 or 1) If parameter is a dim_vec, + then this method adds an additional set member method to set the + variable as a scalar so that all components are the same + +- [OPTIONAL] **enum**: ``[ "enum1", "enum2", ... ]`` Creates a member + type of the class with the array of strings with a type defined by + the name of this parameter. This field makes the “type” parameter + optional. It is recommended to add a test to ensure the SimpleITK + values correspond to the ITK values. + +- [OPTIONAL] **custom_itk_cast**: (*string*) Some non-basic types will + require a custom cast before the corresponding ITK filter’s member + can be set. This field allows the developer to specify exactly how + the ITK filter sets the member’s value from the SimpleITK member’s + value for example: + +:: + + "custom_itk_cast" : + "filter->SetObjectValue(static_cast(this->GetObjectValue()) );" + +TestFields Test Fields +---------------------- + A basic test object looks like: -\verbatim -{ - "tag" : "float", - "description" : "Dilate a float image", - "inputA" : "Input/RA-Slice-Float.nrrd", - "tolerance" : 0.01, - "settings" : [] -} -\endverbatim - -There are three ways of checking the resulting image: against a baseline image, -a sha1 hash, or an md5 hash. At least one of these options must be used for -each test. - -- \b tag: (\e string) The tag to identify this specific test for the filter - -- \b description: (\e string) Documentation to describe this specific test - -- \b inputA: (\e string) The path from the SOURCE_DIR/Testing/Data directory -for the (first) input image - -- \b inputA_cast: (\e string) an sitkPixelIDEnum, after inputA is read the CastImageFilter is run, to covert the image type. - -- [OPTIONAL] \b inputB: (\e string) If \b number_of_inputs is 2, this specifies -the path from SOURCE_DIR/Testing/Data to the second input image - -- [OPTIONAL] \b tolerance: (\e float) An error tolerance fo be used when -comparing the resulting image to the baseline. This is used to specify that the -result should be checked against a baseline image - -- [OPTIONAL] \b md5hash: (\e string) An md5 hash value to compare the resulting -image against. - -- [OPTIONAL] \b sha1hash: (\e string) A sha1 hash value to compare the resulting -image against. - -- [OPTIONAL] \b settings: (\e list) A list of any specific parameters values -for this test. Each entry is an object of the form: - -\verbatim -{ "parameter" : "Sigma", - "value" : 1.0 -} -\endverbatim - -- \b Settings \b Options: - - \b parameter: (\e string) The name of the parameter. This must match the - name used when creating the filter - - \b value: (\e string or \e number) The value to assign to the parameter. - This can be a number for numerical types or a string representing the - constructor for more complex types - - [OPTIONAL] \b python_value: (\e string) For types that require a different - syntax for setting the value in python, this will override the string in - \b value - - [OPTIONAL] \b lua_value: (\e string) For types that require a different - syntax for setting the value in lua, this will override the string in - \b value - - [OPTIONAL] \b ruby_value: (\e string) For types that require a different - syntax for setting the value in ruby, this will override the string in - \b value - - [OPTIONAL] \b java_value: (\e string) For types that require a different - syntax for setting the value in java, this will override the string in - \b value - - [OPTIONAL] \b tcl_value: (\e string) For types that require a different - syntax for setting the value in tcl, this will override the string in - \b value - - [OPTIONAL] \b R_value: (\e string) For types that require a different - syntax for setting the value in R, this will override the string in - \b value - - [OPTIONAL] \b dim_vec: (0 or 1): Use this flag if this parameter is a - std::vector. If set to 1, the \b type option must also be set - - [OPTIONAL] \b no_get_method: (0 or 1). Set to 1 when the filter - does not have a get method, so that this method will not be tested. - - [OPTIONAL] \b type: (\e string): What type the vector should be. Due to - constraints with java, this should only be a primitive type. For unsigned - types, the java test will convert to the signed equivalent. An example for a - dim_vec parameter is: - -\verbatim -{ "parameter" : "Size", - "dim_vec" : 1, - "type" : "unsigned int" - "value" : "{1,2}", - "java_value" : "{1,2}", - "tcl_value" : "[list 1 2]", - "python_value" : "[1,2]", - "lua_value" : "{1,2}", - "ruby_value" : "[1,2]" -} -\endverbatim - -\section Structure Directory Structure -The code generation system is designed to be agnostic of what subdirectory is -being parsed. An example of this is BasicFilters. Here will just refer to -$FILTER_DIR +:: + + { + "tag" : "float", + "description" : "Dilate a float image", + "inputA" : "Input/RA-Slice-Float.nrrd", + "tolerance" : 0.01, + "settings" : [] + } + +There are three ways of checking the resulting image: against a baseline +image, a sha1 hash, or an md5 hash. At least one of these options must +be used for each test. + +- **tag**: (*string*) The tag to identify this specific test for the + filter + +- **description**: (*string*) Documentation to describe this specific + test + +- **inputA**: (*string*) The path from the SOURCE_DIR/Testing/Data + directory for the (first) input image + +- **inputA_cast**: (*string*) an ``sitkPixelIDEnum``, after inputA is + read the CastImageFilter is run, to covert the image type. + +- [OPTIONAL] **inputB**: (*string*) If **number_of_inputs** is 2, this + specifies the path from SOURCE_DIR/Testing/Data to the second input + image + +- [OPTIONAL] **tolerance**: (*float*) An error tolerance fo be used + when comparing the resulting image to the baseline. This is used to + specify that the result should be checked against a baseline image + +- [OPTIONAL] **md5hash**: (*string*) An md5 hash value to compare the + resulting image against. + +- [OPTIONAL] **sha1hash**: (*string*) A sha1 hash value to compare the + resulting image against. + +- [OPTIONAL] **settings**: (*list*) A list of any specific parameters + values for this test. Each entry is an object of the form: + +:: + + { "parameter" : "Sigma", + "value" : 1.0 + } + +Settings Options +~~~~~~~~~~~~~~~~ + +- **parameter**: (*string*) The name of the parameter. This must match + the name used when creating the filter +- **value**: (*string* or *number*) The value to assign to the + parameter. This can be a number for numerical types or a string + representing the constructor for more complex types +- [OPTIONAL] **python_value**: (*string*) For types that require a + different syntax for setting the value in python, this will override + the string in **value** +- [OPTIONAL] **lua_value**: (*string*) For types that require a + different syntax for setting the value in lua, this will override the + string in **value** +- [OPTIONAL] **ruby_value**: (*string*) For types that require a + different syntax for setting the value in ruby, this will override + the string in **value** +- [OPTIONAL] **java_value**: (*string*) For types that require a + different syntax for setting the value in java, this will override + the string in **value** +- [OPTIONAL] **tcl_value**: (*string*) For types that require a + different syntax for setting the value in tcl, this will override the + string in **value** +- [OPTIONAL] **R_value**: (*string*) For types that require a different + syntax for setting the value in R, this will override the string in + **value** +- [OPTIONAL] **dim_vec** (0 or 1): Use this flag if this parameter is a + std::vector. If set to 1, the **type** option must also be set +- [OPTIONAL] **no_get_method**: (0 or 1). Set to 1 when the filter does + not have a get method, so that this method will not be tested. +- [OPTIONAL] **type**: (*string*): What type the vector should be. Due + to constraints with java, this should only be a primitive type. For + unsigned types, the java test will convert to the signed equivalent. + An example for a ``dim_vec`` parameter is: + +:: + + { "parameter" : "Size", + "dim_vec" : 1, + "type" : "unsigned int" + "value" : "{1,2}", + "java_value" : "{1,2}", + "tcl_value" : "[list 1 2]", + "python_value" : "[1,2]", + "lua_value" : "{1,2}", + "ruby_value" : "[1,2]" + } + +Structure Directory Structure +----------------------------- + +The code generation system is designed to be agnostic of what +subdirectory is being parsed. An example of this is BasicFilters. Here +will just refer to ``$FILTER_DIR`` There are four important subdirectories in -$SimpleITK_SOURCE_DIR/Code/$FILTER_DIR: - - - \b include: Manually written header files - - \b src: Manually written c++ files - - \b json: The input json files used to generate new filters at build time - - \b templates: The code templates that can be used to generate filters for - this directory - -When a filter is generated, it produces a .h and a .cxx file that are placed -in $SimpleITK_BUILD_DIR/Code/$FILTER_DIR/include and -$SimpleITK_BUILD_DIR/Code/$FILTER_DIR/src respectively. - -It is also worth noting that the template files in the \b templates directory -are comprised of a combination of c++ code, lua template expansion directives, -and $(include xxx) statements. These include statements each pull in a section -of template code from a file in $SimpleITK_SOURCE_DIR/ExpandTemplateGenerator/Components. These -component files represent pieces of templates that are shared by multiple -unique filter template types. - - -\section Templates Specialized Templates -The standard template is ImageFilter. This section describes the differences -for each of the other template types. - -- Region Growing Image Filters: The region growing filters support an -additional set of methods for manipulating the seed list. Each region growing -filter has the SetSeed, AddSeed, and ClearSeeds methods. See -sitkConnectedThresholdImageFilter.h for details. - -- Kernel Image Filters: The kernel image filters use -a KernelType and have an external enum which allows the user to select which -kernel to use. See sitkErodeObjectMorphologyImageFilter.h for details. - -- Dual Image Filter: The dual image filter template's usage -should be avoided because it instantiates the combination of two pixel -type lists. -*/ -}} +``$SimpleITK_SOURCE_DIR/Code/$FILTER_DIR``: + +- include: Manually written header files +- src: Manually written c++ files +- json: The input json files used to generate new filters at build time +- templates: The code templates that can be used to generate filters + for this directory + +When a filter is generated, it produces a .h and a .cxx file that are +placed in ``$SimpleITK_BUILD_DIR/Code/$FILTER_DIR/include`` and +``$SimpleITK_BUILD_DIR/Code/$FILTER_DIR/src`` respectively. + +It is also worth noting that the template files in the templates +directory are comprised of a combination of c++ code, lua template +expansion directives, and ``$(include xxx)`` statements. These include +statements each pull in a section of template code from a file in +$SimpleITK_SOURCE_DIR/ExpandTemplateGenerator/Components. These +component files represent pieces of templates that are shared by +multiple unique filter template types. + +Templates Specialized Templates +------------------------------- + +The standard template is ImageFilter. This section describes the +differences for each of the other template types. + +- **Region Growing Image Filters**: The region growing filters support + an additional set of methods for manipulating the seed list. Each + region growing filter has the SetSeed, AddSeed, and ClearSeeds + methods. See sitkConnectedThresholdImageFilter.h for details. + +- **Kernel Image Filters**: The kernel image filters use a KernelType + and have an external enum which allows the user to select which + kernel to use. See sitkErodeObjectMorphologyImageFilter.h for + details. + +- **Dual Image Filter**: The dual image filter template’s usage should + be avoided because it instantiates the combination of two pixel type + lists. From 17ebe956c031f7149e2e7db66abb88b0e7b3be62 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 17 Dec 2019 13:44:33 -0500 Subject: [PATCH 294/400] Add baseline image for SLIC filter The baseline image allows for a not exact image matching with a tolerance. This is needed for windows 32-bits as the results are slightly different. --- Code/BasicFilters/json/SLICImageFilter.json | 2 +- .../Baseline/BasicFilters_SLICImageFilter_defaults.nrrd.sha512 | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 Testing/Data/Baseline/BasicFilters_SLICImageFilter_defaults.nrrd.sha512 diff --git a/Code/BasicFilters/json/SLICImageFilter.json b/Code/BasicFilters/json/SLICImageFilter.json index 0e9ced7d7..a5c9ffc86 100644 --- a/Code/BasicFilters/json/SLICImageFilter.json +++ b/Code/BasicFilters/json/SLICImageFilter.json @@ -75,7 +75,7 @@ "inputs" : [ "Input/VM1111Shrink-RGB.png" ], - "md5hash" : "685aeafe583dd0b8a0471be4c005df02", + "tolerance" : 0.05, "measurements_results" : [ { "name" : "AverageResidual", diff --git a/Testing/Data/Baseline/BasicFilters_SLICImageFilter_defaults.nrrd.sha512 b/Testing/Data/Baseline/BasicFilters_SLICImageFilter_defaults.nrrd.sha512 new file mode 100644 index 000000000..7dc1a2e57 --- /dev/null +++ b/Testing/Data/Baseline/BasicFilters_SLICImageFilter_defaults.nrrd.sha512 @@ -0,0 +1 @@ +9d5cc770e6916925ecdc70552b9034c1db66b61aba1430d0f4aa9f4fcfa8d57277fa3c9729b690ffb839d6680cc42bc61b50dadd5e3f833b6faa18a0bb176b74 From 5c98243175a15fb2b8a56ab2cbceecfc1a5973a2 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 17 Dec 2019 21:58:27 +0000 Subject: [PATCH 295/400] Add alternate baseline for SLIC filter on 32-bits arch Relax the residual value also. --- Code/BasicFilters/json/SLICImageFilter.json | 2 +- .../BasicFilters_SLICImageFilter_defaults.1.nrrd.sha512 | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 Testing/Data/Baseline/BasicFilters_SLICImageFilter_defaults.1.nrrd.sha512 diff --git a/Code/BasicFilters/json/SLICImageFilter.json b/Code/BasicFilters/json/SLICImageFilter.json index a5c9ffc86..f2923e3f1 100644 --- a/Code/BasicFilters/json/SLICImageFilter.json +++ b/Code/BasicFilters/json/SLICImageFilter.json @@ -80,7 +80,7 @@ { "name" : "AverageResidual", "value" : "0.10256", - "tolerance" : 0.0001 + "tolerance" : 0.0005 } ] }, diff --git a/Testing/Data/Baseline/BasicFilters_SLICImageFilter_defaults.1.nrrd.sha512 b/Testing/Data/Baseline/BasicFilters_SLICImageFilter_defaults.1.nrrd.sha512 new file mode 100644 index 000000000..bfe46fe9e --- /dev/null +++ b/Testing/Data/Baseline/BasicFilters_SLICImageFilter_defaults.1.nrrd.sha512 @@ -0,0 +1 @@ +9fedf2da0d42eb19aaa7bba3374f6949cd1823599cec9558cae2efcc83ea620a48f749a65d21ad96f61aab72beeeef860088afad06cde08df4da2bb339778dd4 From dee9bfd8f3e94790fb28ec4e1a36bf012472a210 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 18 Dec 2019 11:15:31 -0500 Subject: [PATCH 296/400] AZP batch reduce Linux to 3 max parallel builds --- Testing/CI/Azure/azure-pipelines-batch.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml index b1b3f967f..b7a8d6526 100644 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ b/Testing/CI/Azure/azure-pipelines-batch.yml @@ -123,6 +123,7 @@ jobs: demands: - Agent.OS -equals Linux strategy: + maxParallel: 3 matrix: default: {} ITK-master: From ea4503dd22a13ab29d5a5b1c134e18c6f617844b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 18 Dec 2019 11:17:29 -0500 Subject: [PATCH 297/400] Explicitly cast to float to avoid lost of precision warning --- Testing/Unit/TestBase/sitkTransformCompare.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Testing/Unit/TestBase/sitkTransformCompare.cxx b/Testing/Unit/TestBase/sitkTransformCompare.cxx index f769b1ae6..23288d6d2 100644 --- a/Testing/Unit/TestBase/sitkTransformCompare.cxx +++ b/Testing/Unit/TestBase/sitkTransformCompare.cxx @@ -73,5 +73,5 @@ TransformCompare::Compare(const itk::simple::Transform & transform, << std::endl; } - return rms; + return float(rms); } From f3bfcfd8411f3a15f6d030fe54bc3168fec0a1d4 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 18 Dec 2019 11:43:27 -0500 Subject: [PATCH 298/400] Remove supplementary C99 integers header Since C++11 is required, the C99 stdint.h header is required. --- CMakeLists.txt | 6 +- Code/Common/src/CMakeLists.txt | 5 - Utilities/C99/CMakeLists.txt | 3 - Utilities/C99/inttypes.h | 305 --------------------------------- Utilities/C99/stdint.h | 247 -------------------------- 5 files changed, 1 insertion(+), 565 deletions(-) delete mode 100644 Utilities/C99/CMakeLists.txt delete mode 100644 Utilities/C99/inttypes.h delete mode 100644 Utilities/C99/stdint.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 810c1049d..31df5b950 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -265,11 +265,7 @@ include(CheckIncludeFileCXX) # This generates a configuration error if the compiler is not supported check_include_file_cxx( stdint.h SITK_HAS_STDINT_H ) if(NOT SITK_HAS_STDINT_H) - if(MSVC) - add_subdirectory("${SimpleITK_SOURCE_DIR}/Utilities/C99") - else() - message(FATAL_ERROR "Unable to find require \"stdint.h\" header file.") - endif() + message(FATAL_ERROR "Unable to find require \"stdint.h\" header file.") endif() #------------------------------------------------------------------------------ diff --git a/Code/Common/src/CMakeLists.txt b/Code/Common/src/CMakeLists.txt index e06d427aa..41346ba1e 100644 --- a/Code/Common/src/CMakeLists.txt +++ b/Code/Common/src/CMakeLists.txt @@ -41,11 +41,6 @@ target_include_directories ( SimpleITKCommon $ $ $ ) -if(NOT SITK_HAS_STDINT_H AND MSVC) - target_include_directories ( SimpleITKCommon - PUBLIC - $ ) -endif() target_compile_options( SimpleITKCommon PUBLIC ${SimpleITK_PUBLIC_COMPILE_OPTIONS} diff --git a/Utilities/C99/CMakeLists.txt b/Utilities/C99/CMakeLists.txt deleted file mode 100644 index 0676bc039..000000000 --- a/Utilities/C99/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -install(FILES "stdint.h" "inttypes.h" - DESTINATION ${SimpleITK_INSTALL_INCLUDE_DIR} - COMPONENT Development) diff --git a/Utilities/C99/inttypes.h b/Utilities/C99/inttypes.h deleted file mode 100644 index 4b3828a21..000000000 --- a/Utilities/C99/inttypes.h +++ /dev/null @@ -1,305 +0,0 @@ -// ISO C9x compliant inttypes.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006 Alexander Chemeris -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. The name of the author may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _MSC_VER // [ -#error "Use this header only with Microsoft Visual C++ compilers!" -#endif // _MSC_VER ] - -#ifndef _MSC_INTTYPES_H_ // [ -#define _MSC_INTTYPES_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include "stdint.h" - -// 7.8 Format conversion of integer types - -typedef struct { - intmax_t quot; - intmax_t rem; -} imaxdiv_t; - -// 7.8.1 Macros for format specifiers - -#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198 - -// The fprintf macros for signed integers are: -#define PRId8 "d" -#define PRIi8 "i" -#define PRIdLEAST8 "d" -#define PRIiLEAST8 "i" -#define PRIdFAST8 "d" -#define PRIiFAST8 "i" - -#define PRId16 "hd" -#define PRIi16 "hi" -#define PRIdLEAST16 "hd" -#define PRIiLEAST16 "hi" -#define PRIdFAST16 "hd" -#define PRIiFAST16 "hi" - -#define PRId32 "I32d" -#define PRIi32 "I32i" -#define PRIdLEAST32 "I32d" -#define PRIiLEAST32 "I32i" -#define PRIdFAST32 "I32d" -#define PRIiFAST32 "I32i" - -#define PRId64 "I64d" -#define PRIi64 "I64i" -#define PRIdLEAST64 "I64d" -#define PRIiLEAST64 "I64i" -#define PRIdFAST64 "I64d" -#define PRIiFAST64 "I64i" - -#define PRIdMAX "I64d" -#define PRIiMAX "I64i" - -#define PRIdPTR "Id" -#define PRIiPTR "Ii" - -// The fprintf macros for unsigned integers are: -#define PRIo8 "o" -#define PRIu8 "u" -#define PRIx8 "x" -#define PRIX8 "X" -#define PRIoLEAST8 "o" -#define PRIuLEAST8 "u" -#define PRIxLEAST8 "x" -#define PRIXLEAST8 "X" -#define PRIoFAST8 "o" -#define PRIuFAST8 "u" -#define PRIxFAST8 "x" -#define PRIXFAST8 "X" - -#define PRIo16 "ho" -#define PRIu16 "hu" -#define PRIx16 "hx" -#define PRIX16 "hX" -#define PRIoLEAST16 "ho" -#define PRIuLEAST16 "hu" -#define PRIxLEAST16 "hx" -#define PRIXLEAST16 "hX" -#define PRIoFAST16 "ho" -#define PRIuFAST16 "hu" -#define PRIxFAST16 "hx" -#define PRIXFAST16 "hX" - -#define PRIo32 "I32o" -#define PRIu32 "I32u" -#define PRIx32 "I32x" -#define PRIX32 "I32X" -#define PRIoLEAST32 "I32o" -#define PRIuLEAST32 "I32u" -#define PRIxLEAST32 "I32x" -#define PRIXLEAST32 "I32X" -#define PRIoFAST32 "I32o" -#define PRIuFAST32 "I32u" -#define PRIxFAST32 "I32x" -#define PRIXFAST32 "I32X" - -#define PRIo64 "I64o" -#define PRIu64 "I64u" -#define PRIx64 "I64x" -#define PRIX64 "I64X" -#define PRIoLEAST64 "I64o" -#define PRIuLEAST64 "I64u" -#define PRIxLEAST64 "I64x" -#define PRIXLEAST64 "I64X" -#define PRIoFAST64 "I64o" -#define PRIuFAST64 "I64u" -#define PRIxFAST64 "I64x" -#define PRIXFAST64 "I64X" - -#define PRIoMAX "I64o" -#define PRIuMAX "I64u" -#define PRIxMAX "I64x" -#define PRIXMAX "I64X" - -#define PRIoPTR "Io" -#define PRIuPTR "Iu" -#define PRIxPTR "Ix" -#define PRIXPTR "IX" - -// The fscanf macros for signed integers are: -#define SCNd8 "d" -#define SCNi8 "i" -#define SCNdLEAST8 "d" -#define SCNiLEAST8 "i" -#define SCNdFAST8 "d" -#define SCNiFAST8 "i" - -#define SCNd16 "hd" -#define SCNi16 "hi" -#define SCNdLEAST16 "hd" -#define SCNiLEAST16 "hi" -#define SCNdFAST16 "hd" -#define SCNiFAST16 "hi" - -#define SCNd32 "ld" -#define SCNi32 "li" -#define SCNdLEAST32 "ld" -#define SCNiLEAST32 "li" -#define SCNdFAST32 "ld" -#define SCNiFAST32 "li" - -#define SCNd64 "I64d" -#define SCNi64 "I64i" -#define SCNdLEAST64 "I64d" -#define SCNiLEAST64 "I64i" -#define SCNdFAST64 "I64d" -#define SCNiFAST64 "I64i" - -#define SCNdMAX "I64d" -#define SCNiMAX "I64i" - -#ifdef _WIN64 // [ -# define SCNdPTR "I64d" -# define SCNiPTR "I64i" -#else // _WIN64 ][ -# define SCNdPTR "ld" -# define SCNiPTR "li" -#endif // _WIN64 ] - -// The fscanf macros for unsigned integers are: -#define SCNo8 "o" -#define SCNu8 "u" -#define SCNx8 "x" -#define SCNX8 "X" -#define SCNoLEAST8 "o" -#define SCNuLEAST8 "u" -#define SCNxLEAST8 "x" -#define SCNXLEAST8 "X" -#define SCNoFAST8 "o" -#define SCNuFAST8 "u" -#define SCNxFAST8 "x" -#define SCNXFAST8 "X" - -#define SCNo16 "ho" -#define SCNu16 "hu" -#define SCNx16 "hx" -#define SCNX16 "hX" -#define SCNoLEAST16 "ho" -#define SCNuLEAST16 "hu" -#define SCNxLEAST16 "hx" -#define SCNXLEAST16 "hX" -#define SCNoFAST16 "ho" -#define SCNuFAST16 "hu" -#define SCNxFAST16 "hx" -#define SCNXFAST16 "hX" - -#define SCNo32 "lo" -#define SCNu32 "lu" -#define SCNx32 "lx" -#define SCNX32 "lX" -#define SCNoLEAST32 "lo" -#define SCNuLEAST32 "lu" -#define SCNxLEAST32 "lx" -#define SCNXLEAST32 "lX" -#define SCNoFAST32 "lo" -#define SCNuFAST32 "lu" -#define SCNxFAST32 "lx" -#define SCNXFAST32 "lX" - -#define SCNo64 "I64o" -#define SCNu64 "I64u" -#define SCNx64 "I64x" -#define SCNX64 "I64X" -#define SCNoLEAST64 "I64o" -#define SCNuLEAST64 "I64u" -#define SCNxLEAST64 "I64x" -#define SCNXLEAST64 "I64X" -#define SCNoFAST64 "I64o" -#define SCNuFAST64 "I64u" -#define SCNxFAST64 "I64x" -#define SCNXFAST64 "I64X" - -#define SCNoMAX "I64o" -#define SCNuMAX "I64u" -#define SCNxMAX "I64x" -#define SCNXMAX "I64X" - -#ifdef _WIN64 // [ -# define SCNoPTR "I64o" -# define SCNuPTR "I64u" -# define SCNxPTR "I64x" -# define SCNXPTR "I64X" -#else // _WIN64 ][ -# define SCNoPTR "lo" -# define SCNuPTR "lu" -# define SCNxPTR "lx" -# define SCNXPTR "lX" -#endif // _WIN64 ] - -#endif // __STDC_FORMAT_MACROS ] - -// 7.8.2 Functions for greatest-width integer types - -// 7.8.2.1 The imaxabs function -#define imaxabs _abs64 - -// 7.8.2.2 The imaxdiv function - -// This is modified version of div() function from Microsoft's div.c found -// in %MSVC.NET%\crt\src\div.c -#ifdef STATIC_IMAXDIV // [ -static -#else // STATIC_IMAXDIV ][ -_inline -#endif // STATIC_IMAXDIV ] -imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) -{ - imaxdiv_t result; - - result.quot = numer / denom; - result.rem = numer % denom; - - if (numer < 0 && result.rem > 0) { - // did division wrong; must fix up - ++result.quot; - result.rem -= denom; - } - - return result; -} - -// 7.8.2.3 The strtoimax and strtoumax functions -#define strtoimax _strtoi64 -#define strtoumax _strtoui64 - -// 7.8.2.4 The wcstoimax and wcstoumax functions -#define wcstoimax _wcstoi64 -#define wcstoumax _wcstoui64 - - -#endif // _MSC_INTTYPES_H_ ] diff --git a/Utilities/C99/stdint.h b/Utilities/C99/stdint.h deleted file mode 100644 index d02608a59..000000000 --- a/Utilities/C99/stdint.h +++ /dev/null @@ -1,247 +0,0 @@ -// ISO C9x compliant stdint.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006-2008 Alexander Chemeris -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. The name of the author may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _MSC_VER // [ -#error "Use this header only with Microsoft Visual C++ compilers!" -#endif // _MSC_VER ] - -#ifndef _MSC_STDINT_H_ // [ -#define _MSC_STDINT_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include - -// For Visual Studio 6 in C++ mode and for many Visual Studio versions when -// compiling for ARM we should wrap include with 'extern "C++" {}' -// or compiler give many errors like this: -// error C2733: second C linkage of overloaded function 'wmemchr' not allowed -#ifdef __cplusplus -extern "C" { -#endif -# include -#ifdef __cplusplus -} -#endif - -// Define _W64 macros to mark types changing their size, like intptr_t. -#ifndef _W64 -# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 -# define _W64 __w64 -# else -# define _W64 -# endif -#endif - - -// 7.18.1 Integer types - -// 7.18.1.1 Exact-width integer types - -// Visual Studio 6 and Embedded Visual C++ 4 doesn't -// realize that, e.g. char has the same size as __int8 -// so we give up on __intX for them. -#if (_MSC_VER < 1300) - typedef signed char int8_t; - typedef signed short int16_t; - typedef signed int int32_t; - typedef unsigned char uint8_t; - typedef unsigned short uint16_t; - typedef unsigned int uint32_t; -#else - typedef signed __int8 int8_t; - typedef signed __int16 int16_t; - typedef signed __int32 int32_t; - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; -#endif -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; - - -// 7.18.1.2 Minimum-width integer types -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -typedef int64_t int_least64_t; -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -typedef uint64_t uint_least64_t; - -// 7.18.1.3 Fastest minimum-width integer types -typedef int8_t int_fast8_t; -typedef int16_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef int64_t int_fast64_t; -typedef uint8_t uint_fast8_t; -typedef uint16_t uint_fast16_t; -typedef uint32_t uint_fast32_t; -typedef uint64_t uint_fast64_t; - -// 7.18.1.4 Integer types capable of holding object pointers -#ifdef _WIN64 // [ - typedef signed __int64 intptr_t; - typedef unsigned __int64 uintptr_t; -#else // _WIN64 ][ - typedef _W64 signed int intptr_t; - typedef _W64 unsigned int uintptr_t; -#endif // _WIN64 ] - -// 7.18.1.5 Greatest-width integer types -typedef int64_t intmax_t; -typedef uint64_t uintmax_t; - - -// 7.18.2 Limits of specified-width integer types - -#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 - -// 7.18.2.1 Limits of exact-width integer types -#define INT8_MIN ((int8_t)_I8_MIN) -#define INT8_MAX _I8_MAX -#define INT16_MIN ((int16_t)_I16_MIN) -#define INT16_MAX _I16_MAX -#define INT32_MIN ((int32_t)_I32_MIN) -#define INT32_MAX _I32_MAX -#define INT64_MIN ((int64_t)_I64_MIN) -#define INT64_MAX _I64_MAX -#define UINT8_MAX _UI8_MAX -#define UINT16_MAX _UI16_MAX -#define UINT32_MAX _UI32_MAX -#define UINT64_MAX _UI64_MAX - -// 7.18.2.2 Limits of minimum-width integer types -#define INT_LEAST8_MIN INT8_MIN -#define INT_LEAST8_MAX INT8_MAX -#define INT_LEAST16_MIN INT16_MIN -#define INT_LEAST16_MAX INT16_MAX -#define INT_LEAST32_MIN INT32_MIN -#define INT_LEAST32_MAX INT32_MAX -#define INT_LEAST64_MIN INT64_MIN -#define INT_LEAST64_MAX INT64_MAX -#define UINT_LEAST8_MAX UINT8_MAX -#define UINT_LEAST16_MAX UINT16_MAX -#define UINT_LEAST32_MAX UINT32_MAX -#define UINT_LEAST64_MAX UINT64_MAX - -// 7.18.2.3 Limits of fastest minimum-width integer types -#define INT_FAST8_MIN INT8_MIN -#define INT_FAST8_MAX INT8_MAX -#define INT_FAST16_MIN INT16_MIN -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST32_MIN INT32_MIN -#define INT_FAST32_MAX INT32_MAX -#define INT_FAST64_MIN INT64_MIN -#define INT_FAST64_MAX INT64_MAX -#define UINT_FAST8_MAX UINT8_MAX -#define UINT_FAST16_MAX UINT16_MAX -#define UINT_FAST32_MAX UINT32_MAX -#define UINT_FAST64_MAX UINT64_MAX - -// 7.18.2.4 Limits of integer types capable of holding object pointers -#ifdef _WIN64 // [ -# define INTPTR_MIN INT64_MIN -# define INTPTR_MAX INT64_MAX -# define UINTPTR_MAX UINT64_MAX -#else // _WIN64 ][ -# define INTPTR_MIN INT32_MIN -# define INTPTR_MAX INT32_MAX -# define UINTPTR_MAX UINT32_MAX -#endif // _WIN64 ] - -// 7.18.2.5 Limits of greatest-width integer types -#define INTMAX_MIN INT64_MIN -#define INTMAX_MAX INT64_MAX -#define UINTMAX_MAX UINT64_MAX - -// 7.18.3 Limits of other integer types - -#ifdef _WIN64 // [ -# define PTRDIFF_MIN _I64_MIN -# define PTRDIFF_MAX _I64_MAX -#else // _WIN64 ][ -# define PTRDIFF_MIN _I32_MIN -# define PTRDIFF_MAX _I32_MAX -#endif // _WIN64 ] - -#define SIG_ATOMIC_MIN INT_MIN -#define SIG_ATOMIC_MAX INT_MAX - -#ifndef SIZE_MAX // [ -# ifdef _WIN64 // [ -# define SIZE_MAX _UI64_MAX -# else // _WIN64 ][ -# define SIZE_MAX _UI32_MAX -# endif // _WIN64 ] -#endif // SIZE_MAX ] - -// WCHAR_MIN and WCHAR_MAX are also defined in -#ifndef WCHAR_MIN // [ -# define WCHAR_MIN 0 -#endif // WCHAR_MIN ] -#ifndef WCHAR_MAX // [ -# define WCHAR_MAX _UI16_MAX -#endif // WCHAR_MAX ] - -#define WINT_MIN 0 -#define WINT_MAX _UI16_MAX - -#endif // __STDC_LIMIT_MACROS ] - - -// 7.18.4 Limits of other integer types - -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 - -// 7.18.4.1 Macros for minimum-width integer constants - -#define INT8_C(val) val##i8 -#define INT16_C(val) val##i16 -#define INT32_C(val) val##i32 -#define INT64_C(val) val##i64 - -#define UINT8_C(val) val##ui8 -#define UINT16_C(val) val##ui16 -#define UINT32_C(val) val##ui32 -#define UINT64_C(val) val##ui64 - -// 7.18.4.2 Macros for greatest-width integer constants -#define INTMAX_C INT64_C -#define UINTMAX_C UINT64_C - -#endif // __STDC_CONSTANT_MACROS ] - - -#endif // _MSC_STDINT_H_ ] From 5767e0c550b01cc1b1a3acc5affa3ac60d2483f1 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 18 Dec 2019 11:45:18 -0500 Subject: [PATCH 299/400] Prefer using ZeroValue() function of Zero variable. The addresses the linkage warning on OSX about no export declaration for the explicit installation of NumericTraits>::Zero. --- Code/Common/src/sitkImage.hxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Common/src/sitkImage.hxx b/Code/Common/src/sitkImage.hxx index 648ac0b46..7c5f9a6d5 100644 --- a/Code/Common/src/sitkImage.hxx +++ b/Code/Common/src/sitkImage.hxx @@ -107,7 +107,7 @@ namespace itk typename TImageType::Pointer image = TImageType::New(); image->SetRegions ( region ); image->Allocate(); - image->FillBuffer ( itk::NumericTraits::Zero ); + image->FillBuffer ( itk::NumericTraits::ZeroValue() ); delete this->m_PimpleImage; this->m_PimpleImage = SITK_NULLPTR; From ee4ee3de3bd3cbefc3c0e306d93432dab3b82533 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 18 Dec 2019 11:49:05 -0500 Subject: [PATCH 300/400] Correct to use _MSC_VER to conditionally ignore MSVC warnings --- Code/IO/src/sitkImageFileReader.cxx | 2 +- Code/IO/src/sitkImageSeriesReader.cxx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Code/IO/src/sitkImageFileReader.cxx b/Code/IO/src/sitkImageFileReader.cxx index 6d93c5619..b96b0cc4c 100644 --- a/Code/IO/src/sitkImageFileReader.cxx +++ b/Code/IO/src/sitkImageFileReader.cxx @@ -15,7 +15,7 @@ * limitations under the License. * *=========================================================================*/ -#ifdef _MFC_VER +#ifdef _MSC_VER #pragma warning(disable:4996) #endif diff --git a/Code/IO/src/sitkImageSeriesReader.cxx b/Code/IO/src/sitkImageSeriesReader.cxx index 59c4e9a91..0bcdf5bde 100644 --- a/Code/IO/src/sitkImageSeriesReader.cxx +++ b/Code/IO/src/sitkImageSeriesReader.cxx @@ -15,7 +15,7 @@ * limitations under the License. * *=========================================================================*/ -#ifdef _MFC_VER +#ifdef _MSC_VER #pragma warning(disable:4996) #endif From 7444ae053cfda3067ca107ad0721d42d3916c9c7 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 19 Dec 2019 06:47:57 -0500 Subject: [PATCH 301/400] CCI add additional cache restore without branch name The cache store is different for forked repositories and the upstream repository. Therefore the forks don't build the master branch. The cache now falls back to name without the a branch name so for PR the previous PR's ccache will be used. --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 94692a4b0..7eb37c27e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -42,6 +42,7 @@ referenced: keys: - ccache-{{ arch }}-{{ .Branch }} - ccache-{{ arch }}-master + - ccache-{{ arch }} clone-dashboard-step: &clone-dashboard-step run: name: Cloning dashboard branch From 2b59fd03be9fc15767b9300bcb742a80ef070861 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 19 Dec 2019 06:53:32 -0500 Subject: [PATCH 302/400] CCI remove extraneous dump of env --- .circleci/config.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7eb37c27e..b30fd8efd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -59,7 +59,6 @@ referenced: name: Formatting CTest for JUnit when: always command: | - env mkdir -p /tmp/test-results ci_addons ctest_junit_formatter ${CTEST_BINARY_DIRECTORY} > /tmp/test-results/JUnit-${CIRCLE_NODE_INDEX}.xml junit-store-test-results: &junit-store-test-results From 9da085ad6f90dec9df0e24f0e95e1296d260f69b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 18 Dec 2019 12:17:11 -0500 Subject: [PATCH 303/400] Disable self assignment compiler warnings in tests --- Testing/Unit/sitkExceptionsTests.cxx | 5 ++++- Testing/Unit/sitkTransformTests.cxx | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Testing/Unit/sitkExceptionsTests.cxx b/Testing/Unit/sitkExceptionsTests.cxx index 43bf5b7ce..6ff4840e6 100644 --- a/Testing/Unit/sitkExceptionsTests.cxx +++ b/Testing/Unit/sitkExceptionsTests.cxx @@ -82,9 +82,12 @@ TEST_F(sitkExceptionsTest, Test3) { e0 = e1; e0 = empty; + + sitkClangDiagnosticPush(); + sitkClangWarningIgnore("-Wself-assign-overloaded"); // test self assignment too e0 = e0; - + sitkClangDiagnosticPop(); EXPECT_TRUE( e1 == e1 ); EXPECT_TRUE( empty == empty ); diff --git a/Testing/Unit/sitkTransformTests.cxx b/Testing/Unit/sitkTransformTests.cxx index ea7da36c0..c95f79895 100644 --- a/Testing/Unit/sitkTransformTests.cxx +++ b/Testing/Unit/sitkTransformTests.cxx @@ -144,8 +144,12 @@ TEST(TransformTest, Copy) { tx1 = sitk::Transform(); tx2 = tx1; + + sitkClangDiagnosticPush(); + sitkClangWarningIgnore("-Wself-assign-overloaded"); // check self assignment tx3 = tx3; + sitkClangDiagnosticPop(); } From 99d5b23c23c942fbb48b6d0b8891fc0812c014b6 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 19 Dec 2019 08:10:21 -0500 Subject: [PATCH 304/400] Use the GTest top-level directory for GTEST_ROOT The top-level project sets the required C++11 configuration and the google test version. The addresses a CMake warning about an empty VERSION argument to project. --- CMake/sitkUseGTest.cmake | 4 ---- SuperBuild/External_GTest.cmake | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/CMake/sitkUseGTest.cmake b/CMake/sitkUseGTest.cmake index f2892544e..b58730bb5 100644 --- a/CMake/sitkUseGTest.cmake +++ b/CMake/sitkUseGTest.cmake @@ -31,10 +31,6 @@ function(_sitk_gtest_use_gtest_source) set(CMAKE_CXX_VISIBILITY_PRESET) set(CMAKE_VISIBILITY_INLINES_HIDDEN) - set(CMAKE_CXX_STANDARD 11) - set(CMAKE_CXX_STANDARD_REQUIRED ON) - - set(BUILD_GTEST ON ) set(BUILD_GMOCK OFF) diff --git a/SuperBuild/External_GTest.cmake b/SuperBuild/External_GTest.cmake index d0f5c3a90..02c642d3c 100644 --- a/SuperBuild/External_GTest.cmake +++ b/SuperBuild/External_GTest.cmake @@ -29,4 +29,4 @@ ExternalProject_Add(${proj} sitkSourceDownloadDependency(${proj}) -set(GTEST_ROOT ${GTEST_source_dir}/googletest) +set(GTEST_ROOT ${GTEST_source_dir}) From c6eefe0c89bb72d620fe1272668fd030397faf04 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 18 Dec 2019 15:56:15 -0500 Subject: [PATCH 305/400] Use Python 3.5 image by default Update CI Python versions to 3.5 and 3.7. And remove references to the next branch. --- .circleci/config.yml | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b30fd8efd..49e4eff29 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ referenced: defaults: &defaults docker: - - image: circleci/python:2.7-stretch + - image: circleci/python:3.5-stretch working_directory: ~/ resource_class: medium default_environment_keys: &default_environment @@ -123,7 +123,7 @@ jobs: root: /home/circleci/SimpleITK-build paths: - "*" - python2.7-and-test: + python3.5-and-test: <<: *defaults environment: <<: *default_environment_keys @@ -159,10 +159,10 @@ jobs: ctest -V -Ddashboard_source_config_dir:PATH="Wrapping/Python" -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake" - *junit-fotmatting - *junit-store-test-results - python3.6-and-test: + python3.7-and-test: <<: *defaults docker: - - image: circleci/python:3.6-stretch + - image: circleci/python:3.7-stretch environment: <<: *default_environment_keys CTEST_BUILD_FLAGS: "-j 2" @@ -325,27 +325,18 @@ workflows: - gh-pages - dashboard - hooks - - python2.7-and-test: + - python3.5-and-test: requires: - build-and-test - filters: - branches: - ignore: next - - python3.6-and-test: + - python3.7-and-test: requires: - build-and-test - r-and-test: requires: - build-and-test - filters: - branches: - ignore: next - java-and-test: requires: - build-and-test - filters: - branches: - ignore: next nightly: triggers: From 5928ec39b37e869a38315bed5e1eb4e005cd9326 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 19 Dec 2019 09:03:36 -0500 Subject: [PATCH 306/400] Update filters ITK modules and groups The Utilities/JSON/JSONUpdateITKModules.py script update with ITK5.1rc1 source code. --- .../json/DiscreteGaussianDerivativeImageFilter.json | 4 ++-- Code/BasicFilters/json/RoundImageFilter.json | 3 ++- Code/BasicFilters/json/SLICImageFilter.json | 3 ++- Code/BasicFilters/json/SliceImageFilter.json | 5 +++-- Code/BasicFilters/json/UnaryMinusImageFilter.json | 3 ++- Code/BasicFilters/json/UnsharpMaskImageFilter.json | 3 ++- 6 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Code/BasicFilters/json/DiscreteGaussianDerivativeImageFilter.json b/Code/BasicFilters/json/DiscreteGaussianDerivativeImageFilter.json index 4487c388e..604c19d21 100644 --- a/Code/BasicFilters/json/DiscreteGaussianDerivativeImageFilter.json +++ b/Code/BasicFilters/json/DiscreteGaussianDerivativeImageFilter.json @@ -146,6 +146,6 @@ ], "briefdescription" : "Calculates image derivatives using discrete derivative gaussian kernels. This filter calculates Gaussian derivative by separable convolution of an image and a discrete Gaussian derivative operator (kernel).", "detaileddescription" : "The Gaussian operators used here were described by Tony Lindeberg (Discrete Scale-Space Theory and the Scale-Space Primal Sketch. Dissertation. Royal Institute of Technology, Stockholm, Sweden. May 1991.)\n\nThe variance or standard deviation (sigma) will be evaluated as pixel units if SetUseImageSpacing is off (false) or as physical units if SetUseImageSpacing is on (true, default). The variance can be set independently in each dimension.\n\nWhen the Gaussian kernel is small, this filter tends to run faster than itk::RecursiveGaussianImageFilter .\n\n\\author Ivan Macia, VICOMTech, Spain, http://www.vicomtech.es \n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/1290 \n\n\\see GaussianDerivativeOperator \n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator", - "itk_module" : "ITKReview", - "itk_group" : "Review" + "itk_module" : "ITKImageFeature", + "itk_group" : "ImageFeature" } diff --git a/Code/BasicFilters/json/RoundImageFilter.json b/Code/BasicFilters/json/RoundImageFilter.json index 119fcc589..edca35900 100644 --- a/Code/BasicFilters/json/RoundImageFilter.json +++ b/Code/BasicFilters/json/RoundImageFilter.json @@ -19,5 +19,6 @@ ], "briefdescription" : "Rounds the value of each pixel.", "detaileddescription" : "The computations are performed using itk::Math::Round(x).", - "itk_module" : "ITKImageIntensity" + "itk_module" : "ITKImageIntensity", + "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/SLICImageFilter.json b/Code/BasicFilters/json/SLICImageFilter.json index f2923e3f1..950726e5d 100644 --- a/Code/BasicFilters/json/SLICImageFilter.json +++ b/Code/BasicFilters/json/SLICImageFilter.json @@ -158,5 +158,6 @@ ], "itk_module" : "ITKSuperPixel", "detaileddescription" : "The Simple Linear Iterative Clustering (SLIC) algorithm groups pixels into a set of labeled regions or super-pixels. Super-pixels follow natural image boundaries, are compact, and are nearly uniform regions which can be used as a larger primitive for more efficient computation. The SLIC algorithm can be viewed as a spatially constrained iterative k-means method.\n\nThe original algorithm was designed to cluster on the joint domain of the images index space and it's CIELAB color space. This implementation works with images of arbitrary dimension as well as scalar, single channel, images and most multi-component image types including ITK's arbitrary length VectorImage .\n\nThe distance between a pixel and a cluster is the sum of squares of the difference between their joint range and domains ( index and value ). The computation is done in index space with scales provided by the SpatialProximityWeight parameters.\n\nThe output is a label image with each label representing a superpixel cluster. Every pixel in the output is labeled, and the starting label id is zero.\n\nThis code was contributed in the Insight Journal paper: \"Scalable Simple Linear Iterative Clustering (SSLIC) Using a\nGeneric and Parallel Approach\" by Lowekamp B. C., Chen D. T., Yaniv Z.", - "briefdescription" : "Simple Linear Iterative Clustering (SLIC) super-pixel segmentation." + "briefdescription" : "Simple Linear Iterative Clustering (SLIC) super-pixel segmentation.", + "itk_group" : "SuperPixel" } diff --git a/Code/BasicFilters/json/SliceImageFilter.json b/Code/BasicFilters/json/SliceImageFilter.json index b66e113e9..da011af4b 100644 --- a/Code/BasicFilters/json/SliceImageFilter.json +++ b/Code/BasicFilters/json/SliceImageFilter.json @@ -53,7 +53,8 @@ ] } ], - "itk_module" : "ITKCommon", + "itk_module" : "ITKImageGrid", "detaileddescription" : "This class is designed to facilitate the implementation of extended sliced based indexing into images.\n\nThe input and output image must be of the same dimension.\n\nThe input parameters are a starting and stopping index as well as a stepping size. The starting index indicates the first pixels to be used and for each dimension the index is incremented by the step until the index is equal to or \"beyond\" the stopping index. If the step is negative then the image will be reversed in the dimension, and the stopping index is expected to be less then the starting index. If the stopping index is already beyond the starting index then an image of size zero will be returned.\n\nThe output image's starting index is always zero. The origin is the physical location of the starting index. The output directions cosine matrix is that of the input but with sign changes matching that of the step's sign.\n\n\\note In certain combinations such as with start=1, and step>1 while the physical location of the center of the pixel remains the same, the extent (edge to edge space) of the output image will be beyond the extent of the original image.", - "briefdescription" : "Slices an image based on a starting index and a stopping index, and a step size." + "briefdescription" : "Slices an image based on a starting index and a stopping index, and a step size.", + "itk_group" : "ImageGrid" } diff --git a/Code/BasicFilters/json/UnaryMinusImageFilter.json b/Code/BasicFilters/json/UnaryMinusImageFilter.json index 9133face7..2403daeec 100644 --- a/Code/BasicFilters/json/UnaryMinusImageFilter.json +++ b/Code/BasicFilters/json/UnaryMinusImageFilter.json @@ -52,5 +52,6 @@ ], "briefdescription" : "Implements pixel-wise generic operation on one image.", "detaileddescription" : "This class is parameterized over the type of the input image and the type of the output image. It is also parameterized by the operation to be applied, using a Functor style.\n\nUnaryFunctorImageFilter allows the output dimension of the filter to be larger than the input dimension. Thus subclasses of the UnaryFunctorImageFilter (like the CastImageFilter ) can be used to promote a 2D image to a 3D image, etc.\n\n\\see BinaryFunctorImageFilter TernaryFunctorImageFilter", - "itk_module" : "ITKCommon" + "itk_module" : "ITKCommon", + "itk_group" : "Common" } diff --git a/Code/BasicFilters/json/UnsharpMaskImageFilter.json b/Code/BasicFilters/json/UnsharpMaskImageFilter.json index 2bd6e6cff..95e4f62ee 100644 --- a/Code/BasicFilters/json/UnsharpMaskImageFilter.json +++ b/Code/BasicFilters/json/UnsharpMaskImageFilter.json @@ -74,5 +74,6 @@ ], "briefdescription" : "Edge enhancement filter.", "detaileddescription" : "This filter subtracts a smoothed version of the image from the image to achieve the edge enhancing effect. https://en.wikipedia.org/w/index.php?title=Unsharp_masking&oldid=750486803#Photographic_unsharp_masking \n\nIt has configurable amount, radius (sigma) and threshold, and whether to clamp the resulting values to the range of output type.\n\nFormula: sharpened=original+[abs(original-blurred)-threshold]*amount\n\nIf clamping is turned off (it is on by default), casting to output pixel format is done using C++ defaults, meaning that values are not clamped but rather wrap around e.g. 260 -> 4 (unsigned char).\n\n\\see ImageToImageFilter \n\n\\see SmoothingRecursiveGaussianImageFilter \n\n\\see RescaleIntensityImageFilter", - "itk_module" : "ITKImageFeature" + "itk_module" : "ITKImageFeature", + "itk_group" : "ImageFeature" } From 10ff9d0632310473811f70745109b1698155aa93 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 19 Dec 2019 13:22:23 -0500 Subject: [PATCH 307/400] Add dot prefix to RTD configuration --- readthedocs.yml => .readthedocs.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename readthedocs.yml => .readthedocs.yml (100%) diff --git a/readthedocs.yml b/.readthedocs.yml similarity index 100% rename from readthedocs.yml rename to .readthedocs.yml From f9fba230d00194d13e9fbe7ea4185f185be00407 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 19 Dec 2019 13:22:51 -0500 Subject: [PATCH 308/400] Move the RTD configuration from the web GUI to the configuration file --- .readthedocs.yml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 0895ea87a..d0b7f5d6c 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,2 +1,19 @@ +# .readthedocs.yml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details -requirements_file: Documentation/docs/requirements.txt +# Required +version: 2 + +# Optionally build your docs in additional formats such as PDF and ePub +formats: all + +# Build documentation in the docs/ directory with Sphinx +sphinx: + configuration: conf.py + +# Optionally set the version of Python and requirements required to build your docs +python: + version: 3.7 + install: + - requirements: Documentation/docs/requirements.txt From 4b4b688bdf45923112f0fa0d51757665d7510f20 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 19 Dec 2019 09:04:32 -0500 Subject: [PATCH 309/400] JSON beautification for style --- ...ptiveHistogramEqualizationImageFilter.json | 6 +- .../json/LabelOverlapMeasuresImageFilter.json | 74 +++++++++---------- Code/BasicFilters/json/SliceImageFilter.json | 1 - 3 files changed, 40 insertions(+), 41 deletions(-) diff --git a/Code/BasicFilters/json/AdaptiveHistogramEqualizationImageFilter.json b/Code/BasicFilters/json/AdaptiveHistogramEqualizationImageFilter.json index 4071ae028..ab5f69fdf 100644 --- a/Code/BasicFilters/json/AdaptiveHistogramEqualizationImageFilter.json +++ b/Code/BasicFilters/json/AdaptiveHistogramEqualizationImageFilter.json @@ -50,9 +50,9 @@ "settings" : [ { "parameter" : "Alpha", - "value" : 0.0, - "java_value" : "0.0f", - "csharp_value" : "0.0f" + "value" : 0.0, + "java_value" : "0.0f", + "csharp_value" : "0.0f" }, { "parameter" : "Beta", diff --git a/Code/BasicFilters/json/LabelOverlapMeasuresImageFilter.json b/Code/BasicFilters/json/LabelOverlapMeasuresImageFilter.json index 504ee39ea..893431f2b 100644 --- a/Code/BasicFilters/json/LabelOverlapMeasuresImageFilter.json +++ b/Code/BasicFilters/json/LabelOverlapMeasuresImageFilter.json @@ -18,16 +18,16 @@ }, { "name" : "FalseNegativeError", - "type" : "double", - "no_print" : true, - "active" : true, - "custom_cast" : "value", - "parameters" :[ + "type" : "double", + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" : [ { "name" : "label", "type" : "int64_t" } - ], + ], "detaileddescriptionGet" : "Get the false negative error over all labels." }, { @@ -40,15 +40,15 @@ { "name" : "FalsePositiveError", "type" : "double", - "no_print" : true, - "active" : true, - "custom_cast" : "value", - "parameters" :[ + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" : [ { "name" : "label", "type" : "int64_t" } - ], + ], "detaileddescriptionGet" : "Get the false positive error over all labels." }, { @@ -63,15 +63,15 @@ "type" : "double", "default" : 0.0, "briefdescriptionGet" : "", - "no_print" : true, - "active" : true, - "custom_cast" : "value", - "parameters" :[ + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" : [ { "name" : "label", "type" : "int64_t" } - ], + ], "detaileddescriptionGet" : "Get the mean overlap (Dice coefficient) over all labels." }, { @@ -86,15 +86,15 @@ "type" : "double", "default" : 0.0, "briefdescriptionGet" : "", - "no_print" : true, - "active" : true, - "custom_cast" : "value", - "parameters" :[ + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" : [ { "name" : "label", "type" : "int64_t" } - ], + ], "detaileddescriptionGet" : "Get the union overlap (Jaccard coefficient) over all labels." }, { @@ -109,15 +109,15 @@ "type" : "double", "default" : 0.0, "briefdescriptionGet" : "", - "no_print" : true, - "active" : true, - "custom_cast" : "value", - "parameters" :[ + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" : [ { "name" : "label", "type" : "int64_t" } - ], + ], "detaileddescriptionGet" : "Get the volume similarity over all labels." }, { @@ -132,15 +132,15 @@ "type" : "double", "default" : 0.0, "briefdescriptionGet" : "", - "no_print" : true, - "active" : true, - "custom_cast" : "value", - "parameters" :[ + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" : [ { "name" : "label", "type" : "int64_t" } - ], + ], "detaileddescriptionGet" : "Get the union overlap (Jaccard coefficient) over all labels." }, { @@ -155,15 +155,15 @@ "type" : "double", "default" : 0.0, "briefdescriptionGet" : "", - "no_print" : true, - "active" : true, - "custom_cast" : "value", - "parameters" :[ + "no_print" : true, + "active" : true, + "custom_cast" : "value", + "parameters" : [ { "name" : "label", "type" : "int64_t" } - ], + ], "detaileddescriptionGet" : "Get the mean overlap (Dice coefficient) over all labels." } ], @@ -305,7 +305,7 @@ { "name" : "DiceCoefficient", "value" : 0.8842423479027586, - "tolerance" : 1e-05, + "tolerance" : 1e-05, "parameters" : [ "1" ] diff --git a/Code/BasicFilters/json/SliceImageFilter.json b/Code/BasicFilters/json/SliceImageFilter.json index da011af4b..8b2ad40d3 100644 --- a/Code/BasicFilters/json/SliceImageFilter.json +++ b/Code/BasicFilters/json/SliceImageFilter.json @@ -5,7 +5,6 @@ "number_of_inputs" : 1, "pixel_types" : "NonLabelPixelIDTypeList", "custom_register" : "#ifdef SITK_4D_IMAGES\n this->m_MemberFactory->RegisterMemberFunctions< PixelIDTypeList, 4 > ();\n #endif\n this->m_MemberFactory->RegisterMemberFunctions< PixelIDTypeList, 3 > ();\n this->m_MemberFactory->RegisterMemberFunctions< PixelIDTypeList, 2 > ();", - "members" : [ { "name" : "Start", From 181ab2354f7bdbaf39b7bd26adfa867e50d85849 Mon Sep 17 00:00:00 2001 From: Philip MacMenamin Date: Fri, 20 Dec 2019 10:22:45 -0500 Subject: [PATCH 310/400] Moves Sphinx/doc related files to conventional loc --- {Documentation/docs => docs}/Makefile | 0 {_static => docs/_static}/style.css | 0 {_templates => docs/_templates}/breadcrumbs.html | 0 {Documentation/docs => docs}/images/.gitignore | 0 .../docs => docs}/images/BuildPathConfiguration.jpg.sha512 | 0 {Documentation/docs => docs}/images/CMakeLists.txt | 0 .../docs => docs}/images/EclipseConfigureBuildPath.jpg.sha512 | 0 .../docs => docs}/images/ImageOriginAndSpacing.svg.sha512 | 0 {Documentation/docs => docs}/images/ManagedLibrary.jpg.sha512 | 0 .../docs => docs}/images/NativeLibraryProperties.jpg.sha512 | 0 .../docs => docs}/images/NewVisualStudioProject.jpg.sha512 | 0 {Documentation/docs => docs}/images/Readme.md | 0 .../docs => docs}/images/SimpleITKCSharpUnzip.jpg.sha512 | 0 .../images/VisualStudioConfigurationManager.jpg.sha512 | 0 .../docs => docs}/images/VisualStudioExample.jpg.sha512 | 0 {Documentation/docs => docs}/images/imageJ.png.sha512 | 0 {Documentation/docs => docs}/images/isbi.png.sha512 | 0 {Documentation/docs => docs}/images/miccai.png.sha512 | 0 .../docs => docs}/images/nonisotropicVsIsotropic.svg.sha512 | 0 {Documentation/docs => docs}/images/simpleitk_logo.png.sha512 | 0 .../docs => docs}/images/spatialRelationship.svg.sha512 | 0 {Documentation/docs => docs}/images/spie.png.sha512 | 0 {Documentation/docs => docs}/make.bat | 0 {Documentation/docs => docs}/requirements.txt | 0 {Documentation/docs => docs}/source/FilterTemplates.rst | 0 {Documentation/docs => docs}/source/IO.rst | 0 {Documentation/docs => docs}/source/building.rst | 0 conf.py => docs/source/conf.py | 0 {Documentation/docs => docs}/source/conventions.rst | 0 {Documentation/docs => docs}/source/faq.rst | 0 {Documentation/docs => docs}/source/filters.rst | 0 {Documentation/docs => docs}/source/fundamentalConcepts.rst | 0 index.rst => docs/source/index.rst | 0 {Documentation/docs => docs}/source/installation.rst | 0 {Documentation/docs => docs}/source/registrationExamplePrefix.rst | 0 {Documentation/docs => docs}/source/registrationOverview.rst | 0 {Documentation/docs => docs}/source/setUp.rst | 0 {Documentation/docs => docs}/source/tutorialsAndCourses.rst | 0 {Documentation/docs => docs}/static/.gitignore | 0 39 files changed, 0 insertions(+), 0 deletions(-) rename {Documentation/docs => docs}/Makefile (100%) rename {_static => docs/_static}/style.css (100%) rename {_templates => docs/_templates}/breadcrumbs.html (100%) rename {Documentation/docs => docs}/images/.gitignore (100%) rename {Documentation/docs => docs}/images/BuildPathConfiguration.jpg.sha512 (100%) rename {Documentation/docs => docs}/images/CMakeLists.txt (100%) rename {Documentation/docs => docs}/images/EclipseConfigureBuildPath.jpg.sha512 (100%) rename {Documentation/docs => docs}/images/ImageOriginAndSpacing.svg.sha512 (100%) rename {Documentation/docs => docs}/images/ManagedLibrary.jpg.sha512 (100%) rename {Documentation/docs => docs}/images/NativeLibraryProperties.jpg.sha512 (100%) rename {Documentation/docs => docs}/images/NewVisualStudioProject.jpg.sha512 (100%) rename {Documentation/docs => docs}/images/Readme.md (100%) rename {Documentation/docs => docs}/images/SimpleITKCSharpUnzip.jpg.sha512 (100%) rename {Documentation/docs => docs}/images/VisualStudioConfigurationManager.jpg.sha512 (100%) rename {Documentation/docs => docs}/images/VisualStudioExample.jpg.sha512 (100%) rename {Documentation/docs => docs}/images/imageJ.png.sha512 (100%) rename {Documentation/docs => docs}/images/isbi.png.sha512 (100%) rename {Documentation/docs => docs}/images/miccai.png.sha512 (100%) rename {Documentation/docs => docs}/images/nonisotropicVsIsotropic.svg.sha512 (100%) rename {Documentation/docs => docs}/images/simpleitk_logo.png.sha512 (100%) rename {Documentation/docs => docs}/images/spatialRelationship.svg.sha512 (100%) rename {Documentation/docs => docs}/images/spie.png.sha512 (100%) rename {Documentation/docs => docs}/make.bat (100%) rename {Documentation/docs => docs}/requirements.txt (100%) rename {Documentation/docs => docs}/source/FilterTemplates.rst (100%) rename {Documentation/docs => docs}/source/IO.rst (100%) rename {Documentation/docs => docs}/source/building.rst (100%) rename conf.py => docs/source/conf.py (100%) rename {Documentation/docs => docs}/source/conventions.rst (100%) rename {Documentation/docs => docs}/source/faq.rst (100%) rename {Documentation/docs => docs}/source/filters.rst (100%) rename {Documentation/docs => docs}/source/fundamentalConcepts.rst (100%) rename index.rst => docs/source/index.rst (100%) rename {Documentation/docs => docs}/source/installation.rst (100%) rename {Documentation/docs => docs}/source/registrationExamplePrefix.rst (100%) rename {Documentation/docs => docs}/source/registrationOverview.rst (100%) rename {Documentation/docs => docs}/source/setUp.rst (100%) rename {Documentation/docs => docs}/source/tutorialsAndCourses.rst (100%) rename {Documentation/docs => docs}/static/.gitignore (100%) diff --git a/Documentation/docs/Makefile b/docs/Makefile similarity index 100% rename from Documentation/docs/Makefile rename to docs/Makefile diff --git a/_static/style.css b/docs/_static/style.css similarity index 100% rename from _static/style.css rename to docs/_static/style.css diff --git a/_templates/breadcrumbs.html b/docs/_templates/breadcrumbs.html similarity index 100% rename from _templates/breadcrumbs.html rename to docs/_templates/breadcrumbs.html diff --git a/Documentation/docs/images/.gitignore b/docs/images/.gitignore similarity index 100% rename from Documentation/docs/images/.gitignore rename to docs/images/.gitignore diff --git a/Documentation/docs/images/BuildPathConfiguration.jpg.sha512 b/docs/images/BuildPathConfiguration.jpg.sha512 similarity index 100% rename from Documentation/docs/images/BuildPathConfiguration.jpg.sha512 rename to docs/images/BuildPathConfiguration.jpg.sha512 diff --git a/Documentation/docs/images/CMakeLists.txt b/docs/images/CMakeLists.txt similarity index 100% rename from Documentation/docs/images/CMakeLists.txt rename to docs/images/CMakeLists.txt diff --git a/Documentation/docs/images/EclipseConfigureBuildPath.jpg.sha512 b/docs/images/EclipseConfigureBuildPath.jpg.sha512 similarity index 100% rename from Documentation/docs/images/EclipseConfigureBuildPath.jpg.sha512 rename to docs/images/EclipseConfigureBuildPath.jpg.sha512 diff --git a/Documentation/docs/images/ImageOriginAndSpacing.svg.sha512 b/docs/images/ImageOriginAndSpacing.svg.sha512 similarity index 100% rename from Documentation/docs/images/ImageOriginAndSpacing.svg.sha512 rename to docs/images/ImageOriginAndSpacing.svg.sha512 diff --git a/Documentation/docs/images/ManagedLibrary.jpg.sha512 b/docs/images/ManagedLibrary.jpg.sha512 similarity index 100% rename from Documentation/docs/images/ManagedLibrary.jpg.sha512 rename to docs/images/ManagedLibrary.jpg.sha512 diff --git a/Documentation/docs/images/NativeLibraryProperties.jpg.sha512 b/docs/images/NativeLibraryProperties.jpg.sha512 similarity index 100% rename from Documentation/docs/images/NativeLibraryProperties.jpg.sha512 rename to docs/images/NativeLibraryProperties.jpg.sha512 diff --git a/Documentation/docs/images/NewVisualStudioProject.jpg.sha512 b/docs/images/NewVisualStudioProject.jpg.sha512 similarity index 100% rename from Documentation/docs/images/NewVisualStudioProject.jpg.sha512 rename to docs/images/NewVisualStudioProject.jpg.sha512 diff --git a/Documentation/docs/images/Readme.md b/docs/images/Readme.md similarity index 100% rename from Documentation/docs/images/Readme.md rename to docs/images/Readme.md diff --git a/Documentation/docs/images/SimpleITKCSharpUnzip.jpg.sha512 b/docs/images/SimpleITKCSharpUnzip.jpg.sha512 similarity index 100% rename from Documentation/docs/images/SimpleITKCSharpUnzip.jpg.sha512 rename to docs/images/SimpleITKCSharpUnzip.jpg.sha512 diff --git a/Documentation/docs/images/VisualStudioConfigurationManager.jpg.sha512 b/docs/images/VisualStudioConfigurationManager.jpg.sha512 similarity index 100% rename from Documentation/docs/images/VisualStudioConfigurationManager.jpg.sha512 rename to docs/images/VisualStudioConfigurationManager.jpg.sha512 diff --git a/Documentation/docs/images/VisualStudioExample.jpg.sha512 b/docs/images/VisualStudioExample.jpg.sha512 similarity index 100% rename from Documentation/docs/images/VisualStudioExample.jpg.sha512 rename to docs/images/VisualStudioExample.jpg.sha512 diff --git a/Documentation/docs/images/imageJ.png.sha512 b/docs/images/imageJ.png.sha512 similarity index 100% rename from Documentation/docs/images/imageJ.png.sha512 rename to docs/images/imageJ.png.sha512 diff --git a/Documentation/docs/images/isbi.png.sha512 b/docs/images/isbi.png.sha512 similarity index 100% rename from Documentation/docs/images/isbi.png.sha512 rename to docs/images/isbi.png.sha512 diff --git a/Documentation/docs/images/miccai.png.sha512 b/docs/images/miccai.png.sha512 similarity index 100% rename from Documentation/docs/images/miccai.png.sha512 rename to docs/images/miccai.png.sha512 diff --git a/Documentation/docs/images/nonisotropicVsIsotropic.svg.sha512 b/docs/images/nonisotropicVsIsotropic.svg.sha512 similarity index 100% rename from Documentation/docs/images/nonisotropicVsIsotropic.svg.sha512 rename to docs/images/nonisotropicVsIsotropic.svg.sha512 diff --git a/Documentation/docs/images/simpleitk_logo.png.sha512 b/docs/images/simpleitk_logo.png.sha512 similarity index 100% rename from Documentation/docs/images/simpleitk_logo.png.sha512 rename to docs/images/simpleitk_logo.png.sha512 diff --git a/Documentation/docs/images/spatialRelationship.svg.sha512 b/docs/images/spatialRelationship.svg.sha512 similarity index 100% rename from Documentation/docs/images/spatialRelationship.svg.sha512 rename to docs/images/spatialRelationship.svg.sha512 diff --git a/Documentation/docs/images/spie.png.sha512 b/docs/images/spie.png.sha512 similarity index 100% rename from Documentation/docs/images/spie.png.sha512 rename to docs/images/spie.png.sha512 diff --git a/Documentation/docs/make.bat b/docs/make.bat similarity index 100% rename from Documentation/docs/make.bat rename to docs/make.bat diff --git a/Documentation/docs/requirements.txt b/docs/requirements.txt similarity index 100% rename from Documentation/docs/requirements.txt rename to docs/requirements.txt diff --git a/Documentation/docs/source/FilterTemplates.rst b/docs/source/FilterTemplates.rst similarity index 100% rename from Documentation/docs/source/FilterTemplates.rst rename to docs/source/FilterTemplates.rst diff --git a/Documentation/docs/source/IO.rst b/docs/source/IO.rst similarity index 100% rename from Documentation/docs/source/IO.rst rename to docs/source/IO.rst diff --git a/Documentation/docs/source/building.rst b/docs/source/building.rst similarity index 100% rename from Documentation/docs/source/building.rst rename to docs/source/building.rst diff --git a/conf.py b/docs/source/conf.py similarity index 100% rename from conf.py rename to docs/source/conf.py diff --git a/Documentation/docs/source/conventions.rst b/docs/source/conventions.rst similarity index 100% rename from Documentation/docs/source/conventions.rst rename to docs/source/conventions.rst diff --git a/Documentation/docs/source/faq.rst b/docs/source/faq.rst similarity index 100% rename from Documentation/docs/source/faq.rst rename to docs/source/faq.rst diff --git a/Documentation/docs/source/filters.rst b/docs/source/filters.rst similarity index 100% rename from Documentation/docs/source/filters.rst rename to docs/source/filters.rst diff --git a/Documentation/docs/source/fundamentalConcepts.rst b/docs/source/fundamentalConcepts.rst similarity index 100% rename from Documentation/docs/source/fundamentalConcepts.rst rename to docs/source/fundamentalConcepts.rst diff --git a/index.rst b/docs/source/index.rst similarity index 100% rename from index.rst rename to docs/source/index.rst diff --git a/Documentation/docs/source/installation.rst b/docs/source/installation.rst similarity index 100% rename from Documentation/docs/source/installation.rst rename to docs/source/installation.rst diff --git a/Documentation/docs/source/registrationExamplePrefix.rst b/docs/source/registrationExamplePrefix.rst similarity index 100% rename from Documentation/docs/source/registrationExamplePrefix.rst rename to docs/source/registrationExamplePrefix.rst diff --git a/Documentation/docs/source/registrationOverview.rst b/docs/source/registrationOverview.rst similarity index 100% rename from Documentation/docs/source/registrationOverview.rst rename to docs/source/registrationOverview.rst diff --git a/Documentation/docs/source/setUp.rst b/docs/source/setUp.rst similarity index 100% rename from Documentation/docs/source/setUp.rst rename to docs/source/setUp.rst diff --git a/Documentation/docs/source/tutorialsAndCourses.rst b/docs/source/tutorialsAndCourses.rst similarity index 100% rename from Documentation/docs/source/tutorialsAndCourses.rst rename to docs/source/tutorialsAndCourses.rst diff --git a/Documentation/docs/static/.gitignore b/docs/static/.gitignore similarity index 100% rename from Documentation/docs/static/.gitignore rename to docs/static/.gitignore From dc0ea5cab3e1f26f23d6f963b24ae1173a32c40b Mon Sep 17 00:00:00 2001 From: Philip MacMenamin Date: Fri, 20 Dec 2019 10:30:52 -0500 Subject: [PATCH 311/400] Modifies path of example code to conform with new docs --- .../AdvancedImageReading/Documentation.rst | 16 +++--- Examples/CSharp/Documentation.rst | 2 +- .../DemonsRegistration1/Documentation.rst | 6 +-- .../DemonsRegistration2/Documentation.rst | 6 +-- .../DicomImagePrintTags/Documentation.rst | 4 +- .../DicomSeriesFromArray/Documentation.rst | 4 +- .../Documentation.rst | 4 +- Examples/DicomSeriesReader/Documentation.rst | 10 ++-- .../Documentation.rst | 6 +-- .../FilterProgressReporting/Documentation.rst | 24 ++++----- Examples/HelloWorld/Documentation.rst | 16 +++--- Examples/ITKIntegration/Documentation.rst | 2 +- .../ImageGridManipulation/Documentation.rst | 4 +- Examples/ImageIOSelection/Documentation.rst | 4 +- .../Documentation.rst | 14 ++--- .../Documentation.rst | 10 ++-- .../Documentation.rst | 6 +-- .../Documentation.rst | 6 +-- .../Documentation.rst | 8 +-- .../Documentation.rst | 6 +-- .../Documentation.rst | 6 +-- .../Documentation.rst | 6 +-- .../Documentation.rst | 4 +- Examples/ImageViewing/Documentation.rst | 4 +- .../N4BiasFieldCorrection/Documentation.rst | 4 +- Examples/Python/Documentation.rst | 24 ++++----- Examples/SimpleGaussian/Documentation.rst | 16 +++--- Examples/index.rst | 52 +++++++++---------- 28 files changed, 137 insertions(+), 137 deletions(-) diff --git a/Examples/AdvancedImageReading/Documentation.rst b/Examples/AdvancedImageReading/Documentation.rst index ec043562d..05ca022d0 100644 --- a/Examples/AdvancedImageReading/Documentation.rst +++ b/Examples/AdvancedImageReading/Documentation.rst @@ -28,12 +28,12 @@ always in a sub region of the image. If the specific image IO used for this oper supports streaming then this will indeed only read the sub-region, otherwise the whole image is read into memory and the sub-region is returned. The IOs that support streaming are: - 1. TIFFImageIO (supports a subset of encodings) - 2. MetaImageIO - 3. NrrdImageIO - 4. HDF5ImageIO (supports a subset of encodings) - 5. MRCImageIO - 6. VTKImageIO (supports a subset of encodings) +1. TIFFImageIO (supports a subset of encodings) +2. MetaImageIO +3. NrrdImageIO +4. HDF5ImageIO (supports a subset of encodings) +5. MRCImageIO +6. VTKImageIO (supports a subset of encodings) @@ -44,12 +44,12 @@ Code .. tab:: Python - .. literalinclude:: AdvancedImageReading.py + .. literalinclude:: ../../Examples/AdvancedImageReading/AdvancedImageReading.py :language: python :lines: 19- .. tab:: R - .. literalinclude:: AdvancedImageReading.R + .. literalinclude:: ../../Examples/AdvancedImageReading/AdvancedImageReading.R :language: R :lines: 22- diff --git a/Examples/CSharp/Documentation.rst b/Examples/CSharp/Documentation.rst index c8dfbdd7e..37d581118 100644 --- a/Examples/CSharp/Documentation.rst +++ b/Examples/CSharp/Documentation.rst @@ -10,6 +10,6 @@ Code ---- -.. literalinclude:: ImageGetBuffer.cs +.. literalinclude:: ../../Examples/CSharp/ImageGetBuffer.cs :language: c# :lines: 18- diff --git a/Examples/DemonsRegistration1/Documentation.rst b/Examples/DemonsRegistration1/Documentation.rst index 704ad7a0c..64c5780c4 100644 --- a/Examples/DemonsRegistration1/Documentation.rst +++ b/Examples/DemonsRegistration1/Documentation.rst @@ -31,18 +31,18 @@ Code .. tab:: C++ - .. literalinclude:: DemonsRegistration1.cxx + .. literalinclude:: ../../Examples/DemonsRegistration1/DemonsRegistration1.cxx :language: c++ :lines: 18- .. tab:: Python - .. literalinclude:: DemonsRegistration1.py + .. literalinclude:: ../../Examples/DemonsRegistration1/DemonsRegistration1.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: DemonsRegistration1.R + .. literalinclude:: ../../Examples/DemonsRegistration1/DemonsRegistration1.R :language: R :lines: 18- diff --git a/Examples/DemonsRegistration2/Documentation.rst b/Examples/DemonsRegistration2/Documentation.rst index b54e4e42e..0b5b4150a 100644 --- a/Examples/DemonsRegistration2/Documentation.rst +++ b/Examples/DemonsRegistration2/Documentation.rst @@ -30,18 +30,18 @@ Code .. tab:: C++ - .. literalinclude:: DemonsRegistration2.cxx + .. literalinclude:: ../../Examples/DemonsRegistration2/DemonsRegistration2.cxx :language: c++ :lines: 18- .. tab:: Python - .. literalinclude:: DemonsRegistration2.py + .. literalinclude:: ../../Examples/DemonsRegistration2/DemonsRegistration2.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: DemonsRegistration2.R + .. literalinclude:: ../../Examples/DemonsRegistration2/DemonsRegistration2.R :language: R :lines: 18- diff --git a/Examples/DicomImagePrintTags/Documentation.rst b/Examples/DicomImagePrintTags/Documentation.rst index 833e98391..832f6d069 100644 --- a/Examples/DicomImagePrintTags/Documentation.rst +++ b/Examples/DicomImagePrintTags/Documentation.rst @@ -23,12 +23,12 @@ Code .. tab:: Python - .. literalinclude:: DicomImagePrintTags.py + .. literalinclude:: ../../Examples/DicomImagePrintTags/DicomImagePrintTags.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: DicomImagePrintTags.R + .. literalinclude:: ../../Examples/DicomImagePrintTags/DicomImagePrintTags.R :language: r :lines: 18- diff --git a/Examples/DicomSeriesFromArray/Documentation.rst b/Examples/DicomSeriesFromArray/Documentation.rst index bc34b1bc4..764a373c5 100644 --- a/Examples/DicomSeriesFromArray/Documentation.rst +++ b/Examples/DicomSeriesFromArray/Documentation.rst @@ -21,12 +21,12 @@ Code .. tab:: Python - .. literalinclude:: DicomSeriesFromArray.py + .. literalinclude:: ../../Examples/DicomSeriesFromArray/DicomSeriesFromArray.py :language: python :lines: 19- .. tab:: R - .. literalinclude:: DicomSeriesFromArray.R + .. literalinclude:: ../../Examples/DicomSeriesFromArray/DicomSeriesFromArray.R :language: R :lines: 18- diff --git a/Examples/DicomSeriesReadModifyWrite/Documentation.rst b/Examples/DicomSeriesReadModifyWrite/Documentation.rst index ba4e75b31..3a4c515fc 100644 --- a/Examples/DicomSeriesReadModifyWrite/Documentation.rst +++ b/Examples/DicomSeriesReadModifyWrite/Documentation.rst @@ -23,12 +23,12 @@ Code .. tab:: Python - .. literalinclude:: DicomSeriesReadModifySeriesWrite.py + .. literalinclude:: ../../Examples/DicomSeriesReadModifyWrite/DicomSeriesReadModifySeriesWrite.py :language: python :lines: 19- .. tab:: R - .. literalinclude:: DicomSeriesReadModifySeriesWrite.R + .. literalinclude:: ../../Examples/DicomSeriesReadModifyWrite/DicomSeriesReadModifySeriesWrite.R :language: r :lines: 18- diff --git a/Examples/DicomSeriesReader/Documentation.rst b/Examples/DicomSeriesReader/Documentation.rst index 4eb8d0627..2ad011708 100644 --- a/Examples/DicomSeriesReader/Documentation.rst +++ b/Examples/DicomSeriesReader/Documentation.rst @@ -19,30 +19,30 @@ Code .. tab:: C++ - .. literalinclude:: DicomSeriesReader.cxx + .. literalinclude:: ../../Examples/DicomSeriesReader/DicomSeriesReader.cxx :language: c++ :lines: 18- .. tab:: Java - .. literalinclude:: DicomSeriesReader.java + .. literalinclude:: ../../Examples/DicomSeriesReader/DicomSeriesReader.java :language: java :lines: 18- .. tab:: Lua - .. literalinclude:: DicomSeriesReader.lua + .. literalinclude:: ../../Examples/DicomSeriesReader/DicomSeriesReader.lua :language: lua :lines: 18- .. tab:: Python - .. literalinclude:: DicomSeriesReader.py + .. literalinclude:: ../../Examples/DicomSeriesReader/DicomSeriesReader.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: DicomSeriesReader.R + .. literalinclude:: ../../Examples/DicomSeriesReader/DicomSeriesReader.R :language: R :lines: 23- diff --git a/Examples/FastMarchingSegmentation/Documentation.rst b/Examples/FastMarchingSegmentation/Documentation.rst index 0fd8b7f7d..2c426eadc 100644 --- a/Examples/FastMarchingSegmentation/Documentation.rst +++ b/Examples/FastMarchingSegmentation/Documentation.rst @@ -46,18 +46,18 @@ Code .. tab:: C# - .. literalinclude:: FastMarchingSegmentation.cs + .. literalinclude:: ../../Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs :language: c# :lines: 18- .. tab:: C++ - .. literalinclude:: FastMarchingSegmentation.cxx + .. literalinclude:: ../../Examples/FastMarchingSegmentation/FastMarchingSegmentation.cxx :language: C++ :lines: 1,19- .. tab:: Python - .. literalinclude:: FastMarchingSegmentation.py + .. literalinclude:: ../../Examples/FastMarchingSegmentation/FastMarchingSegmentation.py :language: python :lines: 1,19- diff --git a/Examples/FilterProgressReporting/Documentation.rst b/Examples/FilterProgressReporting/Documentation.rst index 3f58254c1..86f05ad76 100644 --- a/Examples/FilterProgressReporting/Documentation.rst +++ b/Examples/FilterProgressReporting/Documentation.rst @@ -49,28 +49,28 @@ languages support deriving classes from the Command class: .. group-tab:: C# - .. literalinclude:: FilterProgressReporting.cs + .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.cs :language: c# :start-after: [csharp director command] :end-before: [csharp director command] .. group-tab:: Java - .. literalinclude:: FilterProgressReporting.java + .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.java :language: java :start-after: [java director command] :end-before: [java director command] .. group-tab:: Python - .. literalinclude:: FilterProgressReporting.py + .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.py :language: python :start-after: [python director command] :end-before: [python director command] .. group-tab:: Ruby - .. literalinclude:: FilterProgressReporting.rb + .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.rb :language: ruby :start-after: [ruby director command] :end-before: [ruby director command] @@ -88,14 +88,14 @@ for functions for the ProcessObject::AddCommand method: .. group-tab:: Python - .. literalinclude:: FilterProgressReporting.py + .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.py :language: python :start-after: [python lambda command] :end-before: [python lambda command] .. group-tab:: R - .. literalinclude:: FilterProgressReporting.R + .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.R :language: r :start-after: [R lambda command] :end-before: [R lambda command] @@ -109,36 +109,36 @@ Code .. group-tab:: CSharp - .. literalinclude:: FilterProgressReporting.cs + .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.cs :language: c# :lines: 18- .. group-tab:: C++ - .. literalinclude:: FilterProgressReporting.cxx + .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.cxx :language: c++ :lines: 18- .. group-tab:: Java - .. literalinclude:: FilterProgressReporting.java + .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.java :language: java :lines: 18- .. group-tab:: Python - .. literalinclude:: FilterProgressReporting.py + .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.py :language: python :lines: 1,19- .. group-tab:: R - .. literalinclude:: FilterProgressReporting.R + .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.R :language: r :lines: 18- .. group-tab:: Ruby - .. literalinclude:: FilterProgressReporting.rb + .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.rb :language: ruby :lines: 18- diff --git a/Examples/HelloWorld/Documentation.rst b/Examples/HelloWorld/Documentation.rst index c935cab79..c5cedee73 100644 --- a/Examples/HelloWorld/Documentation.rst +++ b/Examples/HelloWorld/Documentation.rst @@ -16,48 +16,48 @@ Code .. tabs:: .. tab:: C# - .. literalinclude:: HelloWorld.cs + .. literalinclude:: ../../Examples/HelloWorld/HelloWorld.cs :language: c# :lines: 18- .. tab:: C++ - .. literalinclude:: HelloWorld.cxx + .. literalinclude:: ../../Examples/HelloWorld/HelloWorld.cxx :language: c++ :lines: 18- .. tab:: Java - .. literalinclude:: HelloWorld.java + .. literalinclude:: ../../Examples/HelloWorld/HelloWorld.java :language: java :lines: 18- .. tab:: Lua - .. literalinclude:: HelloWorld.lua + .. literalinclude:: ../../Examples/HelloWorld/HelloWorld.lua :language: lua :lines: 18- .. tab:: Python - .. literalinclude:: HelloWorld.py + .. literalinclude:: ../../Examples/HelloWorld/HelloWorld.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: HelloWorld.R + .. literalinclude:: ../../Examples/HelloWorld/HelloWorld.R :language: r :lines: 19- .. tab:: Ruby - .. literalinclude:: HelloWorld.rb + .. literalinclude:: ../../Examples/HelloWorld/HelloWorld.rb :language: ruby :lines: 18- .. tab:: Tcl - .. literalinclude:: HelloWorld.tcl + .. literalinclude:: ../../Examples/HelloWorld/HelloWorld.tcl :language: tcl :lines: 18- diff --git a/Examples/ITKIntegration/Documentation.rst b/Examples/ITKIntegration/Documentation.rst index c618daad7..fc63aa41e 100644 --- a/Examples/ITKIntegration/Documentation.rst +++ b/Examples/ITKIntegration/Documentation.rst @@ -13,6 +13,6 @@ Code .. tab:: C++ - .. literalinclude:: ITKIntegration.cxx + .. literalinclude:: ../../Examples/ITKIntegration/ITKIntegration.cxx :language: c++ :lines: 18- diff --git a/Examples/ImageGridManipulation/Documentation.rst b/Examples/ImageGridManipulation/Documentation.rst index 2b305129d..dc7418eb7 100644 --- a/Examples/ImageGridManipulation/Documentation.rst +++ b/Examples/ImageGridManipulation/Documentation.rst @@ -52,12 +52,12 @@ Code .. tab:: Python - .. literalinclude:: ImageGridManipulation.py + .. literalinclude:: ../../Examples/ImageGridManipulation/ImageGridManipulation.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: ImageGridManipulation.R + .. literalinclude:: ../../Examples/ImageGridManipulation/ImageGridManipulation.R :language: R :lines: 18- diff --git a/Examples/ImageIOSelection/Documentation.rst b/Examples/ImageIOSelection/Documentation.rst index 816311b93..e6fdd9149 100644 --- a/Examples/ImageIOSelection/Documentation.rst +++ b/Examples/ImageIOSelection/Documentation.rst @@ -28,12 +28,12 @@ Code .. tab:: Python - .. literalinclude:: ImageIOSelection.py + .. literalinclude:: ../../Examples/ImageIOSelection/ImageIOSelection.py :language: python :lines: 19- .. tab:: R - .. literalinclude:: ImageIOSelection.R + .. literalinclude:: ../../Examples/ImageIOSelection/ImageIOSelection.R :language: R :lines: 22- diff --git a/Examples/ImageRegistrationMethod1/Documentation.rst b/Examples/ImageRegistrationMethod1/Documentation.rst index d3bfa114e..d04033d02 100644 --- a/Examples/ImageRegistrationMethod1/Documentation.rst +++ b/Examples/ImageRegistrationMethod1/Documentation.rst @@ -1,7 +1,7 @@ Image Registration Method 1 =========================== -.. include:: ../../Documentation/docs/source/registrationExamplePrefix.rst +.. include:: registrationExamplePrefix.rst Overview -------- @@ -15,36 +15,36 @@ Code .. tab:: C# - .. literalinclude:: ImageRegistrationMethod1.cs + .. literalinclude:: ../../Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.cs :language: c# :lines: 18- .. tab:: C++ - .. literalinclude:: ImageRegistrationMethod1.cxx + .. literalinclude:: ../../Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.cxx :language: c++ :lines: 18- .. tab:: Java - .. literalinclude:: ImageRegistrationMethod1.java + .. literalinclude:: ../../Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.java :language: java :lines: 18- .. tab:: Lua - .. literalinclude:: ImageRegistrationMethod1.lua + .. literalinclude:: ../../Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.lua :language: lua :lines: 18- .. tab:: Python - .. literalinclude:: ImageRegistrationMethod1.py + .. literalinclude:: ../../Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: ImageRegistrationMethod1.R + .. literalinclude:: ../../Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.R :language: r :lines: 18- diff --git a/Examples/ImageRegistrationMethod2/Documentation.rst b/Examples/ImageRegistrationMethod2/Documentation.rst index 48abb584f..37588c3f0 100644 --- a/Examples/ImageRegistrationMethod2/Documentation.rst +++ b/Examples/ImageRegistrationMethod2/Documentation.rst @@ -1,7 +1,7 @@ Image Registration Method 2 =========================== -.. include:: ../../Documentation/docs/source/registrationExamplePrefix.rst +.. include:: registrationExamplePrefix.rst Overview -------- @@ -14,24 +14,24 @@ Code .. tab:: C# - .. literalinclude:: ImageRegistrationMethod2.cs + .. literalinclude:: ../../Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cs :language: c# :lines: 18- .. tab:: C++ - .. literalinclude:: ImageRegistrationMethod2.cxx + .. literalinclude:: ../../Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cxx :language: c++ :lines: 18- .. tab:: Python - .. literalinclude:: ImageRegistrationMethod2.py + .. literalinclude:: ../../Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: ImageRegistrationMethod2.R + .. literalinclude:: ../../Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.R :language: R :lines: 18- diff --git a/Examples/ImageRegistrationMethod3/Documentation.rst b/Examples/ImageRegistrationMethod3/Documentation.rst index 504fe6ad0..dc6db096c 100644 --- a/Examples/ImageRegistrationMethod3/Documentation.rst +++ b/Examples/ImageRegistrationMethod3/Documentation.rst @@ -1,7 +1,7 @@ Image Registration Method 3 =========================== -.. include:: ../../Documentation/docs/source/registrationExamplePrefix.rst +.. include:: registrationExamplePrefix.rst Overview -------- @@ -13,12 +13,12 @@ Code .. tab:: Python - .. literalinclude:: ImageRegistrationMethod3.py + .. literalinclude:: ../../Examples/ImageRegistrationMethod3/ImageRegistrationMethod3.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: ImageRegistrationMethod3.R + .. literalinclude:: ../../Examples/ImageRegistrationMethod3/ImageRegistrationMethod3.R :language: R :lines: 18- diff --git a/Examples/ImageRegistrationMethod4/Documentation.rst b/Examples/ImageRegistrationMethod4/Documentation.rst index 614d89d01..d2da6309d 100644 --- a/Examples/ImageRegistrationMethod4/Documentation.rst +++ b/Examples/ImageRegistrationMethod4/Documentation.rst @@ -1,7 +1,7 @@ Image Registration Method 4 =========================== -.. include:: ../../Documentation/docs/source/registrationExamplePrefix.rst +.. include:: registrationExamplePrefix.rst Overview -------- @@ -13,12 +13,12 @@ Code .. tab:: Python - .. literalinclude:: ImageRegistrationMethod4.py + .. literalinclude:: ../../Examples/ImageRegistrationMethod4/ImageRegistrationMethod4.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: ImageRegistrationMethod4.R + .. literalinclude:: ../../Examples/ImageRegistrationMethod4/ImageRegistrationMethod4.R :language: R :lines: 18- diff --git a/Examples/ImageRegistrationMethodBSpline1/Documentation.rst b/Examples/ImageRegistrationMethodBSpline1/Documentation.rst index 42f0a46f1..f1fba8964 100644 --- a/Examples/ImageRegistrationMethodBSpline1/Documentation.rst +++ b/Examples/ImageRegistrationMethodBSpline1/Documentation.rst @@ -3,7 +3,7 @@ Image Registration Method BSpline 1 =================================== -.. include:: ../../Documentation/docs/source/registrationExamplePrefix.rst +.. include:: registrationExamplePrefix.rst Overview -------- @@ -16,18 +16,18 @@ Code .. tab:: C++ - .. literalinclude:: ImageRegistrationMethodBSpline1.cxx + .. literalinclude:: ../../Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.cxx :language: c++ :lines: 18- .. tab:: Python - .. literalinclude:: ImageRegistrationMethodBSpline1.py + .. literalinclude:: ../../Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: ImageRegistrationMethodBSpline1.R + .. literalinclude:: ../../Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.R :language: R :lines: 18- diff --git a/Examples/ImageRegistrationMethodBSpline2/Documentation.rst b/Examples/ImageRegistrationMethodBSpline2/Documentation.rst index c0cddb237..3df22557b 100644 --- a/Examples/ImageRegistrationMethodBSpline2/Documentation.rst +++ b/Examples/ImageRegistrationMethodBSpline2/Documentation.rst @@ -3,7 +3,7 @@ Image Registration Method BSpline 2 =================================== -.. include:: ../../Documentation/docs/source/registrationExamplePrefix.rst +.. include:: registrationExamplePrefix.rst Overview @@ -17,12 +17,12 @@ Code .. tab:: Python - .. literalinclude:: ImageRegistrationMethodBSpline2.py + .. literalinclude:: ../../Examples/ImageRegistrationMethodBSpline2/ImageRegistrationMethodBSpline2.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: ImageRegistrationMethodBSpline2.R + .. literalinclude:: ../../Examples/ImageRegistrationMethodBSpline2/ImageRegistrationMethodBSpline2.R :language: R :lines: 18- diff --git a/Examples/ImageRegistrationMethodBSpline3/Documentation.rst b/Examples/ImageRegistrationMethodBSpline3/Documentation.rst index 198478f04..b678b1f14 100644 --- a/Examples/ImageRegistrationMethodBSpline3/Documentation.rst +++ b/Examples/ImageRegistrationMethodBSpline3/Documentation.rst @@ -3,7 +3,7 @@ Image Registration Method BSpline 3 =================================== -.. include:: ../../Documentation/docs/source/registrationExamplePrefix.rst +.. include:: registrationExamplePrefix.rst Overview -------- @@ -49,12 +49,12 @@ Code .. tab:: C++ - .. literalinclude:: ImageRegistrationMethodBSpline3.cxx + .. literalinclude:: ../../Examples/ImageRegistrationMethodBSpline3/ImageRegistrationMethodBSpline3.cxx :language: c++ :lines: 18- .. tab:: Python - .. literalinclude:: ImageRegistrationMethodBSpline3.py + .. literalinclude:: ../../Examples/ImageRegistrationMethodBSpline3/ImageRegistrationMethodBSpline3.py :language: python :lines: 1,19- diff --git a/Examples/ImageRegistrationMethodDisplacement1/Documentation.rst b/Examples/ImageRegistrationMethodDisplacement1/Documentation.rst index 0d06ca7d5..c389c9608 100644 --- a/Examples/ImageRegistrationMethodDisplacement1/Documentation.rst +++ b/Examples/ImageRegistrationMethodDisplacement1/Documentation.rst @@ -13,18 +13,18 @@ Code .. tab:: C++ - .. literalinclude:: ImageRegistrationMethodDisplacement1.cxx + .. literalinclude:: ../../Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.cxx :language: c++ :lines: 18- .. tab:: Python - .. literalinclude:: ImageRegistrationMethodDisplacement1.py + .. literalinclude:: ../../Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: ImageRegistrationMethodDisplacement1.R + .. literalinclude:: ../../Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.R :language: R :lines: 18- diff --git a/Examples/ImageRegistrationMethodExhaustive/Documentation.rst b/Examples/ImageRegistrationMethodExhaustive/Documentation.rst index 3ce5ab8e8..e1a1d3d4b 100644 --- a/Examples/ImageRegistrationMethodExhaustive/Documentation.rst +++ b/Examples/ImageRegistrationMethodExhaustive/Documentation.rst @@ -13,12 +13,12 @@ Code .. tab:: Python - .. literalinclude:: ImageRegistrationMethodExhaustive.py + .. literalinclude:: ../../Examples/ImageRegistrationMethodExhaustive/ImageRegistrationMethodExhaustive.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: ImageRegistrationMethodExhaustive.R + .. literalinclude:: ../../Examples/ImageRegistrationMethodExhaustive/ImageRegistrationMethodExhaustive.R :language: R :lines: 18- diff --git a/Examples/ImageViewing/Documentation.rst b/Examples/ImageViewing/Documentation.rst index cd24c9485..7461a1b51 100644 --- a/Examples/ImageViewing/Documentation.rst +++ b/Examples/ImageViewing/Documentation.rst @@ -41,12 +41,12 @@ Code .. tab:: Python - .. literalinclude:: ImageViewing.py + .. literalinclude:: ../../Examples/ImageViewing/ImageViewing.py :language: python :lines: 19- .. tab:: R - .. literalinclude:: ImageViewing.R + .. literalinclude:: ../../Examples/ImageViewing/ImageViewing.R :language: R :lines: 18- diff --git a/Examples/N4BiasFieldCorrection/Documentation.rst b/Examples/N4BiasFieldCorrection/Documentation.rst index 1131b4f6b..df52425c2 100644 --- a/Examples/N4BiasFieldCorrection/Documentation.rst +++ b/Examples/N4BiasFieldCorrection/Documentation.rst @@ -44,12 +44,12 @@ Code .. tab:: Python - .. literalinclude:: N4BiasFieldCorrection.py + .. literalinclude:: ../../Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: N4BiasFieldCorrection.R + .. literalinclude:: ../../Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R :language: R :lines: 18- diff --git a/Examples/Python/Documentation.rst b/Examples/Python/Documentation.rst index e3bcb5ee1..d8164e05f 100644 --- a/Examples/Python/Documentation.rst +++ b/Examples/Python/Documentation.rst @@ -12,61 +12,61 @@ Code Python ...... -.. literalinclude:: BoarderSegmentation.py +.. literalinclude:: ../../Examples/Python/BoarderSegmentation.py :language: python :lines: 1,19- -.. literalinclude:: CannyEdge.py +.. literalinclude:: ../../Examples/Python/CannyEdge.py :language: python :lines: 1,19- -.. literalinclude:: ConnectedThresholdImageFilter.py +.. literalinclude:: ../../Examples/Python/ConnectedThresholdImageFilter.py :language: python :lines: 1,19- -.. literalinclude:: DicomModifyTags.py +.. literalinclude:: ../../Examples/Python/DicomModifyTags.py :language: python :lines: 1,19- -.. literalinclude:: DicomSeriesReader2.py +.. literalinclude:: ../../Examples/Python/DicomSeriesReader2.py :language: python :lines: 1,19- -.. literalinclude:: ExtractSlice.py +.. literalinclude:: ../../Examples/Python/ExtractSlice.py :language: python :lines: 1,19- -.. literalinclude:: FFTConvolution.py +.. literalinclude:: ../../Examples/Python/FFTConvolution.py :language: python :lines: 1,19- -.. literalinclude:: GeodesicActiceContourSegmentation.py +.. literalinclude:: ../../Examples/Python/GeodesicActiceContourSegmentation.py :language: python :lines: 1,19- -.. literalinclude:: ImageCreateAndSet.py +.. literalinclude:: ../../Examples/Python/ImageCreateAndSet.py :language: python :lines: 1,19- -.. literalinclude:: NeighborhoodConnectedImageFilter.py +.. literalinclude:: ../../Examples/Python/NeighborhoodConnectedImageFilter.py :language: python :lines: 1,19- -.. literalinclude:: ReadAndShow.py +.. literalinclude:: ../../Examples/Python/ReadAndShow.py :language: python :lines: 1,19- -.. literalinclude:: SimpleGaussianProcedural.py +.. literalinclude:: ../../Examples/Python/SimpleGaussianProcedural.py :language: python :lines: 1,19- diff --git a/Examples/SimpleGaussian/Documentation.rst b/Examples/SimpleGaussian/Documentation.rst index 47d4226b0..0026e4f1c 100644 --- a/Examples/SimpleGaussian/Documentation.rst +++ b/Examples/SimpleGaussian/Documentation.rst @@ -23,48 +23,48 @@ Code .. tab:: C# - .. literalinclude:: SimpleGaussian.cs + .. literalinclude:: ../../Examples/SimpleGaussian/SimpleGaussian.cs :language: c# :lines: 18- .. tab:: C++ - .. literalinclude:: SimpleGaussian.cxx + .. literalinclude:: ../../Examples/SimpleGaussian/SimpleGaussian.cxx :language: c++ :lines: 18- .. tab:: Java - .. literalinclude:: SimpleGaussian.java + .. literalinclude:: ../../Examples/SimpleGaussian/SimpleGaussian.java :language: java :lines: 18- .. tab:: Lua - .. literalinclude:: SimpleGaussian.lua + .. literalinclude:: ../../Examples/SimpleGaussian/SimpleGaussian.lua :language: lua :lines: 18- .. tab:: Python - .. literalinclude:: SimpleGaussian.py + .. literalinclude:: ../../Examples/SimpleGaussian/SimpleGaussian.py :language: python :lines: 1,19- .. tab:: R - .. literalinclude:: SimpleGaussian.R + .. literalinclude:: ../../Examples/SimpleGaussian/SimpleGaussian.R :language: r :lines: 18- .. tab:: Ruby - .. literalinclude:: SimpleGaussian.rb + .. literalinclude:: ../../Examples/SimpleGaussian/SimpleGaussian.rb :language: ruby :lines: 18- .. tab:: Tcl - .. literalinclude:: SimpleGaussian.tcl + .. literalinclude:: ../../Examples/SimpleGaussian/SimpleGaussian.tcl :language: tcl :lines: 18- diff --git a/Examples/index.rst b/Examples/index.rst index 29a3d5983..bc09244d4 100644 --- a/Examples/index.rst +++ b/Examples/index.rst @@ -7,29 +7,29 @@ Examples :maxdepth: 1 - HelloWorld/Documentation - CSharp/Documentation - DemonsRegistration1/Documentation - DemonsRegistration2/Documentation - DicomImagePrintTags/Documentation - DicomSeriesReader/Documentation - DicomSeriesReadModifyWrite/Documentation - DicomSeriesFromArray/Documentation - FastMarchingSegmentation/Documentation - FilterProgressReporting/Documentation - ImageGridManipulation/Documentation - ImageRegistrationMethod1/Documentation - ImageRegistrationMethod2/Documentation - ImageRegistrationMethod3/Documentation - ImageRegistrationMethod4/Documentation - ImageRegistrationMethodBSpline1/Documentation - ImageRegistrationMethodBSpline2/Documentation - ImageRegistrationMethodBSpline3/Documentation - ImageRegistrationMethodDisplacement1/Documentation - ImageRegistrationMethodExhaustive/Documentation - ITKIntegration/Documentation - N4BiasFieldCorrection/Documentation - SimpleGaussian/Documentation - ImageViewing/Documentation - AdvancedImageReading/Documentation - ImageIOSelection/Documentation + link_HelloWorld_docs + link_CSharp_docs + link_DemonsRegistration1_docs + link_DemonsRegistration2_docs + link_DicomImagePrintTags_docs + link_DicomSeriesReader_docs + link_DicomSeriesReadModifyWrite_docs + link_DicomSeriesFromArray_docs + link_FastMarchingSegmentation_docs + link_FilterProgressReporting_docs + link_ImageGridManipulation_docs + link_ImageRegistrationMethod1_docs + link_ImageRegistrationMethod2_docs + link_ImageRegistrationMethod3_docs + link_ImageRegistrationMethod4_docs + link_ImageRegistrationMethodBSpline1_docs + link_ImageRegistrationMethodBSpline2_docs + link_ImageRegistrationMethodBSpline3_docs + link_ImageRegistrationMethodDisplacement1_docs + link_ImageRegistrationMethodExhaustive_docs + link_ITKIntegration_docs + link_N4BiasFieldCorrection_docs + link_SimpleGaussian_docs + link_ImageViewing_docs + link_AdvancedImageReading_docs + link_ImageIOSelection_docs From ee7f99360beaede927527a1a88cfe715b966bb9a Mon Sep 17 00:00:00 2001 From: Philip MacMenamin Date: Fri, 20 Dec 2019 10:33:02 -0500 Subject: [PATCH 312/400] Fixes RST files for new docs --- docs/Makefile | 9 +- docs/images/CMakeLists.txt | 2 +- docs/requirements.txt | 2 +- docs/source/FilterTemplates.rst | 5 +- docs/source/IO.rst | 4 +- docs/source/_static/style.css | 111 ++++++++++++++++ docs/source/conf.py | 118 +++++++++--------- docs/source/conventions.rst | 2 +- docs/source/faq.rst | 6 +- docs/source/filters.rst | 8 +- docs/source/index.rst | 37 +++--- docs/source/installation.rst | 59 +++++---- .../source/link_AdvancedImageReading_docs.rst | 1 + docs/source/link_CSharp_docs.rst | 1 + docs/source/link_DemonsRegistration1_docs.rst | 2 + docs/source/link_DemonsRegistration2_docs.rst | 2 + docs/source/link_DicomImagePrintTags_docs.rst | 2 + .../source/link_DicomSeriesFromArray_docs.rst | 2 + .../link_DicomSeriesReadModifyWrite_docs.rst | 2 + docs/source/link_DicomSeriesReader_docs.rst | 2 + .../link_FastMarchingSegmentation_docs.rst | 2 + .../link_FilterProgressReporting_docs.rst | 2 + docs/source/link_HelloWorld_docs.rst | 2 + docs/source/link_ITKIntegration_docs.rst | 2 + .../link_ImageGridManipulation_docs.rst | 2 + docs/source/link_ImageIOSelection_docs.rst | 2 + .../link_ImageRegistrationMethod1_docs.rst | 2 + .../link_ImageRegistrationMethod2_docs.rst | 2 + .../link_ImageRegistrationMethod3_docs.rst | 2 + .../link_ImageRegistrationMethod4_docs.rst | 2 + ...k_ImageRegistrationMethodBSpline1_docs.rst | 2 + ...k_ImageRegistrationMethodBSpline2_docs.rst | 2 + ...k_ImageRegistrationMethodBSpline3_docs.rst | 2 + ...geRegistrationMethodDisplacement1_docs.rst | 2 + ...ImageRegistrationMethodExhaustive_docs.rst | 2 + docs/source/link_ImageViewing_docs.rst | 2 + .../link_N4BiasFieldCorrection_docs.rst | 2 + docs/source/link_SimpleGaussian_docs.rst | 2 + docs/source/link_examples.rst | 1 + docs/source/setUp.rst | 5 +- 40 files changed, 298 insertions(+), 121 deletions(-) create mode 100644 docs/source/_static/style.css create mode 100644 docs/source/link_AdvancedImageReading_docs.rst create mode 100644 docs/source/link_CSharp_docs.rst create mode 100644 docs/source/link_DemonsRegistration1_docs.rst create mode 100644 docs/source/link_DemonsRegistration2_docs.rst create mode 100644 docs/source/link_DicomImagePrintTags_docs.rst create mode 100644 docs/source/link_DicomSeriesFromArray_docs.rst create mode 100644 docs/source/link_DicomSeriesReadModifyWrite_docs.rst create mode 100644 docs/source/link_DicomSeriesReader_docs.rst create mode 100644 docs/source/link_FastMarchingSegmentation_docs.rst create mode 100644 docs/source/link_FilterProgressReporting_docs.rst create mode 100644 docs/source/link_HelloWorld_docs.rst create mode 100644 docs/source/link_ITKIntegration_docs.rst create mode 100644 docs/source/link_ImageGridManipulation_docs.rst create mode 100644 docs/source/link_ImageIOSelection_docs.rst create mode 100644 docs/source/link_ImageRegistrationMethod1_docs.rst create mode 100644 docs/source/link_ImageRegistrationMethod2_docs.rst create mode 100644 docs/source/link_ImageRegistrationMethod3_docs.rst create mode 100644 docs/source/link_ImageRegistrationMethod4_docs.rst create mode 100644 docs/source/link_ImageRegistrationMethodBSpline1_docs.rst create mode 100644 docs/source/link_ImageRegistrationMethodBSpline2_docs.rst create mode 100644 docs/source/link_ImageRegistrationMethodBSpline3_docs.rst create mode 100644 docs/source/link_ImageRegistrationMethodDisplacement1_docs.rst create mode 100644 docs/source/link_ImageRegistrationMethodExhaustive_docs.rst create mode 100644 docs/source/link_ImageViewing_docs.rst create mode 100644 docs/source/link_N4BiasFieldCorrection_docs.rst create mode 100644 docs/source/link_SimpleGaussian_docs.rst create mode 100644 docs/source/link_examples.rst diff --git a/docs/Makefile b/docs/Makefile index 65386bd7a..c51dde38c 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -2,11 +2,10 @@ # # You can set these variables from the command line. -SPHINXOPTS = +SPHINXOPTS = -aE SPHINXBUILD = sphinx-build -SPHINXPROJ = SimpleITK -SOURCEDIR = ../.. -BUILDDIR = ../../build +SOURCEDIR = source +BUILDDIR = build # Put it first so that "make" without argument is like "make help". help: @@ -17,4 +16,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/images/CMakeLists.txt b/docs/images/CMakeLists.txt index 77e53f38e..03638741e 100644 --- a/docs/images/CMakeLists.txt +++ b/docs/images/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required ( VERSION 3.0 FATAL_ERROR ) project( SimpleITKSphinx-Data LANGUAGES NONE ) if (NOT CMAKE_PROJECT_NAME STREQUAL "SimpleITK" ) - set( SimpleITK_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../.." ) + set( SimpleITK_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../.." ) list(INSERT CMAKE_MODULE_PATH 0 "${SimpleITK_SOURCE_DIR}/CMake") endif() diff --git a/docs/requirements.txt b/docs/requirements.txt index 405fd30ac..d46aed0f4 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,3 @@ sphinx-tabs cmake -sphinx_rtd_theme \ No newline at end of file +sphinx_rtd_theme diff --git a/docs/source/FilterTemplates.rst b/docs/source/FilterTemplates.rst index 8bdf37676..6f0317dc4 100644 --- a/docs/source/FilterTemplates.rst +++ b/docs/source/FilterTemplates.rst @@ -1,5 +1,8 @@ +Developer +********* + Image Filter Templates ReadMe -***************************** +============================= This document outlines the system used to generate SimpleITK files using json data files in conjunction with the template .h and .cxx files. diff --git a/docs/source/IO.rst b/docs/source/IO.rst index 46e49a35c..159eadaec 100644 --- a/docs/source/IO.rst +++ b/docs/source/IO.rst @@ -11,7 +11,7 @@ Support for a particular format is handled by a specific ITK `ImageIO `_ class. By default, the ImageIO is automatically determined for a particular file. Advanced SimpleITK installations can configure or extend which file formats -are supported by SimpleITK. A list of registered ImageIO's can be found using the +are supported by SimpleITK. A list of registered ImageIO's can be found using the ``GetRegisteredImageIOs()`` method, but is posted here: - `BMPImageIO `_ ( \*.bmp, \*.BMP ) @@ -38,7 +38,7 @@ are supported by SimpleITK. A list of registered ImageIO's can be found using th Example read and write: .. code-block :: python - + import SimpleITK as sitk reader = sitk.ImageFileReader() diff --git a/docs/source/_static/style.css b/docs/source/_static/style.css new file mode 100644 index 000000000..9dd18aedc --- /dev/null +++ b/docs/source/_static/style.css @@ -0,0 +1,111 @@ +/* override table width restrictions */ +@media screen and (min-width: 767px) { + + .wy-table-responsive table td { + /* !important prevents the common CSS stylesheets from overriding + this as on RTD they are loaded after this stylesheet */ + white-space: normal !important; + } + + .wy-table-responsive { + overflow: visible !important; + } +} + + +/*BORDERS*/ +hr { /*All lines*/ + display: none; +} + +footer hr{ /*Footer line*/ + display: block; +} + +.wy-menu-vertical li.toctree-l1.current>a { /*TOC Border*/ + border-bottom: solid 1px #e8e8e8; + border-top: solid 1px #e8e8e8; +} + + +/*FONTS*/ +.wy-menu-vertical p.caption { /*"Table of Contents"*/ + color:#404040; /*MATCH FONT*/ +} + +.wy-menu-vertical a { /*TOC options*/ + color:#404040; /*MATCH FONT*/ +} + +h1 { /*Main title*/ + font-size: 200%; +} + + +/*BACKGROUND COLORS*/ +.highlight { /*Literal code highlight*/ + background:#f4f4f4; +} + +.wy-nav-content { /*Body*/ + background-color: #fcfcfc; /*MATCH BACKGROUND*/ + max-width: 1200px; + margin: 0 auto; +} + +.wy-nav-side { /*Side Navigation*/ + background-color:#fcfcfc; /*MATCH BACKGROUND*/ +} + +.wy-side-nav-search { /*Color around logo*/ + background-color: #fcfcfc; /*MATCH BACKGROUND*/ +} + +.wy-side-nav-search input[type=text] { /*Searchbox*/ + border-color: #c0c0c0; + background-color: white; +} + +.wy-menu-vertical li.current a { /*Sub-TOC*/ + color:#404040; /*MATCH FONT*/ + border-right:none; + background:#e4e4e4; /*MATCH WITH OTHER*/ +} + +.wy-menu-vertical li.on a, .wy-menu-vertical li.current>a { /*First layer*/ + background:#f0f0f0; +} + +.wy-menu-vertical li.toctree-l2.current>a { /*Second layer*/ + background:#e4e4e4; /*MATCH WITH OTHER*/ +} + +.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a { /*Third layer*/ + background:#d8d8d8; +} + +.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a { /*Fourth layer*/ + background:#cccccc; +} + + +/*HOVER*/ +.wy-menu-vertical a:hover { /*Layer 1*/ + background:#2b59a0; + color:#dda428; +} + +.wy-menu-vertical li.current a:hover { /*Layer 2*/ + background:#2b59a0; + color:#dda428; +} + +.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a:hover { /*Layer 3*/ + background:#2b59a0; + color:#dda428; +} + +.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a:hover { /*Layer 4*/ + background:#2b59a0; + color:#dda428; +} diff --git a/docs/source/conf.py b/docs/source/conf.py index 99fadd3f0..38f3a61b0 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,16 +1,12 @@ # -*- coding: utf-8 -*- # -# SimpleITK documentation build configuration file, created by -# sphinx-quickstart on Wed Feb 15 18:01:43 2017. +# Configuration file for the Sphinx documentation builder. # -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the @@ -24,7 +20,19 @@ import subprocess import os.path -# -- General configuration ------------------------------------------------ +# -- Project information ----------------------------------------------------- + +project = u'SimpleITK' +copyright = u'2019, Insight Software Consortium' +author = u'Insight Software Consortium' + +# The short X.Y version +version = u'1.2' +# The full version, including alpha/beta/rc tags +release = u'1.2.0.dev' + + +# -- General configuration --------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. # @@ -34,9 +42,10 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - 'sphinx.ext.imgmath', + 'sphinx.ext.mathjax', 'sphinx.ext.ifconfig', - 'sphinx_tabs.tabs'] + 'sphinx_tabs.tabs' +] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -50,22 +59,6 @@ # The master toctree document. master_doc = 'index' -# General information about the project. -project = u'SimpleITK' -copyright = u'2019, Insight Software Consortium' -author = u'Insight Software Consortium' - -# TODO: Get proper version from CMake - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = u'1.2' -# The full version, including alpha/beta/rc tags. -release = u'1.2.0.dev' - # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # @@ -75,17 +68,14 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = [".*"] +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [] # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = None -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - -# -- Options for HTML output ---------------------------------------------- +# -- Options for HTML output ------------------------------------------------- def setup(app): app.add_stylesheet("style.css") @@ -99,36 +89,32 @@ def setup(app): # further. For a list of options available for each theme, see the # documentation. # -html_theme_options = { - 'canonical_url': '', - 'analytics_id': '', - 'logo_only': True, - 'display_version': False, - 'prev_next_buttons_location': 'bottom', - 'style_external_links': False, - # Toc options - 'collapse_navigation': True, - 'sticky_navigation': True, - 'navigation_depth': 4, - 'includehidden': True, - 'titles_only': False -} +# html_theme_options = {} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static', 'Documentation/docs/static'] +html_static_path = ['_static'] -html_logo= 'Documentation/docs/images/simpleitk_logo.png' +# html_logo= '../images/simpleitk_logo.png' +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} -# -- Options for HTMLHelp output ------------------------------------------ +# -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. htmlhelp_basename = 'SimpleITKdoc' -# -- Options for LaTeX output --------------------------------------------- +# -- Options for LaTeX output ------------------------------------------------ latex_elements = { # The paper size ('letterpaper' or 'a4paper'). @@ -156,7 +142,6 @@ def setup(app): u'Insight Software Consortium', 'manual'), ] - # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples @@ -179,13 +164,32 @@ def setup(app): ] +# -- Options for Epub output ------------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = project + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +# +# epub_identifier = '' + +# A unique identification for the text. +# +# epub_uid = '' + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ['search.html'] + + +# -- Extension configuration ------------------------------------------------- + # The images directory contains MD5/SHA512 hashed of the image data # files. So as not to contaminate the git repository with large # changing binary files, the image files need to be downloaded. We # utilize the CMake "ExternalData" mechanism to download the data from # a couple potential sources. cmake_exe = os.path.join(cmake.CMAKE_BIN_DIR, "cmake") -image_path = "Documentation/docs/images/" +image_path = "../images/" subprocess.check_call([cmake_exe, "."], cwd=image_path) subprocess.check_call([cmake_exe, "--build", "."], cwd=image_path) - diff --git a/docs/source/conventions.rst b/docs/source/conventions.rst index 91af29c08..52a9d0a64 100644 --- a/docs/source/conventions.rst +++ b/docs/source/conventions.rst @@ -39,7 +39,7 @@ Matrices as Parameters Matrices are represented as a single dimensional vector with the entries in row major order. The vector :math:`[1, 2, 3, 4, 5, 6]` represents the matrix .. math:: - + \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} diff --git a/docs/source/faq.rst b/docs/source/faq.rst index 42da6a685..1bf1b3ef6 100644 --- a/docs/source/faq.rst +++ b/docs/source/faq.rst @@ -36,9 +36,9 @@ Why am I getting "ModuleNotFoundError: No module named '_SimpleITK'" when import Traceback (most recent call last): File "C:\Python37\lib\site-packages\SimpleITK\SimpleITK.py", line 14, in swig_import_helper return importlib.import_module(mname) - ... - File "", line 219, in _call_with_frames_removed - ImportError: DLL load failed: The specified module could not be found. + ... + File "", line 219, in _call_with_frames_removed + ImportError: DLL load failed: The specified module could not be found. The above error occurs on Microsoft windows when system libraries SimpleITK depends on are not available on the system. This issue can be resolved by installing the appropriate diff --git a/docs/source/filters.rst b/docs/source/filters.rst index 157e15520..7697aaaf9 100644 --- a/docs/source/filters.rst +++ b/docs/source/filters.rst @@ -137,7 +137,7 @@ SimpleITK Filters * - `CropImageFilter `_ - Decrease the image size by cropping the image by an itk::Size at both the upper and lower bounds of the largest possible region. * - `CurvatureAnisotropicDiffusionImageFilter `_ - - + - * - `CurvatureFlowImageFilter `_ - Denoise an image using curvature driven flow. * - `CyclicShiftImageFilter `_ @@ -209,7 +209,7 @@ SimpleITK Filters * - `GeodesicActiveContourLevelSetImageFilter `_ - Segments structures in images based on a user supplied edge potential map. * - `GradientAnisotropicDiffusionImageFilter `_ - - + - * - `GradientImageFilter `_ - Computes the gradient of an image using directional derivatives. * - `GradientMagnitudeImageFilter `_ @@ -327,7 +327,7 @@ SimpleITK Filters * - `LandweberDeconvolutionImageFilter `_ - Deconvolve an image using the Landweber deconvolution algorithm. * - `LaplacianImageFilter `_ - - + - * - `LaplacianRecursiveGaussianImageFilter `_ - Computes the Laplacian of Gaussian (LoG) of an image. * - `LaplacianSegmentationLevelSetImageFilter `_ @@ -495,7 +495,7 @@ SimpleITK Filters * - `SigmoidImageFilter `_ - Computes the sigmoid function pixel-wise. * - `SignedDanielssonDistanceMapImageFilter `_ - - + - * - `SignedMaurerDistanceMapImageFilter `_ - This filter calculates the Euclidean distance transform of a binary image in linear time for arbitrary dimensions. * - `SimilarityIndexImageFilter `_ diff --git a/docs/source/index.rst b/docs/source/index.rst index 48ab510c2..200df9654 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -14,17 +14,18 @@ SimpleITK are currently available for all three major operating systems :caption: Table of Contents :hidden: - Documentation/docs/source/installation - Documentation/docs/source/fundamentalConcepts - Documentation/docs/source/registrationOverview - Documentation/docs/source/conventions - Documentation/docs/source/IO - Documentation/docs/source/filters - Documentation/docs/source/building - Documentation/docs/source/setUp - Documentation/docs/source/tutorialsAndCourses - Documentation/docs/source/faq - Examples/index + installation + fundamentalConcepts + registrationOverview + conventions + IO + filters + building + setUp + tutorialsAndCourses + faq + FilterTemplates + link_examples Relevant Resources @@ -41,9 +42,15 @@ How to Cite If you find SimpleITK useful in your research, support our efforts by citing the relevant publication(s): -R. Beare, B. C. Lowekamp, Z. Yaniv, "Image Segmentation, Registration and Characterization in R with SimpleITK", *J Stat Softw*, 86(8), https://doi.org/10.18637/jss.v086.i08, 2018. +R. Beare, B. C. Lowekamp, Z. Yaniv, "Image Segmentation, Registration and +Characterization in R with SimpleITK", *J Stat Softw*, 86(8), +https://doi.org/10.18637/jss.v086.i08, 2018. -Z. Yaniv, B. C. Lowekamp, H. J. Johnson, R. Beare, "SimpleITK Image-Analysis Notebooks: a Collaborative Environment for Education and Reproducible Research", *J Digit Imaging.*, https://doi.org/10.1007/s10278-017-0037-8, 31(3): 290-303, 2018 (freely read `here `_). - -B. C. Lowekamp, D. T. Chen, L. Ibáñez, D. Blezek, "The Design of SimpleITK", *Front. Neuroinform.*, 7:45. https://doi.org/10.3389/fninf.2013.00045, 2013. +Z. Yaniv, B. C. Lowekamp, H. J. Johnson, R. Beare, "SimpleITK Image-Analysis +Notebooks: a Collaborative Environment for Education and Reproducible +Research", *J Digit Imaging.*, https://doi.org/10.1007/s10278-017-0037-8, +31(3): 290-303, 2018 (freely read `here +`_). +B. C. Lowekamp, D. T. Chen, L. Ibáñez, D. Blezek, "The Design of SimpleITK", +*Front. Neuroinform.*, 7:45. https://doi.org/10.3389/fninf.2013.00045, 2013. diff --git a/docs/source/installation.rst b/docs/source/installation.rst index 86fd323e0..19548252a 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -68,7 +68,7 @@ Alternatively, the wheels can be manually downloaded from `GitHub releases Conda-based distributions (Anaconda, Miniconda) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +----------------------------------------------- From the command line prompt, execute: @@ -87,48 +87,53 @@ under the dev label: C# binary files --------------- -**Binaries for select C# platforms** can be found on SimpleITK's -`GitHub releases -`__ -under the appropriate version. Installing the library should only -involve importing the unzipped files into you C# environment. The -files have the following naming convention: +**Binaries for select C# platforms** can be found on `SimpleITK's +SourceForge +page `__ +under the version directory then the CSharp sub-directory. Installing +the library should only involve importing the unzipped files into you +C# environment. The files have the following naming convention: ``SimpleITK-version-CSharp-buildplatform-targetplatform.zip`` eg. +| ``SimpleITK-1.2.0-CSharp-win32-x86.zip`` | ``SimpleITK-1.2.0-CSharp-win64-x64.zip`` Details about how to set up a C# Visual Studio project with SimpleITK -can be found in the :ref:`setup SimpleITK with CSharp `. +can be found in the `Visual Guide to SimpleITK with +CSharp `__. +More information about getting started with a sample C# program can be +found in `A visual guide to building SimpleITK on +Linux `__ Java binary files ----------------- -**Binaries for select Java platforms** can be found on SimpleITK's -`GitHub releases page -`__ -under the appropriate version. Installation instructions are available -at :ref:`setup SimpleITK with Java `. +**Binaries for select Java platforms** can be found on `SimpleITK's +SourceForge +page `__ +under the version directory then the CSharp +sub-directory. Installation instructions are available at `a visual +guide to SimpleITK in +Java `__. -Latest binaries +Nightly binaries ---------------- -If the latest SimpleITK bug fixes or features are required then -pre-release binaries are needed. The pre-release binaries are built -from the actively developed master branch. The SimpleITK packages are -available on `Github releases -`__ under -the "latest" tag. The packages include Python, CSharp and Java. To -install the latest pre-release Python binary package run: - - -.. code-block :: bash - - pip install --pre SimpleITK --find-links https://github.com/SimpleITK/SimpleITK/releases/tag/latest - +The **latest binaries** for the current development version of SimpleITK +are also generally available. Binary packages are built as part of the +nightly regression testing system. The download links are available from +the `CDash dashboard `__ +in the "Nightly Packages" section. + +Each row on the dashboard is a SimpleITK build on a particular system, +and if the build was successful there will be a **package icon**: +https://open.cdash.org/img/package.png which links to the packages build +by the system. A user may directly download the built package from such +a link. Recommended Software diff --git a/docs/source/link_AdvancedImageReading_docs.rst b/docs/source/link_AdvancedImageReading_docs.rst new file mode 100644 index 000000000..912394db7 --- /dev/null +++ b/docs/source/link_AdvancedImageReading_docs.rst @@ -0,0 +1 @@ +.. include:: ../../Examples/AdvancedImageReading/Documentation.rst diff --git a/docs/source/link_CSharp_docs.rst b/docs/source/link_CSharp_docs.rst new file mode 100644 index 000000000..ed3d75fc9 --- /dev/null +++ b/docs/source/link_CSharp_docs.rst @@ -0,0 +1 @@ +.. include:: ../../Examples/CSharp/Documentation.rst diff --git a/docs/source/link_DemonsRegistration1_docs.rst b/docs/source/link_DemonsRegistration1_docs.rst new file mode 100644 index 000000000..3a2f0fa80 --- /dev/null +++ b/docs/source/link_DemonsRegistration1_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/DemonsRegistration1/Documentation.rst diff --git a/docs/source/link_DemonsRegistration2_docs.rst b/docs/source/link_DemonsRegistration2_docs.rst new file mode 100644 index 000000000..19c2b6850 --- /dev/null +++ b/docs/source/link_DemonsRegistration2_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/DemonsRegistration2/Documentation.rst diff --git a/docs/source/link_DicomImagePrintTags_docs.rst b/docs/source/link_DicomImagePrintTags_docs.rst new file mode 100644 index 000000000..efa913492 --- /dev/null +++ b/docs/source/link_DicomImagePrintTags_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/DicomImagePrintTags/Documentation.rst diff --git a/docs/source/link_DicomSeriesFromArray_docs.rst b/docs/source/link_DicomSeriesFromArray_docs.rst new file mode 100644 index 000000000..2aee2af51 --- /dev/null +++ b/docs/source/link_DicomSeriesFromArray_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/DicomSeriesFromArray/Documentation.rst diff --git a/docs/source/link_DicomSeriesReadModifyWrite_docs.rst b/docs/source/link_DicomSeriesReadModifyWrite_docs.rst new file mode 100644 index 000000000..02e2001cc --- /dev/null +++ b/docs/source/link_DicomSeriesReadModifyWrite_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/DicomSeriesReadModifyWrite/Documentation.rst diff --git a/docs/source/link_DicomSeriesReader_docs.rst b/docs/source/link_DicomSeriesReader_docs.rst new file mode 100644 index 000000000..87981db06 --- /dev/null +++ b/docs/source/link_DicomSeriesReader_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/DicomSeriesReader/Documentation.rst diff --git a/docs/source/link_FastMarchingSegmentation_docs.rst b/docs/source/link_FastMarchingSegmentation_docs.rst new file mode 100644 index 000000000..398548c2e --- /dev/null +++ b/docs/source/link_FastMarchingSegmentation_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/FastMarchingSegmentation/Documentation.rst diff --git a/docs/source/link_FilterProgressReporting_docs.rst b/docs/source/link_FilterProgressReporting_docs.rst new file mode 100644 index 000000000..488d1ff0e --- /dev/null +++ b/docs/source/link_FilterProgressReporting_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/FilterProgressReporting/Documentation.rst diff --git a/docs/source/link_HelloWorld_docs.rst b/docs/source/link_HelloWorld_docs.rst new file mode 100644 index 000000000..3429cbeef --- /dev/null +++ b/docs/source/link_HelloWorld_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/HelloWorld/Documentation.rst diff --git a/docs/source/link_ITKIntegration_docs.rst b/docs/source/link_ITKIntegration_docs.rst new file mode 100644 index 000000000..9a55d4de1 --- /dev/null +++ b/docs/source/link_ITKIntegration_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/ITKIntegration/Documentation.rst diff --git a/docs/source/link_ImageGridManipulation_docs.rst b/docs/source/link_ImageGridManipulation_docs.rst new file mode 100644 index 000000000..8c94be125 --- /dev/null +++ b/docs/source/link_ImageGridManipulation_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/ImageGridManipulation/Documentation.rst diff --git a/docs/source/link_ImageIOSelection_docs.rst b/docs/source/link_ImageIOSelection_docs.rst new file mode 100644 index 000000000..7793f3ecb --- /dev/null +++ b/docs/source/link_ImageIOSelection_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/ImageIOSelection/Documentation.rst diff --git a/docs/source/link_ImageRegistrationMethod1_docs.rst b/docs/source/link_ImageRegistrationMethod1_docs.rst new file mode 100644 index 000000000..a5d38907a --- /dev/null +++ b/docs/source/link_ImageRegistrationMethod1_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/ImageRegistrationMethod1/Documentation.rst diff --git a/docs/source/link_ImageRegistrationMethod2_docs.rst b/docs/source/link_ImageRegistrationMethod2_docs.rst new file mode 100644 index 000000000..33270fd73 --- /dev/null +++ b/docs/source/link_ImageRegistrationMethod2_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/ImageRegistrationMethod2/Documentation.rst diff --git a/docs/source/link_ImageRegistrationMethod3_docs.rst b/docs/source/link_ImageRegistrationMethod3_docs.rst new file mode 100644 index 000000000..af03c62dc --- /dev/null +++ b/docs/source/link_ImageRegistrationMethod3_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/ImageRegistrationMethod3/Documentation.rst diff --git a/docs/source/link_ImageRegistrationMethod4_docs.rst b/docs/source/link_ImageRegistrationMethod4_docs.rst new file mode 100644 index 000000000..9481252d1 --- /dev/null +++ b/docs/source/link_ImageRegistrationMethod4_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/ImageRegistrationMethod4/Documentation.rst diff --git a/docs/source/link_ImageRegistrationMethodBSpline1_docs.rst b/docs/source/link_ImageRegistrationMethodBSpline1_docs.rst new file mode 100644 index 000000000..eb832cc80 --- /dev/null +++ b/docs/source/link_ImageRegistrationMethodBSpline1_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/ImageRegistrationMethodBSpline1/Documentation.rst diff --git a/docs/source/link_ImageRegistrationMethodBSpline2_docs.rst b/docs/source/link_ImageRegistrationMethodBSpline2_docs.rst new file mode 100644 index 000000000..07ddc67d4 --- /dev/null +++ b/docs/source/link_ImageRegistrationMethodBSpline2_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/ImageRegistrationMethodBSpline2/Documentation.rst diff --git a/docs/source/link_ImageRegistrationMethodBSpline3_docs.rst b/docs/source/link_ImageRegistrationMethodBSpline3_docs.rst new file mode 100644 index 000000000..8899d0dc3 --- /dev/null +++ b/docs/source/link_ImageRegistrationMethodBSpline3_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/ImageRegistrationMethodBSpline3/Documentation.rst diff --git a/docs/source/link_ImageRegistrationMethodDisplacement1_docs.rst b/docs/source/link_ImageRegistrationMethodDisplacement1_docs.rst new file mode 100644 index 000000000..02eb12d44 --- /dev/null +++ b/docs/source/link_ImageRegistrationMethodDisplacement1_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/ImageRegistrationMethodDisplacement1/Documentation.rst diff --git a/docs/source/link_ImageRegistrationMethodExhaustive_docs.rst b/docs/source/link_ImageRegistrationMethodExhaustive_docs.rst new file mode 100644 index 000000000..eb1124499 --- /dev/null +++ b/docs/source/link_ImageRegistrationMethodExhaustive_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/ImageRegistrationMethodExhaustive/Documentation.rst diff --git a/docs/source/link_ImageViewing_docs.rst b/docs/source/link_ImageViewing_docs.rst new file mode 100644 index 000000000..35199c585 --- /dev/null +++ b/docs/source/link_ImageViewing_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/ImageViewing/Documentation.rst diff --git a/docs/source/link_N4BiasFieldCorrection_docs.rst b/docs/source/link_N4BiasFieldCorrection_docs.rst new file mode 100644 index 000000000..29463190f --- /dev/null +++ b/docs/source/link_N4BiasFieldCorrection_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/N4BiasFieldCorrection/Documentation.rst diff --git a/docs/source/link_SimpleGaussian_docs.rst b/docs/source/link_SimpleGaussian_docs.rst new file mode 100644 index 000000000..eb3617ae8 --- /dev/null +++ b/docs/source/link_SimpleGaussian_docs.rst @@ -0,0 +1,2 @@ + +.. include:: ../../Examples/SimpleGaussian/Documentation.rst diff --git a/docs/source/link_examples.rst b/docs/source/link_examples.rst new file mode 100644 index 000000000..bd900627a --- /dev/null +++ b/docs/source/link_examples.rst @@ -0,0 +1 @@ +.. include:: ../../Examples/index.rst diff --git a/docs/source/setUp.rst b/docs/source/setUp.rst index ca571af47..8adc0bc1d 100644 --- a/docs/source/setUp.rst +++ b/docs/source/setUp.rst @@ -97,9 +97,6 @@ SimpleITK Java Conventions -------------------------- The SimpleITK Java bindings closely follow the C++ conventions, i.e. each class contains the public member functions. However, the functional interface is handled differently in Java. In particular, every static Java function must belong to a class, unlike C++. In SimpleITK, the functional interface is contained in a class called *org.itk.simple.SimpleITK*. This class contains the functional interfaces as static member functions, i.e. *org.itk.simple.SimpleITK.readImage* as shown in `GaussianExample`_. The naming conventions for all SimpleITK classes follows the C++ conventions, but member functions and the function interface follow the Java conventions of using *CamelCase* with the first letter lowercase. In Java, the C++ function *itk::simple::ReadImage* becomes *org.itk.simple.SimpleITK.readImage*. - -.. _setup-csharp: - C# == @@ -164,7 +161,7 @@ Add Native Library Building an Example ------------------- -Now that we have configured the project, let up copy a basic SimpleITK example to compile and run. The :doc:`SimpleGaussian in C# <../../../Examples/SimpleGaussian/Documentation>` is a simple one to test our configuration. This can just be copied and pasted into the code editor. +Now that we have configured the project, let up copy a basic SimpleITK example to compile and run. The :doc:`SimpleGaussian in C# ` is a simple one to test our configuration. This can just be copied and pasted into the code editor. Then click *Build -> Build Solution*. Assuming you have followed all of the steps thus far, you should have an executable you can run from the command line or from Visual Studio by adding command line arguments in *Project -> ConsoleApp1 Properties... -> Debug*. From 1034703ad0ccc08b376148d92f634fee4c8bfc33 Mon Sep 17 00:00:00 2001 From: Philip MacMenamin Date: Fri, 20 Dec 2019 10:40:09 -0500 Subject: [PATCH 313/400] Adds our favorite logo back --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 38f3a61b0..d7e4f3818 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -96,7 +96,7 @@ def setup(app): # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] -# html_logo= '../images/simpleitk_logo.png' +html_logo= '../images/simpleitk_logo.png' # Custom sidebar templates, must be a dictionary that maps document names # to template names. # From ef44127511ac5ceabc6cedfabe426bfcda4271b6 Mon Sep 17 00:00:00 2001 From: Philip MacMenamin Date: Fri, 20 Dec 2019 11:16:12 -0500 Subject: [PATCH 314/400] Modifies RTD YAML for new docs --- .readthedocs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index d0b7f5d6c..c2c32a7de 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -10,10 +10,10 @@ formats: all # Build documentation in the docs/ directory with Sphinx sphinx: - configuration: conf.py + configuration: docs/source/conf.py # Optionally set the version of Python and requirements required to build your docs python: version: 3.7 install: - - requirements: Documentation/docs/requirements.txt + - requirements: docs/requirements.txt From 87f139e5fab7bd56ed70af012cc89365a6308f38 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 20 Dec 2019 11:44:27 -0500 Subject: [PATCH 315/400] Restore recent changes to installation instructions --- docs/source/installation.rst | 59 +++++++++++++++++------------------- docs/source/setUp.rst | 3 ++ 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/docs/source/installation.rst b/docs/source/installation.rst index 19548252a..86fd323e0 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -68,7 +68,7 @@ Alternatively, the wheels can be manually downloaded from `GitHub releases Conda-based distributions (Anaconda, Miniconda) ------------------------------------------------ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From the command line prompt, execute: @@ -87,53 +87,48 @@ under the dev label: C# binary files --------------- -**Binaries for select C# platforms** can be found on `SimpleITK's -SourceForge -page `__ -under the version directory then the CSharp sub-directory. Installing -the library should only involve importing the unzipped files into you -C# environment. The files have the following naming convention: +**Binaries for select C# platforms** can be found on SimpleITK's +`GitHub releases +`__ +under the appropriate version. Installing the library should only +involve importing the unzipped files into you C# environment. The +files have the following naming convention: ``SimpleITK-version-CSharp-buildplatform-targetplatform.zip`` eg. -| ``SimpleITK-1.2.0-CSharp-win32-x86.zip`` | ``SimpleITK-1.2.0-CSharp-win64-x64.zip`` Details about how to set up a C# Visual Studio project with SimpleITK -can be found in the `Visual Guide to SimpleITK with -CSharp `__. +can be found in the :ref:`setup SimpleITK with CSharp `. -More information about getting started with a sample C# program can be -found in `A visual guide to building SimpleITK on -Linux `__ Java binary files ----------------- -**Binaries for select Java platforms** can be found on `SimpleITK's -SourceForge -page `__ -under the version directory then the CSharp -sub-directory. Installation instructions are available at `a visual -guide to SimpleITK in -Java `__. +**Binaries for select Java platforms** can be found on SimpleITK's +`GitHub releases page +`__ +under the appropriate version. Installation instructions are available +at :ref:`setup SimpleITK with Java `. -Nightly binaries +Latest binaries ---------------- -The **latest binaries** for the current development version of SimpleITK -are also generally available. Binary packages are built as part of the -nightly regression testing system. The download links are available from -the `CDash dashboard `__ -in the "Nightly Packages" section. - -Each row on the dashboard is a SimpleITK build on a particular system, -and if the build was successful there will be a **package icon**: -https://open.cdash.org/img/package.png which links to the packages build -by the system. A user may directly download the built package from such -a link. +If the latest SimpleITK bug fixes or features are required then +pre-release binaries are needed. The pre-release binaries are built +from the actively developed master branch. The SimpleITK packages are +available on `Github releases +`__ under +the "latest" tag. The packages include Python, CSharp and Java. To +install the latest pre-release Python binary package run: + + +.. code-block :: bash + + pip install --pre SimpleITK --find-links https://github.com/SimpleITK/SimpleITK/releases/tag/latest + Recommended Software diff --git a/docs/source/setUp.rst b/docs/source/setUp.rst index 8adc0bc1d..186f52463 100644 --- a/docs/source/setUp.rst +++ b/docs/source/setUp.rst @@ -97,6 +97,9 @@ SimpleITK Java Conventions -------------------------- The SimpleITK Java bindings closely follow the C++ conventions, i.e. each class contains the public member functions. However, the functional interface is handled differently in Java. In particular, every static Java function must belong to a class, unlike C++. In SimpleITK, the functional interface is contained in a class called *org.itk.simple.SimpleITK*. This class contains the functional interfaces as static member functions, i.e. *org.itk.simple.SimpleITK.readImage* as shown in `GaussianExample`_. The naming conventions for all SimpleITK classes follows the C++ conventions, but member functions and the function interface follow the Java conventions of using *CamelCase* with the first letter lowercase. In Java, the C++ function *itk::simple::ReadImage* becomes *org.itk.simple.SimpleITK.readImage*. + +.. _setup-csharp: + C# == From 1eaf901cab8fa6de4e17cf7ce1fa8ee66226e58d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 20 Dec 2019 09:44:06 -0500 Subject: [PATCH 316/400] Add the upgrade flag to the pre-release download instructions. --- docs/source/installation.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/installation.rst b/docs/source/installation.rst index 86fd323e0..a67413552 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -122,12 +122,12 @@ from the actively developed master branch. The SimpleITK packages are available on `Github releases `__ under the "latest" tag. The packages include Python, CSharp and Java. To -install the latest pre-release Python binary package run: +upgrade to the latest pre-release Python binary package run: .. code-block :: bash - pip install --pre SimpleITK --find-links https://github.com/SimpleITK/SimpleITK/releases/tag/latest + pip install --upgrade --pre SimpleITK --find-links https://github.com/SimpleITK/SimpleITK/releases/tag/latest From 529bc30e374c81f32d8ec913e5cfc93d76111b18 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 20 Dec 2019 14:09:02 -0500 Subject: [PATCH 317/400] Update data URLs in SourceTarball script Correct the data.kitware.com URL. Remove itk.org URL since the data file will shortly not be available at the location. And add the SimpleITK s3 bucket. --- Utilities/Maintenance/SourceTarball.bash | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Utilities/Maintenance/SourceTarball.bash b/Utilities/Maintenance/SourceTarball.bash index e1d3b37a9..f56782656 100755 --- a/Utilities/Maintenance/SourceTarball.bash +++ b/Utilities/Maintenance/SourceTarball.bash @@ -105,13 +105,12 @@ validate () { fi } - download_object() { algo="$1" ; hash="$2" ; path="$3" mkdir -p $(dirname "$path") && - if curl "https://simpleitk.github.io/SimpleITKExternalData/$algo/$hash" --output "$path.tmp$$" 1>&2 || - curl "https://www.itk.org/files/ExternalData/$algo/$hash" --output "$path.tmp$$" 1>&2 || - curl "https://data.kitware.com/midas3/api/rest?method=midas.bitstream.download&checksum=${hash}&algorithm=${algo}" --output 1>&2; then + if curl -f "https://simpleitk.github.io/SimpleITKExternalData/$algo/$hash" --output 1>&2|| + curl -f "https://s3.amazonaws.com/simpleitk/public/$algo/$hash" --output 1>&2 || + curl -f "https://data.kitware.com:443/api/v1/file/hashsum/$algo/$hash/download" --output 1>&2; then mv "$path.tmp$$" "$path" else rm -f "$path.tmp$$" From f8579be166d493ab4a76ea0dee1ea4e95f42f3d6 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 20 Dec 2019 14:39:59 -0500 Subject: [PATCH 318/400] Set BUILD_CMOCK as CACHE variable This addresses a CMP0077 warning. --- CMake/sitkUseGTest.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMake/sitkUseGTest.cmake b/CMake/sitkUseGTest.cmake index b58730bb5..2d73ddc7d 100644 --- a/CMake/sitkUseGTest.cmake +++ b/CMake/sitkUseGTest.cmake @@ -31,8 +31,8 @@ function(_sitk_gtest_use_gtest_source) set(CMAKE_CXX_VISIBILITY_PRESET) set(CMAKE_VISIBILITY_INLINES_HIDDEN) - set(BUILD_GTEST ON ) - set(BUILD_GMOCK OFF) + set(BUILD_GTEST ON CACHE INTERNAL "" FORCE ) + set(BUILD_GMOCK OFF CACHE INTERNAL "" FORCE ) # google test does not properly use pthreads on mingw From 79370a39202632fe424e184587324af247f48d18 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Sat, 21 Dec 2019 08:24:00 -0500 Subject: [PATCH 319/400] In SourceTarball script add output filename parameter --- Utilities/Maintenance/SourceTarball.bash | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Utilities/Maintenance/SourceTarball.bash b/Utilities/Maintenance/SourceTarball.bash index f56782656..86605fa27 100755 --- a/Utilities/Maintenance/SourceTarball.bash +++ b/Utilities/Maintenance/SourceTarball.bash @@ -108,9 +108,9 @@ validate () { download_object() { algo="$1" ; hash="$2" ; path="$3" mkdir -p $(dirname "$path") && - if curl -f "https://simpleitk.github.io/SimpleITKExternalData/$algo/$hash" --output 1>&2|| - curl -f "https://s3.amazonaws.com/simpleitk/public/$algo/$hash" --output 1>&2 || - curl -f "https://data.kitware.com:443/api/v1/file/hashsum/$algo/$hash/download" --output 1>&2; then + if curl -f "https://simpleitk.github.io/SimpleITKExternalData/$algo/$hash" --output "$path.tmp$$" 1>&2|| + curl -f "https://s3.amazonaws.com/simpleitk/public/$algo/$hash" --output "$path.tmp$$" 1>&2 || + curl -f "https://data.kitware.com:443/api/v1/file/hashsum/$algo/$hash/download" --output "$path.tmp$$" 1>&2; then mv "$path.tmp$$" "$path" else rm -f "$path.tmp$$" From 891c428ce958ba3c56923c9099cfb8d06b7e1e99 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 2 Jan 2020 12:05:11 -0500 Subject: [PATCH 320/400] Load SimpleITK version used in SimpleITKExamples sub-project Replace path with hard coded SimpleITK version with one derived from the Version.cmake file. --- SuperBuild/External_SimpleITKExamples.cmake | 2 +- SuperBuild/SuperBuild.cmake | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/SuperBuild/External_SimpleITKExamples.cmake b/SuperBuild/External_SimpleITKExamples.cmake index 2b93358d6..8146cd3a2 100644 --- a/SuperBuild/External_SimpleITKExamples.cmake +++ b/SuperBuild/External_SimpleITKExamples.cmake @@ -21,7 +21,7 @@ if (${BUILD_EXAMPLES} ) -C "${CMAKE_CURRENT_BINARY_DIR}/${proj}-build/CMakeCacheInit.txt" ${ep_common_args} -DITK_DIR:PATH=${ITK_DIR} - -DSimpleITK_DIR:PATH=${CMAKE_INSTALL_PREFIX}/lib/cmake/SimpleITK-1.3/ + -DSimpleITK_DIR:PATH=${SIMPLEITK_DIR} -DCMAKE_SKIP_RPATH:BOOL=ON -DCMAKE_INSTALL_PREFIX:PATH= BUILD_COMMAND ${BUILD_COMMAND_STRING} diff --git a/SuperBuild/SuperBuild.cmake b/SuperBuild/SuperBuild.cmake index c90bc4c68..41995b973 100644 --- a/SuperBuild/SuperBuild.cmake +++ b/SuperBuild/SuperBuild.cmake @@ -494,6 +494,17 @@ ExternalProject_Add_Step(${proj} doc ExternalProject_Add_StepTargets(${proj} configure build test forcebuild doc) + +# Load the SimpleITK version variables, scope isolated in a function. +function(_set_simpleitk_install_path outVar) + include(../Version.cmake) + ExternalProject_Get_Property(${proj} install_dir) + set(${outVar} + "${install_dir}/lib/cmake/SimpleITK-${SimpleITK_VERSION_MAJOR}.${SimpleITK_VERSION_MINOR}" + PARENT_SCOPE) +endfunction() +_set_simpleitk_install_path(SIMPLEITK_DIR) + #------------------------------------------------------------------------------ # SimpleITKExamples #------------------------------------------------------------------------------ From 640cd0057b28dd5eee886d0b6b9266a934d9b7c1 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 2 Jan 2020 12:12:53 -0500 Subject: [PATCH 321/400] Set SimpleITK version to 2.0.0 --- Version.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Version.cmake b/Version.cmake index 8e646a34a..6a79cc793 100644 --- a/Version.cmake +++ b/Version.cmake @@ -8,8 +8,8 @@ # Version info -set(SimpleITK_VERSION_MAJOR 1) -set(SimpleITK_VERSION_MINOR 3) +set(SimpleITK_VERSION_MAJOR 2) +set(SimpleITK_VERSION_MINOR 0) set(SimpleITK_VERSION_PATCH 0) #set(SimpleITK_VERSION_TWEAK "") From 18d892ecc991d971fc7f8ce846560b6ddc5bf0ae Mon Sep 17 00:00:00 2001 From: Ziv Yaniv Date: Mon, 30 Dec 2019 19:42:45 -0500 Subject: [PATCH 322/400] Adding license and link to license. Adding toolkit history. Removed unnecessary link, manuscript is open sourced from publisher. Adding about page and moving history and license under that. Modified commits based on comments. Updated supported wording --- docs/source/about.rst | 12 ++++++++++++ docs/source/history.rst | 20 ++++++++++++++++++++ docs/source/index.rst | 7 +++---- docs/source/license.rst | 7 +++++++ 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 docs/source/about.rst create mode 100644 docs/source/history.rst create mode 100644 docs/source/license.rst diff --git a/docs/source/about.rst b/docs/source/about.rst new file mode 100644 index 000000000..1fb933ecf --- /dev/null +++ b/docs/source/about.rst @@ -0,0 +1,12 @@ +.. _lbl_about: + +About +===== + +SimpleITK is a simplified programming interface to the algorithms and data structures of the `Insight Toolkit `_ (ITK). It supports bindings for multiple programming languages including C++, Python, R, Java, C#, Lua, Ruby and TCL. These bindings enable scientists to develop image analysis workflows in the programming language they are most familiar with. The toolkit supports more than 15 different image file formats, provides over 280 image analysis filters, and implements a unified interface to the ITK intensity-based registration framework. + +.. toctree:: + :maxdepth: 1 + + history + license diff --git a/docs/source/history.rst b/docs/source/history.rst new file mode 100644 index 000000000..facb8cfe6 --- /dev/null +++ b/docs/source/history.rst @@ -0,0 +1,20 @@ +.. _lbl_history: + +History +======= + +SimpleITK was created as part of a concerted effort to simplify the use of the Insight Toolkit, making it +more accessible to a wider audience. + +The initial funding for the toolkit was provided by the United States National Library of Medicine (NLM) +under the American Recovery and Reinvestment Act (ARRA), with the initial version of the toolkit +developed as a collaboration between The Mayo Clinic, Kitware Inc, The University of Iowa and NLM's +intramural research program. The first major release of the toolkit was announced in April-May 2017. + +Between 2013 and 2019, development was suported by the NLM intramural research +program with collaborators at The University of Iowa and Monash University. + +Since 2019, SimpleITK development is supported by the Office of Cyber Infrastructure and +Computational Biology at the National Institute of Allergy and Infectious Diseases. + +The toolkit release history is available on `GitHub `_. diff --git a/docs/source/index.rst b/docs/source/index.rst index 200df9654..63773c227 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,8 +1,7 @@ SimpleITK Sphinx Documentation ============================== -SimpleITK is a simplified, open source, interface to the National Library -of Medicine's Insight Segmentation and Registration Toolkit (ITK), a C++ +SimpleITK is a simplified, open source, interface to the `Insight Toolkit `_ (ITK), a C++ open source image analysis toolkit which is widely used in academia and industry. SimpleITK is available for eight programming languages including C++, Python, R, Java, C#, Lua, Ruby, and TCL. Binary distributions of @@ -14,6 +13,7 @@ SimpleITK are currently available for all three major operating systems :caption: Table of Contents :hidden: + about installation fundamentalConcepts registrationOverview @@ -49,8 +49,7 @@ https://doi.org/10.18637/jss.v086.i08, 2018. Z. Yaniv, B. C. Lowekamp, H. J. Johnson, R. Beare, "SimpleITK Image-Analysis Notebooks: a Collaborative Environment for Education and Reproducible Research", *J Digit Imaging.*, https://doi.org/10.1007/s10278-017-0037-8, -31(3): 290-303, 2018 (freely read `here -`_). +31(3): 290-303, 2018. B. C. Lowekamp, D. T. Chen, L. Ibáñez, D. Blezek, "The Design of SimpleITK", *Front. Neuroinform.*, 7:45. https://doi.org/10.3389/fninf.2013.00045, 2013. diff --git a/docs/source/license.rst b/docs/source/license.rst new file mode 100644 index 000000000..ce8f89bbe --- /dev/null +++ b/docs/source/license.rst @@ -0,0 +1,7 @@ +.. _lbl_license: + +License +************ + +.. include:: ../../LICENSE + :literal: From f4646143d560d19371732351d3ed5f95d2451333 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 7 Jan 2020 12:19:08 -0500 Subject: [PATCH 323/400] Set more restrictive test template globs --- Testing/Unit/CMakeLists.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Testing/Unit/CMakeLists.txt b/Testing/Unit/CMakeLists.txt index 53c9fb6e6..26e0cf794 100644 --- a/Testing/Unit/CMakeLists.txt +++ b/Testing/Unit/CMakeLists.txt @@ -69,14 +69,14 @@ target_compile_options( SimpleITKUnitTestDriver0 # Glob for necessary template files up front, before the foreach loop over # the filters: # -file ( GLOB CXX_TEMPLATE_FILES "*Template*.cxx.in" ) -file ( GLOB LUA_TEMPLATE_FILES "*Template*.lua.in" ) -file ( GLOB PYTHON_TEMPLATE_FILES "*Template*py.in" ) -file ( GLOB TCL_TEMPLATE_FILES "*Template*.tcl.in" ) -file ( GLOB R_TEMPLATE_FILES "*Template*.R.in" ) -file ( GLOB RUBY_TEMPLATE_FILES "*Template*rb.in" ) -file ( GLOB JAVA_TEMPLATE_FILES "*Template*.java.in" ) -file ( GLOB CSHARP_TEMPLATE_FILES "*Template*.cs.in" ) +file ( GLOB CXX_TEMPLATE_FILES "sitk*Template.cxx.in" ) +file ( GLOB LUA_TEMPLATE_FILES "Lua*Template.lua.in" ) +file ( GLOB PYTHON_TEMPLATE_FILES "Python*Template.py.in" ) +file ( GLOB TCL_TEMPLATE_FILES "Tcl*Template.tcl.in" ) +file ( GLOB R_TEMPLATE_FILES "R*Template.R.in" ) +file ( GLOB RUBY_TEMPLATE_FILES "Ruby*Template.rb.in" ) +file ( GLOB JAVA_TEMPLATE_FILES "Java*Template.java.in" ) +file ( GLOB CSHARP_TEMPLATE_FILES "CSharp*Template.cs.in" ) # From 36beb55bb349e34004bb9f54e7aaf2859e8c8f0a Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 3 Jan 2020 11:05:03 -0500 Subject: [PATCH 324/400] Update ITK Superbuild version along the 5.1 development branch --- SuperBuild/External_ITK.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index 22bc1124e..b5eb3d6ff 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,7 +52,8 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -set(_DEFAULT_ITK_GIT_TAG "v5.1rc01") +# post v5.1rco1 +set(_DEFAULT_ITK_GIT_TAG "f971477cdacff22a861dfcbaccd89c0cf2755af7") set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From 49c5796e27aba5acc019cf93c8d04ddff1c69d92 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 8 Jan 2020 11:29:36 -0500 Subject: [PATCH 325/400] Suppress self assignment warning in Image tests. --- Testing/Unit/sitkImageTests.cxx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Testing/Unit/sitkImageTests.cxx b/Testing/Unit/sitkImageTests.cxx index 38b3a643c..82a4f4306 100644 --- a/Testing/Unit/sitkImageTests.cxx +++ b/Testing/Unit/sitkImageTests.cxx @@ -461,6 +461,8 @@ TEST_F(Image, CopyInformation) EXPECT_EQ( img1.GetNumberOfPixels(), img2.GetNumberOfPixels() ); } +sitkClangDiagnosticPush(); +sitkClangWarningIgnore("-Wself-assign-overloaded"); TEST_F(Image, CopyOnWrite) { // test that a just constructed image only have 1 referecne @@ -634,6 +636,7 @@ TEST_F(Image,Operators) v = dynamic_cast*>( imgA.GetITKBase() )->GetPixel( idx); EXPECT_EQ( 0, v ) << "value check 8"; } +sitkClangDiagnosticPop(); TEST_F(Image,SetPixel) { From 46f97ecf8b3723e9351833c969b46b44109841c4 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 8 Jan 2020 13:17:16 -0500 Subject: [PATCH 326/400] For external project add required flags to preprocessor Address configure warnings in PCRE and SWIG related to headers being rejected by the preprocessor by include "isysroot" flag to the preprocessor. --- SuperBuild/pcre_configure_step.cmake.in | 2 +- SuperBuild/swig_configure_step.cmake.in | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/SuperBuild/pcre_configure_step.cmake.in b/SuperBuild/pcre_configure_step.cmake.in index 37fde8202..1e8f24be3 100644 --- a/SuperBuild/pcre_configure_step.cmake.in +++ b/SuperBuild/pcre_configure_step.cmake.in @@ -11,7 +11,7 @@ set(ENV{LDFLAGS} "@CMAKE_LINKER_FLAGS@ @CMAKE_LINKER_FLAGS_RELEASE@") set(ENV{LIBS} "$ENV{LIBS}") set(ENV{CPP} "$ENV{CPP}") -set(ENV{CPPFLAGS} "$ENV{CPPFLAGS}") +set(ENV{CPPFLAGS} "@REQUIRED_C_FLAGS@ $ENV{CPPFLAGS}") set(ENV{CXXPP} "$ENV{CXXPP}") set(ENV{CXX} "@CMAKE_CXX_COMPILER_LAUNCHER@ @CMAKE_CXX_COMPILER@") diff --git a/SuperBuild/swig_configure_step.cmake.in b/SuperBuild/swig_configure_step.cmake.in index 6a8f70ff8..00064cbbf 100644 --- a/SuperBuild/swig_configure_step.cmake.in +++ b/SuperBuild/swig_configure_step.cmake.in @@ -11,8 +11,9 @@ set(ENV{CFLAGS} "@REQUIRED_C_FLAGS@ @CMAKE_C_FLAGS@ @CMAKE_C_FLAGS_RELEASE@") set(ENV{LDFLAGS} "@CMAKE_LINKER_FLAGS@ @CMAKE_LINKER_FLAGS_RELEASE@") set(ENV{LIBS} "$ENV{LIBS}") + set(ENV{CPP} "$ENV{CPP}") -set(ENV{CPPFLAGS} "$ENV{CPPFLAGS}") +set(ENV{CPPFLAGS} "@REQUIRED_C_FLAGS@ $ENV{CPPFLAGS}") set(ENV{CXX} "@CMAKE_CXX_COMPILER_LAUNCHER@ @CMAKE_CXX_COMPILER@") set(ENV{CXXFLAGS} "@REQUIRED_CXX_FLAGS@ @CMAKE_CXX_FLAGS@ @CMAKE_CXX_FLAGS_RELEASE@") From 91f000d8725508e282984471ed2077fe2d7cb6cc Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 9 Jan 2020 15:01:26 -0500 Subject: [PATCH 327/400] Update Superbuild ITK version along ITKv5.1 development This include the following ITK commit: commit 764737d09eb107dc328e7d7bdc982c9f56e6c1f6 (HEAD -> master, upstream/master) Author: Hans Johnson Date: Tue Jan 7 13:30:21 2020 -0600 COMP: Allow building basic ITK on computer without python3.5 This patch consolidates the searching for python components into the main CMakeLists.txt file. --- SuperBuild/External_ITK.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index b5eb3d6ff..5f13f1fc5 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -53,7 +53,7 @@ mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) # post v5.1rco1 -set(_DEFAULT_ITK_GIT_TAG "f971477cdacff22a861dfcbaccd89c0cf2755af7") +set(_DEFAULT_ITK_GIT_TAG "764737d09eb107dc328e7d7bdc982c9f56e6c1f6") set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From c9499bd9e096d992b0ed6e73183894ad6a056811 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 13 Jan 2020 14:08:55 -0500 Subject: [PATCH 328/400] Update ITK along 5.1 development This include the following patch: commit 3d5698b3103e08d73e5657d3e1af7999e02a7ef9 Author: Ziv Yaniv Date: Mon Jan 13 11:15:00 2020 -0500 BUG: SetLabelForUndecidedPixels value ignored. The user requested label for undecided values was ignored and the maxLabel+1 was always used. The test also had a bug in its ground truth values. closes issue #943 --- SuperBuild/External_ITK.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index 5f13f1fc5..e6c45b9de 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,8 +52,8 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -# post v5.1rco1 -set(_DEFAULT_ITK_GIT_TAG "764737d09eb107dc328e7d7bdc982c9f56e6c1f6") +# post v5.1rc01 +set(_DEFAULT_ITK_GIT_TAG "e8aba69589860916dd4ca165145ca7471c749227") set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From cae975433d60d429e1b0ddc4c8a328cf13802f3a Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 14 Jan 2020 14:10:18 -0500 Subject: [PATCH 329/400] Update ITK along 5.1 development This update include improvements to the MeanImageFilter to directly support VectorImages. --- SuperBuild/External_ITK.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index e6c45b9de..a8bf04f57 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -53,7 +53,7 @@ mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) # post v5.1rc01 -set(_DEFAULT_ITK_GIT_TAG "e8aba69589860916dd4ca165145ca7471c749227") +set(_DEFAULT_ITK_GIT_TAG "c342c6aedcebb2252e07a8e37892da965d6acff5") set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From 64b2c3937e05a9033ffeee6dd4f4de70f372a415 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 14 Jan 2020 14:10:54 -0500 Subject: [PATCH 330/400] Update MeanImageFilter wrapping to directly use VectorImage This also add support for complex numbers. --- Code/BasicFilters/json/MeanImageFilter.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Code/BasicFilters/json/MeanImageFilter.json b/Code/BasicFilters/json/MeanImageFilter.json index 8cf740a50..4bf69bff3 100644 --- a/Code/BasicFilters/json/MeanImageFilter.json +++ b/Code/BasicFilters/json/MeanImageFilter.json @@ -4,8 +4,7 @@ "template_test_filename" : "ImageFilter", "number_of_inputs" : 1, "doc" : "", - "pixel_types" : "BasicPixelIDTypeList", - "vector_pixel_types_by_component" : "VectorPixelIDTypeList", + "pixel_types" : "NonLabelPixelIDTypeList", "members" : [ { "name" : "Radius", From 6a183264f275cf1bc992935aecd8f808d978b2ea Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 14 Jan 2020 10:24:52 -0500 Subject: [PATCH 331/400] Add docker to build the SimpleITK doxygen The Docker image contains a built version of Doxygen that has been used to build the SimpleITK doxygen through version 1.2. This version correctly handles the expansion arrow for tree views of the class hierarchy. These scripts are derived from work previously done under the ITKDevelopmentEnvironment repository. Co-authored-by: Francois Budin --- Utilities/Doxygen/docker/Dockerfile | 37 +++++++++++++++++++++++++++++ Utilities/Doxygen/docker/README | 18 ++++++++++++++ Utilities/Doxygen/docker/run.sh | 19 +++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 Utilities/Doxygen/docker/Dockerfile create mode 100644 Utilities/Doxygen/docker/README create mode 100755 Utilities/Doxygen/docker/run.sh diff --git a/Utilities/Doxygen/docker/Dockerfile b/Utilities/Doxygen/docker/Dockerfile new file mode 100644 index 000000000..4ef70f6b6 --- /dev/null +++ b/Utilities/Doxygen/docker/Dockerfile @@ -0,0 +1,37 @@ +FROM ubuntu:14.04 as simpleitk-doxygen + +RUN apt-get update && apt-get install -y \ + apt-utils \ + bison \ + build-essential \ + curl \ + flex \ + git \ + graphviz \ + ninja-build \ + doxygen \ + python \ + vim \ + && apt-get clean + +# Install the latest CMake release +WORKDIR /tmp/ +RUN curl -L https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \ + python get-pip.py && \ + pip install cmake + +RUN git clone https://github.com/doxygen/doxygen.git && \ + ( cd doxygen && \ + git checkout Release_1_8_9_1 && \ + ./configure && \ + make -j$(nproc) && \ + make install) && \ + rm -rf ./doxygen + +RUN git config --global url."https://github.com/InsightSoftwareConsortium/".insteadOf "https://itk.org/" + +COPY run.sh /tmp + +WORKDIR /work + +ENTRYPOINT ["/tmp/run.sh"] diff --git a/Utilities/Doxygen/docker/README b/Utilities/Doxygen/docker/README new file mode 100644 index 000000000..45834557f --- /dev/null +++ b/Utilities/Doxygen/docker/README @@ -0,0 +1,18 @@ +This dockerfile has been created to facilitate the creation of SimpleITK html +doxygen documentation. + +Run the following commands: + +#docker build --build-arg TAG=v1.1.0 . -f Dockerfile -t simpleitk-doxygen +docker build -f Dockerfile -t simpleitk-doxygen . + + export TAG=v1.2.0 + docker run --env TAG --name sitk-dox simpleitk-doxygen +-or- + docker run \ + --env TAG \ + --mount type=bind,source=/home/blowekamp/src/SimpleITK,destination=/work/SimpleITK,readonly \ + --name sitk-dox simpleitk-doxygen + +docker cp sitk-dox:/SimpleITKDoxygen.tar.gz SimpleITKDoxygen${TAG:+-${TAG}}.tar.gz +docker rm sitk-dox diff --git a/Utilities/Doxygen/docker/run.sh b/Utilities/Doxygen/docker/run.sh new file mode 100755 index 000000000..9396363bb --- /dev/null +++ b/Utilities/Doxygen/docker/run.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +TAG=${TAG:-"master"} +set -xe +if [ ! -d SimpleITK ]; then + git clone https://github.com/SimpleITK/SimpleITK.git && + (cd SimpleITK && git checkout ${TAG}) +fi + +mkdir SimpleITK-build && \ + cd SimpleITK-build && \ + cmake -G Ninja\ + -DBUILD_DOXYGEN=ON\ + -DWRAP_DEFAULT=OFF\ + -DSimpleITK_BUILD_DISTRIBUTE:BOOL=ON\ + ../SimpleITK/SuperBuild/ && \ + cmake --build . --target SimpleITK-doc && \ + cd SimpleITK-build/Documentation/ && \ + tar --exclude=\*.md5 -zcvf /SimpleITKDoxygen.tar.gz ./html From 6e19706fac7b4931d0815843c2dd31ff4b5993fe Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 14 Jan 2020 14:35:52 -0500 Subject: [PATCH 332/400] AZP add Doxygen build and archive creating to packing build --- Testing/CI/Azure/azure-pipelines-package.yml | 23 ++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index ef3e82a4c..7eb3f168b 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -36,3 +36,26 @@ jobs: PYTHON_ARCH: x64 CMAKE_PLATFORM: x64 VCVAR_OPTIONS: amd64 + - job: Doxygen + dependsOn: Configure + condition: ne( variables['configure.doxygen'], 'true' ) + timeoutInMinutes: 60 + variables: + SIMPLEITK_GIT_TAG: $[ dependencies.Configure.outputs['configure.BuildHash'] ] + steps: + - template: templates/git-download-steps.yml + - bash: | + cd ${BUILD_SOURCESDIRECTORY}/Utilities/Doxygen/docker + docker build -f Dockerfile -t simpleitk-doxygen . + displayName: Build Docker Image + - bash: | + docker run \ + --mount type=bind,source=${BUILD_SOURCESDIRECTORY},destination=/work/SimpleITK,readonly \ + --name sitk-dox simpleitk-doxygen + mkdir -p $(Build.ArtifactStagingDirectory)/Doxygen + docker cp sitk-dox:/SimpleITKDoxygen.tar.gz $(Build.ArtifactStagingDirectory)/Doxygen/SimpleITKDoxygen-${SIMPLEITK_GIT_TAG}.tar.gz + displayName: Docker doxygen generation + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/Doxygen + artifactName: Doxygen From ed622e28a3bc9aca7a4120213f57fb51b9871e2a Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 17 Jan 2020 13:40:10 -0500 Subject: [PATCH 333/400] Add displacement field test case The test case demonstrates a double free when the Image's pixel buffer ownership was incorrectly changed to cause a double free in GetImageFromVectorImage. --- Testing/Unit/sitkTransformTests.cxx | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/Testing/Unit/sitkTransformTests.cxx b/Testing/Unit/sitkTransformTests.cxx index ea7da36c0..f48e83bb5 100644 --- a/Testing/Unit/sitkTransformTests.cxx +++ b/Testing/Unit/sitkTransformTests.cxx @@ -36,10 +36,12 @@ #include "sitkResampleImageFilter.h" #include "sitkHashImageFilter.h" +#include "sitkInvertDisplacementFieldImageFilter.h" #include "sitkBSplineTransformInitializerFilter.h" #include "itkMath.h" +#include "itkVectorImage.h" namespace sitk = itk::simple; namespace nsstd = itk::simple::nsstd; @@ -1114,6 +1116,33 @@ TEST(TransformTest,DisplacementFieldTransform_Points) } +TEST(BasicFilters, DisplacementField_GetDisplacementField) + { + // A test case where a double free was occurring, due to change in + // the pixel containers ownership. + namespace sitk = itk::simple; + + sitk::Image sourceImage( std::vector(2, 64), sitk::sitkVectorFloat64, 2); + + sitk::DisplacementFieldTransform displacementField(sourceImage); + + sitk::Image displacementImage = displacementField.GetDisplacementField(); + + typedef itk::VectorImage ImageBaseType; + ImageBaseType *imageBase = dynamic_cast(displacementImage.GetITKBase()); + ASSERT_TRUE(imageBase != SITK_NULLPTR); + EXPECT_FALSE(imageBase->GetPixelContainer()->GetContainerManageMemory()); + + sitk::Image result = sitk::InvertDisplacementField(displacementImage); + + EXPECT_FALSE(imageBase->GetPixelContainer()->GetContainerManageMemory()); + + imageBase = dynamic_cast(result.GetITKBase()); + ASSERT_TRUE(imageBase != SITK_NULLPTR); + EXPECT_TRUE(imageBase->GetPixelContainer()->GetContainerManageMemory()); + } + + TEST(TransformTest,Euler2DTransform) { // test Euler2DTransform From c1640132b8296435766ccb3901e56c8ca259d6d8 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 17 Jan 2020 13:59:37 -0500 Subject: [PATCH 334/400] Fix double free from buffer ownership change in ImageFromVectorImage Do not change the input image's buffer from not owning the buffer to owning the buffer. The logic has been fixed and refactored to clarify that the when the ownership should change. --- Code/Common/include/sitkImageConvert.h | 39 +++++++++++++++++--------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/Code/Common/include/sitkImageConvert.h b/Code/Common/include/sitkImageConvert.h index 507d57667..f4b5afd7f 100644 --- a/Code/Common/include/sitkImageConvert.h +++ b/Code/Common/include/sitkImageConvert.h @@ -48,20 +48,26 @@ GetImageFromVectorImage( itk::VectorImage< TPixelType, ImageDimension > *img, bo size_t numberOfElements = img->GetBufferedRegion().GetNumberOfPixels(); typename ImageType::PixelType* buffer = reinterpret_cast( img->GetPixelContainer()->GetBufferPointer() ); + + typename ImageType::Pointer out = ImageType::New(); + if (!img->GetPixelContainer()->GetContainerManageMemory()) { - transferOwnership=false; + // Set the image's pixel container to import the pointer provided. + out->GetPixelContainer()->SetImportPointer(buffer, numberOfElements, false ); + } + else + { + out->GetPixelContainer()->SetImportPointer(buffer, numberOfElements, transferOwnership ); + if (transferOwnership) + { + img->GetPixelContainer()->ContainerManageMemoryOff(); + } } - - typename ImageType::Pointer out = ImageType::New(); out->CopyInformation( img ); out->SetRegions( img->GetBufferedRegion() ); - // Set the image's pixel container to import the pointer provided. - out->GetPixelContainer()->SetImportPointer(buffer, numberOfElements, transferOwnership ); - img->GetPixelContainer()->SetContainerManageMemory(!transferOwnership); - return out; } @@ -83,17 +89,22 @@ GetVectorImageFromImage( itk::Image< itk::Vector< TPixelType, NLength >, NImageD numberOfElements *= NImageDimension; + typename VectorImageType::Pointer out = VectorImageType::New(); + if (!img->GetPixelContainer()->GetContainerManageMemory()) { - transferOwnership=false; + // Set the image's pixel container to import the pointer provided. + out->GetPixelContainer()->SetImportPointer(buffer, numberOfElements, false ); + } + else + { + out->GetPixelContainer()->SetImportPointer(buffer, numberOfElements, transferOwnership ); + if (transferOwnership) + { + img->GetPixelContainer()->ContainerManageMemoryOff(); + } } - - typename VectorImageType::Pointer out = VectorImageType::New(); - - // Set the image's pixel container to import the pointer provided. - out->GetPixelContainer()->SetImportPointer(buffer, numberOfElements, transferOwnership ); - img->GetPixelContainer()->SetContainerManageMemory(!transferOwnership); out->CopyInformation( img ); out->SetRegions( img->GetBufferedRegion() ); From baf1af40bd28477411be7163d8eef2f8a0a69d2d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 17 Jan 2020 16:45:46 -0500 Subject: [PATCH 335/400] Update the SimpleITK S3 URL to virtual-host style --- CMake/sitkExternalData.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMake/sitkExternalData.cmake b/CMake/sitkExternalData.cmake index 646c08724..94f90e625 100644 --- a/CMake/sitkExternalData.cmake +++ b/CMake/sitkExternalData.cmake @@ -34,7 +34,7 @@ if(NOT SimpleITK_FORBID_DOWNLOADS) list(APPEND ExternalData_URL_TEMPLATES # Data mirrored from SimpleITKExternalData repository - "https://s3.amazonaws.com/simpleitk/public/%(algo)/%(hash)" + "https://simpleitk.s3.amazonaws.com/public/%(algo)/%(hash)" # Data published on GitHub Pages "https://simpleitk.github.io/SimpleITKExternalData/%(algo)/%(hash)" From f59fa0493122d8edbaa13b643c42d492f1a71e08 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 17 Jan 2020 16:56:50 -0500 Subject: [PATCH 336/400] Remove ITK legacy code in Superbuild By default set ITK_LEGACY_REMOVE to ON, to aid in consistent behavior with ITK. --- SuperBuild/External_ITK.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index a8bf04f57..6feb424a4 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -78,8 +78,7 @@ endif() if( ITK_GIT_TAG STREQUAL _DEFAULT_ITK_GIT_TAG ) # only remove legacy with the tested, and predefined version of ITK list( APPEND ep_itk_args - "-DITK_LEGACY_REMOVE:BOOL=OFF" - "-DITKV4_COMPATIBILITY:BOOL=ON" + "-DITK_LEGACY_REMOVE:BOOL=ON" ) endif() From 5aa76f278338a8b924ee9d9db14b4509d28f267d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 17 Jan 2020 17:01:04 -0500 Subject: [PATCH 337/400] Set ReturnBinMidpoint to match default ITKv5 value The will change the result of Ostu's thresholding filter by default but the old results can be obtain by setting ReturnBinMidpoint to true. --- Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json | 2 +- Code/BasicFilters/json/OtsuThresholdImageFilter.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json b/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json index db9dc191f..2df323249 100644 --- a/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json +++ b/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json @@ -48,7 +48,7 @@ { "name" : "ReturnBinMidpoint", "type" : "bool", - "default" : "true" + "default" : "false" } ], "measurements" : [ diff --git a/Code/BasicFilters/json/OtsuThresholdImageFilter.json b/Code/BasicFilters/json/OtsuThresholdImageFilter.json index 340db2029..d07fa8a8e 100644 --- a/Code/BasicFilters/json/OtsuThresholdImageFilter.json +++ b/Code/BasicFilters/json/OtsuThresholdImageFilter.json @@ -70,7 +70,7 @@ { "name" : "ReturnBinMidpoint", "type" : "bool", - "default" : "true" + "default" : "false" } ], "measurements" : [ From de4ae202e93b477d953220a947c06ae61f45690d Mon Sep 17 00:00:00 2001 From: Kasper Marstal Date: Mon, 20 Jan 2020 14:17:26 +0100 Subject: [PATCH 338/400] DOC: Remove sudo from windows install instructions --- Documentation/Sphinx/GettingStarted.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/Sphinx/GettingStarted.rst b/Documentation/Sphinx/GettingStarted.rst index edb23332f..571fa6d3c 100644 --- a/Documentation/Sphinx/GettingStarted.rst +++ b/Documentation/Sphinx/GettingStarted.rst @@ -178,7 +178,7 @@ and run the following command: :: - $ sudo python setup.py install + $ python Packaging/setup.py install This will install the SimpleITK python module with SimpleElastix, which can then be imported into scripts like any other python module. If you want to install SimpleElastix into a virtual environment, activate the virtual environment on beforehand and omit :code:`sudo`. If you don't know what a virtual environment is, don't worry about it, it is entirely optional. From 789e43d3ddf07775fdfdb97aed280621fb2b7505 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 21 Jan 2020 16:57:16 -0500 Subject: [PATCH 339/400] Update Doxygen version to 1.8.17 The configuration file is update to the latest configuration. The Doxygen docker image is updated to build version 1.8.17. --- Utilities/Doxygen/docker/Dockerfile | 25 +-- Utilities/Doxygen/doxygen.config.in | 304 ++++++++++++++++++++-------- 2 files changed, 226 insertions(+), 103 deletions(-) diff --git a/Utilities/Doxygen/docker/Dockerfile b/Utilities/Doxygen/docker/Dockerfile index 4ef70f6b6..0d66b6164 100644 --- a/Utilities/Doxygen/docker/Dockerfile +++ b/Utilities/Doxygen/docker/Dockerfile @@ -1,31 +1,24 @@ -FROM ubuntu:14.04 as simpleitk-doxygen +FROM ubuntu:18.04 as simpleitk-doxygen -RUN apt-get update && apt-get install -y \ - apt-utils \ +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + cmake \ bison \ build-essential \ curl \ flex \ git \ - graphviz \ ninja-build \ - doxygen \ + graphviz \ python \ - vim \ && apt-get clean -# Install the latest CMake release -WORKDIR /tmp/ -RUN curl -L https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \ - python get-pip.py && \ - pip install cmake - RUN git clone https://github.com/doxygen/doxygen.git && \ ( cd doxygen && \ - git checkout Release_1_8_9_1 && \ - ./configure && \ - make -j$(nproc) && \ - make install) && \ + git checkout Release_1_8_17 && \ + mkdir bld && cd bld && \ + cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \ + ninja install) && \ rm -rf ./doxygen RUN git config --global url."https://github.com/InsightSoftwareConsortium/".insteadOf "https://itk.org/" diff --git a/Utilities/Doxygen/doxygen.config.in b/Utilities/Doxygen/doxygen.config.in index e4d1b1661..d74eb809b 100644 --- a/Utilities/Doxygen/doxygen.config.in +++ b/Utilities/Doxygen/doxygen.config.in @@ -1,4 +1,4 @@ -# Doxyfile 1.8.9.1 +# Doxyfile 1.8.17 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -17,11 +17,11 @@ # Project related configuration options #--------------------------------------------------------------------------- -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 @@ -93,6 +93,14 @@ ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. @@ -179,6 +187,16 @@ SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus @@ -226,7 +244,12 @@ TAB_SIZE = 2 # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. +# newlines (in the resulting output). You can put ^^ in the value part of an +# alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) ALIASES = @@ -264,17 +287,26 @@ OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is +# Fortran), use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # @@ -285,7 +317,7 @@ EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. +# documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. @@ -293,6 +325,15 @@ EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 5. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 5 + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or @@ -318,7 +359,7 @@ BUILTIN_STL_SUPPORT = YES CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. @@ -343,6 +384,13 @@ IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = YES +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent @@ -417,6 +465,12 @@ EXTRACT_ALL = YES EXTRACT_PRIVATE = YES +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. @@ -471,8 +525,8 @@ HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. +# declarations. If set to NO, these declarations will be included in the +# documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO @@ -495,7 +549,7 @@ INTERNAL_DOCS = NO # names in lower-case letters. If set to YES, upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. +# (including Cygwin) ands Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = YES @@ -682,7 +736,7 @@ LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. @@ -727,11 +781,18 @@ WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. # The default value is: NO. WARN_NO_PARAMDOC = NO +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated @@ -755,7 +816,7 @@ WARN_LOGFILE = # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with -# spaces. +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = "@PROJECT_SOURCE_DIR@/Code" \ @@ -766,7 +827,7 @@ INPUT = "@PROJECT_SOURCE_DIR@/Code" \ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# documentation (see: https://www.gnu.org/software/libiconv/) for the list of # possible encodings. # The default value is: UTF-8. @@ -774,12 +835,19 @@ INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank the -# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, -# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, -# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, -# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, -# *.qsf, *.as and *.js. +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), +# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen +# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f, *.for, *.tcl, *.vhd, +# *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.h \ *.dox @@ -874,6 +942,10 @@ IMAGE_PATH = "@PROJECT_SOURCE_DIR@/Documentation/Images" # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. INPUT_FILTER = @@ -883,6 +955,10 @@ INPUT_FILTER = # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. FILTER_PATTERNS = @@ -935,7 +1011,7 @@ INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. +# entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = YES @@ -967,12 +1043,12 @@ SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version +# (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # @@ -1112,7 +1188,7 @@ HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. @@ -1141,12 +1217,24 @@ HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: YES. +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via JavaScript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have JavaScript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. @@ -1170,13 +1258,13 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# environment (see: https://developer.apple.com/xcode/), introduced with OSX +# 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1215,7 +1303,7 @@ DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output @@ -1291,7 +1379,7 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1299,7 +1387,7 @@ QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- # folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1308,7 +1396,7 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1316,7 +1404,7 @@ QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1324,7 +1412,7 @@ QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = @@ -1417,7 +1505,7 @@ EXT_LINKS_IN_WINDOW = NO FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # @@ -1428,8 +1516,14 @@ FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering +# https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path @@ -1456,8 +1550,8 @@ MATHJAX_FORMAT = HTML-CSS # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. +# MathJax from https://www.mathjax.org before deployment. +# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest @@ -1499,7 +1593,7 @@ MATHJAX_CODEFILE = SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. There +# implemented using a web server instead of a web client using JavaScript. There # are two flavors of web server based searching depending on the EXTERNAL_SEARCH # setting. When disabled, doxygen will generate a PHP script for searching and # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing @@ -1518,7 +1612,7 @@ SERVER_BASED_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). +# Xapian (see: https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1531,7 +1625,7 @@ EXTERNAL_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). See the section "External Indexing and +# Xapian (see: https://xapian.org/). See the section "External Indexing and # Searching" for details. # This tag requires that the tag SEARCHENGINE is set to YES. @@ -1583,21 +1677,35 @@ LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. # -# Note that when enabling USE_PDFLATEX this option is only used for generating -# bitmaps for formulas in the HTML output, but not in the Makefile that is -# written to the output directory. -# The default file is: latex. +# Note that when not enabling USE_PDFLATEX the default is latex when enabling +# USE_PDFLATEX the default is pdflatex and when in the later case latex is +# chosen this is overwritten by pdflatex. For specific output languages the +# default can have been set differently, this depends on the implementation of +# the output language. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate # index for LaTeX. +# Note: This tag is used in the Makefile / make.bat. +# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file +# (.tex). # The default file is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. MAKEINDEX_CMD_NAME = makeindex +# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to +# generate index for LaTeX. In case there is no backslash (\) as first character +# it will be automatically added in the LaTeX code. +# Note: This tag is used in the generated output file (.tex). +# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat. +# The default value is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_MAKEINDEX_CMD = makeindex + # If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. @@ -1616,9 +1724,12 @@ COMPACT_LATEX = NO PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names -# that should be included in the LaTeX output. To get the times font for -# instance you can specify -# EXTRA_PACKAGES=times +# that should be included in the LaTeX output. The package can be specified just +# by its name or with the correct syntax as to be used with the LaTeX +# \usepackage command. To get the times font for instance you can specify : +# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} +# To use the option intlimits with the amsmath package you can specify: +# EXTRA_PACKAGES=[intlimits]{amsmath} # If left blank no extra packages will be included. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1716,12 +1827,28 @@ LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See -# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. +# https://en.wikipedia.org/wiki/BibTeX and \cite for more info. # The default value is: plain. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_BIB_STYLE = plain +# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_TIMESTAMP = NO + +# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) +# path from which the emoji images will be read. If a relative path is entered, +# it will be relative to the LATEX_OUTPUT directory. If left blank the +# LATEX_OUTPUT directory will be used. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EMOJI_DIRECTORY = + #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- @@ -1761,9 +1888,9 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO -# Load stylesheet definitions from file. Syntax is similar to doxygen's config -# file, i.e. a series of assignments. You only have to provide replacements, -# missing definitions are set to their default value. +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# configuration file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. # # See also section "Doxygen usage" for information on how to generate the # default style sheet that doxygen normally uses. @@ -1772,8 +1899,8 @@ RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's config file. A template extensions file can be generated -# using doxygen -e rtf extensionFile. +# similar to doxygen's configuration file. A template extensions file can be +# generated using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_EXTENSIONS_FILE = @@ -1859,6 +1986,13 @@ XML_OUTPUT = xml XML_PROGRAMLISTING = YES +# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include +# namespace members in file scope as well, matching the HTML output. +# The default value is: NO. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_NS_MEMB_FILE_SCOPE = NO + #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- @@ -1891,9 +2025,9 @@ DOCBOOK_PROGRAMLISTING = NO #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sf.net) file that captures the -# structure of the code including all documentation. Note that this feature is -# still experimental and incomplete at the moment. +# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures +# the structure of the code including all documentation. Note that this feature +# is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO @@ -2064,12 +2198,6 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of 'which perl'). -# The default file (with absolute path) is: /usr/bin/perl. - -PERL_PATH = @PERL_EXECUTABLE@ - #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- @@ -2083,15 +2211,6 @@ PERL_PATH = @PERL_EXECUTABLE@ CLASS_DIAGRAMS = YES -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see: -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. @@ -2224,7 +2343,8 @@ INCLUDED_BY_GRAPH = YES # # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. +# functions only using the \callgraph command. Disabling a call graph can be +# accomplished by means of the command \hidecallgraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2235,7 +2355,8 @@ CALL_GRAPH = NO # # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. +# functions only using the \callergraph command. Disabling a caller graph can be +# accomplished by means of the command \hidecallergraph. # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2258,11 +2379,15 @@ GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. +# generated by dot. For an explanation of the image formats see the section +# output formats in the documentation of the dot tool (Graphviz (see: +# http://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). -# Possible values are: png, jpg, gif and svg. +# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and +# png:gdiplus:gdiplus. # The default value is: png. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2313,6 +2438,11 @@ DIAFILE_DIRS = PLANTUML_JAR_PATH = +# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a +# configuration file for plantuml. + +PLANTUML_CFG_FILE = + # When using plantuml, the specified paths are searched for files specified by # the !include statement in a plantuml block. From 68880e6d0e56a810760d48c5cba68c311878fe2c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 21 Jan 2020 17:34:32 -0500 Subject: [PATCH 340/400] Update superbuild version of ITK closes #951. This update contains a patch to fix the RelabelComponentImageFilter's behavior with filter the size of labels. --- SuperBuild/External_ITK.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index a8bf04f57..50b24d26c 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -53,7 +53,7 @@ mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) # post v5.1rc01 -set(_DEFAULT_ITK_GIT_TAG "c342c6aedcebb2252e07a8e37892da965d6acff5") +set(_DEFAULT_ITK_GIT_TAG "bcd762e7bd743341c2dce84852ced49d8292f293") set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From 8c3f009400f758bd5645d318880442807250b5de Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 22 Jan 2020 11:05:01 -0500 Subject: [PATCH 341/400] Update testing results of Otsu changed behavior The default results for the Otsu and multi Otsu filter has changed, due to the "ReturnBinMidpoint" default value changing to false. This follows the default value for ITKv5. --- .../OtsuMultipleThresholdsImageFilter.json | 53 ++++++++++++++++++- .../json/OtsuThresholdImageFilter.json | 25 ++++++--- 2 files changed, 71 insertions(+), 7 deletions(-) diff --git a/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json b/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json index 2df323249..b750496a8 100644 --- a/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json +++ b/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json @@ -66,9 +66,19 @@ "tag" : "default", "description" : "Default parameter settings", "settings" : [], - "md5hash" : "94d62a813f969dadf22b7e3ae0b20178", + "md5hash" : "a9c3b0c0971c5cbda12b29db916451c6", "inputs" : [ "Input/RA-Short.nrrd" + ], + "measurements_results" : [ + { + "name" : "Thresholds", + "dim_vec" : 1, + "value" : [ + 27735.29492 + ], + "tolerance" : 0.0001 + } ] }, { @@ -79,11 +89,28 @@ "parameter" : "NumberOfThresholds", "value" : 2, "java_value" : "(short) 2" + }, + { + "parameter" : "ReturnBinMidpoint", + "value" : "true", + "python_value" : "True", + "R_value" : "TRUE" } ], "md5hash" : "1ab20d3cd9a354b45ac07ec59c0413b3", "inputs" : [ "Input/Ramp-Zero-One-Float.nrrd" + ], + "measurements_results" : [ + { + "name" : "Thresholds", + "dim_vec" : 1, + "value" : [ + 0.3242341, + 0.6601876 + ], + "tolerance" : 1e-06 + } ] }, { @@ -99,6 +126,12 @@ "parameter" : "NumberOfHistogramBins", "cxx_value" : "256u", "value" : "256" + }, + { + "parameter" : "ReturnBinMidpoint", + "value" : "true", + "python_value" : "True", + "R_value" : "TRUE" } ], "md5hash" : "b61c3f4e063fcdd24dba76227129ae34", @@ -120,11 +153,29 @@ "value" : "true", "python_value" : "True", "R_value" : "TRUE" + }, + { + "parameter" : "ReturnBinMidpoint", + "value" : "true", + "python_value" : "True", + "R_value" : "TRUE" } ], "md5hash" : "fb65e730472c8001185f355fb626ca3f", "inputs" : [ "Input/cthead1.png" + ], + "measurements_results" : [ + { + "name" : "Thresholds", + "dim_vec" : 1, + "value" : [ + 48.812408, + 102.605674, + 186.284088 + ], + "tolerance" : 1e-05 + } ] } ], diff --git a/Code/BasicFilters/json/OtsuThresholdImageFilter.json b/Code/BasicFilters/json/OtsuThresholdImageFilter.json index d07fa8a8e..230a14239 100644 --- a/Code/BasicFilters/json/OtsuThresholdImageFilter.json +++ b/Code/BasicFilters/json/OtsuThresholdImageFilter.json @@ -86,21 +86,28 @@ "tag" : "default", "description" : "Default parameter settings", "settings" : [], - "md5hash" : "ddf5ed860d650763c54f36628bd9fa35", + "md5hash" : "5cad88b6933e76fe8d4e247df9aea78c", "inputs" : [ "Input/RA-Short.nrrd" ], "measurements_results" : [ { "name" : "Threshold", - "value" : 27602.0 + "value" : 27735.0 } ] }, { "tag" : "cthead1_with_mask", "description" : "CT Head with mask", - "settings" : [], + "settings" : [ + { + "parameter" : "ReturnBinMidpoint", + "value" : "true", + "python_value" : "True", + "R_value" : "TRUE" + } + ], "md5hash" : "65b36b85ce17ca4458c30a51eada3d47", "inputs" : [ "Input/cthead1.png", @@ -122,6 +129,12 @@ "value" : "false", "python_value" : "False", "R_value" : "FALSE" + }, + { + "parameter" : "ReturnBinMidpoint", + "value" : "true", + "python_value" : "True", + "R_value" : "TRUE" } ], "md5hash" : "bfaba8593ac8ace80316c9e17f378f08", @@ -140,15 +153,15 @@ "tag" : "default_on_float", "description" : "Default parameter settings", "settings" : [], - "md5hash" : "fcd8ca1be3f4d7561f81e06b3c570af0", + "md5hash" : "c7b19aed2d9af9ac82e19fc8756edf99", "inputs" : [ "Input/Ramp-Zero-One-Float.nrrd" ], "measurements_results" : [ { "name" : "Threshold", - "value" : 0.496117, - "tolerance" : 1e-05 + "value" : 0.50002, + "tolerance" : 0.0001 } ] } From fe4de9d95403e3b555a72bce838f84774b201111 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 22 Jan 2020 13:47:11 -0500 Subject: [PATCH 342/400] Add more testing for RelabelComponentImageFilter Adding checks for the size of the objects, and testing combinations of sorting and object size. These tests are test of issue #951. --- .../json/RelabelComponentImageFilter.json | 65 ++++++++++++++++++- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/Code/BasicFilters/json/RelabelComponentImageFilter.json b/Code/BasicFilters/json/RelabelComponentImageFilter.json index 531f14a93..a5b0453ea 100644 --- a/Code/BasicFilters/json/RelabelComponentImageFilter.json +++ b/Code/BasicFilters/json/RelabelComponentImageFilter.json @@ -70,6 +70,15 @@ { "name" : "OriginalNumberOfObjects", "value" : "2u" + }, + { + "name" : "SizeOfObjectsInPhysicalUnits", + "dim_vec" : 1, + "value" : [ + 23061, + 9085 + ], + "tolerance" : 1e-23 } ], "md5hash" : "58af064e929f08f9d5bacc8be44ed92e", @@ -91,16 +100,66 @@ "measurements_results" : [ { "name" : "NumberOfObjects", - "value" : "2u" + "value" : "3u" }, { "name" : "OriginalNumberOfObjects", + "value" : "3u" + }, + { + "name" : "SizeOfObjectsInPhysicalUnits", + "dim_vec" : 1, + "value" : [ + 146, + 126, + 200 + ], + "tolerance" : 1e-23 + } + ], + "md5hash" : "0231da8387aa665ddff9c2645e71f213", + "inputs" : [ + "Input/simple-label-d.png" + ] + }, + { + "tag" : "no_sorting2", + "description" : "2D without size sorting", + "settings" : [ + { + "parameter" : "SortByObjectSize", + "value" : "false", + "python_value" : "False", + "R_value" : "FALSE" + }, + { + "parameter" : "MinimumObjectSize", + "type" : "uint64_t", + "value" : "140" + } + ], + "measurements_results" : [ + { + "name" : "NumberOfObjects", "value" : "2u" + }, + { + "name" : "OriginalNumberOfObjects", + "value" : "3u" + }, + { + "name" : "SizeOfObjectsInPhysicalUnits", + "dim_vec" : 1, + "value" : [ + 146, + 200 + ], + "tolerance" : 1e-23 } ], - "md5hash" : "58af064e929f08f9d5bacc8be44ed92e", + "md5hash" : "4c81464832a0270041334abd744b94b0", "inputs" : [ - "Input/2th_cthead1.png" + "Input/simple-label-d.png" ] } ], From e07973fd31f40698c7c7f5948f3127e36426fa6f Mon Sep 17 00:00:00 2001 From: Boo Irizarry Date: Fri, 24 Jan 2020 14:41:23 -0500 Subject: [PATCH 343/400] update workflow contrubiting.md file --- .github/CONTRIBUTING.md | 59 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 154a0bfbd..e6cee11b3 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -30,6 +30,65 @@ SimpleITK uses a branchy workflow where each PR should be a new topic branch. Lo After completing the local branch, push it to your fork, then create a GitHub pull request in the SimpleITK upstream repository. The pull request is then required to have an approving *code review*, and the *continuous integration* testing pass before the topic is merged into the upstream repository. +### How to contribute with the right workflow using github commands + +``` shell +# Fork the repo + +# clone to your laptop +git clone https://github.com//SimpleITK.git + +# go to the folder +cd SimpleITK + +# check the repo +git remote -v +origin https://github.com//SimpleITK.git (fetch) +origin https://github.com//SimpleITK.git (push) + +# add the upstream +git remote add upstream https://github.com/SimpleITK/SimpleITK.git + +# check the repos again +git remote -v +origin https://github.com//SimpleITK.git (fetch) +origin https://github.com//SimpleITK.git (push) +upstream https://github.com/SimpleITK/SimpleITK.git (fetch) +upstream https://github.com/SimpleITK/SimpleITK.git (push) + +# download the upstream repo in to your local +git fetch upstream + +# you will see something like this: + * [new branch] dashboard -> upstream/dashboard + * [new branch] master -> upstream/master + * [new branch] release -> upstream/release + +# then create your new branch where "newdocumentation" is the name of the new branch. you can change the name +git checkout -b newdocumentation upstream/master +Branch 'newdocumentation' set up to track remote branch 'master' from 'upstream'. +Switched to a new branch 'newdocumentation' + +# to check the branches to type this: +git branch + +# the name with the * in front is the branch that you are. + master +* newdocumentation + +# work on the project and when you are done save the files and add, commit and push to origin +git status +git add . +git commit -m"a new commit" +git push origin HEAD + +# once you push it go to your fork repo +/SimpleITK + +# click on the green button name "compare & pull request" and submit your pull request + +``` + ## Branches * **master** - Stable branch of the code which is expected to available to users when building SimpleITK. New features should be based on this branch. From ff010212956d07a5e52ea2ccdcf21a03e528788f Mon Sep 17 00:00:00 2001 From: Boo Irizarry Date: Fri, 24 Jan 2020 15:17:21 -0500 Subject: [PATCH 344/400] update contributing file --- .github/CONTRIBUTING.md | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index e6cee11b3..d5da3e886 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -32,61 +32,52 @@ After completing the local branch, push it to your fork, then create a GitHub pu ### How to contribute with the right workflow using github commands +Commands that are going to be use only once for initial setup. ``` shell # Fork the repo - +https://github.com/SimpleITK/SimpleITK.git # clone to your laptop git clone https://github.com//SimpleITK.git - # go to the folder cd SimpleITK - # check the repo git remote -v origin https://github.com//SimpleITK.git (fetch) origin https://github.com//SimpleITK.git (push) - # add the upstream git remote add upstream https://github.com/SimpleITK/SimpleITK.git - +``` +Commands that should be performed every time you want to contribute. +```shell # check the repos again git remote -v origin https://github.com//SimpleITK.git (fetch) origin https://github.com//SimpleITK.git (push) upstream https://github.com/SimpleITK/SimpleITK.git (fetch) upstream https://github.com/SimpleITK/SimpleITK.git (push) - # download the upstream repo in to your local git fetch upstream - # you will see something like this: * [new branch] dashboard -> upstream/dashboard * [new branch] master -> upstream/master * [new branch] release -> upstream/release - # then create your new branch where "newdocumentation" is the name of the new branch. you can change the name git checkout -b newdocumentation upstream/master Branch 'newdocumentation' set up to track remote branch 'master' from 'upstream'. Switched to a new branch 'newdocumentation' - # to check the branches to type this: git branch - # the name with the * in front is the branch that you are. master * newdocumentation - -# work on the project and when you are done save the files and add, commit and push to origin +# work on the project and when you are done save the files and add, commit and push to origin git status git add . git commit -m"a new commit" git push origin HEAD - -# once you push it go to your fork repo +# once you push it go to your fork repo /SimpleITK - # click on the green button name "compare & pull request" and submit your pull request - ``` ## Branches From 7188e4091013fcd5b17447979c2e6522e389371d Mon Sep 17 00:00:00 2001 From: Boo Irizarry Date: Fri, 24 Jan 2020 16:21:54 -0500 Subject: [PATCH 345/400] update contributing file again --- .github/CONTRIBUTING.md | 72 ++++++++++++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 18 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index d5da3e886..e52b97ffb 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -32,53 +32,89 @@ After completing the local branch, push it to your fork, then create a GitHub pu ### How to contribute with the right workflow using github commands -Commands that are going to be use only once for initial setup. -``` shell -# Fork the repo +1. Setup +Fork the repo https://github.com/SimpleITK/SimpleITK.git -# clone to your laptop + +clone to your laptop +``` shell git clone https://github.com//SimpleITK.git -# go to the folder +``` +Go to the folder +``` shell cd SimpleITK -# check the repo +``` +Check the repo +```shell git remote -v origin https://github.com//SimpleITK.git (fetch) origin https://github.com//SimpleITK.git (push) -# add the upstream +``` +Add the upstream +``` shell git remote add upstream https://github.com/SimpleITK/SimpleITK.git ``` -Commands that should be performed every time you want to contribute. +Check the repos again ```shell -# check the repos again git remote -v origin https://github.com//SimpleITK.git (fetch) origin https://github.com//SimpleITK.git (push) upstream https://github.com/SimpleITK/SimpleITK.git (fetch) upstream https://github.com/SimpleITK/SimpleITK.git (push) -# download the upstream repo in to your local +``` +Download the upstream repo in to your local +``` shell git fetch upstream -# you will see something like this: +``` +You will see something like this: +``` shell * [new branch] dashboard -> upstream/dashboard * [new branch] master -> upstream/master * [new branch] release -> upstream/release -# then create your new branch where "newdocumentation" is the name of the new branch. you can change the name +``` +2. Start a branch +Create your new branch where "newdocumentation" is the name of the new branch. you can change the name +``` shell git checkout -b newdocumentation upstream/master Branch 'newdocumentation' set up to track remote branch 'master' from 'upstream'. Switched to a new branch 'newdocumentation' -# to check the branches to type this: +``` +To check the branches to type this: +``` shell git branch -# the name with the * in front is the branch that you are. +``` +The name with the * in front is the branch that you are. +``` shell master * newdocumentation -# work on the project and when you are done save the files and add, commit and push to origin +``` +3. Create a Pull Request +Work on the project and when you are done save the files and add, commit and push to origin +``` shell git status git add . git commit -m"a new commit" -git push origin HEAD -# once you push it go to your fork repo +git push origin +``` +Once you push it go to your fork repo +``` shell +/SimpleITK +``` +Click on the green button name "compare & pull request" and submit your pull request + +4. Update a Pull Request + When you update your Pull Request you save the files and add, commit and push to origin. + ``` shell +git status +git add . +git commit -m"a new commit" +git push origin +``` +Once you push it go to your fork repo +``` shell /SimpleITK -# click on the green button name "compare & pull request" and submit your pull request ``` +You will not see again the green button name "compare & pull request". That mean that your request have been update it. You can now go to your pull request (PR) in the https://github.com/SimpleITK/SimpleITK.git and click in the pull request tab, then click on your PR and check the comments and more. ## Branches From 3f3af00a8f987021ab206ee5365216f70b5fcd4a Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 23 Jan 2020 09:07:53 -0500 Subject: [PATCH 346/400] Fix AZP package find command path With the 20200113.1 version of the vs2017-win2016 image, the PATH environment variable changed for the bash task. The "find" command resolves to the window system executable by default. The PATH environment variable is updated to search the bash bin first. --- Testing/CI/Azure/win_build_csharp.sh | 2 ++ Testing/CI/Azure/win_build_java.sh | 2 ++ Testing/CI/Azure/win_build_python.sh | 2 ++ 3 files changed, 6 insertions(+) diff --git a/Testing/CI/Azure/win_build_csharp.sh b/Testing/CI/Azure/win_build_csharp.sh index 49f8227ed..4b2d1aae3 100755 --- a/Testing/CI/Azure/win_build_csharp.sh +++ b/Testing/CI/Azure/win_build_csharp.sh @@ -2,6 +2,8 @@ set -ex +export PATH=/usr/bin:${PATH} + export ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS=2 read -r -d '' CTEST_CACHE << EOM || true diff --git a/Testing/CI/Azure/win_build_java.sh b/Testing/CI/Azure/win_build_java.sh index 196ce9b3e..30daeb685 100755 --- a/Testing/CI/Azure/win_build_java.sh +++ b/Testing/CI/Azure/win_build_java.sh @@ -2,6 +2,8 @@ set -ex +export PATH=/usr/bin:${PATH} + export ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS=2 read -r -d '' CTEST_CACHE << EOM || true diff --git a/Testing/CI/Azure/win_build_python.sh b/Testing/CI/Azure/win_build_python.sh index e7fc9330f..f27f0b997 100755 --- a/Testing/CI/Azure/win_build_python.sh +++ b/Testing/CI/Azure/win_build_python.sh @@ -2,6 +2,8 @@ set -ex +export PATH=/usr/bin:${PATH} + export ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS=2 echo "COREBINARYDIRECTORY: ${COREBINARYDIRECTORY}" From e29931c3c1bd6386771d024aad06ed8ad52405c6 Mon Sep 17 00:00:00 2001 From: Dave Chen Date: Thu, 30 Jan 2020 14:51:38 -0500 Subject: [PATCH 347/400] Fixed grammer and changed ImageJ to Fiji. --- Examples/HelloWorld/Documentation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/HelloWorld/Documentation.rst b/Examples/HelloWorld/Documentation.rst index c5cedee73..b0c6ee737 100644 --- a/Examples/HelloWorld/Documentation.rst +++ b/Examples/HelloWorld/Documentation.rst @@ -7,7 +7,7 @@ Overview A "Hello World" example for SimpleITK. The example constructs a 128x128 greyscale image, draws a smiley face made of Gaussian blobs, and calls the Show function to -display with image with ImageJ. +display the image with Fiji. Code From 9b7aacdc32d86ae370eb5fba27129ab80d0384f5 Mon Sep 17 00:00:00 2001 From: Dave Chen Date: Fri, 31 Jan 2020 16:13:04 -0500 Subject: [PATCH 348/400] Added CMake/C++ setup documentation --- docs/source/CMakeLists.txt | 8 +++++++ docs/source/cmake_cplusplus.rst | 41 +++++++++++++++++++++++++++++++++ docs/source/index.rst | 1 + docs/source/sitk_example.cxx | 24 +++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 docs/source/CMakeLists.txt create mode 100644 docs/source/cmake_cplusplus.rst create mode 100644 docs/source/sitk_example.cxx diff --git a/docs/source/CMakeLists.txt b/docs/source/CMakeLists.txt new file mode 100644 index 000000000..93f3956ca --- /dev/null +++ b/docs/source/CMakeLists.txt @@ -0,0 +1,8 @@ + +cmake_minimum_required(VERSION 3.14) + +project(sitk_example) + +find_package(SimpleITK) +add_executable ( sitk_example sitk_example.cxx ) +target_link_libraries ( sitk_example ${SimpleITK_LIBRARIES} ) diff --git a/docs/source/cmake_cplusplus.rst b/docs/source/cmake_cplusplus.rst new file mode 100644 index 000000000..5bc676b21 --- /dev/null +++ b/docs/source/cmake_cplusplus.rst @@ -0,0 +1,41 @@ +A Simple C++/CMake Example +========================== + +Building a C++ SimpleITK application is normally done using `CMake ` to +configure the build process. CMake can generate project buildsystem for Unix Makefiles, +Microsoft Visual Studio, or Mac OS Xcode. + +Here is a basic **CMakeLists.txt** configuration file for building a SimpleITK C++ example program. + +.. literalinclude:: CMakeLists.txt + + +Here is our SimpleITK C++ example file **sitk_example.cxx**. + +.. literalinclude:: sitk_example.cxx + + +To create the project buildsystem, run **cmake** in the same directory as these files like so:: + + cmake . + +Running cmake will produce a **CMakeCache.txt** file that is the cmake configuration. Within that +text file there are several variables that will most likely need to be set, SimpleITK_DIR and ITK_DIR. +SimpleITK_DIR needs to be set to the directory that contains the file SimpleITKConfig.cmake, and ITK_DIR needs +to be the directory containing the ITKConfig.cmake file. + +CMake attempts to find these files automatically, but it is unlikely to find them unless SimpleITK and ITK are +installed into the system. + +If you have built SimpleITK using the SuperBuild process, as described in :doc:`building`, then required directories +can be found in the SuperBuild location. The SimpleITK_DIR variable should refer +to SimpleITK-build within the SuperBuild location, and ITK_DIR variable should refer +to ITK-build in the SuperBuild location. + +Here are what the settings in a generate CMakeCache.txt file look like:: + + //The directory containing a CMake configuration file for ITK. + ITK_DIR:PATH=/home/dchen/SuperBuild/ITK-build + + //The directory containing a CMake configuration file for SimpleITK. + SimpleITK_DIR:PATH=/home/dchen/SuperBuild/SimpleITK-build diff --git a/docs/source/index.rst b/docs/source/index.rst index 63773c227..57363ee80 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -22,6 +22,7 @@ SimpleITK are currently available for all three major operating systems filters building setUp + cmake_cplusplus tutorialsAndCourses faq FilterTemplates diff --git a/docs/source/sitk_example.cxx b/docs/source/sitk_example.cxx new file mode 100644 index 000000000..619501cb9 --- /dev/null +++ b/docs/source/sitk_example.cxx @@ -0,0 +1,24 @@ +// This one header will include all SimpleITK filters and external objects. +#include +#include + +// create convenient namespace alias +namespace sitk = itk::simple; + +int main ( int argc, char* argv[] ) { + + sitk::PixelIDValueEnum pixelType = sitk::sitkUInt8; + std::vector imageSize ( 2, 128 ); + + // Create a black image + sitk::Image image( imageSize, pixelType ); + + // Add a Gaussian blob to the image + std::vector blobSize ( 2, 64.0 ); + std::vector blobCenter ( 2, 64.0 ); + image = image + sitk::GaussianSource( pixelType, imageSize, blobSize, blobCenter ); + + // Write the image as a PNG file + sitk::WriteImage(image, "blob.png" ); + +} From bedef3c24b34028952c9990dbb4ef169b876ba81 Mon Sep 17 00:00:00 2001 From: Dave Chen Date: Fri, 31 Jan 2020 16:13:04 -0500 Subject: [PATCH 349/400] Added CMake/C++ setup documentation --- docs/source/CMakeLists.txt | 7 ++++ docs/source/cmake_cplusplus.rst | 58 +++++++++++++++++++++++++++++++++ docs/source/index.rst | 1 + docs/source/sitk_example.cxx | 24 ++++++++++++++ 4 files changed, 90 insertions(+) create mode 100644 docs/source/CMakeLists.txt create mode 100644 docs/source/cmake_cplusplus.rst create mode 100644 docs/source/sitk_example.cxx diff --git a/docs/source/CMakeLists.txt b/docs/source/CMakeLists.txt new file mode 100644 index 000000000..91c130cd4 --- /dev/null +++ b/docs/source/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.14) + +project(sitk_example) + +find_package(SimpleITK) +add_executable ( sitk_example sitk_example.cxx ) +target_link_libraries ( sitk_example ${SimpleITK_LIBRARIES} ) diff --git a/docs/source/cmake_cplusplus.rst b/docs/source/cmake_cplusplus.rst new file mode 100644 index 000000000..461110f1c --- /dev/null +++ b/docs/source/cmake_cplusplus.rst @@ -0,0 +1,58 @@ +A Simple C++/CMake Example +========================== + +Building a C++ SimpleITK application is normally done using `CMake `_ to +configure the build process. CMake can generate project buildsystems for Unix Makefiles, +`Ninja `_, Microsoft Visual Studio, or Mac OS Xcode. + +Here is a basic **CMakeLists.txt** configuration file for building a SimpleITK C++ example program. + +.. literalinclude:: CMakeLists.txt + + +Here is our SimpleITK C++ example file **sitk_example.cxx**. + +.. literalinclude:: sitk_example.cxx + + +To create the project buildsystem, run **cmake** in the same directory as these files like so:: + + cmake . + +Required CMake Variables +######################## + +Running cmake will produce a **CMakeCache.txt** file that is the cmake configuration. Within that +text file there are several variables needed to build a SimpleITK program, SimpleITK_DIR and ITK_DIR. +SimpleITK_DIR needs to be set to the directory that contains the file SimpleITKConfig.cmake, and +ITK_DIR needs to be the directory containing the file ITKConfig.cmake. + +CMake attempts to find these files automatically, but it is unlikely to find them unless SimpleITK +and ITK are installed into the system. + +If you have built SimpleITK using the SuperBuild process, as described in :doc:`building`, then +these required directories can be found in the SuperBuild location. The SimpleITK_DIR variable +should refer to the directory SimpleITK-build within the SuperBuild location, and the ITK_DIR +variable should refer to the directory ITK-build in the SuperBuild location. + +Here are what the settings in a CMakeCache.txt file should look like:: + + //The directory containing a CMake configuration file for ITK. + ITK_DIR:PATH=/home/dchen/SuperBuild/ITK-build + + //The directory containing a CMake configuration file for SimpleITK. + SimpleITK_DIR:PATH=/home/dchen/SuperBuild/SimpleITK-build + +Compiling using CMake +##################### +Your program can be built by running cmake. Here is the command to perform the build in the +current directory:: + + cmake --build . --config Release + +The 'config' parameter could also be set to Debug, RelWithDebInfo or MinSizeRel. On +Unix-type systems Release is the default. On Windows the config must be specified explicitly. + +Of course you can use traditional methods to build your SimpleITK program (e.g. make on Unix, or +Visual Studio on Windows), but it is convinient to be able to use the same build command on +all systems. diff --git a/docs/source/index.rst b/docs/source/index.rst index 63773c227..57363ee80 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -22,6 +22,7 @@ SimpleITK are currently available for all three major operating systems filters building setUp + cmake_cplusplus tutorialsAndCourses faq FilterTemplates diff --git a/docs/source/sitk_example.cxx b/docs/source/sitk_example.cxx new file mode 100644 index 000000000..619501cb9 --- /dev/null +++ b/docs/source/sitk_example.cxx @@ -0,0 +1,24 @@ +// This one header will include all SimpleITK filters and external objects. +#include +#include + +// create convenient namespace alias +namespace sitk = itk::simple; + +int main ( int argc, char* argv[] ) { + + sitk::PixelIDValueEnum pixelType = sitk::sitkUInt8; + std::vector imageSize ( 2, 128 ); + + // Create a black image + sitk::Image image( imageSize, pixelType ); + + // Add a Gaussian blob to the image + std::vector blobSize ( 2, 64.0 ); + std::vector blobCenter ( 2, 64.0 ); + image = image + sitk::GaussianSource( pixelType, imageSize, blobSize, blobCenter ); + + // Write the image as a PNG file + sitk::WriteImage(image, "blob.png" ); + +} From dd7fc19b15849b4d853cc743cbe74934e237d8d1 Mon Sep 17 00:00:00 2001 From: Dave Chen Date: Mon, 3 Feb 2020 16:28:15 -0500 Subject: [PATCH 350/400] Removed 1st and 2nd person usage --- docs/source/cmake_cplusplus.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/source/cmake_cplusplus.rst b/docs/source/cmake_cplusplus.rst index 81a5e49dc..34b60e012 100644 --- a/docs/source/cmake_cplusplus.rst +++ b/docs/source/cmake_cplusplus.rst @@ -1,7 +1,7 @@ A Simple C++/CMake Example ========================== -Building a C++ SimpleITK application is normally done using `CMake `_ to +Building a C++ SimpleITK application is supported by using `CMake `_ to configure the build process. CMake can generate project buildsystems for Unix Makefiles, `Ninja `_, Microsoft Visual Studio, or Mac OS Xcode. @@ -15,7 +15,7 @@ Here is our SimpleITK C++ example file **sitk_example.cxx**. .. literalinclude:: sitk_example.cxx -To create the project buildsystem, run **cmake** in the same directory as these files like so:: +Invoking **cmake** as below in the same directory as these files will create the project buildsystem:: cmake . @@ -23,14 +23,14 @@ Required CMake Variables ######################## Running cmake will produce a **CMakeCache.txt** file that is the cmake configuration. Within that -text file there are several variables needed to build a SimpleITK program, SimpleITK_DIR and ITK_DIR. +text file there are two variables needed to build a SimpleITK program, *SimpleITK_DIR* and *ITK_DIR*. SimpleITK_DIR needs to be set to the directory that contains the file SimpleITKConfig.cmake, and ITK_DIR needs to be the directory containing the file ITKConfig.cmake. CMake attempts to find these files automatically, but it is unlikely to find them unless SimpleITK and ITK are installed into the system. -If you have built SimpleITK using the SuperBuild process, as described in :doc:`building`, then +If SimpleITK has been built using the SuperBuild process, as described in :doc:`building`, then these required directories can be found in the SuperBuild location. The SimpleITK_DIR variable should refer to the directory SimpleITK-build within the SuperBuild location, and the ITK_DIR variable should refer to the directory ITK-build in the SuperBuild location. @@ -45,14 +45,14 @@ Here are what the settings in a CMakeCache.txt file should look like:: Compiling using CMake ##################### -Your program can be built by running cmake. Here is the command to perform the build in the -current directory:: +A SimpleITK program can also be compiled by running cmake. Here is the command to perform the +build in the current directory:: cmake --build . --config Release The 'config' parameter could also be set to Debug, RelWithDebInfo or MinSizeRel. On Unix-type systems Release is the default. On Windows the config must be specified explicitly. -Of course you can use traditional methods to build your SimpleITK program (e.g. make on Unix, or -Visual Studio on Windows), but it is convenient to be able to use the same build command on -all systems. +Of course traditional methods can be used to build a SimpleITK program (e.g. make on Unix, or +Visual Studio on Windows), but it is often convenient to be able to use the same build command on +all system types. From 8054ae584ec44781f3652cd249c81739bb03f333 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 31 Jan 2020 17:06:50 -0500 Subject: [PATCH 351/400] Add rename const buffer access methods to C# interface. The implicit modification of the sitk::Image by calling MakeUnique in the GetBufferAs.. methods can cause problem in with multi-threader. See issue #958 for more details. --- Examples/CSharp/ImageGetBuffer.cs | 2 ++ Wrapping/CSharp/CSharp.i | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/Examples/CSharp/ImageGetBuffer.cs b/Examples/CSharp/ImageGetBuffer.cs index 88fbd3436..357e8cdd7 100644 --- a/Examples/CSharp/ImageGetBuffer.cs +++ b/Examples/CSharp/ImageGetBuffer.cs @@ -44,6 +44,8 @@ static void Main(string[] args) { len *= (int)size[dim]; } IntPtr buffer = input.GetBufferAsFloat(); + // Note: C# also has a GetConstBufferAs... methods which do not + // implicitly call MakeUnique. // There are two ways to access the buffer: diff --git a/Wrapping/CSharp/CSharp.i b/Wrapping/CSharp/CSharp.i index 4a849ebe5..8e05af8cc 100644 --- a/Wrapping/CSharp/CSharp.i +++ b/Wrapping/CSharp/CSharp.i @@ -43,6 +43,24 @@ %CSharpTypemapHelper( float*, System.IntPtr ) %CSharpTypemapHelper( double*, System.IntPtr ) + +// CSharp does not hadle overloaded const methods. So they are +// explicitly renamed to enable their explicit usage. These methods +// assume that the buffer will not be modified, so MakeUnique is +// not call. +%rename("GetConstBufferAsInt8") itk::simple::Image::GetBufferAsInt8( ) const; +%rename("GetConstBufferAsUInt8") itk::simple::Image::GetBufferAsUInt8( ) const; +%rename("GetConstBufferAsInt16") itk::simple::Image::GetBufferAsInt16( ) const; +%rename("GetConstBufferAsUInt16") itk::simple::Image::GetBufferAsUInt16( ) const; +%rename("GetConstBufferAsInt32") itk::simple::Image::GetBufferAsInt32( ) const; +%rename("GetConstBufferAsUInt32") itk::simple::Image::GetBufferAsUInt32( ) const; +%rename("GetConstBufferAsInt64") itk::simple::Image::GetBufferAsInt64( ) const; +%rename("GetConstBufferAsUInt64") itk::simple::Image::GetBufferAsUInt64( ) const; +%rename("GetConstBufferAsFloat") itk::simple::Image::GetBufferAsFloat( ) const; +%rename("GetConstBufferAsDouble") itk::simple::Image::GetBufferAsDouble( ) const; + + + // Add override to ToString method %csmethodmodifiers ToString "public override"; @@ -263,6 +281,7 @@ } #endregion + %} #endif // End of C# specific sections From d4db2654faa6d05f9d3b335235e628b06eb73e62 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 31 Jan 2020 15:55:55 -0500 Subject: [PATCH 352/400] Add GetIndexes and GetRLEIndexes to LabelShapStatistics filter. These methods provide a convent and reasonably efficient method to access a list of indexes for a label. --- .../json/LabelShapeStatisticsImageFilter.json | 33 +++++++++++- .../src/sitkLabelFunctorUtils.hxx | 47 +++++++++++++++++ .../Components/CustomCasts.cxx | 6 ++- Testing/Unit/sitkLabelStatisticsTest.cxx | 52 +++++++++++++++++++ 4 files changed, 135 insertions(+), 3 deletions(-) diff --git a/Code/BasicFilters/json/LabelShapeStatisticsImageFilter.json b/Code/BasicFilters/json/LabelShapeStatisticsImageFilter.json index def98fba5..16a5e1dcb 100644 --- a/Code/BasicFilters/json/LabelShapeStatisticsImageFilter.json +++ b/Code/BasicFilters/json/LabelShapeStatisticsImageFilter.json @@ -10,7 +10,8 @@ "no_procedure" : true, "no_return_image" : true, "include_files" : [ - "itkShapeLabelObject.h" + "itkShapeLabelObject.h", + "sitkLabelFunctorUtils.hxx" ], "members" : [ { @@ -374,6 +375,36 @@ ], "custom_cast" : "sitkVectorOfITKVectorToSTL(value)", "label_map" : true + }, + { + "name" : "Indexes", + "itk_get" : "f->GetOutput()->GetLabelObject(label)", + "type" : "std::vector", + "no_print" : true, + "active" : true, + "parameters" : [ + { + "name" : "label", + "type" : "int64_t" + } + ], + "custom_cast" : "GetIndexesFromLabelObject(*value)", + "detaileddescriptionGet" : "Get an array of indexes for pixels with the label value." + }, + { + "name" : "RLEIndexes", + "itk_get" : "f->GetOutput()->GetLabelObject(label)", + "type" : "std::vector", + "no_print" : true, + "active" : true, + "parameters" : [ + { + "name" : "label", + "type" : "int64_t" + } + ], + "custom_cast" : "GetRLEIndexesFromLabelObject(*value)", + "detaileddescriptionGet" : "Get an array of run-length encoding (RLE) indexes for pixels with the label value. The array is the index of a starting line, followed by the length repeated. The length of the array is divisible by the image's dimension + 1. For example for a 2D image the array [ 2, 3, 2] would encode the two indexes [2,3] and [3,3]." } ], "tests" : [ diff --git a/Code/BasicFilters/src/sitkLabelFunctorUtils.hxx b/Code/BasicFilters/src/sitkLabelFunctorUtils.hxx index e4f8cab22..c8e737285 100644 --- a/Code/BasicFilters/src/sitkLabelFunctorUtils.hxx +++ b/Code/BasicFilters/src/sitkLabelFunctorUtils.hxx @@ -46,6 +46,53 @@ SetLabelFunctorFromColormap( TLabelFunctorType &functor, const std::vector +std::vector +GetIndexesFromLabelObject( const TLabelObject &lo ) +{ + size_t sz = lo.Size(); + std::vector idxs(sz*TLabelObject::ImageDimension); + auto iter = idxs.begin(); + for(itk::SizeValueType pixelId = 0; pixelId < lo.Size(); pixelId++) + { + const auto & idx = lo.GetIndex(pixelId); + for(unsigned int d = 0; d < TLabelObject::ImageDimension; ++d) + { + *(iter++) = idx[d]; + } + } + return idxs; +} + + +/** \brief Convert an itk::LabelObject into a RLE encoded vector of indexes. + * + * The return array in the n-d index followed by a length. The 0 + * dimension of the index is incremented for the length to generate + * the indexes represented. + */ +template +std::vector +GetRLEIndexesFromLabelObject( const TLabelObject &lo ) +{ + size_t sz = lo.GetNumberOfLines()*(TLabelObject::ImageDimension+1); + std::vector rle(sz); + + auto iter = rle.begin(); + for(SizeValueType lineId = 0; lineId < lo.GetNumberOfLines(); ++lineId) + { + const auto & line = lo.GetLine(lineId); + const auto & idx = line.GetIndex(); + for(unsigned int d = 0; d < TLabelObject::ImageDimension; ++d) + { + *(iter++) = idx[d]; + } + *(iter++) = line.GetLength(); + } + return rle; +} + } } diff --git a/ExpandTemplateGenerator/Components/CustomCasts.cxx b/ExpandTemplateGenerator/Components/CustomCasts.cxx index 15ec3200f..5278dac69 100644 --- a/ExpandTemplateGenerator/Components/CustomCasts.cxx +++ b/ExpandTemplateGenerator/Components/CustomCasts.cxx @@ -3,7 +3,7 @@ // namespace { $(when measurements $(foreach measurements -$(if active and ( custom_cast or label_map ) then +$(if itk_get or ( active and ( custom_cast or label_map ) ) then OUT=[[ template struct ${name}CustomCast @@ -29,7 +29,9 @@ OUT=OUT..[[ ) if custom_cast then OUT=OUT..[[${name}CustomCast::Helper(]] end -if label_map then +if itk_get then + OUT=OUT..[[${itk_get}]] +elseif label_map then OUT=OUT..[[f->GetOutput()->GetLabelObject(label)->Get${name}()]] else OUT=OUT..[[f->Get${name}(${parameters[1].name})]] diff --git a/Testing/Unit/sitkLabelStatisticsTest.cxx b/Testing/Unit/sitkLabelStatisticsTest.cxx index 46f09722d..70fb7b030 100644 --- a/Testing/Unit/sitkLabelStatisticsTest.cxx +++ b/Testing/Unit/sitkLabelStatisticsTest.cxx @@ -205,3 +205,55 @@ TEST(LabelStatistics,Shape_OBB) { EXPECT_VECTOR_DOUBLE_NEAR( verticesExpected, lssFilter.GetOrientedBoundingBoxVertices(100), 1e-4); } + + + + + +TEST(LabelStatistics,Shape_GetIndexes) { + + namespace sitk = itk::simple; + + //By using the same image, the label min/max values should equal the label itself. + itk::simple::Image labelImage = sitk::ReadImage( dataFinder.GetFile ( "Input/2th_cthead1.png" ), sitk::sitkUInt8 ); + + itk::simple::LabelShapeStatisticsImageFilter lssFilter; + + EXPECT_NO_THROW(lssFilter.Execute ( labelImage )); + + EXPECT_EQ(2, lssFilter.GetNumberOfLabels()); + ASSERT_TRUE( lssFilter.HasLabel(100) ); + ASSERT_TRUE( lssFilter.HasLabel(200) ); + EXPECT_EQ( 23061, lssFilter.GetNumberOfPixels(100) ); + EXPECT_EQ( 9085, lssFilter.GetNumberOfPixels(200) ); + + ASSERT_EQ( 2, labelImage.GetDimension() ); + + for (auto l : lssFilter.GetLabels()) + { + std::vector idxs = lssFilter.GetIndexes(l); + + EXPECT_EQ(lssFilter.GetNumberOfPixels(l)*labelImage.GetDimension(), + idxs.size()); + + for (auto iter = idxs.cbegin(); iter != idxs.cend();) + { + std::vector idx{*iter++, *iter++}; + EXPECT_EQ(l, labelImage.GetPixelAsUInt8(idx)); + } + std::vector rle = lssFilter.GetRLEIndexes(l); + + EXPECT_EQ(0, rle.size()%(labelImage.GetDimension()+1)); + + for (auto iter = rle.cbegin(); iter != rle.cend();) + { + std::vector idx{*iter++, *iter++}; + unsigned int length = *iter++; + while (length--) + { + EXPECT_EQ(l, labelImage.GetPixelAsUInt8(idx)); + ++idx[0]; + } + } + } +} From 92f3c863f0b324aa7a30a76f57036ceee3c6c0fa Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 7 Feb 2020 15:53:28 -0500 Subject: [PATCH 353/400] Propagate CMake visibility variables in external projects. --- SuperBuild/SuperBuild.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/SuperBuild/SuperBuild.cmake b/SuperBuild/SuperBuild.cmake index 41995b973..bd4fd8db0 100644 --- a/SuperBuild/SuperBuild.cmake +++ b/SuperBuild/SuperBuild.cmake @@ -265,6 +265,10 @@ list( APPEND ep_common_list CMAKE_JOB_POOL_LINK CMAKE_JOB_POOL_COMPILE + CMAKE_C_VISIBILITY_PRESET + CMAKE_CXX_VISIBILITY_PRESET + CMAKE_VISIBILITY_INLINES_HIDDEN + CMAKE_GENERATOR CMAKE_GENERATOR_INSTANCE CMAKE_GENERATOR_PLATFORM From 9bdad41209b5523d8c2085888d18d448eac19478 Mon Sep 17 00:00:00 2001 From: Dave Chen Date: Mon, 10 Feb 2020 10:20:49 -0500 Subject: [PATCH 354/400] Fixed a couple spelling bugs --- Code/Common/include/sitkPixelIDValues.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Code/Common/include/sitkPixelIDValues.h b/Code/Common/include/sitkPixelIDValues.h index 12e559fed..2af1d81f0 100644 --- a/Code/Common/include/sitkPixelIDValues.h +++ b/Code/Common/include/sitkPixelIDValues.h @@ -83,7 +83,7 @@ struct ImageTypeToPixelIDValue< itk::ImageBase > * ... * break; * default: - * // handle another exceptoinal case + * // handle another exceptional case * } * \endcode */ @@ -130,7 +130,7 @@ const std::string SITKCommon_EXPORT GetPixelIDValueAsString( PixelIDValueEnum ty * val = GetPixelIDValueFromString("sitkInt32") * * If the pixel type has not been instantiated then the sitkUnknown value (-1) will - * be returned. If the pixel type string is not recognised (i.e. is not in the + * be returned. If the pixel type string is not recognized (i.e. is not in the * set of tested names) then the return value is -99. The idea is to provide * a warning (via the R package) if this function needs to be updated to match * changes to PixelIDValueEnum - i.e. if a new pixel type is added. From 27aa0fddfca02bd3e36f6049263016c69283716f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 12 Feb 2020 11:47:44 -0500 Subject: [PATCH 355/400] Remove references to git on itk.org Co-authored-by: Dave Chen --- .github/CONTRIBUTING.md | 2 +- docs/source/building.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index e52b97ffb..d3cd543cc 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -2,7 +2,7 @@ We welcome contributions from the community! -SimpleITK uses the [Git](http://git-scm.com/) distributed version control system. The main repository is hosted on [Github](https://github.com/SimpleITK/SimpleITK.git) and mirrored on [itk.org](https://itk.org/SimpleITK.git) and the [Insight Software Consortium](https://github.com/InsightSoftwareConsortium/SimpleITK). For pull requests and issue tracking Github is also used. +SimpleITK uses the [Git](http://git-scm.com/) distributed version control system. The main repository is hosted on [Github](https://github.com/SimpleITK/SimpleITK.git) and the [Insight Software Consortium](https://github.com/InsightSoftwareConsortium/SimpleITK). For pull requests and issue tracking Github is also used. There are many ways to contribute to SimpleITK: - Report Bugs and Issues diff --git a/docs/source/building.rst b/docs/source/building.rst index 20c903d0f..d0ef2f5e3 100644 --- a/docs/source/building.rst +++ b/docs/source/building.rst @@ -99,7 +99,7 @@ First obtain the SimpleITK source code: .. code-block :: bash - git clone https://itk.org/SimpleITK.git + git clone https://github.com/SimpleITK/SimpleITK.git Building using SuperBuild From b32a78c49e3a62042d5f5b5f32ed86b99b25cfa1 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 12 Feb 2020 13:56:35 -0500 Subject: [PATCH 356/400] Fix spelling in error message --- Code/Common/src/sitkPimpleImageBase.hxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Common/src/sitkPimpleImageBase.hxx b/Code/Common/src/sitkPimpleImageBase.hxx index bef7f5149..302731dda 100644 --- a/Code/Common/src/sitkPimpleImageBase.hxx +++ b/Code/Common/src/sitkPimpleImageBase.hxx @@ -72,7 +72,7 @@ namespace itk { sitkExceptionMacro( << "The image has a LargestPossibleRegion of " << image->GetLargestPossibleRegion() << " while the buffered region is " << image->GetBufferedRegion() << std::endl - << "SimpleITK does not support streamming or unbuffered regions!" ); + << "SimpleITK does not support streaming or unbuffered regions!" ); } const IndexType & idx = image->GetBufferedRegion().GetIndex(); From 53c038f62b5b7bad6a021b78fd2b2699bb518a1f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 12 Feb 2020 13:57:37 -0500 Subject: [PATCH 357/400] Fix pipeline update in per component filters The UpdateLargestPossibleRegion must be called because the output image of the channel extractor is reused. When the requested region is changed ( for example with the newly streaming ResampleImageFilter ), the stream requested region from the down stream filter caused a partial update on the next loop iteration. --- Code/BasicFilters/templates/sitkDualImageFilterTemplate.cxx.in | 2 +- .../Components/ExecuteInternalVectorImages.cxx.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Code/BasicFilters/templates/sitkDualImageFilterTemplate.cxx.in b/Code/BasicFilters/templates/sitkDualImageFilterTemplate.cxx.in index f93bcbf6f..ebd3cd7b5 100644 --- a/Code/BasicFilters/templates/sitkDualImageFilterTemplate.cxx.in +++ b/Code/BasicFilters/templates/sitkDualImageFilterTemplate.cxx.in @@ -260,7 +260,7 @@ OUT=OUT..[[ ); for ( unsigned int i = 0; i < numComps; ++i ) { extractor->SetIndex( i ); - extractor->Update(); + extractor->UpdateLargestPossibleRegion(); ]] if number_of_inputs > 0 then diff --git a/ExpandTemplateGenerator/Components/ExecuteInternalVectorImages.cxx.in b/ExpandTemplateGenerator/Components/ExecuteInternalVectorImages.cxx.in index 635195ff8..2f5b5c891 100644 --- a/ExpandTemplateGenerator/Components/ExecuteInternalVectorImages.cxx.in +++ b/ExpandTemplateGenerator/Components/ExecuteInternalVectorImages.cxx.in @@ -44,7 +44,7 @@ OUT=OUT..[[ for ( unsigned int i = 0; i < numComps; ++i ) { extractor->SetIndex( i ); - extractor->Update(); + extractor->UpdateLargestPossibleRegion(); Image tmp = this->ExecuteInternal( Image( extractor->GetOutput() ) ); From 562d0b40f7efdd961d261becf5ba505be5434770 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 12 Feb 2020 14:26:11 -0500 Subject: [PATCH 358/400] Fix finding correct lua interpreter version The lua which is targeted for wrapping can be different than the version used for code generation. Correctly, save the wrapping version when searching for the code generation versions, which is more version specific. --- CMake/sitkGenerateFilterSource.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/CMake/sitkGenerateFilterSource.cmake b/CMake/sitkGenerateFilterSource.cmake index ea1afb4fd..ec644369c 100644 --- a/CMake/sitkGenerateFilterSource.cmake +++ b/CMake/sitkGenerateFilterSource.cmake @@ -5,6 +5,7 @@ if ( NOT SimpleITK_LUA_EXECUTABLE ) set ( SAVE_LUA_EXECUTABLE ${LUA_EXECUTABLE} ) get_property( SAVE_LUA_EXECUTABLE_TYPE CACHE LUA_EXECUTABLE PROPERTY TYPE ) get_property( SAVE_LUA_EXECUTABLE_DOCSTRING CACHE LUA_EXECUTABLE PROPERTY HELPSTRING ) + unset(LUA_EXECUTABLE CACHE) find_package( LuaInterp 5.3 REQUIRED ) set( SimpleITK_LUA_EXECUTABLE ${LUA_EXECUTABLE} CACHE PATH "Lua executable used for code generation." ) From 8e2ecfabdb5353231f6bfabd295a4db5bfec478f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 12 Feb 2020 14:48:04 -0500 Subject: [PATCH 359/400] Correct variables reported in Lua and VirtualEnv find package The version results of trimming with regular expressions is required. --- CMake/FindLuaInterp.cmake | 2 +- CMake/FindPythonVirtualEnv.cmake | 2 +- Wrapping/Python/LegacyPackaging.cmake | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMake/FindLuaInterp.cmake b/CMake/FindLuaInterp.cmake index 0e544dcdd..5ee8dec81 100644 --- a/CMake/FindLuaInterp.cmake +++ b/CMake/FindLuaInterp.cmake @@ -50,6 +50,6 @@ endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LuaInterp REQUIRED_VARS LUA_EXECUTABLE - VERSION_VAR LUA_VERSION_STRING) + VERSION_VAR LUA_VERSION) mark_as_advanced(LUA_EXECUTABLE) diff --git a/CMake/FindPythonVirtualEnv.cmake b/CMake/FindPythonVirtualEnv.cmake index 03df7946a..234eee1a6 100644 --- a/CMake/FindPythonVirtualEnv.cmake +++ b/CMake/FindPythonVirtualEnv.cmake @@ -48,6 +48,6 @@ endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(PythonVirtualEnv REQUIRED_VARS PYTHON_VIRTUALENV_SCRIPT - VERSION_VAR PYTHON_VIRTUALENV_VERSION_STRING) + VERSION_VAR PYTHON_VIRTUALENV_VERSION) mark_as_advanced(PYTHON_VIRTUALENV_SCRIPT) diff --git a/Wrapping/Python/LegacyPackaging.cmake b/Wrapping/Python/LegacyPackaging.cmake index f1fd78574..900739989 100644 --- a/Wrapping/Python/LegacyPackaging.cmake +++ b/Wrapping/Python/LegacyPackaging.cmake @@ -56,7 +56,7 @@ if (SimpleITK_PYTHON_USE_VIRTUALENV) sitk_enforce_forbid_downloads( SimpleITK_PYTHON_USE_VIRTUALENV ) - if (SimpleITK_PYTHON_WHEEL AND PYTHON_VIRTUALENV_VERSION_STRING VERSION_LESS "13") + if (SimpleITK_PYTHON_WHEEL AND PYTHON_VIRTUALENV_VERSION VERSION_LESS "13") message(SEND_ERROR "In sufficient version of virutalenv for \ building wheels. Require virtualenv>=13.0.") endif() From a93419690414127fa97cf55ca59605995a30e6a5 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 13 Feb 2020 11:43:16 -0500 Subject: [PATCH 360/400] Update ITK superbuild version along ITKv5.1rc01 development This patch include fixes to GDCM enabling it's hiding of it's symbols. Reducing the size of the SimpleITK distributions. And removing conflict from using in an environment which already has GDCM or ITK symbols. --- SuperBuild/External_ITK.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index edd693022..6fe8f62f1 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -53,7 +53,7 @@ mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) # post v5.1rc01 -set(_DEFAULT_ITK_GIT_TAG "bcd762e7bd743341c2dce84852ced49d8292f293") +set(_DEFAULT_ITK_GIT_TAG "ad99ff401d058a624866820180c904e57342ab16") set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From 73caeaa545859cffd68f9aebe1e8b66de5ab812d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 14 Feb 2020 09:35:29 -0500 Subject: [PATCH 361/400] Explicitly cast int to ITK strongly typed enums --- Code/IO/src/sitkImageReaderBase.cxx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Code/IO/src/sitkImageReaderBase.cxx b/Code/IO/src/sitkImageReaderBase.cxx index b8c93a2ac..a5e6d9cd9 100644 --- a/Code/IO/src/sitkImageReaderBase.cxx +++ b/Code/IO/src/sitkImageReaderBase.cxx @@ -214,7 +214,7 @@ ::GetPixelIDFromImageIO( const ImageIOBase *iobase, if (numberOfComponents == 1 && ( pixelType == itk::ImageIOBase::SCALAR || pixelType == itk::ImageIOBase::COMPLEX ) ) { - outPixelType = this->ExecuteInternalReadScalar( componentType ); + outPixelType = this->ExecuteInternalReadScalar( static_cast(componentType) ); return; } // we try to load anything else into a VectorImage @@ -226,12 +226,12 @@ ::GetPixelIDFromImageIO( const ImageIOBase *iobase, pixelType == itk::ImageIOBase::POINT || pixelType == itk::ImageIOBase::OFFSET ) { - outPixelType = this->ExecuteInternalReadVector( componentType ); + outPixelType = this->ExecuteInternalReadVector( static_cast(componentType) ); return; } else if ( pixelType == itk::ImageIOBase::COMPLEX ) { - outPixelType = this->ExecuteInternalReadComplex( componentType ); + outPixelType = this->ExecuteInternalReadComplex( static_cast(componentType) ); return; } else @@ -268,7 +268,7 @@ ::ExecuteInternalReadScalar( int componentType ) { const unsigned int UnusedDimension = 2; - switch(componentType) + switch(static_cast(componentType)) { case itk::ImageIOBase::CHAR: return ImageTypeToPixelIDValue< itk::Image >::Result; @@ -326,7 +326,7 @@ ::ExecuteInternalReadComplex( int componentType ) { const unsigned int UnusedDimension = 2; - switch(componentType) + switch(static_cast(componentType)) { case itk::ImageIOBase::FLOAT: return ImageTypeToPixelIDValue< itk::Image, UnusedDimension> >::Result; @@ -346,7 +346,7 @@ ::ExecuteInternalReadVector( int componentType ) { const unsigned int UnusedDimension = 2; - switch(componentType) + switch(static_cast(componentType)) { case itk::ImageIOBase::CHAR: return ImageTypeToPixelIDValue< itk::VectorImage >::Result; From 413fae9c86b4e8348cb4835337e07683e04dba6d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 14 Feb 2020 10:32:51 -0500 Subject: [PATCH 362/400] Use python 3 executable The JSONBeautify script required python 3. Specifying python3 eases the use of the correct python version in a multi-versions system environment. --- Utilities/JSON/JSONBeautify.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utilities/JSON/JSONBeautify.py b/Utilities/JSON/JSONBeautify.py index 352c0b690..5ab7792ef 100755 --- a/Utilities/JSON/JSONBeautify.py +++ b/Utilities/JSON/JSONBeautify.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import json import sys try: From 91054ef8f26844f8c2adfe3d8b89f8695ce22fbd Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 14 Feb 2020 14:28:23 -0500 Subject: [PATCH 363/400] Remove auto_ptr wrapper with std::unique_ptr --- CMake/sitkCheckCXX11.cmake | 1 - CMake/sitk_check_cxx11.cxx | 15 ------- .../sitkBSplineTransformInitializerFilter.h | 2 +- .../include/sitkCastImageFilter.h | 2 +- .../sitkCenteredTransformInitializerFilter.h | 2 +- ...CenteredVersorTransformInitializerFilter.h | 2 +- .../include/sitkHashImageFilter.h | 2 +- ...kLandmarkBasedTransformInitializerFilter.h | 2 +- .../json/ConvolutionImageFilter.json | 2 +- .../json/FFTConvolutionImageFilter.json | 2 +- Code/BasicFilters/json/FFTPadImageFilter.json | 2 +- .../json/InverseDeconvolutionImageFilter.json | 2 +- .../LandweberDeconvolutionImageFilter.json | 2 +- ...ctedLandweberDeconvolutionImageFilter.json | 2 +- ...ichardsonLucyDeconvolutionImageFilter.json | 2 +- .../TikhonovDeconvolutionImageFilter.json | 2 +- .../json/WienerDeconvolutionImageFilter.json | 2 +- .../src/sitkBoundaryConditions.hxx | 6 +-- Code/BasicFilters/src/sitkImageToKernel.hxx | 4 +- .../sitkBinaryFunctorFilterTemplate.h.in | 4 +- .../sitkDualImageFilterTemplate.h.in | 2 +- Code/Common/include/nsstd/auto_ptr.h | 41 ----------------- Code/Common/include/sitkImage.h | 1 - Code/Common/src/sitkConfigure.h.in | 1 - Code/Common/src/sitkImage.cxx | 4 +- Code/Common/src/sitkTransform.cxx | 2 +- Code/IO/include/sitkImageFileReader.h | 4 +- Code/IO/include/sitkImageFileWriter.h | 2 +- Code/IO/include/sitkImageSeriesReader.h | 2 +- Code/IO/include/sitkImageSeriesWriter.h | 2 +- Code/IO/include/sitkImportImageFilter.h | 2 +- .../include/sitkImageRegistrationMethod.h | 4 +- .../Components/MemberFunctionDispatch.h.in | 2 +- Testing/Unit/sitkCommonTests.cxx | 44 +++++++++---------- Testing/Unit/sitkImage4DTests.cxx | 2 +- Testing/Unit/sitkImageTests.cxx | 2 +- Testing/Unit/sitkTransformTests.cxx | 28 ++++++------ 37 files changed, 73 insertions(+), 132 deletions(-) delete mode 100644 Code/Common/include/nsstd/auto_ptr.h diff --git a/CMake/sitkCheckCXX11.cmake b/CMake/sitkCheckCXX11.cmake index bccb12666..50f82d063 100644 --- a/CMake/sitkCheckCXX11.cmake +++ b/CMake/sitkCheckCXX11.cmake @@ -69,5 +69,4 @@ sitkCXX11Test(SITK_HAS_CXX11_FUNCTIONAL) sitkCXX11Test(SITK_HAS_CXX11_TYPE_TRAITS) sitkCXX11Test(SITK_HAS_CXX11_UNORDERED_MAP) sitkCXX11Test(SITK_HAS_CXX11_NULLPTR) -sitkCXX11Test(SITK_HAS_CXX11_UNIQUE_PTR) sitkCXX11Test(SITK_HAS_CXX11_ALIAS_TEMPLATE) diff --git a/CMake/sitk_check_cxx11.cxx b/CMake/sitk_check_cxx11.cxx index 950e416cc..0165c469f 100644 --- a/CMake/sitk_check_cxx11.cxx +++ b/CMake/sitk_check_cxx11.cxx @@ -65,21 +65,6 @@ return 0; #endif -//------------------------------------- - -#ifdef SITK_HAS_CXX11_UNIQUE_PTR - -#include - -int main(void) { - std::unique_ptr p1(new int); - return 0; -} - -#endif - - - //------------------------------------- #ifdef SITK_HAS_TR1_FUNCTIONAL diff --git a/Code/BasicFilters/include/sitkBSplineTransformInitializerFilter.h b/Code/BasicFilters/include/sitkBSplineTransformInitializerFilter.h index e7690a485..58d9e7552 100644 --- a/Code/BasicFilters/include/sitkBSplineTransformInitializerFilter.h +++ b/Code/BasicFilters/include/sitkBSplineTransformInitializerFilter.h @@ -103,7 +103,7 @@ SetTransformDomainMeshSize()before calling InitializeTransform(). friend struct detail::MemberFunctionAddressor; - nsstd::auto_ptr > m_MemberFactory; + std::unique_ptr > m_MemberFactory; std::vector m_TransformDomainMeshSize; diff --git a/Code/BasicFilters/include/sitkCastImageFilter.h b/Code/BasicFilters/include/sitkCastImageFilter.h index 61399a59d..7d37e2012 100644 --- a/Code/BasicFilters/include/sitkCastImageFilter.h +++ b/Code/BasicFilters/include/sitkCastImageFilter.h @@ -170,7 +170,7 @@ class SITKBasicFilters_EXPORT CastImageFilter /** @} */ typedef Image (Self::*MemberFunctionType)( const Image& ); - nsstd::auto_ptr > m_DualMemberFactory; + std::unique_ptr > m_DualMemberFactory; }; diff --git a/Code/BasicFilters/include/sitkCenteredTransformInitializerFilter.h b/Code/BasicFilters/include/sitkCenteredTransformInitializerFilter.h index 6e5c653b8..0f21465d2 100644 --- a/Code/BasicFilters/include/sitkCenteredTransformInitializerFilter.h +++ b/Code/BasicFilters/include/sitkCenteredTransformInitializerFilter.h @@ -118,7 +118,7 @@ assumption will probably not hold in multi-modality registration. friend struct detail::MemberFunctionAddressor; - nsstd::auto_ptr > m_MemberFactory; + std::unique_ptr > m_MemberFactory; OperationModeType m_OperationMode; diff --git a/Code/BasicFilters/include/sitkCenteredVersorTransformInitializerFilter.h b/Code/BasicFilters/include/sitkCenteredVersorTransformInitializerFilter.h index a29b1d2b5..e88e497d0 100644 --- a/Code/BasicFilters/include/sitkCenteredVersorTransformInitializerFilter.h +++ b/Code/BasicFilters/include/sitkCenteredVersorTransformInitializerFilter.h @@ -98,7 +98,7 @@ Versorrepresenting rotation. friend struct detail::MemberFunctionAddressor; - nsstd::auto_ptr > m_MemberFactory; + std::unique_ptr > m_MemberFactory; bool m_ComputeRotation; diff --git a/Code/BasicFilters/include/sitkHashImageFilter.h b/Code/BasicFilters/include/sitkHashImageFilter.h index 6496cfd2c..c72c49f02 100644 --- a/Code/BasicFilters/include/sitkHashImageFilter.h +++ b/Code/BasicFilters/include/sitkHashImageFilter.h @@ -73,7 +73,7 @@ namespace itk { friend struct detail::MemberFunctionAddressor; friend struct detail::ExecuteInternalLabelImageAddressor; - nsstd::auto_ptr > m_MemberFactory; + std::unique_ptr > m_MemberFactory; }; SITKBasicFilters_EXPORT std::string Hash ( const Image& image, HashImageFilter::HashFunction function = HashImageFilter::SHA1 ); diff --git a/Code/BasicFilters/include/sitkLandmarkBasedTransformInitializerFilter.h b/Code/BasicFilters/include/sitkLandmarkBasedTransformInitializerFilter.h index da9a43a56..ff61c9d5a 100644 --- a/Code/BasicFilters/include/sitkLandmarkBasedTransformInitializerFilter.h +++ b/Code/BasicFilters/include/sitkLandmarkBasedTransformInitializerFilter.h @@ -166,7 +166,7 @@ in ITK" by Kim E.Y., Johnson H., Williams N. available at http://midasjournal.co friend struct detail::MemberFunctionAddressor; - nsstd::auto_ptr > m_MemberFactory; + std::unique_ptr > m_MemberFactory; /* */ diff --git a/Code/BasicFilters/json/ConvolutionImageFilter.json b/Code/BasicFilters/json/ConvolutionImageFilter.json index acc6e0001..4730e68d3 100644 --- a/Code/BasicFilters/json/ConvolutionImageFilter.json +++ b/Code/BasicFilters/json/ConvolutionImageFilter.json @@ -39,7 +39,7 @@ "PERIODIC_PAD" ], "default" : "itk::simple::ConvolutionImageFilter::ZERO_FLUX_NEUMANN_PAD", - "custom_itk_cast" : "nsstd::auto_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" + "custom_itk_cast" : "std::unique_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" }, { "name" : "OutputRegionMode", diff --git a/Code/BasicFilters/json/FFTConvolutionImageFilter.json b/Code/BasicFilters/json/FFTConvolutionImageFilter.json index 129323470..f183c2516 100644 --- a/Code/BasicFilters/json/FFTConvolutionImageFilter.json +++ b/Code/BasicFilters/json/FFTConvolutionImageFilter.json @@ -39,7 +39,7 @@ "PERIODIC_PAD" ], "default" : "itk::simple::FFTConvolutionImageFilter::ZERO_FLUX_NEUMANN_PAD", - "custom_itk_cast" : "nsstd::auto_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" + "custom_itk_cast" : "std::unique_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" }, { "name" : "OutputRegionMode", diff --git a/Code/BasicFilters/json/FFTPadImageFilter.json b/Code/BasicFilters/json/FFTPadImageFilter.json index 4a1627364..b7c125219 100644 --- a/Code/BasicFilters/json/FFTPadImageFilter.json +++ b/Code/BasicFilters/json/FFTPadImageFilter.json @@ -16,7 +16,7 @@ "PERIODIC_PAD" ], "default" : "itk::simple::FFTPadImageFilter::ZERO_FLUX_NEUMANN_PAD", - "custom_itk_cast" : "nsstd::auto_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" + "custom_itk_cast" : "std::unique_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" }, { "name" : "SizeGreatestPrimeFactor", diff --git a/Code/BasicFilters/json/InverseDeconvolutionImageFilter.json b/Code/BasicFilters/json/InverseDeconvolutionImageFilter.json index af6799c22..20aa56bd2 100644 --- a/Code/BasicFilters/json/InverseDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/InverseDeconvolutionImageFilter.json @@ -37,7 +37,7 @@ "PERIODIC_PAD" ], "default" : "itk::simple::InverseDeconvolutionImageFilter::ZERO_FLUX_NEUMANN_PAD", - "custom_itk_cast" : "nsstd::auto_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" + "custom_itk_cast" : "std::unique_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" }, { "name" : "OutputRegionMode", diff --git a/Code/BasicFilters/json/LandweberDeconvolutionImageFilter.json b/Code/BasicFilters/json/LandweberDeconvolutionImageFilter.json index 047f6eeb0..bfa5acc5f 100644 --- a/Code/BasicFilters/json/LandweberDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/LandweberDeconvolutionImageFilter.json @@ -46,7 +46,7 @@ "PERIODIC_PAD" ], "default" : "itk::simple::LandweberDeconvolutionImageFilter::ZERO_FLUX_NEUMANN_PAD", - "custom_itk_cast" : "nsstd::auto_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" + "custom_itk_cast" : "std::unique_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" }, { "name" : "OutputRegionMode", diff --git a/Code/BasicFilters/json/ProjectedLandweberDeconvolutionImageFilter.json b/Code/BasicFilters/json/ProjectedLandweberDeconvolutionImageFilter.json index 34decf892..64cb01bbd 100644 --- a/Code/BasicFilters/json/ProjectedLandweberDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/ProjectedLandweberDeconvolutionImageFilter.json @@ -46,7 +46,7 @@ "PERIODIC_PAD" ], "default" : "itk::simple::ProjectedLandweberDeconvolutionImageFilter::ZERO_FLUX_NEUMANN_PAD", - "custom_itk_cast" : "nsstd::auto_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" + "custom_itk_cast" : "std::unique_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" }, { "name" : "OutputRegionMode", diff --git a/Code/BasicFilters/json/RichardsonLucyDeconvolutionImageFilter.json b/Code/BasicFilters/json/RichardsonLucyDeconvolutionImageFilter.json index 1ef5bacd5..01b9f0dcd 100644 --- a/Code/BasicFilters/json/RichardsonLucyDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/RichardsonLucyDeconvolutionImageFilter.json @@ -37,7 +37,7 @@ "PERIODIC_PAD" ], "default" : "itk::simple::RichardsonLucyDeconvolutionImageFilter::ZERO_FLUX_NEUMANN_PAD", - "custom_itk_cast" : "nsstd::auto_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" + "custom_itk_cast" : "std::unique_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" }, { "name" : "OutputRegionMode", diff --git a/Code/BasicFilters/json/TikhonovDeconvolutionImageFilter.json b/Code/BasicFilters/json/TikhonovDeconvolutionImageFilter.json index d63e9c988..fe3e8272e 100644 --- a/Code/BasicFilters/json/TikhonovDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/TikhonovDeconvolutionImageFilter.json @@ -37,7 +37,7 @@ "PERIODIC_PAD" ], "default" : "itk::simple::TikhonovDeconvolutionImageFilter::ZERO_FLUX_NEUMANN_PAD", - "custom_itk_cast" : "nsstd::auto_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" + "custom_itk_cast" : "std::unique_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" }, { "name" : "OutputRegionMode", diff --git a/Code/BasicFilters/json/WienerDeconvolutionImageFilter.json b/Code/BasicFilters/json/WienerDeconvolutionImageFilter.json index 804488f0d..2f3065f54 100644 --- a/Code/BasicFilters/json/WienerDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/WienerDeconvolutionImageFilter.json @@ -37,7 +37,7 @@ "PERIODIC_PAD" ], "default" : "itk::simple::WienerDeconvolutionImageFilter::ZERO_FLUX_NEUMANN_PAD", - "custom_itk_cast" : "nsstd::auto_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" + "custom_itk_cast" : "std::unique_ptr< ImageBoundaryCondition< InputImageType > > bc( CreateNewBoundaryConditionInstance< Self, FilterType >( m_BoundaryCondition ) ); filter->SetBoundaryCondition( bc.get() );\n" }, { "name" : "OutputRegionMode", diff --git a/Code/BasicFilters/src/sitkBoundaryConditions.hxx b/Code/BasicFilters/src/sitkBoundaryConditions.hxx index ea4e69523..9c12c1daa 100644 --- a/Code/BasicFilters/src/sitkBoundaryConditions.hxx +++ b/Code/BasicFilters/src/sitkBoundaryConditions.hxx @@ -27,15 +27,15 @@ namespace itk { namespace simple { /** Creates a boundary condition object from an enum. Uses an - * auto_ptr for dynamically allocated object, to enforce the user to + * unique_ptr for dynamically allocated object, to enforce the user to * take ownership of the object. * */ template< class TFilter, class TInternalFilter > - nsstd::auto_ptr > + std::unique_ptr > CreateNewBoundaryConditionInstance(typename TFilter::BoundaryConditionType bc) { - typedef nsstd::auto_ptr > PointerType; + typedef std::unique_ptr > PointerType; switch ( bc ) { diff --git a/Code/BasicFilters/src/sitkImageToKernel.hxx b/Code/BasicFilters/src/sitkImageToKernel.hxx index 51b9a5e68..e89744bb8 100644 --- a/Code/BasicFilters/src/sitkImageToKernel.hxx +++ b/Code/BasicFilters/src/sitkImageToKernel.hxx @@ -34,12 +34,12 @@ namespace simple { * */ template -nsstd::auto_ptr< ImageKernelOperator< typename TImageType::PixelType, TImageType::ImageDimension > > +std::unique_ptr< ImageKernelOperator< typename TImageType::PixelType, TImageType::ImageDimension > > CreateOperatorFromImage( const TImageType * image ) { typedef typename TImageType::PixelType KernelImagePixelType; typedef ImageKernelOperator< KernelImagePixelType, TImageType::ImageDimension > KernelType; -typedef nsstd::auto_ptr KernelPointerType; +typedef std::unique_ptr KernelPointerType; typedef typename KernelType::SizeType KernelSizeType; diff --git a/Code/BasicFilters/templates/sitkBinaryFunctorFilterTemplate.h.in b/Code/BasicFilters/templates/sitkBinaryFunctorFilterTemplate.h.in index 8237d2062..f8dc94c10 100644 --- a/Code/BasicFilters/templates/sitkBinaryFunctorFilterTemplate.h.in +++ b/Code/BasicFilters/templates/sitkBinaryFunctorFilterTemplate.h.in @@ -50,12 +50,12 @@ $(include MemberFunctionDispatch.h.in) typedef Image (Self::*MemberFunction1Type)( ${constant_type} constant, const Image& image2 ); template Image ExecuteInternal ( ${constant_type} constant, const Image& image2 ); friend struct detail::MemberFunctionAddressor; - nsstd::auto_ptr > m_MemberFactory1; + std::unique_ptr > m_MemberFactory1; typedef Image (Self::*MemberFunction2Type)( const Image& image1, ${constant_type} constant ); template Image ExecuteInternal ( const Image& image1, ${constant_type} constant ); friend struct detail::MemberFunctionAddressor; - nsstd::auto_ptr > m_MemberFactory2; + std::unique_ptr > m_MemberFactory2; $(include PrivateMemberDeclarations.h.in)$(include ClassEnd.h.in) diff --git a/Code/BasicFilters/templates/sitkDualImageFilterTemplate.h.in b/Code/BasicFilters/templates/sitkDualImageFilterTemplate.h.in index 55add4a02..3614e90b7 100644 --- a/Code/BasicFilters/templates/sitkDualImageFilterTemplate.h.in +++ b/Code/BasicFilters/templates/sitkDualImageFilterTemplate.h.in @@ -50,7 +50,7 @@ OUT=[[ OUT=OUT..[[ DualExecuteInternalVector ( $(include ImageParameters.in)$(include InputParametersInternal.in) );]] end) - nsstd::auto_ptr > m_DualMemberFactory; + std::unique_ptr > m_DualMemberFactory; $(include PrivateMemberDeclarations.h.in)$(include ClassEnd.h.in) diff --git a/Code/Common/include/nsstd/auto_ptr.h b/Code/Common/include/nsstd/auto_ptr.h deleted file mode 100644 index 25bec3cd2..000000000 --- a/Code/Common/include/nsstd/auto_ptr.h +++ /dev/null @@ -1,41 +0,0 @@ -/*========================================================================= -* -* Copyright Insight Software Consortium -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0.txt -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -*=========================================================================*/ -#ifndef sitk_nsstd_auto_ptr_h -#define sitk_nsstd_auto_ptr_h - -#include "sitkConfigure.h" - -#include - -namespace itk -{ -namespace simple -{ -namespace nsstd -{ -#if defined SITK_HAS_CXX11_UNIQUE_PTR && defined SITK_HAS_CXX11_ALIAS_TEMPLATE -template -using auto_ptr = std::unique_ptr; -#else -using std::auto_ptr; -#endif -} -} -} - -#endif // sitk_nsstd_auto_ptr_h diff --git a/Code/Common/include/sitkImage.h b/Code/Common/include/sitkImage.h index a1ab88aa6..73ea5383e 100644 --- a/Code/Common/include/sitkImage.h +++ b/Code/Common/include/sitkImage.h @@ -25,7 +25,6 @@ #include "sitkEnableIf.h" #include "nsstd/type_traits.h" -#include "nsstd/auto_ptr.h" #include #include diff --git a/Code/Common/src/sitkConfigure.h.in b/Code/Common/src/sitkConfigure.h.in index 40da38603..09a4c0a13 100644 --- a/Code/Common/src/sitkConfigure.h.in +++ b/Code/Common/src/sitkConfigure.h.in @@ -35,7 +35,6 @@ #cmakedefine SITK_HAS_CXX11_FUNCTIONAL #cmakedefine SITK_HAS_CXX11_TYPE_TRAITS #cmakedefine SITK_HAS_CXX11_UNORDERED_MAP -#cmakedefine SITK_HAS_CXX11_UNIQUE_PTR #cmakedefine SITK_HAS_CXX11_ALIAS_TEMPLATE // defined if compiler supports using template keyword to disambiguate diff --git a/Code/Common/src/sitkImage.cxx b/Code/Common/src/sitkImage.cxx index 2dcfea1db..6172d25a6 100644 --- a/Code/Common/src/sitkImage.cxx +++ b/Code/Common/src/sitkImage.cxx @@ -51,7 +51,7 @@ namespace itk { // note: If img and this are this same, the following statement // will still be safe. It is also exception safe. - nsstd::auto_ptr temp( img.m_PimpleImage->ShallowCopy() ); + std::unique_ptr temp( img.m_PimpleImage->ShallowCopy() ); delete this->m_PimpleImage; this->m_PimpleImage = temp.release(); return *this; @@ -727,7 +727,7 @@ namespace itk if ( this->m_PimpleImage->GetReferenceCountOfImage() > 1 ) { // note: care is take here to be exception safe with memory allocation - nsstd::auto_ptr temp( this->m_PimpleImage->DeepCopy() ); + std::unique_ptr temp( this->m_PimpleImage->DeepCopy() ); delete this->m_PimpleImage; this->m_PimpleImage = temp.release(); } diff --git a/Code/Common/src/sitkTransform.cxx b/Code/Common/src/sitkTransform.cxx index a535c2beb..c57935751 100644 --- a/Code/Common/src/sitkTransform.cxx +++ b/Code/Common/src/sitkTransform.cxx @@ -598,7 +598,7 @@ std::vector< double > Transform::TransformVector( const std::vector< double > &v bool Transform::SetInverse() { assert( m_PimpleTransform ); - nsstd::auto_ptr temp; + std::unique_ptr temp; { // See if a new pimple transform can be created PimpleTransformBase *p = SITK_NULLPTR; diff --git a/Code/IO/include/sitkImageFileReader.h b/Code/IO/include/sitkImageFileReader.h index 3dddc6256..43b477400 100644 --- a/Code/IO/include/sitkImageFileReader.h +++ b/Code/IO/include/sitkImageFileReader.h @@ -201,7 +201,7 @@ namespace itk { // friend to get access to executeInternal member friend struct detail::MemberFunctionAddressor; - nsstd::auto_ptr > m_MemberFactory; + std::unique_ptr > m_MemberFactory; nsstd::function()> m_pfGetMetaDataKeys; @@ -210,7 +210,7 @@ namespace itk { std::string m_FileName; - nsstd::auto_ptr m_MetaDataDictionary; + std::unique_ptr m_MetaDataDictionary; PixelIDValueEnum m_PixelType; unsigned int m_Dimension; diff --git a/Code/IO/include/sitkImageFileWriter.h b/Code/IO/include/sitkImageFileWriter.h index 501738275..f7c022ca5 100644 --- a/Code/IO/include/sitkImageFileWriter.h +++ b/Code/IO/include/sitkImageFileWriter.h @@ -161,7 +161,7 @@ class SmartPointer; // friend to get access to executeInternal member friend struct detail::MemberFunctionAddressor; - nsstd::auto_ptr > m_MemberFactory; + std::unique_ptr > m_MemberFactory; }; diff --git a/Code/IO/include/sitkImageSeriesReader.h b/Code/IO/include/sitkImageSeriesReader.h index c570fc0ea..2f13198fc 100644 --- a/Code/IO/include/sitkImageSeriesReader.h +++ b/Code/IO/include/sitkImageSeriesReader.h @@ -157,7 +157,7 @@ namespace itk { // friend to get access to executeInternal member friend struct detail::MemberFunctionAddressor; - nsstd::auto_ptr > m_MemberFactory; + std::unique_ptr > m_MemberFactory; nsstd::function(int)> m_pfGetMetaDataKeys; diff --git a/Code/IO/include/sitkImageSeriesWriter.h b/Code/IO/include/sitkImageSeriesWriter.h index 9ab2263db..1e0acd162 100644 --- a/Code/IO/include/sitkImageSeriesWriter.h +++ b/Code/IO/include/sitkImageSeriesWriter.h @@ -141,7 +141,7 @@ class ImageIOBase; // friend to get access to executeInternal member friend struct detail::MemberFunctionAddressor; - nsstd::auto_ptr > m_MemberFactory; + std::unique_ptr > m_MemberFactory; bool m_UseCompression; int m_CompressionLevel; diff --git a/Code/IO/include/sitkImportImageFilter.h b/Code/IO/include/sitkImportImageFilter.h index 95b3081d9..ed4380633 100644 --- a/Code/IO/include/sitkImportImageFilter.h +++ b/Code/IO/include/sitkImportImageFilter.h @@ -106,7 +106,7 @@ namespace itk { // friend to get access to executeInternal member friend struct detail::MemberFunctionAddressor; - nsstd::auto_ptr > m_MemberFactory; + std::unique_ptr > m_MemberFactory; unsigned int m_NumberOfComponentsPerPixel; PixelIDValueType m_PixelIDValue; diff --git a/Code/Registration/include/sitkImageRegistrationMethod.h b/Code/Registration/include/sitkImageRegistrationMethod.h index 6c81cfc5e..04d5f8714 100644 --- a/Code/Registration/include/sitkImageRegistrationMethod.h +++ b/Code/Registration/include/sitkImageRegistrationMethod.h @@ -698,8 +698,8 @@ namespace simple typedef Transform (ImageRegistrationMethod::*MemberFunctionType)( const Image &fixed, const Image &moving ); typedef double (ImageRegistrationMethod::*EvaluateMemberFunctionType)( const Image &fixed, const Image &moving ); friend struct detail::MemberFunctionAddressor; - nsstd::auto_ptr > m_MemberFactory; - nsstd::auto_ptr > m_EvaluateMemberFactory; + std::unique_ptr > m_MemberFactory; + std::unique_ptr > m_EvaluateMemberFactory; InterpolatorEnum m_Interpolator; Transform m_InitialTransform; diff --git a/ExpandTemplateGenerator/Components/MemberFunctionDispatch.h.in b/ExpandTemplateGenerator/Components/MemberFunctionDispatch.h.in index 2f303b5d0..af15f59b0 100644 --- a/ExpandTemplateGenerator/Components/MemberFunctionDispatch.h.in +++ b/ExpandTemplateGenerator/Components/MemberFunctionDispatch.h.in @@ -2,4 +2,4 @@ $(if vector_pixel_types_by_component then OUT=[[ friend struct detail::ExecuteInternalVectorImageAddressor;]] end) - nsstd::auto_ptr > m_MemberFactory; + std::unique_ptr > m_MemberFactory; diff --git a/Testing/Unit/sitkCommonTests.cxx b/Testing/Unit/sitkCommonTests.cxx index 2987dc98c..6c765a1ec 100644 --- a/Testing/Unit/sitkCommonTests.cxx +++ b/Testing/Unit/sitkCommonTests.cxx @@ -128,8 +128,8 @@ TEST( ProcessObject, Command_Register ) { // Case 1a: single command, command deleted first { - nsstd::auto_ptr po1(new sitk::CastImageFilter()); - nsstd::auto_ptr cmd(new sitk::Command()); + std::unique_ptr po1(new sitk::CastImageFilter()); + std::unique_ptr cmd(new sitk::Command()); po1->AddCommand(sitk::sitkAnyEvent, *cmd); EXPECT_TRUE(po1->HasCommand(sitk::sitkAnyEvent)); @@ -139,19 +139,19 @@ TEST( ProcessObject, Command_Register ) { // Case 1b: single command, process deleted first { - nsstd::auto_ptr po1( new sitk::CastImageFilter()); - nsstd::auto_ptr cmd(new sitk::Command()); + std::unique_ptr po1( new sitk::CastImageFilter()); + std::unique_ptr cmd(new sitk::Command()); po1->AddCommand(sitk::sitkAnyEvent, *cmd); po1.reset(); } // Case 2a: single command, multiple processes, command deleted first { - nsstd::auto_ptr po1(new sitk::CastImageFilter()); - nsstd::auto_ptr po2(new sitk::CastImageFilter()); - nsstd::auto_ptr po3(new sitk::CastImageFilter()); + std::unique_ptr po1(new sitk::CastImageFilter()); + std::unique_ptr po2(new sitk::CastImageFilter()); + std::unique_ptr po3(new sitk::CastImageFilter()); - nsstd::auto_ptr cmd(new sitk::Command()); + std::unique_ptr cmd(new sitk::Command()); po1->AddCommand(sitk::sitkAnyEvent, *cmd); po2->AddCommand(sitk::sitkStartEvent, *cmd); po3->AddCommand(sitk::sitkEndEvent, *cmd); @@ -160,11 +160,11 @@ TEST( ProcessObject, Command_Register ) { // Case 2b: single command, multiple processes, processes mostly deleted first { - nsstd::auto_ptr po1(new sitk::CastImageFilter()); - nsstd::auto_ptr po2(new sitk::CastImageFilter()); - nsstd::auto_ptr po3(new sitk::CastImageFilter()); + std::unique_ptr po1(new sitk::CastImageFilter()); + std::unique_ptr po2(new sitk::CastImageFilter()); + std::unique_ptr po3(new sitk::CastImageFilter()); - nsstd::auto_ptr cmd(new sitk::Command()); + std::unique_ptr cmd(new sitk::Command()); po1->AddCommand(sitk::sitkAnyEvent, *cmd); po2->AddCommand(sitk::sitkStartEvent, *cmd); po3->AddCommand(sitk::sitkEndEvent, *cmd); @@ -184,10 +184,10 @@ TEST( ProcessObject, Command_Register ) { // Case 3a: multiple commands, command deleted mostly first { - nsstd::auto_ptr po1(new sitk::CastImageFilter()); - nsstd::auto_ptr cmd1(new sitk::Command()); - nsstd::auto_ptr cmd2(new sitk::Command()); - nsstd::auto_ptr cmd3(new sitk::Command()); + std::unique_ptr po1(new sitk::CastImageFilter()); + std::unique_ptr cmd1(new sitk::Command()); + std::unique_ptr cmd2(new sitk::Command()); + std::unique_ptr cmd3(new sitk::Command()); po1->AddCommand(sitk::sitkAnyEvent, *cmd1); po1->AddCommand(sitk::sitkStartEvent, *cmd2); @@ -210,10 +210,10 @@ TEST( ProcessObject, Command_Register ) { // Case 3b: multiple commands, process object deleted first { - nsstd::auto_ptr po1(new sitk::CastImageFilter()); - nsstd::auto_ptr cmd1(new sitk::Command()); - nsstd::auto_ptr cmd2(new sitk::Command()); - nsstd::auto_ptr cmd3(new sitk::Command()); + std::unique_ptr po1(new sitk::CastImageFilter()); + std::unique_ptr cmd1(new sitk::Command()); + std::unique_ptr cmd2(new sitk::Command()); + std::unique_ptr cmd3(new sitk::Command()); po1->AddCommand(sitk::sitkAnyEvent, *cmd1); po1->AddCommand(sitk::sitkStartEvent, *cmd2); po1->AddCommand(sitk::sitkEndEvent, *cmd3); @@ -506,8 +506,8 @@ TEST( ProcessObject, Command_Ownership ) { // case 2 // cmd registered to multiple PO { - nsstd::auto_ptr po1(new sitk::CastImageFilter()); - nsstd::auto_ptr po2(new sitk::CastImageFilter()); + std::unique_ptr po1(new sitk::CastImageFilter()); + std::unique_ptr po2(new sitk::CastImageFilter()); HeapCommand *cmd = new HeapCommand(); cmd->OwnedByProcessObjectsOn(); diff --git a/Testing/Unit/sitkImage4DTests.cxx b/Testing/Unit/sitkImage4DTests.cxx index 246a70be3..02d0b0ff6 100644 --- a/Testing/Unit/sitkImage4DTests.cxx +++ b/Testing/Unit/sitkImage4DTests.cxx @@ -52,7 +52,7 @@ using itk::simple::InstantiatedPixelIDTypeList; class Image4D : public ::testing::Test { public: - typedef nsstd::auto_ptr sitkAutoImagePointer; + typedef std::unique_ptr sitkAutoImagePointer; virtual void SetUp() { itk::ImageBase<4>::IndexType index; diff --git a/Testing/Unit/sitkImageTests.cxx b/Testing/Unit/sitkImageTests.cxx index 82a4f4306..f76215f48 100644 --- a/Testing/Unit/sitkImageTests.cxx +++ b/Testing/Unit/sitkImageTests.cxx @@ -49,7 +49,7 @@ namespace nsstd = itk::simple::nsstd; class Image : public ::testing::Test { public: - typedef nsstd::auto_ptr sitkAutoImagePointer; + typedef std::unique_ptr sitkAutoImagePointer; virtual void SetUp() { itk::ImageBase<3>::IndexType index; diff --git a/Testing/Unit/sitkTransformTests.cxx b/Testing/Unit/sitkTransformTests.cxx index e92af5545..2a1f5b63a 100644 --- a/Testing/Unit/sitkTransformTests.cxx +++ b/Testing/Unit/sitkTransformTests.cxx @@ -610,7 +610,7 @@ TEST(TransformTest,AffineTransform) const std::vector scale2d = v2(1,2); const std::vector scale3d = v3(1,1.2,1.3); - nsstd::auto_ptr tx; + std::unique_ptr tx; // 2d EXPECT_NO_THROW( tx.reset( new sitk::AffineTransform(2) ) ); @@ -763,7 +763,7 @@ TEST(TransformTest,BSplineTransform) { // test BSplineTransform - nsstd::auto_ptr tx(new sitk::BSplineTransform(2)); + std::unique_ptr tx(new sitk::BSplineTransform(2)); std::cout << tx->ToString() << std::endl; EXPECT_EQ( tx->GetParameters().size(), 32u ); EXPECT_EQ( tx->GetNumberOfParameters(), 32u ); @@ -890,7 +890,7 @@ TEST(TransformTest,BSplineTransform_order) EXPECT_THROW(sitk::BSplineTransform(3,4), sitk::GenericException); EXPECT_THROW(sitk::BSplineTransform(3,99), sitk::GenericException); - nsstd::auto_ptr tx; + std::unique_ptr tx; EXPECT_NO_THROW(tx.reset(new sitk::BSplineTransform(3))); EXPECT_EQ(3u, tx->GetOrder()); EXPECT_NO_THROW( tx.reset(new sitk::BSplineTransform(3,0))); @@ -987,7 +987,7 @@ TEST(TransformTest,DisplacementFieldTransform) const std::vector size(2,10u); const std::vector idx(2,1u); - nsstd::auto_ptr tx(new sitk::DisplacementFieldTransform(2)); + std::unique_ptr tx(new sitk::DisplacementFieldTransform(2)); std::cout << tx->ToString() << std::endl; EXPECT_EQ( tx->GetParameters().size(), 0u ); EXPECT_EQ( tx->GetNumberOfParameters(), 0u ); @@ -1155,7 +1155,7 @@ TEST(TransformTest,Euler2DTransform) const std::vector zeros(2,0.0); const std::vector trans(2, 2.2); - nsstd::auto_ptr tx(new sitk::Euler2DTransform()); + std::unique_ptr tx(new sitk::Euler2DTransform()); std::cout << tx->ToString() << std::endl; EXPECT_EQ( tx->GetParameters().size(), 3u ); EXPECT_EQ( tx->GetFixedParameters().size(), 2u ); @@ -1291,7 +1291,7 @@ TEST(TransformTest,Euler3DTransform) const unsigned int numberOfFixedParameters = numberOfFixedParameters; #endif - nsstd::auto_ptr tx(new sitk::Euler3DTransform()); + std::unique_ptr tx(new sitk::Euler3DTransform()); std::cout << tx->ToString() << std::endl; EXPECT_EQ( tx->GetParameters().size(), 6u ); EXPECT_EQ( tx->GetFixedParameters().size(), numberOfFixedParameters ); @@ -1430,7 +1430,7 @@ TEST(TransformTest,Similarity2DTransform) const std::vector zeros(2,0.0); const std::vector trans(2, 2.2); - nsstd::auto_ptr tx(new sitk::Similarity2DTransform()); + std::unique_ptr tx(new sitk::Similarity2DTransform()); std::cout << tx->ToString() << std::endl; EXPECT_EQ( tx->GetParameters().size(), 4u ); EXPECT_EQ( tx->GetFixedParameters().size(), 2u ); @@ -1548,7 +1548,7 @@ TEST(TransformTest,ScaleTransform) const std::vector zeros(3,0.0); - nsstd::auto_ptr tx(new sitk::ScaleTransform(2)); + std::unique_ptr tx(new sitk::ScaleTransform(2)); std::cout << tx->ToString() << std::endl; ASSERT_EQ( tx->GetParameters().size(), 2u ); ASSERT_EQ( tx->GetFixedParameters().size(), 2u ); @@ -1649,7 +1649,7 @@ TEST(TransformTest,ScaleSkewVersor3DTransform) const std::vector trans(3, 2.2); const std::vector skew(6,2.7); - nsstd::auto_ptr tx(new sitk::ScaleSkewVersor3DTransform()); + std::unique_ptr tx(new sitk::ScaleSkewVersor3DTransform()); std::cout << tx->ToString() << std::endl; EXPECT_EQ( tx->GetParameters().size(), 15u ); EXPECT_EQ( tx->GetFixedParameters().size(), 3u ); @@ -1777,7 +1777,7 @@ TEST(TransformTest,ScaleVersor3DTransform) const std::vector zeros(3,0.0); const std::vector trans(3, 2.2); - nsstd::auto_ptr tx(new sitk::ScaleVersor3DTransform()); + std::unique_ptr tx(new sitk::ScaleVersor3DTransform()); EXPECT_EQ( tx->GetParameters().size(), 9u ); EXPECT_EQ( tx->GetFixedParameters().size(), 3u ); EXPECT_EQ( tx->GetTranslation(), v3(0.0,0.0,0.0) ); @@ -1946,7 +1946,7 @@ TEST(TransformTest,Similarity3DTransform) const std::vector zeros(3,0.0); const std::vector trans(3, 2.2); - nsstd::auto_ptr tx(new sitk::Similarity3DTransform()); + std::unique_ptr tx(new sitk::Similarity3DTransform()); std::cout << tx->ToString() << std::endl; EXPECT_EQ( tx->GetParameters().size(), 7u ); EXPECT_EQ( tx->GetFixedParameters().size(), 3u ); @@ -2097,7 +2097,7 @@ TEST(TransformTest,TranslationTransform) const std::vector trans2d(2, 2.2); const std::vector trans3d(3, 3.3); - nsstd::auto_ptr tx; + std::unique_ptr tx; EXPECT_NO_THROW( tx.reset( new sitk::TranslationTransform(2) ) ); std::cout << tx->ToString() << std::endl; @@ -2161,7 +2161,7 @@ TEST(TransformTest,VersorRigid3DTransform) const std::vector zeros(3,0.0); const std::vector trans(3, 2.2); - nsstd::auto_ptr tx(new sitk::VersorRigid3DTransform()); + std::unique_ptr tx(new sitk::VersorRigid3DTransform()); std::cout << tx->ToString() << std::endl; EXPECT_EQ( tx->GetParameters().size(), 6u ); EXPECT_EQ( tx->GetFixedParameters().size(), 3u ); @@ -2319,7 +2319,7 @@ TEST(TransformTest,VersorTransform) const std::vector zeros(3,0.0); const std::vector trans(3, 2.2); - nsstd::auto_ptr tx(new sitk::VersorTransform()); + std::unique_ptr tx(new sitk::VersorTransform()); std::cout << tx->ToString() << std::endl; EXPECT_EQ( tx->GetParameters().size(), 3u ); EXPECT_EQ( tx->GetFixedParameters().size(), 3u ); From 9de55ce37216e5dbcb4ca5095876a70d48aa98c8 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 14 Feb 2020 15:31:55 -0500 Subject: [PATCH 364/400] Update ITK along the 5.1 RC development This updated include further changes in ITK to use strong enum types and changes to the typenames of the enum types. The LEGACY_REMOVE flag is disable so that legacy enum types can still be used. --- SuperBuild/External_ITK.cmake | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index 6fe8f62f1..ec47144be 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -53,7 +53,7 @@ mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) # post v5.1rc01 -set(_DEFAULT_ITK_GIT_TAG "ad99ff401d058a624866820180c904e57342ab16") +set(_DEFAULT_ITK_GIT_TAG "9d0f5f7398287c24d5c926a214582d53b81f4596") set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") @@ -76,10 +76,8 @@ endif() if( ITK_GIT_TAG STREQUAL _DEFAULT_ITK_GIT_TAG ) - # only remove legacy with the tested, and predefined version of ITK - list( APPEND ep_itk_args - "-DITK_LEGACY_REMOVE:BOOL=ON" - ) + # Unable to use ITK_LEGACY_REMOVE due to change in the enum types. + # list( APPEND ep_itk_args "-DITK_LEGACY_REMOVE:BOOL=ON" ) endif() file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${proj}-build/CMakeCacheInit.txt" "${ep_itk_cache}\n${ep_common_cache}" ) From fde5c9e86e88a3bb60a0cd44de731b7e70cfa3ec Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 14 Feb 2020 15:56:31 -0500 Subject: [PATCH 365/400] Replace nsstd fuctional with C++ functional --- CMake/sitkCheckCXX11.cmake | 1 - CMake/sitk_check_cxx11.cxx | 18 ---- Code/Common/include/nsstd/functional.h | 52 --------- Code/Common/include/sitkAffineTransform.h | 24 ++--- Code/Common/include/sitkBSplineTransform.h | 26 ++--- .../include/sitkDisplacementFieldTransform.h | 18 ++-- Code/Common/include/sitkEuler2DTransform.h | 16 +-- Code/Common/include/sitkEuler3DTransform.h | 24 ++--- Code/Common/include/sitkFunctionCommand.h | 6 +- .../include/sitkMemberFunctionFactoryBase.h | 39 ++++--- .../include/sitkScaleSkewVersor3DTransform.h | 26 ++--- Code/Common/include/sitkScaleTransform.h | 10 +- .../include/sitkScaleVersor3DTransform.h | 22 ++-- .../include/sitkSimilarity2DTransform.h | 20 ++-- .../include/sitkSimilarity3DTransform.h | 24 ++--- .../Common/include/sitkTranslationTransform.h | 4 +- .../include/sitkVersorRigid3DTransform.h | 20 ++-- Code/Common/include/sitkVersorTransform.h | 14 +-- Code/Common/src/sitkAffineTransform.cxx | 12 +-- Code/Common/src/sitkBSplineTransform.cxx | 8 +- Code/Common/src/sitkConfigure.h.in | 1 - .../src/sitkDisplacementFieldTransform.cxx | 28 ++--- Code/Common/src/sitkEuler2DTransform.cxx | 4 +- Code/Common/src/sitkEuler3DTransform.cxx | 12 +-- Code/Common/src/sitkFunctionCommand.cxx | 2 +- Code/Common/src/sitkProcessObject.cxx | 3 +- .../src/sitkScaleSkewVersor3DTransform.cxx | 10 +- .../Common/src/sitkScaleVersor3DTransform.cxx | 8 +- Code/Common/src/sitkSimilarity2DTransform.cxx | 8 +- Code/Common/src/sitkSimilarity3DTransform.cxx | 12 +-- Code/Common/src/sitkTransformHelper.hxx | 8 +- .../Common/src/sitkVersorRigid3DTransform.cxx | 8 +- Code/Common/src/sitkVersorTransform.cxx | 6 +- Code/IO/include/sitkImageFileReader.h | 6 +- Code/IO/include/sitkImageSeriesReader.h | 6 +- Code/IO/src/sitkImageFileReader.cxx | 6 +- Code/IO/src/sitkImageSeriesReader.cxx | 6 +- .../include/sitkImageRegistrationMethod.h | 20 ++-- .../src/sitkImageRegistrationMethod.cxx | 4 +- ...tkImageRegistrationMethod_CreateMetric.hxx | 12 +-- ...mageRegistrationMethod_CreateOptimizer.cxx | 102 +++++++++--------- .../ExecuteInternalUpdateAndReturn.cxx.in | 4 +- .../Components/PrivateMemberDeclarations.h.in | 2 +- 43 files changed, 294 insertions(+), 368 deletions(-) delete mode 100644 Code/Common/include/nsstd/functional.h diff --git a/CMake/sitkCheckCXX11.cmake b/CMake/sitkCheckCXX11.cmake index bccb12666..f2fd538cc 100644 --- a/CMake/sitkCheckCXX11.cmake +++ b/CMake/sitkCheckCXX11.cmake @@ -65,7 +65,6 @@ cmake_push_check_state(RESET) # Check for CXX11 Features # sitkCXX11Test(SITK_HAS_CXX11_STATIC_ASSERT) -sitkCXX11Test(SITK_HAS_CXX11_FUNCTIONAL) sitkCXX11Test(SITK_HAS_CXX11_TYPE_TRAITS) sitkCXX11Test(SITK_HAS_CXX11_UNORDERED_MAP) sitkCXX11Test(SITK_HAS_CXX11_NULLPTR) diff --git a/CMake/sitk_check_cxx11.cxx b/CMake/sitk_check_cxx11.cxx index 950e416cc..1b4c43d5d 100644 --- a/CMake/sitk_check_cxx11.cxx +++ b/CMake/sitk_check_cxx11.cxx @@ -34,24 +34,6 @@ int main(void) //------------------------------------- -#ifdef SITK_HAS_CXX11_FUNCTIONAL - -#include - -void f(int,int) {} - -int main(void) -{ -std::function g(f); -using namespace std::placeholders; -std::function h = std::bind(g,0,_1); -return 0; -} - -#endif - -//------------------------------------- - #ifdef SITK_HAS_CXX11_ALIAS_TEMPLATE template diff --git a/Code/Common/include/nsstd/functional.h b/Code/Common/include/nsstd/functional.h deleted file mode 100644 index 08887e180..000000000 --- a/Code/Common/include/nsstd/functional.h +++ /dev/null @@ -1,52 +0,0 @@ -/*========================================================================= -* -* Copyright Insight Software Consortium -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0.txt -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -*=========================================================================*/ -#ifndef sitk_nsstd_functional_h -#define sitk_nsstd_functional_h - -#include "sitkConfigure.h" - -#if !defined SITK_HAS_TR1_FUNCTIONAL && !defined SITK_HAS_CXX11_FUNCTIONAL -#error "No system (tr1/c++11) functional header available!" -#endif - -#if defined SITK_HAS_CXX11_FUNCTIONAL || !defined SITK_HAS_TR1_SUB_INCLUDE -#include -#else -#include -#endif - -namespace itk -{ -namespace simple -{ -namespace nsstd -{ -#if defined SITK_HAS_TR1_FUNCTIONAL && !defined SITK_HAS_CXX11_FUNCTIONAL -using std::tr1::function; -using std::tr1::bind; -namespace placeholders = std::tr1::placeholders; -#else -using std::function; -using std::bind; -namespace placeholders = std::placeholders; -#endif -} -} -} - -#endif // sitk_nsstd_functional_h diff --git a/Code/Common/include/sitkAffineTransform.h b/Code/Common/include/sitkAffineTransform.h index 64eea85ee..b1e0e34c7 100644 --- a/Code/Common/include/sitkAffineTransform.h +++ b/Code/Common/include/sitkAffineTransform.h @@ -107,18 +107,18 @@ class SITKCommon_EXPORT AffineTransform void InternalInitialization(TransformType *transform); - nsstd::function&)> m_pfSetCenter; - nsstd::function()> m_pfGetCenter; - nsstd::function&)> m_pfSetMatrix; - nsstd::function()> m_pfGetMatrix; - nsstd::function&)> m_pfSetTranslation; - nsstd::function()> m_pfGetTranslation; - - nsstd::function &, bool)> m_pfScale1; - nsstd::function m_pfScale2; - nsstd::function m_pfShear; - nsstd::function &, bool)> m_pfTranslate; - nsstd::function m_pfRotate; + std::function&)> m_pfSetCenter; + std::function()> m_pfGetCenter; + std::function&)> m_pfSetMatrix; + std::function()> m_pfGetMatrix; + std::function&)> m_pfSetTranslation; + std::function()> m_pfGetTranslation; + + std::function &, bool)> m_pfScale1; + std::function m_pfScale2; + std::function m_pfShear; + std::function &, bool)> m_pfTranslate; + std::function m_pfRotate; }; diff --git a/Code/Common/include/sitkBSplineTransform.h b/Code/Common/include/sitkBSplineTransform.h index a90d45b25..74bddd6b3 100644 --- a/Code/Common/include/sitkBSplineTransform.h +++ b/Code/Common/include/sitkBSplineTransform.h @@ -121,19 +121,19 @@ class SITKCommon_EXPORT BSplineTransform template static PimpleTransformBase *CreateBSplinePimpleTransform(unsigned int order); - nsstd::function ()> m_pfGetTransformDomainDirection; - nsstd::function &)> m_pfSetTransformDomainDirection; - nsstd::function ()> m_pfGetTransformDomainMeshSize; - nsstd::function&)> m_pfSetTransformDomainMeshSize; - nsstd::function ()> m_pfGetTransformDomainOrigin; - nsstd::function&)> m_pfSetTransformDomainOrigin; - nsstd::function ()> m_pfGetTransformDomainPhysicalDimensions; - nsstd::function &)> m_pfSetTransformDomainPhysicalDimensions; - - nsstd::function ()> m_pfGetCoefficientImages; - nsstd::function< unsigned int()> m_pfGetOrder; - - nsstd::function &)> m_pfSetCoefficientImages; + std::function ()> m_pfGetTransformDomainDirection; + std::function &)> m_pfSetTransformDomainDirection; + std::function ()> m_pfGetTransformDomainMeshSize; + std::function&)> m_pfSetTransformDomainMeshSize; + std::function ()> m_pfGetTransformDomainOrigin; + std::function&)> m_pfSetTransformDomainOrigin; + std::function ()> m_pfGetTransformDomainPhysicalDimensions; + std::function &)> m_pfSetTransformDomainPhysicalDimensions; + + std::function ()> m_pfGetCoefficientImages; + std::function< unsigned int()> m_pfGetOrder; + + std::function &)> m_pfSetCoefficientImages; }; diff --git a/Code/Common/include/sitkDisplacementFieldTransform.h b/Code/Common/include/sitkDisplacementFieldTransform.h index 35374bb1e..822d76f40 100644 --- a/Code/Common/include/sitkDisplacementFieldTransform.h +++ b/Code/Common/include/sitkDisplacementFieldTransform.h @@ -155,18 +155,18 @@ class SITKCommon_EXPORT DisplacementFieldTransform static PimpleTransformBase *CreateDisplacementFieldPimpleTransform(unsigned int dimension); - nsstd::function m_pfSetDisplacementField; - nsstd::function m_pfGetDisplacementField; + std::function m_pfSetDisplacementField; + std::function m_pfGetDisplacementField; - nsstd::function m_pfSetInverseDisplacementField; - nsstd::function m_pfGetInverseDisplacementField; + std::function m_pfSetInverseDisplacementField; + std::function m_pfGetInverseDisplacementField; - nsstd::function m_pfSetInterpolator; - nsstd::function m_pfGetInterpolator; + std::function m_pfSetInterpolator; + std::function m_pfGetInterpolator; - nsstd::function m_pfSetSmoothingOff; - nsstd::function m_pfSetSmoothingGaussianOnUpdate; - nsstd::function &,const std::vector&, bool, unsigned int)> m_pfSetSmoothingBSplineOnUpdate; + std::function m_pfSetSmoothingOff; + std::function m_pfSetSmoothingGaussianOnUpdate; + std::function &,const std::vector&, bool, unsigned int)> m_pfSetSmoothingBSplineOnUpdate; }; diff --git a/Code/Common/include/sitkEuler2DTransform.h b/Code/Common/include/sitkEuler2DTransform.h index c7b45a265..a160ca95e 100644 --- a/Code/Common/include/sitkEuler2DTransform.h +++ b/Code/Common/include/sitkEuler2DTransform.h @@ -85,14 +85,14 @@ class SITKCommon_EXPORT Euler2DTransform template void InternalInitialization(TransformType *transform); - nsstd::function&)> m_pfSetCenter; - nsstd::function()> m_pfGetCenter; - nsstd::function m_pfSetAngle; - nsstd::function m_pfGetAngle; - nsstd::function&)> m_pfSetTranslation; - nsstd::function()> m_pfGetTranslation; - nsstd::function()> m_pfGetMatrix; - nsstd::function&, double)> m_pfSetMatrix; + std::function&)> m_pfSetCenter; + std::function()> m_pfGetCenter; + std::function m_pfSetAngle; + std::function m_pfGetAngle; + std::function&)> m_pfSetTranslation; + std::function()> m_pfGetTranslation; + std::function()> m_pfGetMatrix; + std::function&, double)> m_pfSetMatrix; }; diff --git a/Code/Common/include/sitkEuler3DTransform.h b/Code/Common/include/sitkEuler3DTransform.h index e3c1513f6..3aea9e789 100644 --- a/Code/Common/include/sitkEuler3DTransform.h +++ b/Code/Common/include/sitkEuler3DTransform.h @@ -97,18 +97,18 @@ template void InternalInitialization(TransformType *transform); -nsstd::function&)> m_pfSetCenter; -nsstd::function()> m_pfGetCenter; -nsstd::function m_pfSetRotation; -nsstd::function m_pfGetAngleX; -nsstd::function m_pfGetAngleY; -nsstd::function m_pfGetAngleZ; -nsstd::function&)> m_pfSetTranslation; -nsstd::function()> m_pfGetTranslation; -nsstd::function m_pfSetComputeZYX; -nsstd::function m_pfGetComputeZYX; -nsstd::function()> m_pfGetMatrix; -nsstd::function&, double)> m_pfSetMatrix; +std::function&)> m_pfSetCenter; +std::function()> m_pfGetCenter; +std::function m_pfSetRotation; +std::function m_pfGetAngleX; +std::function m_pfGetAngleY; +std::function m_pfGetAngleZ; +std::function&)> m_pfSetTranslation; +std::function()> m_pfGetTranslation; +std::function m_pfSetComputeZYX; +std::function m_pfGetComputeZYX; +std::function()> m_pfGetMatrix; +std::function&, double)> m_pfSetMatrix; }; diff --git a/Code/Common/include/sitkFunctionCommand.h b/Code/Common/include/sitkFunctionCommand.h index c8e8c04df..448494a0d 100644 --- a/Code/Common/include/sitkFunctionCommand.h +++ b/Code/Common/include/sitkFunctionCommand.h @@ -21,7 +21,7 @@ #include "sitkCommand.h" -#include "nsstd/functional.h" +#include namespace itk { namespace simple { @@ -50,7 +50,7 @@ class SITKCommon_EXPORT FunctionCommand: template void SetCallbackFunction ( T *object, void(T::* pMemberFunction )() ) { - m_Function = nsstd::bind(pMemberFunction, object); + m_Function = std::bind(pMemberFunction, object); } /** Set a C-Style function to be called in the Execute method */ @@ -65,7 +65,7 @@ class SITKCommon_EXPORT FunctionCommand: private: - typedef nsstd::function FunctionObjectType; + typedef std::function FunctionObjectType; FunctionObjectType m_Function; }; diff --git a/Code/Common/include/sitkMemberFunctionFactoryBase.h b/Code/Common/include/sitkMemberFunctionFactoryBase.h index 1c932290e..5ed66cf91 100644 --- a/Code/Common/include/sitkMemberFunctionFactoryBase.h +++ b/Code/Common/include/sitkMemberFunctionFactoryBase.h @@ -19,9 +19,6 @@ #define sitkMemberFunctionFactoryBase_h #include "sitkConfigure.h" - -#include "nsstd/functional.h" - #include "sitkPixelIDTypes.h" #include "sitkPixelIDTypeLists.h" #include "sitkMacro.h" @@ -30,6 +27,8 @@ #include "Ancillary/TypeList.h" #include "Ancillary/FunctionTraits.h" +#include + #if defined SITK_HAS_UNORDERED_MAP #include "nsstd/unordered_map.h" #else @@ -96,7 +95,7 @@ class MemberFunctionFactoryBase : /** the pointer MemberFunctionType redefined ad a tr1::function * object */ - typedef nsstd::function< MemberFunctionResultType ( ) > FunctionObjectType; + typedef std::function< MemberFunctionResultType ( ) > FunctionObjectType; protected: @@ -113,7 +112,7 @@ class MemberFunctionFactoryBase : // this is really only needed because std::bind1st does not work // with tr1::function... that is with tr1::bind, we need to // specify the other arguments, and can't just bind the first - return nsstd::bind( pfunc,objectPointer ); + return std::bind( pfunc,objectPointer ); } // maps of Keys to pointers to member functions @@ -160,7 +159,7 @@ class MemberFunctionFactoryBase : /** the pointer MemberFunctionType redefined ad a tr1::function * object */ - typedef nsstd::function< MemberFunctionResultType ( MemberFunctionArgumentType ) > FunctionObjectType; + typedef std::function< MemberFunctionResultType ( MemberFunctionArgumentType ) > FunctionObjectType; protected: @@ -174,12 +173,12 @@ class MemberFunctionFactoryBase : static FunctionObjectType BindObject( MemberFunctionType pfunc, ObjectType *objectPointer) { // needed for _1 place holder - using namespace nsstd::placeholders; + using namespace std::placeholders; // this is really only needed because std::bind1st does not work // with tr1::function... that is with tr1::bind, we need to // specify the other arguments, and can't just bind the first - return nsstd::bind( pfunc,objectPointer, _1 ); + return std::bind( pfunc,objectPointer, _1 ); } @@ -224,7 +223,7 @@ class MemberFunctionFactoryBase : /** the pointer MemberFunctionType redefined ad a tr1::function * object */ - typedef nsstd::function< MemberFunctionResultType ( MemberFunctionArgument0Type, MemberFunctionArgument1Type) > FunctionObjectType; + typedef std::function< MemberFunctionResultType ( MemberFunctionArgument0Type, MemberFunctionArgument1Type) > FunctionObjectType; protected: @@ -238,12 +237,12 @@ class MemberFunctionFactoryBase : static FunctionObjectType BindObject( MemberFunctionType pfunc, ObjectType *objectPointer) { // needed for _1 place holder - using namespace nsstd::placeholders; + using namespace std::placeholders; // this is really only needed because std::bind1st does not work // with tr1::function... that is with tr1::bind, we need to // specify the other arguments, and can't just bind the first - return nsstd::bind( pfunc, objectPointer, _1, _2 ); + return std::bind( pfunc, objectPointer, _1, _2 ); } @@ -288,7 +287,7 @@ class MemberFunctionFactoryBase : /** the pointer MemberFunctionType redefined ad a tr1::function * object */ - typedef nsstd::function< MemberFunctionResultType ( MemberFunctionArgument0Type, MemberFunctionArgument1Type, MemberFunctionArgument2Type) > FunctionObjectType; + typedef std::function< MemberFunctionResultType ( MemberFunctionArgument0Type, MemberFunctionArgument1Type, MemberFunctionArgument2Type) > FunctionObjectType; protected: @@ -302,12 +301,12 @@ class MemberFunctionFactoryBase : static FunctionObjectType BindObject( MemberFunctionType pfunc, ObjectType *objectPointer) { // needed for _1 place holder - using namespace nsstd::placeholders; + using namespace std::placeholders; // this is really only needed because std::bind1st does not work // with tr1::function... that is with tr1::bind, we need to // specify the other arguments, and can't just bind the first - return nsstd::bind( pfunc, objectPointer, _1, _2, _3 ); + return std::bind( pfunc, objectPointer, _1, _2, _3 ); } @@ -352,7 +351,7 @@ class MemberFunctionFactoryBase : /** the pointer MemberFunctionType redefined ad a tr1::function * object */ - typedef nsstd::function< MemberFunctionResultType ( MemberFunctionArgument0Type, MemberFunctionArgument1Type, MemberFunctionArgument2Type, MemberFunctionArgument3Type) > FunctionObjectType; + typedef std::function< MemberFunctionResultType ( MemberFunctionArgument0Type, MemberFunctionArgument1Type, MemberFunctionArgument2Type, MemberFunctionArgument3Type) > FunctionObjectType; protected: @@ -366,12 +365,12 @@ class MemberFunctionFactoryBase : static FunctionObjectType BindObject( MemberFunctionType pfunc, ObjectType *objectPointer) { // needed for _1 place holder - using namespace nsstd::placeholders; + using namespace std::placeholders; // this is really only needed because std::bind1st does not work // with tr1::function... that is with tr1::bind, we need to // specify the other arguments, and can't just bind the first - return nsstd::bind( pfunc, objectPointer, _1, _2, _3, _4 ); + return std::bind( pfunc, objectPointer, _1, _2, _3, _4 ); } @@ -416,7 +415,7 @@ class MemberFunctionFactoryBase : /** the pointer MemberFunctionType redefined ad a tr1::function * object */ - typedef nsstd::function< MemberFunctionResultType ( + typedef std::function< MemberFunctionResultType ( MemberFunctionArgument0Type, MemberFunctionArgument1Type, MemberFunctionArgument2Type, @@ -436,12 +435,12 @@ class MemberFunctionFactoryBase : static FunctionObjectType BindObject( MemberFunctionType pfunc, ObjectType *objectPointer) { // needed for _1 place holder - using namespace nsstd::placeholders; + using namespace std::placeholders; // this is really only needed because std::bind1st does not work // with tr1::function... that is with tr1::bind, we need to // specify the other arguments, and can't just bind the first - return nsstd::bind( pfunc, objectPointer, _1, _2, _3, _4, _5 ); + return std::bind( pfunc, objectPointer, _1, _2, _3, _4, _5 ); } diff --git a/Code/Common/include/sitkScaleSkewVersor3DTransform.h b/Code/Common/include/sitkScaleSkewVersor3DTransform.h index 017effe22..30531f736 100644 --- a/Code/Common/include/sitkScaleSkewVersor3DTransform.h +++ b/Code/Common/include/sitkScaleSkewVersor3DTransform.h @@ -103,19 +103,19 @@ class SITKCommon_EXPORT ScaleSkewVersor3DTransform void InternalInitialization(TransformType *transform); - nsstd::function&)> m_pfSetCenter; - nsstd::function()> m_pfGetCenter; - nsstd::function&)> m_pfSetRotation1; - nsstd::function&,double)> m_pfSetRotation2; - nsstd::function()> m_pfGetVersor; - nsstd::function&)> m_pfSetTranslation; - nsstd::function()> m_pfGetTranslation; - nsstd::function&)> m_pfSetScale; - nsstd::function()> m_pfGetScale; - nsstd::function&)> m_pfSetSkew; - nsstd::function()> m_pfGetSkew; - nsstd::function &)> m_pfTranslate; - nsstd::function()> m_pfGetMatrix; + std::function&)> m_pfSetCenter; + std::function()> m_pfGetCenter; + std::function&)> m_pfSetRotation1; + std::function&,double)> m_pfSetRotation2; + std::function()> m_pfGetVersor; + std::function&)> m_pfSetTranslation; + std::function()> m_pfGetTranslation; + std::function&)> m_pfSetScale; + std::function()> m_pfGetScale; + std::function&)> m_pfSetSkew; + std::function()> m_pfGetSkew; + std::function &)> m_pfTranslate; + std::function()> m_pfGetMatrix; }; } diff --git a/Code/Common/include/sitkScaleTransform.h b/Code/Common/include/sitkScaleTransform.h index 24cc01b11..f3f7f8d3b 100644 --- a/Code/Common/include/sitkScaleTransform.h +++ b/Code/Common/include/sitkScaleTransform.h @@ -93,11 +93,11 @@ class SITKCommon_EXPORT ScaleTransform void InternalInitialization(TransformType *transform); - nsstd::function)> m_pfSetCenter; - nsstd::function()> m_pfGetCenter; - nsstd::function)> m_pfSetScale; - nsstd::function()> m_pfGetScale; - nsstd::function()> m_pfGetMatrix; + std::function)> m_pfSetCenter; + std::function()> m_pfGetCenter; + std::function)> m_pfSetScale; + std::function()> m_pfGetScale; + std::function()> m_pfGetMatrix; }; diff --git a/Code/Common/include/sitkScaleVersor3DTransform.h b/Code/Common/include/sitkScaleVersor3DTransform.h index 90e319ad3..716a06be0 100644 --- a/Code/Common/include/sitkScaleVersor3DTransform.h +++ b/Code/Common/include/sitkScaleVersor3DTransform.h @@ -99,17 +99,17 @@ class SITKCommon_EXPORT ScaleVersor3DTransform void InternalInitialization(TransformType *transform); - nsstd::function&)> m_pfSetCenter; - nsstd::function()> m_pfGetCenter; - nsstd::function&)> m_pfSetRotation1; - nsstd::function&,double)> m_pfSetRotation2; - nsstd::function()> m_pfGetVersor; - nsstd::function&)> m_pfSetTranslation; - nsstd::function()> m_pfGetTranslation; - nsstd::function&)> m_pfSetScale; - nsstd::function()> m_pfGetScale; - nsstd::function &)> m_pfTranslate; - nsstd::function()> m_pfGetMatrix; + std::function&)> m_pfSetCenter; + std::function()> m_pfGetCenter; + std::function&)> m_pfSetRotation1; + std::function&,double)> m_pfSetRotation2; + std::function()> m_pfGetVersor; + std::function&)> m_pfSetTranslation; + std::function()> m_pfGetTranslation; + std::function&)> m_pfSetScale; + std::function()> m_pfGetScale; + std::function &)> m_pfTranslate; + std::function()> m_pfGetMatrix; }; } diff --git a/Code/Common/include/sitkSimilarity2DTransform.h b/Code/Common/include/sitkSimilarity2DTransform.h index f8fd546ef..26fd13077 100644 --- a/Code/Common/include/sitkSimilarity2DTransform.h +++ b/Code/Common/include/sitkSimilarity2DTransform.h @@ -89,16 +89,16 @@ class SITKCommon_EXPORT Similarity2DTransform template void InternalInitialization(TransformType *transform); - nsstd::function&)> m_pfSetCenter; - nsstd::function()> m_pfGetCenter; - nsstd::function m_pfSetAngle; - nsstd::function m_pfGetAngle; - nsstd::function&)> m_pfSetTranslation; - nsstd::function()> m_pfGetTranslation; - nsstd::function m_pfSetScale; - nsstd::function m_pfGetScale; - nsstd::function()> m_pfGetMatrix; - nsstd::function&, double)> m_pfSetMatrix; + std::function&)> m_pfSetCenter; + std::function()> m_pfGetCenter; + std::function m_pfSetAngle; + std::function m_pfGetAngle; + std::function&)> m_pfSetTranslation; + std::function()> m_pfGetTranslation; + std::function m_pfSetScale; + std::function m_pfGetScale; + std::function()> m_pfGetMatrix; + std::function&, double)> m_pfSetMatrix; }; } diff --git a/Code/Common/include/sitkSimilarity3DTransform.h b/Code/Common/include/sitkSimilarity3DTransform.h index c47d5f65b..c3b04caac 100644 --- a/Code/Common/include/sitkSimilarity3DTransform.h +++ b/Code/Common/include/sitkSimilarity3DTransform.h @@ -96,18 +96,18 @@ void InternalInitialization(itk::TransformBase *transform); template void InternalInitialization(TransformType *transform); -nsstd::function&)> m_pfSetCenter; -nsstd::function()> m_pfGetCenter; -nsstd::function&)> m_pfSetRotation1; -nsstd::function,double&)> m_pfSetRotation2; -nsstd::function()> m_pfGetVersor; -nsstd::function m_pfSetScale; -nsstd::function m_pfGetScale; -nsstd::function&)> m_pfSetTranslation; -nsstd::function()> m_pfGetTranslation; -nsstd::function &)> m_pfTranslate; -nsstd::function()> m_pfGetMatrix; -nsstd::function&, double)> m_pfSetMatrix; +std::function&)> m_pfSetCenter; +std::function()> m_pfGetCenter; +std::function&)> m_pfSetRotation1; +std::function,double&)> m_pfSetRotation2; +std::function()> m_pfGetVersor; +std::function m_pfSetScale; +std::function m_pfGetScale; +std::function&)> m_pfSetTranslation; +std::function()> m_pfGetTranslation; +std::function &)> m_pfTranslate; +std::function()> m_pfGetMatrix; +std::function&, double)> m_pfSetMatrix; }; } diff --git a/Code/Common/include/sitkTranslationTransform.h b/Code/Common/include/sitkTranslationTransform.h index 2ff08e84a..55e52088f 100644 --- a/Code/Common/include/sitkTranslationTransform.h +++ b/Code/Common/include/sitkTranslationTransform.h @@ -81,8 +81,8 @@ void InternalInitialization(itk::TransformBase *transform); template void InternalInitialization(TransformType *transform); -nsstd::function &)> m_pfSetOffset; -nsstd::function()> m_pfGetOffset; +std::function &)> m_pfSetOffset; +std::function()> m_pfGetOffset; }; diff --git a/Code/Common/include/sitkVersorRigid3DTransform.h b/Code/Common/include/sitkVersorRigid3DTransform.h index abb7465a9..1daea2dde 100644 --- a/Code/Common/include/sitkVersorRigid3DTransform.h +++ b/Code/Common/include/sitkVersorRigid3DTransform.h @@ -91,16 +91,16 @@ class SITKCommon_EXPORT VersorRigid3DTransform void InternalInitialization(TransformType *transform); - nsstd::function&)> m_pfSetCenter; - nsstd::function()> m_pfGetCenter; - nsstd::function&)> m_pfSetRotation1; - nsstd::function&,double)> m_pfSetRotation2; - nsstd::function()> m_pfGetVersor; - nsstd::function&)> m_pfSetTranslation; - nsstd::function()> m_pfGetTranslation; - nsstd::function &)> m_pfTranslate; - nsstd::function()> m_pfGetMatrix; - nsstd::function&, double)> m_pfSetMatrix; + std::function&)> m_pfSetCenter; + std::function()> m_pfGetCenter; + std::function&)> m_pfSetRotation1; + std::function&,double)> m_pfSetRotation2; + std::function()> m_pfGetVersor; + std::function&)> m_pfSetTranslation; + std::function()> m_pfGetTranslation; + std::function &)> m_pfTranslate; + std::function()> m_pfGetMatrix; + std::function&, double)> m_pfSetMatrix; }; } diff --git a/Code/Common/include/sitkVersorTransform.h b/Code/Common/include/sitkVersorTransform.h index 36f576613..4e6b97b1a 100644 --- a/Code/Common/include/sitkVersorTransform.h +++ b/Code/Common/include/sitkVersorTransform.h @@ -87,13 +87,13 @@ class SITKCommon_EXPORT VersorTransform void InternalInitialization(TransformType *transform); - nsstd::function&)> m_pfSetCenter; - nsstd::function()> m_pfGetCenter; - nsstd::function&)> m_pfSetRotation1; - nsstd::function&,double)> m_pfSetRotation2; - nsstd::function()> m_pfGetVersor; - nsstd::function()> m_pfGetMatrix; - nsstd::function&, double)> m_pfSetMatrix; + std::function&)> m_pfSetCenter; + std::function()> m_pfGetCenter; + std::function&)> m_pfSetRotation1; + std::function&,double)> m_pfSetRotation2; + std::function()> m_pfGetVersor; + std::function()> m_pfGetMatrix; + std::function&, double)> m_pfSetMatrix; }; } } diff --git a/Code/Common/src/sitkAffineTransform.cxx b/Code/Common/src/sitkAffineTransform.cxx index 33afcfcd4..5a2d25eb6 100644 --- a/Code/Common/src/sitkAffineTransform.cxx +++ b/Code/Common/src/sitkAffineTransform.cxx @@ -187,19 +187,19 @@ void AffineTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF(Translation, typename TransformType::OutputVectorType, double); typename TransformType::MatrixType (*pfSTLToITKDirection)(const std::vector &) = &sitkSTLToITKDirection; - this->m_pfSetMatrix = nsstd::bind(&TransformType::SetMatrix, t, nsstd::bind(pfSTLToITKDirection, nsstd::placeholders::_1)); + this->m_pfSetMatrix = std::bind(&TransformType::SetMatrix, t, std::bind(pfSTLToITKDirection, std::placeholders::_1)); SITK_TRANSFORM_SET_MPF_GetMatrix(); typename TransformType::OutputVectorType (*pfSTLVectorToITK)(const std::vector &) = &sitkSTLVectorToITK; void (TransformType::*pfScale1) (const typename TransformType::OutputVectorType &, bool) = &TransformType::Scale; - this->m_pfScale1 = nsstd::bind(pfScale1,t,nsstd::bind(pfSTLVectorToITK,nsstd::placeholders::_1),nsstd::placeholders::_2); + this->m_pfScale1 = std::bind(pfScale1,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); void (TransformType::*pfScale2) (const double &, bool) = &TransformType::Scale; - this->m_pfScale2 = nsstd::bind(pfScale2,t,nsstd::placeholders::_1,nsstd::placeholders::_2); - this->m_pfShear = nsstd::bind(&TransformType::Shear,t,nsstd::placeholders::_1,nsstd::placeholders::_2,nsstd::placeholders::_3,nsstd::placeholders::_4); - this->m_pfTranslate = nsstd::bind(&TransformType::Translate,t,nsstd::bind(pfSTLVectorToITK,nsstd::placeholders::_1),nsstd::placeholders::_2); - this->m_pfRotate = nsstd::bind(&TransformType::Rotate,t,nsstd::placeholders::_1,nsstd::placeholders::_2,nsstd::placeholders::_3,nsstd::placeholders::_4); + this->m_pfScale2 = std::bind(pfScale2,t,std::placeholders::_1,std::placeholders::_2); + this->m_pfShear = std::bind(&TransformType::Shear,t,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4); + this->m_pfTranslate = std::bind(&TransformType::Translate,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); + this->m_pfRotate = std::bind(&TransformType::Rotate,t,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4); } } diff --git a/Code/Common/src/sitkBSplineTransform.cxx b/Code/Common/src/sitkBSplineTransform.cxx index 1523b6d31..c6e9dea6a 100644 --- a/Code/Common/src/sitkBSplineTransform.cxx +++ b/Code/Common/src/sitkBSplineTransform.cxx @@ -260,10 +260,10 @@ void BSplineTransform::InternalInitialization(TransformType *t) { { // TransformDomainDirection typename TransformType::DirectionType (*pfSTLToITKDirection)(const std::vector &) = &sitkSTLToITKDirection; - this->m_pfSetTransformDomainDirection = nsstd::bind(&TransformType::SetTransformDomainDirection,t,nsstd::bind(pfSTLToITKDirection,nsstd::placeholders::_1)); + this->m_pfSetTransformDomainDirection = std::bind(&TransformType::SetTransformDomainDirection,t,std::bind(pfSTLToITKDirection,std::placeholders::_1)); std::vector (*pfITKDirectionToSTL)( const typename TransformType::DirectionType &) = &sitkITKDirectionToSTL; - this->m_pfGetTransformDomainDirection = nsstd::bind(pfITKDirectionToSTL,nsstd::bind(&TransformType::GetTransformDomainDirection,t)); + this->m_pfGetTransformDomainDirection = std::bind(pfITKDirectionToSTL,std::bind(&TransformType::GetTransformDomainDirection,t)); } // TransformDomainMeshSize @@ -275,8 +275,8 @@ void BSplineTransform::InternalInitialization(TransformType *t) std::vector (*pfImageArrayConvert)(const typename TransformType::CoefficientImageArray &) = &sitkImageArrayConvert; - this->m_pfGetCoefficientImages = nsstd::bind(pfImageArrayConvert, nsstd::bind(&TransformType::GetCoefficientImages,t) ); - this->m_pfSetCoefficientImages = nsstd::bind(SetCoefficientImages, t, nsstd::placeholders::_1); + this->m_pfGetCoefficientImages = std::bind(pfImageArrayConvert, std::bind(&TransformType::GetCoefficientImages,t) ); + this->m_pfSetCoefficientImages = std::bind(SetCoefficientImages, t, std::placeholders::_1); this->m_pfGetOrder = &sitkGetOrder; } diff --git a/Code/Common/src/sitkConfigure.h.in b/Code/Common/src/sitkConfigure.h.in index 40da38603..c68e5f253 100644 --- a/Code/Common/src/sitkConfigure.h.in +++ b/Code/Common/src/sitkConfigure.h.in @@ -32,7 +32,6 @@ #cmakedefine SITK_HAS_CXX11_STATIC_ASSERT // defined if the compiler has C++11 "nullptr" keyword #cmakedefine SITK_HAS_CXX11_NULLPTR -#cmakedefine SITK_HAS_CXX11_FUNCTIONAL #cmakedefine SITK_HAS_CXX11_TYPE_TRAITS #cmakedefine SITK_HAS_CXX11_UNORDERED_MAP #cmakedefine SITK_HAS_CXX11_UNIQUE_PTR diff --git a/Code/Common/src/sitkDisplacementFieldTransform.cxx b/Code/Common/src/sitkDisplacementFieldTransform.cxx index dbd77b1dd..fd9482d2b 100644 --- a/Code/Common/src/sitkDisplacementFieldTransform.cxx +++ b/Code/Common/src/sitkDisplacementFieldTransform.cxx @@ -283,27 +283,27 @@ void DisplacementFieldTransform::InternalInitialization(itk::TransformBase *tran template void DisplacementFieldTransform::InternalInitialization(TransformType *t) { - this->m_pfSetDisplacementField = nsstd::bind(&InternalSetDisplacementField, t, nsstd::placeholders::_1); - this->m_pfGetDisplacementField = nsstd::bind(&DisplacementFieldTransform::InternalGetDisplacementField, t); + this->m_pfSetDisplacementField = std::bind(&InternalSetDisplacementField, t, std::placeholders::_1); + this->m_pfGetDisplacementField = std::bind(&DisplacementFieldTransform::InternalGetDisplacementField, t); - this->m_pfSetInverseDisplacementField = nsstd::bind(&InternalSetInverseDisplacementField, t, nsstd::placeholders::_1); - this->m_pfGetInverseDisplacementField = nsstd::bind(&DisplacementFieldTransform::InternalGetInverseDisplacementField, t); + this->m_pfSetInverseDisplacementField = std::bind(&InternalSetInverseDisplacementField, t, std::placeholders::_1); + this->m_pfGetInverseDisplacementField = std::bind(&DisplacementFieldTransform::InternalGetInverseDisplacementField, t); - this->m_pfSetInterpolator = nsstd::bind(&InternalSetInterpolator, t, nsstd::placeholders::_1); + this->m_pfSetInterpolator = std::bind(&InternalSetInterpolator, t, std::placeholders::_1); - m_pfSetSmoothingOff = nsstd::bind(&Self::InternalSetSmoothingOff, this, t); - m_pfSetSmoothingGaussianOnUpdate = nsstd::bind(&Self::InternalSetSmoothingGaussianOnUpdate, + m_pfSetSmoothingOff = std::bind(&Self::InternalSetSmoothingOff, this, t); + m_pfSetSmoothingGaussianOnUpdate = std::bind(&Self::InternalSetSmoothingGaussianOnUpdate, this, t, - nsstd::placeholders::_1, - nsstd::placeholders::_2 ); - m_pfSetSmoothingBSplineOnUpdate = nsstd::bind(&Self::InternalSetSmoothingBSplineOnUpdate, + std::placeholders::_1, + std::placeholders::_2 ); + m_pfSetSmoothingBSplineOnUpdate = std::bind(&Self::InternalSetSmoothingBSplineOnUpdate, this, t, - nsstd::placeholders::_1, - nsstd::placeholders::_2, - nsstd::placeholders::_3, - nsstd::placeholders::_4 ); + std::placeholders::_1, + std::placeholders::_2, + std::placeholders::_3, + std::placeholders::_4 ); } PimpleTransformBase *DisplacementFieldTransform::CreateDisplacementFieldPimpleTransform(unsigned int dimension) diff --git a/Code/Common/src/sitkEuler2DTransform.cxx b/Code/Common/src/sitkEuler2DTransform.cxx index 248915a85..cd6d95bf5 100644 --- a/Code/Common/src/sitkEuler2DTransform.cxx +++ b/Code/Common/src/sitkEuler2DTransform.cxx @@ -163,8 +163,8 @@ void Euler2DTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF_GetMatrix(); SITK_TRANSFORM_SET_MPF_SetMatrix(); - this->m_pfSetAngle = nsstd::bind(&TransformType::SetAngle,t,nsstd::placeholders::_1); - this->m_pfGetAngle = nsstd::bind(&TransformType::GetAngle,t); + this->m_pfSetAngle = std::bind(&TransformType::SetAngle,t,std::placeholders::_1); + this->m_pfGetAngle = std::bind(&TransformType::GetAngle,t); } } diff --git a/Code/Common/src/sitkEuler3DTransform.cxx b/Code/Common/src/sitkEuler3DTransform.cxx index b59c83e66..eafe3b6b2 100644 --- a/Code/Common/src/sitkEuler3DTransform.cxx +++ b/Code/Common/src/sitkEuler3DTransform.cxx @@ -189,12 +189,12 @@ void Euler3DTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF_GetMatrix(); SITK_TRANSFORM_SET_MPF_SetMatrix(); - this->m_pfSetRotation = nsstd::bind(&TransformType::SetRotation,t,nsstd::placeholders::_1,nsstd::placeholders::_2,nsstd::placeholders::_3); - this->m_pfGetAngleX = nsstd::bind(&TransformType::GetAngleX,t); - this->m_pfGetAngleY = nsstd::bind(&TransformType::GetAngleY,t); - this->m_pfGetAngleZ = nsstd::bind(&TransformType::GetAngleZ,t); - this->m_pfSetComputeZYX = nsstd::bind(&TransformType::SetComputeZYX,t,nsstd::placeholders::_1); - this->m_pfGetComputeZYX = nsstd::bind(&TransformType::GetComputeZYX,t); + this->m_pfSetRotation = std::bind(&TransformType::SetRotation,t,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3); + this->m_pfGetAngleX = std::bind(&TransformType::GetAngleX,t); + this->m_pfGetAngleY = std::bind(&TransformType::GetAngleY,t); + this->m_pfGetAngleZ = std::bind(&TransformType::GetAngleZ,t); + this->m_pfSetComputeZYX = std::bind(&TransformType::SetComputeZYX,t,std::placeholders::_1); + this->m_pfGetComputeZYX = std::bind(&TransformType::GetComputeZYX,t); } diff --git a/Code/Common/src/sitkFunctionCommand.cxx b/Code/Common/src/sitkFunctionCommand.cxx index 177ce130d..978127b16 100644 --- a/Code/Common/src/sitkFunctionCommand.cxx +++ b/Code/Common/src/sitkFunctionCommand.cxx @@ -47,7 +47,7 @@ void FunctionCommand::SetCallbackFunction ( void(* pFunction )() ) void FunctionCommand::SetCallbackFunction( void(* pFunction )(void *), void *clientData ) { - m_Function = nsstd::bind(pFunction, clientData); + m_Function = std::bind(pFunction, clientData); } diff --git a/Code/Common/src/sitkProcessObject.cxx b/Code/Common/src/sitkProcessObject.cxx index b20c95a2e..3a8ecf280 100644 --- a/Code/Common/src/sitkProcessObject.cxx +++ b/Code/Common/src/sitkProcessObject.cxx @@ -26,8 +26,7 @@ #include #include #include - -#include "nsstd/functional.h" +#include namespace itk { namespace simple { diff --git a/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx b/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx index cf4095ae8..f531f5dd4 100644 --- a/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx +++ b/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx @@ -215,18 +215,18 @@ void ScaleSkewVersor3DTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF_GetMatrix(); void (TransformType::*pfSetRotation1) (const typename TransformType::VersorType &) = &TransformType::SetRotation; - this->m_pfSetRotation1 = nsstd::bind(pfSetRotation1,t,nsstd::bind(&sitkSTLVectorToITKVersor, - nsstd::placeholders::_1)); + this->m_pfSetRotation1 = std::bind(pfSetRotation1,t,std::bind(&sitkSTLVectorToITKVersor, + std::placeholders::_1)); typename TransformType::OutputVectorType (*pfSTLVectorToITK)(const std::vector &) = &sitkSTLVectorToITK; void (TransformType::*pfSetRotation2) (const typename TransformType::AxisType &, double) = &TransformType::SetRotation; - this->m_pfSetRotation2 = nsstd::bind(pfSetRotation2,t,nsstd::bind(pfSTLVectorToITK,nsstd::placeholders::_1),nsstd::placeholders::_2); + this->m_pfSetRotation2 = std::bind(pfSetRotation2,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); - this->m_pfGetVersor = nsstd::bind(&sitkITKVersorToSTL,nsstd::bind(&TransformType::GetVersor,t)); + this->m_pfGetVersor = std::bind(&sitkITKVersorToSTL,std::bind(&TransformType::GetVersor,t)); // pre argument has no effect - this->m_pfTranslate = nsstd::bind(&TransformType::Translate,t,nsstd::bind(pfSTLVectorToITK,nsstd::placeholders::_1), false); + this->m_pfTranslate = std::bind(&TransformType::Translate,t,std::bind(pfSTLVectorToITK,std::placeholders::_1), false); } } diff --git a/Code/Common/src/sitkScaleVersor3DTransform.cxx b/Code/Common/src/sitkScaleVersor3DTransform.cxx index 27cdb9aae..d1317356a 100644 --- a/Code/Common/src/sitkScaleVersor3DTransform.cxx +++ b/Code/Common/src/sitkScaleVersor3DTransform.cxx @@ -198,17 +198,17 @@ void ScaleVersor3DTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF_GetMatrix(); void (TransformType::*pfSetRotation1) (const typename TransformType::VersorType &) = &TransformType::SetRotation; - this->m_pfSetRotation1 = nsstd::bind(pfSetRotation1,t,nsstd::bind(&sitkSTLVectorToITKVersor,nsstd::placeholders::_1)); + this->m_pfSetRotation1 = std::bind(pfSetRotation1,t,std::bind(&sitkSTLVectorToITKVersor,std::placeholders::_1)); typename TransformType::OutputVectorType (*pfSTLVectorToITK)(const std::vector &) = &sitkSTLVectorToITK; void (TransformType::*pfSetRotation2) (const typename TransformType::AxisType &, double) = &TransformType::SetRotation; - this->m_pfSetRotation2 = nsstd::bind(pfSetRotation2,t,nsstd::bind(pfSTLVectorToITK,nsstd::placeholders::_1),nsstd::placeholders::_2); + this->m_pfSetRotation2 = std::bind(pfSetRotation2,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); - this->m_pfGetVersor = nsstd::bind(&sitkITKVersorToSTL,nsstd::bind(&TransformType::GetVersor,t)); + this->m_pfGetVersor = std::bind(&sitkITKVersorToSTL,std::bind(&TransformType::GetVersor,t)); // pre argument has no effect - this->m_pfTranslate = nsstd::bind(&TransformType::Translate,t,nsstd::bind(pfSTLVectorToITK,nsstd::placeholders::_1), false); + this->m_pfTranslate = std::bind(&TransformType::Translate,t,std::bind(pfSTLVectorToITK,std::placeholders::_1), false); } } diff --git a/Code/Common/src/sitkSimilarity2DTransform.cxx b/Code/Common/src/sitkSimilarity2DTransform.cxx index 93cf5f69f..7750155bc 100644 --- a/Code/Common/src/sitkSimilarity2DTransform.cxx +++ b/Code/Common/src/sitkSimilarity2DTransform.cxx @@ -178,11 +178,11 @@ void Similarity2DTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF_GetMatrix(); SITK_TRANSFORM_SET_MPF_SetMatrix(); - this->m_pfSetAngle = nsstd::bind(&TransformType::SetAngle,t,nsstd::placeholders::_1); - this->m_pfGetAngle = nsstd::bind(&TransformType::GetAngle,t); + this->m_pfSetAngle = std::bind(&TransformType::SetAngle,t,std::placeholders::_1); + this->m_pfGetAngle = std::bind(&TransformType::GetAngle,t); - this->m_pfSetScale = nsstd::bind(&TransformType::SetScale,t,nsstd::placeholders::_1); - this->m_pfGetScale = nsstd::bind(&TransformType::GetScale,t); + this->m_pfSetScale = std::bind(&TransformType::SetScale,t,std::placeholders::_1); + this->m_pfGetScale = std::bind(&TransformType::GetScale,t); } } diff --git a/Code/Common/src/sitkSimilarity3DTransform.cxx b/Code/Common/src/sitkSimilarity3DTransform.cxx index f3add653a..7334779d8 100644 --- a/Code/Common/src/sitkSimilarity3DTransform.cxx +++ b/Code/Common/src/sitkSimilarity3DTransform.cxx @@ -206,19 +206,19 @@ void Similarity3DTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF_SetMatrix(); void (TransformType::*pfSetRotation1) (const typename TransformType::VersorType &) = &TransformType::SetRotation; - this->m_pfSetRotation1 = nsstd::bind(pfSetRotation1,t,nsstd::bind(&sitkSTLVectorToITKVersor,nsstd::placeholders::_1)); + this->m_pfSetRotation1 = std::bind(pfSetRotation1,t,std::bind(&sitkSTLVectorToITKVersor,std::placeholders::_1)); typename TransformType::OutputVectorType (*pfSTLVectorToITK)(const std::vector &) = &sitkSTLVectorToITK; void (TransformType::*pfSetRotation2) (const typename TransformType::AxisType &, double) = &TransformType::SetRotation; - this->m_pfSetRotation2 = nsstd::bind(pfSetRotation2,t,nsstd::bind(pfSTLVectorToITK,nsstd::placeholders::_1),nsstd::placeholders::_2); + this->m_pfSetRotation2 = std::bind(pfSetRotation2,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); - this->m_pfGetVersor = nsstd::bind(&sitkITKVersorToSTL,nsstd::bind(&TransformType::GetVersor,t)); + this->m_pfGetVersor = std::bind(&sitkITKVersorToSTL,std::bind(&TransformType::GetVersor,t)); - this->m_pfSetScale = nsstd::bind(&TransformType::SetScale,t,nsstd::placeholders::_1); - this->m_pfGetScale = nsstd::bind(&TransformType::GetScale,t); + this->m_pfSetScale = std::bind(&TransformType::SetScale,t,std::placeholders::_1); + this->m_pfGetScale = std::bind(&TransformType::GetScale,t); // pre argument has no effect - this->m_pfTranslate = nsstd::bind(&TransformType::Translate,t,nsstd::bind(pfSTLVectorToITK,nsstd::placeholders::_1), false); + this->m_pfTranslate = std::bind(&TransformType::Translate,t,std::bind(pfSTLVectorToITK,std::placeholders::_1), false); } diff --git a/Code/Common/src/sitkTransformHelper.hxx b/Code/Common/src/sitkTransformHelper.hxx index db6590410..18f4f4fa9 100644 --- a/Code/Common/src/sitkTransformHelper.hxx +++ b/Code/Common/src/sitkTransformHelper.hxx @@ -23,23 +23,23 @@ { \ typedef ITK_TYPENAME itkType; \ itkType (*pfSTLToITK)(const std::vector &) = &sitkSTLVectorToITK; \ - this->m_pfSet##NAME = nsstd::bind(&TransformType::Set##NAME,t,nsstd::bind(pfSTLToITK,nsstd::placeholders::_1)); \ + this->m_pfSet##NAME = std::bind(&TransformType::Set##NAME,t,std::bind(pfSTLToITK,std::placeholders::_1)); \ \ std::vector (*pfITKToSTL)( const itkType &) = &sitkITKVectorToSTL; \ - this->m_pfGet##NAME = nsstd::bind(pfITKToSTL,nsstd::bind(&TransformType::Get##NAME,t)); \ + this->m_pfGet##NAME = std::bind(pfITKToSTL,std::bind(&TransformType::Get##NAME,t)); \ } #define SITK_TRANSFORM_SET_MPF_GetMatrix() \ { \ std::vector (*pfITKDirectionToSTL)(const typename TransformType::MatrixType &) = &sitkITKDirectionToSTL; \ - this->m_pfGetMatrix = nsstd::bind(pfITKDirectionToSTL,nsstd::bind(&TransformType::GetMatrix,t)); \ + this->m_pfGetMatrix = std::bind(pfITKDirectionToSTL,std::bind(&TransformType::GetMatrix,t)); \ } #define SITK_TRANSFORM_SET_MPF_SetMatrix() \ { \ void (TransformType::*pfSetMatrix) (const typename TransformType::MatrixType &, double) = &TransformType::SetMatrix; \ typename TransformType::MatrixType (*pfSTLToITKDirection)(const std::vector &) = &sitkSTLToITKDirection; \ - this->m_pfSetMatrix = nsstd::bind(pfSetMatrix, t, nsstd::bind(pfSTLToITKDirection, nsstd::placeholders::_1), nsstd::placeholders::_2); \ + this->m_pfSetMatrix = std::bind(pfSetMatrix, t, std::bind(pfSTLToITKDirection, std::placeholders::_1), std::placeholders::_2); \ } diff --git a/Code/Common/src/sitkVersorRigid3DTransform.cxx b/Code/Common/src/sitkVersorRigid3DTransform.cxx index d789fd5be..6f2a9718f 100644 --- a/Code/Common/src/sitkVersorRigid3DTransform.cxx +++ b/Code/Common/src/sitkVersorRigid3DTransform.cxx @@ -189,16 +189,16 @@ void VersorRigid3DTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF_SetMatrix(); void (TransformType::*pfSetRotation1) (const typename TransformType::VersorType &) = &TransformType::SetRotation; - this->m_pfSetRotation1 = nsstd::bind(pfSetRotation1,t,nsstd::bind(&sitkSTLVectorToITKVersor,nsstd::placeholders::_1)); + this->m_pfSetRotation1 = std::bind(pfSetRotation1,t,std::bind(&sitkSTLVectorToITKVersor,std::placeholders::_1)); typename TransformType::OutputVectorType (*pfSTLVectorToITK)(const std::vector &) = &sitkSTLVectorToITK; void (TransformType::*pfSetRotation2) (const typename TransformType::AxisType &, double) = &TransformType::SetRotation; - this->m_pfSetRotation2 = nsstd::bind(pfSetRotation2,t,nsstd::bind(pfSTLVectorToITK,nsstd::placeholders::_1),nsstd::placeholders::_2); + this->m_pfSetRotation2 = std::bind(pfSetRotation2,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); - this->m_pfGetVersor = nsstd::bind(&sitkITKVersorToSTL,nsstd::bind(&TransformType::GetVersor,t)); + this->m_pfGetVersor = std::bind(&sitkITKVersorToSTL,std::bind(&TransformType::GetVersor,t)); // pre argument has no effect - this->m_pfTranslate = nsstd::bind(&TransformType::Translate,t,nsstd::bind(pfSTLVectorToITK,nsstd::placeholders::_1), false); + this->m_pfTranslate = std::bind(&TransformType::Translate,t,std::bind(pfSTLVectorToITK,std::placeholders::_1), false); } } diff --git a/Code/Common/src/sitkVersorTransform.cxx b/Code/Common/src/sitkVersorTransform.cxx index cc997ed7a..ee96e26fa 100644 --- a/Code/Common/src/sitkVersorTransform.cxx +++ b/Code/Common/src/sitkVersorTransform.cxx @@ -164,12 +164,12 @@ void VersorTransform::InternalInitialization(TransformType *t) typename TransformType::OutputVectorType (*pfSTLVectorToITK)(const std::vector &) = &sitkSTLVectorToITK; void (TransformType::*pfSetRotation1) (const typename TransformType::VersorType &) = &TransformType::SetRotation; - this->m_pfSetRotation1 = nsstd::bind(pfSetRotation1,t,nsstd::bind(&sitkSTLVectorToITKVersor,nsstd::placeholders::_1)); + this->m_pfSetRotation1 = std::bind(pfSetRotation1,t,std::bind(&sitkSTLVectorToITKVersor,std::placeholders::_1)); void (TransformType::*pfSetRotation2) (const typename TransformType::AxisType &, double) = &TransformType::SetRotation; - this->m_pfSetRotation2 = nsstd::bind(pfSetRotation2,t,nsstd::bind(pfSTLVectorToITK,nsstd::placeholders::_1),nsstd::placeholders::_2); + this->m_pfSetRotation2 = std::bind(pfSetRotation2,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); - this->m_pfGetVersor = nsstd::bind(&sitkITKVersorToSTL,nsstd::bind(&TransformType::GetVersor,t)); + this->m_pfGetVersor = std::bind(&sitkITKVersorToSTL,std::bind(&TransformType::GetVersor,t)); } diff --git a/Code/IO/include/sitkImageFileReader.h b/Code/IO/include/sitkImageFileReader.h index 3dddc6256..ec2d19d4f 100644 --- a/Code/IO/include/sitkImageFileReader.h +++ b/Code/IO/include/sitkImageFileReader.h @@ -204,9 +204,9 @@ namespace itk { nsstd::auto_ptr > m_MemberFactory; - nsstd::function()> m_pfGetMetaDataKeys; - nsstd::function m_pfHasMetaDataKey; - nsstd::function m_pfGetMetaData; + std::function()> m_pfGetMetaDataKeys; + std::function m_pfHasMetaDataKey; + std::function m_pfGetMetaData; std::string m_FileName; diff --git a/Code/IO/include/sitkImageSeriesReader.h b/Code/IO/include/sitkImageSeriesReader.h index c570fc0ea..46ea7fbe2 100644 --- a/Code/IO/include/sitkImageSeriesReader.h +++ b/Code/IO/include/sitkImageSeriesReader.h @@ -160,9 +160,9 @@ namespace itk { nsstd::auto_ptr > m_MemberFactory; - nsstd::function(int)> m_pfGetMetaDataKeys; - nsstd::function m_pfHasMetaDataKey; - nsstd::function m_pfGetMetaData; + std::function(int)> m_pfGetMetaDataKeys; + std::function m_pfHasMetaDataKey; + std::function m_pfGetMetaData; // Holder of process object for active measurements itk::ProcessObject *m_Filter; diff --git a/Code/IO/src/sitkImageFileReader.cxx b/Code/IO/src/sitkImageFileReader.cxx index b96b0cc4c..f3fa7a975 100644 --- a/Code/IO/src/sitkImageFileReader.cxx +++ b/Code/IO/src/sitkImageFileReader.cxx @@ -171,9 +171,9 @@ namespace itk { swap(spacing, m_Spacing); swap(size, m_Size); - this->m_pfGetMetaDataKeys = nsstd::bind(&MetaDataDictionary::GetKeys, this->m_MetaDataDictionary.get()); - this->m_pfHasMetaDataKey = nsstd::bind(&MetaDataDictionary::HasKey, this->m_MetaDataDictionary.get(), nsstd::placeholders::_1); - this->m_pfGetMetaData = nsstd::bind(&GetMetaDataDictionaryCustomCast::CustomCast, this->m_MetaDataDictionary.get(), nsstd::placeholders::_1); + this->m_pfGetMetaDataKeys = std::bind(&MetaDataDictionary::GetKeys, this->m_MetaDataDictionary.get()); + this->m_pfHasMetaDataKey = std::bind(&MetaDataDictionary::HasKey, this->m_MetaDataDictionary.get(), std::placeholders::_1); + this->m_pfGetMetaData = std::bind(&GetMetaDataDictionaryCustomCast::CustomCast, this->m_MetaDataDictionary.get(), std::placeholders::_1); } PixelIDValueEnum diff --git a/Code/IO/src/sitkImageSeriesReader.cxx b/Code/IO/src/sitkImageSeriesReader.cxx index 0bcdf5bde..2b9ce8c91 100644 --- a/Code/IO/src/sitkImageSeriesReader.cxx +++ b/Code/IO/src/sitkImageSeriesReader.cxx @@ -209,9 +209,9 @@ namespace itk { { this->m_Filter = reader; this->m_Filter->Register(); - this->m_pfGetMetaDataKeys = nsstd::bind(&GetMetaDataKeysCustomCast::CustomCast, reader.GetPointer(), nsstd::placeholders::_1 ); - this->m_pfHasMetaDataKey = nsstd::bind(&HasMetaDataKeyCustomCast::CustomCast, reader.GetPointer(), nsstd::placeholders::_1, nsstd::placeholders::_2 ); - this->m_pfGetMetaData = nsstd::bind(&GetMetaDataCustomCast::CustomCast, reader.GetPointer(), nsstd::placeholders::_1, nsstd::placeholders::_2 ); + this->m_pfGetMetaDataKeys = std::bind(&GetMetaDataKeysCustomCast::CustomCast, reader.GetPointer(), std::placeholders::_1 ); + this->m_pfHasMetaDataKey = std::bind(&HasMetaDataKeyCustomCast::CustomCast, reader.GetPointer(), std::placeholders::_1, std::placeholders::_2 ); + this->m_pfGetMetaData = std::bind(&GetMetaDataCustomCast::CustomCast, reader.GetPointer(), std::placeholders::_1, std::placeholders::_2 ); } reader->Update(); diff --git a/Code/Registration/include/sitkImageRegistrationMethod.h b/Code/Registration/include/sitkImageRegistrationMethod.h index 6c81cfc5e..e186b4133 100644 --- a/Code/Registration/include/sitkImageRegistrationMethod.h +++ b/Code/Registration/include/sitkImageRegistrationMethod.h @@ -669,19 +669,19 @@ namespace simple private: - nsstd::function m_pfGetOptimizerIteration; - nsstd::function()> m_pfGetOptimizerPosition; - nsstd::function m_pfGetOptimizerLearningRate; - nsstd::function m_pfGetOptimizerConvergenceValue; - nsstd::function m_pfGetMetricValue; - nsstd::function m_pfGetMetricNumberOfValidPoints; - nsstd::function()> m_pfGetOptimizerScales; - nsstd::function m_pfGetOptimizerStopConditionDescription; + std::function m_pfGetOptimizerIteration; + std::function()> m_pfGetOptimizerPosition; + std::function m_pfGetOptimizerLearningRate; + std::function m_pfGetOptimizerConvergenceValue; + std::function m_pfGetMetricValue; + std::function m_pfGetMetricNumberOfValidPoints; + std::function()> m_pfGetOptimizerScales; + std::function m_pfGetOptimizerStopConditionDescription; - nsstd::function m_pfGetCurrentLevel; + std::function m_pfGetCurrentLevel; - nsstd::function m_pfUpdateWithBestValue; + std::function m_pfUpdateWithBestValue; template < class TMemberFunctionPointer > struct EvaluateMemberFunctionAddressor diff --git a/Code/Registration/src/sitkImageRegistrationMethod.cxx b/Code/Registration/src/sitkImageRegistrationMethod.cxx index 92e3d68a7..6785ee811 100644 --- a/Code/Registration/src/sitkImageRegistrationMethod.cxx +++ b/Code/Registration/src/sitkImageRegistrationMethod.cxx @@ -949,9 +949,9 @@ Transform ImageRegistrationMethod::ExecuteInternal ( const Image &inFixed, const << *registration->GetOptimizer() << *registration->GetMetric()); - m_pfGetOptimizerStopConditionDescription = nsstd::bind(&_OptimizerType::GetStopConditionDescription, optimizer.GetPointer()); + m_pfGetOptimizerStopConditionDescription = std::bind(&_OptimizerType::GetStopConditionDescription, optimizer.GetPointer()); - m_pfGetCurrentLevel = nsstd::bind(&CurrentLevelCustomCast::CustomCast,registration.GetPointer()); + m_pfGetCurrentLevel = std::bind(&CurrentLevelCustomCast::CustomCast,registration.GetPointer()); try diff --git a/Code/Registration/src/sitkImageRegistrationMethod_CreateMetric.hxx b/Code/Registration/src/sitkImageRegistrationMethod_CreateMetric.hxx index 4590c8b9a..ed5d74d8a 100644 --- a/Code/Registration/src/sitkImageRegistrationMethod_CreateMetric.hxx +++ b/Code/Registration/src/sitkImageRegistrationMethod_CreateMetric.hxx @@ -64,7 +64,7 @@ ImageRegistrationMethod::CreateMetric( ) typedef itk::ANTSNeighborhoodCorrelationImageToImageMetricv4 _MetricType; typename _MetricType::Pointer metric = _MetricType::New(); - this->m_pfGetMetricNumberOfValidPoints = nsstd::bind(&NumberOfValidPointsCustomCast::CustomCast<_MetricType>,metric.GetPointer()); + this->m_pfGetMetricNumberOfValidPoints = std::bind(&NumberOfValidPointsCustomCast::CustomCast<_MetricType>,metric.GetPointer()); typename _MetricType::RadiusType radius; radius.Fill( m_MetricRadius ); metric->SetRadius( radius ); @@ -76,7 +76,7 @@ ImageRegistrationMethod::CreateMetric( ) typedef itk::CorrelationImageToImageMetricv4< FixedImageType, MovingImageType > _MetricType; typename _MetricType::Pointer metric = _MetricType::New(); - this->m_pfGetMetricNumberOfValidPoints = nsstd::bind(&NumberOfValidPointsCustomCast::CustomCast<_MetricType>,metric.GetPointer()); + this->m_pfGetMetricNumberOfValidPoints = std::bind(&NumberOfValidPointsCustomCast::CustomCast<_MetricType>,metric.GetPointer()); metric->Register(); return metric.GetPointer(); } @@ -84,7 +84,7 @@ ImageRegistrationMethod::CreateMetric( ) { typedef itk::DemonsImageToImageMetricv4< FixedImageType, MovingImageType > _MetricType; typename _MetricType::Pointer metric = _MetricType::New(); - this->m_pfGetMetricNumberOfValidPoints = nsstd::bind(&NumberOfValidPointsCustomCast::CustomCast<_MetricType>,metric.GetPointer()); + this->m_pfGetMetricNumberOfValidPoints = std::bind(&NumberOfValidPointsCustomCast::CustomCast<_MetricType>,metric.GetPointer()); metric->SetIntensityDifferenceThreshold(m_MetricIntensityDifferenceThreshold); metric->Register(); return metric.GetPointer(); @@ -93,7 +93,7 @@ ImageRegistrationMethod::CreateMetric( ) { typedef itk::JointHistogramMutualInformationImageToImageMetricv4< FixedImageType, MovingImageType > _MetricType; typename _MetricType::Pointer metric = _MetricType::New(); - this->m_pfGetMetricNumberOfValidPoints = nsstd::bind(&NumberOfValidPointsCustomCast::CustomCast<_MetricType>,metric.GetPointer()); + this->m_pfGetMetricNumberOfValidPoints = std::bind(&NumberOfValidPointsCustomCast::CustomCast<_MetricType>,metric.GetPointer()); metric->SetNumberOfHistogramBins(m_MetricNumberOfHistogramBins); metric->SetVarianceForJointPDFSmoothing(m_MetricVarianceForJointPDFSmoothing); metric->Register(); @@ -103,7 +103,7 @@ ImageRegistrationMethod::CreateMetric( ) { typedef itk::MeanSquaresImageToImageMetricv4< FixedImageType, MovingImageType > _MetricType; typename _MetricType::Pointer metric = _MetricType::New(); - this->m_pfGetMetricNumberOfValidPoints = nsstd::bind(&NumberOfValidPointsCustomCast::CustomCast<_MetricType>,metric.GetPointer()); + this->m_pfGetMetricNumberOfValidPoints = std::bind(&NumberOfValidPointsCustomCast::CustomCast<_MetricType>,metric.GetPointer()); metric->Register(); return metric.GetPointer(); } @@ -111,7 +111,7 @@ ImageRegistrationMethod::CreateMetric( ) { typedef itk::MattesMutualInformationImageToImageMetricv4< FixedImageType, MovingImageType > _MetricType; typename _MetricType::Pointer metric = _MetricType::New(); - this->m_pfGetMetricNumberOfValidPoints = nsstd::bind(&NumberOfValidPointsCustomCast::CustomCast<_MetricType>,metric.GetPointer()); + this->m_pfGetMetricNumberOfValidPoints = std::bind(&NumberOfValidPointsCustomCast::CustomCast<_MetricType>,metric.GetPointer()); metric->SetNumberOfHistogramBins(m_MetricNumberOfHistogramBins); metric->Register(); return metric.GetPointer(); diff --git a/Code/Registration/src/sitkImageRegistrationMethod_CreateOptimizer.cxx b/Code/Registration/src/sitkImageRegistrationMethod_CreateOptimizer.cxx index 5f0b969f7..325c8ba4b 100644 --- a/Code/Registration/src/sitkImageRegistrationMethod_CreateOptimizer.cxx +++ b/Code/Registration/src/sitkImageRegistrationMethod_CreateOptimizer.cxx @@ -101,12 +101,12 @@ namespace simple optimizer->SetDoEstimateLearningRateOnce( this->m_OptimizerEstimateLearningRate==Once ); optimizer->SetMaximumStepSizeInPhysicalUnits( this->m_OptimizerMaximumStepSizeInPhysicalUnits ); - this->m_pfGetMetricValue = nsstd::bind(&_OptimizerType::GetCurrentMetricValue,optimizer.GetPointer()); - this->m_pfGetOptimizerIteration = nsstd::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerPosition = nsstd::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerLearningRate = nsstd::bind(&_OptimizerType::GetLearningRate,optimizer.GetPointer()); - this->m_pfGetOptimizerConvergenceValue = nsstd::bind(&_OptimizerType::GetConvergenceValue,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = nsstd::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, nsstd::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetCurrentMetricValue,optimizer.GetPointer()); + this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerLearningRate = std::bind(&_OptimizerType::GetLearningRate,optimizer.GetPointer()); + this->m_pfGetOptimizerConvergenceValue = std::bind(&_OptimizerType::GetConvergenceValue,optimizer.GetPointer()); + this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); optimizer->Register(); return optimizer.GetPointer(); @@ -123,12 +123,12 @@ namespace simple optimizer->SetDoEstimateLearningRateOnce( this->m_OptimizerEstimateLearningRate==Once ); optimizer->SetMaximumStepSizeInPhysicalUnits( this->m_OptimizerMaximumStepSizeInPhysicalUnits ); - this->m_pfGetMetricValue = nsstd::bind(&_OptimizerType::GetCurrentMetricValue,optimizer.GetPointer()); - this->m_pfGetOptimizerIteration = nsstd::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerPosition = nsstd::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerLearningRate = nsstd::bind(&_OptimizerType::GetLearningRate,optimizer.GetPointer()); - this->m_pfGetOptimizerConvergenceValue = nsstd::bind(&_OptimizerType::GetConvergenceValue,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = nsstd::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, nsstd::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetCurrentMetricValue,optimizer.GetPointer()); + this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerLearningRate = std::bind(&_OptimizerType::GetLearningRate,optimizer.GetPointer()); + this->m_pfGetOptimizerConvergenceValue = std::bind(&_OptimizerType::GetConvergenceValue,optimizer.GetPointer()); + this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); optimizer->Register(); return optimizer.GetPointer(); @@ -149,12 +149,12 @@ namespace simple optimizer->SetDoEstimateLearningRateOnce( this->m_OptimizerEstimateLearningRate==Once ); optimizer->SetMaximumStepSizeInPhysicalUnits( this->m_OptimizerMaximumStepSizeInPhysicalUnits ); - this->m_pfGetMetricValue = nsstd::bind(&_OptimizerType::GetCurrentMetricValue,optimizer.GetPointer()); - this->m_pfGetOptimizerIteration = nsstd::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerPosition = nsstd::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerLearningRate = nsstd::bind(&_OptimizerType::GetLearningRate,optimizer.GetPointer()); - this->m_pfGetOptimizerConvergenceValue = nsstd::bind(&_OptimizerType::GetConvergenceValue,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = nsstd::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, nsstd::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetCurrentMetricValue,optimizer.GetPointer()); + this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerLearningRate = std::bind(&_OptimizerType::GetLearningRate,optimizer.GetPointer()); + this->m_pfGetOptimizerConvergenceValue = std::bind(&_OptimizerType::GetConvergenceValue,optimizer.GetPointer()); + this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); optimizer->Register(); return optimizer.GetPointer(); @@ -174,12 +174,12 @@ namespace simple optimizer->SetMaximumStepSizeInPhysicalUnits( this->m_OptimizerMaximumStepSizeInPhysicalUnits ); optimizer->Register(); - this->m_pfGetMetricValue = nsstd::bind(&_OptimizerType::GetValue,optimizer); - this->m_pfGetOptimizerIteration = nsstd::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerPosition = nsstd::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerLearningRate = nsstd::bind(&_OptimizerType::GetLearningRate,optimizer.GetPointer()); - this->m_pfGetOptimizerConvergenceValue = nsstd::bind(&_OptimizerType::GetConvergenceValue,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = nsstd::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, nsstd::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetValue,optimizer); + this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerLearningRate = std::bind(&_OptimizerType::GetLearningRate,optimizer.GetPointer()); + this->m_pfGetOptimizerConvergenceValue = std::bind(&_OptimizerType::GetConvergenceValue,optimizer.GetPointer()); + this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); return optimizer.GetPointer(); } @@ -224,10 +224,10 @@ namespace simple optimizer->SetTrace( m_OptimizerTrace ); optimizer->Register(); - this->m_pfGetMetricValue = nsstd::bind(&_OptimizerType::GetValue,optimizer.GetPointer()); - this->m_pfGetOptimizerIteration = nsstd::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerPosition = nsstd::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = nsstd::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, nsstd::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetValue,optimizer.GetPointer()); + this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); return optimizer.GetPointer(); } @@ -247,10 +247,10 @@ namespace simple optimizer->SetLineSearchAccuracy( this->m_OptimizerLineSearchAccuracy ); optimizer->Register(); - this->m_pfGetMetricValue = nsstd::bind(&_OptimizerType::GetValue,optimizer.GetPointer()); - this->m_pfGetOptimizerIteration = nsstd::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerPosition = nsstd::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = nsstd::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, nsstd::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetValue,optimizer.GetPointer()); + this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); return optimizer.GetPointer(); } @@ -262,16 +262,16 @@ namespace simple optimizer->SetStepLength( this->m_OptimizerStepLength ); optimizer->SetNumberOfSteps( sitkSTLVectorToITKArray<_OptimizerType::StepsType::ValueType>(this->m_OptimizerNumberOfSteps)); - this->m_pfGetMetricValue = nsstd::bind(&_OptimizerType::GetCurrentValue,optimizer); - this->m_pfGetOptimizerIteration = nsstd::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerPosition = nsstd::bind(&PositionOptimizerCustomCast::CustomCast,optimizer); + this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetCurrentValue,optimizer); + this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer); - this->m_pfGetOptimizerScales = nsstd::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, nsstd::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); - this->m_pfUpdateWithBestValue = nsstd::bind(&UpdateWithBestValueExhaustive, + this->m_pfUpdateWithBestValue = std::bind(&UpdateWithBestValueExhaustive, optimizer, &(this->m_MetricValue), - nsstd::placeholders::_1); + std::placeholders::_1); optimizer->Register(); @@ -292,10 +292,10 @@ namespace simple optimizer->SetOptimizeWithRestarts(this->m_OptimizerWithRestarts); - this->m_pfGetMetricValue = nsstd::bind(&_OptimizerType::GetValue,optimizer); - this->m_pfGetOptimizerIteration = nsstd::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerPosition = nsstd::bind(&PositionOptimizerCustomCast::CustomCast,optimizer); - this->m_pfGetOptimizerScales = nsstd::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, nsstd::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetValue,optimizer); + this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer); + this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); optimizer->Register(); return optimizer.GetPointer(); @@ -311,10 +311,10 @@ namespace simple optimizer->SetStepTolerance( this->m_OptimizerStepTolerance ); optimizer->SetValueTolerance( this->m_OptimizerValueTolerance ); - this->m_pfGetMetricValue = nsstd::bind(&_OptimizerType::GetValue,optimizer.GetPointer()); - this->m_pfGetOptimizerIteration = nsstd::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerPosition = nsstd::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = nsstd::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, nsstd::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetValue,optimizer.GetPointer()); + this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); optimizer->Register(); return optimizer.GetPointer(); @@ -345,11 +345,11 @@ namespace simple } optimizer->SetNormalVariateGenerator( generator ); - this->m_pfGetMetricValue = nsstd::bind(&_OptimizerType::GetValue,optimizer.GetPointer()); - this->m_pfGetOptimizerIteration = nsstd::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerPosition = nsstd::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerConvergenceValue = nsstd::bind(&_OptimizerType::GetFrobeniusNorm,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = nsstd::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, nsstd::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetValue,optimizer.GetPointer()); + this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); + this->m_pfGetOptimizerConvergenceValue = std::bind(&_OptimizerType::GetFrobeniusNorm,optimizer.GetPointer()); + this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); optimizer->Register(); return optimizer.GetPointer(); diff --git a/ExpandTemplateGenerator/Components/ExecuteInternalUpdateAndReturn.cxx.in b/ExpandTemplateGenerator/Components/ExecuteInternalUpdateAndReturn.cxx.in index df617e07c..3f28f3a0f 100644 --- a/ExpandTemplateGenerator/Components/ExecuteInternalUpdateAndReturn.cxx.in +++ b/ExpandTemplateGenerator/Components/ExecuteInternalUpdateAndReturn.cxx.in @@ -36,7 +36,7 @@ end $(if measurements then for i = 1,#measurements do if measurements[i].active then - OUT=OUT..' this->m_pfGet'..measurements[i].name..' = nsstd::bind(' + OUT=OUT..' this->m_pfGet'..measurements[i].name..' = std::bind(' if measurements[i].custom_cast or measurements[i].label_map then OUT=OUT..'&'..measurements[i].name..'CustomCast::CustomCast' else @@ -45,7 +45,7 @@ for i = 1,#measurements do OUT=OUT..', filter.GetPointer()' if measurements[i].parameters then for inum=1,#measurements[i].parameters do - OUT=OUT..", nsstd::placeholders::_"..inum + OUT=OUT..", std::placeholders::_"..inum end end OUT=OUT..' );\ diff --git a/ExpandTemplateGenerator/Components/PrivateMemberDeclarations.h.in b/ExpandTemplateGenerator/Components/PrivateMemberDeclarations.h.in index 2ec985d4d..7ba1328e7 100644 --- a/ExpandTemplateGenerator/Components/PrivateMemberDeclarations.h.in +++ b/ExpandTemplateGenerator/Components/PrivateMemberDeclarations.h.in @@ -24,7 +24,7 @@ OUT=[[ /* ${doc} */]]end) $(if active then OUT=[[ - nsstd::function<${type}($(if parameters then + std::function<${type}($(if parameters then for inum=1,#parameters do if inum>1 then OUT = OUT .. ', ' From 54242502af5179acd2c8541d893617bef796b0a2 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 14 Feb 2020 17:03:02 -0500 Subject: [PATCH 366/400] Explicitly delete methods This replaced the undefined/not-implemented approach. --- Code/Common/include/sitkNonCopyable.h | 20 ++++---------------- Code/Common/src/sitkProcessObject.cxx | 7 +++---- Code/Common/src/sitkTransform.cxx | 6 +++--- 3 files changed, 10 insertions(+), 23 deletions(-) diff --git a/Code/Common/include/sitkNonCopyable.h b/Code/Common/include/sitkNonCopyable.h index 333bb4e27..a85378590 100644 --- a/Code/Common/include/sitkNonCopyable.h +++ b/Code/Common/include/sitkNonCopyable.h @@ -26,7 +26,7 @@ namespace simple { /** \class NonCopyable -* \brief An inheratable class to disable copying of a class +* \brief An inheritable class to disable copying of a class * * This class disable the implicit implementations of the assignment * and copy constructor for derived classes. The instantiation of the @@ -36,8 +36,8 @@ namespace simple * because explicit implementation of these methods could be * implemented. * -* An advatange this apporach has is the class heiarchy makes it -* obvious what the intent is, as compared to other appoaches. +* An advantage this approach has is the class hierarchy makes it +* obvious what the intent is, as compared to other approaches. * * For example you should not be able to copy singleton object, because * there should only be one of them. To utilize this class just derive @@ -51,24 +51,12 @@ namespace simple class SITKCommon_EXPORT NonCopyable { protected: - NonCopyable() {} -private: - NonCopyable &operator=( const NonCopyable & ); // Not implemented on purpose - NonCopyable( const NonCopyable & ); // Not implemented on purpose -}; - -#if SITK_EXPLICIT_DEFAULT_DELETE_FUNCTIONS - -// see other implementation for doxygen -struct NonCopyable -{ NonCopyable() = default; +public: NonCopyable &operator=( const NonCopyable & ) = delete; NonCopyable( const NonCopyable & ) = delete; }; -#endif - } // end namespace simple } // end namespace itk diff --git a/Code/Common/src/sitkProcessObject.cxx b/Code/Common/src/sitkProcessObject.cxx index b20c95a2e..fdb21e2f8 100644 --- a/Code/Common/src/sitkProcessObject.cxx +++ b/Code/Common/src/sitkProcessObject.cxx @@ -85,14 +85,13 @@ class SimpleAdaptorCommand } } + SimpleAdaptorCommand(const Self &) = delete; + void operator=(const Self &) = delete; + protected: itk::simple::Command * m_That; SimpleAdaptorCommand():m_That(0) {} virtual ~SimpleAdaptorCommand() {} - -private: - SimpleAdaptorCommand(const Self &); //purposely not implemented - void operator=(const Self &); //purposely not implemented }; } // end anonymous namespace diff --git a/Code/Common/src/sitkTransform.cxx b/Code/Common/src/sitkTransform.cxx index a535c2beb..6e3b4043a 100644 --- a/Code/Common/src/sitkTransform.cxx +++ b/Code/Common/src/sitkTransform.cxx @@ -141,14 +141,14 @@ class HolderCommand void Execute(itk::Object*, const itk::EventObject&) {} void Execute(const itk::Object*, const itk::EventObject&) {} + void operator=(const HolderCommand&) = delete; + HolderCommand(const HolderCommand&) = delete; + protected: HolderCommand() {}; ~HolderCommand() {}; private: - void operator=(const HolderCommand&); // not implemented - HolderCommand(const HolderCommand&); // not implemented - ObjectType m_Object; }; From 5b25439b8319aa1f2597f48503b9cde35a70ec99 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 14 Feb 2020 15:08:16 -0500 Subject: [PATCH 367/400] Replace sitkStaticAssert with standard static_assert --- CMake/sitkCheckCXX11.cmake | 1 - CMake/sitk_check_cxx11.cxx | 13 ------------- .../include/sitkDualMemberFunctionFactory.hxx | 8 ++++---- Code/Common/include/sitkImage.h | 4 ++-- Code/Common/include/sitkMacro.h | 12 ------------ Code/Common/include/sitkMemberFunctionFactory.hxx | 2 +- Code/Common/include/sitkTransform.h | 2 +- Code/Common/src/sitkConfigure.h.in | 3 --- Code/Common/src/sitkImageExplicit.cxx | 2 +- Code/Common/src/sitkPimpleImageBase.hxx | 4 ++-- Testing/Unit/sitkExceptionsTests.cxx | 2 +- 11 files changed, 12 insertions(+), 41 deletions(-) diff --git a/CMake/sitkCheckCXX11.cmake b/CMake/sitkCheckCXX11.cmake index 75312fe7b..a2f8d43af 100644 --- a/CMake/sitkCheckCXX11.cmake +++ b/CMake/sitkCheckCXX11.cmake @@ -64,7 +64,6 @@ cmake_push_check_state(RESET) # # Check for CXX11 Features # -sitkCXX11Test(SITK_HAS_CXX11_STATIC_ASSERT) sitkCXX11Test(SITK_HAS_CXX11_TYPE_TRAITS) sitkCXX11Test(SITK_HAS_CXX11_UNORDERED_MAP) sitkCXX11Test(SITK_HAS_CXX11_NULLPTR) diff --git a/CMake/sitk_check_cxx11.cxx b/CMake/sitk_check_cxx11.cxx index feb5d13de..0c8078058 100644 --- a/CMake/sitk_check_cxx11.cxx +++ b/CMake/sitk_check_cxx11.cxx @@ -1,17 +1,4 @@ -//------------------------------------- - -#ifdef SITK_HAS_CXX11_STATIC_ASSERT - -int main(void) -{ - static_assert( true, "this should compile with C++0x static_assert keyword support"); - return 0; -} - -#endif - - //------------------------------------- #ifdef SITK_HAS_CXX11_NULLPTR diff --git a/Code/Common/include/sitkDualMemberFunctionFactory.hxx b/Code/Common/include/sitkDualMemberFunctionFactory.hxx index 5675a49e6..2beb926dd 100644 --- a/Code/Common/include/sitkDualMemberFunctionFactory.hxx +++ b/Code/Common/include/sitkDualMemberFunctionFactory.hxx @@ -97,13 +97,13 @@ DualMemberFunctionFactory< TMemberFunctionPointer > assert( pixelID1 >= 0 && pixelID1 < typelist::Length< InstantiatedPixelIDTypeList >::Result ); assert( pixelID2 >= 0 && pixelID2 < typelist::Length< InstantiatedPixelIDTypeList >::Result ); - sitkStaticAssert( TImageType1::ImageDimension == 2 || TImageType1::ImageDimension == 3, + static_assert( TImageType1::ImageDimension == 2 || TImageType1::ImageDimension == 3, "Image Dimension out of range" ); - sitkStaticAssert( int(TImageType1::ImageDimension) == int(TImageType2::ImageDimension), + static_assert( int(TImageType1::ImageDimension) == int(TImageType2::ImageDimension), "Image Dimensions do not match" ); - sitkStaticAssert( IsInstantiated::Value, + static_assert( IsInstantiated::Value, "invalid pixel type for argument one"); - sitkStaticAssert( IsInstantiated::Value, + static_assert( IsInstantiated::Value, "invalid pixel type for argument two"); if ( pixelID1 >= 0 && pixelID1 < typelist::Length< InstantiatedPixelIDTypeList >::Result && diff --git a/Code/Common/include/sitkImage.h b/Code/Common/include/sitkImage.h index 73ea5383e..37c16a39b 100644 --- a/Code/Common/include/sitkImage.h +++ b/Code/Common/include/sitkImage.h @@ -129,7 +129,7 @@ namespace simple explicit Image( itk::SmartPointer image ) : m_PimpleImage( SITK_NULLPTR ) { - sitkStaticAssert( ImageTypeToPixelIDValue::Result != (int)sitkUnknown, + static_assert( ImageTypeToPixelIDValue::Result != (int)sitkUnknown, "invalid pixel type" ); this->InternalInitialization::Result, TImageType::ImageDimension>( image.GetPointer() ); } @@ -137,7 +137,7 @@ namespace simple explicit Image( TImageType* image ) : m_PimpleImage( SITK_NULLPTR ) { - sitkStaticAssert( ImageTypeToPixelIDValue::Result != (int)sitkUnknown, + static_assert( ImageTypeToPixelIDValue::Result != (int)sitkUnknown, "invalid pixel type" ); this->InternalInitialization::Result, TImageType::ImageDimension>( image ); } diff --git a/Code/Common/include/sitkMacro.h b/Code/Common/include/sitkMacro.h index 2348a20ff..6db6c7b48 100644 --- a/Code/Common/include/sitkMacro.h +++ b/Code/Common/include/sitkMacro.h @@ -115,18 +115,6 @@ class GenericException; #define sitkDoMacroJoin( X, Y ) sitkDoMacroJoin2(X,Y) #define sitkDoMacroJoin2( X, Y ) X##Y -#ifdef SITK_HAS_CXX11_STATIC_ASSERT -// utilize the c++11 static_assert if available -#define sitkStaticAssert( expr, str) static_assert( expr, str ) -#else - -template struct StaticAssertFailure; -template<> struct StaticAssertFailure{ enum { Value = 1 }; }; - -#define sitkStaticAssert( expr, str ) enum { sitkMacroJoin( static_assert_typedef, __LINE__) = sizeof( itk::simple::StaticAssertFailure<((expr) == 0 ? false : true )> ) }; - - -#endif } } diff --git a/Code/Common/include/sitkMemberFunctionFactory.hxx b/Code/Common/include/sitkMemberFunctionFactory.hxx index 9d76d3b72..2387cc093 100644 --- a/Code/Common/include/sitkMemberFunctionFactory.hxx +++ b/Code/Common/include/sitkMemberFunctionFactory.hxx @@ -91,7 +91,7 @@ void MemberFunctionFactory // this shouldn't occur, just may be useful for debugging assert( pixelID >= 0 && pixelID < typelist::Length< InstantiatedPixelIDTypeList >::Result ); - sitkStaticAssert( IsInstantiated::Value, + static_assert( IsInstantiated::Value, "UnInstantiated ImageType or dimension"); if ( pixelID >= 0 && pixelID < typelist::Length< InstantiatedPixelIDTypeList >::Result ) diff --git a/Code/Common/include/sitkTransform.h b/Code/Common/include/sitkTransform.h index e0ebcf914..610a98e9c 100644 --- a/Code/Common/include/sitkTransform.h +++ b/Code/Common/include/sitkTransform.h @@ -98,7 +98,7 @@ class SITKCommon_EXPORT Transform explicit Transform( itk::CompositeTransform< double, NDimension >* compositeTransform ) : m_PimpleTransform( SITK_NULLPTR ) { - sitkStaticAssert( NDimension == 2 || NDimension == 3, "Only 2D and 3D transforms are supported" ); + static_assert( NDimension == 2 || NDimension == 3, "Only 2D and 3D transforms are supported" ); if ( compositeTransform == SITK_NULLPTR ) { sitkExceptionMacro( "Unable to construct a null transform!" ); diff --git a/Code/Common/src/sitkConfigure.h.in b/Code/Common/src/sitkConfigure.h.in index a25da7dcc..7c2e36223 100644 --- a/Code/Common/src/sitkConfigure.h.in +++ b/Code/Common/src/sitkConfigure.h.in @@ -27,9 +27,6 @@ #endif #cmakedefine SITK_SimpleITKExplit_STATIC - -// defined if the system has C++0x "static_assert" keyword -#cmakedefine SITK_HAS_CXX11_STATIC_ASSERT // defined if the compiler has C++11 "nullptr" keyword #cmakedefine SITK_HAS_CXX11_NULLPTR #cmakedefine SITK_HAS_CXX11_TYPE_TRAITS diff --git a/Code/Common/src/sitkImageExplicit.cxx b/Code/Common/src/sitkImageExplicit.cxx index 880a354f4..0b03b807a 100644 --- a/Code/Common/src/sitkImageExplicit.cxx +++ b/Code/Common/src/sitkImageExplicit.cxx @@ -130,4 +130,4 @@ SITK_TEMPLATE_InternalInitialization( 28 ); SITK_TEMPLATE_InternalInitialization( 29 ); -sitkStaticAssert( typelist::Length::Result < 30, "Number of explicitly instantiated pixel types is more then expected!" ); +static_assert( typelist::Length::Result < 30, "Number of explicitly instantiated pixel types is more then expected!" ); diff --git a/Code/Common/src/sitkPimpleImageBase.hxx b/Code/Common/src/sitkPimpleImageBase.hxx index 302731dda..a1cc4be48 100644 --- a/Code/Common/src/sitkPimpleImageBase.hxx +++ b/Code/Common/src/sitkPimpleImageBase.hxx @@ -58,9 +58,9 @@ namespace itk PimpleImage ( ImageType* image ) : m_Image( image ) { - sitkStaticAssert( ImageType::ImageDimension == 4 || ImageType::ImageDimension == 3 || ImageType::ImageDimension == 2, + static_assert( ImageType::ImageDimension == 4 || ImageType::ImageDimension == 3 || ImageType::ImageDimension == 2, "Image Dimension out of range" ); - sitkStaticAssert( ImageTypeToPixelIDValue::Result != (int)sitkUnknown, + static_assert( ImageTypeToPixelIDValue::Result != (int)sitkUnknown, "invalid pixel type" ); if ( image == SITK_NULLPTR ) diff --git a/Testing/Unit/sitkExceptionsTests.cxx b/Testing/Unit/sitkExceptionsTests.cxx index 6ff4840e6..6b00c4944 100644 --- a/Testing/Unit/sitkExceptionsTests.cxx +++ b/Testing/Unit/sitkExceptionsTests.cxx @@ -55,7 +55,7 @@ TEST_F(sitkExceptionsTest, Test1) { TEST_F(sitkExceptionsTest, Test2) { // this can only be tested when true, if it was false the file won't compile - sitkStaticAssert( true, "this is just a test" ); + static_assert( true, "this is just a test" ); SUCCEED(); } From 7ffd634e10b1b19a879338279e0a3618c79efbc3 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 18 Feb 2020 10:46:12 -0500 Subject: [PATCH 368/400] Remove unused CXX_ALIAS_TEMPLATE --- CMake/sitkCheckCXX11.cmake | 1 - CMake/sitk_check_cxx11.cxx | 15 --------------- Code/Common/src/sitkConfigure.h.in | 1 - 3 files changed, 17 deletions(-) diff --git a/CMake/sitkCheckCXX11.cmake b/CMake/sitkCheckCXX11.cmake index a2f8d43af..9c4d1ebaf 100644 --- a/CMake/sitkCheckCXX11.cmake +++ b/CMake/sitkCheckCXX11.cmake @@ -67,4 +67,3 @@ cmake_push_check_state(RESET) sitkCXX11Test(SITK_HAS_CXX11_TYPE_TRAITS) sitkCXX11Test(SITK_HAS_CXX11_UNORDERED_MAP) sitkCXX11Test(SITK_HAS_CXX11_NULLPTR) -sitkCXX11Test(SITK_HAS_CXX11_ALIAS_TEMPLATE) diff --git a/CMake/sitk_check_cxx11.cxx b/CMake/sitk_check_cxx11.cxx index 0c8078058..cf9ef1197 100644 --- a/CMake/sitk_check_cxx11.cxx +++ b/CMake/sitk_check_cxx11.cxx @@ -21,21 +21,6 @@ int main(void) //------------------------------------- -#ifdef SITK_HAS_CXX11_ALIAS_TEMPLATE - -template -using ptr = T*; - -int main(void) -{ -ptr x; -return 0; -} - -#endif - -//------------------------------------- - #ifdef SITK_HAS_TR1_FUNCTIONAL #ifdef HAS_TR1_SUB_INCLUDE diff --git a/Code/Common/src/sitkConfigure.h.in b/Code/Common/src/sitkConfigure.h.in index 7c2e36223..d36ba53b9 100644 --- a/Code/Common/src/sitkConfigure.h.in +++ b/Code/Common/src/sitkConfigure.h.in @@ -31,7 +31,6 @@ #cmakedefine SITK_HAS_CXX11_NULLPTR #cmakedefine SITK_HAS_CXX11_TYPE_TRAITS #cmakedefine SITK_HAS_CXX11_UNORDERED_MAP -#cmakedefine SITK_HAS_CXX11_ALIAS_TEMPLATE // defined if compiler supports using template keyword to disambiguate // dependent names From a8511e14c638082b16874debea11596823d2e680 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 18 Feb 2020 10:57:51 -0500 Subject: [PATCH 369/400] Replace SITK_NULLPTR with standard nullptr --- CMake/sitkCheckCXX11.cmake | 1 - CMake/sitk_check_cxx11.cxx | 20 -------------- .../src/sitkCreateInterpolator.hxx | 2 +- .../include/sitkDualMemberFunctionFactory.hxx | 6 ++--- Code/Common/include/sitkImage.h | 4 +-- Code/Common/include/sitkMacro.h | 7 ----- .../include/sitkMemberFunctionFactory.hxx | 6 ++--- Code/Common/include/sitkTransform.h | 6 ++--- Code/Common/src/sitkAffineTransform.cxx | 24 ++++++++--------- Code/Common/src/sitkBSplineTransform.cxx | 26 +++++++++---------- Code/Common/src/sitkConfigure.h.in | 2 -- .../src/sitkDisplacementFieldTransform.cxx | 24 ++++++++--------- Code/Common/src/sitkEuler2DTransform.cxx | 16 ++++++------ Code/Common/src/sitkEuler3DTransform.cxx | 24 ++++++++--------- Code/Common/src/sitkExceptionObject.cxx | 16 ++++++------ Code/Common/src/sitkImage.cxx | 10 +++---- Code/Common/src/sitkImage.hxx | 8 +++--- Code/Common/src/sitkPimpleImageBase.hxx | 2 +- Code/Common/src/sitkProcessObject.cxx | 6 ++--- .../src/sitkScaleSkewVersor3DTransform.cxx | 18 ++++++------- Code/Common/src/sitkScaleTransform.cxx | 12 ++++----- .../Common/src/sitkScaleVersor3DTransform.cxx | 18 ++++++------- Code/Common/src/sitkSimilarity2DTransform.cxx | 20 +++++++------- Code/Common/src/sitkSimilarity3DTransform.cxx | 24 ++++++++--------- Code/Common/src/sitkTransform.cxx | 18 ++++++------- Code/Common/src/sitkTranslationTransform.cxx | 6 ++--- .../Common/src/sitkVersorRigid3DTransform.cxx | 20 +++++++------- Code/Common/src/sitkVersorTransform.cxx | 14 +++++----- Code/IO/src/sitkImageFileReader.cxx | 12 ++++----- Code/IO/src/sitkImageSeriesReader.cxx | 16 ++++++------ .../src/sitkCreateInterpolator.hxx | 2 +- .../src/sitkImageRegistrationMethod.cxx | 22 ++++++++-------- ...strationMethod_CreateParametersAdaptor.hxx | 12 ++++----- .../ExecuteInternalUpdateAndReturn.cxx.in | 2 +- Testing/Unit/TestBase/sitkCompareDriver.cxx | 6 ++--- Testing/Unit/sitkCommonTests.cxx | 2 +- .../Unit/sitkImageFilterTestTemplate.cxx.in | 2 +- Testing/Unit/sitkImageIOTests.cxx | 2 +- Testing/Unit/sitkTransformTests.cxx | 4 +-- 39 files changed, 206 insertions(+), 236 deletions(-) diff --git a/CMake/sitkCheckCXX11.cmake b/CMake/sitkCheckCXX11.cmake index 9c4d1ebaf..254fff14e 100644 --- a/CMake/sitkCheckCXX11.cmake +++ b/CMake/sitkCheckCXX11.cmake @@ -66,4 +66,3 @@ cmake_push_check_state(RESET) # sitkCXX11Test(SITK_HAS_CXX11_TYPE_TRAITS) sitkCXX11Test(SITK_HAS_CXX11_UNORDERED_MAP) -sitkCXX11Test(SITK_HAS_CXX11_NULLPTR) diff --git a/CMake/sitk_check_cxx11.cxx b/CMake/sitk_check_cxx11.cxx index cf9ef1197..b965505dd 100644 --- a/CMake/sitk_check_cxx11.cxx +++ b/CMake/sitk_check_cxx11.cxx @@ -1,26 +1,6 @@ //------------------------------------- -#ifdef SITK_HAS_CXX11_NULLPTR - -struct C { - void func(); -}; - -int main(void) -{ - int *x = nullptr; - char *c = nullptr; - void (C::*pmf)() = nullptr; - if (nullptr==c) {} - if (nullptr==pmf) {} - return 0; -} - -#endif - -//------------------------------------- - #ifdef SITK_HAS_TR1_FUNCTIONAL #ifdef HAS_TR1_SUB_INCLUDE diff --git a/Code/BasicFilters/src/sitkCreateInterpolator.hxx b/Code/BasicFilters/src/sitkCreateInterpolator.hxx index feae8de5a..5e6c682a9 100644 --- a/Code/BasicFilters/src/sitkCreateInterpolator.hxx +++ b/Code/BasicFilters/src/sitkCreateInterpolator.hxx @@ -177,7 +177,7 @@ CreateInterpolator( const TImageType *image, InterpolatorEnum itype ) return RType( p ); } default: - return SITK_NULLPTR; + return nullptr; } } diff --git a/Code/Common/include/sitkDualMemberFunctionFactory.hxx b/Code/Common/include/sitkDualMemberFunctionFactory.hxx index 2beb926dd..62bb68fec 100644 --- a/Code/Common/include/sitkDualMemberFunctionFactory.hxx +++ b/Code/Common/include/sitkDualMemberFunctionFactory.hxx @@ -48,7 +48,7 @@ struct DualMemberFunctionInstantiater template typename EnableIf< IsInstantiated::Value && IsInstantiated::Value >::Type - operator()( TPixelIDType1* t1=SITK_NULLPTR, TPixelIDType2*t2=SITK_NULLPTR ) const + operator()( TPixelIDType1* t1=nullptr, TPixelIDType2*t2=nullptr ) const { (void)t1; (void)t2; @@ -57,7 +57,7 @@ struct DualMemberFunctionInstantiater typedef TAddressor AddressorType; AddressorType addressor; - m_Factory.Register(addressor.CLANG_TEMPLATE operator()(), (ImageType1*)(SITK_NULLPTR), (ImageType2*)(SITK_NULLPTR) ); + m_Factory.Register(addressor.CLANG_TEMPLATE operator()(), (ImageType1*)(nullptr), (ImageType2*)(nullptr) ); } @@ -65,7 +65,7 @@ struct DualMemberFunctionInstantiater template typename DisableIf< IsInstantiated::Value && IsInstantiated::Value >::Type - operator()( TPixelIDType1*t1=SITK_NULLPTR, TPixelIDType2*t2=SITK_NULLPTR ) const + operator()( TPixelIDType1*t1=nullptr, TPixelIDType2*t2=nullptr ) const { (void)t1; (void)t2; diff --git a/Code/Common/include/sitkImage.h b/Code/Common/include/sitkImage.h index 37c16a39b..b654c1f25 100644 --- a/Code/Common/include/sitkImage.h +++ b/Code/Common/include/sitkImage.h @@ -127,7 +127,7 @@ namespace simple */ template explicit Image( itk::SmartPointer image ) - : m_PimpleImage( SITK_NULLPTR ) + : m_PimpleImage( nullptr ) { static_assert( ImageTypeToPixelIDValue::Result != (int)sitkUnknown, "invalid pixel type" ); @@ -135,7 +135,7 @@ namespace simple } template explicit Image( TImageType* image ) - : m_PimpleImage( SITK_NULLPTR ) + : m_PimpleImage( nullptr ) { static_assert( ImageTypeToPixelIDValue::Result != (int)sitkUnknown, "invalid pixel type" ); diff --git a/Code/Common/include/sitkMacro.h b/Code/Common/include/sitkMacro.h index 6db6c7b48..41b41b8da 100644 --- a/Code/Common/include/sitkMacro.h +++ b/Code/Common/include/sitkMacro.h @@ -104,13 +104,6 @@ class GenericException; } \ } -#if defined(SITK_HAS_CXX11_NULLPTR) -#define SITK_NULLPTR nullptr -#else -#define SITK_NULLPTR NULL -#endif - - #define sitkMacroJoin( X, Y ) sitkDoMacroJoin( X, Y ) #define sitkDoMacroJoin( X, Y ) sitkDoMacroJoin2(X,Y) #define sitkDoMacroJoin2( X, Y ) X##Y diff --git a/Code/Common/include/sitkMemberFunctionFactory.hxx b/Code/Common/include/sitkMemberFunctionFactory.hxx index 2387cc093..d36888854 100644 --- a/Code/Common/include/sitkMemberFunctionFactory.hxx +++ b/Code/Common/include/sitkMemberFunctionFactory.hxx @@ -49,21 +49,21 @@ struct MemberFunctionInstantiater template typename EnableIf< IsInstantiated::Value >::Type - operator()( TPixelIDType*id=SITK_NULLPTR ) const + operator()( TPixelIDType*id=nullptr ) const { Unused( id ); typedef typename PixelIDToImageType::ImageType ImageType; typedef TAddressor AddressorType; AddressorType addressor; - m_Factory.Register(addressor.CLANG_TEMPLATE operator()(), (ImageType*)(SITK_NULLPTR)); + m_Factory.Register(addressor.CLANG_TEMPLATE operator()(), (ImageType*)(nullptr)); } // this methods is conditionally enabled when the PixelID is not instantiated template typename DisableIf< IsInstantiated::Value >::Type - operator()( TPixelIDType*id=SITK_NULLPTR ) const + operator()( TPixelIDType*id=nullptr ) const { Unused( id ); } diff --git a/Code/Common/include/sitkTransform.h b/Code/Common/include/sitkTransform.h index 610a98e9c..245c7d434 100644 --- a/Code/Common/include/sitkTransform.h +++ b/Code/Common/include/sitkTransform.h @@ -96,10 +96,10 @@ class SITKCommon_EXPORT Transform */ template explicit Transform( itk::CompositeTransform< double, NDimension >* compositeTransform ) - : m_PimpleTransform( SITK_NULLPTR ) + : m_PimpleTransform( nullptr ) { static_assert( NDimension == 2 || NDimension == 3, "Only 2D and 3D transforms are supported" ); - if ( compositeTransform == SITK_NULLPTR ) + if ( compositeTransform == nullptr ) { sitkExceptionMacro( "Unable to construct a null transform!" ); } @@ -271,7 +271,7 @@ class SITKCommon_EXPORT Transform private: template< unsigned int VDimension> - void InternalInitialization( TransformEnum type, itk::TransformBase *base = SITK_NULLPTR ); + void InternalInitialization( TransformEnum type, itk::TransformBase *base = nullptr ); struct TransformTryCastVisitor { diff --git a/Code/Common/src/sitkAffineTransform.cxx b/Code/Common/src/sitkAffineTransform.cxx index 5a2d25eb6..fe25d5f5c 100644 --- a/Code/Common/src/sitkAffineTransform.cxx +++ b/Code/Common/src/sitkAffineTransform.cxx @@ -159,21 +159,21 @@ void AffineTransform::InternalInitialization(itk::TransformBase *transform) typelist::Visit callInternalInitialization; // explicitly remove all function pointer with reference to prior transform - this->m_pfSetCenter = SITK_NULLPTR; - this->m_pfGetCenter = SITK_NULLPTR; - this->m_pfSetTranslation = SITK_NULLPTR; - this->m_pfGetTranslation = SITK_NULLPTR; - this->m_pfSetMatrix = SITK_NULLPTR; - this->m_pfGetMatrix = SITK_NULLPTR; - this->m_pfScale1 = SITK_NULLPTR; - this->m_pfScale2 = SITK_NULLPTR; - this->m_pfShear = SITK_NULLPTR; - this->m_pfTranslate = SITK_NULLPTR; - this->m_pfRotate = SITK_NULLPTR; + this->m_pfSetCenter = nullptr; + this->m_pfGetCenter = nullptr; + this->m_pfSetTranslation = nullptr; + this->m_pfGetTranslation = nullptr; + this->m_pfSetMatrix = nullptr; + this->m_pfGetMatrix = nullptr; + this->m_pfScale1 = nullptr; + this->m_pfScale2 = nullptr; + this->m_pfShear = nullptr; + this->m_pfTranslate = nullptr; + this->m_pfRotate = nullptr; callInternalInitialization(visitor); - if ( this->m_pfSetCenter == SITK_NULLPTR ) + if ( this->m_pfSetCenter == nullptr ) { sitkExceptionMacro("Transform is not of type " << this->GetName() << "!" ); } diff --git a/Code/Common/src/sitkBSplineTransform.cxx b/Code/Common/src/sitkBSplineTransform.cxx index c6e9dea6a..288e74249 100644 --- a/Code/Common/src/sitkBSplineTransform.cxx +++ b/Code/Common/src/sitkBSplineTransform.cxx @@ -86,7 +86,7 @@ void SetCoefficientImages(TBSplineTransform* bspline, const std::vector & const itkImageType * itkImage = dynamic_cast (sitkImage.GetITKBase()); - if ( itkImage == SITK_NULLPTR ) + if ( itkImage == nullptr ) { sitkExceptionMacro( "Unexpected casting error!"); } @@ -234,21 +234,21 @@ void BSplineTransform::InternalInitialization(itk::TransformBase *transform) typelist::Visit callInternalInitialization; // explicitly remove all function pointer with reference to prior transform - this->m_pfGetTransformDomainDirection = SITK_NULLPTR; - this->m_pfSetTransformDomainDirection = SITK_NULLPTR; - this->m_pfGetTransformDomainMeshSize = SITK_NULLPTR; - this->m_pfSetTransformDomainMeshSize = SITK_NULLPTR; - this->m_pfGetTransformDomainOrigin = SITK_NULLPTR; - this->m_pfSetTransformDomainOrigin = SITK_NULLPTR; - this->m_pfGetTransformDomainPhysicalDimensions = SITK_NULLPTR; - this->m_pfSetTransformDomainPhysicalDimensions = SITK_NULLPTR; - this->m_pfGetCoefficientImages = SITK_NULLPTR; - this->m_pfSetCoefficientImages = SITK_NULLPTR; - this->m_pfGetOrder = SITK_NULLPTR; + this->m_pfGetTransformDomainDirection = nullptr; + this->m_pfSetTransformDomainDirection = nullptr; + this->m_pfGetTransformDomainMeshSize = nullptr; + this->m_pfSetTransformDomainMeshSize = nullptr; + this->m_pfGetTransformDomainOrigin = nullptr; + this->m_pfSetTransformDomainOrigin = nullptr; + this->m_pfGetTransformDomainPhysicalDimensions = nullptr; + this->m_pfSetTransformDomainPhysicalDimensions = nullptr; + this->m_pfGetCoefficientImages = nullptr; + this->m_pfSetCoefficientImages = nullptr; + this->m_pfGetOrder = nullptr; callInternalInitialization(visitor); - if ( this->m_pfGetOrder == SITK_NULLPTR ) + if ( this->m_pfGetOrder == nullptr ) { sitkExceptionMacro("Transform is not of type " << this->GetName() << "!" ); } diff --git a/Code/Common/src/sitkConfigure.h.in b/Code/Common/src/sitkConfigure.h.in index d36ba53b9..c709ce608 100644 --- a/Code/Common/src/sitkConfigure.h.in +++ b/Code/Common/src/sitkConfigure.h.in @@ -27,8 +27,6 @@ #endif #cmakedefine SITK_SimpleITKExplit_STATIC -// defined if the compiler has C++11 "nullptr" keyword -#cmakedefine SITK_HAS_CXX11_NULLPTR #cmakedefine SITK_HAS_CXX11_TYPE_TRAITS #cmakedefine SITK_HAS_CXX11_UNORDERED_MAP diff --git a/Code/Common/src/sitkDisplacementFieldTransform.cxx b/Code/Common/src/sitkDisplacementFieldTransform.cxx index fd9482d2b..a79228bc0 100644 --- a/Code/Common/src/sitkDisplacementFieldTransform.cxx +++ b/Code/Common/src/sitkDisplacementFieldTransform.cxx @@ -261,19 +261,19 @@ void DisplacementFieldTransform::InternalInitialization(itk::TransformBase *tran typelist::Visit callInternalInitialization; // explicitly remove all function pointer with reference to prior transform - m_pfSetDisplacementField = SITK_NULLPTR; - m_pfGetDisplacementField = SITK_NULLPTR; - m_pfSetInverseDisplacementField = SITK_NULLPTR; - m_pfGetInverseDisplacementField = SITK_NULLPTR; - m_pfSetInterpolator = SITK_NULLPTR; - m_pfGetInterpolator = SITK_NULLPTR; - m_pfSetSmoothingOff = SITK_NULLPTR; - m_pfSetSmoothingGaussianOnUpdate = SITK_NULLPTR; - m_pfSetSmoothingBSplineOnUpdate = SITK_NULLPTR; + m_pfSetDisplacementField = nullptr; + m_pfGetDisplacementField = nullptr; + m_pfSetInverseDisplacementField = nullptr; + m_pfGetInverseDisplacementField = nullptr; + m_pfSetInterpolator = nullptr; + m_pfGetInterpolator = nullptr; + m_pfSetSmoothingOff = nullptr; + m_pfSetSmoothingGaussianOnUpdate = nullptr; + m_pfSetSmoothingBSplineOnUpdate = nullptr; callInternalInitialization(visitor); - if ( this->m_pfSetDisplacementField == SITK_NULLPTR ) + if ( this->m_pfSetDisplacementField == nullptr ) { sitkExceptionMacro("Transform is not of type " << this->GetName() << "!" ); } @@ -327,7 +327,7 @@ Image DisplacementFieldTransform::InternalGetDisplacementField( const TDisplacem // field, but it does not have the correct reference count. typedef typename TDisplacementFieldTransform::DisplacementFieldType DisplacementFieldType; DisplacementFieldType *itkDisplacement = const_cast(itkDisplacementTx->GetDisplacementField()); - if (itkDisplacement != SITK_NULLPTR) + if (itkDisplacement != nullptr) { return Image(GetVectorImageFromImage(itkDisplacement)); } @@ -339,7 +339,7 @@ Image DisplacementFieldTransform::InternalGetInverseDisplacementField( const TDi { typedef typename TDisplacementFieldTransform::DisplacementFieldType DisplacementFieldType; DisplacementFieldType *itkDisplacement = const_cast(itkDisplacementTx->GetInverseDisplacementField()); - if (itkDisplacement != SITK_NULLPTR) + if (itkDisplacement != nullptr) { return Image(GetVectorImageFromImage(itkDisplacement)); } diff --git a/Code/Common/src/sitkEuler2DTransform.cxx b/Code/Common/src/sitkEuler2DTransform.cxx index cd6d95bf5..42e278f4e 100644 --- a/Code/Common/src/sitkEuler2DTransform.cxx +++ b/Code/Common/src/sitkEuler2DTransform.cxx @@ -133,14 +133,14 @@ void Euler2DTransform::InternalInitialization(itk::TransformBase *transform) typedef itk::Euler2DTransform TransformType; TransformType *t = dynamic_cast(transform); - this->m_pfSetCenter = SITK_NULLPTR; - this->m_pfGetCenter = SITK_NULLPTR; - this->m_pfSetTranslation = SITK_NULLPTR; - this->m_pfGetTranslation = SITK_NULLPTR; - this->m_pfSetAngle = SITK_NULLPTR; - this->m_pfGetAngle = SITK_NULLPTR; - this->m_pfGetMatrix = SITK_NULLPTR; - this->m_pfSetMatrix = SITK_NULLPTR; + this->m_pfSetCenter = nullptr; + this->m_pfGetCenter = nullptr; + this->m_pfSetTranslation = nullptr; + this->m_pfGetTranslation = nullptr; + this->m_pfSetAngle = nullptr; + this->m_pfGetAngle = nullptr; + this->m_pfGetMatrix = nullptr; + this->m_pfSetMatrix = nullptr; if (t && (typeid(*t) == typeid(TransformType))) { diff --git a/Code/Common/src/sitkEuler3DTransform.cxx b/Code/Common/src/sitkEuler3DTransform.cxx index eafe3b6b2..dc08f113e 100644 --- a/Code/Common/src/sitkEuler3DTransform.cxx +++ b/Code/Common/src/sitkEuler3DTransform.cxx @@ -155,18 +155,18 @@ void Euler3DTransform::InternalInitialization(itk::TransformBase *transform) TransformType *t = dynamic_cast(transform); // explicitly remove all function pointer with reference to prior transform - this->m_pfSetCenter = SITK_NULLPTR; - this->m_pfGetCenter = SITK_NULLPTR; - this->m_pfSetTranslation = SITK_NULLPTR; - this->m_pfGetTranslation = SITK_NULLPTR; - this->m_pfSetRotation = SITK_NULLPTR; - this->m_pfGetAngleX = SITK_NULLPTR; - this->m_pfGetAngleY = SITK_NULLPTR; - this->m_pfGetAngleZ = SITK_NULLPTR; - this->m_pfSetComputeZYX = SITK_NULLPTR; - this->m_pfGetComputeZYX = SITK_NULLPTR; - this->m_pfGetMatrix = SITK_NULLPTR; - this->m_pfSetMatrix = SITK_NULLPTR; + this->m_pfSetCenter = nullptr; + this->m_pfGetCenter = nullptr; + this->m_pfSetTranslation = nullptr; + this->m_pfGetTranslation = nullptr; + this->m_pfSetRotation = nullptr; + this->m_pfGetAngleX = nullptr; + this->m_pfGetAngleY = nullptr; + this->m_pfGetAngleZ = nullptr; + this->m_pfSetComputeZYX = nullptr; + this->m_pfGetComputeZYX = nullptr; + this->m_pfGetMatrix = nullptr; + this->m_pfSetMatrix = nullptr; if (t && (typeid(*t) == typeid(TransformType))) { diff --git a/Code/Common/src/sitkExceptionObject.cxx b/Code/Common/src/sitkExceptionObject.cxx index 3ae725d03..23d3d32d6 100644 --- a/Code/Common/src/sitkExceptionObject.cxx +++ b/Code/Common/src/sitkExceptionObject.cxx @@ -30,7 +30,7 @@ namespace simple { GenericException::GenericException() SITK_NOEXCEPT - : m_PimpleException( SITK_NULLPTR ) + : m_PimpleException( nullptr ) {} GenericException::GenericException( const GenericException &e ) SITK_NOEXCEPT @@ -39,14 +39,14 @@ GenericException::GenericException( const GenericException &e ) SITK_NOEXCEPT { try { - if ( e.m_PimpleException != SITK_NULLPTR ) + if ( e.m_PimpleException != nullptr ) { m_PimpleException = new itk::ExceptionObject( *e.m_PimpleException ); } } catch(...) // prevent exception from leaving constructor { - this->m_PimpleException = SITK_NULLPTR; + this->m_PimpleException = nullptr; } } @@ -58,7 +58,7 @@ GenericException::GenericException(const char *file, unsigned int lineNumber) SI } catch(...) // prevent exception from leaving constructor { - this->m_PimpleException = SITK_NULLPTR; + this->m_PimpleException = nullptr; } } @@ -71,7 +71,7 @@ GenericException::GenericException(const std::string & file, unsigned int lineNu } catch(...) // prevent exception from leaving constructor { - this->m_PimpleException = SITK_NULLPTR; + this->m_PimpleException = nullptr; } } @@ -86,7 +86,7 @@ GenericException::GenericException(const std::string & file, } catch(...) // prevent exception from leaving constructor { - this->m_PimpleException = SITK_NULLPTR; + this->m_PimpleException = nullptr; } } @@ -109,8 +109,8 @@ bool GenericException::operator==(const GenericException & orig) const { return this->m_PimpleException == orig.m_PimpleException; } - else if ( this->m_PimpleException == SITK_NULLPTR && - orig.m_PimpleException == SITK_NULLPTR ) + else if ( this->m_PimpleException == nullptr && + orig.m_PimpleException == nullptr ) { return true; } diff --git a/Code/Common/src/sitkImage.cxx b/Code/Common/src/sitkImage.cxx index 6172d25a6..ecf9493c2 100644 --- a/Code/Common/src/sitkImage.cxx +++ b/Code/Common/src/sitkImage.cxx @@ -33,11 +33,11 @@ namespace itk Image::~Image( ) { delete this->m_PimpleImage; - this->m_PimpleImage = SITK_NULLPTR; + this->m_PimpleImage = nullptr; } Image::Image( ) - : m_PimpleImage( SITK_NULLPTR ) + : m_PimpleImage( nullptr ) { Allocate ( 0, 0, 0, 0, sitkUInt8, 1 ); } @@ -58,19 +58,19 @@ namespace itk } Image::Image( unsigned int Width, unsigned int Height, PixelIDValueEnum ValueEnum ) - : m_PimpleImage( SITK_NULLPTR ) + : m_PimpleImage( nullptr ) { Allocate ( Width, Height, 0, 0, ValueEnum, 0 ); } Image::Image( unsigned int Width, unsigned int Height, unsigned int Depth, PixelIDValueEnum ValueEnum ) - : m_PimpleImage( SITK_NULLPTR ) + : m_PimpleImage( nullptr ) { Allocate ( Width, Height, Depth, 0, ValueEnum, 0 ); } Image::Image( const std::vector< unsigned int > &size, PixelIDValueEnum ValueEnum, unsigned int numberOfComponents ) - : m_PimpleImage( SITK_NULLPTR ) + : m_PimpleImage( nullptr ) { if ( size.size() == 2 ) { diff --git a/Code/Common/src/sitkImage.hxx b/Code/Common/src/sitkImage.hxx index 7c5f9a6d5..692c37213 100644 --- a/Code/Common/src/sitkImage.hxx +++ b/Code/Common/src/sitkImage.hxx @@ -64,7 +64,7 @@ namespace itk { // no need to check if null delete this->m_PimpleImage; - this->m_PimpleImage = SITK_NULLPTR; + this->m_PimpleImage = nullptr; this->m_PimpleImage = new PimpleImage( image ); } @@ -110,7 +110,7 @@ namespace itk image->FillBuffer ( itk::NumericTraits::ZeroValue() ); delete this->m_PimpleImage; - this->m_PimpleImage = SITK_NULLPTR; + this->m_PimpleImage = nullptr; m_PimpleImage = new PimpleImage( image ); } @@ -158,7 +158,7 @@ namespace itk image->FillBuffer ( zero ); delete this->m_PimpleImage; - this->m_PimpleImage = SITK_NULLPTR; + this->m_PimpleImage = nullptr; m_PimpleImage = new PimpleImage( image ); } @@ -203,7 +203,7 @@ namespace itk image->SetBackgroundValue( 0 ); delete this->m_PimpleImage; - this->m_PimpleImage = SITK_NULLPTR; + this->m_PimpleImage = nullptr; m_PimpleImage = new PimpleImage( image ); } diff --git a/Code/Common/src/sitkPimpleImageBase.hxx b/Code/Common/src/sitkPimpleImageBase.hxx index a1cc4be48..a3a6f4446 100644 --- a/Code/Common/src/sitkPimpleImageBase.hxx +++ b/Code/Common/src/sitkPimpleImageBase.hxx @@ -63,7 +63,7 @@ namespace itk static_assert( ImageTypeToPixelIDValue::Result != (int)sitkUnknown, "invalid pixel type" ); - if ( image == SITK_NULLPTR ) + if ( image == nullptr ) { sitkExceptionMacro( << "Unable to initialize an image with NULL" ); } diff --git a/Code/Common/src/sitkProcessObject.cxx b/Code/Common/src/sitkProcessObject.cxx index ee36cd0eb..140583d06 100644 --- a/Code/Common/src/sitkProcessObject.cxx +++ b/Code/Common/src/sitkProcessObject.cxx @@ -103,7 +103,7 @@ class SimpleAdaptorCommand ProcessObject::ProcessObject () : m_Debug(ProcessObject::GetGlobalDefaultDebug()), m_NumberOfThreads(ProcessObject::GetGlobalDefaultNumberOfThreads()), - m_ActiveProcess(SITK_NULLPTR), + m_ActiveProcess(nullptr), m_ProgressMeasurement(0.0) { static bool firstTime=true; @@ -413,7 +413,7 @@ void ProcessObject::PreUpdate(itk::ProcessObject *p) } catch (...) { - this->m_ActiveProcess = SITK_NULLPTR; + this->m_ActiveProcess = nullptr; throw; } @@ -494,7 +494,7 @@ void ProcessObject::OnActiveProcessDelete( ) i->m_ITKTag = std::numeric_limits::max(); } - this->m_ActiveProcess = SITK_NULLPTR; + this->m_ActiveProcess = nullptr; } diff --git a/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx b/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx index f531f5dd4..fe64620d9 100644 --- a/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx +++ b/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx @@ -182,15 +182,15 @@ void ScaleSkewVersor3DTransform::InternalInitialization(itk::TransformBase *tran TransformType *t = dynamic_cast(transform); // explicitly remove all function pointer with reference to prior transform - this->m_pfSetCenter = SITK_NULLPTR; - this->m_pfGetCenter = SITK_NULLPTR; - this->m_pfSetTranslation = SITK_NULLPTR; - this->m_pfGetTranslation = SITK_NULLPTR; - this->m_pfSetRotation1 = SITK_NULLPTR; - this->m_pfSetRotation2 = SITK_NULLPTR; - this->m_pfGetVersor = SITK_NULLPTR; - this->m_pfTranslate = SITK_NULLPTR; - this->m_pfGetMatrix = SITK_NULLPTR; + this->m_pfSetCenter = nullptr; + this->m_pfGetCenter = nullptr; + this->m_pfSetTranslation = nullptr; + this->m_pfGetTranslation = nullptr; + this->m_pfSetRotation1 = nullptr; + this->m_pfSetRotation2 = nullptr; + this->m_pfGetVersor = nullptr; + this->m_pfTranslate = nullptr; + this->m_pfGetMatrix = nullptr; if (t && (typeid(*t) == typeid(TransformType))) { diff --git a/Code/Common/src/sitkScaleTransform.cxx b/Code/Common/src/sitkScaleTransform.cxx index 35185f038..87537dd69 100644 --- a/Code/Common/src/sitkScaleTransform.cxx +++ b/Code/Common/src/sitkScaleTransform.cxx @@ -108,15 +108,15 @@ void ScaleTransform::InternalInitialization(itk::TransformBase *transform) typelist::Visit callInternalInitialization; - this->m_pfSetCenter = SITK_NULLPTR; - this->m_pfGetCenter = SITK_NULLPTR; - this->m_pfSetScale = SITK_NULLPTR; - this->m_pfGetScale = SITK_NULLPTR; - this->m_pfGetMatrix = SITK_NULLPTR; + this->m_pfSetCenter = nullptr; + this->m_pfGetCenter = nullptr; + this->m_pfSetScale = nullptr; + this->m_pfGetScale = nullptr; + this->m_pfGetMatrix = nullptr; callInternalInitialization(visitor); - if ( this->m_pfSetCenter == SITK_NULLPTR ) + if ( this->m_pfSetCenter == nullptr ) { sitkExceptionMacro("Transform is not of type " << this->GetName() << "!" ); } diff --git a/Code/Common/src/sitkScaleVersor3DTransform.cxx b/Code/Common/src/sitkScaleVersor3DTransform.cxx index d1317356a..1f3dbdffd 100644 --- a/Code/Common/src/sitkScaleVersor3DTransform.cxx +++ b/Code/Common/src/sitkScaleVersor3DTransform.cxx @@ -166,15 +166,15 @@ void ScaleVersor3DTransform::InternalInitialization(itk::TransformBase *transfor TransformType *t = dynamic_cast(transform); // explicitly remove all function pointer with reference to prior transform - this->m_pfSetCenter = SITK_NULLPTR; - this->m_pfGetCenter = SITK_NULLPTR; - this->m_pfSetTranslation = SITK_NULLPTR; - this->m_pfGetTranslation = SITK_NULLPTR; - this->m_pfSetRotation1 = SITK_NULLPTR; - this->m_pfSetRotation2 = SITK_NULLPTR; - this->m_pfGetVersor = SITK_NULLPTR; - this->m_pfTranslate = SITK_NULLPTR; - this->m_pfGetMatrix = SITK_NULLPTR; + this->m_pfSetCenter = nullptr; + this->m_pfGetCenter = nullptr; + this->m_pfSetTranslation = nullptr; + this->m_pfGetTranslation = nullptr; + this->m_pfSetRotation1 = nullptr; + this->m_pfSetRotation2 = nullptr; + this->m_pfGetVersor = nullptr; + this->m_pfTranslate = nullptr; + this->m_pfGetMatrix = nullptr; if (t && (typeid(*t) == typeid(TransformType))) { diff --git a/Code/Common/src/sitkSimilarity2DTransform.cxx b/Code/Common/src/sitkSimilarity2DTransform.cxx index 7750155bc..4f3e38432 100644 --- a/Code/Common/src/sitkSimilarity2DTransform.cxx +++ b/Code/Common/src/sitkSimilarity2DTransform.cxx @@ -147,16 +147,16 @@ void Similarity2DTransform::InternalInitialization(itk::TransformBase *transform TransformType *t = dynamic_cast(transform); // explicitly remove all function pointer with reference to prior transform - this->m_pfSetCenter = SITK_NULLPTR; - this->m_pfGetCenter = SITK_NULLPTR; - this->m_pfSetTranslation = SITK_NULLPTR; - this->m_pfGetTranslation = SITK_NULLPTR; - this->m_pfSetAngle = SITK_NULLPTR; - this->m_pfGetAngle = SITK_NULLPTR; - this->m_pfSetScale = SITK_NULLPTR; - this->m_pfGetScale = SITK_NULLPTR; - this->m_pfGetMatrix = SITK_NULLPTR; - this->m_pfSetMatrix = SITK_NULLPTR; + this->m_pfSetCenter = nullptr; + this->m_pfGetCenter = nullptr; + this->m_pfSetTranslation = nullptr; + this->m_pfGetTranslation = nullptr; + this->m_pfSetAngle = nullptr; + this->m_pfGetAngle = nullptr; + this->m_pfSetScale = nullptr; + this->m_pfGetScale = nullptr; + this->m_pfGetMatrix = nullptr; + this->m_pfSetMatrix = nullptr; if (t && (typeid(*t) == typeid(TransformType))) { diff --git a/Code/Common/src/sitkSimilarity3DTransform.cxx b/Code/Common/src/sitkSimilarity3DTransform.cxx index 7334779d8..bb516d3cd 100644 --- a/Code/Common/src/sitkSimilarity3DTransform.cxx +++ b/Code/Common/src/sitkSimilarity3DTransform.cxx @@ -172,18 +172,18 @@ void Similarity3DTransform::InternalInitialization(itk::TransformBase *transform TransformType *t = dynamic_cast(transform); // explicitly remove all function pointer with reference to prior transform - this->m_pfSetCenter = SITK_NULLPTR; - this->m_pfGetCenter = SITK_NULLPTR; - this->m_pfSetTranslation = SITK_NULLPTR; - this->m_pfGetTranslation = SITK_NULLPTR; - this->m_pfSetRotation1 = SITK_NULLPTR; - this->m_pfSetRotation2 = SITK_NULLPTR; - this->m_pfGetVersor = SITK_NULLPTR; - this->m_pfSetScale = SITK_NULLPTR; - this->m_pfGetScale = SITK_NULLPTR; - this->m_pfTranslate = SITK_NULLPTR; - this->m_pfGetMatrix = SITK_NULLPTR; - this->m_pfSetMatrix = SITK_NULLPTR; + this->m_pfSetCenter = nullptr; + this->m_pfGetCenter = nullptr; + this->m_pfSetTranslation = nullptr; + this->m_pfGetTranslation = nullptr; + this->m_pfSetRotation1 = nullptr; + this->m_pfSetRotation2 = nullptr; + this->m_pfGetVersor = nullptr; + this->m_pfSetScale = nullptr; + this->m_pfGetScale = nullptr; + this->m_pfTranslate = nullptr; + this->m_pfGetMatrix = nullptr; + this->m_pfSetMatrix = nullptr; if (t && (typeid(*t) == typeid(TransformType))) { diff --git a/Code/Common/src/sitkTransform.cxx b/Code/Common/src/sitkTransform.cxx index 258771ebd..ec688407a 100644 --- a/Code/Common/src/sitkTransform.cxx +++ b/Code/Common/src/sitkTransform.cxx @@ -176,7 +176,7 @@ class HolderCommand void Execute(const itk::Object*, const itk::EventObject&) SITK_OVERRIDE {} protected: - HolderCommand() : m_Object(SITK_NULLPTR) {}; + HolderCommand() : m_Object(nullptr) {}; ~HolderCommand() { delete m_Object;} private: @@ -195,19 +195,19 @@ class HolderCommand // Transform::Transform( ) - : m_PimpleTransform( SITK_NULLPTR ) + : m_PimpleTransform( nullptr ) { m_PimpleTransform = new PimpleTransform >(); } Transform::Transform( itk::TransformBase *transformBase ) - : m_PimpleTransform( SITK_NULLPTR ) + : m_PimpleTransform( nullptr ) { this->InternalInitialization( transformBase ); } Transform::Transform( unsigned int dimensions, TransformEnum type) - : m_PimpleTransform( SITK_NULLPTR ) + : m_PimpleTransform( nullptr ) { if ( dimensions == 2 ) { @@ -227,11 +227,11 @@ Transform::Transform( itk::TransformBase *transformBase ) Transform::~Transform() { delete m_PimpleTransform; - this->m_PimpleTransform = SITK_NULLPTR; + this->m_PimpleTransform = nullptr; } Transform::Transform( const Transform &txf ) - : m_PimpleTransform( SITK_NULLPTR ) + : m_PimpleTransform( nullptr ) { Self::SetPimpleTransform( txf.m_PimpleTransform->ShallowCopy() ); } @@ -246,7 +246,7 @@ Transform::Transform( itk::TransformBase *transformBase ) Transform::Transform( Image &image, TransformEnum txType ) - : m_PimpleTransform( SITK_NULLPTR ) + : m_PimpleTransform( nullptr ) { @@ -372,7 +372,7 @@ void Transform::MakeUnique( void ) Transform::Transform( PimpleTransformBase *pimpleTransform ) : m_PimpleTransform( pimpleTransform ) { - if ( pimpleTransform == SITK_NULLPTR ) + if ( pimpleTransform == nullptr ) { sitkExceptionMacro("Invalid NULL PimpleTransform!"); } @@ -601,7 +601,7 @@ std::vector< double > Transform::TransformVector( const std::vector< double > &v std::unique_ptr temp; { // See if a new pimple transform can be created - PimpleTransformBase *p = SITK_NULLPTR; + PimpleTransformBase *p = nullptr; if (!this->m_PimpleTransform->GetInverse(p)) { return false; diff --git a/Code/Common/src/sitkTranslationTransform.cxx b/Code/Common/src/sitkTranslationTransform.cxx index 961ae5efb..c8d54b084 100644 --- a/Code/Common/src/sitkTranslationTransform.cxx +++ b/Code/Common/src/sitkTranslationTransform.cxx @@ -92,12 +92,12 @@ void TranslationTransform::InternalInitialization(itk::TransformBase *transform) typelist::Visit callInternalInitialization; // explicitly remove all function pointer with reference to prior transform - this->m_pfSetOffset = SITK_NULLPTR; - this->m_pfGetOffset = SITK_NULLPTR; + this->m_pfSetOffset = nullptr; + this->m_pfGetOffset = nullptr; callInternalInitialization(visitor); - if ( this->m_pfSetOffset == SITK_NULLPTR ) + if ( this->m_pfSetOffset == nullptr ) { sitkExceptionMacro("Transform is not of type " << this->GetName() << "!" ); } diff --git a/Code/Common/src/sitkVersorRigid3DTransform.cxx b/Code/Common/src/sitkVersorRigid3DTransform.cxx index 6f2a9718f..634a74820 100644 --- a/Code/Common/src/sitkVersorRigid3DTransform.cxx +++ b/Code/Common/src/sitkVersorRigid3DTransform.cxx @@ -156,16 +156,16 @@ void VersorRigid3DTransform::InternalInitialization(itk::TransformBase *transfor TransformType *t = dynamic_cast(transform); // explicitly remove all function pointer with reference to prior transform - this->m_pfSetCenter = SITK_NULLPTR; - this->m_pfGetCenter = SITK_NULLPTR; - this->m_pfSetTranslation = SITK_NULLPTR; - this->m_pfGetTranslation = SITK_NULLPTR; - this->m_pfSetRotation1 = SITK_NULLPTR; - this->m_pfSetRotation2 = SITK_NULLPTR; - this->m_pfGetVersor = SITK_NULLPTR; - this->m_pfTranslate = SITK_NULLPTR; - this->m_pfGetMatrix = SITK_NULLPTR; - this->m_pfSetMatrix = SITK_NULLPTR; + this->m_pfSetCenter = nullptr; + this->m_pfGetCenter = nullptr; + this->m_pfSetTranslation = nullptr; + this->m_pfGetTranslation = nullptr; + this->m_pfSetRotation1 = nullptr; + this->m_pfSetRotation2 = nullptr; + this->m_pfGetVersor = nullptr; + this->m_pfTranslate = nullptr; + this->m_pfGetMatrix = nullptr; + this->m_pfSetMatrix = nullptr; if (t && (typeid(*t) == typeid(TransformType))) { diff --git a/Code/Common/src/sitkVersorTransform.cxx b/Code/Common/src/sitkVersorTransform.cxx index ee96e26fa..d7689f1ad 100644 --- a/Code/Common/src/sitkVersorTransform.cxx +++ b/Code/Common/src/sitkVersorTransform.cxx @@ -134,13 +134,13 @@ void VersorTransform::InternalInitialization(itk::TransformBase *transform) TransformType *t = dynamic_cast(transform); // explicitly remove all function pointer with reference to prior transform - this->m_pfSetCenter = SITK_NULLPTR; - this->m_pfGetCenter = SITK_NULLPTR; - this->m_pfSetRotation1 = SITK_NULLPTR; - this->m_pfSetRotation2 = SITK_NULLPTR; - this->m_pfGetVersor = SITK_NULLPTR; - this->m_pfGetMatrix = SITK_NULLPTR; - this->m_pfSetMatrix = SITK_NULLPTR; + this->m_pfSetCenter = nullptr; + this->m_pfGetCenter = nullptr; + this->m_pfSetRotation1 = nullptr; + this->m_pfSetRotation2 = nullptr; + this->m_pfGetVersor = nullptr; + this->m_pfGetMatrix = nullptr; + this->m_pfSetMatrix = nullptr; if (t && (typeid(*t) == typeid(TransformType))) { diff --git a/Code/IO/src/sitkImageFileReader.cxx b/Code/IO/src/sitkImageFileReader.cxx index f3fa7a975..576c5bdf6 100644 --- a/Code/IO/src/sitkImageFileReader.cxx +++ b/Code/IO/src/sitkImageFileReader.cxx @@ -35,7 +35,7 @@ namespace itk { template< class TImageType> static void FixNonZeroIndex( TImageType * img ) { - assert( img != SITK_NULLPTR ); + assert( img != nullptr ); typename TImageType::RegionType r = img->GetLargestPossibleRegion(); typename TImageType::IndexType idx = r.GetIndex(); @@ -153,9 +153,9 @@ namespace itk { // release functions bound to old meta data dictionary if (m_MetaDataDictionary.get()) { - this->m_pfGetMetaDataKeys = SITK_NULLPTR; - this->m_pfHasMetaDataKey = SITK_NULLPTR; - this->m_pfGetMetaData = SITK_NULLPTR; + this->m_pfGetMetaDataKeys = nullptr; + this->m_pfHasMetaDataKey = nullptr; + this->m_pfGetMetaData = nullptr; } this->m_MetaDataDictionary.reset(new MetaDataDictionary(iobase->GetMetaDataDictionary())); @@ -351,7 +351,7 @@ namespace itk { // if the InstantiatedToken is correctly implemented this should // not occur assert( ImageTypeToPixelIDValue::Result != (int)sitkUnknown ); - assert( imageio != SITK_NULLPTR ); + assert( imageio != nullptr ); if ( m_ExtractSize.empty() || m_ExtractSize.size() == ImageType::ImageDimension) @@ -442,7 +442,7 @@ namespace itk { << itkImage->GetLargestPossibleRegion() ); } - assert(itkImage->GetSource() != SITK_NULLPTR); + assert(itkImage->GetSource() != nullptr); this->PreUpdate( itkImage->GetSource().GetPointer() ); extractor->Update(); diff --git a/Code/IO/src/sitkImageSeriesReader.cxx b/Code/IO/src/sitkImageSeriesReader.cxx index 2b9ce8c91..f60ae0f1b 100644 --- a/Code/IO/src/sitkImageSeriesReader.cxx +++ b/Code/IO/src/sitkImageSeriesReader.cxx @@ -73,7 +73,7 @@ namespace itk { ImageSeriesReader::ImageSeriesReader() : - m_Filter(SITK_NULLPTR), + m_Filter(nullptr), m_MetaDataDictionaryArrayUpdate(false) { @@ -88,7 +88,7 @@ namespace itk { ImageSeriesReader::~ImageSeriesReader() { - if (this->m_Filter != SITK_NULLPTR) + if (this->m_Filter != nullptr) { m_Filter->UnRegister(); } @@ -185,7 +185,7 @@ namespace itk { // if the IsInstantiated is correctly implemented this should // not occur assert( ImageTypeToPixelIDValue::Result != (int)sitkUnknown ); - assert( imageio != SITK_NULLPTR ); + assert( imageio != nullptr ); typename Reader::Pointer reader = Reader::New(); reader->SetImageIO( imageio ); reader->SetFileNames( this->m_FileNames ); @@ -193,13 +193,13 @@ namespace itk { reader->SetMetaDataDictionaryArrayUpdate(m_MetaDataDictionaryArrayUpdate); // release the old filter ( and output data ) - if ( this->m_Filter != SITK_NULLPTR) + if ( this->m_Filter != nullptr) { - this->m_pfGetMetaDataKeys = SITK_NULLPTR; - this->m_pfHasMetaDataKey = SITK_NULLPTR; - this->m_pfGetMetaData = SITK_NULLPTR; + this->m_pfGetMetaDataKeys = nullptr; + this->m_pfHasMetaDataKey = nullptr; + this->m_pfGetMetaData = nullptr; this->m_Filter->UnRegister(); - this->m_Filter = SITK_NULLPTR; + this->m_Filter = nullptr; } diff --git a/Code/Registration/src/sitkCreateInterpolator.hxx b/Code/Registration/src/sitkCreateInterpolator.hxx index feae8de5a..5e6c682a9 100644 --- a/Code/Registration/src/sitkCreateInterpolator.hxx +++ b/Code/Registration/src/sitkCreateInterpolator.hxx @@ -177,7 +177,7 @@ CreateInterpolator( const TImageType *image, InterpolatorEnum itype ) return RType( p ); } default: - return SITK_NULLPTR; + return nullptr; } } diff --git a/Code/Registration/src/sitkImageRegistrationMethod.cxx b/Code/Registration/src/sitkImageRegistrationMethod.cxx index 6785ee811..9c15be4de 100644 --- a/Code/Registration/src/sitkImageRegistrationMethod.cxx +++ b/Code/Registration/src/sitkImageRegistrationMethod.cxx @@ -1207,20 +1207,20 @@ void ImageRegistrationMethod::OnActiveProcessDelete( ) SITK_NOEXCEPT Superclass::OnActiveProcessDelete( ); // clean up all pointer functions here - this->m_pfGetOptimizerIteration = SITK_NULLPTR; - this->m_pfGetOptimizerPosition = SITK_NULLPTR; - this->m_pfGetOptimizerLearningRate = SITK_NULLPTR; - this->m_pfGetOptimizerConvergenceValue = SITK_NULLPTR; - this->m_pfGetMetricValue = SITK_NULLPTR; - this->m_pfGetMetricNumberOfValidPoints = SITK_NULLPTR; - this->m_pfGetOptimizerScales = SITK_NULLPTR; - this->m_pfGetOptimizerStopConditionDescription = SITK_NULLPTR; + this->m_pfGetOptimizerIteration = nullptr; + this->m_pfGetOptimizerPosition = nullptr; + this->m_pfGetOptimizerLearningRate = nullptr; + this->m_pfGetOptimizerConvergenceValue = nullptr; + this->m_pfGetMetricValue = nullptr; + this->m_pfGetMetricNumberOfValidPoints = nullptr; + this->m_pfGetOptimizerScales = nullptr; + this->m_pfGetOptimizerStopConditionDescription = nullptr; - this->m_pfUpdateWithBestValue = SITK_NULLPTR; + this->m_pfUpdateWithBestValue = nullptr; - this->m_pfGetCurrentLevel = SITK_NULLPTR; + this->m_pfGetCurrentLevel = nullptr; - this->m_ActiveOptimizer = SITK_NULLPTR; + this->m_ActiveOptimizer = nullptr; } diff --git a/Code/Registration/src/sitkImageRegistrationMethod_CreateParametersAdaptor.hxx b/Code/Registration/src/sitkImageRegistrationMethod_CreateParametersAdaptor.hxx index 7fa179d24..69539156c 100644 --- a/Code/Registration/src/sitkImageRegistrationMethod_CreateParametersAdaptor.hxx +++ b/Code/Registration/src/sitkImageRegistrationMethod_CreateParametersAdaptor.hxx @@ -45,7 +45,7 @@ CreateTransformParametersAdaptorBSpline(TTransformType *bsplineTransform, if ( scaleFactor < 1 ) { - return SITK_NULLPTR; + return nullptr; } typedef TTransformType BSplineTransformType; @@ -113,7 +113,7 @@ CreateTransformParametersAdaptorDisplacementField(TTransformBase *transform, DisplacementFieldTransformType *displacementFieldTransform = dynamic_cast(transform); if (!displacementFieldTransform) { - return SITK_NULLPTR; + return nullptr; } const DisplacementFieldType * displacementField = displacementFieldTransform->GetDisplacementField(); @@ -177,22 +177,22 @@ ImageRegistrationMethod::CreateTransformParametersAdaptor(TRegistrationMethod* m bsplineScaleFactor = m_TransformBSplineScaleFactors[level]; } - TransformParametersAdaptorTypePointer adaptor = SITK_NULLPTR; - if (displacementField != SITK_NULLPTR) + TransformParametersAdaptorTypePointer adaptor = nullptr; + if (displacementField != nullptr) { adaptor = CreateTransformParametersAdaptorDisplacementField( displacementField, shrinkFactors, fixedImage, level ); } - else if (bsplineO3 != SITK_NULLPTR) + else if (bsplineO3 != nullptr) { adaptor = CreateTransformParametersAdaptorBSpline( bsplineO3, shrinkFactors, fixedImage, bsplineScaleFactor ); } - else if (bsplineO2 != SITK_NULLPTR) + else if (bsplineO2 != nullptr) { adaptor = CreateTransformParametersAdaptorBSpline( bsplineO2, shrinkFactors, diff --git a/ExpandTemplateGenerator/Components/ExecuteInternalUpdateAndReturn.cxx.in b/ExpandTemplateGenerator/Components/ExecuteInternalUpdateAndReturn.cxx.in index 3f28f3a0f..f9956e5d6 100644 --- a/ExpandTemplateGenerator/Components/ExecuteInternalUpdateAndReturn.cxx.in +++ b/ExpandTemplateGenerator/Components/ExecuteInternalUpdateAndReturn.cxx.in @@ -15,7 +15,7 @@ OUT=OUT..[[ ]] for i = 1,#measurements do if measurements[i].active then - OUT=OUT..' this->m_pfGet'..measurements[i].name..' = SITK_NULLPTR;\ + OUT=OUT..' this->m_pfGet'..measurements[i].name..' = nullptr;\ ' end end diff --git a/Testing/Unit/TestBase/sitkCompareDriver.cxx b/Testing/Unit/TestBase/sitkCompareDriver.cxx index a7d98ae14..9c2024fc4 100644 --- a/Testing/Unit/TestBase/sitkCompareDriver.cxx +++ b/Testing/Unit/TestBase/sitkCompareDriver.cxx @@ -131,7 +131,7 @@ int TestDriverInvokeProcess( const ArgumentsList & args ) } std::cout << std::endl; - argv[args.size()] = SITK_NULLPTR; + argv[args.size()] = nullptr; #ifdef DEBUG std::cout << "Invoke Process: "; @@ -148,7 +148,7 @@ int TestDriverInvokeProcess( const ArgumentsList & args ) itksysProcess_SetPipeShared(process, itksysProcess_Pipe_STDOUT, true); itksysProcess_SetPipeShared(process, itksysProcess_Pipe_STDERR, true); itksysProcess_Execute(process); - itksysProcess_WaitForExit(process, SITK_NULLPTR); + itksysProcess_WaitForExit(process, nullptr); delete[] argv; @@ -218,7 +218,7 @@ return retCode; -int ProcessArguments(int *ac, ArgumentStringType *av, ProcessedOutputType * processedOutput = SITK_NULLPTR ) +int ProcessArguments(int *ac, ArgumentStringType *av, ProcessedOutputType * processedOutput = nullptr ) { regressionTestParameters.intensityTolerance = 2.0; diff --git a/Testing/Unit/sitkCommonTests.cxx b/Testing/Unit/sitkCommonTests.cxx index 6c765a1ec..19287c8e0 100644 --- a/Testing/Unit/sitkCommonTests.cxx +++ b/Testing/Unit/sitkCommonTests.cxx @@ -307,7 +307,7 @@ TEST( ProcessObject, DeleteCommandActiveProcess ) if ( m_Process.GetProgress() >= m_AbortAt ) { delete m_Cmd; - m_Cmd = SITK_NULLPTR; + m_Cmd = nullptr; } } diff --git a/Testing/Unit/sitkImageFilterTestTemplate.cxx.in b/Testing/Unit/sitkImageFilterTestTemplate.cxx.in index de025b59a..880e858da 100644 --- a/Testing/Unit/sitkImageFilterTestTemplate.cxx.in +++ b/Testing/Unit/sitkImageFilterTestTemplate.cxx.in @@ -289,7 +289,7 @@ end) // Check that the input buffer is different that the output // buffer, this does not check complex or label map pixel types. - if (GetBufferAsVoid(output) != SITK_NULLPTR && GetBufferAsVoid(inputs[0]) != SITK_NULLPTR) + if (GetBufferAsVoid(output) != nullptr && GetBufferAsVoid(inputs[0]) != nullptr) { EXPECT_NE(GetBufferAsVoid(output), GetBufferAsVoid(inputs[0]) ) << "Input buffer was copyied to output!"; } diff --git a/Testing/Unit/sitkImageIOTests.cxx b/Testing/Unit/sitkImageIOTests.cxx index 89e6f6738..3e0a3f93f 100644 --- a/Testing/Unit/sitkImageIOTests.cxx +++ b/Testing/Unit/sitkImageIOTests.cxx @@ -126,7 +126,7 @@ TEST(IO, ReadWriteInt64){ const char *extension_list[] = {"mha", "nii", "nrrd", - SITK_NULLPTR}; + nullptr}; for (unsigned int i = 0; extension_list[i]; ++i) { diff --git a/Testing/Unit/sitkTransformTests.cxx b/Testing/Unit/sitkTransformTests.cxx index 2a1f5b63a..78109f0f7 100644 --- a/Testing/Unit/sitkTransformTests.cxx +++ b/Testing/Unit/sitkTransformTests.cxx @@ -1134,7 +1134,7 @@ TEST(BasicFilters, DisplacementField_GetDisplacementField) typedef itk::VectorImage ImageBaseType; ImageBaseType *imageBase = dynamic_cast(displacementImage.GetITKBase()); - ASSERT_TRUE(imageBase != SITK_NULLPTR); + ASSERT_TRUE(imageBase != nullptr); EXPECT_FALSE(imageBase->GetPixelContainer()->GetContainerManageMemory()); sitk::Image result = sitk::InvertDisplacementField(displacementImage); @@ -1142,7 +1142,7 @@ TEST(BasicFilters, DisplacementField_GetDisplacementField) EXPECT_FALSE(imageBase->GetPixelContainer()->GetContainerManageMemory()); imageBase = dynamic_cast(result.GetITKBase()); - ASSERT_TRUE(imageBase != SITK_NULLPTR); + ASSERT_TRUE(imageBase != nullptr); EXPECT_TRUE(imageBase->GetPixelContainer()->GetContainerManageMemory()); } From 33473fbeab6b571d2c55fae897e50950187f627c Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 14 Feb 2020 14:35:35 -0500 Subject: [PATCH 370/400] Replace nsstd::unordered_map with std::unordered_map --- CMake/sitkCheckCXX11.cmake | 1 - CMake/sitk_check_cxx11.cxx | 18 --- .../include/sitkMemberFunctionFactoryBase.h | 105 ++++-------------- Code/Common/src/sitkConfigure.h.in | 1 - 4 files changed, 23 insertions(+), 102 deletions(-) diff --git a/CMake/sitkCheckCXX11.cmake b/CMake/sitkCheckCXX11.cmake index 254fff14e..7acd219ec 100644 --- a/CMake/sitkCheckCXX11.cmake +++ b/CMake/sitkCheckCXX11.cmake @@ -65,4 +65,3 @@ cmake_push_check_state(RESET) # Check for CXX11 Features # sitkCXX11Test(SITK_HAS_CXX11_TYPE_TRAITS) -sitkCXX11Test(SITK_HAS_CXX11_UNORDERED_MAP) diff --git a/CMake/sitk_check_cxx11.cxx b/CMake/sitk_check_cxx11.cxx index b965505dd..89cb248aa 100644 --- a/CMake/sitk_check_cxx11.cxx +++ b/CMake/sitk_check_cxx11.cxx @@ -61,24 +61,6 @@ int main(void) //------------------------------------- -#ifdef SITK_HAS_CXX11_UNORDERED_MAP - -#include - -int main(void) -{ - // On OSX with gcc 4.0, there is an internal const correctness issue - // in the following. - std::unordered_map s; - const std::unordered_map &c_ref = s; - c_ref.find(1); // Problem is here. - return 0; -} - -#endif - -//------------------------------------- - #ifdef SITK_HAS_TR1_UNORDERED_MAP diff --git a/Code/Common/include/sitkMemberFunctionFactoryBase.h b/Code/Common/include/sitkMemberFunctionFactoryBase.h index 5ed66cf91..b8d64ad0e 100644 --- a/Code/Common/include/sitkMemberFunctionFactoryBase.h +++ b/Code/Common/include/sitkMemberFunctionFactoryBase.h @@ -27,26 +27,17 @@ #include "Ancillary/TypeList.h" #include "Ancillary/FunctionTraits.h" -#include - -#if defined SITK_HAS_UNORDERED_MAP -#include "nsstd/unordered_map.h" -#else -#include -#endif +#include namespace itk { namespace simple { -// this namespace is internal classes not part of the external simple ITK interface +// this namespace is internal and not part of the external simple ITK interface namespace detail { - -#if defined SITK_HAS_UNORDERED_MAP - -template struct hash : public nsstd::hash{}; +template struct hash : public std::hash{}; /** \brief A specialization of the hash function. */ @@ -54,11 +45,10 @@ template <> struct hash< std::pair > : public std::unary_function, std::size_t> { std::size_t operator()( const std::pair &p ) const - { return nsstd::hash()( size_t(p.first) * prime + p.second ); } + { return std::hash()( size_t(p.first) * prime + p.second ); } private: static const std::size_t prime = 16777619u; }; -#endif template< typename TMemberFunctionPointer, typename TKey, @@ -84,11 +74,9 @@ class MemberFunctionFactoryBase : MemberFunctionFactoryBase( void ) -#if defined SITK_HAS_UNORDERED_MAP : m_PFunction4( typelist::Length::Result ), m_PFunction3( typelist::Length::Result ), m_PFunction2( typelist::Length::Result ) -#endif { } public: @@ -116,15 +104,10 @@ class MemberFunctionFactoryBase : } // maps of Keys to pointers to member functions -#if defined SITK_HAS_UNORDERED_MAP - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction4; - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction3; - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction2; -#else - std::map m_PFunction4; - std::map m_PFunction3; - std::map m_PFunction2; -#endif + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction4; + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction3; + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction2; + }; @@ -148,11 +131,9 @@ class MemberFunctionFactoryBase : MemberFunctionFactoryBase( void ) -#if defined SITK_HAS_UNORDERED_MAP : m_PFunction4( typelist::Length::Result ), m_PFunction3( typelist::Length::Result ), m_PFunction2( typelist::Length::Result ) -#endif { } public: @@ -183,16 +164,9 @@ class MemberFunctionFactoryBase : // maps of Keys to pointers to member functions -#if defined SITK_HAS_UNORDERED_MAP - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction4; - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction3; - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction2; -#else - std::map m_PFunction4; - std::map m_PFunction3; - std::map m_PFunction2; -#endif - + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction4; + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction3; + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction2; }; @@ -211,11 +185,9 @@ class MemberFunctionFactoryBase : MemberFunctionFactoryBase( void ) -#if defined SITK_HAS_UNORDERED_MAP : m_PFunction4( typelist::Length::Result ), m_PFunction3( typelist::Length::Result ), m_PFunction2( typelist::Length::Result ) -#endif { } public: @@ -247,16 +219,9 @@ class MemberFunctionFactoryBase : // maps of Keys to pointers to member functions -#if defined SITK_HAS_UNORDERED_MAP - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction4; - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction3; - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction2; -#else - std::map m_PFunction4; - std::map m_PFunction3; - std::map m_PFunction2; -#endif - + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction4; + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction3; + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction2; }; @@ -276,11 +241,9 @@ class MemberFunctionFactoryBase : MemberFunctionFactoryBase( void ) -#if defined SITK_HAS_UNORDERED_MAP : m_PFunction4( typelist::Length::Result ), m_PFunction3( typelist::Length::Result ), m_PFunction2( typelist::Length::Result ) -#endif { } public: @@ -311,15 +274,9 @@ class MemberFunctionFactoryBase : // maps of Keys to pointers to member functions -#if defined SITK_HAS_UNORDERED_MAP - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction4; - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction3; - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction2; -#else - std::map m_PFunction4; - std::map m_PFunction3; - std::map m_PFunction2; -#endif + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction4; + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction3; + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction2; }; @@ -340,11 +297,9 @@ class MemberFunctionFactoryBase : MemberFunctionFactoryBase( void ) -#if defined SITK_HAS_UNORDERED_MAP : m_PFunction4( typelist::Length::Result ), m_PFunction3( typelist::Length::Result ), m_PFunction2( typelist::Length::Result ) -#endif { } public: @@ -375,15 +330,9 @@ class MemberFunctionFactoryBase : // maps of Keys to pointers to member functions -#if defined SITK_HAS_UNORDERED_MAP - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction4; - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction3; - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction2; -#else - std::map m_PFunction4; - std::map m_PFunction3; - std::map m_PFunction2; -#endif + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction4; + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction3; + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction2; }; @@ -404,11 +353,9 @@ class MemberFunctionFactoryBase : MemberFunctionFactoryBase( void ) -#if defined SITK_HAS_UNORDERED_MAP : m_PFunction4( typelist::Length::Result ), m_PFunction3( typelist::Length::Result ), m_PFunction2( typelist::Length::Result ) -#endif { } public: @@ -445,15 +392,9 @@ class MemberFunctionFactoryBase : // maps of Keys to pointers to member functions -#if defined SITK_HAS_UNORDERED_MAP - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction4; - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction3; - nsstd::unordered_map< TKey, FunctionObjectType, hash > m_PFunction2; -#else - std::map m_PFunction4; - std::map m_PFunction3; - std::map m_PFunction2; -#endif + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction4; + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction3; + std::unordered_map< TKey, FunctionObjectType, hash > m_PFunction2; }; diff --git a/Code/Common/src/sitkConfigure.h.in b/Code/Common/src/sitkConfigure.h.in index c709ce608..a79498149 100644 --- a/Code/Common/src/sitkConfigure.h.in +++ b/Code/Common/src/sitkConfigure.h.in @@ -28,7 +28,6 @@ #cmakedefine SITK_SimpleITKExplit_STATIC #cmakedefine SITK_HAS_CXX11_TYPE_TRAITS -#cmakedefine SITK_HAS_CXX11_UNORDERED_MAP // defined if compiler supports using template keyword to disambiguate // dependent names From a57c8f016597ab97c2c6d377713fff337eee60c1 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 18 Feb 2020 10:25:35 -0500 Subject: [PATCH 371/400] Include map in BasicFilters header This allows the filters to use std::map in their interface. --- Code/BasicFilters/include/sitkBasicFilters.h | 1 + Code/Common/include/sitkMemberFunctionFactoryBase.h | 1 + 2 files changed, 2 insertions(+) diff --git a/Code/BasicFilters/include/sitkBasicFilters.h b/Code/BasicFilters/include/sitkBasicFilters.h index 61f05264b..3de750904 100644 --- a/Code/BasicFilters/include/sitkBasicFilters.h +++ b/Code/BasicFilters/include/sitkBasicFilters.h @@ -25,6 +25,7 @@ // todo this should be moved to a more local place #include "sitkTransform.h" +#include #if defined( SITKDLL ) #ifdef SimpleITKBasicFilters0_EXPORTS diff --git a/Code/Common/include/sitkMemberFunctionFactoryBase.h b/Code/Common/include/sitkMemberFunctionFactoryBase.h index b8d64ad0e..a05aff565 100644 --- a/Code/Common/include/sitkMemberFunctionFactoryBase.h +++ b/Code/Common/include/sitkMemberFunctionFactoryBase.h @@ -28,6 +28,7 @@ #include "Ancillary/FunctionTraits.h" #include +#include namespace itk { From 8f0599ccf0d3623c864e606cf918f7152e25bb1d Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 19 Feb 2020 13:55:50 -0500 Subject: [PATCH 372/400] Add CTest suppression for CircleCI adding host key to known hosts --- CMake/CTestCustom.cmake.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMake/CTestCustom.cmake.in b/CMake/CTestCustom.cmake.in index a97bdcdfe..34b2b000f 100644 --- a/CMake/CTestCustom.cmake.in +++ b/CMake/CTestCustom.cmake.in @@ -66,6 +66,9 @@ SET(CTEST_CUSTOM_WARNING_EXCEPTION # Warning from RH5 gcc 4.1.2 "tr1/mu_iterate.h.* warning: unused parameter '__tuple'" + + # Warning on CircleCI + "Warning: Permanently added.*to the list of known hosts" ) SET(CTEST_CUSTOM_ERROR_EXCEPTION From 6fa60362062c74009ffa88a51e2d56b8ac352b4a Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 19 Feb 2020 13:58:23 -0500 Subject: [PATCH 373/400] Use catch by reference to address compiler warning --- Testing/Unit/sitkLabelStatisticsTest.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Testing/Unit/sitkLabelStatisticsTest.cxx b/Testing/Unit/sitkLabelStatisticsTest.cxx index 70fb7b030..f3b248a14 100644 --- a/Testing/Unit/sitkLabelStatisticsTest.cxx +++ b/Testing/Unit/sitkLabelStatisticsTest.cxx @@ -43,7 +43,7 @@ TEST(LabelStatistics,Simple) { try { lsFilter.Execute ( intensityImage, labelImage ); - } catch ( itk::ExceptionObject e ) { + } catch ( itk::ExceptionObject &e ) { std::cout << "LabelStatistics failed: " << e.what() << std::endl; } From b283cc03f50d7603977eeb15f100aac367589afe Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 14 Feb 2020 16:20:37 -0500 Subject: [PATCH 374/400] Replace nsstd type_traits with C++ type_traits The nsstd namespace enabled uniform access to tr1, c++11 and compiler features. With the adoption of the c++11 standard the nsstd is no longer needed. --- CMake/sitkCheckCXX11.cmake | 1 - .../json/LabelStatisticsImageFilter.json | 2 +- Code/Common/include/nsstd/type_traits.h | 55 ------------------- Code/Common/include/sitkConditional.h | 4 +- Code/Common/include/sitkImage.h | 7 +-- Code/Common/include/sitkPixelIDTokens.h | 10 ++-- Code/Common/src/sitkConfigure.h.in | 2 - .../src/sitkDisplacementFieldTransform.cxx | 6 +- Code/Common/src/sitkImage.hxx | 2 +- Code/Common/src/sitkPimpleImageBase.hxx | 32 +++++------ Code/Common/src/sitkPimpleTransform.hxx | 10 ++-- Code/Common/src/sitkTransform.cxx | 2 - 12 files changed, 37 insertions(+), 96 deletions(-) delete mode 100644 Code/Common/include/nsstd/type_traits.h diff --git a/CMake/sitkCheckCXX11.cmake b/CMake/sitkCheckCXX11.cmake index 7acd219ec..259951044 100644 --- a/CMake/sitkCheckCXX11.cmake +++ b/CMake/sitkCheckCXX11.cmake @@ -64,4 +64,3 @@ cmake_push_check_state(RESET) # # Check for CXX11 Features # -sitkCXX11Test(SITK_HAS_CXX11_TYPE_TRAITS) diff --git a/Code/BasicFilters/json/LabelStatisticsImageFilter.json b/Code/BasicFilters/json/LabelStatisticsImageFilter.json index 9ffd05fae..74424e55f 100644 --- a/Code/BasicFilters/json/LabelStatisticsImageFilter.json +++ b/Code/BasicFilters/json/LabelStatisticsImageFilter.json @@ -28,7 +28,7 @@ "name" : "UseHistograms", "type" : "bool", "default" : "true", - "custom_itk_cast" : "if( m_UseHistograms)\n {\n typedef typename TImageType::PixelType PixelType;\n if( nsstd::is_same< PixelType, uint8_t >::value || nsstd::is_same< PixelType, int8_t >::value )\n {\n //NOTE: This is a heuristic that works exact median only for\n //(unsigned) char images.\n filter->SetHistogramParameters(256,std::numeric_limits::min()-0.5,std::numeric_limits::max()+0.5 );\n }\n else\n {\n itk::simple::MinimumMaximumImageFilter stats;\n stats.Execute( *inImage );\n filter->SetHistogramParameters(256,stats.GetMinimum(), stats.GetMaximum() );\n }\n }\n", + "custom_itk_cast" : "if( m_UseHistograms)\n {\n typedef typename TImageType::PixelType PixelType;\n if( std::is_same< PixelType, uint8_t >::value || std::is_same< PixelType, int8_t >::value )\n {\n //NOTE: This is a heuristic that works exact median only for\n //(unsigned) char images.\n filter->SetHistogramParameters(256,std::numeric_limits::min()-0.5,std::numeric_limits::max()+0.5 );\n }\n else\n {\n itk::simple::MinimumMaximumImageFilter stats;\n stats.Execute( *inImage );\n filter->SetHistogramParameters(256,stats.GetMinimum(), stats.GetMaximum() );\n }\n }\n", "briefdescriptionSet" : "", "detaileddescriptionSet" : "", "briefdescriptionGet" : "", diff --git a/Code/Common/include/nsstd/type_traits.h b/Code/Common/include/nsstd/type_traits.h deleted file mode 100644 index b8907b507..000000000 --- a/Code/Common/include/nsstd/type_traits.h +++ /dev/null @@ -1,55 +0,0 @@ -/*========================================================================= -* -* Copyright Insight Software Consortium -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0.txt -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -*=========================================================================*/ -#ifndef sitk_nsstd_type_traits_h -#define sitk_nsstd_type_traits_h - -#include "sitkConfigure.h" - -#if !defined SITK_HAS_TR1_TYPE_TRAITS && !defined SITK_HAS_CXX11_TYPE_TRAITS -#error "No system (tr1/c++11) type_traits header available!" -#endif - -#if defined SITK_HAS_CXX11_TYPE_TRAITS || !defined SITK_HAS_TR1_SUB_INCLUDE -#include -#else -#include -#endif - - -namespace itk -{ -namespace simple -{ -namespace nsstd -{ -#if defined SITK_HAS_TR1_TYPE_TRAITS && !defined SITK_HAS_CXX11_TYPE_TRAITS -using std::tr1::is_same; -using std::tr1::true_type; -using std::tr1::false_type; -using std::tr1::integral_constant; -#else -using std::is_same; -using std::true_type; -using std::false_type; -using std::integral_constant; -#endif -} -} -} - -#endif // sitk_nsstd_type_traits_h diff --git a/Code/Common/include/sitkConditional.h b/Code/Common/include/sitkConditional.h index 13efcf4fa..3a30fa58e 100644 --- a/Code/Common/include/sitkConditional.h +++ b/Code/Common/include/sitkConditional.h @@ -48,8 +48,8 @@ struct Conditional { typedef TIfFalse Type; }; template struct ConditionalValue : public itk::simple::Conditional, - nsstd::integral_constant >::Type + std::integral_constant, + std::integral_constant >::Type { private: typedef ConditionalValue Self; diff --git a/Code/Common/include/sitkImage.h b/Code/Common/include/sitkImage.h index b654c1f25..c6eeb4801 100644 --- a/Code/Common/include/sitkImage.h +++ b/Code/Common/include/sitkImage.h @@ -24,10 +24,9 @@ #include "sitkPixelIDTokens.h" #include "sitkEnableIf.h" -#include "nsstd/type_traits.h" - #include #include +#include namespace itk { @@ -498,11 +497,11 @@ namespace simple * @{ */ template - typename DisableIf::value>::Type + typename DisableIf::value>::Type ConditionalInternalInitialization( TImageType *i); template - typename EnableIf::value>::Type + typename EnableIf::value>::Type ConditionalInternalInitialization( TImageType *) { assert( false ); } /**@}*/ diff --git a/Code/Common/include/sitkPixelIDTokens.h b/Code/Common/include/sitkPixelIDTokens.h index 4683dc882..4d0ee1437 100644 --- a/Code/Common/include/sitkPixelIDTokens.h +++ b/Code/Common/include/sitkPixelIDTokens.h @@ -20,16 +20,16 @@ #include "sitkConfigure.h" #include "sitkPixelIDValues.h" -#include "nsstd/type_traits.h" +#include namespace itk { namespace simple { -typedef nsstd::true_type TrueType; -typedef nsstd::false_type FalseType; +typedef std::true_type TrueType; +typedef std::false_type FalseType; template struct IsBasic @@ -100,8 +100,8 @@ struct IsInstantiated || (VImageDimension == 4) #endif ); - typedef typename nsstd::integral_constant::value_type ValueType; - typedef typename nsstd::integral_constant::type Type; + typedef typename std::integral_constant::value_type ValueType; + typedef typename std::integral_constant::type Type; }; template struct IsInstantiated< itk::Image< TPixelType, VImageDimension>, 0 > diff --git a/Code/Common/src/sitkConfigure.h.in b/Code/Common/src/sitkConfigure.h.in index a79498149..6d9b63e4b 100644 --- a/Code/Common/src/sitkConfigure.h.in +++ b/Code/Common/src/sitkConfigure.h.in @@ -27,8 +27,6 @@ #endif #cmakedefine SITK_SimpleITKExplit_STATIC -#cmakedefine SITK_HAS_CXX11_TYPE_TRAITS - // defined if compiler supports using template keyword to disambiguate // dependent names #cmakedefine SITK_HAS_TEMPLATE_DISAMBIGUATOR_DEPENDENT_NAME diff --git a/Code/Common/src/sitkDisplacementFieldTransform.cxx b/Code/Common/src/sitkDisplacementFieldTransform.cxx index a79228bc0..31240ee86 100644 --- a/Code/Common/src/sitkDisplacementFieldTransform.cxx +++ b/Code/Common/src/sitkDisplacementFieldTransform.cxx @@ -357,7 +357,7 @@ void DisplacementFieldTransform::InternalSetSmoothingOff( TDisplacementFieldTran typedef itk::DisplacementFieldTransform NewTransformType; // already off don't need to create a new transform - if (!nsstd::is_same::value) + if (!std::is_same::value) { typename NewTransformType::Pointer itkNewDisplacement = NewTransformType::New(); @@ -384,7 +384,7 @@ void DisplacementFieldTransform::InternalSetSmoothingGaussianOnUpdate( TDisplace typename NewTransformType::Pointer itkNewDisplacement; // change the type of the current displace field for the correct update - if (!nsstd::is_same::value) + if (!std::is_same::value) { itkNewDisplacement = NewTransformType::New(); @@ -422,7 +422,7 @@ void DisplacementFieldTransform::InternalSetSmoothingBSplineOnUpdate( TDisplacem typename NewTransformType::Pointer itkNewDisplacement; // change the type of the current displace field for the correct update - if (!nsstd::is_same::value) + if (!std::is_same::value) { itkNewDisplacement = NewTransformType::New(); diff --git a/Code/Common/src/sitkImage.hxx b/Code/Common/src/sitkImage.hxx index 692c37213..9d9e513e2 100644 --- a/Code/Common/src/sitkImage.hxx +++ b/Code/Common/src/sitkImage.hxx @@ -59,7 +59,7 @@ namespace itk } template - typename DisableIf::value>::Type + typename DisableIf::value>::Type Image::ConditionalInternalInitialization( TImageType *image ) { // no need to check if null diff --git a/Code/Common/src/sitkPimpleImageBase.hxx b/Code/Common/src/sitkPimpleImageBase.hxx index a3a6f4446..0905e9b97 100644 --- a/Code/Common/src/sitkPimpleImageBase.hxx +++ b/Code/Common/src/sitkPimpleImageBase.hxx @@ -451,7 +451,7 @@ namespace itk { if ( IsVector::Value ) return this->InternalGetBuffer< VectorPixelID >( ); - if (nsstd::is_same >, typename ImageTypeToPixelID::PixelIDType>::value) + if (std::is_same >, typename ImageTypeToPixelID::PixelIDType>::value) return reinterpret_cast(this->InternalGetBuffer< BasicPixelID > >()); return this->InternalGetBuffer< BasicPixelID >( ); } @@ -459,7 +459,7 @@ namespace itk { if ( IsVector::Value ) return this->InternalGetBuffer< VectorPixelID >( ); - if (nsstd::is_same >, typename ImageTypeToPixelID::PixelIDType>::value) + if (std::is_same >, typename ImageTypeToPixelID::PixelIDType>::value) { return reinterpret_cast(this->InternalGetBuffer< BasicPixelID > >()); } @@ -518,7 +518,7 @@ namespace itk { if ( IsVector::Value ) return const_cast(this)->InternalGetBuffer< VectorPixelID >( ); - if (nsstd::is_same >, typename ImageTypeToPixelID::PixelIDType>::value) + if (std::is_same >, typename ImageTypeToPixelID::PixelIDType>::value) return reinterpret_cast(const_cast(this)->InternalGetBuffer< BasicPixelID > >()); return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); } @@ -526,7 +526,7 @@ namespace itk { if ( IsVector::Value ) return const_cast(this)->InternalGetBuffer< VectorPixelID >( ); - if (nsstd::is_same >, typename ImageTypeToPixelID::PixelIDType>::value) + if (std::is_same >, typename ImageTypeToPixelID::PixelIDType>::value) { return reinterpret_cast(const_cast(this)->InternalGetBuffer< BasicPixelID > >()); } @@ -646,7 +646,7 @@ namespace itk protected: template < typename TPixelIDType > - typename EnableIf::PixelIDType>::value + typename EnableIf::PixelIDType>::value && !IsLabel::Value && !IsVector::Value, typename ImageType::PixelType >::Type @@ -661,7 +661,7 @@ namespace itk } template < typename TPixelIDType > - typename EnableIf::PixelIDType>::value + typename EnableIf::PixelIDType>::value && IsLabel::Value && !IsVector::Value, typename ImageType::PixelType >::Type @@ -676,7 +676,7 @@ namespace itk } template < typename TPixelIDType > - typename EnableIf::PixelIDType>::value + typename EnableIf::PixelIDType>::value && !IsLabel::Value && IsVector::Value, std::vector::InternalPixelType> >::Type @@ -692,7 +692,7 @@ namespace itk } template < typename TPixelIDType > - typename DisableIf::PixelIDType>::value, + typename DisableIf::PixelIDType>::value, typename Conditional< IsVector::Value, std::vector< typename itk::NumericTraits::ImageType::PixelType >::ValueType >, typename PixelIDToImageType::ImageType::PixelType >::Type >::Type @@ -706,7 +706,7 @@ namespace itk } template < typename TPixelIDType > - typename EnableIf::PixelIDType>::value + typename EnableIf::PixelIDType>::value && !IsLabel::Value && !IsVector::Value, typename ImageType::PixelType *>::Type @@ -716,7 +716,7 @@ namespace itk } template < typename TPixelIDType > - typename EnableIf::PixelIDType>::value + typename EnableIf::PixelIDType>::value && IsLabel::Value && !IsVector::Value, typename ImageType::PixelType *>::Type @@ -726,7 +726,7 @@ namespace itk } template < typename TPixelIDType > - typename EnableIf::PixelIDType>::value + typename EnableIf::PixelIDType>::value && !IsLabel::Value && IsVector::Value, typename MakeDependentOn::InternalPixelType * >::Type @@ -736,7 +736,7 @@ namespace itk } template < typename TPixelIDType > - typename DisableIf::PixelIDType>::value, + typename DisableIf::PixelIDType>::value, typename NumericTraits::ImageType::PixelType>::ValueType *>::Type InternalGetBuffer( void ) { @@ -748,7 +748,7 @@ namespace itk template < typename TPixelIDType, typename TPixelType > - typename EnableIf::PixelIDType>::value + typename EnableIf::PixelIDType>::value && !IsLabel::Value && !IsVector::Value >::Type InternalSetPixel( const std::vector &idx, const TPixelType v ) const @@ -762,7 +762,7 @@ namespace itk } template < typename TPixelIDType, typename TPixelType > - typename EnableIf::PixelIDType>::value + typename EnableIf::PixelIDType>::value && IsLabel::Value && !IsVector::Value >::Type InternalSetPixel( const std::vector &idx, const TPixelType v ) const @@ -776,7 +776,7 @@ namespace itk } template < typename TPixelIDType, typename TPixelValueType > - typename EnableIf::PixelIDType>::value + typename EnableIf::PixelIDType>::value && !IsLabel::Value && IsVector::Value >::Type InternalSetPixel( const std::vector &idx, const std::vector & v ) const @@ -801,7 +801,7 @@ namespace itk template < typename TPixelIDType, typename TPixelType > - typename DisableIf::PixelIDType>::value >::Type + typename DisableIf::PixelIDType>::value >::Type InternalSetPixel( const std::vector &idx, const TPixelType &v ) const { Unused( idx ); diff --git a/Code/Common/src/sitkPimpleTransform.hxx b/Code/Common/src/sitkPimpleTransform.hxx index 2d592a43f..b7b1dac22 100644 --- a/Code/Common/src/sitkPimpleTransform.hxx +++ b/Code/Common/src/sitkPimpleTransform.hxx @@ -42,6 +42,8 @@ #include "itkGaussianSmoothingOnUpdateDisplacementFieldTransform.h" #include "itkBSplineTransform.h" +#include + namespace itk { namespace simple @@ -356,16 +358,16 @@ public: if ( t.GetDimension() != TransformType::InputSpaceDimension ) { sitkExceptionMacro( "Transform argument has dimension " << t.GetDimension() - << " does not match this dimesion of " << TransformType::InputSpaceDimension ); + << " does not match this dimension of " << TransformType::InputSpaceDimension ); } typename CompositeTransformType::TransformType* base = dynamic_cast< typename CompositeTransformType::TransformType*>( t.GetITKBase() ); - return this->AddTransform( base, typename nsstd::is_same::type() ); + return this->AddTransform( base, typename std::is_same::type() ); } - PimpleTransformBase* AddTransform( typename CompositeTransformType::TransformType* t, nsstd::true_type isCompositeTransform ) + PimpleTransformBase* AddTransform( typename CompositeTransformType::TransformType* t, std::true_type isCompositeTransform ) { Unused( isCompositeTransform ); assert( t->GetInputSpaceDimension() == TransformType::InputSpaceDimension ); @@ -377,7 +379,7 @@ public: return this; } - PimpleTransformBase* AddTransform( typename CompositeTransformType::TransformType* t, nsstd::false_type isNotCompositeTransform ) + PimpleTransformBase* AddTransform( typename CompositeTransformType::TransformType* t, std::false_type isNotCompositeTransform ) { Unused( isNotCompositeTransform ); diff --git a/Code/Common/src/sitkTransform.cxx b/Code/Common/src/sitkTransform.cxx index ec688407a..1f2df11ae 100644 --- a/Code/Common/src/sitkTransform.cxx +++ b/Code/Common/src/sitkTransform.cxx @@ -54,8 +54,6 @@ #include -#include "nsstd/type_traits.h" - namespace itk { namespace simple From 2035934be873ea0cbee6862bc2eff38cd0c4f798 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 18 Feb 2020 12:35:31 -0500 Subject: [PATCH 375/400] Remove unused namespace alias of nsstd in tests --- Testing/Unit/sitkCommonTests.cxx | 1 - Testing/Unit/sitkImage4DTests.cxx | 2 -- Testing/Unit/sitkImageTests.cxx | 1 - Testing/Unit/sitkTransformTests.cxx | 1 - 4 files changed, 5 deletions(-) diff --git a/Testing/Unit/sitkCommonTests.cxx b/Testing/Unit/sitkCommonTests.cxx index 19287c8e0..f4322880a 100644 --- a/Testing/Unit/sitkCommonTests.cxx +++ b/Testing/Unit/sitkCommonTests.cxx @@ -27,7 +27,6 @@ #include #include -namespace nsstd = itk::simple::nsstd; TEST( VersionTest, VersoinTest) { diff --git a/Testing/Unit/sitkImage4DTests.cxx b/Testing/Unit/sitkImage4DTests.cxx index 02d0b0ff6..7a88262ce 100644 --- a/Testing/Unit/sitkImage4DTests.cxx +++ b/Testing/Unit/sitkImage4DTests.cxx @@ -41,8 +41,6 @@ #include "itkVectorImage.h" #include "itkMetaDataObject.h" -namespace nsstd = itk::simple::nsstd; - const double adir[] = { 0.0, 0.0, 0.0, 1.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, diff --git a/Testing/Unit/sitkImageTests.cxx b/Testing/Unit/sitkImageTests.cxx index f76215f48..80582a551 100644 --- a/Testing/Unit/sitkImageTests.cxx +++ b/Testing/Unit/sitkImageTests.cxx @@ -43,7 +43,6 @@ const double adir[] = {0.0, 0.0, 1.0, 0.0, -1.0, 0.0}; using itk::simple::InstantiatedPixelIDTypeList; -namespace nsstd = itk::simple::nsstd; diff --git a/Testing/Unit/sitkTransformTests.cxx b/Testing/Unit/sitkTransformTests.cxx index 78109f0f7..54ac6295a 100644 --- a/Testing/Unit/sitkTransformTests.cxx +++ b/Testing/Unit/sitkTransformTests.cxx @@ -44,7 +44,6 @@ #include "itkVectorImage.h" namespace sitk = itk::simple; -namespace nsstd = itk::simple::nsstd; TEST(TransformTest, Construction) { From 00f9710abe71ae70d4ccc5cc8964db8b7920671b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 18 Feb 2020 13:31:59 -0500 Subject: [PATCH 376/400] Replace custom class with std::enable_if --- .../include/sitkDualMemberFunctionFactory.hxx | 9 +-- Code/Common/include/sitkEnableIf.h | 65 ------------------- Code/Common/include/sitkImage.h | 11 ++-- .../include/sitkMemberFunctionFactory.hxx | 5 +- Code/Common/src/sitkImage.hxx | 8 +-- Code/Common/src/sitkPimpleImageBase.hxx | 58 +++++++++-------- Code/IO/include/sitkImportImageFilter.h | 6 +- Code/IO/src/sitkImportImageFilter.cxx | 2 +- 8 files changed, 50 insertions(+), 114 deletions(-) delete mode 100644 Code/Common/include/sitkEnableIf.h diff --git a/Code/Common/include/sitkDualMemberFunctionFactory.hxx b/Code/Common/include/sitkDualMemberFunctionFactory.hxx index 62bb68fec..ae3a051e0 100644 --- a/Code/Common/include/sitkDualMemberFunctionFactory.hxx +++ b/Code/Common/include/sitkDualMemberFunctionFactory.hxx @@ -46,8 +46,9 @@ struct DualMemberFunctionInstantiater : m_Factory( factory ) {} template - typename EnableIf< IsInstantiated::Value && - IsInstantiated::Value >::Type + + typename std::enable_if< IsInstantiated::Value && + IsInstantiated::Value >::type operator()( TPixelIDType1* t1=nullptr, TPixelIDType2*t2=nullptr ) const { (void)t1; @@ -63,8 +64,8 @@ struct DualMemberFunctionInstantiater // this methods is conditionally enabled when the PixelID is not instantiated template - typename DisableIf< IsInstantiated::Value && - IsInstantiated::Value >::Type + typename std::enable_if< ! (IsInstantiated::Value && + IsInstantiated::Value) >::type operator()( TPixelIDType1*t1=nullptr, TPixelIDType2*t2=nullptr ) const { (void)t1; diff --git a/Code/Common/include/sitkEnableIf.h b/Code/Common/include/sitkEnableIf.h deleted file mode 100644 index a8aa68786..000000000 --- a/Code/Common/include/sitkEnableIf.h +++ /dev/null @@ -1,65 +0,0 @@ -/*========================================================================= -* -* Copyright Insight Software Consortium -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0.txt -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -*=========================================================================*/ -#ifndef sitkEnableIf_h -#define sitkEnableIf_h - -namespace itk -{ -namespace simple -{ - -/* \brief This is an implementation of the enable if idiom. - * - * This template enables specialization of a templated function based - * on some traits or concepts. It is implemented with SFINAE. - * - * If the parameter V is true then the Type trait is the second - * template parameter, otherwise an implementation does not exist and - * with SFIANE another implementation may be chosen. - * - * Example: - * \code - * template - * typename EnableIf::Value>::Type - * AllocateInternal ( unsigned int Width, unsigned int Height, unsigned int Depth ); - * - * template - * typename EnableIf::Value>::Type - * AllocateInternal ( unsigned int Width, unsigned int Height, unsigned int Depth ); - * \endcode - * - */ -template struct EnableIf {}; -/** \cond SPECIALIZATION_IMPLEMENTATION */ -template struct EnableIf { typedef T Type; }; -/**\endcond*/ - - -/* \brief An implementation of the negation of the enable if idiom. - * - * \sa EnableIf - */ -template struct DisableIf {}; -/** \cond SPECIALIZATION_IMPLEMENTATION */ -template struct DisableIf { typedef T Type; }; -/**\endcond*/ - -} -} - -#endif // sitkEnableIf_h diff --git a/Code/Common/include/sitkImage.h b/Code/Common/include/sitkImage.h index c6eeb4801..431da5334 100644 --- a/Code/Common/include/sitkImage.h +++ b/Code/Common/include/sitkImage.h @@ -22,7 +22,6 @@ #include "sitkTemplateFunctions.h" #include "sitkDetail.h" #include "sitkPixelIDTokens.h" -#include "sitkEnableIf.h" #include #include @@ -461,15 +460,15 @@ namespace simple * @{ */ template - typename EnableIf::Value>::Type + typename std::enable_if::Value>::type AllocateInternal ( unsigned int width, unsigned int height, unsigned int depth, unsigned int dim4, unsigned int numberOfComponents ); template - typename EnableIf::Value>::Type + typename std::enable_if::Value>::type AllocateInternal ( unsigned int width, unsigned int height, unsigned int depth, unsigned int dim4, unsigned int numberOfComponents ); template - typename EnableIf::Value>::Type + typename std::enable_if::Value>::type AllocateInternal ( unsigned int width, unsigned int height, unsigned int depth, unsigned int dim4, unsigned int numberOfComponents ); /**@}*/ @@ -497,11 +496,11 @@ namespace simple * @{ */ template - typename DisableIf::value>::Type + typename std::enable_if::value>::type ConditionalInternalInitialization( TImageType *i); template - typename EnableIf::value>::Type + typename std::enable_if::value>::type ConditionalInternalInitialization( TImageType *) { assert( false ); } /**@}*/ diff --git a/Code/Common/include/sitkMemberFunctionFactory.hxx b/Code/Common/include/sitkMemberFunctionFactory.hxx index d36888854..09b6fe7c9 100644 --- a/Code/Common/include/sitkMemberFunctionFactory.hxx +++ b/Code/Common/include/sitkMemberFunctionFactory.hxx @@ -23,7 +23,6 @@ #include "sitkMemberFunctionFactory.h" #include "sitkDetail.h" #include "sitkPixelIDTokens.h" -#include "sitkEnableIf.h" #include "sitkExceptionObject.h" namespace itk @@ -48,7 +47,7 @@ struct MemberFunctionInstantiater {} template - typename EnableIf< IsInstantiated::Value >::Type + typename std::enable_if< IsInstantiated::Value >::type operator()( TPixelIDType*id=nullptr ) const { Unused( id ); @@ -62,7 +61,7 @@ struct MemberFunctionInstantiater // this methods is conditionally enabled when the PixelID is not instantiated template - typename DisableIf< IsInstantiated::Value >::Type + typename std::enable_if< !IsInstantiated::Value >::type operator()( TPixelIDType*id=nullptr ) const { Unused( id ); diff --git a/Code/Common/src/sitkImage.hxx b/Code/Common/src/sitkImage.hxx index 9d9e513e2..57d62b843 100644 --- a/Code/Common/src/sitkImage.hxx +++ b/Code/Common/src/sitkImage.hxx @@ -59,7 +59,7 @@ namespace itk } template - typename DisableIf::value>::Type + typename std::enable_if::value>::type Image::ConditionalInternalInitialization( TImageType *image ) { // no need to check if null @@ -71,7 +71,7 @@ namespace itk template - typename EnableIf::Value>::Type + typename std::enable_if::Value>::type Image::AllocateInternal ( unsigned int Width, unsigned int Height, unsigned int Depth, unsigned int dim4, unsigned int numberOfComponents ) { if ( numberOfComponents != 1 && numberOfComponents != 0 ) @@ -115,7 +115,7 @@ namespace itk } template - typename EnableIf::Value>::Type + typename std::enable_if::Value>::type Image::AllocateInternal ( unsigned int Width, unsigned int Height, unsigned int Depth, unsigned int dim4, unsigned int numberOfComponents ) { if ( numberOfComponents == 0 ) @@ -164,7 +164,7 @@ namespace itk } template - typename EnableIf::Value>::Type + typename std::enable_if::Value>::type Image::AllocateInternal ( unsigned int Width, unsigned int Height, unsigned int Depth, unsigned int dim4, unsigned int numberOfComponents ) { if ( numberOfComponents != 1 && numberOfComponents != 0 ) diff --git a/Code/Common/src/sitkPimpleImageBase.hxx b/Code/Common/src/sitkPimpleImageBase.hxx index 0905e9b97..7de8a111f 100644 --- a/Code/Common/src/sitkPimpleImageBase.hxx +++ b/Code/Common/src/sitkPimpleImageBase.hxx @@ -22,12 +22,14 @@ #include "sitkMemberFunctionFactory.h" #include "sitkConditional.h" - #include "itkImage.h" #include "itkVectorImage.h" #include "itkLabelMap.h" #include "itkImageDuplicator.h" + +#include + namespace itk { namespace simple @@ -90,7 +92,7 @@ namespace itk virtual PimpleImageBase *DeepCopy( void ) const { return this->DeepCopy(); } template - typename DisableIf::Value, PimpleImageBase*>::Type + typename std::enable_if::Value, PimpleImageBase*>::type DeepCopy( void ) const { typedef itk::ImageDuplicator< ImageType > ImageDuplicatorType; @@ -103,7 +105,7 @@ namespace itk return new Self( output.GetPointer() ); } template - typename EnableIf::Value, PimpleImageBase*>::Type + typename std::enable_if::Value, PimpleImageBase*>::type DeepCopy( void ) const { sitkExceptionMacro( "This method is not implemented yet" ); @@ -130,13 +132,13 @@ namespace itk virtual unsigned int GetNumberOfComponentsPerPixel( void ) const { return this->GetNumberOfComponentsPerPixel(); } template - typename DisableIf::Value, unsigned int>::Type + typename std::enable_if::Value, unsigned int>::type GetNumberOfComponentsPerPixel( void ) const { return 1; } template - typename EnableIf::Value, unsigned int>::Type + typename std::enable_if::Value, unsigned int>::type GetNumberOfComponentsPerPixel( void ) const { // This returns 1 for itk::Image, and the number of elements @@ -646,10 +648,10 @@ namespace itk protected: template < typename TPixelIDType > - typename EnableIf::PixelIDType>::value + typename std::enable_if::PixelIDType>::value && !IsLabel::Value && !IsVector::Value, - typename ImageType::PixelType >::Type + typename ImageType::PixelType >::type InternalGetPixel( const std::vector &idx ) const { const IndexType itkIdx = sitkSTLVectorToITK( idx ); @@ -661,10 +663,10 @@ namespace itk } template < typename TPixelIDType > - typename EnableIf::PixelIDType>::value + typename std::enable_if::PixelIDType>::value && IsLabel::Value && !IsVector::Value, - typename ImageType::PixelType >::Type + typename ImageType::PixelType >::type InternalGetPixel( const std::vector &idx ) const { const IndexType itkIdx = sitkSTLVectorToITK( idx ); @@ -676,10 +678,10 @@ namespace itk } template < typename TPixelIDType > - typename EnableIf::PixelIDType>::value + typename std::enable_if::PixelIDType>::value && !IsLabel::Value && IsVector::Value, - std::vector::InternalPixelType> >::Type + std::vector::InternalPixelType> >::type InternalGetPixel( const std::vector &idx ) const { const IndexType itkIdx = sitkSTLVectorToITK( idx ); @@ -692,10 +694,10 @@ namespace itk } template < typename TPixelIDType > - typename DisableIf::PixelIDType>::value, + typename std::enable_if::PixelIDType>::value, typename Conditional< IsVector::Value, std::vector< typename itk::NumericTraits::ImageType::PixelType >::ValueType >, - typename PixelIDToImageType::ImageType::PixelType >::Type >::Type + typename PixelIDToImageType::ImageType::PixelType >::Type >::type InternalGetPixel( const std::vector &idx ) const { Unused( idx ); @@ -706,38 +708,38 @@ namespace itk } template < typename TPixelIDType > - typename EnableIf::PixelIDType>::value + typename std::enable_if::PixelIDType>::value && !IsLabel::Value && !IsVector::Value, - typename ImageType::PixelType *>::Type + typename ImageType::PixelType *>::type InternalGetBuffer( void ) { return this->m_Image->GetPixelContainer()->GetBufferPointer(); } template < typename TPixelIDType > - typename EnableIf::PixelIDType>::value + typename std::enable_if::PixelIDType>::value && IsLabel::Value && !IsVector::Value, - typename ImageType::PixelType *>::Type + typename ImageType::PixelType *>::type InternalGetBuffer( void ) { sitkExceptionMacro( "This method is not supported for LabelMaps." ) } template < typename TPixelIDType > - typename EnableIf::PixelIDType>::value + typename std::enable_if::PixelIDType>::value && !IsLabel::Value && IsVector::Value, - typename MakeDependentOn::InternalPixelType * >::Type + typename MakeDependentOn::InternalPixelType * >::type InternalGetBuffer( void ) { return this->m_Image->GetPixelContainer()->GetBufferPointer(); } template < typename TPixelIDType > - typename DisableIf::PixelIDType>::value, - typename NumericTraits::ImageType::PixelType>::ValueType *>::Type + typename std::enable_if::PixelIDType>::value, + typename NumericTraits::ImageType::PixelType>::ValueType *>::type InternalGetBuffer( void ) { sitkExceptionMacro( << "The image is of type: " << GetPixelIDValueAsString( this->GetPixelID() ) @@ -748,9 +750,9 @@ namespace itk template < typename TPixelIDType, typename TPixelType > - typename EnableIf::PixelIDType>::value + typename std::enable_if::PixelIDType>::value && !IsLabel::Value - && !IsVector::Value >::Type + && !IsVector::Value >::type InternalSetPixel( const std::vector &idx, const TPixelType v ) const { const IndexType itkIdx = sitkSTLVectorToITK( idx ); @@ -762,9 +764,9 @@ namespace itk } template < typename TPixelIDType, typename TPixelType > - typename EnableIf::PixelIDType>::value + typename std::enable_if::PixelIDType>::value && IsLabel::Value - && !IsVector::Value >::Type + && !IsVector::Value >::type InternalSetPixel( const std::vector &idx, const TPixelType v ) const { const IndexType itkIdx = sitkSTLVectorToITK( idx ); @@ -776,9 +778,9 @@ namespace itk } template < typename TPixelIDType, typename TPixelValueType > - typename EnableIf::PixelIDType>::value + typename std::enable_if::PixelIDType>::value && !IsLabel::Value - && IsVector::Value >::Type + && IsVector::Value >::type InternalSetPixel( const std::vector &idx, const std::vector & v ) const { const IndexType itkIdx = sitkSTLVectorToITK( idx ); @@ -801,7 +803,7 @@ namespace itk template < typename TPixelIDType, typename TPixelType > - typename DisableIf::PixelIDType>::value >::Type + typename std::enable_if::PixelIDType>::value >::type InternalSetPixel( const std::vector &idx, const TPixelType &v ) const { Unused( idx ); diff --git a/Code/IO/include/sitkImportImageFilter.h b/Code/IO/include/sitkImportImageFilter.h index ed4380633..df9f5d31b 100644 --- a/Code/IO/include/sitkImportImageFilter.h +++ b/Code/IO/include/sitkImportImageFilter.h @@ -91,12 +91,12 @@ namespace itk { // If the output image type is a VectorImage then the number of // components per pixel needs to be set, otherwise the method - // does not exist. This is done with the EnableIf Idiom. + // does not exist. This is done with the enable if idiom. template - typename DisableIf::Value>::Type + typename std::enable_if::Value>::type SetNumberOfComponentsOnImage( TImageType* ) {} template - typename EnableIf::Value>::Type + typename std::enable_if::Value>::type SetNumberOfComponentsOnImage( TImageType* ); private: diff --git a/Code/IO/src/sitkImportImageFilter.cxx b/Code/IO/src/sitkImportImageFilter.cxx index 486059955..eecaca090 100644 --- a/Code/IO/src/sitkImportImageFilter.cxx +++ b/Code/IO/src/sitkImportImageFilter.cxx @@ -533,7 +533,7 @@ Image ImportImageFilter::ExecuteInternal( ) } template -typename EnableIf::Value>::Type +typename std::enable_if::Value>::type ImportImageFilter::SetNumberOfComponentsOnImage ( TFilterType*image ) { image->SetNumberOfComponentsPerPixel( m_NumberOfComponentsPerPixel ); From 6d9cd3140e138fecbaea78a52d0362027ca4bc9f Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 18 Feb 2020 14:26:04 -0500 Subject: [PATCH 377/400] Use std::conditional --- Code/Common/include/sitkConditional.h | 21 +++++---------------- Code/Common/src/sitkPimpleImageBase.hxx | 4 ++-- Testing/Unit/sitkCommonTests.cxx | 14 -------------- 3 files changed, 7 insertions(+), 32 deletions(-) diff --git a/Code/Common/include/sitkConditional.h b/Code/Common/include/sitkConditional.h index 3a30fa58e..a1694ed91 100644 --- a/Code/Common/include/sitkConditional.h +++ b/Code/Common/include/sitkConditional.h @@ -18,24 +18,13 @@ #ifndef sitkConditional_h #define sitkConditional_h +#include + namespace itk { namespace simple { -/* \brief An object for selection of a type at compile-time. - * * - * If VCode is true, then the member Type will be TIfTrue, otherwise - * the member typedef Type will be equivalent to TIfFalse. - * - */ -template struct Conditional { typedef TIfTrue Type; }; -/** \cond SPECIALIZATION_IMPLEMENTATION */ -template -struct Conditional { typedef TIfFalse Type; }; - -/**\endcond*/ - /* \brief An object for selecting an integer value at compile-time. * * @@ -47,9 +36,9 @@ struct Conditional { typedef TIfFalse Type; }; */ template struct ConditionalValue - : public itk::simple::Conditional, - std::integral_constant >::Type + : public std::conditional, + std::integral_constant >::type { private: typedef ConditionalValue Self; diff --git a/Code/Common/src/sitkPimpleImageBase.hxx b/Code/Common/src/sitkPimpleImageBase.hxx index 7de8a111f..a904f25eb 100644 --- a/Code/Common/src/sitkPimpleImageBase.hxx +++ b/Code/Common/src/sitkPimpleImageBase.hxx @@ -695,9 +695,9 @@ namespace itk template < typename TPixelIDType > typename std::enable_if::PixelIDType>::value, - typename Conditional< IsVector::Value, + typename std::conditional< IsVector::Value, std::vector< typename itk::NumericTraits::ImageType::PixelType >::ValueType >, - typename PixelIDToImageType::ImageType::PixelType >::Type >::type + typename PixelIDToImageType::ImageType::PixelType >::type >::type InternalGetPixel( const std::vector &idx ) const { Unused( idx ); diff --git a/Testing/Unit/sitkCommonTests.cxx b/Testing/Unit/sitkCommonTests.cxx index f4322880a..0ed25bc3c 100644 --- a/Testing/Unit/sitkCommonTests.cxx +++ b/Testing/Unit/sitkCommonTests.cxx @@ -50,20 +50,6 @@ TEST( VersionTest, VersoinTest) EXPECT_NE( std::find( itk_modules.begin(), itk_modules.end(), "ITKIOImageBase" ), itk_modules.end()); } -TEST( ConditionalTest, ConditionalTest1 ) { - - // a quick check to make sure the conditional works - typedef itk::simple::Conditional::Type IntType; - typedef itk::simple::Conditional::Type FloatType; - - - EXPECT_EQ ( typeid( IntType ).name(), typeid( int ).name() ); - EXPECT_EQ ( typeid( FloatType ).name(), typeid( float ).name() ); - - return; - -} - TEST( ProcessObject, GlobalTolerance ) { // basic coverage test of setting and getting From c376babafede1fa8bbd3ed3632901785b1c163d6 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 19 Feb 2020 15:35:57 -0500 Subject: [PATCH 378/400] Remove remnants of nsstd files These have all been replaced by the proper C++11 classes. --- CMake/sitkCheckCXX11.cmake | 66 ---------------- CMake/sitk_check_cxx11.cxx | 95 ----------------------- CMake/sitk_check_cxx11_required.cxx | 14 ---- CMakeLists.txt | 4 - Code/Common/include/nsstd/unordered_map.h | 50 ------------ Code/Common/include/sitkConditional.h | 13 ++-- 6 files changed, 7 insertions(+), 235 deletions(-) delete mode 100644 CMake/sitkCheckCXX11.cmake delete mode 100644 CMake/sitk_check_cxx11.cxx delete mode 100644 CMake/sitk_check_cxx11_required.cxx delete mode 100644 Code/Common/include/nsstd/unordered_map.h diff --git a/CMake/sitkCheckCXX11.cmake b/CMake/sitkCheckCXX11.cmake deleted file mode 100644 index 259951044..000000000 --- a/CMake/sitkCheckCXX11.cmake +++ /dev/null @@ -1,66 +0,0 @@ -# -# CMake Module to check for TR1 and C++11 features -# -# SITK_HAS_CXX11_STATIC_ASSERT - True if "static_assert" keyword is supported -# SITK_HAS_CXX11_FUNCTIONAL - True if functional header has C++11 features -# SITK_HAS_CXX11_TYPE_TRAITS -# SITK_HAS_CXX11_UNORDERED_MAP -# SITK_HAS_CXX11_NULLPTR - True if "nullptr" keyword is supported -# SITK_HAS_CXX11_UNIQUE_PTR -# SITK_HAS_CXX11_ALIAS_TEMPLATE - Able to use alias templates -# -# SITK_HAS_TR1_SUB_INCLUDE -# -# SITK_HAS_TR1_FUNCTIONAL -# SITK_HAS_TR1_TYPE_TRAITS -# SITK_HAS_TR1_UNORDERED_MAP - -include(CMakePushCheckState) - -# -# Function to wrap try compiles on the aggregate cxx test file1 -# -function(sitkCXX11Test VARIABLE) - - if(NOT DEFINED ${VARIABLE}) - message(STATUS "Performing Test ${VARIABLE}") - - set(CMAKE_CXX_STANDARD 11) - - if(NOT POLICY CMP0067) - if(DEFINED CMAKE_CXX_STANDARD) - set(cmake_flags "${cmake_flags} -DCMAKE_CXX_STANDARD:STRING:=${CMAKE_CXX_STANDARD}") - endif() - if(DEFINED CMAKE_CXX_STANDARD_REQUIRED) - set(cmake_flags "${cmake_flags} -DCMAKE_CXX_STANDARD_REQUIRED:STRING:=${CMAKE_CXX_STANDARD_REQUIRED}") - endif() - if(DEFINED CMAKE_CXX_EXTENSIONS) - set(cmake_flags "${cmake_flags} -DCMAKE_CXX_EXTENSIONS:STRING:=${CMAKE_CXX_EXTENSIONS}") - endif() - endif() - - try_compile(${VARIABLE} - "${PROJECT_BINARY_DIR}" - "${CMAKE_CURRENT_LIST_DIR}/sitk_check_cxx11.cxx" - CMAKE_FLAGS ${cmake_flags} - COMPILE_DEFINITIONS "-D${VARIABLE}" ${CMAKE_REQUIRED_DEFINITIONS} - OUTPUT_VARIABLE output) - - set(${cache_var} ${${VARIABLE}} CACHE INTERNAL "hashed flags with try_compile results") - - if(${VARIABLE}) - message(STATUS "Performing Test ${VARIABLE} - Success") - else() - message(STATUS "Performing Test ${VARIABLE} - Failed") - file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log - "Performing Test ${VARIABLE} failed with the following output:\n" - "${OUTPUT}\n") - endif() - endif() -endfunction() - -cmake_push_check_state(RESET) - -# -# Check for CXX11 Features -# diff --git a/CMake/sitk_check_cxx11.cxx b/CMake/sitk_check_cxx11.cxx deleted file mode 100644 index 89cb248aa..000000000 --- a/CMake/sitk_check_cxx11.cxx +++ /dev/null @@ -1,95 +0,0 @@ - -//------------------------------------- - -#ifdef SITK_HAS_TR1_FUNCTIONAL - -#ifdef HAS_TR1_SUB_INCLUDE -#include -#else -#include -#endif - -void f(int,int) {} - -int main(void) -{ - std::tr1::function g(f); - using namespace std::tr1::placeholders; - std::tr1::function h = std::tr1::bind(g,0,_1); - return 0; -} - -#endif - -//------------------------------------- - -#ifdef SITK_HAS_CXX11_TYPE_TRAITS - -#include - -int main(void) -{ - std::integral_constant a; - std::true_type b; - std::false_type c; - std::is_same::type d; - return 0; -} - -#endif - -//------------------------------------- - -#ifdef SITK_HAS_TR1_TYPE_TRAITS - -#ifdef HAS_TR1_SUB_INCLUDE -#include -#else -#include -#endif - -int main(void) -{ - std::tr1::integral_constant a; - std::tr1::true_type b; - std::tr1::false_type c; - std::tr1::is_same::type d; - return 0; -} - -#endif - -//------------------------------------- - -#ifdef SITK_HAS_TR1_UNORDERED_MAP - - -#ifdef HAS_TR1_SUB_INCLUDE -#include -#else -#include -#endif - -int main(void) -{ - // On OSX with gcc 4.0, there is an internal const correctness issue - // in the following. - std::tr1::unordered_map s; - const std::tr1::unordered_map &c_ref = s; - c_ref.find(1); // Problem is here. - return 0; -} - -#endif - -//------------------------------------- - -#ifdef SITK_HAS_TR1_SUB_INCLUDE - -#include -#include -#include - -int main(void) { return 0; } - -#endif diff --git a/CMake/sitk_check_cxx11_required.cxx b/CMake/sitk_check_cxx11_required.cxx deleted file mode 100644 index 7727d827e..000000000 --- a/CMake/sitk_check_cxx11_required.cxx +++ /dev/null @@ -1,14 +0,0 @@ -#include -#if __cplusplus >= 201103L -#else -#if defined _LIBCPP_VERSION -#error "libc++ is not supported without C++11" -#endif -#endif - - -int main(void) -{ -std::cout << "__cplusplus:" << __cplusplus << std::endl; -return 0; -} diff --git a/CMakeLists.txt b/CMakeLists.txt index 31df5b950..f09e893ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -255,9 +255,6 @@ endif() #----------------------------------------------------------- # Place all checks and try compile variable for sitkConfigure.h here -include(sitkCheckCXX11) - - include(CheckIncludeFileCXX) @@ -459,7 +456,6 @@ install(FILES ${__files} install( DIRECTORY ${CMAKE_SOURCE_DIR}/Code/Common/include/Ancillary - ${CMAKE_SOURCE_DIR}/Code/Common/include/nsstd DESTINATION ${SimpleITK_INSTALL_INCLUDE_DIR}/ COMPONENT Development diff --git a/Code/Common/include/nsstd/unordered_map.h b/Code/Common/include/nsstd/unordered_map.h deleted file mode 100644 index e449312ed..000000000 --- a/Code/Common/include/nsstd/unordered_map.h +++ /dev/null @@ -1,50 +0,0 @@ -/*========================================================================= -* -* Copyright Insight Software Consortium -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0.txt -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -*=========================================================================*/ -#ifndef sitk_nsstd_unordered_map_h -#define sitk_nsstd_unordered_map_h - -#include "sitkConfigure.h" - -#if !defined SITK_HAS_TR1_UNORDERED_MAP && !defined SITK_HAS_CXX11_UNORDERED_MAP -#error "No system (tr1/c++11) unordered_map header available!" -#endif - - -#if defined SITK_HAS_CXX11_UNORDERED_MAP && !defined SITK_HAS_TR1_SUB_INCLUDE -#include -#elif -#include -#endif - -namespace itk -{ -namespace simple -{ -namespace nsstd -{ -#if defined SITK_HAS_TR1_UNORDERED_MAP && !defined SITK_HAS_CXX11_UNORDERED_MAP -using std::tr1::unordered_map; -#else -using std::unordered_map; -#endif -} -} -} - - -#endif // sitk_nsstd_unordered_map_h diff --git a/Code/Common/include/sitkConditional.h b/Code/Common/include/sitkConditional.h index a1694ed91..2b8bd34bc 100644 --- a/Code/Common/include/sitkConditional.h +++ b/Code/Common/include/sitkConditional.h @@ -36,19 +36,20 @@ namespace simple */ template struct ConditionalValue - : public std::conditional, - std::integral_constant >::type { private: typedef ConditionalValue Self; + typedef typename std::conditional, + std::integral_constant >::type ConditionalType; public: - typedef typename Self::value_type ValueType; - typedef typename Self::type Type; + typedef typename ConditionalType::type Type; + typedef typename ConditionalType::value_type ValueType; - static const ValueType Value = Self::value; + static const ValueType Value = ConditionalType::value; }; + } } From 66ebc91679e02779659313bb3646067f0132b6b0 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 21 Feb 2020 09:59:43 -0500 Subject: [PATCH 379/400] Update ITK Superbuild version to v5.1rc02 --- SuperBuild/External_ITK.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index ec47144be..eea1734c3 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -52,8 +52,7 @@ set(ITK_GIT_REPOSITORY "${git_protocol}://github.com/InsightSoftwareConsortium/I mark_as_advanced(ITK_GIT_REPOSITORY) sitk_legacy_naming(ITK_GIT_REPOSITORY ITK_REPOSITORY) -# post v5.1rc01 -set(_DEFAULT_ITK_GIT_TAG "9d0f5f7398287c24d5c926a214582d53b81f4596") +set(_DEFAULT_ITK_GIT_TAG "v5.1rc02") set(ITK_GIT_TAG "${_DEFAULT_ITK_GIT_TAG}" CACHE STRING "Tag in ITK git repo") mark_as_advanced(ITK_GIT_TAG) set(ITK_TAG_COMMAND GIT_TAG "${ITK_GIT_TAG}") From d1463b490c7e44378674e1479731e68cd4945589 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 18 Feb 2020 12:06:51 -0500 Subject: [PATCH 380/400] Add GetBufferAsVoid to Image This provides a convenient access to a void buffer. --- Code/Common/include/sitkImage.h | 2 ++ Code/Common/src/sitkImage.cxx | 14 ++++++++++++++ Code/Common/src/sitkPimpleImageBase.h | 2 ++ Code/Common/src/sitkPimpleImageBase.hxx | 9 +++++++++ Wrapping/CSharp/CSharp.i | 1 + Wrapping/Common/SimpleITK_Common.i | 1 + 6 files changed, 29 insertions(+) diff --git a/Code/Common/include/sitkImage.h b/Code/Common/include/sitkImage.h index 431da5334..f20e53357 100644 --- a/Code/Common/include/sitkImage.h +++ b/Code/Common/include/sitkImage.h @@ -420,6 +420,7 @@ namespace simple uint64_t *GetBufferAsUInt64( ); float *GetBufferAsFloat( ); double *GetBufferAsDouble( ); + void *GetBufferAsVoid(); const int8_t *GetBufferAsInt8( ) const; const uint8_t *GetBufferAsUInt8( ) const; @@ -431,6 +432,7 @@ namespace simple const uint64_t *GetBufferAsUInt64( ) const; const float *GetBufferAsFloat( ) const; const double *GetBufferAsDouble( ) const; + const void *GetBufferAsVoid() const; /** @} */ diff --git a/Code/Common/src/sitkImage.cxx b/Code/Common/src/sitkImage.cxx index ecf9493c2..026bc7344 100644 --- a/Code/Common/src/sitkImage.cxx +++ b/Code/Common/src/sitkImage.cxx @@ -23,6 +23,7 @@ #include "sitkExceptionObject.h" #include "sitkPimpleImageBase.h" #include "sitkPixelIDTypeLists.h" +#include "sitkConditional.h" namespace itk @@ -507,6 +508,13 @@ namespace itk return this->m_PimpleImage->GetBufferAsDouble( ); } + void *Image::GetBufferAsVoid( ) + { + assert( m_PimpleImage ); + this->MakeUnique(); + return this->m_PimpleImage->GetBufferAsVoid( ); + } + const int8_t *Image::GetBufferAsInt8( ) const { assert( m_PimpleImage ); @@ -567,6 +575,12 @@ namespace itk return this->m_PimpleImage->GetBufferAsDouble( ); } + const void *Image::GetBufferAsVoid ( ) const + { + assert( m_PimpleImage ); + return this->m_PimpleImage->GetBufferAsVoid( ); + } + void Image::SetPixelAsInt8( const std::vector &idx, int8_t v ) { assert( m_PimpleImage ); diff --git a/Code/Common/src/sitkPimpleImageBase.h b/Code/Common/src/sitkPimpleImageBase.h index de2497369..9604775c7 100644 --- a/Code/Common/src/sitkPimpleImageBase.h +++ b/Code/Common/src/sitkPimpleImageBase.h @@ -139,6 +139,7 @@ namespace itk virtual uint64_t *GetBufferAsUInt64( ) = 0; virtual float *GetBufferAsFloat( ) = 0; virtual double *GetBufferAsDouble( ) = 0; + virtual void *GetBufferAsVoid( ) = 0; virtual const int8_t *GetBufferAsInt8( ) const = 0; virtual const uint8_t *GetBufferAsUInt8( ) const = 0; @@ -150,6 +151,7 @@ namespace itk virtual const uint64_t *GetBufferAsUInt64( ) const = 0; virtual const float *GetBufferAsFloat( ) const = 0; virtual const double *GetBufferAsDouble( ) const = 0; + virtual const void *GetBufferAsVoid( ) const = 0; }; } // end namespace simple diff --git a/Code/Common/src/sitkPimpleImageBase.hxx b/Code/Common/src/sitkPimpleImageBase.hxx index a904f25eb..413255d08 100644 --- a/Code/Common/src/sitkPimpleImageBase.hxx +++ b/Code/Common/src/sitkPimpleImageBase.hxx @@ -467,6 +467,10 @@ namespace itk } return this->InternalGetBuffer< BasicPixelID >( ); } + virtual void *GetBufferAsVoid( ) + { + return this->InternalGetBuffer< typename ImageTypeToPixelID::PixelIDType >( ); + } virtual const int8_t *GetBufferAsInt8() const { @@ -534,6 +538,11 @@ namespace itk } return const_cast(this)->InternalGetBuffer< BasicPixelID >( ); } + virtual const void *GetBufferAsVoid( ) const + { + return const_cast(this)->InternalGetBuffer< typename ImageTypeToPixelID::PixelIDType >( ); + } + virtual void SetPixelAsInt8( const std::vector &idx, int8_t v ) { diff --git a/Wrapping/CSharp/CSharp.i b/Wrapping/CSharp/CSharp.i index 8e05af8cc..317350d9e 100644 --- a/Wrapping/CSharp/CSharp.i +++ b/Wrapping/CSharp/CSharp.i @@ -58,6 +58,7 @@ %rename("GetConstBufferAsUInt64") itk::simple::Image::GetBufferAsUInt64( ) const; %rename("GetConstBufferAsFloat") itk::simple::Image::GetBufferAsFloat( ) const; %rename("GetConstBufferAsDouble") itk::simple::Image::GetBufferAsDouble( ) const; +%rename("GetConstBufferAsVoid") itk::simple::Image::GetBufferAsVoid( ) const; diff --git a/Wrapping/Common/SimpleITK_Common.i b/Wrapping/Common/SimpleITK_Common.i index a9c88d11b..4ede45b53 100644 --- a/Wrapping/Common/SimpleITK_Common.i +++ b/Wrapping/Common/SimpleITK_Common.i @@ -69,6 +69,7 @@ %ignore itk::simple::Image::GetBufferAsUInt64; %ignore itk::simple::Image::GetBufferAsFloat; %ignore itk::simple::Image::GetBufferAsDouble; +%ignore itk::simple::Image::GetBufferAsVoid; #endif From 317f716d582acab180649ab20a6db1420e168bd1 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 27 Feb 2020 13:48:04 -0500 Subject: [PATCH 381/400] Pass GDCM_ CMake variables to the ITK Superbuild --- SuperBuild/External_ITK.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/SuperBuild/External_ITK.cmake b/SuperBuild/External_ITK.cmake index eea1734c3..50fc5e9f6 100644 --- a/SuperBuild/External_ITK.cmake +++ b/SuperBuild/External_ITK.cmake @@ -31,6 +31,7 @@ foreach (_varName ${_varNames}) OR _varName MATCHES "^ITKV3" OR _varName MATCHES "^ITKV4" OR _varName MATCHES "FFTW" + OR _varName MATCHES "^GDCM_" OR _varName MATCHES "^Module_") message( STATUS "Passing variable \"${_varName}=${${_varName}}\" to ITK external project.") list(APPEND ITK_VARS ${_varName}) From f9e1afd085aa9063ff95d6ba30c0527804daba82 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 21 Feb 2020 15:11:07 -0500 Subject: [PATCH 382/400] Use lambda over using nested std::bind The lambda wrapping is clearer and reduces the number of typedefs and variables required. The std::bind is still preferred when multiple arguments are pass, as the std::placeholders work concisely, or when a simple binding of an argument (this) is needed. --- Code/Common/src/sitkAffineTransform.cxx | 22 ++++--- Code/Common/src/sitkBSplineTransform.cxx | 19 +++---- .../src/sitkScaleSkewVersor3DTransform.cxx | 21 ++++--- .../Common/src/sitkScaleVersor3DTransform.cxx | 20 ++++--- Code/Common/src/sitkSimilarity3DTransform.cxx | 21 ++++--- Code/Common/src/sitkTransformHelper.hxx | 17 ++---- .../Common/src/sitkVersorRigid3DTransform.cxx | 19 ++++--- Code/Common/src/sitkVersorTransform.cxx | 17 +++--- ...mageRegistrationMethod_CreateOptimizer.cxx | 57 +++++++++++++++---- 9 files changed, 133 insertions(+), 80 deletions(-) diff --git a/Code/Common/src/sitkAffineTransform.cxx b/Code/Common/src/sitkAffineTransform.cxx index fe25d5f5c..23df0dc81 100644 --- a/Code/Common/src/sitkAffineTransform.cxx +++ b/Code/Common/src/sitkAffineTransform.cxx @@ -186,19 +186,25 @@ void AffineTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF(Center, typename TransformType::InputPointType, double); SITK_TRANSFORM_SET_MPF(Translation, typename TransformType::OutputVectorType, double); - typename TransformType::MatrixType (*pfSTLToITKDirection)(const std::vector &) = &sitkSTLToITKDirection; - this->m_pfSetMatrix = std::bind(&TransformType::SetMatrix, t, std::bind(pfSTLToITKDirection, std::placeholders::_1)); + this->m_pfSetMatrix = [t](const std::vector &arg) + { + t->SetMatrix(sitkSTLToITKDirection(arg)); + }; + SITK_TRANSFORM_SET_MPF_GetMatrix(); - typename TransformType::OutputVectorType (*pfSTLVectorToITK)(const std::vector &) = &sitkSTLVectorToITK; - void (TransformType::*pfScale1) (const typename TransformType::OutputVectorType &, bool) = &TransformType::Scale; - this->m_pfScale1 = std::bind(pfScale1,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); + this->m_pfScale1 = [t](const std::vector v, bool b) + { + t->Scale(sitkSTLVectorToITK(v), b); + }; + + this->m_pfScale2 = [t](double v, bool b) { t->Scale(v, b); }; - void (TransformType::*pfScale2) (const double &, bool) = &TransformType::Scale; - this->m_pfScale2 = std::bind(pfScale2,t,std::placeholders::_1,std::placeholders::_2); this->m_pfShear = std::bind(&TransformType::Shear,t,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4); - this->m_pfTranslate = std::bind(&TransformType::Translate,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); + this->m_pfTranslate = [t] (const std::vector &v, bool b) { + t->Translate(sitkSTLVectorToITK(v),b); + }; this->m_pfRotate = std::bind(&TransformType::Rotate,t,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4); } diff --git a/Code/Common/src/sitkBSplineTransform.cxx b/Code/Common/src/sitkBSplineTransform.cxx index 288e74249..1353b15a5 100644 --- a/Code/Common/src/sitkBSplineTransform.cxx +++ b/Code/Common/src/sitkBSplineTransform.cxx @@ -258,13 +258,12 @@ void BSplineTransform::InternalInitialization(itk::TransformBase *transform) template void BSplineTransform::InternalInitialization(TransformType *t) { - { // TransformDomainDirection - typename TransformType::DirectionType (*pfSTLToITKDirection)(const std::vector &) = &sitkSTLToITKDirection; - this->m_pfSetTransformDomainDirection = std::bind(&TransformType::SetTransformDomainDirection,t,std::bind(pfSTLToITKDirection,std::placeholders::_1)); - - std::vector (*pfITKDirectionToSTL)( const typename TransformType::DirectionType &) = &sitkITKDirectionToSTL; - this->m_pfGetTransformDomainDirection = std::bind(pfITKDirectionToSTL,std::bind(&TransformType::GetTransformDomainDirection,t)); - } + this->m_pfSetTransformDomainDirection = [t](const std::vector &v) { + t->SetTransformDomainDirection(sitkSTLToITKDirection< typename TransformType::DirectionType>(v)); + }; + this->m_pfGetTransformDomainDirection = [t]() { + return sitkITKDirectionToSTL(t->GetTransformDomainDirection()); + }; // TransformDomainMeshSize SITK_TRANSFORM_SET_MPF( TransformDomainMeshSize, typename TransformType::MeshSizeType, unsigned int ); @@ -273,9 +272,9 @@ void BSplineTransform::InternalInitialization(TransformType *t) // TransformDomainPhysicalDimensions SITK_TRANSFORM_SET_MPF( TransformDomainPhysicalDimensions, typename TransformType::PhysicalDimensionsType, double ); - - std::vector (*pfImageArrayConvert)(const typename TransformType::CoefficientImageArray &) = &sitkImageArrayConvert; - this->m_pfGetCoefficientImages = std::bind(pfImageArrayConvert, std::bind(&TransformType::GetCoefficientImages,t) ); + this->m_pfGetCoefficientImages = [t] () { + return sitkImageArrayConvert(t->GetCoefficientImages()); + }; this->m_pfSetCoefficientImages = std::bind(SetCoefficientImages, t, std::placeholders::_1); this->m_pfGetOrder = &sitkGetOrder; diff --git a/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx b/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx index fe64620d9..0b296ab06 100644 --- a/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx +++ b/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx @@ -214,19 +214,22 @@ void ScaleSkewVersor3DTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF(Skew, typename TransformType::SkewVectorType, double); SITK_TRANSFORM_SET_MPF_GetMatrix(); - void (TransformType::*pfSetRotation1) (const typename TransformType::VersorType &) = &TransformType::SetRotation; - this->m_pfSetRotation1 = std::bind(pfSetRotation1,t,std::bind(&sitkSTLVectorToITKVersor, - std::placeholders::_1)); + this->m_pfSetRotation1 = [t](const std::vector &v) { + t->SetRotation(sitkSTLVectorToITKVersor(v)); + }; - typename TransformType::OutputVectorType (*pfSTLVectorToITK)(const std::vector &) = &sitkSTLVectorToITK; - void (TransformType::*pfSetRotation2) (const typename TransformType::AxisType &, double) = &TransformType::SetRotation; - this->m_pfSetRotation2 = std::bind(pfSetRotation2,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); - - this->m_pfGetVersor = std::bind(&sitkITKVersorToSTL,std::bind(&TransformType::GetVersor,t)); + this->m_pfSetRotation2 = [t](const std::vector &v, double d) { + t->SetRotation(sitkSTLVectorToITK(v),d); + }; + this->m_pfGetVersor = [t] () { + return sitkITKVersorToSTL(t->GetVersor()); + }; // pre argument has no effect - this->m_pfTranslate = std::bind(&TransformType::Translate,t,std::bind(pfSTLVectorToITK,std::placeholders::_1), false); + this->m_pfTranslate = [t] (const std::vector &v) { + t->Translate( sitkSTLVectorToITK(v), false ); + }; } } diff --git a/Code/Common/src/sitkScaleVersor3DTransform.cxx b/Code/Common/src/sitkScaleVersor3DTransform.cxx index 1f3dbdffd..0b07120b2 100644 --- a/Code/Common/src/sitkScaleVersor3DTransform.cxx +++ b/Code/Common/src/sitkScaleVersor3DTransform.cxx @@ -197,18 +197,22 @@ void ScaleVersor3DTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF(Scale, typename TransformType::ScaleVectorType, double); SITK_TRANSFORM_SET_MPF_GetMatrix(); - void (TransformType::*pfSetRotation1) (const typename TransformType::VersorType &) = &TransformType::SetRotation; - this->m_pfSetRotation1 = std::bind(pfSetRotation1,t,std::bind(&sitkSTLVectorToITKVersor,std::placeholders::_1)); + this->m_pfSetRotation1 = [t](const std::vector &v) { + t->SetRotation(sitkSTLVectorToITKVersor(v)); + }; - typename TransformType::OutputVectorType (*pfSTLVectorToITK)(const std::vector &) = &sitkSTLVectorToITK; - void (TransformType::*pfSetRotation2) (const typename TransformType::AxisType &, double) = &TransformType::SetRotation; - this->m_pfSetRotation2 = std::bind(pfSetRotation2,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); - - this->m_pfGetVersor = std::bind(&sitkITKVersorToSTL,std::bind(&TransformType::GetVersor,t)); + this->m_pfSetRotation2 = [t](const std::vector &v, double d) { + t->SetRotation(sitkSTLVectorToITK(v),d); + }; + this->m_pfGetVersor = [t] () { + return sitkITKVersorToSTL(t->GetVersor()); + }; // pre argument has no effect - this->m_pfTranslate = std::bind(&TransformType::Translate,t,std::bind(pfSTLVectorToITK,std::placeholders::_1), false); + this->m_pfTranslate = [t] (const std::vector &v) { + t->Translate( sitkSTLVectorToITK(v), false ); + }; } } diff --git a/Code/Common/src/sitkSimilarity3DTransform.cxx b/Code/Common/src/sitkSimilarity3DTransform.cxx index bb516d3cd..f295347f1 100644 --- a/Code/Common/src/sitkSimilarity3DTransform.cxx +++ b/Code/Common/src/sitkSimilarity3DTransform.cxx @@ -205,21 +205,26 @@ void Similarity3DTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF_GetMatrix(); SITK_TRANSFORM_SET_MPF_SetMatrix(); - void (TransformType::*pfSetRotation1) (const typename TransformType::VersorType &) = &TransformType::SetRotation; - this->m_pfSetRotation1 = std::bind(pfSetRotation1,t,std::bind(&sitkSTLVectorToITKVersor,std::placeholders::_1)); + this->m_pfSetRotation1 = [t](const std::vector &v) { + t->SetRotation(sitkSTLVectorToITKVersor(v)); + }; - typename TransformType::OutputVectorType (*pfSTLVectorToITK)(const std::vector &) = &sitkSTLVectorToITK; - void (TransformType::*pfSetRotation2) (const typename TransformType::AxisType &, double) = &TransformType::SetRotation; - this->m_pfSetRotation2 = std::bind(pfSetRotation2,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); + this->m_pfSetRotation2 = [t](const std::vector &v, double d) { + t->SetRotation(sitkSTLVectorToITK(v),d); + }; - this->m_pfGetVersor = std::bind(&sitkITKVersorToSTL,std::bind(&TransformType::GetVersor,t)); + this->m_pfGetVersor = [t] () { + return sitkITKVersorToSTL(t->GetVersor()); + }; this->m_pfSetScale = std::bind(&TransformType::SetScale,t,std::placeholders::_1); this->m_pfGetScale = std::bind(&TransformType::GetScale,t); // pre argument has no effect - this->m_pfTranslate = std::bind(&TransformType::Translate,t,std::bind(pfSTLVectorToITK,std::placeholders::_1), false); - + // pre argument has no effect + this->m_pfTranslate = [t] (const std::vector &v) { + t->Translate( sitkSTLVectorToITK(v), false ); + }; } } diff --git a/Code/Common/src/sitkTransformHelper.hxx b/Code/Common/src/sitkTransformHelper.hxx index 18f4f4fa9..856300218 100644 --- a/Code/Common/src/sitkTransformHelper.hxx +++ b/Code/Common/src/sitkTransformHelper.hxx @@ -19,27 +19,20 @@ #define sitkTransformHelper_hxx -#define SITK_TRANSFORM_SET_MPF(NAME,ITK_TYPENAME, COMPONENT) \ +#define SITK_TRANSFORM_SET_MPF(NAME, ITK_TYPENAME, COMPONENT) \ { \ - typedef ITK_TYPENAME itkType; \ - itkType (*pfSTLToITK)(const std::vector &) = &sitkSTLVectorToITK; \ - this->m_pfSet##NAME = std::bind(&TransformType::Set##NAME,t,std::bind(pfSTLToITK,std::placeholders::_1)); \ - \ - std::vector (*pfITKToSTL)( const itkType &) = &sitkITKVectorToSTL; \ - this->m_pfGet##NAME = std::bind(pfITKToSTL,std::bind(&TransformType::Get##NAME,t)); \ + this->m_pfSet##NAME = [t](const std::vector &arg){ t->Set##NAME(sitkSTLVectorToITK(arg));};\ + this->m_pfGet##NAME = [t](){ return sitkITKVectorToSTL(t->Get##NAME());}; \ } #define SITK_TRANSFORM_SET_MPF_GetMatrix() \ { \ - std::vector (*pfITKDirectionToSTL)(const typename TransformType::MatrixType &) = &sitkITKDirectionToSTL; \ - this->m_pfGetMatrix = std::bind(pfITKDirectionToSTL,std::bind(&TransformType::GetMatrix,t)); \ + this->m_pfGetMatrix =[t](){ return sitkITKDirectionToSTL(t->GetMatrix());}; \ } #define SITK_TRANSFORM_SET_MPF_SetMatrix() \ { \ - void (TransformType::*pfSetMatrix) (const typename TransformType::MatrixType &, double) = &TransformType::SetMatrix; \ - typename TransformType::MatrixType (*pfSTLToITKDirection)(const std::vector &) = &sitkSTLToITKDirection; \ - this->m_pfSetMatrix = std::bind(pfSetMatrix, t, std::bind(pfSTLToITKDirection, std::placeholders::_1), std::placeholders::_2); \ + this->m_pfSetMatrix = [t](const std::vector &arg, double tolerance){t->SetMatrix(sitkSTLToITKDirection(arg), tolerance);}; \ } diff --git a/Code/Common/src/sitkVersorRigid3DTransform.cxx b/Code/Common/src/sitkVersorRigid3DTransform.cxx index 634a74820..fd6e48015 100644 --- a/Code/Common/src/sitkVersorRigid3DTransform.cxx +++ b/Code/Common/src/sitkVersorRigid3DTransform.cxx @@ -188,17 +188,22 @@ void VersorRigid3DTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF_GetMatrix(); SITK_TRANSFORM_SET_MPF_SetMatrix(); - void (TransformType::*pfSetRotation1) (const typename TransformType::VersorType &) = &TransformType::SetRotation; - this->m_pfSetRotation1 = std::bind(pfSetRotation1,t,std::bind(&sitkSTLVectorToITKVersor,std::placeholders::_1)); + this->m_pfSetRotation1 = [t](const std::vector &v) { + t->SetRotation(sitkSTLVectorToITKVersor(v)); + }; - typename TransformType::OutputVectorType (*pfSTLVectorToITK)(const std::vector &) = &sitkSTLVectorToITK; - void (TransformType::*pfSetRotation2) (const typename TransformType::AxisType &, double) = &TransformType::SetRotation; - this->m_pfSetRotation2 = std::bind(pfSetRotation2,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); + this->m_pfSetRotation2 = [t](const std::vector &v, double d) { + t->SetRotation(sitkSTLVectorToITK(v),d); + }; - this->m_pfGetVersor = std::bind(&sitkITKVersorToSTL,std::bind(&TransformType::GetVersor,t)); + this->m_pfGetVersor = [t] () { + return sitkITKVersorToSTL(t->GetVersor()); + }; // pre argument has no effect - this->m_pfTranslate = std::bind(&TransformType::Translate,t,std::bind(pfSTLVectorToITK,std::placeholders::_1), false); + this->m_pfTranslate = [t] (const std::vector &v) { + t->Translate( sitkSTLVectorToITK(v), false ); + }; } } diff --git a/Code/Common/src/sitkVersorTransform.cxx b/Code/Common/src/sitkVersorTransform.cxx index d7689f1ad..e31cf14ca 100644 --- a/Code/Common/src/sitkVersorTransform.cxx +++ b/Code/Common/src/sitkVersorTransform.cxx @@ -161,16 +161,17 @@ void VersorTransform::InternalInitialization(TransformType *t) SITK_TRANSFORM_SET_MPF_GetMatrix(); SITK_TRANSFORM_SET_MPF_SetMatrix(); - typename TransformType::OutputVectorType (*pfSTLVectorToITK)(const std::vector &) = &sitkSTLVectorToITK; + this->m_pfSetRotation1 = [t](const std::vector &v) { + t->SetRotation(sitkSTLVectorToITKVersor(v)); + }; - void (TransformType::*pfSetRotation1) (const typename TransformType::VersorType &) = &TransformType::SetRotation; - this->m_pfSetRotation1 = std::bind(pfSetRotation1,t,std::bind(&sitkSTLVectorToITKVersor,std::placeholders::_1)); - - void (TransformType::*pfSetRotation2) (const typename TransformType::AxisType &, double) = &TransformType::SetRotation; - this->m_pfSetRotation2 = std::bind(pfSetRotation2,t,std::bind(pfSTLVectorToITK,std::placeholders::_1),std::placeholders::_2); - - this->m_pfGetVersor = std::bind(&sitkITKVersorToSTL,std::bind(&TransformType::GetVersor,t)); + this->m_pfSetRotation2 = [t](const std::vector &v, double d) { + t->SetRotation(sitkSTLVectorToITK(v),d); + }; + this->m_pfGetVersor = [t] () { + return sitkITKVersorToSTL(t->GetVersor()); + }; } } diff --git a/Code/Registration/src/sitkImageRegistrationMethod_CreateOptimizer.cxx b/Code/Registration/src/sitkImageRegistrationMethod_CreateOptimizer.cxx index 325c8ba4b..38882e2f4 100644 --- a/Code/Registration/src/sitkImageRegistrationMethod_CreateOptimizer.cxx +++ b/Code/Registration/src/sitkImageRegistrationMethod_CreateOptimizer.cxx @@ -106,7 +106,10 @@ namespace simple this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); this->m_pfGetOptimizerLearningRate = std::bind(&_OptimizerType::GetLearningRate,optimizer.GetPointer()); this->m_pfGetOptimizerConvergenceValue = std::bind(&_OptimizerType::GetConvergenceValue,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + auto x = optimizer.GetPointer(); + this->m_pfGetOptimizerScales = [x]() { + return PositionOptimizerCustomCast::Helper(x->GetScales()); + }; optimizer->Register(); return optimizer.GetPointer(); @@ -128,7 +131,10 @@ namespace simple this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); this->m_pfGetOptimizerLearningRate = std::bind(&_OptimizerType::GetLearningRate,optimizer.GetPointer()); this->m_pfGetOptimizerConvergenceValue = std::bind(&_OptimizerType::GetConvergenceValue,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + auto x = optimizer.GetPointer(); + this->m_pfGetOptimizerScales = [x]() { + return PositionOptimizerCustomCast::Helper(x->GetScales()); + }; optimizer->Register(); return optimizer.GetPointer(); @@ -154,7 +160,11 @@ namespace simple this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); this->m_pfGetOptimizerLearningRate = std::bind(&_OptimizerType::GetLearningRate,optimizer.GetPointer()); this->m_pfGetOptimizerConvergenceValue = std::bind(&_OptimizerType::GetConvergenceValue,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + auto x = optimizer.GetPointer(); + this->m_pfGetOptimizerScales = [x]() { + return PositionOptimizerCustomCast::Helper(x->GetScales()); + }; + optimizer->Register(); return optimizer.GetPointer(); @@ -179,7 +189,11 @@ namespace simple this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); this->m_pfGetOptimizerLearningRate = std::bind(&_OptimizerType::GetLearningRate,optimizer.GetPointer()); this->m_pfGetOptimizerConvergenceValue = std::bind(&_OptimizerType::GetConvergenceValue,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + auto x = optimizer.GetPointer(); + this->m_pfGetOptimizerScales = [x]() { + return PositionOptimizerCustomCast::Helper(x->GetScales()); + }; + return optimizer.GetPointer(); } @@ -227,7 +241,11 @@ namespace simple this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetValue,optimizer.GetPointer()); this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + auto x = optimizer.GetPointer(); + this->m_pfGetOptimizerScales = [x]() { + return PositionOptimizerCustomCast::Helper(x->GetScales()); + }; + return optimizer.GetPointer(); } @@ -250,7 +268,11 @@ namespace simple this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetValue,optimizer.GetPointer()); this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + auto x = optimizer.GetPointer(); + this->m_pfGetOptimizerScales = [x]() { + return PositionOptimizerCustomCast::Helper(x->GetScales()); + }; + return optimizer.GetPointer(); } @@ -265,8 +287,11 @@ namespace simple this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetCurrentValue,optimizer); this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer); + auto x = optimizer.GetPointer(); + this->m_pfGetOptimizerScales = [x]() { + return PositionOptimizerCustomCast::Helper(x->GetScales()); + }; - this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); this->m_pfUpdateWithBestValue = std::bind(&UpdateWithBestValueExhaustive, optimizer, @@ -295,7 +320,11 @@ namespace simple this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetValue,optimizer); this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer); - this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + auto x = optimizer.GetPointer(); + this->m_pfGetOptimizerScales = [x]() { + return PositionOptimizerCustomCast::Helper(x->GetScales()); + }; + optimizer->Register(); return optimizer.GetPointer(); @@ -314,7 +343,11 @@ namespace simple this->m_pfGetMetricValue = std::bind(&_OptimizerType::GetValue,optimizer.GetPointer()); this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + auto x = optimizer.GetPointer(); + this->m_pfGetOptimizerScales = [x]() { + return PositionOptimizerCustomCast::Helper(x->GetScales()); + }; + optimizer->Register(); return optimizer.GetPointer(); @@ -349,7 +382,11 @@ namespace simple this->m_pfGetOptimizerIteration = std::bind(&CurrentIterationCustomCast::CustomCast,optimizer.GetPointer()); this->m_pfGetOptimizerPosition = std::bind(&PositionOptimizerCustomCast::CustomCast,optimizer.GetPointer()); this->m_pfGetOptimizerConvergenceValue = std::bind(&_OptimizerType::GetFrobeniusNorm,optimizer.GetPointer()); - this->m_pfGetOptimizerScales = std::bind(&PositionOptimizerCustomCast::Helper<_OptimizerType::ScalesType>, std::bind(&_OptimizerType::GetScales, optimizer.GetPointer())); + auto x = optimizer.GetPointer(); + this->m_pfGetOptimizerScales = [x]() { + return PositionOptimizerCustomCast::Helper(x->GetScales()); + }; + optimizer->Register(); return optimizer.GetPointer(); From 18246c468d15b6d4e6b107fdd54d78d5f90fb8f2 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 14 Feb 2020 14:10:34 -0500 Subject: [PATCH 383/400] Add move operations to the Image class --- Code/Common/include/sitkImage.h | 14 +++++++++ Code/Common/src/sitkImage.cxx | 47 ++++++++++++++++++++-------- Testing/Unit/sitkImageTests.cxx | 54 ++++++++++++++++++++++++++++++++- 3 files changed, 102 insertions(+), 13 deletions(-) diff --git a/Code/Common/include/sitkImage.h b/Code/Common/include/sitkImage.h index f20e53357..1a586be20 100644 --- a/Code/Common/include/sitkImage.h +++ b/Code/Common/include/sitkImage.h @@ -84,8 +84,20 @@ namespace simple // copy constructor Image( const Image &img ); + Image& operator=( const Image &img ); + + /** \brief Move constructor and assignment. + * + * @param img After the operation img is valid only for + * destructing and assignment; all other operations have undefined + * behavior. + */ + Image( Image &&img ); + Image& operator=( Image &&img ); + + /** \brief Constructors for 2D, 3D an optionally 4D images where * pixel type and number of components can be specified. * @@ -151,6 +163,8 @@ namespace simple * return an PixelID which identifies the image type which the * DataObject points to. * + * If this object has been moved, then nullptr is returned. + * * @{ */ itk::DataObject* GetITKBase( void ); diff --git a/Code/Common/src/sitkImage.cxx b/Code/Common/src/sitkImage.cxx index 026bc7344..d37e5ef1a 100644 --- a/Code/Common/src/sitkImage.cxx +++ b/Code/Common/src/sitkImage.cxx @@ -23,7 +23,8 @@ #include "sitkExceptionObject.h" #include "sitkPimpleImageBase.h" #include "sitkPixelIDTypeLists.h" -#include "sitkConditional.h" + +#include namespace itk @@ -44,17 +45,27 @@ namespace itk } Image::Image( const Image &img ) + : m_PimpleImage( img.m_PimpleImage->ShallowCopy()) + { + } + + Image::Image( Image && img ) + : m_PimpleImage( nullptr ) { - this->m_PimpleImage = img.m_PimpleImage->ShallowCopy(); + using std::swap; + swap(m_PimpleImage, img.m_PimpleImage); } Image& Image::operator=( const Image &img ) { - // note: If img and this are this same, the following statement - // will still be safe. It is also exception safe. - std::unique_ptr temp( img.m_PimpleImage->ShallowCopy() ); - delete this->m_PimpleImage; - this->m_PimpleImage = temp.release(); + // follow the Rule of Five + return *this = Image(img); + } + + Image &Image::operator=(Image && img) + { + using std::swap; + swap(m_PimpleImage, img.m_PimpleImage); return *this; } @@ -93,15 +104,27 @@ namespace itk itk::DataObject* Image::GetITKBase( void ) { - assert( m_PimpleImage ); - this->MakeUnique(); - return m_PimpleImage->GetDataBase(); + if ( m_PimpleImage ) + { + this->MakeUnique(); + return m_PimpleImage->GetDataBase(); + } + else + { + return nullptr; + } } const itk::DataObject* Image::GetITKBase( void ) const { - assert( m_PimpleImage ); - return m_PimpleImage->GetDataBase(); + if ( m_PimpleImage ) + { + return m_PimpleImage->GetDataBase(); + } + else + { + return nullptr; + } } PixelIDValueType Image::GetPixelIDValue( void ) const diff --git a/Testing/Unit/sitkImageTests.cxx b/Testing/Unit/sitkImageTests.cxx index 80582a551..8cf9a9c4f 100644 --- a/Testing/Unit/sitkImageTests.cxx +++ b/Testing/Unit/sitkImageTests.cxx @@ -37,6 +37,7 @@ #include "itkImage.h" #include "itkVectorImage.h" #include "itkMetaDataObject.h" +#include const double adir[] = {0.0, 0.0, 1.0, -1.0, 0.0, 0.0, @@ -130,7 +131,7 @@ class Image : public ::testing::Test { TEST_F(Image,Create) { - ASSERT_TRUE ( shortImage->GetITKBase() != NULL ); + ASSERT_TRUE ( shortImage->GetITKBase() != nullptr ); EXPECT_EQ ( shortImage->GetWidth(), itkShortImage->GetLargestPossibleRegion().GetSize()[0] ) << " Checking image width"; EXPECT_EQ ( shortImage->GetHeight(), itkShortImage->GetLargestPossibleRegion().GetSize()[1] ) << " Checking image height"; EXPECT_EQ ( shortImage->GetDepth(), itkShortImage->GetLargestPossibleRegion().GetSize()[2] ) << " Checking image depth"; @@ -1637,6 +1638,57 @@ TEST_F(Image,MetaDataDictionary) } +TEST_F(Image, MoveOperations) +{ + sitk::Image img; + + static_assert(std::is_move_constructible::value, "Verify method availability"); + static_assert(std::is_move_assignable::value, "Verify method availability"); + + img = sitk::Image(10,10, sitk::sitkUInt8); + + EXPECT_EQ(img.GetSize()[0], 10); + + sitk::Image img2(5, 6, sitk::sitkUInt8); + + // The details of when an image has a nullptr for the ITKBase are + // not specified, so that part of the tests are to verify the + // internal implementation details + auto itkBasePtr = img2.GetITKBase(); + + img = std::move(img2); + + EXPECT_EQ(img.GetSize()[1], 6); + EXPECT_EQ(static_cast(img).GetITKBase(), itkBasePtr); + + sitk::Image img3(std::move(img)); + + EXPECT_EQ(img3.GetSize()[0], 5); + EXPECT_EQ(static_cast(img3).GetITKBase(), itkBasePtr); + EXPECT_EQ(static_cast(img).GetITKBase(), nullptr); + + img = std::move(img3); + + EXPECT_EQ(img.GetSize()[0], 5); + EXPECT_EQ(static_cast(img).GetITKBase(), itkBasePtr); + EXPECT_EQ(static_cast(img3).GetITKBase(), nullptr); + + img2 = img; + + + EXPECT_EQ(img2.GetSize()[0], 5); + EXPECT_EQ(static_cast(img2).GetITKBase(), itkBasePtr); + EXPECT_EQ(static_cast(img).GetITKBase(), itkBasePtr); + + const sitk::Image img4(std::move(img2)); + + EXPECT_EQ(img4.GetSize()[0], 5); + EXPECT_EQ(img4.GetITKBase(), itkBasePtr); + EXPECT_EQ(static_cast(img).GetITKBase(), itkBasePtr); + EXPECT_EQ(static_cast(img2).GetITKBase(), nullptr); + +} + TEST_F(Image,Mandelbrot) { From 973b349f730f45a302943caeeb9acaed39ca4e96 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 2 Mar 2020 12:20:34 -0500 Subject: [PATCH 384/400] Increase max blob size for ghostflow-check-master --- .gitattributes | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitattributes b/.gitattributes index ed8ba03ce..880aa052a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -29,3 +29,6 @@ *.rb whitespace=tab-in-indent,no-lf-at-eof *.R whitespace=tab-in-indent,no-lf-at-eof *.tcl whitespace=tab-in-indent,no-lf-at-eof + +Wrapping/Java/JavaDoc.i hooks-max-size=2097152 +Wrapping/Python/PythonDocstrings.i hooks-max-size=2097152 From 199754cb3203bf59286edcfacb223d8bf74d209a Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 28 Feb 2020 14:15:52 -0500 Subject: [PATCH 385/400] Directly use C++11 noexcept keyword Remove SITK_NOEXCEPT macro. --- .../include/sitkDualMemberFunctionFactory.h | 2 +- .../include/sitkDualMemberFunctionFactory.hxx | 2 +- Code/Common/include/sitkExceptionObject.h | 16 +++++++-------- Code/Common/include/sitkMacro.h | 7 ------- .../include/sitkMemberFunctionFactory.h | 2 +- .../include/sitkMemberFunctionFactory.hxx | 2 +- Code/Common/include/sitkProcessObject.h | 2 +- Code/Common/src/sitkExceptionObject.cxx | 14 ++++++------- Code/Common/src/sitkPimpleImageBase.hxx | 2 +- Code/Common/src/sitkProcessObject.cxx | 2 +- .../include/sitkImageRegistrationMethod.h | 2 +- .../src/sitkImageRegistrationMethod.cxx | 2 +- Wrapping/Common/SimpleITK_Common.i | 2 -- Wrapping/Java/JavaDoc.i | 20 +++++++++---------- Wrapping/Python/PythonDocstrings.i | 2 +- 15 files changed, 35 insertions(+), 44 deletions(-) diff --git a/Code/Common/include/sitkDualMemberFunctionFactory.h b/Code/Common/include/sitkDualMemberFunctionFactory.h index 186cc9cdf..2e6550804 100644 --- a/Code/Common/include/sitkDualMemberFunctionFactory.h +++ b/Code/Common/include/sitkDualMemberFunctionFactory.h @@ -142,7 +142,7 @@ class DualMemberFunctionFactory */ bool HasMemberFunction( PixelIDValueType pixelID1, PixelIDValueType pixelID2, - unsigned int imageDimension ) const SITK_NOEXCEPT; + unsigned int imageDimension ) const noexcept; /** \brief Returns a function object for the combination of diff --git a/Code/Common/include/sitkDualMemberFunctionFactory.hxx b/Code/Common/include/sitkDualMemberFunctionFactory.hxx index ae3a051e0..6fd255206 100644 --- a/Code/Common/include/sitkDualMemberFunctionFactory.hxx +++ b/Code/Common/include/sitkDualMemberFunctionFactory.hxx @@ -143,7 +143,7 @@ DualMemberFunctionFactory< TMemberFunctionPointer > template bool DualMemberFunctionFactory< TMemberFunctionPointer > -::HasMemberFunction( PixelIDValueType pixelID1, PixelIDValueType pixelID2, unsigned int imageDimension ) const SITK_NOEXCEPT +::HasMemberFunction( PixelIDValueType pixelID1, PixelIDValueType pixelID2, unsigned int imageDimension ) const noexcept { try { diff --git a/Code/Common/include/sitkExceptionObject.h b/Code/Common/include/sitkExceptionObject.h index 5ccf0b6c6..a845a5e6c 100644 --- a/Code/Common/include/sitkExceptionObject.h +++ b/Code/Common/include/sitkExceptionObject.h @@ -47,22 +47,22 @@ class SITKCommon_EXPORT GenericException : public: /** Default constructor. Needed to ensure the exception object can be * copied. */ - GenericException() SITK_NOEXCEPT; - GenericException( const GenericException &e ) SITK_NOEXCEPT; + GenericException() noexcept; + GenericException( const GenericException &e ) noexcept; /** Constructor. Needed to ensure the exception object can be copied. */ - GenericException(const char *file, unsigned int lineNumber) SITK_NOEXCEPT; + GenericException(const char *file, unsigned int lineNumber) noexcept; /** Constructor. Needed to ensure the exception object can be copied. */ - GenericException(const std::string & file, unsigned int lineNumber) SITK_NOEXCEPT; + GenericException(const std::string & file, unsigned int lineNumber) noexcept; /** Constructor. Needed to ensure the exception object can be copied. */ GenericException(const std::string & file, unsigned int lineNumber, - const std::string & desc) SITK_NOEXCEPT; + const std::string & desc) noexcept; - /** Virtual destructor needed for subclasses. Has to have empty SITK_NOEXCEPT. */ - virtual ~GenericException() SITK_NOEXCEPT; + /** Virtual destructor needed for subclasses. Has to have empty noexcept. */ + virtual ~GenericException() noexcept; /** Assignment operator. */ GenericException & operator=(const GenericException & orig); @@ -74,7 +74,7 @@ class SITKCommon_EXPORT GenericException : /** Return a description of the error */ std::string ToString() const; - const char * what() const SITK_NOEXCEPT; + const char * what() const noexcept; virtual const char * GetNameOfClass() const; diff --git a/Code/Common/include/sitkMacro.h b/Code/Common/include/sitkMacro.h index 41b41b8da..62b5a9de3 100644 --- a/Code/Common/include/sitkMacro.h +++ b/Code/Common/include/sitkMacro.h @@ -57,15 +57,8 @@ // is intended to override the base-class version. This makes the code more // manageable and fixes a set of common hard-to-find bugs. #define SITK_OVERRIDE override -// In C++11 the throw-list specification has been deprecated, -// replaced with the noexcept specifier. Using this function -// specification adds the run-time check that the method does not -// throw. If it does throw then std::terminate will be called. -// Use cautiously. -#define SITK_NOEXCEPT noexcept #else #define SITK_OVERRIDE -#define SITK_NOEXCEPT throw() #endif #if defined(SITK_HAS_TEMPLATE_DISAMBIGUATOR_DEPENDENT_NAME) diff --git a/Code/Common/include/sitkMemberFunctionFactory.h b/Code/Common/include/sitkMemberFunctionFactory.h index bf7880032..4902e80f4 100644 --- a/Code/Common/include/sitkMemberFunctionFactory.h +++ b/Code/Common/include/sitkMemberFunctionFactory.h @@ -127,7 +127,7 @@ class MemberFunctionFactory /** \brief Query to determine if an member function has been * registered for pixelID and imageDimension */ - bool HasMemberFunction( PixelIDValueType pixelID, unsigned int imageDimension ) const SITK_NOEXCEPT; + bool HasMemberFunction( PixelIDValueType pixelID, unsigned int imageDimension ) const noexcept; /** \brief Returns a function object for the PixelIndex, and image * dimension. diff --git a/Code/Common/include/sitkMemberFunctionFactory.hxx b/Code/Common/include/sitkMemberFunctionFactory.hxx index 09b6fe7c9..7c4832aa7 100644 --- a/Code/Common/include/sitkMemberFunctionFactory.hxx +++ b/Code/Common/include/sitkMemberFunctionFactory.hxx @@ -130,7 +130,7 @@ void MemberFunctionFactory template bool MemberFunctionFactory< TMemberFunctionPointer > -::HasMemberFunction( PixelIDValueType pixelID, unsigned int imageDimension ) const SITK_NOEXCEPT +::HasMemberFunction( PixelIDValueType pixelID, unsigned int imageDimension ) const noexcept { try diff --git a/Code/Common/include/sitkProcessObject.h b/Code/Common/include/sitkProcessObject.h index 48cf33cfa..3bf5de0d6 100644 --- a/Code/Common/include/sitkProcessObject.h +++ b/Code/Common/include/sitkProcessObject.h @@ -262,7 +262,7 @@ namespace itk { friend class itk::simple::Command; // method call by command when it's deleted, maintains internal // references between command and process objects. - virtual void onCommandDelete(const itk::simple::Command *cmd) SITK_NOEXCEPT; + virtual void onCommandDelete(const itk::simple::Command *cmd) noexcept; #endif diff --git a/Code/Common/src/sitkExceptionObject.cxx b/Code/Common/src/sitkExceptionObject.cxx index 23d3d32d6..346dc8747 100644 --- a/Code/Common/src/sitkExceptionObject.cxx +++ b/Code/Common/src/sitkExceptionObject.cxx @@ -29,11 +29,11 @@ namespace itk namespace simple { -GenericException::GenericException() SITK_NOEXCEPT +GenericException::GenericException() noexcept : m_PimpleException( nullptr ) {} -GenericException::GenericException( const GenericException &e ) SITK_NOEXCEPT +GenericException::GenericException( const GenericException &e ) noexcept : std::exception( e ) { @@ -50,7 +50,7 @@ GenericException::GenericException( const GenericException &e ) SITK_NOEXCEPT } } -GenericException::GenericException(const char *file, unsigned int lineNumber) SITK_NOEXCEPT +GenericException::GenericException(const char *file, unsigned int lineNumber) noexcept { try { @@ -63,7 +63,7 @@ GenericException::GenericException(const char *file, unsigned int lineNumber) SI } /** Constructor. Needed to ensure the exception object can be copied. */ -GenericException::GenericException(const std::string & file, unsigned int lineNumber) SITK_NOEXCEPT +GenericException::GenericException(const std::string & file, unsigned int lineNumber) noexcept { try { @@ -78,7 +78,7 @@ GenericException::GenericException(const std::string & file, unsigned int lineNu /** Constructor. Needed to ensure the exception object can be copied. */ GenericException::GenericException(const std::string & file, unsigned int lineNumber, - const std::string & desc) SITK_NOEXCEPT + const std::string & desc) noexcept { try { @@ -90,7 +90,7 @@ GenericException::GenericException(const std::string & file, } } -GenericException::~GenericException() SITK_NOEXCEPT +GenericException::~GenericException() noexcept { delete this->m_PimpleException; } @@ -130,7 +130,7 @@ std::string GenericException::ToString() const return std::string("No pimple exception"); } -const char * GenericException::what() const SITK_NOEXCEPT +const char * GenericException::what() const noexcept { if ( this->m_PimpleException ) return this->m_PimpleException->what(); diff --git a/Code/Common/src/sitkPimpleImageBase.hxx b/Code/Common/src/sitkPimpleImageBase.hxx index 413255d08..e81f03f59 100644 --- a/Code/Common/src/sitkPimpleImageBase.hxx +++ b/Code/Common/src/sitkPimpleImageBase.hxx @@ -116,7 +116,7 @@ namespace itk virtual const itk::DataObject* GetDataBase( void ) const { return this->m_Image.GetPointer(); } - PixelIDValueEnum GetPixelID(void) const SITK_NOEXCEPT + PixelIDValueEnum GetPixelID(void) const noexcept { // The constructor ensures that we have a valid image // this maps the Image's pixel type to the array index diff --git a/Code/Common/src/sitkProcessObject.cxx b/Code/Common/src/sitkProcessObject.cxx index 140583d06..101e572ea 100644 --- a/Code/Common/src/sitkProcessObject.cxx +++ b/Code/Common/src/sitkProcessObject.cxx @@ -498,7 +498,7 @@ void ProcessObject::OnActiveProcessDelete( ) } -void ProcessObject::onCommandDelete(const itk::simple::Command *cmd) SITK_NOEXCEPT +void ProcessObject::onCommandDelete(const itk::simple::Command *cmd) noexcept { // remove command from m_Command book keeping list, and remove it // from the ITK ProcessObject diff --git a/Code/Registration/include/sitkImageRegistrationMethod.h b/Code/Registration/include/sitkImageRegistrationMethod.h index ea9b0239d..25a399a73 100644 --- a/Code/Registration/include/sitkImageRegistrationMethod.h +++ b/Code/Registration/include/sitkImageRegistrationMethod.h @@ -663,7 +663,7 @@ namespace simple TRegistrationMethod* method); virtual void PreUpdate( itk::ProcessObject *p ); - virtual void OnActiveProcessDelete( ) SITK_NOEXCEPT; + virtual void OnActiveProcessDelete( ) noexcept; virtual unsigned long AddITKObserver(const itk::EventObject &, itk::Command *); virtual void RemoveITKObserver( EventCommand &e ); diff --git a/Code/Registration/src/sitkImageRegistrationMethod.cxx b/Code/Registration/src/sitkImageRegistrationMethod.cxx index 9c15be4de..700a9def6 100644 --- a/Code/Registration/src/sitkImageRegistrationMethod.cxx +++ b/Code/Registration/src/sitkImageRegistrationMethod.cxx @@ -1202,7 +1202,7 @@ void ImageRegistrationMethod::RemoveITKObserver( EventCommand &e ) return Superclass::RemoveITKObserver(e); } -void ImageRegistrationMethod::OnActiveProcessDelete( ) SITK_NOEXCEPT +void ImageRegistrationMethod::OnActiveProcessDelete( ) noexcept { Superclass::OnActiveProcessDelete( ); diff --git a/Wrapping/Common/SimpleITK_Common.i b/Wrapping/Common/SimpleITK_Common.i index 4ede45b53..401a5c1c6 100644 --- a/Wrapping/Common/SimpleITK_Common.i +++ b/Wrapping/Common/SimpleITK_Common.i @@ -130,8 +130,6 @@ namespace std #define SITK_RETURN_SELF_TYPE_HEADER void #endif -#ifndef SITK_NOEXCEPT -#define SITK_NOEXCEPT #endif diff --git a/Wrapping/Java/JavaDoc.i b/Wrapping/Java/JavaDoc.i index a81fd03c2..eaa5e35ea 100644 --- a/Wrapping/Java/JavaDoc.i +++ b/Wrapping/Java/JavaDoc.i @@ -14410,7 +14410,7 @@ C++ includes: sitkExceptionObject.h */" %javamethodmodifiers itk::simple::GenericException::GenericException "/** -itk::simple::GenericException::GenericException() SITK_NOEXCEPT +itk::simple::GenericException::GenericException() noexcept Default constructor. Needed to ensure the exception object can be copied. @@ -14419,12 +14419,12 @@ copied. public "; %javamethodmodifiers itk::simple::GenericException::GenericException "/** -itk::simple::GenericException::GenericException(const GenericException &e) SITK_NOEXCEPT +itk::simple::GenericException::GenericException(const GenericException &e) noexcept */ public "; %javamethodmodifiers itk::simple::GenericException::GenericException "/** -itk::simple::GenericException::GenericException(const char *file, unsigned int lineNumber) SITK_NOEXCEPT +itk::simple::GenericException::GenericException(const char *file, unsigned int lineNumber) noexcept Constructor. Needed to ensure the exception object can be copied. @@ -14432,7 +14432,7 @@ Constructor. Needed to ensure the exception object can be copied. public "; %javamethodmodifiers itk::simple::GenericException::GenericException "/** -itk::simple::GenericException::GenericException(const std::string &file, unsigned int lineNumber) SITK_NOEXCEPT +itk::simple::GenericException::GenericException(const std::string &file, unsigned int lineNumber) noexcept Constructor. Needed to ensure the exception object can be copied. @@ -14441,7 +14441,7 @@ public "; %javamethodmodifiers itk::simple::GenericException::GenericException "/** itk::simple::GenericException::GenericException(const std::string &file, unsigned int lineNumber, const std::string -&desc) SITK_NOEXCEPT +&desc) noexcept Constructor. Needed to ensure the exception object can be copied. @@ -14488,15 +14488,15 @@ Return a description of the error public "; %javamethodmodifiers itk::simple::GenericException::what "/** -const char* itk::simple::GenericException::what() const SITK_NOEXCEPT +const char* itk::simple::GenericException::what() const noexcept */ public "; %javamethodmodifiers itk::simple::GenericException::~GenericException "/** -virtual itk::simple::GenericException::~GenericException() SITK_NOEXCEPT +virtual itk::simple::GenericException::~GenericException() noexcept Virtual destructor needed for subclasses. Has to have empty -SITK_NOEXCEPT. +noexcept. */ public "; @@ -45941,7 +45941,7 @@ public "; %javamethodmodifiers itk::simple::DualMemberFunctionFactory::HasMemberFunction "/** bool itk::simple::DualMemberFunctionFactory< TMemberFunctionPointer >::HasMemberFunction(PixelIDValueType pixelID1, PixelIDValueType pixelID2, unsigned int -imageDimension) const SITK_NOEXCEPT +imageDimension) const noexcept Query to determine if an member function has been registered for pixelID1, pixelID2 and imageDimension. @@ -46008,7 +46008,7 @@ public "; %javamethodmodifiers itk::simple::MemberFunctionFactory::HasMemberFunction "/** bool itk::simple::MemberFunctionFactory< TMemberFunctionPointer >::HasMemberFunction(PixelIDValueType pixelID, unsigned int imageDimension) const -SITK_NOEXCEPT +noexcept Query to determine if an member function has been registered for pixelID and imageDimension. diff --git a/Wrapping/Python/PythonDocstrings.i b/Wrapping/Python/PythonDocstrings.i index a759573ff..9b26f08bf 100644 --- a/Wrapping/Python/PythonDocstrings.i +++ b/Wrapping/Python/PythonDocstrings.i @@ -11575,7 +11575,7 @@ Return a description of the error %feature("docstring") itk::simple::GenericException::~GenericException " Virtual destructor needed for subclasses. Has to have empty -SITK_NOEXCEPT. +noexcept. "; From 33c8272d18d4278aa9e997b45ed99d2043d79d06 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Fri, 28 Feb 2020 14:17:54 -0500 Subject: [PATCH 386/400] Replace SITK_OVERRIDE with C++11 override keyword --- Code/Common/include/sitkMacro.h | 10 ---------- Code/Common/src/sitkProcessObject.cxx | 4 ++-- Code/Common/src/sitkTransform.cxx | 4 ++-- Wrapping/Common/SimpleITK_Common.i | 2 -- 4 files changed, 4 insertions(+), 16 deletions(-) diff --git a/Code/Common/include/sitkMacro.h b/Code/Common/include/sitkMacro.h index 62b5a9de3..e9216b1d1 100644 --- a/Code/Common/include/sitkMacro.h +++ b/Code/Common/include/sitkMacro.h @@ -51,16 +51,6 @@ #endif #endif - -#if __cplusplus >= 201103L -// In c++11 the override keyword allows you to explicitly define that a function -// is intended to override the base-class version. This makes the code more -// manageable and fixes a set of common hard-to-find bugs. -#define SITK_OVERRIDE override -#else -#define SITK_OVERRIDE -#endif - #if defined(SITK_HAS_TEMPLATE_DISAMBIGUATOR_DEPENDENT_NAME) #define CLANG_TEMPLATE template #else diff --git a/Code/Common/src/sitkProcessObject.cxx b/Code/Common/src/sitkProcessObject.cxx index 101e572ea..623783c8d 100644 --- a/Code/Common/src/sitkProcessObject.cxx +++ b/Code/Common/src/sitkProcessObject.cxx @@ -67,7 +67,7 @@ class SimpleAdaptorCommand } /** Invoke the member function. */ - virtual void Execute(Object *, const EventObject & ) SITK_OVERRIDE + virtual void Execute(Object *, const EventObject & ) override { if (m_That) { @@ -76,7 +76,7 @@ class SimpleAdaptorCommand } /** Invoke the member function with a const object */ - virtual void Execute(const Object *, const EventObject & ) SITK_OVERRIDE + virtual void Execute(const Object *, const EventObject & ) override { if ( m_That ) { diff --git a/Code/Common/src/sitkTransform.cxx b/Code/Common/src/sitkTransform.cxx index 1f2df11ae..19cb8c763 100644 --- a/Code/Common/src/sitkTransform.cxx +++ b/Code/Common/src/sitkTransform.cxx @@ -170,8 +170,8 @@ class HolderCommand ObjectType *Get() {return this->m_Object;} const ObjectType *Get() const {return this->m_Object;} - void Execute(itk::Object*, const itk::EventObject&) SITK_OVERRIDE {} - void Execute(const itk::Object*, const itk::EventObject&) SITK_OVERRIDE {} + void Execute(itk::Object*, const itk::EventObject&) override {} + void Execute(const itk::Object*, const itk::EventObject&) override {} protected: HolderCommand() : m_Object(nullptr) {}; diff --git a/Wrapping/Common/SimpleITK_Common.i b/Wrapping/Common/SimpleITK_Common.i index 401a5c1c6..1db32ffc9 100644 --- a/Wrapping/Common/SimpleITK_Common.i +++ b/Wrapping/Common/SimpleITK_Common.i @@ -130,8 +130,6 @@ namespace std #define SITK_RETURN_SELF_TYPE_HEADER void #endif -#endif - // define these preprocessor directives to nothing for the swig interface #define SITKCommon_EXPORT From bc8a3c7b16a743fe5bb7efcee87f9d258fc96bdd Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 3 Mar 2020 10:43:20 -0500 Subject: [PATCH 387/400] CircleCI do not use old KWStyle The ubuntu system version is old and does correctly support C++11 lambda functions. --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 49e4eff29..a409b79da 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -22,7 +22,7 @@ referenced: run: name: Dependencies command: | - sudo apt-get install -y rsync lua5.3 ccache kwstyle + sudo apt-get install -y rsync lua5.3 ccache sudo python -m pip install --upgrade pip sudo python -m pip install scikit-ci-addons # Provides "ctest_junit_formatter" add-on sudo python -m pip install cmake==3.13.3 From e27fc1f63ac74258c5e534c6db45ad9d01ab1808 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 3 Mar 2020 13:19:22 -0500 Subject: [PATCH 388/400] Skip wrapping sitk::Image move methods The methods are ignored by SWIG and produce a warning. --- Code/Common/include/sitkImage.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Code/Common/include/sitkImage.h b/Code/Common/include/sitkImage.h index 1a586be20..35579dd52 100644 --- a/Code/Common/include/sitkImage.h +++ b/Code/Common/include/sitkImage.h @@ -87,7 +87,7 @@ namespace simple Image& operator=( const Image &img ); - +#ifndef SWIG /** \brief Move constructor and assignment. * * @param img After the operation img is valid only for @@ -96,6 +96,7 @@ namespace simple */ Image( Image &&img ); Image& operator=( Image &&img ); +#endif /** \brief Constructors for 2D, 3D an optionally 4D images where From 9d7ec2c404784a0487fc60ac0ceb93b386ba4089 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 4 Mar 2020 13:04:54 -0500 Subject: [PATCH 389/400] Add Decay parameter to the MirrorPadImageFilter --- .../json/MirrorPadImageFilter.json | 37 +++++++++++++++++++ ...ers_MirrorPadImageFilter_decay.nrrd.sha512 | 1 + 2 files changed, 38 insertions(+) create mode 100644 Testing/Data/Baseline/BasicFilters_MirrorPadImageFilter_decay.nrrd.sha512 diff --git a/Code/BasicFilters/json/MirrorPadImageFilter.json b/Code/BasicFilters/json/MirrorPadImageFilter.json index 7b5ef5cc6..4518e2094 100644 --- a/Code/BasicFilters/json/MirrorPadImageFilter.json +++ b/Code/BasicFilters/json/MirrorPadImageFilter.json @@ -21,6 +21,15 @@ "doc" : "\todo what does this itk_type attribute do?", "dim_vec" : 1, "itk_type" : "typename InputImageType::SizeType" + }, + { + "name" : "DecayBase", + "type" : "double", + "default" : "1.0", + "briefdescriptionSet" : "", + "detaileddescriptionSet" : "Get/Set the base for exponential decay in mirrored region.", + "briefdescriptionGet" : "", + "detaileddescriptionGet" : "Get/Set the base for exponential decay in mirrored region." } ], "tests" : [ @@ -62,6 +71,34 @@ "inputs" : [ "Input/Ramp-Down-Short.nrrd" ] + }, + { + "tag" : "decay", + "description" : "Test with decay parameter", + "settings" : [ + { + "parameter" : "PadLowerBound", + "type" : "unsigned int", + "dim_vec" : 1, + "value" : [ + 10, + 11 + ] + }, + { + "parameter" : "PadUpperBound", + "type" : "unsigned int", + "dim_vec" : 1, + "value" : [ + 12, + 13 + ] + } + ], + "tolerance" : 1e-08, + "inputs" : [ + "Input/BrainProtonDensitySlice.png" + ] } ], "briefdescription" : "Increase the image size by padding with replicants of the input image value.", diff --git a/Testing/Data/Baseline/BasicFilters_MirrorPadImageFilter_decay.nrrd.sha512 b/Testing/Data/Baseline/BasicFilters_MirrorPadImageFilter_decay.nrrd.sha512 new file mode 100644 index 000000000..e82d265c3 --- /dev/null +++ b/Testing/Data/Baseline/BasicFilters_MirrorPadImageFilter_decay.nrrd.sha512 @@ -0,0 +1 @@ +f2704fde72df8712b16f01258358b07b8a5d48df7dd5b7e3df9d995223becd4459e7fc129457c663c380912ef8dfe9918a313feda067b94e6aaa9ef66c19f6eb From 6788d3544b100cf4b535daef0cce2756d7c0f9a0 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 4 Mar 2020 15:35:07 -0500 Subject: [PATCH 390/400] Add direct support for C++ lambda to ProcessObject commands --- Code/Common/include/sitkFunctionCommand.h | 3 +++ Code/Common/include/sitkProcessObject.h | 9 +++++++++ Code/Common/src/sitkFunctionCommand.cxx | 4 ++++ Code/Common/src/sitkProcessObject.cxx | 12 ++++++++++++ 4 files changed, 28 insertions(+) diff --git a/Code/Common/include/sitkFunctionCommand.h b/Code/Common/include/sitkFunctionCommand.h index 448494a0d..098b55e54 100644 --- a/Code/Common/include/sitkFunctionCommand.h +++ b/Code/Common/include/sitkFunctionCommand.h @@ -63,6 +63,9 @@ class SITKCommon_EXPORT FunctionCommand: */ void SetCallbackFunction( void(* pFunction )(void *), void *clientData ); + /** Set as a C++ function, which is compatible with lambdas. */ + void SetCallbackFunction( const std::function &); + private: typedef std::function FunctionObjectType; diff --git a/Code/Common/include/sitkProcessObject.h b/Code/Common/include/sitkProcessObject.h index 3bf5de0d6..6c46549a1 100644 --- a/Code/Common/include/sitkProcessObject.h +++ b/Code/Common/include/sitkProcessObject.h @@ -178,6 +178,15 @@ namespace itk { */ virtual int AddCommand(itk::simple::EventEnum event, itk::simple::Command &cmd); + #ifndef SWIG + /** \brief Directly add a callback to observe an event. + * + * This overloaded method can take a C++ lambda function as a + * second argument. + */ + virtual int AddCommand(itk::simple::EventEnum event, const std::function &func); + #endif + /** \brief Remove all registered commands. * * Calling when this object is invoking anther command will diff --git a/Code/Common/src/sitkFunctionCommand.cxx b/Code/Common/src/sitkFunctionCommand.cxx index 978127b16..716d87b4f 100644 --- a/Code/Common/src/sitkFunctionCommand.cxx +++ b/Code/Common/src/sitkFunctionCommand.cxx @@ -50,6 +50,10 @@ void FunctionCommand::SetCallbackFunction( void(* pFunction )(void *), void *cli m_Function = std::bind(pFunction, clientData); } +void FunctionCommand::SetCallbackFunction(const std::function &func) +{ + m_Function = func; +} } // end namespace simple } // end namespace itk diff --git a/Code/Common/src/sitkProcessObject.cxx b/Code/Common/src/sitkProcessObject.cxx index 623783c8d..683707e71 100644 --- a/Code/Common/src/sitkProcessObject.cxx +++ b/Code/Common/src/sitkProcessObject.cxx @@ -20,6 +20,7 @@ #include "itkProcessObject.h" #include "itkCommand.h" +#include "sitkFunctionCommand.h" #include "itkImageToImageFilter.h" #include "itkTextOutput.h" @@ -318,6 +319,17 @@ int ProcessObject::AddCommand(EventEnum event, Command &cmd) return 0; } +int ProcessObject::AddCommand(itk::simple::EventEnum event, const std::function &func) +{ + std::unique_ptr cmd(new FunctionCommand()); + cmd->SetCallbackFunction(func); + + int id = this->AddCommand(event, *cmd.get()); + cmd->OwnedByProcessObjectsOn(); + cmd.release(); + return id; +} + void ProcessObject::RemoveAllCommands() { From e39d2e394968c21c0eaa96907687a51c03486589 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 4 Mar 2020 16:15:00 -0500 Subject: [PATCH 391/400] Add testing for lambda commands --- Testing/Unit/sitkCommonTests.cxx | 64 ++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/Testing/Unit/sitkCommonTests.cxx b/Testing/Unit/sitkCommonTests.cxx index 0ed25bc3c..6cb9f8440 100644 --- a/Testing/Unit/sitkCommonTests.cxx +++ b/Testing/Unit/sitkCommonTests.cxx @@ -271,6 +271,70 @@ TEST( ProcessObject, Command_Add ) { EXPECT_TRUE(po1.HasCommand(sitk::sitkMultiResolutionIterationEvent)); } + + +TEST( ProcessObject, Command_Add_lambda ) { + // Add command for events and verifies the state + + namespace sitk = itk::simple; + + sitk::CastImageFilter po1; + + // check initial state + EXPECT_FALSE(po1.HasCommand(sitk::sitkAnyEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkAbortEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkDeleteEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkEndEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkIterationEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkProgressEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkStartEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkUserEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkMultiResolutionIterationEvent)); + + po1.AddCommand(sitk::sitkAnyEvent, []{std::cout << "command\n";}); + EXPECT_TRUE(po1.HasCommand(sitk::sitkAnyEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkAbortEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkDeleteEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkEndEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkIterationEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkProgressEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkStartEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkUserEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkMultiResolutionIterationEvent)); + + po1.RemoveAllCommands(); + EXPECT_FALSE(po1.HasCommand(sitk::sitkAnyEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkAbortEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkDeleteEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkEndEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkIterationEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkProgressEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkStartEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkUserEvent)); + EXPECT_FALSE(po1.HasCommand(sitk::sitkMultiResolutionIterationEvent)); + + po1.AddCommand(sitk::sitkAnyEvent, []{std::cout << "command\n";}); + po1.AddCommand(sitk::sitkAbortEvent, []{std::cout << "command\n";}); + po1.AddCommand(sitk::sitkDeleteEvent, []{std::cout << "command\n";}); + po1.AddCommand(sitk::sitkEndEvent, []{std::cout << "command\n";}); + po1.AddCommand(sitk::sitkIterationEvent, []{std::cout << "command\n";}); + po1.AddCommand(sitk::sitkProgressEvent, []{std::cout << "command\n";}); + po1.AddCommand(sitk::sitkStartEvent, []{std::cout << "command\n";}); + po1.AddCommand(sitk::sitkUserEvent, []{std::cout << "command\n";}); + po1.AddCommand(sitk::sitkMultiResolutionIterationEvent, []{std::cout << "command\n";}); + + EXPECT_TRUE(po1.HasCommand(sitk::sitkAnyEvent)); + EXPECT_TRUE(po1.HasCommand(sitk::sitkAbortEvent)); + EXPECT_TRUE(po1.HasCommand(sitk::sitkDeleteEvent)); + EXPECT_TRUE(po1.HasCommand(sitk::sitkEndEvent)); + EXPECT_TRUE(po1.HasCommand(sitk::sitkIterationEvent)); + EXPECT_TRUE(po1.HasCommand(sitk::sitkProgressEvent)); + EXPECT_TRUE(po1.HasCommand(sitk::sitkStartEvent)); + EXPECT_TRUE(po1.HasCommand(sitk::sitkUserEvent)); + EXPECT_TRUE(po1.HasCommand(sitk::sitkMultiResolutionIterationEvent)); +} + + TEST( ProcessObject, DeleteCommandActiveProcess ) { // Test the case of deleting the command while the process is active. From f0d1369decda7dca5d6439c0c867f6466480525b Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Wed, 4 Mar 2020 16:24:53 -0500 Subject: [PATCH 392/400] Add C++ lambda command example --- Examples/FilterProgressReporting/Documentation.rst | 9 ++++++++- .../FilterProgressReporting/FilterProgressReporting.cxx | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Examples/FilterProgressReporting/Documentation.rst b/Examples/FilterProgressReporting/Documentation.rst index 86f05ad76..6679660ea 100644 --- a/Examples/FilterProgressReporting/Documentation.rst +++ b/Examples/FilterProgressReporting/Documentation.rst @@ -79,13 +79,20 @@ languages support deriving classes from the Command class: Command Functions and Lambdas for Wrapped Languages --------------------------------------------------- -Not all scripting languages are naturally object oriented, and it is +Not all languages are naturally object oriented, and it is often easier to simply define a callback inline with a lambda function. The following language supports inline function definitions for functions for the ProcessObject::AddCommand method: .. tabs:: + .. group-tab:: C++ + + .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.cxx + :language: c++ + :start-after: [cpp lambda command] + :end-before: [cpp lambda command] + .. group-tab:: Python .. literalinclude:: ../../Examples/FilterProgressReporting/FilterProgressReporting.py diff --git a/Examples/FilterProgressReporting/FilterProgressReporting.cxx b/Examples/FilterProgressReporting/FilterProgressReporting.cxx index 45254245a..968add0ca 100644 --- a/Examples/FilterProgressReporting/FilterProgressReporting.cxx +++ b/Examples/FilterProgressReporting/FilterProgressReporting.cxx @@ -92,6 +92,12 @@ int main ( int argc, char* argv[] ) { // write the image sitk::ImageFileWriter writer; writer.SetFileName ( std::string ( argv[3] ) ); + + //! [cpp lambda command] + writer.AddCommand(sitk::sitkStartEvent, [] {std::cout << "Writting..." << std::flush;}); + writer.AddCommand(sitk::sitkEndEvent, [] {std::cout << "done" << std::endl;}); + //! [cpp lambda command] + writer.Execute ( outputImage ); return 0; From ea0bb67640c3a5e7df03ca13cc2ad7c7aa3b53a1 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 5 Mar 2020 11:33:24 -0500 Subject: [PATCH 393/400] Update copyright assignment to NumFOCUS SimpleITK is a proud part of the Insight Software Consortium (ISC), and maintains a mirror under the official Github ISC organization. As part of the process of the Insight Software Consortium joining the NumFOCUS non-profit corporation as a Fiscally Sponsored Project, all assets, including intellectual property assets, are being transferred to enable dissolution of the Insight Software Consortium non-profit corporate legal entity. --- .hooks-config.bash | 2 +- Code/BasicFilters/include/itkHashImageFilter.h | 2 +- Code/BasicFilters/include/itkHashImageFilter.hxx | 2 +- Code/BasicFilters/include/sitkAdditionalProcedures.h | 2 +- .../include/sitkBSplineTransformInitializerFilter.h | 2 +- Code/BasicFilters/include/sitkBasicFilters.h | 2 +- Code/BasicFilters/include/sitkCastImageFilter.h | 2 +- .../include/sitkCenteredTransformInitializerFilter.h | 2 +- .../sitkCenteredVersorTransformInitializerFilter.h | 2 +- Code/BasicFilters/include/sitkHashImageFilter.h | 2 +- Code/BasicFilters/include/sitkImageFilter.h | 2 +- Code/BasicFilters/include/sitkImageOperators.h | 2 +- .../sitkLandmarkBasedTransformInitializerFilter.h | 2 +- Code/BasicFilters/src/sitkAdditionalProcedures.cxx | 2 +- .../src/sitkBSplineTransformInitializerFilter.cxx | 2 +- Code/BasicFilters/src/sitkBoundaryConditions.hxx | 2 +- Code/BasicFilters/src/sitkCastImageFilter-2.cxx | 2 +- Code/BasicFilters/src/sitkCastImageFilter-2l.cxx | 2 +- Code/BasicFilters/src/sitkCastImageFilter-2v.cxx | 2 +- Code/BasicFilters/src/sitkCastImageFilter-3.cxx | 2 +- Code/BasicFilters/src/sitkCastImageFilter-3l.cxx | 2 +- Code/BasicFilters/src/sitkCastImageFilter-3v.cxx | 2 +- Code/BasicFilters/src/sitkCastImageFilter.cxx | 2 +- Code/BasicFilters/src/sitkCastImageFilter.hxx | 2 +- .../src/sitkCenteredTransformInitializerFilter.cxx | 2 +- .../sitkCenteredVersorTransformInitializerFilter.cxx | 2 +- Code/BasicFilters/src/sitkCreateInterpolator.hxx | 2 +- Code/BasicFilters/src/sitkCreateKernel.h | 2 +- Code/BasicFilters/src/sitkHashImageFilter.cxx | 2 +- Code/BasicFilters/src/sitkHeavisideFunction.hxx | 2 +- Code/BasicFilters/src/sitkImageFilter.cxx | 2 +- Code/BasicFilters/src/sitkImageToKernel.hxx | 2 +- Code/BasicFilters/src/sitkLabelFunctorUtils.hxx | 2 +- .../sitkLandmarkBasedTransformInitializerFilter.cxx | 2 +- Code/BasicFilters/src/sitkPermuteAxis_Static.hxx | 2 +- Code/BasicFilters/src/sitkToPixelType.hxx | 2 +- .../templates/sitkBinaryFunctorFilterTemplate.cxx.in | 2 +- .../templates/sitkBinaryFunctorFilterTemplate.h.in | 2 +- .../templates/sitkDualImageFilterTemplate.cxx.in | 2 +- .../templates/sitkDualImageFilterTemplate.h.in | 2 +- .../sitkFastMarchingImageFilterTemplate.cxx.in | 2 +- .../templates/sitkFastMarchingImageFilterTemplate.h.in | 2 +- .../templates/sitkImageFilterTemplate.cxx.in | 2 +- .../templates/sitkImageFilterTemplate.h.in | 2 +- .../templates/sitkImageSourceTemplate.cxx.in | 2 +- .../templates/sitkImageSourceTemplate.h.in | 2 +- .../templates/sitkKernelImageFilterTemplate.cxx.in | 2 +- .../templates/sitkKernelImageFilterTemplate.h.in | 2 +- .../templates/sitkMultiInputImageFilterTemplate.cxx.in | 2 +- .../templates/sitkMultiInputImageFilterTemplate.h.in | 2 +- .../sitkRegionGrowingImageFilterTemplate.cxx.in | 2 +- .../sitkRegionGrowingImageFilterTemplate.h.in | 2 +- Code/Common/include/Ancillary/FunctionTraits.h | 2 +- Code/Common/include/Ancillary/TypeList.h | 2 +- Code/Common/include/SimpleITK.h | 2 +- Code/Common/include/sitkAffineTransform.h | 2 +- Code/Common/include/sitkBSplineTransform.h | 2 +- Code/Common/include/sitkCommand.h | 2 +- Code/Common/include/sitkCommon.h | 2 +- Code/Common/include/sitkConditional.h | 2 +- Code/Common/include/sitkDetail.h | 2 +- Code/Common/include/sitkDisplacementFieldTransform.h | 2 +- Code/Common/include/sitkDualMemberFunctionFactory.h | 2 +- Code/Common/include/sitkDualMemberFunctionFactory.hxx | 2 +- Code/Common/include/sitkEuler2DTransform.h | 2 +- Code/Common/include/sitkEuler3DTransform.h | 2 +- Code/Common/include/sitkEvent.h | 2 +- Code/Common/include/sitkExceptionObject.h | 2 +- Code/Common/include/sitkFunctionCommand.h | 2 +- Code/Common/include/sitkImage.h | 2 +- Code/Common/include/sitkImageConvert.h | 2 +- Code/Common/include/sitkInterpolator.h | 2 +- Code/Common/include/sitkKernel.h | 2 +- Code/Common/include/sitkMacro.h | 2 +- Code/Common/include/sitkMemberFunctionFactory.h | 2 +- Code/Common/include/sitkMemberFunctionFactory.hxx | 2 +- Code/Common/include/sitkMemberFunctionFactoryBase.h | 2 +- Code/Common/include/sitkNonCopyable.h | 2 +- Code/Common/include/sitkPixelIDTokens.h | 2 +- Code/Common/include/sitkPixelIDTypeLists.h | 2 +- Code/Common/include/sitkPixelIDTypes.h | 2 +- Code/Common/include/sitkPixelIDValues.h | 2 +- Code/Common/include/sitkProcessObject.h | 2 +- Code/Common/include/sitkRandomSeed.h | 2 +- Code/Common/include/sitkScaleSkewVersor3DTransform.h | 2 +- Code/Common/include/sitkScaleTransform.h | 2 +- Code/Common/include/sitkScaleVersor3DTransform.h | 2 +- Code/Common/include/sitkSimilarity2DTransform.h | 2 +- Code/Common/include/sitkSimilarity3DTransform.h | 2 +- Code/Common/include/sitkTemplateFunctions.h | 2 +- Code/Common/include/sitkTransform.h | 2 +- Code/Common/include/sitkTranslationTransform.h | 2 +- Code/Common/include/sitkVersion.h | 2 +- Code/Common/include/sitkVersorRigid3DTransform.h | 2 +- Code/Common/include/sitkVersorTransform.h | 2 +- Code/Common/src/sitkAffineTransform.cxx | 2 +- Code/Common/src/sitkBSplineTransform.cxx | 2 +- Code/Common/src/sitkCommand.cxx | 2 +- Code/Common/src/sitkConfigure.h.in | 2 +- Code/Common/src/sitkDisplacementFieldTransform.cxx | 2 +- Code/Common/src/sitkEuler2DTransform.cxx | 2 +- Code/Common/src/sitkEuler3DTransform.cxx | 2 +- Code/Common/src/sitkEvent.cxx | 2 +- Code/Common/src/sitkExceptionObject.cxx | 2 +- Code/Common/src/sitkFunctionCommand.cxx | 2 +- Code/Common/src/sitkImage.cxx | 2 +- Code/Common/src/sitkImage.hxx | 2 +- Code/Common/src/sitkImageExplicit.cxx | 2 +- Code/Common/src/sitkInterpolator.cxx | 2 +- Code/Common/src/sitkKernel.cxx | 2 +- Code/Common/src/sitkPimpleImageBase.h | 2 +- Code/Common/src/sitkPimpleImageBase.hxx | 2 +- Code/Common/src/sitkPimpleTransform.hxx | 2 +- Code/Common/src/sitkPixelIDValues.cxx | 2 +- Code/Common/src/sitkProcessObject.cxx | 2 +- Code/Common/src/sitkScaleSkewVersor3DTransform.cxx | 2 +- Code/Common/src/sitkScaleTransform.cxx | 2 +- Code/Common/src/sitkScaleVersor3DTransform.cxx | 2 +- Code/Common/src/sitkSimilarity2DTransform.cxx | 2 +- Code/Common/src/sitkSimilarity3DTransform.cxx | 2 +- Code/Common/src/sitkTransform.cxx | 2 +- Code/Common/src/sitkTransformHelper.hxx | 2 +- Code/Common/src/sitkTranslationTransform.cxx | 2 +- Code/Common/src/sitkVersion.cxx | 2 +- Code/Common/src/sitkVersionConfig.h.in | 2 +- Code/Common/src/sitkVersorRigid3DTransform.cxx | 2 +- Code/Common/src/sitkVersorTransform.cxx | 2 +- Code/Explicit/include/sitkExplicit.h | 2 +- Code/Explicit/include/sitkExplicitITK.h | 2 +- .../include/sitkExplicitITKComposeImageFilter.h | 2 +- .../include/sitkExplicitITKDefaultPixelAccessor.h | 2 +- .../sitkExplicitITKDefaultVectorPixelAccessor.h | 2 +- Code/Explicit/include/sitkExplicitITKImage.h | 2 +- Code/Explicit/include/sitkExplicitITKImageBase.h | 2 +- .../include/sitkExplicitITKImageConstIterator.h | 2 +- Code/Explicit/include/sitkExplicitITKImageRegion.h | 2 +- .../include/sitkExplicitITKImageRegionConstIterator.h | 2 +- .../sitkExplicitITKImageScanlineConstIterator.h | 2 +- .../include/sitkExplicitITKImageScanlineIterator.h | 2 +- Code/Explicit/include/sitkExplicitITKImageSource.h | 2 +- .../include/sitkExplicitITKImageToImageFilter.h | 2 +- .../include/sitkExplicitITKImportImageContainer.h | 2 +- .../include/sitkExplicitITKInPlaceImageFilter.h | 2 +- Code/Explicit/include/sitkExplicitITKLabelMap.h | 2 +- Code/Explicit/include/sitkExplicitITKVectorImage.h | 2 +- ...itkExplicitITKVectorIndexSelectionCastImageFilter.h | 2 +- .../Explicit/src/sitkExplicitITKComposeImageFilter.cxx | 2 +- .../src/sitkExplicitITKDefaultPixelAccessor.cxx | 2 +- .../src/sitkExplicitITKDefaultVectorPixelAccessor.cxx | 2 +- Code/Explicit/src/sitkExplicitITKImage.cxx | 2 +- Code/Explicit/src/sitkExplicitITKImageBase.cxx | 2 +- .../Explicit/src/sitkExplicitITKImageConstIterator.cxx | 2 +- Code/Explicit/src/sitkExplicitITKImageRegion.cxx | 2 +- .../src/sitkExplicitITKImageRegionConstIterator.cxx | 2 +- .../src/sitkExplicitITKImageScanlineConstIterator.cxx | 2 +- .../src/sitkExplicitITKImageScanlineIterator.cxx | 2 +- Code/Explicit/src/sitkExplicitITKImageSource.cxx | 2 +- .../Explicit/src/sitkExplicitITKImageToImageFilter.cxx | 2 +- .../src/sitkExplicitITKImportImageContainer.cxx | 2 +- .../Explicit/src/sitkExplicitITKInPlaceImageFilter.cxx | 2 +- Code/Explicit/src/sitkExplicitITKLabelMap.cxx | 2 +- Code/Explicit/src/sitkExplicitITKVectorImage.cxx | 2 +- ...kExplicitITKVectorIndexSelectionCastImageFilter.cxx | 2 +- Code/IO/include/sitkIO.h | 2 +- Code/IO/include/sitkImageFileReader.h | 2 +- Code/IO/include/sitkImageFileWriter.h | 2 +- Code/IO/include/sitkImageReaderBase.h | 2 +- Code/IO/include/sitkImageSeriesReader.h | 2 +- Code/IO/include/sitkImageSeriesWriter.h | 2 +- Code/IO/include/sitkImageViewer.h | 2 +- Code/IO/include/sitkImportImageFilter.h | 2 +- Code/IO/include/sitkShow.h | 2 +- Code/IO/src/sitkImageFileReader.cxx | 2 +- Code/IO/src/sitkImageFileWriter.cxx | 2 +- Code/IO/src/sitkImageIOUtilities.cxx | 2 +- Code/IO/src/sitkImageIOUtilities.h | 2 +- Code/IO/src/sitkImageReaderBase.cxx | 2 +- Code/IO/src/sitkImageSeriesReader.cxx | 2 +- Code/IO/src/sitkImageSeriesWriter.cxx | 2 +- Code/IO/src/sitkImageViewer.cxx | 2 +- Code/IO/src/sitkImportImageFilter.cxx | 2 +- Code/IO/src/sitkMetaDataDictionaryCustomCast.hxx | 2 +- Code/IO/src/sitkShow.cxx | 2 +- .../Registration/include/sitkImageRegistrationMethod.h | 2 +- Code/Registration/include/sitkRegistration.h | 2 +- Code/Registration/src/sitkCreateInterpolator.hxx | 2 +- Code/Registration/src/sitkImageRegistrationMethod.cxx | 2 +- .../src/sitkImageRegistrationMethod_CreateMetric.cxx | 2 +- .../src/sitkImageRegistrationMethod_CreateMetric.hxx | 2 +- .../sitkImageRegistrationMethod_CreateOptimizer.cxx | 2 +- ...ImageRegistrationMethod_CreateParametersAdaptor.hxx | 2 +- Examples/AdvancedImageReading/AdvancedImageReading.R | 2 +- Examples/AdvancedImageReading/AdvancedImageReading.py | 2 +- Examples/BufferImportExport.cxx | 2 +- .../CSharp/CannySegmentationLevelSetImageFilter.cs | 2 +- Examples/CSharp/ConnectedThresholdSegmentation.cs | 2 +- Examples/CSharp/ImageGetBuffer.cs | 2 +- Examples/DemonsRegistration1/DemonsRegistration1.R | 2 +- Examples/DemonsRegistration1/DemonsRegistration1.cxx | 2 +- Examples/DemonsRegistration1/DemonsRegistration1.py | 2 +- Examples/DemonsRegistration2/DemonsRegistration2.R | 2 +- Examples/DemonsRegistration2/DemonsRegistration2.cxx | 2 +- Examples/DemonsRegistration2/DemonsRegistration2.py | 2 +- Examples/DicomImagePrintTags/DicomImagePrintTags.R | 2 +- Examples/DicomImagePrintTags/DicomImagePrintTags.py | 2 +- Examples/DicomSeriesFromArray/DicomSeriesFromArray.R | 2 +- Examples/DicomSeriesFromArray/DicomSeriesFromArray.py | 2 +- .../DicomSeriesReadModifySeriesWrite.R | 2 +- .../DicomSeriesReadModifySeriesWrite.py | 2 +- Examples/DicomSeriesReader/DicomSeriesReader.R | 2 +- Examples/DicomSeriesReader/DicomSeriesReader.cxx | 2 +- Examples/DicomSeriesReader/DicomSeriesReader.java | 2 +- Examples/DicomSeriesReader/DicomSeriesReader.lua | 2 +- Examples/DicomSeriesReader/DicomSeriesReader.py | 2 +- .../FastMarchingSegmentation.cs | 2 +- .../FastMarchingSegmentation.cxx | 2 +- .../FastMarchingSegmentation.py | 2 +- .../FilterProgressReporting/FilterProgressReporting.R | 2 +- .../FilterProgressReporting/FilterProgressReporting.cs | 2 +- .../FilterProgressReporting.cxx | 2 +- .../FilterProgressReporting.java | 2 +- .../FilterProgressReporting/FilterProgressReporting.py | 2 +- .../FilterProgressReporting/FilterProgressReporting.rb | 2 +- Examples/HelloWorld/HelloWorld.R | 2 +- Examples/HelloWorld/HelloWorld.cs | 2 +- Examples/HelloWorld/HelloWorld.cxx | 2 +- Examples/HelloWorld/HelloWorld.java | 2 +- Examples/HelloWorld/HelloWorld.lua | 2 +- Examples/HelloWorld/HelloWorld.py | 2 +- Examples/HelloWorld/HelloWorld.rb | 2 +- Examples/HelloWorld/HelloWorld.tcl | 2 +- Examples/ITKIntegration/ITKIntegration.cxx | 2 +- Examples/ImageGridManipulation/ImageGridManipulation.R | 2 +- .../ImageGridManipulation/ImageGridManipulation.py | 2 +- Examples/ImageIOSelection/ImageIOSelection.R | 2 +- Examples/ImageIOSelection/ImageIOSelection.py | 2 +- .../ImageRegistrationMethod1.R | 2 +- .../ImageRegistrationMethod1.cs | 2 +- .../ImageRegistrationMethod1.cxx | 2 +- .../ImageRegistrationMethod1.java | 2 +- .../ImageRegistrationMethod1.lua | 2 +- .../ImageRegistrationMethod1.py | 2 +- .../ImageRegistrationMethod2.R | 2 +- .../ImageRegistrationMethod2.cs | 2 +- .../ImageRegistrationMethod2.cxx | 2 +- .../ImageRegistrationMethod2.py | 2 +- .../ImageRegistrationMethod3.R | 2 +- .../ImageRegistrationMethod3.py | 2 +- .../ImageRegistrationMethod4.R | 2 +- .../ImageRegistrationMethod4.py | 2 +- .../ImageRegistrationMethodBSpline1.R | 2 +- .../ImageRegistrationMethodBSpline1.cxx | 2 +- .../ImageRegistrationMethodBSpline1.py | 2 +- .../ImageRegistrationMethodBSpline2.R | 2 +- .../ImageRegistrationMethodBSpline2.py | 2 +- .../ImageRegistrationMethodBSpline3.cxx | 2 +- .../ImageRegistrationMethodBSpline3.py | 2 +- .../ImageRegistrationMethodDisplacement1.R | 2 +- .../ImageRegistrationMethodDisplacement1.cxx | 2 +- .../ImageRegistrationMethodDisplacement1.py | 2 +- .../ImageRegistrationMethodExhaustive.R | 2 +- .../ImageRegistrationMethodExhaustive.py | 2 +- Examples/ImageViewing/ImageViewing.R | 2 +- Examples/ImageViewing/ImageViewing.py | 2 +- Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R | 2 +- .../N4BiasFieldCorrection/N4BiasFieldCorrection.py | 2 +- Examples/Python/BoarderSegmentation.py | 2 +- Examples/Python/CannyEdge.py | 2 +- Examples/Python/ConnectedThresholdImageFilter.py | 2 +- Examples/Python/DicomModifyTags.py | 2 +- Examples/Python/DicomSeriesReader2.py | 2 +- Examples/Python/ExtractSlice.py | 2 +- Examples/Python/FFTConvolution.py | 2 +- Examples/Python/GeodesicActiceContourSegmentation.py | 2 +- Examples/Python/ImageCreateAndSet.py | 2 +- Examples/Python/NeighborhoodConnectedImageFilter.py | 2 +- Examples/Python/ReadAndShow.py | 2 +- Examples/Python/SimpleGaussianProcedural.py | 2 +- .../Segmentation/ConnectedThresholdImageFilter.cxx | 2 +- .../Segmentation/NeighborhoodConnectedImageFilter.cxx | 2 +- Examples/SimpleGaussian/SimpleGaussian.R | 2 +- Examples/SimpleGaussian/SimpleGaussian.cs | 2 +- Examples/SimpleGaussian/SimpleGaussian.cxx | 2 +- Examples/SimpleGaussian/SimpleGaussian.java | 2 +- Examples/SimpleGaussian/SimpleGaussian.lua | 2 +- Examples/SimpleGaussian/SimpleGaussian.py | 2 +- Examples/SimpleGaussian/SimpleGaussian.rb | 2 +- Examples/SimpleGaussian/SimpleGaussian.tcl | 2 +- Examples/SimpleGaussianFunctional.cxx | 2 +- ExpandTemplateGenerator/JSONQuery.lua | 2 +- NOTICE | 5 +++-- Readme.md | 2 +- Testing/Unit/CSharpImageFilterTestTemplate.cs.in | 2 +- Testing/Unit/IOTests.cxx | 2 +- Testing/Unit/Java/sitkImageTests.java | 2 +- Testing/Unit/Java/sitkProcessObjectTest.java | 2 +- Testing/Unit/JavaImageFilterTestTemplate.java.in | 2 +- Testing/Unit/LuaImageFilterTestTemplate.lua.in | 2 +- Testing/Unit/Python/ConcurrentImageRead.py | 2 +- Testing/Unit/Python/IOTest.py | 2 +- Testing/Unit/Python/ImageReadWriteInt64.py | 2 +- Testing/Unit/Python/sitkGetArrayViewFromImageTest.py | 2 +- Testing/Unit/Python/sitkImageIndexingTest.py | 2 +- Testing/Unit/Python/sitkImageTests.py | 2 +- Testing/Unit/Python/sitkNumpyArrayConversionTest.py | 2 +- Testing/Unit/Python/sitkProcessObjectTest.py | 2 +- Testing/Unit/Python/sitkTransformTests.py | 2 +- Testing/Unit/PythonImageFilterTestTemplate.py.in | 2 +- Testing/Unit/RImageFilterTestTemplate.R.in | 2 +- Testing/Unit/RubyImageFilterTestTemplate.rb.in | 2 +- Testing/Unit/SimpleITKUnitTestDriver.cxx | 2 +- Testing/Unit/TclImageFilterTestTemplate.tcl.in | 2 +- Testing/Unit/TestBase/SimpleITKTestHarness.h | 2 +- Testing/Unit/TestBase/SimpleITKTestHarnessPaths.h.in | 2 +- Testing/Unit/TestBase/sitkCompareDriver.cxx | 2 +- Testing/Unit/TestBase/sitkImageCompare.cxx | 2 +- Testing/Unit/TestBase/sitkImageCompare.h | 2 +- Testing/Unit/TestBase/sitkTransformCompare.cxx | 2 +- Testing/Unit/TestBase/sitkTransformCompare.h | 2 +- Testing/Unit/itkHashImageFilterTest.cxx | 2 +- Testing/Unit/itkSliceImageFilterTest.cxx | 2 +- Testing/Unit/sitkBasicFiltersTests.cxx | 2 +- Testing/Unit/sitkCommonTests.cxx | 2 +- Testing/Unit/sitkExceptionsTests.cxx | 2 +- Testing/Unit/sitkImage4DTests.cxx | 2 +- Testing/Unit/sitkImageFilterTestTemplate.cxx.in | 2 +- Testing/Unit/sitkImageIOTests.cxx | 2 +- Testing/Unit/sitkImageRegistrationMethodTests.cxx | 2 +- Testing/Unit/sitkImageTests.cxx | 2 +- Testing/Unit/sitkImageViewerTest.cxx | 2 +- Testing/Unit/sitkImageViewerTest.h.in | 2 +- Testing/Unit/sitkImportImageTest.cxx | 2 +- Testing/Unit/sitkLabelStatisticsTest.cxx | 2 +- Testing/Unit/sitkOperatorTests.cxx | 2 +- Testing/Unit/sitkShowTest.cxx | 2 +- Testing/Unit/sitkSystemInformationTest.cxx | 2 +- Testing/Unit/sitkTransformTests.cxx | 2 +- .../sitkTransformToDisplacementFieldFilterTest.cxx | 2 +- Testing/Unit/sitkTypeListsTests.cxx | 2 +- Utilities/ApplyApacheLicense.sh | 10 +++++----- Utilities/CSVtoTable.py | 2 +- Utilities/CompareITKandSITKFilters.py | 2 +- Utilities/Hooks/pre-commit | 2 +- Utilities/Hooks/prepare-commit-msg | 2 +- Utilities/Maintenance/ContentLinkSynchronization.sh | 2 +- Utilities/Maintenance/GeneratePythonDownloadsPage.py | 2 +- Utilities/Maintenance/SourceTarball.bash | 2 +- Utilities/ParseForExplicitInstantiation.py | 2 +- Utilities/SetupForDevelopment.sh | 2 +- Utilities/UploadBinaryData.sh | 2 +- Wrapping/CSharp/AssemblyInfo.cs.in | 4 ++-- Wrapping/CSharp/CSharp.i | 2 +- Wrapping/CSharp/CSharpTypemapHelper.i | 2 +- Wrapping/Common/SimpleITK_Common.i | 2 +- Wrapping/Java/Java.i | 2 +- Wrapping/Lua/Lua.i | 2 +- Wrapping/Python/Python.i | 2 +- Wrapping/Python/sitkNumpyArrayConversion.cxx | 2 +- Wrapping/Python/sitkPyCommand.cxx | 2 +- Wrapping/Python/sitkPyCommand.h | 2 +- Wrapping/R/sitkRArray.cxx | 2 +- Wrapping/R/sitkRCommand.cxx | 2 +- Wrapping/R/sitkRCommand.h | 2 +- Wrapping/Ruby/Ruby.i | 2 +- Wrapping/Tcl/Tcl.i | 2 +- docs/source/conf.py | 2 +- 366 files changed, 373 insertions(+), 372 deletions(-) diff --git a/.hooks-config.bash b/.hooks-config.bash index 199b8c523..75b09cae8 100644 --- a/.hooks-config.bash +++ b/.hooks-config.bash @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/include/itkHashImageFilter.h b/Code/BasicFilters/include/itkHashImageFilter.h index 4a1b23b1b..79b1655ac 100644 --- a/Code/BasicFilters/include/itkHashImageFilter.h +++ b/Code/BasicFilters/include/itkHashImageFilter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/include/itkHashImageFilter.hxx b/Code/BasicFilters/include/itkHashImageFilter.hxx index d4c5b404d..485a2d170 100644 --- a/Code/BasicFilters/include/itkHashImageFilter.hxx +++ b/Code/BasicFilters/include/itkHashImageFilter.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/include/sitkAdditionalProcedures.h b/Code/BasicFilters/include/sitkAdditionalProcedures.h index d66e9d4c3..c537eb118 100644 --- a/Code/BasicFilters/include/sitkAdditionalProcedures.h +++ b/Code/BasicFilters/include/sitkAdditionalProcedures.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/include/sitkBSplineTransformInitializerFilter.h b/Code/BasicFilters/include/sitkBSplineTransformInitializerFilter.h index 58d9e7552..484d3d157 100644 --- a/Code/BasicFilters/include/sitkBSplineTransformInitializerFilter.h +++ b/Code/BasicFilters/include/sitkBSplineTransformInitializerFilter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/include/sitkBasicFilters.h b/Code/BasicFilters/include/sitkBasicFilters.h index 3de750904..d00cebb40 100644 --- a/Code/BasicFilters/include/sitkBasicFilters.h +++ b/Code/BasicFilters/include/sitkBasicFilters.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/include/sitkCastImageFilter.h b/Code/BasicFilters/include/sitkCastImageFilter.h index 7d37e2012..a320fa3f6 100644 --- a/Code/BasicFilters/include/sitkCastImageFilter.h +++ b/Code/BasicFilters/include/sitkCastImageFilter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/include/sitkCenteredTransformInitializerFilter.h b/Code/BasicFilters/include/sitkCenteredTransformInitializerFilter.h index 0f21465d2..6bc7f046a 100644 --- a/Code/BasicFilters/include/sitkCenteredTransformInitializerFilter.h +++ b/Code/BasicFilters/include/sitkCenteredTransformInitializerFilter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/include/sitkCenteredVersorTransformInitializerFilter.h b/Code/BasicFilters/include/sitkCenteredVersorTransformInitializerFilter.h index e88e497d0..4968768d5 100644 --- a/Code/BasicFilters/include/sitkCenteredVersorTransformInitializerFilter.h +++ b/Code/BasicFilters/include/sitkCenteredVersorTransformInitializerFilter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/include/sitkHashImageFilter.h b/Code/BasicFilters/include/sitkHashImageFilter.h index c72c49f02..f63edcead 100644 --- a/Code/BasicFilters/include/sitkHashImageFilter.h +++ b/Code/BasicFilters/include/sitkHashImageFilter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/include/sitkImageFilter.h b/Code/BasicFilters/include/sitkImageFilter.h index a830717a1..c41b3a548 100644 --- a/Code/BasicFilters/include/sitkImageFilter.h +++ b/Code/BasicFilters/include/sitkImageFilter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/include/sitkImageOperators.h b/Code/BasicFilters/include/sitkImageOperators.h index 6077e68ce..6917e0f0c 100644 --- a/Code/BasicFilters/include/sitkImageOperators.h +++ b/Code/BasicFilters/include/sitkImageOperators.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/include/sitkLandmarkBasedTransformInitializerFilter.h b/Code/BasicFilters/include/sitkLandmarkBasedTransformInitializerFilter.h index ff61c9d5a..9ad2f979f 100644 --- a/Code/BasicFilters/include/sitkLandmarkBasedTransformInitializerFilter.h +++ b/Code/BasicFilters/include/sitkLandmarkBasedTransformInitializerFilter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkAdditionalProcedures.cxx b/Code/BasicFilters/src/sitkAdditionalProcedures.cxx index e3312d599..06e886b48 100644 --- a/Code/BasicFilters/src/sitkAdditionalProcedures.cxx +++ b/Code/BasicFilters/src/sitkAdditionalProcedures.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkBSplineTransformInitializerFilter.cxx b/Code/BasicFilters/src/sitkBSplineTransformInitializerFilter.cxx index 16ea0ffb2..065db8e78 100644 --- a/Code/BasicFilters/src/sitkBSplineTransformInitializerFilter.cxx +++ b/Code/BasicFilters/src/sitkBSplineTransformInitializerFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkBoundaryConditions.hxx b/Code/BasicFilters/src/sitkBoundaryConditions.hxx index 9c12c1daa..21e555e76 100644 --- a/Code/BasicFilters/src/sitkBoundaryConditions.hxx +++ b/Code/BasicFilters/src/sitkBoundaryConditions.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkCastImageFilter-2.cxx b/Code/BasicFilters/src/sitkCastImageFilter-2.cxx index 9dd1583d6..386f879cb 100644 --- a/Code/BasicFilters/src/sitkCastImageFilter-2.cxx +++ b/Code/BasicFilters/src/sitkCastImageFilter-2.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkCastImageFilter-2l.cxx b/Code/BasicFilters/src/sitkCastImageFilter-2l.cxx index 850d61fc3..21e48a649 100644 --- a/Code/BasicFilters/src/sitkCastImageFilter-2l.cxx +++ b/Code/BasicFilters/src/sitkCastImageFilter-2l.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkCastImageFilter-2v.cxx b/Code/BasicFilters/src/sitkCastImageFilter-2v.cxx index 592a81fa0..f1a8c008e 100644 --- a/Code/BasicFilters/src/sitkCastImageFilter-2v.cxx +++ b/Code/BasicFilters/src/sitkCastImageFilter-2v.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkCastImageFilter-3.cxx b/Code/BasicFilters/src/sitkCastImageFilter-3.cxx index 55be4f59a..575c32cf7 100644 --- a/Code/BasicFilters/src/sitkCastImageFilter-3.cxx +++ b/Code/BasicFilters/src/sitkCastImageFilter-3.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkCastImageFilter-3l.cxx b/Code/BasicFilters/src/sitkCastImageFilter-3l.cxx index 8dde898f4..55485c3d2 100644 --- a/Code/BasicFilters/src/sitkCastImageFilter-3l.cxx +++ b/Code/BasicFilters/src/sitkCastImageFilter-3l.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkCastImageFilter-3v.cxx b/Code/BasicFilters/src/sitkCastImageFilter-3v.cxx index ea1350a37..82320620e 100644 --- a/Code/BasicFilters/src/sitkCastImageFilter-3v.cxx +++ b/Code/BasicFilters/src/sitkCastImageFilter-3v.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkCastImageFilter.cxx b/Code/BasicFilters/src/sitkCastImageFilter.cxx index 73e3bc016..d1f40a4c2 100644 --- a/Code/BasicFilters/src/sitkCastImageFilter.cxx +++ b/Code/BasicFilters/src/sitkCastImageFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkCastImageFilter.hxx b/Code/BasicFilters/src/sitkCastImageFilter.hxx index 1850f25e3..73d826f50 100644 --- a/Code/BasicFilters/src/sitkCastImageFilter.hxx +++ b/Code/BasicFilters/src/sitkCastImageFilter.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkCenteredTransformInitializerFilter.cxx b/Code/BasicFilters/src/sitkCenteredTransformInitializerFilter.cxx index a3737a3e1..fbc350d07 100644 --- a/Code/BasicFilters/src/sitkCenteredTransformInitializerFilter.cxx +++ b/Code/BasicFilters/src/sitkCenteredTransformInitializerFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkCenteredVersorTransformInitializerFilter.cxx b/Code/BasicFilters/src/sitkCenteredVersorTransformInitializerFilter.cxx index 5dd0bb4fb..a6625f0c5 100644 --- a/Code/BasicFilters/src/sitkCenteredVersorTransformInitializerFilter.cxx +++ b/Code/BasicFilters/src/sitkCenteredVersorTransformInitializerFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkCreateInterpolator.hxx b/Code/BasicFilters/src/sitkCreateInterpolator.hxx index 5e6c682a9..4af31fedb 100644 --- a/Code/BasicFilters/src/sitkCreateInterpolator.hxx +++ b/Code/BasicFilters/src/sitkCreateInterpolator.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkCreateKernel.h b/Code/BasicFilters/src/sitkCreateKernel.h index 2764954b7..10e4b9d62 100644 --- a/Code/BasicFilters/src/sitkCreateKernel.h +++ b/Code/BasicFilters/src/sitkCreateKernel.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkHashImageFilter.cxx b/Code/BasicFilters/src/sitkHashImageFilter.cxx index 548563e59..74b14c6f5 100644 --- a/Code/BasicFilters/src/sitkHashImageFilter.cxx +++ b/Code/BasicFilters/src/sitkHashImageFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkHeavisideFunction.hxx b/Code/BasicFilters/src/sitkHeavisideFunction.hxx index a74c6b654..0b7412945 100644 --- a/Code/BasicFilters/src/sitkHeavisideFunction.hxx +++ b/Code/BasicFilters/src/sitkHeavisideFunction.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkImageFilter.cxx b/Code/BasicFilters/src/sitkImageFilter.cxx index 1fa35d31a..8559495fb 100644 --- a/Code/BasicFilters/src/sitkImageFilter.cxx +++ b/Code/BasicFilters/src/sitkImageFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkImageToKernel.hxx b/Code/BasicFilters/src/sitkImageToKernel.hxx index e89744bb8..527e13bac 100644 --- a/Code/BasicFilters/src/sitkImageToKernel.hxx +++ b/Code/BasicFilters/src/sitkImageToKernel.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkLabelFunctorUtils.hxx b/Code/BasicFilters/src/sitkLabelFunctorUtils.hxx index c8e737285..d427f2b7e 100644 --- a/Code/BasicFilters/src/sitkLabelFunctorUtils.hxx +++ b/Code/BasicFilters/src/sitkLabelFunctorUtils.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkLandmarkBasedTransformInitializerFilter.cxx b/Code/BasicFilters/src/sitkLandmarkBasedTransformInitializerFilter.cxx index 389020a7c..e4a1ef195 100644 --- a/Code/BasicFilters/src/sitkLandmarkBasedTransformInitializerFilter.cxx +++ b/Code/BasicFilters/src/sitkLandmarkBasedTransformInitializerFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkPermuteAxis_Static.hxx b/Code/BasicFilters/src/sitkPermuteAxis_Static.hxx index 1e0a4a572..500fa9cec 100644 --- a/Code/BasicFilters/src/sitkPermuteAxis_Static.hxx +++ b/Code/BasicFilters/src/sitkPermuteAxis_Static.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/src/sitkToPixelType.hxx b/Code/BasicFilters/src/sitkToPixelType.hxx index 6c35bffa8..3e13202e1 100644 --- a/Code/BasicFilters/src/sitkToPixelType.hxx +++ b/Code/BasicFilters/src/sitkToPixelType.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkBinaryFunctorFilterTemplate.cxx.in b/Code/BasicFilters/templates/sitkBinaryFunctorFilterTemplate.cxx.in index 86a6fdc87..c0f7baed4 100644 --- a/Code/BasicFilters/templates/sitkBinaryFunctorFilterTemplate.cxx.in +++ b/Code/BasicFilters/templates/sitkBinaryFunctorFilterTemplate.cxx.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkBinaryFunctorFilterTemplate.h.in b/Code/BasicFilters/templates/sitkBinaryFunctorFilterTemplate.h.in index f8dc94c10..0684d344e 100644 --- a/Code/BasicFilters/templates/sitkBinaryFunctorFilterTemplate.h.in +++ b/Code/BasicFilters/templates/sitkBinaryFunctorFilterTemplate.h.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkDualImageFilterTemplate.cxx.in b/Code/BasicFilters/templates/sitkDualImageFilterTemplate.cxx.in index ebd3cd7b5..97db14c7e 100644 --- a/Code/BasicFilters/templates/sitkDualImageFilterTemplate.cxx.in +++ b/Code/BasicFilters/templates/sitkDualImageFilterTemplate.cxx.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkDualImageFilterTemplate.h.in b/Code/BasicFilters/templates/sitkDualImageFilterTemplate.h.in index 3614e90b7..5470bd56e 100644 --- a/Code/BasicFilters/templates/sitkDualImageFilterTemplate.h.in +++ b/Code/BasicFilters/templates/sitkDualImageFilterTemplate.h.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkFastMarchingImageFilterTemplate.cxx.in b/Code/BasicFilters/templates/sitkFastMarchingImageFilterTemplate.cxx.in index 8dfabb125..fcea7dd9e 100644 --- a/Code/BasicFilters/templates/sitkFastMarchingImageFilterTemplate.cxx.in +++ b/Code/BasicFilters/templates/sitkFastMarchingImageFilterTemplate.cxx.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkFastMarchingImageFilterTemplate.h.in b/Code/BasicFilters/templates/sitkFastMarchingImageFilterTemplate.h.in index 490c647fa..ee31a18f2 100644 --- a/Code/BasicFilters/templates/sitkFastMarchingImageFilterTemplate.h.in +++ b/Code/BasicFilters/templates/sitkFastMarchingImageFilterTemplate.h.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkImageFilterTemplate.cxx.in b/Code/BasicFilters/templates/sitkImageFilterTemplate.cxx.in index 1659ff813..e425f0cd9 100644 --- a/Code/BasicFilters/templates/sitkImageFilterTemplate.cxx.in +++ b/Code/BasicFilters/templates/sitkImageFilterTemplate.cxx.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkImageFilterTemplate.h.in b/Code/BasicFilters/templates/sitkImageFilterTemplate.h.in index 1ff9d4695..0bd69ec5a 100644 --- a/Code/BasicFilters/templates/sitkImageFilterTemplate.h.in +++ b/Code/BasicFilters/templates/sitkImageFilterTemplate.h.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkImageSourceTemplate.cxx.in b/Code/BasicFilters/templates/sitkImageSourceTemplate.cxx.in index a6952eef8..06847c603 100644 --- a/Code/BasicFilters/templates/sitkImageSourceTemplate.cxx.in +++ b/Code/BasicFilters/templates/sitkImageSourceTemplate.cxx.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkImageSourceTemplate.h.in b/Code/BasicFilters/templates/sitkImageSourceTemplate.h.in index 8a075e99b..e0184fb9f 100644 --- a/Code/BasicFilters/templates/sitkImageSourceTemplate.h.in +++ b/Code/BasicFilters/templates/sitkImageSourceTemplate.h.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkKernelImageFilterTemplate.cxx.in b/Code/BasicFilters/templates/sitkKernelImageFilterTemplate.cxx.in index 2faf168aa..c6afda38c 100644 --- a/Code/BasicFilters/templates/sitkKernelImageFilterTemplate.cxx.in +++ b/Code/BasicFilters/templates/sitkKernelImageFilterTemplate.cxx.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkKernelImageFilterTemplate.h.in b/Code/BasicFilters/templates/sitkKernelImageFilterTemplate.h.in index fdbc4f953..ee64261fe 100644 --- a/Code/BasicFilters/templates/sitkKernelImageFilterTemplate.h.in +++ b/Code/BasicFilters/templates/sitkKernelImageFilterTemplate.h.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkMultiInputImageFilterTemplate.cxx.in b/Code/BasicFilters/templates/sitkMultiInputImageFilterTemplate.cxx.in index 6989ed6e0..082975e4c 100644 --- a/Code/BasicFilters/templates/sitkMultiInputImageFilterTemplate.cxx.in +++ b/Code/BasicFilters/templates/sitkMultiInputImageFilterTemplate.cxx.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkMultiInputImageFilterTemplate.h.in b/Code/BasicFilters/templates/sitkMultiInputImageFilterTemplate.h.in index 53a4fee28..641e28a76 100644 --- a/Code/BasicFilters/templates/sitkMultiInputImageFilterTemplate.h.in +++ b/Code/BasicFilters/templates/sitkMultiInputImageFilterTemplate.h.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkRegionGrowingImageFilterTemplate.cxx.in b/Code/BasicFilters/templates/sitkRegionGrowingImageFilterTemplate.cxx.in index 071b10164..1f5e1674e 100644 --- a/Code/BasicFilters/templates/sitkRegionGrowingImageFilterTemplate.cxx.in +++ b/Code/BasicFilters/templates/sitkRegionGrowingImageFilterTemplate.cxx.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/BasicFilters/templates/sitkRegionGrowingImageFilterTemplate.h.in b/Code/BasicFilters/templates/sitkRegionGrowingImageFilterTemplate.h.in index b0f769b16..6ea22e405 100644 --- a/Code/BasicFilters/templates/sitkRegionGrowingImageFilterTemplate.h.in +++ b/Code/BasicFilters/templates/sitkRegionGrowingImageFilterTemplate.h.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/Ancillary/FunctionTraits.h b/Code/Common/include/Ancillary/FunctionTraits.h index 0dd9a2d3e..0dbae9923 100644 --- a/Code/Common/include/Ancillary/FunctionTraits.h +++ b/Code/Common/include/Ancillary/FunctionTraits.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/Ancillary/TypeList.h b/Code/Common/include/Ancillary/TypeList.h index 82b732904..0a8e883d7 100644 --- a/Code/Common/include/Ancillary/TypeList.h +++ b/Code/Common/include/Ancillary/TypeList.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/SimpleITK.h b/Code/Common/include/SimpleITK.h index 563b8767d..53f8f840e 100644 --- a/Code/Common/include/SimpleITK.h +++ b/Code/Common/include/SimpleITK.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkAffineTransform.h b/Code/Common/include/sitkAffineTransform.h index b1e0e34c7..24552da31 100644 --- a/Code/Common/include/sitkAffineTransform.h +++ b/Code/Common/include/sitkAffineTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkBSplineTransform.h b/Code/Common/include/sitkBSplineTransform.h index 74bddd6b3..6a5103334 100644 --- a/Code/Common/include/sitkBSplineTransform.h +++ b/Code/Common/include/sitkBSplineTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkCommand.h b/Code/Common/include/sitkCommand.h index 3c538a495..c226f2763 100644 --- a/Code/Common/include/sitkCommand.h +++ b/Code/Common/include/sitkCommand.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkCommon.h b/Code/Common/include/sitkCommon.h index a59238d59..21c88665c 100644 --- a/Code/Common/include/sitkCommon.h +++ b/Code/Common/include/sitkCommon.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkConditional.h b/Code/Common/include/sitkConditional.h index 2b8bd34bc..87433e1b8 100644 --- a/Code/Common/include/sitkConditional.h +++ b/Code/Common/include/sitkConditional.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkDetail.h b/Code/Common/include/sitkDetail.h index e52d5ad79..4a4be7c94 100644 --- a/Code/Common/include/sitkDetail.h +++ b/Code/Common/include/sitkDetail.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkDisplacementFieldTransform.h b/Code/Common/include/sitkDisplacementFieldTransform.h index 822d76f40..241a0ed60 100644 --- a/Code/Common/include/sitkDisplacementFieldTransform.h +++ b/Code/Common/include/sitkDisplacementFieldTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkDualMemberFunctionFactory.h b/Code/Common/include/sitkDualMemberFunctionFactory.h index 2e6550804..21765209b 100644 --- a/Code/Common/include/sitkDualMemberFunctionFactory.h +++ b/Code/Common/include/sitkDualMemberFunctionFactory.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkDualMemberFunctionFactory.hxx b/Code/Common/include/sitkDualMemberFunctionFactory.hxx index 6fd255206..e9e5e03e2 100644 --- a/Code/Common/include/sitkDualMemberFunctionFactory.hxx +++ b/Code/Common/include/sitkDualMemberFunctionFactory.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkEuler2DTransform.h b/Code/Common/include/sitkEuler2DTransform.h index a160ca95e..36cdfaa58 100644 --- a/Code/Common/include/sitkEuler2DTransform.h +++ b/Code/Common/include/sitkEuler2DTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkEuler3DTransform.h b/Code/Common/include/sitkEuler3DTransform.h index 3aea9e789..2d870acef 100644 --- a/Code/Common/include/sitkEuler3DTransform.h +++ b/Code/Common/include/sitkEuler3DTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkEvent.h b/Code/Common/include/sitkEvent.h index cebf8d9b8..47409b1d6 100644 --- a/Code/Common/include/sitkEvent.h +++ b/Code/Common/include/sitkEvent.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkExceptionObject.h b/Code/Common/include/sitkExceptionObject.h index a845a5e6c..d2fe919c7 100644 --- a/Code/Common/include/sitkExceptionObject.h +++ b/Code/Common/include/sitkExceptionObject.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkFunctionCommand.h b/Code/Common/include/sitkFunctionCommand.h index 448494a0d..c37d7733e 100644 --- a/Code/Common/include/sitkFunctionCommand.h +++ b/Code/Common/include/sitkFunctionCommand.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkImage.h b/Code/Common/include/sitkImage.h index 35579dd52..5913737f3 100644 --- a/Code/Common/include/sitkImage.h +++ b/Code/Common/include/sitkImage.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkImageConvert.h b/Code/Common/include/sitkImageConvert.h index f4b5afd7f..c174aed8f 100644 --- a/Code/Common/include/sitkImageConvert.h +++ b/Code/Common/include/sitkImageConvert.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkInterpolator.h b/Code/Common/include/sitkInterpolator.h index 55fe4ce4c..cde197978 100644 --- a/Code/Common/include/sitkInterpolator.h +++ b/Code/Common/include/sitkInterpolator.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkKernel.h b/Code/Common/include/sitkKernel.h index 2d51ca7ae..d1c67c31e 100644 --- a/Code/Common/include/sitkKernel.h +++ b/Code/Common/include/sitkKernel.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkMacro.h b/Code/Common/include/sitkMacro.h index e9216b1d1..e164d1858 100644 --- a/Code/Common/include/sitkMacro.h +++ b/Code/Common/include/sitkMacro.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkMemberFunctionFactory.h b/Code/Common/include/sitkMemberFunctionFactory.h index 4902e80f4..a7d06c6f1 100644 --- a/Code/Common/include/sitkMemberFunctionFactory.h +++ b/Code/Common/include/sitkMemberFunctionFactory.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkMemberFunctionFactory.hxx b/Code/Common/include/sitkMemberFunctionFactory.hxx index 7c4832aa7..fe79d3bb6 100644 --- a/Code/Common/include/sitkMemberFunctionFactory.hxx +++ b/Code/Common/include/sitkMemberFunctionFactory.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkMemberFunctionFactoryBase.h b/Code/Common/include/sitkMemberFunctionFactoryBase.h index a05aff565..d1f3b57e4 100644 --- a/Code/Common/include/sitkMemberFunctionFactoryBase.h +++ b/Code/Common/include/sitkMemberFunctionFactoryBase.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkNonCopyable.h b/Code/Common/include/sitkNonCopyable.h index a85378590..7ce5f467f 100644 --- a/Code/Common/include/sitkNonCopyable.h +++ b/Code/Common/include/sitkNonCopyable.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkPixelIDTokens.h b/Code/Common/include/sitkPixelIDTokens.h index 4d0ee1437..1d5f7f82c 100644 --- a/Code/Common/include/sitkPixelIDTokens.h +++ b/Code/Common/include/sitkPixelIDTokens.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkPixelIDTypeLists.h b/Code/Common/include/sitkPixelIDTypeLists.h index eeb85ce58..ca39be4b1 100644 --- a/Code/Common/include/sitkPixelIDTypeLists.h +++ b/Code/Common/include/sitkPixelIDTypeLists.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkPixelIDTypes.h b/Code/Common/include/sitkPixelIDTypes.h index 813e5733d..c03f58d67 100644 --- a/Code/Common/include/sitkPixelIDTypes.h +++ b/Code/Common/include/sitkPixelIDTypes.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkPixelIDValues.h b/Code/Common/include/sitkPixelIDValues.h index 2af1d81f0..8a89d19a4 100644 --- a/Code/Common/include/sitkPixelIDValues.h +++ b/Code/Common/include/sitkPixelIDValues.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkProcessObject.h b/Code/Common/include/sitkProcessObject.h index 3bf5de0d6..0a0d91748 100644 --- a/Code/Common/include/sitkProcessObject.h +++ b/Code/Common/include/sitkProcessObject.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkRandomSeed.h b/Code/Common/include/sitkRandomSeed.h index acad7496f..4a8382752 100644 --- a/Code/Common/include/sitkRandomSeed.h +++ b/Code/Common/include/sitkRandomSeed.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkScaleSkewVersor3DTransform.h b/Code/Common/include/sitkScaleSkewVersor3DTransform.h index 30531f736..325bd3820 100644 --- a/Code/Common/include/sitkScaleSkewVersor3DTransform.h +++ b/Code/Common/include/sitkScaleSkewVersor3DTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkScaleTransform.h b/Code/Common/include/sitkScaleTransform.h index f3f7f8d3b..a01b39561 100644 --- a/Code/Common/include/sitkScaleTransform.h +++ b/Code/Common/include/sitkScaleTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkScaleVersor3DTransform.h b/Code/Common/include/sitkScaleVersor3DTransform.h index 716a06be0..e7e68836f 100644 --- a/Code/Common/include/sitkScaleVersor3DTransform.h +++ b/Code/Common/include/sitkScaleVersor3DTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkSimilarity2DTransform.h b/Code/Common/include/sitkSimilarity2DTransform.h index 26fd13077..b6e254ae3 100644 --- a/Code/Common/include/sitkSimilarity2DTransform.h +++ b/Code/Common/include/sitkSimilarity2DTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkSimilarity3DTransform.h b/Code/Common/include/sitkSimilarity3DTransform.h index c3b04caac..0af7a6654 100644 --- a/Code/Common/include/sitkSimilarity3DTransform.h +++ b/Code/Common/include/sitkSimilarity3DTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkTemplateFunctions.h b/Code/Common/include/sitkTemplateFunctions.h index 2dd46ccaf..12362454d 100644 --- a/Code/Common/include/sitkTemplateFunctions.h +++ b/Code/Common/include/sitkTemplateFunctions.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkTransform.h b/Code/Common/include/sitkTransform.h index 245c7d434..a2b6b125f 100644 --- a/Code/Common/include/sitkTransform.h +++ b/Code/Common/include/sitkTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkTranslationTransform.h b/Code/Common/include/sitkTranslationTransform.h index 55e52088f..caec0d91a 100644 --- a/Code/Common/include/sitkTranslationTransform.h +++ b/Code/Common/include/sitkTranslationTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkVersion.h b/Code/Common/include/sitkVersion.h index 18f1560c3..e7d9c1faf 100644 --- a/Code/Common/include/sitkVersion.h +++ b/Code/Common/include/sitkVersion.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkVersorRigid3DTransform.h b/Code/Common/include/sitkVersorRigid3DTransform.h index 1daea2dde..eed8cec3f 100644 --- a/Code/Common/include/sitkVersorRigid3DTransform.h +++ b/Code/Common/include/sitkVersorRigid3DTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/include/sitkVersorTransform.h b/Code/Common/include/sitkVersorTransform.h index 4e6b97b1a..60af38519 100644 --- a/Code/Common/include/sitkVersorTransform.h +++ b/Code/Common/include/sitkVersorTransform.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkAffineTransform.cxx b/Code/Common/src/sitkAffineTransform.cxx index 23df0dc81..d8bcd7068 100644 --- a/Code/Common/src/sitkAffineTransform.cxx +++ b/Code/Common/src/sitkAffineTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkBSplineTransform.cxx b/Code/Common/src/sitkBSplineTransform.cxx index 1353b15a5..f9c9bc9e7 100644 --- a/Code/Common/src/sitkBSplineTransform.cxx +++ b/Code/Common/src/sitkBSplineTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkCommand.cxx b/Code/Common/src/sitkCommand.cxx index d9d28d6be..cf82d0622 100644 --- a/Code/Common/src/sitkCommand.cxx +++ b/Code/Common/src/sitkCommand.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkConfigure.h.in b/Code/Common/src/sitkConfigure.h.in index 6d9b63e4b..3b2b81e86 100644 --- a/Code/Common/src/sitkConfigure.h.in +++ b/Code/Common/src/sitkConfigure.h.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkDisplacementFieldTransform.cxx b/Code/Common/src/sitkDisplacementFieldTransform.cxx index 31240ee86..0e99eb44c 100644 --- a/Code/Common/src/sitkDisplacementFieldTransform.cxx +++ b/Code/Common/src/sitkDisplacementFieldTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkEuler2DTransform.cxx b/Code/Common/src/sitkEuler2DTransform.cxx index 42e278f4e..046ce35c7 100644 --- a/Code/Common/src/sitkEuler2DTransform.cxx +++ b/Code/Common/src/sitkEuler2DTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkEuler3DTransform.cxx b/Code/Common/src/sitkEuler3DTransform.cxx index dc08f113e..ea19f4961 100644 --- a/Code/Common/src/sitkEuler3DTransform.cxx +++ b/Code/Common/src/sitkEuler3DTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkEvent.cxx b/Code/Common/src/sitkEvent.cxx index f721ac775..a42bb7376 100644 --- a/Code/Common/src/sitkEvent.cxx +++ b/Code/Common/src/sitkEvent.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkExceptionObject.cxx b/Code/Common/src/sitkExceptionObject.cxx index 346dc8747..c39e10dce 100644 --- a/Code/Common/src/sitkExceptionObject.cxx +++ b/Code/Common/src/sitkExceptionObject.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkFunctionCommand.cxx b/Code/Common/src/sitkFunctionCommand.cxx index 978127b16..dc3ae3564 100644 --- a/Code/Common/src/sitkFunctionCommand.cxx +++ b/Code/Common/src/sitkFunctionCommand.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkImage.cxx b/Code/Common/src/sitkImage.cxx index d37e5ef1a..5eac5969c 100644 --- a/Code/Common/src/sitkImage.cxx +++ b/Code/Common/src/sitkImage.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkImage.hxx b/Code/Common/src/sitkImage.hxx index 57d62b843..97f61fb85 100644 --- a/Code/Common/src/sitkImage.hxx +++ b/Code/Common/src/sitkImage.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkImageExplicit.cxx b/Code/Common/src/sitkImageExplicit.cxx index 0b03b807a..12ddd448f 100644 --- a/Code/Common/src/sitkImageExplicit.cxx +++ b/Code/Common/src/sitkImageExplicit.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkInterpolator.cxx b/Code/Common/src/sitkInterpolator.cxx index 0b9198edd..b29a6fe5a 100644 --- a/Code/Common/src/sitkInterpolator.cxx +++ b/Code/Common/src/sitkInterpolator.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkKernel.cxx b/Code/Common/src/sitkKernel.cxx index df0ac19f4..0097104b8 100644 --- a/Code/Common/src/sitkKernel.cxx +++ b/Code/Common/src/sitkKernel.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkPimpleImageBase.h b/Code/Common/src/sitkPimpleImageBase.h index 9604775c7..bfb243ee5 100644 --- a/Code/Common/src/sitkPimpleImageBase.h +++ b/Code/Common/src/sitkPimpleImageBase.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkPimpleImageBase.hxx b/Code/Common/src/sitkPimpleImageBase.hxx index e81f03f59..f8e4f022e 100644 --- a/Code/Common/src/sitkPimpleImageBase.hxx +++ b/Code/Common/src/sitkPimpleImageBase.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkPimpleTransform.hxx b/Code/Common/src/sitkPimpleTransform.hxx index b7b1dac22..cdf03f958 100644 --- a/Code/Common/src/sitkPimpleTransform.hxx +++ b/Code/Common/src/sitkPimpleTransform.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkPixelIDValues.cxx b/Code/Common/src/sitkPixelIDValues.cxx index ce444693b..b82957f3f 100644 --- a/Code/Common/src/sitkPixelIDValues.cxx +++ b/Code/Common/src/sitkPixelIDValues.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkProcessObject.cxx b/Code/Common/src/sitkProcessObject.cxx index 623783c8d..dde21bb53 100644 --- a/Code/Common/src/sitkProcessObject.cxx +++ b/Code/Common/src/sitkProcessObject.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx b/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx index 0b296ab06..360d4dbef 100644 --- a/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx +++ b/Code/Common/src/sitkScaleSkewVersor3DTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkScaleTransform.cxx b/Code/Common/src/sitkScaleTransform.cxx index 87537dd69..9ef48b84a 100644 --- a/Code/Common/src/sitkScaleTransform.cxx +++ b/Code/Common/src/sitkScaleTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkScaleVersor3DTransform.cxx b/Code/Common/src/sitkScaleVersor3DTransform.cxx index 0b07120b2..9a3705d3e 100644 --- a/Code/Common/src/sitkScaleVersor3DTransform.cxx +++ b/Code/Common/src/sitkScaleVersor3DTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkSimilarity2DTransform.cxx b/Code/Common/src/sitkSimilarity2DTransform.cxx index 4f3e38432..eaccf2878 100644 --- a/Code/Common/src/sitkSimilarity2DTransform.cxx +++ b/Code/Common/src/sitkSimilarity2DTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkSimilarity3DTransform.cxx b/Code/Common/src/sitkSimilarity3DTransform.cxx index f295347f1..1b8f84d68 100644 --- a/Code/Common/src/sitkSimilarity3DTransform.cxx +++ b/Code/Common/src/sitkSimilarity3DTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkTransform.cxx b/Code/Common/src/sitkTransform.cxx index 19cb8c763..c9e6cf30d 100644 --- a/Code/Common/src/sitkTransform.cxx +++ b/Code/Common/src/sitkTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkTransformHelper.hxx b/Code/Common/src/sitkTransformHelper.hxx index 856300218..18135ba76 100644 --- a/Code/Common/src/sitkTransformHelper.hxx +++ b/Code/Common/src/sitkTransformHelper.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkTranslationTransform.cxx b/Code/Common/src/sitkTranslationTransform.cxx index c8d54b084..5e8e8ef36 100644 --- a/Code/Common/src/sitkTranslationTransform.cxx +++ b/Code/Common/src/sitkTranslationTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkVersion.cxx b/Code/Common/src/sitkVersion.cxx index 8f65953ec..c88d8741d 100644 --- a/Code/Common/src/sitkVersion.cxx +++ b/Code/Common/src/sitkVersion.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkVersionConfig.h.in b/Code/Common/src/sitkVersionConfig.h.in index 21cff248c..84db8d694 100644 --- a/Code/Common/src/sitkVersionConfig.h.in +++ b/Code/Common/src/sitkVersionConfig.h.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkVersorRigid3DTransform.cxx b/Code/Common/src/sitkVersorRigid3DTransform.cxx index fd6e48015..79489a7fc 100644 --- a/Code/Common/src/sitkVersorRigid3DTransform.cxx +++ b/Code/Common/src/sitkVersorRigid3DTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Common/src/sitkVersorTransform.cxx b/Code/Common/src/sitkVersorTransform.cxx index e31cf14ca..875e09c7c 100644 --- a/Code/Common/src/sitkVersorTransform.cxx +++ b/Code/Common/src/sitkVersorTransform.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicit.h b/Code/Explicit/include/sitkExplicit.h index 63eeb0e46..c0e4d5077 100644 --- a/Code/Explicit/include/sitkExplicit.h +++ b/Code/Explicit/include/sitkExplicit.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITK.h b/Code/Explicit/include/sitkExplicitITK.h index 3ef747718..cab676d34 100644 --- a/Code/Explicit/include/sitkExplicitITK.h +++ b/Code/Explicit/include/sitkExplicitITK.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKComposeImageFilter.h b/Code/Explicit/include/sitkExplicitITKComposeImageFilter.h index 6d6142b07..32ddf3afc 100644 --- a/Code/Explicit/include/sitkExplicitITKComposeImageFilter.h +++ b/Code/Explicit/include/sitkExplicitITKComposeImageFilter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKDefaultPixelAccessor.h b/Code/Explicit/include/sitkExplicitITKDefaultPixelAccessor.h index 00c70416c..23b312533 100644 --- a/Code/Explicit/include/sitkExplicitITKDefaultPixelAccessor.h +++ b/Code/Explicit/include/sitkExplicitITKDefaultPixelAccessor.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKDefaultVectorPixelAccessor.h b/Code/Explicit/include/sitkExplicitITKDefaultVectorPixelAccessor.h index 05205fa9d..eed5c5fd7 100644 --- a/Code/Explicit/include/sitkExplicitITKDefaultVectorPixelAccessor.h +++ b/Code/Explicit/include/sitkExplicitITKDefaultVectorPixelAccessor.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKImage.h b/Code/Explicit/include/sitkExplicitITKImage.h index 9f17b31e7..d81377804 100644 --- a/Code/Explicit/include/sitkExplicitITKImage.h +++ b/Code/Explicit/include/sitkExplicitITKImage.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKImageBase.h b/Code/Explicit/include/sitkExplicitITKImageBase.h index 7c97da93b..290abd0ce 100644 --- a/Code/Explicit/include/sitkExplicitITKImageBase.h +++ b/Code/Explicit/include/sitkExplicitITKImageBase.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKImageConstIterator.h b/Code/Explicit/include/sitkExplicitITKImageConstIterator.h index 2a7f97296..21abe4905 100644 --- a/Code/Explicit/include/sitkExplicitITKImageConstIterator.h +++ b/Code/Explicit/include/sitkExplicitITKImageConstIterator.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKImageRegion.h b/Code/Explicit/include/sitkExplicitITKImageRegion.h index 8681381a3..d775a54d0 100644 --- a/Code/Explicit/include/sitkExplicitITKImageRegion.h +++ b/Code/Explicit/include/sitkExplicitITKImageRegion.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKImageRegionConstIterator.h b/Code/Explicit/include/sitkExplicitITKImageRegionConstIterator.h index f62540f30..f31f70f6f 100644 --- a/Code/Explicit/include/sitkExplicitITKImageRegionConstIterator.h +++ b/Code/Explicit/include/sitkExplicitITKImageRegionConstIterator.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKImageScanlineConstIterator.h b/Code/Explicit/include/sitkExplicitITKImageScanlineConstIterator.h index 867ea7a70..60bff75e2 100644 --- a/Code/Explicit/include/sitkExplicitITKImageScanlineConstIterator.h +++ b/Code/Explicit/include/sitkExplicitITKImageScanlineConstIterator.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKImageScanlineIterator.h b/Code/Explicit/include/sitkExplicitITKImageScanlineIterator.h index ed703ebc5..e99484ac1 100644 --- a/Code/Explicit/include/sitkExplicitITKImageScanlineIterator.h +++ b/Code/Explicit/include/sitkExplicitITKImageScanlineIterator.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKImageSource.h b/Code/Explicit/include/sitkExplicitITKImageSource.h index f17fa58e7..db6acc8ef 100644 --- a/Code/Explicit/include/sitkExplicitITKImageSource.h +++ b/Code/Explicit/include/sitkExplicitITKImageSource.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKImageToImageFilter.h b/Code/Explicit/include/sitkExplicitITKImageToImageFilter.h index c0b2b182d..f18261c92 100644 --- a/Code/Explicit/include/sitkExplicitITKImageToImageFilter.h +++ b/Code/Explicit/include/sitkExplicitITKImageToImageFilter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKImportImageContainer.h b/Code/Explicit/include/sitkExplicitITKImportImageContainer.h index 0736708d1..c1a1d35e5 100644 --- a/Code/Explicit/include/sitkExplicitITKImportImageContainer.h +++ b/Code/Explicit/include/sitkExplicitITKImportImageContainer.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKInPlaceImageFilter.h b/Code/Explicit/include/sitkExplicitITKInPlaceImageFilter.h index b1b03d97b..e623a8cd0 100644 --- a/Code/Explicit/include/sitkExplicitITKInPlaceImageFilter.h +++ b/Code/Explicit/include/sitkExplicitITKInPlaceImageFilter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKLabelMap.h b/Code/Explicit/include/sitkExplicitITKLabelMap.h index 297dbe4c7..736f31177 100644 --- a/Code/Explicit/include/sitkExplicitITKLabelMap.h +++ b/Code/Explicit/include/sitkExplicitITKLabelMap.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKVectorImage.h b/Code/Explicit/include/sitkExplicitITKVectorImage.h index 28676580c..8a9ce73f7 100644 --- a/Code/Explicit/include/sitkExplicitITKVectorImage.h +++ b/Code/Explicit/include/sitkExplicitITKVectorImage.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/include/sitkExplicitITKVectorIndexSelectionCastImageFilter.h b/Code/Explicit/include/sitkExplicitITKVectorIndexSelectionCastImageFilter.h index a7ed04976..f831b5ef7 100644 --- a/Code/Explicit/include/sitkExplicitITKVectorIndexSelectionCastImageFilter.h +++ b/Code/Explicit/include/sitkExplicitITKVectorIndexSelectionCastImageFilter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKComposeImageFilter.cxx b/Code/Explicit/src/sitkExplicitITKComposeImageFilter.cxx index 7ec917f56..d6052e7fb 100644 --- a/Code/Explicit/src/sitkExplicitITKComposeImageFilter.cxx +++ b/Code/Explicit/src/sitkExplicitITKComposeImageFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKDefaultPixelAccessor.cxx b/Code/Explicit/src/sitkExplicitITKDefaultPixelAccessor.cxx index d525306ab..48dfba9ec 100644 --- a/Code/Explicit/src/sitkExplicitITKDefaultPixelAccessor.cxx +++ b/Code/Explicit/src/sitkExplicitITKDefaultPixelAccessor.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKDefaultVectorPixelAccessor.cxx b/Code/Explicit/src/sitkExplicitITKDefaultVectorPixelAccessor.cxx index 992a6b207..3005e6089 100644 --- a/Code/Explicit/src/sitkExplicitITKDefaultVectorPixelAccessor.cxx +++ b/Code/Explicit/src/sitkExplicitITKDefaultVectorPixelAccessor.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKImage.cxx b/Code/Explicit/src/sitkExplicitITKImage.cxx index 3525ab9f7..cde776662 100644 --- a/Code/Explicit/src/sitkExplicitITKImage.cxx +++ b/Code/Explicit/src/sitkExplicitITKImage.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKImageBase.cxx b/Code/Explicit/src/sitkExplicitITKImageBase.cxx index 62d68c057..3417b2666 100644 --- a/Code/Explicit/src/sitkExplicitITKImageBase.cxx +++ b/Code/Explicit/src/sitkExplicitITKImageBase.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKImageConstIterator.cxx b/Code/Explicit/src/sitkExplicitITKImageConstIterator.cxx index 0f946eee1..64d1c7519 100644 --- a/Code/Explicit/src/sitkExplicitITKImageConstIterator.cxx +++ b/Code/Explicit/src/sitkExplicitITKImageConstIterator.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKImageRegion.cxx b/Code/Explicit/src/sitkExplicitITKImageRegion.cxx index 3981f642c..34972a320 100644 --- a/Code/Explicit/src/sitkExplicitITKImageRegion.cxx +++ b/Code/Explicit/src/sitkExplicitITKImageRegion.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKImageRegionConstIterator.cxx b/Code/Explicit/src/sitkExplicitITKImageRegionConstIterator.cxx index 8dcd11702..49b07c966 100644 --- a/Code/Explicit/src/sitkExplicitITKImageRegionConstIterator.cxx +++ b/Code/Explicit/src/sitkExplicitITKImageRegionConstIterator.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKImageScanlineConstIterator.cxx b/Code/Explicit/src/sitkExplicitITKImageScanlineConstIterator.cxx index b2c561c3e..836285245 100644 --- a/Code/Explicit/src/sitkExplicitITKImageScanlineConstIterator.cxx +++ b/Code/Explicit/src/sitkExplicitITKImageScanlineConstIterator.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKImageScanlineIterator.cxx b/Code/Explicit/src/sitkExplicitITKImageScanlineIterator.cxx index 75f4c1441..ba59726a8 100644 --- a/Code/Explicit/src/sitkExplicitITKImageScanlineIterator.cxx +++ b/Code/Explicit/src/sitkExplicitITKImageScanlineIterator.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKImageSource.cxx b/Code/Explicit/src/sitkExplicitITKImageSource.cxx index 256503186..c25e1f412 100644 --- a/Code/Explicit/src/sitkExplicitITKImageSource.cxx +++ b/Code/Explicit/src/sitkExplicitITKImageSource.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKImageToImageFilter.cxx b/Code/Explicit/src/sitkExplicitITKImageToImageFilter.cxx index c35b3dc56..a3465e7f6 100644 --- a/Code/Explicit/src/sitkExplicitITKImageToImageFilter.cxx +++ b/Code/Explicit/src/sitkExplicitITKImageToImageFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKImportImageContainer.cxx b/Code/Explicit/src/sitkExplicitITKImportImageContainer.cxx index a90b6708e..89aa19bd7 100644 --- a/Code/Explicit/src/sitkExplicitITKImportImageContainer.cxx +++ b/Code/Explicit/src/sitkExplicitITKImportImageContainer.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKInPlaceImageFilter.cxx b/Code/Explicit/src/sitkExplicitITKInPlaceImageFilter.cxx index 8ec056ec0..e78294b0a 100644 --- a/Code/Explicit/src/sitkExplicitITKInPlaceImageFilter.cxx +++ b/Code/Explicit/src/sitkExplicitITKInPlaceImageFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKLabelMap.cxx b/Code/Explicit/src/sitkExplicitITKLabelMap.cxx index 36a2b1e9e..04ee9bb70 100644 --- a/Code/Explicit/src/sitkExplicitITKLabelMap.cxx +++ b/Code/Explicit/src/sitkExplicitITKLabelMap.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKVectorImage.cxx b/Code/Explicit/src/sitkExplicitITKVectorImage.cxx index 88b6920dd..ffd1270e1 100644 --- a/Code/Explicit/src/sitkExplicitITKVectorImage.cxx +++ b/Code/Explicit/src/sitkExplicitITKVectorImage.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Explicit/src/sitkExplicitITKVectorIndexSelectionCastImageFilter.cxx b/Code/Explicit/src/sitkExplicitITKVectorIndexSelectionCastImageFilter.cxx index c5fa412a5..7f5fc0e19 100644 --- a/Code/Explicit/src/sitkExplicitITKVectorIndexSelectionCastImageFilter.cxx +++ b/Code/Explicit/src/sitkExplicitITKVectorIndexSelectionCastImageFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/include/sitkIO.h b/Code/IO/include/sitkIO.h index 7e7fdca2a..e06fe557a 100644 --- a/Code/IO/include/sitkIO.h +++ b/Code/IO/include/sitkIO.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/include/sitkImageFileReader.h b/Code/IO/include/sitkImageFileReader.h index c09d449b7..9ba612643 100644 --- a/Code/IO/include/sitkImageFileReader.h +++ b/Code/IO/include/sitkImageFileReader.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/include/sitkImageFileWriter.h b/Code/IO/include/sitkImageFileWriter.h index f7c022ca5..9e6483ede 100644 --- a/Code/IO/include/sitkImageFileWriter.h +++ b/Code/IO/include/sitkImageFileWriter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/include/sitkImageReaderBase.h b/Code/IO/include/sitkImageReaderBase.h index e9846c595..f940df2e4 100644 --- a/Code/IO/include/sitkImageReaderBase.h +++ b/Code/IO/include/sitkImageReaderBase.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/include/sitkImageSeriesReader.h b/Code/IO/include/sitkImageSeriesReader.h index ce0c246a6..8dfcafdfd 100644 --- a/Code/IO/include/sitkImageSeriesReader.h +++ b/Code/IO/include/sitkImageSeriesReader.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/include/sitkImageSeriesWriter.h b/Code/IO/include/sitkImageSeriesWriter.h index 1e0acd162..44f6e2d2e 100644 --- a/Code/IO/include/sitkImageSeriesWriter.h +++ b/Code/IO/include/sitkImageSeriesWriter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/include/sitkImageViewer.h b/Code/IO/include/sitkImageViewer.h index 909acf2e7..799235da9 100644 --- a/Code/IO/include/sitkImageViewer.h +++ b/Code/IO/include/sitkImageViewer.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/include/sitkImportImageFilter.h b/Code/IO/include/sitkImportImageFilter.h index df9f5d31b..e4c82607c 100644 --- a/Code/IO/include/sitkImportImageFilter.h +++ b/Code/IO/include/sitkImportImageFilter.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/include/sitkShow.h b/Code/IO/include/sitkShow.h index 27477448e..dfce21743 100644 --- a/Code/IO/include/sitkShow.h +++ b/Code/IO/include/sitkShow.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/src/sitkImageFileReader.cxx b/Code/IO/src/sitkImageFileReader.cxx index 576c5bdf6..9588015ef 100644 --- a/Code/IO/src/sitkImageFileReader.cxx +++ b/Code/IO/src/sitkImageFileReader.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/src/sitkImageFileWriter.cxx b/Code/IO/src/sitkImageFileWriter.cxx index 436ec10fd..fbd4a071c 100644 --- a/Code/IO/src/sitkImageFileWriter.cxx +++ b/Code/IO/src/sitkImageFileWriter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/src/sitkImageIOUtilities.cxx b/Code/IO/src/sitkImageIOUtilities.cxx index d2a4d2875..f10592691 100644 --- a/Code/IO/src/sitkImageIOUtilities.cxx +++ b/Code/IO/src/sitkImageIOUtilities.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/src/sitkImageIOUtilities.h b/Code/IO/src/sitkImageIOUtilities.h index db5a87835..753af5822 100644 --- a/Code/IO/src/sitkImageIOUtilities.h +++ b/Code/IO/src/sitkImageIOUtilities.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/src/sitkImageReaderBase.cxx b/Code/IO/src/sitkImageReaderBase.cxx index a5e6d9cd9..30ec03cd1 100644 --- a/Code/IO/src/sitkImageReaderBase.cxx +++ b/Code/IO/src/sitkImageReaderBase.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/src/sitkImageSeriesReader.cxx b/Code/IO/src/sitkImageSeriesReader.cxx index f60ae0f1b..ee038d68f 100644 --- a/Code/IO/src/sitkImageSeriesReader.cxx +++ b/Code/IO/src/sitkImageSeriesReader.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/src/sitkImageSeriesWriter.cxx b/Code/IO/src/sitkImageSeriesWriter.cxx index 1b61a774d..5d376ad3b 100644 --- a/Code/IO/src/sitkImageSeriesWriter.cxx +++ b/Code/IO/src/sitkImageSeriesWriter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/src/sitkImageViewer.cxx b/Code/IO/src/sitkImageViewer.cxx index b591710dd..ae3cc260a 100644 --- a/Code/IO/src/sitkImageViewer.cxx +++ b/Code/IO/src/sitkImageViewer.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/src/sitkImportImageFilter.cxx b/Code/IO/src/sitkImportImageFilter.cxx index eecaca090..2ce588ff1 100644 --- a/Code/IO/src/sitkImportImageFilter.cxx +++ b/Code/IO/src/sitkImportImageFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/src/sitkMetaDataDictionaryCustomCast.hxx b/Code/IO/src/sitkMetaDataDictionaryCustomCast.hxx index ea41d630f..3dacfb2e6 100644 --- a/Code/IO/src/sitkMetaDataDictionaryCustomCast.hxx +++ b/Code/IO/src/sitkMetaDataDictionaryCustomCast.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/IO/src/sitkShow.cxx b/Code/IO/src/sitkShow.cxx index 5df8ef28b..2e7c80f53 100644 --- a/Code/IO/src/sitkShow.cxx +++ b/Code/IO/src/sitkShow.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Registration/include/sitkImageRegistrationMethod.h b/Code/Registration/include/sitkImageRegistrationMethod.h index 25a399a73..d2ccd28d0 100644 --- a/Code/Registration/include/sitkImageRegistrationMethod.h +++ b/Code/Registration/include/sitkImageRegistrationMethod.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Registration/include/sitkRegistration.h b/Code/Registration/include/sitkRegistration.h index 331755b57..7670973cb 100644 --- a/Code/Registration/include/sitkRegistration.h +++ b/Code/Registration/include/sitkRegistration.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Registration/src/sitkCreateInterpolator.hxx b/Code/Registration/src/sitkCreateInterpolator.hxx index 5e6c682a9..4af31fedb 100644 --- a/Code/Registration/src/sitkCreateInterpolator.hxx +++ b/Code/Registration/src/sitkCreateInterpolator.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Registration/src/sitkImageRegistrationMethod.cxx b/Code/Registration/src/sitkImageRegistrationMethod.cxx index 700a9def6..81dc1b39a 100644 --- a/Code/Registration/src/sitkImageRegistrationMethod.cxx +++ b/Code/Registration/src/sitkImageRegistrationMethod.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Registration/src/sitkImageRegistrationMethod_CreateMetric.cxx b/Code/Registration/src/sitkImageRegistrationMethod_CreateMetric.cxx index 3164e4439..bf22bcdf2 100644 --- a/Code/Registration/src/sitkImageRegistrationMethod_CreateMetric.cxx +++ b/Code/Registration/src/sitkImageRegistrationMethod_CreateMetric.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Registration/src/sitkImageRegistrationMethod_CreateMetric.hxx b/Code/Registration/src/sitkImageRegistrationMethod_CreateMetric.hxx index ed5d74d8a..bb982264d 100644 --- a/Code/Registration/src/sitkImageRegistrationMethod_CreateMetric.hxx +++ b/Code/Registration/src/sitkImageRegistrationMethod_CreateMetric.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Registration/src/sitkImageRegistrationMethod_CreateOptimizer.cxx b/Code/Registration/src/sitkImageRegistrationMethod_CreateOptimizer.cxx index 38882e2f4..333f95f9a 100644 --- a/Code/Registration/src/sitkImageRegistrationMethod_CreateOptimizer.cxx +++ b/Code/Registration/src/sitkImageRegistrationMethod_CreateOptimizer.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Code/Registration/src/sitkImageRegistrationMethod_CreateParametersAdaptor.hxx b/Code/Registration/src/sitkImageRegistrationMethod_CreateParametersAdaptor.hxx index 69539156c..cf7695783 100644 --- a/Code/Registration/src/sitkImageRegistrationMethod_CreateParametersAdaptor.hxx +++ b/Code/Registration/src/sitkImageRegistrationMethod_CreateParametersAdaptor.hxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/AdvancedImageReading/AdvancedImageReading.R b/Examples/AdvancedImageReading/AdvancedImageReading.R index f57f37c53..29eb67f80 100644 --- a/Examples/AdvancedImageReading/AdvancedImageReading.R +++ b/Examples/AdvancedImageReading/AdvancedImageReading.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/AdvancedImageReading/AdvancedImageReading.py b/Examples/AdvancedImageReading/AdvancedImageReading.py index 11001f956..f93568f85 100755 --- a/Examples/AdvancedImageReading/AdvancedImageReading.py +++ b/Examples/AdvancedImageReading/AdvancedImageReading.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/BufferImportExport.cxx b/Examples/BufferImportExport.cxx index 1fc83a95a..49e1b19eb 100644 --- a/Examples/BufferImportExport.cxx +++ b/Examples/BufferImportExport.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/CSharp/CannySegmentationLevelSetImageFilter.cs b/Examples/CSharp/CannySegmentationLevelSetImageFilter.cs index d229e77a4..9e6cd863d 100644 --- a/Examples/CSharp/CannySegmentationLevelSetImageFilter.cs +++ b/Examples/CSharp/CannySegmentationLevelSetImageFilter.cs @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/CSharp/ConnectedThresholdSegmentation.cs b/Examples/CSharp/ConnectedThresholdSegmentation.cs index 4a0e71ffc..5927d848f 100644 --- a/Examples/CSharp/ConnectedThresholdSegmentation.cs +++ b/Examples/CSharp/ConnectedThresholdSegmentation.cs @@ -1,6 +1,6 @@ /*========================================================================= * - * Copyright Insight Software Consortium + * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/CSharp/ImageGetBuffer.cs b/Examples/CSharp/ImageGetBuffer.cs index 357e8cdd7..bc2f0f4fb 100644 --- a/Examples/CSharp/ImageGetBuffer.cs +++ b/Examples/CSharp/ImageGetBuffer.cs @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/DemonsRegistration1/DemonsRegistration1.R b/Examples/DemonsRegistration1/DemonsRegistration1.R index 789268334..d55fb8231 100644 --- a/Examples/DemonsRegistration1/DemonsRegistration1.R +++ b/Examples/DemonsRegistration1/DemonsRegistration1.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/DemonsRegistration1/DemonsRegistration1.cxx b/Examples/DemonsRegistration1/DemonsRegistration1.cxx index 7b9d7aafe..067744cd3 100644 --- a/Examples/DemonsRegistration1/DemonsRegistration1.cxx +++ b/Examples/DemonsRegistration1/DemonsRegistration1.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/DemonsRegistration1/DemonsRegistration1.py b/Examples/DemonsRegistration1/DemonsRegistration1.py index 4e908c13b..bef66fe93 100755 --- a/Examples/DemonsRegistration1/DemonsRegistration1.py +++ b/Examples/DemonsRegistration1/DemonsRegistration1.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/DemonsRegistration2/DemonsRegistration2.R b/Examples/DemonsRegistration2/DemonsRegistration2.R index dcebcf27e..a4d19f48d 100644 --- a/Examples/DemonsRegistration2/DemonsRegistration2.R +++ b/Examples/DemonsRegistration2/DemonsRegistration2.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/DemonsRegistration2/DemonsRegistration2.cxx b/Examples/DemonsRegistration2/DemonsRegistration2.cxx index 6765b87ab..e555b4242 100644 --- a/Examples/DemonsRegistration2/DemonsRegistration2.cxx +++ b/Examples/DemonsRegistration2/DemonsRegistration2.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/DemonsRegistration2/DemonsRegistration2.py b/Examples/DemonsRegistration2/DemonsRegistration2.py index a2bf62ef2..3f865fde7 100755 --- a/Examples/DemonsRegistration2/DemonsRegistration2.py +++ b/Examples/DemonsRegistration2/DemonsRegistration2.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/DicomImagePrintTags/DicomImagePrintTags.R b/Examples/DicomImagePrintTags/DicomImagePrintTags.R index 7f3ef3bef..ecf25aaf3 100644 --- a/Examples/DicomImagePrintTags/DicomImagePrintTags.R +++ b/Examples/DicomImagePrintTags/DicomImagePrintTags.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/DicomImagePrintTags/DicomImagePrintTags.py b/Examples/DicomImagePrintTags/DicomImagePrintTags.py index 0b2be54c7..152232bba 100755 --- a/Examples/DicomImagePrintTags/DicomImagePrintTags.py +++ b/Examples/DicomImagePrintTags/DicomImagePrintTags.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/DicomSeriesFromArray/DicomSeriesFromArray.R b/Examples/DicomSeriesFromArray/DicomSeriesFromArray.R index 472cc6e20..2b44b50f0 100644 --- a/Examples/DicomSeriesFromArray/DicomSeriesFromArray.R +++ b/Examples/DicomSeriesFromArray/DicomSeriesFromArray.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/DicomSeriesFromArray/DicomSeriesFromArray.py b/Examples/DicomSeriesFromArray/DicomSeriesFromArray.py index 618a16c5a..11a5d5e69 100644 --- a/Examples/DicomSeriesFromArray/DicomSeriesFromArray.py +++ b/Examples/DicomSeriesFromArray/DicomSeriesFromArray.py @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/DicomSeriesReadModifyWrite/DicomSeriesReadModifySeriesWrite.R b/Examples/DicomSeriesReadModifyWrite/DicomSeriesReadModifySeriesWrite.R index 91f9e0ac0..3145b020a 100644 --- a/Examples/DicomSeriesReadModifyWrite/DicomSeriesReadModifySeriesWrite.R +++ b/Examples/DicomSeriesReadModifyWrite/DicomSeriesReadModifySeriesWrite.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/DicomSeriesReadModifyWrite/DicomSeriesReadModifySeriesWrite.py b/Examples/DicomSeriesReadModifyWrite/DicomSeriesReadModifySeriesWrite.py index 5f76bc386..80a685e39 100644 --- a/Examples/DicomSeriesReadModifyWrite/DicomSeriesReadModifySeriesWrite.py +++ b/Examples/DicomSeriesReadModifyWrite/DicomSeriesReadModifySeriesWrite.py @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/DicomSeriesReader/DicomSeriesReader.R b/Examples/DicomSeriesReader/DicomSeriesReader.R index 13bd92503..78e3529c6 100644 --- a/Examples/DicomSeriesReader/DicomSeriesReader.R +++ b/Examples/DicomSeriesReader/DicomSeriesReader.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/DicomSeriesReader/DicomSeriesReader.cxx b/Examples/DicomSeriesReader/DicomSeriesReader.cxx index 6a00b49fc..98b0d02a0 100644 --- a/Examples/DicomSeriesReader/DicomSeriesReader.cxx +++ b/Examples/DicomSeriesReader/DicomSeriesReader.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/DicomSeriesReader/DicomSeriesReader.java b/Examples/DicomSeriesReader/DicomSeriesReader.java index 4df814ba9..dea2cc79a 100644 --- a/Examples/DicomSeriesReader/DicomSeriesReader.java +++ b/Examples/DicomSeriesReader/DicomSeriesReader.java @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/DicomSeriesReader/DicomSeriesReader.lua b/Examples/DicomSeriesReader/DicomSeriesReader.lua index bbe14ac35..8ab10e390 100644 --- a/Examples/DicomSeriesReader/DicomSeriesReader.lua +++ b/Examples/DicomSeriesReader/DicomSeriesReader.lua @@ -1,6 +1,6 @@ --========================================================================= -- --- Copyright Insight Software Consortium +-- Copyright NumFOCUS -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/Examples/DicomSeriesReader/DicomSeriesReader.py b/Examples/DicomSeriesReader/DicomSeriesReader.py index a8d3a97fc..7db6f51ba 100755 --- a/Examples/DicomSeriesReader/DicomSeriesReader.py +++ b/Examples/DicomSeriesReader/DicomSeriesReader.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs index c5ff7f039..d3d7396d3 100644 --- a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs +++ b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cs @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cxx b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cxx index 95f0a382f..2ff3ee41a 100644 --- a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cxx +++ b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.py b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.py index 2a3446570..40a693be2 100755 --- a/Examples/FastMarchingSegmentation/FastMarchingSegmentation.py +++ b/Examples/FastMarchingSegmentation/FastMarchingSegmentation.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/FilterProgressReporting/FilterProgressReporting.R b/Examples/FilterProgressReporting/FilterProgressReporting.R index a054df56d..c1176dc76 100644 --- a/Examples/FilterProgressReporting/FilterProgressReporting.R +++ b/Examples/FilterProgressReporting/FilterProgressReporting.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/FilterProgressReporting/FilterProgressReporting.cs b/Examples/FilterProgressReporting/FilterProgressReporting.cs index ada243669..c1857931e 100644 --- a/Examples/FilterProgressReporting/FilterProgressReporting.cs +++ b/Examples/FilterProgressReporting/FilterProgressReporting.cs @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/FilterProgressReporting/FilterProgressReporting.cxx b/Examples/FilterProgressReporting/FilterProgressReporting.cxx index 45254245a..3cf33ef83 100644 --- a/Examples/FilterProgressReporting/FilterProgressReporting.cxx +++ b/Examples/FilterProgressReporting/FilterProgressReporting.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/FilterProgressReporting/FilterProgressReporting.java b/Examples/FilterProgressReporting/FilterProgressReporting.java index 1ff1ef9f9..caa7aee95 100644 --- a/Examples/FilterProgressReporting/FilterProgressReporting.java +++ b/Examples/FilterProgressReporting/FilterProgressReporting.java @@ -1,6 +1,6 @@ /*========================================================================= * - * Copyright Insight Software Consortium + * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/FilterProgressReporting/FilterProgressReporting.py b/Examples/FilterProgressReporting/FilterProgressReporting.py index 2f724bed6..fdc9f95b8 100755 --- a/Examples/FilterProgressReporting/FilterProgressReporting.py +++ b/Examples/FilterProgressReporting/FilterProgressReporting.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/FilterProgressReporting/FilterProgressReporting.rb b/Examples/FilterProgressReporting/FilterProgressReporting.rb index 7137a8aa1..5432f2a46 100644 --- a/Examples/FilterProgressReporting/FilterProgressReporting.rb +++ b/Examples/FilterProgressReporting/FilterProgressReporting.rb @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/HelloWorld/HelloWorld.R b/Examples/HelloWorld/HelloWorld.R index 3b10d4d26..671fd16a3 100644 --- a/Examples/HelloWorld/HelloWorld.R +++ b/Examples/HelloWorld/HelloWorld.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/HelloWorld/HelloWorld.cs b/Examples/HelloWorld/HelloWorld.cs index 0026deed4..b98308917 100644 --- a/Examples/HelloWorld/HelloWorld.cs +++ b/Examples/HelloWorld/HelloWorld.cs @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/HelloWorld/HelloWorld.cxx b/Examples/HelloWorld/HelloWorld.cxx index 94fc16a13..2e3370af5 100644 --- a/Examples/HelloWorld/HelloWorld.cxx +++ b/Examples/HelloWorld/HelloWorld.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/HelloWorld/HelloWorld.java b/Examples/HelloWorld/HelloWorld.java index c56baf337..64da5f240 100644 --- a/Examples/HelloWorld/HelloWorld.java +++ b/Examples/HelloWorld/HelloWorld.java @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/HelloWorld/HelloWorld.lua b/Examples/HelloWorld/HelloWorld.lua index a1bf5b2ef..f66e68113 100644 --- a/Examples/HelloWorld/HelloWorld.lua +++ b/Examples/HelloWorld/HelloWorld.lua @@ -1,6 +1,6 @@ --========================================================================= -- --- Copyright Insight Software Consortium +-- Copyright NumFOCUS -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/Examples/HelloWorld/HelloWorld.py b/Examples/HelloWorld/HelloWorld.py index c5c266d17..5711e58d0 100755 --- a/Examples/HelloWorld/HelloWorld.py +++ b/Examples/HelloWorld/HelloWorld.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/HelloWorld/HelloWorld.rb b/Examples/HelloWorld/HelloWorld.rb index 5fa7c58a2..d5f618799 100644 --- a/Examples/HelloWorld/HelloWorld.rb +++ b/Examples/HelloWorld/HelloWorld.rb @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/HelloWorld/HelloWorld.tcl b/Examples/HelloWorld/HelloWorld.tcl index c95936184..772e55126 100644 --- a/Examples/HelloWorld/HelloWorld.tcl +++ b/Examples/HelloWorld/HelloWorld.tcl @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ITKIntegration/ITKIntegration.cxx b/Examples/ITKIntegration/ITKIntegration.cxx index c6e553bd5..191823021 100644 --- a/Examples/ITKIntegration/ITKIntegration.cxx +++ b/Examples/ITKIntegration/ITKIntegration.cxx @@ -1,6 +1,6 @@ /*========================================================================= * - * Copyright Insight Software Consortium + * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/ImageGridManipulation/ImageGridManipulation.R b/Examples/ImageGridManipulation/ImageGridManipulation.R index b6f3ab72b..b3f7e6a01 100644 --- a/Examples/ImageGridManipulation/ImageGridManipulation.R +++ b/Examples/ImageGridManipulation/ImageGridManipulation.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageGridManipulation/ImageGridManipulation.py b/Examples/ImageGridManipulation/ImageGridManipulation.py index fc00bc640..09c864d2b 100755 --- a/Examples/ImageGridManipulation/ImageGridManipulation.py +++ b/Examples/ImageGridManipulation/ImageGridManipulation.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageIOSelection/ImageIOSelection.R b/Examples/ImageIOSelection/ImageIOSelection.R index 80f4fdd63..faa877014 100644 --- a/Examples/ImageIOSelection/ImageIOSelection.R +++ b/Examples/ImageIOSelection/ImageIOSelection.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageIOSelection/ImageIOSelection.py b/Examples/ImageIOSelection/ImageIOSelection.py index 2b77c6264..8cfacb7a6 100755 --- a/Examples/ImageIOSelection/ImageIOSelection.py +++ b/Examples/ImageIOSelection/ImageIOSelection.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.R b/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.R index 69c76ed1e..ef4fe5d07 100644 --- a/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.R +++ b/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.cs b/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.cs index 29cce0d80..aa95dde8a 100644 --- a/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.cs +++ b/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.cs @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.cxx b/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.cxx index afc410c9b..9c7ff9d7d 100644 --- a/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.cxx +++ b/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.java b/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.java index aae5f79db..aa56b2a84 100644 --- a/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.java +++ b/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.java @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.lua b/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.lua index bc5d7989e..689aac52b 100644 --- a/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.lua +++ b/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.lua @@ -1,6 +1,6 @@ --========================================================================= -- --- Copyright Insight Software Consortium +-- Copyright NumFOCUS -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.py b/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.py index 64587e1a7..4e157ab87 100755 --- a/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.py +++ b/Examples/ImageRegistrationMethod1/ImageRegistrationMethod1.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.R b/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.R index ed2670220..50608dbd0 100644 --- a/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.R +++ b/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cs b/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cs index 2d9af63aa..56747d0f4 100644 --- a/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cs +++ b/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cs @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cxx b/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cxx index 88656d34b..86b64a2b9 100644 --- a/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cxx +++ b/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.py b/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.py index 31b5c4d25..01cb00a6a 100755 --- a/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.py +++ b/Examples/ImageRegistrationMethod2/ImageRegistrationMethod2.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod3/ImageRegistrationMethod3.R b/Examples/ImageRegistrationMethod3/ImageRegistrationMethod3.R index 6c680f622..5c860afe6 100644 --- a/Examples/ImageRegistrationMethod3/ImageRegistrationMethod3.R +++ b/Examples/ImageRegistrationMethod3/ImageRegistrationMethod3.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod3/ImageRegistrationMethod3.py b/Examples/ImageRegistrationMethod3/ImageRegistrationMethod3.py index adb83e925..2f8a6718d 100755 --- a/Examples/ImageRegistrationMethod3/ImageRegistrationMethod3.py +++ b/Examples/ImageRegistrationMethod3/ImageRegistrationMethod3.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod4/ImageRegistrationMethod4.R b/Examples/ImageRegistrationMethod4/ImageRegistrationMethod4.R index 030452493..e2131f2d6 100644 --- a/Examples/ImageRegistrationMethod4/ImageRegistrationMethod4.R +++ b/Examples/ImageRegistrationMethod4/ImageRegistrationMethod4.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethod4/ImageRegistrationMethod4.py b/Examples/ImageRegistrationMethod4/ImageRegistrationMethod4.py index a7bb2f3e0..19375a653 100755 --- a/Examples/ImageRegistrationMethod4/ImageRegistrationMethod4.py +++ b/Examples/ImageRegistrationMethod4/ImageRegistrationMethod4.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.R b/Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.R index 2a02b910b..1c412b515 100644 --- a/Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.R +++ b/Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.cxx b/Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.cxx index 84129a93d..4eac6f0e6 100644 --- a/Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.cxx +++ b/Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.py b/Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.py index 3b8fd7191..55c1b8d09 100755 --- a/Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.py +++ b/Examples/ImageRegistrationMethodBSpline1/ImageRegistrationMethodBSpline1.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethodBSpline2/ImageRegistrationMethodBSpline2.R b/Examples/ImageRegistrationMethodBSpline2/ImageRegistrationMethodBSpline2.R index ad3ff3a5a..54f231b9d 100644 --- a/Examples/ImageRegistrationMethodBSpline2/ImageRegistrationMethodBSpline2.R +++ b/Examples/ImageRegistrationMethodBSpline2/ImageRegistrationMethodBSpline2.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethodBSpline2/ImageRegistrationMethodBSpline2.py b/Examples/ImageRegistrationMethodBSpline2/ImageRegistrationMethodBSpline2.py index bfc7a83f3..da907934a 100755 --- a/Examples/ImageRegistrationMethodBSpline2/ImageRegistrationMethodBSpline2.py +++ b/Examples/ImageRegistrationMethodBSpline2/ImageRegistrationMethodBSpline2.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethodBSpline3/ImageRegistrationMethodBSpline3.cxx b/Examples/ImageRegistrationMethodBSpline3/ImageRegistrationMethodBSpline3.cxx index 22027f2e4..6e8682645 100644 --- a/Examples/ImageRegistrationMethodBSpline3/ImageRegistrationMethodBSpline3.cxx +++ b/Examples/ImageRegistrationMethodBSpline3/ImageRegistrationMethodBSpline3.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethodBSpline3/ImageRegistrationMethodBSpline3.py b/Examples/ImageRegistrationMethodBSpline3/ImageRegistrationMethodBSpline3.py index 6ef516eb6..a394c2ba5 100755 --- a/Examples/ImageRegistrationMethodBSpline3/ImageRegistrationMethodBSpline3.py +++ b/Examples/ImageRegistrationMethodBSpline3/ImageRegistrationMethodBSpline3.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.R b/Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.R index ddb204e48..954ae3324 100644 --- a/Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.R +++ b/Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.cxx b/Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.cxx index 3ff15e729..825245b49 100644 --- a/Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.cxx +++ b/Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.py b/Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.py index 5730fe085..30557f14b 100755 --- a/Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.py +++ b/Examples/ImageRegistrationMethodDisplacement1/ImageRegistrationMethodDisplacement1.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethodExhaustive/ImageRegistrationMethodExhaustive.R b/Examples/ImageRegistrationMethodExhaustive/ImageRegistrationMethodExhaustive.R index 0bf4f9fdb..84f16aba7 100644 --- a/Examples/ImageRegistrationMethodExhaustive/ImageRegistrationMethodExhaustive.R +++ b/Examples/ImageRegistrationMethodExhaustive/ImageRegistrationMethodExhaustive.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageRegistrationMethodExhaustive/ImageRegistrationMethodExhaustive.py b/Examples/ImageRegistrationMethodExhaustive/ImageRegistrationMethodExhaustive.py index 8fa99ff0f..008642820 100755 --- a/Examples/ImageRegistrationMethodExhaustive/ImageRegistrationMethodExhaustive.py +++ b/Examples/ImageRegistrationMethodExhaustive/ImageRegistrationMethodExhaustive.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageViewing/ImageViewing.R b/Examples/ImageViewing/ImageViewing.R index d301636b9..d84ad837b 100644 --- a/Examples/ImageViewing/ImageViewing.R +++ b/Examples/ImageViewing/ImageViewing.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/ImageViewing/ImageViewing.py b/Examples/ImageViewing/ImageViewing.py index 639c21fa4..da55e641b 100644 --- a/Examples/ImageViewing/ImageViewing.py +++ b/Examples/ImageViewing/ImageViewing.py @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R b/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R index 2b2d11924..070723f1d 100644 --- a/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R +++ b/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py b/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py index dd51c4df8..49c473bee 100755 --- a/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py +++ b/Examples/N4BiasFieldCorrection/N4BiasFieldCorrection.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/Python/BoarderSegmentation.py b/Examples/Python/BoarderSegmentation.py index 4dd6f70cb..97884ef00 100755 --- a/Examples/Python/BoarderSegmentation.py +++ b/Examples/Python/BoarderSegmentation.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/Python/CannyEdge.py b/Examples/Python/CannyEdge.py index f81c03611..a9167db01 100755 --- a/Examples/Python/CannyEdge.py +++ b/Examples/Python/CannyEdge.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/Python/ConnectedThresholdImageFilter.py b/Examples/Python/ConnectedThresholdImageFilter.py index 2805f1634..f17390a39 100644 --- a/Examples/Python/ConnectedThresholdImageFilter.py +++ b/Examples/Python/ConnectedThresholdImageFilter.py @@ -1,6 +1,6 @@ '''========================================================================= ' -' Copyright Insight Software Consortium +' Copyright NumFOCUS ' ' Licensed under the Apache License, Version 2.0 (the "License"); ' you may not use this file except in compliance with the License. diff --git a/Examples/Python/DicomModifyTags.py b/Examples/Python/DicomModifyTags.py index f50441cc4..3e6266f8d 100644 --- a/Examples/Python/DicomModifyTags.py +++ b/Examples/Python/DicomModifyTags.py @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/Python/DicomSeriesReader2.py b/Examples/Python/DicomSeriesReader2.py index f4556f92f..357b7e725 100755 --- a/Examples/Python/DicomSeriesReader2.py +++ b/Examples/Python/DicomSeriesReader2.py @@ -2,7 +2,7 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/Python/ExtractSlice.py b/Examples/Python/ExtractSlice.py index 51b793ab4..6ea2bd29c 100755 --- a/Examples/Python/ExtractSlice.py +++ b/Examples/Python/ExtractSlice.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/Python/FFTConvolution.py b/Examples/Python/FFTConvolution.py index c6a53f237..d0e5846ef 100755 --- a/Examples/Python/FFTConvolution.py +++ b/Examples/Python/FFTConvolution.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/Python/GeodesicActiceContourSegmentation.py b/Examples/Python/GeodesicActiceContourSegmentation.py index 80ce3c696..19fb279d3 100644 --- a/Examples/Python/GeodesicActiceContourSegmentation.py +++ b/Examples/Python/GeodesicActiceContourSegmentation.py @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/Python/ImageCreateAndSet.py b/Examples/Python/ImageCreateAndSet.py index 09c47c93d..03fbd5220 100755 --- a/Examples/Python/ImageCreateAndSet.py +++ b/Examples/Python/ImageCreateAndSet.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/Python/NeighborhoodConnectedImageFilter.py b/Examples/Python/NeighborhoodConnectedImageFilter.py index f396b93d1..83b68d0a3 100644 --- a/Examples/Python/NeighborhoodConnectedImageFilter.py +++ b/Examples/Python/NeighborhoodConnectedImageFilter.py @@ -1,6 +1,6 @@ '''========================================================================= ' - ' Copyright Insight Software Consortium + ' Copyright NumFOCUS ' ' Licensed under the Apache License, Version 2.0 (the "License"); ' you may not use this file except in compliance with the License. diff --git a/Examples/Python/ReadAndShow.py b/Examples/Python/ReadAndShow.py index 6cf26133a..39ef41535 100755 --- a/Examples/Python/ReadAndShow.py +++ b/Examples/Python/ReadAndShow.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/Python/SimpleGaussianProcedural.py b/Examples/Python/SimpleGaussianProcedural.py index bc4a98838..81bd58705 100755 --- a/Examples/Python/SimpleGaussianProcedural.py +++ b/Examples/Python/SimpleGaussianProcedural.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/Segmentation/ConnectedThresholdImageFilter.cxx b/Examples/Segmentation/ConnectedThresholdImageFilter.cxx index 38f8d3437..15ba03e9c 100644 --- a/Examples/Segmentation/ConnectedThresholdImageFilter.cxx +++ b/Examples/Segmentation/ConnectedThresholdImageFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * - * Copyright Insight Software Consortium + * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/Segmentation/NeighborhoodConnectedImageFilter.cxx b/Examples/Segmentation/NeighborhoodConnectedImageFilter.cxx index 807bc6fc6..c8678327f 100644 --- a/Examples/Segmentation/NeighborhoodConnectedImageFilter.cxx +++ b/Examples/Segmentation/NeighborhoodConnectedImageFilter.cxx @@ -1,6 +1,6 @@ /*========================================================================= * - * Copyright Insight Software Consortium + * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/SimpleGaussian/SimpleGaussian.R b/Examples/SimpleGaussian/SimpleGaussian.R index 11173a8b5..c3a5ad232 100644 --- a/Examples/SimpleGaussian/SimpleGaussian.R +++ b/Examples/SimpleGaussian/SimpleGaussian.R @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/SimpleGaussian/SimpleGaussian.cs b/Examples/SimpleGaussian/SimpleGaussian.cs index 21edb6383..df712fe54 100644 --- a/Examples/SimpleGaussian/SimpleGaussian.cs +++ b/Examples/SimpleGaussian/SimpleGaussian.cs @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/SimpleGaussian/SimpleGaussian.cxx b/Examples/SimpleGaussian/SimpleGaussian.cxx index dabc2223d..2b532774b 100644 --- a/Examples/SimpleGaussian/SimpleGaussian.cxx +++ b/Examples/SimpleGaussian/SimpleGaussian.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/SimpleGaussian/SimpleGaussian.java b/Examples/SimpleGaussian/SimpleGaussian.java index fa4e84739..c54932032 100644 --- a/Examples/SimpleGaussian/SimpleGaussian.java +++ b/Examples/SimpleGaussian/SimpleGaussian.java @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Examples/SimpleGaussian/SimpleGaussian.lua b/Examples/SimpleGaussian/SimpleGaussian.lua index 91b78df6a..8737c1846 100644 --- a/Examples/SimpleGaussian/SimpleGaussian.lua +++ b/Examples/SimpleGaussian/SimpleGaussian.lua @@ -1,6 +1,6 @@ --========================================================================= -- --- Copyright Insight Software Consortium +-- Copyright NumFOCUS -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/Examples/SimpleGaussian/SimpleGaussian.py b/Examples/SimpleGaussian/SimpleGaussian.py index f633f5d64..ff9f0a916 100755 --- a/Examples/SimpleGaussian/SimpleGaussian.py +++ b/Examples/SimpleGaussian/SimpleGaussian.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/SimpleGaussian/SimpleGaussian.rb b/Examples/SimpleGaussian/SimpleGaussian.rb index bfa424394..ab5dc77eb 100644 --- a/Examples/SimpleGaussian/SimpleGaussian.rb +++ b/Examples/SimpleGaussian/SimpleGaussian.rb @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/SimpleGaussian/SimpleGaussian.tcl b/Examples/SimpleGaussian/SimpleGaussian.tcl index ff8a96f40..eae7700f0 100644 --- a/Examples/SimpleGaussian/SimpleGaussian.tcl +++ b/Examples/SimpleGaussian/SimpleGaussian.tcl @@ -1,6 +1,6 @@ #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Examples/SimpleGaussianFunctional.cxx b/Examples/SimpleGaussianFunctional.cxx index d4becfb4d..b4c028c0c 100644 --- a/Examples/SimpleGaussianFunctional.cxx +++ b/Examples/SimpleGaussianFunctional.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/ExpandTemplateGenerator/JSONQuery.lua b/ExpandTemplateGenerator/JSONQuery.lua index 3ce55d87d..c3ca9ccd7 100644 --- a/ExpandTemplateGenerator/JSONQuery.lua +++ b/ExpandTemplateGenerator/JSONQuery.lua @@ -1,7 +1,7 @@ --!/usr/bin/env lua --========================================================================= -- --- Copyright Insight Software Consortium +-- Copyright NumFOCUS -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/NOTICE b/NOTICE index 2d87fa455..d701f4ab2 100644 --- a/NOTICE +++ b/NOTICE @@ -1,6 +1,7 @@ +SimpleITK -Insight Segmentation and Registration Toolkit -Copyright 1999-2013 Insight Software Consortium +Copyright 2010-2019 Insight Software Consortium +Copyright 2020 NumFOCUS This software is distributed under the Apache 2.0 License. diff --git a/Readme.md b/Readme.md index 2a91c1255..77ef50af0 100644 --- a/Readme.md +++ b/Readme.md @@ -22,7 +22,7 @@ Wrapping of the C++ code is accomplished through [SWIG](http://www.swig.org), in Unlike ITK's support of n-dimensional spatio-temporal images, SimpleITK supports 2D, 3D and 4D images. The dimensionality refers to spatio-temporal dimensions, the voxels can be n-dimensional vectors. -SimpleITK is licensed under the [Apache License](http://www.opensource.org/licenses/apache2.0.php) in the [same way as ITK](https://www.itk.org/Wiki/ITK_Release_4/Licensing). +SimpleITK is licensed under the [Apache License](http://www.opensource.org/licenses/apache2.0.php). Acknowledgments -------------- diff --git a/Testing/Unit/CSharpImageFilterTestTemplate.cs.in b/Testing/Unit/CSharpImageFilterTestTemplate.cs.in index 627902031..abd3f21d7 100644 --- a/Testing/Unit/CSharpImageFilterTestTemplate.cs.in +++ b/Testing/Unit/CSharpImageFilterTestTemplate.cs.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/IOTests.cxx b/Testing/Unit/IOTests.cxx index e653631b9..f35c3e844 100644 --- a/Testing/Unit/IOTests.cxx +++ b/Testing/Unit/IOTests.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/Java/sitkImageTests.java b/Testing/Unit/Java/sitkImageTests.java index 7795ad753..d3f464269 100644 --- a/Testing/Unit/Java/sitkImageTests.java +++ b/Testing/Unit/Java/sitkImageTests.java @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/Java/sitkProcessObjectTest.java b/Testing/Unit/Java/sitkProcessObjectTest.java index 73cfeb3ab..e6cb95ab1 100644 --- a/Testing/Unit/Java/sitkProcessObjectTest.java +++ b/Testing/Unit/Java/sitkProcessObjectTest.java @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/JavaImageFilterTestTemplate.java.in b/Testing/Unit/JavaImageFilterTestTemplate.java.in index 58de1780b..db7c05a83 100644 --- a/Testing/Unit/JavaImageFilterTestTemplate.java.in +++ b/Testing/Unit/JavaImageFilterTestTemplate.java.in @@ -1,6 +1,6 @@ /*========================================================================= * - * Copyright Insight Software Consortium + * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/LuaImageFilterTestTemplate.lua.in b/Testing/Unit/LuaImageFilterTestTemplate.lua.in index e11549fdb..94a9d2b58 100644 --- a/Testing/Unit/LuaImageFilterTestTemplate.lua.in +++ b/Testing/Unit/LuaImageFilterTestTemplate.lua.in @@ -1,6 +1,6 @@ --========================================================================== -- --- Copyright Insight Software Consortium +-- Copyright NumFOCUS -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/Testing/Unit/Python/ConcurrentImageRead.py b/Testing/Unit/Python/ConcurrentImageRead.py index 0ae57f03c..63b267921 100644 --- a/Testing/Unit/Python/ConcurrentImageRead.py +++ b/Testing/Unit/Python/ConcurrentImageRead.py @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Testing/Unit/Python/IOTest.py b/Testing/Unit/Python/IOTest.py index 8b2232cff..c42e43412 100644 --- a/Testing/Unit/Python/IOTest.py +++ b/Testing/Unit/Python/IOTest.py @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Testing/Unit/Python/ImageReadWriteInt64.py b/Testing/Unit/Python/ImageReadWriteInt64.py index 3ea3e164d..0ce43582b 100644 --- a/Testing/Unit/Python/ImageReadWriteInt64.py +++ b/Testing/Unit/Python/ImageReadWriteInt64.py @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Testing/Unit/Python/sitkGetArrayViewFromImageTest.py b/Testing/Unit/Python/sitkGetArrayViewFromImageTest.py index 4abdac3ff..c031814eb 100644 --- a/Testing/Unit/Python/sitkGetArrayViewFromImageTest.py +++ b/Testing/Unit/Python/sitkGetArrayViewFromImageTest.py @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Testing/Unit/Python/sitkImageIndexingTest.py b/Testing/Unit/Python/sitkImageIndexingTest.py index e90c1a56a..8a91b16f4 100644 --- a/Testing/Unit/Python/sitkImageIndexingTest.py +++ b/Testing/Unit/Python/sitkImageIndexingTest.py @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Testing/Unit/Python/sitkImageTests.py b/Testing/Unit/Python/sitkImageTests.py index e6b18771b..0ee574788 100644 --- a/Testing/Unit/Python/sitkImageTests.py +++ b/Testing/Unit/Python/sitkImageTests.py @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Testing/Unit/Python/sitkNumpyArrayConversionTest.py b/Testing/Unit/Python/sitkNumpyArrayConversionTest.py index 00d8d7f77..e7f839852 100644 --- a/Testing/Unit/Python/sitkNumpyArrayConversionTest.py +++ b/Testing/Unit/Python/sitkNumpyArrayConversionTest.py @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Testing/Unit/Python/sitkProcessObjectTest.py b/Testing/Unit/Python/sitkProcessObjectTest.py index 25dc8bcc5..e53de74f8 100644 --- a/Testing/Unit/Python/sitkProcessObjectTest.py +++ b/Testing/Unit/Python/sitkProcessObjectTest.py @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Testing/Unit/Python/sitkTransformTests.py b/Testing/Unit/Python/sitkTransformTests.py index f03f5dbee..44e9f692d 100644 --- a/Testing/Unit/Python/sitkTransformTests.py +++ b/Testing/Unit/Python/sitkTransformTests.py @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Testing/Unit/PythonImageFilterTestTemplate.py.in b/Testing/Unit/PythonImageFilterTestTemplate.py.in index 8b64d7db4..598813f95 100644 --- a/Testing/Unit/PythonImageFilterTestTemplate.py.in +++ b/Testing/Unit/PythonImageFilterTestTemplate.py.in @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Testing/Unit/RImageFilterTestTemplate.R.in b/Testing/Unit/RImageFilterTestTemplate.R.in index 37a227c6b..22558bb61 100644 --- a/Testing/Unit/RImageFilterTestTemplate.R.in +++ b/Testing/Unit/RImageFilterTestTemplate.R.in @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Testing/Unit/RubyImageFilterTestTemplate.rb.in b/Testing/Unit/RubyImageFilterTestTemplate.rb.in index 135dddc88..79de3a698 100644 --- a/Testing/Unit/RubyImageFilterTestTemplate.rb.in +++ b/Testing/Unit/RubyImageFilterTestTemplate.rb.in @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Testing/Unit/SimpleITKUnitTestDriver.cxx b/Testing/Unit/SimpleITKUnitTestDriver.cxx index fe8b28860..edc2b135a 100644 --- a/Testing/Unit/SimpleITKUnitTestDriver.cxx +++ b/Testing/Unit/SimpleITKUnitTestDriver.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/TclImageFilterTestTemplate.tcl.in b/Testing/Unit/TclImageFilterTestTemplate.tcl.in index 46c6280b0..e1a7050bc 100644 --- a/Testing/Unit/TclImageFilterTestTemplate.tcl.in +++ b/Testing/Unit/TclImageFilterTestTemplate.tcl.in @@ -1,6 +1,6 @@ #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Testing/Unit/TestBase/SimpleITKTestHarness.h b/Testing/Unit/TestBase/SimpleITKTestHarness.h index 8208f493f..14bb233a0 100644 --- a/Testing/Unit/TestBase/SimpleITKTestHarness.h +++ b/Testing/Unit/TestBase/SimpleITKTestHarness.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/TestBase/SimpleITKTestHarnessPaths.h.in b/Testing/Unit/TestBase/SimpleITKTestHarnessPaths.h.in index c3e657c57..398060dcd 100644 --- a/Testing/Unit/TestBase/SimpleITKTestHarnessPaths.h.in +++ b/Testing/Unit/TestBase/SimpleITKTestHarnessPaths.h.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/TestBase/sitkCompareDriver.cxx b/Testing/Unit/TestBase/sitkCompareDriver.cxx index 9c2024fc4..7df255653 100644 --- a/Testing/Unit/TestBase/sitkCompareDriver.cxx +++ b/Testing/Unit/TestBase/sitkCompareDriver.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/TestBase/sitkImageCompare.cxx b/Testing/Unit/TestBase/sitkImageCompare.cxx index 44eae9cf4..82e8c7ed5 100644 --- a/Testing/Unit/TestBase/sitkImageCompare.cxx +++ b/Testing/Unit/TestBase/sitkImageCompare.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/TestBase/sitkImageCompare.h b/Testing/Unit/TestBase/sitkImageCompare.h index a000f8449..14f3f187f 100644 --- a/Testing/Unit/TestBase/sitkImageCompare.h +++ b/Testing/Unit/TestBase/sitkImageCompare.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/TestBase/sitkTransformCompare.cxx b/Testing/Unit/TestBase/sitkTransformCompare.cxx index 23288d6d2..ace4af37f 100644 --- a/Testing/Unit/TestBase/sitkTransformCompare.cxx +++ b/Testing/Unit/TestBase/sitkTransformCompare.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/TestBase/sitkTransformCompare.h b/Testing/Unit/TestBase/sitkTransformCompare.h index 49e3c8ffb..f3653a34f 100644 --- a/Testing/Unit/TestBase/sitkTransformCompare.h +++ b/Testing/Unit/TestBase/sitkTransformCompare.h @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/itkHashImageFilterTest.cxx b/Testing/Unit/itkHashImageFilterTest.cxx index 0d097a5ca..da0b050f0 100644 --- a/Testing/Unit/itkHashImageFilterTest.cxx +++ b/Testing/Unit/itkHashImageFilterTest.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/itkSliceImageFilterTest.cxx b/Testing/Unit/itkSliceImageFilterTest.cxx index cb541884a..6cc5ad284 100644 --- a/Testing/Unit/itkSliceImageFilterTest.cxx +++ b/Testing/Unit/itkSliceImageFilterTest.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkBasicFiltersTests.cxx b/Testing/Unit/sitkBasicFiltersTests.cxx index 1fb42ceac..af4c73bd6 100644 --- a/Testing/Unit/sitkBasicFiltersTests.cxx +++ b/Testing/Unit/sitkBasicFiltersTests.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkCommonTests.cxx b/Testing/Unit/sitkCommonTests.cxx index 0ed25bc3c..26da767ae 100644 --- a/Testing/Unit/sitkCommonTests.cxx +++ b/Testing/Unit/sitkCommonTests.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkExceptionsTests.cxx b/Testing/Unit/sitkExceptionsTests.cxx index 6b00c4944..cceeb1e81 100644 --- a/Testing/Unit/sitkExceptionsTests.cxx +++ b/Testing/Unit/sitkExceptionsTests.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkImage4DTests.cxx b/Testing/Unit/sitkImage4DTests.cxx index 7a88262ce..752af5e28 100644 --- a/Testing/Unit/sitkImage4DTests.cxx +++ b/Testing/Unit/sitkImage4DTests.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkImageFilterTestTemplate.cxx.in b/Testing/Unit/sitkImageFilterTestTemplate.cxx.in index 880e858da..859f68cc5 100644 --- a/Testing/Unit/sitkImageFilterTestTemplate.cxx.in +++ b/Testing/Unit/sitkImageFilterTestTemplate.cxx.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkImageIOTests.cxx b/Testing/Unit/sitkImageIOTests.cxx index 3e0a3f93f..508114bd9 100644 --- a/Testing/Unit/sitkImageIOTests.cxx +++ b/Testing/Unit/sitkImageIOTests.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkImageRegistrationMethodTests.cxx b/Testing/Unit/sitkImageRegistrationMethodTests.cxx index b39aafc9d..02de00cbe 100644 --- a/Testing/Unit/sitkImageRegistrationMethodTests.cxx +++ b/Testing/Unit/sitkImageRegistrationMethodTests.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkImageTests.cxx b/Testing/Unit/sitkImageTests.cxx index 8cf9a9c4f..b2d8cbc6a 100644 --- a/Testing/Unit/sitkImageTests.cxx +++ b/Testing/Unit/sitkImageTests.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkImageViewerTest.cxx b/Testing/Unit/sitkImageViewerTest.cxx index 82c02ea47..7ab41d9f4 100644 --- a/Testing/Unit/sitkImageViewerTest.cxx +++ b/Testing/Unit/sitkImageViewerTest.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkImageViewerTest.h.in b/Testing/Unit/sitkImageViewerTest.h.in index 8cc95542c..0a3e2f9b6 100644 --- a/Testing/Unit/sitkImageViewerTest.h.in +++ b/Testing/Unit/sitkImageViewerTest.h.in @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkImportImageTest.cxx b/Testing/Unit/sitkImportImageTest.cxx index b9057179e..7ecc8569c 100644 --- a/Testing/Unit/sitkImportImageTest.cxx +++ b/Testing/Unit/sitkImportImageTest.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkLabelStatisticsTest.cxx b/Testing/Unit/sitkLabelStatisticsTest.cxx index f3b248a14..49e5b54fb 100644 --- a/Testing/Unit/sitkLabelStatisticsTest.cxx +++ b/Testing/Unit/sitkLabelStatisticsTest.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkOperatorTests.cxx b/Testing/Unit/sitkOperatorTests.cxx index 4aeeac492..d9bc33f78 100644 --- a/Testing/Unit/sitkOperatorTests.cxx +++ b/Testing/Unit/sitkOperatorTests.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkShowTest.cxx b/Testing/Unit/sitkShowTest.cxx index 5c915d1d8..b075a3ce2 100644 --- a/Testing/Unit/sitkShowTest.cxx +++ b/Testing/Unit/sitkShowTest.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkSystemInformationTest.cxx b/Testing/Unit/sitkSystemInformationTest.cxx index af00b99f7..637df57ae 100644 --- a/Testing/Unit/sitkSystemInformationTest.cxx +++ b/Testing/Unit/sitkSystemInformationTest.cxx @@ -1,6 +1,6 @@ /*========================================================================= * - * Copyright Insight Software Consortium + * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkTransformTests.cxx b/Testing/Unit/sitkTransformTests.cxx index 54ac6295a..916468728 100644 --- a/Testing/Unit/sitkTransformTests.cxx +++ b/Testing/Unit/sitkTransformTests.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkTransformToDisplacementFieldFilterTest.cxx b/Testing/Unit/sitkTransformToDisplacementFieldFilterTest.cxx index eaf3ad954..9d31d9cfc 100644 --- a/Testing/Unit/sitkTransformToDisplacementFieldFilterTest.cxx +++ b/Testing/Unit/sitkTransformToDisplacementFieldFilterTest.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Testing/Unit/sitkTypeListsTests.cxx b/Testing/Unit/sitkTypeListsTests.cxx index 95d3129af..03380c976 100644 --- a/Testing/Unit/sitkTypeListsTests.cxx +++ b/Testing/Unit/sitkTypeListsTests.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Utilities/ApplyApacheLicense.sh b/Utilities/ApplyApacheLicense.sh index 149dc0c6f..6d1b700e4 100755 --- a/Utilities/ApplyApacheLicense.sh +++ b/Utilities/ApplyApacheLicense.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -27,7 +27,7 @@ header_c='/*=========================================================================\ *\ - * Copyright Insight Software Consortium\ + * Copyright NumFOCUS\ *\ * Licensed under the Apache License, Version 2.0 (the "License");\ * you may not use this file except in compliance with the License.\ @@ -45,7 +45,7 @@ header_c='/*==================================================================== ' header_pound='#=========================================================================\ #\ - # Copyright Insight Software Consortium\ + # Copyright NumFOCUS\ #\ # Licensed under the Apache License, Version 2.0 (the "License");\ # you may not use this file except in compliance with the License.\ @@ -63,7 +63,7 @@ header_pound='#================================================================= ' header_lua='--=========================================================================\ --\ - -- Copyright Insight Software Consortium\ + -- Copyright NumFOCUS\ --\ -- Licensed under the Apache License, Version 2.0 (the "License");\ -- you may not use this file except in compliance with the License.\ @@ -121,7 +121,7 @@ while (( "$#" )); do header="${header_pound}" fi - grep -q 'Copyright Insight Software Consortium' "$1" || ( + grep -q 'Copyright NumFOCUS' "$1" || ( sed '1 i\ '"$header" $1 > $1.tmp && mv $1.tmp $1 ) shift diff --git a/Utilities/CSVtoTable.py b/Utilities/CSVtoTable.py index c15da0d7f..7f318863f 100755 --- a/Utilities/CSVtoTable.py +++ b/Utilities/CSVtoTable.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Utilities/CompareITKandSITKFilters.py b/Utilities/CompareITKandSITKFilters.py index a29e8d718..d508d5847 100755 --- a/Utilities/CompareITKandSITKFilters.py +++ b/Utilities/CompareITKandSITKFilters.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Utilities/Hooks/pre-commit b/Utilities/Hooks/pre-commit index a7b910da0..b6dd513ad 100755 --- a/Utilities/Hooks/pre-commit +++ b/Utilities/Hooks/pre-commit @@ -1,7 +1,7 @@ #!/usr/bin/env bash #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Utilities/Hooks/prepare-commit-msg b/Utilities/Hooks/prepare-commit-msg index 093e039e9..1ebc5d021 100755 --- a/Utilities/Hooks/prepare-commit-msg +++ b/Utilities/Hooks/prepare-commit-msg @@ -1,7 +1,7 @@ #!/usr/bin/env bash #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Utilities/Maintenance/ContentLinkSynchronization.sh b/Utilities/Maintenance/ContentLinkSynchronization.sh index 017ff0f31..bf3399d05 100755 --- a/Utilities/Maintenance/ContentLinkSynchronization.sh +++ b/Utilities/Maintenance/ContentLinkSynchronization.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Utilities/Maintenance/GeneratePythonDownloadsPage.py b/Utilities/Maintenance/GeneratePythonDownloadsPage.py index 063a3e24b..d9383ebb0 100755 --- a/Utilities/Maintenance/GeneratePythonDownloadsPage.py +++ b/Utilities/Maintenance/GeneratePythonDownloadsPage.py @@ -1,7 +1,7 @@ #!/usr/bin/env python #========================================================================= # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Utilities/Maintenance/SourceTarball.bash b/Utilities/Maintenance/SourceTarball.bash index 86605fa27..cc0156815 100755 --- a/Utilities/Maintenance/SourceTarball.bash +++ b/Utilities/Maintenance/SourceTarball.bash @@ -1,7 +1,7 @@ #!/usr/bin/env bash #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Utilities/ParseForExplicitInstantiation.py b/Utilities/ParseForExplicitInstantiation.py index 3946319c9..1e0464f60 100755 --- a/Utilities/ParseForExplicitInstantiation.py +++ b/Utilities/ParseForExplicitInstantiation.py @@ -102,7 +102,7 @@ def _ParseSymbolFile(self,inputSymbolsFile): header = """/*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Utilities/SetupForDevelopment.sh b/Utilities/SetupForDevelopment.sh index 1bdbfc28f..2afd1e1a1 100755 --- a/Utilities/SetupForDevelopment.sh +++ b/Utilities/SetupForDevelopment.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Utilities/UploadBinaryData.sh b/Utilities/UploadBinaryData.sh index 86ce291ef..1a84aee2f 100755 --- a/Utilities/UploadBinaryData.sh +++ b/Utilities/UploadBinaryData.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash #========================================================================== # -# Copyright Insight Software Consortium +# Copyright NumFOCUS # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/Wrapping/CSharp/AssemblyInfo.cs.in b/Wrapping/CSharp/AssemblyInfo.cs.in index 26bc4a8ad..a8f3c5e9e 100644 --- a/Wrapping/CSharp/AssemblyInfo.cs.in +++ b/Wrapping/CSharp/AssemblyInfo.cs.in @@ -1,4 +1,4 @@ -#region Copyright Insight Software Consortium +#region Copyright NumFOCUS // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ using System.Runtime.CompilerServices; [assembly: AssemblyVersion("@SimpleITK_VERSION_CSHARP_AssemblyVersion@")] [assembly: AssemblyTitle("@PROJECT_NAME@ C# @CSHARP_PLATFORM@ wrapper @SimpleITK_VERSION@")] -[assembly: AssemblyCopyright("Copyright Insight Software Consortium, Apache License, Version 2.0")] +[assembly: AssemblyCopyright("Copyright NumFOCUS, Apache License, Version 2.0")] [assembly: AssemblyDescription("@PROJECT_NAME@ C# @CSHARP_PLATFORM@ wrapper @SimpleITK_VERSION@, compiled with @CSHARP_TYPE@ @CSHARP_VERSION@, using ITK @ITK_VERSION_MAJOR@.@ITK_VERSION_MINOR@.@ITK_VERSION_PATCH@")] [assembly: AssemblyCompany("Insight Software Consortium")] [assembly: AssemblyFileVersion("@SimpleITK_VERSION@")] diff --git a/Wrapping/CSharp/CSharp.i b/Wrapping/CSharp/CSharp.i index 317350d9e..9b044449c 100644 --- a/Wrapping/CSharp/CSharp.i +++ b/Wrapping/CSharp/CSharp.i @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Wrapping/CSharp/CSharpTypemapHelper.i b/Wrapping/CSharp/CSharpTypemapHelper.i index 8d0d1b968..5caf5a1e1 100644 --- a/Wrapping/CSharp/CSharpTypemapHelper.i +++ b/Wrapping/CSharp/CSharpTypemapHelper.i @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Wrapping/Common/SimpleITK_Common.i b/Wrapping/Common/SimpleITK_Common.i index 1db32ffc9..9777089b8 100644 --- a/Wrapping/Common/SimpleITK_Common.i +++ b/Wrapping/Common/SimpleITK_Common.i @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Wrapping/Java/Java.i b/Wrapping/Java/Java.i index 205ae5d7a..af5854c8f 100644 --- a/Wrapping/Java/Java.i +++ b/Wrapping/Java/Java.i @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Wrapping/Lua/Lua.i b/Wrapping/Lua/Lua.i index d7fc95110..4ba7443f5 100644 --- a/Wrapping/Lua/Lua.i +++ b/Wrapping/Lua/Lua.i @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Wrapping/Python/Python.i b/Wrapping/Python/Python.i index 6c633e4e8..79c14d39c 100644 --- a/Wrapping/Python/Python.i +++ b/Wrapping/Python/Python.i @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Wrapping/Python/sitkNumpyArrayConversion.cxx b/Wrapping/Python/sitkNumpyArrayConversion.cxx index 50d896360..d207e4234 100644 --- a/Wrapping/Python/sitkNumpyArrayConversion.cxx +++ b/Wrapping/Python/sitkNumpyArrayConversion.cxx @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Wrapping/Python/sitkPyCommand.cxx b/Wrapping/Python/sitkPyCommand.cxx index af3c865d4..2008eaee7 100644 --- a/Wrapping/Python/sitkPyCommand.cxx +++ b/Wrapping/Python/sitkPyCommand.cxx @@ -1,6 +1,6 @@ /*========================================================================= * - * Copyright Insight Software Consortium + * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Wrapping/Python/sitkPyCommand.h b/Wrapping/Python/sitkPyCommand.h index 6a2dd52e8..a48ac3a0b 100644 --- a/Wrapping/Python/sitkPyCommand.h +++ b/Wrapping/Python/sitkPyCommand.h @@ -1,6 +1,6 @@ /*========================================================================= * - * Copyright Insight Software Consortium + * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Wrapping/R/sitkRArray.cxx b/Wrapping/R/sitkRArray.cxx index 53da76c3c..cf9b1d80e 100644 --- a/Wrapping/R/sitkRArray.cxx +++ b/Wrapping/R/sitkRArray.cxx @@ -1,6 +1,6 @@ /*========================================================================= * - * Copyright Insight Software Consortium + * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Wrapping/R/sitkRCommand.cxx b/Wrapping/R/sitkRCommand.cxx index a23bf1364..a9b707a30 100644 --- a/Wrapping/R/sitkRCommand.cxx +++ b/Wrapping/R/sitkRCommand.cxx @@ -1,6 +1,6 @@ /*========================================================================= * - * Copyright Insight Software Consortium + * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Wrapping/R/sitkRCommand.h b/Wrapping/R/sitkRCommand.h index 5c56a6afb..5a231cd5e 100644 --- a/Wrapping/R/sitkRCommand.h +++ b/Wrapping/R/sitkRCommand.h @@ -1,6 +1,6 @@ /*========================================================================= * - * Copyright Insight Software Consortium + * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Wrapping/Ruby/Ruby.i b/Wrapping/Ruby/Ruby.i index 105a5d5b7..a177dad95 100644 --- a/Wrapping/Ruby/Ruby.i +++ b/Wrapping/Ruby/Ruby.i @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/Wrapping/Tcl/Tcl.i b/Wrapping/Tcl/Tcl.i index 053c4d3ec..f8dddde3a 100644 --- a/Wrapping/Tcl/Tcl.i +++ b/Wrapping/Tcl/Tcl.i @@ -1,6 +1,6 @@ /*========================================================================= * -* Copyright Insight Software Consortium +* Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/docs/source/conf.py b/docs/source/conf.py index d7e4f3818..55a3691e4 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -23,7 +23,7 @@ # -- Project information ----------------------------------------------------- project = u'SimpleITK' -copyright = u'2019, Insight Software Consortium' +copyright = u'2020, NumFOCUS' author = u'Insight Software Consortium' # The short X.Y version From ba233bd6ede2e9266fa5a6bb9c05ec2d1f607a0a Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Thu, 5 Mar 2020 13:46:19 -0500 Subject: [PATCH 394/400] Correct usage of cmake to create zip archive for CSharp --- Wrapping/CSharp/dist/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Wrapping/CSharp/dist/CMakeLists.txt b/Wrapping/CSharp/dist/CMakeLists.txt index 74b042ba4..c4544a97c 100644 --- a/Wrapping/CSharp/dist/CMakeLists.txt +++ b/Wrapping/CSharp/dist/CMakeLists.txt @@ -56,7 +56,7 @@ add_custom_command( TARGET dist.CSharp # COMMENT "Copying $ to CSharp stage..." SimpleITKCSharpManaged - COMMAND ${CMAKE_COMMAND} -E tar cf "${CSHARP_PACKAGE_STAGE_DIR}.zip" "${CSHARP_PACKAGE_STAGE_DIR}" + COMMAND ${CMAKE_COMMAND} -E tar cf "${CSHARP_PACKAGE_STAGE_DIR}.zip" --format=zip "${CSHARP_PACKAGE_STAGE_DIR}" COMMENT "Packaging CSHARP distribution..." ) From f08b0ba1e8c36fef5e3941fec2c885b32827bbcd Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 9 Mar 2020 10:40:07 -0400 Subject: [PATCH 395/400] Update JSON doxygen strings from ITK This is the first update with ITKv5 Doxygen, and a new version of Doxygen used to generate the XML documentation. Mostly the class level strings have been updated. Many of the method level doxygen strings appears not to be currently correct in ITK, so most of them are not updated in the patch. --- .../json/AbsoluteValueDifferenceImageFilter.json | 2 +- Code/BasicFilters/json/AcosImageFilter.json | 2 +- .../AdaptiveHistogramEqualizationImageFilter.json | 2 +- Code/BasicFilters/json/AddImageFilter.json | 2 +- .../json/AdditiveGaussianNoiseImageFilter.json | 2 +- Code/BasicFilters/json/AggregateLabelMapFilter.json | 2 +- .../json/AntiAliasBinaryImageFilter.json | 2 +- .../ApproximateSignedDistanceMapImageFilter.json | 4 ++-- Code/BasicFilters/json/AsinImageFilter.json | 2 +- Code/BasicFilters/json/AtanImageFilter.json | 2 +- .../json/BSplineDecompositionImageFilter.json | 2 +- Code/BasicFilters/json/BilateralImageFilter.json | 2 +- Code/BasicFilters/json/BinShrinkImageFilter.json | 2 +- .../BinaryClosingByReconstructionImageFilter.json | 2 +- Code/BasicFilters/json/BinaryContourImageFilter.json | 2 +- Code/BasicFilters/json/BinaryDilateImageFilter.json | 4 ++-- Code/BasicFilters/json/BinaryErodeImageFilter.json | 4 ++-- .../BasicFilters/json/BinaryFillholeImageFilter.json | 2 +- .../json/BinaryGrindPeakImageFilter.json | 2 +- .../json/BinaryImageToLabelMapFilter.json | 2 +- .../json/BinaryMagnitudeImageFilter.json | 2 +- Code/BasicFilters/json/BinaryMedianImageFilter.json | 2 +- .../json/BinaryMinMaxCurvatureFlowImageFilter.json | 2 +- .../json/BinaryMorphologicalClosingImageFilter.json | 2 +- .../json/BinaryMorphologicalOpeningImageFilter.json | 2 +- Code/BasicFilters/json/BinaryNotImageFilter.json | 2 +- .../BinaryOpeningByReconstructionImageFilter.json | 2 +- .../json/BinaryProjectionImageFilter.json | 2 +- Code/BasicFilters/json/BinaryPruningImageFilter.json | 2 +- .../BinaryReconstructionByDilationImageFilter.json | 2 +- .../BinaryReconstructionByErosionImageFilter.json | 2 +- .../BasicFilters/json/BinaryThinningImageFilter.json | 2 +- .../json/BinaryThresholdImageFilter.json | 2 +- .../json/BinaryThresholdProjectionImageFilter.json | 2 +- Code/BasicFilters/json/BinomialBlurImageFilter.json | 2 +- Code/BasicFilters/json/BitwiseNotImageFilter.json | 2 +- .../json/CannyEdgeDetectionImageFilter.json | 2 +- .../json/CannySegmentationLevelSetImageFilter.json | 2 +- Code/BasicFilters/json/ChangeLabelImageFilter.json | 2 +- .../BasicFilters/json/ChangeLabelLabelMapFilter.json | 2 +- Code/BasicFilters/json/CheckerBoardImageFilter.json | 2 +- Code/BasicFilters/json/ClampImageFilter.json | 2 +- .../json/ClosingByReconstructionImageFilter.json | 2 +- Code/BasicFilters/json/ComposeImageFilter.json | 2 +- .../json/ConnectedComponentImageFilter.json | 2 +- Code/BasicFilters/json/ConstantPadImageFilter.json | 2 +- Code/BasicFilters/json/ConvolutionImageFilter.json | 2 +- Code/BasicFilters/json/CosImageFilter.json | 2 +- .../CurvatureAnisotropicDiffusionImageFilter.json | 2 +- Code/BasicFilters/json/CurvatureFlowImageFilter.json | 2 +- .../json/DanielssonDistanceMapImageFilter.json | 2 +- Code/BasicFilters/json/DemonsRegistrationFilter.json | 2 +- Code/BasicFilters/json/DerivativeImageFilter.json | 2 +- .../json/DiffeomorphicDemonsRegistrationFilter.json | 2 +- .../json/DilateObjectMorphologyImageFilter.json | 2 +- .../json/DiscreteGaussianDerivativeImageFilter.json | 2 +- .../json/DiscreteGaussianImageFilter.json | 2 +- .../DisplacementFieldJacobianDeterminantFilter.json | 2 +- Code/BasicFilters/json/DivideFloorImageFilter.json | 2 +- Code/BasicFilters/json/DivideRealImageFilter.json | 2 +- .../json/DoubleThresholdImageFilter.json | 2 +- Code/BasicFilters/json/EqualImageFilter.json | 2 +- .../json/ErodeObjectMorphologyImageFilter.json | 2 +- Code/BasicFilters/json/ExpandImageFilter.json | 2 +- Code/BasicFilters/json/ExtractImageFilter.json | 4 ++-- .../BasicFilters/json/FFTConvolutionImageFilter.json | 2 +- .../json/FFTNormalizedCorrelationImageFilter.json | 2 +- Code/BasicFilters/json/FFTPadImageFilter.json | 2 +- Code/BasicFilters/json/FFTShiftImageFilter.json | 2 +- .../json/FastMarchingBaseImageFilter.json | 2 +- Code/BasicFilters/json/FastMarchingImageFilter.json | 2 +- .../json/FastMarchingUpwindGradientImageFilter.json | 2 +- .../FastSymmetricForcesDemonsRegistrationFilter.json | 2 +- Code/BasicFilters/json/ForwardFFTImageFilter.json | 2 +- .../GeodesicActiveContourLevelSetImageFilter.json | 2 +- .../GradientAnisotropicDiffusionImageFilter.json | 2 +- Code/BasicFilters/json/GradientImageFilter.json | 2 +- .../json/GrayscaleConnectedClosingImageFilter.json | 4 ++-- .../json/GrayscaleConnectedOpeningImageFilter.json | 2 +- .../json/GrayscaleFillholeImageFilter.json | 2 +- .../json/GrayscaleGrindPeakImageFilter.json | 2 +- Code/BasicFilters/json/GreaterEqualImageFilter.json | 2 +- Code/BasicFilters/json/GreaterImageFilter.json | 2 +- Code/BasicFilters/json/GridImageSource.json | 2 +- Code/BasicFilters/json/HConcaveImageFilter.json | 2 +- Code/BasicFilters/json/HConvexImageFilter.json | 2 +- Code/BasicFilters/json/HMaximaImageFilter.json | 2 +- Code/BasicFilters/json/HMinimaImageFilter.json | 2 +- .../json/HistogramMatchingImageFilter.json | 4 ++-- .../BasicFilters/json/HuangThresholdImageFilter.json | 2 +- .../json/IntermodesThresholdImageFilter.json | 2 +- .../json/InverseDeconvolutionImageFilter.json | 6 +++--- .../json/InvertDisplacementFieldImageFilter.json | 2 +- .../json/InvertIntensityImageFilter.json | 2 +- .../json/IsoContourDistanceImageFilter.json | 2 +- .../json/IsoDataThresholdImageFilter.json | 2 +- ...IterativeInverseDisplacementFieldImageFilter.json | 2 +- Code/BasicFilters/json/JoinSeriesImageFilter.json | 2 +- .../json/KittlerIllingworthThresholdImageFilter.json | 2 +- Code/BasicFilters/json/LabelContourImageFilter.json | 2 +- .../json/LabelImageToLabelMapFilter.json | 2 +- .../json/LabelIntensityStatisticsImageFilter.json | 2 +- .../json/LabelMapContourOverlayImageFilter.json | 2 +- Code/BasicFilters/json/LabelMapMaskImageFilter.json | 2 +- .../json/LabelMapOverlayImageFilter.json | 2 +- .../json/LabelMapToBinaryImageFilter.json | 2 +- .../json/LabelMapToLabelImageFilter.json | 2 +- Code/BasicFilters/json/LabelMapToRGBImageFilter.json | 2 +- .../json/LabelOverlapMeasuresImageFilter.json | 2 +- Code/BasicFilters/json/LabelOverlayImageFilter.json | 2 +- .../json/LabelShapeStatisticsImageFilter.json | 2 +- .../json/LabelStatisticsImageFilter.json | 2 +- Code/BasicFilters/json/LabelToRGBImageFilter.json | 2 +- .../BasicFilters/json/LabelUniqueLabelMapFilter.json | 2 +- Code/BasicFilters/json/LabelVotingImageFilter.json | 2 +- .../json/LandweberDeconvolutionImageFilter.json | 2 +- Code/BasicFilters/json/LaplacianImageFilter.json | 2 +- .../LaplacianSegmentationLevelSetImageFilter.json | 2 +- .../json/LaplacianSharpeningImageFilter.json | 2 +- Code/BasicFilters/json/LessEqualImageFilter.json | 2 +- Code/BasicFilters/json/LessImageFilter.json | 2 +- .../json/LevelSetMotionRegistrationFilter.json | 4 ++-- Code/BasicFilters/json/LiThresholdImageFilter.json | 2 +- .../json/MagnitudeAndPhaseToComplexImageFilter.json | 2 +- Code/BasicFilters/json/MaskImageFilter.json | 2 +- Code/BasicFilters/json/MaskNegatedImageFilter.json | 2 +- .../MaskedFFTNormalizedCorrelationImageFilter.json | 2 +- .../json/MaximumEntropyThresholdImageFilter.json | 2 +- .../json/MaximumProjectionImageFilter.json | 2 +- Code/BasicFilters/json/MeanImageFilter.json | 2 +- .../BasicFilters/json/MeanProjectionImageFilter.json | 2 +- Code/BasicFilters/json/MedianImageFilter.json | 2 +- .../json/MedianProjectionImageFilter.json | 2 +- Code/BasicFilters/json/MergeLabelMapFilter.json | 2 +- .../json/MinMaxCurvatureFlowImageFilter.json | 2 +- .../BasicFilters/json/MinimumMaximumImageFilter.json | 2 +- .../json/MinimumProjectionImageFilter.json | 2 +- Code/BasicFilters/json/MirrorPadImageFilter.json | 2 +- .../json/MomentsThresholdImageFilter.json | 2 +- ...MorphologicalWatershedFromMarkersImageFilter.json | 2 +- .../json/MorphologicalWatershedImageFilter.json | 4 ++-- .../json/MultiLabelSTAPLEImageFilter.json | 4 ++-- .../json/N4BiasFieldCorrectionImageFilter.json | 4 ++-- Code/BasicFilters/json/NaryAddImageFilter.json | 2 +- Code/BasicFilters/json/NaryMaximumImageFilter.json | 2 +- Code/BasicFilters/json/NoiseImageFilter.json | 2 +- Code/BasicFilters/json/NormalizeImageFilter.json | 2 +- .../json/NormalizeToConstantImageFilter.json | 2 +- .../json/NormalizedCorrelationImageFilter.json | 2 +- Code/BasicFilters/json/NotEqualImageFilter.json | 2 +- Code/BasicFilters/json/NotImageFilter.json | 2 +- .../json/OpeningByReconstructionImageFilter.json | 2 +- Code/BasicFilters/json/OrImageFilter.json | 2 +- .../json/OtsuMultipleThresholdsImageFilter.json | 2 +- Code/BasicFilters/json/OtsuThresholdImageFilter.json | 8 ++++++-- Code/BasicFilters/json/PowImageFilter.json | 2 +- .../ProjectedLandweberDeconvolutionImageFilter.json | 2 +- Code/BasicFilters/json/RankImageFilter.json | 2 +- .../json/RealAndImaginaryToComplexImageFilter.json | 2 +- .../RealToHalfHermitianForwardFFTImageFilter.json | 2 +- .../json/ReconstructionByDilationImageFilter.json | 2 +- .../json/ReconstructionByErosionImageFilter.json | 2 +- .../json/RecursiveGaussianImageFilter.json | 2 +- .../BasicFilters/json/RegionalMaximaImageFilter.json | 4 ++-- .../BasicFilters/json/RegionalMinimaImageFilter.json | 2 +- Code/BasicFilters/json/RelabelLabelMapFilter.json | 2 +- .../json/RenyiEntropyThresholdImageFilter.json | 2 +- Code/BasicFilters/json/ResampleImageFilter.json | 2 +- .../json/RichardsonLucyDeconvolutionImageFilter.json | 2 +- Code/BasicFilters/json/SLICImageFilter.json | 2 +- Code/BasicFilters/json/STAPLEImageFilter.json | 2 +- .../json/SaltAndPepperNoiseImageFilter.json | 2 +- .../ScalarChanAndVeseDenseLevelSetImageFilter.json | 2 +- .../json/ScalarImageKmeansImageFilter.json | 2 +- .../json/ScalarToRGBColormapImageFilter.json | 2 +- .../json/ShanbhagThresholdImageFilter.json | 2 +- .../json/ShapeDetectionLevelSetImageFilter.json | 2 +- Code/BasicFilters/json/ShiftScaleImageFilter.json | 2 +- Code/BasicFilters/json/ShotNoiseImageFilter.json | 2 +- Code/BasicFilters/json/ShrinkImageFilter.json | 2 +- .../json/SignedDanielssonDistanceMapImageFilter.json | 2 +- .../json/SignedMaurerDistanceMapImageFilter.json | 2 +- .../json/SimilarityIndexImageFilter.json | 2 +- .../json/SimpleContourExtractorImageFilter.json | 2 +- .../json/SobelEdgeDetectionImageFilter.json | 2 +- Code/BasicFilters/json/SpeckleNoiseImageFilter.json | 2 +- .../json/SquaredDifferenceImageFilter.json | 2 +- .../json/StandardDeviationProjectionImageFilter.json | 2 +- Code/BasicFilters/json/StatisticsImageFilter.json | 4 ++-- Code/BasicFilters/json/SubtractImageFilter.json | 2 +- Code/BasicFilters/json/SumProjectionImageFilter.json | 2 +- .../SymmetricForcesDemonsRegistrationFilter.json | 2 +- ...resholdMaximumConnectedComponentsImageFilter.json | 2 +- .../ThresholdSegmentationLevelSetImageFilter.json | 2 +- .../json/TikhonovDeconvolutionImageFilter.json | 2 +- Code/BasicFilters/json/TileImageFilter.json | 12 ++++++++++-- .../json/TransformToDisplacementFieldFilter.json | 2 +- .../json/TriangleThresholdImageFilter.json | 2 +- Code/BasicFilters/json/UnaryMinusImageFilter.json | 2 +- Code/BasicFilters/json/UnsharpMaskImageFilter.json | 2 +- .../json/ValuedRegionalMaximaImageFilter.json | 2 +- .../json/ValuedRegionalMinimaImageFilter.json | 2 +- .../json/VectorIndexSelectionCastImageFilter.json | 2 +- .../json/VotingBinaryHoleFillingImageFilter.json | 2 +- Code/BasicFilters/json/VotingBinaryImageFilter.json | 2 +- .../VotingBinaryIterativeHoleFillingImageFilter.json | 2 +- .../json/WienerDeconvolutionImageFilter.json | 2 +- Code/BasicFilters/json/WrapPadImageFilter.json | 2 +- Code/BasicFilters/json/XorImageFilter.json | 2 +- Code/BasicFilters/json/YenThresholdImageFilter.json | 2 +- .../ZeroCrossingBasedEdgeDetectionImageFilter.json | 2 +- Code/BasicFilters/json/ZeroCrossingImageFilter.json | 2 +- .../json/ZeroFluxNeumannPadImageFilter.json | 2 +- 213 files changed, 241 insertions(+), 229 deletions(-) diff --git a/Code/BasicFilters/json/AbsoluteValueDifferenceImageFilter.json b/Code/BasicFilters/json/AbsoluteValueDifferenceImageFilter.json index 78943ef1c..39e98cd89 100644 --- a/Code/BasicFilters/json/AbsoluteValueDifferenceImageFilter.json +++ b/Code/BasicFilters/json/AbsoluteValueDifferenceImageFilter.json @@ -30,7 +30,7 @@ } ], "briefdescription" : "Implements pixel-wise the computation of absolute value difference.", - "detaileddescription" : "This filter is parametrized over the types of the two input images and the type of the output image.\n\nNumeric conversions (castings) are done by the C++ defaults.\n\nThe filter will walk over all the pixels in the two input images, and for each one of them it will do the following:\n\n\n\\li Cast the input 1 pixel value to double . \n\n\\li Cast the input 2 pixel value to double . \n\n\\li Compute the difference of the two pixel values. \n\n\\li Compute the absolute value of the difference. \n\n\\li Cast the double value resulting from the absolute value to the pixel type of the output image. \n\n\\li Store the casted value into the output image.\n\n\nThe filter expects all images to have the same dimension (e.g. all 2D, or all 3D, or all ND).", + "detaileddescription" : "This filter is parameterized over the types of the two input images and the type of the output image.\n\nNumeric conversions (castings) are done by the C++ defaults.\n\nThe filter will walk over all the pixels in the two input images, and for each one of them it will do the following:\n\n\n\n\\li Cast the input 1 pixel value to double . \n\n\n\\li Cast the input 2 pixel value to double . \n\n\n\\li Compute the difference of the two pixel values. \n\n\n\\li Compute the absolute value of the difference. \n\n\n\\li Cast the double value resulting from the absolute value to the pixel type of the output image. \n\n\n\\li Store the casted value into the output image.\n\n\n\nThe filter expects all images to have the same dimension (e.g. all 2D, or all 3D, or all ND).", "itk_module" : "ITKImageCompare", "itk_group" : "ImageCompare" } diff --git a/Code/BasicFilters/json/AcosImageFilter.json b/Code/BasicFilters/json/AcosImageFilter.json index 9375ddca3..e9cb24a95 100644 --- a/Code/BasicFilters/json/AcosImageFilter.json +++ b/Code/BasicFilters/json/AcosImageFilter.json @@ -19,7 +19,7 @@ } ], "briefdescription" : "Computes the inverse cosine of each pixel.", - "detaileddescription" : "This filter is templated over the pixel type of the input image and the pixel type of the output image.\n\nThe filter walks over all the pixels in the input image, and for each pixel does do the following:\n\n\n\\li cast the pixel value to double , \n\n\\li apply the std::acos() function to the double value \n\n\\li cast the double value resulting from std::acos() to the pixel type of the output image \n\n\\li store the casted value into the output image.\n\n\nThe filter expects both images to have the same dimension (e.g. both 2D, or both 3D, or both ND).", + "detaileddescription" : "This filter is templated over the pixel type of the input image and the pixel type of the output image.\n\nThe filter walks over all the pixels in the input image, and for each pixel does do the following:\n\n\n\n\\li cast the pixel value to double , \n\n\n\\li apply the std::acos() function to the double value \n\n\n\\li cast the double value resulting from std::acos() to the pixel type of the output image \n\n\n\\li store the casted value into the output image.\n\n\n\nThe filter expects both images to have the same dimension (e.g. both 2D, or both 3D, or both ND).", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/AdaptiveHistogramEqualizationImageFilter.json b/Code/BasicFilters/json/AdaptiveHistogramEqualizationImageFilter.json index ab5f69fdf..ec74cbcfe 100644 --- a/Code/BasicFilters/json/AdaptiveHistogramEqualizationImageFilter.json +++ b/Code/BasicFilters/json/AdaptiveHistogramEqualizationImageFilter.json @@ -69,7 +69,7 @@ } ], "briefdescription" : "Power Law Adaptive Histogram Equalization.", - "detaileddescription" : "Histogram equalization modifies the contrast in an image. The AdaptiveHistogramEqualizationImageFilter is a superset of many contrast enhancing filters. By modifying its parameters (alpha, beta, and window), the AdaptiveHistogramEqualizationImageFilter can produce an adaptively equalized histogram or a version of unsharp mask (local mean subtraction). Instead of applying a strict histogram equalization in a window about a pixel, this filter prescribes a mapping function (power law) controlled by the parameters alpha and beta.\n\nThe parameter alpha controls how much the filter acts like the classical histogram equalization method (alpha=0) to how much the filter acts like an unsharp mask (alpha=1).\n\nThe parameter beta controls how much the filter acts like an unsharp mask (beta=0) to much the filter acts like pass through (beta=1, with alpha=1).\n\nThe parameter window controls the size of the region over which local statistics are calculated.\n\nBy altering alpha, beta and window, a host of equalization and unsharp masking filters is available.\n\nThe boundary condition ignores the part of the neighborhood outside the image, and over-weights the valid part of the neighborhood.\n\nFor detail description, reference \"Adaptive Image Contrast\nEnhancement using Generalizations of Histogram Equalization.\" J.Alex Stark. IEEE Transactions on Image Processing, May 2000.", + "detaileddescription" : "Histogram equalization modifies the contrast in an image. The AdaptiveHistogramEqualizationImageFilter is a superset of many contrast enhancing filters. By modifying its parameters (alpha, beta, and window), the AdaptiveHistogramEqualizationImageFilter can produce an adaptively equalized histogram or a version of unsharp mask (local mean subtraction). Instead of applying a strict histogram equalization in a window about a pixel, this filter prescribes a mapping function (power law) controlled by the parameters alpha and beta.\n\nThe parameter alpha controls how much the filter acts like the classical histogram equalization method (alpha=0) to how much the filter acts like an unsharp mask (alpha=1).\n\nThe parameter beta controls how much the filter acts like an unsharp mask (beta=0) to much the filter acts like pass through (beta=1, with alpha=1).\n\nThe parameter window controls the size of the region over which local statistics are calculated. The size of the window is controlled by SetRadius the default Radius is 5 in all directions.\n\nBy altering alpha, beta and window, a host of equalization and unsharp masking filters is available.\n\nThe boundary condition ignores the part of the neighborhood outside the image, and over-weights the valid part of the neighborhood.\n\nFor detail description, reference \"Adaptive Image Contrast\nEnhancement using Generalizations of Histogram Equalization.\" J.Alex Stark. IEEE Transactions on Image Processing, May 2000.", "itk_module" : "ITKImageStatistics", "itk_group" : "ImageStatistics" } diff --git a/Code/BasicFilters/json/AddImageFilter.json b/Code/BasicFilters/json/AddImageFilter.json index 131ad1176..4a37a5aa5 100644 --- a/Code/BasicFilters/json/AddImageFilter.json +++ b/Code/BasicFilters/json/AddImageFilter.json @@ -40,7 +40,7 @@ } ], "briefdescription" : "Pixel-wise addition of two images.", - "detaileddescription" : "This class is templated over the types of the two input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe pixel type of the input 1 image must have a valid definition of the operator+ with a pixel type of the image 2. This condition is required because internally this filter will perform the operation\n\n\\code\npixel_from_image_1 + pixel_from_image_2\n\n\\endcode\n\nAdditionally the type resulting from the sum, will be cast to the pixel type of the output image.\n\nThe total operation over one pixel will be \\code\noutput_pixel = static_cast( input1_pixel + input2_pixel )\n\n\\endcode\n\nFor example, this filter could be used directly for adding images whose pixels are vectors of the same dimension, and to store the resulting vector in an output image of vector pixels.\n\nThe images to be added are set using the methods: \\code\nSetInput1( image1 );\n\nSetInput2( image2 );\n\n\\endcode\n\nAdditionally, this filter can be used to add a constant to every pixel of an image by using \\code\nSetInput1( image1 );\n\nSetConstant2( constant );\n\n\\endcode\n\n\\warning No numeric overflow checking is performed in this filter.", + "detaileddescription" : "This class is templated over the types of the two input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe pixel type of the input 1 image must have a valid definition of the operator+ with a pixel type of the image 2. This condition is required because internally this filter will perform the operation\n\n\\code\npixel_from_image_1 + pixel_from_image_2\n\n\\endcode\n\n\nAdditionally the type resulting from the sum, will be cast to the pixel type of the output image.\n\nThe total operation over one pixel will be \\code\noutput_pixel = static_cast( input1_pixel + input2_pixel )\n\n\\endcode\n\n\nFor example, this filter could be used directly for adding images whose pixels are vectors of the same dimension, and to store the resulting vector in an output image of vector pixels.\n\nThe images to be added are set using the methods: \\code\nSetInput1( image1 );\n\nSetInput2( image2 );\n\n\\endcode\n\n\nAdditionally, this filter can be used to add a constant to every pixel of an image by using \\code\nSetInput1( image1 );\n\nSetConstant2( constant );\n\n\\endcode\n\n\n\\warning No numeric overflow checking is performed in this filter.", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/AdditiveGaussianNoiseImageFilter.json b/Code/BasicFilters/json/AdditiveGaussianNoiseImageFilter.json index a1c6a05d2..2bb2de5d1 100644 --- a/Code/BasicFilters/json/AdditiveGaussianNoiseImageFilter.json +++ b/Code/BasicFilters/json/AdditiveGaussianNoiseImageFilter.json @@ -94,7 +94,7 @@ } ], "briefdescription" : "Alter an image with additive Gaussian white noise.", - "detaileddescription" : "Additive Gaussian white noise can be modeled as:\n\n\\par \n\\f$ I = I_0 + N \\f$ \n\n\\par \nwhere \\f$ I \\f$ is the observed image, \\f$ I_0 \\f$ is the noise-free image and \\f$ N \\f$ is a normally distributed random variable of mean \\f$ \\mu \\f$ and variance \\f$ \\sigma^2 \\f$ :\n\n\\par \n\\f$ N \\sim \\mathcal{N}(\\mu, \\sigma^2) \\f$ \n\nThe noise is independent of the pixel intensities.\n\n\\author Gaetan Lehmann\n\nThis code was contributed in the Insight Journal paper \"Noise\nSimulation\". https://hdl.handle.net/10380/3158", + "detaileddescription" : "Additive Gaussian white noise can be modeled as:\n\n\\par \n\\f$ I = I_0 + N \\f$ \n\n\n\\par \nwhere \\f$ I \\f$ is the observed image, \\f$ I_0 \\f$ is the noise-free image and \\f$ N \\f$ is a normally distributed random variable of mean \\f$ \\mu \\f$ and variance \\f$ \\sigma^2 \\f$ :\n\n\n\\par \n\\f$ N \\sim \\mathcal{N}(\\mu, \\sigma^2) \\f$ \n\n\nThe noise is independent of the pixel intensities.\n\n\\author Gaetan Lehmann\n\n\nThis code was contributed in the Insight Journal paper \"Noise\n Simulation\". https://hdl.handle.net/10380/3158", "itk_module" : "ITKImageNoise", "itk_group" : "ImageNoise" } diff --git a/Code/BasicFilters/json/AggregateLabelMapFilter.json b/Code/BasicFilters/json/AggregateLabelMapFilter.json index a25270781..2b0c1c7e7 100644 --- a/Code/BasicFilters/json/AggregateLabelMapFilter.json +++ b/Code/BasicFilters/json/AggregateLabelMapFilter.json @@ -31,7 +31,7 @@ } ], "briefdescription" : "Collapses all labels into the first label.", - "detaileddescription" : "This filter takes a label map as input and visits the pixels of all labels and assigns them to the first label of the label map. At the end of the execution of this filter, the map will contain a single filter.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ShapeLabelObject , RelabelComponentImageFilter", + "detaileddescription" : "This filter takes a label map as input and visits the pixels of all labels and assigns them to the first label of the label map. At the end of the execution of this filter, the map will contain a single filter.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ShapeLabelObject , RelabelComponentImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/AntiAliasBinaryImageFilter.json b/Code/BasicFilters/json/AntiAliasBinaryImageFilter.json index 351004352..87adac1bd 100644 --- a/Code/BasicFilters/json/AntiAliasBinaryImageFilter.json +++ b/Code/BasicFilters/json/AntiAliasBinaryImageFilter.json @@ -57,7 +57,7 @@ } ], "briefdescription" : "A method for estimation of a surface from a binary volume.", - "detaileddescription" : "\\par \nThis filter implements a surface-fitting method for estimation of a surface from a binary volume. This process can be used to reduce aliasing artifacts which result in visualization of binary partitioned surfaces.\n\n\\par \nThe binary volume (filter input) is used as a set of constraints in an iterative relaxation process of an estimated ND surface. The surface is described implicitly as the zero level set of a volume \\f$ \\phi \\f$ and allowed to deform under curvature flow. A set of constraints is imposed on this movement as follows:\n\n\\par \n \\f[ u_{i,j,k}^{n+1} = \\left\\{ \\begin{array}{ll} \\mbox{max} (u_{i,j,k}^{n} + \\Delta t H_{i,j,k}^{n}, 0) & \\mbox{\\f$B_{i,j,k} = 1\\f$} \\\\ \\mbox{min} (u_{i,j,k}^{n} + \\Delta t H_{i,j,k}^{n}, 0) & \\mbox{\\f$B_{i,j,k} = -1\\f$} \\end{array}\\right. \\f] \n\n\\par \nwhere \\f$ u_{i,j,k}^{n} \\f$ is the value of \\f$ \\phi \\f$ at discrete index \\f$ (i,j,k) \\f$ and iteration \\f$ n \\f$ , \\f$ H \\f$ is the gradient magnitude times mean curvature of \\f$ \\phi \\f$ , and \\f$ B \\f$ is the binary input volume, with 1 denoting an inside pixel and -1 denoting an outside pixel.\n\n\\par NOTES\nThis implementation uses a sparse field level set solver instead of the narrow band implementation described in the reference below, which may introduce some differences in how fast and how accurately (in terms of RMS error) the solution converges.\n\n\\par REFERENCES\nWhitaker, Ross. \"Reducing Aliasing Artifacts In Iso-Surfaces of Binary\nVolumes\" IEEE Volume Visualization and Graphics Symposium, October 2000, pp.23-32.\n\n\\par PARAMETERS\nThe MaximumRMSChange parameter is used to determine when the solution has converged. A lower value will result in a tighter-fitting solution, but will require more computations. Too low a value could put the solver into an infinite loop. Values should always be less than 1.0. A value of 0.07 is a good starting estimate.\n\n\\par \nThe MaximumIterations parameter can be used to halt the solution after a specified number of iterations.\n\n\\par INPUT\nThe input is an N-dimensional image of any type. It is assumed to be a binary image. The filter will use an isosurface value that is halfway between the min and max values in the image. A signed data type is not necessary for the input.\n\n\\par OUTPUT\nThe filter will output a level set image of real, signed values. The zero crossings of this (N-dimensional) image represent the position of the isosurface value of interest. Values outside the zero level set are negative and values inside the zero level set are positive values.\n\n\\par IMPORTANT!\nThe output image type you use to instantiate this filter should be a real valued scalar type. In other words: doubles or floats.\n\n\\par USING THIS FILTER\nThe filter is relatively straightforward to use. Tests and examples exist to illustrate. The important thing is to understand the input and output types so you can properly interperet your results.\n\n\\par \nIn the common case, the only parameter that will need to be set is the MaximumRMSChange parameter, which determines when the solver halts.", + "detaileddescription" : "\\par \nThis filter implements a surface-fitting method for estimation of a surface from a binary volume. This process can be used to reduce aliasing artifacts which result in visualization of binary partitioned surfaces.\n\n\n\\par \nThe binary volume (filter input) is used as a set of constraints in an iterative relaxation process of an estimated ND surface. The surface is described implicitly as the zero level set of a volume \\f$ \\phi \\f$ and allowed to deform under curvature flow. A set of constraints is imposed on this movement as follows:\n\n\n\\par \n \\f[ u_{i,j,k}^{n+1} = \\left\\{ \\begin{array}{ll} \\mbox{max} (u_{i,j,k}^{n} + \\Delta t H_{i,j,k}^{n}, 0) & \\mbox{\\f$B_{i,j,k} = 1\\f$} \\\\ \\mbox{min} (u_{i,j,k}^{n} + \\Delta t H_{i,j,k}^{n}, 0) & \\mbox{\\f$B_{i,j,k} = -1\\f$} \\end{array}\\right. \\f] \n\n\n\\par \nwhere \\f$ u_{i,j,k}^{n} \\f$ is the value of \\f$ \\phi \\f$ at discrete index \\f$ (i,j,k) \\f$ and iteration \\f$ n \\f$ , \\f$ H \\f$ is the gradient magnitude times mean curvature of \\f$ \\phi \\f$ , and \\f$ B \\f$ is the binary input volume, with 1 denoting an inside pixel and -1 denoting an outside pixel.\n\n\n\\par NOTES\nThis implementation uses a sparse field level set solver instead of the narrow band implementation described in the reference below, which may introduce some differences in how fast and how accurately (in terms of RMS error) the solution converges.\n\n\n\\par REFERENCES\nWhitaker, Ross. \"Reducing Aliasing Artifacts In Iso-Surfaces of Binary\nVolumes\" IEEE Volume Visualization and Graphics Symposium, October 2000, pp.23-32.\n\n\n\\par PARAMETERS\nThe MaximumRMSChange parameter is used to determine when the solution has converged. A lower value will result in a tighter-fitting solution, but will require more computations. Too low a value could put the solver into an infinite loop. Values should always be less than 1.0. A value of 0.07 is a good starting estimate.\n\n\n\\par \nThe MaximumIterations parameter can be used to halt the solution after a specified number of iterations.\n\n\n\\par INPUT\nThe input is an N-dimensional image of any type. It is assumed to be a binary image. The filter will use an isosurface value that is halfway between the min and max values in the image. A signed data type is not necessary for the input.\n\n\n\\par OUTPUT\nThe filter will output a level set image of real, signed values. The zero crossings of this (N-dimensional) image represent the position of the isosurface value of interest. Values outside the zero level set are negative and values inside the zero level set are positive values.\n\n\n\\par IMPORTANT!\nThe output image type you use to instantiate this filter should be a real valued scalar type. In other words: doubles or floats.\n\n\n\\par USING THIS FILTER\nThe filter is relatively straightforward to use. Tests and examples exist to illustrate. The important thing is to understand the input and output types so you can properly interpret your results.\n\n\n\\par \nIn the common case, the only parameter that will need to be set is the MaximumRMSChange parameter, which determines when the solver halts.", "itk_module" : "ITKAntiAlias", "itk_group" : "AntiAlias" } diff --git a/Code/BasicFilters/json/ApproximateSignedDistanceMapImageFilter.json b/Code/BasicFilters/json/ApproximateSignedDistanceMapImageFilter.json index 53a7730b3..0d72fe61b 100644 --- a/Code/BasicFilters/json/ApproximateSignedDistanceMapImageFilter.json +++ b/Code/BasicFilters/json/ApproximateSignedDistanceMapImageFilter.json @@ -25,7 +25,7 @@ "briefdescriptionSet" : "", "detaileddescriptionSet" : "Set/Get intensity value representing non-objects in the mask.", "briefdescriptionGet" : "", - "detaileddescriptionGet" : "Set/Get intensity value representing non-objects in the mask." + "detaileddescriptionGet" : "Set/Get intensity value representing the interior of objects in the mask." } ], "tests" : [ @@ -58,7 +58,7 @@ } ], "briefdescription" : "Create a map of the approximate signed distance from the boundaries of a binary image.", - "detaileddescription" : "The ApproximateSignedDistanceMapImageFilter takes as input a binary image and produces a signed distance map. Each pixel value in the output contains the approximate distance from that pixel to the nearest \"object\" in the binary image. This filter differs from the DanielssonDistanceMapImageFilter in that it calculates the distance to the \"object edge\" for pixels within the object.\n\nNegative values in the output indicate that the pixel at that position is within an object in the input image. The absolute value of a negative pixel represents the approximate distance to the nearest object boundary pixel.\n\nWARNING: This filter requires that the output type be floating-point. Otherwise internal calculations will not be performed to the appropriate precision, resulting in completely incorrect (read: zero-valued) output.\n\nThe distances computed by this filter are Chamfer distances, which are only an approximation to Euclidian distances, and are not as exact approximations as those calculated by the DanielssonDistanceMapImageFilter . On the other hand, this filter is faster.\n\nThis filter requires that an \"inside value\" and \"outside value\" be set as parameters. The \"inside value\" is the intensity value of the binary image which corresponds to objects, and the \"outside value\" is the intensity of the background. (A typical binary image often represents objects as black (0) and background as white (usually 255), or vice-versa.) Note that this filter is slightly faster if the inside value is less than the outside value. Otherwise an extra iteration through the image is required.\n\nThis filter uses the FastChamferDistanceImageFilter and the IsoContourDistanceImageFilter internally to perform the distance calculations.\n\n\\see DanielssonDistanceMapImageFilter \n\n\\see SignedDanielssonDistanceMapImageFilter \n\n\\see SignedMaurerDistanceMapImageFilter \n\n\\see FastChamferDistanceImageFilter \n\n\\see IsoContourDistanceImageFilter \n\n\\author Zach Pincus", + "detaileddescription" : "The ApproximateSignedDistanceMapImageFilter takes as input a binary image and produces a signed distance map. Each pixel value in the output contains the approximate distance from that pixel to the nearest \"object\" in the binary image. This filter differs from the DanielssonDistanceMapImageFilter in that it calculates the distance to the \"object edge\" for pixels within the object.\n\nNegative values in the output indicate that the pixel at that position is within an object in the input image. The absolute value of a negative pixel represents the approximate distance to the nearest object boundary pixel.\n\nWARNING: This filter requires that the output type be floating-point. Otherwise internal calculations will not be performed to the appropriate precision, resulting in completely incorrect (read: zero-valued) output.\n\nThe distances computed by this filter are Chamfer distances, which are only an approximation to Euclidian distances, and are not as exact approximations as those calculated by the DanielssonDistanceMapImageFilter . On the other hand, this filter is faster.\n\nThis filter requires that an \"inside value\" and \"outside value\" be set as parameters. The \"inside value\" is the intensity value of the binary image which corresponds to objects, and the \"outside value\" is the intensity of the background. (A typical binary image often represents objects as black (0) and background as white (usually 255), or vice-versa.) Note that this filter is slightly faster if the inside value is less than the outside value. Otherwise an extra iteration through the image is required.\n\nThis filter uses the FastChamferDistanceImageFilter and the IsoContourDistanceImageFilter internally to perform the distance calculations.\n\n\\see DanielssonDistanceMapImageFilter \n\n\n\\see SignedDanielssonDistanceMapImageFilter \n\n\n\\see SignedMaurerDistanceMapImageFilter \n\n\n\\see FastChamferDistanceImageFilter \n\n\n\\see IsoContourDistanceImageFilter \n\n\n\\author Zach Pincus", "itk_module" : "ITKDistanceMap", "itk_group" : "DistanceMap" } diff --git a/Code/BasicFilters/json/AsinImageFilter.json b/Code/BasicFilters/json/AsinImageFilter.json index da1fdb159..2877e539a 100644 --- a/Code/BasicFilters/json/AsinImageFilter.json +++ b/Code/BasicFilters/json/AsinImageFilter.json @@ -19,7 +19,7 @@ } ], "briefdescription" : "Computes the sine of each pixel.", - "detaileddescription" : "This filter is templated over the pixel type of the input image and the pixel type of the output image.\n\nThe filter walks over all the pixels in the input image, and for each pixel does the following:\n\n\n\\li cast the pixel value to double , \n\n\\li apply the std::asin() function to the double value, \n\n\\li cast the double value resulting from std::asin() to the pixel type of the output image, \n\n\\li store the casted value into the output image.\n\n\nThe filter expects both images to have the same dimension (e.g. both 2D, or both 3D, or both ND)", + "detaileddescription" : "This filter is templated over the pixel type of the input image and the pixel type of the output image.\n\nThe filter walks over all the pixels in the input image, and for each pixel does the following:\n\n\n\n\\li cast the pixel value to double , \n\n\n\\li apply the std::asin() function to the double value, \n\n\n\\li cast the double value resulting from std::asin() to the pixel type of the output image, \n\n\n\\li store the casted value into the output image.\n\n\n\nThe filter expects both images to have the same dimension (e.g. both 2D, or both 3D, or both ND)", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/AtanImageFilter.json b/Code/BasicFilters/json/AtanImageFilter.json index 82cafecee..ff5dc6449 100644 --- a/Code/BasicFilters/json/AtanImageFilter.json +++ b/Code/BasicFilters/json/AtanImageFilter.json @@ -19,7 +19,7 @@ } ], "briefdescription" : "Computes the one-argument inverse tangent of each pixel.", - "detaileddescription" : "This filter is templated over the pixel type of the input image and the pixel type of the output image.\n\nThe filter walks over all the pixels in the input image, and for each pixel does the following:\n\n\n\\li cast the pixel value to double , \n\n\\li apply the std::atan() function to the double value, \n\n\\li cast the double value resulting from std::atan() to the pixel type of the output image, \n\n\\li store the cast value into the output image.", + "detaileddescription" : "This filter is templated over the pixel type of the input image and the pixel type of the output image.\n\nThe filter walks over all the pixels in the input image, and for each pixel does the following:\n\n\n\n\\li cast the pixel value to double , \n\n\n\\li apply the std::atan() function to the double value, \n\n\n\\li cast the double value resulting from std::atan() to the pixel type of the output image, \n\n\n\\li store the cast value into the output image.", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/BSplineDecompositionImageFilter.json b/Code/BasicFilters/json/BSplineDecompositionImageFilter.json index b1eb5177f..60e3c09c3 100644 --- a/Code/BasicFilters/json/BSplineDecompositionImageFilter.json +++ b/Code/BasicFilters/json/BSplineDecompositionImageFilter.json @@ -40,6 +40,6 @@ ], "itk_module" : "ITKImageFunction", "itk_group" : "ImageFunction", - "detaileddescription" : "This class defines N-Dimension B-Spline transformation. It is based on: [1] M. Unser, \"Splines: A Perfect Fit for Signal and Image Processing,\" IEEE Signal Processing Magazine, vol. 16, no. 6, pp. 22-38, November 1999. [2] M. Unser, A. Aldroubi and M. Eden, \"B-Spline Signal Processing: Part I--Theory,\" IEEE Transactions on Signal Processing, vol. 41, no. 2, pp. 821-832, February 1993. [3] M. Unser, A. Aldroubi and M. Eden, \"B-Spline Signal Processing: Part II--Efficient Design and Applications,\" IEEE Transactions on Signal Processing, vol. 41, no. 2, pp. 834-848, February 1993. And code obtained from bigwww.epfl.ch by Philippe Thevenaz\n\nLimitations: Spline order must be between 0 and 5. Spline order must be set before setting the image. Uses mirror boundary conditions. Requires the same order of Spline for each dimension. Can only process LargestPossibleRegion\n\n\\see itkBSplineInterpolateImageFunction", + "detaileddescription" : "This class defines N-Dimension B-Spline transformation. It is based on: [1] M. Unser, \"Splines: A Perfect Fit for Signal and Image Processing,\" IEEE Signal Processing Magazine, vol. 16, no. 6, pp. 22-38, November 1999. [2] M. Unser, A. Aldroubi and M. Eden, \"B-Spline Signal Processing: Part I--Theory,\" IEEE Transactions on Signal Processing, vol. 41, no. 2, pp. 821-832, February 1993. [3] M. Unser, A. Aldroubi and M. Eden, \"B-Spline Signal Processing: Part II--Efficient Design and Applications,\" IEEE Transactions on Signal Processing, vol. 41, no. 2, pp. 834-848, February 1993. And code obtained from bigwww.epfl.ch by Philippe Thevenaz\n\nLimitations: Spline order must be between 0 and 5. Spline order must be set before setting the image. Uses mirror boundary conditions. Requires the same order of Spline for each dimension. Can only process LargestPossibleRegion\n\n\\see BSplineResampleImageFunction", "briefdescription" : "Calculates the B-Spline coefficients of an image. Spline order may be from 0 to 5." } diff --git a/Code/BasicFilters/json/BilateralImageFilter.json b/Code/BasicFilters/json/BilateralImageFilter.json index 016ae2cf2..0376ec7c7 100644 --- a/Code/BasicFilters/json/BilateralImageFilter.json +++ b/Code/BasicFilters/json/BilateralImageFilter.json @@ -66,7 +66,7 @@ } ], "briefdescription" : "Blurs an image while preserving edges.", - "detaileddescription" : "This filter uses bilateral filtering to blur an image using both domain and range \"neighborhoods\". Pixels that are close to a pixel in the image domain and similar to a pixel in the image range are used to calculate the filtered value. Two gaussian kernels (one in the image domain and one in the image range) are used to smooth the image. The result is an image that is smoothed in homogeneous regions yet has edges preserved. The result is similar to anisotropic diffusion but the implementation in non-iterative. Another benefit to bilateral filtering is that any distance metric can be used for kernel smoothing the image range. Hence, color images can be smoothed as vector images, using the CIE distances between intensity values as the similarity metric (the Gaussian kernel for the image domain is evaluated using CIE distances). A separate version of this filter will be designed for color and vector images.\n\nBilateral filtering is capable of reducing the noise in an image by an order of magnitude while maintaining edges.\n\nThe bilateral operator used here was described by Tomasi and Manduchi (Bilateral Filtering for Gray and ColorImages. IEEE ICCV. 1998.)\n\n\\see GaussianOperator \n\n\\see RecursiveGaussianImageFilter \n\n\\see DiscreteGaussianImageFilter \n\n\\see AnisotropicDiffusionImageFilter \n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\nTodoSupport color images \n\nSupport vector images", + "detaileddescription" : "This filter uses bilateral filtering to blur an image using both domain and range \"neighborhoods\". Pixels that are close to a pixel in the image domain and similar to a pixel in the image range are used to calculate the filtered value. Two gaussian kernels (one in the image domain and one in the image range) are used to smooth the image. The result is an image that is smoothed in homogeneous regions yet has edges preserved. The result is similar to anisotropic diffusion but the implementation in non-iterative. Another benefit to bilateral filtering is that any distance metric can be used for kernel smoothing the image range. Hence, color images can be smoothed as vector images, using the CIE distances between intensity values as the similarity metric (the Gaussian kernel for the image domain is evaluated using CIE distances). A separate version of this filter will be designed for color and vector images.\n\nBilateral filtering is capable of reducing the noise in an image by an order of magnitude while maintaining edges.\n\nThe bilateral operator used here was described by Tomasi and Manduchi (Bilateral Filtering for Gray and ColorImages. IEEE ICCV. 1998.)\n\n\\see GaussianOperator \n\n\n\\see RecursiveGaussianImageFilter \n\n\n\\see DiscreteGaussianImageFilter \n\n\n\\see AnisotropicDiffusionImageFilter \n\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\nTodoSupport color images \n\nSupport vector images", "itk_module" : "ITKImageFeature", "itk_group" : "ImageFeature" } diff --git a/Code/BasicFilters/json/BinShrinkImageFilter.json b/Code/BasicFilters/json/BinShrinkImageFilter.json index e35f32cc9..125a1327b 100644 --- a/Code/BasicFilters/json/BinShrinkImageFilter.json +++ b/Code/BasicFilters/json/BinShrinkImageFilter.json @@ -47,7 +47,7 @@ } ], "briefdescription" : "Reduce the size of an image by an integer factor in each dimension while performing averaging of an input neighborhood.", - "detaileddescription" : "The output image size in each dimension is given by:\n\noutputSize[j] = max( std::floor(inputSize[j]/shrinkFactor[j]), 1 );\n\nThe algorithm implemented can be describe with the following equation for 2D: \\f[ \\mathsf{I}_{out}(x_o,x_1) = \\frac{\\sum_{i=0}^{f_0}\\sum_{j=0}^{f_1}\\mathsf{I}_{in}(f_0 x_o+i,f_1 x_1+j)}{f_0 f_1} \\f] \n\nThis filter is implemented so that the starting extent of the first pixel of the output matches that of the input.\n\nThe change in image geometry from a 5x5 image binned by a factor of 2x2.\n This code was contributed in the Insight Journal paper: \"BinShrink: A multi-resolution filter with cache efficient averaging\" by Lowekamp B., Chen D. https://hdl.handle.net/10380/3450", + "detaileddescription" : "The output image size in each dimension is given by:\n\noutputSize[j] = max( std::floor(inputSize[j]/shrinkFactor[j]), 1 );\n\nThe algorithm implemented can be describe with the following equation for 2D: \\f[ \\mathsf{I}_{out}(x_o,x_1) = \\frac{\\sum_{i=0}^{f_0}\\sum_{j=0}^{f_1}\\mathsf{I}_{in}(f_0 x_o+i,f_1 x_1+j)}{f_0 f_1} \\f] \n\nThis filter is implemented so that the starting extent of the first pixel of the output matches that of the input.\n\nThe change in image geometry from a 5x5 image binned by a factor of 2x2.\n\n\nThis code was contributed in the Insight Journal paper: \"BinShrink: A multi-resolution filter with cache efficient averaging\" by Lowekamp B., Chen D. https://hdl.handle.net/10380/3450", "itk_module" : "ITKImageGrid", "itk_group" : "ImageGrid" } diff --git a/Code/BasicFilters/json/BinaryClosingByReconstructionImageFilter.json b/Code/BasicFilters/json/BinaryClosingByReconstructionImageFilter.json index ff1c934d6..f8aa567fb 100644 --- a/Code/BasicFilters/json/BinaryClosingByReconstructionImageFilter.json +++ b/Code/BasicFilters/json/BinaryClosingByReconstructionImageFilter.json @@ -62,7 +62,7 @@ } ], "briefdescription" : "binary closing by reconstruction of an image.", - "detaileddescription" : "This filter removes small (i.e., smaller than the structuring element) holes in the image. It is defined as: Closing(f) = ReconstructionByErosion(Dilation(f)).\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see MorphologyImageFilter , ClosingByReconstructionImageFilter , BinaryOpeningByReconstructionImageFilter", + "detaileddescription" : "This filter removes small (i.e., smaller than the structuring element) holes in the image. It is defined as: Closing(f) = ReconstructionByErosion(Dilation(f)).\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see MorphologyImageFilter , ClosingByReconstructionImageFilter , BinaryOpeningByReconstructionImageFilter", "itk_module" : "ITKBinaryMathematicalMorphology", "itk_group" : "BinaryMathematicalMorphology" } diff --git a/Code/BasicFilters/json/BinaryContourImageFilter.json b/Code/BasicFilters/json/BinaryContourImageFilter.json index 5dab9478b..7b0f4c966 100644 --- a/Code/BasicFilters/json/BinaryContourImageFilter.json +++ b/Code/BasicFilters/json/BinaryContourImageFilter.json @@ -75,7 +75,7 @@ } ], "briefdescription" : "Labels the pixels on the border of the objects in a binary image.", - "detaileddescription" : "BinaryContourImageFilter takes a binary image as input, where the pixels in the objects are the pixels with a value equal to ForegroundValue. Only the pixels on the contours of the objects are kept. The pixels not on the border are changed to BackgroundValue.\n\nThe connectivity can be changed to minimum or maximum connectivity with SetFullyConnected() . Full connectivity produces thicker contours.\n\nhttps://hdl.handle.net/1926/1352 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see LabelContourImageFilter BinaryErodeImageFilter SimpleContourExtractorImageFilter", + "detaileddescription" : "BinaryContourImageFilter takes a binary image as input, where the pixels in the objects are the pixels with a value equal to ForegroundValue. Only the pixels on the contours of the objects are kept. The pixels not on the border are changed to BackgroundValue.\n\nThe connectivity can be changed to minimum or maximum connectivity with SetFullyConnected() . Full connectivity produces thicker contours.\n\nhttps://hdl.handle.net/1926/1352 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see LabelContourImageFilter BinaryErodeImageFilter SimpleContourExtractorImageFilter", "itk_module" : "ITKImageLabel", "itk_group" : "ImageLabel" } diff --git a/Code/BasicFilters/json/BinaryDilateImageFilter.json b/Code/BasicFilters/json/BinaryDilateImageFilter.json index 9088bccbc..4dd14c4de 100644 --- a/Code/BasicFilters/json/BinaryDilateImageFilter.json +++ b/Code/BasicFilters/json/BinaryDilateImageFilter.json @@ -94,8 +94,8 @@ ] } ], - "briefdescription" : "Fast binary dilation.", - "detaileddescription" : "BinaryDilateImageFilter is a binary dilation morphologic operation. This implementation is based on the papers:\n\nL.Vincent \"Morphological transformations of binary images with\narbitrary structuring elements\", and\n\nN.Nikopoulos et al. \"An efficient algorithm for 3d binary morphological transformations with 3d structuring elements for arbitrary size and shape\". IEEE Transactions on Image Processing. Vol. 9. No. 3. 2000. pp. 283-286.\n\nGray scale images can be processed as binary images by selecting a \"DilateValue\". Pixel values matching the dilate value are considered the \"foreground\" and all other pixels are \"background\". This is useful in processing segmented images where all pixels in segment #1 have value 1 and pixels in segment #2 have value 2, etc. A particular \"segment number\" can be processed. DilateValue defaults to the maximum possible value of the PixelType.\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel. A reasonable choice of structuring element is itk::BinaryBallStructuringElement .\n\n\\see ImageToImageFilter BinaryErodeImageFilter BinaryMorphologyImageFilter", + "briefdescription" : "Fast binary dilation of a single intensity value in the image.", + "detaileddescription" : "BinaryDilateImageFilter is a binary dilation morphologic operation on the foreground of an image. Only the value designated by the intensity value \"SetForegroundValue()\" (alias as SetDilateValue() ) is considered as foreground, and other intensity values are considered background.\n\nGray scale images can be processed as binary images by selecting a \"ForegroundValue\" (alias \"DilateValue\"). Pixel values matching the dilate value are considered the \"foreground\" and all other pixels are \"background\". This is useful in processing segmented images where all pixels in segment #1 have value 1 and pixels in segment #2 have value 2, etc. A particular \"segment number\" can be processed. ForegroundValue defaults to the maximum possible value of the PixelType.\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel. A reasonable choice of structuring element is itk::BinaryBallStructuringElement .\n\nThis implementation is based on the papers:\n\nL.Vincent \"Morphological transformations of binary images with\narbitrary structuring elements\", and\n\nN.Nikopoulos et al. \"An efficient algorithm for 3d binary morphological transformations with 3d structuring elements for arbitrary size and shape\". IEEE Transactions on Image Processing. Vol. 9. No. 3. 2000. pp. 283-286.\n\n\\see ImageToImageFilter BinaryErodeImageFilter BinaryMorphologyImageFilter", "itk_module" : "ITKBinaryMathematicalMorphology", "itk_group" : "BinaryMathematicalMorphology" } diff --git a/Code/BasicFilters/json/BinaryErodeImageFilter.json b/Code/BasicFilters/json/BinaryErodeImageFilter.json index 31aa26ef7..7dfe933fe 100644 --- a/Code/BasicFilters/json/BinaryErodeImageFilter.json +++ b/Code/BasicFilters/json/BinaryErodeImageFilter.json @@ -60,8 +60,8 @@ ] } ], - "briefdescription" : "Fast binary erosion.", - "detaileddescription" : "BinaryErodeImageFilter is a binary erosion morphologic operation. This implementation is based on the papers:\n\nL.Vincent \"Morphological transformations of binary images with\narbitrary structuring elements\", and\n\nN.Nikopoulos et al. \"An efficient algorithm for 3d binary morphological transformations with 3d structuring elements for arbitrary size and shape\". IEEE Transactions on Image Processing. Vol. 9. No. 3. 2000. pp. 283-286.\n\nGray scale images can be processed as binary images by selecting a \"ErodeValue\". Pixel values matching the erode value are considered the \"foreground\" and all other pixels are \"background\". This is useful in processing segmented images where all pixels in segment #1 have value 1 and pixels in segment #2 have value 2, etc. A particular \"segment number\" can be processed. ErodeValue defaults to the maximum possible value of the PixelType. The eroded pixels will receive the BackgroundValue (defaults to 0).\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel. A reasonable choice of structuring element is itk::BinaryBallStructuringElement .\n\n\\see ImageToImageFilter BinaryDilateImageFilter BinaryMorphologyImageFilter", + "briefdescription" : "Fast binary erosion of a single intensity value in the image.", + "detaileddescription" : "BinaryErodeImageFilter is a binary erosion morphologic operation on the foreground of an image. Only the value designated by the intensity value \"SetForegroundValue()\" (alias as SetErodeValue() ) is considered as foreground, and other intensity values are considered background.\n\nGray scale images can be processed as binary images by selecting a \"ForegroundValue\" (alias \"ErodeValue\"). Pixel values matching the erode value are considered the \"foreground\" and all other pixels are \"background\". This is useful in processing segmented images where all pixels in segment #1 have value 1 and pixels in segment #2 have value 2, etc. A particular \"segment number\" can be processed. ForegroundValue defaults to the maximum possible value of the PixelType. The eroded pixels will receive the BackgroundValue (defaults to NumericTraits::NonpositiveMin() ).\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel. A reasonable choice of structuring element is itk::BinaryBallStructuringElement .\n\nThis implementation is based on the papers:\n\nL.Vincent \"Morphological transformations of binary images with\narbitrary structuring elements\", and\n\nN.Nikopoulos et al. \"An efficient algorithm for 3d binary morphological transformations with 3d structuring elements for arbitrary size and shape\". IEEE Transactions on Image Processing. Vol. 9. No. 3. 2000. pp. 283-286.\n\n\\see ImageToImageFilter BinaryDilateImageFilter BinaryMorphologyImageFilter", "itk_module" : "ITKBinaryMathematicalMorphology", "itk_group" : "BinaryMathematicalMorphology" } diff --git a/Code/BasicFilters/json/BinaryFillholeImageFilter.json b/Code/BasicFilters/json/BinaryFillholeImageFilter.json index 85196abd3..d06e6ba96 100644 --- a/Code/BasicFilters/json/BinaryFillholeImageFilter.json +++ b/Code/BasicFilters/json/BinaryFillholeImageFilter.json @@ -66,7 +66,7 @@ } ], "briefdescription" : "Remove holes not connected to the boundary of the image.", - "detaileddescription" : "BinaryFillholeImageFilter fills holes in a binary image.\n\nGeodesic morphology and the Fillhole algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see GrayscaleFillholeImageFilter", + "detaileddescription" : "BinaryFillholeImageFilter fills holes in a binary image.\n\nGeodesic morphology and the Fillhole algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\n Principles and Applications\", Second Edition, Springer, 2003.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see GrayscaleFillholeImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/BinaryGrindPeakImageFilter.json b/Code/BasicFilters/json/BinaryGrindPeakImageFilter.json index e01f354a1..ffe1970e6 100644 --- a/Code/BasicFilters/json/BinaryGrindPeakImageFilter.json +++ b/Code/BasicFilters/json/BinaryGrindPeakImageFilter.json @@ -76,7 +76,7 @@ } ], "briefdescription" : "Remove the objects not connected to the boundary of the image.", - "detaileddescription" : "BinaryGrindPeakImageFilter ginds peaks in a grayscale image.\n\nGeodesic morphology and the grind peak algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see GrayscaleGrindPeakImageFilter", + "detaileddescription" : "BinaryGrindPeakImageFilter ginds peaks in a grayscale image.\n\nGeodesic morphology and the grind peak algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\n Principles and Applications\", Second Edition, Springer, 2003.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see GrayscaleGrindPeakImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/BinaryImageToLabelMapFilter.json b/Code/BasicFilters/json/BinaryImageToLabelMapFilter.json index ed2e6f203..2e3f2e884 100644 --- a/Code/BasicFilters/json/BinaryImageToLabelMapFilter.json +++ b/Code/BasicFilters/json/BinaryImageToLabelMapFilter.json @@ -95,7 +95,7 @@ } ], "briefdescription" : "Label the connected components in a binary image and produce a collection of label objects.", - "detaileddescription" : "BinaryImageToLabelMapFilter labels the objects in a binary image. Each distinct object is assigned a unique label. The final object labels start with 1 and are consecutive. Objects that are reached earlier by a raster order scan have a lower label.\n\nThe GetOutput() function of this class returns an itk::LabelMap .\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ConnectedComponentImageFilter , LabelImageToLabelMapFilter , LabelMap , LabelObject", + "detaileddescription" : "BinaryImageToLabelMapFilter labels the objects in a binary image. Each distinct object is assigned a unique label. The final object labels start with 1 and are consecutive. Objects that are reached earlier by a raster order scan have a lower label.\n\nThe GetOutput() function of this class returns an itk::LabelMap .\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ConnectedComponentImageFilter , LabelImageToLabelMapFilter , LabelMap , LabelObject", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/BinaryMagnitudeImageFilter.json b/Code/BasicFilters/json/BinaryMagnitudeImageFilter.json index 955c27552..ca7176fcb 100644 --- a/Code/BasicFilters/json/BinaryMagnitudeImageFilter.json +++ b/Code/BasicFilters/json/BinaryMagnitudeImageFilter.json @@ -31,7 +31,7 @@ } ], "briefdescription" : "Computes the square root of the sum of squares of corresponding input pixels.", - "detaileddescription" : "This filter is templated over the types of the two input images and the type of the output image.\n\nNumeric conversions (castings) are done by the C++ defaults.\n\nThe filter walks over all of the pixels in the two input images, and for each pixel does the following:\n\n\n\\li cast the input 1 pixel value to double \n\n\\li cast the input 2 pixel value to double \n\n\\li compute the sum of squares of the two pixel values \n\n\\li compute the square root of the sum \n\n\\li cast the double value resulting from std::sqrt() to the pixel type of the output image \n\n\\li store the cast value into the output image.\n\n\nThe filter expects all images to have the same dimension (e.g. all 2D, or all 3D, or all ND)", + "detaileddescription" : "This filter is templated over the types of the two input images and the type of the output image.\n\nNumeric conversions (castings) are done by the C++ defaults.\n\nThe filter walks over all of the pixels in the two input images, and for each pixel does the following:\n\n\n\n\\li cast the input 1 pixel value to double \n\n\n\\li cast the input 2 pixel value to double \n\n\n\\li compute the sum of squares of the two pixel values \n\n\n\\li compute the square root of the sum \n\n\n\\li cast the double value resulting from std::sqrt() to the pixel type of the output image \n\n\n\\li store the cast value into the output image.\n\n\n\nThe filter expects all images to have the same dimension (e.g. all 2D, or all 3D, or all ND)", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/BinaryMedianImageFilter.json b/Code/BasicFilters/json/BinaryMedianImageFilter.json index 8302f84d2..28b028483 100644 --- a/Code/BasicFilters/json/BinaryMedianImageFilter.json +++ b/Code/BasicFilters/json/BinaryMedianImageFilter.json @@ -62,7 +62,7 @@ } ], "briefdescription" : "Applies a version of the median filter optimized for binary images.", - "detaileddescription" : "This filter was contributed by Bjorn Hanch Sollie after identifying that the generic Median filter performed unnecessary operations when the input image is binary.\n\nThis filter computes an image where a given pixel is the median value of the pixels in a neighborhood about the corresponding input pixel. For the case of binary images the median can be obtained by simply counting the neighbors that are foreground.\n\nA median filter is one of the family of nonlinear filters. It is used to smooth an image without being biased by outliers or shot noise.\n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator", + "detaileddescription" : "This filter was contributed by Bjorn Hanch Sollie after identifying that the generic Median filter performed unnecessary operations when the input image is binary.\n\nThis filter computes an image where a given pixel is the median value of the pixels in a neighborhood about the corresponding input pixel. For the case of binary images the median can be obtained by simply counting the neighbors that are foreground.\n\nA median filter is one of the family of nonlinear filters. It is used to smooth an image without being biased by outliers or shot noise.\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator", "itk_module" : "ITKLabelVoting", "itk_group" : "LabelVoting" } diff --git a/Code/BasicFilters/json/BinaryMinMaxCurvatureFlowImageFilter.json b/Code/BasicFilters/json/BinaryMinMaxCurvatureFlowImageFilter.json index 1ec9cce3b..3e36d4a29 100644 --- a/Code/BasicFilters/json/BinaryMinMaxCurvatureFlowImageFilter.json +++ b/Code/BasicFilters/json/BinaryMinMaxCurvatureFlowImageFilter.json @@ -64,7 +64,7 @@ } ], "briefdescription" : "Denoise a binary image using min/max curvature flow.", - "detaileddescription" : "BinaryMinMaxCurvatureFlowImageFilter implements a curvature driven image denosing algorithm. This filter assumes that the image is essentially binary: consisting of two classes. Iso-brightness contours in the input image are viewed as a level set. The level set is then evolved using a curvature-based speed function:\n\n \\f[ I_t = F_{\\mbox{minmax}} |\\nabla I| \\f] \n\nwhere \\f$ F_{\\mbox{minmax}} = \\min(\\kappa,0) \\f$ if \\f$ \\mbox{Avg}_{\\mbox{stencil}}(x) \\f$ is less than or equal to \\f$ T_{thresold} \\f$ and \\f$ \\max(\\kappa,0) \\f$ , otherwise. \\f$ \\kappa \\f$ is the mean curvature of the iso-brightness contour at point \\f$ x \\f$ .\n\nIn min/max curvature flow, movement is turned on or off depending on the scale of the noise one wants to remove. Switching depends on the average image value of a region of radius \\f$ R \\f$ around each point. The choice of \\f$ R \\f$ , the stencil radius, governs the scale of the noise to be removed.\n\nThe threshold value \\f$ T_{threshold} \\f$ is a user specified value which discriminates between the two pixel classes.\n\nThis filter make use of the multi-threaded finite difference solver hierarchy. Updates are computed using a BinaryMinMaxCurvatureFlowFunction object. A zero flux Neumann boundary condition is used when computing derivatives near the data boundary.\n\n\\warning This filter assumes that the input and output types have the same dimensions. This filter also requires that the output image pixels are of a real type. This filter works for any dimensional images.\n\nReference: \"Level Set Methods and Fast Marching Methods\", J.A. Sethian, Cambridge Press, Chapter 16, Second edition, 1999.\n\n\\see BinaryMinMaxCurvatureFlowFunction \n\n\\see CurvatureFlowImageFilter \n\n\\see MinMaxCurvatureFlowImageFilter", + "detaileddescription" : "BinaryMinMaxCurvatureFlowImageFilter implements a curvature driven image denoising algorithm. This filter assumes that the image is essentially binary: consisting of two classes. Iso-brightness contours in the input image are viewed as a level set. The level set is then evolved using a curvature-based speed function:\n\n \\f[ I_t = F_{\\mbox{minmax}} |\\nabla I| \\f] \n\nwhere \\f$ F_{\\mbox{minmax}} = \\min(\\kappa,0) \\f$ if \\f$ \\mbox{Avg}_{\\mbox{stencil}}(x) \\f$ is less than or equal to \\f$ T_{threshold} \\f$ and \\f$ \\max(\\kappa,0) \\f$ , otherwise. \\f$ \\kappa \\f$ is the mean curvature of the iso-brightness contour at point \\f$ x \\f$ .\n\nIn min/max curvature flow, movement is turned on or off depending on the scale of the noise one wants to remove. Switching depends on the average image value of a region of radius \\f$ R \\f$ around each point. The choice of \\f$ R \\f$ , the stencil radius, governs the scale of the noise to be removed.\n\nThe threshold value \\f$ T_{threshold} \\f$ is a user specified value which discriminates between the two pixel classes.\n\nThis filter make use of the multi-threaded finite difference solver hierarchy. Updates are computed using a BinaryMinMaxCurvatureFlowFunction object. A zero flux Neumann boundary condition is used when computing derivatives near the data boundary.\n\n\\warning This filter assumes that the input and output types have the same dimensions. This filter also requires that the output image pixels are of a real type. This filter works for any dimensional images.\n\n\nReference: \"Level Set Methods and Fast Marching Methods\", J.A. Sethian, Cambridge Press, Chapter 16, Second edition, 1999.\n\n\\see BinaryMinMaxCurvatureFlowFunction \n\n\n\\see CurvatureFlowImageFilter \n\n\n\\see MinMaxCurvatureFlowImageFilter", "itk_module" : "ITKCurvatureFlow", "itk_group" : "CurvatureFlow" } diff --git a/Code/BasicFilters/json/BinaryMorphologicalClosingImageFilter.json b/Code/BasicFilters/json/BinaryMorphologicalClosingImageFilter.json index b3026bd4b..a31819a2b 100644 --- a/Code/BasicFilters/json/BinaryMorphologicalClosingImageFilter.json +++ b/Code/BasicFilters/json/BinaryMorphologicalClosingImageFilter.json @@ -93,7 +93,7 @@ } ], "briefdescription" : "binary morphological closing of an image.", - "detaileddescription" : "This filter removes small (i.e., smaller than the structuring element) holes and tube like structures in the interior or at the boundaries of the image. The morphological closing of an image \"f\" is defined as: Closing(f) = Erosion(Dilation(f)).\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.\n\nThis code was contributed in the Insight Journal paper: \"Binary morphological closing and opening image filters\" by Lehmann G. https://hdl.handle.net/1926/141 http://www.insight-journal.org/browse/publication/58 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleErodeImageFilter", + "detaileddescription" : "This filter removes small (i.e., smaller than the structuring element) holes and tube like structures in the interior or at the boundaries of the image. The morphological closing of an image \"f\" is defined as: Closing(f) = Erosion(Dilation(f)).\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.\n\nThis code was contributed in the Insight Journal paper: \"Binary morphological closing and opening image filters\" by Lehmann G. https://hdl.handle.net/1926/141 http://www.insight-journal.org/browse/publication/58 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleErodeImageFilter", "itk_module" : "ITKBinaryMathematicalMorphology", "itk_group" : "BinaryMathematicalMorphology" } diff --git a/Code/BasicFilters/json/BinaryMorphologicalOpeningImageFilter.json b/Code/BasicFilters/json/BinaryMorphologicalOpeningImageFilter.json index ff8acc415..32dd8ed2c 100644 --- a/Code/BasicFilters/json/BinaryMorphologicalOpeningImageFilter.json +++ b/Code/BasicFilters/json/BinaryMorphologicalOpeningImageFilter.json @@ -61,7 +61,7 @@ } ], "briefdescription" : "binary morphological opening of an image.", - "detaileddescription" : "This filter removes small (i.e., smaller than the structuring element) structures in the interior or at the boundaries of the image. The morphological opening of an image \"f\" is defined as: Opening(f) = Dilatation(Erosion(f)).\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.\n\nThis code was contributed in the Insight Journal paper: \"Binary morphological closing and opening image filters\" by Lehmann G. https://hdl.handle.net/1926/141 http://www.insight-journal.org/browse/publication/58 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleErodeImageFilter", + "detaileddescription" : "This filter removes small (i.e., smaller than the structuring element) structures in the interior or at the boundaries of the image. The morphological opening of an image \"f\" is defined as: Opening(f) = Dilatation(Erosion(f)).\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.\n\nThis code was contributed in the Insight Journal paper: \"Binary morphological closing and opening image filters\" by Lehmann G. https://hdl.handle.net/1926/141 http://www.insight-journal.org/browse/publication/58 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleErodeImageFilter", "itk_module" : "ITKBinaryMathematicalMorphology", "itk_group" : "BinaryMathematicalMorphology" } diff --git a/Code/BasicFilters/json/BinaryNotImageFilter.json b/Code/BasicFilters/json/BinaryNotImageFilter.json index 80197a1d6..1477d40bd 100644 --- a/Code/BasicFilters/json/BinaryNotImageFilter.json +++ b/Code/BasicFilters/json/BinaryNotImageFilter.json @@ -54,7 +54,7 @@ } ], "briefdescription" : "Implements the BinaryNot logical operator pixel-wise between two images.", - "detaileddescription" : "This class is parametrized over the types of the two input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe total operation over one pixel will be\n\noutput_pixel = static_cast( input1_pixel != input2_pixel )\n\nWhere \"!=\" is the equality operator in C++.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176", + "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe total operation over one pixel will be\n\noutput_pixel = static_cast( input1_pixel != input2_pixel )\n\nWhere \"!=\" is the equality operator in C++.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/BinaryOpeningByReconstructionImageFilter.json b/Code/BasicFilters/json/BinaryOpeningByReconstructionImageFilter.json index d97c2032a..940d723fa 100644 --- a/Code/BasicFilters/json/BinaryOpeningByReconstructionImageFilter.json +++ b/Code/BasicFilters/json/BinaryOpeningByReconstructionImageFilter.json @@ -72,7 +72,7 @@ } ], "briefdescription" : "binary morphological closing of an image.", - "detaileddescription" : "This filter removes small (i.e., smaller than the structuring element) objects in the image. It is defined as: Opening(f) = ReconstructionByDilatation(Erosion(f)).\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see MorphologyImageFilter , OpeningByReconstructionImageFilter , BinaryClosingByReconstructionImageFilter", + "detaileddescription" : "This filter removes small (i.e., smaller than the structuring element) objects in the image. It is defined as: Opening(f) = ReconstructionByDilatation(Erosion(f)).\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see MorphologyImageFilter , OpeningByReconstructionImageFilter , BinaryClosingByReconstructionImageFilter", "itk_module" : "ITKBinaryMathematicalMorphology", "itk_group" : "BinaryMathematicalMorphology" } diff --git a/Code/BasicFilters/json/BinaryProjectionImageFilter.json b/Code/BasicFilters/json/BinaryProjectionImageFilter.json index ce6abe47d..42feabaa4 100644 --- a/Code/BasicFilters/json/BinaryProjectionImageFilter.json +++ b/Code/BasicFilters/json/BinaryProjectionImageFilter.json @@ -62,7 +62,7 @@ } ], "briefdescription" : "Binary projection.", - "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ProjectionImageFilter \n\n\\see MedianProjectionImageFilter \n\n\\see MeanProjectionImageFilter \n\n\\see MeanProjectionImageFilter \n\n\\see MaximumProjectionImageFilter \n\n\\see MinimumProjectionImageFilter \n\n\\see StandardDeviationProjectionImageFilter \n\n\\see SumProjectionImageFilter", + "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ProjectionImageFilter \n\n\n\\see MedianProjectionImageFilter \n\n\n\\see MeanProjectionImageFilter \n\n\n\\see MeanProjectionImageFilter \n\n\n\\see MaximumProjectionImageFilter \n\n\n\\see MinimumProjectionImageFilter \n\n\n\\see StandardDeviationProjectionImageFilter \n\n\n\\see SumProjectionImageFilter", "itk_module" : "ITKImageStatistics", "itk_group" : "ImageStatistics" } diff --git a/Code/BasicFilters/json/BinaryPruningImageFilter.json b/Code/BasicFilters/json/BinaryPruningImageFilter.json index 3334c85e2..91bee3113 100644 --- a/Code/BasicFilters/json/BinaryPruningImageFilter.json +++ b/Code/BasicFilters/json/BinaryPruningImageFilter.json @@ -44,7 +44,7 @@ } ], "briefdescription" : "This filter removes \"spurs\" of less than a certain length in the input image.", - "detaileddescription" : "This class is parametrized over the type of the input image and the type of the output image.\n\nThe input is assumed to be a binary image.\n\nThis filter is a sequential pruning algorithm and known to be computational time dependable of the image size. The algorithm is the N-dimensional version of that given for two dimensions in:\n\nRafael C. Gonzales and Richard E. Woods. Digital Image Processing. Addison Wesley, 491-494, (1993).\n\n\\see MorphologyImageFilter \n\n\n\\see BinaryErodeImageFilter \n\n\n\\see BinaryDilateImageFilter \n\n\n\\see BinaryThinningImageFilter \n\n\n\\par ITK Sphinx Examples:\n\n\n\n\\par \\li All ITK Sphinx Examples\n\n\n\n\n\\li Prune Binary Image", + "detaileddescription" : "This class is parameterized over the type of the input image and the type of the output image.\n\nThe input is assumed to be a binary image.\n\nThis filter is a sequential pruning algorithm and known to be computational time dependable of the image size. The algorithm is the N-dimensional version of that given for two dimensions in:\n\nRafael C. Gonzales and Richard E. Woods. Digital Image Processing. Addison Wesley, 491-494, (1993).\n\n\\see MorphologyImageFilter \n\n\n\\see BinaryErodeImageFilter \n\n\n\\see BinaryDilateImageFilter \n\n\n\\see BinaryThinningImageFilter", "itk_module" : "ITKBinaryMathematicalMorphology", "itk_group" : "BinaryMathematicalMorphology" } diff --git a/Code/BasicFilters/json/BinaryReconstructionByDilationImageFilter.json b/Code/BasicFilters/json/BinaryReconstructionByDilationImageFilter.json index 28edd1b21..5e4513e3b 100644 --- a/Code/BasicFilters/json/BinaryReconstructionByDilationImageFilter.json +++ b/Code/BasicFilters/json/BinaryReconstructionByDilationImageFilter.json @@ -58,7 +58,7 @@ } ], "briefdescription" : "binary reconstruction by dilation of an image", - "detaileddescription" : "Reconstruction by dilation operates on a \"marker\" image and a \"mask\" image, and is defined as the dilation of the marker image with respect to the mask image iterated until stability.\n\nGeodesic morphology is described in Chapter 6.2 of Pierre Soille's book \"Morphological Image Analysis: Principles and Applications\", Second Edition, Springer, 2003.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see MorphologyImageFilter , ReconstructionByDilationImageFilter , BinaryReconstructionByErosionImageFilter", + "detaileddescription" : "Reconstruction by dilation operates on a \"marker\" image and a \"mask\" image, and is defined as the dilation of the marker image with respect to the mask image iterated until stability.\n\nGeodesic morphology is described in Chapter 6.2 of Pierre Soille's book \"Morphological Image Analysis: Principles and Applications\", Second Edition, Springer, 2003.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see MorphologyImageFilter , ReconstructionByDilationImageFilter , BinaryReconstructionByErosionImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/BinaryReconstructionByErosionImageFilter.json b/Code/BasicFilters/json/BinaryReconstructionByErosionImageFilter.json index ae0907dd0..118cc42bd 100644 --- a/Code/BasicFilters/json/BinaryReconstructionByErosionImageFilter.json +++ b/Code/BasicFilters/json/BinaryReconstructionByErosionImageFilter.json @@ -58,7 +58,7 @@ } ], "briefdescription" : "binary reconstruction by erosion of an image", - "detaileddescription" : "Reconstruction by erosion operates on a \"marker\" image and a \"mask\" image, and is defined as the erosion of the marker image with respect to the mask image iterated until stability.\n\nGeodesic morphology is described in Chapter 6.2 of Pierre Soille's book \"Morphological Image Analysis: Principles and Applications\", Second Edition, Springer, 2003.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see MorphologyImageFilter , ReconstructionByErosionImageFilter , BinaryReconstructionByDilationImageFilter", + "detaileddescription" : "Reconstruction by erosion operates on a \"marker\" image and a \"mask\" image, and is defined as the erosion of the marker image with respect to the mask image iterated until stability.\n\nGeodesic morphology is described in Chapter 6.2 of Pierre Soille's book \"Morphological Image Analysis: Principles and Applications\", Second Edition, Springer, 2003.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see MorphologyImageFilter , ReconstructionByErosionImageFilter , BinaryReconstructionByDilationImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/BinaryThinningImageFilter.json b/Code/BasicFilters/json/BinaryThinningImageFilter.json index 4cc37b814..4097f9095 100644 --- a/Code/BasicFilters/json/BinaryThinningImageFilter.json +++ b/Code/BasicFilters/json/BinaryThinningImageFilter.json @@ -19,7 +19,7 @@ } ], "briefdescription" : "This filter computes one-pixel-wide edges of the input image.", - "detaileddescription" : "This class is parametrized over the type of the input image and the type of the output image.\n\nThe input is assumed to be a binary image. If the foreground pixels of the input image do not have a value of 1, they are rescaled to 1 internally to simplify the computation.\n\nThe filter will produce a skeleton of the object. The output background values are 0, and the foreground values are 1.\n\nThis filter is a sequential thinning algorithm and known to be computational time dependable on the image size. The algorithm corresponds with the 2D implementation described in:\n\nRafael C. Gonzales and Richard E. Woods. Digital Image Processing. Addison Wesley, 491-494, (1993).\n\nTo do: Make this filter ND.\n\n\\see MorphologyImageFilter", + "detaileddescription" : "This class is parameterized over the type of the input image and the type of the output image.\n\nThe input is assumed to be a binary image. If the foreground pixels of the input image do not have a value of 1, they are rescaled to 1 internally to simplify the computation.\n\nThe filter will produce a skeleton of the object. The output background values are 0, and the foreground values are 1.\n\nThis filter is a sequential thinning algorithm and known to be computational time dependable on the image size. The algorithm corresponds with the 2D implementation described in:\n\nRafael C. Gonzales and Richard E. Woods. Digital Image Processing. Addison Wesley, 491-494, (1993).\n\nTo do: Make this filter ND.\n\n\\see MorphologyImageFilter", "itk_module" : "ITKBinaryMathematicalMorphology", "itk_group" : "BinaryMathematicalMorphology" } diff --git a/Code/BasicFilters/json/BinaryThresholdImageFilter.json b/Code/BasicFilters/json/BinaryThresholdImageFilter.json index 183d79c85..ada3acd19 100644 --- a/Code/BasicFilters/json/BinaryThresholdImageFilter.json +++ b/Code/BasicFilters/json/BinaryThresholdImageFilter.json @@ -23,7 +23,7 @@ "default" : "255.0", "pixeltype" : "Input", "briefdescriptionSet" : "", - "detaileddescriptionSet" : "Set the thresholds. The default lower threshold is NumericTraits::NonpositiveMin() . The default upper threshold is NumericTraits::max . An execption is thrown if the lower threshold is greater than the upper threshold.", + "detaileddescriptionSet" : "Set the thresholds. The default lower threshold is NumericTraits::NonpositiveMin() . The default upper threshold is NumericTraits::max . An exception is thrown if the lower threshold is greater than the upper threshold.", "briefdescriptionGet" : "", "detaileddescriptionGet" : "Get the threshold values." }, diff --git a/Code/BasicFilters/json/BinaryThresholdProjectionImageFilter.json b/Code/BasicFilters/json/BinaryThresholdProjectionImageFilter.json index f2ed057c6..3921206f1 100644 --- a/Code/BasicFilters/json/BinaryThresholdProjectionImageFilter.json +++ b/Code/BasicFilters/json/BinaryThresholdProjectionImageFilter.json @@ -77,7 +77,7 @@ } ], "briefdescription" : "BinaryThreshold projection.", - "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. the original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ProjectionImageFilter \n\n\\see MedianProjectionImageFilter \n\n\\see MeanProjectionImageFilter \n\n\\see MeanProjectionImageFilter \n\n\\see MaximumProjectionImageFilter \n\n\\see MinimumProjectionImageFilter \n\n\\see StandardDeviationProjectionImageFilter \n\n\\see SumProjectionImageFilter", + "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. the original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ProjectionImageFilter \n\n\n\\see MedianProjectionImageFilter \n\n\n\\see MeanProjectionImageFilter \n\n\n\\see MeanProjectionImageFilter \n\n\n\\see MaximumProjectionImageFilter \n\n\n\\see MinimumProjectionImageFilter \n\n\n\\see StandardDeviationProjectionImageFilter \n\n\n\\see SumProjectionImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/BinomialBlurImageFilter.json b/Code/BasicFilters/json/BinomialBlurImageFilter.json index b94ca1e59..1662df5e8 100644 --- a/Code/BasicFilters/json/BinomialBlurImageFilter.json +++ b/Code/BasicFilters/json/BinomialBlurImageFilter.json @@ -30,7 +30,7 @@ } ], "briefdescription" : "Performs a separable blur on each dimension of an image.", - "detaileddescription" : "The binomial blur consists of a nearest neighbor average along each image dimension. The net result after n-iterations approaches convultion with a gaussian.", + "detaileddescription" : "The binomial blur consists of a nearest neighbor average along each image dimension. The net result after n-iterations approaches convolution with a gaussian.", "itk_module" : "ITKSmoothing", "itk_group" : "Smoothing" } diff --git a/Code/BasicFilters/json/BitwiseNotImageFilter.json b/Code/BasicFilters/json/BitwiseNotImageFilter.json index f838358d4..4da1899e3 100644 --- a/Code/BasicFilters/json/BitwiseNotImageFilter.json +++ b/Code/BasicFilters/json/BitwiseNotImageFilter.json @@ -23,7 +23,7 @@ } ], "briefdescription" : "Implements pixel-wise generic operation on one image.", - "detaileddescription" : "This class is parameterized over the type of the input image and the type of the output image. It is also parameterized by the operation to be applied, using a Functor style.\n\nUnaryFunctorImageFilter allows the output dimension of the filter to be larger than the input dimension. Thus subclasses of the UnaryFunctorImageFilter (like the CastImageFilter ) can be used to promote a 2D image to a 3D image, etc.\n\n\\see BinaryFunctorImageFilter TernaryFunctorImageFilter", + "detaileddescription" : "This class is parameterized over the type of the input image and the type of the output image. It is also parameterized by the operation to be applied, using a Functor style.\n\nUnaryFunctorImageFilter allows the output dimension of the filter to be larger than the input dimension. Thus subclasses of the UnaryFunctorImageFilter (like the CastImageFilter ) can be used to promote a 2D image to a 3D image, etc.\n\n\\see UnaryGeneratorImageFilter \n\n\n\\see BinaryFunctorImageFilter TernaryFunctorImageFilter", "itk_module" : "ITKCommon", "itk_group" : "Common" } diff --git a/Code/BasicFilters/json/CannyEdgeDetectionImageFilter.json b/Code/BasicFilters/json/CannyEdgeDetectionImageFilter.json index c8165d7be..cf89a6327 100644 --- a/Code/BasicFilters/json/CannyEdgeDetectionImageFilter.json +++ b/Code/BasicFilters/json/CannyEdgeDetectionImageFilter.json @@ -95,7 +95,7 @@ } ], "briefdescription" : "This filter is an implementation of a Canny edge detector for scalar-valued images.", - "detaileddescription" : "Based on John Canny's paper \"A Computational Approach\nto Edge Detection\"(IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. PAMI-8, No.6, November 1986), there are four major steps used in the edge-detection scheme: (1) Smooth the input image with Gaussian filter. (2) Calculate the second directional derivatives of the smoothed image. (3) Non-Maximum Suppression: the zero-crossings of 2nd derivative are found, and the sign of third derivative is used to find the correct extrema. (4) The hysteresis thresholding is applied to the gradient magnitude (multiplied with zero-crossings) of the smoothed image to find and link edges.\n\n\\par Inputs and Outputs\nThe input to this filter should be a scalar, real-valued Itk image of arbitrary dimension. The output should also be a scalar, real-value Itk image of the same dimensionality.\n\n\\par Parameters\nThere are four parameters for this filter that control the sub-filters used by the algorithm.\n\n\\par \nVariance and Maximum error are used in the Gaussian smoothing of the input image. See itkDiscreteGaussianImageFilter for information on these parameters.\n\n\\par \nThreshold is the lowest allowed value in the output image. Its data type is the same as the data type of the output image. Any values below the Threshold level will be replaced with the OutsideValue parameter value, whose default is zero.\n\nTodoEdge-linking will be added when an itk connected component labeling algorithm is available.\n\n\n\\see DiscreteGaussianImageFilter \n\n\\see ZeroCrossingImageFilter \n\n\\see ThresholdImageFilter", + "detaileddescription" : "Based on John Canny's paper \"A Computational Approach\n to Edge Detection\"(IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. PAMI-8, No.6, November 1986), there are four major steps used in the edge-detection scheme: (1) Smooth the input image with Gaussian filter. (2) Calculate the second directional derivatives of the smoothed image. (3) Non-Maximum Suppression: the zero-crossings of 2nd derivative are found, and the sign of third derivative is used to find the correct extrema. (4) The hysteresis thresholding is applied to the gradient magnitude (multiplied with zero-crossings) of the smoothed image to find and link edges.\n\n\\par Inputs and Outputs\nThe input to this filter should be a scalar, real-valued Itk image of arbitrary dimension. The output should also be a scalar, real-value Itk image of the same dimensionality.\n\n\n\\par Parameters\nThere are four parameters for this filter that control the sub-filters used by the algorithm.\n\n\n\\par \nVariance and Maximum error are used in the Gaussian smoothing of the input image. See itkDiscreteGaussianImageFilter for information on these parameters.\n\n\n\\par \nThreshold is the lowest allowed value in the output image. Its data type is the same as the data type of the output image. Any values below the Threshold level will be replaced with the OutsideValue parameter value, whose default is zero.\n\n\nTodoEdge-linking will be added when an itk connected component labeling algorithm is available.\n\n\n\n\\see DiscreteGaussianImageFilter \n\n\n\\see ZeroCrossingImageFilter \n\n\n\\see ThresholdImageFilter", "itk_module" : "ITKImageFeature", "itk_group" : "ImageFeature" } diff --git a/Code/BasicFilters/json/CannySegmentationLevelSetImageFilter.json b/Code/BasicFilters/json/CannySegmentationLevelSetImageFilter.json index d8791cb2e..b1bc9c7ee 100644 --- a/Code/BasicFilters/json/CannySegmentationLevelSetImageFilter.json +++ b/Code/BasicFilters/json/CannySegmentationLevelSetImageFilter.json @@ -146,7 +146,7 @@ } ], "briefdescription" : "Segments structures in images based on image features derived from pseudo-canny-edges.", - "detaileddescription" : "\\par IMPORTANT\nThe SegmentationLevelSetImageFilter class and the CannySegmentationLevelSetFunction class contain additional information necessary to the full understanding of how to use this filter.\n\n\\par OVERVIEW\nThis class is a level set method segmentation filter. It constructs a speed function which is designed to lock onto edges as detected by a Canny filter.\n\n\\par \nThe CannySegmentationLevelSetImageFilter can be a tool for refining an existing segmentation, or it can be used to try to segment a region by itself. Like all other level-set based segmentation filters (see SegmentationLevelSetImageFilter ), it works by first constructing a scalar speed term and a vector advection field based on edge features in the image. The level set front is then moved according to these two terms with the addition of a third curvature term to contol the smoothness of the solution.\n\n\\par \nThe speed term is constructed as the Danielsson distance transform of the Canny edge image, as calculated by the CannyEdgeDetectionImageFilter . This scalar speed can be tuned in and out of the final evolution equation by setting the PropagationScaling parameter (a value of 0 removes the speed term).\n\n\\par \nThe advection field term is constructed by minimizing Danielsson distance squared. i.e. \\f$ \\mbox{min} \\int D^2 \\Rightarrow D \\nabla D \\f$ . This term moves the level set down the gradient of the distance transform.\n\n\\par \nIn practice, you may set the speed (propagation) term to zero if your initialization is already close to the edge you are interested in. If you are trying to segment a region by seeding with a small surface (blob, sphere) then you will likely want to add speed (propagation) to the equation so that the levelsets can expand along zero gradients. The relative influence of these two terms are controlled by the SetPropagationScaling and SetAdvectionScaling parameters.\n\n\\par INPUTS\nThis filter requires two inputs. The first input is a seed image. This seed image must contain an isosurface that you want to use as the seed for your segmentation. It can be a binary, graylevel, or floating point image. The only requirement is that it contain a closed isosurface that you will identify as the seed by setting the IsosurfaceValue parameter of the filter. For a binary image you will want to set your isosurface value halfway between your on and off values (i.e. for 0's and 1's, use an isosurface value of 0.5).\n\n\\par \nThe second input is the feature image. This is the image from which the speed function will be calculated. For most applications, this is the image that you want to segment. The desired isosurface in your seed image should lie within the region of your feature image that you are trying to segment.\n\n\\par \nSee SegmentationLevelSetImageFilter for more information on Inputs.\n\n\\par OUTPUTS\nThe filter outputs a single, scalar, real-valued image. Positive *values in the output image are inside the segmentated region and negative *values in the image are outside of the inside region. The zero crossings of *the image correspond to the position of the level set front.\n\n\\par \nSee SparseFieldLevelSetImageFilter and SegmentationLevelSetImageFilter for more information.\n\n\\par PARAMETERS\nThere are five parameters important for controlling the behavior of this filter. \n\n\\par \n(1) Threshold. Sets the thresholding value of the Canny edge detection. See CannyEdgeDetectionImageFilter for more information. \n\n\\par \n(2) Variance. Controls the smoothing parameter of the gaussian filtering done during Canny edge detection. \n\n\\par \n(3) CurvatureScaling. Controls the degree to which curvature influences the evolution of the level set. Higher values relative to Propagation and Advection scalings will yield a smoother surface. \n\n\\par \n(4) PropagationScaling. Scales the propagation (speed) term of the level set equation. Set this term to zero to allow the level set to flow only down the gradient of the distance transform. \n\n\\par \n(5) AdvectionScaling. Scales influence of the advection field relative to curvature and propagation terms.\n\n\\see SegmentationLevelSetImageFilter \n\n\\see CannySegmentationLevelSetFunction , \n\n\\see SparseFieldLevelSetImageFilter", + "detaileddescription" : "\\par IMPORTANT\nThe SegmentationLevelSetImageFilter class and the CannySegmentationLevelSetFunction class contain additional information necessary to the full understanding of how to use this filter.\n\n\n\\par OVERVIEW\nThis class is a level set method segmentation filter. It constructs a speed function which is designed to lock onto edges as detected by a Canny filter.\n\n\n\\par \nThe CannySegmentationLevelSetImageFilter can be a tool for refining an existing segmentation, or it can be used to try to segment a region by itself. Like all other level-set based segmentation filters (see SegmentationLevelSetImageFilter ), it works by first constructing a scalar speed term and a vector advection field based on edge features in the image. The level set front is then moved according to these two terms with the addition of a third curvature term to contol the smoothness of the solution.\n\n\n\\par \nThe speed term is constructed as the Danielsson distance transform of the Canny edge image, as calculated by the CannyEdgeDetectionImageFilter . This scalar speed can be tuned in and out of the final evolution equation by setting the PropagationScaling parameter (a value of 0 removes the speed term).\n\n\n\\par \nThe advection field term is constructed by minimizing Danielsson distance squared. i.e. \\f$ \\mbox{min} \\int D^2 \\Rightarrow D \\nabla D \\f$ . This term moves the level set down the gradient of the distance transform.\n\n\n\\par \nIn practice, you may set the speed (propagation) term to zero if your initialization is already close to the edge you are interested in. If you are trying to segment a region by seeding with a small surface (blob, sphere) then you will likely want to add speed (propagation) to the equation so that the levelsets can expand along zero gradients. The relative influence of these two terms are controlled by the SetPropagationScaling and SetAdvectionScaling parameters.\n\n\n\\par INPUTS\nThis filter requires two inputs. The first input is a seed image. This seed image must contain an isosurface that you want to use as the seed for your segmentation. It can be a binary, graylevel, or floating point image. The only requirement is that it contain a closed isosurface that you will identify as the seed by setting the IsosurfaceValue parameter of the filter. For a binary image you will want to set your isosurface value halfway between your on and off values (i.e. for 0's and 1's, use an isosurface value of 0.5).\n\n\n\\par \nThe second input is the feature image. This is the image from which the speed function will be calculated. For most applications, this is the image that you want to segment. The desired isosurface in your seed image should lie within the region of your feature image that you are trying to segment.\n\n\n\\par \nSee SegmentationLevelSetImageFilter for more information on Inputs.\n\n\n\\par OUTPUTS\nThe filter outputs a single, scalar, real-valued image. Positive *values in the output image are inside the segmented region and negative *values in the image are outside of the inside region. The zero crossings of *the image correspond to the position of the level set front.\n\n\n\\par \nSee SparseFieldLevelSetImageFilter and SegmentationLevelSetImageFilter for more information.\n\n\n\\par PARAMETERS\nThere are five parameters important for controlling the behavior of this filter. \n\n\n\\par \n(1) Threshold. Sets the thresholding value of the Canny edge detection. See CannyEdgeDetectionImageFilter for more information. \n\n\n\\par \n(2) Variance. Controls the smoothing parameter of the gaussian filtering done during Canny edge detection. \n\n\n\\par \n(3) CurvatureScaling. Controls the degree to which curvature influences the evolution of the level set. Higher values relative to Propagation and Advection scalings will yield a smoother surface. \n\n\n\\par \n(4) PropagationScaling. Scales the propagation (speed) term of the level set equation. Set this term to zero to allow the level set to flow only down the gradient of the distance transform. \n\n\n\\par \n(5) AdvectionScaling. Scales influence of the advection field relative to curvature and propagation terms.\n\n\n\\see SegmentationLevelSetImageFilter \n\n\n\\see CannySegmentationLevelSetFunction , \n\n\n\\see SparseFieldLevelSetImageFilter", "itk_module" : "ITKLevelSets", "itk_group" : "LevelSets" } diff --git a/Code/BasicFilters/json/ChangeLabelImageFilter.json b/Code/BasicFilters/json/ChangeLabelImageFilter.json index f20a1faff..07e1a67bc 100644 --- a/Code/BasicFilters/json/ChangeLabelImageFilter.json +++ b/Code/BasicFilters/json/ChangeLabelImageFilter.json @@ -28,7 +28,7 @@ } ], "briefdescription" : "Change Sets of Labels.", - "detaileddescription" : "This filter produces an output image whose pixels are either copied from the input if they are not being changed or are rewritten based on the change parameters\n\nThis filter is templated over the input image type and the output image type.\n\nThe filter expect both images to have the same number of dimensions.\n\n\\author Tim Kelliher. GE Research, Niskayuna, NY. \n\n\\note This work was supported by a grant from DARPA, executed by the U.S. Army Medical Research and Materiel Command/TATRC Assistance Agreement, Contract::W81XWH-05-2-0059.", + "detaileddescription" : "This filter produces an output image whose pixels are either copied from the input if they are not being changed or are rewritten based on the change parameters\n\nThis filter is templated over the input image type and the output image type.\n\nThe filter expect both images to have the same number of dimensions.\n\n\\author Tim Kelliher. GE Research, Niskayuna, NY. \n\n\n\\note This work was supported by a grant from DARPA, executed by the U.S. Army Medical Research and Materiel Command/TATRC Assistance Agreement, Contract::W81XWH-05-2-0059.", "itk_module" : "ITKImageLabel", "itk_group" : "ImageLabel" } diff --git a/Code/BasicFilters/json/ChangeLabelLabelMapFilter.json b/Code/BasicFilters/json/ChangeLabelLabelMapFilter.json index 753213b91..a5ab0c0e3 100644 --- a/Code/BasicFilters/json/ChangeLabelLabelMapFilter.json +++ b/Code/BasicFilters/json/ChangeLabelLabelMapFilter.json @@ -33,7 +33,7 @@ } ], "briefdescription" : "Replace the label Ids of selected LabelObjects with new label Ids.", - "detaileddescription" : "This filter takes as input a label map and a list of pairs of Label Ids, to produce as output a new label map where the label Ids have been replaced according to the pairs in the list.\n\nLabels that are relabeled to the same label Id are automatically merged and optimized into a single LabelObject . The background label can also be changed. Any object relabeled to the output background will automatically be removed.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ShapeLabelObject , RelabelComponentImageFilter , ChangeLabelImageFilter", + "detaileddescription" : "This filter takes as input a label map and a list of pairs of Label Ids, to produce as output a new label map where the label Ids have been replaced according to the pairs in the list.\n\nLabels that are relabeled to the same label Id are automatically merged and optimized into a single LabelObject . The background label can also be changed. Any object relabeled to the output background will automatically be removed.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ShapeLabelObject , RelabelComponentImageFilter , ChangeLabelImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/CheckerBoardImageFilter.json b/Code/BasicFilters/json/CheckerBoardImageFilter.json index 2bf9a3a23..8ce175b80 100644 --- a/Code/BasicFilters/json/CheckerBoardImageFilter.json +++ b/Code/BasicFilters/json/CheckerBoardImageFilter.json @@ -53,7 +53,7 @@ } ], "briefdescription" : "Combines two images in a checkerboard pattern.", - "detaileddescription" : "CheckerBoardImageFilter takes two input images that must have the same dimension, size, origin and spacing and produces an output image of the same size by combinining the pixels from the two input images in a checkerboard pattern. This filter is commonly used for visually comparing two images, in particular for evaluating the results of an image registration process.\n\nThis filter is implemented as a multithreaded filter. It provides a ThreadedGenerateData() method for its implementation.", + "detaileddescription" : "CheckerBoardImageFilter takes two input images that must have the same dimension, size, origin and spacing and produces an output image of the same size by combining the pixels from the two input images in a checkerboard pattern. This filter is commonly used for visually comparing two images, in particular for evaluating the results of an image registration process.\n\nThis filter is implemented as a multithreaded filter. It provides a DynamicThreadedGenerateData() method for its implementation.", "itk_module" : "ITKImageCompare", "itk_group" : "ImageCompare" } diff --git a/Code/BasicFilters/json/ClampImageFilter.json b/Code/BasicFilters/json/ClampImageFilter.json index 1fc2f04c9..40cded0c7 100644 --- a/Code/BasicFilters/json/ClampImageFilter.json +++ b/Code/BasicFilters/json/ClampImageFilter.json @@ -135,7 +135,7 @@ } ], "briefdescription" : "Casts input pixels to output pixel type and clamps the output pixel values to a specified range.", - "detaileddescription" : "Default range corresponds to the range supported by the pixel type of the output image.\n\nThis filter is templated over the input image type and the output image type.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see UnaryFunctorImageFilter \n\n\\see CastImageFilter", + "detaileddescription" : "Default range corresponds to the range supported by the pixel type of the output image.\n\nThis filter is templated over the input image type and the output image type.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see UnaryFunctorImageFilter \n\n\n\\see CastImageFilter", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/ClosingByReconstructionImageFilter.json b/Code/BasicFilters/json/ClosingByReconstructionImageFilter.json index e6f21a6c7..4177934ff 100644 --- a/Code/BasicFilters/json/ClosingByReconstructionImageFilter.json +++ b/Code/BasicFilters/json/ClosingByReconstructionImageFilter.json @@ -57,7 +57,7 @@ } ], "briefdescription" : "Closing by reconstruction of an image.", - "detaileddescription" : "This filter is similar to the morphological closing, but contrary to the mophological closing, the closing by reconstruction preserves the shape of the components. The closing by reconstruction of an image \"f\" is defined as:\n\nClosingByReconstruction(f) = ErosionByReconstruction(f, Dilation(f)).\n\nClosing by reconstruction not only preserves structures preserved by the dilation, but also levels raises the contrast of the darkest regions. If PreserveIntensities is on, a subsequent reconstruction by dilation using a marker image that is the original image for all unaffected pixels.\n\nClosing by reconstruction is described in Chapter 6.3.9 of Pierre Soille's book \"Morphological Image Analysis: Principles and\nApplications\", Second Edition, Springer, 2003.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see GrayscaleMorphologicalClosingImageFilter", + "detaileddescription" : "This filter is similar to the morphological closing, but contrary to the morphological closing, the closing by reconstruction preserves the shape of the components. The closing by reconstruction of an image \"f\" is defined as:\n\nClosingByReconstruction(f) = ErosionByReconstruction(f, Dilation(f)).\n\nClosing by reconstruction not only preserves structures preserved by the dilation, but also levels raises the contrast of the darkest regions. If PreserveIntensities is on, a subsequent reconstruction by dilation using a marker image that is the original image for all unaffected pixels.\n\nClosing by reconstruction is described in Chapter 6.3.9 of Pierre Soille's book \"Morphological Image Analysis: Principles and\nApplications\", Second Edition, Springer, 2003.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see GrayscaleMorphologicalClosingImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/ComposeImageFilter.json b/Code/BasicFilters/json/ComposeImageFilter.json index 22fc798b5..5a05b0ada 100644 --- a/Code/BasicFilters/json/ComposeImageFilter.json +++ b/Code/BasicFilters/json/ComposeImageFilter.json @@ -30,7 +30,7 @@ } ], "briefdescription" : "ComposeImageFilter combine several scalar images into a multicomponent image.", - "detaileddescription" : "ComposeImageFilter combine several scalar images into an itk::Image of vector pixel (itk::Vector , itk::RGBPixel , ...), of std::complex pixel, or in an itk::VectorImage .\n\n\\par Inputs and Usage\n\\code\nfilter->SetInput( 0, image0 );\n\nfilter->SetInput( 1, image1 );\n\n...\n\nfilter->Update();\n\nitk::VectorImage< PixelType, dimension >::Pointer = filter->GetOutput();\n\n\\endcode\n All input images are expected to have the same template parameters and have the same size and origin.\n\n\\see VectorImage \n\n\\see VectorIndexSelectionCastImageFilter", + "detaileddescription" : "ComposeImageFilter combine several scalar images into an itk::Image of vector pixel (itk::Vector , itk::RGBPixel , ...), of std::complex pixel, or in an itk::VectorImage .\n\n\\par Inputs and Usage\n\\code\nfilter->SetInput( 0, image0 );\n\nfilter->SetInput( 1, image1 );\n\n...\n\nfilter->Update();\n\nitk::VectorImage< PixelType, dimension >::Pointer = filter->GetOutput();\n\n\\endcode\n All input images are expected to have the same template parameters and have the same size and origin.\n\n\n\\see VectorImage \n\n\n\\see VectorIndexSelectionCastImageFilter", "itk_module" : "ITKImageCompose", "itk_group" : "ImageCompose" } diff --git a/Code/BasicFilters/json/ConnectedComponentImageFilter.json b/Code/BasicFilters/json/ConnectedComponentImageFilter.json index 3dd3b324a..22ff46bff 100644 --- a/Code/BasicFilters/json/ConnectedComponentImageFilter.json +++ b/Code/BasicFilters/json/ConnectedComponentImageFilter.json @@ -90,7 +90,7 @@ } ], "briefdescription" : "Label the objects in a binary image.", - "detaileddescription" : "ConnectedComponentImageFilter labels the objects in a binary image (non-zero pixels are considered to be objects, zero-valued pixels are considered to be background). Each distinct object is assigned a unique label. The filter experiments with some improvements to the existing implementation, and is based on run length encoding along raster lines. The final object labels start with 1 and are consecutive. Objects that are reached earlier by a raster order scan have a lower label. This is different to the behaviour of the original connected component image filter which did not produce consecutive labels or impose any particular ordering.\n\nAfter the filter is executed, ObjectCount holds the number of connected components.\n\n\\see ImageToImageFilter", + "detaileddescription" : "ConnectedComponentImageFilter labels the objects in a binary image (non-zero pixels are considered to be objects, zero-valued pixels are considered to be background). Each distinct object is assigned a unique label. The filter experiments with some improvements to the existing implementation, and is based on run length encoding along raster lines. If the output background value is set to zero (the default), the final object labels start with 1 and are consecutive. If the output background is set to a non-zero value (by calling the SetBackgroundValue() routine of the filter), the final labels start at 0, and remain consecutive except for skipping the background value as needed. Objects that are reached earlier by a raster order scan have a lower label. This is different to the behaviour of the original connected component image filter which did not produce consecutive labels or impose any particular ordering.\n\nAfter the filter is executed, ObjectCount holds the number of connected components.\n\n\\see ImageToImageFilter", "itk_module" : "ITKConnectedComponents", "itk_group" : "ConnectedComponents" } diff --git a/Code/BasicFilters/json/ConstantPadImageFilter.json b/Code/BasicFilters/json/ConstantPadImageFilter.json index 99aca7f05..aff0c311d 100644 --- a/Code/BasicFilters/json/ConstantPadImageFilter.json +++ b/Code/BasicFilters/json/ConstantPadImageFilter.json @@ -76,7 +76,7 @@ } ], "briefdescription" : "Increase the image size by padding with a constant value.", - "detaileddescription" : "ConstantPadImageFilter changes the output image region. If the output image region is larger than the input image region, the extra pixels are filled in by a constant value. The output image region must be specified.\n\nVisual explanation of padding regions.\n This filter is implemented as a multithreaded filter. It provides a ThreadedGenerateData() method for its implementation.\n\n\\see WrapPadImageFilter , MirrorPadImageFilter", + "detaileddescription" : "ConstantPadImageFilter changes the output image region. If the output image region is larger than the input image region, the extra pixels are filled in by a constant value. The output image region must be specified.\n\nVisual explanation of padding regions.\n\n\nThis filter is implemented as a multithreaded filter. It provides a DynamicThreadedGenerateData() method for its implementation.\n\n\\see WrapPadImageFilter , MirrorPadImageFilter", "itk_module" : "ITKImageGrid", "itk_group" : "ImageGrid" } diff --git a/Code/BasicFilters/json/ConvolutionImageFilter.json b/Code/BasicFilters/json/ConvolutionImageFilter.json index 4730e68d3..933ec866f 100644 --- a/Code/BasicFilters/json/ConvolutionImageFilter.json +++ b/Code/BasicFilters/json/ConvolutionImageFilter.json @@ -64,7 +64,7 @@ } ], "briefdescription" : "Convolve a given image with an arbitrary image kernel.", - "detaileddescription" : "This filter operates by centering the flipped kernel at each pixel in the image and computing the inner product between pixel values in the image and pixel values in the kernel. The center of the kernel is defined as \\f$ \\lfloor (2*i+s-1)/2 \\rfloor \\f$ where \\f$i\\f$ is the index and \\f$s\\f$ is the size of the largest possible region of the kernel image. For kernels with odd sizes in all dimensions, this corresponds to the center pixel. If a dimension of the kernel image has an even size, then the center index of the kernel in that dimension will be the largest integral index that is less than the continuous index of the image center.\n\nThe kernel can optionally be normalized to sum to 1 using NormalizeOn() . Normalization is off by default.\n\n\\warning This filter ignores the spacing, origin, and orientation of the kernel image and treats them as identical to those in the input image.\n\nThis code was contributed in the Insight Journal paper:\n\n\"Image Kernel Convolution\" by Tustison N., Gee J. https://hdl.handle.net/1926/1323 http://www.insight-journal.org/browse/publication/208 \n\n\\author Nicholas J. Tustison \n\n\\author James C. Gee", + "detaileddescription" : "This filter operates by centering the flipped kernel at each pixel in the image and computing the inner product between pixel values in the image and pixel values in the kernel. The center of the kernel is defined as \\f$ \\lfloor (2*i+s-1)/2 \\rfloor \\f$ where \\f$i\\f$ is the index and \\f$s\\f$ is the size of the largest possible region of the kernel image. For kernels with odd sizes in all dimensions, this corresponds to the center pixel. If a dimension of the kernel image has an even size, then the center index of the kernel in that dimension will be the largest integral index that is less than the continuous index of the image center.\n\nThe kernel can optionally be normalized to sum to 1 using NormalizeOn() . Normalization is off by default.\n\n\\warning This filter ignores the spacing, origin, and orientation of the kernel image and treats them as identical to those in the input image.\n\n\nThis code was contributed in the Insight Journal paper:\n\n\"Image Kernel Convolution\" by Tustison N., Gee J. https://hdl.handle.net/1926/1323 http://www.insight-journal.org/browse/publication/208 \n\n\\author Nicholas J. Tustison \n\n\n\\author James C. Gee", "itk_module" : "ITKConvolution", "itk_group" : "Convolution" } diff --git a/Code/BasicFilters/json/CosImageFilter.json b/Code/BasicFilters/json/CosImageFilter.json index e6fbf0621..8f944c0de 100644 --- a/Code/BasicFilters/json/CosImageFilter.json +++ b/Code/BasicFilters/json/CosImageFilter.json @@ -28,7 +28,7 @@ } ], "briefdescription" : "Computes the cosine of each pixel.", - "detaileddescription" : "This filter is templated over the pixel type of the input image and the pixel type of the output image.\n\nThe filter walks over all of the pixels in the input image, and for each pixel does the following:\n\n\n\\li cast the pixel value to double , \n\n\\li apply the std::cos() function to the double value, \n\n\\li cast the double value resulting from std::cos() to the pixel type of the output image, \n\n\\li store the cast value into the output image.\n\n\nThe filter expects both images to have the same dimension (e.g. both 2D, or both 3D, or both ND)", + "detaileddescription" : "This filter is templated over the pixel type of the input image and the pixel type of the output image.\n\nThe filter walks over all of the pixels in the input image, and for each pixel does the following:\n\n\n\n\\li cast the pixel value to double , \n\n\n\\li apply the std::cos() function to the double value, \n\n\n\\li cast the double value resulting from std::cos() to the pixel type of the output image, \n\n\n\\li store the cast value into the output image.\n\n\n\nThe filter expects both images to have the same dimension (e.g. both 2D, or both 3D, or both ND)", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/CurvatureAnisotropicDiffusionImageFilter.json b/Code/BasicFilters/json/CurvatureAnisotropicDiffusionImageFilter.json index 6113eb99e..585a06759 100644 --- a/Code/BasicFilters/json/CurvatureAnisotropicDiffusionImageFilter.json +++ b/Code/BasicFilters/json/CurvatureAnisotropicDiffusionImageFilter.json @@ -84,7 +84,7 @@ } ], "briefdescription" : "", - "detaileddescription" : "This filter performs anisotropic diffusion on a scalar itk::Image using the modified curvature diffusion equation (MCDE) implemented in itkCurvatureNDAnisotropicDiffusionFunction. For detailed information on anisotropic diffusion and the MCDE see itkAnisotropicDiffusionFunction and itkCurvatureNDAnisotropicDiffusionFunction.\n\n\\par Inputs and Outputs\nThe input and output to this filter must be a scalar itk::Image with numerical pixel types (float or double). A user defined type which correctly defines arithmetic operations with floating point accuracy should also give correct results.\n\n\\par Parameters\nPlease first read all the documentation found in AnisotropicDiffusionImageFilter and AnisotropicDiffusionFunction . Also see CurvatureNDAnisotropicDiffusionFunction .\n\nThe default time step for this filter is set to the maximum theoretically stable value: 0.5 / 2^N, where N is the dimensionality of the image. For a 2D image, this means valid time steps are below 0.1250. For a 3D image, valid time steps are below 0.0625.\n\n\\see AnisotropicDiffusionImageFilter \n\n\\see AnisotropicDiffusionFunction \n\n\\see CurvatureNDAnisotropicDiffusionFunction", + "detaileddescription" : "This filter performs anisotropic diffusion on a scalar itk::Image using the modified curvature diffusion equation (MCDE) implemented in itkCurvatureNDAnisotropicDiffusionFunction. For detailed information on anisotropic diffusion and the MCDE see itkAnisotropicDiffusionFunction and itkCurvatureNDAnisotropicDiffusionFunction.\n\n\\par Inputs and Outputs\nThe input and output to this filter must be a scalar itk::Image with numerical pixel types (float or double). A user defined type which correctly defines arithmetic operations with floating point accuracy should also give correct results.\n\n\n\\par Parameters\nPlease first read all the documentation found in AnisotropicDiffusionImageFilter and AnisotropicDiffusionFunction . Also see CurvatureNDAnisotropicDiffusionFunction .\n\n\nThe default time step for this filter is set to the maximum theoretically stable value: 0.5 / 2^N, where N is the dimensionality of the image. For a 2D image, this means valid time steps are below 0.1250. For a 3D image, valid time steps are below 0.0625.\n\n\\see AnisotropicDiffusionImageFilter \n\n\n\\see AnisotropicDiffusionFunction \n\n\n\\see CurvatureNDAnisotropicDiffusionFunction", "itk_module" : "ITKAnisotropicSmoothing", "itk_group" : "AnisotropicSmoothing" } diff --git a/Code/BasicFilters/json/CurvatureFlowImageFilter.json b/Code/BasicFilters/json/CurvatureFlowImageFilter.json index 02d22ed6d..525939b41 100644 --- a/Code/BasicFilters/json/CurvatureFlowImageFilter.json +++ b/Code/BasicFilters/json/CurvatureFlowImageFilter.json @@ -56,7 +56,7 @@ } ], "briefdescription" : "Denoise an image using curvature driven flow.", - "detaileddescription" : "CurvatureFlowImageFilter implements a curvature driven image denoising algorithm. Iso-brightness contours in the grayscale input image are viewed as a level set. The level set is then evolved using a curvature-based speed function:\n\n \\f[ I_t = \\kappa |\\nabla I| \\f] where \\f$ \\kappa \\f$ is the curvature.\n\nThe advantage of this approach is that sharp boundaries are preserved with smoothing occurring only within a region. However, it should be noted that continuous application of this scheme will result in the eventual removal of all information as each contour shrinks to zero and disappear.\n\nNote that unlike level set segmentation algorithms, the image to be denoised is already the level set and can be set directly as the input using the SetInput() method.\n\nThis filter has two parameters: the number of update iterations to be performed and the timestep between each update.\n\nThe timestep should be \"small enough\" to ensure numerical stability. Stability is guarantee when the timestep meets the CFL (Courant-Friedrichs-Levy) condition. Broadly speaking, this condition ensures that each contour does not move more than one grid position at each timestep. In the literature, the timestep is typically user specified and have to manually tuned to the application.\n\nThis filter make use of the multi-threaded finite difference solver hierarchy. Updates are computed using a CurvatureFlowFunction object. A zero flux Neumann boundary condition when computing derivatives near the data boundary.\n\nThis filter may be streamed. To support streaming this filter produces a padded output which takes into account edge effects. The size of the padding is m_NumberOfIterations on each edge. Users of this filter should only make use of the center valid central region.\n\n\\warning This filter assumes that the input and output types have the same dimensions. This filter also requires that the output image pixels are of a floating point type. This filter works for any dimensional images.\n\nReference: \"Level Set Methods and Fast Marching Methods\", J.A. Sethian, Cambridge Press, Chapter 16, Second edition, 1999.\n\n\\see DenseFiniteDifferenceImageFilter \n\n\\see CurvatureFlowFunction \n\n\\see MinMaxCurvatureFlowImageFilter \n\n\\see BinaryMinMaxCurvatureFlowImageFilter", + "detaileddescription" : "CurvatureFlowImageFilter implements a curvature driven image denoising algorithm. Iso-brightness contours in the grayscale input image are viewed as a level set. The level set is then evolved using a curvature-based speed function:\n\n \\f[ I_t = \\kappa |\\nabla I| \\f] where \\f$ \\kappa \\f$ is the curvature.\n\nThe advantage of this approach is that sharp boundaries are preserved with smoothing occurring only within a region. However, it should be noted that continuous application of this scheme will result in the eventual removal of all information as each contour shrinks to zero and disappear.\n\nNote that unlike level set segmentation algorithms, the image to be denoised is already the level set and can be set directly as the input using the SetInput() method.\n\nThis filter has two parameters: the number of update iterations to be performed and the timestep between each update.\n\nThe timestep should be \"small enough\" to ensure numerical stability. Stability is guarantee when the timestep meets the CFL (Courant-Friedrichs-Levy) condition. Broadly speaking, this condition ensures that each contour does not move more than one grid position at each timestep. In the literature, the timestep is typically user specified and have to manually tuned to the application.\n\nThis filter make use of the multi-threaded finite difference solver hierarchy. Updates are computed using a CurvatureFlowFunction object. A zero flux Neumann boundary condition when computing derivatives near the data boundary.\n\nThis filter may be streamed. To support streaming this filter produces a padded output which takes into account edge effects. The size of the padding is m_NumberOfIterations on each edge. Users of this filter should only make use of the center valid central region.\n\n\\warning This filter assumes that the input and output types have the same dimensions. This filter also requires that the output image pixels are of a floating point type. This filter works for any dimensional images.\n\n\nReference: \"Level Set Methods and Fast Marching Methods\", J.A. Sethian, Cambridge Press, Chapter 16, Second edition, 1999.\n\n\\see DenseFiniteDifferenceImageFilter \n\n\n\\see CurvatureFlowFunction \n\n\n\\see MinMaxCurvatureFlowImageFilter \n\n\n\\see BinaryMinMaxCurvatureFlowImageFilter", "itk_module" : "ITKCurvatureFlow", "itk_group" : "CurvatureFlow" } diff --git a/Code/BasicFilters/json/DanielssonDistanceMapImageFilter.json b/Code/BasicFilters/json/DanielssonDistanceMapImageFilter.json index 79aece4df..e7ae72ffd 100644 --- a/Code/BasicFilters/json/DanielssonDistanceMapImageFilter.json +++ b/Code/BasicFilters/json/DanielssonDistanceMapImageFilter.json @@ -47,7 +47,7 @@ } ], "briefdescription" : "This filter computes the distance map of the input image as an approximation with pixel accuracy to the Euclidean distance.", - "detaileddescription" : "TInputImage\n\nInput Image Type \n\n\n\nTOutputImage\n\nOutput Image Type \n\n\n\nTVoronoiImage\n\nVoronoi Image Type. Note the default value is TInputImage.\n\n\n\nThe input is assumed to contain numeric codes defining objects. The filter will produce as output the following images:\n\n\n\\li A Voronoi partition using the same numeric codes as the input. \n\n\\li A distance map with the approximation to the euclidean distance. from a particular pixel to the nearest object to this pixel in the input image. \n\n\\li A vector map containing the component of the vector relating the current pixel with the closest point of the closest object to this pixel. Given that the components of the distance are computed in \"pixels\", the vector is represented by an itk::Offset . That is, physical coordinates are not used.\n\n\nThis filter is N-dimensional and known to be efficient in computational time. The algorithm is the N-dimensional version of the 4SED algorithm given for two dimensions in:\n\nDanielsson, Per-Erik. Euclidean Distance Mapping. Computer Graphics and Image Processing 14, 227-248 (1980).", + "detaileddescription" : "TInputImage\n\nInput Image Type \n\n\n\n\nTOutputImage\n\nOutput Image Type \n\n\n\n\nTVoronoiImage\n\nVoronoi Image Type. Note the default value is TInputImage.\n\n\n\nThe input is assumed to contain numeric codes defining objects. The filter will produce as output the following images:\n\n\n\n\\li A Voronoi partition using the same numeric codes as the input. \n\n\n\\li A distance map with the approximation to the euclidean distance. from a particular pixel to the nearest object to this pixel in the input image. \n\n\n\\li A vector map containing the component of the vector relating the current pixel with the closest point of the closest object to this pixel. Given that the components of the distance are computed in \"pixels\", the vector is represented by an itk::Offset . That is, physical coordinates are not used.\n\n\n\nThis filter is N-dimensional and known to be efficient in computational time. The algorithm is the N-dimensional version of the 4SED algorithm given for two dimensions in:\n\nDanielsson, Per-Erik. Euclidean Distance Mapping. Computer Graphics and Image Processing 14, 227-248 (1980).", "itk_module" : "ITKDistanceMap", "itk_group" : "DistanceMap" } diff --git a/Code/BasicFilters/json/DemonsRegistrationFilter.json b/Code/BasicFilters/json/DemonsRegistrationFilter.json index 9e72e232f..b974a9046 100644 --- a/Code/BasicFilters/json/DemonsRegistrationFilter.json +++ b/Code/BasicFilters/json/DemonsRegistrationFilter.json @@ -191,7 +191,7 @@ } ], "briefdescription" : "Deformably register two images using the demons algorithm.", - "detaileddescription" : "DemonsRegistrationFilter implements the demons deformable algorithm that register two images by computing the displacement field which will map a moving image onto a fixed image.\n\nA displacement field is represented as a image whose pixel type is some vector type with at least N elements, where N is the dimension of the fixed image. The vector type must support element access via operator []. It is assumed that the vector elements behave like floating point scalars.\n\nThis class is templated over the fixed image type, moving image type and the displacement field type.\n\nThe input fixed and moving images are set via methods SetFixedImage and SetMovingImage respectively. An initial displacement field maybe set via SetInitialDisplacementField or SetInput. If no initial field is set, a zero field is used as the initial condition.\n\nThe algorithm has one parameters: the number of iteration to be performed.\n\nThe output displacement field can be obtained via methods GetOutput or GetDisplacementField.\n\nThis class make use of the finite difference solver hierarchy. Update for each iteration is computed in DemonsRegistrationFunction .\n\n\\warning This filter assumes that the fixed image type, moving image type and displacement field type all have the same number of dimensions.\n\n\\see DemonsRegistrationFunction", + "detaileddescription" : "DemonsRegistrationFilter implements the demons deformable algorithm that register two images by computing the displacement field which will map a moving image onto a fixed image.\n\nA displacement field is represented as a image whose pixel type is some vector type with at least N elements, where N is the dimension of the fixed image. The vector type must support element access via operator []. It is assumed that the vector elements behave like floating point scalars.\n\nThis class is templated over the fixed image type, moving image type and the displacement field type.\n\nThe input fixed and moving images are set via methods SetFixedImage and SetMovingImage respectively. An initial displacement field maybe set via SetInitialDisplacementField or SetInput. If no initial field is set, a zero field is used as the initial condition.\n\nThe algorithm has one parameters: the number of iteration to be performed.\n\nThe output displacement field can be obtained via methods GetOutput or GetDisplacementField.\n\nThis class make use of the finite difference solver hierarchy. Update for each iteration is computed in DemonsRegistrationFunction .\n\n\\warning This filter assumes that the fixed image type, moving image type and displacement field type all have the same number of dimensions.\n\n\n\\see DemonsRegistrationFunction", "itk_module" : "ITKPDEDeformableRegistration", "itk_group" : "PDEDeformable" } diff --git a/Code/BasicFilters/json/DerivativeImageFilter.json b/Code/BasicFilters/json/DerivativeImageFilter.json index 530a134b4..579fddbbd 100644 --- a/Code/BasicFilters/json/DerivativeImageFilter.json +++ b/Code/BasicFilters/json/DerivativeImageFilter.json @@ -67,7 +67,7 @@ } ], "briefdescription" : "Computes the directional derivative of an image. The directional derivative at each pixel location is computed by convolution with a derivative operator of user-specified order.", - "detaileddescription" : "SetOrder specifies the order of the derivative.\n\nSetDirection specifies the direction of the derivative with respect to the coordinate axes of the image.\n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator", + "detaileddescription" : "SetOrder specifies the order of the derivative.\n\nSetDirection specifies the direction of the derivative with respect to the coordinate axes of the image.\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator", "itk_module" : "ITKImageFeature", "itk_group" : "ImageFeature" } diff --git a/Code/BasicFilters/json/DiffeomorphicDemonsRegistrationFilter.json b/Code/BasicFilters/json/DiffeomorphicDemonsRegistrationFilter.json index b3f39db3e..ad40204cf 100644 --- a/Code/BasicFilters/json/DiffeomorphicDemonsRegistrationFilter.json +++ b/Code/BasicFilters/json/DiffeomorphicDemonsRegistrationFilter.json @@ -216,7 +216,7 @@ } ], "briefdescription" : "Deformably register two images using a diffeomorphic demons algorithm.", - "detaileddescription" : "This class was contributed by Tom Vercauteren, INRIA & Mauna Kea Technologies, based on a variation of the DemonsRegistrationFilter . The basic modification is to use diffeomorphism exponentials.\n\nSee T. Vercauteren, X. Pennec, A. Perchant and N. Ayache, \"Non-parametric Diffeomorphic Image Registration with the Demons Algorithm\", Proc. of MICCAI 2007.\n\nDiffeomorphicDemonsRegistrationFilter implements the demons deformable algorithm that register two images by computing the deformation field which will map a moving image onto a fixed image.\n\nA deformation field is represented as a image whose pixel type is some vector type with at least N elements, where N is the dimension of the fixed image. The vector type must support element access via operator []. It is assumed that the vector elements behave like floating point scalars.\n\nThis class is templated over the fixed image type, moving image type and the deformation field type.\n\nThe input fixed and moving images are set via methods SetFixedImage and SetMovingImage respectively. An initial deformation field maybe set via SetInitialDisplacementField or SetInput. If no initial field is set, a zero field is used as the initial condition.\n\nThe output deformation field can be obtained via methods GetOutput or GetDisplacementField.\n\nThis class make use of the finite difference solver hierarchy. Update for each iteration is computed in DemonsRegistrationFunction .\n\n\\author Tom Vercauteren, INRIA & Mauna Kea Technologies\n\n\\warning This filter assumes that the fixed image type, moving image type and deformation field type all have the same number of dimensions.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/510 \n\n\\see DemonsRegistrationFilter \n\n\\see DemonsRegistrationFunction", + "detaileddescription" : "This class was contributed by Tom Vercauteren, INRIA & Mauna Kea Technologies, based on a variation of the DemonsRegistrationFilter . The basic modification is to use diffeomorphism exponentials.\n\nSee T. Vercauteren, X. Pennec, A. Perchant and N. Ayache, \"Non-parametric Diffeomorphic Image Registration with the Demons Algorithm\", Proc. of MICCAI 2007.\n\nDiffeomorphicDemonsRegistrationFilter implements the demons deformable algorithm that register two images by computing the deformation field which will map a moving image onto a fixed image.\n\nA deformation field is represented as a image whose pixel type is some vector type with at least N elements, where N is the dimension of the fixed image. The vector type must support element access via operator []. It is assumed that the vector elements behave like floating point scalars.\n\nThis class is templated over the fixed image type, moving image type and the deformation field type.\n\nThe input fixed and moving images are set via methods SetFixedImage and SetMovingImage respectively. An initial deformation field maybe set via SetInitialDisplacementField or SetInput. If no initial field is set, a zero field is used as the initial condition.\n\nThe output deformation field can be obtained via methods GetOutput or GetDisplacementField.\n\nThis class make use of the finite difference solver hierarchy. Update for each iteration is computed in DemonsRegistrationFunction .\n\n\\author Tom Vercauteren, INRIA & Mauna Kea Technologies\n\n\n\\warning This filter assumes that the fixed image type, moving image type and deformation field type all have the same number of dimensions.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/510 \n\n\\see DemonsRegistrationFilter \n\n\n\\see DemonsRegistrationFunction", "itk_module" : "ITKPDEDeformableRegistration", "itk_group" : "PDEDeformable" } diff --git a/Code/BasicFilters/json/DilateObjectMorphologyImageFilter.json b/Code/BasicFilters/json/DilateObjectMorphologyImageFilter.json index 3b41444ea..b5af3a668 100644 --- a/Code/BasicFilters/json/DilateObjectMorphologyImageFilter.json +++ b/Code/BasicFilters/json/DilateObjectMorphologyImageFilter.json @@ -69,7 +69,7 @@ } ], "briefdescription" : "dilation of an object in an image", - "detaileddescription" : "Dilate an image using binary morphology. Pixel values matching the object value are considered the \"foreground\" and all other pixels are \"background\". This is useful in processing mask images containing only one object.\n\nIf a pixel's value is equal to the object value and the pixel is adjacent to a non-object valued pixel, then the kernel is centered on the object-value pixel and neighboring pixels covered by the kernel are assigned the object value. The structuring element is assumed to be composed of binary values (zero or one).\n\n\\see ObjectMorphologyImageFilter , ErodeObjectMorphologyImageFilter \n\n\\see BinaryDilateImageFilter", + "detaileddescription" : "Dilate an image using binary morphology. Pixel values matching the object value are considered the \"foreground\" and all other pixels are \"background\". This is useful in processing mask images containing only one object.\n\nIf a pixel's value is equal to the object value and the pixel is adjacent to a non-object valued pixel, then the kernel is centered on the object-value pixel and neighboring pixels covered by the kernel are assigned the object value. The structuring element is assumed to be composed of binary values (zero or one).\n\n\\see ObjectMorphologyImageFilter , ErodeObjectMorphologyImageFilter \n\n\n\\see BinaryDilateImageFilter", "itk_module" : "ITKBinaryMathematicalMorphology", "itk_group" : "BinaryMathematicalMorphology" } diff --git a/Code/BasicFilters/json/DiscreteGaussianDerivativeImageFilter.json b/Code/BasicFilters/json/DiscreteGaussianDerivativeImageFilter.json index 604c19d21..0af7fd96d 100644 --- a/Code/BasicFilters/json/DiscreteGaussianDerivativeImageFilter.json +++ b/Code/BasicFilters/json/DiscreteGaussianDerivativeImageFilter.json @@ -145,7 +145,7 @@ } ], "briefdescription" : "Calculates image derivatives using discrete derivative gaussian kernels. This filter calculates Gaussian derivative by separable convolution of an image and a discrete Gaussian derivative operator (kernel).", - "detaileddescription" : "The Gaussian operators used here were described by Tony Lindeberg (Discrete Scale-Space Theory and the Scale-Space Primal Sketch. Dissertation. Royal Institute of Technology, Stockholm, Sweden. May 1991.)\n\nThe variance or standard deviation (sigma) will be evaluated as pixel units if SetUseImageSpacing is off (false) or as physical units if SetUseImageSpacing is on (true, default). The variance can be set independently in each dimension.\n\nWhen the Gaussian kernel is small, this filter tends to run faster than itk::RecursiveGaussianImageFilter .\n\n\\author Ivan Macia, VICOMTech, Spain, http://www.vicomtech.es \n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/1290 \n\n\\see GaussianDerivativeOperator \n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator", + "detaileddescription" : "The Gaussian operators used here were described by Tony Lindeberg (Discrete Scale-Space Theory and the Scale-Space Primal Sketch. Dissertation. Royal Institute of Technology, Stockholm, Sweden. May 1991.)\n\nThe variance or standard deviation (sigma) will be evaluated as pixel units if SetUseImageSpacing is off (false) or as physical units if SetUseImageSpacing is on (true, default). The variance can be set independently in each dimension.\n\nWhen the Gaussian kernel is small, this filter tends to run faster than itk::RecursiveGaussianImageFilter .\n\n\\author Ivan Macia, VICOMTech, Spain, http://www.vicomtech.es \n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/1290 \n\n\\see GaussianDerivativeOperator \n\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator", "itk_module" : "ITKImageFeature", "itk_group" : "ImageFeature" } diff --git a/Code/BasicFilters/json/DiscreteGaussianImageFilter.json b/Code/BasicFilters/json/DiscreteGaussianImageFilter.json index 0768e81e6..82bfa5c6a 100644 --- a/Code/BasicFilters/json/DiscreteGaussianImageFilter.json +++ b/Code/BasicFilters/json/DiscreteGaussianImageFilter.json @@ -95,7 +95,7 @@ } ], "briefdescription" : "Blurs an image by separable convolution with discrete gaussian kernels. This filter performs Gaussian blurring by separable convolution of an image and a discrete Gaussian operator (kernel).", - "detaileddescription" : "The Gaussian operator used here was described by Tony Lindeberg (Discrete Scale-Space Theory and the Scale-Space Primal Sketch. Dissertation. Royal Institute of Technology, Stockholm, Sweden. May 1991.) The Gaussian kernel used here was designed so that smoothing and derivative operations commute after discretization.\n\nThe variance or standard deviation (sigma) will be evaluated as pixel units if SetUseImageSpacing is off (false) or as physical units if SetUseImageSpacing is on (true, default). The variance can be set independently in each dimension.\n\nWhen the Gaussian kernel is small, this filter tends to run faster than itk::RecursiveGaussianImageFilter .\n\n\\see GaussianOperator \n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see RecursiveGaussianImageFilter", + "detaileddescription" : "The Gaussian operator used here was described by Tony Lindeberg (Discrete Scale-Space Theory and the Scale-Space Primal Sketch. Dissertation. Royal Institute of Technology, Stockholm, Sweden. May 1991.) The Gaussian kernel used here was designed so that smoothing and derivative operations commute after discretization.\n\nThe variance or standard deviation (sigma) will be evaluated as pixel units if SetUseImageSpacing is off (false) or as physical units if SetUseImageSpacing is on (true, default). The variance can be set independently in each dimension.\n\nWhen the Gaussian kernel is small, this filter tends to run faster than itk::RecursiveGaussianImageFilter .\n\n\\see GaussianOperator \n\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see RecursiveGaussianImageFilter", "itk_module" : "ITKSmoothing", "itk_group" : "Smoothing" } diff --git a/Code/BasicFilters/json/DisplacementFieldJacobianDeterminantFilter.json b/Code/BasicFilters/json/DisplacementFieldJacobianDeterminantFilter.json index 185c50740..0e666b955 100644 --- a/Code/BasicFilters/json/DisplacementFieldJacobianDeterminantFilter.json +++ b/Code/BasicFilters/json/DisplacementFieldJacobianDeterminantFilter.json @@ -66,7 +66,7 @@ } ], "briefdescription" : "Computes a scalar image from a vector image (e.g., deformation field) input, where each output scalar at each pixel is the Jacobian determinant of the vector field at that location. This calculation is correct in the case where the vector image is a \"displacement\" from the current location. The computation for the jacobian determinant is: det[ dT/dx ] = det[ I + du/dx ].", - "detaileddescription" : "\\par Overview\nThis filter is based on itkVectorGradientMagnitudeImageFilter and supports the m_DerivativeWeights weights for partial derivatives.\n\nNote that the determinant of a zero vector field is also zero, whereas the Jacobian determinant of the corresponding identity warp transformation is 1.0. In order to compute the effective deformation Jacobian determinant 1.0 must be added to the diagonal elements of Jacobian prior to taking the derivative. i.e. det([ (1.0+dx/dx) dx/dy dx/dz ; dy/dx (1.0+dy/dy) dy/dz; dz/dx dz/dy (1.0+dz/dz) ])\n\n\\par Template Parameters (Input and Output)\nThis filter has one required template parameter which defines the input image type. The pixel type of the input image is assumed to be a vector (e.g., itk::Vector , itk::RGBPixel , itk::FixedArray ). The scalar type of the vector components must be castable to floating point. Instantiating with an image of RGBPixel, for example, is allowed, but the filter will convert it to an image of Vector for processing.\n\nThe second template parameter, TRealType, can be optionally specified to define the scalar numerical type used in calculations. This is the component type of the output image, which will be of itk::Vector, where N is the number of channels in the multiple component input image. The default type of TRealType is float. For extra precision, you may safely change this parameter to double.\n\nThe third template parameter is the output image type. The third parameter will be automatically constructed from the first and second parameters, so it is not necessary (or advisable) to set this parameter explicitly. Given an M-channel input image with dimensionality N, and a numerical type specified as TRealType, the output image will be of type itk::Image.\n\n\\par Filter Parameters\nThe method SetUseImageSpacingOn will cause derivatives in the image to be scaled (inversely) with the pixel size of the input image, effectively taking derivatives in world coordinates (versus isotropic image space). SetUseImageSpacingOff turns this functionality off. Default is UseImageSpacingOn. The parameter UseImageSpacing can be set directly with the method SetUseImageSpacing(bool) .\n\nWeights can be applied to the derivatives directly using the SetDerivativeWeights method. Note that if UseImageSpacing is set to TRUE (ON), then these weights will be overridden by weights derived from the image spacing when the filter is updated. The argument to this method is a C array of TRealValue type.\n\n\\par Constraints\nWe use vnl_det for determinent computation, which only supports square matrices. So the vector dimension of the input image values must be equal to the image dimensions, which is trivially true for a deformation field that maps an n-dimensional space onto itself.\n\nCurrently, dimensions up to and including 4 are supported. This limitation comes from the presence of vnl_det() functions for matrices of dimension up to 4x4.\n\nThe template parameter TRealType must be floating point (float or double) or a user-defined \"real\" numerical type with arithmetic operations defined sufficient to compute derivatives.\n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator \n\n\\note This class was adapted by \n\n\\author Hans J. Johnson, The University of Iowa from code provided by \n\n\\author Tom Vercauteren, INRIA & Mauna Kea Technologies \n\n\\author Torsten Rohlfing, Neuroscience Program, SRI International.", + "detaileddescription" : "\\par Overview\nThis filter is based on itkVectorGradientMagnitudeImageFilter and supports the m_DerivativeWeights weights for partial derivatives.\n\n\nNote that the determinant of a zero vector field is also zero, whereas the Jacobian determinant of the corresponding identity warp transformation is 1.0. In order to compute the effective deformation Jacobian determinant 1.0 must be added to the diagonal elements of Jacobian prior to taking the derivative. i.e. det([ (1.0+dx/dx) dx/dy dx/dz ; dy/dx (1.0+dy/dy) dy/dz; dz/dx dz/dy (1.0+dz/dz) ])\n\n\\par Template Parameters (Input and Output)\nThis filter has one required template parameter which defines the input image type. The pixel type of the input image is assumed to be a vector (e.g., itk::Vector , itk::RGBPixel , itk::FixedArray ). The scalar type of the vector components must be castable to floating point. Instantiating with an image of RGBPixel, for example, is allowed, but the filter will convert it to an image of Vector for processing.\n\n\nThe second template parameter, TRealType, can be optionally specified to define the scalar numerical type used in calculations. This is the component type of the output image, which will be of itk::Vector, where N is the number of channels in the multiple component input image. The default type of TRealType is float. For extra precision, you may safely change this parameter to double.\n\nThe third template parameter is the output image type. The third parameter will be automatically constructed from the first and second parameters, so it is not necessary (or advisable) to set this parameter explicitly. Given an M-channel input image with dimensionality N, and a numerical type specified as TRealType, the output image will be of type itk::Image.\n\n\\par Filter Parameters\nThe method SetUseImageSpacingOn will cause derivatives in the image to be scaled (inversely) with the pixel size of the input image, effectively taking derivatives in world coordinates (versus isotropic image space). SetUseImageSpacingOff turns this functionality off. Default is UseImageSpacingOn. The parameter UseImageSpacing can be set directly with the method SetUseImageSpacing(bool) .\n\n\nWeights can be applied to the derivatives directly using the SetDerivativeWeights method. Note that if UseImageSpacing is set to TRUE (ON), then these weights will be overridden by weights derived from the image spacing when the filter is updated. The argument to this method is a C array of TRealValue type.\n\n\\par Constraints\nWe use vnl_det for determinant computation, which only supports square matrices. So the vector dimension of the input image values must be equal to the image dimensions, which is trivially true for a deformation field that maps an n-dimensional space onto itself.\n\n\nCurrently, dimensions up to and including 4 are supported. This limitation comes from the presence of vnl_det() functions for matrices of dimension up to 4x4.\n\nThe template parameter TRealType must be floating point (float or double) or a user-defined \"real\" numerical type with arithmetic operations defined sufficient to compute derivatives.\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator \n\n\n\\note This class was adapted by \n\n\n\\author Hans J. Johnson, The University of Iowa from code provided by \n\n\n\\author Tom Vercauteren, INRIA & Mauna Kea Technologies \n\n\n\\author Torsten Rohlfing, Neuroscience Program, SRI International.", "itk_module" : "ITKDisplacementField", "itk_group" : "DisplacementField" } diff --git a/Code/BasicFilters/json/DivideFloorImageFilter.json b/Code/BasicFilters/json/DivideFloorImageFilter.json index a059e38f2..bd73e40a2 100644 --- a/Code/BasicFilters/json/DivideFloorImageFilter.json +++ b/Code/BasicFilters/json/DivideFloorImageFilter.json @@ -25,7 +25,7 @@ } ], "briefdescription" : "Implements pixel-wise generic operation of two images, or of an image and a constant.", - "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", + "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see BinaryGeneratorImagFilter \n\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", "itk_module" : "ITKImageFilterBase", "itk_group" : "ImageFilterBase" } diff --git a/Code/BasicFilters/json/DivideRealImageFilter.json b/Code/BasicFilters/json/DivideRealImageFilter.json index 313f59fbf..7c043052a 100644 --- a/Code/BasicFilters/json/DivideRealImageFilter.json +++ b/Code/BasicFilters/json/DivideRealImageFilter.json @@ -26,7 +26,7 @@ } ], "briefdescription" : "Implements pixel-wise generic operation of two images, or of an image and a constant.", - "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", + "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see BinaryGeneratorImagFilter \n\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", "itk_module" : "ITKImageFilterBase", "itk_group" : "ImageFilterBase" } diff --git a/Code/BasicFilters/json/DoubleThresholdImageFilter.json b/Code/BasicFilters/json/DoubleThresholdImageFilter.json index 250a5a6ba..00692354d 100644 --- a/Code/BasicFilters/json/DoubleThresholdImageFilter.json +++ b/Code/BasicFilters/json/DoubleThresholdImageFilter.json @@ -115,7 +115,7 @@ } ], "briefdescription" : "Binarize an input image using double thresholding.", - "detaileddescription" : "Double threshold addresses the difficulty in selecting a threshold that will select the objects of interest without selecting extraneous objects. Double threshold considers two threshold ranges: a narrow range and a wide range (where the wide range encompasses the narrow range). If the wide range was used for a traditional threshold (where values inside the range map to the foreground and values outside the range map to the background), many extraneous pixels may survive the threshold operation. If the narrow range was used for a traditional threshold, then too few pixels may survive the threshold.\n\nDouble threshold uses the narrow threshold image as a marker image and the wide threshold image as a mask image in the geodesic dilation. Essentially, the marker image (narrow threshold) is dilated but constrained to lie within the mask image (wide threshold). Thus, only the objects of interest (those pixels that survived the narrow threshold) are extracted but the those objects appear in the final image as they would have if the wide threshold was used.\n\n\\see GrayscaleGeodesicDilateImageFilter \n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", + "detaileddescription" : "Double threshold addresses the difficulty in selecting a threshold that will select the objects of interest without selecting extraneous objects. Double threshold considers two threshold ranges: a narrow range and a wide range (where the wide range encompasses the narrow range). If the wide range was used for a traditional threshold (where values inside the range map to the foreground and values outside the range map to the background), many extraneous pixels may survive the threshold operation. If the narrow range was used for a traditional threshold, then too few pixels may survive the threshold.\n\nDouble threshold uses the narrow threshold image as a marker image and the wide threshold image as a mask image in the geodesic dilation. Essentially, the marker image (narrow threshold) is dilated but constrained to lie within the mask image (wide threshold). Thus, only the objects of interest (those pixels that survived the narrow threshold) are extracted but the those objects appear in the final image as they would have if the wide threshold was used.\n\n\\see GrayscaleGeodesicDilateImageFilter \n\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/EqualImageFilter.json b/Code/BasicFilters/json/EqualImageFilter.json index 180f4896b..c9e1a87ca 100644 --- a/Code/BasicFilters/json/EqualImageFilter.json +++ b/Code/BasicFilters/json/EqualImageFilter.json @@ -47,7 +47,7 @@ } ], "briefdescription" : "Implements pixel-wise generic operation of two images, or of an image and a constant.", - "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", + "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see BinaryGeneratorImagFilter \n\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", "itk_module" : "ITKImageFilterBase", "itk_group" : "ImageFilterBase" } diff --git a/Code/BasicFilters/json/ErodeObjectMorphologyImageFilter.json b/Code/BasicFilters/json/ErodeObjectMorphologyImageFilter.json index ef5a5b11c..c35191999 100644 --- a/Code/BasicFilters/json/ErodeObjectMorphologyImageFilter.json +++ b/Code/BasicFilters/json/ErodeObjectMorphologyImageFilter.json @@ -79,7 +79,7 @@ } ], "briefdescription" : "Erosion of an object in an image.", - "detaileddescription" : "Erosion of an image using binary morphology. Pixel values matching the object value are considered the \"object\" and all other pixels are \"background\". This is useful in processing mask images containing only one object.\n\nIf the pixel covered by the center of the kernel has the pixel value ObjectValue and the pixel is adjacent to a non-object valued pixel, then the kernel is centered on the object-value pixel and neighboring pixels covered by the kernel are assigned the background value. The structuring element is assumed to be composed of binary values (zero or one).\n\n\\see ObjectMorphologyImageFilter , BinaryFunctionErodeImageFilter \n\n\\see BinaryErodeImageFilter", + "detaileddescription" : "Erosion of an image using binary morphology. Pixel values matching the object value are considered the \"object\" and all other pixels are \"background\". This is useful in processing mask images containing only one object.\n\nIf the pixel covered by the center of the kernel has the pixel value ObjectValue and the pixel is adjacent to a non-object valued pixel, then the kernel is centered on the object-value pixel and neighboring pixels covered by the kernel are assigned the background value. The structuring element is assumed to be composed of binary values (zero or one).\n\n\\see ObjectMorphologyImageFilter , BinaryFunctionErodeImageFilter \n\n\n\\see BinaryErodeImageFilter", "itk_module" : "ITKBinaryMathematicalMorphology", "itk_group" : "BinaryMathematicalMorphology" } diff --git a/Code/BasicFilters/json/ExpandImageFilter.json b/Code/BasicFilters/json/ExpandImageFilter.json index b3fafee12..126d3ecfd 100644 --- a/Code/BasicFilters/json/ExpandImageFilter.json +++ b/Code/BasicFilters/json/ExpandImageFilter.json @@ -190,7 +190,7 @@ } ], "briefdescription" : "Expand the size of an image by an integer factor in each dimension.", - "detaileddescription" : "ExpandImageFilter increases the size of an image by an integer factor in each dimension using a interpolation method. The output image size in each dimension is given by:\n\nOutputSize[j] = InputSize[j] * ExpandFactors[j]\n\nThe output values are obtained by interpolating the input image. The default interpolation type used is the LinearInterpolateImageFunction . The user can specify a particular interpolation function via SetInterpolator() . Note that the input interpolator must derive from base class InterpolateImageFunction .\n\nThis filter will produce an output with different pixel spacing that its input image such that:\n\nOutputSpacing[j] = InputSpacing[j] / ExpandFactors[j]\n\nThe filter is templated over the input image type and the output image type.\n\nThis filter is implemented as a multithreaded filter and supports streaming.\n\n\\warning This filter only works for image with scalar pixel types. For vector images use VectorExpandImageFilter .\n\nThis filter assumes that the input and output image has the same number of dimensions.\n\n\\see InterpolateImageFunction \n\n\\see LinearInterpolationImageFunction \n\n\\see VectorExpandImageFilter", + "detaileddescription" : "ExpandImageFilter increases the size of an image by an integer factor in each dimension using a interpolation method. The output image size in each dimension is given by:\n\nOutputSize[j] = InputSize[j] * ExpandFactors[j]\n\nThe output values are obtained by interpolating the input image. The default interpolation type used is the LinearInterpolateImageFunction . The user can specify a particular interpolation function via SetInterpolator() . Note that the input interpolator must derive from base class InterpolateImageFunction .\n\nThis filter will produce an output with different pixel spacing that its input image such that:\n\nOutputSpacing[j] = InputSpacing[j] / ExpandFactors[j]\n\nThe filter is templated over the input image type and the output image type.\n\nThis filter is implemented as a multithreaded filter and supports streaming.\n\nThis filter assumes that the input and output image has the same number of dimensions.\n\n\\see InterpolateImageFunction \n\n\n\\see LinearInterpolationImageFunction", "itk_module" : "ITKImageGrid", "itk_group" : "ImageGrid" } diff --git a/Code/BasicFilters/json/ExtractImageFilter.json b/Code/BasicFilters/json/ExtractImageFilter.json index c15e26088..2150a8c4f 100644 --- a/Code/BasicFilters/json/ExtractImageFilter.json +++ b/Code/BasicFilters/json/ExtractImageFilter.json @@ -43,7 +43,7 @@ "default" : "itk::simple::ExtractImageFilter::DIRECTIONCOLLAPSETOGUESS", "itk_type" : "typename FilterType::DirectionCollapseStrategyEnum", "briefdescriptionSet" : "", - "detaileddescriptionSet" : "Set the strategy to be used to collapse physical space dimensions.\n\nitk::itkExtractImageFilter::DIRECTIONCOLLAPSETOIDENTITY Set the strategy so that all collapsed images have an identity direction. Use this strategy when you know that retention of the physical space orientation of the collapsed image is not important.\n\nitk::itkExtractImageFilter::DIRECTIONCOLLAPSETOGUESS Set the strategy so that all collapsed images where output direction is the sub-matrix if it is positive definite, else return identity. This is backwards compatible with ITKv3, but is highly discouraged because the results are difficult to anticipate under differing data scenerios.\n\nitk::itkExtractImageFilter::DIRECTIONCOLLAPSETOSUBMATRIX Set the strategy so that all collapsed images where output direction is the sub-matrix if it is positive definite, else throw an exception. Use this strategy when it is known that properly identified physical space sub-volumes can be reliably extracted from a higher dimensional space. For example when the application programmer knows that a 4D image is 3D+time, and that the 3D sub-space is properly defined.", + "detaileddescriptionSet" : "Backwards compatibility for enum values Set the strategy to be used to collapse physical space dimensions.\n\nitk::itkExtractImageFilter::DIRECTIONCOLLAPSETOIDENTITY Set the strategy so that all collapsed images have an identity direction. Use this strategy when you know that retention of the physical space orientation of the collapsed image is not important.\n\nitk::itkExtractImageFilter::DIRECTIONCOLLAPSETOGUESS Set the strategy so that all collapsed images where output direction is the sub-matrix if it is positive definite, else return identity. This is backwards compatible with ITKv3, but is highly discouraged because the results are difficult to anticipate under differing data scenarios.\n\nitk::itkExtractImageFilter::DIRECTIONCOLLAPSETOSUBMATRIX Set the strategy so that all collapsed images where output direction is the sub-matrix if it is positive definite, else throw an exception. Use this strategy when it is known that properly identified physical space sub-volumes can be reliably extracted from a higher dimensional space. For example when the application programmer knows that a 4D image is 3D+time, and that the 3D sub-space is properly defined.", "briefdescriptionGet" : "", "detaileddescriptionGet" : "NOTE: The SetDirectionCollapseToUknown is explicitly not defined. It is a state that a filter can be in only when it is first instantiate prior to being initialized. Get the currently set strategy for collapsing directions of physical space." } @@ -114,7 +114,7 @@ } ], "briefdescription" : "Decrease the image size by cropping the image to the selected region bounds.", - "detaileddescription" : "ExtractImageFilter changes the image boundary of an image by removing pixels outside the target region. The target region must be specified.\n\nExtractImageFilter also collapses dimensions so that the input image may have more dimensions than the output image (i.e. 4-D input image to a 3-D output image). To specify what dimensions to collapse, the ExtractionRegion must be specified. For any dimension dim where ExtractionRegion.Size[dim] = 0, that dimension is collapsed. The index to collapse on is specified by ExtractionRegion.Index[dim]. For example, we have a image 4D = a 4x4x4x4 image, and we want to get a 3D image, 3D = a 4x4x4 image, specified as [x,y,z,2] from 4D (i.e. the 3rd \"time\" slice from 4D). The ExtractionRegion.Size = [4,4,4,0] and ExtractionRegion.Index = [0,0,0,2].\n\nThe number of dimension in ExtractionRegion.Size and Index must = InputImageDimension. The number of non-zero dimensions in ExtractionRegion.Size must = OutputImageDimension.\n\nThe output image produced by this filter will have the same origin as the input image, while the ImageRegion of the output image will start at the starting index value provided in the ExtractRegion parameter. If you are looking for a filter that will re-compute the origin of the output image, and provide an output image region whose index is set to zeros, then you may want to use the RegionOfInterestImageFilter . The output spacing is is simply the collapsed version of the input spacing.\n\nDetermining the direction of the collapsed output image from an larger dimensional input space is an ill defined problem in general. It is required that the application developer select the desired transformation strategy for collapsing direction cosines. It is REQUIRED that a strategy be explicitly requested (i.e. there is no working default). Direction Collapsing Strategies: 1) DirectionCollapseToUnknown(); This is the default and the filter can not run when this is set. The reason is to explicitly force the application developer to define their desired behavior. 1) DirectionCollapseToIdentity(); Output has identity direction no matter what 2) DirectionCollapseToSubmatrix(); Output direction is the sub-matrix if it is positive definite, else throw an exception.\n\nThis filter is implemented as a multithreaded filter. It provides a ThreadedGenerateData() method for its implementation.\n\n\\note This filter is derived from InPlaceImageFilter . When the input to this filter matched the output requirested region, like with streaming filter for input, then setting this filter to run in-place will result in no copying of the bulk pixel data.\n\n\\see CropImageFilter", + "detaileddescription" : "ExtractImageFilter changes the image boundary of an image by removing pixels outside the target region. The target region must be specified.\n\nExtractImageFilter also collapses dimensions so that the input image may have more dimensions than the output image (i.e. 4-D input image to a 3-D output image). To specify what dimensions to collapse, the ExtractionRegion must be specified. For any dimension dim where ExtractionRegion.Size[dim] = 0, that dimension is collapsed. The index to collapse on is specified by ExtractionRegion.Index[dim]. For example, we have a image 4D = a 4x4x4x4 image, and we want to get a 3D image, 3D = a 4x4x4 image, specified as [x,y,z,2] from 4D (i.e. the 3rd \"time\" slice from 4D). The ExtractionRegion.Size = [4,4,4,0] and ExtractionRegion.Index = [0,0,0,2].\n\nThe number of dimension in ExtractionRegion.Size and Index must = InputImageDimension. The number of non-zero dimensions in ExtractionRegion.Size must = OutputImageDimension.\n\nThe output image produced by this filter will have the same origin as the input image, while the ImageRegion of the output image will start at the starting index value provided in the ExtractRegion parameter. If you are looking for a filter that will re-compute the origin of the output image, and provide an output image region whose index is set to zeros, then you may want to use the RegionOfInterestImageFilter . The output spacing is is simply the collapsed version of the input spacing.\n\nDetermining the direction of the collapsed output image from an larger dimensional input space is an ill defined problem in general. It is required that the application developer select the desired transformation strategy for collapsing direction cosines. It is REQUIRED that a strategy be explicitly requested (i.e. there is no working default). Direction Collapsing Strategies: 1) DirectionCollapseToUnknown(); This is the default and the filter can not run when this is set. The reason is to explicitly force the application developer to define their desired behavior. 1) DirectionCollapseToIdentity(); Output has identity direction no matter what 2) DirectionCollapseToSubmatrix(); Output direction is the sub-matrix if it is positive definite, else throw an exception.\n\nThis filter is implemented as a multithreaded filter. It provides a DynamicThreadedGenerateData() method for its implementation.\n\n\\note This filter is derived from InPlaceImageFilter . When the input to this filter matched the output requested region, like with streaming filter for input, then setting this filter to run in-place will result in no copying of the bulk pixel data.\n\n\n\\see CropImageFilter", "itk_module" : "ITKCommon", "itk_group" : "Common" } diff --git a/Code/BasicFilters/json/FFTConvolutionImageFilter.json b/Code/BasicFilters/json/FFTConvolutionImageFilter.json index f183c2516..8fca42608 100644 --- a/Code/BasicFilters/json/FFTConvolutionImageFilter.json +++ b/Code/BasicFilters/json/FFTConvolutionImageFilter.json @@ -64,7 +64,7 @@ } ], "briefdescription" : "Convolve a given image with an arbitrary image kernel using multiplication in the Fourier domain.", - "detaileddescription" : "This filter produces output equivalent to the output of the ConvolutionImageFilter . However, it takes advantage of the convolution theorem to accelerate the convolution computation when the kernel is large.\n\n\\warning This filter ignores the spacing, origin, and orientation of the kernel image and treats them as identical to those in the input image.\n\nThis code was adapted from the Insight Journal contribution:\n\n\"FFT Based Convolution\" by Gaetan Lehmann https://hdl.handle.net/10380/3154 \n\n\\see ConvolutionImageFilter", + "detaileddescription" : "This filter produces output equivalent to the output of the ConvolutionImageFilter . However, it takes advantage of the convolution theorem to accelerate the convolution computation when the kernel is large.\n\n\\warning This filter ignores the spacing, origin, and orientation of the kernel image and treats them as identical to those in the input image.\n\n\nThis code was adapted from the Insight Journal contribution:\n\n\"FFT Based Convolution\" by Gaetan Lehmann https://hdl.handle.net/10380/3154 \n\n\\see ConvolutionImageFilter", "itk_module" : "ITKConvolution", "itk_group" : "Convolution" } diff --git a/Code/BasicFilters/json/FFTNormalizedCorrelationImageFilter.json b/Code/BasicFilters/json/FFTNormalizedCorrelationImageFilter.json index 7a4e43697..8fd61f6e4 100644 --- a/Code/BasicFilters/json/FFTNormalizedCorrelationImageFilter.json +++ b/Code/BasicFilters/json/FFTNormalizedCorrelationImageFilter.json @@ -54,7 +54,7 @@ } ], "briefdescription" : "Calculate normalized cross correlation using FFTs.", - "detaileddescription" : "This filter calculates the normalized cross correlation (NCC) of two images using FFTs instead of spatial correlation. It is much faster than spatial correlation for reasonably large structuring elements. This filter is a subclass of the more general MaskedFFTNormalizedCorrelationImageFilter and operates by essentially setting the masks in that algorithm to images of ones. As described in detail in the references below, there is no computational overhead to utilizing the more general masked algorithm because the FFTs of the images of ones are still necessary for the computations.\n\nInputs: Two images are required as inputs, fixedImage and movingImage. In the context of correlation, inputs are often defined as: \"image\" and \"template\". In this filter, the fixedImage plays the role of the image, and the movingImage plays the role of the template. However, this filter is capable of correlating any two images and is not restricted to small movingImages (templates).\n\nOptional parameters: The RequiredNumberOfOverlappingPixels enables the user to specify how many voxels of the two images must overlap; any location in the correlation map that results from fewer than this number of voxels will be set to zero. Larger values zero-out pixels on a larger border around the correlation image. Thus, larger values remove less stable computations but also limit the capture range. If RequiredNumberOfOverlappingPixels is set to 0, the default, no zeroing will take place.\n\nImage size: fixedImage and movingImage need not be the same size. Furthermore, whereas some algorithms require that the \"template\" be smaller than the \"image\" because of errors in the regions where the two are not fully overlapping, this filter has no such restriction.\n\nImage spacing: Since the computations are done in the pixel domain, all input images must have the same spacing.\n\nOutputs; The output is an image of RealPixelType that is the NCC of the two images and its values range from -1.0 to 1.0. The size of this NCC image is, by definition, size(fixedImage) + size(movingImage) - 1.\n\nExample filter usage: \\code\ntypedef itk::FFTNormalizedCorrelationImageFilter< ShortImageType, DoubleImageType > FilterType;\n\nFilterType::Pointer filter = FilterType::New();\n\nfilter->SetFixedImage( fixedImage );\n\nfilter->SetMovingImage( movingImage );\n\nfilter->SetRequiredNumberOfOverlappingPixels(20);\n\nfilter->Update();\n\n\\endcode\n\n\\warning The pixel type of the output image must be of real type (float or double). ConceptChecking is used to enforce the output pixel type. You will get a compilation error if the pixel type of the output image is not float or double.\n\nReferences: 1) D. Padfield. \"Masked object registration in the Fourier domain.\" Transactions on Image Processing. 2) D. Padfield. \"Masked FFT registration\". In Proc. Computer Vision and Pattern Recognition, 2010.\n\n\\author : Dirk Padfield, GE Global Research, padfield@research.ge.com", + "detaileddescription" : "This filter calculates the normalized cross correlation (NCC) of two images using FFTs instead of spatial correlation. It is much faster than spatial correlation for reasonably large structuring elements. This filter is a subclass of the more general MaskedFFTNormalizedCorrelationImageFilter and operates by essentially setting the masks in that algorithm to images of ones. As described in detail in the references below, there is no computational overhead to utilizing the more general masked algorithm because the FFTs of the images of ones are still necessary for the computations.\n\nInputs: Two images are required as inputs, fixedImage and movingImage. In the context of correlation, inputs are often defined as: \"image\" and \"template\". In this filter, the fixedImage plays the role of the image, and the movingImage plays the role of the template. However, this filter is capable of correlating any two images and is not restricted to small movingImages (templates).\n\nOptional parameters: The RequiredNumberOfOverlappingPixels enables the user to specify how many voxels of the two images must overlap; any location in the correlation map that results from fewer than this number of voxels will be set to zero. Larger values zero-out pixels on a larger border around the correlation image. Thus, larger values remove less stable computations but also limit the capture range. If RequiredNumberOfOverlappingPixels is set to 0, the default, no zeroing will take place.\n\nImage size: fixedImage and movingImage need not be the same size. Furthermore, whereas some algorithms require that the \"template\" be smaller than the \"image\" because of errors in the regions where the two are not fully overlapping, this filter has no such restriction.\n\nImage spacing: Since the computations are done in the pixel domain, all input images must have the same spacing.\n\nOutputs; The output is an image of RealPixelType that is the NCC of the two images and its values range from -1.0 to 1.0. The size of this NCC image is, by definition, size(fixedImage) + size(movingImage) - 1.\n\nExample filter usage: \\code\nusing FilterType = itk::FFTNormalizedCorrelationImageFilter< ShortImageType, DoubleImageType >;\n\nFilterType::Pointer filter = FilterType::New();\n\nfilter->SetFixedImage( fixedImage );\n\nfilter->SetMovingImage( movingImage );\n\nfilter->SetRequiredNumberOfOverlappingPixels(20);\n\nfilter->Update();\n\n\\endcode\n\n\n\\warning The pixel type of the output image must be of real type (float or double). ConceptChecking is used to enforce the output pixel type. You will get a compilation error if the pixel type of the output image is not float or double.\n\n\nReferences: 1) D. Padfield. \"Masked object registration in the Fourier domain.\" Transactions on Image Processing. 2) D. Padfield. \"Masked FFT registration\". In Proc. Computer Vision and Pattern Recognition, 2010.\n\n\\author : Dirk Padfield, GE Global Research, padfield@research.ge.com", "itk_module" : "ITKConvolution", "itk_group" : "Convolution" } diff --git a/Code/BasicFilters/json/FFTPadImageFilter.json b/Code/BasicFilters/json/FFTPadImageFilter.json index b7c125219..f7db9d2a0 100644 --- a/Code/BasicFilters/json/FFTPadImageFilter.json +++ b/Code/BasicFilters/json/FFTPadImageFilter.json @@ -65,7 +65,7 @@ } ], "briefdescription" : "Pad an image to make it suitable for an FFT transformation.", - "detaileddescription" : "FFT filters usually requires a specific image size. The size is decomposed in several prime factors, and the filter only supports prime factors up to a maximum value. This filter automatically finds the greatest prime factor required by the available implementation and pads the input appropriately.\n\nThis code was adapted from the Insight Journal contribution:\n\n\"FFT Based Convolution\" by Gaetan Lehmann https://hdl.handle.net/10380/3154 \n\n\\author Gaetan Lehmann\n\n\\see FFTShiftImageFilter", + "detaileddescription" : "FFT filters usually requires a specific image size. The size is decomposed in several prime factors, and the filter only supports prime factors up to a maximum value. This filter automatically finds the greatest prime factor required by the available implementation and pads the input appropriately.\n\nThis code was adapted from the Insight Journal contribution:\n\n\"FFT Based Convolution\" by Gaetan Lehmann https://hdl.handle.net/10380/3154 \n\n\\author Gaetan Lehmann\n\n\n\\see FFTShiftImageFilter", "itk_module" : "ITKFFT", "itk_group" : "FFT" } diff --git a/Code/BasicFilters/json/FFTShiftImageFilter.json b/Code/BasicFilters/json/FFTShiftImageFilter.json index 5f795b2b1..ffa6911a9 100644 --- a/Code/BasicFilters/json/FFTShiftImageFilter.json +++ b/Code/BasicFilters/json/FFTShiftImageFilter.json @@ -38,7 +38,7 @@ } ], "briefdescription" : "Shift the zero-frequency components of a Fourier transform to the center of the image.", - "detaileddescription" : "The Fourier transform produces an image where the zero frequency components are in the corner of the image, making it difficult to understand. This filter shifts the component to the center of the image.\n\n\\note For images with an odd-sized dimension, applying this filter twice will not produce the same image as the original one without using SetInverse(true) on one (and only one) of the two filters.\n\nhttps://hdl.handle.net/1926/321 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ForwardFFTImageFilter , InverseFFTImageFilter", + "detaileddescription" : "The Fourier transform produces an image where the zero frequency components are in the corner of the image, making it difficult to understand. This filter shifts the component to the center of the image.\n\n\\note For images with an odd-sized dimension, applying this filter twice will not produce the same image as the original one without using SetInverse(true) on one (and only one) of the two filters.\n\n\nhttps://hdl.handle.net/1926/321 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ForwardFFTImageFilter , InverseFFTImageFilter", "itk_module" : "ITKFFT", "itk_group" : "FFT" } diff --git a/Code/BasicFilters/json/FastMarchingBaseImageFilter.json b/Code/BasicFilters/json/FastMarchingBaseImageFilter.json index 0b032b3d1..06ad491f9 100644 --- a/Code/BasicFilters/json/FastMarchingBaseImageFilter.json +++ b/Code/BasicFilters/json/FastMarchingBaseImageFilter.json @@ -84,7 +84,7 @@ } ], "briefdescription" : "Apply the Fast Marching method to solve an Eikonal equation on an image.", - "detaileddescription" : "The speed function can be specified as a speed image or a speed constant. The speed image is set using the method SetInput(). If the speed image is ITK_NULLPTR, a constant speed function is used and is specified using method the SetSpeedConstant() .\n\nIf the speed function is constant and of value one, fast marching results is an approximate distance function from the initial alive points.\n\nThere are two ways to specify the output image information (LargestPossibleRegion, Spacing, Origin): \n\n\\li it is copied directly from the input speed image \n\n\\li it is specified by the user. Default values are used if the user does not specify all the information.\n\n\nThe output information is computed as follows.\n\nIf the speed image is ITK_NULLPTR or if the OverrideOutputInformation is set to true, the output information is set from user specified parameters. These parameters can be specified using methods \n\n\\li FastMarchingImageFilterBase::SetOutputRegion() , \n\n\\li FastMarchingImageFilterBase::SetOutputSpacing() , \n\n\\li FastMarchingImageFilterBase::SetOutputDirection() , \n\n\\li FastMarchingImageFilterBase::SetOutputOrigin() .\n\n\nElse the output information is copied from the input speed image.\n\nImplementation of this class is based on Chapter 8 of \"Level Set Methods and Fast Marching Methods\", J.A. Sethian, Cambridge Press, Second edition, 1999.\n\nFor an alternative implementation, see itk::FastMarchingImageFilter .\n\n\nTTraits\n\ntraits\n\n\n\n\\see FastMarchingImageFilter \n\n\\see ImageFastMarchingTraits \n\n\\see ImageFastMarchingTraits2", + "detaileddescription" : "The speed function can be specified as a speed image or a speed constant. The speed image is set using the method SetInput(). If the speed image is nullptr, a constant speed function is used and is specified using method the SetSpeedConstant() .\n\nIf the speed function is constant and of value one, fast marching results is an approximate distance function from the initial alive points.\n\nThere are two ways to specify the output image information (LargestPossibleRegion, Spacing, Origin): \n\n\\li it is copied directly from the input speed image \n\n\n\\li it is specified by the user. Default values are used if the user does not specify all the information.\n\n\n\nThe output information is computed as follows.\n\nIf the speed image is nullptr or if the OverrideOutputInformation is set to true, the output information is set from user specified parameters. These parameters can be specified using methods \n\n\\li FastMarchingImageFilterBase::SetOutputRegion() , \n\n\n\\li FastMarchingImageFilterBase::SetOutputSpacing() , \n\n\n\\li FastMarchingImageFilterBase::SetOutputDirection() , \n\n\n\\li FastMarchingImageFilterBase::SetOutputOrigin() .\n\n\n\nElse the output information is copied from the input speed image.\n\nImplementation of this class is based on Chapter 8 of \"Level Set Methods and Fast Marching Methods\", J.A. Sethian, Cambridge Press, Second edition, 1999.\n\nFor an alternative implementation, see itk::FastMarchingImageFilter .\n\n\n\nTTraits\n\ntraits\n\n\n\n\\see FastMarchingImageFilter \n\n\n\\see ImageFastMarchingTraits \n\n\n\\see ImageFastMarchingTraits2", "itk_module" : "ITKFastMarching", "itk_group" : "FastMarching" } diff --git a/Code/BasicFilters/json/FastMarchingImageFilter.json b/Code/BasicFilters/json/FastMarchingImageFilter.json index 6379c0c68..9af4f3bf7 100644 --- a/Code/BasicFilters/json/FastMarchingImageFilter.json +++ b/Code/BasicFilters/json/FastMarchingImageFilter.json @@ -80,7 +80,7 @@ } ], "briefdescription" : "Solve an Eikonal equation using Fast Marching.", - "detaileddescription" : "Fast marching solves an Eikonal equation where the speed is always non-negative and depends on the position only. Starting from an initial position on the front, fast marching systematically moves the front forward one grid point at a time.\n\nUpdates are preformed using an entropy satisfy scheme where only \"upwind\" neighborhoods are used. This implementation of Fast Marching uses a std::priority_queue to locate the next proper grid position to update.\n\nFast Marching sweeps through N grid points in (N log N) steps to obtain the arrival time value as the front propagates through the grid.\n\nImplementation of this class is based on Chapter 8 of \"Level Set Methods and Fast Marching Methods\", J.A. Sethian, Cambridge Press, Second edition, 1999.\n\nThis class is templated over the level set image type and the speed image type. The initial front is specified by two containers: one containing the known points and one containing the trial points. Alive points are those that are already part of the object, and trial points are considered for inclusion. In order for the filter to evolve, at least some trial points must be specified. These can for instance be specified as the layer of pixels around the alive points.\n\nThe speed function can be specified as a speed image or a speed constant. The speed image is set using the method SetInput() . If the speed image is ITK_NULLPTR, a constant speed function is used and is specified using method the SetSpeedConstant() .\n\nIf the speed function is constant and of value one, fast marching results in an approximate distance function from the initial alive points. FastMarchingImageFilter is used in the ReinitializeLevelSetImageFilter object to create a signed distance function from the zero level set.\n\nThe algorithm can be terminated early by setting an appropriate stopping value. The algorithm terminates when the current arrival time being processed is greater than the stopping value.\n\nThere are two ways to specify the output image information ( LargestPossibleRegion, Spacing, Origin): (a) it is copied directly from the input speed image or (b) it is specified by the user. Default values are used if the user does not specify all the information.\n\nThe output information is computed as follows. If the speed image is ITK_NULLPTR or if the OverrideOutputInformation is set to true, the output information is set from user specified parameters. These parameters can be specified using methods SetOutputRegion() , SetOutputSpacing() , SetOutputDirection() , and SetOutputOrigin() . Else if the speed image is not ITK_NULLPTR, the output information is copied from the input speed image.\n\nFor an alternative implementation, see itk::FastMarchingImageFilter .\n\nPossible Improvements: In the current implementation, std::priority_queue only allows taking nodes out from the front and putting nodes in from the back. To update a value already on the heap, a new node is added to the heap. The defunct old node is left on the heap. When it is removed from the top, it will be recognized as invalid and not used. Future implementations can implement the heap in a different way allowing the values to be updated. This will generally require some sift-up and sift-down functions and an image of back-pointers going from the image to heap in order to locate the node which is to be updated.\n\n\\see FastMarchingImageFilterBase \n\n\\see LevelSetTypeDefault", + "detaileddescription" : "Fast marching solves an Eikonal equation where the speed is always non-negative and depends on the position only. Starting from an initial position on the front, fast marching systematically moves the front forward one grid point at a time.\n\nUpdates are performed using an entropy satisfy scheme where only \"upwind\" neighborhoods are used. This implementation of Fast Marching uses a std::priority_queue to locate the next proper grid position to update.\n\nFast Marching sweeps through N grid points in (N log N) steps to obtain the arrival time value as the front propagates through the grid.\n\nImplementation of this class is based on Chapter 8 of \"Level Set Methods and Fast Marching Methods\", J.A. Sethian, Cambridge Press, Second edition, 1999.\n\nThis class is templated over the level set image type and the speed image type. The initial front is specified by two containers: one containing the known points and one containing the trial points. Alive points are those that are already part of the object, and trial points are considered for inclusion. In order for the filter to evolve, at least some trial points must be specified. These can for instance be specified as the layer of pixels around the alive points.\n\nThe speed function can be specified as a speed image or a speed constant. The speed image is set using the method SetInput() . If the speed image is nullptr, a constant speed function is used and is specified using method the SetSpeedConstant() .\n\nIf the speed function is constant and of value one, fast marching results in an approximate distance function from the initial alive points. FastMarchingImageFilter is used in the ReinitializeLevelSetImageFilter object to create a signed distance function from the zero level set.\n\nThe algorithm can be terminated early by setting an appropriate stopping value. The algorithm terminates when the current arrival time being processed is greater than the stopping value.\n\nThere are two ways to specify the output image information ( LargestPossibleRegion, Spacing, Origin): (a) it is copied directly from the input speed image or (b) it is specified by the user. Default values are used if the user does not specify all the information.\n\nThe output information is computed as follows. If the speed image is nullptr or if the OverrideOutputInformation is set to true, the output information is set from user specified parameters. These parameters can be specified using methods SetOutputRegion() , SetOutputSpacing() , SetOutputDirection() , and SetOutputOrigin() . Else if the speed image is not nullptr, the output information is copied from the input speed image.\n\nFor an alternative implementation, see itk::FastMarchingImageFilter .\n\nPossible Improvements: In the current implementation, std::priority_queue only allows taking nodes out from the front and putting nodes in from the back. To update a value already on the heap, a new node is added to the heap. The defunct old node is left on the heap. When it is removed from the top, it will be recognized as invalid and not used. Future implementations can implement the heap in a different way allowing the values to be updated. This will generally require some sift-up and sift-down functions and an image of back-pointers going from the image to heap in order to locate the node which is to be updated.\n\n\\see FastMarchingImageFilterBase \n\n\n\\see LevelSetTypeDefault", "itk_module" : "ITKFastMarching", "itk_group" : "FastMarching" } diff --git a/Code/BasicFilters/json/FastMarchingUpwindGradientImageFilter.json b/Code/BasicFilters/json/FastMarchingUpwindGradientImageFilter.json index fe9e82dff..5b602e291 100644 --- a/Code/BasicFilters/json/FastMarchingUpwindGradientImageFilter.json +++ b/Code/BasicFilters/json/FastMarchingUpwindGradientImageFilter.json @@ -111,7 +111,7 @@ } ], "briefdescription" : "Generates the upwind gradient field of fast marching arrival times.", - "detaileddescription" : "This filter adds some extra functionality to its base class. While the solution T(x) of the Eikonal equation is being generated by the base class with the fast marching method, the filter generates the upwind gradient vectors of T(x), storing them in an image.\n\nSince the Eikonal equation generates the arrival times of a wave travelling at a given speed, the generated gradient vectors can be interpreted as the slowness (1/velocity) vectors of the front (the quantity inside the modulus operator in the Eikonal equation).\n\nGradient vectors are computed using upwind finite differences, that is, information only propagates from points where the wavefront has already passed. This is consistent with how the fast marching method works.\n\nOne more extra feature is the possibility to define a set of Target points where the propagation stops. This can be used to avoid computing the Eikonal solution for the whole domain. The front can be stopped either when one Target point is reached or all Target points are reached. The propagation can stop after a time TargetOffset has passed since the stop condition is met. This way the solution is computed a bit downstream the Target points, so that the level sets of T(x) corresponding to the Target are smooth.\n\nFor an alternative implementation, see itk::FastMarchingUpwindGradientImageFilterBase .\n\n\\author Luca Antiga Ph.D. Biomedical Technologies Laboratory, Bioengineering Department, Mario Negri Institute, Italy.", + "detaileddescription" : "This filter adds some extra functionality to its base class. While the solution T(x) of the Eikonal equation is being generated by the base class with the fast marching method, the filter generates the upwind gradient vectors of T(x), storing them in an image.\n\nSince the Eikonal equation generates the arrival times of a wave traveling at a given speed, the generated gradient vectors can be interpreted as the slowness (1/velocity) vectors of the front (the quantity inside the modulus operator in the Eikonal equation).\n\nGradient vectors are computed using upwind finite differences, that is, information only propagates from points where the wavefront has already passed. This is consistent with how the fast marching method works.\n\nOne more extra feature is the possibility to define a set of Target points where the propagation stops. This can be used to avoid computing the Eikonal solution for the whole domain. The front can be stopped either when one Target point is reached or all Target points are reached. The propagation can stop after a time TargetOffset has passed since the stop condition is met. This way the solution is computed a bit downstream the Target points, so that the level sets of T(x) corresponding to the Target are smooth.\n\nFor an alternative implementation, see itk::FastMarchingUpwindGradientImageFilterBase .\n\n\\author Luca Antiga Ph.D. Biomedical Technologies Laboratory, Bioengineering Department, Mario Negri Institute, Italy.", "itk_module" : "ITKFastMarching", "itk_group" : "FastMarching" } diff --git a/Code/BasicFilters/json/FastSymmetricForcesDemonsRegistrationFilter.json b/Code/BasicFilters/json/FastSymmetricForcesDemonsRegistrationFilter.json index fc11ce8bd..072735493 100644 --- a/Code/BasicFilters/json/FastSymmetricForcesDemonsRegistrationFilter.json +++ b/Code/BasicFilters/json/FastSymmetricForcesDemonsRegistrationFilter.json @@ -207,7 +207,7 @@ } ], "briefdescription" : "Deformably register two images using a symmetric forces demons algorithm.", - "detaileddescription" : "This class was contributed by Tom Vercauteren, INRIA & Mauna Kea Technologies based on a variation of the DemonsRegistrationFilter .\n\nFastSymmetricForcesDemonsRegistrationFilter implements the demons deformable algorithm that register two images by computing the deformation field which will map a moving image onto a fixed image.\n\nA deformation field is represented as a image whose pixel type is some vector type with at least N elements, where N is the dimension of the fixed image. The vector type must support element access via operator []. It is assumed that the vector elements behave like floating point scalars.\n\nThis class is templated over the fixed image type, moving image type and the deformation field type.\n\nThe input fixed and moving images are set via methods SetFixedImage and SetMovingImage respectively. An initial deformation field maybe set via SetInitialDisplacementField or SetInput. If no initial field is set, a zero field is used as the initial condition.\n\nThe output deformation field can be obtained via methods GetOutput or GetDisplacementField.\n\nThis class make use of the finite difference solver hierarchy. Update for each iteration is computed in DemonsRegistrationFunction .\n\n\\author Tom Vercauteren, INRIA & Mauna Kea Technologies\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/510 \n\n\\warning This filter assumes that the fixed image type, moving image type and deformation field type all have the same number of dimensions.\n\n\\see DemonsRegistrationFilter \n\n\\see DemonsRegistrationFunction", + "detaileddescription" : "This class was contributed by Tom Vercauteren, INRIA & Mauna Kea Technologies based on a variation of the DemonsRegistrationFilter .\n\nFastSymmetricForcesDemonsRegistrationFilter implements the demons deformable algorithm that register two images by computing the deformation field which will map a moving image onto a fixed image.\n\nA deformation field is represented as a image whose pixel type is some vector type with at least N elements, where N is the dimension of the fixed image. The vector type must support element access via operator []. It is assumed that the vector elements behave like floating point scalars.\n\nThis class is templated over the fixed image type, moving image type and the deformation field type.\n\nThe input fixed and moving images are set via methods SetFixedImage and SetMovingImage respectively. An initial deformation field maybe set via SetInitialDisplacementField or SetInput. If no initial field is set, a zero field is used as the initial condition.\n\nThe output deformation field can be obtained via methods GetOutput or GetDisplacementField.\n\nThis class make use of the finite difference solver hierarchy. Update for each iteration is computed in DemonsRegistrationFunction .\n\n\\author Tom Vercauteren, INRIA & Mauna Kea Technologies\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/510 \n\n\\warning This filter assumes that the fixed image type, moving image type and deformation field type all have the same number of dimensions.\n\n\n\\see DemonsRegistrationFilter \n\n\n\\see DemonsRegistrationFunction", "itk_module" : "ITKPDEDeformableRegistration", "itk_group" : "PDEDeformable" } diff --git a/Code/BasicFilters/json/ForwardFFTImageFilter.json b/Code/BasicFilters/json/ForwardFFTImageFilter.json index 6550c3b97..988773fd9 100644 --- a/Code/BasicFilters/json/ForwardFFTImageFilter.json +++ b/Code/BasicFilters/json/ForwardFFTImageFilter.json @@ -19,7 +19,7 @@ } ], "briefdescription" : "Base class for forward Fast Fourier Transform .", - "detaileddescription" : "This is a base class for the \"forward\" or \"direct\" discrete Fourier Transform . This is an abstract base class: the actual implementation is provided by the best child class available on the system when the object is created via the object factory system.\n\nThis class transforms a real input image into its full complex Fourier transform. The Fourier transform of a real input image has Hermitian symmetry: \\f$ f(\\mathbf{x}) = f^*(-\\mathbf{x}) \\f$ . That is, when the result of the transform is split in half along the x-dimension, the values in the second half of the transform are the complex conjugates of values in the first half reflected about the center of the image in each dimension.\n\nThis filter works only for real single-component input image types.\n\n\\see InverseFFTImageFilter , FFTComplexToComplexImageFilter", + "detaileddescription" : "This is a base class for the \"forward\" or \"direct\" discrete Fourier Transform . This is an abstract base class: the actual implementation is provided by the best child class available on the system when the object is created via the object factory system.\n\nThis class transforms a real input image into its full complex Fourier transform. The Fourier transform of a real input image has Hermitian symmetry: \\f$ f(\\mathbf{x}) = f^*(-\\mathbf{x}) \\f$ . That is, when the result of the transform is split in half along the x-dimension, the values in the second half of the transform are the complex conjugates of values in the first half reflected about the center of the image in each dimension.\n\nThis filter works only for real single-component input image types.\n\nThe output generated from a ForwardFFTImageFilter is in the dual space or frequency domain. Refer to FrequencyFFTLayoutImageRegionConstIteratorWithIndex for a description of the layout of frequencies generated after a forward FFT. Also see ITKImageFrequency for a set of filters requiring input images in the frequency domain.\n\n\\see InverseFFTImageFilter , FFTComplexToComplexImageFilter", "itk_module" : "ITKFFT", "itk_group" : "FFT" } diff --git a/Code/BasicFilters/json/GeodesicActiveContourLevelSetImageFilter.json b/Code/BasicFilters/json/GeodesicActiveContourLevelSetImageFilter.json index 3f15c1f2f..a711f017f 100644 --- a/Code/BasicFilters/json/GeodesicActiveContourLevelSetImageFilter.json +++ b/Code/BasicFilters/json/GeodesicActiveContourLevelSetImageFilter.json @@ -93,7 +93,7 @@ } ], "briefdescription" : "Segments structures in images based on a user supplied edge potential map.", - "detaileddescription" : "\\par IMPORTANT\nThe SegmentationLevelSetImageFilter class and the GeodesicActiveContourLevelSetFunction class contain additional information necessary to gain full understanding of how to use this filter.\n\n\\par OVERVIEW\nThis class is a level set method segmentation filter. An initial contour is propagated outwards (or inwards) until it ''sticks'' to the shape boundaries. This is done by using a level set speed function based on a user supplied edge potential map.\n\n\\par INPUTS\nThis filter requires two inputs. The first input is a initial level set. The initial level set is a real image which contains the initial contour/surface as the zero level set. For example, a signed distance function from the initial contour/surface is typically used. Unlike the simpler ShapeDetectionLevelSetImageFilter the initial contour does not have to lie wholly within the shape to be segmented. The initial contour is allow to overlap the shape boundary. The extra advection term in the update equation behaves like a doublet and attracts the contour to the boundary. This approach for segmentation follows that of Caselles et al (1997).\n\n\\par \nThe second input is the feature image. For this filter, this is the edge potential map. General characteristics of an edge potential map is that it has values close to zero in regions near the edges and values close to one inside the shape itself. Typically, the edge potential map is compute from the image gradient, for example:\n\n \\f[ g(I) = 1 / ( 1 + | (\\nabla * G)(I)| ) \\f] \\f[ g(I) = \\exp^{-|(\\nabla * G)(I)|} \\f] \n\nwhere \\f$ I \\f$ is image intensity and \\f$ (\\nabla * G) \\f$ is the derivative of Gaussian operator.\n\n\\par \nSee SegmentationLevelSetImageFilter and SparseFieldLevelSetImageFilter for more information on Inputs.\n\n\\par PARAMETERS\nThe PropagationScaling parameter can be used to switch from propagation outwards (POSITIVE scaling parameter) versus propagating inwards (NEGATIVE scaling parameter).\n\nThis implementation allows the user to set the weights between the propagation, advection and curvature term using methods SetPropagationScaling() , SetAdvectionScaling() , SetCurvatureScaling() . In general, the larger the CurvatureScaling, the smoother the resulting contour. To follow the implementation in Caselles et al paper, set the PropagationScaling to \\f$ c \\f$ (the inflation or ballon force) and AdvectionScaling and CurvatureScaling both to 1.0.\n\n\\par OUTPUTS\nThe filter outputs a single, scalar, real-valued image. Negative values in the output image represent the inside of the segmented region and positive values in the image represent the outside of the segmented region. The zero crossings of the image correspond to the position of the propagating front.\n\n\\par \nSee SparseFieldLevelSetImageFilter and SegmentationLevelSetImageFilter for more information.\n\n\\par REFERENCES\n\n\n\\par \n\"Geodesic Active Contours\", V. Caselles, R. Kimmel and G. Sapiro. International Journal on Computer Vision, Vol 22, No. 1, pp 61-97, 1997\n\n\\see SegmentationLevelSetImageFilter \n\n\\see GeodesicActiveContourLevelSetFunction \n\n\\see SparseFieldLevelSetImageFilter", + "detaileddescription" : "\\par IMPORTANT\nThe SegmentationLevelSetImageFilter class and the GeodesicActiveContourLevelSetFunction class contain additional information necessary to gain full understanding of how to use this filter.\n\n\n\\par OVERVIEW\nThis class is a level set method segmentation filter. An initial contour is propagated outwards (or inwards) until it ''sticks'' to the shape boundaries. This is done by using a level set speed function based on a user supplied edge potential map.\n\n\n\\par INPUTS\nThis filter requires two inputs. The first input is a initial level set. The initial level set is a real image which contains the initial contour/surface as the zero level set. For example, a signed distance function from the initial contour/surface is typically used. Unlike the simpler ShapeDetectionLevelSetImageFilter the initial contour does not have to lie wholly within the shape to be segmented. The initial contour is allow to overlap the shape boundary. The extra advection term in the update equation behaves like a doublet and attracts the contour to the boundary. This approach for segmentation follows that of Caselles et al (1997).\n\n\n\\par \nThe second input is the feature image. For this filter, this is the edge potential map. General characteristics of an edge potential map is that it has values close to zero in regions near the edges and values close to one inside the shape itself. Typically, the edge potential map is compute from the image gradient, for example:\n\n\n \\f[ g(I) = 1 / ( 1 + | (\\nabla * G)(I)| ) \\f] \\f[ g(I) = \\exp^{-|(\\nabla * G)(I)|} \\f] \n\nwhere \\f$ I \\f$ is image intensity and \\f$ (\\nabla * G) \\f$ is the derivative of Gaussian operator.\n\n\\par \nSee SegmentationLevelSetImageFilter and SparseFieldLevelSetImageFilter for more information on Inputs.\n\n\n\\par PARAMETERS\nThe PropagationScaling parameter can be used to switch from propagation outwards (POSITIVE scaling parameter) versus propagating inwards (NEGATIVE scaling parameter).\n\n\nThis implementation allows the user to set the weights between the propagation, advection and curvature term using methods SetPropagationScaling() , SetAdvectionScaling() , SetCurvatureScaling() . In general, the larger the CurvatureScaling, the smoother the resulting contour. To follow the implementation in Caselles et al paper, set the PropagationScaling to \\f$ c \\f$ (the inflation or ballon force) and AdvectionScaling and CurvatureScaling both to 1.0.\n\n\\par OUTPUTS\nThe filter outputs a single, scalar, real-valued image. Negative values in the output image represent the inside of the segmented region and positive values in the image represent the outside of the segmented region. The zero crossings of the image correspond to the position of the propagating front.\n\n\n\\par \nSee SparseFieldLevelSetImageFilter and SegmentationLevelSetImageFilter for more information.\n\n\n\\par REFERENCES\n\n\n\n\\par \n\"Geodesic Active Contours\", V. Caselles, R. Kimmel and G. Sapiro. International Journal on Computer Vision, Vol 22, No. 1, pp 61-97, 1997\n\n\n\\see SegmentationLevelSetImageFilter \n\n\n\\see GeodesicActiveContourLevelSetFunction \n\n\n\\see SparseFieldLevelSetImageFilter", "itk_module" : "ITKLevelSets", "itk_group" : "LevelSets" } diff --git a/Code/BasicFilters/json/GradientAnisotropicDiffusionImageFilter.json b/Code/BasicFilters/json/GradientAnisotropicDiffusionImageFilter.json index c59aa46ff..bd2f167be 100644 --- a/Code/BasicFilters/json/GradientAnisotropicDiffusionImageFilter.json +++ b/Code/BasicFilters/json/GradientAnisotropicDiffusionImageFilter.json @@ -86,7 +86,7 @@ } ], "briefdescription" : "", - "detaileddescription" : "This filter performs anisotropic diffusion on a scalar itk::Image using the classic Perona-Malik, gradient magnitude based equation implemented in itkGradientNDAnisotropicDiffusionFunction. For detailed information on anisotropic diffusion, see itkAnisotropicDiffusionFunction and itkGradientNDAnisotropicDiffusionFunction.\n\n\\par Inputs and Outputs\nThe input to this filter should be a scalar itk::Image of any dimensionality. The output image will be a diffused copy of the input.\n\n\\par Parameters\nPlease see the description of parameters given in itkAnisotropicDiffusionImageFilter.\n\n\\see AnisotropicDiffusionImageFilter \n\n\\see AnisotropicDiffusionFunction \n\n\\see GradientAnisotropicDiffusionFunction", + "detaileddescription" : "This filter performs anisotropic diffusion on a scalar itk::Image using the classic Perona-Malik, gradient magnitude based equation implemented in itkGradientNDAnisotropicDiffusionFunction. For detailed information on anisotropic diffusion, see itkAnisotropicDiffusionFunction and itkGradientNDAnisotropicDiffusionFunction.\n\n\\par Inputs and Outputs\nThe input to this filter should be a scalar itk::Image of any dimensionality. The output image will be a diffused copy of the input.\n\n\n\\par Parameters\nPlease see the description of parameters given in itkAnisotropicDiffusionImageFilter.\n\n\n\\see AnisotropicDiffusionImageFilter \n\n\n\\see AnisotropicDiffusionFunction \n\n\n\\see GradientAnisotropicDiffusionFunction", "itk_module" : "ITKAnisotropicSmoothing", "itk_group" : "AnisotropicSmoothing" } diff --git a/Code/BasicFilters/json/GradientImageFilter.json b/Code/BasicFilters/json/GradientImageFilter.json index a95d5278c..82a65895a 100644 --- a/Code/BasicFilters/json/GradientImageFilter.json +++ b/Code/BasicFilters/json/GradientImageFilter.json @@ -48,7 +48,7 @@ } ], "briefdescription" : "Computes the gradient of an image using directional derivatives.", - "detaileddescription" : "Computes the gradient of an image using directional derivatives. The directional derivative at each pixel location is computed by convolution with a first-order derivative operator.\n\nThe second template parameter defines the value type used in the derivative operator (defaults to float). The third template parameter defines the value type used for output image (defaults to float). The output image is defined as a covariant vector image whose value type is specified as this third template parameter.\n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator", + "detaileddescription" : "Computes the gradient of an image using directional derivatives. The directional derivative at each pixel location is computed by convolution with a first-order derivative operator.\n\nThe second template parameter defines the value type used in the derivative operator (defaults to float). The third template parameter defines the value type used for output image (defaults to float). The output image is defined as a covariant vector image whose value type is specified as this third template parameter.\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator", "itk_module" : "ITKImageGradient", "itk_group" : "ImageGradient" } diff --git a/Code/BasicFilters/json/GrayscaleConnectedClosingImageFilter.json b/Code/BasicFilters/json/GrayscaleConnectedClosingImageFilter.json index 2a4619c12..f435abcd0 100644 --- a/Code/BasicFilters/json/GrayscaleConnectedClosingImageFilter.json +++ b/Code/BasicFilters/json/GrayscaleConnectedClosingImageFilter.json @@ -57,8 +57,8 @@ ] } ], - "briefdescription" : "Enhance pixels associated with a dark object (identified by a seed pixel) where the dark object is surrounded by a brigher object.", - "detaileddescription" : "GrayscaleConnectedClosingImagefilter is useful for enhancing dark objects that are surrounded by bright borders. This filter makes it easier to threshold the image and extract just the object of interest.\n\nGeodesic morphology and the connected closing algorithm are described in Chapter 6 of Pierre Soille's book \"Morphological Image\nAnalysis: Principles and Applications\", Second Edition, Springer, 2003.\n\n\\see GrayscaleGeodesicDilateImageFilter \n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", + "briefdescription" : "Enhance pixels associated with a dark object (identified by a seed pixel) where the dark object is surrounded by a brighter object.", + "detaileddescription" : "GrayscaleConnectedClosingImagefilter is useful for enhancing dark objects that are surrounded by bright borders. This filter makes it easier to threshold the image and extract just the object of interest.\n\nGeodesic morphology and the connected closing algorithm are described in Chapter 6 of Pierre Soille's book \"Morphological Image\nAnalysis: Principles and Applications\", Second Edition, Springer, 2003.\n\n\\see GrayscaleGeodesicDilateImageFilter \n\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/GrayscaleConnectedOpeningImageFilter.json b/Code/BasicFilters/json/GrayscaleConnectedOpeningImageFilter.json index 4231a945e..84f05770b 100644 --- a/Code/BasicFilters/json/GrayscaleConnectedOpeningImageFilter.json +++ b/Code/BasicFilters/json/GrayscaleConnectedOpeningImageFilter.json @@ -58,7 +58,7 @@ } ], "briefdescription" : "Enhance pixels associated with a bright object (identified by a seed pixel) where the bright object is surrounded by a darker object.", - "detaileddescription" : "GrayscaleConnectedOpeningImagefilter is useful for enhancing bright objects that are surrounded by dark borders. This filter makes it easier to threshold the image and extract just the object of interest.\n\nGeodesic morphology and the connected opening algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image\nAnalysis: Principles and Applications\", Second Edition, Springer, 2003.\n\n\\see GrayscaleGeodesicDilateImageFilter \n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", + "detaileddescription" : "GrayscaleConnectedOpeningImagefilter is useful for enhancing bright objects that are surrounded by dark borders. This filter makes it easier to threshold the image and extract just the object of interest.\n\nGeodesic morphology and the connected opening algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image\nAnalysis: Principles and Applications\", Second Edition, Springer, 2003.\n\n\\see GrayscaleGeodesicDilateImageFilter \n\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/GrayscaleFillholeImageFilter.json b/Code/BasicFilters/json/GrayscaleFillholeImageFilter.json index fd0ba1724..166934670 100644 --- a/Code/BasicFilters/json/GrayscaleFillholeImageFilter.json +++ b/Code/BasicFilters/json/GrayscaleFillholeImageFilter.json @@ -40,7 +40,7 @@ } ], "briefdescription" : "Remove local minima not connected to the boundary of the image.", - "detaileddescription" : "GrayscaleFillholeImageFilter fills holes in a grayscale image. Holes are local minima in the grayscale topography that are not connected to boundaries of the image. Gray level values adjacent to a hole are extrapolated across the hole.\n\nThis filter is used to smooth over local minima without affecting the values of local maxima. If you take the difference between the output of this filter and the original image (and perhaps threshold the difference above a small value), you'll obtain a map of the local minima.\n\nThis filter uses the ReconstructionByErosionImageFilter . It provides its own input as the \"mask\" input to the geodesic erosion. The \"marker\" image for the geodesic erosion is constructed such that boundary pixels match the boundary pixels of the input image and the interior pixels are set to the maximum pixel value in the input image.\n\nGeodesic morphology and the Fillhole algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\n\\see ReconstructionByErosionImageFilter \n\n\\see MorphologyImageFilter , GrayscaleErodeImageFilter , GrayscaleFunctionErodeImageFilter , BinaryErodeImageFilter", + "detaileddescription" : "GrayscaleFillholeImageFilter fills holes in a grayscale image. Holes are local minima in the grayscale topography that are not connected to boundaries of the image. Gray level values adjacent to a hole are extrapolated across the hole.\n\nThis filter is used to smooth over local minima without affecting the values of local maxima. If you take the difference between the output of this filter and the original image (and perhaps threshold the difference above a small value), you'll obtain a map of the local minima.\n\nThis filter uses the ReconstructionByErosionImageFilter . It provides its own input as the \"mask\" input to the geodesic erosion. The \"marker\" image for the geodesic erosion is constructed such that boundary pixels match the boundary pixels of the input image and the interior pixels are set to the maximum pixel value in the input image.\n\nGeodesic morphology and the Fillhole algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\n\\see ReconstructionByErosionImageFilter \n\n\n\\see MorphologyImageFilter , GrayscaleErodeImageFilter , GrayscaleFunctionErodeImageFilter , BinaryErodeImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/GrayscaleGrindPeakImageFilter.json b/Code/BasicFilters/json/GrayscaleGrindPeakImageFilter.json index d3e988dd7..f5dfd7d39 100644 --- a/Code/BasicFilters/json/GrayscaleGrindPeakImageFilter.json +++ b/Code/BasicFilters/json/GrayscaleGrindPeakImageFilter.json @@ -40,7 +40,7 @@ } ], "briefdescription" : "Remove local maxima not connected to the boundary of the image.", - "detaileddescription" : "GrayscaleGrindPeakImageFilter removes peaks in a grayscale image. Peaks are local maxima in the grayscale topography that are not connected to boundaries of the image. Gray level values adjacent to a peak are extrapolated through the peak.\n\nThis filter is used to smooth over local maxima without affecting the values of local minima. If you take the difference between the output of this filter and the original image (and perhaps threshold the difference above a small value), you'll obtain a map of the local maxima.\n\nThis filter uses the GrayscaleGeodesicDilateImageFilter . It provides its own input as the \"mask\" input to the geodesic erosion. The \"marker\" image for the geodesic erosion is constructed such that boundary pixels match the boundary pixels of the input image and the interior pixels are set to the minimum pixel value in the input image.\n\nThis filter is the dual to the GrayscaleFillholeImageFilter which implements the Fillhole algorithm. Since it is a dual, it is somewhat superfluous but is provided as a convenience.\n\nGeodesic morphology and the Fillhole algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\n\\see GrayscaleGeodesicDilateImageFilter \n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", + "detaileddescription" : "GrayscaleGrindPeakImageFilter removes peaks in a grayscale image. Peaks are local maxima in the grayscale topography that are not connected to boundaries of the image. Gray level values adjacent to a peak are extrapolated through the peak.\n\nThis filter is used to smooth over local maxima without affecting the values of local minima. If you take the difference between the output of this filter and the original image (and perhaps threshold the difference above a small value), you'll obtain a map of the local maxima.\n\nThis filter uses the GrayscaleGeodesicDilateImageFilter . It provides its own input as the \"mask\" input to the geodesic erosion. The \"marker\" image for the geodesic erosion is constructed such that boundary pixels match the boundary pixels of the input image and the interior pixels are set to the minimum pixel value in the input image.\n\nThis filter is the dual to the GrayscaleFillholeImageFilter which implements the Fillhole algorithm. Since it is a dual, it is somewhat superfluous but is provided as a convenience.\n\nGeodesic morphology and the Fillhole algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\n\\see GrayscaleGeodesicDilateImageFilter \n\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/GreaterEqualImageFilter.json b/Code/BasicFilters/json/GreaterEqualImageFilter.json index 5955ea153..7ba4777cb 100644 --- a/Code/BasicFilters/json/GreaterEqualImageFilter.json +++ b/Code/BasicFilters/json/GreaterEqualImageFilter.json @@ -57,7 +57,7 @@ } ], "briefdescription" : "Implements pixel-wise generic operation of two images, or of an image and a constant.", - "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", + "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see BinaryGeneratorImagFilter \n\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", "itk_module" : "ITKImageFilterBase", "itk_group" : "ImageFilterBase" } diff --git a/Code/BasicFilters/json/GreaterImageFilter.json b/Code/BasicFilters/json/GreaterImageFilter.json index f831e92e2..5a6c39ce5 100644 --- a/Code/BasicFilters/json/GreaterImageFilter.json +++ b/Code/BasicFilters/json/GreaterImageFilter.json @@ -57,7 +57,7 @@ } ], "briefdescription" : "Implements pixel-wise generic operation of two images, or of an image and a constant.", - "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", + "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see BinaryGeneratorImagFilter \n\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", "itk_module" : "ITKImageFilterBase", "itk_group" : "ImageFilterBase" } diff --git a/Code/BasicFilters/json/GridImageSource.json b/Code/BasicFilters/json/GridImageSource.json index 9753d394b..f2a5a872f 100644 --- a/Code/BasicFilters/json/GridImageSource.json +++ b/Code/BasicFilters/json/GridImageSource.json @@ -96,7 +96,7 @@ } ], "briefdescription" : "Generate an n-dimensional image of a grid.", - "detaileddescription" : "GridImageSource generates an image of a grid. From the abstract... \"Certain classes of images find disparate use amongst members of the ITK community for such purposes as visualization, simulation, testing, etc. Currently there exists two derived classes from the ImageSource class used for generating specific images for various applications, viz. RandomImageSource and GaussianImageSource . We propose to add to this set with the class GridImageSource which, obviously enough, produces a grid image. Such images are useful for visualizing deformation when used in conjunction with the WarpImageFilter , simulating magnetic resonance tagging images, or creating optical illusions with which to amaze your friends.\"\n\nThe output image may be of any dimension.\n\n\\author Tustison N., Avants B., Gee J. University of Pennsylvania\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/475", + "detaileddescription" : "GridImageSource generates an image of a grid. From the abstract... \"Certain classes of images find disparate use amongst members of the ITK community for such purposes as visualization, simulation, testing, etc. Currently there exists two derived classes from the ImageSource class used for generating specific images for various applications, viz. RandomImageSource and GaussianImageSource . We propose to add to this set with the class GridImageSource which, obviously enough, produces a grid image. Such images are useful for visualizing deformation when used in conjunction with the WarpImageFilter , simulating magnetic resonance tagging images, or creating optical illusions with which to amaze your friends.\"\n\nThe output image may be of any dimension.\n\n\\author Tustison N., Avants B., Gee J. University of Pennsylvania\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/475", "itk_module" : "ITKImageSources", "itk_group" : "ImageSources" } diff --git a/Code/BasicFilters/json/HConcaveImageFilter.json b/Code/BasicFilters/json/HConcaveImageFilter.json index 876d38b60..7333980b8 100644 --- a/Code/BasicFilters/json/HConcaveImageFilter.json +++ b/Code/BasicFilters/json/HConcaveImageFilter.json @@ -45,7 +45,7 @@ } ], "briefdescription" : "Identify local minima whose depth below the baseline is greater than h.", - "detaileddescription" : "HConcaveImageFilter extract local minima that are more than h intensity units below the (local) background. This has the effect of extracting objects that are darker than the background by at least h intensity units.\n\nThis filter uses the HMinimaImageFilter .\n\nGeodesic morphology and the H-Convex algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\n\\see GrayscaleGeodesicDilateImageFilter , HMaximaImageFilter , \n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", + "detaileddescription" : "HConcaveImageFilter extract local minima that are more than h intensity units below the (local) background. This has the effect of extracting objects that are darker than the background by at least h intensity units.\n\nThis filter uses the HMinimaImageFilter .\n\nGeodesic morphology and the H-Convex algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\n\\see GrayscaleGeodesicDilateImageFilter , HMaximaImageFilter , \n\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/HConvexImageFilter.json b/Code/BasicFilters/json/HConvexImageFilter.json index 41a53b4d2..050827e15 100644 --- a/Code/BasicFilters/json/HConvexImageFilter.json +++ b/Code/BasicFilters/json/HConvexImageFilter.json @@ -45,7 +45,7 @@ } ], "briefdescription" : "Identify local maxima whose height above the baseline is greater than h.", - "detaileddescription" : "HConvexImageFilter extract local maxima that are more than h intensity units above the (local) background. This has the effect of extracting objects that are brighter than background by at least h intensity units.\n\nThis filter uses the HMaximaImageFilter .\n\nGeodesic morphology and the H-Convex algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\n\\see GrayscaleGeodesicDilateImageFilter , HMinimaImageFilter \n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", + "detaileddescription" : "HConvexImageFilter extract local maxima that are more than h intensity units above the (local) background. This has the effect of extracting objects that are brighter than background by at least h intensity units.\n\nThis filter uses the HMaximaImageFilter .\n\nGeodesic morphology and the H-Convex algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\n\\see GrayscaleGeodesicDilateImageFilter , HMinimaImageFilter \n\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/HMaximaImageFilter.json b/Code/BasicFilters/json/HMaximaImageFilter.json index 2445d57b0..7c6c612d4 100644 --- a/Code/BasicFilters/json/HMaximaImageFilter.json +++ b/Code/BasicFilters/json/HMaximaImageFilter.json @@ -35,7 +35,7 @@ } ], "briefdescription" : "Suppress local maxima whose height above the baseline is less than h.", - "detaileddescription" : "HMaximaImageFilter suppresses local maxima that are less than h intensity units above the (local) background. This has the effect of smoothing over the \"high\" parts of the noise in the image without smoothing over large changes in intensity (region boundaries). See the HMinimaImageFilter to suppress the local minima whose depth is less than h intensity units below the (local) background.\n\nIf the output of HMaximaImageFilter is subtracted from the original image, the signicant \"peaks\" in the image can be identified. This is what the HConvexImageFilter provides.\n\nThis filter uses the ReconstructionByDilationImageFilter . It provides its own input as the \"mask\" input to the geodesic dilation. The \"marker\" image for the geodesic dilation is the input image minus the height parameter h.\n\nGeodesic morphology and the H-Maxima algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\nThe height parameter is set using SetHeight.\n\n\\see ReconstructionByDilationImageFilter , HMinimaImageFilter , HConvexImageFilter \n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", + "detaileddescription" : "HMaximaImageFilter suppresses local maxima that are less than h intensity units above the (local) background. This has the effect of smoothing over the \"high\" parts of the noise in the image without smoothing over large changes in intensity (region boundaries). See the HMinimaImageFilter to suppress the local minima whose depth is less than h intensity units below the (local) background.\n\nIf the output of HMaximaImageFilter is subtracted from the original image, the significant \"peaks\" in the image can be identified. This is what the HConvexImageFilter provides.\n\nThis filter uses the ReconstructionByDilationImageFilter . It provides its own input as the \"mask\" input to the geodesic dilation. The \"marker\" image for the geodesic dilation is the input image minus the height parameter h.\n\nGeodesic morphology and the H-Maxima algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\nThe height parameter is set using SetHeight.\n\n\\see ReconstructionByDilationImageFilter , HMinimaImageFilter , HConvexImageFilter \n\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/HMinimaImageFilter.json b/Code/BasicFilters/json/HMinimaImageFilter.json index 8d181d520..8bdb18b59 100644 --- a/Code/BasicFilters/json/HMinimaImageFilter.json +++ b/Code/BasicFilters/json/HMinimaImageFilter.json @@ -45,7 +45,7 @@ } ], "briefdescription" : "Suppress local minima whose depth below the baseline is less than h.", - "detaileddescription" : "HMinimaImageFilter suppresses local minima that are less than h intensity units below the (local) background. This has the effect of smoothing over the \"low\" parts of the noise in the image without smoothing over large changes in intensity (region boundaries). See the HMaximaImageFilter to suppress the local maxima whose height is less than h intensity units above the (local) background.\n\nIf original image is subtracted from the output of HMinimaImageFilter , the signicant \"valleys\" in the image can be identified. This is what the HConcaveImageFilter provides.\n\nThis filter uses the GrayscaleGeodesicErodeImageFilter . It provides its own input as the \"mask\" input to the geodesic dilation. The \"marker\" image for the geodesic dilation is the input image plus the height parameter h.\n\nGeodesic morphology and the H-Minima algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\n\\see GrayscaleGeodesicDilateImageFilter , HMinimaImageFilter , HConvexImageFilter \n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", + "detaileddescription" : "HMinimaImageFilter suppresses local minima that are less than h intensity units below the (local) background. This has the effect of smoothing over the \"low\" parts of the noise in the image without smoothing over large changes in intensity (region boundaries). See the HMaximaImageFilter to suppress the local maxima whose height is less than h intensity units above the (local) background.\n\nIf original image is subtracted from the output of HMinimaImageFilter , the significant \"valleys\" in the image can be identified. This is what the HConcaveImageFilter provides.\n\nThis filter uses the GrayscaleGeodesicErodeImageFilter . It provides its own input as the \"mask\" input to the geodesic dilation. The \"marker\" image for the geodesic dilation is the input image plus the height parameter h.\n\nGeodesic morphology and the H-Minima algorithm is described in Chapter 6 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\n\\see GrayscaleGeodesicDilateImageFilter , HMinimaImageFilter , HConvexImageFilter \n\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/HistogramMatchingImageFilter.json b/Code/BasicFilters/json/HistogramMatchingImageFilter.json index 11c9c921c..4eac48094 100644 --- a/Code/BasicFilters/json/HistogramMatchingImageFilter.json +++ b/Code/BasicFilters/json/HistogramMatchingImageFilter.json @@ -69,8 +69,8 @@ ] } ], - "briefdescription" : "Normalize the grayscale values between two images by histogram matching.", - "detaileddescription" : "HistogramMatchingImageFilter normalizes the grayscale values of a source image based on the grayscale values of a reference image. This filter uses a histogram matching technique where the histograms of the two images are matched only at a specified number of quantile values.\n\nThis filter was originally designed to normalize MR images of the same MR protocol and same body part. The algorithm works best if background pixels are excluded from both the source and reference histograms. A simple background exclusion method is to exclude all pixels whose grayscale values are smaller than the mean grayscale value. ThresholdAtMeanIntensityOn() switches on this simple background exclusion method.\n\nThe source image can be set via either SetInput() or SetSourceImage() . The reference image can be set via SetReferenceImage() .\n\nSetNumberOfHistogramLevels() sets the number of bins used when creating histograms of the source and reference images. SetNumberOfMatchPoints() governs the number of quantile values to be matched.\n\nThis filter assumes that both the source and reference are of the same type and that the input and output image type have the same number of dimension and have scalar pixel types.\n\n\\par REFERENCE\nLaszlo G. Nyul, Jayaram K. Udupa, and Xuan Zhang, \"New Variants of a Method\nof MRI Scale Standardization\", IEEE Transactions on Medical Imaging, 19(2):143-150, 2000.", + "briefdescription" : "Normalize the grayscale values for a source image by matching the shape of the source image histogram to a reference histogram.", + "detaileddescription" : "HistogramMatchingImageFilter normalizes the grayscale values of a source image based on the grayscale values of either a reference image or a reference histogram. This filter uses a histogram matching technique where the histograms of the are matched only at a specified number of quantile values.\n\nThis filter was originally designed to normalize MR images of the same MR protocol and same body part. The algorithm works best if background pixels are excluded from both the source and reference histograms. A simple background exclusion method is to exclude all pixels whose grayscale values are smaller than the mean grayscale value. ThresholdAtMeanIntensityOn() switches on this simple background exclusion method. With ThresholdAtMeanIntensityOn() , The reference histogram returned from this filter will expand the first and last bin bounds to include the minimum and maximum intensity values of the entire reference image, but only intensity values greater than the mean will be used to populate the histogram.\n\nThe source image can be set via either SetInput() or SetSourceImage() . The reference object used is selected with can be set via SetReferenceImage() or SetReferenceHistogram() .\n\nSetNumberOfHistogramLevels() sets the number of bins used when creating histograms of the source and reference images. SetNumberOfMatchPoints() governs the number of quantile values to be matched.\n\nThis filter assumes that both the source and reference are of the same type and that the input and output image type have the same number of dimension and have scalar pixel types.\n\n\\par REFERENCE\nLaszlo G. Nyul, Jayaram K. Udupa, and Xuan Zhang, \"New Variants of a Method\nof MRI Scale Standardization\", IEEE Transactions on Medical Imaging, 19(2):143-150, 2000.", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/HuangThresholdImageFilter.json b/Code/BasicFilters/json/HuangThresholdImageFilter.json index 87ac21fbd..93b136a43 100644 --- a/Code/BasicFilters/json/HuangThresholdImageFilter.json +++ b/Code/BasicFilters/json/HuangThresholdImageFilter.json @@ -126,7 +126,7 @@ } ], "briefdescription" : "Threshold an image using the Huang Threshold.", - "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the HuangThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", + "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the HuangThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/IntermodesThresholdImageFilter.json b/Code/BasicFilters/json/IntermodesThresholdImageFilter.json index 0959e35ff..10c2aab93 100644 --- a/Code/BasicFilters/json/IntermodesThresholdImageFilter.json +++ b/Code/BasicFilters/json/IntermodesThresholdImageFilter.json @@ -126,7 +126,7 @@ } ], "briefdescription" : "Threshold an image using the Intermodes Threshold.", - "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the IntermodesThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", + "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the IntermodesThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/InverseDeconvolutionImageFilter.json b/Code/BasicFilters/json/InverseDeconvolutionImageFilter.json index 20aa56bd2..eeddcd129 100644 --- a/Code/BasicFilters/json/InverseDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/InverseDeconvolutionImageFilter.json @@ -15,9 +15,9 @@ "type" : "double", "default" : "1.0e-4", "briefdescriptionSet" : "", - "detaileddescriptionSet" : "Set/get the threshold value uused to determine whether a frequency of the Fourier transform of the blurring kernel is considered to be zero. Default value is 1.0e-4.", + "detaileddescriptionSet" : "Set/get the threshold value used to determine whether a frequency of the Fourier transform of the blurring kernel is considered to be zero. Default value is 1.0e-4.", "briefdescriptionGet" : "", - "detaileddescriptionGet" : "Set/get the threshold value uused to determine whether a frequency of the Fourier transform of the blurring kernel is considered to be zero. Default value is 1.0e-4." + "detaileddescriptionGet" : "Set/get the threshold value used to determine whether a frequency of the Fourier transform of the blurring kernel is considered to be zero. Default value is 1.0e-4." }, { "name" : "Normalize", @@ -69,7 +69,7 @@ } ], "briefdescription" : "The direct linear inverse deconvolution filter.", - "detaileddescription" : "The inverse filter is the most straightforward deconvolution method. Considering that convolution of two images in the spatial domain is equivalent to multiplying the Fourier transform of the two images, the inverse filter consists of inverting the multiplication. In other words, this filter computes the following: \\f[ hat{F}(\\omega) = \\begin{cases} G(\\omega) / H(\\omega) & \\text{if \\f$|H(\\omega)| \\geq \\epsilon\\f$} \\\\ 0 & \\text{otherwise} \\end{cases} \\f] where \\f$\\hat{F}(\\omega)\\f$ is the Fourier transform of the estimate produced by this filter, \\f$G(\\omega)\\f$ is the Fourier transform of the input blurred image, \\f$H(\\omega)\\f$ is the Fourier transform of the blurring kernel, and \\f$\\epsilon\\f$ is a constant real non-negative threshold (called KernelZeroMagnitudeThreshold in this filter) that determines when the magnitude of a complex number is considered zero.\n\n\\author Gaetan Lehmann, Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France \n\n\\author Cory Quammen, The University of North Carolina at Chapel Hill", + "detaileddescription" : "The inverse filter is the most straightforward deconvolution method. Considering that convolution of two images in the spatial domain is equivalent to multiplying the Fourier transform of the two images, the inverse filter consists of inverting the multiplication. In other words, this filter computes the following: \\f[ hat{F}(\\omega) = \\begin{cases} G(\\omega) / H(\\omega) & \\text{if \\f$|H(\\omega)| \\geq \\epsilon\\f$} \\\\ 0 & \\text{otherwise} \\end{cases} \\f] where \\f$\\hat{F}(\\omega)\\f$ is the Fourier transform of the estimate produced by this filter, \\f$G(\\omega)\\f$ is the Fourier transform of the input blurred image, \\f$H(\\omega)\\f$ is the Fourier transform of the blurring kernel, and \\f$\\epsilon\\f$ is a constant real non-negative threshold (called KernelZeroMagnitudeThreshold in this filter) that determines when the magnitude of a complex number is considered zero.\n\n\\author Gaetan Lehmann, Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France \n\n\n\\author Cory Quammen, The University of North Carolina at Chapel Hill", "itk_module" : "ITKDeconvolution", "itk_group" : "Deconvolution" } diff --git a/Code/BasicFilters/json/InvertDisplacementFieldImageFilter.json b/Code/BasicFilters/json/InvertDisplacementFieldImageFilter.json index eabbbc611..bfa71df5f 100644 --- a/Code/BasicFilters/json/InvertDisplacementFieldImageFilter.json +++ b/Code/BasicFilters/json/InvertDisplacementFieldImageFilter.json @@ -77,7 +77,7 @@ } ], "briefdescription" : "Iteratively estimate the inverse field of a displacement field.", - "detaileddescription" : "\\author Nick Tustison \n\n\\author Brian Avants", + "detaileddescription" : "\\author Nick Tustison \n\n\n\\author Brian Avants", "itk_module" : "ITKDisplacementField", "itk_group" : "DisplacementField" } diff --git a/Code/BasicFilters/json/InvertIntensityImageFilter.json b/Code/BasicFilters/json/InvertIntensityImageFilter.json index f3798164d..8062274da 100644 --- a/Code/BasicFilters/json/InvertIntensityImageFilter.json +++ b/Code/BasicFilters/json/InvertIntensityImageFilter.json @@ -31,7 +31,7 @@ } ], "briefdescription" : "Invert the intensity of an image.", - "detaileddescription" : "InvertIntensityImageFilter inverts intensity of pixels by subtracting pixel value to a maximum value. The maximum value can be set with SetMaximum and defaults the maximum of input pixel type. This filter can be used to invert, for example, a binary image, a distance map, etc.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see IntensityWindowingImageFilter ShiftScaleImageFilter", + "detaileddescription" : "InvertIntensityImageFilter inverts intensity of pixels by subtracting pixel value to a maximum value. The maximum value can be set with SetMaximum and defaults the maximum of input pixel type. This filter can be used to invert, for example, a binary image, a distance map, etc.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see IntensityWindowingImageFilter ShiftScaleImageFilter", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/IsoContourDistanceImageFilter.json b/Code/BasicFilters/json/IsoContourDistanceImageFilter.json index c5a7d79c8..4d12cbc03 100644 --- a/Code/BasicFilters/json/IsoContourDistanceImageFilter.json +++ b/Code/BasicFilters/json/IsoContourDistanceImageFilter.json @@ -44,7 +44,7 @@ } ], "briefdescription" : "Compute an approximate distance from an interpolated isocontour to the close grid points.", - "detaileddescription" : "For standard level set algorithms, it is useful to periodically reinitialize the evolving image to prevent numerical accuracy problems in computing derivatives. This reinitialization is done by computing a signed distance map to the current level set. This class provides the first step in this reinitialization by computing an estimate of the distance from the interpolated isocontour to the pixels (or voxels) that are close to it, i.e. for which the isocontour crosses a segment between them and one of their direct neighbors. This class supports narrowbanding. If the input narrowband is provided, the algorithm will only locate the level set within the input narrowband.\n\nImplementation of this class is based on Fast and Accurate Redistancing for Level Set Methods `Krissian K. and Westin C.F.', EUROCAST NeuroImaging Workshop Las Palmas Spain, Ninth International Conference on Computer Aided Systems Theory , pages 48-51, Feb 2003.", + "detaileddescription" : "For standard level set algorithms, it is useful to periodically reinitialize the evolving image to prevent numerical accuracy problems in computing derivatives. This reinitialization is done by computing a signed distance map to the current level set. This class provides the first step in this reinitialization by computing an estimate of the distance from the interpolated isocontour to the pixels (or voxels) that are close to it, i.e. for which the isocontour crosses a segment between them and one of their direct neighbors. This class supports narrowbanding. If the input narrowband is provided, the algorithm will only locate the level set within the input narrowband.\n\nImplementation of this class is based on Fast and Accurate Redistancing for Level Set Methods Krissian K. and Westin C.F., EUROCAST NeuroImaging Workshop Las Palmas Spain, Ninth International Conference on Computer Aided Systems Theory , pages 48-51, Feb 2003.", "itk_module" : "ITKDistanceMap", "itk_group" : "DistanceMap" } diff --git a/Code/BasicFilters/json/IsoDataThresholdImageFilter.json b/Code/BasicFilters/json/IsoDataThresholdImageFilter.json index 89b1270fc..5df380988 100644 --- a/Code/BasicFilters/json/IsoDataThresholdImageFilter.json +++ b/Code/BasicFilters/json/IsoDataThresholdImageFilter.json @@ -113,7 +113,7 @@ } ], "briefdescription" : "Threshold an image using the IsoData Threshold.", - "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the IsoDataThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", + "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the IsoDataThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/IterativeInverseDisplacementFieldImageFilter.json b/Code/BasicFilters/json/IterativeInverseDisplacementFieldImageFilter.json index 78ea3edba..ca99e1d30 100644 --- a/Code/BasicFilters/json/IterativeInverseDisplacementFieldImageFilter.json +++ b/Code/BasicFilters/json/IterativeInverseDisplacementFieldImageFilter.json @@ -46,7 +46,7 @@ } ], "briefdescription" : "Computes the inverse of a displacement field.", - "detaileddescription" : "IterativeInverseDisplacementFieldImageFilter takes a displacement field as input and computes the displacement field that is its inverse. If the input displacement field was mapping coordinates from a space A into a space B, the output of this filter will map coordinates from the space B into the space A.\n\nThe algorithm implemented in this filter uses an iterative method for progresively refining the values of the inverse field. Starting from the direct field, at every pixel the direct mapping of this point is found, and a the nevative of the current displacement is stored in the inverse field at the nearest pixel. Then, subsequent iterations verify if any of the neigbor pixels provide a better return to the current pixel, in which case its value is taken for updating the vector in the inverse field.\n\nThis method was discussed in the users-list during February 2004.\n\n\\author Corinne Mattmann", + "detaileddescription" : "IterativeInverseDisplacementFieldImageFilter takes a displacement field as input and computes the displacement field that is its inverse. If the input displacement field was mapping coordinates from a space A into a space B, the output of this filter will map coordinates from the space B into the space A.\n\nThe algorithm implemented in this filter uses an iterative method for progressively refining the values of the inverse field. Starting from the direct field, at every pixel the direct mapping of this point is found, and a the negative of the current displacement is stored in the inverse field at the nearest pixel. Then, subsequent iterations verify if any of the neighbor pixels provide a better return to the current pixel, in which case its value is taken for updating the vector in the inverse field.\n\nThis method was discussed in the users-list during February 2004.\n\n\\author Corinne Mattmann", "itk_module" : "ITKDisplacementField", "itk_group" : "DisplacementField" } diff --git a/Code/BasicFilters/json/JoinSeriesImageFilter.json b/Code/BasicFilters/json/JoinSeriesImageFilter.json index ca4755b73..9418cdbcf 100644 --- a/Code/BasicFilters/json/JoinSeriesImageFilter.json +++ b/Code/BasicFilters/json/JoinSeriesImageFilter.json @@ -105,7 +105,7 @@ } ], "briefdescription" : "Join N-D images into an (N+1)-D image.", - "detaileddescription" : "This filter is templated over the input image type and the output image type. The pixel type of them must be the same and the input dimension must be less than the output dimension. When the input images are N-dimensinal, they are joined in order and the size of the N+1'th dimension of the output is same as the number of the inputs. The spacing and the origin (where the first input is placed) for the N+1'th dimension is specified in this filter. The output image informations for the first N dimensions are taken from the first input. Note that all the inputs should have the same information.\n\n\\author Hideaki Hiraki\n\nContributed in the users list http://public.kitware.com/pipermail/insight-users/2004-February/006542.html", + "detaileddescription" : "This filter is templated over the input image type and the output image type. The pixel type of them must be the same and the input dimension must be less than the output dimension. When the input images are N-dimensional, they are joined in order and the size of the N+1'th dimension of the output is same as the number of the inputs. The spacing and the origin (where the first input is placed) for the N+1'th dimension is specified in this filter. The output image informations for the first N dimensions are taken from the first input. Note that all the inputs should have the same information.\n\n\\author Hideaki Hiraki\n\n\nContributed in the users list http://public.kitware.com/pipermail/insight-users/2004-February/006542.html", "itk_module" : "ITKImageCompose", "itk_group" : "ImageCompose" } diff --git a/Code/BasicFilters/json/KittlerIllingworthThresholdImageFilter.json b/Code/BasicFilters/json/KittlerIllingworthThresholdImageFilter.json index 4a336cb21..aab1bda11 100644 --- a/Code/BasicFilters/json/KittlerIllingworthThresholdImageFilter.json +++ b/Code/BasicFilters/json/KittlerIllingworthThresholdImageFilter.json @@ -126,7 +126,7 @@ } ], "briefdescription" : "Threshold an image using the KittlerIllingworth Threshold.", - "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the KittlerIllingworthThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", + "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the KittlerIllingworthThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/LabelContourImageFilter.json b/Code/BasicFilters/json/LabelContourImageFilter.json index 17e05bcfb..f1fef3265 100644 --- a/Code/BasicFilters/json/LabelContourImageFilter.json +++ b/Code/BasicFilters/json/LabelContourImageFilter.json @@ -39,7 +39,7 @@ } ], "briefdescription" : "Labels the pixels on the border of the objects in a labeled image.", - "detaileddescription" : "LabelContourImageFilter takes a labeled image as input, where the pixels in the objects are the pixels with a value different of the BackgroundValue. Only the pixels on the contours of the objects are kept. The pixels not on the border are changed to BackgroundValue. The labels of the object are the same in the input and in the output image.\n\nThe connectivity can be changed to minimum or maximum connectivity with SetFullyConnected() . Full connectivity produces thicker contours.\n\nhttps://hdl.handle.net/1926/1352 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see BinaryContourImageFilter", + "detaileddescription" : "LabelContourImageFilter takes a labeled image as input, where the pixels in the objects are the pixels with a value different of the BackgroundValue. Only the pixels on the contours of the objects are kept. The pixels not on the border are changed to BackgroundValue. The labels of the object are the same in the input and in the output image.\n\nThe connectivity can be changed to minimum or maximum connectivity with SetFullyConnected() . Full connectivity produces thicker contours.\n\nhttps://hdl.handle.net/1926/1352 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see BinaryContourImageFilter", "itk_module" : "ITKImageLabel", "itk_group" : "ImageLabel" } diff --git a/Code/BasicFilters/json/LabelImageToLabelMapFilter.json b/Code/BasicFilters/json/LabelImageToLabelMapFilter.json index 670532855..6ba2126a1 100644 --- a/Code/BasicFilters/json/LabelImageToLabelMapFilter.json +++ b/Code/BasicFilters/json/LabelImageToLabelMapFilter.json @@ -45,7 +45,7 @@ } ], "briefdescription" : "convert a labeled image to a label collection image", - "detaileddescription" : "LabelImageToLabelMapFilter converts a label image to a label collection image. The labels are the same in the input and the output image.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see BinaryImageToLabelMapFilter , LabelMapToLabelImageFilter", + "detaileddescription" : "LabelImageToLabelMapFilter converts a label image to a label collection image. The labels are the same in the input and the output image.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see BinaryImageToLabelMapFilter , LabelMapToLabelImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/LabelIntensityStatisticsImageFilter.json b/Code/BasicFilters/json/LabelIntensityStatisticsImageFilter.json index edd2a32d5..881408e83 100644 --- a/Code/BasicFilters/json/LabelIntensityStatisticsImageFilter.json +++ b/Code/BasicFilters/json/LabelIntensityStatisticsImageFilter.json @@ -745,7 +745,7 @@ } ], "briefdescription" : "a convenient class to convert a label image to a label map and valuate the statistics attributes at once", - "detaileddescription" : "\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see StatisticsLabelObject , LabelStatisticsOpeningImageFilter , LabelStatisticsOpeningImageFilter", + "detaileddescription" : "\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see StatisticsLabelObject , LabelStatisticsOpeningImageFilter , LabelStatisticsOpeningImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/LabelMapContourOverlayImageFilter.json b/Code/BasicFilters/json/LabelMapContourOverlayImageFilter.json index e312b5720..1fb20e3f9 100644 --- a/Code/BasicFilters/json/LabelMapContourOverlayImageFilter.json +++ b/Code/BasicFilters/json/LabelMapContourOverlayImageFilter.json @@ -113,7 +113,7 @@ } ], "briefdescription" : "Apply a colormap to the contours (outlines) of each object in a label map and superimpose it on top of the feature image.", - "detaileddescription" : "The feature image is typically the image from which the labeling was produced. Use the SetInput function to set the LabelMap , and the SetFeatureImage function to set the feature image.\n\nApply a colormap to a label map and put it on top of the input image. The set of colors is a good selection of distinct colors. The opacity of the label map can be defined by the user. A background label produce a gray pixel with the same intensity than the input one.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see LabelMapOverlayImageFilter , LabelOverlayImageFilter , LabelOverlayFunctor \n\n\\see LabelMapToBinaryImageFilter , LabelMapToLabelImageFilter ,", + "detaileddescription" : "The feature image is typically the image from which the labeling was produced. Use the SetInput function to set the LabelMap , and the SetFeatureImage function to set the feature image.\n\nApply a colormap to a label map and put it on top of the input image. The set of colors is a good selection of distinct colors. The opacity of the label map can be defined by the user. A background label produce a gray pixel with the same intensity than the input one.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see LabelMapOverlayImageFilter , LabelOverlayImageFilter , LabelOverlayFunctor \n\n\n\\see LabelMapToBinaryImageFilter , LabelMapToLabelImageFilter ,", "itk_module" : "ITKImageFusion", "itk_group" : "ImageFusion" } diff --git a/Code/BasicFilters/json/LabelMapMaskImageFilter.json b/Code/BasicFilters/json/LabelMapMaskImageFilter.json index f4fdc56df..db4e76238 100644 --- a/Code/BasicFilters/json/LabelMapMaskImageFilter.json +++ b/Code/BasicFilters/json/LabelMapMaskImageFilter.json @@ -113,7 +113,7 @@ } ], "briefdescription" : "Mask and image with a LabelMap .", - "detaileddescription" : "LabelMapMaskImageFilter mask the content of an input image according to the content of the input LabelMap . The masked pixel of the input image are set to the BackgroundValue. LabelMapMaskImageFilter can keep the input image for one label only, with Negated = false (the default) or it can mask the input image for a single label, when Negated equals true. In Both cases, the label is set with SetLabel() .\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see LabelMapToBinaryImageFilter , LabelMapToLabelImageFilter", + "detaileddescription" : "LabelMapMaskImageFilter mask the content of an input image according to the content of the input LabelMap . The masked pixel of the input image are set to the BackgroundValue. LabelMapMaskImageFilter can keep the input image for one label only, with Negated = false (the default) or it can mask the input image for a single label, when Negated equals true. In Both cases, the label is set with SetLabel() .\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see LabelMapToBinaryImageFilter , LabelMapToLabelImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/LabelMapOverlayImageFilter.json b/Code/BasicFilters/json/LabelMapOverlayImageFilter.json index 1048a332a..0137e5df4 100644 --- a/Code/BasicFilters/json/LabelMapOverlayImageFilter.json +++ b/Code/BasicFilters/json/LabelMapOverlayImageFilter.json @@ -55,7 +55,7 @@ } ], "briefdescription" : "Apply a colormap to a label map and superimpose it on an image.", - "detaileddescription" : "Apply a colormap to a label map and put it on top of the feature image. The feature image is typically the image from which the labeling was produced. Use the SetInput function to set the LabelMap , and the SetFeatureImage function to set the feature image.\n\nThe set of colors is a good selection of distinct colors. The opacity of the label map can be defined by the user. A background label produce a gray pixel with the same intensity than the input one.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see LabelOverlayImageFilter , LabelOverlayFunctor \n\n\\see LabelMapToRGBImageFilter , LabelMapToBinaryImageFilter , LabelMapToLabelImageFilter", + "detaileddescription" : "Apply a colormap to a label map and put it on top of the feature image. The feature image is typically the image from which the labeling was produced. Use the SetInput function to set the LabelMap , and the SetFeatureImage function to set the feature image.\n\nThe set of colors is a good selection of distinct colors. The opacity of the label map can be defined by the user. A background label produce a gray pixel with the same intensity than the input one.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see LabelOverlayImageFilter , LabelOverlayFunctor \n\n\n\\see LabelMapToRGBImageFilter , LabelMapToBinaryImageFilter , LabelMapToLabelImageFilter", "itk_module" : "ITKImageFusion", "itk_group" : "ImageFusion" } diff --git a/Code/BasicFilters/json/LabelMapToBinaryImageFilter.json b/Code/BasicFilters/json/LabelMapToBinaryImageFilter.json index a29d30ba5..b253667b3 100644 --- a/Code/BasicFilters/json/LabelMapToBinaryImageFilter.json +++ b/Code/BasicFilters/json/LabelMapToBinaryImageFilter.json @@ -43,7 +43,7 @@ } ], "briefdescription" : "Convert a LabelMap to a binary image.", - "detaileddescription" : "LabelMapToBinaryImageFilter to a binary image. All the objects in the image are used as foreground. The background values of the original binary image can be restored by passing this image to the filter with the SetBackgroundImage() method.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see LabelMapToLabelImageFilter , LabelMapMaskImageFilter", + "detaileddescription" : "LabelMapToBinaryImageFilter to a binary image. All the objects in the image are used as foreground. The background values of the original binary image can be restored by passing this image to the filter with the SetBackgroundImage() method.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see LabelMapToLabelImageFilter , LabelMapMaskImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/LabelMapToLabelImageFilter.json b/Code/BasicFilters/json/LabelMapToLabelImageFilter.json index 9ea06d541..db8754527 100644 --- a/Code/BasicFilters/json/LabelMapToLabelImageFilter.json +++ b/Code/BasicFilters/json/LabelMapToLabelImageFilter.json @@ -20,7 +20,7 @@ } ], "briefdescription" : "Converts a LabelMap to a labeled image.", - "detaileddescription" : "LabelMapToBinaryImageFilter to a label image.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see LabelMapToBinaryImageFilter , LabelMapMaskImageFilter", + "detaileddescription" : "LabelMapToBinaryImageFilter to a label image.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see LabelMapToBinaryImageFilter , LabelMapMaskImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/LabelMapToRGBImageFilter.json b/Code/BasicFilters/json/LabelMapToRGBImageFilter.json index 50c08f2f7..187bbbb57 100644 --- a/Code/BasicFilters/json/LabelMapToRGBImageFilter.json +++ b/Code/BasicFilters/json/LabelMapToRGBImageFilter.json @@ -30,7 +30,7 @@ } ], "briefdescription" : "Convert a LabelMap to a colored image.", - "detaileddescription" : "\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see LabelToRGBImageFilter , LabelToRGBFunctor \n\n\\see LabelMapOverlayImageFilter , LabelMapToBinaryImageFilter , LabelMapMaskImageFilter", + "detaileddescription" : "\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see LabelToRGBImageFilter , LabelToRGBFunctor \n\n\n\\see LabelMapOverlayImageFilter , LabelMapToBinaryImageFilter , LabelMapMaskImageFilter", "itk_module" : "ITKImageFusion", "itk_group" : "ImageFusion" } diff --git a/Code/BasicFilters/json/LabelOverlapMeasuresImageFilter.json b/Code/BasicFilters/json/LabelOverlapMeasuresImageFilter.json index 893431f2b..91324ba95 100644 --- a/Code/BasicFilters/json/LabelOverlapMeasuresImageFilter.json +++ b/Code/BasicFilters/json/LabelOverlapMeasuresImageFilter.json @@ -318,7 +318,7 @@ } ], "briefdescription" : "Computes overlap measures between the set same set of labels of pixels of two images. Background is assumed to be 0.", - "detaileddescription" : "This code was contributed in the Insight Journal paper: \"Introducing Dice, Jaccard, and Other Label Overlap Measures To ITK\" by Nicholas J. Tustison, James C. Gee https://hdl.handle.net/10380/3141 http://www.insight-journal.org/browse/publication/707 \n\n\\author Nicholas J. Tustison \n\n\\see LabelOverlapMeasuresImageFilter", + "detaileddescription" : "This code was contributed in the Insight Journal paper: \"Introducing Dice, Jaccard, and Other Label Overlap Measures To ITK\" by Nicholas J. Tustison, James C. Gee https://hdl.handle.net/10380/3141 http://www.insight-journal.org/browse/publication/707 \n\n\\author Nicholas J. Tustison \n\n\n\\see LabelOverlapMeasuresImageFilter", "itk_module" : "ITKImageStatistics", "itk_group" : "ImageStatistics" } diff --git a/Code/BasicFilters/json/LabelOverlayImageFilter.json b/Code/BasicFilters/json/LabelOverlayImageFilter.json index 8376c92fe..69f8a358e 100644 --- a/Code/BasicFilters/json/LabelOverlayImageFilter.json +++ b/Code/BasicFilters/json/LabelOverlayImageFilter.json @@ -62,7 +62,7 @@ } ], "briefdescription" : "Apply a colormap to a label image and put it on top of the input image.", - "detaileddescription" : "Apply a colormap to a label image and put it on top of the input image. The set of colors is a good selection of distinct colors. The opacity of the label image can be defined by the user. The user can also choose if the want to use a background and which label value is the background. A background label produce a gray pixel with the same intensity than the input one.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis class was contributed to the Insight Journal https://hdl.handle.net/1926/172 \n\n\\see LabelToRGBImageFilter \n\n\\see LabelMapOverlayImageFilter , LabelOverlayFunctor", + "detaileddescription" : "Apply a colormap to a label image and put it on top of the input image. The set of colors is a good selection of distinct colors. The opacity of the label image can be defined by the user. The user can also choose if the want to use a background and which label value is the background. A background label produce a gray pixel with the same intensity than the input one.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis class was contributed to the Insight Journal https://hdl.handle.net/1926/172 \n\n\\see LabelToRGBImageFilter \n\n\n\\see LabelMapOverlayImageFilter , LabelOverlayFunctor", "itk_module" : "ITKImageFusion", "itk_group" : "ImageFusion" } diff --git a/Code/BasicFilters/json/LabelShapeStatisticsImageFilter.json b/Code/BasicFilters/json/LabelShapeStatisticsImageFilter.json index 16a5e1dcb..6b3e949a7 100644 --- a/Code/BasicFilters/json/LabelShapeStatisticsImageFilter.json +++ b/Code/BasicFilters/json/LabelShapeStatisticsImageFilter.json @@ -644,7 +644,7 @@ } ], "briefdescription" : "Converts a label image to a label map and valuates the shape attributes.", - "detaileddescription" : "A convenient class that converts a label image to a label map and valuates the shape attribute at once.\n\nThis implementation was taken from the Insight Journal paper:\n\nhttps://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ShapeLabelObject , LabelShapeOpeningImageFilter , LabelStatisticsOpeningImageFilter", + "detaileddescription" : "A convenient class that converts a label image to a label map and valuates the shape attribute at once.\n\nThis implementation was taken from the Insight Journal paper:\n\nhttps://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ShapeLabelObject , LabelShapeOpeningImageFilter , LabelStatisticsOpeningImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/LabelStatisticsImageFilter.json b/Code/BasicFilters/json/LabelStatisticsImageFilter.json index 74424e55f..dfe57f956 100644 --- a/Code/BasicFilters/json/LabelStatisticsImageFilter.json +++ b/Code/BasicFilters/json/LabelStatisticsImageFilter.json @@ -271,7 +271,7 @@ } ], "briefdescription" : "Given an intensity image and a label map, compute min, max, variance and mean of the pixels associated with each label or segment.", - "detaileddescription" : "LabelStatisticsImageFilter computes the minimum, maximum, sum, mean, median, variance and sigma of regions of an intensity image, where the regions are defined via a label map (a second input). The label image should be integral type. The filter needs all of its input image. It behaves as a filter with an input and output. Thus it can be inserted in a pipline with other filters and the statistics will only be recomputed if a downstream filter changes.\n\nOptionally, the filter also computes intensity histograms on each object. If histograms are enabled, a median intensity value can also be computed, although its accuracy is limited to the bin width of the histogram. If histograms are not enabled, the median returns zero.\n\nThe filter passes its intensity input through unmodified. The filter is threaded. It computes statistics in each thread then combines them in its AfterThreadedGenerate method.", + "detaileddescription" : "LabelStatisticsImageFilter computes the minimum, maximum, sum, mean, median, variance and sigma of regions of an intensity image, where the regions are defined via a label map (a second input). The label image should be integral type. The filter needs all of its input image. It behaves as a filter with an input and output. Thus it can be inserted in a pipline with other filters and the statistics will only be recomputed if a downstream filter changes.\n\nOptionally, the filter also computes intensity histograms on each object. If histograms are enabled, a median intensity value can also be computed, although its accuracy is limited to the bin width of the histogram. If histograms are not enabled, the median returns zero.\n\nThis filter is automatically multi-threaded and can stream its input when NumberOfStreamDivisions is set to more than\n\\li Statistics are independently computed for each streamed and threaded region then merged.", "itk_module" : "ITKImageStatistics", "itk_group" : "ImageStatistics" } diff --git a/Code/BasicFilters/json/LabelToRGBImageFilter.json b/Code/BasicFilters/json/LabelToRGBImageFilter.json index 1f495f36c..aa4b063ee 100644 --- a/Code/BasicFilters/json/LabelToRGBImageFilter.json +++ b/Code/BasicFilters/json/LabelToRGBImageFilter.json @@ -66,7 +66,7 @@ } ], "briefdescription" : "Apply a colormap to a label image.", - "detaileddescription" : "Apply a colormap to a label image. The set of colors is a good selection of distinct colors. The user can choose to use a background value. In that case, a gray pixel with the same intensity than the background label is produced.\n\nThis code was contributed in the Insight Journal paper: \"The watershed transform in ITK - discussion and new developments\" by Beare R., Lehmann G. https://hdl.handle.net/1926/202 http://www.insight-journal.org/browse/publication/92 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. \n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia.\n\n\\see LabelOverlayImageFilter \n\n\\see LabelMapToRGBImageFilter , LabelToRGBFunctor, ScalarToRGBPixelFunctor", + "detaileddescription" : "Apply a colormap to a label image. The set of colors is a good selection of distinct colors. The user can choose to use a background value. In that case, a gray pixel with the same intensity than the background label is produced.\n\nThis code was contributed in the Insight Journal paper: \"The watershed transform in ITK - discussion and new developments\" by Beare R., Lehmann G. https://hdl.handle.net/1926/202 http://www.insight-journal.org/browse/publication/92 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. \n\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia.\n\n\n\\see LabelOverlayImageFilter \n\n\n\\see LabelMapToRGBImageFilter , LabelToRGBFunctor, ScalarToRGBPixelFunctor", "itk_module" : "ITKImageFusion", "itk_group" : "ImageFusion" } diff --git a/Code/BasicFilters/json/LabelUniqueLabelMapFilter.json b/Code/BasicFilters/json/LabelUniqueLabelMapFilter.json index a2a86f8c7..b185d4573 100644 --- a/Code/BasicFilters/json/LabelUniqueLabelMapFilter.json +++ b/Code/BasicFilters/json/LabelUniqueLabelMapFilter.json @@ -45,7 +45,7 @@ } ], "briefdescription" : "Make sure that the objects are not overlapping.", - "detaileddescription" : "AttributeUniqueLabelMapFilter search the overlapping zones in the overlapping objects and keeps only a single object on all the pixels of the image. The object to keep is selected according to their label.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see AttributeLabelObject", + "detaileddescription" : "AttributeUniqueLabelMapFilter search the overlapping zones in the overlapping objects and keeps only a single object on all the pixels of the image. The object to keep is selected according to their label.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\see AttributeLabelObject", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/LabelVotingImageFilter.json b/Code/BasicFilters/json/LabelVotingImageFilter.json index cc3f7a1f1..ddfe8a255 100644 --- a/Code/BasicFilters/json/LabelVotingImageFilter.json +++ b/Code/BasicFilters/json/LabelVotingImageFilter.json @@ -40,7 +40,7 @@ } ], "briefdescription" : "This filter performs pixelwise voting among an arbitrary number of input images, where each of them represents a segmentation of the same scene (i.e., image).", - "detaileddescription" : "Label voting is a simple method of classifier combination applied to image segmentation. Typically, the accuracy of the combined segmentation exceeds the accuracy of any of the input segmentations. Voting is therefore commonly used as a way of boosting segmentation performance.\n\nThe use of label voting for combination of multiple segmentations is described in\n\nT. Rohlfing and C. R. Maurer, Jr., \"Multi-classifier framework for\natlas-based image segmentation,\" Pattern Recognition Letters, 2005.\n\n\\par INPUTS\nAll input volumes to this filter must be segmentations of an image, that is, they must have discrete pixel values where each value represents a different segmented object.\n\nInput volumes must all contain the same size RequestedRegions. Not all input images must contain all possible labels, but all label values must have the same meaning in all images.\n\n\\par OUTPUTS\nThe voting filter produces a single output volume. Each output pixel contains the label that occurred most often among the labels assigned to this pixel in all the input volumes, that is, the label that received the maximum number of \"votes\" from the input pixels.. If the maximum number of votes is not unique, i.e., if more than one label have a maximum number of votes, an \"undecided\" label is assigned to that output pixel.\n\nBy default, the label used for undecided pixels is the maximum label value used in the input images plus one. Since it is possible for an image with 8 bit pixel values to use all 256 possible label values, it is permissible to combine 8 bit (i.e., byte) images into a 16 bit (i.e., short) output image.\n\n\\par PARAMETERS\nThe label used for \"undecided\" labels can be set using SetLabelForUndecidedPixels. This functionality can be unset by calling UnsetLabelForUndecidedPixels.\n\n\\author Torsten Rohlfing, SRI International, Neuroscience Program", + "detaileddescription" : "Label voting is a simple method of classifier combination applied to image segmentation. Typically, the accuracy of the combined segmentation exceeds the accuracy of any of the input segmentations. Voting is therefore commonly used as a way of boosting segmentation performance.\n\nThe use of label voting for combination of multiple segmentations is described in\n\nT. Rohlfing and C. R. Maurer, Jr., \"Multi-classifier framework for\n atlas-based image segmentation,\" Pattern Recognition Letters, 2005.\n\n\\par INPUTS\nAll input volumes to this filter must be segmentations of an image, that is, they must have discrete pixel values where each value represents a different segmented object.\n\n\nInput volumes must all contain the same size RequestedRegions. Not all input images must contain all possible labels, but all label values must have the same meaning in all images.\n\n\\par OUTPUTS\nThe voting filter produces a single output volume. Each output pixel contains the label that occurred most often among the labels assigned to this pixel in all the input volumes, that is, the label that received the maximum number of \"votes\" from the input pixels.. If the maximum number of votes is not unique, i.e., if more than one label have a maximum number of votes, an \"undecided\" label is assigned to that output pixel.\n\n\nBy default, the label used for undecided pixels is the maximum label value used in the input images plus one. Since it is possible for an image with 8 bit pixel values to use all 256 possible label values, it is permissible to combine 8 bit (i.e., byte) images into a 16 bit (i.e., short) output image.\n\n\\par PARAMETERS\nThe label used for \"undecided\" labels can be set using SetLabelForUndecidedPixels. This functionality can be unset by calling UnsetLabelForUndecidedPixels.\n\n\n\\author Torsten Rohlfing, SRI International, Neuroscience Program", "itk_module" : "ITKLabelVoting", "itk_group" : "LabelVoting" } diff --git a/Code/BasicFilters/json/LandweberDeconvolutionImageFilter.json b/Code/BasicFilters/json/LandweberDeconvolutionImageFilter.json index bfa5acc5f..91b886fed 100644 --- a/Code/BasicFilters/json/LandweberDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/LandweberDeconvolutionImageFilter.json @@ -78,7 +78,7 @@ } ], "briefdescription" : "Deconvolve an image using the Landweber deconvolution algorithm.", - "detaileddescription" : "This filter implements the Landweber deconvolution algorthm as defined in Bertero M and Boccacci P, \"Introduction to Inverse\nProblems in Imaging\", 1998. The algorithm assumes that the input image has been formed by a linear shift-invariant system with a known kernel.\n\nThe Landweber algorithm converges to a solution that minimizes the sum of squared errors \\f$||f \\otimes h - g||\\f$ where \\f$f\\f$ is the estimate of the unblurred image, \\f$\\otimes\\f$ is the convolution operator, \\f$h\\f$ is the blurring kernel, and \\f$g\\f$ is the blurred input image. As such, it is best suited for images that have zero-mean Gaussian white noise.\n\nThis is the base implementation of the Landweber algorithm. It may produce results with negative values. For a version of this algorithm that enforces a positivity constraint on each intermediate solution, see ProjectedLandweberDeconvolutionImageFilter .\n\nThis code was adapted from the Insight Journal contribution:\n\n\"Deconvolution: infrastructure and reference algorithms\" by Gaetan Lehmann https://hdl.handle.net/10380/3207 \n\n\\author Gaetan Lehmann, Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France \n\n\\author Cory Quammen, The University of North Carolina at Chapel Hill\n\n\\see IterativeDeconvolutionImageFilter \n\n\\see RichardsonLucyDeconvolutionImageFilter \n\n\\see ProjectedLandweberDeconvolutionImageFilter", + "detaileddescription" : "This filter implements the Landweber deconvolution algorthim as defined in Bertero M and Boccacci P, \"Introduction to Inverse\n Problems in Imaging\", 1998. The algorithm assumes that the input image has been formed by a linear shift-invariant system with a known kernel.\n\nThe Landweber algorithm converges to a solution that minimizes the sum of squared errors \\f$||f \\otimes h - g||\\f$ where \\f$f\\f$ is the estimate of the unblurred image, \\f$\\otimes\\f$ is the convolution operator, \\f$h\\f$ is the blurring kernel, and \\f$g\\f$ is the blurred input image. As such, it is best suited for images that have zero-mean Gaussian white noise.\n\nThis is the base implementation of the Landweber algorithm. It may produce results with negative values. For a version of this algorithm that enforces a positivity constraint on each intermediate solution, see ProjectedLandweberDeconvolutionImageFilter .\n\nThis code was adapted from the Insight Journal contribution:\n\n\"Deconvolution: infrastructure and reference algorithms\" by Gaetan Lehmann https://hdl.handle.net/10380/3207 \n\n\\author Gaetan Lehmann, Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France \n\n\n\\author Cory Quammen, The University of North Carolina at Chapel Hill\n\n\n\\see IterativeDeconvolutionImageFilter \n\n\n\\see RichardsonLucyDeconvolutionImageFilter \n\n\n\\see ProjectedLandweberDeconvolutionImageFilter", "itk_module" : "ITKDeconvolution", "itk_group" : "Deconvolution" } diff --git a/Code/BasicFilters/json/LaplacianImageFilter.json b/Code/BasicFilters/json/LaplacianImageFilter.json index 04aa117b3..e4ec6ea6e 100644 --- a/Code/BasicFilters/json/LaplacianImageFilter.json +++ b/Code/BasicFilters/json/LaplacianImageFilter.json @@ -28,7 +28,7 @@ } ], "briefdescription" : "", - "detaileddescription" : "This filter computes the Laplacian of a scalar-valued image. The Laplacian is an isotropic measure of the 2nd spatial derivative of an image. The Laplacian of an image highlights regions of rapid intensity change and is therefore often used for edge detection. Often, the Laplacian is applied to an image that has first been smoothed with a Gaussian filter in order to reduce its sensitivity to noise.\n\n\\par \nThe Laplacian at each pixel location is computed by convolution with the itk::LaplacianOperator .\n\n\\par Inputs and Outputs\nThe input to this filter is a scalar-valued itk::Image of arbitrary dimension. The output is a scalar-valued itk::Image .\n\n\\warning The pixel type of the input and output images must be of real type (float or double). ConceptChecking is used here to enforce the input pixel type. You will get a compilation error if the pixel type of the input and output images is not float or double.\n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator \n\n\\see LaplacianOperator", + "detaileddescription" : "This filter computes the Laplacian of a scalar-valued image. The Laplacian is an isotropic measure of the 2nd spatial derivative of an image. The Laplacian of an image highlights regions of rapid intensity change and is therefore often used for edge detection. Often, the Laplacian is applied to an image that has first been smoothed with a Gaussian filter in order to reduce its sensitivity to noise.\n\n\\par \nThe Laplacian at each pixel location is computed by convolution with the itk::LaplacianOperator .\n\n\n\\par Inputs and Outputs\nThe input to this filter is a scalar-valued itk::Image of arbitrary dimension. The output is a scalar-valued itk::Image .\n\n\n\\warning The pixel type of the input and output images must be of real type (float or double). ConceptChecking is used here to enforce the input pixel type. You will get a compilation error if the pixel type of the input and output images is not float or double.\n\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator \n\n\n\\see LaplacianOperator", "itk_module" : "ITKImageFeature", "itk_group" : "ImageFeature" } diff --git a/Code/BasicFilters/json/LaplacianSegmentationLevelSetImageFilter.json b/Code/BasicFilters/json/LaplacianSegmentationLevelSetImageFilter.json index c9c503c22..0ee4527d3 100644 --- a/Code/BasicFilters/json/LaplacianSegmentationLevelSetImageFilter.json +++ b/Code/BasicFilters/json/LaplacianSegmentationLevelSetImageFilter.json @@ -91,7 +91,7 @@ } ], "briefdescription" : "Segments structures in images based on a second derivative image features.", - "detaileddescription" : "\\par IMPORTANT\nThe SegmentationLevelSetImageFilter class and the LaplacianSegmentationLevelSetFunction class contain additional information necessary to the full understanding of how to use this filter.\n\n\\par OVERVIEW\nThis class is a level set method segmentation filter. It constructs a speed function which is zero at image edges as detected by a Laplacian filter. The evolving level set front will therefore tend to lock onto zero crossings in the image. The level set front moves fastest near edges.\n\n\\par \nThe Laplacian segmentation filter is intended primarily as a tool for refining existing segmentations. The initial isosurface (as given in the seed input image) should ideally be very close to the segmentation boundary of interest. The idea is that a rough segmentation can be refined by allowing the isosurface to deform slightly to achieve a better fit to the edge features of an image. One example of such an application is to refine the output of a hand segmented image.\n\n\\par \nBecause values in the Laplacian feature image will tend to be low except near edge features, this filter is not effective for segmenting large image regions from small seed surfaces.\n\n\\par INPUTS\nThis filter requires two inputs. The first input is a seed image. This seed image must contain an isosurface that you want to use as the seed for your segmentation. It can be a binary, graylevel, or floating point image. The only requirement is that it contain a closed isosurface that you will identify as the seed by setting the IsosurfaceValue parameter of the filter. For a binary image you will want to set your isosurface value halfway between your on and off values (i.e. for 0's and 1's, use an isosurface value of 0.5).\n\n\\par \nThe second input is the feature image. This is the image from which the speed function will be calculated. For most applications, this is the image that you want to segment. The desired isosurface in your seed image should lie within the region of your feature image that you are trying to segment.\n\nNote that this filter does no preprocessing of the feature image before thresholding. Because second derivative calculations are highly sensitive to noise, isotropic or anisotropic smoothing of the feature image can dramatically improve the results.\n\n\\par \nSee SegmentationLevelSetImageFilter for more information on Inputs.\n\n\\par OUTPUTS\nThe filter outputs a single, scalar, real-valued image. Positive *values in the output image are inside the segmentated region and negative *values in the image are outside of the inside region. The zero crossings of *the image correspond to the position of the level set front.\n\n\\par \nSee SparseFieldLevelSetImageFilter and SegmentationLevelSetImageFilter for more information.\n\n\\par PARAMETERS\nThis filter has no parameters other than those described in SegmentationLevelSetImageFilter .\n\n\\see SegmentationLevelSetImageFilter \n\n\\see LaplacianSegmentationLevelSetFunction , \n\n\\see SparseFieldLevelSetImageFilter", + "detaileddescription" : "\\par IMPORTANT\nThe SegmentationLevelSetImageFilter class and the LaplacianSegmentationLevelSetFunction class contain additional information necessary to the full understanding of how to use this filter.\n\n\n\\par OVERVIEW\nThis class is a level set method segmentation filter. It constructs a speed function which is zero at image edges as detected by a Laplacian filter. The evolving level set front will therefore tend to lock onto zero crossings in the image. The level set front moves fastest near edges.\n\n\n\\par \nThe Laplacian segmentation filter is intended primarily as a tool for refining existing segmentations. The initial isosurface (as given in the seed input image) should ideally be very close to the segmentation boundary of interest. The idea is that a rough segmentation can be refined by allowing the isosurface to deform slightly to achieve a better fit to the edge features of an image. One example of such an application is to refine the output of a hand segmented image.\n\n\n\\par \nBecause values in the Laplacian feature image will tend to be low except near edge features, this filter is not effective for segmenting large image regions from small seed surfaces.\n\n\n\\par INPUTS\nThis filter requires two inputs. The first input is a seed image. This seed image must contain an isosurface that you want to use as the seed for your segmentation. It can be a binary, graylevel, or floating point image. The only requirement is that it contain a closed isosurface that you will identify as the seed by setting the IsosurfaceValue parameter of the filter. For a binary image you will want to set your isosurface value halfway between your on and off values (i.e. for 0's and 1's, use an isosurface value of 0.5).\n\n\n\\par \nThe second input is the feature image. This is the image from which the speed function will be calculated. For most applications, this is the image that you want to segment. The desired isosurface in your seed image should lie within the region of your feature image that you are trying to segment.\n\n\nNote that this filter does no preprocessing of the feature image before thresholding. Because second derivative calculations are highly sensitive to noise, isotropic or anisotropic smoothing of the feature image can dramatically improve the results.\n\n\\par \nSee SegmentationLevelSetImageFilter for more information on Inputs.\n\n\n\\par OUTPUTS\nThe filter outputs a single, scalar, real-valued image. Positive *values in the output image are inside the segmented region and negative *values in the image are outside of the inside region. The zero crossings of *the image correspond to the position of the level set front.\n\n\n\\par \nSee SparseFieldLevelSetImageFilter and SegmentationLevelSetImageFilter for more information.\n\n\n\\par PARAMETERS\nThis filter has no parameters other than those described in SegmentationLevelSetImageFilter .\n\n\n\\see SegmentationLevelSetImageFilter \n\n\n\\see LaplacianSegmentationLevelSetFunction , \n\n\n\\see SparseFieldLevelSetImageFilter", "itk_module" : "ITKLevelSets", "itk_group" : "LevelSets" } diff --git a/Code/BasicFilters/json/LaplacianSharpeningImageFilter.json b/Code/BasicFilters/json/LaplacianSharpeningImageFilter.json index 5ea4b04f0..16d62e011 100644 --- a/Code/BasicFilters/json/LaplacianSharpeningImageFilter.json +++ b/Code/BasicFilters/json/LaplacianSharpeningImageFilter.json @@ -47,7 +47,7 @@ } ], "briefdescription" : "This filter sharpens an image using a Laplacian. LaplacianSharpening highlights regions of rapid intensity change and therefore highlights or enhances the edges. The result is an image that appears more in focus.", - "detaileddescription" : "\\par The LaplacianSharpening at each pixel location is computed by\nconvolution with the itk::LaplacianOperator .\n\n\\par Inputs and Outputs\nThe input to this filter is a scalar-valued itk::Image of arbitrary dimension. The output is a scalar-valued itk::Image . \n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator \n\n\\see LaplacianOperator", + "detaileddescription" : "\\par The LaplacianSharpening at each pixel location is computed by\nconvolution with the itk::LaplacianOperator .\n\n\n\\par Inputs and Outputs\nThe input to this filter is a scalar-valued itk::Image of arbitrary dimension. The output is a scalar-valued itk::Image . \n\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator \n\n\n\\see LaplacianOperator", "itk_module" : "ITKImageFeature", "itk_group" : "ImageFeature" } diff --git a/Code/BasicFilters/json/LessEqualImageFilter.json b/Code/BasicFilters/json/LessEqualImageFilter.json index 46753381c..2b40bbae0 100644 --- a/Code/BasicFilters/json/LessEqualImageFilter.json +++ b/Code/BasicFilters/json/LessEqualImageFilter.json @@ -57,7 +57,7 @@ } ], "briefdescription" : "Implements pixel-wise generic operation of two images, or of an image and a constant.", - "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", + "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see BinaryGeneratorImagFilter \n\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", "itk_module" : "ITKImageFilterBase", "itk_group" : "ImageFilterBase" } diff --git a/Code/BasicFilters/json/LessImageFilter.json b/Code/BasicFilters/json/LessImageFilter.json index 949948916..945761bc7 100644 --- a/Code/BasicFilters/json/LessImageFilter.json +++ b/Code/BasicFilters/json/LessImageFilter.json @@ -57,7 +57,7 @@ } ], "briefdescription" : "Implements pixel-wise generic operation of two images, or of an image and a constant.", - "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", + "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see BinaryGeneratorImagFilter \n\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", "itk_module" : "ITKImageFilterBase", "itk_group" : "ImageFilterBase" } diff --git a/Code/BasicFilters/json/LevelSetMotionRegistrationFilter.json b/Code/BasicFilters/json/LevelSetMotionRegistrationFilter.json index bbd5155f2..cb46dd8d0 100644 --- a/Code/BasicFilters/json/LevelSetMotionRegistrationFilter.json +++ b/Code/BasicFilters/json/LevelSetMotionRegistrationFilter.json @@ -23,7 +23,7 @@ "type" : "double", "default" : "1.0", "briefdescriptionSet" : "", - "detaileddescriptionSet" : "Set/Get the standard deviation used for smoothing the moving image prior to calculating gradients. The standard deviation is measured in physical units (for instance mm). Note that this smoothing value is not to be confused with the PDEDeformableRegistrationFilter::SetStandardDeviations() method. The method in PDEDeformableRegistrationFilter is for setting the smoothing parameters for regularizing the deformation field between interations. Those smoothing parameters are set in pixel units not physical units. Deformation field smoothing is not done by default in LevelSetMotionRegistration. This smoothing parameter is to condition the gradient calculation and parameter is specified in physical units.", + "detaileddescriptionSet" : "Set/Get the standard deviation used for smoothing the moving image prior to calculating gradients. The standard deviation is measured in physical units (for instance mm). Note that this smoothing value is not to be confused with the PDEDeformableRegistrationFilter::SetStandardDeviations() method. The method in PDEDeformableRegistrationFilter is for setting the smoothing parameters for regularizing the deformation field between iterations. Those smoothing parameters are set in pixel units not physical units. Deformation field smoothing is not done by default in LevelSetMotionRegistration. This smoothing parameter is to condition the gradient calculation and parameter is specified in physical units.", "briefdescriptionGet" : "", "detaileddescriptionGet" : "" }, @@ -170,7 +170,7 @@ } ], "briefdescription" : "Deformably register two images using level set motion.", - "detaileddescription" : "LevelSetMotionFilter implements a deformable registration algorithm that aligns a fixed and a moving image under level set motion. The equations of motion are similar to those of the DemonsRegistrationFilter . The main differences are: (1) Gradients of the moving image are calculated on a smoothed image while intensity difference are measured on the original images (2) Magnitude of the motion vector is a function of the differences in intensity between the fixed and moving pixel. An adaptive timestep is calculated based on the maximum motion vector over the entire field to ensure stability. The timestep also implictly converts the motion vector measured in units of intensity to a vector measured in physical units. Demons, on the other hand, defines its motion vectors as function of both the intensity differences and gradient magnitude at each respective pixel. Consider two separate pixels with the same intensity differences between the corresponding fixed and moving pixel pairs. In demons, the motion vector of the pixel over a low gradient region will be larger than the motion vector of the pixel over a large gradient region. This leads to an unstable vector field. In the levelset approach, the motion vectors will be proportional to the gradients, scaled by the maximum gradient over the entire field. The pixel with at the lower gradient position will more less than the pixel at the higher gradient position. (3) Gradients are calculated using minmod finite difference instead of using central differences.\n\nA deformation field is represented as a image whose pixel type is some vector type with at least N elements, where N is the dimension of the fixed image. The vector type must support element access via operator []. It is assumed that the vector elements behave like floating point scalars.\n\nThis class is templated over the fixed image type, moving image type and the deformation field type.\n\nThe input fixed and moving images are set via methods SetFixedImage and SetMovingImage respectively. An initial deformation field maybe set via SetInitialDisplacementField or SetInput. If no initial field is set, a zero field is used as the initial condition.\n\nThe algorithm has one parameters: the number of iteration to be performed.\n\nThe output deformation field can be obtained via methods GetOutput or GetDisplacementField.\n\nThis class make use of the finite difference solver hierarchy. Update for each iteration is computed in LevelSetMotionFunction.\n\n\\warning This filter assumes that the fixed image type, moving image type and deformation field type all have the same number of dimensions.\n\nRef: B.C. Vemuri, J. Ye, Y. Chen, C.M. Leonard. \"Image registration via level-set motion: applications to atlas-based segmentation\". Medical Image Analysis. Vol. 7. pp. 1-20. 2003.\n\n\\see LevelSetMotionRegistrationFunction \n\n\\see DemonsRegistrationFilter", + "detaileddescription" : "LevelSetMotionFilter implements a deformable registration algorithm that aligns a fixed and a moving image under level set motion. The equations of motion are similar to those of the DemonsRegistrationFilter . The main differences are: (1) Gradients of the moving image are calculated on a smoothed image while intensity difference are measured on the original images (2) Magnitude of the motion vector is a function of the differences in intensity between the fixed and moving pixel. An adaptive timestep is calculated based on the maximum motion vector over the entire field to ensure stability. The timestep also implicitly converts the motion vector measured in units of intensity to a vector measured in physical units. Demons, on the other hand, defines its motion vectors as function of both the intensity differences and gradient magnitude at each respective pixel. Consider two separate pixels with the same intensity differences between the corresponding fixed and moving pixel pairs. In demons, the motion vector of the pixel over a low gradient region will be larger than the motion vector of the pixel over a large gradient region. This leads to an unstable vector field. In the levelset approach, the motion vectors will be proportional to the gradients, scaled by the maximum gradient over the entire field. The pixel with at the lower gradient position will more less than the pixel at the higher gradient position. (3) Gradients are calculated using minmod finite difference instead of using central differences.\n\nA deformation field is represented as a image whose pixel type is some vector type with at least N elements, where N is the dimension of the fixed image. The vector type must support element access via operator []. It is assumed that the vector elements behave like floating point scalars.\n\nThis class is templated over the fixed image type, moving image type and the deformation field type.\n\nThe input fixed and moving images are set via methods SetFixedImage and SetMovingImage respectively. An initial deformation field maybe set via SetInitialDisplacementField or SetInput. If no initial field is set, a zero field is used as the initial condition.\n\nThe algorithm has one parameters: the number of iteration to be performed.\n\nThe output deformation field can be obtained via methods GetOutput or GetDisplacementField.\n\nThis class make use of the finite difference solver hierarchy. Update for each iteration is computed in LevelSetMotionFunction.\n\n\\warning This filter assumes that the fixed image type, moving image type and deformation field type all have the same number of dimensions.\n\n\nRef: B.C. Vemuri, J. Ye, Y. Chen, C.M. Leonard. \"Image registration via level-set motion: applications to atlas-based segmentation\". Medical Image Analysis. Vol. 7. pp. 1-20. 2003.\n\n\\see LevelSetMotionRegistrationFunction \n\n\n\\see DemonsRegistrationFilter", "itk_module" : "ITKPDEDeformableRegistration", "itk_group" : "PDEDeformable" } diff --git a/Code/BasicFilters/json/LiThresholdImageFilter.json b/Code/BasicFilters/json/LiThresholdImageFilter.json index 819fd2f7a..fc8e19903 100644 --- a/Code/BasicFilters/json/LiThresholdImageFilter.json +++ b/Code/BasicFilters/json/LiThresholdImageFilter.json @@ -126,7 +126,7 @@ } ], "briefdescription" : "Threshold an image using the Li Threshold.", - "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the LiThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", + "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the LiThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/MagnitudeAndPhaseToComplexImageFilter.json b/Code/BasicFilters/json/MagnitudeAndPhaseToComplexImageFilter.json index ebe80b766..54e72802f 100644 --- a/Code/BasicFilters/json/MagnitudeAndPhaseToComplexImageFilter.json +++ b/Code/BasicFilters/json/MagnitudeAndPhaseToComplexImageFilter.json @@ -21,7 +21,7 @@ } ], "briefdescription" : "Implements pixel-wise conversion of magnitude and phase data into complex voxels.", - "detaileddescription" : "This filter is parametrized over the types of the two input images and the type of the output image.\n\nThe filter expect all images to have the same dimension (e.g. all 2D, or all 3D, or all ND)", + "detaileddescription" : "This filter is parameterized over the types of the two input images and the type of the output image.\n\nThe filter expect all images to have the same dimension (e.g. all 2D, or all 3D, or all ND)", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/MaskImageFilter.json b/Code/BasicFilters/json/MaskImageFilter.json index 6c5e2024c..96822b5d6 100644 --- a/Code/BasicFilters/json/MaskImageFilter.json +++ b/Code/BasicFilters/json/MaskImageFilter.json @@ -95,7 +95,7 @@ } ], "briefdescription" : "Mask an image with a mask.", - "detaileddescription" : "This class is templated over the types of the input image type, the mask image type and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe pixel type of the input 2 image must have a valid definition of the operator != with zero. This condition is required because internally this filter will perform the operation\n\n\\code\nif pixel_from_mask_image != masking_value\n\n pixel_output_image = pixel_input_image\n\nelse\n\n pixel_output_image = outside_value\n\n\\endcode\n\nThe pixel from the input 1 is cast to the pixel type of the output image.\n\nNote that the input and the mask images must be of the same size.\n\n\\warning Any pixel value other than masking value (0 by default) will not be masked out.\n\n\\see MaskNegatedImageFilter", + "detaileddescription" : "This class is templated over the types of the input image type, the mask image type and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe pixel type of the input 2 image must have a valid definition of the operator != with zero. This condition is required because internally this filter will perform the operation\n\n\\code\nif pixel_from_mask_image != masking_value\n\n pixel_output_image = pixel_input_image\n\nelse\n\n pixel_output_image = outside_value\n\n\\endcode\n\n\nThe pixel from the input 1 is cast to the pixel type of the output image.\n\nNote that the input and the mask images must be of the same size.\n\n\\warning Any pixel value other than masking value (0 by default) will not be masked out.\n\n\n\\see MaskNegatedImageFilter", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/MaskNegatedImageFilter.json b/Code/BasicFilters/json/MaskNegatedImageFilter.json index 5d6c46e5e..8f0ebe583 100644 --- a/Code/BasicFilters/json/MaskNegatedImageFilter.json +++ b/Code/BasicFilters/json/MaskNegatedImageFilter.json @@ -53,7 +53,7 @@ } ], "briefdescription" : "Mask an image with the negation (or logical compliment) of a mask.", - "detaileddescription" : "This class is templated over the types of the input image type, the mask image type and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe pixel type of the input 2 image must have a valid definition of the operator!=. This condition is required because internally this filter will perform the operation\n\n\\code\n* if pixel_from_mask_image != mask_value\n\n* pixel_output_image = output_value\n\n* else\n\n* pixel_output_image = pixel_input_image\n\n* \n\n\\endcode\n\nThe pixel from the input 1 is cast to the pixel type of the output image.\n\nNote that the input and the mask images must be of the same size.\n\n\\warning Only pixel value with mask_value ( defaults to 0 ) will be preserved.\n\n\\see MaskImageFilter", + "detaileddescription" : "This class is templated over the types of the input image type, the mask image type and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe pixel type of the input 2 image must have a valid definition of the operator!=. This condition is required because internally this filter will perform the operation\n\n\\code\nif pixel_from_mask_image != mask_value\n\n pixel_output_image = output_value\n\nelse\n\n pixel_output_image = pixel_input_image\n\n\\endcode\n\n\nThe pixel from the input 1 is cast to the pixel type of the output image.\n\nNote that the input and the mask images must be of the same size.\n\n\\warning Only pixel value with mask_value ( defaults to 0 ) will be preserved.\n\n\n\\see MaskImageFilter", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/MaskedFFTNormalizedCorrelationImageFilter.json b/Code/BasicFilters/json/MaskedFFTNormalizedCorrelationImageFilter.json index f810f6b07..62ab6c54e 100644 --- a/Code/BasicFilters/json/MaskedFFTNormalizedCorrelationImageFilter.json +++ b/Code/BasicFilters/json/MaskedFFTNormalizedCorrelationImageFilter.json @@ -84,7 +84,7 @@ } ], "briefdescription" : "Calculate masked normalized cross correlation using FFTs.", - "detaileddescription" : "This filter calculates the masked normalized cross correlation (NCC) of two images under masks using FFTs instead of spatial correlation. It is much faster than spatial correlation for reasonably large structuring elements. This filter is not equivalent to simply masking the images first and then correlating them; the latter approach yields incorrect results because the zeros in the images still affect the metric in the correlation process. This filter implements the masked NCC correctly so that the masked-out regions are completely ignored. The fundamental difference is described in detail in the references below. If the masks are set to images of all ones, the result of this filter is the same as standard NCC.\n\nInputs: Two images are required as inputs, fixedImage and movingImage, and two are optional, fixedMask and movingMask. In the context of correlation, inputs are often defined as: \"image\" and \"template\". In this filter, the fixedImage plays the role of the image, and the movingImage plays the role of the template. However, this filter is capable of correlating any two images and is not restricted to small movingImages (templates). In the fixedMask and movingMask, non-zero positive values indicate locations of useful information in the corresponding image, whereas zero and negative values indicate locations that should be masked out (ignored). Internally, the masks are converted to have values of only 0 and 1. For each optional mask that is not set, the filter internally creates an image of ones, which is equivalent to not masking the image. Thus, if both masks are not set, the result will be equivalent to unmasked NCC. For example, if only a mask for the fixed image is needed, the movingMask can either not be set or can be set to an image of ones.\n\nOptional parameters: The RequiredNumberOfOverlappingPixels enables the user to specify the minimum number of voxels of the two masks that must overlap; any location in the correlation map that results from fewer than this number of voxels will be set to zero. Larger values zero-out pixels on a larger border around the correlation image. Thus, larger values remove less stable computations but also limit the capture range. If RequiredNumberOfOverlappingPixels is set to 0, the default, no zeroing will take place.\n\nThe RequiredFractionOfOverlappingPixels enables the user to specify a fraction of the maximum number of overlapping pixels that need to overlap; any location in the correlation map that results from fewer than the product of this fraction and the internally computed maximum number of overlapping pixels will be set to zero. The value ranges between 0.0 and 1.0. This is very useful when the user does does not know beforehand the maximum number of pixels of the masks that will overlap. For example, when the masks have strange shapes, it is difficult to predict how the correlation of the masks will interact and what the maximum overlap will be. It is also useful when the mask shapes or sizes change because it is relative to the internally computed maximum of the overlap. Larger values zero-out pixels on a larger border around the correlation image. Thus, larger values remove less stable computations but also limit the capture range. Experiments have shown that a value between 0.1 and 0.6 works well for images with significant overlap and between 0.05 and 0.1 for images with little overlap (such as in stitching applications). If RequiredFractionOfOverlappingPixels is set to 0, the default, no zeroing will take place.\n\nThe user can either specify RequiredNumberOfOverlappingPixels or RequiredFractionOfOverlappingPixels (or both or none). Internally, the number of required pixels resulting from both of these methods is calculated and the one that gives the largest number of pixels is chosen. Since these both default to 0, if a user only sets one, the other is ignored.\n\nImage size: fixedImage and movingImage need not be the same size, but fixedMask must be the same size as fixedImage, and movingMask must be the same size as movingImage. Furthermore, whereas some algorithms require that the \"template\" be smaller than the \"image\" because of errors in the regions where the two are not fully overlapping, this filter has no such restriction.\n\nImage spacing: Since the computations are done in the pixel domain, all input images must have the same spacing.\n\nOutputs; The output is an image of RealPixelType that is the masked NCC of the two images and its values range from -1.0 to 1.0. The size of this NCC image is, by definition, size(fixedImage) + size(movingImage) - 1.\n\nExample filter usage: \\code\ntypedef itk::MaskedFFTNormalizedCorrelationImageFilter< ShortImageType, DoubleImageType > FilterType;\n\nFilterType::Pointer filter = FilterType::New();\n\nfilter->SetFixedImage( fixedImage );\n\nfilter->SetMovingImage( movingImage );\n\nfilter->SetFixedImageMask( fixedMask );\n\nfilter->SetMovingImageMask( movingMask );\n\nfilter->SetRequiredNumberOfOverlappingPixels(20);\n\nfilter->Update();\n\n\\endcode\n\n\\warning The pixel type of the output image must be of real type (float or double). ConceptChecking is used to enforce the output pixel type. You will get a compilation error if the pixel type of the output image is not float or double.\n\nReferences: 1) D. Padfield. \"Masked object registration in the Fourier domain.\" Transactions on Image Processing. 2) D. Padfield. \"Masked FFT registration\". In Proc. Computer Vision and Pattern Recognition, 2010.\n\n\\author : Dirk Padfield, GE Global Research, padfield@research.ge.com", + "detaileddescription" : "This filter calculates the masked normalized cross correlation (NCC) of two images under masks using FFTs instead of spatial correlation. It is much faster than spatial correlation for reasonably large structuring elements. This filter is not equivalent to simply masking the images first and then correlating them; the latter approach yields incorrect results because the zeros in the images still affect the metric in the correlation process. This filter implements the masked NCC correctly so that the masked-out regions are completely ignored. The fundamental difference is described in detail in the references below. If the masks are set to images of all ones, the result of this filter is the same as standard NCC.\n\nInputs: Two images are required as inputs, fixedImage and movingImage, and two are optional, fixedMask and movingMask. In the context of correlation, inputs are often defined as: \"image\" and \"template\". In this filter, the fixedImage plays the role of the image, and the movingImage plays the role of the template. However, this filter is capable of correlating any two images and is not restricted to small movingImages (templates). In the fixedMask and movingMask, non-zero positive values indicate locations of useful information in the corresponding image, whereas zero and negative values indicate locations that should be masked out (ignored). Internally, the masks are converted to have values of only 0 and 1. For each optional mask that is not set, the filter internally creates an image of ones, which is equivalent to not masking the image. Thus, if both masks are not set, the result will be equivalent to unmasked NCC. For example, if only a mask for the fixed image is needed, the movingMask can either not be set or can be set to an image of ones.\n\nOptional parameters: The RequiredNumberOfOverlappingPixels enables the user to specify the minimum number of voxels of the two masks that must overlap; any location in the correlation map that results from fewer than this number of voxels will be set to zero. Larger values zero-out pixels on a larger border around the correlation image. Thus, larger values remove less stable computations but also limit the capture range. If RequiredNumberOfOverlappingPixels is set to 0, the default, no zeroing will take place.\n\nThe RequiredFractionOfOverlappingPixels enables the user to specify a fraction of the maximum number of overlapping pixels that need to overlap; any location in the correlation map that results from fewer than the product of this fraction and the internally computed maximum number of overlapping pixels will be set to zero. The value ranges between 0.0 and 1.0. This is very useful when the user does does not know beforehand the maximum number of pixels of the masks that will overlap. For example, when the masks have strange shapes, it is difficult to predict how the correlation of the masks will interact and what the maximum overlap will be. It is also useful when the mask shapes or sizes change because it is relative to the internally computed maximum of the overlap. Larger values zero-out pixels on a larger border around the correlation image. Thus, larger values remove less stable computations but also limit the capture range. Experiments have shown that a value between 0.1 and 0.6 works well for images with significant overlap and between 0.05 and 0.1 for images with little overlap (such as in stitching applications). If RequiredFractionOfOverlappingPixels is set to 0, the default, no zeroing will take place.\n\nThe user can either specify RequiredNumberOfOverlappingPixels or RequiredFractionOfOverlappingPixels (or both or none). Internally, the number of required pixels resulting from both of these methods is calculated and the one that gives the largest number of pixels is chosen. Since these both default to 0, if a user only sets one, the other is ignored.\n\nImage size: fixedImage and movingImage need not be the same size, but fixedMask must be the same size as fixedImage, and movingMask must be the same size as movingImage. Furthermore, whereas some algorithms require that the \"template\" be smaller than the \"image\" because of errors in the regions where the two are not fully overlapping, this filter has no such restriction.\n\nImage spacing: Since the computations are done in the pixel domain, all input images must have the same spacing.\n\nOutputs; The output is an image of RealPixelType that is the masked NCC of the two images and its values range from -1.0 to 1.0. The size of this NCC image is, by definition, size(fixedImage) + size(movingImage) - 1.\n\nExample filter usage: \\code\nusing FilterType = itk::MaskedFFTNormalizedCorrelationImageFilter< ShortImageType, DoubleImageType >;\n\nFilterType::Pointer filter = FilterType::New();\n\nfilter->SetFixedImage( fixedImage );\n\nfilter->SetMovingImage( movingImage );\n\nfilter->SetFixedImageMask( fixedMask );\n\nfilter->SetMovingImageMask( movingMask );\n\nfilter->SetRequiredNumberOfOverlappingPixels(20);\n\nfilter->Update();\n\n\\endcode\n\n\n\\warning The pixel type of the output image must be of real type (float or double). ConceptChecking is used to enforce the output pixel type. You will get a compilation error if the pixel type of the output image is not float or double.\n\n\nReferences: 1) D. Padfield. \"Masked object registration in the Fourier domain.\" Transactions on Image Processing. 2) D. Padfield. \"Masked FFT registration\". In Proc. Computer Vision and Pattern Recognition, 2010.\n\n\\author : Dirk Padfield, GE Global Research, padfield@research.ge.com", "itk_module" : "ITKConvolution", "itk_group" : "Convolution" } diff --git a/Code/BasicFilters/json/MaximumEntropyThresholdImageFilter.json b/Code/BasicFilters/json/MaximumEntropyThresholdImageFilter.json index 03a4dcd23..dc3c2a9a5 100644 --- a/Code/BasicFilters/json/MaximumEntropyThresholdImageFilter.json +++ b/Code/BasicFilters/json/MaximumEntropyThresholdImageFilter.json @@ -126,7 +126,7 @@ } ], "briefdescription" : "Threshold an image using the MaximumEntropy Threshold.", - "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the MaximumEntropyThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", + "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the MaximumEntropyThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/MaximumProjectionImageFilter.json b/Code/BasicFilters/json/MaximumProjectionImageFilter.json index ef05e9496..5953c70c3 100644 --- a/Code/BasicFilters/json/MaximumProjectionImageFilter.json +++ b/Code/BasicFilters/json/MaximumProjectionImageFilter.json @@ -62,7 +62,7 @@ } ], "briefdescription" : "Maximum projection.", - "detaileddescription" : "This class was contributed to the insight journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la reproduction, inra de jouy-en-josas, France.\n\n\\see ProjectionImageFilter \n\n\\see MedianProjectionImageFilter \n\n\\see MeanProjectionImageFilter \n\n\\see MinimumProjectionImageFilter \n\n\\see StandardDeviationProjectionImageFilter \n\n\\see SumProjectionImageFilter \n\n\\see BinaryProjectionImageFilter", + "detaileddescription" : "This class was contributed to the insight journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la reproduction, inra de jouy-en-josas, France.\n\n\n\\see ProjectionImageFilter \n\n\n\\see MedianProjectionImageFilter \n\n\n\\see MeanProjectionImageFilter \n\n\n\\see MinimumProjectionImageFilter \n\n\n\\see StandardDeviationProjectionImageFilter \n\n\n\\see SumProjectionImageFilter \n\n\n\\see BinaryProjectionImageFilter", "itk_module" : "ITKImageStatistics", "itk_group" : "ImageStatistics" } diff --git a/Code/BasicFilters/json/MeanImageFilter.json b/Code/BasicFilters/json/MeanImageFilter.json index 4bf69bff3..b6bd476c1 100644 --- a/Code/BasicFilters/json/MeanImageFilter.json +++ b/Code/BasicFilters/json/MeanImageFilter.json @@ -47,7 +47,7 @@ } ], "briefdescription" : "Applies an averaging filter to an image.", - "detaileddescription" : "Computes an image where a given pixel is the mean value of the the pixels in a neighborhood about the corresponding input pixel.\n\nA mean filter is one of the family of linear filters.\n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator", + "detaileddescription" : "Computes an image where a given pixel is the mean value of the the pixels in a neighborhood about the corresponding input pixel.\n\nA mean filter is one of the family of linear filters.\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator", "itk_module" : "ITKSmoothing", "itk_group" : "Smoothing" } diff --git a/Code/BasicFilters/json/MeanProjectionImageFilter.json b/Code/BasicFilters/json/MeanProjectionImageFilter.json index 4e0966cf2..0ebf92526 100644 --- a/Code/BasicFilters/json/MeanProjectionImageFilter.json +++ b/Code/BasicFilters/json/MeanProjectionImageFilter.json @@ -31,7 +31,7 @@ } ], "briefdescription" : "Mean projection.", - "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ProjectionImageFilter \n\n\\see MedianProjectionImageFilter \n\n\\see MinimumProjectionImageFilter \n\n\\see StandardDeviationProjectionImageFilter \n\n\\see SumProjectionImageFilter \n\n\\see BinaryProjectionImageFilter \n\n\\see MaximumProjectionImageFilter", + "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ProjectionImageFilter \n\n\n\\see MedianProjectionImageFilter \n\n\n\\see MinimumProjectionImageFilter \n\n\n\\see StandardDeviationProjectionImageFilter \n\n\n\\see SumProjectionImageFilter \n\n\n\\see BinaryProjectionImageFilter \n\n\n\\see MaximumProjectionImageFilter", "itk_module" : "ITKImageStatistics", "itk_group" : "ImageStatistics" } diff --git a/Code/BasicFilters/json/MedianImageFilter.json b/Code/BasicFilters/json/MedianImageFilter.json index 0f288f75d..678fe11e2 100644 --- a/Code/BasicFilters/json/MedianImageFilter.json +++ b/Code/BasicFilters/json/MedianImageFilter.json @@ -48,7 +48,7 @@ } ], "briefdescription" : "Applies a median filter to an image.", - "detaileddescription" : "Computes an image where a given pixel is the median value of the the pixels in a neighborhood about the corresponding input pixel.\n\nA median filter is one of the family of nonlinear filters. It is used to smooth an image without being biased by outliers or shot noise.\n\nThis filter requires that the input pixel type provides an operator<() (LessThan Comparable).\n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator", + "detaileddescription" : "Computes an image where a given pixel is the median value of the the pixels in a neighborhood about the corresponding input pixel.\n\nA median filter is one of the family of nonlinear filters. It is used to smooth an image without being biased by outliers or shot noise.\n\nThis filter requires that the input pixel type provides an operator<() (LessThan Comparable).\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator", "itk_module" : "ITKSmoothing", "itk_group" : "Smoothing" } diff --git a/Code/BasicFilters/json/MedianProjectionImageFilter.json b/Code/BasicFilters/json/MedianProjectionImageFilter.json index 6cd646197..c641e1296 100644 --- a/Code/BasicFilters/json/MedianProjectionImageFilter.json +++ b/Code/BasicFilters/json/MedianProjectionImageFilter.json @@ -62,7 +62,7 @@ } ], "briefdescription" : "Median projection.", - "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ProjectionImageFilter \n\n\\see StandardDeviationProjectionImageFilter \n\n\\see SumProjectionImageFilter \n\n\\see BinaryProjectionImageFilter \n\n\\see MaximumProjectionImageFilter \n\n\\see MinimumProjectionImageFilter \n\n\\see MeanProjectionImageFilter", + "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ProjectionImageFilter \n\n\n\\see StandardDeviationProjectionImageFilter \n\n\n\\see SumProjectionImageFilter \n\n\n\\see BinaryProjectionImageFilter \n\n\n\\see MaximumProjectionImageFilter \n\n\n\\see MinimumProjectionImageFilter \n\n\n\\see MeanProjectionImageFilter", "itk_module" : "ITKImageStatistics", "itk_group" : "ImageStatistics" } diff --git a/Code/BasicFilters/json/MergeLabelMapFilter.json b/Code/BasicFilters/json/MergeLabelMapFilter.json index 9cd6f89bf..4efdd2d40 100644 --- a/Code/BasicFilters/json/MergeLabelMapFilter.json +++ b/Code/BasicFilters/json/MergeLabelMapFilter.json @@ -134,7 +134,7 @@ } ], "briefdescription" : "Merges several Label Maps.", - "detaileddescription" : "This filter takes one or more input Label Map and merges them.\n\nSetMethod() can be used to change how the filter manage the labels from the different label maps. KEEP (0): MergeLabelMapFilter do its best to keep the label unchanged, but if a label is already used in a previous label map, a new label is assigned. AGGREGATE (1): If the same label is found several times in the label maps, the label objects with the same label are merged. PACK (2): MergeLabelMapFilter relabel all the label objects by order of processing. No conflict can occur. STRICT (3): MergeLabelMapFilter keeps the labels unchanged and raises an exception if the same label is found in several images.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ShapeLabelObject , RelabelComponentImageFilter", + "detaileddescription" : "This filter takes one or more input Label Map and merges them.\n\nSetMethod() can be used to change how the filter manage the labels from the different label maps. KEEP (0): MergeLabelMapFilter do its best to keep the label unchanged, but if a label is already used in a previous label map, a new label is assigned. AGGREGATE (1): If the same label is found several times in the label maps, the label objects with the same label are merged. PACK (2): MergeLabelMapFilter relabel all the label objects by order of processing. No conflict can occur. STRICT (3): MergeLabelMapFilter keeps the labels unchanged and raises an exception if the same label is found in several images.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ShapeLabelObject , RelabelComponentImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/MinMaxCurvatureFlowImageFilter.json b/Code/BasicFilters/json/MinMaxCurvatureFlowImageFilter.json index c8779bc7b..f856b31e9 100644 --- a/Code/BasicFilters/json/MinMaxCurvatureFlowImageFilter.json +++ b/Code/BasicFilters/json/MinMaxCurvatureFlowImageFilter.json @@ -61,7 +61,7 @@ } ], "briefdescription" : "Denoise an image using min/max curvature flow.", - "detaileddescription" : "MinMaxCurvatureFlowImageFilter implements a curvature driven image denoising algorithm. Iso-brightness contours in the grayscale input image are viewed as a level set. The level set is then evolved using a curvature-based speed function:\n\n \\f[ I_t = F_{\\mbox{minmax}} |\\nabla I| \\f] \n\nwhere \\f$ F_{\\mbox{minmax}} = \\max(\\kappa,0) \\f$ if \\f$ \\mbox{Avg}_{\\mbox{stencil}}(x) \\f$ is less than or equal to \\f$ T_{thresold} \\f$ and \\f$ \\min(\\kappa,0) \\f$ , otherwise. \\f$ \\kappa \\f$ is the mean curvature of the iso-brightness contour at point \\f$ x \\f$ .\n\nIn min/max curvature flow, movement is turned on or off depending on the scale of the noise one wants to remove. Switching depends on the average image value of a region of radius \\f$ R \\f$ around each point. The choice of \\f$ R \\f$ , the stencil radius, governs the scale of the noise to be removed.\n\nThe threshold value \\f$ T_{threshold} \\f$ is the average intensity obtained in the direction perpendicular to the gradient at point \\f$ x \\f$ at the extrema of the local neighborhood.\n\nThis filter make use of the multi-threaded finite difference solver hierarchy. Updates are computed using a MinMaxCurvatureFlowFunction object. A zero flux Neumann boundary condition is used when computing derivatives near the data boundary.\n\n\\warning This filter assumes that the input and output types have the same dimensions. This filter also requires that the output image pixels are of a real type. This filter works for any dimensional images, however for dimensions greater than 3D, an expensive brute-force search is used to compute the local threshold.\n\nReference: \"Level Set Methods and Fast Marching Methods\", J.A. Sethian, Cambridge Press, Chapter 16, Second edition, 1999.\n\n\\see MinMaxCurvatureFlowFunction \n\n\\see CurvatureFlowImageFilter \n\n\\see BinaryMinMaxCurvatureFlowImageFilter", + "detaileddescription" : "MinMaxCurvatureFlowImageFilter implements a curvature driven image denoising algorithm. Iso-brightness contours in the grayscale input image are viewed as a level set. The level set is then evolved using a curvature-based speed function:\n\n \\f[ I_t = F_{\\mbox{minmax}} |\\nabla I| \\f] \n\nwhere \\f$ F_{\\mbox{minmax}} = \\max(\\kappa,0) \\f$ if \\f$ \\mbox{Avg}_{\\mbox{stencil}}(x) \\f$ is less than or equal to \\f$ T_{threshold} \\f$ and \\f$ \\min(\\kappa,0) \\f$ , otherwise. \\f$ \\kappa \\f$ is the mean curvature of the iso-brightness contour at point \\f$ x \\f$ .\n\nIn min/max curvature flow, movement is turned on or off depending on the scale of the noise one wants to remove. Switching depends on the average image value of a region of radius \\f$ R \\f$ around each point. The choice of \\f$ R \\f$ , the stencil radius, governs the scale of the noise to be removed.\n\nThe threshold value \\f$ T_{threshold} \\f$ is the average intensity obtained in the direction perpendicular to the gradient at point \\f$ x \\f$ at the extrema of the local neighborhood.\n\nThis filter make use of the multi-threaded finite difference solver hierarchy. Updates are computed using a MinMaxCurvatureFlowFunction object. A zero flux Neumann boundary condition is used when computing derivatives near the data boundary.\n\n\\warning This filter assumes that the input and output types have the same dimensions. This filter also requires that the output image pixels are of a real type. This filter works for any dimensional images, however for dimensions greater than 3D, an expensive brute-force search is used to compute the local threshold.\n\n\nReference: \"Level Set Methods and Fast Marching Methods\", J.A. Sethian, Cambridge Press, Chapter 16, Second edition, 1999.\n\n\\see MinMaxCurvatureFlowFunction \n\n\n\\see CurvatureFlowImageFilter \n\n\n\\see BinaryMinMaxCurvatureFlowImageFilter", "itk_module" : "ITKCurvatureFlow", "itk_group" : "CurvatureFlow" } diff --git a/Code/BasicFilters/json/MinimumMaximumImageFilter.json b/Code/BasicFilters/json/MinimumMaximumImageFilter.json index e76b59d51..420fcbe49 100644 --- a/Code/BasicFilters/json/MinimumMaximumImageFilter.json +++ b/Code/BasicFilters/json/MinimumMaximumImageFilter.json @@ -73,7 +73,7 @@ } ], "briefdescription" : "Computes the minimum and the maximum intensity values of an image.", - "detaileddescription" : "It is templated over input image type only. This filter just copies the input image through this output to be included within the pipeline. The implementation uses the StatisticsImageFilter .\n\n\\see StatisticsImageFilter", + "detaileddescription" : "It is templated over input image type only.\n\nThis filter is automatically multi-threaded and can stream its input when NumberOfStreamDivisions is set to more than\n\\li The extrema are independently computed for each streamed and threaded region then merged.\n\n\n\n\n\\see StatisticsImageFilter", "itk_module" : "ITKImageStatistics", "itk_group" : "ImageStatistics" } diff --git a/Code/BasicFilters/json/MinimumProjectionImageFilter.json b/Code/BasicFilters/json/MinimumProjectionImageFilter.json index a9e203c46..34d83cc59 100644 --- a/Code/BasicFilters/json/MinimumProjectionImageFilter.json +++ b/Code/BasicFilters/json/MinimumProjectionImageFilter.json @@ -62,7 +62,7 @@ } ], "briefdescription" : "Minimum projection.", - "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ProjectionImageFilter \n\n\\see StandardDeviationProjectionImageFilter \n\n\\see SumProjectionImageFilter \n\n\\see BinaryProjectionImageFilter \n\n\\see MaximumProjectionImageFilter \n\n\\see MeanProjectionImageFilter", + "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ProjectionImageFilter \n\n\n\\see StandardDeviationProjectionImageFilter \n\n\n\\see SumProjectionImageFilter \n\n\n\\see BinaryProjectionImageFilter \n\n\n\\see MaximumProjectionImageFilter \n\n\n\\see MeanProjectionImageFilter", "itk_module" : "ITKImageStatistics", "itk_group" : "ImageStatistics" } diff --git a/Code/BasicFilters/json/MirrorPadImageFilter.json b/Code/BasicFilters/json/MirrorPadImageFilter.json index 4518e2094..d1af6d8f2 100644 --- a/Code/BasicFilters/json/MirrorPadImageFilter.json +++ b/Code/BasicFilters/json/MirrorPadImageFilter.json @@ -102,7 +102,7 @@ } ], "briefdescription" : "Increase the image size by padding with replicants of the input image value.", - "detaileddescription" : "MirrorPadImageFilter changes the image bounds of an image. Any added pixels are filled in with a mirrored replica of the input image. For instance, if the output image needs a pixel that is two pixels to the left of the LargestPossibleRegion of the input image, the value assigned will be from the pixel two pixels inside the left boundary of the LargestPossibleRegion. The image bounds of the output must be specified.\n\nVisual explanation of padding regions.\n This filter is implemented as a multithreaded filter. It provides a ThreadedGenerateData() method for its implementation.\n\n\\see WrapPadImageFilter , ConstantPadImageFilter", + "detaileddescription" : "MirrorPadImageFilter changes the image bounds of an image. Any added pixels are filled in with a mirrored replica of the input image. For instance, if the output image needs a pixel that is two pixels to the left of the LargestPossibleRegion of the input image, the value assigned will be from the pixel two pixels inside the left boundary of the LargestPossibleRegion. The image bounds of the output must be specified.\n\nVisual explanation of padding regions.\n\n\nThis filter is implemented as a multithreaded filter. It provides a DynamicThreadedGenerateData() method for its implementation.\n\nExponential decay in the bounds is enabled when DecayBase has to be in the range (0.0, 1.0]. When it is 1.0 it is disabled. The decay rate is based on the Manhattan distance.\n\n\\see WrapPadImageFilter , ConstantPadImageFilter", "itk_module" : "ITKImageGrid", "itk_group" : "ImageGrid" } diff --git a/Code/BasicFilters/json/MomentsThresholdImageFilter.json b/Code/BasicFilters/json/MomentsThresholdImageFilter.json index add77fad1..bc3d06314 100644 --- a/Code/BasicFilters/json/MomentsThresholdImageFilter.json +++ b/Code/BasicFilters/json/MomentsThresholdImageFilter.json @@ -126,7 +126,7 @@ } ], "briefdescription" : "Threshold an image using the Moments Threshold.", - "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the MomentsThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", + "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the MomentsThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/MorphologicalWatershedFromMarkersImageFilter.json b/Code/BasicFilters/json/MorphologicalWatershedFromMarkersImageFilter.json index 104704ecf..2c20c9576 100644 --- a/Code/BasicFilters/json/MorphologicalWatershedFromMarkersImageFilter.json +++ b/Code/BasicFilters/json/MorphologicalWatershedFromMarkersImageFilter.json @@ -52,7 +52,7 @@ } ], "briefdescription" : "Morphological watershed transform from markers.", - "detaileddescription" : "The watershed transform is a tool for image segmentation that is fast and flexible and potentially fairly parameter free. It was originally derived from a geophysical model of rain falling on a terrain and a variety of more formal definitions have been devised to allow development of practical algorithms. If an image is considered as a terrain and divided into catchment basins then the hope is that each catchment basin would contain an object of interest.\n\nThe output is a label image. A label image, sometimes referred to as a categorical image, has unique values for each region. For example, if a watershed produces 2 regions, all pixels belonging to one region would have value A, and all belonging to the other might have value B. Unassigned pixels, such as watershed lines, might have the background value (0 by convention).\n\nThe simplest way of using the watershed is to preprocess the image we want to segment so that the boundaries of our objects are bright (e.g apply an edge detector) and compute the watershed transform of the edge image. Watershed lines will correspond to the boundaries and our problem will be solved. This is rarely useful in practice because there are always more regional minima than there are objects, either due to noise or natural variations in the object surfaces. Therefore, while many watershed lines do lie on significant boundaries, there are many that don't. Various methods can be used to reduce the number of minima in the image, like thresholding the smallest values, filtering the minima and/or smoothing the image.\n\nThis filter use another approach to avoid the problem of over segmentation: it let the user provide a marker image which mark the minima in the input image and give them a label. The minima are imposed in the input image by the markers. The labels of the output image are the label of the marker image.\n\nThe morphological watershed transform algorithm is described in Chapter 9.2 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\nThis code was contributed in the Insight Journal paper: \"The watershed transform in ITK - discussion and new developments\" by Beare R., Lehmann G. https://hdl.handle.net/1926/202 http://www.insight-journal.org/browse/publication/92 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. \n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia.\n\n\\see WatershedImageFilter , MorphologicalWatershedImageFilter", + "detaileddescription" : "The watershed transform is a tool for image segmentation that is fast and flexible and potentially fairly parameter free. It was originally derived from a geophysical model of rain falling on a terrain and a variety of more formal definitions have been devised to allow development of practical algorithms. If an image is considered as a terrain and divided into catchment basins then the hope is that each catchment basin would contain an object of interest.\n\nThe output is a label image. A label image, sometimes referred to as a categorical image, has unique values for each region. For example, if a watershed produces 2 regions, all pixels belonging to one region would have value A, and all belonging to the other might have value B. Unassigned pixels, such as watershed lines, might have the background value (0 by convention).\n\nThe simplest way of using the watershed is to preprocess the image we want to segment so that the boundaries of our objects are bright (e.g apply an edge detector) and compute the watershed transform of the edge image. Watershed lines will correspond to the boundaries and our problem will be solved. This is rarely useful in practice because there are always more regional minima than there are objects, either due to noise or natural variations in the object surfaces. Therefore, while many watershed lines do lie on significant boundaries, there are many that don't. Various methods can be used to reduce the number of minima in the image, like thresholding the smallest values, filtering the minima and/or smoothing the image.\n\nThis filter use another approach to avoid the problem of over segmentation: it let the user provide a marker image which mark the minima in the input image and give them a label. The minima are imposed in the input image by the markers. The labels of the output image are the label of the marker image.\n\nThe morphological watershed transform algorithm is described in Chapter 9.2 of Pierre Soille's book \"Morphological Image Analysis:\n Principles and Applications\", Second Edition, Springer, 2003.\n\nThis code was contributed in the Insight Journal paper: \"The watershed transform in ITK - discussion and new developments\" by Beare R., Lehmann G. https://hdl.handle.net/1926/202 http://www.insight-journal.org/browse/publication/92 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. \n\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia.\n\n\n\\see WatershedImageFilter , MorphologicalWatershedImageFilter", "itk_module" : "ITKWatersheds", "itk_group" : "Watersheds" } diff --git a/Code/BasicFilters/json/MorphologicalWatershedImageFilter.json b/Code/BasicFilters/json/MorphologicalWatershedImageFilter.json index 15e467f75..873ce459d 100644 --- a/Code/BasicFilters/json/MorphologicalWatershedImageFilter.json +++ b/Code/BasicFilters/json/MorphologicalWatershedImageFilter.json @@ -68,8 +68,8 @@ ] } ], - "briefdescription" : "Watershed segmentation implementation with morphogical operators.", - "detaileddescription" : "Watershed pixel are labeled 0. TOutputImage should be an integer type. Labels of output image are in no particular order. You can reorder the labels such that object labels are consecutive and sorted based on object size by passing the output of this filter to a RelabelComponentImageFilter .\n\nThe morphological watershed transform algorithm is described in Chapter 9.2 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\nThis code was contributed in the Insight Journal paper: \"The watershed transform in ITK - discussion and new developments\" by Beare R., Lehmann G. https://hdl.handle.net/1926/202 http://www.insight-journal.org/browse/publication/92 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see WatershedImageFilter , MorphologicalWatershedFromMarkersImageFilter", + "briefdescription" : "Watershed segmentation implementation with morphological operators.", + "detaileddescription" : "Watershed pixel are labeled 0. TOutputImage should be an integer type. Labels of output image are in no particular order. You can reorder the labels such that object labels are consecutive and sorted based on object size by passing the output of this filter to a RelabelComponentImageFilter .\n\nThe morphological watershed transform algorithm is described in Chapter 9.2 of Pierre Soille's book \"Morphological Image Analysis:\nPrinciples and Applications\", Second Edition, Springer, 2003.\n\nThis code was contributed in the Insight Journal paper: \"The watershed transform in ITK - discussion and new developments\" by Beare R., Lehmann G. https://hdl.handle.net/1926/202 http://www.insight-journal.org/browse/publication/92 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see WatershedImageFilter , MorphologicalWatershedFromMarkersImageFilter", "itk_module" : "ITKWatersheds", "itk_group" : "Watersheds" } diff --git a/Code/BasicFilters/json/MultiLabelSTAPLEImageFilter.json b/Code/BasicFilters/json/MultiLabelSTAPLEImageFilter.json index f15570630..62b8929ec 100644 --- a/Code/BasicFilters/json/MultiLabelSTAPLEImageFilter.json +++ b/Code/BasicFilters/json/MultiLabelSTAPLEImageFilter.json @@ -42,7 +42,7 @@ "default" : "std::vector()", "briefdescriptionSet" : "", "custom_itk_cast" : "if (!m_PriorProbabilities.empty()) filter->SetPriorProbabilities(typename FilterType::PriorProbabilitiesType(&this->m_PriorProbabilities[0],this->m_PriorProbabilities.size()));", - "detaileddescriptionSet" : "Set manual estimates for the a priori class probabilities. The size of the array must be greater than the value of the\n largest label. The index into the array corresponds to the label\n value in the segmented image for the class.", + "detaileddescriptionSet" : "Set manual estimates for the a priori class probabilities. The size of the array must be greater than the value of the\nlargest label. The index into the array corresponds to the label\nvalue in the segmented image for the class.", "briefdescriptionGet" : "", "detaileddescriptionGet" : "Get prior class probabilities.\n\nAfter updating the filter, this function returns the actual prior class probabilities. If these were not previously set by a call to SetPriorProbabilities, then they are estimated from the input segmentations and the result is available through this function." } @@ -76,7 +76,7 @@ } ], "briefdescription" : "This filter performs a pixelwise combination of an arbitrary number of input images, where each of them represents a segmentation of the same scene (i.e., image).", - "detaileddescription" : "The labelings in the images are weighted relative to each other based on their \"performance\" as estimated by an expectation-maximization algorithm. In the process, a ground truth segmentation is estimated, and the estimated performances of the individual segmentations are relative to this estimated ground truth.\n\nThe algorithm is based on the binary STAPLE algorithm by Warfield et al. as published originally in\n\nS. Warfield, K. Zou, W. Wells, \"Validation of image segmentation and expert\nquality with an expectation-maximization algorithm\" in MICCAI 2002: Fifth International Conference on Medical Image Computing and Computer-Assisted Intervention, Springer-Verlag, Heidelberg, Germany, 2002, pp. 298-306\n\nThe multi-label algorithm implemented here is described in detail in\n\nT. Rohlfing, D. B. Russakoff, and C. R. Maurer, Jr., \"Performance-based classifier combination in atlas-based image segmentation using expectation-maximization parameter estimation,\" IEEE Transactions on Medical Imaging, vol. 23, pp. 983-994, Aug. 2004.\n\n\\par INPUTS\nAll input volumes to this filter must be segmentations of an image, that is, they must have discrete pixel values where each value represents a different segmented object.\n\nInput volumes must all contain the same size RequestedRegions. Not all input images must contain all possible labels, but all label values must have the same meaning in all images.\n\nThe filter can optionally be provided with estimates for the a priori class probabilities through the SetPriorProbabilities function. If no estimate is provided, one is automatically generated by analyzing the relative frequencies of the labels in the input images.\n\n\\par OUTPUTS\nThe filter produces a single output volume. Each output pixel contains the label that has the highest probability of being the correct label, based on the performance models of the individual segmentations. If the maximum probaility is not unique, i.e., if more than one label have a maximum probability, then an \"undecided\" label is assigned to that output pixel.\n\nBy default, the label used for undecided pixels is the maximum label value used in the input images plus one. Since it is possible for an image with 8 bit pixel values to use all 256 possible label values, it is permissible to combine 8 bit (i.e., byte) images into a 16 bit (i.e., short) output image.\n\nIn addition to the combined image, the estimated confusion matrices for each of the input segmentations can be obtained through the GetConfusionMatrix member function.\n\n\\par PARAMETERS\nThe label used for \"undecided\" labels can be set using SetLabelForUndecidedPixels. This functionality can be unset by calling UnsetLabelForUndecidedPixels.\n\nA termination threshold for the EM iteration can be defined by calling SetTerminationUpdateThreshold. The iteration terminates once no single parameter of any confusion matrix changes by less than this threshold. Alternatively, a maximum number of iterations can be specified by calling SetMaximumNumberOfIterations. The algorithm may still terminate after a smaller number of iterations if the termination threshold criterion is satisfied.\n\n\\par EVENTS\nThis filter invokes IterationEvent() at each iteration of the E-M algorithm. Setting the AbortGenerateData() flag will cause the algorithm to halt after the current iteration and produce results just as if it had converged. The algorithm makes no attempt to report its progress since the number of iterations needed cannot be known in advance.\n\n\\author Torsten Rohlfing, SRI International, Neuroscience Program", + "detaileddescription" : "The labelings in the images are weighted relative to each other based on their \"performance\" as estimated by an expectation-maximization algorithm. In the process, a ground truth segmentation is estimated, and the estimated performances of the individual segmentations are relative to this estimated ground truth.\n\nThe algorithm is based on the binary STAPLE algorithm by Warfield et al. as published originally in\n\nS. Warfield, K. Zou, W. Wells, \"Validation of image segmentation and expert\n quality with an expectation-maximization algorithm\" in MICCAI 2002: Fifth International Conference on Medical Image Computing and Computer-Assisted Intervention, Springer-Verlag, Heidelberg, Germany, 2002, pp. 298-306\n\nThe multi-label algorithm implemented here is described in detail in\n\nT. Rohlfing, D. B. Russakoff, and C. R. Maurer, Jr., \"Performance-based classifier combination in atlas-based image segmentation using expectation-maximization parameter estimation,\" IEEE Transactions on Medical Imaging, vol. 23, pp. 983-994, Aug. 2004.\n\n\\par INPUTS\nAll input volumes to this filter must be segmentations of an image, that is, they must have discrete pixel values where each value represents a different segmented object.\n\n\nInput volumes must all contain the same size RequestedRegions. Not all input images must contain all possible labels, but all label values must have the same meaning in all images.\n\nThe filter can optionally be provided with estimates for the a priori class probabilities through the SetPriorProbabilities function. If no estimate is provided, one is automatically generated by analyzing the relative frequencies of the labels in the input images.\n\n\\par OUTPUTS\nThe filter produces a single output volume. Each output pixel contains the label that has the highest probability of being the correct label, based on the performance models of the individual segmentations. If the maximum probability is not unique, i.e., if more than one label have a maximum probability, then an \"undecided\" label is assigned to that output pixel.\n\n\nBy default, the label used for undecided pixels is the maximum label value used in the input images plus one. Since it is possible for an image with 8 bit pixel values to use all 256 possible label values, it is permissible to combine 8 bit (i.e., byte) images into a 16 bit (i.e., short) output image.\n\nIn addition to the combined image, the estimated confusion matrices for each of the input segmentations can be obtained through the GetConfusionMatrix member function.\n\n\\par PARAMETERS\nThe label used for \"undecided\" labels can be set using SetLabelForUndecidedPixels. This functionality can be unset by calling UnsetLabelForUndecidedPixels.\n\n\nA termination threshold for the EM iteration can be defined by calling SetTerminationUpdateThreshold. The iteration terminates once no single parameter of any confusion matrix changes by less than this threshold. Alternatively, a maximum number of iterations can be specified by calling SetMaximumNumberOfIterations. The algorithm may still terminate after a smaller number of iterations if the termination threshold criterion is satisfied.\n\n\\par EVENTS\nThis filter invokes IterationEvent() at each iteration of the E-M algorithm. Setting the AbortGenerateData() flag will cause the algorithm to halt after the current iteration and produce results just as if it had converged. The algorithm makes no attempt to report its progress since the number of iterations needed cannot be known in advance.\n\n\n\\author Torsten Rohlfing, SRI International, Neuroscience Program", "itk_module" : "ITKLabelVoting", "itk_group" : "LabelVoting" } diff --git a/Code/BasicFilters/json/N4BiasFieldCorrectionImageFilter.json b/Code/BasicFilters/json/N4BiasFieldCorrectionImageFilter.json index 1772e84dd..bb6126fae 100644 --- a/Code/BasicFilters/json/N4BiasFieldCorrectionImageFilter.json +++ b/Code/BasicFilters/json/N4BiasFieldCorrectionImageFilter.json @@ -107,7 +107,7 @@ "type" : "uint8_t", "default" : "1", "briefdescriptionSet" : "", - "detaileddescriptionSet" : "DeprecatedSet/Get mask label value. If a binary mask image is specified and if UseMaskValue is true, only those input image voxels corresponding with mask image values equal to MaskLabel are used in estimating the bias field. If a MaskImage is specified and UseMaskLabel is false, all input image voxels corresponding to non-zero voxels in the MaskImage are used in estimating the bias field. Default = 1.", + "detaileddescriptionSet" : "Set/Get mask label value. If a binary mask image is specified and if UseMaskValue is true, only those input image voxels corresponding with mask image values equal to MaskLabel are used in estimating the bias field. If a MaskImage is specified and UseMaskLabel is false, all input image voxels corresponding to non-zero voxels in the MaskImage are used in estimating the bias field. Default = 1.", "briefdescriptionGet" : "", "detaileddescriptionGet" : "DeprecatedSet/Get mask label value. If a binary mask image is specified and if UseMaskValue is true, only those input image voxels corresponding with mask image values equal to MaskLabel are used in estimating the bias field. If a MaskImage is specified and UseMaskLabel is false, all input image voxels corresponding to non-zero voxels in the MaskImage are used in estimating the bias field. Default = 1." } @@ -133,7 +133,7 @@ } ], "briefdescription" : "Implementation of the N4 bias field correction algorithm.", - "detaileddescription" : "The nonparametric nonuniform intensity normalization (N3) algorithm, as introduced by Sled et al. in 1998 is a method for correcting nonuniformity associated with MR images. The algorithm assumes a simple parametric model (Gaussian) for the bias field and does not require tissue class segmentation. In addition, there are only a couple of parameters to tune with the default values performing quite well. N3 has been publicly available as a set of perl scripts (http://www.bic.mni.mcgill.ca/ServicesSoftwareAdvancedImageProcessingTools/HomePage )\n\nThe N4 algorithm, encapsulated with this class, is a variation of the original N3 algorithm with the additional benefits of an improved B-spline fitting routine which allows for multiple resolutions to be used during the correction process. We also modify the iterative update component of algorithm such that the residual bias field is continually updated\n\nNotes for the user:\n\\li Since much of the image manipulation is done in the log space of the intensities, input images with negative and small values (< 1) can produce poor results.\n\n\\li The original authors recommend performing the bias field correction on a downsampled version of the original image.\n\n\\li A binary mask or a weighted image can be supplied. If a binary mask is specified, those voxels in the input image which correspond to the voxels in the mask image are used to estimate the bias field. If a UseMaskLabel value is set to true, only voxels in the MaskImage that match the MaskLabel will be used; otherwise, all non-zero voxels in the MaskImage will be masked. If a confidence image is specified, the input voxels are weighted in the b-spline fitting routine according to the confidence voxel values.\n\n\\li The filter returns the corrected image. If the bias field is wanted, one can reconstruct it using the class itkBSplineControlPointImageFilter. See the IJ article and the test file for an example.\n\n\\li The 'Z' parameter in Sled's 1998 paper is the square root of the class variable 'm_WienerFilterNoise'.\n\n\n\nThe basic algorithm iterates between sharpening the intensity histogram of the corrected input image and spatially smoothing those results with a B-spline scalar field estimate of the bias field.\n\n\\author Nicholas J. Tustison\n\nContributed by Nicholas J. Tustison, James C. Gee in the Insight Journal paper: https://hdl.handle.net/10380/3053 \n\n\\par REFERENCE\n\n\nJ.G. Sled, A.P. Zijdenbos and A.C. Evans. \"A Nonparametric Method for\nAutomatic Correction of Intensity Nonuniformity in Data\" IEEE Transactions on Medical Imaging, Vol 17, No 1. Feb 1998.\n\nN.J. Tustison, B.B. Avants, P.A. Cook, Y. Zheng, A. Egan, P.A. Yushkevich, and J.C. Gee. \"N4ITK: Improved N3 Bias Correction\" IEEE Transactions on Medical Imaging, 29(6):1310-1320, June 2010.", + "detaileddescription" : "The nonparametric nonuniform intensity normalization (N3) algorithm, as introduced by Sled et al. in 1998 is a method for correcting nonuniformity associated with MR images. The algorithm assumes a simple parametric model (Gaussian) for the bias field and does not require tissue class segmentation. In addition, there are only a couple of parameters to tune with the default values performing quite well. N3 has been publicly available as a set of perl scripts (http://www.bic.mni.mcgill.ca/ServicesSoftwareAdvancedImageProcessingTools/HomePage )\n\nThe N4 algorithm, encapsulated with this class, is a variation of the original N3 algorithm with the additional benefits of an improved B-spline fitting routine which allows for multiple resolutions to be used during the correction process. We also modify the iterative update component of algorithm such that the residual bias field is continually updated\n\nNotes for the user:\n\\li Since much of the image manipulation is done in the log space of the intensities, input images with negative and small values (< 1) can produce poor results.\n\n\\li The original authors recommend performing the bias field correction on a downsampled version of the original image.\n\n\\li A binary mask or a weighted image can be supplied. If a binary mask is specified, those voxels in the input image which correspond to the voxels in the mask image are used to estimate the bias field. If a UseMaskLabel value is set to false (the default), all non-zero voxels in the MaskImage will be masked; otherwise only voxels in the MaskImage that match the MaskLabel will be used. If a confidence image is specified, the input voxels are weighted in the b-spline fitting routine according to the confidence voxel values.\n\n\\li The filter returns the corrected image. If the bias field is wanted, one can reconstruct it using the class itkBSplineControlPointImageFilter. See the IJ article and the test file for an example.\n\n\\li The 'Z' parameter in Sled's 1998 paper is the square root of the class variable 'm_WienerFilterNoise'.\n\n\n\n\nThe basic algorithm iterates between sharpening the intensity histogram of the corrected input image and spatially smoothing those results with a B-spline scalar field estimate of the bias field.\n\n\\author Nicholas J. Tustison\n\n\nContributed by Nicholas J. Tustison, James C. Gee in the Insight Journal paper: https://hdl.handle.net/10380/3053 \n\n\\par REFERENCE\n\n\n\nJ.G. Sled, A.P. Zijdenbos and A.C. Evans. \"A Nonparametric Method for\nAutomatic Correction of Intensity Nonuniformity in Data\" IEEE Transactions on Medical Imaging, Vol 17, No 1. Feb 1998.\n\nN.J. Tustison, B.B. Avants, P.A. Cook, Y. Zheng, A. Egan, P.A. Yushkevich, and J.C. Gee. \"N4ITK: Improved N3 Bias Correction\" IEEE Transactions on Medical Imaging, 29(6):1310-1320, June 2010.", "itk_module" : "ITKBiasCorrection", "itk_group" : "BiasCorrection" } diff --git a/Code/BasicFilters/json/NaryAddImageFilter.json b/Code/BasicFilters/json/NaryAddImageFilter.json index 24d6be24e..6af14ba62 100644 --- a/Code/BasicFilters/json/NaryAddImageFilter.json +++ b/Code/BasicFilters/json/NaryAddImageFilter.json @@ -54,7 +54,7 @@ } ], "briefdescription" : "Pixel-wise addition of N images.", - "detaileddescription" : "This class is templated over the types of the input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe pixel type of the input images must have a valid definition of the operator+ with each other. This condition is required because internally this filter will perform the operation\n\n\\code\npixel_from_image_N + pixel_from_image_(N+1)\n\n\\endcode\n\nAdditionally the type resulting from the sum, will be cast to the pixel type of the output image.\n\nThe total operation over one pixel will be\n\n\\code\noutput_pixel = static_cast( input_pixel_N + input_pixel_(N+1) )\n\n\\endcode\n\nFor example, this filter could be used directly for adding images whose pixels are vectors of the same dimension, and to store the resulting vector in an output image of vector pixels.\n\n\\warning No numeric overflow checking is performed in this filter.", + "detaileddescription" : "This class is templated over the types of the input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe pixel type of the input images must have a valid definition of the operator+ with each other. This condition is required because internally this filter will perform the operation\n\n\\code\npixel_from_image_N + pixel_from_image_(N+1)\n\n\\endcode\n\n\nAdditionally the type resulting from the sum, will be cast to the pixel type of the output image.\n\nThe total operation over one pixel will be\n\n\\code\noutput_pixel = static_cast( input_pixel_N + input_pixel_(N+1) )\n\n\\endcode\n\n\nFor example, this filter could be used directly for adding images whose pixels are vectors of the same dimension, and to store the resulting vector in an output image of vector pixels.\n\n\\warning No numeric overflow checking is performed in this filter.", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/NaryMaximumImageFilter.json b/Code/BasicFilters/json/NaryMaximumImageFilter.json index 1378ad8df..0c08ecaae 100644 --- a/Code/BasicFilters/json/NaryMaximumImageFilter.json +++ b/Code/BasicFilters/json/NaryMaximumImageFilter.json @@ -54,7 +54,7 @@ } ], "briefdescription" : "Computes the pixel-wise maximum of several images.", - "detaileddescription" : "This class is templated over the types of the input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe pixel type of the output images must have a valid definition of the operator<. This condition is required because internally this filter will perform an operation similar to:\n\n\\code\nconst OutputPixelType query_value = static_cast(pixel_from_input_n);\n\nif(current_maximum < query_value)\n\n {\n\n current_maximum = query_value;\n\n }\n\n\\endcode\n (where current_maximum is also of type OutputPixelType)\n\nfor each of the n input images.\n\nFor example, this filter could be used directly to find a \"maximum projection\" of a series of images, often used in preliminary analysis of time-series data.\n\n\\author Zachary Pincus\n\nThis filter was contributed by Zachary Pincus from the Department of Biochemistry and Program in Biomedical Informatics at Stanford University School of Medicine", + "detaileddescription" : "This class is templated over the types of the input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe pixel type of the output images must have a valid definition of the operator<. This condition is required because internally this filter will perform an operation similar to:\n\n\\code\nconst OutputPixelType query_value = static_cast(pixel_from_input_n);\n\nif(current_maximum < query_value)\n\n {\n\n current_maximum = query_value;\n\n }\n\n\\endcode\n (where current_maximum is also of type OutputPixelType)\n\nfor each of the n input images.\n\nFor example, this filter could be used directly to find a \"maximum projection\" of a series of images, often used in preliminary analysis of time-series data.\n\n\\author Zachary Pincus\n\n\nThis filter was contributed by Zachary Pincus from the Department of Biochemistry and Program in Biomedical Informatics at Stanford University School of Medicine", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/NoiseImageFilter.json b/Code/BasicFilters/json/NoiseImageFilter.json index b0e49a7d2..e83417fb7 100644 --- a/Code/BasicFilters/json/NoiseImageFilter.json +++ b/Code/BasicFilters/json/NoiseImageFilter.json @@ -68,7 +68,7 @@ } ], "briefdescription" : "Calculate the local noise in an image.", - "detaileddescription" : "Computes an image where a given pixel is the standard deviation of the pixels in a neighborhood about the corresponding input pixel. This serves as an estimate of the local noise (or texture) in an image. Currently, this noise estimate assume a piecewise constant image. This filter should be extended to fitting a (hyper) plane to the neighborhood and calculating the standard deviation of the residuals to this (hyper) plane.\n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator", + "detaileddescription" : "Computes an image where a given pixel is the standard deviation of the pixels in a neighborhood about the corresponding input pixel. This serves as an estimate of the local noise (or texture) in an image. Currently, this noise estimate assume a piecewise constant image. This filter should be extended to fitting a (hyper) plane to the neighborhood and calculating the standard deviation of the residuals to this (hyper) plane.\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator", "itk_module" : "ITKImageFilterBase", "itk_group" : "ImageFilterBase" } diff --git a/Code/BasicFilters/json/NormalizeImageFilter.json b/Code/BasicFilters/json/NormalizeImageFilter.json index 1857db4ac..bd2f78b42 100644 --- a/Code/BasicFilters/json/NormalizeImageFilter.json +++ b/Code/BasicFilters/json/NormalizeImageFilter.json @@ -29,7 +29,7 @@ } ], "briefdescription" : "Normalize an image by setting its mean to zero and variance to one.", - "detaileddescription" : "NormalizeImageFilter shifts and scales an image so that the pixels in the image have a zero mean and unit variance. This filter uses StatisticsImageFilter to compute the mean and variance of the input and then applies ShiftScaleImageFilter to shift and scale the pixels.\n\nNB: since this filter normalizes the data to lie within -1 to 1, integral types will produce an image that DOES NOT HAVE a unit variance.\n\n\\see NormalizeToConstantImageFilter", + "detaileddescription" : "NormalizeImageFilter shifts and scales an image so that the pixels in the image have a zero mean and unit variance. This filter uses StatisticsImageFilter to compute the mean and variance of the input and then applies ShiftScaleImageFilter to shift and scale the pixels.\n\nNB: since this filter normalizes the data such that the mean is at 0, and \\f$-\\sigma\\f$ to \\f$+\\sigma\\f$ is mapped to -1.0 to 1.0, output image integral types will produce an image that DOES NOT HAVE a unit variance due to 68% of the intensity values being mapped to the real number range of -1.0 to 1.0 and then cast to the output integral value.\n\n\\see NormalizeToConstantImageFilter", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/NormalizeToConstantImageFilter.json b/Code/BasicFilters/json/NormalizeToConstantImageFilter.json index 7b0f41cbb..b8acf424a 100644 --- a/Code/BasicFilters/json/NormalizeToConstantImageFilter.json +++ b/Code/BasicFilters/json/NormalizeToConstantImageFilter.json @@ -44,7 +44,7 @@ } ], "briefdescription" : "Scales image pixel intensities to make the sum of all pixels equal a user-defined constant.", - "detaileddescription" : "The default value of the constant is 1. It can be changed with SetConstant() .\n\nThis transform is especially useful for normalizing a convolution kernel.\n\nThis code was contributed in the Insight Journal paper: \"FFT based\nconvolution\" by Lehmann G. https://hdl.handle.net/10380/3154 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see NormalizeImageFilter \n\n\\see StatisticsImageFilter \n\n\\see DivideImageFilter", + "detaileddescription" : "The default value of the constant is 1. It can be changed with SetConstant() .\n\nThis transform is especially useful for normalizing a convolution kernel.\n\nThis code was contributed in the Insight Journal paper: \"FFT based\nconvolution\" by Lehmann G. https://hdl.handle.net/10380/3154 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see NormalizeImageFilter \n\n\n\\see StatisticsImageFilter \n\n\n\\see DivideImageFilter", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/NormalizedCorrelationImageFilter.json b/Code/BasicFilters/json/NormalizedCorrelationImageFilter.json index 83d58e499..aad1974cb 100644 --- a/Code/BasicFilters/json/NormalizedCorrelationImageFilter.json +++ b/Code/BasicFilters/json/NormalizedCorrelationImageFilter.json @@ -51,7 +51,7 @@ } ], "briefdescription" : "Computes the normalized correlation of an image and a template.", - "detaileddescription" : "This filter calculates the normalized correlation between an image and the template. Normalized correlation is frequently use in feature detection because it is invariant to local changes in contrast.\n\nThe filter can be given a mask. When presented with an input image and a mask, the normalized correlation is only calculated at those pixels under the mask.\n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator", + "detaileddescription" : "This filter calculates the normalized correlation between an image and the template. Normalized correlation is frequently use in feature detection because it is invariant to local changes in contrast.\n\nThe filter can be given a mask. When presented with an input image and a mask, the normalized correlation is only calculated at those pixels under the mask.\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator", "itk_module" : "ITKConvolution", "itk_group" : "Convolution" } diff --git a/Code/BasicFilters/json/NotEqualImageFilter.json b/Code/BasicFilters/json/NotEqualImageFilter.json index 8bd9ee26b..a2df52bf0 100644 --- a/Code/BasicFilters/json/NotEqualImageFilter.json +++ b/Code/BasicFilters/json/NotEqualImageFilter.json @@ -47,7 +47,7 @@ } ], "briefdescription" : "Implements pixel-wise generic operation of two images, or of an image and a constant.", - "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", + "detaileddescription" : "This class is parameterized over the types of the two input images and the type of the output image. It is also parameterized by the operation to be applied. A Functor style is used.\n\nThe constant must be of the same type than the pixel type of the corresponding image. It is wrapped in a SimpleDataObjectDecorator so it can be updated through the pipeline. The SetConstant() and GetConstant() methods are provided as shortcuts to set or get the constant value without manipulating the decorator.\n\n\\see BinaryGeneratorImagFilter \n\n\n\\see UnaryFunctorImageFilter TernaryFunctorImageFilter", "itk_module" : "ITKImageFilterBase", "itk_group" : "ImageFilterBase" } diff --git a/Code/BasicFilters/json/NotImageFilter.json b/Code/BasicFilters/json/NotImageFilter.json index d223a6077..c9d74d033 100644 --- a/Code/BasicFilters/json/NotImageFilter.json +++ b/Code/BasicFilters/json/NotImageFilter.json @@ -18,7 +18,7 @@ } ], "briefdescription" : "Implements the NOT logical operator pixel-wise on an image.", - "detaileddescription" : "This class is templated over the type of an input image and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nSince the logical NOT operation operates only on boolean types, the input type must be implicitly convertible to bool, which is only defined in C++ for integer types, the images passed to this filter must comply with the requirement of using integer pixel type.\n\nThe total operation over one pixel will be\n\n\\code\nif( !A )\n\n {\n\n return this->m_ForegroundValue;\n\n }\n\nreturn this->m_BackgroundValue;\n\n\\endcode\n\nWhere \"!\" is the unary Logical NOT operator in C++.", + "detaileddescription" : "This class is templated over the type of an input image and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nSince the logical NOT operation operates only on boolean types, the input type must be implicitly convertible to bool, which is only defined in C++ for integer types, the images passed to this filter must comply with the requirement of using integer pixel type.\n\nThe total operation over one pixel will be\n\n\\code\nif( !A )\n\n {\n\n return this->m_ForegroundValue;\n\n }\n\nreturn this->m_BackgroundValue;\n\n\\endcode\n\n\nWhere \"!\" is the unary Logical NOT operator in C++.", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/OpeningByReconstructionImageFilter.json b/Code/BasicFilters/json/OpeningByReconstructionImageFilter.json index cb87d8e74..a56b17f00 100644 --- a/Code/BasicFilters/json/OpeningByReconstructionImageFilter.json +++ b/Code/BasicFilters/json/OpeningByReconstructionImageFilter.json @@ -57,7 +57,7 @@ } ], "briefdescription" : "Opening by reconstruction of an image.", - "detaileddescription" : "This filter preserves regions, in the foreground, that can completely contain the structuring element. At the same time, this filter eliminates all other regions of foreground pixels. Contrary to the mophological opening, the opening by reconstruction preserves the shape of the components that are not removed by erosion. The opening by reconstruction of an image \"f\" is defined as:\n\nOpeningByReconstruction(f) = DilationByRecontruction(f, Erosion(f)).\n\nOpening by reconstruction not only removes structures destroyed by the erosion, but also levels down the contrast of the brightest regions. If PreserveIntensities is on, a subsequent reconstruction by dilation using a marker image that is the original image for all unaffected pixels.\n\nOpening by reconstruction is described in Chapter 6.3.9 of Pierre Soille's book \"Morphological Image Analysis: Principles and\nApplications\", Second Edition, Springer, 2003.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see GrayscaleMorphologicalOpeningImageFilter", + "detaileddescription" : "This filter preserves regions, in the foreground, that can completely contain the structuring element. At the same time, this filter eliminates all other regions of foreground pixels. Contrary to the morphological opening, the opening by reconstruction preserves the shape of the components that are not removed by erosion. The opening by reconstruction of an image \"f\" is defined as:\n\nOpeningByReconstruction(f) = DilationByRecontruction(f, Erosion(f)).\n\nOpening by reconstruction not only removes structures destroyed by the erosion, but also levels down the contrast of the brightest regions. If PreserveIntensities is on, a subsequent reconstruction by dilation using a marker image that is the original image for all unaffected pixels.\n\nOpening by reconstruction is described in Chapter 6.3.9 of Pierre Soille's book \"Morphological Image Analysis: Principles and\nApplications\", Second Edition, Springer, 2003.\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see GrayscaleMorphologicalOpeningImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/OrImageFilter.json b/Code/BasicFilters/json/OrImageFilter.json index 239bd71e8..38074d14b 100644 --- a/Code/BasicFilters/json/OrImageFilter.json +++ b/Code/BasicFilters/json/OrImageFilter.json @@ -20,7 +20,7 @@ } ], "briefdescription" : "Implements the OR bitwise operator pixel-wise between two images.", - "detaileddescription" : "This class is templated over the types of the two input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nSince the bitwise OR operation is only defined in C++ for integer types, the images passed to this filter must comply with the requirement of using integer pixel type.\n\nThe total operation over one pixel will be\n\n\\code\noutput_pixel = static_cast( input1_pixel | input2_pixel )\n\n\\endcode\n\nWhere \"|\" is the boolean OR operator in C++.", + "detaileddescription" : "This class is templated over the types of the two input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nSince the bitwise OR operation is only defined in C++ for integer types, the images passed to this filter must comply with the requirement of using integer pixel type.\n\nThe total operation over one pixel will be\n\n\\code\noutput_pixel = static_cast( input1_pixel | input2_pixel )\n\n\\endcode\n\n\nWhere \"|\" is the boolean OR operator in C++.", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json b/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json index b750496a8..d941b19fd 100644 --- a/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json +++ b/Code/BasicFilters/json/OtsuMultipleThresholdsImageFilter.json @@ -180,7 +180,7 @@ } ], "briefdescription" : "Threshold an image using multiple Otsu Thresholds.", - "detaileddescription" : "This filter creates a labeled image that separates the input image into various classes. The filter computes the thresholds using the OtsuMultipleThresholdsCalculator and applies those thresholds to the input image using the ThresholdLabelerImageFilter . The NumberOfHistogramBins and NumberOfThresholds can be set for the Calculator. The LabelOffset can be set for the ThresholdLabelerImageFilter .\n\nThis filter also includes an option to use the valley emphasis algorithm from H.F. Ng, \"Automatic thresholding for defect detection\", Pattern Recognition Letters, (27): 1644-1649, 2006. The valley emphasis algorithm is particularly effective when the object to be thresholded is small. See the following tests for examples: itkOtsuMultipleThresholdsImageFilterTest3 and itkOtsuMultipleThresholdsImageFilterTest4 To use this algorithm, simple call the setter: SetValleyEmphasis(true) It is turned off by default.\n\n\\see ScalarImageToHistogramGenerator \n\n\\see OtsuMultipleThresholdsCalculator \n\n\\see ThresholdLabelerImageFilter", + "detaileddescription" : "This filter creates a labeled image that separates the input image into various classes. The filter computes the thresholds using the OtsuMultipleThresholdsCalculator and applies those thresholds to the input image using the ThresholdLabelerImageFilter . The NumberOfHistogramBins and NumberOfThresholds can be set for the Calculator. The LabelOffset can be set for the ThresholdLabelerImageFilter .\n\nThis filter also includes an option to use the valley emphasis algorithm from H.F. Ng, \"Automatic thresholding for defect detection\", Pattern Recognition Letters, (27): 1644-1649, 2006. The valley emphasis algorithm is particularly effective when the object to be thresholded is small. See the following tests for examples: itkOtsuMultipleThresholdsImageFilterTest3 and itkOtsuMultipleThresholdsImageFilterTest4 To use this algorithm, simple call the setter: SetValleyEmphasis(true) It is turned off by default.\n\n\\see ScalarImageToHistogramGenerator \n\n\n\\see OtsuMultipleThresholdsCalculator \n\n\n\\see ThresholdLabelerImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/OtsuThresholdImageFilter.json b/Code/BasicFilters/json/OtsuThresholdImageFilter.json index 230a14239..dc0002b8a 100644 --- a/Code/BasicFilters/json/OtsuThresholdImageFilter.json +++ b/Code/BasicFilters/json/OtsuThresholdImageFilter.json @@ -70,7 +70,11 @@ { "name" : "ReturnBinMidpoint", "type" : "bool", - "default" : "false" + "default" : "false", + "briefdescriptionSet" : "", + "detaileddescriptionSet" : "Should the threshold value be mid-point of the bin or the maximum? Default is to return bin maximum.", + "briefdescriptionGet" : "", + "detaileddescriptionGet" : "Should the threshold value be mid-point of the bin or the maximum? Default is to return bin maximum." } ], "measurements" : [ @@ -167,7 +171,7 @@ } ], "briefdescription" : "Threshold an image using the Otsu Threshold.", - "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the OtsuThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", + "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the OtsuThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare \n\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/PowImageFilter.json b/Code/BasicFilters/json/PowImageFilter.json index 7f3bdb1b6..9cd1482cf 100644 --- a/Code/BasicFilters/json/PowImageFilter.json +++ b/Code/BasicFilters/json/PowImageFilter.json @@ -20,7 +20,7 @@ } ], "briefdescription" : "Computes the powers of 2 images.", - "detaileddescription" : "This class is templated over the types of the two input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe output of the pow function will be cast to the pixel type of the output image.\n\nThe total operation over one pixel will be \\code\noutput_pixel = static_cast< TOutput >( std::pow(static_cast(A),static_cast(B)) );\n\n\\endcode\n\nThe pow function can be applied to two images with the following: \\code\nSetInput1( image1 );\n\nSetInput2( image2 );\n\n\\endcode\n\nAdditionally, this filter can be used to raise every pixel of an image to a power of a constant by using \\code\nSetInput1( image1 );\n\nSetConstant2( constant );\n\n\\endcode", + "detaileddescription" : "This class is templated over the types of the two input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nThe output of the pow function will be cast to the pixel type of the output image.\n\nThe total operation over one pixel will be \\code\noutput_pixel = static_cast< TOutput >( std::pow(static_cast(A),static_cast(B)) );\n\n\\endcode\n\n\nThe pow function can be applied to two images with the following: \\code\nSetInput1( image1 );\n\nSetInput2( image2 );\n\n\\endcode\n\n\nAdditionally, this filter can be used to raise every pixel of an image to a power of a constant by using \\code\nSetInput1( image1 );\n\nSetConstant2( constant );\n\n\\endcode", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/ProjectedLandweberDeconvolutionImageFilter.json b/Code/BasicFilters/json/ProjectedLandweberDeconvolutionImageFilter.json index 64cb01bbd..4e3a048be 100644 --- a/Code/BasicFilters/json/ProjectedLandweberDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/ProjectedLandweberDeconvolutionImageFilter.json @@ -78,7 +78,7 @@ } ], "briefdescription" : "Deconvolve an image using the projected Landweber deconvolution algorithm.", - "detaileddescription" : "This filter performs the same calculation per iteration as the LandweberDeconvolutionImageFilter . However, at each iteration, negative pixels in the intermediate result are projected (set) to zero. This is useful if the solution is assumed to always be non-negative, which is the case when dealing with images formed by counting photons, for example.\n\nThis code was adapted from the Insight Journal contribution:\n\n\"Deconvolution: infrastructure and reference algorithms\" by Gaetan Lehmann https://hdl.handle.net/10380/3207 \n\n\\author Gaetan Lehmann, Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France \n\n\\author Cory Quammen, The University of North Carolina at Chapel Hill\n\n\\see IterativeDeconvolutionImageFilter \n\n\\see RichardsonLucyDeconvolutionImageFilter \n\n\\see LandweberDeconvolutionImageFilter", + "detaileddescription" : "This filter performs the same calculation per iteration as the LandweberDeconvolutionImageFilter . However, at each iteration, negative pixels in the intermediate result are projected (set) to zero. This is useful if the solution is assumed to always be non-negative, which is the case when dealing with images formed by counting photons, for example.\n\nThis code was adapted from the Insight Journal contribution:\n\n\"Deconvolution: infrastructure and reference algorithms\" by Gaetan Lehmann https://hdl.handle.net/10380/3207 \n\n\\author Gaetan Lehmann, Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France \n\n\n\\author Cory Quammen, The University of North Carolina at Chapel Hill\n\n\n\\see IterativeDeconvolutionImageFilter \n\n\n\\see RichardsonLucyDeconvolutionImageFilter \n\n\n\\see LandweberDeconvolutionImageFilter", "itk_module" : "ITKDeconvolution", "itk_group" : "Deconvolution" } diff --git a/Code/BasicFilters/json/RankImageFilter.json b/Code/BasicFilters/json/RankImageFilter.json index b1891a0f7..bc5241a7d 100644 --- a/Code/BasicFilters/json/RankImageFilter.json +++ b/Code/BasicFilters/json/RankImageFilter.json @@ -71,7 +71,7 @@ } ], "briefdescription" : "Rank filter of a greyscale image.", - "detaileddescription" : "Nonlinear filter in which each output pixel is a user defined rank of input pixels in a user defined neighborhood. The default rank is 0.5 (median). The boundary conditions are different to the standard itkMedianImageFilter. In this filter the neighborhood is cropped at the boundary, and is therefore smaller.\n\nThis filter uses a recursive implementation - essentially the one by Huang 1979, I believe, to compute the rank, and is therefore usually a lot faster than the direct implementation. The extensions to Huang are support for arbitrary pixel types (using c++ maps) and arbitrary neighborhoods. I presume that these are not new ideas.\n\nThis filter is based on the sliding window code from the consolidatedMorphology package on InsightJournal.\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.\n\nThis code was contributed in the Insight Journal paper: \"Efficient implementation of kernel filtering\" by Beare R., Lehmann G https://hdl.handle.net/1926/555 http://www.insight-journal.org/browse/publication/160 \n\n\\see MedianImageFilter \n\n\\author Richard Beare", + "detaileddescription" : "Nonlinear filter in which each output pixel is a user defined rank of input pixels in a user defined neighborhood. The default rank is 0.5 (median). The boundary conditions are different to the standard itkMedianImageFilter. In this filter the neighborhood is cropped at the boundary, and is therefore smaller.\n\nThis filter uses a recursive implementation - essentially the one by Huang 1979, I believe, to compute the rank, and is therefore usually a lot faster than the direct implementation. The extensions to Huang are support for arbitrary pixel types (using c++ maps) and arbitrary neighborhoods. I presume that these are not new ideas.\n\nThis filter is based on the sliding window code from the consolidatedMorphology package on InsightJournal.\n\nThe structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.\n\nThis code was contributed in the Insight Journal paper: \"Efficient implementation of kernel filtering\" by Beare R., Lehmann G https://hdl.handle.net/1926/555 http://www.insight-journal.org/browse/publication/160 \n\n\\see MedianImageFilter \n\n\n\\author Richard Beare", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/RealAndImaginaryToComplexImageFilter.json b/Code/BasicFilters/json/RealAndImaginaryToComplexImageFilter.json index 0f12c574f..849b146af 100644 --- a/Code/BasicFilters/json/RealAndImaginaryToComplexImageFilter.json +++ b/Code/BasicFilters/json/RealAndImaginaryToComplexImageFilter.json @@ -22,7 +22,7 @@ } ], "briefdescription" : "ComposeImageFilter combine several scalar images into a multicomponent image.", - "detaileddescription" : "ComposeImageFilter combine several scalar images into an itk::Image of vector pixel (itk::Vector , itk::RGBPixel , ...), of std::complex pixel, or in an itk::VectorImage .\n\n\\par Inputs and Usage\n\\code\nfilter->SetInput( 0, image0 );\n\nfilter->SetInput( 1, image1 );\n\n...\n\nfilter->Update();\n\nitk::VectorImage< PixelType, dimension >::Pointer = filter->GetOutput();\n\n\\endcode\n All input images are expected to have the same template parameters and have the same size and origin.\n\n\\see VectorImage \n\n\\see VectorIndexSelectionCastImageFilter", + "detaileddescription" : "ComposeImageFilter combine several scalar images into an itk::Image of vector pixel (itk::Vector , itk::RGBPixel , ...), of std::complex pixel, or in an itk::VectorImage .\n\n\\par Inputs and Usage\n\\code\nfilter->SetInput( 0, image0 );\n\nfilter->SetInput( 1, image1 );\n\n...\n\nfilter->Update();\n\nitk::VectorImage< PixelType, dimension >::Pointer = filter->GetOutput();\n\n\\endcode\n All input images are expected to have the same template parameters and have the same size and origin.\n\n\n\\see VectorImage \n\n\n\\see VectorIndexSelectionCastImageFilter", "itk_module" : "ITKImageCompose", "itk_group" : "ImageCompose" } diff --git a/Code/BasicFilters/json/RealToHalfHermitianForwardFFTImageFilter.json b/Code/BasicFilters/json/RealToHalfHermitianForwardFFTImageFilter.json index ebd9d070e..2db9f8f0c 100644 --- a/Code/BasicFilters/json/RealToHalfHermitianForwardFFTImageFilter.json +++ b/Code/BasicFilters/json/RealToHalfHermitianForwardFFTImageFilter.json @@ -19,7 +19,7 @@ } ], "briefdescription" : "Base class for specialized real-to-complex forward Fast Fourier Transform .", - "detaileddescription" : "This is a base class for the \"forward\" or \"direct\" discrete Fourier Transform . This is an abstract base class: the actual implementation is provided by the best child class available on the system when the object is created via the object factory system.\n\nThis class transforms a real input image into its complex Fourier transform. The Fourier transform of a real input image has Hermitian symmetry: \\f$ f(\\mathbf{x}) = f^*(-\\mathbf{x}) \\f$ . That is, when the result of the transform is split in half along the X-dimension, the values in the second half of the transform are the complex conjugates of values in the first half reflected about the center of the image in each dimension. This filter takes advantage of the Hermitian symmetry property and reduces the size of the output in the first dimension to N/2+1, where N is the size of the input image in that dimension and the division by 2 is rounded down.\n\n\\see HalfHermitianToRealInverseFFTImageFilter \n\n\\see ForwardFFTImageFilter", + "detaileddescription" : "This is a base class for the \"forward\" or \"direct\" discrete Fourier Transform . This is an abstract base class: the actual implementation is provided by the best child class available on the system when the object is created via the object factory system.\n\nThis class transforms a real input image into its complex Fourier transform. The Fourier transform of a real input image has Hermitian symmetry: \\f$ f(\\mathbf{x}) = f^*(-\\mathbf{x}) \\f$ . That is, when the result of the transform is split in half along the X-dimension, the values in the second half of the transform are the complex conjugates of values in the first half reflected about the center of the image in each dimension. This filter takes advantage of the Hermitian symmetry property and reduces the size of the output in the first dimension to N/2+1, where N is the size of the input image in that dimension and the division by 2 is rounded down.\n\n\\see HalfHermitianToRealInverseFFTImageFilter \n\n\n\\see ForwardFFTImageFilter", "itk_module" : "ITKFFT", "itk_group" : "FFT" } diff --git a/Code/BasicFilters/json/ReconstructionByDilationImageFilter.json b/Code/BasicFilters/json/ReconstructionByDilationImageFilter.json index fe2b7a2c9..4a8995faf 100644 --- a/Code/BasicFilters/json/ReconstructionByDilationImageFilter.json +++ b/Code/BasicFilters/json/ReconstructionByDilationImageFilter.json @@ -33,7 +33,7 @@ } ], "briefdescription" : "grayscale reconstruction by dilation of an image", - "detaileddescription" : "Reconstruction by dilation operates on a \"marker\" image and a \"mask\" image, and is defined as the dilation of the marker image with respect to the mask image iterated until stability.\n\nThe marker image must be less than or equal to the mask image (on a pixel by pixel basis).\n\nGeodesic morphology is described in Chapter 6.2 of Pierre Soille's book \"Morphological Image Analysis: Principles and Applications\", Second Edition, Springer, 2003.\n\nAlgorithm implemented in this filter is based on algorithm described by Kevin Robinson and Paul F. Whelan in \"Efficient Morphological\n Reconstruction: A Downhill Filter\", Pattern Recognition Letters, Volume 25, Issue 15, November 2004, Pages 1759-1767.\n\nThe algorithm, a description of the transform and some applications can be found in \"Morphological Grayscale Reconstruction in Image Analysis:\n Applications and Efficient Algorithms\", Luc Vincent, IEEE Transactions on image processing, Vol. 2, April 1993.\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia.\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter , ReconstructionByErosionImageFilter , OpeningByReconstructionImageFilter , ClosingByReconstructionImageFilter , ReconstructionImageFilter", + "detaileddescription" : "Reconstruction by dilation operates on a \"marker\" image and a \"mask\" image, and is defined as the dilation of the marker image with respect to the mask image iterated until stability.\n\nThe marker image must be less than or equal to the mask image (on a pixel by pixel basis).\n\nGeodesic morphology is described in Chapter 6.2 of Pierre Soille's book \"Morphological Image Analysis: Principles and Applications\", Second Edition, Springer, 2003.\n\nAlgorithm implemented in this filter is based on algorithm described by Kevin Robinson and Paul F. Whelan in \"Efficient Morphological\n Reconstruction: A Downhill Filter\", Pattern Recognition Letters, Volume 25, Issue 15, November 2004, Pages 1759-1767.\n\nThe algorithm, a description of the transform and some applications can be found in \"Morphological Grayscale Reconstruction in Image Analysis:\n Applications and Efficient Algorithms\", Luc Vincent, IEEE Transactions on image processing, Vol. 2, April 1993.\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia.\n\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter , ReconstructionByErosionImageFilter , OpeningByReconstructionImageFilter , ClosingByReconstructionImageFilter , ReconstructionImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/ReconstructionByErosionImageFilter.json b/Code/BasicFilters/json/ReconstructionByErosionImageFilter.json index 45dd48626..e568d5333 100644 --- a/Code/BasicFilters/json/ReconstructionByErosionImageFilter.json +++ b/Code/BasicFilters/json/ReconstructionByErosionImageFilter.json @@ -33,7 +33,7 @@ } ], "briefdescription" : "grayscale reconstruction by erosion of an image", - "detaileddescription" : "Reconstruction by erosion operates on a \"marker\" image and a \"mask\" image, and is defined as the erosion of the marker image with respect to the mask image iterated until stability.\n\nThe marker image must be less than or equal to the mask image (on a pixel by pixel basis).\n\nGeodesic morphology is described in Chapter 6.2 of Pierre Soille's book \"Morphological Image Analysis: Principles and Applications\", Second Edition, Springer, 2003.\n\nAlgorithm implemented in this filter is based on algorithm described by Kevin Robinson and Paul F. Whelan in \"Efficient Morphological\n Reconstruction: A Downhill Filter\", Pattern Recognition Letters, Volume 25, Issue 15, November 2004, Pages 1759-1767.\n\nThe algorithm, a description of the transform and some applications can be found in \"Morphological Grayscale Reconstruction in Image Analysis:\n Applications and Efficient Algorithms\", Luc Vincent, IEEE Transactions on image processing, Vol. 2, April 1993.\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia.\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter , ReconstructionByErosionImageFilter , OpeningByReconstructionImageFilter , ClosingByReconstructionImageFilter , ReconstructionImageFilter", + "detaileddescription" : "Reconstruction by erosion operates on a \"marker\" image and a \"mask\" image, and is defined as the erosion of the marker image with respect to the mask image iterated until stability.\n\nThe marker image must be less than or equal to the mask image (on a pixel by pixel basis).\n\nGeodesic morphology is described in Chapter 6.2 of Pierre Soille's book \"Morphological Image Analysis: Principles and Applications\", Second Edition, Springer, 2003.\n\nAlgorithm implemented in this filter is based on algorithm described by Kevin Robinson and Paul F. Whelan in \"Efficient Morphological\n Reconstruction: A Downhill Filter\", Pattern Recognition Letters, Volume 25, Issue 15, November 2004, Pages 1759-1767.\n\nThe algorithm, a description of the transform and some applications can be found in \"Morphological Grayscale Reconstruction in Image Analysis:\n Applications and Efficient Algorithms\", Luc Vincent, IEEE Transactions on image processing, Vol. 2, April 1993.\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia.\n\n\n\\see MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter , ReconstructionByErosionImageFilter , OpeningByReconstructionImageFilter , ClosingByReconstructionImageFilter , ReconstructionImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/RecursiveGaussianImageFilter.json b/Code/BasicFilters/json/RecursiveGaussianImageFilter.json index ba06ce907..220ac0d75 100644 --- a/Code/BasicFilters/json/RecursiveGaussianImageFilter.json +++ b/Code/BasicFilters/json/RecursiveGaussianImageFilter.json @@ -92,7 +92,7 @@ } ], "briefdescription" : "Base class for computing IIR convolution with an approximation of a Gaussian kernel.", - "detaileddescription" : "\\f[ \\frac{ 1 }{ \\sigma \\sqrt{ 2 \\pi } } \\exp{ \\left( - \\frac{x^2}{ 2 \\sigma^2 } \\right) } \\f] \n\nRecursiveGaussianImageFilter is the base class for recursive filters that approximate convolution with the Gaussian kernel. This class implements the recursive filtering method proposed by R.Deriche in IEEE-PAMI Vol.12, No.1, January 1990, pp 78-87, \"Fast Algorithms for Low-Level Vision\"\n\nDetails of the implementation are described in the technical report: R. Deriche, \"Recursively Implementing The Gaussian and Its Derivatives\", INRIA, 1993, ftp://ftp.inria.fr/INRIA/tech-reports/RR/RR-1893.ps.gz \n\nFurther improvements of the algorithm are described in: G. Farneback & C.-F. Westin, \"On Implementation of Recursive Gaussian\nFilters\", so far unpublished.\n\nAs compared to itk::DiscreteGaussianImageFilter , this filter tends to be faster for large kernels, and it can take the derivative of the blurred image in one step. Also, note that we have itk::RecursiveGaussianImageFilter::SetSigma() , but itk::DiscreteGaussianImageFilter::SetVariance() .\n\n\\see DiscreteGaussianImageFilter", + "detaileddescription" : "\\f[ \\frac{ 1 }{ \\sigma \\sqrt{ 2 \\pi } } \\exp{ \\left( - \\frac{x^2}{ 2 \\sigma^2 } \\right) } \\f] \n\nRecursiveGaussianImageFilter is the base class for recursive filters that approximate convolution with the Gaussian kernel. This class implements the recursive filtering method proposed by R.Deriche in IEEE-PAMI Vol.12, No.1, January 1990, pp 78-87, \"Fast Algorithms for Low-Level Vision\"\n\nDetails of the implementation are described in the technical report: R. Deriche, \"Recursively Implementing The Gaussian and Its Derivatives\", INRIA, 1993, ftp://ftp.inria.fr/INRIA/tech-reports/RR/RR-1893.ps.gz \n\nFurther improvements of the algorithm are described in: G. Farneback & C.-F. Westin, \"On Implementation of Recursive Gaussian\n Filters\", so far unpublished.\n\nAs compared to itk::DiscreteGaussianImageFilter , this filter tends to be faster for large kernels, and it can take the derivative of the blurred image in one step. Also, note that we have itk::RecursiveGaussianImageFilter::SetSigma() , but itk::DiscreteGaussianImageFilter::SetVariance() .\n\n\\see DiscreteGaussianImageFilter", "itk_module" : "ITKSmoothing", "itk_group" : "Smoothing" } diff --git a/Code/BasicFilters/json/RegionalMaximaImageFilter.json b/Code/BasicFilters/json/RegionalMaximaImageFilter.json index 87c3c7260..85c4715c2 100644 --- a/Code/BasicFilters/json/RegionalMaximaImageFilter.json +++ b/Code/BasicFilters/json/RegionalMaximaImageFilter.json @@ -43,7 +43,7 @@ "type" : "bool", "default" : "true", "briefdescriptionSet" : "", - "detaileddescriptionSet" : "Set/Get wether a flat image must be considered as a maxima or not. Defaults to true.", + "detaileddescriptionSet" : "Set/Get whether a flat image must be considered as a maxima or not. Defaults to true.", "briefdescriptionGet" : "", "detaileddescriptionGet" : "Set/Get wether a flat image must be considered as a maxima or not. Defaults to true." } @@ -61,7 +61,7 @@ } ], "briefdescription" : "Produce a binary image where foreground is the regional maxima of the input image.", - "detaileddescription" : "Regional maxima are flat zones surrounded by pixels of lower value.\n\nIf the input image is constant, the entire image can be considered as a maxima or not. The desired behavior can be selected with the SetFlatIsMaxima() method.\n\n\\author Gaetan Lehmann\n\nThis class was contributed to the Insight Journal by author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. The paper can be found at https://hdl.handle.net/1926/153 \n\n\\see ValuedRegionalMaximaImageFilter \n\n\\see HConvexImageFilter \n\n\\see RegionalMinimaImageFilter", + "detaileddescription" : "Regional maxima are flat zones surrounded by pixels of lower value.\n\nIf the input image is constant, the entire image can be considered as a maxima or not. The desired behavior can be selected with the SetFlatIsMaxima() method.\n\n\\author Gaetan Lehmann\n\n\nThis class was contributed to the Insight Journal by author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. The paper can be found at https://hdl.handle.net/1926/153 \n\n\\see ValuedRegionalMaximaImageFilter \n\n\n\\see HConvexImageFilter \n\n\n\\see RegionalMinimaImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/RegionalMinimaImageFilter.json b/Code/BasicFilters/json/RegionalMinimaImageFilter.json index 256d01f4b..03950036f 100644 --- a/Code/BasicFilters/json/RegionalMinimaImageFilter.json +++ b/Code/BasicFilters/json/RegionalMinimaImageFilter.json @@ -61,7 +61,7 @@ } ], "briefdescription" : "Produce a binary image where foreground is the regional minima of the input image.", - "detaileddescription" : "Regional minima are flat zones surrounded by pixels of greater value.\n\nIf the input image is constant, the entire image can be considered as a minima or not. The SetFlatIsMinima() method let the user choose which behavior to use.\n\nThis class was contribtued to the Insight Journal by \\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. https://hdl.handle.net/1926/153 \n\n\\see RegionalMaximaImageFilter \n\n\\see ValuedRegionalMinimaImageFilter \n\n\\see HConcaveImageFilter", + "detaileddescription" : "Regional minima are flat zones surrounded by pixels of greater value.\n\nIf the input image is constant, the entire image can be considered as a minima or not. The SetFlatIsMinima() method let the user choose which behavior to use.\n\nThis class was contributed to the Insight Journal by \\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. https://hdl.handle.net/1926/153 \n\n\n\\see RegionalMaximaImageFilter \n\n\n\\see ValuedRegionalMinimaImageFilter \n\n\n\\see HConcaveImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/RelabelLabelMapFilter.json b/Code/BasicFilters/json/RelabelLabelMapFilter.json index 63cdcd3bd..123221ca0 100644 --- a/Code/BasicFilters/json/RelabelLabelMapFilter.json +++ b/Code/BasicFilters/json/RelabelLabelMapFilter.json @@ -45,7 +45,7 @@ } ], "briefdescription" : "This filter relabels the LabelObjects; the new labels are arranged consecutively with consideration for the background value.", - "detaileddescription" : "This filter takes the LabelObjects from the input and reassigns them to the output by calling the PushLabelObject method, which by default, attempts to reorganize the labels consecutively. The user can assign an arbitrary value to the background; the filter will assign the labels consecutively by skipping the background value.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ShapeLabelObject , RelabelComponentImageFilter", + "detaileddescription" : "This filter takes the LabelObjects from the input and reassigns them to the output by calling the PushLabelObject method, which by default, attempts to reorganize the labels consecutively. The user can assign an arbitrary value to the background; the filter will assign the labels consecutively by skipping the background value.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/1926/584 or http://www.insight-journal.org/browse/publication/176 \\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ShapeLabelObject , RelabelComponentImageFilter", "itk_module" : "ITKLabelMap", "itk_group" : "LabelMap" } diff --git a/Code/BasicFilters/json/RenyiEntropyThresholdImageFilter.json b/Code/BasicFilters/json/RenyiEntropyThresholdImageFilter.json index e8f2485bb..3e1470aad 100644 --- a/Code/BasicFilters/json/RenyiEntropyThresholdImageFilter.json +++ b/Code/BasicFilters/json/RenyiEntropyThresholdImageFilter.json @@ -126,7 +126,7 @@ } ], "briefdescription" : "Threshold an image using the RenyiEntropy Threshold.", - "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the RenyiEntropyThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", + "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the RenyiEntropyThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/ResampleImageFilter.json b/Code/BasicFilters/json/ResampleImageFilter.json index 3c246d2d5..b41a7ff25 100644 --- a/Code/BasicFilters/json/ResampleImageFilter.json +++ b/Code/BasicFilters/json/ResampleImageFilter.json @@ -296,7 +296,7 @@ } ], "briefdescription" : "Resample an image via a coordinate transform.", - "detaileddescription" : "ResampleImageFilter resamples an existing image through some coordinate transform, interpolating via some image function. The class is templated over the types of the input and output images.\n\nNote that the choice of interpolator function can be important. This function is set via SetInterpolator() . The default is LinearInterpolateImageFunction , which is reasonable for ordinary medical images. However, some synthetic images have pixels drawn from a finite prescribed set. An example would be a mask indicating the segmentation of a brain into a small number of tissue types. For such an image, one does not want to interpolate between different pixel values, and so NearestNeighborInterpolateImageFunction < InputImageType, TCoordRep > would be a better choice.\n\nIf an sample is taken from outside the image domain, the default behavior is to use a default pixel value. If different behavior is desired, an extrapolator function can be set with SetExtrapolator() .\n\nOutput information (spacing, size and direction) for the output image should be set. This information has the normal defaults of unit spacing, zero origin and identity direction. Optionally, the output information can be obtained from a reference image. If the reference image is provided and UseReferenceImage is On, then the spacing, origin and direction of the reference image will be used.\n\nSince this filter produces an image which is a different size than its input, it needs to override several of the methods defined in ProcessObject in order to properly manage the pipeline execution model. In particular, this filter overrides ProcessObject::GenerateInputRequestedRegion() and ProcessObject::GenerateOutputInformation() .\n\nThis filter is implemented as a multithreaded filter. It provides a DynamicThreadedGenerateData() method for its implementation. \\warning For multithreading, the TransformPoint method of the user-designated coordinate transform must be threadsafe.\n\n\n\\par ITK Sphinx Examples:\n\n\n\n\\par \\li All ITK Sphinx Examples\n\n\n\n\n\\li Translate Image \n\n\n\n\n\\li Upsampling An Image \n\n\n\n\n\\li Resample An Image", + "detaileddescription" : "ResampleImageFilter resamples an existing image through some coordinate transform, interpolating via some image function. The class is templated over the types of the input and output images.\n\nNote that the choice of interpolator function can be important. This function is set via SetInterpolator() . The default is LinearInterpolateImageFunction , which is reasonable for ordinary medical images. However, some synthetic images have pixels drawn from a finite prescribed set. An example would be a mask indicating the segmentation of a brain into a small number of tissue types. For such an image, one does not want to interpolate between different pixel values, and so NearestNeighborInterpolateImageFunction < InputImageType, TCoordRep > would be a better choice.\n\nIf an sample is taken from outside the image domain, the default behavior is to use a default pixel value. If different behavior is desired, an extrapolator function can be set with SetExtrapolator() .\n\nOutput information (spacing, size and direction) for the output image should be set. This information has the normal defaults of unit spacing, zero origin and identity direction. Optionally, the output information can be obtained from a reference image. If the reference image is provided and UseReferenceImage is On, then the spacing, origin and direction of the reference image will be used.\n\nSince this filter produces an image which is a different size than its input, it needs to override several of the methods defined in ProcessObject in order to properly manage the pipeline execution model. In particular, this filter overrides ProcessObject::GenerateInputRequestedRegion() and ProcessObject::GenerateOutputInformation() .\n\nThis filter is implemented as a multithreaded filter. It provides a DynamicThreadedGenerateData() method for its implementation. \\warning For multithreading, the TransformPoint method of the user-designated coordinate transform must be threadsafe.", "itk_module" : "ITKImageGrid", "itk_group" : "ImageGrid" } diff --git a/Code/BasicFilters/json/RichardsonLucyDeconvolutionImageFilter.json b/Code/BasicFilters/json/RichardsonLucyDeconvolutionImageFilter.json index 01b9f0dcd..087897dd5 100644 --- a/Code/BasicFilters/json/RichardsonLucyDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/RichardsonLucyDeconvolutionImageFilter.json @@ -69,7 +69,7 @@ } ], "briefdescription" : "Deconvolve an image using the Richardson-Lucy deconvolution algorithm.", - "detaileddescription" : "This filter implements the Richardson-Lucy deconvolution algorithm as defined in Bertero M and Boccacci P, \"Introduction to Inverse\nProblems in Imaging\", 1998. The algorithm assumes that the input image has been formed by a linear shift-invariant system with a known kernel.\n\nThe Richardson-Lucy algorithm assumes that noise in the image follows a Poisson distribution and that the distribution for each pixel is independent of the other pixels.\n\nThis code was adapted from the Insight Journal contribution:\n\n\"Deconvolution: infrastructure and reference algorithms\" by Gaetan Lehmann https://hdl.handle.net/10380/3207 \n\n\\author Gaetan Lehmann, Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France \n\n\\author Cory Quammen, The University of North Carolina at Chapel Hill\n\n\\see IterativeDeconvolutionImageFilter \n\n\\see LandweberDeconvolutionImageFilter \n\n\\see ProjectedLandweberDeconvolutionImageFilter", + "detaileddescription" : "This filter implements the Richardson-Lucy deconvolution algorithm as defined in Bertero M and Boccacci P, \"Introduction to Inverse\n Problems in Imaging\", 1998. The algorithm assumes that the input image has been formed by a linear shift-invariant system with a known kernel.\n\nThe Richardson-Lucy algorithm assumes that noise in the image follows a Poisson distribution and that the distribution for each pixel is independent of the other pixels.\n\nThis code was adapted from the Insight Journal contribution:\n\n\"Deconvolution: infrastructure and reference algorithms\" by Gaetan Lehmann https://hdl.handle.net/10380/3207 \n\n\\author Gaetan Lehmann, Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France \n\n\n\\author Cory Quammen, The University of North Carolina at Chapel Hill\n\n\n\\see IterativeDeconvolutionImageFilter \n\n\n\\see LandweberDeconvolutionImageFilter \n\n\n\\see ProjectedLandweberDeconvolutionImageFilter", "itk_module" : "ITKDeconvolution", "itk_group" : "Deconvolution" } diff --git a/Code/BasicFilters/json/SLICImageFilter.json b/Code/BasicFilters/json/SLICImageFilter.json index 950726e5d..cf156c7b6 100644 --- a/Code/BasicFilters/json/SLICImageFilter.json +++ b/Code/BasicFilters/json/SLICImageFilter.json @@ -157,7 +157,7 @@ } ], "itk_module" : "ITKSuperPixel", - "detaileddescription" : "The Simple Linear Iterative Clustering (SLIC) algorithm groups pixels into a set of labeled regions or super-pixels. Super-pixels follow natural image boundaries, are compact, and are nearly uniform regions which can be used as a larger primitive for more efficient computation. The SLIC algorithm can be viewed as a spatially constrained iterative k-means method.\n\nThe original algorithm was designed to cluster on the joint domain of the images index space and it's CIELAB color space. This implementation works with images of arbitrary dimension as well as scalar, single channel, images and most multi-component image types including ITK's arbitrary length VectorImage .\n\nThe distance between a pixel and a cluster is the sum of squares of the difference between their joint range and domains ( index and value ). The computation is done in index space with scales provided by the SpatialProximityWeight parameters.\n\nThe output is a label image with each label representing a superpixel cluster. Every pixel in the output is labeled, and the starting label id is zero.\n\nThis code was contributed in the Insight Journal paper: \"Scalable Simple Linear Iterative Clustering (SSLIC) Using a\nGeneric and Parallel Approach\" by Lowekamp B. C., Chen D. T., Yaniv Z.", + "detaileddescription" : "The Simple Linear Iterative Clustering (SLIC) algorithm groups pixels into a set of labeled regions or super-pixels. Super-pixels follow natural image boundaries, are compact, and are nearly uniform regions which can be used as a larger primitive for more efficient computation. The SLIC algorithm can be viewed as a spatially constrained iterative k-means method.\n\nThe original algorithm was designed to cluster on the joint domain of the images index space and it's CIELAB color space. This implementation works with images of arbitrary dimension as well as scalar, single channel, images and most multi-component image types including ITK's arbitrary length VectorImage .\n\nThe distance between a pixel and a cluster is the sum of squares of the difference between their joint range and domains ( index and value ). The computation is done in index space with scales provided by the SpatialProximityWeight parameters.\n\nThe output is a label image with each label representing a superpixel cluster. Every pixel in the output is labeled, and the starting label id is zero.\n\nThis code was contributed in the Insight Journal paper: \"Scalable Simple Linear Iterative Clustering (SSLIC) Using a\nGeneric and Parallel Approach\" by Lowekamp B. C., Chen D. T., Yaniv Z., Yoo T. S. https://hdl.handle.net/1926/3596", "briefdescription" : "Simple Linear Iterative Clustering (SLIC) super-pixel segmentation.", "itk_group" : "SuperPixel" } diff --git a/Code/BasicFilters/json/STAPLEImageFilter.json b/Code/BasicFilters/json/STAPLEImageFilter.json index 533b49c85..67937f665 100644 --- a/Code/BasicFilters/json/STAPLEImageFilter.json +++ b/Code/BasicFilters/json/STAPLEImageFilter.json @@ -70,7 +70,7 @@ } ], "briefdescription" : "The STAPLE filter implements the Simultaneous Truth and Performance Level Estimation algorithm for generating ground truth volumes from a set of binary expert segmentations.", - "detaileddescription" : "The STAPLE algorithm treats segmentation as a pixelwise classification, which leads to an averaging scheme that accounts for systematic biases in the behavior of experts in order to generate a fuzzy ground truth volume and simultaneous accuracy assessment of each expert. The ground truth volumes produced by this filter are floating point volumes of values between zero and one that indicate probability of each pixel being in the object targeted by the segmentation.\n\nThe STAPLE algorithm is described in\n\nS. Warfield, K. Zou, W. Wells, \"Validation of image segmentation and expert\nquality with an expectation-maximization algorithm\" in MICCAI 2002: Fifth International Conference on Medical Image Computing and Computer-Assisted Intervention, Springer-Verlag, Heidelberg, Germany, 2002, pp. 298-306\n\n\\par INPUTS\nInput volumes to the STAPLE filter must be binary segmentations of an image, that is, there must be a single foreground value that represents positively classified pixels (pixels that are considered to belong inside the segmentation). Any number of background pixel values may be present in the input images. You can, for example, input volumes with many different labels as long as the structure you are interested in creating ground truth for is consistently labeled among all input volumes. Pixel type of the input volumes does not matter. Specify the label value for positively classified pixels using SetForegroundValue. All other labels will be considered to be negatively classified pixels (background).\n\nInput volumes must all contain the same size RequestedRegions.\n\n\\par OUTPUTS\nThe STAPLE filter produces a single output volume with a range of floating point values from zero to one. IT IS VERY IMPORTANT TO INSTANTIATE THIS FILTER WITH A FLOATING POINT OUTPUT TYPE (floats or doubles). You may threshold the output above some probability threshold if you wish to produce a binary ground truth.\n\n\\par PARAMETERS\nThe STAPLE algorithm requires a number of inputs. You may specify any number of input volumes using the SetInput(i, p_i) method, where i ranges from zero to N-1, N is the total number of input segmentations, and p_i is the SmartPointer to the i-th segmentation.\n\nThe SetConfidenceWeight parameter is a modifier for the prior probability that any pixel would be classified as inside the target object. This implementation of the STAPLE algorithm automatically calculates prior positive classification probability as the average fraction of the image volume filled by the target object in each input segmentation. The ConfidenceWeight parameter allows for scaling the of this default prior probability: if g_t is the prior probability that a pixel would be classified inside the target object, then g_t is set to g_t * ConfidenceWeight before iterating on the solution. In general ConfidenceWeight should be left to the default of 1.0.\n\nYou must provide a foreground value using SetForegroundValue that the STAPLE algorithm will use to identify positively classified pixels in the the input images. All other values in the image will be treated as background values. For example, if your input segmentations consist of 1's everywhere inside the segmented region, then use SetForegroundValue(1).\n\nThe STAPLE algorithm is an iterative E-M algorithm and will converge on a solution after some number of iterations that cannot be known a priori. After updating the filter, the total elapsed iterations taken to converge on the solution can be queried through GetElapsedIterations() . You may also specify a MaximumNumberOfIterations, after which the algorithm will stop iterating regardless of whether or not it has converged. This implementation of the STAPLE algorithm will find the solution to within seven digits of precision unless it is stopped early.\n\nOnce updated, the Sensitivity (true positive fraction, q) and Specificity (true negative fraction, q) for each expert input volume can be queried using GetSensitivity(i) and GetSpecificity(i), where i is the i-th input volume.\n\n\\par REQUIRED PARAMETERS\nThe only required parameters for this filter are the ForegroundValue and the input volumes. All other parameters may be safely left to their default values. Please see the paper cited above for more information on the STAPLE algorithm and its parameters. A proper understanding of the algorithm is important for interpreting the results that it produces.\n\n\\par EVENTS\nThis filter invokes IterationEvent() at each iteration of the E-M algorithm. Setting the AbortGenerateData() flag will cause the algorithm to halt after the current iteration and produce results just as if it had converged. The algorithm makes no attempt to report its progress since the number of iterations needed cannot be known in advance.", + "detaileddescription" : "The STAPLE algorithm treats segmentation as a pixelwise classification, which leads to an averaging scheme that accounts for systematic biases in the behavior of experts in order to generate a fuzzy ground truth volume and simultaneous accuracy assessment of each expert. The ground truth volumes produced by this filter are floating point volumes of values between zero and one that indicate probability of each pixel being in the object targeted by the segmentation.\n\nThe STAPLE algorithm is described in\n\nS. Warfield, K. Zou, W. Wells, \"Validation of image segmentation and expert\n quality with an expectation-maximization algorithm\" in MICCAI 2002: Fifth International Conference on Medical Image Computing and Computer-Assisted Intervention, Springer-Verlag, Heidelberg, Germany, 2002, pp. 298-306\n\n\\par INPUTS\nInput volumes to the STAPLE filter must be binary segmentations of an image, that is, there must be a single foreground value that represents positively classified pixels (pixels that are considered to belong inside the segmentation). Any number of background pixel values may be present in the input images. You can, for example, input volumes with many different labels as long as the structure you are interested in creating ground truth for is consistently labeled among all input volumes. Pixel type of the input volumes does not matter. Specify the label value for positively classified pixels using SetForegroundValue. All other labels will be considered to be negatively classified pixels (background).\n\n\nInput volumes must all contain the same size RequestedRegions.\n\n\\par OUTPUTS\nThe STAPLE filter produces a single output volume with a range of floating point values from zero to one. IT IS VERY IMPORTANT TO INSTANTIATE THIS FILTER WITH A FLOATING POINT OUTPUT TYPE (floats or doubles). You may threshold the output above some probability threshold if you wish to produce a binary ground truth.\n\n\n\\par PARAMETERS\nThe STAPLE algorithm requires a number of inputs. You may specify any number of input volumes using the SetInput(i, p_i) method, where i ranges from zero to N-1, N is the total number of input segmentations, and p_i is the SmartPointer to the i-th segmentation.\n\n\nThe SetConfidenceWeight parameter is a modifier for the prior probability that any pixel would be classified as inside the target object. This implementation of the STAPLE algorithm automatically calculates prior positive classification probability as the average fraction of the image volume filled by the target object in each input segmentation. The ConfidenceWeight parameter allows for scaling the of this default prior probability: if g_t is the prior probability that a pixel would be classified inside the target object, then g_t is set to g_t * ConfidenceWeight before iterating on the solution. In general ConfidenceWeight should be left to the default of 1.0.\n\nYou must provide a foreground value using SetForegroundValue that the STAPLE algorithm will use to identify positively classified pixels in the the input images. All other values in the image will be treated as background values. For example, if your input segmentations consist of 1's everywhere inside the segmented region, then use SetForegroundValue(1).\n\nThe STAPLE algorithm is an iterative E-M algorithm and will converge on a solution after some number of iterations that cannot be known a priori. After updating the filter, the total elapsed iterations taken to converge on the solution can be queried through GetElapsedIterations() . You may also specify a MaximumNumberOfIterations, after which the algorithm will stop iterating regardless of whether or not it has converged. This implementation of the STAPLE algorithm will find the solution to within seven digits of precision unless it is stopped early.\n\nOnce updated, the Sensitivity (true positive fraction, q) and Specificity (true negative fraction, q) for each expert input volume can be queried using GetSensitivity(i) and GetSpecificity(i), where i is the i-th input volume.\n\n\\par REQUIRED PARAMETERS\nThe only required parameters for this filter are the ForegroundValue and the input volumes. All other parameters may be safely left to their default values. Please see the paper cited above for more information on the STAPLE algorithm and its parameters. A proper understanding of the algorithm is important for interpreting the results that it produces.\n\n\n\\par EVENTS\nThis filter invokes IterationEvent() at each iteration of the E-M algorithm. Setting the AbortGenerateData() flag will cause the algorithm to halt after the current iteration and produce results just as if it had converged. The algorithm makes no attempt to report its progress since the number of iterations needed cannot be known in advance.", "itk_module" : "ITKImageCompare", "itk_group" : "ImageCompare" } diff --git a/Code/BasicFilters/json/SaltAndPepperNoiseImageFilter.json b/Code/BasicFilters/json/SaltAndPepperNoiseImageFilter.json index 8e0ba5e48..eb6a5bc1e 100644 --- a/Code/BasicFilters/json/SaltAndPepperNoiseImageFilter.json +++ b/Code/BasicFilters/json/SaltAndPepperNoiseImageFilter.json @@ -73,7 +73,7 @@ } ], "briefdescription" : "Alter an image with fixed value impulse noise, often called salt and pepper noise.", - "detaileddescription" : "Salt and pepper noise is a special kind of impulse noise where the value of the noise is either the maximum possible value in the image or its minimum. It can be modeled as:\n\n\\par \n\\f$ I = \\begin{cases} M, & \\quad \\text{if } U < p/2 \\\\ m, & \\quad \\text{if } U > 1 - p/2 \\\\ I_0, & \\quad \\text{if } p/2 \\geq U \\leq 1 - p/2 \\end{cases} \\f$ \n\n\\par \nwhere \\f$ p \\f$ is the probability of the noise event, \\f$ U \\f$ is a uniformly distributed random variable in the \\f$ [0,1] \\f$ range, \\f$ M \\f$ is the greatest possible pixel value, and \\f$ m \\f$ the smallest possible pixel value.\n\nPixel alteration occurs at a user defined probability. Salt and pepper pixels are equally distributed.\n\n\\author Gaetan Lehmann\n\nThis code was contributed in the Insight Journal paper \"Noise\nSimulation\". https://hdl.handle.net/10380/3158", + "detaileddescription" : "Salt (sensor saturation) and pepper (dead pixels) noise is a special kind of impulse noise where the value of the noise is either the maximum possible value in the image or its minimum. This is not necessarily the maximal/minimal possible intensity value based on the pixel type. For example, the native pixel type for CT is a signed 16 bit integer, but only 12 bits used, so we would like to set the salt and pepper values to match this smaller intensity range and not the range the pixel type represents. It can be modeled as:\n\n\\par \n\\f$ I = \\begin{cases} M, & \\quad \\text{if } U < p/2 \\\\ m, & \\quad \\text{if } U > 1 - p/2 \\\\ I_0, & \\quad \\text{if } p/2 \\geq U \\leq 1 - p/2 \\end{cases} \\f$ \n\n\n\\par \nwhere \\f$ p \\f$ is the probability of the noise event, \\f$ U \\f$ is a uniformly distributed random variable in the \\f$ [0,1] \\f$ range, \\f$ M \\f$ is the greatest possible pixel value, and \\f$ m \\f$ the smallest possible pixel value.\n\n\nPixel alteration occurs at a user defined probability. Salt and pepper pixels are equally distributed.\n\n\\author Gaetan Lehmann\n\n\nThis code was contributed in the Insight Journal paper \"Noise\n Simulation\". https://hdl.handle.net/10380/3158", "itk_module" : "ITKImageNoise", "itk_group" : "ImageNoise" } diff --git a/Code/BasicFilters/json/ScalarChanAndVeseDenseLevelSetImageFilter.json b/Code/BasicFilters/json/ScalarChanAndVeseDenseLevelSetImageFilter.json index f84f8307a..d24ce7859 100644 --- a/Code/BasicFilters/json/ScalarChanAndVeseDenseLevelSetImageFilter.json +++ b/Code/BasicFilters/json/ScalarChanAndVeseDenseLevelSetImageFilter.json @@ -156,7 +156,7 @@ } ], "briefdescription" : "Dense implementation of the Chan and Vese multiphase level set image filter.", - "detaileddescription" : "This code was adapted from the paper: \"An active contour model without edges\"\n T. Chan and L. Vese.\n In Scale-Space Theories in Computer Vision, pages 141-151, 1999.\n\n\\author Mosaliganti K., Smith B., Gelas A., Gouaillard A., Megason S.\n\nThis code was taken from the Insight Journal paper: \"Cell Tracking using Coupled Active Surfaces for Nuclei and Membranes\"\nhttp://www.insight-journal.org/browse/publication/642\nhttps://hdl.handle.net/10380/3055\n\nThat is based on the papers: \"Level Set Segmentation: Active Contours without edge\"\nhttp://www.insight-journal.org/browse/publication/322\nhttps://hdl.handle.net/1926/1532\n\nand\n\n\"Level set segmentation using coupled active surfaces\"\nhttp://www.insight-journal.org/browse/publication/323\nhttps://hdl.handle.net/1926/1533", + "detaileddescription" : "This code was adapted from the paper: \"An active contour model without edges\"\n T. Chan and L. Vese.\n In Scale-Space Theories in Computer Vision, pages 141-151, 1999.\n\n\n\\author Mosaliganti K., Smith B., Gelas A., Gouaillard A., Megason S.\n\n\nThis code was taken from the Insight Journal paper: \"Cell Tracking using Coupled Active Surfaces for Nuclei and Membranes\"\nhttp://www.insight-journal.org/browse/publication/642\nhttps://hdl.handle.net/10380/3055\n\n\nThat is based on the papers: \"Level Set Segmentation: Active Contours without edge\"\nhttp://www.insight-journal.org/browse/publication/322\nhttps://hdl.handle.net/1926/1532\n\nand\n\n\"Level set segmentation using coupled active surfaces\"\nhttp://www.insight-journal.org/browse/publication/323\nhttps://hdl.handle.net/1926/1533", "itk_module" : "ITKReview", "itk_group" : "Review" } diff --git a/Code/BasicFilters/json/ScalarImageKmeansImageFilter.json b/Code/BasicFilters/json/ScalarImageKmeansImageFilter.json index 0af368bbe..57122eedb 100644 --- a/Code/BasicFilters/json/ScalarImageKmeansImageFilter.json +++ b/Code/BasicFilters/json/ScalarImageKmeansImageFilter.json @@ -56,7 +56,7 @@ } ], "briefdescription" : "Classifies the intensity values of a scalar image using the K-Means algorithm.", - "detaileddescription" : "Given an input image with scalar values, it uses the K-Means statistical classifier in order to define labels for every pixel in the image. The filter is templated over the type of the input image. The output image is predefined as having the same dimension of the input image and pixel type unsigned char, under the assumption that the classifier will generate less than 256 classes.\n\nYou may want to look also at the RelabelImageFilter that may be used as a postprocessing stage, in particular if you are interested in ordering the labels by their relative size in number of pixels.\n\n\\see Image \n\n\\see ImageKmeansModelEstimator \n\n\\see KdTreeBasedKmeansEstimator, WeightedCentroidKdTreeGenerator, KdTree \n\n\\see RelabelImageFilter", + "detaileddescription" : "Given an input image with scalar values, it uses the K-Means statistical classifier in order to define labels for every pixel in the image. The filter is templated over the type of the input image. The output image is predefined as having the same dimension of the input image and pixel type unsigned char, under the assumption that the classifier will generate less than 256 classes.\n\nYou may want to look also at the RelabelImageFilter that may be used as a postprocessing stage, in particular if you are interested in ordering the labels by their relative size in number of pixels.\n\n\\see Image \n\n\n\\see ImageKmeansModelEstimator \n\n\n\\see KdTreeBasedKmeansEstimator, WeightedCentroidKdTreeGenerator, KdTree \n\n\n\\see RelabelImageFilter", "itk_module" : "ITKClassifiers", "itk_group" : "Classifiers" } diff --git a/Code/BasicFilters/json/ScalarToRGBColormapImageFilter.json b/Code/BasicFilters/json/ScalarToRGBColormapImageFilter.json index 7aeefadac..34f1e7eb5 100644 --- a/Code/BasicFilters/json/ScalarToRGBColormapImageFilter.json +++ b/Code/BasicFilters/json/ScalarToRGBColormapImageFilter.json @@ -75,7 +75,7 @@ } ], "briefdescription" : "Implements pixel-wise intensity->rgb mapping operation on one image.", - "detaileddescription" : "This class is parameterized over the type of the input image and the type of the output image.\n\nThe input image's scalar pixel values are mapped into a color map. The color map is specified by passing the SetColormap function one of the predefined maps. The following selects the \"Hot\" colormap: \\code\nRGBFilterType::Pointer colormapImageFilter = RGBFilterType::New();\n\ncolormapImageFilter->SetColormap( RGBFilterType::Hot );\n\n\\endcode\n\nYou can also specify a custom color map. This is done by creating a CustomColormapFunction, and then creating lists of values for the red, green, and blue channel. An example of setting the red channel of a colormap with only 2 colors is given below. The blue and green channels should be specified in the same manner.\n\n\\code\n// Create the custom colormap\n\ntypedef itk::Function::CustomColormapFunction ColormapType;\n\nColormapType::Pointer colormap = ColormapType::New();\n\n// Setup the red channel of the colormap\n\nColormapType::ChannelType redChannel;\n\nredChannel.push_back(0); redChannel.push_back(255);\n\ncolormap->SetRedChannel( channel );\n\n\\endcode\n\nThe range of values present in the input image is the range that is mapped to the entire range of colors.\n\nThis code was contributed in the Insight Journal paper: \"Meeting Andy Warhol Somewhere Over the Rainbow: RGB Colormapping and ITK\" by Tustison N., Zhang H., Lehmann G., Yushkevich P., Gee J. https://hdl.handle.net/1926/1452 http://www.insight-journal.org/browse/publication/285 \n\n\\see BinaryFunctionImageFilter TernaryFunctionImageFilter", + "detaileddescription" : "This class is parameterized over the type of the input image and the type of the output image.\n\nThe input image's scalar pixel values are mapped into a color map. The color map is specified by passing the SetColormap function one of the predefined maps. The following selects the \"RGBColormapFilterEnum::Hot\" colormap: \\code\nRGBFilterType::Pointer colormapImageFilter = RGBFilterType::New();\n\ncolormapImageFilter->SetColormap( RGBFilterType::Hot );\n\n\\endcode\n\n\nYou can also specify a custom color map. This is done by creating a CustomColormapFunction, and then creating lists of values for the red, green, and blue channel. An example of setting the red channel of a colormap with only 2 colors is given below. The blue and green channels should be specified in the same manner.\n\n\\code\n// Create the custom colormap\n\nusing ColormapType = itk::Function::CustomColormapFunction;\n\nColormapType::Pointer colormap = ColormapType::New();\n\n// Setup the red channel of the colormap\n\nColormapType::ChannelType redChannel;\n\nredChannel.push_back(0); redChannel.push_back(255);\n\ncolormap->SetRedChannel( channel );\n\n\\endcode\n\n\nThe range of values present in the input image is the range that is mapped to the entire range of colors.\n\nThis code was contributed in the Insight Journal paper: \"Meeting Andy Warhol Somewhere Over the Rainbow: RGB Colormapping and ITK\" by Tustison N., Zhang H., Lehmann G., Yushkevich P., Gee J. https://hdl.handle.net/1926/1452 http://www.insight-journal.org/browse/publication/285 \n\n\\see BinaryFunctionImageFilter TernaryFunctionImageFilter", "itk_module" : "ITKColormap", "itk_group" : "Colormap" } diff --git a/Code/BasicFilters/json/ShanbhagThresholdImageFilter.json b/Code/BasicFilters/json/ShanbhagThresholdImageFilter.json index 359c1e2fd..d1924527d 100644 --- a/Code/BasicFilters/json/ShanbhagThresholdImageFilter.json +++ b/Code/BasicFilters/json/ShanbhagThresholdImageFilter.json @@ -126,7 +126,7 @@ } ], "briefdescription" : "Threshold an image using the Shanbhag Threshold.", - "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the ShanbhagThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", + "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the ShanbhagThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/ShapeDetectionLevelSetImageFilter.json b/Code/BasicFilters/json/ShapeDetectionLevelSetImageFilter.json index 9f9411720..8929e2a8d 100644 --- a/Code/BasicFilters/json/ShapeDetectionLevelSetImageFilter.json +++ b/Code/BasicFilters/json/ShapeDetectionLevelSetImageFilter.json @@ -87,7 +87,7 @@ } ], "briefdescription" : "Segments structures in images based on a user supplied edge potential map.", - "detaileddescription" : "\\par IMPORTANT\nThe SegmentationLevelSetImageFilter class and the ShapeDetectionLevelSetFunction class contain additional information necessary to gain full understanding of how to use this filter.\n\n\\par OVERVIEW\nThis class is a level set method segmentation filter. An initial contour is propagated outwards (or inwards) until it ''sticks'' to the shape boundaries. This is done by using a level set speed function based on a user supplied edge potential map. This approach for segmentation follows that of Malladi et al (1995).\n\n\\par INPUTS\nThis filter requires two inputs. The first input is a initial level set. The initial level set is a real image which contains the initial contour/surface as the zero level set. For example, a signed distance function from the initial contour/surface is typically used. Note that for this algorithm the initial contour has to be wholly within (or wholly outside) the structure to be segmented.\n\n\\par \nThe second input is the feature image. For this filter, this is the edge potential map. General characteristics of an edge potential map is that it has values close to zero in regions near the edges and values close to one inside the shape itself. Typically, the edge potential map is compute from the image gradient, for example:\n\n \\f[ g(I) = 1 / ( 1 + | (\\nabla * G)(I)| ) \\f] \\f[ g(I) = \\exp^{-|(\\nabla * G)(I)|} \\f] \n\nwhere \\f$ I \\f$ is image intensity and \\f$ (\\nabla * G) \\f$ is the derivative of Gaussian operator.\n\n\\par \nSee SegmentationLevelSetImageFilter and SparseFieldLevelSetImageFilter for more information on Inputs.\n\n\\par PARAMETERS\nThe PropagationScaling parameter can be used to switch from propagation outwards (POSITIVE scaling parameter) versus propagating inwards (NEGATIVE scaling parameter).\n\nThe smoothness of the resulting contour/surface can be adjusted using a combination of PropagationScaling and CurvatureScaling parameters. The larger the CurvatureScaling parameter, the smoother the resulting contour. The CurvatureScaling parameter should be non-negative for proper operation of this algorithm. To follow the implementation in Malladi et al paper, set the PropagtionScaling to \\f$\\pm 1.0\\f$ and CurvatureScaling to \\f$ \\epsilon \\f$ .\n\nNote that there is no advection term for this filter. Setting the advection scaling will have no effect.\n\n\\par OUTPUTS\nThe filter outputs a single, scalar, real-valued image. Negative values in the output image represent the inside of the segmentated region and positive values in the image represent the outside of the segmented region. The zero crossings of the image correspond to the position of the propagating front.\n\n\\par \nSee SparseFieldLevelSetImageFilter and SegmentationLevelSetImageFilter for more information.\n\n\\par REFERENCES\n\n\n\\par \n\"Shape Modeling with Front Propagation: A Level Set Approach\", R. Malladi, J. A. Sethian and B. C. Vermuri. IEEE Trans. on Pattern Analysis and Machine Intelligence, Vol 17, No. 2, pp 158-174, February 1995\n\n\\see SegmentationLevelSetImageFilter \n\n\\see ShapeDetectionLevelSetFunction \n\n\\see SparseFieldLevelSetImageFilter", + "detaileddescription" : "\\par IMPORTANT\nThe SegmentationLevelSetImageFilter class and the ShapeDetectionLevelSetFunction class contain additional information necessary to gain full understanding of how to use this filter.\n\n\n\\par OVERVIEW\nThis class is a level set method segmentation filter. An initial contour is propagated outwards (or inwards) until it ''sticks'' to the shape boundaries. This is done by using a level set speed function based on a user supplied edge potential map. This approach for segmentation follows that of Malladi et al (1995).\n\n\n\\par INPUTS\nThis filter requires two inputs. The first input is a initial level set. The initial level set is a real image which contains the initial contour/surface as the zero level set. For example, a signed distance function from the initial contour/surface is typically used. Note that for this algorithm the initial contour has to be wholly within (or wholly outside) the structure to be segmented.\n\n\n\\par \nThe second input is the feature image. For this filter, this is the edge potential map. General characteristics of an edge potential map is that it has values close to zero in regions near the edges and values close to one inside the shape itself. Typically, the edge potential map is compute from the image gradient, for example:\n\n\n \\f[ g(I) = 1 / ( 1 + | (\\nabla * G)(I)| ) \\f] \\f[ g(I) = \\exp^{-|(\\nabla * G)(I)|} \\f] \n\nwhere \\f$ I \\f$ is image intensity and \\f$ (\\nabla * G) \\f$ is the derivative of Gaussian operator.\n\n\\par \nSee SegmentationLevelSetImageFilter and SparseFieldLevelSetImageFilter for more information on Inputs.\n\n\n\\par PARAMETERS\nThe PropagationScaling parameter can be used to switch from propagation outwards (POSITIVE scaling parameter) versus propagating inwards (NEGATIVE scaling parameter).\n\n\nThe smoothness of the resulting contour/surface can be adjusted using a combination of PropagationScaling and CurvatureScaling parameters. The larger the CurvatureScaling parameter, the smoother the resulting contour. The CurvatureScaling parameter should be non-negative for proper operation of this algorithm. To follow the implementation in Malladi et al paper, set the PropagtionScaling to \\f$\\pm 1.0\\f$ and CurvatureScaling to \\f$ \\epsilon \\f$ .\n\nNote that there is no advection term for this filter. Setting the advection scaling will have no effect.\n\n\\par OUTPUTS\nThe filter outputs a single, scalar, real-valued image. Negative values in the output image represent the inside of the segmented region and positive values in the image represent the outside of the segmented region. The zero crossings of the image correspond to the position of the propagating front.\n\n\n\\par \nSee SparseFieldLevelSetImageFilter and SegmentationLevelSetImageFilter for more information.\n\n\n\\par REFERENCES\n\n\n\n\\par \n\"Shape Modeling with Front Propagation: A Level Set Approach\", R. Malladi, J. A. Sethian and B. C. Vermuri. IEEE Trans. on Pattern Analysis and Machine Intelligence, Vol 17, No. 2, pp 158-174, February 1995\n\n\n\\see SegmentationLevelSetImageFilter \n\n\n\\see ShapeDetectionLevelSetFunction \n\n\n\\see SparseFieldLevelSetImageFilter", "itk_module" : "ITKLevelSets", "itk_group" : "LevelSets" } diff --git a/Code/BasicFilters/json/ShiftScaleImageFilter.json b/Code/BasicFilters/json/ShiftScaleImageFilter.json index 495c5c550..3c28c550e 100644 --- a/Code/BasicFilters/json/ShiftScaleImageFilter.json +++ b/Code/BasicFilters/json/ShiftScaleImageFilter.json @@ -94,7 +94,7 @@ } ], "briefdescription" : "Shift and scale the pixels in an image.", - "detaileddescription" : "ShiftScaleImageFilter shifts the input pixel by Shift (default 0.0) and then scales the pixel by Scale (default 1.0). All computattions are performed in the precision of the input pixel's RealType. Before assigning the computed value to the output pixel, the value is clamped at the NonpositiveMin and max of the pixel type.", + "detaileddescription" : "ShiftScaleImageFilter shifts the input pixel by Shift (default 0.0) and then scales the pixel by Scale (default 1.0). All computations are performed in the precision of the input pixel's RealType. Before assigning the computed value to the output pixel, the value is clamped at the NonpositiveMin and max of the pixel type.", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/ShotNoiseImageFilter.json b/Code/BasicFilters/json/ShotNoiseImageFilter.json index 8bc756f5c..9cfc14a3e 100644 --- a/Code/BasicFilters/json/ShotNoiseImageFilter.json +++ b/Code/BasicFilters/json/ShotNoiseImageFilter.json @@ -73,7 +73,7 @@ } ], "briefdescription" : "Alter an image with shot noise.", - "detaileddescription" : "The shot noise follows a Poisson distribution:\n\n\\par \n\\f$ I = N(I_0) \\f$ \n\n\\par \nwhere \\f$ N(I_0) \\f$ is a Poisson-distributed random variable of mean \\f$ I_0 \\f$ . The noise is thus dependent on the pixel intensities in the image.\n\nThe intensities in the image can be scaled by a user provided value to map pixel values to the actual number of particles. The scaling can be seen as the inverse of the gain used during the acquisition. The noisy signal is then scaled back to its input intensity range:\n\n\\par \n\\f$ I = \\frac{N(I_0 \\times s)}{s} \\f$ \n\n\\par \nwhere \\f$ s \\f$ is the scale factor.\n\nThe Poisson-distributed variable \\f$ \\lambda \\f$ is computed by using the algorithm:\n\n\\par \n\\f$ \\begin{array}{l} k \\leftarrow 0 \\\\ p \\leftarrow 1 \\\\ \\textbf{repeat} \\\\ \\left\\{ \\begin{array}{l} k \\leftarrow k+1 \\\\ p \\leftarrow p \\ast U() \\end{array} \\right. \\\\ \\textbf{until } p > e^{\\lambda} \\\\ \\textbf{return} (k) \\end{array} \\f$ \n\n\\par \nwhere \\f$ U() \\f$ provides a uniformly distributed random variable in the interval \\f$ [0,1] \\f$ .\n\nThis algorithm is very inefficient for large values of \\f$ \\lambda \\f$ , though. Fortunately, the Poisson distribution can be accurately approximated by a Gaussian distribution of mean and variance \\f$ \\lambda \\f$ when \\f$ \\lambda \\f$ is large enough. In this implementation, this value is considered to be 50. This leads to the faster algorithm:\n\n\\par \n\\f$ \\lambda + \\sqrt{\\lambda} \\times N()\\f$ \n\n\\par \nwhere \\f$ N() \\f$ is a normally distributed random variable of mean 0 and variance 1.\n\n\\author Gaetan Lehmann\n\nThis code was contributed in the Insight Journal paper \"Noise\nSimulation\". https://hdl.handle.net/10380/3158", + "detaileddescription" : "The shot noise follows a Poisson distribution:\n\n\\par \n\\f$ I = N(I_0) \\f$ \n\n\n\\par \nwhere \\f$ N(I_0) \\f$ is a Poisson-distributed random variable of mean \\f$ I_0 \\f$ . The noise is thus dependent on the pixel intensities in the image.\n\n\nThe intensities in the image can be scaled by a user provided value to map pixel values to the actual number of particles. The scaling can be seen as the inverse of the gain used during the acquisition. The noisy signal is then scaled back to its input intensity range:\n\n\\par \n\\f$ I = \\frac{N(I_0 \\times s)}{s} \\f$ \n\n\n\\par \nwhere \\f$ s \\f$ is the scale factor.\n\n\nThe Poisson-distributed variable \\f$ \\lambda \\f$ is computed by using the algorithm:\n\n\\par \n\\f$ \\begin{array}{l} k \\leftarrow 0 \\\\ p \\leftarrow 1 \\\\ \\textbf{repeat} \\\\ \\left\\{ \\begin{array}{l} k \\leftarrow k+1 \\\\ p \\leftarrow p \\ast U() \\end{array} \\right. \\\\ \\textbf{until } p > e^{\\lambda} \\\\ \\textbf{return} (k) \\end{array} \\f$ \n\n\n\\par \nwhere \\f$ U() \\f$ provides a uniformly distributed random variable in the interval \\f$ [0,1] \\f$ .\n\n\nThis algorithm is very inefficient for large values of \\f$ \\lambda \\f$ , though. Fortunately, the Poisson distribution can be accurately approximated by a Gaussian distribution of mean and variance \\f$ \\lambda \\f$ when \\f$ \\lambda \\f$ is large enough. In this implementation, this value is considered to be 50. This leads to the faster algorithm:\n\n\\par \n\\f$ \\lambda + \\sqrt{\\lambda} \\times N()\\f$ \n\n\n\\par \nwhere \\f$ N() \\f$ is a normally distributed random variable of mean 0 and variance 1.\n\n\n\\author Gaetan Lehmann\n\n\nThis code was contributed in the Insight Journal paper \"Noise\n Simulation\". https://hdl.handle.net/10380/3158", "itk_module" : "ITKImageNoise", "itk_group" : "ImageNoise" } diff --git a/Code/BasicFilters/json/ShrinkImageFilter.json b/Code/BasicFilters/json/ShrinkImageFilter.json index cd3fc1c87..dde72145d 100644 --- a/Code/BasicFilters/json/ShrinkImageFilter.json +++ b/Code/BasicFilters/json/ShrinkImageFilter.json @@ -67,7 +67,7 @@ } ], "briefdescription" : "Reduce the size of an image by an integer factor in each dimension.", - "detaileddescription" : "ShrinkImageFilter reduces the size of an image by an integer factor in each dimension. The algorithm implemented is a simple subsample. The output image size in each dimension is given by:\n\noutputSize[j] = max( std::floor(inputSize[j]/shrinkFactor[j]), 1 );\n\nNOTE: The physical centers of the input and output will be the same. Because of this, the Origin of the output may not be the same as the Origin of the input. Since this filter produces an image which is a different resolution, origin and with different pixel spacing than its input image, it needs to override several of the methods defined in ProcessObject in order to properly manage the pipeline execution model. In particular, this filter overrides ProcessObject::GenerateInputRequestedRegion() and ProcessObject::GenerateOutputInformation() .\n\nThis filter is implemented as a multithreaded filter. It provides a ThreadedGenerateData() method for its implementation.", + "detaileddescription" : "ShrinkImageFilter reduces the size of an image by an integer factor in each dimension. The algorithm implemented is a simple subsample. The output image size in each dimension is given by:\n\noutputSize[j] = max( std::floor(inputSize[j]/shrinkFactor[j]), 1 );\n\nNOTE: The physical centers of the input and output will be the same. Because of this, the Origin of the output may not be the same as the Origin of the input. Since this filter produces an image which is a different resolution, origin and with different pixel spacing than its input image, it needs to override several of the methods defined in ProcessObject in order to properly manage the pipeline execution model. In particular, this filter overrides ProcessObject::GenerateInputRequestedRegion() and ProcessObject::GenerateOutputInformation() .\n\nThis filter is implemented as a multithreaded filter. It provides a DynamicThreadedGenerateData() method for its implementation.", "itk_module" : "ITKImageGrid", "itk_group" : "ImageGrid" } diff --git a/Code/BasicFilters/json/SignedDanielssonDistanceMapImageFilter.json b/Code/BasicFilters/json/SignedDanielssonDistanceMapImageFilter.json index 928ca9c2a..ffa865c20 100644 --- a/Code/BasicFilters/json/SignedDanielssonDistanceMapImageFilter.json +++ b/Code/BasicFilters/json/SignedDanielssonDistanceMapImageFilter.json @@ -58,7 +58,7 @@ } ], "briefdescription" : "", - "detaileddescription" : "This class is parametrized over the type of the input image and the type of the output image.\n\nThis filter computes the distance map of the input image as an approximation with pixel accuracy to the Euclidean distance.\n\nFor purposes of evaluating the signed distance map, the input is assumed to be binary composed of pixels with value 0 and non-zero.\n\nThe inside is considered as having negative distances. Outside is treated as having positive distances. To change the convention, use the InsideIsPositive(bool) function.\n\nAs a convention, the distance is evaluated from the boundary of the ON pixels.\n\nThe filter returns\n\n\\li A signed distance map with the approximation to the euclidean distance.\n\n\\li A voronoi partition. (See itkDanielssonDistanceMapImageFilter)\n\n\\li A vector map containing the component of the vector relating the current pixel with the closest point of the closest object to this pixel. Given that the components of the distance are computed in \"pixels\", the vector is represented by an itk::Offset . That is, physical coordinates are not used. (See itkDanielssonDistanceMapImageFilter)\n\n\n\nThis filter internally uses the DanielssonDistanceMap filter. This filter is N-dimensional.\n\n\\see itkDanielssonDistanceMapImageFilter", + "detaileddescription" : "This class is parameterized over the type of the input image and the type of the output image.\n\nThis filter computes the distance map of the input image as an approximation with pixel accuracy to the Euclidean distance.\n\nFor purposes of evaluating the signed distance map, the input is assumed to be binary composed of pixels with value 0 and non-zero.\n\nThe inside is considered as having negative distances. Outside is treated as having positive distances. To change the convention, use the InsideIsPositive(bool) function.\n\nAs a convention, the distance is evaluated from the boundary of the ON pixels.\n\nThe filter returns\n\n\\li A signed distance map with the approximation to the euclidean distance.\n\n\\li A voronoi partition. (See itkDanielssonDistanceMapImageFilter)\n\n\\li A vector map containing the component of the vector relating the current pixel with the closest point of the closest object to this pixel. Given that the components of the distance are computed in \"pixels\", the vector is represented by an itk::Offset . That is, physical coordinates are not used. (See itkDanielssonDistanceMapImageFilter)\n\n\n\n\nThis filter internally uses the DanielssonDistanceMap filter. This filter is N-dimensional.\n\n\\see itkDanielssonDistanceMapImageFilter", "itk_module" : "ITKDistanceMap", "itk_group" : "DistanceMap" } diff --git a/Code/BasicFilters/json/SignedMaurerDistanceMapImageFilter.json b/Code/BasicFilters/json/SignedMaurerDistanceMapImageFilter.json index 7e54e4de1..ef47b35e5 100644 --- a/Code/BasicFilters/json/SignedMaurerDistanceMapImageFilter.json +++ b/Code/BasicFilters/json/SignedMaurerDistanceMapImageFilter.json @@ -57,7 +57,7 @@ } ], "briefdescription" : "This filter calculates the Euclidean distance transform of a binary image in linear time for arbitrary dimensions.", - "detaileddescription" : "\\par Inputs and Outputs\nThis is an image-to-image filter. The dimensionality is arbitrary. The only dimensionality constraint is that the input and output images be of the same dimensions and size. To maintain integer arithmetic within the filter, the default output is the signed squared distance. This implies that the input image should be of type \"unsigned int\" or \"int\" whereas the output image is of type \"int\". Obviously, if the user wishes to utilize the image spacing or to have a filter with the Euclidean distance (as opposed to the squared distance), output image types of float or double should be used.\n\nThe inside is considered as having negative distances. Outside is treated as having positive distances. To change the convention, use the InsideIsPositive(bool) function.\n\n\\par Parameters\nSet/GetBackgroundValue specifies the background of the value of the input binary image. Normally this is zero and, as such, zero is the default value. Other than that, the usage is completely analogous to the itk::DanielssonDistanceImageFilter class except it does not return the Voronoi map.\n\nReference: C. R. Maurer, Jr., R. Qi, and V. Raghavan, \"A Linear Time Algorithm for Computing Exact Euclidean Distance Transforms of Binary Images in Arbitrary Dimensions\", IEEE - Transactions on Pattern Analysis and Machine Intelligence, 25(2): 265-270, 2003.", + "detaileddescription" : "\\par Inputs and Outputs\nThis is an image-to-image filter. The dimensionality is arbitrary. The only dimensionality constraint is that the input and output images be of the same dimensions and size. To maintain integer arithmetic within the filter, the default output is the signed squared distance. This implies that the input image should be of type \"unsigned int\" or \"int\" whereas the output image is of type \"int\". Obviously, if the user wishes to utilize the image spacing or to have a filter with the Euclidean distance (as opposed to the squared distance), output image types of float or double should be used.\n\n\nThe inside is considered as having negative distances. Outside is treated as having positive distances. To change the convention, use the InsideIsPositive(bool) function.\n\n\\par Parameters\nSet/GetBackgroundValue specifies the background of the value of the input binary image. Normally this is zero and, as such, zero is the default value. Other than that, the usage is completely analogous to the itk::DanielssonDistanceImageFilter class except it does not return the Voronoi map.\n\n\nReference: C. R. Maurer, Jr., R. Qi, and V. Raghavan, \"A Linear Time Algorithm for Computing Exact Euclidean Distance Transforms of Binary Images in Arbitrary Dimensions\", IEEE - Transactions on Pattern Analysis and Machine Intelligence, 25(2): 265-270, 2003.", "itk_module" : "ITKDistanceMap", "itk_group" : "DistanceMap" } diff --git a/Code/BasicFilters/json/SimilarityIndexImageFilter.json b/Code/BasicFilters/json/SimilarityIndexImageFilter.json index 28efabfad..efa255ffd 100644 --- a/Code/BasicFilters/json/SimilarityIndexImageFilter.json +++ b/Code/BasicFilters/json/SimilarityIndexImageFilter.json @@ -53,7 +53,7 @@ } ], "briefdescription" : "Measures the similarity between the set of non-zero pixels of two images.", - "detaileddescription" : "SimilarityIndexImageFilter measures the similarity between the set non-zero pixels of two images using the following formula: \\f[ S = \\frac{2 | A \\cap B |}{|A| + |B|} \\f] where \\f$A\\f$ and \\f$B\\f$ are respectively the set of non-zero pixels in the first and second input images. Operator \\f$|\\cdot|\\f$ represents the size of a set and \\f$\\cap\\f$ represents the intersection of two sets.\n\nThe measure is derived from a reliability measure known as the kappa statistic. \\f$S\\f$ is sensitive to both differences in size and in location and have been in the literature for comparing two segmentation masks. For more information see: \"Morphometric Analysis of White Matter Lesions in MR Images: Method and\nValidation\", A. P. Zijdenbos, B. M. Dawant, R. A. Margolin and A. C. Palmer, IEEE Trans. on Medical Imaging, 13(4) pp 716-724,1994\n\nThis filter requires the largest possible region of the first image and the same corresponding region in the second image. It behaves as filter with two input and one output. Thus it can be inserted in a pipeline with other filters. The filter passes the first input through unmodified.\n\nThis filter is templated over the two input image type. It assume both image have the same number of dimensions.", + "detaileddescription" : "SimilarityIndexImageFilter measures the similarity between the set non-zero pixels of two images using the following formula: \\f[ S = \\frac{2 | A \\cap B |}{|A| + |B|} \\f] where \\f$A\\f$ and \\f$B\\f$ are respectively the set of non-zero pixels in the first and second input images. Operator \\f$|\\cdot|\\f$ represents the size of a set and \\f$\\cap\\f$ represents the intersection of two sets.\n\nThe measure is derived from a reliability measure known as the kappa statistic. \\f$S\\f$ is sensitive to both differences in size and in location and have been in the literature for comparing two segmentation masks. For more information see: \"Morphometric Analysis of White Matter Lesions in MR Images: Method and\n Validation\", A. P. Zijdenbos, B. M. Dawant, R. A. Margolin and A. C. Palmer, IEEE Trans. on Medical Imaging, 13(4) pp 716-724,1994\n\nThis filter requires the largest possible region of the first image and the same corresponding region in the second image. It behaves as filter with two input and one output. Thus it can be inserted in a pipeline with other filters. The filter passes the first input through unmodified.\n\nThis filter is templated over the two input image type. It assume both image have the same number of dimensions.", "itk_module" : "ITKImageCompare", "itk_group" : "ImageCompare" } diff --git a/Code/BasicFilters/json/SimpleContourExtractorImageFilter.json b/Code/BasicFilters/json/SimpleContourExtractorImageFilter.json index 926c00067..2cb3fb9f6 100644 --- a/Code/BasicFilters/json/SimpleContourExtractorImageFilter.json +++ b/Code/BasicFilters/json/SimpleContourExtractorImageFilter.json @@ -88,7 +88,7 @@ } ], "briefdescription" : "Computes an image of contours which will be the contour of the first image.", - "detaileddescription" : "A pixel of the source image is considered to belong to the contour if its pixel value is equal to the input foreground value and it has in its neighborhood at least one pixel which its pixel value is equal to the input background value. The output image will have pixels which will be set to the output foreground value if they belong to the contour, otherwise they will be set to the output background value.\n\nThe neighborhood \"radius\" is set thanks to the radius params.\n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator", + "detaileddescription" : "A pixel of the source image is considered to belong to the contour if its pixel value is equal to the input foreground value and it has in its neighborhood at least one pixel which its pixel value is equal to the input background value. The output image will have pixels which will be set to the output foreground value if they belong to the contour, otherwise they will be set to the output background value.\n\nThe neighborhood \"radius\" is set thanks to the radius params. \\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator", "itk_module" : "ITKImageFeature", "itk_group" : "ImageFeature" } diff --git a/Code/BasicFilters/json/SobelEdgeDetectionImageFilter.json b/Code/BasicFilters/json/SobelEdgeDetectionImageFilter.json index 26c03ac35..c480336ea 100644 --- a/Code/BasicFilters/json/SobelEdgeDetectionImageFilter.json +++ b/Code/BasicFilters/json/SobelEdgeDetectionImageFilter.json @@ -18,7 +18,7 @@ } ], "briefdescription" : "A 2D or 3D edge detection using the Sobel operator.", - "detaileddescription" : "This filter uses the Sobel operator to calculate the image gradient and then finds the magnitude of this gradient vector. The Sobel gradient magnitude (square-root sum of squares) is an indication of edge strength.\n\n\\see ImageToImageFilter \n\n\\see SobelOperator \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator", + "detaileddescription" : "This filter uses the Sobel operator to calculate the image gradient and then finds the magnitude of this gradient vector. The Sobel gradient magnitude (square-root sum of squares) is an indication of edge strength.\n\n\\see ImageToImageFilter \n\n\n\\see SobelOperator \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator", "itk_module" : "ITKImageFeature", "itk_group" : "ImageFeature" } diff --git a/Code/BasicFilters/json/SpeckleNoiseImageFilter.json b/Code/BasicFilters/json/SpeckleNoiseImageFilter.json index b7b14983d..58e642da9 100644 --- a/Code/BasicFilters/json/SpeckleNoiseImageFilter.json +++ b/Code/BasicFilters/json/SpeckleNoiseImageFilter.json @@ -73,7 +73,7 @@ } ], "briefdescription" : "Alter an image with speckle (multiplicative) noise.", - "detaileddescription" : "The speckle noise follows a gamma distribution of mean 1 and standard deviation provided by the user. The noise is proportional to the pixel intensity.\n\nIt can be modeled as:\n\n\\par \n\\f$ I = I_0 \\ast G \\f$ \n\n\\par \nwhere \\f$ G \\f$ is a is a gamma distributed random variable of mean 1 and variance proportional to the noise level:\n\n\\par \n\\f$ G \\sim \\Gamma(\\frac{1}{\\sigma^2}, \\sigma^2) \\f$ \n\n\\author Gaetan Lehmann\n\nThis code was contributed in the Insight Journal paper \"Noise\nSimulation\". https://hdl.handle.net/10380/3158", + "detaileddescription" : "The speckle noise follows a gamma distribution of mean 1 and standard deviation provided by the user. The noise is proportional to the pixel intensity.\n\nIt can be modeled as:\n\n\\par \n\\f$ I = I_0 \\ast G \\f$ \n\n\n\\par \nwhere \\f$ G \\f$ is a is a gamma distributed random variable of mean 1 and variance proportional to the noise level:\n\n\n\\par \n\\f$ G \\sim \\Gamma(\\frac{1}{\\sigma^2}, \\sigma^2) \\f$ \n\n\n\\author Gaetan Lehmann\n\n\nThis code was contributed in the Insight Journal paper \"Noise\n Simulation\". https://hdl.handle.net/10380/3158", "itk_module" : "ITKImageNoise", "itk_group" : "ImageNoise" } diff --git a/Code/BasicFilters/json/SquaredDifferenceImageFilter.json b/Code/BasicFilters/json/SquaredDifferenceImageFilter.json index be7003214..0d43875cc 100644 --- a/Code/BasicFilters/json/SquaredDifferenceImageFilter.json +++ b/Code/BasicFilters/json/SquaredDifferenceImageFilter.json @@ -44,7 +44,7 @@ } ], "briefdescription" : "Implements pixel-wise the computation of squared difference.", - "detaileddescription" : "This filter is parametrized over the types of the two input images and the type of the output image.\n\nNumeric conversions (castings) are done by the C++ defaults.\n\nThe filter will walk over all the pixels in the two input images, and for each one of them it will do the following:\n\n\n\\li cast the input 1 pixel value to double \n\n\\li cast the input 2 pixel value to double \n\n\\li compute the difference of the two pixel values\n\n\\li compute the square of the difference\n\n\\li cast the double value resulting from sqr() to the pixel type of the output image\n\n\\li store the casted value into the output image.\n\n\n\nThe filter expect all images to have the same dimension (e.g. all 2D, or all 3D, or all ND)", + "detaileddescription" : "This filter is parameterized over the types of the two input images and the type of the output image.\n\nNumeric conversions (castings) are done by the C++ defaults.\n\nThe filter will walk over all the pixels in the two input images, and for each one of them it will do the following:\n\n\n\n\\li cast the input 1 pixel value to double \n\n\\li cast the input 2 pixel value to double \n\n\\li compute the difference of the two pixel values\n\n\\li compute the square of the difference\n\n\\li cast the double value resulting from sqr() to the pixel type of the output image\n\n\\li store the casted value into the output image.\n\n\n\n\nThe filter expect all images to have the same dimension (e.g. all 2D, or all 3D, or all ND)", "itk_module" : "ITKImageCompare", "itk_group" : "ImageCompare" } diff --git a/Code/BasicFilters/json/StandardDeviationProjectionImageFilter.json b/Code/BasicFilters/json/StandardDeviationProjectionImageFilter.json index 5bd51946d..bf911e008 100644 --- a/Code/BasicFilters/json/StandardDeviationProjectionImageFilter.json +++ b/Code/BasicFilters/json/StandardDeviationProjectionImageFilter.json @@ -31,7 +31,7 @@ } ], "briefdescription" : "Mean projection.", - "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ProjectionImageFilter \n\n\\see MedianProjectionImageFilter \n\n\\see MeanProjectionImageFilter \n\n\\see SumProjectionImageFilter \n\n\\see MeanProjectionImageFilter \n\n\\see MaximumProjectionImageFilter \n\n\\see MinimumProjectionImageFilter \n\n\\see BinaryProjectionImageFilter", + "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ProjectionImageFilter \n\n\n\\see MedianProjectionImageFilter \n\n\n\\see MeanProjectionImageFilter \n\n\n\\see SumProjectionImageFilter \n\n\n\\see MeanProjectionImageFilter \n\n\n\\see MaximumProjectionImageFilter \n\n\n\\see MinimumProjectionImageFilter \n\n\n\\see BinaryProjectionImageFilter", "itk_module" : "ITKImageStatistics", "itk_group" : "ImageStatistics" } diff --git a/Code/BasicFilters/json/StatisticsImageFilter.json b/Code/BasicFilters/json/StatisticsImageFilter.json index 6ce25925f..b7c20fbbe 100644 --- a/Code/BasicFilters/json/StatisticsImageFilter.json +++ b/Code/BasicFilters/json/StatisticsImageFilter.json @@ -98,8 +98,8 @@ ] } ], - "briefdescription" : "Compute min. max, variance and mean of an Image .", - "detaileddescription" : "StatisticsImageFilter computes the minimum, maximum, sum, mean, variance sigma of an image. The filter needs all of its input image. It behaves as a filter with an input and output. Thus it can be inserted in a pipline with other filters and the statistics will only be recomputed if a downstream filter changes.\n\nThe filter passes its input through unmodified. The filter is threaded. It computes statistics in each thread then combines them in its AfterThreadedGenerate method.", + "briefdescription" : "Compute min, max, variance and mean of an Image .", + "detaileddescription" : "StatisticsImageFilter computes the minimum, maximum, sum, sum of squares, mean, variance sigma of an image. The filter needs all of its input image. It behaves as a filter with an input and output. Thus it can be inserted in a pipline with other filters and the statistics will only be recomputed if a downstream filter changes.\n\nThis filter is automatically multi-threaded and can stream its input when NumberOfStreamDivisions is set to more than one. Statistics are independently computed for each streamed and threaded region then merged.\n\nInternally a compensated summation algorithm is used for the accumulation of intensities to improve accuracy for large images.", "itk_module" : "ITKImageStatistics", "itk_group" : "ImageStatistics" } diff --git a/Code/BasicFilters/json/SubtractImageFilter.json b/Code/BasicFilters/json/SubtractImageFilter.json index 83951518d..340b2b5e5 100644 --- a/Code/BasicFilters/json/SubtractImageFilter.json +++ b/Code/BasicFilters/json/SubtractImageFilter.json @@ -40,7 +40,7 @@ } ], "briefdescription" : "Pixel-wise subtraction of two images.", - "detaileddescription" : "Subtract each pixel from image2 from its corresponding pixel in image1:\n\n\\code\nOutput = Input1 - Input2.\n\n\\endcode\n\nThis is done using\n\n\\code\nSetInput1( image1 );\n\nSetInput2( image2 );\n\n\\endcode\n\nThis class is templated over the types of the two input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nAdditionally, a constant can be subtracted from every pixel in an image using:\n\n\\code\nSetInput1( image1 );\n\nSetConstant2( constant );\n\n\\endcode\n\n\\note The result of AddImageFilter with a negative constant is not necessarily the same as SubtractImageFilter . This would be the case when the PixelType defines an operator-() that is not the inverse of operator+()", + "detaileddescription" : "Subtract each pixel from image2 from its corresponding pixel in image1:\n\n\\code\nOutput = Input1 - Input2.\n\n\\endcode\n\n\nThis is done using\n\n\\code\nSetInput1( image1 );\n\nSetInput2( image2 );\n\n\\endcode\n\n\nThis class is templated over the types of the two input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nAdditionally, a constant can be subtracted from every pixel in an image using:\n\n\\code\nSetInput1( image1 );\n\nSetConstant2( constant );\n\n\\endcode\n\n\n\\note The result of AddImageFilter with a negative constant is not necessarily the same as SubtractImageFilter . This would be the case when the PixelType defines an operator-() that is not the inverse of operator+()", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/SumProjectionImageFilter.json b/Code/BasicFilters/json/SumProjectionImageFilter.json index 12e860fbb..8a61caf0a 100644 --- a/Code/BasicFilters/json/SumProjectionImageFilter.json +++ b/Code/BasicFilters/json/SumProjectionImageFilter.json @@ -31,7 +31,7 @@ } ], "briefdescription" : "Sum projection.", - "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see ProjectionImageFilter \n\n\\see MedianProjectionImageFilter \n\n\\see MeanProjectionImageFilter \n\n\\see MeanProjectionImageFilter \n\n\\see MaximumProjectionImageFilter \n\n\\see MinimumProjectionImageFilter \n\n\\see BinaryProjectionImageFilter \n\n\\see StandardDeviationProjectionImageFilter", + "detaileddescription" : "This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://hdl.handle.net/1926/164 \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see ProjectionImageFilter \n\n\n\\see MedianProjectionImageFilter \n\n\n\\see MeanProjectionImageFilter \n\n\n\\see MeanProjectionImageFilter \n\n\n\\see MaximumProjectionImageFilter \n\n\n\\see MinimumProjectionImageFilter \n\n\n\\see BinaryProjectionImageFilter \n\n\n\\see StandardDeviationProjectionImageFilter", "itk_module" : "ITKImageStatistics", "itk_group" : "ImageStatistics" } diff --git a/Code/BasicFilters/json/SymmetricForcesDemonsRegistrationFilter.json b/Code/BasicFilters/json/SymmetricForcesDemonsRegistrationFilter.json index 098a40624..dfe6fec23 100644 --- a/Code/BasicFilters/json/SymmetricForcesDemonsRegistrationFilter.json +++ b/Code/BasicFilters/json/SymmetricForcesDemonsRegistrationFilter.json @@ -183,7 +183,7 @@ } ], "briefdescription" : "Deformably register two images using the demons algorithm.", - "detaileddescription" : "This class was contributed by Corinne Mattmann, ETH Zurich, Switzerland. based on a variation of the DemonsRegistrationFilter . The basic modification is to use equation (5) from Thirion's paper along with the modification for avoiding large deformations when gradients have small values.\n\nSymmetricForcesDemonsRegistrationFilter implements the demons deformable algorithm that register two images by computing the deformation field which will map a moving image onto a fixed image.\n\nA deformation field is represented as a image whose pixel type is some vector type with at least N elements, where N is the dimension of the fixed image. The vector type must support element access via operator []. It is assumed that the vector elements behave like floating point scalars.\n\nThis class is templated over the fixed image type, moving image type and the deformation field type.\n\nThe input fixed and moving images are set via methods SetFixedImage and SetMovingImage respectively. An initial deformation field maybe set via SetInitialDisplacementField or SetInput. If no initial field is set, a zero field is used as the initial condition.\n\nThe algorithm has one parameters: the number of iteration to be performed.\n\nThe output deformation field can be obtained via methods GetOutput or GetDisplacementField.\n\nThis class make use of the finite difference solver hierarchy. Update for each iteration is computed in DemonsRegistrationFunction .\n\n\\warning This filter assumes that the fixed image type, moving image type and deformation field type all have the same number of dimensions.\n\n\\see SymmetricForcesDemonsRegistrationFunction \n\n\\see DemonsRegistrationFilter \n\n\\see DemonsRegistrationFunction", + "detaileddescription" : "This class was contributed by Corinne Mattmann, ETH Zurich, Switzerland. based on a variation of the DemonsRegistrationFilter . The basic modification is to use equation (5) from Thirion's paper along with the modification for avoiding large deformations when gradients have small values.\n\nSymmetricForcesDemonsRegistrationFilter implements the demons deformable algorithm that register two images by computing the deformation field which will map a moving image onto a fixed image.\n\nA deformation field is represented as a image whose pixel type is some vector type with at least N elements, where N is the dimension of the fixed image. The vector type must support element access via operator []. It is assumed that the vector elements behave like floating point scalars.\n\nThis class is templated over the fixed image type, moving image type and the deformation field type.\n\nThe input fixed and moving images are set via methods SetFixedImage and SetMovingImage respectively. An initial deformation field maybe set via SetInitialDisplacementField or SetInput. If no initial field is set, a zero field is used as the initial condition.\n\nThe algorithm has one parameters: the number of iteration to be performed.\n\nThe output deformation field can be obtained via methods GetOutput or GetDisplacementField.\n\nThis class make use of the finite difference solver hierarchy. Update for each iteration is computed in DemonsRegistrationFunction .\n\n\\warning This filter assumes that the fixed image type, moving image type and deformation field type all have the same number of dimensions.\n\n\n\\see SymmetricForcesDemonsRegistrationFunction \n\n\n\\see DemonsRegistrationFilter \n\n\n\\see DemonsRegistrationFunction", "itk_module" : "ITKPDEDeformableRegistration", "itk_group" : "PDEDeformable" } diff --git a/Code/BasicFilters/json/ThresholdMaximumConnectedComponentsImageFilter.json b/Code/BasicFilters/json/ThresholdMaximumConnectedComponentsImageFilter.json index 76204a8cc..f3753230a 100644 --- a/Code/BasicFilters/json/ThresholdMaximumConnectedComponentsImageFilter.json +++ b/Code/BasicFilters/json/ThresholdMaximumConnectedComponentsImageFilter.json @@ -89,7 +89,7 @@ } ], "briefdescription" : "Finds the threshold value of an image based on maximizing the number of objects in the image that are larger than a given minimal size.", - "detaileddescription" : "\\par \nThis method is based on Topological Stable State Thresholding to calculate the threshold set point. This method is particularly effective when there are a large number of objects in a microscopy image. Compiling in Debug mode and enable the debug flag for this filter to print debug information to see how the filter focuses in on a threshold value. Please see the Insight Journal's MICCAI 2005 workshop for a complete description. References are below.\n\n\\par Parameters\nThe MinimumObjectSizeInPixels parameter is controlled through the class Get/SetMinimumObjectSizeInPixels() method. Similar to the standard itk::BinaryThresholdImageFilter the Get/SetInside and Get/SetOutside values of the threshold can be set. The GetNumberOfObjects() and GetThresholdValue() methods return the number of objects above the minimum pixel size and the calculated threshold value.\n\n\\par Automatic Thresholding in ITK\nThere are multiple methods to automatically calculate the threshold intensity value of an image. As of version 4.0, ITK has a Thresholding ( ITKThresholding ) module which contains numerous automatic thresholding methods.implements two of these. Topological Stable State Thresholding works well on images with a large number of objects to be counted.\n\n\\par References:\n1) Urish KL, August J, Huard J. \"Unsupervised segmentation for myofiber\ncounting in immunoflourescent images\". Insight Journal. ISC/NA-MIC/MICCAI Workshop on Open-Source Software (2005) Dspace handle: https://hdl.handle.net/1926/48 2) Pikaz A, Averbuch, A. \"Digital image thresholding based on topological\nstable-state\". Pattern Recognition, 29(5): 829-843, 1996.\n\n\\par \nQuestions: email Ken Urish at ken.urish(at)gmail.com Please cc the itk list serve for archival purposes.", + "detaileddescription" : "\\par \nThis method is based on Topological Stable State Thresholding to calculate the threshold set point. This method is particularly effective when there are a large number of objects in a microscopy image. Compiling in Debug mode and enable the debug flag for this filter to print debug information to see how the filter focuses in on a threshold value. Please see the Insight Journal's MICCAI 2005 workshop for a complete description. References are below.\n\n\n\\par Parameters\nThe MinimumObjectSizeInPixels parameter is controlled through the class Get/SetMinimumObjectSizeInPixels() method. Similar to the standard itk::BinaryThresholdImageFilter the Get/SetInside and Get/SetOutside values of the threshold can be set. The GetNumberOfObjects() and GetThresholdValue() methods return the number of objects above the minimum pixel size and the calculated threshold value.\n\n\n\\par Automatic Thresholding in ITK\nThere are multiple methods to automatically calculate the threshold intensity value of an image. As of version 4.0, ITK has a Thresholding ( ITKThresholding ) module which contains numerous automatic thresholding methods.implements two of these. Topological Stable State Thresholding works well on images with a large number of objects to be counted.\n\n\n\\par References:\n1) Urish KL, August J, Huard J. \"Unsupervised segmentation for myofiber\ncounting in immunoflourescent images\". Insight Journal. ISC/NA-MIC/MICCAI Workshop on Open-Source Software (2005) Dspace handle: https://hdl.handle.net/1926/48 2) Pikaz A, Averbuch, A. \"Digital image thresholding based on topological\nstable-state\". Pattern Recognition, 29(5): 829-843, 1996.\n\n\n\\par \nQuestions: email Ken Urish at ken.urish(at)gmail.com Please cc the itk list serve for archival purposes.", "itk_module" : "ITKConnectedComponents", "itk_group" : "ConnectedComponents" } diff --git a/Code/BasicFilters/json/ThresholdSegmentationLevelSetImageFilter.json b/Code/BasicFilters/json/ThresholdSegmentationLevelSetImageFilter.json index 5d7415874..c45699620 100644 --- a/Code/BasicFilters/json/ThresholdSegmentationLevelSetImageFilter.json +++ b/Code/BasicFilters/json/ThresholdSegmentationLevelSetImageFilter.json @@ -115,7 +115,7 @@ } ], "briefdescription" : "Segments structures in images based on intensity values.", - "detaileddescription" : "\\par IMPORTANT\nThe SegmentationLevelSetImageFilter class and the ThresholdSegmentationLevelSetFunction class contain additional information necessary to the full understanding of how to use this filter.\n\n\\par OVERVIEW\nThis class is a level set method segmentation filter. It constructs a speed function which is close to zero at the upper and lower bounds of an intensity window, effectively locking the propagating front onto those edges. Elsewhere, the front will propagate quickly.\n\n\\par INPUTS\nThis filter requires two inputs. The first input is a seed image. This seed image must contain an isosurface that you want to use as the seed for your segmentation. It can be a binary, graylevel, or floating point image. The only requirement is that it contain a closed isosurface that you will identify as the seed by setting the IsosurfaceValue parameter of the filter. For a binary image you will want to set your isosurface value halfway between your on and off values (i.e. for 0's and 1's, use an isosurface value of 0.5).\n\n\\par \nThe second input is the feature image. This is the image from which the speed function will be calculated. For most applications, this is the image that you want to segment. The desired isosurface in your seed image should lie within the region of your feature image that you are trying to segment. Note that this filter does no preprocessing of the feature image before thresholding.\n\n\\par \nSee SegmentationLevelSetImageFilter for more information on Inputs.\n\n\\par OUTPUTS\nThe filter outputs a single, scalar, real-valued image. Positive values in the output image are inside the segmentated region and negative values in the image are outside of the inside region. The zero crossings of the image correspond to the position of the level set front.\n\n\\par \nSee SparseFieldLevelSetImageFilter and SegmentationLevelSetImageFilter for more information.\n\n\\par PARAMETERS\nIn addition to parameters described in SegmentationLevelSetImageFilter , this filter adds the UpperThreshold and LowerThreshold. See ThresholdSegmentationLevelSetFunction for a description of how these values affect the segmentation.\n\n\\see SegmentationLevelSetImageFilter \n\n\\see ThresholdSegmentationLevelSetFunction , \n\n\\see SparseFieldLevelSetImageFilter", + "detaileddescription" : "\\par IMPORTANT\nThe SegmentationLevelSetImageFilter class and the ThresholdSegmentationLevelSetFunction class contain additional information necessary to the full understanding of how to use this filter.\n\n\n\\par OVERVIEW\nThis class is a level set method segmentation filter. It constructs a speed function which is close to zero at the upper and lower bounds of an intensity window, effectively locking the propagating front onto those edges. Elsewhere, the front will propagate quickly.\n\n\n\\par INPUTS\nThis filter requires two inputs. The first input is a seed image. This seed image must contain an isosurface that you want to use as the seed for your segmentation. It can be a binary, graylevel, or floating point image. The only requirement is that it contain a closed isosurface that you will identify as the seed by setting the IsosurfaceValue parameter of the filter. For a binary image you will want to set your isosurface value halfway between your on and off values (i.e. for 0's and 1's, use an isosurface value of 0.5).\n\n\n\\par \nThe second input is the feature image. This is the image from which the speed function will be calculated. For most applications, this is the image that you want to segment. The desired isosurface in your seed image should lie within the region of your feature image that you are trying to segment. Note that this filter does no preprocessing of the feature image before thresholding.\n\n\n\\par \nSee SegmentationLevelSetImageFilter for more information on Inputs.\n\n\n\\par OUTPUTS\nThe filter outputs a single, scalar, real-valued image. Positive values in the output image are inside the segmented region and negative values in the image are outside of the inside region. The zero crossings of the image correspond to the position of the level set front.\n\n\n\\par \nSee SparseFieldLevelSetImageFilter and SegmentationLevelSetImageFilter for more information.\n\n\n\\par PARAMETERS\nIn addition to parameters described in SegmentationLevelSetImageFilter , this filter adds the UpperThreshold and LowerThreshold. See ThresholdSegmentationLevelSetFunction for a description of how these values affect the segmentation.\n\n\n\\see SegmentationLevelSetImageFilter \n\n\n\\see ThresholdSegmentationLevelSetFunction , \n\n\n\\see SparseFieldLevelSetImageFilter", "itk_module" : "ITKLevelSets", "itk_group" : "LevelSets" } diff --git a/Code/BasicFilters/json/TikhonovDeconvolutionImageFilter.json b/Code/BasicFilters/json/TikhonovDeconvolutionImageFilter.json index fe3e8272e..b03315ed5 100644 --- a/Code/BasicFilters/json/TikhonovDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/TikhonovDeconvolutionImageFilter.json @@ -69,7 +69,7 @@ } ], "briefdescription" : "An inverse deconvolution filter regularized in the Tikhonov sense.", - "detaileddescription" : "The Tikhonov deconvolution filter is the inverse deconvolution filter with a regularization term added to the denominator. The filter minimizes the equation \\f[ ||\\hat{f} \\otimes h - g||_{L_2}^2 + \\mu||\\hat{f}||^2 \\f] where \\f$\\hat{f}\\f$ is the estimate of the unblurred image, \\f$h\\f$ is the blurring kernel, \\f$g\\f$ is the blurred image, and \\f$\\mu\\f$ is a non-negative real regularization function.\n\nThe filter applies a kernel described in the Fourier domain as \\f$H^*(\\omega) / (|H(\\omega)|^2 + \\mu)\\f$ where \\f$H(\\omega)\\f$ is the Fourier transform of \\f$h\\f$ . The term \\f$\\mu\\f$ is called RegularizationConstant in this filter. If \\f$\\mu\\f$ is set to zero, this filter is equivalent to the InverseDeconvolutionImageFilter .\n\n\\author Gaetan Lehmann, Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France \n\n\\author Cory Quammen, The University of North Carolina at Chapel Hill", + "detaileddescription" : "The Tikhonov deconvolution filter is the inverse deconvolution filter with a regularization term added to the denominator. The filter minimizes the equation \\f[ ||\\hat{f} \\otimes h - g||_{L_2}^2 + \\mu||\\hat{f}||^2 \\f] where \\f$\\hat{f}\\f$ is the estimate of the unblurred image, \\f$h\\f$ is the blurring kernel, \\f$g\\f$ is the blurred image, and \\f$\\mu\\f$ is a non-negative real regularization function.\n\nThe filter applies a kernel described in the Fourier domain as \\f$H^*(\\omega) / (|H(\\omega)|^2 + \\mu)\\f$ where \\f$H(\\omega)\\f$ is the Fourier transform of \\f$h\\f$ . The term \\f$\\mu\\f$ is called RegularizationConstant in this filter. If \\f$\\mu\\f$ is set to zero, this filter is equivalent to the InverseDeconvolutionImageFilter .\n\n\\author Gaetan Lehmann, Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France \n\n\n\\author Cory Quammen, The University of North Carolina at Chapel Hill", "itk_module" : "ITKDeconvolution", "itk_group" : "Deconvolution" } diff --git a/Code/BasicFilters/json/TileImageFilter.json b/Code/BasicFilters/json/TileImageFilter.json index 607959f5f..385cdc23e 100644 --- a/Code/BasicFilters/json/TileImageFilter.json +++ b/Code/BasicFilters/json/TileImageFilter.json @@ -13,14 +13,22 @@ "type" : "uint32_t", "default" : "std::vector(3, 100)", "dim_vec" : 1, - "itk_type" : "typename FilterType::LayoutArrayType" + "itk_type" : "typename FilterType::LayoutArrayType", + "briefdescriptionSet" : "", + "detaileddescriptionSet" : "Set/Get the layout of the tiles. If the last Layout value is 0, the filter will compute a value that will accommodate all of the images.", + "briefdescriptionGet" : "", + "detaileddescriptionGet" : "Set/Get the layout of the tiles. If the last Layout value is 0, the filter will compute a value that will accommodate all of the images." }, { "name" : "DefaultPixelValue", "type" : "double", "default" : "0.0", "custom_itk_cast" : "typename OutputImageType::PixelType v; NumericTraits::SetLength( v, filter->GetInput()->GetNumberOfComponentsPerPixel() ); ToPixelType( this->m_DefaultPixelValue, v ); filter->SetDefaultPixelValue( v );", - "pixeltype" : "Output" + "pixeltype" : "Output", + "briefdescriptionSet" : "", + "detaileddescriptionSet" : "Set the pixel value for locations that are not covered by an input image. The default default pixel value is Zero.", + "briefdescriptionGet" : "", + "detaileddescriptionGet" : "Get the pixel value for locations that are not covered by an input image." } ], "tests" : [ diff --git a/Code/BasicFilters/json/TransformToDisplacementFieldFilter.json b/Code/BasicFilters/json/TransformToDisplacementFieldFilter.json index 153e19524..e9a56154a 100644 --- a/Code/BasicFilters/json/TransformToDisplacementFieldFilter.json +++ b/Code/BasicFilters/json/TransformToDisplacementFieldFilter.json @@ -85,7 +85,7 @@ } ], "briefdescription" : "Generate a displacement field from a coordinate transform.", - "detaileddescription" : "Output information (spacing, size and direction) for the output image should be set. This information has the normal defaults of unit spacing, zero origin and identity direction. Optionally, the output information can be obtained from a reference image. If the reference image is provided and UseReferenceImage is On, then the spacing, origin and direction of the reference image will be used.\n\nSince this filter produces an image which is a different size than its input, it needs to override several of the methods defined in ProcessObject in order to properly manage the pipeline execution model. In particular, this filter overrides ProcessObject::GenerateOutputInformation() .\n\nThis filter is implemented as a multithreaded filter. It provides a ThreadedGenerateData() method for its implementation.\n\n\\author Marius Staring, Leiden University Medical Center, The Netherlands.\n\nThis class was taken from the Insight Journal paper: https://hdl.handle.net/1926/1387", + "detaileddescription" : "Output information (spacing, size and direction) for the output image should be set. This information has the normal defaults of unit spacing, zero origin and identity direction. Optionally, the output information can be obtained from a reference image. If the reference image is provided and UseReferenceImage is On, then the spacing, origin and direction of the reference image will be used.\n\nSince this filter produces an image which is a different size than its input, it needs to override several of the methods defined in ProcessObject in order to properly manage the pipeline execution model. In particular, this filter overrides ProcessObject::GenerateOutputInformation() .\n\nThis filter is implemented as a multithreaded filter. It provides a ThreadedGenerateData() method for its implementation.\n\n\\author Marius Staring, Leiden University Medical Center, The Netherlands.\n\n\nThis class was taken from the Insight Journal paper: https://hdl.handle.net/1926/1387", "itk_module" : "ITKDisplacementField", "itk_group" : "DisplacementField" } diff --git a/Code/BasicFilters/json/TriangleThresholdImageFilter.json b/Code/BasicFilters/json/TriangleThresholdImageFilter.json index e3dca470e..70c3d6555 100644 --- a/Code/BasicFilters/json/TriangleThresholdImageFilter.json +++ b/Code/BasicFilters/json/TriangleThresholdImageFilter.json @@ -126,7 +126,7 @@ } ], "briefdescription" : "Threshold an image using the Triangle Threshold.", - "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the TriangleThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", + "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the TriangleThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. \n\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/UnaryMinusImageFilter.json b/Code/BasicFilters/json/UnaryMinusImageFilter.json index 2403daeec..03bca8617 100644 --- a/Code/BasicFilters/json/UnaryMinusImageFilter.json +++ b/Code/BasicFilters/json/UnaryMinusImageFilter.json @@ -51,7 +51,7 @@ } ], "briefdescription" : "Implements pixel-wise generic operation on one image.", - "detaileddescription" : "This class is parameterized over the type of the input image and the type of the output image. It is also parameterized by the operation to be applied, using a Functor style.\n\nUnaryFunctorImageFilter allows the output dimension of the filter to be larger than the input dimension. Thus subclasses of the UnaryFunctorImageFilter (like the CastImageFilter ) can be used to promote a 2D image to a 3D image, etc.\n\n\\see BinaryFunctorImageFilter TernaryFunctorImageFilter", + "detaileddescription" : "This class is parameterized over the type of the input image and the type of the output image. It is also parameterized by the operation to be applied, using a Functor style.\n\nUnaryFunctorImageFilter allows the output dimension of the filter to be larger than the input dimension. Thus subclasses of the UnaryFunctorImageFilter (like the CastImageFilter ) can be used to promote a 2D image to a 3D image, etc.\n\n\\see UnaryGeneratorImageFilter \n\n\n\\see BinaryFunctorImageFilter TernaryFunctorImageFilter", "itk_module" : "ITKCommon", "itk_group" : "Common" } diff --git a/Code/BasicFilters/json/UnsharpMaskImageFilter.json b/Code/BasicFilters/json/UnsharpMaskImageFilter.json index 95e4f62ee..af133b11d 100644 --- a/Code/BasicFilters/json/UnsharpMaskImageFilter.json +++ b/Code/BasicFilters/json/UnsharpMaskImageFilter.json @@ -73,7 +73,7 @@ } ], "briefdescription" : "Edge enhancement filter.", - "detaileddescription" : "This filter subtracts a smoothed version of the image from the image to achieve the edge enhancing effect. https://en.wikipedia.org/w/index.php?title=Unsharp_masking&oldid=750486803#Photographic_unsharp_masking \n\nIt has configurable amount, radius (sigma) and threshold, and whether to clamp the resulting values to the range of output type.\n\nFormula: sharpened=original+[abs(original-blurred)-threshold]*amount\n\nIf clamping is turned off (it is on by default), casting to output pixel format is done using C++ defaults, meaning that values are not clamped but rather wrap around e.g. 260 -> 4 (unsigned char).\n\n\\see ImageToImageFilter \n\n\\see SmoothingRecursiveGaussianImageFilter \n\n\\see RescaleIntensityImageFilter", + "detaileddescription" : "This filter subtracts a smoothed version of the image from the image to achieve the edge enhancing effect. https://en.wikipedia.org/w/index.php?title=Unsharp_masking&oldid=750486803#Photographic_unsharp_masking \n\nIt has configurable amount, radius (sigma) and threshold, and whether to clamp the resulting values to the range of output type.\n\nFormula: sharpened=original+[abs(original-blurred)-threshold]*amount\n\nIf clamping is turned off (it is on by default), casting to output pixel format is done using C++ defaults, meaning that values are not clamped but rather wrap around e.g. 260 -> 4 (unsigned char).\n\n\\see ImageToImageFilter \n\n\n\\see SmoothingRecursiveGaussianImageFilter \n\n\n\\see RescaleIntensityImageFilter", "itk_module" : "ITKImageFeature", "itk_group" : "ImageFeature" } diff --git a/Code/BasicFilters/json/ValuedRegionalMaximaImageFilter.json b/Code/BasicFilters/json/ValuedRegionalMaximaImageFilter.json index f67dfbf7a..f2a554546 100644 --- a/Code/BasicFilters/json/ValuedRegionalMaximaImageFilter.json +++ b/Code/BasicFilters/json/ValuedRegionalMaximaImageFilter.json @@ -31,7 +31,7 @@ } ], "briefdescription" : "Transforms the image so that any pixel that is not a regional maxima is set to the minimum value for the pixel type. Pixels that are regional maxima retain their value.", - "detaileddescription" : "Regional maxima are flat zones surrounded by pixels of lower value. A completely flat image will be marked as a regional maxima by this filter.\n\nThis code was contributed in the Insight Journal paper: \"Finding regional extrema - methods and performance\" by Beare R., Lehmann G. https://hdl.handle.net/1926/153 http://www.insight-journal.org/browse/publication/65 \n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia.\n\n\\see ValuedRegionalMinimaImageFilter \n\n\\see ValuedRegionalExtremaImageFilter \n\n\\see HMinimaImageFilter", + "detaileddescription" : "Regional maxima are flat zones surrounded by pixels of lower value. A completely flat image will be marked as a regional maxima by this filter.\n\nThis code was contributed in the Insight Journal paper: \"Finding regional extrema - methods and performance\" by Beare R., Lehmann G. https://hdl.handle.net/1926/153 http://www.insight-journal.org/browse/publication/65 \n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia.\n\n\n\\see ValuedRegionalMinimaImageFilter \n\n\n\\see ValuedRegionalExtremaImageFilter \n\n\n\\see HMinimaImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/ValuedRegionalMinimaImageFilter.json b/Code/BasicFilters/json/ValuedRegionalMinimaImageFilter.json index 690d9cf26..033c3f2c1 100644 --- a/Code/BasicFilters/json/ValuedRegionalMinimaImageFilter.json +++ b/Code/BasicFilters/json/ValuedRegionalMinimaImageFilter.json @@ -31,7 +31,7 @@ } ], "briefdescription" : "Transforms the image so that any pixel that is not a regional minima is set to the maximum value for the pixel type. Pixels that are regional minima retain their value.", - "detaileddescription" : "Regional minima are flat zones surrounded by pixels of higher value. A completely flat image will be marked as a regional minima by this filter.\n\nThis code was contributed in the Insight Journal paper: \"Finding regional extrema - methods and performance\" by Beare R., Lehmann G. https://hdl.handle.net/1926/153 http://www.insight-journal.org/browse/publication/65 \n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia.\n\n\\see ValuedRegionalMaximaImageFilter , ValuedRegionalExtremaImageFilter , \n\n\\see HMinimaImageFilter", + "detaileddescription" : "Regional minima are flat zones surrounded by pixels of higher value. A completely flat image will be marked as a regional minima by this filter.\n\nThis code was contributed in the Insight Journal paper: \"Finding regional extrema - methods and performance\" by Beare R., Lehmann G. https://hdl.handle.net/1926/153 http://www.insight-journal.org/browse/publication/65 \n\n\\author Richard Beare. Department of Medicine, Monash University, Melbourne, Australia.\n\n\n\\see ValuedRegionalMaximaImageFilter , ValuedRegionalExtremaImageFilter , \n\n\n\\see HMinimaImageFilter", "itk_module" : "ITKMathematicalMorphology", "itk_group" : "MathematicalMorphology" } diff --git a/Code/BasicFilters/json/VectorIndexSelectionCastImageFilter.json b/Code/BasicFilters/json/VectorIndexSelectionCastImageFilter.json index d5d393d93..231baafe1 100644 --- a/Code/BasicFilters/json/VectorIndexSelectionCastImageFilter.json +++ b/Code/BasicFilters/json/VectorIndexSelectionCastImageFilter.json @@ -17,7 +17,7 @@ "briefdescriptionSet" : "", "detaileddescriptionSet" : "Get/Set methods for the index", "briefdescriptionGet" : "", - "detaileddescriptionGet" : "" + "detaileddescriptionGet" : "Get/Set methods for the index" }, { "name" : "OutputPixelType", diff --git a/Code/BasicFilters/json/VotingBinaryHoleFillingImageFilter.json b/Code/BasicFilters/json/VotingBinaryHoleFillingImageFilter.json index 9c976dab3..1d620be24 100644 --- a/Code/BasicFilters/json/VotingBinaryHoleFillingImageFilter.json +++ b/Code/BasicFilters/json/VotingBinaryHoleFillingImageFilter.json @@ -59,7 +59,7 @@ } ], "briefdescription" : "Fills in holes and cavities by applying a voting operation on each pixel.", - "detaileddescription" : "\\see Image \n\n\\see VotingBinaryImageFilter \n\n\\see VotingBinaryIterativeHoleFillingImageFilter \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator", + "detaileddescription" : "\\see Image \n\n\n\\see VotingBinaryImageFilter \n\n\n\\see VotingBinaryIterativeHoleFillingImageFilter \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator", "itk_module" : "ITKLabelVoting", "itk_group" : "LabelVoting" } diff --git a/Code/BasicFilters/json/VotingBinaryImageFilter.json b/Code/BasicFilters/json/VotingBinaryImageFilter.json index 2b92ba3b3..68ce82f6b 100644 --- a/Code/BasicFilters/json/VotingBinaryImageFilter.json +++ b/Code/BasicFilters/json/VotingBinaryImageFilter.json @@ -89,7 +89,7 @@ } ], "briefdescription" : "Applies a voting operation in a neighborhood of each pixel.", - "detaileddescription" : "\\note Pixels which are not Foreground or Background will remain unchanged.\n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator", + "detaileddescription" : "\\note Pixels which are not Foreground or Background will remain unchanged.\n\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator", "itk_module" : "ITKLabelVoting", "itk_group" : "LabelVoting" } diff --git a/Code/BasicFilters/json/VotingBinaryIterativeHoleFillingImageFilter.json b/Code/BasicFilters/json/VotingBinaryIterativeHoleFillingImageFilter.json index f8477e0b9..39e1117d5 100644 --- a/Code/BasicFilters/json/VotingBinaryIterativeHoleFillingImageFilter.json +++ b/Code/BasicFilters/json/VotingBinaryIterativeHoleFillingImageFilter.json @@ -81,7 +81,7 @@ } ], "briefdescription" : "Fills in holes and cavities by iteratively applying a voting operation.", - "detaileddescription" : "This filter uses internally the VotingBinaryHoleFillingImageFilter , and runs it iteratively until no pixels are being changed or until it reaches the maximum number of iterations. The purpose of the filter is to fill in holes of medium size (tens of pixels in radius). In principle the number of iterations is related to the size of the holes to be filled in. The larger the holes, the more iteration must be run with this filter in order to fill in the full hole. The size of the neighborhood is also related to the curvature of the hole borders and therefore the hole size. Note that as a collateral effect this filter may also fill in cavities in the external side of structures.\n\nThis filter is templated over a single image type because the output image type must be the same as the input image type. This is required in order to make the iterations possible, since the output image of one iteration is taken as the input image for the next iteration.\n\n\\see Image \n\n\\see VotingBinaryImageFilter \n\n\\see VotingBinaryHoleFillingImageFilter \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator", + "detaileddescription" : "This filter uses internally the VotingBinaryHoleFillingImageFilter , and runs it iteratively until no pixels are being changed or until it reaches the maximum number of iterations. The purpose of the filter is to fill in holes of medium size (tens of pixels in radius). In principle the number of iterations is related to the size of the holes to be filled in. The larger the holes, the more iteration must be run with this filter in order to fill in the full hole. The size of the neighborhood is also related to the curvature of the hole borders and therefore the hole size. Note that as a collateral effect this filter may also fill in cavities in the external side of structures.\n\nThis filter is templated over a single image type because the output image type must be the same as the input image type. This is required in order to make the iterations possible, since the output image of one iteration is taken as the input image for the next iteration.\n\n\\see Image \n\n\n\\see VotingBinaryImageFilter \n\n\n\\see VotingBinaryHoleFillingImageFilter \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator", "itk_module" : "ITKLabelVoting", "itk_group" : "LabelVoting" } diff --git a/Code/BasicFilters/json/WienerDeconvolutionImageFilter.json b/Code/BasicFilters/json/WienerDeconvolutionImageFilter.json index 2f3065f54..a6b344c74 100644 --- a/Code/BasicFilters/json/WienerDeconvolutionImageFilter.json +++ b/Code/BasicFilters/json/WienerDeconvolutionImageFilter.json @@ -69,7 +69,7 @@ } ], "briefdescription" : "The Wiener deconvolution image filter is designed to restore an image convolved with a blurring kernel while keeping noise enhancement to a minimum.", - "detaileddescription" : "The Wiener filter aims to minimize noise enhancement induced by frequencies with low signal-to-noise ratio. The Wiener filter kernel is defined in the frequency domain as \\f$W(\\omega) = H^*(\\omega) / (|H(\\omega)|^2 + (1 / SNR(\\omega)))\\f$ where \\f$H(\\omega)\\f$ is the Fourier transform of the blurring kernel with which the original image was convolved and the signal-to-noise ratio \\f$SNR(\\omega)\\f$ . \\f$SNR(\\omega)\\f$ is defined by \\f$P_f(\\omega) / P_n(\\omega)\\f$ where \\f$P_f(\\omega)\\f$ is the power spectral density of the uncorrupted signal and \\f$P_n(\\omega)\\f$ is the power spectral density of the noise. When applied to the input blurred image, this filter produces an estimate \\f$\\hat{f}(x)\\f$ of the true underlying signal \\f$f(x)\\f$ that minimizes the expected error between \\f$\\hat{f}(x)\\f$ and \\f$f(x)\\f$ .\n\nThis filter requires two inputs, the image to be deconvolved and the blurring kernel. These two inputs can be set using the methods SetInput() and SetKernelImage() , respectively.\n\nThe power spectral densities of the signal and noise are typically unavailable for a given problem. In particular, \\f$P_f(\\omega)\\f$ cannot be computed from \\f$f(x)\\f$ because this unknown signal is precisely the signal that this filter aims to recover. Nevertheless, it is common for the noise to have a power spectral density that is flat or decreasing significantly more slowly than the power spectral density of a typical image as the frequency \\f$\\omega\\f$ increases. Hence, \\f$P_n(\\omega)\\f$ can typically be approximated with a constant, and this filter makes this assumption (see the NoiseVariance member variable). \\f$P_f(\\omega)\\f$ , on the other hand, will vary with input. This filter computes the power spectral density of the input blurred image, subtracts the power spectral density of the noise, and uses the result as the estimate of \\f$P_f(\\omega)\\f$ .\n\nFor further information on the Wiener deconvolution filter, please see \"Digital Signal Processing\" by Kenneth R. Castleman, Prentice Hall, 1995\n\n\\author Gaetan Lehmann, Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France \n\n\\author Chris Mullins, The University of North Carolina at Chapel Hill \n\n\\author Cory Quammen, The University of North Carolina at Chapel Hill", + "detaileddescription" : "The Wiener filter aims to minimize noise enhancement induced by frequencies with low signal-to-noise ratio. The Wiener filter kernel is defined in the frequency domain as \\f$W(\\omega) = H^*(\\omega) / (|H(\\omega)|^2 + (1 / SNR(\\omega)))\\f$ where \\f$H(\\omega)\\f$ is the Fourier transform of the blurring kernel with which the original image was convolved and the signal-to-noise ratio \\f$SNR(\\omega)\\f$ . \\f$SNR(\\omega)\\f$ is defined by \\f$P_f(\\omega) / P_n(\\omega)\\f$ where \\f$P_f(\\omega)\\f$ is the power spectral density of the uncorrupted signal and \\f$P_n(\\omega)\\f$ is the power spectral density of the noise. When applied to the input blurred image, this filter produces an estimate \\f$\\hat{f}(x)\\f$ of the true underlying signal \\f$f(x)\\f$ that minimizes the expected error between \\f$\\hat{f}(x)\\f$ and \\f$f(x)\\f$ .\n\nThis filter requires two inputs, the image to be deconvolved and the blurring kernel. These two inputs can be set using the methods SetInput() and SetKernelImage() , respectively.\n\nThe power spectral densities of the signal and noise are typically unavailable for a given problem. In particular, \\f$P_f(\\omega)\\f$ cannot be computed from \\f$f(x)\\f$ because this unknown signal is precisely the signal that this filter aims to recover. Nevertheless, it is common for the noise to have a power spectral density that is flat or decreasing significantly more slowly than the power spectral density of a typical image as the frequency \\f$\\omega\\f$ increases. Hence, \\f$P_n(\\omega)\\f$ can typically be approximated with a constant, and this filter makes this assumption (see the NoiseVariance member variable). \\f$P_f(\\omega)\\f$ , on the other hand, will vary with input. This filter computes the power spectral density of the input blurred image, subtracts the power spectral density of the noise, and uses the result as the estimate of \\f$P_f(\\omega)\\f$ .\n\nFor further information on the Wiener deconvolution filter, please see \"Digital Signal Processing\" by Kenneth R. Castleman, Prentice Hall, 1995\n\n\\author Gaetan Lehmann, Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France \n\n\n\\author Chris Mullins, The University of North Carolina at Chapel Hill \n\n\n\\author Cory Quammen, The University of North Carolina at Chapel Hill", "itk_module" : "ITKDeconvolution", "itk_group" : "Deconvolution" } diff --git a/Code/BasicFilters/json/WrapPadImageFilter.json b/Code/BasicFilters/json/WrapPadImageFilter.json index 35c33c8aa..fecf84f5d 100644 --- a/Code/BasicFilters/json/WrapPadImageFilter.json +++ b/Code/BasicFilters/json/WrapPadImageFilter.json @@ -65,7 +65,7 @@ } ], "briefdescription" : "Increase the image size by padding with replicants of the input image value.", - "detaileddescription" : "WrapPadImageFilter changes the image bounds of an image. Added pixels are filled in with a wrapped replica of the input image. For instance, if the output image needs a pixel that is two pixels to the left of the LargestPossibleRegion of the input image, the value assigned will be from the pixel two pixels inside the right boundary of the LargestPossibleRegion. The image bounds of the output must be specified.\n\nVisual explanation of padding regions.\n This filter is implemented as a multithreaded filter. It provides a ThreadedGenerateData() method for its implementation.\n\n\\see MirrorPadImageFilter , ConstantPadImageFilter", + "detaileddescription" : "WrapPadImageFilter changes the image bounds of an image. Added pixels are filled in with a wrapped replica of the input image. For instance, if the output image needs a pixel that is two pixels to the left of the LargestPossibleRegion of the input image, the value assigned will be from the pixel two pixels inside the right boundary of the LargestPossibleRegion. The image bounds of the output must be specified.\n\nVisual explanation of padding regions.\n\n\nThis filter is implemented as a multithreaded filter. It provides a ThreadedGenerateData() method for its implementation.\n\n\\see MirrorPadImageFilter , ConstantPadImageFilter", "itk_module" : "ITKImageGrid", "itk_group" : "ImageGrid" } diff --git a/Code/BasicFilters/json/XorImageFilter.json b/Code/BasicFilters/json/XorImageFilter.json index ce7f7ace8..41bbac16d 100644 --- a/Code/BasicFilters/json/XorImageFilter.json +++ b/Code/BasicFilters/json/XorImageFilter.json @@ -20,7 +20,7 @@ } ], "briefdescription" : "Computes the XOR bitwise operator pixel-wise between two images.", - "detaileddescription" : "This class is templated over the types of the two input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nSince the bitwise XOR operation is only defined in C++ for integer types, the images passed to this filter must comply with the requirement of using integer pixel type.\n\nThe total operation over one pixel will be\n\n\\code\noutput_pixel = static_cast( input1_pixel ^ input2_pixel )\n\n\\endcode\n\nWhere \"^\" is the boolean XOR operator in C++.", + "detaileddescription" : "This class is templated over the types of the two input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.\n\nSince the bitwise XOR operation is only defined in C++ for integer types, the images passed to this filter must comply with the requirement of using integer pixel type.\n\nThe total operation over one pixel will be\n\n\\code\noutput_pixel = static_cast( input1_pixel ^ input2_pixel )\n\n\\endcode\n\n\nWhere \"^\" is the boolean XOR operator in C++.", "itk_module" : "ITKImageIntensity", "itk_group" : "ImageIntensity" } diff --git a/Code/BasicFilters/json/YenThresholdImageFilter.json b/Code/BasicFilters/json/YenThresholdImageFilter.json index d9ce12818..6781ebd11 100644 --- a/Code/BasicFilters/json/YenThresholdImageFilter.json +++ b/Code/BasicFilters/json/YenThresholdImageFilter.json @@ -126,7 +126,7 @@ } ], "briefdescription" : "Threshold an image using the Yen Threshold.", - "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the YenThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare \n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", + "detaileddescription" : "This filter creates a binary thresholded image that separates an image into foreground and background components. The filter computes the threshold using the YenThresholdCalculator and applies that threshold to the input image using the BinaryThresholdImageFilter .\n\n\\author Richard Beare \n\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\nThis implementation was taken from the Insight Journal paper: https://hdl.handle.net/10380/3279 or http://www.insight-journal.org/browse/publication/811 \n\n\\see HistogramThresholdImageFilter", "itk_module" : "ITKThresholding", "itk_group" : "Thresholding" } diff --git a/Code/BasicFilters/json/ZeroCrossingBasedEdgeDetectionImageFilter.json b/Code/BasicFilters/json/ZeroCrossingBasedEdgeDetectionImageFilter.json index 5a305b7e1..44fae5fd1 100644 --- a/Code/BasicFilters/json/ZeroCrossingBasedEdgeDetectionImageFilter.json +++ b/Code/BasicFilters/json/ZeroCrossingBasedEdgeDetectionImageFilter.json @@ -57,7 +57,7 @@ } ], "briefdescription" : "This filter implements a zero-crossing based edge detecor.", - "detaileddescription" : "The zero-crossing based edge detector looks for pixels in the Laplacian of an image where the value of the Laplacian passes through zero points where the Laplacian changes sign. Such points often occur at \"edges\" in images i.e. points where the intensity of the image changes rapidly, but they also occur at places that are not as easy to associate with edges. It is best to think of the zero crossing detector as some sort of feature detector rather than as a specific edge detector.\n\n\\par \nZero crossings always lie on closed contours and so the output from the zero crossing detector is usually a binary image with single pixel thickness lines showing the positions of the zero crossing points.\n\n\\par \nIn this implementation, the input image is first smoothed with a Gaussian filter, then the LaplacianImageFilter is applied to smoothed image. Finally the zero-crossing of the Laplacian of the smoothed image is detected. The output is a binary image.\n\n\\par Inputs and Outputs\nThe input to the filter should be a scalar, itk::Image of arbitrary dimension. The output image is a binary, labeled image. See itkZeroCrossingImageFilter for more information on requirements of the data type of the output.\n\n\\par \nTo use this filter, first set the parameters (variance and maximum error) needed by the embedded DiscreteGaussianImageFilter , i.e. See DiscreteGaussianImageFilter for information about these parameters. Optionally, you may also set foreground and background values for the zero-crossing filter. The default label values are Zero for the background and One for the foreground, as defined in NumericTraits for the data type of the output image.\n\n\\see DiscreteGaussianImageFilter \n\n\\see LaplacianImageFilter \n\n\\see ZeroCrossingImageFilter", + "detaileddescription" : "The zero-crossing based edge detector looks for pixels in the Laplacian of an image where the value of the Laplacian passes through zero points where the Laplacian changes sign. Such points often occur at \"edges\" in images i.e. points where the intensity of the image changes rapidly, but they also occur at places that are not as easy to associate with edges. It is best to think of the zero crossing detector as some sort of feature detector rather than as a specific edge detector.\n\n\\par \nZero crossings always lie on closed contours and so the output from the zero crossing detector is usually a binary image with single pixel thickness lines showing the positions of the zero crossing points.\n\n\n\\par \nIn this implementation, the input image is first smoothed with a Gaussian filter, then the LaplacianImageFilter is applied to smoothed image. Finally the zero-crossing of the Laplacian of the smoothed image is detected. The output is a binary image.\n\n\n\\par Inputs and Outputs\nThe input to the filter should be a scalar, itk::Image of arbitrary dimension. The output image is a binary, labeled image. See itkZeroCrossingImageFilter for more information on requirements of the data type of the output.\n\n\n\\par \nTo use this filter, first set the parameters (variance and maximum error) needed by the embedded DiscreteGaussianImageFilter , i.e. See DiscreteGaussianImageFilter for information about these parameters. Optionally, you may also set foreground and background values for the zero-crossing filter. The default label values are Zero for the background and One for the foreground, as defined in NumericTraits for the data type of the output image.\n\n\n\\see DiscreteGaussianImageFilter \n\n\n\\see LaplacianImageFilter \n\n\n\\see ZeroCrossingImageFilter", "itk_module" : "ITKImageFeature", "itk_group" : "ImageFeature" } diff --git a/Code/BasicFilters/json/ZeroCrossingImageFilter.json b/Code/BasicFilters/json/ZeroCrossingImageFilter.json index 7c3434650..2b1745915 100644 --- a/Code/BasicFilters/json/ZeroCrossingImageFilter.json +++ b/Code/BasicFilters/json/ZeroCrossingImageFilter.json @@ -60,7 +60,7 @@ } ], "briefdescription" : "This filter finds the closest pixel to the zero-crossings (sign changes) in a signed itk::Image .", - "detaileddescription" : "Pixels closest to zero-crossings are labeled with a foreground value. All other pixels are marked with a background value. The algorithm works by detecting differences in sign among neighbors using city-block style connectivity (4-neighbors in 2d, 6-neighbors in 3d, etc.).\n\n\\par Inputs and Outputs\nThe input to this filter is an itk::Image of arbitrary dimension. The algorithm assumes a signed data type (zero-crossings are not defined for unsigned data types), and requires that operator>, operator<, operator==, and operator!= are defined.\n\n\\par \nThe output of the filter is a binary, labeled image of user-specified type. By default, zero-crossing pixels are labeled with a default \"foreground\" value of itk::NumericTraits::OneValue() , where OutputDataType is the data type of the output image. All other pixels are labeled with a default \"background\" value of itk::NumericTraits::ZeroValue() .\n\n\\par Parameters\nThere are two parameters for this filter. ForegroundValue is the value that marks zero-crossing pixels. The BackgroundValue is the value given to all other pixels.\n\n\\see Image \n\n\\see Neighborhood \n\n\\see NeighborhoodOperator \n\n\\see NeighborhoodIterator", + "detaileddescription" : "Pixels closest to zero-crossings are labeled with a foreground value. All other pixels are marked with a background value. The algorithm works by detecting differences in sign among neighbors using city-block style connectivity (4-neighbors in 2d, 6-neighbors in 3d, etc.).\n\n\\par Inputs and Outputs\nThe input to this filter is an itk::Image of arbitrary dimension. The algorithm assumes a signed data type (zero-crossings are not defined for unsigned data types), and requires that operator>, operator<, operator==, and operator!= are defined.\n\n\n\\par \nThe output of the filter is a binary, labeled image of user-specified type. By default, zero-crossing pixels are labeled with a default \"foreground\" value of itk::NumericTraits::OneValue() , where OutputDataType is the data type of the output image. All other pixels are labeled with a default \"background\" value of itk::NumericTraits::ZeroValue() .\n\n\n\\par Parameters\nThere are two parameters for this filter. ForegroundValue is the value that marks zero-crossing pixels. The BackgroundValue is the value given to all other pixels.\n\n\n\\see Image \n\n\n\\see Neighborhood \n\n\n\\see NeighborhoodOperator \n\n\n\\see NeighborhoodIterator", "itk_module" : "ITKImageFeature", "itk_group" : "ImageFeature" } diff --git a/Code/BasicFilters/json/ZeroFluxNeumannPadImageFilter.json b/Code/BasicFilters/json/ZeroFluxNeumannPadImageFilter.json index ed206532f..5a13fcd26 100644 --- a/Code/BasicFilters/json/ZeroFluxNeumannPadImageFilter.json +++ b/Code/BasicFilters/json/ZeroFluxNeumannPadImageFilter.json @@ -62,7 +62,7 @@ } ], "briefdescription" : "Increase the image size by padding according to the zero-flux Neumann boundary condition.", - "detaileddescription" : "A filter which extends the image size and fill the missing pixels according to a Neumann boundary condition where first, upwind derivatives on the boundary are zero. This is a useful condition in solving some classes of differential equations.\n\nFor example, invoking this filter on an image with a corner like: \\code\n* * * * * * *\n\n* * * * * * *\n\n* * 1 2 3 4 5 (where * denotes pixels that lie\n\n* * 3 3 5 5 6 outside of the image boundary)\n\n* * 4 4 6 7 8\n\n\\endcode\n returns the following padded image: \\code\n1 1 1 2 3 4 5\n\n1 1 1 2 3 4 5\n\n1 1 1 2 3 4 5\n\n3 3 3 3 5 5 6 (note the corner values)\n\n4 4 4 4 6 7 8\n\n\\endcode\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\\see WrapPadImageFilter , MirrorPadImageFilter , ConstantPadImageFilter , ZeroFluxNeumannBoundaryCondition", + "detaileddescription" : "A filter which extends the image size and fill the missing pixels according to a Neumann boundary condition where first, upwind derivatives on the boundary are zero. This is a useful condition in solving some classes of differential equations.\n\nFor example, invoking this filter on an image with a corner like: \\code\n* * * * * *\n\n* * * * * *\n\n* 1 2 3 4 5 (where * denotes pixels that lie\n\n* 3 3 5 5 6 outside of the image boundary)\n\n* 4 4 6 7 8\n\n\\endcode\n returns the following padded image: \\code\n1 1 1 2 3 4 5\n\n1 1 1 2 3 4 5\n\n1 1 1 2 3 4 5\n\n3 3 3 3 5 5 6 (note the corner values)\n\n4 4 4 4 6 7 8\n\n\\endcode\n\n\n\\author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France.\n\n\n\\see WrapPadImageFilter , MirrorPadImageFilter , ConstantPadImageFilter , ZeroFluxNeumannBoundaryCondition", "itk_module" : "ITKImageGrid", "itk_group" : "ImageGrid" } From c1aba1d939cb5a1e5ce374df3689c144fd2efaf2 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 9 Mar 2020 13:47:30 -0400 Subject: [PATCH 396/400] Move AZP package scripts to scripts directory --- Testing/CI/Azure/{ => scripts}/mac_build_python.sh | 0 Testing/CI/Azure/{ => scripts}/win_build_csharp.sh | 0 Testing/CI/Azure/{ => scripts}/win_build_java.sh | 0 Testing/CI/Azure/{ => scripts}/win_build_python.sh | 0 Testing/CI/Azure/templates/package-mac-job.yml | 8 ++++---- Testing/CI/Azure/templates/package-win-job.yml | 12 ++++++------ 6 files changed, 10 insertions(+), 10 deletions(-) rename Testing/CI/Azure/{ => scripts}/mac_build_python.sh (100%) rename Testing/CI/Azure/{ => scripts}/win_build_csharp.sh (100%) rename Testing/CI/Azure/{ => scripts}/win_build_java.sh (100%) rename Testing/CI/Azure/{ => scripts}/win_build_python.sh (100%) diff --git a/Testing/CI/Azure/mac_build_python.sh b/Testing/CI/Azure/scripts/mac_build_python.sh similarity index 100% rename from Testing/CI/Azure/mac_build_python.sh rename to Testing/CI/Azure/scripts/mac_build_python.sh diff --git a/Testing/CI/Azure/win_build_csharp.sh b/Testing/CI/Azure/scripts/win_build_csharp.sh similarity index 100% rename from Testing/CI/Azure/win_build_csharp.sh rename to Testing/CI/Azure/scripts/win_build_csharp.sh diff --git a/Testing/CI/Azure/win_build_java.sh b/Testing/CI/Azure/scripts/win_build_java.sh similarity index 100% rename from Testing/CI/Azure/win_build_java.sh rename to Testing/CI/Azure/scripts/win_build_java.sh diff --git a/Testing/CI/Azure/win_build_python.sh b/Testing/CI/Azure/scripts/win_build_python.sh similarity index 100% rename from Testing/CI/Azure/win_build_python.sh rename to Testing/CI/Azure/scripts/win_build_python.sh diff --git a/Testing/CI/Azure/templates/package-mac-job.yml b/Testing/CI/Azure/templates/package-mac-job.yml index a8cd792aa..28883d27c 100644 --- a/Testing/CI/Azure/templates/package-mac-job.yml +++ b/Testing/CI/Azure/templates/package-mac-job.yml @@ -73,7 +73,7 @@ jobs: inputs: pathtoPublish: $(Build.ArtifactStagingDirectory)/archives artifactName: Archives - - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh + - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/scripts/mac_build_python.sh displayName: Build Python 38 continueOnError: true - task: UsePythonVersion@0 @@ -81,7 +81,7 @@ jobs: inputs: versionSpec: '3.8' architecture: 'x64' - - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh + - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/scripts/mac_build_python.sh displayName: Build Python 38 continueOnError: true - task: UsePythonVersion@0 @@ -89,7 +89,7 @@ jobs: inputs: versionSpec: '3.7' architecture: 'x64' - - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh + - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/scripts/mac_build_python.sh displayName: Build Python 37 continueOnError: true - task: UsePythonVersion@0 @@ -97,7 +97,7 @@ jobs: inputs: versionSpec: '3.5' architecture: 'x64' - - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/mac_build_python.sh + - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/scripts/mac_build_python.sh displayName: Build Python 35 continueOnError: true - task: PublishBuildArtifacts@1 diff --git a/Testing/CI/Azure/templates/package-win-job.yml b/Testing/CI/Azure/templates/package-win-job.yml index 5ce7f7724..d6e85eb50 100644 --- a/Testing/CI/Azure/templates/package-win-job.yml +++ b/Testing/CI/Azure/templates/package-win-job.yml @@ -46,7 +46,7 @@ jobs: displayName: Cleanup build - script: | call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ parameters.VCVAR_OPTIONS }} -vcvars_ver=14.0 - bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_java.sh + bash $(Build.SourcesDirectory)/Testing/CI/Azure/scripts/win_build_java.sh displayName: Build Java continueOnError: true - task: PublishBuildArtifacts@1 @@ -56,7 +56,7 @@ jobs: continueOnError: true - script: | call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ parameters.VCVAR_OPTIONS }} -vcvars_ver=14.0 - bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_csharp.sh + bash $(Build.SourcesDirectory)/Testing/CI/Azure/scripts/win_build_csharp.sh displayName: Build CSharp continueOnError: true env: @@ -73,7 +73,7 @@ jobs: architecture: '${{ parameters.PYTHON_ARCH }}' - script: | call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ parameters.VCVAR_OPTIONS }} -vcvars_ver=14.0 - bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh + bash $(Build.SourcesDirectory)/Testing/CI/Azure/scripts/win_build_python.sh displayName: Build Python 38 continueOnError: true @@ -84,7 +84,7 @@ jobs: architecture: '${{ parameters.PYTHON_ARCH }}' - script: | call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ parameters.VCVAR_OPTIONS }} -vcvars_ver=14.0 - bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh + bash $(Build.SourcesDirectory)/Testing/CI/Azure/scripts/win_build_python.sh displayName: Build Python 37 continueOnError: true - task: UsePythonVersion@0 @@ -94,7 +94,7 @@ jobs: architecture: '${{ parameters.PYTHON_ARCH }}' - script: | call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ parameters.VCVAR_OPTIONS }} -vcvars_ver=14.0 - bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh + bash $(Build.SourcesDirectory)/Testing/CI/Azure/scripts/win_build_python.sh displayName: Build Python 36 continueOnError: true - task: UsePythonVersion@0 @@ -104,7 +104,7 @@ jobs: architecture: '${{ parameters.PYTHON_ARCH }}' - script: | call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ parameters.VCVAR_OPTIONS }} -vcvars_ver=14.0 - bash $(Build.SourcesDirectory)/Testing/CI/Azure/win_build_python.sh + bash $(Build.SourcesDirectory)/Testing/CI/Azure/scripts/win_build_python.sh displayName: Build Python 35 continueOnError: true - task: PublishBuildArtifacts@1 From d39b3059f25e1ba7e94cfc2e809407a10ff74b38 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 9 Mar 2020 13:50:15 -0400 Subject: [PATCH 397/400] AZP add Java package for Apple OSX --- Testing/CI/Azure/scripts/mac_build_java.sh | 38 +++++++++++++++++++ .../CI/Azure/templates/package-mac-job.yml | 9 +++++ 2 files changed, 47 insertions(+) create mode 100755 Testing/CI/Azure/scripts/mac_build_java.sh diff --git a/Testing/CI/Azure/scripts/mac_build_java.sh b/Testing/CI/Azure/scripts/mac_build_java.sh new file mode 100755 index 000000000..53f7fedf5 --- /dev/null +++ b/Testing/CI/Azure/scripts/mac_build_java.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +set -ex + +export ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS=2 + +echo "COREBINARYDIRECTORY: ${COREBINARYDIRECTORY}" + +read -r -d '' CTEST_CACHE << EOM || true +CMAKE_PREFIX_PATH:PATH=${COREBINARYDIRECTORY} +CMAKE_CXX_VISIBILITY_PRESET:STRING=hidden +CMAKE_VISIBILITY_INLINES_HIDDEN:BOOL=ON +CMAKE_OSX_DEPLOYMENT_TARGET=10.9 +SWIG_EXECUTABLE:FILEPATH=${COREBINARYDIRECTORY}/Swig/bin/swig +PYTHON_VIRTUALENV_SCRIPT:FILEPATH=${COREBINARYDIRECTORY}/virtualenv/virtualenv.py +BUILD_EXAMPLES:BOOL=ON +BUILD_TESTING:BOOL=ON +SimpleITK_PYTHON_PLAT_NAME:STRING=macosx-10.9-x86_64 +SimpleITK_BUILD_DISTRIBUTE:BOOL=ON +SimpleITK_PYTHON_WHEEL:BOOL=1 +SimpleITK_BUILD_STRIP:BOOL=1 +EOM + +export CTEST_CACHE +export CTEST_BINARY_DIRECTORY="${AGENT_BUILDDIRECTORY}/Java" + +javac -version + +ctest -D dashboard_source_config_dir="Wrapping/Java" \ + -D "dashboard_track:STRING=Package" \ + -D "CTEST_BUILD_NAME:STRING=${AGENT_NAME}-${AGENT_JOBNAME}-java" \ + -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 2 || echo "##vso[task.logissue type=warning]There was a build or testing issue." + +cmake --build "${CTEST_BINARY_DIRECTORY}" --target dist + + +mkdir -p "${BUILD_ARTIFACTSTAGINGDIRECTORY}/java" +find "${CTEST_BINARY_DIRECTORY}/dist" -name "SimpleITK*.zip" -exec cp -v {} "${BUILD_ARTIFACTSTAGINGDIRECTORY}/java" \; diff --git a/Testing/CI/Azure/templates/package-mac-job.yml b/Testing/CI/Azure/templates/package-mac-job.yml index 28883d27c..e511e8a77 100644 --- a/Testing/CI/Azure/templates/package-mac-job.yml +++ b/Testing/CI/Azure/templates/package-mac-job.yml @@ -73,6 +73,15 @@ jobs: inputs: pathtoPublish: $(Build.ArtifactStagingDirectory)/archives artifactName: Archives + - script: | + bash $(Build.SourcesDirectory)/Testing/CI/Azure/scripts/mac_build_java.sh + displayName: Build Java + continueOnError: true + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/java + artifactName: Java + continueOnError: true - bash: ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/scripts/mac_build_python.sh displayName: Build Python 38 continueOnError: true From 8bb06cc44e5e44100bad30ea1a82b138034f4361 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Mon, 9 Mar 2020 15:40:29 -0400 Subject: [PATCH 398/400] Update AZP mac package image to 10.14 --- Testing/CI/Azure/templates/package-mac-job.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Testing/CI/Azure/templates/package-mac-job.yml b/Testing/CI/Azure/templates/package-mac-job.yml index e511e8a77..cd2c684f7 100644 --- a/Testing/CI/Azure/templates/package-mac-job.yml +++ b/Testing/CI/Azure/templates/package-mac-job.yml @@ -10,7 +10,7 @@ jobs: DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard DASHBOARD_GIT_BRANCH: $[ dependencies.Configure.outputs['configure.BuildHash'] ] pool: - vmImage: 'macos-10.13' + vmImage: 'macos-10.14' steps: - template: ./git-download-steps.yml - task: UsePythonVersion@0 From 3044060b2aa092457cb527bfd729aed25f96603b Mon Sep 17 00:00:00 2001 From: Kasper Marstal Date: Sat, 2 May 2020 14:27:13 +0200 Subject: [PATCH 399/400] ENH: Fix quirks for SimpleITK v2.0rc1 --- CMakeLists.txt | 2 ++ .../include/sitkDualMemberFunctionFactory.hxx | 2 +- Code/Elastix/include/sitkElastixImageFilter.h | 2 ++ .../include/sitkTransformixImageFilter.h | 2 ++ Code/Elastix/src/CMakeLists.txt | 35 ++++++++++++------- Code/Elastix/src/sitkElastixImageFilterImpl.h | 2 +- .../src/sitkTransformixImageFilterImpl.h | 2 +- SuperBuild/External_Elastix.cmake | 3 +- Testing/Unit/sitkElastixFilterTests.cxx | 3 +- Testing/Unit/sitkElastixImageFilterTests.cxx | 20 ----------- .../Unit/sitkTransformixImageFilterTests.cxx | 13 ++++--- 11 files changed, 45 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d67619cc2..e80f43840 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -460,6 +460,8 @@ file( GLOB __files ${CMAKE_SOURCE_DIR}/Code/BasicFilters/include/[^.]*.hxx ${CMAKE_SOURCE_DIR}/Code/Common/include/[^.]*.h ${CMAKE_SOURCE_DIR}/Code/Common/include/[^.]*.hxx + ${CMAKE_SOURCE_DIR}/Code/Elastix/include/[^.]*.h + ${CMAKE_SOURCE_DIR}/Code/Elastix/include/[^.]*.hxx ${CMAKE_SOURCE_DIR}/Code/IO/include/[^.]*.h ${CMAKE_SOURCE_DIR}/Code/IO/include/[^.]*.hxx ${CMAKE_SOURCE_DIR}/Code/Registration/include/[^.]*.h diff --git a/Code/Common/include/sitkDualMemberFunctionFactory.hxx b/Code/Common/include/sitkDualMemberFunctionFactory.hxx index a7ab3dfb9..737da95ff 100644 --- a/Code/Common/include/sitkDualMemberFunctionFactory.hxx +++ b/Code/Common/include/sitkDualMemberFunctionFactory.hxx @@ -98,7 +98,7 @@ DualMemberFunctionFactory< TMemberFunctionPointer > assert( pixelID1 >= 0 && pixelID1 < typelist::Length< InstantiatedPixelIDTypeList >::Result ); assert( pixelID2 >= 0 && pixelID2 < typelist::Length< InstantiatedPixelIDTypeList >::Result ); - static_assert( TImageType1::ImageDimension == 2 || TImageType1::ImageDimension == 3, + static_assert( TImageType1::ImageDimension == 2 || TImageType1::ImageDimension == 3 || TImageType1::ImageDimension == 4, "Image Dimension out of range" ); static_assert( int(TImageType1::ImageDimension) == int(TImageType2::ImageDimension), "Image Dimensions do not match" ); diff --git a/Code/Elastix/include/sitkElastixImageFilter.h b/Code/Elastix/include/sitkElastixImageFilter.h index 4ab41a24a..74f2d8ea4 100644 --- a/Code/Elastix/include/sitkElastixImageFilter.h +++ b/Code/Elastix/include/sitkElastixImageFilter.h @@ -1,6 +1,8 @@ #ifndef __sitkelastiximagefilter_h_ #define __sitkelastiximagefilter_h_ +#include + #include "sitkCommon.h" #include "sitkImage.h" diff --git a/Code/Elastix/include/sitkTransformixImageFilter.h b/Code/Elastix/include/sitkTransformixImageFilter.h index 1f7820d7a..97a404b2c 100644 --- a/Code/Elastix/include/sitkTransformixImageFilter.h +++ b/Code/Elastix/include/sitkTransformixImageFilter.h @@ -1,6 +1,8 @@ #ifndef __sitktransformiximagefilter_h_ #define __sitktransformiximagefilter_h_ +#include + #include "sitkCommon.h" #include "sitkImage.h" diff --git a/Code/Elastix/src/CMakeLists.txt b/Code/Elastix/src/CMakeLists.txt index 890450748..448e1b54d 100644 --- a/Code/Elastix/src/CMakeLists.txt +++ b/Code/Elastix/src/CMakeLists.txt @@ -3,22 +3,33 @@ include( ${ITK_USE_FILE} ) add_library( ElastixImageFilter sitkElastixImageFilter.cxx sitkElastixImageFilterImpl.h sitkElastixImageFilterImpl.cxx ) set_target_properties( ElastixImageFilter PROPERTIES SKIP_BUILD_RPATH TRUE ) -target_include_directories( ElastixImageFilter PUBLIC - $ - $ - $ - $ - $ ) +target_include_directories( ElastixImageFilter + PUBLIC + $ + $ + $ + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} ) target_link_libraries( ElastixImageFilter PRIVATE elastix ) +target_compile_options( ElastixImageFilter PUBLIC ${SimpleITK_PUBLIC_COMPILE_OPTIONS} PRIVATE ${SimpleITK_PRIVATE_COMPILE_OPTIONS} ) +target_compile_features( ElastixImageFilter PUBLIC cxx_std_11 ) sitk_install_exported_target( ElastixImageFilter ) + add_library( TransformixImageFilter sitkTransformixImageFilter.cxx sitkTransformixImageFilterImpl.h sitkTransformixImageFilterImpl.cxx ) set_target_properties( TransformixImageFilter PROPERTIES SKIP_BUILD_RPATH TRUE ) -target_include_directories( TransformixImageFilter PUBLIC - $ - $ - $ - $ - $ ) +target_include_directories( TransformixImageFilter + PUBLIC + $ + $ + $ + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} ) target_link_libraries( TransformixImageFilter PRIVATE transformix ) +target_compile_options( TransformixImageFilter PUBLIC ${SimpleITK_PUBLIC_COMPILE_OPTIONS} PRIVATE ${SimpleITK_PRIVATE_COMPILE_OPTIONS} ) +target_compile_features( TransformixImageFilter PUBLIC cxx_std_11 ) sitk_install_exported_target( TransformixImageFilter ) diff --git a/Code/Elastix/src/sitkElastixImageFilterImpl.h b/Code/Elastix/src/sitkElastixImageFilterImpl.h index bd4fb96d9..f0dc5bf5c 100644 --- a/Code/Elastix/src/sitkElastixImageFilterImpl.h +++ b/Code/Elastix/src/sitkElastixImageFilterImpl.h @@ -145,7 +145,7 @@ class ElastixImageFilter::ElastixImageFilterImpl typedef Image ( Self::*MemberFunctionType )( void ); template< class TFixedImage, class TMovingImage > Image DualExecuteInternal( void ); friend struct detail::DualExecuteInternalAddressor< MemberFunctionType >; - nsstd::auto_ptr< detail::DualMemberFunctionFactory< MemberFunctionType > > m_DualMemberFactory; + std::unique_ptr< detail::DualMemberFunctionFactory< MemberFunctionType > > m_DualMemberFactory; VectorOfImage m_FixedImages; VectorOfImage m_MovingImages; diff --git a/Code/Elastix/src/sitkTransformixImageFilterImpl.h b/Code/Elastix/src/sitkTransformixImageFilterImpl.h index cf3eac2fd..6fdfe7c3c 100644 --- a/Code/Elastix/src/sitkTransformixImageFilterImpl.h +++ b/Code/Elastix/src/sitkTransformixImageFilterImpl.h @@ -110,7 +110,7 @@ class TransformixImageFilter::TransformixImageFilterImpl typedef Image ( Self::*MemberFunctionType )(); template< class TMovingImage > Image ExecuteInternal(); friend struct detail::MemberFunctionAddressor< MemberFunctionType >; - nsstd::auto_ptr< detail::MemberFunctionFactory< MemberFunctionType > > m_MemberFactory; + std::unique_ptr< detail::MemberFunctionFactory< MemberFunctionType > > m_MemberFactory; Image m_MovingImage; Image m_ResultImage; diff --git a/SuperBuild/External_Elastix.cmake b/SuperBuild/External_Elastix.cmake index b51673aa2..88d910929 100644 --- a/SuperBuild/External_Elastix.cmake +++ b/SuperBuild/External_Elastix.cmake @@ -2,7 +2,7 @@ set( proj Elastix ) file( WRITE "${CMAKE_CURRENT_BINARY_DIR}/${proj}-build/CMakeCacheInit.txt" "${ep_common_cache}" ) set( ELASTIX_GIT_REPOSITORY ${git_protocol}://github.com/SuperElastix/elastix ) -set( ELASTIX_GIT_TAG 33b41a2747cbd83db0aca9f18032d49a93395f8a ) +set( ELASTIX_GIT_TAG 43c824295696e17fb9968fa2f4afb8ab72d892b8 ) ExternalProject_Add( ${proj} GIT_REPOSITORY ${ELASTIX_GIT_REPOSITORY} @@ -108,6 +108,7 @@ ExternalProject_Add( ${proj} -DUSE_ViolaWellsMutualInformationMetric:BOOL=OFF -DUSE_WeightedCombinationTransformElastix:BOOL=ON DEPENDS ${${CMAKE_PROJECT_NAME}_DEPENDENCIES} + BUILD_ALWAYS 0 ) ExternalProject_Get_Property( Elastix BINARY_DIR ) diff --git a/Testing/Unit/sitkElastixFilterTests.cxx b/Testing/Unit/sitkElastixFilterTests.cxx index a29812092..545bf2036 100644 --- a/Testing/Unit/sitkElastixFilterTests.cxx +++ b/Testing/Unit/sitkElastixFilterTests.cxx @@ -70,7 +70,7 @@ TEST( ElastixFilterTest, UpdateOnOutputImageDownstreamUpdate ) } /* -TEST( ElastixFilterTest, UpdateOnTransformParametersDownstreamUpdate ) +TEST( ElastixFilterTest, UpdateOnTransformParametersOnDownstreamUpdate ) { ParameterObject::Pointer parameterObject; EXPECT_NO_THROW( parameterObject = ParameterObject::New() ); @@ -317,6 +317,7 @@ TEST( ElastixFilterTest, BSpline4D ) ElastixFilterType::ParameterMapType parameterMap = ParameterObject::GetDefaultParameterMap( "groupwise" ); parameterMap[ "MaximumNumberOfIterations" ] = ElastixFilterType::ParameterValueVectorType( 1, "1" ); + parameterMap[ "FinalGridSpacingInPhysicalUnits", "32.0" ]; ParameterObject::Pointer parameterObject; EXPECT_NO_THROW( parameterObject = ParameterObject::New() ); diff --git a/Testing/Unit/sitkElastixImageFilterTests.cxx b/Testing/Unit/sitkElastixImageFilterTests.cxx index 559c989d8..edccc3b12 100644 --- a/Testing/Unit/sitkElastixImageFilterTests.cxx +++ b/Testing/Unit/sitkElastixImageFilterTests.cxx @@ -168,28 +168,8 @@ TEST( ElastixImageFilter, ProceduralInterface ) EXPECT_NO_THROW( resultImage = Elastix( fixedImage, movingImage, parameterMapVector, false, true, outputDirectory ) ); EXPECT_FALSE( silxIsEmpty( resultImage ) ); - EXPECT_NO_THROW( resultImage = Elastix( fixedImage, movingImage, defaultParameterMapName, fixedMask, movingMask ) ); - EXPECT_FALSE( silxIsEmpty( resultImage ) ); - EXPECT_NO_THROW( resultImage = Elastix( fixedImage, movingImage, defaultParameterMapName, fixedMask, movingMask, true ) ); - EXPECT_FALSE( silxIsEmpty( resultImage ) ); - EXPECT_NO_THROW( resultImage = Elastix( fixedImage, movingImage, defaultParameterMapName, fixedMask, movingMask, false ) ); - EXPECT_FALSE( silxIsEmpty( resultImage ) ); EXPECT_NO_THROW( resultImage = Elastix( fixedImage, movingImage, defaultParameterMapName, fixedMask, movingMask, true, true ) ); EXPECT_FALSE( silxIsEmpty( resultImage ) ); - EXPECT_NO_THROW( resultImage = Elastix( fixedImage, movingImage, defaultParameterMapName, fixedMask, movingMask, false, false ) ); - EXPECT_FALSE( silxIsEmpty( resultImage ) ); - EXPECT_NO_THROW( resultImage = Elastix( fixedImage, movingImage, defaultParameterMapName, fixedMask, movingMask, true, false ) ); - EXPECT_FALSE( silxIsEmpty( resultImage ) ); - EXPECT_NO_THROW( resultImage = Elastix( fixedImage, movingImage, defaultParameterMapName, fixedMask, movingMask, false, true ) ); - EXPECT_FALSE( silxIsEmpty( resultImage ) ); - EXPECT_NO_THROW( resultImage = Elastix( fixedImage, movingImage, defaultParameterMapName, fixedMask, movingMask, true, true, outputDirectory ) ); - EXPECT_FALSE( silxIsEmpty( resultImage ) ); - EXPECT_NO_THROW( resultImage = Elastix( fixedImage, movingImage, defaultParameterMapName, fixedMask, movingMask, false, false, outputDirectory ) ); - EXPECT_FALSE( silxIsEmpty( resultImage ) ); - EXPECT_NO_THROW( resultImage = Elastix( fixedImage, movingImage, defaultParameterMapName, fixedMask, movingMask, true, false, outputDirectory ) ); - EXPECT_FALSE( silxIsEmpty( resultImage ) ); - EXPECT_NO_THROW( resultImage = Elastix( fixedImage, movingImage, defaultParameterMapName, fixedMask, movingMask, false, true, outputDirectory ) ); - EXPECT_FALSE( silxIsEmpty( resultImage ) ); EXPECT_NO_THROW( resultImage = Elastix( fixedImage, movingImage, parameterMap ) ); EXPECT_FALSE( silxIsEmpty( resultImage ) ); diff --git a/Testing/Unit/sitkTransformixImageFilterTests.cxx b/Testing/Unit/sitkTransformixImageFilterTests.cxx index 6d0cccedc..002be4a5d 100644 --- a/Testing/Unit/sitkTransformixImageFilterTests.cxx +++ b/Testing/Unit/sitkTransformixImageFilterTests.cxx @@ -52,6 +52,7 @@ TEST( TransformixImageFilter, ProceduralInterface ) ElastixImageFilter silx; silx.SetFixedImage( fixedImage ); silx.SetMovingImage( movingImage ); + silx.SetParameter( "MaximumNumberOfIterations", "8.0" ); silx.Execute(); std::string outputDirectory = "."; @@ -89,7 +90,7 @@ TEST( TransformixImageFilter, ComputeDeformationField ) ElastixImageFilter silx; silx.SetFixedImage( fixedImage ); silx.SetMovingImage( movingImage ); - silx.SetParameter( "MaximumNumberOfIterations", "1" ); + silx.SetParameter( "MaximumNumberOfIterations", "20" ); silx.Execute(); TransformixImageFilter stfx; @@ -99,9 +100,13 @@ TEST( TransformixImageFilter, ComputeDeformationField ) Image deformationField = stfx.GetDeformationField(); std::vector index; - index.push_back(0); - index.push_back(0); - EXPECT_NO_THROW( deformationField.GetPixelAsVectorFloat32( index ) ); + index.push_back(10); + index.push_back(10); + auto deformationVector = deformationField.GetPixelAsVectorFloat32( index ); + + // Check that deformation field is non-zero + EXPECT_GT( deformationVector[0], 1.0); + EXPECT_GT( deformationVector[1], 1.0); } #ifdef SITK_4D_IMAGES From a7cf5bdde891cb61e79848ad1dbe181c48778317 Mon Sep 17 00:00:00 2001 From: Kasper Marstal Date: Mon, 11 May 2020 21:33:58 +0200 Subject: [PATCH 400/400] Use Azure CI scripts developed for SimpleITK (#373) CI: Use SimpleITK CI scripts CI: Disable Python wrapping for Windows CI (else machine runs out of space) CI: Automated package build for develop (purposefully disabled for master while scripts are being developed) CI: Use Azure VM for Linux instead of local runner (might have to be reverted to get automated backage builds) BUG: Fix getting deformation field from transformix BUG: Fix CastImageFilter when SimpleITK_4D_IMAGES is set to OFF Bug: Don't compile 4D tests when SimpleITK_4D_IMAGES is set to OFF ENH: Update Elastix --- .../include/sitkCastImageFilter.h | 4 +- Code/BasicFilters/src/sitkCastImageFilter.cxx | 2 + .../src/sitkTransformixImageFilterImpl.cxx | 2 +- SuperBuild/External_Elastix.cmake | 2 +- Testing/CI/Azure/azure-pipelines-batch.yml | 167 ------------------ Testing/CI/Azure/azure-pipelines-coverage.yml | 81 --------- Testing/CI/Azure/azure-pipelines-package.yml | 25 +-- Testing/CI/Azure/azure-pipelines.yml | 13 +- Testing/CI/Azure/ci.yml | 124 ------------- Testing/Unit/sitkElastixFilterTests.cxx | 37 ---- Testing/Unit/sitkElastixImageFilterTests.cxx | 20 --- Testing/Unit/sitkTransformixFilterTests.cxx | 4 + .../Distribution/manylinux/imagefiles/cmd.sh | 2 +- 13 files changed, 17 insertions(+), 466 deletions(-) delete mode 100644 Testing/CI/Azure/azure-pipelines-batch.yml delete mode 100644 Testing/CI/Azure/azure-pipelines-coverage.yml delete mode 100644 Testing/CI/Azure/ci.yml diff --git a/Code/BasicFilters/include/sitkCastImageFilter.h b/Code/BasicFilters/include/sitkCastImageFilter.h index 830fc445c..f745624b1 100644 --- a/Code/BasicFilters/include/sitkCastImageFilter.h +++ b/Code/BasicFilters/include/sitkCastImageFilter.h @@ -167,10 +167,12 @@ class SITKBasicFilters_EXPORT CastImageFilter void RegisterMemberFactory3(); void RegisterMemberFactory3v(); void RegisterMemberFactory3l(); +#ifdef SITK_4D_IMAGES void RegisterMemberFactory4(); void RegisterMemberFactory4v(); void RegisterMemberFactory4l(); - /** @} */ +#endif +/** @} */ typedef Image (Self::*MemberFunctionType)( const Image& ); std::unique_ptr > m_DualMemberFactory; diff --git a/Code/BasicFilters/src/sitkCastImageFilter.cxx b/Code/BasicFilters/src/sitkCastImageFilter.cxx index b0415c8fb..fc1f8a702 100644 --- a/Code/BasicFilters/src/sitkCastImageFilter.cxx +++ b/Code/BasicFilters/src/sitkCastImageFilter.cxx @@ -46,9 +46,11 @@ CastImageFilter::CastImageFilter() this->RegisterMemberFactory3(); this->RegisterMemberFactory3v(); this->RegisterMemberFactory3l(); +#ifdef SITK_4D_IMAGES this->RegisterMemberFactory4(); this->RegisterMemberFactory4v(); this->RegisterMemberFactory4l(); +#endif } diff --git a/Code/Elastix/src/sitkTransformixImageFilterImpl.cxx b/Code/Elastix/src/sitkTransformixImageFilterImpl.cxx index 63412b205..2f181aeb1 100644 --- a/Code/Elastix/src/sitkTransformixImageFilterImpl.cxx +++ b/Code/Elastix/src/sitkTransformixImageFilterImpl.cxx @@ -107,7 +107,7 @@ ::ExecuteInternal() } if( this->GetComputeDeformationField() ) { - this->m_DeformationField = Image( itk::simple::GetVectorImageFromImage( transformixFilter->GetOutputDeformationField() ) ); + this->m_DeformationField = Image( itk::simple::GetVectorImageFromImage( transformixFilter->GetOutputDeformationField(), true ) ); this->m_DeformationField.MakeUnique(); } } diff --git a/SuperBuild/External_Elastix.cmake b/SuperBuild/External_Elastix.cmake index 88d910929..be8344e86 100644 --- a/SuperBuild/External_Elastix.cmake +++ b/SuperBuild/External_Elastix.cmake @@ -2,7 +2,7 @@ set( proj Elastix ) file( WRITE "${CMAKE_CURRENT_BINARY_DIR}/${proj}-build/CMakeCacheInit.txt" "${ep_common_cache}" ) set( ELASTIX_GIT_REPOSITORY ${git_protocol}://github.com/SuperElastix/elastix ) -set( ELASTIX_GIT_TAG 43c824295696e17fb9968fa2f4afb8ab72d892b8 ) +set( ELASTIX_GIT_TAG dac2d85541132acaf7b48a8d3ec55c8b57b3ee75 ) ExternalProject_Add( ${proj} GIT_REPOSITORY ${ELASTIX_GIT_REPOSITORY} diff --git a/Testing/CI/Azure/azure-pipelines-batch.yml b/Testing/CI/Azure/azure-pipelines-batch.yml deleted file mode 100644 index b7a8d6526..000000000 --- a/Testing/CI/Azure/azure-pipelines-batch.yml +++ /dev/null @@ -1,167 +0,0 @@ -trigger: - - master - - release -variables: - ExternalDataVersion: 1.2.0 - ctest.cache_extra: '' -pr: none -jobs: - - job: VisualStudio - timeoutInMinutes: 0 - strategy: - maxParallel: 1 - matrix: - v141-64: - CTEST_CMAKE_GENERATOR_TOOLSET: v141 - CTEST_CMAKE_GENERATOR_PLATFORM: x64 - CTEST_CONFIGURATION_TYPE: Release - CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017" - imageName: 'vs2017-win2016' - v142-64: - CTEST_CMAKE_GENERATOR_TOOLSET: v142 - CTEST_CMAKE_GENERATOR_PLATFORM: x64 - CTEST_CONFIGURATION_TYPE: Release - CTEST_CMAKE_GENERATOR: "Visual Studio 16 2019" - imageName: 'windows-2019' - v140-64: - CTEST_CMAKE_GENERATOR_TOOLSET: v140 - CTEST_CMAKE_GENERATOR_PLATFORM: x64 - CTEST_CONFIGURATION_TYPE: MinSizeRel - CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017" - imageName: 'vs2017-win2016' - v140-32: - CTEST_CMAKE_GENERATOR_TOOLSET: v140 - CTEST_CMAKE_GENERATOR_PLATFORM: Win32 - CTEST_CONFIGURATION_TYPE: MinSizeRel - CTEST_CMAKE_GENERATOR: "Visual Studio 15 2017" - imageName: 'vs2017-win2016' - - pool: - vmImage: $(imageName) - - steps: - - template: templates/git-download-steps.yml - - script: | - cmake --version - ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V - displayName: Build and test - workingDirectory: $(Agent.BuildDirectory) - env: - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - CXXFLAGS: /MP - CFLAGS: /MP - - - job: macOS - timeoutInMinutes: 0 - strategy: - maxParallel: 1 - matrix: - XCode_11: - imageName: 'macos-10.14' - xcodeVersion: 11.1 - XCode_10: - imageName: 'macos-10.14' - xcodeVersion: 10.2 - XCode_9_4: - imageName: 'macos-10.14' - xcodeVersion: 9.4.1 - pool: - vmImage: $(imageName) - - steps: - - template: templates/git-download-steps.yml - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '3.6' - architecture: 'x64' - addToPath: true - - script: | - python --version - sudo python -m pip install setuptools numpy - sudo python -m pip install ninja scikit-ci-addons - displayName: 'Install ninja dependency' - - bash: | - set -x - xcode-select -p - sudo xcode-select -s /Applications/Xcode_$(xcodeVersion).app/Contents/Developer/ - xcode-select -p - c++ --version - cmake --version - ninja --version - ctest -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake -V -j 2 - displayName: Build and test - env: - CTEST_CONFIGURATION_TYPE: MinSizeRel - CTEST_OUTPUT_ON_FAILURE: 1 - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2 - CTEST_CACHE: | - BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=ON - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_TESTING:BOOL=ON - WRAP_DEFAULT:BOOL=OFF - WRAP_PYTHON:BOOL=ON - WRAP_JAVA:BOOL=ON - workingDirectory: $(Agent.BuildDirectory) - - script: | - ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml - condition: succeededOrFailed() - displayName: 'Format CTest output in JUnit format' - - task: PublishTestResults@2 - inputs: - testResultsFiles: "$(Agent.BuildDirectory)/JUnitTestResults.xml" - testRunTitle: 'CTest $(Agent.OS)' - condition: succeededOrFailed() - displayName: 'Publish test results' - - - job: 'LinuxGCC' - timeoutInMinutes: 360 - pool: - name: 'Default' - demands: - - Agent.OS -equals Linux - strategy: - maxParallel: 3 - matrix: - default: {} - ITK-master: - ctest.cache_extra: | - ITK_GIT_TAG:STRING=master - CMAKE_CXX_STANDARD:STRING=11 - devtools-3: - env_file: '/opt/rh/devtoolset-3/enable' - devtools-4: - env_file: '/opt/rh/devtoolset-4/enable' - devtools-6: - env_file: '/opt/rh/devtoolset-6/enable' - devtools-7: - env_file: '/opt/rh/devtoolset-7/enable' - devtools-8: - env_file: '/opt/rh/devtoolset-8/enable' - workspace: - clean: all - steps: - - template: templates/git-download-steps.yml - - script: | - [[ ! -z "$(env_file)" ]] && source $(env_file) - cmake --version - gcc --version - ccache -p - ctest -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V - ccache --show-stats - displayName: Build and test - env: - CTEST_OUTPUT_ON_FAILURE: 1 - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - CTEST_CACHE: | - BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=ON - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_TESTING:BOOL=ON - WRAP_DEFAULT:BOOL=ON - CMAKE_CXX_COMPILER_LAUNCHER=/usr/bin/ccache - CMAKE_C_COMPILER_LAUNCHER=/usr/bin/ccache - $(ctest.cache_extra) - workingDirectory: $(Agent.BuildDirectory) diff --git a/Testing/CI/Azure/azure-pipelines-coverage.yml b/Testing/CI/Azure/azure-pipelines-coverage.yml deleted file mode 100644 index 7a92ae93f..000000000 --- a/Testing/CI/Azure/azure-pipelines-coverage.yml +++ /dev/null @@ -1,81 +0,0 @@ -# Nightly Coverage - -trigger: - branches: - exclude: - - "*" -pr: none - -variables: - ExternalDataVersion: 1.2.0 -jobs: - - job: LinuxCoverage - timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 - pool: - name: 'Default' - demands: - - Agent.OS -equals Linux - workspace: - clean: all - steps: - - template: templates/git-download-steps.yml - - bash: | - ctest -D "dashboard_track:STRING=Nightly" -S ${BUILD_SOURCESDIRECTORY}/Testing/CI/Azure/azure.cmake - displayName: Build and test with coverage - env: - CCACHE_DISABLE: 1 - CTEST_CONFIGURATION_TYPE: Debug - CTEST_OUTPUT_ON_FAILURE: 1 - CTEST_COVERAGE_COMMAND: /usr/bin/gcov - CTEST_CACHE: | - BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=OFF - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_TESTING:BOOL=ON - CMAKE_JOB_POOLS:STRING=link=1 - CMAKE_JOB_POOL_LINK:STRING=link - CMAKE_CXX_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage - CMAKE_C_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage - CMAKE_EXE_LINKER_FLAGS:STRING=-g -O0 -fprofile-arcs -ftest-coverage - COVERAGE_COMMAND:PATH=/usr/bin/gcov - SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF - WRAP_DEFAULT:BOOL=OFF - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - DASHBOARD_DO_COVERAGE: 1 - ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 1 - workingDirectory: $(Agent.BuildDirectory) - - job: 'LinuxValgrind' - timeoutInMinutes: 0 - cancelTimeoutInMinutes: 300 - pool: - name: 'Default' - demands: - - Agent.OS -equals Linux - workspace: - clean: all - steps: - - template: templates/git-download-steps.yml - - script: | - [[ ! -z "$(env_file)" ]] && source $(env_file) - cmake --version - gcc --version - ccache -p - ctest -D "dashboard_track:STRING=Nightly" -S "$(Build.SourcesDirectory)/Testing/CI/Azure/azure.cmake" -V - displayName: Build and test - env: - CCACHE_DISABLE: 1 - DASHBOARD_BRANCH_DIRECTORY: $(Agent.BuildDirectory)/SimpleITK-dashboard - DASHBOARD_DO_MEMCHECK: 1 - CTEST_MEMORYCHECK_COMMAND: "/usr/bin/valgrind" - CTEST_MEMORYCHECK_COMMAND_OPTIONS: "--trace-children=yes --quiet --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=50 --verbose --demangle=yes --gen-suppressions=all --child-silent-after-fork=yes" - CTEST_OUTPUT_ON_FAILURE: 1 - CTEST_TEST_TIMEOUT: 10000 - CTEST_CONFIGURATION_TYPE: Debug - CTEST_CACHE: | - BUILD_SHARED_LIBS:BOOL=ON - SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF - WRAP_DEFAULT:BOOL=OFF - BUILD_EXAMPLES:BOOL=ON - BUILD_SHARED_LIBS:BOOL=OFF - workingDirectory: $(Agent.BuildDirectory) diff --git a/Testing/CI/Azure/azure-pipelines-package.yml b/Testing/CI/Azure/azure-pipelines-package.yml index 7eb3f168b..5de3bae6b 100644 --- a/Testing/CI/Azure/azure-pipelines-package.yml +++ b/Testing/CI/Azure/azure-pipelines-package.yml @@ -12,7 +12,7 @@ schedules: displayName: Daily build branches: include: - - master + - develop always: false variables: @@ -36,26 +36,3 @@ jobs: PYTHON_ARCH: x64 CMAKE_PLATFORM: x64 VCVAR_OPTIONS: amd64 - - job: Doxygen - dependsOn: Configure - condition: ne( variables['configure.doxygen'], 'true' ) - timeoutInMinutes: 60 - variables: - SIMPLEITK_GIT_TAG: $[ dependencies.Configure.outputs['configure.BuildHash'] ] - steps: - - template: templates/git-download-steps.yml - - bash: | - cd ${BUILD_SOURCESDIRECTORY}/Utilities/Doxygen/docker - docker build -f Dockerfile -t simpleitk-doxygen . - displayName: Build Docker Image - - bash: | - docker run \ - --mount type=bind,source=${BUILD_SOURCESDIRECTORY},destination=/work/SimpleITK,readonly \ - --name sitk-dox simpleitk-doxygen - mkdir -p $(Build.ArtifactStagingDirectory)/Doxygen - docker cp sitk-dox:/SimpleITKDoxygen.tar.gz $(Build.ArtifactStagingDirectory)/Doxygen/SimpleITKDoxygen-${SIMPLEITK_GIT_TAG}.tar.gz - displayName: Docker doxygen generation - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: $(Build.ArtifactStagingDirectory)/Doxygen - artifactName: Doxygen diff --git a/Testing/CI/Azure/azure-pipelines.yml b/Testing/CI/Azure/azure-pipelines.yml index ccc57d100..63ac7a8de 100644 --- a/Testing/CI/Azure/azure-pipelines.yml +++ b/Testing/CI/Azure/azure-pipelines.yml @@ -1,19 +1,13 @@ # These pipelines are executed on every PR, and merge. They should provide quick # coverage for the common wrapped language and the SimpleITK core and examples. -trigger: - - master - - next - - release variables: ExternalDataVersion: 1.2.0 jobs: - job: Linux timeoutInMinutes: 0 pool: - name: 'Default' - demands: - - Agent.OS -equals Linux + vmImage: 'ubuntu-16.04' variables: PYTHONUSERBASE: $(Agent.BuildDirectory)/.pypkgs workspace: @@ -27,6 +21,7 @@ jobs: python -m pip install --upgrade --user pip python -m pip install --user setuptools python -m pip install --user numpy scikit-ci-addons + sudo apt install ninja-build displayName: 'Install python tools and dependency' - bash: | set -x @@ -148,12 +143,12 @@ jobs: CFLAGS: /MP CTEST_CACHE: | BUILD_DOCUMENTS:BOOL=OFF - BUILD_EXAMPLES:BOOL=ON + BUILD_EXAMPLES:BOOL=OFF BUILD_SHARED_LIBS:BOOL=OFF BUILD_TESTING:BOOL=ON WRAP_DEFAULT:BOOL=OFF WRAP_CSHARP:BOOL=OFF - WRAP_PYTHON:BOOL=ON + WRAP_PYTHON:BOOL=OFF workingDirectory: $(Agent.BuildDirectory) - script: | python -m ci_addons ctest_junit_formatter $(Build.SourcesDirectory)-build > $(Agent.BuildDirectory)/JUnitTestResults.xml diff --git a/Testing/CI/Azure/ci.yml b/Testing/CI/Azure/ci.yml deleted file mode 100644 index 0650c52c1..000000000 --- a/Testing/CI/Azure/ci.yml +++ /dev/null @@ -1,124 +0,0 @@ -variables: - PreferredToolArchitecture: x64 - -jobs: -- job: Windows - timeoutInMinutes: 0 - pool: - vmImage: 'vs2017-win2016' - strategy: - matrix: - Python27: - python.version: '2.7' - Python36: - python.version: '3.6' - Python37: - python.version: '3.7' - steps: - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '$(python.version)' - architecture: 'x64' - addToPath: true - - script: python -m pip install numpy - displayName: 'Install Python dependencies' - - task: UseRubyVersion@0 - displayName: Enable Ruby - inputs: - addToPath: true - - task: DotNetCoreInstaller@0 - displayName: Enable C# - inputs: - version: '2.1.300' - - task: CMake@1 - displayName: 'CMake Generate' - inputs: - cmakeArgs: -G "Visual Studio 15 2017 Win64" -T host=x64 ../SuperBuild - - task: CMake@1 - displayName: 'CMake Build' - inputs: - cmakeArgs: --build . --config Release -j 1 - - script: | - rm -fr build/ITK-build - rm -fr build/Elastix-build - displayName: Free space on device - - script: ctest -C Release -VV -j 2 -E Python.Test.ConcurrentImageRead - displayName: 'CTest' - workingDirectory: build/SimpleITK-build -- job: Linux - timeoutInMinutes: 0 - pool: - vmImage: 'ubuntu-16.04' - strategy: - matrix: - Python27: - python.version: '2.7' - Python36: - python.version: '3.6' - Python37: - python.version: '3.7' - steps: - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '$(python.version)' - architecture: 'x64' - addToPath: true - - script: python -m pip install numpy - displayName: 'Install Python dependencies' - - task: UseRubyVersion@0 - displayName: Enable Ruby - inputs: - addToPath: true - - task: DotNetCoreInstaller@0 - displayName: Enable C# - inputs: - version: '2.1.300' - - task: CMake@1 - displayName: 'CMake Generate' - inputs: - cmakeArgs: ../SuperBuild - - task: CMake@1 - displayName: 'CMake Build' - inputs: - cmakeArgs: --build . --config Release -j 1 - - script: ctest -C Release -VV -j 2 -E Python.Test.ConcurrentImageRead - displayName: 'CTest' - workingDirectory: build/SimpleITK-build -- job: macOS - timeoutInMinutes: 0 - pool: - vmImage: 'macOS-10.13' - strategy: - matrix: - Python27: - python.version: '2.7' - Python36: - python.version: '3.6' - Python37: - python.version: '3.7' - steps: - - task: UsePythonVersion@0 - displayName: Enable Python - inputs: - versionSpec: '$(python.version)' - architecture: 'x64' - addToPath: true - - script: python -m pip install numpy - displayName: 'Install Python dependencies' - - task: DotNetCoreInstaller@0 - displayName: Enable C# - inputs: - version: '2.1.300' - - task: CMake@1 - displayName: 'CMake Generate' - inputs: - cmakeArgs: -DWRAP_RUBY=FALSE ../SuperBuild - - task: CMake@1 - displayName: 'CMake Build' - inputs: - cmakeArgs: --build . --config Release -j 1 - - script: ctest -C Release -VV -j 2 -E Python.Test.ConcurrentImageRead - displayName: 'CTest' - workingDirectory: build/SimpleITK-build diff --git a/Testing/Unit/sitkElastixFilterTests.cxx b/Testing/Unit/sitkElastixFilterTests.cxx index 545bf2036..8b1197aa4 100644 --- a/Testing/Unit/sitkElastixFilterTests.cxx +++ b/Testing/Unit/sitkElastixFilterTests.cxx @@ -307,40 +307,3 @@ TEST( ElastixFilterTest, BSpline3D ) ParameterObject::Pointer transformParameterObject; EXPECT_NO_THROW( transformParameterObject = elastixFilter->GetTransformParameterObject() ); } - -TEST( ElastixFilterTest, BSpline4D ) -{ - typedef itk::Image< float, 4 > ImageType; - typedef itk::ImageFileReader< ImageType > ImageFileReaderType; - typedef itk::ImageFileWriter< ImageType > ImageFileWriterType; - typedef ElastixFilter< ImageType, ImageType > ElastixFilterType; - - ElastixFilterType::ParameterMapType parameterMap = ParameterObject::GetDefaultParameterMap( "groupwise" ); - parameterMap[ "MaximumNumberOfIterations" ] = ElastixFilterType::ParameterValueVectorType( 1, "1" ); - parameterMap[ "FinalGridSpacingInPhysicalUnits", "32.0" ]; - - ParameterObject::Pointer parameterObject; - EXPECT_NO_THROW( parameterObject = ParameterObject::New() ); - EXPECT_NO_THROW( parameterObject->SetParameterMap( parameterMap ) ); - - ImageFileReaderType::Pointer imageReader1 = ImageFileReaderType::New(); - imageReader1->SetFileName( dataFinder.GetFile( "Input/4D.nii.gz" ) ); - - ImageFileReaderType::Pointer imageReader2 = ImageFileReaderType::New(); - imageReader2->SetFileName( dataFinder.GetFile( "Input/4D.nii.gz" ) ); - - ElastixFilterType::Pointer elastixFilter; - EXPECT_NO_THROW( elastixFilter = ElastixFilterType::New() ); - EXPECT_NO_THROW( elastixFilter->SetFixedImage( imageReader1->GetOutput() ) ); - EXPECT_NO_THROW( elastixFilter->SetMovingImage( imageReader2->GetOutput() ) ); - EXPECT_NO_THROW( elastixFilter->SetParameterObject( parameterObject ) ); - EXPECT_NO_THROW( elastixFilter->Update() ); - - ImageFileWriterType::Pointer writer = ImageFileWriterType::New(); - EXPECT_NO_THROW( writer->SetFileName( dataFinder.GetOutputFile( "BSpline4DResultImage.nii" ) ) ); - EXPECT_NO_THROW( writer->SetInput( elastixFilter->GetOutput() ) ); - EXPECT_NO_THROW( writer->Update() ); - - ParameterObject::Pointer transformParameterObject; - EXPECT_NO_THROW( transformParameterObject = elastixFilter->GetTransformParameterObject() ); -} diff --git a/Testing/Unit/sitkElastixImageFilterTests.cxx b/Testing/Unit/sitkElastixImageFilterTests.cxx index edccc3b12..ff10ad53f 100644 --- a/Testing/Unit/sitkElastixImageFilterTests.cxx +++ b/Testing/Unit/sitkElastixImageFilterTests.cxx @@ -350,25 +350,5 @@ TEST( ElastixImageFilter, SetNumberOfThreads ) EXPECT_NO_THROW( silx.Execute() ); } -#ifdef SITK_4D_IMAGES - -TEST( ElastixImageFilter, Registration4D ) -{ - Image fixedImage = ReadImage( dataFinder.GetFile( "Input/4D.nii.gz" ) ); - Image movingImage = ReadImage( dataFinder.GetFile( "Input/4D.nii.gz" ) ); - Image resultImage; - - ElastixImageFilter silx; - silx.SetParameterMap( "groupwise" ); - silx.SetParameter("MaximumNumberOfIterations", "1"); - silx.SetParameter("FinalGridSpacingInPhysicalUnits", "32.0"); - EXPECT_NO_THROW( silx.SetFixedImage( fixedImage ) ); - EXPECT_NO_THROW( silx.SetMovingImage( movingImage ) ); - EXPECT_NO_THROW( resultImage = silx.Execute() ); - EXPECT_FALSE( silxIsEmpty( resultImage ) ); -} - -#endif // SITK_4D_IMAGES - } // namespace simple } // namesapce itk diff --git a/Testing/Unit/sitkTransformixFilterTests.cxx b/Testing/Unit/sitkTransformixFilterTests.cxx index 7f2fd3e30..72ab0081e 100644 --- a/Testing/Unit/sitkTransformixFilterTests.cxx +++ b/Testing/Unit/sitkTransformixFilterTests.cxx @@ -247,6 +247,8 @@ TEST( TransformixFilterTest, SameTransformParameterMapForMultipleTransformations EXPECT_NO_THROW( transformixFilter->Update() ); } +#ifdef SITK_4D_IMAGES + TEST( TransformixFilterTest, BSpline4D ) { typedef itk::Image< float, 4 > ImageType; @@ -280,3 +282,5 @@ TEST( TransformixFilterTest, BSpline4D ) EXPECT_NO_THROW( writer->SetInput( transformixFilter->GetOutput() ) ); EXPECT_NO_THROW( writer->Update() ); } + +#endif // SITK_4D_IMAGES diff --git a/Utilities/Distribution/manylinux/imagefiles/cmd.sh b/Utilities/Distribution/manylinux/imagefiles/cmd.sh index 7c17b3faa..b634bd1ef 100755 --- a/Utilities/Distribution/manylinux/imagefiles/cmd.sh +++ b/Utilities/Distribution/manylinux/imagefiles/cmd.sh @@ -18,7 +18,7 @@ function build_simpleitk { echo "SIMPLEITK_GIT_TAG: ${SIMPLEITK_GIT_TAG}" - git clone https://github.com/SimpleITK/SimpleITK.git ${SRC_DIR} && + git clone https://github.com/SuperElastix/SimpleElastix.git ${SRC_DIR} && (cd ${SRC_DIR} && git checkout ${SIMPLEITK_GIT_TAG} ) && rm -rf ${BLD_DIR} && mkdir -p ${BLD_DIR} && cd ${BLD_DIR} &&