diff options
Diffstat (limited to 'gnu/packages/image-processing.scm')
-rw-r--r-- | gnu/packages/image-processing.scm | 332 |
1 files changed, 330 insertions, 2 deletions
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm index e708e1366c..460f35dbae 100644 --- a/gnu/packages/image-processing.scm +++ b/gnu/packages/image-processing.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017 John Darrington <jmd@gnu.org> -;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2017, 2019 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org> @@ -36,10 +36,13 @@ #:use-module (gnu packages algebra) #:use-module (gnu packages bison) #:use-module (gnu packages boost) + #:use-module (gnu packages check) #:use-module (gnu packages compression) + #:use-module (gnu packages curl) #:use-module (gnu packages documentation) #:use-module (gnu packages flex) #:use-module (gnu packages fontutils) + #:use-module (gnu packages geo) #:use-module (gnu packages ghostscript) #:use-module (gnu packages gl) #:use-module (gnu packages glib) @@ -58,13 +61,16 @@ #:use-module (gnu packages protobuf) #:use-module (gnu packages python) #:use-module (gnu packages python-xyz) + #:use-module (gnu packages qt) #:use-module (gnu packages serialization) + #:use-module (gnu packages tbb) #:use-module (gnu packages tls) #:use-module (gnu packages video) #:use-module (gnu packages xiph) #:use-module (gnu packages xml) #:use-module (gnu packages xorg) - #:use-module (ice-9 match)) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1)) (define-public dcmtk (package @@ -212,6 +218,22 @@ a suite of 3D interaction widgets, supports parallel processing, and integrates with various databases on GUI toolkits such as Qt and Tk.") (license license:bsd-3))) +;; itksnap needs an older variant of VTK. +(define-public vtk-6 + (package (inherit vtk) + (version "6.3.0") + (source (origin + (method url-fetch) + (uri (string-append "https://vtk.org/files/release/" + (version-major+minor version) + "/VTK-" version ".tar.gz")) + (sha256 + (base32 + "0pla1r5mvkgl4sl213gfdhzrypdgai0h3z5mfgm6p9jz9hsr794j")))) + (inputs + `(("jsoncpp" ,jsoncpp-for-tensorflow) + ,@(alist-delete "jsoncpp" (package-inputs vtk)))))) + (define-public opencv (package (name "opencv") @@ -247,6 +269,10 @@ integrates with various databases on GUI toolkits such as Qt and Tk.") "-DWITH_CAROTENE=OFF" ; only visible on arm/aarch64 "-DENABLE_PRECOMPILED_HEADERS=OFF" + ;; FIXME: OpenEXR requires C++11 or later. Remove this when + ;; the default compiler is GCC 7. + "-DCMAKE_CXX_FLAGS=-std=gnu++11" + ;; CPU-Features: ;; See cmake/OpenCVCompilerOptimizations.cmake ;; (CPU_ALL_OPTIMIZATIONS) for a list of all optimizations @@ -517,3 +543,305 @@ the VIPS image processing library. It's a little like a spreadsheet: you create a set of formula connecting your objects together, and on a change nip2 recalculates.") (license license:gpl2+))) + +(define-public vxl + (package + (name "vxl") + (version "2.0.2") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/vxl/vxl.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0949hw57szq8943f1whwqaz591xjmb19kj803hcv74hdai2b0ycg")) + (modules '((guix build utils))) + ;; TODO: vxl includes an old version of dcmtk. It won't build with + ;; version 3.6.x. + (snippet + '(begin + (for-each delete-file-recursively + '("v3p/bzlib/" + "v3p/geotiff/" + "v3p/jpeg/" + "v3p/png/" + "v3p/tiff/" + "v3p/zlib/")) + (substitute* "v3p/CMakeLists.txt" + (("add_subdirectory\\((tiff|png|jpeg|zlib|bzlib|geotiff)\\)") + "")) + #t)))) + (build-system cmake-build-system) + (inputs + `(("libgeotiff" ,libgeotiff) + ("libtiff" ,libtiff) + ("libjpeg" ,libjpeg) + ("libpng" ,libpng) + ("zlib" ,zlib))) + (home-page "https://github.com/vxl/vxl/") + (synopsis "Collection of C++ libraries for computer vision") + (description "VXL (the Vision-something-Libraries) is a collection of C++ +libraries designed for computer vision research and implementation.") + (license license:bsd-3))) + +(define-public vxl-1 + (package (inherit vxl) + (name "vxl") + (version "1.18.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/vxl/vxl.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1g4mr2cc58jwm0vasscbd4y5380wj3ahkvq121z4gs83fhavvxgz")) + (modules '((guix build utils))) + (snippet + '(begin + (for-each delete-file-recursively + '("v3p/bzlib/" + "v3p/geotiff/" + "v3p/png/" + "v3p/tiff/" + "v3p/zlib/")) + (substitute* "v3p/CMakeLists.txt" + (("add_subdirectory\\((tiff|png|jpeg|zlib|bzlib|geotiff)\\)") + "")) + #t)))) + (arguments + `(#:configure-flags + ;; Needed for itk-snap + (list "-DVNL_CONFIG_LEGACY_METHODS=ON"))))) + +(define-public insight-toolkit + (package + (name "insight-toolkit") + (version "5.0.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/InsightSoftwareConsortium/ITK/" + "releases/download/v" version "/InsightToolkit-" + version ".tar.xz")) + (sha256 + (base32 "0bs63mk4q8jmx38f031jy5w5n9yy5ng9x8ijwinvjyvas8cichqi")))) + (build-system cmake-build-system) + (arguments + `(#:tests? #f ; tests require network access and external data + #:configure-flags + '("-DITK_USE_GPU=ON" + "-DITK_USE_SYSTEM_LIBRARIES=ON" + "-DITK_USE_SYSTEM_GOOGLETEST=ON" + "-DITK_BUILD_SHARED=ON" + ;; This prevents "GTest::GTest" from being added to the ITK_LIBRARIES + ;; variable in the installed CMake files. This is necessary as other + ;; packages using insight-toolkit could not be configured otherwise. + "-DGTEST_ROOT=gtest") + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'do-not-tune + (lambda _ + (substitute* "CMake/ITKSetStandardCompilerFlags.cmake" + (("-mute=native") "")) + #t))))) + (inputs + `(("eigen" ,eigen) + ("expat" ,expat) + ("fftw" ,fftw) + ("fftwf" ,fftwf) + ("hdf5" ,hdf5) + ("libjpeg" ,libjpeg) + ("libpng" ,libpng) + ("libtiff" ,libtiff) + ("mesa" ,mesa-opencl) + ("perl" ,perl) + ("python" ,python) + ("tbb" ,tbb) + ("vxl" ,vxl-1) + ("zlib" ,zlib))) + (native-inputs + `(("googletest" ,googletest) + ("pkg-config" ,pkg-config))) + (home-page "https://github.com/InsightSoftwareConsortium/ITK/") + (synopsis "Scientific image processing, segmentation and registration") + (description "The Insight Toolkit (ITK) is a toolkit for N-dimensional +scientific image processing, segmentation, and registration. Segmentation is +the process of identifying and classifying data found in a digitally sampled +representation. Typically the sampled representation is an image acquired +from such medical instrumentation as CT or MRI scanners. Registration is the +task of aligning or developing correspondences between data. For example, in +the medical environment, a CT scan may be aligned with a MRI scan in order to +combine the information contained in both.") + (license license:asl2.0))) + +(define-public insight-toolkit-4 + (package (inherit insight-toolkit) + (version "4.13.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/InsightSoftwareConsortium/ITK/" + "releases/download/v" version "/InsightToolkit-" + version ".tar.xz")) + (sha256 + (base32 "19cgfpd63gqrvc3m27m394gy2d7w79g5y6lvznb5qqr49lihbgns")))) + (arguments + `(#:tests? #f ; tests require network access and external data + #:configure-flags + '("-DITKV3_COMPATIBILITY=ON" ; needed for itk-snap + "-DITK_USE_GPU=ON" + "-DITK_USE_SYSTEM_LIBRARIES=ON" + "-DITK_USE_SYSTEM_GOOGLETEST=ON" + "-DITK_USE_SYSTEM_VXL=ON"))))) + +(define-public insight-toolkit-4.12 + (package (inherit insight-toolkit-4) + (version "4.12.2") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/itk/itk/4.12/" + "InsightToolkit-" version ".tar.xz")) + (sha256 + (base32 "1qw9mxbh083siljygahl4gdfv91xvfd8hfl7ghwii19f60xrvn2w")))))) + +(define-public itk-snap + (package + (name "itk-snap") + (version "3.8.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://git.code.sf.net/p/itk-snap/src") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "15i5ixpryfrbf3vrrb5rici8fb585f25k0v1ljds16bp1f1msr4q")))) + (build-system cmake-build-system) + (arguments + `(#:configure-flags + (list "-DSNAP_VERSION_GIT_SHA1=release" + "-DSNAP_VERSION_GIT_BRANCH=release" + "-DSNAP_VERSION_GIT_TIMESTAMP=0" + "-DSNAP_PACKAGE_QT_PLUGINS=OFF" + "-DCMAKE_POSITION_INDEPENDENT_CODE=ON" + "-DCMAKE_CXX_FLAGS=-std=gnu++11 -fpermissive") + #:phases + (modify-phases %standard-phases + ;; During the installation phase all libraries provided by all + ;; dependencies will be copied to the lib directory. That's insane, + ;; so we disable this. + (add-after 'unpack 'do-not-copy-dependencies + (lambda _ + (substitute* "CMakeLists.txt" + (("install_qt5_executable\ +\\(\\$\\{SNAP_MAIN_INSTALL_DIR\\}/\\$\\{SNAP_EXE\\}\\)") + "")) + #t)) + (add-after 'unpack 'disable-gui-tests + (lambda _ + ;; The GUI tests just time out. + (substitute* "CMakeLists.txt" + ((" (Workspace|DiffSpace|ProbeIntensity|RegionCompetition\ +|RandomForest|RandomForestBailOut)") + "")) + #t)) + (add-after 'unpack 'make-reproducible + (lambda _ + (substitute* "CMakeLists.txt" + (("TODAY\\(SNAP_VERSION_COMPILE_DATE\\)") + "SET(SNAP_VERSION_COMPILE_DATE \"(removed for reproducibility)\")")) + #t)) + (add-after 'unpack 'prepare-submodules + (lambda* (#:key inputs #:allow-other-keys) + (rmdir "Submodules/c3d") + (copy-recursively (assoc-ref inputs "c3d-src") + "Submodules/c3d") + (substitute* '("Submodules/c3d/adapters/BiasFieldCorrectionN4.cxx" + "Submodules/c3d/adapters/ApplyMetric.cxx") + (("vcl_") "std::")) + (rmdir "Submodules/greedy") + (symlink (assoc-ref inputs "greedy-src") + "Submodules/greedy") + #t)) + (add-after 'unpack 'fix-includes + (lambda _ + (substitute* "GUI/Model/RegistrationModel.cxx" + (("<vnl_symmetric_eigensystem.h>") + "<vnl/algo/vnl_symmetric_eigensystem.h>")) + #t)) + (add-before 'check 'prepare-tests + (lambda _ + ;; Needed by at least one test. + (setenv "HOME" "/tmp") + #t)) + (add-after 'install 'wrap-executable + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (wrap-program (string-append out "/bin/itksnap") + `("QT_PLUGIN_PATH" ":" prefix + ,(map (lambda (label) + (string-append (assoc-ref inputs label) + "/lib/qt5/plugins")) + '("qtbase" "qtdeclarative")))) + #t)))))) + (inputs + `(("curl" ,curl) + ("fftw" ,fftw) + ("fftwf" ,fftwf) + ("glu" ,glu) + ("hdf5" ,hdf5) + ("mesa" ,mesa-opencl) + ;; This package does not build with either insight-toolkit 5.0.0 and + ;; not with 4.13. It really needs to be 4.12. + ("itk" ,insight-toolkit-4.12) + ("vtk" ,vtk-6) + ("qtbase" ,qtbase) + ("qtdeclarative" ,qtdeclarative) + ("qttools" ,qttools) + ("vxl" ,vxl-1) + ("zlib" ,zlib))) + (native-inputs + `(("googletest" ,googletest) + ("pkg-config" ,pkg-config) + ("c3d-src" + ,(let* ((commit "f521358db26e00002c911cc47bf463b043942ad3") + (revision "1") + (version (git-version "0" revision commit))) + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/pyushkevich/c3d.git") + (commit commit))) + (file-name (git-file-name "c3d" version)) + (sha256 + (base32 + "0kyv3rxrxwr8c3sa9zv01lsnhk95b27gx1s870k3yi8qp52h7bx3"))))) + ;; We are using an arbitrary commit from 2017 because the latest + ;; version breaks the build... + ("greedy-src" + ,(let* ((commit "97e340f7e8e66597599144947775e6039e79a0d3") + (revision "1") + (version (git-version "0" revision commit))) + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/pyushkevich/greedy.git") + (commit commit))) + (file-name (git-file-name "greedy" version)) + (sha256 + (base32 + "0k5bc9za4jrc8z9dj08z1rkcp5xf0gnd1d2jmi1w9ny4vxh2q2ab"))))))) + (home-page "https://sourceforge.net/p/itk-snap/") + (synopsis "Medical image segmentation") + (description "ITK-SNAP is a tool for segmenting anatomical structures in +medical images. It provides an automatic active contour segmentation +pipeline, along with supporting a manual segmentation toolbox. ITK-SNAP has a +full-featured UI aimed at clinical researchers.") + ;; This includes the submodules greedy and c3d. + (license license:gpl3+))) |