From 373a75ae87a7b31926db820c2510dbb1b1109842 Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 1 Aug 2018 15:23:50 +0200 Subject: [PATCH] Ajout prototype Wrapper ROS matcher --- ASIFT_tests/demo_ASIFT_src/ASIFT_matcher.hpp | 5 + .../demo_ASIFT_src/CMakeFiles/Makefile.cmake | 4 - .../CMakeFiles/demo_ASIFT.dir/C.includecache | 78 + .../demo_ASIFT.dir/CXX.includecache | 140 - .../demo_ASIFT.dir/DependInfo.cmake | 1 - .../compute_asift_keypoints.cpp.o | Bin 35592 -> 0 bytes .../compute_asift_matches.cpp.o | Bin 95352 -> 0 bytes .../demo_ASIFT.dir/demo_ASIFT.cpp.o | Bin 32768 -> 0 bytes .../demo_ASIFT.dir/demo_lib_sift.cpp.o | Bin 48624 -> 0 bytes .../CMakeFiles/demo_ASIFT.dir/filter.cpp.o | Bin 25552 -> 0 bytes .../CMakeFiles/demo_ASIFT.dir/flags.make | 4 +- .../CMakeFiles/demo_ASIFT.dir/flimage.cpp.o | Bin 6704 -> 0 bytes .../CMakeFiles/demo_ASIFT.dir/fproj.cpp.o | Bin 10568 -> 0 bytes .../CMakeFiles/demo_ASIFT.dir/frot.cpp.o | Bin 4560 -> 0 bytes .../demo_ASIFT.dir/io_png/io_png.c.o | Bin 9944 -> 0 bytes .../CMakeFiles/demo_ASIFT.dir/library.cpp.o | Bin 38728 -> 0 bytes .../CMakeFiles/demo_ASIFT.dir/numerics1.cpp.o | Bin 12328 -> 0 bytes .../CMakeFiles/demo_ASIFT.dir/orsa.cpp.o | Bin 207520 -> 0 bytes .../CMakeFiles/demo_ASIFT.dir/splines.cpp.o | Bin 16928 -> 0 bytes .../test_ASIFT.dir/ASIFT_matcher.cpp.o | Bin 1483880 -> 0 bytes .../test_ASIFT.dir/CXX.includecache | 350 - .../test_ASIFT.dir/DependInfo.cmake | 1 - .../compute_asift_keypoints.cpp.o | Bin 35592 -> 0 bytes .../compute_asift_matches.cpp.o | Bin 95352 -> 0 bytes .../test_ASIFT.dir/demo_lib_sift.cpp.o | Bin 48624 -> 0 bytes .../CMakeFiles/test_ASIFT.dir/filter.cpp.o | Bin 25552 -> 0 bytes .../CMakeFiles/test_ASIFT.dir/flags.make | 4 +- .../CMakeFiles/test_ASIFT.dir/flimage.cpp.o | Bin 6704 -> 0 bytes .../CMakeFiles/test_ASIFT.dir/fproj.cpp.o | Bin 10568 -> 0 bytes .../CMakeFiles/test_ASIFT.dir/frot.cpp.o | Bin 4560 -> 0 bytes .../test_ASIFT.dir/io_png/io_png.c.o | Bin 9944 -> 0 bytes .../CMakeFiles/test_ASIFT.dir/library.cpp.o | Bin 38728 -> 0 bytes .../CMakeFiles/test_ASIFT.dir/numerics1.cpp.o | Bin 12328 -> 0 bytes .../CMakeFiles/test_ASIFT.dir/orsa.cpp.o | Bin 207520 -> 0 bytes .../CMakeFiles/test_ASIFT.dir/splines.cpp.o | Bin 16928 -> 0 bytes .../test_ASIFT.dir/test_ASIFT.cpp.o | Bin 1514824 -> 0 bytes ASIFT_tests/demo_ASIFT_src/CMakeLists.txt | 7 +- ASIFT_tests/demo_ASIFT_src/CMakeLists.txt~ | 9 +- ASIFT_tests/demo_ASIFT_src/demo_ASIFT | Bin 732097 -> 0 bytes .../libs/png/CMakeFiles/png.dir/png.c.o | Bin 13216 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngerror.c.o | Bin 5704 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pnggccrd.c.o | Bin 940 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngget.c.o | Bin 11552 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngmem.c.o | Bin 4656 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngpread.c.o | Bin 27432 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngread.c.o | Bin 27080 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngrio.c.o | Bin 2448 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngrtran.c.o | Bin 58456 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngrutil.c.o | Bin 51080 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngset.c.o | Bin 19880 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngtrans.c.o | Bin 7568 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngvcrd.c.o | Bin 939 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngwio.c.o | Bin 2840 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngwrite.c.o | Bin 23976 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngwtran.c.o | Bin 7040 -> 0 bytes .../libs/png/CMakeFiles/png.dir/pngwutil.c.o | Bin 42232 -> 0 bytes .../demo_ASIFT_src/io_png/libs/png/libpng.a | Bin 316080 -> 0 bytes .../libs/zlib/CMakeFiles/zlib.dir/adler32.c.o | Bin 3240 -> 0 bytes .../zlib/CMakeFiles/zlib.dir/compress.c.o | Bin 2208 -> 0 bytes .../libs/zlib/CMakeFiles/zlib.dir/crc32.c.o | Bin 23304 -> 0 bytes .../libs/zlib/CMakeFiles/zlib.dir/deflate.c.o | Bin 22384 -> 0 bytes .../libs/zlib/CMakeFiles/zlib.dir/gzio.c.o | Bin 15240 -> 0 bytes .../libs/zlib/CMakeFiles/zlib.dir/infback.c.o | Bin 11496 -> 0 bytes .../libs/zlib/CMakeFiles/zlib.dir/inffast.c.o | Bin 3672 -> 0 bytes .../libs/zlib/CMakeFiles/zlib.dir/inflate.c.o | Bin 20416 -> 0 bytes .../zlib/CMakeFiles/zlib.dir/inftrees.c.o | Bin 4104 -> 0 bytes .../zlib/CMakeFiles/zlib.dir/minigzip.c.o | Bin 6888 -> 0 bytes .../libs/zlib/CMakeFiles/zlib.dir/trees.c.o | Bin 22776 -> 0 bytes .../libs/zlib/CMakeFiles/zlib.dir/uncompr.c.o | Bin 1912 -> 0 bytes .../libs/zlib/CMakeFiles/zlib.dir/zutil.c.o | Bin 2624 -> 0 bytes .../demo_ASIFT_src/io_png/libs/zlib/libzlib.a | Bin 142332 -> 0 bytes ASIFT_tests/demo_ASIFT_src/test_ASIFT | Bin 1916405 -> 0 bytes asift_match/CMakeLists.txt | 195 + asift_match/CMakeLists.txt~ | 192 + asift_match/package.xml | 73 + asift_match/package.xml~ | 79 + asift_match/src/ASIFT_matcher.cpp | 717 + asift_match/src/ASIFT_matcher.hpp | 101 + asift_match/src/CImg.h | 60936 ++++++++++++++++ asift_match/src/ROS_matcher.cpp | 57 + asift_match/src/ROS_matcher.hpp | 45 + asift_match/src/ROS_matcher_node.cpp | 12 + .../src/book_training/train_image_000.png | Bin 0 -> 534442 bytes .../src/book_training/train_image_001.png | Bin 0 -> 565124 bytes .../src/book_training/train_image_002.png | Bin 0 -> 495776 bytes .../src/book_training/train_image_003.png | Bin 0 -> 469122 bytes .../src/book_training/train_image_005.yml~ | 8 + .../src/book_training/train_image_006.yml~ | 8 + .../src/book_training/train_image_007.yml~ | 9 + asift_match/src/compute_asift_keypoints.cpp | 569 + asift_match/src/compute_asift_keypoints.h | 53 + asift_match/src/compute_asift_matches.cpp | 791 + asift_match/src/compute_asift_matches.h | 51 + asift_match/src/demo_lib_sift.cpp | 1222 + asift_match/src/demo_lib_sift.h | 298 + asift_match/src/domain.cpp | 145 + asift_match/src/domain.h | 40 + asift_match/src/filter.cpp | 460 + asift_match/src/filter.h | 38 + asift_match/src/flimage.cpp | 86 + asift_match/src/flimage.h | 53 + asift_match/src/fproj.cpp | 186 + asift_match/src/fproj.h | 9 + asift_match/src/frot.cpp | 116 + asift_match/src/frot.h | 10 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/Match.dir/CXX.includecache | 20 + .../CMakeFiles/Match.dir/DependInfo.cmake | 20 + .../libMatch/CMakeFiles/Match.dir/build.make | 103 + .../CMakeFiles/Match.dir/cmake_clean.cmake | 10 + .../Match.dir/cmake_clean_target.cmake | 3 + .../CMakeFiles/Match.dir/depend.internal | 6 + .../libMatch/CMakeFiles/Match.dir/depend.make | 6 + .../libMatch/CMakeFiles/Match.dir/flags.make | 8 + .../libMatch/CMakeFiles/Match.dir/link.txt | 2 + .../libMatch/CMakeFiles/Match.dir/match.cpp.o | Bin .../CMakeFiles/Match.dir/progress.make | 2 + .../src/libMatch/CMakeFiles/progress.marks | 1 + asift_match/src/libMatch/CMakeLists.txt | 6 + asift_match/src/libMatch/Makefile | 164 + asift_match/src/libMatch/cmake_install.cmake | 34 + .../src}/libMatch/libMatch.a | Bin asift_match/src/libMatch/match.cpp | 35 + asift_match/src/libMatch/match.h | 17 + asift_match/src/libMatch/match.o | Bin 0 -> 14072 bytes .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/Numerics.dir/CXX.includecache | 62 + .../CMakeFiles/Numerics.dir/DependInfo.cmake | 26 + .../CMakeFiles/Numerics.dir/build.make | 233 + .../CMakeFiles/Numerics.dir/cmake_clean.cmake | 15 + .../Numerics.dir/cmake_clean_target.cmake | 3 + .../CMakeFiles/Numerics.dir/computeH.cpp.o | Bin .../CMakeFiles/Numerics.dir/depend.internal | 28 + .../CMakeFiles/Numerics.dir/depend.make | 28 + .../CMakeFiles/Numerics.dir/flags.make | 8 + .../CMakeFiles/Numerics.dir/homography.cpp.o | Bin .../CMakeFiles/Numerics.dir/link.txt | 2 + .../CMakeFiles/Numerics.dir/matrix.cpp.o | Bin .../CMakeFiles/Numerics.dir/numerics.cpp.o | Bin .../CMakeFiles/Numerics.dir/progress.make | 7 + .../CMakeFiles/Numerics.dir/rodrigues.cpp.o | Bin .../CMakeFiles/Numerics.dir/vector.cpp.o | Bin .../src/libNumerics/CMakeFiles/progress.marks | 1 + asift_match/src/libNumerics/CMakeLists.txt | 13 + asift_match/src/libNumerics/Makefile | 299 + .../src/libNumerics/cmake_install.cmake | 34 + asift_match/src/libNumerics/computeH.cpp | 651 + asift_match/src/libNumerics/homography.cpp | 73 + asift_match/src/libNumerics/homography.h | 83 + .../src}/libNumerics/libNumerics.a | Bin asift_match/src/libNumerics/matrix.cpp | 565 + asift_match/src/libNumerics/matrix.h | 175 + asift_match/src/libNumerics/numerics.cpp | 487 + asift_match/src/libNumerics/numerics.h | 66 + asift_match/src/libNumerics/numerics.o | Bin 0 -> 81120 bytes asift_match/src/libNumerics/rodrigues.cpp | 55 + asift_match/src/libNumerics/rodrigues.h | 24 + asift_match/src/libNumerics/vector.cpp | 179 + asift_match/src/library.cpp | 945 + asift_match/src/library.h | 202 + asift_match/src/numerics1.cpp | 185 + asift_match/src/numerics1.h | 57 + asift_match/src/orsa.cpp | 599 + asift_match/src/orsa.h | 77 + asift_match/src/splines.cpp | 217 + asift_match/src/splines.h | 34 + asift_match/src/third_party/Eigen/Array | 11 + .../src/third_party/Eigen/CMakeLists.txt | 19 + asift_match/src/third_party/Eigen/COPYING.GPL | 674 + .../src/third_party/Eigen/COPYING.LGPL | 165 + asift_match/src/third_party/Eigen/Cholesky | 33 + asift_match/src/third_party/Eigen/Core | 363 + asift_match/src/third_party/Eigen/Dense | 7 + asift_match/src/third_party/Eigen/Eigen | 2 + .../src/third_party/Eigen/Eigen2Support | 82 + asift_match/src/third_party/Eigen/Eigenvalues | 44 + asift_match/src/third_party/Eigen/Geometry | 67 + asift_match/src/third_party/Eigen/Householder | 27 + asift_match/src/third_party/Eigen/Jacobi | 30 + asift_match/src/third_party/Eigen/LU | 42 + .../src/third_party/Eigen/LeastSquares | 36 + asift_match/src/third_party/Eigen/QR | 45 + .../src/third_party/Eigen/QtAlignedMalloc | 34 + asift_match/src/third_party/Eigen/README.ipol | 10 + asift_match/src/third_party/Eigen/SVD | 38 + asift_match/src/third_party/Eigen/Sparse | 69 + asift_match/src/third_party/Eigen/StdDeque | 42 + asift_match/src/third_party/Eigen/StdList | 41 + asift_match/src/third_party/Eigen/StdVector | 42 + .../src/third_party/Eigen/src/CMakeLists.txt | 7 + .../Eigen/src/Cholesky/CMakeLists.txt | 6 + .../src/third_party/Eigen/src/Cholesky/LDLT.h | 461 + .../src/third_party/Eigen/src/Cholesky/LLT.h | 386 + .../src/third_party/Eigen/src/Core/Array.h | 322 + .../third_party/Eigen/src/Core/ArrayBase.h | 239 + .../third_party/Eigen/src/Core/ArrayWrapper.h | 221 + .../src/third_party/Eigen/src/Core/Assign.h | 593 + .../third_party/Eigen/src/Core/BandMatrix.h | 345 + .../src/third_party/Eigen/src/Core/Block.h | 349 + .../third_party/Eigen/src/Core/BooleanRedux.h | 149 + .../third_party/Eigen/src/Core/CMakeLists.txt | 10 + .../Eigen/src/Core/CommaInitializer.h | 150 + .../Eigen/src/Core/CwiseBinaryOp.h | 240 + .../Eigen/src/Core/CwiseNullaryOp.h | 851 + .../third_party/Eigen/src/Core/CwiseUnaryOp.h | 137 + .../Eigen/src/Core/CwiseUnaryView.h | 148 + .../third_party/Eigen/src/Core/DenseBase.h | 543 + .../Eigen/src/Core/DenseCoeffsBase.h | 765 + .../third_party/Eigen/src/Core/DenseStorage.h | 304 + .../src/third_party/Eigen/src/Core/Diagonal.h | 227 + .../Eigen/src/Core/DiagonalMatrix.h | 306 + .../Eigen/src/Core/DiagonalProduct.h | 135 + .../src/third_party/Eigen/src/Core/Dot.h | 268 + .../third_party/Eigen/src/Core/EigenBase.h | 172 + .../src/third_party/Eigen/src/Core/Flagged.h | 151 + .../Eigen/src/Core/ForceAlignedAccess.h | 157 + .../src/third_party/Eigen/src/Core/Functors.h | 940 + .../src/third_party/Eigen/src/Core/Fuzzy.h | 160 + .../Eigen/src/Core/GenericPacketMath.h | 339 + .../Eigen/src/Core/GlobalFunctions.h | 95 + .../src/third_party/Eigen/src/Core/IO.h | 259 + .../src/third_party/Eigen/src/Core/Map.h | 205 + .../src/third_party/Eigen/src/Core/MapBase.h | 255 + .../Eigen/src/Core/MathFunctions.h | 831 + .../src/third_party/Eigen/src/Core/Matrix.h | 439 + .../third_party/Eigen/src/Core/MatrixBase.h | 520 + .../third_party/Eigen/src/Core/NestByValue.h | 122 + .../src/third_party/Eigen/src/Core/NoAlias.h | 136 + .../third_party/Eigen/src/Core/NumTraits.h | 160 + .../Eigen/src/Core/PermutationMatrix.h | 696 + .../Eigen/src/Core/PlainObjectBase.h | 740 + .../src/third_party/Eigen/src/Core/Product.h | 628 + .../third_party/Eigen/src/Core/ProductBase.h | 288 + .../src/third_party/Eigen/src/Core/Random.h | 163 + .../src/third_party/Eigen/src/Core/Redux.h | 404 + .../third_party/Eigen/src/Core/Replicate.h | 179 + .../Eigen/src/Core/ReturnByValue.h | 99 + .../src/third_party/Eigen/src/Core/Reverse.h | 230 + .../src/third_party/Eigen/src/Core/Select.h | 158 + .../Eigen/src/Core/SelfAdjointView.h | 325 + .../Eigen/src/Core/SelfCwiseBinaryOp.h | 195 + .../Eigen/src/Core/SolveTriangular.h | 270 + .../third_party/Eigen/src/Core/StableNorm.h | 186 + .../src/third_party/Eigen/src/Core/Stride.h | 119 + .../src/third_party/Eigen/src/Core/Swap.h | 126 + .../third_party/Eigen/src/Core/Transpose.h | 426 + .../Eigen/src/Core/Transpositions.h | 447 + .../Eigen/src/Core/TriangularMatrix.h | 834 + .../third_party/Eigen/src/Core/VectorBlock.h | 296 + .../third_party/Eigen/src/Core/VectorwiseOp.h | 557 + .../src/third_party/Eigen/src/Core/Visitor.h | 248 + .../src/Core/arch/AltiVec/CMakeLists.txt | 6 + .../Eigen/src/Core/arch/AltiVec/Complex.h | 228 + .../Eigen/src/Core/arch/AltiVec/PacketMath.h | 509 + .../Eigen/src/Core/arch/CMakeLists.txt | 4 + .../src/Core/arch/Default/CMakeLists.txt | 6 + .../Eigen/src/Core/arch/Default/Settings.h | 64 + .../Eigen/src/Core/arch/NEON/CMakeLists.txt | 6 + .../Eigen/src/Core/arch/NEON/Complex.h | 269 + .../Eigen/src/Core/arch/NEON/PacketMath.h | 420 + .../Eigen/src/Core/arch/SSE/CMakeLists.txt | 6 + .../Eigen/src/Core/arch/SSE/Complex.h | 447 + .../Eigen/src/Core/arch/SSE/MathFunctions.h | 395 + .../Eigen/src/Core/arch/SSE/PacketMath.h | 634 + .../Eigen/src/Core/products/CMakeLists.txt | 6 + .../src/Core/products/CoeffBasedProduct.h | 452 + .../Core/products/GeneralBlockPanelKernel.h | 1285 + .../src/Core/products/GeneralMatrixMatrix.h | 444 + .../products/GeneralMatrixMatrixTriangular.h | 227 + .../src/Core/products/GeneralMatrixVector.h | 559 + .../Eigen/src/Core/products/Parallelizer.h | 154 + .../Core/products/SelfadjointMatrixMatrix.h | 434 + .../Core/products/SelfadjointMatrixVector.h | 299 + .../src/Core/products/SelfadjointProduct.h | 146 + .../Core/products/SelfadjointRank2Update.h | 104 + .../Core/products/TriangularMatrixMatrix.h | 399 + .../Core/products/TriangularMatrixVector.h | 350 + .../Core/products/TriangularSolverMatrix.h | 325 + .../Core/products/TriangularSolverVector.h | 150 + .../Eigen/src/Core/util/BlasUtil.h | 271 + .../Eigen/src/Core/util/CMakeLists.txt | 6 + .../Eigen/src/Core/util/Constants.h | 318 + .../src/Core/util/DisableStupidWarnings.h | 42 + .../Eigen/src/Core/util/ForwardDeclarations.h | 307 + .../third_party/Eigen/src/Core/util/Macros.h | 418 + .../third_party/Eigen/src/Core/util/Memory.h | 860 + .../third_party/Eigen/src/Core/util/Meta.h | 229 + .../src/Core/util/ReenableStupidWarnings.h | 14 + .../Eigen/src/Core/util/StaticAssert.h | 198 + .../Eigen/src/Core/util/XprHelper.h | 460 + .../Eigen/src/Eigen2Support/Block.h | 137 + .../Eigen/src/Eigen2Support/CMakeLists.txt | 8 + .../Eigen/src/Eigen2Support/Cwise.h | 199 + .../Eigen/src/Eigen2Support/CwiseOperators.h | 327 + .../src/Eigen2Support/Geometry/AlignedBox.h | 170 + .../Eigen/src/Eigen2Support/Geometry/All.h | 115 + .../src/Eigen2Support/Geometry/AngleAxis.h | 226 + .../src/Eigen2Support/Geometry/CMakeLists.txt | 6 + .../src/Eigen2Support/Geometry/Hyperplane.h | 265 + .../Eigen2Support/Geometry/ParametrizedLine.h | 153 + .../src/Eigen2Support/Geometry/Quaternion.h | 506 + .../src/Eigen2Support/Geometry/Rotation2D.h | 157 + .../src/Eigen2Support/Geometry/RotationBase.h | 134 + .../src/Eigen2Support/Geometry/Scaling.h | 179 + .../src/Eigen2Support/Geometry/Transform.h | 798 + .../src/Eigen2Support/Geometry/Translation.h | 196 + .../third_party/Eigen/src/Eigen2Support/LU.h | 133 + .../Eigen/src/Eigen2Support/Lazy.h | 82 + .../Eigen/src/Eigen2Support/LeastSquares.h | 182 + .../Eigen/src/Eigen2Support/Macros.h | 35 + .../Eigen/src/Eigen2Support/MathFunctions.h | 68 + .../Eigen/src/Eigen2Support/Memory.h | 58 + .../Eigen/src/Eigen2Support/Meta.h | 86 + .../Eigen/src/Eigen2Support/Minor.h | 128 + .../third_party/Eigen/src/Eigen2Support/QR.h | 79 + .../third_party/Eigen/src/Eigen2Support/SVD.h | 649 + .../src/Eigen2Support/TriangularSolver.h | 53 + .../Eigen/src/Eigen2Support/VectorBlock.h | 105 + .../Eigen/src/Eigenvalues/CMakeLists.txt | 6 + .../src/Eigenvalues/ComplexEigenSolver.h | 332 + .../Eigen/src/Eigenvalues/ComplexSchur.h | 448 + .../Eigen/src/Eigenvalues/EigenSolver.h | 582 + .../Eigen/src/Eigenvalues/EigenvaluesCommon.h | 31 + .../GeneralizedSelfAdjointEigenSolver.h | 239 + .../src/Eigenvalues/HessenbergDecomposition.h | 384 + .../src/Eigenvalues/MatrixBaseEigenvalues.h | 170 + .../Eigen/src/Eigenvalues/RealSchur.h | 474 + .../src/Eigenvalues/SelfAdjointEigenSolver.h | 520 + .../src/Eigenvalues/Tridiagonalization.h | 568 + .../Eigen/src/Geometry/AlignedBox.h | 352 + .../Eigen/src/Geometry/AngleAxis.h | 238 + .../Eigen/src/Geometry/CMakeLists.txt | 8 + .../Eigen/src/Geometry/EulerAngles.h | 96 + .../Eigen/src/Geometry/Homogeneous.h | 318 + .../Eigen/src/Geometry/Hyperplane.h | 280 + .../Eigen/src/Geometry/OrthoMethods.h | 229 + .../Eigen/src/Geometry/ParametrizedLine.h | 168 + .../Eigen/src/Geometry/Quaternion.h | 724 + .../Eigen/src/Geometry/Rotation2D.h | 165 + .../Eigen/src/Geometry/RotationBase.h | 217 + .../third_party/Eigen/src/Geometry/Scaling.h | 182 + .../Eigen/src/Geometry/Transform.h | 1387 + .../Eigen/src/Geometry/Translation.h | 215 + .../third_party/Eigen/src/Geometry/Umeyama.h | 183 + .../Eigen/src/Geometry/arch/CMakeLists.txt | 6 + .../Eigen/src/Geometry/arch/Geometry_SSE.h | 126 + .../Eigen/src/Householder/BlockHouseholder.h | 79 + .../Eigen/src/Householder/CMakeLists.txt | 6 + .../Eigen/src/Householder/Householder.h | 132 + .../src/Householder/HouseholderSequence.h | 429 + .../Eigen/src/Jacobi/CMakeLists.txt | 6 + .../src/third_party/Eigen/src/Jacobi/Jacobi.h | 430 + .../third_party/Eigen/src/LU/CMakeLists.txt | 8 + .../third_party/Eigen/src/LU/Determinant.h | 112 + .../src/third_party/Eigen/src/LU/FullPivLU.h | 754 + .../src/third_party/Eigen/src/LU/Inverse.h | 407 + .../third_party/Eigen/src/LU/PartialPivLU.h | 509 + .../Eigen/src/LU/arch/CMakeLists.txt | 6 + .../Eigen/src/LU/arch/Inverse_SSE.h | 340 + .../third_party/Eigen/src/QR/CMakeLists.txt | 6 + .../Eigen/src/QR/ColPivHouseholderQR.h | 532 + .../Eigen/src/QR/FullPivHouseholderQR.h | 546 + .../third_party/Eigen/src/QR/HouseholderQR.h | 355 + .../third_party/Eigen/src/SVD/CMakeLists.txt | 6 + .../src/third_party/Eigen/src/SVD/JacobiSVD.h | 715 + .../Eigen/src/SVD/UpperBidiagonalization.h | 159 + .../third_party/Eigen/src/Sparse/AmbiVector.h | 379 + .../Eigen/src/Sparse/CMakeLists.txt | 6 + .../Eigen/src/Sparse/CompressedStorage.h | 239 + .../Eigen/src/Sparse/CoreIterators.h | 71 + .../Eigen/src/Sparse/DynamicSparseMatrix.h | 346 + .../Eigen/src/Sparse/MappedSparseMatrix.h | 165 + .../Eigen/src/Sparse/SparseAssign.h | 0 .../Eigen/src/Sparse/SparseBlock.h | 465 + .../Eigen/src/Sparse/SparseCwiseBinaryOp.h | 375 + .../Eigen/src/Sparse/SparseCwiseUnaryOp.h | 146 + .../Eigen/src/Sparse/SparseDenseProduct.h | 231 + .../Eigen/src/Sparse/SparseDiagonalProduct.h | 195 + .../third_party/Eigen/src/Sparse/SparseDot.h | 97 + .../Eigen/src/Sparse/SparseFuzzy.h | 41 + .../Eigen/src/Sparse/SparseMatrix.h | 651 + .../Eigen/src/Sparse/SparseMatrixBase.h | 706 + .../Eigen/src/Sparse/SparseProduct.h | 141 + .../Eigen/src/Sparse/SparseRedux.h | 56 + .../Eigen/src/Sparse/SparseSelfAdjointView.h | 454 + .../Eigen/src/Sparse/SparseSparseProduct.h | 401 + .../Eigen/src/Sparse/SparseTranspose.h | 68 + .../Eigen/src/Sparse/SparseTriangularView.h | 100 + .../third_party/Eigen/src/Sparse/SparseUtil.h | 130 + .../Eigen/src/Sparse/SparseVector.h | 431 + .../third_party/Eigen/src/Sparse/SparseView.h | 109 + .../Eigen/src/Sparse/TriangularSolver.h | 339 + .../Eigen/src/StlSupport/CMakeLists.txt | 6 + .../Eigen/src/StlSupport/StdDeque.h | 149 + .../Eigen/src/StlSupport/StdList.h | 129 + .../Eigen/src/StlSupport/StdVector.h | 149 + .../Eigen/src/StlSupport/details.h | 99 + .../third_party/Eigen/src/misc/CMakeLists.txt | 6 + .../src/third_party/Eigen/src/misc/Image.h | 95 + .../src/third_party/Eigen/src/misc/Kernel.h | 92 + .../src/third_party/Eigen/src/misc/Solve.h | 87 + .../Eigen/src/plugins/ArrayCwiseBinaryOps.h | 143 + .../Eigen/src/plugins/ArrayCwiseUnaryOps.h | 202 + .../Eigen/src/plugins/BlockMethods.h | 595 + .../Eigen/src/plugins/CMakeLists.txt | 6 + .../Eigen/src/plugins/CommonCwiseBinaryOps.h | 61 + .../Eigen/src/plugins/CommonCwiseUnaryOps.h | 187 + .../Eigen/src/plugins/MatrixCwiseBinaryOps.h | 120 + .../Eigen/src/plugins/MatrixCwiseUnaryOps.h | 82 + 409 files changed, 133617 insertions(+), 507 deletions(-) delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/compute_asift_keypoints.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/compute_asift_matches.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/demo_ASIFT.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/demo_lib_sift.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/filter.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/flimage.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/fproj.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/frot.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/io_png/io_png.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/library.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/numerics1.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/orsa.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/splines.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/ASIFT_matcher.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/compute_asift_keypoints.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/compute_asift_matches.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/demo_lib_sift.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/filter.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/flimage.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/fproj.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/frot.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/io_png/io_png.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/library.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/numerics1.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/orsa.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/splines.cpp.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/test_ASIFT.cpp.o delete mode 100755 ASIFT_tests/demo_ASIFT_src/demo_ASIFT delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/png.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngerror.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pnggccrd.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngget.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngmem.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngpread.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngread.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngrio.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngrtran.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngrutil.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngset.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngtrans.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngvcrd.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngwio.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngwrite.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngwtran.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngwutil.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/png/libpng.a delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/adler32.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/compress.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/crc32.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/deflate.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/gzio.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/infback.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/inffast.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/inflate.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/inftrees.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/minigzip.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/trees.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/uncompr.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/zutil.c.o delete mode 100644 ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/libzlib.a delete mode 100755 ASIFT_tests/demo_ASIFT_src/test_ASIFT create mode 100644 asift_match/CMakeLists.txt create mode 100644 asift_match/CMakeLists.txt~ create mode 100644 asift_match/package.xml create mode 100644 asift_match/package.xml~ create mode 100644 asift_match/src/ASIFT_matcher.cpp create mode 100644 asift_match/src/ASIFT_matcher.hpp create mode 100644 asift_match/src/CImg.h create mode 100644 asift_match/src/ROS_matcher.cpp create mode 100644 asift_match/src/ROS_matcher.hpp create mode 100644 asift_match/src/ROS_matcher_node.cpp create mode 100644 asift_match/src/book_training/train_image_000.png create mode 100644 asift_match/src/book_training/train_image_001.png create mode 100644 asift_match/src/book_training/train_image_002.png create mode 100644 asift_match/src/book_training/train_image_003.png create mode 100644 asift_match/src/book_training/train_image_005.yml~ create mode 100644 asift_match/src/book_training/train_image_006.yml~ create mode 100644 asift_match/src/book_training/train_image_007.yml~ create mode 100755 asift_match/src/compute_asift_keypoints.cpp create mode 100755 asift_match/src/compute_asift_keypoints.h create mode 100755 asift_match/src/compute_asift_matches.cpp create mode 100755 asift_match/src/compute_asift_matches.h create mode 100755 asift_match/src/demo_lib_sift.cpp create mode 100755 asift_match/src/demo_lib_sift.h create mode 100755 asift_match/src/domain.cpp create mode 100755 asift_match/src/domain.h create mode 100755 asift_match/src/filter.cpp create mode 100755 asift_match/src/filter.h create mode 100755 asift_match/src/flimage.cpp create mode 100755 asift_match/src/flimage.h create mode 100755 asift_match/src/fproj.cpp create mode 100755 asift_match/src/fproj.h create mode 100755 asift_match/src/frot.cpp create mode 100755 asift_match/src/frot.h create mode 100644 asift_match/src/libMatch/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 asift_match/src/libMatch/CMakeFiles/Match.dir/CXX.includecache create mode 100644 asift_match/src/libMatch/CMakeFiles/Match.dir/DependInfo.cmake create mode 100644 asift_match/src/libMatch/CMakeFiles/Match.dir/build.make create mode 100644 asift_match/src/libMatch/CMakeFiles/Match.dir/cmake_clean.cmake create mode 100644 asift_match/src/libMatch/CMakeFiles/Match.dir/cmake_clean_target.cmake create mode 100644 asift_match/src/libMatch/CMakeFiles/Match.dir/depend.internal create mode 100644 asift_match/src/libMatch/CMakeFiles/Match.dir/depend.make create mode 100644 asift_match/src/libMatch/CMakeFiles/Match.dir/flags.make create mode 100644 asift_match/src/libMatch/CMakeFiles/Match.dir/link.txt rename {ASIFT_tests/demo_ASIFT_src => asift_match/src}/libMatch/CMakeFiles/Match.dir/match.cpp.o (100%) create mode 100644 asift_match/src/libMatch/CMakeFiles/Match.dir/progress.make create mode 100644 asift_match/src/libMatch/CMakeFiles/progress.marks create mode 100755 asift_match/src/libMatch/CMakeLists.txt create mode 100644 asift_match/src/libMatch/Makefile create mode 100644 asift_match/src/libMatch/cmake_install.cmake rename {ASIFT_tests/demo_ASIFT_src => asift_match/src}/libMatch/libMatch.a (100%) create mode 100755 asift_match/src/libMatch/match.cpp create mode 100755 asift_match/src/libMatch/match.h create mode 100644 asift_match/src/libMatch/match.o create mode 100644 asift_match/src/libNumerics/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 asift_match/src/libNumerics/CMakeFiles/Numerics.dir/CXX.includecache create mode 100644 asift_match/src/libNumerics/CMakeFiles/Numerics.dir/DependInfo.cmake create mode 100644 asift_match/src/libNumerics/CMakeFiles/Numerics.dir/build.make create mode 100644 asift_match/src/libNumerics/CMakeFiles/Numerics.dir/cmake_clean.cmake create mode 100644 asift_match/src/libNumerics/CMakeFiles/Numerics.dir/cmake_clean_target.cmake rename {ASIFT_tests/demo_ASIFT_src => asift_match/src}/libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o (100%) create mode 100644 asift_match/src/libNumerics/CMakeFiles/Numerics.dir/depend.internal create mode 100644 asift_match/src/libNumerics/CMakeFiles/Numerics.dir/depend.make create mode 100644 asift_match/src/libNumerics/CMakeFiles/Numerics.dir/flags.make rename {ASIFT_tests/demo_ASIFT_src => asift_match/src}/libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o (100%) create mode 100644 asift_match/src/libNumerics/CMakeFiles/Numerics.dir/link.txt rename {ASIFT_tests/demo_ASIFT_src => asift_match/src}/libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o (100%) rename {ASIFT_tests/demo_ASIFT_src => asift_match/src}/libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o (100%) create mode 100644 asift_match/src/libNumerics/CMakeFiles/Numerics.dir/progress.make rename {ASIFT_tests/demo_ASIFT_src => asift_match/src}/libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o (100%) rename {ASIFT_tests/demo_ASIFT_src => asift_match/src}/libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o (100%) create mode 100644 asift_match/src/libNumerics/CMakeFiles/progress.marks create mode 100755 asift_match/src/libNumerics/CMakeLists.txt create mode 100644 asift_match/src/libNumerics/Makefile create mode 100644 asift_match/src/libNumerics/cmake_install.cmake create mode 100755 asift_match/src/libNumerics/computeH.cpp create mode 100755 asift_match/src/libNumerics/homography.cpp create mode 100755 asift_match/src/libNumerics/homography.h rename {ASIFT_tests/demo_ASIFT_src => asift_match/src}/libNumerics/libNumerics.a (100%) create mode 100755 asift_match/src/libNumerics/matrix.cpp create mode 100755 asift_match/src/libNumerics/matrix.h create mode 100755 asift_match/src/libNumerics/numerics.cpp create mode 100755 asift_match/src/libNumerics/numerics.h create mode 100644 asift_match/src/libNumerics/numerics.o create mode 100755 asift_match/src/libNumerics/rodrigues.cpp create mode 100755 asift_match/src/libNumerics/rodrigues.h create mode 100755 asift_match/src/libNumerics/vector.cpp create mode 100755 asift_match/src/library.cpp create mode 100755 asift_match/src/library.h create mode 100755 asift_match/src/numerics1.cpp create mode 100755 asift_match/src/numerics1.h create mode 100755 asift_match/src/orsa.cpp create mode 100755 asift_match/src/orsa.h create mode 100755 asift_match/src/splines.cpp create mode 100755 asift_match/src/splines.h create mode 100755 asift_match/src/third_party/Eigen/Array create mode 100755 asift_match/src/third_party/Eigen/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/COPYING.GPL create mode 100755 asift_match/src/third_party/Eigen/COPYING.LGPL create mode 100755 asift_match/src/third_party/Eigen/Cholesky create mode 100755 asift_match/src/third_party/Eigen/Core create mode 100755 asift_match/src/third_party/Eigen/Dense create mode 100755 asift_match/src/third_party/Eigen/Eigen create mode 100755 asift_match/src/third_party/Eigen/Eigen2Support create mode 100755 asift_match/src/third_party/Eigen/Eigenvalues create mode 100755 asift_match/src/third_party/Eigen/Geometry create mode 100755 asift_match/src/third_party/Eigen/Householder create mode 100755 asift_match/src/third_party/Eigen/Jacobi create mode 100755 asift_match/src/third_party/Eigen/LU create mode 100755 asift_match/src/third_party/Eigen/LeastSquares create mode 100755 asift_match/src/third_party/Eigen/QR create mode 100755 asift_match/src/third_party/Eigen/QtAlignedMalloc create mode 100755 asift_match/src/third_party/Eigen/README.ipol create mode 100755 asift_match/src/third_party/Eigen/SVD create mode 100755 asift_match/src/third_party/Eigen/Sparse create mode 100755 asift_match/src/third_party/Eigen/StdDeque create mode 100755 asift_match/src/third_party/Eigen/StdList create mode 100755 asift_match/src/third_party/Eigen/StdVector create mode 100755 asift_match/src/third_party/Eigen/src/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Cholesky/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Cholesky/LDLT.h create mode 100755 asift_match/src/third_party/Eigen/src/Cholesky/LLT.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Array.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/ArrayBase.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/ArrayWrapper.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Assign.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/BandMatrix.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Block.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/BooleanRedux.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Core/CommaInitializer.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/CwiseBinaryOp.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/CwiseNullaryOp.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/CwiseUnaryOp.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/CwiseUnaryView.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/DenseBase.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/DenseCoeffsBase.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/DenseStorage.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Diagonal.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/DiagonalMatrix.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/DiagonalProduct.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Dot.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/EigenBase.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Flagged.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/ForceAlignedAccess.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Functors.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Fuzzy.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/GenericPacketMath.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/GlobalFunctions.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/IO.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Map.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/MapBase.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/MathFunctions.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Matrix.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/MatrixBase.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/NestByValue.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/NoAlias.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/NumTraits.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/PermutationMatrix.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/PlainObjectBase.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Product.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/ProductBase.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Random.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Redux.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Replicate.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/ReturnByValue.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Reverse.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Select.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/SelfAdjointView.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/SelfCwiseBinaryOp.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/SolveTriangular.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/StableNorm.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Stride.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Swap.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Transpose.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Transpositions.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/TriangularMatrix.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/VectorBlock.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/VectorwiseOp.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/Visitor.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/arch/AltiVec/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Core/arch/AltiVec/Complex.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/arch/AltiVec/PacketMath.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/arch/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Core/arch/Default/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Core/arch/Default/Settings.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/arch/NEON/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Core/arch/NEON/Complex.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/arch/NEON/PacketMath.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/arch/SSE/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Core/arch/SSE/Complex.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/arch/SSE/MathFunctions.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/arch/SSE/PacketMath.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/CoeffBasedProduct.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/GeneralBlockPanelKernel.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/GeneralMatrixMatrix.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/GeneralMatrixVector.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/Parallelizer.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/SelfadjointMatrixMatrix.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/SelfadjointMatrixVector.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/SelfadjointProduct.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/SelfadjointRank2Update.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/TriangularMatrixMatrix.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/TriangularMatrixVector.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/TriangularSolverMatrix.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/products/TriangularSolverVector.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/util/BlasUtil.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/util/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Core/util/Constants.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/util/DisableStupidWarnings.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/util/ForwardDeclarations.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/util/Macros.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/util/Memory.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/util/Meta.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/util/ReenableStupidWarnings.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/util/StaticAssert.h create mode 100755 asift_match/src/third_party/Eigen/src/Core/util/XprHelper.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Block.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Cwise.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/CwiseOperators.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Geometry/AlignedBox.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Geometry/All.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Geometry/AngleAxis.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Geometry/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Geometry/Hyperplane.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Geometry/Quaternion.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Geometry/Rotation2D.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Geometry/RotationBase.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Geometry/Scaling.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Geometry/Transform.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Geometry/Translation.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/LU.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Lazy.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/LeastSquares.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Macros.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/MathFunctions.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Memory.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Meta.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/Minor.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/QR.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/SVD.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/TriangularSolver.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigen2Support/VectorBlock.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigenvalues/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Eigenvalues/ComplexEigenSolver.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigenvalues/ComplexSchur.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigenvalues/EigenSolver.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigenvalues/EigenvaluesCommon.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigenvalues/HessenbergDecomposition.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigenvalues/RealSchur.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h create mode 100755 asift_match/src/third_party/Eigen/src/Eigenvalues/Tridiagonalization.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/AlignedBox.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/AngleAxis.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/EulerAngles.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/Homogeneous.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/Hyperplane.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/OrthoMethods.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/ParametrizedLine.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/Quaternion.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/Rotation2D.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/RotationBase.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/Scaling.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/Transform.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/Translation.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/Umeyama.h create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/arch/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Geometry/arch/Geometry_SSE.h create mode 100755 asift_match/src/third_party/Eigen/src/Householder/BlockHouseholder.h create mode 100755 asift_match/src/third_party/Eigen/src/Householder/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Householder/Householder.h create mode 100755 asift_match/src/third_party/Eigen/src/Householder/HouseholderSequence.h create mode 100755 asift_match/src/third_party/Eigen/src/Jacobi/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Jacobi/Jacobi.h create mode 100755 asift_match/src/third_party/Eigen/src/LU/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/LU/Determinant.h create mode 100755 asift_match/src/third_party/Eigen/src/LU/FullPivLU.h create mode 100755 asift_match/src/third_party/Eigen/src/LU/Inverse.h create mode 100755 asift_match/src/third_party/Eigen/src/LU/PartialPivLU.h create mode 100755 asift_match/src/third_party/Eigen/src/LU/arch/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/LU/arch/Inverse_SSE.h create mode 100755 asift_match/src/third_party/Eigen/src/QR/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/QR/ColPivHouseholderQR.h create mode 100755 asift_match/src/third_party/Eigen/src/QR/FullPivHouseholderQR.h create mode 100755 asift_match/src/third_party/Eigen/src/QR/HouseholderQR.h create mode 100755 asift_match/src/third_party/Eigen/src/SVD/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/SVD/JacobiSVD.h create mode 100755 asift_match/src/third_party/Eigen/src/SVD/UpperBidiagonalization.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/AmbiVector.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/CompressedStorage.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/CoreIterators.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/DynamicSparseMatrix.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/MappedSparseMatrix.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseAssign.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseBlock.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseCwiseBinaryOp.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseCwiseUnaryOp.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseDenseProduct.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseDiagonalProduct.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseDot.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseFuzzy.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseMatrix.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseMatrixBase.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseProduct.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseRedux.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseSelfAdjointView.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseSparseProduct.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseTranspose.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseTriangularView.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseUtil.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseVector.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/SparseView.h create mode 100755 asift_match/src/third_party/Eigen/src/Sparse/TriangularSolver.h create mode 100755 asift_match/src/third_party/Eigen/src/StlSupport/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/StlSupport/StdDeque.h create mode 100755 asift_match/src/third_party/Eigen/src/StlSupport/StdList.h create mode 100755 asift_match/src/third_party/Eigen/src/StlSupport/StdVector.h create mode 100755 asift_match/src/third_party/Eigen/src/StlSupport/details.h create mode 100755 asift_match/src/third_party/Eigen/src/misc/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/misc/Image.h create mode 100755 asift_match/src/third_party/Eigen/src/misc/Kernel.h create mode 100755 asift_match/src/third_party/Eigen/src/misc/Solve.h create mode 100755 asift_match/src/third_party/Eigen/src/plugins/ArrayCwiseBinaryOps.h create mode 100755 asift_match/src/third_party/Eigen/src/plugins/ArrayCwiseUnaryOps.h create mode 100755 asift_match/src/third_party/Eigen/src/plugins/BlockMethods.h create mode 100755 asift_match/src/third_party/Eigen/src/plugins/CMakeLists.txt create mode 100755 asift_match/src/third_party/Eigen/src/plugins/CommonCwiseBinaryOps.h create mode 100755 asift_match/src/third_party/Eigen/src/plugins/CommonCwiseUnaryOps.h create mode 100755 asift_match/src/third_party/Eigen/src/plugins/MatrixCwiseBinaryOps.h create mode 100755 asift_match/src/third_party/Eigen/src/plugins/MatrixCwiseUnaryOps.h diff --git a/ASIFT_tests/demo_ASIFT_src/ASIFT_matcher.hpp b/ASIFT_tests/demo_ASIFT_src/ASIFT_matcher.hpp index 5e13025..49ac739 100644 --- a/ASIFT_tests/demo_ASIFT_src/ASIFT_matcher.hpp +++ b/ASIFT_tests/demo_ASIFT_src/ASIFT_matcher.hpp @@ -1,3 +1,6 @@ +#ifndef ASIFTMATCHER_HPP +#define ASIFTMATCHER_HPP + #include #include #include @@ -94,3 +97,5 @@ protected: bool _resize_imgs;// = false; //Resize images to IM_X/IM_Y ? bool _showDebug;// = 0; //Show debugging messages ? }; + +#endif \ No newline at end of file diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/Makefile.cmake b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/Makefile.cmake index 8b2cef5..7c37d22 100644 --- a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/Makefile.cmake +++ b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/Makefile.cmake @@ -17,10 +17,6 @@ SET(CMAKE_MAKEFILE_DEPENDS "io_png/libs/zlib/CMakeLists.txt" "libMatch/CMakeLists.txt" "libNumerics/CMakeLists.txt" - "/usr/share/OpenCV/OpenCVConfig-version.cmake" - "/usr/share/OpenCV/OpenCVConfig.cmake" - "/usr/share/OpenCV/OpenCVModules-release.cmake" - "/usr/share/OpenCV/OpenCVModules.cmake" "/usr/share/cmake-2.8/Modules/CMakeCInformation.cmake" "/usr/share/cmake-2.8/Modules/CMakeCXXInformation.cmake" "/usr/share/cmake-2.8/Modules/CMakeCommonLanguageInclude.cmake" diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/C.includecache b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/C.includecache index b84d7a1..0537c68 100644 --- a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/C.includecache +++ b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/C.includecache @@ -6,3 +6,81 @@ #IncludeRegexTransform: +./io_png/libs/png/png.h +../zlib/zlib.h +./io_png/libs/zlib/zlib.h +pngconf.h +./io_png/libs/png/pngconf.h +crtdbg.h +- + +./io_png/libs/png/pngconf.h +pngusr.h +./io_png/libs/png/pngusr.h +config.h +./io_png/libs/png/config.h +windows.h +- +stdio.h +- +stdio.h +- +sys/types.h +- +setjmp.h +- +strings.h +- +string.h +- +stdlib.h +- +fp.h +- +math.h +- +m68881.h +- +mem.h +- +alloc.h +- +malloc.h +- +time.h +- +dos.h +- + +./io_png/libs/zlib/zconf.h +windows.h +- +sys/types.h +- +unistd.h +- +unixio.h +- + +./io_png/libs/zlib/zlib.h +zconf.h +./io_png/libs/zlib/zconf.h + +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/io_png/io_png.c +stdlib.h +- +stdio.h +- +math.h +- +assert.h +- +png.h +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/io_png/png.h +png.h +- +io_png.h +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/io_png/io_png.h + +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/io_png/io_png.h + diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/CXX.includecache b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/CXX.includecache index 613820e..b84d7a1 100644 --- a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/CXX.includecache +++ b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/CXX.includecache @@ -6,143 +6,3 @@ #IncludeRegexTransform: -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/compute_asift_keypoints.h -library.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/library.h -demo_lib_sift.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/demo_lib_sift.h -frot.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/frot.h -fproj.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/fproj.h -vector -- - -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/compute_asift_matches.h -library.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/library.h -demo_lib_sift.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/demo_lib_sift.h -frot.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/frot.h -fproj.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/fproj.h -vector -- - -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/demo_ASIFT.cpp -stdio.h -- -stdlib.h -- -string.h -- -time.h -- -vector -- -omp.h -- -demo_lib_sift.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/demo_lib_sift.h -io_png/io_png.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/io_png/io_png.h -library.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/library.h -frot.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/frot.h -fproj.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/fproj.h -compute_asift_keypoints.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/compute_asift_keypoints.h -compute_asift_matches.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/compute_asift_matches.h - -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/demo_lib_sift.h -stdlib.h -- -assert.h -- -numerics1.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/numerics1.h -library.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/library.h -filter.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/filter.h -domain.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/domain.h -splines.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/splines.h -flimage.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/flimage.h -vector -- - -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/domain.h -numerics1.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/numerics1.h -library.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/library.h -splines.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/splines.h - -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/filter.h -library.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/library.h - -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/flimage.h -iostream -- -string -- - -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/fproj.h -library.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/library.h -vector -- - -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/frot.h -library.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/library.h -vector -- - -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/io_png/io_png.h - -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/library.h -stdio.h -- -stdlib.h -- -math.h -- -time.h -- -float.h -- - -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/numerics1.h -stdio.h -- -stdlib.h -- -math.h -- -fstream -- -iostream -- -library.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/library.h - -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/splines.h -numerics1.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/numerics1.h -library.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/library.h -string.h -/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/string.h -vector -- - diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/DependInfo.cmake b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/DependInfo.cmake index 41bc592..9b9234b 100644 --- a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/DependInfo.cmake +++ b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/DependInfo.cmake @@ -37,7 +37,6 @@ SET(CMAKE_C_TARGET_INCLUDE_PATH "." "./io_png" "./io_png/libs/png" - "/usr/include/opencv" ) SET(CMAKE_CXX_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) SET(CMAKE_Fortran_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/compute_asift_keypoints.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/compute_asift_keypoints.cpp.o deleted file mode 100644 index 400ab77252ab4b6bc3bdb4d772c27ce35fca8079..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35592 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 z z<$YdC!k?hrac(!hit@(fWk4Db@Igo6eQx-CyzY#RM|??ndW4RhVC+0*$JzDqNw;Ok z%-af46F+Lwqj(Q$$vNrTq&ZjzAj-PFB)nVkzN7+HZ5TD+iR*6fOLEnjRBsc1MdJO6 z_dP8c2amW7pCG(b@jkC5Zw7p`4WA_Zy5il3Wef098$L}KA8;Ji_#uVVt-wtsw|lmC zqC#5oHwz(nwMoCJ5w@K+seTg*gYWZEze({Y*@!5` z>#|~#Zr+Wo`&b)f*@GhV#Jax1U2<9A-QMS8T_S)WHO z>=Jie&thOs@(0U0Mq(K--Z*0x4ty{?c(ROdgVB@5>n@vG+G(OA1AESYq=tiIA?}WIAl0ss}^Udx9IdbKYQ>&B(mtiRJs7AD(mYqad zu-o#%Uit5q&#%LjgFLt%?nvxQbUerLgp`!AmY$1ufMJ#$$` zH*1FvbU_GvL0TLU&c`$C1r2AF(jf^UnO|D`<64!^Se0(md!39z)()&U8NUthp}JI{@=*y;AT5L?ld1}QdvRN@mduE zcI}5uWfuR&N^Sox1FryX6CDqdJbBe%y{|K;6>G+KsZ*16?~P#N$O(MYt{I=G#z$5G zjKiw$DoIoXqCxusC6&AEpp}Gd2;>pNhjeI=9XQC96-#{ZRm@i$Vm+-oiuMES+OaZ6 zwujM;g~QzK9mR-#f)gCo@I8E?v~Txc<^bHLXqcm)6$kw>K`S zUfy-BAV+og5&i<_%0fTXp}i(8iJ_0=_P zjSYJB?e%xGG&e5M+X`x1TG*a^W;N?IdSmmFpuVVHuL)iqyr|%^hRMN-#wIG__gzIEIu0fPL?xYzryxsL}u zJA=}Yl>44*W>oIs7O; z=Iz5zxQ%pJ@Ke5yT}+*SB=-A(GC_Mo-h1TvF>hwXj5n}|o)hbO*RMfs^}fx_4n8QA zmn*m~KAF3+uWMB9N*sZqxR(No8E@iOotQ0ui!bioKJb-U$38h>Uz2rm8~T{BlQjd1 zuW=XJXL>cS&iu^&rcV*kCUR><1z};m`=H7$cY%pE}1H^skSG_pMd2t|9l*U2_ z^IwYuj(p*K{|MRJ`N~R)j`5uEbR2n)+lZX+U&xe@6Ox=2u%F1BL9+)xDe?@jO-Q+o z-+0B36U>DMKi;t$WMBOn3FU8}Kvk8@aCaMLF6ptSoUV;woies-`G2xCbXZRBVo*Fi zUQl>410{(XQBN;_bWv?QEU%9I-WhIoLN)xNCZ-?g#YF6P8V_$YQ@XU8Wm&lvxxS!4 z!P0wO#Aop?Yi_Iy&Zt@1*49|Fq_k;iYmt)Irq^A0H5X3~LXg^y zgrq;;G$p_P`&8>}hHZRftP7X`fOz1oDopVZL)mAr@ zSm6`bT2&2NxTnt!@8^5ruQq*Qhpki=t>YG#?Rwz_#^Y~uDfa_Bo?yf?qpa-8VBVZt zmM+nk28#=(78GA{*-{xQT2)kBP*_}0oNwWhQI^fld*>{VcSXQEA!AhfM#v1RNI7=g zt5Rw9c%~v;Xk#A`D;*s$)1srZ*ZXFS4zBSlqw^9YW{hs}-R(VhbY5h1FfuwDB&DO% zOV67I@+Ld&6L#7SOl$f|M+et4?V1sh(S?bTX>luYsgrm*z7!ZJi}%iQO_p>NWWLAa zbIMzeK!^yQpW(;^ON1=neQDscfq9tz=;*xlBh=A_Yetrho|+gHAKkagcP!)F(NmFc zWON>A2J%#xCwWQ@6YrPsOFhGQM#-~ufTv>dTz$9ilC$%SlBb40-EPl~T%OQC_pu!| z_y+mSU>PIiH)C|4&v(&?)MaG5ZnODK!Tcn@Gul;=?YaoodAkw$Foh-cOBjw~wrkY;)N@Xy1YQZ1VX=j5=$5WO>-;AKN^0ut7Vl z&CkYj=IGUFK9BFLJWHK^EV1ht4}2}2X!kVVl=Hx|?2NG?$0O&>G&ux4o{QOd%ILt& zqtiW}g0?#r>ovFFt+!h5MUJnvzNw}_uV0~i3hHX~8c)G3ZEc={0koic{`Ir%#O~wZgx>M=$e^`Y>Nt}4hErBiE+-lzgW;iW&IN zF06KPxQsbC<$+^-h&um8m=)cY59u z`MT*jPx!dgUxV=Q^g&>pPPl(OK-SiVk#J@uWSXEJ=`nJWEo`r+a4BQ3F!_WXxeJ}q|saxHQ|ydfTj zJnlYqM`W+HLXX%W>(6oyum3z?%>Od{xu3iWD^xbDz)pGxUIenUrN4cSmA=@`)TSlm zq+f3PhgIM6Pj>n%N$h%@bPluu9%94WZ@-;ht~m}d-ox9Ehf8N2KWAw_Zn!x0cg9aA zu(RbKtV9GJxn@~j=?>4I-z=Uj|3&MpM5>*Z{Rg$-jQj;Mm-*Xt&TAn%7LSzumRGvN z^XIR~oh|>z?ff^|X_-H#((w9Ui1biB&KUpe?ED>io6SIaCwzX2{7cv|c${`-{$ugy z@N@72q{lzc@bR~s%0y}-7Ltwvm+UY5u+z-pj$9dmsr?=2S_cJ^FAY%EPbPmp6 zYbQ3m{g2z}%ZCX@r`??N%aPcri-Yl9Y4`u*c82VK%6ccg(=Hs7!?FMZdv1Yzc}zRK z6&kF!J3PGXjC=i7i()5qJU+Sjb7VckPX6b>f42NLHIvHYIe*x~Hmo=n(OF#5`8}WZ zpCt-nZ1Hiqm_GCXfk55V{Cp7r>p}uE(e4cS9 z1^$y1_zNlUy(#c<*z-ACdCpIPPfUSdngYK(1wJDM&bxN(ug-|oFWevD^T!nQe@=nF zlmb6U9Aj?yb36ro088xI+Q;*^&djRk&o3(G=I-F;?5s0(QW_h}8ych7yQnUo6|Jb4 zS3P~s^<@>Y8?LXe_K?A4?%mf$|SKGZ+ zy0oF8zIA#{n_k{9ySlLv<(jQ)Q>&{RaU9x+O&+ZbJ6l@W<#aBia|Ipj5Fw&ax-z~< z#uZ7jB5V>Nc8YW*`DK#wGS=D}BxlLiYL5CPZ8bcVmFJz+wav|~MOMM^!+V~##wE4Q zZG73@1~B{^`*n-!7cXvJRu7^j%NN6~Ybsxc*KED$it1{85e_`Dbyinh)6~>l%ZRTz zfIZdKx2{-Gjf2;=<|Q>vjrtwc%h13$N^Zl!Ms-6?W0R+P&XVPgOX{j;)weChW*B&X zov|&;@O1{Ur+!5Xh+TCbG6;w4DgJG;ueXu-|A)uSVVjX0`nT5W)$;gzQEPooU7N?j z&>09b3biV3Xl>TdoOH7ROo@L; zx}=7AU3Qr>>4)9}C~t5v9n!W%n9!L0&Xfj^x*86v>XufVdo@(oF1p>*_QO`))6%@$ zGvkJMd38%oD~4EoQ?=ZK9fs8}sbewz^JR~0>o&GOu0zzfWpI$LDev?zVcTx^S0?=egR& ze=5>D`Ob3T?sCp|;b9kj8ViAEczqw{2EkeI-??x%|4Bhfenva=d}k1Mx5Ky#2XQx_ z3tYInoZq!^r`<}dRbb_CpuWJpiXY*SK)***N%TE}Tu` z;G@2a0G>4b@vP9nZ+78s`lT-1P5+1schh&ea5w!i7w)DPA(rOM^2~DKZu(nYxSRid zF5FH38yD`T?{(pBdhbPNFVEF3+)Z!&pwF4*Uu*A&u${RD;D z@ObvRaQFCm&4rHwv13>N)yA2xd;EOUCLmsdKPTTD7fzMm!B4sHpbI}Q9|1h%tjyq5qZ( zpYFo%a^Y9I@cUf2TMqoU6!^cTz&lgmdsE;iDD?5L{O)$1WFH(6&%vKluWMYmdwrSi z!Z`&U`mvWIfQNkCi&s{i+=HP#_agKkE^F{dMbHGJE z17U|gi=Bao`MUZ4l|md3aZYiEK9`dX5AjRz=ipO0N$?Qo-l&7$@4{6V{!I#fJfwHy zKTm-dbMoUEPQSs0yVsrPTzCo6Ipx{y!rk*UpOXX+`N#0*&|l-i-R-c#g}djA$w7~Y zeBATp|8e2&`SP+0zYuAhd=I;DicAOZcj4c5;pf>K(#+Rg&VRLWjt9m$`^(?E76ClO zX5!D`|9uyJoeRI&g}cjhT`7q0kdIrxTIj;vk^+~)?kw$=$xb~BUX%i#Yvazk(`P03)Vk=|bzi{DhdG)3y$>oXQNO*%@E8J`2SNf+)OSNJdM zTnePrH7Qznf213jE>}_|z2m%oKQi3jB@~_}UcsPgCIkoC5!C z3jB{L@ZBkJal>G{x%*}F4+e3!+}LB|&iH)XBJ;fIqIZvn4_!Em;EdakUASA{@Xi{{ z*WHijxNx_f`ww>h99M4rZMO?|*Q?isyZMi`$MtYN(^B9+PJ#c{g}dvO>B8ORndHLV z<+<5~yX(dO*^JNda`OM7JsX}zLOjFit@BR{cbC&vb0odHoWHWzoWbYcUAVjaBW#@G z#BclgVwexh!=dMl2SE@IG|h8tP39p-*2~Xiv>&EsUxAMZJg!2!uIp!9*5-RoNNBYrXl?~wx6$%s~<`4oKx}_ z+W0v1nO4xVVi>)1e!0_yyU)a}^LeXY->`Y`rP!4psPFfz$heI=`Ce$Jd2krLv%dVd fVf55>_H*ii`-MbR3jf~UzYp~9RsMYt_t?2c-%YXc_0Ae&;-=WR znDeLc&Qs@@&Ie}d?YdpYdH;(zq20zYcC_y&}6j8=)1?5xPFFFwcohzTRlP{qhc)|W<|@lt6b`h{(q`BCUoqM8>IwtJ7#gT zYdGqeT*Nu@rU8xS&Ic^m&3OjiVQh(({YBq)O?D-NvLz z(SE!oqXT)ScT3&ADxAKcdnP?eh-6QN$3^=}VYU==UYri$C9YaDi6Q5O-s6iM?M`o;3(wmjAzOI(Kr(BU;OFJ?B(Dw6@zk)A^4fWu^gNei&Y_aWq;zGD z86YA5CN(xwkJg=kL2Od&f*3t!oE(=%NULMcW)jSbR;Z!XgBo|X?xo27QtWC4Iem!} zSDio-HD(N>syM;@7|c^;FlR98dO%}F|F5eEd2lO%>Ds8s4b?`Ht!BMkyU$JT2x!Szh^!m0) z4rc9RrZN10YH7kvMoTPrNYr%J*v@-q<$kkuzr=r{WnIj9+PLutpdHIu8B1+7tk&&4 zti4-!jKpdmiyI?aQ~M)vV|Z(Q%Sxkp;peDoYG1fbA*%ZYTP-RhphsI>k-Yq-$D+@* z)s?76NpCct!E?-cBJQlMuUuX4Y>AQoaId$jV|~jyqxmh8)q7()OmEWfLJv#I8OB^S z?P96ddP!lXH>`AqaZSWnc8|nu*_6B@mO2nlUc|LW@;h83$vUn@$**xOPJV%F&*VRl zBt+8khk-2eye5=d8#YrbC9A`J%qFSZ8LQp7s3x_x#7u2pN*;CUvO=D2mCIdnSt*wd za@i^uNpty=#>sV|c=+-9+UJvB^M;1)sjG&z#amPl*0x^VFSV+Nd2{W?An59&&8aW6 z#eb~6d$ErCL7PnPf+EY=$6WXZO$o(nR~cSe5x{mbgRv^iz{b2uRUOR&qe4yqaw}!u9zd!wDewuDe8?$74?-Hi9Kmvk?pLvT3-i;eoUzNHosvz?ZK@zJ8o8%|A7q6)WIIf8D#h> z|6uLXfA(?PDLj8qqmW4x!6)av!T*c9jfU5aDmBp;ol1(g`Tu}gr1?KUgm?I-G7TRY zReO!pDC%KeyGrU|rCN)q`g{Bz5Tx*5su&Q~Y4UcRDu}l$i-I(}N&0!x3TtE0wHYVv_mrTBqG1E|H@{O^`pNa2(IB%PCmiub9@9wT+VE@&eKJx;9B zhpXuZO8cQIjeuo?b-;~LRlMr7b(FNxs8ale>f1L+uKISX^lclBmI0T(eN^@B8Kk8$ zL5Kco%uy6VoqknUqT2NEI0-N&{Uk2$s-DubbXj`_c%?-!CqN7d_sZp?{NX-Gi-4PL z0;}E+8+$9b=}qq@uO^vv<{w4sPGvrMJk1=Vif*qL(5~<+;#j1`pmd!cX(LvfL zgC;&EO@v^dM=z)*wn`JP8$q2Tltu7M0a6|hC9UY+68#hT6 zop)2)3?^(3bMMPkx^}%W;yuv0G5o!jJTVVJ#bi?~^?}0NA1KWIfx_G$D9rtV!rUJy%zf}!(gv9O;IRq~ zuL5%){v$~wx|v#4N=+7=4&v7DZ-KWDjs%)9m@Vuno$op%&{Go`K-_J0v9v3Z*z%RvsfXaHWDV&)4*w9Ga3&m^q zUtN}%`bsRdvIhY_25CRGq?a{yXC(f+Q2n5emX%q$Zrpe(C@PM7_dw!_rn;*Z82}JDb{fd?Aoc~Yxke|Oyvru}< zfv&?}3E~f0SwCoHdO4+OK6uck^gVkzIv$qPk4PSaR;o@2_(!wlo#ct|&lRS#BVeIp zlhYDil`o&N;j34ej|l6??<}kK17rD*iFdZwTW%rg_%iA3Qq5&LPn%BfY?qg*-j=Vf z@SyJCX!@(Fcb7`y`a$c`*YFy5kGDOu$V{y*iapSeK8-u2>3@b10r+g^k2!-_6ixpd z;kL8GbT((g{lT+cKJTL!RAXn%s0!K}n_xNXG|T*cY#dy2>TT0<>r1RN>#4SIx~g)g z8_f^*(y$*D*k9?x{SX2L?Ari)4fRG#r4VNy>g$1`D**Z{Xyq)x&RrNXnq3klS~`s8 zSBRN#FDyw6_`;wU87HfaF9PZ#e2^cJ5AwZ;Z--YWoL&iM1kgIU)N;Q$=pD-)o&)hl z%e~O-gv*==Z&&eBtI7nPO}B5L1(^?CZ@wY<$ z&DMj(l(857?8a7dgpwN-uczJ(t0jO?s}j>;?ru9uo*RqI)~&^6cr7oQ!?e5`3YbUD zSNbFlO5X6KQPn!XKdZ|1{69Nr6NGotV?u(T6B4{mE)v!N8&S2&_~%uYw^UllI>%_< zAypLK(WHrRjPQ<6(?Z2NUP5+n@h@CT>CK8Tlk;toRzhwKIJaaSKKQUR6D(0m0)_}th(Lw2LK_i+9*;6uDJO9hHfrL*< z{Z&g?`D>PO9jP0hCQ@sr6xE?Wp&zr&S#kKyd6{zFl$LCf%WFYP;MHi(>lE}T1=)J& zh1weD5J!D{0+RTTA9Eh)WAH7wKPR2Dv|s%^gXoPrZ6WxZUUm7)rvWZ1KQBV;|K zxK47uJ}7IcVmk@B)#p2f+sYf9Z4@IAF=?w@+NB6-h+=UYSXxxAp*6IEXipGcdY584 z$?;yrbP{r};yOuuy<$5v-45*R4;qpI0fF>MFG~TPK>%D!yS=9`p#ZwVl0|Ag{<7)|uZS z!yPgeg+2V4JZP~6>;dS~Y@;l~+J-80$z7pKpYj_mr6fp%A@n_LXDIoO1qq)%Xr1j& zF0m?iTbhwb)(MHK9_14)!T06hb0q?*u${-{Ynh@N!Xi`)u__1uo4k~P)evr3?q#6b z$D|C%6lCo(Ma@k2+cvm8eJh=ur8jZ6XWZ$P?ghnE{pWtuIX%5zQR}6uG2TF*QEBr@ z=UbV=ODQ+~B}MT=)`N=bLU$9juN%w9($urPem>n*B=?p4bdRbsVCBa}E6n?Y#8O6$ zS-U|sw^}Gcxv{)hI@%Ylm_oI4d!R-&o=jBZ=?{{~xRs^0geE3WX z)bNjdYIwI^$ZG0yFrkPPP8D>t=qSS07^w(hzMw7Pon2&#pe;u26tncCa7~I?dYL4O zS(@cbF;-FaXW$JconchG4DT`&-epoCdHYc=QC>-z$Yy68ai%1pQxL+h?WyEj3Ff3r4v~)=kY2m-#CgWBkbs-rW zRsWz{P7p0`$S;d_iDXEILy4>UQ`kYuL7qn|GxD1IgQjUYA^k4mO?V~xT9h0Odv(9A z0Zu4Ki#(;T*BYru2+L`m^mWT6pyc!hE=HAtEY%aMjnr)lRRf}*VXVQl>!ttlSeKj5VTQe`<~wkO2T!Il%+Hl zlO9$q5CsInIW3b@9pFQqmf_M7A{cAfryCt72g=kUQ0WMU{@a96%=7$j;{OR+@)O~Q z^zi;rGeVPYRJ;;R({ecxawXIFdfgw^~SOvz!VooyD7U4@HH03vQQWCB+StzwZ5@cJq?r)XMOnO~#!&!@I&8 zYF8o9>}z;~gg^4;hZD{|^PxbTW=&mR@9a%DYfW#6WqSQS+RhRy{W_)Taks)x$vUb= zF4eX(D_UnE@w8;YTR-RxvvL#!F}v*w#6>WTjiKv@r+ym)78 zuag&t?AmvY&N^b8XC#WpPeQR3D?fzDUSdA%kGJ&PCFJSR?j;Fb77<^Pn1Vb4C&J%VbY2*R?&xjmDI& zJho>|k zir!AW6*i}$lB%HeMYgkXv^VXgkcB)RKp7Q@BB@3&p5Wbf-m)uKF%KdP_H$P4CS&x~7d$L*lRSmM2nHp7Xi42Y zMGO1zxi^+25>|IlBz8aG8%k87`PyWrUi;8!sb&miG2<&nlgG(=Cf26aImr^9R9c!} zlW>RE$qZ~lhCc>g7BjR`G(}>aQ`*aNN0~evL;GY+hG7LSW|3PfFQ1o}F(s)TbR2RX zSrL?8ICHeuuTDNR^p^J-v*fu^OsI~T*%ujqg{#L`MpA);H+Ul>WxL186zg3#((C&I zDlpV9>jfRmv)!;28KPxZGS}y2=dh@}#zF0y{HY#9PZ@S0F+^ZXD zkrnqQbWo=kECGUlq@n=9T4FyDyHDne=^kZ9ivCfQDyxi^XBmySvko<#nh&okJz~$e z`-Ql3vh68xxaHj?>0z-C-(SNH{8w2g*Ye6azwLKy#3&Ab(xT}XI{m>j;Di8b= z+*{6S(=*FVaQr;jVC^|vSrzZV*NJPw4LUGzAD@NKTx7crb zJ1RK+WuhoKVZt5NATq}qj@RU}6l|v~4`8H8 zQ+=;gSYjWG&6c3kr;Ld&3em9;^BNOZ5%R1t@%M4#&NWzFsxC>tkmWNFiKf%M`XX2F z%A(kBd#C?bhEHm{PKHB%U^&%>yLzWjQQX#22{o^M^k!~3;$z(}BfZ{Z6JFoP61C6T zh$hR7=F`Y0;iN71j6~%|E0r#@0EN+Bk%cK)F9Bgg6pQ7mhSKhG5y>)c8?ebLvuf8E z&HoBwNQjl$Zc4N;{4$!?=%*e=^R4OwP&)Q>0Vi;N)RZ}C77xN zayH$Xzw%G2?IHm-ok`J(xX5x%fZ9DXJMT^RsxsTVN;Ogwcgwvd|1F2o^Uchr<*hOA zttt2Ikrh&KhG($6pWY@NUHg*JawRYv2iGuA)Jt(4mb2dm?W2|i_X}7z*p=&iTf(Q( z$H6TJ@?+G9sCk)PYP?lq6+dfx_*8luaLL?nzg@-YN?xm&KWvf%{%=Hu?Ou$|e{P9e zp%TTMwd(G)!urMb9<1G%;r$*9KkoB>y$$aUK+F4Xm_D3mdkd23uko(tr|picHYU6w zOwTd!Ezj|%EVgRPafv=J|XpL zI9~a@Xkc$zY233R7Ty$hHn+Zeay-0w<3VEgUn^$7kBJ%ZIxz#@DC6s%Gt+j5)li2z zSfRzyr0t$#+V1&GeBPQ&cVvT5k(;8;GDz;QM(6J6Qh9_-pyd|zFLQ6^BLsy8L2XfL zh&UWRbzHQ@2AUL^Gi6qcVZ`Ry&NNYyFn~6R8*C>TZ3M$E4uzJUrN;@gy5(xkXW9V(TuW|I;cD47H1*sgJO} z!Qk1LxX)<08E%bsl&X$Z_Ce``1gZX4-TM}{xoWj0-TQ3%7Cv@?cM9bB`Rjwn=mK{# zob1I^axMy^xh1ML0f5AuRn8WHkXY>|A4EWzYMjCwFr1=`N)7MZ3YU)_6Z0m96W-ktdlPq_%sq5wTh7p6B*q)$P0OeMR2cQ50i=&MKC`}nanG~HVFv2oQ6H1%= z^(x=ysGxh>X^!5;-MJ-tmwKHB3klp%*4Zs(1d zX1b$G%mIe51?6O?*n*1Sp;|paBs1#|(7;RtpKo+CD2vl0$=n9~qI^m6|NqD1fX@ z?LdJpP(xDYIX$HSBwa&-tUf~!-UKoBe@?JpF4DV*c%6~n%W>zG4AN`eadONnIy1F3 zT)9uk^i8XbdmfL4pU~#rC)bC!#5V2|llqmNkRFIjNEg@&>cLb+D+^RVs4$%LCon%k zhg?q&NgJxw8d>APn^YJqv4Ui27f5Vev{5GHOhI!^aUfR!H16CUU8-VFih=-Hw+r&C z5tKKktvPxFpYpI?_4faQ=}}!DcXiTwP+wf(zWIXeCJ&VB=<0fJd`B+cqazvCXtRBtQHzSy!sSYu{ky!N)t}v;Bq)ojFAGlI*lcY!y{pzF$|#}3sxr%n3UOtqCI%jonEq^$rB*ko2u(V| zFh9aDzlaa5Yad;~r{qay+j4o3p9Pul<3Zgeg!c9_z2&#@XtZn<{4Z9AcPnTXsNNuv z_{sAY{ivR|`p?_tZhMz@nBg@7)e_$X(`@A)OT8)JeF%V)foTV(8-VFV%R3sTEf9vG zV45c%rg`#VnkQhID=^LVV_~}eFkt#`F;38RCw&Y|TL^OLV=;pgaM3VrwGH>dV7P*U z1eQt)==q>vy3lYFvl1+VfN3IBGqk{f&VjqiK{in-m?na$BWRd5eVDeLU09w2(?n?0 z5j0E(#!gsEG4X(DA}E+HoOm|ol*KDZnmo~JTP6?kqe-eM!R({4y)19pZG19XUKfA{ zStG2zU4ieQb9kQwzo{nR5lpZ7>|BG;niP_D(v{#<(|k2T#Za+c60 z!Zg!elCu{6bVF3VZ&WSGE7V=WN`HDz#Vp}Av;4HY=B@P?!{21r?|f~{e{ITreNfT< zoDlDJ#pp|ITIRFh&lfwOE>NO?bAc?&Ju4?2^T$S!P;RvJ7pQ}CtJCrvRXyj*lJ*ny z`r6ss{wrA-AnAG8&WHn8shR-S1{tLL1K_h=6WcK0#J4{O%v!D1{Q_o>+qF+%r9N1| z>~sZY{RGUmWWcOWfmt8HtnTFi>sJ!B+l1MxHk$9irb^bkjs7;sfl=M}DtKCSo-YSj zLfNy?A^@$Is!svCDgmm-%M|2w5;0wxQ=|O)@sK!oMI}y{HH9Mr3 z2xO&d<>O;IwFbH{3u)~2Fq#F@OvO70r18`vIfrW`Ie}|YvW{zUvXZO9bXVt$>t6$; znO-iW0Rp-8%Y!t&A)kk%QJKoUmF6otT$MO&CMo9=^}t5ZO5 zUx1o~+?1P<-o0%167WP=2vMCTZ21QD4@8|JwP@ar=8}DxzE*8WG*SDJ(Y#ryGur|1L?t|MJ3@)}$Vh0o z4<-Q`nyk>YLPMVzIAl4Vot>X0aKHj|gNFVBlJ0JRW0nFABq=giGg!z>F_Hv{0;6`E zAftgQ9`Y~|<{?)bQ36^iW29wAR7|OK6rDkDV%Zr)BLYQmT)8#%6)U5JwY|YlkuEga z?F-BG{>aF{Q*3v-rcTc5iOO~?;04}Zv1?y6mZyq=o9o^Yn&{r3KvzJk!hARYT~)wH zci=IjBFR&MuQ`C+7Zhn!irW`_#qDNO7`b}1O-8DfdSeT5e!?64Vxkt!J5oeyVl@AV z4_g1jjwouh1bTVUXr3&kJA3U)wi@gJm+cU)jje)b1&muRoWA^LlgqypoKoYz0yurS zdvf`X(W2oLOe2^IT4$ET0mQO;Z>ExA)fhM2z#!od18|Xhe~6PJFBvhtw!gZvL<4K` ze1w9^A}hED23mbP@NCj%Tz3k3eI$YnIz!7CxE*7N9VdJ7Z-oNEV4ZQ(+PHDgo_P5E zn6o1$V#Dx`*v1ZfDy7Fo50QQw>9Or}qz~+s``+}iSY`>kSe>pE8?B5zkbEmvN>veR z33v`Z-}1)24M8XWx9H z$}*efgAi4oAgWv;s$3zeTp_AlJ1rk%LD`89`BVZ_jRhX_a|eqjytz4;{8M7z65d0? zzDX?<`zG8HJziguUaXbM{`kP{v&8io{sLI^l5l3A&_<*c$fwKVvY3n4+ELT+7GVV! z2ZN!5`L1Z5nv5I1%)sVB?wDN2-R_&_U3pZn$W1l^vtOl>C>iuUu-@zYjxq6lGOz)eO--gm%dcNk0#``|F||X;0}t_ojcL?j7ky z=75QPRf9}`I#wP!uix@n1!Hg$tf124h>O-NtCURFFgvvAfOoeNx2n{pdv|o7niw}l zLtp^Y)BKI?-Vznff86~=bSK|M(c8o-4%xxo(Rq@9T+|(La+AC}tR1-z+T_dLZ;3AD zRTM(kbB{Z}h~CT{!Pza`M7GZ3tvv27`rTP^690l{^hsj*&X?P{!2}12qz6@5+c$5^ z$l#k*0w|^A3T2aYBAJ(j=v;14#b6T$PgN7=vY0?!plAgIxilF!-T{t6;fn2102@jf z^gM2u&|9K2;K~w1;LlVppD-awhj$^;U#EHxkv<%pk0Lh&ww>R*;Z(A1S;m!YE2xlK zOpK9cOFuT$%NpaL^fo;@2ID8wD?&2970Ec@F4;e&OY2<7z5vaBZ+(dr@)%bNsg^=U zddb;jd4n2VS-#Xsi5R+(ujqOJow~E#Az#d@C8c}}z#s&py&;QCx9DW6^^cK+vwu{i zH~6Dcc4JwJp%5d&7wXxcf8z<%d(eyNUy?Qas3dN*o$(Ab8->FgnCY^48M7AbANN?5 z@3BB)HqG4#jrr@@zY>H;>b+q-}5%5m8gDyP~T-QjdF&t z-VDF1_FJDh0)xY-q(D~tRpk%Ca(2d)=M$sl73vjt#3Bh}CuPc{jgpGoD(7o5XH@R~ zCh=jc7H-O{7RuRrcfQhUnSiNk;F-5aZzaP~?%-1}lc7mOiICeH57pVvvP80ys5x=?fG`tNT%h^pR*F z?7FZ(IUbkV;4L84hIcLa9BZ_2%)3Cey$yzUysW*6JBGO6$rvBwERQOT8(#ng^1(z% z`zV-yT-1!iLN5mM^C1p5TvIQ$tj~Or_Olq14$pM_y%{aBh!F=2Fk3$o)3@zv(K99| zh3VZ8EtNs`ZqgDju-Q&pCxU&s%TJ#7=|}Y(BEI}2T+#;5WjW8~{8zyl$;>MQh&)z zDxMxiw^LmIc(jSzd2KjF6yFniqX63mTg5*nc5xf#kCjEGG8NmEFb1xQJFTthlk2_S zB{6L5VwLOYFyYSGp?c3-vGDeKXSLYi)rVKd#VQN#yc(KPjpKpuKgm)eJss|u94BRS z^z97=YpZrb_@vv_zCtLC zWCL4PN-VicMk4-cD~d`8`v<;4a)wfp%TJ!Ai-YGz|2giw>%4;TAPeSr_}%a;8xL;O zrYZ2a{~(c#s>iUJfn73|og%sl;JK8vHZ?6%cTG@GW@HJm^euE?s)9K^_=8R-O`ASYZQCtM*XTp=f1|B~bcQKB%P`IJW)%}&i*5`U_yG!{41 zK`G1@C@gc6KauWMqs%IVrGU*+NXE!|gedYmi$yZ?r-zu^EaJoNp+;%HQ-oFs{OmRc zic?P*>DH~dWW={u7@k@)E@tEy^UUUGh(t#7k9*2^txTS-+#KObNxS$;8u$wGT{Xmh z+s|RGGCr`k|7P4dUAwR`F=`OHB$HpD)CB0Iw&t0)M9aC$d|ttKsbmxni~}Fl z+k}84Eb2ZimO8v>G{4G&?Osq~54eB{uxHRZQ#;Bs+qB^ZcQr`@ezxUbNMME6o6gau zGZLxi0*vAol0|(9Zjvf@V(ZQ#V`cKVvwb%k%Dsj5u))?UGn^KLqbf@BOy&K>h6-nj zG|&KHL}5IO%*yB3H_;=8l>LV9<#4(m&&vtdrcgx2CDZ-luvvTN;=vc;4?xWbcgi9~ z8$;R7yK3RA(9HdU5L60NICZ^!O<5AMI(h}GejSVYW@1^+qbg8#;Mne%?W5hh`wBCm zSiUm4FShjR8sOju29L%)!-p9U??e!$(ol%L(+O%+vx00ws%3mLA+m&$4hwLK67bfL zX~KCAiBk^l80|%|?bn)lU%-nHOvTr{DEj!@s3F=;A9?Vkcv1B6@S^DB;YHEM!;7Mi zKPF$E^%=_3kYN86$kPsHc~QaT*%1+LMMgR|M6(u|bFk zMr$EKB~-&~1rN%?2{Ei$iv<*Sqj?de#bm~r?gh9R+9C@`q^kF*_18HF`@fW^eN9=G z8_nktsI=(`cOaUoca??!IjRcA`<^=7GZ3K`?f+)a27%Y^d{ zGnybS1q?TQzgSGv;rJ1p*IDHyn)Mo^<%Z6u!rtd_yC^=TQKcj2rlT*QN(r1F*ZdP}V%&|EF zaal~05~F#Bpg+tSaRh}w%G7q|%XYN$1M3PnC0`{k$nI~4Q^H!Mn}v6-Mjp7y1J_T< z_T&B$j6s%iiZEG5MGYC`5LBgTrZI7)3R2Dn1F{(q#Dt6IPj{FQ#3F$&K^HAMP#*aM zuSuTetjPhXE~uX7%7ot$2v#;Srw?JHP3E~PV?;m7?jCQK*g{K-%HO3p14bTsP-j+NBYZBAa;(1ySJ2;tkK+4RZAQsPKPSLCLjtliVDl;o{Hd} z*21()h_l;rYZ8^K13Mqtj2~#N)!x|}h0#PK!)~7@&1u(2%D^5B#dL;2I+W_#a+`9o z`)3APYHje>!)kZU|G-L2R{YPBQ2SBvJnetz1TGq)0GD#jC}klfU{(O!9X==tn6!Ug z@+fcLEVmrqMpPiaHRA%b=fc~hH6H^gXLA+J9-xPY)dxLcVU!GgDZ_6&uZrBG@_7@X zj)~F=RwZAkBelxt2>y0h6_gr(1*}SrjzGFSXH zhN_%^B3uMHLOGPPtkXKu;|E&l|F=z&9x!ttuZ?d zcx%diE3hHA3T(*lx5%%X6|3ngSCw{5Ij-dxIh+>6>2{x}t@=g6Dn0^2d%b)$Ko2 zQG`)d(&~)Ivuvj1=EATJ_`IL#vpUlYUeUyBJCy1Elk%GDXQ^~)wmWot!W9^mMQ?JE zl0PTU4P?(dQH-B`2vEQ?;@1Rla*B=!K8pU=wl1A-e-xUk*sz-Bz>a9M!IS$RO zK%ZD46BUcD?;rmH`otKu$uqobzf;I&UHX#uG$BWV&qgQT6Oa28fqbq`ui7oWx;Fid zuDtv`0-@0I3T*t+KX|;OV~pwcG9yjf-OI~U>%*!eCW_f&@Qa;m)*ck^coru&%DIin zxQR^`p2bW=kM1yZwNKfV@0gYQu#xGZT&vfvx%@K4CZJ4GN6GXsYoERR3&Ib!{EmE0 z=c*FZ*%IKX)rOqEho3adOa1^$wEHDW<$JhhxD$^roYAr_`4ld#M1}yl2^0)p=licD zr}n%3^qAG|kff@OH1jMIoy+n+N-A&g9XhoySZsL*p$`5+BzmsD}=2HXjy3FmdI@k_hMu9c0~DWI39((0 zC9C&ax%r;D*5aw_eXSaQ4y)as2mH9RFDk4s+JV z?vofsi^a7o|7Frb|4cpKtsl7=Ex#foE%%lozh8rkS1^6@P@ZGqt)s zZAA;O#%xiIXl8U&bpK?C!0C3H(Gh?Dx&vfzlvBgx3inJ~{QS$%+|?T=|BKbY)M3x+ z%IFDXh<7l`mD_I^Jq+x4N^fJCi=C*eAcoone$bRlZ9jUtk=$Y~yxCaoN$s9~&I!8z zfWx4j8BpvKcMOIn;oYT1QP(~BWqmLO=Roc85AoR|Kq>wjbI+|xc>dV`vp@C-^n{yc z*ngQF_J`$T^1AfJ8Tb>mbuVe*y@5kX3-`{;XA_igUeaUyCS#1eM=Nw?t2usbY>shg z7S*_(rIrR<_GuLhbrH%~8QZfK$bFCA_96Gbq~buX9J-|;*J$~GIb(Y%)nZSbj3X$G`{Egm;~8$v?@BmMmN*#tG0DO(;fs zMOC(gd=+!z^g3nud0gB%K7D|pQh2r=Lgw8sPRa4DCpUG@M7`5LeUwa-74_~3U4H+^ z^c;p%zH@fi*&5n@+b`}Mo9-v!nf)XQ=XpJ*uQH}jFmKbts73a>@>sbi{RIk(yOD%9 zO3e*rFkA2ROn;m3dbdx)2&FGY0sy2ZydUVg-y^r!eag`Gg!I4iwcahW zJmqek*^&JkcTPy3My@`gkn>^TeVLc%X^dvL%fKgNaDjy*>0g9-pls`R&9r| zd?E$NDOWd&!9H6`U@*6_wLw;{VryzU+r^(B#i*KsnoYNN)Mys-BIT&%8DL2}YPnrM z;nYIeI&<)#Y*F1`l>Clz(lS^%X*phH|BA|9#8jzwG`I5?4OUH4QZuRp#-t&-KI#Ju z5vw}f@nzodQFK*x=FQ|yD*_~DBX5nFZ%w>4`EObkX?hQcTqzTFoAjFZfZQOeE9LFl z)pFA@Qty-)EpvfoIgQWsX1xzIptVGeZ!}*nV~}e|8ofpq$oWPZfy$I+qj)w`+tz&AQ2XQ_Lr>dWtQ{n_^4yrr46aDYhhUiY+OeVro^dClH*B8b7^{Ei=W|tfVV- zjLZ}>-AhYkcZLb83W`lQe-Mc)`%m7sQg7_DBVV#>qftm1vy5Qd8@C1ntdEr3ABAG& zo59Zh)SGN&VUmWDmnqNT)_}fI*%gFZsbo+G9DNT{ADW5#m=dZXR66h^W3;@dG@6)` zTH%id!O7QHPE$$3naMt!!Dzn8BfAa9XpwVQWCw7G8GgmW4~LdGMzI-_ntSJ?s*>Z% zl@{O{g|lBwUX-bo_-THp8)H3HPr$F`E-506CF20wxs=YiRMkYzGo&s#OQ)9qCZZ(~ zFICkLgepB|wDhE4MfP)7g$Ir0eS67-7$~bz5N^O{txSYDwj7rBQea!b4FWTpYiS#5<8)?ZMPz_W|=fDlrn`7u%X z2;X@jNF?J}U2z^OyB&jr6vHNuG^|4UVJ<#i$vs!>HDmb`tn@~CQNJd>fXG>$u2twN zE@+=~EWb}I>jB^Q_fZKvaxC9ZkjWk~RdJDAl-OrdUjZIXFHF&ucLCZ)^R;wQ29OkZ zlR5xz8By$=>$2coS1Lh9%Wq(iRQ`as46o^&DT!IVCDKhgI&bk7hDp65N!*jlf8&<<~xQ~`IRq5n2nQ?L);a=)PT$58HhOb9qDBob!jmTpasv>p#z z=Of11@H~yVVq0;So7J))JQtoSC&Vi-&PG(8{VI+eO4uQJ4aWlvVfa`4)9Z=8~g-vDX|8?XR0F;yTwmpI4=0W z$4{I$p?7L#@lyhIVa}#^^*|6mQTxK>Q?O&tD?9xo6|s&U1#d}*rJJ#t zOgN9GZ$^i#AdM#JJ37LW-vWIZY+t+X zd=+0^kZY(r!akje=3I_a%Z%=$q3-sR>E5IX9gz#dWB*Th3p-R=`mFEqFa5$xkAb}W z;`pa~tmzm2$qC~LdHBRZJm1)_nCF%Kig|ADSA3vfWM{wPpPdwXzaQ~$IjQ*9Cxvc5 ziN^=!0_cb^BmajyHRFt#Me{=PrhHFL4>G z{2RdAXt8Oo+~`~qb&?w)0uotHXUWk(ksKu)JY)HrQ;;i@y~;q>CFlJ4d1Qn?#3*e;$g^{lcemQOohOL0VC~^$ z6Cw<;u;eP`u-wvM*|s_>4}z^zBe(1|YHYQw*$Qqmnb(kCm9EKZ|TAEYlV zc>huGj{M5@exqeXO1@R^{G&c7J^eOukYC}RBu9RATKXn}v-Kf={735Z)qjnAYr=== z71SmpKNj&4E zZR=KK)^GN-!fVp25SP&v!7nx;M;hhq^-pdR-G-7}Wu~8;5u>JG^LLrbkN^azTa9HK zcrn}B&^UHj4+adW#wYOCY$am;aen%$)|0*x4)m9}4vM0lS{ z&W`)$o%9~(&)AjtD}D>htG94_G!WxpJRrkm#yb&5y$8y2+2eGy6}+Hx6Bn4m?m7!t zZH_F(C1$DZj706Tpw#k4B567YLygC=OK0LLTfg2iSCy^bZPHZPlJ^~%>l8UuwLb7N z>Yuc1%b7uE1Zzw;Mu&3du{v8hM)8+X8MPe~kalCQgCGOGVP86UzjYIyrxJFGIF7ANR5` z{arNI;+WnU#s35{y@vLWBGaq+A5ErgBEW?*8ESX4nPrggA=!3Ekm2x*i)9<7ukFsH zhV%HJTTbQ`7yyuw$^V23OZl&@RvA`H4LkX-bw^j*&L|ER8=<~aKn;G?0eYyQGopq9 z>Ttvggk4Sz=hm6tXk?b>n$n>ycYL3Le!E-6YQF<^G##QmpWdoa zqI5(~4WBp;+`jqf;{8X5Z|q(C>)xRUdlRs;w**M52s>8swxrtCI@}%)T+~F3?$a{k%B=Fa^UG&V znSU{HlQXBxDIZi-t}+-mbGoGQ^H@0NlFJrO4+@cXpE|9pcrz}ULzY4J=0pqWKsrtL z`X$q*&q-b~;}YqyS#vM0m@{Ka<+r5XQf~6{x#gG4o^mlGG;OZxI+bG;W8v4q?|kXi z1(#erhm58&f@kDpb;x{1k#72&xeG6znW<}Xu9P)>-X-(q(jDb9=&I@SDW)p4X!_LT z-1%pmF*z}L+VmMy7S2jeRs%Ur)iv8kg{>~Af%^Q#@=(4*B1ztFY) za}Zh%TObEh#<`F+NI1_x+?8Ycp^Z9%F2eG+$g(fMIVwvNB{N z;XH1;5xbIg$43I#Z&{UZ*|nRET!om<0IN;)Lc(o;|6{kbb3WXbc+H;&FL)_j)&jV#nJ}AD4Q~uACPy0J zIvQ5$yK2^P#7Q54Avr>LR9MQnh{`rlQK|66 zQiNKz_g&_yX6)+}_Yw% zWGrVmz}S<4zfvebuI_A{O3z_3)~oL*onY)oQ^N^BN1{C8POq>z0LpeQ20AXN&<9h% z*ps0@y>*7nVpT)7C01L`@M<#D-`xa^{RC<^n*Z@UFR8Q0&~mQf{{oH(8*eHov%KM^ z(Q=1OLy-jv+?OIDDN9tYQSJdP)b`Hph^1arjC}VrWRI!%a|BHz`H+D5a>5ijR-u{i($HG5+XiO%YQQ z^huTf?&1gyk*@1cj~%LYNP`pJg)Gh zu3fW&PaK_%FC=-AU!f3(9g*0kHb-ycTf)H+@@4=T55Uk9CDbO>{tf^* zV}*@TQUYJ?IJvZHF+rB2TSbnkJ!vn*Bn^Ah9n#^>Yv_U!oZRPc@E+;)8=JRLCc#GD zjGJJkuhqWyWur_BHDW`I^1aVS8GP@vQKn99l)?ADY?Q%e12{Lk|L3p4P4H*uiX!7C zxU=FxhNWe;!bttFuE^U6RRpzF#ssyPmbFyNXrrQoTAY#XN`<$Co`UG{qn>cq*pXS{ zNEDfz5CX_vK7*mwyO<=Wlfo}JJK8Hy*!HH)#x3U?SSL(l1K@SU&F*}VeEgr-^W_@z;o?K_^A(r@ z0GdjEIWOAYcfcre z($pjpDFZK!jK#o9BjXP<$oRtyGR7Yd$QXY-AY=UTfQ&Z@GA0X|k@=jeWG}qz-(Q?n ze%F0bA>;0Q09HKV4Feg=NmBv8UdT}##z|AcLgbw^mCr)xgQOHgKitQ|g;;hcST^sZ zseB|WCn}}ZDuzBdX-cy_!C_XICS%*HuyF2CQDfBNp_+L-z3G0EDr4v_e1bBOkZ10&6p%vRbtqtT@As@Uz6qK zN2>W-xD57J$8s>Kjgh^tOwhz)GRWj&{;~RTmw;?UW{QLt1%l${O>g}FC)_+oz?(U| zay~bY+ha;BmctLBkgyElV^b<((l7s9^|bzWQ{RT zaq}XmR|0x!$oeC{hKI+^+wLb=dRQ3Pc=MU4!hEwR>XOMZT}1TGyc}+R1i&JkyztAz zS(*)pn;#A1Jpx`?#Pv8V*4%t>(qaBo#OF1(nWLHPn%l=R5N;lMzcU$b{#>~EITh-7 zYDXmNGb(K7AQMk<^I8mFs7PRa0XIJaZrmLz2rl4z8=$d(xR9X zQlldj(*1<9oz;<|B>vj4VErVf4!&rp-qZt<58v3VDUM!>Xw(r3NzHb}&`X4F`1yD7 z2^&z77I~0gAyw3(p*wEl6KfTt<>i2qKt;-Jj)A~jb1?4QIm^~)t`NQl=8x$$5uoO< zq}Rm=m+6WjY4Zhq)p`v0eH(t?^!fcE>O%p)f3g6xvsLl?J1rc0VK2aXw_n{6et)|f zDEEKrdhT%eec`2LlWJyBWTq6q-#02}DU}BNK76>is>q2&2+INxo>?p2Fk0TkP(kzl z?lDR&DWtt5n?ju@E!=`yOw=T>S7wC(${h*5#?UmMSJC^?WPK3V>w}D2y3+I_Lb7bV zkbMA6Hi5u}l&AkgEVXJMGnO~N{j-2y*iSr3sij1h!6Es5oNO z`v<Ye*qW2Fv**~!3Xq9Fs3dqOl?OAB_7lZN>G{h^6P3iZ zs|AxMPc(C-{rR$Rkf+t{u8COdB+e^N}7EWo9Y)DA05b`B+qKf!i@4Q8p(KTK9! zVceVezX&97wl6t1^Cjnp$WUY_Im&|XlA$OI#L7g( zCsmDmHn`f%&NX)bi`?9F&S4-ijA0#Mx>wQmkqqQDRQV-g;AC+z%%8pa%xl7(09TD& zmOr}_?!~MH)V>gC%j9ybZ7NJRK}H;x<6yocXWFk)COgA?nvl<1sk088t5^%@wE|#; znGQ=Vn#`i3h5}g&FiMOL1+W&FfXU7c~)s4n-Y06m{rO)S-JRzCNA% z&{F)r#W6e=g*ho=Yy`u`HK~W$P?msQd;H+@r{-jd;($D!jtsf zCG1<7(HsHnd_Ig5FPT7ygq}2-#YGG&1*{IO%BQnpoqpH&eEUC`j=xt@_9EvU>-UM} z_4%iQ3(?22Ez47WY5_{auuKt|+~RN@ZF!S(Gzg%n{I?v}(R|Bs9nD)~w&J`s<-Vy+ z$Jqc|?>IgL|ISDmEpqM@N=9XwRlHr(CSk~h$rg2J1bPg;M+!X~#JZ$39Z`EQScl;x z?@sYQAm+sN1TruSD-~6jT;xH4UD}jy2%Y5ecGP0??OL@2whC3hVU4?U5 zd5kDEE4Ozc51)g?<4qKuhf+ae8sQ~;Y@%&tFcs4xkHGj{_9Yq38(^JfZxa5u^pg^K zus;cbIQx?@em{go4#s_IQ{CTL9BGqA#9}LR$R2Q>NO&_4d5CR0ic2NVC=@h^M>b!> zsby}RWfdI4f(#9zo0g#!%DZi63kwWoD>KZLwNBx3$W~G~Wh*nRQAfxZWh9&}ke4P^ zgc64r%G_n^)3t3%*nzD~N*;7R`GObC%)7VoE#YhnY-I*7vc1LcvlM2}XDWA#mX?RJ z>dnf-EoYsrwwsGQ{D4)tpOZd~<^Lrz@7leVvx_arzS;Y8cKA6XHI6T8GrKPf7uQ7? z&*S$~q~TWWc6N6V#d3BeD%-Lmlp)uoI1d~z#dc@ifaRZCX}KiBhrC`sT9||@M?aQq z1Pr9$;_ZTkKkB;#7AlrkhtvXzjw$8Jwp9cTS_W>WM3yKW!_&uZTScaT@B3mTO4p!u{F;WTO4!v#Fc1e0vCPPHkoXD!IVZ>~l43$+38H!cR;bdsK z2xx;0sS%lo$X05I38L7ayJN{r#I|hT3~DHy^6}eNt8M4BV973)?dSl+u3vNj(sr>3 zlD3OQkmYQ)adi_|w`+Y;q4p2?KHWK%`RCiqDC>5Se~V3w$ivxk>|RY~qZmYyg@257 zJA0L}hZ!Z)QBCNCdkz}g5!6r&Y=)t*zp6sq*NU~2<(yMt;{sExjx*Nng(eJ^i~QTU z8X34hzujTTz%7~`Lk2z)8TdJMru!W-{ElRZ41AcWY+~rpj11g%PgFZb*n{dN@tG*| zz#9%N*m_9asO+glH>!i110lzKryHUxpOy%aDS7iWKZqq+p*S1!xAl+ij(6 zUeF_oZuIXcju=kquG4az?ptR%`xD+Z=tjks1uMKRCEIekCpl(mMWMMK*b!O*DFB43 z1w9nf3d?ys(2d3vDJY~Brt=u{5mG=7jgmtltuUR((bzx=h@eOTf|?Q?(HGcY)_Cno zO$yAmYXeeHNHORZoc7))7*Fqm61#OyrV`Dljpov5zE7wpo||#On?1vYO}L!Pp$`D( z@SjQ1lI>Es^5T}j^`s^K9`#o0Pk7|}XCuz;T#8h3Ibr>TdbjBlaDCC3Yf5>^qLwcO0?r0H~X}tLwezeeMkN# z%}xyS5&MqJA#Yt6jdU+xK4RZ-81^0A^3O-)!H1N*eulE=Bl6%Q^57%#;3M+jBl6%T zD|JL3d_*2B@Cha(RO*qwtS4n5ij=78flsiX*pxeFHtCm5LS*X1-!{5zv9 zwkmhxnSt}&IH&NnA}joC(nxU58T;mOScNj1GXh#xa$H#QXe_#wN&-nbTbE07Ov%G< z%84)Pz|Ko^d}-@_x?a(-c;H{u+tdndwYAa=e0UoaTI_!@YacU>;cunKBdr&0@!KU? zlW#eTH0KmvwCN@3Y}>O>OY1_RrDyTZeekdihQ&R^dwGoeO8!H0mYukB{}(@3C(og! zGwSsFeo4b`tK1uZa_gS6(9wwF`OJT4#IRv!lvj+uXyKgX!t%jYHC2PZdfGzuHt6a> zgR80sR}HSz;iL+M`l>7GuN)f+Hid*=5wlPE4Mp)j70Zf;^{Gzv9MNZ9WO0w9`c%jIRK)s}5A9P%)S-P! zMjSnaWJ-0#{dZFNY#u{1dBh}-9*Lv!6AwR{=#u_k{^j=t*-=`Mo&uK@$0dDaLzoQW zIi;Iq5VR|N~%ZYZXX z%X-H8)TDZi=rbmAXXL0pH55znG$Yeq^XNK~&y;rZTbSuHJHO9Vd*glTB2``V*~p`% zPC=U&(&lWPMoXP2Ft<)|sZ*Rf%`c`-WL;3F;YT-;--mvkPL)oj5B>J3yhcm=XpG;! zQGFUCUp%VI_MLrnyvs6%sya9JAa8!BlyFgH04sid>+}0C-e+kz(yzM;lf03C*;6dP ze?PoB|Ll|2c^Y~5Rp1Z`t;v*;t#iS+#{u%q3|JR^96LI4Zb_G41c;@a#eO;cdh=4y z{{`iYkiL1L+k$@9bwMMJ4oxEKH~ezWl=h62aR&Cf8-vEkBRy!&YG7t9fczwo{1j7n zJ#+WzJ|)BYG^Tnj>v==5S9D|K`;3LOBd&n))9o*5$L)SO>%|*wK|4D2*O-rK$C&(f zNdCQ{Ve&ut)PD^5Z}IzQ7YCcD$AbCRsgE{3+qp_%%1J6A{a*&2>~ zNr1Z(KGZa&H->2PlT&Awf>2c^v})m;S(jWoebyDZVUs70Iw$!}?Ni#Can2NLMt%L1bLz*A zJZI44ZsVPk96WEzCG)Kse1p%Md&!(6k?To&&S{f_)PoO^dU8;ZBq60=;MYlV@zkl4 zr#DTVJ})_$#?6{ul~=!W4v{k3%={#Ws_LLxoM=y*3V- zljquPKY!w^3L4x^`a;O=78JgbkRuPI+p1-hyPb#fH8XFrQ+z>k%KYTQd4Ben%((;~ z`19va5zMBce(Hkc;M|w&eBjHVZ-%O-&Ye9Qm;a$EeD+VT8Zm18SIKkgrGAdnXHK3m zf6DCXAf)+oDd&Iwn+pv*ri*Oq{4gK8%VIEO@$ZxL%)PtxLJQ@Wn|>7UhnrsLm;8hk zm7kP9n*YO1FZ_-Ca?2mj`{Aaarc&pZKj9Ok55^|9{K=mneXt(QO+V!mq+d#0`Q@g+ zi1)*7|Me<$e)_4OApMFi(o3HnZuvKNk$(CoNPlY=>1TX`^tW}9es&k>%L$WZtIulj zqSw;SD1bfAG&J)z2kMvpqn{gPc2#~zoo$DFtN^eJ%U{q<`89s|*Zch<{dZCq<*)Y3FYLdjf6*1M(6`LB zu&pPMztsPStDpXif^iAjFKOf_hkJIF{)Hdt?{oDna}Cl3_iy>>dlr;4=7&0o zl38U^hdPa44e1KoB+*x1q)RCE^OgQPh5w-b!TkSEzDvx)^2>itAU`F`(vRv|IDWq% zeOKjgn5N4Yx0>>k@}vA0mVXq8v#av!ekG}V*^Pcw*TV9PN#9lZ`)26!_vxD|UvPb4 z`ImN6{?hw&p&!@(GrB2%r!OGR?f;4{%5Uwa{4r~E`AW8=AJw(6{SS6ie&|x&@U1!R z@83oF$J2QdrPKIt(1j}5nSNB)!t#$LeOLXzb(StTxBmlLDH#RucTqRxH@>I~{kZmD z&`tSU=5%g<6 zy>e1JKT{`D@GG>wu>K*|9}=?w&4wEPs1pjz=l%-I|Dc=lLzn6DSNMr#{(hbR!t&*~ zQz4OnVcze0zx*J6@Uif{59z5wr{4;{`~Xg*{BQ6dqz}SR_S-MKP3~`nUw$+pI^9oS2><1N`g?l?G4(xYcM#f0`k*g^FuC96kKcwI{6B>7Abl`?vUVg2g!RO?}Y%X_~#TYo>eJwlv>)w6{5CvD>R{Y4T>Tx+Jd-lw-$TABCW7x zE6{Bz{-OK(&D@*!&1AkUr`w+OY`vVxd+#&9_nZ6f+?hLXW=P!YC*D)3zd`fbKBT#O zbopekhA;DQWJWx#eZcleCce^4%idleEwTpIDzrJeRocQCgRy zZhN%N|DJKX-?i^LY25A?tpAtmZR>N+^_-Udh>bsQ+`ljU*tl;u5^Cq}baL8k@!qWq zIc>JQu5SEexF{A!*XH zf=ZgaBdDYWjx3trHz=4lr?oi>@@Axke1lj^ynn6Rc-S~itUjcL^g?ypk`^+9jBi$2 z%h}h~Gtxp`TZ6nBBTeA%n;KLl-V??P_Z}Vbr%3#_iSHoZM0~e+I*b?gJkSvmf1LP9 z;vW$2BpXmVj7RqTPp<3ssKL9BN86`VJgD7P5r2UAX5vp1|DJd{jCb}tOGoLNL4KR- zdIrNQ_Podz;y)AD^}a#cNy|{v#m38le$eNgM7)4_vAE{nV-7{q&8E;`{EVI~ld|0` z_apIi`Dcs$Uc5*)t)Tj>5l?Tq>ne2~;jrt&Y#Q(040$z7mY)veug$;0_0;%lzYjLM zo*IAc_tcMFPmRAeK2tX7pn6UvKA(6a@dLz<5I-uO4&(A6(;@?97Zc=5#NG9!U&5s5 zJqcQlhzEVHQ^fnr`V5L6Mm$OULE;U>cM{)2{B7bFh+ib$M+RPd4#sOS@8{>$5zO;k z;vu=PSW}mbIN?OJJn5J}!ktlCQxkG-FG*G<C~xn#Il#l zJ4&6nT)vNls|!l!${iKsoZ`aLj2gMtnUN!J&μ9`%YOvG;L!SM*bNXPC>Zdbw3^ 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⋙&75*}XEmDub#rRjm5%1RkJi7~#OOnRxE^GN6nE}Wh_`K}Gt8f9blc4w zg1Pa}L7pzIct5@mdAfqT3FNibQz!d(OUm?x6zhA;`K(5t+rKw*HH`1wy|=nQ?*{Jy zu76)fi>B-8KJ$J|hx0tWz@G!ReL!b-hw~>_L3|B(AMnHAx@`OVwSHn;+xTjT9|Gq? z-1zIgnKeGQzn5vXahu2X(N}%(_WwtBhwBvmVY$WNy4*e4-pmEYZGPLgwn04h=l=l* CAof%M diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/demo_ASIFT.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/demo_ASIFT.cpp.o deleted file mode 100644 index a897ad516e000fa6cd72fd1348255b4e52b03610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 xqCb)0uQHt4$fKGB#6k4AqGX*OVE8Ev-@c+Hd>) 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 diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/filter.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/filter.cpp.o deleted file mode 100644 index 282ced0db612ca9b699de65489c48ef896cdf414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25552 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 RAo{r`62EU7Fwt7|{x^!CoP+=X diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/frot.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/frot.cpp.o deleted file mode 100644 index dc43e72b9f67fe088b2d6674a688cb3c90270ffe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4560 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 diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/library.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/library.cpp.o deleted file mode 100644 index bf04b6427d93172dd88be31ed9b9637a8ff74d9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38728 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 diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/numerics1.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/numerics1.cpp.o deleted file mode 100644 index bf393473fb018957ada8f16e1fd630519b7b003b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12328 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 ZFTobe%-z!s&6VS8u(xAlG}&`I|4;K62r&Qv diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/splines.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/demo_ASIFT.dir/splines.cpp.o deleted file mode 100644 index 471e7d8bba49085aec44720502b840924809e7f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16928 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 F{y$R$#P$FH diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/ASIFT_matcher.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/ASIFT_matcher.cpp.o deleted file mode 100644 index ce4ec8cf6eb06bbee32cfb8fd6b4388cb74fb5cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1483880 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 z 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%0A6z3L;MWl@wA=#c~(EV3$uE!eqJWRc6CNe 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 E8n!8g#JL=6BGH*;b*Y>? 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 UO38Q$ja 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�O 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%0D!Z)9h%lTJN=mrRe8Z9AcV4SXB;PvD#v6gzys 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 z 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μ9`%YOvG;L!SM*bNXPC>Zdbw3^ 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⋙&75*}XEmDub#rRjm5%1RkJi7~#OOnRxE^GN6nE}Wh_`K}Gt8f9blc4w zg1Pa}L7pzIct5@mdAfqT3FNibQz!d(OUm?x6zhA;`K(5t+rKw*HH`1wy|=nQ?*{Jy zu76)fi>B-8KJ$J|hx0tWz@G!ReL!b-hw~>_L3|B(AMnHAx@`OVwSHn;+xTjT9|Gq? z-1zIgnKeGQzn5vXahu2X(N}%(_WwtBhwBvmVY$WNy4*e4-pmEYZGPLgwn04h=l=l* CAof%M diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/demo_lib_sift.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/demo_lib_sift.cpp.o deleted file mode 100644 index 14702e601964b3998ac2e2218583c559d1c9d0fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48624 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 diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/filter.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/filter.cpp.o deleted file mode 100644 index 282ced0db612ca9b699de65489c48ef896cdf414..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25552 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 RAo{r`62EU7Fwt7|{x^!CoP+=X diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/frot.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/frot.cpp.o deleted file mode 100644 index dc43e72b9f67fe088b2d6674a688cb3c90270ffe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4560 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 diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/library.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/library.cpp.o deleted file mode 100644 index bf04b6427d93172dd88be31ed9b9637a8ff74d9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38728 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 diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/numerics1.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/numerics1.cpp.o deleted file mode 100644 index bf393473fb018957ada8f16e1fd630519b7b003b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12328 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 ZFTobe%-z!s&6VS8u(xAlG}&`I|4;K62r&Qv diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/splines.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/splines.cpp.o deleted file mode 100644 index 471e7d8bba49085aec44720502b840924809e7f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16928 zcmd6Ndw5jUx%ZyT0Aq>SJ3vWPBtxCH6U2N8No}H3vS9{iWTH@@WWtyba*;?NNH&TZ z#dZ?w6bCt%ww|8$Jbpc=KKA*}sXd-v=+QPA!d=A#ih>v9rX*Zr!XO%ouI%ZT!@E#wbZ7UF#b2`p^nH*B zb`D0ar1i@o6hhkpw79eTy|UtUI{|#!FPD!7SnF2g_0cp*s#j%CM{L2Bzc`_Vg)VS( z`eW&P2}BN$>R07Zm%jv+Q8+XcTFSS}t@)7kx9yf&^WdaEa?vKY4$_Xu#WcC~Z9Qj~ zTmMPVIkeTFjL?EeM{0M}du7i~q4+Nf7+_xc+d{ur4$W3TDBnSr-GYVGJtlR2q0=AP z>LklfvV53e`N(7m53{^Ymct2_BPL7jFv~k+Ii6rSVX`z1v%E`|{shZ_$)XLj>>|s> z1j{9prA239_+asSa_g6H7Y$`-lgouN0EPu}2ucxPVFut$x=K0JScq0H@1$NhM9~$ zrE3d|N!Eh~@NI&Pg{5esQp4wWsPJ96ZPd`v5NzG;k8JiVdKkU;FnaMja53IlFXwoT zzIWnd6j~7@5vA?^n)8r}gR2|w;DtWOjUW*o1}_XkLzf5=cskXE-dJcz{azq?Rb8OY zSEFYa%)=lmZrdTZzHyTz1!@pIM(f$5yorACn8omfzKn2S9K>U!MCIzGK zL3cm0U-~bg*M~RxBWIlc_!)cT*r;F$`fB(p4BCc1FNVR8-1e+lF%_qKwc@L`u+In>~iG+RtLqOzAxNJh2BaGy)XRD?|>VCYhl^coc2oL2_(?5_o}VF|we2p;t%y_pz2^;Hvxt zNq8><3Jz)z9=1&EVyxmwDldqrP{|4KD#3}{5#v&ZU)0CGz>tBHZF7Kf9aImcj3BxJ z5Hu5h$ZVn!^ghht$Hp+4MQ(ff>d=rHYjh9!+KxsW-4o>2-yrhdbzb)bU#!J_wXCK~ zjT{`MMuvtSicNVRI+W#7S*&c3N_tStTrSD2PeI1l)}fCNH8P0N^Bas5J2Og&8aZPNM0%Yh4U+UE*9#>xfnz}fkU3Yt z1s1rE@M8j=WPuM7t`_hu7I+`w5J#S3OTeg;5zSPc^j&WKDZC)ZP2h0Cs!|r_7DH5d zGN1X7hxrB<^VPz!28DT;0bSdfU`d7}$Z$y)!3&hKco2M<(1mOdZGl2$MKpxgOrbSX zXw4K_;hZq5tpSq^X2$hV2U-B_cr{S-jz7A`j|uRB*!&NjftWX=&l^1*sJT)Wo1ZZl zh&7&9%3{;5`lDXA#~+>VcF8%i~ln9P;|p`Y5#rqP=CYN~J89oi|iE$W{x)d+loE(5OJk34rCZ81~FrPPz3@5Gvzr zej2p~B447jbm%#BmVeZ9cI|0U9NHqJBeZ*wj?`{LP?UQSs?gJesEr{mf0iN6L@Fy| z1CdVF5t_%=FP}Ha`jE;>p-E{Llx9IeDl2!Glo~;)5fr4da+^t6Bq)mn1u0Ch3lhwj z$rdV~DY_<7kVc!N*@84%kY*1e1aj*pct#%D$<7m+w~^xWI_LpX`UdNt?x6KgZ>RN0 zA#fX+7i}l=qAoHcm6bcmysV4N%l45ODVXmdbIm?7*NAR~6!4vdmk}smCORHcz=edH z36vu?P>mE0QZ<}|YPbc}Gld6j_vs6oa<6|~(Cy(A!F}cjOgLYKK4|NJ(ohNJA5J#q z_ZVyM=Ol84$^4q!+RZM5fl}pEV+)4RGb5jm3dGj3o^Vd&BKH=zku^tdeHE;2=jB#z zzav-CO}Y@m$W`=`e-jz3$Ipw5Lwh80b%f@PTpd}zLCc|M_f!2zjLkpu~Hj|jOtCHJ>R(A>70iI>08f;ilqY zfZ1@9m_>9BX2VUMVGd@)O|D^p*>F?#Fu-iMNf`#1rR9lgg>`L9&@22Hdj5OEm`mDz ze~HD-#fu(R!|KCorCOEPu3_nl_rCNcc4~O?%>ALdQ2ib^dSaKiG;(z`CnZlb-7WvH z7Dtz8pFeuV8|@r&Z$TJ1OMS<9i!C6^Up2~i8E^Bb)#A<#P&Kb~WQN3S12rH<|vx1+4)WFY>TJs3SB=03aw(XAqj6_S%?wi@%g(JKFp zUg=*~CaKX5|I2|3U1hQKt$}TuE+ZU)_`x)PY})sO(XIXq2L{k|qx_N64uAY~noq9S zjvilDvWcDXCb>0CHSFbY!F<2y=0DMMY1%U=+qGJx4sABl5n2J#ky;j2F1(D|xbKC^ z52-9PI4}$Q!z`3f_TMjOPMI5s9Cr{aB6gM7G##6PomG}x@m~K-IWs*0jRSO?kRb`K zB0yUSITBnG039LZ77#qq7e`j)$YMG_>oQ-pS;8PK>+AqDwPf}2H9zYlUs_fVU*W8y z3zw*$#2%ZJW25{vr~PPjeYGq3q%7vn(`PDQ z8(Ny@VXU^8fOhIR%s{`=bC`mj({m233OpmU`;d;*Zf9Mn(x~c~`e&FR1#Blp70JZN z7Tf^ z&*Zk*7$m`U^dox2yKaKp*M>eZI10n9#^LtY>IcA$En@Nz0uva-I$6L z+%SmwCFpkfViiMbz>rd>u)IW~;se6GE ziDUKL#1%owCTW5odF9-SJ`2f3lG`LLv64I_O)*K2T1ojN6`7<}R#GuZ(@fG+36iW7 z*P8@6_o+U$WT*W6Kf~-u91G_0=deoP+D#8oy`1|10R@2Wk(~S84FEg3<=iC)86FWiT?pZsAx!&W9eSj> z{&}&XRYct2HvYFq|*yZ7`U=Dy#*Q z@Pt%M*nEY-RIQz1Qu2Al7&nPQ`DC z;fDo;2OWI@>Ckf+em~c9cC7^zhZYu#$275cOkgFVHYkoBP~YMJ4BAd5)(#6Tvf1{( zheF@w);D3TcOAA;rkUR8mk62dlp5J=St#I}Nf=%z{>MOJdfNkNb``sWAwQN27mqpF zJnwpZ1s%ay`j2tOmi+P0)5JX|7ZL6OIS_6si*}aTZ$($w$UcENvf>E(!T=VDI|8-= z&b;fN0EN2=-l>btgqWX(&=q)38X2-{kD?>s{PG~T5k=fZa0{+9I5&z37&^~UVIdR} zpBDE=I&3(6RSXT_ymT*N%nv#$S9B8`tAkTa@Ek#*0DCnP+(+;>ozty@Ub$j3>#`el z8CqdNH({zR>6F+13k;_z6XHx8<4(R>;tK2t#z#`^$DFUDees^0){fO*FWL3XBsJQt z#(Q&otvgnK)myUZ8AX1*+xEVHT^4S<2cYDQfll1K$>Vm&o*ud?X0`!b^T4+q^0*FS z`rPc}O(2q9xuOpYaa3IXA&=JLEYEvNV?GNX0C}%G?i6H0y!i|FBUj!FZBY7|JZ?AU z`_pm-?-j%qEN+}}{)XPeKtdyPcobZiZObMou^o+JwSB40dEYkv*tqHzV7lXSX2Rr)Re!JE&*3!QROo z$fIW56nAKk5!mjHmD;>9f0{Qo$L@`lJ7RN2V8Bf70zQ(N{UCDcntT`ok?#|bhhRVR zgU~d22i3)yY+};MWHXa3Otv!FMqgLI#E9T<`@&BVkk~9Zpm&VegK5ZqQ;j0Jle^S6 zIl;*bkEoHucD3Yfe{3PTRp>B;AHkQF8pv|n-1-mT;`UZsgfvb2CS=c}uF03wH?i+V zpp?n-!V{1@jmpnJ`cW)F3!TwjH2iIEt~iOK;>lapNT+f00$gGFHVcT zNA4ru+)q(d#?bLk4fZ{P9X)Fg+5bxRF)&wd{dXD`-A=(vzTABjoXkR>FE*R?oKT}X zeYrbn>mepP)!59m=q_Jurak&zE?cYzzxTblh}z@}sLesHLGG}j2JWD`Gpz2>v($!M zs254)Nr4TT*l}W~1a{fPP7@QdlWA((0!)XPlX6O>0poj}`8MY_l&|UEShGCnxq2tp zzPh3G{5G4$_K9~7A>Fb1^gt(MhVOH5o8yf=YE$P2qL&v$_XcYA`s0Vw@GX1*2dl_Q z1r6hMr;9b;*LF&N;VfETUU<|SD@zN;<|)D0B1bTK$QwOgz$sMhG4Y0o{(TW4+SPVy zK<3Bm&oMw`&->9HIY)X;x2n5)P*~Mha!!8nd8qcso>crLmsI)hI)WwLcy0AL`{dRi zgM@J>KmQ`D_k4_RqO#|*8tszD+$L{5CCOt-)Ob&t*c!^?7dd^gr9-n~MQvzmNgn^C zb0a@^%b`!y$Y*wM$u_zCl03FV&U(@*M}8(c>?yhR&+HeGD>m(Mq-k0)cC_!{x49iv zN*i5Byz-dY3KA8`_}SS=R3xEyG5yB9@>s%IL_8nk_t(fa^rkTr>`2BTH$H54BAstT z8u|nxdmutW79gym5cZtJ@2D;}g>r7nH43>}A$JOLpFxgjI{zU#N%=4fpdCnp- zk!=o$Pos_^8~hL^jc*Z}G@DZ%6ST3u%`oMPJU-}z(PO+e7ofl52e-$2ogUP60eH}s zk8;pijCzY$uTaopS7a#6rUHCo&w>tlEVRmF!gd#(^}tK4be#}@F31Y~W9HkbZN44a zLVHoePSADTs0Z$pvUz?`fQ~QLCvQprjF{tYZF!*PYOtom8(Ya~Y08^8TDPL-9QT%R zmsGx7LW+-DExxjvt!nQ1NJkn3$W*cgV@jFuCeqM{7@Fk|OGq;xmRfEN*7W7}`Coo0 z=J*{{jf+r`LOlv@3jC3{1GmoJl3jA!w{dvGEvaH|JS^jf%I}EwQ2XKBzF=&oqbxQh z5{x~DQNe*+KFOc^DQeK9o$8c&UK*t@ylcosZwmE zUL^HdK}Cv-etax5WaSX2!14zPXNuG!Du*tTC}c8)yn>HI!?kXr-dRE~Qs~X5J>)>7 zKcr}-&|7&K0g+o@#5NBSti8hpE*CA|NgWR!M4Bm5WzJE;y9s~qC}E^fy%f_i!T_Bs zdXQ!!g{pE+w|a|X<^{7zmBoF84^u~dA7POyOV1J(v0QPMut=4agM{@E4ibKxsj}uW z;cH??H`+?jYkND;Suo4>PR7+b4i^n89&cXR*s!AR9#_+<+PYP)=A})m8*5!l>Rb&g zTvPM%3JUVRf_DCIdN8Fs+gX>G(f^Y)3zUf&%_|7kHIlrYn@T0Ww zxNmf~KUO^O|4K?fZGZh|GiIFW`Ca?K2e(R#?_Ah^^_i`0_DP4@SB*dayUwci_N?;v zmc01Z587{8f2{D8%A@UBfj7Iiwd`sS?0tM}%bwr1&;G;T++JEAB?bmh7y4&Ardv0pW#Xq#~S{pjCH}h}WzqN7C*#rMsD$Iq2rMi{Q z()WLpzhJ?FEz|Y#!Rf!hGl=qM(;v8bxpcSdgZA&+ha_dfi|zl`aNw~Yt^cU~$bFsz ze^g#=fBF2oSN7H%Za;QU?054IY;OM|+`3CCe7XIe;)3~$bKUJfz5Q^`AG9Ow+yD5) z%@=p?XqOs4+v%J1YWpuX)%^1Ji>qnJb9$X-`rLHs{+ToHad{RjS-nDA?JCME&MUfW z>S|Fcc($M@FTW_SC|Ad&afX=fsqad*HHz)F^ij?Ym=rv~Cm6I*+%Ksa%JXTnGqNN0 z`!h=I`_jIWkqt=AaLyaewastv<{NL8!$$rH{)Z#Y$WUHNo0XBh-tNnA#T+v-JTH#$ zX5>FVQq3rijPhozw7-7SS2Bv#jC?i2Gb6(_BO@CkGcug&=pe*jGjzR{Zt4QVdOH{m zT@Xy@dc|gMPKPq+Pg3R^4RPAbTY5gGy~NVtH=h&wOYpf2?63tZGO*oTnDJ1SfB)h0 z4gDoL20zyDspO6y&a6*^%`y9|4A+YeZ-(dj5f5bKM@9w^&UE`%gsG~<@7bfXA@+(@ zuQx+^IKxSml9bo{VsmK=y*X zVid`wV@81zAXl%_R)lVkmYnnAm>&j3lxZ7GPlJaVrmM^bcfx1^T zX?1z`Ke*s7=&V_0XslaWRlllwd7bXWe?4_U1w%A4NmZ#)u5@2ZU|U(A+fZ;=0VBWi z+j{08F5mfZoUk4v`V!lQ58InKhlut0r=)sKn$etQQJR7rb*7R}=1(pcK$h54{H)I_ zM*ZKkg2yzAmWgydP@Jo(=xlzB#4;Jwxmlp%QQT>vt z^P7IMelD}7yoo;sjQ)?o&-yGj>hG|E$eZ%!`&nQ&l6M(_TbU$p#?O4em_mMoA)oA< zSvKE1WwZYLqjd<88*x zgx)~L^u@&Z&Q|r3)2NW`mx-S#Z?+$?E>E(u>?;4dWMiwt~25?*cKW^QAkg$pC;`o19zE#@m_1-#&AkdTMaxvf#{j2ffpy?>kYg#3IBUh zzFBf5;XgC*Wc{xgc&T^~C$Ad#oMA}h{#B&uiT$xj=DdR)r9V1J5_Q zt~gf!uS%i6J_X*K0$-B?e+D@1Ja~(4plRnn7`Sq)j+jVc~J?vnH$2Ht1j z=2>K$fp<;R`OW!|f20)g%+YaiCZRsyH;QL(3fzYEL`hmxs4;`MuKJqv8!2!}zm#as zt68~Hs=7b;&t7b7~uErK*Z~TCljPs-cMlDK9uP zpUG4`EfD#sA}tgt&LP2>I?S8^1@TQ=ZK#K2RYlRVx+k0G;8q{`Z|lueh$5w?iUXmJt(a3UxEtVu z$QiuA>uKroy5-Gv8l)barxiCeHCHXEZmuf|z|olnzQ8!zA^>AE(QK-3Ot?yKc500&7k8+w%?Tk|5gh8ffRUE3S3Kp zM^oS{*{Ft{bICFBD;Atfj)~{6v*Ka9xbQP^j|HD(!MzszYZkoBg5P1mms)VQ1z%~w zd9*g`U1PzyR+{+tEjaH`O#DX{++)H2WZ*pGTTe9|7JgnSnR<3w@L~&o!GafA@I~w# zc#`|`>J<1(DezyXz&lgmpQOMqq`-5G2|C%%q7--_1zwo~Z%%=~kOKcj3jB=}_^*w9 z8SO8@&up)W#=eYrt_7cJ!8sL~{1p~_vIQSy?ANI0P7AJBaNe1idU7oIT^9UK3vR7< zx&^n|IoE>oYQfZh)`DB@af!d==>3gnX_J4yv9C`ffezz;Yv3Hqd`$jd8F;=9C-991 z&N0i!dF^r%zj>Zg*dTZk`i*huPQuOe6wiTHe)BvPOv26c)Z!#uGWz$wSa53` F{y$R$#P$FH diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/test_ASIFT.cpp.o b/ASIFT_tests/demo_ASIFT_src/CMakeFiles/test_ASIFT.dir/test_ASIFT.cpp.o deleted file mode 100644 index b681c8e7663f5a1fd4bb30d5f8c8153a4b7e094b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1514824 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 QC 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

dIK(h0P1SiR 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 ~=*^r(Y+v)lYp`gic+=@-4Bt5~KzRm~a*o?H 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%0D#8K@eZYHZTp(5a9> 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 Fw)U`6+wD;JtKesWb9p_X+~Rzy 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 diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeLists.txt b/ASIFT_tests/demo_ASIFT_src/CMakeLists.txt index d8b57d0..c84282e 100755 --- a/ASIFT_tests/demo_ASIFT_src/CMakeLists.txt +++ b/ASIFT_tests/demo_ASIFT_src/CMakeLists.txt @@ -45,13 +45,14 @@ set(ASIFT_srcs include_directories(. ./io_png - ./io_png/libs/png) + ./io_png/libs/png +) add_executable(demo_ASIFT demo_ASIFT.cpp ${ASIFT_srcs}) TARGET_LINK_LIBRARIES(demo_ASIFT png zlib Match Numerics) -find_package( OpenCV REQUIRED ) +#find_package( OpenCV REQUIRED ) add_executable(test_ASIFT test_ASIFT.cpp ASIFT_matcher.cpp ${ASIFT_srcs}) -TARGET_LINK_LIBRARIES(test_ASIFT png zlib Match Numerics X11) #${OpenCV_LIBS}) +TARGET_LINK_LIBRARIES(test_ASIFT png zlib Match Numerics X11) diff --git a/ASIFT_tests/demo_ASIFT_src/CMakeLists.txt~ b/ASIFT_tests/demo_ASIFT_src/CMakeLists.txt~ index a64df11..d6c5c50 100755 --- a/ASIFT_tests/demo_ASIFT_src/CMakeLists.txt~ +++ b/ASIFT_tests/demo_ASIFT_src/CMakeLists.txt~ @@ -27,8 +27,8 @@ IF(CMAKE_COMPILER_IS_GNUCXX) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra -Wno-write-strings") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -ansi") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -ftree-vectorize -funroll-loops") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L/usr/X11R6/lib -lm -lpthread -lX11") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") ENDIF(CMAKE_COMPILER_IS_GNUCXX) @@ -45,13 +45,14 @@ set(ASIFT_srcs include_directories(. ./io_png - ./io_png/libs/png) + ./io_png/libs/png +) add_executable(demo_ASIFT demo_ASIFT.cpp ${ASIFT_srcs}) TARGET_LINK_LIBRARIES(demo_ASIFT png zlib Match Numerics) -find_package( OpenCV REQUIRED ) +#find_package( OpenCV REQUIRED ) add_executable(test_ASIFT test_ASIFT.cpp ASIFT_matcher.cpp ${ASIFT_srcs}) -TARGET_LINK_LIBRARIES(test_ASIFT png zlib Match Numerics X11 ${OpenCV_LIBS}) +TARGET_LINK_LIBRARIES(test_ASIFT zlib Match Numerics X11) diff --git a/ASIFT_tests/demo_ASIFT_src/demo_ASIFT b/ASIFT_tests/demo_ASIFT_src/demo_ASIFT deleted file mode 100755 index 3c12b8bd54a3b5f87f70f09787a5c17dbe8d5f9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 732097 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 J1)wUhU(KO=~PnmTl{RTui6y;9lbq5 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�lGX{Fczq2 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 r8vgH@6ePD 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 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngerror.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngerror.c.o deleted file mode 100644 index 6fc3ca333a16339dbf87df94b1f40bd59eb6f5e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5704 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 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pnggccrd.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pnggccrd.c.o deleted file mode 100644 index b9992960b233bcac85064e05a5465ffb6c45cc7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmbtSO-sW-5S=vj3%qy}ywsBlc4%b<@gNJO_9EW;1Cnj1ph>0KfL`>kc=RXux4e0) zGf9?gr#b1sGVi^4v%9nG`}pp*69nKQfE#F-Qvtpj2)e`?_Fx-eG8$d?PN#8^*`lZL z3RVB2DB19BsBoZAomDyj=C7%ZV#;<|azE|o zHZqUiHU0&UsGH}c3D!cdv4+SuIi?b8VPh$g7Ti(Ue?o;_T7T_7r(WK3K+6wZ6R!K= z&Ug8eiVpj}C!cs&dJm{3@6LADKlXYV%6{e@;bHnyi=TCk-)M&xXO6=v(cf!7|D(Rt we(iHfp6_&-+1G{dmDHJs8&g!Suyqplx4jVSTW#Bu-rdxnv-#YZb%7 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngget.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngget.c.o deleted file mode 100644 index 1c8ec8677c447fcd4a310ca32a5b0ba192054f20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11552 zcmb_heQaCR6@N)fn?hT=tUzc3JgF;$kC+w$lqm!E!|f|=Ae4r7Q0h2|6I W0yn@ugCJ`hyWm2V?v59EywnG0{{)pC{bI&>N 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 W&Y7N&yg5(Kg>ZA8TngdlJoyK8`3~~{ diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngpread.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngpread.c.o deleted file mode 100644 index 368e56749434cd3517b6ecdc66bf424868b8c2f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27432 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�j>*;Tz4Btk@&*%5oJh`kZKyaRGEuYPIRDB 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 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngread.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngread.c.o deleted file mode 100644 index 7de1a847d008e15de7fe4e27711c931e4f672d2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27080 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 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngrio.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngrio.c.o deleted file mode 100644 index 82f140e7b28b9b6361782b18ab14efaea77d6701..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2448 zcmb_dOK1~87@j1p&#J9>5Gpcw@BwydBtm^qt0i`YS|t#CV%?^jCYWx@W|mf=Dip;K zklek9BJ|?Py9geNCp~)XMTpdc-f|G?|INFPlf>>-b+5}R4QCl`9ywvocpdb&5MCo5ap`Ja?rBA zU-ilJf;d#;j>lc-2&lP&PgO-p22D;o!kH|3M^i-LD_i=J`$EM_E@(69GffL=r)UjXd*lz+STE^6| zzm#@n)$Yy;XNtJ+LtfI7?^Ya3xC??=*e7O9)oRT0tD#b;&d$0X*}ST7t+9#xKutJ> zJLG^cw=`MwY0psde-Ni6xXqi4WFtzyVSJp1%KFK#%ZP<~mG%&X8x7h{1F;HbdjS$1 zqyaqgxdUd;%t8_keU&KLQJRtSU*pphi&E+JkAfXI$ob&A7SR+ zBc!G3J5VBI_7C0c9qvtaAxkQthcL8c)&~|>zrC3ZMAt*sna%nggCW4Li~U$PV5z2J zPYiv;bpkwYhk{tc$`0*^Je^V)ha-k#KR(A1gXh4L`u_c(FrOdVlTo~+UQvb z@uDa7dB^wYnNW4d6vw)wyLw6CxMQ&WTo37K1jpUd_$!6$JovwXUWZKH)o7k>b)oQm vU}zdpxXyD}8ICI){p_Tn>kb?KbISkxU;MeUBM*kA5hZ9`pXY4@*XQ;NTZUap diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngrtran.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngrtran.c.o deleted file mode 100644 index 6567ab4e7930222c3185682912f59771210567dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58456 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 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngrutil.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngrutil.c.o deleted file mode 100644 index 00c610e7e11fce4ddaccbea0b4cc9707f56f223e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51080 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 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngset.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngset.c.o deleted file mode 100644 index 1e4e4a866dabe3be11ecb6ada91b054deceb2fc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19880 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 Z`{;8%+}uak^LlCQH}}!=eYm-g{y$uR1xNq@ diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngtrans.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngtrans.c.o deleted file mode 100644 index c3d97c06eb88435a0a55d6b0f3e174c42ce18d26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7568 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 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngwio.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngwio.c.o deleted file mode 100644 index e0f513637fa3f735b2dd34d81883533fe42b07d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2840 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 Q)dAeTe{Bok_WkSs0j_}`umAu6 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngwtran.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngwtran.c.o deleted file mode 100644 index 34fa30d13da0b8fd47459874b20defd712e2784b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7040 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 a^YN7?T<6_f6Rz_v+l1@9%QxXVkNySQv?uHU diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngwutil.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/CMakeFiles/png.dir/pngwutil.c.o deleted file mode 100644 index 5252352879af6948f54592946733594d21029dea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42232 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 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/libpng.a b/ASIFT_tests/demo_ASIFT_src/io_png/libs/png/libpng.a deleted file mode 100644 index 067fa87246968eff637e46243bb1e8d1c8e7c2fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316080 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

`1QC;i_^UCpYPK07%HZ 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 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/adler32.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/adler32.c.o deleted file mode 100644 index 1148dd3482ecf0f96670bba25fbf0e837d09aebf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3240 zcmeHJT}TvB6uz^o>#D1>{Xt-eAyGn3Y8ymE7&3XO4EtG#LTpzzj9dlXEeobtHj`ly zdh4MVUxME3Nh1jSp^_lj9s(csVH1K`@?jLAeW~r7nYlX7&Okpt_|SowbME=hx#!$F z_ntEk#q(!e97h;&>auOoQ_$CZ#NiSG>Yxb5B755qN&=84SPGVjMc&$x%6Ij%UoC5;NnS1;}=ECjQwjiH zDjbnYN5todR5>EmjtFmqB*m;h8C~O&(i-7MFa9hPXsScmn$w}cR9kh>5>jRojubyO z@uN_Hn?U$Scj2Vvp2Go4Ml=5ZhfKRp+xU=a)e8^UpH;7Ic^b`SuWR0D5sT0w(om2W zXez#7zCo&1U!iJls;^K&KiJn-sKiiwSLBXmh_lE~&p@SBQ{pn^Cq-4Sx?6UyAVQj- zP6Jc1@|R*$!f+TF`<#wpO8^m?+8pN5Fb8m6v)5Xe)&?aNWv$g|67-#7O@67s={A~# zZE)So+6L9GdD7n2cB1Z3FdQF<#p?pXaUsyy64yq}51Io)Q$Pqb=z6VX!)v!8aQ80} zZp6>k_{zLbph)ZkJw8bF9(bLu_CI#DRe9XC9x&0clNw6MHSD?Tc#uP!2*dZHu}~Oz zY)I#QOo~NDVnpZ-#X>{~4-XTeXD}L#41jK6FcuNoF9aKhW1*hgL>P+nhlEI9_syYD zG-5>iH&z4gm@Y2KOs&R1Dl=TdLHPb;D;IGr)`X2^goU;iY zGqL!Hn~B9|{1|{tHrwTXGyk)OKQxm~q#FKLH)-{?npGkU;J>GcMtr)8t*ab{_>I_a z=3c{N2XO1&Aw&(sD~26o*0ti;nmgLwsMI}FoskOQIHff{=4BVZ)5yQx@Mp{#pXsd} z?MetpHXr!WEfU)rv|Wrf2j20&cRXo&W#< diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/compress.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/compress.c.o deleted file mode 100644 index c12de08fdf2c4723f90256462c9c852045497c1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2208 zcmbuAPe>GD6u{rO{>gu_MMYr5LJ&ncxVD5w)T&K>L3R+9JQzCa$VTq2?9Rd#ScDi1 zqp+7Cx^=6Y7hwyM)Pr{O*d_21Z0W&nLc#XlH{a)ej?<+cjPJeQd++<+_vYL2nQ`}a zji!MV4Q@cylN4aHrfSEz8HZMAf&_EEvFAIBh?w)SP^nayvoy`s%OqC|qo{5>mjW6pY+v}4TA&dh^d=Nj|dLkx44YY&Ar`z%FdO|_toZ@wL2ZlWaHa>8mZ zu8%8!UgJZV-H9+~W{)}fUFIap%o*5XEF6@dP}zH5;SiLrdz&PQT;mmX{H%yTdLG#b-8VtVYN$Lahi zCp-n(lR?l5VXdvD;Ybl*_!;E%kes9o&~r5WqNcC4J`~n4g~zV*C_oo!8P8GFs~r~c zOKN=5i-VqfoU+X^)OOa>Noi%RDO0ztf(`nFX`7&r<#M2BGoCY^Nu{hb#?l$v();fv z+HHE^}dzj!Y}xK96lG?Fput(Up5*%QWSw^)Kp8e zBRTCUIFFimNcd8f{2PgYA74gJYyN9}6l-Zs<>!tbfZX3d7ytg+53`$$g`w;{Ka_$uV<|HdIZg-`fkIrq-}h10h!DE}&Q zT3@cqzmdpp3O*nP&A*Mv06%NfSu2;*$M?-nn6M_NOxwDXerS(KM`|NIv7fnb^k(vi zQQpuWlqP)CDZb;>yHgbVP5*IFHWW^GS@N$6r)7_K#5wuAtU%k(9 Qf+&*9d5v;f<#Jws0A~70%K!iX diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/crc32.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/crc32.c.o deleted file mode 100644 index 19e38f052349c7712da3532d29491bfdc856471e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23304 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 ij~{=Y@tcqzf1Zh-kRN}Zc`_kC{yg(xLVoPnT2x diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/deflate.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/deflate.c.o deleted file mode 100644 index 51266e12d01d7fad5cabf53639c2f3777dbe9537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22384 zcmdU14|rTvm4A~zZ3=}6P}qnl1C}*yA*QuRx&@q+47_5hvy@T%0FyLLnrfQHWTt;u z(gvm}eT>oUs{3_a-0k8g&vUo!E%8?nI3f8Ln~G9UqEJk}o^iRcghr0QJ(~q0%GE z0je5I%u9BawZ|_w^4oLg&W(SzP|!xL#05uwN5CEeQjt-6C|t>&GF=gN zD~7^R_dON1iL_87*{n!*ojjMAKNLARPYNfjoeRMmYhJzo#Ka}Zt`oss7Xnhi>MbWq zlU>8su1ee&>|UDe8YxLE2Fm_$^L?)U;5$~zxe9&&%G!_`?|A-JC*7{zk1Y^tt|tFiP_GYD4IYX zP$|l@A=YOjf}K1RTVzP{W)7im`U)db-QAZJL=!4D1rEL^DzEi7E53#GKlN*0E~C7%-wU#_V^u~F9Gsb-ZjgNJor zDe3>Yv~a-Qr|p0!)pq(USd!|%_VPMtJ0o_W-wup`>3|?OeN##Xu%DAo-&YOs*m0-t z2nwl)HkEzRo4veb&v4sGj5x6qsmKW@GC34EBO^$5jaqTq7qwZ%LEi*>9O5;?CPv|` zsZVxI7Hq$OBeKSO6d^ROxnUmOS4Sp0uU6C)0E0;3|JaEogP19hS7ZdUix?P5)K2+& zpmUsb`W~aWG@8@54<*wgc*qJK8ez$awo6C)(cKL!PDq1kC;J0}-M^f=1d9(|BQIz; z6qy3HHU2nmIf*#WDKgP0%n6f_oR4T~1I{ykdK$T2!E4_EPk{zv9W?XQoh>x?)Lre) z_v`@veErA8PcbPIQh#S{7@tTrF8sVUv!cq9qa(SwW z$~qG&(nH~U#NQ~gRmO}mtubzy-kjzkH8NP(&P(;{tE1u=p+|aJZGQ8QEJfE7#Ya9a z9K@!bH6^+h=AF3WC^`EEZ{OriBILxPTu=xc(RGceWGEaaHVI{nS-pS#O3U&J5b+u_ zkkMk=5;4(EIpY%ZW$H`_vxMmxr@@yCaiWUrjaCZL`&IB(Nq_^NoR{n^rhO`Q#_3zE zoR0L(Y~hE1ep4dObKn0T=eNlh1J|5xcKSj<^Y)_>4xJ?E=!-7lJLn@v%}BJu*JL|^ zDPIKl2H+71z$0z|p0AotrMkt-?Y9TUitJ(~<8TR0Ar(1k`@yRt)A4IGBXrjBMJ(tr zt^6|F1z?))>d499o=+&nWqhiSa`14tAb6M_Van+{2;>>{m}9#7Sgz`Dkz3!Nvwogi z|0L>#J)~gTrBCXKhe_uoUT|V#&bm{`%|_J>q}Vynyap6;VH8vB1r(>9K4C33rV1Pe z-%_ztPMTC!OB8$Cw zATTxY9^4hjZdkCB(?QAgFh_UbJ+3epN{2e0x>AsAm-8&uUJ3*>DeturA2E~fEQep~ zT{JHhIWv$h*;l~o+0phD=n0gZRKwJ~fv6KXOHNba(CWz9&I|NApvkVYR-$;E?jaQu z9Fc#@4iN|MWmzGOplDeN)Fk4=Wk}kgL_imkx~mHQJ49N6XS63{oARtS<(h$Ik+UND zv~qb_WKwsPFN>XZv_};WQm#|&EIf2s%8p!@9)?RFb`r;7Q^QvLE$C`k+f*Vx;xQe;m z^d-sZ!0w>8Hn4mC5$5X%!?^RoKtKD0rQ{1q1i3e3_xNeGy38v!%@HiKGG#%|pY3-B zjNFk;!dT}^x0;E7Td8ds@mMoQR7bz%Z!7_ zaJ;X(LFwya2R)R{sey{te+cb+1e6LdGR$BCX}@!?l1Sc=U<3wtZW_-8*CSe3kr>TV zl7e?u6lKXq?^mDY^y!yOW>`f#AT|s)g4gj?dcLQ^b~0Up#3tE~dx?XDhNSaNnFT|U zQIeXtNue<@N=_H=CL9#43AHTJ6L4OFa89cUr17JeE67_$2gc?tFx_wogh^18Tz4{* zT6gkjPwAQxXZY3Uo#7=T&!qz+1L-0MOR9mf;w2+Xup~j+vt%UMf3@aQPeZIk$&T|w z=Di=DKF6I2j6oB>5hW#^fpn?FEsgmug(-C^`_UCwpyGVa8AhL+js$!D#dVynAq4mI zy3$1mKQ;bSj8a%aM3=>xSj?)y#4bWn&}yyLNUI~KwvlV*70V*0OdGp26**;#6PQKY z(E3pN$yc=ym_wY(*>}OjM^*3VwLv>&mnjleT(b>hg{bTo(Y-esV3pckf=N~>njBFG ztG-o(!G{YFE;CU2yfzRn;`VR9(!we_{My^AK81<>?aS8r$-aYrMoeY?#8^jL#9gqem>nzz3kCl&i*;AUI3TY#D~cqnLt=BSFBdK znW$)MO0DOeh@{~8qBmSyD)Pd#_B@iU zAx5>}o=sj2r4{p|n>+>A7j>{bxKH%Gp0PBwN;58j{JuNn_Ru*&5=a5X#Iu zAF(|`4Naa$LvM6+q@3Vli8EzWwpv(p)v_tr^AlZm?LW9@z(pzNR+87xZR09R{L-Rd zyOQ%G1s{3TC7M?RLI;6vF7Z>%Gl`z(bLKjZxPC(I%ZUGlyJ8k8+<)-2a6b&+hTQ88 z3Iv-jm@MZcOB+9`vO(0Bp#Ghy$Z_mt?as5(kX6J!oj;<5T9zzkU($Z&+C*A>Fsl!h z2z37wB!?ca;tDCa=UwjfP(*`!-ew>mD!b=XktmugEERSl|U~{)Cjt} zRTxjE17@qSdC0Xh4enherU_GQkv%g*i7fK{z?4^OvW1nUwIX2`i$T5Hd&UThTgAIC zID(=z{*w$))^8hhd6wxa{l9)&RYO1T3_w0Srv%!}f;lD6M4mI%(zz!6LiP3VOUmGP zB5&rF_@z=Q*sagX-0m|K(EAhW9l;)Y+?97jwj2@VGyTCs{q9bL+J%wL<*dCUz4h=R zrTR2Fufj}KyD>}S%dsaDi7&%_ZTvdi?~P;PpWPIH3+^9}U-nSfS`;CE&F5i0Q_ z#$DdQ8^*>nU*T>I6z)NM9cPl@LUcRFb4MP%LoMFZ#g8aMp2EU3&@WLRVzN0zhy}#6 zG(arb9;M2N#}N{*eg-5!Upif@lLU#ZvX+_qgNMllr zIWaEj(#rW@hnDL_ZhEXS3vo`HO7? z@x>IIYF3cAZcfeI&1sS!%c9Fpv7pUtNoyTNvw%`^B>>Ih!;|CouY$Lm0_{We#G1*01!FyH9-{qfbLfZAdmW(1vz1 zZ4Y(x#F&?=WDdwnm7c(xcnJ!tk0rvLzCIUYKi+r=ewf};e}z;1q3RD-$ExpM4`Cm4 z5>Eo*V5*yEGEU?e3y^bE0lCA%d3qI(Ie^4|oJhYa^h@Em6y&U1-t-ars=;kn&8Xq& zc`*;zbvVG+Kg5C6!9UQ&qmOW{6FH%vJ}!z2(6YAo`hpZV*pF?kfE^gE2_C9cWqGes zeQJ4tW1dK@8tf<<*mA4@yY^Bo=`qMlABTq%1tnFQ_I;jneVR>CsHJw=L zc4}Z#iBNU$(4xh`LxuQAY0=u`@qm==-rIO$Uo{vn9>0XnGx<~jEAa&UGL2WXxN0!i z^LOYv7yO}|@WhsxxQP$vfJJh^mgj)IEeC8t?W&33!yiD*u616tol$!UKN2}g*)JKa zc22JC{rvCn^+nCb-wvi?Pda@Ez;KPz)DQ6S2MZ=3#QZA4MN<7Q zX3TrcNzjvyX^S3Hdxow>&xE@+W?I4P(i%LPzHDu8&0=V>G^6MXWRHJ*T4{~iE|@9V zKQ(PT-(T`n^0fk-qR`Jwyqyw}quc{1I{zg_J(GgB4~hc3!cR_?^S}>i!*u4dNr_VU z9tr2eYTCiJSTBxGKCNMv1AuWS!zsH48VC%_XF1$#Jd4i31+kchWNn!Gk`d4)tIPBT z>#(xYOoyHd`Z+~XKGPvp#TsJzK3$i(2l*L$4Yy$Qf$zaAO4lYQVH$^v7S{w1r)ySk zIn_~8tDFWC4l>fAXQLK@mCL!>CSu~E}m3Mv_hI?7EeLqwvq{XwaA zhSE2YJo7K%09zpV%oCfNI_u(jM^XKCO7nbUOFZ?9d-)$>P9_Qp``!20PW2mR%v+`F7e2Ba6N}+tA$NI^_6|l`6#K zxf`XGu%3aHqjN>3#i51+kK=lbe=tLyvs(TT19|O7xd*~M(eb!8IBYgWIVwFC%5KUd zySa<4*WcSBnkd%d;>z`bI6h1k7?17H3nZHPOxw(*p$LPT618VO?iMbgpN04+TUi;M zhMKHdvt`YEZ)+&<_n9q^;;ZcOkKvZ-lACpVxr`E!cpsR2Hvq2pfjGtc=&6wNJIJ*0 zK56C1*rr}c?$faW7`4|7Qzdj=SeFAuK8Q@`{UB0iBM7w!q09%7ihI)Kcaiu+FSzG# z%?QLumm!lE_mQ#V?b}r=4i#gTJ!=d|6$|5UlMgf_X>~+;g`8i+($2$N4ouwaZCaSP zA=5uP;u7(#S*`#573$QqR>-6yqP|~kPorxAr3?4Tcb{6enrn%>jOWcxMxHqjygq2JCEuHIKv7aik#Vp59K1SAp0kA0_^?4L*3vH zpVamj^RFF5IgP`1a-cGJ`0huGdhZMf2y2G^%4Vnb;iBe;x?VYlutG}S<`Y*5Lj&pg zINL1d-%5CE4c&(ZS}~7Ex+Fuom@pDA5sCGYX(c;uIDlPbFR~43zWFj?R*OA`eaj^ zW7fFMSKgkOp^SKDm?bq{>@wSV&~7tXk8u_%>p`d8Xq4aYoZzd?&px)#WIpj0-)0Hh1UOG3i78u#F7AO*HNAt$oGcs}&Ytg*j1Q<0a@}k1bsOwip9kXo)*a09A)#>|; zejAbi$9##$qQO0-%FzP%35}8JK8QE?<>VO`!j6_j&PW^t8*Uc*$a5}=H-bY$bXs$nY03JeQ5>$vVds?aEvq5I4Z3e^`#Y4l2)A7#NijGypi9e z6{9m9y&D@Zykt$<{8T7j|5NGqmAW+tuB(xk*x z7=&$WpRB8TqrYPd&oq!Z>tbgV#W#GQ9(;sWBfUue06N_O{3%U-u`m^*vIb7WWB%|m z_8K|BA@PF%%5eP_PkCgCNhR?*qCqSfyR~O-0Kg>Gra(`>tTa)UC9{Fkbq!~heWU&* zb2fc<$&BW*Wd7^#sv-E7%U4_i<`jPxg<8#fg*G-dw>HF^ zLdz>wRJ=QM+t&7-9h*0`#6!zht-A4s6_u4YhVE=?XuF|xYoa}LN5kgU)}5ie#86R$ z|4Q&PSCLhWuw7z`sF`Pl@SnMeU&_F)uM)g_>sju`f95JdElL4XW(fyFMVWFz0A-h; z49l|axb3#T2$jb+B--MM(8`Lcij_C4NJwe%#dZedzTn!1?1<%UkuurF#o*yJ%j)9l%g^HxrKQd8)zG7yhV_2yA;FD{)1b+PU@N z0#pB>)S`-`bn9;pnEJkmo>C%Q1<+%n69w@r)3;x&b|E#WW@zxhM3jK04xr%zj^)s*j)_$t+lSRG7pO}}N zU-$!2rL`D1w#M!9(u(vJexfK@T-Yfj1+QJ>C9-I0yiJN8$G%_V)n<+D4tH#_y-GYR zo7}M#etJF!7XpY!2fX-gNT&WP3uN%DsOa3eCElAG@J5-q83ljn&jr*WA&trHTFgo>vI% zDN_C;8Qv?b3%9-33-ve*4Sp-0uG8?KmcCyV>NVkoD6${p!OAr5pKCbP;JuQ*eoY-| zc(3bGAk8=0{yk_*np&NBQ`Z6A|1S(cKSRFqa+Gt8zx{57IHmD9{$l+6as@31EKR0c0J#jdv{d)x*8}`On2Wk@r(DxVklS7vcSK{QUisr(FG) z)uIB|OTG?$MTL~(PP`)PC7fN(yb5z_jC|zcgz#JvCY%<45>MuO-y7#JA%a#gFjQ_$rQ< z#4J2%UxeRD#&Dfg59_0N65eu+0!R$OYo~^P?;Q#*u>r3SY52d$!nf^$i2|D0uK3~sn2rt<}?5ZLD}17Ds8&OcJlMJEh6`T43AX^cGL`b!O8peJaH0$coMmG~dmaLKh$*Q(*S zFI0$<9l zI$O7Hw_3NGoh^0kO>G-Dw{5aIni@9NZAdg*ty|kR zHFd`8wlu^WTe3@aLbw^Lo4W0r+ctvkmYsFmnmRhcQN@a?Rm2SMm(E4nwqQ!>Y6$_wsdYXSdlh&M0YiHHn}5O-xROe+(;=jbnLVmHnui( zynBVUrD;oJ`%bH|qY;I=c!wIV79X0}7++I|p&jkmjQmR1MjMcAb()fS-koT3G1hEN zfEi?M?Hx^>ovOq>8d^7RYLniS2I@9oJRc)39)7u46dWaRg;Lkr)V3+!QrEb3W0O_4 zaWe!iugZ+9+x3&~4*%$i#eYSN*V7tKcWYuSLBI6C-=g37;9oWIBAqMoyPgGHk9pwC z@eKWP?JtN=S7YEK9ym?iz*p!HMSR8}18>pupYV_ezRLsm()qjxevJqJW$hO@UUn76 zkJmyy|NZcl8qR*N!_V;3oCkkz9{A&V;NQvvpVWSb{g!+B{eq5*gnQ-lZSB_xr(U#M zw_fzYSE7#B2bkdCB7O)zGp_wiuyFa|lb2@TUODf*ECUbW)zE3v3wb}CHJ9hc587u;inqzmvf2E=lt-BJn&c^_+d^STm|@f`MFO!F2b408vd`-d95G* z={)c+RiZI2^2yxTTrYay?=nC)Igw{Vvmqq90zcO32LUx7q{u(yz+{ z{}dBlVZpjV**{!+ZwgMw_QMAmu!Q}M@Zq^MgK70e;kq5rd2RG}C{dwR|~X*lJ^pSi;N#lUNIx!wmid33iAZu0H}KDfz$`+abe|Bm_KCjS+Mpw94P z^4t&=;(?nyH|&F(^;x|SZq{erKDf!R5BT6_ozd@un>=^S2RG|HBV5D3Sx1Jn&<)(I g|7v}3v;K?w;AZ{zm=A93_LvWD?DLclZtU>?0QKG6;Q#;t diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/gzio.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/gzio.c.o deleted file mode 100644 index e10d4ffbf82886652c06962af38d74eb325cfe98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15240 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 LZpuV(d*1mUaf}f7 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/infback.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/infback.c.o deleted file mode 100644 index f38ac6a0b57120d4e910cc65e6eed65bc24bbd4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11496 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 Y!(ijbgzHlxL>mtY+%IOlkIp;!FS)VutN;K2 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/inflate.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/inflate.c.o deleted file mode 100644 index 69400ddb8b19732a28f34bb5bd78ee2bc09976f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20416 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 J@~Cz5e*+PI$6^2g diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/inftrees.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/inftrees.c.o deleted file mode 100644 index 695d32f48b7d329f142f0ba85bab94a31090d9fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4104 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 YEg(+!51F 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 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/uncompr.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/uncompr.c.o deleted file mode 100644 index 8e141759fdeb953972f87da37c06ebb433db2b4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1912 zcmb_dO-NKx6h3dppE8vxA_`j!gi)9m$A%aSVoF}VAX*4ROMU7SMdv9qcVG%CA`BjH z1UHfGTC`}d_~Ev9qsyI1dApPT5yymQWX&Uena_uTj9v3=)O z!m>au3$DYyrBHxeVqeb-H4h!o1_dYh?mYSV3Lz)>P_5VNPVjDCi04y6ERK>07b44E zLY0ufUJmW$VBNVUOy0J-i|CIplqg(?64`H170E&f?3K`72{!f-XJA9IUJ`55-aeP-hdc^ILV|bTbGOooJuj?R zT37#Ivpe0CB<+NSRn=9H(ur6MBR+l1uzq$KU}$jgYWhN9tm5-ZI?Hk_+uL6eR_0MA z%lfh`dojWRPExbDtOvtjRZ~`1d+U)U9L!n7=trxY26dw|^(-;i(UMGC7y`h`_lw*e zL&-~#oKjlJn{^rYsvOva%Uxh&iPlJKOomGI0$ z(qY1v5T~5~%FiH|a%!&?S^%oPc`j!C0gNTAk4V~@k%82oz7$`{o9I-!9`_;+jETJ` zF|+?=$6D~Jt6iI?S z`~$e!eWN3J;OzyVd7aSuRPXUA#8ZuQVVye!?>PjAijNmT(3nnz<(@g*!^3H(_J9nZ~U&)`mEu!Cxw60aJm}`KO+ZBd2~Fj#q0O& EFE^Y91poj5 diff --git a/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/zutil.c.o b/ASIFT_tests/demo_ASIFT_src/io_png/libs/zlib/CMakeFiles/zlib.dir/zutil.c.o deleted file mode 100644 index 3524e6b140aa8b3fb1adb873d80b568b4722bbeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2624 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∈$6o&o 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

sKoZ{0>a2@eIynh73v*l<5 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 pk{|Ca>`URl?tDPHm4jce7vi=Ag5PWO_m!(10+m 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

  • @!`5vRs*=PHA_&sWe92tFn{g1N@Z^s)SA;hqZ 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

    EvV=!2STx}=5ZM&!D}Il;E%L*|!Vkas_vOch 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

    vB`&&E5aP2Tfx-M2*4GQGI?lrH+E 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

    P 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 z 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 + + asift_matching + 0.0.0 + ASIFT based matching package + + + + + blue + + + + + + DREAM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + + roscpp + tf + pcl_conversions + pcl_ros + sensor_msgs + libpcl-all-dev + + libpcl-all + pcl_conversions + pcl_ros + roscpp + sensor_msgs + roscpp + tf + + + + + + diff --git a/asift_match/package.xml~ b/asift_match/package.xml~ new file mode 100644 index 0000000..33cbac9 --- /dev/null +++ b/asift_match/package.xml~ @@ -0,0 +1,79 @@ + + + asift_matching + 0.0.0 + ASIFT based matching package + + + + + blue + + + + + + DREAM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + + roscpp + tf + pcl_conversions + pcl_ros + sensor_msgs + + pcl_conversions + pcl_ros + roscpp + sensor_msgs + + pcl_conversions + pcl_ros + roscpp + sensor_msgs + + libpcl-all-dev + libpcl-all + roscpp + tf + + + + + + diff --git a/asift_match/src/ASIFT_matcher.cpp b/asift_match/src/ASIFT_matcher.cpp new file mode 100644 index 0000000..02eecb6 --- /dev/null +++ b/asift_match/src/ASIFT_matcher.cpp @@ -0,0 +1,717 @@ +#include "ASIFT_matcher.hpp" + +ASIFT_matcher::ASIFT_matcher(): _nb_refs(0), _total_num_matchings(0), _resize_imgs(false), _showDebug(false) +{ + default_sift_parameters(_siftParam); +} + +ASIFT_matcher::ASIFT_matcher(const char* ref_path): ASIFT_matcher() +{ + if(!loadReferences(ref_path)) + { + std::cerr<<"Error : Failed to load references"< ipixels1(iarr1, iarr1 + w1 * h1); + // free(iarr1); /*memcheck*/ + + // cout<<"Size : "< image; + try + { + image.assign(image_path); + } + catch(cimg_library::CImgIOException) + { + std::cerr << "Unable to load image file " << image_path << std::endl; + return false; + } + //Convert to grayscale + cimg_library::CImg gray(image.width(), image.height(), 1, 1, 0); + cimg_forXY(image,x,y) { + // Separation of channels + int R = (int)image(x,y,0,0); + int G = (int)image(x,y,0,1); + int B = (int)image(x,y,0,2); + // Arithmetic addition of channels for gray + // int grayValue = (int)(0.33*R + 0.33*G + 0.33*B); + // Real weighted addition of channels for gray + int grayValueWeight = (int)(0.299*R + 0.587*G + 0.114*B); + // saving píxel values into image information + // gray(x,y,0,0) = grayValue; + gray(x,y,0,0) = grayValueWeight; + } + + std::vector ipixels1; + size_t w1=gray.width(), h1=gray.height(); + ipixels1.assign(gray.begin(), gray.end()); + + std::cout<<"Building reference from "<< image_path << std::endl; + + return addReference(ipixels1, w1, h1, num_tilts); +} + +//Image : Gray scale image (image size = w*h) +bool ASIFT_matcher::addReference(const vector& image, unsigned int w, unsigned int h, unsigned int num_tilts) +{ + if(image.size()!=w*h) + { + cerr<<"Error : Input image size doesn't correspond with parameters"< ipixels1 = image; + + ///// Resize the images to area wS*hW in remaining the apsect-ratio + ///// Resize if the resize flag is not set or if the flag is set unequal to 0 + float wS = IM_X; + float hS = IM_Y; + + float zoom1=0; + int wS1=0, hS1=0; + vector ipixels1_zoom; + + if(_resize_imgs) + { + cout << "WARNING: The input image is resized to " << wS << "x" << hS << " for ASIFT. " << endl + << " But the results will be normalized to the original image size." << endl << endl; + + float InitSigma_aa = 1.6; + + float fproj_p, fproj_bg; + char fproj_i; + float *fproj_x4, *fproj_y4; + int fproj_o; + + fproj_o = 3; + fproj_p = 0; + fproj_i = 0; + fproj_bg = 0; + fproj_x4 = 0; + fproj_y4 = 0; + + float areaS = wS * hS; + + // Resize image 1 + float area1 = w1 * h1; + zoom1 = sqrt(area1/areaS); + + wS1 = (int) (w1 / zoom1); + hS1 = (int) (h1 / zoom1); + + int fproj_sx = wS1; + int fproj_sy = hS1; + + float fproj_x1 = 0; + float fproj_y1 = 0; + float fproj_x2 = wS1; + float fproj_y2 = 0; + float fproj_x3 = 0; + float fproj_y3 = hS1; + + /* Anti-aliasing filtering along vertical direction */ + if ( zoom1 > 1 ) + { + float sigma_aa = InitSigma_aa * zoom1 / 2; + GaussianBlur1D(ipixels1,w1,h1,sigma_aa,1); + GaussianBlur1D(ipixels1,w1,h1,sigma_aa,0); + } + + // simulate a tilt: subsample the image along the vertical axis by a factor of t. + ipixels1_zoom.resize(wS1*hS1); + fproj (ipixels1, ipixels1_zoom, w1, h1, &fproj_sx, &fproj_sy, &fproj_bg, &fproj_o, &fproj_p, + &fproj_i , fproj_x1 , fproj_y1 , fproj_x2 , fproj_y2 , fproj_x3 , fproj_y3, fproj_x4, fproj_y4); + } + else + { + ipixels1_zoom.resize(w1*h1); + ipixels1_zoom = ipixels1; + wS1 = w1; + hS1 = h1; + zoom1 = 1; + } + + ///// Compute ASIFT keypoints + asift_keypoints keys; + int num_keys = 0; + + time_t tstart, tend; + tstart = time(0); + + num_keys = compute_asift_keypoints(ipixels1_zoom, wS1, hS1, num_tilts, _showDebug, keys, _siftParam); + + tend = time(0); + + //Save data + _im_refs.push_back(ipixels1_zoom); + _size_refs.push_back(make_pair(wS1,hS1)); + _zoom_refs.push_back(zoom1); + + _num_keys.push_back(num_keys); + _num_tilts.push_back(num_tilts); + _keys.push_back(keys); + + _nb_refs++; + + cout<<"Reference built in "<< difftime(tend, tstart) << " seconds." << endl; + cout<<" "<< num_keys <<" ASIFT keypoints found."<< endl; + + return true; +} + +//Return number of match +unsigned int ASIFT_matcher::match(const char* image_path, unsigned int num_tilts) +{ + if(_nb_refs<=0) + { + cout<<"ASIFT_matcher Error : Trying to match without reference"< ipixels1(iarr1, iarr1 + w1 * h1); + // free(iarr1); /*memcheck*/ + + cimg_library::CImg image; + try + { + image.assign(image_path); + } + catch(cimg_library::CImgIOException) + { + std::cerr << "Unable to load image file " << image_path << std::endl; + return 0; + } + //Convert to grayscale + cimg_library::CImg gray(image.width(), image.height(), 1, 1, 0); + cimg_forXY(image,x,y) { + // Separation of channels + int R = (int)image(x,y,0,0); + int G = (int)image(x,y,0,1); + int B = (int)image(x,y,0,2); + // Arithmetic addition of channels for gray + // int grayValue = (int)(0.33*R + 0.33*G + 0.33*B); + // Real weighted addition of channels for gray + int grayValueWeight = (int)(0.299*R + 0.587*G + 0.114*B); + // saving píxel values into image information + // gray(x,y,0,0) = grayValue; + gray(x,y,0,0) = grayValueWeight; + } + vector ipixels1; + size_t w1=gray.width(), h1=gray.height(); + ipixels1.assign(gray.begin(), gray.end()); + + std::cout<<"Matching from "<& image, unsigned int w, unsigned int h, unsigned int num_tilts) +{ + if(image.size()!=w*h) + { + cerr<<"Error : Input image size doesn't correspond with parameters"< ipixels1 = image; + + ///// Resize the images to area wS*hW in remaining the apsect-ratio + ///// Resize if the resize flag is not set or if the flag is set unequal to 0 + float wS = IM_X; + float hS = IM_Y; + + float zoom1=0; + int wS1=0, hS1=0; + vector ipixels1_zoom; + + if(_resize_imgs) + { + cout << "WARNING: The input image is resized to " << wS << "x" << hS << " for ASIFT. " << endl + << " But the results will be normalized to the original image size." << endl << endl; + + float InitSigma_aa = 1.6; + + float fproj_p, fproj_bg; + char fproj_i; + float *fproj_x4, *fproj_y4; + int fproj_o; + + fproj_o = 3; + fproj_p = 0; + fproj_i = 0; + fproj_bg = 0; + fproj_x4 = 0; + fproj_y4 = 0; + + float areaS = wS * hS; + + // Resize image 1 + float area1 = w1 * h1; + zoom1 = sqrt(area1/areaS); + + wS1 = (int) (w1 / zoom1); + hS1 = (int) (h1 / zoom1); + + int fproj_sx = wS1; + int fproj_sy = hS1; + + float fproj_x1 = 0; + float fproj_y1 = 0; + float fproj_x2 = wS1; + float fproj_y2 = 0; + float fproj_x3 = 0; + float fproj_y3 = hS1; + + /* Anti-aliasing filtering along vertical direction */ + if ( zoom1 > 1 ) + { + float sigma_aa = InitSigma_aa * zoom1 / 2; + GaussianBlur1D(ipixels1,w1,h1,sigma_aa,1); + GaussianBlur1D(ipixels1,w1,h1,sigma_aa,0); + } + + // simulate a tilt: subsample the image along the vertical axis by a factor of t. + ipixels1_zoom.resize(wS1*hS1); + fproj (ipixels1, ipixels1_zoom, w1, h1, &fproj_sx, &fproj_sy, &fproj_bg, &fproj_o, &fproj_p, + &fproj_i , fproj_x1 , fproj_y1 , fproj_x2 , fproj_y2 , fproj_x3 , fproj_y3, fproj_x4, fproj_y4); + } + else + { + ipixels1_zoom.resize(w1*h1); + ipixels1_zoom = ipixels1; + wS1 = w1; + hS1 = h1; + zoom1 = 1; + } + + ///// Compute ASIFT keypoints + asift_keypoints keys; + int num_keys = 0; + + time_t tstart, tend; + tstart = time(0); + + num_keys = compute_asift_keypoints(ipixels1_zoom, wS1, hS1, num_tilts, _showDebug, keys, _siftParam); + + tend = time(0); + cout<< "Keypoints computation accomplished in " << difftime(tend, tstart) << " seconds." << endl; + cout<<" "<< num_keys <<" ASIFT keypoints found."<< endl; + + //// Match ASIFT keypoints + _total_num_matchings=0; + + for(unsigned int i = 0; i<_nb_refs;i++) + { + int num_matchings = 0; + matchingslist matchings; + + cout << "Matching the keypoints..." << endl; + tstart = time(0); + try + { + num_matchings = compute_asift_matches(num_tilts, _num_tilts[i], w, h, _size_refs[i].first, _size_refs[i].second, _showDebug, keys, _keys[i], matchings, _siftParam); + } + catch(const bad_alloc& ba) + { + cerr<<"ERROR: ASIFT_matcher::match - "; + cerr << ba.what() << endl; + } + // cout<< _keys[i].size()<< " " << _keys[i][0].size() <<" "<< _keys[i][0][0].size()< upLe, doRi; //UpLeft / DownRight + //Initialisation + for(unsigned int i=0;i<_matchings.size();i++) + { + if(getNbMatchs()[i]!=0) + { + upLe = make_pair(_matchings[i][0].first.x,_matchings[i][0].first.y); + doRi = make_pair(_matchings[i][0].first.x,_matchings[i][0].first.y); + } + } + + //Compute ROI + for(unsigned int i=0;i<_matchings.size();i++) + { + for(unsigned int j=0;j<_matchings[i].size();j++) + { + keypoint kp = _matchings[i][j].first; + if(kp.xdoRi.first) + doRi.first=kp.x; + if(kp.y>doRi.second) + doRi.second=kp.y; + } + } + x=upLe.first; //Système de coordonée ? (devrait etre bon) + y=upLe.second; + h=doRi.second-y; + w=doRi.first-x; + + return true; +} + +//Return true if successfull +bool ASIFT_matcher::computeCenter(int& cx, int& cy) const +{ + if(getNbMatch()==0) + { + cerr<<"Error : cannot compute Center without matchs"< > kp_euc_dist; + + if(computeCenter(cx,cy)) + { + // cout<<"Center : "< temp_euc_dist; + for(unsigned int j=0;j<_matchings[i].size();j++) + { + keypoint kp = _matchings[i][j].first; + euc_dist =sqrt((kp.x-cx)*(kp.x-cx)+(kp.y-cy)+(kp.y-cy)); + dist_avg+=euc_dist; + temp_euc_dist.push_back(euc_dist); + } + total_kp += _matchings[i].size(); + kp_euc_dist.push_back(temp_euc_dist); + } + dist_avg/=total_kp; + // cout<<"Dist avg: "< filtered_match; + + for(unsigned int i=0;i<_matchings.size();i++) + { + matchingslist new_match; + for(unsigned int j=0;j<_matchings[i].size();j++) + { + euc_dist =kp_euc_dist[i][j]; + + if(euc_distx << " " << _zoom_refs[j]*ptr->y << " " << _zoom_refs[j]*ptr->scale << " " << ptr->angle; + + for (int ii = 0; ii < (int) VecLength; ii++) + { + file_key1 << " " << ptr->vec[ii]; + } + + file_key1 << std::endl; + } + } + } + // file_key1< size_tmp; + if (ref_file.is_open()) + { + std::getline(ref_file, line); + std::string::size_type sz; + // _nb_refs = std::stoi(line, &sz); //C++11 + _nb_refs = atoi(line.c_str()); + _keys = std::vector(_nb_refs); + _num_keys = std::vector< int >(_nb_refs); + _size_refs= std::vector< pair >(_nb_refs); + _num_tilts = std::vector< int >(_nb_refs,1); + _zoom_refs = std::vector(_nb_refs,1); + for(unsigned int i = 0; i<_nb_refs;i++) + { + std::getline(ref_file, line); + std::stringstream iss(line); + + std::getline(iss,tmp,' '); + _num_keys[i]=atoi(tmp.c_str()); + + std::getline(iss,tmp,' '); + if(VecLength!=atoi(tmp.c_str())) + { + std::cerr<<"Error VecLength doesn't correspond..."< vkps(1,list); + asift_keypoints akps(1,vkps); + _keys[i]=akps; + // std::getline(ref_file, line); + } + } + else + { + std::cerr << "Unable to open the file :"< +#include +#include +#include +#include +#include + +#ifdef _OPENMP +#include +#endif + +#include "demo_lib_sift.h" +// #include "io_png/io_png.h" + +#include "library.h" +#include "frot.h" +#include "fproj.h" +#include "compute_asift_keypoints.h" +#include "compute_asift_matches.h" + +#include "CImg.h" //Need ImageMagick package + +# define IM_X 800 +# define IM_Y 600 + +using namespace std; + +typedef vector< vector< keypointslist > > asift_keypoints; + +//ASIFT wrapper +class ASIFT_matcher +{ +public: + ASIFT_matcher(); + ASIFT_matcher(const char* ref_path); + ASIFT_matcher(const ASIFT_matcher& matcher) { *this = matcher;} + // virtual ~ASIFT_matcher(); + + bool addReference(const char* image_path, unsigned int num_tilts=1); + bool addReference(const vector& image, unsigned int w, unsigned int h, unsigned int num_tilts =1); + unsigned int match(const char* image_path, unsigned int num_tilts =1); + unsigned int match(const vector& image, unsigned int w, unsigned int h, unsigned int num_tilts =1); + bool computeROI(int& x, int& y, unsigned int& h, unsigned int& w) const; //Compute the bounding rectangle of the keypoints + bool computeCenter(int& cx, int& cy) const; + bool distFilter(int threshold); //Filter keypoint which are far (Euclidian distance) from the center. + + bool saveReferences(const char* ref_path) const; + bool loadReferences(const char* ref_path); + + ASIFT_matcher& operator=(const ASIFT_matcher& m); + + unsigned int getNbRef() const{ return _nb_refs;} + const vector< vector< float > >& getRefImgs() const{ return _im_refs;} + const vector< pair >& getSizeRef() const{ return _size_refs;} + const vector& getZoomRef() const{ return _zoom_refs;} + const std::vector& getNumKeys() const{ return _num_keys;} + const std::vector& getNumTilts() const{ return _num_tilts;} + const std::vector< asift_keypoints >& getKeys() const{ return _keys;} + const vector < unsigned int >& getNbMatchs() const{ return _num_matchings;} + unsigned int getNbMatch() const{ return _total_num_matchings;} + const vector< matchingslist >& getMatch() const{ return _matchings;} + vector< matchingslist >& getMatch(){ return _matchings;} + const siftPar& getSiftPar() const{ return _siftParam;} + void setSiftPar(const siftPar &newSiftPar){ _siftParam = newSiftPar;} + bool isResizingImg() const{ return _resize_imgs;} + void setResizeImg(bool resize_imgs){ _resize_imgs=resize_imgs;} + bool isShowingDebug() const{ return _showDebug;} + void showDebug(bool showDebug){ _showDebug=showDebug;} + + void print() const; //Debugging function + +protected: + + //Reference Images + // vector< image > _im_refs; + unsigned int _nb_refs;// = 0; //Number of reference images + vector< vector< float > > _im_refs; //Reference images used for matching + vector< pair > _size_refs; //Width/Height + vector _zoom_refs; //Zoom coeffs + + //ASIFT Keypoints + vector< int > _num_keys; //Number of keypoint/reference + vector< int > _num_tilts; //Number of tilts/reference (Speed VS Precision) + vector< asift_keypoints > _keys; //Keypoints + + //Matchs + unsigned int _total_num_matchings; + vector < unsigned int > _num_matchings; //Number of match/reference + vector< matchingslist > _matchings; //Matchs + + siftPar _siftParam; //SIFT parameters + + //Flags + bool _resize_imgs;// = false; //Resize images to IM_X/IM_Y ? + bool _showDebug;// = 0; //Show debugging messages ? +}; + +#endif \ No newline at end of file diff --git a/asift_match/src/CImg.h b/asift_match/src/CImg.h new file mode 100644 index 0000000..f1976c5 --- /dev/null +++ b/asift_match/src/CImg.h @@ -0,0 +1,60936 @@ +/* + # + # File : CImg.h + # ( C++ header file ) + # + # Description : The C++ Template Image Processing Toolkit. + # This file is the main component of the CImg Library project. + # ( http://cimg.eu ) + # + # Project manager : David Tschumperle. + # ( http://tschumperle.users.greyc.fr/ ) + # + # A complete list of contributors is available in file 'README.txt' + # distributed within the CImg package. + # + # Licenses : This file is 'dual-licensed', you have to choose one + # of the two licenses below to apply. + # + # CeCILL-C + # The CeCILL-C license is close to the GNU LGPL. + # ( http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html ) + # + # or CeCILL v2.1 + # The CeCILL license is compatible with the GNU GPL. + # ( http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html ) + # + # This software is governed either by the CeCILL or the CeCILL-C license + # under French law and abiding by the rules of distribution of free software. + # You can use, modify and or redistribute the software under the terms of + # the CeCILL or CeCILL-C licenses as circulated by CEA, CNRS and INRIA + # at the following URL: "http://www.cecill.info". + # + # As a counterpart to the access to the source code and rights to copy, + # modify and redistribute granted by the license, users are provided only + # with a limited warranty and the software's author, the holder of the + # economic rights, and the successive licensors have only limited + # liability. + # + # In this respect, the user's attention is drawn to the risks associated + # with loading, using, modifying and/or developing or reproducing the + # software by the user in light of its specific status of free software, + # that may mean that it is complicated to manipulate, and that also + # therefore means that it is reserved for developers and experienced + # professionals having in-depth computer knowledge. Users are therefore + # encouraged to load and test the software's suitability as regards their + # requirements in conditions enabling the security of their systems and/or + # data to be ensured and, more generally, to use and operate it in the + # same conditions as regards security. + # + # The fact that you are presently reading this means that you have had + # knowledge of the CeCILL and CeCILL-C licenses and that you accept its terms. + # +*/ + +// Set version number of the library. +#ifndef cimg_version +#define cimg_version 234 + +/*----------------------------------------------------------- + # + # Test and possibly auto-set CImg configuration variables + # and include required headers. + # + # If you find that the default configuration variables are + # not adapted to your system, you can override their values + # before including the header file "CImg.h" + # (use the #define directive). + # + ------------------------------------------------------------*/ + +// Include standard C++ headers. +// This is the minimal set of required headers to make CImg-based codes compile. +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Detect/configure OS variables. +// +// Define 'cimg_OS' to: '0' for an unknown OS (will try to minize library dependencies). +// '1' for a Unix-like OS (Linux, Solaris, BSD, MacOSX, Irix, ...). +// '2' for Microsoft Windows. +// (auto-detection is performed if 'cimg_OS' is not set by the user). +#ifndef cimg_OS +#if defined(unix) || defined(__unix) || defined(__unix__) \ + || defined(linux) || defined(__linux) || defined(__linux__) \ + || defined(sun) || defined(__sun) \ + || defined(BSD) || defined(__OpenBSD__) || defined(__NetBSD__) \ + || defined(__FreeBSD__) || defined (__DragonFly__) \ + || defined(sgi) || defined(__sgi) \ + || defined(__MACOSX__) || defined(__APPLE__) \ + || defined(__CYGWIN__) +#define cimg_OS 1 +#elif defined(_MSC_VER) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) \ + || defined(WIN64) || defined(_WIN64) || defined(__WIN64__) +#define cimg_OS 2 +#else +#define cimg_OS 0 +#endif +#elif !(cimg_OS==0 || cimg_OS==1 || cimg_OS==2) +#error CImg Library: Invalid configuration variable 'cimg_OS'. +#error (correct values are '0 = unknown OS', '1 = Unix-like OS', '2 = Microsoft Windows'). +#endif +#ifndef cimg_date +#define cimg_date __DATE__ +#endif +#ifndef cimg_time +#define cimg_time __TIME__ +#endif + +// Disable silly warnings on some Microsoft VC++ compilers. +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4127) +#pragma warning(disable:4244) +#pragma warning(disable:4311) +#pragma warning(disable:4312) +#pragma warning(disable:4319) +#pragma warning(disable:4512) +#pragma warning(disable:4571) +#pragma warning(disable:4640) +#pragma warning(disable:4706) +#pragma warning(disable:4710) +#pragma warning(disable:4800) +#pragma warning(disable:4804) +#pragma warning(disable:4820) +#pragma warning(disable:4996) + +#ifndef _CRT_SECURE_NO_DEPRECATE +#define _CRT_SECURE_NO_DEPRECATE 1 +#endif +#ifndef _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_WARNINGS 1 +#endif +#ifndef _CRT_NONSTDC_NO_DEPRECATE +#define _CRT_NONSTDC_NO_DEPRECATE 1 +#endif +#endif + +// Define correct string functions for each compiler and OS. +#if cimg_OS==2 && defined(_MSC_VER) +#define cimg_sscanf std::sscanf +#define cimg_sprintf std::sprintf +#define cimg_snprintf cimg::_snprintf +#define cimg_vsnprintf cimg::_vsnprintf +#else +#include +#if defined(__MACOSX__) || defined(__APPLE__) +#define cimg_sscanf cimg::_sscanf +#define cimg_sprintf cimg::_sprintf +#define cimg_snprintf cimg::_snprintf +#define cimg_vsnprintf cimg::_vsnprintf +#else +#define cimg_sscanf std::sscanf +#define cimg_sprintf std::sprintf +#define cimg_snprintf snprintf +#define cimg_vsnprintf vsnprintf +#endif +#endif + +// Include OS-specific headers. +#if cimg_OS==1 +#include +#include +#include +#include +#include +#include +#elif cimg_OS==2 +#ifndef std_fopen +#define std_fopen cimg::win_fopen +#endif +#ifndef NOMINMAX +#define NOMINMAX +#endif +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifndef _WIN32_IE +#define _WIN32_IE 0x0400 +#endif +#include +#include +#include +#endif + +// Look for C++11 features. +#ifndef cimg_use_cpp11 +#if __cplusplus>201100 +#define cimg_use_cpp11 1 +#else +#define cimg_use_cpp11 0 +#endif +#endif +#if cimg_use_cpp11==1 +#include +#include +#endif + +// Convenient macro to define pragma +#ifdef _MSC_VER +#define cimg_pragma(x) __pragma(x) +#else +#define cimg_pragma(x) _Pragma(#x) +#endif + +// Define own types 'cimg_long/ulong' and 'cimg_int64/uint64' to ensure portability. +// ( constrained to 'sizeof(cimg_ulong/cimg_long) = sizeof(void*)' and 'sizeof(cimg_int64/cimg_uint64)=8' ). +#if cimg_OS==2 + +#define cimg_uint64 unsigned __int64 +#define cimg_int64 __int64 +#define cimg_ulong UINT_PTR +#define cimg_long INT_PTR +#ifdef _MSC_VER +#define cimg_fuint64 "%I64u" +#define cimg_fint64 "%I64d" +#else +#define cimg_fuint64 "%llu" +#define cimg_fint64 "%lld" +#endif + +#else + +#if UINTPTR_MAX==0xffffffff || defined(__arm__) || defined(_M_ARM) || ((ULONG_MAX)==(UINT_MAX)) +#define cimg_uint64 unsigned long long +#define cimg_int64 long long +#define cimg_fuint64 "%llu" +#define cimg_fint64 "%lld" +#else +#define cimg_uint64 unsigned long +#define cimg_int64 long +#define cimg_fuint64 "%lu" +#define cimg_fint64 "%ld" +#endif + +#if defined(__arm__) || defined(_M_ARM) +#define cimg_ulong unsigned long long +#define cimg_long long long +#else +#define cimg_ulong unsigned long +#define cimg_long long +#endif + +#endif + +// Configure filename separator. +// +// Filename separator is set by default to '/', except for Windows where it is '\'. +#ifndef cimg_file_separator +#if cimg_OS==2 +#define cimg_file_separator '\\' +#else +#define cimg_file_separator '/' +#endif +#endif + +// Configure verbosity of output messages. +// +// Define 'cimg_verbosity' to: '0' to hide library messages (quiet mode). +// '1' to output library messages on the console. +// '2' to output library messages on a basic dialog window (default behavior). +// '3' to do as '1' + add extra warnings (may slow down the code!). +// '4' to do as '2' + add extra warnings (may slow down the code!). +// +// Define 'cimg_strict_warnings' to replace warning messages by exception throwns. +// +// Define 'cimg_use_vt100' to allow output of color messages on VT100-compatible terminals. +#ifndef cimg_verbosity +#if cimg_OS==2 +#define cimg_verbosity 2 +#else +#define cimg_verbosity 1 +#endif +#elif !(cimg_verbosity==0 || cimg_verbosity==1 || cimg_verbosity==2 || cimg_verbosity==3 || cimg_verbosity==4) +#error CImg Library: Configuration variable 'cimg_verbosity' is badly defined. +#error (should be { 0=quiet | 1=console | 2=dialog | 3=console+warnings | 4=dialog+warnings }). +#endif + +// Configure display framework. +// +// Define 'cimg_display' to: '0' to disable display capabilities. +// '1' to use the X-Window framework (X11). +// '2' to use the Microsoft GDI32 framework. +#ifndef cimg_display +#if cimg_OS==0 +#define cimg_display 0 +#elif cimg_OS==1 +#define cimg_display 1 +#elif cimg_OS==2 +#define cimg_display 2 +#endif +#elif !(cimg_display==0 || cimg_display==1 || cimg_display==2) +#error CImg Library: Configuration variable 'cimg_display' is badly defined. +#error (should be { 0=none | 1=X-Window (X11) | 2=Microsoft GDI32 }). +#endif + +// Configure the 'abort' signal handler (does nothing by default). +// A typical signal handler can be defined in your own source like this: +// #define cimg_abort_test if (is_abort) throw CImgAbortException("") +// +// where 'is_abort' is a boolean variable defined somewhere in your code and reachable in the method. +// 'cimg_abort_test2' does the same but is called more often (in inner loops). +#if defined(cimg_abort_test) && defined(cimg_use_openmp) + +// Define abort macros to be used with OpenMP. +#ifndef _cimg_abort_init_omp +#define _cimg_abort_init_omp bool _cimg_abort_go_omp = true; cimg::unused(_cimg_abort_go_omp) +#endif +#ifndef _cimg_abort_try_omp +#define _cimg_abort_try_omp if (_cimg_abort_go_omp) try +#endif +#ifndef _cimg_abort_catch_omp +#define _cimg_abort_catch_omp catch (CImgAbortException&) { cimg_pragma(omp atomic) _cimg_abort_go_omp&=false; } +#endif +#ifdef cimg_abort_test2 +#ifndef _cimg_abort_try_omp2 +#define _cimg_abort_try_omp2 _cimg_abort_try_omp +#endif +#ifndef _cimg_abort_catch_omp2 +#define _cimg_abort_catch_omp2 _cimg_abort_catch_omp +#endif +#ifndef _cimg_abort_catch_fill_omp +#define _cimg_abort_catch_fill_omp \ + catch (CImgException& e) { cimg_pragma(omp critical(abort)) CImg::string(e._message).move_to(is_error); \ + cimg_pragma(omp atomic) _cimg_abort_go_omp&=false; } +#endif +#endif +#endif + +#ifndef _cimg_abort_init_omp +#define _cimg_abort_init_omp +#endif +#ifndef _cimg_abort_try_omp +#define _cimg_abort_try_omp +#endif +#ifndef _cimg_abort_catch_omp +#define _cimg_abort_catch_omp +#endif +#ifndef _cimg_abort_try_omp2 +#define _cimg_abort_try_omp2 +#endif +#ifndef _cimg_abort_catch_omp2 +#define _cimg_abort_catch_omp2 +#endif +#ifndef _cimg_abort_catch_fill_omp +#define _cimg_abort_catch_fill_omp +#endif +#ifndef cimg_abort_init +#define cimg_abort_init +#endif +#ifndef cimg_abort_test +#define cimg_abort_test +#endif +#ifndef cimg_abort_test2 +#define cimg_abort_test2 +#endif +#ifndef std_fopen +#define std_fopen std::fopen +#endif + +// Include display-specific headers. +#if cimg_display==1 +#include +#include +#include +#include +#ifdef cimg_use_xshm +#include +#include +#include +#endif +#ifdef cimg_use_xrandr +#include +#endif +#endif +#ifndef cimg_appname +#define cimg_appname "CImg" +#endif + +// Configure OpenMP support. +// (http://www.openmp.org) +// +// Define 'cimg_use_openmp' to enable OpenMP support. +// +// OpenMP directives may be used in a (very) few CImg functions to get +// advantages of multi-core CPUs. +#ifdef cimg_use_openmp +#include +#define cimg_pragma_openmp(p) cimg_pragma(omp p) +#else +#define cimg_pragma_openmp(p) +#endif + +// Configure OpenCV support. +// (http://opencv.willowgarage.com/wiki/) +// +// Define 'cimg_use_opencv' to enable OpenCV support. +// +// OpenCV library may be used to access images from cameras +// (see method 'CImg::load_camera()'). +#ifdef cimg_use_opencv +#ifdef True +#undef True +#define _cimg_redefine_True +#endif +#ifdef False +#undef False +#define _cimg_redefine_False +#endif +#include +#include "cv.h" +#include "highgui.h" +#endif + +// Configure LibPNG support. +// (http://www.libpng.org) +// +// Define 'cimg_use_png' to enable LibPNG support. +// +// PNG library may be used to get a native support of '.png' files. +// (see methods 'CImg::{load,save}_png()'. +#ifdef cimg_use_png +extern "C" { +#include "png.h" +} +#endif + +// Configure LibJPEG support. +// (http://en.wikipedia.org/wiki/Libjpeg) +// +// Define 'cimg_use_jpeg' to enable LibJPEG support. +// +// JPEG library may be used to get a native support of '.jpg' files. +// (see methods 'CImg::{load,save}_jpeg()'). +#ifdef cimg_use_jpeg +extern "C" { +#include "jpeglib.h" +#include "setjmp.h" +} +#endif + +// Configure LibTIFF support. +// (http://www.libtiff.org) +// +// Define 'cimg_use_tiff' to enable LibTIFF support. +// +// TIFF library may be used to get a native support of '.tif' files. +// (see methods 'CImg[List]::{load,save}_tiff()'). +#ifdef cimg_use_tiff +extern "C" { +#define uint64 uint64_hack_ +#define int64 int64_hack_ +#include "tiffio.h" +#undef uint64 +#undef int64 +} +#endif + +// Configure LibMINC2 support. +// (http://en.wikibooks.org/wiki/MINC/Reference/MINC2.0_File_Format_Reference) +// +// Define 'cimg_use_minc2' to enable LibMINC2 support. +// +// MINC2 library may be used to get a native support of '.mnc' files. +// (see methods 'CImg::{load,save}_minc2()'). +#ifdef cimg_use_minc2 +#include "minc_io_simple_volume.h" +#include "minc_1_simple.h" +#include "minc_1_simple_rw.h" +#endif + +// Configure Zlib support. +// (http://www.zlib.net) +// +// Define 'cimg_use_zlib' to enable Zlib support. +// +// Zlib library may be used to allow compressed data in '.cimgz' files +// (see methods 'CImg[List]::{load,save}_cimg()'). +#ifdef cimg_use_zlib +extern "C" { +#include "zlib.h" +} +#endif + +// Configure libcurl support. +// (http://curl.haxx.se/libcurl/) +// +// Define 'cimg_use_curl' to enable libcurl support. +// +// Libcurl may be used to get a native support of file downloading from the network. +// (see method 'cimg::load_network()'.) +#ifdef cimg_use_curl +#include "curl/curl.h" +#endif + +// Configure Magick++ support. +// (http://www.imagemagick.org/Magick++) +// +// Define 'cimg_use_magick' to enable Magick++ support. +// +// Magick++ library may be used to get a native support of various image file formats. +// (see methods 'CImg::{load,save}()'). +#ifdef cimg_use_magick +#include "Magick++.h" +#endif + +// Configure FFTW3 support. +// (http://www.fftw.org) +// +// Define 'cimg_use_fftw3' to enable libFFTW3 support. +// +// FFTW3 library may be used to efficiently compute the Fast Fourier Transform +// of image data, without restriction on the image size. +// (see method 'CImg[List]::FFT()'). +#ifdef cimg_use_fftw3 +extern "C" { +#include "fftw3.h" +} +#endif + +// Configure LibBoard support. +// (http://libboard.sourceforge.net/) +// +// Define 'cimg_use_board' to enable Board support. +// +// Board library may be used to draw 3d objects in vector-graphics canvas +// that can be saved as '.ps' or '.svg' files afterwards. +// (see method 'CImg::draw_object3d()'). +#ifdef cimg_use_board +#include "Board.h" +#endif + +// Configure OpenEXR support. +// (http://www.openexr.com/) +// +// Define 'cimg_use_openexr' to enable OpenEXR support. +// +// OpenEXR library may be used to get a native support of '.exr' files. +// (see methods 'CImg::{load,save}_exr()'). +#ifdef cimg_use_openexr +#include "ImfRgbaFile.h" +#include "ImfInputFile.h" +#include "ImfChannelList.h" +#include "ImfMatrixAttribute.h" +#include "ImfArray.h" +#endif + +// Configure TinyEXR support. +// (https://github.com/syoyo/tinyexr) +// +// Define 'cimg_use_tinyexr' to enable TinyEXR support. +// +// TinyEXR is a small, single header-only library to load and save OpenEXR(.exr) images. +#ifdef cimg_use_tinyexr +#ifndef TINYEXR_IMPLEMENTATION +#define TINYEXR_IMPLEMENTATION +#endif +#include "tinyexr.h" +#endif + +// Lapack configuration. +// (http://www.netlib.org/lapack) +// +// Define 'cimg_use_lapack' to enable LAPACK support. +// +// Lapack library may be used in several CImg methods to speed up +// matrix computations (eigenvalues, inverse, ...). +#ifdef cimg_use_lapack +extern "C" { + extern void sgetrf_(int*, int*, float*, int*, int*, int*); + extern void sgetri_(int*, float*, int*, int*, float*, int*, int*); + extern void sgetrs_(char*, int*, int*, float*, int*, int*, float*, int*, int*); + extern void sgesvd_(char*, char*, int*, int*, float*, int*, float*, float*, int*, float*, int*, float*, int*, int*); + extern void ssyev_(char*, char*, int*, float*, int*, float*, float*, int*, int*); + extern void dgetrf_(int*, int*, double*, int*, int*, int*); + extern void dgetri_(int*, double*, int*, int*, double*, int*, int*); + extern void dgetrs_(char*, int*, int*, double*, int*, int*, double*, int*, int*); + extern void dgesvd_(char*, char*, int*, int*, double*, int*, double*, double*, + int*, double*, int*, double*, int*, int*); + extern void dsyev_(char*, char*, int*, double*, int*, double*, double*, int*, int*); + extern void dgels_(char*, int*,int*,int*,double*,int*,double*,int*,double*,int*,int*); + extern void sgels_(char*, int*,int*,int*,float*,int*,float*,int*,float*,int*,int*); +} +#endif + +// Check if min/max/PI macros are defined. +// +// CImg does not compile if macros 'min', 'max' or 'PI' are defined, +// because it redefines functions min(), max() and const variable PI in the cimg:: namespace. +// so it '#undef' these macros if necessary, and restore them to reasonable +// values at the end of this file. +#ifdef min +#undef min +#define _cimg_redefine_min +#endif +#ifdef max +#undef max +#define _cimg_redefine_max +#endif +#ifdef PI +#undef PI +#define _cimg_redefine_PI +#endif + +// Define 'cimg_library' namespace suffix. +// +// You may want to add a suffix to the 'cimg_library' namespace, for instance if you need to work +// with several versions of the library at the same time. +#ifdef cimg_namespace_suffix +#define __cimg_library_suffixed(s) cimg_library_##s +#define _cimg_library_suffixed(s) __cimg_library_suffixed(s) +#define cimg_library_suffixed _cimg_library_suffixed(cimg_namespace_suffix) +#else +#define cimg_library_suffixed cimg_library +#endif + +/*------------------------------------------------------------------------------ + # + # Define user-friendly macros. + # + # These CImg macros are prefixed by 'cimg_' and can be used safely in your own + # code. They are useful to parse command line options, or to write image loops. + # + ------------------------------------------------------------------------------*/ + +// Macros to define program usage, and retrieve command line arguments. +#define cimg_usage(usage) cimg_library_suffixed::cimg::option((char*)0,argc,argv,(char*)0,usage,false) +#define cimg_help(str) cimg_library_suffixed::cimg::option((char*)0,argc,argv,str,(char*)0) +#define cimg_option(name,defaut,usage) cimg_library_suffixed::cimg::option(name,argc,argv,defaut,usage) + +// Macros to define and manipulate local neighborhoods. +#define CImg_2x2(I,T) T I[4]; \ + T& I##cc = I[0]; T& I##nc = I[1]; \ + T& I##cn = I[2]; T& I##nn = I[3]; \ + I##cc = I##nc = \ + I##cn = I##nn = 0 + +#define CImg_3x3(I,T) T I[9]; \ + T& I##pp = I[0]; T& I##cp = I[1]; T& I##np = I[2]; \ + T& I##pc = I[3]; T& I##cc = I[4]; T& I##nc = I[5]; \ + T& I##pn = I[6]; T& I##cn = I[7]; T& I##nn = I[8]; \ + I##pp = I##cp = I##np = \ + I##pc = I##cc = I##nc = \ + I##pn = I##cn = I##nn = 0 + +#define CImg_4x4(I,T) T I[16]; \ + T& I##pp = I[0]; T& I##cp = I[1]; T& I##np = I[2]; T& I##ap = I[3]; \ + T& I##pc = I[4]; T& I##cc = I[5]; T& I##nc = I[6]; T& I##ac = I[7]; \ + T& I##pn = I[8]; T& I##cn = I[9]; T& I##nn = I[10]; T& I##an = I[11]; \ + T& I##pa = I[12]; T& I##ca = I[13]; T& I##na = I[14]; T& I##aa = I[15]; \ + I##pp = I##cp = I##np = I##ap = \ + I##pc = I##cc = I##nc = I##ac = \ + I##pn = I##cn = I##nn = I##an = \ + I##pa = I##ca = I##na = I##aa = 0 + +#define CImg_5x5(I,T) T I[25]; \ + T& I##bb = I[0]; T& I##pb = I[1]; T& I##cb = I[2]; T& I##nb = I[3]; T& I##ab = I[4]; \ + T& I##bp = I[5]; T& I##pp = I[6]; T& I##cp = I[7]; T& I##np = I[8]; T& I##ap = I[9]; \ + T& I##bc = I[10]; T& I##pc = I[11]; T& I##cc = I[12]; T& I##nc = I[13]; T& I##ac = I[14]; \ + T& I##bn = I[15]; T& I##pn = I[16]; T& I##cn = I[17]; T& I##nn = I[18]; T& I##an = I[19]; \ + T& I##ba = I[20]; T& I##pa = I[21]; T& I##ca = I[22]; T& I##na = I[23]; T& I##aa = I[24]; \ + I##bb = I##pb = I##cb = I##nb = I##ab = \ + I##bp = I##pp = I##cp = I##np = I##ap = \ + I##bc = I##pc = I##cc = I##nc = I##ac = \ + I##bn = I##pn = I##cn = I##nn = I##an = \ + I##ba = I##pa = I##ca = I##na = I##aa = 0 + +#define CImg_2x2x2(I,T) T I[8]; \ + T& I##ccc = I[0]; T& I##ncc = I[1]; \ + T& I##cnc = I[2]; T& I##nnc = I[3]; \ + T& I##ccn = I[4]; T& I##ncn = I[5]; \ + T& I##cnn = I[6]; T& I##nnn = I[7]; \ + I##ccc = I##ncc = \ + I##cnc = I##nnc = \ + I##ccn = I##ncn = \ + I##cnn = I##nnn = 0 + +#define CImg_3x3x3(I,T) T I[27]; \ + T& I##ppp = I[0]; T& I##cpp = I[1]; T& I##npp = I[2]; \ + T& I##pcp = I[3]; T& I##ccp = I[4]; T& I##ncp = I[5]; \ + T& I##pnp = I[6]; T& I##cnp = I[7]; T& I##nnp = I[8]; \ + T& I##ppc = I[9]; T& I##cpc = I[10]; T& I##npc = I[11]; \ + T& I##pcc = I[12]; T& I##ccc = I[13]; T& I##ncc = I[14]; \ + T& I##pnc = I[15]; T& I##cnc = I[16]; T& I##nnc = I[17]; \ + T& I##ppn = I[18]; T& I##cpn = I[19]; T& I##npn = I[20]; \ + T& I##pcn = I[21]; T& I##ccn = I[22]; T& I##ncn = I[23]; \ + T& I##pnn = I[24]; T& I##cnn = I[25]; T& I##nnn = I[26]; \ + I##ppp = I##cpp = I##npp = \ + I##pcp = I##ccp = I##ncp = \ + I##pnp = I##cnp = I##nnp = \ + I##ppc = I##cpc = I##npc = \ + I##pcc = I##ccc = I##ncc = \ + I##pnc = I##cnc = I##nnc = \ + I##ppn = I##cpn = I##npn = \ + I##pcn = I##ccn = I##ncn = \ + I##pnn = I##cnn = I##nnn = 0 + +#define cimg_get2x2(img,x,y,z,c,I,T) \ + I[0] = (T)(img)(x,y,z,c), I[1] = (T)(img)(_n1##x,y,z,c), I[2] = (T)(img)(x,_n1##y,z,c), \ + I[3] = (T)(img)(_n1##x,_n1##y,z,c) + +#define cimg_get3x3(img,x,y,z,c,I,T) \ + I[0] = (T)(img)(_p1##x,_p1##y,z,c), I[1] = (T)(img)(x,_p1##y,z,c), I[2] = (T)(img)(_n1##x,_p1##y,z,c), \ + I[3] = (T)(img)(_p1##x,y,z,c), I[4] = (T)(img)(x,y,z,c), I[5] = (T)(img)(_n1##x,y,z,c), \ + I[6] = (T)(img)(_p1##x,_n1##y,z,c), I[7] = (T)(img)(x,_n1##y,z,c), I[8] = (T)(img)(_n1##x,_n1##y,z,c) + +#define cimg_get4x4(img,x,y,z,c,I,T) \ + I[0] = (T)(img)(_p1##x,_p1##y,z,c), I[1] = (T)(img)(x,_p1##y,z,c), I[2] = (T)(img)(_n1##x,_p1##y,z,c), \ + I[3] = (T)(img)(_n2##x,_p1##y,z,c), I[4] = (T)(img)(_p1##x,y,z,c), I[5] = (T)(img)(x,y,z,c), \ + I[6] = (T)(img)(_n1##x,y,z,c), I[7] = (T)(img)(_n2##x,y,z,c), I[8] = (T)(img)(_p1##x,_n1##y,z,c), \ + I[9] = (T)(img)(x,_n1##y,z,c), I[10] = (T)(img)(_n1##x,_n1##y,z,c), I[11] = (T)(img)(_n2##x,_n1##y,z,c), \ + I[12] = (T)(img)(_p1##x,_n2##y,z,c), I[13] = (T)(img)(x,_n2##y,z,c), I[14] = (T)(img)(_n1##x,_n2##y,z,c), \ + I[15] = (T)(img)(_n2##x,_n2##y,z,c) + +#define cimg_get5x5(img,x,y,z,c,I,T) \ + I[0] = (T)(img)(_p2##x,_p2##y,z,c), I[1] = (T)(img)(_p1##x,_p2##y,z,c), I[2] = (T)(img)(x,_p2##y,z,c), \ + I[3] = (T)(img)(_n1##x,_p2##y,z,c), I[4] = (T)(img)(_n2##x,_p2##y,z,c), I[5] = (T)(img)(_p2##x,_p1##y,z,c), \ + I[6] = (T)(img)(_p1##x,_p1##y,z,c), I[7] = (T)(img)(x,_p1##y,z,c), I[8] = (T)(img)(_n1##x,_p1##y,z,c), \ + I[9] = (T)(img)(_n2##x,_p1##y,z,c), I[10] = (T)(img)(_p2##x,y,z,c), I[11] = (T)(img)(_p1##x,y,z,c), \ + I[12] = (T)(img)(x,y,z,c), I[13] = (T)(img)(_n1##x,y,z,c), I[14] = (T)(img)(_n2##x,y,z,c), \ + I[15] = (T)(img)(_p2##x,_n1##y,z,c), I[16] = (T)(img)(_p1##x,_n1##y,z,c), I[17] = (T)(img)(x,_n1##y,z,c), \ + I[18] = (T)(img)(_n1##x,_n1##y,z,c), I[19] = (T)(img)(_n2##x,_n1##y,z,c), I[20] = (T)(img)(_p2##x,_n2##y,z,c), \ + I[21] = (T)(img)(_p1##x,_n2##y,z,c), I[22] = (T)(img)(x,_n2##y,z,c), I[23] = (T)(img)(_n1##x,_n2##y,z,c), \ + I[24] = (T)(img)(_n2##x,_n2##y,z,c) + +#define cimg_get6x6(img,x,y,z,c,I,T) \ + I[0] = (T)(img)(_p2##x,_p2##y,z,c), I[1] = (T)(img)(_p1##x,_p2##y,z,c), I[2] = (T)(img)(x,_p2##y,z,c), \ + I[3] = (T)(img)(_n1##x,_p2##y,z,c), I[4] = (T)(img)(_n2##x,_p2##y,z,c), I[5] = (T)(img)(_n3##x,_p2##y,z,c), \ + I[6] = (T)(img)(_p2##x,_p1##y,z,c), I[7] = (T)(img)(_p1##x,_p1##y,z,c), I[8] = (T)(img)(x,_p1##y,z,c), \ + I[9] = (T)(img)(_n1##x,_p1##y,z,c), I[10] = (T)(img)(_n2##x,_p1##y,z,c), I[11] = (T)(img)(_n3##x,_p1##y,z,c), \ + I[12] = (T)(img)(_p2##x,y,z,c), I[13] = (T)(img)(_p1##x,y,z,c), I[14] = (T)(img)(x,y,z,c), \ + I[15] = (T)(img)(_n1##x,y,z,c), I[16] = (T)(img)(_n2##x,y,z,c), I[17] = (T)(img)(_n3##x,y,z,c), \ + I[18] = (T)(img)(_p2##x,_n1##y,z,c), I[19] = (T)(img)(_p1##x,_n1##y,z,c), I[20] = (T)(img)(x,_n1##y,z,c), \ + I[21] = (T)(img)(_n1##x,_n1##y,z,c), I[22] = (T)(img)(_n2##x,_n1##y,z,c), I[23] = (T)(img)(_n3##x,_n1##y,z,c), \ + I[24] = (T)(img)(_p2##x,_n2##y,z,c), I[25] = (T)(img)(_p1##x,_n2##y,z,c), I[26] = (T)(img)(x,_n2##y,z,c), \ + I[27] = (T)(img)(_n1##x,_n2##y,z,c), I[28] = (T)(img)(_n2##x,_n2##y,z,c), I[29] = (T)(img)(_n3##x,_n2##y,z,c), \ + I[30] = (T)(img)(_p2##x,_n3##y,z,c), I[31] = (T)(img)(_p1##x,_n3##y,z,c), I[32] = (T)(img)(x,_n3##y,z,c), \ + I[33] = (T)(img)(_n1##x,_n3##y,z,c), I[34] = (T)(img)(_n2##x,_n3##y,z,c), I[35] = (T)(img)(_n3##x,_n3##y,z,c) + +#define cimg_get7x7(img,x,y,z,c,I,T) \ + I[0] = (T)(img)(_p3##x,_p3##y,z,c), I[1] = (T)(img)(_p2##x,_p3##y,z,c), I[2] = (T)(img)(_p1##x,_p3##y,z,c), \ + I[3] = (T)(img)(x,_p3##y,z,c), I[4] = (T)(img)(_n1##x,_p3##y,z,c), I[5] = (T)(img)(_n2##x,_p3##y,z,c), \ + I[6] = (T)(img)(_n3##x,_p3##y,z,c), I[7] = (T)(img)(_p3##x,_p2##y,z,c), I[8] = (T)(img)(_p2##x,_p2##y,z,c), \ + I[9] = (T)(img)(_p1##x,_p2##y,z,c), I[10] = (T)(img)(x,_p2##y,z,c), I[11] = (T)(img)(_n1##x,_p2##y,z,c), \ + I[12] = (T)(img)(_n2##x,_p2##y,z,c), I[13] = (T)(img)(_n3##x,_p2##y,z,c), I[14] = (T)(img)(_p3##x,_p1##y,z,c), \ + I[15] = (T)(img)(_p2##x,_p1##y,z,c), I[16] = (T)(img)(_p1##x,_p1##y,z,c), I[17] = (T)(img)(x,_p1##y,z,c), \ + I[18] = (T)(img)(_n1##x,_p1##y,z,c), I[19] = (T)(img)(_n2##x,_p1##y,z,c), I[20] = (T)(img)(_n3##x,_p1##y,z,c), \ + I[21] = (T)(img)(_p3##x,y,z,c), I[22] = (T)(img)(_p2##x,y,z,c), I[23] = (T)(img)(_p1##x,y,z,c), \ + I[24] = (T)(img)(x,y,z,c), I[25] = (T)(img)(_n1##x,y,z,c), I[26] = (T)(img)(_n2##x,y,z,c), \ + I[27] = (T)(img)(_n3##x,y,z,c), I[28] = (T)(img)(_p3##x,_n1##y,z,c), I[29] = (T)(img)(_p2##x,_n1##y,z,c), \ + I[30] = (T)(img)(_p1##x,_n1##y,z,c), I[31] = (T)(img)(x,_n1##y,z,c), I[32] = (T)(img)(_n1##x,_n1##y,z,c), \ + I[33] = (T)(img)(_n2##x,_n1##y,z,c), I[34] = (T)(img)(_n3##x,_n1##y,z,c), I[35] = (T)(img)(_p3##x,_n2##y,z,c), \ + I[36] = (T)(img)(_p2##x,_n2##y,z,c), I[37] = (T)(img)(_p1##x,_n2##y,z,c), I[38] = (T)(img)(x,_n2##y,z,c), \ + I[39] = (T)(img)(_n1##x,_n2##y,z,c), I[40] = (T)(img)(_n2##x,_n2##y,z,c), I[41] = (T)(img)(_n3##x,_n2##y,z,c), \ + I[42] = (T)(img)(_p3##x,_n3##y,z,c), I[43] = (T)(img)(_p2##x,_n3##y,z,c), I[44] = (T)(img)(_p1##x,_n3##y,z,c), \ + I[45] = (T)(img)(x,_n3##y,z,c), I[46] = (T)(img)(_n1##x,_n3##y,z,c), I[47] = (T)(img)(_n2##x,_n3##y,z,c), \ + I[48] = (T)(img)(_n3##x,_n3##y,z,c) + +#define cimg_get8x8(img,x,y,z,c,I,T) \ + I[0] = (T)(img)(_p3##x,_p3##y,z,c), I[1] = (T)(img)(_p2##x,_p3##y,z,c), I[2] = (T)(img)(_p1##x,_p3##y,z,c), \ + I[3] = (T)(img)(x,_p3##y,z,c), I[4] = (T)(img)(_n1##x,_p3##y,z,c), I[5] = (T)(img)(_n2##x,_p3##y,z,c), \ + I[6] = (T)(img)(_n3##x,_p3##y,z,c), I[7] = (T)(img)(_n4##x,_p3##y,z,c), I[8] = (T)(img)(_p3##x,_p2##y,z,c), \ + I[9] = (T)(img)(_p2##x,_p2##y,z,c), I[10] = (T)(img)(_p1##x,_p2##y,z,c), I[11] = (T)(img)(x,_p2##y,z,c), \ + I[12] = (T)(img)(_n1##x,_p2##y,z,c), I[13] = (T)(img)(_n2##x,_p2##y,z,c), I[14] = (T)(img)(_n3##x,_p2##y,z,c), \ + I[15] = (T)(img)(_n4##x,_p2##y,z,c), I[16] = (T)(img)(_p3##x,_p1##y,z,c), I[17] = (T)(img)(_p2##x,_p1##y,z,c), \ + I[18] = (T)(img)(_p1##x,_p1##y,z,c), I[19] = (T)(img)(x,_p1##y,z,c), I[20] = (T)(img)(_n1##x,_p1##y,z,c), \ + I[21] = (T)(img)(_n2##x,_p1##y,z,c), I[22] = (T)(img)(_n3##x,_p1##y,z,c), I[23] = (T)(img)(_n4##x,_p1##y,z,c), \ + I[24] = (T)(img)(_p3##x,y,z,c), I[25] = (T)(img)(_p2##x,y,z,c), I[26] = (T)(img)(_p1##x,y,z,c), \ + I[27] = (T)(img)(x,y,z,c), I[28] = (T)(img)(_n1##x,y,z,c), I[29] = (T)(img)(_n2##x,y,z,c), \ + I[30] = (T)(img)(_n3##x,y,z,c), I[31] = (T)(img)(_n4##x,y,z,c), I[32] = (T)(img)(_p3##x,_n1##y,z,c), \ + I[33] = (T)(img)(_p2##x,_n1##y,z,c), I[34] = (T)(img)(_p1##x,_n1##y,z,c), I[35] = (T)(img)(x,_n1##y,z,c), \ + I[36] = (T)(img)(_n1##x,_n1##y,z,c), I[37] = (T)(img)(_n2##x,_n1##y,z,c), I[38] = (T)(img)(_n3##x,_n1##y,z,c), \ + I[39] = (T)(img)(_n4##x,_n1##y,z,c), I[40] = (T)(img)(_p3##x,_n2##y,z,c), I[41] = (T)(img)(_p2##x,_n2##y,z,c), \ + I[42] = (T)(img)(_p1##x,_n2##y,z,c), I[43] = (T)(img)(x,_n2##y,z,c), I[44] = (T)(img)(_n1##x,_n2##y,z,c), \ + I[45] = (T)(img)(_n2##x,_n2##y,z,c), I[46] = (T)(img)(_n3##x,_n2##y,z,c), I[47] = (T)(img)(_n4##x,_n2##y,z,c), \ + I[48] = (T)(img)(_p3##x,_n3##y,z,c), I[49] = (T)(img)(_p2##x,_n3##y,z,c), I[50] = (T)(img)(_p1##x,_n3##y,z,c), \ + I[51] = (T)(img)(x,_n3##y,z,c), I[52] = (T)(img)(_n1##x,_n3##y,z,c), I[53] = (T)(img)(_n2##x,_n3##y,z,c), \ + I[54] = (T)(img)(_n3##x,_n3##y,z,c), I[55] = (T)(img)(_n4##x,_n3##y,z,c), I[56] = (T)(img)(_p3##x,_n4##y,z,c), \ + I[57] = (T)(img)(_p2##x,_n4##y,z,c), I[58] = (T)(img)(_p1##x,_n4##y,z,c), I[59] = (T)(img)(x,_n4##y,z,c), \ + I[60] = (T)(img)(_n1##x,_n4##y,z,c), I[61] = (T)(img)(_n2##x,_n4##y,z,c), I[62] = (T)(img)(_n3##x,_n4##y,z,c), \ + I[63] = (T)(img)(_n4##x,_n4##y,z,c); + +#define cimg_get9x9(img,x,y,z,c,I,T) \ + I[0] = (T)(img)(_p4##x,_p4##y,z,c), I[1] = (T)(img)(_p3##x,_p4##y,z,c), I[2] = (T)(img)(_p2##x,_p4##y,z,c), \ + I[3] = (T)(img)(_p1##x,_p4##y,z,c), I[4] = (T)(img)(x,_p4##y,z,c), I[5] = (T)(img)(_n1##x,_p4##y,z,c), \ + I[6] = (T)(img)(_n2##x,_p4##y,z,c), I[7] = (T)(img)(_n3##x,_p4##y,z,c), I[8] = (T)(img)(_n4##x,_p4##y,z,c), \ + I[9] = (T)(img)(_p4##x,_p3##y,z,c), I[10] = (T)(img)(_p3##x,_p3##y,z,c), I[11] = (T)(img)(_p2##x,_p3##y,z,c), \ + I[12] = (T)(img)(_p1##x,_p3##y,z,c), I[13] = (T)(img)(x,_p3##y,z,c), I[14] = (T)(img)(_n1##x,_p3##y,z,c), \ + I[15] = (T)(img)(_n2##x,_p3##y,z,c), I[16] = (T)(img)(_n3##x,_p3##y,z,c), I[17] = (T)(img)(_n4##x,_p3##y,z,c), \ + I[18] = (T)(img)(_p4##x,_p2##y,z,c), I[19] = (T)(img)(_p3##x,_p2##y,z,c), I[20] = (T)(img)(_p2##x,_p2##y,z,c), \ + I[21] = (T)(img)(_p1##x,_p2##y,z,c), I[22] = (T)(img)(x,_p2##y,z,c), I[23] = (T)(img)(_n1##x,_p2##y,z,c), \ + I[24] = (T)(img)(_n2##x,_p2##y,z,c), I[25] = (T)(img)(_n3##x,_p2##y,z,c), I[26] = (T)(img)(_n4##x,_p2##y,z,c), \ + I[27] = (T)(img)(_p4##x,_p1##y,z,c), I[28] = (T)(img)(_p3##x,_p1##y,z,c), I[29] = (T)(img)(_p2##x,_p1##y,z,c), \ + I[30] = (T)(img)(_p1##x,_p1##y,z,c), I[31] = (T)(img)(x,_p1##y,z,c), I[32] = (T)(img)(_n1##x,_p1##y,z,c), \ + I[33] = (T)(img)(_n2##x,_p1##y,z,c), I[34] = (T)(img)(_n3##x,_p1##y,z,c), I[35] = (T)(img)(_n4##x,_p1##y,z,c), \ + I[36] = (T)(img)(_p4##x,y,z,c), I[37] = (T)(img)(_p3##x,y,z,c), I[38] = (T)(img)(_p2##x,y,z,c), \ + I[39] = (T)(img)(_p1##x,y,z,c), I[40] = (T)(img)(x,y,z,c), I[41] = (T)(img)(_n1##x,y,z,c), \ + I[42] = (T)(img)(_n2##x,y,z,c), I[43] = (T)(img)(_n3##x,y,z,c), I[44] = (T)(img)(_n4##x,y,z,c), \ + I[45] = (T)(img)(_p4##x,_n1##y,z,c), I[46] = (T)(img)(_p3##x,_n1##y,z,c), I[47] = (T)(img)(_p2##x,_n1##y,z,c), \ + I[48] = (T)(img)(_p1##x,_n1##y,z,c), I[49] = (T)(img)(x,_n1##y,z,c), I[50] = (T)(img)(_n1##x,_n1##y,z,c), \ + I[51] = (T)(img)(_n2##x,_n1##y,z,c), I[52] = (T)(img)(_n3##x,_n1##y,z,c), I[53] = (T)(img)(_n4##x,_n1##y,z,c), \ + I[54] = (T)(img)(_p4##x,_n2##y,z,c), I[55] = (T)(img)(_p3##x,_n2##y,z,c), I[56] = (T)(img)(_p2##x,_n2##y,z,c), \ + I[57] = (T)(img)(_p1##x,_n2##y,z,c), I[58] = (T)(img)(x,_n2##y,z,c), I[59] = (T)(img)(_n1##x,_n2##y,z,c), \ + I[60] = (T)(img)(_n2##x,_n2##y,z,c), I[61] = (T)(img)(_n3##x,_n2##y,z,c), I[62] = (T)(img)(_n4##x,_n2##y,z,c), \ + I[63] = (T)(img)(_p4##x,_n3##y,z,c), I[64] = (T)(img)(_p3##x,_n3##y,z,c), I[65] = (T)(img)(_p2##x,_n3##y,z,c), \ + I[66] = (T)(img)(_p1##x,_n3##y,z,c), I[67] = (T)(img)(x,_n3##y,z,c), I[68] = (T)(img)(_n1##x,_n3##y,z,c), \ + I[69] = (T)(img)(_n2##x,_n3##y,z,c), I[70] = (T)(img)(_n3##x,_n3##y,z,c), I[71] = (T)(img)(_n4##x,_n3##y,z,c), \ + I[72] = (T)(img)(_p4##x,_n4##y,z,c), I[73] = (T)(img)(_p3##x,_n4##y,z,c), I[74] = (T)(img)(_p2##x,_n4##y,z,c), \ + I[75] = (T)(img)(_p1##x,_n4##y,z,c), I[76] = (T)(img)(x,_n4##y,z,c), I[77] = (T)(img)(_n1##x,_n4##y,z,c), \ + I[78] = (T)(img)(_n2##x,_n4##y,z,c), I[79] = (T)(img)(_n3##x,_n4##y,z,c), I[80] = (T)(img)(_n4##x,_n4##y,z,c) + +#define cimg_get2x2x2(img,x,y,z,c,I,T) \ + I[0] = (T)(img)(x,y,z,c), I[1] = (T)(img)(_n1##x,y,z,c), I[2] = (T)(img)(x,_n1##y,z,c), \ + I[3] = (T)(img)(_n1##x,_n1##y,z,c), I[4] = (T)(img)(x,y,_n1##z,c), I[5] = (T)(img)(_n1##x,y,_n1##z,c), \ + I[6] = (T)(img)(x,_n1##y,_n1##z,c), I[7] = (T)(img)(_n1##x,_n1##y,_n1##z,c) + +#define cimg_get3x3x3(img,x,y,z,c,I,T) \ + I[0] = (T)(img)(_p1##x,_p1##y,_p1##z,c), I[1] = (T)(img)(x,_p1##y,_p1##z,c), \ + I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c), I[3] = (T)(img)(_p1##x,y,_p1##z,c), I[4] = (T)(img)(x,y,_p1##z,c), \ + I[5] = (T)(img)(_n1##x,y,_p1##z,c), I[6] = (T)(img)(_p1##x,_n1##y,_p1##z,c), I[7] = (T)(img)(x,_n1##y,_p1##z,c), \ + I[8] = (T)(img)(_n1##x,_n1##y,_p1##z,c), I[9] = (T)(img)(_p1##x,_p1##y,z,c), I[10] = (T)(img)(x,_p1##y,z,c), \ + I[11] = (T)(img)(_n1##x,_p1##y,z,c), I[12] = (T)(img)(_p1##x,y,z,c), I[13] = (T)(img)(x,y,z,c), \ + I[14] = (T)(img)(_n1##x,y,z,c), I[15] = (T)(img)(_p1##x,_n1##y,z,c), I[16] = (T)(img)(x,_n1##y,z,c), \ + I[17] = (T)(img)(_n1##x,_n1##y,z,c), I[18] = (T)(img)(_p1##x,_p1##y,_n1##z,c), I[19] = (T)(img)(x,_p1##y,_n1##z,c), \ + I[20] = (T)(img)(_n1##x,_p1##y,_n1##z,c), I[21] = (T)(img)(_p1##x,y,_n1##z,c), I[22] = (T)(img)(x,y,_n1##z,c), \ + I[23] = (T)(img)(_n1##x,y,_n1##z,c), I[24] = (T)(img)(_p1##x,_n1##y,_n1##z,c), I[25] = (T)(img)(x,_n1##y,_n1##z,c), \ + I[26] = (T)(img)(_n1##x,_n1##y,_n1##z,c) + +// Macros to perform various image loops. +// +// These macros are simpler to use than loops with C++ iterators. +#define cimg_for(img,ptrs,T_ptrs) \ + for (T_ptrs *ptrs = (img)._data, *_max##ptrs = (img)._data + (img).size(); ptrs<_max##ptrs; ++ptrs) +#define cimg_rof(img,ptrs,T_ptrs) for (T_ptrs *ptrs = (img)._data + (img).size() - 1; ptrs>=(img)._data; --ptrs) +#define cimg_foroff(img,off) for (cimg_ulong off = 0, _max##off = (img).size(); off<_max##off; ++off) + +#define cimg_for1(bound,i) for (int i = 0; i<(int)(bound); ++i) +#define cimg_forX(img,x) cimg_for1((img)._width,x) +#define cimg_forY(img,y) cimg_for1((img)._height,y) +#define cimg_forZ(img,z) cimg_for1((img)._depth,z) +#define cimg_forC(img,c) cimg_for1((img)._spectrum,c) +#define cimg_forXY(img,x,y) cimg_forY(img,y) cimg_forX(img,x) +#define cimg_forXZ(img,x,z) cimg_forZ(img,z) cimg_forX(img,x) +#define cimg_forYZ(img,y,z) cimg_forZ(img,z) cimg_forY(img,y) +#define cimg_forXC(img,x,c) cimg_forC(img,c) cimg_forX(img,x) +#define cimg_forYC(img,y,c) cimg_forC(img,c) cimg_forY(img,y) +#define cimg_forZC(img,z,c) cimg_forC(img,c) cimg_forZ(img,z) +#define cimg_forXYZ(img,x,y,z) cimg_forZ(img,z) cimg_forXY(img,x,y) +#define cimg_forXYC(img,x,y,c) cimg_forC(img,c) cimg_forXY(img,x,y) +#define cimg_forXZC(img,x,z,c) cimg_forC(img,c) cimg_forXZ(img,x,z) +#define cimg_forYZC(img,y,z,c) cimg_forC(img,c) cimg_forYZ(img,y,z) +#define cimg_forXYZC(img,x,y,z,c) cimg_forC(img,c) cimg_forXYZ(img,x,y,z) + +#define cimg_rof1(bound,i) for (int i = (int)(bound) - 1; i>=0; --i) +#define cimg_rofX(img,x) cimg_rof1((img)._width,x) +#define cimg_rofY(img,y) cimg_rof1((img)._height,y) +#define cimg_rofZ(img,z) cimg_rof1((img)._depth,z) +#define cimg_rofC(img,c) cimg_rof1((img)._spectrum,c) +#define cimg_rofXY(img,x,y) cimg_rofY(img,y) cimg_rofX(img,x) +#define cimg_rofXZ(img,x,z) cimg_rofZ(img,z) cimg_rofX(img,x) +#define cimg_rofYZ(img,y,z) cimg_rofZ(img,z) cimg_rofY(img,y) +#define cimg_rofXC(img,x,c) cimg_rofC(img,c) cimg_rofX(img,x) +#define cimg_rofYC(img,y,c) cimg_rofC(img,c) cimg_rofY(img,y) +#define cimg_rofZC(img,z,c) cimg_rofC(img,c) cimg_rofZ(img,z) +#define cimg_rofXYZ(img,x,y,z) cimg_rofZ(img,z) cimg_rofXY(img,x,y) +#define cimg_rofXYC(img,x,y,c) cimg_rofC(img,c) cimg_rofXY(img,x,y) +#define cimg_rofXZC(img,x,z,c) cimg_rofC(img,c) cimg_rofXZ(img,x,z) +#define cimg_rofYZC(img,y,z,c) cimg_rofC(img,c) cimg_rofYZ(img,y,z) +#define cimg_rofXYZC(img,x,y,z,c) cimg_rofC(img,c) cimg_rofXYZ(img,x,y,z) + +#define cimg_for_in1(bound,i0,i1,i) \ + for (int i = (int)(i0)<0?0:(int)(i0), _max##i = (int)(i1)<(int)(bound)?(int)(i1):(int)(bound) - 1; i<=_max##i; ++i) +#define cimg_for_inX(img,x0,x1,x) cimg_for_in1((img)._width,x0,x1,x) +#define cimg_for_inY(img,y0,y1,y) cimg_for_in1((img)._height,y0,y1,y) +#define cimg_for_inZ(img,z0,z1,z) cimg_for_in1((img)._depth,z0,z1,z) +#define cimg_for_inC(img,c0,c1,c) cimg_for_in1((img)._spectrum,c0,c1,c) +#define cimg_for_inXY(img,x0,y0,x1,y1,x,y) cimg_for_inY(img,y0,y1,y) cimg_for_inX(img,x0,x1,x) +#define cimg_for_inXZ(img,x0,z0,x1,z1,x,z) cimg_for_inZ(img,z0,z1,z) cimg_for_inX(img,x0,x1,x) +#define cimg_for_inXC(img,x0,c0,x1,c1,x,c) cimg_for_inC(img,c0,c1,c) cimg_for_inX(img,x0,x1,x) +#define cimg_for_inYZ(img,y0,z0,y1,z1,y,z) cimg_for_inZ(img,x0,z1,z) cimg_for_inY(img,y0,y1,y) +#define cimg_for_inYC(img,y0,c0,y1,c1,y,c) cimg_for_inC(img,c0,c1,c) cimg_for_inY(img,y0,y1,y) +#define cimg_for_inZC(img,z0,c0,z1,c1,z,c) cimg_for_inC(img,c0,c1,c) cimg_for_inZ(img,z0,z1,z) +#define cimg_for_inXYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_inZ(img,z0,z1,z) cimg_for_inXY(img,x0,y0,x1,y1,x,y) +#define cimg_for_inXYC(img,x0,y0,c0,x1,y1,c1,x,y,c) cimg_for_inC(img,c0,c1,c) cimg_for_inXY(img,x0,y0,x1,y1,x,y) +#define cimg_for_inXZC(img,x0,z0,c0,x1,z1,c1,x,z,c) cimg_for_inC(img,c0,c1,c) cimg_for_inXZ(img,x0,z0,x1,z1,x,z) +#define cimg_for_inYZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_inC(img,c0,c1,c) cimg_for_inYZ(img,y0,z0,y1,z1,y,z) +#define cimg_for_inXYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \ + cimg_for_inC(img,c0,c1,c) cimg_for_inXYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) +#define cimg_for_insideX(img,x,n) cimg_for_inX(img,n,(img)._width - 1 - (n),x) +#define cimg_for_insideY(img,y,n) cimg_for_inY(img,n,(img)._height - 1 - (n),y) +#define cimg_for_insideZ(img,z,n) cimg_for_inZ(img,n,(img)._depth - 1 - (n),z) +#define cimg_for_insideC(img,c,n) cimg_for_inC(img,n,(img)._spectrum - 1 - (n),c) +#define cimg_for_insideXY(img,x,y,n) cimg_for_inXY(img,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),x,y) +#define cimg_for_insideXYZ(img,x,y,z,n) \ + cimg_for_inXYZ(img,n,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),(img)._depth - 1 - (n),x,y,z) +#define cimg_for_insideXYZC(img,x,y,z,c,n) \ + cimg_for_inXYZ(img,n,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),(img)._depth - 1 - (n),x,y,z) + +#define cimg_for_out1(boundi,i0,i1,i) \ + for (int i = (int)(i0)>0?0:(int)(i1) + 1; i<(int)(boundi); ++i, i = i==(int)(i0)?(int)(i1) + 1:i) +#define cimg_for_out2(boundi,boundj,i0,j0,i1,j1,i,j) \ + for (int j = 0; j<(int)(boundj); ++j) \ + for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j?0:(int)(i0)>0?0:(int)(i1) + 1; i<(int)(boundi); \ + ++i, i = _n1j?i:(i==(int)(i0)?(int)(i1) + 1:i)) +#define cimg_for_out3(boundi,boundj,boundk,i0,j0,k0,i1,j1,k1,i,j,k) \ + for (int k = 0; k<(int)(boundk); ++k) \ + for (int _n1k = (int)(k<(int)(k0) || k>(int)(k1)), j = 0; j<(int)(boundj); ++j) \ + for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j || _n1k?0:(int)(i0)>0?0:(int)(i1) + 1; i<(int)(boundi); \ + ++i, i = _n1j || _n1k?i:(i==(int)(i0)?(int)(i1) + 1:i)) +#define cimg_for_out4(boundi,boundj,boundk,boundl,i0,j0,k0,l0,i1,j1,k1,l1,i,j,k,l) \ + for (int l = 0; l<(int)(boundl); ++l) \ + for (int _n1l = (int)(l<(int)(l0) || l>(int)(l1)), k = 0; k<(int)(boundk); ++k) \ + for (int _n1k = (int)(k<(int)(k0) || k>(int)(k1)), j = 0; j<(int)(boundj); ++j) \ + for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j || _n1k || _n1l?0:(int)(i0)>0?0:(int)(i1) + 1; \ + i<(int)(boundi); ++i, i = _n1j || _n1k || _n1l?i:(i==(int)(i0)?(int)(i1) + 1:i)) +#define cimg_for_outX(img,x0,x1,x) cimg_for_out1((img)._width,x0,x1,x) +#define cimg_for_outY(img,y0,y1,y) cimg_for_out1((img)._height,y0,y1,y) +#define cimg_for_outZ(img,z0,z1,z) cimg_for_out1((img)._depth,z0,z1,z) +#define cimg_for_outC(img,c0,c1,c) cimg_for_out1((img)._spectrum,c0,c1,c) +#define cimg_for_outXY(img,x0,y0,x1,y1,x,y) cimg_for_out2((img)._width,(img)._height,x0,y0,x1,y1,x,y) +#define cimg_for_outXZ(img,x0,z0,x1,z1,x,z) cimg_for_out2((img)._width,(img)._depth,x0,z0,x1,z1,x,z) +#define cimg_for_outXC(img,x0,c0,x1,c1,x,c) cimg_for_out2((img)._width,(img)._spectrum,x0,c0,x1,c1,x,c) +#define cimg_for_outYZ(img,y0,z0,y1,z1,y,z) cimg_for_out2((img)._height,(img)._depth,y0,z0,y1,z1,y,z) +#define cimg_for_outYC(img,y0,c0,y1,c1,y,c) cimg_for_out2((img)._height,(img)._spectrum,y0,c0,y1,c1,y,c) +#define cimg_for_outZC(img,z0,c0,z1,c1,z,c) cimg_for_out2((img)._depth,(img)._spectrum,z0,c0,z1,c1,z,c) +#define cimg_for_outXYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) \ + cimg_for_out3((img)._width,(img)._height,(img)._depth,x0,y0,z0,x1,y1,z1,x,y,z) +#define cimg_for_outXYC(img,x0,y0,c0,x1,y1,c1,x,y,c) \ + cimg_for_out3((img)._width,(img)._height,(img)._spectrum,x0,y0,c0,x1,y1,c1,x,y,c) +#define cimg_for_outXZC(img,x0,z0,c0,x1,z1,c1,x,z,c) \ + cimg_for_out3((img)._width,(img)._depth,(img)._spectrum,x0,z0,c0,x1,z1,c1,x,z,c) +#define cimg_for_outYZC(img,y0,z0,c0,y1,z1,c1,y,z,c) \ + cimg_for_out3((img)._height,(img)._depth,(img)._spectrum,y0,z0,c0,y1,z1,c1,y,z,c) +#define cimg_for_outXYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \ + cimg_for_out4((img)._width,(img)._height,(img)._depth,(img)._spectrum,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) +#define cimg_for_borderX(img,x,n) cimg_for_outX(img,n,(img)._width - 1 - (n),x) +#define cimg_for_borderY(img,y,n) cimg_for_outY(img,n,(img)._height - 1 - (n),y) +#define cimg_for_borderZ(img,z,n) cimg_for_outZ(img,n,(img)._depth - 1 - (n),z) +#define cimg_for_borderC(img,c,n) cimg_for_outC(img,n,(img)._spectrum - 1 - (n),c) +#define cimg_for_borderXY(img,x,y,n) cimg_for_outXY(img,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),x,y) +#define cimg_for_borderXYZ(img,x,y,z,n) \ + cimg_for_outXYZ(img,n,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),(img)._depth - 1 - (n),x,y,z) +#define cimg_for_borderXYZC(img,x,y,z,c,n) \ + cimg_for_outXYZC(img,n,n,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n), \ + (img)._depth - 1 - (n),(img)._spectrum - 1 - (n),x,y,z,c) + +#define cimg_for_spiralXY(img,x,y) \ + for (int x = 0, y = 0, _n1##x = 1, _n1##y = (img).width()*(img).height(); _n1##y; \ + --_n1##y, _n1##x+=(_n1##x>>2) - ((!(_n1##x&3)?--y:((_n1##x&3)==1?(img)._width - 1 - ++x:\ + ((_n1##x&3)==2?(img)._height - 1 - ++y:--x))))?0:1) + +#define cimg_for_lineXY(x,y,x0,y0,x1,y1) \ + for (int x = (int)(x0), y = (int)(y0), _sx = 1, _sy = 1, _steep = 0, \ + _dx=(x1)>(x0)?(int)(x1) - (int)(x0):(_sx=-1,(int)(x0) - (int)(x1)), \ + _dy=(y1)>(y0)?(int)(y1) - (int)(y0):(_sy=-1,(int)(y0) - (int)(y1)), \ + _counter = _dx, \ + _err = _dx>_dy?(_dy>>1):((_steep=1),(_counter=_dy),(_dx>>1)); \ + _counter>=0; \ + --_counter, x+=_steep? \ + (y+=_sy,(_err-=_dx)<0?_err+=_dy,_sx:0): \ + (y+=(_err-=_dy)<0?_err+=_dx,_sy:0,_sx)) + +#define cimg_for2(bound,i) \ + for (int i = 0, _n1##i = 1>=(bound)?(int)(bound) - 1:1; \ + _n1##i<(int)(bound) || i==--_n1##i; \ + ++i, ++_n1##i) +#define cimg_for2X(img,x) cimg_for2((img)._width,x) +#define cimg_for2Y(img,y) cimg_for2((img)._height,y) +#define cimg_for2Z(img,z) cimg_for2((img)._depth,z) +#define cimg_for2C(img,c) cimg_for2((img)._spectrum,c) +#define cimg_for2XY(img,x,y) cimg_for2Y(img,y) cimg_for2X(img,x) +#define cimg_for2XZ(img,x,z) cimg_for2Z(img,z) cimg_for2X(img,x) +#define cimg_for2XC(img,x,c) cimg_for2C(img,c) cimg_for2X(img,x) +#define cimg_for2YZ(img,y,z) cimg_for2Z(img,z) cimg_for2Y(img,y) +#define cimg_for2YC(img,y,c) cimg_for2C(img,c) cimg_for2Y(img,y) +#define cimg_for2ZC(img,z,c) cimg_for2C(img,c) cimg_for2Z(img,z) +#define cimg_for2XYZ(img,x,y,z) cimg_for2Z(img,z) cimg_for2XY(img,x,y) +#define cimg_for2XZC(img,x,z,c) cimg_for2C(img,c) cimg_for2XZ(img,x,z) +#define cimg_for2YZC(img,y,z,c) cimg_for2C(img,c) cimg_for2YZ(img,y,z) +#define cimg_for2XYZC(img,x,y,z,c) cimg_for2C(img,c) cimg_for2XYZ(img,x,y,z) + +#define cimg_for_in2(bound,i0,i1,i) \ + for (int i = (int)(i0)<0?0:(int)(i0), \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1; \ + i<=(int)(i1) && (_n1##i<(int)(bound) || i==--_n1##i); \ + ++i, ++_n1##i) +#define cimg_for_in2X(img,x0,x1,x) cimg_for_in2((img)._width,x0,x1,x) +#define cimg_for_in2Y(img,y0,y1,y) cimg_for_in2((img)._height,y0,y1,y) +#define cimg_for_in2Z(img,z0,z1,z) cimg_for_in2((img)._depth,z0,z1,z) +#define cimg_for_in2C(img,c0,c1,c) cimg_for_in2((img)._spectrum,c0,c1,c) +#define cimg_for_in2XY(img,x0,y0,x1,y1,x,y) cimg_for_in2Y(img,y0,y1,y) cimg_for_in2X(img,x0,x1,x) +#define cimg_for_in2XZ(img,x0,z0,x1,z1,x,z) cimg_for_in2Z(img,z0,z1,z) cimg_for_in2X(img,x0,x1,x) +#define cimg_for_in2XC(img,x0,c0,x1,c1,x,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2X(img,x0,x1,x) +#define cimg_for_in2YZ(img,y0,z0,y1,z1,y,z) cimg_for_in2Z(img,z0,z1,z) cimg_for_in2Y(img,y0,y1,y) +#define cimg_for_in2YC(img,y0,c0,y1,c1,y,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2Y(img,y0,y1,y) +#define cimg_for_in2ZC(img,z0,c0,z1,c1,z,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2Z(img,z0,z1,z) +#define cimg_for_in2XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in2Z(img,z0,z1,z) cimg_for_in2XY(img,x0,y0,x1,y1,x,y) +#define cimg_for_in2XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2XZ(img,x0,y0,x1,y1,x,z) +#define cimg_for_in2YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in2C(img,c0,c1,c) cimg_for_in2YZ(img,y0,z0,y1,z1,y,z) +#define cimg_for_in2XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \ + cimg_for_in2C(img,c0,c1,c) cimg_for_in2XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) + +#define cimg_for3(bound,i) \ + for (int i = 0, _p1##i = 0, \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1; \ + _n1##i<(int)(bound) || i==--_n1##i; \ + _p1##i = i++, ++_n1##i) +#define cimg_for3X(img,x) cimg_for3((img)._width,x) +#define cimg_for3Y(img,y) cimg_for3((img)._height,y) +#define cimg_for3Z(img,z) cimg_for3((img)._depth,z) +#define cimg_for3C(img,c) cimg_for3((img)._spectrum,c) +#define cimg_for3XY(img,x,y) cimg_for3Y(img,y) cimg_for3X(img,x) +#define cimg_for3XZ(img,x,z) cimg_for3Z(img,z) cimg_for3X(img,x) +#define cimg_for3XC(img,x,c) cimg_for3C(img,c) cimg_for3X(img,x) +#define cimg_for3YZ(img,y,z) cimg_for3Z(img,z) cimg_for3Y(img,y) +#define cimg_for3YC(img,y,c) cimg_for3C(img,c) cimg_for3Y(img,y) +#define cimg_for3ZC(img,z,c) cimg_for3C(img,c) cimg_for3Z(img,z) +#define cimg_for3XYZ(img,x,y,z) cimg_for3Z(img,z) cimg_for3XY(img,x,y) +#define cimg_for3XZC(img,x,z,c) cimg_for3C(img,c) cimg_for3XZ(img,x,z) +#define cimg_for3YZC(img,y,z,c) cimg_for3C(img,c) cimg_for3YZ(img,y,z) +#define cimg_for3XYZC(img,x,y,z,c) cimg_for3C(img,c) cimg_for3XYZ(img,x,y,z) + +#define cimg_for_in3(bound,i0,i1,i) \ + for (int i = (int)(i0)<0?0:(int)(i0), \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1; \ + i<=(int)(i1) && (_n1##i<(int)(bound) || i==--_n1##i); \ + _p1##i = i++, ++_n1##i) +#define cimg_for_in3X(img,x0,x1,x) cimg_for_in3((img)._width,x0,x1,x) +#define cimg_for_in3Y(img,y0,y1,y) cimg_for_in3((img)._height,y0,y1,y) +#define cimg_for_in3Z(img,z0,z1,z) cimg_for_in3((img)._depth,z0,z1,z) +#define cimg_for_in3C(img,c0,c1,c) cimg_for_in3((img)._spectrum,c0,c1,c) +#define cimg_for_in3XY(img,x0,y0,x1,y1,x,y) cimg_for_in3Y(img,y0,y1,y) cimg_for_in3X(img,x0,x1,x) +#define cimg_for_in3XZ(img,x0,z0,x1,z1,x,z) cimg_for_in3Z(img,z0,z1,z) cimg_for_in3X(img,x0,x1,x) +#define cimg_for_in3XC(img,x0,c0,x1,c1,x,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3X(img,x0,x1,x) +#define cimg_for_in3YZ(img,y0,z0,y1,z1,y,z) cimg_for_in3Z(img,z0,z1,z) cimg_for_in3Y(img,y0,y1,y) +#define cimg_for_in3YC(img,y0,c0,y1,c1,y,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3Y(img,y0,y1,y) +#define cimg_for_in3ZC(img,z0,c0,z1,c1,z,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3Z(img,z0,z1,z) +#define cimg_for_in3XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in3Z(img,z0,z1,z) cimg_for_in3XY(img,x0,y0,x1,y1,x,y) +#define cimg_for_in3XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3XZ(img,x0,y0,x1,y1,x,z) +#define cimg_for_in3YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in3C(img,c0,c1,c) cimg_for_in3YZ(img,y0,z0,y1,z1,y,z) +#define cimg_for_in3XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \ + cimg_for_in3C(img,c0,c1,c) cimg_for_in3XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) + +#define cimg_for4(bound,i) \ + for (int i = 0, _p1##i = 0, _n1##i = 1>=(bound)?(int)(bound) - 1:1, \ + _n2##i = 2>=(bound)?(int)(bound) - 1:2; \ + _n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i); \ + _p1##i = i++, ++_n1##i, ++_n2##i) +#define cimg_for4X(img,x) cimg_for4((img)._width,x) +#define cimg_for4Y(img,y) cimg_for4((img)._height,y) +#define cimg_for4Z(img,z) cimg_for4((img)._depth,z) +#define cimg_for4C(img,c) cimg_for4((img)._spectrum,c) +#define cimg_for4XY(img,x,y) cimg_for4Y(img,y) cimg_for4X(img,x) +#define cimg_for4XZ(img,x,z) cimg_for4Z(img,z) cimg_for4X(img,x) +#define cimg_for4XC(img,x,c) cimg_for4C(img,c) cimg_for4X(img,x) +#define cimg_for4YZ(img,y,z) cimg_for4Z(img,z) cimg_for4Y(img,y) +#define cimg_for4YC(img,y,c) cimg_for4C(img,c) cimg_for4Y(img,y) +#define cimg_for4ZC(img,z,c) cimg_for4C(img,c) cimg_for4Z(img,z) +#define cimg_for4XYZ(img,x,y,z) cimg_for4Z(img,z) cimg_for4XY(img,x,y) +#define cimg_for4XZC(img,x,z,c) cimg_for4C(img,c) cimg_for4XZ(img,x,z) +#define cimg_for4YZC(img,y,z,c) cimg_for4C(img,c) cimg_for4YZ(img,y,z) +#define cimg_for4XYZC(img,x,y,z,c) cimg_for4C(img,c) cimg_for4XYZ(img,x,y,z) + +#define cimg_for_in4(bound,i0,i1,i) \ + for (int i = (int)(i0)<0?0:(int)(i0), \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \ + _n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2; \ + i<=(int)(i1) && (_n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i)); \ + _p1##i = i++, ++_n1##i, ++_n2##i) +#define cimg_for_in4X(img,x0,x1,x) cimg_for_in4((img)._width,x0,x1,x) +#define cimg_for_in4Y(img,y0,y1,y) cimg_for_in4((img)._height,y0,y1,y) +#define cimg_for_in4Z(img,z0,z1,z) cimg_for_in4((img)._depth,z0,z1,z) +#define cimg_for_in4C(img,c0,c1,c) cimg_for_in4((img)._spectrum,c0,c1,c) +#define cimg_for_in4XY(img,x0,y0,x1,y1,x,y) cimg_for_in4Y(img,y0,y1,y) cimg_for_in4X(img,x0,x1,x) +#define cimg_for_in4XZ(img,x0,z0,x1,z1,x,z) cimg_for_in4Z(img,z0,z1,z) cimg_for_in4X(img,x0,x1,x) +#define cimg_for_in4XC(img,x0,c0,x1,c1,x,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4X(img,x0,x1,x) +#define cimg_for_in4YZ(img,y0,z0,y1,z1,y,z) cimg_for_in4Z(img,z0,z1,z) cimg_for_in4Y(img,y0,y1,y) +#define cimg_for_in4YC(img,y0,c0,y1,c1,y,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4Y(img,y0,y1,y) +#define cimg_for_in4ZC(img,z0,c0,z1,c1,z,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4Z(img,z0,z1,z) +#define cimg_for_in4XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in4Z(img,z0,z1,z) cimg_for_in4XY(img,x0,y0,x1,y1,x,y) +#define cimg_for_in4XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4XZ(img,x0,y0,x1,y1,x,z) +#define cimg_for_in4YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in4C(img,c0,c1,c) cimg_for_in4YZ(img,y0,z0,y1,z1,y,z) +#define cimg_for_in4XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \ + cimg_for_in4C(img,c0,c1,c) cimg_for_in4XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) + +#define cimg_for5(bound,i) \ + for (int i = 0, _p2##i = 0, _p1##i = 0, \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1, \ + _n2##i = 2>=(bound)?(int)(bound) - 1:2; \ + _n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i); \ + _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i) +#define cimg_for5X(img,x) cimg_for5((img)._width,x) +#define cimg_for5Y(img,y) cimg_for5((img)._height,y) +#define cimg_for5Z(img,z) cimg_for5((img)._depth,z) +#define cimg_for5C(img,c) cimg_for5((img)._spectrum,c) +#define cimg_for5XY(img,x,y) cimg_for5Y(img,y) cimg_for5X(img,x) +#define cimg_for5XZ(img,x,z) cimg_for5Z(img,z) cimg_for5X(img,x) +#define cimg_for5XC(img,x,c) cimg_for5C(img,c) cimg_for5X(img,x) +#define cimg_for5YZ(img,y,z) cimg_for5Z(img,z) cimg_for5Y(img,y) +#define cimg_for5YC(img,y,c) cimg_for5C(img,c) cimg_for5Y(img,y) +#define cimg_for5ZC(img,z,c) cimg_for5C(img,c) cimg_for5Z(img,z) +#define cimg_for5XYZ(img,x,y,z) cimg_for5Z(img,z) cimg_for5XY(img,x,y) +#define cimg_for5XZC(img,x,z,c) cimg_for5C(img,c) cimg_for5XZ(img,x,z) +#define cimg_for5YZC(img,y,z,c) cimg_for5C(img,c) cimg_for5YZ(img,y,z) +#define cimg_for5XYZC(img,x,y,z,c) cimg_for5C(img,c) cimg_for5XYZ(img,x,y,z) + +#define cimg_for_in5(bound,i0,i1,i) \ + for (int i = (int)(i0)<0?0:(int)(i0), \ + _p2##i = i - 2<0?0:i - 2, \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \ + _n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2; \ + i<=(int)(i1) && (_n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i)); \ + _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i) +#define cimg_for_in5X(img,x0,x1,x) cimg_for_in5((img)._width,x0,x1,x) +#define cimg_for_in5Y(img,y0,y1,y) cimg_for_in5((img)._height,y0,y1,y) +#define cimg_for_in5Z(img,z0,z1,z) cimg_for_in5((img)._depth,z0,z1,z) +#define cimg_for_in5C(img,c0,c1,c) cimg_for_in5((img)._spectrum,c0,c1,c) +#define cimg_for_in5XY(img,x0,y0,x1,y1,x,y) cimg_for_in5Y(img,y0,y1,y) cimg_for_in5X(img,x0,x1,x) +#define cimg_for_in5XZ(img,x0,z0,x1,z1,x,z) cimg_for_in5Z(img,z0,z1,z) cimg_for_in5X(img,x0,x1,x) +#define cimg_for_in5XC(img,x0,c0,x1,c1,x,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5X(img,x0,x1,x) +#define cimg_for_in5YZ(img,y0,z0,y1,z1,y,z) cimg_for_in5Z(img,z0,z1,z) cimg_for_in5Y(img,y0,y1,y) +#define cimg_for_in5YC(img,y0,c0,y1,c1,y,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5Y(img,y0,y1,y) +#define cimg_for_in5ZC(img,z0,c0,z1,c1,z,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5Z(img,z0,z1,z) +#define cimg_for_in5XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in5Z(img,z0,z1,z) cimg_for_in5XY(img,x0,y0,x1,y1,x,y) +#define cimg_for_in5XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5XZ(img,x0,y0,x1,y1,x,z) +#define cimg_for_in5YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in5C(img,c0,c1,c) cimg_for_in5YZ(img,y0,z0,y1,z1,y,z) +#define cimg_for_in5XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \ + cimg_for_in5C(img,c0,c1,c) cimg_for_in5XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) + +#define cimg_for6(bound,i) \ + for (int i = 0, _p2##i = 0, _p1##i = 0, \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1, \ + _n2##i = 2>=(bound)?(int)(bound) - 1:2, \ + _n3##i = 3>=(bound)?(int)(bound) - 1:3; \ + _n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i); \ + _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i) +#define cimg_for6X(img,x) cimg_for6((img)._width,x) +#define cimg_for6Y(img,y) cimg_for6((img)._height,y) +#define cimg_for6Z(img,z) cimg_for6((img)._depth,z) +#define cimg_for6C(img,c) cimg_for6((img)._spectrum,c) +#define cimg_for6XY(img,x,y) cimg_for6Y(img,y) cimg_for6X(img,x) +#define cimg_for6XZ(img,x,z) cimg_for6Z(img,z) cimg_for6X(img,x) +#define cimg_for6XC(img,x,c) cimg_for6C(img,c) cimg_for6X(img,x) +#define cimg_for6YZ(img,y,z) cimg_for6Z(img,z) cimg_for6Y(img,y) +#define cimg_for6YC(img,y,c) cimg_for6C(img,c) cimg_for6Y(img,y) +#define cimg_for6ZC(img,z,c) cimg_for6C(img,c) cimg_for6Z(img,z) +#define cimg_for6XYZ(img,x,y,z) cimg_for6Z(img,z) cimg_for6XY(img,x,y) +#define cimg_for6XZC(img,x,z,c) cimg_for6C(img,c) cimg_for6XZ(img,x,z) +#define cimg_for6YZC(img,y,z,c) cimg_for6C(img,c) cimg_for6YZ(img,y,z) +#define cimg_for6XYZC(img,x,y,z,c) cimg_for6C(img,c) cimg_for6XYZ(img,x,y,z) + +#define cimg_for_in6(bound,i0,i1,i) \ + for (int i = (int)(i0)<0?0:(int)(i0), \ + _p2##i = i - 2<0?0:i - 2, \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \ + _n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2, \ + _n3##i = i + 3>=(int)(bound)?(int)(bound) - 1:i + 3; \ + i<=(int)(i1) && \ + (_n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i)); \ + _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i) +#define cimg_for_in6X(img,x0,x1,x) cimg_for_in6((img)._width,x0,x1,x) +#define cimg_for_in6Y(img,y0,y1,y) cimg_for_in6((img)._height,y0,y1,y) +#define cimg_for_in6Z(img,z0,z1,z) cimg_for_in6((img)._depth,z0,z1,z) +#define cimg_for_in6C(img,c0,c1,c) cimg_for_in6((img)._spectrum,c0,c1,c) +#define cimg_for_in6XY(img,x0,y0,x1,y1,x,y) cimg_for_in6Y(img,y0,y1,y) cimg_for_in6X(img,x0,x1,x) +#define cimg_for_in6XZ(img,x0,z0,x1,z1,x,z) cimg_for_in6Z(img,z0,z1,z) cimg_for_in6X(img,x0,x1,x) +#define cimg_for_in6XC(img,x0,c0,x1,c1,x,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6X(img,x0,x1,x) +#define cimg_for_in6YZ(img,y0,z0,y1,z1,y,z) cimg_for_in6Z(img,z0,z1,z) cimg_for_in6Y(img,y0,y1,y) +#define cimg_for_in6YC(img,y0,c0,y1,c1,y,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6Y(img,y0,y1,y) +#define cimg_for_in6ZC(img,z0,c0,z1,c1,z,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6Z(img,z0,z1,z) +#define cimg_for_in6XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in6Z(img,z0,z1,z) cimg_for_in6XY(img,x0,y0,x1,y1,x,y) +#define cimg_for_in6XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6XZ(img,x0,y0,x1,y1,x,z) +#define cimg_for_in6YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in6C(img,c0,c1,c) cimg_for_in6YZ(img,y0,z0,y1,z1,y,z) +#define cimg_for_in6XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \ + cimg_for_in6C(img,c0,c1,c) cimg_for_in6XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) + +#define cimg_for7(bound,i) \ + for (int i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1, \ + _n2##i = 2>=(bound)?(int)(bound) - 1:2, \ + _n3##i = 3>=(bound)?(int)(bound) - 1:3; \ + _n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i); \ + _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i) +#define cimg_for7X(img,x) cimg_for7((img)._width,x) +#define cimg_for7Y(img,y) cimg_for7((img)._height,y) +#define cimg_for7Z(img,z) cimg_for7((img)._depth,z) +#define cimg_for7C(img,c) cimg_for7((img)._spectrum,c) +#define cimg_for7XY(img,x,y) cimg_for7Y(img,y) cimg_for7X(img,x) +#define cimg_for7XZ(img,x,z) cimg_for7Z(img,z) cimg_for7X(img,x) +#define cimg_for7XC(img,x,c) cimg_for7C(img,c) cimg_for7X(img,x) +#define cimg_for7YZ(img,y,z) cimg_for7Z(img,z) cimg_for7Y(img,y) +#define cimg_for7YC(img,y,c) cimg_for7C(img,c) cimg_for7Y(img,y) +#define cimg_for7ZC(img,z,c) cimg_for7C(img,c) cimg_for7Z(img,z) +#define cimg_for7XYZ(img,x,y,z) cimg_for7Z(img,z) cimg_for7XY(img,x,y) +#define cimg_for7XZC(img,x,z,c) cimg_for7C(img,c) cimg_for7XZ(img,x,z) +#define cimg_for7YZC(img,y,z,c) cimg_for7C(img,c) cimg_for7YZ(img,y,z) +#define cimg_for7XYZC(img,x,y,z,c) cimg_for7C(img,c) cimg_for7XYZ(img,x,y,z) + +#define cimg_for_in7(bound,i0,i1,i) \ + for (int i = (int)(i0)<0?0:(int)(i0), \ + _p3##i = i - 3<0?0:i - 3, \ + _p2##i = i - 2<0?0:i - 2, \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \ + _n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2, \ + _n3##i = i + 3>=(int)(bound)?(int)(bound) - 1:i + 3; \ + i<=(int)(i1) && \ + (_n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i)); \ + _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i) +#define cimg_for_in7X(img,x0,x1,x) cimg_for_in7((img)._width,x0,x1,x) +#define cimg_for_in7Y(img,y0,y1,y) cimg_for_in7((img)._height,y0,y1,y) +#define cimg_for_in7Z(img,z0,z1,z) cimg_for_in7((img)._depth,z0,z1,z) +#define cimg_for_in7C(img,c0,c1,c) cimg_for_in7((img)._spectrum,c0,c1,c) +#define cimg_for_in7XY(img,x0,y0,x1,y1,x,y) cimg_for_in7Y(img,y0,y1,y) cimg_for_in7X(img,x0,x1,x) +#define cimg_for_in7XZ(img,x0,z0,x1,z1,x,z) cimg_for_in7Z(img,z0,z1,z) cimg_for_in7X(img,x0,x1,x) +#define cimg_for_in7XC(img,x0,c0,x1,c1,x,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7X(img,x0,x1,x) +#define cimg_for_in7YZ(img,y0,z0,y1,z1,y,z) cimg_for_in7Z(img,z0,z1,z) cimg_for_in7Y(img,y0,y1,y) +#define cimg_for_in7YC(img,y0,c0,y1,c1,y,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7Y(img,y0,y1,y) +#define cimg_for_in7ZC(img,z0,c0,z1,c1,z,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7Z(img,z0,z1,z) +#define cimg_for_in7XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in7Z(img,z0,z1,z) cimg_for_in7XY(img,x0,y0,x1,y1,x,y) +#define cimg_for_in7XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7XZ(img,x0,y0,x1,y1,x,z) +#define cimg_for_in7YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in7C(img,c0,c1,c) cimg_for_in7YZ(img,y0,z0,y1,z1,y,z) +#define cimg_for_in7XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \ + cimg_for_in7C(img,c0,c1,c) cimg_for_in7XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) + +#define cimg_for8(bound,i) \ + for (int i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1, \ + _n2##i = 2>=(bound)?(int)(bound) - 1:2, \ + _n3##i = 3>=(bound)?(int)(bound) - 1:3, \ + _n4##i = 4>=(bound)?(int)(bound) - 1:4; \ + _n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ + i==(_n4##i = _n3##i = _n2##i = --_n1##i); \ + _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i) +#define cimg_for8X(img,x) cimg_for8((img)._width,x) +#define cimg_for8Y(img,y) cimg_for8((img)._height,y) +#define cimg_for8Z(img,z) cimg_for8((img)._depth,z) +#define cimg_for8C(img,c) cimg_for8((img)._spectrum,c) +#define cimg_for8XY(img,x,y) cimg_for8Y(img,y) cimg_for8X(img,x) +#define cimg_for8XZ(img,x,z) cimg_for8Z(img,z) cimg_for8X(img,x) +#define cimg_for8XC(img,x,c) cimg_for8C(img,c) cimg_for8X(img,x) +#define cimg_for8YZ(img,y,z) cimg_for8Z(img,z) cimg_for8Y(img,y) +#define cimg_for8YC(img,y,c) cimg_for8C(img,c) cimg_for8Y(img,y) +#define cimg_for8ZC(img,z,c) cimg_for8C(img,c) cimg_for8Z(img,z) +#define cimg_for8XYZ(img,x,y,z) cimg_for8Z(img,z) cimg_for8XY(img,x,y) +#define cimg_for8XZC(img,x,z,c) cimg_for8C(img,c) cimg_for8XZ(img,x,z) +#define cimg_for8YZC(img,y,z,c) cimg_for8C(img,c) cimg_for8YZ(img,y,z) +#define cimg_for8XYZC(img,x,y,z,c) cimg_for8C(img,c) cimg_for8XYZ(img,x,y,z) + +#define cimg_for_in8(bound,i0,i1,i) \ + for (int i = (int)(i0)<0?0:(int)(i0), \ + _p3##i = i - 3<0?0:i - 3, \ + _p2##i = i - 2<0?0:i - 2, \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \ + _n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2, \ + _n3##i = i + 3>=(int)(bound)?(int)(bound) - 1:i + 3, \ + _n4##i = i + 4>=(int)(bound)?(int)(bound) - 1:i + 4; \ + i<=(int)(i1) && (_n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ + i==(_n4##i = _n3##i = _n2##i = --_n1##i)); \ + _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i) +#define cimg_for_in8X(img,x0,x1,x) cimg_for_in8((img)._width,x0,x1,x) +#define cimg_for_in8Y(img,y0,y1,y) cimg_for_in8((img)._height,y0,y1,y) +#define cimg_for_in8Z(img,z0,z1,z) cimg_for_in8((img)._depth,z0,z1,z) +#define cimg_for_in8C(img,c0,c1,c) cimg_for_in8((img)._spectrum,c0,c1,c) +#define cimg_for_in8XY(img,x0,y0,x1,y1,x,y) cimg_for_in8Y(img,y0,y1,y) cimg_for_in8X(img,x0,x1,x) +#define cimg_for_in8XZ(img,x0,z0,x1,z1,x,z) cimg_for_in8Z(img,z0,z1,z) cimg_for_in8X(img,x0,x1,x) +#define cimg_for_in8XC(img,x0,c0,x1,c1,x,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8X(img,x0,x1,x) +#define cimg_for_in8YZ(img,y0,z0,y1,z1,y,z) cimg_for_in8Z(img,z0,z1,z) cimg_for_in8Y(img,y0,y1,y) +#define cimg_for_in8YC(img,y0,c0,y1,c1,y,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8Y(img,y0,y1,y) +#define cimg_for_in8ZC(img,z0,c0,z1,c1,z,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8Z(img,z0,z1,z) +#define cimg_for_in8XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in8Z(img,z0,z1,z) cimg_for_in8XY(img,x0,y0,x1,y1,x,y) +#define cimg_for_in8XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8XZ(img,x0,y0,x1,y1,x,z) +#define cimg_for_in8YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in8C(img,c0,c1,c) cimg_for_in8YZ(img,y0,z0,y1,z1,y,z) +#define cimg_for_in8XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \ + cimg_for_in8C(img,c0,c1,c) cimg_for_in8XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) + +#define cimg_for9(bound,i) \ + for (int i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ + _n1##i = 1>=(int)(bound)?(int)(bound) - 1:1, \ + _n2##i = 2>=(int)(bound)?(int)(bound) - 1:2, \ + _n3##i = 3>=(int)(bound)?(int)(bound) - 1:3, \ + _n4##i = 4>=(int)(bound)?(int)(bound) - 1:4; \ + _n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ + i==(_n4##i = _n3##i = _n2##i = --_n1##i); \ + _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i) +#define cimg_for9X(img,x) cimg_for9((img)._width,x) +#define cimg_for9Y(img,y) cimg_for9((img)._height,y) +#define cimg_for9Z(img,z) cimg_for9((img)._depth,z) +#define cimg_for9C(img,c) cimg_for9((img)._spectrum,c) +#define cimg_for9XY(img,x,y) cimg_for9Y(img,y) cimg_for9X(img,x) +#define cimg_for9XZ(img,x,z) cimg_for9Z(img,z) cimg_for9X(img,x) +#define cimg_for9XC(img,x,c) cimg_for9C(img,c) cimg_for9X(img,x) +#define cimg_for9YZ(img,y,z) cimg_for9Z(img,z) cimg_for9Y(img,y) +#define cimg_for9YC(img,y,c) cimg_for9C(img,c) cimg_for9Y(img,y) +#define cimg_for9ZC(img,z,c) cimg_for9C(img,c) cimg_for9Z(img,z) +#define cimg_for9XYZ(img,x,y,z) cimg_for9Z(img,z) cimg_for9XY(img,x,y) +#define cimg_for9XZC(img,x,z,c) cimg_for9C(img,c) cimg_for9XZ(img,x,z) +#define cimg_for9YZC(img,y,z,c) cimg_for9C(img,c) cimg_for9YZ(img,y,z) +#define cimg_for9XYZC(img,x,y,z,c) cimg_for9C(img,c) cimg_for9XYZ(img,x,y,z) + +#define cimg_for_in9(bound,i0,i1,i) \ + for (int i = (int)(i0)<0?0:(int)(i0), \ + _p4##i = i - 4<0?0:i - 4, \ + _p3##i = i - 3<0?0:i - 3, \ + _p2##i = i - 2<0?0:i - 2, \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \ + _n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2, \ + _n3##i = i + 3>=(int)(bound)?(int)(bound) - 1:i + 3, \ + _n4##i = i + 4>=(int)(bound)?(int)(bound) - 1:i + 4; \ + i<=(int)(i1) && (_n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ + i==(_n4##i = _n3##i = _n2##i = --_n1##i)); \ + _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i) +#define cimg_for_in9X(img,x0,x1,x) cimg_for_in9((img)._width,x0,x1,x) +#define cimg_for_in9Y(img,y0,y1,y) cimg_for_in9((img)._height,y0,y1,y) +#define cimg_for_in9Z(img,z0,z1,z) cimg_for_in9((img)._depth,z0,z1,z) +#define cimg_for_in9C(img,c0,c1,c) cimg_for_in9((img)._spectrum,c0,c1,c) +#define cimg_for_in9XY(img,x0,y0,x1,y1,x,y) cimg_for_in9Y(img,y0,y1,y) cimg_for_in9X(img,x0,x1,x) +#define cimg_for_in9XZ(img,x0,z0,x1,z1,x,z) cimg_for_in9Z(img,z0,z1,z) cimg_for_in9X(img,x0,x1,x) +#define cimg_for_in9XC(img,x0,c0,x1,c1,x,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9X(img,x0,x1,x) +#define cimg_for_in9YZ(img,y0,z0,y1,z1,y,z) cimg_for_in9Z(img,z0,z1,z) cimg_for_in9Y(img,y0,y1,y) +#define cimg_for_in9YC(img,y0,c0,y1,c1,y,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9Y(img,y0,y1,y) +#define cimg_for_in9ZC(img,z0,c0,z1,c1,z,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9Z(img,z0,z1,z) +#define cimg_for_in9XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) cimg_for_in9Z(img,z0,z1,z) cimg_for_in9XY(img,x0,y0,x1,y1,x,y) +#define cimg_for_in9XZC(img,x0,z0,c0,x1,y1,c1,x,z,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9XZ(img,x0,y0,x1,y1,x,z) +#define cimg_for_in9YZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_in9C(img,c0,c1,c) cimg_for_in9YZ(img,y0,z0,y1,z1,y,z) +#define cimg_for_in9XYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \ + cimg_for_in9C(img,c0,c1,c) cimg_for_in9XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) + +#define cimg_for2x2(img,x,y,z,c,I,T) \ + cimg_for2((img)._height,y) for (int x = 0, \ + _n1##x = (int)( \ + (I[0] = (T)(img)(0,y,z,c)), \ + (I[2] = (T)(img)(0,_n1##y,z,c)), \ + 1>=(img)._width?(img).width() - 1:1); \ + (_n1##x<(img).width() && ( \ + (I[1] = (T)(img)(_n1##x,y,z,c)), \ + (I[3] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ + x==--_n1##x; \ + I[0] = I[1], \ + I[2] = I[3], \ + ++x, ++_n1##x) + +#define cimg_for_in2x2(img,x0,y0,x1,y1,x,y,z,c,I,T) \ + cimg_for_in2((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ + _n1##x = (int)( \ + (I[0] = (T)(img)(x,y,z,c)), \ + (I[2] = (T)(img)(x,_n1##y,z,c)), \ + x + 1>=(int)(img)._width?(img).width() - 1:x + 1); \ + x<=(int)(x1) && ((_n1##x<(img).width() && ( \ + (I[1] = (T)(img)(_n1##x,y,z,c)), \ + (I[3] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ + x==--_n1##x); \ + I[0] = I[1], \ + I[2] = I[3], \ + ++x, ++_n1##x) + +#define cimg_for3x3(img,x,y,z,c,I,T) \ + cimg_for3((img)._height,y) for (int x = 0, \ + _p1##x = 0, \ + _n1##x = (int)( \ + (I[0] = I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \ + (I[3] = I[4] = (T)(img)(0,y,z,c)), \ + (I[6] = I[7] = (T)(img)(0,_n1##y,z,c)), \ + 1>=(img)._width?(img).width() - 1:1); \ + (_n1##x<(img).width() && ( \ + (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[5] = (T)(img)(_n1##x,y,z,c)), \ + (I[8] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ + x==--_n1##x; \ + I[0] = I[1], I[1] = I[2], \ + I[3] = I[4], I[4] = I[5], \ + I[6] = I[7], I[7] = I[8], \ + _p1##x = x++, ++_n1##x) + +#define cimg_for_in3x3(img,x0,y0,x1,y1,x,y,z,c,I,T) \ + cimg_for_in3((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = (int)( \ + (I[0] = (T)(img)(_p1##x,_p1##y,z,c)), \ + (I[3] = (T)(img)(_p1##x,y,z,c)), \ + (I[6] = (T)(img)(_p1##x,_n1##y,z,c)), \ + (I[1] = (T)(img)(x,_p1##y,z,c)), \ + (I[4] = (T)(img)(x,y,z,c)), \ + (I[7] = (T)(img)(x,_n1##y,z,c)), \ + x + 1>=(int)(img)._width?(img).width() - 1:x + 1); \ + x<=(int)(x1) && ((_n1##x<(img).width() && ( \ + (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[5] = (T)(img)(_n1##x,y,z,c)), \ + (I[8] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ + x==--_n1##x); \ + I[0] = I[1], I[1] = I[2], \ + I[3] = I[4], I[4] = I[5], \ + I[6] = I[7], I[7] = I[8], \ + _p1##x = x++, ++_n1##x) + +#define cimg_for4x4(img,x,y,z,c,I,T) \ + cimg_for4((img)._height,y) for (int x = 0, \ + _p1##x = 0, \ + _n1##x = 1>=(img)._width?(img).width() - 1:1, \ + _n2##x = (int)( \ + (I[0] = I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \ + (I[4] = I[5] = (T)(img)(0,y,z,c)), \ + (I[8] = I[9] = (T)(img)(0,_n1##y,z,c)), \ + (I[12] = I[13] = (T)(img)(0,_n2##y,z,c)), \ + (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[6] = (T)(img)(_n1##x,y,z,c)), \ + (I[10] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[14] = (T)(img)(_n1##x,_n2##y,z,c)), \ + 2>=(img)._width?(img).width() - 1:2); \ + (_n2##x<(img).width() && ( \ + (I[3] = (T)(img)(_n2##x,_p1##y,z,c)), \ + (I[7] = (T)(img)(_n2##x,y,z,c)), \ + (I[11] = (T)(img)(_n2##x,_n1##y,z,c)), \ + (I[15] = (T)(img)(_n2##x,_n2##y,z,c)),1)) || \ + _n1##x==--_n2##x || x==(_n2##x = --_n1##x); \ + I[0] = I[1], I[1] = I[2], I[2] = I[3], \ + I[4] = I[5], I[5] = I[6], I[6] = I[7], \ + I[8] = I[9], I[9] = I[10], I[10] = I[11], \ + I[12] = I[13], I[13] = I[14], I[14] = I[15], \ + _p1##x = x++, ++_n1##x, ++_n2##x) + +#define cimg_for_in4x4(img,x0,y0,x1,y1,x,y,z,c,I,T) \ + cimg_for_in4((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = x + 1>=(int)(img)._width?(img).width() - 1:x + 1, \ + _n2##x = (int)( \ + (I[0] = (T)(img)(_p1##x,_p1##y,z,c)), \ + (I[4] = (T)(img)(_p1##x,y,z,c)), \ + (I[8] = (T)(img)(_p1##x,_n1##y,z,c)), \ + (I[12] = (T)(img)(_p1##x,_n2##y,z,c)), \ + (I[1] = (T)(img)(x,_p1##y,z,c)), \ + (I[5] = (T)(img)(x,y,z,c)), \ + (I[9] = (T)(img)(x,_n1##y,z,c)), \ + (I[13] = (T)(img)(x,_n2##y,z,c)), \ + (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[6] = (T)(img)(_n1##x,y,z,c)), \ + (I[10] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[14] = (T)(img)(_n1##x,_n2##y,z,c)), \ + x + 2>=(int)(img)._width?(img).width() - 1:x + 2); \ + x<=(int)(x1) && ((_n2##x<(img).width() && ( \ + (I[3] = (T)(img)(_n2##x,_p1##y,z,c)), \ + (I[7] = (T)(img)(_n2##x,y,z,c)), \ + (I[11] = (T)(img)(_n2##x,_n1##y,z,c)), \ + (I[15] = (T)(img)(_n2##x,_n2##y,z,c)),1)) || \ + _n1##x==--_n2##x || x==(_n2##x = --_n1##x)); \ + I[0] = I[1], I[1] = I[2], I[2] = I[3], \ + I[4] = I[5], I[5] = I[6], I[6] = I[7], \ + I[8] = I[9], I[9] = I[10], I[10] = I[11], \ + I[12] = I[13], I[13] = I[14], I[14] = I[15], \ + _p1##x = x++, ++_n1##x, ++_n2##x) + +#define cimg_for5x5(img,x,y,z,c,I,T) \ + cimg_for5((img)._height,y) for (int x = 0, \ + _p2##x = 0, _p1##x = 0, \ + _n1##x = 1>=(img)._width?(img).width() - 1:1, \ + _n2##x = (int)( \ + (I[0] = I[1] = I[2] = (T)(img)(_p2##x,_p2##y,z,c)), \ + (I[5] = I[6] = I[7] = (T)(img)(0,_p1##y,z,c)), \ + (I[10] = I[11] = I[12] = (T)(img)(0,y,z,c)), \ + (I[15] = I[16] = I[17] = (T)(img)(0,_n1##y,z,c)), \ + (I[20] = I[21] = I[22] = (T)(img)(0,_n2##y,z,c)), \ + (I[3] = (T)(img)(_n1##x,_p2##y,z,c)), \ + (I[8] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[13] = (T)(img)(_n1##x,y,z,c)), \ + (I[18] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[23] = (T)(img)(_n1##x,_n2##y,z,c)), \ + 2>=(img)._width?(img).width() - 1:2); \ + (_n2##x<(img).width() && ( \ + (I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \ + (I[9] = (T)(img)(_n2##x,_p1##y,z,c)), \ + (I[14] = (T)(img)(_n2##x,y,z,c)), \ + (I[19] = (T)(img)(_n2##x,_n1##y,z,c)), \ + (I[24] = (T)(img)(_n2##x,_n2##y,z,c)),1)) || \ + _n1##x==--_n2##x || x==(_n2##x = --_n1##x); \ + I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], \ + I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], \ + I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], \ + I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \ + I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \ + _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x) + +#define cimg_for_in5x5(img,x0,y0,x1,y1,x,y,z,c,I,T) \ + cimg_for_in5((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ + _p2##x = x - 2<0?0:x - 2, \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = x + 1>=(int)(img)._width?(img).width() - 1:x + 1, \ + _n2##x = (int)( \ + (I[0] = (T)(img)(_p2##x,_p2##y,z,c)), \ + (I[5] = (T)(img)(_p2##x,_p1##y,z,c)), \ + (I[10] = (T)(img)(_p2##x,y,z,c)), \ + (I[15] = (T)(img)(_p2##x,_n1##y,z,c)), \ + (I[20] = (T)(img)(_p2##x,_n2##y,z,c)), \ + (I[1] = (T)(img)(_p1##x,_p2##y,z,c)), \ + (I[6] = (T)(img)(_p1##x,_p1##y,z,c)), \ + (I[11] = (T)(img)(_p1##x,y,z,c)), \ + (I[16] = (T)(img)(_p1##x,_n1##y,z,c)), \ + (I[21] = (T)(img)(_p1##x,_n2##y,z,c)), \ + (I[2] = (T)(img)(x,_p2##y,z,c)), \ + (I[7] = (T)(img)(x,_p1##y,z,c)), \ + (I[12] = (T)(img)(x,y,z,c)), \ + (I[17] = (T)(img)(x,_n1##y,z,c)), \ + (I[22] = (T)(img)(x,_n2##y,z,c)), \ + (I[3] = (T)(img)(_n1##x,_p2##y,z,c)), \ + (I[8] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[13] = (T)(img)(_n1##x,y,z,c)), \ + (I[18] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[23] = (T)(img)(_n1##x,_n2##y,z,c)), \ + x + 2>=(int)(img)._width?(img).width() - 1:x + 2); \ + x<=(int)(x1) && ((_n2##x<(img).width() && ( \ + (I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \ + (I[9] = (T)(img)(_n2##x,_p1##y,z,c)), \ + (I[14] = (T)(img)(_n2##x,y,z,c)), \ + (I[19] = (T)(img)(_n2##x,_n1##y,z,c)), \ + (I[24] = (T)(img)(_n2##x,_n2##y,z,c)),1)) || \ + _n1##x==--_n2##x || x==(_n2##x = --_n1##x)); \ + I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], \ + I[5] = I[6], I[6] = I[7], I[7] = I[8], I[8] = I[9], \ + I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], \ + I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], \ + I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \ + _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x) + +#define cimg_for6x6(img,x,y,z,c,I,T) \ + cimg_for6((img)._height,y) for (int x = 0, \ + _p2##x = 0, _p1##x = 0, \ + _n1##x = 1>=(img)._width?(img).width() - 1:1, \ + _n2##x = 2>=(img)._width?(img).width() - 1:2, \ + _n3##x = (int)( \ + (I[0] = I[1] = I[2] = (T)(img)(_p2##x,_p2##y,z,c)), \ + (I[6] = I[7] = I[8] = (T)(img)(0,_p1##y,z,c)), \ + (I[12] = I[13] = I[14] = (T)(img)(0,y,z,c)), \ + (I[18] = I[19] = I[20] = (T)(img)(0,_n1##y,z,c)), \ + (I[24] = I[25] = I[26] = (T)(img)(0,_n2##y,z,c)), \ + (I[30] = I[31] = I[32] = (T)(img)(0,_n3##y,z,c)), \ + (I[3] = (T)(img)(_n1##x,_p2##y,z,c)), \ + (I[9] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[15] = (T)(img)(_n1##x,y,z,c)), \ + (I[21] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[27] = (T)(img)(_n1##x,_n2##y,z,c)), \ + (I[33] = (T)(img)(_n1##x,_n3##y,z,c)), \ + (I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \ + (I[10] = (T)(img)(_n2##x,_p1##y,z,c)), \ + (I[16] = (T)(img)(_n2##x,y,z,c)), \ + (I[22] = (T)(img)(_n2##x,_n1##y,z,c)), \ + (I[28] = (T)(img)(_n2##x,_n2##y,z,c)), \ + (I[34] = (T)(img)(_n2##x,_n3##y,z,c)), \ + 3>=(img)._width?(img).width() - 1:3); \ + (_n3##x<(img).width() && ( \ + (I[5] = (T)(img)(_n3##x,_p2##y,z,c)), \ + (I[11] = (T)(img)(_n3##x,_p1##y,z,c)), \ + (I[17] = (T)(img)(_n3##x,y,z,c)), \ + (I[23] = (T)(img)(_n3##x,_n1##y,z,c)), \ + (I[29] = (T)(img)(_n3##x,_n2##y,z,c)), \ + (I[35] = (T)(img)(_n3##x,_n3##y,z,c)),1)) || \ + _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3## x = _n2##x = --_n1##x); \ + I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], \ + I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], \ + I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \ + I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ + I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ + I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \ + _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x) + +#define cimg_for_in6x6(img,x0,y0,x1,y1,x,y,z,c,I,T) \ + cimg_for_in6((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)x0, \ + _p2##x = x - 2<0?0:x - 2, \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = x + 1>=(int)(img)._width?(img).width() - 1:x + 1, \ + _n2##x = x + 2>=(int)(img)._width?(img).width() - 1:x + 2, \ + _n3##x = (int)( \ + (I[0] = (T)(img)(_p2##x,_p2##y,z,c)), \ + (I[6] = (T)(img)(_p2##x,_p1##y,z,c)), \ + (I[12] = (T)(img)(_p2##x,y,z,c)), \ + (I[18] = (T)(img)(_p2##x,_n1##y,z,c)), \ + (I[24] = (T)(img)(_p2##x,_n2##y,z,c)), \ + (I[30] = (T)(img)(_p2##x,_n3##y,z,c)), \ + (I[1] = (T)(img)(_p1##x,_p2##y,z,c)), \ + (I[7] = (T)(img)(_p1##x,_p1##y,z,c)), \ + (I[13] = (T)(img)(_p1##x,y,z,c)), \ + (I[19] = (T)(img)(_p1##x,_n1##y,z,c)), \ + (I[25] = (T)(img)(_p1##x,_n2##y,z,c)), \ + (I[31] = (T)(img)(_p1##x,_n3##y,z,c)), \ + (I[2] = (T)(img)(x,_p2##y,z,c)), \ + (I[8] = (T)(img)(x,_p1##y,z,c)), \ + (I[14] = (T)(img)(x,y,z,c)), \ + (I[20] = (T)(img)(x,_n1##y,z,c)), \ + (I[26] = (T)(img)(x,_n2##y,z,c)), \ + (I[32] = (T)(img)(x,_n3##y,z,c)), \ + (I[3] = (T)(img)(_n1##x,_p2##y,z,c)), \ + (I[9] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[15] = (T)(img)(_n1##x,y,z,c)), \ + (I[21] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[27] = (T)(img)(_n1##x,_n2##y,z,c)), \ + (I[33] = (T)(img)(_n1##x,_n3##y,z,c)), \ + (I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \ + (I[10] = (T)(img)(_n2##x,_p1##y,z,c)), \ + (I[16] = (T)(img)(_n2##x,y,z,c)), \ + (I[22] = (T)(img)(_n2##x,_n1##y,z,c)), \ + (I[28] = (T)(img)(_n2##x,_n2##y,z,c)), \ + (I[34] = (T)(img)(_n2##x,_n3##y,z,c)), \ + x + 3>=(int)(img)._width?(img).width() - 1:x + 3); \ + x<=(int)(x1) && ((_n3##x<(img).width() && ( \ + (I[5] = (T)(img)(_n3##x,_p2##y,z,c)), \ + (I[11] = (T)(img)(_n3##x,_p1##y,z,c)), \ + (I[17] = (T)(img)(_n3##x,y,z,c)), \ + (I[23] = (T)(img)(_n3##x,_n1##y,z,c)), \ + (I[29] = (T)(img)(_n3##x,_n2##y,z,c)), \ + (I[35] = (T)(img)(_n3##x,_n3##y,z,c)),1)) || \ + _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3## x = _n2##x = --_n1##x)); \ + I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], \ + I[6] = I[7], I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], \ + I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], I[16] = I[17], \ + I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ + I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], \ + I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], I[34] = I[35], \ + _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x) + +#define cimg_for7x7(img,x,y,z,c,I,T) \ + cimg_for7((img)._height,y) for (int x = 0, \ + _p3##x = 0, _p2##x = 0, _p1##x = 0, \ + _n1##x = 1>=(img)._width?(img).width() - 1:1, \ + _n2##x = 2>=(img)._width?(img).width() - 1:2, \ + _n3##x = (int)( \ + (I[0] = I[1] = I[2] = I[3] = (T)(img)(_p3##x,_p3##y,z,c)), \ + (I[7] = I[8] = I[9] = I[10] = (T)(img)(0,_p2##y,z,c)), \ + (I[14] = I[15] = I[16] = I[17] = (T)(img)(0,_p1##y,z,c)), \ + (I[21] = I[22] = I[23] = I[24] = (T)(img)(0,y,z,c)), \ + (I[28] = I[29] = I[30] = I[31] = (T)(img)(0,_n1##y,z,c)), \ + (I[35] = I[36] = I[37] = I[38] = (T)(img)(0,_n2##y,z,c)), \ + (I[42] = I[43] = I[44] = I[45] = (T)(img)(0,_n3##y,z,c)), \ + (I[4] = (T)(img)(_n1##x,_p3##y,z,c)), \ + (I[11] = (T)(img)(_n1##x,_p2##y,z,c)), \ + (I[18] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[25] = (T)(img)(_n1##x,y,z,c)), \ + (I[32] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[39] = (T)(img)(_n1##x,_n2##y,z,c)), \ + (I[46] = (T)(img)(_n1##x,_n3##y,z,c)), \ + (I[5] = (T)(img)(_n2##x,_p3##y,z,c)), \ + (I[12] = (T)(img)(_n2##x,_p2##y,z,c)), \ + (I[19] = (T)(img)(_n2##x,_p1##y,z,c)), \ + (I[26] = (T)(img)(_n2##x,y,z,c)), \ + (I[33] = (T)(img)(_n2##x,_n1##y,z,c)), \ + (I[40] = (T)(img)(_n2##x,_n2##y,z,c)), \ + (I[47] = (T)(img)(_n2##x,_n3##y,z,c)), \ + 3>=(img)._width?(img).width() - 1:3); \ + (_n3##x<(img).width() && ( \ + (I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \ + (I[13] = (T)(img)(_n3##x,_p2##y,z,c)), \ + (I[20] = (T)(img)(_n3##x,_p1##y,z,c)), \ + (I[27] = (T)(img)(_n3##x,y,z,c)), \ + (I[34] = (T)(img)(_n3##x,_n1##y,z,c)), \ + (I[41] = (T)(img)(_n3##x,_n2##y,z,c)), \ + (I[48] = (T)(img)(_n3##x,_n3##y,z,c)),1)) || \ + _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3##x = _n2##x = --_n1##x); \ + I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], \ + I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], \ + I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], \ + I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \ + I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], \ + I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \ + I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], \ + _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x) + +#define cimg_for_in7x7(img,x0,y0,x1,y1,x,y,z,c,I,T) \ + cimg_for_in7((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ + _p3##x = x - 3<0?0:x - 3, \ + _p2##x = x - 2<0?0:x - 2, \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = x + 1>=(int)(img)._width?(img).width() - 1:x + 1, \ + _n2##x = x + 2>=(int)(img)._width?(img).width() - 1:x + 2, \ + _n3##x = (int)( \ + (I[0] = (T)(img)(_p3##x,_p3##y,z,c)), \ + (I[7] = (T)(img)(_p3##x,_p2##y,z,c)), \ + (I[14] = (T)(img)(_p3##x,_p1##y,z,c)), \ + (I[21] = (T)(img)(_p3##x,y,z,c)), \ + (I[28] = (T)(img)(_p3##x,_n1##y,z,c)), \ + (I[35] = (T)(img)(_p3##x,_n2##y,z,c)), \ + (I[42] = (T)(img)(_p3##x,_n3##y,z,c)), \ + (I[1] = (T)(img)(_p2##x,_p3##y,z,c)), \ + (I[8] = (T)(img)(_p2##x,_p2##y,z,c)), \ + (I[15] = (T)(img)(_p2##x,_p1##y,z,c)), \ + (I[22] = (T)(img)(_p2##x,y,z,c)), \ + (I[29] = (T)(img)(_p2##x,_n1##y,z,c)), \ + (I[36] = (T)(img)(_p2##x,_n2##y,z,c)), \ + (I[43] = (T)(img)(_p2##x,_n3##y,z,c)), \ + (I[2] = (T)(img)(_p1##x,_p3##y,z,c)), \ + (I[9] = (T)(img)(_p1##x,_p2##y,z,c)), \ + (I[16] = (T)(img)(_p1##x,_p1##y,z,c)), \ + (I[23] = (T)(img)(_p1##x,y,z,c)), \ + (I[30] = (T)(img)(_p1##x,_n1##y,z,c)), \ + (I[37] = (T)(img)(_p1##x,_n2##y,z,c)), \ + (I[44] = (T)(img)(_p1##x,_n3##y,z,c)), \ + (I[3] = (T)(img)(x,_p3##y,z,c)), \ + (I[10] = (T)(img)(x,_p2##y,z,c)), \ + (I[17] = (T)(img)(x,_p1##y,z,c)), \ + (I[24] = (T)(img)(x,y,z,c)), \ + (I[31] = (T)(img)(x,_n1##y,z,c)), \ + (I[38] = (T)(img)(x,_n2##y,z,c)), \ + (I[45] = (T)(img)(x,_n3##y,z,c)), \ + (I[4] = (T)(img)(_n1##x,_p3##y,z,c)), \ + (I[11] = (T)(img)(_n1##x,_p2##y,z,c)), \ + (I[18] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[25] = (T)(img)(_n1##x,y,z,c)), \ + (I[32] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[39] = (T)(img)(_n1##x,_n2##y,z,c)), \ + (I[46] = (T)(img)(_n1##x,_n3##y,z,c)), \ + (I[5] = (T)(img)(_n2##x,_p3##y,z,c)), \ + (I[12] = (T)(img)(_n2##x,_p2##y,z,c)), \ + (I[19] = (T)(img)(_n2##x,_p1##y,z,c)), \ + (I[26] = (T)(img)(_n2##x,y,z,c)), \ + (I[33] = (T)(img)(_n2##x,_n1##y,z,c)), \ + (I[40] = (T)(img)(_n2##x,_n2##y,z,c)), \ + (I[47] = (T)(img)(_n2##x,_n3##y,z,c)), \ + x + 3>=(int)(img)._width?(img).width() - 1:x + 3); \ + x<=(int)(x1) && ((_n3##x<(img).width() && ( \ + (I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \ + (I[13] = (T)(img)(_n3##x,_p2##y,z,c)), \ + (I[20] = (T)(img)(_n3##x,_p1##y,z,c)), \ + (I[27] = (T)(img)(_n3##x,y,z,c)), \ + (I[34] = (T)(img)(_n3##x,_n1##y,z,c)), \ + (I[41] = (T)(img)(_n3##x,_n2##y,z,c)), \ + (I[48] = (T)(img)(_n3##x,_n3##y,z,c)),1)) || \ + _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n3##x = _n2##x = --_n1##x)); \ + I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], \ + I[7] = I[8], I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], \ + I[14] = I[15], I[15] = I[16], I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], \ + I[21] = I[22], I[22] = I[23], I[23] = I[24], I[24] = I[25], I[25] = I[26], I[26] = I[27], \ + I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], I[32] = I[33], I[33] = I[34], \ + I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], I[40] = I[41], \ + I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], I[47] = I[48], \ + _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x) + +#define cimg_for8x8(img,x,y,z,c,I,T) \ + cimg_for8((img)._height,y) for (int x = 0, \ + _p3##x = 0, _p2##x = 0, _p1##x = 0, \ + _n1##x = 1>=((img)._width)?(img).width() - 1:1, \ + _n2##x = 2>=((img)._width)?(img).width() - 1:2, \ + _n3##x = 3>=((img)._width)?(img).width() - 1:3, \ + _n4##x = (int)( \ + (I[0] = I[1] = I[2] = I[3] = (T)(img)(_p3##x,_p3##y,z,c)), \ + (I[8] = I[9] = I[10] = I[11] = (T)(img)(0,_p2##y,z,c)), \ + (I[16] = I[17] = I[18] = I[19] = (T)(img)(0,_p1##y,z,c)), \ + (I[24] = I[25] = I[26] = I[27] = (T)(img)(0,y,z,c)), \ + (I[32] = I[33] = I[34] = I[35] = (T)(img)(0,_n1##y,z,c)), \ + (I[40] = I[41] = I[42] = I[43] = (T)(img)(0,_n2##y,z,c)), \ + (I[48] = I[49] = I[50] = I[51] = (T)(img)(0,_n3##y,z,c)), \ + (I[56] = I[57] = I[58] = I[59] = (T)(img)(0,_n4##y,z,c)), \ + (I[4] = (T)(img)(_n1##x,_p3##y,z,c)), \ + (I[12] = (T)(img)(_n1##x,_p2##y,z,c)), \ + (I[20] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[28] = (T)(img)(_n1##x,y,z,c)), \ + (I[36] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[44] = (T)(img)(_n1##x,_n2##y,z,c)), \ + (I[52] = (T)(img)(_n1##x,_n3##y,z,c)), \ + (I[60] = (T)(img)(_n1##x,_n4##y,z,c)), \ + (I[5] = (T)(img)(_n2##x,_p3##y,z,c)), \ + (I[13] = (T)(img)(_n2##x,_p2##y,z,c)), \ + (I[21] = (T)(img)(_n2##x,_p1##y,z,c)), \ + (I[29] = (T)(img)(_n2##x,y,z,c)), \ + (I[37] = (T)(img)(_n2##x,_n1##y,z,c)), \ + (I[45] = (T)(img)(_n2##x,_n2##y,z,c)), \ + (I[53] = (T)(img)(_n2##x,_n3##y,z,c)), \ + (I[61] = (T)(img)(_n2##x,_n4##y,z,c)), \ + (I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \ + (I[14] = (T)(img)(_n3##x,_p2##y,z,c)), \ + (I[22] = (T)(img)(_n3##x,_p1##y,z,c)), \ + (I[30] = (T)(img)(_n3##x,y,z,c)), \ + (I[38] = (T)(img)(_n3##x,_n1##y,z,c)), \ + (I[46] = (T)(img)(_n3##x,_n2##y,z,c)), \ + (I[54] = (T)(img)(_n3##x,_n3##y,z,c)), \ + (I[62] = (T)(img)(_n3##x,_n4##y,z,c)), \ + 4>=((img)._width)?(img).width() - 1:4); \ + (_n4##x<(img).width() && ( \ + (I[7] = (T)(img)(_n4##x,_p3##y,z,c)), \ + (I[15] = (T)(img)(_n4##x,_p2##y,z,c)), \ + (I[23] = (T)(img)(_n4##x,_p1##y,z,c)), \ + (I[31] = (T)(img)(_n4##x,y,z,c)), \ + (I[39] = (T)(img)(_n4##x,_n1##y,z,c)), \ + (I[47] = (T)(img)(_n4##x,_n2##y,z,c)), \ + (I[55] = (T)(img)(_n4##x,_n3##y,z,c)), \ + (I[63] = (T)(img)(_n4##x,_n4##y,z,c)),1)) || \ + _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x); \ + I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], \ + I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], \ + I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ + I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \ + I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \ + I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ + I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \ + I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \ + _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x) + +#define cimg_for_in8x8(img,x0,y0,x1,y1,x,y,z,c,I,T) \ + cimg_for_in8((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ + _p3##x = x - 3<0?0:x - 3, \ + _p2##x = x - 2<0?0:x - 2, \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = x + 1>=(img).width()?(img).width() - 1:x + 1, \ + _n2##x = x + 2>=(img).width()?(img).width() - 1:x + 2, \ + _n3##x = x + 3>=(img).width()?(img).width() - 1:x + 3, \ + _n4##x = (int)( \ + (I[0] = (T)(img)(_p3##x,_p3##y,z,c)), \ + (I[8] = (T)(img)(_p3##x,_p2##y,z,c)), \ + (I[16] = (T)(img)(_p3##x,_p1##y,z,c)), \ + (I[24] = (T)(img)(_p3##x,y,z,c)), \ + (I[32] = (T)(img)(_p3##x,_n1##y,z,c)), \ + (I[40] = (T)(img)(_p3##x,_n2##y,z,c)), \ + (I[48] = (T)(img)(_p3##x,_n3##y,z,c)), \ + (I[56] = (T)(img)(_p3##x,_n4##y,z,c)), \ + (I[1] = (T)(img)(_p2##x,_p3##y,z,c)), \ + (I[9] = (T)(img)(_p2##x,_p2##y,z,c)), \ + (I[17] = (T)(img)(_p2##x,_p1##y,z,c)), \ + (I[25] = (T)(img)(_p2##x,y,z,c)), \ + (I[33] = (T)(img)(_p2##x,_n1##y,z,c)), \ + (I[41] = (T)(img)(_p2##x,_n2##y,z,c)), \ + (I[49] = (T)(img)(_p2##x,_n3##y,z,c)), \ + (I[57] = (T)(img)(_p2##x,_n4##y,z,c)), \ + (I[2] = (T)(img)(_p1##x,_p3##y,z,c)), \ + (I[10] = (T)(img)(_p1##x,_p2##y,z,c)), \ + (I[18] = (T)(img)(_p1##x,_p1##y,z,c)), \ + (I[26] = (T)(img)(_p1##x,y,z,c)), \ + (I[34] = (T)(img)(_p1##x,_n1##y,z,c)), \ + (I[42] = (T)(img)(_p1##x,_n2##y,z,c)), \ + (I[50] = (T)(img)(_p1##x,_n3##y,z,c)), \ + (I[58] = (T)(img)(_p1##x,_n4##y,z,c)), \ + (I[3] = (T)(img)(x,_p3##y,z,c)), \ + (I[11] = (T)(img)(x,_p2##y,z,c)), \ + (I[19] = (T)(img)(x,_p1##y,z,c)), \ + (I[27] = (T)(img)(x,y,z,c)), \ + (I[35] = (T)(img)(x,_n1##y,z,c)), \ + (I[43] = (T)(img)(x,_n2##y,z,c)), \ + (I[51] = (T)(img)(x,_n3##y,z,c)), \ + (I[59] = (T)(img)(x,_n4##y,z,c)), \ + (I[4] = (T)(img)(_n1##x,_p3##y,z,c)), \ + (I[12] = (T)(img)(_n1##x,_p2##y,z,c)), \ + (I[20] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[28] = (T)(img)(_n1##x,y,z,c)), \ + (I[36] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[44] = (T)(img)(_n1##x,_n2##y,z,c)), \ + (I[52] = (T)(img)(_n1##x,_n3##y,z,c)), \ + (I[60] = (T)(img)(_n1##x,_n4##y,z,c)), \ + (I[5] = (T)(img)(_n2##x,_p3##y,z,c)), \ + (I[13] = (T)(img)(_n2##x,_p2##y,z,c)), \ + (I[21] = (T)(img)(_n2##x,_p1##y,z,c)), \ + (I[29] = (T)(img)(_n2##x,y,z,c)), \ + (I[37] = (T)(img)(_n2##x,_n1##y,z,c)), \ + (I[45] = (T)(img)(_n2##x,_n2##y,z,c)), \ + (I[53] = (T)(img)(_n2##x,_n3##y,z,c)), \ + (I[61] = (T)(img)(_n2##x,_n4##y,z,c)), \ + (I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \ + (I[14] = (T)(img)(_n3##x,_p2##y,z,c)), \ + (I[22] = (T)(img)(_n3##x,_p1##y,z,c)), \ + (I[30] = (T)(img)(_n3##x,y,z,c)), \ + (I[38] = (T)(img)(_n3##x,_n1##y,z,c)), \ + (I[46] = (T)(img)(_n3##x,_n2##y,z,c)), \ + (I[54] = (T)(img)(_n3##x,_n3##y,z,c)), \ + (I[62] = (T)(img)(_n3##x,_n4##y,z,c)), \ + x + 4>=(img).width()?(img).width() - 1:x + 4); \ + x<=(int)(x1) && ((_n4##x<(img).width() && ( \ + (I[7] = (T)(img)(_n4##x,_p3##y,z,c)), \ + (I[15] = (T)(img)(_n4##x,_p2##y,z,c)), \ + (I[23] = (T)(img)(_n4##x,_p1##y,z,c)), \ + (I[31] = (T)(img)(_n4##x,y,z,c)), \ + (I[39] = (T)(img)(_n4##x,_n1##y,z,c)), \ + (I[47] = (T)(img)(_n4##x,_n2##y,z,c)), \ + (I[55] = (T)(img)(_n4##x,_n3##y,z,c)), \ + (I[63] = (T)(img)(_n4##x,_n4##y,z,c)),1)) || \ + _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x)); \ + I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], \ + I[8] = I[9], I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], \ + I[16] = I[17], I[17] = I[18], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], \ + I[24] = I[25], I[25] = I[26], I[26] = I[27], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], \ + I[32] = I[33], I[33] = I[34], I[34] = I[35], I[35] = I[36], I[36] = I[37], I[37] = I[38], I[38] = I[39], \ + I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[44] = I[45], I[45] = I[46], I[46] = I[47], \ + I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[53] = I[54], I[54] = I[55], \ + I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[62] = I[63], \ + _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x) + +#define cimg_for9x9(img,x,y,z,c,I,T) \ + cimg_for9((img)._height,y) for (int x = 0, \ + _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ + _n1##x = 1>=((img)._width)?(img).width() - 1:1, \ + _n2##x = 2>=((img)._width)?(img).width() - 1:2, \ + _n3##x = 3>=((img)._width)?(img).width() - 1:3, \ + _n4##x = (int)( \ + (I[0] = I[1] = I[2] = I[3] = I[4] = (T)(img)(_p4##x,_p4##y,z,c)), \ + (I[9] = I[10] = I[11] = I[12] = I[13] = (T)(img)(0,_p3##y,z,c)), \ + (I[18] = I[19] = I[20] = I[21] = I[22] = (T)(img)(0,_p2##y,z,c)), \ + (I[27] = I[28] = I[29] = I[30] = I[31] = (T)(img)(0,_p1##y,z,c)), \ + (I[36] = I[37] = I[38] = I[39] = I[40] = (T)(img)(0,y,z,c)), \ + (I[45] = I[46] = I[47] = I[48] = I[49] = (T)(img)(0,_n1##y,z,c)), \ + (I[54] = I[55] = I[56] = I[57] = I[58] = (T)(img)(0,_n2##y,z,c)), \ + (I[63] = I[64] = I[65] = I[66] = I[67] = (T)(img)(0,_n3##y,z,c)), \ + (I[72] = I[73] = I[74] = I[75] = I[76] = (T)(img)(0,_n4##y,z,c)), \ + (I[5] = (T)(img)(_n1##x,_p4##y,z,c)), \ + (I[14] = (T)(img)(_n1##x,_p3##y,z,c)), \ + (I[23] = (T)(img)(_n1##x,_p2##y,z,c)), \ + (I[32] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[41] = (T)(img)(_n1##x,y,z,c)), \ + (I[50] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[59] = (T)(img)(_n1##x,_n2##y,z,c)), \ + (I[68] = (T)(img)(_n1##x,_n3##y,z,c)), \ + (I[77] = (T)(img)(_n1##x,_n4##y,z,c)), \ + (I[6] = (T)(img)(_n2##x,_p4##y,z,c)), \ + (I[15] = (T)(img)(_n2##x,_p3##y,z,c)), \ + (I[24] = (T)(img)(_n2##x,_p2##y,z,c)), \ + (I[33] = (T)(img)(_n2##x,_p1##y,z,c)), \ + (I[42] = (T)(img)(_n2##x,y,z,c)), \ + (I[51] = (T)(img)(_n2##x,_n1##y,z,c)), \ + (I[60] = (T)(img)(_n2##x,_n2##y,z,c)), \ + (I[69] = (T)(img)(_n2##x,_n3##y,z,c)), \ + (I[78] = (T)(img)(_n2##x,_n4##y,z,c)), \ + (I[7] = (T)(img)(_n3##x,_p4##y,z,c)), \ + (I[16] = (T)(img)(_n3##x,_p3##y,z,c)), \ + (I[25] = (T)(img)(_n3##x,_p2##y,z,c)), \ + (I[34] = (T)(img)(_n3##x,_p1##y,z,c)), \ + (I[43] = (T)(img)(_n3##x,y,z,c)), \ + (I[52] = (T)(img)(_n3##x,_n1##y,z,c)), \ + (I[61] = (T)(img)(_n3##x,_n2##y,z,c)), \ + (I[70] = (T)(img)(_n3##x,_n3##y,z,c)), \ + (I[79] = (T)(img)(_n3##x,_n4##y,z,c)), \ + 4>=((img)._width)?(img).width() - 1:4); \ + (_n4##x<(img).width() && ( \ + (I[8] = (T)(img)(_n4##x,_p4##y,z,c)), \ + (I[17] = (T)(img)(_n4##x,_p3##y,z,c)), \ + (I[26] = (T)(img)(_n4##x,_p2##y,z,c)), \ + (I[35] = (T)(img)(_n4##x,_p1##y,z,c)), \ + (I[44] = (T)(img)(_n4##x,y,z,c)), \ + (I[53] = (T)(img)(_n4##x,_n1##y,z,c)), \ + (I[62] = (T)(img)(_n4##x,_n2##y,z,c)), \ + (I[71] = (T)(img)(_n4##x,_n3##y,z,c)), \ + (I[80] = (T)(img)(_n4##x,_n4##y,z,c)),1)) || \ + _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x); \ + I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], \ + I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], \ + I[16] = I[17], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \ + I[24] = I[25], I[25] = I[26], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], \ + I[32] = I[33], I[33] = I[34], I[34] = I[35], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], \ + I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[45] = I[46], I[46] = I[47], I[47] = I[48], \ + I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[54] = I[55], I[55] = I[56], \ + I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[63] = I[64], \ + I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ + I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \ + I[79] = I[80], \ + _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x) + +#define cimg_for_in9x9(img,x0,y0,x1,y1,x,y,z,c,I,T) \ + cimg_for_in9((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ + _p4##x = x - 4<0?0:x - 4, \ + _p3##x = x - 3<0?0:x - 3, \ + _p2##x = x - 2<0?0:x - 2, \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = x + 1>=(img).width()?(img).width() - 1:x + 1, \ + _n2##x = x + 2>=(img).width()?(img).width() - 1:x + 2, \ + _n3##x = x + 3>=(img).width()?(img).width() - 1:x + 3, \ + _n4##x = (int)( \ + (I[0] = (T)(img)(_p4##x,_p4##y,z,c)), \ + (I[9] = (T)(img)(_p4##x,_p3##y,z,c)), \ + (I[18] = (T)(img)(_p4##x,_p2##y,z,c)), \ + (I[27] = (T)(img)(_p4##x,_p1##y,z,c)), \ + (I[36] = (T)(img)(_p4##x,y,z,c)), \ + (I[45] = (T)(img)(_p4##x,_n1##y,z,c)), \ + (I[54] = (T)(img)(_p4##x,_n2##y,z,c)), \ + (I[63] = (T)(img)(_p4##x,_n3##y,z,c)), \ + (I[72] = (T)(img)(_p4##x,_n4##y,z,c)), \ + (I[1] = (T)(img)(_p3##x,_p4##y,z,c)), \ + (I[10] = (T)(img)(_p3##x,_p3##y,z,c)), \ + (I[19] = (T)(img)(_p3##x,_p2##y,z,c)), \ + (I[28] = (T)(img)(_p3##x,_p1##y,z,c)), \ + (I[37] = (T)(img)(_p3##x,y,z,c)), \ + (I[46] = (T)(img)(_p3##x,_n1##y,z,c)), \ + (I[55] = (T)(img)(_p3##x,_n2##y,z,c)), \ + (I[64] = (T)(img)(_p3##x,_n3##y,z,c)), \ + (I[73] = (T)(img)(_p3##x,_n4##y,z,c)), \ + (I[2] = (T)(img)(_p2##x,_p4##y,z,c)), \ + (I[11] = (T)(img)(_p2##x,_p3##y,z,c)), \ + (I[20] = (T)(img)(_p2##x,_p2##y,z,c)), \ + (I[29] = (T)(img)(_p2##x,_p1##y,z,c)), \ + (I[38] = (T)(img)(_p2##x,y,z,c)), \ + (I[47] = (T)(img)(_p2##x,_n1##y,z,c)), \ + (I[56] = (T)(img)(_p2##x,_n2##y,z,c)), \ + (I[65] = (T)(img)(_p2##x,_n3##y,z,c)), \ + (I[74] = (T)(img)(_p2##x,_n4##y,z,c)), \ + (I[3] = (T)(img)(_p1##x,_p4##y,z,c)), \ + (I[12] = (T)(img)(_p1##x,_p3##y,z,c)), \ + (I[21] = (T)(img)(_p1##x,_p2##y,z,c)), \ + (I[30] = (T)(img)(_p1##x,_p1##y,z,c)), \ + (I[39] = (T)(img)(_p1##x,y,z,c)), \ + (I[48] = (T)(img)(_p1##x,_n1##y,z,c)), \ + (I[57] = (T)(img)(_p1##x,_n2##y,z,c)), \ + (I[66] = (T)(img)(_p1##x,_n3##y,z,c)), \ + (I[75] = (T)(img)(_p1##x,_n4##y,z,c)), \ + (I[4] = (T)(img)(x,_p4##y,z,c)), \ + (I[13] = (T)(img)(x,_p3##y,z,c)), \ + (I[22] = (T)(img)(x,_p2##y,z,c)), \ + (I[31] = (T)(img)(x,_p1##y,z,c)), \ + (I[40] = (T)(img)(x,y,z,c)), \ + (I[49] = (T)(img)(x,_n1##y,z,c)), \ + (I[58] = (T)(img)(x,_n2##y,z,c)), \ + (I[67] = (T)(img)(x,_n3##y,z,c)), \ + (I[76] = (T)(img)(x,_n4##y,z,c)), \ + (I[5] = (T)(img)(_n1##x,_p4##y,z,c)), \ + (I[14] = (T)(img)(_n1##x,_p3##y,z,c)), \ + (I[23] = (T)(img)(_n1##x,_p2##y,z,c)), \ + (I[32] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[41] = (T)(img)(_n1##x,y,z,c)), \ + (I[50] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[59] = (T)(img)(_n1##x,_n2##y,z,c)), \ + (I[68] = (T)(img)(_n1##x,_n3##y,z,c)), \ + (I[77] = (T)(img)(_n1##x,_n4##y,z,c)), \ + (I[6] = (T)(img)(_n2##x,_p4##y,z,c)), \ + (I[15] = (T)(img)(_n2##x,_p3##y,z,c)), \ + (I[24] = (T)(img)(_n2##x,_p2##y,z,c)), \ + (I[33] = (T)(img)(_n2##x,_p1##y,z,c)), \ + (I[42] = (T)(img)(_n2##x,y,z,c)), \ + (I[51] = (T)(img)(_n2##x,_n1##y,z,c)), \ + (I[60] = (T)(img)(_n2##x,_n2##y,z,c)), \ + (I[69] = (T)(img)(_n2##x,_n3##y,z,c)), \ + (I[78] = (T)(img)(_n2##x,_n4##y,z,c)), \ + (I[7] = (T)(img)(_n3##x,_p4##y,z,c)), \ + (I[16] = (T)(img)(_n3##x,_p3##y,z,c)), \ + (I[25] = (T)(img)(_n3##x,_p2##y,z,c)), \ + (I[34] = (T)(img)(_n3##x,_p1##y,z,c)), \ + (I[43] = (T)(img)(_n3##x,y,z,c)), \ + (I[52] = (T)(img)(_n3##x,_n1##y,z,c)), \ + (I[61] = (T)(img)(_n3##x,_n2##y,z,c)), \ + (I[70] = (T)(img)(_n3##x,_n3##y,z,c)), \ + (I[79] = (T)(img)(_n3##x,_n4##y,z,c)), \ + x + 4>=(img).width()?(img).width() - 1:x + 4); \ + x<=(int)(x1) && ((_n4##x<(img).width() && ( \ + (I[8] = (T)(img)(_n4##x,_p4##y,z,c)), \ + (I[17] = (T)(img)(_n4##x,_p3##y,z,c)), \ + (I[26] = (T)(img)(_n4##x,_p2##y,z,c)), \ + (I[35] = (T)(img)(_n4##x,_p1##y,z,c)), \ + (I[44] = (T)(img)(_n4##x,y,z,c)), \ + (I[53] = (T)(img)(_n4##x,_n1##y,z,c)), \ + (I[62] = (T)(img)(_n4##x,_n2##y,z,c)), \ + (I[71] = (T)(img)(_n4##x,_n3##y,z,c)), \ + (I[80] = (T)(img)(_n4##x,_n4##y,z,c)),1)) || \ + _n3##x==--_n4##x || _n2##x==--_n3##x || _n1##x==--_n2##x || x==(_n4##x = _n3##x = _n2##x = --_n1##x)); \ + I[0] = I[1], I[1] = I[2], I[2] = I[3], I[3] = I[4], I[4] = I[5], I[5] = I[6], I[6] = I[7], I[7] = I[8], \ + I[9] = I[10], I[10] = I[11], I[11] = I[12], I[12] = I[13], I[13] = I[14], I[14] = I[15], I[15] = I[16], \ + I[16] = I[17], I[18] = I[19], I[19] = I[20], I[20] = I[21], I[21] = I[22], I[22] = I[23], I[23] = I[24], \ + I[24] = I[25], I[25] = I[26], I[27] = I[28], I[28] = I[29], I[29] = I[30], I[30] = I[31], I[31] = I[32], \ + I[32] = I[33], I[33] = I[34], I[34] = I[35], I[36] = I[37], I[37] = I[38], I[38] = I[39], I[39] = I[40], \ + I[40] = I[41], I[41] = I[42], I[42] = I[43], I[43] = I[44], I[45] = I[46], I[46] = I[47], I[47] = I[48], \ + I[48] = I[49], I[49] = I[50], I[50] = I[51], I[51] = I[52], I[52] = I[53], I[54] = I[55], I[55] = I[56], \ + I[56] = I[57], I[57] = I[58], I[58] = I[59], I[59] = I[60], I[60] = I[61], I[61] = I[62], I[63] = I[64], \ + I[64] = I[65], I[65] = I[66], I[66] = I[67], I[67] = I[68], I[68] = I[69], I[69] = I[70], I[70] = I[71], \ + I[72] = I[73], I[73] = I[74], I[74] = I[75], I[75] = I[76], I[76] = I[77], I[77] = I[78], I[78] = I[79], \ + I[79] = I[80], \ + _p4##x = _p3##x, _p3##x = _p2##x, _p2##x = _p1##x, _p1##x = x++, ++_n1##x, ++_n2##x, ++_n3##x, ++_n4##x) + +#define cimg_for2x2x2(img,x,y,z,c,I,T) \ + cimg_for2((img)._depth,z) cimg_for2((img)._height,y) for (int x = 0, \ + _n1##x = (int)( \ + (I[0] = (T)(img)(0,y,z,c)), \ + (I[2] = (T)(img)(0,_n1##y,z,c)), \ + (I[4] = (T)(img)(0,y,_n1##z,c)), \ + (I[6] = (T)(img)(0,_n1##y,_n1##z,c)), \ + 1>=(img)._width?(img).width() - 1:1); \ + (_n1##x<(img).width() && ( \ + (I[1] = (T)(img)(_n1##x,y,z,c)), \ + (I[3] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[5] = (T)(img)(_n1##x,y,_n1##z,c)), \ + (I[7] = (T)(img)(_n1##x,_n1##y,_n1##z,c)),1)) || \ + x==--_n1##x; \ + I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], \ + ++x, ++_n1##x) + +#define cimg_for_in2x2x2(img,x0,y0,z0,x1,y1,z1,x,y,z,c,I,T) \ + cimg_for_in2((img)._depth,z0,z1,z) cimg_for_in2((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ + _n1##x = (int)( \ + (I[0] = (T)(img)(x,y,z,c)), \ + (I[2] = (T)(img)(x,_n1##y,z,c)), \ + (I[4] = (T)(img)(x,y,_n1##z,c)), \ + (I[6] = (T)(img)(x,_n1##y,_n1##z,c)), \ + x + 1>=(int)(img)._width?(img).width() - 1:x + 1); \ + x<=(int)(x1) && ((_n1##x<(img).width() && ( \ + (I[1] = (T)(img)(_n1##x,y,z,c)), \ + (I[3] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[5] = (T)(img)(_n1##x,y,_n1##z,c)), \ + (I[7] = (T)(img)(_n1##x,_n1##y,_n1##z,c)),1)) || \ + x==--_n1##x); \ + I[0] = I[1], I[2] = I[3], I[4] = I[5], I[6] = I[7], \ + ++x, ++_n1##x) + +#define cimg_for3x3x3(img,x,y,z,c,I,T) \ + cimg_for3((img)._depth,z) cimg_for3((img)._height,y) for (int x = 0, \ + _p1##x = 0, \ + _n1##x = (int)( \ + (I[0] = I[1] = (T)(img)(_p1##x,_p1##y,_p1##z,c)), \ + (I[3] = I[4] = (T)(img)(0,y,_p1##z,c)), \ + (I[6] = I[7] = (T)(img)(0,_n1##y,_p1##z,c)), \ + (I[9] = I[10] = (T)(img)(0,_p1##y,z,c)), \ + (I[12] = I[13] = (T)(img)(0,y,z,c)), \ + (I[15] = I[16] = (T)(img)(0,_n1##y,z,c)), \ + (I[18] = I[19] = (T)(img)(0,_p1##y,_n1##z,c)), \ + (I[21] = I[22] = (T)(img)(0,y,_n1##z,c)), \ + (I[24] = I[25] = (T)(img)(0,_n1##y,_n1##z,c)), \ + 1>=(img)._width?(img).width() - 1:1); \ + (_n1##x<(img).width() && ( \ + (I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ + (I[5] = (T)(img)(_n1##x,y,_p1##z,c)), \ + (I[8] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ + (I[11] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[14] = (T)(img)(_n1##x,y,z,c)), \ + (I[17] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[20] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ + (I[23] = (T)(img)(_n1##x,y,_n1##z,c)), \ + (I[26] = (T)(img)(_n1##x,_n1##y,_n1##z,c)),1)) || \ + x==--_n1##x; \ + I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], \ + I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], \ + I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], \ + _p1##x = x++, ++_n1##x) + +#define cimg_for_in3x3x3(img,x0,y0,z0,x1,y1,z1,x,y,z,c,I,T) \ + cimg_for_in3((img)._depth,z0,z1,z) cimg_for_in3((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = (int)( \ + (I[0] = (T)(img)(_p1##x,_p1##y,_p1##z,c)), \ + (I[3] = (T)(img)(_p1##x,y,_p1##z,c)), \ + (I[6] = (T)(img)(_p1##x,_n1##y,_p1##z,c)), \ + (I[9] = (T)(img)(_p1##x,_p1##y,z,c)), \ + (I[12] = (T)(img)(_p1##x,y,z,c)), \ + (I[15] = (T)(img)(_p1##x,_n1##y,z,c)), \ + (I[18] = (T)(img)(_p1##x,_p1##y,_n1##z,c)), \ + (I[21] = (T)(img)(_p1##x,y,_n1##z,c)), \ + (I[24] = (T)(img)(_p1##x,_n1##y,_n1##z,c)), \ + (I[1] = (T)(img)(x,_p1##y,_p1##z,c)), \ + (I[4] = (T)(img)(x,y,_p1##z,c)), \ + (I[7] = (T)(img)(x,_n1##y,_p1##z,c)), \ + (I[10] = (T)(img)(x,_p1##y,z,c)), \ + (I[13] = (T)(img)(x,y,z,c)), \ + (I[16] = (T)(img)(x,_n1##y,z,c)), \ + (I[19] = (T)(img)(x,_p1##y,_n1##z,c)), \ + (I[22] = (T)(img)(x,y,_n1##z,c)), \ + (I[25] = (T)(img)(x,_n1##y,_n1##z,c)), \ + x + 1>=(int)(img)._width?(img).width() - 1:x + 1); \ + x<=(int)(x1) && ((_n1##x<(img).width() && ( \ + (I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ + (I[5] = (T)(img)(_n1##x,y,_p1##z,c)), \ + (I[8] = (T)(img)(_n1##x,_n1##y,_p1##z,c)), \ + (I[11] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[14] = (T)(img)(_n1##x,y,z,c)), \ + (I[17] = (T)(img)(_n1##x,_n1##y,z,c)), \ + (I[20] = (T)(img)(_n1##x,_p1##y,_n1##z,c)), \ + (I[23] = (T)(img)(_n1##x,y,_n1##z,c)), \ + (I[26] = (T)(img)(_n1##x,_n1##y,_n1##z,c)),1)) || \ + x==--_n1##x); \ + I[0] = I[1], I[1] = I[2], I[3] = I[4], I[4] = I[5], I[6] = I[7], I[7] = I[8], \ + I[9] = I[10], I[10] = I[11], I[12] = I[13], I[13] = I[14], I[15] = I[16], I[16] = I[17], \ + I[18] = I[19], I[19] = I[20], I[21] = I[22], I[22] = I[23], I[24] = I[25], I[25] = I[26], \ + _p1##x = x++, ++_n1##x) + +#define cimglist_for(list,l) for (int l = 0; l<(int)(list)._width; ++l) +#define cimglist_for_in(list,l0,l1,l) \ + for (int l = (int)(l0)<0?0:(int)(l0), _max##l = (unsigned int)l1<(list)._width?(int)(l1):(int)(list)._width - 1; \ + l<=_max##l; ++l) + +#define cimglist_apply(list,fn) cimglist_for(list,__##fn) (list)[__##fn].fn + +// Macros used to display error messages when exceptions are thrown. +// You should not use these macros is your own code. +#define _cimgdisplay_instance "[instance(%u,%u,%u,%c%s%c)] CImgDisplay::" +#define cimgdisplay_instance _width,_height,_normalization,_title?'\"':'[',_title?_title:"untitled",_title?'\"':']' +#define _cimg_instance "[instance(%u,%u,%u,%u,%p,%sshared)] CImg<%s>::" +#define cimg_instance _width,_height,_depth,_spectrum,_data,_is_shared?"":"non-",pixel_type() +#define _cimglist_instance "[instance(%u,%u,%p)] CImgList<%s>::" +#define cimglist_instance _width,_allocated_width,_data,pixel_type() + +/*------------------------------------------------ + # + # + # Define cimg_library:: namespace + # + # + -------------------------------------------------*/ +//! Contains all classes and functions of the \CImg library. +/** + This namespace is defined to avoid functions and class names collisions + that could happen with the inclusion of other C++ header files. + Anyway, it should not happen often and you should reasonnably start most of your + \CImg-based programs with + \code + #include "CImg.h" + using namespace cimg_library; + \endcode + to simplify the declaration of \CImg Library objects afterwards. +**/ +namespace cimg_library_suffixed { + + // Declare the four classes of the CImg Library. + template struct CImg; + template struct CImgList; + struct CImgDisplay; + struct CImgException; + + // Declare cimg:: namespace. + // This is an uncomplete namespace definition here. It only contains some + // necessary stuff to ensure a correct declaration order of the classes and functions + // defined afterwards. + namespace cimg { + + // Define ascii sequences for colored terminal output. +#ifdef cimg_use_vt100 + static const char t_normal[] = { 0x1b, '[', '0', ';', '0', ';', '0', 'm', 0 }; + static const char t_black[] = { 0x1b, '[', '0', ';', '3', '0', ';', '5', '9', 'm', 0 }; + static const char t_red[] = { 0x1b, '[', '0', ';', '3', '1', ';', '5', '9', 'm', 0 }; + static const char t_green[] = { 0x1b, '[', '0', ';', '3', '2', ';', '5', '9', 'm', 0 }; + static const char t_yellow[] = { 0x1b, '[', '0', ';', '3', '3', ';', '5', '9', 'm', 0 }; + static const char t_blue[] = { 0x1b, '[', '0', ';', '3', '4', ';', '5', '9', 'm', 0 }; + static const char t_magenta[] = { 0x1b, '[', '0', ';', '3', '5', ';', '5', '9', 'm', 0 }; + static const char t_cyan[] = { 0x1b, '[', '0', ';', '3', '6', ';', '5', '9', 'm', 0 }; + static const char t_white[] = { 0x1b, '[', '0', ';', '3', '7', ';', '5', '9', 'm', 0 }; + static const char t_bold[] = { 0x1b, '[', '1', 'm', 0 }; + static const char t_underscore[] = { 0x1b, '[', '4', 'm', 0 }; +#else + static const char t_normal[] = { 0 }; + static const char *const t_black = cimg::t_normal, + *const t_red = cimg::t_normal, + *const t_green = cimg::t_normal, + *const t_yellow = cimg::t_normal, + *const t_blue = cimg::t_normal, + *const t_magenta = cimg::t_normal, + *const t_cyan = cimg::t_normal, + *const t_white = cimg::t_normal, + *const t_bold = cimg::t_normal, + *const t_underscore = cimg::t_normal; +#endif + + inline std::FILE* output(std::FILE *file=0); + inline void info(); + + //! Avoid warning messages due to unused parameters. Do nothing actually. + template + inline void unused(const T&, ...) {} + + // [internal] Lock/unlock a mutex for managing concurrent threads. + // 'lock_mode' can be { 0=unlock | 1=lock | 2=trylock }. + // 'n' can be in [0,31] but mutex range [0,15] is reserved by CImg. + inline int mutex(const unsigned int n, const int lock_mode=1); + + inline unsigned int& _exception_mode(const unsigned int value, const bool is_set) { + static unsigned int mode = cimg_verbosity; + if (is_set) { cimg::mutex(0); mode = value<4?value:4; cimg::mutex(0,0); } + return mode; + } + + // Functions to return standard streams 'stdin', 'stdout' and 'stderr'. + inline FILE* _stdin(const bool throw_exception=true); + inline FILE* _stdout(const bool throw_exception=true); + inline FILE* _stderr(const bool throw_exception=true); + + // Mandatory because Microsoft's _snprintf() and _vsnprintf() do not add the '\0' character + // at the end of the string. +#if cimg_OS==2 && defined(_MSC_VER) + inline int _snprintf(char *const s, const size_t size, const char *const format, ...) { + va_list ap; + va_start(ap,format); + const int result = _vsnprintf(s,size,format,ap); + va_end(ap); + return result; + } + + inline int _vsnprintf(char *const s, const size_t size, const char *const format, va_list ap) { + int result = -1; + cimg::mutex(6); + if (size) result = _vsnprintf_s(s,size,_TRUNCATE,format,ap); + if (result==-1) result = _vscprintf(format,ap); + cimg::mutex(6,0); + return result; + } + + // Mutex-protected version of sscanf, sprintf and snprintf. + // Used only MacOSX, as it seems those functions are not re-entrant on MacOSX. +#elif defined(__MACOSX__) || defined(__APPLE__) + inline int _sscanf(const char *const s, const char *const format, ...) { + cimg::mutex(6); + va_list args; + va_start(args,format); + const int result = std::vsscanf(s,format,args); + va_end(args); + cimg::mutex(6,0); + return result; + } + + inline int _sprintf(char *const s, const char *const format, ...) { + cimg::mutex(6); + va_list args; + va_start(args,format); + const int result = std::vsprintf(s,format,args); + va_end(args); + cimg::mutex(6,0); + return result; + } + + inline int _snprintf(char *const s, const size_t n, const char *const format, ...) { + cimg::mutex(6); + va_list args; + va_start(args,format); + const int result = std::vsnprintf(s,n,format,args); + va_end(args); + cimg::mutex(6,0); + return result; + } + + inline int _vsnprintf(char *const s, const size_t size, const char* format, va_list ap) { + cimg::mutex(6); + const int result = std::vsnprintf(s,size,format,ap); + cimg::mutex(6,0); + return result; + } +#endif + + //! Set current \CImg exception mode. + /** + The way error messages are handled by \CImg can be changed dynamically, using this function. + \param mode Desired exception mode. Possible values are: + - \c 0: Hide library messages (quiet mode). + - \c 1: Print library messages on the console. + - \c 2: Display library messages on a dialog window. + - \c 3: Do as \c 1 + add extra debug warnings (slow down the code!). + - \c 4: Do as \c 2 + add extra debug warnings (slow down the code!). + **/ + inline unsigned int& exception_mode(const unsigned int mode) { + return _exception_mode(mode,true); + } + + //! Return current \CImg exception mode. + /** + \note By default, return the value of configuration macro \c cimg_verbosity + **/ + inline unsigned int& exception_mode() { + return _exception_mode(0,false); + } + + //! Set current \CImg openmp mode. + /** + The way openmp-based methods are handled by \CImg can be changed dynamically, using this function. + \param mode Desired openmp mode. Possible values are: + - \c 0: Never parallelize. + - \c 1: Always parallelize. + - \c 2: Adaptive parallelization mode (default behavior). + **/ + inline unsigned int& _openmp_mode(const unsigned int value, const bool is_set) { + static unsigned int mode = 2; + if (is_set) { cimg::mutex(0); mode = value<2?value:2; cimg::mutex(0,0); } + return mode; + } + + inline unsigned int& openmp_mode(const unsigned int mode) { + return _openmp_mode(mode,true); + } + + //! Return current \CImg openmp mode. + inline unsigned int& openmp_mode() { + return _openmp_mode(0,false); + } + +#define cimg_openmp_if(cond) if (cimg::openmp_mode()==1 || (cimg::openmp_mode()>1 && (cond))) + + // Display a simple dialog box, and wait for the user's response. + inline int dialog(const char *const title, const char *const msg, const char *const button1_label="OK", + const char *const button2_label=0, const char *const button3_label=0, + const char *const button4_label=0, const char *const button5_label=0, + const char *const button6_label=0, const bool centering=false); + + // Evaluate math expression. + inline double eval(const char *const expression, + const double x=0, const double y=0, const double z=0, const double c=0); + + } + + /*--------------------------------------- + # + # Define the CImgException structures + # + --------------------------------------*/ + //! Instances of \c CImgException are thrown when errors are encountered in a \CImg function call. + /** + \par Overview + + CImgException is the base class of all exceptions thrown by \CImg (except \b CImgAbortException). + CImgException is never thrown itself. Derived classes that specify the type of errord are thrown instead. + These classes can be: + + - \b CImgAbortException: Thrown when a computationally-intensive function is aborted by an external signal. + This is the only \c non-derived exception class. + + - \b CImgArgumentException: Thrown when one argument of a called \CImg function is invalid. + This is probably one of the most thrown exception by \CImg. + For instance, the following example throws a \c CImgArgumentException: + \code + CImg img(100,100,1,3); // Define a 100x100 color image with float-valued pixels. + img.mirror('e'); // Try to mirror image along the (non-existing) 'e'-axis. + \endcode + + - \b CImgDisplayException: Thrown when something went wrong during the display of images in CImgDisplay instances. + + - \b CImgInstanceException: Thrown when an instance associated to a called \CImg method does not fit + the function requirements. For instance, the following example throws a \c CImgInstanceException: + \code + const CImg img; // Define an empty image. + const float value = img.at(0); // Try to read first pixel value (does not exist). + \endcode + + - \b CImgIOException: Thrown when an error occured when trying to load or save image files. + This happens when trying to read files that do not exist or with invalid formats. + For instance, the following example throws a \c CImgIOException: + \code + const CImg img("missing_file.jpg"); // Try to load a file that does not exist. + \endcode + + - \b CImgWarningException: Thrown only if configuration macro \c cimg_strict_warnings is set, and + when a \CImg function has to display a warning message (see cimg::warn()). + + It is not recommended to throw CImgException instances by yourself, + since they are expected to be thrown only by \CImg. + When an error occurs in a library function call, \CImg may display error messages on the screen or on the + standard output, depending on the current \CImg exception mode. + The \CImg exception mode can be get and set by functions cimg::exception_mode() and + cimg::exception_mode(unsigned int). + + \par Exceptions handling + + In all cases, when an error occurs in \CImg, an instance of the corresponding exception class is thrown. + This may lead the program to break (this is the default behavior), but you can bypass this behavior by + handling the exceptions by yourself, + using a usual try { ... } catch () { ... } bloc, as in the following example: + \code + #define "CImg.h" + using namespace cimg_library; + int main() { + cimg::exception_mode(0); // Enable quiet exception mode. + try { + ... // Here, do what you want to stress CImg. + } catch (CImgException& e) { // You succeeded: something went wrong! + std::fprintf(stderr,"CImg Library Error: %s",e.what()); // Display your custom error message. + ... // Do what you want now to save the ship! + } + } + \endcode + **/ + struct CImgException : public std::exception { +#define _cimg_exception_err(etype,disp_flag) \ + std::va_list ap, ap2; \ + va_start(ap,format); va_start(ap2,format); \ + int size = cimg_vsnprintf(0,0,format,ap2); \ + if (size++>=0) { \ + delete[] _message; \ + _message = new char[size]; \ + cimg_vsnprintf(_message,size,format,ap); \ + if (cimg::exception_mode()) { \ + std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,etype,cimg::t_normal,_message); \ + if (cimg_display && disp_flag && !(cimg::exception_mode()%2)) try { cimg::dialog(etype,_message,"Abort"); } \ + catch (CImgException&) {} \ + if (cimg::exception_mode()>=3) cimg_library_suffixed::cimg::info(); \ + } \ + } \ + va_end(ap); va_end(ap2); \ + + char *_message; + CImgException() { _message = new char[1]; *_message = 0; } + CImgException(const char *const format, ...):_message(0) { _cimg_exception_err("CImgException",true); } + CImgException(const CImgException& e):std::exception(e) { + const size_t size = std::strlen(e._message); + _message = new char[size + 1]; + std::strncpy(_message,e._message,size); + _message[size] = 0; + } + ~CImgException() throw() { delete[] _message; } + CImgException& operator=(const CImgException& e) { + const size_t size = std::strlen(e._message); + _message = new char[size + 1]; + std::strncpy(_message,e._message,size); + _message[size] = 0; + return *this; + } + //! Return a C-string containing the error message associated to the thrown exception. + const char *what() const throw() { return _message; } + }; + + // The CImgAbortException class is used to throw an exception when + // a computationally-intensive function has been aborted by an external signal. + struct CImgAbortException : public std::exception { + char *_message; + CImgAbortException() { _message = new char[1]; *_message = 0; } + CImgAbortException(const char *const format, ...):_message(0) { _cimg_exception_err("CImgAbortException",true); } + CImgAbortException(const CImgAbortException& e):std::exception(e) { + const size_t size = std::strlen(e._message); + _message = new char[size + 1]; + std::strncpy(_message,e._message,size); + _message[size] = 0; + } + ~CImgAbortException() throw() { delete[] _message; } + CImgAbortException& operator=(const CImgAbortException& e) { + const size_t size = std::strlen(e._message); + _message = new char[size + 1]; + std::strncpy(_message,e._message,size); + _message[size] = 0; + return *this; + } + //! Return a C-string containing the error message associated to the thrown exception. + const char *what() const throw() { return _message; } + }; + + // The CImgArgumentException class is used to throw an exception related + // to invalid arguments encountered in a library function call. + struct CImgArgumentException : public CImgException { + CImgArgumentException(const char *const format, ...) { _cimg_exception_err("CImgArgumentException",true); } + }; + + // The CImgDisplayException class is used to throw an exception related + // to display problems encountered in a library function call. + struct CImgDisplayException : public CImgException { + CImgDisplayException(const char *const format, ...) { _cimg_exception_err("CImgDisplayException",false); } + }; + + // The CImgInstanceException class is used to throw an exception related + // to an invalid instance encountered in a library function call. + struct CImgInstanceException : public CImgException { + CImgInstanceException(const char *const format, ...) { _cimg_exception_err("CImgInstanceException",true); } + }; + + // The CImgIOException class is used to throw an exception related + // to input/output file problems encountered in a library function call. + struct CImgIOException : public CImgException { + CImgIOException(const char *const format, ...) { _cimg_exception_err("CImgIOException",true); } + }; + + // The CImgWarningException class is used to throw an exception for warnings + // encountered in a library function call. + struct CImgWarningException : public CImgException { + CImgWarningException(const char *const format, ...) { _cimg_exception_err("CImgWarningException",false); } + }; + + /*------------------------------------- + # + # Define cimg:: namespace + # + -----------------------------------*/ + //! Contains \a low-level functions and variables of the \CImg Library. + /** + Most of the functions and variables within this namespace are used by the \CImg library for low-level operations. + You may use them to access specific const values or environment variables internally used by \CImg. + \warning Never write using namespace cimg_library::cimg; in your source code. Lot of functions in the + cimg:: namespace have the same names as standard C functions that may be defined in the global + namespace ::. + **/ + namespace cimg { + + // Define traits that will be used to determine the best data type to work in CImg functions. + // + template struct type { + static const char* string() { + static const char* s[] = { "unknown", "unknown8", "unknown16", "unknown24", + "unknown32", "unknown40", "unknown48", "unknown56", + "unknown64", "unknown72", "unknown80", "unknown88", + "unknown96", "unknown104", "unknown112", "unknown120", + "unknown128" }; + return s[(sizeof(T)<17)?sizeof(T):0]; + } + static bool is_float() { return false; } + static bool is_inf(const T) { return false; } + static bool is_nan(const T) { return false; } + static T min() { return ~max(); } + static T max() { return (T)1<<(8*sizeof(T) - 1); } + static T inf() { return max(); } + static T cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(T)val; } + static const char* format() { return "%s"; } + static const char* format_s() { return "%s"; } + static const char* format(const T& val) { static const char *const s = "unknown"; cimg::unused(val); return s; } + }; + + template<> struct type { + static const char* string() { static const char *const s = "bool"; return s; } + static bool is_float() { return false; } + static bool is_inf(const bool) { return false; } + static bool is_nan(const bool) { return false; } + static bool min() { return false; } + static bool max() { return true; } + static bool inf() { return max(); } + static bool is_inf() { return false; } + static bool cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(bool)val; } + static const char* format() { return "%s"; } + static const char* format_s() { return "%s"; } + static const char* format(const bool val) { static const char* s[] = { "false", "true" }; return s[val?1:0]; } + }; + + template<> struct type { + static const char* string() { static const char *const s = "unsigned char"; return s; } + static bool is_float() { return false; } + static bool is_inf(const unsigned char) { return false; } + static bool is_nan(const unsigned char) { return false; } + static unsigned char min() { return 0; } + static unsigned char max() { return (unsigned char)-1; } + static unsigned char inf() { return max(); } + static unsigned char cut(const double val) { + return val<(double)min()?min():val>(double)max()?max():(unsigned char)val; } + static const char* format() { return "%u"; } + static const char* format_s() { return "%u"; } + static unsigned int format(const unsigned char val) { return (unsigned int)val; } + }; + +#if defined(CHAR_MAX) && CHAR_MAX==255 + template<> struct type { + static const char* string() { static const char *const s = "char"; return s; } + static bool is_float() { return false; } + static bool is_inf(const char) { return false; } + static bool is_nan(const char) { return false; } + static char min() { return 0; } + static char max() { return (char)-1; } + static char inf() { return max(); } + static char cut(const double val) { + return val<(double)min()?min():val>(double)max()?max():(unsigned char)val; } + static const char* format() { return "%u"; } + static const char* format_s() { return "%u"; } + static unsigned int format(const char val) { return (unsigned int)val; } + }; +#else + template<> struct type { + static const char* string() { static const char *const s = "char"; return s; } + static bool is_float() { return false; } + static bool is_inf(const char) { return false; } + static bool is_nan(const char) { return false; } + static char min() { return ~max(); } + static char max() { return (char)((unsigned char)-1>>1); } + static char inf() { return max(); } + static char cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(char)val; } + static const char* format() { return "%d"; } + static const char* format_s() { return "%d"; } + static int format(const char val) { return (int)val; } + }; +#endif + + template<> struct type { + static const char* string() { static const char *const s = "signed char"; return s; } + static bool is_float() { return false; } + static bool is_inf(const signed char) { return false; } + static bool is_nan(const signed char) { return false; } + static signed char min() { return ~max(); } + static signed char max() { return (signed char)((unsigned char)-1>>1); } + static signed char inf() { return max(); } + static signed char cut(const double val) { + return val<(double)min()?min():val>(double)max()?max():(signed char)val; } + static const char* format() { return "%d"; } + static const char* format_s() { return "%d"; } + static int format(const signed char val) { return (int)val; } + }; + + template<> struct type { + static const char* string() { static const char *const s = "unsigned short"; return s; } + static bool is_float() { return false; } + static bool is_inf(const unsigned short) { return false; } + static bool is_nan(const unsigned short) { return false; } + static unsigned short min() { return 0; } + static unsigned short max() { return (unsigned short)-1; } + static unsigned short inf() { return max(); } + static unsigned short cut(const double val) { + return val<(double)min()?min():val>(double)max()?max():(unsigned short)val; } + static const char* format() { return "%u"; } + static const char* format_s() { return "%u"; } + static unsigned int format(const unsigned short val) { return (unsigned int)val; } + }; + + template<> struct type { + static const char* string() { static const char *const s = "short"; return s; } + static bool is_float() { return false; } + static bool is_inf(const short) { return false; } + static bool is_nan(const short) { return false; } + static short min() { return ~max(); } + static short max() { return (short)((unsigned short)-1>>1); } + static short inf() { return max(); } + static short cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(short)val; } + static const char* format() { return "%d"; } + static const char* format_s() { return "%d"; } + static int format(const short val) { return (int)val; } + }; + + template<> struct type { + static const char* string() { static const char *const s = "unsigned int"; return s; } + static bool is_float() { return false; } + static bool is_inf(const unsigned int) { return false; } + static bool is_nan(const unsigned int) { return false; } + static unsigned int min() { return 0; } + static unsigned int max() { return (unsigned int)-1; } + static unsigned int inf() { return max(); } + static unsigned int cut(const double val) { + return val<(double)min()?min():val>(double)max()?max():(unsigned int)val; } + static const char* format() { return "%u"; } + static const char* format_s() { return "%u"; } + static unsigned int format(const unsigned int val) { return val; } + }; + + template<> struct type { + static const char* string() { static const char *const s = "int"; return s; } + static bool is_float() { return false; } + static bool is_inf(const int) { return false; } + static bool is_nan(const int) { return false; } + static int min() { return ~max(); } + static int max() { return (int)((unsigned int)-1>>1); } + static int inf() { return max(); } + static int cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(int)val; } + static const char* format() { return "%d"; } + static const char* format_s() { return "%d"; } + static int format(const int val) { return val; } + }; + + template<> struct type { + static const char* string() { static const char *const s = "unsigned int64"; return s; } + static bool is_float() { return false; } + static bool is_inf(const cimg_uint64) { return false; } + static bool is_nan(const cimg_uint64) { return false; } + static cimg_uint64 min() { return 0; } + static cimg_uint64 max() { return (cimg_uint64)-1; } + static cimg_uint64 inf() { return max(); } + static cimg_uint64 cut(const double val) { + return val<(double)min()?min():val>(double)max()?max():(cimg_uint64)val; } + static const char* format() { return cimg_fuint64; } + static const char* format_s() { return cimg_fuint64; } + static unsigned long format(const cimg_uint64 val) { return (unsigned long)val; } + }; + + template<> struct type { + static const char* string() { static const char *const s = "int64"; return s; } + static bool is_float() { return false; } + static bool is_inf(const cimg_int64) { return false; } + static bool is_nan(const cimg_int64) { return false; } + static cimg_int64 min() { return ~max(); } + static cimg_int64 max() { return (cimg_int64)((cimg_uint64)-1>>1); } + static cimg_int64 inf() { return max(); } + static cimg_int64 cut(const double val) { + return val<(double)min()?min():val>(double)max()?max():(cimg_int64)val; + } + static const char* format() { return cimg_fint64; } + static const char* format_s() { return cimg_fint64; } + static long format(const long val) { return (long)val; } + }; + + template<> struct type { + static const char* string() { static const char *const s = "double"; return s; } + static bool is_float() { return true; } + static bool is_inf(const double val) { +#ifdef isinf + return (bool)isinf(val); +#else + return !is_nan(val) && (val::min() || val>cimg::type::max()); +#endif + } + static bool is_nan(const double val) { // Custom version that works with '-ffast-math' + if (sizeof(double)==8) { + cimg_uint64 u; + std::memcpy(&u,&val,sizeof(double)); + return ((unsigned int)(u>>32)&0x7fffffff) + ((unsigned int)u!=0)>0x7ff00000; + } +#ifdef isnan + return (bool)isnan(val); +#else + return !(val==val); +#endif + } + static double min() { return -DBL_MAX; } + static double max() { return DBL_MAX; } + static double inf() { +#ifdef INFINITY + return (double)INFINITY; +#else + return max()*max(); +#endif + } + static double nan() { +#ifdef NAN + return (double)NAN; +#else + const double val_nan = -std::sqrt(-1.0); return val_nan; +#endif + } + static double cut(const double val) { return val; } + static const char* format() { return "%.17g"; } + static const char* format_s() { return "%g"; } + static double format(const double val) { return val; } + }; + + template<> struct type { + static const char* string() { static const char *const s = "float"; return s; } + static bool is_float() { return true; } + static bool is_inf(const float val) { +#ifdef isinf + return (bool)isinf(val); +#else + return !is_nan(val) && (val::min() || val>cimg::type::max()); +#endif + } + static bool is_nan(const float val) { // Custom version that works with '-ffast-math' + if (sizeof(float)==4) { + unsigned int u; + std::memcpy(&u,&val,sizeof(float)); + return (u&0x7fffffff)>0x7f800000; + } +#ifdef isnan + return (bool)isnan(val); +#else + return !(val==val); +#endif + } + static float min() { return -FLT_MAX; } + static float max() { return FLT_MAX; } + static float inf() { return (float)cimg::type::inf(); } + static float nan() { return (float)cimg::type::nan(); } + static float cut(const double val) { return (float)val; } + static float cut(const float val) { return (float)val; } + static const char* format() { return "%.9g"; } + static const char* format_s() { return "%g"; } + static double format(const float val) { return (double)val; } + }; + + template<> struct type { + static const char* string() { static const char *const s = "long double"; return s; } + static bool is_float() { return true; } + static bool is_inf(const long double val) { +#ifdef isinf + return (bool)isinf(val); +#else + return !is_nan(val) && (val::min() || val>cimg::type::max()); +#endif + } + static bool is_nan(const long double val) { +#ifdef isnan + return (bool)isnan(val); +#else + return !(val==val); +#endif + } + static long double min() { return -LDBL_MAX; } + static long double max() { return LDBL_MAX; } + static long double inf() { return max()*max(); } + static long double nan() { const long double val_nan = -std::sqrt(-1.0L); return val_nan; } + static long double cut(const long double val) { return val; } + static const char* format() { return "%.17g"; } + static const char* format_s() { return "%g"; } + static double format(const long double val) { return (double)val; } + }; + +#ifdef cimg_use_half + template<> struct type { + static const char* string() { static const char *const s = "half"; return s; } + static bool is_float() { return true; } + static bool is_inf(const long double val) { +#ifdef isinf + return (bool)isinf(val); +#else + return !is_nan(val) && (val::min() || val>cimg::type::max()); +#endif + } + static bool is_nan(const half val) { // Custom version that works with '-ffast-math' + if (sizeof(half)==2) { + short u; + std::memcpy(&u,&val,sizeof(short)); + return (bool)((u&0x7fff)>0x7c00); + } + return cimg::type::is_nan((float)val); + } + static half min() { return (half)-65504; } + static half max() { return (half)65504; } + static half inf() { return max()*max(); } + static half nan() { const half val_nan = (half)-std::sqrt(-1.0); return val_nan; } + static half cut(const double val) { return (half)val; } + static const char* format() { return "%.9g"; } + static const char* format_s() { return "%g"; } + static double format(const half val) { return (double)val; } + }; +#endif + + template struct superset { typedef T type; }; + template<> struct superset { typedef unsigned char type; }; + template<> struct superset { typedef char type; }; + template<> struct superset { typedef signed char type; }; + template<> struct superset { typedef unsigned short type; }; + template<> struct superset { typedef short type; }; + template<> struct superset { typedef unsigned int type; }; + template<> struct superset { typedef int type; }; + template<> struct superset { typedef cimg_uint64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef double type; }; + template<> struct superset { typedef short type; }; + template<> struct superset { typedef short type; }; + template<> struct superset { typedef unsigned short type; }; + template<> struct superset { typedef short type; }; + template<> struct superset { typedef unsigned int type; }; + template<> struct superset { typedef int type; }; + template<> struct superset { typedef cimg_uint64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef double type; }; + template<> struct superset { typedef short type; }; + template<> struct superset { typedef short type; }; + template<> struct superset { typedef int type; }; + template<> struct superset { typedef short type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef int type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef double type; }; + template<> struct superset { typedef short type; }; + template<> struct superset { typedef short type; }; + template<> struct superset { typedef int type; }; + template<> struct superset { typedef short type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef int type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef double type; }; + template<> struct superset { typedef int type; }; + template<> struct superset { typedef int type; }; + template<> struct superset { typedef int type; }; + template<> struct superset { typedef unsigned int type; }; + template<> struct superset { typedef int type; }; + template<> struct superset { typedef cimg_uint64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef double type; }; + template<> struct superset { typedef int type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef int type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef double type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef cimg_uint64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef double type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef double type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef cimg_int64 type; }; + template<> struct superset { typedef double type; }; + template<> struct superset { typedef double type; }; + template<> struct superset { typedef double type; }; + template<> struct superset { typedef double type; }; + template<> struct superset { typedef double type; }; +#ifdef cimg_use_half + template<> struct superset { typedef float type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef float type; }; + template<> struct superset { typedef double type; }; +#endif + + template struct superset2 { + typedef typename superset::type>::type type; + }; + + template struct superset3 { + typedef typename superset::type>::type type; + }; + + template struct last { typedef t2 type; }; + +#define _cimg_Tt typename cimg::superset::type +#define _cimg_Tfloat typename cimg::superset::type +#define _cimg_Ttfloat typename cimg::superset2::type +#define _cimg_Ttdouble typename cimg::superset2::type + + // Define variables used internally by CImg. +#if cimg_display==1 + struct X11_info { + unsigned int nb_wins; + pthread_t *events_thread; + pthread_cond_t wait_event; + pthread_mutex_t wait_event_mutex; + CImgDisplay **wins; + Display *display; + unsigned int nb_bits; + bool is_blue_first; + bool is_shm_enabled; + bool byte_order; +#ifdef cimg_use_xrandr + XRRScreenSize *resolutions; + Rotation curr_rotation; + unsigned int curr_resolution; + unsigned int nb_resolutions; +#endif + X11_info():nb_wins(0),events_thread(0),display(0), + nb_bits(0),is_blue_first(false),is_shm_enabled(false),byte_order(false) { +#ifdef __FreeBSD__ + XInitThreads(); +#endif + wins = new CImgDisplay*[1024]; + pthread_mutex_init(&wait_event_mutex,0); + pthread_cond_init(&wait_event,0); +#ifdef cimg_use_xrandr + resolutions = 0; + curr_rotation = 0; + curr_resolution = nb_resolutions = 0; +#endif + } + + ~X11_info() { + delete[] wins; + /* + if (events_thread) { + pthread_cancel(*events_thread); + delete events_thread; + } + if (display) { } // XCloseDisplay(display); } + pthread_cond_destroy(&wait_event); + pthread_mutex_unlock(&wait_event_mutex); + pthread_mutex_destroy(&wait_event_mutex); + */ + } + }; +#if defined(cimg_module) + X11_info& X11_attr(); +#elif defined(cimg_main) + X11_info& X11_attr() { static X11_info val; return val; } +#else + inline X11_info& X11_attr() { static X11_info val; return val; } +#endif +#define cimg_lock_display() cimg::mutex(15) +#define cimg_unlock_display() cimg::mutex(15,0) + +#elif cimg_display==2 + struct Win32_info { + HANDLE wait_event; + Win32_info() { wait_event = CreateEvent(0,FALSE,FALSE,0); } + }; +#if defined(cimg_module) + Win32_info& Win32_attr(); +#elif defined(cimg_main) + Win32_info& Win32_attr() { static Win32_info val; return val; } +#else + inline Win32_info& Win32_attr() { static Win32_info val; return val; } +#endif +#endif + + struct Mutex_info { +#if cimg_OS==2 + HANDLE mutex[32]; + Mutex_info() { for (unsigned int i = 0; i<32; ++i) mutex[i] = CreateMutex(0,FALSE,0); } + void lock(const unsigned int n) { WaitForSingleObject(mutex[n],INFINITE); } + void unlock(const unsigned int n) { ReleaseMutex(mutex[n]); } + int trylock(const unsigned int) { return 0; } +#elif defined(_PTHREAD_H) + pthread_mutex_t mutex[32]; + Mutex_info() { for (unsigned int i = 0; i<32; ++i) pthread_mutex_init(&mutex[i],0); } + void lock(const unsigned int n) { pthread_mutex_lock(&mutex[n]); } + void unlock(const unsigned int n) { pthread_mutex_unlock(&mutex[n]); } + int trylock(const unsigned int n) { return pthread_mutex_trylock(&mutex[n]); } +#else + Mutex_info() {} + void lock(const unsigned int) {} + void unlock(const unsigned int) {} + int trylock(const unsigned int) { return 0; } +#endif + }; +#if defined(cimg_module) + Mutex_info& Mutex_attr(); +#elif defined(cimg_main) + Mutex_info& Mutex_attr() { static Mutex_info val; return val; } +#else + inline Mutex_info& Mutex_attr() { static Mutex_info val; return val; } +#endif + +#if defined(cimg_use_magick) + static struct Magick_info { + Magick_info() { + Magick::InitializeMagick(""); + } + } _Magick_info; +#endif + +#if cimg_display==1 + // Define keycodes for X11-based graphical systems. + const unsigned int keyESC = XK_Escape; + const unsigned int keyF1 = XK_F1; + const unsigned int keyF2 = XK_F2; + const unsigned int keyF3 = XK_F3; + const unsigned int keyF4 = XK_F4; + const unsigned int keyF5 = XK_F5; + const unsigned int keyF6 = XK_F6; + const unsigned int keyF7 = XK_F7; + const unsigned int keyF8 = XK_F8; + const unsigned int keyF9 = XK_F9; + const unsigned int keyF10 = XK_F10; + const unsigned int keyF11 = XK_F11; + const unsigned int keyF12 = XK_F12; + const unsigned int keyPAUSE = XK_Pause; + const unsigned int key1 = XK_1; + const unsigned int key2 = XK_2; + const unsigned int key3 = XK_3; + const unsigned int key4 = XK_4; + const unsigned int key5 = XK_5; + const unsigned int key6 = XK_6; + const unsigned int key7 = XK_7; + const unsigned int key8 = XK_8; + const unsigned int key9 = XK_9; + const unsigned int key0 = XK_0; + const unsigned int keyBACKSPACE = XK_BackSpace; + const unsigned int keyINSERT = XK_Insert; + const unsigned int keyHOME = XK_Home; + const unsigned int keyPAGEUP = XK_Page_Up; + const unsigned int keyTAB = XK_Tab; + const unsigned int keyQ = XK_q; + const unsigned int keyW = XK_w; + const unsigned int keyE = XK_e; + const unsigned int keyR = XK_r; + const unsigned int keyT = XK_t; + const unsigned int keyY = XK_y; + const unsigned int keyU = XK_u; + const unsigned int keyI = XK_i; + const unsigned int keyO = XK_o; + const unsigned int keyP = XK_p; + const unsigned int keyDELETE = XK_Delete; + const unsigned int keyEND = XK_End; + const unsigned int keyPAGEDOWN = XK_Page_Down; + const unsigned int keyCAPSLOCK = XK_Caps_Lock; + const unsigned int keyA = XK_a; + const unsigned int keyS = XK_s; + const unsigned int keyD = XK_d; + const unsigned int keyF = XK_f; + const unsigned int keyG = XK_g; + const unsigned int keyH = XK_h; + const unsigned int keyJ = XK_j; + const unsigned int keyK = XK_k; + const unsigned int keyL = XK_l; + const unsigned int keyENTER = XK_Return; + const unsigned int keySHIFTLEFT = XK_Shift_L; + const unsigned int keyZ = XK_z; + const unsigned int keyX = XK_x; + const unsigned int keyC = XK_c; + const unsigned int keyV = XK_v; + const unsigned int keyB = XK_b; + const unsigned int keyN = XK_n; + const unsigned int keyM = XK_m; + const unsigned int keySHIFTRIGHT = XK_Shift_R; + const unsigned int keyARROWUP = XK_Up; + const unsigned int keyCTRLLEFT = XK_Control_L; + const unsigned int keyAPPLEFT = XK_Super_L; + const unsigned int keyALT = XK_Alt_L; + const unsigned int keySPACE = XK_space; + const unsigned int keyALTGR = XK_Alt_R; + const unsigned int keyAPPRIGHT = XK_Super_R; + const unsigned int keyMENU = XK_Menu; + const unsigned int keyCTRLRIGHT = XK_Control_R; + const unsigned int keyARROWLEFT = XK_Left; + const unsigned int keyARROWDOWN = XK_Down; + const unsigned int keyARROWRIGHT = XK_Right; + const unsigned int keyPAD0 = XK_KP_0; + const unsigned int keyPAD1 = XK_KP_1; + const unsigned int keyPAD2 = XK_KP_2; + const unsigned int keyPAD3 = XK_KP_3; + const unsigned int keyPAD4 = XK_KP_4; + const unsigned int keyPAD5 = XK_KP_5; + const unsigned int keyPAD6 = XK_KP_6; + const unsigned int keyPAD7 = XK_KP_7; + const unsigned int keyPAD8 = XK_KP_8; + const unsigned int keyPAD9 = XK_KP_9; + const unsigned int keyPADADD = XK_KP_Add; + const unsigned int keyPADSUB = XK_KP_Subtract; + const unsigned int keyPADMUL = XK_KP_Multiply; + const unsigned int keyPADDIV = XK_KP_Divide; + +#elif cimg_display==2 + // Define keycodes for Windows. + const unsigned int keyESC = VK_ESCAPE; + const unsigned int keyF1 = VK_F1; + const unsigned int keyF2 = VK_F2; + const unsigned int keyF3 = VK_F3; + const unsigned int keyF4 = VK_F4; + const unsigned int keyF5 = VK_F5; + const unsigned int keyF6 = VK_F6; + const unsigned int keyF7 = VK_F7; + const unsigned int keyF8 = VK_F8; + const unsigned int keyF9 = VK_F9; + const unsigned int keyF10 = VK_F10; + const unsigned int keyF11 = VK_F11; + const unsigned int keyF12 = VK_F12; + const unsigned int keyPAUSE = VK_PAUSE; + const unsigned int key1 = '1'; + const unsigned int key2 = '2'; + const unsigned int key3 = '3'; + const unsigned int key4 = '4'; + const unsigned int key5 = '5'; + const unsigned int key6 = '6'; + const unsigned int key7 = '7'; + const unsigned int key8 = '8'; + const unsigned int key9 = '9'; + const unsigned int key0 = '0'; + const unsigned int keyBACKSPACE = VK_BACK; + const unsigned int keyINSERT = VK_INSERT; + const unsigned int keyHOME = VK_HOME; + const unsigned int keyPAGEUP = VK_PRIOR; + const unsigned int keyTAB = VK_TAB; + const unsigned int keyQ = 'Q'; + const unsigned int keyW = 'W'; + const unsigned int keyE = 'E'; + const unsigned int keyR = 'R'; + const unsigned int keyT = 'T'; + const unsigned int keyY = 'Y'; + const unsigned int keyU = 'U'; + const unsigned int keyI = 'I'; + const unsigned int keyO = 'O'; + const unsigned int keyP = 'P'; + const unsigned int keyDELETE = VK_DELETE; + const unsigned int keyEND = VK_END; + const unsigned int keyPAGEDOWN = VK_NEXT; + const unsigned int keyCAPSLOCK = VK_CAPITAL; + const unsigned int keyA = 'A'; + const unsigned int keyS = 'S'; + const unsigned int keyD = 'D'; + const unsigned int keyF = 'F'; + const unsigned int keyG = 'G'; + const unsigned int keyH = 'H'; + const unsigned int keyJ = 'J'; + const unsigned int keyK = 'K'; + const unsigned int keyL = 'L'; + const unsigned int keyENTER = VK_RETURN; + const unsigned int keySHIFTLEFT = VK_SHIFT; + const unsigned int keyZ = 'Z'; + const unsigned int keyX = 'X'; + const unsigned int keyC = 'C'; + const unsigned int keyV = 'V'; + const unsigned int keyB = 'B'; + const unsigned int keyN = 'N'; + const unsigned int keyM = 'M'; + const unsigned int keySHIFTRIGHT = VK_SHIFT; + const unsigned int keyARROWUP = VK_UP; + const unsigned int keyCTRLLEFT = VK_CONTROL; + const unsigned int keyAPPLEFT = VK_LWIN; + const unsigned int keyALT = VK_LMENU; + const unsigned int keySPACE = VK_SPACE; + const unsigned int keyALTGR = VK_CONTROL; + const unsigned int keyAPPRIGHT = VK_RWIN; + const unsigned int keyMENU = VK_APPS; + const unsigned int keyCTRLRIGHT = VK_CONTROL; + const unsigned int keyARROWLEFT = VK_LEFT; + const unsigned int keyARROWDOWN = VK_DOWN; + const unsigned int keyARROWRIGHT = VK_RIGHT; + const unsigned int keyPAD0 = 0x60; + const unsigned int keyPAD1 = 0x61; + const unsigned int keyPAD2 = 0x62; + const unsigned int keyPAD3 = 0x63; + const unsigned int keyPAD4 = 0x64; + const unsigned int keyPAD5 = 0x65; + const unsigned int keyPAD6 = 0x66; + const unsigned int keyPAD7 = 0x67; + const unsigned int keyPAD8 = 0x68; + const unsigned int keyPAD9 = 0x69; + const unsigned int keyPADADD = VK_ADD; + const unsigned int keyPADSUB = VK_SUBTRACT; + const unsigned int keyPADMUL = VK_MULTIPLY; + const unsigned int keyPADDIV = VK_DIVIDE; + +#else + // Define random keycodes when no display is available. + // (should rarely be used then!). + const unsigned int keyESC = 1U; //!< Keycode for the \c ESC key (architecture-dependent). + const unsigned int keyF1 = 2U; //!< Keycode for the \c F1 key (architecture-dependent). + const unsigned int keyF2 = 3U; //!< Keycode for the \c F2 key (architecture-dependent). + const unsigned int keyF3 = 4U; //!< Keycode for the \c F3 key (architecture-dependent). + const unsigned int keyF4 = 5U; //!< Keycode for the \c F4 key (architecture-dependent). + const unsigned int keyF5 = 6U; //!< Keycode for the \c F5 key (architecture-dependent). + const unsigned int keyF6 = 7U; //!< Keycode for the \c F6 key (architecture-dependent). + const unsigned int keyF7 = 8U; //!< Keycode for the \c F7 key (architecture-dependent). + const unsigned int keyF8 = 9U; //!< Keycode for the \c F8 key (architecture-dependent). + const unsigned int keyF9 = 10U; //!< Keycode for the \c F9 key (architecture-dependent). + const unsigned int keyF10 = 11U; //!< Keycode for the \c F10 key (architecture-dependent). + const unsigned int keyF11 = 12U; //!< Keycode for the \c F11 key (architecture-dependent). + const unsigned int keyF12 = 13U; //!< Keycode for the \c F12 key (architecture-dependent). + const unsigned int keyPAUSE = 14U; //!< Keycode for the \c PAUSE key (architecture-dependent). + const unsigned int key1 = 15U; //!< Keycode for the \c 1 key (architecture-dependent). + const unsigned int key2 = 16U; //!< Keycode for the \c 2 key (architecture-dependent). + const unsigned int key3 = 17U; //!< Keycode for the \c 3 key (architecture-dependent). + const unsigned int key4 = 18U; //!< Keycode for the \c 4 key (architecture-dependent). + const unsigned int key5 = 19U; //!< Keycode for the \c 5 key (architecture-dependent). + const unsigned int key6 = 20U; //!< Keycode for the \c 6 key (architecture-dependent). + const unsigned int key7 = 21U; //!< Keycode for the \c 7 key (architecture-dependent). + const unsigned int key8 = 22U; //!< Keycode for the \c 8 key (architecture-dependent). + const unsigned int key9 = 23U; //!< Keycode for the \c 9 key (architecture-dependent). + const unsigned int key0 = 24U; //!< Keycode for the \c 0 key (architecture-dependent). + const unsigned int keyBACKSPACE = 25U; //!< Keycode for the \c BACKSPACE key (architecture-dependent). + const unsigned int keyINSERT = 26U; //!< Keycode for the \c INSERT key (architecture-dependent). + const unsigned int keyHOME = 27U; //!< Keycode for the \c HOME key (architecture-dependent). + const unsigned int keyPAGEUP = 28U; //!< Keycode for the \c PAGEUP key (architecture-dependent). + const unsigned int keyTAB = 29U; //!< Keycode for the \c TAB key (architecture-dependent). + const unsigned int keyQ = 30U; //!< Keycode for the \c Q key (architecture-dependent). + const unsigned int keyW = 31U; //!< Keycode for the \c W key (architecture-dependent). + const unsigned int keyE = 32U; //!< Keycode for the \c E key (architecture-dependent). + const unsigned int keyR = 33U; //!< Keycode for the \c R key (architecture-dependent). + const unsigned int keyT = 34U; //!< Keycode for the \c T key (architecture-dependent). + const unsigned int keyY = 35U; //!< Keycode for the \c Y key (architecture-dependent). + const unsigned int keyU = 36U; //!< Keycode for the \c U key (architecture-dependent). + const unsigned int keyI = 37U; //!< Keycode for the \c I key (architecture-dependent). + const unsigned int keyO = 38U; //!< Keycode for the \c O key (architecture-dependent). + const unsigned int keyP = 39U; //!< Keycode for the \c P key (architecture-dependent). + const unsigned int keyDELETE = 40U; //!< Keycode for the \c DELETE key (architecture-dependent). + const unsigned int keyEND = 41U; //!< Keycode for the \c END key (architecture-dependent). + const unsigned int keyPAGEDOWN = 42U; //!< Keycode for the \c PAGEDOWN key (architecture-dependent). + const unsigned int keyCAPSLOCK = 43U; //!< Keycode for the \c CAPSLOCK key (architecture-dependent). + const unsigned int keyA = 44U; //!< Keycode for the \c A key (architecture-dependent). + const unsigned int keyS = 45U; //!< Keycode for the \c S key (architecture-dependent). + const unsigned int keyD = 46U; //!< Keycode for the \c D key (architecture-dependent). + const unsigned int keyF = 47U; //!< Keycode for the \c F key (architecture-dependent). + const unsigned int keyG = 48U; //!< Keycode for the \c G key (architecture-dependent). + const unsigned int keyH = 49U; //!< Keycode for the \c H key (architecture-dependent). + const unsigned int keyJ = 50U; //!< Keycode for the \c J key (architecture-dependent). + const unsigned int keyK = 51U; //!< Keycode for the \c K key (architecture-dependent). + const unsigned int keyL = 52U; //!< Keycode for the \c L key (architecture-dependent). + const unsigned int keyENTER = 53U; //!< Keycode for the \c ENTER key (architecture-dependent). + const unsigned int keySHIFTLEFT = 54U; //!< Keycode for the \c SHIFTLEFT key (architecture-dependent). + const unsigned int keyZ = 55U; //!< Keycode for the \c Z key (architecture-dependent). + const unsigned int keyX = 56U; //!< Keycode for the \c X key (architecture-dependent). + const unsigned int keyC = 57U; //!< Keycode for the \c C key (architecture-dependent). + const unsigned int keyV = 58U; //!< Keycode for the \c V key (architecture-dependent). + const unsigned int keyB = 59U; //!< Keycode for the \c B key (architecture-dependent). + const unsigned int keyN = 60U; //!< Keycode for the \c N key (architecture-dependent). + const unsigned int keyM = 61U; //!< Keycode for the \c M key (architecture-dependent). + const unsigned int keySHIFTRIGHT = 62U; //!< Keycode for the \c SHIFTRIGHT key (architecture-dependent). + const unsigned int keyARROWUP = 63U; //!< Keycode for the \c ARROWUP key (architecture-dependent). + const unsigned int keyCTRLLEFT = 64U; //!< Keycode for the \c CTRLLEFT key (architecture-dependent). + const unsigned int keyAPPLEFT = 65U; //!< Keycode for the \c APPLEFT key (architecture-dependent). + const unsigned int keyALT = 66U; //!< Keycode for the \c ALT key (architecture-dependent). + const unsigned int keySPACE = 67U; //!< Keycode for the \c SPACE key (architecture-dependent). + const unsigned int keyALTGR = 68U; //!< Keycode for the \c ALTGR key (architecture-dependent). + const unsigned int keyAPPRIGHT = 69U; //!< Keycode for the \c APPRIGHT key (architecture-dependent). + const unsigned int keyMENU = 70U; //!< Keycode for the \c MENU key (architecture-dependent). + const unsigned int keyCTRLRIGHT = 71U; //!< Keycode for the \c CTRLRIGHT key (architecture-dependent). + const unsigned int keyARROWLEFT = 72U; //!< Keycode for the \c ARROWLEFT key (architecture-dependent). + const unsigned int keyARROWDOWN = 73U; //!< Keycode for the \c ARROWDOWN key (architecture-dependent). + const unsigned int keyARROWRIGHT = 74U; //!< Keycode for the \c ARROWRIGHT key (architecture-dependent). + const unsigned int keyPAD0 = 75U; //!< Keycode for the \c PAD0 key (architecture-dependent). + const unsigned int keyPAD1 = 76U; //!< Keycode for the \c PAD1 key (architecture-dependent). + const unsigned int keyPAD2 = 77U; //!< Keycode for the \c PAD2 key (architecture-dependent). + const unsigned int keyPAD3 = 78U; //!< Keycode for the \c PAD3 key (architecture-dependent). + const unsigned int keyPAD4 = 79U; //!< Keycode for the \c PAD4 key (architecture-dependent). + const unsigned int keyPAD5 = 80U; //!< Keycode for the \c PAD5 key (architecture-dependent). + const unsigned int keyPAD6 = 81U; //!< Keycode for the \c PAD6 key (architecture-dependent). + const unsigned int keyPAD7 = 82U; //!< Keycode for the \c PAD7 key (architecture-dependent). + const unsigned int keyPAD8 = 83U; //!< Keycode for the \c PAD8 key (architecture-dependent). + const unsigned int keyPAD9 = 84U; //!< Keycode for the \c PAD9 key (architecture-dependent). + const unsigned int keyPADADD = 85U; //!< Keycode for the \c PADADD key (architecture-dependent). + const unsigned int keyPADSUB = 86U; //!< Keycode for the \c PADSUB key (architecture-dependent). + const unsigned int keyPADMUL = 87U; //!< Keycode for the \c PADMUL key (architecture-dependent). + const unsigned int keyPADDIV = 88U; //!< Keycode for the \c PADDDIV key (architecture-dependent). +#endif + + const double PI = 3.14159265358979323846; //!< Value of the mathematical constant PI + + // Define a 12x13 font (small size). + static const char *const data_font12x13 = + " .wjwlwmyuw>wjwkwbwjwkwRxuwmwjwkwmyuwJwjwlx`w Fw " + " mwlwlwuwnwuynwuwmyTwlwkwuwmwuwnwlwkwuwmwuw_wuxlwlwkwuwnwuynwuwTwlwlwtwnwtwnw my Qw +wlw b" + "{ \\w Wx`xTw_w[wbxawSwkw nynwkyw bwswcw" + "kwuwjwuwozpwtwuwnwtwowkwjwmwuwuwkwIxmxuxowuwmwswowswmxnwjwhwowswowsw0wmwowswuwnwrwowswpwswowkwjwrwqw" + "rwpwkwkwtwnwkxsxqxswowswpwswnwswpwswowrwnwmwrwqwqwqwswswrwswowswjwpwlxjwkxuxLw[wcw_wSwkw mw\"wlwiw=wt" + "wmxlwFw cwswnwuwnwkwjwswo{pwrwpwtwtwpwswby`w`yUwlwtwpwqwpwswowlw\\wrwrxuwHwrwfwuwjwlwlwTyuwVwlwtwawsw" + "owswowswcwuwmwuwmwuwmwuwmwuwlwkwuwnwswpwkwkwkwkwkwkwkwkwswoxswowswowswowswowswowswowrwpwswpwrwpwrwpw" + "rwpwrwpwswoznwtw Ww (wGwtwtwqwqwqwuwuwuwqwswuwqwqw=wqxtw`{nzp~q{ozowrwnxmwtwow bzawkwuwl}rwuwnwtwuw" + "nwtwowkwjwlyjwIwlwswmwiwkwnwuwnwkwhwnwswowswowkwewewixnwsytwswuwnwrwpwkwrwpwkwkwkwrwpwkwkwuwmwkxsxqw" + "uwtwpwqwqwswowqwqwswowiwmwrwpwswowtwtwpwuwmwuwjwowkwjwlxsxXynzmymznyozlzoznwkwkwtwnwkzuyrzmynzmzowux" + "myozmwswpwrwowtwtwrwrwpwrwp{mwlwiwHyuwpwtwkwmxlynzoxswmwmwswnwswowtxq|owtwtwpym{p{owswnwuwmwlwkwqwqx" + "uwuxqwrwpwtwtwqwqwowlwuwuwkwmwlwtwowuwuwdwjznwl{nwuwnwkx_wtxtwswtwlwtwWwuytwgyjwmwjwawswoyuwVwlwtwnw" + "twmwtwnwtwmwuwmwlwuwmwuwmwuwmwuwmwuwmwuwmxuwowkwkwkwkwkwkwkwkwkwrwpwuwtwpwqwqwqwqwqwqwqwqwqwowtwpwsw" + "uwqwrwpwrwpwrwpwrwowuwnwswowuwlymymymymymymyuyqymymymymynwkwkwkwjynzmymymymymykwmzowswowswowswowswpw" + "rwozowrwW}q}qwtwtwqwtwtwqwtwtwA}rwuw_{p~r~r}pwtwowrwnxmwtwow aw_w]wtwpwuwmxuwmybwjwlyjwIwlwswmwiwnyn" + "wtwnznzkwmynwswTyp}pylwmwtwtwtwswuwn{owkwrwp{o{owk|pwkwkxlwkwuwuwuwqwuwtwpwqwqwswowqwqwswoykwmwrwpws" + "wowuwuwuwowkwjwnwkwjwDwowswowkwswowswowkwswowswowkwkwuwmwkwswswswswowswowswowswoxlwswowkwswpwrwowtwt" + "wqwtwowrwlwoxkwhxVxuxpwtypwuwjwnwtwnwkwswowtxnxmwswowqwqwtwuxqwtwnwtwtwqwswowswmwm{nwuwlxnwkwqwqwtwt" + "wqwrwpwtwtwqwuyuwpwiwhwnwmwrwnwbwkwuwlwlwswoxuxowlwtw`wuwrwszmwtwo}dwuwtwuw[}qymx`wswoyuwow_ylxlwtwo" + "yuwoyuwoyuwmwlwuwmwuwmwuwmwuwmwuwmwuwmwt{swk{o{o{o{owkwkwkwlztwpwuwtwpwqwqwqwqwqwqwqwqwqwnxowtwtwqwr" + "wpwrwpwrwpwrwnwmwswowuwiwkwkwkwkwkwkwswswkwswowswowswowswowkwkwkwkwswowswowswowswowswowswowswcwtxows" + "wowswowswowswpwrwowswpwrwWwtwtwqwqwqwuwuwuwqwuwswqwqw>wowuw`}q~q|q}qwrwpwrwowtwnwtwo~ izaw]wtwoykwux" + "qwtwswfwjwmwuwuwn}eyaxlwswmwjwjwpwswjwowswmwmwswnzWy]ypwlwtwtwuwswswowrwpwkwrwpwkwkwsyqwrwpwkwkwuwmw" + "kwuwuwuwqwtwuwpwqwqznwqwqzkynwmwrwowuwnwuwuwuwowkwjwnwkxkwGzowswowkwswo{owkwswowswowkwkxlwkwswswswsw" + "owswowswowswowjxmwkwswowtwnwuwuwuwpxmwtwlwlwlwiwlytwewtwtwqwswowtxoznwswnxmwswnwuwmwuwnwswowtwtwqwtw" + "twqwtwnwtwtwqwswowswmwmwswowswmwmwkwqwqwtwtwqwrwowuwuwpwuyuwq~own~own~owbwkwuwmznwswmwbwswawuwrwgwtw" + "hwdwuytwXwJwswnxuw=wtwmwswowtxowswqxmwswowswowswowswowswowswnwtwowkwkwkwkwkwkwkwkwkwrwpwtwuwpwqwqwqw" + "qwqwqwqwqwqwnxowtwtwqwrwpwrwpwrwpwrwnwmwswowtwmznznznznznzn~swk{o{o{o{owkwkwkwkwswowswowswowswowswow" + "swowswo}qwuwuwowswowswowswowswowtwnwswowtwUwuwuwowswowswowswowsw@}qx`}q~pzo{pwrwpwrwowtwnwtwow aw_w_" + "}owuwmwuwtwrwswuwewjwkwiwJwkwswmwkwiwp|kwowswmwmwswkwWym}mypwlwszr{owrwpwkwrwpwkwkwqwqwrwpwkwkwtwnwk" + "wtwtwqwtwuwpwqwqwkwqwqwtwiwnwmwrwowuwnwuwuwuwpwuwlwkwmwjwkwHwswowswowkwswowkwkwswowswowkwkwuwmwkwsws" + "wswswowswowswowswowhwnwkwswowtwnwuwuwuwpxmwtwmwkwlwiwmwtydwtwtwqwswowswowtwnwswowkwswnwuwnwtwnwswowt" + "wtwqwtwtwqwtwnwtwtwqwswowswmwmwswowswnwlwkwqwqxuwuxqwrwnyowqwpwiwhwpwuwuwowrwpwuwuwdwkwuwlwlwswo{owk" + "xuwawtxtwszmwtwiwdwuwtwuwXwJwswmwuwKzmwtwlwtxowrwpwtxrxl{o{o{o{o{o{o{owkwkwkwkwkwkwkwkwkwrwpwtwuwpwq" + "wqwqwqwqwqwqwqwqwowtwpwuwswqwrwpwrwpwrwpwrwnwmznwswowswowswowswowswowswowswowswowkwkwkwkwkwkwkwkwkws" + "wowswowswowswowswowswowswcwuwuwowswowswowswowswowtwnwswowtwTymymymymy=wmw^wuwuwmxlxmyowrwowtwnwtwmxm" + "w bwswIwuwmwuwmwuwtwrxswdwjw]wJwkxuxmwlwlwswlwjwowswmwmwswlwSycyawlwswowrwowswpwswowkwjwrwqwrwpwkwkw" + "swowkwqwqwsxowswpwjwswpwswowrwnwmxtxnwlwswpwswmwlwlwjwkwHwswowswowkwswowswowkwswowswowkwkwtwnwkwswsw" + "swswowswowswowswowkwswowkwswnxlwswpwtwmxmwjwlwiwTxuxpwtxowswowtwnwswowkwswnynwtwnwswowtwtwqxuwuxqwtw" + "nwtwtwqwswowswmwlwuwnwswowkwjwswo{pwrwmwmwswnwjwiwnymwtwnycwkwuwlwl{mwmwiw_wrwdwtwVwrw*wswmwuw?wtwlw" + "tzqwrwpwtzswkwswowswowswowswowswowswowswnwswpwkwkwkwkwkwkwkwkwswowsxowswowswowswowswowswowrwpwswpxtx" + "pxtxpxtxpxtxnwmwkwswowswowswowswowswowswowswowtxowkwswowswowswowswowkwkwkwkwswowswowswowswowswowswow" + "swlwnxtwowswowswowswowswnxmwswnx >wlw\\wkx`wnwrwoznwtwmxl| gybw^wtwozmwsxpzuxfxlx]wnw_wlxjyn{o{nykwnz" + "mymwkynymwkwewewjwjwrwswqwp{myozn{owizpwrwpwkwkwrwp{owqwqwsxnyowiyowrwozmwlzmwlwswqxsxnwm}qwjxlwGzoz" + "mymznynwjzowswowkwkwswowkwswswswswnynzmzowjymxlznxlwswqwrwnwm{mwlwiwHxuxpzmxlymynwswmwnwrwozmxuxo{pw" + "txn{pzmykwmyo}p{owkyuynwnwrwmwly`w_w_wbwjzo{pwqwnwmwhw_z>zY}M|nwuw2wqwqwryrwqwqyowqwqwqwqwqwqwqwqwqw" + "qwqwqwr{qyo{o{o{o{owkwkwkwkznwsxnymymymymycwuynznznznzmwmwkwuynznznznznznznyuzrymymymymynwkwkwkwjynw" + "swnymymymymybzmznznznznwlzmw hwHwlwSwTw {+qnrmqapmp Kpepgpiuhpephscqfqhqfqhqfqhqfqhqfqhqfqhqixgudxdxdxdxdq]q]q]q]wcqjr" + "bt`t`t`t`taphpgplt`s_s_s_s_q`q]qmsctnqctnqctnqctnqctnqctnqbsktgs_uauauaucq]q]q]q[saqjqbs_s_s_s_sNpms" + "_snqbsnqbsnqbsnqaq`qns_q !p Zp jp#q\\q6q7q lq [sjq Qq -q OqZq]q Cq;q HqWq $rIq`qZq _q iqbqK" + "qFqIq`q hp$q]u JqYpmpLp .p jp ]p Xr`q[r !p Tp\"p\\p6q6q mq Yx Qr -r Ps\\q_s" + " Ipkq:q HqWq $qHq`qZq _q iqbqKqFqIq`q hp$q]t IqYpmpLq /q kq Fq_q[q #s Tp\"q" + "^q6p 1p Vu Rs YsJsMy &v])]2_4^U^ 6^T\\5])]1_2]T\\8^U^ K])]2`4^V^3] " + " " + " U]*\\2a4`V\\8^U^5a F]*\\1\\X\\4^U^=]*\\" + "2a5^U^ 7aV\\4]*\\1a4`V\\8^U^ J]*\\1\\X\\4^V^3\\ " + " " + " S],\\1\\W\\5g8^U^6c F],\\1\\V\\5^U^<],\\2]W]6^U^" + " 8h3],\\0\\W\\5g8^U^ I],\\1\\V\\5^V^4\\ ;] " + " " + " :\\-]2\\U\\6\\V`7^U^7]U] F\\-]2\\T\\6^U^;\\-]3]U]7^U^ 8\\" + "Va1\\-]1\\U\\6\\V`7^U^ H\\-]2\\T\\6^V^5] =a J] " + " " + " N\\/]2\\S\\7\\T]6^U^7\\S\\ E\\/]2\\R\\7^U^:\\/]3]S]8^U^" + " 8\\T^/\\/]1\\S\\7\\T]6^U^ G\\/]2\\R\\7^V^6] =c L^ " + " *^ U` " + " O^ )\\S\\ !^$^3\\ E]" + "U\\ K^$^4^ G^$^4] J^$^3\\ #^$^3\\ 4^ B[ " + " &^ Xe " + " S^ (\\S\\ )Z Q^&^3^2]S\\ A\\S\\ K^&^3^ F^&^4_ >]S" + "\\9^&^3^2]S\\ W^&^3^ 6^ Q] M[ ?` ![1^H]?` =]4](\\ %` >b4c Bb " + "?`2a .a Ib Pb Aa `0`*^ $^.` <^F]F^F]G`G] " + " F\\S\\ ;b %a2a2a2a2a a:].a !^T_ Bg ` Dd2_8n?" + "m7g3]:rD]P]P]@g <] 8] 8] B] 3e J^K^ If7^U^+b@d Fb@f5a Ad4e-] :f Ra0d AaF\\HaF\\HeJ\\?]._0_" + "0_0_0_2\\U\\0tHh@n?n?n?n?].].].]-h:_J]w " + "P[ 9[/a:aQa7[ Wl \"h E]1]T]+\\R\\;[4dL]Ag=])]2])\\ U^1f8c8k;j1`;k7h?n;h9g 5i*b:_" + "8k6kBl=n?l7mD]H]C].].]L_A].`I`H`K]>kAj6kAj9kBuB]H]F]E]E^L_L^R^L^D^I^BrBb7^+b(a D] ;] '] Gd" + " A].].].].] ;] (b:].b #^Q] Dj !a Ff3_8n?m8i4]:rD]P]P]Bk ?_ 9] 9_ C]&[0f " + "I]K]=]0g7^U^-fC\\S] IfBf6c B[S]5[S].] `K]>k]*]3]W]6^U^._V_;]Wa5]*]2\\V\\6]Wa7^V^ I]*]2\\V\\5^V^2]7]+^V^ @]W\\=v P[ 9\\1c_8m:`R`Cn?n?l9`QaE]H]C].].]M_@].aKaH`K]?`S`Bk8`S`Bk;_R_BuB]H]F]E]D]MaM]P]L]B^K^ArB]1]&])" + "c D] <] '] G] :].].].].] ;] (^6]*^ #]P^ E^P\\ V^ H^T^4_8n?m:`S`6]:rD]P]P" + "]C`S` Aa :] :a D]&[1^S\\ I^M^=]0^R[7^U^/^R^EZO\\ L^R^ N]U] :],\\0] \\H]B\\H]=\\M]>" + "]._0_0_0_0_0_/uK`R`Cn?n?n?n?].].].]-n@`K]?`S`>`S`>`S`>`S`>`S` H`ScE]H]C]H]C]H]C]H]E^K^@],^" + "T^5],]1\\V\\6\\U`7^V^6]U\\ F],]2\\T\\6^U^=],]2\\U\\6^U^-e9\\U`4],]1\\V\\6\\U`7^V^ H],]1\\V\\5^V^3]6]+^" + "V^ B`1`1`1`1`6]W]>u P[ 9]2e>eUf;^ %q $^O\\ F]1]T],]S];[5]T]N\\@]P[=]*]0]2ZR\\RZ $" + "]2]P]<_W]8]N]\\H\\A\\H\\<\\M\\=]/a2a2a2a2a1_/]V];_M]C].].].].].].].]" + "-]ObBaL]@^M^@^M^@^M^@^M^@^M^ J^N`D]H]C]H]C]H]C]H]E^K^@]-^Q]5].]1\\T\\7\\S]6^V^5c E].]2]S\\7^U" + "^<].]2\\S\\7^U^,a6\\S]2].]1\\T\\7\\S]6^V^ G].]1\\T\\6^V^4]5]+^V^ De6e6e6e6e9\\U\\>u P[ :_3f@gVf<" + "_ &r $]M[ F]1]T],\\R]>d<^T^P]A^OZ=]+].]4]T\\T] &^3^P^=[S]8[K].]4\\X];],]!]<]N]>^O^ " + " 8ZM^3`P`Ba9]M^=^J\\C]K_B].],^H\\E]H]C].].]O_>].aKaHaL]A^K^D]N^<^K^D]N^>]JZ6]6]H]E]G]C]MaM]" + "O^P^@^M^-^A]1]&]+_W_ D] >] '] H] 9] B].] ;] )]4](] %]N]:c6] G] J^P^7a8" + "_1],^K^;c=]H]D]P]P]E^K^ Ee <] " + "\\I]A\\I]<\\N]=]/a2a2a2a2a2a1]U]<^J\\C].].].].].].].]-]K_CaL]A^K^B^K^B^K^B^K^B^K^ K]K^D]H]C]H]" + "C]H]C]H]D^M^?]-]P]4]0]1\\R\\ Ha C]0]2]R] E]0]2\\Q\\ 9c 9]0]1\\R\\ !]0]1\\R\\ ?]4] Di:i:i:i:i" + ";\\6]G] P\\ :`5g@gWh>a (_ J]KZ F]1]T],\\R\\?h>]R]P\\@]1]+].]3^V\\V^.] T]2]N]5]8ZJ]-]" + "6]X];]-]!^=]L]?]M] *]5_J_Ec:]L^>]H[C]I^C].],]F[E]H]C].].]P_=].]X]M]X]HbM]A]I]D]M]<]I]D]" + "M]?]%]6]H]E]G]C^NaN^N]Q^>^O^-^@]0]'],_U_ &] '] H] 9] B].] ;] )]4](] %]N]:d7] " + " F] K]N]8c8^1],]I]>i@]H]D]P]P]E]I] Fg =] =g G]&[2] <]O];]1] 1\\F\\=\\ Q\\F\\ S\\Q\\+]3\\." + "] IeU\\ M\\3\\N\\ ?\\I\\@\\I\\=]M\\<]0c4c4c4c4c3a1]U]<]H[C].].].].].].].]-]J_DbM]A]I]B]I]B]I]B]I]" + "B]I] L]J_E]H]C]H]C]H]C]H]C^O^>].]N] .] '`X_ I] FbWa=bWa=bWa=bWa=bWa<" + "\\6^I^ ?Z2[ :a5gAiXh?c *^ H] 7]1]T]-]S]Aj>]R]Q]@]1],],\\1^X\\X^,] T]3]L]6]'].]7]W]" + ";]-]!]<]L]?]M^ +]6^F^F]W]:]K]?]FZC]H^D].]-]DZE]H]C].].]Q_<].]X]M]X]H]X]M]B]G]E]M^>]G]E]" + "M^@]%]6]H]E^I^B]O^X]O]M^R^=]O^-^@]0]']-_S_ '] '] H] 9] B].] ;] )]4](] %]N]:e8" + "_ H] L]M]8]W]7^2]-]G]AmB]H]D]P]P]F]G] Hi >] >i J[3] ;^Q^;]1] 2\\RbT\\Ge R\\VdR\\ T\\" + "Q\\+]4\\2a IfU\\ M\\3\\N\\ ?\\J\\?\\J\\AaM\\ G]W]4]W]4]W]4]W]4]W]4c3^U]=]FZC].].].].].].].]-]H]D]X]" + "M]B]G]D]G]D]G]D]G]D]G]A[H[B]J`E]H]C]H]C]H]C]H]B]O^>g8]N] 1]T_ 3[ 9] " + "G_O^?_O^?_O^?_O^?_O^=\\5]I^ @\\3[ ;c6gAy?d7`8]L]7^7]L]>^ H] 6]1]T]-]S]B_W[U]>]R]R]?]1" + "],],]0d*] T]3]L]6]'].]7\\V];].] ]<]L]@]K] 7Z PZ X]7^D^G]W]:]K]?]/]G]D].]-]/]H]C].].]R_;]" + ".]X^O^X]H]X^N]B]G]E]L]>]G]E]L]@]%]6]H]D]I]A]O]W]O]L^T^<^Q^-^?]0]'].^O^ Sb7]U`2b4`U]8a8])`" + "7]T_ M].]%_O_@_2`0`3`/_3c9] )]4](] N_6]N]3^7a/c0_ <^ D[U^ Ga N]L]9]W]6^3]-]G]B`W" + "]W`C]H]D]P]P]F]G] I_X]X_ ?] ?_X]X_ Nb7]2ZFZ=]Q]:]0] 3[SfU[Ig R[UfS[ T\\Q\\+]5]2a IfU\\ M" + "\\3\\N\\ ?\\K]?\\K]AaN] G]W]4]W]4]W]4]W]4]W]4]W]3]T]=]/].].].].].].].]-]G]E]X^N]B]G]D]G]D]G]D]G" + "]D]G]B]J]C]KbF]H]C]H]C]H]C]H]B^Q^=j;]P_9b3b3b3b3b3b3bN`Bb3a2a2a2a V_2_2`1`1`1`1` ;aU] " + " :]U` S^T]U^A^L^A^L^A^L^A^L^?]5]I] @^5\\ ]R]R\\>]1],],].`(] U^3]L]6]'].]8]V];].]!^<]L]@]K] :] P]#^8^A]I^W^;]K]@].]G^E].].].]H]" + "C].].]S_:].]W]O]W]H]W]N]C]E]F]L]?]E]F]L]@]%]6]H]D]J^A]O]W]O]L^U^:^S^-^>]0^(]/^M^ Wh:]Wd6f" + "8dW]:e>h2dW]?]Vd<].].]O_>].]WdScK]Vd8f;]Wd7dW]?]Wa6h>h6]L]B]I]A]P`P]K^L^B^K^@l4]4](] PdU" + "]A]N]2^8e5g;]Vd?^J^8]6]L] E]V`>pA]S]S]:e6kDo>]L]:^W^6^4].]E]D_U]U_D]H]D]P]P]G]E] K_W]W_ @]" + " @_W]W_ Qf9]3\\H\\>^S^:]0_ 6[ThT[K]Q\\ S[T\\R]S[ U]S]+]6],] ?]L]@fU\\ M\\3\\N\\ ?\\K\\>\\K\\;]O\\ G" + "^W^6^W^6^W^6^W^6^W^5]W]4^T]>].].].].].].].].]-]G^F]W]N]C]E]F]E]F]E]F]E]F]E]D_L_E]K]W]F]H]C" + "]H]C]H]C]H]A^S^^K^ O]S]S]B]I]B]I]B]I]B]I]@]5^K^ @]4[ ;f8gAyAg] F] 6]1]T]" + "-\\R\\B]T[6]R]S]>^2]-]*\\.`(] U]2]L]6]'].]9]U];].]!];]L]@]K] =` P`'^7]?\\I]U];]K]@].]F]E].]" + ".].]H]C].].]T_9].]W]O]W]H]W^O]C]E]F]L]?]E]F]L]@]%]6]H]C]K]@^P]W]P^K^V^9]S]-^=]/](]0^K^ Xi" + ";]Xf9h9fX]h6]L]A]K]@^Q`Q^J^N^@]K]?l4]4](]" + " QfW^A]O^1]6f9h;]Xg@_K]7]6]L]=]G]C^Wc@pA]S]S]]L]:]U]5^5].]E]E^S]S^E]H]D]P]P]G]E]@" + "Z+]V]V^-Z4]5ZKZ:]V]V^ Sh9]4^J^>]S]9]._ 8[U_Q[T[L]P\\ S[T\\Q]T[ T]U]*]7]*] @]L]@fU\\ M\\3\\N" + "\\ ?\\L]>\\L]:]Q]:]1]U]6]U]6]U]6]U]6]U]6^W^5]S]>].].].].].].].].]-]F]F]W^O]C]E]F]E]F]E]F]E]F]" + "E]C_N_D]L^W]F]H]C]H]C]H]C]H]@]S];]P_=]S^8i:i:i:i:i:i:iVgIh9h9h9h9h<].].].]'d<]Xg:h9h9h9h9h" + "0^8k?]L]?]L]?]L]?]L]A]K]>]Xf>]K] O]R]R]D]G]D]VZOZV]D]KZV]D]G]A]4]K] @]3[ j=]L]8" + "`7]N]?] F^ 6]1]T]5uI]T[6]R]S\\<^3]-]*]1d*] U]3]J]7]'].]9\\T];].\\Ua-^;]L]@]K^?].] Uc " + "Pc+_8]>]J]U];]K]@].]F]E].].].]H]C].].]U_8].]W^Q^W]H]V]O]C]E]F]L]?]E]F]L]@^&]6]H]C]K]?]Q^V]" + "Q]I^X^8^U^.^<]/](]1^I^ ]R_h6]L]A]K]?]Q`Q]H^P^?]K]?l4]4](] R^U^W]@]O]0^7g;_S];bT^@`L]8_7]L]>]E]E^W]V]@pA]S]S]" + "=_T_].].].].].].].].]-]F]F]V]O]C]E]F]E]F]E]F]E]F]E]B_P_C]L]V^G]H]C]H]C]H]C]H]@^U^;]N^>" + "]T]6]R_;]R_;]R_;]R_;]R_;]R_;]R_X_T^K_R\\:_S^;_S^;_S^;_S^=].].].]*h=bT^;_T_;_T_;_T_;_T_;_T_1" + "^9_T`>]L]?]L]?]L]?]L]A]K]>aT_?]K] P]Q]R]E]F]E]V\\Q\\W]E]K\\W]E]F]A]4^L] A^@ZN\\ =i8e@yCk?^R^" + "=]L]9b8]O^?] Im B]1]T]5uI]T[6]S^T]<^3]-]*]3^X\\X^,] V^3]J]7](^/]9]T];e7]We/]9]N]?]K" + "^?].] Wd Nd._8]O`U\\T\\K]S]<]L^A]-]F^F].]/]-]H]C].].]V_7].]V]Q]V]H]V^P]D]C]G]L]@]C]G]L]?^']6" + "]H]C^M^?]Q]U]Q]Ic6^W^._<]/^)]2^G^ !ZM^=`Q^=^NZ;^Q`>^P^=].^Q`?`Q^>].].]R_;].`R^X\\R^M`Q^=^P^" + ">`Q^=^Q`?`1]MZ;].]L]A^M^?]Q`Q]G^R^>^M^1^4]4](] D]P^A]R^X]@]P^/]9^Vb=^NZ;`Q^AaN^8_7]L]>]E]" + "F^V]U]>]P]>]S]S]>^P^>`T`7]6]J]<]S]5^6]/]C]G]Q]Q]F]H]D]P]P]H]C]C^&]TZ,^7]7^N^6]TZ H]/^U[TZ9" + "]2n;]U]8]0d <[U]F[M\\P]2[R[ M[S\\P\\S[ Tb(]9]'\\ @]L]@fU\\ M\\3]P]9[R[1\\M\\<\\M\\7\\R\\8]2]S]8]S]8]" + "S]8]S]8]S]7]U]6]R]?]-].].].].].].].]-]F]F]V^P]D]C]H]C]H]C]H]C]H]C]B_R_C]L]T]G]H]C]H]C]H]C]" + "H]?^W^:]M]>]U^6ZM^].].].]+i=`Q^=^P^=^P^=^P^" + "=^P^=^P^2^:^P^>]L]?]L]?]L]?]L]A^M^>`Q^@^M^ P]Q]Q]F]E]F]W^S^W]F]L^W]F]E]B]3]M^ B^B^O[ =k8" + "d?xClA^P^>]L]9]X]8^P]>\\ Hl A] 9uI]T[5]T]T]:^ =]*]5^V\\V^.] V]2]J]7](]/^:]S];h:]Xg0]" + "9^P^?]K^?].]!e Je2_7\\PdW\\S\\L]S]<]M^@]-]E]F].]/]-]H]C].].]X_5].]V]Q]V]H]U^Q]D]C]G]L]@]C]G]M" + "^?`)]6]H]B]M]>]Q]U]Q]Hb5c-^;].])] B]=_O]=].]O_>]N^>].]O_?_O]>].].]S_:]._P`P]M_O]=]N]>_O]" + "=]O_?_1]-].]L]@]M]>]RbR]G^R^=]M]1^3]4](] FaSaD^Qa?]R_.]9]R`>]._O]>^N]8`7]L]>]E]G^U]U^?]P]" + ">]S]S]>]N]>^P^7]6]J]<]S]4^7]/]C]G]Q]Q]F]H]D]P]P]H]C]D_&]&_8]8_N_7] B]/]T[3]1l:^W^8]1]W` >\\" + "U\\E\\N\\P]3\\S\\ N\\S\\P\\S\\ S_']:]&\\ @]L]@fU\\ M\\2\\P\\8\\S\\2\\N]<\\N]7\\S]8]2]S]8]S]8]S]8]S]8]S]8]S]" + "7]R]?]-].].].].].].].]-]E]G]U^Q]D]C]H]C]H]C]H]C]H]C]A_T_B]M]S]G]H]C]H]C]H]C]H]>c9]M^?]U]']" + ".].].].].].`O^N].]N^>]N^>]N^>]N^?].].].],_R^>_O]=]N]=]N]=]N]=]N]=]N]2^:]O_?]L]?]L]?]L]?]L]" + "@]M]=_O]?]M] O\\P]Q]F\\D]F\\U^U^V]F\\L^V]F\\D]B]3]M] RuJ`O[ >m9c>wCmA]N]>]L]9]X]7]P]?] " + "Im A] 2\\R\\A]T[5^V^T\\:` ?](\\6]T\\T]/] V]2]J]7])^1_9]S];i;bS^2^8^S_>]K^?].]$e@u@e6_7]QfX\\S\\" + "M^S^=]N^?]-]E]F].]/]-]H]C].].c4].]U]S]U]H]T]Q]D]C]G]M^@]C]G]M]=c-]6]H]B]M]>^R]U]R^G`4c.^:]" + ".])] B]=^M]?^/]M^?]L]>]/]M^?^N^?].].]T_9].^O_O^N^N^?]M^?^M]?]M^?^0]-].]L]@]M]>^S]X]S^F^T" + "^<^O^2_3]4](] GcUcE]Pa?]Vb-]:]O_?].^N^>]O^8a8]L]?]C]H]T]T]?]P]>]S]S]?]L]@^N^8]6]J]=^S^4^8" + "]/]C]H^Q]Q^G]H]D]P]P]H]C]E_%]%_9]9_L_8] B]0^T[3]0_T_>cWc=]1]U_ ?[U\\C[N]R^4]T] N[R\\Q]R[ 'u" + "G]&] @]L]?eU\\ M\\2]R]8]T]3\\N\\;\\N\\7]S\\7]3^S^:^S^:^S^:^S^:^S^9]S]8^R]?]-].].].].].].].]-]E]G" + "]T]Q]D]C]H]C]H]C]H]C]H]C]@_V_A]N]R]G]H]C]H]C]H]C]H]>c9]L]?]U]'].].].].].]._M]O^/]L]?]L]?]L" + "]?]L]?].].].]-^O]>^N^?]M^?]M^?]M^?]M^?]M^ I]O`?]L]?]L]?]L]?]L]@^O^=^M]@^O^ P]P]P\\G]C\\G]T^" + "W^T\\G]M^T\\G]C\\B]3^O^ RuJ[X]P[ >o=\\XaX]BwDoC]L\\>]L]:^X^8]P]?] E] 5] 3]S]A^U[4dT];b @" + "](]6ZR\\RZ.] V]2]J]7]*^7d8]R];]R_]-]E]Fm>k=]-rC].]" + ".b3].]U]S]U]H]T^R]D]C]G]M]?]C]G]N^^M]?].]M^?]L]>]/]M" + "^?^M]?].].]U_8].^N^N]N^M]?]L]?^M]?]M^?^0]-].]L]@^O^=]S]X]S]D^V^:]O]2_2]4](] H\\U^W]U\\E]Pa?" + "]Vb-];]M^?].^M]>^P]7a8]L]?]C]H]T]T]?]P]>]S]S]?]L]@]L]8]6p=]Q]3^9]/]C]H]P]P]G]H]C]Q]Q]G]ViV" + "]F_$]$_:]:_J_9] B]0]S[3]0]P]>o=]2]S_ @[U\\C[M]T_5^U^;u O[R\\R]Q[ 'uH]/ZQ] ?]L]?eU\\ M\\1]T]7^" + "U^4\\O]O]I\\O]T`MZQ]S]O]E]3]Q]:]Q]:]Q]:]Q]:]Q]:^S^9]QmO]-m>m>m>m>].].].]1hL]G]T^R]D]C]H]C]H]" + "C]H]C]H]C]?_X_@]O]Q]G]H]C]H]C]H]C]H]=a8]L]?]U]&].].].].].].^M]O].]L]?]L]?]L]?]L]?].].].].^" + "M]?^M]?]L]?]L]?]L]?]L]?]L] I]Pa?]L]?]L]?]L]?]L]?]O]<^M]?]O] O]P]P\\G]C\\G]ScS\\G]N^S\\G]P]P\\B" + "]2]O] QuF]Q[ >oAqDuDqD]L]?]L]:^X^8^R^?\\ D] 5] 3]S]@`X[3bS\\R^G]W^N] P](].\\&] W]1]J" + "]7]*^7c8]Q];ZM^=`O^4]4d:]M_?].])d:u:d=_5\\R]O^R\\N]Q]=j<]-]E]Fm>k=]-rC].].a2].]U^U^U]H]S]R]D" + "]C]G]N^?]C]G]P_:g3]6]H]A]O]<]S]S]S]E^1_.^8]-]*] A]>^M]?]/^M^?]K]?]0^M^?]L]?].].]V_7].]M]" + "M]N]L]@^L]?^M]@^M^?]/]-].]L]?]O]<]S]X]S]C^X^9]O]2^1]4](]0_IZ O[R\\X]S\\G^O_>]Vd9_U];]L]?].]L" + "]=]P]8]X^9]L]?]C]I^T]S]@]P]>]S]S]?]L]@]L^9]6p=]Q]3^9]/]C]H]P]P]G]H]C]Q]Q]G]ViV]G_#]#_;];_H" + "_:] B]0]S[3]0\\N\\>o=]2]Q^ A[U\\C[LcX\\6]T]9u O[RfP[ 'uIf7e >]L]>dU\\<] :f5d4]T]:fT\\O^NfT\\UdOeR" + "\\O^F^3]Q]:]Q]:]Q]:]Q]:]Q]:]Q]:^QmO]-m>m>m>m>].].].]1hL]G]S]R]D]C]H]C]H]C]H]C]H]C]>d?]P^Q]G" + "]H]C]H]C]H]C]H]<_7]L]?]U^'].].].].].].^L]P].]K]@]K]@]K]@]K]@].].].].]L]?]L]@^L]@^L]@^L]@^L" + "]@^L] I]Q]X^@]L]?]L]?]L]?]L]?]O]<^M]?]O] O\\WmX]H\\WmX]H\\QaR]H\\N^R]H\\O]P]C]2]O] QuF]R\\ ?qC" + "sDtDrE]L]?]L]:]V]7]R]>x '] 5] 3\\R\\?e3^R\\SbJ^V^O] P](].\\&] W]1]J]7]+^6e:]Q]-^>_M]5^6" + "h<^O` Qe8u8e@^5]R\\M]R\\O^Q^>m?]-]E]Fm>k=]KdFrC].].b3].]T]U]T]H]S^S]D]C]G]P_>]C]Gk6f5]6]H]A" + "^Q^<]S]S]S]F_1_/_8]-]*] A]>]K]A].]K]@]J]?]0]K]?]L]?].].]W_6].]M]M]N]L]@]J]@]K]A]K]?]/^.]" + ".]L]?]O]<]T^W]T]C^X^9^Q^3^1]3]']3dN\\ P\\R`Q[G]N_>]Q`;bW];\\K^?]/]L]=]Q^8]W]9]L]?]C]I]S]S]@]P" + "]>]S]S]@]J]B^L^9]6p>^Q^4^9]/]C]H]P]P]G]H]C]Q]Q]G]ViV]H_\"]\"_<]<_F_;] B]1]R[3]1]N]8a6]2]P^ B" + "[U\\C[K`V\\7]T]8u O[RdN[ 'uIf5a <]L]=cU\\<] :f3`1]T];fU\\N^NfU\\T[S]NaQ\\N^G^3^Q^<^Q^<^Q^<^Q^<^Q" + "^;]Q]:]PmO]-m>m>m>m>].].].]1hL]G]S^S]D]C]H]C]H]C]H]C]H]C]=b>]P]P]G]H]C]H]C]H]C]H]<_7]L]?]U" + "_(].].].].].].]K]Q].]J]A]J]A]J]A]J]@].].].].]L]?]L]@]J]A]J]A]J]A]J]A]J] K]P\\V]@]L]?]L]?]L]" + "?]L]?^Q^<]K]@^Q^ O\\WmX]H\\WmX]H\\P_Q]H\\O^Q]H\\O]P]C]2^Q^ D^<]R[ >qDuEsCqD]L]?]L]:]V]7]R]>x " + " '] 5] 3\\R\\=f+]TdL^T^P] P](].\\2u *]1]J]7],^-_=]P],]>_M]5]7_R^<^Qa Sd .dC^4\\R]M]R\\O]O" + "]>]N_@]-]E]F].]/]KdF]H]C].].]X^4].]T]U]T]H]R]S]D]C]Gk=]C]Gj1c6]6]H]@]Q];^T]S]T^Ga1].^7]-]*" + "] Lh>]K]A].]K]@]J]?]0]K]?]L]?].].]X_5].]M]M]N]L]@]J]@]K]A]K]?]._0].]L]>]Q];^U]V]U^Bb7]Q]" + "3^1^3]'^6iS^ P[P^P[G]N_>]N^=dX]<]J]>^1]L]=^R]8^W]9]L]@]A]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]>]O" + "]5^8]/]C]H]P]P]G]H]B]R]R]F]C]Iz<]]K]@]O[X\\I`3]O]<]O]<]O]<]O]<]O]<]O];]P]?]-].].].].].].].]-]E]G]R]" + "S]D]C]H]C]H]C]H]C]H]C]<`=]Q]O]G]H]C]H]C]H]C]H];]6]L]?]T_4h9h9h9h9h9h9hK]Q].]J]A]J]A]J]A]J]" + "@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]Q\\U]@]L]?]L]?]L]?]L]>]Q];]K]?]Q] N\\WmX]H\\WmX]H\\P_" + "Q]H\\P^P]H\\O]P]C]1]Q] C]:]S[ ?sEvEqAoC]L]?]L];^V^8^T^>x '] 5] 4]S]]K]A].]K]@p?]0]K]?]L]?]" + ".].b3].]M]M]N]L]@]J]@]K]A]K]?].c4].]L]>]Q]:]U]V]U]@`6^S^4^5b2]&b^Ua<]J]=" + "c7]L]<]S^8]V^:]L]@]A]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]?^O^7^7]/]C]H]P]P]G]H]B]R]R]F]C]Iz<]\\I\\@\\O\\X\\J`" + "3^O^>^O^>^O^>^O^>^O^=]O]<^P]?]-].].].].].].].]-]E]G]R^T]D]C]H]C]H]C]H]C]H]C];^<]R]N]G]H]C]" + "H]C]H]C]H];]6]L]?]S`8j;j;j;j;j;j;|Q].pApApAp@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]R]U]@]" + "L]?]L]?]L]?]L]>^S^;]K]?^S^ N\\WmX]H\\WmX]H\\QaR]H\\Q^O]H\\O]P]C]1^S^ D]9]T\\ ?sFwDo?nC]L]?]L];" + "]T]7]T]=] Hj ?] 4]S]8d/]T]T]N^R_R\\ O](] =u Se =]0]J]7].^(]?]O]+]?^K]7]7]L]]K]A].]K]@p?]0]K]?]L]?].].a2].]M]M]N]L]@]J]@]K]A]K]?]-f8].]L]>^S^" + ":]U]V]U]?^4]S]4^4`0]$`<^Si O[O\\O\\H]N^=]M^@^S`<]J]=c7]L]<]S]8^U]:]L]@]O]O]J]S]S]@]P]>]S]S]@" + "]J]B]J]9]6]J]?]M]7]6]/^E^H]P]P]G]H]A]S]S]E]C]Iz<]]M]>]M]>]M]>]M]>^O^=]O]?]-].].]" + ".].].].].]-]E]G]Q]T]D]C]H]C]H]C]H]C]H]C]<`=]S]M]G]H]C]H]C]H]C]H];]6]M^?]R`;l=l=l=l=l=l=~Q]" + ".pApApAp@].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J]?tG]S]T]@]L]?]L]?]L]?]L]=]S]:]K]>]S] M]P]P\\G]" + "C\\G]ScS\\G]S^N\\G]P]P\\B]0]S] D]7\\T[ >sFwCn?mB]L]?]L];]T]7]T]=] Hi >] 4]S]7[Xa1]T^T^O]" + "P_T] O](] =u Se =]0]J]7]/^'^A]N]+]?^K]7]8^L^]K]A].]K]@p" + "?]0]K]?]L]?].].b3].]M]M]N]L]@]J]@]K]A]K]?]+e9].]L]=]S]9]V]T]V]@_4]S]5_4b2]&b<\\Nd M[O]P\\H]N" + "^=]L]@]Q_<]J]?e7]L];]T]8]T]:]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]?]M]8^6].]E]G]P]Q^G]H]A" + "^T]T^E]C]Iz<]]M]>]M]>]M]>]M]>]M]>^O]?]-].].].].].].].]-]E]G]Q^U]D]C]H]C]H]C]H]C]" + "H]C]=b>]T]L]G]H]C]H]C]H]C]H];]6]M]>]Qa>`P]>`P]>`P]>`P]>`P]>`P]>`PoQ].pApApAp@].].].]/]J]@]" + "L]@]J]A]J]A]J]A]J]A]J]?tG]T]S]@]L]?]L]?]L]?]L]=]S]:]K]>]S] L\\P]P\\F\\C\\F\\T^W^T\\F\\T^M\\F\\C\\B]" + "0]S] E^7]U[ >sFwBl=kA]L]?]L]<^T^8^V^=] Ij >] ]K]A].]K]@],]0]K]?]L]?].].c4].]M]M]N]" + "L]@]J]@]K]A]K]?](d;].]L]=]S]9^W]T]W^@`5^U^5^/_3]'_8ZJ` K[O]P\\H]N^=]L]@]P];]J]@_0]L];]U^9^T" + "^;]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]6]J]@^M^:^5].]E]F]Q]Q]F]H]@^U]U^C]E]G_\"]\"_BZT]TZB_F_;" + "] B]1]R[3]1\\L\\?o I_S] A[U]F[ V]T] W] N[S\\R]R[ S] ]L]6\\U\\ ']T]/\\O\\V\\@\\H\\A\\O\\V\\M_0o@o@o" + "@o@o?m>l>].].].].].].].].]-]F^G]P]U]C]E]F]E]F]E]F]E]F]E]=d?^V]L]F]H]C]H]C]H]C]H];]6]N^>]O`" + "?]M]>]M]>]M]>]M]>]M]>]M]>]M]?].].].].]-].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J] K]U]R]@]L]?]L]?" + "]L]?]L]=^U^:]K]>^U^ L\\P]Q]F\\D]F\\U^U^V]F\\U^M]F\\D]B\\/^U^ OuD]V[ =sFwBk;i@]L]?]L]<]R]7]V];]" + " F^ Nu=[T^3]S]R]O]N_V\\ N](] 1] ].]L]6]1_%]Aq0]>]K]8]7]J]/] Md:u:d>]3\\R\\K\\S\\Po@]" + "J]A].]F]E].].]E]F]H]C].].]S^9].]RaR]H]P^V]C]E]F].]E]F]M],]8]6]H]>]U^8]W^Q^W]H^U^4]2^3]+],]" + " R^M]>]K]A].]K]@],]0]K]?]L]?].].]X_5].]M]M]N]L]@]J]@]K]A]K]?]$`;].]L]=^U^8]W]T]W]@b5]U]5" + "^,]3]'] J\\Q_Q[G]N^=]L]A]O];]J]@].]L];]U]8]R];]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]5]L]?]K];" + "^4].^G^F]Q]Q]F]H]?_W]W_B]E]F_#]#_B\\U]U\\B_H_A\\U]U[ H]1]R[3]1]N]?o H`V] @[T]G[ U]T] X] N[S\\Q" + "]S[ S] ]L]6\\U\\ (]T]/]P\\U\\A]I]B]P\\U\\M^/o@o@o@o@o@o@m>].].].].].].].].]-]F]F]P^V]C]E]F]" + "E]F]E]F]E]F]E]>_X_?]W^L]F]H]C]H]C]H]C]H];]6]P_=]M^@^M]?^M]?^M]?^M]?^M]?^M]?^M]?].].].].]-]" + ".].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J] K]U\\Q]@]L]?]L]?]L]?]L]<]U]9]K]=]U] K]Q]Q]F]E]F]W^S^W]F" + "]W^L]F]E]B\\.]U] NuC\\V[ =eXZXdFgXhAi9h@]L]?]L]<]R]7]V];] E] Nu=[S]3\\R]R]O]M_X\\ M](" + "] 1] ].]L]6]2_$]Aq0]>]K]8]7]J]/] Ke=u=e<]3\\R\\K\\S\\Po@]J]A].]F]E].].]E]F]H]C].].]R^:].]Ra" + "R]H]O^W]C]E]F].]E]F]M^-]8]6]H]>]U]7]W]O]W]I^S^5]3^2]+],] R]L]>]K]A].]K]@],]0]K]?]L]?].]." + "]W_6].]M]M]N]L]@]J]@]K]A]K]?]\"_<].]L]<]U]7]W]T]W]Ac5^W^6^+^4](] H[R\\X]S\\G]N^=]L]A]O];]J]A" + "^.]L]:]W^9^R];]L]@]O]O]J]S]S]@]P]>]S]S]@]J]B]J]9]5]L]?]K];^4]-]G]D]R]R]E]H]>kA]E]E_$]$_B^V" + "]V^B_J_A^V]V] I]1]R[3]0\\N\\>o G`X] ?\\U_Q[T\\ T]T] ] N\\T\\Q]T\\ S] ]L]6\\U\\ )]T].\\P\\T\\A\\I]A" + "\\P\\T\\N^.o@o@o@o@o@o@m>].].].].].].].].]-]F]F]O^W]C]E]F]E]F]E]F]E]F]E]?_V_@]W]K]F]H]C]H]C]H" + "]C]H];]6k<]L^A]L]?]L]?]L]?]L]?]L]?]L]?]L]?].].].].]-].].].]/]J]@]L]@]J]A]J]A]J]A]J]A]J] K]" + "V\\P]@]L]?]L]?]L]?]L]<^W^9]K]=^W^ J]R]R]D]G]D]W\\Q\\W]D]W\\L]D]G]A\\.^V] NuC]W[ ]K]9]6]J]/] H" + "e@u@e H\\R]M]T]Q^J]A]J]@]/]G^E].]-]F]F]H]C].].]Q^;].]Q_Q]H]N]W]B]G]E]-]G^F]L]-]8]6]I^>^W^7]" + "W]O]W]I^R^6]4^1]+],] R]M^>^M^@]/^M^?]-]0^M^?]L]?].].]V_7].]M]M]N]L]@^L]?^M^A^M^?] ]<].]L" + "]<]U]7]X]R]X]B^W^5]W]6^)]4](] H\\T]W]U\\F]O_=]L]A]P^;^L^A]-]L]:]W]8]P]<]L]@]O]O]J^T]T]?]P]>" + "]S]S]@^L]A^L]8]5]L]@^J]=^3]-^I^D^S]S^E]H]]G]C_%]%_A_W]W_A_L_@_W]W_ J]0]S[3]0]P]5]4],b =" + "[ThT[ R]T]!] M[T\\P]U[ R] ]L]6\\U\\ *]T].]P[S\\B]J]A]P[S\\N].^J]B^J]B^J]B^J]B^J]B^K^A]M]=]" + "/].].].].].].].]-]G^F]N]W]B]G]D]G]D]G]D]G]D]G]?_T_AbK]E]I^C]I^C]I^C]I^;]6j;]K]A]M^?]M^?]M^" + "?]M^?]M^?]M^?]M_?].].].].].].].].]/]J]@]L]@^L]@^L]@^L]@^L]@^L] J^X]Q]?]L]?]L]?]L]?]L];]W]8" + "^M^<]W] I]R]S]C]H]C]VZOZW]C]VZL]C]H]@\\-]W] MuC]X[ ;cWZWbDeWZXe>e6e>]L]?]L]=]P]8^X^:] " + " F^ H\\R\\5[S]5]Q]R]O^L` K]*] 0] !^.]L]6]4_\"]2],^>^M]8]6]J]0] DeCuCe E]R\\M]T\\P]I]A]J]@" + "]/]G]D].]-]F]F]H]C].].]P^<].]Q_Q]H]N^X]B]G]E]-]G]E]L^.]8]5]J]<]W]6^X]O]X^J^Q^6]5^0]+^-] " + "R]M^>^M]?].]M^?]-]/]M^?]L]?].].]U_8].]M]M]N]L]?]L]?^M]?]M^?] ]<].]M^<^W^6aRbB^V^6]W]7^(]4]" + "(] GcUcE]P_=]L]A]P]9]L]@]-]L]:^X]9^P]<]M^@]P^O]I]T]T]?]P]>]S]S]@^L]@]L]8]5]M]?]I]>^2],]I]" + "B_U]U_D]H]:c<]G]B_&]&_?_X]X_?_N_>_X]X_ I]0]S[3]0_T_5]4]+` ;[SfU[ P^U^#] L[U\\P]V[ Q] ]M^" + "6\\U\\ ,^U^-\\P\\S\\B\\J]@\\P\\S\\N].]I]B]I]B]I]B]I]B]I]B]I]B^M]=]/].].].].].].].]-]G]E]N^X]B]G]D" + "]G]D]G]D]G]D]G]@_R_A`J]D]J]A]J]A]J]A]J]:]6g8]K]A]M^?]M^?]M^?]M^?]M^?]M^?]M_?].].].].].].]." + "].].]L]?]L]?]L]?]L]?]L]?]L]?]L]3^;aP]?]M^?]M^?]M^?]M^;]W]8^M];]W] H]S]T^B]J^B]J^B]J^B]J^@" + "\\-]W] G^1_ :aW[V`BcW[Wc]N]<]P]7]X]8] F]KZ X]S]5[S]5\\P]R]N]K_ K]*] 0] !]" + ",]N]5]5_\"]1],]<]M]9^6^L^0] Ad Nd A\\R]O^U\\P^I^B]K^?]H[C]H^D].],]G]F]H]C].].]O^=].]P^Q]H]M]" + "X]A]I]D],]I^E]K]AZH^8]5]J]<]W]5bObJ^O^7]6_0]*]-] R]M^>^M]?^/]M^?^.]/]M^?]L]?].].]T_9].]M" + "]M]N]L]?]L]?^M]?]M^?] ]<].]M^;]W]5aRaB^U^6c8_(]4](] FaSaD]P_=]M]@]P]9]L]@]-]L]9b9]O^=^N^?" + "\\P_Q]H]T]T]?]P]=]T]T]?^L]@]L]8]4]N]@^I^?]1],^K^A`W]W`C]H]7]8]I]@^&]&^=i=^N^^P^=^P]7]X]8_ H^M[ F] 6" + "]S]>ZQ[T^6]P]S^N^K^ K]*] 0]:] 8]0],]O^5]6_2ZI]1]-^<^O^9]4]L]0]<].] Uc Pc1]2\\Q^S`W^P]G]B]K]" + ">^J\\C]I^C].],^H]F]H]C].].]N^>].]C]H]MbA^K^D],^K^D]K^B[I]7]5^L^" + "_O]=].]O_>].].]O_?]L]?].].]S_:].]M]M]N]L]>]N]>_O]=]O_?] ]<]-]O_;]X^5aRaC^S^6a8_']4](] D]P" + "^B^Ra>^N]@]Q]7]N]?^.]L]9a8]N]=^N^?]Q_Q]G]U]U]>]P]=]T]T]?_N]>]N]7]4^P^@]G]@^1]+^M^?mB]H]7]8" + "^K^?\\%]%\\;g;\\L\\:g G]/]T[3]2n7]4]'^ <\\F\\ M\\S\\ J\\F\\ L^N^6\\U\\ ,\\S\\-]OhG]K]@]OhQ]LZ=]G]" + "D]G]D]G]D]G]D]G]D]G]D^L]<^J\\C].].].].].].].]-]J_D]MbA^K^B^K^B^K^B^K^B^K^A_N_B^K]B^L^A^L^A^" + "L^A^L^:]6].]K]A^O_?^O_?^O_?^O_?^O_?^O_?^Oa?].].].].]/].].].]-]N]>]L]>]N]=]N]=]N]=]N]=]N]2^" + ";_O]=]O_>]O_>]O_>]O_:a7_O]9a E^P_>^P_>^P_>^P_>^P_>\\,a H^.] /[5]T[S\\8a1`<]L]=^R^<]O^8b7_ " + " H^O\\ F] 6\\R\\=[R[U^5\\N]T]L^M` L]*] 0]:] 8]1^+]P]4]7_1[L_1]ZM];].] R` P" + "`.]2]QfXaN]G]B]L^=^L]C]K_B].]+_J]F]H]C].].]M^?].]C]H]La@^M^C]+^M^C]J]B]L^7]4^N^:a4aMaK^M^8" + "]7^.]*^.] Q]P`>`Q^=^NZ;^Q`>_LZ>].^Q`?]L]?].].]Q^;].]M]M]N]L]>^P^>`Q^=^Q`?]/ZL];]-^Q`:a4`" + "P`D^Q^7a8^&]4](] S]Sb>_P^@]R^7^P^>^MZ<]L]9a9]M]=_P`XZB]Q_Q]G^V]V^>]P]=^U]U^?`P^>^P^6]4]Q" + "^?]G]A^0]*^O^]P`>]P`>]P`>]P`>]P`>]P]X^LZN^NZ;_LZ>_LZ>_" + "LZ>_LZ?].].].]-^P^>]L]>^P^=^P^=^P^=^P^=^P^2^:^P^=^Q`>^Q`>^Q`>^Q`:a7`Q^9a Dk],a " + "H]-] /[,[._0_;]L]=j<]N]7`5a J_S^ F] 6\\R\\=^U[W_5]N^V^K_Rd L],] /]:] 8]1])^T^3]8_0^Q`0" + "]<]Q_8^S^8^3_R_=]R^:].] O] P]+]1\\PdW`N^G^C]N_;`R`C]NaA].]*`O`F]H]C].].]L^@].]C]H]La?`S`B]*" + "`S`B]J]B`Q_6]3_R_9a4aMaL^K^9]8^-])].] Q_Tb>aS^;_R\\:^Sa=`Q]>]-^Sa?]L]?].].]P^<].]M]M]N]L]" + "=_T_=aS^;^Sa?]/^R_:]-^Sa:a3_P_C^P^7_8^%]4](] S_V^X^?aS^>]T^5_T_=`R]<]L]8_8]M^>`SdA]SaS]E" + "^W]W^=]P^=_W]W_>]X]T_<_T_5^4^T^?^G^C^/])^Q^8c=]H]7]6`S` ?] ;c >c E]._W[V\\9]4^J^9]4]%] ;]L]" + " IZQZ H]L] !u ,`Sd9\\U\\ ,ZQZ,]E\\E]L]?]E\\M_S^>^G^F^G^F^G^F^G^F^G^F^G^F^K]:`R`C].].].].]." + "].].]-]ObB]La?`S`>`S`>`S`>`S`>`S`?]J]CcS`?_R_=_R_=_R_=_R_8]6].]V[R^?_Tb>_Tb>_Tb>_Tb>_Tb>_T" + "b>_T^V_Q]M_R\\:`Q]=`Q]=`Q]=`Q]?].].].],_T_=]L]=_T_;_T_;_T_;_T_;_T_1^:`T_;^Sa=^Sa=^Sa=^Sa9_6" + "aS^7_ Bi:i:i:i:i=]+` I],] /[,[-].]:]L]]C]H]K`>kA])kA]J^Cm5" + "]2j7_2`M`K^J]9]8tC])].] PgX]>]Xf9h9fX]],fX]?]L]?].].]O^=].]M]M]N]L]qA^U]W]U^Di<]O`?k=]Xg:h3a7f>uCn?]/eSe;]:" + "]H]7]5k >] :a n?\\H\\8]4]%] 9^R^ *^R^ Xu ,q9\\U\\ /]D\\F]LfH]D\\Li>]E]F]E]F]E]F]E" + "]F]E]F]E]F]JnIkBn?n?n?n?].].].]-n@]K`>ki-]]C]H]K`]Wd" + "6f8dW]:i>]+dW]?]L]?].].]N^>].]M]M]N]L];f;]Wd7dW]?]/i7c3dV]9_2_P_E^M^8_8m4]4](] QdV`B]Xe;" + "d1f8h<]L]8_9]K]>]XdW_@eWeBg;]O`=g;]Vd8f1`6d=uCn?]/eSe;]:]H]7]3g <] 9_ :_ C]+f>n>ZFZ7]4]%] " + "7f &f Vu ,]XdW_9\\U\\ /\\C\\F\\KfH\\C\\Kg=]E]F]E]F]E]F]E]F]E]F]E]F]JnHh@n?n?n?n?].].].]-l>" + "]K`]C]H]J_9a<]$d?]I^?c0].b3_2_K_M^G^;]8tC](]/] M`T]>]U`2b4`U]7c;])`U]?]L]?].].]M^?].]M]" + "M]N]L]8`8]U`3`U]?],c2a0_T]9_2^N^F^K^8]7m4]4](] O`R^B]Va8b-`3d:]L]7]9^J]?]V`T]>cUc?c9]N_:" + "a8]T`3`-_4`X IX *W FW " + " " + " " + " " + " " + " HX W 4Z 3VCT X W 4Z " + " HX W 4Z 'VCT ;X W 3Y 2UCT KX W 3Y 0W " + " " + " " + " " + " " + " @W !W 4\\ 5YET ?XHX 8] >W !W 4\\ 7XGX KW !W 4\\ 7XHX " + " +YET :W !W 3[ 5ZFT ?XGX EW !W 3[ 7XGX 5W " + " " + " " + " " + " " + " >W \"V 3\\ 7]HU ?XHX 9` ?W \"V 3\\ 7XGX JW \"V 3\\ 7XHX -]HU" + " 9W \"V 3] 7]HT ?XGX DW \"V 3] 8XGX 5V " + " " + " " + " " + " " + " W $V 3VNV 8XGX IW $V 3VNV 8XHX -_KV" + " 8W $V 2] 7_KU ?XGX CW $V 2] 8XGX 6V " + " " + " " + " " + " " + " :W &W 4VLV :j >XHX :VJV >W &W 4VLV 9XGX HW &W 4VLV 9XHX .j 6" + "W &W 3VMV 9i >XGX BW &W 3VMV 9XGX 7W MW " + " " + " " + " " + " " + " CV 'W 4VJV ;j >XHX ;UGV >V 'W 4VJV :XGX GV 'W 4VJV :XHX .j" + " 5V 'W 3VKV :i >XGX AV 'W 3VKV :XGX 8W N[ " + " " + " " + " " + " " + " DV )W 4VHU TEY ;XHX V ,V 2UEU TCU :XGX =U -V 2UCU =XGX ;V NV" + "IV \"W " + " " + " " + " " + " JU /V 3VBV ETBT :U /" + "V 3VBV FU /V 3VBV (U /V 2UAU DU /V 2UAU @V NVGV " + " $X " + " " + " *X " + " " + " JX GTBT " + " MX GX 7V :UEU DX GX 7V JX GX 7W 4X GX 6V " + " GX GX 5V (X &X " + " " + " )X 8V " + " " + " ;X FTBT " + " LX IX 7X W E\\ AW ,W ,W ,W ,W HY GV +Y " + " 4Z NX @X " + " %W DUDU " + " =Y 7W KW 6Z 4XDT BTAT BW KW 6Z IW KW 6[ ,Y )XDT AW KW 5Z 4XDT " + " KW KW 4Z ,W BW 8V (S " + " W H_ AW ,W ,W ,W ,W " + " L] GV +] ;a #[ F^ " + " 8XGX +W BTEU " + " *R 9a :W MW 6\\ 6ZET ?XHX W Ja AW ,W ,W ,W ,W N_ GV +_ " + "?e 8] J] Jb 8[ <[ $Y FY 7XGX " + "=Z Di 5W 8Z .Y !W FW *Y 4W)V*W)V-Y(V W $a MY EW 5W >W Kb AW ,W ,W" + " ,W ,W !a GV +a Ch =f ^ Mf 2Z @" + "x Mx a" + " 5a &W 0g #\\ -_ <\\*V.\\*V0a-V\"X )Z /Z /Z /Z /Z 4WJV 1~U+d Kx Mx Mx Mx MX -X -X -X ,j" + " @[3X Dc 8c 8c 8c 8c W \"W 4VNV 8]HU ?XHX BW \"W 3VNV 8XHX 2W ?W &XHX " + " ^ K~\\ >S 3Q +[ @[;[ ;Q ;e HX 2VFV #VBV FS 6`" + "1V#g GV !V 3V !T 7W 0d :` ;j ?k -[ Dq :g Ky Df ;d $f 1Z @o 5j Np Ex Mt " + ":m\"X/X'X -X -X3Z%X -]0]0\\4X Gi Lm 4i Ln ;m#~W$X/X-X(X-X4Y4XCY1Y-Y.Y&~S%a >W $a N[ EV " + "5W >W Lc AW ,W ,W ,W ,W \"b GV +a Dk Aj \"_" + " h 3Z @x Mx ?i 6X C~Q)X?X?X Ni 6V /V /V DX &f #W0W e >XGX %c#" + "e +b\"i 9_ Be 9d 'V 3k %^ /c @^*V0^*V2d.V\"X )Z /Z /Z /Z /Z 3b 1~U.j Nx Mx Mx" + " Mx MX -X -X -X ,p F\\4X Gi >i >i >i >i BiEV.X/X'X/X'X/X'X/X.Y.Y#X 'j ;V \"V 5VLV :_IT >XH" + "X V \"V 5VLV 9XGX IV \"V 4VMV 9XGX ,ZHY A_IT XHX AV \"V 3VLV 9" + "XHX 2V >W &XHX !_ K~[ >T 4R -_ D_?_ >S =t Fh " + " IX 2VFV #VBV FS 7c4V#i HV \"W 3V !T 7V 0f @e >o Co 0\\ Dq W Md AW ,W ,W ,W ,W HW 1b GV +b " + " Fm Dm #` \"j 4Z @x Mx Am 8X C~Q)X?X?X!m 9X 0V 0X EX 'h" + " $W0W \"h ?XGX 'g%g 0h%i :a Cf :f *V 4m %^ 0e A^+V/^+V1f1V!X )Z /Z /Z /Z /" + "Z 2` 1~V0o\"x Mx Mx Mx MX -X -X -X ,t J\\4X Im Bm Bm Bm Bm FmHV-X/X'X/X'X/X'X/X-X.X\"X (l ;" + "V $V 4UJU :ULXLU >XHX XHX @V $V 2UJU 9XHX 3V =W &XHX !` K~Z >T 4S /a FaAa @T " + " @w Hl KX 2VFV $WCV ES 8e5V$j HV \"V 1V \"T 7V 2j Eh ?q Dp 1\\ Dq >" + "l Ly Hn Bj +l %e E\\ At >s$v Kx Mt >u&X/X'X -X -X5Z#X -^2^0]5X Jo q ;o r Br%~W$X/X" + "-X(X,X6[6XAY3Y+Y0Y%~S%W 3V IW !_ FW 7W >W Md AW ,W ,W ,W ,W HW " + " 2[ ?V #[ Hn En #` #l 6\\ Ax Mx Cp 9X C~Q)X?X?X\"o " + " ;Z 1V 1Z FX KS 0i #W2W LV ,i ?XGX *l'h 3l'i ;c Dg ;g ,W 6o %^ 1g B" + "^,V.^,V0g3V X *\\ 1\\ 1\\ 1\\ 1\\ 2^ 0~V2s$x Mx Mx Mx MX -X -X -X ,v L]5X Jo Do Do Do Do HpKW" + "-X/X'X/X'X/X'X/X-Y0Y\"X )n XHX ;UEU XHX @W &W 3VJV :XHX 4W =W &XHX 1\\ 1\\ 1\\ 1\\ 1\\ =XMV K~Y " + " =S 4U 1c IdCc AU Dz In LX 2VFV $VBV ES 9g7V$k HV #W 1W #T " + " 8W 3l Fh ?r Eq 3] Dq ?m Ly Ip Em -n )k H\\ Au Av%x Mx Mt ?x(X/X'X -X -X6Z\"X -" + "^2^0]5X Ls\"s ?s\"s Et%~W$X/X,X*X+X6[6X@Y5Y)Y2Y$~S%W 3W JW \"a FW 8W >W NZ 6W ,W " + ",W ,W ,W HW 2X \\ 2V 2\\ GX KS 1j #W2W LV -j ?XGX +ZEZ)VGY " + "5ZDZ)i T 5V 2e KfEe CW G| " + " Jp MX 2VFV $VBV ES 9XIX8V$l HV #V /V #T 8V 3n Gh ?s Fr 5^ Dq @n Lx Ir" + " Go .o -q L^ Bv Cx&z x Mt A{)X/X'X -X -X7Z!X -^2^0^6X Mu#t Au#t Gu%~W$X/X,X*X+X6[" + "6X?X5X'X2X#~S%W 2V JW #c FW 9W >W NX 4W ,W ,W ,W ,W HW " + " 2W ;V NW IZCY Hp JY &ZDZ 9^ Bx Mx Eu W *W 2UFU ;XHX 6W ;W &XHX 7h =h" + " =h =h =h DWJV K~X >T 5W 4g MgFg EY J~ K]FZ MX 2VFV $VBV " + "ES :XGX9V%\\GX HV $W /W 3PATAP GV 3[H[ Gh ?]F] GZE^ 6^ Dq A]FX Lx I\\F\\ G\\G[ " + " /[H] 0u N^ Bw E_D^&{!x Mt B`C_)X/X'X -X -X8Z X -_4_0_7X N^E^$u C^E^$u H^E\\%~W$X/X,Y,Y*W7" + "]8X>Y7Y'Y4Y#~S%W 2V JW $e FV 9W >W NW 3W ,W ,W ,W ,W HW " + " 2W ;V NW IY@X >X 4[AV IX &X@X 9^ Bx Mx F^E^ =X C~Q)X?X?X" + "&^E^ B` 4V 4` IX KS 3\\GW \"W4W KV .YBT ?XGX .V7V,P=W :W8W /VEV 3V +V /V " + " 7eGU KU 3WCW ;U-V$U-V LV5V NX +^ 3^ 3^ 3^ 3^ 3^ 1~W6_D^&x Mx Mx Mx MX -X -X -X ,{\"" + "_7X N^E^ L^E^ L^E^ L^E^ L^E^ !^Ed*X/X'X/X'X/X'X/X+Y4Y X +Y?X ;V *V 4UDU >TEZ TEZ T 5Y 5g MhHi G[ M~Q L\\AW M" + "X 2VFV $VCV DS :WEW:V%ZAU HV $V -V 3RCTCR HW 4ZDZ H\\LX ?Y?[ HV>\\ 8_ DX )[?T -Y J[B" + "[ I[CZ 0WAZ 2x ^ BX>^ G]=Z&X=b#X -X '];[)X/X'X -X -X:[ NX -_4_0_7X \\?\\%X@^ E\\?\\%X" + "?] J[=X =X W X 3W 4W ,W " + " HW 3X ;V NX KY?X Ca 9Y:R HX (X>X :VNV " + "BZ /X '\\?\\ A^ FX0X)X?X?X'\\?\\ Db 5V 5b JX KS 3ZBT !W6W JV .X?R 4V4U HV ;V" + "4V 1VCV 4V *U 0V 7fGU KU 4WAW TDX ;a 6V ,V 4UBU GV ,V 3UCU 0` 6TDX 4V ,V 2UDU >TDX >V ,V 1UDU " + ":V 9W (o Do Do Do Do GWIU J~V >T 6Z 6i jIj I\\ N~R M[=" + "U MX 2VFV %VBV H] AWCW;V%Y=R HV %W -V 4UETEU IV 4ZBZ IWGX ?V;[ IS9Z 9VNX DX *Z;R" + " -X JZ>Y JZ?Y 1U>Z 5`C_#` CX;[ H[7W&X9_$X -X (\\6X)X/X'X -X -X;[ MX -_4_0`8X![;[&X" + "=[ F[;[&X<[ LZ8U =X W W 2W 4" + "W ,W HW 3W :V MW KX=W Cc ;X7P HX (" + "WR !X8X JV /X

    W W " + " 2W 4W ,W HW 3W :V MW KWU.U 4VAV &V 5U *U 2V 6gGU KU 5W?W =U/V\"U/V IU7V LX ,WNW 5WNW 5WNW 5" + "WNW 5WNW 5WNW 4XHX H[4U&X -X -X -X -X -X -X -X ,X6]&`8X\"Z7Z#Z7Z#Z7Z#Z7Z#Z7Z 'Z8['X/X'X/X'" + "X/X'X/X)Y8Y MX ,W:W 9V 0V 3U@U ?[ 1V 0V 3U@V GV 0V 3U?U 8h 1V 0V 2U@U " + " CV 0V 1U@U >V 7W *`L` I`L` I`L` I`L` I`L` JV =X,X >T 6] 9k\"lKl K_ " + " #\\ 'Y8S MX 2VFV %VBV Nk IVAV=V$X 1V %V +V 6YHTHY -V EW 5Y>Y :X ?R5" + "Z .Y ;VMX DX +Y DX IYW W 2W 4W ,W HW 3W :V MW KW;W De =W " + " -X *W:W V$X 1V &W +W 5XITIX +V EV 4X[ JX -XNW8WNX0a9X#Y" + "3Y(X9Y JY3Y(X9Y NX LX W W 2W " + " 4W ,W HW 3W :V MW LX;W Df >W ,W " + " +W8W >WLW @Y 2X +Z3Z!t\"X0X)X?X?X*Y3Y Kj 9V 9j AS 5X 8W:W HV /W #T)T KV " + " @T(T 6U?U &V 5T +V AhGU KU 5V=V =U0V!U0V JV7V WLW 7WLW 7WLW 7WLW 7WLW 7XNX " + "6XGX IY.R&X -X -X -X -X -X -X -X ,X2Z'a9X#Y3Y%Y3Y%Y3Y%Y3Y%Y3Y )Y3Z)X/X'X/X'X/X'X/X'X:X Ki" + " >W8V *XHZ FW ,ZW W 2W 4W ,W HW" + " 3W :V MW LW:W Dg ?W ,X ,W8W >WLW ?Y 3X +Y1Y\"v#X" + "0X)X?X?X+Y1Y MYNVNY :V :YNVNY BS 5X 8XU1V U1V KW7V NWLW 7WLW 7WLW 7WLW 7WLW 7WLW 6XGX JY,Q&X -X " + "-X -X -X -X -X -X ,X1Z(XNX:X$Y1Y'Y1Y'Y1Y'Y1Y'Y1Y P)P$Y3[)X/X'X/X'X/X'X/X'YVKX DX -X BX IX8X NX7W KP 1P =X Y *Z W 0W MW +ZAZ 0W >W W 2W 4W ,W HW " + " 3W :V MW LW:W DSF[ @X -X -X8W ?WJW ?Y 4X ,Y/Y%z%X0X)" + "X?X?X,Y/Y YMVMY ;V ;YMVMY CS 5X 5P*Q JWU2V NU2V$_7V NXLX 9XLX 9XLX 9XLX 9XLX 8WLW 6XGX KY*P&X -X" + " -X -X -X -X -X -X ,X0Z)XNX:X%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y\"R+R&Y3]*X/X'X/X'X/X'X/X&Y>Y Jp EW:Y " + " +R@Y 7Q 2W .XEVFY\"X5Y\"X5Y\"X5Y\"X5Y N" + "V ;X/X 0V 5T 8c ^ AW4W ?Z >W6W KY \"Y 0X 2VFV &VCW#[LSKZ K" + "V?V@V\"W 0V 'W )W 1XNTNX &V FW 6Y:Y X *Z NW 0W MW ,Z?Z 1W >W W 2W 4W ,W H" + "W 3W :V MW LW:W DPAY ?Y .W -W6W @WJW >Y 5X ,X-X&" + "_MXM_&X0X)X?X?X,Y/Y !YLVLY W FV /X 'TCfFT2i CUGfB" + "T 9U?U &V 7U 5] >iGU KU 6V;V >U2V NU2V$]5V NWJW 9WJW 9WJW 9WJW 9WJW 9WJW 8XFX" + " KY /X -X -X -X -X -X -X -X ,X/Y)XMX;X%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y#T-T'Y3]*X/X'X/X'X/X'X/X%X>X Ir " + "GW=\\ GY 9S 3W /XDVDX$X2X$X2X$X" + "2X$X2X V ;X0X 0X 7T 8d X$X-WJW EX6X Y .X.Y)X -X -Y .X/X'X -X -XBZ EX -XLV:VLX0XMX;X&Y-Y+X7X NY-Y+X7X!X KX Z W FV " + ".X (TDgFT3j CTFhDT 9U?U &V 8U 4\\ =iGU KU 6V;V >U3V MU3V#\\5V MWJW 9WJW" + " 9WJW 9WJW 9WJW 9WJW 8XFX LY .X -X -X -X -X -X -X -X ,X.Y*XMX;X&Y-Y+Y-Y+Y-Y+Y-Y+Y-Y%V/V)Y3" + "_+X/X'X/X'X/X'X/X%Y@Y Is HW?^ ?Z /Z /Z /Z /Z /Z /Z6Y NZ 0Z /Z /Z /Z 8Y 1Y 3Z /Z /Z" + " /Z /Z 3ZCV 5WDX DXCVCW%X0W%X0W%X0W%X0W V :X1X 0X 7T 9f =k#~`\"h Cf " + "EW4W @\\ ?X8X LX !Y /X 2VFV 'VBV#XHSET KV?VAV!W 0V (W 'W .` \"V GW 5X" + "8X W\"W.XJX FX6X X -X.Y)X -X -X -X/X'X -X" + " -XCZ DX -XLV:VLX0XLX^4WG_ 9` @WG^ 9^GW MWG\\ ;f Gm ^BV\"W:W 3X ?^ 0e AWG_ KV.X ?X Z 7X -X+X)\\HXH\\(X0X)X?X?X-X+X $YJVJY >V >YJVJY Ma =X 7V0V JW@W E" + "V .Y *TEiET5k DTEiDT :VAV &V 9U 3_ ;W6W NiGU KU 6V;V >U3V MU3V#_8V NXJX" + " ;XJX ;XJX ;XJX ;XJX ;XJX :XEX LX -X -X -X -X -X -X -X -X ,X.Y*XLXa'b 7` 5` 5` 5` AW ,W ,W ,W DY EW" + "G_ 9` 5` 5` 5` 5` (Z <`GV W6W MW6W MW6W MW6W#W1X NWG^ HW1X NWBVBW&W.W&WJP:PJW&W4PJW&W." + "W!V :X2X 0X 6S 8g >k#~`#j Fj GW4W @\\ >W8W LX X .X 2VFV 'VBV$XGSCR " + "KV?VBV X 1V (W 'W ,\\ V GW 5X8X f CWIb =bIW MWI^ =j Im U4V LU4V\"`:V GX /WHW ;WHW ;WHW ;WHW ;WHW ;WHW :XEX MY -X -X -X -X -X " + "-X -X -X ,X-Y+XKWf ;f ;f ;f ;f +Z >eJU NW6W MW6W MW6W MW6W\"W" + "2W MWIb IW2W NWAVAW(W,W(WJRU5V KU5V GXTKW)W4TKW" + ")W+W\"V 9X3X 2X 5T :k ?i\"~`$m Jn IW4W A^ ?X:X MW NY .X 2VFV 7~X2XFS" + " VIV>X2YIY DYFY +Z JW .V NW 1Y3Y 1n DWLh Bm ChLW Gk Ll 6hLW MWKg HW ,W ,W;Y JW " + ",WKfGg8WKg Cl FWLh ChLW MWK` @m Im Y =W6W JW-W&YJb }!WCWCW Hk Dx&{ W4W CWFW P JSCVAVDS :WEV " + "$V W6W NiGU KU 6V;V BP>P /U5V KU5V EW=V FX 0XHX =XHX =XHX =XHX =XHX =XHX W:X MW NX -X 2VFV 7~X2WES WKX0XJX>X(Y)X,X7X!Y)X,X7X!Y LX VIV>X1YKY BXFX +Z IW .W " + " W 2Y1Y 2o EWMj Dn DjMW Hn Nl 7jMW MWLi IW ,W ,WW6W NiGU KU 6V;V BQ" + "?Q 0U6V JU6V BU>V EX 0WFW =WFW =WFW =WFW =WFW =WFW X(Y)X.Y)X.Y)X.Y)X.Y)X%Z9Z*Y6WJX,X/X'X/X'X/X'X/X!XFX EX;Z LWDX ?o Do Do Do Do Do DoKn4n C" + "n Cn Cn Cn HW ,W ,W ,W %l HWLi En Cn Cn Cn Cn /Z Cs LW6W MW6W MW6W MW6W!W4W LWMj LW4W " + "W?V?V+W(V+WKXBXKV+W5XKV+W(V$W 8W4X 2X 5T ;n ?g!~_%p LZDZ JW4W A^ >W:W MW " + " MX -X 2VFV 7~X2WES VJX0XIW>X(X" + "'X-X7X!X'X-X7X!Y LX VIV>X1YKY AXHX +Z HW -V W 3Y/Y 3p FWMk Fo EkMW Io Nl 8" + "kMW MWMk JW ,W ,W=Y HW ,WMjJj:WMk Gp HWMk GkMW MWMb Bo Im \\>W0X=X LW5X u 6W :V " + " MW EkJV Wj Fn CWMk\"\\6X =Z >W6W KW+W)[Ke\"}!WCWCW Jo Hz&{ W4W DWDW ;Y ;X /X'X." + "YBXBY+X0X)X?X?X/X'X#T HV IT :V ;T3T :V CV +o BX 6ZM`MZ GXFX CV *\\ 3SFW,S:V>V 0R@R " + " KSBV@VDS 9e #V ?W \"V ?W6W NiGU KU 6V;V BR@R 1U6V JU6V BV?V EX 1XFX ?XFX ?XFX ?XFX" + " ?XFX ?XFW =XCX NX +X -X -X -X -X -X -X -X ,X+X,XIW>X(X'X/X'X/X'X/X'X/X'X%Z;Z)X5VHX-X/X'X/" + "X'X/X'X/X XHX DX:Y LWEX >p Ep Ep Ep Ep Ep EpMp6o Do Do Do Do HW ,W ,W ,W 'o IWMk Gp Ep Ep " + "Ep Ep 0Z Ds KW6W MW6W MW6W MW6W!W5X LWMk MW5X V>V?W,V'W,VKZDYKW,V5YKW,V'W%W 8X5W 2" + "X 4T ;o @g ~^%q NY@Y KW4W B` ?XX -XJW@WJX0XIX?X(X'X-X7X!X'X-X8Y Y MX " + "W/YMY @YJY +Y GW -V W 4X+X 4YE\\ FWNXG\\ H]EX F\\GXNW J\\F[ GW ,\\GXNW MWNXG[ JW ,W ,W?Z GW" + " ,WNXH[KXH[:WNXG[ H]H] IWNXG\\ I\\GXNW MWNXFQ C\\CW CW ,W6W!X6X NW?\\?W.X?X JW6W 1X 6W :V MW " + " 9X=X\"[IZKW W=Y /W @m H]DV CWNXG[\"\\6W =[ >W6W LW)W*ZJWKY\"}!WCWCW K\\H] J{&{ V3W DWDW :Y " + "XCX NX +X -X -X -X -X -X -X -X ,X+X,XIX?X(X'X/X'X/X'X/X'X/X'X$Z=Z(X6WH" + "X-X/X'X/X'X/X'X/X YJY DX9Y MWEW =YE\\ EYE\\ EYE\\ EYE\\ EYE\\ EYE\\ EYE]N\\G[7]EX E\\F[ F\\F[ F\\F[ " + "F\\F[ IW ,W ,W ,W (p IWNXG[ H]H] G]H] G]H] G]H] G]H] 1Z E]H^ JW6W MW6W MW6W MW6W W6W KWNXG\\" + " MW6W NV>V>V,V&V,VJZFYIV,V6YIV,V&V%W 7W6X 3X LR:T ;q @e N~^&s!Y>Y LW4W B` >WXJX +Z GW -W !W 5X)X 5U>" + "Z G_CZ I[>T FZC_ KZAZ HW -ZB_ M^BZ KW ,W ,W@Z FW ,^CZMVCZ;^BZ IZBZ I_CZ IZC_ M^ 5YY .W AXJa IZW2W EWDW 9Y =X /X'X/YAXAY,X0X)X?X?X/X'X%X JV KX Z FU>Z " + "FU>Z FU>Z FU>Z FU>Z FU>eBZ9[>T FZAZ HZAZ HZAZ HZAZ JW ,W ,W ,W )r J^BZ IZBZ GZBZ GZBZ GZBZ" + " GZBZ 1Z EZB[ JW6W MW6W MW6W MW6W W6W K_CZ MW6W V=V>V-V%V-VHZHYHV-V6YHV-V%V%W 7X7X " + " 4X NU:T WX !Y 0Y BVDX Dk CXJc -X BX>X LX5Y MX -X Ee Le 3Z ?U=bKUC" + "U6XDX IX9Y X +X+X+X -X /X +X/X'X -X -XL[ Y J]?Y KY?] M] 4X8P CW ,W6W X8X MW?\\?W-XAX IW7X 3Y 5W :V MW =_C_(YBXLV NW" + "?Z -W CXC\\ KY ,]@Y LW8X >] ?W6W LW)W,YHWHY MW=W JWCWCW MY>Y L[B[ ;W >W2W FWBW 9Y >X 0X%X0X" + "@X@X,X0X)X?X?X/X'X&Y JV KY =V >Y7Y =V CV .[HSFR BX 3t BWHW AV .WN\\ 9SFV)S;V?W 3UCU " + " LSAV@VCS 7_ V BV LU ?W6W MhGU KU 5W?W AUCU 4U8V HU8V ?UAV CX 2XDX AXDX AXDX AX" + "DX AXDX AXDX @XBX NX +X -X -X -X -X -X -X -X ,X+X,XHX@X(X'X/X'X/X'X/X'X/X'X\"ZAZ&X8WFX-X/X'" + "X/X'X/X'X/X MXLX BX8X MWFW Y;Z:R GY=Y JY=Y JY=Y JY=Y KW" + " ,W ,W ,W *]E[ J]@Y JY>Y IY>Y IY>Y IY>Y IY>Y 2Z FY>Y JW6W MW6W MW6W MW6W W7X K]?Y NW7X " + " V=V=U-V$U-VGZJYFU-V7YFU-V$U%W 7X8X &~X/X:T =t @c L~\\'v\"W:W LW4W CXNX ?X>X MV " + " $x EX 2~X2WES :VDWEV FZ :W #W 7XKTKX )V IV 4X4X >X !X 0Y BWDX Dm FXKf " + "/Y AYBY KX5Y MX -X Gd ~X d 5Y ?V>dLUCU6WBW IX;Z Y +X+Y,X -X 0Y +X/X'X -X -XM[ ;X -XIWBWIX" + "0XGW@X)Y'Y.X8X!Y'Y.X9Y M] #X aEa)X@XNW NWA[ ,W DW?[ LX +[=X KW:X =] ?W6W MW'W-XGWGX MW=W JWCWC" + "W MXZ W2W FWBW 9Z ?X 0X%X0X@X@X,X0X(X@X@X/Y'Y(Y IV JY >V ?Y5Y >V CV .YFSDP B" + "X 2q @XJX AV /WK[ :SFV)S;V@X 4VDV LSAV@VCS 6\\ MV CV KU ?W6W MhGU KU 4V?V @V" + "DV 5U9V GU9V >UBV BX 2WBW AWBW AWBW AWBW AWBW AXDX @XBX Y +X -X -X -X -X -X -X -X ,X+Y-XGW" + "@X)Y'Y1Y'Y1Y'Y1Y'Y1Y'Y\"ZCZ&Y9WEY.X/X'X/X'X/X'X/X MYNY BX8Y NWFW X NW $w DX $VBV#XFS :WFXEV H] ;W #W 9XITIX" + " +V JW 4X4X >X \"Y 3[ BWCX Dn GXLi 1X ?ZFZ JY7Z MX -X Je M~X Me 9Y >U?gMUCV7WBW IX>\\" + " NX *X*X,X -X 0X *X/X'X -X -XNZ 9X -XHVBVHX0XGXAX)X%X.X9Y!X%X.X:Y La 'X _ @W6W MW'W.YGWFX NW=W JWCWCW NX:X NYW2W FWBW 8Z @X 0X%X0X@X@X,X0X(X@X@X" + "/X%X)Y HV IY ?V @Y3Y ?V CV /YES 6X 1\\H[ JcJc LV 0WI\\ =TFV)S;WAX 5WEW MTAVAWCS 3" + "W 4~W.W KV ?W6W LgGU KU 4WAW @WEW 6U9V GU9V ?VBV BX 2WBW AWBW AWBW AWBW AWBW AWBW A" + "XAX X *X -X -X -X -X -X -X -X ,X*X-XGXAX)X%X1X%X1X%X1X%X1X%X!ZEZ%X9WCX.X/X'X/X'X/X'X/X LXN" + "X AX7X NWFW !W ,W ,W ,W ,W ,W ,]:X=Y .X9X LX9X LX9X LX9X LW ,W ,W ,W +Z=X K[x A` J~\\(y%W8W MW4W CXMW >W>W MV $x DX $VCV\"XFS 9X" + "IXEV H_ X #Y ?g AVBX Do HXMk 3Y >l HX7Z MX -X Me J~X Je " + "=Y >V?hNUBU8XBX Ju MX *X*X,w Lq IX *~R'X -X -c 8X -XHVBVHX0XFWAX)X%X.X9Y!X%X.X;Z Ke ,X WNV MW" + "Ib +W EW;Y MW *Z;X KV:W =_ @W6W NW%W/XFWFX NW=W JWCWCW NW8X!Y:Y =W >| GW@W 8Y @X 0X%X1Y@X@" + "Y-X0X(X@X@X/XImIX*Y GV HY @V AY1Y @V CV /XDS 6X 0YDY JdLd LV 1WF[ >SFV'SW6W LgGU KU 3WCW ?XFX 7U:V FU:V >UBV AX 3XBX CXBX CXBX CXBX" + " CXBX CXBX BXAw?X *w Lw Lw Lw LX -X -X -X ,X*X-XFWAX)X%X1X%X1X%X1X%X1X%X ZGZ$X:WBX.X/X'X/X" + "'X/X'X/X K` @X7X NWFW W ,W ,W ,W ,W ,W ,[8W=X -W7W LW7W LW7W LW7W LW ,W ,W ,W ,Y:X LZ;X M" + "Y:Y MY:Y MY:Y MY:Y MY:Y \"Y=\\ LW6W MW6W MW6W MW6W MW:W IZ9X NW:W NVV&V 4W:X %~X2TNVW \"W ;WFTFW -V JV 3X4X >X #Y ?f AWBX Dp IXNm 4X ` @W6W NW%W/WEWEW NW=W JWCWCW X8X!X8X =W >| GW@W 7Y AX " + "0X%X1X?X?X-X0X(X@X@X/XImIX+Y FV GY AV BY/Y AV DX 1XCS 6X 0W@X KdLd LV 1VCZ ?SFV'S;WE" + "[ 7XFX G~X .S@VBWAS @~W0W .P>W >W6W KfGU KU 3XEX >XFX 8U;V:W3U;VCZ9P>WCV:W/Y 3W@" + "W CW@W CW@W CW@W CW@W CXBX CX@w?X *w Lw Lw Lw LX -X -X -X 5p9X-XFXBX)X%X1X%X1X%X1X%X1X%X N" + "ZIZ#X:VAX.X/X'X/X'X/X'X/X K` @X7X NWFW W ,W ,W ,W ,W ,W ,[8X?X -X7X NX7X NX7X NX7X MW ,W " + ",W ,W ,X9X LY9W MX8X MX8X MX8X MX8X MX8X \"X=] LW6W MW6W MW6W MW6W MW:W IZ9X NW:W NVLu" + "KU/VLuKU/VBaAU/V:YAU/V=X=U&V 4X;X %~X2RLW>T >{!z'~Z)}(W6W NW4W DXLX ?X@X MV " + " KX ,X %VBV!YHS 8eEV Ic ?W !W ;UETEU ,V KW 3X4X >X $Y >c ?WAX DWD^ JbG] " + "5X 9d DY9[ MX -X #d D~X Dd DY a AW6W NW%W0XEWEX W=W JWCWCW W6W!X8X " + "=W >| HX@X 7Y BX 0X%X1X?X?X-X0X(X@X@X/XImIX,Y EV FY BV CY-Y BV DX 1XCS 6X 1W>W KeNe LV" + " 1VB[ ASFV'S;YI] 9YGY F~X .S@VDX@S @~W1V ,TEZ >W6W JeGU IX +U 2YIY T ?|\"}(~X)~(W6W NW4W DXKW >" + "W@X MV KX ,X %VBV!ZIS 7cEV IYNZ8W 0W !W :RCTCR +V KW 3X4X >X %Y" + " =b >V@X DS=\\ K`C[ 6Y 8b BX9[ Nd A~X Ad HY W ,X8X8W=X8X X6X MY7X\"X7Y MX 0W )W ,W6W MXXMW AW6W NW%W0XEWDW W" + "=W JWCWCW!X6X#X6X >W >| HW>W 6Y CX 0X%X1X?X?X-X0X'XAXAX.XImIX-Y DV EY CV DY+Y CV DX 2X" + "BS 6X 1Vh =W6W JeGU IX 4g :g :" + "YFX DgEV:XhCV:X/X 3X?W EX?W EX?W EX?W EX?W EX@X EX?w?X *w Lw Lw Lw LX -X -X -X 5p9X" + "-XEXCX)X%X1X%X1X%X1X%X1X%X LZMZ!XX7X NWFY !V +V +V +V +V +V +Y6W@" + "X ,W5W NW5W NW5W NW5W MW ,W ,W ,W -X7X MX8X X6X X6X X6X X6X X6X $X=_ MW6W MW6W MW6W MW6W " + "LWS >}%~R)~V(~P)W6W NW4W" + " DWJX ?XAW L~^ $X ,X %VCV N\\LS 6aDVAW0XLZ9W 0W !W :PATAP +V KV 2X" + "4X >X &Z =e BW@X DP8[ L^?Z 7X :h EY;\\ \"d >~X ?e LY ;U@W>YAU:W>W Ks KX *X*X,w Lq IX6f+~R" + "'X -X -b 7X -XGWFWGX0XDWCX)X%X.X@^ NX%X.s Bl 8X X IXDVCVDX)[ 4\\ -Z @W *V #W $" + "W JX5W\"X -W5X W4W KW 0W5X MX7W MW ,W ,WIZ =W ,X8X8W=X7W W4W MX5W\"W5X MX 0X *W ,W6W LWX >XMX BW6W W#W1WD" + "WDW W=W JWCWCW!W4W#X6X >W >| HW>W 7Y BX 0X%X1X?X?X-X0X'XAXAX.XImIX.Y CV DY DV EY)Y DV " + "DX 2XBS 6X 2WY BSFV'S9bMV ;XFY D~X .S@h>S @~W2i >g W EW>W EW>W EW>W EW>W EW>W EX?w?X *w Lw Lw Lw LX -X -X -X 5" + "p9X-XDWCX)X%X1X%X1X%X1X%X1X%X Ke X=W?X.X/X'X/X'X/X'X/X I\\ >X7X NWEY \"W ,W ,W ,W ,W ,W ,X5W" + "@X -W4W W4W W4W W4W MW ,W ,W ,W -W6X MX7W W4W W4W W4W W4W W4W $W=VMW MW6W MW6W MW6W MW6W " + "LW=X HX5W NW=X MVLuKU/VLuKU/V?[>U/V=Y>U/V=X=U&V 3X=W 7X FW@T ?~&~T*~V)~R*W5V NW4" + "W EXJX ?XBX L~^ $X ,X &VBV Mb 4]CVC]4XJZ:W 0W !W +T KV KV 2X4X >" + "X 'Z X Lu MX *X*X,w Lq IX6f+~R'X -X -c " + "8X -XFVFVFX0XDXDX)X%X.u MX%X.r ?l :X X IXDVCVDX)\\ 4Z ,Y ?W *V #W $W JX5W\"W ,W" + "5X W3W LW 0W5X MX7W MW ,W ,WJY ;W ,X8X8W=X7W W4W MX5W\"W5X MX 0X *W ,W6W LWW 6Y 0X 9V LX 5`3R 0T?[?T/W:[ KWId DbKW HW5X NW +X7W JV>W =WLX BW6W W#W1WDWDW W=W JWC" + "WCW!W4W#W4W >W >| IX>X 9Y AX 0X%X1X?X?X-X0X'XAXAX.XImIX/Y BV CY EV FY'Y EV DX 2WAS ?r " + "CV:V =^ =V 2V=Y CSFV'S8`LV e :W6W GbGU IX 4g 8c 5XFX FgFV" + ":YX GX>X GX>X GX>X GX>X GX>X FX?w?X *w Lw Lw Lw LX -X -X -X 5p9X-XDXDX)X" + "%X1X%X1X%X1X%X1X%X Jc NX>W>X.X/X'X/X'X/X'X/X HZ =X7X NWEZ #W ,W ,W ,W ,W ,W ,X4WAW ,W3W!W3" + "W!W3W!W3W NW ,W ,W ,W .X5W MX7W W4W W4W W4W W4W W4W $W>VLW MW6W MW6W MW6W MW6W KW>W GX5W " + "MW>W LVLuKU/VLuKU/V>Z>U/V>Y=U/V=X=U&V 2W>X 8Y FW@T ?~P(~V*~T(~Q)V4V NW4W EXJX >W" + "BX L~^ $X ,X &VBV Ld 4WAVD`6XHZ;W 0W !W +T KV LW 2X4X >X 'Y ;i G" + "V>X *Z M\\;Y 9X =p HZ?^ 'd Id$Y 9UAWX GWEVJVEW#a >W>W 7Y 1Y " + "8V KY 9e8T 0T?Z>T0X:[ KWIf GdLW HW4W MW ,W6W JV?X >XKW BW6W W#W2XDWDX!W=W JWCWCW!W4W#W4W" + " >W >| IWX GX>w?X *w Lw Lw Lw LX -X -X -X 5p9X-XCWDX)X%X1X%X1X%", + + // Second string: + "X1X%X1X%X Ia MX?W=X.X/X'X/X'X/X'X/X GX W GX5W MW>W " + "LVLuKU/VLuKU/V?\\?U/V?YX 8X DWBT ?~Q)~W)~R&~(V4V NW4W EWHW >WBW K~^ " + " $X ,X &VBV Kg \"VEc8WFZ=W /W !W +T 4~W 5V 1X4X >X (Y -] IW>X )Y M[9X 9" + "X >\\F\\ H[C` 'a Ca$Y 9UAV:WAU;WW )V $W 6i JX5X$X -X5X V2W LW 1W3W " + "MW6W MW ,W ,WLY 9W ,W7W7W=W6W!X4X NX5X$X5X MW .[ .W ,W6W KW>W FWEVJVEW#a >W?X 8Z 4\\ 8V K[" + " =iW" + "2W IWX X *X -X -X -X -X -X -X -X ,X*X-XCXEX)X%X1X%X1X%X1X" + "%X1X%X H_ LX@Wi >i >i >i >i >i3WBX ,V2W!V2W!V2W!V2W NW" + " ,W ,W ,W .W4W MW6W!X4X\"X4X\"X4X\"X4X\"X4X M~Y2X@VIW NW6W MW6W MW6W MW6W KW?X GX5X NW?X L" + "VLuKU/VLuKU/V@^@U/V@Y;U/V=X=U&V 2X?W 8X CWBT ?~R*~X)~Q%}(V4W W4W FXHX ?XDX K~^ " + " $X ,X 'WCV Ii &VEe:XEZ>W /W !W +T 4~W 5V 1X4X >X )Y )[ KW=X (Y N[9Y ;Y " + "?Z@Z I]Gb '^ =^$X 9U@V:WAUXIW CW6W!W!W3WCWCW!W=W JWCWCW\"W2W%W3X ?W >W" + "2W JW;X ~R+~Z*~P#{'V4W W4W FXHX ?XDX K~^ $X " + " ,X 'VBV Gi (VFg;WCZ?W /W !W +T 4~W 6W 1X4X >X *Y &Z LW=X (Y NZ7X ;X ?Z>Z ImNX " + "'[ 8\\%Y 9UAW:WAUX XIW CW6W!W!W3WCWCW!W=W JWCWCW\"W2W%W2W ?W >W2W JW:W =Y >X 0Y'" + "X0X?X?X-X0X%XCXCX,X%X2~a GV H~a HV I~b HV DX 3W@S ?r DV8V V&V 1XAW 9" + "X @WDT ?~S+~Z)}!y'W4W W4W FWFW >WDW J~^ *r ?V &VBV Eh *VEXIXX +Y $Z NWXHX DW6W!WW2W KX:X ?Y =X /X'X0Y@X@Y-X0X%YDXDY,X%X2~a " + "GV H~a HV I~b HV DX 3W@S ?r DV8V ;X DW;V DSFV'S >XFX ;V .S@VFW=S (V \"W6W " + ":UGU IX 0XFX -V;TLU MV0U!V;TLU6Y 0X:X KX:X KX:X KX:X KX:X KX:X JWV&V 1XBX :X ?WDT ?~S,~[({ x&W4W W" + "4W FWFX ?XFX JV \"q >V &VBV Af -VEXGX=W@ZBW .W !W +T 4~W 5f 8V 0X4X " + ">X ,Y \"Y W;X 'X NZ7X X -XDVJVDX0XAXGX)X%X.i AX%X.X>Z ,\\ ?X XGW DW6W!WW2W KW9X ?Y =X /X'X/X@X@X,X0X$YEXEY+X%X2~a GV H~a HV I~b HV DX " + "3W@S 6X 3V8V ;X DXWEW :V .TAVEW?T (V \"W6W :UGU IX /WEW .V;" + "TKU NV/U\"V;TKU7Y /X:X KX:X KX:X KX:X KX:X KX:X KXWDS >~T-~\\(y Mw&W4W W4W GXFX ?XFX JV " + " #r >V 'WCV X -Y Y!W;X 'Y Y5X =X" + " @Y8Y HgKX 'a Ca%X 8UAV8VAU=W8W NX4X%X *X+Y,X -X 0X(X+X/X'X -X -XI[ ?X -XDWLWDX0X@WG" + "X)X&Y.X 0X&Y.X=Y *[ @X XFX EW6W!WW2W KW8W @Y ] Jt It It It It It I~iBW ,|\"|\"|\"| NW ,W ,W ,W /W2W NW6W!W" + "2W\"W2W\"W2W\"W2W\"W2W M~Y2WCVEW NW6W MW6W MW6W MW6W IWCX EW3W LWCX IV=V=V.V$V.VFYKZFV.VFY" + "7V.V$V&V 0XCW ;Y =WFT >~T-~\\'w Ku%W4W W4W GXEW >WFW IV #q =V 6~X " + "JSN^ /VEWCW?W=ZDW .W !W :~W 5f 9V /X4X >X .Y MX\"W:X &X Y5X >Y @X6X FcJX &d Id" + "%X 8UAV8VAU>X8X X4X$X +X+X+X -X /X)X+X/X'X -X -XH[ @X -XCVLVCX0X@XHX(X'X-X /X'X-XXFX EW6W!WV-V%V-VGYIZHV-VGY7V-V%V%V " + "/WDX ;X ~T-~\\'v Is$W4W W4W GWDX ?XGW HV %r =V 6~X JSJ[ 0VEV" + "AV?WX ?X6X D`IX $d Ne#X 8UAV8" + "VBU=x X4X$X +X+X+X -X /X)X+X/X'X -X -XG[ AX -XCVLVCX0X?WHX(X'X-X /X'X-X;Y *Y @X WDW EW6W!WV>V,V&V,VIYGZIV,VIY6V,V&V&W /XEW N~X'VGT =~T-~\\" + "&u Ir#W4W NV4W HXDX ?XHX HV KX ,V 6~X JSHZ 2VDVAV?W;ZGW -W !W \"V " + "Lf :W .X6X =X 0Z LY#~ /X NX5X >X @X5Y AYFX !d >~X >d X 8UAV8VBU>z!X3X%X +X+X+X -X /X" + ")X+X/X'X -X -XF[ BX -XCWNWCX0X?XIX(X'X-X /X'X-X:X )Y AX XDX FW" + "6W!WV?W,V'W,VJYEZKW,VJY6W,V'W&W /XFX N~X'WHT =~T-~\\%s Gp\"W4W NV4V GXCW >WH" + "X HW LX ,V 6~X JSGY 3VDWAW@W:ZIW ,W !W \"V Lf :W .X6X =X 1Z JX#" + "~ /X NX5X ?Y @X4X .X Md A~X Ad LX 8UAV8VBU>z!X3X%X +X+X+X -X /X)X+X/X'X -X -XE[ CX -XB" + "VNVBX0X>WIX(X'X-X /X'X-X9X *Y AX Q.X $T>Z?T0W8W HW5W\"WWCX FW6W!WXFX >V ,SBVBWCS &V \"W6W :UGU *m 8XFX .VWIX(X'X/X'X/X'X/X'X/X'X KZMZ XHW6X-X" + "/X'X/X'X/X'X/X GX XIW GW LX " + " ;~X JSFX 3VDV?V@W9ZJW +V \"W !V V -X6X =X 2Z IX#~ /X NX5X ?X ?X4X .X Jd D~" + "X Dd IX 8UAV8VCV>z!X3X%Y ,X,Y+X -X /Y*X+X/X'X -X -XD[ DX -XBVNVBX0X>XJX(Y)X,X /Y)X,X9Y *X " + "AX XBW FW6W!WXJX(Y)X.Y)X.Y)X.Y)X.Y)X KZKZ!YJW6X,X/X'X/X'X/X'X/X GX |\"X3X$X ," + "X,X*X -X .X*X+X/X'X -X -XC[ EX -XA\\AX0X=WJX'X)X,X .X)X,X8X *X AX XBX GW6W!WW 9X =\\KW >SEWWJX FW LX <~X JSEX 6WCV?V@W7ZMW *W #W !V !W -X6" + "X =X 4Z GX#~ /X NX5X @X >X4X /X De J~X Je DX 8U@V:WDV>|\"X3X$X ,X-Y*X -X .X*X+X/X'X -X" + " -XB[ FX -XA\\AX0X=XKX'X*Y,X .X*Y,X8Y +X AX W WJW DW" + " MX .VCV :SDW 6VBV?V@W6b )W #W !V !V +X8X X4X /X Ad L~X Ld AX 8VAV:WDU=|\"X3X$Y -X-Y*X -X .Y+X+X/X'X -X -XA[ GX -XA\\AX0XWKVDVKW\"XLX 9WJW =Z #X" + " :V MX AUEVKVDU/X:Y IW5W#WX@W GW6W!W=Y=W2WDWDW W=W JWCWCW\"X4W#W4" + "W >W X4X 0X =d ~X" + " d LUAWX2X#X3X#X -X.Y)X -X -X+X+X/X'X -X -X@[ HX -X@Z@X0XW " + ",W7W7W=W6W W4W MX5W\"W5X MW BX FW ,W7X FWHW >WLVBVLW#YKX :WJW =Y !W :V MW @VHXJWHV-W:" + "Y IW5W#WY>W1WDWDW W=W JWCWCW\"X4W#W4W >W W MW7X MW7X MW7X MW7X EWJW AX5W GWJW AXCVCW%X0W%X0W%X0W%X0W\"V +WJX " + " ?X 2WLT 9bKQKb)gLQMh Mi =g MW4W MV6W IX@X ?XLX CW MX 0VBV :SDW " + "7VAV?V@X5_ (W #W !V \"W +X8X XL" + "V;VLX1Y?Y >X 9Z 2W %W )W EW7X JX5W\"X -W5X X )W 0X7Y MW6W MW ,W ,WFY ?W ,W7W7W=W6W W4" + "W MX5W\"W5X MW AW FW ,W7X FXJX =WMVBVMW#YJY ;WKX >Y W :V MW ?dId,W;Z IW5W#W=W DW4W!W" + " )W6W DVKW >X>W HW6W W>Y>W1WDWDW W=W JWCWDX\"X4W#W4W >W ;V7W LX2X LY 4X *X1X%]JXJ]'X0X Hj L" + "Y-Y%Y IV JY LYKVKY MY5Y MYJVJY $X 2XBS 6X 2q 9X :V #\\ 7TDgFT /XFX EV )TFV>VJT #" + "V \"W6W :UGU +XFX *V=TCU%V1V!V=TCU=X ,X1W$X1W$X1W$X1W$X1W$X2X%X7X LY .X -X -X -" + "X -X -X -X -X ,X.Y*X;XMX&Y-Y+Y-Y+Y-Y+Y-Y+Y-Y ZAZ$_3Y*X1X%X1X%X1X%X1X FX W3W$W7X MW7X M" + "W7X MW7X MW7X MW7X MW7Z NX -X -X -X -X +W ,W ,W ,W .W4W MW6W W4W W4W W4W W4W W4W 5Z IWMV=W" + " MW7X MW7X MW7X MW7X EWKX AX5W GWKX @XDVDX$X2X$X2X$X2X$X2X\"V +XKW ?X 1WMT 7`JQKa" + "'fLQLf Kg W >WLW BX NY 1VBV :SDW 8V@V?V?W4] &V $W " + " V \"V *Y:Y YGW>X0X$X4Y\"Y /X/Y(X -X" + " ,Y-X+X/X'X -X -X>[ JX -X@Z@X0X;XMX%Y/Y*X ,Y/Y*X6Y -X AX ;Y3Y IXLX =WLV;VLW0X=Y ?X :Z 1W $" + "V )W EW8Y JY7X\"X -X7Y X )W 0X7Y MW6W MW ,W ,WEY @W ,W7W7W=W6W X6X MY7X\"X7Y MW AW FW" + " ,X8X EWJW Y NW :V MW >bGc,W;[ JW6X#W=W DX6X!W )W6W DVLX >W=X IW7" + "X W>Y>W1XEWEX W=W IWDWDW!Y6X#X6X >W ;W8W MX0X MY 4X *Y3Y$^LXL^&X0X Ff IY/Y#Y JV KY JYLVL" + "Y KY7Y KYKVKY #X 2XBS 6X 3t ;X :V ![ 8TCfFT .XFX FV )UGV>WKT MW7X :UGU " + " ,XFX *V=TBU&V2W!V=TBU=X -X0X&X0X&X0X&X0X&X0X&X0W%X7X KY /X -X -X -X -X -X -X -X ,X/Y)" + "X;XMX%Y/Y)Y/Y)Y/Y)Y/Y)Y/Y Z?Z$^4Y)Y3Y%Y3Y%Y3Y%Y3Y FX XEVFY\"X5Y\"X5Y\"X5Y\"X5Y!V *WLX @X /WNT 7`JQJ_&eKQKe Je :d KW4W MW8" + "W HW>X ?XNX AX Y 1VCV 9SDW 9V?V?V?X4\\ &W %W V \"V )X:X ;X 9Z" + " CX 4X (Y KW7X AX W BW6W W )W6W DWMX ?X=X IX8X W?[?W0WEWEW NW=W " + "IWDWDW!Y6W!W6W =W ;W8W MX0X NY 3X )Y5Y\"z%X0X C` FY/Y\"X JV KX HYMVMY IX7X IYLVLY \"X 1XCS" + " 6X 4v X ?XNX AY " + " Y4P VBV 9SDW 9V?V?V?Y4Z %W %W V #W )X:X ;X :Z CY 4X (Y KX9Y AX ;X6X 1" + "Y 1e /e @U@XB[JXW BX8X W )W6W CVNX >W;W IX8X X@[@X0XFWEW NW=W IWDWEX!Z8X!X8X =W :W:W LX" + "0X Y 2X (Y7Y Nv#X0X ?X AY1Y V IV JV FYNVNY GV5V GYMVMY !X 1XCS 6X 5x =X :V MZ 8T?ZBT" + " *VDV FV 'T&T KX8X :UGU ,VDV )VWNX @Y !Z6Q VBV K" + "P>SEW 9V>WAW>X3Z &W %W V #V 'XU?" + "ZH^MZ\\ JX8X\"W?W AX" + "9Y X *W6W CVNX ?X;X JX9Y NW@[@W/XFWFX NW=W IXEWEX!Z8X!X8W ;W ;W;X MX.X\"Y 1X 'Y9Y Lt\"X0X ?X" + " @Y3Y MT HV IT Dj ET3T EYNVNY X 0XDS 6X 6ZM`LY >X :V LY 7T)T (UCU ET(T " + " JX9Y :UGU ,UCU )V;m.V3V NV;mCY7P HX.X(X.X(X.X(X.X(X.X(X.X(X6X IY.R&X -X -X -X -" + "X -X -X -X ,X2Z'X9a$Z3Y&Z3Y&Z3Y&Z3Y&Z3Y!Z9Z&Z3Y&Y5Y#Y5Y#Y5Y#Y5Y EX ` >Y !Y8S MX +VBV KQ?SFX 9V=VAV=Y6] &V &W" + " NV BX 1X 1V 'Y>Y :X X:W JY;Z NXB]BX.XGWGX MW=W HXFWFX [:X NX:X ;W :WX HXX 9X =Z 1P2Z 3X GQ5Z GX=Y @X 9Y:Y KP8Z GX -X 4^ 1^ +X 5U?gM_9W,W%X7Z L[4U&X6]%X -X )" + "[2X+X/X'X -X -X9[ X -X&X0X8`\"Z7Z'X )Z7Z'X3X%T2Y ?X 9Z9Z E` :_9_3Y7Y BX >Z -W #W +W D" + "X=\\ J\\=Y LY7P HY=\\ LY5R JW -Y?] MW6W MW ,W ,W@Y EW ,W7W7W=W6W MYX LX.X#Y 0X %Y=Z Gl MX0X ?X ?Z7Z JP FV GP @f AP/P Ah MX " + "/YFSDP BX 8ZFVEY @X :V JX 7V.U %SAS CU.U HZ" + "\\=Y B^ 7r Gr Gr Gr Gr KV (_ BX )Y S 8RBSCR <] 2\\ GW4W KZBZ HX;W >_ <[ " + " $[=U MX ,VBV JUCSHY :V;WCW<[Z 0R5Z 2X GT9[ G" + "Y?Z AY 9[>[ KR;Z FX -X 1[ 1[ (X 5V>dL^9X,X&X9[ J[7W&X9_$X -X (\\6Z+X/X'X -X -X8[!X -X&X0X" + "8`![;[&X ([;[&X3Y&W7[ ?X 8Z;Z D` :^7^3X5Y CX ?Z ,W #W +W DY?] J]?Y KZ:R GY?] LZ8T JW" + " -ZA^ MW6W MW ,W ,W?Y FW ,W7W7W=W6W LY>Y J]?Y KY?] MW /T9X DX ,Y@] CWNW 9]>]'Y@Y =^ AY IW" + " :V MW HYCXNW L\\>Y VAX >Y>Y LY ,W6W B] >X9X K[>[ MXDVMVDX,YIWIY LW=W GYHWHY N]>Y LY" + ">Y :X :X@X LX,X%Y /X $ZAZ Ch KX0X ?X >[;[ ?V 6d >f LX /[HSFR BX 9Z3Y AX :V IX 7" + "V1V #R@R BU0U G[>[ :UGU ,R@R 'V(U)V6W LV(UU IX,X*X,X*X,X*X,X*X,X" + "*X,X*W4X G[7W&X -X -X -X -X -X -X -X ,X9_%X8`![;[![;[![;[![;[![;[\"Z3Z(];[\"Z;Z NZ;Z NZ;Z NZ" + ";Z CX Y JW6W LY>Y IY>Y IY>Y IY>Y IY>Y 2Z FY>Y HY@] KY@] KY@] KY@] B^ >]?Y A^ 6o Do Do Do " + "Do IV (_ CX (Y S (S ,[ 0[ GW4W J\\H\\ GW:W >^ :\\ %[@W MX ,VBV JXFS" + "IZ :V:WEW:\\@e (V 'V MV BX 1X 2V $ZDZ 8X ?Z /U;] 2X GV=\\ EZC[ @X 7[@[ JT?[ EX -X /Y " + " 1Y &X 5V=bK\\7X,X&X<^ I]=Z&X=b#X -X ']:\\+X/X'X -X -X7[\"X -X&X0X7_ \\?\\%X '\\?\\%X2X&Z<\\ >X 7[" + "?[ B^ 9^7^4Y5Y CX ?Y +W \"V +W DZB_ J_CZ I[>T G[C_ K[=W JW ,\\GXNW MW6W MW ,W ,W>Y GW " + ",W7W7W=W6W KZBZ I_CZ J[C_ MW /W>Z DZ .ZB^ C` 8\\>\\&X>Y =\\ AY HW :V MW GZFYNY N]AZ N" + "WCX _ FX0X ?X =\\?\\ >V 5b W;[>T F[=W J[=W J[=W J[=W LW ,W ,W ,W *ZBZ IW6W KZBZ GZBZ " + "GZBZ GZBZ GZBZ 1Z F[BZ GZB^ KZB^ KZB^ KZB^ A\\ =_CZ ?\\ 3l Al Al Al Al HV (^ BX (X " + " NS (S ,Z .Y FW4W In GX:X ?^ 9_ (]FZ MX ,VBV J[ISL\\ :V9XGX9^Fi )W )W " + " MV BX 1X 3W #[H[ Et Mx MZC_ 1X GZD^ C[G\\ @Y 7^F] IXF] DX -X ,V 1V #X 4V<^IY5X*X'y G" + "_D^&{!y NX &`B`+X/X'X -X -X6[#w LX&X0X7_ N^E^$X &^E^$X2Y'^C^ =X 7^E^ B^ 8]7]4Y3Y DX @~U&W " + "\"W ,W C\\HYNW JWNXG\\ H]EX F\\GXNW J]D[ JW +kMW MW6W MW ,W ,W=Y HW ,W7W7W=W6W K]H] IWNX" + "G\\ I\\GXNW MW /[E\\ Be 9[GXNW B^ 7\\>\\'XP @W8W 3~W :_GaKP" + " @UGU ,P>P 'V&U+V6V KV&U;]GZ JX*X,X*X,X*X,X*X,X*X,Y,Y,X4y7_D^&y Ny Ny Ny NX -X -X -" + "X ,{\"X7_ N^E^ L^E^ L^E^ L^E^ L^E^ MV/V(dE^ N^E^ L^E^ L^E^ L^E^ BX \\ Av 6W :V MW FkL]$u LXGX 9p Hp EW6W A[ ?X6X LpN\\#hKh)s JW<] Lu LWNm Hp 6` Bl K~" + "W'x MX 1iEi HX CX0X ?X ;u X :V HW 3X=X )X\\ " + " /c 8c 8c 8c 8c CV '\\ ?T %W U *T *W ,V DW4W Gj EW8W >\\ 5~P In LX " + " -VBV Is 9V7g6qJZ *V )V LV BX 1X 3V !l Dt Mx Mt /X Gr ?m ?X 4r Hm BX -X &P 1P LX" + " 3V 3X*X'w Cv%x My NX #x(X/X'X -X -X4[%w LX&X0X5] Ls\"X $s\"X1Y(w ;X 5s ?\\ 7\\5\\5Y1Y EX @~U&W" + " !V ,W BjLW JWMj Dn DjMW Hr JW )hLW MW6W MW ,W ,W;Y JW ,W7W7W=W6W In GWMj EjMW MW /p" + " ?d 8iLW B^ 6Z<[)Y:Y >Z @v 6W :V MW EiK]$t JYLZ 7n Fo EW6W A[ ?X5W LWNfM\\\"gKg'q IW<" + "] Ks KWMk Fn 5` Aj J~W'x MX 1iEi HX CX0X ?X :s ;V 2\\ 6^ HX +n Lz MR,R =X :V HW " + "1ZEZ %ZDZ 0~W :WNfM\\ @UGU !V%U,V6i/V%U9n JX*X,X*X,X*X,X*X,X*X,X*X-" + "X3y5v%y Ny Ny Ny NX -X -X -X ,x NX5] Ls Hs Hs Hs Hs IR+R(WMs Js Hs Hs Hs @X R $V NU *U *U *U DW4W Fh DW8X ?\\ " + "4~ Hl KX -VBV Hp 8V5e4nGZ +W +W LV BX 1X 3V j Ct Mx Mr -X Gq =j " + ">Y 3p Gl AX -X 2X 3W 5X(X(u ?s$v Ky NX \"v'X/X'X -X -X3[&w LX&X0X5] Kq!X #p X0X(v :X " + "4p =\\ 7\\5\\6Y/Y FX @~U&W !V ,W AhKW JWLh Bm ChLW Gq JW (eJW MW6W MW ,W ,W:Y KW ,W7W7W" + "=W6W Hl FWLh ChLW MW /o >d 7gKW A\\ 5ZZ @v 6W :V MW DgI\\$s He 5l Dn EW6W @Y " + ">W4X MWMeM\\!eIe%o HW<] Jq JWLi Dk 2_ @h J~Y(x MX 1iEi HX CX0X ?X 9q :V 1Z 4\\ GX *m" + " Lz LP*P X X ?v 6W :V MW CeG[$r Fc " + "2h Am EW6W @Y ?X3W MWMdL\\ cGc#m GW;\\ Hm HWKg Ah /] ?f I~Y(x MX 1iEi HX CX0X ?X 7m 8V 0" + "X 2Z FX (j Kz AX :V HW -g Lh ,~W :WMdL\\ @UGU \"V$U-V5i0V$" + "U7i HX(X.X(X.X(X.X(X.X(X.X(X/X2y1o\"y Ny Ny Ny NX -X -X -X ,t JX4\\ Im Bm Bm Bm Bm %VHm Dm " + "Bm Bm Bm =X eJW GeJW GeJW GeJW ?X ;WJe 9X MW &Z =U W ,W *" + "R &Q BW4W B` AW6W >[ /y Dd GX -VCV Af 5V2a.gBZ ,W -W KV CX 0X 4V " + " Kd @t Mx Km *X Ek 6d ;X .h Bh >X .X 1X 1W 7X(X(q 7j Np Ey NX Mm\"X/X'X -X -X1[(w LX" + "&X0X4\\ Gi LX Ni LX/X$n 7X 0i 9Z 5[5[6Y-Y GX @~U&W V -W >cIW JWIb k EW6W @Y ?W2W MWK`I[ NaEa i EW;\\ Fi FWIc >e ,\\ =b G~Y(x MX 1iEi HX CX0" + "X ?X 5i 6V /V 0X EX &f Iz AX :V /P;W *c Gb )~W :WK`I[ @UGU " + " #V#U.V4i1V#U6f FX(X.X(X.X(X.X(X.X(X.X(X/X2y/j Ny Ny Ny Ny NX -X -X -X ,p FX4\\ Gi >i " + ">i >i >i $VEi @i >i >i >i ;X i0g ;i >i >i >i HW " + ",W ,W ,W #d BW6W Ef ;f ;f ;f ;f JUJe ;cIW FcIW FcIW FcIW ?X ;WIb 7X MW %Y " + " =T X -X )P %P AW4W ?Z >W6X ?Z ,w B` EX .VBV <] 1V0]*b?[ -W -W" + " KV CW /X 4V I` >t Mx Hg 'X Bf 2` :X +d =b ;X .W 0X 1X 9X&X)m 0d Kj ?y NX Jg " + "NX/X'X -X -X0[)w LX&X0X3[ Dc IX Kf LX/Y!g 4X .e 7Z 5Z3Z7Y+Y HX @~U&W V -W =`GW JWG" + "^ 7b 9^GW Ad CW \"YDW MW6W MW ,W ,W7Y NW ,W7W7W=W6W B` @WG^ 9^GW MW (c 2] 3_GW @Z 3X:X*Y4Y " + "@X ?v 6W :V MW ?_AW$WKb @^ +` 9g CW6W ?W ?X2X NWJ^GY K]B^ Ke CW:[ Dd CWG_ 9` 'Y ;^ " + "F~[)x MX 1iEi HX CX0X ?X 2c 3V .T .V DX $b Gz AX :V /R>X &[ ?Z %~W " + " :WJ^GY ?UGU #V +V +V 1b EX&X0X&X0X&X0X&X0X&X0Y'X1X1y,d Ky Ny Ny Ny NX -X -X " + "-X ,j @X3[ Dc 8c 8c 8c 8c !VBc ;e :e :e :e 9X Y BS .V,W#Z ;V -V " + " 7W ;W EX ;\\ 6] +Z 5\\ 5Z WGXBU FX=X E` \"W >] @WDY 3Z " + "2X C[ >T :[ KV /TAY EWGXBU =UGU" + " BT 6V +V +V ,Y ?\\ +[ 0[ 0[ 0[ 0[ KT=[ 2[ 0[ 0[" + " 0[ 7Z ;Y .Y .Y .Y .Y .Y -Y2\\\"Z /\\ 1\\ 1\\ 1\\ CZ 3Z /Z /Z /Z /Z FVCZ 1Y .Y ." + "Y .Y ,W :WDX 2W LW 7R #S" + " >W /W 8W :V \"W 5X )X " + " &Z CW NV .W :W %W @W :W " + " -X -W :V MW LW FW ?W >W NW 0W =W " + " 3S GV /XGZ DW HUGU AT %" + "T 'R JT " + " #T (X :W NX LW " + " 7S =V /V 7W :V \"W 4X'Q " + "&Y %Z DW NV .W :W %W @W :W " + " -W ,W :V MW LW FW ?W >W NW 0W =W " + " 3S GV /j CW HUGU @T " + " %T 'P HT " + " \"Q 'W 9W NW KW " + " 7S =W 1W 7V :W \"V 2X)R " + " &X #Z EW NW /W :W %W " + " @W :W -W ,X ;V NX LW FW ?W >W NW 0W =W " + " 3S GV /j CW HUGU @U " + " &U U " + " \"P 'W 9W NW KV " + " 6S W NW 0W =W " + " 3S GV /h AW HUGU ?T " + " %T NT " + " )X 9W X KV " + " 6S W NW 0W =W" + " 3S GV .f @W HUGU ?" + "U &U " + " U *W 8W W JV " + " 6S ;V 3V 6V :W \"V " + " .[5[ *Y Z Ha (W :a W NW 0W" + " =W 3S GV +a >W HUGU " + " >T %T " + " NT +X 8W !X (VIV " + " 6S :V 5V 5U 9W \"" + "U +\\;] )X MZ Ia (W :a " + " =Y %W ?W :W /W )[ ?V #[ KW FW ?W >W N" + "W 0W =W 3S GV 'Z ;W " + " HUGU >U &U " + " U ,W 7W !W 'VIV " + " 6S :V 6W 6V " + " 4V *_C` )Y LZ Ja :a " + " (P7Y $W ?W :W 0X (b GV +b JW FW ?W >W " + " NW 0W =W 3S GV " + "7W HUGU >U &U " + " U -X 7W \"X 'VJW " + " 6S 9V 7V 5U " + " 3U 'x (Z KZ Ka :a " + " (R:Z $W ?W :W 0X (b GV +b JW FW ?W >W" + " NW 0W =W 3S GV " + " 7W #U &U " + " U -X 7W \"X &UJW " + " 6S 9W 9W " + " Bu ([ IZ La :a " + " (T>[ $X ?W :W 1X &a GV +a IW FW ?W >W N" + "W 0W =W 3S GV 7W " + " $V 'V " + " !V .X 6W #X %VLW " + " 5S " + " 2p -a 8XE] %Y" + " >W :W 3Z $_ GV +_ GW FW ?W >W NW 0W =W " + " 3S GV 7W /QGW " + " 2QGW ,QG" + "W 0Z 6W %Z %a " + " 5S 0l " + " +a 8p +_ " + " >W :W ;a !] GV +] EW FW ?W >W NW 0W =W " + " 3S GV 7W /` " + " 1` +` " + " 7a 5W -a #` " + " >e '`" + " 7o *^ =W :W " + " ;` KY GV +Y AW FW ?W >W NW 0W =W " + " 3S GV 7W /` 1` " + " +` " + " 7` 4W -` \"_ " + " 8\\ #_ " + " \"} 3n )^ =W :W ;` 9V " + " BW FW ?W >W NW 0W =W 'V " + " 7W /_ 0_ " + " *_ 6` 4W -` " + " !] " + " -] " + " } 3l '] W NW 0W =W 'V " + " 7W /^ /^ " + " )^ 5_ 3W -_ N[ " + " " + " ,[ M} 2j " + " &\\ ;W :W ;^ 7V BW FW ?W >W NW 0W =W" + " 7W -Y " + " *Y $Y " + " 2^ 2W -^ LX " + " " + " *X J} /d #Z 9W :" + "W ;\\ 5V BW FW ?W >W NW 0W =W " + " 7W " + " " + " /\\ 0W HT " + " " + " I} *[ NW 6W :W ;Z 3V " + " BW FW ?W >W NW 0W =W " + " 7W " + " /Z .W " + " " + " =} " + " " + " " + " " + " D" }; + + // Define a 40x38 'danger' color logo (used by cimg::dialog()). + static const unsigned char logo40x38[4576] = { + 177,200,200,200,3,123,123,0,36,200,200,200,1,123,123,0,2,255,255,0,1,189,189,189,1,0,0,0,34,200,200,200, + 1,123,123,0,4,255,255,0,1,189,189,189,1,0,0,0,1,123,123,123,32,200,200,200,1,123,123,0,5,255,255,0,1,0,0, + 0,2,123,123,123,30,200,200,200,1,123,123,0,6,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,29,200,200,200, + 1,123,123,0,7,255,255,0,1,0,0,0,2,123,123,123,28,200,200,200,1,123,123,0,8,255,255,0,1,189,189,189,1,0,0,0, + 2,123,123,123,27,200,200,200,1,123,123,0,9,255,255,0,1,0,0,0,2,123,123,123,26,200,200,200,1,123,123,0,10,255, + 255,0,1,189,189,189,1,0,0,0,2,123,123,123,25,200,200,200,1,123,123,0,3,255,255,0,1,189,189,189,3,0,0,0,1,189, + 189,189,3,255,255,0,1,0,0,0,2,123,123,123,24,200,200,200,1,123,123,0,4,255,255,0,5,0,0,0,3,255,255,0,1,189, + 189,189,1,0,0,0,2,123,123,123,23,200,200,200,1,123,123,0,4,255,255,0,5,0,0,0,4,255,255,0,1,0,0,0,2,123,123,123, + 22,200,200,200,1,123,123,0,5,255,255,0,5,0,0,0,4,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,21,200,200,200, + 1,123,123,0,5,255,255,0,5,0,0,0,5,255,255,0,1,0,0,0,2,123,123,123,20,200,200,200,1,123,123,0,6,255,255,0,5,0,0, + 0,5,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,19,200,200,200,1,123,123,0,6,255,255,0,1,123,123,0,3,0,0,0,1, + 123,123,0,6,255,255,0,1,0,0,0,2,123,123,123,18,200,200,200,1,123,123,0,7,255,255,0,1,189,189,189,3,0,0,0,1,189, + 189,189,6,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,17,200,200,200,1,123,123,0,8,255,255,0,3,0,0,0,8,255,255, + 0,1,0,0,0,2,123,123,123,16,200,200,200,1,123,123,0,9,255,255,0,1,123,123,0,1,0,0,0,1,123,123,0,8,255,255,0,1,189, + 189,189,1,0,0,0,2,123,123,123,15,200,200,200,1,123,123,0,9,255,255,0,1,189,189,189,1,0,0,0,1,189,189,189,9,255, + 255,0,1,0,0,0,2,123,123,123,14,200,200,200,1,123,123,0,11,255,255,0,1,0,0,0,10,255,255,0,1,189,189,189,1,0,0,0,2, + 123,123,123,13,200,200,200,1,123,123,0,23,255,255,0,1,0,0,0,2,123,123,123,12,200,200,200,1,123,123,0,11,255,255,0, + 1,189,189,189,2,0,0,0,1,189,189,189,9,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,11,200,200,200,1,123,123,0,11, + 255,255,0,4,0,0,0,10,255,255,0,1,0,0,0,2,123,123,123,10,200,200,200,1,123,123,0,12,255,255,0,4,0,0,0,10,255,255,0, + 1,189,189,189,1,0,0,0,2,123,123,123,9,200,200,200,1,123,123,0,12,255,255,0,1,189,189,189,2,0,0,0,1,189,189,189,11, + 255,255,0,1,0,0,0,2,123,123,123,9,200,200,200,1,123,123,0,27,255,255,0,1,0,0,0,3,123,123,123,8,200,200,200,1,123, + 123,0,26,255,255,0,1,189,189,189,1,0,0,0,3,123,123,123,9,200,200,200,1,123,123,0,24,255,255,0,1,189,189,189,1,0,0, + 0,4,123,123,123,10,200,200,200,1,123,123,0,24,0,0,0,5,123,123,123,12,200,200,200,27,123,123,123,14,200,200,200,25, + 123,123,123,86,200,200,200,91,49,124,118,124,71,32,124,95,49,56,114,52,82,121,0 }; + + //! Get/set default output stream for the \CImg library messages. + /** + \param file Desired output stream. Set to \c 0 to get the currently used output stream only. + \return Currently used output stream. + **/ + inline std::FILE* output(std::FILE *file) { + cimg::mutex(1); + static std::FILE *res = cimg::_stderr(); + if (file) res = file; + cimg::mutex(1,0); + return res; + } + + // Return number of available CPU cores. + inline unsigned int nb_cpus() { + unsigned int res = 1; +#if cimg_OS==2 + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + res = (unsigned int)sysinfo.dwNumberOfProcessors; +#elif cimg_OS == 1 + res = (unsigned int)sysconf(_SC_NPROCESSORS_ONLN); +#endif + return res?res:1U; + } + + // Lock/unlock mutex for CImg multi-thread programming. + inline int mutex(const unsigned int n, const int lock_mode) { + switch (lock_mode) { + case 0 : cimg::Mutex_attr().unlock(n); return 0; + case 1 : cimg::Mutex_attr().lock(n); return 0; + default : return cimg::Mutex_attr().trylock(n); + } + } + + //! Display a warning message on the default output stream. + /** + \param format C-string containing the format of the message, as with std::printf(). + \note If configuration macro \c cimg_strict_warnings is set, this function throws a + \c CImgWarningException instead. + \warning As the first argument is a format string, it is highly recommended to write + \code + cimg::warn("%s",warning_message); + \endcode + instead of + \code + cimg::warn(warning_message); + \endcode + if \c warning_message can be arbitrary, to prevent nasty memory access. + **/ + inline void warn(const char *const format, ...) { + if (cimg::exception_mode()>=1) { + char *const message = new char[16384]; + std::va_list ap; + va_start(ap,format); + cimg_vsnprintf(message,16384,format,ap); + va_end(ap); +#ifdef cimg_strict_warnings + throw CImgWarningException(message); +#else + std::fprintf(cimg::output(),"\n%s[CImg] *** Warning ***%s%s\n",cimg::t_red,cimg::t_normal,message); +#endif + delete[] message; + } + } + + // Execute an external system command. + /** + \param command C-string containing the command line to execute. + \param module_name Module name. + \return Status value of the executed command, whose meaning is OS-dependent. + \note This function is similar to std::system() + but it does not open an extra console windows + on Windows-based systems. + **/ + inline int system(const char *const command, const char *const module_name=0, const bool is_verbose=false) { + cimg::unused(module_name); +#ifdef cimg_no_system_calls + return -1; +#else + if (is_verbose) return std::system(command); +#if cimg_OS==1 + const unsigned int l = (unsigned int)std::strlen(command); + if (l) { + char *const ncommand = new char[l + 24]; + std::memcpy(ncommand,command,l); + std::strcpy(ncommand + l," >/dev/null 2>&1"); // Make command silent. + const int out_val = std::system(ncommand); + delete[] ncommand; + return out_val; + } else return -1; +#elif cimg_OS==2 + PROCESS_INFORMATION pi; + STARTUPINFO si; + std::memset(&pi,0,sizeof(PROCESS_INFORMATION)); + std::memset(&si,0,sizeof(STARTUPINFO)); + GetStartupInfo(&si); + si.cb = sizeof(si); + si.wShowWindow = SW_HIDE; + si.dwFlags |= SW_HIDE | STARTF_USESHOWWINDOW; + const BOOL res = CreateProcess((LPCTSTR)module_name,(LPTSTR)command,0,0,FALSE,0,0,0,&si,&pi); + if (res) { + WaitForSingleObject(pi.hProcess,INFINITE); + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + return 0; + } else return std::system(command); +#else + return std::system(command); +#endif +#endif + } + + //! Return a reference to a temporary variable of type T. + template + inline T& temporary(const T&) { + static T temp; + return temp; + } + + //! Exchange values of variables \c a and \c b. + template + inline void swap(T& a, T& b) { T t = a; a = b; b = t; } + + //! Exchange values of variables (\c a1,\c a2) and (\c b1,\c b2). + template + inline void swap(T1& a1, T1& b1, T2& a2, T2& b2) { + cimg::swap(a1,b1); cimg::swap(a2,b2); + } + + //! Exchange values of variables (\c a1,\c a2,\c a3) and (\c b1,\c b2,\c b3). + template + inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3) { + cimg::swap(a1,b1,a2,b2); cimg::swap(a3,b3); + } + + //! Exchange values of variables (\c a1,\c a2,...,\c a4) and (\c b1,\c b2,...,\c b4). + template + inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4) { + cimg::swap(a1,b1,a2,b2,a3,b3); cimg::swap(a4,b4); + } + + //! Exchange values of variables (\c a1,\c a2,...,\c a5) and (\c b1,\c b2,...,\c b5). + template + inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5) { + cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4); cimg::swap(a5,b5); + } + + //! Exchange values of variables (\c a1,\c a2,...,\c a6) and (\c b1,\c b2,...,\c b6). + template + inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6) { + cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5); cimg::swap(a6,b6); + } + + //! Exchange values of variables (\c a1,\c a2,...,\c a7) and (\c b1,\c b2,...,\c b7). + template + inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6, + T7& a7, T7& b7) { + cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6); cimg::swap(a7,b7); + } + + //! Exchange values of variables (\c a1,\c a2,...,\c a8) and (\c b1,\c b2,...,\c b8). + template + inline void swap(T1& a1, T1& b1, T2& a2, T2& b2, T3& a3, T3& b3, T4& a4, T4& b4, T5& a5, T5& b5, T6& a6, T6& b6, + T7& a7, T7& b7, T8& a8, T8& b8) { + cimg::swap(a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6,a7,b7); cimg::swap(a8,b8); + } + + //! Return the endianness of the current architecture. + /** + \return \c false for Little Endian or \c true for Big Endian. + **/ + inline bool endianness() { + const int x = 1; + return ((unsigned char*)&x)[0]?false:true; + } + + //! Reverse endianness of all elements in a memory buffer. + /** + \param[in,out] buffer Memory buffer whose endianness must be reversed. + \param size Number of buffer elements to reverse. + **/ + template + inline void invert_endianness(T* const buffer, const cimg_ulong size) { + if (size) switch (sizeof(T)) { + case 1 : break; + case 2 : { + for (unsigned short *ptr = (unsigned short*)buffer + size; ptr>(unsigned short*)buffer; ) { + const unsigned short val = *(--ptr); + *ptr = (unsigned short)((val>>8) | ((val<<8))); + } + } break; + case 4 : { + for (unsigned int *ptr = (unsigned int*)buffer + size; ptr>(unsigned int*)buffer; ) { + const unsigned int val = *(--ptr); + *ptr = (val>>24) | ((val>>8)&0xff00) | ((val<<8)&0xff0000) | (val<<24); + } + } break; + case 8 : { + const cimg_uint64 + m0 = (cimg_uint64)0xff, m1 = m0<<8, m2 = m0<<16, m3 = m0<<24, + m4 = m0<<32, m5 = m0<<40, m6 = m0<<48, m7 = m0<<56; + for (cimg_uint64 *ptr = (cimg_uint64*)buffer + size; ptr>(cimg_uint64*)buffer; ) { + const cimg_uint64 val = *(--ptr); + *ptr = (((val&m7)>>56) | ((val&m6)>>40) | ((val&m5)>>24) | ((val&m4)>>8) | + ((val&m3)<<8) |((val&m2)<<24) | ((val&m1)<<40) | ((val&m0)<<56)); + } + } break; + default : { + for (T* ptr = buffer + size; ptr>buffer; ) { + unsigned char *pb = (unsigned char*)(--ptr), *pe = pb + sizeof(T); + for (int i = 0; i<(int)sizeof(T)/2; ++i) swap(*(pb++),*(--pe)); + } + } + } + } + + //! Reverse endianness of a single variable. + /** + \param[in,out] a Variable to reverse. + \return Reference to reversed variable. + **/ + template + inline T& invert_endianness(T& a) { + invert_endianness(&a,1); + return a; + } + + // Conversion functions to get more precision when trying to store unsigned ints values as floats. + inline unsigned int float2uint(const float f) { + int tmp = 0; + std::memcpy(&tmp,&f,sizeof(float)); + if (tmp>=0) return (unsigned int)f; + unsigned int u; + // use memcpy instead of assignment to avoid undesired optimizations by C++-compiler. + std::memcpy(&u,&f,sizeof(float)); + return ((u)<<1)>>1; // set sign bit to 0. + } + + inline float uint2float(const unsigned int u) { + if (u<(1U<<19)) return (float)u; // Consider safe storage of unsigned int as floats until 19bits (i.e 524287). + float f; + const unsigned int v = u|(1U<<(8*sizeof(unsigned int)-1)); // set sign bit to 1. + // use memcpy instead of simple assignment to avoid undesired optimizations by C++-compiler. + std::memcpy(&f,&v,sizeof(float)); + return f; + } + + //! Return the value of a system timer, with a millisecond precision. + /** + \note The timer does not necessarily starts from \c 0. + **/ + inline cimg_ulong time() { +#if cimg_OS==1 + struct timeval st_time; + gettimeofday(&st_time,0); + return (cimg_ulong)(st_time.tv_usec/1000 + st_time.tv_sec*1000); +#elif cimg_OS==2 + SYSTEMTIME st_time; + GetLocalTime(&st_time); + return (cimg_ulong)(st_time.wMilliseconds + 1000*(st_time.wSecond + 60*(st_time.wMinute + 60*st_time.wHour))); +#else + return 0; +#endif + } + + // Implement a tic/toc mechanism to display elapsed time of algorithms. + inline cimg_ulong tictoc(const bool is_tic); + + //! Start tic/toc timer for time measurement between code instructions. + /** + \return Current value of the timer (same value as time()). + **/ + inline cimg_ulong tic() { + return cimg::tictoc(true); + } + + //! End tic/toc timer and displays elapsed time from last call to tic(). + /** + \return Time elapsed (in ms) since last call to tic(). + **/ + inline cimg_ulong toc() { + return cimg::tictoc(false); + } + + //! Sleep for a given numbers of milliseconds. + /** + \param milliseconds Number of milliseconds to wait for. + \note This function frees the CPU ressources during the sleeping time. + It can be used to temporize your program properly, without wasting CPU time. + **/ + inline void sleep(const unsigned int milliseconds) { +#if cimg_OS==1 + struct timespec tv; + tv.tv_sec = milliseconds/1000; + tv.tv_nsec = (milliseconds%1000)*1000000; + nanosleep(&tv,0); +#elif cimg_OS==2 + Sleep(milliseconds); +#else + cimg::unused(milliseconds); +#endif + } + + inline unsigned int _wait(const unsigned int milliseconds, cimg_ulong& timer) { + if (!timer) timer = cimg::time(); + const cimg_ulong current_time = cimg::time(); + if (current_time>=timer + milliseconds) { timer = current_time; return 0; } + const unsigned int time_diff = (unsigned int)(timer + milliseconds - current_time); + timer = current_time + time_diff; + cimg::sleep(time_diff); + return time_diff; + } + + //! Wait for a given number of milliseconds since the last call to wait(). + /** + \param milliseconds Number of milliseconds to wait for. + \return Number of milliseconds elapsed since the last call to wait(). + \note Same as sleep() with a waiting time computed with regard to the last call + of wait(). It may be used to temporize your program properly, without wasting CPU time. + **/ + inline cimg_long wait(const unsigned int milliseconds) { + cimg::mutex(3); + static cimg_ulong timer = 0; + if (!timer) timer = cimg::time(); + cimg::mutex(3,0); + return _wait(milliseconds,timer); + } + + // Random number generators. + // CImg may use its own Random Number Generator (RNG) if configuration macro 'cimg_use_rng' is set. + // Use it for instance when you have to deal with concurrent threads trying to call std::srand() + // at the same time! +#ifdef cimg_use_rng + +#include + + // Use a custom RNG. + inline unsigned int _rand(const unsigned int seed=0, const bool set_seed=false) { + static cimg_ulong next = 0xB16B00B5; + cimg::mutex(4); + if (set_seed) next = (cimg_ulong)seed; + else next = next*1103515245 + 12345U; + cimg::mutex(4,0); + return (unsigned int)(next&0xFFFFFFU); + } + + inline unsigned int srand() { + unsigned int t = (unsigned int)cimg::time(); +#if cimg_OS==1 + t+=(unsigned int)getpid(); +#elif cimg_OS==2 + t+=(unsigned int)_getpid(); +#endif + return cimg::_rand(t,true); + } + + inline unsigned int srand(const unsigned int seed) { + return _rand(seed,true); + } + + inline double rand(const double val_min, const double val_max) { + const double val = cimg::_rand()/16777215.; + return val_min + (val_max - val_min)*val; + } + +#else + + // Use the system RNG. + inline unsigned int srand() { + const unsigned int t = (unsigned int)cimg::time(); +#if cimg_OS==1 || defined(__BORLANDC__) + std::srand(t + (unsigned int)getpid()); +#elif cimg_OS==2 + std::srand(t + (unsigned int)_getpid()); +#else + std::srand(t); +#endif + return t; + } + + inline unsigned int srand(const unsigned int seed) { + std::srand(seed); + return seed; + } + + //! Return a random variable uniformely distributed between [val_min,val_max]. + /** + **/ + inline double rand(const double val_min, const double val_max) { + const double val = (double)std::rand()/RAND_MAX; + return val_min + (val_max - val_min)*val; + } +#endif + + //! Return a random variable uniformely distributed between [0,val_max]. + /** + **/ + inline double rand(const double val_max=1) { + return cimg::rand(0,val_max); + } + + //! Return a random variable following a gaussian distribution and a standard deviation of 1. + /** + **/ + inline double grand() { + double x1, w; + do { + const double x2 = cimg::rand(-1,1); + x1 = cimg::rand(-1,1); + w = x1*x1 + x2*x2; + } while (w<=0 || w>=1.0); + return x1*std::sqrt((-2*std::log(w))/w); + } + + //! Return a random variable following a Poisson distribution of parameter z. + /** + **/ + inline unsigned int prand(const double z) { + if (z<=1.0e-10) return 0; + if (z>100) return (unsigned int)((std::sqrt(z) * cimg::grand()) + z); + unsigned int k = 0; + const double y = std::exp(-z); + for (double s = 1.0; s>=y; ++k) s*=cimg::rand(); + return k - 1; + } + + //! Cut (i.e. clamp) value in specified interval. + template + inline T cut(const T& val, const t& val_min, const t& val_max) { + return valval_max?(T)val_max:val; + } + + //! Bitwise-rotate value on the left. + template + inline T rol(const T& a, const unsigned int n=1) { + return n?(T)((a<>((sizeof(T)<<3) - n))):a; + } + + inline float rol(const float a, const unsigned int n=1) { + return (float)rol((int)a,n); + } + + inline double rol(const double a, const unsigned int n=1) { + return (double)rol((cimg_long)a,n); + } + + inline double rol(const long double a, const unsigned int n=1) { + return (double)rol((cimg_long)a,n); + } + +#ifdef cimg_use_half + inline half rol(const half a, const unsigned int n=1) { + return (half)rol((int)a,n); + } +#endif + + //! Bitwise-rotate value on the right. + template + inline T ror(const T& a, const unsigned int n=1) { + return n?(T)((a>>n)|(a<<((sizeof(T)<<3) - n))):a; + } + + inline float ror(const float a, const unsigned int n=1) { + return (float)ror((int)a,n); + } + + inline double ror(const double a, const unsigned int n=1) { + return (double)ror((cimg_long)a,n); + } + + inline double ror(const long double a, const unsigned int n=1) { + return (double)ror((cimg_long)a,n); + } + +#ifdef cimg_use_half + inline half ror(const half a, const unsigned int n=1) { + return (half)ror((int)a,n); + } +#endif + + //! Return absolute value of a value. + template + inline T abs(const T& a) { + return a>=0?a:-a; + } + inline bool abs(const bool a) { + return a; + } + inline int abs(const unsigned char a) { + return (int)a; + } + inline int abs(const unsigned short a) { + return (int)a; + } + inline int abs(const unsigned int a) { + return (int)a; + } + inline int abs(const int a) { + return std::abs(a); + } + inline cimg_int64 abs(const cimg_uint64 a) { + return (cimg_int64)a; + } + inline double abs(const double a) { + return std::fabs(a); + } + inline float abs(const float a) { + return (float)std::fabs((double)a); + } + + //! Return hyperbolic arcosine of a value. + inline double acosh(const double x) { +#if defined(cimg_use_cpp11) && !defined(_MSC_VER) + return std::acosh(x); +#else + return std::log(x + std::sqrt(x*x - 1)); +#endif + } + + //! Return hyperbolic arcsine of a value. + inline double asinh(const double x) { +#if defined(cimg_use_cpp11) && !defined(_MSC_VER) + return std::asinh(x); +#else + return std::log(x + std::sqrt(x*x + 1)); +#endif + } + + //! Return hyperbolic arctangent of a value. + inline double atanh(const double x) { +#if defined(cimg_use_cpp11) && !defined(_MSC_VER) + return std::atanh(x); +#else + return 0.5*std::log((1.0 + x)/(1.0 - x)); +#endif + } + + //! Return the sinc of a given value. + inline double sinc(const double x) { + return x?std::sin(x)/x:1; + } + + //! Return base-2 logarithm of a value. + inline double log2(const double x) { +#if defined(cimg_use_cpp11) && !defined(_MSC_VER) + return std::log2(x); +#else + const double base2 = std::log(2.0); + return std::log(x)/base2; +#endif + } + + //! Return square of a value. + template + inline T sqr(const T& val) { + return val*val; + } + + //! Return cubic root of a value. + template + inline double cbrt(const T& x) { +#if cimg_use_cpp11==1 + return std::cbrt(x); +#else + return x>=0?std::pow((double)x,1.0/3):-std::pow(-(double)x,1.0/3); +#endif + } + + //! Return the minimum between three values. + template + inline t min(const t& a, const t& b, const t& c) { + return std::min(std::min(a,b),c); + } + + //! Return the minimum between four values. + template + inline t min(const t& a, const t& b, const t& c, const t& d) { + return std::min(std::min(a,b),std::min(c,d)); + } + + //! Return the maximum between three values. + template + inline t max(const t& a, const t& b, const t& c) { + return std::max(std::max(a,b),c); + } + + //! Return the maximum between four values. + template + inline t max(const t& a, const t& b, const t& c, const t& d) { + return std::max(std::max(a,b),std::max(c,d)); + } + + //! Return the sign of a value. + template + inline T sign(const T& x) { + return (T)(x<0?-1:x>0); + } + + //! Return the nearest power of 2 higher than given value. + template + inline cimg_ulong nearest_pow2(const T& x) { + cimg_ulong i = 1; + while (x>i) i<<=1; + return i; + } + + //! Return the modulo of a value. + /** + \param x Input value. + \param m Modulo value. + \note This modulo function accepts negative and floating-points modulo numbers, as well as variables of any type. + **/ + template + inline T mod(const T& x, const T& m) { + const double dx = (double)x, dm = (double)m; + return (T)(dx - dm * std::floor(dx / dm)); + } + inline int mod(const bool x, const bool m) { + return m?(x?1:0):0; + } + inline int mod(const unsigned char x, const unsigned char m) { + return x%m; + } + inline int mod(const char x, const char m) { +#if defined(CHAR_MAX) && CHAR_MAX==255 + return x%m; +#else + return x>=0?x%m:(x%m?m + x%m:0); +#endif + } + inline int mod(const unsigned short x, const unsigned short m) { + return x%m; + } + inline int mod(const short x, const short m) { + return x>=0?x%m:(x%m?m + x%m:0); + } + inline int mod(const unsigned int x, const unsigned int m) { + return (int)(x%m); + } + inline int mod(const int x, const int m) { + return x>=0?x%m:(x%m?m + x%m:0); + } + inline cimg_int64 mod(const cimg_uint64 x, const cimg_uint64 m) { + return x%m; + } + inline cimg_int64 mod(const cimg_int64 x, const cimg_int64 m) { + return x>=0?x%m:(x%m?m + x%m:0); + } + + //! Return the min-mod of two values. + /** + \note minmod(\p a,\p b) is defined to be: + - minmod(\p a,\p b) = min(\p a,\p b), if \p a and \p b have the same sign. + - minmod(\p a,\p b) = 0, if \p a and \p b have different signs. + **/ + template + inline T minmod(const T& a, const T& b) { + return a*b<=0?0:(a>0?(a + inline T round(const T& x) { + return (T)std::floor((_cimg_Tfloat)x + 0.5f); + } + + //! Return rounded value. + /** + \param x Value to be rounded. + \param y Rounding precision. + \param rounding_type Type of rounding operation (\c 0 = nearest, \c -1 = backward, \c 1 = forward). + \return Rounded value, having the same type as input value \c x. + **/ + template + inline T round(const T& x, const double y, const int rounding_type=0) { + if (y<=0) return x; + if (y==1) switch (rounding_type) { + case 0 : return cimg::round(x); + case 1 : return (T)std::ceil((_cimg_Tfloat)x); + default : return (T)std::floor((_cimg_Tfloat)x); + } + const double sx = (double)x/y, floor = std::floor(sx), delta = sx - floor; + return (T)(y*(rounding_type<0?floor:rounding_type>0?std::ceil(sx):delta<0.5?floor:std::ceil(sx))); + } + + // Code to compute fast median from 2,3,5,7,9,13,25 and 49 values. + // (contribution by RawTherapee: http://rawtherapee.com/). + template + inline T median(T val0, T val1) { + return (val0 + val1)/2; + } + + template + inline T median(T val0, T val1, T val2) { + return std::max(std::min(val0,val1),std::min(val2,std::max(val0,val1))); + } + + template + inline T median(T val0, T val1, T val2, T val3, T val4) { + T tmp = std::min(val0,val1); + val1 = std::max(val0,val1); val0 = tmp; tmp = std::min(val3,val4); val4 = std::max(val3,val4); + val3 = std::max(val0,tmp); val1 = std::min(val1,val4); tmp = std::min(val1,val2); val2 = std::max(val1,val2); + val1 = tmp; tmp = std::min(val2,val3); + return std::max(val1,tmp); + } + + template + inline T median(T val0, T val1, T val2, T val3, T val4, T val5, T val6) { + T tmp = std::min(val0,val5); + val5 = std::max(val0,val5); val0 = tmp; tmp = std::min(val0,val3); val3 = std::max(val0,val3); val0 = tmp; + tmp = std::min(val1,val6); val6 = std::max(val1,val6); val1 = tmp; tmp = std::min(val2,val4); + val4 = std::max(val2,val4); val2 = tmp; val1 = std::max(val0,val1); tmp = std::min(val3,val5); + val5 = std::max(val3,val5); val3 = tmp; tmp = std::min(val2,val6); val6 = std::max(val2,val6); + val3 = std::max(tmp,val3); val3 = std::min(val3,val6); tmp = std::min(val4,val5); val4 = std::max(val1,tmp); + tmp = std::min(val1,tmp); val3 = std::max(tmp,val3); + return std::min(val3,val4); + } + + template + inline T median(T val0, T val1, T val2, T val3, T val4, T val5, T val6, T val7, T val8) { + T tmp = std::min(val1,val2); + val2 = std::max(val1,val2); val1 = tmp; tmp = std::min(val4,val5); + val5 = std::max(val4,val5); val4 = tmp; tmp = std::min(val7,val8); + val8 = std::max(val7,val8); val7 = tmp; tmp = std::min(val0,val1); + val1 = std::max(val0,val1); val0 = tmp; tmp = std::min(val3,val4); + val4 = std::max(val3,val4); val3 = tmp; tmp = std::min(val6,val7); + val7 = std::max(val6,val7); val6 = tmp; tmp = std::min(val1,val2); + val2 = std::max(val1,val2); val1 = tmp; tmp = std::min(val4,val5); + val5 = std::max(val4,val5); val4 = tmp; tmp = std::min(val7,val8); + val8 = std::max(val7,val8); val3 = std::max(val0,val3); val5 = std::min(val5,val8); + val7 = std::max(val4,tmp); tmp = std::min(val4,tmp); val6 = std::max(val3,val6); + val4 = std::max(val1,tmp); val2 = std::min(val2,val5); val4 = std::min(val4,val7); + tmp = std::min(val4,val2); val2 = std::max(val4,val2); val4 = std::max(val6,tmp); + return std::min(val4,val2); + } + + template + inline T median(T val0, T val1, T val2, T val3, T val4, T val5, T val6, T val7, T val8, T val9, T val10, T val11, + T val12) { + T tmp = std::min(val1,val7); + val7 = std::max(val1,val7); val1 = tmp; tmp = std::min(val9,val11); val11 = std::max(val9,val11); val9 = tmp; + tmp = std::min(val3,val4); val4 = std::max(val3,val4); val3 = tmp; tmp = std::min(val5,val8); + val8 = std::max(val5,val8); val5 = tmp; tmp = std::min(val0,val12); val12 = std::max(val0,val12); + val0 = tmp; tmp = std::min(val2,val6); val6 = std::max(val2,val6); val2 = tmp; tmp = std::min(val0,val1); + val1 = std::max(val0,val1); val0 = tmp; tmp = std::min(val2,val3); val3 = std::max(val2,val3); val2 = tmp; + tmp = std::min(val4,val6); val6 = std::max(val4,val6); val4 = tmp; tmp = std::min(val8,val11); + val11 = std::max(val8,val11); val8 = tmp; tmp = std::min(val7,val12); val12 = std::max(val7,val12); val7 = tmp; + tmp = std::min(val5,val9); val9 = std::max(val5,val9); val5 = tmp; tmp = std::min(val0,val2); + val2 = std::max(val0,val2); val0 = tmp; tmp = std::min(val3,val7); val7 = std::max(val3,val7); val3 = tmp; + tmp = std::min(val10,val11); val11 = std::max(val10,val11); val10 = tmp; tmp = std::min(val1,val4); + val4 = std::max(val1,val4); val1 = tmp; tmp = std::min(val6,val12); val12 = std::max(val6,val12); val6 = tmp; + tmp = std::min(val7,val8); val8 = std::max(val7,val8); val7 = tmp; val11 = std::min(val11,val12); + tmp = std::min(val4,val9); val9 = std::max(val4,val9); val4 = tmp; tmp = std::min(val6,val10); + val10 = std::max(val6,val10); val6 = tmp; tmp = std::min(val3,val4); val4 = std::max(val3,val4); val3 = tmp; + tmp = std::min(val5,val6); val6 = std::max(val5,val6); val5 = tmp; val8 = std::min(val8,val9); + val10 = std::min(val10,val11); tmp = std::min(val1,val7); val7 = std::max(val1,val7); val1 = tmp; + tmp = std::min(val2,val6); val6 = std::max(val2,val6); val2 = tmp; val3 = std::max(val1,val3); + tmp = std::min(val4,val7); val7 = std::max(val4,val7); val4 = tmp; val8 = std::min(val8,val10); + val5 = std::max(val0,val5); val5 = std::max(val2,val5); tmp = std::min(val6,val8); val8 = std::max(val6,val8); + val5 = std::max(val3,val5); val7 = std::min(val7,val8); val6 = std::max(val4,tmp); tmp = std::min(val4,tmp); + val5 = std::max(tmp,val5); val6 = std::min(val6,val7); + return std::max(val5,val6); + } + + template + inline T median(T val0, T val1, T val2, T val3, T val4, + T val5, T val6, T val7, T val8, T val9, + T val10, T val11, T val12, T val13, T val14, + T val15, T val16, T val17, T val18, T val19, + T val20, T val21, T val22, T val23, T val24) { + T tmp = std::min(val0,val1); + val1 = std::max(val0,val1); val0 = tmp; tmp = std::min(val3,val4); val4 = std::max(val3,val4); + val3 = tmp; tmp = std::min(val2,val4); val4 = std::max(val2,val4); val2 = std::min(tmp,val3); + val3 = std::max(tmp,val3); tmp = std::min(val6,val7); val7 = std::max(val6,val7); val6 = tmp; + tmp = std::min(val5,val7); val7 = std::max(val5,val7); val5 = std::min(tmp,val6); val6 = std::max(tmp,val6); + tmp = std::min(val9,val10); val10 = std::max(val9,val10); val9 = tmp; tmp = std::min(val8,val10); + val10 = std::max(val8,val10); val8 = std::min(tmp,val9); val9 = std::max(tmp,val9); + tmp = std::min(val12,val13); val13 = std::max(val12,val13); val12 = tmp; tmp = std::min(val11,val13); + val13 = std::max(val11,val13); val11 = std::min(tmp,val12); val12 = std::max(tmp,val12); + tmp = std::min(val15,val16); val16 = std::max(val15,val16); val15 = tmp; tmp = std::min(val14,val16); + val16 = std::max(val14,val16); val14 = std::min(tmp,val15); val15 = std::max(tmp,val15); + tmp = std::min(val18,val19); val19 = std::max(val18,val19); val18 = tmp; tmp = std::min(val17,val19); + val19 = std::max(val17,val19); val17 = std::min(tmp,val18); val18 = std::max(tmp,val18); + tmp = std::min(val21,val22); val22 = std::max(val21,val22); val21 = tmp; tmp = std::min(val20,val22); + val22 = std::max(val20,val22); val20 = std::min(tmp,val21); val21 = std::max(tmp,val21); + tmp = std::min(val23,val24); val24 = std::max(val23,val24); val23 = tmp; tmp = std::min(val2,val5); + val5 = std::max(val2,val5); val2 = tmp; tmp = std::min(val3,val6); val6 = std::max(val3,val6); val3 = tmp; + tmp = std::min(val0,val6); val6 = std::max(val0,val6); val0 = std::min(tmp,val3); val3 = std::max(tmp,val3); + tmp = std::min(val4,val7); val7 = std::max(val4,val7); val4 = tmp; tmp = std::min(val1,val7); + val7 = std::max(val1,val7); val1 = std::min(tmp,val4); val4 = std::max(tmp,val4); tmp = std::min(val11,val14); + val14 = std::max(val11,val14); val11 = tmp; tmp = std::min(val8,val14); val14 = std::max(val8,val14); + val8 = std::min(tmp,val11); val11 = std::max(tmp,val11); tmp = std::min(val12,val15); + val15 = std::max(val12,val15); val12 = tmp; tmp = std::min(val9,val15); val15 = std::max(val9,val15); + val9 = std::min(tmp,val12); val12 = std::max(tmp,val12); tmp = std::min(val13,val16); + val16 = std::max(val13,val16); val13 = tmp; tmp = std::min(val10,val16); val16 = std::max(val10,val16); + val10 = std::min(tmp,val13); val13 = std::max(tmp,val13); tmp = std::min(val20,val23); + val23 = std::max(val20,val23); val20 = tmp; tmp = std::min(val17,val23); val23 = std::max(val17,val23); + val17 = std::min(tmp,val20); val20 = std::max(tmp,val20); tmp = std::min(val21,val24); + val24 = std::max(val21,val24); val21 = tmp; tmp = std::min(val18,val24); val24 = std::max(val18,val24); + val18 = std::min(tmp,val21); val21 = std::max(tmp,val21); tmp = std::min(val19,val22); + val22 = std::max(val19,val22); val19 = tmp; val17 = std::max(val8,val17); tmp = std::min(val9,val18); + val18 = std::max(val9,val18); val9 = tmp; tmp = std::min(val0,val18); val18 = std::max(val0,val18); + val9 = std::max(tmp,val9); tmp = std::min(val10,val19); val19 = std::max(val10,val19); val10 = tmp; + tmp = std::min(val1,val19); val19 = std::max(val1,val19); val1 = std::min(tmp,val10); + val10 = std::max(tmp,val10); tmp = std::min(val11,val20); val20 = std::max(val11,val20); val11 = tmp; + tmp = std::min(val2,val20); val20 = std::max(val2,val20); val11 = std::max(tmp,val11); + tmp = std::min(val12,val21); val21 = std::max(val12,val21); val12 = tmp; tmp = std::min(val3,val21); + val21 = std::max(val3,val21); val3 = std::min(tmp,val12); val12 = std::max(tmp,val12); + tmp = std::min(val13,val22); val22 = std::max(val13,val22); val4 = std::min(val4,val22); + val13 = std::max(val4,tmp); tmp = std::min(val4,tmp); val4 = tmp; tmp = std::min(val14,val23); + val23 = std::max(val14,val23); val14 = tmp; tmp = std::min(val5,val23); val23 = std::max(val5,val23); + val5 = std::min(tmp,val14); val14 = std::max(tmp,val14); tmp = std::min(val15,val24); + val24 = std::max(val15,val24); val15 = tmp; val6 = std::min(val6,val24); tmp = std::min(val6,val15); + val15 = std::max(val6,val15); val6 = tmp; tmp = std::min(val7,val16); val7 = std::min(tmp,val19); + tmp = std::min(val13,val21); val15 = std::min(val15,val23); tmp = std::min(val7,tmp); + val7 = std::min(tmp,val15); val9 = std::max(val1,val9); val11 = std::max(val3,val11); + val17 = std::max(val5,val17); val17 = std::max(val11,val17); val17 = std::max(val9,val17); + tmp = std::min(val4,val10); val10 = std::max(val4,val10); val4 = tmp; tmp = std::min(val6,val12); + val12 = std::max(val6,val12); val6 = tmp; tmp = std::min(val7,val14); val14 = std::max(val7,val14); + val7 = tmp; tmp = std::min(val4,val6); val6 = std::max(val4,val6); val7 = std::max(tmp,val7); + tmp = std::min(val12,val14); val14 = std::max(val12,val14); val12 = tmp; val10 = std::min(val10,val14); + tmp = std::min(val6,val7); val7 = std::max(val6,val7); val6 = tmp; tmp = std::min(val10,val12); + val12 = std::max(val10,val12); val10 = std::max(val6,tmp); tmp = std::min(val6,tmp); + val17 = std::max(tmp,val17); tmp = std::min(val12,val17); val17 = std::max(val12,val17); val12 = tmp; + val7 = std::min(val7,val17); tmp = std::min(val7,val10); val10 = std::max(val7,val10); val7 = tmp; + tmp = std::min(val12,val18); val18 = std::max(val12,val18); val12 = std::max(val7,tmp); + val10 = std::min(val10,val18); tmp = std::min(val12,val20); val20 = std::max(val12,val20); val12 = tmp; + tmp = std::min(val10,val20); + return std::max(tmp,val12); + } + + template + inline T median(T val0, T val1, T val2, T val3, T val4, T val5, T val6, + T val7, T val8, T val9, T val10, T val11, T val12, T val13, + T val14, T val15, T val16, T val17, T val18, T val19, T val20, + T val21, T val22, T val23, T val24, T val25, T val26, T val27, + T val28, T val29, T val30, T val31, T val32, T val33, T val34, + T val35, T val36, T val37, T val38, T val39, T val40, T val41, + T val42, T val43, T val44, T val45, T val46, T val47, T val48) { + T tmp = std::min(val0,val32); + val32 = std::max(val0,val32); val0 = tmp; tmp = std::min(val1,val33); val33 = std::max(val1,val33); val1 = tmp; + tmp = std::min(val2,val34); val34 = std::max(val2,val34); val2 = tmp; tmp = std::min(val3,val35); + val35 = std::max(val3,val35); val3 = tmp; tmp = std::min(val4,val36); val36 = std::max(val4,val36); val4 = tmp; + tmp = std::min(val5,val37); val37 = std::max(val5,val37); val5 = tmp; tmp = std::min(val6,val38); + val38 = std::max(val6,val38); val6 = tmp; tmp = std::min(val7,val39); val39 = std::max(val7,val39); val7 = tmp; + tmp = std::min(val8,val40); val40 = std::max(val8,val40); val8 = tmp; tmp = std::min(val9,val41); + val41 = std::max(val9,val41); val9 = tmp; tmp = std::min(val10,val42); val42 = std::max(val10,val42); + val10 = tmp; tmp = std::min(val11,val43); val43 = std::max(val11,val43); val11 = tmp; + tmp = std::min(val12,val44); val44 = std::max(val12,val44); val12 = tmp; tmp = std::min(val13,val45); + val45 = std::max(val13,val45); val13 = tmp; tmp = std::min(val14,val46); val46 = std::max(val14,val46); + val14 = tmp; tmp = std::min(val15,val47); val47 = std::max(val15,val47); val15 = tmp; + tmp = std::min(val16,val48); val48 = std::max(val16,val48); val16 = tmp; tmp = std::min(val0,val16); + val16 = std::max(val0,val16); val0 = tmp; tmp = std::min(val1,val17); val17 = std::max(val1,val17); + val1 = tmp; tmp = std::min(val2,val18); val18 = std::max(val2,val18); val2 = tmp; tmp = std::min(val3,val19); + val19 = std::max(val3,val19); val3 = tmp; tmp = std::min(val4,val20); val20 = std::max(val4,val20); val4 = tmp; + tmp = std::min(val5,val21); val21 = std::max(val5,val21); val5 = tmp; tmp = std::min(val6,val22); + val22 = std::max(val6,val22); val6 = tmp; tmp = std::min(val7,val23); val23 = std::max(val7,val23); val7 = tmp; + tmp = std::min(val8,val24); val24 = std::max(val8,val24); val8 = tmp; tmp = std::min(val9,val25); + val25 = std::max(val9,val25); val9 = tmp; tmp = std::min(val10,val26); val26 = std::max(val10,val26); + val10 = tmp; tmp = std::min(val11,val27); val27 = std::max(val11,val27); val11 = tmp; + tmp = std::min(val12,val28); val28 = std::max(val12,val28); val12 = tmp; tmp = std::min(val13,val29); + val29 = std::max(val13,val29); val13 = tmp; tmp = std::min(val14,val30); val30 = std::max(val14,val30); + val14 = tmp; tmp = std::min(val15,val31); val31 = std::max(val15,val31); val15 = tmp; + tmp = std::min(val32,val48); val48 = std::max(val32,val48); val32 = tmp; tmp = std::min(val16,val32); + val32 = std::max(val16,val32); val16 = tmp; tmp = std::min(val17,val33); val33 = std::max(val17,val33); + val17 = tmp; tmp = std::min(val18,val34); val34 = std::max(val18,val34); val18 = tmp; + tmp = std::min(val19,val35); val35 = std::max(val19,val35); val19 = tmp; tmp = std::min(val20,val36); + val36 = std::max(val20,val36); val20 = tmp; tmp = std::min(val21,val37); val37 = std::max(val21,val37); + val21 = tmp; tmp = std::min(val22,val38); val38 = std::max(val22,val38); val22 = tmp; + tmp = std::min(val23,val39); val39 = std::max(val23,val39); val23 = tmp; tmp = std::min(val24,val40); + val40 = std::max(val24,val40); val24 = tmp; tmp = std::min(val25,val41); val41 = std::max(val25,val41); + val25 = tmp; tmp = std::min(val26,val42); val42 = std::max(val26,val42); val26 = tmp; + tmp = std::min(val27,val43); val43 = std::max(val27,val43); val27 = tmp; tmp = std::min(val28,val44); + val44 = std::max(val28,val44); val28 = tmp; tmp = std::min(val29,val45); val45 = std::max(val29,val45); + val29 = tmp; tmp = std::min(val30,val46); val46 = std::max(val30,val46); val30 = tmp; + tmp = std::min(val31,val47); val47 = std::max(val31,val47); val31 = tmp; tmp = std::min(val0,val8); + val8 = std::max(val0,val8); val0 = tmp; tmp = std::min(val1,val9); val9 = std::max(val1,val9); val1 = tmp; + tmp = std::min(val2,val10); val10 = std::max(val2,val10); val2 = tmp; tmp = std::min(val3,val11); + val11 = std::max(val3,val11); val3 = tmp; tmp = std::min(val4,val12); val12 = std::max(val4,val12); val4 = tmp; + tmp = std::min(val5,val13); val13 = std::max(val5,val13); val5 = tmp; tmp = std::min(val6,val14); + val14 = std::max(val6,val14); val6 = tmp; tmp = std::min(val7,val15); val15 = std::max(val7,val15); val7 = tmp; + tmp = std::min(val16,val24); val24 = std::max(val16,val24); val16 = tmp; tmp = std::min(val17,val25); + val25 = std::max(val17,val25); val17 = tmp; tmp = std::min(val18,val26); val26 = std::max(val18,val26); + val18 = tmp; tmp = std::min(val19,val27); val27 = std::max(val19,val27); val19 = tmp; + tmp = std::min(val20,val28); val28 = std::max(val20,val28); val20 = tmp; tmp = std::min(val21,val29); + val29 = std::max(val21,val29); val21 = tmp; tmp = std::min(val22,val30); val30 = std::max(val22,val30); + val22 = tmp; tmp = std::min(val23,val31); val31 = std::max(val23,val31); val23 = tmp; + tmp = std::min(val32,val40); val40 = std::max(val32,val40); val32 = tmp; tmp = std::min(val33,val41); + val41 = std::max(val33,val41); val33 = tmp; tmp = std::min(val34,val42); val42 = std::max(val34,val42); + val34 = tmp; tmp = std::min(val35,val43); val43 = std::max(val35,val43); val35 = tmp; + tmp = std::min(val36,val44); val44 = std::max(val36,val44); val36 = tmp; tmp = std::min(val37,val45); + val45 = std::max(val37,val45); val37 = tmp; tmp = std::min(val38,val46); val46 = std::max(val38,val46); + val38 = tmp; tmp = std::min(val39,val47); val47 = std::max(val39,val47); val39 = tmp; + tmp = std::min(val8,val32); val32 = std::max(val8,val32); val8 = tmp; tmp = std::min(val9,val33); + val33 = std::max(val9,val33); val9 = tmp; tmp = std::min(val10,val34); val34 = std::max(val10,val34); + val10 = tmp; tmp = std::min(val11,val35); val35 = std::max(val11,val35); val11 = tmp; + tmp = std::min(val12,val36); val36 = std::max(val12,val36); val12 = tmp; tmp = std::min(val13,val37); + val37 = std::max(val13,val37); val13 = tmp; tmp = std::min(val14,val38); val38 = std::max(val14,val38); + val14 = tmp; tmp = std::min(val15,val39); val39 = std::max(val15,val39); val15 = tmp; + tmp = std::min(val24,val48); val48 = std::max(val24,val48); val24 = tmp; tmp = std::min(val8,val16); + val16 = std::max(val8,val16); val8 = tmp; tmp = std::min(val9,val17); val17 = std::max(val9,val17); + val9 = tmp; tmp = std::min(val10,val18); val18 = std::max(val10,val18); val10 = tmp; + tmp = std::min(val11,val19); val19 = std::max(val11,val19); val11 = tmp; tmp = std::min(val12,val20); + val20 = std::max(val12,val20); val12 = tmp; tmp = std::min(val13,val21); val21 = std::max(val13,val21); + val13 = tmp; tmp = std::min(val14,val22); val22 = std::max(val14,val22); val14 = tmp; + tmp = std::min(val15,val23); val23 = std::max(val15,val23); val15 = tmp; tmp = std::min(val24,val32); + val32 = std::max(val24,val32); val24 = tmp; tmp = std::min(val25,val33); val33 = std::max(val25,val33); + val25 = tmp; tmp = std::min(val26,val34); val34 = std::max(val26,val34); val26 = tmp; + tmp = std::min(val27,val35); val35 = std::max(val27,val35); val27 = tmp; tmp = std::min(val28,val36); + val36 = std::max(val28,val36); val28 = tmp; tmp = std::min(val29,val37); val37 = std::max(val29,val37); + val29 = tmp; tmp = std::min(val30,val38); val38 = std::max(val30,val38); val30 = tmp; + tmp = std::min(val31,val39); val39 = std::max(val31,val39); val31 = tmp; tmp = std::min(val40,val48); + val48 = std::max(val40,val48); val40 = tmp; tmp = std::min(val0,val4); val4 = std::max(val0,val4); + val0 = tmp; tmp = std::min(val1,val5); val5 = std::max(val1,val5); val1 = tmp; tmp = std::min(val2,val6); + val6 = std::max(val2,val6); val2 = tmp; tmp = std::min(val3,val7); val7 = std::max(val3,val7); val3 = tmp; + tmp = std::min(val8,val12); val12 = std::max(val8,val12); val8 = tmp; tmp = std::min(val9,val13); + val13 = std::max(val9,val13); val9 = tmp; tmp = std::min(val10,val14); val14 = std::max(val10,val14); + val10 = tmp; tmp = std::min(val11,val15); val15 = std::max(val11,val15); val11 = tmp; + tmp = std::min(val16,val20); val20 = std::max(val16,val20); val16 = tmp; tmp = std::min(val17,val21); + val21 = std::max(val17,val21); val17 = tmp; tmp = std::min(val18,val22); val22 = std::max(val18,val22); + val18 = tmp; tmp = std::min(val19,val23); val23 = std::max(val19,val23); val19 = tmp; + tmp = std::min(val24,val28); val28 = std::max(val24,val28); val24 = tmp; tmp = std::min(val25,val29); + val29 = std::max(val25,val29); val25 = tmp; tmp = std::min(val26,val30); val30 = std::max(val26,val30); + val26 = tmp; tmp = std::min(val27,val31); val31 = std::max(val27,val31); val27 = tmp; + tmp = std::min(val32,val36); val36 = std::max(val32,val36); val32 = tmp; tmp = std::min(val33,val37); + val37 = std::max(val33,val37); val33 = tmp; tmp = std::min(val34,val38); val38 = std::max(val34,val38); + val34 = tmp; tmp = std::min(val35,val39); val39 = std::max(val35,val39); val35 = tmp; + tmp = std::min(val40,val44); val44 = std::max(val40,val44); val40 = tmp; tmp = std::min(val41,val45); + val45 = std::max(val41,val45); val41 = tmp; tmp = std::min(val42,val46); val46 = std::max(val42,val46); + val42 = tmp; tmp = std::min(val43,val47); val47 = std::max(val43,val47); val43 = tmp; + tmp = std::min(val4,val32); val32 = std::max(val4,val32); val4 = tmp; tmp = std::min(val5,val33); + val33 = std::max(val5,val33); val5 = tmp; tmp = std::min(val6,val34); val34 = std::max(val6,val34); + val6 = tmp; tmp = std::min(val7,val35); val35 = std::max(val7,val35); val7 = tmp; + tmp = std::min(val12,val40); val40 = std::max(val12,val40); val12 = tmp; tmp = std::min(val13,val41); + val41 = std::max(val13,val41); val13 = tmp; tmp = std::min(val14,val42); val42 = std::max(val14,val42); + val14 = tmp; tmp = std::min(val15,val43); val43 = std::max(val15,val43); val15 = tmp; + tmp = std::min(val20,val48); val48 = std::max(val20,val48); val20 = tmp; tmp = std::min(val4,val16); + val16 = std::max(val4,val16); val4 = tmp; tmp = std::min(val5,val17); val17 = std::max(val5,val17); + val5 = tmp; tmp = std::min(val6,val18); val18 = std::max(val6,val18); val6 = tmp; + tmp = std::min(val7,val19); val19 = std::max(val7,val19); val7 = tmp; tmp = std::min(val12,val24); + val24 = std::max(val12,val24); val12 = tmp; tmp = std::min(val13,val25); val25 = std::max(val13,val25); + val13 = tmp; tmp = std::min(val14,val26); val26 = std::max(val14,val26); val14 = tmp; + tmp = std::min(val15,val27); val27 = std::max(val15,val27); val15 = tmp; tmp = std::min(val20,val32); + val32 = std::max(val20,val32); val20 = tmp; tmp = std::min(val21,val33); val33 = std::max(val21,val33); + val21 = tmp; tmp = std::min(val22,val34); val34 = std::max(val22,val34); val22 = tmp; + tmp = std::min(val23,val35); val35 = std::max(val23,val35); val23 = tmp; tmp = std::min(val28,val40); + val40 = std::max(val28,val40); val28 = tmp; tmp = std::min(val29,val41); val41 = std::max(val29,val41); + val29 = tmp; tmp = std::min(val30,val42); val42 = std::max(val30,val42); val30 = tmp; + tmp = std::min(val31,val43); val43 = std::max(val31,val43); val31 = tmp; tmp = std::min(val36,val48); + val48 = std::max(val36,val48); val36 = tmp; tmp = std::min(val4,val8); val8 = std::max(val4,val8); + val4 = tmp; tmp = std::min(val5,val9); val9 = std::max(val5,val9); val5 = tmp; tmp = std::min(val6,val10); + val10 = std::max(val6,val10); val6 = tmp; tmp = std::min(val7,val11); val11 = std::max(val7,val11); val7 = tmp; + tmp = std::min(val12,val16); val16 = std::max(val12,val16); val12 = tmp; tmp = std::min(val13,val17); + val17 = std::max(val13,val17); val13 = tmp; tmp = std::min(val14,val18); val18 = std::max(val14,val18); + val14 = tmp; tmp = std::min(val15,val19); val19 = std::max(val15,val19); val15 = tmp; + tmp = std::min(val20,val24); val24 = std::max(val20,val24); val20 = tmp; tmp = std::min(val21,val25); + val25 = std::max(val21,val25); val21 = tmp; tmp = std::min(val22,val26); val26 = std::max(val22,val26); + val22 = tmp; tmp = std::min(val23,val27); val27 = std::max(val23,val27); val23 = tmp; + tmp = std::min(val28,val32); val32 = std::max(val28,val32); val28 = tmp; tmp = std::min(val29,val33); + val33 = std::max(val29,val33); val29 = tmp; tmp = std::min(val30,val34); val34 = std::max(val30,val34); + val30 = tmp; tmp = std::min(val31,val35); val35 = std::max(val31,val35); val31 = tmp; + tmp = std::min(val36,val40); val40 = std::max(val36,val40); val36 = tmp; tmp = std::min(val37,val41); + val41 = std::max(val37,val41); val37 = tmp; tmp = std::min(val38,val42); val42 = std::max(val38,val42); + val38 = tmp; tmp = std::min(val39,val43); val43 = std::max(val39,val43); val39 = tmp; + tmp = std::min(val44,val48); val48 = std::max(val44,val48); val44 = tmp; tmp = std::min(val0,val2); + val2 = std::max(val0,val2); val0 = tmp; tmp = std::min(val1,val3); val3 = std::max(val1,val3); val1 = tmp; + tmp = std::min(val4,val6); val6 = std::max(val4,val6); val4 = tmp; tmp = std::min(val5,val7); + val7 = std::max(val5,val7); val5 = tmp; tmp = std::min(val8,val10); val10 = std::max(val8,val10); val8 = tmp; + tmp = std::min(val9,val11); val11 = std::max(val9,val11); val9 = tmp; tmp = std::min(val12,val14); + val14 = std::max(val12,val14); val12 = tmp; tmp = std::min(val13,val15); val15 = std::max(val13,val15); + val13 = tmp; tmp = std::min(val16,val18); val18 = std::max(val16,val18); val16 = tmp; + tmp = std::min(val17,val19); val19 = std::max(val17,val19); val17 = tmp; tmp = std::min(val20,val22); + val22 = std::max(val20,val22); val20 = tmp; tmp = std::min(val21,val23); val23 = std::max(val21,val23); + val21 = tmp; tmp = std::min(val24,val26); val26 = std::max(val24,val26); val24 = tmp; + tmp = std::min(val25,val27); val27 = std::max(val25,val27); val25 = tmp; tmp = std::min(val28,val30); + val30 = std::max(val28,val30); val28 = tmp; tmp = std::min(val29,val31); val31 = std::max(val29,val31); + val29 = tmp; tmp = std::min(val32,val34); val34 = std::max(val32,val34); val32 = tmp; + tmp = std::min(val33,val35); val35 = std::max(val33,val35); val33 = tmp; tmp = std::min(val36,val38); + val38 = std::max(val36,val38); val36 = tmp; tmp = std::min(val37,val39); val39 = std::max(val37,val39); + val37 = tmp; tmp = std::min(val40,val42); val42 = std::max(val40,val42); val40 = tmp; + tmp = std::min(val41,val43); val43 = std::max(val41,val43); val41 = tmp; tmp = std::min(val44,val46); + val46 = std::max(val44,val46); val44 = tmp; tmp = std::min(val45,val47); val47 = std::max(val45,val47); + val45 = tmp; tmp = std::min(val2,val32); val32 = std::max(val2,val32); val2 = tmp; tmp = std::min(val3,val33); + val33 = std::max(val3,val33); val3 = tmp; tmp = std::min(val6,val36); val36 = std::max(val6,val36); val6 = tmp; + tmp = std::min(val7,val37); val37 = std::max(val7,val37); val7 = tmp; tmp = std::min(val10,val40); + val40 = std::max(val10,val40); val10 = tmp; tmp = std::min(val11,val41); val41 = std::max(val11,val41); + val11 = tmp; tmp = std::min(val14,val44); val44 = std::max(val14,val44); val14 = tmp; + tmp = std::min(val15,val45); val45 = std::max(val15,val45); val15 = tmp; tmp = std::min(val18,val48); + val48 = std::max(val18,val48); val18 = tmp; tmp = std::min(val2,val16); val16 = std::max(val2,val16); + val2 = tmp; tmp = std::min(val3,val17); val17 = std::max(val3,val17); val3 = tmp; + tmp = std::min(val6,val20); val20 = std::max(val6,val20); val6 = tmp; tmp = std::min(val7,val21); + val21 = std::max(val7,val21); val7 = tmp; tmp = std::min(val10,val24); val24 = std::max(val10,val24); + val10 = tmp; tmp = std::min(val11,val25); val25 = std::max(val11,val25); val11 = tmp; + tmp = std::min(val14,val28); val28 = std::max(val14,val28); val14 = tmp; tmp = std::min(val15,val29); + val29 = std::max(val15,val29); val15 = tmp; tmp = std::min(val18,val32); val32 = std::max(val18,val32); + val18 = tmp; tmp = std::min(val19,val33); val33 = std::max(val19,val33); val19 = tmp; + tmp = std::min(val22,val36); val36 = std::max(val22,val36); val22 = tmp; tmp = std::min(val23,val37); + val37 = std::max(val23,val37); val23 = tmp; tmp = std::min(val26,val40); val40 = std::max(val26,val40); + val26 = tmp; tmp = std::min(val27,val41); val41 = std::max(val27,val41); val27 = tmp; + tmp = std::min(val30,val44); val44 = std::max(val30,val44); val30 = tmp; tmp = std::min(val31,val45); + val45 = std::max(val31,val45); val31 = tmp; tmp = std::min(val34,val48); val48 = std::max(val34,val48); + val34 = tmp; tmp = std::min(val2,val8); val8 = std::max(val2,val8); val2 = tmp; tmp = std::min(val3,val9); + val9 = std::max(val3,val9); val3 = tmp; tmp = std::min(val6,val12); val12 = std::max(val6,val12); val6 = tmp; + tmp = std::min(val7,val13); val13 = std::max(val7,val13); val7 = tmp; tmp = std::min(val10,val16); + val16 = std::max(val10,val16); val10 = tmp; tmp = std::min(val11,val17); val17 = std::max(val11,val17); + val11 = tmp; tmp = std::min(val14,val20); val20 = std::max(val14,val20); val14 = tmp; + tmp = std::min(val15,val21); val21 = std::max(val15,val21); val15 = tmp; tmp = std::min(val18,val24); + val24 = std::max(val18,val24); val18 = tmp; tmp = std::min(val19,val25); val25 = std::max(val19,val25); + val19 = tmp; tmp = std::min(val22,val28); val28 = std::max(val22,val28); val22 = tmp; + tmp = std::min(val23,val29); val29 = std::max(val23,val29); val23 = tmp; tmp = std::min(val26,val32); + val32 = std::max(val26,val32); val26 = tmp; tmp = std::min(val27,val33); val33 = std::max(val27,val33); + val27 = tmp; tmp = std::min(val30,val36); val36 = std::max(val30,val36); val30 = tmp; + tmp = std::min(val31,val37); val37 = std::max(val31,val37); val31 = tmp; tmp = std::min(val34,val40); + val40 = std::max(val34,val40); val34 = tmp; tmp = std::min(val35,val41); val41 = std::max(val35,val41); + val35 = tmp; tmp = std::min(val38,val44); val44 = std::max(val38,val44); val38 = tmp; + tmp = std::min(val39,val45); val45 = std::max(val39,val45); val39 = tmp; tmp = std::min(val42,val48); + val48 = std::max(val42,val48); val42 = tmp; tmp = std::min(val2,val4); val4 = std::max(val2,val4); + val2 = tmp; tmp = std::min(val3,val5); val5 = std::max(val3,val5); val3 = tmp; tmp = std::min(val6,val8); + val8 = std::max(val6,val8); val6 = tmp; tmp = std::min(val7,val9); val9 = std::max(val7,val9); val7 = tmp; + tmp = std::min(val10,val12); val12 = std::max(val10,val12); val10 = tmp; tmp = std::min(val11,val13); + val13 = std::max(val11,val13); val11 = tmp; tmp = std::min(val14,val16); val16 = std::max(val14,val16); + val14 = tmp; tmp = std::min(val15,val17); val17 = std::max(val15,val17); val15 = tmp; + tmp = std::min(val18,val20); val20 = std::max(val18,val20); val18 = tmp; tmp = std::min(val19,val21); + val21 = std::max(val19,val21); val19 = tmp; tmp = std::min(val22,val24); val24 = std::max(val22,val24); + val22 = tmp; tmp = std::min(val23,val25); val25 = std::max(val23,val25); val23 = tmp; + tmp = std::min(val26,val28); val28 = std::max(val26,val28); val26 = tmp; tmp = std::min(val27,val29); + val29 = std::max(val27,val29); val27 = tmp; tmp = std::min(val30,val32); val32 = std::max(val30,val32); + val30 = tmp; tmp = std::min(val31,val33); val33 = std::max(val31,val33); val31 = tmp; + tmp = std::min(val34,val36); val36 = std::max(val34,val36); val34 = tmp; tmp = std::min(val35,val37); + val37 = std::max(val35,val37); val35 = tmp; tmp = std::min(val38,val40); val40 = std::max(val38,val40); + val38 = tmp; tmp = std::min(val39,val41); val41 = std::max(val39,val41); val39 = tmp; + tmp = std::min(val42,val44); val44 = std::max(val42,val44); val42 = tmp; tmp = std::min(val43,val45); + val45 = std::max(val43,val45); val43 = tmp; tmp = std::min(val46,val48); val48 = std::max(val46,val48); + val46 = tmp; val1 = std::max(val0,val1); val3 = std::max(val2,val3); val5 = std::max(val4,val5); + val7 = std::max(val6,val7); val9 = std::max(val8,val9); val11 = std::max(val10,val11); + val13 = std::max(val12,val13); val15 = std::max(val14,val15); val17 = std::max(val16,val17); + val19 = std::max(val18,val19); val21 = std::max(val20,val21); val23 = std::max(val22,val23); + val24 = std::min(val24,val25); val26 = std::min(val26,val27); val28 = std::min(val28,val29); + val30 = std::min(val30,val31); val32 = std::min(val32,val33); val34 = std::min(val34,val35); + val36 = std::min(val36,val37); val38 = std::min(val38,val39); val40 = std::min(val40,val41); + val42 = std::min(val42,val43); val44 = std::min(val44,val45); val46 = std::min(val46,val47); + val32 = std::max(val1,val32); val34 = std::max(val3,val34); val36 = std::max(val5,val36); + val38 = std::max(val7,val38); val9 = std::min(val9,val40); val11 = std::min(val11,val42); + val13 = std::min(val13,val44); val15 = std::min(val15,val46); val17 = std::min(val17,val48); + val24 = std::max(val9,val24); val26 = std::max(val11,val26); val28 = std::max(val13,val28); + val30 = std::max(val15,val30); val17 = std::min(val17,val32); val19 = std::min(val19,val34); + val21 = std::min(val21,val36); val23 = std::min(val23,val38); val24 = std::max(val17,val24); + val26 = std::max(val19,val26); val21 = std::min(val21,val28); val23 = std::min(val23,val30); + val24 = std::max(val21,val24); val23 = std::min(val23,val26); + return std::max(val23,val24); + } + + //! Return sqrt(x^2 + y^2). + template + inline T hypot(const T x, const T y) { + return std::sqrt(x*x + y*y); + } + + template + inline T hypot(const T x, const T y, const T z) { + return std::sqrt(x*x + y*y + z*z); + } + + template + inline T _hypot(const T x, const T y) { // Slower but more precise version + T nx = cimg::abs(x), ny = cimg::abs(y), t; + if (nx0) { t/=nx; return nx*std::sqrt(1 + t*t); } + return 0; + } + + //! Return the factorial of n + inline double factorial(const int n) { + if (n<0) return cimg::type::nan(); + if (n<2) return 1; + double res = 2; + for (int i = 3; i<=n; ++i) res*=i; + return res; + } + + //! Return the number of permutations of k objects in a set of n objects. + inline double permutations(const int k, const int n, const bool with_order) { + if (n<0 || k<0) return cimg::type::nan(); + if (k>n) return 0; + double res = 1; + for (int i = n; i>=n - k + 1; --i) res*=i; + return with_order?res:res/cimg::factorial(k); + } + + inline double _fibonacci(int exp) { + double + base = (1 + std::sqrt(5.0))/2, + result = 1/std::sqrt(5.0); + while (exp) { + if (exp&1) result*=base; + exp>>=1; + base*=base; + } + return result; + } + + //! Calculate fibonacci number. + // (Precise up to n = 78, less precise for n>78). + inline double fibonacci(const int n) { + if (n<0) return cimg::type::nan(); + if (n<3) return 1; + if (n<11) { + cimg_uint64 fn1 = 1, fn2 = 1, fn = 0; + for (int i = 3; i<=n; ++i) { fn = fn1 + fn2; fn2 = fn1; fn1 = fn; } + return (double)fn; + } + if (n<75) // precise up to n = 74, faster than the integer calculation above for n>10 + return (double)((cimg_uint64)(_fibonacci(n) + 0.5)); + + if (n<94) { // precise up to n = 78, less precise for n>78 up to n = 93, overflows for n>93 + cimg_uint64 + fn1 = (cimg_uint64)1304969544928657ULL, + fn2 = (cimg_uint64)806515533049393ULL, + fn = 0; + for (int i = 75; i<=n; ++i) { fn = fn1 + fn2; fn2 = fn1; fn1 = fn; } + return (double)fn; + } + return _fibonacci(n); // Not precise, but better than the wrong overflowing calculation + } + + //! Calculate greatest common divisor. + inline long gcd(long a, long b) { + while (a) { const long c = a; a = b%a; b = c; } + return b; + } + + //! Convert ascii character to lower case. + inline char lowercase(const char x) { + return (char)((x<'A'||x>'Z')?x:x - 'A' + 'a'); + } + inline double lowercase(const double x) { + return (double)((x<'A'||x>'Z')?x:x - 'A' + 'a'); + } + + //! Convert C-string to lower case. + inline void lowercase(char *const str) { + if (str) for (char *ptr = str; *ptr; ++ptr) *ptr = lowercase(*ptr); + } + + //! Convert ascii character to upper case. + inline char uppercase(const char x) { + return (char)((x<'a'||x>'z')?x:x - 'a' + 'A'); + } + + inline double uppercase(const double x) { + return (double)((x<'a'||x>'z')?x:x - 'a' + 'A'); + } + + //! Convert C-string to upper case. + inline void uppercase(char *const str) { + if (str) for (char *ptr = str; *ptr; ++ptr) *ptr = uppercase(*ptr); + } + + //! Read value in a C-string. + /** + \param str C-string containing the float value to read. + \return Read value. + \note Same as std::atof() extended to manage the retrieval of fractions from C-strings, + as in "1/2". + **/ + inline double atof(const char *const str) { + double x = 0, y = 1; + return str && cimg_sscanf(str,"%lf/%lf",&x,&y)>0?x/y:0; + } + + //! Compare the first \p l characters of two C-strings, ignoring the case. + /** + \param str1 C-string. + \param str2 C-string. + \param l Number of characters to compare. + \return \c 0 if the two strings are equal, something else otherwise. + \note This function has to be defined since it is not provided by all C++-compilers (not ANSI). + **/ + inline int strncasecmp(const char *const str1, const char *const str2, const int l) { + if (!l) return 0; + if (!str1) return str2?-1:0; + const char *nstr1 = str1, *nstr2 = str2; + int k, diff = 0; for (k = 0; kp && str[q]==delimiter; ) { --q; if (!is_iterative) break; } + } + const int n = q - p + 1; + if (n!=l) { std::memmove(str,str + p,(unsigned int)n); str[n] = 0; return true; } + return false; + } + + //! Remove white spaces on the start and/or end of a C-string. + inline bool strpare(char *const str, const bool is_symmetric, const bool is_iterative) { + if (!str) return false; + const int l = (int)std::strlen(str); + int p, q; + if (is_symmetric) for (p = 0, q = l - 1; pp && (signed char)str[q]<=' '; ) { --q; if (!is_iterative) break; } + } + const int n = q - p + 1; + if (n!=l) { std::memmove(str,str + p,(unsigned int)n); str[n] = 0; return true; } + return false; + } + + //! Replace reserved characters (for Windows filename) by another character. + /** + \param[in,out] str C-string to work with (modified at output). + \param[in] c Replacement character. + **/ + inline void strwindows_reserved(char *const str, const char c='_') { + for (char *s = str; *s; ++s) { + const char i = *s; + if (i=='<' || i=='>' || i==':' || i=='\"' || i=='/' || i=='\\' || i=='|' || i=='?' || i=='*') *s = c; + } + } + + //! Replace escape sequences in C-strings by their binary ascii values. + /** + \param[in,out] str C-string to work with (modified at output). + **/ + inline void strunescape(char *const str) { +#define cimg_strunescape(ci,co) case ci : *nd = co; ++ns; break; + unsigned int val = 0; + for (char *ns = str, *nd = str; *ns || (bool)(*nd=0); ++nd) if (*ns=='\\') switch (*(++ns)) { + cimg_strunescape('a','\a'); + cimg_strunescape('b','\b'); + cimg_strunescape('e',0x1B); + cimg_strunescape('f','\f'); + cimg_strunescape('n','\n'); + cimg_strunescape('r','\r'); + cimg_strunescape('t','\t'); + cimg_strunescape('v','\v'); + cimg_strunescape('\\','\\'); + cimg_strunescape('\'','\''); + cimg_strunescape('\"','\"'); + cimg_strunescape('\?','\?'); + case 0 : *nd = 0; break; + case '0' : case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' : + cimg_sscanf(ns,"%o",&val); while (*ns>='0' && *ns<='7') ++ns; + *nd = (char)val; break; + case 'x' : + cimg_sscanf(++ns,"%x",&val); + while ((*ns>='0' && *ns<='9') || (*ns>='a' && *ns<='f') || (*ns>='A' && *ns<='F')) ++ns; + *nd = (char)val; break; + default : *nd = *(ns++); + } else *nd = *(ns++); + } + + // Return a temporary string describing the size of a memory buffer. + inline const char *strbuffersize(const cimg_ulong size); + + // Return string that identifies the running OS. + inline const char *stros() { +#if defined(linux) || defined(__linux) || defined(__linux__) + static const char *const str = "Linux"; +#elif defined(sun) || defined(__sun) + static const char *const str = "Sun OS"; +#elif defined(BSD) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined (__DragonFly__) + static const char *const str = "BSD"; +#elif defined(sgi) || defined(__sgi) + static const char *const str = "Irix"; +#elif defined(__MACOSX__) || defined(__APPLE__) + static const char *const str = "Mac OS"; +#elif defined(unix) || defined(__unix) || defined(__unix__) + static const char *const str = "Generic Unix"; +#elif defined(_MSC_VER) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || \ + defined(WIN64) || defined(_WIN64) || defined(__WIN64__) + static const char *const str = "Windows"; +#else + const char + *const _str1 = std::getenv("OSTYPE"), + *const _str2 = _str1?_str1:std::getenv("OS"), + *const str = _str2?_str2:"Unknown OS"; +#endif + return str; + } + + //! Return the basename of a filename. + inline const char* basename(const char *const s, const char separator=cimg_file_separator) { + const char *p = 0, *np = s; + while (np>=s && (p=np)) np = std::strchr(np,separator) + 1; + return p; + } + + // Return a random filename. + inline const char* filenamerand() { + cimg::mutex(6); + static char randomid[9]; + cimg::srand(); + for (unsigned int k = 0; k<8; ++k) { + const int v = (int)cimg::rand(65535)%3; + randomid[k] = (char)(v==0?('0' + ((int)cimg::rand(65535)%10)): + (v==1?('a' + ((int)cimg::rand(65535)%26)): + ('A' + ((int)cimg::rand(65535)%26)))); + } + cimg::mutex(6,0); + return randomid; + } + + // Convert filename as a Windows-style filename (short path name). + inline void winformat_string(char *const str) { + if (str && *str) { +#if cimg_OS==2 + char *const nstr = new char[MAX_PATH]; + if (GetShortPathNameA(str,nstr,MAX_PATH)) std::strcpy(str,nstr); + delete[] nstr; +#endif + } + } + + // Open a file (with wide character support on Windows). + inline std::FILE *win_fopen(const char *const path, const char *const mode); + + //! Open a file. + /** + \param path Path of the filename to open. + \param mode C-string describing the opening mode. + \return Opened file. + \note Same as std::fopen() but throw a \c CImgIOException when + the specified file cannot be opened, instead of returning \c 0. + **/ + inline std::FILE *fopen(const char *const path, const char *const mode) { + if (!path) + throw CImgArgumentException("cimg::fopen(): Specified file path is (null)."); + if (!mode) + throw CImgArgumentException("cimg::fopen(): File '%s', specified mode is (null).", + path); + std::FILE *res = 0; + if (*path=='-' && (!path[1] || path[1]=='.')) { + res = (*mode=='r')?cimg::_stdin():cimg::_stdout(); +#if cimg_OS==2 + if (*mode && mode[1]=='b') { // Force stdin/stdout to be in binary mode. +#ifdef __BORLANDC__ + if (setmode(_fileno(res),0x8000)==-1) res = 0; +#else + if (_setmode(_fileno(res),0x8000)==-1) res = 0; +#endif + } +#endif + } else res = std_fopen(path,mode); + if (!res) throw CImgIOException("cimg::fopen(): Failed to open file '%s' with mode '%s'.", + path,mode); + return res; + } + + //! Close a file. + /** + \param file File to close. + \return \c 0 if file has been closed properly, something else otherwise. + \note Same as std::fclose() but display a warning message if + the file has not been closed properly. + **/ + inline int fclose(std::FILE *file) { + if (!file) { warn("cimg::fclose(): Specified file is (null)."); return 0; } + if (file==cimg::_stdin(false) || file==cimg::_stdout(false)) return 0; + const int errn = std::fclose(file); + if (errn!=0) warn("cimg::fclose(): Error code %d returned during file closing.", + errn); + return errn; + } + + //! Version of 'fseek()' that supports >=64bits offsets everywhere (for Windows). + inline int fseek(FILE *stream, cimg_long offset, int origin) { +#if defined(WIN64) || defined(_WIN64) || defined(__WIN64__) + return _fseeki64(stream,(__int64)offset,origin); +#else + return std::fseek(stream,offset,origin); +#endif + } + + //! Version of 'ftell()' that supports >=64bits offsets everywhere (for Windows). + inline cimg_long ftell(FILE *stream) { +#if defined(WIN64) || defined(_WIN64) || defined(__WIN64__) + return (cimg_long)_ftelli64(stream); +#else + return (cimg_long)std::ftell(stream); +#endif + } + + //! Check if a path is a directory. + /** + \param path Specified path to test. + **/ + inline bool is_directory(const char *const path) { + if (!path || !*path) return false; +#if cimg_OS==1 + struct stat st_buf; + return (!stat(path,&st_buf) && S_ISDIR(st_buf.st_mode)); +#elif cimg_OS==2 + const unsigned int res = (unsigned int)GetFileAttributesA(path); + return res==INVALID_FILE_ATTRIBUTES?false:(res&16); +#else + return false; +#endif + } + + //! Check if a path is a file. + /** + \param path Specified path to test. + **/ + inline bool is_file(const char *const path) { + if (!path || !*path) return false; + std::FILE *const file = std_fopen(path,"rb"); + if (!file) return false; + std::fclose(file); + return !is_directory(path); + } + + //! Get file size. + /** + \param filename Specified filename to get size from. + \return File size or '-1' if file does not exist. + **/ + inline cimg_int64 fsize(const char *const filename) { + std::FILE *const file = std::fopen(filename,"rb"); + if (!file) return (cimg_int64)-1; + std::fseek(file,0,SEEK_END); + const cimg_int64 siz = (cimg_int64)std::ftell(file); + std::fclose(file); + return siz; + } + + //! Get last write time of a given file or directory (multiple-attributes version). + /** + \param path Specified path to get attributes from. + \param[in,out] attr Type of requested time attributes. + Can be { 0=year | 1=month | 2=day | 3=day of week | 4=hour | 5=minute | 6=second } + Replaced by read attributes after return (or -1 if an error occured). + \param nb_attr Number of attributes to read/write. + \return Latest read attribute. + **/ + template + inline int fdate(const char *const path, T *attr, const unsigned int nb_attr) { +#define _cimg_fdate_err() for (unsigned int i = 0; i + inline int date(T *attr, const unsigned int nb_attr) { + int res = -1; + cimg::mutex(6); +#if cimg_OS==2 + SYSTEMTIME st; + GetLocalTime(&st); + for (unsigned int i = 0; itm_year + 1900:attr[i]==1?st->tm_mon + 1:attr[i]==2?st->tm_mday: + attr[i]==3?st->tm_wday:attr[i]==4?st->tm_hour:attr[i]==5?st->tm_min: + attr[i]==6?st->tm_sec:-1); + attr[i] = (T)res; + } +#endif + cimg::mutex(6,0); + return res; + } + + //! Get current local time (single-attribute version). + /** + \param attr Type of requested time attribute. + Can be { 0=year | 1=month | 2=day | 3=day of week | 4=hour | 5=minute | 6=second } + \return Specified attribute or -1 if an error occured. + **/ + inline int date(unsigned int attr) { + int out = (int)attr; + return date(&out,1); + } + + // Get/set path to store temporary files. + inline const char* temporary_path(const char *const user_path=0, const bool reinit_path=false); + + // Get/set path to the Program Files/ directory (Windows only). +#if cimg_OS==2 + inline const char* programfiles_path(const char *const user_path=0, const bool reinit_path=false); +#endif + + // Get/set path to the ImageMagick's \c convert binary. + inline const char* imagemagick_path(const char *const user_path=0, const bool reinit_path=false); + + // Get/set path to the GraphicsMagick's \c gm binary. + inline const char* graphicsmagick_path(const char *const user_path=0, const bool reinit_path=false); + + // Get/set path to the XMedcon's \c medcon binary. + inline const char* medcon_path(const char *const user_path=0, const bool reinit_path=false); + + // Get/set path to the FFMPEG's \c ffmpeg binary. + inline const char *ffmpeg_path(const char *const user_path=0, const bool reinit_path=false); + + // Get/set path to the \c gzip binary. + inline const char *gzip_path(const char *const user_path=0, const bool reinit_path=false); + + // Get/set path to the \c gunzip binary. + inline const char *gunzip_path(const char *const user_path=0, const bool reinit_path=false); + + // Get/set path to the \c dcraw binary. + inline const char *dcraw_path(const char *const user_path=0, const bool reinit_path=false); + + // Get/set path to the \c wget binary. + inline const char *wget_path(const char *const user_path=0, const bool reinit_path=false); + + // Get/set path to the \c curl binary. + inline const char *curl_path(const char *const user_path=0, const bool reinit_path=false); + + //! Split filename into two C-strings \c body and \c extension. + /** + filename and body must not overlap! + **/ + inline const char *split_filename(const char *const filename, char *const body=0) { + if (!filename) { if (body) *body = 0; return 0; } + const char *p = 0; for (const char *np = filename; np>=filename && (p=np); np = std::strchr(np,'.') + 1) {} + if (p==filename) { + if (body) std::strcpy(body,filename); + return filename + std::strlen(filename); + } + const unsigned int l = (unsigned int)(p - filename - 1); + if (body) { if (l) std::memcpy(body,filename,l); body[l] = 0; } + return p; + } + + //! Generate a numbered version of a filename. + inline char* number_filename(const char *const filename, const int number, + const unsigned int digits, char *const str) { + if (!filename) { if (str) *str = 0; return 0; } + char *const format = new char[1024], *const body = new char[1024]; + const char *const ext = cimg::split_filename(filename,body); + if (*ext) cimg_snprintf(format,1024,"%%s_%%.%ud.%%s",digits); + else cimg_snprintf(format,1024,"%%s_%%.%ud",digits); + cimg_sprintf(str,format,body,number,ext); + delete[] format; delete[] body; + return str; + } + + //! Read data from file. + /** + \param[out] ptr Pointer to memory buffer that will contain the binary data read from file. + \param nmemb Number of elements to read. + \param stream File to read data from. + \return Number of read elements. + \note Same as std::fread() but may display warning message if all elements could not be read. + **/ + template + inline size_t fread(T *const ptr, const size_t nmemb, std::FILE *stream) { + if (!ptr || !stream) + throw CImgArgumentException("cimg::fread(): Invalid reading request of %u %s%s from file %p to buffer %p.", + nmemb,cimg::type::string(),nmemb>1?"s":"",stream,ptr); + if (!nmemb) return 0; + const size_t wlimitT = 63*1024*1024, wlimit = wlimitT/sizeof(T); + size_t to_read = nmemb, al_read = 0, l_to_read = 0, l_al_read = 0; + do { + l_to_read = (to_read*sizeof(T))0); + if (to_read>0) + warn("cimg::fread(): Only %lu/%lu elements could be read from file.", + (unsigned long)al_read,(unsigned long)nmemb); + return al_read; + } + + //! Write data to file. + /** + \param ptr Pointer to memory buffer containing the binary data to write on file. + \param nmemb Number of elements to write. + \param[out] stream File to write data on. + \return Number of written elements. + \note Similar to std::fwrite but may display warning messages if all elements could not be written. + **/ + template + inline size_t fwrite(const T *ptr, const size_t nmemb, std::FILE *stream) { + if (!ptr || !stream) + throw CImgArgumentException("cimg::fwrite(): Invalid writing request of %u %s%s from buffer %p to file %p.", + nmemb,cimg::type::string(),nmemb>1?"s":"",ptr,stream); + if (!nmemb) return 0; + const size_t wlimitT = 63*1024*1024, wlimit = wlimitT/sizeof(T); + size_t to_write = nmemb, al_write = 0, l_to_write = 0, l_al_write = 0; + do { + l_to_write = (to_write*sizeof(T))0); + if (to_write>0) + warn("cimg::fwrite(): Only %lu/%lu elements could be written in file.", + (unsigned long)al_write,(unsigned long)nmemb); + return al_write; + } + + //! Create an empty file. + /** + \param file Input file (can be \c 0 if \c filename is set). + \param filename Filename, as a C-string (can be \c 0 if \c file is set). + **/ + inline void fempty(std::FILE *const file, const char *const filename) { + if (!file && !filename) + throw CImgArgumentException("cimg::fempty(): Specified filename is (null)."); + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + if (!file) cimg::fclose(nfile); + } + + // Try to guess format from an image file. + inline const char *ftype(std::FILE *const file, const char *const filename); + + // Load file from network as a local temporary file. + inline char *load_network(const char *const url, char *const filename_local, + const unsigned int timeout=0, const bool try_fallback=false, + const char *const referer=0); + + //! Return options specified on the command line. + inline const char* option(const char *const name, const int argc, const char *const *const argv, + const char *const defaut, const char *const usage, const bool reset_static) { + static bool first = true, visu = false; + if (reset_static) { first = true; return 0; } + const char *res = 0; + if (first) { + first = false; + visu = cimg::option("-h",argc,argv,(char*)0,(char*)0,false)!=0; + visu |= cimg::option("-help",argc,argv,(char*)0,(char*)0,false)!=0; + visu |= cimg::option("--help",argc,argv,(char*)0,(char*)0,false)!=0; + } + if (!name && visu) { + if (usage) { + std::fprintf(cimg::output(),"\n %s%s%s",cimg::t_red,cimg::basename(argv[0]),cimg::t_normal); + std::fprintf(cimg::output(),": %s",usage); + std::fprintf(cimg::output()," (%s, %s)\n\n",cimg_date,cimg_time); + } + if (defaut) std::fprintf(cimg::output(),"%s\n",defaut); + } + if (name) { + if (argc>0) { + int k = 0; + while (k Operating System: %s%-13s%s %s('cimg_OS'=%d)%s\n", + cimg::t_bold, + cimg_OS==1?"Unix":(cimg_OS==2?"Windows":"Unknow"), + cimg::t_normal,cimg::t_green, + cimg_OS, + cimg::t_normal); + + std::fprintf(cimg::output()," > CPU endianness: %s%s Endian%s\n", + cimg::t_bold, + cimg::endianness()?"Big":"Little", + cimg::t_normal); + + std::fprintf(cimg::output()," > Verbosity mode: %s%-13s%s %s('cimg_verbosity'=%d)%s\n", + cimg::t_bold, + cimg_verbosity==0?"Quiet": + cimg_verbosity==1?"Console": + cimg_verbosity==2?"Dialog": + cimg_verbosity==3?"Console+Warnings":"Dialog+Warnings", + cimg::t_normal,cimg::t_green, + cimg_verbosity, + cimg::t_normal); + + std::fprintf(cimg::output()," > Stricts warnings: %s%-13s%s %s('cimg_strict_warnings' %s)%s\n", + cimg::t_bold, +#ifdef cimg_strict_warnings + "Yes",cimg::t_normal,cimg::t_green,"defined", +#else + "No",cimg::t_normal,cimg::t_green,"undefined", +#endif + cimg::t_normal); + + std::fprintf(cimg::output()," > Support for C++11: %s%-13s%s %s('cimg_use_cpp11'=%d)%s\n", + cimg::t_bold, + cimg_use_cpp11?"Yes":"No", + cimg::t_normal,cimg::t_green, + (int)cimg_use_cpp11, + cimg::t_normal); + + std::fprintf(cimg::output()," > Using VT100 messages: %s%-13s%s %s('cimg_use_vt100' %s)%s\n", + cimg::t_bold, +#ifdef cimg_use_vt100 + "Yes",cimg::t_normal,cimg::t_green,"defined", +#else + "No",cimg::t_normal,cimg::t_green,"undefined", +#endif + cimg::t_normal); + + std::fprintf(cimg::output()," > Display type: %s%-13s%s %s('cimg_display'=%d)%s\n", + cimg::t_bold, + cimg_display==0?"No display":cimg_display==1?"X11":cimg_display==2?"Windows GDI":"Unknown", + cimg::t_normal,cimg::t_green, + (int)cimg_display, + cimg::t_normal); + +#if cimg_display==1 + std::fprintf(cimg::output()," > Using XShm for X11: %s%-13s%s %s('cimg_use_xshm' %s)%s\n", + cimg::t_bold, +#ifdef cimg_use_xshm + "Yes",cimg::t_normal,cimg::t_green,"defined", +#else + "No",cimg::t_normal,cimg::t_green,"undefined", +#endif + cimg::t_normal); + + std::fprintf(cimg::output()," > Using XRand for X11: %s%-13s%s %s('cimg_use_xrandr' %s)%s\n", + cimg::t_bold, +#ifdef cimg_use_xrandr + "Yes",cimg::t_normal,cimg::t_green,"defined", +#else + "No",cimg::t_normal,cimg::t_green,"undefined", +#endif + cimg::t_normal); +#endif + std::fprintf(cimg::output()," > Using OpenMP: %s%-13s%s %s('cimg_use_openmp' %s)%s\n", + cimg::t_bold, +#ifdef cimg_use_openmp + "Yes",cimg::t_normal,cimg::t_green,"defined", +#else + "No",cimg::t_normal,cimg::t_green,"undefined", +#endif + cimg::t_normal); + std::fprintf(cimg::output()," > Using PNG library: %s%-13s%s %s('cimg_use_png' %s)%s\n", + cimg::t_bold, +#ifdef cimg_use_png + "Yes",cimg::t_normal,cimg::t_green,"defined", +#else + "No",cimg::t_normal,cimg::t_green,"undefined", +#endif + cimg::t_normal); + std::fprintf(cimg::output()," > Using JPEG library: %s%-13s%s %s('cimg_use_jpeg' %s)%s\n", + cimg::t_bold, +#ifdef cimg_use_jpeg + "Yes",cimg::t_normal,cimg::t_green,"defined", +#else + "No",cimg::t_normal,cimg::t_green,"undefined", +#endif + cimg::t_normal); + + std::fprintf(cimg::output()," > Using TIFF library: %s%-13s%s %s('cimg_use_tiff' %s)%s\n", + cimg::t_bold, +#ifdef cimg_use_tiff + "Yes",cimg::t_normal,cimg::t_green,"defined", +#else + "No",cimg::t_normal,cimg::t_green,"undefined", +#endif + cimg::t_normal); + + std::fprintf(cimg::output()," > Using Magick++ library: %s%-13s%s %s('cimg_use_magick' %s)%s\n", + cimg::t_bold, +#ifdef cimg_use_magick + "Yes",cimg::t_normal,cimg::t_green,"defined", +#else + "No",cimg::t_normal,cimg::t_green,"undefined", +#endif + cimg::t_normal); + + std::fprintf(cimg::output()," > Using FFTW3 library: %s%-13s%s %s('cimg_use_fftw3' %s)%s\n", + cimg::t_bold, +#ifdef cimg_use_fftw3 + "Yes",cimg::t_normal,cimg::t_green,"defined", +#else + "No",cimg::t_normal,cimg::t_green,"undefined", +#endif + cimg::t_normal); + + std::fprintf(cimg::output()," > Using LAPACK library: %s%-13s%s %s('cimg_use_lapack' %s)%s\n", + cimg::t_bold, +#ifdef cimg_use_lapack + "Yes",cimg::t_normal,cimg::t_green,"defined", +#else + "No",cimg::t_normal,cimg::t_green,"undefined", +#endif + cimg::t_normal); + + char *const tmp = new char[1024]; + cimg_snprintf(tmp,1024,"\"%.1020s\"",cimg::imagemagick_path()); + std::fprintf(cimg::output()," > Path of ImageMagick: %s%-13s%s\n", + cimg::t_bold, + tmp, + cimg::t_normal); + + cimg_snprintf(tmp,1024,"\"%.1020s\"",cimg::graphicsmagick_path()); + std::fprintf(cimg::output()," > Path of GraphicsMagick: %s%-13s%s\n", + cimg::t_bold, + tmp, + cimg::t_normal); + + cimg_snprintf(tmp,1024,"\"%.1020s\"",cimg::medcon_path()); + std::fprintf(cimg::output()," > Path of 'medcon': %s%-13s%s\n", + cimg::t_bold, + tmp, + cimg::t_normal); + + cimg_snprintf(tmp,1024,"\"%.1020s\"",cimg::temporary_path()); + std::fprintf(cimg::output()," > Temporary path: %s%-13s%s\n", + cimg::t_bold, + tmp, + cimg::t_normal); + + std::fprintf(cimg::output(),"\n"); + delete[] tmp; + } + + // Declare LAPACK function signatures if LAPACK support is enabled. +#ifdef cimg_use_lapack + template + inline void getrf(int &N, T *lapA, int *IPIV, int &INFO) { + dgetrf_(&N,&N,lapA,&N,IPIV,&INFO); + } + + inline void getrf(int &N, float *lapA, int *IPIV, int &INFO) { + sgetrf_(&N,&N,lapA,&N,IPIV,&INFO); + } + + template + inline void getri(int &N, T *lapA, int *IPIV, T* WORK, int &LWORK, int &INFO) { + dgetri_(&N,lapA,&N,IPIV,WORK,&LWORK,&INFO); + } + + inline void getri(int &N, float *lapA, int *IPIV, float* WORK, int &LWORK, int &INFO) { + sgetri_(&N,lapA,&N,IPIV,WORK,&LWORK,&INFO); + } + + template + inline void gesvd(char &JOB, int &M, int &N, T *lapA, int &MN, + T *lapS, T *lapU, T *lapV, T *WORK, int &LWORK, int &INFO) { + dgesvd_(&JOB,&JOB,&M,&N,lapA,&MN,lapS,lapU,&M,lapV,&N,WORK,&LWORK,&INFO); + } + + inline void gesvd(char &JOB, int &M, int &N, float *lapA, int &MN, + float *lapS, float *lapU, float *lapV, float *WORK, int &LWORK, int &INFO) { + sgesvd_(&JOB,&JOB,&M,&N,lapA,&MN,lapS,lapU,&M,lapV,&N,WORK,&LWORK,&INFO); + } + + template + inline void getrs(char &TRANS, int &N, T *lapA, int *IPIV, T *lapB, int &INFO) { + int one = 1; + dgetrs_(&TRANS,&N,&one,lapA,&N,IPIV,lapB,&N,&INFO); + } + + inline void getrs(char &TRANS, int &N, float *lapA, int *IPIV, float *lapB, int &INFO) { + int one = 1; + sgetrs_(&TRANS,&N,&one,lapA,&N,IPIV,lapB,&N,&INFO); + } + + template + inline void syev(char &JOB, char &UPLO, int &N, T *lapA, T *lapW, T *WORK, int &LWORK, int &INFO) { + dsyev_(&JOB,&UPLO,&N,lapA,&N,lapW,WORK,&LWORK,&INFO); + } + + inline void syev(char &JOB, char &UPLO, int &N, float *lapA, float *lapW, float *WORK, int &LWORK, int &INFO) { + ssyev_(&JOB,&UPLO,&N,lapA,&N,lapW,WORK,&LWORK,&INFO); + } + + template + inline void sgels(char & TRANS, int &M, int &N, int &NRHS, T* lapA, int &LDA, + T* lapB, int &LDB, T* WORK, int &LWORK, int &INFO){ + dgels_(&TRANS, &M, &N, &NRHS, lapA, &LDA, lapB, &LDB, WORK, &LWORK, &INFO); + } + + inline void sgels(char & TRANS, int &M, int &N, int &NRHS, float* lapA, int &LDA, + float* lapB, int &LDB, float* WORK, int &LWORK, int &INFO){ + sgels_(&TRANS, &M, &N, &NRHS, lapA, &LDA, lapB, &LDB, WORK, &LWORK, &INFO); + } + +#endif + + // End of the 'cimg' namespace + } + + /*------------------------------------------------ + # + # + # Definition of mathematical operators and + # external functions. + # + # + -------------------------------------------------*/ + +#define _cimg_create_ext_operators(typ) \ + template \ + inline CImg::type> operator+(const typ val, const CImg& img) { \ + return img + val; \ + } \ + template \ + inline CImg::type> operator-(const typ val, const CImg& img) { \ + typedef typename cimg::superset::type Tt; \ + return CImg(img._width,img._height,img._depth,img._spectrum,val)-=img; \ + } \ + template \ + inline CImg::type> operator*(const typ val, const CImg& img) { \ + return img*val; \ + } \ + template \ + inline CImg::type> operator/(const typ val, const CImg& img) { \ + return val*img.get_invert(); \ + } \ + template \ + inline CImg::type> operator&(const typ val, const CImg& img) { \ + return img & val; \ + } \ + template \ + inline CImg::type> operator|(const typ val, const CImg& img) { \ + return img | val; \ + } \ + template \ + inline CImg::type> operator^(const typ val, const CImg& img) { \ + return img ^ val; \ + } \ + template \ + inline bool operator==(const typ val, const CImg& img) { \ + return img == val; \ + } \ + template \ + inline bool operator!=(const typ val, const CImg& img) { \ + return img != val; \ + } + + _cimg_create_ext_operators(bool) + _cimg_create_ext_operators(unsigned char) + _cimg_create_ext_operators(char) + _cimg_create_ext_operators(signed char) + _cimg_create_ext_operators(unsigned short) + _cimg_create_ext_operators(short) + _cimg_create_ext_operators(unsigned int) + _cimg_create_ext_operators(int) + _cimg_create_ext_operators(cimg_uint64) + _cimg_create_ext_operators(cimg_int64) + _cimg_create_ext_operators(float) + _cimg_create_ext_operators(double) + _cimg_create_ext_operators(long double) + + template + inline CImg<_cimg_Tfloat> operator+(const char *const expression, const CImg& img) { + return img + expression; + } + + template + inline CImg<_cimg_Tfloat> operator-(const char *const expression, const CImg& img) { + return CImg<_cimg_Tfloat>(img,false).fill(expression,true)-=img; + } + + template + inline CImg<_cimg_Tfloat> operator*(const char *const expression, const CImg& img) { + return img*expression; + } + + template + inline CImg<_cimg_Tfloat> operator/(const char *const expression, const CImg& img) { + return expression*img.get_invert(); + } + + template + inline CImg operator&(const char *const expression, const CImg& img) { + return img & expression; + } + + template + inline CImg operator|(const char *const expression, const CImg& img) { + return img | expression; + } + + template + inline CImg operator^(const char *const expression, const CImg& img) { + return img ^ expression; + } + + template + inline bool operator==(const char *const expression, const CImg& img) { + return img==expression; + } + + template + inline bool operator!=(const char *const expression, const CImg& img) { + return img!=expression; + } + + template + inline CImg transpose(const CImg& instance) { + return instance.get_transpose(); + } + + template + inline CImg<_cimg_Tfloat> invert(const CImg& instance) { + return instance.get_invert(); + } + + template + inline CImg<_cimg_Tfloat> pseudoinvert(const CImg& instance) { + return instance.get_pseudoinvert(); + } + +#define _cimg_create_ext_pointwise_function(name) \ + template \ + inline CImg<_cimg_Tfloat> name(const CImg& instance) { \ + return instance.get_##name(); \ + } + + _cimg_create_ext_pointwise_function(sqr) + _cimg_create_ext_pointwise_function(sqrt) + _cimg_create_ext_pointwise_function(exp) + _cimg_create_ext_pointwise_function(log) + _cimg_create_ext_pointwise_function(log2) + _cimg_create_ext_pointwise_function(log10) + _cimg_create_ext_pointwise_function(abs) + _cimg_create_ext_pointwise_function(sign) + _cimg_create_ext_pointwise_function(cos) + _cimg_create_ext_pointwise_function(sin) + _cimg_create_ext_pointwise_function(sinc) + _cimg_create_ext_pointwise_function(tan) + _cimg_create_ext_pointwise_function(acos) + _cimg_create_ext_pointwise_function(asin) + _cimg_create_ext_pointwise_function(atan) + _cimg_create_ext_pointwise_function(cosh) + _cimg_create_ext_pointwise_function(sinh) + _cimg_create_ext_pointwise_function(tanh) + _cimg_create_ext_pointwise_function(acosh) + _cimg_create_ext_pointwise_function(asinh) + _cimg_create_ext_pointwise_function(atanh) + + /*----------------------------------- + # + # Define the CImgDisplay structure + # + ----------------------------------*/ + //! Allow the creation of windows, display images on them and manage user events (keyboard, mouse and windows events). + /** + CImgDisplay methods rely on a low-level graphic library to perform: it can be either \b X-Window + (X11, for Unix-based systems) or \b GDI32 (for Windows-based systems). + If both libraries are missing, CImgDisplay will not be able to display images on screen, and will enter + a minimal mode where warning messages will be outputed each time the program is trying to call one of the + CImgDisplay method. + + The configuration variable \c cimg_display tells about the graphic library used. + It is set automatically by \CImg when one of these graphic libraries has been detected. + But, you can override its value if necessary. Valid choices are: + - 0: Disable display capabilities. + - 1: Use \b X-Window (X11) library. + - 2: Use \b GDI32 library. + + Remember to link your program against \b X11 or \b GDI32 libraries if you use CImgDisplay. + **/ + struct CImgDisplay { + cimg_ulong _timer, _fps_frames, _fps_timer; + unsigned int _width, _height, _normalization; + float _fps_fps, _min, _max; + bool _is_fullscreen; + char *_title; + unsigned int _window_width, _window_height, _button, *_keys, *_released_keys; + int _window_x, _window_y, _mouse_x, _mouse_y, _wheel; + bool _is_closed, _is_resized, _is_moved, _is_event, + _is_keyESC, _is_keyF1, _is_keyF2, _is_keyF3, _is_keyF4, _is_keyF5, _is_keyF6, _is_keyF7, + _is_keyF8, _is_keyF9, _is_keyF10, _is_keyF11, _is_keyF12, _is_keyPAUSE, _is_key1, _is_key2, + _is_key3, _is_key4, _is_key5, _is_key6, _is_key7, _is_key8, _is_key9, _is_key0, + _is_keyBACKSPACE, _is_keyINSERT, _is_keyHOME, _is_keyPAGEUP, _is_keyTAB, _is_keyQ, _is_keyW, _is_keyE, + _is_keyR, _is_keyT, _is_keyY, _is_keyU, _is_keyI, _is_keyO, _is_keyP, _is_keyDELETE, + _is_keyEND, _is_keyPAGEDOWN, _is_keyCAPSLOCK, _is_keyA, _is_keyS, _is_keyD, _is_keyF, _is_keyG, + _is_keyH, _is_keyJ, _is_keyK, _is_keyL, _is_keyENTER, _is_keySHIFTLEFT, _is_keyZ, _is_keyX, + _is_keyC, _is_keyV, _is_keyB, _is_keyN, _is_keyM, _is_keySHIFTRIGHT, _is_keyARROWUP, _is_keyCTRLLEFT, + _is_keyAPPLEFT, _is_keyALT, _is_keySPACE, _is_keyALTGR, _is_keyAPPRIGHT, _is_keyMENU, _is_keyCTRLRIGHT, + _is_keyARROWLEFT, _is_keyARROWDOWN, _is_keyARROWRIGHT, _is_keyPAD0, _is_keyPAD1, _is_keyPAD2, _is_keyPAD3, + _is_keyPAD4, _is_keyPAD5, _is_keyPAD6, _is_keyPAD7, _is_keyPAD8, _is_keyPAD9, _is_keyPADADD, _is_keyPADSUB, + _is_keyPADMUL, _is_keyPADDIV; + + //@} + //--------------------------- + // + //! \name Plugins + //@{ + //--------------------------- + +#ifdef cimgdisplay_plugin +#include cimgdisplay_plugin +#endif +#ifdef cimgdisplay_plugin1 +#include cimgdisplay_plugin1 +#endif +#ifdef cimgdisplay_plugin2 +#include cimgdisplay_plugin2 +#endif +#ifdef cimgdisplay_plugin3 +#include cimgdisplay_plugin3 +#endif +#ifdef cimgdisplay_plugin4 +#include cimgdisplay_plugin4 +#endif +#ifdef cimgdisplay_plugin5 +#include cimgdisplay_plugin5 +#endif +#ifdef cimgdisplay_plugin6 +#include cimgdisplay_plugin6 +#endif +#ifdef cimgdisplay_plugin7 +#include cimgdisplay_plugin7 +#endif +#ifdef cimgdisplay_plugin8 +#include cimgdisplay_plugin8 +#endif + + //@} + //-------------------------------------------------------- + // + //! \name Constructors / Destructor / Instance Management + //@{ + //-------------------------------------------------------- + + //! Destructor. + /** + \note If the associated window is visible on the screen, it is closed by the call to the destructor. + **/ + ~CImgDisplay() { + assign(); + delete[] _keys; + delete[] _released_keys; + } + + //! Construct an empty display. + /** + \note Constructing an empty CImgDisplay instance does not make a window appearing on the screen, until + display of valid data is performed. + \par Example + \code + CImgDisplay disp; // Does actually nothing. + ... + disp.display(img); // Construct new window and display image in it. + \endcode + **/ + CImgDisplay(): + _width(0),_height(0),_normalization(0), + _min(0),_max(0), + _is_fullscreen(false), + _title(0), + _window_width(0),_window_height(0),_button(0), + _keys(new unsigned int[128]),_released_keys(new unsigned int[128]), + _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), + _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { + assign(); + } + + //! Construct a display with specified dimensions. + /** \param width Window width. + \param height Window height. + \param title Window title. + \param normalization Normalization type + (0=none, 1=always, 2=once, 3=pixel type-dependent, see normalization()). + \param is_fullscreen Tells if fullscreen mode is enabled. + \param is_closed Tells if associated window is initially visible or not. + \note A black background is initially displayed on the associated window. + **/ + CImgDisplay(const unsigned int width, const unsigned int height, + const char *const title=0, const unsigned int normalization=3, + const bool is_fullscreen=false, const bool is_closed=false): + _width(0),_height(0),_normalization(0), + _min(0),_max(0), + _is_fullscreen(false), + _title(0), + _window_width(0),_window_height(0),_button(0), + _keys(new unsigned int[128]),_released_keys(new unsigned int[128]), + _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), + _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { + assign(width,height,title,normalization,is_fullscreen,is_closed); + } + + //! Construct a display from an image. + /** \param img Image used as a model to create the window. + \param title Window title. + \param normalization Normalization type + (0=none, 1=always, 2=once, 3=pixel type-dependent, see normalization()). + \param is_fullscreen Tells if fullscreen mode is enabled. + \param is_closed Tells if associated window is initially visible or not. + \note The pixels of the input image are initially displayed on the associated window. + **/ + template + explicit CImgDisplay(const CImg& img, + const char *const title=0, const unsigned int normalization=3, + const bool is_fullscreen=false, const bool is_closed=false): + _width(0),_height(0),_normalization(0), + _min(0),_max(0), + _is_fullscreen(false), + _title(0), + _window_width(0),_window_height(0),_button(0), + _keys(new unsigned int[128]),_released_keys(new unsigned int[128]), + _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), + _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { + assign(img,title,normalization,is_fullscreen,is_closed); + } + + //! Construct a display from an image list. + /** \param list The images list to display. + \param title Window title. + \param normalization Normalization type + (0=none, 1=always, 2=once, 3=pixel type-dependent, see normalization()). + \param is_fullscreen Tells if fullscreen mode is enabled. + \param is_closed Tells if associated window is initially visible or not. + \note All images of the list, appended along the X-axis, are initially displayed on the associated window. + **/ + template + explicit CImgDisplay(const CImgList& list, + const char *const title=0, const unsigned int normalization=3, + const bool is_fullscreen=false, const bool is_closed=false): + _width(0),_height(0),_normalization(0), + _min(0),_max(0), + _is_fullscreen(false), + _title(0), + _window_width(0),_window_height(0),_button(0), + _keys(new unsigned int[128]),_released_keys(new unsigned int[128]), + _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), + _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { + assign(list,title,normalization,is_fullscreen,is_closed); + } + + //! Construct a display as a copy of an existing one. + /** + \param disp Display instance to copy. + \note The pixel buffer of the input window is initially displayed on the associated window. + **/ + CImgDisplay(const CImgDisplay& disp): + _width(0),_height(0),_normalization(0), + _min(0),_max(0), + _is_fullscreen(false), + _title(0), + _window_width(0),_window_height(0),_button(0), + _keys(new unsigned int[128]),_released_keys(new unsigned int[128]), + _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), + _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { + assign(disp); + } + + //! Take a screenshot. + /** + \param[out] img Output screenshot. Can be empty on input + **/ + template + static void screenshot(CImg& img) { + return screenshot(0,0,cimg::type::max(),cimg::type::max(),img); + } + +#if cimg_display==0 + + static void _no_display_exception() { + throw CImgDisplayException("CImgDisplay(): No display available."); + } + + //! Destructor - Empty constructor \inplace. + /** + \note Replace the current instance by an empty display. + **/ + CImgDisplay& assign() { + return flush(); + } + + //! Construct a display with specified dimensions \inplace. + /** + **/ + CImgDisplay& assign(const unsigned int width, const unsigned int height, + const char *const title=0, const unsigned int normalization=3, + const bool is_fullscreen=false, const bool is_closed=false) { + cimg::unused(width,height,title,normalization,is_fullscreen,is_closed); + _no_display_exception(); + return assign(); + } + + //! Construct a display from an image \inplace. + /** + **/ + template + CImgDisplay& assign(const CImg& img, + const char *const title=0, const unsigned int normalization=3, + const bool is_fullscreen=false, const bool is_closed=false) { + _no_display_exception(); + return assign(img._width,img._height,title,normalization,is_fullscreen,is_closed); + } + + //! Construct a display from an image list \inplace. + /** + **/ + template + CImgDisplay& assign(const CImgList& list, + const char *const title=0, const unsigned int normalization=3, + const bool is_fullscreen=false, const bool is_closed=false) { + _no_display_exception(); + return assign(list._width,list._width,title,normalization,is_fullscreen,is_closed); + } + + //! Construct a display as a copy of another one \inplace. + /** + **/ + CImgDisplay& assign(const CImgDisplay &disp) { + _no_display_exception(); + return assign(disp._width,disp._height); + } + +#endif + + //! Return a reference to an empty display. + /** + \note Can be useful for writing function prototypes where one of the argument (of type CImgDisplay&) + must have a default value. + \par Example + \code + void foo(CImgDisplay& disp=CImgDisplay::empty()); + \endcode + **/ + static CImgDisplay& empty() { + static CImgDisplay _empty; + return _empty.assign(); + } + + //! Return a reference to an empty display \const. + static const CImgDisplay& const_empty() { + static const CImgDisplay _empty; + return _empty; + } + +#define cimg_fitscreen(dx,dy,dz) CImgDisplay::_fitscreen(dx,dy,dz,480,-85,false), \ + CImgDisplay::_fitscreen(dx,dy,dz,480,-85,true) + static unsigned int _fitscreen(const unsigned int dx, const unsigned int dy, const unsigned int dz, + const int dmin, const int dmax, const bool return_y) { + const unsigned int _nw = dx + (dz>1?dz:0), _nh = dy + (dz>1?dz:0); + unsigned int nw = _nw?_nw:1, nh = _nh?_nh:1; + const unsigned int + sw = (unsigned int)CImgDisplay::screen_width(), + sh = (unsigned int)CImgDisplay::screen_height(), + mw = dmin<0?(unsigned int)(sw*-dmin/100):(unsigned int)dmin, + mh = dmin<0?(unsigned int)(sh*-dmin/100):(unsigned int)dmin, + Mw = dmax<0?(unsigned int)(sw*-dmax/100):(unsigned int)dmax, + Mh = dmax<0?(unsigned int)(sh*-dmax/100):(unsigned int)dmax; + if (nwMw) { nh = nh*Mw/nw; nh+=(nh==0); nw = Mw; } + if (nh>Mh) { nw = nw*Mh/nh; nw+=(nw==0); nh = Mh; } + if (nwdisp = img is equivalent to disp.display(img). + **/ + template + CImgDisplay& operator=(const CImg& img) { + return display(img); + } + + //! Display list of images on associated window. + /** + \note disp = list is equivalent to disp.display(list). + **/ + template + CImgDisplay& operator=(const CImgList& list) { + return display(list); + } + + //! Construct a display as a copy of another one \inplace. + /** + \note Equivalent to assign(const CImgDisplay&). + **/ + CImgDisplay& operator=(const CImgDisplay& disp) { + return assign(disp); + } + + //! Return \c false if display is empty, \c true otherwise. + /** + \note if (disp) { ... } is equivalent to if (!disp.is_empty()) { ... }. + **/ + operator bool() const { + return !is_empty(); + } + + //@} + //------------------------------------------ + // + //! \name Instance Checking + //@{ + //------------------------------------------ + + //! Return \c true if display is empty, \c false otherwise. + /** + **/ + bool is_empty() const { + return !(_width && _height); + } + + //! Return \c true if display is closed (i.e. not visible on the screen), \c false otherwise. + /** + \note + - When a user physically closes the associated window, the display is set to closed. + - A closed display is not destroyed. Its associated window can be show again on the screen using show(). + **/ + bool is_closed() const { + return _is_closed; + } + + //! Return \c true if associated window has been resized on the screen, \c false otherwise. + /** + **/ + bool is_resized() const { + return _is_resized; + } + + //! Return \c true if associated window has been moved on the screen, \c false otherwise. + /** + **/ + bool is_moved() const { + return _is_moved; + } + + //! Return \c true if any event has occured on the associated window, \c false otherwise. + /** + **/ + bool is_event() const { + return _is_event; + } + + //! Return \c true if current display is in fullscreen mode, \c false otherwise. + /** + **/ + bool is_fullscreen() const { + return _is_fullscreen; + } + + //! Return \c true if any key is being pressed on the associated window, \c false otherwise. + /** + \note The methods below do the same only for specific keys. + **/ + bool is_key() const { + return _is_keyESC || _is_keyF1 || _is_keyF2 || _is_keyF3 || + _is_keyF4 || _is_keyF5 || _is_keyF6 || _is_keyF7 || + _is_keyF8 || _is_keyF9 || _is_keyF10 || _is_keyF11 || + _is_keyF12 || _is_keyPAUSE || _is_key1 || _is_key2 || + _is_key3 || _is_key4 || _is_key5 || _is_key6 || + _is_key7 || _is_key8 || _is_key9 || _is_key0 || + _is_keyBACKSPACE || _is_keyINSERT || _is_keyHOME || + _is_keyPAGEUP || _is_keyTAB || _is_keyQ || _is_keyW || + _is_keyE || _is_keyR || _is_keyT || _is_keyY || + _is_keyU || _is_keyI || _is_keyO || _is_keyP || + _is_keyDELETE || _is_keyEND || _is_keyPAGEDOWN || + _is_keyCAPSLOCK || _is_keyA || _is_keyS || _is_keyD || + _is_keyF || _is_keyG || _is_keyH || _is_keyJ || + _is_keyK || _is_keyL || _is_keyENTER || + _is_keySHIFTLEFT || _is_keyZ || _is_keyX || _is_keyC || + _is_keyV || _is_keyB || _is_keyN || _is_keyM || + _is_keySHIFTRIGHT || _is_keyARROWUP || _is_keyCTRLLEFT || + _is_keyAPPLEFT || _is_keyALT || _is_keySPACE || _is_keyALTGR || + _is_keyAPPRIGHT || _is_keyMENU || _is_keyCTRLRIGHT || + _is_keyARROWLEFT || _is_keyARROWDOWN || _is_keyARROWRIGHT || + _is_keyPAD0 || _is_keyPAD1 || _is_keyPAD2 || + _is_keyPAD3 || _is_keyPAD4 || _is_keyPAD5 || + _is_keyPAD6 || _is_keyPAD7 || _is_keyPAD8 || + _is_keyPAD9 || _is_keyPADADD || _is_keyPADSUB || + _is_keyPADMUL || _is_keyPADDIV; + } + + //! Return \c true if key specified by given keycode is being pressed on the associated window, \c false otherwise. + /** + \param keycode Keycode to test. + \note Keycode constants are defined in the cimg namespace and are architecture-dependent. Use them to ensure + your code stay portable (see cimg::keyESC). + \par Example + \code + CImgDisplay disp(400,400); + while (!disp.is_closed()) { + if (disp.key(cimg::keyTAB)) { ... } // Equivalent to 'if (disp.is_keyTAB())'. + disp.wait(); + } + \endcode + **/ + bool is_key(const unsigned int keycode) const { +#define _cimg_iskey_test(k) if (keycode==cimg::key##k) return _is_key##k; + _cimg_iskey_test(ESC); _cimg_iskey_test(F1); _cimg_iskey_test(F2); _cimg_iskey_test(F3); + _cimg_iskey_test(F4); _cimg_iskey_test(F5); _cimg_iskey_test(F6); _cimg_iskey_test(F7); + _cimg_iskey_test(F8); _cimg_iskey_test(F9); _cimg_iskey_test(F10); _cimg_iskey_test(F11); + _cimg_iskey_test(F12); _cimg_iskey_test(PAUSE); _cimg_iskey_test(1); _cimg_iskey_test(2); + _cimg_iskey_test(3); _cimg_iskey_test(4); _cimg_iskey_test(5); _cimg_iskey_test(6); + _cimg_iskey_test(7); _cimg_iskey_test(8); _cimg_iskey_test(9); _cimg_iskey_test(0); + _cimg_iskey_test(BACKSPACE); _cimg_iskey_test(INSERT); _cimg_iskey_test(HOME); + _cimg_iskey_test(PAGEUP); _cimg_iskey_test(TAB); _cimg_iskey_test(Q); _cimg_iskey_test(W); + _cimg_iskey_test(E); _cimg_iskey_test(R); _cimg_iskey_test(T); _cimg_iskey_test(Y); + _cimg_iskey_test(U); _cimg_iskey_test(I); _cimg_iskey_test(O); _cimg_iskey_test(P); + _cimg_iskey_test(DELETE); _cimg_iskey_test(END); _cimg_iskey_test(PAGEDOWN); + _cimg_iskey_test(CAPSLOCK); _cimg_iskey_test(A); _cimg_iskey_test(S); _cimg_iskey_test(D); + _cimg_iskey_test(F); _cimg_iskey_test(G); _cimg_iskey_test(H); _cimg_iskey_test(J); + _cimg_iskey_test(K); _cimg_iskey_test(L); _cimg_iskey_test(ENTER); + _cimg_iskey_test(SHIFTLEFT); _cimg_iskey_test(Z); _cimg_iskey_test(X); _cimg_iskey_test(C); + _cimg_iskey_test(V); _cimg_iskey_test(B); _cimg_iskey_test(N); _cimg_iskey_test(M); + _cimg_iskey_test(SHIFTRIGHT); _cimg_iskey_test(ARROWUP); _cimg_iskey_test(CTRLLEFT); + _cimg_iskey_test(APPLEFT); _cimg_iskey_test(ALT); _cimg_iskey_test(SPACE); _cimg_iskey_test(ALTGR); + _cimg_iskey_test(APPRIGHT); _cimg_iskey_test(MENU); _cimg_iskey_test(CTRLRIGHT); + _cimg_iskey_test(ARROWLEFT); _cimg_iskey_test(ARROWDOWN); _cimg_iskey_test(ARROWRIGHT); + _cimg_iskey_test(PAD0); _cimg_iskey_test(PAD1); _cimg_iskey_test(PAD2); + _cimg_iskey_test(PAD3); _cimg_iskey_test(PAD4); _cimg_iskey_test(PAD5); + _cimg_iskey_test(PAD6); _cimg_iskey_test(PAD7); _cimg_iskey_test(PAD8); + _cimg_iskey_test(PAD9); _cimg_iskey_test(PADADD); _cimg_iskey_test(PADSUB); + _cimg_iskey_test(PADMUL); _cimg_iskey_test(PADDIV); + return false; + } + + //! Return \c true if key specified by given keycode is being pressed on the associated window, \c false otherwise. + /** + \param keycode C-string containing the keycode label of the key to test. + \note Use it when the key you want to test can be dynamically set by the user. + \par Example + \code + CImgDisplay disp(400,400); + const char *const keycode = "TAB"; + while (!disp.is_closed()) { + if (disp.is_key(keycode)) { ... } // Equivalent to 'if (disp.is_keyTAB())'. + disp.wait(); + } + \endcode + **/ + bool& is_key(const char *const keycode) { + static bool f = false; + f = false; +#define _cimg_iskey_test2(k) if (!cimg::strcasecmp(keycode,#k)) return _is_key##k; + _cimg_iskey_test2(ESC); _cimg_iskey_test2(F1); _cimg_iskey_test2(F2); _cimg_iskey_test2(F3); + _cimg_iskey_test2(F4); _cimg_iskey_test2(F5); _cimg_iskey_test2(F6); _cimg_iskey_test2(F7); + _cimg_iskey_test2(F8); _cimg_iskey_test2(F9); _cimg_iskey_test2(F10); _cimg_iskey_test2(F11); + _cimg_iskey_test2(F12); _cimg_iskey_test2(PAUSE); _cimg_iskey_test2(1); _cimg_iskey_test2(2); + _cimg_iskey_test2(3); _cimg_iskey_test2(4); _cimg_iskey_test2(5); _cimg_iskey_test2(6); + _cimg_iskey_test2(7); _cimg_iskey_test2(8); _cimg_iskey_test2(9); _cimg_iskey_test2(0); + _cimg_iskey_test2(BACKSPACE); _cimg_iskey_test2(INSERT); _cimg_iskey_test2(HOME); + _cimg_iskey_test2(PAGEUP); _cimg_iskey_test2(TAB); _cimg_iskey_test2(Q); _cimg_iskey_test2(W); + _cimg_iskey_test2(E); _cimg_iskey_test2(R); _cimg_iskey_test2(T); _cimg_iskey_test2(Y); + _cimg_iskey_test2(U); _cimg_iskey_test2(I); _cimg_iskey_test2(O); _cimg_iskey_test2(P); + _cimg_iskey_test2(DELETE); _cimg_iskey_test2(END); _cimg_iskey_test2(PAGEDOWN); + _cimg_iskey_test2(CAPSLOCK); _cimg_iskey_test2(A); _cimg_iskey_test2(S); _cimg_iskey_test2(D); + _cimg_iskey_test2(F); _cimg_iskey_test2(G); _cimg_iskey_test2(H); _cimg_iskey_test2(J); + _cimg_iskey_test2(K); _cimg_iskey_test2(L); _cimg_iskey_test2(ENTER); + _cimg_iskey_test2(SHIFTLEFT); _cimg_iskey_test2(Z); _cimg_iskey_test2(X); _cimg_iskey_test2(C); + _cimg_iskey_test2(V); _cimg_iskey_test2(B); _cimg_iskey_test2(N); _cimg_iskey_test2(M); + _cimg_iskey_test2(SHIFTRIGHT); _cimg_iskey_test2(ARROWUP); _cimg_iskey_test2(CTRLLEFT); + _cimg_iskey_test2(APPLEFT); _cimg_iskey_test2(ALT); _cimg_iskey_test2(SPACE); _cimg_iskey_test2(ALTGR); + _cimg_iskey_test2(APPRIGHT); _cimg_iskey_test2(MENU); _cimg_iskey_test2(CTRLRIGHT); + _cimg_iskey_test2(ARROWLEFT); _cimg_iskey_test2(ARROWDOWN); _cimg_iskey_test2(ARROWRIGHT); + _cimg_iskey_test2(PAD0); _cimg_iskey_test2(PAD1); _cimg_iskey_test2(PAD2); + _cimg_iskey_test2(PAD3); _cimg_iskey_test2(PAD4); _cimg_iskey_test2(PAD5); + _cimg_iskey_test2(PAD6); _cimg_iskey_test2(PAD7); _cimg_iskey_test2(PAD8); + _cimg_iskey_test2(PAD9); _cimg_iskey_test2(PADADD); _cimg_iskey_test2(PADSUB); + _cimg_iskey_test2(PADMUL); _cimg_iskey_test2(PADDIV); + return f; + } + + //! Return \c true if specified key sequence has been typed on the associated window, \c false otherwise. + /** + \param keycodes_sequence Buffer of keycodes to test. + \param length Number of keys in the \c keycodes_sequence buffer. + \param remove_sequence Tells if the key sequence must be removed from the key history, if found. + \note Keycode constants are defined in the cimg namespace and are architecture-dependent. Use them to ensure + your code stay portable (see cimg::keyESC). + \par Example + \code + CImgDisplay disp(400,400); + const unsigned int key_seq[] = { cimg::keyCTRLLEFT, cimg::keyD }; + while (!disp.is_closed()) { + if (disp.is_key_sequence(key_seq,2)) { ... } // Test for the 'CTRL+D' keyboard event. + disp.wait(); + } + \endcode + **/ + bool is_key_sequence(const unsigned int *const keycodes_sequence, const unsigned int length, + const bool remove_sequence=false) { + if (keycodes_sequence && length) { + const unsigned int + *const ps_end = keycodes_sequence + length - 1, + *const pk_end = (unsigned int*)_keys + 1 + 128 - length, + k = *ps_end; + for (unsigned int *pk = (unsigned int*)_keys; pk[0,255]. + If the range of values of the data to display is different, a normalization may be required for displaying + the data in a correct way. The normalization type can be one of: + - \c 0: Value normalization is disabled. It is then assumed that all input data to be displayed by the + CImgDisplay instance have values in range [0,255]. + - \c 1: Value normalization is always performed (this is the default behavior). + Before displaying an input image, its values will be (virtually) stretched + in range [0,255], so that the contrast of the displayed pixels will be maximum. + Use this mode for images whose minimum and maximum values are not prescribed to known values + (e.g. float-valued images). + Note that when normalized versions of images are computed for display purposes, the actual values of these + images are not modified. + - \c 2: Value normalization is performed once (on the first image display), then the same normalization + coefficients are kept for next displayed frames. + - \c 3: Value normalization depends on the pixel type of the data to display. For integer pixel types, + the normalization is done regarding the minimum/maximum values of the type (no normalization occurs then + for unsigned char). + For float-valued pixel types, the normalization is done regarding the minimum/maximum value of the image + data instead. + **/ + unsigned int normalization() const { + return _normalization; + } + + //! Return title of the associated window as a C-string. + /** + \note Window title may be not visible, depending on the used window manager or if the current display is + in fullscreen mode. + **/ + const char *title() const { + return _title?_title:""; + } + + //! Return width of the associated window. + /** + \note The width of the display (i.e. the width of the pixel data buffer associated to the CImgDisplay instance) + may be different from the actual width of the associated window. + **/ + int window_width() const { + return (int)_window_width; + } + + //! Return height of the associated window. + /** + \note The height of the display (i.e. the height of the pixel data buffer associated to the CImgDisplay instance) + may be different from the actual height of the associated window. + **/ + int window_height() const { + return (int)_window_height; + } + + //! Return X-coordinate of the associated window. + /** + \note The returned coordinate corresponds to the location of the upper-left corner of the associated window. + **/ + int window_x() const { + return _window_x; + } + + //! Return Y-coordinate of the associated window. + /** + \note The returned coordinate corresponds to the location of the upper-left corner of the associated window. + **/ + int window_y() const { + return _window_y; + } + + //! Return X-coordinate of the mouse pointer. + /** + \note + - If the mouse pointer is outside window area, \c -1 is returned. + - Otherwise, the returned value is in the range [0,width()-1]. + **/ + int mouse_x() const { + return _mouse_x; + } + + //! Return Y-coordinate of the mouse pointer. + /** + \note + - If the mouse pointer is outside window area, \c -1 is returned. + - Otherwise, the returned value is in the range [0,height()-1]. + **/ + int mouse_y() const { + return _mouse_y; + } + + //! Return current state of the mouse buttons. + /** + \note Three mouse buttons can be managed. If one button is pressed, its corresponding bit in the returned + value is set: + - bit \c 0 (value \c 0x1): State of the left mouse button. + - bit \c 1 (value \c 0x2): State of the right mouse button. + - bit \c 2 (value \c 0x4): State of the middle mouse button. + + Several bits can be activated if more than one button are pressed at the same time. + \par Example + \code + CImgDisplay disp(400,400); + while (!disp.is_closed()) { + if (disp.button()&1) { // Left button clicked. + ... + } + if (disp.button()&2) { // Right button clicked. + ... + } + if (disp.button()&4) { // Middle button clicked. + ... + } + disp.wait(); + } + \endcode + **/ + unsigned int button() const { + return _button; + } + + //! Return current state of the mouse wheel. + /** + \note + - The returned value can be positive or negative depending on whether the mouse wheel has been scrolled + forward or backward. + - Scrolling the wheel forward add \c 1 to the wheel value. + - Scrolling the wheel backward substract \c 1 to the wheel value. + - The returned value cumulates the number of forward of backward scrolls since the creation of the display, + or since the last reset of the wheel value (using set_wheel()). It is strongly recommended to quickly reset + the wheel counter when an action has been performed regarding the current wheel value. + Otherwise, the returned wheel value may be for instance \c 0 despite the fact that many scrolls have been done + (as many in forward as in backward directions). + \par Example + \code + CImgDisplay disp(400,400); + while (!disp.is_closed()) { + if (disp.wheel()) { + int counter = disp.wheel(); // Read the state of the mouse wheel. + ... // Do what you want with 'counter'. + disp.set_wheel(); // Reset the wheel value to 0. + } + disp.wait(); + } + \endcode + **/ + int wheel() const { + return _wheel; + } + + //! Return one entry from the pressed keys history. + /** + \param pos Indice to read from the pressed keys history (indice \c 0 corresponds to latest entry). + \return Keycode of a pressed key or \c 0 for a released key. + \note + - Each CImgDisplay stores a history of the pressed keys in a buffer of size \c 128. When a new key is pressed, + its keycode is stored in the pressed keys history. When a key is released, \c 0 is put instead. + This means that up to the 64 last pressed keys may be read from the pressed keys history. + When a new value is stored, the pressed keys history is shifted so that the latest entry is always + stored at position \c 0. + - Keycode constants are defined in the cimg namespace and are architecture-dependent. Use them to ensure + your code stay portable (see cimg::keyESC). + **/ + unsigned int key(const unsigned int pos=0) const { + return pos<128?_keys[pos]:0; + } + + //! Return one entry from the released keys history. + /** + \param pos Indice to read from the released keys history (indice \c 0 corresponds to latest entry). + \return Keycode of a released key or \c 0 for a pressed key. + \note + - Each CImgDisplay stores a history of the released keys in a buffer of size \c 128. When a new key is released, + its keycode is stored in the pressed keys history. When a key is pressed, \c 0 is put instead. + This means that up to the 64 last released keys may be read from the released keys history. + When a new value is stored, the released keys history is shifted so that the latest entry is always + stored at position \c 0. + - Keycode constants are defined in the cimg namespace and are architecture-dependent. Use them to ensure + your code stay portable (see cimg::keyESC). + **/ + unsigned int released_key(const unsigned int pos=0) const { + return pos<128?_released_keys[pos]:0; + } + + //! Return keycode corresponding to the specified string. + /** + \note Keycode constants are defined in the cimg namespace and are architecture-dependent. Use them to ensure + your code stay portable (see cimg::keyESC). + \par Example + \code + const unsigned int keyTAB = CImgDisplay::keycode("TAB"); // Return cimg::keyTAB. + \endcode + **/ + static unsigned int keycode(const char *const keycode) { +#define _cimg_keycode(k) if (!cimg::strcasecmp(keycode,#k)) return cimg::key##k; + _cimg_keycode(ESC); _cimg_keycode(F1); _cimg_keycode(F2); _cimg_keycode(F3); + _cimg_keycode(F4); _cimg_keycode(F5); _cimg_keycode(F6); _cimg_keycode(F7); + _cimg_keycode(F8); _cimg_keycode(F9); _cimg_keycode(F10); _cimg_keycode(F11); + _cimg_keycode(F12); _cimg_keycode(PAUSE); _cimg_keycode(1); _cimg_keycode(2); + _cimg_keycode(3); _cimg_keycode(4); _cimg_keycode(5); _cimg_keycode(6); + _cimg_keycode(7); _cimg_keycode(8); _cimg_keycode(9); _cimg_keycode(0); + _cimg_keycode(BACKSPACE); _cimg_keycode(INSERT); _cimg_keycode(HOME); + _cimg_keycode(PAGEUP); _cimg_keycode(TAB); _cimg_keycode(Q); _cimg_keycode(W); + _cimg_keycode(E); _cimg_keycode(R); _cimg_keycode(T); _cimg_keycode(Y); + _cimg_keycode(U); _cimg_keycode(I); _cimg_keycode(O); _cimg_keycode(P); + _cimg_keycode(DELETE); _cimg_keycode(END); _cimg_keycode(PAGEDOWN); + _cimg_keycode(CAPSLOCK); _cimg_keycode(A); _cimg_keycode(S); _cimg_keycode(D); + _cimg_keycode(F); _cimg_keycode(G); _cimg_keycode(H); _cimg_keycode(J); + _cimg_keycode(K); _cimg_keycode(L); _cimg_keycode(ENTER); + _cimg_keycode(SHIFTLEFT); _cimg_keycode(Z); _cimg_keycode(X); _cimg_keycode(C); + _cimg_keycode(V); _cimg_keycode(B); _cimg_keycode(N); _cimg_keycode(M); + _cimg_keycode(SHIFTRIGHT); _cimg_keycode(ARROWUP); _cimg_keycode(CTRLLEFT); + _cimg_keycode(APPLEFT); _cimg_keycode(ALT); _cimg_keycode(SPACE); _cimg_keycode(ALTGR); + _cimg_keycode(APPRIGHT); _cimg_keycode(MENU); _cimg_keycode(CTRLRIGHT); + _cimg_keycode(ARROWLEFT); _cimg_keycode(ARROWDOWN); _cimg_keycode(ARROWRIGHT); + _cimg_keycode(PAD0); _cimg_keycode(PAD1); _cimg_keycode(PAD2); + _cimg_keycode(PAD3); _cimg_keycode(PAD4); _cimg_keycode(PAD5); + _cimg_keycode(PAD6); _cimg_keycode(PAD7); _cimg_keycode(PAD8); + _cimg_keycode(PAD9); _cimg_keycode(PADADD); _cimg_keycode(PADSUB); + _cimg_keycode(PADMUL); _cimg_keycode(PADDIV); + return 0; + } + + //! Return the current refresh rate, in frames per second. + /** + \note Returns a significant value when the current instance is used to display successive frames. + It measures the delay between successive calls to frames_per_second(). + **/ + float frames_per_second() { + if (!_fps_timer) _fps_timer = cimg::time(); + const float delta = (cimg::time() - _fps_timer)/1000.0f; + ++_fps_frames; + if (delta>=1) { + _fps_fps = _fps_frames/delta; + _fps_frames = 0; + _fps_timer = cimg::time(); + } + return _fps_fps; + } + + //@} + //--------------------------------------- + // + //! \name Window Manipulation + //@{ + //--------------------------------------- + +#if cimg_display==0 + + //! Display image on associated window. + /** + \param img Input image to display. + \note This method returns immediately. + **/ + template + CImgDisplay& display(const CImg& img) { + return assign(img); + } + +#endif + + //! Display list of images on associated window. + /** + \param list List of images to display. + \param axis Axis used to append the images along, for the visualization (can be \c x, \c y, \c z or \c c). + \param align Relative position of aligned images when displaying lists with images of different sizes + (\c 0 for upper-left, \c 0.5 for centering and \c 1 for lower-right). + \note This method returns immediately. + **/ + template + CImgDisplay& display(const CImgList& list, const char axis='x', const float align=0) { + if (list._width==1) { + const CImg& img = list[0]; + if (img._depth==1 && (img._spectrum==1 || img._spectrum>=3) && _normalization!=1) return display(img); + } + CImgList::ucharT> visu(list._width); + unsigned int dims = 0; + cimglist_for(list,l) { + const CImg& img = list._data[l]; + img.__get_select(*this,_normalization,(img._width - 1)/2,(img._height - 1)/2, + (img._depth - 1)/2).move_to(visu[l]); + dims = std::max(dims,visu[l]._spectrum); + } + cimglist_for(list,l) if (visu[l]._spectrumimg.width() become equal, as well as height() and + img.height(). + - The associated window is also resized to specified dimensions. + **/ + template + CImgDisplay& resize(const CImg& img, const bool force_redraw=true) { + return resize(img._width,img._height,force_redraw); + } + + //! Resize display to the size of another CImgDisplay instance. + /** + \param disp Input display to take size from. + \param force_redraw Tells if the previous window content must be resized and updated as well. + \note + - Calling this method ensures that width() and disp.width() become equal, as well as height() and + disp.height(). + - The associated window is also resized to specified dimensions. + **/ + CImgDisplay& resize(const CImgDisplay& disp, const bool force_redraw=true) { + return resize(disp.width(),disp.height(),force_redraw); + } + + // [internal] Render pixel buffer with size (wd,hd) from source buffer of size (ws,hs). + template + static void _render_resize(const T *ptrs, const unsigned int ws, const unsigned int hs, + t *ptrd, const unsigned int wd, const unsigned int hd) { + unsigned int *const offx = new unsigned int[wd], *const offy = new unsigned int[hd + 1], *poffx, *poffy; + float s, curr, old; + s = (float)ws/wd; + poffx = offx; curr = 0; for (unsigned int x = 0; xstd::printf(). + \warning As the first argument is a format string, it is highly recommended to write + \code + disp.set_title("%s",window_title); + \endcode + instead of + \code + disp.set_title(window_title); + \endcode + if \c window_title can be arbitrary, to prevent nasty memory access. + **/ + CImgDisplay& set_title(const char *const format, ...) { + return assign(0,0,format); + } + +#endif + + //! Enable or disable fullscreen mode. + /** + \param is_fullscreen Tells is the fullscreen mode must be activated or not. + \param force_redraw Tells if the previous window content must be displayed as well. + \note + - When the fullscreen mode is enabled, the associated window fills the entire screen but the size of the + current display is not modified. + - The screen resolution may be switched to fit the associated window size and ensure it appears the largest + as possible. + For X-Window (X11) users, the configuration flag \c cimg_use_xrandr has to be set to allow the screen + resolution change (requires the X11 extensions to be enabled). + **/ + CImgDisplay& set_fullscreen(const bool is_fullscreen, const bool force_redraw=true) { + if (is_empty() || _is_fullscreen==is_fullscreen) return *this; + return toggle_fullscreen(force_redraw); + } + +#if cimg_display==0 + + //! Toggle fullscreen mode. + /** + \param force_redraw Tells if the previous window content must be displayed as well. + \note Enable fullscreen mode if it was not enabled, and disable it otherwise. + **/ + CImgDisplay& toggle_fullscreen(const bool force_redraw=true) { + return assign(_width,_height,0,3,force_redraw); + } + + //! Show mouse pointer. + /** + \note Depending on the window manager behavior, this method may not succeed + (no exceptions are thrown nevertheless). + **/ + CImgDisplay& show_mouse() { + return assign(); + } + + //! Hide mouse pointer. + /** + \note Depending on the window manager behavior, this method may not succeed + (no exceptions are thrown nevertheless). + **/ + CImgDisplay& hide_mouse() { + return assign(); + } + + //! Move mouse pointer to a specified location. + /** + \note Depending on the window manager behavior, this method may not succeed + (no exceptions are thrown nevertheless). + **/ + CImgDisplay& set_mouse(const int pos_x, const int pos_y) { + return assign(pos_x,pos_y); + } + +#endif + + //! Simulate a mouse button release event. + /** + \note All mouse buttons are considered released at the same time. + **/ + CImgDisplay& set_button() { + _button = 0; + _is_event = true; +#if cimg_display==1 + pthread_cond_broadcast(&cimg::X11_attr().wait_event); +#elif cimg_display==2 + SetEvent(cimg::Win32_attr().wait_event); +#endif + return *this; + } + + //! Simulate a mouse button press or release event. + /** + \param button Buttons event code, where each button is associated to a single bit. + \param is_pressed Tells if the mouse button is considered as pressed or released. + **/ + CImgDisplay& set_button(const unsigned int button, const bool is_pressed=true) { + const unsigned int buttoncode = button==1U?1U:button==2U?2U:button==3U?4U:0U; + if (is_pressed) _button |= buttoncode; else _button &= ~buttoncode; + _is_event = buttoncode?true:false; + if (buttoncode) { +#if cimg_display==1 + pthread_cond_broadcast(&cimg::X11_attr().wait_event); +#elif cimg_display==2 + SetEvent(cimg::Win32_attr().wait_event); +#endif + } + return *this; + } + + //! Flush all mouse wheel events. + /** + \note Make wheel() to return \c 0, if called afterwards. + **/ + CImgDisplay& set_wheel() { + _wheel = 0; + _is_event = true; +#if cimg_display==1 + pthread_cond_broadcast(&cimg::X11_attr().wait_event); +#elif cimg_display==2 + SetEvent(cimg::Win32_attr().wait_event); +#endif + return *this; + } + + //! Simulate a wheel event. + /** + \param amplitude Amplitude of the wheel scrolling to simulate. + \note Make wheel() to return \c amplitude, if called afterwards. + **/ + CImgDisplay& set_wheel(const int amplitude) { + _wheel+=amplitude; + _is_event = amplitude?true:false; + if (amplitude) { +#if cimg_display==1 + pthread_cond_broadcast(&cimg::X11_attr().wait_event); +#elif cimg_display==2 + SetEvent(cimg::Win32_attr().wait_event); +#endif + } + return *this; + } + + //! Flush all key events. + /** + \note Make key() to return \c 0, if called afterwards. + **/ + CImgDisplay& set_key() { + std::memset((void*)_keys,0,128*sizeof(unsigned int)); + std::memset((void*)_released_keys,0,128*sizeof(unsigned int)); + _is_keyESC = _is_keyF1 = _is_keyF2 = _is_keyF3 = _is_keyF4 = _is_keyF5 = _is_keyF6 = _is_keyF7 = _is_keyF8 = + _is_keyF9 = _is_keyF10 = _is_keyF11 = _is_keyF12 = _is_keyPAUSE = _is_key1 = _is_key2 = _is_key3 = _is_key4 = + _is_key5 = _is_key6 = _is_key7 = _is_key8 = _is_key9 = _is_key0 = _is_keyBACKSPACE = _is_keyINSERT = + _is_keyHOME = _is_keyPAGEUP = _is_keyTAB = _is_keyQ = _is_keyW = _is_keyE = _is_keyR = _is_keyT = _is_keyY = + _is_keyU = _is_keyI = _is_keyO = _is_keyP = _is_keyDELETE = _is_keyEND = _is_keyPAGEDOWN = _is_keyCAPSLOCK = + _is_keyA = _is_keyS = _is_keyD = _is_keyF = _is_keyG = _is_keyH = _is_keyJ = _is_keyK = _is_keyL = + _is_keyENTER = _is_keySHIFTLEFT = _is_keyZ = _is_keyX = _is_keyC = _is_keyV = _is_keyB = _is_keyN = + _is_keyM = _is_keySHIFTRIGHT = _is_keyARROWUP = _is_keyCTRLLEFT = _is_keyAPPLEFT = _is_keyALT = _is_keySPACE = + _is_keyALTGR = _is_keyAPPRIGHT = _is_keyMENU = _is_keyCTRLRIGHT = _is_keyARROWLEFT = _is_keyARROWDOWN = + _is_keyARROWRIGHT = _is_keyPAD0 = _is_keyPAD1 = _is_keyPAD2 = _is_keyPAD3 = _is_keyPAD4 = _is_keyPAD5 = + _is_keyPAD6 = _is_keyPAD7 = _is_keyPAD8 = _is_keyPAD9 = _is_keyPADADD = _is_keyPADSUB = _is_keyPADMUL = + _is_keyPADDIV = false; + _is_event = true; +#if cimg_display==1 + pthread_cond_broadcast(&cimg::X11_attr().wait_event); +#elif cimg_display==2 + SetEvent(cimg::Win32_attr().wait_event); +#endif + return *this; + } + + //! Simulate a keyboard press/release event. + /** + \param keycode Keycode of the associated key. + \param is_pressed Tells if the key is considered as pressed or released. + \note Keycode constants are defined in the cimg namespace and are architecture-dependent. Use them to ensure + your code stay portable (see cimg::keyESC). + **/ + CImgDisplay& set_key(const unsigned int keycode, const bool is_pressed=true) { +#define _cimg_set_key(k) if (keycode==cimg::key##k) _is_key##k = is_pressed; + _cimg_set_key(ESC); _cimg_set_key(F1); _cimg_set_key(F2); _cimg_set_key(F3); + _cimg_set_key(F4); _cimg_set_key(F5); _cimg_set_key(F6); _cimg_set_key(F7); + _cimg_set_key(F8); _cimg_set_key(F9); _cimg_set_key(F10); _cimg_set_key(F11); + _cimg_set_key(F12); _cimg_set_key(PAUSE); _cimg_set_key(1); _cimg_set_key(2); + _cimg_set_key(3); _cimg_set_key(4); _cimg_set_key(5); _cimg_set_key(6); + _cimg_set_key(7); _cimg_set_key(8); _cimg_set_key(9); _cimg_set_key(0); + _cimg_set_key(BACKSPACE); _cimg_set_key(INSERT); _cimg_set_key(HOME); + _cimg_set_key(PAGEUP); _cimg_set_key(TAB); _cimg_set_key(Q); _cimg_set_key(W); + _cimg_set_key(E); _cimg_set_key(R); _cimg_set_key(T); _cimg_set_key(Y); + _cimg_set_key(U); _cimg_set_key(I); _cimg_set_key(O); _cimg_set_key(P); + _cimg_set_key(DELETE); _cimg_set_key(END); _cimg_set_key(PAGEDOWN); + _cimg_set_key(CAPSLOCK); _cimg_set_key(A); _cimg_set_key(S); _cimg_set_key(D); + _cimg_set_key(F); _cimg_set_key(G); _cimg_set_key(H); _cimg_set_key(J); + _cimg_set_key(K); _cimg_set_key(L); _cimg_set_key(ENTER); + _cimg_set_key(SHIFTLEFT); _cimg_set_key(Z); _cimg_set_key(X); _cimg_set_key(C); + _cimg_set_key(V); _cimg_set_key(B); _cimg_set_key(N); _cimg_set_key(M); + _cimg_set_key(SHIFTRIGHT); _cimg_set_key(ARROWUP); _cimg_set_key(CTRLLEFT); + _cimg_set_key(APPLEFT); _cimg_set_key(ALT); _cimg_set_key(SPACE); _cimg_set_key(ALTGR); + _cimg_set_key(APPRIGHT); _cimg_set_key(MENU); _cimg_set_key(CTRLRIGHT); + _cimg_set_key(ARROWLEFT); _cimg_set_key(ARROWDOWN); _cimg_set_key(ARROWRIGHT); + _cimg_set_key(PAD0); _cimg_set_key(PAD1); _cimg_set_key(PAD2); + _cimg_set_key(PAD3); _cimg_set_key(PAD4); _cimg_set_key(PAD5); + _cimg_set_key(PAD6); _cimg_set_key(PAD7); _cimg_set_key(PAD8); + _cimg_set_key(PAD9); _cimg_set_key(PADADD); _cimg_set_key(PADSUB); + _cimg_set_key(PADMUL); _cimg_set_key(PADDIV); + if (is_pressed) { + if (*_keys) + std::memmove((void*)(_keys + 1),(void*)_keys,127*sizeof(unsigned int)); + *_keys = keycode; + if (*_released_keys) { + std::memmove((void*)(_released_keys + 1),(void*)_released_keys,127*sizeof(unsigned int)); + *_released_keys = 0; + } + } else { + if (*_keys) { + std::memmove((void*)(_keys + 1),(void*)_keys,127*sizeof(unsigned int)); + *_keys = 0; + } + if (*_released_keys) + std::memmove((void*)(_released_keys + 1),(void*)_released_keys,127*sizeof(unsigned int)); + *_released_keys = keycode; + } + _is_event = keycode?true:false; + if (keycode) { +#if cimg_display==1 + pthread_cond_broadcast(&cimg::X11_attr().wait_event); +#elif cimg_display==2 + SetEvent(cimg::Win32_attr().wait_event); +#endif + } + return *this; + } + + //! Flush all display events. + /** + \note Remove all passed events from the current display. + **/ + CImgDisplay& flush() { + set_key().set_button().set_wheel(); + _is_resized = _is_moved = _is_event = false; + _fps_timer = _fps_frames = _timer = 0; + _fps_fps = 0; + return *this; + } + + //! Wait for any user event occuring on the current display. + CImgDisplay& wait() { + wait(*this); + return *this; + } + + //! Wait for a given number of milliseconds since the last call to wait(). + /** + \param milliseconds Number of milliseconds to wait for. + \note Similar to cimg::wait(). + **/ + CImgDisplay& wait(const unsigned int milliseconds) { + cimg::_wait(milliseconds,_timer); + return *this; + } + + //! Wait for any event occuring on the display \c disp1. + static void wait(CImgDisplay& disp1) { + disp1._is_event = false; + while (!disp1._is_closed && !disp1._is_event) wait_all(); + } + + //! Wait for any event occuring either on the display \c disp1 or \c disp2. + static void wait(CImgDisplay& disp1, CImgDisplay& disp2) { + disp1._is_event = disp2._is_event = false; + while ((!disp1._is_closed || !disp2._is_closed) && + !disp1._is_event && !disp2._is_event) wait_all(); + } + + //! Wait for any event occuring either on the display \c disp1, \c disp2 or \c disp3. + static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3) { + disp1._is_event = disp2._is_event = disp3._is_event = false; + while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed) && + !disp1._is_event && !disp2._is_event && !disp3._is_event) wait_all(); + } + + //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3 or \c disp4. + static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4) { + disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = false; + while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed) && + !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event) wait_all(); + } + + //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3, \c disp4 or \c disp5. + static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, + CImgDisplay& disp5) { + disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = false; + while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed) && + !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event) + wait_all(); + } + + //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3, \c disp4, ... \c disp6. + static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, + CImgDisplay& disp6) { + disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = + disp6._is_event = false; + while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || + !disp6._is_closed) && + !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && + !disp6._is_event) wait_all(); + } + + //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3, \c disp4, ... \c disp7. + static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, + CImgDisplay& disp6, CImgDisplay& disp7) { + disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = + disp6._is_event = disp7._is_event = false; + while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || + !disp6._is_closed || !disp7._is_closed) && + !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && + !disp6._is_event && !disp7._is_event) wait_all(); + } + + //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3, \c disp4, ... \c disp8. + static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, + CImgDisplay& disp6, CImgDisplay& disp7, CImgDisplay& disp8) { + disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = + disp6._is_event = disp7._is_event = disp8._is_event = false; + while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || + !disp6._is_closed || !disp7._is_closed || !disp8._is_closed) && + !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && + !disp6._is_event && !disp7._is_event && !disp8._is_event) wait_all(); + } + + //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3, \c disp4, ... \c disp9. + static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, + CImgDisplay& disp6, CImgDisplay& disp7, CImgDisplay& disp8, CImgDisplay& disp9) { + disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = + disp6._is_event = disp7._is_event = disp8._is_event = disp9._is_event = false; + while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || + !disp6._is_closed || !disp7._is_closed || !disp8._is_closed || !disp9._is_closed) && + !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && + !disp6._is_event && !disp7._is_event && !disp8._is_event && !disp9._is_event) wait_all(); + } + + //! Wait for any event occuring either on the display \c disp1, \c disp2, \c disp3, \c disp4, ... \c disp10. + static void wait(CImgDisplay& disp1, CImgDisplay& disp2, CImgDisplay& disp3, CImgDisplay& disp4, CImgDisplay& disp5, + CImgDisplay& disp6, CImgDisplay& disp7, CImgDisplay& disp8, CImgDisplay& disp9, + CImgDisplay& disp10) { + disp1._is_event = disp2._is_event = disp3._is_event = disp4._is_event = disp5._is_event = + disp6._is_event = disp7._is_event = disp8._is_event = disp9._is_event = disp10._is_event = false; + while ((!disp1._is_closed || !disp2._is_closed || !disp3._is_closed || !disp4._is_closed || !disp5._is_closed || + !disp6._is_closed || !disp7._is_closed || !disp8._is_closed || !disp9._is_closed || !disp10._is_closed) && + !disp1._is_event && !disp2._is_event && !disp3._is_event && !disp4._is_event && !disp5._is_event && + !disp6._is_event && !disp7._is_event && !disp8._is_event && !disp9._is_event && !disp10._is_event) + wait_all(); + } + +#if cimg_display==0 + + //! Wait for any window event occuring in any opened CImgDisplay. + static void wait_all() { + return _no_display_exception(); + } + + //! Render image into internal display buffer. + /** + \param img Input image data to render. + \note + - Convert image data representation into the internal display buffer (architecture-dependent structure). + - The content of the associated window is not modified, until paint() is called. + - Should not be used for common CImgDisplay uses, since display() is more useful. + **/ + template + CImgDisplay& render(const CImg& img) { + return assign(img); + } + + //! Paint internal display buffer on associated window. + /** + \note + - Update the content of the associated window with the internal display buffer, e.g. after a render() call. + - Should not be used for common CImgDisplay uses, since display() is more useful. + **/ + CImgDisplay& paint() { + return assign(); + } + + + //! Take a snapshot of the current screen content. + /** + \param x0 X-coordinate of the upper left corner. + \param y0 Y-coordinate of the upper left corner. + \param x1 X-coordinate of the lower right corner. + \param y1 Y-coordinate of the lower right corner. + \param[out] img Output screenshot. Can be empty on input + **/ + template + static void screenshot(const int x0, const int y0, const int x1, const int y1, CImg& img) { + cimg::unused(x0,y0,x1,y1,&img); + _no_display_exception(); + } + + //! Take a snapshot of the associated window content. + /** + \param[out] img Output snapshot. Can be empty on input. + **/ + template + const CImgDisplay& snapshot(CImg& img) const { + cimg::unused(img); + _no_display_exception(); + return *this; + } +#endif + + // X11-based implementation + //-------------------------- +#if cimg_display==1 + + Atom _wm_window_atom, _wm_protocol_atom; + Window _window, _background_window; + Colormap _colormap; + XImage *_image; + void *_data; +#ifdef cimg_use_xshm + XShmSegmentInfo *_shminfo; +#endif + + static int screen_width() { + Display *const dpy = cimg::X11_attr().display; + int res = 0; + if (!dpy) { + Display *const _dpy = XOpenDisplay(0); + if (!_dpy) + throw CImgDisplayException("CImgDisplay::screen_width(): Failed to open X11 display."); + res = DisplayWidth(_dpy,DefaultScreen(_dpy)); + XCloseDisplay(_dpy); + } else { +#ifdef cimg_use_xrandr + if (cimg::X11_attr().resolutions && cimg::X11_attr().curr_resolution) + res = cimg::X11_attr().resolutions[cimg::X11_attr().curr_resolution].width; + else res = DisplayWidth(dpy,DefaultScreen(dpy)); +#else + res = DisplayWidth(dpy,DefaultScreen(dpy)); +#endif + } + return res; + } + + static int screen_height() { + Display *const dpy = cimg::X11_attr().display; + int res = 0; + if (!dpy) { + Display *const _dpy = XOpenDisplay(0); + if (!_dpy) + throw CImgDisplayException("CImgDisplay::screen_height(): Failed to open X11 display."); + res = DisplayHeight(_dpy,DefaultScreen(_dpy)); + XCloseDisplay(_dpy); + } else { +#ifdef cimg_use_xrandr + if (cimg::X11_attr().resolutions && cimg::X11_attr().curr_resolution) + res = cimg::X11_attr().resolutions[cimg::X11_attr().curr_resolution].height; + else res = DisplayHeight(dpy,DefaultScreen(dpy)); +#else + res = DisplayHeight(dpy,DefaultScreen(dpy)); +#endif + } + return res; + } + + static void wait_all() { + if (!cimg::X11_attr().display) return; + pthread_mutex_lock(&cimg::X11_attr().wait_event_mutex); + pthread_cond_wait(&cimg::X11_attr().wait_event,&cimg::X11_attr().wait_event_mutex); + pthread_mutex_unlock(&cimg::X11_attr().wait_event_mutex); + } + + void _handle_events(const XEvent *const pevent) { + Display *const dpy = cimg::X11_attr().display; + XEvent event = *pevent; + switch (event.type) { + case ClientMessage : { + if ((int)event.xclient.message_type==(int)_wm_protocol_atom && + (int)event.xclient.data.l[0]==(int)_wm_window_atom) { + XUnmapWindow(cimg::X11_attr().display,_window); + _is_closed = _is_event = true; + pthread_cond_broadcast(&cimg::X11_attr().wait_event); + } + } break; + case ConfigureNotify : { + while (XCheckWindowEvent(dpy,_window,StructureNotifyMask,&event)) {} + const unsigned int nw = event.xconfigure.width, nh = event.xconfigure.height; + const int nx = event.xconfigure.x, ny = event.xconfigure.y; + if (nw && nh && (nw!=_window_width || nh!=_window_height)) { + _window_width = nw; _window_height = nh; _mouse_x = _mouse_y = -1; + XResizeWindow(dpy,_window,_window_width,_window_height); + _is_resized = _is_event = true; + pthread_cond_broadcast(&cimg::X11_attr().wait_event); + } + if (nx!=_window_x || ny!=_window_y) { + _window_x = nx; _window_y = ny; _is_moved = _is_event = true; + pthread_cond_broadcast(&cimg::X11_attr().wait_event); + } + } break; + case Expose : { + while (XCheckWindowEvent(dpy,_window,ExposureMask,&event)) {} + _paint(false); + if (_is_fullscreen) { + XWindowAttributes attr; + XGetWindowAttributes(dpy,_window,&attr); + while (attr.map_state!=IsViewable) XSync(dpy,0); + XSetInputFocus(dpy,_window,RevertToParent,CurrentTime); + } + } break; + case ButtonPress : { + do { + _mouse_x = event.xmotion.x; _mouse_y = event.xmotion.y; + if (_mouse_x<0 || _mouse_y<0 || _mouse_x>=width() || _mouse_y>=height()) _mouse_x = _mouse_y = -1; + switch (event.xbutton.button) { + case 1 : set_button(1); break; + case 3 : set_button(2); break; + case 2 : set_button(3); break; + } + } while (XCheckWindowEvent(dpy,_window,ButtonPressMask,&event)); + } break; + case ButtonRelease : { + do { + _mouse_x = event.xmotion.x; _mouse_y = event.xmotion.y; + if (_mouse_x<0 || _mouse_y<0 || _mouse_x>=width() || _mouse_y>=height()) _mouse_x = _mouse_y = -1; + switch (event.xbutton.button) { + case 1 : set_button(1,false); break; + case 3 : set_button(2,false); break; + case 2 : set_button(3,false); break; + case 4 : set_wheel(1); break; + case 5 : set_wheel(-1); break; + } + } while (XCheckWindowEvent(dpy,_window,ButtonReleaseMask,&event)); + } break; + case KeyPress : { + char tmp = 0; KeySym ksym; + XLookupString(&event.xkey,&tmp,1,&ksym,0); + set_key((unsigned int)ksym,true); + } break; + case KeyRelease : { + char keys_return[32]; // Check that the key has been physically unpressed. + XQueryKeymap(dpy,keys_return); + const unsigned int kc = event.xkey.keycode, kc1 = kc/8, kc2 = kc%8; + const bool is_key_pressed = kc1>=32?false:(keys_return[kc1]>>kc2)&1; + if (!is_key_pressed) { + char tmp = 0; KeySym ksym; + XLookupString(&event.xkey,&tmp,1,&ksym,0); + set_key((unsigned int)ksym,false); + } + } break; + case EnterNotify: { + while (XCheckWindowEvent(dpy,_window,EnterWindowMask,&event)) {} + _mouse_x = event.xmotion.x; + _mouse_y = event.xmotion.y; + if (_mouse_x<0 || _mouse_y<0 || _mouse_x>=width() || _mouse_y>=height()) _mouse_x = _mouse_y = -1; + } break; + case LeaveNotify : { + while (XCheckWindowEvent(dpy,_window,LeaveWindowMask,&event)) {} + _mouse_x = _mouse_y = -1; _is_event = true; + pthread_cond_broadcast(&cimg::X11_attr().wait_event); + } break; + case MotionNotify : { + while (XCheckWindowEvent(dpy,_window,PointerMotionMask,&event)) {} + _mouse_x = event.xmotion.x; + _mouse_y = event.xmotion.y; + if (_mouse_x<0 || _mouse_y<0 || _mouse_x>=width() || _mouse_y>=height()) _mouse_x = _mouse_y = -1; + _is_event = true; + pthread_cond_broadcast(&cimg::X11_attr().wait_event); + } break; + } + } + + static void* _events_thread(void *arg) { // Thread to manage events for all opened display windows. + Display *const dpy = cimg::X11_attr().display; + XEvent event; + pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,0); + pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,0); + if (!arg) for ( ; ; ) { + cimg_lock_display(); + bool event_flag = XCheckTypedEvent(dpy,ClientMessage,&event); + if (!event_flag) event_flag = XCheckMaskEvent(dpy, + ExposureMask | StructureNotifyMask | ButtonPressMask | + KeyPressMask | PointerMotionMask | EnterWindowMask | + LeaveWindowMask | ButtonReleaseMask | KeyReleaseMask,&event); + if (event_flag) + for (unsigned int i = 0; i_is_closed && event.xany.window==cimg::X11_attr().wins[i]->_window) + cimg::X11_attr().wins[i]->_handle_events(&event); + cimg_unlock_display(); + pthread_testcancel(); + cimg::sleep(8); + } + return 0; + } + + void _set_colormap(Colormap& _colormap, const unsigned int dim) { + XColor *const colormap = new XColor[256]; + switch (dim) { + case 1 : { // colormap for greyscale images + for (unsigned int index = 0; index<256; ++index) { + colormap[index].pixel = index; + colormap[index].red = colormap[index].green = colormap[index].blue = (unsigned short)(index<<8); + colormap[index].flags = DoRed | DoGreen | DoBlue; + } + } break; + case 2 : { // colormap for RG images + for (unsigned int index = 0, r = 8; r<256; r+=16) + for (unsigned int g = 8; g<256; g+=16) { + colormap[index].pixel = index; + colormap[index].red = colormap[index].blue = (unsigned short)(r<<8); + colormap[index].green = (unsigned short)(g<<8); + colormap[index++].flags = DoRed | DoGreen | DoBlue; + } + } break; + default : { // colormap for RGB images + for (unsigned int index = 0, r = 16; r<256; r+=32) + for (unsigned int g = 16; g<256; g+=32) + for (unsigned int b = 32; b<256; b+=64) { + colormap[index].pixel = index; + colormap[index].red = (unsigned short)(r<<8); + colormap[index].green = (unsigned short)(g<<8); + colormap[index].blue = (unsigned short)(b<<8); + colormap[index++].flags = DoRed | DoGreen | DoBlue; + } + } + } + XStoreColors(cimg::X11_attr().display,_colormap,colormap,256); + delete[] colormap; + } + + void _map_window() { + Display *const dpy = cimg::X11_attr().display; + bool is_exposed = false, is_mapped = false; + XWindowAttributes attr; + XEvent event; + XMapRaised(dpy,_window); + do { // Wait for the window to be mapped. + XWindowEvent(dpy,_window,StructureNotifyMask | ExposureMask,&event); + switch (event.type) { + case MapNotify : is_mapped = true; break; + case Expose : is_exposed = true; break; + } + } while (!is_exposed || !is_mapped); + do { // Wait for the window to be visible. + XGetWindowAttributes(dpy,_window,&attr); + if (attr.map_state!=IsViewable) { XSync(dpy,0); cimg::sleep(10); } + } while (attr.map_state!=IsViewable); + _window_x = attr.x; + _window_y = attr.y; + } + + void _paint(const bool wait_expose=true) { + if (_is_closed || !_image) return; + Display *const dpy = cimg::X11_attr().display; + if (wait_expose) { // Send an expose event sticked to display window to force repaint. + XEvent event; + event.xexpose.type = Expose; + event.xexpose.serial = 0; + event.xexpose.send_event = 1; + event.xexpose.display = dpy; + event.xexpose.window = _window; + event.xexpose.x = 0; + event.xexpose.y = 0; + event.xexpose.width = width(); + event.xexpose.height = height(); + event.xexpose.count = 0; + XSendEvent(dpy,_window,0,0,&event); + } else { // Repaint directly (may be called from the expose event). + GC gc = DefaultGC(dpy,DefaultScreen(dpy)); +#ifdef cimg_use_xshm + if (_shminfo) XShmPutImage(dpy,_window,gc,_image,0,0,0,0,_width,_height,1); + else XPutImage(dpy,_window,gc,_image,0,0,0,0,_width,_height); +#else + XPutImage(dpy,_window,gc,_image,0,0,0,0,_width,_height); +#endif + } + } + + template + void _resize(T pixel_type, const unsigned int ndimx, const unsigned int ndimy, const bool force_redraw) { + Display *const dpy = cimg::X11_attr().display; + cimg::unused(pixel_type); + +#ifdef cimg_use_xshm + if (_shminfo) { + XShmSegmentInfo *const nshminfo = new XShmSegmentInfo; + XImage *const nimage = XShmCreateImage(dpy,DefaultVisual(dpy,DefaultScreen(dpy)), + cimg::X11_attr().nb_bits,ZPixmap,0,nshminfo,ndimx,ndimy); + if (!nimage) { delete nshminfo; return; } + else { + nshminfo->shmid = shmget(IPC_PRIVATE,ndimx*ndimy*sizeof(T),IPC_CREAT | 0777); + if (nshminfo->shmid==-1) { XDestroyImage(nimage); delete nshminfo; return; } + else { + nshminfo->shmaddr = nimage->data = (char*)shmat(nshminfo->shmid,0,0); + if (nshminfo->shmaddr==(char*)-1) { + shmctl(nshminfo->shmid,IPC_RMID,0); XDestroyImage(nimage); delete nshminfo; return; + } else { + nshminfo->readOnly = 0; + cimg::X11_attr().is_shm_enabled = true; + XErrorHandler oldXErrorHandler = XSetErrorHandler(_assign_xshm); + XShmAttach(dpy,nshminfo); + XFlush(dpy); + XSetErrorHandler(oldXErrorHandler); + if (!cimg::X11_attr().is_shm_enabled) { + shmdt(nshminfo->shmaddr); + shmctl(nshminfo->shmid,IPC_RMID,0); + XDestroyImage(nimage); + delete nshminfo; + return; + } else { + T *const ndata = (T*)nimage->data; + if (force_redraw) _render_resize((T*)_data,_width,_height,ndata,ndimx,ndimy); + else std::memset(ndata,0,sizeof(T)*ndimx*ndimy); + XShmDetach(dpy,_shminfo); + XDestroyImage(_image); + shmdt(_shminfo->shmaddr); + shmctl(_shminfo->shmid,IPC_RMID,0); + delete _shminfo; + _shminfo = nshminfo; + _image = nimage; + _data = (void*)ndata; + } + } + } + } + } else +#endif + { + T *ndata = (T*)std::malloc(ndimx*ndimy*sizeof(T)); + if (force_redraw) _render_resize((T*)_data,_width,_height,ndata,ndimx,ndimy); + else std::memset(ndata,0,sizeof(T)*ndimx*ndimy); + _data = (void*)ndata; + XDestroyImage(_image); + _image = XCreateImage(dpy,DefaultVisual(dpy,DefaultScreen(dpy)), + cimg::X11_attr().nb_bits,ZPixmap,0,(char*)_data,ndimx,ndimy,8,0); + } + } + + void _init_fullscreen() { + if (!_is_fullscreen || _is_closed) return; + Display *const dpy = cimg::X11_attr().display; + _background_window = 0; + +#ifdef cimg_use_xrandr + int foo; + if (XRRQueryExtension(dpy,&foo,&foo)) { + XRRRotations(dpy,DefaultScreen(dpy),&cimg::X11_attr().curr_rotation); + if (!cimg::X11_attr().resolutions) { + cimg::X11_attr().resolutions = XRRSizes(dpy,DefaultScreen(dpy),&foo); + cimg::X11_attr().nb_resolutions = (unsigned int)foo; + } + if (cimg::X11_attr().resolutions) { + cimg::X11_attr().curr_resolution = 0; + for (unsigned int i = 0; i=_width && nh>=_height && + nw<=(unsigned int)(cimg::X11_attr().resolutions[cimg::X11_attr().curr_resolution].width) && + nh<=(unsigned int)(cimg::X11_attr().resolutions[cimg::X11_attr().curr_resolution].height)) + cimg::X11_attr().curr_resolution = i; + } + if (cimg::X11_attr().curr_resolution>0) { + XRRScreenConfiguration *config = XRRGetScreenInfo(dpy,DefaultRootWindow(dpy)); + XRRSetScreenConfig(dpy,config,DefaultRootWindow(dpy), + cimg::X11_attr().curr_resolution,cimg::X11_attr().curr_rotation,CurrentTime); + XRRFreeScreenConfigInfo(config); + XSync(dpy,0); + } + } + } + if (!cimg::X11_attr().resolutions) + cimg::warn(_cimgdisplay_instance + "init_fullscreen(): Xrandr extension not supported by the X server.", + cimgdisplay_instance); +#endif + + const unsigned int sx = screen_width(), sy = screen_height(); + if (sx==_width && sy==_height) return; + XSetWindowAttributes winattr; + winattr.override_redirect = 1; + _background_window = XCreateWindow(dpy,DefaultRootWindow(dpy),0,0,sx,sy,0,0, + InputOutput,CopyFromParent,CWOverrideRedirect,&winattr); + const cimg_ulong buf_size = (cimg_ulong)sx*sy*(cimg::X11_attr().nb_bits==8?1: + (cimg::X11_attr().nb_bits==16?2:4)); + void *background_data = std::malloc(buf_size); + std::memset(background_data,0,buf_size); + XImage *background_image = XCreateImage(dpy,DefaultVisual(dpy,DefaultScreen(dpy)),cimg::X11_attr().nb_bits, + ZPixmap,0,(char*)background_data,sx,sy,8,0); + XEvent event; + XSelectInput(dpy,_background_window,StructureNotifyMask); + XMapRaised(dpy,_background_window); + do XWindowEvent(dpy,_background_window,StructureNotifyMask,&event); + while (event.type!=MapNotify); + GC gc = DefaultGC(dpy,DefaultScreen(dpy)); +#ifdef cimg_use_xshm + if (_shminfo) XShmPutImage(dpy,_background_window,gc,background_image,0,0,0,0,sx,sy,0); + else XPutImage(dpy,_background_window,gc,background_image,0,0,0,0,sx,sy); +#else + XPutImage(dpy,_background_window,gc,background_image,0,0,0,0,sx,sy); +#endif + XWindowAttributes attr; + XGetWindowAttributes(dpy,_background_window,&attr); + while (attr.map_state!=IsViewable) XSync(dpy,0); + XDestroyImage(background_image); + } + + void _desinit_fullscreen() { + if (!_is_fullscreen) return; + Display *const dpy = cimg::X11_attr().display; + XUngrabKeyboard(dpy,CurrentTime); +#ifdef cimg_use_xrandr + if (cimg::X11_attr().resolutions && cimg::X11_attr().curr_resolution) { + XRRScreenConfiguration *config = XRRGetScreenInfo(dpy,DefaultRootWindow(dpy)); + XRRSetScreenConfig(dpy,config,DefaultRootWindow(dpy),0,cimg::X11_attr().curr_rotation,CurrentTime); + XRRFreeScreenConfigInfo(config); + XSync(dpy,0); + cimg::X11_attr().curr_resolution = 0; + } +#endif + if (_background_window) XDestroyWindow(dpy,_background_window); + _background_window = 0; + _is_fullscreen = false; + } + + static int _assign_xshm(Display *dpy, XErrorEvent *error) { + cimg::unused(dpy,error); + cimg::X11_attr().is_shm_enabled = false; + return 0; + } + + void _assign(const unsigned int dimw, const unsigned int dimh, const char *const ptitle=0, + const unsigned int normalization_type=3, + const bool fullscreen_flag=false, const bool closed_flag=false) { + cimg::mutex(14); + + // Allocate space for window title + const char *const nptitle = ptitle?ptitle:""; + const unsigned int s = (unsigned int)std::strlen(nptitle) + 1; + char *const tmp_title = s?new char[s]:0; + if (s) std::memcpy(tmp_title,nptitle,s*sizeof(char)); + + // Destroy previous display window if existing + if (!is_empty()) assign(); + + // Open X11 display and retrieve graphical properties. + Display* &dpy = cimg::X11_attr().display; + if (!dpy) { + dpy = XOpenDisplay(0); + if (!dpy) + throw CImgDisplayException(_cimgdisplay_instance + "assign(): Failed to open X11 display.", + cimgdisplay_instance); + + cimg::X11_attr().nb_bits = DefaultDepth(dpy,DefaultScreen(dpy)); + if (cimg::X11_attr().nb_bits!=8 && cimg::X11_attr().nb_bits!=16 && + cimg::X11_attr().nb_bits!=24 && cimg::X11_attr().nb_bits!=32) + throw CImgDisplayException(_cimgdisplay_instance + "assign(): Invalid %u bits screen mode detected " + "(only 8, 16, 24 and 32 bits modes are managed).", + cimgdisplay_instance, + cimg::X11_attr().nb_bits); + XVisualInfo vtemplate; + vtemplate.visualid = XVisualIDFromVisual(DefaultVisual(dpy,DefaultScreen(dpy))); + int nb_visuals; + XVisualInfo *vinfo = XGetVisualInfo(dpy,VisualIDMask,&vtemplate,&nb_visuals); + if (vinfo && vinfo->red_maskblue_mask) cimg::X11_attr().is_blue_first = true; + cimg::X11_attr().byte_order = ImageByteOrder(dpy); + XFree(vinfo); + + cimg_lock_display(); + cimg::X11_attr().events_thread = new pthread_t; + pthread_create(cimg::X11_attr().events_thread,0,_events_thread,0); + } else cimg_lock_display(); + + // Set display variables. + _width = std::min(dimw,(unsigned int)screen_width()); + _height = std::min(dimh,(unsigned int)screen_height()); + _normalization = normalization_type<4?normalization_type:3; + _is_fullscreen = fullscreen_flag; + _window_x = _window_y = 0; + _is_closed = closed_flag; + _title = tmp_title; + flush(); + + // Create X11 window (and LUT, if 8bits display) + if (_is_fullscreen) { + if (!_is_closed) _init_fullscreen(); + const unsigned int sx = screen_width(), sy = screen_height(); + XSetWindowAttributes winattr; + winattr.override_redirect = 1; + _window = XCreateWindow(dpy,DefaultRootWindow(dpy),(sx - _width)/2,(sy - _height)/2,_width,_height,0,0, + InputOutput,CopyFromParent,CWOverrideRedirect,&winattr); + } else + _window = XCreateSimpleWindow(dpy,DefaultRootWindow(dpy),0,0,_width,_height,0,0L,0L); + + XSelectInput(dpy,_window, + ExposureMask | StructureNotifyMask | ButtonPressMask | KeyPressMask | PointerMotionMask | + EnterWindowMask | LeaveWindowMask | ButtonReleaseMask | KeyReleaseMask); + + XStoreName(dpy,_window,_title?_title:" "); + if (cimg::X11_attr().nb_bits==8) { + _colormap = XCreateColormap(dpy,_window,DefaultVisual(dpy,DefaultScreen(dpy)),AllocAll); + _set_colormap(_colormap,3); + XSetWindowColormap(dpy,_window,_colormap); + } + + static const char *const _window_class = cimg_appname; + XClassHint *const window_class = XAllocClassHint(); + window_class->res_name = (char*)_window_class; + window_class->res_class = (char*)_window_class; + XSetClassHint(dpy,_window,window_class); + XFree(window_class); + + _window_width = _width; + _window_height = _height; + + // Create XImage +#ifdef cimg_use_xshm + _shminfo = 0; + if (XShmQueryExtension(dpy)) { + _shminfo = new XShmSegmentInfo; + _image = XShmCreateImage(dpy,DefaultVisual(dpy,DefaultScreen(dpy)),cimg::X11_attr().nb_bits, + ZPixmap,0,_shminfo,_width,_height); + if (!_image) { delete _shminfo; _shminfo = 0; } + else { + _shminfo->shmid = shmget(IPC_PRIVATE,_image->bytes_per_line*_image->height,IPC_CREAT|0777); + if (_shminfo->shmid==-1) { XDestroyImage(_image); delete _shminfo; _shminfo = 0; } + else { + _shminfo->shmaddr = _image->data = (char*)(_data = shmat(_shminfo->shmid,0,0)); + if (_shminfo->shmaddr==(char*)-1) { + shmctl(_shminfo->shmid,IPC_RMID,0); XDestroyImage(_image); delete _shminfo; _shminfo = 0; + } else { + _shminfo->readOnly = 0; + cimg::X11_attr().is_shm_enabled = true; + XErrorHandler oldXErrorHandler = XSetErrorHandler(_assign_xshm); + XShmAttach(dpy,_shminfo); + XSync(dpy,0); + XSetErrorHandler(oldXErrorHandler); + if (!cimg::X11_attr().is_shm_enabled) { + shmdt(_shminfo->shmaddr); shmctl(_shminfo->shmid,IPC_RMID,0); XDestroyImage(_image); + delete _shminfo; _shminfo = 0; + } + } + } + } + } + if (!_shminfo) +#endif + { + const cimg_ulong buf_size = (cimg_ulong)_width*_height*(cimg::X11_attr().nb_bits==8?1: + (cimg::X11_attr().nb_bits==16?2:4)); + _data = std::malloc(buf_size); + _image = XCreateImage(dpy,DefaultVisual(dpy,DefaultScreen(dpy)),cimg::X11_attr().nb_bits, + ZPixmap,0,(char*)_data,_width,_height,8,0); + } + + _wm_window_atom = XInternAtom(dpy,"WM_DELETE_WINDOW",0); + _wm_protocol_atom = XInternAtom(dpy,"WM_PROTOCOLS",0); + XSetWMProtocols(dpy,_window,&_wm_window_atom,1); + + if (_is_fullscreen) XGrabKeyboard(dpy,_window,1,GrabModeAsync,GrabModeAsync,CurrentTime); + cimg::X11_attr().wins[cimg::X11_attr().nb_wins++]=this; + if (!_is_closed) _map_window(); else { _window_x = _window_y = cimg::type::min(); } + cimg_unlock_display(); + cimg::mutex(14,0); + } + + CImgDisplay& assign() { + if (is_empty()) return flush(); + Display *const dpy = cimg::X11_attr().display; + cimg_lock_display(); + + // Remove display window from event thread list. + unsigned int i; + for (i = 0; ishmaddr); + shmctl(_shminfo->shmid,IPC_RMID,0); + delete _shminfo; + _shminfo = 0; + } else +#endif + XDestroyImage(_image); + _data = 0; _image = 0; + if (cimg::X11_attr().nb_bits==8) XFreeColormap(dpy,_colormap); + _colormap = 0; + XSync(dpy,0); + + // Reset display variables. + delete[] _title; + _width = _height = _normalization = _window_width = _window_height = 0; + _window_x = _window_y = 0; + _is_fullscreen = false; + _is_closed = true; + _min = _max = 0; + _title = 0; + flush(); + + cimg_unlock_display(); + return *this; + } + + CImgDisplay& assign(const unsigned int dimw, const unsigned int dimh, const char *const title=0, + const unsigned int normalization_type=3, + const bool fullscreen_flag=false, const bool closed_flag=false) { + if (!dimw || !dimh) return assign(); + _assign(dimw,dimh,title,normalization_type,fullscreen_flag,closed_flag); + _min = _max = 0; + std::memset(_data,0,(cimg::X11_attr().nb_bits==8?sizeof(unsigned char): + (cimg::X11_attr().nb_bits==16?sizeof(unsigned short):sizeof(unsigned int)))* + (size_t)_width*_height); + return paint(); + } + + template + CImgDisplay& assign(const CImg& img, const char *const title=0, + const unsigned int normalization_type=3, + const bool fullscreen_flag=false, const bool closed_flag=false) { + if (!img) return assign(); + CImg tmp; + const CImg& nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width - 1)/2, + (img._height - 1)/2, + (img._depth - 1)/2)); + _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); + if (_normalization==2) _min = (float)nimg.min_max(_max); + return render(nimg).paint(); + } + + template + CImgDisplay& assign(const CImgList& list, const char *const title=0, + const unsigned int normalization_type=3, + const bool fullscreen_flag=false, const bool closed_flag=false) { + if (!list) return assign(); + CImg tmp; + const CImg img = list>'x', &nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width - 1)/2, + (img._height - 1)/2, + (img._depth - 1)/2)); + _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); + if (_normalization==2) _min = (float)nimg.min_max(_max); + return render(nimg).paint(); + } + + CImgDisplay& assign(const CImgDisplay& disp) { + if (!disp) return assign(); + _assign(disp._width,disp._height,disp._title,disp._normalization,disp._is_fullscreen,disp._is_closed); + std::memcpy(_data,disp._data,(cimg::X11_attr().nb_bits==8?sizeof(unsigned char): + cimg::X11_attr().nb_bits==16?sizeof(unsigned short): + sizeof(unsigned int))*(size_t)_width*_height); + return paint(); + } + + CImgDisplay& resize(const int nwidth, const int nheight, const bool force_redraw=true) { + if (!nwidth || !nheight || (is_empty() && (nwidth<0 || nheight<0))) return assign(); + if (is_empty()) return assign(nwidth,nheight); + Display *const dpy = cimg::X11_attr().display; + const unsigned int + tmpdimx = (nwidth>0)?nwidth:(-nwidth*width()/100), + tmpdimy = (nheight>0)?nheight:(-nheight*height()/100), + dimx = tmpdimx?tmpdimx:1, + dimy = tmpdimy?tmpdimy:1; + if (_width!=dimx || _height!=dimy || _window_width!=dimx || _window_height!=dimy) { + show(); + cimg_lock_display(); + if (_window_width!=dimx || _window_height!=dimy) { + XWindowAttributes attr; + for (unsigned int i = 0; i<10; ++i) { + XResizeWindow(dpy,_window,dimx,dimy); + XGetWindowAttributes(dpy,_window,&attr); + if (attr.width==(int)dimx && attr.height==(int)dimy) break; + cimg::wait(5); + } + } + if (_width!=dimx || _height!=dimy) switch (cimg::X11_attr().nb_bits) { + case 8 : { unsigned char pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } break; + case 16 : { unsigned short pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } break; + default : { unsigned int pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } + } + _window_width = _width = dimx; _window_height = _height = dimy; + cimg_unlock_display(); + } + _is_resized = false; + if (_is_fullscreen) move((screen_width() - _width)/2,(screen_height() - _height)/2); + if (force_redraw) return paint(); + return *this; + } + + CImgDisplay& toggle_fullscreen(const bool force_redraw=true) { + if (is_empty()) return *this; + if (force_redraw) { + const cimg_ulong buf_size = (cimg_ulong)_width*_height* + (cimg::X11_attr().nb_bits==8?1:(cimg::X11_attr().nb_bits==16?2:4)); + void *image_data = std::malloc(buf_size); + std::memcpy(image_data,_data,buf_size); + assign(_width,_height,_title,_normalization,!_is_fullscreen,false); + std::memcpy(_data,image_data,buf_size); + std::free(image_data); + return paint(); + } + return assign(_width,_height,_title,_normalization,!_is_fullscreen,false); + } + + CImgDisplay& show() { + if (is_empty() || !_is_closed) return *this; + cimg_lock_display(); + if (_is_fullscreen) _init_fullscreen(); + _map_window(); + _is_closed = false; + cimg_unlock_display(); + return paint(); + } + + CImgDisplay& close() { + if (is_empty() || _is_closed) return *this; + Display *const dpy = cimg::X11_attr().display; + cimg_lock_display(); + if (_is_fullscreen) _desinit_fullscreen(); + XUnmapWindow(dpy,_window); + _window_x = _window_y = -1; + _is_closed = true; + cimg_unlock_display(); + return *this; + } + + CImgDisplay& move(const int posx, const int posy) { + if (is_empty()) return *this; + if (_window_x!=posx || _window_y!=posy) { + show(); + Display *const dpy = cimg::X11_attr().display; + cimg_lock_display(); + XMoveWindow(dpy,_window,posx,posy); + _window_x = posx; _window_y = posy; + cimg_unlock_display(); + } + _is_moved = false; + return paint(); + } + + CImgDisplay& show_mouse() { + if (is_empty()) return *this; + Display *const dpy = cimg::X11_attr().display; + cimg_lock_display(); + XUndefineCursor(dpy,_window); + cimg_unlock_display(); + return *this; + } + + CImgDisplay& hide_mouse() { + if (is_empty()) return *this; + Display *const dpy = cimg::X11_attr().display; + cimg_lock_display(); + static const char pix_data[8] = { 0 }; + XColor col; + col.red = col.green = col.blue = 0; + Pixmap pix = XCreateBitmapFromData(dpy,_window,pix_data,8,8); + Cursor cur = XCreatePixmapCursor(dpy,pix,pix,&col,&col,0,0); + XFreePixmap(dpy,pix); + XDefineCursor(dpy,_window,cur); + cimg_unlock_display(); + return *this; + } + + CImgDisplay& set_mouse(const int posx, const int posy) { + if (is_empty() || _is_closed) return *this; + Display *const dpy = cimg::X11_attr().display; + cimg_lock_display(); + XWarpPointer(dpy,0L,_window,0,0,0,0,posx,posy); + _mouse_x = posx; _mouse_y = posy; + _is_moved = false; + XSync(dpy,0); + cimg_unlock_display(); + return *this; + } + + CImgDisplay& set_title(const char *const format, ...) { + if (is_empty()) return *this; + char *const tmp = new char[1024]; + va_list ap; + va_start(ap, format); + cimg_vsnprintf(tmp,1024,format,ap); + va_end(ap); + if (!std::strcmp(_title,tmp)) { delete[] tmp; return *this; } + delete[] _title; + const unsigned int s = (unsigned int)std::strlen(tmp) + 1; + _title = new char[s]; + std::memcpy(_title,tmp,s*sizeof(char)); + Display *const dpy = cimg::X11_attr().display; + cimg_lock_display(); + XStoreName(dpy,_window,tmp); + cimg_unlock_display(); + delete[] tmp; + return *this; + } + + template + CImgDisplay& display(const CImg& img) { + if (!img) + throw CImgArgumentException(_cimgdisplay_instance + "display(): Empty specified image.", + cimgdisplay_instance); + if (is_empty()) return assign(img); + return render(img).paint(false); + } + + CImgDisplay& paint(const bool wait_expose=true) { + if (is_empty()) return *this; + cimg_lock_display(); + _paint(wait_expose); + cimg_unlock_display(); + return *this; + } + + template + CImgDisplay& render(const CImg& img, const bool flag8=false) { + if (!img) + throw CImgArgumentException(_cimgdisplay_instance + "render(): Empty specified image.", + cimgdisplay_instance); + if (is_empty()) return *this; + if (img._depth!=1) return render(img.get_projections2d((img._width - 1)/2,(img._height - 1)/2, + (img._depth - 1)/2)); + if (cimg::X11_attr().nb_bits==8 && (img._width!=_width || img._height!=_height)) + return render(img.get_resize(_width,_height,1,-100,1)); + if (cimg::X11_attr().nb_bits==8 && !flag8 && img._spectrum==3) { + static const CImg::ucharT> default_colormap = CImg::ucharT>::default_LUT256(); + return render(img.get_index(default_colormap,1,false)); + } + + const T + *data1 = img._data, + *data2 = (img._spectrum>1)?img.data(0,0,0,1):data1, + *data3 = (img._spectrum>2)?img.data(0,0,0,2):data1; + + if (cimg::X11_attr().is_blue_first) cimg::swap(data1,data3); + cimg_lock_display(); + + if (!_normalization || (_normalization==3 && cimg::type::string()==cimg::type::string())) { + _min = _max = 0; + switch (cimg::X11_attr().nb_bits) { + case 8 : { // 256 colormap, no normalization + _set_colormap(_colormap,img._spectrum); + unsigned char + *const ndata = (img._width==_width && img._height==_height)?(unsigned char*)_data: + new unsigned char[(size_t)img._width*img._height], + *ptrd = (unsigned char*)ndata; + switch (img._spectrum) { + case 1 : + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) + (*ptrd++) = (unsigned char)*(data1++); + break; + case 2 : for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char + R = (unsigned char)*(data1++), + G = (unsigned char)*(data2++); + (*ptrd++) = (R&0xf0) | (G>>4); + } break; + default : for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char + R = (unsigned char)*(data1++), + G = (unsigned char)*(data2++), + B = (unsigned char)*(data3++); + (*ptrd++) = (R&0xe0) | ((G>>5)<<2) | (B>>6); + } + } + if (ndata!=_data) { + _render_resize(ndata,img._width,img._height,(unsigned char*)_data,_width,_height); + delete[] ndata; + } + } break; + case 16 : { // 16 bits colors, no normalization + unsigned short *const ndata = (img._width==_width && img._height==_height)?(unsigned short*)_data: + new unsigned short[(size_t)img._width*img._height]; + unsigned char *ptrd = (unsigned char*)ndata; + const unsigned int M = 248; + switch (img._spectrum) { + case 1 : + if (cimg::X11_attr().byte_order) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char val = (unsigned char)*(data1++), G = val>>2; + ptrd[0] = (val&M) | (G>>3); + ptrd[1] = (G<<5) | (G>>1); + ptrd+=2; + } else for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char val = (unsigned char)*(data1++), G = val>>2; + ptrd[0] = (G<<5) | (G>>1); + ptrd[1] = (val&M) | (G>>3); + ptrd+=2; + } + break; + case 2 : + if (cimg::X11_attr().byte_order) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char G = (unsigned char)*(data2++)>>2; + ptrd[0] = ((unsigned char)*(data1++)&M) | (G>>3); + ptrd[1] = (G<<5); + ptrd+=2; + } else for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char G = (unsigned char)*(data2++)>>2; + ptrd[0] = (G<<5); + ptrd[1] = ((unsigned char)*(data1++)&M) | (G>>3); + ptrd+=2; + } + break; + default : + if (cimg::X11_attr().byte_order) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char G = (unsigned char)*(data2++)>>2; + ptrd[0] = ((unsigned char)*(data1++)&M) | (G>>3); + ptrd[1] = (G<<5) | ((unsigned char)*(data3++)>>3); + ptrd+=2; + } else for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char G = (unsigned char)*(data2++)>>2; + ptrd[0] = (G<<5) | ((unsigned char)*(data3++)>>3); + ptrd[1] = ((unsigned char)*(data1++)&M) | (G>>3); + ptrd+=2; + } + } + if (ndata!=_data) { + _render_resize(ndata,img._width,img._height,(unsigned short*)_data,_width,_height); + delete[] ndata; + } + } break; + default : { // 24 bits colors, no normalization + unsigned int *const ndata = (img._width==_width && img._height==_height)?(unsigned int*)_data: + new unsigned int[(size_t)img._width*img._height]; + if (sizeof(int)==4) { // 32 bits int uses optimized version + unsigned int *ptrd = ndata; + switch (img._spectrum) { + case 1 : + if (cimg::X11_attr().byte_order==cimg::endianness()) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char val = (unsigned char)*(data1++); + *(ptrd++) = (val<<16) | (val<<8) | val; + } + else + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char val = (unsigned char)*(data1++); + *(ptrd++) = (val<<16) | (val<<8) | val; + } + break; + case 2 : + if (cimg::X11_attr().byte_order==cimg::endianness()) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) + *(ptrd++) = ((unsigned char)*(data1++)<<16) | ((unsigned char)*(data2++)<<8); + else + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) + *(ptrd++) = ((unsigned char)*(data2++)<<16) | ((unsigned char)*(data1++)<<8); + break; + default : + if (cimg::X11_attr().byte_order==cimg::endianness()) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) + *(ptrd++) = ((unsigned char)*(data1++)<<16) | ((unsigned char)*(data2++)<<8) | + (unsigned char)*(data3++); + else + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) + *(ptrd++) = ((unsigned char)*(data3++)<<24) | ((unsigned char)*(data2++)<<16) | + ((unsigned char)*(data1++)<<8); + } + } else { + unsigned char *ptrd = (unsigned char*)ndata; + switch (img._spectrum) { + case 1 : + if (cimg::X11_attr().byte_order) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + ptrd[0] = 0; + ptrd[1] = (unsigned char)*(data1++); + ptrd[2] = 0; + ptrd[3] = 0; + ptrd+=4; + } else for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + ptrd[0] = 0; + ptrd[1] = 0; + ptrd[2] = (unsigned char)*(data1++); + ptrd[3] = 0; + ptrd+=4; + } + break; + case 2 : + if (cimg::X11_attr().byte_order) cimg::swap(data1,data2); + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + ptrd[0] = 0; + ptrd[1] = (unsigned char)*(data2++); + ptrd[2] = (unsigned char)*(data1++); + ptrd[3] = 0; + ptrd+=4; + } + break; + default : + if (cimg::X11_attr().byte_order) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + ptrd[0] = 0; + ptrd[1] = (unsigned char)*(data1++); + ptrd[2] = (unsigned char)*(data2++); + ptrd[3] = (unsigned char)*(data3++); + ptrd+=4; + } else for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + ptrd[0] = (unsigned char)*(data3++); + ptrd[1] = (unsigned char)*(data2++); + ptrd[2] = (unsigned char)*(data1++); + ptrd[3] = 0; + ptrd+=4; + } + } + } + if (ndata!=_data) { + _render_resize(ndata,img._width,img._height,(unsigned int*)_data,_width,_height); + delete[] ndata; + } + } + } + } else { + if (_normalization==3) { + if (cimg::type::is_float()) _min = (float)img.min_max(_max); + else { _min = (float)cimg::type::min(); _max = (float)cimg::type::max(); } + } else if ((_min>_max) || _normalization==1) _min = (float)img.min_max(_max); + const float delta = _max - _min, mm = 255/(delta?delta:1.0f); + switch (cimg::X11_attr().nb_bits) { + case 8 : { // 256 colormap, with normalization + _set_colormap(_colormap,img._spectrum); + unsigned char *const ndata = (img._width==_width && img._height==_height)?(unsigned char*)_data: + new unsigned char[(size_t)img._width*img._height]; + unsigned char *ptrd = (unsigned char*)ndata; + switch (img._spectrum) { + case 1 : for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char R = (unsigned char)((*(data1++) - _min)*mm); + *(ptrd++) = R; + } break; + case 2 : for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char + R = (unsigned char)((*(data1++) - _min)*mm), + G = (unsigned char)((*(data2++) - _min)*mm); + (*ptrd++) = (R&0xf0) | (G>>4); + } break; + default : + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char + R = (unsigned char)((*(data1++) - _min)*mm), + G = (unsigned char)((*(data2++) - _min)*mm), + B = (unsigned char)((*(data3++) - _min)*mm); + *(ptrd++) = (R&0xe0) | ((G>>5)<<2) | (B>>6); + } + } + if (ndata!=_data) { + _render_resize(ndata,img._width,img._height,(unsigned char*)_data,_width,_height); + delete[] ndata; + } + } break; + case 16 : { // 16 bits colors, with normalization + unsigned short *const ndata = (img._width==_width && img._height==_height)?(unsigned short*)_data: + new unsigned short[(size_t)img._width*img._height]; + unsigned char *ptrd = (unsigned char*)ndata; + const unsigned int M = 248; + switch (img._spectrum) { + case 1 : + if (cimg::X11_attr().byte_order) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm), G = val>>2; + ptrd[0] = (val&M) | (G>>3); + ptrd[1] = (G<<5) | (val>>3); + ptrd+=2; + } else for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm), G = val>>2; + ptrd[0] = (G<<5) | (val>>3); + ptrd[1] = (val&M) | (G>>3); + ptrd+=2; + } + break; + case 2 : + if (cimg::X11_attr().byte_order) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char G = (unsigned char)((*(data2++) - _min)*mm)>>2; + ptrd[0] = ((unsigned char)((*(data1++) - _min)*mm)&M) | (G>>3); + ptrd[1] = (G<<5); + ptrd+=2; + } else for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char G = (unsigned char)((*(data2++) - _min)*mm)>>2; + ptrd[0] = (G<<5); + ptrd[1] = ((unsigned char)((*(data1++) - _min)*mm)&M) | (G>>3); + ptrd+=2; + } + break; + default : + if (cimg::X11_attr().byte_order) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char G = (unsigned char)((*(data2++) - _min)*mm)>>2; + ptrd[0] = ((unsigned char)((*(data1++) - _min)*mm)&M) | (G>>3); + ptrd[1] = (G<<5) | ((unsigned char)((*(data3++) - _min)*mm)>>3); + ptrd+=2; + } else for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char G = (unsigned char)((*(data2++) - _min)*mm)>>2; + ptrd[0] = (G<<5) | ((unsigned char)((*(data3++) - _min)*mm)>>3); + ptrd[1] = ((unsigned char)((*(data1++) - _min)*mm)&M) | (G>>3); + ptrd+=2; + } + } + if (ndata!=_data) { + _render_resize(ndata,img._width,img._height,(unsigned short*)_data,_width,_height); + delete[] ndata; + } + } break; + default : { // 24 bits colors, with normalization + unsigned int *const ndata = (img._width==_width && img._height==_height)?(unsigned int*)_data: + new unsigned int[(size_t)img._width*img._height]; + if (sizeof(int)==4) { // 32 bits int uses optimized version + unsigned int *ptrd = ndata; + switch (img._spectrum) { + case 1 : + if (cimg::X11_attr().byte_order==cimg::endianness()) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm); + *(ptrd++) = (val<<16) | (val<<8) | val; + } + else + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm); + *(ptrd++) = (val<<24) | (val<<16) | (val<<8); + } + break; + case 2 : + if (cimg::X11_attr().byte_order==cimg::endianness()) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) + *(ptrd++) = + ((unsigned char)((*(data1++) - _min)*mm)<<16) | + ((unsigned char)((*(data2++) - _min)*mm)<<8); + else + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) + *(ptrd++) = + ((unsigned char)((*(data2++) - _min)*mm)<<16) | + ((unsigned char)((*(data1++) - _min)*mm)<<8); + break; + default : + if (cimg::X11_attr().byte_order==cimg::endianness()) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) + *(ptrd++) = + ((unsigned char)((*(data1++) - _min)*mm)<<16) | + ((unsigned char)((*(data2++) - _min)*mm)<<8) | + (unsigned char)((*(data3++) - _min)*mm); + else + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) + *(ptrd++) = + ((unsigned char)((*(data3++) - _min)*mm)<<24) | + ((unsigned char)((*(data2++) - _min)*mm)<<16) | + ((unsigned char)((*(data1++) - _min)*mm)<<8); + } + } else { + unsigned char *ptrd = (unsigned char*)ndata; + switch (img._spectrum) { + case 1 : + if (cimg::X11_attr().byte_order) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm); + ptrd[0] = 0; + ptrd[1] = val; + ptrd[2] = val; + ptrd[3] = val; + ptrd+=4; + } else for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm); + ptrd[0] = val; + ptrd[1] = val; + ptrd[2] = val; + ptrd[3] = 0; + ptrd+=4; + } + break; + case 2 : + if (cimg::X11_attr().byte_order) cimg::swap(data1,data2); + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + ptrd[0] = 0; + ptrd[1] = (unsigned char)((*(data2++) - _min)*mm); + ptrd[2] = (unsigned char)((*(data1++) - _min)*mm); + ptrd[3] = 0; + ptrd+=4; + } + break; + default : + if (cimg::X11_attr().byte_order) + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + ptrd[0] = 0; + ptrd[1] = (unsigned char)((*(data1++) - _min)*mm); + ptrd[2] = (unsigned char)((*(data2++) - _min)*mm); + ptrd[3] = (unsigned char)((*(data3++) - _min)*mm); + ptrd+=4; + } else for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + ptrd[0] = (unsigned char)((*(data3++) - _min)*mm); + ptrd[1] = (unsigned char)((*(data2++) - _min)*mm); + ptrd[2] = (unsigned char)((*(data1++) - _min)*mm); + ptrd[3] = 0; + ptrd+=4; + } + } + } + if (ndata!=_data) { + _render_resize(ndata,img._width,img._height,(unsigned int*)_data,_width,_height); + delete[] ndata; + } + } + } + } + cimg_unlock_display(); + return *this; + } + + template + static void screenshot(const int x0, const int y0, const int x1, const int y1, CImg& img) { + img.assign(); + Display *dpy = cimg::X11_attr().display; + cimg_lock_display(); + if (!dpy) { + dpy = XOpenDisplay(0); + if (!dpy) + throw CImgDisplayException("CImgDisplay::screenshot(): Failed to open X11 display."); + } + Window root = DefaultRootWindow(dpy); + XWindowAttributes gwa; + XGetWindowAttributes(dpy,root,&gwa); + const int width = gwa.width, height = gwa.height; + int _x0 = x0, _y0 = y0, _x1 = x1, _y1 = y1; + if (_x0>_x1) cimg::swap(_x0,_x1); + if (_y0>_y1) cimg::swap(_y0,_y1); + + XImage *image = 0; + if (_x1>=0 && _x0=0 && _y0red_mask, + green_mask = image->green_mask, + blue_mask = image->blue_mask; + img.assign(image->width,image->height,1,3); + T *pR = img.data(0,0,0,0), *pG = img.data(0,0,0,1), *pB = img.data(0,0,0,2); + cimg_forXY(img,x,y) { + const unsigned long pixel = XGetPixel(image,x,y); + *(pR++) = (T)((pixel & red_mask)>>16); + *(pG++) = (T)((pixel & green_mask)>>8); + *(pB++) = (T)(pixel & blue_mask); + } + XDestroyImage(image); + } + } + if (!cimg::X11_attr().display) XCloseDisplay(dpy); + cimg_unlock_display(); + if (img.is_empty()) + throw CImgDisplayException("CImgDisplay::screenshot(): Failed to take screenshot " + "with coordinates (%d,%d)-(%d,%d).", + x0,y0,x1,y1); + } + + template + const CImgDisplay& snapshot(CImg& img) const { + if (is_empty()) { img.assign(); return *this; } + const unsigned char *ptrs = (unsigned char*)_data; + img.assign(_width,_height,1,3); + T + *data1 = img.data(0,0,0,0), + *data2 = img.data(0,0,0,1), + *data3 = img.data(0,0,0,2); + if (cimg::X11_attr().is_blue_first) cimg::swap(data1,data3); + switch (cimg::X11_attr().nb_bits) { + case 8 : { + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char val = *(ptrs++); + *(data1++) = (T)(val&0xe0); + *(data2++) = (T)((val&0x1c)<<3); + *(data3++) = (T)(val<<6); + } + } break; + case 16 : { + if (cimg::X11_attr().byte_order) for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char + val0 = ptrs[0], + val1 = ptrs[1]; + ptrs+=2; + *(data1++) = (T)(val0&0xf8); + *(data2++) = (T)((val0<<5) | ((val1&0xe0)>>5)); + *(data3++) = (T)(val1<<3); + } else for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned short + val0 = ptrs[0], + val1 = ptrs[1]; + ptrs+=2; + *(data1++) = (T)(val1&0xf8); + *(data2++) = (T)((val1<<5) | ((val0&0xe0)>>5)); + *(data3++) = (T)(val0<<3); + } + } break; + default : { + if (cimg::X11_attr().byte_order) for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + ++ptrs; + *(data1++) = (T)ptrs[0]; + *(data2++) = (T)ptrs[1]; + *(data3++) = (T)ptrs[2]; + ptrs+=3; + } else for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + *(data3++) = (T)ptrs[0]; + *(data2++) = (T)ptrs[1]; + *(data1++) = (T)ptrs[2]; + ptrs+=3; + ++ptrs; + } + } + } + return *this; + } + + // Windows-based implementation. + //------------------------------- +#elif cimg_display==2 + + bool _is_mouse_tracked, _is_cursor_visible; + HANDLE _thread, _is_created, _mutex; + HWND _window, _background_window; + CLIENTCREATESTRUCT _ccs; + unsigned int *_data; + DEVMODE _curr_mode; + BITMAPINFO _bmi; + HDC _hdc; + + static int screen_width() { + DEVMODE mode; + mode.dmSize = sizeof(DEVMODE); + mode.dmDriverExtra = 0; + EnumDisplaySettings(0,ENUM_CURRENT_SETTINGS,&mode); + return (int)mode.dmPelsWidth; + } + + static int screen_height() { + DEVMODE mode; + mode.dmSize = sizeof(DEVMODE); + mode.dmDriverExtra = 0; + EnumDisplaySettings(0,ENUM_CURRENT_SETTINGS,&mode); + return (int)mode.dmPelsHeight; + } + + static void wait_all() { + WaitForSingleObject(cimg::Win32_attr().wait_event,INFINITE); + } + + static LRESULT APIENTRY _handle_events(HWND window, UINT msg, WPARAM wParam, LPARAM lParam) { +#ifdef _WIN64 + CImgDisplay *const disp = (CImgDisplay*)GetWindowLongPtr(window,GWLP_USERDATA); +#else + CImgDisplay *const disp = (CImgDisplay*)GetWindowLong(window,GWL_USERDATA); +#endif + MSG st_msg; + switch (msg) { + case WM_CLOSE : + disp->_mouse_x = disp->_mouse_y = -1; + disp->_window_x = disp->_window_y = 0; + disp->set_button().set_key(0).set_key(0,false)._is_closed = true; + ReleaseMutex(disp->_mutex); + ShowWindow(disp->_window,SW_HIDE); + disp->_is_event = true; + SetEvent(cimg::Win32_attr().wait_event); + return 0; + case WM_SIZE : { + while (PeekMessage(&st_msg,window,WM_SIZE,WM_SIZE,PM_REMOVE)) {} + WaitForSingleObject(disp->_mutex,INFINITE); + const unsigned int nw = LOWORD(lParam),nh = HIWORD(lParam); + if (nw && nh && (nw!=disp->_width || nh!=disp->_height)) { + disp->_window_width = nw; + disp->_window_height = nh; + disp->_mouse_x = disp->_mouse_y = -1; + disp->_is_resized = disp->_is_event = true; + SetEvent(cimg::Win32_attr().wait_event); + } + ReleaseMutex(disp->_mutex); + } break; + case WM_MOVE : { + while (PeekMessage(&st_msg,window,WM_SIZE,WM_SIZE,PM_REMOVE)) {} + WaitForSingleObject(disp->_mutex,INFINITE); + const int nx = (int)(short)(LOWORD(lParam)), ny = (int)(short)(HIWORD(lParam)); + if (nx!=disp->_window_x || ny!=disp->_window_y) { + disp->_window_x = nx; + disp->_window_y = ny; + disp->_is_moved = disp->_is_event = true; + SetEvent(cimg::Win32_attr().wait_event); + } + ReleaseMutex(disp->_mutex); + } break; + case WM_PAINT : + disp->paint(); + cimg::mutex(15); + if (disp->_is_cursor_visible) while (ShowCursor(TRUE)<0); else while (ShowCursor(FALSE)>=0); + cimg::mutex(15,0); + break; + case WM_ERASEBKGND : + // return 0; + break; + case WM_KEYDOWN : + disp->set_key((unsigned int)wParam); + SetEvent(cimg::Win32_attr().wait_event); + break; + case WM_KEYUP : + disp->set_key((unsigned int)wParam,false); + SetEvent(cimg::Win32_attr().wait_event); + break; + case WM_MOUSEMOVE : { + while (PeekMessage(&st_msg,window,WM_MOUSEMOVE,WM_MOUSEMOVE,PM_REMOVE)) {} + disp->_mouse_x = LOWORD(lParam); + disp->_mouse_y = HIWORD(lParam); +#if (_WIN32_WINNT>=0x0400) && !defined(NOTRACKMOUSEEVENT) + if (!disp->_is_mouse_tracked) { + TRACKMOUSEEVENT tme; + tme.cbSize = sizeof(TRACKMOUSEEVENT); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = disp->_window; + if (TrackMouseEvent(&tme)) disp->_is_mouse_tracked = true; + } +#endif + if (disp->_mouse_x<0 || disp->_mouse_y<0 || disp->_mouse_x>=disp->width() || disp->_mouse_y>=disp->height()) + disp->_mouse_x = disp->_mouse_y = -1; + disp->_is_event = true; + SetEvent(cimg::Win32_attr().wait_event); + cimg::mutex(15); + if (disp->_is_cursor_visible) while (ShowCursor(TRUE)<0); else while (ShowCursor(FALSE)>=0); + cimg::mutex(15,0); + } break; + case WM_MOUSELEAVE : { + disp->_mouse_x = disp->_mouse_y = -1; + disp->_is_mouse_tracked = false; + cimg::mutex(15); + while (ShowCursor(TRUE)<0) {} + cimg::mutex(15,0); + } break; + case WM_LBUTTONDOWN : + disp->set_button(1); + SetEvent(cimg::Win32_attr().wait_event); + break; + case WM_RBUTTONDOWN : + disp->set_button(2); + SetEvent(cimg::Win32_attr().wait_event); + break; + case WM_MBUTTONDOWN : + disp->set_button(3); + SetEvent(cimg::Win32_attr().wait_event); + break; + case WM_LBUTTONUP : + disp->set_button(1,false); + SetEvent(cimg::Win32_attr().wait_event); + break; + case WM_RBUTTONUP : + disp->set_button(2,false); + SetEvent(cimg::Win32_attr().wait_event); + break; + case WM_MBUTTONUP : + disp->set_button(3,false); + SetEvent(cimg::Win32_attr().wait_event); + break; + case 0x020A : // WM_MOUSEWHEEL: + disp->set_wheel((int)((short)HIWORD(wParam))/120); + SetEvent(cimg::Win32_attr().wait_event); + } + return DefWindowProc(window,msg,wParam,lParam); + } + + static DWORD WINAPI _events_thread(void* arg) { + CImgDisplay *const disp = (CImgDisplay*)(((void**)arg)[0]); + const char *const title = (const char*)(((void**)arg)[1]); + MSG msg; + delete[] (void**)arg; + disp->_bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + disp->_bmi.bmiHeader.biWidth = disp->width(); + disp->_bmi.bmiHeader.biHeight = -disp->height(); + disp->_bmi.bmiHeader.biPlanes = 1; + disp->_bmi.bmiHeader.biBitCount = 32; + disp->_bmi.bmiHeader.biCompression = BI_RGB; + disp->_bmi.bmiHeader.biSizeImage = 0; + disp->_bmi.bmiHeader.biXPelsPerMeter = 1; + disp->_bmi.bmiHeader.biYPelsPerMeter = 1; + disp->_bmi.bmiHeader.biClrUsed = 0; + disp->_bmi.bmiHeader.biClrImportant = 0; + disp->_data = new unsigned int[(size_t)disp->_width*disp->_height]; + if (!disp->_is_fullscreen) { // Normal window + RECT rect; + rect.left = rect.top = 0; rect.right = (LONG)disp->_width - 1; rect.bottom = (LONG)disp->_height - 1; + AdjustWindowRect(&rect,WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,false); + const int + border1 = (int)((rect.right - rect.left + 1 - disp->_width)/2), + border2 = (int)(rect.bottom - rect.top + 1 - disp->_height - border1); + disp->_window = CreateWindowA("MDICLIENT",title?title:" ", + WS_OVERLAPPEDWINDOW | (disp->_is_closed?0:WS_VISIBLE), CW_USEDEFAULT,CW_USEDEFAULT, + disp->_width + 2*border1, disp->_height + border1 + border2, + 0,0,0,&(disp->_ccs)); + if (!disp->_is_closed) { + GetWindowRect(disp->_window,&rect); + disp->_window_x = rect.left + border1; + disp->_window_y = rect.top + border2; + } else disp->_window_x = disp->_window_y = 0; + } else { // Fullscreen window + const unsigned int + sx = (unsigned int)screen_width(), + sy = (unsigned int)screen_height(); + disp->_window = CreateWindowA("MDICLIENT",title?title:" ", + WS_POPUP | (disp->_is_closed?0:WS_VISIBLE), + (sx - disp->_width)/2, + (sy - disp->_height)/2, + disp->_width,disp->_height,0,0,0,&(disp->_ccs)); + disp->_window_x = disp->_window_y = 0; + } + SetForegroundWindow(disp->_window); + disp->_hdc = GetDC(disp->_window); + disp->_window_width = disp->_width; + disp->_window_height = disp->_height; + disp->flush(); +#ifdef _WIN64 + SetWindowLongPtr(disp->_window,GWLP_USERDATA,(LONG_PTR)disp); + SetWindowLongPtr(disp->_window,GWLP_WNDPROC,(LONG_PTR)_handle_events); +#else + SetWindowLong(disp->_window,GWL_USERDATA,(LONG)disp); + SetWindowLong(disp->_window,GWL_WNDPROC,(LONG)_handle_events); +#endif + SetEvent(disp->_is_created); + while (GetMessage(&msg,0,0,0)) DispatchMessage(&msg); + return 0; + } + + CImgDisplay& _update_window_pos() { + if (_is_closed) _window_x = _window_y = -1; + else { + RECT rect; + rect.left = rect.top = 0; rect.right = (LONG)_width - 1; rect.bottom = (LONG)_height - 1; + AdjustWindowRect(&rect,WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,false); + const int + border1 = (int)((rect.right - rect.left + 1 - _width)/2), + border2 = (int)(rect.bottom - rect.top + 1 - _height - border1); + GetWindowRect(_window,&rect); + _window_x = rect.left + border1; + _window_y = rect.top + border2; + } + return *this; + } + + void _init_fullscreen() { + _background_window = 0; + if (!_is_fullscreen || _is_closed) _curr_mode.dmSize = 0; + else { + DEVMODE mode; + unsigned int imode = 0, ibest = 0, bestbpp = 0, bw = ~0U, bh = ~0U; + for (mode.dmSize = sizeof(DEVMODE), mode.dmDriverExtra = 0; EnumDisplaySettings(0,imode,&mode); ++imode) { + const unsigned int nw = mode.dmPelsWidth, nh = mode.dmPelsHeight; + if (nw>=_width && nh>=_height && mode.dmBitsPerPel>=bestbpp && nw<=bw && nh<=bh) { + bestbpp = mode.dmBitsPerPel; + ibest = imode; + bw = nw; bh = nh; + } + } + if (bestbpp) { + _curr_mode.dmSize = sizeof(DEVMODE); _curr_mode.dmDriverExtra = 0; + EnumDisplaySettings(0,ENUM_CURRENT_SETTINGS,&_curr_mode); + EnumDisplaySettings(0,ibest,&mode); + ChangeDisplaySettings(&mode,0); + } else _curr_mode.dmSize = 0; + + const unsigned int + sx = (unsigned int)screen_width(), + sy = (unsigned int)screen_height(); + if (sx!=_width || sy!=_height) { + CLIENTCREATESTRUCT background_ccs; + _background_window = CreateWindowA("MDICLIENT","",WS_POPUP | WS_VISIBLE, 0,0,sx,sy,0,0,0,&background_ccs); + SetForegroundWindow(_background_window); + } + } + } + + void _desinit_fullscreen() { + if (!_is_fullscreen) return; + if (_background_window) DestroyWindow(_background_window); + _background_window = 0; + if (_curr_mode.dmSize) ChangeDisplaySettings(&_curr_mode,0); + _is_fullscreen = false; + } + + CImgDisplay& _assign(const unsigned int dimw, const unsigned int dimh, const char *const ptitle=0, + const unsigned int normalization_type=3, + const bool fullscreen_flag=false, const bool closed_flag=false) { + + // Allocate space for window title + const char *const nptitle = ptitle?ptitle:""; + const unsigned int s = (unsigned int)std::strlen(nptitle) + 1; + char *const tmp_title = s?new char[s]:0; + if (s) std::memcpy(tmp_title,nptitle,s*sizeof(char)); + + // Destroy previous window if existing + if (!is_empty()) assign(); + + // Set display variables + _width = std::min(dimw,(unsigned int)screen_width()); + _height = std::min(dimh,(unsigned int)screen_height()); + _normalization = normalization_type<4?normalization_type:3; + _is_fullscreen = fullscreen_flag; + _window_x = _window_y = 0; + _is_closed = closed_flag; + _is_cursor_visible = true; + _is_mouse_tracked = false; + _title = tmp_title; + flush(); + if (_is_fullscreen) _init_fullscreen(); + + // Create event thread + void *const arg = (void*)(new void*[2]); + ((void**)arg)[0] = (void*)this; + ((void**)arg)[1] = (void*)_title; + _mutex = CreateMutex(0,FALSE,0); + _is_created = CreateEvent(0,FALSE,FALSE,0); + _thread = CreateThread(0,0,_events_thread,arg,0,0); + WaitForSingleObject(_is_created,INFINITE); + return *this; + } + + CImgDisplay& assign() { + if (is_empty()) return flush(); + DestroyWindow(_window); + TerminateThread(_thread,0); + delete[] _data; + delete[] _title; + _data = 0; + _title = 0; + if (_is_fullscreen) _desinit_fullscreen(); + _width = _height = _normalization = _window_width = _window_height = 0; + _window_x = _window_y = 0; + _is_fullscreen = false; + _is_closed = true; + _min = _max = 0; + _title = 0; + flush(); + return *this; + } + + CImgDisplay& assign(const unsigned int dimw, const unsigned int dimh, const char *const title=0, + const unsigned int normalization_type=3, + const bool fullscreen_flag=false, const bool closed_flag=false) { + if (!dimw || !dimh) return assign(); + _assign(dimw,dimh,title,normalization_type,fullscreen_flag,closed_flag); + _min = _max = 0; + std::memset(_data,0,sizeof(unsigned int)*_width*_height); + return paint(); + } + + template + CImgDisplay& assign(const CImg& img, const char *const title=0, + const unsigned int normalization_type=3, + const bool fullscreen_flag=false, const bool closed_flag=false) { + if (!img) return assign(); + CImg tmp; + const CImg& nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width - 1)/2, + (img._height - 1)/2, + (img._depth - 1)/2)); + _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); + if (_normalization==2) _min = (float)nimg.min_max(_max); + return display(nimg); + } + + template + CImgDisplay& assign(const CImgList& list, const char *const title=0, + const unsigned int normalization_type=3, + const bool fullscreen_flag=false, const bool closed_flag=false) { + if (!list) return assign(); + CImg tmp; + const CImg img = list>'x', &nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width - 1)/2, + (img._height - 1)/2, + (img._depth - 1)/2)); + _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); + if (_normalization==2) _min = (float)nimg.min_max(_max); + return display(nimg); + } + + CImgDisplay& assign(const CImgDisplay& disp) { + if (!disp) return assign(); + _assign(disp._width,disp._height,disp._title,disp._normalization,disp._is_fullscreen,disp._is_closed); + std::memcpy(_data,disp._data,sizeof(unsigned int)*_width*_height); + return paint(); + } + + CImgDisplay& resize(const int nwidth, const int nheight, const bool force_redraw=true) { + if (!nwidth || !nheight || (is_empty() && (nwidth<0 || nheight<0))) return assign(); + if (is_empty()) return assign(nwidth,nheight); + const unsigned int + tmpdimx = (nwidth>0)?nwidth:(-nwidth*_width/100), + tmpdimy = (nheight>0)?nheight:(-nheight*_height/100), + dimx = tmpdimx?tmpdimx:1, + dimy = tmpdimy?tmpdimy:1; + if (_width!=dimx || _height!=dimy || _window_width!=dimx || _window_height!=dimy) { + if (_window_width!=dimx || _window_height!=dimy) { + RECT rect; rect.left = rect.top = 0; rect.right = (LONG)dimx - 1; rect.bottom = (LONG)dimy - 1; + AdjustWindowRect(&rect,WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,false); + const int cwidth = rect.right - rect.left + 1, cheight = rect.bottom - rect.top + 1; + SetWindowPos(_window,0,0,0,cwidth,cheight,SWP_NOMOVE | SWP_NOZORDER | SWP_NOCOPYBITS); + } + if (_width!=dimx || _height!=dimy) { + unsigned int *const ndata = new unsigned int[dimx*dimy]; + if (force_redraw) _render_resize(_data,_width,_height,ndata,dimx,dimy); + else std::memset(ndata,0x80,sizeof(unsigned int)*dimx*dimy); + delete[] _data; + _data = ndata; + _bmi.bmiHeader.biWidth = (LONG)dimx; + _bmi.bmiHeader.biHeight = -(int)dimy; + _width = dimx; + _height = dimy; + } + _window_width = dimx; _window_height = dimy; + show(); + } + _is_resized = false; + if (_is_fullscreen) move((screen_width() - width())/2,(screen_height() - height())/2); + if (force_redraw) return paint(); + return *this; + } + + CImgDisplay& toggle_fullscreen(const bool force_redraw=true) { + if (is_empty()) return *this; + if (force_redraw) { + const cimg_ulong buf_size = (cimg_ulong)_width*_height*4; + void *odata = std::malloc(buf_size); + if (odata) { + std::memcpy(odata,_data,buf_size); + assign(_width,_height,_title,_normalization,!_is_fullscreen,false); + std::memcpy(_data,odata,buf_size); + std::free(odata); + } + return paint(); + } + return assign(_width,_height,_title,_normalization,!_is_fullscreen,false); + } + + CImgDisplay& show() { + if (is_empty() || !_is_closed) return *this; + _is_closed = false; + if (_is_fullscreen) _init_fullscreen(); + ShowWindow(_window,SW_SHOW); + _update_window_pos(); + return paint(); + } + + CImgDisplay& close() { + if (is_empty() || _is_closed) return *this; + _is_closed = true; + if (_is_fullscreen) _desinit_fullscreen(); + ShowWindow(_window,SW_HIDE); + _window_x = _window_y = 0; + return *this; + } + + CImgDisplay& move(const int posx, const int posy) { + if (is_empty()) return *this; + if (_window_x!=posx || _window_y!=posy) { + if (!_is_fullscreen) { + RECT rect; + rect.left = rect.top = 0; rect.right = (LONG)_window_width - 1; rect.bottom = (LONG)_window_height - 1; + AdjustWindowRect(&rect,WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,false); + const int + border1 = (int)((rect.right - rect.left + 1 -_width)/2), + border2 = (int)(rect.bottom - rect.top + 1 - _height - border1); + SetWindowPos(_window,0,posx - border1,posy - border2,0,0,SWP_NOSIZE | SWP_NOZORDER); + } else SetWindowPos(_window,0,posx,posy,0,0,SWP_NOSIZE | SWP_NOZORDER); + _window_x = posx; + _window_y = posy; + show(); + } + _is_moved = false; + return *this; + } + + CImgDisplay& show_mouse() { + if (is_empty()) return *this; + _is_cursor_visible = true; + return *this; + } + + CImgDisplay& hide_mouse() { + if (is_empty()) return *this; + _is_cursor_visible = false; + return *this; + } + + CImgDisplay& set_mouse(const int posx, const int posy) { + if (is_empty() || _is_closed || posx<0 || posy<0) return *this; + _update_window_pos(); + const int res = (int)SetCursorPos(_window_x + posx,_window_y + posy); + if (res) { _mouse_x = posx; _mouse_y = posy; } + return *this; + } + + CImgDisplay& set_title(const char *const format, ...) { + if (is_empty()) return *this; + char *const tmp = new char[1024]; + va_list ap; + va_start(ap, format); + cimg_vsnprintf(tmp,1024,format,ap); + va_end(ap); + if (!std::strcmp(_title,tmp)) { delete[] tmp; return *this; } + delete[] _title; + const unsigned int s = (unsigned int)std::strlen(tmp) + 1; + _title = new char[s]; + std::memcpy(_title,tmp,s*sizeof(char)); + SetWindowTextA(_window, tmp); + delete[] tmp; + return *this; + } + + template + CImgDisplay& display(const CImg& img) { + if (!img) + throw CImgArgumentException(_cimgdisplay_instance + "display(): Empty specified image.", + cimgdisplay_instance); + if (is_empty()) return assign(img); + return render(img).paint(); + } + + CImgDisplay& paint() { + if (_is_closed) return *this; + WaitForSingleObject(_mutex,INFINITE); + SetDIBitsToDevice(_hdc,0,0,_width,_height,0,0,0,_height,_data,&_bmi,DIB_RGB_COLORS); + ReleaseMutex(_mutex); + return *this; + } + + template + CImgDisplay& render(const CImg& img) { + if (!img) + throw CImgArgumentException(_cimgdisplay_instance + "render(): Empty specified image.", + cimgdisplay_instance); + + if (is_empty()) return *this; + if (img._depth!=1) return render(img.get_projections2d((img._width - 1)/2,(img._height - 1)/2, + (img._depth - 1)/2)); + + const T + *data1 = img._data, + *data2 = (img._spectrum>=2)?img.data(0,0,0,1):data1, + *data3 = (img._spectrum>=3)?img.data(0,0,0,2):data1; + + WaitForSingleObject(_mutex,INFINITE); + unsigned int + *const ndata = (img._width==_width && img._height==_height)?_data: + new unsigned int[(size_t)img._width*img._height], + *ptrd = ndata; + + if (!_normalization || (_normalization==3 && cimg::type::string()==cimg::type::string())) { + _min = _max = 0; + switch (img._spectrum) { + case 1 : { + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char val = (unsigned char)*(data1++); + *(ptrd++) = (unsigned int)((val<<16) | (val<<8) | val); + } + } break; + case 2 : { + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char + R = (unsigned char)*(data1++), + G = (unsigned char)*(data2++); + *(ptrd++) = (unsigned int)((R<<16) | (G<<8)); + } + } break; + default : { + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char + R = (unsigned char)*(data1++), + G = (unsigned char)*(data2++), + B = (unsigned char)*(data3++); + *(ptrd++) = (unsigned int)((R<<16) | (G<<8) | B); + } + } + } + } else { + if (_normalization==3) { + if (cimg::type::is_float()) _min = (float)img.min_max(_max); + else { _min = (float)cimg::type::min(); _max = (float)cimg::type::max(); } + } else if ((_min>_max) || _normalization==1) _min = (float)img.min_max(_max); + const float delta = _max - _min, mm = 255/(delta?delta:1.0f); + switch (img._spectrum) { + case 1 : { + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm); + *(ptrd++) = (unsigned int)((val<<16) | (val<<8) | val); + } + } break; + case 2 : { + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char + R = (unsigned char)((*(data1++) - _min)*mm), + G = (unsigned char)((*(data2++) - _min)*mm); + *(ptrd++) = (unsigned int)((R<<16) | (G<<8)); + } + } break; + default : { + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned char + R = (unsigned char)((*(data1++) - _min)*mm), + G = (unsigned char)((*(data2++) - _min)*mm), + B = (unsigned char)((*(data3++) - _min)*mm); + *(ptrd++) = (unsigned int)((R<<16) | (G<<8) | B); + } + } + } + } + if (ndata!=_data) { _render_resize(ndata,img._width,img._height,_data,_width,_height); delete[] ndata; } + ReleaseMutex(_mutex); + return *this; + } + + template + static void screenshot(const int x0, const int y0, const int x1, const int y1, CImg& img) { + img.assign(); + HDC hScreen = GetDC(GetDesktopWindow()); + if (hScreen) { + const int + width = GetDeviceCaps(hScreen,HORZRES), + height = GetDeviceCaps(hScreen,VERTRES); + int _x0 = x0, _y0 = y0, _x1 = x1, _y1 = y1; + if (_x0>_x1) cimg::swap(_x0,_x1); + if (_y0>_y1) cimg::swap(_y0,_y1); + if (_x1>=0 && _x0=0 && _y0 + const CImgDisplay& snapshot(CImg& img) const { + if (is_empty()) { img.assign(); return *this; } + const unsigned int *ptrs = _data; + img.assign(_width,_height,1,3); + T + *data1 = img.data(0,0,0,0), + *data2 = img.data(0,0,0,1), + *data3 = img.data(0,0,0,2); + for (cimg_ulong xy = (cimg_ulong)img._width*img._height; xy>0; --xy) { + const unsigned int val = *(ptrs++); + *(data1++) = (T)(unsigned char)(val>>16); + *(data2++) = (T)(unsigned char)((val>>8)&0xFF); + *(data3++) = (T)(unsigned char)(val&0xFF); + } + return *this; + } +#endif + + //@} + }; + + /* + #-------------------------------------- + # + # + # + # Definition of the CImg structure + # + # + # + #-------------------------------------- + */ + + //! Class representing an image (up to 4 dimensions wide), each pixel being of type \c T. + /** + This is the main class of the %CImg Library. It declares and constructs + an image, allows access to its pixel values, and is able to perform various image operations. + + \par Image representation + + A %CImg image is defined as an instance of the container \c CImg, which contains a regular grid of pixels, + each pixel value being of type \c T. The image grid can have up to 4 dimensions: width, height, depth + and number of channels. + Usually, the three first dimensions are used to describe spatial coordinates (x,y,z), + while the number of channels is rather used as a vector-valued dimension + (it may describe the R,G,B color channels for instance). + If you need a fifth dimension, you can use image lists \c CImgList rather than simple images \c CImg. + + Thus, the \c CImg class is able to represent volumetric images of vector-valued pixels, + as well as images with less dimensions (1d scalar signal, 2d color images, ...). + Most member functions of the class CImg<\c T> are designed to handle this maximum case of (3+1) dimensions. + + Concerning the pixel value type \c T: + fully supported template types are the basic C++ types: unsigned char, char, short, unsigned int, int, + unsigned long, long, float, double, ... . + Typically, fast image display can be done using CImg images, + while complex image processing algorithms may be rather coded using CImg or CImg + images that have floating-point pixel values. The default value for the template T is \c float. + Using your own template types may be possible. However, you will certainly have to define the complete set + of arithmetic and logical operators for your class. + + \par Image structure + + The \c CImg structure contains \e six fields: + - \c _width defines the number of \a columns of the image (size along the X-axis). + - \c _height defines the number of \a rows of the image (size along the Y-axis). + - \c _depth defines the number of \a slices of the image (size along the Z-axis). + - \c _spectrum defines the number of \a channels of the image (size along the C-axis). + - \c _data defines a \a pointer to the \a pixel \a data (of type \c T). + - \c _is_shared is a boolean that tells if the memory buffer \c data is shared with + another image. + + You can access these fields publicly although it is recommended to use the dedicated functions + width(), height(), depth(), spectrum() and ptr() to do so. + Image dimensions are not limited to a specific range (as long as you got enough available memory). + A value of \e 1 usually means that the corresponding dimension is \a flat. + If one of the dimensions is \e 0, or if the data pointer is null, the image is considered as \e empty. + Empty images should not contain any pixel data and thus, will not be processed by CImg member functions + (a CImgInstanceException will be thrown instead). + Pixel data are stored in memory, in a non interlaced mode (See \ref cimg_storage). + + \par Image declaration and construction + + Declaring an image can be done by using one of the several available constructors. + Here is a list of the most used: + + - Construct images from arbitrary dimensions: + - CImg img; declares an empty image. + - CImg img(128,128); declares a 128x128 greyscale image with + \c unsigned \c char pixel values. + - CImg img(3,3); declares a 3x3 matrix with \c double coefficients. + - CImg img(256,256,1,3); declares a 256x256x1x3 (color) image + (colors are stored as an image with three channels). + - CImg img(128,128,128); declares a 128x128x128 volumetric and greyscale image + (with \c double pixel values). + - CImg<> img(128,128,128,3); declares a 128x128x128 volumetric color image + (with \c float pixels, which is the default value of the template parameter \c T). + - \b Note: images pixels are not automatically initialized to 0. You may use the function \c fill() to + do it, or use the specific constructor taking 5 parameters like this: + CImg<> img(128,128,128,3,0); declares a 128x128x128 volumetric color image with all pixel values to 0. + + - Construct images from filenames: + - CImg img("image.jpg"); reads a JPEG color image from the file "image.jpg". + - CImg img("analyze.hdr"); reads a volumetric image (ANALYZE7.5 format) from the + file "analyze.hdr". + - \b Note: You need to install ImageMagick + to be able to read common compressed image formats (JPG,PNG, ...) (See \ref cimg_files_io). + + - Construct images from C-style arrays: + - CImg img(data_buffer,256,256); constructs a 256x256 greyscale image from a \c int* buffer + \c data_buffer (of size 256x256=65536). + - CImg img(data_buffer,256,256,1,3); constructs a 256x256 color image + from a \c unsigned \c char* buffer \c data_buffer (where R,G,B channels follow each others). + + The complete list of constructors can be found here. + + \par Most useful functions + + The \c CImg class contains a lot of functions that operates on images. + Some of the most useful are: + + - operator()(): Read or write pixel values. + - display(): displays the image in a new window. + **/ + template + struct CImg { + + unsigned int _width, _height, _depth, _spectrum; + bool _is_shared; + T *_data; + + //! Simple iterator type, to loop through each pixel value of an image instance. + /** + \note + - The \c CImg::iterator type is defined to be a T*. + - You will seldom have to use iterators in %CImg, most classical operations + being achieved (often in a faster way) using methods of \c CImg. + \par Example + \code + CImg img("reference.jpg"); // Load image from file. + // Set all pixels to '0', with a CImg iterator. + for (CImg::iterator it = img.begin(), it::const_iterator type is defined to be a \c const \c T*. + - You will seldom have to use iterators in %CImg, most classical operations + being achieved (often in a faster way) using methods of \c CImg. + \par Example + \code + const CImg img("reference.jpg"); // Load image from file. + float sum = 0; + // Compute sum of all pixel values, with a CImg iterator. + for (CImg::iterator it = img.begin(), it::value_type type of a \c CImg is defined to be a \c T. + - \c CImg::value_type is actually not used in %CImg methods. It has been mainly defined for + compatibility with STL naming conventions. + **/ + typedef T value_type; + + // Define common types related to template type T. + typedef typename cimg::superset::type Tbool; + typedef typename cimg::superset::type Tuchar; + typedef typename cimg::superset::type Tchar; + typedef typename cimg::superset::type Tushort; + typedef typename cimg::superset::type Tshort; + typedef typename cimg::superset::type Tuint; + typedef typename cimg::superset::type Tint; + typedef typename cimg::superset::type Tulong; + typedef typename cimg::superset::type Tlong; + typedef typename cimg::superset::type Tfloat; + typedef typename cimg::superset::type Tdouble; + typedef typename cimg::last::type boolT; + typedef typename cimg::last::type ucharT; + typedef typename cimg::last::type charT; + typedef typename cimg::last::type ushortT; + typedef typename cimg::last::type shortT; + typedef typename cimg::last::type uintT; + typedef typename cimg::last::type intT; + typedef typename cimg::last::type ulongT; + typedef typename cimg::last::type longT; + typedef typename cimg::last::type uint64T; + typedef typename cimg::last::type int64T; + typedef typename cimg::last::type floatT; + typedef typename cimg::last::type doubleT; + + //@} + //--------------------------- + // + //! \name Plugins + //@{ + //--------------------------- +#ifdef cimg_plugin +#include cimg_plugin +#endif +#ifdef cimg_plugin1 +#include cimg_plugin1 +#endif +#ifdef cimg_plugin2 +#include cimg_plugin2 +#endif +#ifdef cimg_plugin3 +#include cimg_plugin3 +#endif +#ifdef cimg_plugin4 +#include cimg_plugin4 +#endif +#ifdef cimg_plugin5 +#include cimg_plugin5 +#endif +#ifdef cimg_plugin6 +#include cimg_plugin6 +#endif +#ifdef cimg_plugin7 +#include cimg_plugin7 +#endif +#ifdef cimg_plugin8 +#include cimg_plugin8 +#endif + + //@} + //--------------------------------------------------------- + // + //! \name Constructors / Destructor / Instance Management + //@{ + //--------------------------------------------------------- + + //! Destroy image. + /** + \note + - The pixel buffer data() is deallocated if necessary, e.g. for non-empty and non-shared image instances. + - Destroying an empty or shared image does nothing actually. + \warning + - When destroying a non-shared image, make sure that you will \e not operate on a remaining shared image + that shares its buffer with the destroyed instance, in order to avoid further invalid memory access + (to a deallocated buffer). + **/ + ~CImg() { + if (!_is_shared) delete[] _data; + } + + //! Construct empty image. + /** + \note + - An empty image has no pixel data and all of its dimensions width(), height(), depth(), spectrum() + are set to \c 0, as well as its pixel buffer pointer data(). + - An empty image may be re-assigned afterwards, e.g. with the family of + assign(unsigned int,unsigned int,unsigned int,unsigned int) methods, + or by operator=(const CImg&). In all cases, the type of pixels stays \c T. + - An empty image is never shared. + \par Example + \code + CImg img1, img2; // Construct two empty images. + img1.assign(256,256,1,3); // Re-assign 'img1' to be a 256x256x1x3 (color) image. + img2 = img1.get_rand(0,255); // Re-assign 'img2' to be a random-valued version of 'img1'. + img2.assign(); // Re-assign 'img2' to be an empty image again. + \endcode + **/ + CImg():_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) {} + + //! Construct image with specified size. + /** + \param size_x Image width(). + \param size_y Image height(). + \param size_z Image depth(). + \param size_c Image spectrum() (number of channels). + \note + - It is able to create only \e non-shared images, and allocates thus a pixel buffer data() + for each constructed image instance. + - Setting one dimension \c size_x,\c size_y,\c size_z or \c size_c to \c 0 leads to the construction of + an \e empty image. + - A \c CImgInstanceException is thrown when the pixel buffer cannot be allocated + (e.g. when requested size is too big for available memory). + \warning + - The allocated pixel buffer is \e not filled with a default value, and is likely to contain garbage values. + In order to initialize pixel values during construction (e.g. with \c 0), use constructor + CImg(unsigned int,unsigned int,unsigned int,unsigned int,T) instead. + \par Example + \code + CImg img1(256,256,1,3); // Construct a 256x256x1x3 (color) image, filled with garbage values. + CImg img2(256,256,1,3,0); // Construct a 256x256x1x3 (color) image, filled with value '0'. + \endcode + **/ + explicit CImg(const unsigned int size_x, const unsigned int size_y=1, + const unsigned int size_z=1, const unsigned int size_c=1): + _is_shared(false) { + size_t siz = (size_t)size_x*size_y*size_z*size_c; + if (siz) { + _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; + try { _data = new T[siz]; } catch (...) { + _width = _height = _depth = _spectrum = 0; _data = 0; + throw CImgInstanceException(_cimg_instance + "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", + cimg_instance, + cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c), + size_x,size_y,size_z,size_c); + } + } else { _width = _height = _depth = _spectrum = 0; _data = 0; } + } + + //! Construct image with specified size and initialize pixel values. + /** + \param size_x Image width(). + \param size_y Image height(). + \param size_z Image depth(). + \param size_c Image spectrum() (number of channels). + \param value Initialization value. + \note + - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int), + but it also fills the pixel buffer with the specified \c value. + \warning + - It cannot be used to construct a vector-valued image and initialize it with \e vector-valued pixels + (e.g. RGB vector, for color images). + For this task, you may use fillC() after construction. + **/ + CImg(const unsigned int size_x, const unsigned int size_y, + const unsigned int size_z, const unsigned int size_c, const T& value): + _is_shared(false) { + const size_t siz = (size_t)size_x*size_y*size_z*size_c; + if (siz) { + _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; + try { _data = new T[siz]; } catch (...) { + _width = _height = _depth = _spectrum = 0; _data = 0; + throw CImgInstanceException(_cimg_instance + "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", + cimg_instance, + cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c), + size_x,size_y,size_z,size_c); + } + fill(value); + } else { _width = _height = _depth = _spectrum = 0; _data = 0; } + } + + //! Construct image with specified size and initialize pixel values from a sequence of integers. + /** + Construct a new image instance of size \c size_x x \c size_y x \c size_z x \c size_c, + with pixels of type \c T, and initialize pixel + values from the specified sequence of integers \c value0,\c value1,\c ... + \param size_x Image width(). + \param size_y Image height(). + \param size_z Image depth(). + \param size_c Image spectrum() (number of channels). + \param value0 First value of the initialization sequence (must be an \e integer). + \param value1 Second value of the initialization sequence (must be an \e integer). + \param ... + \note + - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int), but it also fills + the pixel buffer with a sequence of specified integer values. + \warning + - You must specify \e exactly \c size_x*\c size_y*\c size_z*\c size_c integers in the initialization sequence. + Otherwise, the constructor may crash or fill your image pixels with garbage. + \par Example + \code + const CImg img(2,2,1,3, // Construct a 2x2 color (RGB) image. + 0,255,0,255, // Set the 4 values for the red component. + 0,0,255,255, // Set the 4 values for the green component. + 64,64,64,64); // Set the 4 values for the blue component. + img.resize(150,150).display(); + \endcode + \image html ref_constructor1.jpg + **/ + CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, + const int value0, const int value1, ...): + _width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { +#define _CImg_stdarg(img,a0,a1,N,t) { \ + size_t _siz = (size_t)N; \ + if (_siz--) { \ + va_list ap; \ + va_start(ap,a1); \ + T *ptrd = (img)._data; \ + *(ptrd++) = (T)a0; \ + if (_siz--) { \ + *(ptrd++) = (T)a1; \ + for ( ; _siz; --_siz) *(ptrd++) = (T)va_arg(ap,t); \ + } \ + va_end(ap); \ + } \ + } + assign(size_x,size_y,size_z,size_c); + _CImg_stdarg(*this,value0,value1,(size_t)size_x*size_y*size_z*size_c,int); + } + +#if cimg_use_cpp11==1 + //! Construct image with specified size and initialize pixel values from an initializer list of integers. + /** + Construct a new image instance of size \c size_x x \c size_y x \c size_z x \c size_c, + with pixels of type \c T, and initialize pixel + values from the specified initializer list of integers { \c value0,\c value1,\c ... } + \param size_x Image width(). + \param size_y Image height(). + \param size_z Image depth(). + \param size_c Image spectrum() (number of channels). + \param { value0, value1, ... } Initialization list + \param repeat_values Tells if the value filling process is repeated over the image. + + \note + - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int), but it also fills + the pixel buffer with a sequence of specified integer values. + \par Example + \code + const CImg img(2,2,1,3, // Construct a 2x2 color (RGB) image. + { 0,255,0,255, // Set the 4 values for the red component. + 0,0,255,255, // Set the 4 values for the green component. + 64,64,64,64 }); // Set the 4 values for the blue component. + img.resize(150,150).display(); + \endcode + \image html ref_constructor1.jpg + **/ + template + CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, + const std::initializer_list values, + const bool repeat_values=true): + _width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { +#define _cimg_constructor_cpp11(repeat_values) \ + auto it = values.begin(); \ + size_t siz = size(); \ + if (repeat_values) for (T *ptrd = _data; siz--; ) { \ + *(ptrd++) = (T)(*(it++)); if (it==values.end()) it = values.begin(); } \ + else { siz = std::min(siz,values.size()); for (T *ptrd = _data; siz--; ) *(ptrd++) = (T)(*(it++)); } + assign(size_x,size_y,size_z,size_c); + _cimg_constructor_cpp11(repeat_values); + } + + template + CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, + std::initializer_list values, + const bool repeat_values=true): + _width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { + assign(size_x,size_y,size_z); + _cimg_constructor_cpp11(repeat_values); + } + + template + CImg(const unsigned int size_x, const unsigned int size_y, + std::initializer_list values, + const bool repeat_values=true): + _width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { + assign(size_x,size_y); + _cimg_constructor_cpp11(repeat_values); + } + + template + CImg(const unsigned int size_x, + std::initializer_list values, + const bool repeat_values=true):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { + assign(size_x); + _cimg_constructor_cpp11(repeat_values); + } + + //! Construct single channel 1D image with pixel values and width obtained from an initializer list of integers. + /** + Construct a new image instance of size \c width x \c 1 x \c 1 x \c 1, + with pixels of type \c T, and initialize pixel + values from the specified initializer list of integers { \c value0,\c value1,\c ... }. Image width is + given by the size of the initializer list. + \param { value0, value1, ... } Initialization list + \note + - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int) with height=1, depth=1, and spectrum=1, + but it also fills the pixel buffer with a sequence of specified integer values. + \par Example + \code + const CImg img = {10,20,30,20,10 }; // Construct a 5x1 image with one channel, and set its pixel values. + img.resize(150,150).display(); + \endcode + \image html ref_constructor1.jpg + **/ + template + CImg(const std::initializer_list values): + _width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { + assign(values.size(),1,1,1); + auto it = values.begin(); + unsigned int siz = _width; + for (T *ptrd = _data; siz--; ) *(ptrd++) = (T)(*(it++)); + } + + template + CImg & operator=(std::initializer_list values) { + _cimg_constructor_cpp11(siz>values.size()); + return *this; + } +#endif + + //! Construct image with specified size and initialize pixel values from a sequence of doubles. + /** + Construct a new image instance of size \c size_x x \c size_y x \c size_z x \c size_c, with pixels of type \c T, + and initialize pixel values from the specified sequence of doubles \c value0,\c value1,\c ... + \param size_x Image width(). + \param size_y Image height(). + \param size_z Image depth(). + \param size_c Image spectrum() (number of channels). + \param value0 First value of the initialization sequence (must be a \e double). + \param value1 Second value of the initialization sequence (must be a \e double). + \param ... + \note + - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int,int,int,...), but + takes a sequence of double values instead of integers. + \warning + - You must specify \e exactly \c dx*\c dy*\c dz*\c dc doubles in the initialization sequence. + Otherwise, the constructor may crash or fill your image with garbage. + For instance, the code below will probably crash on most platforms: + \code + const CImg img(2,2,1,1, 0.5,0.5,255,255); // FAIL: The two last arguments are 'int', not 'double'! + \endcode + **/ + CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, + const double value0, const double value1, ...): + _width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { + assign(size_x,size_y,size_z,size_c); + _CImg_stdarg(*this,value0,value1,(size_t)size_x*size_y*size_z*size_c,double); + } + + //! Construct image with specified size and initialize pixel values from a value string. + /** + Construct a new image instance of size \c size_x x \c size_y x \c size_z x \c size_c, with pixels of type \c T, + and initializes pixel values from the specified string \c values. + \param size_x Image width(). + \param size_y Image height(). + \param size_z Image depth(). + \param size_c Image spectrum() (number of channels). + \param values Value string describing the way pixel values are set. + \param repeat_values Tells if the value filling process is repeated over the image. + \note + - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int), but it also fills + the pixel buffer with values described in the value string \c values. + - Value string \c values may describe two different filling processes: + - Either \c values is a sequences of values assigned to the image pixels, as in "1,2,3,7,8,2". + In this case, set \c repeat_values to \c true to periodically fill the image with the value sequence. + - Either, \c values is a formula, as in "cos(x/10)*sin(y/20)". + In this case, parameter \c repeat_values is pointless. + - For both cases, specifying \c repeat_values is mandatory. + It disambiguates the possible overloading of constructor + CImg(unsigned int,unsigned int,unsigned int,unsigned int,T) with \c T being a const char*. + - A \c CImgArgumentException is thrown when an invalid value string \c values is specified. + \par Example + \code + const CImg img1(129,129,1,3,"0,64,128,192,255",true), // Construct image from a value sequence. + img2(129,129,1,3,"if(c==0,255*abs(cos(x/10)),1.8*y)",false); // Construct image from a formula. + (img1,img2).display(); + \endcode + \image html ref_constructor2.jpg + **/ + CImg(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z, const unsigned int size_c, + const char *const values, const bool repeat_values):_is_shared(false) { + const size_t siz = (size_t)size_x*size_y*size_z*size_c; + if (siz) { + _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; + try { _data = new T[siz]; } catch (...) { + _width = _height = _depth = _spectrum = 0; _data = 0; + throw CImgInstanceException(_cimg_instance + "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", + cimg_instance, + cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c), + size_x,size_y,size_z,size_c); + } + fill(values,repeat_values); + } else { _width = _height = _depth = _spectrum = 0; _data = 0; } + } + + //! Construct image with specified size and initialize pixel values from a memory buffer. + /** + Construct a new image instance of size \c size_x x \c size_y x \c size_z x \c size_c, with pixels of type \c T, + and initializes pixel values from the specified \c t* memory buffer. + \param values Pointer to the input memory buffer. + \param size_x Image width(). + \param size_y Image height(). + \param size_z Image depth(). + \param size_c Image spectrum() (number of channels). + \param is_shared Tells if input memory buffer must be shared by the current instance. + \note + - If \c is_shared is \c false, the image instance allocates its own pixel buffer, + and values from the specified input buffer are copied to the instance buffer. + If buffer types \c T and \c t are different, a regular static cast is performed during buffer copy. + - Otherwise, the image instance does \e not allocate a new buffer, and uses the input memory buffer as its + own pixel buffer. This case requires that types \c T and \c t are the same. Later, destroying such a shared + image will not deallocate the pixel buffer, this task being obviously charged to the initial buffer allocator. + - A \c CImgInstanceException is thrown when the pixel buffer cannot be allocated + (e.g. when requested size is too big for available memory). + \warning + - You must take care when operating on a shared image, since it may have an invalid pixel buffer pointer data() + (e.g. already deallocated). + \par Example + \code + unsigned char tab[256*256] = { 0 }; + CImg img1(tab,256,256,1,1,false), // Construct new non-shared image from buffer 'tab'. + img2(tab,256,256,1,1,true); // Construct new shared-image from buffer 'tab'. + tab[1024] = 255; // Here, 'img2' is indirectly modified, but not 'img1'. + \endcode + **/ + template + CImg(const t *const values, const unsigned int size_x, const unsigned int size_y=1, + const unsigned int size_z=1, const unsigned int size_c=1, const bool is_shared=false):_is_shared(false) { + if (is_shared) { + _width = _height = _depth = _spectrum = 0; _data = 0; + throw CImgArgumentException(_cimg_instance + "CImg(): Invalid construction request of a (%u,%u,%u,%u) shared instance " + "from a (%s*) buffer (pixel types are different).", + cimg_instance, + size_x,size_y,size_z,size_c,CImg::pixel_type()); + } + const size_t siz = (size_t)size_x*size_y*size_z*size_c; + if (values && siz) { + _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; + try { _data = new T[siz]; } catch (...) { + _width = _height = _depth = _spectrum = 0; _data = 0; + throw CImgInstanceException(_cimg_instance + "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", + cimg_instance, + cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c), + size_x,size_y,size_z,size_c); + + } + const t *ptrs = values; cimg_for(*this,ptrd,T) *ptrd = (T)*(ptrs++); + } else { _width = _height = _depth = _spectrum = 0; _data = 0; } + } + + //! Construct image with specified size and initialize pixel values from a memory buffer \specialization. + CImg(const T *const values, const unsigned int size_x, const unsigned int size_y=1, + const unsigned int size_z=1, const unsigned int size_c=1, const bool is_shared=false) { + const size_t siz = (size_t)size_x*size_y*size_z*size_c; + if (values && siz) { + _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; _is_shared = is_shared; + if (_is_shared) _data = const_cast(values); + else { + try { _data = new T[siz]; } catch (...) { + _width = _height = _depth = _spectrum = 0; _data = 0; + throw CImgInstanceException(_cimg_instance + "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", + cimg_instance, + cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c), + size_x,size_y,size_z,size_c); + } + std::memcpy(_data,values,siz*sizeof(T)); + } + } else { _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; } + } + + //! Construct image from reading an image file. + /** + Construct a new image instance with pixels of type \c T, and initialize pixel values with the data read from + an image file. + \param filename Filename, as a C-string. + \note + - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int), but it reads the image + dimensions and pixel values from the specified image file. + - The recognition of the image file format by %CImg higly depends on the tools installed on your system + and on the external libraries you used to link your code against. + - Considered pixel type \c T should better fit the file format specification, or data loss may occur during + file load (e.g. constructing a \c CImg from a float-valued image file). + - A \c CImgIOException is thrown when the specified \c filename cannot be read, or if the file format is not + recognized. + \par Example + \code + const CImg img("reference.jpg"); + img.display(); + \endcode + \image html ref_image.jpg + **/ + explicit CImg(const char *const filename):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { + assign(filename); + } + + //! Construct image copy. + /** + Construct a new image instance with pixels of type \c T, as a copy of an existing \c CImg instance. + \param img Input image to copy. + \note + - Constructed copy has the same size width() x height() x depth() x spectrum() and pixel values as the + input image \c img. + - If input image \c img is \e shared and if types \c T and \c t are the same, the constructed copy is also + \e shared, and shares its pixel buffer with \c img. + Modifying a pixel value in the constructed copy will thus also modifies it in the input image \c img. + This behavior is needful to allow functions to return shared images. + - Otherwise, the constructed copy allocates its own pixel buffer, and copies pixel values from the input + image \c img into its buffer. The copied pixel values may be eventually statically casted if types \c T and + \c t are different. + - Constructing a copy from an image \c img when types \c t and \c T are the same is significantly faster than + with different types. + - A \c CImgInstanceException is thrown when the pixel buffer cannot be allocated + (e.g. not enough available memory). + **/ + template + CImg(const CImg& img):_is_shared(false) { + const size_t siz = (size_t)img.size(); + if (img._data && siz) { + _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; + try { _data = new T[siz]; } catch (...) { + _width = _height = _depth = _spectrum = 0; _data = 0; + throw CImgInstanceException(_cimg_instance + "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", + cimg_instance, + cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), + img._width,img._height,img._depth,img._spectrum); + } + const t *ptrs = img._data; cimg_for(*this,ptrd,T) *ptrd = (T)*(ptrs++); + } else { _width = _height = _depth = _spectrum = 0; _data = 0; } + } + + //! Construct image copy \specialization. + CImg(const CImg& img) { + const size_t siz = (size_t)img.size(); + if (img._data && siz) { + _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; + _is_shared = img._is_shared; + if (_is_shared) _data = const_cast(img._data); + else { + try { _data = new T[siz]; } catch (...) { + _width = _height = _depth = _spectrum = 0; _data = 0; + throw CImgInstanceException(_cimg_instance + "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", + cimg_instance, + cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), + img._width,img._height,img._depth,img._spectrum); + + } + std::memcpy(_data,img._data,siz*sizeof(T)); + } + } else { _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; } + } + + //! Advanced copy constructor. + /** + Construct a new image instance with pixels of type \c T, as a copy of an existing \c CImg instance, + while forcing the shared state of the constructed copy. + \param img Input image to copy. + \param is_shared Tells about the shared state of the constructed copy. + \note + - Similar to CImg(const CImg&), except that it allows to decide the shared state of + the constructed image, which does not depend anymore on the shared state of the input image \c img: + - If \c is_shared is \c true, the constructed copy will share its pixel buffer with the input image \c img. + For that case, the pixel types \c T and \c t \e must be the same. + - If \c is_shared is \c false, the constructed copy will allocate its own pixel buffer, whether the input + image \c img is shared or not. + - A \c CImgArgumentException is thrown when a shared copy is requested with different pixel types \c T and \c t. + **/ + template + CImg(const CImg& img, const bool is_shared):_is_shared(false) { + if (is_shared) { + _width = _height = _depth = _spectrum = 0; _data = 0; + throw CImgArgumentException(_cimg_instance + "CImg(): Invalid construction request of a shared instance from a " + "CImg<%s> image (%u,%u,%u,%u,%p) (pixel types are different).", + cimg_instance, + CImg::pixel_type(),img._width,img._height,img._depth,img._spectrum,img._data); + } + const size_t siz = (size_t)img.size(); + if (img._data && siz) { + _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; + try { _data = new T[siz]; } catch (...) { + _width = _height = _depth = _spectrum = 0; _data = 0; + throw CImgInstanceException(_cimg_instance + "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", + cimg_instance, + cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), + img._width,img._height,img._depth,img._spectrum); + } + const t *ptrs = img._data; cimg_for(*this,ptrd,T) *ptrd = (T)*(ptrs++); + } else { _width = _height = _depth = _spectrum = 0; _data = 0; } + } + + //! Advanced copy constructor \specialization. + CImg(const CImg& img, const bool is_shared) { + const size_t siz = (size_t)img.size(); + if (img._data && siz) { + _width = img._width; _height = img._height; _depth = img._depth; _spectrum = img._spectrum; + _is_shared = is_shared; + if (_is_shared) _data = const_cast(img._data); + else { + try { _data = new T[siz]; } catch (...) { + _width = _height = _depth = _spectrum = 0; _data = 0; + throw CImgInstanceException(_cimg_instance + "CImg(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", + cimg_instance, + cimg::strbuffersize(sizeof(T)*img._width*img._height*img._depth*img._spectrum), + img._width,img._height,img._depth,img._spectrum); + } + std::memcpy(_data,img._data,siz*sizeof(T)); + } + } else { _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; } + } + + //! Construct image with dimensions borrowed from another image. + /** + Construct a new image instance with pixels of type \c T, and size get from some dimensions of an existing + \c CImg instance. + \param img Input image from which dimensions are borrowed. + \param dimensions C-string describing the image size along the X,Y,Z and C-dimensions. + \note + - Similar to CImg(unsigned int,unsigned int,unsigned int,unsigned int), but it takes the image dimensions + (\e not its pixel values) from an existing \c CImg instance. + - The allocated pixel buffer is \e not filled with a default value, and is likely to contain garbage values. + In order to initialize pixel values (e.g. with \c 0), use constructor CImg(const CImg&,const char*,T) + instead. + \par Example + \code + const CImg img1(256,128,1,3), // 'img1' is a 256x128x1x3 image. + img2(img1,"xyzc"), // 'img2' is a 256x128x1x3 image. + img3(img1,"y,x,z,c"), // 'img3' is a 128x256x1x3 image. + img4(img1,"c,x,y,3",0), // 'img4' is a 3x128x256x3 image (with pixels initialized to '0'). + \endcode + **/ + template + CImg(const CImg& img, const char *const dimensions): + _width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { + assign(img,dimensions); + } + + //! Construct image with dimensions borrowed from another image and initialize pixel values. + /** + Construct a new image instance with pixels of type \c T, and size get from the dimensions of an existing + \c CImg instance, and set all pixel values to specified \c value. + \param img Input image from which dimensions are borrowed. + \param dimensions String describing the image size along the X,Y,Z and V-dimensions. + \param value Value used for initialization. + \note + - Similar to CImg(const CImg&,const char*), but it also fills the pixel buffer with the specified \c value. + **/ + template + CImg(const CImg& img, const char *const dimensions, const T& value): + _width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { + assign(img,dimensions).fill(value); + } + + //! Construct image from a display window. + /** + Construct a new image instance with pixels of type \c T, as a snapshot of an existing \c CImgDisplay instance. + \param disp Input display window. + \note + - The width() and height() of the constructed image instance are the same as the specified \c CImgDisplay. + - The depth() and spectrum() of the constructed image instance are respectively set to \c 1 and \c 3 + (i.e. a 2d color image). + - The image pixels are read as 8-bits RGB values. + **/ + explicit CImg(const CImgDisplay &disp):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { + disp.snapshot(*this); + } + + // Constructor and assignment operator for rvalue references (c++11). + // This avoids an additional image copy for methods returning new images. Can save RAM for big images ! +#if cimg_use_cpp11==1 + CImg(CImg&& img):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { + swap(img); + } + CImg& operator=(CImg&& img) { + if (_is_shared) return assign(img); + return img.swap(*this); + } +#endif + + //! Construct empty image \inplace. + /** + In-place version of the default constructor CImg(). It simply resets the instance to an empty image. + **/ + CImg& assign() { + if (!_is_shared) delete[] _data; + _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; + return *this; + } + + //! Construct image with specified size \inplace. + /** + In-place version of the constructor CImg(unsigned int,unsigned int,unsigned int,unsigned int). + **/ + CImg& assign(const unsigned int size_x, const unsigned int size_y=1, + const unsigned int size_z=1, const unsigned int size_c=1) { + const size_t siz = (size_t)size_x*size_y*size_z*size_c; + if (!siz) return assign(); + const size_t curr_siz = (size_t)size(); + if (siz!=curr_siz) { + if (_is_shared) + throw CImgArgumentException(_cimg_instance + "assign(): Invalid assignement request of shared instance from specified " + "image (%u,%u,%u,%u).", + cimg_instance, + size_x,size_y,size_z,size_c); + else { + delete[] _data; + try { _data = new T[siz]; } catch (...) { + _width = _height = _depth = _spectrum = 0; _data = 0; + throw CImgInstanceException(_cimg_instance + "assign(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", + cimg_instance, + cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c), + size_x,size_y,size_z,size_c); + } + } + } + _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; + return *this; + } + + //! Construct image with specified size and initialize pixel values \inplace. + /** + In-place version of the constructor CImg(unsigned int,unsigned int,unsigned int,unsigned int,T). + **/ + CImg& assign(const unsigned int size_x, const unsigned int size_y, + const unsigned int size_z, const unsigned int size_c, const T& value) { + return assign(size_x,size_y,size_z,size_c).fill(value); + } + + //! Construct image with specified size and initialize pixel values from a sequence of integers \inplace. + /** + In-place version of the constructor CImg(unsigned int,unsigned int,unsigned int,unsigned int,int,int,...). + **/ + CImg& assign(const unsigned int size_x, const unsigned int size_y, + const unsigned int size_z, const unsigned int size_c, + const int value0, const int value1, ...) { + assign(size_x,size_y,size_z,size_c); + _CImg_stdarg(*this,value0,value1,(size_t)size_x*size_y*size_z*size_c,int); + return *this; + } + + //! Construct image with specified size and initialize pixel values from a sequence of doubles \inplace. + /** + In-place version of the constructor CImg(unsigned int,unsigned int,unsigned int,unsigned int,double,double,...). + **/ + CImg& assign(const unsigned int size_x, const unsigned int size_y, + const unsigned int size_z, const unsigned int size_c, + const double value0, const double value1, ...) { + assign(size_x,size_y,size_z,size_c); + _CImg_stdarg(*this,value0,value1,(size_t)size_x*size_y*size_z*size_c,double); + return *this; + } + + //! Construct image with specified size and initialize pixel values from a value string \inplace. + /** + In-place version of the constructor CImg(unsigned int,unsigned int,unsigned int,unsigned int,const char*,bool). + **/ + CImg& assign(const unsigned int size_x, const unsigned int size_y, + const unsigned int size_z, const unsigned int size_c, + const char *const values, const bool repeat_values) { + return assign(size_x,size_y,size_z,size_c).fill(values,repeat_values); + } + + //! Construct image with specified size and initialize pixel values from a memory buffer \inplace. + /** + In-place version of the constructor CImg(const t*,unsigned int,unsigned int,unsigned int,unsigned int). + **/ + template + CImg& assign(const t *const values, const unsigned int size_x, const unsigned int size_y=1, + const unsigned int size_z=1, const unsigned int size_c=1) { + const size_t siz = (size_t)size_x*size_y*size_z*size_c; + if (!values || !siz) return assign(); + assign(size_x,size_y,size_z,size_c); + const t *ptrs = values; cimg_for(*this,ptrd,T) *ptrd = (T)*(ptrs++); + return *this; + } + + //! Construct image with specified size and initialize pixel values from a memory buffer \specialization. + CImg& assign(const T *const values, const unsigned int size_x, const unsigned int size_y=1, + const unsigned int size_z=1, const unsigned int size_c=1) { + const size_t siz = (size_t)size_x*size_y*size_z*size_c; + if (!values || !siz) return assign(); + const size_t curr_siz = (size_t)size(); + if (values==_data && siz==curr_siz) return assign(size_x,size_y,size_z,size_c); + if (_is_shared || values + siz<_data || values>=_data + size()) { + assign(size_x,size_y,size_z,size_c); + if (_is_shared) std::memmove((void*)_data,(void*)values,siz*sizeof(T)); + else std::memcpy((void*)_data,(void*)values,siz*sizeof(T)); + } else { + T *new_data = 0; + try { new_data = new T[siz]; } catch (...) { + _width = _height = _depth = _spectrum = 0; _data = 0; + throw CImgInstanceException(_cimg_instance + "assign(): Failed to allocate memory (%s) for image (%u,%u,%u,%u).", + cimg_instance, + cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c), + size_x,size_y,size_z,size_c); + } + std::memcpy((void*)new_data,(void*)values,siz*sizeof(T)); + delete[] _data; _data = new_data; _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; + } + return *this; + } + + //! Construct image with specified size and initialize pixel values from a memory buffer \overloading. + template + CImg& assign(const t *const values, const unsigned int size_x, const unsigned int size_y, + const unsigned int size_z, const unsigned int size_c, const bool is_shared) { + if (is_shared) + throw CImgArgumentException(_cimg_instance + "assign(): Invalid assignment request of shared instance from (%s*) buffer" + "(pixel types are different).", + cimg_instance, + CImg::pixel_type()); + return assign(values,size_x,size_y,size_z,size_c); + } + + //! Construct image with specified size and initialize pixel values from a memory buffer \overloading. + CImg& assign(const T *const values, const unsigned int size_x, const unsigned int size_y, + const unsigned int size_z, const unsigned int size_c, const bool is_shared) { + const size_t siz = (size_t)size_x*size_y*size_z*size_c; + if (!values || !siz) return assign(); + if (!is_shared) { if (_is_shared) assign(); assign(values,size_x,size_y,size_z,size_c); } + else { + if (!_is_shared) { + if (values + siz<_data || values>=_data + size()) assign(); + else cimg::warn(_cimg_instance + "assign(): Shared image instance has overlapping memory.", + cimg_instance); + } + _width = size_x; _height = size_y; _depth = size_z; _spectrum = size_c; _is_shared = true; + _data = const_cast(values); + } + return *this; + } + + //! Construct image from reading an image file \inplace. + /** + In-place version of the constructor CImg(const char*). + **/ + CImg& assign(const char *const filename) { + return load(filename); + } + + //! Construct image copy \inplace. + /** + In-place version of the constructor CImg(const CImg&). + **/ + template + CImg& assign(const CImg& img) { + return assign(img._data,img._width,img._height,img._depth,img._spectrum); + } + + //! In-place version of the advanced copy constructor. + /** + In-place version of the constructor CImg(const CImg&,bool). + **/ + template + CImg& assign(const CImg& img, const bool is_shared) { + return assign(img._data,img._width,img._height,img._depth,img._spectrum,is_shared); + } + + //! Construct image with dimensions borrowed from another image \inplace. + /** + In-place version of the constructor CImg(const CImg&,const char*). + **/ + template + CImg& assign(const CImg& img, const char *const dimensions) { + if (!dimensions || !*dimensions) return assign(img._width,img._height,img._depth,img._spectrum); + unsigned int siz[4] = { 0,1,1,1 }, k = 0; + CImg item(256); + for (const char *s = dimensions; *s && k<4; ++k) { + if (cimg_sscanf(s,"%255[^0-9%xyzvwhdcXYZVWHDC]",item._data)>0) s+=std::strlen(item); + if (*s) { + unsigned int val = 0; char sep = 0; + if (cimg_sscanf(s,"%u%c",&val,&sep)>0) { + if (sep=='%') siz[k] = val*(k==0?_width:k==1?_height:k==2?_depth:_spectrum)/100; + else siz[k] = val; + while (*s>='0' && *s<='9') ++s; + if (sep=='%') ++s; + } else switch (cimg::lowercase(*s)) { + case 'x' : case 'w' : siz[k] = img._width; ++s; break; + case 'y' : case 'h' : siz[k] = img._height; ++s; break; + case 'z' : case 'd' : siz[k] = img._depth; ++s; break; + case 'c' : case 's' : siz[k] = img._spectrum; ++s; break; + default : + throw CImgArgumentException(_cimg_instance + "assign(): Invalid character '%c' detected in specified dimension string '%s'.", + cimg_instance, + *s,dimensions); + } + } + } + return assign(siz[0],siz[1],siz[2],siz[3]); + } + + //! Construct image with dimensions borrowed from another image and initialize pixel values \inplace. + /** + In-place version of the constructor CImg(const CImg&,const char*,T). + **/ + template + CImg& assign(const CImg& img, const char *const dimensions, const T& value) { + return assign(img,dimensions).fill(value); + } + + //! Construct image from a display window \inplace. + /** + In-place version of the constructor CImg(const CImgDisplay&). + **/ + CImg& assign(const CImgDisplay &disp) { + disp.snapshot(*this); + return *this; + } + + //! Construct empty image \inplace. + /** + Equivalent to assign(). + \note + - It has been defined for compatibility with STL naming conventions. + **/ + CImg& clear() { + return assign(); + } + + //! Transfer content of an image instance into another one. + /** + Transfer the dimensions and the pixel buffer content of an image instance into another one, + and replace instance by an empty image. It avoids the copy of the pixel buffer + when possible. + \param img Destination image. + \note + - Pixel types \c T and \c t of source and destination images can be different, though the process is + designed to be instantaneous when \c T and \c t are the same. + \par Example + \code + CImg src(256,256,1,3,0), // Construct a 256x256x1x3 (color) image filled with value '0'. + dest(16,16); // Construct a 16x16x1x1 (scalar) image. + src.move_to(dest); // Now, 'src' is empty and 'dest' is the 256x256x1x3 image. + \endcode + **/ + template + CImg& move_to(CImg& img) { + img.assign(*this); + assign(); + return img; + } + + //! Transfer content of an image instance into another one \specialization. + CImg& move_to(CImg& img) { + if (_is_shared || img._is_shared) img.assign(*this); + else swap(img); + assign(); + return img; + } + + //! Transfer content of an image instance into a new image in an image list. + /** + Transfer the dimensions and the pixel buffer content of an image instance + into a newly inserted image at position \c pos in specified \c CImgList instance. + \param list Destination list. + \param pos Position of the newly inserted image in the list. + \note + - When optional parameter \c pos is ommited, the image instance is transfered as a new + image at the end of the specified \c list. + - It is convenient to sequentially insert new images into image lists, with no + additional copies of memory buffer. + \par Example + \code + CImgList list; // Construct an empty image list. + CImg img("reference.jpg"); // Read image from filename. + img.move_to(list); // Transfer image content as a new item in the list (no buffer copy). + \endcode + **/ + template + CImgList& move_to(CImgList& list, const unsigned int pos=~0U) { + const unsigned int npos = pos>list._width?list._width:pos; + move_to(list.insert(1,npos)[npos]); + return list; + } + + //! Swap fields of two image instances. + /** + \param img Image to swap fields with. + \note + - It can be used to interchange the content of two images in a very fast way. Can be convenient when dealing + with algorithms requiring two swapping buffers. + \par Example + \code + CImg img1("lena.jpg"), + img2("milla.jpg"); + img1.swap(img2); // Now, 'img1' is 'milla' and 'img2' is 'lena'. + \endcode + **/ + CImg& swap(CImg& img) { + cimg::swap(_width,img._width,_height,img._height,_depth,img._depth,_spectrum,img._spectrum); + cimg::swap(_data,img._data); + cimg::swap(_is_shared,img._is_shared); + return img; + } + + //! Return a reference to an empty image. + /** + \note + This function is useful mainly to declare optional parameters having type \c CImg in functions prototypes, + e.g. + \code + void f(const int x=0, const int y=0, const CImg& img=CImg::empty()); + \endcode + **/ + static CImg& empty() { + static CImg _empty; + return _empty.assign(); + } + + //! Return a reference to an empty image \const. + static const CImg& const_empty() { + static const CImg _empty; + return _empty; + } + + //@} + //------------------------------------------ + // + //! \name Overloaded Operators + //@{ + //------------------------------------------ + + //! Access to a pixel value. + /** + Return a reference to a located pixel value of the image instance, + being possibly \e const, whether the image instance is \e const or not. + This is the standard method to get/set pixel values in \c CImg images. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \note + - Range of pixel coordinates start from (0,0,0,0) to + (width() - 1,height() - 1,depth() - 1,spectrum() - 1). + - Due to the particular arrangement of the pixel buffers defined in %CImg, you can omit one coordinate if the + corresponding dimension is equal to \c 1. + For instance, pixels of a 2d image (depth() equal to \c 1) can be accessed by img(x,y,c) instead of + img(x,y,0,c). + \warning + - There is \e no boundary checking done in this operator, to make it as fast as possible. + You \e must take care of out-of-bounds access by yourself, if necessary. + For debuging purposes, you may want to define macro \c 'cimg_verbosity'>=3 to enable additional boundary + checking operations in this operator. In that case, warning messages will be printed on the error output + when accessing out-of-bounds pixels. + \par Example + \code + CImg img(100,100,1,3,0); // Construct a 100x100x1x3 (color) image with pixels set to '0'. + const float + valR = img(10,10,0,0), // Read red value at coordinates (10,10). + valG = img(10,10,0,1), // Read green value at coordinates (10,10) + valB = img(10,10,2), // Read blue value at coordinates (10,10) (Z-coordinate can be omitted). + avg = (valR + valG + valB)/3; // Compute average pixel value. + img(10,10,0) = img(10,10,1) = img(10,10,2) = avg; // Replace the color pixel (10,10) by the average grey value. + \endcode + **/ +#if cimg_verbosity>=3 + T& operator()(const unsigned int x, const unsigned int y=0, + const unsigned int z=0, const unsigned int c=0) { + const ulongT off = (ulongT)offset(x,y,z,c); + if (!_data || off>=size()) { + cimg::warn(_cimg_instance + "operator(): Invalid pixel request, at coordinates (%d,%d,%d,%d) [offset=%u].", + cimg_instance, + (int)x,(int)y,(int)z,(int)c,off); + return *_data; + } + else return _data[off]; + } + + //! Access to a pixel value \const. + const T& operator()(const unsigned int x, const unsigned int y=0, + const unsigned int z=0, const unsigned int c=0) const { + return const_cast*>(this)->operator()(x,y,z,c); + } + + //! Access to a pixel value. + /** + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \param wh Precomputed offset, must be equal to width()*\ref height(). + \param whd Precomputed offset, must be equal to width()*\ref height()*\ref depth(). + \note + - Similar to (but faster than) operator()(). + It uses precomputed offsets to optimize memory access. You may use it to optimize + the reading/writing of several pixel values in the same image (e.g. in a loop). + **/ + T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c, + const ulongT wh, const ulongT whd=0) { + cimg::unused(wh,whd); + return (*this)(x,y,z,c); + } + + //! Access to a pixel value \const. + const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c, + const ulongT wh, const ulongT whd=0) const { + cimg::unused(wh,whd); + return (*this)(x,y,z,c); + } +#else + T& operator()(const unsigned int x) { + return _data[x]; + } + + const T& operator()(const unsigned int x) const { + return _data[x]; + } + + T& operator()(const unsigned int x, const unsigned int y) { + return _data[x + y*_width]; + } + + const T& operator()(const unsigned int x, const unsigned int y) const { + return _data[x + y*_width]; + } + + T& operator()(const unsigned int x, const unsigned int y, const unsigned int z) { + return _data[x + y*(ulongT)_width + z*(ulongT)_width*_height]; + } + + const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z) const { + return _data[x + y*(ulongT)_width + z*(ulongT)_width*_height]; + } + + T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c) { + return _data[x + y*(ulongT)_width + z*(ulongT)_width*_height + c*(ulongT)_width*_height*_depth]; + } + + const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c) const { + return _data[x + y*(ulongT)_width + z*(ulongT)_width*_height + c*(ulongT)_width*_height*_depth]; + } + + T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int, + const ulongT wh) { + return _data[x + y*_width + z*wh]; + } + + const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int, + const ulongT wh) const { + return _data[x + y*_width + z*wh]; + } + + T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c, + const ulongT wh, const ulongT whd) { + return _data[x + y*_width + z*wh + c*whd]; + } + + const T& operator()(const unsigned int x, const unsigned int y, const unsigned int z, const unsigned int c, + const ulongT wh, const ulongT whd) const { + return _data[x + y*_width + z*wh + c*whd]; + } +#endif + + //! Implicitely cast an image into a \c T*. + /** + Implicitely cast a \c CImg instance into a \c T* or \c const \c T* pointer, whether the image instance + is \e const or not. The returned pointer points on the first value of the image pixel buffer. + \note + - It simply returns the pointer data() to the pixel buffer. + - This implicit conversion is convenient to test the empty state of images (data() being \c 0 in this case), e.g. + \code + CImg img1(100,100), img2; // 'img1' is a 100x100 image, 'img2' is an empty image. + if (img1) { // Test succeeds, 'img1' is not an empty image. + if (!img2) { // Test succeeds, 'img2' is an empty image. + std::printf("'img1' is not empty, 'img2' is empty."); + } + } + \endcode + - It also allows to use brackets to access pixel values, without need for a \c CImg::operator[](), e.g. + \code + CImg img(100,100); + const float value = img[99]; // Access to value of the last pixel on the first row. + img[510] = 255; // Set pixel value at (10,5). + \endcode + **/ + operator T*() { + return _data; + } + + //! Implicitely cast an image into a \c T* \const. + operator const T*() const { + return _data; + } + + //! Assign a value to all image pixels. + /** + Assign specified \c value to each pixel value of the image instance. + \param value Value that will be assigned to image pixels. + \note + - The image size is never modified. + - The \c value may be casted to pixel type \c T if necessary. + \par Example + \code + CImg img(100,100); // Declare image (with garbage values). + img = 0; // Set all pixel values to '0'. + img = 1.2; // Set all pixel values to '1' (cast of '1.2' as a 'char'). + \endcode + **/ + CImg& operator=(const T& value) { + return fill(value); + } + + //! Assign pixels values from a specified expression. + /** + Initialize all pixel values from the specified string \c expression. + \param expression Value string describing the way pixel values are set. + \note + - String parameter \c expression may describe different things: + - If \c expression is a list of values (as in \c "1,2,3,8,3,2"), or a formula (as in \c "(x*y)%255"), + the pixel values are set from specified \c expression and the image size is not modified. + - If \c expression is a filename (as in \c "reference.jpg"), the corresponding image file is loaded and + replace the image instance. The image size is modified if necessary. + \par Example + \code + CImg img1(100,100), img2(img1), img3(img1); // Declare 3 scalar images 100x100 with unitialized values. + img1 = "0,50,100,150,200,250,200,150,100,50"; // Set pixel values of 'img1' from a value sequence. + img2 = "10*((x*y)%25)"; // Set pixel values of 'img2' from a formula. + img3 = "reference.jpg"; // Set pixel values of 'img3' from a file (image size is modified). + (img1,img2,img3).display(); + \endcode + \image html ref_operator_eq.jpg + **/ + CImg& operator=(const char *const expression) { + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + try { + _fill(expression,true,true,0,0,"operator=",0); + } catch (CImgException&) { + cimg::exception_mode(omode); + load(expression); + } + cimg::exception_mode(omode); + return *this; + } + + //! Copy an image into the current image instance. + /** + Similar to the in-place copy constructor assign(const CImg&). + **/ + template + CImg& operator=(const CImg& img) { + return assign(img); + } + + //! Copy an image into the current image instance \specialization. + CImg& operator=(const CImg& img) { + return assign(img); + } + + //! Copy the content of a display window to the current image instance. + /** + Similar to assign(const CImgDisplay&). + **/ + CImg& operator=(const CImgDisplay& disp) { + disp.snapshot(*this); + return *this; + } + + //! In-place addition operator. + /** + Add specified \c value to all pixels of an image instance. + \param value Value to add. + \note + - Resulting pixel values are casted to fit the pixel type \c T. + For instance, adding \c 0.2 to a \c CImg is possible but does nothing indeed. + - Overflow values are treated as with standard C++ numeric types. For instance, + \code + CImg img(100,100,1,1,255); // Construct a 100x100 image with pixel values '255'. + img+=1; // Add '1' to each pixels -> Overflow. + // here all pixels of image 'img' are equal to '0'. + \endcode + - To prevent value overflow, you may want to consider pixel type \c T as \c float or \c double, + and use cut() after addition. + \par Example + \code + CImg img1("reference.jpg"); // Load a 8-bits RGB image (values in [0,255]). + CImg img2(img1); // Construct a float-valued copy of 'img1'. + img2+=100; // Add '100' to pixel values -> goes out of [0,255] but no problems with floats. + img2.cut(0,255); // Cut values in [0,255] to fit the 'unsigned char' constraint. + img1 = img2; // Rewrite safe result in 'unsigned char' version 'img1'. + const CImg img3 = (img1 + 100).cut(0,255); // Do the same in a more simple and elegant way. + (img1,img2,img3).display(); + \endcode + \image html ref_operator_plus.jpg + **/ + template + CImg& operator+=(const t value) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=524288)) + cimg_rof(*this,ptrd,T) *ptrd = (T)(*ptrd + value); + return *this; + } + + //! In-place addition operator. + /** + Add values to image pixels, according to the specified string \c expression. + \param expression Value string describing the way pixel values are added. + \note + - Similar to operator=(const char*), except that it adds values to the pixels of the current image instance, + instead of assigning them. + **/ + CImg& operator+=(const char *const expression) { + return *this+=(+*this)._fill(expression,true,true,0,0,"operator+=",this); + } + + //! In-place addition operator. + /** + Add values to image pixels, according to the values of the input image \c img. + \param img Input image to add. + \note + - The size of the image instance is never modified. + - It is not mandatory that input image \c img has the same size as the image instance. + If less values are available in \c img, then the values are added periodically. For instance, adding one + WxH scalar image (spectrum() equal to \c 1) to one WxH color image (spectrum() equal to \c 3) + means each color channel will be incremented with the same values at the same locations. + \par Example + \code + CImg img1("reference.jpg"); // Load a RGB color image (img1.spectrum()==3) + // Construct a scalar shading (img2.spectrum()==1). + const CImg img2(img1.width(),img.height(),1,1,"255*(x/w)^2"); + img1+=img2; // Add shading to each channel of 'img1'. + img1.cut(0,255); // Prevent [0,255] overflow. + (img2,img1).display(); + \endcode + \image html ref_operator_plus1.jpg + **/ + template + CImg& operator+=(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return *this+=+img; + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs& operator++() { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=524288)) + cimg_rof(*this,ptrd,T) ++*ptrd; + return *this; + } + + //! In-place increment operator (postfix). + /** + Add \c 1 to all image pixels, and return a new copy of the initial (pre-incremented) image instance. + \note + - Use the prefixed version operator++() if you don't need a copy of the initial + (pre-incremented) image instance, since a useless image copy may be expensive in terms of memory usage. + **/ + CImg operator++(int) { + const CImg copy(*this,false); + ++*this; + return copy; + } + + //! Return a non-shared copy of the image instance. + /** + \note + - Use this operator to ensure you get a non-shared copy of an image instance with same pixel type \c T. + Indeed, the usual copy constructor CImg(const CImg&) returns a shared copy of a shared input image, + and it may be not desirable to work on a regular copy (e.g. for a resize operation) if you have no + information about the shared state of the input image. + - Writing \c (+img) is equivalent to \c CImg(img,false). + **/ + CImg operator+() const { + return CImg(*this,false); + } + + //! Addition operator. + /** + Similar to operator+=(const t), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + template + CImg<_cimg_Tt> operator+(const t value) const { + return CImg<_cimg_Tt>(*this,false)+=value; + } + + //! Addition operator. + /** + Similar to operator+=(const char*), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + CImg operator+(const char *const expression) const { + return CImg(*this,false)+=expression; + } + + //! Addition operator. + /** + Similar to operator+=(const CImg&), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + template + CImg<_cimg_Tt> operator+(const CImg& img) const { + return CImg<_cimg_Tt>(*this,false)+=img; + } + + //! In-place substraction operator. + /** + Similar to operator+=(const t), except that it performs a substraction instead of an addition. + **/ + template + CImg& operator-=(const t value) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=524288)) + cimg_rof(*this,ptrd,T) *ptrd = (T)(*ptrd - value); + return *this; + } + + //! In-place substraction operator. + /** + Similar to operator+=(const char*), except that it performs a substraction instead of an addition. + **/ + CImg& operator-=(const char *const expression) { + return *this-=(+*this)._fill(expression,true,true,0,0,"operator-=",this); + } + + //! In-place substraction operator. + /** + Similar to operator+=(const CImg&), except that it performs a substraction instead of an addition. + **/ + template + CImg& operator-=(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return *this-=+img; + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs& operator--() { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=524288)) + cimg_rof(*this,ptrd,T) *ptrd = *ptrd - (T)1; + return *this; + } + + //! In-place decrement operator (postfix). + /** + Similar to operator++(int), except that it performs a decrement instead of an increment. + **/ + CImg operator--(int) { + const CImg copy(*this,false); + --*this; + return copy; + } + + //! Replace each pixel by its opposite value. + /** + \note + - If the computed opposite values are out-of-range, they are treated as with standard C++ numeric types. + For instance, the \c unsigned \c char opposite of \c 1 is \c 255. + \par Example + \code + const CImg + img1("reference.jpg"), // Load a RGB color image. + img2 = -img1; // Compute its opposite (in 'unsigned char'). + (img1,img2).display(); + \endcode + \image html ref_operator_minus.jpg + **/ + CImg operator-() const { + return CImg(_width,_height,_depth,_spectrum,(T)0)-=*this; + } + + //! Substraction operator. + /** + Similar to operator-=(const t), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + template + CImg<_cimg_Tt> operator-(const t value) const { + return CImg<_cimg_Tt>(*this,false)-=value; + } + + //! Substraction operator. + /** + Similar to operator-=(const char*), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + CImg operator-(const char *const expression) const { + return CImg(*this,false)-=expression; + } + + //! Substraction operator. + /** + Similar to operator-=(const CImg&), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + template + CImg<_cimg_Tt> operator-(const CImg& img) const { + return CImg<_cimg_Tt>(*this,false)-=img; + } + + //! In-place multiplication operator. + /** + Similar to operator+=(const t), except that it performs a multiplication instead of an addition. + **/ + template + CImg& operator*=(const t value) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=262144)) + cimg_rof(*this,ptrd,T) *ptrd = (T)(*ptrd * value); + return *this; + } + + //! In-place multiplication operator. + /** + Similar to operator+=(const char*), except that it performs a multiplication instead of an addition. + **/ + CImg& operator*=(const char *const expression) { + return mul((+*this)._fill(expression,true,true,0,0,"operator*=",this)); + } + + //! In-place multiplication operator. + /** + Replace the image instance by the matrix multiplication between the image instance and the specified matrix + \c img. + \param img Second operand of the matrix multiplication. + \note + - It does \e not compute a pointwise multiplication between two images. For this purpose, use + mul(const CImg&) instead. + - The size of the image instance can be modified by this operator. + \par Example + \code + CImg A(2,2,1,1, 1,2,3,4); // Construct 2x2 matrix A = [1,2;3,4]. + const CImg X(1,2,1,1, 1,2); // Construct 1x2 vector X = [1;2]. + A*=X; // Assign matrix multiplication A*X to 'A'. + // 'A' is now a 1x2 vector whose values are [5;11]. + \endcode + **/ + template + CImg& operator*=(const CImg& img) { + return ((*this)*img).move_to(*this); + } + + //! Multiplication operator. + /** + Similar to operator*=(const t), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + template + CImg<_cimg_Tt> operator*(const t value) const { + return CImg<_cimg_Tt>(*this,false)*=value; + } + + //! Multiplication operator. + /** + Similar to operator*=(const char*), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + CImg operator*(const char *const expression) const { + return CImg(*this,false)*=expression; + } + + //! Multiplication operator. + /** + Similar to operator*=(const CImg&), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + template + CImg<_cimg_Tt> operator*(const CImg& img) const { + if (_width!=img._height || _depth!=1 || _spectrum!=1) + throw CImgArgumentException(_cimg_instance + "operator*(): Invalid multiplication of instance by specified " + "matrix (%u,%u,%u,%u,%p)", + cimg_instance, + img._width,img._height,img._depth,img._spectrum,img._data); + CImg<_cimg_Tt> res(img._width,_height); +#ifdef cimg_use_openmp + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(size()>1024 && img.size()>1024)) + cimg_forXY(res,i,j) { + _cimg_Ttdouble value = 0; cimg_forX(*this,k) value+=(*this)(k,j)*img(i,k); res(i,j) = (_cimg_Tt)value; + } +#else + _cimg_Tt *ptrd = res._data; + cimg_forXY(res,i,j) { + _cimg_Ttdouble value = 0; cimg_forX(*this,k) value+=(*this)(k,j)*img(i,k); *(ptrd++) = (_cimg_Tt)value; + } +#endif + return res; + } + + //! In-place division operator. + /** + Similar to operator+=(const t), except that it performs a division instead of an addition. + **/ + template + CImg& operator/=(const t value) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) *ptrd = (T)(*ptrd / value); + return *this; + } + + //! In-place division operator. + /** + Similar to operator+=(const char*), except that it performs a division instead of an addition. + **/ + CImg& operator/=(const char *const expression) { + return div((+*this)._fill(expression,true,true,0,0,"operator/=",this)); + } + + //! In-place division operator. + /** + Replace the image instance by the (right) matrix division between the image instance and the specified + matrix \c img. + \param img Second operand of the matrix division. + \note + - It does \e not compute a pointwise division between two images. For this purpose, use + div(const CImg&) instead. + - It returns the matrix operation \c A*inverse(img). + - The size of the image instance can be modified by this operator. + **/ + template + CImg& operator/=(const CImg& img) { + return (*this*img.get_invert()).move_to(*this); + } + + //! Division operator. + /** + Similar to operator/=(const t), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + template + CImg<_cimg_Tt> operator/(const t value) const { + return CImg<_cimg_Tt>(*this,false)/=value; + } + + //! Division operator. + /** + Similar to operator/=(const char*), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + CImg operator/(const char *const expression) const { + return CImg(*this,false)/=expression; + } + + //! Division operator. + /** + Similar to operator/=(const CImg&), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + template + CImg<_cimg_Tt> operator/(const CImg& img) const { + return (*this)*img.get_invert(); + } + + //! In-place modulo operator. + /** + Similar to operator+=(const t), except that it performs a modulo operation instead of an addition. + **/ + template + CImg& operator%=(const t value) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=16384)) + cimg_rof(*this,ptrd,T) *ptrd = (T)cimg::mod(*ptrd,(T)value); + return *this; + } + + //! In-place modulo operator. + /** + Similar to operator+=(const char*), except that it performs a modulo operation instead of an addition. + **/ + CImg& operator%=(const char *const expression) { + return *this%=(+*this)._fill(expression,true,true,0,0,"operator%=",this); + } + + //! In-place modulo operator. + /** + Similar to operator+=(const CImg&), except that it performs a modulo operation instead of an addition. + **/ + template + CImg& operator%=(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return *this%=+img; + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs + CImg<_cimg_Tt> operator%(const t value) const { + return CImg<_cimg_Tt>(*this,false)%=value; + } + + //! Modulo operator. + /** + Similar to operator%=(const char*), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + CImg operator%(const char *const expression) const { + return CImg(*this,false)%=expression; + } + + //! Modulo operator. + /** + Similar to operator%=(const CImg&), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image may be a superset of the initial pixel type \c T, if necessary. + **/ + template + CImg<_cimg_Tt> operator%(const CImg& img) const { + return CImg<_cimg_Tt>(*this,false)%=img; + } + + //! In-place bitwise AND operator. + /** + Similar to operator+=(const t), except that it performs a bitwise AND operation instead of an addition. + **/ + template + CImg& operator&=(const t value) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) *ptrd = (T)((ulongT)*ptrd & (ulongT)value); + return *this; + } + + //! In-place bitwise AND operator. + /** + Similar to operator+=(const char*), except that it performs a bitwise AND operation instead of an addition. + **/ + CImg& operator&=(const char *const expression) { + return *this&=(+*this)._fill(expression,true,true,0,0,"operator&=",this); + } + + //! In-place bitwise AND operator. + /** + Similar to operator+=(const CImg&), except that it performs a bitwise AND operation instead of an addition. + **/ + template + CImg& operator&=(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return *this&=+img; + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs + CImg operator&(const t value) const { + return (+*this)&=value; + } + + //! Bitwise AND operator. + /** + Similar to operator&=(const char*), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image is \c T. + **/ + CImg operator&(const char *const expression) const { + return (+*this)&=expression; + } + + //! Bitwise AND operator. + /** + Similar to operator&=(const CImg&), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image is \c T. + **/ + template + CImg operator&(const CImg& img) const { + return (+*this)&=img; + } + + //! In-place bitwise OR operator. + /** + Similar to operator+=(const t), except that it performs a bitwise OR operation instead of an addition. + **/ + template + CImg& operator|=(const t value) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) *ptrd = (T)((ulongT)*ptrd | (ulongT)value); + return *this; + } + + //! In-place bitwise OR operator. + /** + Similar to operator+=(const char*), except that it performs a bitwise OR operation instead of an addition. + **/ + CImg& operator|=(const char *const expression) { + return *this|=(+*this)._fill(expression,true,true,0,0,"operator|=",this); + } + + //! In-place bitwise OR operator. + /** + Similar to operator+=(const CImg&), except that it performs a bitwise OR operation instead of an addition. + **/ + template + CImg& operator|=(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return *this|=+img; + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs + CImg operator|(const t value) const { + return (+*this)|=value; + } + + //! Bitwise OR operator. + /** + Similar to operator|=(const char*), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image is \c T. + **/ + CImg operator|(const char *const expression) const { + return (+*this)|=expression; + } + + //! Bitwise OR operator. + /** + Similar to operator|=(const CImg&), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image is \c T. + **/ + template + CImg operator|(const CImg& img) const { + return (+*this)|=img; + } + + //! In-place bitwise XOR operator. + /** + Similar to operator+=(const t), except that it performs a bitwise XOR operation instead of an addition. + \warning + - It does \e not compute the \e power of pixel values. For this purpose, use pow(const t) instead. + **/ + template + CImg& operator^=(const t value) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) *ptrd = (T)((ulongT)*ptrd ^ (ulongT)value); + return *this; + } + + //! In-place bitwise XOR operator. + /** + Similar to operator+=(const char*), except that it performs a bitwise XOR operation instead of an addition. + \warning + - It does \e not compute the \e power of pixel values. For this purpose, use pow(const char*) instead. + **/ + CImg& operator^=(const char *const expression) { + return *this^=(+*this)._fill(expression,true,true,0,0,"operator^=",this); + } + + //! In-place bitwise XOR operator. + /** + Similar to operator+=(const CImg&), except that it performs a bitwise XOR operation instead of an addition. + \warning + - It does \e not compute the \e power of pixel values. For this purpose, use pow(const CImg&) instead. + **/ + template + CImg& operator^=(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return *this^=+img; + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs + CImg operator^(const t value) const { + return (+*this)^=value; + } + + //! Bitwise XOR operator. + /** + Similar to operator^=(const char*), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image is \c T. + **/ + CImg operator^(const char *const expression) const { + return (+*this)^=expression; + } + + //! Bitwise XOR operator. + /** + Similar to operator^=(const CImg&), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image is \c T. + **/ + template + CImg operator^(const CImg& img) const { + return (+*this)^=img; + } + + //! In-place bitwise left shift operator. + /** + Similar to operator+=(const t), except that it performs a bitwise left shift instead of an addition. + **/ + template + CImg& operator<<=(const t value) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=65536)) + cimg_rof(*this,ptrd,T) *ptrd = (T)(((longT)*ptrd) << (int)value); + return *this; + } + + //! In-place bitwise left shift operator. + /** + Similar to operator+=(const char*), except that it performs a bitwise left shift instead of an addition. + **/ + CImg& operator<<=(const char *const expression) { + return *this<<=(+*this)._fill(expression,true,true,0,0,"operator<<=",this); + } + + //! In-place bitwise left shift operator. + /** + Similar to operator+=(const CImg&), except that it performs a bitwise left shift instead of an addition. + **/ + template + CImg& operator<<=(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return *this^=+img; + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs + CImg operator<<(const t value) const { + return (+*this)<<=value; + } + + //! Bitwise left shift operator. + /** + Similar to operator<<=(const char*), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image is \c T. + **/ + CImg operator<<(const char *const expression) const { + return (+*this)<<=expression; + } + + //! Bitwise left shift operator. + /** + Similar to operator<<=(const CImg&), except that it returns a new image instance instead of + operating in-place. + The pixel type of the returned image is \c T. + **/ + template + CImg operator<<(const CImg& img) const { + return (+*this)<<=img; + } + + //! In-place bitwise right shift operator. + /** + Similar to operator+=(const t), except that it performs a bitwise right shift instead of an addition. + **/ + template + CImg& operator>>=(const t value) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=65536)) + cimg_rof(*this,ptrd,T) *ptrd = (T)(((longT)*ptrd) >> (int)value); + return *this; + } + + //! In-place bitwise right shift operator. + /** + Similar to operator+=(const char*), except that it performs a bitwise right shift instead of an addition. + **/ + CImg& operator>>=(const char *const expression) { + return *this>>=(+*this)._fill(expression,true,true,0,0,"operator>>=",this); + } + + //! In-place bitwise right shift operator. + /** + Similar to operator+=(const CImg&), except that it performs a bitwise right shift instead of an addition. + **/ + template + CImg& operator>>=(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return *this^=+img; + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs> (int)*(ptrs++)); + for (const t *ptrs = img._data; ptrd> (int)*(ptrs++)); + } + return *this; + } + + //! Bitwise right shift operator. + /** + Similar to operator>>=(const t), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image is \c T. + **/ + template + CImg operator>>(const t value) const { + return (+*this)>>=value; + } + + //! Bitwise right shift operator. + /** + Similar to operator>>=(const char*), except that it returns a new image instance instead of operating in-place. + The pixel type of the returned image is \c T. + **/ + CImg operator>>(const char *const expression) const { + return (+*this)>>=expression; + } + + //! Bitwise right shift operator. + /** + Similar to operator>>=(const CImg&), except that it returns a new image instance instead of + operating in-place. + The pixel type of the returned image is \c T. + **/ + template + CImg operator>>(const CImg& img) const { + return (+*this)>>=img; + } + + //! Bitwise inversion operator. + /** + Similar to operator-(), except that it compute the bitwise inverse instead of the opposite value. + **/ + CImg operator~() const { + CImg res(_width,_height,_depth,_spectrum); + const T *ptrs = _data; + cimg_for(res,ptrd,T) { const ulongT value = (ulongT)*(ptrs++); *ptrd = (T)~value; } + return res; + } + + //! Test if all pixels of an image have the same value. + /** + Return \c true is all pixels of the image instance are equal to the specified \c value. + \param value Reference value to compare with. + **/ + template + bool operator==(const t value) const { + if (is_empty()) return false; + typedef _cimg_Tt Tt; + bool is_equal = true; + for (T *ptrd = _data + size(); is_equal && ptrd>_data; is_equal = ((Tt)*(--ptrd)==(Tt)value)) {} + return is_equal; + } + + //! Test if all pixel values of an image follow a specified expression. + /** + Return \c true is all pixels of the image instance are equal to the specified \c expression. + \param expression Value string describing the way pixel values are compared. + **/ + bool operator==(const char *const expression) const { + return *this==(+*this)._fill(expression,true,true,0,0,"operator==",this); + } + + //! Test if two images have the same size and values. + /** + Return \c true if the image instance and the input image \c img have the same dimensions and pixel values, + and \c false otherwise. + \param img Input image to compare with. + \note + - The pixel buffer pointers data() of the two compared images do not have to be the same for operator==() + to return \c true. + Only the dimensions and the pixel values matter. Thus, the comparison can be \c true even for different + pixel types \c T and \c t. + \par Example + \code + const CImg img1(1,3,1,1, 0,1,2); // Construct a 1x3 vector [0;1;2] (with 'float' pixel values). + const CImg img2(1,3,1,1, 0,1,2); // Construct a 1x3 vector [0;1;2] (with 'char' pixel values). + if (img1==img2) { // Test succeeds, image dimensions and values are the same. + std::printf("'img1' and 'img2' have same dimensions and values."); + } + \endcode + **/ + template + bool operator==(const CImg& img) const { + typedef _cimg_Tt Tt; + const ulongT siz = size(); + bool is_equal = true; + if (siz!=img.size()) return false; + t *ptrs = img._data + siz; + for (T *ptrd = _data + siz; is_equal && ptrd>_data; is_equal = ((Tt)*(--ptrd)==(Tt)*(--ptrs))) {} + return is_equal; + } + + //! Test if pixels of an image are all different from a value. + /** + Return \c true is all pixels of the image instance are different than the specified \c value. + \param value Reference value to compare with. + **/ + template + bool operator!=(const t value) const { + return !((*this)==value); + } + + //! Test if all pixel values of an image are different from a specified expression. + /** + Return \c true is all pixels of the image instance are different to the specified \c expression. + \param expression Value string describing the way pixel values are compared. + **/ + bool operator!=(const char *const expression) const { + return !((*this)==expression); + } + + //! Test if two images have different sizes or values. + /** + Return \c true if the image instance and the input image \c img have different dimensions or pixel values, + and \c false otherwise. + \param img Input image to compare with. + \note + - Writing \c img1!=img2 is equivalent to \c !(img1==img2). + **/ + template + bool operator!=(const CImg& img) const { + return !((*this)==img); + } + + //! Construct an image list from two images. + /** + Return a new list of image (\c CImgList instance) containing exactly two elements: + - A copy of the image instance, at position [\c 0]. + - A copy of the specified image \c img, at position [\c 1]. + + \param img Input image that will be the second image of the resulting list. + \note + - The family of operator,() is convenient to easily create list of images, but it is also \e quite \e slow + in practice (see warning below). + - Constructed lists contain no shared images. If image instance or input image \c img are shared, they are + inserted as new non-shared copies in the resulting list. + - The pixel type of the returned list may be a superset of the initial pixel type \c T, if necessary. + \warning + - Pipelining operator,() \c N times will perform \c N copies of the entire content of a (growing) image list. + This may become very expensive in terms of speed and used memory. You should avoid using this technique to + build a new CImgList instance from several images, if you are seeking for performance. + Fast insertions of images in an image list are possible with + CImgList::insert(const CImg&,unsigned int,bool) or move_to(CImgList&,unsigned int). + \par Example + \code + const CImg + img1("reference.jpg"), + img2 = img1.get_mirror('x'), + img3 = img2.get_blur(5); + const CImgList list = (img1,img2); // Create list of two elements from 'img1' and 'img2'. + (list,img3).display(); // Display image list containing copies of 'img1','img2' and 'img3'. + \endcode + \image html ref_operator_comma.jpg + **/ + template + CImgList<_cimg_Tt> operator,(const CImg& img) const { + return CImgList<_cimg_Tt>(*this,img); + } + + //! Construct an image list from image instance and an input image list. + /** + Return a new list of images (\c CImgList instance) containing exactly \c list.size() \c + \c 1 elements: + - A copy of the image instance, at position [\c 0]. + - A copy of the specified image list \c list, from positions [\c 1] to [\c list.size()]. + + \param list Input image list that will be appended to the image instance. + \note + - Similar to operator,(const CImg&) const, except that it takes an image list as an argument. + **/ + template + CImgList<_cimg_Tt> operator,(const CImgList& list) const { + return CImgList<_cimg_Tt>(list,false).insert(*this,0); + } + + //! Split image along specified axis. + /** + Return a new list of images (\c CImgList instance) containing the splitted components + of the instance image along the specified axis. + \param axis Splitting axis (can be '\c x','\c y','\c z' or '\c c') + \note + - Similar to get_split(char,int) const, with default second argument. + \par Example + \code + const CImg img("reference.jpg"); // Load a RGB color image. + const CImgList list = (img<'c'); // Get a list of its three R,G,B channels. + (img,list).display(); + \endcode + \image html ref_operator_less.jpg + **/ + CImgList operator<(const char axis) const { + return get_split(axis); + } + + //@} + //------------------------------------- + // + //! \name Instance Characteristics + //@{ + //------------------------------------- + + //! Return the type of image pixel values as a C string. + /** + Return a \c char* string containing the usual type name of the image pixel values + (i.e. a stringified version of the template parameter \c T). + \note + - The returned string may contain spaces (as in \c "unsigned char"). + - If the pixel type \c T does not correspond to a registered type, the string "unknown" is returned. + **/ + static const char* pixel_type() { + return cimg::type::string(); + } + + //! Return the number of image columns. + /** + Return the image width, i.e. the image dimension along the X-axis. + \note + - The width() of an empty image is equal to \c 0. + - width() is typically equal to \c 1 when considering images as \e vectors for matrix calculations. + - width() returns an \c int, although the image width is internally stored as an \c unsigned \c int. + Using an \c int is safer and prevents arithmetic traps possibly encountered when doing calculations involving + \c unsigned \c int variables. + Access to the initial \c unsigned \c int variable is possible (though not recommended) by + (*this)._width. + **/ + int width() const { + return (int)_width; + } + + //! Return the number of image rows. + /** + Return the image height, i.e. the image dimension along the Y-axis. + \note + - The height() of an empty image is equal to \c 0. + - height() returns an \c int, although the image height is internally stored as an \c unsigned \c int. + Using an \c int is safer and prevents arithmetic traps possibly encountered when doing calculations involving + \c unsigned \c int variables. + Access to the initial \c unsigned \c int variable is possible (though not recommended) by + (*this)._height. + **/ + int height() const { + return (int)_height; + } + + //! Return the number of image slices. + /** + Return the image depth, i.e. the image dimension along the Z-axis. + \note + - The depth() of an empty image is equal to \c 0. + - depth() is typically equal to \c 1 when considering usual 2d images. When depth()\c > \c 1, the image + is said to be \e volumetric. + - depth() returns an \c int, although the image depth is internally stored as an \c unsigned \c int. + Using an \c int is safer and prevents arithmetic traps possibly encountered when doing calculations involving + \c unsigned \c int variables. + Access to the initial \c unsigned \c int variable is possible (though not recommended) by + (*this)._depth. + **/ + int depth() const { + return (int)_depth; + } + + //! Return the number of image channels. + /** + Return the number of image channels, i.e. the image dimension along the C-axis. + \note + - The spectrum() of an empty image is equal to \c 0. + - spectrum() is typically equal to \c 1 when considering scalar-valued images, to \c 3 + for RGB-coded color images, and to \c 4 for RGBA-coded color images (with alpha-channel). + The number of channels of an image instance is not limited. The meaning of the pixel values is not linked + up to the number of channels (e.g. a 4-channel image may indifferently stands for a RGBA or CMYK color image). + - spectrum() returns an \c int, although the image spectrum is internally stored as an \c unsigned \c int. + Using an \c int is safer and prevents arithmetic traps possibly encountered when doing calculations involving + \c unsigned \c int variables. + Access to the initial \c unsigned \c int variable is possible (though not recommended) by + (*this)._spectrum. + **/ + int spectrum() const { + return (int)_spectrum; + } + + //! Return the total number of pixel values. + /** + Return width()*\ref height()*\ref depth()*\ref spectrum(), + i.e. the total number of values of type \c T in the pixel buffer of the image instance. + \note + - The size() of an empty image is equal to \c 0. + - The allocated memory size for a pixel buffer of a non-shared \c CImg instance is equal to + size()*sizeof(T). + \par Example + \code + const CImg img(100,100,1,3); // Construct new 100x100 color image. + if (img.size()==30000) // Test succeeds. + std::printf("Pixel buffer uses %lu bytes", + img.size()*sizeof(float)); + \endcode + **/ + ulongT size() const { + return (ulongT)_width*_height*_depth*_spectrum; + } + + //! Return a pointer to the first pixel value. + /** + Return a \c T*, or a \c const \c T* pointer to the first value in the pixel buffer of the image instance, + whether the instance is \c const or not. + \note + - The data() of an empty image is equal to \c 0 (null pointer). + - The allocated pixel buffer for the image instance starts from \c data() + and goes to data()+\ref size() - 1 (included). + - To get the pointer to one particular location of the pixel buffer, use + data(unsigned int,unsigned int,unsigned int,unsigned int) instead. + **/ + T* data() { + return _data; + } + + //! Return a pointer to the first pixel value \const. + const T* data() const { + return _data; + } + + //! Return a pointer to a located pixel value. + /** + Return a \c T*, or a \c const \c T* pointer to the value located at (\c x,\c y,\c z,\c c) in the pixel buffer + of the image instance, + whether the instance is \c const or not. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \note + - Writing \c img.data(x,y,z,c) is equivalent to &(img(x,y,z,c)). Thus, this method has the same + properties as operator()(unsigned int,unsigned int,unsigned int,unsigned int). + **/ +#if cimg_verbosity>=3 + T *data(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) { + const ulongT off = (ulongT)offset(x,y,z,c); + if (off>=size()) + cimg::warn(_cimg_instance + "data(): Invalid pointer request, at coordinates (%u,%u,%u,%u) [offset=%u].", + cimg_instance, + x,y,z,c,off); + return _data + off; + } + + //! Return a pointer to a located pixel value \const. + const T* data(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) const { + return const_cast*>(this)->data(x,y,z,c); + } +#else + T* data(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) { + return _data + x + (ulongT)y*_width + (ulongT)z*_width*_height + (ulongT)c*_width*_height*_depth; + } + + const T* data(const unsigned int x, const unsigned int y=0, const unsigned int z=0, const unsigned int c=0) const { + return _data + x + (ulongT)y*_width + (ulongT)z*_width*_height + (ulongT)c*_width*_height*_depth; + } +#endif + + //! Return the offset to a located pixel value, with respect to the beginning of the pixel buffer. + /** + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \note + - Writing \c img.data(x,y,z,c) is equivalent to &(img(x,y,z,c)) - img.data(). + Thus, this method has the same properties as operator()(unsigned int,unsigned int,unsigned int,unsigned int). + \par Example + \code + const CImg img(100,100,1,3); // Define a 100x100 RGB-color image. + const long off = img.offset(10,10,0,2); // Get the offset of the blue value of the pixel located at (10,10). + const float val = img[off]; // Get the blue value of this pixel. + \endcode + **/ + longT offset(const int x, const int y=0, const int z=0, const int c=0) const { + return x + (longT)y*_width + (longT)z*_width*_height + (longT)c*_width*_height*_depth; + } + + //! Return a CImg::iterator pointing to the first pixel value. + /** + \note + - Equivalent to data(). + - It has been mainly defined for compatibility with STL naming conventions. + **/ + iterator begin() { + return _data; + } + + //! Return a CImg::iterator pointing to the first value of the pixel buffer \const. + const_iterator begin() const { + return _data; + } + + //! Return a CImg::iterator pointing next to the last pixel value. + /** + \note + - Writing \c img.end() is equivalent to img.data() + img.size(). + - It has been mainly defined for compatibility with STL naming conventions. + \warning + - The returned iterator actually points to a value located \e outside the acceptable bounds of the pixel buffer. + Trying to read or write the content of the returned iterator will probably result in a crash. + Use it mainly as a strict upper bound for a CImg::iterator. + \par Example + \code + CImg img(100,100,1,3); // Define a 100x100 RGB color image. + // 'img.end()' used below as an upper bound for the iterator. + for (CImg::iterator it = img.begin(); it::iterator pointing next to the last pixel value \const. + const_iterator end() const { + return _data + size(); + } + + //! Return a reference to the first pixel value. + /** + \note + - Writing \c img.front() is equivalent to img[0], or img(0,0,0,0). + - It has been mainly defined for compatibility with STL naming conventions. + **/ + T& front() { + return *_data; + } + + //! Return a reference to the first pixel value \const. + const T& front() const { + return *_data; + } + + //! Return a reference to the last pixel value. + /** + \note + - Writing \c img.back() is equivalent to img[img.size() - 1], or + img(img.width() - 1,img.height() - 1,img.depth() - 1,img.spectrum() - 1). + - It has been mainly defined for compatibility with STL naming conventions. + **/ + T& back() { + return *(_data + size() - 1); + } + + //! Return a reference to the last pixel value \const. + const T& back() const { + return *(_data + size() - 1); + } + + //! Access to a pixel value at a specified offset, using Dirichlet boundary conditions. + /** + Return a reference to the pixel value of the image instance located at a specified \c offset, + or to a specified default value in case of out-of-bounds access. + \param offset Offset to the desired pixel value. + \param out_value Default value returned if \c offset is outside image bounds. + \note + - Writing \c img.at(offset,out_value) is similar to img[offset], except that if \c offset + is outside bounds (e.g. \c offset<0 or \c offset>=img.size()), a reference to a value \c out_value + is safely returned instead. + - Due to the additional boundary checking operation, this method is slower than operator()(). Use it when + you are \e not sure about the validity of the specified pixel offset. + **/ + T& at(const int offset, const T& out_value) { + return (offset<0 || offset>=(int)size())?(cimg::temporary(out_value)=out_value):(*this)[offset]; + } + + //! Access to a pixel value at a specified offset, using Dirichlet boundary conditions \const. + T at(const int offset, const T& out_value) const { + return (offset<0 || offset>=(int)size())?out_value:(*this)[offset]; + } + + //! Access to a pixel value at a specified offset, using Neumann boundary conditions. + /** + Return a reference to the pixel value of the image instance located at a specified \c offset, + or to the nearest pixel location in the image instance in case of out-of-bounds access. + \param offset Offset to the desired pixel value. + \note + - Similar to at(int,const T), except that an out-of-bounds access returns the value of the + nearest pixel in the image instance, regarding the specified offset, i.e. + - If \c offset<0, then \c img[0] is returned. + - If \c offset>=img.size(), then \c img[img.size() - 1] is returned. + - Due to the additional boundary checking operation, this method is slower than operator()(). Use it when + you are \e not sure about the validity of the specified pixel offset. + - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _at(int). + **/ + T& at(const int offset) { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "at(): Empty instance.", + cimg_instance); + return _at(offset); + } + + T& _at(const int offset) { + const unsigned int siz = (unsigned int)size(); + return (*this)[offset<0?0:(unsigned int)offset>=siz?siz - 1:offset]; + } + + //! Access to a pixel value at a specified offset, using Neumann boundary conditions \const. + const T& at(const int offset) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "at(): Empty instance.", + cimg_instance); + return _at(offset); + } + + const T& _at(const int offset) const { + const unsigned int siz = (unsigned int)size(); + return (*this)[offset<0?0:(unsigned int)offset>=siz?siz - 1:offset]; + } + + //! Access to a pixel value, using Dirichlet boundary conditions for the X-coordinate. + /** + Return a reference to the pixel value of the image instance located at (\c x,\c y,\c z,\c c), + or to a specified default value in case of out-of-bounds access along the X-axis. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \param out_value Default value returned if \c (\c x,\c y,\c z,\c c) is outside image bounds. + \note + - Similar to operator()(), except that an out-of-bounds access along the X-axis returns the specified value + \c out_value. + - Due to the additional boundary checking operation, this method is slower than operator()(). Use it when + you are \e not sure about the validity of the specified pixel coordinates. + \warning + - There is \e no boundary checking performed for the Y,Z and C-coordinates, so they must be inside image bounds. + **/ + T& atX(const int x, const int y, const int z, const int c, const T& out_value) { + return (x<0 || x>=width())?(cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); + } + + //! Access to a pixel value, using Dirichlet boundary conditions for the X-coordinate \const. + T atX(const int x, const int y, const int z, const int c, const T& out_value) const { + return (x<0 || x>=width())?out_value:(*this)(x,y,z,c); + } + + //! Access to a pixel value, using Neumann boundary conditions for the X-coordinate. + /** + Return a reference to the pixel value of the image instance located at (\c x,\c y,\c z,\c c), + or to the nearest pixel location in the image instance in case of out-of-bounds access along the X-axis. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \note + - Similar to at(int,int,int,int,const T), except that an out-of-bounds access returns the value of the + nearest pixel in the image instance, regarding the specified X-coordinate. + - Due to the additional boundary checking operation, this method is slower than operator()(). Use it when + you are \e not sure about the validity of the specified pixel coordinates. + - If you know your image instance is \e not empty, you may rather use the slightly faster method + \c _at(int,int,int,int). + \warning + - There is \e no boundary checking performed for the Y,Z and C-coordinates, so they must be inside image bounds. + **/ + T& atX(const int x, const int y=0, const int z=0, const int c=0) { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "atX(): Empty instance.", + cimg_instance); + return _atX(x,y,z,c); + } + + T& _atX(const int x, const int y=0, const int z=0, const int c=0) { + return (*this)(x<0?0:(x>=width()?width() - 1:x),y,z,c); + } + + //! Access to a pixel value, using Neumann boundary conditions for the X-coordinate \const. + const T& atX(const int x, const int y=0, const int z=0, const int c=0) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "atX(): Empty instance.", + cimg_instance); + return _atX(x,y,z,c); + } + + const T& _atX(const int x, const int y=0, const int z=0, const int c=0) const { + return (*this)(x<0?0:(x>=width()?width() - 1:x),y,z,c); + } + + //! Access to a pixel value, using Dirichlet boundary conditions for the X and Y-coordinates. + /** + Similar to atX(int,int,int,int,const T), except that boundary checking is performed both on X and Y-coordinates. + **/ + T& atXY(const int x, const int y, const int z, const int c, const T& out_value) { + return (x<0 || y<0 || x>=width() || y>=height())?(cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); + } + + //! Access to a pixel value, using Dirichlet boundary conditions for the X and Y coordinates \const. + T atXY(const int x, const int y, const int z, const int c, const T& out_value) const { + return (x<0 || y<0 || x>=width() || y>=height())?out_value:(*this)(x,y,z,c); + } + + //! Access to a pixel value, using Neumann boundary conditions for the X and Y-coordinates. + /** + Similar to atX(int,int,int,int), except that boundary checking is performed both on X and Y-coordinates. + \note + - If you know your image instance is \e not empty, you may rather use the slightly faster method + \c _atXY(int,int,int,int). + **/ + T& atXY(const int x, const int y, const int z=0, const int c=0) { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "atXY(): Empty instance.", + cimg_instance); + return _atXY(x,y,z,c); + } + + T& _atXY(const int x, const int y, const int z=0, const int c=0) { + return (*this)(cimg::cut(x,0,width() - 1), + cimg::cut(y,0,height() - 1),z,c); + } + + //! Access to a pixel value, using Neumann boundary conditions for the X and Y-coordinates \const. + const T& atXY(const int x, const int y, const int z=0, const int c=0) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "atXY(): Empty instance.", + cimg_instance); + return _atXY(x,y,z,c); + } + + const T& _atXY(const int x, const int y, const int z=0, const int c=0) const { + return (*this)(cimg::cut(x,0,width() - 1), + cimg::cut(y,0,height() - 1),z,c); + } + + //! Access to a pixel value, using Dirichlet boundary conditions for the X,Y and Z-coordinates. + /** + Similar to atX(int,int,int,int,const T), except that boundary checking is performed both on + X,Y and Z-coordinates. + **/ + T& atXYZ(const int x, const int y, const int z, const int c, const T& out_value) { + return (x<0 || y<0 || z<0 || x>=width() || y>=height() || z>=depth())? + (cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); + } + + //! Access to a pixel value, using Dirichlet boundary conditions for the X,Y and Z-coordinates \const. + T atXYZ(const int x, const int y, const int z, const int c, const T& out_value) const { + return (x<0 || y<0 || z<0 || x>=width() || y>=height() || z>=depth())?out_value:(*this)(x,y,z,c); + } + + //! Access to a pixel value, using Neumann boundary conditions for the X,Y and Z-coordinates. + /** + Similar to atX(int,int,int,int), except that boundary checking is performed both on X,Y and Z-coordinates. + \note + - If you know your image instance is \e not empty, you may rather use the slightly faster method + \c _atXYZ(int,int,int,int). + **/ + T& atXYZ(const int x, const int y, const int z, const int c=0) { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "atXYZ(): Empty instance.", + cimg_instance); + return _atXYZ(x,y,z,c); + } + + T& _atXYZ(const int x, const int y, const int z, const int c=0) { + return (*this)(cimg::cut(x,0,width() - 1), + cimg::cut(y,0,height() - 1), + cimg::cut(z,0,depth() - 1),c); + } + + //! Access to a pixel value, using Neumann boundary conditions for the X,Y and Z-coordinates \const. + const T& atXYZ(const int x, const int y, const int z, const int c=0) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "atXYZ(): Empty instance.", + cimg_instance); + return _atXYZ(x,y,z,c); + } + + const T& _atXYZ(const int x, const int y, const int z, const int c=0) const { + return (*this)(cimg::cut(x,0,width() - 1), + cimg::cut(y,0,height() - 1), + cimg::cut(z,0,depth() - 1),c); + } + + //! Access to a pixel value, using Dirichlet boundary conditions. + /** + Similar to atX(int,int,int,int,const T), except that boundary checking is performed on all + X,Y,Z and C-coordinates. + **/ + T& atXYZC(const int x, const int y, const int z, const int c, const T& out_value) { + return (x<0 || y<0 || z<0 || c<0 || x>=width() || y>=height() || z>=depth() || c>=spectrum())? + (cimg::temporary(out_value)=out_value):(*this)(x,y,z,c); + } + + //! Access to a pixel value, using Dirichlet boundary conditions \const. + T atXYZC(const int x, const int y, const int z, const int c, const T& out_value) const { + return (x<0 || y<0 || z<0 || c<0 || x>=width() || y>=height() || z>=depth() || c>=spectrum())?out_value: + (*this)(x,y,z,c); + } + + //! Access to a pixel value, using Neumann boundary conditions. + /** + Similar to atX(int,int,int,int), except that boundary checking is performed on all X,Y,Z and C-coordinates. + \note + - If you know your image instance is \e not empty, you may rather use the slightly faster method + \c _atXYZC(int,int,int,int). + **/ + T& atXYZC(const int x, const int y, const int z, const int c) { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "atXYZC(): Empty instance.", + cimg_instance); + return _atXYZC(x,y,z,c); + } + + T& _atXYZC(const int x, const int y, const int z, const int c) { + return (*this)(cimg::cut(x,0,width() - 1), + cimg::cut(y,0,height() - 1), + cimg::cut(z,0,depth() - 1), + cimg::cut(c,0,spectrum() - 1)); + } + + //! Access to a pixel value, using Neumann boundary conditions \const. + const T& atXYZC(const int x, const int y, const int z, const int c) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "atXYZC(): Empty instance.", + cimg_instance); + return _atXYZC(x,y,z,c); + } + + const T& _atXYZC(const int x, const int y, const int z, const int c) const { + return (*this)(cimg::cut(x,0,width() - 1), + cimg::cut(y,0,height() - 1), + cimg::cut(z,0,depth() - 1), + cimg::cut(c,0,spectrum() - 1)); + } + + //! Return pixel value, using linear interpolation and Dirichlet boundary conditions for the X-coordinate. + /** + Return a linearly-interpolated pixel value of the image instance located at (\c fx,\c y,\c z,\c c), + or a specified default value in case of out-of-bounds access along the X-axis. + \param fx X-coordinate of the pixel value (float-valued). + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \param out_value Default value returned if \c (\c fx,\c y,\c z,\c c) is outside image bounds. + \note + - Similar to atX(int,int,int,int,const T), except that the returned pixel value is approximated by + a linear interpolation along the X-axis, if corresponding coordinates are not integers. + - The type of the returned pixel value is extended to \c float, if the pixel type \c T is not float-valued. + \warning + - There is \e no boundary checking performed for the Y,Z and C-coordinates, so they must be inside image bounds. + **/ + Tfloat linear_atX(const float fx, const int y, const int z, const int c, const T& out_value) const { + const int + x = (int)fx - (fx>=0?0:1), nx = x + 1; + const float + dx = fx - x; + const Tfloat + Ic = (Tfloat)atX(x,y,z,c,out_value), In = (Tfloat)atXY(nx,y,z,c,out_value); + return Ic + dx*(In - Ic); + } + + //! Return pixel value, using linear interpolation and Neumann boundary conditions for the X-coordinate. + /** + Return a linearly-interpolated pixel value of the image instance located at (\c fx,\c y,\c z,\c c), + or the value of the nearest pixel location in the image instance in case of out-of-bounds access along + the X-axis. + \param fx X-coordinate of the pixel value (float-valued). + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \note + - Similar to linear_atX(float,int,int,int,const T) const, except that an out-of-bounds access returns + the value of the nearest pixel in the image instance, regarding the specified X-coordinate. + - If you know your image instance is \e not empty, you may rather use the slightly faster method + \c _linear_atX(float,int,int,int). + \warning + - There is \e no boundary checking performed for the Y,Z and C-coordinates, so they must be inside image bounds. + **/ + Tfloat linear_atX(const float fx, const int y=0, const int z=0, const int c=0) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "linear_atX(): Empty instance.", + cimg_instance); + + return _linear_atX(fx,y,z,c); + } + + Tfloat _linear_atX(const float fx, const int y=0, const int z=0, const int c=0) const { + const float + nfx = cimg::cut(fx,0,width() - 1); + const unsigned int + x = (unsigned int)nfx; + const float + dx = nfx - x; + const unsigned int + nx = dx>0?x + 1:x; + const Tfloat + Ic = (Tfloat)(*this)(x,y,z,c), In = (Tfloat)(*this)(nx,y,z,c); + return Ic + dx*(In - Ic); + } + + //! Return pixel value, using linear interpolation and Dirichlet boundary conditions for the X and Y-coordinates. + /** + Similar to linear_atX(float,int,int,int,const T) const, except that the linear interpolation and the + boundary checking are achieved both for X and Y-coordinates. + **/ + Tfloat linear_atXY(const float fx, const float fy, const int z, const int c, const T& out_value) const { + const int + x = (int)fx - (fx>=0?0:1), nx = x + 1, + y = (int)fy - (fy>=0?0:1), ny = y + 1; + const float + dx = fx - x, + dy = fy - y; + const Tfloat + Icc = (Tfloat)atXY(x,y,z,c,out_value), Inc = (Tfloat)atXY(nx,y,z,c,out_value), + Icn = (Tfloat)atXY(x,ny,z,c,out_value), Inn = (Tfloat)atXY(nx,ny,z,c,out_value); + return Icc + dx*(Inc - Icc + dy*(Icc + Inn - Icn - Inc)) + dy*(Icn - Icc); + } + + //! Return pixel value, using linear interpolation and Neumann boundary conditions for the X and Y-coordinates. + /** + Similar to linear_atX(float,int,int,int) const, except that the linear interpolation and the boundary checking + are achieved both for X and Y-coordinates. + \note + - If you know your image instance is \e not empty, you may rather use the slightly faster method + \c _linear_atXY(float,float,int,int). + **/ + Tfloat linear_atXY(const float fx, const float fy, const int z=0, const int c=0) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "linear_atXY(): Empty instance.", + cimg_instance); + + return _linear_atXY(fx,fy,z,c); + } + + Tfloat _linear_atXY(const float fx, const float fy, const int z=0, const int c=0) const { + const float + nfx = cimg::cut(fx,0,width() - 1), + nfy = cimg::cut(fy,0,height() - 1); + const unsigned int + x = (unsigned int)nfx, + y = (unsigned int)nfy; + const float + dx = nfx - x, + dy = nfy - y; + const unsigned int + nx = dx>0?x + 1:x, + ny = dy>0?y + 1:y; + const Tfloat + Icc = (Tfloat)(*this)(x,y,z,c), Inc = (Tfloat)(*this)(nx,y,z,c), + Icn = (Tfloat)(*this)(x,ny,z,c), Inn = (Tfloat)(*this)(nx,ny,z,c); + return Icc + dx*(Inc - Icc + dy*(Icc + Inn - Icn - Inc)) + dy*(Icn - Icc); + } + + //! Return pixel value, using linear interpolation and Dirichlet boundary conditions for the X,Y and Z-coordinates. + /** + Similar to linear_atX(float,int,int,int,const T) const, except that the linear interpolation and the + boundary checking are achieved both for X,Y and Z-coordinates. + **/ + Tfloat linear_atXYZ(const float fx, const float fy, const float fz, const int c, const T& out_value) const { + const int + x = (int)fx - (fx>=0?0:1), nx = x + 1, + y = (int)fy - (fy>=0?0:1), ny = y + 1, + z = (int)fz - (fz>=0?0:1), nz = z + 1; + const float + dx = fx - x, + dy = fy - y, + dz = fz - z; + const Tfloat + Iccc = (Tfloat)atXYZ(x,y,z,c,out_value), Incc = (Tfloat)atXYZ(nx,y,z,c,out_value), + Icnc = (Tfloat)atXYZ(x,ny,z,c,out_value), Innc = (Tfloat)atXYZ(nx,ny,z,c,out_value), + Iccn = (Tfloat)atXYZ(x,y,nz,c,out_value), Incn = (Tfloat)atXYZ(nx,y,nz,c,out_value), + Icnn = (Tfloat)atXYZ(x,ny,nz,c,out_value), Innn = (Tfloat)atXYZ(nx,ny,nz,c,out_value); + return Iccc + + dx*(Incc - Iccc + + dy*(Iccc + Innc - Icnc - Incc + + dz*(Iccn + Innn + Icnc + Incc - Icnn - Incn - Iccc - Innc)) + + dz*(Iccc + Incn - Iccn - Incc)) + + dy*(Icnc - Iccc + + dz*(Iccc + Icnn - Iccn - Icnc)) + + dz*(Iccn - Iccc); + } + + //! Return pixel value, using linear interpolation and Neumann boundary conditions for the X,Y and Z-coordinates. + /** + Similar to linear_atX(float,int,int,int) const, except that the linear interpolation and the boundary checking + are achieved both for X,Y and Z-coordinates. + \note + - If you know your image instance is \e not empty, you may rather use the slightly faster method + \c _linear_atXYZ(float,float,float,int). + **/ + Tfloat linear_atXYZ(const float fx, const float fy=0, const float fz=0, const int c=0) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "linear_atXYZ(): Empty instance.", + cimg_instance); + + return _linear_atXYZ(fx,fy,fz,c); + } + + Tfloat _linear_atXYZ(const float fx, const float fy=0, const float fz=0, const int c=0) const { + const float + nfx = cimg::cut(fx,0,width() - 1), + nfy = cimg::cut(fy,0,height() - 1), + nfz = cimg::cut(fz,0,depth() - 1); + const unsigned int + x = (unsigned int)nfx, + y = (unsigned int)nfy, + z = (unsigned int)nfz; + const float + dx = nfx - x, + dy = nfy - y, + dz = nfz - z; + const unsigned int + nx = dx>0?x + 1:x, + ny = dy>0?y + 1:y, + nz = dz>0?z + 1:z; + const Tfloat + Iccc = (Tfloat)(*this)(x,y,z,c), Incc = (Tfloat)(*this)(nx,y,z,c), + Icnc = (Tfloat)(*this)(x,ny,z,c), Innc = (Tfloat)(*this)(nx,ny,z,c), + Iccn = (Tfloat)(*this)(x,y,nz,c), Incn = (Tfloat)(*this)(nx,y,nz,c), + Icnn = (Tfloat)(*this)(x,ny,nz,c), Innn = (Tfloat)(*this)(nx,ny,nz,c); + return Iccc + + dx*(Incc - Iccc + + dy*(Iccc + Innc - Icnc - Incc + + dz*(Iccn + Innn + Icnc + Incc - Icnn - Incn - Iccc - Innc)) + + dz*(Iccc + Incn - Iccn - Incc)) + + dy*(Icnc - Iccc + + dz*(Iccc + Icnn - Iccn - Icnc)) + + dz*(Iccn - Iccc); + } + + //! Return pixel value, using linear interpolation and Dirichlet boundary conditions for all X,Y,Z,C-coordinates. + /** + Similar to linear_atX(float,int,int,int,const T) const, except that the linear interpolation and the + boundary checking are achieved for all X,Y,Z and C-coordinates. + **/ + Tfloat linear_atXYZC(const float fx, const float fy, const float fz, const float fc, const T& out_value) const { + const int + x = (int)fx - (fx>=0?0:1), nx = x + 1, + y = (int)fy - (fy>=0?0:1), ny = y + 1, + z = (int)fz - (fz>=0?0:1), nz = z + 1, + c = (int)fc - (fc>=0?0:1), nc = c + 1; + const float + dx = fx - x, + dy = fy - y, + dz = fz - z, + dc = fc - c; + const Tfloat + Icccc = (Tfloat)atXYZC(x,y,z,c,out_value), Inccc = (Tfloat)atXYZC(nx,y,z,c,out_value), + Icncc = (Tfloat)atXYZC(x,ny,z,c,out_value), Inncc = (Tfloat)atXYZC(nx,ny,z,c,out_value), + Iccnc = (Tfloat)atXYZC(x,y,nz,c,out_value), Incnc = (Tfloat)atXYZC(nx,y,nz,c,out_value), + Icnnc = (Tfloat)atXYZC(x,ny,nz,c,out_value), Innnc = (Tfloat)atXYZC(nx,ny,nz,c,out_value), + Icccn = (Tfloat)atXYZC(x,y,z,nc,out_value), Inccn = (Tfloat)atXYZC(nx,y,z,nc,out_value), + Icncn = (Tfloat)atXYZC(x,ny,z,nc,out_value), Inncn = (Tfloat)atXYZC(nx,ny,z,nc,out_value), + Iccnn = (Tfloat)atXYZC(x,y,nz,nc,out_value), Incnn = (Tfloat)atXYZC(nx,y,nz,nc,out_value), + Icnnn = (Tfloat)atXYZC(x,ny,nz,nc,out_value), Innnn = (Tfloat)atXYZC(nx,ny,nz,nc,out_value); + return Icccc + + dx*(Inccc - Icccc + + dy*(Icccc + Inncc - Icncc - Inccc + + dz*(Iccnc + Innnc + Icncc + Inccc - Icnnc - Incnc - Icccc - Inncc + + dc*(Iccnn + Innnn + Icncn + Inccn + Icnnc + Incnc + Icccc + Inncc - + Icnnn - Incnn - Icccn - Inncn - Iccnc - Innnc - Icncc - Inccc)) + + dc*(Icccn + Inncn + Icncc + Inccc - Icncn - Inccn - Icccc - Inncc)) + + dz*(Icccc + Incnc - Iccnc - Inccc + + dc*(Icccn + Incnn + Iccnc + Inccc - Iccnn - Inccn - Icccc - Incnc)) + + dc*(Icccc + Inccn - Inccc - Icccn)) + + dy*(Icncc - Icccc + + dz*(Icccc + Icnnc - Iccnc - Icncc + + dc*(Icccn + Icnnn + Iccnc + Icncc - Iccnn - Icncn - Icccc - Icnnc)) + + dc*(Icccc + Icncn - Icncc - Icccn)) + + dz*(Iccnc - Icccc + + dc*(Icccc + Iccnn - Iccnc - Icccn)) + + dc*(Icccn -Icccc); + } + + //! Return pixel value, using linear interpolation and Neumann boundary conditions for all X,Y,Z and C-coordinates. + /** + Similar to linear_atX(float,int,int,int) const, except that the linear interpolation and the boundary checking + are achieved for all X,Y,Z and C-coordinates. + \note + - If you know your image instance is \e not empty, you may rather use the slightly faster method + \c _linear_atXYZC(float,float,float,float). + **/ + Tfloat linear_atXYZC(const float fx, const float fy=0, const float fz=0, const float fc=0) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "linear_atXYZC(): Empty instance.", + cimg_instance); + + return _linear_atXYZC(fx,fy,fz,fc); + } + + Tfloat _linear_atXYZC(const float fx, const float fy=0, const float fz=0, const float fc=0) const { + const float + nfx = cimg::cut(fx,0,width() - 1), + nfy = cimg::cut(fy,0,height() - 1), + nfz = cimg::cut(fz,0,depth() - 1), + nfc = cimg::cut(fc,0,spectrum() - 1); + const unsigned int + x = (unsigned int)nfx, + y = (unsigned int)nfy, + z = (unsigned int)nfz, + c = (unsigned int)nfc; + const float + dx = nfx - x, + dy = nfy - y, + dz = nfz - z, + dc = nfc - c; + const unsigned int + nx = dx>0?x + 1:x, + ny = dy>0?y + 1:y, + nz = dz>0?z + 1:z, + nc = dc>0?c + 1:c; + const Tfloat + Icccc = (Tfloat)(*this)(x,y,z,c), Inccc = (Tfloat)(*this)(nx,y,z,c), + Icncc = (Tfloat)(*this)(x,ny,z,c), Inncc = (Tfloat)(*this)(nx,ny,z,c), + Iccnc = (Tfloat)(*this)(x,y,nz,c), Incnc = (Tfloat)(*this)(nx,y,nz,c), + Icnnc = (Tfloat)(*this)(x,ny,nz,c), Innnc = (Tfloat)(*this)(nx,ny,nz,c), + Icccn = (Tfloat)(*this)(x,y,z,nc), Inccn = (Tfloat)(*this)(nx,y,z,nc), + Icncn = (Tfloat)(*this)(x,ny,z,nc), Inncn = (Tfloat)(*this)(nx,ny,z,nc), + Iccnn = (Tfloat)(*this)(x,y,nz,nc), Incnn = (Tfloat)(*this)(nx,y,nz,nc), + Icnnn = (Tfloat)(*this)(x,ny,nz,nc), Innnn = (Tfloat)(*this)(nx,ny,nz,nc); + return Icccc + + dx*(Inccc - Icccc + + dy*(Icccc + Inncc - Icncc - Inccc + + dz*(Iccnc + Innnc + Icncc + Inccc - Icnnc - Incnc - Icccc - Inncc + + dc*(Iccnn + Innnn + Icncn + Inccn + Icnnc + Incnc + Icccc + Inncc - + Icnnn - Incnn - Icccn - Inncn - Iccnc - Innnc - Icncc - Inccc)) + + dc*(Icccn + Inncn + Icncc + Inccc - Icncn - Inccn - Icccc - Inncc)) + + dz*(Icccc + Incnc - Iccnc - Inccc + + dc*(Icccn + Incnn + Iccnc + Inccc - Iccnn - Inccn - Icccc - Incnc)) + + dc*(Icccc + Inccn - Inccc - Icccn)) + + dy*(Icncc - Icccc + + dz*(Icccc + Icnnc - Iccnc - Icncc + + dc*(Icccn + Icnnn + Iccnc + Icncc - Iccnn - Icncn - Icccc - Icnnc)) + + dc*(Icccc + Icncn - Icncc - Icccn)) + + dz*(Iccnc - Icccc + + dc*(Icccc + Iccnn - Iccnc - Icccn)) + + dc*(Icccn - Icccc); + } + + //! Return pixel value, using cubic interpolation and Dirichlet boundary conditions for the X-coordinate. + /** + Return a cubicly-interpolated pixel value of the image instance located at (\c fx,\c y,\c z,\c c), + or a specified default value in case of out-of-bounds access along the X-axis. + The cubic interpolation uses Hermite splines. + \param fx d X-coordinate of the pixel value (float-valued). + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \param out_value Default value returned if \c (\c fx,\c y,\c z,\c c) is outside image bounds. + \note + - Similar to linear_atX(float,int,int,int,const T) const, except that the returned pixel value is + approximated by a \e cubic interpolation along the X-axis. + - The type of the returned pixel value is extended to \c float, if the pixel type \c T is not float-valued. + \warning + - There is \e no boundary checking performed for the Y,Z and C-coordinates, so they must be inside image bounds. + **/ + Tfloat cubic_atX(const float fx, const int y, const int z, const int c, const T& out_value) const { + const int + x = (int)fx - (fx>=0?0:1), px = x - 1, nx = x + 1, ax = x + 2; + const float + dx = fx - x; + const Tfloat + Ip = (Tfloat)atX(px,y,z,c,out_value), Ic = (Tfloat)atX(x,y,z,c,out_value), + In = (Tfloat)atX(nx,y,z,c,out_value), Ia = (Tfloat)atX(ax,y,z,c,out_value); + return Ic + 0.5f*(dx*(-Ip + In) + dx*dx*(2*Ip - 5*Ic + 4*In - Ia) + dx*dx*dx*(-Ip + 3*Ic - 3*In + Ia)); + } + + //! Return clamped pixel value, using cubic interpolation and Dirichlet boundary conditions for the X-coordinate. + /** + Similar to cubic_atX(float,int,int,int,const T) const, except that the return value is clamped to stay in the + min/max range of the datatype \c T. + **/ + T cubic_cut_atX(const float fx, const int y, const int z, const int c, const T& out_value) const { + return cimg::type::cut(cubic_atX(fx,y,z,c,out_value)); + } + + //! Return pixel value, using cubic interpolation and Neumann boundary conditions for the X-coordinate. + /** + Return a cubicly-interpolated pixel value of the image instance located at (\c fx,\c y,\c z,\c c), + or the value of the nearest pixel location in the image instance in case of out-of-bounds access + along the X-axis. The cubic interpolation uses Hermite splines. + \param fx X-coordinate of the pixel value (float-valued). + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \note + - Similar to cubic_atX(float,int,int,int,const T) const, except that the returned pixel value is + approximated by a cubic interpolation along the X-axis. + - If you know your image instance is \e not empty, you may rather use the slightly faster method + \c _cubic_atX(float,int,int,int). + \warning + - There is \e no boundary checking performed for the Y,Z and C-coordinates, so they must be inside image bounds. + **/ + Tfloat cubic_atX(const float fx, const int y=0, const int z=0, const int c=0) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "cubic_atX(): Empty instance.", + cimg_instance); + return _cubic_atX(fx,y,z,c); + } + + Tfloat _cubic_atX(const float fx, const int y=0, const int z=0, const int c=0) const { + const float + nfx = cimg::cut(fx,0,width() - 1); + const int + x = (int)nfx; + const float + dx = nfx - x; + const int + px = x - 1<0?0:x - 1, nx = dx>0?x + 1:x, ax = x + 2>=width()?width() - 1:x + 2; + const Tfloat + Ip = (Tfloat)(*this)(px,y,z,c), Ic = (Tfloat)(*this)(x,y,z,c), + In = (Tfloat)(*this)(nx,y,z,c), Ia = (Tfloat)(*this)(ax,y,z,c); + return Ic + 0.5f*(dx*(-Ip + In) + dx*dx*(2*Ip - 5*Ic + 4*In - Ia) + dx*dx*dx*(-Ip + 3*Ic - 3*In + Ia)); + } + + //! Return clamped pixel value, using cubic interpolation and Neumann boundary conditions for the X-coordinate. + /** + Similar to cubic_atX(float,int,int,int) const, except that the return value is clamped to stay in the + min/max range of the datatype \c T. + **/ + T cubic_cut_atX(const float fx, const int y, const int z, const int c) const { + return cimg::type::cut(cubic_atX(fx,y,z,c)); + } + + T _cubic_cut_atX(const float fx, const int y, const int z, const int c) const { + return cimg::type::cut(_cubic_atX(fx,y,z,c)); + } + + //! Return pixel value, using cubic interpolation and Dirichlet boundary conditions for the X and Y-coordinates. + /** + Similar to cubic_atX(float,int,int,int,const T) const, except that the cubic interpolation and boundary checking + are achieved both for X and Y-coordinates. + **/ + Tfloat cubic_atXY(const float fx, const float fy, const int z, const int c, const T& out_value) const { + const int + x = (int)fx - (fx>=0?0:1), px = x - 1, nx = x + 1, ax = x + 2, + y = (int)fy - (fy>=0?0:1), py = y - 1, ny = y + 1, ay = y + 2; + const float dx = fx - x, dy = fy - y; + const Tfloat + Ipp = (Tfloat)atXY(px,py,z,c,out_value), Icp = (Tfloat)atXY(x,py,z,c,out_value), + Inp = (Tfloat)atXY(nx,py,z,c,out_value), Iap = (Tfloat)atXY(ax,py,z,c,out_value), + Ip = Icp + 0.5f*(dx*(-Ipp + Inp) + dx*dx*(2*Ipp - 5*Icp + 4*Inp - Iap) + dx*dx*dx*(-Ipp + 3*Icp - 3*Inp + Iap)), + Ipc = (Tfloat)atXY(px,y,z,c,out_value), Icc = (Tfloat)atXY(x, y,z,c,out_value), + Inc = (Tfloat)atXY(nx,y,z,c,out_value), Iac = (Tfloat)atXY(ax,y,z,c,out_value), + Ic = Icc + 0.5f*(dx*(-Ipc + Inc) + dx*dx*(2*Ipc - 5*Icc + 4*Inc - Iac) + dx*dx*dx*(-Ipc + 3*Icc - 3*Inc + Iac)), + Ipn = (Tfloat)atXY(px,ny,z,c,out_value), Icn = (Tfloat)atXY(x,ny,z,c,out_value), + Inn = (Tfloat)atXY(nx,ny,z,c,out_value), Ian = (Tfloat)atXY(ax,ny,z,c,out_value), + In = Icn + 0.5f*(dx*(-Ipn + Inn) + dx*dx*(2*Ipn - 5*Icn + 4*Inn - Ian) + dx*dx*dx*(-Ipn + 3*Icn - 3*Inn + Ian)), + Ipa = (Tfloat)atXY(px,ay,z,c,out_value), Ica = (Tfloat)atXY(x,ay,z,c,out_value), + Ina = (Tfloat)atXY(nx,ay,z,c,out_value), Iaa = (Tfloat)atXY(ax,ay,z,c,out_value), + Ia = Ica + 0.5f*(dx*(-Ipa + Ina) + dx*dx*(2*Ipa - 5*Ica + 4*Ina - Iaa) + dx*dx*dx*(-Ipa + 3*Ica - 3*Ina + Iaa)); + return Ic + 0.5f*(dy*(-Ip + In) + dy*dy*(2*Ip - 5*Ic + 4*In - Ia) + dy*dy*dy*(-Ip + 3*Ic - 3*In + Ia)); + } + + //! Return clamped pixel value, using cubic interpolation and Dirichlet boundary conditions for the X,Y-coordinates. + /** + Similar to cubic_atXY(float,float,int,int,const T) const, except that the return value is clamped to stay in the + min/max range of the datatype \c T. + **/ + T cubic_cut_atXY(const float fx, const float fy, const int z, const int c, const T& out_value) const { + return cimg::type::cut(cubic_atXY(fx,fy,z,c,out_value)); + } + + //! Return pixel value, using cubic interpolation and Neumann boundary conditions for the X and Y-coordinates. + /** + Similar to cubic_atX(float,int,int,int) const, except that the cubic interpolation and boundary checking + are achieved for both X and Y-coordinates. + \note + - If you know your image instance is \e not empty, you may rather use the slightly faster method + \c _cubic_atXY(float,float,int,int). + **/ + Tfloat cubic_atXY(const float fx, const float fy, const int z=0, const int c=0) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "cubic_atXY(): Empty instance.", + cimg_instance); + return _cubic_atXY(fx,fy,z,c); + } + + Tfloat _cubic_atXY(const float fx, const float fy, const int z=0, const int c=0) const { + const float + nfx = cimg::cut(fx,0,width() - 1), + nfy = cimg::cut(fy,0,height() - 1); + const int x = (int)nfx, y = (int)nfy; + const float dx = nfx - x, dy = nfy - y; + const int + px = x - 1<0?0:x - 1, nx = dx>0?x + 1:x, ax = x + 2>=width()?width() - 1:x + 2, + py = y - 1<0?0:y - 1, ny = dy>0?y + 1:y, ay = y + 2>=height()?height() - 1:y + 2; + const Tfloat + Ipp = (Tfloat)(*this)(px,py,z,c), Icp = (Tfloat)(*this)(x,py,z,c), Inp = (Tfloat)(*this)(nx,py,z,c), + Iap = (Tfloat)(*this)(ax,py,z,c), + Ip = Icp + 0.5f*(dx*(-Ipp + Inp) + dx*dx*(2*Ipp - 5*Icp + 4*Inp - Iap) + dx*dx*dx*(-Ipp + 3*Icp - 3*Inp + Iap)), + Ipc = (Tfloat)(*this)(px,y,z,c), Icc = (Tfloat)(*this)(x, y,z,c), Inc = (Tfloat)(*this)(nx,y,z,c), + Iac = (Tfloat)(*this)(ax,y,z,c), + Ic = Icc + 0.5f*(dx*(-Ipc + Inc) + dx*dx*(2*Ipc - 5*Icc + 4*Inc - Iac) + dx*dx*dx*(-Ipc + 3*Icc - 3*Inc + Iac)), + Ipn = (Tfloat)(*this)(px,ny,z,c), Icn = (Tfloat)(*this)(x,ny,z,c), Inn = (Tfloat)(*this)(nx,ny,z,c), + Ian = (Tfloat)(*this)(ax,ny,z,c), + In = Icn + 0.5f*(dx*(-Ipn + Inn) + dx*dx*(2*Ipn - 5*Icn + 4*Inn - Ian) + dx*dx*dx*(-Ipn + 3*Icn - 3*Inn + Ian)), + Ipa = (Tfloat)(*this)(px,ay,z,c), Ica = (Tfloat)(*this)(x,ay,z,c), Ina = (Tfloat)(*this)(nx,ay,z,c), + Iaa = (Tfloat)(*this)(ax,ay,z,c), + Ia = Ica + 0.5f*(dx*(-Ipa + Ina) + dx*dx*(2*Ipa - 5*Ica + 4*Ina - Iaa) + dx*dx*dx*(-Ipa + 3*Ica - 3*Ina + Iaa)); + return Ic + 0.5f*(dy*(-Ip + In) + dy*dy*(2*Ip - 5*Ic + 4*In - Ia) + dy*dy*dy*(-Ip + 3*Ic - 3*In + Ia)); + } + + //! Return clamped pixel value, using cubic interpolation and Neumann boundary conditions for the X,Y-coordinates. + /** + Similar to cubic_atXY(float,float,int,int) const, except that the return value is clamped to stay in the + min/max range of the datatype \c T. + **/ + T cubic_cut_atXY(const float fx, const float fy, const int z, const int c) const { + return cimg::type::cut(cubic_atXY(fx,fy,z,c)); + } + + T _cubic_cut_atXY(const float fx, const float fy, const int z, const int c) const { + return cimg::type::cut(_cubic_atXY(fx,fy,z,c)); + } + + //! Return pixel value, using cubic interpolation and Dirichlet boundary conditions for the X,Y and Z-coordinates. + /** + Similar to cubic_atX(float,int,int,int,const T) const, except that the cubic interpolation and boundary checking + are achieved both for X,Y and Z-coordinates. + **/ + Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c, const T& out_value) const { + const int + x = (int)fx - (fx>=0?0:1), px = x - 1, nx = x + 1, ax = x + 2, + y = (int)fy - (fy>=0?0:1), py = y - 1, ny = y + 1, ay = y + 2, + z = (int)fz - (fz>=0?0:1), pz = z - 1, nz = z + 1, az = z + 2; + const float dx = fx - x, dy = fy - y, dz = fz - z; + const Tfloat + Ippp = (Tfloat)atXYZ(px,py,pz,c,out_value), Icpp = (Tfloat)atXYZ(x,py,pz,c,out_value), + Inpp = (Tfloat)atXYZ(nx,py,pz,c,out_value), Iapp = (Tfloat)atXYZ(ax,py,pz,c,out_value), + Ipp = Icpp + 0.5f*(dx*(-Ippp + Inpp) + dx*dx*(2*Ippp - 5*Icpp + 4*Inpp - Iapp) + + dx*dx*dx*(-Ippp + 3*Icpp - 3*Inpp + Iapp)), + Ipcp = (Tfloat)atXYZ(px,y,pz,c,out_value), Iccp = (Tfloat)atXYZ(x, y,pz,c,out_value), + Incp = (Tfloat)atXYZ(nx,y,pz,c,out_value), Iacp = (Tfloat)atXYZ(ax,y,pz,c,out_value), + Icp = Iccp + 0.5f*(dx*(-Ipcp + Incp) + dx*dx*(2*Ipcp - 5*Iccp + 4*Incp - Iacp) + + dx*dx*dx*(-Ipcp + 3*Iccp - 3*Incp + Iacp)), + Ipnp = (Tfloat)atXYZ(px,ny,pz,c,out_value), Icnp = (Tfloat)atXYZ(x,ny,pz,c,out_value), + Innp = (Tfloat)atXYZ(nx,ny,pz,c,out_value), Ianp = (Tfloat)atXYZ(ax,ny,pz,c,out_value), + Inp = Icnp + 0.5f*(dx*(-Ipnp + Innp) + dx*dx*(2*Ipnp - 5*Icnp + 4*Innp - Ianp) + + dx*dx*dx*(-Ipnp + 3*Icnp - 3*Innp + Ianp)), + Ipap = (Tfloat)atXYZ(px,ay,pz,c,out_value), Icap = (Tfloat)atXYZ(x,ay,pz,c,out_value), + Inap = (Tfloat)atXYZ(nx,ay,pz,c,out_value), Iaap = (Tfloat)atXYZ(ax,ay,pz,c,out_value), + Iap = Icap + 0.5f*(dx*(-Ipap + Inap) + dx*dx*(2*Ipap - 5*Icap + 4*Inap - Iaap) + + dx*dx*dx*(-Ipap + 3*Icap - 3*Inap + Iaap)), + Ip = Icp + 0.5f*(dy*(-Ipp + Inp) + dy*dy*(2*Ipp - 5*Icp + 4*Inp - Iap) + + dy*dy*dy*(-Ipp + 3*Icp - 3*Inp + Iap)), + Ippc = (Tfloat)atXYZ(px,py,z,c,out_value), Icpc = (Tfloat)atXYZ(x,py,z,c,out_value), + Inpc = (Tfloat)atXYZ(nx,py,z,c,out_value), Iapc = (Tfloat)atXYZ(ax,py,z,c,out_value), + Ipc = Icpc + 0.5f*(dx*(-Ippc + Inpc) + dx*dx*(2*Ippc - 5*Icpc + 4*Inpc - Iapc) + + dx*dx*dx*(-Ippc + 3*Icpc - 3*Inpc + Iapc)), + Ipcc = (Tfloat)atXYZ(px,y,z,c,out_value), Iccc = (Tfloat)atXYZ(x, y,z,c,out_value), + Incc = (Tfloat)atXYZ(nx,y,z,c,out_value), Iacc = (Tfloat)atXYZ(ax,y,z,c,out_value), + Icc = Iccc + 0.5f*(dx*(-Ipcc + Incc) + dx*dx*(2*Ipcc - 5*Iccc + 4*Incc - Iacc) + + dx*dx*dx*(-Ipcc + 3*Iccc - 3*Incc + Iacc)), + Ipnc = (Tfloat)atXYZ(px,ny,z,c,out_value), Icnc = (Tfloat)atXYZ(x,ny,z,c,out_value), + Innc = (Tfloat)atXYZ(nx,ny,z,c,out_value), Ianc = (Tfloat)atXYZ(ax,ny,z,c,out_value), + Inc = Icnc + 0.5f*(dx*(-Ipnc + Innc) + dx*dx*(2*Ipnc - 5*Icnc + 4*Innc - Ianc) + + dx*dx*dx*(-Ipnc + 3*Icnc - 3*Innc + Ianc)), + Ipac = (Tfloat)atXYZ(px,ay,z,c,out_value), Icac = (Tfloat)atXYZ(x,ay,z,c,out_value), + Inac = (Tfloat)atXYZ(nx,ay,z,c,out_value), Iaac = (Tfloat)atXYZ(ax,ay,z,c,out_value), + Iac = Icac + 0.5f*(dx*(-Ipac + Inac) + dx*dx*(2*Ipac - 5*Icac + 4*Inac - Iaac) + + dx*dx*dx*(-Ipac + 3*Icac - 3*Inac + Iaac)), + Ic = Icc + 0.5f*(dy*(-Ipc + Inc) + dy*dy*(2*Ipc - 5*Icc + 4*Inc - Iac) + + dy*dy*dy*(-Ipc + 3*Icc - 3*Inc + Iac)), + Ippn = (Tfloat)atXYZ(px,py,nz,c,out_value), Icpn = (Tfloat)atXYZ(x,py,nz,c,out_value), + Inpn = (Tfloat)atXYZ(nx,py,nz,c,out_value), Iapn = (Tfloat)atXYZ(ax,py,nz,c,out_value), + Ipn = Icpn + 0.5f*(dx*(-Ippn + Inpn) + dx*dx*(2*Ippn - 5*Icpn + 4*Inpn - Iapn) + + dx*dx*dx*(-Ippn + 3*Icpn - 3*Inpn + Iapn)), + Ipcn = (Tfloat)atXYZ(px,y,nz,c,out_value), Iccn = (Tfloat)atXYZ(x, y,nz,c,out_value), + Incn = (Tfloat)atXYZ(nx,y,nz,c,out_value), Iacn = (Tfloat)atXYZ(ax,y,nz,c,out_value), + Icn = Iccn + 0.5f*(dx*(-Ipcn + Incn) + dx*dx*(2*Ipcn - 5*Iccn + 4*Incn - Iacn) + + dx*dx*dx*(-Ipcn + 3*Iccn - 3*Incn + Iacn)), + Ipnn = (Tfloat)atXYZ(px,ny,nz,c,out_value), Icnn = (Tfloat)atXYZ(x,ny,nz,c,out_value), + Innn = (Tfloat)atXYZ(nx,ny,nz,c,out_value), Iann = (Tfloat)atXYZ(ax,ny,nz,c,out_value), + Inn = Icnn + 0.5f*(dx*(-Ipnn + Innn) + dx*dx*(2*Ipnn - 5*Icnn + 4*Innn - Iann) + + dx*dx*dx*(-Ipnn + 3*Icnn - 3*Innn + Iann)), + Ipan = (Tfloat)atXYZ(px,ay,nz,c,out_value), Ican = (Tfloat)atXYZ(x,ay,nz,c,out_value), + Inan = (Tfloat)atXYZ(nx,ay,nz,c,out_value), Iaan = (Tfloat)atXYZ(ax,ay,nz,c,out_value), + Ian = Ican + 0.5f*(dx*(-Ipan + Inan) + dx*dx*(2*Ipan - 5*Ican + 4*Inan - Iaan) + + dx*dx*dx*(-Ipan + 3*Ican - 3*Inan + Iaan)), + In = Icn + 0.5f*(dy*(-Ipn + Inn) + dy*dy*(2*Ipn - 5*Icn + 4*Inn - Ian) + + dy*dy*dy*(-Ipn + 3*Icn - 3*Inn + Ian)), + Ippa = (Tfloat)atXYZ(px,py,az,c,out_value), Icpa = (Tfloat)atXYZ(x,py,az,c,out_value), + Inpa = (Tfloat)atXYZ(nx,py,az,c,out_value), Iapa = (Tfloat)atXYZ(ax,py,az,c,out_value), + Ipa = Icpa + 0.5f*(dx*(-Ippa + Inpa) + dx*dx*(2*Ippa - 5*Icpa + 4*Inpa - Iapa) + + dx*dx*dx*(-Ippa + 3*Icpa - 3*Inpa + Iapa)), + Ipca = (Tfloat)atXYZ(px,y,az,c,out_value), Icca = (Tfloat)atXYZ(x, y,az,c,out_value), + Inca = (Tfloat)atXYZ(nx,y,az,c,out_value), Iaca = (Tfloat)atXYZ(ax,y,az,c,out_value), + Ica = Icca + 0.5f*(dx*(-Ipca + Inca) + dx*dx*(2*Ipca - 5*Icca + 4*Inca - Iaca) + + dx*dx*dx*(-Ipca + 3*Icca - 3*Inca + Iaca)), + Ipna = (Tfloat)atXYZ(px,ny,az,c,out_value), Icna = (Tfloat)atXYZ(x,ny,az,c,out_value), + Inna = (Tfloat)atXYZ(nx,ny,az,c,out_value), Iana = (Tfloat)atXYZ(ax,ny,az,c,out_value), + Ina = Icna + 0.5f*(dx*(-Ipna + Inna) + dx*dx*(2*Ipna - 5*Icna + 4*Inna - Iana) + + dx*dx*dx*(-Ipna + 3*Icna - 3*Inna + Iana)), + Ipaa = (Tfloat)atXYZ(px,ay,az,c,out_value), Icaa = (Tfloat)atXYZ(x,ay,az,c,out_value), + Inaa = (Tfloat)atXYZ(nx,ay,az,c,out_value), Iaaa = (Tfloat)atXYZ(ax,ay,az,c,out_value), + Iaa = Icaa + 0.5f*(dx*(-Ipaa + Inaa) + dx*dx*(2*Ipaa - 5*Icaa + 4*Inaa - Iaaa) + + dx*dx*dx*(-Ipaa + 3*Icaa - 3*Inaa + Iaaa)), + Ia = Ica + 0.5f*(dy*(-Ipa + Ina) + dy*dy*(2*Ipa - 5*Ica + 4*Ina - Iaa) + + dy*dy*dy*(-Ipa + 3*Ica - 3*Ina + Iaa)); + return Ic + 0.5f*(dz*(-Ip + In) + dz*dz*(2*Ip - 5*Ic + 4*In - Ia) + dz*dz*dz*(-Ip + 3*Ic - 3*In + Ia)); + } + + //! Return clamped pixel value, using cubic interpolation and Dirichlet boundary conditions for the XYZ-coordinates. + /** + Similar to cubic_atXYZ(float,float,float,int,const T) const, except that the return value is clamped to stay + in the min/max range of the datatype \c T. + **/ + T cubic_cut_atXYZ(const float fx, const float fy, const float fz, const int c, const T& out_value) const { + return cimg::type::cut(cubic_atXYZ(fx,fy,fz,c,out_value)); + } + + //! Return pixel value, using cubic interpolation and Neumann boundary conditions for the X,Y and Z-coordinates. + /** + Similar to cubic_atX(float,int,int,int) const, except that the cubic interpolation and boundary checking + are achieved both for X,Y and Z-coordinates. + \note + - If you know your image instance is \e not empty, you may rather use the slightly faster method + \c _cubic_atXYZ(float,float,float,int). + **/ + Tfloat cubic_atXYZ(const float fx, const float fy, const float fz, const int c=0) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "cubic_atXYZ(): Empty instance.", + cimg_instance); + return _cubic_atXYZ(fx,fy,fz,c); + } + + Tfloat _cubic_atXYZ(const float fx, const float fy, const float fz, const int c=0) const { + const float + nfx = cimg::cut(fx,0,width() - 1), + nfy = cimg::cut(fy,0,height() - 1), + nfz = cimg::cut(fz,0,depth() - 1); + const int x = (int)nfx, y = (int)nfy, z = (int)nfz; + const float dx = nfx - x, dy = nfy - y, dz = nfz - z; + const int + px = x - 1<0?0:x - 1, nx = dx>0?x + 1:x, ax = x + 2>=width()?width() - 1:x + 2, + py = y - 1<0?0:y - 1, ny = dy>0?y + 1:y, ay = y + 2>=height()?height() - 1:y + 2, + pz = z - 1<0?0:z - 1, nz = dz>0?z + 1:z, az = z + 2>=depth()?depth() - 1:z + 2; + const Tfloat + Ippp = (Tfloat)(*this)(px,py,pz,c), Icpp = (Tfloat)(*this)(x,py,pz,c), + Inpp = (Tfloat)(*this)(nx,py,pz,c), Iapp = (Tfloat)(*this)(ax,py,pz,c), + Ipp = Icpp + 0.5f*(dx*(-Ippp + Inpp) + dx*dx*(2*Ippp - 5*Icpp + 4*Inpp - Iapp) + + dx*dx*dx*(-Ippp + 3*Icpp - 3*Inpp + Iapp)), + Ipcp = (Tfloat)(*this)(px,y,pz,c), Iccp = (Tfloat)(*this)(x, y,pz,c), + Incp = (Tfloat)(*this)(nx,y,pz,c), Iacp = (Tfloat)(*this)(ax,y,pz,c), + Icp = Iccp + 0.5f*(dx*(-Ipcp + Incp) + dx*dx*(2*Ipcp - 5*Iccp + 4*Incp - Iacp) + + dx*dx*dx*(-Ipcp + 3*Iccp - 3*Incp + Iacp)), + Ipnp = (Tfloat)(*this)(px,ny,pz,c), Icnp = (Tfloat)(*this)(x,ny,pz,c), + Innp = (Tfloat)(*this)(nx,ny,pz,c), Ianp = (Tfloat)(*this)(ax,ny,pz,c), + Inp = Icnp + 0.5f*(dx*(-Ipnp + Innp) + dx*dx*(2*Ipnp - 5*Icnp + 4*Innp - Ianp) + + dx*dx*dx*(-Ipnp + 3*Icnp - 3*Innp + Ianp)), + Ipap = (Tfloat)(*this)(px,ay,pz,c), Icap = (Tfloat)(*this)(x,ay,pz,c), + Inap = (Tfloat)(*this)(nx,ay,pz,c), Iaap = (Tfloat)(*this)(ax,ay,pz,c), + Iap = Icap + 0.5f*(dx*(-Ipap + Inap) + dx*dx*(2*Ipap - 5*Icap + 4*Inap - Iaap) + + dx*dx*dx*(-Ipap + 3*Icap - 3*Inap + Iaap)), + Ip = Icp + 0.5f*(dy*(-Ipp + Inp) + dy*dy*(2*Ipp - 5*Icp + 4*Inp - Iap) + + dy*dy*dy*(-Ipp + 3*Icp - 3*Inp + Iap)), + Ippc = (Tfloat)(*this)(px,py,z,c), Icpc = (Tfloat)(*this)(x,py,z,c), + Inpc = (Tfloat)(*this)(nx,py,z,c), Iapc = (Tfloat)(*this)(ax,py,z,c), + Ipc = Icpc + 0.5f*(dx*(-Ippc + Inpc) + dx*dx*(2*Ippc - 5*Icpc + 4*Inpc - Iapc) + + dx*dx*dx*(-Ippc + 3*Icpc - 3*Inpc + Iapc)), + Ipcc = (Tfloat)(*this)(px,y,z,c), Iccc = (Tfloat)(*this)(x, y,z,c), + Incc = (Tfloat)(*this)(nx,y,z,c), Iacc = (Tfloat)(*this)(ax,y,z,c), + Icc = Iccc + 0.5f*(dx*(-Ipcc + Incc) + dx*dx*(2*Ipcc - 5*Iccc + 4*Incc - Iacc) + + dx*dx*dx*(-Ipcc + 3*Iccc - 3*Incc + Iacc)), + Ipnc = (Tfloat)(*this)(px,ny,z,c), Icnc = (Tfloat)(*this)(x,ny,z,c), + Innc = (Tfloat)(*this)(nx,ny,z,c), Ianc = (Tfloat)(*this)(ax,ny,z,c), + Inc = Icnc + 0.5f*(dx*(-Ipnc + Innc) + dx*dx*(2*Ipnc - 5*Icnc + 4*Innc - Ianc) + + dx*dx*dx*(-Ipnc + 3*Icnc - 3*Innc + Ianc)), + Ipac = (Tfloat)(*this)(px,ay,z,c), Icac = (Tfloat)(*this)(x,ay,z,c), + Inac = (Tfloat)(*this)(nx,ay,z,c), Iaac = (Tfloat)(*this)(ax,ay,z,c), + Iac = Icac + 0.5f*(dx*(-Ipac + Inac) + dx*dx*(2*Ipac - 5*Icac + 4*Inac - Iaac) + + dx*dx*dx*(-Ipac + 3*Icac - 3*Inac + Iaac)), + Ic = Icc + 0.5f*(dy*(-Ipc + Inc) + dy*dy*(2*Ipc - 5*Icc + 4*Inc - Iac) + + dy*dy*dy*(-Ipc + 3*Icc - 3*Inc + Iac)), + Ippn = (Tfloat)(*this)(px,py,nz,c), Icpn = (Tfloat)(*this)(x,py,nz,c), + Inpn = (Tfloat)(*this)(nx,py,nz,c), Iapn = (Tfloat)(*this)(ax,py,nz,c), + Ipn = Icpn + 0.5f*(dx*(-Ippn + Inpn) + dx*dx*(2*Ippn - 5*Icpn + 4*Inpn - Iapn) + + dx*dx*dx*(-Ippn + 3*Icpn - 3*Inpn + Iapn)), + Ipcn = (Tfloat)(*this)(px,y,nz,c), Iccn = (Tfloat)(*this)(x, y,nz,c), + Incn = (Tfloat)(*this)(nx,y,nz,c), Iacn = (Tfloat)(*this)(ax,y,nz,c), + Icn = Iccn + 0.5f*(dx*(-Ipcn + Incn) + dx*dx*(2*Ipcn - 5*Iccn + 4*Incn - Iacn) + + dx*dx*dx*(-Ipcn + 3*Iccn - 3*Incn + Iacn)), + Ipnn = (Tfloat)(*this)(px,ny,nz,c), Icnn = (Tfloat)(*this)(x,ny,nz,c), + Innn = (Tfloat)(*this)(nx,ny,nz,c), Iann = (Tfloat)(*this)(ax,ny,nz,c), + Inn = Icnn + 0.5f*(dx*(-Ipnn + Innn) + dx*dx*(2*Ipnn - 5*Icnn + 4*Innn - Iann) + + dx*dx*dx*(-Ipnn + 3*Icnn - 3*Innn + Iann)), + Ipan = (Tfloat)(*this)(px,ay,nz,c), Ican = (Tfloat)(*this)(x,ay,nz,c), + Inan = (Tfloat)(*this)(nx,ay,nz,c), Iaan = (Tfloat)(*this)(ax,ay,nz,c), + Ian = Ican + 0.5f*(dx*(-Ipan + Inan) + dx*dx*(2*Ipan - 5*Ican + 4*Inan - Iaan) + + dx*dx*dx*(-Ipan + 3*Ican - 3*Inan + Iaan)), + In = Icn + 0.5f*(dy*(-Ipn + Inn) + dy*dy*(2*Ipn - 5*Icn + 4*Inn - Ian) + + dy*dy*dy*(-Ipn + 3*Icn - 3*Inn + Ian)), + Ippa = (Tfloat)(*this)(px,py,az,c), Icpa = (Tfloat)(*this)(x,py,az,c), + Inpa = (Tfloat)(*this)(nx,py,az,c), Iapa = (Tfloat)(*this)(ax,py,az,c), + Ipa = Icpa + 0.5f*(dx*(-Ippa + Inpa) + dx*dx*(2*Ippa - 5*Icpa + 4*Inpa - Iapa) + + dx*dx*dx*(-Ippa + 3*Icpa - 3*Inpa + Iapa)), + Ipca = (Tfloat)(*this)(px,y,az,c), Icca = (Tfloat)(*this)(x, y,az,c), + Inca = (Tfloat)(*this)(nx,y,az,c), Iaca = (Tfloat)(*this)(ax,y,az,c), + Ica = Icca + 0.5f*(dx*(-Ipca + Inca) + dx*dx*(2*Ipca - 5*Icca + 4*Inca - Iaca) + + dx*dx*dx*(-Ipca + 3*Icca - 3*Inca + Iaca)), + Ipna = (Tfloat)(*this)(px,ny,az,c), Icna = (Tfloat)(*this)(x,ny,az,c), + Inna = (Tfloat)(*this)(nx,ny,az,c), Iana = (Tfloat)(*this)(ax,ny,az,c), + Ina = Icna + 0.5f*(dx*(-Ipna + Inna) + dx*dx*(2*Ipna - 5*Icna + 4*Inna - Iana) + + dx*dx*dx*(-Ipna + 3*Icna - 3*Inna + Iana)), + Ipaa = (Tfloat)(*this)(px,ay,az,c), Icaa = (Tfloat)(*this)(x,ay,az,c), + Inaa = (Tfloat)(*this)(nx,ay,az,c), Iaaa = (Tfloat)(*this)(ax,ay,az,c), + Iaa = Icaa + 0.5f*(dx*(-Ipaa + Inaa) + dx*dx*(2*Ipaa - 5*Icaa + 4*Inaa - Iaaa) + + dx*dx*dx*(-Ipaa + 3*Icaa - 3*Inaa + Iaaa)), + Ia = Ica + 0.5f*(dy*(-Ipa + Ina) + dy*dy*(2*Ipa - 5*Ica + 4*Ina - Iaa) + + dy*dy*dy*(-Ipa + 3*Ica - 3*Ina + Iaa)); + return Ic + 0.5f*(dz*(-Ip + In) + dz*dz*(2*Ip - 5*Ic + 4*In - Ia) + dz*dz*dz*(-Ip + 3*Ic - 3*In + Ia)); + } + + //! Return clamped pixel value, using cubic interpolation and Neumann boundary conditions for the XYZ-coordinates. + /** + Similar to cubic_atXYZ(float,float,float,int) const, except that the return value is clamped to stay in the + min/max range of the datatype \c T. + **/ + T cubic_cut_atXYZ(const float fx, const float fy, const float fz, const int c) const { + return cimg::type::cut(cubic_atXYZ(fx,fy,fz,c)); + } + + T _cubic_cut_atXYZ(const float fx, const float fy, const float fz, const int c) const { + return cimg::type::cut(_cubic_atXYZ(fx,fy,fz,c)); + } + + //! Set pixel value, using linear interpolation for the X-coordinates. + /** + Set pixel value at specified coordinates (\c fx,\c y,\c z,\c c) in the image instance, in a way that + the value is spread amongst several neighbors if the pixel coordinates are float-valued. + \param value Pixel value to set. + \param fx X-coordinate of the pixel value (float-valued). + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \param is_added Tells if the pixel value is added to (\c true), or simply replace (\c false) the current image + pixel(s). + \return A reference to the current image instance. + \note + - Calling this method with out-of-bounds coordinates does nothing. + **/ + CImg& set_linear_atX(const T& value, const float fx, const int y=0, const int z=0, const int c=0, + const bool is_added=false) { + const int + x = (int)fx - (fx>=0?0:1), nx = x + 1; + const float + dx = fx - x; + if (y>=0 && y=0 && z=0 && c=0 && x=0 && nx& set_linear_atXY(const T& value, const float fx, const float fy=0, const int z=0, const int c=0, + const bool is_added=false) { + const int + x = (int)fx - (fx>=0?0:1), nx = x + 1, + y = (int)fy - (fy>=0?0:1), ny = y + 1; + const float + dx = fx - x, + dy = fy - y; + if (z>=0 && z=0 && c=0 && y=0 && x=0 && nx=0 && ny=0 && x=0 && nx& set_linear_atXYZ(const T& value, const float fx, const float fy=0, const float fz=0, const int c=0, + const bool is_added=false) { + const int + x = (int)fx - (fx>=0?0:1), nx = x + 1, + y = (int)fy - (fy>=0?0:1), ny = y + 1, + z = (int)fz - (fz>=0?0:1), nz = z + 1; + const float + dx = fx - x, + dy = fy - y, + dz = fz - z; + if (c>=0 && c=0 && z=0 && y=0 && x=0 && nx=0 && ny=0 && x=0 && nx=0 && nz=0 && y=0 && x=0 && nx=0 && ny=0 && x=0 && nx image whose buffer data() is a \c char* string describing the list of all pixel values + of the image instance (written in base 10), separated by specified \c separator character. + \param separator A \c char character which specifies the separator between values in the returned C-string. + \param max_size Maximum size of the returned image (or \c 0 if no limits are set). + \param format For float/double-values, tell the printf format used to generate the ascii representation + of the numbers (or \c 0 for default representation). + \note + - The returned image is never empty. + - For an empty image instance, the returned string is "". + - If \c max_size is equal to \c 0, there are no limits on the size of the returned string. + - Otherwise, if the maximum number of string characters is exceeded, the value string is cut off + and terminated by character \c '\0'. In that case, the returned image size is max_size + 1. + **/ + CImg value_string(const char separator=',', const unsigned int max_size=0, + const char *const format=0) const { + if (is_empty() || max_size==1) return CImg(1,1,1,1,0); + CImgList items; + CImg s_item(256); *s_item = 0; + const T *ptrs = _data; + unsigned int string_size = 0; + const char *const _format = format?format:cimg::type::format(); + for (ulongT off = 0, siz = size(); off::format(*(ptrs++))); + CImg item(s_item._data,printed_size); + item[printed_size - 1] = separator; + item.move_to(items); + if (max_size) string_size+=printed_size; + } + CImg res; + (items>'x').move_to(res); + if (max_size && res._width>=max_size) res.crop(0,max_size - 1); + res.back() = 0; + return res; + } + + //@} + //------------------------------------- + // + //! \name Instance Checking + //@{ + //------------------------------------- + + //! Test shared state of the pixel buffer. + /** + Return \c true if image instance has a shared memory buffer, and \c false otherwise. + \note + - A shared image do not own his pixel buffer data() and will not deallocate it on destruction. + - Most of the time, a \c CImg image instance will \e not be shared. + - A shared image can only be obtained by a limited set of constructors and methods (see list below). + **/ + bool is_shared() const { + return _is_shared; + } + + //! Test if image instance is empty. + /** + Return \c true, if image instance is empty, i.e. does \e not contain any pixel values, has dimensions + \c 0 x \c 0 x \c 0 x \c 0 and a pixel buffer pointer set to \c 0 (null pointer), and \c false otherwise. + **/ + bool is_empty() const { + return !(_data && _width && _height && _depth && _spectrum); + } + + //! Test if image instance contains a 'inf' value. + /** + Return \c true, if image instance contains a 'inf' value, and \c false otherwise. + **/ + bool is_inf() const { + if (cimg::type::is_float()) cimg_for(*this,p,T) if (cimg::type::is_inf((float)*p)) return true; + return false; + } + + //! Test if image instance contains a NaN value. + /** + Return \c true, if image instance contains a NaN value, and \c false otherwise. + **/ + bool is_nan() const { + if (cimg::type::is_float()) cimg_for(*this,p,T) if (cimg::type::is_nan((float)*p)) return true; + return false; + } + + //! Test if image width is equal to specified value. + bool is_sameX(const unsigned int size_x) const { + return _width==size_x; + } + + //! Test if image width is equal to specified value. + template + bool is_sameX(const CImg& img) const { + return is_sameX(img._width); + } + + //! Test if image width is equal to specified value. + bool is_sameX(const CImgDisplay& disp) const { + return is_sameX(disp._width); + } + + //! Test if image height is equal to specified value. + bool is_sameY(const unsigned int size_y) const { + return _height==size_y; + } + + //! Test if image height is equal to specified value. + template + bool is_sameY(const CImg& img) const { + return is_sameY(img._height); + } + + //! Test if image height is equal to specified value. + bool is_sameY(const CImgDisplay& disp) const { + return is_sameY(disp._height); + } + + //! Test if image depth is equal to specified value. + bool is_sameZ(const unsigned int size_z) const { + return _depth==size_z; + } + + //! Test if image depth is equal to specified value. + template + bool is_sameZ(const CImg& img) const { + return is_sameZ(img._depth); + } + + //! Test if image spectrum is equal to specified value. + bool is_sameC(const unsigned int size_c) const { + return _spectrum==size_c; + } + + //! Test if image spectrum is equal to specified value. + template + bool is_sameC(const CImg& img) const { + return is_sameC(img._spectrum); + } + + //! Test if image width and height are equal to specified values. + /** + Test if is_sameX(unsigned int) const and is_sameY(unsigned int) const are both verified. + **/ + bool is_sameXY(const unsigned int size_x, const unsigned int size_y) const { + return _width==size_x && _height==size_y; + } + + //! Test if image width and height are the same as that of another image. + /** + Test if is_sameX(const CImg&) const and is_sameY(const CImg&) const are both verified. + **/ + template + bool is_sameXY(const CImg& img) const { + return is_sameXY(img._width,img._height); + } + + //! Test if image width and height are the same as that of an existing display window. + /** + Test if is_sameX(const CImgDisplay&) const and is_sameY(const CImgDisplay&) const are both verified. + **/ + bool is_sameXY(const CImgDisplay& disp) const { + return is_sameXY(disp._width,disp._height); + } + + //! Test if image width and depth are equal to specified values. + /** + Test if is_sameX(unsigned int) const and is_sameZ(unsigned int) const are both verified. + **/ + bool is_sameXZ(const unsigned int size_x, const unsigned int size_z) const { + return _width==size_x && _depth==size_z; + } + + //! Test if image width and depth are the same as that of another image. + /** + Test if is_sameX(const CImg&) const and is_sameZ(const CImg&) const are both verified. + **/ + template + bool is_sameXZ(const CImg& img) const { + return is_sameXZ(img._width,img._depth); + } + + //! Test if image width and spectrum are equal to specified values. + /** + Test if is_sameX(unsigned int) const and is_sameC(unsigned int) const are both verified. + **/ + bool is_sameXC(const unsigned int size_x, const unsigned int size_c) const { + return _width==size_x && _spectrum==size_c; + } + + //! Test if image width and spectrum are the same as that of another image. + /** + Test if is_sameX(const CImg&) const and is_sameC(const CImg&) const are both verified. + **/ + template + bool is_sameXC(const CImg& img) const { + return is_sameXC(img._width,img._spectrum); + } + + //! Test if image height and depth are equal to specified values. + /** + Test if is_sameY(unsigned int) const and is_sameZ(unsigned int) const are both verified. + **/ + bool is_sameYZ(const unsigned int size_y, const unsigned int size_z) const { + return _height==size_y && _depth==size_z; + } + + //! Test if image height and depth are the same as that of another image. + /** + Test if is_sameY(const CImg&) const and is_sameZ(const CImg&) const are both verified. + **/ + template + bool is_sameYZ(const CImg& img) const { + return is_sameYZ(img._height,img._depth); + } + + //! Test if image height and spectrum are equal to specified values. + /** + Test if is_sameY(unsigned int) const and is_sameC(unsigned int) const are both verified. + **/ + bool is_sameYC(const unsigned int size_y, const unsigned int size_c) const { + return _height==size_y && _spectrum==size_c; + } + + //! Test if image height and spectrum are the same as that of another image. + /** + Test if is_sameY(const CImg&) const and is_sameC(const CImg&) const are both verified. + **/ + template + bool is_sameYC(const CImg& img) const { + return is_sameYC(img._height,img._spectrum); + } + + //! Test if image depth and spectrum are equal to specified values. + /** + Test if is_sameZ(unsigned int) const and is_sameC(unsigned int) const are both verified. + **/ + bool is_sameZC(const unsigned int size_z, const unsigned int size_c) const { + return _depth==size_z && _spectrum==size_c; + } + + //! Test if image depth and spectrum are the same as that of another image. + /** + Test if is_sameZ(const CImg&) const and is_sameC(const CImg&) const are both verified. + **/ + template + bool is_sameZC(const CImg& img) const { + return is_sameZC(img._depth,img._spectrum); + } + + //! Test if image width, height and depth are equal to specified values. + /** + Test if is_sameXY(unsigned int,unsigned int) const and is_sameZ(unsigned int) const are both verified. + **/ + bool is_sameXYZ(const unsigned int size_x, const unsigned int size_y, const unsigned int size_z) const { + return is_sameXY(size_x,size_y) && _depth==size_z; + } + + //! Test if image width, height and depth are the same as that of another image. + /** + Test if is_sameXY(const CImg&) const and is_sameZ(const CImg&) const are both verified. + **/ + template + bool is_sameXYZ(const CImg& img) const { + return is_sameXYZ(img._width,img._height,img._depth); + } + + //! Test if image width, height and spectrum are equal to specified values. + /** + Test if is_sameXY(unsigned int,unsigned int) const and is_sameC(unsigned int) const are both verified. + **/ + bool is_sameXYC(const unsigned int size_x, const unsigned int size_y, const unsigned int size_c) const { + return is_sameXY(size_x,size_y) && _spectrum==size_c; + } + + //! Test if image width, height and spectrum are the same as that of another image. + /** + Test if is_sameXY(const CImg&) const and is_sameC(const CImg&) const are both verified. + **/ + template + bool is_sameXYC(const CImg& img) const { + return is_sameXYC(img._width,img._height,img._spectrum); + } + + //! Test if image width, depth and spectrum are equal to specified values. + /** + Test if is_sameXZ(unsigned int,unsigned int) const and is_sameC(unsigned int) const are both verified. + **/ + bool is_sameXZC(const unsigned int size_x, const unsigned int size_z, const unsigned int size_c) const { + return is_sameXZ(size_x,size_z) && _spectrum==size_c; + } + + //! Test if image width, depth and spectrum are the same as that of another image. + /** + Test if is_sameXZ(const CImg&) const and is_sameC(const CImg&) const are both verified. + **/ + template + bool is_sameXZC(const CImg& img) const { + return is_sameXZC(img._width,img._depth,img._spectrum); + } + + //! Test if image height, depth and spectrum are equal to specified values. + /** + Test if is_sameYZ(unsigned int,unsigned int) const and is_sameC(unsigned int) const are both verified. + **/ + bool is_sameYZC(const unsigned int size_y, const unsigned int size_z, const unsigned int size_c) const { + return is_sameYZ(size_y,size_z) && _spectrum==size_c; + } + + //! Test if image height, depth and spectrum are the same as that of another image. + /** + Test if is_sameYZ(const CImg&) const and is_sameC(const CImg&) const are both verified. + **/ + template + bool is_sameYZC(const CImg& img) const { + return is_sameYZC(img._height,img._depth,img._spectrum); + } + + //! Test if image width, height, depth and spectrum are equal to specified values. + /** + Test if is_sameXYZ(unsigned int,unsigned int,unsigned int) const and is_sameC(unsigned int) const are both + verified. + **/ + bool is_sameXYZC(const unsigned int size_x, const unsigned int size_y, + const unsigned int size_z, const unsigned int size_c) const { + return is_sameXYZ(size_x,size_y,size_z) && _spectrum==size_c; + } + + //! Test if image width, height, depth and spectrum are the same as that of another image. + /** + Test if is_sameXYZ(const CImg&) const and is_sameC(const CImg&) const are both verified. + **/ + template + bool is_sameXYZC(const CImg& img) const { + return is_sameXYZC(img._width,img._height,img._depth,img._spectrum); + } + + //! Test if specified coordinates are inside image bounds. + /** + Return \c true if pixel located at (\c x,\c y,\c z,\c c) is inside bounds of the image instance, + and \c false otherwise. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \note + - Return \c true only if all these conditions are verified: + - The image instance is \e not empty. + - 0<=x<=\ref width() - 1. + - 0<=y<=\ref height() - 1. + - 0<=z<=\ref depth() - 1. + - 0<=c<=\ref spectrum() - 1. + **/ + bool containsXYZC(const int x, const int y=0, const int z=0, const int c=0) const { + return !is_empty() && x>=0 && x=0 && y=0 && z=0 && c img(100,100,1,3); // Construct a 100x100 RGB color image. + const unsigned long offset = 1249; // Offset to the pixel (49,12,0,0). + unsigned int x,y,z,c; + if (img.contains(img[offset],x,y,z,c)) { // Convert offset to (x,y,z,c) coordinates. + std::printf("Offset %u refers to pixel located at (%u,%u,%u,%u).\n", + offset,x,y,z,c); + } + \endcode + **/ + template + bool contains(const T& pixel, t& x, t& y, t& z, t& c) const { + const ulongT wh = (ulongT)_width*_height, whd = wh*_depth, siz = whd*_spectrum; + const T *const ppixel = &pixel; + if (is_empty() || ppixel<_data || ppixel>=_data + siz) return false; + ulongT off = (ulongT)(ppixel - _data); + const ulongT nc = off/whd; + off%=whd; + const ulongT nz = off/wh; + off%=wh; + const ulongT ny = off/_width, nx = off%_width; + x = (t)nx; y = (t)ny; z = (t)nz; c = (t)nc; + return true; + } + + //! Test if pixel value is inside image bounds and get its X,Y and Z-coordinates. + /** + Similar to contains(const T&,t&,t&,t&,t&) const, except that only the X,Y and Z-coordinates are set. + **/ + template + bool contains(const T& pixel, t& x, t& y, t& z) const { + const ulongT wh = (ulongT)_width*_height, whd = wh*_depth, siz = whd*_spectrum; + const T *const ppixel = &pixel; + if (is_empty() || ppixel<_data || ppixel>=_data + siz) return false; + ulongT off = ((ulongT)(ppixel - _data))%whd; + const ulongT nz = off/wh; + off%=wh; + const ulongT ny = off/_width, nx = off%_width; + x = (t)nx; y = (t)ny; z = (t)nz; + return true; + } + + //! Test if pixel value is inside image bounds and get its X and Y-coordinates. + /** + Similar to contains(const T&,t&,t&,t&,t&) const, except that only the X and Y-coordinates are set. + **/ + template + bool contains(const T& pixel, t& x, t& y) const { + const ulongT wh = (ulongT)_width*_height, siz = wh*_depth*_spectrum; + const T *const ppixel = &pixel; + if (is_empty() || ppixel<_data || ppixel>=_data + siz) return false; + ulongT off = ((unsigned int)(ppixel - _data))%wh; + const ulongT ny = off/_width, nx = off%_width; + x = (t)nx; y = (t)ny; + return true; + } + + //! Test if pixel value is inside image bounds and get its X-coordinate. + /** + Similar to contains(const T&,t&,t&,t&,t&) const, except that only the X-coordinate is set. + **/ + template + bool contains(const T& pixel, t& x) const { + const T *const ppixel = &pixel; + if (is_empty() || ppixel<_data || ppixel>=_data + size()) return false; + x = (t)(((ulongT)(ppixel - _data))%_width); + return true; + } + + //! Test if pixel value is inside image bounds. + /** + Similar to contains(const T&,t&,t&,t&,t&) const, except that no pixel coordinates are set. + **/ + bool contains(const T& pixel) const { + const T *const ppixel = &pixel; + return !is_empty() && ppixel>=_data && ppixel<_data + size(); + } + + //! Test if pixel buffers of instance and input images overlap. + /** + Return \c true, if pixel buffers attached to image instance and input image \c img overlap, + and \c false otherwise. + \param img Input image to compare with. + \note + - Buffer overlapping may happen when manipulating \e shared images. + - If two image buffers overlap, operating on one of the image will probably modify the other one. + - Most of the time, \c CImg instances are \e non-shared and do not overlap between each others. + \par Example + \code + const CImg + img1("reference.jpg"), // Load RGB-color image. + img2 = img1.get_shared_channel(1); // Get shared version of the green channel. + if (img1.is_overlapped(img2)) { // Test succeeds, 'img1' and 'img2' overlaps. + std::printf("Buffers overlap!\n"); + } + \endcode + **/ + template + bool is_overlapped(const CImg& img) const { + const ulongT csiz = size(), isiz = img.size(); + return !((void*)(_data + csiz)<=(void*)img._data || (void*)_data>=(void*)(img._data + isiz)); + } + + //! Test if the set {\c *this,\c primitives,\c colors,\c opacities} defines a valid 3d object. + /** + Return \c true is the 3d object represented by the set {\c *this,\c primitives,\c colors,\c opacities} defines a + valid 3d object, and \c false otherwise. The vertex coordinates are defined by the instance image. + \param primitives List of primitives of the 3d object. + \param colors List of colors of the 3d object. + \param opacities List (or image) of opacities of the 3d object. + \param full_check Tells if full checking of the 3d object must be performed. + \param[out] error_message C-string to contain the error message, if the test does not succeed. + \note + - Set \c full_checking to \c false to speed-up the 3d object checking. In this case, only the size of + each 3d object component is checked. + - Size of the string \c error_message should be at least 128-bytes long, to be able to contain the error message. + **/ + template + bool is_object3d(const CImgList& primitives, + const CImgList& colors, + const to& opacities, + const bool full_check=true, + char *const error_message=0) const { + if (error_message) *error_message = 0; + + // Check consistency for the particular case of an empty 3d object. + if (is_empty()) { + if (primitives || colors || opacities) { + if (error_message) cimg_sprintf(error_message, + "3d object (%u,%u) defines no vertices but %u primitives, " + "%u colors and %lu opacities", + _width,primitives._width,primitives._width, + colors._width,(unsigned long)opacities.size()); + return false; + } + return true; + } + + // Check consistency of vertices. + if (_height!=3 || _depth>1 || _spectrum>1) { // Check vertices dimensions. + if (error_message) cimg_sprintf(error_message, + "3d object (%u,%u) has invalid vertex dimensions (%u,%u,%u,%u)", + _width,primitives._width,_width,_height,_depth,_spectrum); + return false; + } + if (colors._width>primitives._width + 1) { + if (error_message) cimg_sprintf(error_message, + "3d object (%u,%u) defines %u colors", + _width,primitives._width,colors._width); + return false; + } + if (opacities.size()>primitives._width) { + if (error_message) cimg_sprintf(error_message, + "3d object (%u,%u) defines %lu opacities", + _width,primitives._width,(unsigned long)opacities.size()); + return false; + } + if (!full_check) return true; + + // Check consistency of primitives. + cimglist_for(primitives,l) { + const CImg& primitive = primitives[l]; + const unsigned int psiz = (unsigned int)primitive.size(); + switch (psiz) { + case 1 : { // Point. + const unsigned int i0 = (unsigned int)primitive(0); + if (i0>=_width) { + if (error_message) cimg_sprintf(error_message, + "3d object (%u,%u) refers to invalid vertex indice %u in " + "point primitive [%u]", + _width,primitives._width,i0,l); + return false; + } + } break; + case 5 : { // Sphere. + const unsigned int + i0 = (unsigned int)primitive(0), + i1 = (unsigned int)primitive(1); + if (i0>=_width || i1>=_width) { + if (error_message) cimg_sprintf(error_message, + "3d object (%u,%u) refers to invalid vertex indices (%u,%u) in " + "sphere primitive [%u]", + _width,primitives._width,i0,i1,l); + return false; + } + } break; + case 2 : case 6 : { // Segment. + const unsigned int + i0 = (unsigned int)primitive(0), + i1 = (unsigned int)primitive(1); + if (i0>=_width || i1>=_width) { + if (error_message) cimg_sprintf(error_message, + "3d object (%u,%u) refers to invalid vertex indices (%u,%u) in " + "segment primitive [%u]", + _width,primitives._width,i0,i1,l); + return false; + } + } break; + case 3 : case 9 : { // Triangle. + const unsigned int + i0 = (unsigned int)primitive(0), + i1 = (unsigned int)primitive(1), + i2 = (unsigned int)primitive(2); + if (i0>=_width || i1>=_width || i2>=_width) { + if (error_message) cimg_sprintf(error_message, + "3d object (%u,%u) refers to invalid vertex indices (%u,%u,%u) in " + "triangle primitive [%u]", + _width,primitives._width,i0,i1,i2,l); + return false; + } + } break; + case 4 : case 12 : { // Quadrangle. + const unsigned int + i0 = (unsigned int)primitive(0), + i1 = (unsigned int)primitive(1), + i2 = (unsigned int)primitive(2), + i3 = (unsigned int)primitive(3); + if (i0>=_width || i1>=_width || i2>=_width || i3>=_width) { + if (error_message) cimg_sprintf(error_message, + "3d object (%u,%u) refers to invalid vertex indices (%u,%u,%u,%u) in " + "quadrangle primitive [%u]", + _width,primitives._width,i0,i1,i2,i3,l); + return false; + } + } break; + default : + if (error_message) cimg_sprintf(error_message, + "3d object (%u,%u) defines an invalid primitive [%u] of size %u", + _width,primitives._width,l,(unsigned int)psiz); + return false; + } + } + + // Check consistency of colors. + cimglist_for(colors,c) { + const CImg& color = colors[c]; + if (!color) { + if (error_message) cimg_sprintf(error_message, + "3d object (%u,%u) defines no color for primitive [%u]", + _width,primitives._width,c); + return false; + } + } + + // Check consistency of light texture. + if (colors._width>primitives._width) { + const CImg &light = colors.back(); + if (!light || light._depth>1) { + if (error_message) cimg_sprintf(error_message, + "3d object (%u,%u) defines an invalid light texture (%u,%u,%u,%u)", + _width,primitives._width,light._width, + light._height,light._depth,light._spectrum); + return false; + } + } + + return true; + } + + //! Test if image instance represents a valid serialization of a 3d object. + /** + Return \c true if the image instance represents a valid serialization of a 3d object, and \c false otherwise. + \param full_check Tells if full checking of the instance must be performed. + \param[out] error_message C-string to contain the error message, if the test does not succeed. + \note + - Set \c full_check to \c false to speed-up the 3d object checking. In this case, only the size of + each 3d object component is checked. + - Size of the string \c error_message should be at least 128-bytes long, to be able to contain the error message. + **/ + bool is_CImg3d(const bool full_check=true, char *const error_message=0) const { + if (error_message) *error_message = 0; + + // Check instance dimension and header. + if (_width!=1 || _height<8 || _depth!=1 || _spectrum!=1) { + if (error_message) cimg_sprintf(error_message, + "CImg3d has invalid dimensions (%u,%u,%u,%u)", + _width,_height,_depth,_spectrum); + return false; + } + const T *ptrs = _data, *const ptre = end(); + if (!_is_CImg3d(*(ptrs++),'C') || !_is_CImg3d(*(ptrs++),'I') || !_is_CImg3d(*(ptrs++),'m') || + !_is_CImg3d(*(ptrs++),'g') || !_is_CImg3d(*(ptrs++),'3') || !_is_CImg3d(*(ptrs++),'d')) { + if (error_message) cimg_sprintf(error_message, + "CImg3d header not found"); + return false; + } + const unsigned int + nb_points = cimg::float2uint((float)*(ptrs++)), + nb_primitives = cimg::float2uint((float)*(ptrs++)); + + // Check consistency of number of vertices / primitives. + if (!full_check) { + const ulongT minimal_size = 8UL + 3*nb_points + 6*nb_primitives; + if (_data + minimal_size>ptre) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) has only %lu values, while at least %lu values were expected", + nb_points,nb_primitives,(unsigned long)size(),(unsigned long)minimal_size); + return false; + } + } + + // Check consistency of vertex data. + if (!nb_points) { + if (nb_primitives) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) defines no vertices but %u primitives", + nb_points,nb_primitives,nb_primitives); + return false; + } + if (ptrs!=ptre) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) is an empty object but contains %u value%s " + "more than expected", + nb_points,nb_primitives,(unsigned int)(ptre - ptrs),(ptre - ptrs)>1?"s":""); + return false; + } + return true; + } + if (ptrs + 3*nb_points>ptre) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) defines only %u vertices data", + nb_points,nb_primitives,(unsigned int)(ptre - ptrs)/3); + return false; + } + ptrs+=3*nb_points; + + // Check consistency of primitive data. + if (ptrs==ptre) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) defines %u vertices but no primitive", + nb_points,nb_primitives,nb_points); + return false; + } + + if (!full_check) return true; + + for (unsigned int p = 0; p=nb_points) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) refers to invalid vertex indice %u in point primitive [%u]", + nb_points,nb_primitives,i0,p); + return false; + } + } break; + case 5 : { // Sphere. + const unsigned int + i0 = cimg::float2uint((float)*(ptrs++)), + i1 = cimg::float2uint((float)*(ptrs++)); + ptrs+=3; + if (i0>=nb_points || i1>=nb_points) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u) in " + "sphere primitive [%u]", + nb_points,nb_primitives,i0,i1,p); + return false; + } + } break; + case 2 : case 6 : { // Segment. + const unsigned int + i0 = cimg::float2uint((float)*(ptrs++)), + i1 = cimg::float2uint((float)*(ptrs++)); + if (nb_inds==6) ptrs+=4; + if (i0>=nb_points || i1>=nb_points) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u) in " + "segment primitive [%u]", + nb_points,nb_primitives,i0,i1,p); + return false; + } + } break; + case 3 : case 9 : { // Triangle. + const unsigned int + i0 = cimg::float2uint((float)*(ptrs++)), + i1 = cimg::float2uint((float)*(ptrs++)), + i2 = cimg::float2uint((float)*(ptrs++)); + if (nb_inds==9) ptrs+=6; + if (i0>=nb_points || i1>=nb_points || i2>=nb_points) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u,%u) in " + "triangle primitive [%u]", + nb_points,nb_primitives,i0,i1,i2,p); + return false; + } + } break; + case 4 : case 12 : { // Quadrangle. + const unsigned int + i0 = cimg::float2uint((float)*(ptrs++)), + i1 = cimg::float2uint((float)*(ptrs++)), + i2 = cimg::float2uint((float)*(ptrs++)), + i3 = cimg::float2uint((float)*(ptrs++)); + if (nb_inds==12) ptrs+=8; + if (i0>=nb_points || i1>=nb_points || i2>=nb_points || i3>=nb_points) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u,%u,%u) in " + "quadrangle primitive [%u]", + nb_points,nb_primitives,i0,i1,i2,i3,p); + return false; + } + } break; + default : + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) defines an invalid primitive [%u] of size %u", + nb_points,nb_primitives,p,nb_inds); + return false; + } + if (ptrs>ptre) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) has incomplete primitive data for primitive [%u], " + "%u values missing", + nb_points,nb_primitives,p,(unsigned int)(ptrs - ptre)); + return false; + } + } + + // Check consistency of color data. + if (ptrs==ptre) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) defines no color/texture data", + nb_points,nb_primitives); + return false; + } + for (unsigned int c = 0; c=c) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) refers to invalid shared sprite/texture indice %u " + "for primitive [%u]", + nb_points,nb_primitives,w,c); + return false; + } + } else ptrs+=w*h*s; + } + if (ptrs>ptre) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) has incomplete color/texture data for primitive [%u], " + "%u values missing", + nb_points,nb_primitives,c,(unsigned int)(ptrs - ptre)); + return false; + } + } + + // Check consistency of opacity data. + if (ptrs==ptre) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) defines no opacity data", + nb_points,nb_primitives); + return false; + } + for (unsigned int o = 0; o=o) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) refers to invalid shared opacity indice %u " + "for primitive [%u]", + nb_points,nb_primitives,w,o); + return false; + } + } else ptrs+=w*h*s; + } + if (ptrs>ptre) { + if (error_message) cimg_sprintf(error_message, + "CImg3d (%u,%u) has incomplete opacity data for primitive [%u]", + nb_points,nb_primitives,o); + return false; + } + } + + // Check end of data. + if (ptrs1?"s":""); + return false; + } + return true; + } + + static bool _is_CImg3d(const T val, const char c) { + return val>=(T)c && val<(T)(c + 1); + } + + //@} + //------------------------------------- + // + //! \name Mathematical Functions + //@{ + //------------------------------------- + + // Define the math formula parser/compiler and expression evaluator. + struct _cimg_math_parser { + CImg mem; + CImg memtype; + CImgList _code, &code, code_init, code_end; + CImg opcode; + const CImg *p_code_end, *p_code; + const CImg *const p_break; + + CImg expr, pexpr; + const CImg& imgin; + const CImgList& listin; + CImg &imgout; + CImgList& listout; + + CImg _img_stats, &img_stats, constcache_vals; + CImgList _list_stats, &list_stats, _list_median, &list_median; + CImg mem_img_stats, constcache_inds; + + CImg level, variable_pos, reserved_label; + CImgList variable_def, macro_def, macro_body; + CImgList macro_body_is_string; + char *user_macro; + + unsigned int mempos, mem_img_median, debug_indent, result_dim, break_type, constcache_size; + bool is_parallelizable, is_fill, need_input_copy; + double *result; + const char *const calling_function, *s_op, *ss_op; + typedef double (*mp_func)(_cimg_math_parser&); + +#define _cimg_mp_is_constant(arg) (memtype[arg]==1) // Is constant value? +#define _cimg_mp_is_scalar(arg) (memtype[arg]<2) // Is scalar value? +#define _cimg_mp_is_comp(arg) (!memtype[arg]) // Is computation value? +#define _cimg_mp_is_variable(arg) (memtype[arg]==-1) // Is scalar variable? +#define _cimg_mp_is_vector(arg) (memtype[arg]>1) // Is vector? +#define _cimg_mp_size(arg) (_cimg_mp_is_scalar(arg)?0U:(unsigned int)memtype[arg] - 1) // Size (0=scalar, N>0=vectorN) +#define _cimg_mp_calling_function calling_function_s()._data +#define _cimg_mp_op(s) s_op = s; ss_op = ss +#define _cimg_mp_check_type(arg,n_arg,mode,N) check_type(arg,n_arg,mode,N,ss,se,saved_char) +#define _cimg_mp_check_constant(arg,n_arg,mode) check_constant(arg,n_arg,mode,ss,se,saved_char) +#define _cimg_mp_check_matrix_square(arg,n_arg) check_matrix_square(arg,n_arg,ss,se,saved_char) +#define _cimg_mp_check_vector0(dim) check_vector0(dim,ss,se,saved_char) +#define _cimg_mp_check_list(is_out) check_list(is_out,ss,se,saved_char) +#define _cimg_mp_defunc(mp) (*(mp_func)(*(mp).opcode))(mp) +#define _cimg_mp_return(x) { *se = saved_char; s_op = previous_s_op; ss_op = previous_ss_op; return x; } +#define _cimg_mp_return_nan() _cimg_mp_return(_cimg_mp_slot_nan) +#define _cimg_mp_constant(val) _cimg_mp_return(constant((double)(val))) +#define _cimg_mp_scalar0(op) _cimg_mp_return(scalar0(op)) +#define _cimg_mp_scalar1(op,i1) _cimg_mp_return(scalar1(op,i1)) +#define _cimg_mp_scalar2(op,i1,i2) _cimg_mp_return(scalar2(op,i1,i2)) +#define _cimg_mp_scalar3(op,i1,i2,i3) _cimg_mp_return(scalar3(op,i1,i2,i3)) +#define _cimg_mp_scalar4(op,i1,i2,i3,i4) _cimg_mp_return(scalar4(op,i1,i2,i3,i4)) +#define _cimg_mp_scalar5(op,i1,i2,i3,i4,i5) _cimg_mp_return(scalar5(op,i1,i2,i3,i4,i5)) +#define _cimg_mp_scalar6(op,i1,i2,i3,i4,i5,i6) _cimg_mp_return(scalar6(op,i1,i2,i3,i4,i5,i6)) +#define _cimg_mp_scalar7(op,i1,i2,i3,i4,i5,i6,i7) _cimg_mp_return(scalar7(op,i1,i2,i3,i4,i5,i6,i7)) +#define _cimg_mp_vector1_v(op,i1) _cimg_mp_return(vector1_v(op,i1)) +#define _cimg_mp_vector2_sv(op,i1,i2) _cimg_mp_return(vector2_sv(op,i1,i2)) +#define _cimg_mp_vector2_vs(op,i1,i2) _cimg_mp_return(vector2_vs(op,i1,i2)) +#define _cimg_mp_vector2_vv(op,i1,i2) _cimg_mp_return(vector2_vv(op,i1,i2)) +#define _cimg_mp_vector3_vss(op,i1,i2,i3) _cimg_mp_return(vector3_vss(op,i1,i2,i3)) + + // Constructors. + _cimg_math_parser(const char *const expression, const char *const funcname=0, + const CImg& img_input=CImg::const_empty(), CImg *const img_output=0, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0, + const bool _is_fill=false): + code(_code),p_break((CImg*)0 - 2), + imgin(img_input),listin(list_inputs?*list_inputs:CImgList::const_empty()), + imgout(img_output?*img_output:CImg::empty()),listout(list_outputs?*list_outputs:CImgList::empty()), + img_stats(_img_stats),list_stats(_list_stats),list_median(_list_median),user_macro(0), + mem_img_median(~0U),debug_indent(0),result_dim(0),break_type(0),constcache_size(0), + is_parallelizable(true),is_fill(_is_fill),need_input_copy(false), + calling_function(funcname?funcname:"cimg_math_parser") { + if (!expression || !*expression) + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: Empty expression.", + pixel_type(),_cimg_mp_calling_function); + const char *_expression = expression; + while (*_expression && ((signed char)*_expression<=' ' || *_expression==';')) ++_expression; + CImg::string(_expression).move_to(expr); + char *ps = &expr.back() - 1; + while (ps>expr._data && ((signed char)*ps<=' ' || *ps==';')) --ps; + *(++ps) = 0; expr._width = (unsigned int)(ps - expr._data + 1); + + // Ease the retrieval of previous non-space characters afterwards. + pexpr.assign(expr._width); + char c, *pe = pexpr._data; + for (ps = expr._data, c = ' '; *ps; ++ps) { + if ((signed char)*ps>' ') c = *ps; else *ps = ' '; + *(pe++) = c; + } + *pe = 0; + level = get_level(expr); + + // Init constant values. +#define _cimg_mp_interpolation (reserved_label[29]!=~0U?reserved_label[29]:0) +#define _cimg_mp_boundary (reserved_label[30]!=~0U?reserved_label[30]:0) +#define _cimg_mp_slot_nan 29 +#define _cimg_mp_slot_x 30 +#define _cimg_mp_slot_y 31 +#define _cimg_mp_slot_z 32 +#define _cimg_mp_slot_c 33 + + mem.assign(96); + for (unsigned int i = 0; i<=10; ++i) mem[i] = (double)i; // mem[0-10] = 0...10 + for (unsigned int i = 1; i<=5; ++i) mem[i + 10] = -(double)i; // mem[11-15] = -1...-5 + mem[16] = 0.5; + mem[17] = 0; // thread_id + mem[18] = (double)imgin._width; // w + mem[19] = (double)imgin._height; // h + mem[20] = (double)imgin._depth; // d + mem[21] = (double)imgin._spectrum; // s + mem[22] = (double)imgin._is_shared; // r + mem[23] = (double)imgin._width*imgin._height; // wh + mem[24] = (double)imgin._width*imgin._height*imgin._depth; // whd + mem[25] = (double)imgin._width*imgin._height*imgin._depth*imgin._spectrum; // whds + mem[26] = (double)listin._width; // l + mem[27] = std::exp(1.0); // e + mem[28] = cimg::PI; // pi + mem[_cimg_mp_slot_nan] = cimg::type::nan(); // nan + + // Set value property : + // { -2 = other | -1 = variable | 0 = computation value | + // 1 = compile-time constant | N>1 = constant ptr to vector[N-1] }. + memtype.assign(mem._width,1,1,1,0); + for (unsigned int i = 0; i<_cimg_mp_slot_x; ++i) memtype[i] = 1; + memtype[17] = 0; + memtype[_cimg_mp_slot_x] = memtype[_cimg_mp_slot_y] = memtype[_cimg_mp_slot_z] = memtype[_cimg_mp_slot_c] = -2; + mempos = _cimg_mp_slot_c + 1; + variable_pos.assign(8); + + reserved_label.assign(128,1,1,1,~0U); + // reserved_label[4-28] are used to store these two-char variables: + // [0] = wh, [1] = whd, [2] = whds, [3] = pi, [4] = im, [5] = iM, [6] = ia, [7] = iv, + // [8] = is, [9] = ip, [10] = ic, [11] = xm, [12] = ym, [13] = zm, [14] = cm, [15] = xM, + // [16] = yM, [17] = zM, [18]=cM, [19]=i0...[28]=i9, [29] = interpolation, [30] = boundary + + // Compile expression into a serie of opcodes. + s_op = ""; ss_op = expr._data; + const unsigned int ind_result = compile(expr._data,expr._data + expr._width - 1,0,0,false); + if (!_cimg_mp_is_constant(ind_result)) { + if (_cimg_mp_is_vector(ind_result)) + CImg(&mem[ind_result] + 1,_cimg_mp_size(ind_result),1,1,1,true). + fill(cimg::type::nan()); + else mem[ind_result] = cimg::type::nan(); + } + + // Free resources used for compiling expression and prepare evaluation. + result_dim = _cimg_mp_size(ind_result); + if (mem._width>=256 && mem._width - mempos>=mem._width/2) mem.resize(mempos,1,1,1,-1); + result = mem._data + ind_result; + memtype.assign(); + constcache_vals.assign(); + constcache_inds.assign(); + level.assign(); + variable_pos.assign(); + reserved_label.assign(); + expr.assign(); + pexpr.assign(); + opcode.assign(); + opcode._is_shared = true; + + // Execute init() bloc if any specified. + if (code_init) { + mem[_cimg_mp_slot_x] = mem[_cimg_mp_slot_y] = mem[_cimg_mp_slot_z] = mem[_cimg_mp_slot_c] = 0; + p_code_end = code_init.end(); + for (p_code = code_init; p_code_data; + const ulongT target = opcode[1]; + mem[target] = _cimg_mp_defunc(*this); + } + } + p_code_end = code.end(); + } + + _cimg_math_parser(): + code(_code),p_code_end(0),p_break((CImg*)0 - 2), + imgin(CImg::const_empty()),listin(CImgList::const_empty()), + imgout(CImg::empty()),listout(CImgList::empty()), + img_stats(_img_stats),list_stats(_list_stats),list_median(_list_median),debug_indent(0), + result_dim(0),break_type(0),constcache_size(0),is_parallelizable(true),is_fill(false),need_input_copy(false), + calling_function(0) { + mem.assign(1 + _cimg_mp_slot_c,1,1,1,0); // Allow to skip 'is_empty?' test in operator()() + result = mem._data; + } + + _cimg_math_parser(const _cimg_math_parser& mp): + mem(mp.mem),code(mp.code),p_code_end(mp.p_code_end),p_break(mp.p_break), + imgin(mp.imgin),listin(mp.listin),imgout(mp.imgout),listout(mp.listout),img_stats(mp.img_stats), + list_stats(mp.list_stats),list_median(mp.list_median),debug_indent(0),result_dim(mp.result_dim), + break_type(0),constcache_size(0),is_parallelizable(mp.is_parallelizable),is_fill(mp.is_fill), + need_input_copy(mp.need_input_copy), result(mem._data + (mp.result - mp.mem._data)),calling_function(0) { +#ifdef cimg_use_openmp + mem[17] = omp_get_thread_num(); +#endif + opcode.assign(); + opcode._is_shared = true; + } + + // Count parentheses/brackets level of each character of the expression. + CImg get_level(CImg& expr) const { + bool is_escaped = false, next_is_escaped = false; + unsigned int mode = 0, next_mode = 0; // { 0=normal | 1=char-string | 2=vector-string + CImg res(expr._width - 1); + unsigned int *pd = res._data; + int level = 0; + for (const char *ps = expr._data; *ps && level>=0; ++ps) { + if (!is_escaped && !next_is_escaped && *ps=='\\') next_is_escaped = true; + if (!is_escaped && *ps=='\'') { // Non-escaped character + if (!mode && ps>expr._data && *(ps - 1)=='[') next_mode = mode = 2; // Start vector-string + else if (mode==2 && *(ps + 1)==']') next_mode = !mode; // End vector-string + else if (mode<2) next_mode = mode?(mode = 0):1; // Start/end char-string + } + *(pd++) = (unsigned int)(mode>=1 || is_escaped?level + (mode==1): + *ps=='(' || *ps=='['?level++: + *ps==')' || *ps==']'?--level: + level); + mode = next_mode; + is_escaped = next_is_escaped; + next_is_escaped = false; + } + if (mode) { + cimg::strellipsize(expr,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: Unterminated string literal, in expression '%s'.", + pixel_type(),_cimg_mp_calling_function, + expr._data); + } + if (level) { + cimg::strellipsize(expr,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: Unbalanced parentheses/brackets, in expression '%s'.", + pixel_type(),_cimg_mp_calling_function, + expr._data); + } + return res; + } + + // Tell for each character of an expression if it is inside a string or not. + CImg is_inside_string(CImg& expr) const { + bool is_escaped = false, next_is_escaped = false; + unsigned int mode = 0, next_mode = 0; // { 0=normal | 1=char-string | 2=vector-string + CImg res = CImg::string(expr); + bool *pd = res._data; + for (const char *ps = expr._data; *ps; ++ps) { + if (!next_is_escaped && *ps=='\\') next_is_escaped = true; + if (!is_escaped && *ps=='\'') { // Non-escaped character + if (!mode && ps>expr._data && *(ps - 1)=='[') next_mode = mode = 2; // Start vector-string + else if (mode==2 && *(ps + 1)==']') next_mode = !mode; // End vector-string + else if (mode<2) next_mode = mode?(mode = 0):1; // Start/end char-string + } + *(pd++) = mode>=1 || is_escaped; + mode = next_mode; + is_escaped = next_is_escaped; + next_is_escaped = false; + } + return res; + } + + // Compilation procedure. + unsigned int compile(char *ss, char *se, const unsigned int depth, unsigned int *const p_ref, + const bool is_single) { + if (depth>256) { + cimg::strellipsize(expr,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: Call stack overflow (infinite recursion?), " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + char c1, c2, c3, c4; + + // Simplify expression when possible. + do { + c2 = 0; + if (ssss && ((signed char)(c1 = *(se - 1))<=' ' || c1==';')) --se; + } + while (*ss=='(' && *(se - 1)==')' && std::strchr(ss,')')==se - 1) { + ++ss; --se; c2 = 1; + } + } while (c2 && ss::%s: %s%s Missing %s, in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op,*s_op?":":"", + *s_op=='F'?"argument":"item", + (ss_op - 4)>expr._data?"...":"", + (ss_op - 4)>expr._data?ss_op - 4:expr._data, + ss_op + std::strlen(ss_op)<&expr.back()?"...":""); + } + + const char *const previous_s_op = s_op, *const previous_ss_op = ss_op; + const unsigned int depth1 = depth + 1; + unsigned int pos, p1, p2, p3, arg1, arg2, arg3, arg4, arg5, arg6; + char + *const se1 = se - 1, *const se2 = se - 2, *const se3 = se - 3, + *const ss1 = ss + 1, *const ss2 = ss + 2, *const ss3 = ss + 3, *const ss4 = ss + 4, + *const ss5 = ss + 5, *const ss6 = ss + 6, *const ss7 = ss + 7, *const ss8 = ss + 8, + *s, *ps, *ns, *s0, *s1, *s2, *s3, sep = 0, end = 0; + double val = 0, val1, val2; + mp_func op; + + // 'p_ref' is a 'unsigned int[7]' used to return a reference to an image or vector value + // linked to the returned memory slot (reference that cannot be determined at compile time). + // p_ref[0] can be { 0 = scalar (unlinked) | 1 = vector value | 2 = image value (offset) | + // 3 = image value (coordinates) | 4 = image value as a vector (offsets) | + // 5 = image value as a vector (coordinates) }. + // Depending on p_ref[0], the remaining p_ref[k] have the following meaning: + // When p_ref[0]==0, p_ref is actually unlinked. + // When p_ref[0]==1, p_ref = [ 1, vector_ind, offset ]. + // When p_ref[0]==2, p_ref = [ 2, image_ind (or ~0U), is_relative, offset ]. + // When p_ref[0]==3, p_ref = [ 3, image_ind (or ~0U), is_relative, x, y, z, c ]. + // When p_ref[0]==4, p_ref = [ 4, image_ind (or ~0U), is_relative, offset ]. + // When p_ref[0]==5, p_ref = [ 5, image_ind (or ~0U), is_relative, x, y, z ]. + if (p_ref) { *p_ref = 0; p_ref[1] = p_ref[2] = p_ref[3] = p_ref[4] = p_ref[5] = p_ref[6] = ~0U; } + + const char saved_char = *se; *se = 0; + const unsigned int clevel = level[ss - expr._data], clevel1 = clevel + 1; + bool is_sth, is_relative; + CImg ref; + CImg variable_name; + CImgList l_opcode; + + // Look for a single value or a pre-defined variable. + int nb = 0; + s = ss + (*ss=='+' || *ss=='-'?1:0); + if (*s=='i' || *s=='I' || *s=='n' || *s=='N') { // Particular cases : +/-NaN and +/-Inf + is_sth = !(*ss=='-'); + if (!cimg::strcasecmp(s,"inf")) { val = cimg::type::inf(); nb = 1; } + else if (!cimg::strcasecmp(s,"nan")) { val = cimg::type::nan(); nb = 1; } + if (nb==1 && !is_sth) val = -val; + } + if (!nb) nb = cimg_sscanf(ss,"%lf%c%c",&val,&(sep=0),&(end=0)); + if (nb==1) _cimg_mp_constant(val); + if (nb==2 && sep=='%') _cimg_mp_constant(val/100); + + if (ss1==se) switch (*ss) { // One-char reserved variable + case 'c' : _cimg_mp_return(reserved_label['c']!=~0U?reserved_label['c']:_cimg_mp_slot_c); + case 'd' : _cimg_mp_return(reserved_label['d']!=~0U?reserved_label['d']:20); + case 'e' : _cimg_mp_return(reserved_label['e']!=~0U?reserved_label['e']:27); + case 'h' : _cimg_mp_return(reserved_label['h']!=~0U?reserved_label['h']:19); + case 'l' : _cimg_mp_return(reserved_label['l']!=~0U?reserved_label['l']:26); + case 'r' : _cimg_mp_return(reserved_label['r']!=~0U?reserved_label['r']:22); + case 's' : _cimg_mp_return(reserved_label['s']!=~0U?reserved_label['s']:21); + case 't' : _cimg_mp_return(reserved_label['t']!=~0U?reserved_label['t']:17); + case 'w' : _cimg_mp_return(reserved_label['w']!=~0U?reserved_label['w']:18); + case 'x' : _cimg_mp_return(reserved_label['x']!=~0U?reserved_label['x']:_cimg_mp_slot_x); + case 'y' : _cimg_mp_return(reserved_label['y']!=~0U?reserved_label['y']:_cimg_mp_slot_y); + case 'z' : _cimg_mp_return(reserved_label['z']!=~0U?reserved_label['z']:_cimg_mp_slot_z); + case 'u' : + if (reserved_label['u']!=~0U) _cimg_mp_return(reserved_label['u']); + _cimg_mp_scalar2(mp_u,0,1); + case 'g' : + if (reserved_label['g']!=~0U) _cimg_mp_return(reserved_label['g']); + _cimg_mp_scalar0(mp_g); + case 'i' : + if (reserved_label['i']!=~0U) _cimg_mp_return(reserved_label['i']); + _cimg_mp_scalar0(mp_i); + case 'I' : + _cimg_mp_op("Variable 'I'"); + if (reserved_label['I']!=~0U) _cimg_mp_return(reserved_label['I']); + _cimg_mp_check_vector0(imgin._spectrum); + need_input_copy = true; + pos = vector(imgin._spectrum); + CImg::vector((ulongT)mp_Joff,pos,0,0,imgin._spectrum).move_to(code); + _cimg_mp_return(pos); + case 'R' : + if (reserved_label['R']!=~0U) _cimg_mp_return(reserved_label['R']); + need_input_copy = true; + _cimg_mp_scalar6(mp_ixyzc,_cimg_mp_slot_x,_cimg_mp_slot_y,_cimg_mp_slot_z,0,0,0); + case 'G' : + if (reserved_label['G']!=~0U) _cimg_mp_return(reserved_label['G']); + need_input_copy = true; + _cimg_mp_scalar6(mp_ixyzc,_cimg_mp_slot_x,_cimg_mp_slot_y,_cimg_mp_slot_z,1,0,0); + case 'B' : + if (reserved_label['B']!=~0U) _cimg_mp_return(reserved_label['B']); + need_input_copy = true; + _cimg_mp_scalar6(mp_ixyzc,_cimg_mp_slot_x,_cimg_mp_slot_y,_cimg_mp_slot_z,2,0,0); + case 'A' : + if (reserved_label['A']!=~0U) _cimg_mp_return(reserved_label['A']); + need_input_copy = true; + _cimg_mp_scalar6(mp_ixyzc,_cimg_mp_slot_x,_cimg_mp_slot_y,_cimg_mp_slot_z,3,0,0); + } + else if (ss2==se) { // Two-chars reserved variable + arg1 = arg2 = ~0U; + if (*ss=='w' && *ss1=='h') // wh + _cimg_mp_return(reserved_label[0]!=~0U?reserved_label[0]:23); + if (*ss=='p' && *ss1=='i') // pi + _cimg_mp_return(reserved_label[3]!=~0U?reserved_label[3]:28); + if (*ss=='i') { + if (*ss1>='0' && *ss1<='9') { // i0...i9 + pos = 19 + *ss1 - '0'; + if (reserved_label[pos]!=~0U) _cimg_mp_return(reserved_label[pos]); + need_input_copy = true; + _cimg_mp_scalar6(mp_ixyzc,_cimg_mp_slot_x,_cimg_mp_slot_y,_cimg_mp_slot_z,pos - 19,0,0); + } + switch (*ss1) { + case 'm' : arg1 = 4; arg2 = 0; break; // im + case 'M' : arg1 = 5; arg2 = 1; break; // iM + case 'a' : arg1 = 6; arg2 = 2; break; // ia + case 'v' : arg1 = 7; arg2 = 3; break; // iv + case 's' : arg1 = 8; arg2 = 12; break; // is + case 'p' : arg1 = 9; arg2 = 13; break; // ip + case 'c' : // ic + if (reserved_label[10]!=~0U) _cimg_mp_return(reserved_label[10]); + if (mem_img_median==~0U) mem_img_median = imgin?constant(imgin.median()):0; + _cimg_mp_return(mem_img_median); + break; + } + } + else if (*ss1=='m') switch (*ss) { + case 'x' : arg1 = 11; arg2 = 4; break; // xm + case 'y' : arg1 = 12; arg2 = 5; break; // ym + case 'z' : arg1 = 13; arg2 = 6; break; // zm + case 'c' : arg1 = 14; arg2 = 7; break; // cm + } + else if (*ss1=='M') switch (*ss) { + case 'x' : arg1 = 15; arg2 = 8; break; // xM + case 'y' : arg1 = 16; arg2 = 9; break; // yM + case 'z' : arg1 = 17; arg2 = 10; break; // zM + case 'c' : arg1 = 18; arg2 = 11; break; // cM + } + if (arg1!=~0U) { + if (reserved_label[arg1]!=~0U) _cimg_mp_return(reserved_label[arg1]); + if (!img_stats) { + img_stats.assign(1,14,1,1,0).fill(imgin.get_stats(),false); + mem_img_stats.assign(1,14,1,1,~0U); + } + if (mem_img_stats[arg2]==~0U) mem_img_stats[arg2] = constant(img_stats[arg2]); + _cimg_mp_return(mem_img_stats[arg2]); + } + } else if (ss3==se) { // Three-chars reserved variable + if (*ss=='w' && *ss1=='h' && *ss2=='d') // whd + _cimg_mp_return(reserved_label[1]!=~0U?reserved_label[1]:24); + } else if (ss4==se) { // Four-chars reserved variable + if (*ss=='w' && *ss1=='h' && *ss2=='d' && *ss3=='s') // whds + _cimg_mp_return(reserved_label[2]!=~0U?reserved_label[2]:25); + } + + pos = ~0U; + is_sth = false; + for (s0 = ss, s = ss1; s='i'?1:3,p2); + + if (p_ref) { + *p_ref = _cimg_mp_is_vector(arg2)?4:2; + p_ref[1] = p1; + p_ref[2] = (unsigned int)is_relative; + p_ref[3] = arg1; + if (_cimg_mp_is_vector(arg2)) + set_variable_vector(arg2); // Prevent from being used in further optimization + else if (_cimg_mp_is_comp(arg2)) memtype[arg2] = -2; + if (p1!=~0U && _cimg_mp_is_comp(p1)) memtype[p1] = -2; + if (_cimg_mp_is_comp(arg1)) memtype[arg1] = -2; + } + + + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg2); + if (*ss>='i') + CImg::vector((ulongT)(is_relative?mp_list_set_joff:mp_list_set_ioff), + arg2,p1,arg1).move_to(code); + else if (_cimg_mp_is_scalar(arg2)) + CImg::vector((ulongT)(is_relative?mp_list_set_Joff_s:mp_list_set_Ioff_s), + arg2,p1,arg1).move_to(code); + else + CImg::vector((ulongT)(is_relative?mp_list_set_Joff_v:mp_list_set_Ioff_v), + arg2,p1,arg1,_cimg_mp_size(arg2)).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg2); + if (*ss>='i') + CImg::vector((ulongT)(is_relative?mp_set_joff:mp_set_ioff), + arg2,arg1).move_to(code); + else if (_cimg_mp_is_scalar(arg2)) + CImg::vector((ulongT)(is_relative?mp_set_Joff_s:mp_set_Ioff_s), + arg2,arg1).move_to(code); + else + CImg::vector((ulongT)(is_relative?mp_set_Joff_v:mp_set_Ioff_v), + arg2,arg1,_cimg_mp_size(arg2)).move_to(code); + } + _cimg_mp_return(arg2); + } + + if (*ss1=='(' && *ve1==')') { // i/j/I/J(_#ind,_x,_y,_z,_c) = value + if (!is_single) is_parallelizable = false; + if (*ss2=='#') { // Index specified + s0 = ss3; while (s01) { + arg2 = arg1 + 1; + if (p2>2) { + arg3 = arg2 + 1; + if (p2>3) arg4 = arg3 + 1; + } + } + } else if (s1='i'?1:3,p2); + + if (p_ref) { + *p_ref = _cimg_mp_is_vector(arg5)?5:3; + p_ref[1] = p1; + p_ref[2] = (unsigned int)is_relative; + p_ref[3] = arg1; + p_ref[4] = arg2; + p_ref[5] = arg3; + p_ref[6] = arg4; + if (_cimg_mp_is_vector(arg5)) + set_variable_vector(arg5); // Prevent from being used in further optimization + else if (_cimg_mp_is_comp(arg5)) memtype[arg5] = -2; + if (p1!=~0U && _cimg_mp_is_comp(p1)) memtype[p1] = -2; + if (_cimg_mp_is_comp(arg1)) memtype[arg1] = -2; + if (_cimg_mp_is_comp(arg2)) memtype[arg2] = -2; + if (_cimg_mp_is_comp(arg3)) memtype[arg3] = -2; + if (_cimg_mp_is_comp(arg4)) memtype[arg4] = -2; + } + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg5); + if (*ss>='i') + CImg::vector((ulongT)(is_relative?mp_list_set_jxyzc:mp_list_set_ixyzc), + arg5,p1,arg1,arg2,arg3,arg4).move_to(code); + else if (_cimg_mp_is_scalar(arg5)) + CImg::vector((ulongT)(is_relative?mp_list_set_Jxyz_s:mp_list_set_Ixyz_s), + arg5,p1,arg1,arg2,arg3).move_to(code); + else + CImg::vector((ulongT)(is_relative?mp_list_set_Jxyz_v:mp_list_set_Ixyz_v), + arg5,p1,arg1,arg2,arg3,_cimg_mp_size(arg5)).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg5); + if (*ss>='i') + CImg::vector((ulongT)(is_relative?mp_set_jxyzc:mp_set_ixyzc), + arg5,arg1,arg2,arg3,arg4).move_to(code); + else if (_cimg_mp_is_scalar(arg5)) + CImg::vector((ulongT)(is_relative?mp_set_Jxyz_s:mp_set_Ixyz_s), + arg5,arg1,arg2,arg3).move_to(code); + else + CImg::vector((ulongT)(is_relative?mp_set_Jxyz_v:mp_set_Ixyz_v), + arg5,arg1,arg2,arg3,_cimg_mp_size(arg5)).move_to(code); + } + _cimg_mp_return(arg5); + } + } + + // Assign vector value (direct). + if (l_variable_name>3 && *ve1==']' && *ss!='[') { + s0 = ve1; while (s0>ss && (*s0!='[' || level[s0 - expr._data]!=clevel)) --s0; + is_sth = true; // is_valid_variable_name? + if (*ss>='0' && *ss<='9') is_sth = false; + else for (ns = ss; nsss) { + variable_name[s0 - ss] = 0; // Remove brackets in variable name + arg1 = ~0U; // Vector slot + arg2 = compile(++s0,ve1,depth1,0,is_single); // Index + arg3 = compile(s + 1,se,depth1,0,is_single); // Value to assign + _cimg_mp_check_type(arg3,2,1,0); + + if (variable_name[1]) { // Multi-char variable + cimglist_for(variable_def,i) if (!std::strcmp(variable_name,variable_def[i])) { + arg1 = variable_pos[i]; break; + } + } else arg1 = reserved_label[*variable_name]; // Single-char variable + if (arg1==~0U) compile(ss,s0 - 1,depth1,0,is_single); // Variable does not exist -> error + else { // Variable already exists + if (_cimg_mp_is_scalar(arg1)) compile(ss,s,depth1,0,is_single); // Variable is not a vector -> error + if (_cimg_mp_is_constant(arg2)) { // Constant index -> return corresponding variable slot directly + nb = (int)mem[arg2]; + if (nb>=0 && nb<(int)_cimg_mp_size(arg1)) { + arg1+=nb + 1; + CImg::vector((ulongT)mp_copy,arg1,arg3).move_to(code); + _cimg_mp_return(arg1); + } + compile(ss,s,depth1,0,is_single); // Out-of-bounds reference -> error + } + + // Case of non-constant index -> return assigned value + linked reference + if (p_ref) { + *p_ref = 1; + p_ref[1] = arg1; + p_ref[2] = arg2; + if (_cimg_mp_is_comp(arg3)) memtype[arg3] = -2; // Prevent from being used in further optimization + if (_cimg_mp_is_comp(arg2)) memtype[arg2] = -2; + } + CImg::vector((ulongT)mp_vector_set_off,arg3,arg1,(ulongT)_cimg_mp_size(arg1), + arg2,arg3). + move_to(code); + _cimg_mp_return(arg3); + } + } + } + + // Assign user-defined macro. + if (l_variable_name>2 && *ve1==')' && *ss!='(') { + s0 = ve1; while (s0>ss && *s0!='(') --s0; + is_sth = std::strncmp(variable_name,"debug(",6) && + std::strncmp(variable_name,"print(",6); // is_valid_function_name? + if (*ss>='0' && *ss<='9') is_sth = false; + else for (ns = ss; nsss) { // Looks like a valid function declaration + s0 = variable_name._data + (s0 - ss); + *s0 = 0; + s1 = variable_name._data + l_variable_name - 1; // Pointer to closing parenthesis + CImg(variable_name._data,(unsigned int)(s0 - variable_name._data + 1)).move_to(macro_def,0); + ++s; while (*s && (signed char)*s<=' ') ++s; + CImg(s,(unsigned int)(se - s + 1)).move_to(macro_body,0); + + p1 = 1; // Indice of current parsed argument + for (s = s0 + 1; s<=s1; ++p1, s = ns + 1) { // Parse function arguments + if (p1>24) { + *se = saved_char; + cimg::strellipsize(variable_name,64); + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Too much specified arguments (>24) in macro " + "definition '%s()', in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + variable_name._data, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + while (*s && (signed char)*s<=' ') ++s; + if (*s==')' && p1==1) break; // Function has no arguments + + s2 = s; // Start of the argument name + is_sth = true; // is_valid_argument_name? + if (*s>='0' && *s<='9') is_sth = false; + else for (ns = s; ns' '; ++ns) + if (!is_varchar(*ns)) { is_sth = false; break; } + s3 = ns; // End of the argument name + while (*ns && (signed char)*ns<=' ') ++ns; + if (!is_sth || s2==s3 || (*ns!=',' && ns!=s1)) { + *se = saved_char; + cimg::strellipsize(variable_name,64); + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: %s name specified for argument %u when defining " + "macro '%s()', in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + is_sth?"Empty":"Invalid",p1, + variable_name._data, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + if (ns==s1 || *ns==',') { // New argument found + *s3 = 0; + p2 = (unsigned int)(s3 - s2); // Argument length + for (ps = std::strstr(macro_body[0],s2); ps; ps = std::strstr(ps,s2)) { // Replace by arg number + if (!((ps>macro_body[0]._data && is_varchar(*(ps - 1))) || + (ps + p2macro_body[0]._data && *(ps - 1)=='#') { // Remove pre-number sign + *(ps - 1) = (char)p1; + if (ps + p26 && !std::strncmp(variable_name,"const ",6); + + s0 = variable_name._data; + if (is_const) { + s0+=6; while ((signed char)*s0<=' ') ++s0; + variable_name.resize(variable_name.end() - s0,1,1,1,0,0,1); + } + + if (*variable_name>='0' && *variable_name<='9') is_sth = false; + else for (ns = variable_name._data; *ns; ++ns) + if (!is_varchar(*ns)) { is_sth = false; break; } + + // Assign variable (direct). + if (is_sth) { + arg3 = variable_name[1]?~0U:*variable_name; // One-char variable + if (variable_name[1] && !variable_name[2]) { // Two-chars variable + c1 = variable_name[0]; + c2 = variable_name[1]; + if (c1=='w' && c2=='h') arg3 = 0; // wh + else if (c1=='p' && c2=='i') arg3 = 3; // pi + else if (c1=='i') { + if (c2>='0' && c2<='9') arg3 = 19 + c2 - '0'; // i0...i9 + else if (c2=='m') arg3 = 4; // im + else if (c2=='M') arg3 = 5; // iM + else if (c2=='a') arg3 = 6; // ia + else if (c2=='v') arg3 = 7; // iv + else if (c2=='s') arg3 = 8; // is + else if (c2=='p') arg3 = 9; // ip + else if (c2=='c') arg3 = 10; // ic + } else if (c2=='m') { + if (c1=='x') arg3 = 11; // xm + else if (c1=='y') arg3 = 12; // ym + else if (c1=='z') arg3 = 13; // zm + else if (c1=='c') arg3 = 14; // cm + } else if (c2=='M') { + if (c1=='x') arg3 = 15; // xM + else if (c1=='y') arg3 = 16; // yM + else if (c1=='z') arg3 = 17; // zM + else if (c1=='c') arg3 = 18; // cM + } + } else if (variable_name[1] && variable_name[2] && !variable_name[3]) { // Three-chars variable + c1 = variable_name[0]; + c2 = variable_name[1]; + c3 = variable_name[2]; + if (c1=='w' && c2=='h' && c3=='d') arg3 = 1; // whd + } else if (variable_name[1] && variable_name[2] && variable_name[3] && + !variable_name[4]) { // Four-chars variable + c1 = variable_name[0]; + c2 = variable_name[1]; + c3 = variable_name[2]; + c4 = variable_name[3]; + if (c1=='w' && c2=='h' && c3=='d' && c4=='s') arg3 = 2; // whds + } else if (!std::strcmp(variable_name,"interpolation")) arg3 = 29; // interpolation + else if (!std::strcmp(variable_name,"boundary")) arg3 = 30; // boundary + + arg1 = ~0U; + arg2 = compile(s + 1,se,depth1,0,is_single); + if (is_const) _cimg_mp_check_constant(arg2,2,0); + + if (arg3!=~0U) // One-char variable, or variable in reserved_labels + arg1 = reserved_label[arg3]; + else // Multi-char variable name : check for existing variable with same name + cimglist_for(variable_def,i) + if (!std::strcmp(variable_name,variable_def[i])) { arg1 = variable_pos[i]; break; } + + if (arg1==~0U) { // Create new variable + if (_cimg_mp_is_vector(arg2)) { // Vector variable + arg1 = is_comp_vector(arg2)?arg2:vector_copy(arg2); + set_variable_vector(arg1); + } else { // Scalar variable + if (is_const) arg1 = arg2; + else { + arg1 = _cimg_mp_is_comp(arg2)?arg2:scalar1(mp_copy,arg2); + memtype[arg1] = -1; + } + } + + if (arg3!=~0U) reserved_label[arg3] = arg1; + else { + if (variable_def._width>=variable_pos._width) variable_pos.resize(-200,1,1,1,0); + variable_pos[variable_def._width] = arg1; + variable_name.move_to(variable_def); + } + + } else { // Variable already exists -> assign a new value + if (is_const || _cimg_mp_is_constant(arg1)) { + *se = saved_char; + cimg::strellipsize(variable_name,64); + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Invalid assignment of %sconst variable '%s'%s, " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + _cimg_mp_is_constant(arg1)?"already-defined ":"non-", + variable_name._data, + !_cimg_mp_is_constant(arg1) && is_const?" as a new const variable":"", + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + _cimg_mp_check_type(arg2,2,_cimg_mp_is_vector(arg1)?3:1,_cimg_mp_size(arg1)); + if (_cimg_mp_is_vector(arg1)) { // Vector + if (_cimg_mp_is_vector(arg2)) // From vector + CImg::vector((ulongT)mp_vector_copy,arg1,arg2,(ulongT)_cimg_mp_size(arg1)). + move_to(code); + else // From scalar + CImg::vector((ulongT)mp_vector_init,arg1,1,(ulongT)_cimg_mp_size(arg1),arg2). + move_to(code); + } else // Scalar + CImg::vector((ulongT)mp_copy,arg1,arg2).move_to(code); + } + _cimg_mp_return(arg1); + } + + // Assign lvalue (variable name was not valid for a direct assignment). + arg1 = ~0U; + is_sth = (bool)std::strchr(variable_name,'?'); // Contains_ternary_operator? + if (is_sth) break; // Do nothing and make ternary operator prioritary over assignment + + if (l_variable_name>2 && (std::strchr(variable_name,'(') || std::strchr(variable_name,'['))) { + ref.assign(7); + arg1 = compile(ss,s,depth1,ref,is_single); // Lvalue slot + arg2 = compile(s + 1,se,depth1,0,is_single); // Value to assign + + if (*ref==1) { // Vector value (scalar): V[k] = scalar + _cimg_mp_check_type(arg2,2,1,0); + arg3 = ref[1]; // Vector slot + arg4 = ref[2]; // Index + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((ulongT)mp_vector_set_off,arg2,arg3,(ulongT)_cimg_mp_size(arg3),arg4,arg2). + move_to(code); + _cimg_mp_return(arg2); + } + + if (*ref==2) { // Image value (scalar): i/j[_#ind,off] = scalar + if (!is_single) is_parallelizable = false; + _cimg_mp_check_type(arg2,2,1,0); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg2); + CImg::vector((ulongT)(is_relative?mp_list_set_joff:mp_list_set_ioff), + arg2,p1,arg3).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg2); + CImg::vector((ulongT)(is_relative?mp_set_joff:mp_set_ioff), + arg2,arg3).move_to(code); + } + _cimg_mp_return(arg2); + } + + if (*ref==3) { // Image value (scalar): i/j(_#ind,_x,_y,_z,_c) = scalar + if (!is_single) is_parallelizable = false; + _cimg_mp_check_type(arg2,2,1,0); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + arg6 = ref[6]; // C + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg2); + CImg::vector((ulongT)(is_relative?mp_list_set_jxyzc:mp_list_set_ixyzc), + arg2,p1,arg3,arg4,arg5,arg6).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg2); + CImg::vector((ulongT)(is_relative?mp_set_jxyzc:mp_set_ixyzc), + arg2,arg3,arg4,arg5,arg6).move_to(code); + } + _cimg_mp_return(arg2); + } + + if (*ref==4) { // Image value (vector): I/J[_#ind,off] = value + if (!is_single) is_parallelizable = false; + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg2); + if (_cimg_mp_is_scalar(arg2)) + CImg::vector((ulongT)(is_relative?mp_list_set_Joff_s:mp_list_set_Ioff_s), + arg2,p1,arg3).move_to(code); + else + CImg::vector((ulongT)(is_relative?mp_list_set_Joff_v:mp_list_set_Ioff_v), + arg2,p1,arg3,_cimg_mp_size(arg2)).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg2); + if (_cimg_mp_is_scalar(arg2)) + CImg::vector((ulongT)(is_relative?mp_set_Joff_s:mp_set_Ioff_s), + arg2,arg3).move_to(code); + else + CImg::vector((ulongT)(is_relative?mp_set_Joff_v:mp_set_Ioff_v), + arg2,arg3,_cimg_mp_size(arg2)).move_to(code); + } + _cimg_mp_return(arg2); + } + + if (*ref==5) { // Image value (vector): I/J(_#ind,_x,_y,_z,_c) = value + if (!is_single) is_parallelizable = false; + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg2); + if (_cimg_mp_is_scalar(arg2)) + CImg::vector((ulongT)(is_relative?mp_list_set_Jxyz_s:mp_list_set_Ixyz_s), + arg2,p1,arg3,arg4,arg5).move_to(code); + else + CImg::vector((ulongT)(is_relative?mp_list_set_Jxyz_v:mp_list_set_Ixyz_v), + arg2,p1,arg3,arg4,arg5,_cimg_mp_size(arg2)).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg2); + if (_cimg_mp_is_scalar(arg2)) + CImg::vector((ulongT)(is_relative?mp_set_Jxyz_s:mp_set_Ixyz_s), + arg2,arg3,arg4,arg5).move_to(code); + else + CImg::vector((ulongT)(is_relative?mp_set_Jxyz_v:mp_set_Ixyz_v), + arg2,arg3,arg4,arg5,_cimg_mp_size(arg2)).move_to(code); + } + _cimg_mp_return(arg2); + } + + if (_cimg_mp_is_vector(arg1)) { // Vector variable: V = value + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (_cimg_mp_is_vector(arg2)) // From vector + CImg::vector((ulongT)mp_vector_copy,arg1,arg2,(ulongT)_cimg_mp_size(arg1)). + move_to(code); + else // From scalar + CImg::vector((ulongT)mp_vector_init,arg1,1,(ulongT)_cimg_mp_size(arg1),arg2). + move_to(code); + _cimg_mp_return(arg1); + } + + if (_cimg_mp_is_variable(arg1)) { // Scalar variable: s = scalar + _cimg_mp_check_type(arg2,2,1,0); + CImg::vector((ulongT)mp_copy,arg1,arg2).move_to(code); + _cimg_mp_return(arg1); + } + } + + // No assignment expressions match -> error + *se = saved_char; + cimg::strellipsize(variable_name,64); + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Invalid %slvalue '%s', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + arg1!=~0U && _cimg_mp_is_constant(arg1)?"const ":"", + variable_name._data, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + + // Apply unary/binary/ternary operators. The operator precedences should be the same as in C++. + for (s = se2, ps = se3, ns = ps - 1; s>ss1; --s, --ps, --ns) // Here, ns = ps - 1 + if (*s=='=' && (*ps=='*' || *ps=='/' || *ps=='^') && *ns==*ps && + level[s - expr._data]==clevel) { // Self-operators for complex numbers only (**=,//=,^^=) + _cimg_mp_op(*ps=='*'?"Operator '**='":*ps=='/'?"Operator '//='":"Operator '^^='"); + + ref.assign(7); + arg1 = compile(ss,ns,depth1,ref,is_single); // Vector slot + arg2 = compile(s + 1,se,depth1,0,is_single); // Right operand + _cimg_mp_check_type(arg1,1,2,2); + _cimg_mp_check_type(arg2,2,3,2); + if (_cimg_mp_is_vector(arg2)) { // Complex **= complex + if (*ps=='*') + CImg::vector((ulongT)mp_complex_mul,arg1,arg1,arg2).move_to(code); + else if (*ps=='/') + CImg::vector((ulongT)mp_complex_div_vv,arg1,arg1,arg2).move_to(code); + else + CImg::vector((ulongT)mp_complex_pow_vv,arg1,arg1,arg2).move_to(code); + } else { // Complex **= scalar + if (*ps=='*') { + if (arg2==1) _cimg_mp_return(arg1); + self_vector_s(arg1,mp_self_mul,arg2); + } else if (*ps=='/') { + if (arg2==1) _cimg_mp_return(arg1); + self_vector_s(arg1,mp_self_div,arg2); + } else { + if (arg2==1) _cimg_mp_return(arg1); + CImg::vector((ulongT)mp_complex_pow_vs,arg1,arg1,arg2).move_to(code); + } + } + + // Write computed value back in image if necessary. + if (*ref==4) { // Image value (vector): I/J[_#ind,off] **= value + if (!is_single) is_parallelizable = false; + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg1); + CImg::vector((ulongT)(is_relative?mp_list_set_Joff_v:mp_list_set_Ioff_v), + arg1,p1,arg3,_cimg_mp_size(arg1)).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg1); + CImg::vector((ulongT)(is_relative?mp_set_Joff_v:mp_set_Ioff_v), + arg1,arg3,_cimg_mp_size(arg1)).move_to(code); + } + + } else if (*ref==5) { // Image value (vector): I/J(_#ind,_x,_y,_z,_c) **= value + if (!is_single) is_parallelizable = false; + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg1); + CImg::vector((ulongT)(is_relative?mp_list_set_Jxyz_v:mp_list_set_Ixyz_v), + arg1,p1,arg3,arg4,arg5,_cimg_mp_size(arg1)).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg1); + CImg::vector((ulongT)(is_relative?mp_set_Jxyz_v:mp_set_Ixyz_v), + arg1,arg3,arg4,arg5,_cimg_mp_size(arg1)).move_to(code); + } + } + + _cimg_mp_return(arg1); + } + + for (s = se2, ps = se3, ns = ps - 1; s>ss1; --s, --ps, --ns) // Here, ns = ps - 1 + if (*s=='=' && (*ps=='+' || *ps=='-' || *ps=='*' || *ps=='/' || *ps=='%' || + *ps=='&' || *ps=='^' || *ps=='|' || + (*ps=='>' && *ns=='>') || (*ps=='<' && *ns=='<')) && + level[s - expr._data]==clevel) { // Self-operators (+=,-=,*=,/=,%=,>>=,<<=,&=,^=,|=) + switch (*ps) { + case '+' : op = mp_self_add; _cimg_mp_op("Operator '+='"); break; + case '-' : op = mp_self_sub; _cimg_mp_op("Operator '-='"); break; + case '*' : op = mp_self_mul; _cimg_mp_op("Operator '*='"); break; + case '/' : op = mp_self_div; _cimg_mp_op("Operator '/='"); break; + case '%' : op = mp_self_modulo; _cimg_mp_op("Operator '%='"); break; + case '<' : op = mp_self_bitwise_left_shift; _cimg_mp_op("Operator '<<='"); break; + case '>' : op = mp_self_bitwise_right_shift; _cimg_mp_op("Operator '>>='"); break; + case '&' : op = mp_self_bitwise_and; _cimg_mp_op("Operator '&='"); break; + case '|' : op = mp_self_bitwise_or; _cimg_mp_op("Operator '|='"); break; + default : op = mp_self_pow; _cimg_mp_op("Operator '^='"); break; + } + s1 = *ps=='>' || *ps=='<'?ns:ps; + + ref.assign(7); + arg1 = compile(ss,s1,depth1,ref,is_single); // Variable slot + arg2 = compile(s + 1,se,depth1,0,is_single); // Value to apply + + // Check for particular case to be simplified. + if ((op==mp_self_add || op==mp_self_sub) && !arg2) _cimg_mp_return(arg1); + if ((op==mp_self_mul || op==mp_self_div) && arg2==1) _cimg_mp_return(arg1); + + // Apply operator on a copy to prevent modifying a constant or a variable. + if (*ref && (_cimg_mp_is_constant(arg1) || _cimg_mp_is_vector(arg1) || _cimg_mp_is_variable(arg1))) { + if (_cimg_mp_is_vector(arg1)) arg1 = vector_copy(arg1); + else arg1 = scalar1(mp_copy,arg1); + } + + if (*ref==1) { // Vector value (scalar): V[k] += scalar + _cimg_mp_check_type(arg2,2,1,0); + arg3 = ref[1]; // Vector slot + arg4 = ref[2]; // Index + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((ulongT)op,arg1,arg2).move_to(code); + CImg::vector((ulongT)mp_vector_set_off,arg1,arg3,(ulongT)_cimg_mp_size(arg3),arg4,arg1). + move_to(code); + _cimg_mp_return(arg1); + } + + if (*ref==2) { // Image value (scalar): i/j[_#ind,off] += scalar + if (!is_single) is_parallelizable = false; + _cimg_mp_check_type(arg2,2,1,0); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((ulongT)op,arg1,arg2).move_to(code); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg1); + CImg::vector((ulongT)(is_relative?mp_list_set_joff:mp_list_set_ioff), + arg1,p1,arg3).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg1); + CImg::vector((ulongT)(is_relative?mp_set_joff:mp_set_ioff), + arg1,arg3).move_to(code); + } + _cimg_mp_return(arg1); + } + + if (*ref==3) { // Image value (scalar): i/j(_#ind,_x,_y,_z,_c) += scalar + if (!is_single) is_parallelizable = false; + _cimg_mp_check_type(arg2,2,1,0); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + arg6 = ref[6]; // C + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((ulongT)op,arg1,arg2).move_to(code); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg1); + CImg::vector((ulongT)(is_relative?mp_list_set_jxyzc:mp_list_set_ixyzc), + arg1,p1,arg3,arg4,arg5,arg6).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg1); + CImg::vector((ulongT)(is_relative?mp_set_jxyzc:mp_set_ixyzc), + arg1,arg3,arg4,arg5,arg6).move_to(code); + } + _cimg_mp_return(arg1); + } + + if (*ref==4) { // Image value (vector): I/J[_#ind,off] += value + if (!is_single) is_parallelizable = false; + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (_cimg_mp_is_scalar(arg2)) self_vector_s(arg1,op,arg2); else self_vector_v(arg1,op,arg2); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg1); + CImg::vector((ulongT)(is_relative?mp_list_set_Joff_v:mp_list_set_Ioff_v), + arg1,p1,arg3,_cimg_mp_size(arg1)).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg1); + CImg::vector((ulongT)(is_relative?mp_set_Joff_v:mp_set_Ioff_v), + arg1,arg3,_cimg_mp_size(arg1)).move_to(code); + } + _cimg_mp_return(arg1); + } + + if (*ref==5) { // Image value (vector): I/J(_#ind,_x,_y,_z,_c) += value + if (!is_single) is_parallelizable = false; + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (_cimg_mp_is_scalar(arg2)) self_vector_s(arg1,op,arg2); else self_vector_v(arg1,op,arg2); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg1); + CImg::vector((ulongT)(is_relative?mp_list_set_Jxyz_v:mp_list_set_Ixyz_v), + arg1,p1,arg3,arg4,arg5,_cimg_mp_size(arg1)).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg1); + CImg::vector((ulongT)(is_relative?mp_set_Jxyz_v:mp_set_Ixyz_v), + arg1,arg3,arg4,arg5,_cimg_mp_size(arg1)).move_to(code); + } + _cimg_mp_return(arg1); + } + + if (_cimg_mp_is_vector(arg1)) { // Vector variable: V += value + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (_cimg_mp_is_vector(arg2)) self_vector_v(arg1,op,arg2); // Vector += vector + else self_vector_s(arg1,op,arg2); // Vector += scalar + _cimg_mp_return(arg1); + } + + if (_cimg_mp_is_variable(arg1)) { // Scalar variable: s += scalar + _cimg_mp_check_type(arg2,2,1,0); + CImg::vector((ulongT)op,arg1,arg2).move_to(code); + _cimg_mp_return(arg1); + } + + variable_name.assign(ss,(unsigned int)(s - ss)).back() = 0; + cimg::strpare(variable_name,false,true); + *se = saved_char; + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Invalid %slvalue '%s', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + _cimg_mp_is_constant(arg1)?"const ":"", + variable_name._data, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + + for (s = ss1; s::vector((ulongT)mp_if,pos,arg1,arg2,arg3, + p3 - p2,code._width - p3,arg4).move_to(code,p2); + _cimg_mp_return(pos); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='|' && *ns=='|' && level[s - expr._data]==clevel) { // Logical or ('||') + _cimg_mp_op("Operator '||'"); + arg1 = compile(ss,s,depth1,0,is_single); + _cimg_mp_check_type(arg1,1,1,0); + if (arg1>0 && arg1<=16) _cimg_mp_return(1); + p2 = code._width; + arg2 = compile(s + 2,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,1,0); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant(mem[arg1] || mem[arg2]); + if (!arg1) _cimg_mp_return(arg2); + pos = scalar(); + CImg::vector((ulongT)mp_logical_or,pos,arg1,arg2,code._width - p2). + move_to(code,p2); + _cimg_mp_return(pos); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='&' && *ns=='&' && level[s - expr._data]==clevel) { // Logical and ('&&') + _cimg_mp_op("Operator '&&'"); + arg1 = compile(ss,s,depth1,0,is_single); + _cimg_mp_check_type(arg1,1,1,0); + if (!arg1) _cimg_mp_return(0); + p2 = code._width; + arg2 = compile(s + 2,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,1,0); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant(mem[arg1] && mem[arg2]); + if (arg1>0 && arg1<=16) _cimg_mp_return(arg2); + pos = scalar(); + CImg::vector((ulongT)mp_logical_and,pos,arg1,arg2,code._width - p2). + move_to(code,p2); + _cimg_mp_return(pos); + } + + for (s = se2; s>ss; --s) + if (*s=='|' && level[s - expr._data]==clevel) { // Bitwise or ('|') + _cimg_mp_op("Operator '|'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 1,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_bitwise_or,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) { + if (!arg2) _cimg_mp_return(arg1); + _cimg_mp_vector2_vs(mp_bitwise_or,arg1,arg2); + } + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) { + if (!arg1) _cimg_mp_return(arg2); + _cimg_mp_vector2_sv(mp_bitwise_or,arg1,arg2); + } + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant((longT)mem[arg1] | (longT)mem[arg2]); + if (!arg2) _cimg_mp_return(arg1); + if (!arg1) _cimg_mp_return(arg2); + _cimg_mp_scalar2(mp_bitwise_or,arg1,arg2); + } + + for (s = se2; s>ss; --s) + if (*s=='&' && level[s - expr._data]==clevel) { // Bitwise and ('&') + _cimg_mp_op("Operator '&'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 1,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_bitwise_and,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_bitwise_and,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_bitwise_and,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant((longT)mem[arg1] & (longT)mem[arg2]); + if (!arg1 || !arg2) _cimg_mp_return(0); + _cimg_mp_scalar2(mp_bitwise_and,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='!' && *ns=='=' && level[s - expr._data]==clevel) { // Not equal to ('!=') + _cimg_mp_op("Operator '!='"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 2,se,depth1,0,is_single); + if (arg1==arg2) _cimg_mp_return(0); + p1 = _cimg_mp_size(arg1); + p2 = _cimg_mp_size(arg2); + if (p1 || p2) { + if (p1 && p2 && p1!=p2) _cimg_mp_return(1); + _cimg_mp_scalar6(mp_vector_neq,arg1,p1,arg2,p2,11,1); + } + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]!=mem[arg2]); + _cimg_mp_scalar2(mp_neq,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='=' && *ns=='=' && level[s - expr._data]==clevel) { // Equal to ('==') + _cimg_mp_op("Operator '=='"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 2,se,depth1,0,is_single); + if (arg1==arg2) _cimg_mp_return(1); + p1 = _cimg_mp_size(arg1); + p2 = _cimg_mp_size(arg2); + if (p1 || p2) { + if (p1 && p2 && p1!=p2) _cimg_mp_return(0); + _cimg_mp_scalar6(mp_vector_eq,arg1,p1,arg2,p2,11,1); + } + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]==mem[arg2]); + _cimg_mp_scalar2(mp_eq,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='<' && *ns=='=' && level[s - expr._data]==clevel) { // Less or equal than ('<=') + _cimg_mp_op("Operator '<='"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 2,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_lte,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_lte,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_lte,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]<=mem[arg2]); + if (arg1==arg2) _cimg_mp_return(1); + _cimg_mp_scalar2(mp_lte,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='>' && *ns=='=' && level[s - expr._data]==clevel) { // Greater or equal than ('>=') + _cimg_mp_op("Operator '>='"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 2,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_gte,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_gte,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_gte,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]>=mem[arg2]); + if (arg1==arg2) _cimg_mp_return(1); + _cimg_mp_scalar2(mp_gte,arg1,arg2); + } + + for (s = se2, ns = se1, ps = se3; s>ss; --s, --ns, --ps) + if (*s=='<' && *ns!='<' && *ps!='<' && level[s - expr._data]==clevel) { // Less than ('<') + _cimg_mp_op("Operator '<'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 1,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_lt,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_lt,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_lt,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]ss; --s, --ns, --ps) + if (*s=='>' && *ns!='>' && *ps!='>' && level[s - expr._data]==clevel) { // Greather than ('>') + _cimg_mp_op("Operator '>'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 1,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_gt,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_gt,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_gt,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]>mem[arg2]); + if (arg1==arg2) _cimg_mp_return(0); + _cimg_mp_scalar2(mp_gt,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='<' && *ns=='<' && level[s - expr._data]==clevel) { // Left bit shift ('<<') + _cimg_mp_op("Operator '<<'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 2,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) + _cimg_mp_vector2_vv(mp_bitwise_left_shift,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) { + if (!arg2) _cimg_mp_return(arg1); + _cimg_mp_vector2_vs(mp_bitwise_left_shift,arg1,arg2); + } + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) + _cimg_mp_vector2_sv(mp_bitwise_left_shift,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant((longT)mem[arg1]<<(unsigned int)mem[arg2]); + if (!arg1) _cimg_mp_return(0); + if (!arg2) _cimg_mp_return(arg1); + _cimg_mp_scalar2(mp_bitwise_left_shift,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='>' && *ns=='>' && level[s - expr._data]==clevel) { // Right bit shift ('>>') + _cimg_mp_op("Operator '>>'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 2,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) + _cimg_mp_vector2_vv(mp_bitwise_right_shift,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) { + if (!arg2) _cimg_mp_return(arg1); + _cimg_mp_vector2_vs(mp_bitwise_right_shift,arg1,arg2); + } + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) + _cimg_mp_vector2_sv(mp_bitwise_right_shift,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant((longT)mem[arg1]>>(unsigned int)mem[arg2]); + if (!arg1) _cimg_mp_return(0); + if (!arg2) _cimg_mp_return(arg1); + _cimg_mp_scalar2(mp_bitwise_right_shift,arg1,arg2); + } + + for (ns = se1, s = se2, ps = pexpr._data + (se3 - expr._data); s>ss; --ns, --s, --ps) + if (*s=='+' && (*ns!='+' || ns!=se1) && *ps!='-' && *ps!='+' && *ps!='*' && *ps!='/' && *ps!='%' && + *ps!='&' && *ps!='|' && *ps!='^' && *ps!='!' && *ps!='~' && *ps!='#' && + (*ps!='e' || !(ps - pexpr._data>ss - expr._data && (*(ps - 1)=='.' || (*(ps - 1)>='0' && + *(ps - 1)<='9')))) && + level[s - expr._data]==clevel) { // Addition ('+') + _cimg_mp_op("Operator '+'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 1,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (!arg2) _cimg_mp_return(arg1); + if (!arg1) _cimg_mp_return(arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_add,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_add,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_add,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1] + mem[arg2]); + if (code) { // Try to spot linear case 'a*b + c'. + CImg &pop = code.back(); + if (pop[0]==(ulongT)mp_mul && _cimg_mp_is_comp(pop[1]) && (pop[1]==arg1 || pop[1]==arg2)) { + arg3 = (unsigned int)pop[1]; + arg4 = (unsigned int)pop[2]; + arg5 = (unsigned int)pop[3]; + code.remove(); + CImg::vector((ulongT)mp_linear_add,arg3,arg4,arg5,arg3==arg2?arg1:arg2).move_to(code); + _cimg_mp_return(arg3); + } + } + if (arg2==1) _cimg_mp_scalar1(mp_increment,arg1); + if (arg1==1) _cimg_mp_scalar1(mp_increment,arg2); + _cimg_mp_scalar2(mp_add,arg1,arg2); + } + + for (ns = se1, s = se2, ps = pexpr._data + (se3 - expr._data); s>ss; --ns, --s, --ps) + if (*s=='-' && (*ns!='-' || ns!=se1) && *ps!='-' && *ps!='+' && *ps!='*' && *ps!='/' && *ps!='%' && + *ps!='&' && *ps!='|' && *ps!='^' && *ps!='!' && *ps!='~' && *ps!='#' && + (*ps!='e' || !(ps - pexpr._data>ss - expr._data && (*(ps - 1)=='.' || (*(ps - 1)>='0' && + *(ps - 1)<='9')))) && + level[s - expr._data]==clevel) { // Subtraction ('-') + _cimg_mp_op("Operator '-'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 1,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (!arg2) _cimg_mp_return(arg1); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_sub,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_sub,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) { + if (!arg1) _cimg_mp_vector1_v(mp_minus,arg2); + _cimg_mp_vector2_sv(mp_sub,arg1,arg2); + } + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1] - mem[arg2]); + if (!arg1) _cimg_mp_scalar1(mp_minus,arg2); + if (code) { // Try to spot linear cases 'a*b - c' and 'c - a*b'. + CImg &pop = code.back(); + if (pop[0]==(ulongT)mp_mul && _cimg_mp_is_comp(pop[1]) && (pop[1]==arg1 || pop[1]==arg2)) { + arg3 = (unsigned int)pop[1]; + arg4 = (unsigned int)pop[2]; + arg5 = (unsigned int)pop[3]; + code.remove(); + CImg::vector((ulongT)(arg3==arg1?mp_linear_sub_left:mp_linear_sub_right), + arg3,arg4,arg5,arg3==arg1?arg2:arg1).move_to(code); + _cimg_mp_return(arg3); + } + } + if (arg2==1) _cimg_mp_scalar1(mp_decrement,arg1); + _cimg_mp_scalar2(mp_sub,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='*' && *ns=='*' && level[s - expr._data]==clevel) { // Complex multiplication ('**') + _cimg_mp_op("Operator '**'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 2,se,depth1,0,is_single); + _cimg_mp_check_type(arg1,1,3,2); + _cimg_mp_check_type(arg2,2,3,2); + if (arg2==1) _cimg_mp_return(arg1); + if (arg1==1) _cimg_mp_return(arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) { + pos = vector(2); + CImg::vector((ulongT)mp_complex_mul,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_mul,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_mul,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]*mem[arg2]); + if (!arg1 || !arg2) _cimg_mp_return(0); + _cimg_mp_scalar2(mp_mul,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='/' && *ns=='/' && level[s - expr._data]==clevel) { // Complex division ('//') + _cimg_mp_op("Operator '//'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 2,se,depth1,0,is_single); + _cimg_mp_check_type(arg1,1,3,2); + _cimg_mp_check_type(arg2,2,3,2); + if (arg2==1) _cimg_mp_return(arg1); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) { + pos = vector(2); + CImg::vector((ulongT)mp_complex_div_vv,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_div,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) { + pos = vector(2); + CImg::vector((ulongT)mp_complex_div_sv,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]/mem[arg2]); + if (!arg1) _cimg_mp_return(0); + _cimg_mp_scalar2(mp_div,arg1,arg2); + } + + for (s = se2; s>ss; --s) if (*s=='*' && level[s - expr._data]==clevel) { // Multiplication ('*') + _cimg_mp_op("Operator '*'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 1,se,depth1,0,is_single); + p2 = _cimg_mp_size(arg2); + if (p2>0 && _cimg_mp_size(arg1)==p2*p2) { // Particular case of matrix multiplication + pos = vector(p2); + CImg::vector((ulongT)mp_matrix_mul,pos,arg1,arg2,p2,p2,1).move_to(code); + _cimg_mp_return(pos); + } + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (arg2==1) _cimg_mp_return(arg1); + if (arg1==1) _cimg_mp_return(arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_mul,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_mul,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_mul,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]*mem[arg2]); + + if (code) { // Try to spot double multiplication 'a*b*c'. + CImg &pop = code.back(); + if (pop[0]==(ulongT)mp_mul && _cimg_mp_is_comp(pop[1]) && (pop[1]==arg1 || pop[1]==arg2)) { + arg3 = (unsigned int)pop[1]; + arg4 = (unsigned int)pop[2]; + arg5 = (unsigned int)pop[3]; + code.remove(); + CImg::vector((ulongT)mp_mul2,arg3,arg4,arg5,arg3==arg2?arg1:arg2).move_to(code); + _cimg_mp_return(arg3); + } + } + if (!arg1 || !arg2) _cimg_mp_return(0); + _cimg_mp_scalar2(mp_mul,arg1,arg2); + } + + for (s = se2; s>ss; --s) if (*s=='/' && level[s - expr._data]==clevel) { // Division ('/') + _cimg_mp_op("Operator '/'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 1,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (arg2==1) _cimg_mp_return(arg1); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_div,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_div,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_div,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]/mem[arg2]); + if (!arg1) _cimg_mp_return(0); + _cimg_mp_scalar2(mp_div,arg1,arg2); + } + + for (s = se2, ns = se1; s>ss; --s, --ns) + if (*s=='%' && *ns!='^' && level[s - expr._data]==clevel) { // Modulo ('%') + _cimg_mp_op("Operator '%'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 1,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_modulo,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_modulo,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_modulo,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant(cimg::mod(mem[arg1],mem[arg2])); + _cimg_mp_scalar2(mp_modulo,arg1,arg2); + } + + if (se1>ss) { + if (*ss=='+' && (*ss1!='+' || (ss2='0' && *ss2<='9'))) { // Unary plus ('+') + _cimg_mp_op("Operator '+'"); + _cimg_mp_return(compile(ss1,se,depth1,0,is_single)); + } + + if (*ss=='-' && (*ss1!='-' || (ss2='0' && *ss2<='9'))) { // Unary minus ('-') + _cimg_mp_op("Operator '-'"); + arg1 = compile(ss1,se,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_minus,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(-mem[arg1]); + _cimg_mp_scalar1(mp_minus,arg1); + } + + if (*ss=='!') { // Logical not ('!') + _cimg_mp_op("Operator '!'"); + if (*ss1=='!') { // '!!expr' optimized as 'bool(expr)' + arg1 = compile(ss2,se,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_bool,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant((bool)mem[arg1]); + _cimg_mp_scalar1(mp_bool,arg1); + } + arg1 = compile(ss1,se,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_logical_not,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(!mem[arg1]); + _cimg_mp_scalar1(mp_logical_not,arg1); + } + + if (*ss=='~') { // Bitwise not ('~') + _cimg_mp_op("Operator '~'"); + arg1 = compile(ss1,se,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_bitwise_not,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(~(unsigned int)mem[arg1]); + _cimg_mp_scalar1(mp_bitwise_not,arg1); + } + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='^' && *ns=='^' && level[s - expr._data]==clevel) { // Complex power ('^^') + _cimg_mp_op("Operator '^^'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 2,se,depth1,0,is_single); + _cimg_mp_check_type(arg1,1,3,2); + _cimg_mp_check_type(arg2,2,3,2); + if (arg2==1) _cimg_mp_return(arg1); + pos = vector(2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) { + CImg::vector((ulongT)mp_complex_pow_vv,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) { + CImg::vector((ulongT)mp_complex_pow_vs,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) { + CImg::vector((ulongT)mp_complex_pow_sv,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + CImg::vector((ulongT)mp_complex_pow_ss,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + + for (s = se2; s>ss; --s) + if (*s=='^' && level[s - expr._data]==clevel) { // Power ('^') + _cimg_mp_op("Operator '^'"); + arg1 = compile(ss,s,depth1,0,is_single); + arg2 = compile(s + 1,se,depth1,0,is_single); + _cimg_mp_check_type(arg2,2,3,_cimg_mp_size(arg1)); + if (arg2==1) _cimg_mp_return(arg1); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_pow,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_pow,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_pow,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant(std::pow(mem[arg1],mem[arg2])); + switch (arg2) { + case 0 : _cimg_mp_return(1); + case 2 : _cimg_mp_scalar1(mp_sqr,arg1); + case 3 : _cimg_mp_scalar1(mp_pow3,arg1); + case 4 : _cimg_mp_scalar1(mp_pow4,arg1); + default : + if (_cimg_mp_is_constant(arg2)) { + if (mem[arg2]==0.5) { _cimg_mp_scalar1(mp_sqrt,arg1); } + else if (mem[arg2]==0.25) { _cimg_mp_scalar1(mp_pow0_25,arg1); } + } + _cimg_mp_scalar2(mp_pow,arg1,arg2); + } + } + + // Percentage computation. + if (*se1=='%') { + arg1 = compile(ss,se1,depth1,0,is_single); + arg2 = _cimg_mp_is_constant(arg1)?0:constant(100); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector2_vs(mp_div,arg1,arg2); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(mem[arg1]/100); + _cimg_mp_scalar2(mp_div,arg1,arg2); + } + + is_sth = ss1ss && (*se1=='+' || *se1=='-') && *se2==*se1)) { // Pre/post-decrement and increment + if ((is_sth && *ss=='+') || (!is_sth && *se1=='+')) { + _cimg_mp_op("Operator '++'"); + op = mp_self_increment; + } else { + _cimg_mp_op("Operator '--'"); + op = mp_self_decrement; + } + ref.assign(7); + arg1 = is_sth?compile(ss2,se,depth1,ref,is_single): + compile(ss,se2,depth1,ref,is_single); // Variable slot + + // Apply operator on a copy to prevent modifying a constant or a variable. + if (*ref && (_cimg_mp_is_constant(arg1) || _cimg_mp_is_vector(arg1) || _cimg_mp_is_variable(arg1))) { + if (_cimg_mp_is_vector(arg1)) arg1 = vector_copy(arg1); + else arg1 = scalar1(mp_copy,arg1); + } + + if (is_sth) pos = arg1; // Determine return indice, depending on pre/post action + else { + if (_cimg_mp_is_vector(arg1)) pos = vector_copy(arg1); + else pos = scalar1(mp_copy,arg1); + } + + if (*ref==1) { // Vector value (scalar): V[k]++ + arg3 = ref[1]; // Vector slot + arg4 = ref[2]; // Index + if (is_sth && p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((ulongT)op,arg1,1).move_to(code); + CImg::vector((ulongT)mp_vector_set_off,arg1,arg3,(ulongT)_cimg_mp_size(arg3),arg4,arg1). + move_to(code); + _cimg_mp_return(pos); + } + + if (*ref==2) { // Image value (scalar): i/j[_#ind,off]++ + if (!is_single) is_parallelizable = false; + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (is_sth && p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((ulongT)op,arg1).move_to(code); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(pos); + CImg::vector((ulongT)(is_relative?mp_list_set_joff:mp_list_set_ioff), + arg1,p1,arg3).move_to(code); + } else { + if (!imgout) _cimg_mp_return(pos); + CImg::vector((ulongT)(is_relative?mp_set_joff:mp_set_ioff), + arg1,arg3).move_to(code); + } + _cimg_mp_return(pos); + } + + if (*ref==3) { // Image value (scalar): i/j(_#ind,_x,_y,_z,_c)++ + if (!is_single) is_parallelizable = false; + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + arg6 = ref[6]; // C + if (is_sth && p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((ulongT)op,arg1).move_to(code); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(pos); + CImg::vector((ulongT)(is_relative?mp_list_set_jxyzc:mp_list_set_ixyzc), + arg1,p1,arg3,arg4,arg5,arg6).move_to(code); + } else { + if (!imgout) _cimg_mp_return(pos); + CImg::vector((ulongT)(is_relative?mp_set_jxyzc:mp_set_ixyzc), + arg1,arg3,arg4,arg5,arg6).move_to(code); + } + _cimg_mp_return(pos); + } + + if (*ref==4) { // Image value (vector): I/J[_#ind,off]++ + if (!is_single) is_parallelizable = false; + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (is_sth && p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + self_vector_s(arg1,op==mp_self_increment?mp_self_add:mp_self_sub,1); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(pos); + CImg::vector((ulongT)(is_relative?mp_list_set_Joff_v:mp_list_set_Ioff_v), + arg1,p1,arg3,_cimg_mp_size(arg1)).move_to(code); + } else { + if (!imgout) _cimg_mp_return(pos); + CImg::vector((ulongT)(is_relative?mp_set_Joff_v:mp_set_Ioff_v), + arg1,arg3,_cimg_mp_size(arg1)).move_to(code); + } + _cimg_mp_return(pos); + } + + if (*ref==5) { // Image value (vector): I/J(_#ind,_x,_y,_z,_c)++ + if (!is_single) is_parallelizable = false; + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + if (is_sth && p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + self_vector_s(arg1,op==mp_self_increment?mp_self_add:mp_self_sub,1); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(pos); + CImg::vector((ulongT)(is_relative?mp_list_set_Jxyz_v:mp_list_set_Ixyz_v), + arg1,p1,arg3,arg4,arg5,_cimg_mp_size(arg1)).move_to(code); + } else { + if (!imgout) _cimg_mp_return(pos); + CImg::vector((ulongT)(is_relative?mp_set_Jxyz_v:mp_set_Ixyz_v), + arg1,arg3,arg4,arg5,_cimg_mp_size(arg1)).move_to(code); + } + _cimg_mp_return(pos); + } + + if (_cimg_mp_is_vector(arg1)) { // Vector variable: V++ + self_vector_s(arg1,op==mp_self_increment?mp_self_add:mp_self_sub,1); + _cimg_mp_return(pos); + } + + if (_cimg_mp_is_variable(arg1)) { // Scalar variable: s++ + CImg::vector((ulongT)op,arg1).move_to(code); + _cimg_mp_return(pos); + } + + if (is_sth) variable_name.assign(ss2,(unsigned int)(se - ss1)); + else variable_name.assign(ss,(unsigned int)(se1 - ss)); + variable_name.back() = 0; + cimg::strpare(variable_name,false,true); + *se = saved_char; + cimg::strellipsize(variable_name,64); + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Invalid %slvalue '%s', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + _cimg_mp_is_constant(arg1)?"const ":"", + variable_name._data, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + + // Array-like access to vectors and image values 'i/j/I/J[_#ind,offset,_boundary]' and 'vector[offset]'. + if (*se1==']' && *ss!='[') { + _cimg_mp_op("Value accessor '[]'"); + is_relative = *ss=='j' || *ss=='J'; + s0 = s1 = std::strchr(ss,'['); if (s0) { do { --s1; } while ((signed char)*s1<=' '); cimg::swap(*s0,*++s1); } + + if ((*ss=='I' || *ss=='J') && *ss1=='[' && + (reserved_label[*ss]==~0U || !_cimg_mp_is_vector(reserved_label[*ss]))) { // Image value as a vector + if (*ss2=='#') { // Index specified + s0 = ss3; while (s0::vector((ulongT)(is_relative?mp_list_Joff:mp_list_Ioff), + pos,p1,arg1,arg2==~0U?_cimg_mp_boundary:arg2,p2).move_to(code); + } else { + need_input_copy = true; + CImg::vector((ulongT)(is_relative?mp_Joff:mp_Ioff), + pos,arg1,arg2==~0U?_cimg_mp_boundary:arg2,p2).move_to(code); + } + _cimg_mp_return(pos); + } + + if ((*ss=='i' || *ss=='j') && *ss1=='[' && + (reserved_label[*ss]==~0U || !_cimg_mp_is_vector(reserved_label[*ss]))) { // Image value as a scalar + if (*ss2=='#') { // Index specified + s0 = ss3; while (s0ss && (*s0!='[' || level[s0 - expr._data]!=clevel)) --s0; + if (s0>ss) { // Vector value + arg1 = compile(ss,s0,depth1,0,is_single); + if (_cimg_mp_is_scalar(arg1)) { + variable_name.assign(ss,(unsigned int)(s0 - ss + 1)).back() = 0; + *se = saved_char; + cimg::strellipsize(variable_name,64); + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Array brackets used on non-vector variable '%s', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + variable_name._data, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + + } + s1 = s0 + 1; while (s1 sub-vector extraction + p1 = _cimg_mp_size(arg1); + arg2 = compile(++s0,s1,depth1,0,is_single); // Starting indice + arg3 = compile(++s1,se1,depth1,0,is_single); // Length + _cimg_mp_check_constant(arg3,2,3); + arg3 = (unsigned int)mem[arg3]; + pos = vector(arg3); + CImg::vector((ulongT)mp_vector_crop,pos,arg1,p1,arg2,arg3).move_to(code); + _cimg_mp_return(pos); + } + + // One argument -> vector value reference + arg2 = compile(++s0,se1,depth1,0,is_single); + if (_cimg_mp_is_constant(arg2)) { // Constant index + nb = (int)mem[arg2]; + if (nb>=0 && nb<(int)_cimg_mp_size(arg1)) _cimg_mp_return(arg1 + 1 + nb); + variable_name.assign(ss,(unsigned int)(s0 - ss)).back() = 0; + *se = saved_char; + cimg::strellipsize(variable_name,64); + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: Out-of-bounds reference '%s[%d]' " + "(vector '%s' has dimension %u), " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function, + variable_name._data,nb, + variable_name._data,_cimg_mp_size(arg1), + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + if (p_ref) { + *p_ref = 1; + p_ref[1] = arg1; + p_ref[2] = arg2; + if (_cimg_mp_is_comp(arg2)) memtype[arg2] = -2; // Prevent from being used in further optimization + } + pos = scalar3(mp_vector_off,arg1,_cimg_mp_size(arg1),arg2); + memtype[pos] = -2; // Prevent from being used in further optimization + _cimg_mp_return(pos); + } + } + + // Look for a function call, an access to image value, or a parenthesis. + if (*se1==')') { + if (*ss=='(') _cimg_mp_return(compile(ss1,se1,depth1,p_ref,is_single)); // Simple parentheses + _cimg_mp_op("Value accessor '()'"); + is_relative = *ss=='j' || *ss=='J'; + s0 = s1 = std::strchr(ss,'('); if (s0) { do { --s1; } while ((signed char)*s1<=' '); cimg::swap(*s0,*++s1); } + + // I/J(_#ind,_x,_y,_z,_interpolation,_boundary_conditions) + if ((*ss=='I' || *ss=='J') && *ss1=='(') { // Image value as scalar + if (*ss2=='#') { // Index specified + s0 = ss3; while (s01) { + arg2 = arg1 + 1; + if (p2>2) arg3 = arg2 + 1; + } + if (s1::vector((ulongT)(is_relative?mp_list_Jxyz:mp_list_Ixyz), + pos,p1,arg1,arg2,arg3, + arg4==~0U?_cimg_mp_interpolation:arg4, + arg5==~0U?_cimg_mp_boundary:arg5,p2).move_to(code); + else { + need_input_copy = true; + CImg::vector((ulongT)(is_relative?mp_Jxyz:mp_Ixyz), + pos,arg1,arg2,arg3, + arg4==~0U?_cimg_mp_interpolation:arg4, + arg5==~0U?_cimg_mp_boundary:arg5,p2).move_to(code); + } + _cimg_mp_return(pos); + } + + // i/j(_#ind,_x,_y,_z,_c,_interpolation,_boundary_conditions) + if ((*ss=='i' || *ss=='j') && *ss1=='(') { // Image value as scalar + if (*ss2=='#') { // Index specified + s0 = ss3; while (s01) { + arg2 = arg1 + 1; + if (p2>2) { + arg3 = arg2 + 1; + if (p2>3) arg4 = arg3 + 1; + } + } + if (s1::vector((ulongT)mp_arg,0,0,p2,arg1,arg2).move_to(l_opcode); + for (s = ++s2; s::vector(arg3).move_to(l_opcode); + ++p3; + s = ns; + } + (l_opcode>'y').move_to(opcode); + opcode[2] = opcode._height; + if (_cimg_mp_is_constant(arg1)) { + p3-=1; // Number of args + arg1 = (unsigned int)(mem[arg1]<0?mem[arg1] + p3:mem[arg1]); + if (arg1::vector((ulongT)mp_break,_cimg_mp_slot_nan).move_to(code); + _cimg_mp_return_nan(); + } + } + + if (!std::strncmp(ss,"breakpoint(",11)) { // Break point (for abort test) + _cimg_mp_op("Function 'breakpoint()'"); + if (pexpr[se2 - expr._data]=='(') { // no arguments? + CImg::vector((ulongT)mp_breakpoint,_cimg_mp_slot_nan).move_to(code); + _cimg_mp_return_nan(); + } + } + break; + + case 'c' : + if (!std::strncmp(ss,"cabs(",5)) { // Complex absolute value + _cimg_mp_op("Function 'cabs()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + _cimg_mp_check_type(arg1,0,2,2); + _cimg_mp_scalar2(mp_complex_abs,arg1 + 1,arg1 + 2); + } + + if (!std::strncmp(ss,"carg(",5)) { // Complex argument + _cimg_mp_op("Function 'carg()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + _cimg_mp_check_type(arg1,0,2,2); + _cimg_mp_scalar2(mp_atan2,arg1 + 2,arg1 + 1); + } + + if (!std::strncmp(ss,"cats(",5)) { // Concatenate strings + _cimg_mp_op("Function 'cats()'"); + CImg::vector((ulongT)mp_cats,0,0,0).move_to(l_opcode); + arg1 = 0; + for (s = ss5; s::vector(arg1,_cimg_mp_size(arg1)).move_to(l_opcode); + s = ns; + } + _cimg_mp_check_constant(arg1,1,3); // Last argument = output vector size + l_opcode.remove(); + (l_opcode>'y').move_to(opcode); + p1 = (unsigned int)mem[arg1]; + pos = vector(p1); + opcode[1] = pos; + opcode[2] = p1; + opcode[3] = opcode._height; + opcode.move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"cbrt(",5)) { // Cubic root + _cimg_mp_op("Function 'cbrt()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_cbrt,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(cimg::cbrt(mem[arg1])); + _cimg_mp_scalar1(mp_cbrt,arg1); + } + + if (!std::strncmp(ss,"cconj(",6)) { // Complex conjugate + _cimg_mp_op("Function 'cconj()'"); + arg1 = compile(ss6,se1,depth1,0,is_single); + _cimg_mp_check_type(arg1,0,2,2); + pos = vector(2); + CImg::vector((ulongT)mp_complex_conj,pos,arg1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"ceil(",5)) { // Ceil + _cimg_mp_op("Function 'ceil()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_ceil,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::ceil(mem[arg1])); + _cimg_mp_scalar1(mp_ceil,arg1); + } + + if (!std::strncmp(ss,"cexp(",5)) { // Complex exponential + _cimg_mp_op("Function 'cexp()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + _cimg_mp_check_type(arg1,0,2,2); + pos = vector(2); + CImg::vector((ulongT)mp_complex_exp,pos,arg1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"clog(",5)) { // Complex logarithm + _cimg_mp_op("Function 'clog()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + _cimg_mp_check_type(arg1,0,2,2); + pos = vector(2); + CImg::vector((ulongT)mp_complex_log,pos,arg1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"continue(",9)) { // Complex absolute value + if (pexpr[se2 - expr._data]=='(') { // no arguments? + CImg::vector((ulongT)mp_continue,_cimg_mp_slot_nan).move_to(code); + _cimg_mp_return_nan(); + } + } + + if (!std::strncmp(ss,"copy(",5)) { // Memory copy + _cimg_mp_op("Function 'copy()'"); + ref.assign(14); + s1 = ss5; while (s1(1,22).move_to(code); + code.back().get_shared_rows(0,7).fill((ulongT)mp_memcopy,p1,arg1,arg2,arg3,arg4,arg5,arg6); + code.back().get_shared_rows(8,21).fill(ref); + _cimg_mp_return(p1); + } + + if (!std::strncmp(ss,"cos(",4)) { // Cosine + _cimg_mp_op("Function 'cos()'"); + arg1 = compile(ss4,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_cos,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::cos(mem[arg1])); + _cimg_mp_scalar1(mp_cos,arg1); + } + + if (!std::strncmp(ss,"cosh(",5)) { // Hyperbolic cosine + _cimg_mp_op("Function 'cosh()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_cosh,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::cosh(mem[arg1])); + _cimg_mp_scalar1(mp_cosh,arg1); + } + + if (!std::strncmp(ss,"critical(",9)) { // Critical section (single thread at a time) + _cimg_mp_op("Function 'critical()'"); + p1 = code._width; + arg1 = compile(ss + 9,se1,depth1,p_ref,true); + CImg::vector((ulongT)mp_critical,arg1,code._width - p1).move_to(code,p1); + _cimg_mp_return(arg1); + } + + if (!std::strncmp(ss,"crop(",5)) { // Image crop + _cimg_mp_op("Function 'crop()'"); + if (*ss5=='#') { // Index specified + s0 = ss6; while (s0::sequence(_cimg_mp_size(arg1),arg1 + 1, + arg1 + (ulongT)_cimg_mp_size(arg1)); + opcode.resize(1,std::min(opcode._height,4U),1,1,0).move_to(l_opcode); + is_sth = true; + } else { + _cimg_mp_check_type(arg1,pos + 1,1,0); + CImg::vector(arg1).move_to(l_opcode); + } + s = ns; + } + (l_opcode>'y').move_to(opcode); + + arg1 = 0; arg2 = (p1!=~0U); + switch (opcode._height) { + case 0 : case 1 : + CImg::vector(0,0,0,0,~0U,~0U,~0U,~0U,0).move_to(opcode); + break; + case 2 : + CImg::vector(*opcode,0,0,0,opcode[1],~0U,~0U,~0U,_cimg_mp_boundary).move_to(opcode); + arg1 = arg2?3:2; + break; + case 3 : + CImg::vector(*opcode,0,0,0,opcode[1],~0U,~0U,~0U,opcode[2]).move_to(opcode); + arg1 = arg2?3:2; + break; + case 4 : + CImg::vector(*opcode,opcode[1],0,0,opcode[2],opcode[3],~0U,~0U,_cimg_mp_boundary). + move_to(opcode); + arg1 = (is_sth?2:1) + arg2; + break; + case 5 : + CImg::vector(*opcode,opcode[1],0,0,opcode[2],opcode[3],~0U,~0U,opcode[4]). + move_to(opcode); + arg1 = (is_sth?2:1) + arg2; + break; + case 6 : + CImg::vector(*opcode,opcode[1],opcode[2],0,opcode[3],opcode[4],opcode[5],~0U, + _cimg_mp_boundary).move_to(opcode); + arg1 = (is_sth?2:4) + arg2; + break; + case 7 : + CImg::vector(*opcode,opcode[1],opcode[2],0,opcode[3],opcode[4],opcode[5],~0U, + opcode[6]).move_to(opcode); + arg1 = (is_sth?2:4) + arg2; + break; + case 8 : + CImg::vector(*opcode,opcode[1],opcode[2],opcode[3],opcode[4],opcode[5],opcode[6], + opcode[7],_cimg_mp_boundary).move_to(opcode); + arg1 = (is_sth?2:5) + arg2; + break; + case 9 : + arg1 = (is_sth?2:5) + arg2; + break; + default : // Error -> too much arguments + *se = saved_char; + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Too much arguments specified, " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + + _cimg_mp_check_type((unsigned int)*opcode,arg2 + 1,1,0); + _cimg_mp_check_type((unsigned int)opcode[1],arg2 + 1 + (is_sth?0:1),1,0); + _cimg_mp_check_type((unsigned int)opcode[2],arg2 + 1 + (is_sth?0:2),1,0); + _cimg_mp_check_type((unsigned int)opcode[3],arg2 + 1 + (is_sth?0:3),1,0); + if (opcode[4]!=(ulongT)~0U) { + _cimg_mp_check_constant((unsigned int)opcode[4],arg1,3); + opcode[4] = (ulongT)mem[opcode[4]]; + } + if (opcode[5]!=(ulongT)~0U) { + _cimg_mp_check_constant((unsigned int)opcode[5],arg1 + 1,3); + opcode[5] = (ulongT)mem[opcode[5]]; + } + if (opcode[6]!=(ulongT)~0U) { + _cimg_mp_check_constant((unsigned int)opcode[6],arg1 + 2,3); + opcode[6] = (ulongT)mem[opcode[6]]; + } + if (opcode[7]!=(ulongT)~0U) { + _cimg_mp_check_constant((unsigned int)opcode[7],arg1 + 3,3); + opcode[7] = (ulongT)mem[opcode[7]]; + } + _cimg_mp_check_type((unsigned int)opcode[8],arg1 + 4,1,0); + + if (opcode[4]==(ulongT)~0U || opcode[5]==(ulongT)~0U || + opcode[6]==(ulongT)~0U || opcode[7]==(ulongT)~0U) { + if (p1!=~0U) { + _cimg_mp_check_constant(p1,1,1); + p1 = (unsigned int)cimg::mod((int)mem[p1],listin.width()); + } + const CImg &img = p1!=~0U?listin[p1]:imgin; + if (!img) { + *se = saved_char; + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Cannot crop empty image when " + "some xyzc-coordinates are unspecified, in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + if (opcode[4]==(ulongT)~0U) opcode[4] = (ulongT)img._width; + if (opcode[5]==(ulongT)~0U) opcode[5] = (ulongT)img._height; + if (opcode[6]==(ulongT)~0U) opcode[6] = (ulongT)img._depth; + if (opcode[7]==(ulongT)~0U) opcode[7] = (ulongT)img._spectrum; + } + + pos = vector((unsigned int)(opcode[4]*opcode[5]*opcode[6]*opcode[7])); + CImg::vector((ulongT)mp_crop, + pos,p1, + *opcode,opcode[1],opcode[2],opcode[3], + opcode[4],opcode[5],opcode[6],opcode[7], + opcode[8]).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"cross(",6)) { // Cross product + _cimg_mp_op("Function 'cross()'"); + s1 = ss6; while (s1::vector((ulongT)mp_cross,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"cut(",4)) { // Cut + _cimg_mp_op("Function 'cut()'"); + s1 = ss4; while (s1val2?val2:val); + } + _cimg_mp_scalar3(mp_cut,arg1,arg2,arg3); + } + break; + + case 'd' : + if (*ss1=='(') { // Image depth + _cimg_mp_op("Function 'd()'"); + if (*ss2=='#') { // Index specified + p1 = compile(ss3,se1,depth1,0,is_single); + _cimg_mp_check_list(false); + } else { if (ss2!=se1) break; p1 = ~0U; } + pos = scalar(); + CImg::vector((ulongT)mp_image_d,pos,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"date(",5)) { // Current date or file date + _cimg_mp_op("Function 'date()'"); + s1 = ss5; while (s1::string(s1,true,true).unroll('y'),true); + cimg::strpare(variable_name,false,true); + ((CImg::vector((ulongT)mp_date,pos,0,arg1,_cimg_mp_size(pos)),variable_name)>'y'). + move_to(opcode); + *se1 = ')'; + } else + CImg::vector((ulongT)mp_date,pos,0,arg1,_cimg_mp_size(pos)).move_to(opcode); + opcode[2] = opcode._height; + opcode.move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"debug(",6)) { // Print debug info + _cimg_mp_op("Function 'debug()'"); + p1 = code._width; + arg1 = compile(ss6,se1,depth1,p_ref,is_single); + *se1 = 0; + variable_name.assign(CImg::string(ss6,true,true).unroll('y'),true); + cimg::strpare(variable_name,false,true); + ((CImg::vector((ulongT)mp_debug,arg1,0,code._width - p1), + variable_name)>'y').move_to(opcode); + opcode[2] = opcode._height; + opcode.move_to(code,p1); + *se1 = ')'; + _cimg_mp_return(arg1); + } + + if (!std::strncmp(ss,"display(",8)) { // Display memory, vector or image + _cimg_mp_op("Function 'display()'"); + if (pexpr[se2 - expr._data]=='(') { // no arguments? + CImg::vector((ulongT)mp_display_memory,_cimg_mp_slot_nan).move_to(code); + _cimg_mp_return_nan(); + } + if (*ss8!='#') { // Vector + s1 = ss8; while (s1::string(ss8,true,true).unroll('y'),true); + cimg::strpare(variable_name,false,true); + if (_cimg_mp_is_vector(arg1)) + ((CImg::vector((ulongT)mp_vector_print,arg1,0,(ulongT)_cimg_mp_size(arg1),0), + variable_name)>'y').move_to(opcode); + else + ((CImg::vector((ulongT)mp_print,arg1,0,0), + variable_name)>'y').move_to(opcode); + opcode[2] = opcode._height; + opcode.move_to(code); + + ((CImg::vector((ulongT)mp_display,arg1,0,(ulongT)_cimg_mp_size(arg1), + arg2,arg3,arg4,arg5), + variable_name)>'y').move_to(opcode); + opcode[2] = opcode._height; + opcode.move_to(code); + *s1 = c1; + _cimg_mp_return(arg1); + + } else { // Image + p1 = compile(ss8 + 1,se1,depth1,0,is_single); + _cimg_mp_check_list(true); + CImg::vector((ulongT)mp_image_display,_cimg_mp_slot_nan,p1).move_to(code); + _cimg_mp_return_nan(); + } + } + + if (!std::strncmp(ss,"det(",4)) { // Matrix determinant + _cimg_mp_op("Function 'det()'"); + arg1 = compile(ss4,se1,depth1,0,is_single); + _cimg_mp_check_matrix_square(arg1,1); + p1 = (unsigned int)cimg::round(std::sqrt((float)_cimg_mp_size(arg1))); + _cimg_mp_scalar2(mp_det,arg1,p1); + } + + if (!std::strncmp(ss,"diag(",5)) { // Diagonal matrix + _cimg_mp_op("Function 'diag()'"); + CImg::vector((ulongT)mp_diag,0,0).move_to(l_opcode); + for (s = ss5; s::sequence(_cimg_mp_size(arg2),arg2 + 1, + arg2 + (ulongT)_cimg_mp_size(arg2)). + move_to(l_opcode); + else CImg::vector(arg2).move_to(l_opcode); + s = ns; + } + (l_opcode>'y').move_to(opcode); + arg1 = opcode._height - 3; + pos = vector(arg1*arg1); + opcode[1] = pos; + opcode[2] = opcode._height; + opcode.move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"dot(",4)) { // Dot product + _cimg_mp_op("Function 'dot()'"); + s1 = ss4; while (s1::vector((ulongT)mp_dowhile,p1,p2,arg2 - arg1,code._width - arg2,_cimg_mp_size(p1), + p1>=arg6 && !_cimg_mp_is_constant(p1), + p2>=arg6 && !_cimg_mp_is_constant(p2)).move_to(code,arg1); + _cimg_mp_return(p1); + } + + if (!std::strncmp(ss,"draw(",5)) { // Draw image + if (!is_single) is_parallelizable = false; + _cimg_mp_op("Function 'draw()'"); + if (*ss5=='#') { // Index specified + s0 = ss6; while (s01) { + arg3 = arg2 + 1; + if (p2>2) { + arg4 = arg3 + 1; + if (p2>3) arg5 = arg4 + 1; + } + } + ++s0; + is_sth = true; + } else { + if (s0::vector((ulongT)mp_draw,arg1,(ulongT)_cimg_mp_size(arg1),p1,arg2,arg3,arg4,arg5, + 0,0,0,0,1,(ulongT)~0U,0,1).move_to(l_opcode); + + arg2 = arg3 = arg4 = arg5 = ~0U; + p2 = p1!=~0U?0:1; + if (s0::vector((ulongT)mp_echo,_cimg_mp_slot_nan,0).move_to(l_opcode); + for (s = ss5; s::vector(arg1,_cimg_mp_size(arg1)).move_to(l_opcode); + s = ns; + } + (l_opcode>'y').move_to(opcode); + opcode[2] = opcode._height; + opcode.move_to(code); + _cimg_mp_return_nan(); + } + + if (!std::strncmp(ss,"eig(",4)) { // Matrix eigenvalues/eigenvector + _cimg_mp_op("Function 'eig()'"); + arg1 = compile(ss4,se1,depth1,0,is_single); + _cimg_mp_check_matrix_square(arg1,1); + p1 = (unsigned int)cimg::round(std::sqrt((float)_cimg_mp_size(arg1))); + pos = vector((p1 + 1)*p1); + CImg::vector((ulongT)mp_matrix_eig,pos,arg1,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"end(",4)) { // End + _cimg_mp_op("Function 'end()'"); + code.swap(code_end); + compile(ss4,se1,depth1,p_ref,true); + code.swap(code_end); + _cimg_mp_return_nan(); + } + + if (!std::strncmp(ss,"ellipse(",8)) { // Ellipse/circle drawing + if (!is_single) is_parallelizable = false; + _cimg_mp_op("Function 'ellipse()'"); + if (*ss8=='#') { // Index specified + s0 = ss + 9; while (s0::vector((ulongT)mp_ellipse,_cimg_mp_slot_nan,0,p1).move_to(l_opcode); + for (s = s0; s::sequence(_cimg_mp_size(arg2),arg2 + 1, + arg2 + (ulongT)_cimg_mp_size(arg2)). + move_to(l_opcode); + else CImg::vector(arg2).move_to(l_opcode); + s = ns; + } + (l_opcode>'y').move_to(opcode); + opcode[2] = opcode._height; + opcode.move_to(code); + _cimg_mp_return_nan(); + } + + if (!std::strncmp(ss,"ext(",4)) { // Extern + _cimg_mp_op("Function 'ext()'"); + if (!is_single) is_parallelizable = false; + CImg::vector((ulongT)mp_ext,0,0).move_to(l_opcode); + pos = 1; + for (s = ss4; s::vector(arg1,_cimg_mp_size(arg1)).move_to(l_opcode); + s = ns; + } + (l_opcode>'y').move_to(opcode); + pos = scalar(); + opcode[1] = pos; + opcode[2] = opcode._height; + opcode.move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"exp(",4)) { // Exponential + _cimg_mp_op("Function 'exp()'"); + arg1 = compile(ss4,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_exp,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::exp(mem[arg1])); + _cimg_mp_scalar1(mp_exp,arg1); + } + + if (!std::strncmp(ss,"eye(",4)) { // Identity matrix + _cimg_mp_op("Function 'eye()'"); + arg1 = compile(ss4,se1,depth1,0,is_single); + _cimg_mp_check_constant(arg1,1,3); + p1 = (unsigned int)mem[arg1]; + pos = vector(p1*p1); + CImg::vector((ulongT)mp_eye,pos,p1).move_to(code); + _cimg_mp_return(pos); + } + break; + + case 'f' : + if (!std::strncmp(ss,"fact(",5)) { // Factorial + _cimg_mp_op("Function 'fact()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_factorial,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(cimg::factorial((int)mem[arg1])); + _cimg_mp_scalar1(mp_factorial,arg1); + } + + if (!std::strncmp(ss,"fibo(",5)) { // Fibonacci + _cimg_mp_op("Function 'fibo()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_fibonacci,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(cimg::fibonacci((int)mem[arg1])); + _cimg_mp_scalar1(mp_fibonacci,arg1); + } + + if (!std::strncmp(ss,"find(",5)) { // Find + _cimg_mp_op("Function 'find()'"); + + // First argument: data to look at. + s0 = ss5; while (s0::vector((ulongT)mp_for,p3,(ulongT)_cimg_mp_size(p3),p2,arg2 - arg1,arg3 - arg2, + arg4 - arg3,code._width - arg4, + p3>=arg6 && !_cimg_mp_is_constant(p3), + p2>=arg6 && !_cimg_mp_is_constant(p2)).move_to(code,arg1); + _cimg_mp_return(p3); + } + + if (!std::strncmp(ss,"floor(",6)) { // Floor + _cimg_mp_op("Function 'floor()'"); + arg1 = compile(ss6,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_floor,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::floor(mem[arg1])); + _cimg_mp_scalar1(mp_floor,arg1); + } + + if (!std::strncmp(ss,"fsize(",6)) { // File size + _cimg_mp_op("Function 'fsize()'"); + *se1 = 0; + variable_name.assign(CImg::string(ss6,true,true).unroll('y'),true); + cimg::strpare(variable_name,false,true); + pos = scalar(); + ((CImg::vector((ulongT)mp_fsize,pos,0),variable_name)>'y').move_to(opcode); + *se1 = ')'; + opcode[2] = opcode._height; + opcode.move_to(code); + _cimg_mp_return(pos); + } + break; + + case 'g' : + if (!std::strncmp(ss,"gauss(",6)) { // Gaussian function + _cimg_mp_op("Function 'gauss()'"); + s1 = ss6; while (s1::vector((ulongT)mp_image_h,pos,p1).move_to(code); + _cimg_mp_return(pos); + } + break; + + case 'i' : + if (*ss1=='c' && *ss2=='(') { // Image median + _cimg_mp_op("Function 'ic()'"); + if (*ss3=='#') { // Index specified + p1 = compile(ss4,se1,depth1,0,is_single); + _cimg_mp_check_list(false); + } else { if (ss3!=se1) break; p1 = ~0U; } + pos = scalar(); + CImg::vector((ulongT)mp_image_median,pos,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (*ss1=='f' && *ss2=='(') { // If..then[..else.] + _cimg_mp_op("Function 'if()'"); + s1 = ss3; while (s1::vector((ulongT)mp_if,pos,arg1,arg2,arg3, + p3 - p2,code._width - p3,arg4).move_to(code,p2); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"init(",5)) { // Init + _cimg_mp_op("Function 'init()'"); + code.swap(code_init); + arg1 = compile(ss5,se1,depth1,p_ref,true); + code.swap(code_init); + _cimg_mp_return(arg1); + } + + if (!std::strncmp(ss,"int(",4)) { // Integer cast + _cimg_mp_op("Function 'int()'"); + arg1 = compile(ss4,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_int,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant((longT)mem[arg1]); + _cimg_mp_scalar1(mp_int,arg1); + } + + if (!std::strncmp(ss,"inv(",4)) { // Matrix/scalar inversion + _cimg_mp_op("Function 'inv()'"); + arg1 = compile(ss4,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) { + _cimg_mp_check_matrix_square(arg1,1); + p1 = (unsigned int)cimg::round(std::sqrt((float)_cimg_mp_size(arg1))); + pos = vector(p1*p1); + CImg::vector((ulongT)mp_matrix_inv,pos,arg1,p1).move_to(code); + _cimg_mp_return(pos); + } + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(1/mem[arg1]); + _cimg_mp_scalar2(mp_div,1,arg1); + } + + if (*ss1=='s') { // Family of 'is_?()' functions + + if (!std::strncmp(ss,"isbool(",7)) { // Is boolean? + _cimg_mp_op("Function 'isbool()'"); + if (ss7==se1) _cimg_mp_return(0); + arg1 = compile(ss7,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_isbool,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_return(mem[arg1]==0.0 || mem[arg1]==1.0); + _cimg_mp_scalar1(mp_isbool,arg1); + } + + if (!std::strncmp(ss,"isdir(",6)) { // Is directory? + _cimg_mp_op("Function 'isdir()'"); + *se1 = 0; + is_sth = cimg::is_directory(ss6); + *se1 = ')'; + _cimg_mp_return(is_sth?1U:0U); + } + + if (!std::strncmp(ss,"isfile(",7)) { // Is file? + _cimg_mp_op("Function 'isfile()'"); + *se1 = 0; + is_sth = cimg::is_file(ss7); + *se1 = ')'; + _cimg_mp_return(is_sth?1U:0U); + } + + if (!std::strncmp(ss,"isin(",5)) { // Is in sequence/vector? + if (ss5>=se1) _cimg_mp_return(0); + _cimg_mp_op("Function 'isin()'"); + pos = scalar(); + CImg::vector((ulongT)mp_isin,pos,0).move_to(l_opcode); + for (s = ss5; s::sequence(_cimg_mp_size(arg1),arg1 + 1, + arg1 + (ulongT)_cimg_mp_size(arg1)). + move_to(l_opcode); + else CImg::vector(arg1).move_to(l_opcode); + s = ns; + } + (l_opcode>'y').move_to(opcode); + opcode[2] = opcode._height; + opcode.move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"isinf(",6)) { // Is infinite? + _cimg_mp_op("Function 'isinf()'"); + if (ss6==se1) _cimg_mp_return(0); + arg1 = compile(ss6,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_isinf,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_return((unsigned int)cimg::type::is_inf(mem[arg1])); + _cimg_mp_scalar1(mp_isinf,arg1); + } + + if (!std::strncmp(ss,"isint(",6)) { // Is integer? + _cimg_mp_op("Function 'isint()'"); + if (ss6==se1) _cimg_mp_return(0); + arg1 = compile(ss6,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_isint,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_return((unsigned int)(cimg::mod(mem[arg1],1.0)==0)); + _cimg_mp_scalar1(mp_isint,arg1); + } + + if (!std::strncmp(ss,"isnan(",6)) { // Is NaN? + _cimg_mp_op("Function 'isnan()'"); + if (ss6==se1) _cimg_mp_return(0); + arg1 = compile(ss6,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_isnan,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_return((unsigned int)cimg::type::is_nan(mem[arg1])); + _cimg_mp_scalar1(mp_isnan,arg1); + } + + if (!std::strncmp(ss,"isval(",6)) { // Is value? + _cimg_mp_op("Function 'isval()'"); + val = 0; + if (cimg_sscanf(ss6,"%lf%c%c",&val,&sep,&end)==2 && sep==')') _cimg_mp_return(1); + _cimg_mp_return(0); + } + + } + break; + + case 'l' : + if (*ss1=='(') { // Size of image list + _cimg_mp_op("Function 'l()'"); + if (ss2!=se1) break; + _cimg_mp_scalar0(mp_list_l); + } + + if (!std::strncmp(ss,"log(",4)) { // Natural logarithm + _cimg_mp_op("Function 'log()'"); + arg1 = compile(ss4,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_log,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::log(mem[arg1])); + _cimg_mp_scalar1(mp_log,arg1); + } + + if (!std::strncmp(ss,"log2(",5)) { // Base-2 logarithm + _cimg_mp_op("Function 'log2()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_log2,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(cimg::log2(mem[arg1])); + _cimg_mp_scalar1(mp_log2,arg1); + } + + if (!std::strncmp(ss,"log10(",6)) { // Base-10 logarithm + _cimg_mp_op("Function 'log10()'"); + arg1 = compile(ss6,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_log10,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::log10(mem[arg1])); + _cimg_mp_scalar1(mp_log10,arg1); + } + + if (!std::strncmp(ss,"lowercase(",10)) { // Lower case + _cimg_mp_op("Function 'lowercase()'"); + arg1 = compile(ss + 10,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_lowercase,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(cimg::lowercase(mem[arg1])); + _cimg_mp_scalar1(mp_lowercase,arg1); + } + break; + + case 'm' : + if (!std::strncmp(ss,"mul(",4)) { // Matrix multiplication + _cimg_mp_op("Function 'mul()'"); + s1 = ss4; while (s1expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Types of first and second arguments ('%s' and '%s') " + "do not match with third argument 'nb_colsB=%u', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s_type(arg1)._data,s_type(arg2)._data,p3, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + pos = vector(arg4*p3); + CImg::vector((ulongT)mp_matrix_mul,pos,arg1,arg2,arg4,arg5,p3).move_to(code); + _cimg_mp_return(pos); + } + break; + + case 'n' : + if (!std::strncmp(ss,"narg(",5)) { // Number of arguments + _cimg_mp_op("Function 'narg()'"); + if (ss5>=se1) _cimg_mp_return(0); + arg1 = 0; + for (s = ss5; s::vector((ulongT)mp_norm0,pos,0).move_to(l_opcode); break; + case 1 : + CImg::vector((ulongT)mp_norm1,pos,0).move_to(l_opcode); break; + case 2 : + CImg::vector((ulongT)mp_norm2,pos,0).move_to(l_opcode); break; + case ~0U : + CImg::vector((ulongT)mp_norminf,pos,0).move_to(l_opcode); break; + default : + CImg::vector((ulongT)mp_normp,pos,0,(ulongT)(arg1==~0U?-1:(int)arg1)). + move_to(l_opcode); + } + for ( ; s::sequence(_cimg_mp_size(arg2),arg2 + 1, + arg2 + (ulongT)_cimg_mp_size(arg2)). + move_to(l_opcode); + else CImg::vector(arg2).move_to(l_opcode); + s = ns; + } + + (l_opcode>'y').move_to(opcode); + if (arg1>0 && opcode._height==4) // Special case with one argument and p>=1 + _cimg_mp_scalar1(mp_abs,opcode[3]); + opcode[2] = opcode._height; + opcode.move_to(code); + _cimg_mp_return(pos); + } + break; + + case 'p' : + if (!std::strncmp(ss,"permut(",7)) { // Number of permutations + _cimg_mp_op("Function 'permut()'"); + s1 = ss7; while (s1::vector((ulongT)mp_polygon,_cimg_mp_slot_nan,0,p1).move_to(l_opcode); + for (s = s0; s::sequence(_cimg_mp_size(arg2),arg2 + 1, + arg2 + (ulongT)_cimg_mp_size(arg2)). + move_to(l_opcode); + else CImg::vector(arg2).move_to(l_opcode); + s = ns; + } + (l_opcode>'y').move_to(opcode); + opcode[2] = opcode._height; + opcode.move_to(code); + _cimg_mp_return_nan(); + } + + if (!std::strncmp(ss,"print(",6) || !std::strncmp(ss,"prints(",7)) { // Print expressions + is_sth = ss[5]=='s'; // is prints() + _cimg_mp_op(is_sth?"Function 'prints()'":"Function 'print()'"); + s0 = is_sth?ss7:ss6; + if (*s0!='#' || is_sth) { // Regular expression + for (s = s0; s::string(s,true,true).unroll('y'),true); + cimg::strpare(variable_name,false,true); + if (_cimg_mp_is_vector(pos)) // Vector + ((CImg::vector((ulongT)mp_vector_print,pos,0,(ulongT)_cimg_mp_size(pos),is_sth?1:0), + variable_name)>'y').move_to(opcode); + else // Scalar + ((CImg::vector((ulongT)mp_print,pos,0,is_sth?1:0), + variable_name)>'y').move_to(opcode); + opcode[2] = opcode._height; + opcode.move_to(code); + *ns = c1; s = ns; + } + _cimg_mp_return(pos); + } else { // Image + p1 = compile(ss7,se1,depth1,0,is_single); + _cimg_mp_check_list(true); + CImg::vector((ulongT)mp_image_print,_cimg_mp_slot_nan,p1).move_to(code); + _cimg_mp_return_nan(); + } + } + + if (!std::strncmp(ss,"pseudoinv(",10)) { // Matrix/scalar pseudo-inversion + _cimg_mp_op("Function 'pseudoinv()'"); + s1 = ss + 10; while (s1expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Type of first argument ('%s') " + "does not match with second argument 'nb_colsA=%u', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s_type(arg1)._data,p2, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + pos = vector(p1); + CImg::vector((ulongT)mp_matrix_pseudoinv,pos,arg1,p2,p3).move_to(code); + _cimg_mp_return(pos); + } + break; + + case 'r' : + if (!std::strncmp(ss,"resize(",7)) { // Vector or image resize + _cimg_mp_op("Function 'resize()'"); + if (*ss7!='#') { // Vector + s1 = ss7; while (s1::vector((ulongT)mp_vector_resize,pos,arg2,arg1,(ulongT)_cimg_mp_size(arg1), + arg3,arg4).move_to(code); + _cimg_mp_return(pos); + + } else { // Image + if (!is_single) is_parallelizable = false; + s0 = ss8; while (s0::vector((ulongT)mp_image_resize,_cimg_mp_slot_nan,p1,~0U,~0U,~0U,~0U,1,0,0,0,0,0). + move_to(l_opcode); + pos = 0; + for (s = s0; s10) { + *se = saved_char; + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: %s arguments, in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + pos<1?"Missing":"Too much", + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + l_opcode[0].move_to(code); + _cimg_mp_return_nan(); + } + } + + if (!std::strncmp(ss,"reverse(",8)) { // Vector reverse + _cimg_mp_op("Function 'reverse()'"); + arg1 = compile(ss8,se1,depth1,0,is_single); + if (!_cimg_mp_is_vector(arg1)) _cimg_mp_return(arg1); + p1 = _cimg_mp_size(arg1); + pos = vector(p1); + CImg::vector((ulongT)mp_vector_reverse,pos,arg1,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"rol(",4) || !std::strncmp(ss,"ror(",4)) { // Bitwise rotation + _cimg_mp_op(ss[2]=='l'?"Function 'rol()'":"Function 'ror()'"); + s1 = ss4; while (s11) { + arg2 = arg1 + 1; + if (p2>2) arg3 = arg2 + 1; + } + arg4 = compile(++s1,se1,depth1,0,is_single); + } else { + s2 = s1 + 1; while (s2::vector((ulongT)mp_rot3d,pos,arg1,arg2,arg3,arg4).move_to(code); + } else { // 2d rotation + _cimg_mp_check_type(arg1,1,1,0); + pos = vector(4); + CImg::vector((ulongT)mp_rot2d,pos,arg1).move_to(code); + } + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"round(",6)) { // Value rounding + _cimg_mp_op("Function 'round()'"); + s1 = ss6; while (s1::vector((ulongT)mp_image_s,pos,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"same(",5)) { // Test if operands have the same values + _cimg_mp_op("Function 'same()'"); + s1 = ss5; while (s1::vector((ulongT)mp_shift,pos,arg1,p1,arg2,arg3).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"sign(",5)) { // Sign + _cimg_mp_op("Function 'sign()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_sign,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(cimg::sign(mem[arg1])); + _cimg_mp_scalar1(mp_sign,arg1); + } + + if (!std::strncmp(ss,"sin(",4)) { // Sine + _cimg_mp_op("Function 'sin()'"); + arg1 = compile(ss4,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_sin,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::sin(mem[arg1])); + _cimg_mp_scalar1(mp_sin,arg1); + } + + if (!std::strncmp(ss,"sinc(",5)) { // Sine cardinal + _cimg_mp_op("Function 'sinc()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_sinc,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(cimg::sinc(mem[arg1])); + _cimg_mp_scalar1(mp_sinc,arg1); + } + + if (!std::strncmp(ss,"sinh(",5)) { // Hyperbolic sine + _cimg_mp_op("Function 'sinh()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_sinh,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::sinh(mem[arg1])); + _cimg_mp_scalar1(mp_sinh,arg1); + } + + if (!std::strncmp(ss,"size(",5)) { // Vector size. + _cimg_mp_op("Function 'size()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + _cimg_mp_constant(_cimg_mp_is_scalar(arg1)?0:_cimg_mp_size(arg1)); + } + + if (!std::strncmp(ss,"solve(",6)) { // Solve linear system + _cimg_mp_op("Function 'solve()'"); + s1 = ss6; while (s1expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Types of first and second arguments ('%s' and '%s') " + "do not match with third argument 'nb_colsB=%u', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s_type(arg1)._data,s_type(arg2)._data,p3, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + pos = vector(arg4*p3); + CImg::vector((ulongT)mp_solve,pos,arg1,arg2,arg4,arg5,p3).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"sort(",5)) { // Sort vector + _cimg_mp_op("Function 'sort()'"); + if (*ss5!='#') { // Vector + s1 = ss5; while (s1expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Invalid specified chunk size (%u) for first argument " + "('%s'), in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + arg3,s_type(arg1)._data, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + pos = vector(p1); + CImg::vector((ulongT)mp_sort,pos,arg1,p1,arg2,arg3).move_to(code); + _cimg_mp_return(pos); + + } else { // Image + s1 = ss6; while (s1::vector((ulongT)mp_image_sort,_cimg_mp_slot_nan,p1,arg1,arg2).move_to(code); + _cimg_mp_return_nan(); + } + } + + if (!std::strncmp(ss,"sqr(",4)) { // Square + _cimg_mp_op("Function 'sqr()'"); + arg1 = compile(ss4,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_sqr,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(cimg::sqr(mem[arg1])); + _cimg_mp_scalar1(mp_sqr,arg1); + } + + if (!std::strncmp(ss,"sqrt(",5)) { // Square root + _cimg_mp_op("Function 'sqrt()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_sqrt,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::sqrt(mem[arg1])); + _cimg_mp_scalar1(mp_sqrt,arg1); + } + + if (!std::strncmp(ss,"srand(",6)) { // Set RNG seed + _cimg_mp_op("Function 'srand()'"); + arg1 = ss6::vector((ulongT)mp_image_stats,pos,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"stov(",5)) { // String to double + _cimg_mp_op("Function 'stov()'"); + s1 = ss5; while (s1expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Type of first argument ('%s') " + "does not match with second argument 'nb_colsA=%u', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s_type(arg1)._data,p2, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + pos = vector(p1 + p2 + p2*p2); + CImg::vector((ulongT)mp_matrix_svd,pos,arg1,p2,p3).move_to(code); + _cimg_mp_return(pos); + } + break; + + case 't' : + if (!std::strncmp(ss,"tan(",4)) { // Tangent + _cimg_mp_op("Function 'tan()'"); + arg1 = compile(ss4,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_tan,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::tan(mem[arg1])); + _cimg_mp_scalar1(mp_tan,arg1); + } + + if (!std::strncmp(ss,"tanh(",5)) { // Hyperbolic tangent + _cimg_mp_op("Function 'tanh()'"); + arg1 = compile(ss5,se1,depth1,0,is_single); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_tanh,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::tanh(mem[arg1])); + _cimg_mp_scalar1(mp_tanh,arg1); + } + + if (!std::strncmp(ss,"trace(",6)) { // Matrix trace + _cimg_mp_op("Function 'trace()'"); + arg1 = compile(ss6,se1,depth1,0,is_single); + _cimg_mp_check_matrix_square(arg1,1); + p1 = (unsigned int)cimg::round(std::sqrt((float)_cimg_mp_size(arg1))); + _cimg_mp_scalar2(mp_trace,arg1,p1); + } + + if (!std::strncmp(ss,"transp(",7)) { // Matrix transpose + _cimg_mp_op("Function 'transp()'"); + s1 = ss7; while (s1expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Size of first argument ('%s') does not match " + "second argument 'nb_cols=%u', in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s_type(arg1)._data,p2, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + pos = vector(p3*p2); + CImg::vector((ulongT)mp_transp,pos,arg1,p2,p3).move_to(code); + _cimg_mp_return(pos); + } + break; + + case 'u' : + if (*ss1=='(') { // Random value with uniform distribution + _cimg_mp_op("Function 'u()'"); + if (*ss2==')') _cimg_mp_scalar2(mp_u,0,1); + s1 = ss2; while (s1ss6 && *s0==',') ++s0; + s1 = s0; while (s1s0) { + *s1 = 0; + arg2 = arg3 = ~0U; + if (s0[0]=='w' && s0[1]=='h' && !s0[2]) arg1 = reserved_label[arg3 = 0]; + else if (s0[0]=='w' && s0[1]=='h' && s0[2]=='d' && !s0[3]) arg1 = reserved_label[arg3 = 1]; + else if (s0[0]=='w' && s0[1]=='h' && s0[2]=='d' && s0[3]=='s' && !s0[4]) + arg1 = reserved_label[arg3 = 2]; + else if (s0[0]=='p' && s0[1]=='i' && !s0[2]) arg1 = reserved_label[arg3 = 3]; + else if (s0[0]=='i' && s0[1]=='m' && !s0[2]) arg1 = reserved_label[arg3 = 4]; + else if (s0[0]=='i' && s0[1]=='M' && !s0[2]) arg1 = reserved_label[arg3 = 5]; + else if (s0[0]=='i' && s0[1]=='a' && !s0[2]) arg1 = reserved_label[arg3 = 6]; + else if (s0[0]=='i' && s0[1]=='v' && !s0[2]) arg1 = reserved_label[arg3 = 7]; + else if (s0[0]=='i' && s0[1]=='s' && !s0[2]) arg1 = reserved_label[arg3 = 8]; + else if (s0[0]=='i' && s0[1]=='p' && !s0[2]) arg1 = reserved_label[arg3 = 9]; + else if (s0[0]=='i' && s0[1]=='c' && !s0[2]) arg1 = reserved_label[arg3 = 10]; + else if (s0[0]=='x' && s0[1]=='m' && !s0[2]) arg1 = reserved_label[arg3 = 11]; + else if (s0[0]=='y' && s0[1]=='m' && !s0[2]) arg1 = reserved_label[arg3 = 12]; + else if (s0[0]=='z' && s0[1]=='m' && !s0[2]) arg1 = reserved_label[arg3 = 13]; + else if (s0[0]=='c' && s0[1]=='m' && !s0[2]) arg1 = reserved_label[arg3 = 14]; + else if (s0[0]=='x' && s0[1]=='M' && !s0[2]) arg1 = reserved_label[arg3 = 15]; + else if (s0[0]=='y' && s0[1]=='M' && !s0[2]) arg1 = reserved_label[arg3 = 16]; + else if (s0[0]=='z' && s0[1]=='M' && !s0[2]) arg1 = reserved_label[arg3 = 17]; + else if (s0[0]=='c' && s0[1]=='M' && !s0[2]) arg1 = reserved_label[arg3 = 18]; + else if (s0[0]=='i' && s0[1]>='0' && s0[1]<='9' && !s0[2]) + arg1 = reserved_label[arg3 = 19 + s0[1] - '0']; + else if (!std::strcmp(s0,"interpolation")) arg1 = reserved_label[arg3 = 29]; + else if (!std::strcmp(s0,"boundary")) arg1 = reserved_label[arg3 = 30]; + else if (s0[1]) { // Multi-char variable + cimglist_for(variable_def,i) if (!std::strcmp(s0,variable_def[i])) { + arg1 = variable_pos[i]; arg2 = i; break; + } + } else arg1 = reserved_label[arg3 = *s0]; // Single-char variable + + if (arg1!=~0U) { + if (arg2==~0U) { if (arg3!=~0U) reserved_label[arg3] = ~0U; } + else { + variable_def.remove(arg2); + if (arg20) || + !std::strncmp(ss,"vector(",7) || + (!std::strncmp(ss,"vector",6) && ss7::sequence(arg4,arg3 + 1,arg3 + arg4).move_to(l_opcode); + arg2+=arg4; + } else { CImg::vector(arg3).move_to(l_opcode); ++arg2; } + s = ns; + } + if (arg1==~0U) arg1 = arg2; + _cimg_mp_check_vector0(arg1); + pos = vector(arg1); + l_opcode.insert(CImg::vector((ulongT)mp_vector_init,pos,0,arg1),0); + (l_opcode>'y').move_to(opcode); + opcode[2] = opcode._height; + opcode.move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"vtos(",5)) { // Double(s) to string + _cimg_mp_op("Function 'vtos()'"); + s1 = ss5; while (s1::vector((ulongT)mp_vtos,pos,p1,arg1,_cimg_mp_size(arg1),arg2).move_to(code); + _cimg_mp_return(pos); + } + break; + + case 'w' : + if (*ss1=='(') { // Image width + _cimg_mp_op("Function 'w()'"); + if (*ss2=='#') { // Index specified + p1 = compile(ss3,se1,depth1,0,is_single); + _cimg_mp_check_list(false); + } else { if (ss2!=se1) break; p1 = ~0U; } + pos = scalar(); + CImg::vector((ulongT)mp_image_w,pos,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (*ss1=='h' && *ss2=='(') { // Image width*height + _cimg_mp_op("Function 'wh()'"); + if (*ss3=='#') { // Index specified + p1 = compile(ss4,se1,depth1,0,is_single); + _cimg_mp_check_list(false); + } else { if (ss3!=se1) break; p1 = ~0U; } + pos = scalar(); + CImg::vector((ulongT)mp_image_wh,pos,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (*ss1=='h' && *ss2=='d' && *ss3=='(') { // Image width*height*depth + _cimg_mp_op("Function 'whd()'"); + if (*ss4=='#') { // Index specified + p1 = compile(ss5,se1,depth1,0,is_single); + _cimg_mp_check_list(false); + } else { if (ss4!=se1) break; p1 = ~0U; } + pos = scalar(); + CImg::vector((ulongT)mp_image_whd,pos,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (*ss1=='h' && *ss2=='d' && *ss3=='s' && *ss4=='(') { // Image width*height*depth*spectrum + _cimg_mp_op("Function 'whds()'"); + if (*ss5=='#') { // Index specified + p1 = compile(ss6,se1,depth1,0,is_single); + _cimg_mp_check_list(false); + } else { if (ss5!=se1) break; p1 = ~0U; } + pos = scalar(); + CImg::vector((ulongT)mp_image_whds,pos,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"while(",6) || !std::strncmp(ss,"whiledo(",8)) { // While...do + _cimg_mp_op("Function 'whiledo()'"); + s0 = *ss5=='('?ss6:ss8; + s1 = s0; while (s1::vector((ulongT)mp_whiledo,pos,arg1,p2 - p1,code._width - p2,arg2, + pos>=arg6 && !_cimg_mp_is_constant(pos), + arg1>=arg6 && !_cimg_mp_is_constant(arg1)).move_to(code,p1); + _cimg_mp_return(pos); + } + break; + + case 'x' : + if (!std::strncmp(ss,"xor(",4)) { // Xor + _cimg_mp_op("Function 'xor()'"); + s1 = ss4; while (s1::vector((ulongT)op,pos,0).move_to(l_opcode); + for (s = std::strchr(ss,'(') + 1; s::sequence(_cimg_mp_size(arg2),arg2 + 1, + arg2 + (ulongT)_cimg_mp_size(arg2)). + move_to(l_opcode); + else CImg::vector(arg2).move_to(l_opcode); + is_sth&=_cimg_mp_is_constant(arg2); + s = ns; + } + (l_opcode>'y').move_to(opcode); + opcode[2] = opcode._height; + if (is_sth) _cimg_mp_constant(op(*this)); + opcode.move_to(code); + _cimg_mp_return(pos); + } + + // No corresponding built-in function -> Look for a user-defined macro call. + s0 = strchr(ss,'('); + if (s0) { + variable_name.assign(ss,(unsigned int)(s0 - ss + 1)).back() = 0; + + // Count number of specified arguments. + p1 = 0; + for (s = s0 + 1; s<=se1; ++p1, s = ns + 1) { + while (*s && (signed char)*s<=' ') ++s; + if (*s==')' && !p1) break; + ns = s; while (ns _expr = macro_body[l]; // Expression to be substituted + + p1 = 1; // Indice of current parsed argument + for (s = s0 + 1; s<=se1; ++p1, s = ns + 1) { // Parse function arguments + while (*s && (signed char)*s<=' ') ++s; + if (*s==')' && p1==1) break; // Function has no arguments + if (p1>p2) { ++p1; break; } + ns = s; while (ns _pexpr(_expr._width); + ns = _pexpr._data; + for (ps = _expr._data, c1 = ' '; *ps; ++ps) { + if ((signed char)*ps>' ') c1 = *ps; + *(ns++) = c1; + } + *ns = 0; + + CImg _level = get_level(_expr); + expr.swap(_expr); + pexpr.swap(_pexpr); + level.swap(_level); + s0 = user_macro; + user_macro = macro_def[l]; + pos = compile(expr._data,expr._data + expr._width - 1,depth1,p_ref,is_single); + user_macro = s0; + level.swap(_level); + pexpr.swap(_pexpr); + expr.swap(_expr); + _cimg_mp_return(pos); + } + + if (arg3) { // Macro name matched but number of arguments does not + CImg sig_nargs(arg3); + arg1 = 0; + cimglist_for(macro_def,l) if (!std::strcmp(macro_def[l],variable_name)) + sig_nargs[arg1++] = (unsigned int)macro_def[l].back(); + *se = saved_char; + cimg::strellipsize(variable_name,64); + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + if (sig_nargs._width>1) { + sig_nargs.sort(); + arg1 = sig_nargs.back(); + --sig_nargs._width; + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: Function '%s()': Number of specified arguments (%u) " + "does not match macro declaration (defined for %s or %u arguments), " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,variable_name._data, + p1,sig_nargs.value_string()._data,arg1, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } else + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: Function '%s()': Number of specified arguments (%u) " + "does not match macro declaration (defined for %u argument%s), " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,variable_name._data, + p1,*sig_nargs,*sig_nargs!=1?"s":"", + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + } + } // if (se1==')') + + // Char / string initializer. + if (*se1=='\'' && + ((se1>ss && *ss=='\'') || + (se1>ss1 && *ss=='_' && *ss1=='\''))) { + if (*ss=='_') { _cimg_mp_op("Char initializer"); s1 = ss2; } + else { _cimg_mp_op("String initializer"); s1 = ss1; } + arg1 = (unsigned int)(se1 - s1); // Original string length. + if (arg1) { + CImg(s1,arg1 + 1).move_to(variable_name).back() = 0; + cimg::strunescape(variable_name); + arg1 = (unsigned int)std::strlen(variable_name); + } + if (!arg1) _cimg_mp_return(0); // Empty string -> 0 + if (*ss=='_') { + if (arg1==1) _cimg_mp_constant(*variable_name); + *se = saved_char; + cimg::strellipsize(variable_name,64); + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s: Literal %s contains more than one character, " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + ss1, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + pos = vector(arg1); + CImg::vector((ulongT)mp_string_init,pos,arg1).move_to(l_opcode); + CImg(1,arg1/sizeof(ulongT) + (arg1%sizeof(ulongT)?1:0)).move_to(l_opcode); + std::memcpy((char*)l_opcode[1]._data,variable_name,arg1); + (l_opcode>'y').move_to(code); + _cimg_mp_return(pos); + } + + // Vector initializer [ ... ]. + if (*ss=='[' && *se1==']') { + _cimg_mp_op("Vector initializer"); + s1 = ss1; while (s1s1 && (signed char)*s2<=' ') --s2; + if (s2>s1 && *s1=='\'' && *s2=='\'') { // Vector values provided as a string + arg1 = (unsigned int)(s2 - s1 - 1); // Original string length. + if (arg1) { + CImg(s1 + 1,arg1 + 1).move_to(variable_name).back() = 0; + cimg::strunescape(variable_name); + arg1 = (unsigned int)std::strlen(variable_name); + } + if (!arg1) _cimg_mp_return(0); // Empty string -> 0 + pos = vector(arg1); + CImg::vector((ulongT)mp_string_init,pos,arg1).move_to(l_opcode); + CImg(1,arg1/sizeof(ulongT) + (arg1%sizeof(ulongT)?1:0)).move_to(l_opcode); + std::memcpy((char*)l_opcode[1]._data,variable_name,arg1); + (l_opcode>'y').move_to(code); + } else { // Vector values provided as list of items + arg1 = 0; // Number of specified values. + if (*ss1!=']') for (s = ss1; s::sequence(arg3,arg2 + 1,arg2 + arg3).move_to(l_opcode); + arg1+=arg3; + } else { CImg::vector(arg2).move_to(l_opcode); ++arg1; } + s = ns; + } + _cimg_mp_check_vector0(arg1); + pos = vector(arg1); + l_opcode.insert(CImg::vector((ulongT)mp_vector_init,pos,0,arg1),0); + (l_opcode>'y').move_to(opcode); + opcode[2] = opcode._height; + opcode.move_to(code); + } + _cimg_mp_return(pos); + } + + // Variables related to the input list of images. + if (*ss1=='#' && ss2::vector((ulongT)mp_list_Joff,pos,p1,0,0,p2).move_to(code); + _cimg_mp_return(pos); + case 'R' : // R#ind + if (!listin) _cimg_mp_return(0); + _cimg_mp_scalar7(mp_list_ixyzc,arg1,_cimg_mp_slot_x,_cimg_mp_slot_y,_cimg_mp_slot_z,0, + 0,_cimg_mp_boundary); + case 'G' : // G#ind + if (!listin) _cimg_mp_return(0); + _cimg_mp_scalar7(mp_list_ixyzc,arg1,_cimg_mp_slot_x,_cimg_mp_slot_y,_cimg_mp_slot_z,1, + 0,_cimg_mp_boundary); + case 'B' : // B#ind + if (!listin) _cimg_mp_return(0); + _cimg_mp_scalar7(mp_list_ixyzc,arg1,_cimg_mp_slot_x,_cimg_mp_slot_y,_cimg_mp_slot_z,2, + 0,_cimg_mp_boundary); + case 'A' : // A#ind + if (!listin) _cimg_mp_return(0); + _cimg_mp_scalar7(mp_list_ixyzc,arg1,_cimg_mp_slot_x,_cimg_mp_slot_y,_cimg_mp_slot_z,3, + 0,_cimg_mp_boundary); + } + } + + if (*ss1 && *ss2=='#' && ss3::vector(listin[p1].median()).move_to(list_median[p1]); + _cimg_mp_constant(*list_median[p1]); + } + _cimg_mp_scalar1(mp_list_median,arg1); + } + if (*ss1>='0' && *ss1<='9') { // i0#ind...i9#ind + if (!listin) _cimg_mp_return(0); + _cimg_mp_scalar7(mp_list_ixyzc,arg1,_cimg_mp_slot_x,_cimg_mp_slot_y,_cimg_mp_slot_z,*ss1 - '0', + 0,_cimg_mp_boundary); + } + switch (*ss1) { + case 'm' : arg2 = 0; break; // im#ind + case 'M' : arg2 = 1; break; // iM#ind + case 'a' : arg2 = 2; break; // ia#ind + case 'v' : arg2 = 3; break; // iv#ind + case 's' : arg2 = 12; break; // is#ind + case 'p' : arg2 = 13; break; // ip#ind + } + } else if (*ss1=='m') switch (*ss) { + case 'x' : arg2 = 4; break; // xm#ind + case 'y' : arg2 = 5; break; // ym#ind + case 'z' : arg2 = 6; break; // zm#ind + case 'c' : arg2 = 7; break; // cm#ind + } else if (*ss1=='M') switch (*ss) { + case 'x' : arg2 = 8; break; // xM#ind + case 'y' : arg2 = 9; break; // yM#ind + case 'z' : arg2 = 10; break; // zM#ind + case 'c' : arg2 = 11; break; // cM#ind + } + if (arg2!=~0U) { + if (!listin) _cimg_mp_return(0); + if (_cimg_mp_is_constant(arg1)) { + if (!list_stats) list_stats.assign(listin._width); + if (!list_stats[p1]) list_stats[p1].assign(1,14,1,1,0).fill(listin[p1].get_stats(),false); + _cimg_mp_constant(list_stats(p1,arg2)); + } + _cimg_mp_scalar2(mp_list_stats,arg1,arg2); + } + } + + if (*ss=='w' && *ss1=='h' && *ss2=='d' && *ss3=='#' && ss4 error. + is_sth = true; // is_valid_variable_name + if (*variable_name>='0' && *variable_name<='9') is_sth = false; + else for (ns = variable_name._data; *ns; ++ns) + if (!is_varchar(*ns)) { is_sth = false; break; } + + *se = saved_char; + c1 = *se1; + cimg::strellipsize(variable_name,64); + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + if (is_sth) + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: Undefined variable '%s' in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function, + variable_name._data, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + s1 = std::strchr(ss,'('); + s_op = s1 && c1==')'?"function call":"item"; + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: Unrecognized %s '%s' in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function, + s_op,variable_name._data, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + + // Evaluation procedure. + double operator()(const double x, const double y, const double z, const double c) { + mem[_cimg_mp_slot_x] = x; mem[_cimg_mp_slot_y] = y; mem[_cimg_mp_slot_z] = z; mem[_cimg_mp_slot_c] = c; + for (p_code = code; p_code_data; + const ulongT target = opcode[1]; + mem[target] = _cimg_mp_defunc(*this); + } + return *result; + } + + // Evaluation procedure (return output values in vector 'output'). + template + void operator()(const double x, const double y, const double z, const double c, t *const output) { + mem[_cimg_mp_slot_x] = x; mem[_cimg_mp_slot_y] = y; mem[_cimg_mp_slot_z] = z; mem[_cimg_mp_slot_c] = c; + for (p_code = code; p_code_data; + const ulongT target = opcode[1]; + mem[target] = _cimg_mp_defunc(*this); + } + if (result_dim) { + const double *ptrs = result + 1; + t *ptrd = output; + for (unsigned int k = 0; k_data; + const ulongT target = opcode[1]; + mem[target] = _cimg_mp_defunc(*this); + } + } + + // Return type of a memory element as a string. + CImg s_type(const unsigned int arg) const { + CImg res; + if (_cimg_mp_is_vector(arg)) { // Vector + CImg::string("vectorXXXXXXXXXXXXXXXX").move_to(res); + std::sprintf(res._data + 6,"%u",_cimg_mp_size(arg)); + } else CImg::string("scalar").move_to(res); + return res; + } + + // Insert constant value in memory. + unsigned int constant(const double val) { + + // Search for built-in constant. + if (cimg::type::is_nan(val)) return _cimg_mp_slot_nan; + if (val==(double)(int)val) { + if (val>=0 && val<=10) return (unsigned int)val; + if (val<0 && val>=-5) return (unsigned int)(10 - val); + } + if (val==0.5) return 16; + + // Search for constant already requested before (in const cache). + unsigned int ind = ~0U; + if (constcache_size<1024) { + if (!constcache_size) { + constcache_vals.assign(16,1,1,1,0); + constcache_inds.assign(16,1,1,1,0); + *constcache_vals = val; + constcache_size = 1; + ind = 0; + } else { // Dichotomic search + const double val_beg = *constcache_vals, val_end = constcache_vals[constcache_size - 1]; + if (val_beg>=val) ind = 0; + else if (val_end==val) ind = constcache_size - 1; + else if (val_end=constcache_size || constcache_vals[ind]!=val) { + ++constcache_size; + if (constcache_size>constcache_vals._width) { + constcache_vals.resize(-200,1,1,1,0); + constcache_inds.resize(-200,1,1,1,0); + } + const int l = constcache_size - (int)ind - 1; + if (l>0) { + std::memmove(&constcache_vals[ind + 1],&constcache_vals[ind],l*sizeof(double)); + std::memmove(&constcache_inds[ind + 1],&constcache_inds[ind],l*sizeof(unsigned int)); + } + constcache_vals[ind] = val; + constcache_inds[ind] = 0; + } + } + if (constcache_inds[ind]) return constcache_inds[ind]; + } + + // Insert new constant in memory if necessary. + if (mempos>=mem._width) { mem.resize(-200,1,1,1,0); memtype.resize(-200,1,1,1,0); } + const unsigned int pos = mempos++; + mem[pos] = val; + memtype[pos] = 1; // Set constant property + if (ind!=~0U) constcache_inds[ind] = pos; + return pos; + } + + // Insert code instructions for processing scalars. + unsigned int scalar() { // Insert new scalar in memory. + if (mempos>=mem._width) { mem.resize(-200,1,1,1,0); memtype.resize(mem._width,1,1,1,0); } + return mempos++; + } + + unsigned int scalar0(const mp_func op) { + const unsigned int pos = scalar(); + CImg::vector((ulongT)op,pos).move_to(code); + return pos; + } + + unsigned int scalar1(const mp_func op, const unsigned int arg1) { + const unsigned int pos = + arg1>_cimg_mp_slot_c && _cimg_mp_is_comp(arg1) && op!=mp_copy?arg1:scalar(); + CImg::vector((ulongT)op,pos,arg1).move_to(code); + return pos; + } + + unsigned int scalar2(const mp_func op, const unsigned int arg1, const unsigned int arg2) { + const unsigned int pos = + arg1>_cimg_mp_slot_c && _cimg_mp_is_comp(arg1)?arg1: + arg2>_cimg_mp_slot_c && _cimg_mp_is_comp(arg2)?arg2:scalar(); + CImg::vector((ulongT)op,pos,arg1,arg2).move_to(code); + return pos; + } + + unsigned int scalar3(const mp_func op, + const unsigned int arg1, const unsigned int arg2, const unsigned int arg3) { + const unsigned int pos = + arg1>_cimg_mp_slot_c && _cimg_mp_is_comp(arg1)?arg1: + arg2>_cimg_mp_slot_c && _cimg_mp_is_comp(arg2)?arg2: + arg3>_cimg_mp_slot_c && _cimg_mp_is_comp(arg3)?arg3:scalar(); + CImg::vector((ulongT)op,pos,arg1,arg2,arg3).move_to(code); + return pos; + } + + unsigned int scalar4(const mp_func op, + const unsigned int arg1, const unsigned int arg2, const unsigned int arg3, + const unsigned int arg4) { + const unsigned int pos = + arg1>_cimg_mp_slot_c && _cimg_mp_is_comp(arg1)?arg1: + arg2>_cimg_mp_slot_c && _cimg_mp_is_comp(arg2)?arg2: + arg3>_cimg_mp_slot_c && _cimg_mp_is_comp(arg3)?arg3: + arg4>_cimg_mp_slot_c && _cimg_mp_is_comp(arg4)?arg4:scalar(); + CImg::vector((ulongT)op,pos,arg1,arg2,arg3,arg4).move_to(code); + return pos; + } + + unsigned int scalar5(const mp_func op, + const unsigned int arg1, const unsigned int arg2, const unsigned int arg3, + const unsigned int arg4, const unsigned int arg5) { + const unsigned int pos = + arg1>_cimg_mp_slot_c && _cimg_mp_is_comp(arg1)?arg1: + arg2>_cimg_mp_slot_c && _cimg_mp_is_comp(arg2)?arg2: + arg3>_cimg_mp_slot_c && _cimg_mp_is_comp(arg3)?arg3: + arg4>_cimg_mp_slot_c && _cimg_mp_is_comp(arg4)?arg4: + arg5>_cimg_mp_slot_c && _cimg_mp_is_comp(arg5)?arg5:scalar(); + CImg::vector((ulongT)op,pos,arg1,arg2,arg3,arg4,arg5).move_to(code); + return pos; + } + + unsigned int scalar6(const mp_func op, + const unsigned int arg1, const unsigned int arg2, const unsigned int arg3, + const unsigned int arg4, const unsigned int arg5, const unsigned int arg6) { + const unsigned int pos = + arg1>_cimg_mp_slot_c && _cimg_mp_is_comp(arg1)?arg1: + arg2>_cimg_mp_slot_c && _cimg_mp_is_comp(arg2)?arg2: + arg3>_cimg_mp_slot_c && _cimg_mp_is_comp(arg3)?arg3: + arg4>_cimg_mp_slot_c && _cimg_mp_is_comp(arg4)?arg4: + arg5>_cimg_mp_slot_c && _cimg_mp_is_comp(arg5)?arg5: + arg6>_cimg_mp_slot_c && _cimg_mp_is_comp(arg6)?arg6:scalar(); + CImg::vector((ulongT)op,pos,arg1,arg2,arg3,arg4,arg5,arg6).move_to(code); + return pos; + } + + unsigned int scalar7(const mp_func op, + const unsigned int arg1, const unsigned int arg2, const unsigned int arg3, + const unsigned int arg4, const unsigned int arg5, const unsigned int arg6, + const unsigned int arg7) { + const unsigned int pos = + arg1>_cimg_mp_slot_c && _cimg_mp_is_comp(arg1)?arg1: + arg2>_cimg_mp_slot_c && _cimg_mp_is_comp(arg2)?arg2: + arg3>_cimg_mp_slot_c && _cimg_mp_is_comp(arg3)?arg3: + arg4>_cimg_mp_slot_c && _cimg_mp_is_comp(arg4)?arg4: + arg5>_cimg_mp_slot_c && _cimg_mp_is_comp(arg5)?arg5: + arg6>_cimg_mp_slot_c && _cimg_mp_is_comp(arg6)?arg6: + arg7>_cimg_mp_slot_c && _cimg_mp_is_comp(arg7)?arg7:scalar(); + CImg::vector((ulongT)op,pos,arg1,arg2,arg3,arg4,arg5,arg6,arg7).move_to(code); + return pos; + } + + // Return a string that defines the calling function + the user-defined function scope. + CImg calling_function_s() const { + CImg res; + const unsigned int + l1 = calling_function?(unsigned int)std::strlen(calling_function):0U, + l2 = user_macro?(unsigned int)std::strlen(user_macro):0U; + if (l2) { + res.assign(l1 + l2 + 48); + cimg_snprintf(res,res._width,"%s(): When substituting function '%s()'",calling_function,user_macro); + } else { + res.assign(l1 + l2 + 4); + cimg_snprintf(res,res._width,"%s()",calling_function); + } + return res; + } + + // Return true if specified argument can be a part of an allowed variable name. + bool is_varchar(const char c) const { + return (c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9') || c=='_'; + } + + // Insert code instructions for processing vectors. + bool is_comp_vector(const unsigned int arg) const { + unsigned int siz = _cimg_mp_size(arg); + if (siz>8) return false; + const int *ptr = memtype.data(arg + 1); + bool is_tmp = true; + while (siz-->0) if (*(ptr++)) { is_tmp = false; break; } + return is_tmp; + } + + void set_variable_vector(const unsigned int arg) { + unsigned int siz = _cimg_mp_size(arg); + int *ptr = memtype.data(arg + 1); + while (siz-->0) *(ptr++) = -1; + } + + unsigned int vector(const unsigned int siz) { // Insert new vector of specified size in memory + if (mempos + siz>=mem._width) { + mem.resize(2*mem._width + siz,1,1,1,0); + memtype.resize(mem._width,1,1,1,0); + } + const unsigned int pos = mempos++; + mem[pos] = cimg::type::nan(); + memtype[pos] = siz + 1; + mempos+=siz; + return pos; + } + + unsigned int vector(const unsigned int siz, const double value) { // Insert new initialized vector + const unsigned int pos = vector(siz); + double *ptr = &mem[pos] + 1; + for (unsigned int i = 0; i::vector((ulongT)mp_vector_copy,pos,arg,siz).move_to(code); + return pos; + } + + void self_vector_s(const unsigned int pos, const mp_func op, const unsigned int arg1) { + const unsigned int siz = _cimg_mp_size(pos); + if (siz>24) CImg::vector((ulongT)mp_self_map_vector_s,pos,siz,(ulongT)op,arg1).move_to(code); + else { + code.insert(siz); + for (unsigned int k = 1; k<=siz; ++k) + CImg::vector((ulongT)op,pos + k,arg1).move_to(code[code._width - 1 - siz + k]); + } + } + + void self_vector_v(const unsigned int pos, const mp_func op, const unsigned int arg1) { + const unsigned int siz = _cimg_mp_size(pos); + if (siz>24) CImg::vector((ulongT)mp_self_map_vector_v,pos,siz,(ulongT)op,arg1).move_to(code); + else { + code.insert(siz); + for (unsigned int k = 1; k<=siz; ++k) + CImg::vector((ulongT)op,pos + k,arg1 + k).move_to(code[code._width - 1 - siz + k]); + } + } + + unsigned int vector1_v(const mp_func op, const unsigned int arg1) { + const unsigned int + siz = _cimg_mp_size(arg1), + pos = is_comp_vector(arg1)?arg1:vector(siz); + if (siz>24) CImg::vector((ulongT)mp_vector_map_v,pos,siz,(ulongT)op,arg1).move_to(code); + else { + code.insert(siz); + for (unsigned int k = 1; k<=siz; ++k) + CImg::vector((ulongT)op,pos + k,arg1 + k).move_to(code[code._width - 1 - siz + k]); + } + return pos; + } + + unsigned int vector2_vv(const mp_func op, const unsigned int arg1, const unsigned int arg2) { + const unsigned int + siz = _cimg_mp_size(arg1), + pos = is_comp_vector(arg1)?arg1:is_comp_vector(arg2)?arg2:vector(siz); + if (siz>24) CImg::vector((ulongT)mp_vector_map_vv,pos,siz,(ulongT)op,arg1,arg2).move_to(code); + else { + code.insert(siz); + for (unsigned int k = 1; k<=siz; ++k) + CImg::vector((ulongT)op,pos + k,arg1 + k,arg2 + k).move_to(code[code._width - 1 - siz + k]); + } + return pos; + } + + unsigned int vector2_vs(const mp_func op, const unsigned int arg1, const unsigned int arg2) { + const unsigned int + siz = _cimg_mp_size(arg1), + pos = is_comp_vector(arg1)?arg1:vector(siz); + if (siz>24) CImg::vector((ulongT)mp_vector_map_vs,pos,siz,(ulongT)op,arg1,arg2).move_to(code); + else { + code.insert(siz); + for (unsigned int k = 1; k<=siz; ++k) + CImg::vector((ulongT)op,pos + k,arg1 + k,arg2).move_to(code[code._width - 1 - siz + k]); + } + return pos; + } + + unsigned int vector2_sv(const mp_func op, const unsigned int arg1, const unsigned int arg2) { + const unsigned int + siz = _cimg_mp_size(arg2), + pos = is_comp_vector(arg2)?arg2:vector(siz); + if (siz>24) CImg::vector((ulongT)mp_vector_map_sv,pos,siz,(ulongT)op,arg1,arg2).move_to(code); + else { + code.insert(siz); + for (unsigned int k = 1; k<=siz; ++k) + CImg::vector((ulongT)op,pos + k,arg1,arg2 + k).move_to(code[code._width - 1 - siz + k]); + } + return pos; + } + + unsigned int vector3_vss(const mp_func op, const unsigned int arg1, const unsigned int arg2, + const unsigned int arg3) { + const unsigned int + siz = _cimg_mp_size(arg1), + pos = is_comp_vector(arg1)?arg1:vector(siz); + if (siz>24) CImg::vector((ulongT)mp_vector_map_vss,pos,siz,(ulongT)op,arg1,arg2,arg3).move_to(code); + else { + code.insert(siz); + for (unsigned int k = 1; k<=siz; ++k) + CImg::vector((ulongT)op,pos + k,arg1 + k,arg2,arg3).move_to(code[code._width - 1 - siz + k]); + } + return pos; + } + + // Check if a memory slot is a positive integer constant scalar value. + // 'mode' can be: + // { 0=constant | 1=integer constant | 2=positive integer constant | 3=strictly-positive integer constant } + void check_constant(const unsigned int arg, const unsigned int n_arg, + const unsigned int mode, + char *const ss, char *const se, const char saved_char) { + _cimg_mp_check_type(arg,n_arg,1,0); + if (!(_cimg_mp_is_constant(arg) && + (!mode || (double)(int)mem[arg]==mem[arg]) && + (mode<2 || mem[arg]>=(mode==3)))) { + const char *s_arg = !n_arg?"":n_arg==1?"First ":n_arg==2?"Second ":n_arg==3?"Third ": + n_arg==4?"Fourth ":n_arg==5?"Fifth ":n_arg==6?"Sixth ":n_arg==7?"Seventh ":n_arg==8?"Eighth ": + n_arg==9?"Ninth ":"One of the "; + *se = saved_char; + char *const s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s%s %s%s (of type '%s') is not a%s constant, " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op,*s_op?":":"", + s_arg,*s_arg?"argument":"Argument",s_type(arg)._data, + !mode?"":mode==1?"n integer": + mode==2?" positive integer":" strictly positive integer", + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + } + + // Check a matrix is square. + void check_matrix_square(const unsigned int arg, const unsigned int n_arg, + char *const ss, char *const se, const char saved_char) { + _cimg_mp_check_type(arg,n_arg,2,0); + const unsigned int + siz = _cimg_mp_size(arg), + n = (unsigned int)cimg::round(std::sqrt((float)siz)); + if (n*n!=siz) { + const char *s_arg; + if (*s_op!='F') s_arg = !n_arg?"":n_arg==1?"Left-hand ":"Right-hand "; + else s_arg = !n_arg?"":n_arg==1?"First ":n_arg==2?"Second ":n_arg==3?"Third ":"One "; + *se = saved_char; + char *const s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s%s %s%s (of type '%s') " + "cannot be considered as a square matrix, in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op,*s_op?":":"", + s_arg,*s_op=='F'?(*s_arg?"argument":"Argument"):(*s_arg?"operand":"Operand"), + s_type(arg)._data, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + } + + // Check type compatibility for one argument. + // Bits of 'mode' tells what types are allowed: + // { 1 = scalar | 2 = vectorN }. + // If 'N' is not zero, it also restricts the vectors to be of size N only. + void check_type(const unsigned int arg, const unsigned int n_arg, + const unsigned int mode, const unsigned int N, + char *const ss, char *const se, const char saved_char) { + const bool + is_scalar = _cimg_mp_is_scalar(arg), + is_vector = _cimg_mp_is_vector(arg) && (!N || _cimg_mp_size(arg)==N); + bool cond = false; + if (mode&1) cond|=is_scalar; + if (mode&2) cond|=is_vector; + if (!cond) { + const char *s_arg; + if (*s_op!='F') s_arg = !n_arg?"":n_arg==1?"Left-hand ":"Right-hand "; + else s_arg = !n_arg?"":n_arg==1?"First ":n_arg==2?"Second ":n_arg==3?"Third ": + n_arg==4?"Fourth ":n_arg==5?"Fifth ":n_arg==6?"Sixth ":n_arg==7?"Seventh ":n_arg==8?"Eighth": + n_arg==9?"Ninth":"One of the "; + CImg sb_type(32); + if (mode==1) cimg_snprintf(sb_type,sb_type._width,"'scalar'"); + else if (mode==2) { + if (N) cimg_snprintf(sb_type,sb_type._width,"'vector%u'",N); + else cimg_snprintf(sb_type,sb_type._width,"'vector'"); + } else { + if (N) cimg_snprintf(sb_type,sb_type._width,"'scalar' or 'vector%u'",N); + else cimg_snprintf(sb_type,sb_type._width,"'scalar' or 'vector'"); + } + *se = saved_char; + char *const s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s%s %s%s has invalid type '%s' (should be %s), " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op,*s_op?":":"", + s_arg,*s_op=='F'?(*s_arg?"argument":"Argument"):(*s_arg?"operand":"Operand"), + s_type(arg)._data,sb_type._data, + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + } + + // Check that listin or listout are not empty. + void check_list(const bool is_out, + char *const ss, char *const se, const char saved_char) { + if ((!is_out && !listin) || (is_out && !listout)) { + *se = saved_char; + char *const s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s%s Invalid call with an empty image list, " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op,*s_op?":":"", + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + } + + // Check a vector is not 0-dimensional, or with unknown dimension at compile time. + void check_vector0(const unsigned int dim, + char *const ss, char *const se, const char saved_char) { + char *s0 = 0; + if (!dim) { + *se = saved_char; + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s%s Invalid construction of a 0-dimensional vector, " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op,*s_op?":":"", + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } else if (dim==~0U) { + *se = saved_char; + s0 = ss - 4>expr._data?ss - 4:expr._data; + cimg::strellipsize(s0,64); + throw CImgArgumentException("[" cimg_appname "_math_parser] " + "CImg<%s>::%s: %s%s Invalid construction of a vector with possible dynamic size, " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op,*s_op?":":"", + s0!=expr._data?"...":"",s0,se<&expr.back()?"...":""); + } + } + + // Evaluation functions, known by the parser. + // Defining these functions 'static' ensures that sizeof(mp_func)==sizeof(ulongT), + // so we can store pointers to them directly in the opcode vectors. +#ifdef _mp_arg +#undef _mp_arg +#endif +#define _mp_arg(x) mp.mem[mp.opcode[x]] + + static double mp_abs(_cimg_math_parser& mp) { + return cimg::abs(_mp_arg(2)); + } + + static double mp_add(_cimg_math_parser& mp) { + return _mp_arg(2) + _mp_arg(3); + } + + static double mp_acos(_cimg_math_parser& mp) { + return std::acos(_mp_arg(2)); + } + + static double mp_acosh(_cimg_math_parser& mp) { + return cimg::acosh(_mp_arg(2)); + } + + static double mp_asinh(_cimg_math_parser& mp) { + return cimg::asinh(_mp_arg(2)); + } + + static double mp_atanh(_cimg_math_parser& mp) { + return cimg::atanh(_mp_arg(2)); + } + + static double mp_arg(_cimg_math_parser& mp) { + const int _ind = (int)_mp_arg(4); + const unsigned int + nb_args = (unsigned int)mp.opcode[2] - 4, + ind = _ind<0?_ind + nb_args:(unsigned int)_ind, + siz = (unsigned int)mp.opcode[3]; + if (siz>0) { + if (ind>=nb_args) std::memset(&_mp_arg(1) + 1,0,siz*sizeof(double)); + else std::memcpy(&_mp_arg(1) + 1,&_mp_arg(ind + 4) + 1,siz*sizeof(double)); + return cimg::type::nan(); + } + if (ind>=nb_args) return 0; + return _mp_arg(ind + 4); + } + + static double mp_argkth(_cimg_math_parser& mp) { + const unsigned int i_end = (unsigned int)mp.opcode[2]; + const double val = mp_kth(mp); + for (unsigned int i = 4; ival) { val = _val; argval = i - 3; } + } + return (double)argval; + } + + static double mp_asin(_cimg_math_parser& mp) { + return std::asin(_mp_arg(2)); + } + + static double mp_atan(_cimg_math_parser& mp) { + return std::atan(_mp_arg(2)); + } + + static double mp_atan2(_cimg_math_parser& mp) { + return std::atan2(_mp_arg(2),_mp_arg(3)); + } + + static double mp_avg(_cimg_math_parser& mp) { + const unsigned int i_end = (unsigned int)mp.opcode[2]; + double val = _mp_arg(3); + for (unsigned int i = 4; i>(unsigned int)_mp_arg(3)); + } + + static double mp_bitwise_xor(_cimg_math_parser& mp) { + return (double)((longT)_mp_arg(2) ^ (longT)_mp_arg(3)); + } + + static double mp_bool(_cimg_math_parser& mp) { + return (double)(bool)_mp_arg(2); + } + + static double mp_break(_cimg_math_parser& mp) { + mp.break_type = 1; + mp.p_code = mp.p_break - 1; + return cimg::type::nan(); + } + + static double mp_breakpoint(_cimg_math_parser& mp) { + cimg_abort_init; + cimg_abort_test; + cimg::unused(mp); + return cimg::type::nan(); + } + + static double mp_cats(_cimg_math_parser& mp) { + const double *ptrd = &_mp_arg(1) + 1; + const unsigned int + sizd = (unsigned int)mp.opcode[2], + nb_args = (unsigned int)(mp.opcode[3] - 4)/2; + CImgList _str; + for (unsigned int n = 0; n(ptrs,l,1,1,1,true).move_to(_str); + } else CImg::vector((char)_mp_arg(4 + 2*n)).move_to(_str); // Scalar argument + } + CImg(1,1,1,1,0).move_to(_str); + const CImg str = _str>'x'; + const unsigned int l = std::min(str._width,sizd); + CImg(ptrd,l,1,1,1,true) = str.get_shared_points(0,l - 1); + return cimg::type::nan(); + } + + static double mp_cbrt(_cimg_math_parser& mp) { + return cimg::cbrt(_mp_arg(2)); + } + + static double mp_ceil(_cimg_math_parser& mp) { + return std::ceil(_mp_arg(2)); + } + + static double mp_complex_abs(_cimg_math_parser& mp) { + return cimg::_hypot(_mp_arg(2),_mp_arg(3)); + } + + static double mp_complex_conj(_cimg_math_parser& mp) { + const double *ptrs = &_mp_arg(2) + 1; + double *ptrd = &_mp_arg(1) + 1; + *(ptrd++) = *(ptrs++); + *ptrd = -*(ptrs); + return cimg::type::nan(); + } + + static double mp_complex_div_sv(_cimg_math_parser& mp) { + const double + *ptr2 = &_mp_arg(3) + 1, + r1 = _mp_arg(2), + r2 = *(ptr2++), i2 = *ptr2; + double *ptrd = &_mp_arg(1) + 1; + const double denom = r2*r2 + i2*i2; + *(ptrd++) = r1*r2/denom; + *ptrd = -r1*i2/denom; + return cimg::type::nan(); + } + + static double mp_complex_div_vv(_cimg_math_parser& mp) { + const double + *ptr1 = &_mp_arg(2) + 1, *ptr2 = &_mp_arg(3) + 1, + r1 = *(ptr1++), i1 = *ptr1, + r2 = *(ptr2++), i2 = *ptr2; + double *ptrd = &_mp_arg(1) + 1; + const double denom = r2*r2 + i2*i2; + *(ptrd++) = (r1*r2 + i1*i2)/denom; + *ptrd = (r2*i1 - r1*i2)/denom; + return cimg::type::nan(); + } + + static double mp_complex_exp(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double *ptrs = &_mp_arg(2) + 1, r = *(ptrs++), i = *(ptrs), er = std::exp(r); + *(ptrd++) = er*std::cos(i); + *(ptrd++) = er*std::sin(i); + return cimg::type::nan(); + } + + static double mp_complex_log(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double *ptrs = &_mp_arg(2) + 1, r = *(ptrs++), i = *(ptrs); + *(ptrd++) = 0.5*std::log(r*r + i*i); + *(ptrd++) = std::atan2(i,r); + return cimg::type::nan(); + } + + static double mp_complex_mul(_cimg_math_parser& mp) { + const double + *ptr1 = &_mp_arg(2) + 1, *ptr2 = &_mp_arg(3) + 1, + r1 = *(ptr1++), i1 = *ptr1, + r2 = *(ptr2++), i2 = *ptr2; + double *ptrd = &_mp_arg(1) + 1; + *(ptrd++) = r1*r2 - i1*i2; + *(ptrd++) = r1*i2 + r2*i1; + return cimg::type::nan(); + } + + static void _mp_complex_pow(const double r1, const double i1, + const double r2, const double i2, + double *ptrd) { + double ro, io; + if (cimg::abs(i2)<1e-15) { // Exponent is real + if (cimg::abs(r1)<1e-15 && cimg::abs(i1)<1e-15) { + if (cimg::abs(r2)<1e-15) { ro = 1; io = 0; } + else ro = io = 0; + } else { + const double + mod1_2 = r1*r1 + i1*i1, + phi1 = std::atan2(i1,r1), + modo = std::pow(mod1_2,0.5*r2), + phio = r2*phi1; + ro = modo*std::cos(phio); + io = modo*std::sin(phio); + } + } else { // Exponent is complex + if (cimg::abs(r1)<1e-15 && cimg::abs(i1)<1e-15) ro = io = 0; + const double + mod1_2 = r1*r1 + i1*i1, + phi1 = std::atan2(i1,r1), + modo = std::pow(mod1_2,0.5*r2)*std::exp(-i2*phi1), + phio = r2*phi1 + 0.5*i2*std::log(mod1_2); + ro = modo*std::cos(phio); + io = modo*std::sin(phio); + } + *(ptrd++) = ro; + *ptrd = io; + } + + static double mp_complex_pow_ss(_cimg_math_parser& mp) { + const double val1 = _mp_arg(2), val2 = _mp_arg(3); + double *ptrd = &_mp_arg(1) + 1; + _mp_complex_pow(val1,0,val2,0,ptrd); + return cimg::type::nan(); + } + + static double mp_complex_pow_sv(_cimg_math_parser& mp) { + const double val1 = _mp_arg(2), *ptr2 = &_mp_arg(3) + 1; + double *ptrd = &_mp_arg(1) + 1; + _mp_complex_pow(val1,0,ptr2[0],ptr2[1],ptrd); + return cimg::type::nan(); + } + + static double mp_complex_pow_vs(_cimg_math_parser& mp) { + const double *ptr1 = &_mp_arg(2) + 1, val2 = _mp_arg(3); + double *ptrd = &_mp_arg(1) + 1; + _mp_complex_pow(ptr1[0],ptr1[1],val2,0,ptrd); + return cimg::type::nan(); + } + + static double mp_complex_pow_vv(_cimg_math_parser& mp) { + const double *ptr1 = &_mp_arg(2) + 1, *ptr2 = &_mp_arg(3) + 1; + double *ptrd = &_mp_arg(1) + 1; + _mp_complex_pow(ptr1[0],ptr1[1],ptr2[0],ptr2[1],ptrd); + return cimg::type::nan(); + } + + static double mp_continue(_cimg_math_parser& mp) { + mp.break_type = 2; + mp.p_code = mp.p_break - 1; + return cimg::type::nan(); + } + + static double mp_cos(_cimg_math_parser& mp) { + return std::cos(_mp_arg(2)); + } + + static double mp_cosh(_cimg_math_parser& mp) { + return std::cosh(_mp_arg(2)); + } + + static double mp_critical(_cimg_math_parser& mp) { + const double res = _mp_arg(1); + cimg_pragma_openmp(critical(mp_critical)) + { + for (const CImg *const p_end = ++mp.p_code + mp.opcode[2]; + mp.p_code_data; + const ulongT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + } + --mp.p_code; + return res; + } + + static double mp_crop(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const int x = (int)_mp_arg(3), y = (int)_mp_arg(4), z = (int)_mp_arg(5), c = (int)_mp_arg(6); + const unsigned int + dx = (unsigned int)mp.opcode[7], + dy = (unsigned int)mp.opcode[8], + dz = (unsigned int)mp.opcode[9], + dc = (unsigned int)mp.opcode[10]; + const unsigned int boundary_conditions = (unsigned int)_mp_arg(11); + unsigned int ind = (unsigned int)mp.opcode[2]; + if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + const CImg &img = ind==~0U?mp.imgin:mp.listin[ind]; + if (!img) std::memset(ptrd,0,dx*dy*dz*dc*sizeof(double)); + else CImg(ptrd,dx,dy,dz,dc,true) = img.get_crop(x,y,z,c, + x + dx - 1,y + dy - 1, + z + dz - 1,c + dc - 1, + boundary_conditions); + return cimg::type::nan(); + } + + static double mp_cross(_cimg_math_parser& mp) { + CImg + vout(&_mp_arg(1) + 1,1,3,1,1,true), + v1(&_mp_arg(2) + 1,1,3,1,1,true), + v2(&_mp_arg(3) + 1,1,3,1,1,true); + (vout = v1).cross(v2); + return cimg::type::nan(); + } + + static double mp_cut(_cimg_math_parser& mp) { + double val = _mp_arg(2), cmin = _mp_arg(3), cmax = _mp_arg(4); + return valcmax?cmax:val; + } + + static double mp_date(_cimg_math_parser& mp) { + const unsigned int + _arg = (unsigned int)mp.opcode[3], + _siz = (unsigned int)mp.opcode[4], + siz = _siz?_siz:1; + const double *const arg_in = _arg==~0U?0:&_mp_arg(3) + (_siz?1:0); + double *const arg_out = &_mp_arg(1) + (_siz?1:0); + if (arg_in) std::memcpy(arg_out,arg_in,siz*sizeof(double)); + else for (unsigned int i = 0; i filename(mp.opcode[2] - 5); + if (filename) { + const ulongT *ptrs = mp.opcode._data + 5; + cimg_for(filename,ptrd,char) *ptrd = (char)*(ptrs++); + cimg::fdate(filename,arg_out,siz); + } else cimg::date(arg_out,siz); + return _siz?cimg::type::nan():*arg_out; + } + + static double mp_debug(_cimg_math_parser& mp) { + CImg expr(mp.opcode[2] - 4); + const ulongT *ptrs = mp.opcode._data + 4; + cimg_for(expr,ptrd,char) *ptrd = (char)*(ptrs++); + cimg::strellipsize(expr); + const ulongT g_target = mp.opcode[1]; + +#ifndef cimg_use_openmp + const unsigned int n_thread = 0; +#else + const unsigned int n_thread = omp_get_thread_num(); +#endif + cimg_pragma_openmp(critical(mp_debug)) + { + std::fprintf(cimg::output(), + "\n[" cimg_appname "_math_parser] %p[thread #%u]:%*c" + "Start debugging expression '%s', code length %u -> mem[%u] (memsize: %u)", + (void*)&mp,n_thread,mp.debug_indent,' ', + expr._data,(unsigned int)mp.opcode[3],(unsigned int)g_target,mp.mem._width); + std::fflush(cimg::output()); + mp.debug_indent+=3; + } + const CImg *const p_end = (++mp.p_code) + mp.opcode[3]; + CImg _op; + for ( ; mp.p_code &op = *mp.p_code; + mp.opcode._data = op._data; + + _op.assign(1,op._height - 1); + const ulongT *ptrs = op._data + 1; + for (ulongT *ptrd = _op._data, *const ptrde = _op._data + _op._height; ptrd mem[%u] = %g", + (void*)&mp,n_thread,mp.debug_indent,' ', + (void*)mp.opcode._data,(void*)*mp.opcode,_op.value_string().data(), + (unsigned int)target,mp.mem[target]); + std::fflush(cimg::output()); + } + } + cimg_pragma_openmp(critical(mp_debug)) + { + mp.debug_indent-=3; + std::fprintf(cimg::output(), + "\n[" cimg_appname "_math_parser] %p[thread #%u]:%*c" + "End debugging expression '%s' -> mem[%u] = %g (memsize: %u)", + (void*)&mp,n_thread,mp.debug_indent,' ', + expr._data,(unsigned int)g_target,mp.mem[g_target],mp.mem._width); + std::fflush(cimg::output()); + } + --mp.p_code; + return mp.mem[g_target]; + } + + static double mp_decrement(_cimg_math_parser& mp) { + return _mp_arg(2) - 1; + } + + static double mp_det(_cimg_math_parser& mp) { + const double *ptrs = &_mp_arg(2) + 1; + const unsigned int k = (unsigned int)mp.opcode[3]; + return CImg(ptrs,k,k,1,1,true).det(); + } + + static double mp_diag(_cimg_math_parser& mp) { + const unsigned int i_end = (unsigned int)mp.opcode[2], siz = mp.opcode[2] - 3; + double *ptrd = &_mp_arg(1) + 1; + std::memset(ptrd,0,siz*siz*sizeof(double)); + for (unsigned int i = 3; i::nan(); + } + + static double mp_display_memory(_cimg_math_parser& mp) { + cimg::unused(mp); + std::fputc('\n',cimg::output()); + mp.mem.display("[" cimg_appname "_math_parser] Memory snapshot"); + return cimg::type::nan(); + } + + static double mp_display(_cimg_math_parser& mp) { + const unsigned int + _siz = (unsigned int)mp.opcode[3], + siz = _siz?_siz:1; + const double *const ptr = &_mp_arg(1) + (_siz?1:0); + const int + w = (int)_mp_arg(4), + h = (int)_mp_arg(5), + d = (int)_mp_arg(6), + s = (int)_mp_arg(7); + CImg img; + if (w>0 && h>0 && d>0 && s>0) { + if ((unsigned int)w*h*d*s<=siz) img.assign(ptr,w,h,d,s,true); + else img.assign(ptr,siz).resize(w,h,d,s,-1); + } else img.assign(ptr,1,siz,1,1,true); + + CImg expr(mp.opcode[2] - 8); + const ulongT *ptrs = mp.opcode._data + 8; + cimg_for(expr,ptrd,char) *ptrd = (char)*(ptrs++); + ((CImg::string("[" cimg_appname "_math_parser] ",false,true),expr)>'x').move_to(expr); + cimg::strellipsize(expr); + std::fputc('\n',cimg::output()); + img.display(expr._data); + return cimg::type::nan(); + } + + static double mp_div(_cimg_math_parser& mp) { + return _mp_arg(2)/_mp_arg(3); + } + + static double mp_dot(_cimg_math_parser& mp) { + const unsigned int siz = (unsigned int)mp.opcode[4]; + return CImg(&_mp_arg(2) + 1,1,siz,1,1,true). + dot(CImg(&_mp_arg(3) + 1,1,siz,1,1,true)); + } + + static double mp_dowhile(_cimg_math_parser& mp) { + const ulongT + mem_body = mp.opcode[1], + mem_cond = mp.opcode[2]; + const CImg + *const p_body = ++mp.p_code, + *const p_cond = p_body + mp.opcode[3], + *const p_end = p_cond + mp.opcode[4]; + const unsigned int vsiz = (unsigned int)mp.opcode[5]; + if (mp.opcode[6]) { // Set default value for result and condition if necessary + if (vsiz) CImg(&mp.mem[mem_body] + 1,vsiz,1,1,1,true).fill(cimg::type::nan()); + else mp.mem[mem_body] = cimg::type::nan(); + } + if (mp.opcode[7]) mp.mem[mem_cond] = 0; + + const unsigned int _break_type = mp.break_type; + mp.break_type = 0; + do { + for (mp.p_code = p_body; mp.p_code_data; + const ulongT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + if (mp.break_type==1) break; else if (mp.break_type==2) mp.break_type = 0; + for (mp.p_code = p_cond; mp.p_code_data; + const ulongT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + if (mp.break_type==1) break; else if (mp.break_type==2) mp.break_type = 0; + } while (mp.mem[mem_cond]); + mp.break_type = _break_type; + mp.p_code = p_end - 1; + return mp.mem[mem_body]; + } + + static double mp_draw(_cimg_math_parser& mp) { + const int x = (int)_mp_arg(4), y = (int)_mp_arg(5), z = (int)_mp_arg(6), c = (int)_mp_arg(7); + unsigned int ind = (unsigned int)mp.opcode[3]; + + if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(3),mp.listin.width()); + CImg &img = ind==~0U?mp.imgout:mp.listout[ind]; + unsigned int + dx = (unsigned int)mp.opcode[8], + dy = (unsigned int)mp.opcode[9], + dz = (unsigned int)mp.opcode[10], + dc = (unsigned int)mp.opcode[11]; + dx = dx==~0U?img._width:(unsigned int)_mp_arg(8); + dy = dy==~0U?img._height:(unsigned int)_mp_arg(9); + dz = dz==~0U?img._depth:(unsigned int)_mp_arg(10); + dc = dc==~0U?img._spectrum:(unsigned int)_mp_arg(11); + + const ulongT sizS = mp.opcode[2]; + if (sizS<(ulongT)dx*dy*dz*dc) + throw CImgArgumentException("[" cimg_appname "_math_parser] CImg<%s>: Function 'draw()': " + "Sprite dimension (%lu values) and specified sprite geometry (%u,%u,%u,%u) " + "(%lu values) do not match.", + mp.imgin.pixel_type(),sizS,dx,dy,dz,dc,(ulongT)dx*dy*dz*dc); + CImg S(&_mp_arg(1) + 1,dx,dy,dz,dc,true); + const float opacity = (float)_mp_arg(12); + + if (img._data) { + if (mp.opcode[13]!=~0U) { // Opacity mask specified + const ulongT sizM = mp.opcode[14]; + if (sizM<(ulongT)dx*dy*dz) + throw CImgArgumentException("[" cimg_appname "_math_parser] CImg<%s>: Function 'draw()': " + "Mask dimension (%lu values) and specified sprite geometry (%u,%u,%u,%u) " + "(%lu values) do not match.", + mp.imgin.pixel_type(),sizS,dx,dy,dz,dc,(ulongT)dx*dy*dz*dc); + const CImg M(&_mp_arg(13) + 1,dx,dy,dz,(unsigned int)(sizM/(dx*dy*dz)),true); + img.draw_image(x,y,z,c,S,M,opacity,(float)_mp_arg(15)); + } else img.draw_image(x,y,z,c,S,opacity); + } + return cimg::type::nan(); + } + + static double mp_echo(_cimg_math_parser& mp) { + const unsigned int nb_args = (unsigned int)(mp.opcode[2] - 3)/2; + CImgList _str; + CImg it; + for (unsigned int n = 0; n string + const double *ptr = &_mp_arg(3 + 2*n) + 1; + unsigned int l = 0; + while (l(ptr,l,1,1,1,true).move_to(_str); + } else { // Scalar argument -> number + it.assign(256); + cimg_snprintf(it,it._width,"%.17g",_mp_arg(3 + 2*n)); + CImg::string(it,false,true).move_to(_str); + } + } + CImg(1,1,1,1,0).move_to(_str); + const CImg str = _str>'x'; + std::fprintf(cimg::output(),"\n%s",str._data); + return cimg::type::nan(); + } + + static double mp_ellipse(_cimg_math_parser& mp) { + const unsigned int i_end = (unsigned int)mp.opcode[2]; + unsigned int ind = (unsigned int)mp.opcode[3]; + if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(3),mp.listin.width()); + CImg &img = ind==~0U?mp.imgout:mp.listout[ind]; + CImg color(img._spectrum,1,1,1,0); + bool is_invalid_arguments = false; + unsigned int i = 4; + float r1 = 0, r2 = 0, angle = 0, opacity = 1; + int x0 = 0, y0 = 0; + if (i>=i_end) is_invalid_arguments = true; + else { + x0 = (int)cimg::round(_mp_arg(i++)); + if (i>=i_end) is_invalid_arguments = true; + else { + y0 = (int)cimg::round(_mp_arg(i++)); + if (i>=i_end) is_invalid_arguments = true; + else { + r1 = (float)_mp_arg(i++); + if (i>=i_end) r2 = r1; + else { + r2 = (float)_mp_arg(i++); + if (i args(i_end - 4); + cimg_forX(args,k) args[k] = _mp_arg(4 + k); + if (ind==~0U) + throw CImgArgumentException("[" cimg_appname "_math_parser] CImg<%s>: Function 'ellipse()': " + "Invalid arguments '%s'. ", + mp.imgin.pixel_type(),args.value_string()._data); + else + throw CImgArgumentException("[" cimg_appname "_math_parser] CImg<%s>: Function 'ellipse()': " + "Invalid arguments '#%u%s%s'. ", + mp.imgin.pixel_type(),ind,args._width?",":"",args.value_string()._data); + } + return cimg::type::nan(); + } + + static double mp_eq(_cimg_math_parser& mp) { + return (double)(_mp_arg(2)==_mp_arg(3)); + } + + static double mp_ext(_cimg_math_parser& mp) { + const unsigned int nb_args = (unsigned int)(mp.opcode[2] - 3)/2; + CImgList _str; + CImg it; + for (unsigned int n = 0; n string + const double *ptr = &_mp_arg(3 + 2*n) + 1; + unsigned int l = 0; + while (l(ptr,l,1,1,1,true).move_to(_str); + } else { // Scalar argument -> number + it.assign(256); + cimg_snprintf(it,it._width,"%.17g",_mp_arg(3 + 2*n)); + CImg::string(it,false,true).move_to(_str); + } + } + CImg(1,1,1,1,0).move_to(_str); + CImg str = _str>'x'; +#ifdef cimg_mp_ext_function + cimg_mp_ext_function(str); +#endif + return cimg::type::nan(); + } + + static double mp_exp(_cimg_math_parser& mp) { + return std::exp(_mp_arg(2)); + } + + static double mp_eye(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int k = (unsigned int)mp.opcode[2]; + CImg(ptrd,k,k,1,1,true).identity_matrix(); + return cimg::type::nan(); + } + + static double mp_factorial(_cimg_math_parser& mp) { + return cimg::factorial((int)_mp_arg(2)); + } + + static double mp_fibonacci(_cimg_math_parser& mp) { + return cimg::fibonacci((int)_mp_arg(2)); + } + + static double mp_find(_cimg_math_parser& mp) { + const bool is_forward = (bool)_mp_arg(5); + const ulongT siz = (ulongT)mp.opcode[3]; + longT ind = (longT)(mp.opcode[6]!=_cimg_mp_slot_nan?_mp_arg(6):is_forward?0:siz - 1); + if (ind<0 || ind>=(longT)siz) return -1.; + const double + *const ptrb = &_mp_arg(2) + 1, + *const ptre = ptrb + siz, + val = _mp_arg(4), + *ptr = ptrb + ind; + + // Forward search + if (is_forward) { + while (ptr=ptrb && *ptr!=val) --ptr; + return ptr=(longT)siz1) return -1.; + const double + *const ptr1b = &_mp_arg(2) + 1, + *const ptr1e = ptr1b + siz1, + *const ptr2b = &_mp_arg(4) + 1, + *const ptr2e = ptr2b + siz2, + *ptr1 = ptr1b + ind, + *p1 = 0, + *p2 = 0; + + // Forward search. + if (is_forward) { + do { + while (ptr1=ptr1b && *ptr1!=*ptr2b) --ptr1; + p1 = ptr1 + 1; + p2 = ptr2b + 1; + while (p1=ptr1b); + return p2 + *const p_init = ++mp.p_code, + *const p_cond = p_init + mp.opcode[4], + *const p_body = p_cond + mp.opcode[5], + *const p_post = p_body + mp.opcode[6], + *const p_end = p_post + mp.opcode[7]; + const unsigned int vsiz = (unsigned int)mp.opcode[2]; + bool is_cond = false; + if (mp.opcode[8]) { // Set default value for result and condition if necessary + if (vsiz) CImg(&mp.mem[mem_body] + 1,vsiz,1,1,1,true).fill(cimg::type::nan()); + else mp.mem[mem_body] = cimg::type::nan(); + } + if (mp.opcode[9]) mp.mem[mem_cond] = 0; + const unsigned int _break_type = mp.break_type; + mp.break_type = 0; + + for (mp.p_code = p_init; mp.p_code_data; + const ulongT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + + if (!mp.break_type) do { + for (mp.p_code = p_cond; mp.p_code_data; + const ulongT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + if (mp.break_type==1) break; + + is_cond = (bool)mp.mem[mem_cond]; + if (is_cond && !mp.break_type) { + for (mp.p_code = p_body; mp.p_code_data; + const ulongT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + if (mp.break_type==1) break; else if (mp.break_type==2) mp.break_type = 0; + + for (mp.p_code = p_post; mp.p_code_data; + const ulongT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + if (mp.break_type==1) break; else if (mp.break_type==2) mp.break_type = 0; + } + } while (is_cond); + + mp.break_type = _break_type; + mp.p_code = p_end - 1; + return mp.mem[mem_body]; + } + + static double mp_fsize(_cimg_math_parser& mp) { + const CImg filename(mp.opcode._data + 3,mp.opcode[2] - 3); + return (double)cimg::fsize(filename); + } + + static double mp_g(_cimg_math_parser& mp) { + cimg::unused(mp); + return cimg::grand(); + } + + static double mp_gauss(_cimg_math_parser& mp) { + const double x = _mp_arg(2), s = _mp_arg(3); + return std::exp(-x*x/(2*s*s))/(_mp_arg(4)?std::sqrt(2*s*s*cimg::PI):1); + } + + static double mp_gcd(_cimg_math_parser& mp) { + return cimg::gcd((long)_mp_arg(2),(long)_mp_arg(3)); + } + + static double mp_gt(_cimg_math_parser& mp) { + return (double)(_mp_arg(2)>_mp_arg(3)); + } + + static double mp_gte(_cimg_math_parser& mp) { + return (double)(_mp_arg(2)>=_mp_arg(3)); + } + + static double mp_i(_cimg_math_parser& mp) { + return (double)mp.imgin.atXYZC((int)mp.mem[_cimg_mp_slot_x],(int)mp.mem[_cimg_mp_slot_y], + (int)mp.mem[_cimg_mp_slot_z],(int)mp.mem[_cimg_mp_slot_c],(T)0); + } + + static double mp_if(_cimg_math_parser& mp) { + const bool is_cond = (bool)_mp_arg(2); + const ulongT + mem_left = mp.opcode[3], + mem_right = mp.opcode[4]; + const CImg + *const p_right = ++mp.p_code + mp.opcode[5], + *const p_end = p_right + mp.opcode[6]; + const unsigned int vtarget = (unsigned int)mp.opcode[1], vsiz = (unsigned int)mp.opcode[7]; + if (is_cond) for ( ; mp.p_code_data; + const ulongT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + else for (mp.p_code = p_right; mp.p_code_data; + const ulongT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + if (mp.p_code==mp.p_break) --mp.p_code; + else mp.p_code = p_end - 1; + if (vsiz) std::memcpy(&mp.mem[vtarget] + 1,&mp.mem[is_cond?mem_left:mem_right] + 1,sizeof(double)*vsiz); + return mp.mem[is_cond?mem_left:mem_right]; + } + + static double mp_image_d(_cimg_math_parser& mp) { + unsigned int ind = (unsigned int)mp.opcode[2]; + if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + const CImg &img = ind==~0U?mp.imgout:mp.listout[ind]; + return (double)img.depth(); + } + + static double mp_image_display(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listout.width()); + cimg::mutex(6); + CImg &img = mp.listout[ind]; + CImg title(256); + std::fputc('\n',cimg::output()); + cimg_snprintf(title,title._width,"[ Image #%u ]",ind); + img.display(title); + cimg::mutex(6,0); + return cimg::type::nan(); + } + + static double mp_image_h(_cimg_math_parser& mp) { + unsigned int ind = (unsigned int)mp.opcode[2]; + if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + const CImg &img = ind==~0U?mp.imgout:mp.listout[ind]; + return (double)img.height(); + } + + static double mp_image_median(_cimg_math_parser& mp) { + unsigned int ind = (unsigned int)mp.opcode[2]; + if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + const CImg &img = ind==~0U?mp.imgout:mp.listout[ind]; + return (double)img.median(); + } + + static double mp_image_print(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listout.width()); + cimg::mutex(6); + CImg &img = mp.listout[ind]; + CImg title(256); + std::fputc('\n',cimg::output()); + cimg_snprintf(title,title._width,"[ Image #%u ]",ind); + img.print(title); + cimg::mutex(6,0); + return cimg::type::nan(); + } + + static double mp_image_resize(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listout.width()); + cimg::mutex(6); + CImg &img = mp.listout[ind]; + const double + _w = mp.opcode[3]==~0U?-100:_mp_arg(3), + _h = mp.opcode[4]==~0U?-100:_mp_arg(4), + _d = mp.opcode[5]==~0U?-100:_mp_arg(5), + _s = mp.opcode[6]==~0U?-100:_mp_arg(6); + const unsigned int + w = (unsigned int)(_w>=0?_w:-_w*img.width()/100), + h = (unsigned int)(_h>=0?_h:-_h*img.height()/100), + d = (unsigned int)(_d>=0?_d:-_d*img.depth()/100), + s = (unsigned int)(_s>=0?_s:-_s*img.spectrum()/100), + interp = (int)_mp_arg(7); + if (mp.is_fill && img._data==mp.imgout._data) { + cimg::mutex(6,0); + throw CImgArgumentException("[" cimg_appname "_math_parser] CImg<%s>: Function 'resize()': " + "Cannot both fill and resize image (%u,%u,%u,%u) " + "to new dimensions (%u,%u,%u,%u).", + img.pixel_type(),img._width,img._height,img._depth,img._spectrum,w,h,d,s); + } + const unsigned int + boundary = (int)_mp_arg(8); + const float + cx = (float)_mp_arg(9), + cy = (float)_mp_arg(10), + cz = (float)_mp_arg(11), + cc = (float)_mp_arg(12); + img.resize(w,h,d,s,interp,boundary,cx,cy,cz,cc); + cimg::mutex(6,0); + return cimg::type::nan(); + } + + static double mp_image_s(_cimg_math_parser& mp) { + unsigned int ind = (unsigned int)mp.opcode[2]; + if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + const CImg &img = ind==~0U?mp.imgout:mp.listout[ind]; + return (double)img.spectrum(); + } + + static double mp_image_sort(_cimg_math_parser& mp) { + const bool is_increasing = (bool)_mp_arg(3); + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listout.width()), + axis = (unsigned int)_mp_arg(4); + cimg::mutex(6); + CImg &img = mp.listout[ind]; + img.sort(is_increasing, + axis==0 || axis=='x'?'x': + axis==1 || axis=='y'?'y': + axis==2 || axis=='z'?'z': + axis==3 || axis=='c'?'c':0); + cimg::mutex(6,0); + return cimg::type::nan(); + } + + static double mp_image_stats(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + unsigned int ind = (unsigned int)mp.opcode[2]; + if (ind==~0U) CImg(ptrd,14,1,1,1,true) = mp.imgout.get_stats(); + else { + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + CImg(ptrd,14,1,1,1,true) = mp.listout[ind].get_stats(); + } + return cimg::type::nan(); + } + + static double mp_image_w(_cimg_math_parser& mp) { + unsigned int ind = (unsigned int)mp.opcode[2]; + if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + const CImg &img = ind==~0U?mp.imgout:mp.listout[ind]; + return (double)img.width(); + } + + static double mp_image_wh(_cimg_math_parser& mp) { + unsigned int ind = (unsigned int)mp.opcode[2]; + if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + const CImg &img = ind==~0U?mp.imgout:mp.listout[ind]; + return (double)img.width()*img.height(); + } + + static double mp_image_whd(_cimg_math_parser& mp) { + unsigned int ind = (unsigned int)mp.opcode[2]; + if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + const CImg &img = ind==~0U?mp.imgout:mp.listout[ind]; + return (double)img.width()*img.height()*img.depth(); + } + + static double mp_image_whds(_cimg_math_parser& mp) { + unsigned int ind = (unsigned int)mp.opcode[2]; + if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + const CImg &img = ind==~0U?mp.imgout:mp.listout[ind]; + return (double)img.width()*img.height()*img.depth()*img.spectrum(); + } + + static double mp_increment(_cimg_math_parser& mp) { + return _mp_arg(2) + 1; + } + + static double mp_int(_cimg_math_parser& mp) { + return (double)(longT)_mp_arg(2); + } + + static double mp_ioff(_cimg_math_parser& mp) { + const unsigned int + boundary_conditions = (unsigned int)_mp_arg(3); + const CImg &img = mp.imgin; + const longT + off = (longT)_mp_arg(2), + whds = (longT)img.size(); + if (off>=0 && off::is_inf(_mp_arg(2)); + } + + static double mp_isint(_cimg_math_parser& mp) { + return (double)(cimg::mod(_mp_arg(2),1.0)==0); + } + + static double mp_isnan(_cimg_math_parser& mp) { + return (double)cimg::type::is_nan(_mp_arg(2)); + } + + static double mp_ixyzc(_cimg_math_parser& mp) { + const unsigned int + interpolation = (unsigned int)_mp_arg(6), + boundary_conditions = (unsigned int)_mp_arg(7); + const CImg &img = mp.imgin; + const double + x = _mp_arg(2), y = _mp_arg(3), + z = _mp_arg(4), c = _mp_arg(5); + if (interpolation==0) switch (boundary_conditions) { // Nearest neighbor interpolation + case 3 : { // Mirror + const int + w2 = 2*img.width(), h2 = 2*img.height(), d2 = 2*img.depth(), s2 = 2*img.spectrum(), + mx = cimg::mod((int)x,w2), my = cimg::mod((int)y,h2), + mz = cimg::mod((int)z,d2), mc = cimg::mod((int)c,s2); + return (double)img(mx &img = mp.imgin; + const longT + off = img.offset(ox,oy,oz,oc) + (longT)_mp_arg(2), + whds = (longT)img.size(); + if (off>=0 && off &img = mp.imgin; + const double + ox = mp.mem[_cimg_mp_slot_x], oy = mp.mem[_cimg_mp_slot_y], + oz = mp.mem[_cimg_mp_slot_z], oc = mp.mem[_cimg_mp_slot_c], + x = ox + _mp_arg(2), y = oy + _mp_arg(3), + z = oz + _mp_arg(4), c = oc + _mp_arg(5); + if (interpolation==0) switch (boundary_conditions) { // Nearest neighbor interpolation + case 3 : { // Mirror + const int + w2 = 2*img.width(), h2 = 2*img.height(), d2 = 2*img.depth(), s2 = 2*img.spectrum(), + mx = cimg::mod((int)x,w2), my = cimg::mod((int)y,h2), + mz = cimg::mod((int)z,d2), mc = cimg::mod((int)c,s2); + return (double)img(mx vals(i_end - 4); + double *p = vals.data(); + for (unsigned int i = 4; i &img = mp.listin[indi]; + const bool is_forward = (bool)_mp_arg(4); + const ulongT siz = (ulongT)img.size(); + longT ind = (longT)(mp.opcode[5]!=_cimg_mp_slot_nan?_mp_arg(5):is_forward?0:siz - 1); + if (ind<0 || ind>=(longT)siz) return -1.; + const T + *const ptrb = img.data(), + *const ptre = img.end(), + *ptr = ptrb + ind; + const double val = _mp_arg(3); + + // Forward search + if (is_forward) { + while (ptr=ptrb && (double)*ptr!=val) --ptr; + return ptr &img = mp.listin[indi]; + const bool is_forward = (bool)_mp_arg(5); + const ulongT + siz1 = (ulongT)img.size(), + siz2 = (ulongT)mp.opcode[4]; + longT ind = (longT)(mp.opcode[6]!=_cimg_mp_slot_nan?_mp_arg(6):is_forward?0:siz1 - 1); + if (ind<0 || ind>=(longT)siz1) return -1.; + const T + *const ptr1b = img.data(), + *const ptr1e = ptr1b + siz1, + *ptr1 = ptr1b + ind, + *p1 = 0; + const double + *const ptr2b = &_mp_arg(3) + 1, + *const ptr2e = ptr2b + siz2, + *p2 = 0; + + // Forward search. + if (is_forward) { + do { + while (ptr1=ptr1b && *ptr1!=*ptr2b) --ptr1; + p1 = ptr1 + 1; + p2 = ptr2b + 1; + while (p1=ptr1b); + return p2 &img = mp.listin[ind]; + const longT + off = (longT)_mp_arg(3), + whds = (longT)img.size(); + if (off>=0 && off &img = mp.listin[ind]; + const double + x = _mp_arg(3), y = _mp_arg(4), + z = _mp_arg(5), c = _mp_arg(6); + if (interpolation==0) switch (boundary_conditions) { // Nearest neighbor interpolation + case 3 : { // Mirror + const int + w2 = 2*img.width(), h2 = 2*img.height(), d2 = 2*img.depth(), s2 = 2*img.spectrum(), + mx = cimg::mod((int)x,w2), my = cimg::mod((int)y,h2), + mz = cimg::mod((int)z,d2), mc = cimg::mod((int)c,s2); + return (double)img(mx &img = mp.listin[ind]; + const longT + off = img.offset(ox,oy,oz,oc) + (longT)_mp_arg(3), + whds = (longT)img.size(); + if (off>=0 && off &img = mp.listin[ind]; + const double + ox = mp.mem[_cimg_mp_slot_x], oy = mp.mem[_cimg_mp_slot_y], + oz = mp.mem[_cimg_mp_slot_z], oc = mp.mem[_cimg_mp_slot_c], + x = ox + _mp_arg(3), y = oy + _mp_arg(4), + z = oz + _mp_arg(5), c = oc + _mp_arg(6); + if (interpolation==0) switch (boundary_conditions) { // Nearest neighbor interpolation + case 3 : { // Mirror + const int + w2 = 2*img.width(), h2 = 2*img.height(), d2 = 2*img.depth(), s2 = 2*img.spectrum(), + mx = cimg::mod((int)x,w2), my = cimg::mod((int)y,h2), + mz = cimg::mod((int)z,d2), mc = cimg::mod((int)c,s2); + return (double)img(mx::vector(mp.listin[ind].median()).move_to(mp.list_median[ind]); + return *mp.list_median[ind]; + } + + static double mp_list_set_ioff(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + CImg &img = mp.listout[ind]; + const longT + off = (longT)_mp_arg(3), + whds = (longT)img.size(); + const double val = _mp_arg(1); + if (off>=0 && off &img = mp.listout[ind]; + const int + x = (int)_mp_arg(3), y = (int)_mp_arg(4), + z = (int)_mp_arg(5), c = (int)_mp_arg(6); + const double val = _mp_arg(1); + if (x>=0 && x=0 && y=0 && z=0 && c &img = mp.listout[ind]; + const int + ox = (int)mp.mem[_cimg_mp_slot_x], oy = (int)mp.mem[_cimg_mp_slot_y], + oz = (int)mp.mem[_cimg_mp_slot_z], oc = (int)mp.mem[_cimg_mp_slot_c]; + const longT + off = img.offset(ox,oy,oz,oc) + (longT)_mp_arg(3), + whds = (longT)img.size(); + const double val = _mp_arg(1); + if (off>=0 && off &img = mp.listout[ind]; + const double + ox = mp.mem[_cimg_mp_slot_x], oy = mp.mem[_cimg_mp_slot_y], + oz = mp.mem[_cimg_mp_slot_z], oc = mp.mem[_cimg_mp_slot_c]; + const int + x = (int)(ox + _mp_arg(3)), y = (int)(oy + _mp_arg(4)), + z = (int)(oz + _mp_arg(5)), c = (int)(oc + _mp_arg(6)); + const double val = _mp_arg(1); + if (x>=0 && x=0 && y=0 && z=0 && c &img = mp.listout[ind]; + const longT + off = (longT)_mp_arg(3), + whd = (longT)img.width()*img.height()*img.depth(); + const T val = (T)_mp_arg(1); + if (off>=0 && off &img = mp.listout[ind]; + const longT + off = (longT)_mp_arg(3), + whd = (longT)img.width()*img.height()*img.depth(); + const double *ptrs = &_mp_arg(1) + 1; + if (off>=0 && off::nan(); + } + + static double mp_list_set_Ixyz_s(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + CImg &img = mp.listout[ind]; + const int + x = (int)_mp_arg(3), + y = (int)_mp_arg(4), + z = (int)_mp_arg(5); + const T val = (T)_mp_arg(1); + if (x>=0 && x=0 && y=0 && z &img = mp.listout[ind]; + const int + x = (int)_mp_arg(3), + y = (int)_mp_arg(4), + z = (int)_mp_arg(5); + const double *ptrs = &_mp_arg(1) + 1; + if (x>=0 && x=0 && y=0 && z::nan(); + } + + static double mp_list_set_Joff_s(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + CImg &img = mp.listout[ind]; + const int + ox = (int)mp.mem[_cimg_mp_slot_x], oy = (int)mp.mem[_cimg_mp_slot_y], + oz = (int)mp.mem[_cimg_mp_slot_z], oc = (int)mp.mem[_cimg_mp_slot_c]; + const longT + off = img.offset(ox,oy,oz,oc) + (longT)_mp_arg(3), + whd = (longT)img.width()*img.height()*img.depth(); + const T val = (T)_mp_arg(1); + if (off>=0 && off &img = mp.listout[ind]; + const int + ox = (int)mp.mem[_cimg_mp_slot_x], oy = (int)mp.mem[_cimg_mp_slot_y], + oz = (int)mp.mem[_cimg_mp_slot_z], oc = (int)mp.mem[_cimg_mp_slot_c]; + const longT + off = img.offset(ox,oy,oz,oc) + (longT)_mp_arg(3), + whd = (longT)img.width()*img.height()*img.depth(); + const double *ptrs = &_mp_arg(1) + 1; + if (off>=0 && off::nan(); + } + + static double mp_list_set_Jxyz_s(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + CImg &img = mp.listout[ind]; + const double ox = mp.mem[_cimg_mp_slot_x], oy = mp.mem[_cimg_mp_slot_y], oz = mp.mem[_cimg_mp_slot_z]; + const int + x = (int)(ox + _mp_arg(3)), + y = (int)(oy + _mp_arg(4)), + z = (int)(oz + _mp_arg(5)); + const T val = (T)_mp_arg(1); + if (x>=0 && x=0 && y=0 && z &img = mp.listout[ind]; + const double ox = mp.mem[_cimg_mp_slot_x], oy = mp.mem[_cimg_mp_slot_y], oz = mp.mem[_cimg_mp_slot_z]; + const int + x = (int)(ox + _mp_arg(3)), + y = (int)(oy + _mp_arg(4)), + z = (int)(oz + _mp_arg(5)); + const double *ptrs = &_mp_arg(1) + 1; + if (x>=0 && x=0 && y=0 && z::nan(); + } + + static double mp_list_spectrum(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + return (double)mp.listin[ind]._spectrum; + } + + static double mp_list_stats(_cimg_math_parser& mp) { + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()), + k = (unsigned int)mp.opcode[3]; + if (!mp.list_stats) mp.list_stats.assign(mp.listin._width); + if (!mp.list_stats[ind]) mp.list_stats[ind].assign(1,14,1,1,0).fill(mp.listin[ind].get_stats(),false); + return mp.list_stats(ind,k); + } + + static double mp_list_wh(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + return (double)mp.listin[ind]._width*mp.listin[ind]._height; + } + + static double mp_list_whd(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + return (double)mp.listin[ind]._width*mp.listin[ind]._height*mp.listin[ind]._depth; + } + + static double mp_list_whds(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + return (double)mp.listin[ind]._width*mp.listin[ind]._height*mp.listin[ind]._depth*mp.listin[ind]._spectrum; + } + + static double mp_list_width(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + return (double)mp.listin[ind]._width; + } + + static double mp_list_Ioff(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()), + boundary_conditions = (unsigned int)_mp_arg(4), + vsiz = (unsigned int)mp.opcode[5]; + const CImg &img = mp.listin[ind]; + const longT + off = (longT)_mp_arg(3), + whd = (longT)img.width()*img.height()*img.depth(); + const T *ptrs; + if (off>=0 && off::nan(); + } + if (img._data) switch (boundary_conditions) { + case 3 : { // Mirror + const longT whd2 = 2*whd, moff = cimg::mod(off,whd2); + ptrs = &img[moff::nan(); + } + case 2 : // Periodic + ptrs = &img[cimg::mod(off,whd)]; + cimg_for_inC(img,0,vsiz - 1,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return cimg::type::nan(); + case 1 : // Neumann + ptrs = off<0?&img[0]:&img[whd - 1]; + cimg_for_inC(img,0,vsiz - 1,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return cimg::type::nan(); + default : // Dirichlet + std::memset(ptrd,0,vsiz*sizeof(double)); + return cimg::type::nan(); + } + std::memset(ptrd,0,vsiz*sizeof(double)); + return cimg::type::nan(); + } + + static double mp_list_Ixyz(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()), + interpolation = (unsigned int)_mp_arg(6), + boundary_conditions = (unsigned int)_mp_arg(7), + vsiz = (unsigned int)mp.opcode[8]; + const CImg &img = mp.listin[ind]; + const double x = _mp_arg(3), y = _mp_arg(4), z = _mp_arg(5); + const ulongT whd = (ulongT)img._width*img._height*img._depth; + const T *ptrs; + if (interpolation==0) switch (boundary_conditions) { // Nearest neighbor interpolation + case 3 : { // Mirror + const int + w2 = 2*img.width(), h2 = 2*img.height(), d2 = 2*img.depth(), + mx = cimg::mod((int)x,w2), my = cimg::mod((int)y,h2), mz = cimg::mod((int)z,d2), + cx = mx::nan(); + } + + static double mp_list_Joff(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()), + boundary_conditions = (unsigned int)_mp_arg(4), + vsiz = (unsigned int)mp.opcode[5]; + const int + ox = (int)mp.mem[_cimg_mp_slot_x], oy = (int)mp.mem[_cimg_mp_slot_y], oz = (int)mp.mem[_cimg_mp_slot_z]; + const CImg &img = mp.listin[ind]; + const longT + off = img.offset(ox,oy,oz) + (longT)_mp_arg(3), + whd = (longT)img.width()*img.height()*img.depth(); + const T *ptrs; + if (off>=0 && off::nan(); + } + if (img._data) switch (boundary_conditions) { + case 3 : { // Mirror + const longT whd2 = 2*whd, moff = cimg::mod(off,whd2); + ptrs = &img[moff::nan(); + } + case 2 : // Periodic + ptrs = &img[cimg::mod(off,whd)]; + cimg_for_inC(img,0,vsiz - 1,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return cimg::type::nan(); + case 1 : // Neumann + ptrs = off<0?&img[0]:&img[whd - 1]; + cimg_for_inC(img,0,vsiz - 1,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return cimg::type::nan(); + default : // Dirichlet + std::memset(ptrd,0,vsiz*sizeof(double)); + return cimg::type::nan(); + } + std::memset(ptrd,0,vsiz*sizeof(double)); + return cimg::type::nan(); + } + + static double mp_list_Jxyz(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()), + interpolation = (unsigned int)_mp_arg(6), + boundary_conditions = (unsigned int)_mp_arg(7), + vsiz = (unsigned int)mp.opcode[8]; + const CImg &img = mp.listin[ind]; + const double + ox = mp.mem[_cimg_mp_slot_x], oy = mp.mem[_cimg_mp_slot_y], oz = mp.mem[_cimg_mp_slot_z], + x = ox + _mp_arg(3), y = oy + _mp_arg(4), z = oz + _mp_arg(5); + const ulongT whd = (ulongT)img._width*img._height*img._depth; + const T *ptrs; + if (interpolation==0) switch (boundary_conditions) { // Nearest neighbor interpolation + case 3 : { // Mirror + const int + w2 = 2*img.width(), h2 = 2*img.height(), d2 = 2*img.depth(), + mx = cimg::mod((int)x,w2), my = cimg::mod((int)y,h2), mz = cimg::mod((int)z,d2), + cx = mx::nan(); + } + + static double mp_log(_cimg_math_parser& mp) { + return std::log(_mp_arg(2)); + } + + static double mp_log10(_cimg_math_parser& mp) { + return std::log10(_mp_arg(2)); + } + + static double mp_log2(_cimg_math_parser& mp) { + return cimg::log2(_mp_arg(2)); + } + + static double mp_logical_and(_cimg_math_parser& mp) { + const bool val_left = (bool)_mp_arg(2); + const CImg *const p_end = ++mp.p_code + mp.opcode[4]; + if (!val_left) { mp.p_code = p_end - 1; return 0; } + const ulongT mem_right = mp.opcode[3]; + for ( ; mp.p_code_data; + const ulongT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + --mp.p_code; + return (double)(bool)mp.mem[mem_right]; + } + + static double mp_logical_not(_cimg_math_parser& mp) { + return (double)!_mp_arg(2); + } + + static double mp_logical_or(_cimg_math_parser& mp) { + const bool val_left = (bool)_mp_arg(2); + const CImg *const p_end = ++mp.p_code + mp.opcode[4]; + if (val_left) { mp.p_code = p_end - 1; return 1; } + const ulongT mem_right = mp.opcode[3]; + for ( ; mp.p_code_data; + const ulongT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + --mp.p_code; + return (double)(bool)mp.mem[mem_right]; + } + + static double mp_lowercase(_cimg_math_parser& mp) { + return cimg::lowercase(_mp_arg(2)); + } + + static double mp_lt(_cimg_math_parser& mp) { + return (double)(_mp_arg(2)<_mp_arg(3)); + } + + static double mp_lte(_cimg_math_parser& mp) { + return (double)(_mp_arg(2)<=_mp_arg(3)); + } + + static double mp_matrix_eig(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double *ptr1 = &_mp_arg(2) + 1; + const unsigned int k = (unsigned int)mp.opcode[3]; + CImg val, vec; + CImg(ptr1,k,k,1,1,true).symmetric_eigen(val,vec); + CImg(ptrd,1,k,1,1,true) = val; + CImg(ptrd + k,k,k,1,1,true) = vec.get_transpose(); + return cimg::type::nan(); + } + + static double mp_matrix_inv(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double *ptr1 = &_mp_arg(2) + 1; + const unsigned int k = (unsigned int)mp.opcode[3]; + CImg(ptrd,k,k,1,1,true) = CImg(ptr1,k,k,1,1,true).get_invert(); + return cimg::type::nan(); + } + + static double mp_matrix_mul(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double + *ptr1 = &_mp_arg(2) + 1, + *ptr2 = &_mp_arg(3) + 1; + const unsigned int + k = (unsigned int)mp.opcode[4], + l = (unsigned int)mp.opcode[5], + m = (unsigned int)mp.opcode[6]; + CImg(ptrd,m,k,1,1,true) = CImg(ptr1,l,k,1,1,true)*CImg(ptr2,m,l,1,1,true); + return cimg::type::nan(); + } + + static double mp_matrix_pseudoinv(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double *ptr1 = &_mp_arg(2) + 1; + const unsigned int + k = (unsigned int)mp.opcode[3], + l = (unsigned int)mp.opcode[4]; + CImg(ptrd,l,k,1,1,true) = CImg(ptr1,k,l,1,1,true).get_pseudoinvert(); + return cimg::type::nan(); + } + + static double mp_matrix_svd(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double *ptr1 = &_mp_arg(2) + 1; + const unsigned int + k = (unsigned int)mp.opcode[3], + l = (unsigned int)mp.opcode[4]; + CImg U, S, V; + CImg(ptr1,k,l,1,1,true).SVD(U,S,V); + CImg(ptrd,k,l,1,1,true) = U; + CImg(ptrd + k*l,1,k,1,1,true) = S; + CImg(ptrd + k*l + k,k,k,1,1,true) = V; + return cimg::type::nan(); + } + + static double mp_max(_cimg_math_parser& mp) { + const unsigned int i_end = (unsigned int)mp.opcode[2]; + double val = _mp_arg(3); + for (unsigned int i = 4; i=mp.mem.width()) + throw CImgArgumentException("[" cimg_appname "_math_parser] CImg<%s>: Function 'copy()': " + "Out-of-bounds variable pointer " + "(length: %ld, increment: %ld, offset start: %ld, " + "offset end: %ld, offset max: %u).", + mp.imgin.pixel_type(),siz,inc,off,eoff,mp.mem._width - 1); + return &mp.mem[off]; + } + + static float* _mp_memcopy_float(_cimg_math_parser& mp, const ulongT *const p_ref, + const longT siz, const long inc) { + const unsigned ind = (unsigned int)p_ref[1]; + const CImg &img = ind==~0U?mp.imgin:mp.listin[cimg::mod((int)mp.mem[ind],mp.listin.width())]; + const bool is_relative = (bool)p_ref[2]; + int ox, oy, oz, oc; + longT off = 0; + if (is_relative) { + ox = (int)mp.mem[_cimg_mp_slot_x]; + oy = (int)mp.mem[_cimg_mp_slot_y]; + oz = (int)mp.mem[_cimg_mp_slot_z]; + oc = (int)mp.mem[_cimg_mp_slot_c]; + off = img.offset(ox,oy,oz,oc); + } + if ((*p_ref)%2) { + const int + x = (int)mp.mem[p_ref[3]], + y = (int)mp.mem[p_ref[4]], + z = (int)mp.mem[p_ref[5]], + c = *p_ref==5?0:(int)mp.mem[p_ref[6]]; + off+=img.offset(x,y,z,c); + } else off+=(longT)mp.mem[p_ref[3]]; + const longT eoff = off + (siz - 1)*inc; + if (off<0 || eoff>=(longT)img.size()) + throw CImgArgumentException("[" cimg_appname "_math_parser] CImg<%s>: Function 'copy()': " + "Out-of-bounds image pointer " + "(length: %ld, increment: %ld, offset start: %ld, " + "offset end: %ld, offset max: %lu).", + mp.imgin.pixel_type(),siz,inc,off,eoff,img.size() - 1); + return (float*)&img[off]; + } + + static double mp_memcopy(_cimg_math_parser& mp) { + longT siz = (longT)_mp_arg(4); + const longT inc_d = (longT)_mp_arg(5), inc_s = (longT)_mp_arg(6); + const float + _opacity = (float)_mp_arg(7), + opacity = (float)cimg::abs(_opacity), + omopacity = 1 - std::max(_opacity,0.0f); + if (siz>0) { + const bool + is_doubled = mp.opcode[8]<=1, + is_doubles = mp.opcode[15]<=1; + if (is_doubled && is_doubles) { // (double*) <- (double*) + double *ptrd = _mp_memcopy_double(mp,(unsigned int)mp.opcode[2],&mp.opcode[8],siz,inc_d); + const double *ptrs = _mp_memcopy_double(mp,(unsigned int)mp.opcode[3],&mp.opcode[15],siz,inc_s); + if (inc_d==1 && inc_s==1 && _opacity>=1) { + if (ptrs + siz - 1ptrd + siz - 1) std::memcpy(ptrd,ptrs,siz*sizeof(double)); + else std::memmove(ptrd,ptrs,siz*sizeof(double)); + } else { + if (ptrs + (siz - 1)*inc_sptrd + (siz - 1)*inc_d) { + if (_opacity>=1) while (siz-->0) { *ptrd = *ptrs; ptrd+=inc_d; ptrs+=inc_s; } + else while (siz-->0) { *ptrd = omopacity**ptrd + opacity**ptrs; ptrd+=inc_d; ptrs+=inc_s; } + } else { // Overlapping buffers + CImg buf((unsigned int)siz); + cimg_for(buf,ptr,double) { *ptr = *ptrs; ptrs+=inc_s; } + ptrs = buf; + if (_opacity>=1) while (siz-->0) { *ptrd = *(ptrs++); ptrd+=inc_d; } + else while (siz-->0) { *ptrd = omopacity**ptrd + opacity**(ptrs++); ptrd+=inc_d; } + } + } + } else if (is_doubled && !is_doubles) { // (double*) <- (float*) + double *ptrd = _mp_memcopy_double(mp,(unsigned int)mp.opcode[2],&mp.opcode[8],siz,inc_d); + const float *ptrs = _mp_memcopy_float(mp,&mp.opcode[15],siz,inc_s); + if (_opacity>=1) while (siz-->0) { *ptrd = *ptrs; ptrd+=inc_d; ptrs+=inc_s; } + else while (siz-->0) { *ptrd = omopacity**ptrd + _opacity**ptrs; ptrd+=inc_d; ptrs+=inc_s; } + } else if (!is_doubled && is_doubles) { // (float*) <- (double*) + float *ptrd = _mp_memcopy_float(mp,&mp.opcode[8],siz,inc_d); + const double *ptrs = _mp_memcopy_double(mp,(unsigned int)mp.opcode[3],&mp.opcode[15],siz,inc_s); + if (_opacity>=1) while (siz-->0) { *ptrd = (float)*ptrs; ptrd+=inc_d; ptrs+=inc_s; } + else while (siz-->0) { *ptrd = (float)(omopacity**ptrd + opacity**ptrs); ptrd+=inc_d; ptrs+=inc_s; } + } else { // (float*) <- (float*) + float *ptrd = _mp_memcopy_float(mp,&mp.opcode[8],siz,inc_d); + const float *ptrs = _mp_memcopy_float(mp,&mp.opcode[15],siz,inc_s); + if (inc_d==1 && inc_s==1 && _opacity>=1) { + if (ptrs + siz - 1ptrd + siz - 1) std::memcpy(ptrd,ptrs,siz*sizeof(float)); + else std::memmove(ptrd,ptrs,siz*sizeof(float)); + } else { + if (ptrs + (siz - 1)*inc_sptrd + (siz - 1)*inc_d) { + if (_opacity>=1) while (siz-->0) { *ptrd = *ptrs; ptrd+=inc_d; ptrs+=inc_s; } + else while (siz-->0) { *ptrd = omopacity**ptrd + opacity**ptrs; ptrd+=inc_d; ptrs+=inc_s; } + } else { // Overlapping buffers + CImg buf((unsigned int)siz); + cimg_for(buf,ptr,float) { *ptr = *ptrs; ptrs+=inc_s; } + ptrs = buf; + if (_opacity>=1) while (siz-->0) { *ptrd = *(ptrs++); ptrd+=inc_d; } + else while (siz-->0) { *ptrd = omopacity**ptrd + opacity**(ptrs++); ptrd+=inc_d; } + } + } + } + } + return _mp_arg(1); + } + + static double mp_min(_cimg_math_parser& mp) { + const unsigned int i_end = (unsigned int)mp.opcode[2]; + double val = _mp_arg(3); + for (unsigned int i = 4; i vals(i_end - 3); + double *p = vals.data(); + for (unsigned int i = 3; ires) res = val; + } + return res; + } + + static double mp_normp(_cimg_math_parser& mp) { + const unsigned int i_end = (unsigned int)mp.opcode[2]; + if (i_end==4) return cimg::abs(_mp_arg(3)); + const double p = (double)mp.opcode[3]; + double res = 0; + for (unsigned int i = 4; i0?res:0.0; + } + + static double mp_permutations(_cimg_math_parser& mp) { + return cimg::permutations((int)_mp_arg(2),(int)_mp_arg(3),(bool)_mp_arg(4)); + } + + static double mp_polygon(_cimg_math_parser& mp) { + const unsigned int i_end = (unsigned int)mp.opcode[2]; + unsigned int ind = (unsigned int)mp.opcode[3]; + if (ind!=~0U) ind = (unsigned int)cimg::mod((int)_mp_arg(3),mp.listin.width()); + CImg &img = ind==~0U?mp.imgout:mp.listout[ind]; + bool is_invalid_arguments = i_end<=4; + if (!is_invalid_arguments) { + const int nbv = (int)_mp_arg(4); + if (nbv<=0) is_invalid_arguments = true; + else { + CImg points(nbv,2,1,1,0); + CImg color(img._spectrum,1,1,1,0); + float opacity = 1; + unsigned int i = 5; + cimg_foroff(points,k) if (i args(i_end - 4); + cimg_forX(args,k) args[k] = _mp_arg(4 + k); + if (ind==~0U) + throw CImgArgumentException("[" cimg_appname "_math_parser] CImg<%s>: Function 'polygon()': " + "Invalid arguments '%s'. ", + mp.imgin.pixel_type(),args.value_string()._data); + else + throw CImgArgumentException("[" cimg_appname "_math_parser] CImg<%s>: Function 'polygon()': " + "Invalid arguments '#%u%s%s'. ", + mp.imgin.pixel_type(),ind,args._width?",":"",args.value_string()._data); + } + return cimg::type::nan(); + } + + static double mp_pow(_cimg_math_parser& mp) { + const double v = _mp_arg(2), p = _mp_arg(3); + return std::pow(v,p); + } + + static double mp_pow0_25(_cimg_math_parser& mp) { + const double val = _mp_arg(2); + return std::sqrt(std::sqrt(val)); + } + + static double mp_pow3(_cimg_math_parser& mp) { + const double val = _mp_arg(2); + return val*val*val; + } + + static double mp_pow4(_cimg_math_parser& mp) { + const double val = _mp_arg(2); + return val*val*val*val; + } + + static double mp_print(_cimg_math_parser& mp) { + const double val = _mp_arg(1); + const bool print_char = (bool)mp.opcode[3]; + cimg_pragma_openmp(critical(mp_print)) + { + CImg expr(mp.opcode[2] - 4); + const ulongT *ptrs = mp.opcode._data + 4; + cimg_for(expr,ptrd,char) *ptrd = (char)*(ptrs++); + cimg::strellipsize(expr); + cimg::mutex(6); + if (print_char) + std::fprintf(cimg::output(),"\n[" cimg_appname "_math_parser] %s = %g = '%c'",expr._data,val,(int)val); + else + std::fprintf(cimg::output(),"\n[" cimg_appname "_math_parser] %s = %g",expr._data,val); + std::fflush(cimg::output()); + cimg::mutex(6,0); + } + return val; + } + + static double mp_prod(_cimg_math_parser& mp) { + const unsigned int i_end = (unsigned int)mp.opcode[2]; + double val = _mp_arg(3); + for (unsigned int i = 4; i::nan(); + } + + static double mp_rot3d(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const float x = (float)_mp_arg(2), y = (float)_mp_arg(3), z = (float)_mp_arg(4), theta = (float)_mp_arg(5); + CImg(ptrd,3,3,1,1,true) = CImg::rotation_matrix(x,y,z,theta); + return cimg::type::nan(); + } + + static double mp_round(_cimg_math_parser& mp) { + return cimg::round(_mp_arg(2),_mp_arg(3),(int)_mp_arg(4)); + } + + static double mp_self_add(_cimg_math_parser& mp) { + return _mp_arg(1)+=_mp_arg(2); + } + + static double mp_self_bitwise_and(_cimg_math_parser& mp) { + double &val = _mp_arg(1); + return val = (double)((longT)val & (longT)_mp_arg(2)); + } + + static double mp_self_bitwise_left_shift(_cimg_math_parser& mp) { + double &val = _mp_arg(1); + return val = (double)((longT)val<<(unsigned int)_mp_arg(2)); + } + + static double mp_self_bitwise_or(_cimg_math_parser& mp) { + double &val = _mp_arg(1); + return val = (double)((longT)val | (longT)_mp_arg(2)); + } + + static double mp_self_bitwise_right_shift(_cimg_math_parser& mp) { + double &val = _mp_arg(1); + return val = (double)((longT)val>>(unsigned int)_mp_arg(2)); + } + + static double mp_self_decrement(_cimg_math_parser& mp) { + return --_mp_arg(1); + } + + static double mp_self_increment(_cimg_math_parser& mp) { + return ++_mp_arg(1); + } + + static double mp_self_map_vector_s(_cimg_math_parser& mp) { // Vector += scalar + unsigned int + ptrd = (unsigned int)mp.opcode[1] + 1, + siz = (unsigned int)mp.opcode[2]; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(1,3); + l_opcode[2] = mp.opcode[4]; // Scalar argument. + l_opcode.swap(mp.opcode); + ulongT &target = mp.opcode[1]; + while (siz-->0) { target = ptrd++; (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); + } + + static double mp_self_map_vector_v(_cimg_math_parser& mp) { // Vector += vector + unsigned int + ptrd = (unsigned int)mp.opcode[1] + 1, + siz = (unsigned int)mp.opcode[2], + ptrs = (unsigned int)mp.opcode[4] + 1; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(1,4); + l_opcode.swap(mp.opcode); + ulongT &target = mp.opcode[1], &argument = mp.opcode[2]; + while (siz-->0) { target = ptrd++; argument = ptrs++; (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); + } + + static double mp_self_mul(_cimg_math_parser& mp) { + return _mp_arg(1)*=_mp_arg(2); + } + + static double mp_self_div(_cimg_math_parser& mp) { + return _mp_arg(1)/=_mp_arg(2); + } + + static double mp_self_modulo(_cimg_math_parser& mp) { + double &val = _mp_arg(1); + return val = cimg::mod(val,_mp_arg(2)); + } + + static double mp_self_pow(_cimg_math_parser& mp) { + double &val = _mp_arg(1); + return val = std::pow(val,_mp_arg(2)); + } + + static double mp_self_sub(_cimg_math_parser& mp) { + return _mp_arg(1)-=_mp_arg(2); + } + + static double mp_set_ioff(_cimg_math_parser& mp) { + CImg &img = mp.imgout; + const longT + off = (longT)_mp_arg(2), + whds = (longT)img.size(); + const double val = _mp_arg(1); + if (off>=0 && off &img = mp.imgout; + const int + x = (int)_mp_arg(2), y = (int)_mp_arg(3), + z = (int)_mp_arg(4), c = (int)_mp_arg(5); + const double val = _mp_arg(1); + if (x>=0 && x=0 && y=0 && z=0 && c &img = mp.imgout; + const int + ox = (int)mp.mem[_cimg_mp_slot_x], oy = (int)mp.mem[_cimg_mp_slot_y], + oz = (int)mp.mem[_cimg_mp_slot_z], oc = (int)mp.mem[_cimg_mp_slot_c]; + const longT + off = img.offset(ox,oy,oz,oc) + (longT)_mp_arg(2), + whds = (longT)img.size(); + const double val = _mp_arg(1); + if (off>=0 && off &img = mp.imgout; + const double + ox = mp.mem[_cimg_mp_slot_x], oy = mp.mem[_cimg_mp_slot_y], + oz = mp.mem[_cimg_mp_slot_z], oc = mp.mem[_cimg_mp_slot_c]; + const int + x = (int)(ox + _mp_arg(2)), y = (int)(oy + _mp_arg(3)), + z = (int)(oz + _mp_arg(4)), c = (int)(oc + _mp_arg(5)); + const double val = _mp_arg(1); + if (x>=0 && x=0 && y=0 && z=0 && c &img = mp.imgout; + const longT + off = (longT)_mp_arg(2), + whd = (longT)img.width()*img.height()*img.depth(); + const T val = (T)_mp_arg(1); + if (off>=0 && off &img = mp.imgout; + const longT + off = (longT)_mp_arg(2), + whd = (longT)img.width()*img.height()*img.depth(); + const double *ptrs = &_mp_arg(1) + 1; + if (off>=0 && off::nan(); + } + + static double mp_set_Ixyz_s(_cimg_math_parser& mp) { + CImg &img = mp.imgout; + const int + x = (int)_mp_arg(2), + y = (int)_mp_arg(3), + z = (int)_mp_arg(4); + const T val = (T)_mp_arg(1); + if (x>=0 && x=0 && y=0 && z &img = mp.imgout; + const int + x = (int)_mp_arg(2), + y = (int)_mp_arg(3), + z = (int)_mp_arg(4); + const double *ptrs = &_mp_arg(1) + 1; + if (x>=0 && x=0 && y=0 && z::nan(); + } + + static double mp_set_Joff_s(_cimg_math_parser& mp) { + CImg &img = mp.imgout; + const int + ox = (int)mp.mem[_cimg_mp_slot_x], oy = (int)mp.mem[_cimg_mp_slot_y], + oz = (int)mp.mem[_cimg_mp_slot_z], oc = (int)mp.mem[_cimg_mp_slot_c]; + const longT + off = img.offset(ox,oy,oz,oc) + (longT)_mp_arg(2), + whd = (longT)img.width()*img.height()*img.depth(); + const T val = (T)_mp_arg(1); + if (off>=0 && off &img = mp.imgout; + const int + ox = (int)mp.mem[_cimg_mp_slot_x], oy = (int)mp.mem[_cimg_mp_slot_y], + oz = (int)mp.mem[_cimg_mp_slot_z], oc = (int)mp.mem[_cimg_mp_slot_c]; + const longT + off = img.offset(ox,oy,oz,oc) + (longT)_mp_arg(2), + whd = (longT)img.width()*img.height()*img.depth(); + const double *ptrs = &_mp_arg(1) + 1; + if (off>=0 && off::nan(); + } + + static double mp_set_Jxyz_s(_cimg_math_parser& mp) { + CImg &img = mp.imgout; + const double ox = mp.mem[_cimg_mp_slot_x], oy = mp.mem[_cimg_mp_slot_y], oz = mp.mem[_cimg_mp_slot_z]; + const int + x = (int)(ox + _mp_arg(2)), + y = (int)(oy + _mp_arg(3)), + z = (int)(oz + _mp_arg(4)); + const T val = (T)_mp_arg(1); + if (x>=0 && x=0 && y=0 && z &img = mp.imgout; + const double ox = mp.mem[_cimg_mp_slot_x], oy = mp.mem[_cimg_mp_slot_y], oz = mp.mem[_cimg_mp_slot_z]; + const int + x = (int)(ox + _mp_arg(2)), + y = (int)(oy + _mp_arg(3)), + z = (int)(oz + _mp_arg(4)); + const double *ptrs = &_mp_arg(1) + 1; + if (x>=0 && x=0 && y=0 && z::nan(); + } + + static double mp_shift(_cimg_math_parser& mp) { + double *const ptrd = &_mp_arg(1) + 1; + const double *const ptrs = &_mp_arg(2) + 1; + const unsigned int siz = (unsigned int)mp.opcode[3]; + const int + shift = (int)_mp_arg(4), + boundary_conditions = (int)_mp_arg(5); + CImg(ptrd,siz,1,1,1,true) = CImg(ptrs,siz,1,1,1,true).shift(shift,0,0,0,boundary_conditions); + return cimg::type::nan(); + } + + static double mp_sign(_cimg_math_parser& mp) { + return cimg::sign(_mp_arg(2)); + } + + static double mp_sin(_cimg_math_parser& mp) { + return std::sin(_mp_arg(2)); + } + + static double mp_sinc(_cimg_math_parser& mp) { + return cimg::sinc(_mp_arg(2)); + } + + static double mp_sinh(_cimg_math_parser& mp) { + return std::sinh(_mp_arg(2)); + } + + static double mp_solve(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double + *ptr1 = &_mp_arg(2) + 1, + *ptr2 = &_mp_arg(3) + 1; + const unsigned int + k = (unsigned int)mp.opcode[4], + l = (unsigned int)mp.opcode[5], + m = (unsigned int)mp.opcode[6]; + CImg(ptrd,m,k,1,1,true) = CImg(ptr2,m,l,1,1,true).get_solve(CImg(ptr1,k,l,1,1,true)); + return cimg::type::nan(); + } + + static double mp_sort(_cimg_math_parser& mp) { + double *const ptrd = &_mp_arg(1) + 1; + const double *const ptrs = &_mp_arg(2) + 1; + const unsigned int + siz = (unsigned int)mp.opcode[3], + chunk_siz = (unsigned int)mp.opcode[5]; + const bool is_increasing = (bool)_mp_arg(4); + CImg(ptrd,chunk_siz,siz/chunk_siz,1,1,true) = CImg(ptrs,chunk_siz,siz/chunk_siz,1,1,true). + get_sort(is_increasing,chunk_siz>1?'y':0); + return cimg::type::nan(); + } + + static double mp_sqr(_cimg_math_parser& mp) { + return cimg::sqr(_mp_arg(2)); + } + + static double mp_sqrt(_cimg_math_parser& mp) { + return std::sqrt(_mp_arg(2)); + } + + static double mp_srand(_cimg_math_parser& mp) { + return cimg::srand((unsigned int)_mp_arg(2)); + } + + static double mp_srand0(_cimg_math_parser& mp) { + cimg::unused(mp); + return cimg::srand(); + } + + static double mp_std(_cimg_math_parser& mp) { + const unsigned int i_end = (unsigned int)mp.opcode[2]; + CImg vals(i_end - 3); + double *p = vals.data(); + for (unsigned int i = 3; i0) mp.mem[ptrd++] = (double)*(ptrs++); + return cimg::type::nan(); + } + + static double mp_stov(_cimg_math_parser& mp) { + const double *ptrs = &_mp_arg(2); + const ulongT siz = (ulongT)mp.opcode[3]; + longT ind = (longT)_mp_arg(4); + const bool is_strict = (bool)_mp_arg(5); + double val = cimg::type::nan(); + if (ind<0 || ind>=(longT)siz) return val; + if (!siz) return *ptrs>='0' && *ptrs<='9'?*ptrs - '0':val; + + CImg ss(siz + 1 - ind); + char sep; + ptrs+=1 + ind; cimg_forX(ss,i) ss[i] = (char)*(ptrs++); ss.back() = 0; + + int err = std::sscanf(ss,"%lf%c",&val,&sep); +#if cimg_OS==2 + // Check for +/-NaN and +/-inf as Microsoft's sscanf() version is not able + // to read those particular values. + if (!err && (*ss=='+' || *ss=='-' || *ss=='i' || *ss=='I' || *ss=='n' || *ss=='N')) { + bool is_positive = true; + const char *s = ss; + if (*s=='+') ++s; else if (*s=='-') { ++s; is_positive = false; } + if (!cimg::strcasecmp(s,"inf")) { val = cimg::type::inf(); err = 1; } + else if (!cimg::strcasecmp(s,"nan")) { val = cimg::type::nan(); err = 1; } + if (err==1 && !is_positive) val = -val; + } +#endif + if (is_strict && err!=1) return cimg::type::nan(); + return val; + } + + static double mp_sub(_cimg_math_parser& mp) { + return _mp_arg(2) - _mp_arg(3); + } + + static double mp_sum(_cimg_math_parser& mp) { + const unsigned int i_end = (unsigned int)mp.opcode[2]; + double val = _mp_arg(3); + for (unsigned int i = 4; i(ptrs,k,k,1,1,true).trace(); + } + + static double mp_transp(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double *ptrs = &_mp_arg(2) + 1; + const unsigned int + k = (unsigned int)mp.opcode[3], + l = (unsigned int)mp.opcode[4]; + CImg(ptrd,l,k,1,1,true) = CImg(ptrs,k,l,1,1,true).get_transpose(); + return cimg::type::nan(); + } + + static double mp_u(_cimg_math_parser& mp) { + return cimg::rand(_mp_arg(2),_mp_arg(3)); + } + + static double mp_uppercase(_cimg_math_parser& mp) { + return cimg::uppercase(_mp_arg(2)); + } + + static double mp_var(_cimg_math_parser& mp) { + const unsigned int i_end = (unsigned int)mp.opcode[2]; + CImg vals(i_end - 3); + double *p = vals.data(); + for (unsigned int i = 3; i::nan(); + } + + static double mp_vector_crop(_cimg_math_parser& mp) { + double *const ptrd = &_mp_arg(1) + 1; + const double *const ptrs = &_mp_arg(2) + 1; + const longT + length = (longT)mp.opcode[3], + start = (longT)_mp_arg(4), + sublength = (longT)mp.opcode[5]; + if (start<0 || start + sublength>length) + throw CImgArgumentException("[" cimg_appname "_math_parser] CImg<%s>: Value accessor '[]': " + "Out-of-bounds sub-vector request " + "(length: %ld, start: %ld, sub-length: %ld).", + mp.imgin.pixel_type(),length,start,sublength); + std::memcpy(ptrd,ptrs + start,sublength*sizeof(double)); + return cimg::type::nan(); + } + + static double mp_vector_init(_cimg_math_parser& mp) { + unsigned int + ptrs = 4U, + ptrd = (unsigned int)mp.opcode[1] + 1, + siz = (unsigned int)mp.opcode[3]; + switch (mp.opcode[2] - 4) { + case 0 : std::memset(mp.mem._data + ptrd,0,siz*sizeof(double)); break; // 0 values given + case 1 : { const double val = _mp_arg(ptrs); while (siz-->0) mp.mem[ptrd++] = val; } break; + default : while (siz-->0) { mp.mem[ptrd++] = _mp_arg(ptrs++); if (ptrs>=mp.opcode[2]) ptrs = 4U; } + } + return cimg::type::nan(); + } + + static double mp_vector_eq(_cimg_math_parser& mp) { + const double + *ptr1 = &_mp_arg(2) + 1, + *ptr2 = &_mp_arg(4) + 1; + unsigned int p1 = (unsigned int)mp.opcode[3], p2 = (unsigned int)mp.opcode[5], n; + const int N = (int)_mp_arg(6); + const bool case_sensitive = (bool)_mp_arg(7); + bool still_equal = true; + double value; + if (!N) return true; + + // Compare all values. + if (N<0) { + if (p1>0 && p2>0) { // Vector == vector + if (p1!=p2) return false; + if (case_sensitive) + while (still_equal && p1--) still_equal = *(ptr1++)==*(ptr2++); + else + while (still_equal && p1--) + still_equal = cimg::lowercase(*(ptr1++))==cimg::lowercase(*(ptr2++)); + return still_equal; + } else if (p1>0 && !p2) { // Vector == scalar + value = _mp_arg(4); + if (!case_sensitive) value = cimg::lowercase(value); + while (still_equal && p1--) still_equal = *(ptr1++)==value; + return still_equal; + } else if (!p1 && p2>0) { // Scalar == vector + value = _mp_arg(2); + if (!case_sensitive) value = cimg::lowercase(value); + while (still_equal && p2--) still_equal = *(ptr2++)==value; + return still_equal; + } else { // Scalar == scalar + if (case_sensitive) return _mp_arg(2)==_mp_arg(4); + else return cimg::lowercase(_mp_arg(2))==cimg::lowercase(_mp_arg(4)); + } + } + + // Compare only first N values. + if (p1>0 && p2>0) { // Vector == vector + n = cimg::min((unsigned int)N,p1,p2); + if (case_sensitive) + while (still_equal && n--) still_equal = *(ptr1++)==(*ptr2++); + else + while (still_equal && n--) still_equal = cimg::lowercase(*(ptr1++))==cimg::lowercase(*(ptr2++)); + return still_equal; + } else if (p1>0 && !p2) { // Vector == scalar + n = std::min((unsigned int)N,p1); + value = _mp_arg(4); + if (!case_sensitive) value = cimg::lowercase(value); + while (still_equal && n--) still_equal = *(ptr1++)==value; + return still_equal; + } else if (!p1 && p2>0) { // Scalar == vector + n = std::min((unsigned int)N,p2); + value = _mp_arg(2); + if (!case_sensitive) value = cimg::lowercase(value); + while (still_equal && n--) still_equal = *(ptr2++)==value; + return still_equal; + } // Scalar == scalar + if (case_sensitive) return _mp_arg(2)==_mp_arg(4); + return cimg::lowercase(_mp_arg(2))==cimg::lowercase(_mp_arg(4)); + } + + static double mp_vector_off(_cimg_math_parser& mp) { + const unsigned int + ptr = (unsigned int)mp.opcode[2] + 1, + siz = (unsigned int)mp.opcode[3]; + const int off = (int)_mp_arg(4); + return off>=0 && off<(int)siz?mp.mem[ptr + off]:cimg::type::nan(); + } + + static double mp_vector_map_sv(_cimg_math_parser& mp) { // Operator(scalar,vector) + unsigned int + siz = (unsigned int)mp.opcode[2], + ptrs = (unsigned int)mp.opcode[5] + 1; + double *ptrd = &_mp_arg(1) + 1; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(4); + l_opcode[2] = mp.opcode[4]; // Scalar argument1 + l_opcode.swap(mp.opcode); + ulongT &argument2 = mp.opcode[3]; + while (siz-->0) { argument2 = ptrs++; *(ptrd++) = (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); + } + + static double mp_vector_map_v(_cimg_math_parser& mp) { // Operator(vector) + unsigned int + siz = (unsigned int)mp.opcode[2], + ptrs = (unsigned int)mp.opcode[4] + 1; + double *ptrd = &_mp_arg(1) + 1; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(1,3); + l_opcode.swap(mp.opcode); + ulongT &argument = mp.opcode[2]; + while (siz-->0) { argument = ptrs++; *(ptrd++) = (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); + } + + static double mp_vector_map_vs(_cimg_math_parser& mp) { // Operator(vector,scalar) + unsigned int + siz = (unsigned int)mp.opcode[2], + ptrs = (unsigned int)mp.opcode[4] + 1; + double *ptrd = &_mp_arg(1) + 1; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(1,4); + l_opcode[3] = mp.opcode[5]; // Scalar argument2 + l_opcode.swap(mp.opcode); + ulongT &argument1 = mp.opcode[2]; + while (siz-->0) { argument1 = ptrs++; *(ptrd++) = (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); + } + + static double mp_vector_map_vss(_cimg_math_parser& mp) { // Operator(vector,scalar,scalar) + unsigned int + siz = (unsigned int)mp.opcode[2], + ptrs = (unsigned int)mp.opcode[4] + 1; + double *ptrd = &_mp_arg(1) + 1; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(1,5); + l_opcode[3] = mp.opcode[5]; // Scalar argument2 + l_opcode[4] = mp.opcode[6]; // Scalar argument3 + l_opcode.swap(mp.opcode); + ulongT &argument1 = mp.opcode[2]; + while (siz-->0) { argument1 = ptrs++; *(ptrd++) = (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); + } + + static double mp_vector_map_vv(_cimg_math_parser& mp) { // Operator(vector,vector) + unsigned int + siz = (unsigned int)mp.opcode[2], + ptrs1 = (unsigned int)mp.opcode[4] + 1, + ptrs2 = (unsigned int)mp.opcode[5] + 1; + double *ptrd = &_mp_arg(1) + 1; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(1,4); + l_opcode.swap(mp.opcode); + ulongT &argument1 = mp.opcode[2], &argument2 = mp.opcode[3]; + while (siz-->0) { argument1 = ptrs1++; argument2 = ptrs2++; *(ptrd++) = (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); + } + + static double mp_vector_neq(_cimg_math_parser& mp) { + return !mp_vector_eq(mp); + } + + static double mp_vector_print(_cimg_math_parser& mp) { + const bool print_string = (bool)mp.opcode[4]; + cimg_pragma_openmp(critical(mp_vector_print)) + { + CImg expr(mp.opcode[2] - 5); + const ulongT *ptrs = mp.opcode._data + 5; + cimg_for(expr,ptrd,char) *ptrd = (char)*(ptrs++); + cimg::strellipsize(expr); + unsigned int + ptr = (unsigned int)mp.opcode[1] + 1, + siz0 = (unsigned int)mp.opcode[3], + siz = siz0; + cimg::mutex(6); + std::fprintf(cimg::output(),"\n[" cimg_appname "_math_parser] %s = [ ",expr._data); + unsigned int count = 0; + while (siz-->0) { + if (count>=64 && siz>=64) { + std::fprintf(cimg::output(),"...,"); + ptr = (unsigned int)mp.opcode[1] + 1 + siz0 - 64; + siz = 64; + } else std::fprintf(cimg::output(),"%g%s",mp.mem[ptr++],siz?",":""); + ++count; + } + if (print_string) { + CImg str(siz0 + 1); + ptr = (unsigned int)mp.opcode[1] + 1; + for (unsigned int k = 0; k::nan(); + } + + static double mp_vector_resize(_cimg_math_parser& mp) { + double *const ptrd = &_mp_arg(1) + 1; + const unsigned int p1 = (unsigned int)mp.opcode[2], p2 = (unsigned int)mp.opcode[4]; + const int + interpolation = (int)_mp_arg(5), + boundary_conditions = (int)_mp_arg(6); + if (p2) { // Resize vector + const double *const ptrs = &_mp_arg(3) + 1; + CImg(ptrd,p1,1,1,1,true) = CImg(ptrs,p2,1,1,1,true). + get_resize(p1,1,1,1,interpolation,boundary_conditions); + } else { // Resize scalar + const double value = _mp_arg(3); + CImg(ptrd,p1,1,1,1,true) = CImg(1,1,1,1,value).resize(p1,1,1,1,interpolation, + boundary_conditions); + } + return cimg::type::nan(); + } + + static double mp_vector_reverse(_cimg_math_parser& mp) { + double *const ptrd = &_mp_arg(1) + 1; + const double *const ptrs = &_mp_arg(2) + 1; + const unsigned int p1 = (unsigned int)mp.opcode[3]; + CImg(ptrd,p1,1,1,1,true) = CImg(ptrs,p1,1,1,1,true).get_mirror('x'); + return cimg::type::nan(); + } + + static double mp_vector_set_off(_cimg_math_parser& mp) { + const unsigned int + ptr = (unsigned int)mp.opcode[2] + 1, + siz = (unsigned int)mp.opcode[3]; + const int off = (int)_mp_arg(4); + if (off>=0 && off<(int)siz) mp.mem[ptr + off] = _mp_arg(5); + return _mp_arg(5); + } + + static double mp_vtos(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + sizd = (unsigned int)mp.opcode[2], + sizs = (unsigned int)mp.opcode[4]; + const int nb_digits = (int)_mp_arg(5); + CImg format(8); + switch (nb_digits) { + case -1 : std::strcpy(format,"%g"); break; + case 0 : std::strcpy(format,"%.17g"); break; + default : cimg_snprintf(format,format._width,"%%.%dg",nb_digits); + } + CImg str; + if (sizs) { // Vector expression + const double *ptrs = &_mp_arg(3) + 1; + CImg(ptrs,sizs,1,1,1,true).value_string(',',sizd + 1,format).move_to(str); + } else { // Scalar expression + str.assign(sizd + 1); + cimg_snprintf(str,sizd + 1,format,_mp_arg(3)); + } + const unsigned int l = std::min(sizd,(unsigned int)std::strlen(str) + 1); + CImg(ptrd,l,1,1,1,true) = str.get_shared_points(0,l - 1); + return cimg::type::nan(); + } + + static double mp_whiledo(_cimg_math_parser& mp) { + const ulongT + mem_body = mp.opcode[1], + mem_cond = mp.opcode[2]; + const CImg + *const p_cond = ++mp.p_code, + *const p_body = p_cond + mp.opcode[3], + *const p_end = p_body + mp.opcode[4]; + const unsigned int vsiz = (unsigned int)mp.opcode[5]; + bool is_cond = false; + if (mp.opcode[6]) { // Set default value for result and condition if necessary + if (vsiz) CImg(&mp.mem[mem_body] + 1,vsiz,1,1,1,true).fill(cimg::type::nan()); + else mp.mem[mem_body] = cimg::type::nan(); + } + if (mp.opcode[7]) mp.mem[mem_cond] = 0; + const unsigned int _break_type = mp.break_type; + mp.break_type = 0; + do { + for (mp.p_code = p_cond; mp.p_code_data; + const ulongT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + if (mp.break_type==1) break; + is_cond = (bool)mp.mem[mem_cond]; + if (is_cond && !mp.break_type) // Evaluate body + for (mp.p_code = p_body; mp.p_code_data; + const ulongT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + if (mp.break_type==1) break; else if (mp.break_type==2) mp.break_type = 0; + } while (is_cond); + + mp.break_type = _break_type; + mp.p_code = p_end - 1; + return mp.mem[mem_body]; + } + + static double mp_Ioff(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + boundary_conditions = (unsigned int)_mp_arg(3), + vsiz = (unsigned int)mp.opcode[4]; + const CImg &img = mp.imgin; + const longT + off = (longT)_mp_arg(2), + whd = (longT)img.width()*img.height()*img.depth(); + const T *ptrs; + if (off>=0 && off::nan(); + } + if (img._data) switch (boundary_conditions) { + case 3 : { // Mirror + const longT whd2 = 2*whd, moff = cimg::mod(off,whd2); + ptrs = &img[moff::nan(); + } + case 2 : // Periodic + ptrs = &img[cimg::mod(off,whd)]; + cimg_for_inC(img,0,vsiz - 1,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return cimg::type::nan(); + case 1 : // Neumann + ptrs = off<0?&img[0]:&img[whd - 1]; + cimg_for_inC(img,0,vsiz - 1,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return cimg::type::nan(); + default : // Dirichlet + std::memset(ptrd,0,vsiz*sizeof(double)); + return cimg::type::nan(); + } + std::memset(ptrd,0,vsiz*sizeof(double)); + return cimg::type::nan(); + } + + static double mp_Ixyz(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + interpolation = (unsigned int)_mp_arg(5), + boundary_conditions = (unsigned int)_mp_arg(6), + vsiz = (unsigned int)mp.opcode[7]; + const CImg &img = mp.imgin; + const double x = _mp_arg(2), y = _mp_arg(3), z = _mp_arg(4); + const ulongT whd = (ulongT)img._width*img._height*img._depth; + const T *ptrs; + if (interpolation==0) switch (boundary_conditions) { // Nearest neighbor interpolation + case 3 : { // Mirror + const int + w2 = 2*img.width(), h2 = 2*img.height(), d2 = 2*img.depth(), + mx = cimg::mod((int)x,w2), my = cimg::mod((int)y,h2), mz = cimg::mod((int)z,d2), + cx = mx::nan(); + } + + static double mp_Joff(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + boundary_conditions = (unsigned int)_mp_arg(3), + vsiz = (unsigned int)mp.opcode[4]; + const CImg &img = mp.imgin; + const int + ox = (int)mp.mem[_cimg_mp_slot_x], + oy = (int)mp.mem[_cimg_mp_slot_y], + oz = (int)mp.mem[_cimg_mp_slot_z]; + const longT + off = img.offset(ox,oy,oz) + (longT)_mp_arg(2), + whd = (longT)img.width()*img.height()*img.depth(); + const T *ptrs; + if (off>=0 && off::nan(); + } + if (img._data) switch (boundary_conditions) { + case 3 : { // Mirror + const longT whd2 = 2*whd, moff = cimg::mod(off,whd2); + ptrs = &img[moff::nan(); + } + case 2 : // Periodic + ptrs = &img[cimg::mod(off,whd)]; + cimg_for_inC(img,0,vsiz - 1,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return cimg::type::nan(); + case 1 : // Neumann + ptrs = off<0?&img[0]:&img[whd - 1]; + cimg_for_inC(img,0,vsiz - 1,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return cimg::type::nan(); + default : // Dirichlet + std::memset(ptrd,0,vsiz*sizeof(double)); + return cimg::type::nan(); + } + std::memset(ptrd,0,vsiz*sizeof(double)); + return cimg::type::nan(); + } + + static double mp_Jxyz(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + interpolation = (unsigned int)_mp_arg(5), + boundary_conditions = (unsigned int)_mp_arg(6), + vsiz = (unsigned int)mp.opcode[7]; + const CImg &img = mp.imgin; + const double + ox = mp.mem[_cimg_mp_slot_x], oy = mp.mem[_cimg_mp_slot_y], oz = mp.mem[_cimg_mp_slot_z], + x = ox + _mp_arg(2), y = oy + _mp_arg(3), z = oz + _mp_arg(4); + const ulongT whd = (ulongT)img._width*img._height*img._depth; + const T *ptrs; + if (interpolation==0) switch (boundary_conditions) { // Nearest neighbor interpolation + case 3 : { // Mirror + const int + w2 = 2*img.width(), h2 = 2*img.height(), d2 = 2*img.depth(), + mx = cimg::mod((int)x,w2), my = cimg::mod((int)y,h2), mz = cimg::mod((int)z,d2), + cx = mx::nan(); + } + +#undef _mp_arg + + }; // struct _cimg_math_parser {} + +#define _cimg_create_pointwise_functions(name,func,openmp_size) \ + CImg& name() { \ + if (is_empty()) return *this; \ + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=openmp_size)) \ + cimg_rof(*this,ptrd,T) *ptrd = (T)func((double)*ptrd); \ + return *this; \ + } \ + CImg get_##name() const { \ + return CImg(*this,false).name(); \ + } + + //! Compute the square value of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its square value \f$I_{(x,y,z,c)}^2\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + \par Example + \code + const CImg img("reference.jpg"); + (img,img.get_sqr().normalize(0,255)).display(); + \endcode + \image html ref_sqr.jpg + **/ + _cimg_create_pointwise_functions(sqr,cimg::sqr,524288) + + //! Compute the square root of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its square root \f$\sqrt{I_{(x,y,z,c)}}\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + \par Example + \code + const CImg img("reference.jpg"); + (img,img.get_sqrt().normalize(0,255)).display(); + \endcode + \image html ref_sqrt.jpg + **/ + _cimg_create_pointwise_functions(sqrt,std::sqrt,8192) + + //! Compute the exponential of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its exponential \f$e^{I_{(x,y,z,c)}}\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(exp,std::exp,4096) + + //! Compute the logarithm of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its logarithm + \f$\mathrm{log}_{e}(I_{(x,y,z,c)})\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(log,std::log,262144) + + //! Compute the base-2 logarithm of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its base-2 logarithm + \f$\mathrm{log}_{2}(I_{(x,y,z,c)})\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(log2,cimg::log2,4096) + + //! Compute the base-10 logarithm of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its base-10 logarithm + \f$\mathrm{log}_{10}(I_{(x,y,z,c)})\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(log10,std::log10,4096) + + //! Compute the absolute value of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its absolute value \f$|I_{(x,y,z,c)}|\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(abs,cimg::abs,524288) + + //! Compute the sign of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its sign + \f$\mathrm{sign}(I_{(x,y,z,c)})\f$. + \note + - The sign is set to: + - \c 1 if pixel value is strictly positive. + - \c -1 if pixel value is strictly negative. + - \c 0 if pixel value is equal to \c 0. + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(sign,cimg::sign,32768) + + //! Compute the cosine of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its cosine \f$\cos(I_{(x,y,z,c)})\f$. + \note + - Pixel values are regarded as being in \e radian. + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(cos,std::cos,8192) + + //! Compute the sine of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its sine \f$\sin(I_{(x,y,z,c)})\f$. + \note + - Pixel values are regarded as being in \e radian. + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(sin,std::sin,8192) + + //! Compute the sinc of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its sinc + \f$\mathrm{sinc}(I_{(x,y,z,c)})\f$. + \note + - Pixel values are regarded as being exin \e radian. + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(sinc,cimg::sinc,2048) + + //! Compute the tangent of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its tangent \f$\tan(I_{(x,y,z,c)})\f$. + \note + - Pixel values are regarded as being exin \e radian. + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(tan,std::tan,2048) + + //! Compute the hyperbolic cosine of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its hyperbolic cosine + \f$\mathrm{cosh}(I_{(x,y,z,c)})\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(cosh,std::cosh,2048) + + //! Compute the hyperbolic sine of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its hyperbolic sine + \f$\mathrm{sinh}(I_{(x,y,z,c)})\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(sinh,std::sinh,2048) + + //! Compute the hyperbolic tangent of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its hyperbolic tangent + \f$\mathrm{tanh}(I_{(x,y,z,c)})\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(tanh,std::tanh,2048) + + //! Compute the arccosine of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its arccosine + \f$\mathrm{acos}(I_{(x,y,z,c)})\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(acos,std::acos,8192) + + //! Compute the arcsine of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its arcsine + \f$\mathrm{asin}(I_{(x,y,z,c)})\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(asin,std::asin,8192) + + //! Compute the arctangent of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its arctangent + \f$\mathrm{atan}(I_{(x,y,z,c)})\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(atan,std::atan,8192) + + //! Compute the arctangent2 of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its arctangent2 + \f$\mathrm{atan2}(I_{(x,y,z,c)})\f$. + \param img Image whose pixel values specify the second argument of the \c atan2() function. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + \par Example + \code + const CImg + img_x(100,100,1,1,"x-w/2",false), // Define an horizontal centered gradient, from '-width/2' to 'width/2'. + img_y(100,100,1,1,"y-h/2",false), // Define a vertical centered gradient, from '-height/2' to 'height/2'. + img_atan2 = img_y.get_atan2(img_x); // Compute atan2(y,x) for each pixel value. + (img_x,img_y,img_atan2).display(); + \endcode + **/ + template + CImg& atan2(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return atan2(+img); + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs + CImg get_atan2(const CImg& img) const { + return CImg(*this,false).atan2(img); + } + + //! Compute the hyperbolic arccosine of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its arccosineh + \f$\mathrm{acosh}(I_{(x,y,z,c)})\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(acosh,cimg::acosh,8192) + + //! Compute the hyperbolic arcsine of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its hyperbolic arcsine + \f$\mathrm{asinh}(I_{(x,y,z,c)})\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(asinh,cimg::asinh,8192) + + //! Compute the hyperbolic arctangent of each pixel value. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its hyperbolic arctangent + \f$\mathrm{atanh}(I_{(x,y,z,c)})\f$. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + **/ + _cimg_create_pointwise_functions(atanh,cimg::atanh,8192) + + //! In-place pointwise multiplication. + /** + Compute the pointwise multiplication between the image instance and the specified input image \c img. + \param img Input image, as the second operand of the multiplication. + \note + - Similar to operator+=(const CImg&), except that it performs a pointwise multiplication + instead of an addition. + - It does \e not perform a \e matrix multiplication. For this purpose, use operator*=(const CImg&) instead. + \par Example + \code + CImg + img("reference.jpg"), + shade(img.width,img.height(),1,1,"-(x-w/2)^2-(y-h/2)^2",false); + shade.normalize(0,1); + (img,shade,img.get_mul(shade)).display(); + \endcode + **/ + template + CImg& mul(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return mul(+img); + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs + CImg<_cimg_Tt> get_mul(const CImg& img) const { + return CImg<_cimg_Tt>(*this,false).mul(img); + } + + //! In-place pointwise division. + /** + Similar to mul(const CImg&), except that it performs a pointwise division instead of a multiplication. + **/ + template + CImg& div(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return div(+img); + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs + CImg<_cimg_Tt> get_div(const CImg& img) const { + return CImg<_cimg_Tt>(*this,false).div(img); + } + + //! Raise each pixel value to a specified power. + /** + Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by its power \f$I_{(x,y,z,c)}^p\f$. + \param p Exponent value. + \note + - The \inplace of this method statically casts the computed values to the pixel type \c T. + - The \newinstance returns a \c CImg image, if the pixel type \c T is \e not float-valued. + \par Example + \code + const CImg + img0("reference.jpg"), // Load reference color image. + img1 = (img0/255).pow(1.8)*=255, // Compute gamma correction, with gamma = 1.8. + img2 = (img0/255).pow(0.5)*=255; // Compute gamma correction, with gamma = 0.5. + (img0,img1,img2).display(); + \endcode + **/ + CImg& pow(const double p) { + if (is_empty()) return *this; + if (p==-4) { + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val*val*val)); } + return *this; + } + if (p==-3) { + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val*val)); } + return *this; + } + if (p==-2) { + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val)); } + return *this; + } + if (p==-1) { + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1.0/val); } + return *this; + } + if (p==-0.5) { + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=8192)) + cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1/std::sqrt((double)val)); } + return *this; + } + if (p==0) return fill((T)1); + if (p==0.25) return sqrt().sqrt(); + if (p==0.5) return sqrt(); + if (p==1) return *this; + if (p==2) return sqr(); + if (p==3) { + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=262144)) + cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = val*val*val; } + return *this; + } + if (p==4) { + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=131072)) + cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = val*val*val*val; } + return *this; + } + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=1024)) + cimg_rof(*this,ptrd,T) *ptrd = (T)std::pow((double)*ptrd,p); + return *this; + } + + //! Raise each pixel value to a specified power \newinstance. + CImg get_pow(const double p) const { + return CImg(*this,false).pow(p); + } + + //! Raise each pixel value to a power, specified from an expression. + /** + Similar to operator+=(const char*), except it performs a pointwise exponentiation instead of an addition. + **/ + CImg& pow(const char *const expression) { + return pow((+*this)._fill(expression,true,true,0,0,"pow",this)); + } + + //! Raise each pixel value to a power, specified from an expression \newinstance. + CImg get_pow(const char *const expression) const { + return CImg(*this,false).pow(expression); + } + + //! Raise each pixel value to a power, pointwisely specified from another image. + /** + Similar to operator+=(const CImg& img), except that it performs an exponentiation instead of an addition. + **/ + template + CImg& pow(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return pow(+img); + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs + CImg get_pow(const CImg& img) const { + return CImg(*this,false).pow(img); + } + + //! Compute the bitwise left rotation of each pixel value. + /** + Similar to operator<<=(unsigned int), except that it performs a left rotation instead of a left shift. + **/ + CImg& rol(const unsigned int n=1) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) *ptrd = (T)cimg::rol(*ptrd,n); + return *this; + } + + //! Compute the bitwise left rotation of each pixel value \newinstance. + CImg get_rol(const unsigned int n=1) const { + return (+*this).rol(n); + } + + //! Compute the bitwise left rotation of each pixel value. + /** + Similar to operator<<=(const char*), except that it performs a left rotation instead of a left shift. + **/ + CImg& rol(const char *const expression) { + return rol((+*this)._fill(expression,true,true,0,0,"rol",this)); + } + + //! Compute the bitwise left rotation of each pixel value \newinstance. + CImg get_rol(const char *const expression) const { + return (+*this).rol(expression); + } + + //! Compute the bitwise left rotation of each pixel value. + /** + Similar to operator<<=(const CImg&), except that it performs a left rotation instead of a left shift. + **/ + template + CImg& rol(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return rol(+img); + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs + CImg get_rol(const CImg& img) const { + return (+*this).rol(img); + } + + //! Compute the bitwise right rotation of each pixel value. + /** + Similar to operator>>=(unsigned int), except that it performs a right rotation instead of a right shift. + **/ + CImg& ror(const unsigned int n=1) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) *ptrd = (T)cimg::ror(*ptrd,n); + return *this; + } + + //! Compute the bitwise right rotation of each pixel value \newinstance. + CImg get_ror(const unsigned int n=1) const { + return (+*this).ror(n); + } + + //! Compute the bitwise right rotation of each pixel value. + /** + Similar to operator>>=(const char*), except that it performs a right rotation instead of a right shift. + **/ + CImg& ror(const char *const expression) { + return ror((+*this)._fill(expression,true,true,0,0,"ror",this)); + } + + //! Compute the bitwise right rotation of each pixel value \newinstance. + CImg get_ror(const char *const expression) const { + return (+*this).ror(expression); + } + + //! Compute the bitwise right rotation of each pixel value. + /** + Similar to operator>>=(const CImg&), except that it performs a right rotation instead of a right shift. + **/ + template + CImg& ror(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return ror(+img); + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs + CImg get_ror(const CImg& img) const { + return (+*this).ror(img); + } + + //! Pointwise min operator between instance image and a value. + /** + \param val Value used as the reference argument of the min operator. + \note Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by + \f$\mathrm{min}(I_{(x,y,z,c)},\mathrm{val})\f$. + **/ + CImg& min(const T& val) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=65536)) + cimg_rof(*this,ptrd,T) *ptrd = std::min(*ptrd,val); + return *this; + } + + //! Pointwise min operator between instance image and a value \newinstance. + CImg get_min(const T& val) const { + return (+*this).min(val); + } + + //! Pointwise min operator between two images. + /** + \param img Image used as the reference argument of the min operator. + \note Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by + \f$\mathrm{min}(I_{(x,y,z,c)},\mathrm{img}_{(x,y,z,c)})\f$. + **/ + template + CImg& min(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return min(+img); + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs + CImg<_cimg_Tt> get_min(const CImg& img) const { + return CImg<_cimg_Tt>(*this,false).min(img); + } + + //! Pointwise min operator between an image and an expression. + /** + \param expression Math formula as a C-string. + \note Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by + \f$\mathrm{min}(I_{(x,y,z,c)},\mathrm{expr}_{(x,y,z,c)})\f$. + **/ + CImg& min(const char *const expression) { + return min((+*this)._fill(expression,true,true,0,0,"min",this)); + } + + //! Pointwise min operator between an image and an expression \newinstance. + CImg get_min(const char *const expression) const { + return CImg(*this,false).min(expression); + } + + //! Pointwise max operator between instance image and a value. + /** + \param val Value used as the reference argument of the max operator. + \note Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by + \f$\mathrm{max}(I_{(x,y,z,c)},\mathrm{val})\f$. + **/ + CImg& max(const T& val) { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=65536)) + cimg_rof(*this,ptrd,T) *ptrd = std::max(*ptrd,val); + return *this; + } + + //! Pointwise max operator between instance image and a value \newinstance. + CImg get_max(const T& val) const { + return (+*this).max(val); + } + + //! Pointwise max operator between two images. + /** + \param img Image used as the reference argument of the max operator. + \note Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by + \f$\mathrm{max}(I_{(x,y,z,c)},\mathrm{img}_{(x,y,z,c)})\f$. + **/ + template + CImg& max(const CImg& img) { + const ulongT siz = size(), isiz = img.size(); + if (siz && isiz) { + if (is_overlapped(img)) return max(+img); + T *ptrd = _data, *const ptre = _data + siz; + if (siz>isiz) for (ulongT n = siz/isiz; n; --n) + for (const t *ptrs = img._data, *ptrs_end = ptrs + isiz; ptrs + CImg<_cimg_Tt> get_max(const CImg& img) const { + return CImg<_cimg_Tt>(*this,false).max(img); + } + + //! Pointwise max operator between an image and an expression. + /** + \param expression Math formula as a C-string. + \note Replace each pixel value \f$I_{(x,y,z,c)}\f$ of the image instance by + \f$\mathrm{max}(I_{(x,y,z,c)},\mathrm{expr}_{(x,y,z,c)})\f$. + **/ + CImg& max(const char *const expression) { + return max((+*this)._fill(expression,true,true,0,0,"max",this)); + } + + //! Pointwise max operator between an image and an expression \newinstance. + CImg get_max(const char *const expression) const { + return CImg(*this,false).max(expression); + } + + //! Return a reference to the minimum pixel value. + /** + **/ + T& min() { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "min(): Empty instance.", + cimg_instance); + T *ptr_min = _data; + T min_value = *ptr_min; + cimg_for(*this,ptrs,T) if (*ptrsmax_value) max_value = *(ptr_max=ptrs); + return *ptr_max; + } + + //! Return a reference to the maximum pixel value \const. + const T& max() const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "max(): Empty instance.", + cimg_instance); + const T *ptr_max = _data; + T max_value = *ptr_max; + cimg_for(*this,ptrs,T) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); + return *ptr_max; + } + + //! Return a reference to the minimum pixel value as well as the maximum pixel value. + /** + \param[out] max_val Maximum pixel value. + **/ + template + T& min_max(t& max_val) { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "min_max(): Empty instance.", + cimg_instance); + T *ptr_min = _data; + T min_value = *ptr_min, max_value = min_value; + cimg_for(*this,ptrs,T) { + const T val = *ptrs; + if (valmax_value) max_value = val; + } + max_val = (t)max_value; + return *ptr_min; + } + + //! Return a reference to the minimum pixel value as well as the maximum pixel value \const. + template + const T& min_max(t& max_val) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "min_max(): Empty instance.", + cimg_instance); + const T *ptr_min = _data; + T min_value = *ptr_min, max_value = min_value; + cimg_for(*this,ptrs,T) { + const T val = *ptrs; + if (valmax_value) max_value = val; + } + max_val = (t)max_value; + return *ptr_min; + } + + //! Return a reference to the maximum pixel value as well as the minimum pixel value. + /** + \param[out] min_val Minimum pixel value. + **/ + template + T& max_min(t& min_val) { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "max_min(): Empty instance.", + cimg_instance); + T *ptr_max = _data; + T max_value = *ptr_max, min_value = max_value; + cimg_for(*this,ptrs,T) { + const T val = *ptrs; + if (val>max_value) { max_value = val; ptr_max = ptrs; } + if (val + const T& max_min(t& min_val) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "max_min(): Empty instance.", + cimg_instance); + const T *ptr_max = _data; + T max_value = *ptr_max, min_value = max_value; + cimg_for(*this,ptrs,T) { + const T val = *ptrs; + if (val>max_value) { max_value = val; ptr_max = ptrs; } + if (val arr(*this,false); + ulongT l = 0, ir = size() - 1; + for ( ; ; ) { + if (ir<=l + 1) { + if (ir==l + 1 && arr[ir]>1; + cimg::swap(arr[mid],arr[l + 1]); + if (arr[l]>arr[ir]) cimg::swap(arr[l],arr[ir]); + if (arr[l + 1]>arr[ir]) cimg::swap(arr[l + 1],arr[ir]); + if (arr[l]>arr[l + 1]) cimg::swap(arr[l],arr[l + 1]); + ulongT i = l + 1, j = ir; + const T pivot = arr[l + 1]; + for ( ; ; ) { + do ++i; while (arr[i]pivot); + if (j=k) ir = j - 1; + if (j<=k) l = i; + } + } + } + + //! Return the median pixel value. + /** + **/ + T median() const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "median(): Empty instance.", + cimg_instance); + const ulongT s = size(); + switch (s) { + case 1 : return _data[0]; + case 2 : return cimg::median(_data[0],_data[1]); + case 3 : return cimg::median(_data[0],_data[1],_data[2]); + case 5 : return cimg::median(_data[0],_data[1],_data[2],_data[3],_data[4]); + case 7 : return cimg::median(_data[0],_data[1],_data[2],_data[3],_data[4],_data[5],_data[6]); + case 9 : return cimg::median(_data[0],_data[1],_data[2],_data[3],_data[4],_data[5],_data[6],_data[7],_data[8]); + case 13 : return cimg::median(_data[0],_data[1],_data[2],_data[3],_data[4],_data[5],_data[6],_data[7],_data[8], + _data[9],_data[10],_data[11],_data[12]); + } + const T res = kth_smallest(s>>1); + return (s%2)?res:(T)((res + kth_smallest((s>>1) - 1))/2); + } + + //! Return the product of all the pixel values. + /** + **/ + double product() const { + if (is_empty()) return 0; + double res = 1; + cimg_for(*this,ptrs,T) res*=(double)*ptrs; + return res; + } + + //! Return the sum of all the pixel values. + /** + **/ + double sum() const { + double res = 0; + cimg_for(*this,ptrs,T) res+=(double)*ptrs; + return res; + } + + //! Return the average pixel value. + /** + **/ + double mean() const { + double res = 0; + cimg_for(*this,ptrs,T) res+=(double)*ptrs; + return res/size(); + } + + //! Return the variance of the pixel values. + /** + \param variance_method Method used to estimate the variance. Can be: + - \c 0: Second moment, computed as + \f$1/N \sum\limits_{k=1}^{N} (x_k - \bar x)^2 = + 1/N \left( \sum\limits_{k=1}^N x_k^2 - \left( \sum\limits_{k=1}^N x_k \right)^2 / N \right)\f$ + with \f$ \bar x = 1/N \sum\limits_{k=1}^N x_k \f$. + - \c 1: Best unbiased estimator, computed as \f$\frac{1}{N - 1} \sum\limits_{k=1}^{N} (x_k - \bar x)^2 \f$. + - \c 2: Least median of squares. + - \c 3: Least trimmed of squares. + **/ + double variance(const unsigned int variance_method=1) const { + double foo; + return variance_mean(variance_method,foo); + } + + //! Return the variance as well as the average of the pixel values. + /** + \param variance_method Method used to estimate the variance (see variance(const unsigned int) const). + \param[out] mean Average pixel value. + **/ + template + double variance_mean(const unsigned int variance_method, t& mean) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "variance_mean(): Empty instance.", + cimg_instance); + + double variance = 0, average = 0; + const ulongT siz = size(); + switch (variance_method) { + case 0 : { // Least mean square (standard definition) + double S = 0, S2 = 0; + cimg_for(*this,ptrs,T) { const double val = (double)*ptrs; S+=val; S2+=val*val; } + variance = (S2 - S*S/siz)/siz; + average = S; + } break; + case 1 : { // Least mean square (robust definition) + double S = 0, S2 = 0; + cimg_for(*this,ptrs,T) { const double val = (double)*ptrs; S+=val; S2+=val*val; } + variance = siz>1?(S2 - S*S/siz)/(siz - 1):0; + average = S; + } break; + case 2 : { // Least Median of Squares (MAD) + CImg buf(*this,false); + buf.sort(); + const ulongT siz2 = siz>>1; + const double med_i = (double)buf[siz2]; + cimg_for(buf,ptrs,Tfloat) { + const double val = (double)*ptrs; *ptrs = (Tfloat)cimg::abs(val - med_i); average+=val; + } + buf.sort(); + const double sig = (double)(1.4828*buf[siz2]); + variance = sig*sig; + } break; + default : { // Least trimmed of Squares + CImg buf(*this,false); + const ulongT siz2 = siz>>1; + cimg_for(buf,ptrs,Tfloat) { + const double val = (double)*ptrs; (*ptrs)=(Tfloat)((*ptrs)*val); average+=val; + } + buf.sort(); + double a = 0; + const Tfloat *ptrs = buf._data; + for (ulongT j = 0; j0?variance:0; + } + + //! Return estimated variance of the noise. + /** + \param variance_method Method used to compute the variance (see variance(const unsigned int) const). + \note Because of structures such as edges in images it is + recommanded to use a robust variance estimation. The variance of the + noise is estimated by computing the variance of the Laplacian \f$(\Delta + I)^2 \f$ scaled by a factor \f$c\f$ insuring \f$ c E[(\Delta I)^2]= + \sigma^2\f$ where \f$\sigma\f$ is the noise variance. + **/ + double variance_noise(const unsigned int variance_method=2) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "variance_noise(): Empty instance.", + cimg_instance); + + const ulongT siz = size(); + if (!siz || !_data) return 0; + if (variance_method>1) { // Compute a scaled version of the Laplacian. + CImg tmp(*this,false); + if (_depth==1) { + const double cste = 1.0/std::sqrt(20.0); // Depends on how the Laplacian is computed. + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height>=262144 && _spectrum>=2)) + cimg_forC(*this,c) { + CImg_3x3(I,T); + cimg_for3x3(*this,x,y,0,c,I,T) { + tmp(x,y,c) = cste*((double)Inc + (double)Ipc + (double)Icn + + (double)Icp - 4*(double)Icc); + } + } + } else { + const double cste = 1.0/std::sqrt(42.0); // Depends on how the Laplacian is computed. + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height*_depth>=262144 && _spectrum>=2)) + cimg_forC(*this,c) { + CImg_3x3x3(I,T); + cimg_for3x3x3(*this,x,y,z,c,I,T) { + tmp(x,y,z,c) = cste*( + (double)Incc + (double)Ipcc + (double)Icnc + (double)Icpc + + (double)Iccn + (double)Iccp - 6*(double)Iccc); + } + } + } + return tmp.variance(variance_method); + } + + // Version that doesn't need intermediate images. + double variance = 0, S = 0, S2 = 0; + if (_depth==1) { + const double cste = 1.0/std::sqrt(20.0); + CImg_3x3(I,T); + cimg_forC(*this,c) cimg_for3x3(*this,x,y,0,c,I,T) { + const double val = cste*((double)Inc + (double)Ipc + + (double)Icn + (double)Icp - 4*(double)Icc); + S+=val; S2+=val*val; + } + } else { + const double cste = 1.0/std::sqrt(42.0); + CImg_3x3x3(I,T); + cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,T) { + const double val = cste * + ((double)Incc + (double)Ipcc + (double)Icnc + + (double)Icpc + + (double)Iccn + (double)Iccp - 6*(double)Iccc); + S+=val; S2+=val*val; + } + } + if (variance_method) variance = siz>1?(S2 - S*S/siz)/(siz - 1):0; + else variance = (S2 - S*S/siz)/siz; + return variance>0?variance:0; + } + + //! Compute the MSE (Mean-Squared Error) between two images. + /** + \param img Image used as the second argument of the MSE operator. + **/ + template + double MSE(const CImg& img) const { + if (img.size()!=size()) + throw CImgArgumentException(_cimg_instance + "MSE(): Instance and specified image (%u,%u,%u,%u,%p) have different dimensions.", + cimg_instance, + img._width,img._height,img._depth,img._spectrum,img._data); + double vMSE = 0; + const t* ptr2 = img._data; + cimg_for(*this,ptr1,T) { + const double diff = (double)*ptr1 - (double)*(ptr2++); + vMSE+=diff*diff; + } + const ulongT siz = img.size(); + if (siz) vMSE/=siz; + return vMSE; + } + + //! Compute the PSNR (Peak Signal-to-Noise Ratio) between two images. + /** + \param img Image used as the second argument of the PSNR operator. + \param max_value Maximum theoretical value of the signal. + **/ + template + double PSNR(const CImg& img, const double max_value=255) const { + const double vMSE = (double)std::sqrt(MSE(img)); + return (vMSE!=0)?(double)(20*std::log10(max_value/vMSE)):(double)(cimg::type::max()); + } + + //! Evaluate math formula. + /** + \param expression Math formula, as a C-string. + \param x Value of the pre-defined variable \c x. + \param y Value of the pre-defined variable \c y. + \param z Value of the pre-defined variable \c z. + \param c Value of the pre-defined variable \c c. + \param list_inputs A list of input images attached to the specified math formula. + \param[out] list_outputs A pointer to a list of output images attached to the specified math formula. + **/ + double eval(const char *const expression, + const double x=0, const double y=0, const double z=0, const double c=0, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) { + return _eval(this,expression,x,y,z,c,list_inputs,list_outputs); + } + + //! Evaluate math formula \const. + double eval(const char *const expression, + const double x=0, const double y=0, const double z=0, const double c=0, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) const { + return _eval(0,expression,x,y,z,c,list_inputs,list_outputs); + } + + double _eval(CImg *const img_output, const char *const expression, + const double x, const double y, const double z, const double c, + const CImgList *const list_inputs, CImgList *const list_outputs) const { + if (!expression || !*expression) return 0; + if (!expression[1]) switch (*expression) { // Single-char optimization. + case 'w' : return (double)_width; + case 'h' : return (double)_height; + case 'd' : return (double)_depth; + case 's' : return (double)_spectrum; + case 'r' : return (double)_is_shared; + } + _cimg_math_parser mp(expression + (*expression=='>' || *expression=='<' || + *expression=='*' || *expression==':'),"eval", + *this,img_output,list_inputs,list_outputs,false); + const double val = mp(x,y,z,c); + mp.end(); + return val; + } + + //! Evaluate math formula. + /** + \param[out] output Contains values of output vector returned by the evaluated expression + (or is empty if the returned type is scalar). + \param expression Math formula, as a C-string. + \param x Value of the pre-defined variable \c x. + \param y Value of the pre-defined variable \c y. + \param z Value of the pre-defined variable \c z. + \param c Value of the pre-defined variable \c c. + \param list_inputs A list of input images attached to the specified math formula. + \param[out] list_outputs A pointer to a list of output images attached to the specified math formula. + **/ + template + void eval(CImg &output, const char *const expression, + const double x=0, const double y=0, const double z=0, const double c=0, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) { + _eval(output,this,expression,x,y,z,c,list_inputs,list_outputs); + } + + //! Evaluate math formula \const. + template + void eval(CImg& output, const char *const expression, + const double x=0, const double y=0, const double z=0, const double c=0, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) const { + _eval(output,0,expression,x,y,z,c,list_inputs,list_outputs); + } + + template + void _eval(CImg& output, CImg *const img_output, const char *const expression, + const double x, const double y, const double z, const double c, + const CImgList *const list_inputs, CImgList *const list_outputs) const { + if (!expression || !*expression) { output.assign(1); *output = 0; } + if (!expression[1]) switch (*expression) { // Single-char optimization. + case 'w' : output.assign(1); *output = (t)_width; break; + case 'h' : output.assign(1); *output = (t)_height; break; + case 'd' : output.assign(1); *output = (t)_depth; break; + case 's' : output.assign(1); *output = (t)_spectrum; break; + case 'r' : output.assign(1); *output = (t)_is_shared; break; + } + _cimg_math_parser mp(expression + (*expression=='>' || *expression=='<' || + *expression=='*' || *expression==':'),"eval", + *this,img_output,list_inputs,list_outputs,false); + output.assign(1,std::max(1U,mp.result_dim)); + mp(x,y,z,c,output._data); + mp.end(); + } + + //! Evaluate math formula on a set of variables. + /** + \param expression Math formula, as a C-string. + \param xyzc Set of values (x,y,z,c) used for the evaluation. + \param list_inputs A list of input images attached to the specified math formula. + \param[out] list_outputs A pointer to a list of output images attached to the specified math formula. + **/ + template + CImg eval(const char *const expression, const CImg& xyzc, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) { + return _eval(this,expression,xyzc,list_inputs,list_outputs); + } + + //! Evaluate math formula on a set of variables \const. + template + CImg eval(const char *const expression, const CImg& xyzc, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) const { + return _eval(0,expression,xyzc,list_inputs,list_outputs); + } + + template + CImg _eval(CImg *const output, const char *const expression, const CImg& xyzc, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) const { + CImg res(1,xyzc.size()/4); + if (!expression || !*expression) return res.fill(0); + _cimg_math_parser mp(expression,"eval",*this,output,list_inputs,list_outputs,false); +#ifdef cimg_use_openmp + cimg_pragma_openmp(parallel if (res._height>=512)) + { + _cimg_math_parser + _mp = omp_get_thread_num()?mp:_cimg_math_parser(), + &lmp = omp_get_thread_num()?_mp:mp; + cimg_pragma_openmp(for) + for (unsigned int i = 0; i[min, max, mean, variance, xmin, ymin, zmin, cmin, xmax, ymax, zmax, cmax, sum, product]. + **/ + CImg get_stats(const unsigned int variance_method=1) const { + if (is_empty()) return CImg(); + const ulongT siz = size(); + const longT off_end = (longT)siz; + double S = 0, S2 = 0, P = 1; + longT offm = 0, offM = 0; + T m = *_data, M = m; + + cimg_pragma_openmp(parallel reduction(+:S,S2) reduction(*:P) cimg_openmp_if(siz>=131072)) { + longT loffm = 0, loffM = 0; + T lm = *_data, lM = lm; + cimg_pragma_openmp(for) + for (longT off = 0; offlM) { lM = val; loffM = off; } + S+=_val; + S2+=_val*_val; + P*=_val; + } + cimg_pragma_openmp(critical(get_stats)) { + if (lmM || (lM==M && loffM1?(S2 - S*S/siz)/(siz - 1):0): + variance(variance_method)), + variance_value = _variance_value>0?_variance_value:0; + int + xm = 0, ym = 0, zm = 0, cm = 0, + xM = 0, yM = 0, zM = 0, cM = 0; + contains(_data[offm],xm,ym,zm,cm); + contains(_data[offM],xM,yM,zM,cM); + return CImg(1,14).fill((double)m,(double)M,mean_value,variance_value, + (double)xm,(double)ym,(double)zm,(double)cm, + (double)xM,(double)yM,(double)zM,(double)cM, + S,P); + } + + //! Compute statistics vector from the pixel values \inplace. + CImg& stats(const unsigned int variance_method=1) { + return get_stats(variance_method).move_to(*this); + } + + //@} + //------------------------------------- + // + //! \name Vector / Matrix Operations + //@{ + //------------------------------------- + + //! Compute norm of the image, viewed as a matrix. + /** + \param magnitude_type Norm type. Can be: + - \c -1: Linf-norm + - \c 0: L0-norm + - \c 1: L1-norm + - \c 2: L2-norm + **/ + double magnitude(const int magnitude_type=2) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "magnitude(): Empty instance.", + cimg_instance); + double res = 0; + switch (magnitude_type) { + case -1 : { + cimg_for(*this,ptrs,T) { const double val = (double)cimg::abs(*ptrs); if (val>res) res = val; } + } break; + case 1 : { + cimg_for(*this,ptrs,T) res+=(double)cimg::abs(*ptrs); + } break; + default : { + cimg_for(*this,ptrs,T) res+=(double)cimg::sqr(*ptrs); + res = (double)std::sqrt(res); + } + } + return res; + } + + //! Compute the trace of the image, viewed as a matrix. + /** + **/ + double trace() const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "trace(): Empty instance.", + cimg_instance); + double res = 0; + cimg_forX(*this,k) res+=(double)(*this)(k,k); + return res; + } + + //! Compute the determinant of the image, viewed as a matrix. + /** + **/ + double det() const { + if (is_empty() || _width!=_height || _depth!=1 || _spectrum!=1) + throw CImgInstanceException(_cimg_instance + "det(): Instance is not a square matrix.", + cimg_instance); + + switch (_width) { + case 1 : return (double)((*this)(0,0)); + case 2 : return (double)((*this)(0,0))*(double)((*this)(1,1)) - (double)((*this)(0,1))*(double)((*this)(1,0)); + case 3 : { + const double + a = (double)_data[0], d = (double)_data[1], g = (double)_data[2], + b = (double)_data[3], e = (double)_data[4], h = (double)_data[5], + c = (double)_data[6], f = (double)_data[7], i = (double)_data[8]; + return i*a*e - a*h*f - i*b*d + b*g*f + c*d*h - c*g*e; + } + default : { + CImg lu(*this,false); + CImg indx; + bool d; + lu._LU(indx,d); + double res = d?(double)1:(double)-1; + cimg_forX(lu,i) res*=lu(i,i); + return res; + } + } + } + + //! Compute the dot product between instance and argument, viewed as matrices. + /** + \param img Image used as a second argument of the dot product. + **/ + template + double dot(const CImg& img) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "dot(): Empty instance.", + cimg_instance); + if (!img) + throw CImgArgumentException(_cimg_instance + "dot(): Empty specified image.", + cimg_instance); + + const ulongT nb = std::min(size(),img.size()); + double res = 0; + for (ulongT off = 0; off get_vector_at(const unsigned int x, const unsigned int y=0, const unsigned int z=0) const { + CImg res; + if (res._height!=_spectrum) res.assign(1,_spectrum); + const ulongT whd = (ulongT)_width*_height*_depth; + const T *ptrs = data(x,y,z); + T *ptrd = res._data; + cimg_forC(*this,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return res; + } + + //! Get (square) matrix-valued pixel located at specified position. + /** + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \note - The spectrum() of the image must be a square. + **/ + CImg get_matrix_at(const unsigned int x=0, const unsigned int y=0, const unsigned int z=0) const { + const int n = (int)cimg::round(std::sqrt((double)_spectrum)); + const T *ptrs = data(x,y,z,0); + const ulongT whd = (ulongT)_width*_height*_depth; + CImg res(n,n); + T *ptrd = res._data; + cimg_forC(*this,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return res; + } + + //! Get tensor-valued pixel located at specified position. + /** + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + **/ + CImg get_tensor_at(const unsigned int x, const unsigned int y=0, const unsigned int z=0) const { + const T *ptrs = data(x,y,z,0); + const ulongT whd = (ulongT)_width*_height*_depth; + if (_spectrum==6) + return tensor(*ptrs,*(ptrs + whd),*(ptrs + 2*whd),*(ptrs + 3*whd),*(ptrs + 4*whd),*(ptrs + 5*whd)); + if (_spectrum==3) + return tensor(*ptrs,*(ptrs + whd),*(ptrs + 2*whd)); + return tensor(*ptrs); + } + + //! Set vector-valued pixel at specified position. + /** + \param vec Vector to put on the instance image. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + **/ + template + CImg& set_vector_at(const CImg& vec, const unsigned int x, const unsigned int y=0, const unsigned int z=0) { + if (x<_width && y<_height && z<_depth) { + const t *ptrs = vec._data; + const ulongT whd = (ulongT)_width*_height*_depth; + T *ptrd = data(x,y,z); + for (unsigned int k = std::min((unsigned int)vec.size(),_spectrum); k; --k) { + *ptrd = (T)*(ptrs++); ptrd+=whd; + } + } + return *this; + } + + //! Set (square) matrix-valued pixel at specified position. + /** + \param mat Matrix to put on the instance image. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + **/ + template + CImg& set_matrix_at(const CImg& mat, const unsigned int x=0, const unsigned int y=0, const unsigned int z=0) { + return set_vector_at(mat,x,y,z); + } + + //! Set tensor-valued pixel at specified position. + /** + \param ten Tensor to put on the instance image. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + **/ + template + CImg& set_tensor_at(const CImg& ten, const unsigned int x=0, const unsigned int y=0, const unsigned int z=0) { + T *ptrd = data(x,y,z,0); + const ulongT siz = (ulongT)_width*_height*_depth; + if (ten._height==2) { + *ptrd = (T)ten[0]; ptrd+=siz; + *ptrd = (T)ten[1]; ptrd+=siz; + *ptrd = (T)ten[3]; + } + else { + *ptrd = (T)ten[0]; ptrd+=siz; + *ptrd = (T)ten[1]; ptrd+=siz; + *ptrd = (T)ten[2]; ptrd+=siz; + *ptrd = (T)ten[4]; ptrd+=siz; + *ptrd = (T)ten[5]; ptrd+=siz; + *ptrd = (T)ten[8]; + } + return *this; + } + + //! Unroll pixel values along axis \c y. + /** + \note Equivalent to \code unroll('y'); \endcode. + **/ + CImg& vector() { + return unroll('y'); + } + + //! Unroll pixel values along axis \c y \newinstance. + CImg get_vector() const { + return get_unroll('y'); + } + + //! Resize image to become a scalar square matrix. + /** + **/ + CImg& matrix() { + const ulongT siz = size(); + switch (siz) { + case 1 : break; + case 4 : _width = _height = 2; break; + case 9 : _width = _height = 3; break; + case 16 : _width = _height = 4; break; + case 25 : _width = _height = 5; break; + case 36 : _width = _height = 6; break; + case 49 : _width = _height = 7; break; + case 64 : _width = _height = 8; break; + case 81 : _width = _height = 9; break; + case 100 : _width = _height = 10; break; + default : { + ulongT i = 11, i2 = i*i; + while (i2 get_matrix() const { + return (+*this).matrix(); + } + + //! Resize image to become a symmetric tensor. + /** + **/ + CImg& tensor() { + return get_tensor().move_to(*this); + } + + //! Resize image to become a symmetric tensor \newinstance. + CImg get_tensor() const { + CImg res; + const ulongT siz = size(); + switch (siz) { + case 1 : break; + case 3 : + res.assign(2,2); + res(0,0) = (*this)(0); + res(1,0) = res(0,1) = (*this)(1); + res(1,1) = (*this)(2); + break; + case 6 : + res.assign(3,3); + res(0,0) = (*this)(0); + res(1,0) = res(0,1) = (*this)(1); + res(2,0) = res(0,2) = (*this)(2); + res(1,1) = (*this)(3); + res(2,1) = res(1,2) = (*this)(4); + res(2,2) = (*this)(5); + break; + default : + throw CImgInstanceException(_cimg_instance + "tensor(): Invalid instance size (does not define a 1x1, 2x2 or 3x3 tensor).", + cimg_instance); + } + return res; + } + + //! Resize image to become a diagonal matrix. + /** + \note Transform the image as a diagonal matrix so that each of its initial value becomes a diagonal coefficient. + **/ + CImg& diagonal() { + return get_diagonal().move_to(*this); + } + + //! Resize image to become a diagonal matrix \newinstance. + CImg get_diagonal() const { + if (is_empty()) return *this; + const unsigned int siz = (unsigned int)size(); + CImg res(siz,siz,1,1,0); + cimg_foroff(*this,off) res((unsigned int)off,(unsigned int)off) = (*this)[off]; + return res; + } + + //! Replace the image by an identity matrix. + /** + \note If the instance image is not square, it is resized to a square matrix using its maximum + dimension as a reference. + **/ + CImg& identity_matrix() { + return identity_matrix(std::max(_width,_height)).move_to(*this); + } + + //! Replace the image by an identity matrix \newinstance. + CImg get_identity_matrix() const { + return identity_matrix(std::max(_width,_height)); + } + + //! Fill image with a linear sequence of values. + /** + \param a0 Starting value of the sequence. + \param a1 Ending value of the sequence. + **/ + CImg& sequence(const T& a0, const T& a1) { + if (is_empty()) return *this; + const ulongT siz = size() - 1; + T* ptr = _data; + if (siz) { + const double delta = (double)a1 - (double)a0; + cimg_foroff(*this,l) *(ptr++) = (T)(a0 + delta*l/siz); + } else *ptr = a0; + return *this; + } + + //! Fill image with a linear sequence of values \newinstance. + CImg get_sequence(const T& a0, const T& a1) const { + return (+*this).sequence(a0,a1); + } + + //! Transpose the image, viewed as a matrix. + /** + \note Equivalent to \code permute_axes("yxzc"); \endcode + **/ + CImg& transpose() { + if (_width==1) { _width = _height; _height = 1; return *this; } + if (_height==1) { _height = _width; _width = 1; return *this; } + if (_width==_height) { + cimg_forYZC(*this,y,z,c) for (int x = y; x get_transpose() const { + return get_permute_axes("yxzc"); + } + + //! Compute the cross product between two \c 1x3 images, viewed as 3d vectors. + /** + \param img Image used as the second argument of the cross product. + \note The first argument of the cross product is \c *this. + **/ + template + CImg& cross(const CImg& img) { + if (_width!=1 || _height<3 || img._width!=1 || img._height<3) + throw CImgInstanceException(_cimg_instance + "cross(): Instance and/or specified image (%u,%u,%u,%u,%p) are not 3d vectors.", + cimg_instance, + img._width,img._height,img._depth,img._spectrum,img._data); + + const T x = (*this)[0], y = (*this)[1], z = (*this)[2]; + (*this)[0] = (T)(y*img[2] - z*img[1]); + (*this)[1] = (T)(z*img[0] - x*img[2]); + (*this)[2] = (T)(x*img[1] - y*img[0]); + return *this; + } + + //! Compute the cross product between two \c 1x3 images, viewed as 3d vectors \newinstance. + template + CImg<_cimg_Tt> get_cross(const CImg& img) const { + return CImg<_cimg_Tt>(*this).cross(img); + } + + //! Invert the instance image, viewed as a matrix. + /** + \param use_LU Choose the inverting algorithm. Can be: + - \c true: LU-based matrix inversion. + - \c false: SVD-based matrix inversion. + **/ + CImg& invert(const bool use_LU=true) { + if (_width!=_height || _depth!=1 || _spectrum!=1) + throw CImgInstanceException(_cimg_instance + "invert(): Instance is not a square matrix.", + cimg_instance); +#ifdef cimg_use_lapack + int INFO = (int)use_LU, N = _width, LWORK = 4*N, *const IPIV = new int[N]; + Tfloat + *const lapA = new Tfloat[N*N], + *const WORK = new Tfloat[LWORK]; + cimg_forXY(*this,k,l) lapA[k*N + l] = (Tfloat)((*this)(k,l)); + cimg::getrf(N,lapA,IPIV,INFO); + if (INFO) + cimg::warn(_cimg_instance + "invert(): LAPACK function dgetrf_() returned error code %d.", + cimg_instance, + INFO); + else { + cimg::getri(N,lapA,IPIV,WORK,LWORK,INFO); + if (INFO) + cimg::warn(_cimg_instance + "invert(): LAPACK function dgetri_() returned error code %d.", + cimg_instance, + INFO); + } + if (!INFO) cimg_forXY(*this,k,l) (*this)(k,l) = (T)(lapA[k*N + l]); else fill(0); + delete[] IPIV; delete[] lapA; delete[] WORK; +#else + const double dete = _width>3?-1.0:det(); + if (dete!=0.0 && _width==2) { + const double + a = _data[0], c = _data[1], + b = _data[2], d = _data[3]; + _data[0] = (T)(d/dete); _data[1] = (T)(-c/dete); + _data[2] = (T)(-b/dete); _data[3] = (T)(a/dete); + } else if (dete!=0.0 && _width==3) { + const double + a = _data[0], d = _data[1], g = _data[2], + b = _data[3], e = _data[4], h = _data[5], + c = _data[6], f = _data[7], i = _data[8]; + _data[0] = (T)((i*e - f*h)/dete), _data[1] = (T)((g*f - i*d)/dete), _data[2] = (T)((d*h - g*e)/dete); + _data[3] = (T)((h*c - i*b)/dete), _data[4] = (T)((i*a - c*g)/dete), _data[5] = (T)((g*b - a*h)/dete); + _data[6] = (T)((b*f - e*c)/dete), _data[7] = (T)((d*c - a*f)/dete), _data[8] = (T)((a*e - d*b)/dete); + } else { + if (use_LU) { // LU-based inverse computation + CImg A(*this,false), indx, col(1,_width); + bool d; + A._LU(indx,d); + cimg_forX(*this,j) { + col.fill(0); + col(j) = 1; + col._solve(A,indx); + cimg_forX(*this,i) (*this)(j,i) = (T)col(i); + } + } else { // SVD-based inverse computation + CImg U(_width,_width), S(1,_width), V(_width,_width); + SVD(U,S,V,false); + U.transpose(); + cimg_forY(S,k) if (S[k]!=0) S[k]=1/S[k]; + S.diagonal(); + *this = V*S*U; + } + } +#endif + return *this; + } + + //! Invert the instance image, viewed as a matrix \newinstance. + CImg get_invert(const bool use_LU=true) const { + return CImg(*this,false).invert(use_LU); + } + + //! Compute the Moore-Penrose pseudo-inverse of the instance image, viewed as a matrix. + /** + **/ + CImg& pseudoinvert() { + return get_pseudoinvert().move_to(*this); + } + + //! Compute the Moore-Penrose pseudo-inverse of the instance image, viewed as a matrix \newinstance. + CImg get_pseudoinvert() const { + CImg U, S, V; + SVD(U,S,V); + const Tfloat tolerance = (sizeof(Tfloat)<=4?5.96e-8f:1.11e-16f)*std::max(_width,_height)*S.max(); + cimg_forX(V,x) { + const Tfloat s = S(x), invs = s>tolerance?1/s:0; + cimg_forY(V,y) V(x,y)*=invs; + } + return V*U.transpose(); + } + + //! Solve a system of linear equations. + /** + \param A Matrix of the linear system. + \note Solve \c AX=B where \c B=*this. + **/ + template + CImg& solve(const CImg& A) { + if (_depth!=1 || _spectrum!=1 || _height!=A._height || A._depth!=1 || A._spectrum!=1) + throw CImgArgumentException(_cimg_instance + "solve(): Instance and specified matrix (%u,%u,%u,%u,%p) have " + "incompatible dimensions.", + cimg_instance, + A._width,A._height,A._depth,A._spectrum,A._data); + typedef _cimg_Ttfloat Ttfloat; + if (A._width==A._height) { // Classical linear system + if (_width!=1) { + CImg res(_width,A._width); + cimg_forX(*this,i) res.draw_image(i,get_column(i).solve(A)); + return res.move_to(*this); + } +#ifdef cimg_use_lapack + char TRANS = 'N'; + int INFO, N = _height, LWORK = 4*N, *const IPIV = new int[N]; + Ttfloat + *const lapA = new Ttfloat[N*N], + *const lapB = new Ttfloat[N], + *const WORK = new Ttfloat[LWORK]; + cimg_forXY(A,k,l) lapA[k*N + l] = (Ttfloat)(A(k,l)); + cimg_forY(*this,i) lapB[i] = (Ttfloat)((*this)(i)); + cimg::getrf(N,lapA,IPIV,INFO); + if (INFO) + cimg::warn(_cimg_instance + "solve(): LAPACK library function dgetrf_() returned error code %d.", + cimg_instance, + INFO); + + if (!INFO) { + cimg::getrs(TRANS,N,lapA,IPIV,lapB,INFO); + if (INFO) + cimg::warn(_cimg_instance + "solve(): LAPACK library function dgetrs_() returned error code %d.", + cimg_instance, + INFO); + } + if (!INFO) cimg_forY(*this,i) (*this)(i) = (T)(lapB[i]); else fill(0); + delete[] IPIV; delete[] lapA; delete[] lapB; delete[] WORK; +#else + CImg lu(A,false); + CImg indx; + bool d; + lu._LU(indx,d); + _solve(lu,indx); +#endif + } else { // Least-square solution for non-square systems. +#ifdef cimg_use_lapack + if (_width!=1) { + CImg res(_width,A._width); + cimg_forX(*this,i) res.draw_image(i,get_column(i).solve(A)); + return res.move_to(*this); + } + char TRANS = 'N'; + int INFO, N = A._width, M = A._height, LWORK = -1, LDA = M, LDB = M, NRHS = _width; + Ttfloat WORK_QUERY; + Ttfloat + * const lapA = new Ttfloat[M*N], + * const lapB = new Ttfloat[M*NRHS]; + cimg::sgels(TRANS, M, N, NRHS, lapA, LDA, lapB, LDB, &WORK_QUERY, LWORK, INFO); + LWORK = (int) WORK_QUERY; + Ttfloat *const WORK = new Ttfloat[LWORK]; + cimg_forXY(A,k,l) lapA[k*M + l] = (Ttfloat)(A(k,l)); + cimg_forXY(*this,k,l) lapB[k*M + l] = (Ttfloat)((*this)(k,l)); + cimg::sgels(TRANS, M, N, NRHS, lapA, LDA, lapB, LDB, WORK, LWORK, INFO); + if (INFO != 0) + cimg::warn(_cimg_instance + "solve(): LAPACK library function sgels() returned error code %d.", + cimg_instance, + INFO); + assign(NRHS, N); + if (!INFO) + cimg_forXY(*this,k,l) (*this)(k,l) = (T)lapB[k*M + l]; + else + assign(A.get_pseudoinvert()*(*this)); + delete[] lapA; delete[] lapB; delete[] WORK; +#else + assign(A.get_pseudoinvert()*(*this)); +#endif + } + return *this; + } + + //! Solve a system of linear equations \newinstance. + template + CImg<_cimg_Ttfloat> get_solve(const CImg& A) const { + return CImg<_cimg_Ttfloat>(*this,false).solve(A); + } + + template + CImg& _solve(const CImg& A, const CImg& indx) { + typedef _cimg_Ttfloat Ttfloat; + const int N = (int)size(); + int ii = -1; + Ttfloat sum; + for (int i = 0; i=0) for (int j = ii; j<=i - 1; ++j) sum-=A(j,i)*(*this)(j); + else if (sum!=0) ii = i; + (*this)(i) = (T)sum; + } + for (int i = N - 1; i>=0; --i) { + sum = (*this)(i); + for (int j = i + 1; j + CImg& solve_tridiagonal(const CImg& A) { + const unsigned int siz = (unsigned int)size(); + if (A._width!=3 || A._height!=siz) + throw CImgArgumentException(_cimg_instance + "solve_tridiagonal(): Instance and tridiagonal matrix " + "(%u,%u,%u,%u,%p) have incompatible dimensions.", + cimg_instance, + A._width,A._height,A._depth,A._spectrum,A._data); + typedef _cimg_Ttfloat Ttfloat; + const Ttfloat epsilon = 1e-4f; + CImg B = A.get_column(1), V(*this,false); + for (int i = 1; i<(int)siz; ++i) { + const Ttfloat m = A(0,i)/(B[i - 1]?B[i - 1]:epsilon); + B[i] -= m*A(2,i - 1); + V[i] -= m*V[i - 1]; + } + (*this)[siz - 1] = (T)(V[siz - 1]/(B[siz - 1]?B[siz - 1]:epsilon)); + for (int i = (int)siz - 2; i>=0; --i) (*this)[i] = (T)((V[i] - A(2,i)*(*this)[i + 1])/(B[i]?B[i]:epsilon)); + return *this; + } + + //! Solve a tridiagonal system of linear equations \newinstance. + template + CImg<_cimg_Ttfloat> get_solve_tridiagonal(const CImg& A) const { + return CImg<_cimg_Ttfloat>(*this,false).solve_tridiagonal(A); + } + + //! Compute eigenvalues and eigenvectors of the instance image, viewed as a matrix. + /** + \param[out] val Vector of the estimated eigenvalues, in decreasing order. + \param[out] vec Matrix of the estimated eigenvectors, sorted by columns. + **/ + template + const CImg& eigen(CImg& val, CImg &vec) const { + if (is_empty()) { val.assign(); vec.assign(); } + else { + if (_width!=_height || _depth>1 || _spectrum>1) + throw CImgInstanceException(_cimg_instance + "eigen(): Instance is not a square matrix.", + cimg_instance); + + if (val.size()<(ulongT)_width) val.assign(1,_width); + if (vec.size()<(ulongT)_width*_width) vec.assign(_width,_width); + switch (_width) { + case 1 : { val[0] = (t)(*this)[0]; vec[0] = (t)1; } break; + case 2 : { + const double a = (*this)[0], b = (*this)[1], c = (*this)[2], d = (*this)[3], e = a + d; + double f = e*e - 4*(a*d - b*c); + if (f<0) + cimg::warn(_cimg_instance + "eigen(): Complex eigenvalues found.", + cimg_instance); + + f = std::sqrt(f); + const double + l1 = 0.5*(e - f), + l2 = 0.5*(e + f), + b2 = b*b, + norm1 = std::sqrt(cimg::sqr(l2 - a) + b2), + norm2 = std::sqrt(cimg::sqr(l1 - a) + b2); + val[0] = (t)l2; + val[1] = (t)l1; + if (norm1>0) { vec(0,0) = (t)(b/norm1); vec(0,1) = (t)((l2 - a)/norm1); } else { vec(0,0) = 1; vec(0,1) = 0; } + if (norm2>0) { vec(1,0) = (t)(b/norm2); vec(1,1) = (t)((l1 - a)/norm2); } else { vec(1,0) = 1; vec(1,1) = 0; } + } break; + default : + throw CImgInstanceException(_cimg_instance + "eigen(): Eigenvalues computation of general matrices is limited " + "to 2x2 matrices.", + cimg_instance); + } + } + return *this; + } + + //! Compute eigenvalues and eigenvectors of the instance image, viewed as a matrix. + /** + \return A list of two images [val; vec], whose meaning is similar as in eigen(CImg&,CImg&) const. + **/ + CImgList get_eigen() const { + CImgList res(2); + eigen(res[0],res[1]); + return res; + } + + //! Compute eigenvalues and eigenvectors of the instance image, viewed as a symmetric matrix. + /** + \param[out] val Vector of the estimated eigenvalues, in decreasing order. + \param[out] vec Matrix of the estimated eigenvectors, sorted by columns. + **/ + template + const CImg& symmetric_eigen(CImg& val, CImg& vec) const { + if (is_empty()) { val.assign(); vec.assign(); } + else { +#ifdef cimg_use_lapack + char JOB = 'V', UPLO = 'U'; + int N = _width, LWORK = 4*N, INFO; + Tfloat + *const lapA = new Tfloat[N*N], + *const lapW = new Tfloat[N], + *const WORK = new Tfloat[LWORK]; + cimg_forXY(*this,k,l) lapA[k*N + l] = (Tfloat)((*this)(k,l)); + cimg::syev(JOB,UPLO,N,lapA,lapW,WORK,LWORK,INFO); + if (INFO) + cimg::warn(_cimg_instance + "symmetric_eigen(): LAPACK library function dsyev_() returned error code %d.", + cimg_instance, + INFO); + + val.assign(1,N); + vec.assign(N,N); + if (!INFO) { + cimg_forY(val,i) val(i) = (T)lapW[N - 1 -i]; + cimg_forXY(vec,k,l) vec(k,l) = (T)(lapA[(N - 1 - k)*N + l]); + } else { val.fill(0); vec.fill(0); } + delete[] lapA; delete[] lapW; delete[] WORK; +#else + if (_width!=_height || _depth>1 || _spectrum>1) + throw CImgInstanceException(_cimg_instance + "eigen(): Instance is not a square matrix.", + cimg_instance); + + val.assign(1,_width); + if (vec._data) vec.assign(_width,_width); + if (_width<3) { + eigen(val,vec); + if (_width==2) { vec[1] = -vec[2]; vec[3] = vec[0]; } // Force orthogonality for 2x2 matrices. + return *this; + } + CImg V(_width,_width); + Tfloat M = 0, m = (Tfloat)min_max(M), maxabs = cimg::max((Tfloat)1,cimg::abs(m),cimg::abs(M)); + (CImg(*this,false)/=maxabs).SVD(vec,val,V,false); + if (maxabs!=1) val*=maxabs; + + bool is_ambiguous = false; + float eig = 0; + cimg_forY(val,p) { // check for ambiguous cases. + if (val[p]>eig) eig = (float)val[p]; + t scal = 0; + cimg_forY(vec,y) scal+=vec(p,y)*V(p,y); + if (cimg::abs(scal)<0.9f) is_ambiguous = true; + if (scal<0) val[p] = -val[p]; + } + if (is_ambiguous) { + ++(eig*=2); + SVD(vec,val,V,false,40,eig); + val-=eig; + } + CImg permutations; // sort eigenvalues in decreasing order + CImg tmp(_width); + val.sort(permutations,false); + cimg_forY(vec,k) { + cimg_forY(permutations,y) tmp(y) = vec(permutations(y),k); + std::memcpy(vec.data(0,k),tmp._data,sizeof(t)*_width); + } +#endif + } + return *this; + } + + //! Compute eigenvalues and eigenvectors of the instance image, viewed as a symmetric matrix. + /** + \return A list of two images [val; vec], whose meaning are similar as in + symmetric_eigen(CImg&,CImg&) const. + **/ + CImgList get_symmetric_eigen() const { + CImgList res(2); + symmetric_eigen(res[0],res[1]); + return res; + } + + //! Sort pixel values and get sorting permutations. + /** + \param[out] permutations Permutation map used for the sorting. + \param is_increasing Tells if pixel values are sorted in an increasing (\c true) or decreasing (\c false) way. + **/ + template + CImg& sort(CImg& permutations, const bool is_increasing=true) { + permutations.assign(_width,_height,_depth,_spectrum); + if (is_empty()) return *this; + cimg_foroff(permutations,off) permutations[off] = (t)off; + return _quicksort(0,size() - 1,permutations,is_increasing,true); + } + + //! Sort pixel values and get sorting permutations \newinstance. + template + CImg get_sort(CImg& permutations, const bool is_increasing=true) const { + return (+*this).sort(permutations,is_increasing); + } + + //! Sort pixel values. + /** + \param is_increasing Tells if pixel values are sorted in an increasing (\c true) or decreasing (\c false) way. + \param axis Tells if the value sorting must be done along a specific axis. Can be: + - \c 0: All pixel values are sorted, independently on their initial position. + - \c 'x': Image columns are sorted, according to the first value in each column. + - \c 'y': Image rows are sorted, according to the first value in each row. + - \c 'z': Image slices are sorted, according to the first value in each slice. + - \c 'c': Image channels are sorted, according to the first value in each channel. + **/ + CImg& sort(const bool is_increasing=true, const char axis=0) { + if (is_empty()) return *this; + CImg perm; + switch (cimg::lowercase(axis)) { + case 0 : + _quicksort(0,size() - 1,perm,is_increasing,false); + break; + case 'x' : { + perm.assign(_width); + get_crop(0,0,0,0,_width - 1,0,0,0).sort(perm,is_increasing); + CImg img(*this,false); + cimg_forXYZC(*this,x,y,z,c) (*this)(x,y,z,c) = img(perm[x],y,z,c); + } break; + case 'y' : { + perm.assign(_height); + get_crop(0,0,0,0,0,_height - 1,0,0).sort(perm,is_increasing); + CImg img(*this,false); + cimg_forXYZC(*this,x,y,z,c) (*this)(x,y,z,c) = img(x,perm[y],z,c); + } break; + case 'z' : { + perm.assign(_depth); + get_crop(0,0,0,0,0,0,_depth - 1,0).sort(perm,is_increasing); + CImg img(*this,false); + cimg_forXYZC(*this,x,y,z,c) (*this)(x,y,z,c) = img(x,y,perm[z],c); + } break; + case 'c' : { + perm.assign(_spectrum); + get_crop(0,0,0,0,0,0,0,_spectrum - 1).sort(perm,is_increasing); + CImg img(*this,false); + cimg_forXYZC(*this,x,y,z,c) (*this)(x,y,z,c) = img(x,y,z,perm[c]); + } break; + default : + throw CImgArgumentException(_cimg_instance + "sort(): Invalid specified axis '%c' " + "(should be { x | y | z | c }).", + cimg_instance,axis); + } + return *this; + } + + //! Sort pixel values \newinstance. + CImg get_sort(const bool is_increasing=true, const char axis=0) const { + return (+*this).sort(is_increasing,axis); + } + + template + CImg& _quicksort(const long indm, const long indM, CImg& permutations, + const bool is_increasing, const bool is_permutations) { + if (indm(*this)[mid]) { + cimg::swap((*this)[indm],(*this)[mid]); + if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); + } + if ((*this)[mid]>(*this)[indM]) { + cimg::swap((*this)[indM],(*this)[mid]); + if (is_permutations) cimg::swap(permutations[indM],permutations[mid]); + } + if ((*this)[indm]>(*this)[mid]) { + cimg::swap((*this)[indm],(*this)[mid]); + if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); + } + } else { + if ((*this)[indm]<(*this)[mid]) { + cimg::swap((*this)[indm],(*this)[mid]); + if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); + } + if ((*this)[mid]<(*this)[indM]) { + cimg::swap((*this)[indM],(*this)[mid]); + if (is_permutations) cimg::swap(permutations[indM],permutations[mid]); + } + if ((*this)[indm]<(*this)[mid]) { + cimg::swap((*this)[indm],(*this)[mid]); + if (is_permutations) cimg::swap(permutations[indm],permutations[mid]); + } + } + if (indM - indm>=3) { + const T pivot = (*this)[mid]; + long i = indm, j = indM; + if (is_increasing) { + do { + while ((*this)[i]pivot) --j; + if (i<=j) { + if (is_permutations) cimg::swap(permutations[i],permutations[j]); + cimg::swap((*this)[i++],(*this)[j--]); + } + } while (i<=j); + } else { + do { + while ((*this)[i]>pivot) ++i; + while ((*this)[j] A; // Input matrix (assumed to contain some values). + CImg<> U,S,V; + A.SVD(U,S,V) + \endcode + **/ + template + const CImg& SVD(CImg& U, CImg& S, CImg& V, const bool sorting=true, + const unsigned int max_iteration=40, const float lambda=0) const { + if (is_empty()) { U.assign(); S.assign(); V.assign(); } + else { + U = *this; + if (lambda!=0) { + const unsigned int delta = std::min(U._width,U._height); + for (unsigned int i = 0; i rv1(_width); + t anorm = 0, c, f, g = 0, h, s, scale = 0; + int l = 0, nm = 0; + + cimg_forX(U,i) { + l = i + 1; rv1[i] = scale*g; g = s = scale = 0; + if (i=0?-1:1)*std::sqrt(s)); h=f*g-s; U(i,i) = f-g; + for (int j = l; j=0?-1:1)*std::sqrt(s)); h = f*g-s; U(l,i) = f-g; + for (int k = l; k=0; --i) { + if (i=0; --i) { + l = i + 1; g = S[i]; + for (int j = l; j=0; --k) { + for (unsigned int its = 0; its=1; --l) { + nm = l - 1; + if ((cimg::abs(rv1[l]) + anorm)==anorm) { flag = false; break; } + if ((cimg::abs(S[nm]) + anorm)==anorm) break; + } + if (flag) { + c = 0; s = 1; + for (int i = l; i<=k; ++i) { + f = s*rv1[i]; rv1[i] = c*rv1[i]; + if ((cimg::abs(f) + anorm)==anorm) break; + g = S[i]; h = cimg::_hypot(f,g); S[i] = h; h = 1/h; c = g*h; s = -f*h; + cimg_forY(U,j) { const t y = U(nm,j), z = U(i,j); U(nm,j) = y*c + z*s; U(i,j) = z*c - y*s; } + } + } + + const t z = S[k]; + if (l==k) { if (z<0) { S[k] = -z; cimg_forX(U,j) V(k,j) = -V(k,j); } break; } + nm = k - 1; + t x = S[l], y = S[nm]; + g = rv1[nm]; h = rv1[k]; + f = ((y - z)*(y + z)+(g - h)*(g + h))/std::max((t)1e-25,2*h*y); + g = cimg::_hypot(f,(t)1); + f = ((x - z)*(x + z)+h*((y/(f + (f>=0?g:-g))) - h))/std::max((t)1e-25,x); + c = s = 1; + for (int j = l; j<=nm; ++j) { + const int i = j + 1; + g = rv1[i]; h = s*g; g = c*g; + t y = S[i]; + t z = cimg::_hypot(f,h); + rv1[j] = z; c = f/std::max((t)1e-25,z); s = h/std::max((t)1e-25,z); + f = x*c + g*s; g = g*c - x*s; h = y*s; y*=c; + cimg_forX(U,jj) { const t x = V(j,jj), z = V(i,jj); V(j,jj) = x*c + z*s; V(i,jj) = z*c - x*s; } + z = cimg::_hypot(f,h); S[j] = z; + if (z) { z = 1/std::max((t)1e-25,z); c = f*z; s = h*z; } + f = c*g + s*y; x = c*y - s*g; + cimg_forY(U,jj) { const t y = U(j,jj); z = U(i,jj); U(j,jj) = y*c + z*s; U(i,jj) = z*c - y*s; } + } + rv1[l] = 0; rv1[k]=f; S[k]=x; + } + } + + if (sorting) { + CImg permutations; + CImg tmp(_width); + S.sort(permutations,false); + cimg_forY(U,k) { + cimg_forY(permutations,y) tmp(y) = U(permutations(y),k); + std::memcpy(U.data(0,k),tmp._data,sizeof(t)*_width); + } + cimg_forY(V,k) { + cimg_forY(permutations,y) tmp(y) = V(permutations(y),k); + std::memcpy(V.data(0,k),tmp._data,sizeof(t)*_width); + } + } + } + return *this; + } + + //! Compute the SVD of the instance image, viewed as a general matrix. + /** + \return A list of three images [U; S; V], whose meaning is similar as in + SVD(CImg&,CImg&,CImg&,bool,unsigned int,float) const. + **/ + CImgList get_SVD(const bool sorting=true, + const unsigned int max_iteration=40, const float lambda=0) const { + CImgList res(3); + SVD(res[0],res[1],res[2],sorting,max_iteration,lambda); + return res; + } + + // [internal] Compute the LU decomposition of a permuted matrix. + template + CImg& _LU(CImg& indx, bool& d) { + const int N = width(); + int imax = 0; + CImg vv(N); + indx.assign(N); + d = true; + cimg_forX(*this,i) { + Tfloat vmax = 0; + cimg_forX(*this,j) { + const Tfloat tmp = cimg::abs((*this)(j,i)); + if (tmp>vmax) vmax = tmp; + } + if (vmax==0) { indx.fill(0); return fill(0); } + vv[i] = 1/vmax; + } + cimg_forX(*this,j) { + for (int i = 0; i=vmax) { vmax=tmp; imax=i; } + } + if (j!=imax) { + cimg_forX(*this,k) cimg::swap((*this)(k,imax),(*this)(k,j)); + d =!d; + vv[imax] = vv[j]; + } + indx[j] = (t)imax; + if ((*this)(j,j)==0) (*this)(j,j) = (T)1e-20; + if (j + static CImg dijkstra(const tf& distance, const unsigned int nb_nodes, + const unsigned int starting_node, const unsigned int ending_node, + CImg& previous_node) { + if (starting_node>=nb_nodes) + throw CImgArgumentException("CImg<%s>::dijkstra(): Specified indice of starting node %u is higher " + "than number of nodes %u.", + pixel_type(),starting_node,nb_nodes); + CImg dist(1,nb_nodes,1,1,cimg::type::max()); + dist(starting_node) = 0; + previous_node.assign(1,nb_nodes,1,1,(t)-1); + previous_node(starting_node) = (t)starting_node; + CImg Q(nb_nodes); + cimg_forX(Q,u) Q(u) = (unsigned int)u; + cimg::swap(Q(starting_node),Q(0)); + unsigned int sizeQ = nb_nodes; + while (sizeQ) { + // Update neighbors from minimal vertex + const unsigned int umin = Q(0); + if (umin==ending_node) sizeQ = 0; + else { + const T dmin = dist(umin); + const T infty = cimg::type::max(); + for (unsigned int q = 1; qdist(Q(left))) || + (rightdist(Q(right)));) { + if (right + static CImg dijkstra(const tf& distance, const unsigned int nb_nodes, + const unsigned int starting_node, const unsigned int ending_node=~0U) { + CImg foo; + return dijkstra(distance,nb_nodes,starting_node,ending_node,foo); + } + + //! Return minimal path in a graph, using the Dijkstra algorithm. + /** + \param starting_node Indice of the starting node. + \param ending_node Indice of the ending node. + \param previous_node Array that gives the previous node indice in the path to the starting node + (optional parameter). + \return Array of distances of each node to the starting node. + \note image instance corresponds to the adjacency matrix of the graph. + **/ + template + CImg& dijkstra(const unsigned int starting_node, const unsigned int ending_node, + CImg& previous_node) { + return get_dijkstra(starting_node,ending_node,previous_node).move_to(*this); + } + + //! Return minimal path in a graph, using the Dijkstra algorithm \newinstance. + template + CImg get_dijkstra(const unsigned int starting_node, const unsigned int ending_node, + CImg& previous_node) const { + if (_width!=_height || _depth!=1 || _spectrum!=1) + throw CImgInstanceException(_cimg_instance + "dijkstra(): Instance is not a graph adjacency matrix.", + cimg_instance); + + return dijkstra(*this,_width,starting_node,ending_node,previous_node); + } + + //! Return minimal path in a graph, using the Dijkstra algorithm. + CImg& dijkstra(const unsigned int starting_node, const unsigned int ending_node=~0U) { + return get_dijkstra(starting_node,ending_node).move_to(*this); + } + + //! Return minimal path in a graph, using the Dijkstra algorithm \newinstance. + CImg get_dijkstra(const unsigned int starting_node, const unsigned int ending_node=~0U) const { + CImg foo; + return get_dijkstra(starting_node,ending_node,foo); + } + + //! Return an image containing the ascii codes of the specified string. + /** + \param str input C-string to encode as an image. + \param is_last_zero Tells if the ending \c '0' character appear in the resulting image. + \param is_shared Return result that shares its buffer with \p str. + **/ + static CImg string(const char *const str, const bool is_last_zero=true, const bool is_shared=false) { + if (!str) return CImg(); + return CImg(str,(unsigned int)std::strlen(str) + (is_last_zero?1:0),1,1,1,is_shared); + } + + //! Return a \c 1x1 image containing specified value. + /** + \param a0 First vector value. + **/ + static CImg vector(const T& a0) { + CImg r(1,1); + r[0] = a0; + return r; + } + + //! Return a \c 1x2 image containing specified values. + /** + \param a0 First vector value. + \param a1 Second vector value. + **/ + static CImg vector(const T& a0, const T& a1) { + CImg r(1,2); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; + return r; + } + + //! Return a \c 1x3 image containing specified values. + /** + \param a0 First vector value. + \param a1 Second vector value. + \param a2 Third vector value. + **/ + static CImg vector(const T& a0, const T& a1, const T& a2) { + CImg r(1,3); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; + return r; + } + + //! Return a \c 1x4 image containing specified values. + /** + \param a0 First vector value. + \param a1 Second vector value. + \param a2 Third vector value. + \param a3 Fourth vector value. + **/ + static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3) { + CImg r(1,4); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; + return r; + } + + //! Return a \c 1x5 image containing specified values. + static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4) { + CImg r(1,5); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; *(ptr++) = a4; + return r; + } + + //! Return a \c 1x6 image containing specified values. + static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4, const T& a5) { + CImg r(1,6); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; *(ptr++) = a4; *(ptr++) = a5; + return r; + } + + //! Return a \c 1x7 image containing specified values. + static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, + const T& a4, const T& a5, const T& a6) { + CImg r(1,7); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; + *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; + return r; + } + + //! Return a \c 1x8 image containing specified values. + static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, + const T& a4, const T& a5, const T& a6, const T& a7) { + CImg r(1,8); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; + *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; + return r; + } + + //! Return a \c 1x9 image containing specified values. + static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, + const T& a4, const T& a5, const T& a6, const T& a7, + const T& a8) { + CImg r(1,9); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; + *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; + *(ptr++) = a8; + return r; + } + + //! Return a \c 1x10 image containing specified values. + static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, + const T& a4, const T& a5, const T& a6, const T& a7, + const T& a8, const T& a9) { + CImg r(1,10); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; + *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; + *(ptr++) = a8; *(ptr++) = a9; + return r; + } + + //! Return a \c 1x11 image containing specified values. + static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, + const T& a4, const T& a5, const T& a6, const T& a7, + const T& a8, const T& a9, const T& a10) { + CImg r(1,11); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; + *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; + *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; + return r; + } + + //! Return a \c 1x12 image containing specified values. + static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, + const T& a4, const T& a5, const T& a6, const T& a7, + const T& a8, const T& a9, const T& a10, const T& a11) { + CImg r(1,12); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; + *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; + *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; + return r; + } + + //! Return a \c 1x13 image containing specified values. + static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, + const T& a4, const T& a5, const T& a6, const T& a7, + const T& a8, const T& a9, const T& a10, const T& a11, + const T& a12) { + CImg r(1,13); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; + *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; + *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; + *(ptr++) = a12; + return r; + } + + //! Return a \c 1x14 image containing specified values. + static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, + const T& a4, const T& a5, const T& a6, const T& a7, + const T& a8, const T& a9, const T& a10, const T& a11, + const T& a12, const T& a13) { + CImg r(1,14); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; + *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; + *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; + *(ptr++) = a12; *(ptr++) = a13; + return r; + } + + //! Return a \c 1x15 image containing specified values. + static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, + const T& a4, const T& a5, const T& a6, const T& a7, + const T& a8, const T& a9, const T& a10, const T& a11, + const T& a12, const T& a13, const T& a14) { + CImg r(1,15); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; + *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; + *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; + *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; + return r; + } + + //! Return a \c 1x16 image containing specified values. + static CImg vector(const T& a0, const T& a1, const T& a2, const T& a3, + const T& a4, const T& a5, const T& a6, const T& a7, + const T& a8, const T& a9, const T& a10, const T& a11, + const T& a12, const T& a13, const T& a14, const T& a15) { + CImg r(1,16); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; + *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; + *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; + *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; *(ptr++) = a15; + return r; + } + + //! Return a 1x1 matrix containing specified coefficients. + /** + \param a0 First matrix value. + \note Equivalent to vector(const T&). + **/ + static CImg matrix(const T& a0) { + return vector(a0); + } + + //! Return a 2x2 matrix containing specified coefficients. + /** + \param a0 First matrix value. + \param a1 Second matrix value. + \param a2 Third matrix value. + \param a3 Fourth matrix value. + **/ + static CImg matrix(const T& a0, const T& a1, + const T& a2, const T& a3) { + CImg r(2,2); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; + *(ptr++) = a2; *(ptr++) = a3; + return r; + } + + //! Return a 3x3 matrix containing specified coefficients. + /** + \param a0 First matrix value. + \param a1 Second matrix value. + \param a2 Third matrix value. + \param a3 Fourth matrix value. + \param a4 Fifth matrix value. + \param a5 Sixth matrix value. + \param a6 Seventh matrix value. + \param a7 Eighth matrix value. + \param a8 Nineth matrix value. + **/ + static CImg matrix(const T& a0, const T& a1, const T& a2, + const T& a3, const T& a4, const T& a5, + const T& a6, const T& a7, const T& a8) { + CImg r(3,3); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; + *(ptr++) = a3; *(ptr++) = a4; *(ptr++) = a5; + *(ptr++) = a6; *(ptr++) = a7; *(ptr++) = a8; + return r; + } + + //! Return a 4x4 matrix containing specified coefficients. + static CImg matrix(const T& a0, const T& a1, const T& a2, const T& a3, + const T& a4, const T& a5, const T& a6, const T& a7, + const T& a8, const T& a9, const T& a10, const T& a11, + const T& a12, const T& a13, const T& a14, const T& a15) { + CImg r(4,4); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; + *(ptr++) = a4; *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; + *(ptr++) = a8; *(ptr++) = a9; *(ptr++) = a10; *(ptr++) = a11; + *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; *(ptr++) = a15; + return r; + } + + //! Return a 5x5 matrix containing specified coefficients. + static CImg matrix(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4, + const T& a5, const T& a6, const T& a7, const T& a8, const T& a9, + const T& a10, const T& a11, const T& a12, const T& a13, const T& a14, + const T& a15, const T& a16, const T& a17, const T& a18, const T& a19, + const T& a20, const T& a21, const T& a22, const T& a23, const T& a24) { + CImg r(5,5); T *ptr = r._data; + *(ptr++) = a0; *(ptr++) = a1; *(ptr++) = a2; *(ptr++) = a3; *(ptr++) = a4; + *(ptr++) = a5; *(ptr++) = a6; *(ptr++) = a7; *(ptr++) = a8; *(ptr++) = a9; + *(ptr++) = a10; *(ptr++) = a11; *(ptr++) = a12; *(ptr++) = a13; *(ptr++) = a14; + *(ptr++) = a15; *(ptr++) = a16; *(ptr++) = a17; *(ptr++) = a18; *(ptr++) = a19; + *(ptr++) = a20; *(ptr++) = a21; *(ptr++) = a22; *(ptr++) = a23; *(ptr++) = a24; + return r; + } + + //! Return a 1x1 symmetric matrix containing specified coefficients. + /** + \param a0 First matrix value. + \note Equivalent to vector(const T&). + **/ + static CImg tensor(const T& a0) { + return matrix(a0); + } + + //! Return a 2x2 symmetric matrix tensor containing specified coefficients. + static CImg tensor(const T& a0, const T& a1, const T& a2) { + return matrix(a0,a1,a1,a2); + } + + //! Return a 3x3 symmetric matrix containing specified coefficients. + static CImg tensor(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4, const T& a5) { + return matrix(a0,a1,a2,a1,a3,a4,a2,a4,a5); + } + + //! Return a 1x1 diagonal matrix containing specified coefficients. + static CImg diagonal(const T& a0) { + return matrix(a0); + } + + //! Return a 2x2 diagonal matrix containing specified coefficients. + static CImg diagonal(const T& a0, const T& a1) { + return matrix(a0,0,0,a1); + } + + //! Return a 3x3 diagonal matrix containing specified coefficients. + static CImg diagonal(const T& a0, const T& a1, const T& a2) { + return matrix(a0,0,0,0,a1,0,0,0,a2); + } + + //! Return a 4x4 diagonal matrix containing specified coefficients. + static CImg diagonal(const T& a0, const T& a1, const T& a2, const T& a3) { + return matrix(a0,0,0,0,0,a1,0,0,0,0,a2,0,0,0,0,a3); + } + + //! Return a 5x5 diagonal matrix containing specified coefficients. + static CImg diagonal(const T& a0, const T& a1, const T& a2, const T& a3, const T& a4) { + return matrix(a0,0,0,0,0,0,a1,0,0,0,0,0,a2,0,0,0,0,0,a3,0,0,0,0,0,a4); + } + + //! Return a NxN identity matrix. + /** + \param N Dimension of the matrix. + **/ + static CImg identity_matrix(const unsigned int N) { + CImg res(N,N,1,1,0); + cimg_forX(res,x) res(x,x) = 1; + return res; + } + + //! Return a N-numbered sequence vector from \p a0 to \p a1. + /** + \param N Size of the resulting vector. + \param a0 Starting value of the sequence. + \param a1 Ending value of the sequence. + **/ + static CImg sequence(const unsigned int N, const T& a0, const T& a1) { + if (N) return CImg(1,N).sequence(a0,a1); + return CImg(); + } + + //! Return a 3x3 rotation matrix from an { axis + angle } or a quaternion. + /** + \param x X-coordinate of the rotation axis, or first quaternion coordinate. + \param y Y-coordinate of the rotation axis, or second quaternion coordinate. + \param z Z-coordinate of the rotation axis, or third quaternion coordinate. + \param w Angle of the rotation axis (in degree), or fourth quaternion coordinate. + \param is_quaternion Tell is the four arguments denotes a set { axis + angle } or a quaternion (x,y,z,w). + **/ + static CImg rotation_matrix(const float x, const float y, const float z, const float w, + const bool is_quaternion=false) { + double X, Y, Z, W, N; + if (is_quaternion) { + N = std::sqrt((double)x*x + (double)y*y + (double)z*z + (double)w*w); + if (N>0) { X = x/N; Y = y/N; Z = z/N; W = w/N; } + else { X = Y = Z = 0; W = 1; } + return CImg::matrix((T)(X*X + Y*Y - Z*Z - W*W),(T)(2*Y*Z - 2*X*W),(T)(2*X*Z + 2*Y*W), + (T)(2*X*W + 2*Y*Z),(T)(X*X - Y*Y + Z*Z - W*W),(T)(2*Z*W - 2*X*Y), + (T)(2*Y*W - 2*X*Z),(T)(2*X*Y + 2*Z*W),(T)(X*X - Y*Y - Z*Z + W*W)); + } + N = cimg::hypot((double)x,(double)y,(double)z); + if (N>0) { X = x/N; Y = y/N; Z = z/N; } + else { X = Y = 0; Z = 1; } + const double ang = w*cimg::PI/180, c = std::cos(ang), omc = 1 - c, s = std::sin(ang); + return CImg::matrix((T)(X*X*omc + c),(T)(X*Y*omc - Z*s),(T)(X*Z*omc + Y*s), + (T)(X*Y*omc + Z*s),(T)(Y*Y*omc + c),(T)(Y*Z*omc - X*s), + (T)(X*Z*omc - Y*s),(T)(Y*Z*omc + X*s),(T)(Z*Z*omc + c)); + } + + //@} + //----------------------------------- + // + //! \name Value Manipulation + //@{ + //----------------------------------- + + //! Fill all pixel values with specified value. + /** + \param val Fill value. + **/ + CImg& fill(const T& val) { + if (is_empty()) return *this; + if (val && sizeof(T)!=1) cimg_for(*this,ptrd,T) *ptrd = val; + else std::memset(_data,(int)(ulongT)val,sizeof(T)*size()); // Double cast to allow val to be (void*) + return *this; + } + + //! Fill all pixel values with specified value \newinstance. + CImg get_fill(const T& val) const { + return CImg(_width,_height,_depth,_spectrum).fill(val); + } + + //! Fill sequentially all pixel values with specified values. + /** + \param val0 First fill value. + \param val1 Second fill value. + **/ + CImg& fill(const T& val0, const T& val1) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 1; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 2; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2, const T& val3) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 3; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2, const T& val3) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 4; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 5; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 6; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 7; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 8; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 9; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9, const T& val10) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 10; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9, const T& val10) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9, const T& val10, const T& val11) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 11; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9, const T& val10, const T& val11) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10, + val11); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9, const T& val10, const T& val11, + const T& val12) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 12; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9, const T& val10, const T& val11, + const T& val12) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10, + val11,val12); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9, const T& val10, const T& val11, + const T& val12, const T& val13) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 13; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9, const T& val10, const T& val11, + const T& val12, const T& val13) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10, + val11,val12,val13); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9, const T& val10, const T& val11, + const T& val12, const T& val13, const T& val14) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 14; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9, const T& val10, const T& val11, + const T& val12, const T& val13, const T& val14) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10, + val11,val12,val13,val14); + } + + //! Fill sequentially all pixel values with specified values \overloading. + CImg& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9, const T& val10, const T& val11, + const T& val12, const T& val13, const T& val14, const T& val15) { + if (is_empty()) return *this; + T *ptrd, *ptre = end() - 15; + for (ptrd = _data; ptrd get_fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, + const T& val6, const T& val7, const T& val8, const T& val9, const T& val10, const T& val11, + const T& val12, const T& val13, const T& val14, const T& val15) const { + return CImg(_width,_height,_depth,_spectrum).fill(val0,val1,val2,val3,val4,val5,val6,val7,val8,val9,val10, + val11,val12,val13,val14,val15); + } + + //! Fill sequentially pixel values according to a given expression. + /** + \param expression C-string describing a math formula, or a sequence of values. + \param repeat_values In case a list of values is provided, tells if this list must be repeated for the filling. + \param allow_formula Tells that mathematical formulas are authorized for the filling. + \param list_inputs In case of a mathematical expression, attach a list of images to the specified expression. + \param[out] list_outputs In case of a math expression, list of images atatched to the specified expression. + **/ + CImg& fill(const char *const expression, const bool repeat_values, const bool allow_formula=true, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) { + return _fill(expression,repeat_values,allow_formula,list_inputs,list_outputs,"fill",0); + } + + CImg& _fill(const char *const expression, const bool repeat_values, bool allow_formula, + const CImgList *const list_inputs, CImgList *const list_outputs, + const char *const calling_function, const CImg *provides_copy) { + if (is_empty() || !expression || !*expression) return *this; + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + CImg is_error; + bool is_value_sequence = false; + cimg_abort_init; + + if (allow_formula) { + + // Try to pre-detect regular value sequence to avoid exception thrown by _cimg_math_parser. + double value; + char sep; + const int err = cimg_sscanf(expression,"%lf %c",&value,&sep); + if (err==1 || (err==2 && sep==',')) { + if (err==1) return fill((T)value); + else is_value_sequence = true; + } + + // Try to fill values according to a formula. + _cimg_abort_init_omp; + if (!is_value_sequence) try { + CImg base = provides_copy?provides_copy->get_shared():get_shared(); + _cimg_math_parser mp(expression + (*expression=='>' || *expression=='<' || + *expression=='*' || *expression==':'), + calling_function,base,this,list_inputs,list_outputs,true); + if (!provides_copy && expression && *expression!='>' && *expression!='<' && *expression!=':' && + mp.need_input_copy) + base.assign().assign(*this,false); // Needs input copy + + bool do_in_parallel = false; +#ifdef cimg_use_openmp + cimg_openmp_if(*expression=='*' || *expression==':' || + (mp.is_parallelizable && _width>=320 && _height*_depth*_spectrum>=2)) + do_in_parallel = true; +#endif + if (mp.result_dim) { // Vector-valued expression + const unsigned int N = std::min(mp.result_dim,_spectrum); + const ulongT whd = (ulongT)_width*_height*_depth; + T *ptrd = *expression=='<'?_data + _width*_height*_depth - 1:_data; + if (*expression=='<') { + CImg res(1,mp.result_dim); + cimg_rofYZ(*this,y,z) { + cimg_abort_test; + cimg_rofX(*this,x) { + mp(x,y,z,0,res._data); + const double *ptrs = res._data; + T *_ptrd = ptrd--; for (unsigned int n = N; n>0; --n) { *_ptrd = (T)(*ptrs++); _ptrd+=whd; } + } + } + } else if (*expression=='>' || !do_in_parallel) { + CImg res(1,mp.result_dim); + cimg_forYZ(*this,y,z) { + cimg_abort_test; + cimg_forX(*this,x) { + mp(x,y,z,0,res._data); + const double *ptrs = res._data; + T *_ptrd = ptrd++; for (unsigned int n = N; n>0; --n) { *_ptrd = (T)(*ptrs++); _ptrd+=whd; } + } + } + } else { +#ifdef cimg_use_openmp + cimg_pragma_openmp(parallel) + { + _cimg_math_parser + _mp = omp_get_thread_num()?mp:_cimg_math_parser(), + &lmp = omp_get_thread_num()?_mp:mp; + lmp.is_fill = true; + cimg_pragma_openmp(for collapse(2)) + cimg_forYZ(*this,y,z) _cimg_abort_try_omp { + cimg_abort_test; + CImg res(1,lmp.result_dim); + T *ptrd = data(0,y,z,0); + cimg_forX(*this,x) { + lmp(x,y,z,0,res._data); + const double *ptrs = res._data; + T *_ptrd = ptrd++; for (unsigned int n = N; n>0; --n) { *_ptrd = (T)(*ptrs++); _ptrd+=whd; } + } + } _cimg_abort_catch_omp _cimg_abort_catch_fill_omp + } +#endif + } + + } else { // Scalar-valued expression + T *ptrd = *expression=='<'?end() - 1:_data; + if (*expression=='<') + cimg_rofYZC(*this,y,z,c) { cimg_abort_test; cimg_rofX(*this,x) *(ptrd--) = (T)mp(x,y,z,c); } + else if (*expression=='>' || !do_in_parallel) + cimg_forYZC(*this,y,z,c) { cimg_abort_test; cimg_forX(*this,x) *(ptrd++) = (T)mp(x,y,z,c); } + else { +#ifdef cimg_use_openmp + cimg_pragma_openmp(parallel) + { + _cimg_math_parser + _mp = omp_get_thread_num()?mp:_cimg_math_parser(), + &lmp = omp_get_thread_num()?_mp:mp; + lmp.is_fill = true; + cimg_pragma_openmp(for collapse(3)) + cimg_forYZC(*this,y,z,c) _cimg_abort_try_omp { + cimg_abort_test; + T *ptrd = data(0,y,z,c); + cimg_forX(*this,x) *ptrd++ = (T)lmp(x,y,z,c); + } _cimg_abort_catch_omp _cimg_abort_catch_fill_omp + } +#endif + } + } + mp.end(); + } catch (CImgException& e) { CImg::string(e._message).move_to(is_error); } + } + + // Try to fill values according to a value sequence. + if (!allow_formula || is_value_sequence || is_error) { + CImg item(256); + char sep = 0; + const char *nexpression = expression; + ulongT nb = 0; + const ulongT siz = size(); + T *ptrd = _data; + for (double val = 0; *nexpression && nb0 && cimg_sscanf(item,"%lf",&val)==1 && (sep==',' || sep==';' || err==1)) { + nexpression+=std::strlen(item) + (err>1); + *(ptrd++) = (T)val; + } else break; + } + cimg::exception_mode(omode); + if (nb get_fill(const char *const expression, const bool repeat_values, const bool allow_formula=true, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) const { + return (+*this).fill(expression,repeat_values,allow_formula,list_inputs,list_outputs); + } + + //! Fill sequentially pixel values according to the values found in another image. + /** + \param values Image containing the values used for the filling. + \param repeat_values In case there are less values than necessary in \c values, tells if these values must be + repeated for the filling. + **/ + template + CImg& fill(const CImg& values, const bool repeat_values=true) { + if (is_empty() || !values) return *this; + T *ptrd = _data, *ptre = ptrd + size(); + for (t *ptrs = values._data, *ptrs_end = ptrs + values.size(); ptrs + CImg get_fill(const CImg& values, const bool repeat_values=true) const { + return repeat_values?CImg(_width,_height,_depth,_spectrum).fill(values,repeat_values): + (+*this).fill(values,repeat_values); + } + + //! Fill pixel values along the X-axis at a specified pixel position. + /** + \param y Y-coordinate of the filled column. + \param z Z-coordinate of the filled column. + \param c C-coordinate of the filled column. + \param a0 First fill value. + **/ + CImg& fillX(const unsigned int y, const unsigned int z, const unsigned int c, const int a0, ...) { +#define _cimg_fill1(x,y,z,c,off,siz,t) { \ + va_list ap; va_start(ap,a0); T *ptrd = data(x,y,z,c); *ptrd = (T)a0; \ + for (unsigned int k = 1; k& fillX(const unsigned int y, const unsigned int z, const unsigned int c, const double a0, ...) { + if (y<_height && z<_depth && c<_spectrum) _cimg_fill1(0,y,z,c,1,_width,double); + return *this; + } + + //! Fill pixel values along the Y-axis at a specified pixel position. + /** + \param x X-coordinate of the filled row. + \param z Z-coordinate of the filled row. + \param c C-coordinate of the filled row. + \param a0 First fill value. + **/ + CImg& fillY(const unsigned int x, const unsigned int z, const unsigned int c, const int a0, ...) { + if (x<_width && z<_depth && c<_spectrum) _cimg_fill1(x,0,z,c,_width,_height,int); + return *this; + } + + //! Fill pixel values along the Y-axis at a specified pixel position \overloading. + CImg& fillY(const unsigned int x, const unsigned int z, const unsigned int c, const double a0, ...) { + if (x<_width && z<_depth && c<_spectrum) _cimg_fill1(x,0,z,c,_width,_height,double); + return *this; + } + + //! Fill pixel values along the Z-axis at a specified pixel position. + /** + \param x X-coordinate of the filled slice. + \param y Y-coordinate of the filled slice. + \param c C-coordinate of the filled slice. + \param a0 First fill value. + **/ + CImg& fillZ(const unsigned int x, const unsigned int y, const unsigned int c, const int a0, ...) { + const ulongT wh = (ulongT)_width*_height; + if (x<_width && y<_height && c<_spectrum) _cimg_fill1(x,y,0,c,wh,_depth,int); + return *this; + } + + //! Fill pixel values along the Z-axis at a specified pixel position \overloading. + CImg& fillZ(const unsigned int x, const unsigned int y, const unsigned int c, const double a0, ...) { + const ulongT wh = (ulongT)_width*_height; + if (x<_width && y<_height && c<_spectrum) _cimg_fill1(x,y,0,c,wh,_depth,double); + return *this; + } + + //! Fill pixel values along the C-axis at a specified pixel position. + /** + \param x X-coordinate of the filled channel. + \param y Y-coordinate of the filled channel. + \param z Z-coordinate of the filled channel. + \param a0 First filling value. + **/ + CImg& fillC(const unsigned int x, const unsigned int y, const unsigned int z, const int a0, ...) { + const ulongT whd = (ulongT)_width*_height*_depth; + if (x<_width && y<_height && z<_depth) _cimg_fill1(x,y,z,0,whd,_spectrum,int); + return *this; + } + + //! Fill pixel values along the C-axis at a specified pixel position \overloading. + CImg& fillC(const unsigned int x, const unsigned int y, const unsigned int z, const double a0, ...) { + const ulongT whd = (ulongT)_width*_height*_depth; + if (x<_width && y<_height && z<_depth) _cimg_fill1(x,y,z,0,whd,_spectrum,double); + return *this; + } + + //! Discard specified sequence of values in the image buffer, along a specific axis. + /** + \param values Sequence of values to discard. + \param axis Axis along which the values are discarded. If set to \c 0 (default value) + the method does it for all the buffer values and returns a one-column vector. + \note Discarded values will change the image geometry, so the resulting image + is returned as a one-column vector. + **/ + template + CImg& discard(const CImg& values, const char axis=0) { + if (is_empty() || !values) return *this; + return get_discard(values,axis).move_to(*this); + } + + template + CImg get_discard(const CImg& values, const char axis=0) const { + CImg res; + if (!values) return +*this; + if (is_empty()) return res; + const ulongT vsiz = values.size(); + const char _axis = cimg::lowercase(axis); + ulongT j = 0; + unsigned int k = 0; + int i0 = 0; + res.assign(width(),height(),depth(),spectrum()); + switch (_axis) { + case 'x' : { + cimg_forX(*this,i) { + if ((*this)(i)!=(T)values[j]) { + if (j) --i; + res.draw_image(k,get_columns(i0,i)); + k+=i - i0 + 1; i0 = i + 1; j = 0; + } else { ++j; if (j>=vsiz) { j = 0; i0 = i + 1; } } + } + if (i0=vsiz) { j = 0; i0 = i + 1; } } + } + if (i0=vsiz) { j = 0; i0 = i + 1; } } + } + if (i0=vsiz) { j = 0; i0 = i + 1; } } + } + if (i0=vsiz) { j = 0; i0 = (int)i + 1; }} + } + const ulongT siz = size(); + if ((ulongT)i0& discard(const char axis=0) { + return get_discard(axis).move_to(*this); + } + + //! Discard neighboring duplicates in the image buffer, along the specified axis \newinstance. + CImg get_discard(const char axis=0) const { + CImg res; + if (is_empty()) return res; + const char _axis = cimg::lowercase(axis); + T current = *_data?(T)0:(T)1; + int j = 0; + res.assign(width(),height(),depth(),spectrum()); + switch (_axis) { + case 'x' : { + cimg_forX(*this,i) + if ((*this)(i)!=current) { res.draw_image(j++,get_column(i)); current = (*this)(i); } + res.resize(j,-100,-100,-100,0); + } break; + case 'y' : { + cimg_forY(*this,i) + if ((*this)(0,i)!=current) { res.draw_image(0,j++,get_row(i)); current = (*this)(0,i); } + res.resize(-100,j,-100,-100,0); + } break; + case 'z' : { + cimg_forZ(*this,i) + if ((*this)(0,0,i)!=current) { res.draw_image(0,0,j++,get_slice(i)); current = (*this)(0,0,i); } + res.resize(-100,-100,j,-100,0); + } break; + case 'c' : { + cimg_forC(*this,i) + if ((*this)(0,0,0,i)!=current) { res.draw_image(0,0,0,j++,get_channel(i)); current = (*this)(0,0,0,i); } + res.resize(-100,-100,-100,j,0); + } break; + default : { + res.unroll('y'); + cimg_foroff(*this,i) + if ((*this)[i]!=current) res[j++] = current = (*this)[i]; + res.resize(-100,j,-100,-100,0); + } + } + return res; + } + + //! Invert endianness of all pixel values. + /** + **/ + CImg& invert_endianness() { + cimg::invert_endianness(_data,size()); + return *this; + } + + //! Invert endianness of all pixel values \newinstance. + CImg get_invert_endianness() const { + return (+*this).invert_endianness(); + } + + //! Fill image with random values in specified range. + /** + \param val_min Minimal authorized random value. + \param val_max Maximal authorized random value. + \note Random variables are uniformely distributed in [val_min,val_max]. + **/ + CImg& rand(const T& val_min, const T& val_max) { + const float delta = (float)val_max - (float)val_min + (cimg::type::is_float()?0:1); + if (cimg::type::is_float()) cimg_for(*this,ptrd,T) *ptrd = (T)(val_min + cimg::rand()*delta); + else cimg_for(*this,ptrd,T) *ptrd = std::min(val_max,(T)(val_min + cimg::rand()*delta)); + return *this; + } + + //! Fill image with random values in specified range \newinstance. + CImg get_rand(const T& val_min, const T& val_max) const { + return (+*this).rand(val_min,val_max); + } + + //! Round pixel values. + /** + \param y Rounding precision. + \param rounding_type Rounding type. Can be: + - \c -1: Backward. + - \c 0: Nearest. + - \c 1: Forward. + **/ + CImg& round(const double y=1, const int rounding_type=0) { + if (y>0) + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=8192)) + cimg_rof(*this,ptrd,T) *ptrd = cimg::round(*ptrd,y,rounding_type); + return *this; + } + + //! Round pixel values \newinstance. + CImg get_round(const double y=1, const unsigned int rounding_type=0) const { + return (+*this).round(y,rounding_type); + } + + //! Add random noise to pixel values. + /** + \param sigma Amplitude of the random additive noise. If \p sigma<0, it stands for a percentage of the + global value range. + \param noise_type Type of additive noise (can be \p 0=gaussian, \p 1=uniform, \p 2=Salt and Pepper, + \p 3=Poisson or \p 4=Rician). + \return A reference to the modified image instance. + \note + - For Poisson noise (\p noise_type=3), parameter \p sigma is ignored, as Poisson noise only depends on + the image value itself. + - Function \p CImg::get_noise() is also defined. It returns a non-shared modified copy of the image instance. + \par Example + \code + const CImg img("reference.jpg"), res = img.get_noise(40); + (img,res.normalize(0,255)).display(); + \endcode + \image html ref_noise.jpg + **/ + CImg& noise(const double sigma, const unsigned int noise_type=0) { + if (is_empty()) return *this; + const Tfloat vmin = (Tfloat)cimg::type::min(), vmax = (Tfloat)cimg::type::max(); + Tfloat nsigma = (Tfloat)sigma, m = 0, M = 0; + if (nsigma==0 && noise_type!=3) return *this; + if (nsigma<0 || noise_type==2) m = (Tfloat)min_max(M); + if (nsigma<0) nsigma = (Tfloat)(-nsigma*(M-m)/100.0); + switch (noise_type) { + case 0 : { // Gaussian noise + cimg_rof(*this,ptrd,T) { + Tfloat val = (Tfloat)(*ptrd + nsigma*cimg::grand()); + if (val>vmax) val = vmax; + if (valvmax) val = vmax; + if (val::is_float()) { --m; ++M; } + else { m = (Tfloat)cimg::type::min(); M = (Tfloat)cimg::type::max(); } + } + cimg_rof(*this,ptrd,T) if (cimg::rand(100)vmax) val = vmax; + if (val get_noise(const double sigma, const unsigned int noise_type=0) const { + return (+*this).noise(sigma,noise_type); + } + + //! Linearly normalize pixel values. + /** + \param min_value Minimum desired value of the resulting image. + \param max_value Maximum desired value of the resulting image. + \par Example + \code + const CImg img("reference.jpg"), res = img.get_normalize(160,220); + (img,res).display(); + \endcode + \image html ref_normalize2.jpg + **/ + CImg& normalize(const T& min_value, const T& max_value) { + if (is_empty()) return *this; + const T a = min_value get_normalize(const T& min_value, const T& max_value) const { + return CImg(*this,false).normalize((Tfloat)min_value,(Tfloat)max_value); + } + + //! Normalize multi-valued pixels of the image instance, with respect to their L2-norm. + /** + \par Example + \code + const CImg img("reference.jpg"), res = img.get_normalize(); + (img,res.normalize(0,255)).display(); + \endcode + \image html ref_normalize.jpg + **/ + CImg& normalize() { + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width>=512 && _height*_depth>=16)) + cimg_forYZ(*this,y,z) { + T *ptrd = data(0,y,z,0); + cimg_forX(*this,x) { + const T *ptrs = ptrd; + float n = 0; + cimg_forC(*this,c) { n+=cimg::sqr((float)*ptrs); ptrs+=whd; } + n = (float)std::sqrt(n); + T *_ptrd = ptrd++; + if (n>0) cimg_forC(*this,c) { *_ptrd = (T)(*_ptrd/n); _ptrd+=whd; } + else cimg_forC(*this,c) { *_ptrd = (T)0; _ptrd+=whd; } + } + } + return *this; + } + + //! Normalize multi-valued pixels of the image instance, with respect to their L2-norm \newinstance. + CImg get_normalize() const { + return CImg(*this,false).normalize(); + } + + //! Compute Lp-norm of each multi-valued pixel of the image instance. + /** + \param norm_type Type of computed vector norm (can be \p -1=Linf, or \p greater or equal than 0). + \par Example + \code + const CImg img("reference.jpg"), res = img.get_norm(); + (img,res.normalize(0,255)).display(); + \endcode + \image html ref_norm.jpg + **/ + CImg& norm(const int norm_type=2) { + if (_spectrum==1 && norm_type) return abs(); + return get_norm(norm_type).move_to(*this); + } + + //! Compute L2-norm of each multi-valued pixel of the image instance \newinstance. + CImg get_norm(const int norm_type=2) const { + if (is_empty()) return *this; + if (_spectrum==1 && norm_type) return get_abs(); + const ulongT whd = (ulongT)_width*_height*_depth; + CImg res(_width,_height,_depth); + switch (norm_type) { + case -1 : { // Linf-norm. + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width>=512 && _height*_depth>=16)) + cimg_forYZ(*this,y,z) { + const ulongT off = (ulongT)offset(0,y,z); + const T *ptrs = _data + off; + Tfloat *ptrd = res._data + off; + cimg_forX(*this,x) { + Tfloat n = 0; + const T *_ptrs = ptrs++; + cimg_forC(*this,c) { const Tfloat val = (Tfloat)cimg::abs(*_ptrs); if (val>n) n = val; _ptrs+=whd; } + *(ptrd++) = n; + } + } + } break; + case 0 : { // L0-norm. + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width>=512 && _height*_depth>=16)) + cimg_forYZ(*this,y,z) { + const ulongT off = (ulongT)offset(0,y,z); + const T *ptrs = _data + off; + Tfloat *ptrd = res._data + off; + cimg_forX(*this,x) { + unsigned int n = 0; + const T *_ptrs = ptrs++; + cimg_forC(*this,c) { n+=*_ptrs==0?0:1; _ptrs+=whd; } + *(ptrd++) = (Tfloat)n; + } + } + } break; + case 1 : { // L1-norm. + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width>=512 && _height*_depth>=16)) + cimg_forYZ(*this,y,z) { + const ulongT off = (ulongT)offset(0,y,z); + const T *ptrs = _data + off; + Tfloat *ptrd = res._data + off; + cimg_forX(*this,x) { + Tfloat n = 0; + const T *_ptrs = ptrs++; + cimg_forC(*this,c) { n+=cimg::abs(*_ptrs); _ptrs+=whd; } + *(ptrd++) = n; + } + } + } break; + case 2 : { // L2-norm. + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width>=512 && _height*_depth>=16)) + cimg_forYZ(*this,y,z) { + const ulongT off = (ulongT)offset(0,y,z); + const T *ptrs = _data + off; + Tfloat *ptrd = res._data + off; + cimg_forX(*this,x) { + Tfloat n = 0; + const T *_ptrs = ptrs++; + cimg_forC(*this,c) { n+=cimg::sqr((Tfloat)*_ptrs); _ptrs+=whd; } + *(ptrd++) = (Tfloat)std::sqrt((Tfloat)n); + } + } + } break; + default : { // Linf-norm. + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width>=512 && _height*_depth>=16)) + cimg_forYZ(*this,y,z) { + const ulongT off = (ulongT)offset(0,y,z); + const T *ptrs = _data + off; + Tfloat *ptrd = res._data + off; + cimg_forX(*this,x) { + Tfloat n = 0; + const T *_ptrs = ptrs++; + cimg_forC(*this,c) { n+=std::pow(cimg::abs((Tfloat)*_ptrs),(Tfloat)norm_type); _ptrs+=whd; } + *(ptrd++) = (Tfloat)std::pow((Tfloat)n,1/(Tfloat)norm_type); + } + } + } + } + return res; + } + + //! Cut pixel values in specified range. + /** + \param min_value Minimum desired value of the resulting image. + \param max_value Maximum desired value of the resulting image. + \par Example + \code + const CImg img("reference.jpg"), res = img.get_cut(160,220); + (img,res).display(); + \endcode + \image html ref_cut.jpg + **/ + CImg& cut(const T& min_value, const T& max_value) { + if (is_empty()) return *this; + const T a = min_value=32768)) + cimg_rof(*this,ptrd,T) *ptrd = (*ptrdb)?b:*ptrd); + return *this; + } + + //! Cut pixel values in specified range \newinstance. + CImg get_cut(const T& min_value, const T& max_value) const { + return (+*this).cut(min_value,max_value); + } + + //! Uniformly quantize pixel values. + /** + \param nb_levels Number of quantization levels. + \param keep_range Tells if resulting values keep the same range as the original ones. + \par Example + \code + const CImg img("reference.jpg"), res = img.get_quantize(4); + (img,res).display(); + \endcode + \image html ref_quantize.jpg + **/ + CImg& quantize(const unsigned int nb_levels, const bool keep_range=true) { + if (!nb_levels) + throw CImgArgumentException(_cimg_instance + "quantize(): Invalid quantization request with 0 values.", + cimg_instance); + + if (is_empty()) return *this; + Tfloat m, M = (Tfloat)max_min(m), range = M - m; + if (range>0) { + if (keep_range) + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) { + const unsigned int val = (unsigned int)((*ptrd-m)*nb_levels/range); + *ptrd = (T)(m + std::min(val,nb_levels - 1)*range/nb_levels); + } else + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) { + const unsigned int val = (unsigned int)((*ptrd-m)*nb_levels/range); + *ptrd = (T)std::min(val,nb_levels - 1); + } + } + return *this; + } + + //! Uniformly quantize pixel values \newinstance. + CImg get_quantize(const unsigned int n, const bool keep_range=true) const { + return (+*this).quantize(n,keep_range); + } + + //! Threshold pixel values. + /** + \param value Threshold value + \param soft_threshold Tells if soft thresholding must be applied (instead of hard one). + \param strict_threshold Tells if threshold value is strict. + \par Example + \code + const CImg img("reference.jpg"), res = img.get_threshold(128); + (img,res.normalize(0,255)).display(); + \endcode + \image html ref_threshold.jpg + **/ + CImg& threshold(const T& value, const bool soft_threshold=false, const bool strict_threshold=false) { + if (is_empty()) return *this; + if (strict_threshold) { + if (soft_threshold) + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) { + const T v = *ptrd; + *ptrd = v>value?(T)(v-value):v<-(float)value?(T)(v + value):(T)0; + } + else + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=65536)) + cimg_rof(*this,ptrd,T) *ptrd = *ptrd>value?(T)1:(T)0; + } else { + if (soft_threshold) + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32768)) + cimg_rof(*this,ptrd,T) { + const T v = *ptrd; + *ptrd = v>=value?(T)(v-value):v<=-(float)value?(T)(v + value):(T)0; + } + else + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=65536)) + cimg_rof(*this,ptrd,T) *ptrd = *ptrd>=value?(T)1:(T)0; + } + return *this; + } + + //! Threshold pixel values \newinstance. + CImg get_threshold(const T& value, const bool soft_threshold=false, const bool strict_threshold=false) const { + return (+*this).threshold(value,soft_threshold,strict_threshold); + } + + //! Compute the histogram of pixel values. + /** + \param nb_levels Number of desired histogram levels. + \param min_value Minimum pixel value considered for the histogram computation. + All pixel values lower than \p min_value will not be counted. + \param max_value Maximum pixel value considered for the histogram computation. + All pixel values higher than \p max_value will not be counted. + \note + - The histogram H of an image I is the 1d function where H(x) counts the number of occurences of the value x + in the image I. + - The resulting histogram is always defined in 1d. Histograms of multi-valued images are not multi-dimensional. + \par Example + \code + const CImg img = CImg("reference.jpg").histogram(256); + img.display_graph(0,3); + \endcode + \image html ref_histogram.jpg + **/ + CImg& histogram(const unsigned int nb_levels, const T& min_value, const T& max_value) { + return get_histogram(nb_levels,min_value,max_value).move_to(*this); + } + + //! Compute the histogram of pixel values \overloading. + CImg& histogram(const unsigned int nb_levels) { + return get_histogram(nb_levels).move_to(*this); + } + + //! Compute the histogram of pixel values \newinstance. + CImg get_histogram(const unsigned int nb_levels, const T& min_value, const T& max_value) const { + if (!nb_levels || is_empty()) return CImg(); + const double + vmin = (double)(min_value res(nb_levels,1,1,1,0); + cimg_rof(*this,ptrs,T) { + const T val = *ptrs; + if (val>=vmin && val<=vmax) ++res[val==vmax?nb_levels - 1:(unsigned int)((val - vmin)*nb_levels/(vmax - vmin))]; + } + return res; + } + + //! Compute the histogram of pixel values \newinstance. + CImg get_histogram(const unsigned int nb_levels) const { + if (!nb_levels || is_empty()) return CImg(); + T vmax = 0, vmin = min_max(vmax); + return get_histogram(nb_levels,vmin,vmax); + } + + //! Equalize histogram of pixel values. + /** + \param nb_levels Number of histogram levels used for the equalization. + \param min_value Minimum pixel value considered for the histogram computation. + All pixel values lower than \p min_value will not be counted. + \param max_value Maximum pixel value considered for the histogram computation. + All pixel values higher than \p max_value will not be counted. + \par Example + \code + const CImg img("reference.jpg"), res = img.get_equalize(256); + (img,res).display(); + \endcode + \image html ref_equalize.jpg + **/ + CImg& equalize(const unsigned int nb_levels, const T& min_value, const T& max_value) { + if (!nb_levels || is_empty()) return *this; + const T + vmin = min_value hist = get_histogram(nb_levels,vmin,vmax); + ulongT cumul = 0; + cimg_forX(hist,pos) { cumul+=hist[pos]; hist[pos] = cumul; } + if (!cumul) cumul = 1; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=1048576)) + cimg_rof(*this,ptrd,T) { + const int pos = (int)((*ptrd-vmin)*(nb_levels - 1.)/(vmax-vmin)); + if (pos>=0 && pos<(int)nb_levels) *ptrd = (T)(vmin + (vmax-vmin)*hist[pos]/cumul); + } + return *this; + } + + //! Equalize histogram of pixel values \overloading. + CImg& equalize(const unsigned int nb_levels) { + if (!nb_levels || is_empty()) return *this; + T vmax = 0, vmin = min_max(vmax); + return equalize(nb_levels,vmin,vmax); + } + + //! Equalize histogram of pixel values \newinstance. + CImg get_equalize(const unsigned int nblevels, const T& val_min, const T& val_max) const { + return (+*this).equalize(nblevels,val_min,val_max); + } + + //! Equalize histogram of pixel values \newinstance. + CImg get_equalize(const unsigned int nblevels) const { + return (+*this).equalize(nblevels); + } + + //! Index multi-valued pixels regarding to a specified colormap. + /** + \param colormap Multi-valued colormap used as the basis for multi-valued pixel indexing. + \param dithering Level of dithering (0=disable, 1=standard level). + \param map_indexes Tell if the values of the resulting image are the colormap indices or the colormap vectors. + \note + - \p img.index(colormap,dithering,1) is equivalent to img.index(colormap,dithering,0).map(colormap). + \par Example + \code + const CImg img("reference.jpg"), colormap(3,1,1,3, 0,128,255, 0,128,255, 0,128,255); + const CImg res = img.get_index(colormap,1,true); + (img,res).display(); + \endcode + \image html ref_index.jpg + **/ + template + CImg& index(const CImg& colormap, const float dithering=1, const bool map_indexes=false) { + return get_index(colormap,dithering,map_indexes).move_to(*this); + } + + //! Index multi-valued pixels regarding to a specified colormap \newinstance. + template + CImg::Tuint> + get_index(const CImg& colormap, const float dithering=1, const bool map_indexes=true) const { + if (colormap._spectrum!=_spectrum) + throw CImgArgumentException(_cimg_instance + "index(): Instance and specified colormap (%u,%u,%u,%u,%p) " + "have incompatible dimensions.", + cimg_instance, + colormap._width,colormap._height,colormap._depth,colormap._spectrum,colormap._data); + + typedef typename CImg::Tuint tuint; + if (is_empty()) return CImg(); + const ulongT + whd = (ulongT)_width*_height*_depth, + pwhd = (ulongT)colormap._width*colormap._height*colormap._depth; + CImg res(_width,_height,_depth,map_indexes?_spectrum:1); + tuint *ptrd = res._data; + if (dithering>0) { // Dithered versions. + const float ndithering = cimg::cut(dithering,0,1)/16; + Tfloat valm = 0, valM = (Tfloat)max_min(valm); + if (valm==valM && valm>=0 && valM<=255) { valm = 0; valM = 255; } + CImg cache = get_crop(-1,0,0,0,_width,1,0,_spectrum - 1); + Tfloat *cache_current = cache.data(1,0,0,0), *cache_next = cache.data(1,1,0,0); + const ulongT cwhd = (ulongT)cache._width*cache._height*cache._depth; + switch (_spectrum) { + case 1 : { // Optimized for scalars. + cimg_forYZ(*this,y,z) { + if (yvalM?valM:_val0; + Tfloat distmin = cimg::type::max(); const t *ptrmin0 = colormap._data; + for (const t *ptrp0 = colormap._data, *ptrp_end = ptrp0 + pwhd; ptrp0valM?valM:_val0, + _val1 = (Tfloat)*ptrs1, val1 = _val1valM?valM:_val1; + Tfloat distmin = cimg::type::max(); const t *ptrmin0 = colormap._data; + for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp_end = ptrp1; ptrp0valM?valM:_val0, + _val1 = (Tfloat)*ptrs1, val1 = _val1valM?valM:_val1, + _val2 = (Tfloat)*ptrs2, val2 = _val2valM?valM:_val2; + Tfloat distmin = cimg::type::max(); const t *ptrmin0 = colormap._data; + for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp2 = ptrp1 + pwhd, + *ptrp_end = ptrp1; ptrp0::max(); const t *ptrmin = colormap._data; + for (const t *ptrp = colormap._data, *ptrp_end = ptrp + pwhd; ptrpvalM?valM:_val; + dist+=cimg::sqr((*_ptrs=val) - (Tfloat)*_ptrp); _ptrs+=cwhd; _ptrp+=pwhd; + } + if (dist=64 && _height*_depth>=16 && pwhd>=16)) + cimg_forYZ(*this,y,z) { + tuint *ptrd = res.data(0,y,z); + for (const T *ptrs0 = data(0,y,z), *ptrs_end = ptrs0 + _width; ptrs0::max(); const t *ptrmin0 = colormap._data; + for (const t *ptrp0 = colormap._data, *ptrp_end = ptrp0 + pwhd; ptrp0=64 && _height*_depth>=16 && pwhd>=16)) + cimg_forYZ(*this,y,z) { + tuint *ptrd = res.data(0,y,z), *ptrd1 = ptrd + whd; + for (const T *ptrs0 = data(0,y,z), *ptrs1 = ptrs0 + whd, *ptrs_end = ptrs0 + _width; ptrs0::max(); const t *ptrmin0 = colormap._data; + for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp_end = ptrp1; ptrp0=64 && _height*_depth>=16 && pwhd>=16)) + cimg_forYZ(*this,y,z) { + tuint *ptrd = res.data(0,y,z), *ptrd1 = ptrd + whd, *ptrd2 = ptrd1 + whd; + for (const T *ptrs0 = data(0,y,z), *ptrs1 = ptrs0 + whd, *ptrs2 = ptrs1 + whd, + *ptrs_end = ptrs0 + _width; ptrs0::max(); const t *ptrmin0 = colormap._data; + for (const t *ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp2 = ptrp1 + pwhd, + *ptrp_end = ptrp1; ptrp0=64 && _height*_depth>=16 && pwhd>=16)) + cimg_forYZ(*this,y,z) { + tuint *ptrd = res.data(0,y,z); + for (const T *ptrs = data(0,y,z), *ptrs_end = ptrs + _width; ptrs::max(); const t *ptrmin = colormap._data; + for (const t *ptrp = colormap._data, *ptrp_end = ptrp + pwhd; ptrp img("reference.jpg"), + colormap1(3,1,1,3, 0,128,255, 0,128,255, 0,128,255), + colormap2(3,1,1,3, 255,0,0, 0,255,0, 0,0,255), + res = img.get_index(colormap1,0).map(colormap2); + (img,res).display(); + \endcode + \image html ref_map.jpg + **/ + template + CImg& map(const CImg& colormap, const unsigned int boundary_conditions=0) { + return get_map(colormap,boundary_conditions).move_to(*this); + } + + //! Map predefined colormap on the scalar (indexed) image instance \newinstance. + template + CImg get_map(const CImg& colormap, const unsigned int boundary_conditions=0) const { + if (_spectrum!=1 && colormap._spectrum!=1) + throw CImgArgumentException(_cimg_instance + "map(): Instance and specified colormap (%u,%u,%u,%u,%p) " + "have incompatible dimensions.", + cimg_instance, + colormap._width,colormap._height,colormap._depth,colormap._spectrum,colormap._data); + + const ulongT + whd = (ulongT)_width*_height*_depth, + cwhd = (ulongT)colormap._width*colormap._height*colormap._depth, + cwhd2 = 2*cwhd; + CImg res(_width,_height,_depth,colormap._spectrum==1?_spectrum:colormap._spectrum); + switch (colormap._spectrum) { + + case 1 : { // Optimized for scalars + const T *ptrs = _data; + switch (boundary_conditions) { + case 3 : // Mirror + cimg_for(res,ptrd,t) { + const ulongT ind = ((ulongT)*(ptrs++))%cwhd2; + *ptrd = colormap[ind& label(const bool is_high_connectivity=false, const Tfloat tolerance=0) { + return get_label(is_high_connectivity,tolerance).move_to(*this); + } + + //! Label connected components \newinstance. + CImg get_label(const bool is_high_connectivity=false, + const Tfloat tolerance=0) const { + if (is_empty()) return CImg(); + + // Create neighborhood tables. + int dx[13], dy[13], dz[13], nb = 0; + dx[nb] = 1; dy[nb] = 0; dz[nb++] = 0; + dx[nb] = 0; dy[nb] = 1; dz[nb++] = 0; + if (is_high_connectivity) { + dx[nb] = 1; dy[nb] = 1; dz[nb++] = 0; + dx[nb] = 1; dy[nb] = -1; dz[nb++] = 0; + } + if (_depth>1) { // 3d version. + dx[nb] = 0; dy[nb] = 0; dz[nb++]=1; + if (is_high_connectivity) { + dx[nb] = 1; dy[nb] = 1; dz[nb++] = -1; + dx[nb] = 1; dy[nb] = 0; dz[nb++] = -1; + dx[nb] = 1; dy[nb] = -1; dz[nb++] = -1; + dx[nb] = 0; dy[nb] = 1; dz[nb++] = -1; + + dx[nb] = 0; dy[nb] = 1; dz[nb++] = 1; + dx[nb] = 1; dy[nb] = -1; dz[nb++] = 1; + dx[nb] = 1; dy[nb] = 0; dz[nb++] = 1; + dx[nb] = 1; dy[nb] = 1; dz[nb++] = 1; + } + } + return _label(nb,dx,dy,dz,tolerance); + } + + //! Label connected components \overloading. + /** + \param connectivity_mask Mask of the neighboring pixels. + \param tolerance Tolerance used to determine if two neighboring pixels belong to the same region. + **/ + template + CImg& label(const CImg& connectivity_mask, const Tfloat tolerance=0) { + return get_label(connectivity_mask,tolerance).move_to(*this); + } + + //! Label connected components \newinstance. + template + CImg get_label(const CImg& connectivity_mask, + const Tfloat tolerance=0) const { + int nb = 0; + cimg_for(connectivity_mask,ptr,t) if (*ptr) ++nb; + CImg dx(nb,1,1,1,0), dy(nb,1,1,1,0), dz(nb,1,1,1,0); + nb = 0; + cimg_forXYZ(connectivity_mask,x,y,z) if ((x || y || z) && + connectivity_mask(x,y,z)) { + dx[nb] = x; dy[nb] = y; dz[nb++] = z; + } + return _label(nb,dx,dy,dz,tolerance); + } + + CImg _label(const unsigned int nb, const int *const dx, + const int *const dy, const int *const dz, + const Tfloat tolerance) const { + CImg res(_width,_height,_depth,_spectrum); + cimg_forC(*this,c) { + CImg _res = res.get_shared_channel(c); + + // Init label numbers. + ulongT *ptr = _res.data(); + cimg_foroff(_res,p) *(ptr++) = p; + + // For each neighbour-direction, label. + for (unsigned int n = 0; n& _system_strescape() { +#define cimg_system_strescape(c,s) case c : if (p!=ptrs) CImg(ptrs,(unsigned int)(p-ptrs),1,1,1,false).\ + move_to(list); \ + CImg(s,(unsigned int)std::strlen(s),1,1,1,false).move_to(list); ptrs = p + 1; break + CImgList list; + const T *ptrs = _data; + cimg_for(*this,p,T) switch ((int)*p) { + cimg_system_strescape('\\',"\\\\"); + cimg_system_strescape('\"',"\\\""); + cimg_system_strescape('!',"\"\\!\""); + cimg_system_strescape('`',"\\`"); + cimg_system_strescape('$',"\\$"); + } + if (ptrs(ptrs,(unsigned int)(end()-ptrs),1,1,1,false).move_to(list); + return (list>'x').move_to(*this); + } + + //@} + //--------------------------------- + // + //! \name Color Base Management + //@{ + //--------------------------------- + + //! Return colormap \e "default", containing 256 colors entries in RGB. + /** + \return The following \c 256x1x1x3 colormap is returned: + \image html ref_colormap_default.jpg + **/ + static const CImg& default_LUT256() { + static CImg colormap; + cimg::mutex(8); + if (!colormap) { + colormap.assign(1,256,1,3); + for (unsigned int index = 0, r = 16; r<256; r+=32) + for (unsigned int g = 16; g<256; g+=32) + for (unsigned int b = 32; b<256; b+=64) { + colormap(0,index,0) = (Tuchar)r; + colormap(0,index,1) = (Tuchar)g; + colormap(0,index++,2) = (Tuchar)b; + } + } + cimg::mutex(8,0); + return colormap; + } + + //! Return colormap \e "HSV", containing 256 colors entries in RGB. + /** + \return The following \c 256x1x1x3 colormap is returned: + \image html ref_colormap_hsv.jpg + **/ + static const CImg& HSV_LUT256() { + static CImg colormap; + cimg::mutex(8); + if (!colormap) { + CImg tmp(1,256,1,3,1); + tmp.get_shared_channel(0).sequence(0,359); + colormap = tmp.HSVtoRGB(); + } + cimg::mutex(8,0); + return colormap; + } + + //! Return colormap \e "lines", containing 256 colors entries in RGB. + /** + \return The following \c 256x1x1x3 colormap is returned: + \image html ref_colormap_lines.jpg + **/ + static const CImg& lines_LUT256() { + static const unsigned char pal[] = { + 217,62,88,75,1,237,240,12,56,160,165,116,1,1,204,2,15,248,148,185,133,141,46,246,222,116,16,5,207,226, + 17,114,247,1,214,53,238,0,95,55,233,235,109,0,17,54,33,0,90,30,3,0,94,27,19,0,68,212,166,130,0,15,7,119, + 238,2,246,198,0,3,16,10,13,2,25,28,12,6,2,99,18,141,30,4,3,140,12,4,30,233,7,10,0,136,35,160,168,184,20, + 233,0,1,242,83,90,56,180,44,41,0,6,19,207,5,31,214,4,35,153,180,75,21,76,16,202,218,22,17,2,136,71,74, + 81,251,244,148,222,17,0,234,24,0,200,16,239,15,225,102,230,186,58,230,110,12,0,7,129,249,22,241,37,219, + 1,3,254,210,3,212,113,131,197,162,123,252,90,96,209,60,0,17,0,180,249,12,112,165,43,27,229,77,40,195,12, + 87,1,210,148,47,80,5,9,1,137,2,40,57,205,244,40,8,252,98,0,40,43,206,31,187,0,180,1,69,70,227,131,108,0, + 223,94,228,35,248,243,4,16,0,34,24,2,9,35,73,91,12,199,51,1,249,12,103,131,20,224,2,70,32, + 233,1,165,3,8,154,246,233,196,5,0,6,183,227,247,195,208,36,0,0,226,160,210,198,69,153,210,1,23,8,192,2,4, + 137,1,0,52,2,249,241,129,0,0,234,7,238,71,7,32,15,157,157,252,158,2,250,6,13,30,11,162,0,199,21,11,27,224, + 4,157,20,181,111,187,218,3,0,11,158,230,196,34,223,22,248,135,254,210,157,219,0,117,239,3,255,4,227,5,247, + 11,4,3,188,111,11,105,195,2,0,14,1,21,219,192,0,183,191,113,241,1,12,17,248,0,48,7,19,1,254,212,0,239,246, + 0,23,0,250,165,194,194,17,3,253,0,24,6,0,141,167,221,24,212,2,235,243,0,0,205,1,251,133,204,28,4,6,1,10, + 141,21,74,12,236,254,228,19,1,0,214,1,186,13,13,6,13,16,27,209,6,216,11,207,251,59,32,9,155,23,19,235,143, + 116,6,213,6,75,159,23,6,0,228,4,10,245,249,1,7,44,234,4,102,174,0,19,239,103,16,15,18,8,214,22,4,47,244, + 255,8,0,251,173,1,212,252,250,251,252,6,0,29,29,222,233,246,5,149,0,182,180,13,151,0,203,183,0,35,149,0, + 235,246,254,78,9,17,203,73,11,195,0,3,5,44,0,0,237,5,106,6,130,16,214,20,168,247,168,4,207,11,5,1,232,251, + 129,210,116,231,217,223,214,27,45,38,4,177,186,249,7,215,172,16,214,27,249,230,236,2,34,216,217,0,175,30, + 243,225,244,182,20,212,2,226,21,255,20,0,2,13,62,13,191,14,76,64,20,121,4,118,0,216,1,147,0,2,210,1,215, + 95,210,236,225,184,46,0,248,24,11,1,9,141,250,243,9,221,233,160,11,147,2,55,8,23,12,253,9,0,54,0,231,6,3, + 141,8,2,246,9,180,5,11,8,227,8,43,110,242,1,130,5,97,36,10,6,219,86,133,11,108,6,1,5,244,67,19,28,0,174, + 154,16,127,149,252,188,196,196,228,244,9,249,0,0,0,37,170,32,250,0,73,255,23,3,224,234,38,195,198,0,255,87, + 33,221,174,31,3,0,189,228,6,153,14,144,14,108,197,0,9,206,245,254,3,16,253,178,248,0,95,125,8,0,3,168,21, + 23,168,19,50,240,244,185,0,1,144,10,168,31,82,1,13 }; + static const CImg colormap(pal,1,256,1,3,false); + return colormap; + } + + //! Return colormap \e "hot", containing 256 colors entries in RGB. + /** + \return The following \c 256x1x1x3 colormap is returned: + \image html ref_colormap_hot.jpg + **/ + static const CImg& hot_LUT256() { + static CImg colormap; + cimg::mutex(8); + if (!colormap) { + colormap.assign(1,4,1,3,(T)0); + colormap[1] = colormap[2] = colormap[3] = colormap[6] = colormap[7] = colormap[11] = 255; + colormap.resize(1,256,1,3,3); + } + cimg::mutex(8,0); + return colormap; + } + + //! Return colormap \e "cool", containing 256 colors entries in RGB. + /** + \return The following \c 256x1x1x3 colormap is returned: + \image html ref_colormap_cool.jpg + **/ + static const CImg& cool_LUT256() { + static CImg colormap; + cimg::mutex(8); + if (!colormap) colormap.assign(1,2,1,3).fill((T)0,(T)255,(T)255,(T)0,(T)255,(T)255).resize(1,256,1,3,3); + cimg::mutex(8,0); + return colormap; + } + + //! Return colormap \e "jet", containing 256 colors entries in RGB. + /** + \return The following \c 256x1x1x3 colormap is returned: + \image html ref_colormap_jet.jpg + **/ + static const CImg& jet_LUT256() { + static CImg colormap; + cimg::mutex(8); + if (!colormap) { + colormap.assign(1,4,1,3,(T)0); + colormap[2] = colormap[3] = colormap[5] = colormap[6] = colormap[8] = colormap[9] = 255; + colormap.resize(1,256,1,3,3); + } + cimg::mutex(8,0); + return colormap; + } + + //! Return colormap \e "flag", containing 256 colors entries in RGB. + /** + \return The following \c 256x1x1x3 colormap is returned: + \image html ref_colormap_flag.jpg + **/ + static const CImg& flag_LUT256() { + static CImg colormap; + cimg::mutex(8); + if (!colormap) { + colormap.assign(1,4,1,3,(T)0); + colormap[0] = colormap[1] = colormap[5] = colormap[9] = colormap[10] = 255; + colormap.resize(1,256,1,3,0,2); + } + cimg::mutex(8,0); + return colormap; + } + + //! Return colormap \e "cube", containing 256 colors entries in RGB. + /** + \return The following \c 256x1x1x3 colormap is returned: + \image html ref_colormap_cube.jpg + **/ + static const CImg& cube_LUT256() { + static CImg colormap; + cimg::mutex(8); + if (!colormap) { + colormap.assign(1,8,1,3,(T)0); + colormap[1] = colormap[3] = colormap[5] = colormap[7] = + colormap[10] = colormap[11] = colormap[12] = colormap[13] = + colormap[20] = colormap[21] = colormap[22] = colormap[23] = 255; + colormap.resize(1,256,1,3,3); + } + cimg::mutex(8,0); + return colormap; + } + + //! Convert pixel values from sRGB to RGB color spaces. + CImg& sRGBtoRGB() { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32)) + cimg_rof(*this,ptr,T) { + const Tfloat + sval = (Tfloat)*ptr/255, + val = (Tfloat)(sval<=0.04045f?sval/12.92f:std::pow((sval + 0.055f)/(1.055f),2.4f)); + *ptr = (T)cimg::cut(val*255,0,255); + } + return *this; + } + + //! Convert pixel values from sRGB to RGB color spaces \newinstance. + CImg get_sRGBtoRGB() const { + return CImg(*this,false).sRGBtoRGB(); + } + + //! Convert pixel values from RGB to sRGB color spaces. + CImg& RGBtosRGB() { + if (is_empty()) return *this; + cimg_pragma_openmp(parallel for cimg_openmp_if(size()>=32)) + cimg_rof(*this,ptr,T) { + const Tfloat + val = (Tfloat)*ptr/255, + sval = (Tfloat)(val<=0.0031308f?val*12.92f:1.055f*std::pow(val,0.416667f) - 0.055f); + *ptr = (T)cimg::cut(sval*255,0,255); + } + return *this; + } + + //! Convert pixel values from RGB to sRGB color spaces \newinstance. + CImg get_RGBtosRGB() const { + return CImg(*this,false).RGBtosRGB(); + } + + //! Convert pixel values from RGB to HSI color spaces. + CImg& RGBtoHSI() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "RGBtoHSI(): Instance is not a RGB image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=256)) + for (ulongT N = 0; N0) H = B<=G?theta:360 - theta; + if (sum>0) S = 1 - 3*m/sum; + I = sum/(3*255); + p1[N] = (T)cimg::cut(H,0,360); + p2[N] = (T)cimg::cut(S,0,1); + p3[N] = (T)cimg::cut(I,0,1); + } + return *this; + } + + //! Convert pixel values from RGB to HSI color spaces \newinstance. + CImg get_RGBtoHSI() const { + return CImg(*this,false).RGBtoHSI(); + } + + //! Convert pixel values from HSI to RGB color spaces. + CImg& HSItoRGB() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "HSItoRGB(): Instance is not a HSI image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=256)) + for (ulongT N = 0; N get_HSItoRGB() const { + return CImg< Tuchar>(*this,false).HSItoRGB(); + } + + //! Convert pixel values from RGB to HSL color spaces. + CImg& RGBtoHSL() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "RGBtoHSL(): Instance is not a RGB image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=256)) + for (ulongT N = 0; N=6) H-=6; + H*=60; + S = 2*L<=1?(M - m)/(M + m):(M - m)/(2*255 - M - m); + } + p1[N] = (T)cimg::cut(H,0,360); + p2[N] = (T)cimg::cut(S,0,1); + p3[N] = (T)cimg::cut(L,0,1); + } + return *this; + } + + //! Convert pixel values from RGB to HSL color spaces \newinstance. + CImg get_RGBtoHSL() const { + return CImg(*this,false).RGBtoHSL(); + } + + //! Convert pixel values from HSL to RGB color spaces. + CImg& HSLtoRGB() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "HSLtoRGB(): Instance is not a HSL image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=256)) + for (ulongT N = 0; N1?tr - 1:(Tfloat)tr, + ntg = tg<0?tg + 1:tg>1?tg - 1:(Tfloat)tg, + ntb = tb<0?tb + 1:tb>1?tb - 1:(Tfloat)tb, + R = 6*ntr<1?p + (q - p)*6*ntr:2*ntr<1?q:3*ntr<2?p + (q - p)*6*(2.0f/3 - ntr):p, + G = 6*ntg<1?p + (q - p)*6*ntg:2*ntg<1?q:3*ntg<2?p + (q - p)*6*(2.0f/3 - ntg):p, + B = 6*ntb<1?p + (q - p)*6*ntb:2*ntb<1?q:3*ntb<2?p + (q - p)*6*(2.0f/3 - ntb):p; + p1[N] = (T)cimg::cut(255*R,0,255); + p2[N] = (T)cimg::cut(255*G,0,255); + p3[N] = (T)cimg::cut(255*B,0,255); + } + return *this; + } + + //! Convert pixel values from HSL to RGB color spaces \newinstance. + CImg get_HSLtoRGB() const { + return CImg(*this,false).HSLtoRGB(); + } + + //! Convert pixel values from RGB to HSV color spaces. + CImg& RGBtoHSV() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "RGBtoHSV(): Instance is not a RGB image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=256)) + for (ulongT N = 0; N=6) H-=6; + H*=60; + S = (M - m)/M; + } + p1[N] = (T)cimg::cut(H,0,360); + p2[N] = (T)cimg::cut(S,0,1); + p3[N] = (T)cimg::cut(M/255,0,1); + } + return *this; + } + + //! Convert pixel values from RGB to HSV color spaces \newinstance. + CImg get_RGBtoHSV() const { + return CImg(*this,false).RGBtoHSV(); + } + + //! Convert pixel values from HSV to RGB color spaces. + CImg& HSVtoRGB() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "HSVtoRGB(): Instance is not a HSV image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=256)) + for (ulongT N = 0; N get_HSVtoRGB() const { + return CImg(*this,false).HSVtoRGB(); + } + + //! Convert pixel values from RGB to YCbCr color spaces. + CImg& RGBtoYCbCr() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "RGBtoYCbCr(): Instance is not a RGB image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=512)) + for (ulongT N = 0; N get_RGBtoYCbCr() const { + return CImg(*this,false).RGBtoYCbCr(); + } + + //! Convert pixel values from RGB to YCbCr color spaces. + CImg& YCbCrtoRGB() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "YCbCrtoRGB(): Instance is not a YCbCr image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=512)) + for (ulongT N = 0; N get_YCbCrtoRGB() const { + return CImg(*this,false).YCbCrtoRGB(); + } + + //! Convert pixel values from RGB to YUV color spaces. + CImg& RGBtoYUV() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "RGBtoYUV(): Instance is not a RGB image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=16384)) + for (ulongT N = 0; N get_RGBtoYUV() const { + return CImg(*this,false).RGBtoYUV(); + } + + //! Convert pixel values from YUV to RGB color spaces. + CImg& YUVtoRGB() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "YUVtoRGB(): Instance is not a YUV image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=16384)) + for (ulongT N = 0; N get_YUVtoRGB() const { + return CImg< Tuchar>(*this,false).YUVtoRGB(); + } + + //! Convert pixel values from RGB to CMY color spaces. + CImg& RGBtoCMY() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "RGBtoCMY(): Instance is not a RGB image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=2048)) + for (ulongT N = 0; N get_RGBtoCMY() const { + return CImg(*this,false).RGBtoCMY(); + } + + //! Convert pixel values from CMY to RGB color spaces. + CImg& CMYtoRGB() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "CMYtoRGB(): Instance is not a CMY image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=2048)) + for (ulongT N = 0; N get_CMYtoRGB() const { + return CImg(*this,false).CMYtoRGB(); + } + + //! Convert pixel values from CMY to CMYK color spaces. + CImg& CMYtoCMYK() { + return get_CMYtoCMYK().move_to(*this); + } + + //! Convert pixel values from CMY to CMYK color spaces \newinstance. + CImg get_CMYtoCMYK() const { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "CMYtoCMYK(): Instance is not a CMY image.", + cimg_instance); + + CImg res(_width,_height,_depth,4); + const T *ps1 = data(0,0,0,0), *ps2 = data(0,0,0,1), *ps3 = data(0,0,0,2); + Tfloat *pd1 = res.data(0,0,0,0), *pd2 = res.data(0,0,0,1), *pd3 = res.data(0,0,0,2), *pd4 = res.data(0,0,0,3); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=1024)) + for (ulongT N = 0; N=255) C = M = Y = 0; + else { const Tfloat K1 = 255 - K; C = 255*(C - K)/K1; M = 255*(M - K)/K1; Y = 255*(Y - K)/K1; } + pd1[N] = (Tfloat)cimg::cut(C,0,255), + pd2[N] = (Tfloat)cimg::cut(M,0,255), + pd3[N] = (Tfloat)cimg::cut(Y,0,255), + pd4[N] = (Tfloat)cimg::cut(K,0,255); + } + return res; + } + + //! Convert pixel values from CMYK to CMY color spaces. + CImg& CMYKtoCMY() { + return get_CMYKtoCMY().move_to(*this); + } + + //! Convert pixel values from CMYK to CMY color spaces \newinstance. + CImg get_CMYKtoCMY() const { + if (_spectrum!=4) + throw CImgInstanceException(_cimg_instance + "CMYKtoCMY(): Instance is not a CMYK image.", + cimg_instance); + + CImg res(_width,_height,_depth,3); + const T *ps1 = data(0,0,0,0), *ps2 = data(0,0,0,1), *ps3 = data(0,0,0,2), *ps4 = data(0,0,0,3); + Tfloat *pd1 = res.data(0,0,0,0), *pd2 = res.data(0,0,0,1), *pd3 = res.data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=1024)) + for (ulongT N = 0; N& RGBtoXYZ(const bool use_D65=true) { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "RGBtoXYZ(): Instance is not a RGB image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=2048)) + for (ulongT N = 0; N get_RGBtoXYZ(const bool use_D65=true) const { + return CImg(*this,false).RGBtoXYZ(use_D65); + } + + //! Convert pixel values from XYZ to RGB color spaces. + /** + \param use_D65 Tell to use the D65 illuminant (D50 otherwise). + **/ + CImg& XYZtoRGB(const bool use_D65=true) { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "XYZtoRGB(): Instance is not a XYZ image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=2048)) + for (ulongT N = 0; N get_XYZtoRGB(const bool use_D65=true) const { + return CImg(*this,false).XYZtoRGB(use_D65); + } + + //! Convert pixel values from XYZ to Lab color spaces. + CImg& XYZtoLab(const bool use_D65=true) { +#define _cimg_Labf(x) (24389*(x)>216?cimg::cbrt(x):(24389*(x)/27 + 16)/116) + + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "XYZtoLab(): Instance is not a XYZ image.", + cimg_instance); + const CImg white = CImg(1,1,1,3,255).RGBtoXYZ(use_D65); + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=128)) + for (ulongT N = 0; N get_XYZtoLab(const bool use_D65=true) const { + return CImg(*this,false).XYZtoLab(use_D65); + } + + //! Convert pixel values from Lab to XYZ color spaces. + CImg& LabtoXYZ(const bool use_D65=true) { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "LabtoXYZ(): Instance is not a Lab image.", + cimg_instance); + const CImg white = CImg(1,1,1,3,255).RGBtoXYZ(use_D65); + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=128)) + for (ulongT N = 0; N216?cX*cX*cX:(116*cX - 16)*27/24389), + Y = (Tfloat)(27*L>216?cY*cY*cY:27*L/24389), + Z = (Tfloat)(24389*cZ>216?cZ*cZ*cZ:(116*cZ - 16)*27/24389); + p1[N] = (T)(X*white[0]); + p2[N] = (T)(Y*white[1]); + p3[N] = (T)(Z*white[2]); + } + return *this; + } + + //! Convert pixel values from Lab to XYZ color spaces \newinstance. + CImg get_LabtoXYZ(const bool use_D65=true) const { + return CImg(*this,false).LabtoXYZ(use_D65); + } + + //! Convert pixel values from XYZ to xyY color spaces. + CImg& XYZtoxyY() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "XYZtoxyY(): Instance is not a XYZ image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=4096)) + for (ulongT N = 0; N0?sum:1; + p1[N] = (T)(X/nsum); + p2[N] = (T)(Y/nsum); + p3[N] = (T)Y; + } + return *this; + } + + //! Convert pixel values from XYZ to xyY color spaces \newinstance. + CImg get_XYZtoxyY() const { + return CImg(*this,false).XYZtoxyY(); + } + + //! Convert pixel values from xyY pixels to XYZ color spaces. + CImg& xyYtoXYZ() { + if (_spectrum!=3) + throw CImgInstanceException(_cimg_instance + "xyYtoXYZ(): Instance is not a xyY image.", + cimg_instance); + + T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for cimg_openmp_if(whd>=4096)) + for (ulongT N = 0; N0?py:1; + p1[N] = (T)(px*Y/ny); + p2[N] = (T)Y; + p3[N] = (T)((1 - px - py)*Y/ny); + } + return *this; + } + + //! Convert pixel values from xyY pixels to XYZ color spaces \newinstance. + CImg get_xyYtoXYZ() const { + return CImg(*this,false).xyYtoXYZ(); + } + + //! Convert pixel values from RGB to Lab color spaces. + CImg& RGBtoLab(const bool use_D65=true) { + return RGBtoXYZ(use_D65).XYZtoLab(use_D65); + } + + //! Convert pixel values from RGB to Lab color spaces \newinstance. + CImg get_RGBtoLab(const bool use_D65=true) const { + return CImg(*this,false).RGBtoLab(use_D65); + } + + //! Convert pixel values from Lab to RGB color spaces. + CImg& LabtoRGB(const bool use_D65=true) { + return LabtoXYZ().XYZtoRGB(use_D65); + } + + //! Convert pixel values from Lab to RGB color spaces \newinstance. + CImg get_LabtoRGB(const bool use_D65=true) const { + return CImg(*this,false).LabtoRGB(use_D65); + } + + //! Convert pixel values from RGB to xyY color spaces. + CImg& RGBtoxyY(const bool use_D65=true) { + return RGBtoXYZ(use_D65).XYZtoxyY(); + } + + //! Convert pixel values from RGB to xyY color spaces \newinstance. + CImg get_RGBtoxyY(const bool use_D65=true) const { + return CImg(*this,false).RGBtoxyY(use_D65); + } + + //! Convert pixel values from xyY to RGB color spaces. + CImg& xyYtoRGB(const bool use_D65=true) { + return xyYtoXYZ().XYZtoRGB(use_D65); + } + + //! Convert pixel values from xyY to RGB color spaces \newinstance. + CImg get_xyYtoRGB(const bool use_D65=true) const { + return CImg(*this,false).xyYtoRGB(use_D65); + } + + //! Convert pixel values from RGB to CMYK color spaces. + CImg& RGBtoCMYK() { + return RGBtoCMY().CMYtoCMYK(); + } + + //! Convert pixel values from RGB to CMYK color spaces \newinstance. + CImg get_RGBtoCMYK() const { + return CImg(*this,false).RGBtoCMYK(); + } + + //! Convert pixel values from CMYK to RGB color spaces. + CImg& CMYKtoRGB() { + return CMYKtoCMY().CMYtoRGB(); + } + + //! Convert pixel values from CMYK to RGB color spaces \newinstance. + CImg get_CMYKtoRGB() const { + return CImg(*this,false).CMYKtoRGB(); + } + + //@} + //------------------------------------------ + // + //! \name Geometric / Spatial Manipulation + //@{ + //------------------------------------------ + + static float _cimg_lanczos(const float x) { + if (x<=-2 || x>=2) return 0; + const float a = (float)cimg::PI*x, b = 0.5f*a; + return (float)(x?std::sin(a)*std::sin(b)/(a*b):1); + } + + //! Resize image to new dimensions. + /** + \param size_x Number of columns (new size along the X-axis). + \param size_y Number of rows (new size along the Y-axis). + \param size_z Number of slices (new size along the Z-axis). + \param size_c Number of vector-channels (new size along the C-axis). + \param interpolation_type Method of interpolation: + - -1 = no interpolation: raw memory resizing. + - 0 = no interpolation: additional space is filled according to \p boundary_conditions. + - 1 = nearest-neighbor interpolation. + - 2 = moving average interpolation. + - 3 = linear interpolation. + - 4 = grid interpolation. + - 5 = cubic interpolation. + - 6 = lanczos interpolation. + \param boundary_conditions Type of boundary conditions used if necessary. + \param centering_x Set centering type (only if \p interpolation_type=0). + \param centering_y Set centering type (only if \p interpolation_type=0). + \param centering_z Set centering type (only if \p interpolation_type=0). + \param centering_c Set centering type (only if \p interpolation_type=0). + \note If pd[x,y,z,v]<0, it corresponds to a percentage of the original size (the default value is -100). + **/ + CImg& resize(const int size_x, const int size_y=-100, + const int size_z=-100, const int size_c=-100, + const int interpolation_type=1, const unsigned int boundary_conditions=0, + const float centering_x = 0, const float centering_y = 0, + const float centering_z = 0, const float centering_c = 0) { + if (!size_x || !size_y || !size_z || !size_c) return assign(); + const unsigned int + _sx = (unsigned int)(size_x<0?-size_x*width()/100:size_x), + _sy = (unsigned int)(size_y<0?-size_y*height()/100:size_y), + _sz = (unsigned int)(size_z<0?-size_z*depth()/100:size_z), + _sc = (unsigned int)(size_c<0?-size_c*spectrum()/100:size_c), + sx = _sx?_sx:1, sy = _sy?_sy:1, sz = _sz?_sz:1, sc = _sc?_sc:1; + if (sx==_width && sy==_height && sz==_depth && sc==_spectrum) return *this; + if (is_empty()) return assign(sx,sy,sz,sc,(T)0); + if (interpolation_type==-1 && sx*sy*sz*sc==size()) { + _width = sx; _height = sy; _depth = sz; _spectrum = sc; + return *this; + } + return get_resize(sx,sy,sz,sc,interpolation_type,boundary_conditions, + centering_x,centering_y,centering_z,centering_c).move_to(*this); + } + + //! Resize image to new dimensions \newinstance. + CImg get_resize(const int size_x, const int size_y = -100, + const int size_z = -100, const int size_c = -100, + const int interpolation_type=1, const unsigned int boundary_conditions=0, + const float centering_x = 0, const float centering_y = 0, + const float centering_z = 0, const float centering_c = 0) const { + if (centering_x<0 || centering_x>1 || centering_y<0 || centering_y>1 || + centering_z<0 || centering_z>1 || centering_c<0 || centering_c>1) + throw CImgArgumentException(_cimg_instance + "resize(): Specified centering arguments (%g,%g,%g,%g) are outside range [0,1].", + cimg_instance, + centering_x,centering_y,centering_z,centering_c); + + if (!size_x || !size_y || !size_z || !size_c) return CImg(); + const unsigned int + sx = std::max(1U,(unsigned int)(size_x>=0?size_x:-size_x*width()/100)), + sy = std::max(1U,(unsigned int)(size_y>=0?size_y:-size_y*height()/100)), + sz = std::max(1U,(unsigned int)(size_z>=0?size_z:-size_z*depth()/100)), + sc = std::max(1U,(unsigned int)(size_c>=0?size_c:-size_c*spectrum()/100)); + if (sx==_width && sy==_height && sz==_depth && sc==_spectrum) return +*this; + if (is_empty()) return CImg(sx,sy,sz,sc,(T)0); + CImg res; + switch (interpolation_type) { + + // Raw resizing. + // + case -1 : + std::memcpy(res.assign(sx,sy,sz,sc,(T)0)._data,_data,sizeof(T)*std::min(size(),(ulongT)sx*sy*sz*sc)); + break; + + // No interpolation. + // + case 0 : { + const int + xc = (int)(centering_x*((int)sx - width())), + yc = (int)(centering_y*((int)sy - height())), + zc = (int)(centering_z*((int)sz - depth())), + cc = (int)(centering_c*((int)sc - spectrum())); + + switch (boundary_conditions) { + case 3 : { // Mirror + res.assign(sx,sy,sz,sc); + const int w2 = 2*width(), h2 = 2*height(), d2 = 2*depth(), s2 = 2*spectrum(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=65536)) + cimg_forXYZC(res,x,y,z,c) { + const int + mx = cimg::mod(x - xc,w2), my = cimg::mod(y - yc,h2), + mz = cimg::mod(z - zc,d2), mc = cimg::mod(c - cc,s2); + res(x,y,z,c) = (*this)(mx=65536)) + for (int c = c0; c<(int)sc; c+=dc) + for (int z = z0; z<(int)sz; z+=dz) + for (int y = y0; y<(int)sy; y+=dy) + for (int x = x0; x<(int)sx; x+=dx) + res.draw_image(x,y,z,c,*this); + } break; + case 1 : { // Neumann + res.assign(sx,sy,sz,sc).draw_image(xc,yc,zc,cc,*this); + CImg sprite; + if (xc>0) { // X-backward + res.get_crop(xc,yc,zc,cc,xc,yc + height() - 1,zc + depth() - 1,cc + spectrum() - 1).move_to(sprite); + for (int x = xc - 1; x>=0; --x) res.draw_image(x,yc,zc,cc,sprite); + } + if (xc + width()<(int)sx) { // X-forward + res.get_crop(xc + width() - 1,yc,zc,cc,xc + width() - 1,yc + height() - 1, + zc + depth() - 1,cc + spectrum() - 1).move_to(sprite); + for (int x = xc + width(); x<(int)sx; ++x) res.draw_image(x,yc,zc,cc,sprite); + } + if (yc>0) { // Y-backward + res.get_crop(0,yc,zc,cc,sx - 1,yc,zc + depth() - 1,cc + spectrum() - 1).move_to(sprite); + for (int y = yc - 1; y>=0; --y) res.draw_image(0,y,zc,cc,sprite); + } + if (yc + height()<(int)sy) { // Y-forward + res.get_crop(0,yc + height() - 1,zc,cc,sx - 1,yc + height() - 1, + zc + depth() - 1,cc + spectrum() - 1).move_to(sprite); + for (int y = yc + height(); y<(int)sy; ++y) res.draw_image(0,y,zc,cc,sprite); + } + if (zc>0) { // Z-backward + res.get_crop(0,0,zc,cc,sx - 1,sy - 1,zc,cc + spectrum() - 1).move_to(sprite); + for (int z = zc - 1; z>=0; --z) res.draw_image(0,0,z,cc,sprite); + } + if (zc + depth()<(int)sz) { // Z-forward + res.get_crop(0,0,zc +depth() - 1,cc,sx - 1,sy - 1,zc + depth() - 1,cc + spectrum() - 1).move_to(sprite); + for (int z = zc + depth(); z<(int)sz; ++z) res.draw_image(0,0,z,cc,sprite); + } + if (cc>0) { // C-backward + res.get_crop(0,0,0,cc,sx - 1,sy - 1,sz - 1,cc).move_to(sprite); + for (int c = cc - 1; c>=0; --c) res.draw_image(0,0,0,c,sprite); + } + if (cc + spectrum()<(int)sc) { // C-forward + res.get_crop(0,0,0,cc + spectrum() - 1,sx - 1,sy - 1,sz - 1,cc + spectrum() - 1).move_to(sprite); + for (int c = cc + spectrum(); c<(int)sc; ++c) res.draw_image(0,0,0,c,sprite); + } + } break; + default : // Dirichlet + res.assign(sx,sy,sz,sc,(T)0).draw_image(xc,yc,zc,cc,*this); + } + break; + } break; + + // Nearest neighbor interpolation. + // + case 1 : { + res.assign(sx,sy,sz,sc); + CImg off_x(sx), off_y(sy + 1), off_z(sz + 1), off_c(sc + 1); + const ulongT + wh = (ulongT)_width*_height, + whd = (ulongT)_width*_height*_depth, + sxy = (ulongT)sx*sy, + sxyz = (ulongT)sx*sy*sz; + if (sx==_width) off_x.fill(1); + else { + ulongT *poff_x = off_x._data, curr = 0; + cimg_forX(res,x) { + const ulongT old = curr; + curr = (ulongT)((x + 1.0)*_width/sx); + *(poff_x++) = curr - old; + } + } + if (sy==_height) off_y.fill(_width); + else { + ulongT *poff_y = off_y._data, curr = 0; + cimg_forY(res,y) { + const ulongT old = curr; + curr = (ulongT)((y + 1.0)*_height/sy); + *(poff_y++) = _width*(curr - old); + } + *poff_y = 0; + } + if (sz==_depth) off_z.fill(wh); + else { + ulongT *poff_z = off_z._data, curr = 0; + cimg_forZ(res,z) { + const ulongT old = curr; + curr = (ulongT)((z + 1.0)*_depth/sz); + *(poff_z++) = wh*(curr - old); + } + *poff_z = 0; + } + if (sc==_spectrum) off_c.fill(whd); + else { + ulongT *poff_c = off_c._data, curr = 0; + cimg_forC(res,c) { + const ulongT old = curr; + curr = (ulongT)((c + 1.0)*_spectrum/sc); + *(poff_c++) = whd*(curr - old); + } + *poff_c = 0; + } + + T *ptrd = res._data; + const T* ptrc = _data; + const ulongT *poff_c = off_c._data; + for (unsigned int c = 0; c tmp(sx,_height,_depth,_spectrum,0); + for (unsigned int a = _width*sx, b = _width, c = sx, s = 0, t = 0; a; ) { + const unsigned int d = std::min(b,c); + a-=d; b-=d; c-=d; + cimg_forYZC(tmp,y,z,v) tmp(t,y,z,v)+=(Tfloat)(*this)(s,y,z,v)*d; + if (!b) { + cimg_forYZC(tmp,y,z,v) tmp(t,y,z,v)/=_width; + ++t; + b = _width; + } + if (!c) { ++s; c = sx; } + } + tmp.move_to(res); + instance_first = false; + } + if (sy!=_height) { + CImg tmp(sx,sy,_depth,_spectrum,0); + for (unsigned int a = _height*sy, b = _height, c = sy, s = 0, t = 0; a; ) { + const unsigned int d = std::min(b,c); + a-=d; b-=d; c-=d; + if (instance_first) + cimg_forXZC(tmp,x,z,v) tmp(x,t,z,v)+=(Tfloat)(*this)(x,s,z,v)*d; + else + cimg_forXZC(tmp,x,z,v) tmp(x,t,z,v)+=(Tfloat)res(x,s,z,v)*d; + if (!b) { + cimg_forXZC(tmp,x,z,v) tmp(x,t,z,v)/=_height; + ++t; + b = _height; + } + if (!c) { ++s; c = sy; } + } + tmp.move_to(res); + instance_first = false; + } + if (sz!=_depth) { + CImg tmp(sx,sy,sz,_spectrum,0); + for (unsigned int a = _depth*sz, b = _depth, c = sz, s = 0, t = 0; a; ) { + const unsigned int d = std::min(b,c); + a-=d; b-=d; c-=d; + if (instance_first) + cimg_forXYC(tmp,x,y,v) tmp(x,y,t,v)+=(Tfloat)(*this)(x,y,s,v)*d; + else + cimg_forXYC(tmp,x,y,v) tmp(x,y,t,v)+=(Tfloat)res(x,y,s,v)*d; + if (!b) { + cimg_forXYC(tmp,x,y,v) tmp(x,y,t,v)/=_depth; + ++t; + b = _depth; + } + if (!c) { ++s; c = sz; } + } + tmp.move_to(res); + instance_first = false; + } + if (sc!=_spectrum) { + CImg tmp(sx,sy,sz,sc,0); + for (unsigned int a = _spectrum*sc, b = _spectrum, c = sc, s = 0, t = 0; a; ) { + const unsigned int d = std::min(b,c); + a-=d; b-=d; c-=d; + if (instance_first) + cimg_forXYZ(tmp,x,y,z) tmp(x,y,z,t)+=(Tfloat)(*this)(x,y,z,s)*d; + else + cimg_forXYZ(tmp,x,y,z) tmp(x,y,z,t)+=(Tfloat)res(x,y,z,s)*d; + if (!b) { + cimg_forXYZ(tmp,x,y,z) tmp(x,y,z,t)/=_spectrum; + ++t; + b = _spectrum; + } + if (!c) { ++s; c = sc; } + } + tmp.move_to(res); + instance_first = false; + } + } break; + + // Linear interpolation. + // + case 3 : { + CImg off(cimg::max(sx,sy,sz,sc)); + CImg foff(off._width); + CImg resx, resy, resz, resc; + double curr, old; + + if (sx!=_width) { + if (_width==1) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); + else if (_width>sx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); + else { + const double fx = (!boundary_conditions && sx>_width)?(sx>1?(_width - 1.0)/(sx - 1):0): + (double)_width/sx; + resx.assign(sx,_height,_depth,_spectrum); + curr = old = 0; + unsigned int *poff = off._data; + double *pfoff = foff._data; + cimg_forX(resx,x) { + *(pfoff++) = curr - (unsigned int)curr; + old = curr; + curr = std::min(width() - 1.0,curr + fx); + *(poff++) = (unsigned int)curr - (unsigned int)old; + } + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(resx.size()>=65536)) + cimg_forYZC(resx,y,z,c) { + const T *ptrs = data(0,y,z,c), *const ptrsmax = ptrs + _width - 1; + T *ptrd = resx.data(0,y,z,c); + const unsigned int *poff = off._data; + const double *pfoff = foff._data; + cimg_forX(resx,x) { + const double alpha = *(pfoff++); + const T val1 = *ptrs, val2 = ptrssy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); + else { + const double fy = (!boundary_conditions && sy>_height)?(sy>1?(_height - 1.0)/(sy - 1):0): + (double)_height/sy; + resy.assign(sx,sy,_depth,_spectrum); + curr = old = 0; + unsigned int *poff = off._data; + double *pfoff = foff._data; + cimg_forY(resy,y) { + *(pfoff++) = curr - (unsigned int)curr; + old = curr; + curr = std::min(height() - 1.0,curr + fy); + *(poff++) = sx*((unsigned int)curr - (unsigned int)old); + } + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(resy.size()>=65536)) + cimg_forXZC(resy,x,z,c) { + const T *ptrs = resx.data(x,0,z,c), *const ptrsmax = ptrs + (_height - 1)*sx; + T *ptrd = resy.data(x,0,z,c); + const unsigned int *poff = off._data; + const double *pfoff = foff._data; + cimg_forY(resy,y) { + const double alpha = *(pfoff++); + const T val1 = *ptrs, val2 = ptrssz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); + else { + const double fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth - 1.0)/(sz - 1):0): + (double)_depth/sz; + const unsigned int sxy = sx*sy; + resz.assign(sx,sy,sz,_spectrum); + curr = old = 0; + unsigned int *poff = off._data; + double *pfoff = foff._data; + cimg_forZ(resz,z) { + *(pfoff++) = curr - (unsigned int)curr; + old = curr; + curr = std::min(depth() - 1.0,curr + fz); + *(poff++) = sxy*((unsigned int)curr - (unsigned int)old); + } + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(resz.size()>=65536)) + cimg_forXYC(resz,x,y,c) { + const T *ptrs = resy.data(x,y,0,c), *const ptrsmax = ptrs + (_depth - 1)*sxy; + T *ptrd = resz.data(x,y,0,c); + const unsigned int *poff = off._data; + const double *pfoff = foff._data; + cimg_forZ(resz,z) { + const double alpha = *(pfoff++); + const T val1 = *ptrs, val2 = ptrssc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); + else { + const double fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum - 1.0)/(sc - 1):0): + (double)_spectrum/sc; + const unsigned int sxyz = sx*sy*sz; + resc.assign(sx,sy,sz,sc); + curr = old = 0; + unsigned int *poff = off._data; + double *pfoff = foff._data; + cimg_forC(resc,c) { + *(pfoff++) = curr - (unsigned int)curr; + old = curr; + curr = std::min(spectrum() - 1.0,curr + fc); + *(poff++) = sxyz*((unsigned int)curr - (unsigned int)old); + } + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(resc.size()>=65536)) + cimg_forXYZ(resc,x,y,z) { + const T *ptrs = resz.data(x,y,z,0), *const ptrsmax = ptrs + (_spectrum - 1)*sxyz; + T *ptrd = resc.data(x,y,z,0); + const unsigned int *poff = off._data; + const double *pfoff = foff._data; + cimg_forC(resc,c) { + const double alpha = *(pfoff++); + const T val1 = *ptrs, val2 = ptrs resx, resy, resz, resc; + if (sx!=_width) { + if (sx<_width) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); + else { + resx.assign(sx,_height,_depth,_spectrum,(T)0); + const int dx = (int)(2*sx), dy = 2*width(); + int err = (int)(dy + centering_x*(sx*dy/width() - dy)), xs = 0; + cimg_forX(resx,x) if ((err-=dy)<=0) { + cimg_forYZC(resx,y,z,c) resx(x,y,z,c) = (*this)(xs,y,z,c); + ++xs; + err+=dx; + } + } + } else resx.assign(*this,true); + + if (sy!=_height) { + if (sy<_height) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); + else { + resy.assign(sx,sy,_depth,_spectrum,(T)0); + const int dx = (int)(2*sy), dy = 2*height(); + int err = (int)(dy + centering_y*(sy*dy/height() - dy)), ys = 0; + cimg_forY(resy,y) if ((err-=dy)<=0) { + cimg_forXZC(resy,x,z,c) resy(x,y,z,c) = resx(x,ys,z,c); + ++ys; + err+=dx; + } + } + resx.assign(); + } else resy.assign(resx,true); + + if (sz!=_depth) { + if (sz<_depth) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); + else { + resz.assign(sx,sy,sz,_spectrum,(T)0); + const int dx = (int)(2*sz), dy = 2*depth(); + int err = (int)(dy + centering_z*(sz*dy/depth() - dy)), zs = 0; + cimg_forZ(resz,z) if ((err-=dy)<=0) { + cimg_forXYC(resz,x,y,c) resz(x,y,z,c) = resy(x,y,zs,c); + ++zs; + err+=dx; + } + } + resy.assign(); + } else resz.assign(resy,true); + + if (sc!=_spectrum) { + if (sc<_spectrum) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); + else { + resc.assign(sx,sy,sz,sc,(T)0); + const int dx = (int)(2*sc), dy = 2*spectrum(); + int err = (int)(dy + centering_c*(sc*dy/spectrum() - dy)), cs = 0; + cimg_forC(resc,c) if ((err-=dy)<=0) { + cimg_forXYZ(resc,x,y,z) resc(x,y,z,c) = resz(x,y,z,cs); + ++cs; + err+=dx; + } + } + resz.assign(); + } else resc.assign(resz,true); + + return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; + } break; + + // Cubic interpolation. + // + case 5 : { + const Tfloat vmin = (Tfloat)cimg::type::min(), vmax = (Tfloat)cimg::type::max(); + CImg off(cimg::max(sx,sy,sz,sc)); + CImg foff(off._width); + CImg resx, resy, resz, resc; + double curr, old; + + if (sx!=_width) { + if (_width==1) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); + else { + if (_width>sx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); + else { + const double fx = (!boundary_conditions && sx>_width)?(sx>1?(_width - 1.0)/(sx - 1):0): + (double)_width/sx; + resx.assign(sx,_height,_depth,_spectrum); + curr = old = 0; + unsigned int *poff = off._data; + double *pfoff = foff._data; + cimg_forX(resx,x) { + *(pfoff++) = curr - (unsigned int)curr; + old = curr; + curr = std::min(width() - 1.0,curr + fx); + *(poff++) = (unsigned int)curr - (unsigned int)old; + } + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(resx.size()>=65536)) + cimg_forYZC(resx,y,z,c) { + const T *const ptrs0 = data(0,y,z,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_width - 2); + T *ptrd = resx.data(0,y,z,c); + const unsigned int *poff = off._data; + const double *pfoff = foff._data; + cimg_forX(resx,x) { + const double + t = *(pfoff++), + val1 = (double)*ptrs, + val0 = ptrs>ptrs0?(double)*(ptrs - 1):val1, + val2 = ptrs<=ptrsmax?(double)*(ptrs + 1):val1, + val3 = ptrsvmax?vmax:val); + ptrs+=*(poff++); + } + } + } + } + } else resx.assign(*this,true); + + if (sy!=_height) { + if (_height==1) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); + else { + if (_height>sy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); + else { + const double fy = (!boundary_conditions && sy>_height)?(sy>1?(_height - 1.0)/(sy - 1):0): + (double)_height/sy; + resy.assign(sx,sy,_depth,_spectrum); + curr = old = 0; + unsigned int *poff = off._data; + double *pfoff = foff._data; + cimg_forY(resy,y) { + *(pfoff++) = curr - (unsigned int)curr; + old = curr; + curr = std::min(height() - 1.0,curr + fy); + *(poff++) = sx*((unsigned int)curr - (unsigned int)old); + } + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(resy.size()>=65536)) + cimg_forXZC(resy,x,z,c) { + const T *const ptrs0 = resx.data(x,0,z,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_height - 2)*sx; + T *ptrd = resy.data(x,0,z,c); + const unsigned int *poff = off._data; + const double *pfoff = foff._data; + cimg_forY(resy,y) { + const double + t = *(pfoff++), + val1 = (double)*ptrs, + val0 = ptrs>ptrs0?(double)*(ptrs - sx):val1, + val2 = ptrs<=ptrsmax?(double)*(ptrs + sx):val1, + val3 = ptrsvmax?vmax:val); + ptrd+=sx; + ptrs+=*(poff++); + } + } + } + } + resx.assign(); + } else resy.assign(resx,true); + + if (sz!=_depth) { + if (_depth==1) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); + else { + if (_depth>sz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); + else { + const double fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth - 1.0)/(sz - 1):0): + (double)_depth/sz; + const unsigned int sxy = sx*sy; + resz.assign(sx,sy,sz,_spectrum); + curr = old = 0; + unsigned int *poff = off._data; + double *pfoff = foff._data; + cimg_forZ(resz,z) { + *(pfoff++) = curr - (unsigned int)curr; + old = curr; + curr = std::min(depth() - 1.0,curr + fz); + *(poff++) = sxy*((unsigned int)curr - (unsigned int)old); + } + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(resz.size()>=65536)) + cimg_forXYC(resz,x,y,c) { + const T *const ptrs0 = resy.data(x,y,0,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_depth - 2)*sxy; + T *ptrd = resz.data(x,y,0,c); + const unsigned int *poff = off._data; + const double *pfoff = foff._data; + cimg_forZ(resz,z) { + const double + t = *(pfoff++), + val1 = (double)*ptrs, + val0 = ptrs>ptrs0?(double)*(ptrs - sxy):val1, + val2 = ptrs<=ptrsmax?(double)*(ptrs + sxy):val1, + val3 = ptrsvmax?vmax:val); + ptrd+=sxy; + ptrs+=*(poff++); + } + } + } + } + resy.assign(); + } else resz.assign(resy,true); + + if (sc!=_spectrum) { + if (_spectrum==1) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); + else { + if (_spectrum>sc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); + else { + const double fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum - 1.0)/(sc - 1):0): + (double)_spectrum/sc; + const unsigned int sxyz = sx*sy*sz; + resc.assign(sx,sy,sz,sc); + curr = old = 0; + unsigned int *poff = off._data; + double *pfoff = foff._data; + cimg_forC(resc,c) { + *(pfoff++) = curr - (unsigned int)curr; + old = curr; + curr = std::min(spectrum() - 1.0,curr + fc); + *(poff++) = sxyz*((unsigned int)curr - (unsigned int)old); + } + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(resc.size()>=65536)) + cimg_forXYZ(resc,x,y,z) { + const T *const ptrs0 = resz.data(x,y,z,0), *ptrs = ptrs0, *const ptrsmax = ptrs + (_spectrum - 2)*sxyz; + T *ptrd = resc.data(x,y,z,0); + const unsigned int *poff = off._data; + const double *pfoff = foff._data; + cimg_forC(resc,c) { + const double + t = *(pfoff++), + val1 = (double)*ptrs, + val0 = ptrs>ptrs0?(double)*(ptrs - sxyz):val1, + val2 = ptrs<=ptrsmax?(double)*(ptrs + sxyz):val1, + val3 = ptrsvmax?vmax:val); + ptrd+=sxyz; + ptrs+=*(poff++); + } + } + } + } + resz.assign(); + } else resc.assign(resz,true); + + return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; + } break; + + // Lanczos interpolation. + // + case 6 : { + const double vmin = (double)cimg::type::min(), vmax = (double)cimg::type::max(); + CImg off(cimg::max(sx,sy,sz,sc)); + CImg foff(off._width); + CImg resx, resy, resz, resc; + double curr, old; + + if (sx!=_width) { + if (_width==1) get_resize(sx,_height,_depth,_spectrum,1).move_to(resx); + else { + if (_width>sx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); + else { + const double fx = (!boundary_conditions && sx>_width)?(sx>1?(_width - 1.0)/(sx - 1):0): + (double)_width/sx; + resx.assign(sx,_height,_depth,_spectrum); + curr = old = 0; + unsigned int *poff = off._data; + double *pfoff = foff._data; + cimg_forX(resx,x) { + *(pfoff++) = curr - (unsigned int)curr; + old = curr; + curr = std::min(width() - 1.0,curr + fx); + *(poff++) = (unsigned int)curr - (unsigned int)old; + } + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(resx.size()>=65536)) + cimg_forYZC(resx,y,z,c) { + const T *const ptrs0 = data(0,y,z,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + 1, + *const ptrsmax = ptrs0 + (_width - 2); + T *ptrd = resx.data(0,y,z,c); + const unsigned int *poff = off._data; + const double *pfoff = foff._data; + cimg_forX(resx,x) { + const double + t = *(pfoff++), + w0 = _cimg_lanczos(t + 2), + w1 = _cimg_lanczos(t + 1), + w2 = _cimg_lanczos(t), + w3 = _cimg_lanczos(t - 1), + w4 = _cimg_lanczos(t - 2), + val2 = (double)*ptrs, + val1 = ptrs>=ptrsmin?(double)*(ptrs - 1):val2, + val0 = ptrs>ptrsmin?(double)*(ptrs - 2):val1, + val3 = ptrs<=ptrsmax?(double)*(ptrs + 1):val2, + val4 = ptrsvmax?vmax:val); + ptrs+=*(poff++); + } + } + } + } + } else resx.assign(*this,true); + + if (sy!=_height) { + if (_height==1) resx.get_resize(sx,sy,_depth,_spectrum,1).move_to(resy); + else { + if (_height>sy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); + else { + const double fy = (!boundary_conditions && sy>_height)?(sy>1?(_height - 1.0)/(sy - 1):0): + (double)_height/sy; + resy.assign(sx,sy,_depth,_spectrum); + curr = old = 0; + unsigned int *poff = off._data; + double *pfoff = foff._data; + cimg_forY(resy,y) { + *(pfoff++) = curr - (unsigned int)curr; + old = curr; + curr = std::min(height() - 1.0,curr + fy); + *(poff++) = sx*((unsigned int)curr - (unsigned int)old); + } + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(resy.size()>=65536)) + cimg_forXZC(resy,x,z,c) { + const T *const ptrs0 = resx.data(x,0,z,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sx, + *const ptrsmax = ptrs0 + (_height - 2)*sx; + T *ptrd = resy.data(x,0,z,c); + const unsigned int *poff = off._data; + const double *pfoff = foff._data; + cimg_forY(resy,y) { + const double + t = *(pfoff++), + w0 = _cimg_lanczos(t + 2), + w1 = _cimg_lanczos(t + 1), + w2 = _cimg_lanczos(t), + w3 = _cimg_lanczos(t - 1), + w4 = _cimg_lanczos(t - 2), + val2 = (double)*ptrs, + val1 = ptrs>=ptrsmin?(double)*(ptrs - sx):val2, + val0 = ptrs>ptrsmin?(double)*(ptrs - 2*sx):val1, + val3 = ptrs<=ptrsmax?(double)*(ptrs + sx):val2, + val4 = ptrsvmax?vmax:val); + ptrd+=sx; + ptrs+=*(poff++); + } + } + } + } + resx.assign(); + } else resy.assign(resx,true); + + if (sz!=_depth) { + if (_depth==1) resy.get_resize(sx,sy,sz,_spectrum,1).move_to(resz); + else { + if (_depth>sz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); + else { + const double fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth - 1.0)/(sz - 1):0): + (double)_depth/sz; + const unsigned int sxy = sx*sy; + resz.assign(sx,sy,sz,_spectrum); + curr = old = 0; + unsigned int *poff = off._data; + double *pfoff = foff._data; + cimg_forZ(resz,z) { + *(pfoff++) = curr - (unsigned int)curr; + old = curr; + curr = std::min(depth() - 1.0,curr + fz); + *(poff++) = sxy*((unsigned int)curr - (unsigned int)old); + } + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(resz.size()>=65536)) + cimg_forXYC(resz,x,y,c) { + const T *const ptrs0 = resy.data(x,y,0,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sxy, + *const ptrsmax = ptrs0 + (_depth - 2)*sxy; + T *ptrd = resz.data(x,y,0,c); + const unsigned int *poff = off._data; + const double *pfoff = foff._data; + cimg_forZ(resz,z) { + const double + t = *(pfoff++), + w0 = _cimg_lanczos(t + 2), + w1 = _cimg_lanczos(t + 1), + w2 = _cimg_lanczos(t), + w3 = _cimg_lanczos(t - 1), + w4 = _cimg_lanczos(t - 2), + val2 = (double)*ptrs, + val1 = ptrs>=ptrsmin?(double)*(ptrs - sxy):val2, + val0 = ptrs>ptrsmin?(double)*(ptrs - 2*sxy):val1, + val3 = ptrs<=ptrsmax?(double)*(ptrs + sxy):val2, + val4 = ptrsvmax?vmax:val); + ptrd+=sxy; + ptrs+=*(poff++); + } + } + } + } + resy.assign(); + } else resz.assign(resy,true); + + if (sc!=_spectrum) { + if (_spectrum==1) resz.get_resize(sx,sy,sz,sc,1).move_to(resc); + else { + if (_spectrum>sc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); + else { + const double fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum - 1.0)/(sc - 1):0): + (double)_spectrum/sc; + const unsigned int sxyz = sx*sy*sz; + resc.assign(sx,sy,sz,sc); + curr = old = 0; + unsigned int *poff = off._data; + double *pfoff = foff._data; + cimg_forC(resc,c) { + *(pfoff++) = curr - (unsigned int)curr; + old = curr; + curr = std::min(spectrum() - 1.0,curr + fc); + *(poff++) = sxyz*((unsigned int)curr - (unsigned int)old); + } + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(resc.size()>=65536)) + cimg_forXYZ(resc,x,y,z) { + const T *const ptrs0 = resz.data(x,y,z,0), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sxyz, + *const ptrsmax = ptrs + (_spectrum - 2)*sxyz; + T *ptrd = resc.data(x,y,z,0); + const unsigned int *poff = off._data; + const double *pfoff = foff._data; + cimg_forC(resc,c) { + const double + t = *(pfoff++), + w0 = _cimg_lanczos(t + 2), + w1 = _cimg_lanczos(t + 1), + w2 = _cimg_lanczos(t), + w3 = _cimg_lanczos(t - 1), + w4 = _cimg_lanczos(t - 2), + val2 = (double)*ptrs, + val1 = ptrs>=ptrsmin?(double)*(ptrs - sxyz):val2, + val0 = ptrs>ptrsmin?(double)*(ptrs - 2*sxyz):val1, + val3 = ptrs<=ptrsmax?(double)*(ptrs + sxyz):val2, + val4 = ptrsvmax?vmax:val); + ptrd+=sxyz; + ptrs+=*(poff++); + } + } + } + } + resz.assign(); + } else resc.assign(resz,true); + + return resc._is_shared?(resz._is_shared?(resy._is_shared?(resx._is_shared?(+(*this)):resx):resy):resz):resc; + } break; + + // Unknow interpolation. + // + default : + throw CImgArgumentException(_cimg_instance + "resize(): Invalid specified interpolation %d " + "(should be { -1=raw | 0=none | 1=nearest | 2=average | 3=linear | 4=grid | " + "5=cubic | 6=lanczos }).", + cimg_instance, + interpolation_type); + } + return res; + } + + //! Resize image to dimensions of another image. + /** + \param src Reference image used for dimensions. + \param interpolation_type Interpolation method. + \param boundary_conditions Boundary conditions. + \param centering_x Set centering type (only if \p interpolation_type=0). + \param centering_y Set centering type (only if \p interpolation_type=0). + \param centering_z Set centering type (only if \p interpolation_type=0). + \param centering_c Set centering type (only if \p interpolation_type=0). + **/ + template + CImg& resize(const CImg& src, + const int interpolation_type=1, const unsigned int boundary_conditions=0, + const float centering_x = 0, const float centering_y = 0, + const float centering_z = 0, const float centering_c = 0) { + return resize(src._width,src._height,src._depth,src._spectrum,interpolation_type,boundary_conditions, + centering_x,centering_y,centering_z,centering_c); + } + + //! Resize image to dimensions of another image \newinstance. + template + CImg get_resize(const CImg& src, + const int interpolation_type=1, const unsigned int boundary_conditions=0, + const float centering_x = 0, const float centering_y = 0, + const float centering_z = 0, const float centering_c = 0) const { + return get_resize(src._width,src._height,src._depth,src._spectrum,interpolation_type,boundary_conditions, + centering_x,centering_y,centering_z,centering_c); + } + + //! Resize image to dimensions of a display window. + /** + \param disp Reference display window used for dimensions. + \param interpolation_type Interpolation method. + \param boundary_conditions Boundary conditions. + \param centering_x Set centering type (only if \p interpolation_type=0). + \param centering_y Set centering type (only if \p interpolation_type=0). + \param centering_z Set centering type (only if \p interpolation_type=0). + \param centering_c Set centering type (only if \p interpolation_type=0). + **/ + CImg& resize(const CImgDisplay& disp, + const int interpolation_type=1, const unsigned int boundary_conditions=0, + const float centering_x = 0, const float centering_y = 0, + const float centering_z = 0, const float centering_c = 0) { + return resize(disp.width(),disp.height(),_depth,_spectrum,interpolation_type,boundary_conditions, + centering_x,centering_y,centering_z,centering_c); + } + + //! Resize image to dimensions of a display window \newinstance. + CImg get_resize(const CImgDisplay& disp, + const int interpolation_type=1, const unsigned int boundary_conditions=0, + const float centering_x = 0, const float centering_y = 0, + const float centering_z = 0, const float centering_c = 0) const { + return get_resize(disp.width(),disp.height(),_depth,_spectrum,interpolation_type,boundary_conditions, + centering_x,centering_y,centering_z,centering_c); + } + + //! Resize image to half-size along XY axes, using an optimized filter. + CImg& resize_halfXY() { + return get_resize_halfXY().move_to(*this); + } + + //! Resize image to half-size along XY axes, using an optimized filter \newinstance. + CImg get_resize_halfXY() const { + if (is_empty()) return *this; + static const Tfloat kernel[9] = { 0.07842776544f, 0.1231940459f, 0.07842776544f, + 0.1231940459f, 0.1935127547f, 0.1231940459f, + 0.07842776544f, 0.1231940459f, 0.07842776544f }; + CImg I(9), res(_width/2,_height/2,_depth,_spectrum); + T *ptrd = res._data; + cimg_forZC(*this,z,c) cimg_for3x3(*this,x,y,z,c,I,T) + if (x%2 && y%2) *(ptrd++) = (T) + (I[0]*kernel[0] + I[1]*kernel[1] + I[2]*kernel[2] + + I[3]*kernel[3] + I[4]*kernel[4] + I[5]*kernel[5] + + I[6]*kernel[6] + I[7]*kernel[7] + I[8]*kernel[8]); + return res; + } + + //! Resize image to double-size, using the Scale2X algorithm. + /** + \note Use anisotropic upscaling algorithm + described here. + **/ + CImg& resize_doubleXY() { + return get_resize_doubleXY().move_to(*this); + } + + //! Resize image to double-size, using the Scale2X algorithm \newinstance. + CImg get_resize_doubleXY() const { +#define _cimg_gs2x_for3(bound,i) \ + for (int i = 0, _p1##i = 0, \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1; \ + _n1##i<(int)(bound) || i==--_n1##i; \ + _p1##i = i++, ++_n1##i, ptrd1+=(res)._width, ptrd2+=(res)._width) + +#define _cimg_gs2x_for3x3(img,x,y,z,c,I,T) \ + _cimg_gs2x_for3((img)._height,y) for (int x = 0, \ + _p1##x = 0, \ + _n1##x = (int)( \ + (I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \ + (I[3] = I[4] = (T)(img)(0,y,z,c)), \ + (I[7] = (T)(img)(0,_n1##y,z,c)), \ + 1>=(img)._width?(img).width() - 1:1); \ + (_n1##x<(img).width() && ( \ + (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[5] = (T)(img)(_n1##x,y,z,c)), \ + (I[8] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ + x==--_n1##x; \ + I[1] = I[2], \ + I[3] = I[4], I[4] = I[5], \ + I[7] = I[8], \ + _p1##x = x++, ++_n1##x) + + if (is_empty()) return *this; + CImg res(_width<<1,_height<<1,_depth,_spectrum); + CImg_3x3(I,T); + cimg_forZC(*this,z,c) { + T + *ptrd1 = res.data(0,0,z,c), + *ptrd2 = ptrd1 + res._width; + _cimg_gs2x_for3x3(*this,x,y,z,c,I,T) { + if (Icp!=Icn && Ipc!=Inc) { + *(ptrd1++) = Ipc==Icp?Ipc:Icc; + *(ptrd1++) = Icp==Inc?Inc:Icc; + *(ptrd2++) = Ipc==Icn?Ipc:Icc; + *(ptrd2++) = Icn==Inc?Inc:Icc; + } else { *(ptrd1++) = Icc; *(ptrd1++) = Icc; *(ptrd2++) = Icc; *(ptrd2++) = Icc; } + } + } + return res; + } + + //! Resize image to triple-size, using the Scale3X algorithm. + /** + \note Use anisotropic upscaling algorithm + described here. + **/ + CImg& resize_tripleXY() { + return get_resize_tripleXY().move_to(*this); + } + + //! Resize image to triple-size, using the Scale3X algorithm \newinstance. + CImg get_resize_tripleXY() const { +#define _cimg_gs3x_for3(bound,i) \ + for (int i = 0, _p1##i = 0, \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1; \ + _n1##i<(int)(bound) || i==--_n1##i; \ + _p1##i = i++, ++_n1##i, ptrd1+=2*(res)._width, ptrd2+=2*(res)._width, ptrd3+=2*(res)._width) + +#define _cimg_gs3x_for3x3(img,x,y,z,c,I,T) \ + _cimg_gs3x_for3((img)._height,y) for (int x = 0, \ + _p1##x = 0, \ + _n1##x = (int)( \ + (I[0] = I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \ + (I[3] = I[4] = (T)(img)(0,y,z,c)), \ + (I[6] = I[7] = (T)(img)(0,_n1##y,z,c)), \ + 1>=(img)._width?(img).width() - 1:1); \ + (_n1##x<(img).width() && ( \ + (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ + (I[5] = (T)(img)(_n1##x,y,z,c)), \ + (I[8] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ + x==--_n1##x; \ + I[0] = I[1], I[1] = I[2], \ + I[3] = I[4], I[4] = I[5], \ + I[6] = I[7], I[7] = I[8], \ + _p1##x = x++, ++_n1##x) + + if (is_empty()) return *this; + CImg res(3*_width,3*_height,_depth,_spectrum); + CImg_3x3(I,T); + cimg_forZC(*this,z,c) { + T + *ptrd1 = res.data(0,0,z,c), + *ptrd2 = ptrd1 + res._width, + *ptrd3 = ptrd2 + res._width; + _cimg_gs3x_for3x3(*this,x,y,z,c,I,T) { + if (Icp != Icn && Ipc != Inc) { + *(ptrd1++) = Ipc==Icp?Ipc:Icc; + *(ptrd1++) = (Ipc==Icp && Icc!=Inp) || (Icp==Inc && Icc!=Ipp)?Icp:Icc; + *(ptrd1++) = Icp==Inc?Inc:Icc; + *(ptrd2++) = (Ipc==Icp && Icc!=Ipn) || (Ipc==Icn && Icc!=Ipp)?Ipc:Icc; + *(ptrd2++) = Icc; + *(ptrd2++) = (Icp==Inc && Icc!=Inn) || (Icn==Inc && Icc!=Inp)?Inc:Icc; + *(ptrd3++) = Ipc==Icn?Ipc:Icc; + *(ptrd3++) = (Ipc==Icn && Icc!=Inn) || (Icn==Inc && Icc!=Ipn)?Icn:Icc; + *(ptrd3++) = Icn==Inc?Inc:Icc; + } else { + *(ptrd1++) = Icc; *(ptrd1++) = Icc; *(ptrd1++) = Icc; + *(ptrd2++) = Icc; *(ptrd2++) = Icc; *(ptrd2++) = Icc; + *(ptrd3++) = Icc; *(ptrd3++) = Icc; *(ptrd3++) = Icc; + } + } + } + return res; + } + + //! Mirror image content along specified axis. + /** + \param axis Mirror axis + **/ + CImg& mirror(const char axis) { + if (is_empty()) return *this; + T *pf, *pb, *buf = 0; + switch (cimg::lowercase(axis)) { + case 'x' : { + pf = _data; pb = data(_width - 1); + const unsigned int width2 = _width/2; + for (unsigned int yzv = 0; yzv<_height*_depth*_spectrum; ++yzv) { + for (unsigned int x = 0; x get_mirror(const char axis) const { + return (+*this).mirror(axis); + } + + //! Mirror image content along specified axes. + /** + \param axes Mirror axes, as a C-string. + \note \c axes may contains multiple characters, e.g. \c "xyz" + **/ + CImg& mirror(const char *const axes) { + for (const char *s = axes; *s; ++s) mirror(*s); + return *this; + } + + //! Mirror image content along specified axes \newinstance. + CImg get_mirror(const char *const axes) const { + return (+*this).mirror(axes); + } + + //! Shift image content. + /** + \param delta_x Amount of displacement along the X-axis. + \param delta_y Amount of displacement along the Y-axis. + \param delta_z Amount of displacement along the Z-axis. + \param delta_c Amount of displacement along the C-axis. + \param boundary_conditions Border condition. Can be { 0=dirichlet | 1=neumann | 2=periodic | 3=mirror }. + **/ + CImg& shift(const int delta_x, const int delta_y=0, const int delta_z=0, const int delta_c=0, + const unsigned int boundary_conditions=0) { + if (is_empty()) return *this; + if (boundary_conditions==3) + return get_crop(-delta_x,-delta_y,-delta_z,-delta_c, + width() - delta_x - 1, + height() - delta_y - 1, + depth() - delta_z - 1, + spectrum() - delta_c - 1,3).move_to(*this); + if (delta_x) // Shift along X-axis + switch (boundary_conditions) { + case 2 : { // Periodic + const int ml = cimg::mod(-delta_x,width()), ndelta_x = (ml<=width()/2)?ml:(ml-width()); + if (!ndelta_x) return *this; + CImg buf(cimg::abs(ndelta_x)); + if (ndelta_x>0) cimg_forYZC(*this,y,z,c) { + std::memcpy(buf,data(0,y,z,c),ndelta_x*sizeof(T)); + std::memmove(data(0,y,z,c),data(ndelta_x,y,z,c),(_width-ndelta_x)*sizeof(T)); + std::memcpy(data(_width-ndelta_x,y,z,c),buf,ndelta_x*sizeof(T)); + } else cimg_forYZC(*this,y,z,c) { + std::memcpy(buf,data(_width + ndelta_x,y,z,c),-ndelta_x*sizeof(T)); + std::memmove(data(-ndelta_x,y,z,c),data(0,y,z,c),(_width + ndelta_x)*sizeof(T)); + std::memcpy(data(0,y,z,c),buf,-ndelta_x*sizeof(T)); + } + } break; + case 1 : // Neumann + if (delta_x<0) { + const int ndelta_x = (-delta_x>=width())?width() - 1:-delta_x; + if (!ndelta_x) return *this; + cimg_forYZC(*this,y,z,c) { + std::memmove(data(0,y,z,c),data(ndelta_x,y,z,c),(_width-ndelta_x)*sizeof(T)); + T *ptrd = data(_width - 1,y,z,c); + const T val = *ptrd; + for (int l = 0; l=width())?width() - 1:delta_x; + if (!ndelta_x) return *this; + cimg_forYZC(*this,y,z,c) { + std::memmove(data(ndelta_x,y,z,c),data(0,y,z,c),(_width-ndelta_x)*sizeof(T)); + T *ptrd = data(0,y,z,c); + const T val = *ptrd; + for (int l = 0; l=width()) return fill((T)0); + if (delta_x<0) cimg_forYZC(*this,y,z,c) { + std::memmove(data(0,y,z,c),data(-delta_x,y,z,c),(_width + delta_x)*sizeof(T)); + std::memset(data(_width + delta_x,y,z,c),0,-delta_x*sizeof(T)); + } else cimg_forYZC(*this,y,z,c) { + std::memmove(data(delta_x,y,z,c),data(0,y,z,c),(_width-delta_x)*sizeof(T)); + std::memset(data(0,y,z,c),0,delta_x*sizeof(T)); + } + } + + if (delta_y) // Shift along Y-axis + switch (boundary_conditions) { + case 2 : { // Periodic + const int ml = cimg::mod(-delta_y,height()), ndelta_y = (ml<=height()/2)?ml:(ml-height()); + if (!ndelta_y) return *this; + CImg buf(width(),cimg::abs(ndelta_y)); + if (ndelta_y>0) cimg_forZC(*this,z,c) { + std::memcpy(buf,data(0,0,z,c),_width*ndelta_y*sizeof(T)); + std::memmove(data(0,0,z,c),data(0,ndelta_y,z,c),_width*(_height-ndelta_y)*sizeof(T)); + std::memcpy(data(0,_height-ndelta_y,z,c),buf,_width*ndelta_y*sizeof(T)); + } else cimg_forZC(*this,z,c) { + std::memcpy(buf,data(0,_height + ndelta_y,z,c),-ndelta_y*_width*sizeof(T)); + std::memmove(data(0,-ndelta_y,z,c),data(0,0,z,c),_width*(_height + ndelta_y)*sizeof(T)); + std::memcpy(data(0,0,z,c),buf,-ndelta_y*_width*sizeof(T)); + } + } break; + case 1 : // Neumann + if (delta_y<0) { + const int ndelta_y = (-delta_y>=height())?height() - 1:-delta_y; + if (!ndelta_y) return *this; + cimg_forZC(*this,z,c) { + std::memmove(data(0,0,z,c),data(0,ndelta_y,z,c),_width*(_height-ndelta_y)*sizeof(T)); + T *ptrd = data(0,_height-ndelta_y,z,c), *ptrs = data(0,_height - 1,z,c); + for (int l = 0; l=height())?height() - 1:delta_y; + if (!ndelta_y) return *this; + cimg_forZC(*this,z,c) { + std::memmove(data(0,ndelta_y,z,c),data(0,0,z,c),_width*(_height-ndelta_y)*sizeof(T)); + T *ptrd = data(0,1,z,c), *ptrs = data(0,0,z,c); + for (int l = 0; l=height()) return fill((T)0); + if (delta_y<0) cimg_forZC(*this,z,c) { + std::memmove(data(0,0,z,c),data(0,-delta_y,z,c),_width*(_height + delta_y)*sizeof(T)); + std::memset(data(0,_height + delta_y,z,c),0,-delta_y*_width*sizeof(T)); + } else cimg_forZC(*this,z,c) { + std::memmove(data(0,delta_y,z,c),data(0,0,z,c),_width*(_height-delta_y)*sizeof(T)); + std::memset(data(0,0,z,c),0,delta_y*_width*sizeof(T)); + } + } + + if (delta_z) // Shift along Z-axis + switch (boundary_conditions) { + case 2 : { // Periodic + const int ml = cimg::mod(-delta_z,depth()), ndelta_z = (ml<=depth()/2)?ml:(ml-depth()); + if (!ndelta_z) return *this; + CImg buf(width(),height(),cimg::abs(ndelta_z)); + if (ndelta_z>0) cimg_forC(*this,c) { + std::memcpy(buf,data(0,0,0,c),_width*_height*ndelta_z*sizeof(T)); + std::memmove(data(0,0,0,c),data(0,0,ndelta_z,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); + std::memcpy(data(0,0,_depth-ndelta_z,c),buf,_width*_height*ndelta_z*sizeof(T)); + } else cimg_forC(*this,c) { + std::memcpy(buf,data(0,0,_depth + ndelta_z,c),-ndelta_z*_width*_height*sizeof(T)); + std::memmove(data(0,0,-ndelta_z,c),data(0,0,0,c),_width*_height*(_depth + ndelta_z)*sizeof(T)); + std::memcpy(data(0,0,0,c),buf,-ndelta_z*_width*_height*sizeof(T)); + } + } break; + case 1 : // Neumann + if (delta_z<0) { + const int ndelta_z = (-delta_z>=depth())?depth() - 1:-delta_z; + if (!ndelta_z) return *this; + cimg_forC(*this,c) { + std::memmove(data(0,0,0,c),data(0,0,ndelta_z,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); + T *ptrd = data(0,0,_depth-ndelta_z,c), *ptrs = data(0,0,_depth - 1,c); + for (int l = 0; l=depth())?depth() - 1:delta_z; + if (!ndelta_z) return *this; + cimg_forC(*this,c) { + std::memmove(data(0,0,ndelta_z,c),data(0,0,0,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); + T *ptrd = data(0,0,1,c), *ptrs = data(0,0,0,c); + for (int l = 0; l=depth()) return fill((T)0); + if (delta_z<0) cimg_forC(*this,c) { + std::memmove(data(0,0,0,c),data(0,0,-delta_z,c),_width*_height*(_depth + delta_z)*sizeof(T)); + std::memset(data(0,0,_depth + delta_z,c),0,_width*_height*(-delta_z)*sizeof(T)); + } else cimg_forC(*this,c) { + std::memmove(data(0,0,delta_z,c),data(0,0,0,c),_width*_height*(_depth-delta_z)*sizeof(T)); + std::memset(data(0,0,0,c),0,delta_z*_width*_height*sizeof(T)); + } + } + + if (delta_c) // Shift along C-axis + switch (boundary_conditions) { + case 2 : { // Periodic + const int ml = cimg::mod(-delta_c,spectrum()), ndelta_c = (ml<=spectrum()/2)?ml:(ml-spectrum()); + if (!ndelta_c) return *this; + CImg buf(width(),height(),depth(),cimg::abs(ndelta_c)); + if (ndelta_c>0) { + std::memcpy(buf,_data,_width*_height*_depth*ndelta_c*sizeof(T)); + std::memmove(_data,data(0,0,0,ndelta_c),_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); + std::memcpy(data(0,0,0,_spectrum-ndelta_c),buf,_width*_height*_depth*ndelta_c*sizeof(T)); + } else { + std::memcpy(buf,data(0,0,0,_spectrum + ndelta_c),-ndelta_c*_width*_height*_depth*sizeof(T)); + std::memmove(data(0,0,0,-ndelta_c),_data,_width*_height*_depth*(_spectrum + ndelta_c)*sizeof(T)); + std::memcpy(_data,buf,-ndelta_c*_width*_height*_depth*sizeof(T)); + } + } break; + case 1 : // Neumann + if (delta_c<0) { + const int ndelta_c = (-delta_c>=spectrum())?spectrum() - 1:-delta_c; + if (!ndelta_c) return *this; + std::memmove(_data,data(0,0,0,ndelta_c),_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); + T *ptrd = data(0,0,0,_spectrum-ndelta_c), *ptrs = data(0,0,0,_spectrum - 1); + for (int l = 0; l=spectrum())?spectrum() - 1:delta_c; + if (!ndelta_c) return *this; + std::memmove(data(0,0,0,ndelta_c),_data,_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); + T *ptrd = data(0,0,0,1); + for (int l = 0; l=spectrum()) return fill((T)0); + if (delta_c<0) { + std::memmove(_data,data(0,0,0,-delta_c),_width*_height*_depth*(_spectrum + delta_c)*sizeof(T)); + std::memset(data(0,0,0,_spectrum + delta_c),0,_width*_height*_depth*(-delta_c)*sizeof(T)); + } else { + std::memmove(data(0,0,0,delta_c),_data,_width*_height*_depth*(_spectrum-delta_c)*sizeof(T)); + std::memset(_data,0,delta_c*_width*_height*_depth*sizeof(T)); + } + } + return *this; + } + + //! Shift image content \newinstance. + CImg get_shift(const int delta_x, const int delta_y=0, const int delta_z=0, const int delta_c=0, + const unsigned int boundary_conditions=0) const { + return (+*this).shift(delta_x,delta_y,delta_z,delta_c,boundary_conditions); + } + + //! Permute axes order. + /** + \param order Axes permutations, as a C-string of 4 characters. + This function permutes image content regarding the specified axes permutation. + **/ + CImg& permute_axes(const char *const order) { + return get_permute_axes(order).move_to(*this); + } + + //! Permute axes order \newinstance. + CImg get_permute_axes(const char *const order) const { + const T foo = (T)0; + return _permute_axes(order,foo); + } + + template + CImg _permute_axes(const char *const order, const t&) const { + if (is_empty() || !order) return CImg(*this,false); + CImg res; + const T* ptrs = _data; + unsigned char s_code[4] = { 0,1,2,3 }, n_code[4] = { 0 }; + for (unsigned int l = 0; order[l]; ++l) { + int c = cimg::lowercase(order[l]); + if (c!='x' && c!='y' && c!='z' && c!='c') { *s_code = 4; break; } + else { ++n_code[c%=4]; s_code[l] = c; } + } + if (*order && *s_code<4 && *n_code<=1 && n_code[1]<=1 && n_code[2]<=1 && n_code[3]<=1) { + const unsigned int code = (s_code[0]<<12) | (s_code[1]<<8) | (s_code[2]<<4) | (s_code[3]); + ulongT wh, whd; + switch (code) { + case 0x0123 : // xyzc + return +*this; + case 0x0132 : // xycz + res.assign(_width,_height,_spectrum,_depth); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(x,y,c,z,wh,whd) = (t)*(ptrs++); + break; + case 0x0213 : // xzyc + res.assign(_width,_depth,_height,_spectrum); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(x,z,y,c,wh,whd) = (t)*(ptrs++); + break; + case 0x0231 : // xzcy + res.assign(_width,_depth,_spectrum,_height); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(x,z,c,y,wh,whd) = (t)*(ptrs++); + break; + case 0x0312 : // xcyz + res.assign(_width,_spectrum,_height,_depth); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(x,c,y,z,wh,whd) = (t)*(ptrs++); + break; + case 0x0321 : // xczy + res.assign(_width,_spectrum,_depth,_height); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(x,c,z,y,wh,whd) = (t)*(ptrs++); + break; + case 0x1023 : // yxzc + res.assign(_height,_width,_depth,_spectrum); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(y,x,z,c,wh,whd) = (t)*(ptrs++); + break; + case 0x1032 : // yxcz + res.assign(_height,_width,_spectrum,_depth); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(y,x,c,z,wh,whd) = (t)*(ptrs++); + break; + case 0x1203 : // yzxc + res.assign(_height,_depth,_width,_spectrum); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(y,z,x,c,wh,whd) = (t)*(ptrs++); + break; + case 0x1230 : // yzcx + res.assign(_height,_depth,_spectrum,_width); + switch (_width) { + case 1 : { + t *ptr_r = res.data(0,0,0,0); + for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { + *(ptr_r++) = (t)*(ptrs++); + } + } break; + case 2 : { + t *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1); + for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { + *(ptr_r++) = (t)ptrs[0]; + *(ptr_g++) = (t)ptrs[1]; + ptrs+=2; + } + } break; + case 3 : { // Optimization for the classical conversion from interleaved RGB to planar RGB + t *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1), *ptr_b = res.data(0,0,0,2); + for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { + *(ptr_r++) = (t)ptrs[0]; + *(ptr_g++) = (t)ptrs[1]; + *(ptr_b++) = (t)ptrs[2]; + ptrs+=3; + } + } break; + case 4 : { // Optimization for the classical conversion from interleaved RGBA to planar RGBA + t + *ptr_r = res.data(0,0,0,0), *ptr_g = res.data(0,0,0,1), + *ptr_b = res.data(0,0,0,2), *ptr_a = res.data(0,0,0,3); + for (unsigned int siz = _height*_depth*_spectrum; siz; --siz) { + *(ptr_r++) = (t)ptrs[0]; + *(ptr_g++) = (t)ptrs[1]; + *(ptr_b++) = (t)ptrs[2]; + *(ptr_a++) = (t)ptrs[3]; + ptrs+=4; + } + } break; + default : { + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(y,z,c,x,wh,whd) = *(ptrs++); + return res; + } + } + break; + case 0x1302 : // ycxz + res.assign(_height,_spectrum,_width,_depth); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(y,c,x,z,wh,whd) = (t)*(ptrs++); + break; + case 0x1320 : // yczx + res.assign(_height,_spectrum,_depth,_width); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(y,c,z,x,wh,whd) = (t)*(ptrs++); + break; + case 0x2013 : // zxyc + res.assign(_depth,_width,_height,_spectrum); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(z,x,y,c,wh,whd) = (t)*(ptrs++); + break; + case 0x2031 : // zxcy + res.assign(_depth,_width,_spectrum,_height); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(z,x,c,y,wh,whd) = (t)*(ptrs++); + break; + case 0x2103 : // zyxc + res.assign(_depth,_height,_width,_spectrum); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(z,y,x,c,wh,whd) = (t)*(ptrs++); + break; + case 0x2130 : // zycx + res.assign(_depth,_height,_spectrum,_width); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(z,y,c,x,wh,whd) = (t)*(ptrs++); + break; + case 0x2301 : // zcxy + res.assign(_depth,_spectrum,_width,_height); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(z,c,x,y,wh,whd) = (t)*(ptrs++); + break; + case 0x2310 : // zcyx + res.assign(_depth,_spectrum,_height,_width); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(z,c,y,x,wh,whd) = (t)*(ptrs++); + break; + case 0x3012 : // cxyz + res.assign(_spectrum,_width,_height,_depth); + switch (_spectrum) { + case 1 : { + const T *ptr_r = data(0,0,0,0); + t *ptrd = res._data; + for (ulongT siz = (ulongT)_width*_height*_depth; siz; --siz) *(ptrd++) = (t)*(ptr_r++); + } break; + case 2 : { + const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1); + t *ptrd = res._data; + for (ulongT siz = (ulongT)_width*_height*_depth; siz; --siz) { + ptrd[0] = (t)*(ptr_r++); + ptrd[1] = (t)*(ptr_g++); + ptrd+=2; + } + } break; + case 3 : { // Optimization for the classical conversion from planar RGB to interleaved RGB + const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); + t *ptrd = res._data; + for (ulongT siz = (ulongT)_width*_height*_depth; siz; --siz) { + ptrd[0] = (t)*(ptr_r++); + ptrd[1] = (t)*(ptr_g++); + ptrd[2] = (t)*(ptr_b++); + ptrd+=3; + } + } break; + case 4 : { // Optimization for the classical conversion from planar RGBA to interleaved RGBA + const T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2), *ptr_a = data(0,0,0,3); + t *ptrd = res._data; + for (ulongT siz = (ulongT)_width*_height*_depth; siz; --siz) { + ptrd[0] = (t)*(ptr_r++); + ptrd[1] = (t)*(ptr_g++); + ptrd[2] = (t)*(ptr_b++); + ptrd[3] = (t)*(ptr_a++); + ptrd+=4; + } + } break; + default : { + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(c,x,y,z,wh,whd) = (t)*(ptrs++); + } + } + break; + case 0x3021 : // cxzy + res.assign(_spectrum,_width,_depth,_height); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(c,x,z,y,wh,whd) = (t)*(ptrs++); + break; + case 0x3102 : // cyxz + res.assign(_spectrum,_height,_width,_depth); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(c,y,x,z,wh,whd) = (t)*(ptrs++); + break; + case 0x3120 : // cyzx + res.assign(_spectrum,_height,_depth,_width); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(c,y,z,x,wh,whd) = (t)*(ptrs++); + break; + case 0x3201 : // czxy + res.assign(_spectrum,_depth,_width,_height); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(c,z,x,y,wh,whd) = (t)*(ptrs++); + break; + case 0x3210 : // czyx + res.assign(_spectrum,_depth,_height,_width); + wh = (ulongT)res._width*res._height; whd = wh*res._depth; + cimg_forXYZC(*this,x,y,z,c) res(c,z,y,x,wh,whd) = (t)*(ptrs++); + break; + } + } + if (!res) + throw CImgArgumentException(_cimg_instance + "permute_axes(): Invalid specified permutation '%s'.", + cimg_instance, + order); + return res; + } + + //! Unroll pixel values along specified axis. + /** + \param axis Unroll axis (can be \c 'x', \c 'y', \c 'z' or c 'c'). + **/ + CImg& unroll(const char axis) { + const unsigned int siz = (unsigned int)size(); + if (siz) switch (cimg::lowercase(axis)) { + case 'x' : _width = siz; _height = _depth = _spectrum = 1; break; + case 'y' : _height = siz; _width = _depth = _spectrum = 1; break; + case 'z' : _depth = siz; _width = _height = _spectrum = 1; break; + default : _spectrum = siz; _width = _height = _depth = 1; + } + return *this; + } + + //! Unroll pixel values along specified axis \newinstance. + CImg get_unroll(const char axis) const { + return (+*this).unroll(axis); + } + + //! Rotate image with arbitrary angle. + /** + \param angle Rotation angle, in degrees. + \param interpolation Type of interpolation. Can be { 0=nearest | 1=linear | 2=cubic }. + \param boundary_conditions Boundary conditions. + Can be { 0=dirichlet | 1=neumann | 2=periodic | 3=mirror }. + \note The size of the image is modified. + **/ + CImg& rotate(const float angle, const unsigned int interpolation=1, + const unsigned int boundary_conditions=0) { + const float nangle = cimg::mod(angle,360.0f); + if (nangle==0.0f) return *this; + return get_rotate(nangle,interpolation,boundary_conditions).move_to(*this); + } + + //! Rotate image with arbitrary angle \newinstance. + CImg get_rotate(const float angle, const unsigned int interpolation=1, + const unsigned int boundary_conditions=0) const { + if (is_empty()) return *this; + CImg res; + const float nangle = cimg::mod(angle,360.0f); + if (boundary_conditions!=1 && cimg::mod(nangle,90.0f)==0) { // Optimized version for orthogonal angles. + const int wm1 = width() - 1, hm1 = height() - 1; + const int iangle = (int)nangle/90; + switch (iangle) { + case 1 : { // 90 deg + res.assign(_height,_width,_depth,_spectrum); + T *ptrd = res._data; + cimg_forXYZC(res,x,y,z,c) *(ptrd++) = (*this)(y,hm1 - x,z,c); + } break; + case 2 : { // 180 deg + res.assign(_width,_height,_depth,_spectrum); + T *ptrd = res._data; + cimg_forXYZC(res,x,y,z,c) *(ptrd++) = (*this)(wm1 - x,hm1 - y,z,c); + } break; + case 3 : { // 270 deg + res.assign(_height,_width,_depth,_spectrum); + T *ptrd = res._data; + cimg_forXYZC(res,x,y,z,c) *(ptrd++) = (*this)(wm1 - y,x,z,c); + } break; + default : // 0 deg + return *this; + } + } else { // Generic angle + const float + rad = (float)(nangle*cimg::PI/180.0), + ca = (float)std::cos(rad), sa = (float)std::sin(rad), + ux = cimg::abs((_width - 1)*ca), uy = cimg::abs((_width - 1)*sa), + vx = cimg::abs((_height - 1)*sa), vy = cimg::abs((_height - 1)*ca), + w2 = 0.5f*(_width - 1), h2 = 0.5f*(_height - 1); + res.assign((int)cimg::round(1 + ux + vx),(int)cimg::round(1 + uy + vy),_depth,_spectrum); + const float rw2 = 0.5f*(res._width - 1), rh2 = 0.5f*(res._height - 1); + _rotate(res,nangle,interpolation,boundary_conditions,w2,h2,rw2,rh2); + } + return res; + } + + //! Rotate image with arbitrary angle, around a center point. + /** + \param angle Rotation angle, in degrees. + \param cx X-coordinate of the rotation center. + \param cy Y-coordinate of the rotation center. + \param interpolation Type of interpolation, { 0=nearest | 1=linear | 2=cubic | 3=mirror }. + \param boundary_conditions Boundary conditions, { 0=dirichlet | 1=neumann | 2=periodic | 3=mirror }. + **/ + CImg& rotate(const float angle, const float cx, const float cy, + const unsigned int interpolation, const unsigned int boundary_conditions=0) { + return get_rotate(angle,cx,cy,interpolation,boundary_conditions).move_to(*this); + } + + //! Rotate image with arbitrary angle, around a center point \newinstance. + CImg get_rotate(const float angle, const float cx, const float cy, + const unsigned int interpolation, const unsigned int boundary_conditions=0) const { + if (is_empty()) return *this; + CImg res(_width,_height,_depth,_spectrum); + _rotate(res,angle,interpolation,boundary_conditions,cx,cy,cx,cy); + return res; + } + + // [internal] Perform 2d rotation with arbitrary angle. + void _rotate(CImg& res, const float angle, + const unsigned int interpolation, const unsigned int boundary_conditions, + const float w2, const float h2, + const float rw2, const float rh2) const { + const float + rad = (float)(angle*cimg::PI/180.0), + ca = (float)std::cos(rad), sa = (float)std::sin(rad); + + switch (boundary_conditions) { + case 3 : { // Mirror + + switch (interpolation) { + case 2 : { // Cubic interpolation + const float ww = 2.0f*width(), hh = 2.0f*height(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZC(res,x,y,z,c) { + const float xc = x - rw2, yc = y - rh2, + mx = cimg::mod(w2 + xc*ca + yc*sa,ww), + my = cimg::mod(h2 - xc*sa + yc*ca,hh); + res(x,y,z,c) = _cubic_cut_atXY(mx=2048)) + cimg_forXYZC(res,x,y,z,c) { + const float xc = x - rw2, yc = y - rh2, + mx = cimg::mod(w2 + xc*ca + yc*sa,ww), + my = cimg::mod(h2 - xc*sa + yc*ca,hh); + res(x,y,z,c) = (T)_linear_atXY(mx=2048)) + cimg_forXYZC(res,x,y,z,c) { + const float xc = x - rw2, yc = y - rh2, + mx = cimg::mod((int)cimg::round(w2 + xc*ca + yc*sa),ww), + my = cimg::mod((int)cimg::round(h2 - xc*sa + yc*ca),hh); + res(x,y,z,c) = (*this)(mx=2048)) + cimg_forXYZC(res,x,y,z,c) { + const float xc = x - rw2, yc = y - rh2; + res(x,y,z,c) = _cubic_cut_atXY(cimg::mod(w2 + xc*ca + yc*sa,(float)width()), + cimg::mod(h2 - xc*sa + yc*ca,(float)height()),z,c); + } + } break; + case 1 : { // Linear interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZC(res,x,y,z,c) { + const float xc = x - rw2, yc = y - rh2; + res(x,y,z,c) = (T)_linear_atXY(cimg::mod(w2 + xc*ca + yc*sa,(float)width()), + cimg::mod(h2 - xc*sa + yc*ca,(float)height()),z,c); + } + } break; + default : { // Nearest-neighbor interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZC(res,x,y,z,c) { + const float xc = x - rw2, yc = y - rh2; + res(x,y,z,c) = (*this)(cimg::mod((int)cimg::round(w2 + xc*ca + yc*sa),(float)width()), + cimg::mod((int)cimg::round(h2 - xc*sa + yc*ca),(float)height()),z,c); + } + } + } break; + + case 1 : // Neumann + switch (interpolation) { + case 2 : { // Cubic interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZC(res,x,y,z,c) { + const float xc = x - rw2, yc = y - rh2; + res(x,y,z,c) = _cubic_cut_atXY(w2 + xc*ca + yc*sa,h2 - xc*sa + yc*ca,z,c); + } + } break; + case 1 : { // Linear interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZC(res,x,y,z,c) { + const float xc = x - rw2, yc = y - rh2; + res(x,y,z,c) = (T)_linear_atXY(w2 + xc*ca + yc*sa,h2 - xc*sa + yc*ca,z,c); + } + } break; + default : { // Nearest-neighbor interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZC(res,x,y,z,c) { + const float xc = x - rw2, yc = y - rh2; + res(x,y,z,c) = _atXY((int)cimg::round(w2 + xc*ca + yc*sa), + (int)cimg::round(h2 - xc*sa + yc*ca),z,c); + } + } + } break; + + default : // Dirichlet + switch (interpolation) { + case 2 : { // Cubic interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZC(res,x,y,z,c) { + const float xc = x - rw2, yc = y - rh2; + res(x,y,z,c) = cubic_cut_atXY(w2 + xc*ca + yc*sa,h2 - xc*sa + yc*ca,z,c,(T)0); + } + } break; + case 1 : { // Linear interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZC(res,x,y,z,c) { + const float xc = x - rw2, yc = y - rh2; + res(x,y,z,c) = (T)linear_atXY(w2 + xc*ca + yc*sa,h2 - xc*sa + yc*ca,z,c,(T)0); + } + } break; + default : { // Nearest-neighbor interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZC(res,x,y,z,c) { + const float xc = x - rw2, yc = y - rh2; + res(x,y,z,c) = atXY((int)cimg::round(w2 + xc*ca + yc*sa), + (int)cimg::round(h2 - xc*sa + yc*ca),z,c,(T)0); + } + } + } + } + } + + //! Rotate volumetric image with arbitrary angle and axis. + /** + \param u X-coordinate of the 3d rotation axis. + \param v Y-coordinate of the 3d rotation axis. + \param w Z-coordinate of the 3d rotation axis. + \param angle Rotation angle, in degrees. + \param interpolation Type of interpolation. Can be { 0=nearest | 1=linear | 2=cubic }. + \param boundary_conditions Boundary conditions. + Can be { 0=dirichlet | 1=neumann | 2=periodic | 3=mirror }. + \note Most of the time, size of the image is modified. + **/ + CImg rotate(const float u, const float v, const float w, const float angle, + const unsigned int interpolation, const unsigned int boundary_conditions) { + const float nangle = cimg::mod(angle,360.0f); + if (nangle==0.0f) return *this; + return get_rotate(u,v,w,nangle,interpolation,boundary_conditions).move_to(*this); + } + + //! Rotate volumetric image with arbitrary angle and axis \newinstance. + CImg get_rotate(const float u, const float v, const float w, const float angle, + const unsigned int interpolation, const unsigned int boundary_conditions) const { + if (is_empty()) return *this; + CImg res; + const float + w1 = _width - 1, h1 = _height - 1, d1 = _depth -1, + w2 = 0.5f*w1, h2 = 0.5f*h1, d2 = 0.5f*d1; + CImg R = CImg::rotation_matrix(u,v,w,angle); + const CImg + X = R*CImg(8,3,1,1, + 0.0f,w1,w1,0.0f,0.0f,w1,w1,0.0f, + 0.0f,0.0f,h1,h1,0.0f,0.0f,h1,h1, + 0.0f,0.0f,0.0f,0.0f,d1,d1,d1,d1); + float + xm, xM = X.get_shared_row(0).max_min(xm), + ym, yM = X.get_shared_row(1).max_min(ym), + zm, zM = X.get_shared_row(2).max_min(zm); + const int + dx = (int)cimg::round(xM - xm), + dy = (int)cimg::round(yM - ym), + dz = (int)cimg::round(zM - zm); + R.transpose(); + res.assign(1 + dx,1 + dy,1 + dz,_spectrum); + const float rw2 = 0.5f*dx, rh2 = 0.5f*dy, rd2 = 0.5f*dz; + _rotate(res,R,interpolation,boundary_conditions,w2,h2,d2,rw2,rh2,rd2); + return res; + } + + //! Rotate volumetric image with arbitrary angle and axis, around a center point. + /** + \param u X-coordinate of the 3d rotation axis. + \param v Y-coordinate of the 3d rotation axis. + \param w Z-coordinate of the 3d rotation axis. + \param angle Rotation angle, in degrees. + \param cx X-coordinate of the rotation center. + \param cy Y-coordinate of the rotation center. + \param cz Z-coordinate of the rotation center. + \param interpolation Type of interpolation. Can be { 0=nearest | 1=linear | 2=cubic | 3=mirror }. + \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann | 2=periodic }. + \note Most of the time, size of the image is modified. + **/ + CImg rotate(const float u, const float v, const float w, const float angle, + const float cx, const float cy, const float cz, + const unsigned int interpolation=1, const unsigned int boundary_conditions=0) { + const float nangle = cimg::mod(angle,360.0f); + if (nangle==0.0f) return *this; + return get_rotate(u,v,w,nangle,cx,cy,cz,interpolation,boundary_conditions).move_to(*this); + } + + //! Rotate volumetric image with arbitrary angle and axis, around a center point \newinstance. + CImg get_rotate(const float u, const float v, const float w, const float angle, + const float cx, const float cy, const float cz, + const unsigned int interpolation=1, const unsigned int boundary_conditions=0) const { + if (is_empty()) return *this; + CImg res(_width,_height,_depth,_spectrum); + CImg R = CImg::rotation_matrix(u,v,w,-angle); + _rotate(res,R,interpolation,boundary_conditions,cx,cy,cz,cx,cy,cz); + return res; + } + + // [internal] Perform 3d rotation with arbitrary axis and angle. + void _rotate(CImg& res, const CImg& R, + const unsigned int interpolation, const unsigned int boundary_conditions, + const float w2, const float h2, const float d2, + const float rw2, const float rh2, const float rd2) const { + switch (boundary_conditions) { + case 3 : // Mirror + switch (interpolation) { + case 2 : { // Cubic interpolation + const float ww = 2.0f*width(), hh = 2.0f*height(), dd = 2.0f*depth(); + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZ(res,x,y,z) { + const float + xc = x - rw2, yc = y - rh2, zc = z - rd2, + X = cimg::mod((float)(w2 + R(0,0)*xc + R(1,0)*yc + R(2,0)*zc),ww), + Y = cimg::mod((float)(h2 + R(0,1)*xc + R(1,1)*yc + R(2,1)*zc),hh), + Z = cimg::mod((float)(d2 + R(0,2)*xc + R(1,2)*yc + R(2,2)*zc),dd); + cimg_forC(res,c) res(x,y,z,c) = _cubic_cut_atXYZ(X=2048)) + cimg_forXYZ(res,x,y,z) { + const float + xc = x - rw2, yc = y - rh2, zc = z - rd2, + X = cimg::mod((float)(w2 + R(0,0)*xc + R(1,0)*yc + R(2,0)*zc),ww), + Y = cimg::mod((float)(h2 + R(0,1)*xc + R(1,1)*yc + R(2,1)*zc),hh), + Z = cimg::mod((float)(d2 + R(0,2)*xc + R(1,2)*yc + R(2,2)*zc),dd); + cimg_forC(res,c) res(x,y,z,c) = (T)_linear_atXYZ(X=2048)) + cimg_forXYZ(res,x,y,z) { + const float xc = x - rw2, yc = y - rh2, zc = z - rd2; + const int + X = cimg::mod((int)cimg::round(w2 + R(0,0)*xc + R(1,0)*yc + R(2,0)*zc),ww), + Y = cimg::mod((int)cimg::round(h2 + R(0,1)*xc + R(1,1)*yc + R(2,1)*zc),hh), + Z = cimg::mod((int)cimg::round(d2 + R(0,2)*xc + R(1,2)*yc + R(2,2)*zc),dd); + cimg_forC(res,c) res(x,y,z,c) = (*this)(X=2048)) + cimg_forXYZ(res,x,y,z) { + const float + xc = x - rw2, yc = y - rh2, zc = z - rd2, + X = cimg::mod((float)(w2 + R(0,0)*xc + R(1,0)*yc + R(2,0)*zc),(float)width()), + Y = cimg::mod((float)(h2 + R(0,1)*xc + R(1,1)*yc + R(2,1)*zc),(float)height()), + Z = cimg::mod((float)(d2 + R(0,2)*xc + R(1,2)*yc + R(2,2)*zc),(float)depth()); + cimg_forC(res,c) res(x,y,z,c) = _cubic_cut_atXYZ(X,Y,Z,c); + } + } break; + case 1 : { // Linear interpolation + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZ(res,x,y,z) { + const float + xc = x - rw2, yc = y - rh2, zc = z - rd2, + X = cimg::mod((float)(w2 + R(0,0)*xc + R(1,0)*yc + R(2,0)*zc),(float)width()), + Y = cimg::mod((float)(h2 + R(0,1)*xc + R(1,1)*yc + R(2,1)*zc),(float)height()), + Z = cimg::mod((float)(d2 + R(0,2)*xc + R(1,2)*yc + R(2,2)*zc),(float)depth()); + cimg_forC(res,c) res(x,y,z,c) = (T)_linear_atXYZ(X,Y,Z,c); + } + } break; + default : { // Nearest-neighbor interpolation + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZ(res,x,y,z) { + const float xc = x - rw2, yc = y - rh2, zc = z - rd2; + const int + X = cimg::mod((int)cimg::round(w2 + R(0,0)*xc + R(1,0)*yc + R(2,0)*zc),width()), + Y = cimg::mod((int)cimg::round(h2 + R(0,1)*xc + R(1,1)*yc + R(2,1)*zc),height()), + Z = cimg::mod((int)cimg::round(d2 + R(0,2)*xc + R(1,2)*yc + R(2,2)*zc),depth()); + cimg_forC(res,c) res(x,y,z,c) = (*this)(X,Y,Z,c); + } + } + } break; + + case 1 : // Neumann + switch (interpolation) { + case 2 : { // Cubic interpolation + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZ(res,x,y,z) { + const float + xc = x - rw2, yc = y - rh2, zc = z - rd2, + X = w2 + R(0,0)*xc + R(1,0)*yc + R(2,0)*zc, + Y = h2 + R(0,1)*xc + R(1,1)*yc + R(2,1)*zc, + Z = d2 + R(0,2)*xc + R(1,2)*yc + R(2,2)*zc; + cimg_forC(res,c) res(x,y,z,c) = _cubic_cut_atXYZ(X,Y,Z,c); + } + } break; + case 1 : { // Linear interpolation + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZ(res,x,y,z) { + const float + xc = x - rw2, yc = y - rh2, zc = z - rd2, + X = w2 + R(0,0)*xc + R(1,0)*yc + R(2,0)*zc, + Y = h2 + R(0,1)*xc + R(1,1)*yc + R(2,1)*zc, + Z = d2 + R(0,2)*xc + R(1,2)*yc + R(2,2)*zc; + cimg_forC(res,c) res(x,y,z,c) = _linear_atXYZ(X,Y,Z,c); + } + } break; + default : { // Nearest-neighbor interpolation + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZ(res,x,y,z) { + const float xc = x - rw2, yc = y - rh2, zc = z - rd2; + const int + X = (int)cimg::round(w2 + R(0,0)*xc + R(1,0)*yc + R(2,0)*zc), + Y = (int)cimg::round(h2 + R(0,1)*xc + R(1,1)*yc + R(2,1)*zc), + Z = (int)cimg::round(d2 + R(0,2)*xc + R(1,2)*yc + R(2,2)*zc); + cimg_forC(res,c) res(x,y,z,c) = _atXYZ(X,Y,Z,c); + } + } + } break; + + default : // Dirichlet + switch (interpolation) { + case 2 : { // Cubic interpolation + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZ(res,x,y,z) { + const float + xc = x - rw2, yc = y - rh2, zc = z - rd2, + X = w2 + R(0,0)*xc + R(1,0)*yc + R(2,0)*zc, + Y = h2 + R(0,1)*xc + R(1,1)*yc + R(2,1)*zc, + Z = d2 + R(0,2)*xc + R(1,2)*yc + R(2,2)*zc; + cimg_forC(res,c) res(x,y,z,c) = cubic_cut_atXYZ(X,Y,Z,c,(T)0); + } + } break; + case 1 : { // Linear interpolation + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZ(res,x,y,z) { + const float + xc = x - rw2, yc = y - rh2, zc = z - rd2, + X = w2 + R(0,0)*xc + R(1,0)*yc + R(2,0)*zc, + Y = h2 + R(0,1)*xc + R(1,1)*yc + R(2,1)*zc, + Z = d2 + R(0,2)*xc + R(1,2)*yc + R(2,2)*zc; + cimg_forC(res,c) res(x,y,z,c) = linear_atXYZ(X,Y,Z,c,(T)0); + } + } break; + default : { // Nearest-neighbor interpolation + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(res.size()>=2048)) + cimg_forXYZ(res,x,y,z) { + const float xc = x - rw2, yc = y - rh2, zc = z - rd2; + const int + X = (int)cimg::round(w2 + R(0,0)*xc + R(1,0)*yc + R(2,0)*zc), + Y = (int)cimg::round(h2 + R(0,1)*xc + R(1,1)*yc + R(2,1)*zc), + Z = (int)cimg::round(d2 + R(0,2)*xc + R(1,2)*yc + R(2,2)*zc); + cimg_forC(res,c) res(x,y,z,c) = atXYZ(X,Y,Z,c,(T)0); + } + } + } break; + } + } + + //! Warp image content by a warping field. + /** + \param warp Warping field. + \param mode Can be { 0=backward-absolute | 1=backward-relative | 2=forward-absolute | 3=foward-relative } + \param interpolation Can be { 0=nearest | 1=linear | 2=cubic }. + \param boundary_conditions Boundary conditions { 0=dirichlet | 1=neumann | 2=periodic | 3=mirror }. + **/ + template + CImg& warp(const CImg& warp, const unsigned int mode=0, + const unsigned int interpolation=1, const unsigned int boundary_conditions=0) { + return get_warp(warp,mode,interpolation,boundary_conditions).move_to(*this); + } + + //! Warp image content by a warping field \newinstance + template + CImg get_warp(const CImg& warp, const unsigned int mode=0, + const unsigned int interpolation=1, const unsigned int boundary_conditions=0) const { + if (is_empty() || !warp) return *this; + if (mode && !is_sameXYZ(warp)) + throw CImgArgumentException(_cimg_instance + "warp(): Instance and specified relative warping field (%u,%u,%u,%u,%p) " + "have different XYZ dimensions.", + cimg_instance, + warp._width,warp._height,warp._depth,warp._spectrum,warp._data); + + CImg res(warp._width,warp._height,warp._depth,_spectrum); + + if (warp._spectrum==1) { // 1d warping + if (mode>=3) { // Forward-relative warp + res.fill((T)0); + if (interpolation>=1) // Linear interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) res.set_linear_atX(*(ptrs++),x + (float)*(ptrs0++),y,z,c); + } + else // Nearest-neighbor interpolation + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) { + const int X = x + (int)cimg::round(*(ptrs0++)); + if (X>=0 && X=1) // Linear interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) res.set_linear_atX(*(ptrs++),(float)*(ptrs0++),y,z,c); + } + else // Nearest-neighbor interpolation + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) { + const int X = (int)cimg::round(*(ptrs0++)); + if (X>=0 && X=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const float mx = cimg::mod(x - (float)*(ptrs0++),w2); + *(ptrd++) = _cubic_cut_atX(mx=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = _cubic_cut_atX(cimg::mod(x - (float)*(ptrs0++),(float)_width),y,z,c); + } + break; + case 1 : // Neumann + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = _cubic_cut_atX(x - (float)*(ptrs0++),y,z,c); + } + break; + default : // Dirichlet + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = cubic_cut_atX(x - (float)*(ptrs0++),y,z,c,(T)0); + } + } + else if (interpolation==1) // Linear interpolation + switch (boundary_conditions) { + case 3 : { // Mirror + const float w2 = 2.0f*width(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const float mx = cimg::mod(x - (float)*(ptrs0++),w2); + *(ptrd++) = (T)_linear_atX(mx=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)_linear_atX(cimg::mod(x - (float)*(ptrs0++),(float)_width),y,z,c); + } + break; + case 1 : // Neumann + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)_linear_atX(x - (float)*(ptrs0++),y,z,c); + } + break; + default : // Dirichlet + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)linear_atX(x - (float)*(ptrs0++),y,z,c,(T)0); + } + } + else // Nearest-neighbor interpolation + switch (boundary_conditions) { + case 3 : { // Mirror + const int w2 = 2*width(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const int mx = cimg::mod(x - (int)cimg::round(*(ptrs0++)),w2); + *(ptrd++) = (*this)(mx=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const float mx = cimg::mod((float)*(ptrs0++),w2); + *(ptrd++) = _cubic_cut_atX(mx=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = _cubic_cut_atX(cimg::mod((float)*(ptrs0++),(float)_width),0,0,c); + } + break; + case 1 : // Neumann + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = _cubic_cut_atX((float)*(ptrs0++),0,0,c); + } + break; + default : // Dirichlet + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = cubic_cut_atX((float)*(ptrs0++),0,0,c,(T)0); + } + } + else if (interpolation==1) // Linear interpolation + switch (boundary_conditions) { + case 3 : { // Mirror + const float w2 = 2.0f*width(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const float mx = cimg::mod((float)*(ptrs0++),w2); + *(ptrd++) = (T)_linear_atX(mx=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)_linear_atX(cimg::mod((float)*(ptrs0++),(float)_width),0,0,c); + } + break; + case 1 : // Neumann + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)_linear_atX((float)*(ptrs0++),0,0,c); + } + break; + default : // Dirichlet + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)linear_atX((float)*(ptrs0++),0,0,c,(T)0); + } + } + else // Nearest-neighbor interpolation + switch (boundary_conditions) { + case 3 : { // Mirror + const int w2 = 2*width(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const int mx = cimg::mod((int)cimg::round(*(ptrs0++)),w2); + *(ptrd++) = (*this)(mx=3) { // Forward-relative warp + res.fill((T)0); + if (interpolation>=1) // Linear interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) res.set_linear_atXY(*(ptrs++),x + (float)*(ptrs0++),y + (float)*(ptrs1++),z,c); + } + else // Nearest-neighbor interpolation + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) { + const int X = x + (int)cimg::round(*(ptrs0++)), Y = y + (int)cimg::round(*(ptrs1++)); + if (X>=0 && X=0 && Y=1) // Linear interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) res.set_linear_atXY(*(ptrs++),(float)*(ptrs0++),(float)*(ptrs1++),z,c); + } + else // Nearest-neighbor interpolation + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) { + const int X = (int)cimg::round(*(ptrs0++)), Y = (int)cimg::round(*(ptrs1++)); + if (X>=0 && X=0 && Y=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const float + mx = cimg::mod(x - (float)*(ptrs0++),w2), + my = cimg::mod(y - (float)*(ptrs1++),h2); + *(ptrd++) = _cubic_cut_atXY(mx=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = _cubic_cut_atXY(cimg::mod(x - (float)*(ptrs0++),(float)_width), + cimg::mod(y - (float)*(ptrs1++),(float)_height),z,c); + } + break; + case 1 : // Neumann + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = _cubic_cut_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c); + } + break; + default : // Dirichlet + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = cubic_cut_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c,(T)0); + } + } + else if (interpolation==1) // Linear interpolation + switch (boundary_conditions) { + case 3 : { // Mirror + const float w2 = 2.0f*width(), h2 = 2.0f*height(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const float + mx = cimg::mod(x - (float)*(ptrs0++),w2), + my = cimg::mod(y - (float)*(ptrs1++),h2); + *(ptrd++) = (T)_linear_atXY(mx=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)_linear_atXY(cimg::mod(x - (float)*(ptrs0++),(float)_width), + cimg::mod(y - (float)*(ptrs1++),(float)_height),z,c); + } + break; + case 1 : // Neumann + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)_linear_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c); + } + break; + default : // Dirichlet + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)linear_atXY(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z,c,(T)0); + } + } + else // Nearest-neighbor interpolation + switch (boundary_conditions) { + case 3 : { // Mirror + const int w2 = 2*width(), h2 = 2*height(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const int + mx = cimg::mod(x - (int)cimg::round(*(ptrs0++)),w2), + my = cimg::mod(y - (int)cimg::round(*(ptrs1++)),h2); + *(ptrd++) = (*this)(mx=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const float + mx = cimg::mod((float)*(ptrs0++),w2), + my = cimg::mod((float)*(ptrs1++),h2); + *(ptrd++) = _cubic_cut_atXY(mx=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = _cubic_cut_atXY(cimg::mod((float)*(ptrs0++),(float)_width), + cimg::mod((float)*(ptrs1++),(float)_height),0,c); + } + break; + case 1 : // Neumann + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = _cubic_cut_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c); + } + break; + default : // Dirichlet + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = cubic_cut_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c,(T)0); + } + } + else if (interpolation==1) // Linear interpolation + switch (boundary_conditions) { + case 3 : { // Mirror + const float w2 = 2.0f*width(), h2 = 2.0f*height(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const float + mx = cimg::mod((float)*(ptrs0++),w2), + my = cimg::mod((float)*(ptrs1++),h2); + *(ptrd++) = (T)_linear_atXY(mx=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)_linear_atXY(cimg::mod((float)*(ptrs0++),(float)_width), + cimg::mod((float)*(ptrs1++),(float)_height),0,c); + } + break; + case 1 : // Neumann + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)_linear_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c); + } + break; + default : // Dirichlet + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)linear_atXY((float)*(ptrs0++),(float)*(ptrs1++),0,c,(T)0); + } + } + else // Nearest-neighbor interpolation + switch (boundary_conditions) { + case 3 : { // Mirror + const int w2 = 2*width(), h2 = 2*height(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const int + mx = cimg::mod((int)cimg::round(*(ptrs0++)),w2), + my = cimg::mod((int)cimg::round(*(ptrs1++)),h2); + *(ptrd++) = (*this)(mx=3) { // Forward-relative warp + res.fill((T)0); + if (interpolation>=1) // Linear interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) res.set_linear_atXYZ(*(ptrs++),x + (float)*(ptrs0++),y + (float)*(ptrs1++), + z + (float)*(ptrs2++),c); + } + else // Nearest-neighbor interpolation + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) { + const int + X = x + (int)cimg::round(*(ptrs0++)), + Y = y + (int)cimg::round(*(ptrs1++)), + Z = z + (int)cimg::round(*(ptrs2++)); + if (X>=0 && X=0 && Y=0 && Z=1) // Linear interpolation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) res.set_linear_atXYZ(*(ptrs++),(float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c); + } + else // Nearest-neighbor interpolation + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) { + const int + X = (int)cimg::round(*(ptrs0++)), + Y = (int)cimg::round(*(ptrs1++)), + Z = (int)cimg::round(*(ptrs2++)); + if (X>=0 && X=0 && Y=0 && Z=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const float + mx = cimg::mod(x - (float)*(ptrs0++),w2), + my = cimg::mod(y - (float)*(ptrs1++),h2), + mz = cimg::mod(z - (float)*(ptrs2++),d2); + *(ptrd++) = _cubic_cut_atXYZ(mx=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = _cubic_cut_atXYZ(cimg::mod(x - (float)*(ptrs0++),(float)_width), + cimg::mod(y - (float)*(ptrs1++),(float)_height), + cimg::mod(z - (float)*(ptrs2++),(float)_depth),c); + } + break; + case 1 : // Neumann + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) + *(ptrd++) = _cubic_cut_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c); + } + break; + default : // Dirichlet + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) + *(ptrd++) = cubic_cut_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c,(T)0); + } + } + else if (interpolation==1) // Linear interpolation + switch (boundary_conditions) { + case 3 : { // Mirror + const float w2 = 2.0f*width(), h2 = 2.0f*height(), d2 = 2.0f*depth(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const float + mx = cimg::mod(x - (float)*(ptrs0++),w2), + my = cimg::mod(y - (float)*(ptrs1++),h2), + mz = cimg::mod(z - (float)*(ptrs2++),d2); + *(ptrd++) = (T)_linear_atXYZ(mx=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)_linear_atXYZ(cimg::mod(x - (float)*(ptrs0++),(float)_width), + cimg::mod(y - (float)*(ptrs1++),(float)_height), + cimg::mod(z - (float)*(ptrs2++),(float)_depth),c); + } + break; + case 1 : // Neumann + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) + *(ptrd++) = (T)_linear_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c); + } + break; + default : // Dirichlet + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) + *(ptrd++) = (T)linear_atXYZ(x - (float)*(ptrs0++),y - (float)*(ptrs1++),z - (float)*(ptrs2++),c,(T)0); + } + } + else // Nearest neighbor interpolation + switch (boundary_conditions) { + case 3 : { // Mirror + const int w2 = 2*width(), h2 = 2*height(), d2 = 2*depth(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const int + mx = cimg::mod(x - (int)cimg::round(*(ptrs0++)),w2), + my = cimg::mod(y - (int)cimg::round(*(ptrs1++)),h2), + mz = cimg::mod(z - (int)cimg::round(*(ptrs2++)),d2); + *(ptrd++) = (*this)(mx=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const float + mx = cimg::mod((float)*(ptrs0++),w2), + my = cimg::mod((float)*(ptrs1++),h2), + mz = cimg::mod((float)*(ptrs2++),d2); + *(ptrd++) = _cubic_cut_atXYZ(mx=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = _cubic_cut_atXYZ(cimg::mod((float)*(ptrs0++),(float)_width), + cimg::mod((float)*(ptrs1++),(float)_height), + cimg::mod((float)*(ptrs2++),(float)_depth),c); + } + break; + case 1 : // Neumann + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = _cubic_cut_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c); + } + break; + default : // Dirichlet + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = cubic_cut_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++), + c,(T)0); + } + } + else if (interpolation==1) // Linear interpolation + switch (boundary_conditions) { + case 3 : { // Mirror + const float w2 = 2.0f*width(), h2 = 2.0f*height(), d2 = 2.0f*depth(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const float + mx = cimg::mod((float)*(ptrs0++),w2), + my = cimg::mod((float)*(ptrs1++),h2), + mz = cimg::mod((float)*(ptrs2++),d2); + *(ptrd++) = (T)_linear_atXYZ(mx=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)_linear_atXYZ(cimg::mod((float)*(ptrs0++),(float)_width), + cimg::mod((float)*(ptrs1++),(float)_height), + cimg::mod((float)*(ptrs2++),(float)_depth),c); + } + break; + case 1 : // Neumann + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)_linear_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c); + } + break; + default : // Dirichlet + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=1048576)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) *(ptrd++) = (T)linear_atXYZ((float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++), + c,(T)0); + } + } + else // Nearest-neighbor interpolation + switch (boundary_conditions) { + case 3 : { // Mirror + const int w2 = 2*width(), h2 = 2*height(), d2 = 2*depth(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(res.size()>=4096)) + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + T *ptrd = res.data(0,y,z,c); + cimg_forX(res,x) { + const int + mx = cimg::mod((int)cimg::round(*(ptrs0++)),w2), + my = cimg::mod((int)cimg::round(*(ptrs1++)),h2), + mz = cimg::mod((int)cimg::round(*(ptrs2++)),d2); + *(ptrd++) = (*this)(mx get_projections2d(const unsigned int x0, const unsigned int y0, const unsigned int z0) const { + if (is_empty() || _depth<2) return +*this; + const unsigned int + _x0 = (x0>=_width)?_width - 1:x0, + _y0 = (y0>=_height)?_height - 1:y0, + _z0 = (z0>=_depth)?_depth - 1:z0; + const CImg + img_xy = get_crop(0,0,_z0,0,_width - 1,_height - 1,_z0,_spectrum - 1), + img_zy = get_crop(_x0,0,0,0,_x0,_height - 1,_depth - 1,_spectrum - 1).permute_axes("xzyc"). + resize(_depth,_height,1,-100,-1), + img_xz = get_crop(0,_y0,0,0,_width - 1,_y0,_depth - 1,_spectrum - 1).resize(_width,_depth,1,-100,-1); + return CImg(_width + _depth,_height + _depth,1,_spectrum,cimg::min(img_xy.min(),img_zy.min(),img_xz.min())). + draw_image(0,0,img_xy).draw_image(img_xy._width,0,img_zy). + draw_image(0,img_xy._height,img_xz); + } + + //! Construct a 2d representation of a 3d image, with XY,XZ and YZ views \inplace. + CImg& projections2d(const unsigned int x0, const unsigned int y0, const unsigned int z0) { + if (_depth<2) return *this; + return get_projections2d(x0,y0,z0).move_to(*this); + } + + //! Crop image region. + /** + \param x0 = X-coordinate of the upper-left crop rectangle corner. + \param y0 = Y-coordinate of the upper-left crop rectangle corner. + \param z0 = Z-coordinate of the upper-left crop rectangle corner. + \param c0 = C-coordinate of the upper-left crop rectangle corner. + \param x1 = X-coordinate of the lower-right crop rectangle corner. + \param y1 = Y-coordinate of the lower-right crop rectangle corner. + \param z1 = Z-coordinate of the lower-right crop rectangle corner. + \param c1 = C-coordinate of the lower-right crop rectangle corner. + \param boundary_conditions = Can be { 0=dirichlet | 1=neumann | 2=periodic | 3=mirror }. + **/ + CImg& crop(const int x0, const int y0, const int z0, const int c0, + const int x1, const int y1, const int z1, const int c1, + const unsigned int boundary_conditions=0) { + return get_crop(x0,y0,z0,c0,x1,y1,z1,c1,boundary_conditions).move_to(*this); + } + + //! Crop image region \newinstance. + CImg get_crop(const int x0, const int y0, const int z0, const int c0, + const int x1, const int y1, const int z1, const int c1, + const unsigned int boundary_conditions=0) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "crop(): Empty instance.", + cimg_instance); + const int + nx0 = x0 res(1U + nx1 - nx0,1U + ny1 - ny0,1U + nz1 - nz0,1U + nc1 - nc0); + if (nx0<0 || nx1>=width() || ny0<0 || ny1>=height() || nz0<0 || nz1>=depth() || nc0<0 || nc1>=spectrum()) + switch (boundary_conditions) { + case 3 : { // Mirror + const int w2 = 2*width(), h2 = 2*height(), d2 = 2*depth(), s2 = 2*spectrum(); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=16 && _height*_depth*_spectrum>=4)) + cimg_forXYZC(res,x,y,z,c) { + const int + mx = cimg::mod(nx0 + x,w2), + my = cimg::mod(ny0 + y,h2), + mz = cimg::mod(nz0 + z,d2), + mc = cimg::mod(nc0 + c,s2); + res(x,y,z,c) = (*this)(mx=16 && _height*_depth*_spectrum>=4)) + cimg_forXYZC(res,x,y,z,c) { + res(x,y,z,c) = (*this)(cimg::mod(nx0 + x,width()),cimg::mod(ny0 + y,height()), + cimg::mod(nz0 + z,depth()),cimg::mod(nc0 + c,spectrum())); + } + } break; + case 1 : // Neumann + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=16 && _height*_depth*_spectrum>=4)) + cimg_forXYZC(res,x,y,z,c) res(x,y,z,c) = _atXYZC(nx0 + x,ny0 + y,nz0 + z,nc0 + c); + break; + default : // Dirichlet + res.fill((T)0).draw_image(-nx0,-ny0,-nz0,-nc0,*this); + } + else res.draw_image(-nx0,-ny0,-nz0,-nc0,*this); + return res; + } + + //! Crop image region \overloading. + CImg& crop(const int x0, const int y0, const int z0, + const int x1, const int y1, const int z1, + const unsigned int boundary_conditions=0) { + return crop(x0,y0,z0,0,x1,y1,z1,_spectrum - 1,boundary_conditions); + } + + //! Crop image region \newinstance. + CImg get_crop(const int x0, const int y0, const int z0, + const int x1, const int y1, const int z1, + const unsigned int boundary_conditions=0) const { + return get_crop(x0,y0,z0,0,x1,y1,z1,_spectrum - 1,boundary_conditions); + } + + //! Crop image region \overloading. + CImg& crop(const int x0, const int y0, + const int x1, const int y1, + const unsigned int boundary_conditions=0) { + return crop(x0,y0,0,0,x1,y1,_depth - 1,_spectrum - 1,boundary_conditions); + } + + //! Crop image region \newinstance. + CImg get_crop(const int x0, const int y0, + const int x1, const int y1, + const unsigned int boundary_conditions=0) const { + return get_crop(x0,y0,0,0,x1,y1,_depth - 1,_spectrum - 1,boundary_conditions); + } + + //! Crop image region \overloading. + CImg& crop(const int x0, const int x1, const unsigned int boundary_conditions=0) { + return crop(x0,0,0,0,x1,_height - 1,_depth - 1,_spectrum - 1,boundary_conditions); + } + + //! Crop image region \newinstance. + CImg get_crop(const int x0, const int x1, const unsigned int boundary_conditions=0) const { + return get_crop(x0,0,0,0,x1,_height - 1,_depth - 1,_spectrum - 1,boundary_conditions); + } + + //! Autocrop image region, regarding the specified background value. + CImg& autocrop(const T& value, const char *const axes="czyx") { + if (is_empty()) return *this; + for (const char *s = axes; *s; ++s) { + const char axis = cimg::lowercase(*s); + const CImg coords = _autocrop(value,axis); + if (coords[0]==-1 && coords[1]==-1) return assign(); // Image has only 'value' pixels. + else switch (axis) { + case 'x' : { + const int x0 = coords[0], x1 = coords[1]; + if (x0>=0 && x1>=0) crop(x0,x1); + } break; + case 'y' : { + const int y0 = coords[0], y1 = coords[1]; + if (y0>=0 && y1>=0) crop(0,y0,_width - 1,y1); + } break; + case 'z' : { + const int z0 = coords[0], z1 = coords[1]; + if (z0>=0 && z1>=0) crop(0,0,z0,_width - 1,_height - 1,z1); + } break; + default : { + const int c0 = coords[0], c1 = coords[1]; + if (c0>=0 && c1>=0) crop(0,0,0,c0,_width - 1,_height - 1,_depth - 1,c1); + } + } + } + return *this; + } + + //! Autocrop image region, regarding the specified background value \newinstance. + CImg get_autocrop(const T& value, const char *const axes="czyx") const { + return (+*this).autocrop(value,axes); + } + + //! Autocrop image region, regarding the specified background color. + /** + \param color Color used for the crop. If \c 0, color is guessed. + \param axes Axes used for the crop. + **/ + CImg& autocrop(const T *const color=0, const char *const axes="zyx") { + if (is_empty()) return *this; + if (!color) { // Guess color. + const CImg col1 = get_vector_at(0,0,0); + const unsigned int w = _width, h = _height, d = _depth, s = _spectrum; + autocrop(col1,axes); + if (_width==w && _height==h && _depth==d && _spectrum==s) { + const CImg col2 = get_vector_at(w - 1,h - 1,d - 1); + autocrop(col2,axes); + } + return *this; + } + for (const char *s = axes; *s; ++s) { + const char axis = cimg::lowercase(*s); + switch (axis) { + case 'x' : { + int x0 = width(), x1 = -1; + cimg_forC(*this,c) { + const CImg coords = get_shared_channel(c)._autocrop(color[c],'x'); + const int nx0 = coords[0], nx1 = coords[1]; + if (nx0>=0 && nx1>=0) { x0 = std::min(x0,nx0); x1 = std::max(x1,nx1); } + } + if (x0==width() && x1==-1) return assign(); else crop(x0,x1); + } break; + case 'y' : { + int y0 = height(), y1 = -1; + cimg_forC(*this,c) { + const CImg coords = get_shared_channel(c)._autocrop(color[c],'y'); + const int ny0 = coords[0], ny1 = coords[1]; + if (ny0>=0 && ny1>=0) { y0 = std::min(y0,ny0); y1 = std::max(y1,ny1); } + } + if (y0==height() && y1==-1) return assign(); else crop(0,y0,_width - 1,y1); + } break; + default : { + int z0 = depth(), z1 = -1; + cimg_forC(*this,c) { + const CImg coords = get_shared_channel(c)._autocrop(color[c],'z'); + const int nz0 = coords[0], nz1 = coords[1]; + if (nz0>=0 && nz1>=0) { z0 = std::min(z0,nz0); z1 = std::max(z1,nz1); } + } + if (z0==depth() && z1==-1) return assign(); else crop(0,0,z0,_width - 1,_height - 1,z1); + } + } + } + return *this; + } + + //! Autocrop image region, regarding the specified background color \newinstance. + CImg get_autocrop(const T *const color=0, const char *const axes="zyx") const { + return (+*this).autocrop(color,axes); + } + + //! Autocrop image region, regarding the specified background color \overloading. + template CImg& autocrop(const CImg& color, const char *const axes="zyx") { + return get_autocrop(color,axes).move_to(*this); + } + + //! Autocrop image region, regarding the specified background color \newinstance. + template CImg get_autocrop(const CImg& color, const char *const axes="zyx") const { + return get_autocrop(color._data,axes); + } + + CImg _autocrop(const T& value, const char axis) const { + CImg res; + switch (cimg::lowercase(axis)) { + case 'x' : { + int x0 = -1, x1 = -1; + cimg_forX(*this,x) cimg_forYZC(*this,y,z,c) + if ((*this)(x,y,z,c)!=value) { x0 = x; x = width(); y = height(); z = depth(); c = spectrum(); } + if (x0>=0) { + for (int x = width() - 1; x>=0; --x) cimg_forYZC(*this,y,z,c) + if ((*this)(x,y,z,c)!=value) { x1 = x; x = 0; y = height(); z = depth(); c = spectrum(); } + } + res = CImg::vector(x0,x1); + } break; + case 'y' : { + int y0 = -1, y1 = -1; + cimg_forY(*this,y) cimg_forXZC(*this,x,z,c) + if ((*this)(x,y,z,c)!=value) { y0 = y; x = width(); y = height(); z = depth(); c = spectrum(); } + if (y0>=0) { + for (int y = height() - 1; y>=0; --y) cimg_forXZC(*this,x,z,c) + if ((*this)(x,y,z,c)!=value) { y1 = y; x = width(); y = 0; z = depth(); c = spectrum(); } + } + res = CImg::vector(y0,y1); + } break; + case 'z' : { + int z0 = -1, z1 = -1; + cimg_forZ(*this,z) cimg_forXYC(*this,x,y,c) + if ((*this)(x,y,z,c)!=value) { z0 = z; x = width(); y = height(); z = depth(); c = spectrum(); } + if (z0>=0) { + for (int z = depth() - 1; z>=0; --z) cimg_forXYC(*this,x,y,c) + if ((*this)(x,y,z,c)!=value) { z1 = z; x = width(); y = height(); z = 0; c = spectrum(); } + } + res = CImg::vector(z0,z1); + } break; + default : { + int c0 = -1, c1 = -1; + cimg_forC(*this,c) cimg_forXYZ(*this,x,y,z) + if ((*this)(x,y,z,c)!=value) { c0 = c; x = width(); y = height(); z = depth(); c = spectrum(); } + if (c0>=0) { + for (int c = spectrum() - 1; c>=0; --c) cimg_forXYZ(*this,x,y,z) + if ((*this)(x,y,z,c)!=value) { c1 = c; x = width(); y = height(); z = depth(); c = 0; } + } + res = CImg::vector(c0,c1); + } + } + return res; + } + + //! Return specified image column. + /** + \param x0 Image column. + **/ + CImg get_column(const int x0) const { + return get_columns(x0,x0); + } + + //! Return specified image column \inplace. + CImg& column(const int x0) { + return columns(x0,x0); + } + + //! Return specified range of image columns. + /** + \param x0 Starting image column. + \param x1 Ending image column. + **/ + CImg& columns(const int x0, const int x1) { + return get_columns(x0,x1).move_to(*this); + } + + //! Return specified range of image columns \inplace. + CImg get_columns(const int x0, const int x1) const { + return get_crop(x0,0,0,0,x1,height() - 1,depth() - 1,spectrum() - 1); + } + + //! Return specified image row. + CImg get_row(const int y0) const { + return get_rows(y0,y0); + } + + //! Return specified image row \inplace. + /** + \param y0 Image row. + **/ + CImg& row(const int y0) { + return rows(y0,y0); + } + + //! Return specified range of image rows. + /** + \param y0 Starting image row. + \param y1 Ending image row. + **/ + CImg get_rows(const int y0, const int y1) const { + return get_crop(0,y0,0,0,width() - 1,y1,depth() - 1,spectrum() - 1); + } + + //! Return specified range of image rows \inplace. + CImg& rows(const int y0, const int y1) { + return get_rows(y0,y1).move_to(*this); + } + + //! Return specified image slice. + /** + \param z0 Image slice. + **/ + CImg get_slice(const int z0) const { + return get_slices(z0,z0); + } + + //! Return specified image slice \inplace. + CImg& slice(const int z0) { + return slices(z0,z0); + } + + //! Return specified range of image slices. + /** + \param z0 Starting image slice. + \param z1 Ending image slice. + **/ + CImg get_slices(const int z0, const int z1) const { + return get_crop(0,0,z0,0,width() - 1,height() - 1,z1,spectrum() - 1); + } + + //! Return specified range of image slices \inplace. + CImg& slices(const int z0, const int z1) { + return get_slices(z0,z1).move_to(*this); + } + + //! Return specified image channel. + /** + \param c0 Image channel. + **/ + CImg get_channel(const int c0) const { + return get_channels(c0,c0); + } + + //! Return specified image channel \inplace. + CImg& channel(const int c0) { + return channels(c0,c0); + } + + //! Return specified range of image channels. + /** + \param c0 Starting image channel. + \param c1 Ending image channel. + **/ + CImg get_channels(const int c0, const int c1) const { + return get_crop(0,0,0,c0,width() - 1,height() - 1,depth() - 1,c1); + } + + //! Return specified range of image channels \inplace. + CImg& channels(const int c0, const int c1) { + return get_channels(c0,c1).move_to(*this); + } + + //! Return stream line of a 2d or 3d vector field. + CImg get_streamline(const float x, const float y, const float z, + const float L=256, const float dl=0.1f, + const unsigned int interpolation_type=2, const bool is_backward_tracking=false, + const bool is_oriented_only=false) const { + if (_spectrum!=2 && _spectrum!=3) + throw CImgInstanceException(_cimg_instance + "streamline(): Instance is not a 2d or 3d vector field.", + cimg_instance); + if (_spectrum==2) { + if (is_oriented_only) { + typename CImg::_functor4d_streamline2d_oriented func(*this); + return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,true, + 0,0,0,_width - 1.0f,_height - 1.0f,0.0f); + } else { + typename CImg::_functor4d_streamline2d_directed func(*this); + return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,false, + 0,0,0,_width - 1.0f,_height - 1.0f,0.0f); + } + } + if (is_oriented_only) { + typename CImg::_functor4d_streamline3d_oriented func(*this); + return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,true, + 0,0,0,_width - 1.0f,_height - 1.0f,_depth - 1.0f); + } + typename CImg::_functor4d_streamline3d_directed func(*this); + return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,false, + 0,0,0,_width - 1.0f,_height - 1.0f,_depth - 1.0f); + } + + //! Return stream line of a 3d vector field. + /** + \param func Vector field function. + \param x X-coordinate of the starting point of the streamline. + \param y Y-coordinate of the starting point of the streamline. + \param z Z-coordinate of the starting point of the streamline. + \param L Streamline length. + \param dl Streamline length increment. + \param interpolation_type Type of interpolation. + Can be { 0=nearest int | 1=linear | 2=2nd-order RK | 3=4th-order RK. }. + \param is_backward_tracking Tells if the streamline is estimated forward or backward. + \param is_oriented_only Tells if the direction of the vectors must be ignored. + \param x0 X-coordinate of the first bounding-box vertex. + \param y0 Y-coordinate of the first bounding-box vertex. + \param z0 Z-coordinate of the first bounding-box vertex. + \param x1 X-coordinate of the second bounding-box vertex. + \param y1 Y-coordinate of the second bounding-box vertex. + \param z1 Z-coordinate of the second bounding-box vertex. + **/ + template + static CImg streamline(const tfunc& func, + const float x, const float y, const float z, + const float L=256, const float dl=0.1f, + const unsigned int interpolation_type=2, const bool is_backward_tracking=false, + const bool is_oriented_only=false, + const float x0=0, const float y0=0, const float z0=0, + const float x1=0, const float y1=0, const float z1=0) { + if (dl<=0) + throw CImgArgumentException("CImg<%s>::streamline(): Invalid specified integration length %g " + "(should be >0).", + pixel_type(), + dl); + + const bool is_bounded = (x0!=x1 || y0!=y1 || z0!=z1); + if (L<=0 || (is_bounded && (xx1 || yy1 || zz1))) return CImg(); + const unsigned int size_L = (unsigned int)cimg::round(L/dl + 1); + CImg coordinates(size_L,3); + const float dl2 = dl/2; + float + *ptr_x = coordinates.data(0,0), + *ptr_y = coordinates.data(0,1), + *ptr_z = coordinates.data(0,2), + pu = (float)(dl*func(x,y,z,0)), + pv = (float)(dl*func(x,y,z,1)), + pw = (float)(dl*func(x,y,z,2)), + X = x, Y = y, Z = z; + + switch (interpolation_type) { + case 0 : { // Nearest integer interpolation. + cimg_forX(coordinates,l) { + *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; + const int + xi = (int)(X>0?X + 0.5f:X - 0.5f), + yi = (int)(Y>0?Y + 0.5f:Y - 0.5f), + zi = (int)(Z>0?Z + 0.5f:Z - 0.5f); + float + u = (float)(dl*func((float)xi,(float)yi,(float)zi,0)), + v = (float)(dl*func((float)xi,(float)yi,(float)zi,1)), + w = (float)(dl*func((float)xi,(float)yi,(float)zi,2)); + if (is_oriented_only && u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } + if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } + if (is_bounded && (Xx1 || Yy1 || Zz1)) break; + } + } break; + case 1 : { // First-order interpolation. + cimg_forX(coordinates,l) { + *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; + float + u = (float)(dl*func(X,Y,Z,0)), + v = (float)(dl*func(X,Y,Z,1)), + w = (float)(dl*func(X,Y,Z,2)); + if (is_oriented_only && u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } + if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } + if (is_bounded && (Xx1 || Yy1 || Zz1)) break; + } + } break; + case 2 : { // Second order interpolation. + cimg_forX(coordinates,l) { + *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; + float + u0 = (float)(dl2*func(X,Y,Z,0)), + v0 = (float)(dl2*func(X,Y,Z,1)), + w0 = (float)(dl2*func(X,Y,Z,2)); + if (is_oriented_only && u0*pu + v0*pv + w0*pw<0) { u0 = -u0; v0 = -v0; w0 = -w0; } + float + u = (float)(dl*func(X + u0,Y + v0,Z + w0,0)), + v = (float)(dl*func(X + u0,Y + v0,Z + w0,1)), + w = (float)(dl*func(X + u0,Y + v0,Z + w0,2)); + if (is_oriented_only && u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } + if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } + if (is_bounded && (Xx1 || Yy1 || Zz1)) break; + } + } break; + default : { // Fourth order interpolation. + cimg_forX(coordinates,x) { + *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; + float + u0 = (float)(dl2*func(X,Y,Z,0)), + v0 = (float)(dl2*func(X,Y,Z,1)), + w0 = (float)(dl2*func(X,Y,Z,2)); + if (is_oriented_only && u0*pu + v0*pv + w0*pw<0) { u0 = -u0; v0 = -v0; w0 = -w0; } + float + u1 = (float)(dl2*func(X + u0,Y + v0,Z + w0,0)), + v1 = (float)(dl2*func(X + u0,Y + v0,Z + w0,1)), + w1 = (float)(dl2*func(X + u0,Y + v0,Z + w0,2)); + if (is_oriented_only && u1*pu + v1*pv + w1*pw<0) { u1 = -u1; v1 = -v1; w1 = -w1; } + float + u2 = (float)(dl2*func(X + u1,Y + v1,Z + w1,0)), + v2 = (float)(dl2*func(X + u1,Y + v1,Z + w1,1)), + w2 = (float)(dl2*func(X + u1,Y + v1,Z + w1,2)); + if (is_oriented_only && u2*pu + v2*pv + w2*pw<0) { u2 = -u2; v2 = -v2; w2 = -w2; } + float + u3 = (float)(dl2*func(X + u2,Y + v2,Z + w2,0)), + v3 = (float)(dl2*func(X + u2,Y + v2,Z + w2,1)), + w3 = (float)(dl2*func(X + u2,Y + v2,Z + w2,2)); + if (is_oriented_only && u2*pu + v2*pv + w2*pw<0) { u3 = -u3; v3 = -v3; w3 = -w3; } + const float + u = (u0 + u3)/3 + (u1 + u2)/1.5f, + v = (v0 + v3)/3 + (v1 + v2)/1.5f, + w = (w0 + w3)/3 + (w1 + w2)/1.5f; + if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } + if (is_bounded && (Xx1 || Yy1 || Zz1)) break; + } + } + } + if (ptr_x!=coordinates.data(0,1)) coordinates.resize((int)(ptr_x-coordinates.data()),3,1,1,0); + return coordinates; + } + + //! Return stream line of a 3d vector field \overloading. + static CImg streamline(const char *const expression, + const float x, const float y, const float z, + const float L=256, const float dl=0.1f, + const unsigned int interpolation_type=2, const bool is_backward_tracking=true, + const bool is_oriented_only=false, + const float x0=0, const float y0=0, const float z0=0, + const float x1=0, const float y1=0, const float z1=0) { + _functor4d_streamline_expr func(expression); + return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,is_oriented_only,x0,y0,z0,x1,y1,z1); + } + + struct _functor4d_streamline2d_directed { + const CImg& ref; + _functor4d_streamline2d_directed(const CImg& pref):ref(pref) {} + float operator()(const float x, const float y, const float z, const unsigned int c) const { + return c<2?(float)ref._linear_atXY(x,y,(int)z,c):0; + } + }; + + struct _functor4d_streamline3d_directed { + const CImg& ref; + _functor4d_streamline3d_directed(const CImg& pref):ref(pref) {} + float operator()(const float x, const float y, const float z, const unsigned int c) const { + return (float)ref._linear_atXYZ(x,y,z,c); + } + }; + + struct _functor4d_streamline2d_oriented { + const CImg& ref; + CImg *pI; + _functor4d_streamline2d_oriented(const CImg& pref):ref(pref),pI(0) { pI = new CImg(2,2,1,2); } + ~_functor4d_streamline2d_oriented() { delete pI; } + float operator()(const float x, const float y, const float z, const unsigned int c) const { +#define _cimg_vecalign2d(i,j) \ + if (I(i,j,0)*I(0,0,0) + I(i,j,1)*I(0,0,1)<0) { I(i,j,0) = -I(i,j,0); I(i,j,1) = -I(i,j,1); } + int + xi = (int)x - (x>=0?0:1), nxi = xi + 1, + yi = (int)y - (y>=0?0:1), nyi = yi + 1, + zi = (int)z; + const float + dx = x - xi, + dy = y - yi; + if (c==0) { + CImg& I = *pI; + if (xi<0) xi = 0; + if (nxi<0) nxi = 0; + if (xi>=ref.width()) xi = ref.width() - 1; + if (nxi>=ref.width()) nxi = ref.width() - 1; + if (yi<0) yi = 0; + if (nyi<0) nyi = 0; + if (yi>=ref.height()) yi = ref.height() - 1; + if (nyi>=ref.height()) nyi = ref.height() - 1; + I(0,0,0) = (float)ref(xi,yi,zi,0); I(0,0,1) = (float)ref(xi,yi,zi,1); + I(1,0,0) = (float)ref(nxi,yi,zi,0); I(1,0,1) = (float)ref(nxi,yi,zi,1); + I(1,1,0) = (float)ref(nxi,nyi,zi,0); I(1,1,1) = (float)ref(nxi,nyi,zi,1); + I(0,1,0) = (float)ref(xi,nyi,zi,0); I(0,1,1) = (float)ref(xi,nyi,zi,1); + _cimg_vecalign2d(1,0); _cimg_vecalign2d(1,1); _cimg_vecalign2d(0,1); + } + return c<2?(float)pI->_linear_atXY(dx,dy,0,c):0; + } + }; + + struct _functor4d_streamline3d_oriented { + const CImg& ref; + CImg *pI; + _functor4d_streamline3d_oriented(const CImg& pref):ref(pref),pI(0) { pI = new CImg(2,2,2,3); } + ~_functor4d_streamline3d_oriented() { delete pI; } + float operator()(const float x, const float y, const float z, const unsigned int c) const { +#define _cimg_vecalign3d(i,j,k) if (I(i,j,k,0)*I(0,0,0,0) + I(i,j,k,1)*I(0,0,0,1) + I(i,j,k,2)*I(0,0,0,2)<0) { \ + I(i,j,k,0) = -I(i,j,k,0); I(i,j,k,1) = -I(i,j,k,1); I(i,j,k,2) = -I(i,j,k,2); } + int + xi = (int)x - (x>=0?0:1), nxi = xi + 1, + yi = (int)y - (y>=0?0:1), nyi = yi + 1, + zi = (int)z - (z>=0?0:1), nzi = zi + 1; + const float + dx = x - xi, + dy = y - yi, + dz = z - zi; + if (c==0) { + CImg& I = *pI; + if (xi<0) xi = 0; + if (nxi<0) nxi = 0; + if (xi>=ref.width()) xi = ref.width() - 1; + if (nxi>=ref.width()) nxi = ref.width() - 1; + if (yi<0) yi = 0; + if (nyi<0) nyi = 0; + if (yi>=ref.height()) yi = ref.height() - 1; + if (nyi>=ref.height()) nyi = ref.height() - 1; + if (zi<0) zi = 0; + if (nzi<0) nzi = 0; + if (zi>=ref.depth()) zi = ref.depth() - 1; + if (nzi>=ref.depth()) nzi = ref.depth() - 1; + I(0,0,0,0) = (float)ref(xi,yi,zi,0); I(0,0,0,1) = (float)ref(xi,yi,zi,1); + I(0,0,0,2) = (float)ref(xi,yi,zi,2); I(1,0,0,0) = (float)ref(nxi,yi,zi,0); + I(1,0,0,1) = (float)ref(nxi,yi,zi,1); I(1,0,0,2) = (float)ref(nxi,yi,zi,2); + I(1,1,0,0) = (float)ref(nxi,nyi,zi,0); I(1,1,0,1) = (float)ref(nxi,nyi,zi,1); + I(1,1,0,2) = (float)ref(nxi,nyi,zi,2); I(0,1,0,0) = (float)ref(xi,nyi,zi,0); + I(0,1,0,1) = (float)ref(xi,nyi,zi,1); I(0,1,0,2) = (float)ref(xi,nyi,zi,2); + I(0,0,1,0) = (float)ref(xi,yi,nzi,0); I(0,0,1,1) = (float)ref(xi,yi,nzi,1); + I(0,0,1,2) = (float)ref(xi,yi,nzi,2); I(1,0,1,0) = (float)ref(nxi,yi,nzi,0); + I(1,0,1,1) = (float)ref(nxi,yi,nzi,1); I(1,0,1,2) = (float)ref(nxi,yi,nzi,2); + I(1,1,1,0) = (float)ref(nxi,nyi,nzi,0); I(1,1,1,1) = (float)ref(nxi,nyi,nzi,1); + I(1,1,1,2) = (float)ref(nxi,nyi,nzi,2); I(0,1,1,0) = (float)ref(xi,nyi,nzi,0); + I(0,1,1,1) = (float)ref(xi,nyi,nzi,1); I(0,1,1,2) = (float)ref(xi,nyi,nzi,2); + _cimg_vecalign3d(1,0,0); _cimg_vecalign3d(1,1,0); _cimg_vecalign3d(0,1,0); + _cimg_vecalign3d(0,0,1); _cimg_vecalign3d(1,0,1); _cimg_vecalign3d(1,1,1); _cimg_vecalign3d(0,1,1); + } + return (float)pI->_linear_atXYZ(dx,dy,dz,c); + } + }; + + struct _functor4d_streamline_expr { + _cimg_math_parser *mp; + ~_functor4d_streamline_expr() { mp->end(); delete mp; } + _functor4d_streamline_expr(const char *const expr):mp(0) { + mp = new _cimg_math_parser(expr,"streamline",CImg::const_empty(),0); + } + float operator()(const float x, const float y, const float z, const unsigned int c) const { + return (float)(*mp)(x,y,z,c); + } + }; + + //! Return a shared-memory image referencing a range of pixels of the image instance. + /** + \param x0 X-coordinate of the starting pixel. + \param x1 X-coordinate of the ending pixel. + \param y0 Y-coordinate. + \param z0 Z-coordinate. + \param c0 C-coordinate. + **/ + CImg get_shared_points(const unsigned int x0, const unsigned int x1, + const unsigned int y0=0, const unsigned int z0=0, const unsigned int c0=0) { + const unsigned int + beg = (unsigned int)offset(x0,y0,z0,c0), + end = (unsigned int)offset(x1,y0,z0,c0); + if (beg>end || beg>=size() || end>=size()) + throw CImgArgumentException(_cimg_instance + "get_shared_points(): Invalid request of a shared-memory subset (%u->%u,%u,%u,%u).", + cimg_instance, + x0,x1,y0,z0,c0); + + return CImg(_data + beg,x1 - x0 + 1,1,1,1,true); + } + + //! Return a shared-memory image referencing a range of pixels of the image instance \const. + const CImg get_shared_points(const unsigned int x0, const unsigned int x1, + const unsigned int y0=0, const unsigned int z0=0, const unsigned int c0=0) const { + const unsigned int + beg = (unsigned int)offset(x0,y0,z0,c0), + end = (unsigned int)offset(x1,y0,z0,c0); + if (beg>end || beg>=size() || end>=size()) + throw CImgArgumentException(_cimg_instance + "get_shared_points(): Invalid request of a shared-memory subset (%u->%u,%u,%u,%u).", + cimg_instance, + x0,x1,y0,z0,c0); + + return CImg(_data + beg,x1 - x0 + 1,1,1,1,true); + } + + //! Return a shared-memory image referencing a range of rows of the image instance. + /** + \param y0 Y-coordinate of the starting row. + \param y1 Y-coordinate of the ending row. + \param z0 Z-coordinate. + \param c0 C-coordinate. + **/ + CImg get_shared_rows(const unsigned int y0, const unsigned int y1, + const unsigned int z0=0, const unsigned int c0=0) { + const unsigned int + beg = (unsigned int)offset(0,y0,z0,c0), + end = (unsigned int)offset(0,y1,z0,c0); + if (beg>end || beg>=size() || end>=size()) + throw CImgArgumentException(_cimg_instance + "get_shared_rows(): Invalid request of a shared-memory subset " + "(0->%u,%u->%u,%u,%u).", + cimg_instance, + _width - 1,y0,y1,z0,c0); + + return CImg(_data + beg,_width,y1 - y0 + 1,1,1,true); + } + + //! Return a shared-memory image referencing a range of rows of the image instance \const. + const CImg get_shared_rows(const unsigned int y0, const unsigned int y1, + const unsigned int z0=0, const unsigned int c0=0) const { + const unsigned int + beg = (unsigned int)offset(0,y0,z0,c0), + end = (unsigned int)offset(0,y1,z0,c0); + if (beg>end || beg>=size() || end>=size()) + throw CImgArgumentException(_cimg_instance + "get_shared_rows(): Invalid request of a shared-memory subset " + "(0->%u,%u->%u,%u,%u).", + cimg_instance, + _width - 1,y0,y1,z0,c0); + + return CImg(_data + beg,_width,y1 - y0 + 1,1,1,true); + } + + //! Return a shared-memory image referencing one row of the image instance. + /** + \param y0 Y-coordinate. + \param z0 Z-coordinate. + \param c0 C-coordinate. + **/ + CImg get_shared_row(const unsigned int y0, const unsigned int z0=0, const unsigned int c0=0) { + return get_shared_rows(y0,y0,z0,c0); + } + + //! Return a shared-memory image referencing one row of the image instance \const. + const CImg get_shared_row(const unsigned int y0, const unsigned int z0=0, const unsigned int c0=0) const { + return get_shared_rows(y0,y0,z0,c0); + } + + //! Return a shared memory image referencing a range of slices of the image instance. + /** + \param z0 Z-coordinate of the starting slice. + \param z1 Z-coordinate of the ending slice. + \param c0 C-coordinate. + **/ + CImg get_shared_slices(const unsigned int z0, const unsigned int z1, const unsigned int c0=0) { + const unsigned int + beg = (unsigned int)offset(0,0,z0,c0), + end = (unsigned int)offset(0,0,z1,c0); + if (beg>end || beg>=size() || end>=size()) + throw CImgArgumentException(_cimg_instance + "get_shared_slices(): Invalid request of a shared-memory subset " + "(0->%u,0->%u,%u->%u,%u).", + cimg_instance, + _width - 1,_height - 1,z0,z1,c0); + + return CImg(_data + beg,_width,_height,z1 - z0 + 1,1,true); + } + + //! Return a shared memory image referencing a range of slices of the image instance \const. + const CImg get_shared_slices(const unsigned int z0, const unsigned int z1, const unsigned int c0=0) const { + const unsigned int + beg = (unsigned int)offset(0,0,z0,c0), + end = (unsigned int)offset(0,0,z1,c0); + if (beg>end || beg>=size() || end>=size()) + throw CImgArgumentException(_cimg_instance + "get_shared_slices(): Invalid request of a shared-memory subset " + "(0->%u,0->%u,%u->%u,%u).", + cimg_instance, + _width - 1,_height - 1,z0,z1,c0); + + return CImg(_data + beg,_width,_height,z1 - z0 + 1,1,true); + } + + //! Return a shared-memory image referencing one slice of the image instance. + /** + \param z0 Z-coordinate. + \param c0 C-coordinate. + **/ + CImg get_shared_slice(const unsigned int z0, const unsigned int c0=0) { + return get_shared_slices(z0,z0,c0); + } + + //! Return a shared-memory image referencing one slice of the image instance \const. + const CImg get_shared_slice(const unsigned int z0, const unsigned int c0=0) const { + return get_shared_slices(z0,z0,c0); + } + + //! Return a shared-memory image referencing a range of channels of the image instance. + /** + \param c0 C-coordinate of the starting channel. + \param c1 C-coordinate of the ending channel. + **/ + CImg get_shared_channels(const unsigned int c0, const unsigned int c1) { + const unsigned int + beg = (unsigned int)offset(0,0,0,c0), + end = (unsigned int)offset(0,0,0,c1); + if (beg>end || beg>=size() || end>=size()) + throw CImgArgumentException(_cimg_instance + "get_shared_channels(): Invalid request of a shared-memory subset " + "(0->%u,0->%u,0->%u,%u->%u).", + cimg_instance, + _width - 1,_height - 1,_depth - 1,c0,c1); + + return CImg(_data + beg,_width,_height,_depth,c1 - c0 + 1,true); + } + + //! Return a shared-memory image referencing a range of channels of the image instance \const. + const CImg get_shared_channels(const unsigned int c0, const unsigned int c1) const { + const unsigned int + beg = (unsigned int)offset(0,0,0,c0), + end = (unsigned int)offset(0,0,0,c1); + if (beg>end || beg>=size() || end>=size()) + throw CImgArgumentException(_cimg_instance + "get_shared_channels(): Invalid request of a shared-memory subset " + "(0->%u,0->%u,0->%u,%u->%u).", + cimg_instance, + _width - 1,_height - 1,_depth - 1,c0,c1); + + return CImg(_data + beg,_width,_height,_depth,c1 - c0 + 1,true); + } + + //! Return a shared-memory image referencing one channel of the image instance. + /** + \param c0 C-coordinate. + **/ + CImg get_shared_channel(const unsigned int c0) { + return get_shared_channels(c0,c0); + } + + //! Return a shared-memory image referencing one channel of the image instance \const. + const CImg get_shared_channel(const unsigned int c0) const { + return get_shared_channels(c0,c0); + } + + //! Return a shared-memory version of the image instance. + CImg get_shared() { + return CImg(_data,_width,_height,_depth,_spectrum,true); + } + + //! Return a shared-memory version of the image instance \const. + const CImg get_shared() const { + return CImg(_data,_width,_height,_depth,_spectrum,true); + } + + //! Split image into a list along specified axis. + /** + \param axis Splitting axis. Can be { 'x' | 'y' | 'z' | 'c' }. + \param nb Number of splitted parts. + \note + - If \c nb==0, instance image is splitted into blocs of egal values along the specified axis. + - If \c nb<=0, instance image is splitted into blocs of -\c nb pixel wide. + - If \c nb>0, instance image is splitted into \c nb blocs. + **/ + CImgList get_split(const char axis, const int nb=-1) const { + CImgList res; + if (is_empty()) return res; + const char _axis = cimg::lowercase(axis); + + if (nb<0) { // Split by bloc size. + const unsigned int dp = (unsigned int)(nb?-nb:1); + switch (_axis) { + case 'x': { + if (_width>dp) { + res.assign(_width/dp + (_width%dp?1:0),1,1); + const unsigned int pe = _width - dp; + cimg_pragma_openmp(parallel for cimg_openmp_if(res._width>=128 && _height*_depth*_spectrum>=128)) + for (unsigned int p = 0; pdp) { + res.assign(_height/dp + (_height%dp?1:0),1,1); + const unsigned int pe = _height - dp; + cimg_pragma_openmp(parallel for cimg_openmp_if(res._width>=128 && _width*_depth*_spectrum>=128)) + for (unsigned int p = 0; pdp) { + res.assign(_depth/dp + (_depth%dp?1:0),1,1); + const unsigned int pe = _depth - dp; + cimg_pragma_openmp(parallel for cimg_openmp_if(res._width>=128 && _width*_height*_spectrum>=128)) + for (unsigned int p = 0; pdp) { + res.assign(_spectrum/dp + (_spectrum%dp?1:0),1,1); + const unsigned int pe = _spectrum - dp; + cimg_pragma_openmp(parallel for cimg_openmp_if(res._width>=128 && _width*_height*_depth>=128)) + for (unsigned int p = 0; p0) { // Split by number of (non-homogeneous) blocs. + const unsigned int siz = _axis=='x'?_width:_axis=='y'?_height:_axis=='z'?_depth:_axis=='c'?_spectrum:0; + if ((unsigned int)nb>siz) + throw CImgArgumentException(_cimg_instance + "get_split(): Instance cannot be split along %c-axis into %u blocs.", + cimg_instance, + axis,nb); + if (nb==1) res.assign(*this); + else { + int err = (int)siz; + unsigned int _p = 0; + switch (_axis) { + case 'x' : { + cimg_forX(*this,p) if ((err-=nb)<=0) { + get_crop(_p,0,0,0,p,_height - 1,_depth - 1,_spectrum - 1).move_to(res); + err+=(int)siz; + _p = p + 1U; + } + } break; + case 'y' : { + cimg_forY(*this,p) if ((err-=nb)<=0) { + get_crop(0,_p,0,0,_width - 1,p,_depth - 1,_spectrum - 1).move_to(res); + err+=(int)siz; + _p = p + 1U; + } + } break; + case 'z' : { + cimg_forZ(*this,p) if ((err-=nb)<=0) { + get_crop(0,0,_p,0,_width - 1,_height - 1,p,_spectrum - 1).move_to(res); + err+=(int)siz; + _p = p + 1U; + } + } break; + case 'c' : { + cimg_forC(*this,p) if ((err-=nb)<=0) { + get_crop(0,0,0,_p,_width - 1,_height - 1,_depth - 1,p).move_to(res); + err+=(int)siz; + _p = p + 1U; + } + } + } + } + } else { // Split by egal values according to specified axis. + T current = *_data; + switch (_axis) { + case 'x' : { + int i0 = 0; + cimg_forX(*this,i) + if ((*this)(i)!=current) { get_columns(i0,i - 1).move_to(res); i0 = i; current = (*this)(i); } + get_columns(i0,width() - 1).move_to(res); + } break; + case 'y' : { + int i0 = 0; + cimg_forY(*this,i) + if ((*this)(0,i)!=current) { get_rows(i0,i - 1).move_to(res); i0 = i; current = (*this)(0,i); } + get_rows(i0,height() - 1).move_to(res); + } break; + case 'z' : { + int i0 = 0; + cimg_forZ(*this,i) + if ((*this)(0,0,i)!=current) { get_slices(i0,i - 1).move_to(res); i0 = i; current = (*this)(0,0,i); } + get_slices(i0,depth() - 1).move_to(res); + } break; + case 'c' : { + int i0 = 0; + cimg_forC(*this,i) + if ((*this)(0,0,0,i)!=current) { get_channels(i0,i - 1).move_to(res); i0 = i; current = (*this)(0,0,0,i); } + get_channels(i0,spectrum() - 1).move_to(res); + } break; + default : { + longT i0 = 0; + cimg_foroff(*this,i) + if ((*this)[i]!=current) { + CImg(_data + i0,1,(unsigned int)(i - i0)).move_to(res); + i0 = (longT)i; current = (*this)[i]; + } + CImg(_data + i0,1,(unsigned int)(size() - i0)).move_to(res); + } + } + } + return res; + } + + //! Split image into a list of sub-images, according to a specified splitting value sequence and optionally axis. + /** + \param values Splitting value sequence. + \param axis Axis along which the splitting is performed. Can be '0' to ignore axis. + \param keep_values Tells if the splitting sequence must be kept in the splitted blocs. + **/ + template + CImgList get_split(const CImg& values, const char axis=0, const bool keep_values=true) const { + CImgList res; + if (is_empty()) return res; + const ulongT vsiz = values.size(); + const char _axis = cimg::lowercase(axis); + if (!vsiz) return CImgList(*this); + if (vsiz==1) { // Split according to a single value. + const T value = (T)*values; + switch (_axis) { + case 'x' : { + unsigned int i0 = 0, i = 0; + do { + while (i<_width && (*this)(i)==value) ++i; + if (i>i0) { if (keep_values) get_columns(i0,i - 1).move_to(res); i0 = i; } + while (i<_width && (*this)(i)!=value) ++i; + if (i>i0) { get_columns(i0,i - 1).move_to(res); i0 = i; } + } while (i<_width); + } break; + case 'y' : { + unsigned int i0 = 0, i = 0; + do { + while (i<_height && (*this)(0,i)==value) ++i; + if (i>i0) { if (keep_values) get_rows(i0,i - 1).move_to(res); i0 = i; } + while (i<_height && (*this)(0,i)!=value) ++i; + if (i>i0) { get_rows(i0,i - 1).move_to(res); i0 = i; } + } while (i<_height); + } break; + case 'z' : { + unsigned int i0 = 0, i = 0; + do { + while (i<_depth && (*this)(0,0,i)==value) ++i; + if (i>i0) { if (keep_values) get_slices(i0,i - 1).move_to(res); i0 = i; } + while (i<_depth && (*this)(0,0,i)!=value) ++i; + if (i>i0) { get_slices(i0,i - 1).move_to(res); i0 = i; } + } while (i<_depth); + } break; + case 'c' : { + unsigned int i0 = 0, i = 0; + do { + while (i<_spectrum && (*this)(0,0,0,i)==value) ++i; + if (i>i0) { if (keep_values) get_channels(i0,i - 1).move_to(res); i0 = i; } + while (i<_spectrum && (*this)(0,0,0,i)!=value) ++i; + if (i>i0) { get_channels(i0,i - 1).move_to(res); i0 = i; } + } while (i<_spectrum); + } break; + default : { + const ulongT siz = size(); + ulongT i0 = 0, i = 0; + do { + while (ii0) { if (keep_values) CImg(_data + i0,1,(unsigned int)(i - i0)).move_to(res); i0 = i; } + while (ii0) { CImg(_data + i0,1,(unsigned int)(i - i0)).move_to(res); i0 = i; } + } while (i=vsiz) j = 0; } + i-=j; + if (i>i1) { + if (i1>i0) get_columns(i0,i1 - 1).move_to(res); + if (keep_values) get_columns(i1,i - 1).move_to(res); + i0 = i; + } else ++i; + } else ++i; + } while (i<_width); + if (i0<_width) get_columns(i0,width() - 1).move_to(res); + } break; + case 'y' : { + unsigned int i0 = 0, i1 = 0, i = 0; + do { + if ((*this)(0,i)==*values) { + i1 = i; j = 0; + while (i<_height && (*this)(0,i)==values[j]) { ++i; if (++j>=vsiz) j = 0; } + i-=j; + if (i>i1) { + if (i1>i0) get_rows(i0,i1 - 1).move_to(res); + if (keep_values) get_rows(i1,i - 1).move_to(res); + i0 = i; + } else ++i; + } else ++i; + } while (i<_height); + if (i0<_height) get_rows(i0,height() - 1).move_to(res); + } break; + case 'z' : { + unsigned int i0 = 0, i1 = 0, i = 0; + do { + if ((*this)(0,0,i)==*values) { + i1 = i; j = 0; + while (i<_depth && (*this)(0,0,i)==values[j]) { ++i; if (++j>=vsiz) j = 0; } + i-=j; + if (i>i1) { + if (i1>i0) get_slices(i0,i1 - 1).move_to(res); + if (keep_values) get_slices(i1,i - 1).move_to(res); + i0 = i; + } else ++i; + } else ++i; + } while (i<_depth); + if (i0<_depth) get_slices(i0,depth() - 1).move_to(res); + } break; + case 'c' : { + unsigned int i0 = 0, i1 = 0, i = 0; + do { + if ((*this)(0,0,0,i)==*values) { + i1 = i; j = 0; + while (i<_spectrum && (*this)(0,0,0,i)==values[j]) { ++i; if (++j>=vsiz) j = 0; } + i-=j; + if (i>i1) { + if (i1>i0) get_channels(i0,i1 - 1).move_to(res); + if (keep_values) get_channels(i1,i - 1).move_to(res); + i0 = i; + } else ++i; + } else ++i; + } while (i<_spectrum); + if (i0<_spectrum) get_channels(i0,spectrum() - 1).move_to(res); + } break; + default : { + ulongT i0 = 0, i1 = 0, i = 0; + const ulongT siz = size(); + do { + if ((*this)[i]==*values) { + i1 = i; j = 0; + while (i=vsiz) j = 0; } + i-=j; + if (i>i1) { + if (i1>i0) CImg(_data + i0,1,(unsigned int)(i1 - i0)).move_to(res); + if (keep_values) CImg(_data + i1,1,(unsigned int)(i - i1)).move_to(res); + i0 = i; + } else ++i; + } else ++i; + } while (i(_data + i0,1,(unsigned int)(siz - i0)).move_to(res); + } break; + } + } + return res; + } + + //! Append two images along specified axis. + /** + \param img Image to append with instance image. + \param axis Appending axis. Can be { 'x' | 'y' | 'z' | 'c' }. + \param align Append alignment in \c [0,1]. + **/ + template + CImg& append(const CImg& img, const char axis='x', const float align=0) { + if (is_empty()) return assign(img,false); + if (!img) return *this; + return CImgList(*this,true).insert(img).get_append(axis,align).move_to(*this); + } + + //! Append two images along specified axis \specialization. + CImg& append(const CImg& img, const char axis='x', const float align=0) { + if (is_empty()) return assign(img,false); + if (!img) return *this; + return CImgList(*this,img,true).get_append(axis,align).move_to(*this); + } + + //! Append two images along specified axis \const. + template + CImg<_cimg_Tt> get_append(const CImg& img, const char axis='x', const float align=0) const { + if (is_empty()) return +img; + if (!img) return +*this; + return CImgList<_cimg_Tt>(*this,true).insert(img).get_append(axis,align); + } + + //! Append two images along specified axis \specialization. + CImg get_append(const CImg& img, const char axis='x', const float align=0) const { + if (is_empty()) return +img; + if (!img) return +*this; + return CImgList(*this,img,true).get_append(axis,align); + } + + //@} + //--------------------------------------- + // + //! \name Filtering / Transforms + //@{ + //--------------------------------------- + + //! Correlate image by a kernel. + /** + \param kernel = the correlation kernel. + \param boundary_conditions boundary conditions can be (false=dirichlet, true=neumann) + \param is_normalized = enable local normalization. + \note + - The correlation of the image instance \p *this by the kernel \p kernel is defined to be: + res(x,y,z) = sum_{i,j,k} (*this)(x + i,y + j,z + k)*kernel(i,j,k). + **/ + template + CImg& correlate(const CImg& kernel, const bool boundary_conditions=true, + const bool is_normalized=false) { + if (is_empty() || !kernel) return *this; + return get_correlate(kernel,boundary_conditions,is_normalized).move_to(*this); + } + + template + CImg<_cimg_Ttfloat> get_correlate(const CImg& kernel, const bool boundary_conditions=true, + const bool is_normalized=false) const { + return _correlate(kernel,boundary_conditions,is_normalized,false); + } + + //! Correlate image by a kernel \newinstance. + template + CImg<_cimg_Ttfloat> _correlate(const CImg& kernel, const bool boundary_conditions, + const bool is_normalized, const bool is_convolution) const { + if (is_empty() || !kernel) return *this; + typedef _cimg_Ttfloat Ttfloat; + CImg res; + const ulongT + res_whd = (ulongT)_width*_height*_depth, + res_size = res_whd*std::max(_spectrum,kernel._spectrum); + const bool + is_inner_parallel = _width*_height*_depth>=32768, + is_outer_parallel = res_size>=32768; + _cimg_abort_init_omp; + cimg_abort_init; + + if (kernel._width==kernel._height && + ((kernel._depth==1 && kernel._width<=6) || (kernel._depth==kernel._width && kernel._width<=3))) { + + // Special optimization done for 2x2, 3x3, 4x4, 5x5, 6x6, 2x2x2 and 3x3x3 kernel. + if (!boundary_conditions && res_whd<=3000*3000) { // Dirichlet boundaries + // For relatively small images, adding a zero border then use optimized NxN convolution loops is faster. + res = (kernel._depth==1?get_crop(-1,-1,_width,_height):get_crop(-1,-1,-1,_width,_height,_depth)). + _correlate(kernel,true,is_normalized,is_convolution); + if (kernel._depth==1) res.crop(1,1,res._width - 2,res._height - 2); + else res.crop(1,1,1,res._width - 2,res._height - 2,res._depth - 2); + + } else { // Neumann boundaries + res.assign(_width,_height,_depth,std::max(_spectrum,kernel._spectrum)); + cimg::unused(is_inner_parallel,is_outer_parallel); + CImg _kernel; + if (is_convolution) { // Add empty column/row/slice to shift kernel center in case of convolution + const int dw = !(kernel.width()%2), dh = !(kernel.height()%2), dd = !(kernel.depth()%2); + if (dw || dh || dd) + kernel.get_resize(kernel.width() + dw,kernel.height() + dh,kernel.depth() + dd,-100,0,0). + move_to(_kernel); + } + if (!_kernel) _kernel = kernel.get_shared(); + + switch (_kernel._depth) { + case 3 : { + cimg_pragma_openmp(parallel for cimg_openmp_if(is_outer_parallel)) + cimg_forC(res,c) { + cimg_abort_test; + const CImg img = get_shared_channel(c%_spectrum); + const CImg K = _kernel.get_shared_channel(c%kernel._spectrum); + CImg I(27); + Ttfloat *ptrd = res.data(0,0,0,c); + if (is_normalized) { + const Ttfloat _M = (Ttfloat)K.magnitude(2), M = _M*_M; + cimg_for3x3x3(img,x,y,z,0,I,T) { + const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + + I[ 3]*I[ 3] + I[ 4]*I[ 4] + I[ 5]*I[ 5] + + I[ 6]*I[ 6] + I[ 7]*I[ 7] + I[ 8]*I[ 8] + + I[ 9]*I[ 9] + I[10]*I[10] + I[11]*I[11] + + I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + + I[15]*I[15] + I[16]*I[16] + I[17]*I[17] + + I[18]*I[18] + I[19]*I[19] + I[20]*I[20] + + I[21]*I[21] + I[22]*I[22] + I[23]*I[23] + + I[24]*I[24] + I[25]*I[25] + I[26]*I[26]); + *(ptrd++) = (Ttfloat)(N?(I[ 0]*K[ 0] + I[ 1]*K[ 1] + I[ 2]*K[ 2] + + I[ 3]*K[ 3] + I[ 4]*K[ 4] + I[ 5]*K[ 5] + + I[ 6]*K[ 6] + I[ 7]*K[ 7] + I[ 8]*K[ 8] + + I[ 9]*K[ 9] + I[10]*K[10] + I[11]*K[11] + + I[12]*K[12] + I[13]*K[13] + I[14]*K[14] + + I[15]*K[15] + I[16]*K[16] + I[17]*K[17] + + I[18]*K[18] + I[19]*K[19] + I[20]*K[20] + + I[21]*K[21] + I[22]*K[22] + I[23]*K[23] + + I[24]*K[24] + I[25]*K[25] + I[26]*K[26])/std::sqrt(N):0); + } + } else cimg_for3x3x3(img,x,y,z,0,I,T) + *(ptrd++) = (Ttfloat)(I[ 0]*K[ 0] + I[ 1]*K[ 1] + I[ 2]*K[ 2] + + I[ 3]*K[ 3] + I[ 4]*K[ 4] + I[ 5]*K[ 5] + + I[ 6]*K[ 6] + I[ 7]*K[ 7] + I[ 8]*K[ 8] + + I[ 9]*K[ 9] + I[10]*K[10] + I[11]*K[11] + + I[12]*K[12] + I[13]*K[13] + I[14]*K[14] + + I[15]*K[15] + I[16]*K[16] + I[17]*K[17] + + I[18]*K[18] + I[19]*K[19] + I[20]*K[20] + + I[21]*K[21] + I[22]*K[22] + I[23]*K[23] + + I[24]*K[24] + I[25]*K[25] + I[26]*K[26]); + } + } break; + case 2 : { + cimg_pragma_openmp(parallel for cimg_openmp_if(is_outer_parallel)) + cimg_forC(res,c) { + cimg_abort_test; + const CImg img = get_shared_channel(c%_spectrum); + const CImg K = _kernel.get_shared_channel(c%kernel._spectrum); + CImg I(8); + Ttfloat *ptrd = res.data(0,0,0,c); + if (is_normalized) { + const Ttfloat _M = (Ttfloat)K.magnitude(2), M = _M*_M; + cimg_for2x2x2(img,x,y,z,0,I,T) { + const Ttfloat N = M*(I[0]*I[0] + I[1]*I[1] + + I[2]*I[2] + I[3]*I[3] + + I[4]*I[4] + I[5]*I[5] + + I[6]*I[6] + I[7]*I[7]); + *(ptrd++) = (Ttfloat)(N?(I[0]*K[0] + I[1]*K[1] + + I[2]*K[2] + I[3]*K[3] + + I[4]*K[4] + I[5]*K[5] + + I[6]*K[6] + I[7]*K[7])/std::sqrt(N):0); + } + } else cimg_for2x2x2(img,x,y,z,0,I,T) + *(ptrd++) = (Ttfloat)(I[0]*K[0] + I[1]*K[1] + + I[2]*K[2] + I[3]*K[3] + + I[4]*K[4] + I[5]*K[5] + + I[6]*K[6] + I[7]*K[7]); + } + } break; + default : + case 1 : + switch (_kernel._width) { + case 6 : { + cimg_pragma_openmp(parallel for cimg_openmp_if(is_outer_parallel)) + cimg_forC(res,c) { + cimg_abort_test; + const CImg img = get_shared_channel(c%_spectrum); + const CImg K = _kernel.get_shared_channel(c%kernel._spectrum); + CImg I(36); + Ttfloat *ptrd = res.data(0,0,0,c); + if (is_normalized) { + const Ttfloat _M = (Ttfloat)K.magnitude(2), M = _M*_M; + cimg_forZ(img,z) cimg_for6x6(img,x,y,z,0,I,T) { + const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + I[ 3]*I[ 3] + I[ 4]*I[ 4] + + I[ 5]*I[ 5] + I[ 6]*I[ 6] + I[ 7]*I[ 7] + I[ 8]*I[ 8] + I[ 9]*I[ 9] + + I[10]*I[10] + I[11]*I[11] + I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + + I[15]*I[15] + I[16]*I[16] + I[17]*I[17] + I[18]*I[18] + I[19]*I[19] + + I[20]*I[20] + I[21]*I[21] + I[22]*I[22] + I[23]*I[23] + I[24]*I[24] + + I[25]*I[25] + I[26]*I[26] + I[27]*I[27] + I[28]*I[28] + I[29]*I[29] + + I[30]*I[30] + I[31]*I[31] + I[32]*I[32] + I[33]*I[33] + I[34]*I[34] + + I[35]*I[35]); + *(ptrd++) = (Ttfloat)(N?(I[ 0]*K[ 0] + I[ 1]*K[ 1] + I[ 2]*K[ 2] + I[ 3]*K[ 3] + + I[ 4]*K[ 4] + I[ 5]*K[ 5] + I[ 6]*K[ 6] + I[ 7]*K[ 7] + + I[ 8]*K[ 8] + I[ 9]*K[ 9] + I[10]*K[10] + I[11]*K[11] + + I[12]*K[12] + I[13]*K[13] + I[14]*K[14] + I[15]*K[15] + + I[16]*K[16] + I[17]*K[17] + I[18]*K[18] + I[19]*K[19] + + I[20]*K[20] + I[21]*K[21] + I[22]*K[22] + I[23]*K[23] + + I[24]*K[24] + I[25]*K[25] + I[26]*K[26] + I[27]*K[27] + + I[28]*K[28] + I[29]*K[29] + I[30]*K[30] + I[31]*K[31] + + I[32]*K[32] + I[33]*K[33] + I[34]*K[34] + I[35]*K[35])/ + std::sqrt(N):0); + } + } else cimg_forZ(img,z) cimg_for6x6(img,x,y,z,0,I,T) + *(ptrd++) = (Ttfloat)(I[ 0]*K[ 0] + I[ 1]*K[ 1] + I[ 2]*K[ 2] + I[ 3]*K[ 3] + + I[ 4]*K[ 4] + I[ 5]*K[ 5] + I[ 6]*K[ 6] + I[ 7]*K[ 7] + + I[ 8]*K[ 8] + I[ 9]*K[ 9] + I[10]*K[10] + I[11]*K[11] + + I[12]*K[12] + I[13]*K[13] + I[14]*K[14] + I[15]*K[15] + + I[16]*K[16] + I[17]*K[17] + I[18]*K[18] + I[19]*K[19] + + I[20]*K[20] + I[21]*K[21] + I[22]*K[22] + I[23]*K[23] + + I[24]*K[24] + I[25]*K[25] + I[26]*K[26] + I[27]*K[27] + + I[28]*K[28] + I[29]*K[29] + I[30]*K[30] + I[31]*K[31] + + I[32]*K[32] + I[33]*K[33] + I[34]*K[34] + I[35]*K[35]); + } + } break; + case 5 : { + cimg_pragma_openmp(parallel for cimg_openmp_if(is_outer_parallel)) + cimg_forC(res,c) { + cimg_abort_test; + const CImg img = get_shared_channel(c%_spectrum); + const CImg K = _kernel.get_shared_channel(c%kernel._spectrum); + CImg I(25); + Ttfloat *ptrd = res.data(0,0,0,c); + if (is_normalized) { + const Ttfloat _M = (Ttfloat)K.magnitude(2), M = _M*_M; + cimg_forZ(img,z) cimg_for5x5(img,x,y,z,0,I,T) { + const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + I[ 3]*I[ 3] + I[ 4]*I[ 4] + + I[ 5]*I[ 5] + I[ 6]*I[ 6] + I[ 7]*I[ 7] + I[ 8]*I[ 8] + I[ 9]*I[ 9] + + I[10]*I[10] + I[11]*I[11] + I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + + I[15]*I[15] + I[16]*I[16] + I[17]*I[17] + I[18]*I[18] + I[19]*I[19] + + I[20]*I[20] + I[21]*I[21] + I[22]*I[22] + I[23]*I[23] + I[24]*I[24]); + *(ptrd++) = (Ttfloat)(N?(I[ 0]*K[ 0] + I[ 1]*K[ 1] + I[ 2]*K[ 2] + I[ 3]*K[ 3] + + I[ 4]*K[ 4] + I[ 5]*K[ 5] + I[ 6]*K[ 6] + I[ 7]*K[ 7] + + I[ 8]*K[ 8] + I[ 9]*K[ 9] + I[10]*K[10] + I[11]*K[11] + + I[12]*K[12] + I[13]*K[13] + I[14]*K[14] + I[15]*K[15] + + I[16]*K[16] + I[17]*K[17] + I[18]*K[18] + I[19]*K[19] + + I[20]*K[20] + I[21]*K[21] + I[22]*K[22] + I[23]*K[23] + + I[24]*K[24])/std::sqrt(N):0); + } + } else cimg_forZ(img,z) cimg_for5x5(img,x,y,z,0,I,T) + *(ptrd++) = (Ttfloat)(I[ 0]*K[ 0] + I[ 1]*K[ 1] + I[ 2]*K[ 2] + I[ 3]*K[ 3] + + I[ 4]*K[ 4] + I[ 5]*K[ 5] + I[ 6]*K[ 6] + I[ 7]*K[ 7] + + I[ 8]*K[ 8] + I[ 9]*K[ 9] + I[10]*K[10] + I[11]*K[11] + + I[12]*K[12] + I[13]*K[13] + I[14]*K[14] + I[15]*K[15] + + I[16]*K[16] + I[17]*K[17] + I[18]*K[18] + I[19]*K[19] + + I[20]*K[20] + I[21]*K[21] + I[22]*K[22] + I[23]*K[23] + + I[24]*K[24]); + } + } break; + case 4 : { + cimg_pragma_openmp(parallel for cimg_openmp_if(is_outer_parallel)) + cimg_forC(res,c) { + cimg_abort_test; + const CImg img = get_shared_channel(c%_spectrum); + const CImg K = _kernel.get_shared_channel(c%kernel._spectrum); + CImg I(16); + Ttfloat *ptrd = res.data(0,0,0,c); + if (is_normalized) { + const Ttfloat _M = (Ttfloat)K.magnitude(2), M = _M*_M; + cimg_forZ(img,z) cimg_for4x4(img,x,y,z,0,I,T) { + const Ttfloat N = M*(I[ 0]*I[ 0] + I[ 1]*I[ 1] + I[ 2]*I[ 2] + I[ 3]*I[ 3] + + I[ 4]*I[ 4] + I[ 5]*I[ 5] + I[ 6]*I[ 6] + I[ 7]*I[ 7] + + I[ 8]*I[ 8] + I[ 9]*I[ 9] + I[10]*I[10] + I[11]*I[11] + + I[12]*I[12] + I[13]*I[13] + I[14]*I[14] + I[15]*I[15]); + *(ptrd++) = (Ttfloat)(N?(I[ 0]*K[ 0] + I[ 1]*K[ 1] + I[ 2]*K[ 2] + I[ 3]*K[ 3] + + I[ 4]*K[ 4] + I[ 5]*K[ 5] + I[ 6]*K[ 6] + I[ 7]*K[ 7] + + I[ 8]*K[ 8] + I[ 9]*K[ 9] + I[10]*K[10] + I[11]*K[11] + + I[12]*K[12] + I[13]*K[13] + I[14]*K[14] + I[15]*K[15])/ + std::sqrt(N):0); + } + } else cimg_forZ(img,z) cimg_for4x4(img,x,y,z,0,I,T) + *(ptrd++) = (Ttfloat)(I[ 0]*K[ 0] + I[ 1]*K[ 1] + I[ 2]*K[ 2] + I[ 3]*K[ 3] + + I[ 4]*K[ 4] + I[ 5]*K[ 5] + I[ 6]*K[ 6] + I[ 7]*K[ 7] + + I[ 8]*K[ 8] + I[ 9]*K[ 9] + I[10]*K[10] + I[11]*K[11] + + I[12]*K[12] + I[13]*K[13] + I[14]*K[14] + I[15]*K[15]); + } + } break; + case 3 : { + cimg_pragma_openmp(parallel for cimg_openmp_if(is_outer_parallel)) + cimg_forC(res,c) { + cimg_abort_test; + const CImg img = get_shared_channel(c%_spectrum); + const CImg K = _kernel.get_shared_channel(c%kernel._spectrum); + CImg I(9); + Ttfloat *ptrd = res.data(0,0,0,c); + if (is_normalized) { + const Ttfloat _M = (Ttfloat)K.magnitude(2), M = _M*_M; + cimg_forZ(img,z) cimg_for3x3(img,x,y,z,0,I,T) { + const Ttfloat N = M*(I[0]*I[0] + I[1]*I[1] + I[2]*I[2] + + I[3]*I[3] + I[4]*I[4] + I[5]*I[5] + + I[6]*I[6] + I[7]*I[7] + I[8]*I[8]); + *(ptrd++) = (Ttfloat)(N?(I[0]*K[0] + I[1]*K[1] + I[2]*K[2] + + I[3]*K[3] + I[4]*K[4] + I[5]*K[5] + + I[6]*K[6] + I[7]*K[7] + I[8]*K[8])/std::sqrt(N):0); + } + } else cimg_forZ(img,z) cimg_for3x3(img,x,y,z,0,I,T) + *(ptrd++) = (Ttfloat)(I[0]*K[0] + I[1]*K[1] + I[2]*K[2] + + I[3]*K[3] + I[4]*K[4] + I[5]*K[5] + + I[6]*K[6] + I[7]*K[7] + I[8]*K[8]); + } + } break; + case 2 : { + cimg_pragma_openmp(parallel for cimg_openmp_if(is_outer_parallel)) + cimg_forC(res,c) { + cimg_abort_test; + const CImg img = get_shared_channel(c%_spectrum); + const CImg K = _kernel.get_shared_channel(c%kernel._spectrum); + CImg I(4); + Ttfloat *ptrd = res.data(0,0,0,c); + if (is_normalized) { + const Ttfloat _M = (Ttfloat)K.magnitude(2), M = _M*_M; + cimg_forZ(img,z) cimg_for2x2(img,x,y,z,0,I,T) { + const Ttfloat N = M*(I[0]*I[0] + I[1]*I[1] + + I[2]*I[2] + I[3]*I[3]); + *(ptrd++) = (Ttfloat)(N?(I[0]*K[0] + I[1]*K[1] + + I[2]*K[2] + I[3]*K[3])/std::sqrt(N):0); + } + } else cimg_forZ(img,z) cimg_for2x2(img,x,y,z,0,I,T) + *(ptrd++) = (Ttfloat)(I[0]*K[0] + I[1]*K[1] + + I[2]*K[2] + I[3]*K[3]); + } + } break; + case 1 : + if (is_normalized) res.fill(1); + else cimg_forC(res,c) { + cimg_abort_test; + const CImg img = get_shared_channel(c%_spectrum); + const CImg K = _kernel.get_shared_channel(c%kernel._spectrum); + res.get_shared_channel(c).assign(img)*=K[0]; + } + break; + } + } + } + } + + if (!res) { // Generic version for other kernels and boundary conditions. + res.assign(_width,_height,_depth,std::max(_spectrum,kernel._spectrum)); + int + mx2 = kernel.width()/2, my2 = kernel.height()/2, mz2 = kernel.depth()/2, + mx1 = kernel.width() - mx2 - 1, my1 = kernel.height() - my2 - 1, mz1 = kernel.depth() - mz2 - 1; + if (is_convolution) cimg::swap(mx1,mx2,my1,my2,mz1,mz2); // Shift kernel center in case of convolution + const int + mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; + cimg_pragma_openmp(parallel for cimg_openmp_if(!is_inner_parallel && is_outer_parallel)) + cimg_forC(res,c) _cimg_abort_try_omp { + cimg_abort_test; + const CImg img = get_shared_channel(c%_spectrum); + const CImg K = kernel.get_shared_channel(c%kernel._spectrum); + if (is_normalized) { // Normalized correlation. + const Ttfloat _M = (Ttfloat)K.magnitude(2), M = _M*_M; + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(is_inner_parallel)) + for (int z = mz1; z=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + Ttfloat val = 0, N = 0; + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) { + const Ttfloat _val = (Ttfloat)img._atXYZ(x + xm,y + ym,z + zm); + val+=_val*K(mx1 + xm,my1 + ym,mz1 + zm); + N+=_val*_val; + } + N*=M; + res(x,y,z,c) = (Ttfloat)(N?val/std::sqrt(N):0); + } + } _cimg_abort_catch_omp2 + else + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(is_inner_parallel)) + cimg_forYZ(res,y,z) _cimg_abort_try_omp2 { + cimg_abort_test2; + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + Ttfloat val = 0, N = 0; + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) { + const Ttfloat _val = (Ttfloat)img.atXYZ(x + xm,y + ym,z + zm,0,(T)0); + val+=_val*K(mx1 + xm,my1 + ym,mz1 + zm); + N+=_val*_val; + } + N*=M; + res(x,y,z,c) = (Ttfloat)(N?val/std::sqrt(N):0); + } + } _cimg_abort_catch_omp2 + } else { // Classical correlation. + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(is_inner_parallel)) + for (int z = mz1; z=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + Ttfloat val = 0; + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) + val+=img._atXYZ(x + xm,y + ym,z + zm)*K(mx1 + xm,my1 + ym,mz1 + zm); + res(x,y,z,c) = (Ttfloat)val; + } + } _cimg_abort_catch_omp2 + else + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(is_inner_parallel)) + cimg_forYZ(res,y,z) _cimg_abort_try_omp2 { + cimg_abort_test2; + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + Ttfloat val = 0; + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) + val+=img.atXYZ(x + xm,y + ym,z + zm,0,(T)0)*K(mx1 + xm,my1 + ym,mz1 + zm); + res(x,y,z,c) = (Ttfloat)val; + } + } _cimg_abort_catch_omp2 + } + } _cimg_abort_catch_omp + } + cimg_abort_test; + return res; + } + + //! Convolve image by a kernel. + /** + \param kernel = the correlation kernel. + \param boundary_conditions boundary conditions can be (false=dirichlet, true=neumann) + \param is_normalized = enable local normalization. + \note + - The result \p res of the convolution of an image \p img by a kernel \p kernel is defined to be: + res(x,y,z) = sum_{i,j,k} img(x-i,y-j,z-k)*kernel(i,j,k) + **/ + template + CImg& convolve(const CImg& kernel, const bool boundary_conditions=true, const bool is_normalized=false) { + if (is_empty() || !kernel) return *this; + return get_convolve(kernel,boundary_conditions,is_normalized).move_to(*this); + } + + //! Convolve image by a kernel \newinstance. + template + CImg<_cimg_Ttfloat> get_convolve(const CImg& kernel, const bool boundary_conditions=true, + const bool is_normalized=false) const { + return _correlate(CImg(kernel._data,kernel.size()/kernel._spectrum,1,1,kernel._spectrum,true). + get_mirror('x').resize(kernel,-1),boundary_conditions,is_normalized,true); + } + + //! Cumulate image values, optionally along specified axis. + /** + \param axis Cumulation axis. Set it to 0 to cumulate all values globally without taking axes into account. + **/ + CImg& cumulate(const char axis=0) { + switch (cimg::lowercase(axis)) { + case 'x' : + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=512 && _height*_depth*_spectrum>=16)) + cimg_forYZC(*this,y,z,c) { + T *ptrd = data(0,y,z,c); + Tlong cumul = (Tlong)0; + cimg_forX(*this,x) { cumul+=(Tlong)*ptrd; *(ptrd++) = (T)cumul; } + } + break; + case 'y' : { + const ulongT w = (ulongT)_width; + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_height>=512 && _width*_depth*_spectrum>=16)) + cimg_forXZC(*this,x,z,c) { + T *ptrd = data(x,0,z,c); + Tlong cumul = (Tlong)0; + cimg_forY(*this,y) { cumul+=(Tlong)*ptrd; *ptrd = (T)cumul; ptrd+=w; } + } + } break; + case 'z' : { + const ulongT wh = (ulongT)_width*_height; + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_depth>=512 && _width*_depth*_spectrum>=16)) + cimg_forXYC(*this,x,y,c) { + T *ptrd = data(x,y,0,c); + Tlong cumul = (Tlong)0; + cimg_forZ(*this,z) { cumul+=(Tlong)*ptrd; *ptrd = (T)cumul; ptrd+=wh; } + } + } break; + case 'c' : { + const ulongT whd = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_spectrum>=512 && _width*_height*_depth>=16)) + cimg_forXYZ(*this,x,y,z) { + T *ptrd = data(x,y,z,0); + Tlong cumul = (Tlong)0; + cimg_forC(*this,c) { cumul+=(Tlong)*ptrd; *ptrd = (T)cumul; ptrd+=whd; } + } + } break; + default : { // Global cumulation. + Tlong cumul = (Tlong)0; + cimg_for(*this,ptrd,T) { cumul+=(Tlong)*ptrd; *ptrd = (T)cumul; } + } + } + return *this; + } + + //! Cumulate image values, optionally along specified axis \newinstance. + CImg get_cumulate(const char axis=0) const { + return CImg(*this,false).cumulate(axis); + } + + //! Cumulate image values, along specified axes. + /** + \param axes Cumulation axes, as a C-string. + \note \c axes may contains multiple characters, e.g. \c "xyz" + **/ + CImg& cumulate(const char *const axes) { + for (const char *s = axes; *s; ++s) cumulate(*s); + return *this; + } + + //! Cumulate image values, along specified axes \newinstance. + CImg get_cumulate(const char *const axes) const { + return CImg(*this,false).cumulate(axes); + } + + //! Erode image by a structuring element. + /** + \param kernel Structuring element. + \param boundary_conditions Boundary conditions. + \param is_real Do the erosion in real (a.k.a 'non-flat') mode (\c true) rather than binary mode (\c false). + **/ + template + CImg& erode(const CImg& kernel, const bool boundary_conditions=true, + const bool is_real=false) { + if (is_empty() || !kernel) return *this; + return get_erode(kernel,boundary_conditions,is_real).move_to(*this); + } + + //! Erode image by a structuring element \newinstance. + template + CImg<_cimg_Tt> get_erode(const CImg& kernel, const bool boundary_conditions=true, + const bool is_real=false) const { + if (is_empty() || !kernel) return *this; + if (!is_real && kernel==0) return CImg(width(),height(),depth(),spectrum(),0); + typedef _cimg_Tt Tt; + CImg res(_width,_height,_depth,std::max(_spectrum,kernel._spectrum)); + const int + mx2 = kernel.width()/2, my2 = kernel.height()/2, mz2 = kernel.depth()/2, + mx1 = kernel.width() - mx2 - 1, my1 = kernel.height() - my2 - 1, mz1 = kernel.depth() - mz2 - 1, + mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; + const bool + is_inner_parallel = _width*_height*_depth>=32768, + is_outer_parallel = res.size()>=32768; + cimg::unused(is_inner_parallel,is_outer_parallel); + _cimg_abort_init_omp; + cimg_abort_init; + cimg_pragma_openmp(parallel for cimg_openmp_if(!is_inner_parallel && is_outer_parallel)) + cimg_forC(res,c) _cimg_abort_try_omp { + cimg_abort_test; + const CImg img = get_shared_channel(c%_spectrum); + const CImg K = kernel.get_shared_channel(c%kernel._spectrum); + if (is_real) { // Real erosion + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(is_inner_parallel)) + for (int z = mz1; z::max(); + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) { + const t mval = K(mx1 + xm,my1 + ym,mz1 + zm); + const Tt cval = (Tt)(img(x + xm,y + ym,z + zm) - mval); + if (cval=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + Tt min_val = cimg::type::max(); + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) { + const t mval = K(mx1 + xm,my1 + ym,mz1 + zm); + const Tt cval = (Tt)(img._atXYZ(x + xm,y + ym,z + zm) - mval); + if (cval=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + Tt min_val = cimg::type::max(); + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) { + const t mval = K(mx1 + xm,my1 + ym,mz1 + zm); + const Tt cval = (Tt)(img.atXYZ(x + xm,y + ym,z + zm,0,(T)0) - mval); + if (cval::max(); + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) + if (K(mx1 + xm,my1 + ym,mz1 + zm)) { + const Tt cval = (Tt)img(x + xm,y + ym,z + zm); + if (cval=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + Tt min_val = cimg::type::max(); + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) + if (K(mx1 + xm,my1 + ym,mz1 + zm)) { + const T cval = (Tt)img._atXYZ(x + xm,y + ym,z + zm); + if (cval=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + Tt min_val = cimg::type::max(); + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) + if (K(mx1 + xm,my1 + ym,mz1 + zm)) { + const T cval = (Tt)img.atXYZ(x + xm,y + ym,z + zm,0,(T)0); + if (cval& erode(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) { + if (is_empty() || (sx==1 && sy==1 && sz==1)) return *this; + if (sx>1 && _width>1) { // Along X-axis. + const int L = width(), off = 1, s = (int)sx, _s2 = s/2 + 1, _s1 = s - _s2, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; + CImg buf(L); + cimg_pragma_openmp(parallel for collapse(3) firstprivate(buf) if (size()>524288)) + cimg_forYZC(*this,y,z,c) { + T *const ptrdb = buf._data, *ptrd = buf._data, *const ptrde = buf._data + L - 1; + const T *const ptrsb = data(0,y,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; + T cur = *ptrs; ptrs+=off; bool is_first = true; + for (int p = s2 - 1; p>0 && ptrs<=ptrse; --p) { + const T val = *ptrs; ptrs+=off; if (val<=cur) { cur = val; is_first = false; }} + *(ptrd++) = cur; + if (ptrs>=ptrse) { + T *pd = data(0,y,z,c); cur = std::min(cur,*ptrse); cimg_forX(buf,x) { *pd = cur; pd+=off; } + } else { + for (int p = s1; p>0 && ptrd<=ptrde; --p) { + const T val = *ptrs; if (ptrs0; --p) { + const T val = *ptrs; ptrs+=off; + if (is_first) { + const T *nptrs = ptrs - off; cur = val; + for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval0 && ptrs>=ptrsb; --p) { + const T val = *ptrs; ptrs-=off; if (val0 && ptrd>=ptrdb; --p) { + const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val1 && _height>1) { // Along Y-axis. + const int L = height(), off = width(), s = (int)sy, _s2 = s/2 + 1, _s1 = s - _s2, s1 = _s1>L?L:_s1, + s2 = _s2>L?L:_s2; + CImg buf(L); + cimg_pragma_openmp(parallel for collapse(3) firstprivate(buf) if (size()>524288)) + cimg_forXZC(*this,x,z,c) { + T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; + const T *const ptrsb = data(x,0,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; + T cur = *ptrs; ptrs+=off; bool is_first = true; + for (int p = s2 - 1; p>0 && ptrs<=ptrse; --p) { + const T val = *ptrs; ptrs+=off; if (val<=cur) { cur = val; is_first = false; } + } + *(ptrd++) = cur; + if (ptrs>=ptrse) { + T *pd = data(x,0,z,c); cur = std::min(cur,*ptrse); cimg_forX(buf,x) { *pd = cur; pd+=off; } + } else { + for (int p = s1; p>0 && ptrd<=ptrde; --p) { + const T val = *ptrs; if (ptrs0; --p) { + const T val = *ptrs; ptrs+=off; + if (is_first) { + const T *nptrs = ptrs - off; cur = val; + for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval0 && ptrs>=ptrsb; --p) { + const T val = *ptrs; ptrs-=off; if (val0 && ptrd>=ptrdb; --p) { + const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val1 && _depth>1) { // Along Z-axis. + const int L = depth(), off = width()*height(), s = (int)sz, _s2 = s/2 + 1, _s1 = s - _s2, s1 = _s1>L?L:_s1, + s2 = _s2>L?L:_s2; + CImg buf(L); + cimg_pragma_openmp(parallel for collapse(3) firstprivate(buf) if (size()>524288)) + cimg_forXYC(*this,x,y,c) { + T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; + const T *const ptrsb = data(x,y,0,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; + T cur = *ptrs; ptrs+=off; bool is_first = true; + for (int p = s2 - 1; p>0 && ptrs<=ptrse; --p) { + const T val = *ptrs; ptrs+=off; if (val<=cur) { cur = val; is_first = false; } + } + *(ptrd++) = cur; + if (ptrs>=ptrse) { + T *pd = data(x,y,0,c); cur = std::min(cur,*ptrse); cimg_forX(buf,x) { *pd = cur; pd+=off; } + } else { + for (int p = s1; p>0 && ptrd<=ptrde; --p) { + const T val = *ptrs; if (ptrs0; --p) { + const T val = *ptrs; ptrs+=off; + if (is_first) { + const T *nptrs = ptrs - off; cur = val; + for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval0 && ptrs>=ptrsb; --p) { + const T val = *ptrs; ptrs-=off; if (val0 && ptrd>=ptrdb; --p) { + const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val get_erode(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) const { + return (+*this).erode(sx,sy,sz); + } + + //! Erode the image by a square structuring element of specified size. + /** + \param s Size of the structuring element. + **/ + CImg& erode(const unsigned int s) { + return erode(s,s,s); + } + + //! Erode the image by a square structuring element of specified size \newinstance. + CImg get_erode(const unsigned int s) const { + return (+*this).erode(s); + } + + //! Dilate image by a structuring element. + /** + \param kernel Structuring element. + \param boundary_conditions Boundary conditions. + \param is_real Do the dilation in real (a.k.a 'non-flat') mode (\c true) rather than binary mode (\c false). + **/ + template + CImg& dilate(const CImg& kernel, const bool boundary_conditions=true, + const bool is_real=false) { + if (is_empty() || !kernel) return *this; + return get_dilate(kernel,boundary_conditions,is_real).move_to(*this); + } + + //! Dilate image by a structuring element \newinstance. + template + CImg<_cimg_Tt> get_dilate(const CImg& kernel, const bool boundary_conditions=true, + const bool is_real=false) const { + if (is_empty() || !kernel || (!is_real && kernel==0)) return *this; + typedef _cimg_Tt Tt; + CImg res(_width,_height,_depth,std::max(_spectrum,kernel._spectrum)); + const int + mx1 = kernel.width()/2, my1 = kernel.height()/2, mz1 = kernel.depth()/2, + mx2 = kernel.width() - mx1 - 1, my2 = kernel.height() - my1 - 1, mz2 = kernel.depth() - mz1 - 1, + mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; + const bool + is_inner_parallel = _width*_height*_depth>=32768, + is_outer_parallel = res.size()>=32768; + cimg::unused(is_inner_parallel,is_outer_parallel); + _cimg_abort_init_omp; + cimg_abort_init; + cimg_pragma_openmp(parallel for cimg_openmp_if(!is_inner_parallel && is_outer_parallel)) + cimg_forC(res,c) _cimg_abort_try_omp { + cimg_abort_test; + const CImg img = get_shared_channel(c%_spectrum); + const CImg K = kernel.get_shared_channel(c%kernel._spectrum); + if (is_real) { // Real dilation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(is_inner_parallel)) + for (int z = mz1; z::min(); + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) { + const t mval = K(mx2 - xm,my2 - ym,mz2 - zm); + const Tt cval = (Tt)(img(x + xm,y + ym,z + zm) + mval); + if (cval>max_val) max_val = cval; + } + res(x,y,z,c) = max_val; + } _cimg_abort_catch_omp2 + if (boundary_conditions) + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(is_inner_parallel)) + cimg_forYZ(res,y,z) _cimg_abort_try_omp2 { + cimg_abort_test2; + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + Tt max_val = cimg::type::min(); + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) { + const t mval = K(mx2 - xm,my2 - ym,mz2 - zm); + const Tt cval = (Tt)(img._atXYZ(x + xm,y + ym,z + zm) + mval); + if (cval>max_val) max_val = cval; + } + res(x,y,z,c) = max_val; + } + } _cimg_abort_catch_omp2 + else + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(is_inner_parallel)) + cimg_forYZ(*this,y,z) _cimg_abort_try_omp2 { + cimg_abort_test2; + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + Tt max_val = cimg::type::min(); + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) { + const t mval = K(mx2 - xm,my2 - ym,mz2 - zm); + const Tt cval = (Tt)(img.atXYZ(x + xm,y + ym,z + zm,0,(T)0) + mval); + if (cval>max_val) max_val = cval; + } + res(x,y,z,c) = max_val; + } + } _cimg_abort_catch_omp2 + } else { // Binary dilation + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(is_inner_parallel)) + for (int z = mz1; z::min(); + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) + if (K(mx2 - xm,my2 - ym,mz2 - zm)) { + const Tt cval = (Tt)img(x + xm,y + ym,z + zm); + if (cval>max_val) max_val = cval; + } + res(x,y,z,c) = max_val; + } _cimg_abort_catch_omp2 + if (boundary_conditions) + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(is_inner_parallel)) + cimg_forYZ(res,y,z) _cimg_abort_try_omp2 { + cimg_abort_test2; + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + Tt max_val = cimg::type::min(); + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) + if (K(mx2 - xm,my2 - ym,mz2 - zm)) { + const T cval = (Tt)img._atXYZ(x + xm,y + ym,z + zm); + if (cval>max_val) max_val = cval; + } + res(x,y,z,c) = max_val; + } + } _cimg_abort_catch_omp2 + else + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(is_inner_parallel)) + cimg_forYZ(res,y,z) _cimg_abort_try_omp2 { + cimg_abort_test2; + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + Tt max_val = cimg::type::min(); + for (int zm = -mz1; zm<=mz2; ++zm) + for (int ym = -my1; ym<=my2; ++ym) + for (int xm = -mx1; xm<=mx2; ++xm) + if (K(mx2 - xm,my2 - ym,mz2 - zm)) { + const T cval = (Tt)img.atXYZ(x + xm,y + ym,z + zm,0,(T)0); + if (cval>max_val) max_val = cval; + } + res(x,y,z,c) = max_val; + } + } _cimg_abort_catch_omp2 + } + } _cimg_abort_catch_omp + cimg_abort_test; + return res; + } + + //! Dilate image by a rectangular structuring element of specified size. + /** + \param sx Width of the structuring element. + \param sy Height of the structuring element. + \param sz Depth of the structuring element. + **/ + CImg& dilate(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) { + if (is_empty() || (sx==1 && sy==1 && sz==1)) return *this; + if (sx>1 && _width>1) { // Along X-axis. + const int L = width(), off = 1, s = (int)sx, _s1 = s/2, _s2 = s - _s1, s1 = _s1>L?L:_s1, s2 = _s2>L?L:_s2; + CImg buf(L); + cimg_pragma_openmp(parallel for collapse(3) firstprivate(buf) if (size()>524288)) + cimg_forYZC(*this,y,z,c) { + T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; + const T *const ptrsb = data(0,y,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; + T cur = *ptrs; ptrs+=off; bool is_first = true; + for (int p = s2 - 1; p>0 && ptrs<=ptrse; --p) { + const T val = *ptrs; ptrs+=off; if (val>=cur) { cur = val; is_first = false; } + } + *(ptrd++) = cur; + if (ptrs>=ptrse) { + T *pd = data(0,y,z,c); cur = std::max(cur,*ptrse); cimg_forX(buf,x) { *pd = cur; pd+=off; } + } else { + for (int p = s1; p>0 && ptrd<=ptrde; --p) { + const T val = *ptrs; if (ptrs=cur) { cur = val; is_first = false; } + *(ptrd++) = cur; + } + for (int p = L - s - 1; p>0; --p) { + const T val = *ptrs; ptrs+=off; + if (is_first) { + const T *nptrs = ptrs - off; cur = val; + for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval>cur) cur = nval; } + nptrs-=off; const T nval = *nptrs; if (nval>cur) { cur = nval; is_first = true; } else is_first = false; + } else { if (val>=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } + *(ptrd++) = cur; + } + ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; + for (int p = s1; p>0 && ptrs>=ptrsb; --p) { + const T val = *ptrs; ptrs-=off; if (val>cur) cur = val; + } + *(ptrd--) = cur; + for (int p = s2 - 1; p>0 && ptrd>=ptrdb; --p) { + const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val>cur) cur = val; *(ptrd--) = cur; + } + T *pd = data(0,y,z,c); cimg_for(buf,ps,T) { *pd = *ps; pd+=off; } + } + } + } + + if (sy>1 && _height>1) { // Along Y-axis. + const int L = height(), off = width(), s = (int)sy, _s1 = s/2, _s2 = s - _s1, s1 = _s1>L?L:_s1, + s2 = _s2>L?L:_s2; + CImg buf(L); + cimg_pragma_openmp(parallel for collapse(3) firstprivate(buf) if (size()>524288)) + cimg_forXZC(*this,x,z,c) { + T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; + const T *const ptrsb = data(x,0,z,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; + T cur = *ptrs; ptrs+=off; bool is_first = true; + for (int p = s2 - 1; p>0 && ptrs<=ptrse; --p) { + const T val = *ptrs; ptrs+=off; if (val>=cur) { cur = val; is_first = false; } + } + *(ptrd++) = cur; + if (ptrs>=ptrse) { + T *pd = data(x,0,z,c); cur = std::max(cur,*ptrse); cimg_forX(buf,x) { *pd = cur; pd+=off; } + } else { + for (int p = s1; p>0 && ptrd<=ptrde; --p) { + const T val = *ptrs; if (ptrs=cur) { cur = val; is_first = false; } + *(ptrd++) = cur; + } + for (int p = L - s - 1; p>0; --p) { + const T val = *ptrs; ptrs+=off; + if (is_first) { + const T *nptrs = ptrs - off; cur = val; + for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval>cur) cur = nval; } + nptrs-=off; const T nval = *nptrs; if (nval>cur) { cur = nval; is_first = true; } else is_first = false; + } else { if (val>=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } + *(ptrd++) = cur; + } + ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; + for (int p = s1; p>0 && ptrs>=ptrsb; --p) { + const T val = *ptrs; ptrs-=off; if (val>cur) cur = val; + } + *(ptrd--) = cur; + for (int p = s2 - 1; p>0 && ptrd>=ptrdb; --p) { + const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val>cur) cur = val; *(ptrd--) = cur; + } + T *pd = data(x,0,z,c); cimg_for(buf,ps,T) { *pd = *ps; pd+=off; } + } + } + } + + if (sz>1 && _depth>1) { // Along Z-axis. + const int L = depth(), off = width()*height(), s = (int)sz, _s1 = s/2, _s2 = s - _s1, s1 = _s1>L?L:_s1, + s2 = _s2>L?L:_s2; + CImg buf(L); + cimg_pragma_openmp(parallel for collapse(3) firstprivate(buf) if (size()>524288)) + cimg_forXYC(*this,x,y,c) { + T *const ptrdb = buf._data, *ptrd = ptrdb, *const ptrde = buf._data + L - 1; + const T *const ptrsb = data(x,y,0,c), *ptrs = ptrsb, *const ptrse = ptrs + L*off - off; + T cur = *ptrs; ptrs+=off; bool is_first = true; + for (int p = s2 - 1; p>0 && ptrs<=ptrse; --p) { + const T val = *ptrs; ptrs+=off; if (val>=cur) { cur = val; is_first = false; } + } + *(ptrd++) = cur; + if (ptrs>=ptrse) { + T *pd = data(x,y,0,c); cur = std::max(cur,*ptrse); cimg_forX(buf,x) { *pd = cur; pd+=off; } + } else { + for (int p = s1; p>0 && ptrd<=ptrde; --p) { + const T val = *ptrs; if (ptrs=cur) { cur = val; is_first = false; } + *(ptrd++) = cur; + } + for (int p = L - s - 1; p>0; --p) { + const T val = *ptrs; ptrs+=off; + if (is_first) { + const T *nptrs = ptrs - off; cur = val; + for (int q = s - 2; q>0; --q) { nptrs-=off; const T nval = *nptrs; if (nval>cur) cur = nval; } + nptrs-=off; const T nval = *nptrs; if (nval>cur) { cur = nval; is_first = true; } else is_first = false; + } else { if (val>=cur) cur = val; else if (cur==*(ptrs-s*off)) is_first = true; } + *(ptrd++) = cur; + } + ptrd = ptrde; ptrs = ptrse; cur = *ptrs; ptrs-=off; + for (int p = s1; p>0 && ptrs>=ptrsb; --p) { + const T val = *ptrs; ptrs-=off; if (val>cur) cur = val; + } + *(ptrd--) = cur; + for (int p = s2 - 1; p>0 && ptrd>=ptrdb; --p) { + const T val = *ptrs; if (ptrs>ptrsb) ptrs-=off; if (val>cur) cur = val; *(ptrd--) = cur; + } + T *pd = data(x,y,0,c); cimg_for(buf,ps,T) { *pd = *ps; pd+=off; } + } + } + } + return *this; + } + + //! Dilate image by a rectangular structuring element of specified size \newinstance. + CImg get_dilate(const unsigned int sx, const unsigned int sy, const unsigned int sz=1) const { + return (+*this).dilate(sx,sy,sz); + } + + //! Dilate image by a square structuring element of specified size. + /** + \param s Size of the structuring element. + **/ + CImg& dilate(const unsigned int s) { + return dilate(s,s,s); + } + + //! Dilate image by a square structuring element of specified size \newinstance. + CImg get_dilate(const unsigned int s) const { + return (+*this).dilate(s); + } + + //! Compute watershed transform. + /** + \param priority Priority map. + \param is_high_connectivity Boolean that choose between 4(false)- or 8(true)-connectivity + in 2d case, and between 6(false)- or 26(true)-connectivity in 3d case. + \note Non-zero values of the instance instance are propagated to zero-valued ones according to + specified the priority map. + **/ + template + CImg& watershed(const CImg& priority, const bool is_high_connectivity=false) { +#define _cimg_watershed_init(cond,X,Y,Z) \ + if (cond && !(*this)(X,Y,Z)) Q._priority_queue_insert(labels,sizeQ,priority(X,Y,Z),X,Y,Z,nb_seeds) + +#define _cimg_watershed_propagate(cond,X,Y,Z) \ + if (cond) { \ + if ((*this)(X,Y,Z)) { \ + ns = labels(X,Y,Z) - 1; xs = seeds(ns,0); ys = seeds(ns,1); zs = seeds(ns,2); \ + d = cimg::sqr((float)x - xs) + cimg::sqr((float)y - ys) + cimg::sqr((float)z - zs); \ + if (d labels(_width,_height,_depth,1,0), seeds(64,3); + CImg::type> Q; + unsigned int sizeQ = 0; + int px, nx, py, ny, pz, nz; + bool is_px, is_nx, is_py, is_ny, is_pz, is_nz; + const bool is_3d = _depth>1; + + // Find seed points and insert them in priority queue. + unsigned int nb_seeds = 0; + const T *ptrs = _data; + cimg_forXYZ(*this,x,y,z) if (*(ptrs++)) { // 3d version + if (nb_seeds>=seeds._width) seeds.resize(2*seeds._width,3,1,1,0); + seeds(nb_seeds,0) = x; seeds(nb_seeds,1) = y; seeds(nb_seeds++,2) = z; + px = x - 1; nx = x + 1; + py = y - 1; ny = y + 1; + pz = z - 1; nz = z + 1; + is_px = px>=0; is_nx = nx=0; is_ny = ny=0; is_nz = nz=0; is_nx = nx=0; is_ny = ny=0; is_nz = nz::inf(); + T label = (T)0; + _cimg_watershed_propagate(is_px,px,y,z); + _cimg_watershed_propagate(is_nx,nx,y,z); + _cimg_watershed_propagate(is_py,x,py,z); + _cimg_watershed_propagate(is_ny,x,ny,z); + if (is_3d) { + _cimg_watershed_propagate(is_pz,x,y,pz); + _cimg_watershed_propagate(is_nz,x,y,nz); + } + if (is_high_connectivity) { + _cimg_watershed_propagate(is_px && is_py,px,py,z); + _cimg_watershed_propagate(is_nx && is_py,nx,py,z); + _cimg_watershed_propagate(is_px && is_ny,px,ny,z); + _cimg_watershed_propagate(is_nx && is_ny,nx,ny,z); + if (is_3d) { + _cimg_watershed_propagate(is_px && is_pz,px,y,pz); + _cimg_watershed_propagate(is_nx && is_pz,nx,y,pz); + _cimg_watershed_propagate(is_px && is_nz,px,y,nz); + _cimg_watershed_propagate(is_nx && is_nz,nx,y,nz); + _cimg_watershed_propagate(is_py && is_pz,x,py,pz); + _cimg_watershed_propagate(is_ny && is_pz,x,ny,pz); + _cimg_watershed_propagate(is_py && is_nz,x,py,nz); + _cimg_watershed_propagate(is_ny && is_nz,x,ny,nz); + _cimg_watershed_propagate(is_px && is_py && is_pz,px,py,pz); + _cimg_watershed_propagate(is_nx && is_py && is_pz,nx,py,pz); + _cimg_watershed_propagate(is_px && is_ny && is_pz,px,ny,pz); + _cimg_watershed_propagate(is_nx && is_ny && is_pz,nx,ny,pz); + _cimg_watershed_propagate(is_px && is_py && is_nz,px,py,nz); + _cimg_watershed_propagate(is_nx && is_py && is_nz,nx,py,nz); + _cimg_watershed_propagate(is_px && is_ny && is_nz,px,ny,nz); + _cimg_watershed_propagate(is_nx && is_ny && is_nz,nx,ny,nz); + } + } + (*this)(x,y,z) = label; + labels(x,y,z) = ++nmin; + } + return *this; + } + + //! Compute watershed transform \newinstance. + template + CImg get_watershed(const CImg& priority, const bool is_high_connectivity=false) const { + return (+*this).watershed(priority,is_high_connectivity); + } + + // [internal] Insert/Remove items in priority queue, for watershed/distance transforms. + template + bool _priority_queue_insert(CImg& is_queued, unsigned int& siz, const tv value, + const unsigned int x, const unsigned int y, const unsigned int z, + const unsigned int n=1) { + if (is_queued(x,y,z)) return false; + is_queued(x,y,z) = (tq)n; + if (++siz>=_width) { if (!is_empty()) resize(_width*2,4,1,1,0); else assign(64,4); } + (*this)(siz - 1,0) = (T)value; + (*this)(siz - 1,1) = (T)x; + (*this)(siz - 1,2) = (T)y; + (*this)(siz - 1,3) = (T)z; + for (unsigned int pos = siz - 1, par = 0; pos && value>(*this)(par=(pos + 1)/2 - 1,0); pos = par) { + cimg::swap((*this)(pos,0),(*this)(par,0)); + cimg::swap((*this)(pos,1),(*this)(par,1)); + cimg::swap((*this)(pos,2),(*this)(par,2)); + cimg::swap((*this)(pos,3),(*this)(par,3)); + } + return true; + } + + CImg& _priority_queue_remove(unsigned int& siz) { + (*this)(0,0) = (*this)(--siz,0); + (*this)(0,1) = (*this)(siz,1); + (*this)(0,2) = (*this)(siz,2); + (*this)(0,3) = (*this)(siz,3); + const float value = (*this)(0,0); + for (unsigned int pos = 0, left = 0, right = 0; + ((right=2*(pos + 1),(left=right - 1))(*this)(right,0)) { + cimg::swap((*this)(pos,0),(*this)(left,0)); + cimg::swap((*this)(pos,1),(*this)(left,1)); + cimg::swap((*this)(pos,2),(*this)(left,2)); + cimg::swap((*this)(pos,3),(*this)(left,3)); + pos = left; + } else { + cimg::swap((*this)(pos,0),(*this)(right,0)); + cimg::swap((*this)(pos,1),(*this)(right,1)); + cimg::swap((*this)(pos,2),(*this)(right,2)); + cimg::swap((*this)(pos,3),(*this)(right,3)); + pos = right; + } + } else { + cimg::swap((*this)(pos,0),(*this)(left,0)); + cimg::swap((*this)(pos,1),(*this)(left,1)); + cimg::swap((*this)(pos,2),(*this)(left,2)); + cimg::swap((*this)(pos,3),(*this)(left,3)); + pos = left; + } + } + return *this; + } + + //! Apply recursive Deriche filter. + /** + \param sigma Standard deviation of the filter. + \param order Order of the filter. Can be { 0=smooth-filter | 1=1st-derivative | 2=2nd-derivative }. + \param axis Axis along which the filter is computed. Can be { 'x' | 'y' | 'z' | 'c' }. + \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }. + **/ + CImg& deriche(const float sigma, const unsigned int order=0, const char axis='x', + const bool boundary_conditions=true) { +#define _cimg_deriche_apply \ + CImg Y(N); \ + Tfloat *ptrY = Y._data, yb = 0, yp = 0; \ + T xp = (T)0; \ + if (boundary_conditions) { xp = *ptrX; yb = yp = (Tfloat)(coefp*xp); } \ + for (int m = 0; m=0; --n) { \ + const T xc = *(ptrX-=off); \ + const Tfloat yc = (Tfloat)(a2*xn + a3*xa - b1*yn - b2*ya); \ + xa = xn; xn = xc; ya = yn; yn = yc; \ + *ptrX = (T)(*(--ptrY)+yc); \ + } + const char naxis = cimg::lowercase(axis); + const float nsigma = sigma>=0?sigma:-sigma*(naxis=='x'?_width:naxis=='y'?_height:naxis=='z'?_depth:_spectrum)/100; + if (is_empty() || (nsigma<0.1f && !order)) return *this; + const float + nnsigma = nsigma<0.1f?0.1f:nsigma, + alpha = 1.695f/nnsigma, + ema = (float)std::exp(-alpha), + ema2 = (float)std::exp(-2*alpha), + b1 = -2*ema, + b2 = ema2; + float a0 = 0, a1 = 0, a2 = 0, a3 = 0, coefp = 0, coefn = 0; + switch (order) { + case 0 : { + const float k = (1-ema)*(1-ema)/(1 + 2*alpha*ema-ema2); + a0 = k; + a1 = k*(alpha - 1)*ema; + a2 = k*(alpha + 1)*ema; + a3 = -k*ema2; + } break; + case 1 : { + const float k = -(1-ema)*(1-ema)*(1-ema)/(2*(ema + 1)*ema); + a0 = a3 = 0; + a1 = k*ema; + a2 = -a1; + } break; + case 2 : { + const float + ea = (float)std::exp(-alpha), + k = -(ema2 - 1)/(2*alpha*ema), + kn = (-2*(-1 + 3*ea - 3*ea*ea + ea*ea*ea)/(3*ea + 1 + 3*ea*ea + ea*ea*ea)); + a0 = kn; + a1 = -kn*(1 + k*alpha)*ema; + a2 = kn*(1 - k*alpha)*ema; + a3 = -kn*ema2; + } break; + default : + throw CImgArgumentException(_cimg_instance + "deriche(): Invalid specified filter order %u " + "(should be { 0=smoothing | 1=1st-derivative | 2=2nd-derivative }).", + cimg_instance, + order); + } + coefp = (a0 + a1)/(1 + b1 + b2); + coefn = (a2 + a3)/(1 + b1 + b2); + switch (naxis) { + case 'x' : { + const int N = width(); + const ulongT off = 1U; + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=256 && _height*_depth*_spectrum>=16)) + cimg_forYZC(*this,y,z,c) { T *ptrX = data(0,y,z,c); _cimg_deriche_apply; } + } break; + case 'y' : { + const int N = height(); + const ulongT off = (ulongT)_width; + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=256 && _height*_depth*_spectrum>=16)) + cimg_forXZC(*this,x,z,c) { T *ptrX = data(x,0,z,c); _cimg_deriche_apply; } + } break; + case 'z' : { + const int N = depth(); + const ulongT off = (ulongT)_width*_height; + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=256 && _height*_depth*_spectrum>=16)) + cimg_forXYC(*this,x,y,c) { T *ptrX = data(x,y,0,c); _cimg_deriche_apply; } + } break; + default : { + const int N = spectrum(); + const ulongT off = (ulongT)_width*_height*_depth; + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=256 && _height*_depth*_spectrum>=16)) + cimg_forXYZ(*this,x,y,z) { T *ptrX = data(x,y,z,0); _cimg_deriche_apply; } + } + } + return *this; + } + + //! Apply recursive Deriche filter \newinstance. + CImg get_deriche(const float sigma, const unsigned int order=0, const char axis='x', + const bool boundary_conditions=true) const { + return CImg(*this,false).deriche(sigma,order,axis,boundary_conditions); + } + + // [internal] Apply a recursive filter (used by CImg::vanvliet()). + /* + \param ptr the pointer of the data + \param filter the coefficient of the filter in the following order [n,n - 1,n - 2,n - 3]. + \param N size of the data + \param off the offset between two data point + \param order the order of the filter 0 (smoothing), 1st derivtive, 2nd derivative, 3rd derivative + \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }. + \note Boundary condition using B. Triggs method (IEEE trans on Sig Proc 2005). + */ + static void _cimg_recursive_apply(T *data, const double filter[], const int N, const ulongT off, + const unsigned int order, const bool boundary_conditions) { + double val[4] = { 0 }; // res[n,n - 1,n - 2,n - 3,..] or res[n,n + 1,n + 2,n + 3,..] + const double + sumsq = filter[0], sum = sumsq * sumsq, + a1 = filter[1], a2 = filter[2], a3 = filter[3], + scaleM = 1.0 / ( (1.0 + a1 - a2 + a3) * (1.0 - a1 - a2 - a3) * (1.0 + a2 + (a1 - a3) * a3) ); + double M[9]; // Triggs matrix + M[0] = scaleM * (-a3 * a1 + 1.0 - a3 * a3 - a2); + M[1] = scaleM * (a3 + a1) * (a2 + a3 * a1); + M[2] = scaleM * a3 * (a1 + a3 * a2); + M[3] = scaleM * (a1 + a3 * a2); + M[4] = -scaleM * (a2 - 1.0) * (a2 + a3 * a1); + M[5] = -scaleM * a3 * (a3 * a1 + a3 * a3 + a2 - 1.0); + M[6] = scaleM * (a3 * a1 + a2 + a1 * a1 - a2 * a2); + M[7] = scaleM * (a1 * a2 + a3 * a2 * a2 - a1 * a3 * a3 - a3 * a3 * a3 - a3 * a2 + a3); + M[8] = scaleM * a3 * (a1 + a3 * a2); + switch (order) { + case 0 : { + const double iplus = (boundary_conditions?data[(N - 1)*off]:(T)0); + for (int pass = 0; pass<2; ++pass) { + if (!pass) { + for (int k = 1; k<4; ++k) val[k] = (boundary_conditions?*data/sumsq:0); + } else { + // apply Triggs boundary conditions + const double + uplus = iplus/(1.0 - a1 - a2 - a3), vplus = uplus/(1.0 - a1 - a2 - a3), + unp = val[1] - uplus, unp1 = val[2] - uplus, unp2 = val[3] - uplus; + val[0] = (M[0] * unp + M[1] * unp1 + M[2] * unp2 + vplus) * sum; + val[1] = (M[3] * unp + M[4] * unp1 + M[5] * unp2 + vplus) * sum; + val[2] = (M[6] * unp + M[7] * unp1 + M[8] * unp2 + vplus) * sum; + *data = (T)val[0]; + data -= off; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; + } + for (int n = pass; n0; --k) val[k] = val[k - 1]; + } + if (!pass) data -= off; + } + } break; + case 1 : { + double x[3]; // [front,center,back] + for (int pass = 0; pass<2; ++pass) { + if (!pass) { + for (int k = 0; k<3; ++k) x[k] = (boundary_conditions?*data:(T)0); + for (int k = 0; k<4; ++k) val[k] = 0; + } else { + // apply Triggs boundary conditions + const double + unp = val[1], unp1 = val[2], unp2 = val[3]; + val[0] = (M[0] * unp + M[1] * unp1 + M[2] * unp2) * sum; + val[1] = (M[3] * unp + M[4] * unp1 + M[5] * unp2) * sum; + val[2] = (M[6] * unp + M[7] * unp1 + M[8] * unp2) * sum; + *data = (T)val[0]; + data -= off; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; + } + for (int n = pass; n0; --k) x[k] = x[k - 1]; + } else { data-=off;} + for (int k = 3; k>0; --k) val[k] = val[k - 1]; + } + *data = (T)0; + } + } break; + case 2: { + double x[3]; // [front,center,back] + for (int pass = 0; pass<2; ++pass) { + if (!pass) { + for (int k = 0; k<3; ++k) x[k] = (boundary_conditions?*data:(T)0); + for (int k = 0; k<4; ++k) val[k] = 0; + } else { + // apply Triggs boundary conditions + const double + unp = val[1], unp1 = val[2], unp2 = val[3]; + val[0] = (M[0] * unp + M[1] * unp1 + M[2] * unp2) * sum; + val[1] = (M[3] * unp + M[4] * unp1 + M[5] * unp2) * sum; + val[2] = (M[6] * unp + M[7] * unp1 + M[8] * unp2) * sum; + *data = (T)val[0]; + data -= off; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; + } + for (int n = pass; n0; --k) x[k] = x[k - 1]; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; + } + *data = (T)0; + } + } break; + case 3: { + double x[3]; // [front,center,back] + for (int pass = 0; pass<2; ++pass) { + if (!pass) { + for (int k = 0; k<3; ++k) x[k] = (boundary_conditions?*data:(T)0); + for (int k = 0; k<4; ++k) val[k] = 0; + } else { + // apply Triggs boundary conditions + const double + unp = val[1], unp1 = val[2], unp2 = val[3]; + val[0] = (M[0] * unp + M[1] * unp1 + M[2] * unp2) * sum; + val[1] = (M[3] * unp + M[4] * unp1 + M[5] * unp2) * sum; + val[2] = (M[6] * unp + M[7] * unp1 + M[8] * unp2) * sum; + *data = (T)val[0]; + data -= off; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; + } + for (int n = pass; n0; --k) x[k] = x[k - 1]; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; + } + *data = (T)0; + } + } break; + } + } + + //! Van Vliet recursive Gaussian filter. + /** + \param sigma standard deviation of the Gaussian filter + \param order the order of the filter 0,1,2,3 + \param axis Axis along which the filter is computed. Can be { 'x' | 'y' | 'z' | 'c' }. + \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }. + \note dirichlet boundary condition has a strange behavior + + I.T. Young, L.J. van Vliet, M. van Ginkel, Recursive Gabor filtering. + IEEE Trans. Sig. Proc., vol. 50, pp. 2799-2805, 2002. + + (this is an improvement over Young-Van Vliet, Sig. Proc. 44, 1995) + + Boundary conditions (only for order 0) using Triggs matrix, from + B. Triggs and M. Sdika. Boundary conditions for Young-van Vliet + recursive filtering. IEEE Trans. Signal Processing, + vol. 54, pp. 2365-2367, 2006. + **/ + CImg& vanvliet(const float sigma, const unsigned int order, const char axis='x', + const bool boundary_conditions=true) { + if (is_empty()) return *this; + if (!cimg::type::is_float()) + return CImg(*this,false).vanvliet(sigma,order,axis,boundary_conditions).move_to(*this); + const char naxis = cimg::lowercase(axis); + const float nsigma = sigma>=0?sigma:-sigma*(naxis=='x'?_width:naxis=='y'?_height:naxis=='z'?_depth:_spectrum)/100; + if (is_empty() || (nsigma<0.5f && !order)) return *this; + const double + nnsigma = nsigma<0.5f?0.5f:nsigma, + m0 = 1.16680, m1 = 1.10783, m2 = 1.40586, + m1sq = m1 * m1, m2sq = m2 * m2, + q = (nnsigma<3.556?-0.2568 + 0.5784*nnsigma + 0.0561*nnsigma*nnsigma:2.5091 + 0.9804*(nnsigma - 3.556)), + qsq = q * q, + scale = (m0 + q) * (m1sq + m2sq + 2 * m1 * q + qsq), + b1 = -q * (2 * m0 * m1 + m1sq + m2sq + (2 * m0 + 4 * m1) * q + 3 * qsq) / scale, + b2 = qsq * (m0 + 2 * m1 + 3 * q) / scale, + b3 = -qsq * q / scale, + B = ( m0 * (m1sq + m2sq) ) / scale; + double filter[4]; + filter[0] = B; filter[1] = -b1; filter[2] = -b2; filter[3] = -b3; + switch (naxis) { + case 'x' : { + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=256 && _height*_depth*_spectrum>=16)) + cimg_forYZC(*this,y,z,c) + _cimg_recursive_apply(data(0,y,z,c),filter,_width,1U,order,boundary_conditions); + } break; + case 'y' : { + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=256 && _height*_depth*_spectrum>=16)) + cimg_forXZC(*this,x,z,c) + _cimg_recursive_apply(data(x,0,z,c),filter,_height,(ulongT)_width,order,boundary_conditions); + } break; + case 'z' : { + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=256 && _height*_depth*_spectrum>=16)) + cimg_forXYC(*this,x,y,c) + _cimg_recursive_apply(data(x,y,0,c),filter,_depth,(ulongT)_width*_height, + order,boundary_conditions); + } break; + default : { + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=256 && _height*_depth*_spectrum>=16)) + cimg_forXYZ(*this,x,y,z) + _cimg_recursive_apply(data(x,y,z,0),filter,_spectrum,(ulongT)_width*_height*_depth, + order,boundary_conditions); + } + } + return *this; + } + + //! Blur image using Van Vliet recursive Gaussian filter. \newinstance. + CImg get_vanvliet(const float sigma, const unsigned int order, const char axis='x', + const bool boundary_conditions=true) const { + return CImg(*this,false).vanvliet(sigma,order,axis,boundary_conditions); + } + + //! Blur image. + /** + \param sigma_x Standard deviation of the blur, along the X-axis. + \param sigma_y Standard deviation of the blur, along the Y-axis. + \param sigma_z Standard deviation of the blur, along the Z-axis. + \param boundary_conditions Boundary conditions. Can be { false=dirichlet | true=neumann }. + \param is_gaussian Tells if the blur uses a gaussian (\c true) or quasi-gaussian (\c false) kernel. + \note + - The blur is computed as a 0-order Deriche filter. This is not a gaussian blur. + - This is a recursive algorithm, not depending on the values of the standard deviations. + \see deriche(), vanvliet(). + **/ + CImg& blur(const float sigma_x, const float sigma_y, const float sigma_z, + const bool boundary_conditions=true, const bool is_gaussian=false) { + if (is_empty()) return *this; + if (is_gaussian) { + if (_width>1) vanvliet(sigma_x,0,'x',boundary_conditions); + if (_height>1) vanvliet(sigma_y,0,'y',boundary_conditions); + if (_depth>1) vanvliet(sigma_z,0,'z',boundary_conditions); + } else { + if (_width>1) deriche(sigma_x,0,'x',boundary_conditions); + if (_height>1) deriche(sigma_y,0,'y',boundary_conditions); + if (_depth>1) deriche(sigma_z,0,'z',boundary_conditions); + } + return *this; + } + + //! Blur image \newinstance. + CImg get_blur(const float sigma_x, const float sigma_y, const float sigma_z, + const bool boundary_conditions=true, const bool is_gaussian=false) const { + return CImg(*this,false).blur(sigma_x,sigma_y,sigma_z,boundary_conditions,is_gaussian); + } + + //! Blur image isotropically. + /** + \param sigma Standard deviation of the blur. + \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }.a + \param is_gaussian Use a gaussian kernel (VanVliet) is set, a pseudo-gaussian (Deriche) otherwise. + \see deriche(), vanvliet(). + **/ + CImg& blur(const float sigma, const bool boundary_conditions=true, const bool is_gaussian=false) { + const float nsigma = sigma>=0?sigma:-sigma*cimg::max(_width,_height,_depth)/100; + return blur(nsigma,nsigma,nsigma,boundary_conditions,is_gaussian); + } + + //! Blur image isotropically \newinstance. + CImg get_blur(const float sigma, const bool boundary_conditions=true, const bool is_gaussian=false) const { + return CImg(*this,false).blur(sigma,boundary_conditions,is_gaussian); + } + + //! Blur image anisotropically, directed by a field of diffusion tensors. + /** + \param G Field of square roots of diffusion tensors/vectors used to drive the smoothing. + \param amplitude Amplitude of the smoothing. + \param dl Spatial discretization. + \param da Angular discretization. + \param gauss_prec Precision of the diffusion process. + \param interpolation_type Interpolation scheme. + Can be { 0=nearest-neighbor | 1=linear | 2=Runge-Kutta }. + \param is_fast_approx Tells if a fast approximation of the gaussian function is used or not. + **/ + template + CImg& blur_anisotropic(const CImg& G, + const float amplitude=60, const float dl=0.8f, const float da=30, + const float gauss_prec=2, const unsigned int interpolation_type=0, + const bool is_fast_approx=1) { + + // Check arguments and init variables + if (!is_sameXYZ(G) || (G._spectrum!=3 && G._spectrum!=6)) + throw CImgArgumentException(_cimg_instance + "blur_anisotropic(): Invalid specified diffusion tensor field (%u,%u,%u,%u,%p).", + cimg_instance, + G._width,G._height,G._depth,G._spectrum,G._data); + if (is_empty() || dl<0) return *this; + const float namplitude = amplitude>=0?amplitude:-amplitude*cimg::max(_width,_height,_depth)/100; + unsigned int iamplitude = cimg::round(namplitude); + const bool is_3d = (G._spectrum==6); + T val_min, val_max = max_min(val_min); + _cimg_abort_init_omp; + cimg_abort_init; + + if (da<=0) { // Iterated oriented Laplacians + CImg velocity(_width,_height,_depth,_spectrum); + for (unsigned int iteration = 0; iterationveloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; + } + } + else // 2d version + cimg_forZC(*this,z,c) { + cimg_abort_test; + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,z,c,I,Tfloat) { + const Tfloat + ixx = Inc + Ipc - 2*Icc, + ixy = (Inn + Ipp - Inp - Ipn)/4, + iyy = Icn + Icp - 2*Icc, + veloc = (Tfloat)(G(x,y,0,0)*ixx + 2*G(x,y,0,1)*ixy + G(x,y,0,2)*iyy); + *(ptrd++) = veloc; + if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; + } + } + if (veloc_max>0) *this+=(velocity*=dl/veloc_max); + } + } else { // LIC-based smoothing. + const ulongT whd = (ulongT)_width*_height*_depth; + const float sqrt2amplitude = (float)std::sqrt(2*namplitude); + const int dx1 = width() - 1, dy1 = height() - 1, dz1 = depth() - 1; + CImg res(_width,_height,_depth,_spectrum,0), W(_width,_height,_depth,is_3d?4:3), val(_spectrum,1,1,1,0); + int N = 0; + if (is_3d) { // 3d version + for (float phi = cimg::mod(180.0f,da)/2.0f; phi<=180; phi+=da) { + const float phir = (float)(phi*cimg::PI/180), datmp = (float)(da/std::cos(phir)), + da2 = datmp<1?360.0f:datmp; + for (float theta = 0; theta<360; (theta+=da2),++N) { + const float + thetar = (float)(theta*cimg::PI/180), + vx = (float)(std::cos(thetar)*std::cos(phir)), + vy = (float)(std::sin(thetar)*std::cos(phir)), + vz = (float)std::sin(phir); + const t + *pa = G.data(0,0,0,0), *pb = G.data(0,0,0,1), *pc = G.data(0,0,0,2), + *pd = G.data(0,0,0,3), *pe = G.data(0,0,0,4), *pf = G.data(0,0,0,5); + Tfloat *pd0 = W.data(0,0,0,0), *pd1 = W.data(0,0,0,1), *pd2 = W.data(0,0,0,2), *pd3 = W.data(0,0,0,3); + cimg_forXYZ(G,xg,yg,zg) { + const t a = *(pa++), b = *(pb++), c = *(pc++), d = *(pd++), e = *(pe++), f = *(pf++); + const float + u = (float)(a*vx + b*vy + c*vz), + v = (float)(b*vx + d*vy + e*vz), + w = (float)(c*vx + e*vy + f*vz), + n = 1e-5f + cimg::hypot(u,v,w), + dln = dl/n; + *(pd0++) = (Tfloat)(u*dln); + *(pd1++) = (Tfloat)(v*dln); + *(pd2++) = (Tfloat)(w*dln); + *(pd3++) = (Tfloat)n; + } + + cimg_abort_test; + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width>=256 && _height*_depth>=2) + firstprivate(val)) + cimg_forYZ(*this,y,z) _cimg_abort_try_omp2 { + cimg_abort_test2; + cimg_forX(*this,x) { + val.fill(0); + const float + n = (float)W(x,y,z,3), + fsigma = (float)(n*sqrt2amplitude), + fsigma2 = 2*fsigma*fsigma, + length = gauss_prec*fsigma; + float + S = 0, + X = (float)x, + Y = (float)y, + Z = (float)z; + switch (interpolation_type) { + case 0 : { // Nearest neighbor + for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1 && Z>=0 && Z<=dz1; l+=dl) { + const int + cx = (int)(X + 0.5f), + cy = (int)(Y + 0.5f), + cz = (int)(Z + 0.5f); + const float + u = (float)W(cx,cy,cz,0), + v = (float)W(cx,cy,cz,1), + w = (float)W(cx,cy,cz,2); + if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)(*this)(cx,cy,cz,c); ++S; } + else { + const float coef = (float)std::exp(-l*l/fsigma2); + cimg_forC(*this,c) val[c]+=(Tfloat)(coef*(*this)(cx,cy,cz,c)); + S+=coef; + } + X+=u; Y+=v; Z+=w; + } + } break; + case 1 : { // Linear interpolation + for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1 && Z>=0 && Z<=dz1; l+=dl) { + const float + u = (float)(W._linear_atXYZ(X,Y,Z,0)), + v = (float)(W._linear_atXYZ(X,Y,Z,1)), + w = (float)(W._linear_atXYZ(X,Y,Z,2)); + if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)_linear_atXYZ(X,Y,Z,c); ++S; } + else { + const float coef = (float)std::exp(-l*l/fsigma2); + cimg_forC(*this,c) val[c]+=(Tfloat)(coef*_linear_atXYZ(X,Y,Z,c)); + S+=coef; + } + X+=u; Y+=v; Z+=w; + } + } break; + default : { // 2nd order Runge Kutta + for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1 && Z>=0 && Z<=dz1; l+=dl) { + const float + u0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,0)), + v0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,1)), + w0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,2)), + u = (float)(W._linear_atXYZ(X + u0,Y + v0,Z + w0,0)), + v = (float)(W._linear_atXYZ(X + u0,Y + v0,Z + w0,1)), + w = (float)(W._linear_atXYZ(X + u0,Y + v0,Z + w0,2)); + if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)_linear_atXYZ(X,Y,Z,c); ++S; } + else { + const float coef = (float)std::exp(-l*l/fsigma2); + cimg_forC(*this,c) val[c]+=(Tfloat)(coef*_linear_atXYZ(X,Y,Z,c)); + S+=coef; + } + X+=u; Y+=v; Z+=w; + } + } break; + } + Tfloat *ptrd = res.data(x,y,z); + if (S>0) cimg_forC(res,c) { *ptrd+=val[c]/S; ptrd+=whd; } + else cimg_forC(res,c) { *ptrd+=(Tfloat)((*this)(x,y,z,c)); ptrd+=whd; } + } + } _cimg_abort_catch_omp2 + } + } + } else { // 2d LIC algorithm + for (float theta = cimg::mod(360.0f,da)/2.0f; theta<360; (theta+=da),++N) { + const float thetar = (float)(theta*cimg::PI/180), + vx = (float)(std::cos(thetar)), vy = (float)(std::sin(thetar)); + const t *pa = G.data(0,0,0,0), *pb = G.data(0,0,0,1), *pc = G.data(0,0,0,2); + Tfloat *pd0 = W.data(0,0,0,0), *pd1 = W.data(0,0,0,1), *pd2 = W.data(0,0,0,2); + cimg_forXY(G,xg,yg) { + const t a = *(pa++), b = *(pb++), c = *(pc++); + const float + u = (float)(a*vx + b*vy), + v = (float)(b*vx + c*vy), + n = std::max(1e-5f,cimg::hypot(u,v)), + dln = dl/n; + *(pd0++) = (Tfloat)(u*dln); + *(pd1++) = (Tfloat)(v*dln); + *(pd2++) = (Tfloat)n; + } + + cimg_abort_test; + cimg_pragma_openmp(parallel for cimg_openmp_if(_width>=256 && _height>=2) firstprivate(val)) + cimg_forY(*this,y) _cimg_abort_try_omp2 { + cimg_abort_test2; + cimg_forX(*this,x) { + val.fill(0); + const float + n = (float)W(x,y,0,2), + fsigma = (float)(n*sqrt2amplitude), + fsigma2 = 2*fsigma*fsigma, + length = gauss_prec*fsigma; + float + S = 0, + X = (float)x, + Y = (float)y; + switch (interpolation_type) { + case 0 : { // Nearest-neighbor + for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1; l+=dl) { + const int + cx = (int)(X + 0.5f), + cy = (int)(Y + 0.5f); + const float + u = (float)W(cx,cy,0,0), + v = (float)W(cx,cy,0,1); + if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)(*this)(cx,cy,0,c); ++S; } + else { + const float coef = (float)std::exp(-l*l/fsigma2); + cimg_forC(*this,c) val[c]+=(Tfloat)(coef*(*this)(cx,cy,0,c)); + S+=coef; + } + X+=u; Y+=v; + } + } break; + case 1 : { // Linear interpolation + for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1; l+=dl) { + const float + u = (float)(W._linear_atXY(X,Y,0,0)), + v = (float)(W._linear_atXY(X,Y,0,1)); + if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)_linear_atXY(X,Y,0,c); ++S; } + else { + const float coef = (float)std::exp(-l*l/fsigma2); + cimg_forC(*this,c) val[c]+=(Tfloat)(coef*_linear_atXY(X,Y,0,c)); + S+=coef; + } + X+=u; Y+=v; + } + } break; + default : { // 2nd-order Runge-kutta interpolation + for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1; l+=dl) { + const float + u0 = (float)(0.5f*W._linear_atXY(X,Y,0,0)), + v0 = (float)(0.5f*W._linear_atXY(X,Y,0,1)), + u = (float)(W._linear_atXY(X + u0,Y + v0,0,0)), + v = (float)(W._linear_atXY(X + u0,Y + v0,0,1)); + if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)_linear_atXY(X,Y,0,c); ++S; } + else { + const float coef = (float)std::exp(-l*l/fsigma2); + cimg_forC(*this,c) val[c]+=(Tfloat)(coef*_linear_atXY(X,Y,0,c)); + S+=coef; + } + X+=u; Y+=v; + } + } + } + Tfloat *ptrd = res.data(x,y); + if (S>0) cimg_forC(res,c) { *ptrd+=val[c]/S; ptrd+=whd; } + else cimg_forC(res,c) { *ptrd+=(Tfloat)((*this)(x,y,0,c)); ptrd+=whd; } + } + } _cimg_abort_catch_omp2 + } + } + const Tfloat *ptrs = res._data; + cimg_for(*this,ptrd,T) { + const Tfloat val = *(ptrs++)/N; + *ptrd = valval_max?val_max:(T)val); + } + } + cimg_abort_test; + return *this; + } + + //! Blur image anisotropically, directed by a field of diffusion tensors \newinstance. + template + CImg get_blur_anisotropic(const CImg& G, + const float amplitude=60, const float dl=0.8f, const float da=30, + const float gauss_prec=2, const unsigned int interpolation_type=0, + const bool is_fast_approx=true) const { + return CImg(*this,false).blur_anisotropic(G,amplitude,dl,da,gauss_prec,interpolation_type,is_fast_approx); + } + + //! Blur image anisotropically, in an edge-preserving way. + /** + \param amplitude Amplitude of the smoothing. + \param sharpness Sharpness. + \param anisotropy Anisotropy. + \param alpha Standard deviation of the gradient blur. + \param sigma Standard deviation of the structure tensor blur. + \param dl Spatial discretization. + \param da Angular discretization. + \param gauss_prec Precision of the diffusion process. + \param interpolation_type Interpolation scheme. + Can be { 0=nearest-neighbor | 1=linear | 2=Runge-Kutta }. + \param is_fast_approx Tells if a fast approximation of the gaussian function is used or not. + **/ + CImg& blur_anisotropic(const float amplitude, const float sharpness=0.7f, const float anisotropy=0.6f, + const float alpha=0.6f, const float sigma=1.1f, const float dl=0.8f, const float da=30, + const float gauss_prec=2, const unsigned int interpolation_type=0, + const bool is_fast_approx=true) { + const float nalpha = alpha>=0?alpha:-alpha*cimg::max(_width,_height,_depth)/100; + const float nsigma = sigma>=0?sigma:-sigma*cimg::max(_width,_height,_depth)/100; + return blur_anisotropic(get_diffusion_tensors(sharpness,anisotropy,nalpha,nsigma,interpolation_type!=3), + amplitude,dl,da,gauss_prec,interpolation_type,is_fast_approx); + } + + //! Blur image anisotropically, in an edge-preserving way \newinstance. + CImg get_blur_anisotropic(const float amplitude, const float sharpness=0.7f, const float anisotropy=0.6f, + const float alpha=0.6f, const float sigma=1.1f, const float dl=0.8f, + const float da=30, const float gauss_prec=2, + const unsigned int interpolation_type=0, + const bool is_fast_approx=true) const { + return CImg(*this,false).blur_anisotropic(amplitude,sharpness,anisotropy,alpha,sigma,dl,da,gauss_prec, + interpolation_type,is_fast_approx); + } + + //! Blur image, with the joint bilateral filter. + /** + \param guide Image used to model the smoothing weights. + \param sigma_x Amount of blur along the X-axis. + \param sigma_y Amount of blur along the Y-axis. + \param sigma_z Amount of blur along the Z-axis. + \param sigma_r Amount of blur along the value axis. + \param sampling_x Amount of downsampling along the X-axis used for the approximation. + Defaults (0) to sigma_x. + \param sampling_y Amount of downsampling along the Y-axis used for the approximation. + Defaults (0) to sigma_y. + \param sampling_z Amount of downsampling along the Z-axis used for the approximation. + Defaults (0) to sigma_z. + \param sampling_r Amount of downsampling along the value axis used for the approximation. + Defaults (0) to sigma_r. + \note This algorithm uses the optimisation technique proposed by S. Paris and F. Durand, in ECCV'2006 + (extended for 3d volumetric images). + It is based on the reference implementation http://people.csail.mit.edu/jiawen/software/bilateralFilter.m + **/ + template + CImg& blur_bilateral(const CImg& guide, + const float sigma_x, const float sigma_y, + const float sigma_z, const float sigma_r, + const float sampling_x, const float sampling_y, + const float sampling_z, const float sampling_r) { + if (!is_sameXYZ(guide)) + throw CImgArgumentException(_cimg_instance + "blur_bilateral(): Invalid size for specified guide image (%u,%u,%u,%u,%p).", + cimg_instance, + guide._width,guide._height,guide._depth,guide._spectrum,guide._data); + if (is_empty() || (!sigma_x && !sigma_y && !sigma_z)) return *this; + T edge_min, edge_max = guide.max_min(edge_min); + if (edge_min==edge_max) return blur(sigma_x,sigma_y,sigma_z); + const float + edge_delta = (float)(edge_max - edge_min), + _sigma_x = sigma_x>=0?sigma_x:-sigma_x*_width/100, + _sigma_y = sigma_y>=0?sigma_y:-sigma_y*_height/100, + _sigma_z = sigma_z>=0?sigma_z:-sigma_z*_depth/100, + _sigma_r = sigma_r>=0?sigma_r:-sigma_r*(edge_max - edge_min)/100, + _sampling_x = sampling_x?sampling_x:std::max(_sigma_x,1.0f), + _sampling_y = sampling_y?sampling_y:std::max(_sigma_y,1.0f), + _sampling_z = sampling_z?sampling_z:std::max(_sigma_z,1.0f), + _sampling_r = sampling_r?sampling_r:std::max(_sigma_r,edge_delta/256), + derived_sigma_x = _sigma_x / _sampling_x, + derived_sigma_y = _sigma_y / _sampling_y, + derived_sigma_z = _sigma_z / _sampling_z, + derived_sigma_r = _sigma_r / _sampling_r; + const int + padding_x = (int)(2*derived_sigma_x) + 1, + padding_y = (int)(2*derived_sigma_y) + 1, + padding_z = (int)(2*derived_sigma_z) + 1, + padding_r = (int)(2*derived_sigma_r) + 1; + const unsigned int + bx = (unsigned int)((_width - 1)/_sampling_x + 1 + 2*padding_x), + by = (unsigned int)((_height - 1)/_sampling_y + 1 + 2*padding_y), + bz = (unsigned int)((_depth - 1)/_sampling_z + 1 + 2*padding_z), + br = (unsigned int)(edge_delta/_sampling_r + 1 + 2*padding_r); + if (bx>0 || by>0 || bz>0 || br>0) { + const bool is_3d = (_depth>1); + if (is_3d) { // 3d version of the algorithm + CImg bgrid(bx,by,bz,br), bgridw(bx,by,bz,br); + cimg_forC(*this,c) { + const CImg _guide = guide.get_shared_channel(c%guide._spectrum); + bgrid.fill(0); bgridw.fill(0); + cimg_forXYZ(*this,x,y,z) { + const T val = (*this)(x,y,z,c); + const float edge = (float)_guide(x,y,z); + const int + X = (int)cimg::round(x/_sampling_x) + padding_x, + Y = (int)cimg::round(y/_sampling_y) + padding_y, + Z = (int)cimg::round(z/_sampling_z) + padding_z, + R = (int)cimg::round((edge - edge_min)/_sampling_r) + padding_r; + bgrid(X,Y,Z,R)+=(float)val; + bgridw(X,Y,Z,R)+=1; + } + bgrid.blur(derived_sigma_x,derived_sigma_y,derived_sigma_z,true).deriche(derived_sigma_r,0,'c',false); + bgridw.blur(derived_sigma_x,derived_sigma_y,derived_sigma_z,true).deriche(derived_sigma_r,0,'c',false); + + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(size()>=4096)) + cimg_forXYZ(*this,x,y,z) { + const float edge = (float)_guide(x,y,z); + const float + X = x/_sampling_x + padding_x, + Y = y/_sampling_y + padding_y, + Z = z/_sampling_z + padding_z, + R = (edge - edge_min)/_sampling_r + padding_r; + const float bval0 = bgrid._linear_atXYZC(X,Y,Z,R), bval1 = bgridw._linear_atXYZC(X,Y,Z,R); + (*this)(x,y,z,c) = (T)(bval0/bval1); + } + } + } else { // 2d version of the algorithm + CImg bgrid(bx,by,br,2); + cimg_forC(*this,c) { + const CImg _guide = guide.get_shared_channel(c%guide._spectrum); + bgrid.fill(0); + cimg_forXY(*this,x,y) { + const T val = (*this)(x,y,c); + const float edge = (float)_guide(x,y); + const int + X = (int)cimg::round(x/_sampling_x) + padding_x, + Y = (int)cimg::round(y/_sampling_y) + padding_y, + R = (int)cimg::round((edge - edge_min)/_sampling_r) + padding_r; + bgrid(X,Y,R,0)+=(float)val; + bgrid(X,Y,R,1)+=1; + } + bgrid.blur(derived_sigma_x,derived_sigma_y,0,true).blur(0,0,derived_sigma_r,false); + + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(size()>=4096)) + cimg_forXY(*this,x,y) { + const float edge = (float)_guide(x,y); + const float + X = x/_sampling_x + padding_x, + Y = y/_sampling_y + padding_y, + R = (edge - edge_min)/_sampling_r + padding_r; + const float bval0 = bgrid._linear_atXYZ(X,Y,R,0), bval1 = bgrid._linear_atXYZ(X,Y,R,1); + (*this)(x,y,c) = (T)(bval0/bval1); + } + } + } + } + return *this; + } + + //! Blur image, with the joint bilateral filter \newinstance. + template + CImg get_blur_bilateral(const CImg& guide, + const float sigma_x, const float sigma_y, + const float sigma_z, const float sigma_r, + const float sampling_x, const float sampling_y, + const float sampling_z, const float sampling_r) const { + return CImg(*this,false).blur_bilateral(guide,sigma_x,sigma_y,sigma_z,sigma_r, + sampling_x,sampling_y,sampling_z,sampling_r); + } + + //! Blur image using the joint bilateral filter. + /** + \param guide Image used to model the smoothing weights. + \param sigma_s Amount of blur along the XYZ-axes. + \param sigma_r Amount of blur along the value axis. + \param sampling_s Amount of downsampling along the XYZ-axes used for the approximation. Defaults to sigma_s. + \param sampling_r Amount of downsampling along the value axis used for the approximation. Defaults to sigma_r. + **/ + template + CImg& blur_bilateral(const CImg& guide, + const float sigma_s, const float sigma_r, + const float sampling_s=0, const float sampling_r=0) { + const float _sigma_s = sigma_s>=0?sigma_s:-sigma_s*cimg::max(_width,_height,_depth)/100; + return blur_bilateral(guide,_sigma_s,_sigma_s,_sigma_s,sigma_r,sampling_s,sampling_s,sampling_s,sampling_r); + } + + //! Blur image using the bilateral filter \newinstance. + template + CImg get_blur_bilateral(const CImg& guide, + const float sigma_s, const float sigma_r, + const float sampling_s=0, const float sampling_r=0) const { + return CImg(*this,false).blur_bilateral(guide,sigma_s,sigma_r,sampling_s,sampling_r); + } + + // [internal] Apply a box filter (used by CImg::boxfilter() and CImg::blur_box()). + /* + \param ptr the pointer of the data + \param N size of the data + \param boxsize Size of the box filter (can be subpixel). + \param off the offset between two data point + \param order the order of the filter 0 (smoothing), 1st derivtive and 2nd derivative. + \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }. + */ + static void _cimg_blur_box_apply(T *ptr, const float boxsize, const int N, const ulongT off, + const int order, const bool boundary_conditions, + const unsigned int nb_iter) { + // Smooth. + if (boxsize>1 && nb_iter) { + const int w2 = (int)(boxsize - 1)/2; + const unsigned int winsize = 2*w2 + 1U; + const double frac = (boxsize - winsize)/2.; + CImg win(winsize); + for (unsigned int iter = 0; iter=N) return boundary_conditions?ptr[(N - 1)*off]:T(); + return ptr[x*off]; + } + + // Apply box filter of order 0,1,2. + /** + \param boxsize Size of the box window (can be subpixel) + \param order the order of the filter 0,1 or 2. + \param axis Axis along which the filter is computed. Can be { 'x' | 'y' | 'z' | 'c' }. + \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }. + \param nb_iter Number of filter iterations. + **/ + CImg& boxfilter(const float boxsize, const int order, const char axis='x', + const bool boundary_conditions=true, + const unsigned int nb_iter=1) { + if (is_empty() || !boxsize || (boxsize<=1 && !order)) return *this; + const char naxis = cimg::lowercase(axis); + const float nboxsize = boxsize>=0?boxsize:-boxsize* + (naxis=='x'?_width:naxis=='y'?_height:naxis=='z'?_depth:_spectrum)/100; + switch (naxis) { + case 'x' : { + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=256 && _height*_depth*_spectrum>=16)) + cimg_forYZC(*this,y,z,c) + _cimg_blur_box_apply(data(0,y,z,c),nboxsize,_width,1U,order,boundary_conditions,nb_iter); + } break; + case 'y' : { + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=256 && _height*_depth*_spectrum>=16)) + cimg_forXZC(*this,x,z,c) + _cimg_blur_box_apply(data(x,0,z,c),nboxsize,_height,(ulongT)_width,order,boundary_conditions,nb_iter); + } break; + case 'z' : { + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=256 && _height*_depth*_spectrum>=16)) + cimg_forXYC(*this,x,y,c) + _cimg_blur_box_apply(data(x,y,0,c),nboxsize,_depth,(ulongT)_width*_height,order,boundary_conditions,nb_iter); + } break; + default : { + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=256 && _height*_depth*_spectrum>=16)) + cimg_forXYZ(*this,x,y,z) + _cimg_blur_box_apply(data(x,y,z,0),nboxsize,_spectrum,(ulongT)_width*_height*_depth, + order,boundary_conditions,nb_iter); + } + } + return *this; + } + + // Apply box filter of order 0,1 or 2 \newinstance. + CImg get_boxfilter(const float boxsize, const int order, const char axis='x', + const bool boundary_conditions=true, + const unsigned int nb_iter=1) const { + return CImg(*this,false).boxfilter(boxsize,order,axis,boundary_conditions,nb_iter); + } + + //! Blur image with a box filter. + /** + \param boxsize_x Size of the box window, along the X-axis (can be subpixel). + \param boxsize_y Size of the box window, along the Y-axis (can be subpixel). + \param boxsize_z Size of the box window, along the Z-axis (can be subpixel). + \param boundary_conditions Boundary conditions. Can be { false=dirichlet | true=neumann }. + \param nb_iter Number of filter iterations. + \note + - This is a recursive algorithm, not depending on the values of the box kernel size. + \see blur(). + **/ + CImg& blur_box(const float boxsize_x, const float boxsize_y, const float boxsize_z, + const bool boundary_conditions=true, + const unsigned int nb_iter=1) { + if (is_empty()) return *this; + if (_width>1) boxfilter(boxsize_x,0,'x',boundary_conditions,nb_iter); + if (_height>1) boxfilter(boxsize_y,0,'y',boundary_conditions,nb_iter); + if (_depth>1) boxfilter(boxsize_z,0,'z',boundary_conditions,nb_iter); + return *this; + } + + //! Blur image with a box filter \newinstance. + CImg get_blur_box(const float boxsize_x, const float boxsize_y, const float boxsize_z, + const bool boundary_conditions=true) const { + return CImg(*this,false).blur_box(boxsize_x,boxsize_y,boxsize_z,boundary_conditions); + } + + //! Blur image with a box filter. + /** + \param boxsize Size of the box window (can be subpixel). + \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }.a + \see deriche(), vanvliet(). + **/ + CImg& blur_box(const float boxsize, const bool boundary_conditions=true) { + const float nboxsize = boxsize>=0?boxsize:-boxsize*cimg::max(_width,_height,_depth)/100; + return blur_box(nboxsize,nboxsize,nboxsize,boundary_conditions); + } + + //! Blur image with a box filter \newinstance. + CImg get_blur_box(const float boxsize, const bool boundary_conditions=true) const { + return CImg(*this,false).blur_box(boxsize,boundary_conditions); + } + + //! Blur image, with the image guided filter. + /** + \param guide Image used to guide the smoothing process. + \param radius Spatial radius. If negative, it is expressed as a percentage of the largest image size. + \param regularization Regularization parameter. + If negative, it is expressed as a percentage of the guide value range. + \note This method implements the filtering algorithm described in: + He, Kaiming; Sun, Jian; Tang, Xiaoou, "Guided Image Filtering," Pattern Analysis and Machine Intelligence, + IEEE Transactions on , vol.35, no.6, pp.1397,1409, June 2013 + **/ + template + CImg& blur_guided(const CImg& guide, const float radius, const float regularization) { + return get_blur_guided(guide,radius,regularization).move_to(*this); + } + + //! Blur image, with the image guided filter \newinstance. + template + CImg get_blur_guided(const CImg& guide, const float radius, const float regularization) const { + if (!is_sameXYZ(guide)) + throw CImgArgumentException(_cimg_instance + "blur_guided(): Invalid size for specified guide image (%u,%u,%u,%u,%p).", + cimg_instance, + guide._width,guide._height,guide._depth,guide._spectrum,guide._data); + if (is_empty() || !radius) return *this; + const int _radius = radius>=0?(int)radius:(int)(-radius*cimg::max(_width,_height,_depth)/100); + float _regularization = regularization; + if (regularization<0) { + T edge_min, edge_max = guide.max_min(edge_min); + if (edge_min==edge_max) return *this; + _regularization = -regularization*(edge_max - edge_min)/100; + } + _regularization = std::max(_regularization,0.01f); + const unsigned int psize = (unsigned int)(1 + 2*_radius); + CImg + mean_p = get_blur_box(psize,true), + mean_I = guide.get_blur_box(psize,true).resize(mean_p), + cov_Ip = get_mul(guide).blur_box(psize,true)-=mean_p.get_mul(mean_I), + var_I = guide.get_sqr().blur_box(psize,true)-=mean_I.get_sqr(), + &a = cov_Ip.div(var_I+=_regularization), + &b = mean_p-=a.get_mul(mean_I); + a.blur_box(psize,true); + b.blur_box(psize,true); + return a.mul(guide)+=b; + } + + //! Blur image using patch-based space. + /** + \param sigma_s Amount of blur along the XYZ-axes. + \param sigma_p Amount of blur along the value axis. + \param patch_size Size of the patchs. + \param lookup_size Size of the window to search similar patchs. + \param smoothness Smoothness for the patch comparison. + \param is_fast_approx Tells if a fast approximation of the gaussian function is used or not. + **/ + CImg& blur_patch(const float sigma_s, const float sigma_p, const unsigned int patch_size=3, + const unsigned int lookup_size=4, const float smoothness=0, const bool is_fast_approx=true) { + if (is_empty() || !patch_size || !lookup_size) return *this; + return get_blur_patch(sigma_s,sigma_p,patch_size,lookup_size,smoothness,is_fast_approx).move_to(*this); + } + + //! Blur image using patch-based space \newinstance. + CImg get_blur_patch(const float sigma_s, const float sigma_p, const unsigned int patch_size=3, + const unsigned int lookup_size=4, const float smoothness=0, + const bool is_fast_approx=true) const { + +#define _cimg_blur_patch3d_fast(N) \ + cimg_for##N##XYZ(res,x,y,z) { \ + T *pP = P._data; cimg_forC(res,c) { cimg_get##N##x##N##x##N(img,x,y,z,c,pP,T); pP+=N3; } \ + const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, \ + x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; \ + float sum_weights = 0; \ + cimg_for_in##N##XYZ(res,x0,y0,z0,x1,y1,z1,p,q,r) \ + if (cimg::abs((Tfloat)img(x,y,z,0) - (Tfloat)img(p,q,r,0))3?0.0f:1.0f; \ + sum_weights+=weight; \ + cimg_forC(res,c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); \ + } \ + if (sum_weights>0) cimg_forC(res,c) res(x,y,z,c)/=sum_weights; \ + else cimg_forC(res,c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); \ + } + +#define _cimg_blur_patch3d(N) \ + cimg_for##N##XYZ(res,x,y,z) { \ + T *pP = P._data; cimg_forC(res,c) { cimg_get##N##x##N##x##N(img,x,y,z,c,pP,T); pP+=N3; } \ + const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, \ + x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; \ + float sum_weights = 0, weight_max = 0; \ + cimg_for_in##N##XYZ(res,x0,y0,z0,x1,y1,z1,p,q,r) if (p!=x || q!=y || r!=z) { \ + T *pQ = Q._data; cimg_forC(res,c) { cimg_get##N##x##N##x##N(img,p,q,r,c,pQ,T); pQ+=N3; } \ + float distance2 = 0; \ + pQ = Q._data; cimg_for(P,pP,T) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } \ + distance2/=Pnorm; \ + const float dx = (float)p - x, dy = (float)q - y, dz = (float)r - z, \ + alldist = distance2 + (dx*dx + dy*dy + dz*dz)/sigma_s2, weight = (float)std::exp(-alldist); \ + if (weight>weight_max) weight_max = weight; \ + sum_weights+=weight; \ + cimg_forC(res,c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); \ + } \ + sum_weights+=weight_max; cimg_forC(res,c) res(x,y,z,c)+=weight_max*(*this)(x,y,z,c); \ + if (sum_weights>0) cimg_forC(res,c) res(x,y,z,c)/=sum_weights; \ + else cimg_forC(res,c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); \ + } + +#define _cimg_blur_patch2d_fast(N) \ + cimg_for##N##XY(res,x,y) { \ + T *pP = P._data; cimg_forC(res,c) { cimg_get##N##x##N(img,x,y,0,c,pP,T); pP+=N2; } \ + const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; \ + float sum_weights = 0; \ + cimg_for_in##N##XY(res,x0,y0,x1,y1,p,q) \ + if (cimg::abs((Tfloat)img(x,y,0,0) - (Tfloat)img(p,q,0,0))3?0.0f:1.0f; \ + sum_weights+=weight; \ + cimg_forC(res,c) res(x,y,c)+=weight*(*this)(p,q,c); \ + } \ + if (sum_weights>0) cimg_forC(res,c) res(x,y,c)/=sum_weights; \ + else cimg_forC(res,c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); \ + } + +#define _cimg_blur_patch2d(N) \ + cimg_for##N##XY(res,x,y) { \ + T *pP = P._data; cimg_forC(res,c) { cimg_get##N##x##N(img,x,y,0,c,pP,T); pP+=N2; } \ + const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; \ + float sum_weights = 0, weight_max = 0; \ + cimg_for_in##N##XY(res,x0,y0,x1,y1,p,q) if (p!=x || q!=y) { \ + T *pQ = Q._data; cimg_forC(res,c) { cimg_get##N##x##N(img,p,q,0,c,pQ,T); pQ+=N2; } \ + float distance2 = 0; \ + pQ = Q._data; cimg_for(P,pP,T) { const float dI = (float)*pP - (float)*(pQ++); distance2+=dI*dI; } \ + distance2/=Pnorm; \ + const float dx = (float)p - x, dy = (float)q - y, \ + alldist = distance2 + (dx*dx+dy*dy)/sigma_s2, weight = (float)std::exp(-alldist); \ + if (weight>weight_max) weight_max = weight; \ + sum_weights+=weight; \ + cimg_forC(res,c) res(x,y,c)+=weight*(*this)(p,q,c); \ + } \ + sum_weights+=weight_max; cimg_forC(res,c) res(x,y,c)+=weight_max*(*this)(x,y,c); \ + if (sum_weights>0) cimg_forC(res,c) res(x,y,c)/=sum_weights; \ + else cimg_forC(res,c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); \ + } + + if (is_empty() || !patch_size || !lookup_size) return +*this; + CImg res(_width,_height,_depth,_spectrum,0); + const CImg _img = smoothness>0?get_blur(smoothness):CImg(),&img = smoothness>0?_img:*this; + CImg P(patch_size*patch_size*_spectrum), Q(P); + const float + nsigma_s = sigma_s>=0?sigma_s:-sigma_s*cimg::max(_width,_height,_depth)/100, + sigma_s2 = nsigma_s*nsigma_s, sigma_p2 = sigma_p*sigma_p, sigma_p3 = 3*sigma_p, + Pnorm = P.size()*sigma_p2; + const int rsize2 = (int)lookup_size/2, rsize1 = (int)lookup_size - rsize2 - 1; + const unsigned int N2 = patch_size*patch_size, N3 = N2*patch_size; + cimg::unused(N2,N3); + if (_depth>1) switch (patch_size) { // 3d + case 2 : if (is_fast_approx) _cimg_blur_patch3d_fast(2) else _cimg_blur_patch3d(2) break; + case 3 : if (is_fast_approx) _cimg_blur_patch3d_fast(3) else _cimg_blur_patch3d(3) break; + default : { + const int psize2 = (int)patch_size/2, psize1 = (int)patch_size - psize2 - 1; + if (is_fast_approx) + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(res._width>=32 && res._height*res._depth>=4) + private(P,Q)) + cimg_forXYZ(res,x,y,z) { // Fast + P = img.get_crop(x - psize1,y - psize1,z - psize1,x + psize2,y + psize2,z + psize2,true); + const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, + x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; + float sum_weights = 0; + cimg_for_inXYZ(res,x0,y0,z0,x1,y1,z1,p,q,r) + if (cimg::abs((Tfloat)img(x,y,z,0) - (Tfloat)img(p,q,r,0))3?0.0f:1.0f; + sum_weights+=weight; + cimg_forC(res,c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); + } + if (sum_weights>0) cimg_forC(res,c) res(x,y,z,c)/=sum_weights; + else cimg_forC(res,c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); + } else + cimg_pragma_openmp(parallel for collapse(2) + if (res._width>=32 && res._height*res._depth>=4) firstprivate(P,Q)) + cimg_forXYZ(res,x,y,z) { // Exact + P = img.get_crop(x - psize1,y - psize1,z - psize1,x + psize2,y + psize2,z + psize2,true); + const int x0 = x - rsize1, y0 = y - rsize1, z0 = z - rsize1, + x1 = x + rsize2, y1 = y + rsize2, z1 = z + rsize2; + float sum_weights = 0, weight_max = 0; + cimg_for_inXYZ(res,x0,y0,z0,x1,y1,z1,p,q,r) if (p!=x || q!=y || r!=z) { + (Q = img.get_crop(p - psize1,q - psize1,r - psize1,p + psize2,q + psize2,r + psize2,true))-=P; + const float + dx = (float)x - p, dy = (float)y - q, dz = (float)z - r, + distance2 = (float)(Q.pow(2).sum()/Pnorm + (dx*dx + dy*dy + dz*dz)/sigma_s2), + weight = (float)std::exp(-distance2); + if (weight>weight_max) weight_max = weight; + sum_weights+=weight; + cimg_forC(res,c) res(x,y,z,c)+=weight*(*this)(p,q,r,c); + } + sum_weights+=weight_max; cimg_forC(res,c) res(x,y,z,c)+=weight_max*(*this)(x,y,z,c); + if (sum_weights>0) cimg_forC(res,c) res(x,y,z,c)/=sum_weights; + else cimg_forC(res,c) res(x,y,z,c) = (Tfloat)((*this)(x,y,z,c)); + } + } + } else switch (patch_size) { // 2d + case 2 : if (is_fast_approx) _cimg_blur_patch2d_fast(2) else _cimg_blur_patch2d(2) break; + case 3 : if (is_fast_approx) _cimg_blur_patch2d_fast(3) else _cimg_blur_patch2d(3) break; + case 4 : if (is_fast_approx) _cimg_blur_patch2d_fast(4) else _cimg_blur_patch2d(4) break; + case 5 : if (is_fast_approx) _cimg_blur_patch2d_fast(5) else _cimg_blur_patch2d(5) break; + case 6 : if (is_fast_approx) _cimg_blur_patch2d_fast(6) else _cimg_blur_patch2d(6) break; + case 7 : if (is_fast_approx) _cimg_blur_patch2d_fast(7) else _cimg_blur_patch2d(7) break; + case 8 : if (is_fast_approx) _cimg_blur_patch2d_fast(8) else _cimg_blur_patch2d(8) break; + case 9 : if (is_fast_approx) _cimg_blur_patch2d_fast(9) else _cimg_blur_patch2d(9) break; + default : { // Fast + const int psize2 = (int)patch_size/2, psize1 = (int)patch_size - psize2 - 1; + if (is_fast_approx) + cimg_pragma_openmp(parallel for cimg_openmp_if(res._width>=32 && res._height>=4) firstprivate(P,Q)) + cimg_forXY(res,x,y) { // 2d fast approximation. + P = img.get_crop(x - psize1,y - psize1,x + psize2,y + psize2,true); + const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; + float sum_weights = 0; + cimg_for_inXY(res,x0,y0,x1,y1,p,q) + if ((Tfloat)cimg::abs(img(x,y,0) - (Tfloat)img(p,q,0))3?0.0f:1.0f; + sum_weights+=weight; + cimg_forC(res,c) res(x,y,c)+=weight*(*this)(p,q,c); + } + if (sum_weights>0) cimg_forC(res,c) res(x,y,c)/=sum_weights; + else cimg_forC(res,c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); + } else + cimg_pragma_openmp(parallel for cimg_openmp_if(res._width>=32 && res._height>=4) firstprivate(P,Q)) + cimg_forXY(res,x,y) { // 2d exact algorithm. + P = img.get_crop(x - psize1,y - psize1,x + psize2,y + psize2,true); + const int x0 = x - rsize1, y0 = y - rsize1, x1 = x + rsize2, y1 = y + rsize2; + float sum_weights = 0, weight_max = 0; + cimg_for_inXY(res,x0,y0,x1,y1,p,q) if (p!=x || q!=y) { + (Q = img.get_crop(p - psize1,q - psize1,p + psize2,q + psize2,true))-=P; + const float + dx = (float)x - p, dy = (float)y - q, + distance2 = (float)(Q.pow(2).sum()/Pnorm + (dx*dx + dy*dy)/sigma_s2), + weight = (float)std::exp(-distance2); + if (weight>weight_max) weight_max = weight; + sum_weights+=weight; + cimg_forC(res,c) res(x,y,c)+=weight*(*this)(p,q,c); + } + sum_weights+=weight_max; cimg_forC(res,c) res(x,y,c)+=weight_max*(*this)(x,y,c); + if (sum_weights>0) cimg_forC(res,c) res(x,y,c)/=sum_weights; + else cimg_forC(res,c) res(x,y,0,c) = (Tfloat)((*this)(x,y,c)); + } + } + } + return res; + } + + //! Blur image with the median filter. + /** + \param n Size of the median filter. + \param threshold Threshold used to discard pixels too far from the current pixel value in the median computation. + **/ + CImg& blur_median(const unsigned int n, const float threshold=0) { + if (!n) return *this; + return get_blur_median(n,threshold).move_to(*this); + } + + //! Blur image with the median filter \newinstance. + CImg get_blur_median(const unsigned int n, const float threshold=0) const { + if (is_empty() || n<=1) return +*this; + CImg res(_width,_height,_depth,_spectrum); + T *ptrd = res._data; + cimg::unused(ptrd); + const int hr = (int)n/2, hl = n - hr - 1; + if (res._depth!=1) { // 3d + if (threshold>0) + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=16 && _height*_depth*_spectrum>=4)) + cimg_forXYZC(*this,x,y,z,c) { // With threshold. + const int + x0 = x - hl, y0 = y - hl, z0 = z - hl, x1 = x + hr, y1 = y + hr, z1 = z + hr, + nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, nz0 = z0<0?0:z0, + nx1 = x1>=width()?width() - 1:x1, ny1 = y1>=height()?height() - 1:y1, nz1 = z1>=depth()?depth() - 1:z1; + const Tfloat val0 = (Tfloat)(*this)(x,y,z,c); + CImg values(n*n*n); + unsigned int nb_values = 0; + T *ptrd = values.data(); + cimg_for_inXYZ(*this,nx0,ny0,nz0,nx1,ny1,nz1,p,q,r) + if (cimg::abs((*this)(p,q,r,c) - val0)<=threshold) { *(ptrd++) = (*this)(p,q,r,c); ++nb_values; } + res(x,y,z,c) = nb_values?values.get_shared_points(0,nb_values - 1).median():(*this)(x,y,z,c); + } + else + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width>=16 && _height*_depth*_spectrum>=4)) + cimg_forXYZC(*this,x,y,z,c) { // Without threshold. + const int + x0 = x - hl, y0 = y - hl, z0 = z - hl, x1 = x + hr, y1 = y + hr, z1 = z + hr, + nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, nz0 = z0<0?0:z0, + nx1 = x1>=width()?width() - 1:x1, ny1 = y1>=height()?height() - 1:y1, nz1 = z1>=depth()?depth() - 1:z1; + res(x,y,z,c) = get_crop(nx0,ny0,nz0,c,nx1,ny1,nz1,c).median(); + } + } else { + if (threshold>0) + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width>=16 && _height*_spectrum>=4)) + cimg_forXYC(*this,x,y,c) { // With threshold. + const int + x0 = x - hl, y0 = y - hl, x1 = x + hr, y1 = y + hr, + nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, + nx1 = x1>=width()?width() - 1:x1, ny1 = y1>=height()?height() - 1:y1; + const Tfloat val0 = (Tfloat)(*this)(x,y,c); + CImg values(n*n); + unsigned int nb_values = 0; + T *ptrd = values.data(); + cimg_for_inXY(*this,nx0,ny0,nx1,ny1,p,q) + if (cimg::abs((*this)(p,q,c) - val0)<=threshold) { *(ptrd++) = (*this)(p,q,c); ++nb_values; } + res(x,y,c) = nb_values?values.get_shared_points(0,nb_values - 1).median():(*this)(x,y,c); + } + else { + const int + w1 = width() - 1, h1 = height() - 1, + w2 = width() - 2, h2 = height() - 2, + w3 = width() - 3, h3 = height() - 3, + w4 = width() - 4, h4 = height() - 4; + switch (n) { // Without threshold. + case 3 : { + cimg_pragma_openmp(parallel for cimg_openmp_if(_spectrum>=2)) + cimg_forC(*this,c) { + CImg I(9); + cimg_for_in3x3(*this,1,1,w2,h2,x,y,0,c,I,T) + res(x,y,c) = cimg::median(I[0],I[1],I[2],I[3],I[4],I[5],I[6],I[7],I[8]); + cimg_for_borderXY(*this,x,y,1) + res(x,y,c) = get_crop(std::max(0,x - 1),std::max(0,y - 1),0,c, + std::min(w1,x + 1),std::min(h1,y + 1),0,c).median(); + } + } break; + case 5 : { + cimg_pragma_openmp(parallel for cimg_openmp_if(_spectrum>=2)) + cimg_forC(*this,c) { + CImg I(25); + cimg_for_in5x5(*this,2,2,w3,h3,x,y,0,c,I,T) + res(x,y,c) = cimg::median(I[0],I[1],I[2],I[3],I[4], + I[5],I[6],I[7],I[8],I[9], + I[10],I[11],I[12],I[13],I[14], + I[15],I[16],I[17],I[18],I[19], + I[20],I[21],I[22],I[23],I[24]); + cimg_for_borderXY(*this,x,y,2) + res(x,y,c) = get_crop(std::max(0,x - 2),std::max(0,y - 2),0,c, + std::min(w1,x + 2),std::min(h1,y + 2),0,c).median(); + } + } break; + case 7 : { + cimg_pragma_openmp(parallel for cimg_openmp_if(_spectrum>=2)) + cimg_forC(*this,c) { + CImg I(49); + cimg_for_in7x7(*this,3,3,w4,h4,x,y,0,c,I,T) + res(x,y,c) = cimg::median(I[0],I[1],I[2],I[3],I[4],I[5],I[6], + I[7],I[8],I[9],I[10],I[11],I[12],I[13], + I[14],I[15],I[16],I[17],I[18],I[19],I[20], + I[21],I[22],I[23],I[24],I[25],I[26],I[27], + I[28],I[29],I[30],I[31],I[32],I[33],I[34], + I[35],I[36],I[37],I[38],I[39],I[40],I[41], + I[42],I[43],I[44],I[45],I[46],I[47],I[48]); + cimg_for_borderXY(*this,x,y,3) + res(x,y,c) = get_crop(std::max(0,x - 3),std::max(0,y - 3),0,c, + std::min(w1,x + 3),std::min(h1,y + 3),0,c).median(); + } + } break; + default : { + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width>=16 && _height*_spectrum>=4)) + cimg_forXYC(*this,x,y,c) { + const int + x0 = x - hl, y0 = y - hl, x1 = x + hr, y1 = y + hr, + nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, + nx1 = x1>=width()?width() - 1:x1, ny1 = y1>=height()?height() - 1:y1; + res(x,y,c) = get_crop(nx0,ny0,0,c,nx1,ny1,0,c).median(); + } + } + } + } + } + return res; + } + + //! Sharpen image. + /** + \param amplitude Sharpening amplitude + \param sharpen_type Select sharpening method. Can be { false=inverse diffusion | true=shock filters }. + \param edge Edge threshold (shock filters only). + \param alpha Gradient smoothness (shock filters only). + \param sigma Tensor smoothness (shock filters only). + **/ + CImg& sharpen(const float amplitude, const bool sharpen_type=false, const float edge=1, + const float alpha=0, const float sigma=0) { + if (is_empty()) return *this; + T val_min, val_max = max_min(val_min); + const float nedge = edge/2; + CImg velocity(_width,_height,_depth,_spectrum), _veloc_max(_spectrum); + + if (_depth>1) { // 3d + if (sharpen_type) { // Shock filters. + CImg G = (alpha>0?get_blur(alpha).get_structure_tensors():get_structure_tensors()); + if (sigma>0) G.blur(sigma); + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width>=32 && _height*_depth>=16)) + cimg_forYZ(G,y,z) { + Tfloat *ptrG0 = G.data(0,y,z,0), *ptrG1 = G.data(0,y,z,1), + *ptrG2 = G.data(0,y,z,2), *ptrG3 = G.data(0,y,z,3); + CImg val, vec; + cimg_forX(G,x) { + G.get_tensor_at(x,y,z).symmetric_eigen(val,vec); + if (val[0]<0) val[0] = 0; + if (val[1]<0) val[1] = 0; + if (val[2]<0) val[2] = 0; + *(ptrG0++) = vec(0,0); + *(ptrG1++) = vec(0,1); + *(ptrG2++) = vec(0,2); + *(ptrG3++) = 1 - (Tfloat)std::pow(1 + val[0] + val[1] + val[2],-(Tfloat)nedge); + } + } + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height*_depth>=512 && _spectrum>=2)) + cimg_forC(*this,c) { + Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; + CImg_3x3x3(I,Tfloat); + cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { + const Tfloat + u = G(x,y,z,0), + v = G(x,y,z,1), + w = G(x,y,z,2), + amp = G(x,y,z,3), + ixx = Incc + Ipcc - 2*Iccc, + ixy = (Innc + Ippc - Inpc - Ipnc)/4, + ixz = (Incn + Ipcp - Incp - Ipcn)/4, + iyy = Icnc + Icpc - 2*Iccc, + iyz = (Icnn + Icpp - Icnp - Icpn)/4, + izz = Iccn + Iccp - 2*Iccc, + ixf = Incc - Iccc, + ixb = Iccc - Ipcc, + iyf = Icnc - Iccc, + iyb = Iccc - Icpc, + izf = Iccn - Iccc, + izb = Iccc - Iccp, + itt = u*u*ixx + v*v*iyy + w*w*izz + 2*u*v*ixy + 2*u*w*ixz + 2*v*w*iyz, + it = u*cimg::minmod(ixf,ixb) + v*cimg::minmod(iyf,iyb) + w*cimg::minmod(izf,izb), + veloc = -amp*cimg::sign(itt)*cimg::abs(it); + *(ptrd++) = veloc; + if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; + } + _veloc_max[c] = veloc_max; + } + } else // Inverse diffusion. + cimg_forC(*this,c) { + Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; + CImg_3x3x3(I,Tfloat); + cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { + const Tfloat veloc = -Ipcc - Incc - Icpc - Icnc - Iccp - Iccn + 6*Iccc; + *(ptrd++) = veloc; + if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; + } + _veloc_max[c] = veloc_max; + } + } else { // 2d. + if (sharpen_type) { // Shock filters. + CImg G = (alpha>0?get_blur(alpha).get_structure_tensors():get_structure_tensors()); + if (sigma>0) G.blur(sigma); + cimg_pragma_openmp(parallel for cimg_openmp_if(_width>=32 && _height>=16)) + cimg_forY(G,y) { + CImg val, vec; + Tfloat *ptrG0 = G.data(0,y,0,0), *ptrG1 = G.data(0,y,0,1), *ptrG2 = G.data(0,y,0,2); + cimg_forX(G,x) { + G.get_tensor_at(x,y).symmetric_eigen(val,vec); + if (val[0]<0) val[0] = 0; + if (val[1]<0) val[1] = 0; + *(ptrG0++) = vec(0,0); + *(ptrG1++) = vec(0,1); + *(ptrG2++) = 1 - (Tfloat)std::pow(1 + val[0] + val[1],-(Tfloat)nedge); + } + } + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height>=512 && _spectrum>=2)) + cimg_forC(*this,c) { + Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,0,c,I,Tfloat) { + const Tfloat + u = G(x,y,0), + v = G(x,y,1), + amp = G(x,y,2), + ixx = Inc + Ipc - 2*Icc, + ixy = (Inn + Ipp - Inp - Ipn)/4, + iyy = Icn + Icp - 2*Icc, + ixf = Inc - Icc, + ixb = Icc - Ipc, + iyf = Icn - Icc, + iyb = Icc - Icp, + itt = u*u*ixx + v*v*iyy + 2*u*v*ixy, + it = u*cimg::minmod(ixf,ixb) + v*cimg::minmod(iyf,iyb), + veloc = -amp*cimg::sign(itt)*cimg::abs(it); + *(ptrd++) = veloc; + if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; + } + _veloc_max[c] = veloc_max; + } + } else // Inverse diffusion. + cimg_forC(*this,c) { + Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,0,c,I,Tfloat) { + const Tfloat veloc = -Ipc - Inc - Icp - Icn + 4*Icc; + *(ptrd++) = veloc; + if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; + } + _veloc_max[c] = veloc_max; + } + } + const Tfloat veloc_max = _veloc_max.max(); + if (veloc_max<=0) return *this; + return ((velocity*=amplitude/veloc_max)+=*this).cut(val_min,val_max).move_to(*this); + } + + //! Sharpen image \newinstance. + CImg get_sharpen(const float amplitude, const bool sharpen_type=false, const float edge=1, + const float alpha=0, const float sigma=0) const { + return (+*this).sharpen(amplitude,sharpen_type,edge,alpha,sigma); + } + + //! Return image gradient. + /** + \param axes Axes considered for the gradient computation, as a C-string (e.g "xy"). + \param scheme = Numerical scheme used for the gradient computation: + - -1 = Backward finite differences + - 0 = Centered finite differences + - 1 = Forward finite differences + - 2 = Using Sobel kernels + - 3 = Using rotation invariant kernels + - 4 = Using Deriche recusrsive filter. + - 5 = Using Van Vliet recusrsive filter. + **/ + CImgList get_gradient(const char *const axes=0, const int scheme=3) const { + CImgList grad(2,_width,_height,_depth,_spectrum); + bool is_3d = false; + if (axes) { + for (unsigned int a = 0; axes[a]; ++a) { + const char axis = cimg::lowercase(axes[a]); + switch (axis) { + case 'x' : case 'y' : break; + case 'z' : is_3d = true; break; + default : + throw CImgArgumentException(_cimg_instance + "get_gradient(): Invalid specified axis '%c'.", + cimg_instance, + axis); + } + } + } else is_3d = (_depth>1); + if (is_3d) { + CImg(_width,_height,_depth,_spectrum).move_to(grad); + switch (scheme) { // 3d. + case -1 : { // Backward finite differences. + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height*_depth>=1048576 && _spectrum>=2)) + cimg_forC(*this,c) { + const ulongT off = (ulongT)c*_width*_height*_depth; + Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off, *ptrd2 = grad[2]._data + off; + CImg_3x3x3(I,Tfloat); + cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { + *(ptrd0++) = Iccc - Ipcc; + *(ptrd1++) = Iccc - Icpc; + *(ptrd2++) = Iccc - Iccp; + } + } + } break; + case 1 : { // Forward finite differences. + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height*_depth>=1048576 && _spectrum>=2)) + cimg_forC(*this,c) { + const ulongT off = (ulongT)c*_width*_height*_depth; + Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off, *ptrd2 = grad[2]._data + off; + CImg_2x2x2(I,Tfloat); + cimg_for2x2x2(*this,x,y,z,c,I,Tfloat) { + *(ptrd0++) = Incc - Iccc; + *(ptrd1++) = Icnc - Iccc; + *(ptrd2++) = Iccn - Iccc; + } + } + } break; + case 4 : { // Deriche filter with low standard variation. + grad[0] = get_deriche(0,1,'x'); + grad[1] = get_deriche(0,1,'y'); + grad[2] = get_deriche(0,1,'z'); + } break; + case 5 : { // Van Vliet filter with low standard variation. + grad[0] = get_vanvliet(0,1,'x'); + grad[1] = get_vanvliet(0,1,'y'); + grad[2] = get_vanvliet(0,1,'z'); + } break; + default : { // Central finite differences. + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height*_depth>=1048576 && _spectrum>=2)) + cimg_forC(*this,c) { + const ulongT off = (ulongT)c*_width*_height*_depth; + Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off, *ptrd2 = grad[2]._data + off; + CImg_3x3x3(I,Tfloat); + cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { + *(ptrd0++) = (Incc - Ipcc)/2; + *(ptrd1++) = (Icnc - Icpc)/2; + *(ptrd2++) = (Iccn - Iccp)/2; + } + } + } + } + } else switch (scheme) { // 2d. + case -1 : { // Backward finite differences. + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width*_height>=1048576 && _depth*_spectrum>=2)) + cimg_forZC(*this,z,c) { + const ulongT off = (ulongT)c*_width*_height*_depth + z*_width*_height; + Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,z,c,I,Tfloat) { + *(ptrd0++) = Icc - Ipc; + *(ptrd1++) = Icc - Icp; + } + } + } break; + case 1 : { // Forward finite differences. + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width*_height>=1048576 && _depth*_spectrum>=2)) + cimg_forZC(*this,z,c) { + const ulongT off = (ulongT)c*_width*_height*_depth + z*_width*_height; + Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; + CImg_2x2(I,Tfloat); + cimg_for2x2(*this,x,y,z,c,I,Tfloat) { + *(ptrd0++) = Inc - Icc; + *(ptrd1++) = Icn - Icc; + } + } + } break; + case 2 : { // Sobel scheme. + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width*_height>=1048576 && _depth*_spectrum>=2)) + cimg_forZC(*this,z,c) { + const ulongT off = (ulongT)c*_width*_height*_depth + z*_width*_height; + Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,z,c,I,Tfloat) { + *(ptrd0++) = -Ipp - 2*Ipc - Ipn + Inp + 2*Inc + Inn; + *(ptrd1++) = -Ipp - 2*Icp - Inp + Ipn + 2*Icn + Inn; + } + } + } break; + case 3 : { // Rotation invariant kernel. + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width*_height>=1048576 && _depth*_spectrum>=2)) + cimg_forZC(*this,z,c) { + const ulongT off = (ulongT)c*_width*_height*_depth + z*_width*_height; + Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; + CImg_3x3(I,Tfloat); + const Tfloat a = (Tfloat)(0.25f*(2 - std::sqrt(2.0f))), b = (Tfloat)(0.5f*(std::sqrt(2.0f) - 1)); + cimg_for3x3(*this,x,y,z,c,I,Tfloat) { + *(ptrd0++) = -a*Ipp - b*Ipc - a*Ipn + a*Inp + b*Inc + a*Inn; + *(ptrd1++) = -a*Ipp - b*Icp - a*Inp + a*Ipn + b*Icn + a*Inn; + } + } + } break; + case 4 : { // Van Vliet filter with low standard variation + grad[0] = get_deriche(0,1,'x'); + grad[1] = get_deriche(0,1,'y'); + } break; + case 5 : { // Deriche filter with low standard variation + grad[0] = get_vanvliet(0,1,'x'); + grad[1] = get_vanvliet(0,1,'y'); + } break; + default : { // Central finite differences + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width*_height>=1048576 && _depth*_spectrum>=2)) + cimg_forZC(*this,z,c) { + const ulongT off = (ulongT)c*_width*_height*_depth + z*_width*_height; + Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,z,c,I,Tfloat) { + *(ptrd0++) = (Inc - Ipc)/2; + *(ptrd1++) = (Icn - Icp)/2; + } + } + } + } + if (!axes) return grad; + CImgList res; + for (unsigned int l = 0; axes[l]; ++l) { + const char axis = cimg::lowercase(axes[l]); + switch (axis) { + case 'x' : res.insert(grad[0]); break; + case 'y' : res.insert(grad[1]); break; + case 'z' : res.insert(grad[2]); break; + } + } + grad.assign(); + return res; + } + + //! Return image hessian. + /** + \param axes Axes considered for the hessian computation, as a C-string (e.g "xy"). + **/ + CImgList get_hessian(const char *const axes=0) const { + CImgList res; + const char *naxes = axes, *const def_axes2d = "xxxyyy", *const def_axes3d = "xxxyxzyyyzzz"; + if (!axes) naxes = _depth>1?def_axes3d:def_axes2d; + const unsigned int lmax = (unsigned int)std::strlen(naxes); + if (lmax%2) + throw CImgArgumentException(_cimg_instance + "get_hessian(): Invalid specified axes '%s'.", + cimg_instance, + naxes); + + res.assign(lmax/2,_width,_height,_depth,_spectrum); + if (!cimg::strcasecmp(naxes,def_axes3d)) { // 3d + + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height*_depth>=1048576 && _spectrum>=2)) + cimg_forC(*this,c) { + const ulongT off = (ulongT)c*_width*_height*_depth; + Tfloat + *ptrd0 = res[0]._data + off, *ptrd1 = res[1]._data + off, *ptrd2 = res[2]._data + off, + *ptrd3 = res[3]._data + off, *ptrd4 = res[4]._data + off, *ptrd5 = res[5]._data + off; + CImg_3x3x3(I,Tfloat); + cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { + *(ptrd0++) = Ipcc + Incc - 2*Iccc; // Ixx + *(ptrd1++) = (Ippc + Innc - Ipnc - Inpc)/4; // Ixy + *(ptrd2++) = (Ipcp + Incn - Ipcn - Incp)/4; // Ixz + *(ptrd3++) = Icpc + Icnc - 2*Iccc; // Iyy + *(ptrd4++) = (Icpp + Icnn - Icpn - Icnp)/4; // Iyz + *(ptrd5++) = Iccn + Iccp - 2*Iccc; // Izz + } + } + } else if (!cimg::strcasecmp(naxes,def_axes2d)) { // 2d + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width*_height>=1048576 && _depth*_spectrum>=2)) + cimg_forZC(*this,z,c) { + const ulongT off = (ulongT)c*_width*_height*_depth + z*_width*_height; + Tfloat *ptrd0 = res[0]._data + off, *ptrd1 = res[1]._data + off, *ptrd2 = res[2]._data + off; + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,z,c,I,Tfloat) { + *(ptrd0++) = Ipc + Inc - 2*Icc; // Ixx + *(ptrd1++) = (Ipp + Inn - Ipn - Inp)/4; // Ixy + *(ptrd2++) = Icp + Icn - 2*Icc; // Iyy + } + } + } else for (unsigned int l = 0; laxis2) cimg::swap(axis1,axis2); + bool valid_axis = false; + if (axis1=='x' && axis2=='x') { // Ixx + valid_axis = true; + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width*_height>=1048576 && _depth*_spectrum>=2)) + cimg_forZC(*this,z,c) { + Tfloat *ptrd = res[l2].data(0,0,z,c); + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,z,c,I,Tfloat) *(ptrd++) = Ipc + Inc - 2*Icc; + } + } + else if (axis1=='x' && axis2=='y') { // Ixy + valid_axis = true; + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width*_height>=1048576 && _depth*_spectrum>=2)) + cimg_forZC(*this,z,c) { + Tfloat *ptrd = res[l2].data(0,0,z,c); + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,z,c,I,Tfloat) *(ptrd++) = (Ipp + Inn - Ipn - Inp)/4; + } + } + else if (axis1=='x' && axis2=='z') { // Ixz + valid_axis = true; + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height*_depth>=1048576 && _spectrum>=2)) + cimg_forC(*this,c) { + Tfloat *ptrd = res[l2].data(0,0,0,c); + CImg_3x3x3(I,Tfloat); + cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) *(ptrd++) = (Ipcp + Incn - Ipcn - Incp)/4; + } + } + else if (axis1=='y' && axis2=='y') { // Iyy + valid_axis = true; + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width*_height>=1048576 && _depth*_spectrum>=2)) + cimg_forZC(*this,z,c) { + Tfloat *ptrd = res[l2].data(0,0,z,c); + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,z,c,I,Tfloat) *(ptrd++) = Icp + Icn - 2*Icc; + } + } + else if (axis1=='y' && axis2=='z') { // Iyz + valid_axis = true; + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height*_depth>=1048576 && _spectrum>=2)) + cimg_forC(*this,c) { + Tfloat *ptrd = res[l2].data(0,0,0,c); + CImg_3x3x3(I,Tfloat); + cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) *(ptrd++) = (Icpp + Icnn - Icpn - Icnp)/4; + } + } + else if (axis1=='z' && axis2=='z') { // Izz + valid_axis = true; + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height*_depth>=1048576 && _spectrum>=2)) + cimg_forC(*this,c) { + Tfloat *ptrd = res[l2].data(0,0,0,c); + CImg_3x3x3(I,Tfloat); + cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) *(ptrd++) = Iccn + Iccp - 2*Iccc; + } + } + else if (!valid_axis) + throw CImgArgumentException(_cimg_instance + "get_hessian(): Invalid specified axes '%s'.", + cimg_instance, + naxes); + } + return res; + } + + //! Compute image laplacian. + CImg& laplacian() { + return get_laplacian().move_to(*this); + } + + //! Compute image laplacian \newinstance. + CImg get_laplacian() const { + if (is_empty()) return CImg(); + CImg res(_width,_height,_depth,_spectrum); + if (_depth>1) { // 3d + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height*_depth>=1048576 && _spectrum>=2)) + cimg_forC(*this,c) { + Tfloat *ptrd = res.data(0,0,0,c); + CImg_3x3x3(I,Tfloat); + cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) *(ptrd++) = Incc + Ipcc + Icnc + Icpc + Iccn + Iccp - 6*Iccc; + } + } else if (_height>1) { // 2d + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height>=1048576 && _depth*_spectrum>=2)) + cimg_forC(*this,c) { + Tfloat *ptrd = res.data(0,0,0,c); + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,0,c,I,Tfloat) *(ptrd++) = Inc + Ipc + Icn + Icp - 4*Icc; + } + } else { // 1d + cimg_pragma_openmp(parallel for cimg_openmp_if(_width>=1048576 && _height*_depth*_spectrum>=2)) + cimg_forC(*this,c) { + Tfloat *ptrd = res.data(0,0,0,c); + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,0,c,I,Tfloat) *(ptrd++) = Inc + Ipc - 2*Icc; + } + } + return res; + } + + //! Compute the structure tensor field of an image. + /** + \param is_fwbw_scheme scheme. Can be { false=centered | true=forward-backward } + **/ + CImg& structure_tensors(const bool is_fwbw_scheme=false) { + return get_structure_tensors(is_fwbw_scheme).move_to(*this); + } + + //! Compute the structure tensor field of an image \newinstance. + CImg get_structure_tensors(const bool is_fwbw_scheme=false) const { + if (is_empty()) return *this; + CImg res; + if (_depth>1) { // 3d + res.assign(_width,_height,_depth,6,0); + if (!is_fwbw_scheme) { // Classical central finite differences + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height*_depth>=1048576 && _spectrum>=2)) + cimg_forC(*this,c) { + Tfloat + *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2), + *ptrd3 = res.data(0,0,0,3), *ptrd4 = res.data(0,0,0,4), *ptrd5 = res.data(0,0,0,5); + CImg_3x3x3(I,Tfloat); + cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { + const Tfloat + ix = (Incc - Ipcc)/2, + iy = (Icnc - Icpc)/2, + iz = (Iccn - Iccp)/2; + *(ptrd0++)+=ix*ix; + *(ptrd1++)+=ix*iy; + *(ptrd2++)+=ix*iz; + *(ptrd3++)+=iy*iy; + *(ptrd4++)+=iy*iz; + *(ptrd5++)+=iz*iz; + } + } + } else { // Forward/backward finite differences. + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height*_depth>=1048576 && _spectrum>=2)) + cimg_forC(*this,c) { + Tfloat + *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2), + *ptrd3 = res.data(0,0,0,3), *ptrd4 = res.data(0,0,0,4), *ptrd5 = res.data(0,0,0,5); + CImg_3x3x3(I,Tfloat); + cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { + const Tfloat + ixf = Incc - Iccc, ixb = Iccc - Ipcc, + iyf = Icnc - Iccc, iyb = Iccc - Icpc, + izf = Iccn - Iccc, izb = Iccc - Iccp; + *(ptrd0++)+=(ixf*ixf + ixb*ixb)/2; + *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; + *(ptrd2++)+=(ixf*izf + ixf*izb + ixb*izf + ixb*izb)/4; + *(ptrd3++)+=(iyf*iyf + iyb*iyb)/2; + *(ptrd4++)+=(iyf*izf + iyf*izb + iyb*izf + iyb*izb)/4; + *(ptrd5++)+=(izf*izf + izb*izb)/2; + } + } + } + } else { // 2d + res.assign(_width,_height,_depth,3,0); + if (!is_fwbw_scheme) { // Classical central finite differences + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height>=1048576 && _depth*_spectrum>=2)) + cimg_forC(*this,c) { + Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,0,c,I,Tfloat) { + const Tfloat + ix = (Inc - Ipc)/2, + iy = (Icn - Icp)/2; + *(ptrd0++)+=ix*ix; + *(ptrd1++)+=ix*iy; + *(ptrd2++)+=iy*iy; + } + } + } else { // Forward/backward finite differences (version 2). + cimg_pragma_openmp(parallel for cimg_openmp_if(_width*_height>=1048576 && _depth*_spectrum>=2)) + cimg_forC(*this,c) { + Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); + CImg_3x3(I,Tfloat); + cimg_for3x3(*this,x,y,0,c,I,Tfloat) { + const Tfloat + ixf = Inc - Icc, ixb = Icc - Ipc, + iyf = Icn - Icc, iyb = Icc - Icp; + *(ptrd0++)+=(ixf*ixf + ixb*ixb)/2; + *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; + *(ptrd2++)+=(iyf*iyf + iyb*iyb)/2; + } + } + } + } + return res; + } + + //! Compute field of diffusion tensors for edge-preserving smoothing. + /** + \param sharpness Sharpness + \param anisotropy Anisotropy + \param alpha Standard deviation of the gradient blur. + \param sigma Standard deviation of the structure tensor blur. + \param is_sqrt Tells if the square root of the tensor field is computed instead. + **/ + CImg& diffusion_tensors(const float sharpness=0.7f, const float anisotropy=0.6f, + const float alpha=0.6f, const float sigma=1.1f, const bool is_sqrt=false) { + CImg res; + const float + nsharpness = std::max(sharpness,1e-5f), + power1 = (is_sqrt?0.5f:1)*nsharpness, + power2 = power1/(1e-7f + 1 - anisotropy); + blur(alpha).normalize(0,(T)255); + + if (_depth>1) { // 3d + get_structure_tensors().move_to(res).blur(sigma); + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width>=256 && _height*_depth>=256)) + cimg_forYZ(*this,y,z) { + Tfloat + *ptrd0 = res.data(0,y,z,0), *ptrd1 = res.data(0,y,z,1), *ptrd2 = res.data(0,y,z,2), + *ptrd3 = res.data(0,y,z,3), *ptrd4 = res.data(0,y,z,4), *ptrd5 = res.data(0,y,z,5); + CImg val(3), vec(3,3); + cimg_forX(*this,x) { + res.get_tensor_at(x,y,z).symmetric_eigen(val,vec); + const float + _l1 = val[2], _l2 = val[1], _l3 = val[0], + l1 = _l1>0?_l1:0, l2 = _l2>0?_l2:0, l3 = _l3>0?_l3:0, + ux = vec(0,0), uy = vec(0,1), uz = vec(0,2), + vx = vec(1,0), vy = vec(1,1), vz = vec(1,2), + wx = vec(2,0), wy = vec(2,1), wz = vec(2,2), + n1 = (float)std::pow(1 + l1 + l2 + l3,-power1), + n2 = (float)std::pow(1 + l1 + l2 + l3,-power2); + *(ptrd0++) = n1*(ux*ux + vx*vx) + n2*wx*wx; + *(ptrd1++) = n1*(ux*uy + vx*vy) + n2*wx*wy; + *(ptrd2++) = n1*(ux*uz + vx*vz) + n2*wx*wz; + *(ptrd3++) = n1*(uy*uy + vy*vy) + n2*wy*wy; + *(ptrd4++) = n1*(uy*uz + vy*vz) + n2*wy*wz; + *(ptrd5++) = n1*(uz*uz + vz*vz) + n2*wz*wz; + } + } + } else { // for 2d images + get_structure_tensors().move_to(res).blur(sigma); + cimg_pragma_openmp(parallel for cimg_openmp_if(_width>=256 && _height>=256)) + cimg_forY(*this,y) { + Tfloat *ptrd0 = res.data(0,y,0,0), *ptrd1 = res.data(0,y,0,1), *ptrd2 = res.data(0,y,0,2); + CImg val(2), vec(2,2); + cimg_forX(*this,x) { + res.get_tensor_at(x,y).symmetric_eigen(val,vec); + const float + _l1 = val[1], _l2 = val[0], + l1 = _l1>0?_l1:0, l2 = _l2>0?_l2:0, + ux = vec(1,0), uy = vec(1,1), + vx = vec(0,0), vy = vec(0,1), + n1 = (float)std::pow(1 + l1 + l2,-power1), + n2 = (float)std::pow(1 + l1 + l2,-power2); + *(ptrd0++) = n1*ux*ux + n2*vx*vx; + *(ptrd1++) = n1*ux*uy + n2*vx*vy; + *(ptrd2++) = n1*uy*uy + n2*vy*vy; + } + } + } + return res.move_to(*this); + } + + //! Compute field of diffusion tensors for edge-preserving smoothing \newinstance. + CImg get_diffusion_tensors(const float sharpness=0.7f, const float anisotropy=0.6f, + const float alpha=0.6f, const float sigma=1.1f, const bool is_sqrt=false) const { + return CImg(*this,false).diffusion_tensors(sharpness,anisotropy,alpha,sigma,is_sqrt); + } + + //! Estimate displacement field between two images. + /** + \param source Reference image. + \param smoothness Smoothness of estimated displacement field. + \param precision Precision required for algorithm convergence. + \param nb_scales Number of scales used to estimate the displacement field. + \param iteration_max Maximum number of iterations allowed for one scale. + \param is_backward If false, match I2(X + U(X)) = I1(X), else match I2(X) = I1(X - U(X)). + \param guide Image used as the initial correspondence estimate for the algorithm. + 'guide' may have a last channel with boolean values (0=false | other=true) that + tells for each pixel if its correspondence vector is constrained to its initial value (constraint mask). + **/ + CImg& displacement(const CImg& source, const float smoothness=0.1f, const float precision=5.0f, + const unsigned int nb_scales=0, const unsigned int iteration_max=10000, + const bool is_backward=false, + const CImg& guide=CImg::const_empty()) { + return get_displacement(source,smoothness,precision,nb_scales,iteration_max,is_backward,guide). + move_to(*this); + } + + //! Estimate displacement field between two images \newinstance. + CImg get_displacement(const CImg& source, + const float smoothness=0.1f, const float precision=5.0f, + const unsigned int nb_scales=0, const unsigned int iteration_max=10000, + const bool is_backward=false, + const CImg& guide=CImg::const_empty()) const { + if (is_empty() || !source) return +*this; + if (!is_sameXYZC(source)) + throw CImgArgumentException(_cimg_instance + "displacement(): Instance and source image (%u,%u,%u,%u,%p) have " + "different dimensions.", + cimg_instance, + source._width,source._height,source._depth,source._spectrum,source._data); + if (precision<0) + throw CImgArgumentException(_cimg_instance + "displacement(): Invalid specified precision %g " + "(should be >=0)", + cimg_instance, + precision); + + const bool is_3d = source._depth>1; + const unsigned int constraint = is_3d?3:2; + + if (guide && + (guide._width!=_width || guide._height!=_height || guide._depth!=_depth || guide._spectrum0?nb_scales: + (unsigned int)cimg::round(std::log(mins/8.0)/std::log(1.5),1,1); + + const float _precision = (float)std::pow(10.0,-(double)precision); + float sm, sM = source.max_min(sm), tm, tM = max_min(tm); + const float sdelta = sm==sM?1:(sM - sm), tdelta = tm==tM?1:(tM - tm); + + CImg U, V; + floatT bound = 0; + for (int scale = (int)_nb_scales - 1; scale>=0; --scale) { + const float factor = (float)std::pow(1.5,(double)scale); + const unsigned int + _sw = (unsigned int)(_width/factor), sw = _sw?_sw:1, + _sh = (unsigned int)(_height/factor), sh = _sh?_sh:1, + _sd = (unsigned int)(_depth/factor), sd = _sd?_sd:1; + if (sw<5 && sh<5 && (!is_3d || sd<5)) continue; // skip too small scales. + const CImg + I1 = (source.get_resize(sw,sh,sd,-100,2)-=sm)/=sdelta, + I2 = (get_resize(I1,2)-=tm)/=tdelta; + if (guide._spectrum>constraint) guide.get_resize(I2._width,I2._height,I2._depth,-100,1).move_to(V); + if (U) (U*=1.5f).resize(I2._width,I2._height,I2._depth,-100,3); + else { + if (guide) + guide.get_shared_channels(0,is_3d?2:1).get_resize(I2._width,I2._height,I2._depth,-100,2).move_to(U); + else U.assign(I2._width,I2._height,I2._depth,is_3d?3:2,0); + } + + float dt = 2, energy = cimg::type::max(); + const CImgList dI = is_backward?I1.get_gradient():I2.get_gradient(); + cimg_abort_init; + + for (unsigned int iteration = 0; iteration=0) // Isotropic regularization. + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_height*_depth>=8 && _width>=16) + reduction(+:_energy)) + cimg_forYZ(U,y,z) { + const int + _p1y = y?y - 1:0, _n1y = yx) U(x,y,z,0) = (float)x; + if (U(x,y,z,1)>y) U(x,y,z,1) = (float)y; + if (U(x,y,z,2)>z) U(x,y,z,2) = (float)z; + bound = (float)x - _width; if (U(x,y,z,0)<=bound) U(x,y,z,0) = bound; + bound = (float)y - _height; if (U(x,y,z,1)<=bound) U(x,y,z,1) = bound; + bound = (float)z - _depth; if (U(x,y,z,2)<=bound) U(x,y,z,2) = bound; + } else { + if (U(x,y,z,0)<-x) U(x,y,z,0) = -(float)x; + if (U(x,y,z,1)<-y) U(x,y,z,1) = -(float)y; + if (U(x,y,z,2)<-z) U(x,y,z,2) = -(float)z; + bound = (float)_width - x; if (U(x,y,z,0)>=bound) U(x,y,z,0) = bound; + bound = (float)_height - y; if (U(x,y,z,1)>=bound) U(x,y,z,1) = bound; + bound = (float)_depth - z; if (U(x,y,z,2)>=bound) U(x,y,z,2) = bound; + } + _energy+=delta_I*delta_I + smoothness*_energy_regul; + } + if (V) cimg_forXYZ(V,x,y,z) if (V(x,y,z,3)) { // Apply constraints. + U(x,y,z,0) = V(x,y,z,0)/factor; + U(x,y,z,1) = V(x,y,z,1)/factor; + U(x,y,z,2) = V(x,y,z,2)/factor; + } + } else { // Anisotropic regularization. + const float nsmoothness = -smoothness; + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_height*_depth>=8 && _width>=16) + reduction(+:_energy)) + cimg_forYZ(U,y,z) { + const int + _p1y = y?y - 1:0, _n1y = yx) U(x,y,z,0) = (float)x; + if (U(x,y,z,1)>y) U(x,y,z,1) = (float)y; + if (U(x,y,z,2)>z) U(x,y,z,2) = (float)z; + bound = (float)x - _width; if (U(x,y,z,0)<=bound) U(x,y,z,0) = bound; + bound = (float)y - _height; if (U(x,y,z,1)<=bound) U(x,y,z,1) = bound; + bound = (float)z - _depth; if (U(x,y,z,2)<=bound) U(x,y,z,2) = bound; + } else { + if (U(x,y,z,0)<-x) U(x,y,z,0) = -(float)x; + if (U(x,y,z,1)<-y) U(x,y,z,1) = -(float)y; + if (U(x,y,z,2)<-z) U(x,y,z,2) = -(float)z; + bound = (float)_width - x; if (U(x,y,z,0)>=bound) U(x,y,z,0) = bound; + bound = (float)_height - y; if (U(x,y,z,1)>=bound) U(x,y,z,1) = bound; + bound = (float)_depth - z; if (U(x,y,z,2)>=bound) U(x,y,z,2) = bound; + } + _energy+=delta_I*delta_I + nsmoothness*_energy_regul; + } + if (V) cimg_forXYZ(V,x,y,z) if (V(x,y,z,3)) { // Apply constraints. + U(x,y,z,0) = V(x,y,z,0)/factor; + U(x,y,z,1) = V(x,y,z,1)/factor; + U(x,y,z,2) = V(x,y,z,2)/factor; + } + } + } + } else { // 2d version. + if (smoothness>=0) // Isotropic regularization. + cimg_pragma_openmp(parallel for cimg_openmp_if(_height>=8 && _width>=16) reduction(+:_energy)) + cimg_forY(U,y) { + const int _p1y = y?y - 1:0, _n1y = yx) U(x,y,0) = (float)x; + if (U(x,y,1)>y) U(x,y,1) = (float)y; + bound = (float)x - _width; if (U(x,y,0)<=bound) U(x,y,0) = bound; + bound = (float)y - _height; if (U(x,y,1)<=bound) U(x,y,1) = bound; + } else { + if (U(x,y,0)<-x) U(x,y,0) = -(float)x; + if (U(x,y,1)<-y) U(x,y,1) = -(float)y; + bound = (float)_width - x; if (U(x,y,0)>=bound) U(x,y,0) = bound; + bound = (float)_height - y; if (U(x,y,1)>=bound) U(x,y,1) = bound; + } + _energy+=delta_I*delta_I + smoothness*_energy_regul; + } + if (V) cimg_forX(V,x) if (V(x,y,2)) { // Apply constraints. + U(x,y,0) = V(x,y,0)/factor; + U(x,y,1) = V(x,y,1)/factor; + } + } else { // Anisotropic regularization. + const float nsmoothness = -smoothness; + cimg_pragma_openmp(parallel for cimg_openmp_if(_height>=8 && _width>=16) reduction(+:_energy)) + cimg_forY(U,y) { + const int _p1y = y?y - 1:0, _n1y = yx) U(x,y,0) = (float)x; + if (U(x,y,1)>y) U(x,y,1) = (float)y; + bound = (float)x - _width; if (U(x,y,0)<=bound) U(x,y,0) = bound; + bound = (float)y - _height; if (U(x,y,1)<=bound) U(x,y,1) = bound; + } else { + if (U(x,y,0)<-x) U(x,y,0) = -(float)x; + if (U(x,y,1)<-y) U(x,y,1) = -(float)y; + bound = (float)_width - x; if (U(x,y,0)>=bound) U(x,y,0) = bound; + bound = (float)_height - y; if (U(x,y,1)>=bound) U(x,y,1) = bound; + } + _energy+=delta_I*delta_I + nsmoothness*_energy_regul; + } + if (V) cimg_forX(V,x) if (V(x,y,2)) { // Apply constraints. + U(x,y,0) = V(x,y,0)/factor; + U(x,y,1) = V(x,y,1)/factor; + } + } + } + } + const float d_energy = (_energy - energy)/(sw*sh*sd); + if (d_energy<=0 && -d_energy<_precision) break; + if (d_energy>0) dt*=0.5f; + energy = _energy; + } + } + return U; + } + + //! Compute correspondence map between two images, using the patch-match algorithm. + /** + \param patch_image The image containing the reference patches to match with the instance image. + \param patch_width Width of the patch used for matching. + \param patch_height Height of the patch used for matching. + \param patch_depth Depth of the patch used for matching. + \param nb_iterations Number of patch-match iterations. + \param nb_randoms Number of randomization attempts (per pixel). + \param guide Image used as the initial correspondence estimate for the algorithm. + 'guide' may have a last channel with boolean values (0=false | other=true) that + tells for each pixel if its correspondence vector is constrained to its initial value (constraint mask). + \param[out] matching_score Returned as the image of matching scores. + \note + The patch-match algorithm is described in this paper: + Connelly Barnes, Eli Shechtman, Adam Finkelstein, Dan B Goldman(2009), + PatchMatch: A Randomized Correspondence Algorithm for Structural Image Editing + **/ + template + CImg& patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth, + const unsigned int nb_iterations, + const unsigned int nb_randoms, + const CImg &guide, + CImg &matching_score) { + return get_patchmatch(patch_image,patch_width,patch_height,patch_depth, + nb_iterations,nb_randoms,guide,matching_score).move_to(*this); + } + + //! Compute correspondence map between two images, using the patch-match algorithm \newinstance. + template + CImg get_patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth, + const unsigned int nb_iterations, + const unsigned int nb_randoms, + const CImg &guide, + CImg &matching_score) const { + return _patchmatch(patch_image,patch_width,patch_height,patch_depth, + nb_iterations,nb_randoms, + guide,true,matching_score); + } + + //! Compute correspondence map between two images, using the patch-match algorithm \overloading. + template + CImg& patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth, + const unsigned int nb_iterations, + const unsigned int nb_randoms, + const CImg &guide) { + return get_patchmatch(patch_image,patch_width,patch_height,patch_depth, + nb_iterations,nb_randoms,guide).move_to(*this); + } + + //! Compute correspondence map between two images, using the patch-match algorithm \overloading. + template + CImg get_patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth, + const unsigned int nb_iterations, + const unsigned int nb_randoms, + const CImg &guide) const { + return _patchmatch(patch_image,patch_width,patch_height,patch_depth, + nb_iterations,nb_randoms, + guide,false,CImg::empty()); + } + + //! Compute correspondence map between two images, using the patch-match algorithm \overloading. + CImg& patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth=1, + const unsigned int nb_iterations=5, + const unsigned int nb_randoms=5) { + return get_patchmatch(patch_image,patch_width,patch_height,patch_depth, + nb_iterations,nb_randoms).move_to(*this); + } + + //! Compute correspondence map between two images, using the patch-match algorithm \overloading. + CImg get_patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth=1, + const unsigned int nb_iterations=5, + const unsigned int nb_randoms=5) const { + return _patchmatch(patch_image,patch_width,patch_height,patch_depth, + nb_iterations,nb_randoms, + CImg::const_empty(), + false,CImg::empty()); + } + + template + CImg _patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth, + const unsigned int nb_iterations, + const unsigned int nb_randoms, + const CImg &guide, + const bool is_matching_score, + CImg &matching_score) const { + if (is_empty()) return CImg::const_empty(); + if (patch_image._spectrum!=_spectrum) + throw CImgArgumentException(_cimg_instance + "patchmatch(): Instance image and specified patch image (%u,%u,%u,%u,%p) " + "have different spectrums.", + cimg_instance, + patch_image._width,patch_image._height,patch_image._depth,patch_image._spectrum, + patch_image._data); + if (patch_width>_width || patch_height>_height || patch_depth>_depth) + throw CImgArgumentException(_cimg_instance + "patchmatch(): Specified patch size %ux%ux%u is bigger than the dimensions " + "of the instance image.", + cimg_instance,patch_width,patch_height,patch_depth); + if (patch_width>patch_image._width || patch_height>patch_image._height || patch_depth>patch_image._depth) + throw CImgArgumentException(_cimg_instance + "patchmatch(): Specified patch size %ux%ux%u is bigger than the dimensions " + "of the patch image image (%u,%u,%u,%u,%p).", + cimg_instance,patch_width,patch_height,patch_depth, + patch_image._width,patch_image._height,patch_image._depth,patch_image._spectrum, + patch_image._data); + const unsigned int + _constraint = patch_image._depth>1?3:2, + constraint = guide._spectrum>_constraint?_constraint:0; + + if (guide && + (guide._width!=_width || guide._height!=_height || guide._depth!=_depth || guide._spectrum<_constraint)) + throw CImgArgumentException(_cimg_instance + "patchmatch(): Specified guide (%u,%u,%u,%u,%p) has invalid dimensions " + "considering instance and patch image image (%u,%u,%u,%u,%p).", + cimg_instance, + guide._width,guide._height,guide._depth,guide._spectrum,guide._data, + patch_image._width,patch_image._height,patch_image._depth,patch_image._spectrum, + patch_image._data); + + CImg map(_width,_height,_depth,patch_image._depth>1?3:2); + CImg score(_width,_height,_depth); + const int + psizew = (int)patch_width, psizew1 = psizew/2, psizew2 = psizew - psizew1 - 1, + psizeh = (int)patch_height, psizeh1 = psizeh/2, psizeh2 = psizeh - psizeh1 - 1, + psized = (int)patch_depth, psized1 = psized/2, psized2 = psized - psized1 - 1; + + if (_depth>1 || patch_image._depth>1) { // 3d version. + + // Initialize correspondence map. + if (guide) cimg_forXYZ(*this,x,y,z) { // User-defined initialization. + const int + cx1 = x<=psizew1?x:(x::inf()); + } else cimg_forXYZ(*this,x,y,z) { // Random initialization. + const int + cx1 = x<=psizew1?x:(x::inf()); + } + + // Start iteration loop. + cimg_abort_init; + for (unsigned int iter = 0; iter64 && iter0) { // Compare with left neighbor. + const int u = map(x - 1,y,z,0), v = map(x - 1,y,z,1), w = map(x - 1,y,z,2); + if (u>=cx1 - 1 && u=cy1 && v=cz1 && w0) { // Compare with up neighbor. + const int u = map(x,y - 1,z,0), v = map(x,y - 1,z,1), w = map(x,y - 1,z,2); + if (u>=cx1 && u=cy1 - 1 && v=cz1 && w0) { // Compare with backward neighbor. + const int u = map(x,y,z - 1,0), v = map(x,y,z - 1,1), w = map(x,y,z - 1,2); + if (u>=cx1 && u=cy1 && v=cz1 - 1 && w=cx1 + 1 && u=cy1 && v=cz1 && w=cx1 && u=cy1 + 1 && v=cz1 && w=cx1 && u=cy1 && v=cz1 + 1 && w::inf()); + } else cimg_forXY(*this,x,y) { // Random initialization. + const int + cx1 = x<=psizew1?x:(x::inf()); + } + + // Start iteration loop. + for (unsigned int iter = 0; iter64 && iter0) { // Compare with left neighbor. + const int u = map(x - 1,y,0), v = map(x - 1,y,1); + if (u>=cx1 - 1 && u=cy1 && v0) { // Compare with up neighbor. + const int u = map(x,y - 1,0), v = map(x,y - 1,1); + if (u>=cx1 && u=cy1 - 1 && v=cx1 + 1 && u=cy1 && v=cx1 && u=cy1 + 1 && v& img1, const CImg& img2, + const unsigned int psizew, const unsigned int psizeh, + const int x1, const int y1, + const int x2, const int y2, + const float max_ssd) { // 2d version. + const T *p1 = img1.data(x1,y1), *p2 = img2.data(x2,y2); + const ulongT + offx1 = (ulongT)img1._width - psizew, + offx2 = (ulongT)img2._width - psizew, + offy1 = (ulongT)img1._width*img1._height - psizeh*img1._width, + offy2 = (ulongT)img2._width*img2._height - psizeh*img2._width; + float ssd = 0; + cimg_forC(img1,c) { + for (unsigned int j = 0; jmax_ssd) return max_ssd; + p1+=offx1; p2+=offx2; + } + p1+=offy1; p2+=offy2; + } + return ssd; + } + + static float _patchmatch(const CImg& img1, const CImg& img2, + const unsigned int psizew, const unsigned int psizeh, const unsigned int psized, + const int x1, const int y1, const int z1, + const int x2, const int y2, const int z2, + const float max_ssd) { // 3d version. + const T *p1 = img1.data(x1,y1,z1), *p2 = img2.data(x2,y2,z2); + const ulongT + offx1 = (ulongT)img1._width - psizew, + offx2 = (ulongT)img2._width - psizew, + offy1 = (ulongT)img1._width*img1._height - psizeh*img1._width - psizew, + offy2 = (ulongT)img2._width*img2._height - psizeh*img2._width - psizew, + offz1 = (ulongT)img1._width*img1._height*img1._depth - psized*img1._width*img1._height - + psizeh*img1._width - psizew, + offz2 = (ulongT)img2._width*img2._height*img2._depth - psized*img2._width*img2._height - + psizeh*img2._width - psizew; + float ssd = 0; + cimg_forC(img1,c) { + for (unsigned int k = 0; kmax_ssd) return max_ssd; + p1+=offx1; p2+=offx2; + } + p1+=offy1; p2+=offy2; + } + p1+=offz1; p2+=offz2; + } + return ssd; + } + + //! Compute Euclidean distance function to a specified value. + /** + \param value Reference value. + \param metric Type of metric. Can be { 0=Chebyshev | 1=Manhattan | 2=Euclidean | 3=Squared-euclidean }. + \note + The distance transform implementation has been submitted by A. Meijster, and implements + the article 'W.H. Hesselink, A. Meijster, J.B.T.M. Roerdink, + "A general algorithm for computing distance transforms in linear time.", + In: Mathematical Morphology and its Applications to Image and Signal Processing, + J. Goutsias, L. Vincent, and D.S. Bloomberg (eds.), Kluwer, 2000, pp. 331-340.' + The submitted code has then been modified to fit CImg coding style and constraints. + **/ + CImg& distance(const T& value, const unsigned int metric=2) { + if (is_empty()) return *this; + if (cimg::type::string()!=cimg::type::string()) // For datatype < int. + return CImg(*this,false).distance((Tint)value,metric). + cut((Tint)cimg::type::min(),(Tint)cimg::type::max()).move_to(*this); + bool is_value = false; + cimg_for(*this,ptr,T) *ptr = *ptr==value?is_value=true,(T)0:(T)std::max(0,99999999); // (avoid VC++ warning) + if (!is_value) return fill(cimg::type::max()); + switch (metric) { + case 0 : return _distance_core(_distance_sep_cdt,_distance_dist_cdt); // Chebyshev. + case 1 : return _distance_core(_distance_sep_mdt,_distance_dist_mdt); // Manhattan. + case 3 : return _distance_core(_distance_sep_edt,_distance_dist_edt); // Squared Euclidean. + default : return _distance_core(_distance_sep_edt,_distance_dist_edt).sqrt(); // Euclidean. + } + return *this; + } + + //! Compute distance to a specified value \newinstance. + CImg get_distance(const T& value, const unsigned int metric=2) const { + return CImg(*this,false).distance((Tfloat)value,metric); + } + + static longT _distance_sep_edt(const longT i, const longT u, const longT *const g) { + return (u*u - i*i + g[u] - g[i])/(2*(u - i)); + } + + static longT _distance_dist_edt(const longT x, const longT i, const longT *const g) { + return (x - i)*(x - i) + g[i]; + } + + static longT _distance_sep_mdt(const longT i, const longT u, const longT *const g) { + return (u - i<=g[u] - g[i]?999999999:(g[u] - g[i] + u + i)/2); + } + + static longT _distance_dist_mdt(const longT x, const longT i, const longT *const g) { + return (x=0) && f(t[q],s[q],g)>f(t[q],u,g)) { --q; } + if (q<0) { q = 0; s[0] = u; } + else { const longT w = 1 + sep(s[q], u, g); if (w<(longT)len) { ++q; s[q] = u; t[q] = w; }} + } + for (int u = (int)len - 1; u>=0; --u) { dt[u] = f(u,s[q],g); if (u==t[q]) --q; } // Backward scan. + } + + CImg& _distance_core(longT (*const sep)(const longT, const longT, const longT *const), + longT (*const f)(const longT, const longT, const longT *const)) { + // Check for g++ 4.9.X, as OpenMP seems to crash for this particular function. I have no clues why. +#define cimg_is_gcc49x (__GNUC__==4 && __GNUC_MINOR__==9) + + const ulongT wh = (ulongT)_width*_height; +#if defined(cimg_use_openmp) && !cimg_is_gcc49x + cimg_pragma_openmp(parallel for cimg_openmp_if(_spectrum>=2)) +#endif + cimg_forC(*this,c) { + CImg g(_width), dt(_width), s(_width), t(_width); + CImg img = get_shared_channel(c); +#if defined(cimg_use_openmp) && !cimg_is_gcc49x + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_width>=512 && _height*_depth>=16) + firstprivate(g,dt,s,t)) +#endif + cimg_forYZ(*this,y,z) { // Over X-direction. + cimg_forX(*this,x) g[x] = (longT)img(x,y,z,0,wh); + _distance_scan(_width,g,sep,f,s,t,dt); + cimg_forX(*this,x) img(x,y,z,0,wh) = (T)dt[x]; + } + if (_height>1) { + g.assign(_height); dt.assign(_height); s.assign(_height); t.assign(_height); +#if defined(cimg_use_openmp) && !cimg_is_gcc49x + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_height>=512 && _width*_depth>=16) + firstprivate(g,dt,s,t)) +#endif + cimg_forXZ(*this,x,z) { // Over Y-direction. + cimg_forY(*this,y) g[y] = (longT)img(x,y,z,0,wh); + _distance_scan(_height,g,sep,f,s,t,dt); + cimg_forY(*this,y) img(x,y,z,0,wh) = (T)dt[y]; + } + } + if (_depth>1) { + g.assign(_depth); dt.assign(_depth); s.assign(_depth); t.assign(_depth); +#if defined(cimg_use_openmp) && !cimg_is_gcc49x + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if(_depth>=512 && _width*_height>=16) + firstprivate(g,dt,s,t)) +#endif + cimg_forXY(*this,x,y) { // Over Z-direction. + cimg_forZ(*this,z) g[z] = (longT)img(x,y,z,0,wh); + _distance_scan(_depth,g,sep,f,s,t,dt); + cimg_forZ(*this,z) img(x,y,z,0,wh) = (T)dt[z]; + } + } + } + return *this; + } + + //! Compute chamfer distance to a specified value, with a custom metric. + /** + \param value Reference value. + \param metric_mask Metric mask. + \note The algorithm code has been initially proposed by A. Meijster, and modified by D. Tschumperlé. + **/ + template + CImg& distance(const T& value, const CImg& metric_mask) { + if (is_empty()) return *this; + bool is_value = false; + cimg_for(*this,ptr,T) *ptr = *ptr==value?is_value=true,0:(T)999999999; + if (!is_value) return fill(cimg::type::max()); + const ulongT wh = (ulongT)_width*_height; + cimg_pragma_openmp(parallel for cimg_openmp_if(_spectrum>=2)) + cimg_forC(*this,c) { + CImg img = get_shared_channel(c); + cimg_pragma_openmp(parallel for collapse(3) cimg_openmp_if(_width*_height*_depth>=1024)) + cimg_forXYZ(metric_mask,dx,dy,dz) { + const t weight = metric_mask(dx,dy,dz); + if (weight) { + for (int z = dz, nz = 0; z=0; --z,--nz) { // Backward scan. + for (int y = height() - 1 - dy, ny = height() - 1; y>=0; --y,--ny) { + for (int x = width() - 1 - dx, nx = width() - 1; x>=0; --x,--nx) { + const T dd = img(nx,ny,nz,0,wh) + weight; + if (dd + CImg get_distance(const T& value, const CImg& metric_mask) const { + return CImg(*this,false).distance(value,metric_mask); + } + + //! Compute distance to a specified value, according to a custom metric (use dijkstra algorithm). + /** + \param value Reference value. + \param metric Field of distance potentials. + \param is_high_connectivity Tells if the algorithm uses low or high connectivity. + \param[out] return_path An image containing the nodes of the minimal path. + **/ + template + CImg& distance_dijkstra(const T& value, const CImg& metric, const bool is_high_connectivity, + CImg& return_path) { + return get_distance_dijkstra(value,metric,is_high_connectivity,return_path).move_to(*this); + } + + //! Compute distance map to a specified value, according to a custom metric (use dijkstra algorithm) \newinstance. + template + CImg::type> + get_distance_dijkstra(const T& value, const CImg& metric, const bool is_high_connectivity, + CImg& return_path) const { + if (is_empty()) return return_path.assign(); + if (!is_sameXYZ(metric)) + throw CImgArgumentException(_cimg_instance + "distance_dijkstra(): image instance and metric map (%u,%u,%u,%u) " + "have incompatible dimensions.", + cimg_instance, + metric._width,metric._height,metric._depth,metric._spectrum); + typedef typename cimg::superset::type td; // Type used for computing cumulative distances. + CImg result(_width,_height,_depth,_spectrum), Q; + CImg is_queued(_width,_height,_depth,1); + if (return_path) return_path.assign(_width,_height,_depth,_spectrum); + + cimg_forC(*this,c) { + const CImg img = get_shared_channel(c); + const CImg met = metric.get_shared_channel(c%metric._spectrum); + CImg res = result.get_shared_channel(c); + CImg path = return_path?return_path.get_shared_channel(c):CImg(); + unsigned int sizeQ = 0; + + // Detect initial seeds. + is_queued.fill(0); + cimg_forXYZ(img,x,y,z) if (img(x,y,z)==value) { + Q._priority_queue_insert(is_queued,sizeQ,0,x,y,z); + res(x,y,z) = 0; + if (path) path(x,y,z) = (to)0; + } + + // Start distance propagation. + while (sizeQ) { + + // Get and remove point with minimal potential from the queue. + const int x = (int)Q(0,1), y = (int)Q(0,2), z = (int)Q(0,3); + const td P = (td)-Q(0,0); + Q._priority_queue_remove(sizeQ); + + // Update neighbors. + td npot = 0; + if (x - 1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x - 1,y,z) + P),x - 1,y,z)) { + res(x - 1,y,z) = npot; if (path) path(x - 1,y,z) = (to)2; + } + if (x + 1=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y - 1,z) + P),x,y - 1,z)) { + res(x,y - 1,z) = npot; if (path) path(x,y - 1,z) = (to)8; + } + if (y + 1=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y,z - 1) + P),x,y,z - 1)) { + res(x,y,z - 1) = npot; if (path) path(x,y,z - 1) = (to)32; + } + if (z + 1=0 && y - 1>=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x - 1,y - 1,z) + P)),x - 1,y - 1,z)) { + res(x - 1,y - 1,z) = npot; if (path) path(x - 1,y - 1,z) = (to)10; + } + if (x + 1=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x + 1,y - 1,z) + P)),x + 1,y - 1,z)) { + res(x + 1,y - 1,z) = npot; if (path) path(x + 1,y - 1,z) = (to)9; + } + if (x - 1>=0 && y + 1=0) { // Diagonal neighbors on slice z - 1. + if (x - 1>=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x - 1,y,z - 1) + P)),x - 1,y,z - 1)) { + res(x - 1,y,z - 1) = npot; if (path) path(x - 1,y,z - 1) = (to)34; + } + if (x + 1=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y - 1,z - 1) + P)),x,y - 1,z - 1)) { + res(x,y - 1,z - 1) = npot; if (path) path(x,y - 1,z - 1) = (to)40; + } + if (y + 1=0 && y - 1>=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x - 1,y - 1,z - 1) + P)), + x - 1,y - 1,z - 1)) { + res(x - 1,y - 1,z - 1) = npot; if (path) path(x - 1,y - 1,z - 1) = (to)42; + } + if (x + 1=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x + 1,y - 1,z - 1) + P)), + x + 1,y - 1,z - 1)) { + res(x + 1,y - 1,z - 1) = npot; if (path) path(x + 1,y - 1,z - 1) = (to)41; + } + if (x - 1>=0 && y + 1=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x - 1,y,z + 1) + P)),x - 1,y,z + 1)) { + res(x - 1,y,z + 1) = npot; if (path) path(x - 1,y,z + 1) = (to)18; + } + if (x + 1=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y - 1,z + 1) + P)),x,y - 1,z + 1)) { + res(x,y - 1,z + 1) = npot; if (path) path(x,y - 1,z + 1) = (to)24; + } + if (y + 1=0 && y - 1>=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x - 1,y - 1,z + 1) + P)), + x - 1,y - 1,z + 1)) { + res(x - 1,y - 1,z + 1) = npot; if (path) path(x - 1,y - 1,z + 1) = (to)26; + } + if (x + 1=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x + 1,y - 1,z + 1) + P)), + x + 1,y - 1,z + 1)) { + res(x + 1,y - 1,z + 1) = npot; if (path) path(x + 1,y - 1,z + 1) = (to)25; + } + if (x - 1>=0 && y + 1 + CImg& distance_dijkstra(const T& value, const CImg& metric, + const bool is_high_connectivity=false) { + return get_distance_dijkstra(value,metric,is_high_connectivity).move_to(*this); + } + + //! Compute distance map to a specified value, according to a custom metric (use dijkstra algorithm). \newinstance. + template + CImg get_distance_dijkstra(const T& value, const CImg& metric, + const bool is_high_connectivity=false) const { + CImg return_path; + return get_distance_dijkstra(value,metric,is_high_connectivity,return_path); + } + + //! Compute distance map to one source point, according to a custom metric (use fast marching algorithm). + /** + \param value Reference value. + \param metric Field of distance potentials. + **/ + template + CImg& distance_eikonal(const T& value, const CImg& metric) { + return get_distance_eikonal(value,metric).move_to(*this); + } + + //! Compute distance map to one source point, according to a custom metric (use fast marching algorithm). + template + CImg get_distance_eikonal(const T& value, const CImg& metric) const { + if (is_empty()) return *this; + if (!is_sameXYZ(metric)) + throw CImgArgumentException(_cimg_instance + "distance_eikonal(): image instance and metric map (%u,%u,%u,%u) have " + "incompatible dimensions.", + cimg_instance, + metric._width,metric._height,metric._depth,metric._spectrum); + CImg result(_width,_height,_depth,_spectrum,cimg::type::max()), Q; + CImg state(_width,_height,_depth); // -1=far away, 0=narrow, 1=frozen. + + cimg_pragma_openmp(parallel for cimg_openmp_if(_spectrum>=2) firstprivate(Q,state)) + cimg_forC(*this,c) { + const CImg img = get_shared_channel(c); + const CImg met = metric.get_shared_channel(c%metric._spectrum); + CImg res = result.get_shared_channel(c); + unsigned int sizeQ = 0; + state.fill(-1); + + // Detect initial seeds. + Tfloat *ptr1 = res._data; char *ptr2 = state._data; + cimg_for(img,ptr0,T) { if (*ptr0==value) { *ptr1 = 0; *ptr2 = 1; } ++ptr1; ++ptr2; } + + // Initialize seeds neighbors. + ptr2 = state._data; + cimg_forXYZ(img,x,y,z) if (*(ptr2++)==1) { + if (x - 1>=0 && state(x - 1,y,z)==-1) { + const Tfloat dist = res(x - 1,y,z) = __distance_eikonal(res,met(x - 1,y,z),x - 1,y,z); + Q._eik_priority_queue_insert(state,sizeQ,-dist,x - 1,y,z); + } + if (x + 1=0 && state(x,y - 1,z)==-1) { + const Tfloat dist = res(x,y - 1,z) = __distance_eikonal(res,met(x,y - 1,z),x,y - 1,z); + Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y - 1,z); + } + if (y + 1=0 && state(x,y,z - 1)==-1) { + const Tfloat dist = res(x,y,z - 1) = __distance_eikonal(res,met(x,y,z - 1),x,y,z - 1); + Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y,z - 1); + } + if (z + 1=0) { + if (x - 1>=0 && state(x - 1,y,z)!=1) { + const Tfloat dist = __distance_eikonal(res,met(x - 1,y,z),x - 1,y,z); + if (dist=0 && state(x,y - 1,z)!=1) { + const Tfloat dist = __distance_eikonal(res,met(x,y - 1,z),x,y - 1,z); + if (dist=0 && state(x,y,z - 1)!=1) { + const Tfloat dist = __distance_eikonal(res,met(x,y,z - 1),x,y,z - 1); + if (dist& res, const Tfloat P, + const int x=0, const int y=0, const int z=0) const { + const Tfloat M = (Tfloat)cimg::type::max(); + T T1 = (T)std::min(x - 1>=0?res(x - 1,y,z):M,x + 11) { // 3d. + T + T2 = (T)std::min(y - 1>=0?res(x,y - 1,z):M,y + 1=0?res(x,y,z - 1):M,z + 1T2) cimg::swap(T1,T2); + if (T2>T3) cimg::swap(T2,T3); + if (T1>T2) cimg::swap(T1,T2); + if (P<=0) return (Tfloat)T1; + if (T31) { // 2d. + T T2 = (T)std::min(y - 1>=0?res(x,y - 1,z):M,y + 1T2) cimg::swap(T1,T2); + if (P<=0) return (Tfloat)T1; + if (T2 + void _eik_priority_queue_insert(CImg& state, unsigned int& siz, const t value, + const unsigned int x, const unsigned int y, const unsigned int z) { + if (state(x,y,z)>0) return; + state(x,y,z) = 0; + if (++siz>=_width) { if (!is_empty()) resize(_width*2,4,1,1,0); else assign(64,4); } + (*this)(siz - 1,0) = (T)value; (*this)(siz - 1,1) = (T)x; (*this)(siz - 1,2) = (T)y; (*this)(siz - 1,3) = (T)z; + for (unsigned int pos = siz - 1, par = 0; pos && value>(*this)(par=(pos + 1)/2 - 1,0); pos = par) { + cimg::swap((*this)(pos,0),(*this)(par,0)); cimg::swap((*this)(pos,1),(*this)(par,1)); + cimg::swap((*this)(pos,2),(*this)(par,2)); cimg::swap((*this)(pos,3),(*this)(par,3)); + } + } + + //! Compute distance function to 0-valued isophotes, using the Eikonal PDE. + /** + \param nb_iterations Number of PDE iterations. + \param band_size Size of the narrow band. + \param time_step Time step of the PDE iterations. + **/ + CImg& distance_eikonal(const unsigned int nb_iterations, const float band_size=0, const float time_step=0.5f) { + if (is_empty()) return *this; + CImg velocity(*this,false); + for (unsigned int iteration = 0; iteration1) { // 3d + CImg_3x3x3(I,Tfloat); + cimg_forC(*this,c) cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) if (band_size<=0 || cimg::abs(Iccc)0?(Incc - Iccc):(Iccc - Ipcc), + iy = gy*sgn>0?(Icnc - Iccc):(Iccc - Icpc), + iz = gz*sgn>0?(Iccn - Iccc):(Iccc - Iccp), + ng = 1e-5f + cimg::hypot(gx,gy,gz), + ngx = gx/ng, + ngy = gy/ng, + ngz = gz/ng, + veloc = sgn*(ngx*ix + ngy*iy + ngz*iz - 1); + *(ptrd++) = veloc; + if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; + } else *(ptrd++) = 0; + } else { // 2d version + CImg_3x3(I,Tfloat); + cimg_forC(*this,c) cimg_for3x3(*this,x,y,0,c,I,Tfloat) if (band_size<=0 || cimg::abs(Icc)0?(Inc - Icc):(Icc - Ipc), + iy = gy*sgn>0?(Icn - Icc):(Icc - Icp), + ng = std::max((Tfloat)1e-5,cimg::hypot(gx,gy)), + ngx = gx/ng, + ngy = gy/ng, + veloc = sgn*(ngx*ix + ngy*iy - 1); + *(ptrd++) = veloc; + if (veloc>veloc_max) veloc_max = veloc; else if (-veloc>veloc_max) veloc_max = -veloc; + } else *(ptrd++) = 0; + } + if (veloc_max>0) *this+=(velocity*=time_step/veloc_max); + } + return *this; + } + + //! Compute distance function to 0-valued isophotes, using the Eikonal PDE \newinstance. + CImg get_distance_eikonal(const unsigned int nb_iterations, const float band_size=0, + const float time_step=0.5f) const { + return CImg(*this,false).distance_eikonal(nb_iterations,band_size,time_step); + } + + //! Compute Haar multiscale wavelet transform. + /** + \param axis Axis considered for the transform. + \param invert Set inverse of direct transform. + \param nb_scales Number of scales used for the transform. + **/ + CImg& haar(const char axis, const bool invert=false, const unsigned int nb_scales=1) { + return get_haar(axis,invert,nb_scales).move_to(*this); + } + + //! Compute Haar multiscale wavelet transform \newinstance. + CImg get_haar(const char axis, const bool invert=false, const unsigned int nb_scales=1) const { + if (is_empty() || !nb_scales) return +*this; + CImg res; + const Tfloat sqrt2 = std::sqrt(2.0f); + if (nb_scales==1) { + switch (cimg::lowercase(axis)) { // Single scale transform + case 'x' : { + const unsigned int w = _width/2; + if (w) { + if ((w%2) && w!=1) + throw CImgInstanceException(_cimg_instance + "haar(): Sub-image width %u is not even.", + cimg_instance, + w); + + res.assign(_width,_height,_depth,_spectrum); + if (invert) cimg_forYZC(*this,y,z,c) { // Inverse transform along X + for (unsigned int x = 0, xw = w, x2 = 0; x& haar(const bool invert=false, const unsigned int nb_scales=1) { + return get_haar(invert,nb_scales).move_to(*this); + } + + //! Compute Haar multiscale wavelet transform \newinstance. + CImg get_haar(const bool invert=false, const unsigned int nb_scales=1) const { + CImg res; + if (nb_scales==1) { // Single scale transform + if (_width>1) get_haar('x',invert,1).move_to(res); + if (_height>1) { if (res) res.haar('y',invert,1); else get_haar('y',invert,1).move_to(res); } + if (_depth>1) { if (res) res.haar('z',invert,1); else get_haar('z',invert,1).move_to(res); } + if (res) return res; + } else { // Multi-scale transform + if (invert) { // Inverse transform + res.assign(*this,false); + if (_width>1) { + if (_height>1) { + if (_depth>1) { + unsigned int w = _width, h = _height, d = _depth; + for (unsigned int s = 1; w && h && d && s1) { + unsigned int w = _width, d = _depth; + for (unsigned int s = 1; w && d && s1) { + if (_depth>1) { + unsigned int h = _height, d = _depth; + for (unsigned int s = 1; h && d && s1) { + unsigned int d = _depth; + for (unsigned int s = 1; d && s1) { + if (_height>1) { + if (_depth>1) + for (unsigned int s = 1, w = _width/2, h = _height/2, d = _depth/2; w && h && d && s1) for (unsigned int s = 1, w = _width/2, d = _depth/2; w && d && s1) { + if (_depth>1) + for (unsigned int s = 1, h = _height/2, d = _depth/2; h && d && s1) for (unsigned int s = 1, d = _depth/2; d && s get_FFT(const char axis, const bool is_invert=false) const { + CImgList res(*this,CImg()); + CImg::FFT(res[0],res[1],axis,is_invert); + return res; + } + + //! Compute n-d Fast Fourier Transform. + /* + \param is_invert Tells if the forward (\c false) or inverse (\c true) FFT is computed. + **/ + CImgList get_FFT(const bool is_invert=false) const { + CImgList res(*this,CImg()); + CImg::FFT(res[0],res[1],is_invert); + return res; + } + + //! Compute 1d Fast Fourier Transform, along a specified axis. + /** + \param[in,out] real Real part of the pixel values. + \param[in,out] imag Imaginary part of the pixel values. + \param axis Axis along which the FFT is computed. + \param is_invert Tells if the forward (\c false) or inverse (\c true) FFT is computed. + **/ + static void FFT(CImg& real, CImg& imag, const char axis, const bool is_invert=false) { + if (!real) + throw CImgInstanceException("CImg<%s>::FFT(): Specified real part is empty.", + pixel_type()); + + if (!imag) imag.assign(real._width,real._height,real._depth,real._spectrum,(T)0); + if (!real.is_sameXYZC(imag)) + throw CImgInstanceException("CImg<%s>::FFT(): Specified real part (%u,%u,%u,%u,%p) and " + "imaginary part (%u,%u,%u,%u,%p) have different dimensions.", + pixel_type(), + real._width,real._height,real._depth,real._spectrum,real._data, + imag._width,imag._height,imag._depth,imag._spectrum,imag._data); +#ifdef cimg_use_fftw3 + cimg::mutex(12); + fftw_complex *data_in; + fftw_plan data_plan; + + switch (cimg::lowercase(axis)) { + case 'x' : { // Fourier along X, using FFTW library. + data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*real._width); + if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) " + "for computing FFT of image (%u,%u,%u,%u) along the X-axis.", + pixel_type(), + cimg::strbuffersize(sizeof(fftw_complex)*real._width), + real._width,real._height,real._depth,real._spectrum); + + data_plan = fftw_plan_dft_1d(real._width,data_in,data_in,is_invert?FFTW_BACKWARD:FFTW_FORWARD,FFTW_ESTIMATE); + cimg_forYZC(real,y,z,c) { + T *ptrr = real.data(0,y,z,c), *ptri = imag.data(0,y,z,c); + double *ptrd = (double*)data_in; + cimg_forX(real,x) { *(ptrd++) = (double)*(ptrr++); *(ptrd++) = (double)*(ptri++); } + fftw_execute(data_plan); + const unsigned int fact = real._width; + if (is_invert) cimg_forX(real,x) { *(--ptri) = (T)(*(--ptrd)/fact); *(--ptrr) = (T)(*(--ptrd)/fact); } + else cimg_forX(real,x) { *(--ptri) = (T)*(--ptrd); *(--ptrr) = (T)*(--ptrd); } + } + } break; + case 'y' : { // Fourier along Y, using FFTW library. + data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * real._height); + if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) " + "for computing FFT of image (%u,%u,%u,%u) along the Y-axis.", + pixel_type(), + cimg::strbuffersize(sizeof(fftw_complex)*real._height), + real._width,real._height,real._depth,real._spectrum); + + data_plan = fftw_plan_dft_1d(real._height,data_in,data_in,is_invert?FFTW_BACKWARD:FFTW_FORWARD,FFTW_ESTIMATE); + const unsigned int off = real._width; + cimg_forXZC(real,x,z,c) { + T *ptrr = real.data(x,0,z,c), *ptri = imag.data(x,0,z,c); + double *ptrd = (double*)data_in; + cimg_forY(real,y) { *(ptrd++) = (double)*ptrr; *(ptrd++) = (double)*ptri; ptrr+=off; ptri+=off; } + fftw_execute(data_plan); + const unsigned int fact = real._height; + if (is_invert) + cimg_forY(real,y) { ptrr-=off; ptri-=off; *ptri = (T)(*(--ptrd)/fact); *ptrr = (T)(*(--ptrd)/fact); } + else cimg_forY(real,y) { ptrr-=off; ptri-=off; *ptri = (T)*(--ptrd); *ptrr = (T)*(--ptrd); } + } + } break; + case 'z' : { // Fourier along Z, using FFTW library. + data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * real._depth); + if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) " + "for computing FFT of image (%u,%u,%u,%u) along the Z-axis.", + pixel_type(), + cimg::strbuffersize(sizeof(fftw_complex)*real._depth), + real._width,real._height,real._depth,real._spectrum); + + data_plan = fftw_plan_dft_1d(real._depth,data_in,data_in,is_invert?FFTW_BACKWARD:FFTW_FORWARD,FFTW_ESTIMATE); + const ulongT off = (ulongT)real._width*real._height; + cimg_forXYC(real,x,y,c) { + T *ptrr = real.data(x,y,0,c), *ptri = imag.data(x,y,0,c); + double *ptrd = (double*)data_in; + cimg_forZ(real,z) { *(ptrd++) = (double)*ptrr; *(ptrd++) = (double)*ptri; ptrr+=off; ptri+=off; } + fftw_execute(data_plan); + const unsigned int fact = real._depth; + if (is_invert) + cimg_forZ(real,z) { ptrr-=off; ptri-=off; *ptri = (T)(*(--ptrd)/fact); *ptrr = (T)(*(--ptrd)/fact); } + else cimg_forZ(real,z) { ptrr-=off; ptri-=off; *ptri = (T)*(--ptrd); *ptrr = (T)*(--ptrd); } + } + } break; + default : + throw CImgArgumentException("CImgList<%s>::FFT(): Invalid specified axis '%c' for real and imaginary parts " + "(%u,%u,%u,%u) " + "(should be { x | y | z }).", + pixel_type(),axis, + real._width,real._height,real._depth,real._spectrum); + } + fftw_destroy_plan(data_plan); + fftw_free(data_in); + cimg::mutex(12,0); +#else + switch (cimg::lowercase(axis)) { + case 'x' : { // Fourier along X, using built-in functions. + const unsigned int N = real._width, N2 = N>>1; + if (((N - 1)&N) && N!=1) + throw CImgInstanceException("CImgList<%s>::FFT(): Specified real and imaginary parts (%u,%u,%u,%u) " + "have non 2^N dimension along the X-axis.", + pixel_type(), + real._width,real._height,real._depth,real._spectrum); + + for (unsigned int i = 0, j = 0; ii) cimg_forYZC(real,y,z,c) { + cimg::swap(real(i,y,z,c),real(j,y,z,c)); + cimg::swap(imag(i,y,z,c),imag(j,y,z,c)); + if (j=m; j-=m, m = n, n>>=1) {} + } + for (unsigned int delta = 2; delta<=N; delta<<=1) { + const unsigned int delta2 = delta>>1; + for (unsigned int i = 0; i>1; + if (((N - 1)&N) && N!=1) + throw CImgInstanceException("CImgList<%s>::FFT(): Specified real and imaginary parts (%u,%u,%u,%u) " + "have non 2^N dimension along the Y-axis.", + pixel_type(), + real._width,real._height,real._depth,real._spectrum); + + for (unsigned int i = 0, j = 0; ii) cimg_forXZC(real,x,z,c) { + cimg::swap(real(x,i,z,c),real(x,j,z,c)); + cimg::swap(imag(x,i,z,c),imag(x,j,z,c)); + if (j=m; j-=m, m = n, n>>=1) {} + } + for (unsigned int delta = 2; delta<=N; delta<<=1) { + const unsigned int delta2 = (delta>>1); + for (unsigned int i = 0; i>1; + if (((N - 1)&N) && N!=1) + throw CImgInstanceException("CImgList<%s>::FFT(): Specified real and imaginary parts (%u,%u,%u,%u) " + "have non 2^N dimension along the Z-axis.", + pixel_type(), + real._width,real._height,real._depth,real._spectrum); + + for (unsigned int i = 0, j = 0; ii) cimg_forXYC(real,x,y,c) { + cimg::swap(real(x,y,i,c),real(x,y,j,c)); + cimg::swap(imag(x,y,i,c),imag(x,y,j,c)); + if (j=m; j-=m, m = n, n>>=1) {} + } + for (unsigned int delta = 2; delta<=N; delta<<=1) { + const unsigned int delta2 = (delta>>1); + for (unsigned int i = 0; i::FFT(): Invalid specified axis '%c' for real and imaginary parts " + "(%u,%u,%u,%u) " + "(should be { x | y | z }).", + pixel_type(),axis, + real._width,real._height,real._depth,real._spectrum); + } +#endif + } + + //! Compute n-d Fast Fourier Transform. + /** + \param[in,out] real Real part of the pixel values. + \param[in,out] imag Imaginary part of the pixel values. + \param is_invert Tells if the forward (\c false) or inverse (\c true) FFT is computed. + \param nb_threads Number of parallel threads used for the computation. + Use \c 0 to set this to the number of available cpus. + **/ + static void FFT(CImg& real, CImg& imag, const bool is_invert=false, const unsigned int nb_threads=0) { + if (!real) + throw CImgInstanceException("CImgList<%s>::FFT(): Empty specified real part.", + pixel_type()); + + if (!imag) imag.assign(real._width,real._height,real._depth,real._spectrum,(T)0); + if (!real.is_sameXYZC(imag)) + throw CImgInstanceException("CImgList<%s>::FFT(): Specified real part (%u,%u,%u,%u,%p) and " + "imaginary part (%u,%u,%u,%u,%p) have different dimensions.", + pixel_type(), + real._width,real._height,real._depth,real._spectrum,real._data, + imag._width,imag._height,imag._depth,imag._spectrum,imag._data); + +#ifdef cimg_use_fftw3 + cimg::mutex(12); +#ifndef cimg_use_fftw3_singlethread + const unsigned int _nb_threads = nb_threads?nb_threads:cimg::nb_cpus(); + static int fftw_st = fftw_init_threads(); + cimg::unused(fftw_st); + fftw_plan_with_nthreads(_nb_threads); +#else + cimg::unused(nb_threads); +#endif + fftw_complex *data_in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*real._width*real._height*real._depth); + if (!data_in) throw CImgInstanceException("CImgList<%s>::FFT(): Failed to allocate memory (%s) " + "for computing FFT of image (%u,%u,%u,%u).", + pixel_type(), + cimg::strbuffersize(sizeof(fftw_complex)*real._width* + real._height*real._depth*real._spectrum), + real._width,real._height,real._depth,real._spectrum); + + fftw_plan data_plan; + const ulongT w = (ulongT)real._width, wh = w*real._height, whd = wh*real._depth; + data_plan = fftw_plan_dft_3d(real._width,real._height,real._depth,data_in,data_in, + is_invert?FFTW_BACKWARD:FFTW_FORWARD,FFTW_ESTIMATE); + cimg_forC(real,c) { + T *ptrr = real.data(0,0,0,c), *ptri = imag.data(0,0,0,c); + double *ptrd = (double*)data_in; + for (unsigned int x = 0; x1) FFT(real,imag,'z',is_invert); + if (real._height>1) FFT(real,imag,'y',is_invert); + if (real._width>1) FFT(real,imag,'x',is_invert); +#endif + } + + //@} + //------------------------------------- + // + //! \name 3d Objects Management + //@{ + //------------------------------------- + + //! Shift 3d object's vertices. + /** + \param tx X-coordinate of the 3d displacement vector. + \param ty Y-coordinate of the 3d displacement vector. + \param tz Z-coordinate of the 3d displacement vector. + **/ + CImg& shift_object3d(const float tx, const float ty=0, const float tz=0) { + if (_height!=3 || _depth>1 || _spectrum>1) + throw CImgInstanceException(_cimg_instance + "shift_object3d(): Instance is not a set of 3d vertices.", + cimg_instance); + + get_shared_row(0)+=tx; get_shared_row(1)+=ty; get_shared_row(2)+=tz; + return *this; + } + + //! Shift 3d object's vertices \newinstance. + CImg get_shift_object3d(const float tx, const float ty=0, const float tz=0) const { + return CImg(*this,false).shift_object3d(tx,ty,tz); + } + + //! Shift 3d object's vertices, so that it becomes centered. + /** + \note The object center is computed as its barycenter. + **/ + CImg& shift_object3d() { + if (_height!=3 || _depth>1 || _spectrum>1) + throw CImgInstanceException(_cimg_instance + "shift_object3d(): Instance is not a set of 3d vertices.", + cimg_instance); + + CImg xcoords = get_shared_row(0), ycoords = get_shared_row(1), zcoords = get_shared_row(2); + float + xm, xM = (float)xcoords.max_min(xm), + ym, yM = (float)ycoords.max_min(ym), + zm, zM = (float)zcoords.max_min(zm); + xcoords-=(xm + xM)/2; ycoords-=(ym + yM)/2; zcoords-=(zm + zM)/2; + return *this; + } + + //! Shift 3d object's vertices, so that it becomes centered \newinstance. + CImg get_shift_object3d() const { + return CImg(*this,false).shift_object3d(); + } + + //! Resize 3d object. + /** + \param sx Width of the 3d object's bounding box. + \param sy Height of the 3d object's bounding box. + \param sz Depth of the 3d object's bounding box. + **/ + CImg& resize_object3d(const float sx, const float sy=-100, const float sz=-100) { + if (_height!=3 || _depth>1 || _spectrum>1) + throw CImgInstanceException(_cimg_instance + "resize_object3d(): Instance is not a set of 3d vertices.", + cimg_instance); + + CImg xcoords = get_shared_row(0), ycoords = get_shared_row(1), zcoords = get_shared_row(2); + float + xm, xM = (float)xcoords.max_min(xm), + ym, yM = (float)ycoords.max_min(ym), + zm, zM = (float)zcoords.max_min(zm); + if (xm0) xcoords*=sx/(xM-xm); else xcoords*=-sx/100; } + if (ym0) ycoords*=sy/(yM-ym); else ycoords*=-sy/100; } + if (zm0) zcoords*=sz/(zM-zm); else zcoords*=-sz/100; } + return *this; + } + + //! Resize 3d object \newinstance. + CImg get_resize_object3d(const float sx, const float sy=-100, const float sz=-100) const { + return CImg(*this,false).resize_object3d(sx,sy,sz); + } + + //! Resize 3d object to unit size. + CImg resize_object3d() { + if (_height!=3 || _depth>1 || _spectrum>1) + throw CImgInstanceException(_cimg_instance + "resize_object3d(): Instance is not a set of 3d vertices.", + cimg_instance); + + CImg xcoords = get_shared_row(0), ycoords = get_shared_row(1), zcoords = get_shared_row(2); + float + xm, xM = (float)xcoords.max_min(xm), + ym, yM = (float)ycoords.max_min(ym), + zm, zM = (float)zcoords.max_min(zm); + const float dx = xM - xm, dy = yM - ym, dz = zM - zm, dmax = cimg::max(dx,dy,dz); + if (dmax>0) { xcoords/=dmax; ycoords/=dmax; zcoords/=dmax; } + return *this; + } + + //! Resize 3d object to unit size \newinstance. + CImg get_resize_object3d() const { + return CImg(*this,false).resize_object3d(); + } + + //! Merge two 3d objects together. + /** + \param[in,out] primitives Primitives data of the current 3d object. + \param obj_vertices Vertices data of the additional 3d object. + \param obj_primitives Primitives data of the additional 3d object. + **/ + template + CImg& append_object3d(CImgList& primitives, const CImg& obj_vertices, + const CImgList& obj_primitives) { + if (!obj_vertices || !obj_primitives) return *this; + if (obj_vertices._height!=3 || obj_vertices._depth>1 || obj_vertices._spectrum>1) + throw CImgInstanceException(_cimg_instance + "append_object3d(): Specified vertice image (%u,%u,%u,%u,%p) is not a " + "set of 3d vertices.", + cimg_instance, + obj_vertices._width,obj_vertices._height, + obj_vertices._depth,obj_vertices._spectrum,obj_vertices._data); + + if (is_empty()) { primitives.assign(obj_primitives); return assign(obj_vertices); } + if (_height!=3 || _depth>1 || _spectrum>1) + throw CImgInstanceException(_cimg_instance + "append_object3d(): Instance is not a set of 3d vertices.", + cimg_instance); + + const unsigned int P = _width; + append(obj_vertices,'x'); + const unsigned int N = primitives._width; + primitives.insert(obj_primitives); + for (unsigned int i = N; i &p = primitives[i]; + switch (p.size()) { + case 1 : p[0]+=P; break; // Point. + case 5 : p[0]+=P; p[1]+=P; break; // Sphere. + case 2 : case 6 : p[0]+=P; p[1]+=P; break; // Segment. + case 3 : case 9 : p[0]+=P; p[1]+=P; p[2]+=P; break; // Triangle. + case 4 : case 12 : p[0]+=P; p[1]+=P; p[2]+=P; p[3]+=P; break; // Rectangle. + } + } + return *this; + } + + //! Texturize primitives of a 3d object. + /** + \param[in,out] primitives Primitives data of the 3d object. + \param[in,out] colors Colors data of the 3d object. + \param texture Texture image to map to 3d object. + \param coords Texture-mapping coordinates. + **/ + template + const CImg& texturize_object3d(CImgList& primitives, CImgList& colors, + const CImg& texture, const CImg& coords=CImg::const_empty()) const { + if (is_empty()) return *this; + if (_height!=3) + throw CImgInstanceException(_cimg_instance + "texturize_object3d(): image instance is not a set of 3d points.", + cimg_instance); + if (coords && (coords._width!=_width || coords._height!=2)) + throw CImgArgumentException(_cimg_instance + "texturize_object3d(): Invalid specified texture coordinates (%u,%u,%u,%u,%p).", + cimg_instance, + coords._width,coords._height,coords._depth,coords._spectrum,coords._data); + CImg _coords; + if (!coords) { // If no texture coordinates specified, do a default XY-projection. + _coords.assign(_width,2); + float + xmin, xmax = (float)get_shared_row(0).max_min(xmin), + ymin, ymax = (float)get_shared_row(1).max_min(ymin), + dx = xmax>xmin?xmax-xmin:1, + dy = ymax>ymin?ymax-ymin:1; + cimg_forX(*this,p) { + _coords(p,0) = (int)(((*this)(p,0) - xmin)*texture._width/dx); + _coords(p,1) = (int)(((*this)(p,1) - ymin)*texture._height/dy); + } + } else _coords = coords; + + int texture_ind = -1; + cimglist_for(primitives,l) { + CImg &p = primitives[l]; + const unsigned int siz = p.size(); + switch (siz) { + case 1 : { // Point. + const unsigned int i0 = (unsigned int)p[0]; + const int x0 = _coords(i0,0), y0 = _coords(i0,1); + texture.get_vector_at(x0<=0?0:x0>=texture.width()?texture.width() - 1:x0, + y0<=0?0:y0>=texture.height()?texture.height() - 1:y0).move_to(colors[l]); + } break; + case 2 : case 6 : { // Line. + const unsigned int i0 = (unsigned int)p[0], i1 = (unsigned int)p[1]; + const int + x0 = _coords(i0,0), y0 = _coords(i0,1), + x1 = _coords(i1,0), y1 = _coords(i1,1); + if (texture_ind<0) colors[texture_ind=l].assign(texture,false); + else colors[l].assign(colors[texture_ind],true); + CImg::vector(i0,i1,x0,y0,x1,y1).move_to(p); + } break; + case 3 : case 9 : { // Triangle. + const unsigned int i0 = (unsigned int)p[0], i1 = (unsigned int)p[1], i2 = (unsigned int)p[2]; + const int + x0 = _coords(i0,0), y0 = _coords(i0,1), + x1 = _coords(i1,0), y1 = _coords(i1,1), + x2 = _coords(i2,0), y2 = _coords(i2,1); + if (texture_ind<0) colors[texture_ind=l].assign(texture,false); + else colors[l].assign(colors[texture_ind],true); + CImg::vector(i0,i1,i2,x0,y0,x1,y1,x2,y2).move_to(p); + } break; + case 4 : case 12 : { // Quadrangle. + const unsigned int + i0 = (unsigned int)p[0], i1 = (unsigned int)p[1], i2 = (unsigned int)p[2], i3 = (unsigned int)p[3]; + const int + x0 = _coords(i0,0), y0 = _coords(i0,1), + x1 = _coords(i1,0), y1 = _coords(i1,1), + x2 = _coords(i2,0), y2 = _coords(i2,1), + x3 = _coords(i3,0), y3 = _coords(i3,1); + if (texture_ind<0) colors[texture_ind=l].assign(texture,false); + else colors[l].assign(colors[texture_ind],true); + CImg::vector(i0,i1,i2,i3,x0,y0,x1,y1,x2,y2,x3,y3).move_to(p); + } break; + } + } + return *this; + } + + //! Generate a 3d elevation of the image instance. + /** + \param[out] primitives The returned list of the 3d object primitives + (template type \e tf should be at least \e unsigned \e int). + \param[out] colors The returned list of the 3d object colors. + \param elevation The input elevation map. + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). + \par Example + \code + const CImg img("reference.jpg"); + CImgList faces3d; + CImgList colors3d; + const CImg points3d = img.get_elevation3d(faces3d,colors3d,img.get_norm()*0.2); + CImg().display_object3d("Elevation3d",points3d,faces3d,colors3d); + \endcode + \image html ref_elevation3d.jpg + **/ + template + CImg get_elevation3d(CImgList& primitives, CImgList& colors, const CImg& elevation) const { + if (!is_sameXY(elevation) || elevation._depth>1 || elevation._spectrum>1) + throw CImgArgumentException(_cimg_instance + "get_elevation3d(): Instance and specified elevation (%u,%u,%u,%u,%p) " + "have incompatible dimensions.", + cimg_instance, + elevation._width,elevation._height,elevation._depth, + elevation._spectrum,elevation._data); + if (is_empty()) return *this; + float m, M = (float)max_min(m); + if (M==m) ++M; + colors.assign(); + const unsigned int size_x1 = _width - 1, size_y1 = _height - 1; + for (unsigned int y = 0; y1?((*this)(x,y,1) - m)*255/(M-m):r), + b = (unsigned char)(_spectrum>2?((*this)(x,y,2) - m)*255/(M-m):_spectrum>1?0:r); + CImg::vector((tc)r,(tc)g,(tc)b).move_to(colors); + } + const typename CImg::_functor2d_int func(elevation); + return elevation3d(primitives,func,0,0,_width - 1.0f,_height - 1.0f,_width,_height); + } + + //! Generate the 3d projection planes of the image instance. + /** + \param[out] primitives Primitives data of the returned 3d object. + \param[out] colors Colors data of the returned 3d object. + \param x0 X-coordinate of the projection point. + \param y0 Y-coordinate of the projection point. + \param z0 Z-coordinate of the projection point. + \param normalize_colors Tells if the created textures have normalized colors. + **/ + template + CImg get_projections3d(CImgList& primitives, CImgList& colors, + const unsigned int x0, const unsigned int y0, const unsigned int z0, + const bool normalize_colors=false) const { + float m = 0, M = 0, delta = 1; + if (normalize_colors) { m = (float)min_max(M); delta = 255/(m==M?1:M-m); } + const unsigned int + _x0 = (x0>=_width)?_width - 1:x0, + _y0 = (y0>=_height)?_height - 1:y0, + _z0 = (z0>=_depth)?_depth - 1:z0; + CImg img_xy, img_xz, img_yz; + if (normalize_colors) { + ((get_crop(0,0,_z0,0,_width - 1,_height - 1,_z0,_spectrum - 1)-=m)*=delta).move_to(img_xy); + ((get_crop(0,_y0,0,0,_width - 1,_y0,_depth - 1,_spectrum - 1)-=m)*=delta).resize(_width,_depth,1,-100,-1). + move_to(img_xz); + ((get_crop(_x0,0,0,0,_x0,_height - 1,_depth - 1,_spectrum - 1)-=m)*=delta).resize(_height,_depth,1,-100,-1). + move_to(img_yz); + } else { + get_crop(0,0,_z0,0,_width - 1,_height - 1,_z0,_spectrum - 1).move_to(img_xy); + get_crop(0,_y0,0,0,_width - 1,_y0,_depth - 1,_spectrum - 1).resize(_width,_depth,1,-100,-1).move_to(img_xz); + get_crop(_x0,0,0,0,_x0,_height - 1,_depth - 1,_spectrum - 1).resize(_height,_depth,1,-100,-1).move_to(img_yz); + } + CImg points(12,3,1,1, + 0,_width - 1,_width - 1,0, 0,_width - 1,_width - 1,0, _x0,_x0,_x0,_x0, + 0,0,_height - 1,_height - 1, _y0,_y0,_y0,_y0, 0,_height - 1,_height - 1,0, + _z0,_z0,_z0,_z0, 0,0,_depth - 1,_depth - 1, 0,0,_depth - 1,_depth - 1); + primitives.assign(); + CImg::vector(0,1,2,3,0,0,img_xy._width - 1,0,img_xy._width - 1,img_xy._height - 1,0,img_xy._height - 1). + move_to(primitives); + CImg::vector(4,5,6,7,0,0,img_xz._width - 1,0,img_xz._width - 1,img_xz._height - 1,0,img_xz._height - 1). + move_to(primitives); + CImg::vector(8,9,10,11,0,0,img_yz._width - 1,0,img_yz._width - 1,img_yz._height - 1,0,img_yz._height - 1). + move_to(primitives); + colors.assign(); + img_xy.move_to(colors); + img_xz.move_to(colors); + img_yz.move_to(colors); + return points; + } + + //! Generate a isoline of the image instance as a 3d object. + /** + \param[out] primitives The returned list of the 3d object primitives + (template type \e tf should be at least \e unsigned \e int). + \param isovalue The returned list of the 3d object colors. + \param size_x The number of subdivisions along the X-axis. + \param size_y The number of subdisivions along the Y-axis. + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). + \par Example + \code + const CImg img("reference.jpg"); + CImgList faces3d; + const CImg points3d = img.get_isoline3d(faces3d,100); + CImg().display_object3d("Isoline3d",points3d,faces3d,colors3d); + \endcode + \image html ref_isoline3d.jpg + **/ + template + CImg get_isoline3d(CImgList& primitives, const float isovalue, + const int size_x=-100, const int size_y=-100) const { + if (_spectrum>1) + throw CImgInstanceException(_cimg_instance + "get_isoline3d(): Instance is not a scalar image.", + cimg_instance); + if (_depth>1) + throw CImgInstanceException(_cimg_instance + "get_isoline3d(): Instance is not a 2d image.", + cimg_instance); + primitives.assign(); + if (is_empty()) return *this; + CImg vertices; + if ((size_x==-100 && size_y==-100) || (size_x==width() && size_y==height())) { + const _functor2d_int func(*this); + vertices = isoline3d(primitives,func,isovalue,0,0,width() - 1.0f,height() - 1.0f,width(),height()); + } else { + const _functor2d_float func(*this); + vertices = isoline3d(primitives,func,isovalue,0,0,width() - 1.0f,height() - 1.0f,size_x,size_y); + } + return vertices; + } + + //! Generate an isosurface of the image instance as a 3d object. + /** + \param[out] primitives The returned list of the 3d object primitives + (template type \e tf should be at least \e unsigned \e int). + \param isovalue The returned list of the 3d object colors. + \param size_x Number of subdivisions along the X-axis. + \param size_y Number of subdisivions along the Y-axis. + \param size_z Number of subdisivions along the Z-axis. + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). + \par Example + \code + const CImg img = CImg("reference.jpg").resize(-100,-100,20); + CImgList faces3d; + const CImg points3d = img.get_isosurface3d(faces3d,100); + CImg().display_object3d("Isosurface3d",points3d,faces3d,colors3d); + \endcode + \image html ref_isosurface3d.jpg + **/ + template + CImg get_isosurface3d(CImgList& primitives, const float isovalue, + const int size_x=-100, const int size_y=-100, const int size_z=-100) const { + if (_spectrum>1) + throw CImgInstanceException(_cimg_instance + "get_isosurface3d(): Instance is not a scalar image.", + cimg_instance); + primitives.assign(); + if (is_empty()) return *this; + CImg vertices; + if ((size_x==-100 && size_y==-100 && size_z==-100) || (size_x==width() && size_y==height() && size_z==depth())) { + const _functor3d_int func(*this); + vertices = isosurface3d(primitives,func,isovalue,0,0,0,width() - 1.0f,height() - 1.0f,depth() - 1.0f, + width(),height(),depth()); + } else { + const _functor3d_float func(*this); + vertices = isosurface3d(primitives,func,isovalue,0,0,0,width() - 1.0f,height() - 1.0f,depth() - 1.0f, + size_x,size_y,size_z); + } + return vertices; + } + + //! Compute 3d elevation of a function as a 3d object. + /** + \param[out] primitives Primitives data of the resulting 3d object. + \param func Elevation function. Is of type float (*func)(const float x,const float y). + \param x0 X-coordinate of the starting point. + \param y0 Y-coordinate of the starting point. + \param x1 X-coordinate of the ending point. + \param y1 Y-coordinate of the ending point. + \param size_x Resolution of the function along the X-axis. + \param size_y Resolution of the function along the Y-axis. + **/ + template + static CImg elevation3d(CImgList& primitives, const tfunc& func, + const float x0, const float y0, const float x1, const float y1, + const int size_x=256, const int size_y=256) { + const float + nx0 = x0=0?size_x:(nx1-nx0)*-size_x/100), + nsize_x = _nsize_x?_nsize_x:1, nsize_x1 = nsize_x - 1, + _nsize_y = (unsigned int)(size_y>=0?size_y:(ny1-ny0)*-size_y/100), + nsize_y = _nsize_y?_nsize_y:1, nsize_y1 = nsize_y - 1; + if (nsize_x<2 || nsize_y<2) + throw CImgArgumentException("CImg<%s>::elevation3d(): Invalid specified size (%d,%d).", + pixel_type(), + nsize_x,nsize_y); + + CImg vertices(nsize_x*nsize_y,3); + floatT *ptr_x = vertices.data(0,0), *ptr_y = vertices.data(0,1), *ptr_z = vertices.data(0,2); + for (unsigned int y = 0; y + static CImg elevation3d(CImgList& primitives, const char *const expression, + const float x0, const float y0, const float x1, const float y1, + const int size_x=256, const int size_y=256) { + const _functor2d_expr func(expression); + return elevation3d(primitives,func,x0,y0,x1,y1,size_x,size_y); + } + + //! Compute 0-isolines of a function, as a 3d object. + /** + \param[out] primitives Primitives data of the resulting 3d object. + \param func Elevation function. Is of type float (*func)(const float x,const float y). + \param isovalue Isovalue to extract from function. + \param x0 X-coordinate of the starting point. + \param y0 Y-coordinate of the starting point. + \param x1 X-coordinate of the ending point. + \param y1 Y-coordinate of the ending point. + \param size_x Resolution of the function along the X-axis. + \param size_y Resolution of the function along the Y-axis. + \note Use the marching squares algorithm for extracting the isolines. + **/ + template + static CImg isoline3d(CImgList& primitives, const tfunc& func, const float isovalue, + const float x0, const float y0, const float x1, const float y1, + const int size_x=256, const int size_y=256) { + static const unsigned int edges[16] = { 0x0, 0x9, 0x3, 0xa, 0x6, 0xf, 0x5, 0xc, 0xc, + 0x5, 0xf, 0x6, 0xa, 0x3, 0x9, 0x0 }; + static const int segments[16][4] = { { -1,-1,-1,-1 }, { 0,3,-1,-1 }, { 0,1,-1,-1 }, { 1,3,-1,-1 }, + { 1,2,-1,-1 }, { 0,1,2,3 }, { 0,2,-1,-1 }, { 2,3,-1,-1 }, + { 2,3,-1,-1 }, { 0,2,-1,-1}, { 0,3,1,2 }, { 1,2,-1,-1 }, + { 1,3,-1,-1 }, { 0,1,-1,-1}, { 0,3,-1,-1}, { -1,-1,-1,-1 } }; + const unsigned int + _nx = (unsigned int)(size_x>=0?size_x:cimg::round((x1-x0)*-size_x/100 + 1)), + _ny = (unsigned int)(size_y>=0?size_y:cimg::round((y1-y0)*-size_y/100 + 1)), + nx = _nx?_nx:1, + ny = _ny?_ny:1, + nxm1 = nx - 1, + nym1 = ny - 1; + primitives.assign(); + if (!nxm1 || !nym1) return CImg(); + const float dx = (x1 - x0)/nxm1, dy = (y1 - y0)/nym1; + CImgList vertices; + CImg indices1(nx,1,1,2,-1), indices2(nx,1,1,2); + CImg values1(nx), values2(nx); + float X = x0, Y = y0, nX = X + dx, nY = Y + dy; + + // Fill first line with values + cimg_forX(values1,x) { values1(x) = (float)func(X,Y); X+=dx; } + + // Run the marching squares algorithm + for (unsigned int yi = 0, nyi = 1; yi::vector(Xi,Y,0).move_to(vertices); + } + if ((edge&2) && indices1(nxi,1)<0) { + const float Yi = Y + (isovalue-val1)*dy/(val2-val1); + indices1(nxi,1) = vertices.width(); + CImg::vector(nX,Yi,0).move_to(vertices); + } + if ((edge&4) && indices2(xi,0)<0) { + const float Xi = X + (isovalue-val3)*dx/(val2-val3); + indices2(xi,0) = vertices.width(); + CImg::vector(Xi,nY,0).move_to(vertices); + } + if ((edge&8) && indices1(xi,1)<0) { + const float Yi = Y + (isovalue-val0)*dy/(val3-val0); + indices1(xi,1) = vertices.width(); + CImg::vector(X,Yi,0).move_to(vertices); + } + + // Create segments + for (const int *segment = segments[configuration]; *segment!=-1; ) { + const unsigned int p0 = (unsigned int)*(segment++), p1 = (unsigned int)*(segment++); + const tf + i0 = (tf)(_isoline3d_indice(p0,indices1,indices2,xi,nxi)), + i1 = (tf)(_isoline3d_indice(p1,indices1,indices2,xi,nxi)); + CImg::vector(i0,i1).move_to(primitives); + } + } + } + values1.swap(values2); + indices1.swap(indices2); + } + return vertices>'x'; + } + + //! Compute isolines of a function, as a 3d object \overloading. + template + static CImg isoline3d(CImgList& primitives, const char *const expression, const float isovalue, + const float x0, const float y0, const float x1, const float y1, + const int size_x=256, const int size_y=256) { + const _functor2d_expr func(expression); + return isoline3d(primitives,func,isovalue,x0,y0,x1,y1,size_x,size_y); + } + + template + static int _isoline3d_indice(const unsigned int edge, const CImg& indices1, const CImg& indices2, + const unsigned int x, const unsigned int nx) { + switch (edge) { + case 0 : return (int)indices1(x,0); + case 1 : return (int)indices1(nx,1); + case 2 : return (int)indices2(x,0); + case 3 : return (int)indices1(x,1); + } + return 0; + } + + //! Compute isosurface of a function, as a 3d object. + /** + \param[out] primitives Primitives data of the resulting 3d object. + \param func Implicit function. Is of type float (*func)(const float x, const float y, const float z). + \param isovalue Isovalue to extract. + \param x0 X-coordinate of the starting point. + \param y0 Y-coordinate of the starting point. + \param z0 Z-coordinate of the starting point. + \param x1 X-coordinate of the ending point. + \param y1 Y-coordinate of the ending point. + \param z1 Z-coordinate of the ending point. + \param size_x Resolution of the elevation function along the X-axis. + \param size_y Resolution of the elevation function along the Y-axis. + \param size_z Resolution of the elevation function along the Z-axis. + \note Use the marching cubes algorithm for extracting the isosurface. + **/ + template + static CImg isosurface3d(CImgList& primitives, const tfunc& func, const float isovalue, + const float x0, const float y0, const float z0, + const float x1, const float y1, const float z1, + const int size_x=32, const int size_y=32, const int size_z=32) { + static const unsigned int edges[256] = { + 0x000, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c, 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00, + 0x190, 0x99 , 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c, 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90, + 0x230, 0x339, 0x33 , 0x13a, 0x636, 0x73f, 0x435, 0x53c, 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30, + 0x3a0, 0x2a9, 0x1a3, 0xaa , 0x7a6, 0x6af, 0x5a5, 0x4ac, 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0, + 0x460, 0x569, 0x663, 0x76a, 0x66 , 0x16f, 0x265, 0x36c, 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60, + 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff , 0x3f5, 0x2fc, 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0, + 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55 , 0x15c, 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950, + 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc , 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0, + 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc, 0xcc , 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0, + 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c, 0x15c, 0x55 , 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650, + 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc, 0x2fc, 0x3f5, 0xff , 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0, + 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c, 0x36c, 0x265, 0x16f, 0x66 , 0x76a, 0x663, 0x569, 0x460, + 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac, 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa , 0x1a3, 0x2a9, 0x3a0, + 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c, 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33 , 0x339, 0x230, + 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c, 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99 , 0x190, + 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c, 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x000 + }; + + static const int triangles[256][16] = { + { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1 }, + { 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1 }, + { 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1 }, + { 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1 }, + { 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1 }, + { 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1 }, + { 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1 }, + { 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1 }, + { 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1 }, + { 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1 }, + { 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1 }, + { 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1 }, + { 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1 }, + { 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1 }, + { 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1 }, + { 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1 }, + { 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1 }, + { 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1 }, + { 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1 }, + { 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1 }, + { 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1 }, + { 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1 }, + { 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1 }, + { 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1 }, + { 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1 }, + { 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1 }, + { 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1 }, + { 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1 }, + { 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1 }, + { 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1 }, + { 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1 }, + { 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1 }, + { 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1 }, + { 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1 }, + { 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1 }, + { 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1 }, + { 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1 }, + { 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1 }, + { 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1 }, + { 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1 }, + { 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1 }, + { 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1 }, + { 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1 }, + { 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1 }, + { 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1 }, + { 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1 }, + { 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1 }, + { 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1 }, + { 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1 }, + { 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1 }, + { 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1 }, + { 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1 }, + { 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1 }, + { 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1 }, + { 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1 }, + { 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1 }, + { 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1 }, + { 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1 }, + { 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1 }, + { 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1 }, + { 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1 }, + { 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1 }, + { 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1 }, + { 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1 }, + { 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1 }, + { 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1 }, + { 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 }, + { 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1 }, + { 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1 }, + { 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1 }, + { 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1 }, + { 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1 }, + { 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1 }, + { 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1 }, + { 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1 }, + { 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1 }, + { 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1 }, + { 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1 }, + { 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1 }, + { 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1 }, + { 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1 }, + { 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1 }, + { 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1 }, + { 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1 }, + { 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1 }, + { 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1 }, + { 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1 }, + { 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1 }, + { 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1 }, + { 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1 }, + { 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1 }, + { 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1 }, + { 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1 }, + { 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1 }, + { 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1 }, + { 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1 }, + { 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1 }, + { 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1 }, + { 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1 }, + { 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1 }, + { 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1 }, + { 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1 }, + { 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1 }, + { 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1 }, + { 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1 }, + { 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1 }, + { 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1 }, + { 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1 }, + { 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1 }, + { 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1 }, + { 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1 }, + { 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1 }, + { 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1 }, + { 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1 }, + { 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1 }, + { 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1 }, + { 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1 }, + { 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1 }, + { 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1 }, + { 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1 }, + { 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1 }, + { 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1 }, + { 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1 }, + { 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1 }, + { 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1 }, + { 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1 }, + { 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1 }, + { 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1 }, + { 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1 }, + { 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1 }, + { 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1 }, + { 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1 }, + { 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1 }, + { 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1 }, + { 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1 }, + { 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1 }, + { 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1 }, + { 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1 }, + { 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1 }, + { 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1 }, + { 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1 }, + { 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1 }, + { 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1 }, + { 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1 }, + { 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1 }, + { 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, + { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } + }; + + const unsigned int + _nx = (unsigned int)(size_x>=0?size_x:cimg::round((x1-x0)*-size_x/100 + 1)), + _ny = (unsigned int)(size_y>=0?size_y:cimg::round((y1-y0)*-size_y/100 + 1)), + _nz = (unsigned int)(size_z>=0?size_z:cimg::round((z1-z0)*-size_z/100 + 1)), + nx = _nx?_nx:1, + ny = _ny?_ny:1, + nz = _nz?_nz:1, + nxm1 = nx - 1, + nym1 = ny - 1, + nzm1 = nz - 1; + primitives.assign(); + if (!nxm1 || !nym1 || !nzm1) return CImg(); + const float dx = (x1 - x0)/nxm1, dy = (y1 - y0)/nym1, dz = (z1 - z0)/nzm1; + CImgList vertices; + CImg indices1(nx,ny,1,3,-1), indices2(indices1); + CImg values1(nx,ny), values2(nx,ny); + float X = 0, Y = 0, Z = 0, nX = 0, nY = 0, nZ = 0; + + // Fill the first plane with function values + Y = y0; + cimg_forY(values1,y) { + X = x0; + cimg_forX(values1,x) { values1(x,y) = (float)func(X,Y,z0); X+=dx; } + Y+=dy; + } + + // Run Marching Cubes algorithm + Z = z0; nZ = Z + dz; + for (unsigned int zi = 0; zi::vector(Xi,Y,Z).move_to(vertices); + } + if ((edge&2) && indices1(nxi,yi,1)<0) { + const float Yi = Y + (isovalue-val1)*dy/(val2-val1); + indices1(nxi,yi,1) = vertices.width(); + CImg::vector(nX,Yi,Z).move_to(vertices); + } + if ((edge&4) && indices1(xi,nyi,0)<0) { + const float Xi = X + (isovalue-val3)*dx/(val2-val3); + indices1(xi,nyi,0) = vertices.width(); + CImg::vector(Xi,nY,Z).move_to(vertices); + } + if ((edge&8) && indices1(xi,yi,1)<0) { + const float Yi = Y + (isovalue-val0)*dy/(val3-val0); + indices1(xi,yi,1) = vertices.width(); + CImg::vector(X,Yi,Z).move_to(vertices); + } + if ((edge&16) && indices2(xi,yi,0)<0) { + const float Xi = X + (isovalue-val4)*dx/(val5-val4); + indices2(xi,yi,0) = vertices.width(); + CImg::vector(Xi,Y,nZ).move_to(vertices); + } + if ((edge&32) && indices2(nxi,yi,1)<0) { + const float Yi = Y + (isovalue-val5)*dy/(val6-val5); + indices2(nxi,yi,1) = vertices.width(); + CImg::vector(nX,Yi,nZ).move_to(vertices); + } + if ((edge&64) && indices2(xi,nyi,0)<0) { + const float Xi = X + (isovalue-val7)*dx/(val6-val7); + indices2(xi,nyi,0) = vertices.width(); + CImg::vector(Xi,nY,nZ).move_to(vertices); + } + if ((edge&128) && indices2(xi,yi,1)<0) { + const float Yi = Y + (isovalue-val4)*dy/(val7-val4); + indices2(xi,yi,1) = vertices.width(); + CImg::vector(X,Yi,nZ).move_to(vertices); + } + if ((edge&256) && indices1(xi,yi,2)<0) { + const float Zi = Z+ (isovalue-val0)*dz/(val4-val0); + indices1(xi,yi,2) = vertices.width(); + CImg::vector(X,Y,Zi).move_to(vertices); + } + if ((edge&512) && indices1(nxi,yi,2)<0) { + const float Zi = Z + (isovalue-val1)*dz/(val5-val1); + indices1(nxi,yi,2) = vertices.width(); + CImg::vector(nX,Y,Zi).move_to(vertices); + } + if ((edge&1024) && indices1(nxi,nyi,2)<0) { + const float Zi = Z + (isovalue-val2)*dz/(val6-val2); + indices1(nxi,nyi,2) = vertices.width(); + CImg::vector(nX,nY,Zi).move_to(vertices); + } + if ((edge&2048) && indices1(xi,nyi,2)<0) { + const float Zi = Z + (isovalue-val3)*dz/(val7-val3); + indices1(xi,nyi,2) = vertices.width(); + CImg::vector(X,nY,Zi).move_to(vertices); + } + + // Create triangles + for (const int *triangle = triangles[configuration]; *triangle!=-1; ) { + const unsigned int + p0 = (unsigned int)*(triangle++), + p1 = (unsigned int)*(triangle++), + p2 = (unsigned int)*(triangle++); + const tf + i0 = (tf)(_isosurface3d_indice(p0,indices1,indices2,xi,yi,nxi,nyi)), + i1 = (tf)(_isosurface3d_indice(p1,indices1,indices2,xi,yi,nxi,nyi)), + i2 = (tf)(_isosurface3d_indice(p2,indices1,indices2,xi,yi,nxi,nyi)); + CImg::vector(i0,i2,i1).move_to(primitives); + } + } + } + } + cimg::swap(values1,values2); + cimg::swap(indices1,indices2); + } + return vertices>'x'; + } + + //! Compute isosurface of a function, as a 3d object \overloading. + template + static CImg isosurface3d(CImgList& primitives, const char *const expression, const float isovalue, + const float x0, const float y0, const float z0, + const float x1, const float y1, const float z1, + const int dx=32, const int dy=32, const int dz=32) { + const _functor3d_expr func(expression); + return isosurface3d(primitives,func,isovalue,x0,y0,z0,x1,y1,z1,dx,dy,dz); + } + + template + static int _isosurface3d_indice(const unsigned int edge, const CImg& indices1, const CImg& indices2, + const unsigned int x, const unsigned int y, + const unsigned int nx, const unsigned int ny) { + switch (edge) { + case 0 : return indices1(x,y,0); + case 1 : return indices1(nx,y,1); + case 2 : return indices1(x,ny,0); + case 3 : return indices1(x,y,1); + case 4 : return indices2(x,y,0); + case 5 : return indices2(nx,y,1); + case 6 : return indices2(x,ny,0); + case 7 : return indices2(x,y,1); + case 8 : return indices1(x,y,2); + case 9 : return indices1(nx,y,2); + case 10 : return indices1(nx,ny,2); + case 11 : return indices1(x,ny,2); + } + return 0; + } + + // Define functors for accessing image values (used in previous functions). + struct _functor2d_int { + const CImg& ref; + _functor2d_int(const CImg& pref):ref(pref) {} + float operator()(const float x, const float y) const { + return (float)ref((int)x,(int)y); + } + }; + + struct _functor2d_float { + const CImg& ref; + _functor2d_float(const CImg& pref):ref(pref) {} + float operator()(const float x, const float y) const { + return (float)ref._linear_atXY(x,y); + } + }; + + struct _functor2d_expr { + _cimg_math_parser *mp; + ~_functor2d_expr() { mp->end(); delete mp; } + _functor2d_expr(const char *const expr):mp(0) { + mp = new _cimg_math_parser(expr,0,CImg::const_empty(),0); + } + float operator()(const float x, const float y) const { + return (float)(*mp)(x,y,0,0); + } + }; + + struct _functor3d_int { + const CImg& ref; + _functor3d_int(const CImg& pref):ref(pref) {} + float operator()(const float x, const float y, const float z) const { + return (float)ref((int)x,(int)y,(int)z); + } + }; + + struct _functor3d_float { + const CImg& ref; + _functor3d_float(const CImg& pref):ref(pref) {} + float operator()(const float x, const float y, const float z) const { + return (float)ref._linear_atXYZ(x,y,z); + } + }; + + struct _functor3d_expr { + _cimg_math_parser *mp; + ~_functor3d_expr() { mp->end(); delete mp; } + _functor3d_expr(const char *const expr):mp(0) { + mp = new _cimg_math_parser(expr,0,CImg::const_empty(),0); + } + float operator()(const float x, const float y, const float z) const { + return (float)(*mp)(x,y,z,0); + } + }; + + struct _functor4d_int { + const CImg& ref; + _functor4d_int(const CImg& pref):ref(pref) {} + float operator()(const float x, const float y, const float z, const unsigned int c) const { + return (float)ref((int)x,(int)y,(int)z,c); + } + }; + + //! Generate a 3d box object. + /** + \param[out] primitives The returned list of the 3d object primitives + (template type \e tf should be at least \e unsigned \e int). + \param size_x The width of the box (dimension along the X-axis). + \param size_y The height of the box (dimension along the Y-axis). + \param size_z The depth of the box (dimension along the Z-axis). + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). + \par Example + \code + CImgList faces3d; + const CImg points3d = CImg::box3d(faces3d,10,20,30); + CImg().display_object3d("Box3d",points3d,faces3d); + \endcode + \image html ref_box3d.jpg + **/ + template + static CImg box3d(CImgList& primitives, + const float size_x=200, const float size_y=100, const float size_z=100) { + primitives.assign(6,1,4,1,1, 0,3,2,1, 4,5,6,7, 0,1,5,4, 3,7,6,2, 0,4,7,3, 1,2,6,5); + return CImg(8,3,1,1, + 0.,size_x,size_x, 0., 0.,size_x,size_x, 0., + 0., 0.,size_y,size_y, 0., 0.,size_y,size_y, + 0., 0., 0., 0.,size_z,size_z,size_z,size_z); + } + + //! Generate a 3d cone. + /** + \param[out] primitives The returned list of the 3d object primitives + (template type \e tf should be at least \e unsigned \e int). + \param radius The radius of the cone basis. + \param size_z The cone's height. + \param subdivisions The number of basis angular subdivisions. + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). + \par Example + \code + CImgList faces3d; + const CImg points3d = CImg::cone3d(faces3d,50); + CImg().display_object3d("Cone3d",points3d,faces3d); + \endcode + \image html ref_cone3d.jpg + **/ + template + static CImg cone3d(CImgList& primitives, + const float radius=50, const float size_z=100, const unsigned int subdivisions=24) { + primitives.assign(); + if (!subdivisions) return CImg(); + CImgList vertices(2,1,3,1,1, + 0.,0.,size_z, + 0.,0.,0.); + for (float delta = 360.0f/subdivisions, angle = 0; angle<360; angle+=delta) { + const float a = (float)(angle*cimg::PI/180); + CImg::vector((float)(radius*std::cos(a)),(float)(radius*std::sin(a)),0).move_to(vertices); + } + const unsigned int nbr = vertices._width - 2; + for (unsigned int p = 0; p::vector(1,next,curr).move_to(primitives); + CImg::vector(0,curr,next).move_to(primitives); + } + return vertices>'x'; + } + + //! Generate a 3d cylinder. + /** + \param[out] primitives The returned list of the 3d object primitives + (template type \e tf should be at least \e unsigned \e int). + \param radius The radius of the cylinder basis. + \param size_z The cylinder's height. + \param subdivisions The number of basis angular subdivisions. + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). + \par Example + \code + CImgList faces3d; + const CImg points3d = CImg::cylinder3d(faces3d,50); + CImg().display_object3d("Cylinder3d",points3d,faces3d); + \endcode + \image html ref_cylinder3d.jpg + **/ + template + static CImg cylinder3d(CImgList& primitives, + const float radius=50, const float size_z=100, const unsigned int subdivisions=24) { + primitives.assign(); + if (!subdivisions) return CImg(); + CImgList vertices(2,1,3,1,1, + 0.,0.,0., + 0.,0.,size_z); + for (float delta = 360.0f/subdivisions, angle = 0; angle<360; angle+=delta) { + const float a = (float)(angle*cimg::PI/180); + CImg::vector((float)(radius*std::cos(a)),(float)(radius*std::sin(a)),0.0f).move_to(vertices); + CImg::vector((float)(radius*std::cos(a)),(float)(radius*std::sin(a)),size_z).move_to(vertices); + } + const unsigned int nbr = (vertices._width - 2)/2; + for (unsigned int p = 0; p::vector(0,next,curr).move_to(primitives); + CImg::vector(1,curr + 1,next + 1).move_to(primitives); + CImg::vector(curr,next,next + 1,curr + 1).move_to(primitives); + } + return vertices>'x'; + } + + //! Generate a 3d torus. + /** + \param[out] primitives The returned list of the 3d object primitives + (template type \e tf should be at least \e unsigned \e int). + \param radius1 The large radius. + \param radius2 The small radius. + \param subdivisions1 The number of angular subdivisions for the large radius. + \param subdivisions2 The number of angular subdivisions for the small radius. + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). + \par Example + \code + CImgList faces3d; + const CImg points3d = CImg::torus3d(faces3d,20,4); + CImg().display_object3d("Torus3d",points3d,faces3d); + \endcode + \image html ref_torus3d.jpg + **/ + template + static CImg torus3d(CImgList& primitives, + const float radius1=100, const float radius2=30, + const unsigned int subdivisions1=24, const unsigned int subdivisions2=12) { + primitives.assign(); + if (!subdivisions1 || !subdivisions2) return CImg(); + CImgList vertices; + for (unsigned int v = 0; v::vector(x,y,z).move_to(vertices); + } + } + for (unsigned int vv = 0; vv::vector(svv + nu,svv + uu,snv + uu,snv + nu).move_to(primitives); + } + } + return vertices>'x'; + } + + //! Generate a 3d XY-plane. + /** + \param[out] primitives The returned list of the 3d object primitives + (template type \e tf should be at least \e unsigned \e int). + \param size_x The width of the plane (dimension along the X-axis). + \param size_y The height of the plane (dimensions along the Y-axis). + \param subdivisions_x The number of planar subdivisions along the X-axis. + \param subdivisions_y The number of planar subdivisions along the Y-axis. + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). + \par Example + \code + CImgList faces3d; + const CImg points3d = CImg::plane3d(faces3d,100,50); + CImg().display_object3d("Plane3d",points3d,faces3d); + \endcode + \image html ref_plane3d.jpg + **/ + template + static CImg plane3d(CImgList& primitives, + const float size_x=100, const float size_y=100, + const unsigned int subdivisions_x=10, const unsigned int subdivisions_y=10) { + primitives.assign(); + if (!subdivisions_x || !subdivisions_y) return CImg(); + CImgList vertices; + const unsigned int w = subdivisions_x + 1, h = subdivisions_y + 1; + const float fx = (float)size_x/w, fy = (float)size_y/h; + for (unsigned int y = 0; y::vector(fx*x,fy*y,0).move_to(vertices); + for (unsigned int y = 0; y::vector(off1,off4,off3,off2).move_to(primitives); + } + return vertices>'x'; + } + + //! Generate a 3d sphere. + /** + \param[out] primitives The returned list of the 3d object primitives + (template type \e tf should be at least \e unsigned \e int). + \param radius The radius of the sphere (dimension along the X-axis). + \param subdivisions The number of recursive subdivisions from an initial icosahedron. + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). + \par Example + \code + CImgList faces3d; + const CImg points3d = CImg::sphere3d(faces3d,100,4); + CImg().display_object3d("Sphere3d",points3d,faces3d); + \endcode + \image html ref_sphere3d.jpg + **/ + template + static CImg sphere3d(CImgList& primitives, + const float radius=50, const unsigned int subdivisions=3) { + + // Create initial icosahedron + primitives.assign(); + const double tmp = (1 + std::sqrt(5.0f))/2, a = 1.0/std::sqrt(1 + tmp*tmp), b = tmp*a; + CImgList vertices(12,1,3,1,1, b,a,0.0, -b,a,0.0, -b,-a,0.0, b,-a,0.0, a,0.0,b, a,0.0,-b, + -a,0.0,-b, -a,0.0,b, 0.0,b,a, 0.0,-b,a, 0.0,-b,-a, 0.0,b,-a); + primitives.assign(20,1,3,1,1, 4,8,7, 4,7,9, 5,6,11, 5,10,6, 0,4,3, 0,3,5, 2,7,1, 2,1,6, + 8,0,11, 8,11,1, 9,10,3, 9,2,10, 8,4,0, 11,0,5, 4,9,3, + 5,3,10, 7,8,1, 6,1,11, 7,2,9, 6,10,2); + // edge - length/2 + float he = (float)a; + + // Recurse subdivisions + for (unsigned int i = 0; i::vector(nx0,ny0,nz0).move_to(vertices); i0 = vertices.width() - 1; } + if (i1<0) { CImg::vector(nx1,ny1,nz1).move_to(vertices); i1 = vertices.width() - 1; } + if (i2<0) { CImg::vector(nx2,ny2,nz2).move_to(vertices); i2 = vertices.width() - 1; } + primitives.remove(0); + CImg::vector(p0,i0,i1).move_to(primitives); + CImg::vector((tf)i0,(tf)p1,(tf)i2).move_to(primitives); + CImg::vector((tf)i1,(tf)i2,(tf)p2).move_to(primitives); + CImg::vector((tf)i1,(tf)i0,(tf)i2).move_to(primitives); + } + } + return (vertices>'x')*=radius; + } + + //! Generate a 3d ellipsoid. + /** + \param[out] primitives The returned list of the 3d object primitives + (template type \e tf should be at least \e unsigned \e int). + \param tensor The tensor which gives the shape and size of the ellipsoid. + \param subdivisions The number of recursive subdivisions from an initial stretched icosahedron. + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). + \par Example + \code + CImgList faces3d; + const CImg tensor = CImg::diagonal(10,7,3), + points3d = CImg::ellipsoid3d(faces3d,tensor,4); + CImg().display_object3d("Ellipsoid3d",points3d,faces3d); + \endcode + \image html ref_ellipsoid3d.jpg + **/ + template + static CImg ellipsoid3d(CImgList& primitives, + const CImg& tensor, const unsigned int subdivisions=3) { + primitives.assign(); + if (!subdivisions) return CImg(); + CImg S, V; + tensor.symmetric_eigen(S,V); + const float orient = + (V(0,1)*V(1,2) - V(0,2)*V(1,1))*V(2,0) + + (V(0,2)*V(1,0) - V(0,0)*V(1,2))*V(2,1) + + (V(0,0)*V(1,1) - V(0,1)*V(1,0))*V(2,2); + if (orient<0) { V(2,0) = -V(2,0); V(2,1) = -V(2,1); V(2,2) = -V(2,2); } + const float l0 = S[0], l1 = S[1], l2 = S[2]; + CImg vertices = sphere3d(primitives,1.0,subdivisions); + vertices.get_shared_row(0)*=l0; + vertices.get_shared_row(1)*=l1; + vertices.get_shared_row(2)*=l2; + return V*vertices; + } + + //! Convert 3d object into a CImg3d representation. + /** + \param primitives Primitives data of the 3d object. + \param colors Colors data of the 3d object. + \param opacities Opacities data of the 3d object. + \param full_check Tells if full checking of the 3d object must be performed. + **/ + template + CImg& object3dtoCImg3d(const CImgList& primitives, + const CImgList& colors, + const to& opacities, + const bool full_check=true) { + return get_object3dtoCImg3d(primitives,colors,opacities,full_check).move_to(*this); + } + + //! Convert 3d object into a CImg3d representation \overloading. + template + CImg& object3dtoCImg3d(const CImgList& primitives, + const CImgList& colors, + const bool full_check=true) { + return get_object3dtoCImg3d(primitives,colors,full_check).move_to(*this); + } + + //! Convert 3d object into a CImg3d representation \overloading. + template + CImg& object3dtoCImg3d(const CImgList& primitives, + const bool full_check=true) { + return get_object3dtoCImg3d(primitives,full_check).move_to(*this); + } + + //! Convert 3d object into a CImg3d representation \overloading. + CImg& object3dtoCImg3d(const bool full_check=true) { + return get_object3dtoCImg3d(full_check).move_to(*this); + } + + //! Convert 3d object into a CImg3d representation \newinstance. + template + CImg get_object3dtoCImg3d(const CImgList& primitives, + const CImgList& colors, + const to& opacities, + const bool full_check=true) const { + CImg error_message(1024); + if (!is_object3d(primitives,colors,opacities,full_check,error_message)) + throw CImgInstanceException(_cimg_instance + "object3dtoCImg3d(): Invalid specified 3d object (%u,%u) (%s).", + cimg_instance,_width,primitives._width,error_message.data()); + CImg res(1,_size_object3dtoCImg3d(primitives,colors,opacities)); + float *ptrd = res._data; + + // Put magick number. + *(ptrd++) = 'C' + 0.5f; *(ptrd++) = 'I' + 0.5f; *(ptrd++) = 'm' + 0.5f; + *(ptrd++) = 'g' + 0.5f; *(ptrd++) = '3' + 0.5f; *(ptrd++) = 'd' + 0.5f; + + // Put number of vertices and primitives. + *(ptrd++) = cimg::uint2float(_width); + *(ptrd++) = cimg::uint2float(primitives._width); + + // Put vertex data. + if (is_empty() || !primitives) return res; + const T *ptrx = data(0,0), *ptry = data(0,1), *ptrz = data(0,2); + cimg_forX(*this,p) { + *(ptrd++) = (float)*(ptrx++); + *(ptrd++) = (float)*(ptry++); + *(ptrd++) = (float)*(ptrz++); + } + + // Put primitive data. + cimglist_for(primitives,p) { + *(ptrd++) = (float)primitives[p].size(); + const tp *ptrp = primitives[p]._data; + cimg_foroff(primitives[p],i) *(ptrd++) = cimg::uint2float((unsigned int)*(ptrp++)); + } + + // Put color/texture data. + const unsigned int csiz = std::min(colors._width,primitives._width); + for (int c = 0; c<(int)csiz; ++c) { + const CImg& color = colors[c]; + const tc *ptrc = color._data; + if (color.size()==3) { *(ptrd++) = (float)*(ptrc++); *(ptrd++) = (float)*(ptrc++); *(ptrd++) = (float)*ptrc; } + else { + *(ptrd++) = -128.0f; + int shared_ind = -1; + if (color.is_shared()) for (int i = 0; i + float* _object3dtoCImg3d(const CImgList& opacities, float *ptrd) const { + cimglist_for(opacities,o) { + const CImg& opacity = opacities[o]; + const to *ptro = opacity._data; + if (opacity.size()==1) *(ptrd++) = (float)*ptro; + else { + *(ptrd++) = -128.0f; + int shared_ind = -1; + if (opacity.is_shared()) for (int i = 0; i + float* _object3dtoCImg3d(const CImg& opacities, float *ptrd) const { + const to *ptro = opacities._data; + cimg_foroff(opacities,o) *(ptrd++) = (float)*(ptro++); + return ptrd; + } + + template + unsigned int _size_object3dtoCImg3d(const CImgList& primitives, + const CImgList& colors, + const CImgList& opacities) const { + unsigned int siz = 8U + 3*_width; + cimglist_for(primitives,p) siz+=primitives[p].size() + 1; + for (int c = std::min(primitives.width(),colors.width()) - 1; c>=0; --c) { + if (colors[c].is_shared()) siz+=4; + else { const unsigned int csiz = colors[c].size(); siz+=(csiz!=3)?4 + csiz:3; } + } + if (colors._width + unsigned int _size_object3dtoCImg3d(const CImgList& primitives, + const CImgList& colors, + const CImg& opacities) const { + unsigned int siz = 8U + 3*_width; + cimglist_for(primitives,p) siz+=primitives[p].size() + 1; + for (int c = std::min(primitives.width(),colors.width()) - 1; c>=0; --c) { + const unsigned int csiz = colors[c].size(); siz+=(csiz!=3)?4 + csiz:3; + } + if (colors._width + CImg get_object3dtoCImg3d(const CImgList& primitives, + const CImgList& colors, + const bool full_check=true) const { + CImgList opacities; + return get_object3dtoCImg3d(primitives,colors,opacities,full_check); + } + + //! Convert 3d object into a CImg3d representation \overloading. + template + CImg get_object3dtoCImg3d(const CImgList& primitives, + const bool full_check=true) const { + CImgList colors, opacities; + return get_object3dtoCImg3d(primitives,colors,opacities,full_check); + } + + //! Convert 3d object into a CImg3d representation \overloading. + CImg get_object3dtoCImg3d(const bool full_check=true) const { + CImgList opacities, colors; + CImgList primitives(width(),1,1,1,1); + cimglist_for(primitives,p) primitives(p,0) = p; + return get_object3dtoCImg3d(primitives,colors,opacities,full_check); + } + + //! Convert CImg3d representation into a 3d object. + /** + \param[out] primitives Primitives data of the 3d object. + \param[out] colors Colors data of the 3d object. + \param[out] opacities Opacities data of the 3d object. + \param full_check Tells if full checking of the 3d object must be performed. + **/ + template + CImg& CImg3dtoobject3d(CImgList& primitives, + CImgList& colors, + CImgList& opacities, + const bool full_check=true) { + return get_CImg3dtoobject3d(primitives,colors,opacities,full_check).move_to(*this); + } + + //! Convert CImg3d representation into a 3d object \newinstance. + template + CImg get_CImg3dtoobject3d(CImgList& primitives, + CImgList& colors, + CImgList& opacities, + const bool full_check=true) const { + CImg error_message(1024); + if (!is_CImg3d(full_check,error_message)) + throw CImgInstanceException(_cimg_instance + "CImg3dtoobject3d(): image instance is not a CImg3d (%s).", + cimg_instance,error_message.data()); + const T *ptrs = _data + 6; + const unsigned int + nb_points = cimg::float2uint((float)*(ptrs++)), + nb_primitives = cimg::float2uint((float)*(ptrs++)); + const CImg points = CImg(ptrs,3,nb_points,1,1,true).get_transpose(); + ptrs+=3*nb_points; + primitives.assign(nb_primitives); + cimglist_for(primitives,p) { + const unsigned int nb_inds = (unsigned int)*(ptrs++); + primitives[p].assign(1,nb_inds); + tp *ptrp = primitives[p]._data; + for (unsigned int i = 0; i + CImg& _draw_scanline(const int x0, const int x1, const int y, + const tc *const color, const float opacity, + const float brightness, + const float nopacity, const float copacity, const ulongT whd) { + static const T maxval = (T)std::min(cimg::type::max(),(T)cimg::type::max()); + const int nx0 = x0>0?x0:0, nx1 = x1=0) { + const tc *col = color; + const ulongT off = whd - dx - 1; + T *ptrd = data(nx0,y); + if (opacity>=1) { // ** Opaque drawing ** + if (brightness==1) { // Brightness==1 + if (sizeof(T)!=1) cimg_forC(*this,c) { + const T val = (T)*(col++); + for (int x = dx; x>=0; --x) *(ptrd++) = val; + ptrd+=off; + } else cimg_forC(*this,c) { + const T val = (T)*(col++); + std::memset(ptrd,(int)val,dx + 1); + ptrd+=whd; + } + } else if (brightness<1) { // Brightness<1 + if (sizeof(T)!=1) cimg_forC(*this,c) { + const T val = (T)(*(col++)*brightness); + for (int x = dx; x>=0; --x) *(ptrd++) = val; + ptrd+=off; + } else cimg_forC(*this,c) { + const T val = (T)(*(col++)*brightness); + std::memset(ptrd,(int)val,dx + 1); + ptrd+=whd; + } + } else { // Brightness>1 + if (sizeof(T)!=1) cimg_forC(*this,c) { + const T val = (T)((2-brightness)**(col++) + (brightness - 1)*maxval); + for (int x = dx; x>=0; --x) *(ptrd++) = val; + ptrd+=off; + } else cimg_forC(*this,c) { + const T val = (T)((2-brightness)**(col++) + (brightness - 1)*maxval); + std::memset(ptrd,(int)val,dx + 1); + ptrd+=whd; + } + } + } else { // ** Transparent drawing ** + if (brightness==1) { // Brightness==1 + cimg_forC(*this,c) { + const Tfloat val = *(col++)*nopacity; + for (int x = dx; x>=0; --x) { *ptrd = (T)(val + *ptrd*copacity); ++ptrd; } + ptrd+=off; + } + } else if (brightness<=1) { // Brightness<1 + cimg_forC(*this,c) { + const Tfloat val = *(col++)*brightness*nopacity; + for (int x = dx; x>=0; --x) { *ptrd = (T)(val + *ptrd*copacity); ++ptrd; } + ptrd+=off; + } + } else { // Brightness>1 + cimg_forC(*this,c) { + const Tfloat val = ((2-brightness)**(col++) + (brightness - 1)*maxval)*nopacity; + for (int x = dx; x>=0; --x) { *ptrd = (T)(val + *ptrd*copacity); ++ptrd; } + ptrd+=off; + } + } + } + } + return *this; + } + + //! Draw a 3d point. + /** + \param x0 X-coordinate of the point. + \param y0 Y-coordinate of the point. + \param z0 Z-coordinate of the point. + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param opacity Drawing opacity. + \note + - To set pixel values without clipping needs, you should use the faster CImg::operator()() function. + \par Example: + \code + CImg img(100,100,1,3,0); + const unsigned char color[] = { 255,128,64 }; + img.draw_point(50,50,color); + \endcode + **/ + template + CImg& draw_point(const int x0, const int y0, const int z0, + const tc *const color, const float opacity=1) { + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_point(): Specified color is (null).", + cimg_instance); + if (x0>=0 && y0>=0 && z0>=0 && x0=1) cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=whd; } + else cimg_forC(*this,c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } + } + return *this; + } + + //! Draw a 2d point \simplification. + template + CImg& draw_point(const int x0, const int y0, + const tc *const color, const float opacity=1) { + return draw_point(x0,y0,0,color,opacity); + } + + // Draw a points cloud. + /** + \param points Image of vertices coordinates. + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param opacity Drawing opacity. + **/ + template + CImg& draw_point(const CImg& points, + const tc *const color, const float opacity=1) { + if (is_empty() || !points) return *this; + switch (points._height) { + case 0 : case 1 : + throw CImgArgumentException(_cimg_instance + "draw_point(): Invalid specified point set (%u,%u,%u,%u,%p).", + cimg_instance, + points._width,points._height,points._depth,points._spectrum,points._data); + case 2 : { + cimg_forX(points,i) draw_point((int)points(i,0),(int)points(i,1),color,opacity); + } break; + default : { + cimg_forX(points,i) draw_point((int)points(i,0),(int)points(i,1),(int)points(i,2),color,opacity); + } + } + return *this; + } + + //! Draw a 2d line. + /** + \param x0 X-coordinate of the starting line point. + \param y0 Y-coordinate of the starting line point. + \param x1 X-coordinate of the ending line point. + \param y1 Y-coordinate of the ending line point. + \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. + \param opacity Drawing opacity. + \param pattern An integer whose bits describe the line pattern. + \param init_hatch Tells if a reinitialization of the hash state must be done. + \note + - Line routine uses Bresenham's algorithm. + - Set \p init_hatch = false to draw consecutive hatched segments without breaking the line pattern. + \par Example: + \code + CImg img(100,100,1,3,0); + const unsigned char color[] = { 255,128,64 }; + img.draw_line(40,40,80,70,color); + \endcode + **/ + template + CImg& draw_line(const int x0, const int y0, + const int x1, const int y1, + const tc *const color, const float opacity=1, + const unsigned int pattern=~0U, const bool init_hatch=true) { + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_line(): Specified color is (null).", + cimg_instance); + static unsigned int hatch = ~0U - (~0U>>1); + if (init_hatch) hatch = ~0U - (~0U>>1); + const bool xdir = x0=width()) return *this; + if (xleft<0) { yleft-=(int)((float)xleft*((float)yright - yleft)/((float)xright - xleft)); xleft = 0; } + if (xright>=width()) { + yright-=(int)(((float)xright - width())*((float)yright - yleft)/((float)xright - xleft)); + xright = width() - 1; + } + if (ydown<0 || yup>=height()) return *this; + if (yup<0) { xup-=(int)((float)yup*((float)xdown - xup)/((float)ydown - yup)); yup = 0; } + if (ydown>=height()) { + xdown-=(int)(((float)ydown - height())*((float)xdown - xup)/((float)ydown - yup)); + ydown = height() - 1; + } + T *ptrd0 = data(nx0,ny0); + int dx = xright - xleft, dy = ydown - yup; + const bool steep = dy>dx; + if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); + const longT + offx = (longT)(nx0=1) { + if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { + if (pattern&hatch) { + T *ptrd = ptrd0; const tc* col = color; + cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=wh; } + } + hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); + ptrd0+=offx; + if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } + } else for (int error = dx>>1, x = 0; x<=dx; ++x) { + T *ptrd = ptrd0; const tc* col = color; cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=wh; } + ptrd0+=offx; + if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } + } + } else { + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { + if (pattern&hatch) { + T *ptrd = ptrd0; const tc* col = color; + cimg_forC(*this,c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } + } + hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); + ptrd0+=offx; + if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } + } else for (int error = dx>>1, x = 0; x<=dx; ++x) { + T *ptrd = ptrd0; const tc* col = color; + cimg_forC(*this,c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } + ptrd0+=offx; + if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } + } + } + return *this; + } + + //! Draw a 2d line, with z-buffering. + /** + \param zbuffer Zbuffer image. + \param x0 X-coordinate of the starting point. + \param y0 Y-coordinate of the starting point. + \param z0 Z-coordinate of the starting point + \param x1 X-coordinate of the ending point. + \param y1 Y-coordinate of the ending point. + \param z1 Z-coordinate of the ending point. + \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. + \param opacity Drawing opacity. + \param pattern An integer whose bits describe the line pattern. + \param init_hatch Tells if a reinitialization of the hash state must be done. + **/ + template + CImg& draw_line(CImg& zbuffer, + const int x0, const int y0, const float z0, + const int x1, const int y1, const float z1, + const tc *const color, const float opacity=1, + const unsigned int pattern=~0U, const bool init_hatch=true) { + typedef typename cimg::superset::type tzfloat; + if (is_empty() || z0<=0 || z1<=0) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_line(): Specified color is (null).", + cimg_instance); + if (!is_sameXY(zbuffer)) + throw CImgArgumentException(_cimg_instance + "draw_line(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have " + "different dimensions.", + cimg_instance, + zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); + static unsigned int hatch = ~0U - (~0U>>1); + if (init_hatch) hatch = ~0U - (~0U>>1); + const bool xdir = x0=width()) return *this; + if (xleft<0) { + const float D = (float)xright - xleft; + yleft-=(int)((float)xleft*((float)yright - yleft)/D); + zleft-=(tzfloat)xleft*(zright - zleft)/D; + xleft = 0; + } + if (xright>=width()) { + const float d = (float)xright - width(), D = (float)xright - xleft; + yright-=(int)(d*((float)yright - yleft)/D); + zright-=(tzfloat)d*(zright - zleft)/D; + xright = width() - 1; + } + if (ydown<0 || yup>=height()) return *this; + if (yup<0) { + const float D = (float)ydown - yup; + xup-=(int)((float)yup*((float)xdown - xup)/D); + zup-=(tzfloat)yup*(zdown - zup)/D; + yup = 0; + } + if (ydown>=height()) { + const float d = (float)ydown - height(), D = (float)ydown - yup; + xdown-=(int)(d*((float)xdown - xup)/D); + zdown-=(tzfloat)d*(zdown - zup)/D; + ydown = height() - 1; + } + T *ptrd0 = data(nx0,ny0); + tz *ptrz = zbuffer.data(nx0,ny0); + int dx = xright - xleft, dy = ydown - yup; + const bool steep = dy>dx; + if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); + const longT + offx = (longT)(nx00?dx:1); + if (opacity>=1) { + if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { + const tzfloat z = Z0 + x*dz/ndx; + if (z>=(tzfloat)*ptrz && pattern&hatch) { + *ptrz = (tz)z; + T *ptrd = ptrd0; const tc *col = color; + cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=wh; } + } + hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); + ptrd0+=offx; ptrz+=offx; + if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } + } else for (int error = dx>>1, x = 0; x<=dx; ++x) { + const tzfloat z = Z0 + x*dz/ndx; + if (z>=(tzfloat)*ptrz) { + *ptrz = (tz)z; + T *ptrd = ptrd0; const tc *col = color; + cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=wh; } + } + ptrd0+=offx; ptrz+=offx; + if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } + } + } else { + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { + const tzfloat z = Z0 + x*dz/ndx; + if (z>=(tzfloat)*ptrz && pattern&hatch) { + *ptrz = (tz)z; + T *ptrd = ptrd0; const tc *col = color; + cimg_forC(*this,c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } + } + hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); + ptrd0+=offx; ptrz+=offx; + if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } + } else for (int error = dx>>1, x = 0; x<=dx; ++x) { + const tzfloat z = Z0 + x*dz/ndx; + if (z>=(tzfloat)*ptrz) { + *ptrz = (tz)z; + T *ptrd = ptrd0; const tc *col = color; + cimg_forC(*this,c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=wh; } + } + ptrd0+=offx; ptrz+=offx; + if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } + } + } + return *this; + } + + //! Draw a 3d line. + /** + \param x0 X-coordinate of the starting point. + \param y0 Y-coordinate of the starting point. + \param z0 Z-coordinate of the starting point + \param x1 X-coordinate of the ending point. + \param y1 Y-coordinate of the ending point. + \param z1 Z-coordinate of the ending point. + \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. + \param opacity Drawing opacity. + \param pattern An integer whose bits describe the line pattern. + \param init_hatch Tells if a reinitialization of the hash state must be done. + **/ + template + CImg& draw_line(const int x0, const int y0, const int z0, + const int x1, const int y1, const int z1, + const tc *const color, const float opacity=1, + const unsigned int pattern=~0U, const bool init_hatch=true) { + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_line(): Specified color is (null).", + cimg_instance); + static unsigned int hatch = ~0U - (~0U>>1); + if (init_hatch) hatch = ~0U - (~0U>>1); + int nx0 = x0, ny0 = y0, nz0 = z0, nx1 = x1, ny1 = y1, nz1 = z1; + if (nx0>nx1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); + if (nx1<0 || nx0>=width()) return *this; + if (nx0<0) { + const float D = 1.0f + nx1 - nx0; + ny0-=(int)((float)nx0*(1.0f + ny1 - ny0)/D); + nz0-=(int)((float)nx0*(1.0f + nz1 - nz0)/D); + nx0 = 0; + } + if (nx1>=width()) { + const float d = (float)nx1 - width(), D = 1.0f + nx1 - nx0; + ny1+=(int)(d*(1.0f + ny0 - ny1)/D); + nz1+=(int)(d*(1.0f + nz0 - nz1)/D); + nx1 = width() - 1; + } + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); + if (ny1<0 || ny0>=height()) return *this; + if (ny0<0) { + const float D = 1.0f + ny1 - ny0; + nx0-=(int)((float)ny0*(1.0f + nx1 - nx0)/D); + nz0-=(int)((float)ny0*(1.0f + nz1 - nz0)/D); + ny0 = 0; + } + if (ny1>=height()) { + const float d = (float)ny1 - height(), D = 1.0f + ny1 - ny0; + nx1+=(int)(d*(1.0f + nx0 - nx1)/D); + nz1+=(int)(d*(1.0f + nz0 - nz1)/D); + ny1 = height() - 1; + } + if (nz0>nz1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); + if (nz1<0 || nz0>=depth()) return *this; + if (nz0<0) { + const float D = 1.0f + nz1 - nz0; + nx0-=(int)((float)nz0*(1.0f + nx1 - nx0)/D); + ny0-=(int)((float)nz0*(1.0f + ny1 - ny0)/D); + nz0 = 0; + } + if (nz1>=depth()) { + const float d = (float)nz1 - depth(), D = 1.0f + nz1 - nz0; + nx1+=(int)(d*(1.0f + nx0 - nx1)/D); + ny1+=(int)(d*(1.0f + ny0 - ny1)/D); + nz1 = depth() - 1; + } + const unsigned int dmax = (unsigned int)cimg::max(cimg::abs(nx1 - nx0),cimg::abs(ny1 - ny0),nz1 - nz0); + const ulongT whd = (ulongT)_width*_height*_depth; + const float px = (nx1 - nx0)/(float)dmax, py = (ny1 - ny0)/(float)dmax, pz = (nz1 - nz0)/(float)dmax; + float x = (float)nx0, y = (float)ny0, z = (float)nz0; + if (opacity>=1) for (unsigned int t = 0; t<=dmax; ++t) { + if (!(~pattern) || (~pattern && pattern&hatch)) { + T* ptrd = data((unsigned int)x,(unsigned int)y,(unsigned int)z); + const tc *col = color; cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=whd; } + } + x+=px; y+=py; z+=pz; if (pattern) { hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); } + } else { + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + for (unsigned int t = 0; t<=dmax; ++t) { + if (!(~pattern) || (~pattern && pattern&hatch)) { + T* ptrd = data((unsigned int)x,(unsigned int)y,(unsigned int)z); + const tc *col = color; cimg_forC(*this,c) { *ptrd = (T)(*(col++)*nopacity + *ptrd*copacity); ptrd+=whd; } + } + x+=px; y+=py; z+=pz; if (pattern) { hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); } + } + } + return *this; + } + + //! Draw a textured 2d line. + /** + \param x0 X-coordinate of the starting line point. + \param y0 Y-coordinate of the starting line point. + \param x1 X-coordinate of the ending line point. + \param y1 Y-coordinate of the ending line point. + \param texture Texture image defining the pixel colors. + \param tx0 X-coordinate of the starting texture point. + \param ty0 Y-coordinate of the starting texture point. + \param tx1 X-coordinate of the ending texture point. + \param ty1 Y-coordinate of the ending texture point. + \param opacity Drawing opacity. + \param pattern An integer whose bits describe the line pattern. + \param init_hatch Tells if the hash variable must be reinitialized. + \note + - Line routine uses the well known Bresenham's algorithm. + \par Example: + \code + CImg img(100,100,1,3,0), texture("texture256x256.ppm"); + const unsigned char color[] = { 255,128,64 }; + img.draw_line(40,40,80,70,texture,0,0,255,255); + \endcode + **/ + template + CImg& draw_line(const int x0, const int y0, + const int x1, const int y1, + const CImg& texture, + const int tx0, const int ty0, + const int tx1, const int ty1, + const float opacity=1, + const unsigned int pattern=~0U, const bool init_hatch=true) { + if (is_empty()) return *this; + if (texture._depth>1 || texture._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_line(): Invalid specified texture (%u,%u,%u,%u,%p).", + cimg_instance, + texture._width,texture._height,texture._depth,texture._spectrum,texture._data); + if (is_overlapped(texture)) return draw_line(x0,y0,x1,y1,+texture,tx0,ty0,tx1,ty1,opacity,pattern,init_hatch); + static unsigned int hatch = ~0U - (~0U>>1); + if (init_hatch) hatch = ~0U - (~0U>>1); + const bool xdir = x0=width()) return *this; + if (xleft<0) { + const float D = (float)xright - xleft; + yleft-=(int)((float)xleft*((float)yright - yleft)/D); + txleft-=(int)((float)xleft*((float)txright - txleft)/D); + tyleft-=(int)((float)xleft*((float)tyright - tyleft)/D); + xleft = 0; + } + if (xright>=width()) { + const float d = (float)xright - width(), D = (float)xright - xleft; + yright-=(int)(d*((float)yright - yleft)/D); + txright-=(int)(d*((float)txright - txleft)/D); + tyright-=(int)(d*((float)tyright - tyleft)/D); + xright = width() - 1; + } + if (ydown<0 || yup>=height()) return *this; + if (yup<0) { + const float D = (float)ydown - yup; + xup-=(int)((float)yup*((float)xdown - xup)/D); + txup-=(int)((float)yup*((float)txdown - txup)/D); + tyup-=(int)((float)yup*((float)tydown - tyup)/D); + yup = 0; + } + if (ydown>=height()) { + const float d = (float)ydown - height(), D = (float)ydown - yup; + xdown-=(int)(d*((float)xdown - xup)/D); + txdown-=(int)(d*((float)txdown - txup)/D); + tydown-=(int)(d*((float)tydown - tyup)/D); + ydown = height() - 1; + } + T *ptrd0 = data(nx0,ny0); + int dx = xright - xleft, dy = ydown - yup; + const bool steep = dy>dx; + if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); + const longT + offx = (longT)(nx00?dx:1); + const ulongT + whd = (ulongT)_width*_height*_depth, + twh = (ulongT)texture._width*texture._height; + + if (opacity>=1) { + if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { + if (pattern&hatch) { + T *ptrd = ptrd0; + const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; + const tc *col = &texture._atXY(tx,ty); + cimg_forC(*this,c) { *ptrd = (T)*col; ptrd+=whd; col+=twh; } + } + hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); + ptrd0+=offx; + if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } + } else for (int error = dx>>1, x = 0; x<=dx; ++x) { + T *ptrd = ptrd0; + const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; + const tc *col = &texture._atXY(tx,ty); + cimg_forC(*this,c) { *ptrd = (T)*col; ptrd+=whd; col+=twh; } + ptrd0+=offx; + if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } + } + } else { + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { + T *ptrd = ptrd0; + if (pattern&hatch) { + const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; + const tc *col = &texture._atXY(tx,ty); + cimg_forC(*this,c) { *ptrd = (T)(nopacity**col + *ptrd*copacity); ptrd+=whd; col+=twh; } + } + hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); + ptrd0+=offx; + if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } + } else for (int error = dx>>1, x = 0; x<=dx; ++x) { + T *ptrd = ptrd0; + const int tx = tx0 + x*dtx/ndx, ty = ty0 + x*dty/ndx; + const tc *col = &texture._atXY(tx,ty); + cimg_forC(*this,c) { *ptrd = (T)(nopacity**col + *ptrd*copacity); ptrd+=whd; col+=twh; } + ptrd0+=offx; + if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } + } + } + return *this; + } + + //! Draw a textured 2d line, with perspective correction. + /** + \param x0 X-coordinate of the starting point. + \param y0 Y-coordinate of the starting point. + \param z0 Z-coordinate of the starting point + \param x1 X-coordinate of the ending point. + \param y1 Y-coordinate of the ending point. + \param z1 Z-coordinate of the ending point. + \param texture Texture image defining the pixel colors. + \param tx0 X-coordinate of the starting texture point. + \param ty0 Y-coordinate of the starting texture point. + \param tx1 X-coordinate of the ending texture point. + \param ty1 Y-coordinate of the ending texture point. + \param opacity Drawing opacity. + \param pattern An integer whose bits describe the line pattern. + \param init_hatch Tells if the hash variable must be reinitialized. + **/ + template + CImg& draw_line(const int x0, const int y0, const float z0, + const int x1, const int y1, const float z1, + const CImg& texture, + const int tx0, const int ty0, + const int tx1, const int ty1, + const float opacity=1, + const unsigned int pattern=~0U, const bool init_hatch=true) { + if (is_empty() && z0<=0 && z1<=0) return *this; + if (texture._depth>1 || texture._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_line(): Invalid specified texture (%u,%u,%u,%u,%p).", + cimg_instance, + texture._width,texture._height,texture._depth,texture._spectrum,texture._data); + if (is_overlapped(texture)) + return draw_line(x0,y0,z0,x1,y1,z1,+texture,tx0,ty0,tx1,ty1,opacity,pattern,init_hatch); + static unsigned int hatch = ~0U - (~0U>>1); + if (init_hatch) hatch = ~0U - (~0U>>1); + const bool xdir = x0=width()) return *this; + if (xleft<0) { + const float D = (float)xright - xleft; + yleft-=(int)((float)xleft*((float)yright - yleft)/D); + zleft-=(float)xleft*(zright - zleft)/D; + txleft-=(float)xleft*(txright - txleft)/D; + tyleft-=(float)xleft*(tyright - tyleft)/D; + xleft = 0; + } + if (xright>=width()) { + const float d = (float)xright - width(), D = (float)xright - xleft; + yright-=(int)(d*((float)yright - yleft)/D); + zright-=d*(zright - zleft)/D; + txright-=d*(txright - txleft)/D; + tyright-=d*(tyright - tyleft)/D; + xright = width() - 1; + } + if (ydown<0 || yup>=height()) return *this; + if (yup<0) { + const float D = (float)ydown - yup; + xup-=(int)((float)yup*((float)xdown - xup)/D); + zup-=(float)yup*(zdown - zup)/D; + txup-=(float)yup*(txdown - txup)/D; + tyup-=(float)yup*(tydown - tyup)/D; + yup = 0; + } + if (ydown>=height()) { + const float d = (float)ydown - height(), D = (float)ydown - yup; + xdown-=(int)(d*((float)xdown - xup)/D); + zdown-=d*(zdown - zup)/D; + txdown-=d*(txdown - txup)/D; + tydown-=d*(tydown - tyup)/D; + ydown = height() - 1; + } + T *ptrd0 = data(nx0,ny0); + int dx = xright - xleft, dy = ydown - yup; + const bool steep = dy>dx; + if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); + const longT + offx = (longT)(nx00?dx:1); + const ulongT + whd = (ulongT)_width*_height*_depth, + twh = (ulongT)texture._width*texture._height; + + if (opacity>=1) { + if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { + if (pattern&hatch) { + const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; + const tc *col = &texture._atXY((int)(tx/z),(int)(ty/z)); + T *ptrd = ptrd0; + cimg_forC(*this,c) { *ptrd = (T)*col; ptrd+=whd; col+=twh; } + } + hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); + ptrd0+=offx; + if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } + } else for (int error = dx>>1, x = 0; x<=dx; ++x) { + const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; + const tc *col = &texture._atXY((int)(tx/z),(int)(ty/z)); + T *ptrd = ptrd0; + cimg_forC(*this,c) { *ptrd = (T)*col; ptrd+=whd; col+=twh; } + ptrd0+=offx; + if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } + } + } else { + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { + if (pattern&hatch) { + const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; + const tc *col = &texture._atXY((int)(tx/z),(int)(ty/z)); + T *ptrd = ptrd0; + cimg_forC(*this,c) { *ptrd = (T)(nopacity**col + *ptrd*copacity); ptrd+=whd; col+=twh; } + } + hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); + ptrd0+=offx; + if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } + } else for (int error = dx>>1, x = 0; x<=dx; ++x) { + const float z = Z0 + x*dz/ndx, tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; + const tc *col = &texture._atXY((int)(tx/z),(int)(ty/z)); + T *ptrd = ptrd0; + cimg_forC(*this,c) { *ptrd = (T)(nopacity**col + *ptrd*copacity); ptrd+=whd; col+=twh; } + ptrd0+=offx; + if ((error-=dy)<0) { ptrd0+=offy; error+=dx; } + } + } + return *this; + } + + //! Draw a textured 2d line, with perspective correction and z-buffering. + /** + \param zbuffer Z-buffer image. + \param x0 X-coordinate of the starting point. + \param y0 Y-coordinate of the starting point. + \param z0 Z-coordinate of the starting point + \param x1 X-coordinate of the ending point. + \param y1 Y-coordinate of the ending point. + \param z1 Z-coordinate of the ending point. + \param texture Texture image defining the pixel colors. + \param tx0 X-coordinate of the starting texture point. + \param ty0 Y-coordinate of the starting texture point. + \param tx1 X-coordinate of the ending texture point. + \param ty1 Y-coordinate of the ending texture point. + \param opacity Drawing opacity. + \param pattern An integer whose bits describe the line pattern. + \param init_hatch Tells if the hash variable must be reinitialized. + **/ + template + CImg& draw_line(CImg& zbuffer, + const int x0, const int y0, const float z0, + const int x1, const int y1, const float z1, + const CImg& texture, + const int tx0, const int ty0, + const int tx1, const int ty1, + const float opacity=1, + const unsigned int pattern=~0U, const bool init_hatch=true) { + typedef typename cimg::superset::type tzfloat; + if (is_empty() || z0<=0 || z1<=0) return *this; + if (!is_sameXY(zbuffer)) + throw CImgArgumentException(_cimg_instance + "draw_line(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have " + "different dimensions.", + cimg_instance, + zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); + if (texture._depth>1 || texture._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_line(): Invalid specified texture (%u,%u,%u,%u,%p).", + cimg_instance, + texture._width,texture._height,texture._depth,texture._spectrum,texture._data); + if (is_overlapped(texture)) + return draw_line(zbuffer,x0,y0,z0,x1,y1,z1,+texture,tx0,ty0,tx1,ty1,opacity,pattern,init_hatch); + static unsigned int hatch = ~0U - (~0U>>1); + if (init_hatch) hatch = ~0U - (~0U>>1); + const bool xdir = x0=width()) return *this; + if (xleft<0) { + const float D = (float)xright - xleft; + yleft-=(int)((float)xleft*((float)yright - yleft)/D); + zleft-=(float)xleft*(zright - zleft)/D; + txleft-=(float)xleft*(txright - txleft)/D; + tyleft-=(float)xleft*(tyright - tyleft)/D; + xleft = 0; + } + if (xright>=width()) { + const float d = (float)xright - width(), D = (float)xright - xleft; + yright-=(int)(d*((float)yright - yleft)/D); + zright-=d*(zright - zleft)/D; + txright-=d*(txright - txleft)/D; + tyright-=d*(tyright - tyleft)/D; + xright = width() - 1; + } + if (ydown<0 || yup>=height()) return *this; + if (yup<0) { + const float D = (float)ydown - yup; + xup-=(int)((float)yup*((float)xdown - xup)/D); + zup-=yup*(zdown - zup)/D; + txup-=yup*(txdown - txup)/D; + tyup-=yup*(tydown - tyup)/D; + yup = 0; + } + if (ydown>=height()) { + const float d = (float)ydown - height(), D = (float)ydown - yup; + xdown-=(int)(d*((float)xdown - xup)/D); + zdown-=d*(zdown - zup)/D; + txdown-=d*(txdown - txup)/D; + tydown-=d*(tydown - tyup)/D; + ydown = height() - 1; + } + T *ptrd0 = data(nx0,ny0); + tz *ptrz = zbuffer.data(nx0,ny0); + int dx = xright - xleft, dy = ydown - yup; + const bool steep = dy>dx; + if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy); + const longT + offx = (longT)(nx00?dx:1); + const ulongT + whd = (ulongT)_width*_height*_depth, + twh = (ulongT)texture._width*texture._height; + + if (opacity>=1) { + if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { + if (pattern&hatch) { + const tzfloat z = Z0 + x*dz/ndx; + if (z>=(tzfloat)*ptrz) { + *ptrz = (tz)z; + const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; + const tc *col = &texture._atXY((int)(tx/z),(int)(ty/z)); + T *ptrd = ptrd0; + cimg_forC(*this,c) { *ptrd = (T)*col; ptrd+=whd; col+=twh; } + } + } + hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); + ptrd0+=offx; ptrz+=offx; + if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } + } else for (int error = dx>>1, x = 0; x<=dx; ++x) { + const tzfloat z = Z0 + x*dz/ndx; + if (z>=(tzfloat)*ptrz) { + *ptrz = (tz)z; + const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; + const tc *col = &texture._atXY((int)(tx/z),(int)(ty/z)); + T *ptrd = ptrd0; + cimg_forC(*this,c) { *ptrd = (T)*col; ptrd+=whd; col+=twh; } + } + ptrd0+=offx; ptrz+=offx; + if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } + } + } else { + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) { + if (pattern&hatch) { + const tzfloat z = Z0 + x*dz/ndx; + if (z>=(tzfloat)*ptrz) { + *ptrz = (tz)z; + const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; + const tc *col = &texture._atXY((int)(tx/z),(int)(ty/z)); + T *ptrd = ptrd0; + cimg_forC(*this,c) { *ptrd = (T)(nopacity**col + *ptrd*copacity); ptrd+=whd; col+=twh; } + } + } + hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1); + ptrd0+=offx; ptrz+=offx; + if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } + } else for (int error = dx>>1, x = 0; x<=dx; ++x) { + const tzfloat z = Z0 + x*dz/ndx; + if (z>=(tzfloat)*ptrz) { + *ptrz = (tz)z; + const float tx = Tx0 + x*dtx/ndx, ty = Ty0 + x*dty/ndx; + const tc *col = &texture._atXY((int)(tx/z),(int)(ty/z)); + T *ptrd = ptrd0; + cimg_forC(*this,c) { *ptrd = (T)(nopacity**col + *ptrd*copacity); ptrd+=whd; col+=twh; } + } + ptrd0+=offx; ptrz+=offx; + if ((error-=dy)<0) { ptrd0+=offy; ptrz+=offy; error+=dx; } + } + } + return *this; + } + + //! Draw a set of consecutive lines. + /** + \param points Coordinates of vertices, stored as a list of vectors. + \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. + \param opacity Drawing opacity. + \param pattern An integer whose bits describe the line pattern. + \param init_hatch If set to true, init hatch motif. + \note + - This function uses several call to the single CImg::draw_line() procedure, + depending on the vectors size in \p points. + **/ + template + CImg& draw_line(const CImg& points, + const tc *const color, const float opacity=1, + const unsigned int pattern=~0U, const bool init_hatch=true) { + if (is_empty() || !points || points._width<2) return *this; + bool ninit_hatch = init_hatch; + switch (points._height) { + case 0 : case 1 : + throw CImgArgumentException(_cimg_instance + "draw_line(): Invalid specified point set (%u,%u,%u,%u,%p).", + cimg_instance, + points._width,points._height,points._depth,points._spectrum,points._data); + + case 2 : { + const int x0 = (int)points(0,0), y0 = (int)points(0,1); + int ox = x0, oy = y0; + for (unsigned int i = 1; i + CImg& draw_arrow(const int x0, const int y0, + const int x1, const int y1, + const tc *const color, const float opacity=1, + const float angle=30, const float length=-10, + const unsigned int pattern=~0U) { + if (is_empty()) return *this; + const float u = (float)(x0 - x1), v = (float)(y0 - y1), sq = u*u + v*v, + deg = (float)(angle*cimg::PI/180), ang = (sq>0)?(float)std::atan2(v,u):0.0f, + l = (length>=0)?length:-length*(float)std::sqrt(sq)/100; + if (sq>0) { + const float + cl = (float)std::cos(ang - deg), sl = (float)std::sin(ang - deg), + cr = (float)std::cos(ang + deg), sr = (float)std::sin(ang + deg); + const int + xl = x1 + (int)(l*cl), yl = y1 + (int)(l*sl), + xr = x1 + (int)(l*cr), yr = y1 + (int)(l*sr), + xc = x1 + (int)((l + 1)*(cl + cr))/2, yc = y1 + (int)((l + 1)*(sl + sr))/2; + draw_line(x0,y0,xc,yc,color,opacity,pattern).draw_triangle(x1,y1,xl,yl,xr,yr,color,opacity); + } else draw_point(x0,y0,color,opacity); + return *this; + } + + //! Draw a 2d spline. + /** + \param x0 X-coordinate of the starting curve point + \param y0 Y-coordinate of the starting curve point + \param u0 X-coordinate of the starting velocity + \param v0 Y-coordinate of the starting velocity + \param x1 X-coordinate of the ending curve point + \param y1 Y-coordinate of the ending curve point + \param u1 X-coordinate of the ending velocity + \param v1 Y-coordinate of the ending velocity + \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. + \param precision Curve drawing precision. + \param opacity Drawing opacity. + \param pattern An integer whose bits describe the line pattern. + \param init_hatch If \c true, init hatch motif. + \note + - The curve is a 2d cubic Bezier spline, from the set of specified starting/ending points + and corresponding velocity vectors. + - The spline is drawn as a serie of connected segments. The \p precision parameter sets the + average number of pixels in each drawn segment. + - A cubic Bezier curve is sometimes defined by a set of 4 points { (\p x0,\p y0), (\p xa,\p ya), + (\p xb,\p yb), (\p x1,\p y1) } where (\p x0,\p y0) is the starting point, (\p x1,\p y1) is the ending point + and (\p xa,\p ya), (\p xb,\p yb) are two + \e control points. + The starting and ending velocities (\p u0,\p v0) and (\p u1,\p v1) can be deduced easily from + the control points as + \p u0 = (\p xa - \p x0), \p v0 = (\p ya - \p y0), \p u1 = (\p x1 - \p xb) and \p v1 = (\p y1 - \p yb). + \par Example: + \code + CImg img(100,100,1,3,0); + const unsigned char color[] = { 255,255,255 }; + img.draw_spline(30,30,0,100,90,40,0,-100,color); + \endcode + **/ + template + CImg& draw_spline(const int x0, const int y0, const float u0, const float v0, + const int x1, const int y1, const float u1, const float v1, + const tc *const color, const float opacity=1, + const float precision=0.25, const unsigned int pattern=~0U, + const bool init_hatch=true) { + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_spline(): Specified color is (null).", + cimg_instance); + if (x0==x1 && y0==y1) return draw_point(x0,y0,color,opacity); + bool ninit_hatch = init_hatch; + const float + ax = u0 + u1 + 2*(x0 - x1), + bx = 3*(x1 - x0) - 2*u0 - u1, + ay = v0 + v1 + 2*(y0 - y1), + by = 3*(y1 - y0) - 2*v0 - v1, + _precision = 1/(cimg::hypot((float)x0 - x1,(float)y0 - y1)*(precision>0?precision:1)); + int ox = x0, oy = y0; + for (float t = 0; t<1; t+=_precision) { + const float t2 = t*t, t3 = t2*t; + const int + nx = (int)(ax*t3 + bx*t2 + u0*t + x0), + ny = (int)(ay*t3 + by*t2 + v0*t + y0); + draw_line(ox,oy,nx,ny,color,opacity,pattern,ninit_hatch); + ninit_hatch = false; + ox = nx; oy = ny; + } + return draw_line(ox,oy,x1,y1,color,opacity,pattern,false); + } + + //! Draw a 3d spline \overloading. + /** + \note + - Similar to CImg::draw_spline() for a 3d spline in a volumetric image. + **/ + template + CImg& draw_spline(const int x0, const int y0, const int z0, const float u0, const float v0, const float w0, + const int x1, const int y1, const int z1, const float u1, const float v1, const float w1, + const tc *const color, const float opacity=1, + const float precision=4, const unsigned int pattern=~0U, + const bool init_hatch=true) { + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_spline(): Specified color is (null).", + cimg_instance); + if (x0==x1 && y0==y1 && z0==z1) return draw_point(x0,y0,z0,color,opacity); + bool ninit_hatch = init_hatch; + const float + ax = u0 + u1 + 2*(x0 - x1), + bx = 3*(x1 - x0) - 2*u0 - u1, + ay = v0 + v1 + 2*(y0 - y1), + by = 3*(y1 - y0) - 2*v0 - v1, + az = w0 + w1 + 2*(z0 - z1), + bz = 3*(z1 - z0) - 2*w0 - w1, + _precision = 1/(cimg::hypot((float)x0 - x1,(float)y0 - y1)*(precision>0?precision:1)); + int ox = x0, oy = y0, oz = z0; + for (float t = 0; t<1; t+=_precision) { + const float t2 = t*t, t3 = t2*t; + const int + nx = (int)(ax*t3 + bx*t2 + u0*t + x0), + ny = (int)(ay*t3 + by*t2 + v0*t + y0), + nz = (int)(az*t3 + bz*t2 + w0*t + z0); + draw_line(ox,oy,oz,nx,ny,nz,color,opacity,pattern,ninit_hatch); + ninit_hatch = false; + ox = nx; oy = ny; oz = nz; + } + return draw_line(ox,oy,oz,x1,y1,z1,color,opacity,pattern,false); + } + + //! Draw a textured 2d spline. + /** + \param x0 X-coordinate of the starting curve point + \param y0 Y-coordinate of the starting curve point + \param u0 X-coordinate of the starting velocity + \param v0 Y-coordinate of the starting velocity + \param x1 X-coordinate of the ending curve point + \param y1 Y-coordinate of the ending curve point + \param u1 X-coordinate of the ending velocity + \param v1 Y-coordinate of the ending velocity + \param texture Texture image defining line pixel colors. + \param tx0 X-coordinate of the starting texture point. + \param ty0 Y-coordinate of the starting texture point. + \param tx1 X-coordinate of the ending texture point. + \param ty1 Y-coordinate of the ending texture point. + \param precision Curve drawing precision. + \param opacity Drawing opacity. + \param pattern An integer whose bits describe the line pattern. + \param init_hatch if \c true, reinit hatch motif. + **/ + template + CImg& draw_spline(const int x0, const int y0, const float u0, const float v0, + const int x1, const int y1, const float u1, const float v1, + const CImg& texture, + const int tx0, const int ty0, const int tx1, const int ty1, + const float opacity=1, + const float precision=4, const unsigned int pattern=~0U, + const bool init_hatch=true) { + if (texture._depth>1 || texture._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_spline(): Invalid specified texture (%u,%u,%u,%u,%p).", + cimg_instance, + texture._width,texture._height,texture._depth,texture._spectrum,texture._data); + if (is_empty()) return *this; + if (is_overlapped(texture)) + return draw_spline(x0,y0,u0,v0,x1,y1,u1,v1,+texture,tx0,ty0,tx1,ty1,precision,opacity,pattern,init_hatch); + if (x0==x1 && y0==y1) + return draw_point(x0,y0,texture.get_vector_at(x0<=0?0:x0>=texture.width()?texture.width() - 1:x0, + y0<=0?0:y0>=texture.height()?texture.height() - 1:y0),opacity); + bool ninit_hatch = init_hatch; + const float + ax = u0 + u1 + 2*(x0 - x1), + bx = 3*(x1 - x0) - 2*u0 - u1, + ay = v0 + v1 + 2*(y0 - y1), + by = 3*(y1 - y0) - 2*v0 - v1, + _precision = 1/(cimg::hypot((float)x0 - x1,(float)y0 - y1)*(precision>0?precision:1)); + int ox = x0, oy = y0, otx = tx0, oty = ty0; + for (float t1 = 0; t1<1; t1+=_precision) { + const float t2 = t1*t1, t3 = t2*t1; + const int + nx = (int)(ax*t3 + bx*t2 + u0*t1 + x0), + ny = (int)(ay*t3 + by*t2 + v0*t1 + y0), + ntx = tx0 + (int)((tx1 - tx0)*t1), + nty = ty0 + (int)((ty1 - ty0)*t1); + draw_line(ox,oy,nx,ny,texture,otx,oty,ntx,nty,opacity,pattern,ninit_hatch); + ninit_hatch = false; + ox = nx; oy = ny; otx = ntx; oty = nty; + } + return draw_line(ox,oy,x1,y1,texture,otx,oty,tx1,ty1,opacity,pattern,false); + } + + //! Draw a set of consecutive splines. + /** + \param points Vertices data. + \param tangents Tangents data. + \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. + \param opacity Drawing opacity. + \param is_closed_set Tells if the drawn spline set is closed. + \param precision Precision of the drawing. + \param pattern An integer whose bits describe the line pattern. + \param init_hatch If \c true, init hatch motif. + **/ + template + CImg& draw_spline(const CImg& points, const CImg& tangents, + const tc *const color, const float opacity=1, + const bool is_closed_set=false, const float precision=4, + const unsigned int pattern=~0U, const bool init_hatch=true) { + if (is_empty() || !points || !tangents || points._width<2 || tangents._width<2) return *this; + bool ninit_hatch = init_hatch; + switch (points._height) { + case 0 : case 1 : + throw CImgArgumentException(_cimg_instance + "draw_spline(): Invalid specified point set (%u,%u,%u,%u,%p).", + cimg_instance, + points._width,points._height,points._depth,points._spectrum,points._data); + + case 2 : { + const int x0 = (int)points(0,0), y0 = (int)points(0,1); + const float u0 = (float)tangents(0,0), v0 = (float)tangents(0,1); + int ox = x0, oy = y0; + float ou = u0, ov = v0; + for (unsigned int i = 1; i + CImg& draw_spline(const CImg& points, + const tc *const color, const float opacity=1, + const bool is_closed_set=false, const float precision=4, + const unsigned int pattern=~0U, const bool init_hatch=true) { + if (is_empty() || !points || points._width<2) return *this; + CImg tangents; + switch (points._height) { + case 0 : case 1 : + throw CImgArgumentException(_cimg_instance + "draw_spline(): Invalid specified point set (%u,%u,%u,%u,%p).", + cimg_instance, + points._width,points._height,points._depth,points._spectrum,points._data); + case 2 : { + tangents.assign(points._width,points._height); + cimg_forX(points,p) { + const unsigned int + p0 = is_closed_set?(p + points._width - 1)%points._width:(p?p - 1:0), + p1 = is_closed_set?(p + 1)%points._width:(p + 1=0?x0:(x0 - y0*(x2 - x0)/(y2 - y0)), \ + xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0 - y0*(x1 - x0)/(y1 - y0))):(x1 - y1*(x2 - x1)/(y2 - y1)), \ + _sxn=1, \ + _sxr=1, \ + _sxl=1, \ + _dxn = x2>x1?x2-x1:(_sxn=-1,x1 - x2), \ + _dxr = x2>x0?x2-x0:(_sxr=-1,x0 - x2), \ + _dxl = x1>x0?x1-x0:(_sxl=-1,x0 - x1), \ + _dyn = y2-y1, \ + _dyr = y2-y0, \ + _dyl = y1-y0, \ + _counter = (_dxn-=_dyn?_dyn*(_dxn/_dyn):0, \ + _dxr-=_dyr?_dyr*(_dxr/_dyr):0, \ + _dxl-=_dyl?_dyl*(_dxl/_dyl):0, \ + std::min((int)(img)._height - y - 1,y2 - y)), \ + _errn = _dyn/2, \ + _errr = _dyr/2, \ + _errl = _dyl/2, \ + _rxn = _dyn?(x2-x1)/_dyn:0, \ + _rxr = _dyr?(x2-x0)/_dyr:0, \ + _rxl = (y0!=y1 && y1>0)?(_dyl?(x1-x0)/_dyl:0): \ + (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn); \ + _counter>=0; --_counter, ++y, \ + xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), \ + xl+=(y!=y1)?_rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0): \ + (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1-xl)) + +#define _cimg_for_triangle2(img,xl,cl,xr,cr,y,x0,y0,c0,x1,y1,c1,x2,y2,c2) \ + for (int y = y0<0?0:y0, \ + xr = y0>=0?x0:(x0 - y0*(x2 - x0)/(y2 - y0)), \ + cr = y0>=0?c0:(c0 - y0*(c2 - c0)/(y2 - y0)), \ + xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0 - y0*(x1 - x0)/(y1 - y0))):(x1 - y1*(x2 - x1)/(y2 - y1)), \ + cl = y1>=0?(y0>=0?(y0==y1?c1:c0):(c0 - y0*(c1 - c0)/(y1 - y0))):(c1 - y1*(c2 - c1)/(y2 - y1)), \ + _sxn=1, _scn=1, \ + _sxr=1, _scr=1, \ + _sxl=1, _scl=1, \ + _dxn = x2>x1?x2-x1:(_sxn=-1,x1 - x2), \ + _dxr = x2>x0?x2-x0:(_sxr=-1,x0 - x2), \ + _dxl = x1>x0?x1-x0:(_sxl=-1,x0 - x1), \ + _dcn = c2>c1?c2-c1:(_scn=-1,c1 - c2), \ + _dcr = c2>c0?c2-c0:(_scr=-1,c0 - c2), \ + _dcl = c1>c0?c1-c0:(_scl=-1,c0 - c1), \ + _dyn = y2-y1, \ + _dyr = y2-y0, \ + _dyl = y1-y0, \ + _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, \ + _dxr-=_dyr?_dyr*(_dxr/_dyr):0, \ + _dxl-=_dyl?_dyl*(_dxl/_dyl):0, \ + _dcn-=_dyn?_dyn*(_dcn/_dyn):0, \ + _dcr-=_dyr?_dyr*(_dcr/_dyr):0, \ + _dcl-=_dyl?_dyl*(_dcl/_dyl):0, \ + std::min((int)(img)._height - y - 1,y2 - y)), \ + _errn = _dyn/2, _errcn = _errn, \ + _errr = _dyr/2, _errcr = _errr, \ + _errl = _dyl/2, _errcl = _errl, \ + _rxn = _dyn?(x2 - x1)/_dyn:0, \ + _rcn = _dyn?(c2 - c1)/_dyn:0, \ + _rxr = _dyr?(x2 - x0)/_dyr:0, \ + _rcr = _dyr?(c2 - c0)/_dyr:0, \ + _rxl = (y0!=y1 && y1>0)?(_dyl?(x1-x0)/_dyl:0): \ + (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), \ + _rcl = (y0!=y1 && y1>0)?(_dyl?(c1-c0)/_dyl:0): \ + (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ); \ + _counter>=0; --_counter, ++y, \ + xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), \ + cr+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), \ + xl+=(y!=y1)?(cl+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), \ + _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): \ + (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cl=c1, \ + _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1-xl)) + +#define _cimg_for_triangle3(img,xl,txl,tyl,xr,txr,tyr,y,x0,y0,tx0,ty0,x1,y1,tx1,ty1,x2,y2,tx2,ty2) \ + for (int y = y0<0?0:y0, \ + xr = y0>=0?x0:(x0 - y0*(x2 - x0)/(y2 - y0)), \ + txr = y0>=0?tx0:(tx0 - y0*(tx2 - tx0)/(y2 - y0)), \ + tyr = y0>=0?ty0:(ty0 - y0*(ty2 - ty0)/(y2 - y0)), \ + xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0 - y0*(x1 - x0)/(y1 - y0))):(x1 - y1*(x2 - x1)/(y2 - y1)), \ + txl = y1>=0?(y0>=0?(y0==y1?tx1:tx0):(tx0 - y0*(tx1 - tx0)/(y1 - y0))):(tx1 - y1*(tx2 - tx1)/(y2 - y1)), \ + tyl = y1>=0?(y0>=0?(y0==y1?ty1:ty0):(ty0 - y0*(ty1 - ty0)/(y1 - y0))):(ty1 - y1*(ty2 - ty1)/(y2 - y1)), \ + _sxn=1, _stxn=1, _styn=1, \ + _sxr=1, _stxr=1, _styr=1, \ + _sxl=1, _stxl=1, _styl=1, \ + _dxn = x2>x1?x2 - x1:(_sxn=-1,x1 - x2), \ + _dxr = x2>x0?x2 - x0:(_sxr=-1,x0 - x2), \ + _dxl = x1>x0?x1 - x0:(_sxl=-1,x0 - x1), \ + _dtxn = tx2>tx1?tx2 - tx1:(_stxn=-1,tx1 - tx2), \ + _dtxr = tx2>tx0?tx2 - tx0:(_stxr=-1,tx0 - tx2), \ + _dtxl = tx1>tx0?tx1 - tx0:(_stxl=-1,tx0 - tx1), \ + _dtyn = ty2>ty1?ty2 - ty1:(_styn=-1,ty1 - ty2), \ + _dtyr = ty2>ty0?ty2 - ty0:(_styr=-1,ty0 - ty2), \ + _dtyl = ty1>ty0?ty1 - ty0:(_styl=-1,ty0 - ty1), \ + _dyn = y2-y1, \ + _dyr = y2-y0, \ + _dyl = y1-y0, \ + _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, \ + _dxr-=_dyr?_dyr*(_dxr/_dyr):0, \ + _dxl-=_dyl?_dyl*(_dxl/_dyl):0, \ + _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, \ + _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, \ + _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, \ + _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, \ + _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, \ + _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, \ + std::min((int)(img)._height - y - 1,y2 - y)), \ + _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, \ + _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, \ + _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, \ + _rxn = _dyn?(x2 - x1)/_dyn:0, \ + _rtxn = _dyn?(tx2 - tx1)/_dyn:0, \ + _rtyn = _dyn?(ty2 - ty1)/_dyn:0, \ + _rxr = _dyr?(x2 - x0)/_dyr:0, \ + _rtxr = _dyr?(tx2 - tx0)/_dyr:0, \ + _rtyr = _dyr?(ty2 - ty0)/_dyr:0, \ + _rxl = (y0!=y1 && y1>0)?(_dyl?(x1 - x0)/_dyl:0): \ + (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), \ + _rtxl = (y0!=y1 && y1>0)?(_dyl?(tx1 - tx0)/_dyl:0): \ + (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), \ + _rtyl = (y0!=y1 && y1>0)?(_dyl?(ty1 - ty0)/_dyl:0): \ + (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); \ + _counter>=0; --_counter, ++y, \ + xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), \ + txr+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), \ + tyr+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), \ + xl+=(y!=y1)?(txl+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), \ + tyl+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), \ + _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): \ + (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, txl=tx1, \ + _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, tyl=ty1,\ + _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1 - xl)) + +#define _cimg_for_triangle4(img,xl,cl,txl,tyl,xr,cr,txr,tyr,y,x0,y0,c0,tx0,ty0,x1,y1,c1,tx1,ty1,x2,y2,c2,tx2,ty2) \ + for (int y = y0<0?0:y0, \ + xr = y0>=0?x0:(x0 - y0*(x2 - x0)/(y2 - y0)), \ + cr = y0>=0?c0:(c0 - y0*(c2 - c0)/(y2 - y0)), \ + txr = y0>=0?tx0:(tx0 - y0*(tx2 - tx0)/(y2 - y0)), \ + tyr = y0>=0?ty0:(ty0 - y0*(ty2 - ty0)/(y2 - y0)), \ + xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0 - y0*(x1 - x0)/(y1 - y0))):(x1 - y1*(x2 - x1)/(y2 - y1)), \ + cl = y1>=0?(y0>=0?(y0==y1?c1:c0):(c0 - y0*(c1 - c0)/(y1 - y0))):(c1 - y1*(c2 - c1)/(y2 - y1)), \ + txl = y1>=0?(y0>=0?(y0==y1?tx1:tx0):(tx0 - y0*(tx1 - tx0)/(y1 - y0))):(tx1 - y1*(tx2 - tx1)/(y2 - y1)), \ + tyl = y1>=0?(y0>=0?(y0==y1?ty1:ty0):(ty0 - y0*(ty1 - ty0)/(y1 - y0))):(ty1 - y1*(ty2 - ty1)/(y2 - y1)), \ + _sxn=1, _scn=1, _stxn=1, _styn=1, \ + _sxr=1, _scr=1, _stxr=1, _styr=1, \ + _sxl=1, _scl=1, _stxl=1, _styl=1, \ + _dxn = x2>x1?x2 - x1:(_sxn=-1,x1 - x2), \ + _dxr = x2>x0?x2 - x0:(_sxr=-1,x0 - x2), \ + _dxl = x1>x0?x1 - x0:(_sxl=-1,x0 - x1), \ + _dcn = c2>c1?c2 - c1:(_scn=-1,c1 - c2), \ + _dcr = c2>c0?c2 - c0:(_scr=-1,c0 - c2), \ + _dcl = c1>c0?c1 - c0:(_scl=-1,c0 - c1), \ + _dtxn = tx2>tx1?tx2 - tx1:(_stxn=-1,tx1 - tx2), \ + _dtxr = tx2>tx0?tx2 - tx0:(_stxr=-1,tx0 - tx2), \ + _dtxl = tx1>tx0?tx1 - tx0:(_stxl=-1,tx0 - tx1), \ + _dtyn = ty2>ty1?ty2 - ty1:(_styn=-1,ty1 - ty2), \ + _dtyr = ty2>ty0?ty2 - ty0:(_styr=-1,ty0 - ty2), \ + _dtyl = ty1>ty0?ty1 - ty0:(_styl=-1,ty0 - ty1), \ + _dyn = y2 - y1, \ + _dyr = y2 - y0, \ + _dyl = y1 - y0, \ + _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, \ + _dxr-=_dyr?_dyr*(_dxr/_dyr):0, \ + _dxl-=_dyl?_dyl*(_dxl/_dyl):0, \ + _dcn-=_dyn?_dyn*(_dcn/_dyn):0, \ + _dcr-=_dyr?_dyr*(_dcr/_dyr):0, \ + _dcl-=_dyl?_dyl*(_dcl/_dyl):0, \ + _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, \ + _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, \ + _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, \ + _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, \ + _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, \ + _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, \ + std::min((int)(img)._height - y - 1,y2 - y)), \ + _errn = _dyn/2, _errcn = _errn, _errtxn = _errn, _errtyn = _errn, \ + _errr = _dyr/2, _errcr = _errr, _errtxr = _errr, _errtyr = _errr, \ + _errl = _dyl/2, _errcl = _errl, _errtxl = _errl, _errtyl = _errl, \ + _rxn = _dyn?(x2 - x1)/_dyn:0, \ + _rcn = _dyn?(c2 - c1)/_dyn:0, \ + _rtxn = _dyn?(tx2 - tx1)/_dyn:0, \ + _rtyn = _dyn?(ty2 - ty1)/_dyn:0, \ + _rxr = _dyr?(x2 - x0)/_dyr:0, \ + _rcr = _dyr?(c2 - c0)/_dyr:0, \ + _rtxr = _dyr?(tx2 - tx0)/_dyr:0, \ + _rtyr = _dyr?(ty2 - ty0)/_dyr:0, \ + _rxl = (y0!=y1 && y1>0)?(_dyl?(x1 - x0)/_dyl:0): \ + (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), \ + _rcl = (y0!=y1 && y1>0)?(_dyl?(c1 - c0)/_dyl:0): \ + (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ), \ + _rtxl = (y0!=y1 && y1>0)?(_dyl?(tx1 - tx0)/_dyl:0): \ + (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), \ + _rtyl = (y0!=y1 && y1>0)?(_dyl?(ty1 - ty0)/_dyl:0): \ + (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); \ + _counter>=0; --_counter, ++y, \ + xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), \ + cr+=_rcr+((_errcr-=_dcr)<0?_errcr+=_dyr,_scr:0), \ + txr+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), \ + tyr+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), \ + xl+=(y!=y1)?(cl+=_rcl+((_errcl-=_dcl)<0?(_errcl+=_dyl,_scl):0), \ + txl+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), \ + tyl+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), \ + _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): \ + (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cl=c1, \ + _errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, txl=tx1, \ + _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, tyl=ty1, \ + _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1 - xl)) + +#define _cimg_for_triangle5(img,xl,txl,tyl,lxl,lyl,xr,txr,tyr,lxr,lyr,y,x0,y0,\ + tx0,ty0,lx0,ly0,x1,y1,tx1,ty1,lx1,ly1,x2,y2,tx2,ty2,lx2,ly2) \ + for (int y = y0<0?0:y0, \ + xr = y0>=0?x0:(x0 - y0*(x2 - x0)/(y2 - y0)), \ + txr = y0>=0?tx0:(tx0 - y0*(tx2 - tx0)/(y2 - y0)), \ + tyr = y0>=0?ty0:(ty0 - y0*(ty2 - ty0)/(y2 - y0)), \ + lxr = y0>=0?lx0:(lx0 - y0*(lx2 - lx0)/(y2 - y0)), \ + lyr = y0>=0?ly0:(ly0 - y0*(ly2 - ly0)/(y2 - y0)), \ + xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0 - y0*(x1 - x0)/(y1 - y0))):(x1 - y1*(x2 - x1)/(y2 - y1)), \ + txl = y1>=0?(y0>=0?(y0==y1?tx1:tx0):(tx0 - y0*(tx1 - tx0)/(y1 - y0))):(tx1 - y1*(tx2 - tx1)/(y2 - y1)), \ + tyl = y1>=0?(y0>=0?(y0==y1?ty1:ty0):(ty0 - y0*(ty1 - ty0)/(y1 - y0))):(ty1 - y1*(ty2 - ty1)/(y2 - y1)), \ + lxl = y1>=0?(y0>=0?(y0==y1?lx1:lx0):(lx0 - y0*(lx1 - lx0)/(y1 - y0))):(lx1 - y1*(lx2 - lx1)/(y2 - y1)), \ + lyl = y1>=0?(y0>=0?(y0==y1?ly1:ly0):(ly0 - y0*(ly1 - ly0)/(y1 - y0))):(ly1 - y1*(ly2 - ly1)/(y2 - y1)), \ + _sxn=1, _stxn=1, _styn=1, _slxn=1, _slyn=1, \ + _sxr=1, _stxr=1, _styr=1, _slxr=1, _slyr=1, \ + _sxl=1, _stxl=1, _styl=1, _slxl=1, _slyl=1, \ + _dxn = x2>x1?x2 - x1:(_sxn=-1,x1 - x2), _dyn = y2 - y1, \ + _dxr = x2>x0?x2 - x0:(_sxr=-1,x0 - x2), _dyr = y2 - y0, \ + _dxl = x1>x0?x1 - x0:(_sxl=-1,x0 - x1), _dyl = y1 - y0, \ + _dtxn = tx2>tx1?tx2 - tx1:(_stxn=-1,tx1 - tx2), \ + _dtxr = tx2>tx0?tx2 - tx0:(_stxr=-1,tx0 - tx2), \ + _dtxl = tx1>tx0?tx1 - tx0:(_stxl=-1,tx0 - tx1), \ + _dtyn = ty2>ty1?ty2 - ty1:(_styn=-1,ty1 - ty2), \ + _dtyr = ty2>ty0?ty2 - ty0:(_styr=-1,ty0 - ty2), \ + _dtyl = ty1>ty0?ty1 - ty0:(_styl=-1,ty0 - ty1), \ + _dlxn = lx2>lx1?lx2 - lx1:(_slxn=-1,lx1 - lx2), \ + _dlxr = lx2>lx0?lx2 - lx0:(_slxr=-1,lx0 - lx2), \ + _dlxl = lx1>lx0?lx1 - lx0:(_slxl=-1,lx0 - lx1), \ + _dlyn = ly2>ly1?ly2 - ly1:(_slyn=-1,ly1 - ly2), \ + _dlyr = ly2>ly0?ly2 - ly0:(_slyr=-1,ly0 - ly2), \ + _dlyl = ly1>ly0?ly1 - ly0:(_slyl=-1,ly0 - ly1), \ + _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, \ + _dxr-=_dyr?_dyr*(_dxr/_dyr):0, \ + _dxl-=_dyl?_dyl*(_dxl/_dyl):0, \ + _dtxn-=_dyn?_dyn*(_dtxn/_dyn):0, \ + _dtxr-=_dyr?_dyr*(_dtxr/_dyr):0, \ + _dtxl-=_dyl?_dyl*(_dtxl/_dyl):0, \ + _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, \ + _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, \ + _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, \ + _dlxn-=_dyn?_dyn*(_dlxn/_dyn):0, \ + _dlxr-=_dyr?_dyr*(_dlxr/_dyr):0, \ + _dlxl-=_dyl?_dyl*(_dlxl/_dyl):0, \ + _dlyn-=_dyn?_dyn*(_dlyn/_dyn):0, \ + _dlyr-=_dyr?_dyr*(_dlyr/_dyr):0, \ + _dlyl-=_dyl?_dyl*(_dlyl/_dyl):0, \ + std::min((int)(img)._height - y - 1,y2 - y)), \ + _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errlxn = _errn, _errlyn = _errn, \ + _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errlxr = _errr, _errlyr = _errr, \ + _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _errlxl = _errl, _errlyl = _errl, \ + _rxn = _dyn?(x2 - x1)/_dyn:0, \ + _rtxn = _dyn?(tx2 - tx1)/_dyn:0, \ + _rtyn = _dyn?(ty2 - ty1)/_dyn:0, \ + _rlxn = _dyn?(lx2 - lx1)/_dyn:0, \ + _rlyn = _dyn?(ly2 - ly1)/_dyn:0, \ + _rxr = _dyr?(x2 - x0)/_dyr:0, \ + _rtxr = _dyr?(tx2 - tx0)/_dyr:0, \ + _rtyr = _dyr?(ty2 - ty0)/_dyr:0, \ + _rlxr = _dyr?(lx2 - lx0)/_dyr:0, \ + _rlyr = _dyr?(ly2 - ly0)/_dyr:0, \ + _rxl = (y0!=y1 && y1>0)?(_dyl?(x1 - x0)/_dyl:0): \ + (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), \ + _rtxl = (y0!=y1 && y1>0)?(_dyl?(tx1 - tx0)/_dyl:0): \ + (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), \ + _rtyl = (y0!=y1 && y1>0)?(_dyl?(ty1 - ty0)/_dyl:0): \ + (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ), \ + _rlxl = (y0!=y1 && y1>0)?(_dyl?(lx1 - lx0)/_dyl:0): \ + (_errlxl=_errlxn, _dlxl=_dlxn, _dyl=_dyn, _slxl=_slxn, _rlxn ), \ + _rlyl = (y0!=y1 && y1>0)?(_dyl?(ly1 - ly0)/_dyl:0): \ + (_errlyl=_errlyn, _dlyl=_dlyn, _dyl=_dyn, _slyl=_slyn, _rlyn ); \ + _counter>=0; --_counter, ++y, \ + xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), \ + txr+=_rtxr+((_errtxr-=_dtxr)<0?_errtxr+=_dyr,_stxr:0), \ + tyr+=_rtyr+((_errtyr-=_dtyr)<0?_errtyr+=_dyr,_styr:0), \ + lxr+=_rlxr+((_errlxr-=_dlxr)<0?_errlxr+=_dyr,_slxr:0), \ + lyr+=_rlyr+((_errlyr-=_dlyr)<0?_errlyr+=_dyr,_slyr:0), \ + xl+=(y!=y1)?(txl+=_rtxl+((_errtxl-=_dtxl)<0?(_errtxl+=_dyl,_stxl):0), \ + tyl+=_rtyl+((_errtyl-=_dtyl)<0?(_errtyl+=_dyl,_styl):0), \ + lxl+=_rlxl+((_errlxl-=_dlxl)<0?(_errlxl+=_dyl,_slxl):0), \ + lyl+=_rlyl+((_errlyl-=_dlyl)<0?(_errlyl+=_dyl,_slyl):0), \ + _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): \ + (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, txl=tx1, \ + _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, tyl=ty1, \ + _errlxl=_errlxn, _dlxl=_dlxn, _dyl=_dyn, _slxl=_slxn, _rlxl=_rlxn, lxl=lx1, \ + _errlyl=_errlyn, _dlyl=_dlyn, _dyl=_dyn, _slyl=_slyn, _rlyl=_rlyn, lyl=ly1, \ + _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1 - xl)) + + // [internal] Draw a filled triangle. + template + CImg& _draw_triangle(const int x0, const int y0, + const int x1, const int y1, + const int x2, const int y2, + const tc *const color, const float opacity, + const float brightness) { + cimg_init_scanline(color,opacity); + const float nbrightness = cimg::cut(brightness,0,2); + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2); + if (ny0=0) { + if ((nx1 - nx0)*(ny2 - ny0) - (nx2 - nx0)*(ny1 - ny0)<0) + _cimg_for_triangle1(*this,xl,xr,y,nx0,ny0,nx1,ny1,nx2,ny2) + cimg_draw_scanline(xl,xr,y,color,opacity,nbrightness); + else + _cimg_for_triangle1(*this,xl,xr,y,nx0,ny0,nx1,ny1,nx2,ny2) + cimg_draw_scanline(xr,xl,y,color,opacity,nbrightness); + } + return *this; + } + + //! Draw a filled 2d triangle. + /** + \param x0 X-coordinate of the first vertex. + \param y0 Y-coordinate of the first vertex. + \param x1 X-coordinate of the second vertex. + \param y1 Y-coordinate of the second vertex. + \param x2 X-coordinate of the third vertex. + \param y2 Y-coordinate of the third vertex. + \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. + \param opacity Drawing opacity. + **/ + template + CImg& draw_triangle(const int x0, const int y0, + const int x1, const int y1, + const int x2, const int y2, + const tc *const color, const float opacity=1) { + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Specified color is (null).", + cimg_instance); + _draw_triangle(x0,y0,x1,y1,x2,y2,color,opacity,1); + return *this; + } + + //! Draw a outlined 2d triangle. + /** + \param x0 X-coordinate of the first vertex. + \param y0 Y-coordinate of the first vertex. + \param x1 X-coordinate of the second vertex. + \param y1 Y-coordinate of the second vertex. + \param x2 X-coordinate of the third vertex. + \param y2 Y-coordinate of the third vertex. + \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. + \param opacity Drawing opacity. + \param pattern An integer whose bits describe the outline pattern. + **/ + template + CImg& draw_triangle(const int x0, const int y0, + const int x1, const int y1, + const int x2, const int y2, + const tc *const color, const float opacity, + const unsigned int pattern) { + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Specified color is (null).", + cimg_instance); + draw_line(x0,y0,x1,y1,color,opacity,pattern,true). + draw_line(x1,y1,x2,y2,color,opacity,pattern,false). + draw_line(x2,y2,x0,y0,color,opacity,pattern,false); + return *this; + } + + //! Draw a filled 2d triangle, with z-buffering. + /** + \param zbuffer Z-buffer image. + \param x0 X-coordinate of the first vertex. + \param y0 Y-coordinate of the first vertex. + \param z0 Z-coordinate of the first vertex. + \param x1 X-coordinate of the second vertex. + \param y1 Y-coordinate of the second vertex. + \param z1 Z-coordinate of the second vertex. + \param x2 X-coordinate of the third vertex. + \param y2 Y-coordinate of the third vertex. + \param z2 Z-coordinate of the third vertex. + \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. + \param opacity Drawing opacity. + \param brightness Brightness factor. + **/ + template + CImg& draw_triangle(CImg& zbuffer, + const int x0, const int y0, const float z0, + const int x1, const int y1, const float z1, + const int x2, const int y2, const float z2, + const tc *const color, const float opacity=1, + const float brightness=1) { + typedef typename cimg::superset::type tzfloat; + if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Specified color is (null).", + cimg_instance); + if (!is_sameXY(zbuffer)) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have " + "different dimensions.", + cimg_instance, + zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); + static const T maxval = (T)std::min(cimg::type::max(),(T)cimg::type::max()); + const float + nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f), + nbrightness = cimg::cut(brightness,0,2); + const longT whd = (longT)width()*height()*depth(), offx = spectrum()*whd; + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; + tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nz0,nz2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nz1,nz2); + if (ny0>=height() || ny2<0) return *this; + tzfloat + pzl = (nz1 - nz0)/(ny1 - ny0), + pzr = (nz2 - nz0)/(ny2 - ny0), + pzn = (nz2 - nz1)/(ny2 - ny1), + zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), + zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); + _cimg_for_triangle1(*this,xleft0,xright0,y,nx0,ny0,nx1,ny1,nx2,ny2) { + if (y==ny1) { zl = nz1; pzl = pzn; } + int xleft = xleft0, xright = xright0; + tzfloat zleft = zl, zright = zr; + if (xright=width() - 1) xright = width() - 1; + T* ptrd = data(xleft,y,0,0); + tz *ptrz = xleft<=xright?zbuffer.data(xleft,y):0; + if (opacity>=1) { + if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tc *col = color; cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=whd; } + ptrd-=offx; + } + zleft+=pentez; + } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tc *col = color; cimg_forC(*this,c) { *ptrd = (T)(nbrightness*(*col++)); ptrd+=whd; } + ptrd-=offx; + } + zleft+=pentez; + } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tc *col = color; + cimg_forC(*this,c) { *ptrd = (T)((2 - nbrightness)**(col++) + (nbrightness - 1)*maxval); ptrd+=whd; } + ptrd-=offx; + } + zleft+=pentez; + } + } else { + if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tc *col = color; cimg_forC(*this,c) { *ptrd = (T)(nopacity**(col++) + *ptrd*copacity); ptrd+=whd; } + ptrd-=offx; + } + zleft+=pentez; + } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tc *col = color; + cimg_forC(*this,c) { *ptrd = (T)(nopacity*nbrightness**(col++) + *ptrd*copacity); ptrd+=whd; } + ptrd-=offx; + } + zleft+=pentez; + } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tc *col = color; + cimg_forC(*this,c) { + const T val = (T)((2 - nbrightness)**(col++) + (nbrightness - 1)*maxval); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; + } + ptrd-=offx; + } + zleft+=pentez; + } + } + zr+=pzr; zl+=pzl; + } + return *this; + } + + //! Draw a Gouraud-shaded 2d triangle. + /** + \param x0 X-coordinate of the first vertex in the image instance. + \param y0 Y-coordinate of the first vertex in the image instance. + \param x1 X-coordinate of the second vertex in the image instance. + \param y1 Y-coordinate of the second vertex in the image instance. + \param x2 X-coordinate of the third vertex in the image instance. + \param y2 Y-coordinate of the third vertex in the image instance. + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param brightness0 Brightness factor of the first vertex (in [0,2]). + \param brightness1 brightness factor of the second vertex (in [0,2]). + \param brightness2 brightness factor of the third vertex (in [0,2]). + \param opacity Drawing opacity. + **/ + template + CImg& draw_triangle(const int x0, const int y0, + const int x1, const int y1, + const int x2, const int y2, + const tc *const color, + const float brightness0, + const float brightness1, + const float brightness2, + const float opacity=1) { + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Specified color is (null).", + cimg_instance); + static const T maxval = (T)std::min(cimg::type::max(),(T)cimg::type::max()); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + const longT whd = (longT)width()*height()*depth(), offx = spectrum()*whd - 1; + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, + nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), + nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), + nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nc0,nc1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nc0,nc2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nc1,nc2); + if (ny0>=height() || ny2<0) return *this; + _cimg_for_triangle2(*this,xleft0,cleft0,xright0,cright0,y,nx0,ny0,nc0,nx1,ny1,nc1,nx2,ny2,nc2) { + int xleft = xleft0, xright = xright0, cleft = cleft0, cright = cright0; + if (xrightcleft?cright - cleft:cleft - cright, + rc = dx?(cright - cleft)/dx:0, + sc = cright>cleft?1:-1, + ndc = dc - (dx?dx*(dc/dx):0); + int errc = dx>>1; + if (xleft<0 && dx) cleft-=xleft*(cright - cleft)/dx; + if (xleft<0) xleft = 0; + if (xright>=width() - 1) xright = width() - 1; + T* ptrd = data(xleft,y); + if (opacity>=1) for (int x = xleft; x<=xright; ++x) { + const tc *col = color; + cimg_forC(*this,c) { + *ptrd = (T)(cleft<256?cleft**(col++)/256:((512 - cleft)**(col++)+(cleft - 256)*maxval)/256); + ptrd+=whd; + } + ptrd-=offx; + cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); + } else for (int x = xleft; x<=xright; ++x) { + const tc *col = color; + cimg_forC(*this,c) { + const T val = (T)(cleft<256?cleft**(col++)/256:((512 - cleft)**(col++)+(cleft - 256)*maxval)/256); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; + } + ptrd-=offx; + cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); + } + } + return *this; + } + + //! Draw a Gouraud-shaded 2d triangle, with z-buffering \overloading. + template + CImg& draw_triangle(CImg& zbuffer, + const int x0, const int y0, const float z0, + const int x1, const int y1, const float z1, + const int x2, const int y2, const float z2, + const tc *const color, + const float brightness0, + const float brightness1, + const float brightness2, + const float opacity=1) { + typedef typename cimg::superset::type tzfloat; + if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Specified color is (null).", + cimg_instance); + if (!is_sameXY(zbuffer)) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have " + "different dimensions.", + cimg_instance, + zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); + static const T maxval = (T)std::min(cimg::type::max(),(T)cimg::type::max()); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + const longT whd = (longT)width()*height()*depth(), offx = spectrum()*whd; + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, + nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), + nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), + nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); + tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nz0,nz1,nc0,nc1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nz0,nz2,nc0,nc2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nz1,nz2,nc1,nc2); + if (ny0>=height() || ny2<0) return *this; + tzfloat + pzl = (nz1 - nz0)/(ny1 - ny0), + pzr = (nz2 - nz0)/(ny2 - ny0), + pzn = (nz2 - nz1)/(ny2 - ny1), + zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), + zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); + _cimg_for_triangle2(*this,xleft0,cleft0,xright0,cright0,y,nx0,ny0,nc0,nx1,ny1,nc1,nx2,ny2,nc2) { + if (y==ny1) { zl = nz1; pzl = pzn; } + int xleft = xleft0, xright = xright0, cleft = cleft0, cright = cright0; + tzfloat zleft = zl, zright = zr; + if (xrightcleft?cright - cleft:cleft - cright, + rc = dx?(cright - cleft)/dx:0, + sc = cright>cleft?1:-1, + ndc = dc - (dx?dx*(dc/dx):0); + const tzfloat pentez = (zright - zleft)/dx; + int errc = dx>>1; + if (xleft<0 && dx) { + cleft-=xleft*(cright - cleft)/dx; + zleft-=xleft*(zright - zleft)/dx; + } + if (xleft<0) xleft = 0; + if (xright>=width() - 1) xright = width() - 1; + T *ptrd = data(xleft,y); + tz *ptrz = xleft<=xright?zbuffer.data(xleft,y):0; + if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tc *col = color; + cimg_forC(*this,c) { + *ptrd = (T)(cleft<256?cleft**(col++)/256:((512 - cleft)**(col++)+(cleft - 256)*maxval)/256); + ptrd+=whd; + } + ptrd-=offx; + } + zleft+=pentez; + cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); + } else for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tc *col = color; + cimg_forC(*this,c) { + const T val = (T)(cleft<256?cleft**(col++)/256:((512 - cleft)**(col++)+(cleft - 256)*maxval)/256); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; + } + ptrd-=offx; + } + zleft+=pentez; + cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); + } + zr+=pzr; zl+=pzl; + } + return *this; + } + + //! Draw a color-interpolated 2d triangle. + /** + \param x0 X-coordinate of the first vertex in the image instance. + \param y0 Y-coordinate of the first vertex in the image instance. + \param x1 X-coordinate of the second vertex in the image instance. + \param y1 Y-coordinate of the second vertex in the image instance. + \param x2 X-coordinate of the third vertex in the image instance. + \param y2 Y-coordinate of the third vertex in the image instance. + \param color1 Pointer to \c spectrum() consecutive values of type \c T, defining the color of the first vertex. + \param color2 Pointer to \c spectrum() consecutive values of type \c T, defining the color of the seconf vertex. + \param color3 Pointer to \c spectrum() consecutive values of type \c T, defining the color of the third vertex. + \param opacity Drawing opacity. + **/ + template + CImg& draw_triangle(const int x0, const int y0, + const int x1, const int y1, + const int x2, const int y2, + const tc1 *const color1, + const tc2 *const color2, + const tc3 *const color3, + const float opacity=1) { + const unsigned char one = 1; + cimg_forC(*this,c) + get_shared_channel(c).draw_triangle(x0,y0,x1,y1,x2,y2,&one,color1[c],color2[c],color3[c],opacity); + return *this; + } + + //! Draw a textured 2d triangle. + /** + \param x0 X-coordinate of the first vertex in the image instance. + \param y0 Y-coordinate of the first vertex in the image instance. + \param x1 X-coordinate of the second vertex in the image instance. + \param y1 Y-coordinate of the second vertex in the image instance. + \param x2 X-coordinate of the third vertex in the image instance. + \param y2 Y-coordinate of the third vertex in the image instance. + \param texture Texture image used to fill the triangle. + \param tx0 X-coordinate of the first vertex in the texture image. + \param ty0 Y-coordinate of the first vertex in the texture image. + \param tx1 X-coordinate of the second vertex in the texture image. + \param ty1 Y-coordinate of the second vertex in the texture image. + \param tx2 X-coordinate of the third vertex in the texture image. + \param ty2 Y-coordinate of the third vertex in the texture image. + \param opacity Drawing opacity. + \param brightness Brightness factor of the drawing (in [0,2]). + **/ + template + CImg& draw_triangle(const int x0, const int y0, + const int x1, const int y1, + const int x2, const int y2, + const CImg& texture, + const int tx0, const int ty0, + const int tx1, const int ty1, + const int tx2, const int ty2, + const float opacity=1, + const float brightness=1) { + if (is_empty()) return *this; + if (texture._depth>1 || texture._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", + cimg_instance, + texture._width,texture._height,texture._depth,texture._spectrum,texture._data); + if (is_overlapped(texture)) + return draw_triangle(x0,y0,x1,y1,x2,y2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,opacity,brightness); + static const T maxval = (T)std::min(cimg::type::max(),cimg::type::max()); + const float + nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f), + nbrightness = cimg::cut(brightness,0,2); + const ulongT + whd = (ulongT)_width*_height*_depth, + twh = (ulongT)texture._width*texture._height, + offx = _spectrum*whd - 1; + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, + ntx0 = tx0, nty0 = ty0, ntx1 = tx1, nty1 = ty1, ntx2 = tx2, nty2 = ty2; + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2); + if (ny0>=height() || ny2<0) return *this; + _cimg_for_triangle3(*this,xleft0,txleft0,tyleft0,xright0,txright0,tyright0,y, + nx0,ny0,ntx0,nty0,nx1,ny1,ntx1,nty1,nx2,ny2,ntx2,nty2) { + int + xleft = xleft0, xright = xright0, + txleft = txleft0, txright = txright0, + tyleft = tyleft0, tyright = tyright0; + if (xrighttxleft?txright - txleft:txleft - txright, + dty = tyright>tyleft?tyright - tyleft:tyleft - tyright, + rtx = dx?(txright - txleft)/dx:0, + rty = dx?(tyright - tyleft)/dx:0, + stx = txright>txleft?1:-1, + sty = tyright>tyleft?1:-1, + ndtx = dtx - (dx?dx*(dtx/dx):0), + ndty = dty - (dx?dx*(dty/dx):0); + int errtx = dx>>1, errty = errtx; + if (xleft<0 && dx) { + txleft-=xleft*(txright - txleft)/dx; + tyleft-=xleft*(tyright - tyleft)/dx; + } + if (xleft<0) xleft = 0; + if (xright>=width() - 1) xright = width() - 1; + T* ptrd = data(xleft,y,0,0); + if (opacity>=1) { + if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { + const tc *col = &texture._atXY(txleft,tyleft); + cimg_forC(*this,c) { + *ptrd = (T)*col; + ptrd+=whd; col+=twh; + } + ptrd-=offx; + txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); + tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); + } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x) { + const tc *col = &texture._atXY(txleft,tyleft); + cimg_forC(*this,c) { + *ptrd = (T)(nbrightness**col); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); + tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); + } else for (int x = xleft; x<=xright; ++x) { + const tc *col = &texture._atXY(txleft,tyleft); + cimg_forC(*this,c) { + *ptrd = (T)((2 - nbrightness)**(col++) + (nbrightness - 1)*maxval); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); + tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); + } + } else { + if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { + const tc *col = &texture._atXY(txleft,tyleft); + cimg_forC(*this,c) { + *ptrd = (T)(nopacity**col + *ptrd*copacity); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); + tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); + } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x) { + const tc *col = &texture._atXY(txleft,tyleft); + cimg_forC(*this,c) { + *ptrd = (T)(nopacity*nbrightness**col + *ptrd*copacity); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); + tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); + } else for (int x = xleft; x<=xright; ++x) { + const tc *col = &texture._atXY(txleft,tyleft); + cimg_forC(*this,c) { + const T val = (T)((2 - nbrightness)**(col++) + (nbrightness - 1)*maxval); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); + tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); + } + } + } + return *this; + } + + //! Draw a 2d textured triangle, with perspective correction. + template + CImg& draw_triangle(const int x0, const int y0, const float z0, + const int x1, const int y1, const float z1, + const int x2, const int y2, const float z2, + const CImg& texture, + const int tx0, const int ty0, + const int tx1, const int ty1, + const int tx2, const int ty2, + const float opacity=1, + const float brightness=1) { + if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; + if (texture._depth>1 || texture._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", + cimg_instance, + texture._width,texture._height,texture._depth,texture._spectrum,texture._data); + if (is_overlapped(texture)) + return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,opacity,brightness); + static const T maxval = (T)std::min(cimg::type::max(),(T)cimg::type::max()); + const float + nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f), + nbrightness = cimg::cut(brightness,0,2); + const ulongT + whd = (ulongT)_width*_height*_depth, + twh = (ulongT)texture._width*texture._height, + offx = _spectrum*whd - 1; + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; + float + ntx0 = tx0/z0, nty0 = ty0/z0, + ntx1 = tx1/z1, nty1 = ty1/z1, + ntx2 = tx2/z2, nty2 = ty2/z2, + nz0 = 1/z0, nz1 = 1/z1, nz2 = 1/z2; + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2); + if (ny0>=height() || ny2<0) return *this; + float + ptxl = (ntx1 - ntx0)/(ny1 - ny0), + ptxr = (ntx2 - ntx0)/(ny2 - ny0), + ptxn = (ntx2 - ntx1)/(ny2 - ny1), + ptyl = (nty1 - nty0)/(ny1 - ny0), + ptyr = (nty2 - nty0)/(ny2 - ny0), + ptyn = (nty2 - nty1)/(ny2 - ny1), + pzl = (nz1 - nz0)/(ny1 - ny0), + pzr = (nz2 - nz0)/(ny2 - ny0), + pzn = (nz2 - nz1)/(ny2 - ny1), + zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), + txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), + tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), + zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))), + txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))): + (ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), + tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))): + (ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); + _cimg_for_triangle1(*this,xleft0,xright0,y,nx0,ny0,nx1,ny1,nx2,ny2) { + if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } + int xleft = xleft0, xright = xright0; + float + zleft = zl, zright = zr, + txleft = txl, txright = txr, + tyleft = tyl, tyright = tyr; + if (xright=width() - 1) xright = width() - 1; + T* ptrd = data(xleft,y,0,0); + if (opacity>=1) { + if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { + const float invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + *ptrd = (T)*col; + ptrd+=whd; col+=twh; + } + ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + } else if (nbrightness<1) for (int x=xleft; x<=xright; ++x) { + const float invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + *ptrd = (T)(nbrightness**col); + ptrd+=whd; col+=twh; + } + ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + } else for (int x = xleft; x<=xright; ++x) { + const float invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + *ptrd = (T)((2 - nbrightness)**col + (nbrightness - 1)*maxval); + ptrd+=whd; col+=twh; + } + ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + } + } else { + if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { + const float invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + *ptrd = (T)(nopacity**col + *ptrd*copacity); + ptrd+=whd; col+=twh; + } + ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x) { + const float invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + *ptrd = (T)(nopacity*nbrightness**col + *ptrd*copacity); + ptrd+=whd; col+=twh; + } + ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + } else for (int x = xleft; x<=xright; ++x) { + const float invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + const T val = (T)((2 - nbrightness)**col + (nbrightness - 1)*maxval); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; col+=twh; + } + ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + } + } + zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; + } + return *this; + } + + //! Draw a textured 2d triangle, with perspective correction and z-buffering. + template + CImg& draw_triangle(CImg& zbuffer, + const int x0, const int y0, const float z0, + const int x1, const int y1, const float z1, + const int x2, const int y2, const float z2, + const CImg& texture, + const int tx0, const int ty0, + const int tx1, const int ty1, + const int tx2, const int ty2, + const float opacity=1, + const float brightness=1) { + typedef typename cimg::superset::type tzfloat; + if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; + if (!is_sameXY(zbuffer)) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have " + "different dimensions.", + cimg_instance, + zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); + + if (texture._depth>1 || texture._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", + cimg_instance, + texture._width,texture._height,texture._depth,texture._spectrum,texture._data); + if (is_overlapped(texture)) + return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,opacity,brightness); + static const T maxval = (T)std::min(cimg::type::max(),(T)cimg::type::max()); + const float + nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f), + nbrightness = cimg::cut(brightness,0,2); + const ulongT + whd = (ulongT)_width*_height*_depth, + twh = (ulongT)texture._width*texture._height, + offx = _spectrum*whd; + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2; + float + ntx0 = tx0/z0, nty0 = ty0/z0, + ntx1 = tx1/z1, nty1 = ty1/z1, + ntx2 = tx2/z2, nty2 = ty2/z2; + tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2); + if (ny0>=height() || ny2<0) return *this; + float + ptxl = (ntx1 - ntx0)/(ny1 - ny0), + ptxr = (ntx2 - ntx0)/(ny2 - ny0), + ptxn = (ntx2 - ntx1)/(ny2 - ny1), + ptyl = (nty1 - nty0)/(ny1 - ny0), + ptyr = (nty2 - nty0)/(ny2 - ny0), + ptyn = (nty2 - nty1)/(ny2 - ny1), + txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), + tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), + txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))): + (ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), + tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))): + (ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); + tzfloat + pzl = (nz1 - nz0)/(ny1 - ny0), + pzr = (nz2 - nz0)/(ny2 - ny0), + pzn = (nz2 - nz1)/(ny2 - ny1), + zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), + zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); + _cimg_for_triangle1(*this,xleft0,xright0,y,nx0,ny0,nx1,ny1,nx2,ny2) { + if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } + int xleft = xleft0, xright = xright0; + float txleft = txl, txright = txr, tyleft = tyl, tyright = tyr; + tzfloat zleft = zl, zright = zr; + if (xright=width() - 1) xright = width() - 1; + T *ptrd = data(xleft,y,0,0); + tz *ptrz = zbuffer.data(xleft,y); + if (opacity>=1) { + if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tzfloat invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + *ptrd = (T)*col; + ptrd+=whd; col+=twh; + } + ptrd-=offx; + } + zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tzfloat invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + *ptrd = (T)(nbrightness**col); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + } + zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tzfloat invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + *ptrd = (T)((2 - nbrightness)**col + (nbrightness - 1)*maxval); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + } + zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + } + } else { + if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tzfloat invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + *ptrd = (T)(nopacity**col + *ptrd*copacity); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + } + zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + } else if (nbrightness<1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tzfloat invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + *ptrd = (T)(nopacity*nbrightness**col + *ptrd*copacity); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + } + zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tzfloat invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + const T val = (T)((2 - nbrightness)**col + (nbrightness - 1)*maxval); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + } + zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + } + } + zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; + } + return *this; + } + + //! Draw a Phong-shaded 2d triangle. + /** + \param x0 X-coordinate of the first vertex in the image instance. + \param y0 Y-coordinate of the first vertex in the image instance. + \param x1 X-coordinate of the second vertex in the image instance. + \param y1 Y-coordinate of the second vertex in the image instance. + \param x2 X-coordinate of the third vertex in the image instance. + \param y2 Y-coordinate of the third vertex in the image instance. + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param light Light image. + \param lx0 X-coordinate of the first vertex in the light image. + \param ly0 Y-coordinate of the first vertex in the light image. + \param lx1 X-coordinate of the second vertex in the light image. + \param ly1 Y-coordinate of the second vertex in the light image. + \param lx2 X-coordinate of the third vertex in the light image. + \param ly2 Y-coordinate of the third vertex in the light image. + \param opacity Drawing opacity. + **/ + template + CImg& draw_triangle(const int x0, const int y0, + const int x1, const int y1, + const int x2, const int y2, + const tc *const color, + const CImg& light, + const int lx0, const int ly0, + const int lx1, const int ly1, + const int lx2, const int ly2, + const float opacity=1) { + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Specified color is (null).", + cimg_instance); + if (light._depth>1 || light._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", + cimg_instance,light._width,light._height,light._depth,light._spectrum,light._data); + if (is_overlapped(light)) return draw_triangle(x0,y0,x1,y1,x2,y2,color,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); + static const T maxval = (T)std::min(cimg::type::max(),(T)cimg::type::max()); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, + nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; + const ulongT + whd = (ulongT)_width*_height*_depth, + lwh = (ulongT)light._width*light._height, + offx = _spectrum*whd - 1; + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nlx0,nlx1,nly0,nly1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nlx0,nlx2,nly0,nly2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nlx1,nlx2,nly1,nly2); + if (ny0>=height() || ny2<0) return *this; + _cimg_for_triangle3(*this,xleft0,lxleft0,lyleft0,xright0,lxright0,lyright0,y, + nx0,ny0,nlx0,nly0,nx1,ny1,nlx1,nly1,nx2,ny2,nlx2,nly2) { + int + xleft = xleft0, xright = xright0, + lxleft = lxleft0, lxright = lxright0, + lyleft = lyleft0, lyright = lyright0; + if (xrightlxleft?lxright - lxleft:lxleft - lxright, + dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, + rlx = dx?(lxright - lxleft)/dx:0, + rly = dx?(lyright - lyleft)/dx:0, + slx = lxright>lxleft?1:-1, + sly = lyright>lyleft?1:-1, + ndlx = dlx - (dx?dx*(dlx/dx):0), + ndly = dly - (dx?dx*(dly/dx):0); + int errlx = dx>>1, errly = errlx; + if (xleft<0 && dx) { + lxleft-=xleft*(lxright - lxleft)/dx; + lyleft-=xleft*(lyright - lyleft)/dx; + } + if (xleft<0) xleft = 0; + if (xright>=width() - 1) xright = width() - 1; + T* ptrd = data(xleft,y,0,0); + if (opacity>=1) for (int x = xleft; x<=xright; ++x) { + const tc *col = color; + const tl *lig = &light._atXY(lxleft,lyleft); + cimg_forC(*this,c) { + const tl l = *lig; + *ptrd = (T)(l<1?l**(col++):((2 - l)**(col++) + (l - 1)*maxval)); + ptrd+=whd; lig+=lwh; + } + ptrd-=offx; + lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); + lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); + } else for (int x = xleft; x<=xright; ++x) { + const tc *col = color; + const tl *lig = &light._atXY(lxleft,lyleft); + cimg_forC(*this,c) { + const tl l = *lig; + const T val = (T)(l<1?l**(col++):((2 - l)**(col++) + (l - 1)*maxval)); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; lig+=lwh; + } + ptrd-=offx; + lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); + lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); + } + } + return *this; + } + + //! Draw a Phong-shaded 2d triangle, with z-buffering. + template + CImg& draw_triangle(CImg& zbuffer, + const int x0, const int y0, const float z0, + const int x1, const int y1, const float z1, + const int x2, const int y2, const float z2, + const tc *const color, + const CImg& light, + const int lx0, const int ly0, + const int lx1, const int ly1, + const int lx2, const int ly2, + const float opacity=1) { + typedef typename cimg::superset::type tzfloat; + if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Specified color is (null).", + cimg_instance); + if (light._depth>1 || light._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", + cimg_instance,light._width,light._height,light._depth,light._spectrum,light._data); + if (!is_sameXY(zbuffer)) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have " + "different dimensions.", + cimg_instance, + zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); + if (is_overlapped(light)) return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color, + +light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); + static const T maxval = (T)std::min(cimg::type::max(),(T)cimg::type::max()); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + const ulongT + whd = (ulongT)_width*_height*_depth, + lwh = (ulongT)light._width*light._height, + offx = _spectrum*whd; + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, + nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; + tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nlx0,nlx1,nly0,nly1,nz0,nz1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nlx0,nlx2,nly0,nly2,nz0,nz2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nlx1,nlx2,nly1,nly2,nz1,nz2); + if (ny0>=height() || ny2<0) return *this; + tzfloat + pzl = (nz1 - nz0)/(ny1 - ny0), + pzr = (nz2 - nz0)/(ny2 - ny0), + pzn = (nz2 - nz1)/(ny2 - ny1), + zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), + zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); + _cimg_for_triangle3(*this,xleft0,lxleft0,lyleft0,xright0,lxright0,lyright0,y, + nx0,ny0,nlx0,nly0,nx1,ny1,nlx1,nly1,nx2,ny2,nlx2,nly2) { + if (y==ny1) { zl = nz1; pzl = pzn; } + int + xleft = xleft0, xright = xright0, + lxleft = lxleft0, lxright = lxright0, + lyleft = lyleft0, lyright = lyright0; + tzfloat zleft = zl, zright = zr; + if (xrightlxleft?lxright - lxleft:lxleft - lxright, + dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, + rlx = dx?(lxright - lxleft)/dx:0, + rly = dx?(lyright - lyleft)/dx:0, + slx = lxright>lxleft?1:-1, + sly = lyright>lyleft?1:-1, + ndlx = dlx - (dx?dx*(dlx/dx):0), + ndly = dly - (dx?dx*(dly/dx):0); + const tzfloat pentez = (zright - zleft)/dx; + int errlx = dx>>1, errly = errlx; + if (xleft<0 && dx) { + zleft-=xleft*(zright - zleft)/dx; + lxleft-=xleft*(lxright - lxleft)/dx; + lyleft-=xleft*(lyright - lyleft)/dx; + } + if (xleft<0) xleft = 0; + if (xright>=width() - 1) xright = width() - 1; + T *ptrd = data(xleft,y,0,0); + tz *ptrz = xleft<=xright?zbuffer.data(xleft,y):0; + if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tc *col = color; + const tl *lig = &light._atXY(lxleft,lyleft); + cimg_forC(*this,c) { + const tl l = *lig; + const tc cval = *(col++); + *ptrd = (T)(l<1?l*cval:(2 - l)*cval + (l - 1)*maxval); + ptrd+=whd; lig+=lwh; + } + ptrd-=offx; + } + zleft+=pentez; + lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); + lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); + } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tc *col = color; + const tl *lig = &light._atXY(lxleft,lyleft); + cimg_forC(*this,c) { + const tl l = *lig; + const tc cval = *(col++); + const T val = (T)(l<1?l*cval:(2 - l)*cval + (l - 1)*maxval); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; lig+=lwh; + } + ptrd-=offx; + } + zleft+=pentez; + lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); + lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); + } + zr+=pzr; zl+=pzl; + } + return *this; + } + + //! Draw a textured Gouraud-shaded 2d triangle. + /** + \param x0 X-coordinate of the first vertex in the image instance. + \param y0 Y-coordinate of the first vertex in the image instance. + \param x1 X-coordinate of the second vertex in the image instance. + \param y1 Y-coordinate of the second vertex in the image instance. + \param x2 X-coordinate of the third vertex in the image instance. + \param y2 Y-coordinate of the third vertex in the image instance. + \param texture Texture image used to fill the triangle. + \param tx0 X-coordinate of the first vertex in the texture image. + \param ty0 Y-coordinate of the first vertex in the texture image. + \param tx1 X-coordinate of the second vertex in the texture image. + \param ty1 Y-coordinate of the second vertex in the texture image. + \param tx2 X-coordinate of the third vertex in the texture image. + \param ty2 Y-coordinate of the third vertex in the texture image. + \param brightness0 Brightness factor of the first vertex. + \param brightness1 Brightness factor of the second vertex. + \param brightness2 Brightness factor of the third vertex. + \param opacity Drawing opacity. + **/ + template + CImg& draw_triangle(const int x0, const int y0, + const int x1, const int y1, + const int x2, const int y2, + const CImg& texture, + const int tx0, const int ty0, + const int tx1, const int ty1, + const int tx2, const int ty2, + const float brightness0, + const float brightness1, + const float brightness2, + const float opacity=1) { + if (is_empty()) return *this; + if (texture._depth>1 || texture._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", + cimg_instance, + texture._width,texture._height,texture._depth,texture._spectrum,texture._data); + if (is_overlapped(texture)) + return draw_triangle(x0,y0,x1,y1,x2,y2,+texture,tx0,ty0,tx1,ty1,tx2,ty2, + brightness0,brightness1,brightness2,opacity); + static const T maxval = (T)std::min(cimg::type::max(),cimg::type::max()); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + const ulongT + whd = (ulongT)_width*_height*_depth, + twh = (ulongT)texture._width*texture._height, + offx = _spectrum*whd - 1; + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, + ntx0 = tx0, nty0 = ty0, ntx1 = tx1, nty1 = ty1, ntx2 = tx2, nty2 = ty2, + nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), + nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), + nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nc0,nc1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nc0,nc2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nc1,nc2); + if (ny0>=height() || ny2<0) return *this; + _cimg_for_triangle4(*this,xleft0,cleft0,txleft0,tyleft0,xright0,cright0,txright0,tyright0,y, + nx0,ny0,nc0,ntx0,nty0,nx1,ny1,nc1,ntx1,nty1,nx2,ny2,nc2,ntx2,nty2) { + int + xleft = xleft0, xright = xright0, + cleft = cleft0, cright = cright0, + txleft = txleft0, txright = txright0, + tyleft = tyleft0, tyright = tyright0; + if (xrightcleft?cright - cleft:cleft - cright, + dtx = txright>txleft?txright - txleft:txleft - txright, + dty = tyright>tyleft?tyright - tyleft:tyleft - tyright, + rc = dx?(cright - cleft)/dx:0, + rtx = dx?(txright - txleft)/dx:0, + rty = dx?(tyright - tyleft)/dx:0, + sc = cright>cleft?1:-1, + stx = txright>txleft?1:-1, + sty = tyright>tyleft?1:-1, + ndc = dc - (dx?dx*(dc/dx):0), + ndtx = dtx - (dx?dx*(dtx/dx):0), + ndty = dty - (dx?dx*(dty/dx):0); + int errc = dx>>1, errtx = errc, errty = errc; + if (xleft<0 && dx) { + cleft-=xleft*(cright - cleft)/dx; + txleft-=xleft*(txright - txleft)/dx; + tyleft-=xleft*(tyright - tyleft)/dx; + } + if (xleft<0) xleft = 0; + if (xright>=width() - 1) xright = width() - 1; + T* ptrd = data(xleft,y,0,0); + if (opacity>=1) for (int x = xleft; x<=xright; ++x) { + const tc *col = &texture._atXY(txleft,tyleft); + cimg_forC(*this,c) { + *ptrd = (T)(cleft<256?cleft**col/256:((512 - cleft)**col + (cleft - 256)*maxval)/256); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); + txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); + tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); + } else for (int x = xleft; x<=xright; ++x) { + const tc *col = &texture._atXY(txleft,tyleft); + cimg_forC(*this,c) { + const T val = (T)(cleft<256?cleft**col/256:((512 - cleft)**col + (cleft - 256)*maxval)/256); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); + txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); + tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); + } + } + return *this; + } + + //! Draw a textured Gouraud-shaded 2d triangle, with perspective correction \overloading. + template + CImg& draw_triangle(const int x0, const int y0, const float z0, + const int x1, const int y1, const float z1, + const int x2, const int y2, const float z2, + const CImg& texture, + const int tx0, const int ty0, + const int tx1, const int ty1, + const int tx2, const int ty2, + const float brightness0, + const float brightness1, + const float brightness2, + const float opacity=1) { + if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; + if (texture._depth>1 || texture._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", + cimg_instance, + texture._width,texture._height,texture._depth,texture._spectrum,texture._data); + if (is_overlapped(texture)) return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2, + brightness0,brightness1,brightness2,opacity); + static const T maxval = (T)std::min(cimg::type::max(),(T)cimg::type::max()); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + const ulongT + whd = (ulongT)_width*_height*_depth, + twh = (ulongT)texture._width*texture._height, + offx = _spectrum*whd - 1; + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, + nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), + nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), + nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); + float + ntx0 = tx0/z0, nty0 = ty0/z0, + ntx1 = tx1/z1, nty1 = ty1/z1, + ntx2 = tx2/z2, nty2 = ty2/z2, + nz0 = 1/z0, nz1 = 1/z1, nz2 = 1/z2; + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1,nc0,nc1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2,nc0,nc2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2,nc1,nc2); + if (ny0>=height() || ny2<0) return *this; + float + ptxl = (ntx1 - ntx0)/(ny1 - ny0), + ptxr = (ntx2 - ntx0)/(ny2 - ny0), + ptxn = (ntx2 - ntx1)/(ny2 - ny1), + ptyl = (nty1 - nty0)/(ny1 - ny0), + ptyr = (nty2 - nty0)/(ny2 - ny0), + ptyn = (nty2 - nty1)/(ny2 - ny1), + pzl = (nz1 - nz0)/(ny1 - ny0), + pzr = (nz2 - nz0)/(ny2 - ny0), + pzn = (nz2 - nz1)/(ny2 - ny1), + zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), + txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), + tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), + zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))), + txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))): + (ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), + tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))): + (ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); + _cimg_for_triangle2(*this,xleft0,cleft0,xright0,cright0,y,nx0,ny0,nc0,nx1,ny1,nc1,nx2,ny2,nc2) { + if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } + int + xleft = xleft0, xright = xright0, + cleft = cleft0, cright = cright0; + float + zleft = zl, zright = zr, + txleft = txl, txright = txr, + tyleft = tyl, tyright = tyr; + if (xrightcleft?cright - cleft:cleft - cright, + rc = dx?(cright - cleft)/dx:0, + sc = cright>cleft?1:-1, + ndc = dc - (dx?dx*(dc/dx):0); + const float + pentez = (zright - zleft)/dx, + pentetx = (txright - txleft)/dx, + pentety = (tyright - tyleft)/dx; + int errc = dx>>1; + if (xleft<0 && dx) { + cleft-=xleft*(cright - cleft)/dx; + zleft-=xleft*(zright - zleft)/dx; + txleft-=xleft*(txright - txleft)/dx; + tyleft-=xleft*(tyright - tyleft)/dx; + } + if (xleft<0) xleft = 0; + if (xright>=width() - 1) xright = width() - 1; + T* ptrd = data(xleft,y,0,0); + if (opacity>=1) for (int x = xleft; x<=xright; ++x) { + const float invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + *ptrd = (T)(cleft<256?cleft**col/256:((512 - cleft)**col + (cleft - 256)*maxval)/256); + ptrd+=whd; col+=twh; + } + ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); + } else for (int x = xleft; x<=xright; ++x) { + const float invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + const T val = (T)(cleft<256?cleft**col/256:((512 - cleft)**col + (cleft - 256)*maxval)/256); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; col+=twh; + } + ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); + } + zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; + } + return *this; + } + + //! Draw a textured Gouraud-shaded 2d triangle, with perspective correction and z-buffering \overloading. + template + CImg& draw_triangle(CImg& zbuffer, + const int x0, const int y0, const float z0, + const int x1, const int y1, const float z1, + const int x2, const int y2, const float z2, + const CImg& texture, + const int tx0, const int ty0, + const int tx1, const int ty1, + const int tx2, const int ty2, + const float brightness0, + const float brightness1, + const float brightness2, + const float opacity=1) { + typedef typename cimg::superset::type tzfloat; + if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; + if (!is_sameXY(zbuffer)) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have " + "different dimensions.", + cimg_instance, + zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); + if (texture._depth>1 || texture._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", + cimg_instance, + texture._width,texture._height,texture._depth,texture._spectrum,texture._data); + if (is_overlapped(texture)) + return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2, + brightness0,brightness1,brightness2,opacity); + static const T maxval = (T)std::min(cimg::type::max(),(T)cimg::type::max()); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + const ulongT + whd = (ulongT)_width*_height*_depth, + twh = (ulongT)texture._width*texture._height, + offx = _spectrum*whd; + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, + nc0 = (int)((brightness0<0.0f?0.0f:(brightness0>2.0f?2.0f:brightness0))*256.0f), + nc1 = (int)((brightness1<0.0f?0.0f:(brightness1>2.0f?2.0f:brightness1))*256.0f), + nc2 = (int)((brightness2<0.0f?0.0f:(brightness2>2.0f?2.0f:brightness2))*256.0f); + float + ntx0 = tx0/z0, nty0 = ty0/z0, + ntx1 = tx1/z1, nty1 = ty1/z1, + ntx2 = tx2/z2, nty2 = ty2/z2; + tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nz0,nz1,nc0,nc1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nz0,nz2,nc0,nc2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nz1,nz2,nc1,nc2); + if (ny0>=height() || ny2<0) return *this; + float + ptxl = (ntx1 - ntx0)/(ny1 - ny0), + ptxr = (ntx2 - ntx0)/(ny2 - ny0), + ptxn = (ntx2 - ntx1)/(ny2 - ny1), + ptyl = (nty1 - nty0)/(ny1 - ny0), + ptyr = (nty2 - nty0)/(ny2 - ny0), + ptyn = (nty2 - nty1)/(ny2 - ny1), + txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), + tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), + txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))): + (ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), + tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))): + (ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); + tzfloat + pzl = (nz1 - nz0)/(ny1 - ny0), + pzr = (nz2 - nz0)/(ny2 - ny0), + pzn = (nz2 - nz1)/(ny2 - ny1), + zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), + zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); + _cimg_for_triangle2(*this,xleft0,cleft0,xright0,cright0,y,nx0,ny0,nc0,nx1,ny1,nc1,nx2,ny2,nc2) { + if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } + int xleft = xleft0, xright = xright0, cleft = cleft0, cright = cright0; + float txleft = txl, txright = txr, tyleft = tyl, tyright = tyr; + tzfloat zleft = zl, zright = zr; + if (xrightcleft?cright - cleft:cleft - cright, + rc = dx?(cright - cleft)/dx:0, + sc = cright>cleft?1:-1, + ndc = dc - (dx?dx*(dc/dx):0); + float pentetx = (txright - txleft)/dx, pentety = (tyright - tyleft)/dx; + const tzfloat pentez = (zright - zleft)/dx; + int errc = dx>>1; + if (xleft<0 && dx) { + cleft-=xleft*(cright - cleft)/dx; + zleft-=xleft*(zright - zleft)/dx; + txleft-=xleft*(txright - txleft)/dx; + tyleft-=xleft*(tyright - tyleft)/dx; + } + if (xleft<0) xleft = 0; + if (xright>=width() - 1) xright = width() - 1; + T* ptrd = data(xleft,y); + tz *ptrz = zbuffer.data(xleft,y); + if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tzfloat invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + *ptrd = (T)(cleft<256?cleft**col/256:((512 - cleft)**col + (cleft - 256)*maxval)/256); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + } + zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); + } else for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tzfloat invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + cimg_forC(*this,c) { + const T val = (T)(cleft<256?cleft**col/256:((512 - cleft)**col + (cleft - 256)*maxval)/256); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; col+=twh; + } + ptrd-=offx; + } + zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + cleft+=rc+((errc-=ndc)<0?errc+=dx,sc:0); + } + zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; + } + return *this; + } + + //! Draw a textured Phong-shaded 2d triangle. + /** + \param x0 X-coordinate of the first vertex in the image instance. + \param y0 Y-coordinate of the first vertex in the image instance. + \param x1 X-coordinate of the second vertex in the image instance. + \param y1 Y-coordinate of the second vertex in the image instance. + \param x2 X-coordinate of the third vertex in the image instance. + \param y2 Y-coordinate of the third vertex in the image instance. + \param texture Texture image used to fill the triangle. + \param tx0 X-coordinate of the first vertex in the texture image. + \param ty0 Y-coordinate of the first vertex in the texture image. + \param tx1 X-coordinate of the second vertex in the texture image. + \param ty1 Y-coordinate of the second vertex in the texture image. + \param tx2 X-coordinate of the third vertex in the texture image. + \param ty2 Y-coordinate of the third vertex in the texture image. + \param light Light image. + \param lx0 X-coordinate of the first vertex in the light image. + \param ly0 Y-coordinate of the first vertex in the light image. + \param lx1 X-coordinate of the second vertex in the light image. + \param ly1 Y-coordinate of the second vertex in the light image. + \param lx2 X-coordinate of the third vertex in the light image. + \param ly2 Y-coordinate of the third vertex in the light image. + \param opacity Drawing opacity. + **/ + template + CImg& draw_triangle(const int x0, const int y0, + const int x1, const int y1, + const int x2, const int y2, + const CImg& texture, + const int tx0, const int ty0, + const int tx1, const int ty1, + const int tx2, const int ty2, + const CImg& light, + const int lx0, const int ly0, + const int lx1, const int ly1, + const int lx2, const int ly2, + const float opacity=1) { + if (is_empty()) return *this; + if (texture._depth>1 || texture._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", + cimg_instance, + texture._width,texture._height,texture._depth,texture._spectrum,texture._data); + if (light._depth>1 || light._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", + cimg_instance,light._width,light._height,light._depth,light._spectrum,light._data); + if (is_overlapped(texture)) + return draw_triangle(x0,y0,x1,y1,x2,y2,+texture,tx0,ty0,tx1,ty1,tx2,ty2,light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); + if (is_overlapped(light)) + return draw_triangle(x0,y0,x1,y1,x2,y2,texture,tx0,ty0,tx1,ty1,tx2,ty2,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); + static const T maxval = (T)std::min(cimg::type::max(),(T)cimg::type::max()); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + const ulongT + whd = (ulongT)_width*_height*_depth, + twh = (ulongT)texture._width*texture._height, + lwh = (ulongT)light._width*light._height, + offx = _spectrum*whd - 1; + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, + ntx0 = tx0, nty0 = ty0, ntx1 = tx1, nty1 = ty1, ntx2 = tx2, nty2 = ty2, + nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nlx0,nlx1,nly0,nly1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nlx0,nlx2,nly0,nly2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nlx1,nlx2,nly1,nly2); + if (ny0>=height() || ny2<0) return *this; + const bool is_bump = texture._spectrum>=_spectrum + 2; + const ulongT obx = twh*_spectrum, oby = twh*(_spectrum + 1); + + _cimg_for_triangle5(*this,xleft0,lxleft0,lyleft0,txleft0,tyleft0,xright0,lxright0,lyright0,txright0,tyright0,y, + nx0,ny0,nlx0,nly0,ntx0,nty0,nx1,ny1,nlx1,nly1,ntx1,nty1,nx2,ny2,nlx2,nly2,ntx2,nty2) { + int + xleft = xleft0, xright = xright0, + lxleft = lxleft0, lxright = lxright0, + lyleft = lyleft0, lyright = lyright0, + txleft = txleft0, txright = txright0, + tyleft = tyleft0, tyright = tyright0; + if (xrightlxleft?lxright - lxleft:lxleft - lxright, + dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, + dtx = txright>txleft?txright - txleft:txleft - txright, + dty = tyright>tyleft?tyright - tyleft:tyleft - tyright, + rlx = dx?(lxright - lxleft)/dx:0, + rly = dx?(lyright - lyleft)/dx:0, + rtx = dx?(txright - txleft)/dx:0, + rty = dx?(tyright - tyleft)/dx:0, + slx = lxright>lxleft?1:-1, + sly = lyright>lyleft?1:-1, + stx = txright>txleft?1:-1, + sty = tyright>tyleft?1:-1, + ndlx = dlx - (dx?dx*(dlx/dx):0), + ndly = dly - (dx?dx*(dly/dx):0), + ndtx = dtx - (dx?dx*(dtx/dx):0), + ndty = dty - (dx?dx*(dty/dx):0); + int errlx = dx>>1, errly = errlx, errtx = errlx, errty = errlx; + if (xleft<0 && dx) { + lxleft-=xleft*(lxright - lxleft)/dx; + lyleft-=xleft*(lyright - lyleft)/dx; + txleft-=xleft*(txright - txleft)/dx; + tyleft-=xleft*(tyright - tyleft)/dx; + } + if (xleft<0) xleft = 0; + if (xright>=width() - 1) xright = width() - 1; + T* ptrd = data(xleft,y,0,0); + if (opacity>=1) for (int x = xleft; x<=xright; ++x) { + const tc *col = &texture._atXY(txleft,tyleft); + const int bx = is_bump?128 - (int)col[obx]:0, by = is_bump?128 - (int)col[oby]:0; + const tl *lig = &light._atXY(lxleft + bx,lyleft + by); + cimg_forC(*this,c) { + const tl l = *lig; + *ptrd = (T)(l<1?l**col:(2 - l)**col + (l - 1)*maxval); + ptrd+=whd; col+=twh; lig+=lwh; + } + ptrd-=offx; + lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); + lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); + txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); + tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); + } else for (int x = xleft; x<=xright; ++x) { + const tc *col = &texture._atXY(txleft,tyleft); + const int bx = is_bump?128 - (int)col[obx]:0, by = is_bump?128 - (int)col[oby]:0; + const tl *lig = &light._atXY(lxleft + bx,lyleft + by); + cimg_forC(*this,c) { + const tl l = *lig; + const T val = (T)(l<1?l**col:(2 - l)**col + (l - 1)*maxval); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; col+=twh; lig+=lwh; + } + ptrd-=offx; + lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); + lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); + txleft+=rtx+((errtx-=ndtx)<0?errtx+=dx,stx:0); + tyleft+=rty+((errty-=ndty)<0?errty+=dx,sty:0); + } + } + return *this; + } + + //! Draw a textured Phong-shaded 2d triangle, with perspective correction. + template + CImg& draw_triangle(const int x0, const int y0, const float z0, + const int x1, const int y1, const float z1, + const int x2, const int y2, const float z2, + const CImg& texture, + const int tx0, const int ty0, + const int tx1, const int ty1, + const int tx2, const int ty2, + const CImg& light, + const int lx0, const int ly0, + const int lx1, const int ly1, + const int lx2, const int ly2, + const float opacity=1) { + if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; + if (texture._depth>1 || texture._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", + cimg_instance, + texture._width,texture._height,texture._depth,texture._spectrum,texture._data); + if (light._depth>1 || light._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", + cimg_instance,light._width,light._height,light._depth,light._spectrum,light._data); + if (is_overlapped(texture)) + return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,+texture,tx0,ty0,tx1,ty1,tx2,ty2, + light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); + if (is_overlapped(light)) + return draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,texture,tx0,ty0,tx1,ty1,tx2,ty2, + +light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); + static const T maxval = (T)std::min(cimg::type::max(),(T)cimg::type::max()); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + const ulongT + whd = (ulongT)_width*_height*_depth, + twh = (ulongT)texture._width*texture._height, + lwh = (ulongT)light._width*light._height, + offx = _spectrum*whd - 1; + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, + nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; + float + ntx0 = tx0/z0, nty0 = ty0/z0, + ntx1 = tx1/z1, nty1 = ty1/z1, + ntx2 = tx2/z2, nty2 = ty2/z2, + nz0 = 1/z0, nz1 = 1/z1, nz2 = 1/z2; + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nlx0,nlx1,nly0,nly1,nz0,nz1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nlx0,nlx2,nly0,nly2,nz0,nz2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nlx1,nlx2,nly1,nly2,nz1,nz2); + if (ny0>=height() || ny2<0) return *this; + float + ptxl = (ntx1 - ntx0)/(ny1 - ny0), + ptxr = (ntx2 - ntx0)/(ny2 - ny0), + ptxn = (ntx2 - ntx1)/(ny2 - ny1), + ptyl = (nty1 - nty0)/(ny1 - ny0), + ptyr = (nty2 - nty0)/(ny2 - ny0), + ptyn = (nty2 - nty1)/(ny2 - ny1), + pzl = (nz1 - nz0)/(ny1 - ny0), + pzr = (nz2 - nz0)/(ny2 - ny0), + pzn = (nz2 - nz1)/(ny2 - ny1), + zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), + txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), + tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), + zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))), + txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))): + (ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), + tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))): + (ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); + const bool is_bump = texture._spectrum>=_spectrum + 2; + const ulongT obx = twh*_spectrum, oby = twh*(_spectrum + 1); + + _cimg_for_triangle3(*this,xleft0,lxleft0,lyleft0,xright0,lxright0,lyright0,y, + nx0,ny0,nlx0,nly0,nx1,ny1,nlx1,nly1,nx2,ny2,nlx2,nly2) { + if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } + int + xleft = xleft0, xright = xright0, + lxleft = lxleft0, lxright = lxright0, + lyleft = lyleft0, lyright = lyright0; + float + zleft = zl, zright = zr, + txleft = txl, txright = txr, + tyleft = tyl, tyright = tyr; + if (xrightlxleft?lxright - lxleft:lxleft - lxright, + dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, + rlx = dx?(lxright - lxleft)/dx:0, + rly = dx?(lyright - lyleft)/dx:0, + slx = lxright>lxleft?1:-1, + sly = lyright>lyleft?1:-1, + ndlx = dlx - (dx?dx*(dlx/dx):0), + ndly = dly - (dx?dx*(dly/dx):0); + const float + pentez = (zright - zleft)/dx, + pentetx = (txright - txleft)/dx, + pentety = (tyright - tyleft)/dx; + int errlx = dx>>1, errly = errlx; + if (xleft<0 && dx) { + zleft-=xleft*(zright - zleft)/dx; + lxleft-=xleft*(lxright - lxleft)/dx; + lyleft-=xleft*(lyright - lyleft)/dx; + txleft-=xleft*(txright - txleft)/dx; + tyleft-=xleft*(tyright - tyleft)/dx; + } + if (xleft<0) xleft = 0; + if (xright>=width() - 1) xright = width() - 1; + T* ptrd = data(xleft,y,0,0); + if (opacity>=1) for (int x = xleft; x<=xright; ++x) { + const float invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + const int bx = is_bump?128 - (int)col[obx]:0, by = is_bump?128 - (int)col[oby]:0; + const tl *lig = &light._atXY(lxleft + bx,lyleft + by); + cimg_forC(*this,c) { + const tl l = *lig; + *ptrd = (T)(l<1?l**col:(2 - l)**col + (l - 1)*maxval); + ptrd+=whd; col+=twh; lig+=lwh; + } + ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); + lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); + } else for (int x = xleft; x<=xright; ++x) { + const float invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + const int bx = is_bump?128 - (int)col[obx]:0, by = is_bump?128 - (int)col[oby]:0; + const tl *lig = &light._atXY(lxleft + bx,lyleft + by); + cimg_forC(*this,c) { + const tl l = *lig; + const T val = (T)(l<1?l**col:(2 - l)**col + (l - 1)*maxval); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; col+=twh; lig+=lwh; + } + ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); + lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); + } + zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; + } + return *this; + } + + //! Draw a textured Phong-shaded 2d triangle, with perspective correction and z-buffering. + template + CImg& draw_triangle(CImg& zbuffer, + const int x0, const int y0, const float z0, + const int x1, const int y1, const float z1, + const int x2, const int y2, const float z2, + const CImg& texture, + const int tx0, const int ty0, + const int tx1, const int ty1, + const int tx2, const int ty2, + const CImg& light, + const int lx0, const int ly0, + const int lx1, const int ly1, + const int lx2, const int ly2, + const float opacity=1) { + typedef typename cimg::superset::type tzfloat; + if (is_empty() || z0<=0 || z1<=0 || z2<=0) return *this; + if (!is_sameXY(zbuffer)) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Instance and specified Z-buffer (%u,%u,%u,%u,%p) have " + "different dimensions.", + cimg_instance, + zbuffer._width,zbuffer._height,zbuffer._depth,zbuffer._spectrum,zbuffer._data); + if (texture._depth>1 || texture._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified texture (%u,%u,%u,%u,%p).", + cimg_instance, + texture._width,texture._height,texture._depth,texture._spectrum,texture._data); + if (light._depth>1 || light._spectrum<_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_triangle(): Invalid specified light texture (%u,%u,%u,%u,%p).", + cimg_instance,light._width,light._height,light._depth,light._spectrum,light._data); + if (is_overlapped(texture)) + return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2, + +texture,tx0,ty0,tx1,ty1,tx2,ty2,light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); + if (is_overlapped(light)) + return draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2, + texture,tx0,ty0,tx1,ty1,tx2,ty2,+light,lx0,ly0,lx1,ly1,lx2,ly2,opacity); + static const T maxval = (T)std::min(cimg::type::max(),(T)cimg::type::max()); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + const ulongT + whd = (ulongT)_width*_height*_depth, + twh = (ulongT)texture._width*texture._height, + lwh = (ulongT)light._width*light._height, + offx = _spectrum*whd; + int nx0 = x0, ny0 = y0, nx1 = x1, ny1 = y1, nx2 = x2, ny2 = y2, + nlx0 = lx0, nly0 = ly0, nlx1 = lx1, nly1 = ly1, nlx2 = lx2, nly2 = ly2; + float + ntx0 = tx0/z0, nty0 = ty0/z0, + ntx1 = tx1/z1, nty1 = ty1/z1, + ntx2 = tx2/z2, nty2 = ty2/z2; + tzfloat nz0 = 1/(tzfloat)z0, nz1 = 1/(tzfloat)z1, nz2 = 1/(tzfloat)z2; + if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,ntx0,ntx1,nty0,nty1,nlx0,nlx1,nly0,nly1,nz0,nz1); + if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,ntx0,ntx2,nty0,nty2,nlx0,nlx2,nly0,nly2,nz0,nz2); + if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,ntx1,ntx2,nty1,nty2,nlx1,nlx2,nly1,nly2,nz1,nz2); + if (ny0>=height() || ny2<0) return *this; + float + ptxl = (ntx1 - ntx0)/(ny1 - ny0), + ptxr = (ntx2 - ntx0)/(ny2 - ny0), + ptxn = (ntx2 - ntx1)/(ny2 - ny1), + ptyl = (nty1 - nty0)/(ny1 - ny0), + ptyr = (nty2 - nty0)/(ny2 - ny0), + ptyn = (nty2 - nty1)/(ny2 - ny1), + txr = ny0>=0?ntx0:(ntx0 - ny0*(ntx2 - ntx0)/(ny2 - ny0)), + tyr = ny0>=0?nty0:(nty0 - ny0*(nty2 - nty0)/(ny2 - ny0)), + txl = ny1>=0?(ny0>=0?ntx0:(ntx0 - ny0*(ntx1 - ntx0)/(ny1 - ny0))): + (ptxl=ptxn,(ntx1 - ny1*(ntx2 - ntx1)/(ny2 - ny1))), + tyl = ny1>=0?(ny0>=0?nty0:(nty0 - ny0*(nty1 - nty0)/(ny1 - ny0))): + (ptyl=ptyn,(nty1 - ny1*(nty2 - nty1)/(ny2 - ny1))); + tzfloat + pzl = (nz1 - nz0)/(ny1 - ny0), + pzr = (nz2 - nz0)/(ny2 - ny0), + pzn = (nz2 - nz1)/(ny2 - ny1), + zr = ny0>=0?nz0:(nz0 - ny0*(nz2 - nz0)/(ny2 - ny0)), + zl = ny1>=0?(ny0>=0?nz0:(nz0 - ny0*(nz1 - nz0)/(ny1 - ny0))):(pzl=pzn,(nz1 - ny1*(nz2 - nz1)/(ny2 - ny1))); + const bool is_bump = texture._spectrum>=_spectrum + 2; + const ulongT obx = twh*_spectrum, oby = twh*(_spectrum + 1); + + _cimg_for_triangle3(*this,xleft0,lxleft0,lyleft0,xright0,lxright0,lyright0,y, + nx0,ny0,nlx0,nly0,nx1,ny1,nlx1,nly1,nx2,ny2,nlx2,nly2) { + if (y==ny1) { zl = nz1; txl = ntx1; tyl = nty1; pzl = pzn; ptxl = ptxn; ptyl = ptyn; } + int + xleft = xleft0, xright = xright0, + lxleft = lxleft0, lxright = lxright0, + lyleft = lyleft0, lyright = lyright0; + float txleft = txl, txright = txr, tyleft = tyl, tyright = tyr; + tzfloat zleft = zl, zright = zr; + if (xrightlxleft?lxright - lxleft:lxleft - lxright, + dly = lyright>lyleft?lyright - lyleft:lyleft - lyright, + rlx = dx?(lxright - lxleft)/dx:0, + rly = dx?(lyright - lyleft)/dx:0, + slx = lxright>lxleft?1:-1, + sly = lyright>lyleft?1:-1, + ndlx = dlx - (dx?dx*(dlx/dx):0), + ndly = dly - (dx?dx*(dly/dx):0); + float pentetx = (txright - txleft)/dx, pentety = (tyright - tyleft)/dx; + const tzfloat pentez = (zright - zleft)/dx; + int errlx = dx>>1, errly = errlx; + if (xleft<0 && dx) { + zleft-=xleft*(zright - zleft)/dx; + lxleft-=xleft*(lxright - lxleft)/dx; + lyleft-=xleft*(lyright - lyleft)/dx; + txleft-=xleft*(txright - txleft)/dx; + tyleft-=xleft*(tyright - tyleft)/dx; + } + if (xleft<0) xleft = 0; + if (xright>=width() - 1) xright = width() - 1; + T* ptrd = data(xleft,y); + tz *ptrz = zbuffer.data(xleft,y); + if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tzfloat invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + const int bx = is_bump?128 - (int)col[obx]:0, by = is_bump?128 - (int)col[oby]:0; + const tl *lig = &light._atXY(lxleft + bx,lyleft + by); + cimg_forC(*this,c) { + const tl l = *lig; + *ptrd = (T)(l<1?l**col:(2 - l)**col + (l - 1)*maxval); + ptrd+=whd; col+=twh; lig+=lwh; + } + ptrd-=offx; + } + zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); + lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); + } else for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { + if (zleft>=(tzfloat)*ptrz) { + *ptrz = (tz)zleft; + const tzfloat invz = 1/zleft; + const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); + const int bx = is_bump?128 - (int)col[obx]:0, by = is_bump?128 - (int)col[oby]:0; + const tl *lig = &light._atXY(lxleft + bx,lyleft + by); + cimg_forC(*this,c) { + const tl l = *lig; + const T val = (T)(l<1?l**col:(2 - l)**col + (l - 1)*maxval); + *ptrd = (T)(nopacity*val + *ptrd*copacity); + ptrd+=whd; col+=twh; lig+=lwh; + } + ptrd-=offx; + } + zleft+=pentez; txleft+=pentetx; tyleft+=pentety; + lxleft+=rlx+((errlx-=ndlx)<0?errlx+=dx,slx:0); + lyleft+=rly+((errly-=ndly)<0?errly+=dx,sly:0); + } + zr+=pzr; txr+=ptxr; tyr+=ptyr; zl+=pzl; txl+=ptxl; tyl+=ptyl; + } + return *this; + } + + //! Draw a filled 4d rectangle. + /** + \param x0 X-coordinate of the upper-left rectangle corner. + \param y0 Y-coordinate of the upper-left rectangle corner. + \param z0 Z-coordinate of the upper-left rectangle corner. + \param c0 C-coordinate of the upper-left rectangle corner. + \param x1 X-coordinate of the lower-right rectangle corner. + \param y1 Y-coordinate of the lower-right rectangle corner. + \param z1 Z-coordinate of the lower-right rectangle corner. + \param c1 C-coordinate of the lower-right rectangle corner. + \param val Scalar value used to fill the rectangle area. + \param opacity Drawing opacity. + **/ + CImg& draw_rectangle(const int x0, const int y0, const int z0, const int c0, + const int x1, const int y1, const int z1, const int c1, + const T val, const float opacity=1) { + if (is_empty()) return *this; + const int + nx0 = x0=width()?width() - 1 - nx1:0) + (nx0<0?nx0:0), + lY = (1 + ny1 - ny0) + (ny1>=height()?height() - 1 - ny1:0) + (ny0<0?ny0:0), + lZ = (1 + nz1 - nz0) + (nz1>=depth()?depth() - 1 - nz1:0) + (nz0<0?nz0:0), + lC = (1 + nc1 - nc0) + (nc1>=spectrum()?spectrum() - 1 - nc1:0) + (nc0<0?nc0:0); + const ulongT + offX = (ulongT)_width - lX, + offY = (ulongT)_width*(_height - lY), + offZ = (ulongT)_width*_height*(_depth - lZ); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + T *ptrd = data(nx0<0?0:nx0,ny0<0?0:ny0,nz0<0?0:nz0,nc0<0?0:nc0); + if (lX>0 && lY>0 && lZ>0 && lC>0) + for (int v = 0; v=1) { + if (sizeof(T)!=1) { for (int x = 0; x + CImg& draw_rectangle(const int x0, const int y0, const int z0, + const int x1, const int y1, const int z1, + const tc *const color, const float opacity=1) { + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_rectangle(): Specified color is (null).", + cimg_instance); + cimg_forC(*this,c) draw_rectangle(x0,y0,z0,c,x1,y1,z1,c,(T)color[c],opacity); + return *this; + } + + //! Draw an outlined 3d rectangle \overloading. + template + CImg& draw_rectangle(const int x0, const int y0, const int z0, + const int x1, const int y1, const int z1, + const tc *const color, const float opacity, + const unsigned int pattern) { + return draw_line(x0,y0,z0,x1,y0,z0,color,opacity,pattern,true). + draw_line(x1,y0,z0,x1,y1,z0,color,opacity,pattern,false). + draw_line(x1,y1,z0,x0,y1,z0,color,opacity,pattern,false). + draw_line(x0,y1,z0,x0,y0,z0,color,opacity,pattern,false). + draw_line(x0,y0,z1,x1,y0,z1,color,opacity,pattern,true). + draw_line(x1,y0,z1,x1,y1,z1,color,opacity,pattern,false). + draw_line(x1,y1,z1,x0,y1,z1,color,opacity,pattern,false). + draw_line(x0,y1,z1,x0,y0,z1,color,opacity,pattern,false). + draw_line(x0,y0,z0,x0,y0,z1,color,opacity,pattern,true). + draw_line(x1,y0,z0,x1,y0,z1,color,opacity,pattern,true). + draw_line(x1,y1,z0,x1,y1,z1,color,opacity,pattern,true). + draw_line(x0,y1,z0,x0,y1,z1,color,opacity,pattern,true); + } + + //! Draw a filled 2d rectangle. + /** + \param x0 X-coordinate of the upper-left rectangle corner. + \param y0 Y-coordinate of the upper-left rectangle corner. + \param x1 X-coordinate of the lower-right rectangle corner. + \param y1 Y-coordinate of the lower-right rectangle corner. + \param color Pointer to \c spectrum() consecutive values of type \c T, defining the drawing color. + \param opacity Drawing opacity. + **/ + template + CImg& draw_rectangle(const int x0, const int y0, + const int x1, const int y1, + const tc *const color, const float opacity=1) { + return draw_rectangle(x0,y0,0,x1,y1,_depth - 1,color,opacity); + } + + //! Draw a outlined 2d rectangle \overloading. + template + CImg& draw_rectangle(const int x0, const int y0, + const int x1, const int y1, + const tc *const color, const float opacity, + const unsigned int pattern) { + if (is_empty()) return *this; + if (y0==y1) return draw_line(x0,y0,x1,y0,color,opacity,pattern,true); + if (x0==x1) return draw_line(x0,y0,x0,y1,color,opacity,pattern,true); + const int + nx0 = x0 + CImg& draw_polygon(const CImg& points, + const tc *const color, const float opacity=1) { + if (is_empty() || !points) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_polygon(): Specified color is (null).", + cimg_instance); + if (points._width==1) return draw_point((int)points(0,0),(int)points(0,1),color,opacity); + if (points._width==2) return draw_line((int)points(0,0),(int)points(0,1), + (int)points(1,0),(int)points(1,1),color,opacity); + if (points._width==3) return draw_triangle((int)points(0,0),(int)points(0,1), + (int)points(1,0),(int)points(1,1), + (int)points(2,0),(int)points(2,1),color,opacity); + cimg_init_scanline(color,opacity); + int + xmin = 0, ymin = 0, + xmax = points.get_shared_row(0).max_min(xmin), + ymax = points.get_shared_row(1).max_min(ymin); + if (xmax<0 || xmin>=width() || ymax<0 || ymin>=height()) return *this; + if (ymin==ymax) return draw_line(xmin,ymin,xmax,ymax,color,opacity); + + ymin = std::max(0,ymin); + ymax = std::min(height() - 1,ymax); + CImg Xs(points._width,ymax - ymin + 1); + CImg count(Xs._height,1,1,1,0); + unsigned int n = 0, nn = 1; + bool go_on = true; + + while (go_on) { + unsigned int an = (nn + 1)%points._width; + const int + x0 = (int)points(n,0), + y0 = (int)points(n,1); + if (points(nn,1)==y0) while (points(an,1)==y0) { nn = an; (an+=1)%=points._width; } + const int + x1 = (int)points(nn,0), + y1 = (int)points(nn,1); + unsigned int tn = an; + while (points(tn,1)==y1) (tn+=1)%=points._width; + + if (y0!=y1) { + const int + y2 = (int)points(tn,1), + x01 = x1 - x0, y01 = y1 - y0, y12 = y2 - y1, + dy = cimg::sign(y01), + tmax = std::max(1,cimg::abs(y01)), + tend = tmax - (dy==cimg::sign(y12)); + unsigned int y = (unsigned int)y0 - ymin; + for (int t = 0; t<=tend; ++t, y+=dy) + if (yn; + n = nn; + nn = an; + } + + cimg_pragma_openmp(parallel for cimg_openmp_if(Xs._height>32)) + cimg_forY(Xs,y) { + const CImg Xsy = Xs.get_shared_points(0,count[y] - 1,y).sort(); + int px = width(); + for (unsigned int n = 0; n + CImg& draw_polygon(const CImg& points, + const tc *const color, const float opacity, const unsigned int pattern) { + if (is_empty() || !points || points._width<3) return *this; + bool ninit_hatch = true; + switch (points._height) { + case 0 : case 1 : + throw CImgArgumentException(_cimg_instance + "draw_polygon(): Invalid specified point set.", + cimg_instance); + case 2 : { // 2d version. + CImg npoints(points._width,2); + int x = npoints(0,0) = (int)points(0,0), y = npoints(0,1) = (int)points(0,1); + unsigned int nb_points = 1; + for (unsigned int p = 1; p npoints(points._width,3); + int + x = npoints(0,0) = (int)points(0,0), + y = npoints(0,1) = (int)points(0,1), + z = npoints(0,2) = (int)points(0,2); + unsigned int nb_points = 1; + for (unsigned int p = 1; p + CImg& draw_ellipse(const int x0, const int y0, const float r1, const float r2, const float angle, + const tc *const color, const float opacity=1) { + return _draw_ellipse(x0,y0,r1,r2,angle,color,opacity,0U); + } + + //! Draw a filled 2d ellipse \overloading. + /** + \param x0 X-coordinate of the ellipse center. + \param y0 Y-coordinate of the ellipse center. + \param tensor Diffusion tensor describing the ellipse. + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param opacity Drawing opacity. + **/ + template + CImg& draw_ellipse(const int x0, const int y0, const CImg &tensor, + const tc *const color, const float opacity=1) { + CImgList eig = tensor.get_symmetric_eigen(); + const CImg &val = eig[0], &vec = eig[1]; + return draw_ellipse(x0,y0,std::sqrt(val(0)),std::sqrt(val(1)), + std::atan2(vec(0,1),vec(0,0))*180/cimg::PI, + color,opacity); + } + + //! Draw an outlined 2d ellipse. + /** + \param x0 X-coordinate of the ellipse center. + \param y0 Y-coordinate of the ellipse center. + \param r1 First radius of the ellipse. + \param r2 Second radius of the ellipse. + \param angle Angle of the first radius. + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param opacity Drawing opacity. + \param pattern An integer whose bits describe the outline pattern. + **/ + template + CImg& draw_ellipse(const int x0, const int y0, const float r1, const float r2, const float angle, + const tc *const color, const float opacity, const unsigned int pattern) { + if (pattern) _draw_ellipse(x0,y0,r1,r2,angle,color,opacity,pattern); + return *this; + } + + //! Draw an outlined 2d ellipse \overloading. + /** + \param x0 X-coordinate of the ellipse center. + \param y0 Y-coordinate of the ellipse center. + \param tensor Diffusion tensor describing the ellipse. + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param opacity Drawing opacity. + \param pattern An integer whose bits describe the outline pattern. + **/ + template + CImg& draw_ellipse(const int x0, const int y0, const CImg &tensor, + const tc *const color, const float opacity, + const unsigned int pattern) { + CImgList eig = tensor.get_symmetric_eigen(); + const CImg &val = eig[0], &vec = eig[1]; + return draw_ellipse(x0,y0,std::sqrt(val(0)),std::sqrt(val(1)), + std::atan2(vec(0,1),vec(0,0))*180/cimg::PI, + color,opacity,pattern); + } + + template + CImg& _draw_ellipse(const int x0, const int y0, const float r1, const float r2, const float angle, + const tc *const color, const float opacity, + const unsigned int pattern) { + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_ellipse(): Specified color is (null).", + cimg_instance); + if (r1<=0 || r2<=0) return draw_point(x0,y0,color,opacity); + if (r1==r2 && (float)(int)r1==r1) { + if (pattern) return draw_circle(x0,y0,(int)cimg::round(r1),color,opacity,pattern); + else return draw_circle(x0,y0,(int)cimg::round(r1),color,opacity); + } + cimg_init_scanline(color,opacity); + const float + nr1 = cimg::abs(r1) - 0.5, nr2 = cimg::abs(r2) - 0.5, + nangle = (float)(angle*cimg::PI/180), + u = (float)std::cos(nangle), + v = (float)std::sin(nangle), + rmax = std::max(nr1,nr2), + l1 = (float)std::pow(rmax/(nr1>0?nr1:1e-6),2), + l2 = (float)std::pow(rmax/(nr2>0?nr2:1e-6),2), + a = l1*u*u + l2*v*v, + b = u*v*(l1 - l2), + c = l1*v*v + l2*u*u; + const int + yb = (int)cimg::round(std::sqrt(a*rmax*rmax/(a*c - b*b))), + tymin = y0 - yb - 1, + tymax = y0 + yb + 1, + ymin = tymin<0?0:tymin, + ymax = tymax>=height()?height() - 1:tymax; + int oxmin = 0, oxmax = 0; + bool first_line = true; + for (int y = ymin; y<=ymax; ++y) { + const float + Y = y - y0 + (y0?(float)std::sqrt(delta)/a:0.0f, + bY = b*Y/a, + fxmin = x0 - 0.5f - bY - sdelta, + fxmax = x0 + 0.5f - bY + sdelta; + const int xmin = (int)cimg::round(fxmin), xmax = (int)cimg::round(fxmax); + if (!pattern) cimg_draw_scanline(xmin,xmax,y,color,opacity,1); + else { + if (first_line) { + if (y0 - yb>=0) cimg_draw_scanline(xmin,xmax,y,color,opacity,1); + else draw_point(xmin,y,color,opacity).draw_point(xmax,y,color,opacity); + first_line = false; + } else { + if (xmin + CImg& draw_circle(const int x0, const int y0, int radius, + const tc *const color, const float opacity=1) { + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_circle(): Specified color is (null).", + cimg_instance); + cimg_init_scanline(color,opacity); + if (radius<0 || x0 - radius>=width() || y0 + radius<0 || y0 - radius>=height()) return *this; + if (y0>=0 && y0=0) { + const int x1 = x0 - x, x2 = x0 + x, y1 = y0 - y, y2 = y0 + y; + if (y1>=0 && y1=0 && y2=0 && y1=0 && y2 + CImg& draw_circle(const int x0, const int y0, int radius, + const tc *const color, const float opacity, + const unsigned int pattern) { + cimg::unused(pattern); + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_circle(): Specified color is (null).", + cimg_instance); + if (radius<0 || x0 - radius>=width() || y0 + radius<0 || y0 - radius>=height()) return *this; + if (!radius) return draw_point(x0,y0,color,opacity); + draw_point(x0 - radius,y0,color,opacity).draw_point(x0 + radius,y0,color,opacity). + draw_point(x0,y0 - radius,color,opacity).draw_point(x0,y0 + radius,color,opacity); + if (radius==1) return *this; + for (int f = 1 - radius, ddFx = 0, ddFy = -(radius<<1), x = 0, y = radius; x=0) { f+=(ddFy+=2); --y; } + ++x; ++(f+=(ddFx+=2)); + if (x!=y + 1) { + const int x1 = x0 - y, x2 = x0 + y, y1 = y0 - x, y2 = y0 + x, + x3 = x0 - x, x4 = x0 + x, y3 = y0 - y, y4 = y0 + y; + draw_point(x1,y1,color,opacity).draw_point(x1,y2,color,opacity). + draw_point(x2,y1,color,opacity).draw_point(x2,y2,color,opacity); + if (x!=y) + draw_point(x3,y3,color,opacity).draw_point(x4,y4,color,opacity). + draw_point(x4,y3,color,opacity).draw_point(x3,y4,color,opacity); + } + } + return *this; + } + + //! Draw an image. + /** + \param sprite Sprite image. + \param x0 X-coordinate of the sprite position. + \param y0 Y-coordinate of the sprite position. + \param z0 Z-coordinate of the sprite position. + \param c0 C-coordinate of the sprite position. + \param opacity Drawing opacity. + **/ + template + CImg& draw_image(const int x0, const int y0, const int z0, const int c0, + const CImg& sprite, const float opacity=1) { + if (is_empty() || !sprite) return *this; + if (is_overlapped(sprite)) return draw_image(x0,y0,z0,c0,+sprite,opacity); + if (x0==0 && y0==0 && z0==0 && c0==0 && is_sameXYZC(sprite) && opacity>=1 && !is_shared()) + return assign(sprite,false); + const bool bx = (x0<0), by = (y0<0), bz = (z0<0), bc = (c0<0); + const int + lX = sprite.width() - (x0 + sprite.width()>width()?x0 + sprite.width() - width():0) + (bx?x0:0), + lY = sprite.height() - (y0 + sprite.height()>height()?y0 + sprite.height() - height():0) + (by?y0:0), + lZ = sprite.depth() - (z0 + sprite.depth()>depth()?z0 + sprite.depth() - depth():0) + (bz?z0:0), + lC = sprite.spectrum() - (c0 + sprite.spectrum()>spectrum()?c0 + sprite.spectrum() - spectrum():0) + (bc?c0:0); + const t + *ptrs = sprite._data + + (bx?-x0:0) + + (by?-y0*(ulongT)sprite.width():0) + + (bz?-z0*(ulongT)sprite.width()*sprite.height():0) + + (bc?-c0*(ulongT)sprite.width()*sprite.height()*sprite.depth():0); + const ulongT + offX = (ulongT)_width - lX, + soffX = (ulongT)sprite._width - lX, + offY = (ulongT)_width*(_height - lY), + soffY = (ulongT)sprite._width*(sprite._height - lY), + offZ = (ulongT)_width*_height*(_depth - lZ), + soffZ = (ulongT)sprite._width*sprite._height*(sprite._depth - lZ); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + if (lX>0 && lY>0 && lZ>0 && lC>0) { + T *ptrd = data(x0<0?0:x0,y0<0?0:y0,z0<0?0:z0,c0<0?0:c0); + for (int v = 0; v=1) for (int x = 0; x& draw_image(const int x0, const int y0, const int z0, const int c0, + const CImg& sprite, const float opacity=1) { + if (is_empty() || !sprite) return *this; + if (is_overlapped(sprite)) return draw_image(x0,y0,z0,c0,+sprite,opacity); + if (x0==0 && y0==0 && z0==0 && c0==0 && is_sameXYZC(sprite) && opacity>=1 && !is_shared()) + return assign(sprite,false); + const bool bx = (x0<0), by = (y0<0), bz = (z0<0), bc = (c0<0); + const int + lX = sprite.width() - (x0 + sprite.width()>width()?x0 + sprite.width() - width():0) + (bx?x0:0), + lY = sprite.height() - (y0 + sprite.height()>height()?y0 + sprite.height() - height():0) + (by?y0:0), + lZ = sprite.depth() - (z0 + sprite.depth()>depth()?z0 + sprite.depth() - depth():0) + (bz?z0:0), + lC = sprite.spectrum() - (c0 + sprite.spectrum()>spectrum()?c0 + sprite.spectrum() - spectrum():0) + (bc?c0:0); + const T + *ptrs = sprite._data + + (bx?-x0:0) + + (by?-y0*(ulongT)sprite.width():0) + + (bz?-z0*(ulongT)sprite.width()*sprite.height():0) + + (bc?-c0*(ulongT)sprite.width()*sprite.height()*sprite.depth():0); + const ulongT + offX = (ulongT)_width - lX, + soffX = (ulongT)sprite._width - lX, + offY = (ulongT)_width*(_height - lY), + soffY = (ulongT)sprite._width*(sprite._height - lY), + offZ = (ulongT)_width*_height*(_depth - lZ), + soffZ = (ulongT)sprite._width*sprite._height*(sprite._depth - lZ), + slX = lX*sizeof(T); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + if (lX>0 && lY>0 && lZ>0 && lC>0) { + T *ptrd = data(x0<0?0:x0,y0<0?0:y0,z0<0?0:z0,c0<0?0:c0); + for (int v = 0; v=1) + for (int y = 0; y + CImg& draw_image(const int x0, const int y0, const int z0, + const CImg& sprite, const float opacity=1) { + return draw_image(x0,y0,z0,0,sprite,opacity); + } + + //! Draw an image \overloading. + template + CImg& draw_image(const int x0, const int y0, + const CImg& sprite, const float opacity=1) { + return draw_image(x0,y0,0,sprite,opacity); + } + + //! Draw an image \overloading. + template + CImg& draw_image(const int x0, + const CImg& sprite, const float opacity=1) { + return draw_image(x0,0,sprite,opacity); + } + + //! Draw an image \overloading. + template + CImg& draw_image(const CImg& sprite, const float opacity=1) { + return draw_image(0,sprite,opacity); + } + + //! Draw a masked image. + /** + \param sprite Sprite image. + \param mask Mask image. + \param x0 X-coordinate of the sprite position in the image instance. + \param y0 Y-coordinate of the sprite position in the image instance. + \param z0 Z-coordinate of the sprite position in the image instance. + \param c0 C-coordinate of the sprite position in the image instance. + \param mask_max_value Maximum pixel value of the mask image \c mask. + \param opacity Drawing opacity. + \note + - Pixel values of \c mask set the opacity of the corresponding pixels in \c sprite. + - Dimensions along x,y and z of \p sprite and \p mask must be the same. + **/ + template + CImg& draw_image(const int x0, const int y0, const int z0, const int c0, + const CImg& sprite, const CImg& mask, const float opacity=1, + const float mask_max_value=1) { + if (is_empty() || !sprite || !mask) return *this; + if (is_overlapped(sprite)) return draw_image(x0,y0,z0,c0,+sprite,mask,opacity,mask_max_value); + if (is_overlapped(mask)) return draw_image(x0,y0,z0,c0,sprite,+mask,opacity,mask_max_value); + if (mask._width!=sprite._width || mask._height!=sprite._height || mask._depth!=sprite._depth) + throw CImgArgumentException(_cimg_instance + "draw_image(): Sprite (%u,%u,%u,%u,%p) and mask (%u,%u,%u,%u,%p) have " + "incompatible dimensions.", + cimg_instance, + sprite._width,sprite._height,sprite._depth,sprite._spectrum,sprite._data, + mask._width,mask._height,mask._depth,mask._spectrum,mask._data); + + const bool bx = (x0<0), by = (y0<0), bz = (z0<0), bc = (c0<0); + const int + lX = sprite.width() - (x0 + sprite.width()>width()?x0 + sprite.width() - width():0) + (bx?x0:0), + lY = sprite.height() - (y0 + sprite.height()>height()?y0 + sprite.height() - height():0) + (by?y0:0), + lZ = sprite.depth() - (z0 + sprite.depth()>depth()?z0 + sprite.depth() - depth():0) + (bz?z0:0), + lC = sprite.spectrum() - (c0 + sprite.spectrum()>spectrum()?c0 + sprite.spectrum() - spectrum():0) + (bc?c0:0); + const ulongT + coff = (bx?-x0:0) + + (by?-y0*(ulongT)mask.width():0) + + (bz?-z0*(ulongT)mask.width()*mask.height():0) + + (bc?-c0*(ulongT)mask.width()*mask.height()*mask.depth():0), + ssize = (ulongT)mask.width()*mask.height()*mask.depth()*mask.spectrum(); + const ti *ptrs = sprite._data + coff; + const tm *ptrm = mask._data + coff; + const ulongT + offX = (ulongT)_width - lX, + soffX = (ulongT)sprite._width - lX, + offY = (ulongT)_width*(_height - lY), + soffY = (ulongT)sprite._width*(sprite._height - lY), + offZ = (ulongT)_width*_height*(_depth - lZ), + soffZ = (ulongT)sprite._width*sprite._height*(sprite._depth - lZ); + if (lX>0 && lY>0 && lZ>0 && lC>0) { + T *ptrd = data(x0<0?0:x0,y0<0?0:y0,z0<0?0:z0,c0<0?0:c0); + for (int c = 0; c + CImg& draw_image(const int x0, const int y0, const int z0, + const CImg& sprite, const CImg& mask, const float opacity=1, + const float mask_max_value=1) { + return draw_image(x0,y0,z0,0,sprite,mask,opacity,mask_max_value); + } + + //! Draw a image \overloading. + template + CImg& draw_image(const int x0, const int y0, + const CImg& sprite, const CImg& mask, const float opacity=1, + const float mask_max_value=1) { + return draw_image(x0,y0,0,sprite,mask,opacity,mask_max_value); + } + + //! Draw a image \overloading. + template + CImg& draw_image(const int x0, + const CImg& sprite, const CImg& mask, const float opacity=1, + const float mask_max_value=1) { + return draw_image(x0,0,sprite,mask,opacity,mask_max_value); + } + + //! Draw an image. + template + CImg& draw_image(const CImg& sprite, const CImg& mask, const float opacity=1, + const float mask_max_value=1) { + return draw_image(0,sprite,mask,opacity,mask_max_value); + } + + //! Draw a text string. + /** + \param x0 X-coordinate of the text in the image instance. + \param y0 Y-coordinate of the text in the image instance. + \param text Format of the text ('printf'-style format string). + \param foreground_color Pointer to \c spectrum() consecutive values, defining the foreground drawing color. + \param background_color Pointer to \c spectrum() consecutive values, defining the background drawing color. + \param opacity Drawing opacity. + \param font Font used for drawing text. + **/ + template + CImg& draw_text(const int x0, const int y0, + const char *const text, + const tc1 *const foreground_color, const tc2 *const background_color, + const float opacity, const CImgList& font, ...) { + if (!font) return *this; + CImg tmp(2048); + std::va_list ap; va_start(ap,font); + cimg_vsnprintf(tmp,tmp._width,text,ap); va_end(ap); + return _draw_text(x0,y0,tmp,foreground_color,background_color,opacity,font,false); + } + + //! Draw a text string \overloading. + /** + \note A transparent background is used for the text. + **/ + template + CImg& draw_text(const int x0, const int y0, + const char *const text, + const tc *const foreground_color, const int, + const float opacity, const CImgList& font, ...) { + if (!font) return *this; + CImg tmp(2048); + std::va_list ap; va_start(ap,font); + cimg_vsnprintf(tmp,tmp._width,text,ap); va_end(ap); + return _draw_text(x0,y0,tmp,foreground_color,(tc*)0,opacity,font,false); + } + + //! Draw a text string \overloading. + /** + \note A transparent foreground is used for the text. + **/ + template + CImg& draw_text(const int x0, const int y0, + const char *const text, + const int, const tc *const background_color, + const float opacity, const CImgList& font, ...) { + if (!font) return *this; + CImg tmp(2048); + std::va_list ap; va_start(ap,font); + cimg_vsnprintf(tmp,tmp._width,text,ap); va_end(ap); + return _draw_text(x0,y0,tmp,(tc*)0,background_color,opacity,font,false); + } + + //! Draw a text string \overloading. + /** + \param x0 X-coordinate of the text in the image instance. + \param y0 Y-coordinate of the text in the image instance. + \param text Format of the text ('printf'-style format string). + \param foreground_color Array of spectrum() values of type \c T, + defining the foreground color (0 means 'transparent'). + \param background_color Array of spectrum() values of type \c T, + defining the background color (0 means 'transparent'). + \param opacity Drawing opacity. + \param font_height Height of the text font (exact match for 13,23,53,103, interpolated otherwise). + **/ + template + CImg& draw_text(const int x0, const int y0, + const char *const text, + const tc1 *const foreground_color, const tc2 *const background_color, + const float opacity=1, const unsigned int font_height=13, ...) { + if (!font_height) return *this; + CImg tmp(2048); + std::va_list ap; va_start(ap,font_height); + cimg_vsnprintf(tmp,tmp._width,text,ap); va_end(ap); + const CImgList& font = CImgList::font(font_height,true); + _draw_text(x0,y0,tmp,foreground_color,background_color,opacity,font,true); + return *this; + } + + //! Draw a text string \overloading. + template + CImg& draw_text(const int x0, const int y0, + const char *const text, + const tc *const foreground_color, const int background_color=0, + const float opacity=1, const unsigned int font_height=13, ...) { + if (!font_height) return *this; + cimg::unused(background_color); + CImg tmp(2048); + std::va_list ap; va_start(ap,font_height); + cimg_vsnprintf(tmp,tmp._width,text,ap); va_end(ap); + return draw_text(x0,y0,"%s",foreground_color,(const tc*)0,opacity,font_height,tmp._data); + } + + //! Draw a text string \overloading. + template + CImg& draw_text(const int x0, const int y0, + const char *const text, + const int, const tc *const background_color, + const float opacity=1, const unsigned int font_height=13, ...) { + if (!font_height) return *this; + CImg tmp(2048); + std::va_list ap; va_start(ap,font_height); + cimg_vsnprintf(tmp,tmp._width,text,ap); va_end(ap); + return draw_text(x0,y0,"%s",(tc*)0,background_color,opacity,font_height,tmp._data); + } + + template + CImg& _draw_text(const int x0, const int y0, + const char *const text, + const tc1 *const foreground_color, const tc2 *const background_color, + const float opacity, const CImgList& font, + const bool is_native_font) { + if (!text) return *this; + if (!font) + throw CImgArgumentException(_cimg_instance + "draw_text(): Empty specified font.", + cimg_instance); + + const unsigned int text_length = (unsigned int)std::strlen(text); + const bool _is_empty = is_empty(); + if (_is_empty) { + // If needed, pre-compute necessary size of the image + int x = 0, y = 0, w = 0; + unsigned char c = 0; + for (unsigned int i = 0; iw) w = x; x = 0; break; + case '\t' : x+=4*font[' ']._width; break; + default : if (cw) w=x; + y+=font[0]._height; + } + assign(x0 + w,y0 + y,1,is_native_font?1:font[0]._spectrum,(T)0); + } + + int x = x0, y = y0; + for (unsigned int i = 0; i letter = font[c]; + if (letter) { + if (is_native_font && _spectrum>letter._spectrum) letter.resize(-100,-100,1,_spectrum,0,2); + const unsigned int cmin = std::min(_spectrum,letter._spectrum); + if (foreground_color) + for (unsigned int c = 0; c + CImg& draw_quiver(const CImg& flow, + const t2 *const color, const float opacity=1, + const unsigned int sampling=25, const float factor=-20, + const bool is_arrow=true, const unsigned int pattern=~0U) { + return draw_quiver(flow,CImg(color,_spectrum,1,1,1,true),opacity,sampling,factor,is_arrow,pattern); + } + + //! Draw a 2d vector field, using a field of colors. + /** + \param flow Image of 2d vectors used as input data. + \param color Image of spectrum()-D vectors corresponding to the color of each arrow. + \param opacity Opacity of the drawing. + \param sampling Length (in pixels) between each arrow. + \param factor Length factor of each arrow (if <0, computed as a percentage of the maximum length). + \param is_arrow Tells if arrows must be drawn, instead of oriented segments. + \param pattern Used pattern to draw lines. + \note Clipping is supported. + **/ + template + CImg& draw_quiver(const CImg& flow, + const CImg& color, const float opacity=1, + const unsigned int sampling=25, const float factor=-20, + const bool is_arrow=true, const unsigned int pattern=~0U) { + if (is_empty()) return *this; + if (!flow || flow._spectrum!=2) + throw CImgArgumentException(_cimg_instance + "draw_quiver(): Invalid dimensions of specified flow (%u,%u,%u,%u,%p).", + cimg_instance, + flow._width,flow._height,flow._depth,flow._spectrum,flow._data); + if (sampling<=0) + throw CImgArgumentException(_cimg_instance + "draw_quiver(): Invalid sampling value %g " + "(should be >0)", + cimg_instance, + sampling); + const bool colorfield = (color._width==flow._width && color._height==flow._height && + color._depth==1 && color._spectrum==_spectrum); + if (is_overlapped(flow)) return draw_quiver(+flow,color,opacity,sampling,factor,is_arrow,pattern); + float vmax,fact; + if (factor<=0) { + float m, M = (float)flow.get_norm(2).max_min(m); + vmax = (float)std::max(cimg::abs(m),cimg::abs(M)); + if (!vmax) vmax = 1; + fact = -factor; + } else { fact = factor; vmax = 1; } + + for (unsigned int y = sampling/2; y<_height; y+=sampling) + for (unsigned int x = sampling/2; x<_width; x+=sampling) { + const unsigned int X = x*flow._width/_width, Y = y*flow._height/_height; + float u = (float)flow(X,Y,0,0)*fact/vmax, v = (float)flow(X,Y,0,1)*fact/vmax; + if (is_arrow) { + const int xx = (int)(x + u), yy = (int)(y + v); + if (colorfield) draw_arrow(x,y,xx,yy,color.get_vector_at(X,Y)._data,opacity,45,sampling/5.0f,pattern); + else draw_arrow(x,y,xx,yy,color._data,opacity,45,sampling/5.0f,pattern); + } else { + if (colorfield) + draw_line((int)(x - 0.5*u),(int)(y - 0.5*v),(int)(x + 0.5*u),(int)(y + 0.5*v), + color.get_vector_at(X,Y)._data,opacity,pattern); + else draw_line((int)(x - 0.5*u),(int)(y - 0.5*v),(int)(x + 0.5*u),(int)(y + 0.5*v), + color._data,opacity,pattern); + } + } + return *this; + } + + //! Draw a labeled horizontal axis. + /** + \param values_x Values along the horizontal axis. + \param y Y-coordinate of the horizontal axis in the image instance. + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param opacity Drawing opacity. + \param pattern Drawing pattern. + \param font_height Height of the labels (exact match for 13,23,53,103, interpolated otherwise). + \param allow_zero Enable/disable the drawing of label '0' if found. + **/ + template + CImg& draw_axis(const CImg& values_x, const int y, + const tc *const color, const float opacity=1, + const unsigned int pattern=~0U, const unsigned int font_height=13, + const bool allow_zero=true) { + if (is_empty()) return *this; + const int yt = (y + 3 + font_height)<_height?y + 3:y - 2 - (int)font_height; + const int siz = (int)values_x.size() - 1; + CImg txt(32); + CImg label; + if (siz<=0) { // Degenerated case. + draw_line(0,y,_width - 1,y,color,opacity,pattern); + if (!siz) { + cimg_snprintf(txt,txt._width,"%g",(double)*values_x); + label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); + const int + _xt = (width() - label.width())/2, + xt = _xt<3?3:_xt + label.width()>=width() - 2?width() - 3 - label.width():_xt; + draw_point(width()/2,y - 1,color,opacity).draw_point(width()/2,y + 1,color,opacity); + if (allow_zero || *txt!='0' || txt[1]!=0) + draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); + } + } else { // Regular case. + if (values_x[0]=width() - 2?width() - 3 - label.width():_xt; + draw_point(xi,y - 1,color,opacity).draw_point(xi,y + 1,color,opacity); + if (allow_zero || *txt!='0' || txt[1]!=0) + draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); + } + } + return *this; + } + + //! Draw a labeled vertical axis. + /** + \param x X-coordinate of the vertical axis in the image instance. + \param values_y Values along the Y-axis. + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param opacity Drawing opacity. + \param pattern Drawing pattern. + \param font_height Height of the labels (exact match for 13,23,53,103, interpolated otherwise). + \param allow_zero Enable/disable the drawing of label '0' if found. + **/ + template + CImg& draw_axis(const int x, const CImg& values_y, + const tc *const color, const float opacity=1, + const unsigned int pattern=~0U, const unsigned int font_height=13, + const bool allow_zero=true) { + if (is_empty()) return *this; + int siz = (int)values_y.size() - 1; + CImg txt(32); + CImg label; + if (siz<=0) { // Degenerated case. + draw_line(x,0,x,_height - 1,color,opacity,pattern); + if (!siz) { + cimg_snprintf(txt,txt._width,"%g",(double)*values_y); + label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); + const int + _yt = (height() - label.height())/2, + yt = _yt<0?0:_yt + label.height()>=height()?height() - 1-label.height():_yt, + _xt = x - 2 - label.width(), + xt = _xt>=0?_xt:x + 3; + draw_point(x - 1,height()/2,color,opacity).draw_point(x + 1,height()/2,color,opacity); + if (allow_zero || *txt!='0' || txt[1]!=0) + draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); + } + } else { // Regular case. + if (values_y[0]=height()?height() - 1-label.height():_yt, + _xt = x - 2 - label.width(), + xt = _xt>=0?_xt:x + 3; + draw_point(x - 1,yi,color,opacity).draw_point(x + 1,yi,color,opacity); + if (allow_zero || *txt!='0' || txt[1]!=0) + draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); + } + } + return *this; + } + + //! Draw labeled horizontal and vertical axes. + /** + \param values_x Values along the X-axis. + \param values_y Values along the Y-axis. + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param opacity Drawing opacity. + \param pattern_x Drawing pattern for the X-axis. + \param pattern_y Drawing pattern for the Y-axis. + \param font_height Height of the labels (exact match for 13,23,53,103, interpolated otherwise). + \param allow_zero Enable/disable the drawing of label '0' if found. + **/ + template + CImg& draw_axes(const CImg& values_x, const CImg& values_y, + const tc *const color, const float opacity=1, + const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U, + const unsigned int font_height=13, const bool allow_zero=true) { + if (is_empty()) return *this; + const CImg nvalues_x(values_x._data,values_x.size(),1,1,1,true); + const int sizx = (int)values_x.size() - 1, wm1 = width() - 1; + if (sizx>=0) { + float ox = (float)*nvalues_x; + for (unsigned int x = sizx?1U:0U; x<_width; ++x) { + const float nx = (float)nvalues_x._linear_atX((float)x*sizx/wm1); + if (nx*ox<=0) { draw_axis(nx==0?x:x - 1,values_y,color,opacity,pattern_y,font_height,allow_zero); break; } + ox = nx; + } + } + const CImg nvalues_y(values_y._data,values_y.size(),1,1,1,true); + const int sizy = (int)values_y.size() - 1, hm1 = height() - 1; + if (sizy>0) { + float oy = (float)nvalues_y[0]; + for (unsigned int y = sizy?1U:0U; y<_height; ++y) { + const float ny = (float)nvalues_y._linear_atX((float)y*sizy/hm1); + if (ny*oy<=0) { draw_axis(values_x,ny==0?y:y - 1,color,opacity,pattern_x,font_height,allow_zero); break; } + oy = ny; + } + } + return *this; + } + + //! Draw labeled horizontal and vertical axes \overloading. + template + CImg& draw_axes(const float x0, const float x1, const float y0, const float y1, + const tc *const color, const float opacity=1, + const int subdivisionx=-60, const int subdivisiony=-60, + const float precisionx=0, const float precisiony=0, + const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U, + const unsigned int font_height=13) { + if (is_empty()) return *this; + const bool allow_zero = (x0*x1>0) || (y0*y1>0); + const float + dx = cimg::abs(x1 - x0), dy = cimg::abs(y1 - y0), + px = dx<=0?1:precisionx==0?(float)std::pow(10.0,(int)std::log10(dx) - 2.0):precisionx, + py = dy<=0?1:precisiony==0?(float)std::pow(10.0,(int)std::log10(dy) - 2.0):precisiony; + if (x0!=x1 && y0!=y1) + draw_axes(CImg::sequence(subdivisionx>0?subdivisionx:1-width()/subdivisionx,x0,x1).round(px), + CImg::sequence(subdivisiony>0?subdivisiony:1-height()/subdivisiony,y0,y1).round(py), + color,opacity,pattern_x,pattern_y,font_height,allow_zero); + else if (x0==x1 && y0!=y1) + draw_axis((int)x0,CImg::sequence(subdivisiony>0?subdivisiony:1-height()/subdivisiony,y0,y1).round(py), + color,opacity,pattern_y,font_height); + else if (x0!=x1 && y0==y1) + draw_axis(CImg::sequence(subdivisionx>0?subdivisionx:1-width()/subdivisionx,x0,x1).round(px),(int)y0, + color,opacity,pattern_x,font_height); + return *this; + } + + //! Draw 2d grid. + /** + \param values_x X-coordinates of the vertical lines. + \param values_y Y-coordinates of the horizontal lines. + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param opacity Drawing opacity. + \param pattern_x Drawing pattern for vertical lines. + \param pattern_y Drawing pattern for horizontal lines. + **/ + template + CImg& draw_grid(const CImg& values_x, const CImg& values_y, + const tc *const color, const float opacity=1, + const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U) { + if (is_empty()) return *this; + if (values_x) cimg_foroff(values_x,x) { + const int xi = (int)values_x[x]; + if (xi>=0 && xi=0 && yi + CImg& draw_grid(const float delta_x, const float delta_y, + const float offsetx, const float offsety, + const bool invertx, const bool inverty, + const tc *const color, const float opacity=1, + const unsigned int pattern_x=~0U, const unsigned int pattern_y=~0U) { + if (is_empty()) return *this; + CImg seqx, seqy; + if (delta_x!=0) { + const float dx = delta_x>0?delta_x:_width*-delta_x/100; + const unsigned int nx = (unsigned int)(_width/dx); + seqx = CImg::sequence(1 + nx,0,(unsigned int)(dx*nx)); + if (offsetx) cimg_foroff(seqx,x) seqx(x) = (unsigned int)cimg::mod(seqx(x) + offsetx,(float)_width); + if (invertx) cimg_foroff(seqx,x) seqx(x) = _width - 1 - seqx(x); + } + if (delta_y!=0) { + const float dy = delta_y>0?delta_y:_height*-delta_y/100; + const unsigned int ny = (unsigned int)(_height/dy); + seqy = CImg::sequence(1 + ny,0,(unsigned int)(dy*ny)); + if (offsety) cimg_foroff(seqy,y) seqy(y) = (unsigned int)cimg::mod(seqy(y) + offsety,(float)_height); + if (inverty) cimg_foroff(seqy,y) seqy(y) = _height - 1 - seqy(y); + } + return draw_grid(seqx,seqy,color,opacity,pattern_x,pattern_y); + } + + //! Draw 1d graph. + /** + \param data Image containing the graph values I = f(x). + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param opacity Drawing opacity. + + \param plot_type Define the type of the plot: + - 0 = No plot. + - 1 = Plot using segments. + - 2 = Plot using cubic splines. + - 3 = Plot with bars. + \param vertex_type Define the type of points: + - 0 = No points. + - 1 = Point. + - 2 = Straight cross. + - 3 = Diagonal cross. + - 4 = Filled circle. + - 5 = Outlined circle. + - 6 = Square. + - 7 = Diamond. + \param ymin Lower bound of the y-range. + \param ymax Upper bound of the y-range. + \param pattern Drawing pattern. + \note + - if \c ymin==ymax==0, the y-range is computed automatically from the input samples. + **/ + template + CImg& draw_graph(const CImg& data, + const tc *const color, const float opacity=1, + const unsigned int plot_type=1, const int vertex_type=1, + const double ymin=0, const double ymax=0, const unsigned int pattern=~0U) { + if (is_empty() || _height<=1) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_graph(): Specified color is (null).", + cimg_instance); + + // Create shaded colors for displaying bar plots. + CImg color1, color2; + if (plot_type==3) { + color1.assign(_spectrum); color2.assign(_spectrum); + cimg_forC(*this,c) { + color1[c] = (tc)std::min((float)cimg::type::max(),(float)color[c]*1.2f); + color2[c] = (tc)(color[c]*0.4f); + } + } + + // Compute min/max and normalization factors. + const ulongT + siz = data.size(), + _siz1 = siz - (plot_type!=3), + siz1 = _siz1?_siz1:1; + const unsigned int + _width1 = _width - (plot_type!=3), + width1 = _width1?_width1:1; + double m = ymin, M = ymax; + if (ymin==ymax) m = (double)data.max_min(M); + if (m==M) { --m; ++M; } + const float ca = (float)(M-m)/(_height - 1); + bool init_hatch = true; + + // Draw graph edges + switch (plot_type%4) { + case 1 : { // Segments + int oX = 0, oY = (int)((data[0] - m)/ca); + if (siz==1) { + const int Y = (int)((*data - m)/ca); + draw_line(0,Y,width() - 1,Y,color,opacity,pattern); + } else { + const float fx = (float)_width/siz1; + for (ulongT off = 1; off ndata(data._data,siz,1,1,1,true); + int oY = (int)((data[0] - m)/ca); + cimg_forX(*this,x) { + const int Y = (int)((ndata._cubic_atX((float)x*siz1/width1)-m)/ca); + if (x>0) draw_line(x,oY,x + 1,Y,color,opacity,pattern,init_hatch); + init_hatch = false; + oY = Y; + } + } break; + case 3 : { // Bars + const int Y0 = (int)(-m/ca); + const float fx = (float)_width/siz1; + int oX = 0; + cimg_foroff(data,off) { + const int + X = (int)((off + 1)*fx) - 1, + Y = (int)((data[off] - m)/ca); + draw_rectangle(oX,Y0,X,Y,color,opacity). + draw_line(oX,Y,oX,Y0,color2.data(),opacity). + draw_line(oX,Y0,X,Y0,Y<=Y0?color2.data():color1.data(),opacity). + draw_line(X,Y,X,Y0,color1.data(),opacity). + draw_line(oX,Y,X,Y,Y<=Y0?color1.data():color2.data(),opacity); + oX = X + 1; + } + } break; + default : break; // No edges + } + + // Draw graph points + const unsigned int wb2 = plot_type==3?_width1/(2*siz):0; + const float fx = (float)_width1/siz1; + switch (vertex_type%8) { + case 1 : { // Point + cimg_foroff(data,off) { + const int + X = (int)(off*fx + wb2), + Y = (int)((data[off]-m)/ca); + draw_point(X,Y,color,opacity); + } + } break; + case 2 : { // Straight Cross + cimg_foroff(data,off) { + const int + X = (int)(off*fx + wb2), + Y = (int)((data[off]-m)/ca); + draw_line(X - 3,Y,X + 3,Y,color,opacity).draw_line(X,Y - 3,X,Y + 3,color,opacity); + } + } break; + case 3 : { // Diagonal Cross + cimg_foroff(data,off) { + const int + X = (int)(off*fx + wb2), + Y = (int)((data[off]-m)/ca); + draw_line(X - 3,Y - 3,X + 3,Y + 3,color,opacity).draw_line(X - 3,Y + 3,X + 3,Y - 3,color,opacity); + } + } break; + case 4 : { // Filled Circle + cimg_foroff(data,off) { + const int + X = (int)(off*fx + wb2), + Y = (int)((data[off]-m)/ca); + draw_circle(X,Y,3,color,opacity); + } + } break; + case 5 : { // Outlined circle + cimg_foroff(data,off) { + const int + X = (int)(off*fx + wb2), + Y = (int)((data[off]-m)/ca); + draw_circle(X,Y,3,color,opacity,0U); + } + } break; + case 6 : { // Square + cimg_foroff(data,off) { + const int + X = (int)(off*fx + wb2), + Y = (int)((data[off]-m)/ca); + draw_rectangle(X - 3,Y - 3,X + 3,Y + 3,color,opacity,~0U); + } + } break; + case 7 : { // Diamond + cimg_foroff(data,off) { + const int + X = (int)(off*fx + wb2), + Y = (int)((data[off]-m)/ca); + draw_line(X,Y - 4,X + 4,Y,color,opacity). + draw_line(X + 4,Y,X,Y + 4,color,opacity). + draw_line(X,Y + 4,X - 4,Y,color,opacity). + draw_line(X - 4,Y,X,Y - 4,color,opacity); + } + } break; + default : break; // No points + } + return *this; + } + + bool _draw_fill(const int x, const int y, const int z, + const CImg& ref, const float tolerance2) const { + const T *ptr1 = data(x,y,z), *ptr2 = ref._data; + const unsigned long off = _width*_height*_depth; + float diff = 0; + cimg_forC(*this,c) { diff += cimg::sqr(*ptr1 - *(ptr2++)); ptr1+=off; } + return diff<=tolerance2; + } + + //! Draw filled 3d region with the flood fill algorithm. + /** + \param x0 X-coordinate of the starting point of the region to fill. + \param y0 Y-coordinate of the starting point of the region to fill. + \param z0 Z-coordinate of the starting point of the region to fill. + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param[out] region Image that will contain the mask of the filled region mask, as an output. + \param tolerance Tolerance concerning neighborhood values. + \param opacity Opacity of the drawing. + \param is_high_connectivity Tells if 8-connexity must be used. + \return \c region is initialized with the binary mask of the filled region. + **/ + template + CImg& draw_fill(const int x0, const int y0, const int z0, + const tc *const color, const float opacity, + CImg ®ion, + const float tolerance = 0, + const bool is_high_connectivity = false) { +#define _draw_fill_push(x,y,z) if (N>=stack._width) stack.resize(2*N + 1,1,1,3,0); \ + stack[N] = x; stack(N,1) = y; stack(N++,2) = z +#define _draw_fill_pop(x,y,z) x = stack[--N]; y = stack(N,1); z = stack(N,2) +#define _draw_fill_is_inside(x,y,z) !_region(x,y,z) && _draw_fill(x,y,z,ref,tolerance2) + + if (!containsXYZC(x0,y0,z0,0)) return *this; + const float nopacity = cimg::abs((float)opacity), copacity = 1 - std::max((float)opacity,0.0f); + const float tolerance2 = cimg::sqr(tolerance); + const CImg ref = get_vector_at(x0,y0,z0); + CImg stack(256,1,1,3); + CImg _region(_width,_height,_depth,1,0); + unsigned int N = 0; + int x, y, z; + + _draw_fill_push(x0,y0,z0); + while (N>0) { + _draw_fill_pop(x,y,z); + if (!_region(x,y,z)) { + const int yp = y - 1, yn = y + 1, zp = z - 1, zn = z + 1; + int xl = x, xr = x; + + // Using these booleans reduces the number of pushes drastically. + bool is_yp = false, is_yn = false, is_zp = false, is_zn = false; + for (int step = -1; step<2; step+=2) { + while (x>=0 && x=0 && _draw_fill_is_inside(x,yp,z)) { + if (!is_yp) { _draw_fill_push(x,yp,z); is_yp = true; } + } else is_yp = false; + if (yn1) { + if (zp>=0 && _draw_fill_is_inside(x,y,zp)) { + if (!is_zp) { _draw_fill_push(x,y,zp); is_zp = true; } + } else is_zp = false; + if (zn=0 && !is_yp) { + if (xp>=0 && _draw_fill_is_inside(xp,yp,z)) { + _draw_fill_push(xp,yp,z); if (step<0) is_yp = true; + } + if (xn0) is_yp = true; + } + } + if (yn=0 && _draw_fill_is_inside(xp,yn,z)) { + _draw_fill_push(xp,yn,z); if (step<0) is_yn = true; + } + if (xn0) is_yn = true; + } + } + if (depth()>1) { + if (zp>=0 && !is_zp) { + if (xp>=0 && _draw_fill_is_inside(xp,y,zp)) { + _draw_fill_push(xp,y,zp); if (step<0) is_zp = true; + } + if (xn0) is_zp = true; + } + + if (yp>=0 && !is_yp) { + if (_draw_fill_is_inside(x,yp,zp)) { _draw_fill_push(x,yp,zp); } + if (xp>=0 && _draw_fill_is_inside(xp,yp,zp)) { _draw_fill_push(xp,yp,zp); } + if (xn=0 && _draw_fill_is_inside(xp,yn,zp)) { _draw_fill_push(xp,yn,zp); } + if (xn=0 && _draw_fill_is_inside(xp,y,zn)) { + _draw_fill_push(xp,y,zn); if (step<0) is_zn = true; + } + if (xn0) is_zn = true; + } + + if (yp>=0 && !is_yp) { + if (_draw_fill_is_inside(x,yp,zn)) { _draw_fill_push(x,yp,zn); } + if (xp>=0 && _draw_fill_is_inside(xp,yp,zn)) { _draw_fill_push(xp,yp,zn); } + if (xn=0 && _draw_fill_is_inside(xp,yn,zn)) { _draw_fill_push(xp,yn,zn); } + if (xn + CImg& draw_fill(const int x0, const int y0, const int z0, + const tc *const color, const float opacity=1, + const float tolerance=0, const bool is_high_connexity=false) { + CImg tmp; + return draw_fill(x0,y0,z0,color,opacity,tmp,tolerance,is_high_connexity); + } + + //! Draw filled 2d region with the flood fill algorithm \simplification. + template + CImg& draw_fill(const int x0, const int y0, + const tc *const color, const float opacity=1, + const float tolerance=0, const bool is_high_connexity=false) { + CImg tmp; + return draw_fill(x0,y0,0,color,opacity,tmp,tolerance,is_high_connexity); + } + + //! Draw a random plasma texture. + /** + \param alpha Alpha-parameter. + \param beta Beta-parameter. + \param scale Scale-parameter. + \note Use the mid-point algorithm to render. + **/ + CImg& draw_plasma(const float alpha=1, const float beta=0, const unsigned int scale=8) { + if (is_empty()) return *this; + const int w = width(), h = height(); + const Tfloat m = (Tfloat)cimg::type::min(), M = (Tfloat)cimg::type::max(); + cimg_forZC(*this,z,c) { + CImg ref = get_shared_slice(z,c); + for (int delta = 1<1; delta>>=1) { + const int delta2 = delta>>1; + const float r = alpha*delta + beta; + + // Square step. + for (int y0 = 0; y0M?M:val); + } + + // Diamond steps. + for (int y = -delta2; yM?M:val); + } + for (int y0 = 0; y0M?M:val); + } + for (int y = -delta2; yM?M:val); + } + } + } + return *this; + } + + //! Draw a quadratic Mandelbrot or Julia 2d fractal. + /** + \param x0 X-coordinate of the upper-left pixel. + \param y0 Y-coordinate of the upper-left pixel. + \param x1 X-coordinate of the lower-right pixel. + \param y1 Y-coordinate of the lower-right pixel. + \param colormap Colormap. + \param opacity Drawing opacity. + \param z0r Real part of the upper-left fractal vertex. + \param z0i Imaginary part of the upper-left fractal vertex. + \param z1r Real part of the lower-right fractal vertex. + \param z1i Imaginary part of the lower-right fractal vertex. + \param iteration_max Maximum number of iterations for each estimated point. + \param is_normalized_iteration Tells if iterations are normalized. + \param is_julia_set Tells if the Mandelbrot or Julia set is rendered. + \param param_r Real part of the Julia set parameter. + \param param_i Imaginary part of the Julia set parameter. + \note Fractal rendering is done by the Escape Time Algorithm. + **/ + template + CImg& draw_mandelbrot(const int x0, const int y0, const int x1, const int y1, + const CImg& colormap, const float opacity=1, + const double z0r=-2, const double z0i=-2, const double z1r=2, const double z1i=2, + const unsigned int iteration_max=255, + const bool is_normalized_iteration=false, + const bool is_julia_set=false, + const double param_r=0, const double param_i=0) { + if (is_empty()) return *this; + CImg palette; + if (colormap) palette.assign(colormap._data,colormap.size()/colormap._spectrum,1,1,colormap._spectrum,true); + if (palette && palette._spectrum!=_spectrum) + throw CImgArgumentException(_cimg_instance + "draw_mandelbrot(): Instance and specified colormap (%u,%u,%u,%u,%p) have " + "incompatible dimensions.", + cimg_instance, + colormap._width,colormap._height,colormap._depth,colormap._spectrum,colormap._data); + + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f), ln2 = (float)std::log(2.0); + const int + _x0 = cimg::cut(x0,0,width() - 1), + _y0 = cimg::cut(y0,0,height() - 1), + _x1 = cimg::cut(x1,0,width() - 1), + _y1 = cimg::cut(y1,0,height() - 1); + + cimg_pragma_openmp(parallel for collapse(2) cimg_openmp_if((1 + _x1 - _x0)*(1 + _y1 - _y0)>=2048)) + for (int q = _y0; q<=_y1; ++q) + for (int p = _x0; p<=_x1; ++p) { + unsigned int iteration = 0; + const double x = z0r + p*(z1r-z0r)/_width, y = z0i + q*(z1i-z0i)/_height; + double zr, zi, cr, ci; + if (is_julia_set) { zr = x; zi = y; cr = param_r; ci = param_i; } + else { zr = param_r; zi = param_i; cr = x; ci = y; } + for (iteration=1; zr*zr + zi*zi<=4 && iteration<=iteration_max; ++iteration) { + const double temp = zr*zr - zi*zi + cr; + zi = 2*zr*zi + ci; + zr = temp; + } + if (iteration>iteration_max) { + if (palette) { + if (opacity>=1) cimg_forC(*this,c) (*this)(p,q,0,c) = (T)palette(0,c); + else cimg_forC(*this,c) (*this)(p,q,0,c) = (T)(palette(0,c)*nopacity + (*this)(p,q,0,c)*copacity); + } else { + if (opacity>=1) cimg_forC(*this,c) (*this)(p,q,0,c) = (T)0; + else cimg_forC(*this,c) (*this)(p,q,0,c) = (T)((*this)(p,q,0,c)*copacity); + } + } else if (is_normalized_iteration) { + const float + normz = (float)cimg::abs(zr*zr + zi*zi), + niteration = (float)(iteration + 1 - std::log(std::log(normz))/ln2); + if (palette) { + if (opacity>=1) cimg_forC(*this,c) (*this)(p,q,0,c) = (T)palette._linear_atX(niteration,c); + else cimg_forC(*this,c) + (*this)(p,q,0,c) = (T)(palette._linear_atX(niteration,c)*nopacity + (*this)(p,q,0,c)*copacity); + } else { + if (opacity>=1) cimg_forC(*this,c) (*this)(p,q,0,c) = (T)niteration; + else cimg_forC(*this,c) (*this)(p,q,0,c) = (T)(niteration*nopacity + (*this)(p,q,0,c)*copacity); + } + } else { + if (palette) { + if (opacity>=1) cimg_forC(*this,c) (*this)(p,q,0,c) = (T)palette._atX(iteration,c); + else cimg_forC(*this,c) (*this)(p,q,0,c) = (T)(palette(iteration,c)*nopacity + (*this)(p,q,0,c)*copacity); + } else { + if (opacity>=1) cimg_forC(*this,c) (*this)(p,q,0,c) = (T)iteration; + else cimg_forC(*this,c) (*this)(p,q,0,c) = (T)(iteration*nopacity + (*this)(p,q,0,c)*copacity); + } + } + } + return *this; + } + + //! Draw a quadratic Mandelbrot or Julia 2d fractal \overloading. + template + CImg& draw_mandelbrot(const CImg& colormap, const float opacity=1, + const double z0r=-2, const double z0i=-2, const double z1r=2, const double z1i=2, + const unsigned int iteration_max=255, + const bool is_normalized_iteration=false, + const bool is_julia_set=false, + const double param_r=0, const double param_i=0) { + return draw_mandelbrot(0,0,_width - 1,_height - 1,colormap,opacity, + z0r,z0i,z1r,z1i,iteration_max,is_normalized_iteration,is_julia_set,param_r,param_i); + } + + //! Draw a 1d gaussian function. + /** + \param xc X-coordinate of the gaussian center. + \param sigma Standard variation of the gaussian distribution. + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param opacity Drawing opacity. + **/ + template + CImg& draw_gaussian(const float xc, const float sigma, + const tc *const color, const float opacity=1) { + if (is_empty()) return *this; + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_gaussian(): Specified color is (null).", + cimg_instance); + const float sigma2 = 2*sigma*sigma, nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + const ulongT whd = (ulongT)_width*_height*_depth; + const tc *col = color; + cimg_forX(*this,x) { + const float dx = (x - xc), val = (float)std::exp(-dx*dx/sigma2); + T *ptrd = data(x,0,0,0); + if (opacity>=1) cimg_forC(*this,c) { *ptrd = (T)(val*(*col++)); ptrd+=whd; } + else cimg_forC(*this,c) { *ptrd = (T)(nopacity*val*(*col++) + *ptrd*copacity); ptrd+=whd; } + col-=_spectrum; + } + return *this; + } + + //! Draw a 2d gaussian function. + /** + \param xc X-coordinate of the gaussian center. + \param yc Y-coordinate of the gaussian center. + \param tensor Covariance matrix (must be 2x2). + \param color Pointer to \c spectrum() consecutive values, defining the drawing color. + \param opacity Drawing opacity. + **/ + template + CImg& draw_gaussian(const float xc, const float yc, const CImg& tensor, + const tc *const color, const float opacity=1) { + if (is_empty()) return *this; + if (tensor._width!=2 || tensor._height!=2 || tensor._depth!=1 || tensor._spectrum!=1) + throw CImgArgumentException(_cimg_instance + "draw_gaussian(): Specified tensor (%u,%u,%u,%u,%p) is not a 2x2 matrix.", + cimg_instance, + tensor._width,tensor._height,tensor._depth,tensor._spectrum,tensor._data); + if (!color) + throw CImgArgumentException(_cimg_instance + "draw_gaussian(): Specified color is (null).", + cimg_instance); + typedef typename CImg::Tfloat tfloat; + const CImg invT = tensor.get_invert(), invT2 = (invT*invT)/(-2.0); + const tfloat a = invT2(0,0), b = 2*invT2(1,0), c = invT2(1,1); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + const ulongT whd = (ulongT)_width*_height*_depth; + const tc *col = color; + float dy = -yc; + cimg_forY(*this,y) { + float dx = -xc; + cimg_forX(*this,x) { + const float val = (float)std::exp(a*dx*dx + b*dx*dy + c*dy*dy); + T *ptrd = data(x,y,0,0); + if (opacity>=1) cimg_forC(*this,c) { *ptrd = (T)(val*(*col++)); ptrd+=whd; } + else cimg_forC(*this,c) { *ptrd = (T)(nopacity*val*(*col++) + *ptrd*copacity); ptrd+=whd; } + col-=_spectrum; + ++dx; + } + ++dy; + } + return *this; + } + + //! Draw a 2d gaussian function \overloading. + template + CImg& draw_gaussian(const int xc, const int yc, const float r1, const float r2, const float ru, const float rv, + const tc *const color, const float opacity=1) { + const double + a = r1*ru*ru + r2*rv*rv, + b = (r1-r2)*ru*rv, + c = r1*rv*rv + r2*ru*ru; + const CImg tensor(2,2,1,1, a,b,b,c); + return draw_gaussian(xc,yc,tensor,color,opacity); + } + + //! Draw a 2d gaussian function \overloading. + template + CImg& draw_gaussian(const float xc, const float yc, const float sigma, + const tc *const color, const float opacity=1) { + return draw_gaussian(xc,yc,CImg::diagonal(sigma,sigma),color,opacity); + } + + //! Draw a 3d gaussian function \overloading. + template + CImg& draw_gaussian(const float xc, const float yc, const float zc, const CImg& tensor, + const tc *const color, const float opacity=1) { + if (is_empty()) return *this; + typedef typename CImg::Tfloat tfloat; + if (tensor._width!=3 || tensor._height!=3 || tensor._depth!=1 || tensor._spectrum!=1) + throw CImgArgumentException(_cimg_instance + "draw_gaussian(): Specified tensor (%u,%u,%u,%u,%p) is not a 3x3 matrix.", + cimg_instance, + tensor._width,tensor._height,tensor._depth,tensor._spectrum,tensor._data); + + const CImg invT = tensor.get_invert(), invT2 = (invT*invT)/(-2.0); + const tfloat a = invT2(0,0), b = 2*invT2(1,0), c = 2*invT2(2,0), d = invT2(1,1), e = 2*invT2(2,1), f = invT2(2,2); + const float nopacity = cimg::abs(opacity), copacity = 1 - std::max(opacity,0.0f); + const ulongT whd = (ulongT)_width*_height*_depth; + const tc *col = color; + cimg_forXYZ(*this,x,y,z) { + const float + dx = (x - xc), dy = (y - yc), dz = (z - zc), + val = (float)std::exp(a*dx*dx + b*dx*dy + c*dx*dz + d*dy*dy + e*dy*dz + f*dz*dz); + T *ptrd = data(x,y,z,0); + if (opacity>=1) cimg_forC(*this,c) { *ptrd = (T)(val*(*col++)); ptrd+=whd; } + else cimg_forC(*this,c) { *ptrd = (T)(nopacity*val*(*col++) + *ptrd*copacity); ptrd+=whd; } + col-=_spectrum; + } + return *this; + } + + //! Draw a 3d gaussian function \overloading. + template + CImg& draw_gaussian(const float xc, const float yc, const float zc, const float sigma, + const tc *const color, const float opacity=1) { + return draw_gaussian(xc,yc,zc,CImg::diagonal(sigma,sigma,sigma),color,opacity); + } + + //! Draw a 3d object. + /** + \param x0 X-coordinate of the 3d object position + \param y0 Y-coordinate of the 3d object position + \param z0 Z-coordinate of the 3d object position + \param vertices Image Nx3 describing 3d point coordinates + \param primitives List of P primitives + \param colors List of P color (or textures) + \param opacities Image or list of P opacities + \param render_type d Render type (0=Points, 1=Lines, 2=Faces (no light), 3=Faces (flat), 4=Faces(Gouraud) + \param is_double_sided Tells if object faces have two sides or are oriented. + \param focale length of the focale (0 for parallel projection) + \param lightx X-coordinate of the light + \param lighty Y-coordinate of the light + \param lightz Z-coordinate of the light + \param specular_lightness Amount of specular light. + \param specular_shininess Shininess of the object + **/ + template + CImg& draw_object3d(const float x0, const float y0, const float z0, + const CImg& vertices, const CImgList& primitives, + const CImgList& colors, const CImg& opacities, + const unsigned int render_type=4, + const bool is_double_sided=false, const float focale=700, + const float lightx=0, const float lighty=0, const float lightz=-5e8, + const float specular_lightness=0.2f, const float specular_shininess=0.1f) { + return draw_object3d(x0,y0,z0,vertices,primitives,colors,opacities,render_type, + is_double_sided,focale,lightx,lighty,lightz, + specular_lightness,specular_shininess,CImg::empty()); + } + + //! Draw a 3d object \simplification. + template + CImg& draw_object3d(const float x0, const float y0, const float z0, + const CImg& vertices, const CImgList& primitives, + const CImgList& colors, const CImg& opacities, + const unsigned int render_type, + const bool is_double_sided, const float focale, + const float lightx, const float lighty, const float lightz, + const float specular_lightness, const float specular_shininess, + CImg& zbuffer) { + return _draw_object3d(0,zbuffer,x0,y0,z0,vertices,primitives,colors,opacities, + render_type,is_double_sided,focale,lightx,lighty,lightz, + specular_lightness,specular_shininess,1); + } + +#ifdef cimg_use_board + template + CImg& draw_object3d(LibBoard::Board& board, + const float x0, const float y0, const float z0, + const CImg& vertices, const CImgList& primitives, + const CImgList& colors, const CImg& opacities, + const unsigned int render_type=4, + const bool is_double_sided=false, const float focale=700, + const float lightx=0, const float lighty=0, const float lightz=-5e8, + const float specular_lightness=0.2f, const float specular_shininess=0.1f) { + return draw_object3d(board,x0,y0,z0,vertices,primitives,colors,opacities,render_type, + is_double_sided,focale,lightx,lighty,lightz, + specular_lightness,specular_shininess,CImg::empty()); + } + + template + CImg& draw_object3d(LibBoard::Board& board, + const float x0, const float y0, const float z0, + const CImg& vertices, const CImgList& primitives, + const CImgList& colors, const CImg& opacities, + const unsigned int render_type, + const bool is_double_sided, const float focale, + const float lightx, const float lighty, const float lightz, + const float specular_lightness, const float specular_shininess, + CImg& zbuffer) { + return _draw_object3d((void*)&board,zbuffer,x0,y0,z0,vertices,primitives,colors,opacities, + render_type,is_double_sided,focale,lightx,lighty,lightz, + specular_lightness,specular_shininess,1); + } +#endif + + //! Draw a 3d object \simplification. + template + CImg& draw_object3d(const float x0, const float y0, const float z0, + const CImg& vertices, const CImgList& primitives, + const CImgList& colors, const CImgList& opacities, + const unsigned int render_type=4, + const bool is_double_sided=false, const float focale=700, + const float lightx=0, const float lighty=0, const float lightz=-5e8, + const float specular_lightness=0.2f, const float specular_shininess=0.1f) { + return draw_object3d(x0,y0,z0,vertices,primitives,colors,opacities,render_type, + is_double_sided,focale,lightx,lighty,lightz, + specular_lightness,specular_shininess,CImg::empty()); + } + + //! Draw a 3d object \simplification. + template + CImg& draw_object3d(const float x0, const float y0, const float z0, + const CImg& vertices, const CImgList& primitives, + const CImgList& colors, const CImgList& opacities, + const unsigned int render_type, + const bool is_double_sided, const float focale, + const float lightx, const float lighty, const float lightz, + const float specular_lightness, const float specular_shininess, + CImg& zbuffer) { + return _draw_object3d(0,zbuffer,x0,y0,z0,vertices,primitives,colors,opacities, + render_type,is_double_sided,focale,lightx,lighty,lightz, + specular_lightness,specular_shininess,1); + } + +#ifdef cimg_use_board + template + CImg& draw_object3d(LibBoard::Board& board, + const float x0, const float y0, const float z0, + const CImg& vertices, const CImgList& primitives, + const CImgList& colors, const CImgList& opacities, + const unsigned int render_type=4, + const bool is_double_sided=false, const float focale=700, + const float lightx=0, const float lighty=0, const float lightz=-5e8, + const float specular_lightness=0.2f, const float specular_shininess=0.1f) { + return draw_object3d(board,x0,y0,z0,vertices,primitives,colors,opacities,render_type, + is_double_sided,focale,lightx,lighty,lightz, + specular_lightness,specular_shininess,CImg::empty()); + } + + template + CImg& draw_object3d(LibBoard::Board& board, + const float x0, const float y0, const float z0, + const CImg& vertices, const CImgList& primitives, + const CImgList& colors, const CImgList& opacities, + const unsigned int render_type, + const bool is_double_sided, const float focale, + const float lightx, const float lighty, const float lightz, + const float specular_lightness, const float specular_shininess, + CImg& zbuffer) { + return _draw_object3d((void*)&board,zbuffer,x0,y0,z0,vertices,primitives,colors,opacities, + render_type,is_double_sided,focale,lightx,lighty,lightz, + specular_lightness,specular_shininess,1); + } +#endif + + //! Draw a 3d object \simplification. + template + CImg& draw_object3d(const float x0, const float y0, const float z0, + const CImg& vertices, const CImgList& primitives, + const CImgList& colors, + const unsigned int render_type=4, + const bool is_double_sided=false, const float focale=700, + const float lightx=0, const float lighty=0, const float lightz=-5e8, + const float specular_lightness=0.2f, const float specular_shininess=0.1f) { + return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::const_empty(), + render_type,is_double_sided,focale,lightx,lighty,lightz, + specular_lightness,specular_shininess,CImg::empty()); + } + + //! Draw a 3d object \simplification. + template + CImg& draw_object3d(const float x0, const float y0, const float z0, + const CImg& vertices, const CImgList& primitives, + const CImgList& colors, + const unsigned int render_type, + const bool is_double_sided, const float focale, + const float lightx, const float lighty, const float lightz, + const float specular_lightness, const float specular_shininess, + CImg& zbuffer) { + return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::const_empty(), + render_type,is_double_sided,focale,lightx,lighty,lightz, + specular_lightness,specular_shininess,zbuffer); + } + +#ifdef cimg_use_board + template + CImg& draw_object3d(LibBoard::Board& board, + const float x0, const float y0, const float z0, + const CImg& vertices, const CImgList& primitives, + const CImgList& colors, + const unsigned int render_type=4, + const bool is_double_sided=false, const float focale=700, + const float lightx=0, const float lighty=0, const float lightz=-5e8, + const float specular_lightness=0.2f, const float specular_shininess=0.1f) { + return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::const_empty(), + render_type,is_double_sided,focale,lightx,lighty,lightz, + specular_lightness,specular_shininess,CImg::empty()); + } + + template + CImg& draw_object3d(LibBoard::Board& board, + const float x0, const float y0, const float z0, + const CImg& vertices, const CImgList& primitives, + const CImgList& colors, + const unsigned int render_type, + const bool is_double_sided, const float focale, + const float lightx, const float lighty, const float lightz, + const float specular_lightness, const float specular_shininess, + CImg& zbuffer) { + return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::const_empty(), + render_type,is_double_sided,focale,lightx,lighty,lightz, + specular_lightness,specular_shininess,zbuffer); + } +#endif + + template + static float __draw_object3d(const CImgList& opacities, const unsigned int n_primitive, CImg& opacity) { + if (n_primitive>=opacities._width || opacities[n_primitive].is_empty()) { opacity.assign(); return 1; } + if (opacities[n_primitive].size()==1) { opacity.assign(); return opacities(n_primitive,0); } + opacity.assign(opacities[n_primitive],true); + return 1.0f; + } + + template + static float __draw_object3d(const CImg& opacities, const unsigned int n_primitive, CImg& opacity) { + opacity.assign(); + return n_primitive>=opacities._width?1.0f:(float)opacities[n_primitive]; + } + + template + static float ___draw_object3d(const CImgList& opacities, const unsigned int n_primitive) { + return n_primitive + static float ___draw_object3d(const CImg& opacities, const unsigned int n_primitive) { + return n_primitive + CImg& _draw_object3d(void *const pboard, CImg& zbuffer, + const float X, const float Y, const float Z, + const CImg& vertices, + const CImgList& primitives, + const CImgList& colors, + const to& opacities, + const unsigned int render_type, + const bool is_double_sided, const float focale, + const float lightx, const float lighty, const float lightz, + const float specular_lightness, const float specular_shininess, + const float sprite_scale) { + typedef typename cimg::superset2::type tpfloat; + typedef typename to::value_type _to; + if (is_empty() || !vertices || !primitives) return *this; + CImg error_message(1024); + if (!vertices.is_object3d(primitives,colors,opacities,false,error_message)) + throw CImgArgumentException(_cimg_instance + "draw_object3d(): Invalid specified 3d object (%u,%u) (%s).", + cimg_instance,vertices._width,primitives._width,error_message.data()); +#ifndef cimg_use_board + if (pboard) return *this; +#endif + if (render_type==5) cimg::mutex(10); // Static variable used in this case, breaks thread-safety. + + const float + nspec = 1 - (specular_lightness<0.0f?0.0f:(specular_lightness>1.0f?1.0f:specular_lightness)), + nspec2 = 1 + (specular_shininess<0.0f?0.0f:specular_shininess), + nsl1 = (nspec2 - 1)/cimg::sqr(nspec - 1), + nsl2 = 1 - 2*nsl1*nspec, + nsl3 = nspec2 - nsl1 - nsl2; + + // Create light texture for phong-like rendering. + CImg light_texture; + if (render_type==5) { + if (colors._width>primitives._width) { + static CImg default_light_texture; + static const tc *lptr = 0; + static tc ref_values[64] = { 0 }; + const CImg& img = colors.back(); + bool is_same_texture = (lptr==img._data); + if (is_same_texture) + for (unsigned int r = 0, j = 0; j<8; ++j) + for (unsigned int i = 0; i<8; ++i) + if (ref_values[r++]!=img(i*img._width/9,j*img._height/9,0,(i + j)%img._spectrum)) { + is_same_texture = false; break; + } + if (!is_same_texture || default_light_texture._spectrum<_spectrum) { + (default_light_texture.assign(img,false)/=255).resize(-100,-100,1,_spectrum); + lptr = colors.back().data(); + for (unsigned int r = 0, j = 0; j<8; ++j) + for (unsigned int i = 0; i<8; ++i) + ref_values[r++] = img(i*img._width/9,j*img._height/9,0,(i + j)%img._spectrum); + } + light_texture.assign(default_light_texture,true); + } else { + static CImg default_light_texture; + static float olightx = 0, olighty = 0, olightz = 0, ospecular_shininess = 0; + if (!default_light_texture || + lightx!=olightx || lighty!=olighty || lightz!=olightz || + specular_shininess!=ospecular_shininess || default_light_texture._spectrum<_spectrum) { + default_light_texture.assign(512,512); + const float + dlx = lightx - X, + dly = lighty - Y, + dlz = lightz - Z, + nl = cimg::hypot(dlx,dly,dlz), + nlx = (default_light_texture._width - 1)/2*(1 + dlx/nl), + nly = (default_light_texture._height - 1)/2*(1 + dly/nl), + white[] = { 1 }; + default_light_texture.draw_gaussian(nlx,nly,default_light_texture._width/3.0f,white); + cimg_forXY(default_light_texture,x,y) { + const float factor = default_light_texture(x,y); + if (factor>nspec) default_light_texture(x,y) = std::min(2.0f,nsl1*factor*factor + nsl2*factor + nsl3); + } + default_light_texture.resize(-100,-100,1,_spectrum); + olightx = lightx; olighty = lighty; olightz = lightz; ospecular_shininess = specular_shininess; + } + light_texture.assign(default_light_texture,true); + } + } + + // Compute 3d to 2d projection. + CImg projections(vertices._width,2); + tpfloat parallzmin = cimg::type::max(); + const float absfocale = focale?cimg::abs(focale):0; + if (absfocale) { + cimg_pragma_openmp(parallel for cimg_openmp_if(projections.size()>4096)) + cimg_forX(projections,l) { // Perspective projection + const tpfloat + x = (tpfloat)vertices(l,0), + y = (tpfloat)vertices(l,1), + z = (tpfloat)vertices(l,2); + const tpfloat projectedz = z + Z + absfocale; + projections(l,1) = Y + absfocale*y/projectedz; + projections(l,0) = X + absfocale*x/projectedz; + } + } else { + cimg_pragma_openmp(parallel for cimg_openmp_if(projections.size()>4096)) + cimg_forX(projections,l) { // Parallel projection + const tpfloat + x = (tpfloat)vertices(l,0), + y = (tpfloat)vertices(l,1), + z = (tpfloat)vertices(l,2); + if (z visibles(primitives._width,1,1,1,~0U); + CImg zrange(primitives._width); + const tpfloat zmin = absfocale?(tpfloat)(1.5f - absfocale):cimg::type::min(); + bool is_forward = zbuffer?true:false; + + cimg_pragma_openmp(parallel for cimg_openmp_if(primitives.size()>4096)) + cimglist_for(primitives,l) { + const CImg& primitive = primitives[l]; + switch (primitive.size()) { + case 1 : { // Point + CImg<_to> _opacity; + __draw_object3d(opacities,l,_opacity); + if (l<=colors.width() && (colors[l].size()!=_spectrum || _opacity)) is_forward = false; + const unsigned int i0 = (unsigned int)primitive(0); + const tpfloat z0 = Z + vertices(i0,2); + if (z0>zmin) { + visibles(l) = (unsigned int)l; + zrange(l) = z0; + } + } break; + case 5 : { // Sphere + const unsigned int + i0 = (unsigned int)primitive(0), + i1 = (unsigned int)primitive(1); + const tpfloat + Xc = 0.5f*((float)vertices(i0,0) + (float)vertices(i1,0)), + Yc = 0.5f*((float)vertices(i0,1) + (float)vertices(i1,1)), + Zc = 0.5f*((float)vertices(i0,2) + (float)vertices(i1,2)), + _zc = Z + Zc, + zc = _zc + _focale, + xc = X + Xc*(absfocale?absfocale/zc:1), + yc = Y + Yc*(absfocale?absfocale/zc:1), + radius = 0.5f*cimg::hypot(vertices(i1,0) - vertices(i0,0), + vertices(i1,1) - vertices(i0,1), + vertices(i1,2) - vertices(i0,2))*(absfocale?absfocale/zc:1), + xm = xc - radius, + ym = yc - radius, + xM = xc + radius, + yM = yc + radius; + if (xM>=0 && xm<_width && yM>=0 && ym<_height && _zc>zmin) { + visibles(l) = (unsigned int)l; + zrange(l) = _zc; + } + is_forward = false; + } break; + case 2 : case 6 : { // Segment + const unsigned int + i0 = (unsigned int)primitive(0), + i1 = (unsigned int)primitive(1); + const tpfloat + x0 = projections(i0,0), y0 = projections(i0,1), z0 = Z + vertices(i0,2), + x1 = projections(i1,0), y1 = projections(i1,1), z1 = Z + vertices(i1,2); + tpfloat xm, xM, ym, yM; + if (x0=0 && xm<_width && yM>=0 && ym<_height && z0>zmin && z1>zmin) { + visibles(l) = (unsigned int)l; + zrange(l) = (z0 + z1)/2; + } + } break; + case 3 : case 9 : { // Triangle + const unsigned int + i0 = (unsigned int)primitive(0), + i1 = (unsigned int)primitive(1), + i2 = (unsigned int)primitive(2); + const tpfloat + x0 = projections(i0,0), y0 = projections(i0,1), z0 = Z + vertices(i0,2), + x1 = projections(i1,0), y1 = projections(i1,1), z1 = Z + vertices(i1,2), + x2 = projections(i2,0), y2 = projections(i2,1), z2 = Z + vertices(i2,2); + tpfloat xm, xM, ym, yM; + if (x0xM) xM = x2; + if (y0yM) yM = y2; + if (xM>=0 && xm<_width && yM>=0 && ym<_height && z0>zmin && z1>zmin && z2>zmin) { + const tpfloat d = (x1-x0)*(y2-y0) - (x2-x0)*(y1-y0); + if (is_double_sided || d<0) { + visibles(l) = (unsigned int)l; + zrange(l) = (z0 + z1 + z2)/3; + } + } + } break; + case 4 : case 12 : { // Quadrangle + const unsigned int + i0 = (unsigned int)primitive(0), + i1 = (unsigned int)primitive(1), + i2 = (unsigned int)primitive(2), + i3 = (unsigned int)primitive(3); + const tpfloat + x0 = projections(i0,0), y0 = projections(i0,1), z0 = Z + vertices(i0,2), + x1 = projections(i1,0), y1 = projections(i1,1), z1 = Z + vertices(i1,2), + x2 = projections(i2,0), y2 = projections(i2,1), z2 = Z + vertices(i2,2), + x3 = projections(i3,0), y3 = projections(i3,1), z3 = Z + vertices(i3,2); + tpfloat xm, xM, ym, yM; + if (x0xM) xM = x2; + if (x3xM) xM = x3; + if (y0yM) yM = y2; + if (y3yM) yM = y3; + if (xM>=0 && xm<_width && yM>=0 && ym<_height && z0>zmin && z1>zmin && z2>zmin && z3>zmin) { + const float d = (x1 - x0)*(y2 - y0) - (x2 - x0)*(y1 - y0); + if (is_double_sided || d<0) { + visibles(l) = (unsigned int)l; + zrange(l) = (z0 + z1 + z2 + z3)/4; + } + } + } break; + default : + if (render_type==5) cimg::mutex(10,0); + throw CImgArgumentException(_cimg_instance + "draw_object3d(): Invalid primitive[%u] with size %u " + "(should have size 1,2,3,4,5,6,9 or 12).", + cimg_instance, + l,primitive.size()); + } + } + + // Force transparent primitives to be drawn last when zbuffer is activated + // (and if object contains no spheres or sprites). + if (is_forward) + cimglist_for(primitives,l) + if (___draw_object3d(opacities,l)!=1) zrange(l) = 2*zmax - zrange(l); + + // Sort only visibles primitives. + unsigned int *p_visibles = visibles._data; + tpfloat *p_zrange = zrange._data; + const tpfloat *ptrz = p_zrange; + cimg_for(visibles,ptr,unsigned int) { + if (*ptr!=~0U) { *(p_visibles++) = *ptr; *(p_zrange++) = *ptrz; } + ++ptrz; + } + const unsigned int nb_visibles = (unsigned int)(p_zrange - zrange._data); + if (!nb_visibles) { + if (render_type==5) cimg::mutex(10,0); + return *this; + } + CImg permutations; + CImg(zrange._data,nb_visibles,1,1,1,true).sort(permutations,is_forward); + + // Compute light properties + CImg lightprops; + switch (render_type) { + case 3 : { // Flat Shading + lightprops.assign(nb_visibles); + cimg_pragma_openmp(parallel for cimg_openmp_if(nb_visibles>4096)) + cimg_forX(lightprops,l) { + const CImg& primitive = primitives(visibles(permutations(l))); + const unsigned int psize = (unsigned int)primitive.size(); + if (psize==3 || psize==4 || psize==9 || psize==12) { + const unsigned int + i0 = (unsigned int)primitive(0), + i1 = (unsigned int)primitive(1), + i2 = (unsigned int)primitive(2); + const tpfloat + x0 = (tpfloat)vertices(i0,0), y0 = (tpfloat)vertices(i0,1), z0 = (tpfloat)vertices(i0,2), + x1 = (tpfloat)vertices(i1,0), y1 = (tpfloat)vertices(i1,1), z1 = (tpfloat)vertices(i1,2), + x2 = (tpfloat)vertices(i2,0), y2 = (tpfloat)vertices(i2,1), z2 = (tpfloat)vertices(i2,2), + dx1 = x1 - x0, dy1 = y1 - y0, dz1 = z1 - z0, + dx2 = x2 - x0, dy2 = y2 - y0, dz2 = z2 - z0, + nx = dy1*dz2 - dz1*dy2, + ny = dz1*dx2 - dx1*dz2, + nz = dx1*dy2 - dy1*dx2, + norm = 1e-5f + cimg::hypot(nx,ny,nz), + lx = X + (x0 + x1 + x2)/3 - lightx, + ly = Y + (y0 + y1 + y2)/3 - lighty, + lz = Z + (z0 + z1 + z2)/3 - lightz, + nl = 1e-5f + cimg::hypot(lx,ly,lz), + factor = std::max(cimg::abs(-lx*nx - ly*ny - lz*nz)/(norm*nl),(tpfloat)0); + lightprops[l] = factor<=nspec?factor:(nsl1*factor*factor + nsl2*factor + nsl3); + } else lightprops[l] = 1; + } + } break; + + case 4 : // Gouraud Shading + case 5 : { // Phong-Shading + CImg vertices_normals(vertices._width,6,1,1,0); + cimg_pragma_openmp(parallel for cimg_openmp_if(nb_visibles>4096)) + for (unsigned int l = 0; l& primitive = primitives[visibles(l)]; + const unsigned int psize = (unsigned int)primitive.size(); + const bool + triangle_flag = (psize==3) || (psize==9), + quadrangle_flag = (psize==4) || (psize==12); + if (triangle_flag || quadrangle_flag) { + const unsigned int + i0 = (unsigned int)primitive(0), + i1 = (unsigned int)primitive(1), + i2 = (unsigned int)primitive(2), + i3 = quadrangle_flag?(unsigned int)primitive(3):0; + const tpfloat + x0 = (tpfloat)vertices(i0,0), y0 = (tpfloat)vertices(i0,1), z0 = (tpfloat)vertices(i0,2), + x1 = (tpfloat)vertices(i1,0), y1 = (tpfloat)vertices(i1,1), z1 = (tpfloat)vertices(i1,2), + x2 = (tpfloat)vertices(i2,0), y2 = (tpfloat)vertices(i2,1), z2 = (tpfloat)vertices(i2,2), + dx1 = x1 - x0, dy1 = y1 - y0, dz1 = z1 - z0, + dx2 = x2 - x0, dy2 = y2 - y0, dz2 = z2 - z0, + nnx = dy1*dz2 - dz1*dy2, + nny = dz1*dx2 - dx1*dz2, + nnz = dx1*dy2 - dy1*dx2, + norm = 1e-5f + cimg::hypot(nnx,nny,nnz), + nx = nnx/norm, + ny = nny/norm, + nz = nnz/norm; + unsigned int ix = 0, iy = 1, iz = 2; + if (is_double_sided && nz>0) { ix = 3; iy = 4; iz = 5; } + vertices_normals(i0,ix)+=nx; vertices_normals(i0,iy)+=ny; vertices_normals(i0,iz)+=nz; + vertices_normals(i1,ix)+=nx; vertices_normals(i1,iy)+=ny; vertices_normals(i1,iz)+=nz; + vertices_normals(i2,ix)+=nx; vertices_normals(i2,iy)+=ny; vertices_normals(i2,iz)+=nz; + if (quadrangle_flag) { + vertices_normals(i3,ix)+=nx; vertices_normals(i3,iy)+=ny; vertices_normals(i3,iz)+=nz; + } + } + } + + if (is_double_sided) cimg_forX(vertices_normals,p) { + const float + nx0 = vertices_normals(p,0), ny0 = vertices_normals(p,1), nz0 = vertices_normals(p,2), + nx1 = vertices_normals(p,3), ny1 = vertices_normals(p,4), nz1 = vertices_normals(p,5), + n0 = nx0*nx0 + ny0*ny0 + nz0*nz0, n1 = nx1*nx1 + ny1*ny1 + nz1*nz1; + if (n1>n0) { + vertices_normals(p,0) = -nx1; + vertices_normals(p,1) = -ny1; + vertices_normals(p,2) = -nz1; + } + } + + if (render_type==4) { + lightprops.assign(vertices._width); + cimg_pragma_openmp(parallel for cimg_openmp_if(nb_visibles>4096)) + cimg_forX(lightprops,l) { + const tpfloat + nx = vertices_normals(l,0), + ny = vertices_normals(l,1), + nz = vertices_normals(l,2), + norm = 1e-5f + cimg::hypot(nx,ny,nz), + lx = X + vertices(l,0) - lightx, + ly = Y + vertices(l,1) - lighty, + lz = Z + vertices(l,2) - lightz, + nl = 1e-5f + cimg::hypot(lx,ly,lz), + factor = std::max((-lx*nx - ly*ny - lz*nz)/(norm*nl),(tpfloat)0); + lightprops[l] = factor<=nspec?factor:(nsl1*factor*factor + nsl2*factor + nsl3); + } + } else { + const unsigned int + lw2 = light_texture._width/2 - 1, + lh2 = light_texture._height/2 - 1; + lightprops.assign(vertices._width,2); + cimg_pragma_openmp(parallel for cimg_openmp_if(nb_visibles>4096)) + cimg_forX(lightprops,l) { + const tpfloat + nx = vertices_normals(l,0), + ny = vertices_normals(l,1), + nz = vertices_normals(l,2), + norm = 1e-5f + cimg::hypot(nx,ny,nz), + nnx = nx/norm, + nny = ny/norm; + lightprops(l,0) = lw2*(1 + nnx); + lightprops(l,1) = lh2*(1 + nny); + } + } + } break; + } + + // Draw visible primitives + const CImg default_color(1,_spectrum,1,1,(tc)200); + CImg<_to> _opacity; + + for (unsigned int l = 0; l& primitive = primitives[n_primitive]; + const CImg + &__color = n_primitive(), + _color = (__color && __color.size()!=_spectrum && __color._spectrum<_spectrum)? + __color.get_resize(-100,-100,-100,_spectrum,0):CImg(), + &color = _color?_color:(__color?__color:default_color); + const tc *const pcolor = color._data; + const float opacity = __draw_object3d(opacities,n_primitive,_opacity); + +#ifdef cimg_use_board + LibBoard::Board &board = *(LibBoard::Board*)pboard; +#endif + + switch (primitive.size()) { + case 1 : { // Colored point or sprite + const unsigned int n0 = (unsigned int)primitive[0]; + const int x0 = (int)projections(n0,0), y0 = (int)projections(n0,1); + + if (_opacity.is_empty()) { // Scalar opacity. + + if (color.size()==_spectrum) { // Colored point. + draw_point(x0,y0,pcolor,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); + board.drawDot((float)x0,height()-(float)y0); + } +#endif + } else { // Sprite. + const tpfloat z = Z + vertices(n0,2); + const float factor = focale<0?1:sprite_scale*(absfocale?absfocale/(z + absfocale):1); + const unsigned int + _sw = (unsigned int)(color._width*factor), + _sh = (unsigned int)(color._height*factor), + sw = _sw?_sw:1, sh = _sh?_sh:1; + const int nx0 = x0 - (int)sw/2, ny0 = y0 - (int)sh/2; + if (sw<=3*_width/2 && sh<=3*_height/2 && + (nx0 + (int)sw/2>=0 || nx0 - (int)sw/2=0 || ny0 - (int)sh/2 + _sprite = (sw!=color._width || sh!=color._height)? + color.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg(), + &sprite = _sprite?_sprite:color; + draw_image(nx0,ny0,sprite,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(128,128,128); + board.setFillColor(LibBoard::Color::Null); + board.drawRectangle((float)nx0,height() - (float)ny0,sw,sh); + } +#endif + } + } + } else { // Opacity mask. + const tpfloat z = Z + vertices(n0,2); + const float factor = focale<0?1:sprite_scale*(absfocale?absfocale/(z + absfocale):1); + const unsigned int + _sw = (unsigned int)(std::max(color._width,_opacity._width)*factor), + _sh = (unsigned int)(std::max(color._height,_opacity._height)*factor), + sw = _sw?_sw:1, sh = _sh?_sh:1; + const int nx0 = x0 - (int)sw/2, ny0 = y0 - (int)sh/2; + if (sw<=3*_width/2 && sh<=3*_height/2 && + (nx0 + (int)sw/2>=0 || nx0 - (int)sw/2=0 || ny0 - (int)sh/2 + _sprite = (sw!=color._width || sh!=color._height)? + color.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg(), + &sprite = _sprite?_sprite:color; + const CImg<_to> + _nopacity = (sw!=_opacity._width || sh!=_opacity._height)? + _opacity.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg<_to>(), + &nopacity = _nopacity?_nopacity:_opacity; + draw_image(nx0,ny0,sprite,nopacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(128,128,128); + board.setFillColor(LibBoard::Color::Null); + board.drawRectangle((float)nx0,height() - (float)ny0,sw,sh); + } +#endif + } + } + } break; + case 2 : { // Colored line + const unsigned int + n0 = (unsigned int)primitive[0], + n1 = (unsigned int)primitive[1]; + const int + x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), + x1 = (int)projections(n1,0), y1 = (int)projections(n1,1); + const float + z0 = vertices(n0,2) + Z + _focale, + z1 = vertices(n1,2) + Z + _focale; + if (render_type) { + if (zbuffer) draw_line(zbuffer,x0,y0,z0,x1,y1,z1,pcolor,opacity); + else draw_line(x0,y0,x1,y1,pcolor,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); + board.drawLine((float)x0,height() - (float)y0,x1,height() - (float)y1); + } +#endif + } else { + draw_point(x0,y0,pcolor,opacity).draw_point(x1,y1,pcolor,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); + board.drawDot((float)x0,height() - (float)y0); + board.drawDot((float)x1,height() - (float)y1); + } +#endif + } + } break; + case 5 : { // Colored sphere + const unsigned int + n0 = (unsigned int)primitive[0], + n1 = (unsigned int)primitive[1], + is_wireframe = (unsigned int)primitive[2]; + const float + Xc = 0.5f*((float)vertices(n0,0) + (float)vertices(n1,0)), + Yc = 0.5f*((float)vertices(n0,1) + (float)vertices(n1,1)), + Zc = 0.5f*((float)vertices(n0,2) + (float)vertices(n1,2)), + zc = Z + Zc + _focale, + xc = X + Xc*(absfocale?absfocale/zc:1), + yc = Y + Yc*(absfocale?absfocale/zc:1), + radius = 0.5f*cimg::hypot(vertices(n1,0) - vertices(n0,0), + vertices(n1,1) - vertices(n0,1), + vertices(n1,2) - vertices(n0,2))*(absfocale?absfocale/zc:1); + switch (render_type) { + case 0 : + draw_point((int)xc,(int)yc,pcolor,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); + board.drawDot(xc,height() - yc); + } +#endif + break; + case 1 : + draw_circle((int)xc,(int)yc,(int)radius,pcolor,opacity,~0U); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); + board.setFillColor(LibBoard::Color::Null); + board.drawCircle(xc,height() - yc,radius); + } +#endif + break; + default : + if (is_wireframe) draw_circle((int)xc,(int)yc,(int)radius,pcolor,opacity,~0U); + else draw_circle((int)xc,(int)yc,(int)radius,pcolor,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); + if (!is_wireframe) board.fillCircle(xc,height() - yc,radius); + else { + board.setFillColor(LibBoard::Color::Null); + board.drawCircle(xc,height() - yc,radius); + } + } +#endif + break; + } + } break; + case 6 : { // Textured line + if (!__color) { + if (render_type==5) cimg::mutex(10,0); + throw CImgArgumentException(_cimg_instance + "draw_object3d(): Undefined texture for line primitive [%u].", + cimg_instance,n_primitive); + } + const unsigned int + n0 = (unsigned int)primitive[0], + n1 = (unsigned int)primitive[1]; + const int + tx0 = (int)primitive[2], ty0 = (int)primitive[3], + tx1 = (int)primitive[4], ty1 = (int)primitive[5], + x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), + x1 = (int)projections(n1,0), y1 = (int)projections(n1,1); + const float + z0 = vertices(n0,2) + Z + _focale, + z1 = vertices(n1,2) + Z + _focale; + if (render_type) { + if (zbuffer) draw_line(zbuffer,x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity); + else draw_line(x0,y0,x1,y1,color,tx0,ty0,tx1,ty1,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); + board.drawLine((float)x0,height() - (float)y0,(float)x1,height() - (float)y1); + } +#endif + } else { + draw_point(x0,y0,color.get_vector_at(tx0<=0?0:tx0>=color.width()?color.width() - 1:tx0, + ty0<=0?0:ty0>=color.height()?color.height() - 1:ty0)._data,opacity). + draw_point(x1,y1,color.get_vector_at(tx1<=0?0:tx1>=color.width()?color.width() - 1:tx1, + ty1<=0?0:ty1>=color.height()?color.height() - 1:ty1)._data,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); + board.drawDot((float)x0,height() - (float)y0); + board.drawDot((float)x1,height() - (float)y1); + } +#endif + } + } break; + case 3 : { // Colored triangle + const unsigned int + n0 = (unsigned int)primitive[0], + n1 = (unsigned int)primitive[1], + n2 = (unsigned int)primitive[2]; + const int + x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), + x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), + x2 = (int)projections(n2,0), y2 = (int)projections(n2,1); + const float + z0 = vertices(n0,2) + Z + _focale, + z1 = vertices(n1,2) + Z + _focale, + z2 = vertices(n2,2) + Z + _focale; + switch (render_type) { + case 0 : + draw_point(x0,y0,pcolor,opacity).draw_point(x1,y1,pcolor,opacity).draw_point(x2,y2,pcolor,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); + board.drawDot((float)x0,height() - (float)y0); + board.drawDot((float)x1,height() - (float)y1); + board.drawDot((float)x2,height() - (float)y2); + } +#endif + break; + case 1 : + if (zbuffer) + draw_line(zbuffer,x0,y0,z0,x1,y1,z1,pcolor,opacity).draw_line(zbuffer,x0,y0,z0,x2,y2,z2,pcolor,opacity). + draw_line(zbuffer,x1,y1,z1,x2,y2,z2,pcolor,opacity); + else + draw_line(x0,y0,x1,y1,pcolor,opacity).draw_line(x0,y0,x2,y2,pcolor,opacity). + draw_line(x1,y1,x2,y2,pcolor,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); + board.drawLine((float)x0,height() - (float)y0,(float)x1,height() - (float)y1); + board.drawLine((float)x0,height() - (float)y0,(float)x2,height() - (float)y2); + board.drawLine((float)x1,height() - (float)y1,(float)x2,height() - (float)y2); + } +#endif + break; + case 2 : + if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity); + else draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); + } +#endif + break; + case 3 : + if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity,lightprops(l)); + else _draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity,lightprops(l)); +#ifdef cimg_use_board + if (pboard) { + const float lp = std::min(lightprops(l),1); + board.setPenColorRGBi((unsigned char)(color[0]*lp), + (unsigned char)(color[1]*lp), + (unsigned char)(color[2]*lp), + (unsigned char)(opacity*255)); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); + } +#endif + break; + case 4 : + if (zbuffer) + draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor, + lightprops(n0),lightprops(n1),lightprops(n2),opacity); + else draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,lightprops(n0),lightprops(n1),lightprops(n2),opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi((unsigned char)(color[0]), + (unsigned char)(color[1]), + (unsigned char)(color[2]), + (unsigned char)(opacity*255)); + board.fillGouraudTriangle((float)x0,height() - (float)y0,lightprops(n0), + (float)x1,height() - (float)y1,lightprops(n1), + (float)x2,height() - (float)y2,lightprops(n2)); + } +#endif + break; + case 5 : { + const unsigned int + lx0 = (unsigned int)lightprops(n0,0), ly0 = (unsigned int)lightprops(n0,1), + lx1 = (unsigned int)lightprops(n1,0), ly1 = (unsigned int)lightprops(n1,1), + lx2 = (unsigned int)lightprops(n2,0), ly2 = (unsigned int)lightprops(n2,1); + if (zbuffer) + draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity); + else draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,light_texture,lx0,ly0,lx1,ly1,lx2,ly2,opacity); +#ifdef cimg_use_board + if (pboard) { + const float + l0 = light_texture((int)(light_texture.width()/2*(1 + lightprops(n0,0))), + (int)(light_texture.height()/2*(1 + lightprops(n0,1)))), + l1 = light_texture((int)(light_texture.width()/2*(1 + lightprops(n1,0))), + (int)(light_texture.height()/2*(1 + lightprops(n1,1)))), + l2 = light_texture((int)(light_texture.width()/2*(1 + lightprops(n2,0))), + (int)(light_texture.height()/2*(1 + lightprops(n2,1)))); + board.setPenColorRGBi((unsigned char)(color[0]), + (unsigned char)(color[1]), + (unsigned char)(color[2]), + (unsigned char)(opacity*255)); + board.fillGouraudTriangle((float)x0,height() - (float)y0,l0, + (float)x1,height() - (float)y1,l1, + (float)x2,height() - (float)y2,l2); + } +#endif + } break; + } + } break; + case 4 : { // Colored quadrangle + const unsigned int + n0 = (unsigned int)primitive[0], + n1 = (unsigned int)primitive[1], + n2 = (unsigned int)primitive[2], + n3 = (unsigned int)primitive[3]; + const int + x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), + x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), + x2 = (int)projections(n2,0), y2 = (int)projections(n2,1), + x3 = (int)projections(n3,0), y3 = (int)projections(n3,1), + xc = (x0 + x1 + x2 + x3)/4, yc = (y0 + y1 + y2 + y3)/4; + const float + z0 = vertices(n0,2) + Z + _focale, + z1 = vertices(n1,2) + Z + _focale, + z2 = vertices(n2,2) + Z + _focale, + z3 = vertices(n3,2) + Z + _focale, + zc = (z0 + z1 + z2 + z3)/4; + + switch (render_type) { + case 0 : + draw_point(x0,y0,pcolor,opacity).draw_point(x1,y1,pcolor,opacity). + draw_point(x2,y2,pcolor,opacity).draw_point(x3,y3,pcolor,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); + board.drawDot((float)x0,height() - (float)y0); + board.drawDot((float)x1,height() - (float)y1); + board.drawDot((float)x2,height() - (float)y2); + board.drawDot((float)x3,height() - (float)y3); + } +#endif + break; + case 1 : + if (zbuffer) + draw_line(zbuffer,x0,y0,z0,x1,y1,z1,pcolor,opacity).draw_line(zbuffer,x1,y1,z1,x2,y2,z2,pcolor,opacity). + draw_line(zbuffer,x2,y2,z2,x3,y3,z3,pcolor,opacity).draw_line(zbuffer,x3,y3,z3,x0,y0,z0,pcolor,opacity); + else + draw_line(x0,y0,x1,y1,pcolor,opacity).draw_line(x1,y1,x2,y2,pcolor,opacity). + draw_line(x2,y2,x3,y3,pcolor,opacity).draw_line(x3,y3,x0,y0,pcolor,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); + board.drawLine((float)x0,height() - (float)y0,(float)x1,height() - (float)y1); + board.drawLine((float)x1,height() - (float)y1,(float)x2,height() - (float)y2); + board.drawLine((float)x2,height() - (float)y2,(float)x3,height() - (float)y3); + board.drawLine((float)x3,height() - (float)y3,(float)x0,height() - (float)y0); + } +#endif + break; + case 2 : + if (zbuffer) + draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity). + draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,opacity); + else + draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity).draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x2,height() - (float)y2, + (float)x3,height() - (float)y3); + } +#endif + break; + case 3 : + if (zbuffer) + draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,pcolor,opacity,lightprops(l)). + draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,pcolor,opacity,lightprops(l)); + else + _draw_triangle(x0,y0,x1,y1,x2,y2,pcolor,opacity,lightprops(l)). + _draw_triangle(x0,y0,x2,y2,x3,y3,pcolor,opacity,lightprops(l)); +#ifdef cimg_use_board + if (pboard) { + const float lp = std::min(lightprops(l),1); + board.setPenColorRGBi((unsigned char)(color[0]*lp), + (unsigned char)(color[1]*lp), + (unsigned char)(color[2]*lp),(unsigned char)(opacity*255)); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x2,height() - (float)y2, + (float)x3,height() - (float)y3); + } +#endif + break; + case 4 : { + const float + lightprop0 = lightprops(n0), lightprop1 = lightprops(n1), + lightprop2 = lightprops(n2), lightprop3 = lightprops(n3), + lightpropc = (lightprop0 + lightprop1 + lightprop2 + lightprop2)/4; + if (zbuffer) + draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,xc,yc,zc,pcolor,lightprop0,lightprop1,lightpropc,opacity). + draw_triangle(zbuffer,x1,y1,z1,x2,y2,z2,xc,yc,zc,pcolor,lightprop1,lightprop2,lightpropc,opacity). + draw_triangle(zbuffer,x2,y2,z2,x3,y3,z3,xc,yc,zc,pcolor,lightprop2,lightprop3,lightpropc,opacity). + draw_triangle(zbuffer,x3,y3,z3,x0,y0,z0,xc,yc,zc,pcolor,lightprop3,lightprop0,lightpropc,opacity); + else + draw_triangle(x0,y0,x1,y1,xc,yc,pcolor,lightprop0,lightprop1,lightpropc,opacity). + draw_triangle(x1,y1,x2,y2,xc,yc,pcolor,lightprop1,lightprop2,lightpropc,opacity). + draw_triangle(x2,y2,x3,y3,xc,yc,pcolor,lightprop2,lightprop3,lightpropc,opacity). + draw_triangle(x3,y3,x0,y0,xc,yc,pcolor,lightprop3,lightprop0,lightpropc,opacity); + +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi((unsigned char)(color[0]), + (unsigned char)(color[1]), + (unsigned char)(color[2]), + (unsigned char)(opacity*255)); + board.fillGouraudTriangle((float)x0,height() - (float)y0,lightprop0, + (float)x1,height() - (float)y1,lightprop1, + (float)x2,height() - (float)y2,lightprop2); + board.fillGouraudTriangle((float)x0,height() - (float)y0,lightprop0, + (float)x2,height() - (float)y2,lightprop2, + (float)x3,height() - (float)y3,lightprop3); + } +#endif + } break; + case 5 : { + const unsigned int + lx0 = (unsigned int)lightprops(n0,0), ly0 = (unsigned int)lightprops(n0,1), + lx1 = (unsigned int)lightprops(n1,0), ly1 = (unsigned int)lightprops(n1,1), + lx2 = (unsigned int)lightprops(n2,0), ly2 = (unsigned int)lightprops(n2,1), + lx3 = (unsigned int)lightprops(n3,0), ly3 = (unsigned int)lightprops(n3,1), + lxc = (lx0 + lx1 + lx2 + lx3)/4, lyc = (ly0 + ly1 + ly2 + ly3)/4; + if (zbuffer) + draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,xc,yc,zc,pcolor,light_texture,lx0,ly0,lx1,ly1,lxc,lyc,opacity). + draw_triangle(zbuffer,x1,y1,z1,x2,y2,z2,xc,yc,zc,pcolor,light_texture,lx1,ly1,lx2,ly2,lxc,lyc,opacity). + draw_triangle(zbuffer,x2,y2,z2,x3,y3,z3,xc,yc,zc,pcolor,light_texture,lx2,ly2,lx3,ly3,lxc,lyc,opacity). + draw_triangle(zbuffer,x3,y3,z3,x0,y0,z0,xc,yc,zc,pcolor,light_texture,lx3,ly3,lx0,ly0,lxc,lyc,opacity); + else + draw_triangle(x0,y0,x1,y1,xc,yc,pcolor,light_texture,lx0,ly0,lx1,ly1,lxc,lyc,opacity). + draw_triangle(x1,y1,x2,y2,xc,yc,pcolor,light_texture,lx1,ly1,lx2,ly2,lxc,lyc,opacity). + draw_triangle(x2,y2,x3,y3,xc,yc,pcolor,light_texture,lx2,ly2,lx3,ly3,lxc,lyc,opacity). + draw_triangle(x3,y3,x0,y0,xc,yc,pcolor,light_texture,lx3,ly3,lx0,ly0,lxc,lyc,opacity); + +#ifdef cimg_use_board + if (pboard) { + const float + l0 = light_texture((int)(light_texture.width()/2*(1 + lx0)), (int)(light_texture.height()/2*(1 + ly0))), + l1 = light_texture((int)(light_texture.width()/2*(1 + lx1)), (int)(light_texture.height()/2*(1 + ly1))), + l2 = light_texture((int)(light_texture.width()/2*(1 + lx2)), (int)(light_texture.height()/2*(1 + ly2))), + l3 = light_texture((int)(light_texture.width()/2*(1 + lx3)), (int)(light_texture.height()/2*(1 + ly3))); + board.setPenColorRGBi((unsigned char)(color[0]), + (unsigned char)(color[1]), + (unsigned char)(color[2]), + (unsigned char)(opacity*255)); + board.fillGouraudTriangle((float)x0,height() - (float)y0,l0, + (float)x1,height() - (float)y1,l1, + (float)x2,height() - (float)y2,l2); + board.fillGouraudTriangle((float)x0,height() - (float)y0,l0, + (float)x2,height() - (float)y2,l2, + (float)x3,height() - (float)y3,l3); + } +#endif + } break; + } + } break; + case 9 : { // Textured triangle + if (!__color) { + if (render_type==5) cimg::mutex(10,0); + throw CImgArgumentException(_cimg_instance + "draw_object3d(): Undefined texture for triangle primitive [%u].", + cimg_instance,n_primitive); + } + const unsigned int + n0 = (unsigned int)primitive[0], + n1 = (unsigned int)primitive[1], + n2 = (unsigned int)primitive[2]; + const int + tx0 = (int)primitive[3], ty0 = (int)primitive[4], + tx1 = (int)primitive[5], ty1 = (int)primitive[6], + tx2 = (int)primitive[7], ty2 = (int)primitive[8], + x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), + x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), + x2 = (int)projections(n2,0), y2 = (int)projections(n2,1); + const float + z0 = vertices(n0,2) + Z + _focale, + z1 = vertices(n1,2) + Z + _focale, + z2 = vertices(n2,2) + Z + _focale; + switch (render_type) { + case 0 : + draw_point(x0,y0,color.get_vector_at(tx0<=0?0:tx0>=color.width()?color.width() - 1:tx0, + ty0<=0?0:ty0>=color.height()?color.height() - 1:ty0)._data,opacity). + draw_point(x1,y1,color.get_vector_at(tx1<=0?0:tx1>=color.width()?color.width() - 1:tx1, + ty1<=0?0:ty1>=color.height()?color.height() - 1:ty1)._data,opacity). + draw_point(x2,y2,color.get_vector_at(tx2<=0?0:tx2>=color.width()?color.width() - 1:tx2, + ty2<=0?0:ty2>=color.height()?color.height() - 1:ty2)._data,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); + board.drawDot((float)x0,height() - (float)y0); + board.drawDot((float)x1,height() - (float)y1); + board.drawDot((float)x2,height() - (float)y2); + } +#endif + break; + case 1 : + if (zbuffer) + draw_line(zbuffer,x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). + draw_line(zbuffer,x0,y0,z0,x2,y2,z2,color,tx0,ty0,tx2,ty2,opacity). + draw_line(zbuffer,x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity); + else + draw_line(x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). + draw_line(x0,y0,z0,x2,y2,z2,color,tx0,ty0,tx2,ty2,opacity). + draw_line(x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); + board.drawLine((float)x0,height() - (float)y0,(float)x1,height() - (float)y1); + board.drawLine((float)x0,height() - (float)y0,(float)x2,height() - (float)y2); + board.drawLine((float)x1,height() - (float)y1,(float)x2,height() - (float)y2); + } +#endif + break; + case 2 : + if (zbuffer) draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity); + else draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); + } +#endif + break; + case 3 : + if (zbuffer) + draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)); + else draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)); +#ifdef cimg_use_board + if (pboard) { + const float lp = std::min(lightprops(l),1); + board.setPenColorRGBi((unsigned char)(128*lp), + (unsigned char)(128*lp), + (unsigned char)(128*lp), + (unsigned char)(opacity*255)); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); + } +#endif + break; + case 4 : + if (zbuffer) + draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2, + lightprops(n0),lightprops(n1),lightprops(n2),opacity); + else + draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2, + lightprops(n0),lightprops(n1),lightprops(n2),opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); + board.fillGouraudTriangle((float)x0,height() - (float)y0,lightprops(n0), + (float)x1,height() - (float)y1,lightprops(n1), + (float)x2,height() - (float)y2,lightprops(n2)); + } +#endif + break; + case 5 : + if (zbuffer) + draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture, + (unsigned int)lightprops(n0,0),(unsigned int)lightprops(n0,1), + (unsigned int)lightprops(n1,0),(unsigned int)lightprops(n1,1), + (unsigned int)lightprops(n2,0),(unsigned int)lightprops(n2,1), + opacity); + else + draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,light_texture, + (unsigned int)lightprops(n0,0),(unsigned int)lightprops(n0,1), + (unsigned int)lightprops(n1,0),(unsigned int)lightprops(n1,1), + (unsigned int)lightprops(n2,0),(unsigned int)lightprops(n2,1), + opacity); +#ifdef cimg_use_board + if (pboard) { + const float + l0 = light_texture((int)(light_texture.width()/2*(1 + lightprops(n0,0))), + (int)(light_texture.height()/2*(1 + lightprops(n0,1)))), + l1 = light_texture((int)(light_texture.width()/2*(1 + lightprops(n1,0))), + (int)(light_texture.height()/2*(1 + lightprops(n1,1)))), + l2 = light_texture((int)(light_texture.width()/2*(1 + lightprops(n2,0))), + (int)(light_texture.height()/2*(1 + lightprops(n2,1)))); + board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); + board.fillGouraudTriangle((float)x0,height() - (float)y0,l0, + (float)x1,height() - (float)y1,l1, + (float)x2,height() - (float)y2,l2); + } +#endif + break; + } + } break; + case 12 : { // Textured quadrangle + if (!__color) { + if (render_type==5) cimg::mutex(10,0); + throw CImgArgumentException(_cimg_instance + "draw_object3d(): Undefined texture for quadrangle primitive [%u].", + cimg_instance,n_primitive); + } + const unsigned int + n0 = (unsigned int)primitive[0], + n1 = (unsigned int)primitive[1], + n2 = (unsigned int)primitive[2], + n3 = (unsigned int)primitive[3]; + const int + tx0 = (int)primitive[4], ty0 = (int)primitive[5], + tx1 = (int)primitive[6], ty1 = (int)primitive[7], + tx2 = (int)primitive[8], ty2 = (int)primitive[9], + tx3 = (int)primitive[10], ty3 = (int)primitive[11], + txc = (tx0 + tx1 + tx2 + tx3)/4, tyc = (ty0 + ty1 + ty2 + ty3)/4, + x0 = (int)projections(n0,0), y0 = (int)projections(n0,1), + x1 = (int)projections(n1,0), y1 = (int)projections(n1,1), + x2 = (int)projections(n2,0), y2 = (int)projections(n2,1), + x3 = (int)projections(n3,0), y3 = (int)projections(n3,1), + xc = (x0 + x1 + x2 + x3)/4, yc = (y0 + y1 + y2 + y3)/4; + const float + z0 = vertices(n0,2) + Z + _focale, + z1 = vertices(n1,2) + Z + _focale, + z2 = vertices(n2,2) + Z + _focale, + z3 = vertices(n3,2) + Z + _focale, + zc = (z0 + z1 + z2 + z3)/4; + + switch (render_type) { + case 0 : + draw_point(x0,y0,color.get_vector_at(tx0<=0?0:tx0>=color.width()?color.width() - 1:tx0, + ty0<=0?0:ty0>=color.height()?color.height() - 1:ty0)._data,opacity). + draw_point(x1,y1,color.get_vector_at(tx1<=0?0:tx1>=color.width()?color.width() - 1:tx1, + ty1<=0?0:ty1>=color.height()?color.height() - 1:ty1)._data,opacity). + draw_point(x2,y2,color.get_vector_at(tx2<=0?0:tx2>=color.width()?color.width() - 1:tx2, + ty2<=0?0:ty2>=color.height()?color.height() - 1:ty2)._data,opacity). + draw_point(x3,y3,color.get_vector_at(tx3<=0?0:tx3>=color.width()?color.width() - 1:tx3, + ty3<=0?0:ty3>=color.height()?color.height() - 1:ty3)._data,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); + board.drawDot((float)x0,height() - (float)y0); + board.drawDot((float)x1,height() - (float)y1); + board.drawDot((float)x2,height() - (float)y2); + board.drawDot((float)x3,height() - (float)y3); + } +#endif + break; + case 1 : + if (zbuffer) + draw_line(zbuffer,x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). + draw_line(zbuffer,x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity). + draw_line(zbuffer,x2,y2,z2,x3,y3,z3,color,tx2,ty2,tx3,ty3,opacity). + draw_line(zbuffer,x3,y3,z3,x0,y0,z0,color,tx3,ty3,tx0,ty0,opacity); + else + draw_line(x0,y0,z0,x1,y1,z1,color,tx0,ty0,tx1,ty1,opacity). + draw_line(x1,y1,z1,x2,y2,z2,color,tx1,ty1,tx2,ty2,opacity). + draw_line(x2,y2,z2,x3,y3,z3,color,tx2,ty2,tx3,ty3,opacity). + draw_line(x3,y3,z3,x0,y0,z0,color,tx3,ty3,tx0,ty0,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); + board.drawLine((float)x0,height() - (float)y0,(float)x1,height() - (float)y1); + board.drawLine((float)x1,height() - (float)y1,(float)x2,height() - (float)y2); + board.drawLine((float)x2,height() - (float)y2,(float)x3,height() - (float)y3); + board.drawLine((float)x3,height() - (float)y3,(float)x0,height() - (float)y0); + } +#endif + break; + case 2 : + if (zbuffer) + draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity). + draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity); + else + draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity). + draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x2,height() - (float)y2, + (float)x3,height() - (float)y3); + } +#endif + break; + case 3 : + if (zbuffer) + draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)). + draw_triangle(zbuffer,x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity,lightprops(l)); + else + draw_triangle(x0,y0,z0,x1,y1,z1,x2,y2,z2,color,tx0,ty0,tx1,ty1,tx2,ty2,opacity,lightprops(l)). + draw_triangle(x0,y0,z0,x2,y2,z2,x3,y3,z3,color,tx0,ty0,tx2,ty2,tx3,ty3,opacity,lightprops(l)); +#ifdef cimg_use_board + if (pboard) { + const float lp = std::min(lightprops(l),1); + board.setPenColorRGBi((unsigned char)(128*lp), + (unsigned char)(128*lp), + (unsigned char)(128*lp), + (unsigned char)(opacity*255)); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x2,height() - (float)y2, + (float)x3,height() - (float)y3); + } +#endif + break; + case 4 : { + const float + lightprop0 = lightprops(n0), lightprop1 = lightprops(n1), + lightprop2 = lightprops(n2), lightprop3 = lightprops(n3), + lightpropc = (lightprop0 + lightprop1 + lightprop2 + lightprop3)/4; + if (zbuffer) + draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,xc,yc,zc,color,tx0,ty0,tx1,ty1,txc,tyc, + lightprop0,lightprop1,lightpropc,opacity). + draw_triangle(zbuffer,x1,y1,z1,x2,y2,z2,xc,yc,zc,color,tx1,ty1,tx2,ty2,txc,tyc, + lightprop1,lightprop2,lightpropc,opacity). + draw_triangle(zbuffer,x2,y2,z2,x3,y3,z3,xc,yc,zc,color,tx2,ty2,tx3,ty3,txc,tyc, + lightprop2,lightprop3,lightpropc,opacity). + draw_triangle(zbuffer,x3,y3,z3,x0,y0,z0,xc,yc,zc,color,tx3,ty3,tx0,ty0,txc,tyc, + lightprop3,lightprop0,lightpropc,opacity); + else + draw_triangle(x0,y0,z0,x1,y1,z1,xc,yc,zc,color,tx0,ty0,tx1,ty1,txc,tyc, + lightprop0,lightprop1,lightpropc,opacity). + draw_triangle(x1,y1,z1,x2,y2,z2,xc,yc,zc,color,tx1,ty1,tx2,ty2,txc,tyc, + lightprop1,lightprop2,lightpropc,opacity). + draw_triangle(x2,y2,z2,x3,y3,z3,xc,yc,zc,color,tx2,ty2,tx3,ty3,txc,tyc, + lightprop2,lightprop3,lightpropc,opacity). + draw_triangle(x3,y3,z3,x0,y0,z0,xc,yc,zc,color,tx3,ty3,tx0,ty0,txc,tyc, + lightprop3,lightprop0,lightpropc,opacity); +#ifdef cimg_use_board + if (pboard) { + board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); + board.fillGouraudTriangle((float)x0,height() - (float)y0,lightprop0, + (float)x1,height() - (float)y1,lightprop1, + (float)x2,height() - (float)y2,lightprop2); + board.fillGouraudTriangle((float)x0,height() -(float)y0,lightprop0, + (float)x2,height() - (float)y2,lightprop2, + (float)x3,height() - (float)y3,lightprop3); + } +#endif + } break; + case 5 : { + const unsigned int + lx0 = (unsigned int)lightprops(n0,0), ly0 = (unsigned int)lightprops(n0,1), + lx1 = (unsigned int)lightprops(n1,0), ly1 = (unsigned int)lightprops(n1,1), + lx2 = (unsigned int)lightprops(n2,0), ly2 = (unsigned int)lightprops(n2,1), + lx3 = (unsigned int)lightprops(n3,0), ly3 = (unsigned int)lightprops(n3,1), + lxc = (lx0 + lx1 + lx2 + lx3)/4, lyc = (ly0 + ly1 + ly2 + ly3)/4; + if (zbuffer) + draw_triangle(zbuffer,x0,y0,z0,x1,y1,z1,xc,yc,zc,color,tx0,ty0,tx1,ty1,txc,tyc, + light_texture,lx0,ly0,lx1,ly1,lxc,lyc,opacity). + draw_triangle(zbuffer,x1,y1,z1,x2,y2,z2,xc,yc,zc,color,tx1,ty1,tx2,ty2,txc,tyc, + light_texture,lx1,ly1,lx2,ly2,lxc,lyc,opacity). + draw_triangle(zbuffer,x2,y2,z2,x3,y3,z3,xc,yc,zc,color,tx2,ty2,tx3,ty3,txc,tyc, + light_texture,lx2,ly2,lx3,ly3,lxc,lyc,opacity). + draw_triangle(zbuffer,x3,y3,z3,x0,y0,z0,xc,yc,zc,color,tx3,ty3,tx0,ty0,txc,tyc, + light_texture,lx3,ly3,lx0,ly0,lxc,lyc,opacity); + else + draw_triangle(x0,y0,z0,x1,y1,z1,xc,yc,zc,color,tx0,ty0,tx1,ty1,txc,tyc, + light_texture,lx0,ly0,lx1,ly1,lxc,lyc,opacity). + draw_triangle(x1,y1,z1,x2,y2,z2,xc,yc,zc,color,tx1,ty1,tx2,ty2,txc,tyc, + light_texture,lx1,ly1,lx2,ly2,lxc,lyc,opacity). + draw_triangle(x2,y2,z2,x3,y3,z3,xc,yc,zc,color,tx2,ty2,tx3,ty3,txc,tyc, + light_texture,lx2,ly2,lx3,ly3,lxc,lyc,opacity). + draw_triangle(x3,y3,z3,x0,y0,z0,xc,yc,zc,color,tx3,ty3,tx0,ty0,txc,tyc, + light_texture,lx3,ly3,lx0,ly0,lxc,lyc,opacity); +#ifdef cimg_use_board + if (pboard) { + const float + l0 = light_texture((int)(light_texture.width()/2*(1 + lx0)), (int)(light_texture.height()/2*(1 + ly0))), + l1 = light_texture((int)(light_texture.width()/2*(1 + lx1)), (int)(light_texture.height()/2*(1 + ly1))), + l2 = light_texture((int)(light_texture.width()/2*(1 + lx2)), (int)(light_texture.height()/2*(1 + ly2))), + l3 = light_texture((int)(light_texture.width()/2*(1 + lx3)), (int)(light_texture.height()/2*(1 + ly3))); + board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); + board.fillGouraudTriangle((float)x0,height() - (float)y0,l0, + (float)x1,height() - (float)y1,l1, + (float)x2,height() - (float)y2,l2); + board.fillGouraudTriangle((float)x0,height() -(float)y0,l0, + (float)x2,height() - (float)y2,l2, + (float)x3,height() - (float)y3,l3); + } +#endif + } break; + } + } break; + } + } + if (render_type==5) cimg::mutex(10,0); + return *this; + } + + //@} + //--------------------------- + // + //! \name Data Input + //@{ + //--------------------------- + + //! Launch simple interface to select a shape from an image. + /** + \param disp Display window to use. + \param feature_type Type of feature to select. Can be { 0=point | 1=line | 2=rectangle | 3=ellipse }. + \param XYZ Pointer to 3 values X,Y,Z which tells about the projection point coordinates, for volumetric images. + \param exit_on_anykey Exit function when any key is pressed. + **/ + CImg& select(CImgDisplay &disp, + const unsigned int feature_type=2, unsigned int *const XYZ=0, + const bool exit_on_anykey=false, + const bool is_deep_selection_default=false) { + return get_select(disp,feature_type,XYZ,exit_on_anykey,is_deep_selection_default).move_to(*this); + } + + //! Simple interface to select a shape from an image \overloading. + CImg& select(const char *const title, + const unsigned int feature_type=2, unsigned int *const XYZ=0, + const bool exit_on_anykey=false, + const bool is_deep_selection_default=false) { + return get_select(title,feature_type,XYZ,exit_on_anykey,is_deep_selection_default).move_to(*this); + } + + //! Simple interface to select a shape from an image \newinstance. + CImg get_select(CImgDisplay &disp, + const unsigned int feature_type=2, unsigned int *const XYZ=0, + const bool exit_on_anykey=false, + const bool is_deep_selection_default=false) const { + return _select(disp,0,feature_type,XYZ,0,0,0,exit_on_anykey,true,false,is_deep_selection_default); + } + + //! Simple interface to select a shape from an image \newinstance. + CImg get_select(const char *const title, + const unsigned int feature_type=2, unsigned int *const XYZ=0, + const bool exit_on_anykey=false, + const bool is_deep_selection_default=false) const { + CImgDisplay disp; + return _select(disp,title,feature_type,XYZ,0,0,0,exit_on_anykey,true,false,is_deep_selection_default); + } + + CImg _select(CImgDisplay &disp, const char *const title, + const unsigned int feature_type, unsigned int *const XYZ, + const int origX, const int origY, const int origZ, + const bool exit_on_anykey, + const bool reset_view3d, + const bool force_display_z_coord, + const bool is_deep_selection_default) const { + if (is_empty()) return CImg(1,feature_type==0?3:6,1,1,-1); + if (!disp) { + disp.assign(cimg_fitscreen(_width,_height,_depth),title?title:0,1); + if (!title) disp.set_title("CImg<%s> (%ux%ux%ux%u)",pixel_type(),_width,_height,_depth,_spectrum); + } else if (title) disp.set_title("%s",title); + + CImg thumb; + if (width()>disp.screen_width() || height()>disp.screen_height()) + get_resize(cimg_fitscreen(width(),height(),depth()),depth(),-100).move_to(thumb); + + const unsigned int old_normalization = disp.normalization(); + bool old_is_resized = disp.is_resized(); + disp._normalization = 0; + disp.show().set_key(0).set_wheel().show_mouse(); + + static const unsigned char foreground_color[] = { 255,255,255 }, background_color[] = { 0,0,0 }; + + int area = 0, area_started = 0, area_clicked = 0, phase = 0, + X0 = (int)((XYZ?XYZ[0]:(_width - 1)/2)%_width), + Y0 = (int)((XYZ?XYZ[1]:(_height - 1)/2)%_height), + Z0 = (int)((XYZ?XYZ[2]:(_depth - 1)/2)%_depth), + X1 =-1, Y1 = -1, Z1 = -1, + X3d = -1, Y3d = -1, + oX3d = X3d, oY3d = -1, + omx = -1, omy = -1; + float X = -1, Y = -1, Z = -1; + unsigned int key = 0; + + bool is_deep_selection = is_deep_selection_default, + shape_selected = false, text_down = false, visible_cursor = true; + static CImg pose3d; + static bool is_view3d = false, is_axes = true; + if (reset_view3d) { pose3d.assign(); is_view3d = false; } + CImg points3d, opacities3d, sel_opacities3d; + CImgList primitives3d, sel_primitives3d; + CImgList colors3d, sel_colors3d; + CImg visu, visu0, view3d; + CImg text(1024); *text = 0; + + while (!key && !disp.is_closed() && !shape_selected) { + + // Handle mouse motion and selection + int + mx = disp.mouse_x(), + my = disp.mouse_y(); + + const float + mX = mx<0?-1.0f:(float)mx*(width() + (depth()>1?depth():0))/disp.width(), + mY = my<0?-1.0f:(float)my*(height() + (depth()>1?depth():0))/disp.height(); + + area = 0; + if (mX>=0 && mY>=0 && mX=0 && mX=height()) { area = 2; X = mX; Z = mY - _height; Y = (float)(phase?Y1:Y0); } + if (mY>=0 && mX>=width() && mY=width() && mY>=height()) area = 4; + if (disp.button()) { if (!area_clicked) area_clicked = area; } else area_clicked = 0; + + CImg filename(32); + + switch (key = disp.key()) { +#if cimg_OS!=2 + case cimg::keyCTRLRIGHT : +#endif + case 0 : case cimg::keyCTRLLEFT : key = 0; break; + case cimg::keyPAGEUP : + if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { disp.set_wheel(1); key = 0; } break; + case cimg::keyPAGEDOWN : + if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { disp.set_wheel(-1); key = 0; } break; + case cimg::keyA : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + is_axes = !is_axes; disp.set_key(key,false); key = 0; visu0.assign(); + } break; + case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false). + resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), + CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). + _is_resized = true; + disp.set_key(key,false); key = 0; visu0.assign(); + } break; + case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false). + resize(cimg_fitscreen(2*disp.width()/3,2*disp.height()/3,1),false)._is_resized = true; + disp.set_key(key,false); key = 0; visu0.assign(); + } break; + case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false).resize(cimg_fitscreen(_width,_height,_depth),false)._is_resized = true; + disp.set_key(key,false); key = 0; visu0.assign(); + } break; + case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen()._is_resized = true; + disp.set_key(key,false); key = 0; visu0.assign(); + } break; + case cimg::keyV : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + is_view3d = !is_view3d; disp.set_key(key,false); key = 0; visu0.assign(); + } break; + case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + static unsigned int snap_number = 0; + std::FILE *file; + do { + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.bmp",snap_number++); + if ((file=std_fopen(filename,"r"))!=0) cimg::fclose(file); + } while (file); + if (visu0) { + (+visu0).draw_text(0,0," Saving snapshot... ",foreground_color,background_color,0.7f,13).display(disp); + visu0.save(filename); + (+visu0).draw_text(0,0," Snapshot '%s' saved. ",foreground_color,background_color,0.7f,13,filename._data). + display(disp); + } + disp.set_key(key,false); key = 0; + } break; + case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + static unsigned int snap_number = 0; + std::FILE *file; + do { +#ifdef cimg_use_zlib + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimgz",snap_number++); +#else + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimg",snap_number++); +#endif + if ((file=std_fopen(filename,"r"))!=0) cimg::fclose(file); + } while (file); + (+visu0).draw_text(0,0," Saving instance... ",foreground_color,background_color,0.7f,13).display(disp); + save(filename); + (+visu0).draw_text(0,0," Instance '%s' saved. ",foreground_color,background_color,0.7f,13,filename._data). + display(disp); + disp.set_key(key,false); key = 0; + } break; + } + + switch (area) { + + case 0 : // When mouse is out of image range. + mx = my = -1; X = Y = Z = -1; + break; + + case 1 : case 2 : case 3 : { // When mouse is over the XY,XZ or YZ projections. + const unsigned int but = disp.button(); + const bool b1 = (bool)(but&1), b2 = (bool)(but&2), b3 = (bool)(but&4); + + if (b1 && phase==1 && area_clicked==area) { // When selection has been started (1st step). + if (_depth>1 && (X1!=(int)X || Y1!=(int)Y || Z1!=(int)Z)) visu0.assign(); + X1 = (int)X; Y1 = (int)Y; Z1 = (int)Z; + } + if (!b1 && phase==2 && area_clicked!=area) { // When selection is at 2nd step (for volumes). + switch (area_started) { + case 1 : if (Z1!=(int)Z) visu0.assign(); Z1 = (int)Z; break; + case 2 : if (Y1!=(int)Y) visu0.assign(); Y1 = (int)Y; break; + case 3 : if (X1!=(int)X) visu0.assign(); X1 = (int)X; break; + } + } + if (b2 && area_clicked==area) { // When moving through the image/volume. + if (phase) { + if (_depth>1 && (X1!=(int)X || Y1!=(int)Y || Z1!=(int)Z)) visu0.assign(); + X1 = (int)X; Y1 = (int)Y; Z1 = (int)Z; + } else { + if (_depth>1 && (X0!=(int)X || Y0!=(int)Y || Z0!=(int)Z)) visu0.assign(); + X0 = (int)X; Y0 = (int)Y; Z0 = (int)Z; + } + } + if (b3) { // Reset selection + X = (float)X0; Y = (float)Y0; Z = (float)Z0; phase = area = area_clicked = area_started = 0; + visu0.assign(); + } + if (disp.wheel()) { // When moving through the slices of the volume (with mouse wheel). + if (_depth>1 && !disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT() && + !disp.is_keySHIFTLEFT() && !disp.is_keySHIFTRIGHT()) { + switch (area) { + case 1 : + if (phase) Z = (float)(Z1+=disp.wheel()); else Z = (float)(Z0+=disp.wheel()); + visu0.assign(); break; + case 2 : + if (phase) Y = (float)(Y1+=disp.wheel()); else Y = (float)(Y0+=disp.wheel()); + visu0.assign(); break; + case 3 : + if (phase) X = (float)(X1+=disp.wheel()); else X = (float)(X0+=disp.wheel()); + visu0.assign(); break; + } + disp.set_wheel(); + } else key = ~0U; + } + + if ((phase==0 && b1) || + (phase==1 && !b1) || + (phase==2 && b1)) switch (phase) { // Detect change of phase + case 0 : + if (area==area_clicked) { + X0 = X1 = (int)X; Y0 = Y1 = (int)Y; Z0 = Z1 = (int)Z; area_started = area; ++phase; + } break; + case 1 : + if (area==area_started) { + X1 = (int)X; Y1 = (int)Y; Z1 = (int)Z; ++phase; + if (_depth>1) { + if (disp.is_keyCTRLLEFT()) is_deep_selection = !is_deep_selection_default; + if (is_deep_selection) ++phase; + } + } else if (!b1) { X = (float)X0; Y = (float)Y0; Z = (float)Z0; phase = 0; visu0.assign(); } + break; + case 2 : ++phase; break; + } + } break; + + case 4 : // When mouse is over the 3d view. + if (is_view3d && points3d) { + X3d = mx - width()*disp.width()/(width() + (depth()>1?depth():0)); + Y3d = my - height()*disp.height()/(height() + (depth()>1?depth():0)); + if (oX3d<0) { oX3d = X3d; oY3d = Y3d; } + // Left + right buttons: reset. + if ((disp.button()&3)==3) { pose3d.assign(); view3d.assign(); oX3d = oY3d = X3d = Y3d = -1; } + else if (disp.button()&1 && pose3d && (oX3d!=X3d || oY3d!=Y3d)) { // Left button: rotate. + const float + R = 0.45f*std::min(view3d._width,view3d._height), + R2 = R*R, + u0 = (float)(oX3d - view3d.width()/2), + v0 = (float)(oY3d - view3d.height()/2), + u1 = (float)(X3d - view3d.width()/2), + v1 = (float)(Y3d - view3d.height()/2), + n0 = cimg::hypot(u0,v0), + n1 = cimg::hypot(u1,v1), + nu0 = n0>R?(u0*R/n0):u0, + nv0 = n0>R?(v0*R/n0):v0, + nw0 = (float)std::sqrt(std::max(0.0f,R2 - nu0*nu0 - nv0*nv0)), + nu1 = n1>R?(u1*R/n1):u1, + nv1 = n1>R?(v1*R/n1):v1, + nw1 = (float)std::sqrt(std::max(0.0f,R2 - nu1*nu1 - nv1*nv1)), + u = nv0*nw1 - nw0*nv1, + v = nw0*nu1 - nu0*nw1, + w = nv0*nu1 - nu0*nv1, + n = cimg::hypot(u,v,w), + alpha = (float)std::asin(n/R2)*180/cimg::PI; + pose3d.draw_image(CImg::rotation_matrix(u,v,w,-alpha)*pose3d.get_crop(0,0,2,2)); + view3d.assign(); + } else if (disp.button()&2 && pose3d && oY3d!=Y3d) { // Right button: zoom. + pose3d(3,2)+=(Y3d - oY3d)*1.5f; view3d.assign(); + } + if (disp.wheel()) { // Wheel: zoom + pose3d(3,2)-=disp.wheel()*15; view3d.assign(); disp.set_wheel(); + } + if (disp.button()&4 && pose3d && (oX3d!=X3d || oY3d!=Y3d)) { // Middle button: shift. + pose3d(3,0)-=oX3d - X3d; pose3d(3,1)-=oY3d - Y3d; view3d.assign(); + } + oX3d = X3d; oY3d = Y3d; + } + mx = my = -1; X = Y = Z = -1; + break; + } + + if (phase) { + if (!feature_type) shape_selected = phase?true:false; + else { + if (_depth>1) shape_selected = (phase==3)?true:false; + else shape_selected = (phase==2)?true:false; + } + } + + if (X0<0) X0 = 0; + if (X0>=width()) X0 = width() - 1; + if (Y0<0) Y0 = 0; + if (Y0>=height()) Y0 = height() - 1; + if (Z0<0) Z0 = 0; + if (Z0>=depth()) Z0 = depth() - 1; + if (X1<1) X1 = 0; + if (X1>=width()) X1 = width() - 1; + if (Y1<0) Y1 = 0; + if (Y1>=height()) Y1 = height() - 1; + if (Z1<0) Z1 = 0; + if (Z1>=depth()) Z1 = depth() - 1; + + // Draw visualization image on the display + if (mx!=omx || my!=omy || !visu0 || (_depth>1 && !view3d)) { + + if (!visu0) { // Create image of projected planes. + if (thumb) thumb.__get_select(disp,old_normalization,phase?X1:X0,phase?Y1:Y0,phase?Z1:Z0).move_to(visu0); + else __get_select(disp,old_normalization,phase?X1:X0,phase?Y1:Y0,phase?Z1:Z0).move_to(visu0); + visu0.resize(disp); + view3d.assign(); + points3d.assign(); + } + + if (is_view3d && _depth>1 && !view3d) { // Create 3d view for volumetric images. + const unsigned int + _x3d = (unsigned int)cimg::round((float)_width*visu0._width/(_width + _depth),1,1), + _y3d = (unsigned int)cimg::round((float)_height*visu0._height/(_height + _depth),1,1), + x3d = _x3d>=visu0._width?visu0._width - 1:_x3d, + y3d = _y3d>=visu0._height?visu0._height - 1:_y3d; + CImg(1,2,1,1,64,128).resize(visu0._width - x3d,visu0._height - y3d,1,visu0._spectrum,3). + move_to(view3d); + if (!points3d) { + get_projections3d(primitives3d,colors3d,phase?X1:X0,phase?Y1:Y0,phase?Z1:Z0,true).move_to(points3d); + points3d.append(CImg(8,3,1,1, + 0,_width - 1,_width - 1,0,0,_width - 1,_width - 1,0, + 0,0,_height - 1,_height - 1,0,0,_height - 1,_height - 1, + 0,0,0,0,_depth - 1,_depth - 1,_depth - 1,_depth - 1),'x'); + CImg::vector(12,13).move_to(primitives3d); CImg::vector(13,14).move_to(primitives3d); + CImg::vector(14,15).move_to(primitives3d); CImg::vector(15,12).move_to(primitives3d); + CImg::vector(16,17).move_to(primitives3d); CImg::vector(17,18).move_to(primitives3d); + CImg::vector(18,19).move_to(primitives3d); CImg::vector(19,16).move_to(primitives3d); + CImg::vector(12,16).move_to(primitives3d); CImg::vector(13,17).move_to(primitives3d); + CImg::vector(14,18).move_to(primitives3d); CImg::vector(15,19).move_to(primitives3d); + colors3d.insert(12,CImg::vector(255,255,255)); + opacities3d.assign(primitives3d.width(),1,1,1,0.5f); + if (!phase) { + opacities3d[0] = opacities3d[1] = opacities3d[2] = 0.8f; + sel_primitives3d.assign(); + sel_colors3d.assign(); + sel_opacities3d.assign(); + } else { + if (feature_type==2) { + points3d.append(CImg(8,3,1,1, + X0,X1,X1,X0,X0,X1,X1,X0, + Y0,Y0,Y1,Y1,Y0,Y0,Y1,Y1, + Z0,Z0,Z0,Z0,Z1,Z1,Z1,Z1),'x'); + sel_primitives3d.assign(); + CImg::vector(20,21).move_to(sel_primitives3d); + CImg::vector(21,22).move_to(sel_primitives3d); + CImg::vector(22,23).move_to(sel_primitives3d); + CImg::vector(23,20).move_to(sel_primitives3d); + CImg::vector(24,25).move_to(sel_primitives3d); + CImg::vector(25,26).move_to(sel_primitives3d); + CImg::vector(26,27).move_to(sel_primitives3d); + CImg::vector(27,24).move_to(sel_primitives3d); + CImg::vector(20,24).move_to(sel_primitives3d); + CImg::vector(21,25).move_to(sel_primitives3d); + CImg::vector(22,26).move_to(sel_primitives3d); + CImg::vector(23,27).move_to(sel_primitives3d); + } else { + points3d.append(CImg(2,3,1,1, + X0,X1, + Y0,Y1, + Z0,Z1),'x'); + sel_primitives3d.assign(CImg::vector(20,21)); + } + sel_colors3d.assign(sel_primitives3d._width,CImg::vector(255,255,255)); + sel_opacities3d.assign(sel_primitives3d._width,1,1,1,0.8f); + } + points3d.shift_object3d(-0.5f*(_width - 1),-0.5f*(_height - 1),-0.5f*(_depth - 1)).resize_object3d(); + points3d*=0.75f*std::min(view3d._width,view3d._height); + } + + if (!pose3d) CImg(4,3,1,1, 1,0,0,0, 0,1,0,0, 0,0,1,0).move_to(pose3d); + CImg zbuffer3d(view3d._width,view3d._height,1,1,0); + const CImg rotated_points3d = pose3d.get_crop(0,0,2,2)*points3d; + if (sel_primitives3d) + view3d.draw_object3d(pose3d(3,0) + 0.5f*view3d._width, + pose3d(3,1) + 0.5f*view3d._height, + pose3d(3,2), + rotated_points3d,sel_primitives3d,sel_colors3d,sel_opacities3d, + 2,true,500,0,0,0,0,0,zbuffer3d); + view3d.draw_object3d(pose3d(3,0) + 0.5f*view3d._width, + pose3d(3,1) + 0.5f*view3d._height, + pose3d(3,2), + rotated_points3d,primitives3d,colors3d,opacities3d, + 2,true,500,0,0,0,0,0,zbuffer3d); + visu0.draw_image(x3d,y3d,view3d); + } + visu = visu0; + + if (X<0 || Y<0 || Z<0) { if (!visible_cursor) { disp.show_mouse(); visible_cursor = true; }} + else { + if (is_axes) { if (visible_cursor) { disp.hide_mouse(); visible_cursor = false; }} + else { if (!visible_cursor) { disp.show_mouse(); visible_cursor = true; }} + const int d = (depth()>1)?depth():0; + int _vX = (int)X, _vY = (int)Y, _vZ = (int)Z; + if (phase>=2) { _vX = X1; _vY = Y1; _vZ = Z1; } + int + w = disp.width(), W = width() + d, + h = disp.height(), H = height() + d, + _xp = (int)(_vX*(float)w/W), xp = _xp + ((int)(_xp*(float)W/w)!=_vX), + _yp = (int)(_vY*(float)h/H), yp = _yp + ((int)(_yp*(float)H/h)!=_vY), + _xn = (int)((_vX + 1.0f)*w/W - 1), xn = _xn + ((int)((_xn + 1.0f)*W/w)!=_vX + 1), + _yn = (int)((_vY + 1.0f)*h/H - 1), yn = _yn + ((int)((_yn + 1.0f)*H/h)!=_vY + 1), + _zxp = (int)((_vZ + width())*(float)w/W), zxp = _zxp + ((int)(_zxp*(float)W/w)!=_vZ + width()), + _zyp = (int)((_vZ + height())*(float)h/H), zyp = _zyp + ((int)(_zyp*(float)H/h)!=_vZ + height()), + _zxn = (int)((_vZ + width() + 1.0f)*w/W - 1), + zxn = _zxn + ((int)((_zxn + 1.0f)*W/w)!=_vZ + width() + 1), + _zyn = (int)((_vZ + height() + 1.0f)*h/H - 1), + zyn = _zyn + ((int)((_zyn + 1.0f)*H/h)!=_vZ + height() + 1), + _xM = (int)(width()*(float)w/W - 1), xM = _xM + ((int)((_xM + 1.0f)*W/w)!=width()), + _yM = (int)(height()*(float)h/H - 1), yM = _yM + ((int)((_yM + 1.0f)*H/h)!=height()), + xc = (xp + xn)/2, + yc = (yp + yn)/2, + zxc = (zxp + zxn)/2, + zyc = (zyp + zyn)/2, + xf = (int)(X*w/W), + yf = (int)(Y*h/H), + zxf = (int)((Z + width())*w/W), + zyf = (int)((Z + height())*h/H); + + if (is_axes) { // Draw axes. + visu.draw_line(0,yf,visu.width() - 1,yf,foreground_color,0.7f,0xFF00FF00). + draw_line(0,yf,visu.width() - 1,yf,background_color,0.7f,0x00FF00FF). + draw_line(xf,0,xf,visu.height() - 1,foreground_color,0.7f,0xFF00FF00). + draw_line(xf,0,xf,visu.height() - 1,background_color,0.7f,0x00FF00FF); + if (_depth>1) + visu.draw_line(zxf,0,zxf,yM,foreground_color,0.7f,0xFF00FF00). + draw_line(zxf,0,zxf,yM,background_color,0.7f,0x00FF00FF). + draw_line(0,zyf,xM,zyf,foreground_color,0.7f,0xFF00FF00). + draw_line(0,zyf,xM,zyf,background_color,0.7f,0x00FF00FF); + } + + // Draw box cursor. + if (xn - xp>=4 && yn - yp>=4) + visu.draw_rectangle(xp,yp,xn,yn,foreground_color,0.2f). + draw_rectangle(xp,yp,xn,yn,foreground_color,1,0xAAAAAAAA). + draw_rectangle(xp,yp,xn,yn,background_color,1,0x55555555); + if (_depth>1) { + if (yn - yp>=4 && zxn - zxp>=4) + visu.draw_rectangle(zxp,yp,zxn,yn,background_color,0.2f). + draw_rectangle(zxp,yp,zxn,yn,foreground_color,1,0xAAAAAAAA). + draw_rectangle(zxp,yp,zxn,yn,background_color,1,0x55555555); + if (xn - xp>=4 && zyn - zyp>=4) + visu.draw_rectangle(xp,zyp,xn,zyn,background_color,0.2f). + draw_rectangle(xp,zyp,xn,zyn,foreground_color,1,0xAAAAAAAA). + draw_rectangle(xp,zyp,xn,zyn,background_color,1,0x55555555); + } + + // Draw selection. + if (phase && (phase!=1 || area_started==area)) { + const int + _xp0 = (int)(X0*(float)w/W), xp0 = _xp0 + ((int)(_xp0*(float)W/w)!=X0), + _yp0 = (int)(Y0*(float)h/H), yp0 = _yp0 + ((int)(_yp0*(float)H/h)!=Y0), + _xn0 = (int)((X0 + 1.0f)*w/W - 1), xn0 = _xn0 + ((int)((_xn0 + 1.0f)*W/w)!=X0 + 1), + _yn0 = (int)((Y0 + 1.0f)*h/H - 1), yn0 = _yn0 + ((int)((_yn0 + 1.0f)*H/h)!=Y0 + 1), + _zxp0 = (int)((Z0 + width())*(float)w/W), zxp0 = _zxp0 + ((int)(_zxp0*(float)W/w)!=Z0 + width()), + _zyp0 = (int)((Z0 + height())*(float)h/H), zyp0 = _zyp0 + ((int)(_zyp0*(float)H/h)!=Z0 + height()), + _zxn0 = (int)((Z0 + width() + 1.0f)*w/W - 1), + zxn0 = _zxn0 + ((int)((_zxn0 + 1.0f)*W/w)!=Z0 + width() + 1), + _zyn0 = (int)((Z0 + height() + 1.0f)*h/H - 1), + zyn0 = _zyn0 + ((int)((_zyn0 + 1.0f)*H/h)!=Z0 + height() + 1), + xc0 = (xp0 + xn0)/2, + yc0 = (yp0 + yn0)/2, + zxc0 = (zxp0 + zxn0)/2, + zyc0 = (zyp0 + zyn0)/2; + + switch (feature_type) { + case 1 : { + visu.draw_arrow(xc0,yc0,xc,yc,background_color,0.9f,30,5,0x55555555). + draw_arrow(xc0,yc0,xc,yc,foreground_color,0.9f,30,5,0xAAAAAAAA); + if (d) { + visu.draw_arrow(zxc0,yc0,zxc,yc,background_color,0.9f,30,5,0x55555555). + draw_arrow(zxc0,yc0,zxc,yc,foreground_color,0.9f,30,5,0xAAAAAAAA). + draw_arrow(xc0,zyc0,xc,zyc,background_color,0.9f,30,5,0x55555555). + draw_arrow(xc0,zyc0,xc,zyc,foreground_color,0.9f,30,5,0xAAAAAAAA); + } + } break; + case 2 : { + visu.draw_rectangle(X0=0 && my<13) text_down = true; else if (my>=visu.height() - 13) text_down = false; + if (!feature_type || !phase) { + if (X>=0 && Y>=0 && Z>=0 && X1 || force_display_z_coord) + cimg_snprintf(text,text._width," Point (%d,%d,%d) = [ ",origX + (int)X,origY + (int)Y,origZ + (int)Z); + else cimg_snprintf(text,text._width," Point (%d,%d) = [ ",origX + (int)X,origY + (int)Y); + CImg values = get_vector_at((int)X,(int)Y,(int)Z); + const bool is_large_spectrum = values._height>16; + if (is_large_spectrum) + values.draw_image(0,8,values.get_rows(values._height - 8,values._height - 1)).resize(1,16,1,1,0); + char *ctext = text._data + std::strlen(text), *const ltext = text._data + 512; + for (unsigned int c = 0; c::format_s(), + cimg::type::format(values[c])); + ctext += std::strlen(ctext); + if (c==7 && is_large_spectrum) { + cimg_snprintf(ctext,24," (...)"); + ctext += std::strlen(ctext); + } + *(ctext++) = ' '; *ctext = 0; + } + std::strcpy(text._data + std::strlen(text),"] "); + } + } else switch (feature_type) { + case 1 : { + const double dX = (double)(X0 - X1), dY = (double)(Y0 - Y1), dZ = (double)(Z0 - Z1), + length = cimg::round(cimg::hypot(dX,dY,dZ),0.1); + if (_depth>1 || force_display_z_coord) + cimg_snprintf(text,text._width," Vect (%d,%d,%d)-(%d,%d,%d), Length = %g ", + origX + X0,origY + Y0,origZ + Z0,origX + X1,origY + Y1,origZ + Z1,length); + else cimg_snprintf(text,text._width," Vect (%d,%d)-(%d,%d), Length = %g, Angle = %g\260 ", + origX + X0,origY + Y0,origX + X1,origY + Y1,length, + cimg::round(cimg::mod(180*std::atan2(-dY,-dX)/cimg::PI,360.),0.1)); + } break; + case 2 : { + const double dX = (double)(X0 - X1), dY = (double)(Y0 - Y1), dZ = (double)(Z0 - Z1), + length = cimg::round(cimg::hypot(dX,dY,dZ),0.1); + if (_depth>1 || force_display_z_coord) + cimg_snprintf(text,text._width, + " Box (%d,%d,%d)-(%d,%d,%d), Size = (%d,%d,%d), Length = %g ", + origX + (X01 || force_display_z_coord) + cimg_snprintf(text,text._width," Ellipse (%d,%d,%d)-(%d,%d,%d), Radii = (%d,%d,%d) ", + origX + X0,origY + Y0,origZ + Z0,origX + X1,origY + Y1,origZ + Z1, + 1 + cimg::abs(X0 - X1),1 + cimg::abs(Y0 - Y1),1 + cimg::abs(Z0 - Z1)); + else cimg_snprintf(text,text._width," Ellipse (%d,%d)-(%d,%d), Radii = (%d,%d) ", + origX + X0,origY + Y0,origX + X1,origY + Y1, + 1 + cimg::abs(X0 - X1),1 + cimg::abs(Y0 - Y1)); + } + if (phase || (mx>=0 && my>=0)) + visu.draw_text(0,text_down?visu.height() - 13:0,text,foreground_color,background_color,0.7f,13); + } + + disp.display(visu); + } + if (!shape_selected) disp.wait(); + if (disp.is_resized()) { disp.resize(false)._is_resized = false; old_is_resized = true; visu0.assign(); } + omx = mx; omy = my; + if (!exit_on_anykey && key && key!=cimg::keyESC && + (key!=cimg::keyW || (!disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT()))) { + key = 0; + } + } + + // Return result. + CImg res(1,feature_type==0?3:6,1,1,-1); + if (XYZ) { XYZ[0] = (unsigned int)X0; XYZ[1] = (unsigned int)Y0; XYZ[2] = (unsigned int)Z0; } + if (shape_selected) { + if (feature_type==2) { + if (is_deep_selection) switch (area_started) { + case 1 : Z0 = 0; Z1 = _depth - 1; break; + case 2 : Y0 = 0; Y1 = _height - 1; break; + case 3 : X0 = 0; X1 = _width - 1; break; + } + if (X0>X1) cimg::swap(X0,X1); + if (Y0>Y1) cimg::swap(Y0,Y1); + if (Z0>Z1) cimg::swap(Z0,Z1); + } + if (X1<0 || Y1<0 || Z1<0) X0 = Y0 = Z0 = X1 = Y1 = Z1 = -1; + switch (feature_type) { + case 1 : case 2 : res[0] = X0; res[1] = Y0; res[2] = Z0; res[3] = X1; res[4] = Y1; res[5] = Z1; break; + case 3 : + res[3] = cimg::abs(X1 - X0); res[4] = cimg::abs(Y1 - Y0); res[5] = cimg::abs(Z1 - Z0); + res[0] = X0; res[1] = Y0; res[2] = Z0; + break; + default : res[0] = X0; res[1] = Y0; res[2] = Z0; + } + } + if (!exit_on_anykey || !(disp.button()&4)) disp.set_button(); + if (!visible_cursor) disp.show_mouse(); + disp._normalization = old_normalization; + disp._is_resized = old_is_resized; + if (key!=~0U) disp.set_key(key); + return res; + } + + // Return a visualizable uchar8 image for display routines. + CImg __get_select(const CImgDisplay& disp, const int normalization, + const int x, const int y, const int z) const { + if (is_empty()) return CImg(1,1,1,1,0); + const CImg crop = get_shared_channels(0,std::min(2,spectrum() - 1)); + CImg img2d; + if (_depth>1) { + const int mdisp = std::min(disp.screen_width(),disp.screen_height()); + if (depth()>mdisp) { + crop.get_resize(-100,-100,mdisp,-100,0).move_to(img2d); + img2d.projections2d(x,y,z*img2d._depth/_depth); + } else crop.get_projections2d(x,y,z).move_to(img2d); + } else CImg(crop,false).move_to(img2d); + + // Check for inf and NaN values. + if (cimg::type::is_float() && normalization) { + bool is_inf = false, is_nan = false; + cimg_for(img2d,ptr,Tuchar) + if (cimg::type::is_inf(*ptr)) { is_inf = true; break; } + else if (cimg::type::is_nan(*ptr)) { is_nan = true; break; } + if (is_inf || is_nan) { + Tint m0 = (Tint)cimg::type::max(), M0 = (Tint)cimg::type::min(); + if (!normalization) { m0 = 0; M0 = 255; } + else if (normalization==2) { m0 = (Tint)disp._min; M0 = (Tint)disp._max; } + else + cimg_for(img2d,ptr,Tuchar) + if (!cimg::type::is_inf(*ptr) && !cimg::type::is_nan(*ptr)) { + if (*ptr<(Tuchar)m0) m0 = *ptr; + if (*ptr>(Tuchar)M0) M0 = *ptr; + } + const T + val_minf = (T)(normalization==1 || normalization==3?m0 - (M0 - m0)*20 - 1:m0), + val_pinf = (T)(normalization==1 || normalization==3?M0 + (M0 - m0)*20 + 1:M0); + if (is_nan) + cimg_for(img2d,ptr,Tuchar) + if (cimg::type::is_nan(*ptr)) *ptr = val_minf; // Replace NaN values. + if (is_inf) + cimg_for(img2d,ptr,Tuchar) + if (cimg::type::is_inf(*ptr)) *ptr = (float)*ptr<0?val_minf:val_pinf; // Replace +-inf values. + } + } + + switch (normalization) { + case 1 : img2d.normalize((ucharT)0,(ucharT)255); break; + case 2 : { + const float m = disp._min, M = disp._max; + (img2d-=m)*=255.0f/(M - m>0?M - m:1); + } break; + case 3 : + if (cimg::type::is_float()) img2d.normalize((ucharT)0,(ucharT)255); + else { + const float m = (float)cimg::type::min(), M = (float)cimg::type::max(); + (img2d-=m)*=255.0f/(M - m>0?M - m:1); + } break; + } + if (img2d.spectrum()==2) img2d.channels(0,2); + return img2d; + } + + //! Select sub-graph in a graph. + CImg get_select_graph(CImgDisplay &disp, + const unsigned int plot_type=1, const unsigned int vertex_type=1, + const char *const labelx=0, const double xmin=0, const double xmax=0, + const char *const labely=0, const double ymin=0, const double ymax=0, + const bool exit_on_anykey=false) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "select_graph(): Empty instance.", + cimg_instance); + if (!disp) disp.assign(cimg_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1),0,0). + set_title("CImg<%s>",pixel_type()); + const ulongT siz = (ulongT)_width*_height*_depth; + const unsigned int old_normalization = disp.normalization(); + disp.show().set_button().set_wheel()._normalization = 0; + + double nymin = ymin, nymax = ymax, nxmin = xmin, nxmax = xmax; + if (nymin==nymax) { nymin = (Tfloat)min_max(nymax); const double dy = nymax - nymin; nymin-=dy/20; nymax+=dy/20; } + if (nymin==nymax) { --nymin; ++nymax; } + if (nxmin==nxmax && nxmin==0) { nxmin = 0; nxmax = siz - 1.0; } + + static const unsigned char black[] = { 0, 0, 0 }, white[] = { 255, 255, 255 }, gray[] = { 220, 220, 220 }; + static const unsigned char gray2[] = { 110, 110, 110 }, ngray[] = { 35, 35, 35 }; + static unsigned int odimv = 0; + static CImg colormap; + if (odimv!=_spectrum) { + odimv = _spectrum; + colormap = CImg(3,_spectrum,1,1,120).noise(70,1); + if (_spectrum==1) { colormap[0] = colormap[1] = 120; colormap[2] = 200; } + else { + colormap(0,0) = 220; colormap(1,0) = 10; colormap(2,0) = 10; + if (_spectrum>1) { colormap(0,1) = 10; colormap(1,1) = 220; colormap(2,1) = 10; } + if (_spectrum>2) { colormap(0,2) = 10; colormap(1,2) = 10; colormap(2,2) = 220; } + } + } + + CImg visu0, visu, graph, text, axes; + int x0 = -1, x1 = -1, y0 = -1, y1 = -1, omouse_x = -2, omouse_y = -2; + const unsigned int one = plot_type==3?0U:1U; + unsigned int okey = 0, obutton = 0; + CImg message(1024); + CImg_3x3(I,unsigned char); + + for (bool selected = false; !selected && !disp.is_closed() && !okey && !disp.wheel(); ) { + const int mouse_x = disp.mouse_x(), mouse_y = disp.mouse_y(); + const unsigned int key = disp.key(), button = disp.button(); + + // Generate graph representation. + if (!visu0) { + visu0.assign(disp.width(),disp.height(),1,3,220); + const int gdimx = disp.width() - 32, gdimy = disp.height() - 32; + if (gdimx>0 && gdimy>0) { + graph.assign(gdimx,gdimy,1,3,255); + if (siz<32) { + if (siz>1) graph.draw_grid(gdimx/(float)(siz - one),gdimy/(float)(siz - one),0,0, + false,true,black,0.2f,0x33333333,0x33333333); + } else graph.draw_grid(-10,-10,0,0,false,true,black,0.2f,0x33333333,0x33333333); + cimg_forC(*this,c) + graph.draw_graph(get_shared_channel(c),&colormap(0,c),(plot_type!=3 || _spectrum==1)?1:0.6f, + plot_type,vertex_type,nymax,nymin); + + axes.assign(gdimx,gdimy,1,1,0); + const float + dx = (float)cimg::abs(nxmax - nxmin), dy = (float)cimg::abs(nymax - nymin), + px = (float)std::pow(10.0,(int)std::log10(dx?dx:1) - 2.0), + py = (float)std::pow(10.0,(int)std::log10(dy?dy:1) - 2.0); + const CImg + seqx = dx<=0?CImg::vector(nxmin): + CImg::sequence(1 + gdimx/60,nxmin,one?nxmax:nxmin + (nxmax - nxmin)*(siz + 1)/siz).round(px), + seqy = CImg::sequence(1 + gdimy/60,nymax,nymin).round(py); + + const bool allow_zero = (nxmin*nxmax>0) || (nymin*nymax>0); + axes.draw_axes(seqx,seqy,white,1,~0U,~0U,13,allow_zero); + if (nymin>0) axes.draw_axis(seqx,gdimy - 1,gray,1,~0U,13,allow_zero); + if (nymax<0) axes.draw_axis(seqx,0,gray,1,~0U,13,allow_zero); + if (nxmin>0) axes.draw_axis(0,seqy,gray,1,~0U,13,allow_zero); + if (nxmax<0) axes.draw_axis(gdimx - 1,seqy,gray,1,~0U,13,allow_zero); + + cimg_for3x3(axes,x,y,0,0,I,unsigned char) + if (Icc) { + if (Icc==255) cimg_forC(graph,c) graph(x,y,c) = 0; + else cimg_forC(graph,c) graph(x,y,c) = (unsigned char)(2*graph(x,y,c)/3); + } + else if (Ipc || Inc || Icp || Icn || Ipp || Inn || Ipn || Inp) + cimg_forC(graph,c) graph(x,y,c) = (unsigned char)((graph(x,y,c) + 511)/3); + + visu0.draw_image(16,16,graph); + visu0.draw_line(15,15,16 + gdimx,15,gray2).draw_line(16 + gdimx,15,16 + gdimx,16 + gdimy,gray2). + draw_line(16 + gdimx,16 + gdimy,15,16 + gdimy,white).draw_line(15,16 + gdimy,15,15,white); + } else graph.assign(); + text.assign().draw_text(0,0,labelx?labelx:"X-axis",white,ngray,1,13).resize(-100,-100,1,3); + visu0.draw_image((visu0.width() - text.width())/2,visu0.height() - 14,~text); + text.assign().draw_text(0,0,labely?labely:"Y-axis",white,ngray,1,13).rotate(-90).resize(-100,-100,1,3); + visu0.draw_image(1,(visu0.height() - text.height())/2,~text); + visu.assign(); + } + + // Generate and display current view. + if (!visu) { + visu.assign(visu0); + if (graph && x0>=0 && x1>=0) { + const int + nx0 = x0<=x1?x0:x1, + nx1 = x0<=x1?x1:x0, + ny0 = y0<=y1?y0:y1, + ny1 = y0<=y1?y1:y0, + sx0 = (int)(16 + nx0*(visu.width() - 32)/std::max((ulongT)1,siz - one)), + sx1 = (int)(15 + (nx1 + 1)*(visu.width() - 32)/std::max((ulongT)1,siz - one)), + sy0 = 16 + ny0, + sy1 = 16 + ny1; + if (y0>=0 && y1>=0) + visu.draw_rectangle(sx0,sy0,sx1,sy1,gray,0.5f).draw_rectangle(sx0,sy0,sx1,sy1,black,0.5f,0xCCCCCCCCU); + else visu.draw_rectangle(sx0,0,sx1,visu.height() - 17,gray,0.5f). + draw_line(sx0,16,sx0,visu.height() - 17,black,0.5f,0xCCCCCCCCU). + draw_line(sx1,16,sx1,visu.height() - 17,black,0.5f,0xCCCCCCCCU); + } + if (mouse_x>=16 && mouse_y>=16 && mouse_x=7) + cimg_snprintf(message,message._width,"Value[%u:%g] = ( %g %g %g ... %g %g %g )",x,cx, + (double)(*this)(x,0,0,0),(double)(*this)(x,0,0,1),(double)(*this)(x,0,0,2), + (double)(*this)(x,0,0,_spectrum - 4),(double)(*this)(x,0,0,_spectrum - 3), + (double)(*this)(x,0,0,_spectrum - 1)); + else { + cimg_snprintf(message,message._width,"Value[%u:%g] = ( ",x,cx); + cimg_forC(*this,c) cimg_sprintf(message._data + std::strlen(message),"%g ",(double)(*this)(x,0,0,c)); + cimg_sprintf(message._data + std::strlen(message),")"); + } + if (x0>=0 && x1>=0) { + const unsigned int + nx0 = (unsigned int)(x0<=x1?x0:x1), + nx1 = (unsigned int)(x0<=x1?x1:x0), + ny0 = (unsigned int)(y0<=y1?y0:y1), + ny1 = (unsigned int)(y0<=y1?y1:y0); + const double + cx0 = nxmin + nx0*(nxmax - nxmin)/std::max((ulongT)1,siz - 1), + cx1 = nxmin + (nx1 + one)*(nxmax - nxmin)/std::max((ulongT)1,siz - 1), + cy0 = nymax - ny0*(nymax - nymin)/(visu._height - 32), + cy1 = nymax - ny1*(nymax - nymin)/(visu._height - 32); + if (y0>=0 && y1>=0) + cimg_sprintf(message._data + std::strlen(message)," - Range ( %u:%g, %g ) - ( %u:%g, %g )", + x0,cx0,cy0,x1 + one,cx1,cy1); + else + cimg_sprintf(message._data + std::strlen(message)," - Range [ %u:%g - %u:%g ]", + x0,cx0,x1 + one,cx1); + } + text.assign().draw_text(0,0,message,white,ngray,1,13).resize(-100,-100,1,3); + visu.draw_image((visu.width() - text.width())/2,1,~text); + } + visu.display(disp); + } + + // Test keys. + CImg filename(32); + switch (okey = key) { +#if cimg_OS!=2 + case cimg::keyCTRLRIGHT : case cimg::keySHIFTRIGHT : +#endif + case cimg::keyCTRLLEFT : case cimg::keySHIFTLEFT : okey = 0; break; + case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false). + resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), + CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). + _is_resized = true; + disp.set_key(key,false); okey = 0; + } break; + case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false). + resize(cimg_fitscreen(2*disp.width()/3,2*disp.height()/3,1),false)._is_resized = true; + disp.set_key(key,false); okey = 0; + } break; + case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false). + resize(cimg_fitscreen(CImgDisplay::screen_width()/2, + CImgDisplay::screen_height()/2,1),false)._is_resized = true; + disp.set_key(key,false); okey = 0; + } break; + case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen()._is_resized = true; + disp.set_key(key,false); okey = 0; + } break; + case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + static unsigned int snap_number = 0; + if (visu || visu0) { + CImg &screen = visu?visu:visu0; + std::FILE *file; + do { + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.bmp",snap_number++); + if ((file=std_fopen(filename,"r"))!=0) cimg::fclose(file); + } while (file); + (+screen).draw_text(0,0," Saving snapshot... ",black,gray,1,13).display(disp); + screen.save(filename); + (+screen).draw_text(0,0," Snapshot '%s' saved. ",black,gray,1,13,filename._data).display(disp); + } + disp.set_key(key,false); okey = 0; + } break; + case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + static unsigned int snap_number = 0; + if (visu || visu0) { + CImg &screen = visu?visu:visu0; + std::FILE *file; + do { +#ifdef cimg_use_zlib + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimgz",snap_number++); +#else + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimg",snap_number++); +#endif + if ((file=std_fopen(filename,"r"))!=0) cimg::fclose(file); + } while (file); + (+screen).draw_text(0,0," Saving instance... ",black,gray,1,13).display(disp); + save(filename); + (+screen).draw_text(0,0," Instance '%s' saved. ",black,gray,1,13,filename._data).display(disp); + } + disp.set_key(key,false); okey = 0; + } break; + } + + // Handle mouse motion and mouse buttons + if (obutton!=button || omouse_x!=mouse_x || omouse_y!=mouse_y) { + visu.assign(); + if (disp.mouse_x()>=0 && disp.mouse_y()>=0) { + const int + mx = (mouse_x - 16)*(int)(siz - one)/(disp.width() - 32), + cx = cimg::cut(mx,0,(int)(siz - 1 - one)), + my = mouse_y - 16, + cy = cimg::cut(my,0,disp.height() - 32); + if (button&1) { + if (!obutton) { x0 = cx; y0 = -1; } else { x1 = cx; y1 = -1; } + } + else if (button&2) { + if (!obutton) { x0 = cx; y0 = cy; } else { x1 = cx; y1 = cy; } + } + else if (obutton) { x1 = x1>=0?cx:-1; y1 = y1>=0?cy:-1; selected = true; } + } else if (!button && obutton) selected = true; + obutton = button; omouse_x = mouse_x; omouse_y = mouse_y; + } + if (disp.is_resized()) { disp.resize(false); visu0.assign(); } + if (visu && visu0) disp.wait(); + if (!exit_on_anykey && okey && okey!=cimg::keyESC && + (okey!=cimg::keyW || (!disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT()))) { + disp.set_key(key,false); + okey = 0; + } + } + + disp._normalization = old_normalization; + if (x1>=0 && x1(4,1,1,1,x0,y0,x1>=0?x1 + (int)one:-1,y1); + } + + //! Load image from a file. + /** + \param filename Filename, as a C-string. + \note The extension of \c filename defines the file format. If no filename + extension is provided, CImg::get_load() will try to load the file as a .cimg or .cimgz file. + **/ + CImg& load(const char *const filename) { + if (!filename) + throw CImgArgumentException(_cimg_instance + "load(): Specified filename is (null).", + cimg_instance); + + if (!cimg::strncasecmp(filename,"http://",7) || !cimg::strncasecmp(filename,"https://",8)) { + CImg filename_local(256); + load(cimg::load_network(filename,filename_local)); + std::remove(filename_local); + return *this; + } + + const char *const ext = cimg::split_filename(filename); + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + bool is_loaded = true; + try { +#ifdef cimg_load_plugin + cimg_load_plugin(filename); +#endif +#ifdef cimg_load_plugin1 + cimg_load_plugin1(filename); +#endif +#ifdef cimg_load_plugin2 + cimg_load_plugin2(filename); +#endif +#ifdef cimg_load_plugin3 + cimg_load_plugin3(filename); +#endif +#ifdef cimg_load_plugin4 + cimg_load_plugin4(filename); +#endif +#ifdef cimg_load_plugin5 + cimg_load_plugin5(filename); +#endif +#ifdef cimg_load_plugin6 + cimg_load_plugin6(filename); +#endif +#ifdef cimg_load_plugin7 + cimg_load_plugin7(filename); +#endif +#ifdef cimg_load_plugin8 + cimg_load_plugin8(filename); +#endif + // Ascii formats + if (!cimg::strcasecmp(ext,"asc")) load_ascii(filename); + else if (!cimg::strcasecmp(ext,"dlm") || + !cimg::strcasecmp(ext,"txt")) load_dlm(filename); + + // 2d binary formats + else if (!cimg::strcasecmp(ext,"bmp")) load_bmp(filename); + else if (!cimg::strcasecmp(ext,"jpg") || + !cimg::strcasecmp(ext,"jpeg") || + !cimg::strcasecmp(ext,"jpe") || + !cimg::strcasecmp(ext,"jfif") || + !cimg::strcasecmp(ext,"jif")) load_jpeg(filename); + else if (!cimg::strcasecmp(ext,"png")) load_png(filename); + else if (!cimg::strcasecmp(ext,"ppm") || + !cimg::strcasecmp(ext,"pgm") || + !cimg::strcasecmp(ext,"pnm") || + !cimg::strcasecmp(ext,"pbm") || + !cimg::strcasecmp(ext,"pnk")) load_pnm(filename); + else if (!cimg::strcasecmp(ext,"pfm")) load_pfm(filename); + else if (!cimg::strcasecmp(ext,"tif") || + !cimg::strcasecmp(ext,"tiff")) load_tiff(filename); + else if (!cimg::strcasecmp(ext,"exr")) load_exr(filename); + else if (!cimg::strcasecmp(ext,"cr2") || + !cimg::strcasecmp(ext,"crw") || + !cimg::strcasecmp(ext,"dcr") || + !cimg::strcasecmp(ext,"mrw") || + !cimg::strcasecmp(ext,"nef") || + !cimg::strcasecmp(ext,"orf") || + !cimg::strcasecmp(ext,"pix") || + !cimg::strcasecmp(ext,"ptx") || + !cimg::strcasecmp(ext,"raf") || + !cimg::strcasecmp(ext,"srf")) load_dcraw_external(filename); + else if (!cimg::strcasecmp(ext,"gif")) load_gif_external(filename); + + // 3d binary formats + else if (!cimg::strcasecmp(ext,"dcm") || + !cimg::strcasecmp(ext,"dicom")) load_medcon_external(filename); + else if (!cimg::strcasecmp(ext,"hdr") || + !cimg::strcasecmp(ext,"nii")) load_analyze(filename); + else if (!cimg::strcasecmp(ext,"par") || + !cimg::strcasecmp(ext,"rec")) load_parrec(filename); + else if (!cimg::strcasecmp(ext,"mnc")) load_minc2(filename); + else if (!cimg::strcasecmp(ext,"inr")) load_inr(filename); + else if (!cimg::strcasecmp(ext,"pan")) load_pandore(filename); + else if (!cimg::strcasecmp(ext,"cimg") || + !cimg::strcasecmp(ext,"cimgz") || + !*ext) return load_cimg(filename); + + // Archive files + else if (!cimg::strcasecmp(ext,"gz")) load_gzip_external(filename); + + // Image sequences + else if (!cimg::strcasecmp(ext,"avi") || + !cimg::strcasecmp(ext,"mov") || + !cimg::strcasecmp(ext,"asf") || + !cimg::strcasecmp(ext,"divx") || + !cimg::strcasecmp(ext,"flv") || + !cimg::strcasecmp(ext,"mpg") || + !cimg::strcasecmp(ext,"m1v") || + !cimg::strcasecmp(ext,"m2v") || + !cimg::strcasecmp(ext,"m4v") || + !cimg::strcasecmp(ext,"mjp") || + !cimg::strcasecmp(ext,"mp4") || + !cimg::strcasecmp(ext,"mkv") || + !cimg::strcasecmp(ext,"mpe") || + !cimg::strcasecmp(ext,"movie") || + !cimg::strcasecmp(ext,"ogm") || + !cimg::strcasecmp(ext,"ogg") || + !cimg::strcasecmp(ext,"ogv") || + !cimg::strcasecmp(ext,"qt") || + !cimg::strcasecmp(ext,"rm") || + !cimg::strcasecmp(ext,"vob") || + !cimg::strcasecmp(ext,"wmv") || + !cimg::strcasecmp(ext,"xvid") || + !cimg::strcasecmp(ext,"mpeg")) load_video(filename); + else is_loaded = false; + } catch (CImgIOException&) { is_loaded = false; } + + // If nothing loaded, try to guess file format from magic number in file. + if (!is_loaded) { + std::FILE *file = std_fopen(filename,"rb"); + if (!file) { + cimg::exception_mode(omode); + throw CImgIOException(_cimg_instance + "load(): Failed to open file '%s'.", + cimg_instance, + filename); + } + + const char *const f_type = cimg::ftype(file,filename); + std::fclose(file); + is_loaded = true; + try { + if (!cimg::strcasecmp(f_type,"pnm")) load_pnm(filename); + else if (!cimg::strcasecmp(f_type,"pfm")) load_pfm(filename); + else if (!cimg::strcasecmp(f_type,"bmp")) load_bmp(filename); + else if (!cimg::strcasecmp(f_type,"inr")) load_inr(filename); + else if (!cimg::strcasecmp(f_type,"jpg")) load_jpeg(filename); + else if (!cimg::strcasecmp(f_type,"pan")) load_pandore(filename); + else if (!cimg::strcasecmp(f_type,"png")) load_png(filename); + else if (!cimg::strcasecmp(f_type,"tif")) load_tiff(filename); + else if (!cimg::strcasecmp(f_type,"gif")) load_gif_external(filename); + else if (!cimg::strcasecmp(f_type,"dcm")) load_medcon_external(filename); + else is_loaded = false; + } catch (CImgIOException&) { is_loaded = false; } + } + + // If nothing loaded, try to load file with other means. + if (!is_loaded) { + try { + load_other(filename); + } catch (CImgIOException&) { + cimg::exception_mode(omode); + throw CImgIOException(_cimg_instance + "load(): Failed to recognize format of file '%s'.", + cimg_instance, + filename); + } + } + cimg::exception_mode(omode); + return *this; + } + + //! Load image from a file \newinstance. + static CImg get_load(const char *const filename) { + return CImg().load(filename); + } + + //! Load image from an ascii file. + /** + \param filename Filename, as a C -string. + **/ + CImg& load_ascii(const char *const filename) { + return _load_ascii(0,filename); + } + + //! Load image from an ascii file \inplace. + static CImg get_load_ascii(const char *const filename) { + return CImg().load_ascii(filename); + } + + //! Load image from an ascii file \overloading. + CImg& load_ascii(std::FILE *const file) { + return _load_ascii(file,0); + } + + //! Loadimage from an ascii file \newinstance. + static CImg get_load_ascii(std::FILE *const file) { + return CImg().load_ascii(file); + } + + CImg& _load_ascii(std::FILE *const file, const char *const filename) { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_ascii(): Specified filename is (null).", + cimg_instance); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); + CImg line(256); *line = 0; + int err = std::fscanf(nfile,"%255[^\n]",line._data); + unsigned int dx = 0, dy = 1, dz = 1, dc = 1; + cimg_sscanf(line,"%u%*c%u%*c%u%*c%u",&dx,&dy,&dz,&dc); + err = std::fscanf(nfile,"%*[^0-9.eEinfa+-]"); + if (!dx || !dy || !dz || !dc) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_ascii(): Invalid ascii header in file '%s', image dimensions are set " + "to (%u,%u,%u,%u).", + cimg_instance, + filename?filename:"(FILE*)",dx,dy,dz,dc); + } + assign(dx,dy,dz,dc); + const ulongT siz = size(); + ulongT off = 0; + double val; + T *ptr = _data; + for (err = 1, off = 0; off& load_dlm(const char *const filename) { + return _load_dlm(0,filename); + } + + //! Load image from a DLM file \newinstance. + static CImg get_load_dlm(const char *const filename) { + return CImg().load_dlm(filename); + } + + //! Load image from a DLM file \overloading. + CImg& load_dlm(std::FILE *const file) { + return _load_dlm(file,0); + } + + //! Load image from a DLM file \newinstance. + static CImg get_load_dlm(std::FILE *const file) { + return CImg().load_dlm(file); + } + + CImg& _load_dlm(std::FILE *const file, const char *const filename) { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_dlm(): Specified filename is (null).", + cimg_instance); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"r"); + CImg delimiter(256), tmp(256); *delimiter = *tmp = 0; + unsigned int cdx = 0, dx = 0, dy = 0; + int err = 0; + double val; + assign(256,256,1,1,(T)0); + while ((err = std::fscanf(nfile,"%lf%255[^0-9eEinfa.+-]",&val,delimiter._data))>0) { + if (err>0) (*this)(cdx++,dy) = (T)val; + if (cdx>=_width) resize(3*_width/2,_height,1,1,0); + char c = 0; + if (!cimg_sscanf(delimiter,"%255[^\n]%c",tmp._data,&c) || c=='\n') { + dx = std::max(cdx,dx); + if (++dy>=_height) resize(_width,3*_height/2,1,1,0); + cdx = 0; + } + } + if (cdx && err==1) { dx = cdx; ++dy; } + if (!dx || !dy) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_dlm(): Invalid DLM file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + } + resize(dx,dy,1,1,0); + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Load image from a BMP file. + /** + \param filename Filename, as a C-string. + **/ + CImg& load_bmp(const char *const filename) { + return _load_bmp(0,filename); + } + + //! Load image from a BMP file \newinstance. + static CImg get_load_bmp(const char *const filename) { + return CImg().load_bmp(filename); + } + + //! Load image from a BMP file \overloading. + CImg& load_bmp(std::FILE *const file) { + return _load_bmp(file,0); + } + + //! Load image from a BMP file \newinstance. + static CImg get_load_bmp(std::FILE *const file) { + return CImg().load_bmp(file); + } + + CImg& _load_bmp(std::FILE *const file, const char *const filename) { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_bmp(): Specified filename is (null).", + cimg_instance); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); + CImg header(54); + cimg::fread(header._data,54,nfile); + if (*header!='B' || header[1]!='M') { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_bmp(): Invalid BMP file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + } + + // Read header and pixel buffer + int + file_size = header[0x02] + (header[0x03]<<8) + (header[0x04]<<16) + (header[0x05]<<24), + offset = header[0x0A] + (header[0x0B]<<8) + (header[0x0C]<<16) + (header[0x0D]<<24), + header_size = header[0x0E] + (header[0x0F]<<8) + (header[0x10]<<16) + (header[0x11]<<24), + dx = header[0x12] + (header[0x13]<<8) + (header[0x14]<<16) + (header[0x15]<<24), + dy = header[0x16] + (header[0x17]<<8) + (header[0x18]<<16) + (header[0x19]<<24), + compression = header[0x1E] + (header[0x1F]<<8) + (header[0x20]<<16) + (header[0x21]<<24), + nb_colors = header[0x2E] + (header[0x2F]<<8) + (header[0x30]<<16) + (header[0x31]<<24), + bpp = header[0x1C] + (header[0x1D]<<8); + + if (!file_size || file_size==offset) { + cimg::fseek(nfile,0,SEEK_END); + file_size = (int)cimg::ftell(nfile); + cimg::fseek(nfile,54,SEEK_SET); + } + if (header_size>40) cimg::fseek(nfile,header_size - 40,SEEK_CUR); + + const int + dx_bytes = (bpp==1)?(dx/8 + (dx%8?1:0)):((bpp==4)?(dx/2 + (dx%2)):(int)((longT)dx*bpp/8)), + align_bytes = (4 - dx_bytes%4)%4; + const ulongT + cimg_iobuffer = (ulongT)24*1024*1024, + buf_size = std::min((ulongT)cimg::abs(dy)*(dx_bytes + align_bytes),(ulongT)file_size - offset); + + CImg colormap; + if (bpp<16) { if (!nb_colors) nb_colors = 1<0) cimg::fseek(nfile,xoffset,SEEK_CUR); + + CImg buffer; + if (buf_size=2) for (int y = height() - 1; y>=0; --y) { + if (buf_size>=cimg_iobuffer) { + if (!cimg::fread(ptrs=buffer._data,dx_bytes,nfile)) break; + cimg::fseek(nfile,align_bytes,SEEK_CUR); + } + unsigned char mask = 0x80, val = 0; + cimg_forX(*this,x) { + if (mask==0x80) val = *(ptrs++); + const unsigned char *col = (unsigned char*)(colormap._data + (val&mask?1:0)); + (*this)(x,y,2) = (T)*(col++); + (*this)(x,y,1) = (T)*(col++); + (*this)(x,y,0) = (T)*(col++); + mask = cimg::ror(mask); + } + ptrs+=align_bytes; + } + } break; + case 4 : { // 16 colors + if (colormap._width>=16) for (int y = height() - 1; y>=0; --y) { + if (buf_size>=cimg_iobuffer) { + if (!cimg::fread(ptrs=buffer._data,dx_bytes,nfile)) break; + cimg::fseek(nfile,align_bytes,SEEK_CUR); + } + unsigned char mask = 0xF0, val = 0; + cimg_forX(*this,x) { + if (mask==0xF0) val = *(ptrs++); + const unsigned char color = (unsigned char)((mask<16)?(val&mask):((val&mask)>>4)); + const unsigned char *col = (unsigned char*)(colormap._data + color); + (*this)(x,y,2) = (T)*(col++); + (*this)(x,y,1) = (T)*(col++); + (*this)(x,y,0) = (T)*(col++); + mask = cimg::ror(mask,4); + } + ptrs+=align_bytes; + } + } break; + case 8 : { // 256 colors + if (colormap._width>=256) for (int y = height() - 1; y>=0; --y) { + if (buf_size>=cimg_iobuffer) { + if (!cimg::fread(ptrs=buffer._data,dx_bytes,nfile)) break; + cimg::fseek(nfile,align_bytes,SEEK_CUR); + } + cimg_forX(*this,x) { + const unsigned char *col = (unsigned char*)(colormap._data + *(ptrs++)); + (*this)(x,y,2) = (T)*(col++); + (*this)(x,y,1) = (T)*(col++); + (*this)(x,y,0) = (T)*(col++); + } + ptrs+=align_bytes; + } + } break; + case 16 : { // 16 bits colors + for (int y = height() - 1; y>=0; --y) { + if (buf_size>=cimg_iobuffer) { + if (!cimg::fread(ptrs=buffer._data,dx_bytes,nfile)) break; + cimg::fseek(nfile,align_bytes,SEEK_CUR); + } + cimg_forX(*this,x) { + const unsigned char c1 = *(ptrs++), c2 = *(ptrs++); + const unsigned short col = (unsigned short)(c1|(c2<<8)); + (*this)(x,y,2) = (T)(col&0x1F); + (*this)(x,y,1) = (T)((col>>5)&0x1F); + (*this)(x,y,0) = (T)((col>>10)&0x1F); + } + ptrs+=align_bytes; + } + } break; + case 24 : { // 24 bits colors + for (int y = height() - 1; y>=0; --y) { + if (buf_size>=cimg_iobuffer) { + if (!cimg::fread(ptrs=buffer._data,dx_bytes,nfile)) break; + cimg::fseek(nfile,align_bytes,SEEK_CUR); + } + cimg_forX(*this,x) { + (*this)(x,y,2) = (T)*(ptrs++); + (*this)(x,y,1) = (T)*(ptrs++); + (*this)(x,y,0) = (T)*(ptrs++); + } + ptrs+=align_bytes; + } + } break; + case 32 : { // 32 bits colors + for (int y = height() - 1; y>=0; --y) { + if (buf_size>=cimg_iobuffer) { + if (!cimg::fread(ptrs=buffer._data,dx_bytes,nfile)) break; + cimg::fseek(nfile,align_bytes,SEEK_CUR); + } + cimg_forX(*this,x) { + (*this)(x,y,2) = (T)*(ptrs++); + (*this)(x,y,1) = (T)*(ptrs++); + (*this)(x,y,0) = (T)*(ptrs++); + ++ptrs; + } + ptrs+=align_bytes; + } + } break; + } + if (dy<0) mirror('y'); + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Load image from a JPEG file. + /** + \param filename Filename, as a C-string. + **/ + CImg& load_jpeg(const char *const filename) { + return _load_jpeg(0,filename); + } + + //! Load image from a JPEG file \newinstance. + static CImg get_load_jpeg(const char *const filename) { + return CImg().load_jpeg(filename); + } + + //! Load image from a JPEG file \overloading. + CImg& load_jpeg(std::FILE *const file) { + return _load_jpeg(file,0); + } + + //! Load image from a JPEG file \newinstance. + static CImg get_load_jpeg(std::FILE *const file) { + return CImg().load_jpeg(file); + } + + // Custom error handler for libjpeg. +#ifdef cimg_use_jpeg + struct _cimg_error_mgr { + struct jpeg_error_mgr original; + jmp_buf setjmp_buffer; + char message[JMSG_LENGTH_MAX]; + }; + + typedef struct _cimg_error_mgr *_cimg_error_ptr; + + METHODDEF(void) _cimg_jpeg_error_exit(j_common_ptr cinfo) { + _cimg_error_ptr c_err = (_cimg_error_ptr) cinfo->err; // Return control to the setjmp point + (*cinfo->err->format_message)(cinfo,c_err->message); + jpeg_destroy(cinfo); // Clean memory and temp files. + longjmp(c_err->setjmp_buffer,1); + } +#endif + + CImg& _load_jpeg(std::FILE *const file, const char *const filename) { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_jpeg(): Specified filename is (null).", + cimg_instance); + +#ifndef cimg_use_jpeg + if (file) + throw CImgIOException(_cimg_instance + "load_jpeg(): Unable to load data from '(FILE*)' unless libjpeg is enabled.", + cimg_instance); + else return load_other(filename); +#else + + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); + struct jpeg_decompress_struct cinfo; + struct _cimg_error_mgr jerr; + cinfo.err = jpeg_std_error(&jerr.original); + jerr.original.error_exit = _cimg_jpeg_error_exit; + if (setjmp(jerr.setjmp_buffer)) { // JPEG error + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_jpeg(): Error message returned by libjpeg: %s.", + cimg_instance,jerr.message); + } + + jpeg_create_decompress(&cinfo); + jpeg_stdio_src(&cinfo,nfile); + jpeg_read_header(&cinfo,TRUE); + jpeg_start_decompress(&cinfo); + + if (cinfo.output_components!=1 && cinfo.output_components!=3 && cinfo.output_components!=4) { + if (!file) { + cimg::fclose(nfile); + return load_other(filename); + } else + throw CImgIOException(_cimg_instance + "load_jpeg(): Failed to load JPEG data from file '%s'.", + cimg_instance,filename?filename:"(FILE*)"); + } + CImg buffer(cinfo.output_width*cinfo.output_components); + JSAMPROW row_pointer[1]; + try { assign(cinfo.output_width,cinfo.output_height,1,cinfo.output_components); } + catch (...) { if (!file) cimg::fclose(nfile); throw; } + T *ptr_r = _data, *ptr_g = _data + 1UL*_width*_height, *ptr_b = _data + 2UL*_width*_height, + *ptr_a = _data + 3UL*_width*_height; + while (cinfo.output_scanline + // This is experimental code, not much tested, use with care. + CImg& load_magick(const char *const filename) { + if (!filename) + throw CImgArgumentException(_cimg_instance + "load_magick(): Specified filename is (null).", + cimg_instance); +#ifdef cimg_use_magick + Magick::Image image(filename); + const unsigned int W = image.size().width(), H = image.size().height(); + switch (image.type()) { + case Magick::PaletteMatteType : + case Magick::TrueColorMatteType : + case Magick::ColorSeparationType : { + assign(W,H,1,4); + T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2), *ptr_a = data(0,0,0,3); + Magick::PixelPacket *pixels = image.getPixels(0,0,W,H); + for (ulongT off = (ulongT)W*H; off; --off) { + *(ptr_r++) = (T)(pixels->red); + *(ptr_g++) = (T)(pixels->green); + *(ptr_b++) = (T)(pixels->blue); + *(ptr_a++) = (T)(pixels->opacity); + ++pixels; + } + } break; + case Magick::PaletteType : + case Magick::TrueColorType : { + assign(W,H,1,3); + T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); + Magick::PixelPacket *pixels = image.getPixels(0,0,W,H); + for (ulongT off = (ulongT)W*H; off; --off) { + *(ptr_r++) = (T)(pixels->red); + *(ptr_g++) = (T)(pixels->green); + *(ptr_b++) = (T)(pixels->blue); + ++pixels; + } + } break; + case Magick::GrayscaleMatteType : { + assign(W,H,1,2); + T *ptr_r = data(0,0,0,0), *ptr_a = data(0,0,0,1); + Magick::PixelPacket *pixels = image.getPixels(0,0,W,H); + for (ulongT off = (ulongT)W*H; off; --off) { + *(ptr_r++) = (T)(pixels->red); + *(ptr_a++) = (T)(pixels->opacity); + ++pixels; + } + } break; + default : { + assign(W,H,1,1); + T *ptr_r = data(0,0,0,0); + Magick::PixelPacket *pixels = image.getPixels(0,0,W,H); + for (ulongT off = (ulongT)W*H; off; --off) { + *(ptr_r++) = (T)(pixels->red); + ++pixels; + } + } + } + return *this; +#else + throw CImgIOException(_cimg_instance + "load_magick(): Unable to load file '%s' unless libMagick++ is enabled.", + cimg_instance, + filename); +#endif + } + + //! Load image from a file, using Magick++ library \newinstance. + static CImg get_load_magick(const char *const filename) { + return CImg().load_magick(filename); + } + + //! Load image from a PNG file. + /** + \param filename Filename, as a C-string. + \param[out] bits_per_pixel Number of bits per pixels used to store pixel values in the image file. + **/ + CImg& load_png(const char *const filename, unsigned int *const bits_per_pixel=0) { + return _load_png(0,filename,bits_per_pixel); + } + + //! Load image from a PNG file \newinstance. + static CImg get_load_png(const char *const filename, unsigned int *const bits_per_pixel=0) { + return CImg().load_png(filename,bits_per_pixel); + } + + //! Load image from a PNG file \overloading. + CImg& load_png(std::FILE *const file, unsigned int *const bits_per_pixel=0) { + return _load_png(file,0,bits_per_pixel); + } + + //! Load image from a PNG file \newinstance. + static CImg get_load_png(std::FILE *const file, unsigned int *const bits_per_pixel=0) { + return CImg().load_png(file,bits_per_pixel); + } + + // (Note: Most of this function has been written by Eric Fausett) + CImg& _load_png(std::FILE *const file, const char *const filename, unsigned int *const bits_per_pixel) { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_png(): Specified filename is (null).", + cimg_instance); + +#ifndef cimg_use_png + cimg::unused(bits_per_pixel); + if (file) + throw CImgIOException(_cimg_instance + "load_png(): Unable to load data from '(FILE*)' unless libpng is enabled.", + cimg_instance); + + else return load_other(filename); +#else + // Open file and check for PNG validity +#if defined __GNUC__ + const char *volatile nfilename = filename; // Use 'volatile' to avoid (wrong) g++ warning. + std::FILE *volatile nfile = file?file:cimg::fopen(nfilename,"rb"); +#else + const char *nfilename = filename; + std::FILE *nfile = file?file:cimg::fopen(nfilename,"rb"); +#endif + unsigned char pngCheck[8] = { 0 }; + cimg::fread(pngCheck,8,(std::FILE*)nfile); + if (png_sig_cmp(pngCheck,0,8)) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_png(): Invalid PNG file '%s'.", + cimg_instance, + nfilename?nfilename:"(FILE*)"); + } + + // Setup PNG structures for read + png_voidp user_error_ptr = 0; + png_error_ptr user_error_fn = 0, user_warning_fn = 0; + png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,user_error_ptr,user_error_fn,user_warning_fn); + if (!png_ptr) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_png(): Failed to initialize 'png_ptr' structure for file '%s'.", + cimg_instance, + nfilename?nfilename:"(FILE*)"); + } + png_infop info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) { + if (!file) cimg::fclose(nfile); + png_destroy_read_struct(&png_ptr,(png_infopp)0,(png_infopp)0); + throw CImgIOException(_cimg_instance + "load_png(): Failed to initialize 'info_ptr' structure for file '%s'.", + cimg_instance, + nfilename?nfilename:"(FILE*)"); + } + png_infop end_info = png_create_info_struct(png_ptr); + if (!end_info) { + if (!file) cimg::fclose(nfile); + png_destroy_read_struct(&png_ptr,&info_ptr,(png_infopp)0); + throw CImgIOException(_cimg_instance + "load_png(): Failed to initialize 'end_info' structure for file '%s'.", + cimg_instance, + nfilename?nfilename:"(FILE*)"); + } + + // Error handling callback for png file reading + if (setjmp(png_jmpbuf(png_ptr))) { + if (!file) cimg::fclose((std::FILE*)nfile); + png_destroy_read_struct(&png_ptr, &end_info, (png_infopp)0); + throw CImgIOException(_cimg_instance + "load_png(): Encountered unknown fatal error in libpng for file '%s'.", + cimg_instance, + nfilename?nfilename:"(FILE*)"); + } + png_init_io(png_ptr, nfile); + png_set_sig_bytes(png_ptr, 8); + + // Get PNG Header Info up to data block + png_read_info(png_ptr,info_ptr); + png_uint_32 W, H; + int bit_depth, color_type, interlace_type; + bool is_gray = false; + png_get_IHDR(png_ptr,info_ptr,&W,&H,&bit_depth,&color_type,&interlace_type,(int*)0,(int*)0); + if (bits_per_pixel) *bits_per_pixel = (unsigned int)bit_depth; + + // Transforms to unify image data + if (color_type==PNG_COLOR_TYPE_PALETTE) { + png_set_palette_to_rgb(png_ptr); + color_type = PNG_COLOR_TYPE_RGB; + bit_depth = 8; + } + if (color_type==PNG_COLOR_TYPE_GRAY && bit_depth<8) { + png_set_expand_gray_1_2_4_to_8(png_ptr); + is_gray = true; + bit_depth = 8; + } + if (png_get_valid(png_ptr,info_ptr,PNG_INFO_tRNS)) { + png_set_tRNS_to_alpha(png_ptr); + color_type |= PNG_COLOR_MASK_ALPHA; + } + if (color_type==PNG_COLOR_TYPE_GRAY || color_type==PNG_COLOR_TYPE_GRAY_ALPHA) { + png_set_gray_to_rgb(png_ptr); + color_type |= PNG_COLOR_MASK_COLOR; + is_gray = true; + } + if (color_type==PNG_COLOR_TYPE_RGB) + png_set_filler(png_ptr,0xffffU,PNG_FILLER_AFTER); + + png_read_update_info(png_ptr,info_ptr); + if (bit_depth!=8 && bit_depth!=16) { + if (!file) cimg::fclose(nfile); + png_destroy_read_struct(&png_ptr,&end_info,(png_infopp)0); + throw CImgIOException(_cimg_instance + "load_png(): Invalid bit depth %u in file '%s'.", + cimg_instance, + bit_depth,nfilename?nfilename:"(FILE*)"); + } + const int byte_depth = bit_depth>>3; + + // Allocate Memory for Image Read + png_bytep *const imgData = new png_bytep[H]; + for (unsigned int row = 0; row& load_pnm(const char *const filename) { + return _load_pnm(0,filename); + } + + //! Load image from a PNM file \newinstance. + static CImg get_load_pnm(const char *const filename) { + return CImg().load_pnm(filename); + } + + //! Load image from a PNM file \overloading. + CImg& load_pnm(std::FILE *const file) { + return _load_pnm(file,0); + } + + //! Load image from a PNM file \newinstance. + static CImg get_load_pnm(std::FILE *const file) { + return CImg().load_pnm(file); + } + + CImg& _load_pnm(std::FILE *const file, const char *const filename) { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_pnm(): Specified filename is (null).", + cimg_instance); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); + unsigned int ppm_type, W, H, D = 1, colormax = 255; + CImg item(16384,1,1,1,0); + int err, rval, gval, bval; + const longT cimg_iobuffer = (longT)24*1024*1024; + while ((err=std::fscanf(nfile,"%16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); + if (cimg_sscanf(item," P%u",&ppm_type)!=1) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_pnm(): PNM header not found in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + } + while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); + if ((err=cimg_sscanf(item," %u %u %u %u",&W,&H,&D,&colormax))<2) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_pnm(): WIDTH and HEIGHT fields undefined in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + } + if (ppm_type!=1 && ppm_type!=4) { + if (err==2 || (err==3 && (ppm_type==5 || ppm_type==7 || ppm_type==8 || ppm_type==9))) { + while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); + if (cimg_sscanf(item,"%u",&colormax)!=1) + cimg::warn(_cimg_instance + "load_pnm(): COLORMAX field is undefined in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + } else { colormax = D; D = 1; } + } + std::fgetc(nfile); + + switch (ppm_type) { + case 1 : { // 2d b&w ascii. + assign(W,H,1,1); + T* ptrd = _data; + cimg_foroff(*this,off) { if (std::fscanf(nfile,"%d",&rval)>0) *(ptrd++) = (T)(rval?0:255); else break; } + } break; + case 2 : { // 2d grey ascii. + assign(W,H,1,1); + T* ptrd = _data; + cimg_foroff(*this,off) { if (std::fscanf(nfile,"%d",&rval)>0) *(ptrd++) = (T)rval; else break; } + } break; + case 3 : { // 2d color ascii. + assign(W,H,1,3); + T *ptrd = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); + cimg_forXY(*this,x,y) { + if (std::fscanf(nfile,"%d %d %d",&rval,&gval,&bval)==3) { + *(ptrd++) = (T)rval; *(ptr_g++) = (T)gval; *(ptr_b++) = (T)bval; + } else break; + } + } break; + case 4 : { // 2d b&w binary (support 3D PINK extension). + CImg raw; + assign(W,H,D,1); + T *ptrd = data(0,0,0,0); + unsigned int w = 0, h = 0, d = 0; + for (longT to_read = (longT)((W/8 + (W%8?1:0))*H*D); to_read>0; ) { + raw.assign(std::min(to_read,cimg_iobuffer)); + cimg::fread(raw._data,raw._width,nfile); + to_read-=raw._width; + const unsigned char *ptrs = raw._data; + unsigned char mask = 0, val = 0; + for (ulongT off = (ulongT)raw._width; off || mask; mask>>=1) { + if (!mask) { if (off--) val = *(ptrs++); mask = 128; } + *(ptrd++) = (T)((val&mask)?0:255); + if (++w==W) { w = 0; mask = 0; if (++h==H) { h = 0; if (++d==D) break; }} + } + } + } break; + case 5 : case 7 : { // 2d/3d grey binary (support 3D PINK extension). + if (colormax<256) { // 8 bits. + CImg raw; + assign(W,H,D,1); + T *ptrd = data(0,0,0,0); + for (longT to_read = (longT)size(); to_read>0; ) { + raw.assign(std::min(to_read,cimg_iobuffer)); + cimg::fread(raw._data,raw._width,nfile); + to_read-=raw._width; + const unsigned char *ptrs = raw._data; + for (ulongT off = (ulongT)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); + } + } else { // 16 bits. + CImg raw; + assign(W,H,D,1); + T *ptrd = data(0,0,0,0); + for (longT to_read = (longT)size(); to_read>0; ) { + raw.assign(std::min(to_read,cimg_iobuffer/2)); + cimg::fread(raw._data,raw._width,nfile); + if (!cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); + to_read-=raw._width; + const unsigned short *ptrs = raw._data; + for (ulongT off = (ulongT)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); + } + } + } break; + case 6 : { // 2d color binary. + if (colormax<256) { // 8 bits. + CImg raw; + assign(W,H,1,3); + T + *ptr_r = data(0,0,0,0), + *ptr_g = data(0,0,0,1), + *ptr_b = data(0,0,0,2); + for (longT to_read = (longT)size(); to_read>0; ) { + raw.assign(std::min(to_read,cimg_iobuffer)); + cimg::fread(raw._data,raw._width,nfile); + to_read-=raw._width; + const unsigned char *ptrs = raw._data; + for (ulongT off = (ulongT)raw._width/3; off; --off) { + *(ptr_r++) = (T)*(ptrs++); + *(ptr_g++) = (T)*(ptrs++); + *(ptr_b++) = (T)*(ptrs++); + } + } + } else { // 16 bits. + CImg raw; + assign(W,H,1,3); + T + *ptr_r = data(0,0,0,0), + *ptr_g = data(0,0,0,1), + *ptr_b = data(0,0,0,2); + for (longT to_read = (longT)size(); to_read>0; ) { + raw.assign(std::min(to_read,cimg_iobuffer/2)); + cimg::fread(raw._data,raw._width,nfile); + if (!cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); + to_read-=raw._width; + const unsigned short *ptrs = raw._data; + for (ulongT off = (ulongT)raw._width/3; off; --off) { + *(ptr_r++) = (T)*(ptrs++); + *(ptr_g++) = (T)*(ptrs++); + *(ptr_b++) = (T)*(ptrs++); + } + } + } + } break; + case 8 : { // 2d/3d grey binary with int32 integers (PINK extension). + CImg raw; + assign(W,H,D,1); + T *ptrd = data(0,0,0,0); + for (longT to_read = (longT)size(); to_read>0; ) { + raw.assign(std::min(to_read,cimg_iobuffer)); + cimg::fread(raw._data,raw._width,nfile); + to_read-=raw._width; + const int *ptrs = raw._data; + for (ulongT off = (ulongT)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); + } + } break; + case 9 : { // 2d/3d grey binary with float values (PINK extension). + CImg raw; + assign(W,H,D,1); + T *ptrd = data(0,0,0,0); + for (longT to_read = (longT)size(); to_read>0; ) { + raw.assign(std::min(to_read,cimg_iobuffer)); + cimg::fread(raw._data,raw._width,nfile); + to_read-=raw._width; + const float *ptrs = raw._data; + for (ulongT off = (ulongT)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); + } + } break; + default : + assign(); + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_pnm(): PNM type 'P%d' found, but type is not supported.", + cimg_instance, + filename?filename:"(FILE*)",ppm_type); + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Load image from a PFM file. + /** + \param filename Filename, as a C-string. + **/ + CImg& load_pfm(const char *const filename) { + return _load_pfm(0,filename); + } + + //! Load image from a PFM file \newinstance. + static CImg get_load_pfm(const char *const filename) { + return CImg().load_pfm(filename); + } + + //! Load image from a PFM file \overloading. + CImg& load_pfm(std::FILE *const file) { + return _load_pfm(file,0); + } + + //! Load image from a PFM file \newinstance. + static CImg get_load_pfm(std::FILE *const file) { + return CImg().load_pfm(file); + } + + CImg& _load_pfm(std::FILE *const file, const char *const filename) { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_pfm(): Specified filename is (null).", + cimg_instance); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); + char pfm_type; + CImg item(16384,1,1,1,0); + int W = 0, H = 0, err = 0; + double scale = 0; + while ((err=std::fscanf(nfile,"%16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); + if (cimg_sscanf(item," P%c",&pfm_type)!=1) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_pfm(): PFM header not found in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + } + while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); + if ((err=cimg_sscanf(item," %d %d",&W,&H))<2) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_pfm(): WIDTH and HEIGHT fields are undefined in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + } else if (W<=0 || H<=0) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_pfm(): WIDTH (%d) and HEIGHT (%d) fields are invalid in file '%s'.", + cimg_instance,W,H, + filename?filename:"(FILE*)"); + } + if (err==2) { + while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); + if (cimg_sscanf(item,"%lf",&scale)!=1) + cimg::warn(_cimg_instance + "load_pfm(): SCALE field is undefined in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + } + std::fgetc(nfile); + const bool is_color = (pfm_type=='F'), is_inverted = (scale>0)!=cimg::endianness(); + if (is_color) { + assign(W,H,1,3,(T)0); + CImg buf(3*W); + T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); + cimg_forY(*this,y) { + cimg::fread(buf._data,3*W,nfile); + if (is_inverted) cimg::invert_endianness(buf._data,3*W); + const float *ptrs = buf._data; + cimg_forX(*this,x) { + *(ptr_r++) = (T)*(ptrs++); + *(ptr_g++) = (T)*(ptrs++); + *(ptr_b++) = (T)*(ptrs++); + } + } + } else { + assign(W,H,1,1,(T)0); + CImg buf(W); + T *ptrd = data(0,0,0,0); + cimg_forY(*this,y) { + cimg::fread(buf._data,W,nfile); + if (is_inverted) cimg::invert_endianness(buf._data,W); + const float *ptrs = buf._data; + cimg_forX(*this,x) *(ptrd++) = (T)*(ptrs++); + } + } + if (!file) cimg::fclose(nfile); + return mirror('y'); // Most of the .pfm files are flipped along the y-axis. + } + + //! Load image from a RGB file. + /** + \param filename Filename, as a C-string. + \param dimw Width of the image buffer. + \param dimh Height of the image buffer. + **/ + CImg& load_rgb(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { + return _load_rgb(0,filename,dimw,dimh); + } + + //! Load image from a RGB file \newinstance. + static CImg get_load_rgb(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { + return CImg().load_rgb(filename,dimw,dimh); + } + + //! Load image from a RGB file \overloading. + CImg& load_rgb(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { + return _load_rgb(file,0,dimw,dimh); + } + + //! Load image from a RGB file \newinstance. + static CImg get_load_rgb(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { + return CImg().load_rgb(file,dimw,dimh); + } + + CImg& _load_rgb(std::FILE *const file, const char *const filename, + const unsigned int dimw, const unsigned int dimh) { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_rgb(): Specified filename is (null).", + cimg_instance); + + if (!dimw || !dimh) return assign(); + const longT cimg_iobuffer = (longT)24*1024*1024; + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); + CImg raw; + assign(dimw,dimh,1,3); + T + *ptr_r = data(0,0,0,0), + *ptr_g = data(0,0,0,1), + *ptr_b = data(0,0,0,2); + for (longT to_read = (longT)size(); to_read>0; ) { + raw.assign(std::min(to_read,cimg_iobuffer)); + cimg::fread(raw._data,raw._width,nfile); + to_read-=raw._width; + const unsigned char *ptrs = raw._data; + for (ulongT off = raw._width/3UL; off; --off) { + *(ptr_r++) = (T)*(ptrs++); + *(ptr_g++) = (T)*(ptrs++); + *(ptr_b++) = (T)*(ptrs++); + } + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Load image from a RGBA file. + /** + \param filename Filename, as a C-string. + \param dimw Width of the image buffer. + \param dimh Height of the image buffer. + **/ + CImg& load_rgba(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { + return _load_rgba(0,filename,dimw,dimh); + } + + //! Load image from a RGBA file \newinstance. + static CImg get_load_rgba(const char *const filename, const unsigned int dimw, const unsigned int dimh=1) { + return CImg().load_rgba(filename,dimw,dimh); + } + + //! Load image from a RGBA file \overloading. + CImg& load_rgba(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { + return _load_rgba(file,0,dimw,dimh); + } + + //! Load image from a RGBA file \newinstance. + static CImg get_load_rgba(std::FILE *const file, const unsigned int dimw, const unsigned int dimh=1) { + return CImg().load_rgba(file,dimw,dimh); + } + + CImg& _load_rgba(std::FILE *const file, const char *const filename, + const unsigned int dimw, const unsigned int dimh) { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_rgba(): Specified filename is (null).", + cimg_instance); + + if (!dimw || !dimh) return assign(); + const longT cimg_iobuffer = (longT)24*1024*1024; + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); + CImg raw; + assign(dimw,dimh,1,4); + T + *ptr_r = data(0,0,0,0), + *ptr_g = data(0,0,0,1), + *ptr_b = data(0,0,0,2), + *ptr_a = data(0,0,0,3); + for (longT to_read = (longT)size(); to_read>0; ) { + raw.assign(std::min(to_read,cimg_iobuffer)); + cimg::fread(raw._data,raw._width,nfile); + to_read-=raw._width; + const unsigned char *ptrs = raw._data; + for (ulongT off = raw._width/4UL; off; --off) { + *(ptr_r++) = (T)*(ptrs++); + *(ptr_g++) = (T)*(ptrs++); + *(ptr_b++) = (T)*(ptrs++); + *(ptr_a++) = (T)*(ptrs++); + } + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Load image from a TIFF file. + /** + \param filename Filename, as a C-string. + \param first_frame First frame to read (for multi-pages tiff). + \param last_frame Last frame to read (for multi-pages tiff). + \param step_frame Step value of frame reading. + \param[out] voxel_size Voxel size, as stored in the filename. + \param[out] description Description, as stored in the filename. + \note + - libtiff support is enabled by defining the precompilation + directive \c cimg_use_tif. + - When libtiff is enabled, 2D and 3D (multipage) several + channel per pixel are supported for + char,uchar,short,ushort,float and \c double pixel types. + - If \c cimg_use_tif is not defined at compile time the + function uses CImg& load_other(const char*). + **/ + CImg& load_tiff(const char *const filename, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, + float *const voxel_size=0, + CImg *const description=0) { + if (!filename) + throw CImgArgumentException(_cimg_instance + "load_tiff(): Specified filename is (null).", + cimg_instance); + + const unsigned int + nfirst_frame = first_frame1) + throw CImgArgumentException(_cimg_instance + "load_tiff(): Unable to read sub-images from file '%s' unless libtiff is enabled.", + cimg_instance, + filename); + return load_other(filename); +#else +#if cimg_verbosity<3 + TIFFSetWarningHandler(0); + TIFFSetErrorHandler(0); +#endif + TIFF *tif = TIFFOpen(filename,"r"); + if (tif) { + unsigned int nb_images = 0; + do ++nb_images; while (TIFFReadDirectory(tif)); + if (nfirst_frame>=nb_images || (nlast_frame!=~0U && nlast_frame>=nb_images)) + cimg::warn(_cimg_instance + "load_tiff(): File '%s' contains %u image(s) while specified frame range is [%u,%u] (step %u).", + cimg_instance, + filename,nb_images,nfirst_frame,nlast_frame,nstep_frame); + + if (nfirst_frame>=nb_images) return assign(); + if (nlast_frame>=nb_images) nlast_frame = nb_images - 1; + TIFFSetDirectory(tif,0); + CImg frame; + for (unsigned int l = nfirst_frame; l<=nlast_frame; l+=nstep_frame) { + frame._load_tiff(tif,l,voxel_size,description); + if (l==nfirst_frame) + assign(frame._width,frame._height,1 + (nlast_frame - nfirst_frame)/nstep_frame,frame._spectrum); + if (frame._width>_width || frame._height>_height || frame._spectrum>_spectrum) + resize(std::max(frame._width,_width), + std::max(frame._height,_height),-100, + std::max(frame._spectrum,_spectrum),0); + draw_image(0,0,(l - nfirst_frame)/nstep_frame,frame); + } + TIFFClose(tif); + } else throw CImgIOException(_cimg_instance + "load_tiff(): Failed to open file '%s'.", + cimg_instance, + filename); + return *this; +#endif + } + + //! Load image from a TIFF file \newinstance. + static CImg get_load_tiff(const char *const filename, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, + float *const voxel_size=0, + CImg *const description=0) { + return CImg().load_tiff(filename,first_frame,last_frame,step_frame,voxel_size,description); + } + + // (Original contribution by Jerome Boulanger). +#ifdef cimg_use_tiff + template + void _load_tiff_tiled_contig(TIFF *const tif, const uint16 samplesperpixel, + const uint32 nx, const uint32 ny, const uint32 tw, const uint32 th) { + t *const buf = (t*)_TIFFmalloc(TIFFTileSize(tif)); + if (buf) { + for (unsigned int row = 0; row + void _load_tiff_tiled_separate(TIFF *const tif, const uint16 samplesperpixel, + const uint32 nx, const uint32 ny, const uint32 tw, const uint32 th) { + t *const buf = (t*)_TIFFmalloc(TIFFTileSize(tif)); + if (buf) { + for (unsigned int vv = 0; vv + void _load_tiff_contig(TIFF *const tif, const uint16 samplesperpixel, const uint32 nx, const uint32 ny) { + t *const buf = (t*)_TIFFmalloc(TIFFStripSize(tif)); + if (buf) { + uint32 row, rowsperstrip = (uint32)-1; + TIFFGetField(tif,TIFFTAG_ROWSPERSTRIP,&rowsperstrip); + for (row = 0; rowny?ny - row:rowsperstrip); + tstrip_t strip = TIFFComputeStrip(tif, row, 0); + if ((TIFFReadEncodedStrip(tif,strip,buf,-1))<0) { + _TIFFfree(buf); TIFFClose(tif); + throw CImgIOException(_cimg_instance + "load_tiff(): Invalid strip in file '%s'.", + cimg_instance, + TIFFFileName(tif)); + } + const t *ptr = buf; + for (unsigned int rr = 0; rr + void _load_tiff_separate(TIFF *const tif, const uint16 samplesperpixel, const uint32 nx, const uint32 ny) { + t *buf = (t*)_TIFFmalloc(TIFFStripSize(tif)); + if (buf) { + uint32 row, rowsperstrip = (uint32)-1; + TIFFGetField(tif,TIFFTAG_ROWSPERSTRIP,&rowsperstrip); + for (unsigned int vv = 0; vvny?ny - row:rowsperstrip); + tstrip_t strip = TIFFComputeStrip(tif, row, vv); + if ((TIFFReadEncodedStrip(tif,strip,buf,-1))<0) { + _TIFFfree(buf); TIFFClose(tif); + throw CImgIOException(_cimg_instance + "load_tiff(): Invalid strip in file '%s'.", + cimg_instance, + TIFFFileName(tif)); + } + const t *ptr = buf; + for (unsigned int rr = 0;rr& _load_tiff(TIFF *const tif, const unsigned int directory, + float *const voxel_size, CImg *const description) { + if (!TIFFSetDirectory(tif,directory)) return assign(); + uint16 samplesperpixel = 1, bitspersample = 8, photo = 0; + uint16 sampleformat = 1; + uint32 nx = 1, ny = 1; + const char *const filename = TIFFFileName(tif); + const bool is_spp = (bool)TIFFGetField(tif,TIFFTAG_SAMPLESPERPIXEL,&samplesperpixel); + TIFFGetField(tif,TIFFTAG_IMAGEWIDTH,&nx); + TIFFGetField(tif,TIFFTAG_IMAGELENGTH,&ny); + TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &sampleformat); + TIFFGetFieldDefaulted(tif,TIFFTAG_BITSPERSAMPLE,&bitspersample); + TIFFGetField(tif,TIFFTAG_PHOTOMETRIC,&photo); + if (voxel_size) { + const char *s_description = 0; + float vx = 0, vy = 0, vz = 0; + if (TIFFGetField(tif,TIFFTAG_IMAGEDESCRIPTION,&s_description) && s_description) { + const char *s_desc = std::strstr(s_description,"VX="); + if (s_desc && cimg_sscanf(s_desc,"VX=%f VY=%f VZ=%f",&vx,&vy,&vz)==3) { // CImg format. + voxel_size[0] = vx; voxel_size[1] = vy; voxel_size[2] = vz; + } + s_desc = std::strstr(s_description,"spacing="); + if (s_desc && cimg_sscanf(s_desc,"spacing=%f",&vz)==1) { // fiji format. + voxel_size[2] = vz; + } + } + TIFFGetField(tif,TIFFTAG_XRESOLUTION,voxel_size); + TIFFGetField(tif,TIFFTAG_YRESOLUTION,voxel_size + 1); + voxel_size[0] = 1.0f/voxel_size[0]; + voxel_size[1] = 1.0f/voxel_size[1]; + } + if (description) { + const char *s_description = 0; + if (TIFFGetField(tif,TIFFTAG_IMAGEDESCRIPTION,&s_description) && s_description) + CImg::string(s_description).move_to(*description); + } + const unsigned int spectrum = !is_spp || photo>=3?(photo>1?3:1):samplesperpixel; + assign(nx,ny,1,spectrum); + + if ((photo>=3 && sampleformat==1 && + (bitspersample==4 || bitspersample==8) && + (samplesperpixel==1 || samplesperpixel==3 || samplesperpixel==4)) || + (bitspersample==1 && samplesperpixel==1)) { + // Special case for unsigned color images. + uint32 *const raster = (uint32*)_TIFFmalloc(nx*ny*sizeof(uint32)); + if (!raster) { + _TIFFfree(raster); TIFFClose(tif); + throw CImgException(_cimg_instance + "load_tiff(): Failed to allocate memory (%s) for file '%s'.", + cimg_instance, + cimg::strbuffersize(nx*ny*sizeof(uint32)),filename); + } + TIFFReadRGBAImage(tif,nx,ny,raster,0); + switch (spectrum) { + case 1 : + cimg_forXY(*this,x,y) + (*this)(x,y,0) = (T)(float)TIFFGetR(raster[nx*(ny - 1 -y) + x]); + break; + case 3 : + cimg_forXY(*this,x,y) { + (*this)(x,y,0) = (T)(float)TIFFGetR(raster[nx*(ny - 1 -y) + x]); + (*this)(x,y,1) = (T)(float)TIFFGetG(raster[nx*(ny - 1 -y) + x]); + (*this)(x,y,2) = (T)(float)TIFFGetB(raster[nx*(ny - 1 -y) + x]); + } + break; + case 4 : + cimg_forXY(*this,x,y) { + (*this)(x,y,0) = (T)(float)TIFFGetR(raster[nx*(ny - 1 - y) + x]); + (*this)(x,y,1) = (T)(float)TIFFGetG(raster[nx*(ny - 1 - y) + x]); + (*this)(x,y,2) = (T)(float)TIFFGetB(raster[nx*(ny - 1 - y) + x]); + (*this)(x,y,3) = (T)(float)TIFFGetA(raster[nx*(ny - 1 - y) + x]); + } + break; + } + _TIFFfree(raster); + } else { // Other cases. + uint16 config; + TIFFGetField(tif,TIFFTAG_PLANARCONFIG,&config); + if (TIFFIsTiled(tif)) { + uint32 tw = 1, th = 1; + TIFFGetField(tif,TIFFTAG_TILEWIDTH,&tw); + TIFFGetField(tif,TIFFTAG_TILELENGTH,&th); + if (config==PLANARCONFIG_CONTIG) switch (bitspersample) { + case 8 : + if (sampleformat==SAMPLEFORMAT_UINT) + _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); + else _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); + break; + case 16 : + if (sampleformat==SAMPLEFORMAT_UINT) + _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); + else _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); + break; + case 32 : + if (sampleformat==SAMPLEFORMAT_UINT) + _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); + else if (sampleformat==SAMPLEFORMAT_INT) + _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); + else _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); + break; + case 64 : + if (sampleformat==SAMPLEFORMAT_UINT) + _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); + else if (sampleformat==SAMPLEFORMAT_INT) + _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); + else _load_tiff_tiled_contig(tif,samplesperpixel,nx,ny,tw,th); + break; + } else switch (bitspersample) { + case 8 : + if (sampleformat==SAMPLEFORMAT_UINT) + _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); + else _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); + break; + case 16 : + if (sampleformat==SAMPLEFORMAT_UINT) + _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); + else _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); + break; + case 32 : + if (sampleformat==SAMPLEFORMAT_UINT) + _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); + else if (sampleformat==SAMPLEFORMAT_INT) + _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); + else _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); + break; + case 64 : + if (sampleformat==SAMPLEFORMAT_UINT) + _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); + else if (sampleformat==SAMPLEFORMAT_INT) + _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); + else _load_tiff_tiled_separate(tif,samplesperpixel,nx,ny,tw,th); + break; + } + } else { + if (config==PLANARCONFIG_CONTIG) switch (bitspersample) { + case 8 : + if (sampleformat==SAMPLEFORMAT_UINT) + _load_tiff_contig(tif,samplesperpixel,nx,ny); + else _load_tiff_contig(tif,samplesperpixel,nx,ny); + break; + case 16 : + if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_contig(tif,samplesperpixel,nx,ny); + else _load_tiff_contig(tif,samplesperpixel,nx,ny); + break; + case 32 : + if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_contig(tif,samplesperpixel,nx,ny); + else if (sampleformat==SAMPLEFORMAT_INT) _load_tiff_contig(tif,samplesperpixel,nx,ny); + else _load_tiff_contig(tif,samplesperpixel,nx,ny); + break; + case 64 : + if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_contig(tif,samplesperpixel,nx,ny); + else if (sampleformat==SAMPLEFORMAT_INT) _load_tiff_contig(tif,samplesperpixel,nx,ny); + else _load_tiff_contig(tif,samplesperpixel,nx,ny); + break; + } else switch (bitspersample) { + case 8 : + if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_separate(tif,samplesperpixel,nx,ny); + else _load_tiff_separate(tif,samplesperpixel,nx,ny); + break; + case 16 : + if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_separate(tif,samplesperpixel,nx,ny); + else _load_tiff_separate(tif,samplesperpixel,nx,ny); + break; + case 32 : + if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_separate(tif,samplesperpixel,nx,ny); + else if (sampleformat==SAMPLEFORMAT_INT) _load_tiff_separate(tif,samplesperpixel,nx,ny); + else _load_tiff_separate(tif,samplesperpixel,nx,ny); + break; + case 64 : + if (sampleformat==SAMPLEFORMAT_UINT) _load_tiff_separate(tif,samplesperpixel,nx,ny); + else if (sampleformat==SAMPLEFORMAT_INT) _load_tiff_separate(tif,samplesperpixel,nx,ny); + else _load_tiff_separate(tif,samplesperpixel,nx,ny); + break; + } + } + } + return *this; + } +#endif + + //! Load image from a MINC2 file. + /** + \param filename Filename, as a C-string. + **/ + // (Original code by Haz-Edine Assemlal). + CImg& load_minc2(const char *const filename) { + if (!filename) + throw CImgArgumentException(_cimg_instance + "load_minc2(): Specified filename is (null).", + cimg_instance); +#ifndef cimg_use_minc2 + return load_other(filename); +#else + minc::minc_1_reader rdr; + rdr.open(filename); + assign(rdr.ndim(1)?rdr.ndim(1):1, + rdr.ndim(2)?rdr.ndim(2):1, + rdr.ndim(3)?rdr.ndim(3):1, + rdr.ndim(4)?rdr.ndim(4):1); + if (cimg::type::string()==cimg::type::string()) + rdr.setup_read_byte(); + else if (cimg::type::string()==cimg::type::string()) + rdr.setup_read_int(); + else if (cimg::type::string()==cimg::type::string()) + rdr.setup_read_double(); + else + rdr.setup_read_float(); + minc::load_standard_volume(rdr,this->_data); + return *this; +#endif + } + + //! Load image from a MINC2 file \newinstance. + static CImg get_load_minc2(const char *const filename) { + return CImg().load_analyze(filename); + } + + //! Load image from an ANALYZE7.5/NIFTI file. + /** + \param filename Filename, as a C-string. + \param[out] voxel_size Pointer to the three voxel sizes read from the file. + **/ + CImg& load_analyze(const char *const filename, float *const voxel_size=0) { + return _load_analyze(0,filename,voxel_size); + } + + //! Load image from an ANALYZE7.5/NIFTI file \newinstance. + static CImg get_load_analyze(const char *const filename, float *const voxel_size=0) { + return CImg().load_analyze(filename,voxel_size); + } + + //! Load image from an ANALYZE7.5/NIFTI file \overloading. + CImg& load_analyze(std::FILE *const file, float *const voxel_size=0) { + return _load_analyze(file,0,voxel_size); + } + + //! Load image from an ANALYZE7.5/NIFTI file \newinstance. + static CImg get_load_analyze(std::FILE *const file, float *const voxel_size=0) { + return CImg().load_analyze(file,voxel_size); + } + + CImg& _load_analyze(std::FILE *const file, const char *const filename, float *const voxel_size=0) { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_analyze(): Specified filename is (null).", + cimg_instance); + + std::FILE *nfile_header = 0, *nfile = 0; + if (!file) { + CImg body(1024); + const char *const ext = cimg::split_filename(filename,body); + if (!cimg::strcasecmp(ext,"hdr")) { // File is an Analyze header file. + nfile_header = cimg::fopen(filename,"rb"); + cimg_sprintf(body._data + std::strlen(body),".img"); + nfile = cimg::fopen(body,"rb"); + } else if (!cimg::strcasecmp(ext,"img")) { // File is an Analyze data file. + nfile = cimg::fopen(filename,"rb"); + cimg_sprintf(body._data + std::strlen(body),".hdr"); + nfile_header = cimg::fopen(body,"rb"); + } else nfile_header = nfile = cimg::fopen(filename,"rb"); // File is a Niftii file. + } else nfile_header = nfile = file; // File is a Niftii file. + if (!nfile || !nfile_header) + throw CImgIOException(_cimg_instance + "load_analyze(): Invalid Analyze7.5 or NIFTI header in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + + // Read header. + bool endian = false; + unsigned int header_size; + cimg::fread(&header_size,1,nfile_header); + if (!header_size) + throw CImgIOException(_cimg_instance + "load_analyze(): Invalid zero-size header in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + if (header_size>=4096) { endian = true; cimg::invert_endianness(header_size); } + + unsigned char *const header = new unsigned char[header_size]; + cimg::fread(header + 4,header_size - 4,nfile_header); + if (!file && nfile_header!=nfile) cimg::fclose(nfile_header); + if (endian) { + cimg::invert_endianness((short*)(header + 40),5); + cimg::invert_endianness((short*)(header + 70),1); + cimg::invert_endianness((short*)(header + 72),1); + cimg::invert_endianness((float*)(header + 76),4); + cimg::invert_endianness((float*)(header + 108),1); + cimg::invert_endianness((float*)(header + 112),1); + } + + if (nfile_header==nfile) { + const unsigned int vox_offset = (unsigned int)*(float*)(header + 108); + std::fseek(nfile,vox_offset,SEEK_SET); + } + + unsigned short *dim = (unsigned short*)(header + 40), dimx = 1, dimy = 1, dimz = 1, dimv = 1; + if (!dim[0]) + cimg::warn(_cimg_instance + "load_analyze(): File '%s' defines an image with zero dimensions.", + cimg_instance, + filename?filename:"(FILE*)"); + + if (dim[0]>4) + cimg::warn(_cimg_instance + "load_analyze(): File '%s' defines an image with %u dimensions, reading only the 4 first.", + cimg_instance, + filename?filename:"(FILE*)",dim[0]); + + if (dim[0]>=1) dimx = dim[1]; + if (dim[0]>=2) dimy = dim[2]; + if (dim[0]>=3) dimz = dim[3]; + if (dim[0]>=4) dimv = dim[4]; + float scalefactor = *(float*)(header + 112); if (scalefactor==0) scalefactor = 1; + const unsigned short datatype = *(unsigned short*)(header + 70); + if (voxel_size) { + const float *vsize = (float*)(header + 76); + voxel_size[0] = vsize[1]; voxel_size[1] = vsize[2]; voxel_size[2] = vsize[3]; + } + delete[] header; + + // Read pixel data. + assign(dimx,dimy,dimz,dimv); + const size_t pdim = (size_t)dimx*dimy*dimz*dimv; + switch (datatype) { + case 2 : { + unsigned char *const buffer = new unsigned char[pdim]; + cimg::fread(buffer,pdim,nfile); + cimg_foroff(*this,off) _data[off] = (T)(buffer[off]*scalefactor); + delete[] buffer; + } break; + case 4 : { + short *const buffer = new short[pdim]; + cimg::fread(buffer,pdim,nfile); + if (endian) cimg::invert_endianness(buffer,pdim); + cimg_foroff(*this,off) _data[off] = (T)(buffer[off]*scalefactor); + delete[] buffer; + } break; + case 8 : { + int *const buffer = new int[pdim]; + cimg::fread(buffer,pdim,nfile); + if (endian) cimg::invert_endianness(buffer,pdim); + cimg_foroff(*this,off) _data[off] = (T)(buffer[off]*scalefactor); + delete[] buffer; + } break; + case 16 : { + float *const buffer = new float[pdim]; + cimg::fread(buffer,pdim,nfile); + if (endian) cimg::invert_endianness(buffer,pdim); + cimg_foroff(*this,off) _data[off] = (T)(buffer[off]*scalefactor); + delete[] buffer; + } break; + case 64 : { + double *const buffer = new double[pdim]; + cimg::fread(buffer,pdim,nfile); + if (endian) cimg::invert_endianness(buffer,pdim); + cimg_foroff(*this,off) _data[off] = (T)(buffer[off]*scalefactor); + delete[] buffer; + } break; + default : + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_analyze(): Unable to load datatype %d in file '%s'", + cimg_instance, + datatype,filename?filename:"(FILE*)"); + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Load image from a .cimg[z] file. + /** + \param filename Filename, as a C-string. + \param axis Appending axis, if file contains multiple images. Can be { 'x' | 'y' | 'z' | 'c' }. + \param align Appending alignment. + **/ + CImg& load_cimg(const char *const filename, const char axis='z', const float align=0) { + CImgList list; + list.load_cimg(filename); + if (list._width==1) return list[0].move_to(*this); + return assign(list.get_append(axis,align)); + } + + //! Load image from a .cimg[z] file \newinstance + static CImg get_load_cimg(const char *const filename, const char axis='z', const float align=0) { + return CImg().load_cimg(filename,axis,align); + } + + //! Load image from a .cimg[z] file \overloading. + CImg& load_cimg(std::FILE *const file, const char axis='z', const float align=0) { + CImgList list; + list.load_cimg(file); + if (list._width==1) return list[0].move_to(*this); + return assign(list.get_append(axis,align)); + } + + //! Load image from a .cimg[z] file \newinstance + static CImg get_load_cimg(std::FILE *const file, const char axis='z', const float align=0) { + return CImg().load_cimg(file,axis,align); + } + + //! Load sub-images of a .cimg file. + /** + \param filename Filename, as a C-string. + \param n0 Starting frame. + \param n1 Ending frame (~0U for max). + \param x0 X-coordinate of the starting sub-image vertex. + \param y0 Y-coordinate of the starting sub-image vertex. + \param z0 Z-coordinate of the starting sub-image vertex. + \param c0 C-coordinate of the starting sub-image vertex. + \param x1 X-coordinate of the ending sub-image vertex (~0U for max). + \param y1 Y-coordinate of the ending sub-image vertex (~0U for max). + \param z1 Z-coordinate of the ending sub-image vertex (~0U for max). + \param c1 C-coordinate of the ending sub-image vertex (~0U for max). + \param axis Appending axis, if file contains multiple images. Can be { 'x' | 'y' | 'z' | 'c' }. + \param align Appending alignment. + **/ + CImg& load_cimg(const char *const filename, + const unsigned int n0, const unsigned int n1, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0, + const unsigned int x1, const unsigned int y1, + const unsigned int z1, const unsigned int c1, + const char axis='z', const float align=0) { + CImgList list; + list.load_cimg(filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); + if (list._width==1) return list[0].move_to(*this); + return assign(list.get_append(axis,align)); + } + + //! Load sub-images of a .cimg file \newinstance. + static CImg get_load_cimg(const char *const filename, + const unsigned int n0, const unsigned int n1, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0, + const unsigned int x1, const unsigned int y1, + const unsigned int z1, const unsigned int c1, + const char axis='z', const float align=0) { + return CImg().load_cimg(filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1,axis,align); + } + + //! Load sub-images of a .cimg file \overloading. + CImg& load_cimg(std::FILE *const file, + const unsigned int n0, const unsigned int n1, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0, + const unsigned int x1, const unsigned int y1, + const unsigned int z1, const unsigned int c1, + const char axis='z', const float align=0) { + CImgList list; + list.load_cimg(file,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); + if (list._width==1) return list[0].move_to(*this); + return assign(list.get_append(axis,align)); + } + + //! Load sub-images of a .cimg file \newinstance. + static CImg get_load_cimg(std::FILE *const file, + const unsigned int n0, const unsigned int n1, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0, + const unsigned int x1, const unsigned int y1, + const unsigned int z1, const unsigned int c1, + const char axis='z', const float align=0) { + return CImg().load_cimg(file,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1,axis,align); + } + + //! Load image from an INRIMAGE-4 file. + /** + \param filename Filename, as a C-string. + \param[out] voxel_size Pointer to the three voxel sizes read from the file. + **/ + CImg& load_inr(const char *const filename, float *const voxel_size=0) { + return _load_inr(0,filename,voxel_size); + } + + //! Load image from an INRIMAGE-4 file \newinstance. + static CImg get_load_inr(const char *const filename, float *const voxel_size=0) { + return CImg().load_inr(filename,voxel_size); + } + + //! Load image from an INRIMAGE-4 file \overloading. + CImg& load_inr(std::FILE *const file, float *const voxel_size=0) { + return _load_inr(file,0,voxel_size); + } + + //! Load image from an INRIMAGE-4 file \newinstance. + static CImg get_load_inr(std::FILE *const file, float *voxel_size=0) { + return CImg().load_inr(file,voxel_size); + } + + static void _load_inr_header(std::FILE *file, int out[8], float *const voxel_size) { + CImg item(1024), tmp1(64), tmp2(64); + *item = *tmp1 = *tmp2 = 0; + out[0] = std::fscanf(file,"%63s",item._data); + out[0] = out[1] = out[2] = out[3] = out[5] = 1; out[4] = out[6] = out[7] = -1; + if (cimg::strncasecmp(item,"#INRIMAGE-4#{",13)!=0) + throw CImgIOException("CImg<%s>::load_inr(): INRIMAGE-4 header not found.", + pixel_type()); + + while (std::fscanf(file," %63[^\n]%*c",item._data)!=EOF && std::strncmp(item,"##}",3)) { + cimg_sscanf(item," XDIM%*[^0-9]%d",out); + cimg_sscanf(item," YDIM%*[^0-9]%d",out + 1); + cimg_sscanf(item," ZDIM%*[^0-9]%d",out + 2); + cimg_sscanf(item," VDIM%*[^0-9]%d",out + 3); + cimg_sscanf(item," PIXSIZE%*[^0-9]%d",out + 6); + if (voxel_size) { + cimg_sscanf(item," VX%*[^0-9.+-]%f",voxel_size); + cimg_sscanf(item," VY%*[^0-9.+-]%f",voxel_size + 1); + cimg_sscanf(item," VZ%*[^0-9.+-]%f",voxel_size + 2); + } + if (cimg_sscanf(item," CPU%*[ =]%s",tmp1._data)) out[7] = cimg::strncasecmp(tmp1,"sun",3)?0:1; + switch (cimg_sscanf(item," TYPE%*[ =]%s %s",tmp1._data,tmp2._data)) { + case 0 : break; + case 2 : + out[5] = cimg::strncasecmp(tmp1,"unsigned",8)?1:0; + std::strncpy(tmp1,tmp2,tmp1._width - 1); // fallthrough + case 1 : + if (!cimg::strncasecmp(tmp1,"int",3) || !cimg::strncasecmp(tmp1,"fixed",5)) out[4] = 0; + if (!cimg::strncasecmp(tmp1,"float",5) || !cimg::strncasecmp(tmp1,"double",6)) out[4] = 1; + if (!cimg::strncasecmp(tmp1,"packed",6)) out[4] = 2; + if (out[4]>=0) break; // fallthrough + default : + throw CImgIOException("CImg<%s>::load_inr(): Invalid pixel type '%s' defined in header.", + pixel_type(), + tmp2._data); + } + } + if (out[0]<0 || out[1]<0 || out[2]<0 || out[3]<0) + throw CImgIOException("CImg<%s>::load_inr(): Invalid dimensions (%d,%d,%d,%d) defined in header.", + pixel_type(), + out[0],out[1],out[2],out[3]); + if (out[4]<0 || out[5]<0) + throw CImgIOException("CImg<%s>::load_inr(): Incomplete pixel type defined in header.", + pixel_type()); + if (out[6]<0) + throw CImgIOException("CImg<%s>::load_inr(): Incomplete PIXSIZE field defined in header.", + pixel_type()); + if (out[7]<0) + throw CImgIOException("CImg<%s>::load_inr(): Big/Little Endian coding type undefined in header.", + pixel_type()); + } + + CImg& _load_inr(std::FILE *const file, const char *const filename, float *const voxel_size) { +#define _cimg_load_inr_case(Tf,sign,pixsize,Ts) \ + if (!loaded && fopt[6]==pixsize && fopt[4]==Tf && fopt[5]==sign) { \ + Ts *xval, *const val = new Ts[(size_t)fopt[0]*fopt[3]]; \ + cimg_forYZ(*this,y,z) { \ + cimg::fread(val,fopt[0]*fopt[3],nfile); \ + if (fopt[7]!=endian) cimg::invert_endianness(val,fopt[0]*fopt[3]); \ + xval = val; cimg_forX(*this,x) cimg_forC(*this,c) (*this)(x,y,z,c) = (T)*(xval++); \ + } \ + delete[] val; \ + loaded = true; \ + } + + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_inr(): Specified filename is (null).", + cimg_instance); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); + int fopt[8], endian = cimg::endianness()?1:0; + bool loaded = false; + if (voxel_size) voxel_size[0] = voxel_size[1] = voxel_size[2] = 1; + _load_inr_header(nfile,fopt,voxel_size); + assign(fopt[0],fopt[1],fopt[2],fopt[3]); + _cimg_load_inr_case(0,0,8,unsigned char); + _cimg_load_inr_case(0,1,8,char); + _cimg_load_inr_case(0,0,16,unsigned short); + _cimg_load_inr_case(0,1,16,short); + _cimg_load_inr_case(0,0,32,unsigned int); + _cimg_load_inr_case(0,1,32,int); + _cimg_load_inr_case(1,0,32,float); + _cimg_load_inr_case(1,1,32,float); + _cimg_load_inr_case(1,0,64,double); + _cimg_load_inr_case(1,1,64,double); + if (!loaded) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_inr(): Unknown pixel type defined in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Load image from a EXR file. + /** + \param filename Filename, as a C-string. + **/ + CImg& load_exr(const char *const filename) { + if (!filename) + throw CImgArgumentException(_cimg_instance + "load_exr(): Specified filename is (null).", + cimg_instance); +#if defined(cimg_use_openexr) + Imf::RgbaInputFile file(filename); + Imath::Box2i dw = file.dataWindow(); + const int + inwidth = dw.max.x - dw.min.x + 1, + inheight = dw.max.y - dw.min.y + 1; + Imf::Array2D pixels; + pixels.resizeErase(inheight,inwidth); + file.setFrameBuffer(&pixels[0][0] - dw.min.x - dw.min.y*inwidth, 1, inwidth); + file.readPixels(dw.min.y, dw.max.y); + assign(inwidth,inheight,1,4); + T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2), *ptr_a = data(0,0,0,3); + cimg_forXY(*this,x,y) { + *(ptr_r++) = (T)pixels[y][x].r; + *(ptr_g++) = (T)pixels[y][x].g; + *(ptr_b++) = (T)pixels[y][x].b; + *(ptr_a++) = (T)pixels[y][x].a; + } +#elif defined(cimg_use_tinyexr) + float *res; + const char *err = 0; + int width = 0, height = 0; + const int ret = LoadEXR(&res,&width,&height,filename,&err); + if (ret) throw CImgIOException(_cimg_instance + "load_exr(): Unable to load EXR file '%s'.", + cimg_instance,filename); + CImg(out,4,width,height,1,true).get_permute_axes("yzcx").move_to(*this); + std::free(res); +#else + return load_other(filename); +#endif + return *this; + } + + //! Load image from a EXR file \newinstance. + static CImg get_load_exr(const char *const filename) { + return CImg().load_exr(filename); + } + + //! Load image from a PANDORE-5 file. + /** + \param filename Filename, as a C-string. + **/ + CImg& load_pandore(const char *const filename) { + return _load_pandore(0,filename); + } + + //! Load image from a PANDORE-5 file \newinstance. + static CImg get_load_pandore(const char *const filename) { + return CImg().load_pandore(filename); + } + + //! Load image from a PANDORE-5 file \overloading. + CImg& load_pandore(std::FILE *const file) { + return _load_pandore(file,0); + } + + //! Load image from a PANDORE-5 file \newinstance. + static CImg get_load_pandore(std::FILE *const file) { + return CImg().load_pandore(file); + } + + CImg& _load_pandore(std::FILE *const file, const char *const filename) { +#define __cimg_load_pandore_case(nbdim,nwidth,nheight,ndepth,ndim,stype) \ + cimg::fread(dims,nbdim,nfile); \ + if (endian) cimg::invert_endianness(dims,nbdim); \ + assign(nwidth,nheight,ndepth,ndim); \ + const size_t siz = size(); \ + stype *buffer = new stype[siz]; \ + cimg::fread(buffer,siz,nfile); \ + if (endian) cimg::invert_endianness(buffer,siz); \ + T *ptrd = _data; \ + cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); \ + buffer-=siz; \ + delete[] buffer + +#define _cimg_load_pandore_case(nbdim,nwidth,nheight,ndepth,dim,stype1,stype2,stype3,ltype) { \ + if (sizeof(stype1)==ltype) { __cimg_load_pandore_case(nbdim,nwidth,nheight,ndepth,dim,stype1); } \ + else if (sizeof(stype2)==ltype) { __cimg_load_pandore_case(nbdim,nwidth,nheight,ndepth,dim,stype2); } \ + else if (sizeof(stype3)==ltype) { __cimg_load_pandore_case(nbdim,nwidth,nheight,ndepth,dim,stype3); } \ + else throw CImgIOException(_cimg_instance \ + "load_pandore(): Unknown pixel datatype in file '%s'.", \ + cimg_instance, \ + filename?filename:"(FILE*)"); } + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_pandore(): Specified filename is (null).", + cimg_instance); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); + CImg header(32); + cimg::fread(header._data,12,nfile); + if (cimg::strncasecmp("PANDORE",header,7)) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_pandore(): PANDORE header not found in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + } + unsigned int imageid, dims[8] = { 0 }; + int ptbuf[4] = { 0 }; + cimg::fread(&imageid,1,nfile); + const bool endian = imageid>255; + if (endian) cimg::invert_endianness(imageid); + cimg::fread(header._data,20,nfile); + + switch (imageid) { + case 2 : _cimg_load_pandore_case(2,dims[1],1,1,1,unsigned char,unsigned char,unsigned char,1); break; + case 3 : _cimg_load_pandore_case(2,dims[1],1,1,1,long,int,short,4); break; + case 4 : _cimg_load_pandore_case(2,dims[1],1,1,1,double,float,float,4); break; + case 5 : _cimg_load_pandore_case(3,dims[2],dims[1],1,1,unsigned char,unsigned char,unsigned char,1); break; + case 6 : _cimg_load_pandore_case(3,dims[2],dims[1],1,1,long,int,short,4); break; + case 7 : _cimg_load_pandore_case(3,dims[2],dims[1],1,1,double,float,float,4); break; + case 8 : _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],1,unsigned char,unsigned char,unsigned char,1); break; + case 9 : _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],1,long,int,short,4); break; + case 10 : _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],1,double,float,float,4); break; + case 11 : { // Region 1d + cimg::fread(dims,3,nfile); + if (endian) cimg::invert_endianness(dims,3); + assign(dims[1],1,1,1); + const unsigned siz = size(); + if (dims[2]<256) { + unsigned char *buffer = new unsigned char[siz]; + cimg::fread(buffer,siz,nfile); + T *ptrd = _data; + cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); + buffer-=siz; + delete[] buffer; + } else { + if (dims[2]<65536) { + unsigned short *buffer = new unsigned short[siz]; + cimg::fread(buffer,siz,nfile); + if (endian) cimg::invert_endianness(buffer,siz); + T *ptrd = _data; + cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); + buffer-=siz; + delete[] buffer; + } else { + unsigned int *buffer = new unsigned int[siz]; + cimg::fread(buffer,siz,nfile); + if (endian) cimg::invert_endianness(buffer,siz); + T *ptrd = _data; + cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); + buffer-=siz; + delete[] buffer; + } + } + } + break; + case 12 : { // Region 2d + cimg::fread(dims,4,nfile); + if (endian) cimg::invert_endianness(dims,4); + assign(dims[2],dims[1],1,1); + const size_t siz = size(); + if (dims[3]<256) { + unsigned char *buffer = new unsigned char[siz]; + cimg::fread(buffer,siz,nfile); + T *ptrd = _data; + cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); + buffer-=siz; + delete[] buffer; + } else { + if (dims[3]<65536) { + unsigned short *buffer = new unsigned short[siz]; + cimg::fread(buffer,siz,nfile); + if (endian) cimg::invert_endianness(buffer,siz); + T *ptrd = _data; + cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); + buffer-=siz; + delete[] buffer; + } else { + unsigned int *buffer = new unsigned int[siz]; + cimg::fread(buffer,siz,nfile); + if (endian) cimg::invert_endianness(buffer,siz); + T *ptrd = _data; + cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); + buffer-=siz; + delete[] buffer; + } + } + } + break; + case 13 : { // Region 3d + cimg::fread(dims,5,nfile); + if (endian) cimg::invert_endianness(dims,5); + assign(dims[3],dims[2],dims[1],1); + const size_t siz = size(); + if (dims[4]<256) { + unsigned char *buffer = new unsigned char[siz]; + cimg::fread(buffer,siz,nfile); + T *ptrd = _data; + cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); + buffer-=siz; + delete[] buffer; + } else { + if (dims[4]<65536) { + unsigned short *buffer = new unsigned short[siz]; + cimg::fread(buffer,siz,nfile); + if (endian) cimg::invert_endianness(buffer,siz); + T *ptrd = _data; + cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); + buffer-=siz; + delete[] buffer; + } else { + unsigned int *buffer = new unsigned int[siz]; + cimg::fread(buffer,siz,nfile); + if (endian) cimg::invert_endianness(buffer,siz); + T *ptrd = _data; + cimg_foroff(*this,off) *(ptrd++) = (T)*(buffer++); + buffer-=siz; + delete[] buffer; + } + } + } + break; + case 16 : _cimg_load_pandore_case(4,dims[2],dims[1],1,3,unsigned char,unsigned char,unsigned char,1); break; + case 17 : _cimg_load_pandore_case(4,dims[2],dims[1],1,3,long,int,short,4); break; + case 18 : _cimg_load_pandore_case(4,dims[2],dims[1],1,3,double,float,float,4); break; + case 19 : _cimg_load_pandore_case(5,dims[3],dims[2],dims[1],3,unsigned char,unsigned char,unsigned char,1); break; + case 20 : _cimg_load_pandore_case(5,dims[3],dims[2],dims[1],3,long,int,short,4); break; + case 21 : _cimg_load_pandore_case(5,dims[3],dims[2],dims[1],3,double,float,float,4); break; + case 22 : _cimg_load_pandore_case(2,dims[1],1,1,dims[0],unsigned char,unsigned char,unsigned char,1); break; + case 23 : _cimg_load_pandore_case(2,dims[1],1,1,dims[0],long,int,short,4); break; + case 24 : _cimg_load_pandore_case(2,dims[1],1,1,dims[0],unsigned long,unsigned int,unsigned short,4); break; + case 25 : _cimg_load_pandore_case(2,dims[1],1,1,dims[0],double,float,float,4); break; + case 26 : _cimg_load_pandore_case(3,dims[2],dims[1],1,dims[0],unsigned char,unsigned char,unsigned char,1); break; + case 27 : _cimg_load_pandore_case(3,dims[2],dims[1],1,dims[0],long,int,short,4); break; + case 28 : _cimg_load_pandore_case(3,dims[2],dims[1],1,dims[0],unsigned long,unsigned int,unsigned short,4); break; + case 29 : _cimg_load_pandore_case(3,dims[2],dims[1],1,dims[0],double,float,float,4); break; + case 30 : _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],dims[0],unsigned char,unsigned char,unsigned char,1); + break; + case 31 : _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],dims[0],long,int,short,4); break; + case 32 : _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],dims[0],unsigned long,unsigned int,unsigned short,4); + break; + case 33 : _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],dims[0],double,float,float,4); break; + case 34 : { // Points 1d + cimg::fread(ptbuf,1,nfile); + if (endian) cimg::invert_endianness(ptbuf,1); + assign(1); (*this)(0) = (T)ptbuf[0]; + } break; + case 35 : { // Points 2d + cimg::fread(ptbuf,2,nfile); + if (endian) cimg::invert_endianness(ptbuf,2); + assign(2); (*this)(0) = (T)ptbuf[1]; (*this)(1) = (T)ptbuf[0]; + } break; + case 36 : { // Points 3d + cimg::fread(ptbuf,3,nfile); + if (endian) cimg::invert_endianness(ptbuf,3); + assign(3); (*this)(0) = (T)ptbuf[2]; (*this)(1) = (T)ptbuf[1]; (*this)(2) = (T)ptbuf[0]; + } break; + default : + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_pandore(): Unable to load data with ID_type %u in file '%s'.", + cimg_instance, + imageid,filename?filename:"(FILE*)"); + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Load image from a PAR-REC (Philips) file. + /** + \param filename Filename, as a C-string. + \param axis Appending axis, if file contains multiple images. Can be { 'x' | 'y' | 'z' | 'c' }. + \param align Appending alignment. + **/ + CImg& load_parrec(const char *const filename, const char axis='c', const float align=0) { + CImgList list; + list.load_parrec(filename); + if (list._width==1) return list[0].move_to(*this); + return assign(list.get_append(axis,align)); + } + + //! Load image from a PAR-REC (Philips) file \newinstance. + static CImg get_load_parrec(const char *const filename, const char axis='c', const float align=0) { + return CImg().load_parrec(filename,axis,align); + } + + //! Load image from a raw binary file. + /** + \param filename Filename, as a C-string. + \param size_x Width of the image buffer. + \param size_y Height of the image buffer. + \param size_z Depth of the image buffer. + \param size_c Spectrum of the image buffer. + \param is_multiplexed Tells if the image values are multiplexed along the C-axis. + \param invert_endianness Tells if the endianness of the image buffer must be inverted. + \param offset Starting offset of the read in the specified file. + **/ + CImg& load_raw(const char *const filename, + const unsigned int size_x=0, const unsigned int size_y=1, + const unsigned int size_z=1, const unsigned int size_c=1, + const bool is_multiplexed=false, const bool invert_endianness=false, + const ulongT offset=0) { + return _load_raw(0,filename,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); + } + + //! Load image from a raw binary file \newinstance. + static CImg get_load_raw(const char *const filename, + const unsigned int size_x=0, const unsigned int size_y=1, + const unsigned int size_z=1, const unsigned int size_c=1, + const bool is_multiplexed=false, const bool invert_endianness=false, + const ulongT offset=0) { + return CImg().load_raw(filename,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); + } + + //! Load image from a raw binary file \overloading. + CImg& load_raw(std::FILE *const file, + const unsigned int size_x=0, const unsigned int size_y=1, + const unsigned int size_z=1, const unsigned int size_c=1, + const bool is_multiplexed=false, const bool invert_endianness=false, + const ulongT offset=0) { + return _load_raw(file,0,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); + } + + //! Load image from a raw binary file \newinstance. + static CImg get_load_raw(std::FILE *const file, + const unsigned int size_x=0, const unsigned int size_y=1, + const unsigned int size_z=1, const unsigned int size_c=1, + const bool is_multiplexed=false, const bool invert_endianness=false, + const ulongT offset=0) { + return CImg().load_raw(file,size_x,size_y,size_z,size_c,is_multiplexed,invert_endianness,offset); + } + + CImg& _load_raw(std::FILE *const file, const char *const filename, + const unsigned int size_x, const unsigned int size_y, + const unsigned int size_z, const unsigned int size_c, + const bool is_multiplexed, const bool invert_endianness, + const ulongT offset) { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_raw(): Specified filename is (null).", + cimg_instance); + if (cimg::is_directory(filename)) + throw CImgArgumentException(_cimg_instance + "load_raw(): Specified filename '%s' is a directory.", + cimg_instance,filename); + + ulongT siz = (ulongT)size_x*size_y*size_z*size_c; + unsigned int + _size_x = size_x, + _size_y = size_y, + _size_z = size_z, + _size_c = size_c; + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); + if (!siz) { // Retrieve file size. + const longT fpos = cimg::ftell(nfile); + if (fpos<0) throw CImgArgumentException(_cimg_instance + "load_raw(): Cannot determine size of input file '%s'.", + cimg_instance,filename?filename:"(FILE*)"); + cimg::fseek(nfile,0,SEEK_END); + siz = cimg::ftell(nfile)/sizeof(T); + _size_y = (unsigned int)siz; + _size_x = _size_z = _size_c = 1; + cimg::fseek(nfile,fpos,SEEK_SET); + } + cimg::fseek(nfile,offset,SEEK_SET); + assign(_size_x,_size_y,_size_z,_size_c,0); + if (siz && (!is_multiplexed || size_c==1)) { + cimg::fread(_data,siz,nfile); + if (invert_endianness) cimg::invert_endianness(_data,siz); + } else if (siz) { + CImg buf(1,1,1,_size_c); + cimg_forXYZ(*this,x,y,z) { + cimg::fread(buf._data,_size_c,nfile); + if (invert_endianness) cimg::invert_endianness(buf._data,_size_c); + set_vector_at(buf,x,y,z); + } + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Load image sequence from a YUV file. + /** + \param filename Filename, as a C-string. + \param size_x Width of the frames. + \param size_y Height of the frames. + \param chroma_subsampling Type of chroma subsampling. Can be { 420 | 422 | 444 }. + \param first_frame Index of the first frame to read. + \param last_frame Index of the last frame to read. + \param step_frame Step value for frame reading. + \param yuv2rgb Tells if the YUV to RGB transform must be applied. + \param axis Appending axis, if file contains multiple images. Can be { 'x' | 'y' | 'z' | 'c' }. + **/ + CImg& load_yuv(const char *const filename, + const unsigned int size_x, const unsigned int size_y=1, + const unsigned int chroma_subsampling=444, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { + return get_load_yuv(filename,size_x,size_y,chroma_subsampling, + first_frame,last_frame,step_frame,yuv2rgb,axis).move_to(*this); + } + + //! Load image sequence from a YUV file \newinstance. + static CImg get_load_yuv(const char *const filename, + const unsigned int size_x, const unsigned int size_y=1, + const unsigned int chroma_subsampling=444, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { + return CImgList().load_yuv(filename,size_x,size_y,chroma_subsampling, + first_frame,last_frame,step_frame,yuv2rgb).get_append(axis); + } + + //! Load image sequence from a YUV file \overloading. + CImg& load_yuv(std::FILE *const file, + const unsigned int size_x, const unsigned int size_y=1, + const unsigned int chroma_subsampling=444, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { + return get_load_yuv(file,size_x,size_y,chroma_subsampling, + first_frame,last_frame,step_frame,yuv2rgb,axis).move_to(*this); + } + + //! Load image sequence from a YUV file \newinstance. + static CImg get_load_yuv(std::FILE *const file, + const unsigned int size_x, const unsigned int size_y=1, + const unsigned int chroma_subsampling=444, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, const bool yuv2rgb=true, const char axis='z') { + return CImgList().load_yuv(file,size_x,size_y,chroma_subsampling, + first_frame,last_frame,step_frame,yuv2rgb).get_append(axis); + } + + //! Load 3d object from a .OFF file. + /** + \param[out] primitives Primitives data of the 3d object. + \param[out] colors Colors data of the 3d object. + \param filename Filename, as a C-string. + **/ + template + CImg& load_off(CImgList& primitives, CImgList& colors, const char *const filename) { + return _load_off(primitives,colors,0,filename); + } + + //! Load 3d object from a .OFF file \newinstance. + template + static CImg get_load_off(CImgList& primitives, CImgList& colors, const char *const filename) { + return CImg().load_off(primitives,colors,filename); + } + + //! Load 3d object from a .OFF file \overloading. + template + CImg& load_off(CImgList& primitives, CImgList& colors, std::FILE *const file) { + return _load_off(primitives,colors,file,0); + } + + //! Load 3d object from a .OFF file \newinstance. + template + static CImg get_load_off(CImgList& primitives, CImgList& colors, std::FILE *const file) { + return CImg().load_off(primitives,colors,file); + } + + template + CImg& _load_off(CImgList& primitives, CImgList& colors, + std::FILE *const file, const char *const filename) { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "load_off(): Specified filename is (null).", + cimg_instance); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"r"); + unsigned int nb_points = 0, nb_primitives = 0, nb_read = 0; + CImg line(256); *line = 0; + int err; + + // Skip comments, and read magic string OFF + do { err = std::fscanf(nfile,"%255[^\n] ",line._data); } while (!err || (err==1 && *line=='#')); + if (cimg::strncasecmp(line,"OFF",3) && cimg::strncasecmp(line,"COFF",4)) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_off(): OFF header not found in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + } + do { err = std::fscanf(nfile,"%255[^\n] ",line._data); } while (!err || (err==1 && *line=='#')); + if ((err = cimg_sscanf(line,"%u%u%*[^\n] ",&nb_points,&nb_primitives))!=2) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_off(): Invalid number of vertices or primitives specified in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + } + + // Read points data + assign(nb_points,3); + float X = 0, Y = 0, Z = 0; + cimg_forX(*this,l) { + do { err = std::fscanf(nfile,"%255[^\n] ",line._data); } while (!err || (err==1 && *line=='#')); + if ((err = cimg_sscanf(line,"%f%f%f%*[^\n] ",&X,&Y,&Z))!=3) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "load_off(): Failed to read vertex %u/%u in file '%s'.", + cimg_instance, + l + 1,nb_points,filename?filename:"(FILE*)"); + } + (*this)(l,0) = (T)X; (*this)(l,1) = (T)Y; (*this)(l,2) = (T)Z; + } + + // Read primitive data + primitives.assign(); + colors.assign(); + bool stop_flag = false; + while (!stop_flag) { + float c0 = 0.7f, c1 = 0.7f, c2 = 0.7f; + unsigned int prim = 0, i0 = 0, i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0; + *line = 0; + if ((err = std::fscanf(nfile,"%u",&prim))!=1) stop_flag = true; + else { + ++nb_read; + switch (prim) { + case 1 : { + if ((err = std::fscanf(nfile,"%u%255[^\n] ",&i0,line._data))<2) { + cimg::warn(_cimg_instance + "load_off(): Failed to read primitive %u/%u from file '%s'.", + cimg_instance, + nb_read,nb_primitives,filename?filename:"(FILE*)"); + + err = std::fscanf(nfile,"%*[^\n] "); + } else { + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); + CImg::vector(i0).move_to(primitives); + CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); + } + } break; + case 2 : { + if ((err = std::fscanf(nfile,"%u%u%255[^\n] ",&i0,&i1,line._data))<2) { + cimg::warn(_cimg_instance + "load_off(): Failed to read primitive %u/%u from file '%s'.", + cimg_instance, + nb_read,nb_primitives,filename?filename:"(FILE*)"); + + err = std::fscanf(nfile,"%*[^\n] "); + } else { + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); + CImg::vector(i0,i1).move_to(primitives); + CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); + } + } break; + case 3 : { + if ((err = std::fscanf(nfile,"%u%u%u%255[^\n] ",&i0,&i1,&i2,line._data))<3) { + cimg::warn(_cimg_instance + "load_off(): Failed to read primitive %u/%u from file '%s'.", + cimg_instance, + nb_read,nb_primitives,filename?filename:"(FILE*)"); + + err = std::fscanf(nfile,"%*[^\n] "); + } else { + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); + CImg::vector(i0,i2,i1).move_to(primitives); + CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); + } + } break; + case 4 : { + if ((err = std::fscanf(nfile,"%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,line._data))<4) { + cimg::warn(_cimg_instance + "load_off(): Failed to read primitive %u/%u from file '%s'.", + cimg_instance, + nb_read,nb_primitives,filename?filename:"(FILE*)"); + + err = std::fscanf(nfile,"%*[^\n] "); + } else { + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); + CImg::vector(i0,i3,i2,i1).move_to(primitives); + CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); + } + } break; + case 5 : { + if ((err = std::fscanf(nfile,"%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,line._data))<5) { + cimg::warn(_cimg_instance + "load_off(): Failed to read primitive %u/%u from file '%s'.", + cimg_instance, + nb_read,nb_primitives,filename?filename:"(FILE*)"); + + err = std::fscanf(nfile,"%*[^\n] "); + } else { + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); + CImg::vector(i0,i3,i2,i1).move_to(primitives); + CImg::vector(i0,i4,i3).move_to(primitives); + colors.insert(2,CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); + ++nb_primitives; + } + } break; + case 6 : { + if ((err = std::fscanf(nfile,"%u%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,&i5,line._data))<6) { + cimg::warn(_cimg_instance + "load_off(): Failed to read primitive %u/%u from file '%s'.", + cimg_instance, + nb_read,nb_primitives,filename?filename:"(FILE*)"); + + err = std::fscanf(nfile,"%*[^\n] "); + } else { + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); + CImg::vector(i0,i3,i2,i1).move_to(primitives); + CImg::vector(i0,i5,i4,i3).move_to(primitives); + colors.insert(2,CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); + ++nb_primitives; + } + } break; + case 7 : { + if ((err = std::fscanf(nfile,"%u%u%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,&i5,&i6,line._data))<7) { + cimg::warn(_cimg_instance + "load_off(): Failed to read primitive %u/%u from file '%s'.", + cimg_instance, + nb_read,nb_primitives,filename?filename:"(FILE*)"); + + err = std::fscanf(nfile,"%*[^\n] "); + } else { + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); + CImg::vector(i0,i4,i3,i1).move_to(primitives); + CImg::vector(i0,i6,i5,i4).move_to(primitives); + CImg::vector(i3,i2,i1).move_to(primitives); + colors.insert(3,CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); + ++(++nb_primitives); + } + } break; + case 8 : { + if ((err = std::fscanf(nfile,"%u%u%u%u%u%u%u%u%255[^\n] ",&i0,&i1,&i2,&i3,&i4,&i5,&i6,&i7,line._data))<7) { + cimg::warn(_cimg_instance + "load_off(): Failed to read primitive %u/%u from file '%s'.", + cimg_instance, + nb_read,nb_primitives,filename?filename:"(FILE*)"); + + err = std::fscanf(nfile,"%*[^\n] "); + } else { + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); + CImg::vector(i0,i3,i2,i1).move_to(primitives); + CImg::vector(i0,i5,i4,i3).move_to(primitives); + CImg::vector(i0,i7,i6,i5).move_to(primitives); + colors.insert(3,CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); + ++(++nb_primitives); + } + } break; + default : + cimg::warn(_cimg_instance + "load_off(): Failed to read primitive %u/%u (%u vertices) from file '%s'.", + cimg_instance, + nb_read,nb_primitives,prim,filename?filename:"(FILE*)"); + + err = std::fscanf(nfile,"%*[^\n] "); + } + } + } + if (!file) cimg::fclose(nfile); + if (primitives._width!=nb_primitives) + cimg::warn(_cimg_instance + "load_off(): Only %u/%u primitives read from file '%s'.", + cimg_instance, + primitives._width,nb_primitives,filename?filename:"(FILE*)"); + return *this; + } + + //! Load image sequence from a video file, using OpenCV library. + /** + \param filename Filename, as a C-string. + \param first_frame Index of the first frame to read. + \param last_frame Index of the last frame to read. + \param step_frame Step value for frame reading. + \param axis Alignment axis. + \param align Apending alignment. + **/ + CImg& load_video(const char *const filename, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, + const char axis='z', const float align=0) { + return get_load_video(filename,first_frame,last_frame,step_frame,axis,align).move_to(*this); + } + + //! Load image sequence from a video file, using OpenCV library \newinstance. + static CImg get_load_video(const char *const filename, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, + const char axis='z', const float align=0) { + return CImgList().load_video(filename,first_frame,last_frame,step_frame).get_append(axis,align); + } + + //! Load image sequence using FFMPEG's external tool 'ffmpeg'. + /** + \param filename Filename, as a C-string. + \param axis Appending axis, if file contains multiple images. Can be { 'x' | 'y' | 'z' | 'c' }. + \param align Appending alignment. + **/ + CImg& load_ffmpeg_external(const char *const filename, const char axis='z', const float align=0) { + return get_load_ffmpeg_external(filename,axis,align).move_to(*this); + } + + //! Load image sequence using FFMPEG's external tool 'ffmpeg' \newinstance. + static CImg get_load_ffmpeg_external(const char *const filename, const char axis='z', const float align=0) { + return CImgList().load_ffmpeg_external(filename).get_append(axis,align); + } + + //! Load gif file, using Imagemagick or GraphicsMagicks's external tools. + /** + \param filename Filename, as a C-string. + \param axis Appending axis, if file contains multiple images. Can be { 'x' | 'y' | 'z' | 'c' }. + \param align Appending alignment. + **/ + CImg& load_gif_external(const char *const filename, + const char axis='z', const float align=0) { + return get_load_gif_external(filename,axis,align).move_to(*this); + } + + //! Load gif file, using ImageMagick or GraphicsMagick's external tool 'convert' \newinstance. + static CImg get_load_gif_external(const char *const filename, + const char axis='z', const float align=0) { + return CImgList().load_gif_external(filename).get_append(axis,align); + } + + //! Load image using GraphicsMagick's external tool 'gm'. + /** + \param filename Filename, as a C-string. + **/ + CImg& load_graphicsmagick_external(const char *const filename) { + if (!filename) + throw CImgArgumentException(_cimg_instance + "load_graphicsmagick_external(): Specified filename is (null).", + cimg_instance); + std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. + CImg command(1024), filename_tmp(256); + std::FILE *file = 0; + const CImg s_filename = CImg::string(filename)._system_strescape(); +#if cimg_OS==1 + if (!cimg::system("which gm")) { + cimg_snprintf(command,command._width,"%s convert \"%s\" pnm:-", + cimg::graphicsmagick_path(),s_filename.data()); + file = popen(command,"r"); + if (file) { + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + try { load_pnm(file); } catch (...) { + pclose(file); + cimg::exception_mode(omode); + throw CImgIOException(_cimg_instance + "load_graphicsmagick_external(): Failed to load file '%s' " + "with external command 'gm'.", + cimg_instance, + filename); + } + pclose(file); + return *this; + } + } +#endif + do { + cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.pnm", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + if ((file=std_fopen(filename_tmp,"rb"))!=0) cimg::fclose(file); + } while (file); + cimg_snprintf(command,command._width,"%s convert \"%s\" \"%s\"", + cimg::graphicsmagick_path(),s_filename.data(), + CImg::string(filename_tmp)._system_strescape().data()); + cimg::system(command,cimg::graphicsmagick_path()); + if (!(file = std_fopen(filename_tmp,"rb"))) { + cimg::fclose(cimg::fopen(filename,"r")); + throw CImgIOException(_cimg_instance + "load_graphicsmagick_external(): Failed to load file '%s' with external command 'gm'.", + cimg_instance, + filename); + + } else cimg::fclose(file); + load_pnm(filename_tmp); + std::remove(filename_tmp); + return *this; + } + + //! Load image using GraphicsMagick's external tool 'gm' \newinstance. + static CImg get_load_graphicsmagick_external(const char *const filename) { + return CImg().load_graphicsmagick_external(filename); + } + + //! Load gzipped image file, using external tool 'gunzip'. + /** + \param filename Filename, as a C-string. + **/ + CImg& load_gzip_external(const char *const filename) { + if (!filename) + throw CImgIOException(_cimg_instance + "load_gzip_external(): Specified filename is (null).", + cimg_instance); + std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. + CImg command(1024), filename_tmp(256), body(256); + const char + *const ext = cimg::split_filename(filename,body), + *const ext2 = cimg::split_filename(body,0); + + std::FILE *file = 0; + do { + if (!cimg::strcasecmp(ext,"gz")) { + if (*ext2) cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext2); + else cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + } else { + if (*ext) cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext); + else cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + } + if ((file=std_fopen(filename_tmp,"rb"))!=0) cimg::fclose(file); + } while (file); + cimg_snprintf(command,command._width,"%s -c \"%s\" > \"%s\"", + cimg::gunzip_path(), + CImg::string(filename)._system_strescape().data(), + CImg::string(filename_tmp)._system_strescape().data()); + cimg::system(command); + if (!(file = std_fopen(filename_tmp,"rb"))) { + cimg::fclose(cimg::fopen(filename,"r")); + throw CImgIOException(_cimg_instance + "load_gzip_external(): Failed to load file '%s' with external command 'gunzip'.", + cimg_instance, + filename); + + } else cimg::fclose(file); + load(filename_tmp); + std::remove(filename_tmp); + return *this; + } + + //! Load gzipped image file, using external tool 'gunzip' \newinstance. + static CImg get_load_gzip_external(const char *const filename) { + return CImg().load_gzip_external(filename); + } + + //! Load image using ImageMagick's external tool 'convert'. + /** + \param filename Filename, as a C-string. + **/ + CImg& load_imagemagick_external(const char *const filename) { + if (!filename) + throw CImgArgumentException(_cimg_instance + "load_imagemagick_external(): Specified filename is (null).", + cimg_instance); + std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. + CImg command(1024), filename_tmp(256); + std::FILE *file = 0; + const CImg s_filename = CImg::string(filename)._system_strescape(); +#if cimg_OS==1 + if (!cimg::system("which convert")) { + cimg_snprintf(command,command._width,"%s%s \"%s\" pnm:-", + cimg::imagemagick_path(), + !cimg::strcasecmp(cimg::split_filename(filename),"pdf")?" -density 400x400":"", + s_filename.data()); + file = popen(command,"r"); + if (file) { + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + try { load_pnm(file); } catch (...) { + pclose(file); + cimg::exception_mode(omode); + throw CImgIOException(_cimg_instance + "load_imagemagick_external(): Failed to load file '%s' with " + "external command 'magick/convert'.", + cimg_instance, + filename); + } + pclose(file); + return *this; + } + } +#endif + do { + cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.pnm", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + if ((file=std_fopen(filename_tmp,"rb"))!=0) cimg::fclose(file); + } while (file); + cimg_snprintf(command,command._width,"%s%s \"%s\" \"%s\"", + cimg::imagemagick_path(), + !cimg::strcasecmp(cimg::split_filename(filename),"pdf")?" -density 400x400":"", + s_filename.data(),CImg::string(filename_tmp)._system_strescape().data()); + cimg::system(command,cimg::imagemagick_path()); + if (!(file = std_fopen(filename_tmp,"rb"))) { + cimg::fclose(cimg::fopen(filename,"r")); + throw CImgIOException(_cimg_instance + "load_imagemagick_external(): Failed to load file '%s' with " + "external command 'magick/convert'.", + cimg_instance, + filename); + + } else cimg::fclose(file); + load_pnm(filename_tmp); + std::remove(filename_tmp); + return *this; + } + + //! Load image using ImageMagick's external tool 'convert' \newinstance. + static CImg get_load_imagemagick_external(const char *const filename) { + return CImg().load_imagemagick_external(filename); + } + + //! Load image from a DICOM file, using XMedcon's external tool 'medcon'. + /** + \param filename Filename, as a C-string. + **/ + CImg& load_medcon_external(const char *const filename) { + if (!filename) + throw CImgArgumentException(_cimg_instance + "load_medcon_external(): Specified filename is (null).", + cimg_instance); + std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. + CImg command(1024), filename_tmp(256), body(256); + cimg::fclose(cimg::fopen(filename,"r")); + std::FILE *file = 0; + do { + cimg_snprintf(filename_tmp,filename_tmp._width,"%s.hdr",cimg::filenamerand()); + if ((file=std_fopen(filename_tmp,"rb"))!=0) cimg::fclose(file); + } while (file); + cimg_snprintf(command,command._width,"%s -w -c anlz -o \"%s\" -f \"%s\"", + cimg::medcon_path(), + CImg::string(filename_tmp)._system_strescape().data(), + CImg::string(filename)._system_strescape().data()); + cimg::system(command); + cimg::split_filename(filename_tmp,body); + + cimg_snprintf(command,command._width,"%s.hdr",body._data); + file = std_fopen(command,"rb"); + if (!file) { + cimg_snprintf(command,command._width,"m000-%s.hdr",body._data); + file = std_fopen(command,"rb"); + if (!file) { + throw CImgIOException(_cimg_instance + "load_medcon_external(): Failed to load file '%s' with external command 'medcon'.", + cimg_instance, + filename); + } + } + cimg::fclose(file); + load_analyze(command); + std::remove(command); + cimg::split_filename(command,body); + cimg_snprintf(command,command._width,"%s.img",body._data); + std::remove(command); + return *this; + } + + //! Load image from a DICOM file, using XMedcon's external tool 'medcon' \newinstance. + static CImg get_load_medcon_external(const char *const filename) { + return CImg().load_medcon_external(filename); + } + + //! Load image from a RAW Color Camera file, using external tool 'dcraw'. + /** + \param filename Filename, as a C-string. + **/ + CImg& load_dcraw_external(const char *const filename) { + if (!filename) + throw CImgArgumentException(_cimg_instance + "load_dcraw_external(): Specified filename is (null).", + cimg_instance); + std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. + CImg command(1024), filename_tmp(256); + std::FILE *file = 0; + const CImg s_filename = CImg::string(filename)._system_strescape(); +#if cimg_OS==1 + cimg_snprintf(command,command._width,"%s -w -4 -c \"%s\"", + cimg::dcraw_path(),s_filename.data()); + file = popen(command,"r"); + if (file) { + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + try { load_pnm(file); } catch (...) { + pclose(file); + cimg::exception_mode(omode); + throw CImgIOException(_cimg_instance + "load_dcraw_external(): Failed to load file '%s' with external command 'dcraw'.", + cimg_instance, + filename); + } + pclose(file); + return *this; + } +#endif + do { + cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.ppm", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + if ((file=std_fopen(filename_tmp,"rb"))!=0) cimg::fclose(file); + } while (file); + cimg_snprintf(command,command._width,"%s -w -4 -c \"%s\" > \"%s\"", + cimg::dcraw_path(),s_filename.data(),CImg::string(filename_tmp)._system_strescape().data()); + cimg::system(command,cimg::dcraw_path()); + if (!(file = std_fopen(filename_tmp,"rb"))) { + cimg::fclose(cimg::fopen(filename,"r")); + throw CImgIOException(_cimg_instance + "load_dcraw_external(): Failed to load file '%s' with external command 'dcraw'.", + cimg_instance, + filename); + + } else cimg::fclose(file); + load_pnm(filename_tmp); + std::remove(filename_tmp); + return *this; + } + + //! Load image from a RAW Color Camera file, using external tool 'dcraw' \newinstance. + static CImg get_load_dcraw_external(const char *const filename) { + return CImg().load_dcraw_external(filename); + } + + //! Load image from a camera stream, using OpenCV. + /** + \param camera_index Index of the camera to capture images from. + \param skip_frames Number of frames to skip before the capture. + \param release_camera Tells if the camera ressource must be released at the end of the method. + \param capture_width Width of the desired image. + \param capture_height Height of the desired image. + **/ + CImg& load_camera(const unsigned int camera_index=0, const unsigned int skip_frames=0, + const bool release_camera=true, const unsigned int capture_width=0, + const unsigned int capture_height=0) { +#ifdef cimg_use_opencv + if (camera_index>99) + throw CImgArgumentException(_cimg_instance + "load_camera(): Invalid request for camera #%u " + "(no more than 100 cameras can be managed simultaneously).", + cimg_instance, + camera_index); + static CvCapture *capture[100] = { 0 }; + static unsigned int capture_w[100], capture_h[100]; + if (release_camera) { + cimg::mutex(9); + if (capture[camera_index]) cvReleaseCapture(&(capture[camera_index])); + capture[camera_index] = 0; + capture_w[camera_index] = capture_h[camera_index] = 0; + cimg::mutex(9,0); + return *this; + } + if (!capture[camera_index]) { + cimg::mutex(9); + capture[camera_index] = cvCreateCameraCapture(camera_index); + capture_w[camera_index] = 0; + capture_h[camera_index] = 0; + cimg::mutex(9,0); + if (!capture[camera_index]) { + throw CImgIOException(_cimg_instance + "load_camera(): Failed to initialize camera #%u.", + cimg_instance, + camera_index); + } + } + cimg::mutex(9); + if (capture_width!=capture_w[camera_index]) { + cvSetCaptureProperty(capture[camera_index],CV_CAP_PROP_FRAME_WIDTH,capture_width); + capture_w[camera_index] = capture_width; + } + if (capture_height!=capture_h[camera_index]) { + cvSetCaptureProperty(capture[camera_index],CV_CAP_PROP_FRAME_HEIGHT,capture_height); + capture_h[camera_index] = capture_height; + } + const IplImage *img = 0; + for (unsigned int i = 0; iwidthStep - 3*img->width); + assign(img->width,img->height,1,3); + const unsigned char* ptrs = (unsigned char*)img->imageData; + T *ptr_r = data(0,0,0,0), *ptr_g = data(0,0,0,1), *ptr_b = data(0,0,0,2); + if (step>0) cimg_forY(*this,y) { + cimg_forX(*this,x) { *(ptr_b++) = (T)*(ptrs++); *(ptr_g++) = (T)*(ptrs++); *(ptr_r++) = (T)*(ptrs++); } + ptrs+=step; + } else for (ulongT siz = (ulongT)img->width*img->height; siz; --siz) { + *(ptr_b++) = (T)*(ptrs++); *(ptr_g++) = (T)*(ptrs++); *(ptr_r++) = (T)*(ptrs++); + } + } + cimg::mutex(9,0); + return *this; +#else + cimg::unused(camera_index,skip_frames,release_camera,capture_width,capture_height); + throw CImgIOException(_cimg_instance + "load_camera(): This function requires the OpenCV library to run " + "(macro 'cimg_use_opencv' must be defined).", + cimg_instance); +#endif + } + + //! Load image from a camera stream, using OpenCV \newinstance. + static CImg get_load_camera(const unsigned int camera_index=0, const unsigned int skip_frames=0, + const bool release_camera=true, + const unsigned int capture_width=0, const unsigned int capture_height=0) { + return CImg().load_camera(camera_index,skip_frames,release_camera,capture_width,capture_height); + } + + //! Load image using various non-native ways. + /** + \param filename Filename, as a C-string. + **/ + CImg& load_other(const char *const filename) { + if (!filename) + throw CImgArgumentException(_cimg_instance + "load_other(): Specified filename is (null).", + cimg_instance); + + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + try { load_magick(filename); } + catch (CImgException&) { + try { load_imagemagick_external(filename); } + catch (CImgException&) { + try { load_graphicsmagick_external(filename); } + catch (CImgException&) { + try { load_cimg(filename); } + catch (CImgException&) { + try { + std::fclose(cimg::fopen(filename,"rb")); + } catch (CImgException&) { + cimg::exception_mode(omode); + throw CImgIOException(_cimg_instance + "load_other(): Failed to open file '%s'.", + cimg_instance, + filename); + } + cimg::exception_mode(omode); + throw CImgIOException(_cimg_instance + "load_other(): Failed to recognize format of file '%s'.", + cimg_instance, + filename); + } + } + } + } + cimg::exception_mode(omode); + return *this; + } + + //! Load image using various non-native ways \newinstance. + static CImg get_load_other(const char *const filename) { + return CImg().load_other(filename); + } + + //@} + //--------------------------- + // + //! \name Data Output + //@{ + //--------------------------- + + //! Display information about the image data. + /** + \param title Name for the considered image. + \param display_stats Tells to compute and display image statistics. + **/ + const CImg& print(const char *const title=0, const bool display_stats=true) const { + + int xm = 0, ym = 0, zm = 0, vm = 0, xM = 0, yM = 0, zM = 0, vM = 0; + CImg st; + if (!is_empty() && display_stats) { + st = get_stats(); + xm = (int)st[4]; ym = (int)st[5], zm = (int)st[6], vm = (int)st[7]; + xM = (int)st[8]; yM = (int)st[9], zM = (int)st[10], vM = (int)st[11]; + } + + const ulongT siz = size(), msiz = siz*sizeof(T), siz1 = siz - 1, + mdisp = msiz<8*1024?0U:msiz<8*1024*1024?1U:2U, width1 = _width - 1; + + CImg _title(64); + if (!title) cimg_snprintf(_title,_title._width,"CImg<%s>",pixel_type()); + + std::fprintf(cimg::output(),"%s%s%s%s: %sthis%s = %p, %ssize%s = (%u,%u,%u,%u) [%lu %s], %sdata%s = (%s*)%p", + cimg::t_magenta,cimg::t_bold,title?title:_title._data,cimg::t_normal, + cimg::t_bold,cimg::t_normal,(void*)this, + cimg::t_bold,cimg::t_normal,_width,_height,_depth,_spectrum, + (unsigned long)(mdisp==0?msiz:(mdisp==1?(msiz>>10):(msiz>>20))), + mdisp==0?"b":(mdisp==1?"Kio":"Mio"), + cimg::t_bold,cimg::t_normal,pixel_type(),(void*)begin()); + if (_data) + std::fprintf(cimg::output(),"..%p (%s) = [ ",(void*)((char*)end() - 1),_is_shared?"shared":"non-shared"); + else std::fprintf(cimg::output()," (%s) = [ ",_is_shared?"shared":"non-shared"); + + if (!is_empty()) cimg_foroff(*this,off) { + std::fprintf(cimg::output(),"%g",(double)_data[off]); + if (off!=siz1) std::fprintf(cimg::output(),"%s",off%_width==width1?" ; ":" "); + if (off==7 && siz>16) { off = siz1 - 8; std::fprintf(cimg::output(),"... "); } + } + if (!is_empty() && display_stats) + std::fprintf(cimg::output(), + " ], %smin%s = %g, %smax%s = %g, %smean%s = %g, %sstd%s = %g, %scoords_min%s = (%u,%u,%u,%u), " + "%scoords_max%s = (%u,%u,%u,%u).\n", + cimg::t_bold,cimg::t_normal,st[0], + cimg::t_bold,cimg::t_normal,st[1], + cimg::t_bold,cimg::t_normal,st[2], + cimg::t_bold,cimg::t_normal,std::sqrt(st[3]), + cimg::t_bold,cimg::t_normal,xm,ym,zm,vm, + cimg::t_bold,cimg::t_normal,xM,yM,zM,vM); + else std::fprintf(cimg::output(),"%s].\n",is_empty()?"":" "); + std::fflush(cimg::output()); + return *this; + } + + //! Display image into a CImgDisplay window. + /** + \param disp Display window. + **/ + const CImg& display(CImgDisplay& disp) const { + disp.display(*this); + return *this; + } + + //! Display image into a CImgDisplay window, in an interactive way. + /** + \param disp Display window. + \param display_info Tells if image information are displayed on the standard output. + \param[in,out] XYZ Contains the XYZ coordinates at start / exit of the function. + \param exit_on_anykey Exit function when any key is pressed. + **/ + const CImg& display(CImgDisplay &disp, const bool display_info, unsigned int *const XYZ=0, + const bool exit_on_anykey=false) const { + return _display(disp,0,display_info,XYZ,exit_on_anykey,false); + } + + //! Display image into an interactive window. + /** + \param title Window title + \param display_info Tells if image information are displayed on the standard output. + \param[in,out] XYZ Contains the XYZ coordinates at start / exit of the function. + \param exit_on_anykey Exit function when any key is pressed. + **/ + const CImg& display(const char *const title=0, const bool display_info=true, unsigned int *const XYZ=0, + const bool exit_on_anykey=false) const { + CImgDisplay disp; + return _display(disp,title,display_info,XYZ,exit_on_anykey,false); + } + + const CImg& _display(CImgDisplay &disp, const char *const title, const bool display_info, + unsigned int *const XYZ, const bool exit_on_anykey, + const bool exit_on_simpleclick) const { + unsigned int oldw = 0, oldh = 0, _XYZ[3] = { 0 }, key = 0; + int x0 = 0, y0 = 0, z0 = 0, x1 = width() - 1, y1 = height() - 1, z1 = depth() - 1, + old_mouse_x = -1, old_mouse_y = -1; + + if (!disp) { + disp.assign(cimg_fitscreen(_width,_height,_depth),title?title:0,1); + if (!title) disp.set_title("CImg<%s> (%ux%ux%ux%u)",pixel_type(),_width,_height,_depth,_spectrum); + else disp.set_title("%s",title); + } else if (title) disp.set_title("%s",title); + disp.show().flush(); + + const CImg dtitle = CImg::string(disp.title()); + if (display_info) print(dtitle); + + CImg zoom; + for (bool reset_view = true, resize_disp = false, is_first_select = true; !key && !disp.is_closed(); ) { + if (reset_view) { + if (XYZ) { _XYZ[0] = XYZ[0]; _XYZ[1] = XYZ[1]; _XYZ[2] = XYZ[2]; } + else { + _XYZ[0] = (unsigned int)(x0 + x1)/2; + _XYZ[1] = (unsigned int)(y0 + y1)/2; + _XYZ[2] = (unsigned int)(z0 + z1)/2; + } + x0 = 0; y0 = 0; z0 = 0; x1 = width() - 1; y1 = height() - 1; z1 = depth() - 1; + oldw = disp._width; oldh = disp._height; + reset_view = false; + } + if (!x0 && !y0 && !z0 && x1==width() - 1 && y1==height() - 1 && z1==depth() - 1) { + if (is_empty()) zoom.assign(1,1,1,1,(T)0); else zoom.assign(); + } else zoom = get_crop(x0,y0,z0,x1,y1,z1); + + const CImg& visu = zoom?zoom:*this; + const unsigned int + dx = 1U + x1 - x0, dy = 1U + y1 - y0, dz = 1U + z1 - z0, + tw = dx + (dz>1?dz:0U), th = dy + (dz>1?dz:0U); + if (!is_empty() && !disp.is_fullscreen() && resize_disp) { + const unsigned int + ttw = tw*disp.width()/oldw, tth = th*disp.height()/oldh, + dM = std::max(ttw,tth), diM = (unsigned int)std::max(disp.width(),disp.height()), + imgw = std::max(16U,ttw*diM/dM), imgh = std::max(16U,tth*diM/dM); + disp.set_fullscreen(false).resize(cimg_fitscreen(imgw,imgh,1),false); + resize_disp = false; + } + oldw = tw; oldh = th; + + bool + go_up = false, go_down = false, go_left = false, go_right = false, + go_inc = false, go_dec = false, go_in = false, go_out = false, + go_in_center = false; + + disp.set_title("%s",dtitle._data); + if (_width>1 && visu._width==1) disp.set_title("%s | x=%u",disp._title,x0); + if (_height>1 && visu._height==1) disp.set_title("%s | y=%u",disp._title,y0); + if (_depth>1 && visu._depth==1) disp.set_title("%s | z=%u",disp._title,z0); + + disp._mouse_x = old_mouse_x; disp._mouse_y = old_mouse_y; + CImg selection = visu._select(disp,0,2,_XYZ,x0,y0,z0,true,is_first_select,_depth>1,true); + old_mouse_x = disp._mouse_x; old_mouse_y = disp._mouse_y; + is_first_select = false; + + if (disp.wheel()) { + if ((disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) && + (disp.is_keySHIFTLEFT() || disp.is_keySHIFTRIGHT())) { + go_left = !(go_right = disp.wheel()>0); + } else if (disp.is_keySHIFTLEFT() || disp.is_keySHIFTRIGHT()) { + go_down = !(go_up = disp.wheel()>0); + } else if (depth()==1 || disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + go_out = !(go_in = disp.wheel()>0); go_in_center = false; + } + disp.set_wheel(); + } + + const int + sx0 = selection(0), sy0 = selection(1), sz0 = selection(2), + sx1 = selection(3), sy1 = selection(4), sz1 = selection(5); + if (sx0>=0 && sy0>=0 && sz0>=0 && sx1>=0 && sy1>=0 && sz1>=0) { + x1 = x0 + sx1; y1 = y0 + sy1; z1 = z0 + sz1; + x0+=sx0; y0+=sy0; z0+=sz0; + if ((sx0==sx1 && sy0==sy1) || (_depth>1 && sx0==sx1 && sz0==sz1) || (_depth>1 && sy0==sy1 && sz0==sz1)) { + if (exit_on_simpleclick && (!zoom || is_empty())) break; else reset_view = true; + } + resize_disp = true; + } else switch (key = disp.key()) { +#if cimg_OS!=2 + case cimg::keyCTRLRIGHT : case cimg::keySHIFTRIGHT : +#endif + case 0 : case cimg::keyCTRLLEFT : case cimg::keySHIFTLEFT : key = 0; break; + case cimg::keyP : if (visu._depth>1 && (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT())) { + // Special mode: play stack of frames + const unsigned int + w1 = visu._width*disp.width()/(visu._width + (visu._depth>1?visu._depth:0)), + h1 = visu._height*disp.height()/(visu._height + (visu._depth>1?visu._depth:0)); + float frame_timing = 5; + bool is_stopped = false; + disp.set_key(key,false).set_wheel().resize(cimg_fitscreen(w1,h1,1),false); key = 0; + for (unsigned int timer = 0; !key && !disp.is_closed() && !disp.button(); ) { + if (disp.is_resized()) disp.resize(false); + if (!timer) { + visu.get_slice((int)_XYZ[2]).display(disp.set_title("%s | z=%d",dtitle.data(),_XYZ[2])); + (++_XYZ[2])%=visu._depth; + } + if (!is_stopped) { if (++timer>(unsigned int)frame_timing) timer = 0; } else timer = ~0U; + if (disp.wheel()) { frame_timing-=disp.wheel()/3.0f; disp.set_wheel(); } + switch (key = disp.key()) { +#if cimg_OS!=2 + case cimg::keyCTRLRIGHT : +#endif + case cimg::keyCTRLLEFT : key = 0; break; + case cimg::keyPAGEUP : frame_timing-=0.3f; key = 0; break; + case cimg::keyPAGEDOWN : frame_timing+=0.3f; key = 0; break; + case cimg::keySPACE : is_stopped = !is_stopped; disp.set_key(key,false); key = 0; break; + case cimg::keyARROWLEFT : case cimg::keyARROWUP : is_stopped = true; timer = 0; key = 0; break; + case cimg::keyARROWRIGHT : case cimg::keyARROWDOWN : is_stopped = true; + (_XYZ[2]+=visu._depth - 2)%=visu._depth; timer = 0; key = 0; break; + case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false). + resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), + CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false); + disp.set_key(key,false); key = 0; + } break; + case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false). + resize(cimg_fitscreen(2*disp.width()/3,2*disp.height()/3,1),false).set_key(key,false); key = 0; + } break; + case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false). + resize(cimg_fitscreen(_width,_height,_depth),false).set_key(key,false); key = 0; + } break; + case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.resize(disp.screen_width(),disp.screen_height(),false). + toggle_fullscreen().set_key(key,false); key = 0; + } break; + } + frame_timing = frame_timing<1?1:(frame_timing>39?39:frame_timing); + disp.wait(20); + } + const unsigned int + w2 = (visu._width + (visu._depth>1?visu._depth:0))*disp.width()/visu._width, + h2 = (visu._height + (visu._depth>1?visu._depth:0))*disp.height()/visu._height; + disp.resize(cimg_fitscreen(w2,h2,1),false).set_title(dtitle.data()).set_key().set_button().set_wheel(); + key = 0; + } break; + case cimg::keyHOME : reset_view = resize_disp = true; key = 0; break; + case cimg::keyPADADD : go_in = true; go_in_center = true; key = 0; break; + case cimg::keyPADSUB : go_out = true; key = 0; break; + case cimg::keyARROWLEFT : case cimg::keyPAD4: go_left = true; key = 0; break; + case cimg::keyARROWRIGHT : case cimg::keyPAD6: go_right = true; key = 0; break; + case cimg::keyARROWUP : case cimg::keyPAD8: go_up = true; key = 0; break; + case cimg::keyARROWDOWN : case cimg::keyPAD2: go_down = true; key = 0; break; + case cimg::keyPAD7 : go_up = go_left = true; key = 0; break; + case cimg::keyPAD9 : go_up = go_right = true; key = 0; break; + case cimg::keyPAD1 : go_down = go_left = true; key = 0; break; + case cimg::keyPAD3 : go_down = go_right = true; key = 0; break; + case cimg::keyPAGEUP : go_inc = true; key = 0; break; + case cimg::keyPAGEDOWN : go_dec = true; key = 0; break; + } + if (go_in) { + const int + mx = go_in_center?disp.width()/2:disp.mouse_x(), + my = go_in_center?disp.height()/2:disp.mouse_y(), + mX = mx*(width() + (depth()>1?depth():0))/disp.width(), + mY = my*(height() + (depth()>1?depth():0))/disp.height(); + int X = (int)_XYZ[0], Y = (int)_XYZ[1], Z = (int)_XYZ[2]; + if (mX=height()) { + X = x0 + mX*(1 + x1 - x0)/width(); Z = z0 + (mY - height())*(1 + z1 - z0)/depth(); + } + if (mX>=width() && mY4) { x0 = X - 3*(X - x0)/4; x1 = X + 3*(x1 - X)/4; } + if (y1 - y0>4) { y0 = Y - 3*(Y - y0)/4; y1 = Y + 3*(y1 - Y)/4; } + if (z1 - z0>4) { z0 = Z - 3*(Z - z0)/4; z1 = Z + 3*(z1 - Z)/4; } + } + if (go_out) { + const int + delta_x = (x1 - x0)/8, delta_y = (y1 - y0)/8, delta_z = (z1 - z0)/8, + ndelta_x = delta_x?delta_x:(_width>1), + ndelta_y = delta_y?delta_y:(_height>1), + ndelta_z = delta_z?delta_z:(_depth>1); + x0-=ndelta_x; y0-=ndelta_y; z0-=ndelta_z; + x1+=ndelta_x; y1+=ndelta_y; z1+=ndelta_z; + if (x0<0) { x1-=x0; x0 = 0; if (x1>=width()) x1 = width() - 1; } + if (y0<0) { y1-=y0; y0 = 0; if (y1>=height()) y1 = height() - 1; } + if (z0<0) { z1-=z0; z0 = 0; if (z1>=depth()) z1 = depth() - 1; } + if (x1>=width()) { x0-=(x1 - width() + 1); x1 = width() - 1; if (x0<0) x0 = 0; } + if (y1>=height()) { y0-=(y1 - height() + 1); y1 = height() - 1; if (y0<0) y0 = 0; } + if (z1>=depth()) { z0-=(z1 - depth() + 1); z1 = depth() - 1; if (z0<0) z0 = 0; } + const float + ratio = (float)(x1-x0)/(y1-y0), + ratiow = (float)disp._width/disp._height, + sub = std::min(cimg::abs(ratio - ratiow),cimg::abs(1/ratio-1/ratiow)); + if (sub>0.01) resize_disp = true; + } + if (go_left) { + const int delta = (x1 - x0)/4, ndelta = delta?delta:(_width>1); + if (x0 - ndelta>=0) { x0-=ndelta; x1-=ndelta; } + else { x1-=x0; x0 = 0; } + } + if (go_right) { + const int delta = (x1 - x0)/4, ndelta = delta?delta:(_width>1); + if (x1+ndelta1); + if (y0 - ndelta>=0) { y0-=ndelta; y1-=ndelta; } + else { y1-=y0; y0 = 0; } + } + if (go_down) { + const int delta = (y1 - y0)/4, ndelta = delta?delta:(_height>1); + if (y1+ndelta1); + if (z0 - ndelta>=0) { z0-=ndelta; z1-=ndelta; } + else { z1-=z0; z0 = 0; } + } + if (go_dec) { + const int delta = (z1 - z0)/4, ndelta = delta?delta:(_depth>1); + if (z1+ndelta + const CImg& display_object3d(CImgDisplay& disp, + const CImg& vertices, + const CImgList& primitives, + const CImgList& colors, + const to& opacities, + const bool centering=true, + const int render_static=4, const int render_motion=1, + const bool is_double_sided=true, const float focale=700, + const float light_x=0, const float light_y=0, const float light_z=-5e8f, + const float specular_lightness=0.2f, const float specular_shininess=0.1f, + const bool display_axes=true, float *const pose_matrix=0, + const bool exit_on_anykey=false) const { + return _display_object3d(disp,0,vertices,primitives,colors,opacities,centering,render_static, + render_motion,is_double_sided,focale, + light_x,light_y,light_z,specular_lightness,specular_shininess, + display_axes,pose_matrix,exit_on_anykey); + } + + //! Display object 3d in an interactive window \simplification. + template + const CImg& display_object3d(const char *const title, + const CImg& vertices, + const CImgList& primitives, + const CImgList& colors, + const to& opacities, + const bool centering=true, + const int render_static=4, const int render_motion=1, + const bool is_double_sided=true, const float focale=700, + const float light_x=0, const float light_y=0, const float light_z=-5e8f, + const float specular_lightness=0.2f, const float specular_shininess=0.1f, + const bool display_axes=true, float *const pose_matrix=0, + const bool exit_on_anykey=false) const { + CImgDisplay disp; + return _display_object3d(disp,title,vertices,primitives,colors,opacities,centering,render_static, + render_motion,is_double_sided,focale, + light_x,light_y,light_z,specular_lightness,specular_shininess, + display_axes,pose_matrix,exit_on_anykey); + } + + //! Display object 3d in an interactive window \simplification. + template + const CImg& display_object3d(CImgDisplay &disp, + const CImg& vertices, + const CImgList& primitives, + const CImgList& colors, + const bool centering=true, + const int render_static=4, const int render_motion=1, + const bool is_double_sided=true, const float focale=700, + const float light_x=0, const float light_y=0, const float light_z=-5e8f, + const float specular_lightness=0.2f, const float specular_shininess=0.1f, + const bool display_axes=true, float *const pose_matrix=0, + const bool exit_on_anykey=false) const { + return display_object3d(disp,vertices,primitives,colors,CImgList(),centering, + render_static,render_motion,is_double_sided,focale, + light_x,light_y,light_z,specular_lightness,specular_shininess, + display_axes,pose_matrix,exit_on_anykey); + } + + //! Display object 3d in an interactive window \simplification. + template + const CImg& display_object3d(const char *const title, + const CImg& vertices, + const CImgList& primitives, + const CImgList& colors, + const bool centering=true, + const int render_static=4, const int render_motion=1, + const bool is_double_sided=true, const float focale=700, + const float light_x=0, const float light_y=0, const float light_z=-5e8f, + const float specular_lightness=0.2f, const float specular_shininess=0.1f, + const bool display_axes=true, float *const pose_matrix=0, + const bool exit_on_anykey=false) const { + return display_object3d(title,vertices,primitives,colors,CImgList(),centering, + render_static,render_motion,is_double_sided,focale, + light_x,light_y,light_z,specular_lightness,specular_shininess, + display_axes,pose_matrix,exit_on_anykey); + } + + //! Display object 3d in an interactive window \simplification. + template + const CImg& display_object3d(CImgDisplay &disp, + const CImg& vertices, + const CImgList& primitives, + const bool centering=true, + const int render_static=4, const int render_motion=1, + const bool is_double_sided=true, const float focale=700, + const float light_x=0, const float light_y=0, const float light_z=-5e8f, + const float specular_lightness=0.2f, const float specular_shininess=0.1f, + const bool display_axes=true, float *const pose_matrix=0, + const bool exit_on_anykey=false) const { + return display_object3d(disp,vertices,primitives,CImgList(),centering, + render_static,render_motion,is_double_sided,focale, + light_x,light_y,light_z,specular_lightness,specular_shininess, + display_axes,pose_matrix,exit_on_anykey); + } + + + //! Display object 3d in an interactive window \simplification. + template + const CImg& display_object3d(const char *const title, + const CImg& vertices, + const CImgList& primitives, + const bool centering=true, + const int render_static=4, const int render_motion=1, + const bool is_double_sided=true, const float focale=700, + const float light_x=0, const float light_y=0, const float light_z=-5e8f, + const float specular_lightness=0.2f, const float specular_shininess=0.1f, + const bool display_axes=true, float *const pose_matrix=0, + const bool exit_on_anykey=false) const { + return display_object3d(title,vertices,primitives,CImgList(),centering, + render_static,render_motion,is_double_sided,focale, + light_x,light_y,light_z,specular_lightness,specular_shininess, + display_axes,pose_matrix,exit_on_anykey); + } + + //! Display object 3d in an interactive window \simplification. + template + const CImg& display_object3d(CImgDisplay &disp, + const CImg& vertices, + const bool centering=true, + const int render_static=4, const int render_motion=1, + const bool is_double_sided=true, const float focale=700, + const float light_x=0, const float light_y=0, const float light_z=-5e8f, + const float specular_lightness=0.2f, const float specular_shininess=0.1f, + const bool display_axes=true, float *const pose_matrix=0, + const bool exit_on_anykey=false) const { + return display_object3d(disp,vertices,CImgList(),centering, + render_static,render_motion,is_double_sided,focale, + light_x,light_y,light_z,specular_lightness,specular_shininess, + display_axes,pose_matrix,exit_on_anykey); + } + + //! Display object 3d in an interactive window \simplification. + template + const CImg& display_object3d(const char *const title, + const CImg& vertices, + const bool centering=true, + const int render_static=4, const int render_motion=1, + const bool is_double_sided=true, const float focale=700, + const float light_x=0, const float light_y=0, const float light_z=-5e8f, + const float specular_lightness=0.2f, const float specular_shininess=0.1f, + const bool display_axes=true, float *const pose_matrix=0, + const bool exit_on_anykey=false) const { + return display_object3d(title,vertices,CImgList(),centering, + render_static,render_motion,is_double_sided,focale, + light_x,light_y,light_z,specular_lightness,specular_shininess, + display_axes,pose_matrix,exit_on_anykey); + } + + template + const CImg& _display_object3d(CImgDisplay& disp, const char *const title, + const CImg& vertices, + const CImgList& primitives, + const CImgList& colors, + const to& opacities, + const bool centering, + const int render_static, const int render_motion, + const bool is_double_sided, const float focale, + const float light_x, const float light_y, const float light_z, + const float specular_lightness, const float specular_shininess, + const bool display_axes, float *const pose_matrix, + const bool exit_on_anykey) const { + typedef typename cimg::superset::type tpfloat; + + // Check input arguments + if (is_empty()) { + if (disp) return CImg(disp.width(),disp.height(),1,(colors && colors[0].size()==1)?1:3,0). + _display_object3d(disp,title,vertices,primitives,colors,opacities,centering, + render_static,render_motion,is_double_sided,focale, + light_x,light_y,light_z,specular_lightness,specular_shininess, + display_axes,pose_matrix,exit_on_anykey); + else return CImg(1,2,1,1,64,128).resize(cimg_fitscreen(CImgDisplay::screen_width()/2, + CImgDisplay::screen_height()/2,1), + 1,(colors && colors[0].size()==1)?1:3,3). + _display_object3d(disp,title,vertices,primitives,colors,opacities,centering, + render_static,render_motion,is_double_sided,focale, + light_x,light_y,light_z,specular_lightness,specular_shininess, + display_axes,pose_matrix,exit_on_anykey); + } else { if (disp) disp.resize(*this,false); } + CImg error_message(1024); + if (!vertices.is_object3d(primitives,colors,opacities,true,error_message)) + throw CImgArgumentException(_cimg_instance + "display_object3d(): Invalid specified 3d object (%u,%u) (%s).", + cimg_instance,vertices._width,primitives._width,error_message.data()); + if (vertices._width && !primitives) { + CImgList nprimitives(vertices._width,1,1,1,1); + cimglist_for(nprimitives,l) nprimitives(l,0) = (tf)l; + return _display_object3d(disp,title,vertices,nprimitives,colors,opacities,centering, + render_static,render_motion,is_double_sided,focale, + light_x,light_y,light_z,specular_lightness,specular_shininess, + display_axes,pose_matrix,exit_on_anykey); + } + if (!disp) { + disp.assign(cimg_fitscreen(_width,_height,_depth),title?title:0,3); + if (!title) disp.set_title("CImg<%s> (%u vertices, %u primitives)", + pixel_type(),vertices._width,primitives._width); + } else if (title) disp.set_title("%s",title); + + // Init 3d objects and compute object statistics + CImg + pose, + rotated_vertices(vertices._width,3), + bbox_vertices, rotated_bbox_vertices, + axes_vertices, rotated_axes_vertices, + bbox_opacities, axes_opacities; + CImgList bbox_primitives, axes_primitives; + CImgList reverse_primitives; + CImgList bbox_colors, bbox_colors2, axes_colors; + unsigned int ns_width = 0, ns_height = 0; + int _is_double_sided = (int)is_double_sided; + bool ndisplay_axes = display_axes; + const CImg + background_color(1,1,1,_spectrum,0), + foreground_color(1,1,1,_spectrum,255); + float + Xoff = 0, Yoff = 0, Zoff = 0, sprite_scale = 1, + xm = 0, xM = vertices?vertices.get_shared_row(0).max_min(xm):0, + ym = 0, yM = vertices?vertices.get_shared_row(1).max_min(ym):0, + zm = 0, zM = vertices?vertices.get_shared_row(2).max_min(zm):0; + const float delta = cimg::max(xM - xm,yM - ym,zM - zm); + + rotated_bbox_vertices = bbox_vertices.assign(8,3,1,1, + xm,xM,xM,xm,xm,xM,xM,xm, + ym,ym,yM,yM,ym,ym,yM,yM, + zm,zm,zm,zm,zM,zM,zM,zM); + bbox_primitives.assign(6,1,4,1,1, 0,3,2,1, 4,5,6,7, 1,2,6,5, 0,4,7,3, 0,1,5,4, 2,3,7,6); + bbox_colors.assign(6,_spectrum,1,1,1,background_color[0]); + bbox_colors2.assign(6,_spectrum,1,1,1,foreground_color[0]); + bbox_opacities.assign(bbox_colors._width,1,1,1,0.3f); + + rotated_axes_vertices = axes_vertices.assign(7,3,1,1, + 0,20,0,0,22,-6,-6, + 0,0,20,0,-6,22,-6, + 0,0,0,20,0,0,22); + axes_opacities.assign(3,1,1,1,1); + axes_colors.assign(3,_spectrum,1,1,1,foreground_color[0]); + axes_primitives.assign(3,1,2,1,1, 0,1, 0,2, 0,3); + + // Begin user interaction loop + CImg visu0(*this,false), visu; + CImg zbuffer(visu0.width(),visu0.height(),1,1,0); + bool init_pose = true, clicked = false, redraw = true; + unsigned int key = 0; + int + x0 = 0, y0 = 0, x1 = 0, y1 = 0, + nrender_static = render_static, + nrender_motion = render_motion; + disp.show().flush(); + + while (!disp.is_closed() && !key) { + + // Init object pose + if (init_pose) { + const float + ratio = delta>0?(2.0f*std::min(disp.width(),disp.height())/(3.0f*delta)):1, + dx = (xM + xm)/2, dy = (yM + ym)/2, dz = (zM + zm)/2; + if (centering) + CImg(4,3,1,1, ratio,0.,0.,-ratio*dx, 0.,ratio,0.,-ratio*dy, 0.,0.,ratio,-ratio*dz).move_to(pose); + else CImg(4,3,1,1, 1,0,0,0, 0,1,0,0, 0,0,1,0).move_to(pose); + if (pose_matrix) { + CImg pose0(pose_matrix,4,3,1,1,false); + pose0.resize(4,4,1,1,0); pose.resize(4,4,1,1,0); + pose0(3,3) = pose(3,3) = 1; + (pose0*pose).get_crop(0,0,3,2).move_to(pose); + Xoff = pose_matrix[12]; Yoff = pose_matrix[13]; Zoff = pose_matrix[14]; sprite_scale = pose_matrix[15]; + } else { Xoff = Yoff = Zoff = 0; sprite_scale = 1; } + init_pose = false; + redraw = true; + } + + // Rotate and draw 3d object + if (redraw) { + const float + r00 = pose(0,0), r10 = pose(1,0), r20 = pose(2,0), r30 = pose(3,0), + r01 = pose(0,1), r11 = pose(1,1), r21 = pose(2,1), r31 = pose(3,1), + r02 = pose(0,2), r12 = pose(1,2), r22 = pose(2,2), r32 = pose(3,2); + if ((clicked && nrender_motion>=0) || (!clicked && nrender_static>=0)) + cimg_forX(vertices,l) { + const float x = (float)vertices(l,0), y = (float)vertices(l,1), z = (float)vertices(l,2); + rotated_vertices(l,0) = r00*x + r10*y + r20*z + r30; + rotated_vertices(l,1) = r01*x + r11*y + r21*z + r31; + rotated_vertices(l,2) = r02*x + r12*y + r22*z + r32; + } + else cimg_forX(bbox_vertices,l) { + const float x = bbox_vertices(l,0), y = bbox_vertices(l,1), z = bbox_vertices(l,2); + rotated_bbox_vertices(l,0) = r00*x + r10*y + r20*z + r30; + rotated_bbox_vertices(l,1) = r01*x + r11*y + r21*z + r31; + rotated_bbox_vertices(l,2) = r02*x + r12*y + r22*z + r32; + } + + // Draw objects + const bool render_with_zbuffer = !clicked && nrender_static>0; + visu = visu0; + if ((clicked && nrender_motion<0) || (!clicked && nrender_static<0)) + visu.draw_object3d(Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, + rotated_bbox_vertices,bbox_primitives,bbox_colors,bbox_opacities,2,false,focale). + draw_object3d(Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, + rotated_bbox_vertices,bbox_primitives,bbox_colors2,1,false,focale); + else visu._draw_object3d((void*)0,render_with_zbuffer?zbuffer.fill(0):CImg::empty(), + Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, + rotated_vertices,reverse_primitives?reverse_primitives:primitives, + colors,opacities,clicked?nrender_motion:nrender_static,_is_double_sided==1,focale, + width()/2.0f + light_x,height()/2.0f + light_y,light_z + Zoff, + specular_lightness,specular_shininess,sprite_scale); + // Draw axes + if (ndisplay_axes) { + const float + n = 1e-8f + cimg::hypot(r00,r01,r02), + _r00 = r00/n, _r10 = r10/n, _r20 = r20/n, + _r01 = r01/n, _r11 = r11/n, _r21 = r21/n, + _r02 = r01/n, _r12 = r12/n, _r22 = r22/n, + Xaxes = 25, Yaxes = visu._height - 38.0f; + cimg_forX(axes_vertices,l) { + const float + x = axes_vertices(l,0), + y = axes_vertices(l,1), + z = axes_vertices(l,2); + rotated_axes_vertices(l,0) = _r00*x + _r10*y + _r20*z; + rotated_axes_vertices(l,1) = _r01*x + _r11*y + _r21*z; + rotated_axes_vertices(l,2) = _r02*x + _r12*y + _r22*z; + } + axes_opacities(0,0) = (rotated_axes_vertices(1,2)>0)?0.5f:1.0f; + axes_opacities(1,0) = (rotated_axes_vertices(2,2)>0)?0.5f:1.0f; + axes_opacities(2,0) = (rotated_axes_vertices(3,2)>0)?0.5f:1.0f; + visu.draw_object3d(Xaxes,Yaxes,0,rotated_axes_vertices,axes_primitives, + axes_colors,axes_opacities,1,false,focale). + draw_text((int)(Xaxes + rotated_axes_vertices(4,0)), + (int)(Yaxes + rotated_axes_vertices(4,1)), + "X",axes_colors[0]._data,0,axes_opacities(0,0),13). + draw_text((int)(Xaxes + rotated_axes_vertices(5,0)), + (int)(Yaxes + rotated_axes_vertices(5,1)), + "Y",axes_colors[1]._data,0,axes_opacities(1,0),13). + draw_text((int)(Xaxes + rotated_axes_vertices(6,0)), + (int)(Yaxes + rotated_axes_vertices(6,1)), + "Z",axes_colors[2]._data,0,axes_opacities(2,0),13); + } + visu.display(disp); + if (!clicked || nrender_motion==nrender_static) redraw = false; + } + + // Handle user interaction + disp.wait(); + if ((disp.button() || disp.wheel()) && disp.mouse_x()>=0 && disp.mouse_y()>=0) { + redraw = true; + if (!clicked) { x0 = x1 = disp.mouse_x(); y0 = y1 = disp.mouse_y(); if (!disp.wheel()) clicked = true; } + else { x1 = disp.mouse_x(); y1 = disp.mouse_y(); } + if (disp.button()&1) { + const float + R = 0.45f*std::min(disp.width(),disp.height()), + R2 = R*R, + u0 = (float)(x0 - disp.width()/2), + v0 = (float)(y0 - disp.height()/2), + u1 = (float)(x1 - disp.width()/2), + v1 = (float)(y1 - disp.height()/2), + n0 = cimg::hypot(u0,v0), + n1 = cimg::hypot(u1,v1), + nu0 = n0>R?(u0*R/n0):u0, + nv0 = n0>R?(v0*R/n0):v0, + nw0 = (float)std::sqrt(std::max(0.0f,R2 - nu0*nu0 - nv0*nv0)), + nu1 = n1>R?(u1*R/n1):u1, + nv1 = n1>R?(v1*R/n1):v1, + nw1 = (float)std::sqrt(std::max(0.0f,R2 - nu1*nu1 - nv1*nv1)), + u = nv0*nw1 - nw0*nv1, + v = nw0*nu1 - nu0*nw1, + w = nv0*nu1 - nu0*nv1, + n = cimg::hypot(u,v,w), + alpha = (float)std::asin(n/R2)*180/cimg::PI; + (CImg::rotation_matrix(u,v,w,-alpha)*pose).move_to(pose); + x0 = x1; y0 = y1; + } + if (disp.button()&2) { + if (focale>0) Zoff-=(y0 - y1)*focale/400; + else { const float s = std::exp((y0 - y1)/400.0f); pose*=s; sprite_scale*=s; } + x0 = x1; y0 = y1; + } + if (disp.wheel()) { + if (focale>0) Zoff-=disp.wheel()*focale/20; + else { const float s = std::exp(disp.wheel()/20.0f); pose*=s; sprite_scale*=s; } + disp.set_wheel(); + } + if (disp.button()&4) { Xoff+=(x1 - x0); Yoff+=(y1 - y0); x0 = x1; y0 = y1; } + if ((disp.button()&1) && (disp.button()&2)) { + init_pose = true; disp.set_button(); x0 = x1; y0 = y1; + pose = CImg(4,3,1,1, 1,0,0,0, 0,1,0,0, 0,0,1,0); + } + } else if (clicked) { x0 = x1; y0 = y1; clicked = false; redraw = true; } + + CImg filename(32); + switch (key = disp.key()) { +#if cimg_OS!=2 + case cimg::keyCTRLRIGHT : +#endif + case 0 : case cimg::keyCTRLLEFT : key = 0; break; + case cimg::keyD: if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false). + resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), + CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). + _is_resized = true; + disp.set_key(key,false); key = 0; + } break; + case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false). + resize(cimg_fitscreen(2*disp.width()/3,2*disp.height()/3,1),false)._is_resized = true; + disp.set_key(key,false); key = 0; + } break; + case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false).resize(cimg_fitscreen(_width,_height,_depth),false)._is_resized = true; + disp.set_key(key,false); key = 0; + } break; + case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + if (!ns_width || !ns_height || + ns_width>(unsigned int)disp.screen_width() || ns_height>(unsigned int)disp.screen_height()) { + ns_width = disp.screen_width()*3U/4; + ns_height = disp.screen_height()*3U/4; + } + if (disp.is_fullscreen()) disp.resize(ns_width,ns_height,false); + else { + ns_width = disp._width; ns_height = disp._height; + disp.resize(disp.screen_width(),disp.screen_height(),false); + } + disp.toggle_fullscreen()._is_resized = true; + disp.set_key(key,false); key = 0; + } break; + case cimg::keyT : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + // Switch single/double-sided primitives. + if (--_is_double_sided==-2) _is_double_sided = 1; + if (_is_double_sided>=0) reverse_primitives.assign(); + else primitives.get_reverse_object3d().move_to(reverse_primitives); + disp.set_key(key,false); key = 0; redraw = true; + } break; + case cimg::keyZ : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Enable/disable Z-buffer + if (zbuffer) zbuffer.assign(); + else zbuffer.assign(visu0.width(),visu0.height(),1,1,0); + disp.set_key(key,false); key = 0; redraw = true; + } break; + case cimg::keyA : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Show/hide 3d axes. + ndisplay_axes = !ndisplay_axes; + disp.set_key(key,false); key = 0; redraw = true; + } break; + case cimg::keyF1 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Set rendering mode to points. + nrender_motion = (nrender_static==0 && nrender_motion!=0)?0:-1; nrender_static = 0; + disp.set_key(key,false); key = 0; redraw = true; + } break; + case cimg::keyF2 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Set rendering mode to lines. + nrender_motion = (nrender_static==1 && nrender_motion!=1)?1:-1; nrender_static = 1; + disp.set_key(key,false); key = 0; redraw = true; + } break; + case cimg::keyF3 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Set rendering mode to flat. + nrender_motion = (nrender_static==2 && nrender_motion!=2)?2:-1; nrender_static = 2; + disp.set_key(key,false); key = 0; redraw = true; + } break; + case cimg::keyF4 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Set rendering mode to flat-shaded. + nrender_motion = (nrender_static==3 && nrender_motion!=3)?3:-1; nrender_static = 3; + disp.set_key(key,false); key = 0; redraw = true; + } break; + case cimg::keyF5 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + // Set rendering mode to gouraud-shaded. + nrender_motion = (nrender_static==4 && nrender_motion!=4)?4:-1; nrender_static = 4; + disp.set_key(key,false); key = 0; redraw = true; + } break; + case cimg::keyF6 : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Set rendering mode to phong-shaded. + nrender_motion = (nrender_static==5 && nrender_motion!=5)?5:-1; nrender_static = 5; + disp.set_key(key,false); key = 0; redraw = true; + } break; + case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save snapshot + static unsigned int snap_number = 0; + std::FILE *file; + do { + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.bmp",snap_number++); + if ((file=std_fopen(filename,"r"))!=0) cimg::fclose(file); + } while (file); + (+visu).draw_text(0,0," Saving snapshot... ", + foreground_color._data,background_color._data,0.7f,13).display(disp); + visu.save(filename); + (+visu).draw_text(0,0," Snapshot '%s' saved. ", + foreground_color._data,background_color._data,0.7f,13,filename._data).display(disp); + disp.set_key(key,false); key = 0; + } break; + case cimg::keyG : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save object as a .off file + static unsigned int snap_number = 0; + std::FILE *file; + do { + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.off",snap_number++); + if ((file=std_fopen(filename,"r"))!=0) cimg::fclose(file); + } while (file); + (+visu).draw_text(0,0," Saving object... ", + foreground_color._data,background_color._data,0.7f,13).display(disp); + vertices.save_off(reverse_primitives?reverse_primitives:primitives,colors,filename); + (+visu).draw_text(0,0," Object '%s' saved. ", + foreground_color._data,background_color._data,0.7f,13,filename._data).display(disp); + disp.set_key(key,false); key = 0; + } break; + case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save object as a .cimg file + static unsigned int snap_number = 0; + std::FILE *file; + do { +#ifdef cimg_use_zlib + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimgz",snap_number++); +#else + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimg",snap_number++); +#endif + if ((file=std_fopen(filename,"r"))!=0) cimg::fclose(file); + } while (file); + (+visu).draw_text(0,0," Saving object... ", + foreground_color._data,background_color._data,0.7f,13).display(disp); + vertices.get_object3dtoCImg3d(reverse_primitives?reverse_primitives:primitives,colors,opacities). + save(filename); + (+visu).draw_text(0,0," Object '%s' saved. ", + foreground_color._data,background_color._data,0.7f,13,filename._data).display(disp); + disp.set_key(key,false); key = 0; + } break; +#ifdef cimg_use_board + case cimg::keyP : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save object as a .EPS file + static unsigned int snap_number = 0; + std::FILE *file; + do { + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.eps",snap_number++); + if ((file=std_fopen(filename,"r"))!=0) cimg::fclose(file); + } while (file); + (+visu).draw_text(0,0," Saving EPS snapshot... ", + foreground_color._data,background_color._data,0.7f,13).display(disp); + LibBoard::Board board; + (+visu)._draw_object3d(&board,zbuffer.fill(0), + Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, + rotated_vertices,reverse_primitives?reverse_primitives:primitives, + colors,opacities,clicked?nrender_motion:nrender_static, + _is_double_sided==1,focale, + visu.width()/2.0f + light_x,visu.height()/2.0f + light_y,light_z + Zoff, + specular_lightness,specular_shininess, + sprite_scale); + board.saveEPS(filename); + (+visu).draw_text(0,0," Object '%s' saved. ", + foreground_color._data,background_color._data,0.7f,13,filename._data).display(disp); + disp.set_key(key,false); key = 0; + } break; + case cimg::keyV : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save object as a .SVG file + static unsigned int snap_number = 0; + std::FILE *file; + do { + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.svg",snap_number++); + if ((file=std_fopen(filename,"r"))!=0) cimg::fclose(file); + } while (file); + (+visu).draw_text(0,0," Saving SVG snapshot... ", + foreground_color._data,background_color._data,0.7f,13).display(disp); + LibBoard::Board board; + (+visu)._draw_object3d(&board,zbuffer.fill(0), + Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, + rotated_vertices,reverse_primitives?reverse_primitives:primitives, + colors,opacities,clicked?nrender_motion:nrender_static, + _is_double_sided==1,focale, + visu.width()/2.0f + light_x,visu.height()/2.0f + light_y,light_z + Zoff, + specular_lightness,specular_shininess, + sprite_scale); + board.saveSVG(filename); + (+visu).draw_text(0,0," Object '%s' saved. ", + foreground_color._data,background_color._data,0.7f,13,filename._data).display(disp); + disp.set_key(key,false); key = 0; + } break; +#endif + } + if (disp.is_resized()) { + disp.resize(false); visu0 = get_resize(disp,1); + if (zbuffer) zbuffer.assign(disp.width(),disp.height()); + redraw = true; + } + if (!exit_on_anykey && key && key!=cimg::keyESC && + (key!=cimg::keyW || (!disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT()))) { + key = 0; + } + } + if (pose_matrix) { + std::memcpy(pose_matrix,pose._data,12*sizeof(float)); + pose_matrix[12] = Xoff; pose_matrix[13] = Yoff; pose_matrix[14] = Zoff; pose_matrix[15] = sprite_scale; + } + disp.set_button().set_key(key); + return *this; + } + + //! Display 1d graph in an interactive window. + /** + \param disp Display window. + \param plot_type Plot type. Can be { 0=points | 1=segments | 2=splines | 3=bars }. + \param vertex_type Vertex type. + \param labelx Title for the horizontal axis, as a C-string. + \param xmin Minimum value along the X-axis. + \param xmax Maximum value along the X-axis. + \param labely Title for the vertical axis, as a C-string. + \param ymin Minimum value along the X-axis. + \param ymax Maximum value along the X-axis. + \param exit_on_anykey Exit function when any key is pressed. + **/ + const CImg& display_graph(CImgDisplay &disp, + const unsigned int plot_type=1, const unsigned int vertex_type=1, + const char *const labelx=0, const double xmin=0, const double xmax=0, + const char *const labely=0, const double ymin=0, const double ymax=0, + const bool exit_on_anykey=false) const { + return _display_graph(disp,0,plot_type,vertex_type,labelx,xmin,xmax,labely,ymin,ymax,exit_on_anykey); + } + + //! Display 1d graph in an interactive window \overloading. + const CImg& display_graph(const char *const title=0, + const unsigned int plot_type=1, const unsigned int vertex_type=1, + const char *const labelx=0, const double xmin=0, const double xmax=0, + const char *const labely=0, const double ymin=0, const double ymax=0, + const bool exit_on_anykey=false) const { + CImgDisplay disp; + return _display_graph(disp,title,plot_type,vertex_type,labelx,xmin,xmax,labely,ymin,ymax,exit_on_anykey); + } + + const CImg& _display_graph(CImgDisplay &disp, const char *const title=0, + const unsigned int plot_type=1, const unsigned int vertex_type=1, + const char *const labelx=0, const double xmin=0, const double xmax=0, + const char *const labely=0, const double ymin=0, const double ymax=0, + const bool exit_on_anykey=false) const { + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "display_graph(): Empty instance.", + cimg_instance); + if (!disp) disp.assign(cimg_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1),0,0). + set_title(title?"%s":"CImg<%s>",title?title:pixel_type()); + const ulongT siz = (ulongT)_width*_height*_depth, siz1 = std::max((ulongT)1,siz - 1); + const unsigned int old_normalization = disp.normalization(); + disp.show().flush()._normalization = 0; + + double y0 = ymin, y1 = ymax, nxmin = xmin, nxmax = xmax; + if (nxmin==nxmax) { nxmin = 0; nxmax = siz1; } + int x0 = 0, x1 = width()*height()*depth() - 1, key = 0; + + for (bool reset_view = true; !key && !disp.is_closed(); ) { + if (reset_view) { x0 = 0; x1 = width()*height()*depth() - 1; y0 = ymin; y1 = ymax; reset_view = false; } + CImg zoom(x1 - x0 + 1,1,1,spectrum()); + cimg_forC(*this,c) zoom.get_shared_channel(c) = CImg(data(x0,0,0,c),x1 - x0 + 1,1,1,1,true); + if (y0==y1) { y0 = zoom.min_max(y1); const double dy = y1 - y0; y0-=dy/20; y1+=dy/20; } + if (y0==y1) { --y0; ++y1; } + + const CImg selection = zoom.get_select_graph(disp,plot_type,vertex_type, + labelx, + nxmin + x0*(nxmax - nxmin)/siz1, + nxmin + x1*(nxmax - nxmin)/siz1, + labely,y0,y1,true); + const int mouse_x = disp.mouse_x(), mouse_y = disp.mouse_y(); + if (selection[0]>=0) { + if (selection[2]<0) reset_view = true; + else { + x1 = x0 + selection[2]; x0+=selection[0]; + if (selection[1]>=0 && selection[3]>=0) { + y0 = y1 - selection[3]*(y1 - y0)/(disp.height() - 32); + y1-=selection[1]*(y1 - y0)/(disp.height() - 32); + } + } + } else { + bool go_in = false, go_out = false, go_left = false, go_right = false, go_up = false, go_down = false; + switch (key = (int)disp.key()) { + case cimg::keyHOME : reset_view = true; key = 0; disp.set_key(); break; + case cimg::keyPADADD : go_in = true; go_out = false; key = 0; disp.set_key(); break; + case cimg::keyPADSUB : go_out = true; go_in = false; key = 0; disp.set_key(); break; + case cimg::keyARROWLEFT : case cimg::keyPAD4 : go_left = true; go_right = false; key = 0; disp.set_key(); + break; + case cimg::keyARROWRIGHT : case cimg::keyPAD6 : go_right = true; go_left = false; key = 0; disp.set_key(); + break; + case cimg::keyARROWUP : case cimg::keyPAD8 : go_up = true; go_down = false; key = 0; disp.set_key(); break; + case cimg::keyARROWDOWN : case cimg::keyPAD2 : go_down = true; go_up = false; key = 0; disp.set_key(); break; + case cimg::keyPAD7 : go_left = true; go_up = true; key = 0; disp.set_key(); break; + case cimg::keyPAD9 : go_right = true; go_up = true; key = 0; disp.set_key(); break; + case cimg::keyPAD1 : go_left = true; go_down = true; key = 0; disp.set_key(); break; + case cimg::keyPAD3 : go_right = true; go_down = true; key = 0; disp.set_key(); break; + } + if (disp.wheel()) { + if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) go_up = !(go_down = disp.wheel()<0); + else if (disp.is_keySHIFTLEFT() || disp.is_keySHIFTRIGHT()) go_left = !(go_right = disp.wheel()>0); + else go_out = !(go_in = disp.wheel()>0); + key = 0; + } + + if (go_in) { + const int + xsiz = x1 - x0, + mx = (mouse_x - 16)*xsiz/(disp.width() - 32), + cx = x0 + cimg::cut(mx,0,xsiz); + if (x1 - x0>4) { + x0 = cx - 7*(cx - x0)/8; x1 = cx + 7*(x1 - cx)/8; + if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + const double + ysiz = y1 - y0, + my = (mouse_y - 16)*ysiz/(disp.height() - 32), + cy = y1 - cimg::cut(my,0.0,ysiz); + y0 = cy - 7*(cy - y0)/8; y1 = cy + 7*(y1 - cy)/8; + } else y0 = y1 = 0; + } + } + if (go_out) { + if (x0>0 || x1<(int)siz1) { + const int delta_x = (x1 - x0)/8, ndelta_x = delta_x?delta_x:(siz>1); + const double ndelta_y = (y1 - y0)/8; + x0-=ndelta_x; x1+=ndelta_x; + y0-=ndelta_y; y1+=ndelta_y; + if (x0<0) { x1-=x0; x0 = 0; if (x1>=(int)siz) x1 = (int)siz1; } + if (x1>=(int)siz) { x0-=(x1 - siz1); x1 = (int)siz1; if (x0<0) x0 = 0; } + } + } + if (go_left) { + const int delta = (x1 - x0)/5, ndelta = delta?delta:1; + if (x0 - ndelta>=0) { x0-=ndelta; x1-=ndelta; } + else { x1-=x0; x0 = 0; } + go_left = false; + } + if (go_right) { + const int delta = (x1 - x0)/5, ndelta = delta?delta:1; + if (x1 + ndelta<(int)siz) { x0+=ndelta; x1+=ndelta; } + else { x0+=(siz1 - x1); x1 = (int)siz1; } + go_right = false; + } + if (go_up) { + const double delta = (y1 - y0)/10, ndelta = delta?delta:1; + y0+=ndelta; y1+=ndelta; + go_up = false; + } + if (go_down) { + const double delta = (y1 - y0)/10, ndelta = delta?delta:1; + y0-=ndelta; y1-=ndelta; + go_down = false; + } + } + if (!exit_on_anykey && key && key!=(int)cimg::keyESC && + (key!=(int)cimg::keyW || (!disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT()))) { + disp.set_key(key,false); + key = 0; + } + } + disp._normalization = old_normalization; + return *this; + } + + //! Save image as a file. + /** + \param filename Filename, as a C-string. + \param number When positive, represents an index added to the filename. Otherwise, no number is added. + \param digits Number of digits used for adding the number to the filename. + \note + - The used file format is defined by the file extension in the filename \p filename. + - Parameter \p number can be used to add a 6-digit number to the filename before saving. + + **/ + const CImg& save(const char *const filename, const int number=-1, const unsigned int digits=6) const { + if (!filename) + throw CImgArgumentException(_cimg_instance + "save(): Specified filename is (null).", + cimg_instance); + // Do not test for empty instances, since .cimg format is able to manage empty instances. + const bool is_stdout = *filename=='-' && (!filename[1] || filename[1]=='.'); + const char *const ext = cimg::split_filename(filename); + CImg nfilename(1024); + const char *const fn = is_stdout?filename:(number>=0)?cimg::number_filename(filename,number,digits,nfilename): + filename; + +#ifdef cimg_save_plugin + cimg_save_plugin(fn); +#endif +#ifdef cimg_save_plugin1 + cimg_save_plugin1(fn); +#endif +#ifdef cimg_save_plugin2 + cimg_save_plugin2(fn); +#endif +#ifdef cimg_save_plugin3 + cimg_save_plugin3(fn); +#endif +#ifdef cimg_save_plugin4 + cimg_save_plugin4(fn); +#endif +#ifdef cimg_save_plugin5 + cimg_save_plugin5(fn); +#endif +#ifdef cimg_save_plugin6 + cimg_save_plugin6(fn); +#endif +#ifdef cimg_save_plugin7 + cimg_save_plugin7(fn); +#endif +#ifdef cimg_save_plugin8 + cimg_save_plugin8(fn); +#endif + // Ascii formats + if (!cimg::strcasecmp(ext,"asc")) return save_ascii(fn); + else if (!cimg::strcasecmp(ext,"dlm") || + !cimg::strcasecmp(ext,"txt")) return save_dlm(fn); + else if (!cimg::strcasecmp(ext,"cpp") || + !cimg::strcasecmp(ext,"hpp") || + !cimg::strcasecmp(ext,"h") || + !cimg::strcasecmp(ext,"c")) return save_cpp(fn); + + // 2d binary formats + else if (!cimg::strcasecmp(ext,"bmp")) return save_bmp(fn); + else if (!cimg::strcasecmp(ext,"jpg") || + !cimg::strcasecmp(ext,"jpeg") || + !cimg::strcasecmp(ext,"jpe") || + !cimg::strcasecmp(ext,"jfif") || + !cimg::strcasecmp(ext,"jif")) return save_jpeg(fn); + else if (!cimg::strcasecmp(ext,"rgb")) return save_rgb(fn); + else if (!cimg::strcasecmp(ext,"rgba")) return save_rgba(fn); + else if (!cimg::strcasecmp(ext,"png")) return save_png(fn); + else if (!cimg::strcasecmp(ext,"pgm") || + !cimg::strcasecmp(ext,"ppm") || + !cimg::strcasecmp(ext,"pnm")) return save_pnm(fn); + else if (!cimg::strcasecmp(ext,"pnk")) return save_pnk(fn); + else if (!cimg::strcasecmp(ext,"pfm")) return save_pfm(fn); + else if (!cimg::strcasecmp(ext,"exr")) return save_exr(fn); + else if (!cimg::strcasecmp(ext,"tif") || + !cimg::strcasecmp(ext,"tiff")) return save_tiff(fn); + + // 3d binary formats + else if (!cimg::strcasecmp(ext,"cimgz")) return save_cimg(fn,true); + else if (!cimg::strcasecmp(ext,"cimg") || !*ext) return save_cimg(fn,false); + else if (!cimg::strcasecmp(ext,"dcm")) return save_medcon_external(fn); + else if (!cimg::strcasecmp(ext,"hdr") || + !cimg::strcasecmp(ext,"nii")) return save_analyze(fn); + else if (!cimg::strcasecmp(ext,"inr")) return save_inr(fn); + else if (!cimg::strcasecmp(ext,"mnc")) return save_minc2(fn); + else if (!cimg::strcasecmp(ext,"pan")) return save_pandore(fn); + else if (!cimg::strcasecmp(ext,"raw")) return save_raw(fn); + + // Archive files + else if (!cimg::strcasecmp(ext,"gz")) return save_gzip_external(fn); + + // Image sequences + else if (!cimg::strcasecmp(ext,"yuv")) return save_yuv(fn,444,true); + else if (!cimg::strcasecmp(ext,"avi") || + !cimg::strcasecmp(ext,"mov") || + !cimg::strcasecmp(ext,"asf") || + !cimg::strcasecmp(ext,"divx") || + !cimg::strcasecmp(ext,"flv") || + !cimg::strcasecmp(ext,"mpg") || + !cimg::strcasecmp(ext,"m1v") || + !cimg::strcasecmp(ext,"m2v") || + !cimg::strcasecmp(ext,"m4v") || + !cimg::strcasecmp(ext,"mjp") || + !cimg::strcasecmp(ext,"mp4") || + !cimg::strcasecmp(ext,"mkv") || + !cimg::strcasecmp(ext,"mpe") || + !cimg::strcasecmp(ext,"movie") || + !cimg::strcasecmp(ext,"ogm") || + !cimg::strcasecmp(ext,"ogg") || + !cimg::strcasecmp(ext,"ogv") || + !cimg::strcasecmp(ext,"qt") || + !cimg::strcasecmp(ext,"rm") || + !cimg::strcasecmp(ext,"vob") || + !cimg::strcasecmp(ext,"wmv") || + !cimg::strcasecmp(ext,"xvid") || + !cimg::strcasecmp(ext,"mpeg")) return save_video(fn); + return save_other(fn); + } + + //! Save image as an ascii file. + /** + \param filename Filename, as a C-string. + **/ + const CImg& save_ascii(const char *const filename) const { + return _save_ascii(0,filename); + } + + //! Save image as an ascii file \overloading. + const CImg& save_ascii(std::FILE *const file) const { + return _save_ascii(file,0); + } + + const CImg& _save_ascii(std::FILE *const file, const char *const filename) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_ascii(): Specified filename is (null).", + cimg_instance); + std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); + std::fprintf(nfile,"%u %u %u %u\n",_width,_height,_depth,_spectrum); + const T* ptrs = _data; + cimg_forYZC(*this,y,z,c) { + cimg_forX(*this,x) std::fprintf(nfile,"%.17g ",(double)*(ptrs++)); + std::fputc('\n',nfile); + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Save image as a .cpp source file. + /** + \param filename Filename, as a C-string. + **/ + const CImg& save_cpp(const char *const filename) const { + return _save_cpp(0,filename); + } + + //! Save image as a .cpp source file \overloading. + const CImg& save_cpp(std::FILE *const file) const { + return _save_cpp(file,0); + } + + const CImg& _save_cpp(std::FILE *const file, const char *const filename) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_cpp(): Specified filename is (null).", + cimg_instance); + std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); + CImg varname(1024); *varname = 0; + if (filename) cimg_sscanf(cimg::basename(filename),"%1023[a-zA-Z0-9_]",varname._data); + if (!*varname) cimg_snprintf(varname,varname._width,"unnamed"); + std::fprintf(nfile, + "/* Define image '%s' of size %ux%ux%ux%u and type '%s' */\n" + "%s data_%s[] = { %s\n ", + varname._data,_width,_height,_depth,_spectrum,pixel_type(),pixel_type(),varname._data, + is_empty()?"};":""); + if (!is_empty()) for (ulongT off = 0, siz = size() - 1; off<=siz; ++off) { + std::fprintf(nfile,cimg::type::format(),cimg::type::format((*this)[off])); + if (off==siz) std::fprintf(nfile," };\n"); + else if (!((off + 1)%16)) std::fprintf(nfile,",\n "); + else std::fprintf(nfile,", "); + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Save image as a DLM file. + /** + \param filename Filename, as a C-string. + **/ + const CImg& save_dlm(const char *const filename) const { + return _save_dlm(0,filename); + } + + //! Save image as a DLM file \overloading. + const CImg& save_dlm(std::FILE *const file) const { + return _save_dlm(file,0); + } + + const CImg& _save_dlm(std::FILE *const file, const char *const filename) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_dlm(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(file,filename); return *this; } + if (_depth>1) + cimg::warn(_cimg_instance + "save_dlm(): Instance is volumetric, values along Z will be unrolled in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + if (_spectrum>1) + cimg::warn(_cimg_instance + "save_dlm(): Instance is multispectral, values along C will be unrolled in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); + const T* ptrs = _data; + cimg_forYZC(*this,y,z,c) { + cimg_forX(*this,x) std::fprintf(nfile,"%.17g%s",(double)*(ptrs++),(x==width() - 1)?"":","); + std::fputc('\n',nfile); + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Save image as a BMP file. + /** + \param filename Filename, as a C-string. + **/ + const CImg& save_bmp(const char *const filename) const { + return _save_bmp(0,filename); + } + + //! Save image as a BMP file \overloading. + const CImg& save_bmp(std::FILE *const file) const { + return _save_bmp(file,0); + } + + const CImg& _save_bmp(std::FILE *const file, const char *const filename) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_bmp(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(file,filename); return *this; } + if (_depth>1) + cimg::warn(_cimg_instance + "save_bmp(): Instance is volumetric, only the first slice will be saved in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + if (_spectrum>3) + cimg::warn(_cimg_instance + "save_bmp(): Instance is multispectral, only the three first channels will be saved in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + CImg header(54,1,1,1,0); + unsigned char align_buf[4] = { 0 }; + const unsigned int + align = (4 - (3*_width)%4)%4, + buf_size = (3*_width + align)*height(), + file_size = 54 + buf_size; + header[0] = 'B'; header[1] = 'M'; + header[0x02] = file_size&0xFF; + header[0x03] = (file_size>>8)&0xFF; + header[0x04] = (file_size>>16)&0xFF; + header[0x05] = (file_size>>24)&0xFF; + header[0x0A] = 0x36; + header[0x0E] = 0x28; + header[0x12] = _width&0xFF; + header[0x13] = (_width>>8)&0xFF; + header[0x14] = (_width>>16)&0xFF; + header[0x15] = (_width>>24)&0xFF; + header[0x16] = _height&0xFF; + header[0x17] = (_height>>8)&0xFF; + header[0x18] = (_height>>16)&0xFF; + header[0x19] = (_height>>24)&0xFF; + header[0x1A] = 1; + header[0x1B] = 0; + header[0x1C] = 24; + header[0x1D] = 0; + header[0x22] = buf_size&0xFF; + header[0x23] = (buf_size>>8)&0xFF; + header[0x24] = (buf_size>>16)&0xFF; + header[0x25] = (buf_size>>24)&0xFF; + header[0x27] = 0x1; + header[0x2B] = 0x1; + cimg::fwrite(header._data,54,nfile); + + const T + *ptr_r = data(0,_height - 1,0,0), + *ptr_g = (_spectrum>=2)?data(0,_height - 1,0,1):0, + *ptr_b = (_spectrum>=3)?data(0,_height - 1,0,2):0; + + switch (_spectrum) { + case 1 : { + cimg_forY(*this,y) { + cimg_forX(*this,x) { + const unsigned char val = (unsigned char)*(ptr_r++); + std::fputc(val,nfile); std::fputc(val,nfile); std::fputc(val,nfile); + } + cimg::fwrite(align_buf,align,nfile); + ptr_r-=2*_width; + } + } break; + case 2 : { + cimg_forY(*this,y) { + cimg_forX(*this,x) { + std::fputc(0,nfile); + std::fputc((unsigned char)(*(ptr_g++)),nfile); + std::fputc((unsigned char)(*(ptr_r++)),nfile); + } + cimg::fwrite(align_buf,align,nfile); + ptr_r-=2*_width; ptr_g-=2*_width; + } + } break; + default : { + cimg_forY(*this,y) { + cimg_forX(*this,x) { + std::fputc((unsigned char)(*(ptr_b++)),nfile); + std::fputc((unsigned char)(*(ptr_g++)),nfile); + std::fputc((unsigned char)(*(ptr_r++)),nfile); + } + cimg::fwrite(align_buf,align,nfile); + ptr_r-=2*_width; ptr_g-=2*_width; ptr_b-=2*_width; + } + } + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Save image as a JPEG file. + /** + \param filename Filename, as a C-string. + \param quality Image quality (in %) + **/ + const CImg& save_jpeg(const char *const filename, const unsigned int quality=100) const { + return _save_jpeg(0,filename,quality); + } + + //! Save image as a JPEG file \overloading. + const CImg& save_jpeg(std::FILE *const file, const unsigned int quality=100) const { + return _save_jpeg(file,0,quality); + } + + const CImg& _save_jpeg(std::FILE *const file, const char *const filename, const unsigned int quality) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_jpeg(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(file,filename); return *this; } + if (_depth>1) + cimg::warn(_cimg_instance + "save_jpeg(): Instance is volumetric, only the first slice will be saved in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + +#ifndef cimg_use_jpeg + if (!file) return save_other(filename,quality); + else throw CImgIOException(_cimg_instance + "save_jpeg(): Unable to save data in '(*FILE)' unless libjpeg is enabled.", + cimg_instance); +#else + unsigned int dimbuf = 0; + J_COLOR_SPACE colortype = JCS_RGB; + + switch (_spectrum) { + case 1 : dimbuf = 1; colortype = JCS_GRAYSCALE; break; + case 2 : dimbuf = 3; colortype = JCS_RGB; break; + case 3 : dimbuf = 3; colortype = JCS_RGB; break; + default : dimbuf = 4; colortype = JCS_CMYK; break; + } + + // Call libjpeg functions + struct jpeg_compress_struct cinfo; + struct jpeg_error_mgr jerr; + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_compress(&cinfo); + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + jpeg_stdio_dest(&cinfo,nfile); + cinfo.image_width = _width; + cinfo.image_height = _height; + cinfo.input_components = dimbuf; + cinfo.in_color_space = colortype; + jpeg_set_defaults(&cinfo); + jpeg_set_quality(&cinfo,quality<100?quality:100,TRUE); + jpeg_start_compress(&cinfo,TRUE); + + JSAMPROW row_pointer[1]; + CImg buffer(_width*dimbuf); + + while (cinfo.next_scanline& save_magick(const char *const filename, const unsigned int bytes_per_pixel=0) const { + if (!filename) + throw CImgArgumentException(_cimg_instance + "save_magick(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(0,filename); return *this; } + +#ifdef cimg_use_magick + double stmin, stmax = (double)max_min(stmin); + if (_depth>1) + cimg::warn(_cimg_instance + "save_magick(): Instance is volumetric, only the first slice will be saved in file '%s'.", + cimg_instance, + filename); + + if (_spectrum>3) + cimg::warn(_cimg_instance + "save_magick(): Instance is multispectral, only the three first channels will be " + "saved in file '%s'.", + cimg_instance, + filename); + + if (stmin<0 || (bytes_per_pixel==1 && stmax>=256) || stmax>=65536) + cimg::warn(_cimg_instance + "save_magick(): Instance has pixel values in [%g,%g], probable type overflow in file '%s'.", + cimg_instance, + filename,stmin,stmax); + + Magick::Image image(Magick::Geometry(_width,_height),"black"); + image.type(Magick::TrueColorType); + image.depth(bytes_per_pixel?(8*bytes_per_pixel):(stmax>=256?16:8)); + const T + *ptr_r = data(0,0,0,0), + *ptr_g = _spectrum>1?data(0,0,0,1):0, + *ptr_b = _spectrum>2?data(0,0,0,2):0; + Magick::PixelPacket *pixels = image.getPixels(0,0,_width,_height); + switch (_spectrum) { + case 1 : // Scalar images + for (ulongT off = (ulongT)_width*_height; off; --off) { + pixels->red = pixels->green = pixels->blue = (Magick::Quantum)*(ptr_r++); + ++pixels; + } + break; + case 2 : // RG images + for (ulongT off = (ulongT)_width*_height; off; --off) { + pixels->red = (Magick::Quantum)*(ptr_r++); + pixels->green = (Magick::Quantum)*(ptr_g++); + pixels->blue = 0; ++pixels; + } + break; + default : // RGB images + for (ulongT off = (ulongT)_width*_height; off; --off) { + pixels->red = (Magick::Quantum)*(ptr_r++); + pixels->green = (Magick::Quantum)*(ptr_g++); + pixels->blue = (Magick::Quantum)*(ptr_b++); + ++pixels; + } + } + image.syncPixels(); + image.write(filename); + return *this; +#else + cimg::unused(bytes_per_pixel); + throw CImgIOException(_cimg_instance + "save_magick(): Unable to save file '%s' unless libMagick++ is enabled.", + cimg_instance, + filename); +#endif + } + + //! Save image as a PNG file. + /** + \param filename Filename, as a C-string. + \param bytes_per_pixel Force the number of bytes per pixels for the saving, when possible. + **/ + const CImg& save_png(const char *const filename, const unsigned int bytes_per_pixel=0) const { + return _save_png(0,filename,bytes_per_pixel); + } + + //! Save image as a PNG file \overloading. + const CImg& save_png(std::FILE *const file, const unsigned int bytes_per_pixel=0) const { + return _save_png(file,0,bytes_per_pixel); + } + + const CImg& _save_png(std::FILE *const file, const char *const filename, + const unsigned int bytes_per_pixel=0) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_png(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(file,filename); return *this; } + +#ifndef cimg_use_png + cimg::unused(bytes_per_pixel); + if (!file) return save_other(filename); + else throw CImgIOException(_cimg_instance + "save_png(): Unable to save data in '(*FILE)' unless libpng is enabled.", + cimg_instance); +#else + +#if defined __GNUC__ + const char *volatile nfilename = filename; // Use 'volatile' to avoid (wrong) g++ warning. + std::FILE *volatile nfile = file?file:cimg::fopen(nfilename,"wb"); + volatile double stmin, stmax = (double)max_min(stmin); +#else + const char *nfilename = filename; + std::FILE *nfile = file?file:cimg::fopen(nfilename,"wb"); + double stmin, stmax = (double)max_min(stmin); +#endif + + if (_depth>1) + cimg::warn(_cimg_instance + "save_png(): Instance is volumetric, only the first slice will be saved in file '%s'.", + cimg_instance, + filename); + + if (_spectrum>4) + cimg::warn(_cimg_instance + "save_png(): Instance is multispectral, only the three first channels will be saved in file '%s'.", + cimg_instance, + filename); + + if (stmin<0 || (bytes_per_pixel==1 && stmax>=256) || stmax>=65536) + cimg::warn(_cimg_instance + "save_png(): Instance has pixel values in [%g,%g], probable type overflow in file '%s'.", + cimg_instance, + filename,stmin,stmax); + + // Setup PNG structures for write + png_voidp user_error_ptr = 0; + png_error_ptr user_error_fn = 0, user_warning_fn = 0; + png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,user_error_ptr, user_error_fn, + user_warning_fn); + if (!png_ptr){ + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "save_png(): Failed to initialize 'png_ptr' structure when saving file '%s'.", + cimg_instance, + nfilename?nfilename:"(FILE*)"); + } + png_infop info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) { + png_destroy_write_struct(&png_ptr,(png_infopp)0); + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "save_png(): Failed to initialize 'info_ptr' structure when saving file '%s'.", + cimg_instance, + nfilename?nfilename:"(FILE*)"); + } + if (setjmp(png_jmpbuf(png_ptr))) { + png_destroy_write_struct(&png_ptr, &info_ptr); + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "save_png(): Encountered unknown fatal error in libpng when saving file '%s'.", + cimg_instance, + nfilename?nfilename:"(FILE*)"); + } + png_init_io(png_ptr, nfile); + + const int bit_depth = bytes_per_pixel?(bytes_per_pixel*8):(stmax>=256?16:8); + + int color_type; + switch (spectrum()) { + case 1 : color_type = PNG_COLOR_TYPE_GRAY; break; + case 2 : color_type = PNG_COLOR_TYPE_GRAY_ALPHA; break; + case 3 : color_type = PNG_COLOR_TYPE_RGB; break; + default : color_type = PNG_COLOR_TYPE_RGB_ALPHA; + } + const int interlace_type = PNG_INTERLACE_NONE; + const int compression_type = PNG_COMPRESSION_TYPE_DEFAULT; + const int filter_method = PNG_FILTER_TYPE_DEFAULT; + png_set_IHDR(png_ptr,info_ptr,_width,_height,bit_depth,color_type,interlace_type,compression_type,filter_method); + png_write_info(png_ptr,info_ptr); + const int byte_depth = bit_depth>>3; + const int numChan = spectrum()>4?4:spectrum(); + const int pixel_bit_depth_flag = numChan * (bit_depth - 1); + + // Allocate Memory for Image Save and Fill pixel data + png_bytep *const imgData = new png_byte*[_height]; + for (unsigned int row = 0; row<_height; ++row) imgData[row] = new png_byte[byte_depth*numChan*_width]; + const T *pC0 = data(0,0,0,0); + switch (pixel_bit_depth_flag) { + case 7 : { // Gray 8-bit + cimg_forY(*this,y) { + unsigned char *ptrd = imgData[y]; + cimg_forX(*this,x) *(ptrd++) = (unsigned char)*(pC0++); + } + } break; + case 14 : { // Gray w/ Alpha 8-bit + const T *pC1 = data(0,0,0,1); + cimg_forY(*this,y) { + unsigned char *ptrd = imgData[y]; + cimg_forX(*this,x) { + *(ptrd++) = (unsigned char)*(pC0++); + *(ptrd++) = (unsigned char)*(pC1++); + } + } + } break; + case 21 : { // RGB 8-bit + const T *pC1 = data(0,0,0,1), *pC2 = data(0,0,0,2); + cimg_forY(*this,y) { + unsigned char *ptrd = imgData[y]; + cimg_forX(*this,x) { + *(ptrd++) = (unsigned char)*(pC0++); + *(ptrd++) = (unsigned char)*(pC1++); + *(ptrd++) = (unsigned char)*(pC2++); + } + } + } break; + case 28 : { // RGB x/ Alpha 8-bit + const T *pC1 = data(0,0,0,1), *pC2 = data(0,0,0,2), *pC3 = data(0,0,0,3); + cimg_forY(*this,y){ + unsigned char *ptrd = imgData[y]; + cimg_forX(*this,x){ + *(ptrd++) = (unsigned char)*(pC0++); + *(ptrd++) = (unsigned char)*(pC1++); + *(ptrd++) = (unsigned char)*(pC2++); + *(ptrd++) = (unsigned char)*(pC3++); + } + } + } break; + case 15 : { // Gray 16-bit + cimg_forY(*this,y){ + unsigned short *ptrd = (unsigned short*)(imgData[y]); + cimg_forX(*this,x) *(ptrd++) = (unsigned short)*(pC0++); + if (!cimg::endianness()) cimg::invert_endianness((unsigned short*)imgData[y],_width); + } + } break; + case 30 : { // Gray w/ Alpha 16-bit + const T *pC1 = data(0,0,0,1); + cimg_forY(*this,y){ + unsigned short *ptrd = (unsigned short*)(imgData[y]); + cimg_forX(*this,x) { + *(ptrd++) = (unsigned short)*(pC0++); + *(ptrd++) = (unsigned short)*(pC1++); + } + if (!cimg::endianness()) cimg::invert_endianness((unsigned short*)imgData[y],2*_width); + } + } break; + case 45 : { // RGB 16-bit + const T *pC1 = data(0,0,0,1), *pC2 = data(0,0,0,2); + cimg_forY(*this,y) { + unsigned short *ptrd = (unsigned short*)(imgData[y]); + cimg_forX(*this,x) { + *(ptrd++) = (unsigned short)*(pC0++); + *(ptrd++) = (unsigned short)*(pC1++); + *(ptrd++) = (unsigned short)*(pC2++); + } + if (!cimg::endianness()) cimg::invert_endianness((unsigned short*)imgData[y],3*_width); + } + } break; + case 60 : { // RGB w/ Alpha 16-bit + const T *pC1 = data(0,0,0,1), *pC2 = data(0,0,0,2), *pC3 = data(0,0,0,3); + cimg_forY(*this,y) { + unsigned short *ptrd = (unsigned short*)(imgData[y]); + cimg_forX(*this,x) { + *(ptrd++) = (unsigned short)*(pC0++); + *(ptrd++) = (unsigned short)*(pC1++); + *(ptrd++) = (unsigned short)*(pC2++); + *(ptrd++) = (unsigned short)*(pC3++); + } + if (!cimg::endianness()) cimg::invert_endianness((unsigned short*)imgData[y],4*_width); + } + } break; + default : + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimg_instance + "save_png(): Encountered unknown fatal error in libpng when saving file '%s'.", + cimg_instance, + nfilename?nfilename:"(FILE*)"); + } + png_write_image(png_ptr,imgData); + png_write_end(png_ptr,info_ptr); + png_destroy_write_struct(&png_ptr, &info_ptr); + + // Deallocate Image Write Memory + cimg_forY(*this,n) delete[] imgData[n]; + delete[] imgData; + + if (!file) cimg::fclose(nfile); + return *this; +#endif + } + + //! Save image as a PNM file. + /** + \param filename Filename, as a C-string. + \param bytes_per_pixel Force the number of bytes per pixels for the saving. + **/ + const CImg& save_pnm(const char *const filename, const unsigned int bytes_per_pixel=0) const { + return _save_pnm(0,filename,bytes_per_pixel); + } + + //! Save image as a PNM file \overloading. + const CImg& save_pnm(std::FILE *const file, const unsigned int bytes_per_pixel=0) const { + return _save_pnm(file,0,bytes_per_pixel); + } + + const CImg& _save_pnm(std::FILE *const file, const char *const filename, + const unsigned int bytes_per_pixel=0) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_pnm(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(file,filename); return *this; } + + double stmin, stmax = (double)max_min(stmin); + if (_depth>1) + cimg::warn(_cimg_instance + "save_pnm(): Instance is volumetric, only the first slice will be saved in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + if (_spectrum>3) + cimg::warn(_cimg_instance + "save_pnm(): Instance is multispectral, only the three first channels will be saved in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + if (stmin<0 || (bytes_per_pixel==1 && stmax>=256) || stmax>=65536) + cimg::warn(_cimg_instance + "save_pnm(): Instance has pixel values in [%g,%g], probable type overflow in file '%s'.", + cimg_instance, + stmin,stmax,filename?filename:"(FILE*)"); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + const T + *ptr_r = data(0,0,0,0), + *ptr_g = (_spectrum>=2)?data(0,0,0,1):0, + *ptr_b = (_spectrum>=3)?data(0,0,0,2):0; + const ulongT buf_size = std::min((ulongT)(1024*1024),(ulongT)(_width*_height*(_spectrum==1?1UL:3UL))); + + std::fprintf(nfile,"P%c\n%u %u\n%u\n", + (_spectrum==1?'5':'6'),_width,_height,stmax<256?255:(stmax<4096?4095:65535)); + + switch (_spectrum) { + case 1 : { // Scalar image + if (bytes_per_pixel==1 || (!bytes_per_pixel && stmax<256)) { // Binary PGM 8 bits + CImg buf((unsigned int)buf_size); + for (longT to_write = (longT)width()*height(); to_write>0; ) { + const ulongT N = std::min((ulongT)to_write,buf_size); + unsigned char *ptrd = buf._data; + for (ulongT i = N; i>0; --i) *(ptrd++) = (unsigned char)*(ptr_r++); + cimg::fwrite(buf._data,N,nfile); + to_write-=N; + } + } else { // Binary PGM 16 bits + CImg buf((unsigned int)buf_size); + for (longT to_write = (longT)width()*height(); to_write>0; ) { + const ulongT N = std::min((ulongT)to_write,buf_size); + unsigned short *ptrd = buf._data; + for (ulongT i = N; i>0; --i) *(ptrd++) = (unsigned short)*(ptr_r++); + if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); + cimg::fwrite(buf._data,N,nfile); + to_write-=N; + } + } + } break; + case 2 : { // RG image + if (bytes_per_pixel==1 || (!bytes_per_pixel && stmax<256)) { // Binary PPM 8 bits + CImg buf((unsigned int)buf_size); + for (longT to_write = (longT)width()*height(); to_write>0; ) { + const ulongT N = std::min((ulongT)to_write,buf_size/3); + unsigned char *ptrd = buf._data; + for (ulongT i = N; i>0; --i) { + *(ptrd++) = (unsigned char)*(ptr_r++); + *(ptrd++) = (unsigned char)*(ptr_g++); + *(ptrd++) = 0; + } + cimg::fwrite(buf._data,3*N,nfile); + to_write-=N; + } + } else { // Binary PPM 16 bits + CImg buf((unsigned int)buf_size); + for (longT to_write = (longT)width()*height(); to_write>0; ) { + const ulongT N = std::min((ulongT)to_write,buf_size/3); + unsigned short *ptrd = buf._data; + for (ulongT i = N; i>0; --i) { + *(ptrd++) = (unsigned short)*(ptr_r++); + *(ptrd++) = (unsigned short)*(ptr_g++); + *(ptrd++) = 0; + } + if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); + cimg::fwrite(buf._data,3*N,nfile); + to_write-=N; + } + } + } break; + default : { // RGB image + if (bytes_per_pixel==1 || (!bytes_per_pixel && stmax<256)) { // Binary PPM 8 bits + CImg buf((unsigned int)buf_size); + for (longT to_write = (longT)width()*height(); to_write>0; ) { + const ulongT N = std::min((ulongT)to_write,buf_size/3); + unsigned char *ptrd = buf._data; + for (ulongT i = N; i>0; --i) { + *(ptrd++) = (unsigned char)*(ptr_r++); + *(ptrd++) = (unsigned char)*(ptr_g++); + *(ptrd++) = (unsigned char)*(ptr_b++); + } + cimg::fwrite(buf._data,3*N,nfile); + to_write-=N; + } + } else { // Binary PPM 16 bits + CImg buf((unsigned int)buf_size); + for (longT to_write = (longT)width()*height(); to_write>0; ) { + const ulongT N = std::min((ulongT)to_write,buf_size/3); + unsigned short *ptrd = buf._data; + for (ulongT i = N; i>0; --i) { + *(ptrd++) = (unsigned short)*(ptr_r++); + *(ptrd++) = (unsigned short)*(ptr_g++); + *(ptrd++) = (unsigned short)*(ptr_b++); + } + if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); + cimg::fwrite(buf._data,3*N,nfile); + to_write-=N; + } + } + } + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Save image as a PNK file. + /** + \param filename Filename, as a C-string. + **/ + const CImg& save_pnk(const char *const filename) const { + return _save_pnk(0,filename); + } + + //! Save image as a PNK file \overloading. + const CImg& save_pnk(std::FILE *const file) const { + return _save_pnk(file,0); + } + + const CImg& _save_pnk(std::FILE *const file, const char *const filename) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_pnk(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(file,filename); return *this; } + if (_spectrum>1) + cimg::warn(_cimg_instance + "save_pnk(): Instance is multispectral, only the first channel will be saved in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + + const ulongT buf_size = std::min((ulongT)1024*1024,(ulongT)_width*_height*_depth); + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + const T *ptr = data(0,0,0,0); + + if (!cimg::type::is_float() && sizeof(T)==1 && _depth<2) // Can be saved as regular PNM file. + _save_pnm(file,filename,0); + else if (!cimg::type::is_float() && sizeof(T)==1) { // Save as extended P5 file: Binary byte-valued 3d. + std::fprintf(nfile,"P5\n%u %u %u\n255\n",_width,_height,_depth); + CImg buf((unsigned int)buf_size); + for (longT to_write = (longT)width()*height()*depth(); to_write>0; ) { + const ulongT N = std::min((ulongT)to_write,buf_size); + unsigned char *ptrd = buf._data; + for (ulongT i = N; i>0; --i) *(ptrd++) = (unsigned char)*(ptr++); + cimg::fwrite(buf._data,N,nfile); + to_write-=N; + } + } else if (!cimg::type::is_float()) { // Save as P8: Binary int32-valued 3d. + if (_depth>1) std::fprintf(nfile,"P8\n%u %u %u\n%d\n",_width,_height,_depth,(int)max()); + else std::fprintf(nfile,"P8\n%u %u\n%d\n",_width,_height,(int)max()); + CImg buf((unsigned int)buf_size); + for (longT to_write = (longT)width()*height()*depth(); to_write>0; ) { + const ulongT N = std::min((ulongT)to_write,buf_size); + int *ptrd = buf._data; + for (ulongT i = N; i>0; --i) *(ptrd++) = (int)*(ptr++); + cimg::fwrite(buf._data,N,nfile); + to_write-=N; + } + } else { // Save as P9: Binary float-valued 3d. + if (_depth>1) std::fprintf(nfile,"P9\n%u %u %u\n%g\n",_width,_height,_depth,(double)max()); + else std::fprintf(nfile,"P9\n%u %u\n%g\n",_width,_height,(double)max()); + CImg buf((unsigned int)buf_size); + for (longT to_write = (longT)width()*height()*depth(); to_write>0; ) { + const ulongT N = std::min((ulongT)to_write,buf_size); + float *ptrd = buf._data; + for (ulongT i = N; i>0; --i) *(ptrd++) = (float)*(ptr++); + cimg::fwrite(buf._data,N,nfile); + to_write-=N; + } + } + + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Save image as a PFM file. + /** + \param filename Filename, as a C-string. + **/ + const CImg& save_pfm(const char *const filename) const { + get_mirror('y')._save_pfm(0,filename); + return *this; + } + + //! Save image as a PFM file \overloading. + const CImg& save_pfm(std::FILE *const file) const { + get_mirror('y')._save_pfm(file,0); + return *this; + } + + const CImg& _save_pfm(std::FILE *const file, const char *const filename) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_pfm(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(file,filename); return *this; } + if (_depth>1) + cimg::warn(_cimg_instance + "save_pfm(): Instance is volumetric, only the first slice will be saved in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + if (_spectrum>3) + cimg::warn(_cimg_instance + "save_pfm(): image instance is multispectral, only the three first channels will be saved " + "in file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + const T + *ptr_r = data(0,0,0,0), + *ptr_g = (_spectrum>=2)?data(0,0,0,1):0, + *ptr_b = (_spectrum>=3)?data(0,0,0,2):0; + const unsigned int buf_size = std::min(1024*1024U,_width*_height*(_spectrum==1?1:3)); + + std::fprintf(nfile,"P%c\n%u %u\n1.0\n", + (_spectrum==1?'f':'F'),_width,_height); + + switch (_spectrum) { + case 1 : { // Scalar image + CImg buf(buf_size); + for (longT to_write = (longT)width()*height(); to_write>0; ) { + const ulongT N = std::min((ulongT)to_write,(ulongT)buf_size); + float *ptrd = buf._data; + for (ulongT i = N; i>0; --i) *(ptrd++) = (float)*(ptr_r++); + if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); + cimg::fwrite(buf._data,N,nfile); + to_write-=N; + } + } break; + case 2 : { // RG image + CImg buf(buf_size); + for (longT to_write = (longT)width()*height(); to_write>0; ) { + const unsigned int N = std::min((unsigned int)to_write,buf_size/3); + float *ptrd = buf._data; + for (ulongT i = N; i>0; --i) { + *(ptrd++) = (float)*(ptr_r++); + *(ptrd++) = (float)*(ptr_g++); + *(ptrd++) = 0; + } + if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); + cimg::fwrite(buf._data,3*N,nfile); + to_write-=N; + } + } break; + default : { // RGB image + CImg buf(buf_size); + for (longT to_write = (longT)width()*height(); to_write>0; ) { + const unsigned int N = std::min((unsigned int)to_write,buf_size/3); + float *ptrd = buf._data; + for (ulongT i = N; i>0; --i) { + *(ptrd++) = (float)*(ptr_r++); + *(ptrd++) = (float)*(ptr_g++); + *(ptrd++) = (float)*(ptr_b++); + } + if (!cimg::endianness()) cimg::invert_endianness(buf._data,buf_size); + cimg::fwrite(buf._data,3*N,nfile); + to_write-=N; + } + } + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Save image as a RGB file. + /** + \param filename Filename, as a C-string. + **/ + const CImg& save_rgb(const char *const filename) const { + return _save_rgb(0,filename); + } + + //! Save image as a RGB file \overloading. + const CImg& save_rgb(std::FILE *const file) const { + return _save_rgb(file,0); + } + + const CImg& _save_rgb(std::FILE *const file, const char *const filename) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_rgb(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(file,filename); return *this; } + if (_spectrum!=3) + cimg::warn(_cimg_instance + "save_rgb(): image instance has not exactly 3 channels, for file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + const ulongT wh = (ulongT)_width*_height; + unsigned char *const buffer = new unsigned char[3*wh], *nbuffer = buffer; + const T + *ptr1 = data(0,0,0,0), + *ptr2 = _spectrum>1?data(0,0,0,1):0, + *ptr3 = _spectrum>2?data(0,0,0,2):0; + switch (_spectrum) { + case 1 : { // Scalar image + for (ulongT k = 0; k& save_rgba(const char *const filename) const { + return _save_rgba(0,filename); + } + + //! Save image as a RGBA file \overloading. + const CImg& save_rgba(std::FILE *const file) const { + return _save_rgba(file,0); + } + + const CImg& _save_rgba(std::FILE *const file, const char *const filename) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_rgba(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(file,filename); return *this; } + if (_spectrum!=4) + cimg::warn(_cimg_instance + "save_rgba(): image instance has not exactly 4 channels, for file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + const ulongT wh = (ulongT)_width*_height; + unsigned char *const buffer = new unsigned char[4*wh], *nbuffer = buffer; + const T + *ptr1 = data(0,0,0,0), + *ptr2 = _spectrum>1?data(0,0,0,1):0, + *ptr3 = _spectrum>2?data(0,0,0,2):0, + *ptr4 = _spectrum>3?data(0,0,0,3):0; + switch (_spectrum) { + case 1 : { // Scalar images + for (ulongT k = 0; k{ 0=None | 1=LZW | 2=JPEG }. + \param voxel_size Voxel size, to be stored in the filename. + \param description Description, to be stored in the filename. + \param use_bigtiff Allow to save big tiff files (>4Gb). + \note + - libtiff support is enabled by defining the precompilation + directive \c cimg_use_tif. + - When libtiff is enabled, 2D and 3D (multipage) several + channel per pixel are supported for + char,uchar,short,ushort,float and \c double pixel types. + - If \c cimg_use_tif is not defined at compile time the + function uses CImg&save_other(const char*). + **/ + const CImg& save_tiff(const char *const filename, const unsigned int compression_type=0, + const float *const voxel_size=0, const char *const description=0, + const bool use_bigtiff=true) const { + if (!filename) + throw CImgArgumentException(_cimg_instance + "save_tiff(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(0,filename); return *this; } + +#ifdef cimg_use_tiff + const bool + _use_bigtiff = use_bigtiff && sizeof(ulongT)>=8 && size()*sizeof(T)>=1UL<<31; // No bigtiff for small images. + TIFF *tif = TIFFOpen(filename,_use_bigtiff?"w8":"w4"); + if (tif) { + cimg_forZ(*this,z) _save_tiff(tif,z,z,compression_type,voxel_size,description); + TIFFClose(tif); + } else throw CImgIOException(_cimg_instance + "save_tiff(): Failed to open file '%s' for writing.", + cimg_instance, + filename); + return *this; +#else + cimg::unused(compression_type,voxel_size,description,use_bigtiff); + return save_other(filename); +#endif + } + +#ifdef cimg_use_tiff + +#define _cimg_save_tiff(types,typed,compression_type) if (!std::strcmp(types,pixel_type())) { \ + const typed foo = (typed)0; return _save_tiff(tif,directory,z,foo,compression_type,voxel_size,description); } + + // [internal] Save a plane into a tiff file + template + const CImg& _save_tiff(TIFF *tif, const unsigned int directory, const unsigned int z, const t& pixel_t, + const unsigned int compression_type, const float *const voxel_size, + const char *const description) const { + if (is_empty() || !tif || pixel_t) return *this; + const char *const filename = TIFFFileName(tif); + uint32 rowsperstrip = (uint32)-1; + uint16 spp = _spectrum, bpp = sizeof(t)*8, photometric; + if (spp==3 || spp==4) photometric = PHOTOMETRIC_RGB; + else photometric = PHOTOMETRIC_MINISBLACK; + TIFFSetDirectory(tif,directory); + TIFFSetField(tif,TIFFTAG_IMAGEWIDTH,_width); + TIFFSetField(tif,TIFFTAG_IMAGELENGTH,_height); + if (voxel_size) { + const float vx = voxel_size[0], vy = voxel_size[1], vz = voxel_size[2]; + TIFFSetField(tif,TIFFTAG_RESOLUTIONUNIT,RESUNIT_NONE); + TIFFSetField(tif,TIFFTAG_XRESOLUTION,1.0f/vx); + TIFFSetField(tif,TIFFTAG_YRESOLUTION,1.0f/vy); + CImg s_description(256); + cimg_snprintf(s_description,s_description._width,"VX=%g VY=%g VZ=%g spacing=%g",vx,vy,vz,vz); + TIFFSetField(tif,TIFFTAG_IMAGEDESCRIPTION,s_description.data()); + } + if (description) TIFFSetField(tif,TIFFTAG_IMAGEDESCRIPTION,description); + TIFFSetField(tif,TIFFTAG_ORIENTATION,ORIENTATION_TOPLEFT); + TIFFSetField(tif,TIFFTAG_SAMPLESPERPIXEL,spp); + if (cimg::type::is_float()) TIFFSetField(tif,TIFFTAG_SAMPLEFORMAT,3); + else if (cimg::type::min()==0) TIFFSetField(tif,TIFFTAG_SAMPLEFORMAT,1); + else TIFFSetField(tif,TIFFTAG_SAMPLEFORMAT,2); + double valm, valM = max_min(valm); + TIFFSetField(tif,TIFFTAG_SMINSAMPLEVALUE,valm); + TIFFSetField(tif,TIFFTAG_SMAXSAMPLEVALUE,valM); + TIFFSetField(tif,TIFFTAG_BITSPERSAMPLE,bpp); + TIFFSetField(tif,TIFFTAG_PLANARCONFIG,PLANARCONFIG_CONTIG); + TIFFSetField(tif,TIFFTAG_PHOTOMETRIC,photometric); + TIFFSetField(tif,TIFFTAG_COMPRESSION,compression_type==2?COMPRESSION_JPEG: + compression_type==1?COMPRESSION_LZW:COMPRESSION_NONE); + rowsperstrip = TIFFDefaultStripSize(tif,rowsperstrip); + TIFFSetField(tif,TIFFTAG_ROWSPERSTRIP,rowsperstrip); + TIFFSetField(tif,TIFFTAG_FILLORDER,FILLORDER_MSB2LSB); + TIFFSetField(tif,TIFFTAG_SOFTWARE,"CImg"); + + t *const buf = (t*)_TIFFmalloc(TIFFStripSize(tif)); + if (buf) { + for (unsigned int row = 0; row<_height; row+=rowsperstrip) { + uint32 nrow = (row + rowsperstrip>_height?_height - row:rowsperstrip); + tstrip_t strip = TIFFComputeStrip(tif,row,0); + tsize_t i = 0; + for (unsigned int rr = 0; rr& _save_tiff(TIFF *tif, const unsigned int directory, const unsigned int z, + const unsigned int compression_type, const float *const voxel_size, + const char *const description) const { + _cimg_save_tiff("bool",unsigned char,compression_type); + _cimg_save_tiff("unsigned char",unsigned char,compression_type); + _cimg_save_tiff("char",char,compression_type); + _cimg_save_tiff("unsigned short",unsigned short,compression_type); + _cimg_save_tiff("short",short,compression_type); + _cimg_save_tiff("unsigned int",unsigned int,compression_type); + _cimg_save_tiff("int",int,compression_type); + _cimg_save_tiff("unsigned int64",unsigned int,compression_type); + _cimg_save_tiff("int64",int,compression_type); + _cimg_save_tiff("float",float,compression_type); + _cimg_save_tiff("double",float,compression_type); + const char *const filename = TIFFFileName(tif); + throw CImgInstanceException(_cimg_instance + "save_tiff(): Unsupported pixel type '%s' for file '%s'.", + cimg_instance, + pixel_type(),filename?filename:"(FILE*)"); + return *this; + } +#endif + + //! Save image as a MINC2 file. + /** + \param filename Filename, as a C-string. + \param imitate_file If non-zero, reference filename, as a C-string, to borrow header from. + **/ + const CImg& save_minc2(const char *const filename, + const char *const imitate_file=0) const { + if (!filename) + throw CImgArgumentException(_cimg_instance + "save_minc2(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(0,filename); return *this; } + +#ifndef cimg_use_minc2 + cimg::unused(imitate_file); + return save_other(filename); +#else + minc::minc_1_writer wtr; + if (imitate_file) + wtr.open(filename, imitate_file); + else { + minc::minc_info di; + if (width()) di.push_back(minc::dim_info(width(),width()*0.5,-1,minc::dim_info::DIM_X)); + if (height()) di.push_back(minc::dim_info(height(),height()*0.5,-1,minc::dim_info::DIM_Y)); + if (depth()) di.push_back(minc::dim_info(depth(),depth()*0.5,-1,minc::dim_info::DIM_Z)); + if (spectrum()) di.push_back(minc::dim_info(spectrum(),spectrum()*0.5,-1,minc::dim_info::DIM_TIME)); + wtr.open(filename,di,1,NC_FLOAT,0); + } + if (cimg::type::string()==cimg::type::string()) + wtr.setup_write_byte(); + else if (cimg::type::string()==cimg::type::string()) + wtr.setup_write_int(); + else if (cimg::type::string()==cimg::type::string()) + wtr.setup_write_double(); + else + wtr.setup_write_float(); + minc::save_standard_volume(wtr, this->_data); + return *this; +#endif + } + + //! Save image as an ANALYZE7.5 or NIFTI file. + /** + \param filename Filename, as a C-string. + \param voxel_size Pointer to 3 consecutive values that tell about the voxel sizes along the X,Y and Z dimensions. + **/ + const CImg& save_analyze(const char *const filename, const float *const voxel_size=0) const { + if (!filename) + throw CImgArgumentException(_cimg_instance + "save_analyze(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(0,filename); return *this; } + + std::FILE *file; + CImg hname(1024), iname(1024); + const char *const ext = cimg::split_filename(filename); + short datatype = -1; + if (!*ext) { + cimg_snprintf(hname,hname._width,"%s.hdr",filename); + cimg_snprintf(iname,iname._width,"%s.img",filename); + } + if (!cimg::strncasecmp(ext,"hdr",3)) { + std::strcpy(hname,filename); + std::strncpy(iname,filename,iname._width - 1); + cimg_sprintf(iname._data + std::strlen(iname) - 3,"img"); + } + if (!cimg::strncasecmp(ext,"img",3)) { + std::strcpy(hname,filename); + std::strncpy(iname,filename,iname._width - 1); + cimg_sprintf(hname._data + std::strlen(iname) - 3,"hdr"); + } + if (!cimg::strncasecmp(ext,"nii",3)) { + std::strncpy(hname,filename,hname._width - 1); *iname = 0; + } + + CImg header(*iname?348:352,1,1,1,0); + int *const iheader = (int*)header._data; + *iheader = 348; + std::strcpy(header._data + 4,"CImg"); + std::strcpy(header._data + 14," "); + ((short*)&(header[36]))[0] = 4096; + ((char*)&(header[38]))[0] = 114; + ((short*)&(header[40]))[0] = 4; + ((short*)&(header[40]))[1] = (short)_width; + ((short*)&(header[40]))[2] = (short)_height; + ((short*)&(header[40]))[3] = (short)_depth; + ((short*)&(header[40]))[4] = (short)_spectrum; + if (!cimg::strcasecmp(pixel_type(),"bool")) datatype = 2; + if (!cimg::strcasecmp(pixel_type(),"unsigned char")) datatype = 2; + if (!cimg::strcasecmp(pixel_type(),"char")) datatype = 2; + if (!cimg::strcasecmp(pixel_type(),"unsigned short")) datatype = 4; + if (!cimg::strcasecmp(pixel_type(),"short")) datatype = 4; + if (!cimg::strcasecmp(pixel_type(),"unsigned int")) datatype = 8; + if (!cimg::strcasecmp(pixel_type(),"int")) datatype = 8; + if (!cimg::strcasecmp(pixel_type(),"unsigned int64")) datatype = 8; + if (!cimg::strcasecmp(pixel_type(),"int64")) datatype = 8; + if (!cimg::strcasecmp(pixel_type(),"float")) datatype = 16; + if (!cimg::strcasecmp(pixel_type(),"double")) datatype = 64; + if (datatype<0) + throw CImgIOException(_cimg_instance + "save_analyze(): Unsupported pixel type '%s' for file '%s'.", + cimg_instance, + pixel_type(),filename); + + ((short*)&(header[70]))[0] = datatype; + ((short*)&(header[72]))[0] = sizeof(T); + ((float*)&(header[108]))[0] = (float)(*iname?0:header.width()); + ((float*)&(header[112]))[0] = 1; + ((float*)&(header[76]))[0] = 0; + if (voxel_size) { + ((float*)&(header[76]))[1] = voxel_size[0]; + ((float*)&(header[76]))[2] = voxel_size[1]; + ((float*)&(header[76]))[3] = voxel_size[2]; + } else ((float*)&(header[76]))[1] = ((float*)&(header[76]))[2] = ((float*)&(header[76]))[3] = 1; + file = cimg::fopen(hname,"wb"); + cimg::fwrite(header._data,header.width(),file); + if (*iname) { cimg::fclose(file); file = cimg::fopen(iname,"wb"); } + cimg::fwrite(_data,size(),file); + cimg::fclose(file); + return *this; + } + + //! Save image as a .cimg file. + /** + \param filename Filename, as a C-string. + \param is_compressed Tells if the file contains compressed image data. + **/ + const CImg& save_cimg(const char *const filename, const bool is_compressed=false) const { + CImgList(*this,true).save_cimg(filename,is_compressed); + return *this; + } + + //! Save image as a .cimg file \overloading. + const CImg& save_cimg(std::FILE *const file, const bool is_compressed=false) const { + CImgList(*this,true).save_cimg(file,is_compressed); + return *this; + } + + //! Save image as a sub-image into an existing .cimg file. + /** + \param filename Filename, as a C-string. + \param n0 Index of the image inside the file. + \param x0 X-coordinate of the sub-image location. + \param y0 Y-coordinate of the sub-image location. + \param z0 Z-coordinate of the sub-image location. + \param c0 C-coordinate of the sub-image location. + **/ + const CImg& save_cimg(const char *const filename, + const unsigned int n0, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0) const { + CImgList(*this,true).save_cimg(filename,n0,x0,y0,z0,c0); + return *this; + } + + //! Save image as a sub-image into an existing .cimg file \overloading. + const CImg& save_cimg(std::FILE *const file, + const unsigned int n0, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0) const { + CImgList(*this,true).save_cimg(file,n0,x0,y0,z0,c0); + return *this; + } + + //! Save blank image as a .cimg file. + /** + \param filename Filename, as a C-string. + \param dx Width of the image. + \param dy Height of the image. + \param dz Depth of the image. + \param dc Number of channels of the image. + \note + - All pixel values of the saved image are set to \c 0. + - Use this method to save large images without having to instanciate and allocate them. + **/ + static void save_empty_cimg(const char *const filename, + const unsigned int dx, const unsigned int dy=1, + const unsigned int dz=1, const unsigned int dc=1) { + return CImgList::save_empty_cimg(filename,1,dx,dy,dz,dc); + } + + //! Save blank image as a .cimg file \overloading. + /** + Same as save_empty_cimg(const char *,unsigned int,unsigned int,unsigned int,unsigned int) + with a file stream argument instead of a filename string. + **/ + static void save_empty_cimg(std::FILE *const file, + const unsigned int dx, const unsigned int dy=1, + const unsigned int dz=1, const unsigned int dc=1) { + return CImgList::save_empty_cimg(file,1,dx,dy,dz,dc); + } + + //! Save image as an INRIMAGE-4 file. + /** + \param filename Filename, as a C-string. + \param voxel_size Pointer to 3 values specifying the voxel sizes along the X,Y and Z dimensions. + **/ + const CImg& save_inr(const char *const filename, const float *const voxel_size=0) const { + return _save_inr(0,filename,voxel_size); + } + + //! Save image as an INRIMAGE-4 file \overloading. + const CImg& save_inr(std::FILE *const file, const float *const voxel_size=0) const { + return _save_inr(file,0,voxel_size); + } + + const CImg& _save_inr(std::FILE *const file, const char *const filename, const float *const voxel_size) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_inr(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(file,filename); return *this; } + + int inrpixsize = -1; + const char *inrtype = "unsigned fixed\nPIXSIZE=8 bits\nSCALE=2**0"; + if (!cimg::strcasecmp(pixel_type(),"unsigned char")) { + inrtype = "unsigned fixed\nPIXSIZE=8 bits\nSCALE=2**0"; inrpixsize = 1; + } + if (!cimg::strcasecmp(pixel_type(),"char")) { + inrtype = "fixed\nPIXSIZE=8 bits\nSCALE=2**0"; inrpixsize = 1; + } + if (!cimg::strcasecmp(pixel_type(),"unsigned short")) { + inrtype = "unsigned fixed\nPIXSIZE=16 bits\nSCALE=2**0";inrpixsize = 2; + } + if (!cimg::strcasecmp(pixel_type(),"short")) { + inrtype = "fixed\nPIXSIZE=16 bits\nSCALE=2**0"; inrpixsize = 2; + } + if (!cimg::strcasecmp(pixel_type(),"unsigned int")) { + inrtype = "unsigned fixed\nPIXSIZE=32 bits\nSCALE=2**0";inrpixsize = 4; + } + if (!cimg::strcasecmp(pixel_type(),"int")) { + inrtype = "fixed\nPIXSIZE=32 bits\nSCALE=2**0"; inrpixsize = 4; + } + if (!cimg::strcasecmp(pixel_type(),"float")) { + inrtype = "float\nPIXSIZE=32 bits"; inrpixsize = 4; + } + if (!cimg::strcasecmp(pixel_type(),"double")) { + inrtype = "float\nPIXSIZE=64 bits"; inrpixsize = 8; + } + if (inrpixsize<=0) + throw CImgIOException(_cimg_instance + "save_inr(): Unsupported pixel type '%s' for file '%s'", + cimg_instance, + pixel_type(),filename?filename:"(FILE*)"); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + CImg header(257); + int err = cimg_snprintf(header,header._width,"#INRIMAGE-4#{\nXDIM=%u\nYDIM=%u\nZDIM=%u\nVDIM=%u\n", + _width,_height,_depth,_spectrum); + if (voxel_size) err+=cimg_sprintf(header._data + err,"VX=%g\nVY=%g\nVZ=%g\n", + voxel_size[0],voxel_size[1],voxel_size[2]); + err+=cimg_sprintf(header._data + err,"TYPE=%s\nCPU=%s\n",inrtype,cimg::endianness()?"sun":"decm"); + std::memset(header._data + err,'\n',252 - err); + std::memcpy(header._data + 252,"##}\n",4); + cimg::fwrite(header._data,256,nfile); + cimg_forXYZ(*this,x,y,z) cimg_forC(*this,c) cimg::fwrite(&((*this)(x,y,z,c)),1,nfile); + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Save image as an OpenEXR file. + /** + \param filename Filename, as a C-string. + \note The OpenEXR file format is described here. + **/ + const CImg& save_exr(const char *const filename) const { + if (!filename) + throw CImgArgumentException(_cimg_instance + "save_exr(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(0,filename); return *this; } + if (_depth>1) + cimg::warn(_cimg_instance + "save_exr(): Instance is volumetric, only the first slice will be saved in file '%s'.", + cimg_instance, + filename); + +#ifndef cimg_use_openexr + return save_other(filename); +#else + Imf::Rgba *const ptrd0 = new Imf::Rgba[(size_t)_width*_height], *ptrd = ptrd0, rgba; + switch (_spectrum) { + case 1 : { // Grayscale image. + for (const T *ptr_r = data(), *const ptr_e = ptr_r + (ulongT)_width*_height; ptr_rPandore file specifications + for more information). + **/ + const CImg& save_pandore(const char *const filename, const unsigned int colorspace=0) const { + return _save_pandore(0,filename,colorspace); + } + + //! Save image as a Pandore-5 file \overloading. + /** + Same as save_pandore(const char *,unsigned int) const + with a file stream argument instead of a filename string. + **/ + const CImg& save_pandore(std::FILE *const file, const unsigned int colorspace=0) const { + return _save_pandore(file,0,colorspace); + } + + unsigned int _save_pandore_header_length(unsigned int id, unsigned int *dims, const unsigned int colorspace) const { + unsigned int nbdims = 0; + if (id==2 || id==3 || id==4) { + dims[0] = 1; dims[1] = _width; nbdims = 2; + } + if (id==5 || id==6 || id==7) { + dims[0] = 1; dims[1] = _height; dims[2] = _width; nbdims=3; + } + if (id==8 || id==9 || id==10) { + dims[0] = _spectrum; dims[1] = _depth; dims[2] = _height; dims[3] = _width; nbdims = 4; + } + if (id==16 || id==17 || id==18) { + dims[0] = 3; dims[1] = _height; dims[2] = _width; dims[3] = colorspace; nbdims = 4; + } + if (id==19 || id==20 || id==21) { + dims[0] = 3; dims[1] = _depth; dims[2] = _height; dims[3] = _width; dims[4] = colorspace; nbdims = 5; + } + if (id==22 || id==23 || id==25) { + dims[0] = _spectrum; dims[1] = _width; nbdims = 2; + } + if (id==26 || id==27 || id==29) { + dims[0] = _spectrum; dims[1] = _height; dims[2] = _width; nbdims=3; + } + if (id==30 || id==31 || id==33) { + dims[0] = _spectrum; dims[1] = _depth; dims[2] = _height; dims[3] = _width; nbdims = 4; + } + return nbdims; + } + + const CImg& _save_pandore(std::FILE *const file, const char *const filename, + const unsigned int colorspace) const { + +#define __cimg_save_pandore_case(dtype) \ + dtype *buffer = new dtype[size()]; \ + const T *ptrs = _data; \ + cimg_foroff(*this,off) *(buffer++) = (dtype)(*(ptrs++)); \ + buffer-=size(); \ + cimg::fwrite(buffer,size(),nfile); \ + delete[] buffer + +#define _cimg_save_pandore_case(sy,sz,sv,stype,id) \ + if (!saved && (sy?(sy==_height):true) && (sz?(sz==_depth):true) && \ + (sv?(sv==_spectrum):true) && !std::strcmp(stype,pixel_type())) { \ + unsigned int *iheader = (unsigned int*)(header + 12); \ + nbdims = _save_pandore_header_length((*iheader=id),dims,colorspace); \ + cimg::fwrite(header,36,nfile); \ + if (sizeof(unsigned long)==4) { CImg ndims(5); \ + for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims._data,nbdims,nfile); } \ + else if (sizeof(unsigned int)==4) { CImg ndims(5); \ + for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims._data,nbdims,nfile); } \ + else if (sizeof(unsigned short)==4) { CImg ndims(5); \ + for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims._data,nbdims,nfile); } \ + else throw CImgIOException(_cimg_instance \ + "save_pandore(): Unsupported datatype for file '%s'.",\ + cimg_instance, \ + filename?filename:"(FILE*)"); \ + if (id==2 || id==5 || id==8 || id==16 || id==19 || id==22 || id==26 || id==30) { \ + __cimg_save_pandore_case(unsigned char); \ + } else if (id==3 || id==6 || id==9 || id==17 || id==20 || id==23 || id==27 || id==31) { \ + if (sizeof(unsigned long)==4) { __cimg_save_pandore_case(unsigned long); } \ + else if (sizeof(unsigned int)==4) { __cimg_save_pandore_case(unsigned int); } \ + else if (sizeof(unsigned short)==4) { __cimg_save_pandore_case(unsigned short); } \ + else throw CImgIOException(_cimg_instance \ + "save_pandore(): Unsupported datatype for file '%s'.",\ + cimg_instance, \ + filename?filename:"(FILE*)"); \ + } else if (id==4 || id==7 || id==10 || id==18 || id==21 || id==25 || id==29 || id==33) { \ + if (sizeof(double)==4) { __cimg_save_pandore_case(double); } \ + else if (sizeof(float)==4) { __cimg_save_pandore_case(float); } \ + else throw CImgIOException(_cimg_instance \ + "save_pandore(): Unsupported datatype for file '%s'.",\ + cimg_instance, \ + filename?filename:"(FILE*)"); \ + } \ + saved = true; \ + } + + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_pandore(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(file,filename); return *this; } + + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + unsigned char header[36] = { 'P','A','N','D','O','R','E','0','4',0,0,0, + 0,0,0,0,'C','I','m','g',0,0,0,0,0, + 'N','o',' ','d','a','t','e',0,0,0,0 }; + unsigned int nbdims, dims[5] = { 0 }; + bool saved = false; + _cimg_save_pandore_case(1,1,1,"unsigned char",2); + _cimg_save_pandore_case(1,1,1,"char",3); + _cimg_save_pandore_case(1,1,1,"unsigned short",3); + _cimg_save_pandore_case(1,1,1,"short",3); + _cimg_save_pandore_case(1,1,1,"unsigned int",3); + _cimg_save_pandore_case(1,1,1,"int",3); + _cimg_save_pandore_case(1,1,1,"unsigned int64",3); + _cimg_save_pandore_case(1,1,1,"int64",3); + _cimg_save_pandore_case(1,1,1,"float",4); + _cimg_save_pandore_case(1,1,1,"double",4); + + _cimg_save_pandore_case(0,1,1,"unsigned char",5); + _cimg_save_pandore_case(0,1,1,"char",6); + _cimg_save_pandore_case(0,1,1,"unsigned short",6); + _cimg_save_pandore_case(0,1,1,"short",6); + _cimg_save_pandore_case(0,1,1,"unsigned int",6); + _cimg_save_pandore_case(0,1,1,"int",6); + _cimg_save_pandore_case(0,1,1,"unsigned int64",6); + _cimg_save_pandore_case(0,1,1,"int64",6); + _cimg_save_pandore_case(0,1,1,"float",7); + _cimg_save_pandore_case(0,1,1,"double",7); + + _cimg_save_pandore_case(0,0,1,"unsigned char",8); + _cimg_save_pandore_case(0,0,1,"char",9); + _cimg_save_pandore_case(0,0,1,"unsigned short",9); + _cimg_save_pandore_case(0,0,1,"short",9); + _cimg_save_pandore_case(0,0,1,"unsigned int",9); + _cimg_save_pandore_case(0,0,1,"int",9); + _cimg_save_pandore_case(0,0,1,"unsigned int64",9); + _cimg_save_pandore_case(0,0,1,"int64",9); + _cimg_save_pandore_case(0,0,1,"float",10); + _cimg_save_pandore_case(0,0,1,"double",10); + + _cimg_save_pandore_case(0,1,3,"unsigned char",16); + _cimg_save_pandore_case(0,1,3,"char",17); + _cimg_save_pandore_case(0,1,3,"unsigned short",17); + _cimg_save_pandore_case(0,1,3,"short",17); + _cimg_save_pandore_case(0,1,3,"unsigned int",17); + _cimg_save_pandore_case(0,1,3,"int",17); + _cimg_save_pandore_case(0,1,3,"unsigned int64",17); + _cimg_save_pandore_case(0,1,3,"int64",17); + _cimg_save_pandore_case(0,1,3,"float",18); + _cimg_save_pandore_case(0,1,3,"double",18); + + _cimg_save_pandore_case(0,0,3,"unsigned char",19); + _cimg_save_pandore_case(0,0,3,"char",20); + _cimg_save_pandore_case(0,0,3,"unsigned short",20); + _cimg_save_pandore_case(0,0,3,"short",20); + _cimg_save_pandore_case(0,0,3,"unsigned int",20); + _cimg_save_pandore_case(0,0,3,"int",20); + _cimg_save_pandore_case(0,0,3,"unsigned int64",20); + _cimg_save_pandore_case(0,0,3,"int64",20); + _cimg_save_pandore_case(0,0,3,"float",21); + _cimg_save_pandore_case(0,0,3,"double",21); + + _cimg_save_pandore_case(1,1,0,"unsigned char",22); + _cimg_save_pandore_case(1,1,0,"char",23); + _cimg_save_pandore_case(1,1,0,"unsigned short",23); + _cimg_save_pandore_case(1,1,0,"short",23); + _cimg_save_pandore_case(1,1,0,"unsigned int",23); + _cimg_save_pandore_case(1,1,0,"int",23); + _cimg_save_pandore_case(1,1,0,"unsigned int64",23); + _cimg_save_pandore_case(1,1,0,"int64",23); + _cimg_save_pandore_case(1,1,0,"float",25); + _cimg_save_pandore_case(1,1,0,"double",25); + + _cimg_save_pandore_case(0,1,0,"unsigned char",26); + _cimg_save_pandore_case(0,1,0,"char",27); + _cimg_save_pandore_case(0,1,0,"unsigned short",27); + _cimg_save_pandore_case(0,1,0,"short",27); + _cimg_save_pandore_case(0,1,0,"unsigned int",27); + _cimg_save_pandore_case(0,1,0,"int",27); + _cimg_save_pandore_case(0,1,0,"unsigned int64",27); + _cimg_save_pandore_case(0,1,0,"int64",27); + _cimg_save_pandore_case(0,1,0,"float",29); + _cimg_save_pandore_case(0,1,0,"double",29); + + _cimg_save_pandore_case(0,0,0,"unsigned char",30); + _cimg_save_pandore_case(0,0,0,"char",31); + _cimg_save_pandore_case(0,0,0,"unsigned short",31); + _cimg_save_pandore_case(0,0,0,"short",31); + _cimg_save_pandore_case(0,0,0,"unsigned int",31); + _cimg_save_pandore_case(0,0,0,"int",31); + _cimg_save_pandore_case(0,0,0,"unsigned int64",31); + _cimg_save_pandore_case(0,0,0,"int64",31); + _cimg_save_pandore_case(0,0,0,"float",33); + _cimg_save_pandore_case(0,0,0,"double",33); + + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Save image as a raw data file. + /** + \param filename Filename, as a C-string. + \param is_multiplexed Tells if the image channels are stored in a multiplexed way (\c true) or not (\c false). + \note The .raw format does not store the image dimensions in the output file, + so you have to keep track of them somewhere to be able to read the file correctly afterwards. + **/ + const CImg& save_raw(const char *const filename, const bool is_multiplexed=false) const { + return _save_raw(0,filename,is_multiplexed); + } + + //! Save image as a raw data file \overloading. + /** + Same as save_raw(const char *,bool) const + with a file stream argument instead of a filename string. + **/ + const CImg& save_raw(std::FILE *const file, const bool is_multiplexed=false) const { + return _save_raw(file,0,is_multiplexed); + } + + const CImg& _save_raw(std::FILE *const file, const char *const filename, const bool is_multiplexed) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_raw(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(file,filename); return *this; } + + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + if (!is_multiplexed) cimg::fwrite(_data,size(),nfile); + else { + CImg buf(_spectrum); + cimg_forXYZ(*this,x,y,z) { + cimg_forC(*this,c) buf[c] = (*this)(x,y,z,c); + cimg::fwrite(buf._data,_spectrum,nfile); + } + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Save image as a .yuv video file. + /** + \param filename Filename, as a C-string. + \param chroma_subsampling Type of chroma subsampling. Can be { 420 | 422 | 444 }. + \param is_rgb Tells if pixel values of the instance image are RGB-coded (\c true) or YUV-coded (\c false). + \note Each slice of the instance image is considered to be a single frame of the output video file. + **/ + const CImg& save_yuv(const char *const filename, + const unsigned int chroma_subsampling=444, + const bool is_rgb=true) const { + CImgList(*this,true).save_yuv(filename,chroma_subsampling,is_rgb); + return *this; + } + + //! Save image as a .yuv video file \overloading. + /** + Same as save_yuv(const char*,const unsigned int,const bool) const + with a file stream argument instead of a filename string. + **/ + const CImg& save_yuv(std::FILE *const file, + const unsigned int chroma_subsampling=444, + const bool is_rgb=true) const { + CImgList(*this,true).save_yuv(file,chroma_subsampling,is_rgb); + return *this; + } + + //! Save 3d object as an Object File Format (.off) file. + /** + \param filename Filename, as a C-string. + \param primitives List of 3d object primitives. + \param colors List of 3d object colors. + \note + - Instance image contains the vertices data of the 3d object. + - Textured, transparent or sphere-shaped primitives cannot be managed by the .off file format. + Such primitives will be lost or simplified during file saving. + - The .off file format is described here. + **/ + template + const CImg& save_off(const CImgList& primitives, const CImgList& colors, + const char *const filename) const { + return _save_off(primitives,colors,0,filename); + } + + //! Save 3d object as an Object File Format (.off) file \overloading. + /** + Same as save_off(const CImgList&,const CImgList&,const char*) const + with a file stream argument instead of a filename string. + **/ + template + const CImg& save_off(const CImgList& primitives, const CImgList& colors, + std::FILE *const file) const { + return _save_off(primitives,colors,file,0); + } + + template + const CImg& _save_off(const CImgList& primitives, const CImgList& colors, + std::FILE *const file, const char *const filename) const { + if (!file && !filename) + throw CImgArgumentException(_cimg_instance + "save_off(): Specified filename is (null).", + cimg_instance); + if (is_empty()) + throw CImgInstanceException(_cimg_instance + "save_off(): Empty instance, for file '%s'.", + cimg_instance, + filename?filename:"(FILE*)"); + + CImgList opacities; + CImg error_message(1024); + if (!is_object3d(primitives,colors,opacities,true,error_message)) + throw CImgInstanceException(_cimg_instance + "save_off(): Invalid specified 3d object, for file '%s' (%s).", + cimg_instance, + filename?filename:"(FILE*)",error_message.data()); + + const CImg default_color(1,3,1,1,200); + std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); + unsigned int supported_primitives = 0; + cimglist_for(primitives,l) if (primitives[l].size()!=5) ++supported_primitives; + std::fprintf(nfile,"OFF\n%u %u %u\n",_width,supported_primitives,3*primitives._width); + cimg_forX(*this,i) std::fprintf(nfile,"%f %f %f\n", + (float)((*this)(i,0)),(float)((*this)(i,1)),(float)((*this)(i,2))); + cimglist_for(primitives,l) { + const CImg& color = l1?color[1]:r)/255.0f, b = (csiz>2?color[2]:g)/255.0f; + switch (psiz) { + case 1 : std::fprintf(nfile,"1 %u %f %f %f\n", + (unsigned int)primitives(l,0),r,g,b); break; + case 2 : std::fprintf(nfile,"2 %u %u %f %f %f\n", + (unsigned int)primitives(l,0),(unsigned int)primitives(l,1),r,g,b); break; + case 3 : std::fprintf(nfile,"3 %u %u %u %f %f %f\n", + (unsigned int)primitives(l,0),(unsigned int)primitives(l,2), + (unsigned int)primitives(l,1),r,g,b); break; + case 4 : std::fprintf(nfile,"4 %u %u %u %u %f %f %f\n", + (unsigned int)primitives(l,0),(unsigned int)primitives(l,3), + (unsigned int)primitives(l,2),(unsigned int)primitives(l,1),r,g,b); break; + case 5 : std::fprintf(nfile,"2 %u %u %f %f %f\n", + (unsigned int)primitives(l,0),(unsigned int)primitives(l,1),r,g,b); break; + case 6 : { + const unsigned int xt = (unsigned int)primitives(l,2), yt = (unsigned int)primitives(l,3); + const float + rt = color.atXY(xt,yt,0)/255.0f, + gt = (csiz>1?color.atXY(xt,yt,1):r)/255.0f, + bt = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; + std::fprintf(nfile,"2 %u %u %f %f %f\n", + (unsigned int)primitives(l,0),(unsigned int)primitives(l,1),rt,gt,bt); + } break; + case 9 : { + const unsigned int xt = (unsigned int)primitives(l,3), yt = (unsigned int)primitives(l,4); + const float + rt = color.atXY(xt,yt,0)/255.0f, + gt = (csiz>1?color.atXY(xt,yt,1):r)/255.0f, + bt = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; + std::fprintf(nfile,"3 %u %u %u %f %f %f\n", + (unsigned int)primitives(l,0),(unsigned int)primitives(l,2), + (unsigned int)primitives(l,1),rt,gt,bt); + } break; + case 12 : { + const unsigned int xt = (unsigned int)primitives(l,4), yt = (unsigned int)primitives(l,5); + const float + rt = color.atXY(xt,yt,0)/255.0f, + gt = (csiz>1?color.atXY(xt,yt,1):r)/255.0f, + bt = (csiz>2?color.atXY(xt,yt,2):g)/255.0f; + std::fprintf(nfile,"4 %u %u %u %u %f %f %f\n", + (unsigned int)primitives(l,0),(unsigned int)primitives(l,3), + (unsigned int)primitives(l,2),(unsigned int)primitives(l,1),rt,gt,bt); + } break; + } + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Save volumetric image as a video, using the OpenCV library. + /** + \param filename Filename to write data to. + \param fps Number of frames per second. + \param codec Type of compression (See http://www.fourcc.org/codecs.php to see available codecs). + \param keep_open Tells if the video writer associated to the specified filename + must be kept open or not (to allow frames to be added in the same file afterwards). + **/ + const CImg& save_video(const char *const filename, const unsigned int fps=25, + const char *codec=0, const bool keep_open=false) const { + if (is_empty()) { CImgList().save_video(filename,fps,codec,keep_open); return *this; } + CImgList list; + get_split('z').move_to(list); + list.save_video(filename,fps,codec,keep_open); + return *this; + } + + //! Save volumetric image as a video, using ffmpeg external binary. + /** + \param filename Filename, as a C-string. + \param fps Video framerate. + \param codec Video codec, as a C-string. + \param bitrate Video bitrate. + \note + - Each slice of the instance image is considered to be a single frame of the output video file. + - This method uses \c ffmpeg, an external executable binary provided by + FFmpeg. + It must be installed for the method to succeed. + **/ + const CImg& save_ffmpeg_external(const char *const filename, const unsigned int fps=25, + const char *const codec=0, const unsigned int bitrate=2048) const { + if (!filename) + throw CImgArgumentException(_cimg_instance + "save_ffmpeg_external(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(0,filename); return *this; } + + CImgList list; + get_split('z').move_to(list); + list.save_ffmpeg_external(filename,fps,codec,bitrate); + return *this; + } + + //! Save image using gzip external binary. + /** + \param filename Filename, as a C-string. + \note This method uses \c gzip, an external executable binary provided by + gzip. + It must be installed for the method to succeed. + **/ + const CImg& save_gzip_external(const char *const filename) const { + if (!filename) + throw CImgArgumentException(_cimg_instance + "save_gzip_external(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(0,filename); return *this; } + + CImg command(1024), filename_tmp(256), body(256); + const char + *ext = cimg::split_filename(filename,body), + *ext2 = cimg::split_filename(body,0); + std::FILE *file; + do { + if (!cimg::strcasecmp(ext,"gz")) { + if (*ext2) cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext2); + else cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.cimg", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + } else { + if (*ext) cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext); + else cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.cimg", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + } + if ((file=std_fopen(filename_tmp,"rb"))!=0) cimg::fclose(file); + } while (file); + save(filename_tmp); + cimg_snprintf(command,command._width,"%s -c \"%s\" > \"%s\"", + cimg::gzip_path(), + CImg::string(filename_tmp)._system_strescape().data(), + CImg::string(filename)._system_strescape().data()); + cimg::system(command); + file = std_fopen(filename,"rb"); + if (!file) + throw CImgIOException(_cimg_instance + "save_gzip_external(): Failed to save file '%s' with external command 'gzip'.", + cimg_instance, + filename); + + else cimg::fclose(file); + std::remove(filename_tmp); + return *this; + } + + //! Save image using GraphicsMagick's external binary. + /** + \param filename Filename, as a C-string. + \param quality Image quality (expressed in percent), when the file format supports it. + \note This method uses \c gm, an external executable binary provided by + GraphicsMagick. + It must be installed for the method to succeed. + **/ + const CImg& save_graphicsmagick_external(const char *const filename, const unsigned int quality=100) const { + if (!filename) + throw CImgArgumentException(_cimg_instance + "save_graphicsmagick_external(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(0,filename); return *this; } + if (_depth>1) + cimg::warn(_cimg_instance + "save_other(): File '%s', saving a volumetric image with an external call to " + "GraphicsMagick only writes the first image slice.", + cimg_instance,filename); + +#ifdef cimg_use_png +#define _cimg_sge_ext1 "png" +#define _cimg_sge_ext2 "png" +#else +#define _cimg_sge_ext1 "pgm" +#define _cimg_sge_ext2 "ppm" +#endif + CImg command(1024), filename_tmp(256); + std::FILE *file; + do { + cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(), + _spectrum==1?_cimg_sge_ext1:_cimg_sge_ext2); + if ((file=std_fopen(filename_tmp,"rb"))!=0) cimg::fclose(file); + } while (file); +#ifdef cimg_use_png + save_png(filename_tmp); +#else + save_pnm(filename_tmp); +#endif + cimg_snprintf(command,command._width,"%s convert -quality %u \"%s\" \"%s\"", + cimg::graphicsmagick_path(),quality, + CImg::string(filename_tmp)._system_strescape().data(), + CImg::string(filename)._system_strescape().data()); + cimg::system(command); + file = std_fopen(filename,"rb"); + if (!file) + throw CImgIOException(_cimg_instance + "save_graphicsmagick_external(): Failed to save file '%s' with external command 'gm'.", + cimg_instance, + filename); + + if (file) cimg::fclose(file); + std::remove(filename_tmp); + return *this; + } + + //! Save image using ImageMagick's external binary. + /** + \param filename Filename, as a C-string. + \param quality Image quality (expressed in percent), when the file format supports it. + \note This method uses \c convert, an external executable binary provided by + ImageMagick. + It must be installed for the method to succeed. + **/ + const CImg& save_imagemagick_external(const char *const filename, const unsigned int quality=100) const { + if (!filename) + throw CImgArgumentException(_cimg_instance + "save_imagemagick_external(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(0,filename); return *this; } + if (_depth>1) + cimg::warn(_cimg_instance + "save_other(): File '%s', saving a volumetric image with an external call to " + "ImageMagick only writes the first image slice.", + cimg_instance,filename); +#ifdef cimg_use_png +#define _cimg_sie_ext1 "png" +#define _cimg_sie_ext2 "png" +#else +#define _cimg_sie_ext1 "pgm" +#define _cimg_sie_ext2 "ppm" +#endif + CImg command(1024), filename_tmp(256); + std::FILE *file; + do { + cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.%s",cimg::temporary_path(), + cimg_file_separator,cimg::filenamerand(),_spectrum==1?_cimg_sie_ext1:_cimg_sie_ext2); + if ((file=std_fopen(filename_tmp,"rb"))!=0) cimg::fclose(file); + } while (file); +#ifdef cimg_use_png + save_png(filename_tmp); +#else + save_pnm(filename_tmp); +#endif + cimg_snprintf(command,command._width,"%s -quality %u \"%s\" \"%s\"", + cimg::imagemagick_path(),quality, + CImg::string(filename_tmp)._system_strescape().data(), + CImg::string(filename)._system_strescape().data()); + cimg::system(command); + file = std_fopen(filename,"rb"); + if (!file) + throw CImgIOException(_cimg_instance + "save_imagemagick_external(): Failed to save file '%s' with " + "external command 'magick/convert'.", + cimg_instance, + filename); + + if (file) cimg::fclose(file); + std::remove(filename_tmp); + return *this; + } + + //! Save image as a Dicom file. + /** + \param filename Filename, as a C-string. + \note This method uses \c medcon, an external executable binary provided by + (X)Medcon. + It must be installed for the method to succeed. + **/ + const CImg& save_medcon_external(const char *const filename) const { + if (!filename) + throw CImgArgumentException(_cimg_instance + "save_medcon_external(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(0,filename); return *this; } + + CImg command(1024), filename_tmp(256), body(256); + std::FILE *file; + do { + cimg_snprintf(filename_tmp,filename_tmp._width,"%s.hdr",cimg::filenamerand()); + if ((file=std_fopen(filename_tmp,"rb"))!=0) cimg::fclose(file); + } while (file); + save_analyze(filename_tmp); + cimg_snprintf(command,command._width,"%s -w -c dicom -o \"%s\" -f \"%s\"", + cimg::medcon_path(), + CImg::string(filename)._system_strescape().data(), + CImg::string(filename_tmp)._system_strescape().data()); + cimg::system(command); + std::remove(filename_tmp); + cimg::split_filename(filename_tmp,body); + cimg_snprintf(filename_tmp,filename_tmp._width,"%s.img",body._data); + std::remove(filename_tmp); + + file = std_fopen(filename,"rb"); + if (!file) { + cimg_snprintf(command,command._width,"m000-%s",filename); + file = std_fopen(command,"rb"); + if (!file) { + cimg::fclose(cimg::fopen(filename,"r")); + throw CImgIOException(_cimg_instance + "save_medcon_external(): Failed to save file '%s' with external command 'medcon'.", + cimg_instance, + filename); + } + } + cimg::fclose(file); + std::rename(command,filename); + return *this; + } + + // Save image for non natively supported formats. + /** + \param filename Filename, as a C-string. + \param quality Image quality (expressed in percent), when the file format supports it. + \note + - The filename extension tells about the desired file format. + - This method tries to save the instance image as a file, using external tools from + ImageMagick or + GraphicsMagick. + At least one of these tool must be installed for the method to succeed. + - It is recommended to use the generic method save(const char*, int) const instead, + as it can handle some file formats natively. + **/ + const CImg& save_other(const char *const filename, const unsigned int quality=100) const { + if (!filename) + throw CImgArgumentException(_cimg_instance + "save_other(): Specified filename is (null).", + cimg_instance); + if (is_empty()) { cimg::fempty(0,filename); return *this; } + if (_depth>1) + cimg::warn(_cimg_instance + "save_other(): File '%s', saving a volumetric image with an external call to " + "ImageMagick or GraphicsMagick only writes the first image slice.", + cimg_instance,filename); + + const unsigned int omode = cimg::exception_mode(); + bool is_saved = true; + cimg::exception_mode(0); + try { save_magick(filename); } + catch (CImgException&) { + try { save_imagemagick_external(filename,quality); } + catch (CImgException&) { + try { save_graphicsmagick_external(filename,quality); } + catch (CImgException&) { + is_saved = false; + } + } + } + cimg::exception_mode(omode); + if (!is_saved) + throw CImgIOException(_cimg_instance + "save_other(): Failed to save file '%s'. Format is not natively supported, " + "and no external commands succeeded.", + cimg_instance, + filename); + return *this; + } + + //! Serialize a CImg instance into a raw CImg buffer. + /** + \param is_compressed tells if zlib compression must be used for serialization + (this requires 'cimg_use_zlib' been enabled). + **/ + CImg get_serialize(const bool is_compressed=false) const { + return CImgList(*this,true).get_serialize(is_compressed); + } + + // [internal] Return a 40x38 color logo of a 'danger' item. + static CImg _logo40x38() { + CImg res(40,38,1,3); + const unsigned char *ptrs = cimg::logo40x38; + T *ptr1 = res.data(0,0,0,0), *ptr2 = res.data(0,0,0,1), *ptr3 = res.data(0,0,0,2); + for (ulongT off = 0; off<(ulongT)res._width*res._height;) { + const unsigned char n = *(ptrs++), r = *(ptrs++), g = *(ptrs++), b = *(ptrs++); + for (unsigned int l = 0; l structure + # + # + # + #------------------------------------------ + */ + //! Represent a list of images CImg. + template + struct CImgList { + unsigned int _width, _allocated_width; + CImg *_data; + + //! Simple iterator type, to loop through each image of a list. + /** + \note + - The \c CImgList::iterator type is defined as a CImg*. + - You may use it like this: + \code + CImgList<> list; // Assuming this image list is not empty. + for (CImgList<>::iterator it = list.begin(); it* iterator; + + //! Simple const iterator type, to loop through each image of a \c const list instance. + /** + \note + - The \c CImgList::const_iterator type is defined to be a const CImg*. + - Similar to CImgList::iterator, but for constant list instances. + **/ + typedef const CImg* const_iterator; + + //! Pixel value type. + /** + Refer to the pixels value type of the images in the list. + \note + - The \c CImgList::value_type type of a \c CImgList is defined to be a \c T. + It is then similar to CImg::value_type. + - \c CImgList::value_type is actually not used in %CImg methods. It has been mainly defined for + compatibility with STL naming conventions. + **/ + typedef T value_type; + + // Define common types related to template type T. + typedef typename cimg::superset::type Tbool; + typedef typename cimg::superset::type Tuchar; + typedef typename cimg::superset::type Tchar; + typedef typename cimg::superset::type Tushort; + typedef typename cimg::superset::type Tshort; + typedef typename cimg::superset::type Tuint; + typedef typename cimg::superset::type Tint; + typedef typename cimg::superset::type Tulong; + typedef typename cimg::superset::type Tlong; + typedef typename cimg::superset::type Tfloat; + typedef typename cimg::superset::type Tdouble; + typedef typename cimg::last::type boolT; + typedef typename cimg::last::type ucharT; + typedef typename cimg::last::type charT; + typedef typename cimg::last::type ushortT; + typedef typename cimg::last::type shortT; + typedef typename cimg::last::type uintT; + typedef typename cimg::last::type intT; + typedef typename cimg::last::type ulongT; + typedef typename cimg::last::type longT; + typedef typename cimg::last::type uint64T; + typedef typename cimg::last::type int64T; + typedef typename cimg::last::type floatT; + typedef typename cimg::last::type doubleT; + + //@} + //--------------------------- + // + //! \name Plugins + //@{ + //--------------------------- +#ifdef cimglist_plugin +#include cimglist_plugin +#endif +#ifdef cimglist_plugin1 +#include cimglist_plugin1 +#endif +#ifdef cimglist_plugin2 +#include cimglist_plugin2 +#endif +#ifdef cimglist_plugin3 +#include cimglist_plugin3 +#endif +#ifdef cimglist_plugin4 +#include cimglist_plugin4 +#endif +#ifdef cimglist_plugin5 +#include cimglist_plugin5 +#endif +#ifdef cimglist_plugin6 +#include cimglist_plugin6 +#endif +#ifdef cimglist_plugin7 +#include cimglist_plugin7 +#endif +#ifdef cimglist_plugin8 +#include cimglist_plugin8 +#endif + + //@} + //-------------------------------------------------------- + // + //! \name Constructors / Destructor / Instance Management + //@{ + //-------------------------------------------------------- + + //! Destructor. + /** + Destroy current list instance. + \note + - Any allocated buffer is deallocated. + - Destroying an empty list does nothing actually. + **/ + ~CImgList() { + delete[] _data; + } + + //! Default constructor. + /** + Construct a new empty list instance. + \note + - An empty list has no pixel data and its dimension width() is set to \c 0, as well as its + image buffer pointer data(). + - An empty list may be reassigned afterwards, with the family of the assign() methods. + In all cases, the type of pixels stays \c T. + **/ + CImgList(): + _width(0),_allocated_width(0),_data(0) {} + + //! Construct list containing empty images. + /** + \param n Number of empty images. + \note Useful when you know by advance the number of images you want to manage, as + it will allocate the right amount of memory for the list, without needs for reallocation + (that may occur when starting from an empty list and inserting several images in it). + **/ + explicit CImgList(const unsigned int n):_width(n) { + if (n) _data = new CImg[_allocated_width = std::max(16U,(unsigned int)cimg::nearest_pow2(n))]; + else { _allocated_width = 0; _data = 0; } + } + + //! Construct list containing images of specified size. + /** + \param n Number of images. + \param width Width of images. + \param height Height of images. + \param depth Depth of images. + \param spectrum Number of channels of images. + \note Pixel values are not initialized and may probably contain garbage. + **/ + CImgList(const unsigned int n, const unsigned int width, const unsigned int height=1, + const unsigned int depth=1, const unsigned int spectrum=1): + _width(0),_allocated_width(0),_data(0) { + assign(n); + cimglist_apply(*this,assign)(width,height,depth,spectrum); + } + + //! Construct list containing images of specified size, and initialize pixel values. + /** + \param n Number of images. + \param width Width of images. + \param height Height of images. + \param depth Depth of images. + \param spectrum Number of channels of images. + \param val Initialization value for images pixels. + **/ + CImgList(const unsigned int n, const unsigned int width, const unsigned int height, + const unsigned int depth, const unsigned int spectrum, const T& val): + _width(0),_allocated_width(0),_data(0) { + assign(n); + cimglist_apply(*this,assign)(width,height,depth,spectrum,val); + } + + //! Construct list containing images of specified size, and initialize pixel values from a sequence of integers. + /** + \param n Number of images. + \param width Width of images. + \param height Height of images. + \param depth Depth of images. + \param spectrum Number of channels of images. + \param val0 First value of the initializing integers sequence. + \param val1 Second value of the initializing integers sequence. + \warning You must specify at least width*height*depth*spectrum values in your argument list, + or you will probably segfault. + **/ + CImgList(const unsigned int n, const unsigned int width, const unsigned int height, + const unsigned int depth, const unsigned int spectrum, const int val0, const int val1, ...): + _width(0),_allocated_width(0),_data(0) { +#define _CImgList_stdarg(t) { \ + assign(n,width,height,depth,spectrum); \ + const ulongT siz = (ulongT)width*height*depth*spectrum, nsiz = siz*n; \ + T *ptrd = _data->_data; \ + va_list ap; \ + va_start(ap,val1); \ + for (ulongT l = 0, s = 0, i = 0; iwidth*height*depth*spectrum values in your argument list, + or you will probably segfault. + **/ + CImgList(const unsigned int n, const unsigned int width, const unsigned int height, + const unsigned int depth, const unsigned int spectrum, const double val0, const double val1, ...): + _width(0),_allocated_width(0),_data(0) { + _CImgList_stdarg(double); + } + + //! Construct list containing copies of an input image. + /** + \param n Number of images. + \param img Input image to copy in the constructed list. + \param is_shared Tells if the elements of the list are shared or non-shared copies of \c img. + **/ + template + CImgList(const unsigned int n, const CImg& img, const bool is_shared=false): + _width(0),_allocated_width(0),_data(0) { + assign(n); + cimglist_apply(*this,assign)(img,is_shared); + } + + //! Construct list from one image. + /** + \param img Input image to copy in the constructed list. + \param is_shared Tells if the element of the list is a shared or non-shared copy of \c img. + **/ + template + explicit CImgList(const CImg& img, const bool is_shared=false): + _width(0),_allocated_width(0),_data(0) { + assign(1); + _data[0].assign(img,is_shared); + } + + //! Construct list from two images. + /** + \param img1 First input image to copy in the constructed list. + \param img2 Second input image to copy in the constructed list. + \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. + **/ + template + CImgList(const CImg& img1, const CImg& img2, const bool is_shared=false): + _width(0),_allocated_width(0),_data(0) { + assign(2); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); + } + + //! Construct list from three images. + /** + \param img1 First input image to copy in the constructed list. + \param img2 Second input image to copy in the constructed list. + \param img3 Third input image to copy in the constructed list. + \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. + **/ + template + CImgList(const CImg& img1, const CImg& img2, const CImg& img3, const bool is_shared=false): + _width(0),_allocated_width(0),_data(0) { + assign(3); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); + } + + //! Construct list from four images. + /** + \param img1 First input image to copy in the constructed list. + \param img2 Second input image to copy in the constructed list. + \param img3 Third input image to copy in the constructed list. + \param img4 Fourth input image to copy in the constructed list. + \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. + **/ + template + CImgList(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, + const bool is_shared=false): + _width(0),_allocated_width(0),_data(0) { + assign(4); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); + _data[3].assign(img4,is_shared); + } + + //! Construct list from five images. + /** + \param img1 First input image to copy in the constructed list. + \param img2 Second input image to copy in the constructed list. + \param img3 Third input image to copy in the constructed list. + \param img4 Fourth input image to copy in the constructed list. + \param img5 Fifth input image to copy in the constructed list. + \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. + **/ + template + CImgList(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, + const CImg& img5, const bool is_shared=false): + _width(0),_allocated_width(0),_data(0) { + assign(5); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); + _data[3].assign(img4,is_shared); _data[4].assign(img5,is_shared); + } + + //! Construct list from six images. + /** + \param img1 First input image to copy in the constructed list. + \param img2 Second input image to copy in the constructed list. + \param img3 Third input image to copy in the constructed list. + \param img4 Fourth input image to copy in the constructed list. + \param img5 Fifth input image to copy in the constructed list. + \param img6 Sixth input image to copy in the constructed list. + \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. + **/ + template + CImgList(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, + const CImg& img5, const CImg& img6, const bool is_shared=false): + _width(0),_allocated_width(0),_data(0) { + assign(6); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); + _data[3].assign(img4,is_shared); _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); + } + + //! Construct list from seven images. + /** + \param img1 First input image to copy in the constructed list. + \param img2 Second input image to copy in the constructed list. + \param img3 Third input image to copy in the constructed list. + \param img4 Fourth input image to copy in the constructed list. + \param img5 Fifth input image to copy in the constructed list. + \param img6 Sixth input image to copy in the constructed list. + \param img7 Seventh input image to copy in the constructed list. + \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. + **/ + template + CImgList(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, + const CImg& img5, const CImg& img6, const CImg& img7, const bool is_shared=false): + _width(0),_allocated_width(0),_data(0) { + assign(7); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); + _data[3].assign(img4,is_shared); _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); + _data[6].assign(img7,is_shared); + } + + //! Construct list from eight images. + /** + \param img1 First input image to copy in the constructed list. + \param img2 Second input image to copy in the constructed list. + \param img3 Third input image to copy in the constructed list. + \param img4 Fourth input image to copy in the constructed list. + \param img5 Fifth input image to copy in the constructed list. + \param img6 Sixth input image to copy in the constructed list. + \param img7 Seventh input image to copy in the constructed list. + \param img8 Eighth input image to copy in the constructed list. + \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. + **/ + template + CImgList(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, + const CImg& img5, const CImg& img6, const CImg& img7, const CImg& img8, + const bool is_shared=false): + _width(0),_allocated_width(0),_data(0) { + assign(8); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); + _data[3].assign(img4,is_shared); _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); + _data[6].assign(img7,is_shared); _data[7].assign(img8,is_shared); + } + + //! Construct list copy. + /** + \param list Input list to copy. + \note The shared state of each element of the constructed list is kept the same as in \c list. + **/ + template + CImgList(const CImgList& list):_width(0),_allocated_width(0),_data(0) { + assign(list._width); + cimglist_for(*this,l) _data[l].assign(list[l],false); + } + + //! Construct list copy \specialization. + CImgList(const CImgList& list):_width(0),_allocated_width(0),_data(0) { + assign(list._width); + cimglist_for(*this,l) _data[l].assign(list[l],list[l]._is_shared); + } + + //! Construct list copy, and force the shared state of the list elements. + /** + \param list Input list to copy. + \param is_shared Tells if the elements of the list are shared or non-shared copies of input images. + **/ + template + CImgList(const CImgList& list, const bool is_shared):_width(0),_allocated_width(0),_data(0) { + assign(list._width); + cimglist_for(*this,l) _data[l].assign(list[l],is_shared); + } + + //! Construct list by reading the content of a file. + /** + \param filename Filename, as a C-string. + **/ + explicit CImgList(const char *const filename):_width(0),_allocated_width(0),_data(0) { + assign(filename); + } + + //! Construct list from the content of a display window. + /** + \param disp Display window to get content from. + \note Constructed list contains a single image only. + **/ + explicit CImgList(const CImgDisplay& disp):_width(0),_allocated_width(0),_data(0) { + assign(disp); + } + + //! Return a list with elements being shared copies of images in the list instance. + /** + \note list2 = list1.get_shared() is equivalent to list2.assign(list1,true). + **/ + CImgList get_shared() { + CImgList res(_width); + cimglist_for(*this,l) res[l].assign(_data[l],true); + return res; + } + + //! Return a list with elements being shared copies of images in the list instance \const. + const CImgList get_shared() const { + CImgList res(_width); + cimglist_for(*this,l) res[l].assign(_data[l],true); + return res; + } + + //! Destructor \inplace. + /** + \see CImgList(). + **/ + CImgList& assign() { + delete[] _data; + _width = _allocated_width = 0; + _data = 0; + return *this; + } + + //! Destructor \inplace. + /** + Equivalent to assign(). + \note Only here for compatibility with STL naming conventions. + **/ + CImgList& clear() { + return assign(); + } + + //! Construct list containing empty images \inplace. + /** + \see CImgList(unsigned int). + **/ + CImgList& assign(const unsigned int n) { + if (!n) return assign(); + if (_allocated_width(n<<2)) { + delete[] _data; + _data = new CImg[_allocated_width = std::max(16U,(unsigned int)cimg::nearest_pow2(n))]; + } + _width = n; + return *this; + } + + //! Construct list containing images of specified size \inplace. + /** + \see CImgList(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int). + **/ + CImgList& assign(const unsigned int n, const unsigned int width, const unsigned int height=1, + const unsigned int depth=1, const unsigned int spectrum=1) { + assign(n); + cimglist_apply(*this,assign)(width,height,depth,spectrum); + return *this; + } + + //! Construct list containing images of specified size, and initialize pixel values \inplace. + /** + \see CImgList(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, const T). + **/ + CImgList& assign(const unsigned int n, const unsigned int width, const unsigned int height, + const unsigned int depth, const unsigned int spectrum, const T& val) { + assign(n); + cimglist_apply(*this,assign)(width,height,depth,spectrum,val); + return *this; + } + + //! Construct list with images of specified size, and initialize pixel values from a sequence of integers \inplace. + /** + \see CImgList(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, const int, const int, ...). + **/ + CImgList& assign(const unsigned int n, const unsigned int width, const unsigned int height, + const unsigned int depth, const unsigned int spectrum, const int val0, const int val1, ...) { + _CImgList_stdarg(int); + return *this; + } + + //! Construct list with images of specified size, and initialize pixel values from a sequence of doubles \inplace. + /** + \see CImgList(unsigned int,unsigned int,unsigned int,unsigned int,unsigned int,const double,const double,...). + **/ + CImgList& assign(const unsigned int n, const unsigned int width, const unsigned int height, + const unsigned int depth, const unsigned int spectrum, + const double val0, const double val1, ...) { + _CImgList_stdarg(double); + return *this; + } + + //! Construct list containing copies of an input image \inplace. + /** + \see CImgList(unsigned int, const CImg&, bool). + **/ + template + CImgList& assign(const unsigned int n, const CImg& img, const bool is_shared=false) { + assign(n); + cimglist_apply(*this,assign)(img,is_shared); + return *this; + } + + //! Construct list from one image \inplace. + /** + \see CImgList(const CImg&, bool). + **/ + template + CImgList& assign(const CImg& img, const bool is_shared=false) { + assign(1); + _data[0].assign(img,is_shared); + return *this; + } + + //! Construct list from two images \inplace. + /** + \see CImgList(const CImg&, const CImg&, bool). + **/ + template + CImgList& assign(const CImg& img1, const CImg& img2, const bool is_shared=false) { + assign(2); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); + return *this; + } + + //! Construct list from three images \inplace. + /** + \see CImgList(const CImg&, const CImg&, const CImg&, bool). + **/ + template + CImgList& assign(const CImg& img1, const CImg& img2, const CImg& img3, const bool is_shared=false) { + assign(3); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); + return *this; + } + + //! Construct list from four images \inplace. + /** + \see CImgList(const CImg&, const CImg&, const CImg&, const CImg&, bool). + **/ + template + CImgList& assign(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, + const bool is_shared=false) { + assign(4); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); + _data[3].assign(img4,is_shared); + return *this; + } + + //! Construct list from five images \inplace. + /** + \see CImgList(const CImg&, const CImg&, const CImg&, const CImg&, const CImg&, bool). + **/ + template + CImgList& assign(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, + const CImg& img5, const bool is_shared=false) { + assign(5); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); + _data[3].assign(img4,is_shared); _data[4].assign(img5,is_shared); + return *this; + } + + //! Construct list from six images \inplace. + /** + \see CImgList(const CImg&,const CImg&,const CImg&,const CImg&,const CImg&,const CImg&, bool). + **/ + template + CImgList& assign(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, + const CImg& img5, const CImg& img6, const bool is_shared=false) { + assign(6); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); + _data[3].assign(img4,is_shared); _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); + return *this; + } + + //! Construct list from seven images \inplace. + /** + \see CImgList(const CImg&,const CImg&,const CImg&,const CImg&,const CImg&,const CImg&, + const CImg&, bool). + **/ + template + CImgList& assign(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, + const CImg& img5, const CImg& img6, const CImg& img7, const bool is_shared=false) { + assign(7); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); + _data[3].assign(img4,is_shared); _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); + _data[6].assign(img7,is_shared); + return *this; + } + + //! Construct list from eight images \inplace. + /** + \see CImgList(const CImg&,const CImg&,const CImg&,const CImg&,const CImg&,const CImg&, + const CImg&, const CImg&, bool). + **/ + template + CImgList& assign(const CImg& img1, const CImg& img2, const CImg& img3, const CImg& img4, + const CImg& img5, const CImg& img6, const CImg& img7, const CImg& img8, + const bool is_shared=false) { + assign(8); + _data[0].assign(img1,is_shared); _data[1].assign(img2,is_shared); _data[2].assign(img3,is_shared); + _data[3].assign(img4,is_shared); _data[4].assign(img5,is_shared); _data[5].assign(img6,is_shared); + _data[6].assign(img7,is_shared); _data[7].assign(img8,is_shared); + return *this; + } + + //! Construct list as a copy of an existing list and force the shared state of the list elements \inplace. + /** + \see CImgList(const CImgList&, bool is_shared). + **/ + template + CImgList& assign(const CImgList& list, const bool is_shared=false) { + cimg::unused(is_shared); + assign(list._width); + cimglist_for(*this,l) _data[l].assign(list[l],false); + return *this; + } + + //! Construct list as a copy of an existing list and force shared state of elements \inplace \specialization. + CImgList& assign(const CImgList& list, const bool is_shared=false) { + if (this==&list) return *this; + CImgList res(list._width); + cimglist_for(res,l) res[l].assign(list[l],is_shared); + return res.move_to(*this); + } + + //! Construct list by reading the content of a file \inplace. + /** + \see CImgList(const char *const). + **/ + CImgList& assign(const char *const filename) { + return load(filename); + } + + //! Construct list from the content of a display window \inplace. + /** + \see CImgList(const CImgDisplay&). + **/ + CImgList& assign(const CImgDisplay &disp) { + return assign(CImg(disp)); + } + + //! Transfer the content of the list instance to another list. + /** + \param list Destination list. + \note When returning, the current list instance is empty and the initial content of \c list is destroyed. + **/ + template + CImgList& move_to(CImgList& list) { + list.assign(_width); + bool is_one_shared_element = false; + cimglist_for(*this,l) is_one_shared_element|=_data[l]._is_shared; + if (is_one_shared_element) cimglist_for(*this,l) list[l].assign(_data[l]); + else cimglist_for(*this,l) _data[l].move_to(list[l]); + assign(); + return list; + } + + //! Transfer the content of the list instance at a specified position in another list. + /** + \param list Destination list. + \param pos Index of the insertion in the list. + \note When returning, the list instance is empty and the initial content of \c list is preserved + (only images indexes may be modified). + **/ + template + CImgList& move_to(CImgList& list, const unsigned int pos) { + if (is_empty()) return list; + const unsigned int npos = pos>list._width?list._width:pos; + list.insert(_width,npos); + bool is_one_shared_element = false; + cimglist_for(*this,l) is_one_shared_element|=_data[l]._is_shared; + if (is_one_shared_element) cimglist_for(*this,l) list[npos + l].assign(_data[l]); + else cimglist_for(*this,l) _data[l].move_to(list[npos + l]); + assign(); + return list; + } + + //! Swap all fields between two list instances. + /** + \param list List to swap fields with. + \note Can be used to exchange the content of two lists in a fast way. + **/ + CImgList& swap(CImgList& list) { + cimg::swap(_width,list._width,_allocated_width,list._allocated_width); + cimg::swap(_data,list._data); + return list; + } + + //! Return a reference to an empty list. + /** + \note Can be used to define default values in a function taking a CImgList as an argument. + \code + void f(const CImgList& list=CImgList::empty()); + \endcode + **/ + static CImgList& empty() { + static CImgList _empty; + return _empty.assign(); + } + + //! Return a reference to an empty list \const. + static const CImgList& const_empty() { + static const CImgList _empty; + return _empty; + } + + //@} + //------------------------------------------ + // + //! \name Overloaded Operators + //@{ + //------------------------------------------ + + //! Return a reference to one image element of the list. + /** + \param pos Indice of the image element. + **/ + CImg& operator()(const unsigned int pos) { +#if cimg_verbosity>=3 + if (pos>=_width) { + cimg::warn(_cimglist_instance + "operator(): Invalid image request, at position [%u].", + cimglist_instance, + pos); + return *_data; + } +#endif + return _data[pos]; + } + + //! Return a reference to one image of the list. + /** + \param pos Indice of the image element. + **/ + const CImg& operator()(const unsigned int pos) const { + return const_cast*>(this)->operator()(pos); + } + + //! Return a reference to one pixel value of one image of the list. + /** + \param pos Indice of the image element. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \note list(n,x,y,z,c) is equivalent to list[n](x,y,z,c). + **/ + T& operator()(const unsigned int pos, const unsigned int x, const unsigned int y=0, + const unsigned int z=0, const unsigned int c=0) { + return (*this)[pos](x,y,z,c); + } + + //! Return a reference to one pixel value of one image of the list \const. + const T& operator()(const unsigned int pos, const unsigned int x, const unsigned int y=0, + const unsigned int z=0, const unsigned int c=0) const { + return (*this)[pos](x,y,z,c); + } + + //! Return pointer to the first image of the list. + /** + \note Images in a list are stored as a buffer of \c CImg. + **/ + operator CImg*() { + return _data; + } + + //! Return pointer to the first image of the list \const. + operator const CImg*() const { + return _data; + } + + //! Construct list from one image \inplace. + /** + \param img Input image to copy in the constructed list. + \note list = img; is equivalent to list.assign(img);. + **/ + template + CImgList& operator=(const CImg& img) { + return assign(img); + } + + //! Construct list from another list. + /** + \param list Input list to copy. + \note list1 = list2 is equivalent to list1.assign(list2);. + **/ + template + CImgList& operator=(const CImgList& list) { + return assign(list); + } + + //! Construct list from another list \specialization. + CImgList& operator=(const CImgList& list) { + return assign(list); + } + + //! Construct list by reading the content of a file \inplace. + /** + \see CImgList(const char *const). + **/ + CImgList& operator=(const char *const filename) { + return assign(filename); + } + + //! Construct list from the content of a display window \inplace. + /** + \see CImgList(const CImgDisplay&). + **/ + CImgList& operator=(const CImgDisplay& disp) { + return assign(disp); + } + + //! Return a non-shared copy of a list. + /** + \note +list is equivalent to CImgList(list,false). + It forces the copy to have non-shared elements. + **/ + CImgList operator+() const { + return CImgList(*this,false); + } + + //! Return a copy of the list instance, where image \c img has been inserted at the end. + /** + \param img Image inserted at the end of the instance copy. + \note Define a convenient way to create temporary lists of images, as in the following code: + \code + (img1,img2,img3,img4).display("My four images"); + \endcode + **/ + template + CImgList& operator,(const CImg& img) { + return insert(img); + } + + //! Return a copy of the list instance, where image \c img has been inserted at the end \const. + template + CImgList operator,(const CImg& img) const { + return (+*this).insert(img); + } + + //! Return a copy of the list instance, where all elements of input list \c list have been inserted at the end. + /** + \param list List inserted at the end of the instance copy. + **/ + template + CImgList& operator,(const CImgList& list) { + return insert(list); + } + + //! Return a copy of the list instance, where all elements of input \c list have been inserted at the end \const. + template + CImgList& operator,(const CImgList& list) const { + return (+*this).insert(list); + } + + //! Return image corresponding to the appending of all images of the instance list along specified axis. + /** + \param axis Appending axis. Can be { 'x' | 'y' | 'z' | 'c' }. + \note list>'x' is equivalent to list.get_append('x'). + **/ + CImg operator>(const char axis) const { + return get_append(axis,0); + } + + //! Return list corresponding to the splitting of all images of the instance list along specified axis. + /** + \param axis Axis used for image splitting. + \note list<'x' is equivalent to list.get_split('x'). + **/ + CImgList operator<(const char axis) const { + return get_split(axis); + } + + //@} + //------------------------------------- + // + //! \name Instance Characteristics + //@{ + //------------------------------------- + + //! Return the type of image pixel values as a C string. + /** + Return a \c char* string containing the usual type name of the image pixel values + (i.e. a stringified version of the template parameter \c T). + \note + - The returned string may contain spaces (as in \c "unsigned char"). + - If the pixel type \c T does not correspond to a registered type, the string "unknown" is returned. + **/ + static const char* pixel_type() { + return cimg::type::string(); + } + + //! Return the size of the list, i.e. the number of images contained in it. + /** + \note Similar to size() but returns result as a (signed) integer. + **/ + int width() const { + return (int)_width; + } + + //! Return the size of the list, i.e. the number of images contained in it. + /** + \note Similar to width() but returns result as an unsigned integer. + **/ + unsigned int size() const { + return _width; + } + + //! Return pointer to the first image of the list. + /** + \note Images in a list are stored as a buffer of \c CImg. + **/ + CImg *data() { + return _data; + } + + //! Return pointer to the first image of the list \const. + const CImg *data() const { + return _data; + } + + //! Return pointer to the pos-th image of the list. + /** + \param pos Indice of the image element to access. + \note list.data(n); is equivalent to list.data + n;. + **/ +#if cimg_verbosity>=3 + CImg *data(const unsigned int pos) { + if (pos>=size()) + cimg::warn(_cimglist_instance + "data(): Invalid pointer request, at position [%u].", + cimglist_instance, + pos); + return _data + pos; + } + + const CImg *data(const unsigned int l) const { + return const_cast*>(this)->data(l); + } +#else + CImg *data(const unsigned int l) { + return _data + l; + } + + //! Return pointer to the pos-th image of the list \const. + const CImg *data(const unsigned int l) const { + return _data + l; + } +#endif + + //! Return iterator to the first image of the list. + /** + **/ + iterator begin() { + return _data; + } + + //! Return iterator to the first image of the list \const. + const_iterator begin() const { + return _data; + } + + //! Return iterator to one position after the last image of the list. + /** + **/ + iterator end() { + return _data + _width; + } + + //! Return iterator to one position after the last image of the list \const. + const_iterator end() const { + return _data + _width; + } + + //! Return reference to the first image of the list. + /** + **/ + CImg& front() { + return *_data; + } + + //! Return reference to the first image of the list \const. + const CImg& front() const { + return *_data; + } + + //! Return a reference to the last image of the list. + /** + **/ + const CImg& back() const { + return *(_data + _width - 1); + } + + //! Return a reference to the last image of the list \const. + CImg& back() { + return *(_data + _width - 1); + } + + //! Return pos-th image of the list. + /** + \param pos Indice of the image element to access. + **/ + CImg& at(const int pos) { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "at(): Empty instance.", + cimglist_instance); + + return _data[cimg::cut(pos,0,width() - 1)]; + } + + //! Access to pixel value with Dirichlet boundary conditions. + /** + \param pos Indice of the image element to access. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \param out_value Default value returned if \c offset is outside image bounds. + \note list.atNXYZC(p,x,y,z,c); is equivalent to list[p].atXYZC(x,y,z,c);. + **/ + T& atNXYZC(const int pos, const int x, const int y, const int z, const int c, const T& out_value) { + return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atXYZC(x,y,z,c,out_value); + } + + //! Access to pixel value with Dirichlet boundary conditions \const. + T atNXYZC(const int pos, const int x, const int y, const int z, const int c, const T& out_value) const { + return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atXYZC(x,y,z,c,out_value); + } + + //! Access to pixel value with Neumann boundary conditions. + /** + \param pos Indice of the image element to access. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \note list.atNXYZC(p,x,y,z,c); is equivalent to list[p].atXYZC(x,y,z,c);. + **/ + T& atNXYZC(const int pos, const int x, const int y, const int z, const int c) { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "atNXYZC(): Empty instance.", + cimglist_instance); + + return _atNXYZC(pos,x,y,z,c); + } + + //! Access to pixel value with Neumann boundary conditions \const. + T atNXYZC(const int pos, const int x, const int y, const int z, const int c) const { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "atNXYZC(): Empty instance.", + cimglist_instance); + + return _atNXYZC(pos,x,y,z,c); + } + + T& _atNXYZC(const int pos, const int x, const int y, const int z, const int c) { + return _data[cimg::cut(pos,0,width() - 1)].atXYZC(x,y,z,c); + } + + T _atNXYZC(const int pos, const int x, const int y, const int z, const int c) const { + return _data[cimg::cut(pos,0,width() - 1)].atXYZC(x,y,z,c); + } + + //! Access pixel value with Dirichlet boundary conditions for the 3 coordinates (\c pos, \c x,\c y,\c z). + /** + \param pos Indice of the image element to access. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \param out_value Default value returned if \c offset is outside image bounds. + \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. + **/ + T& atNXYZ(const int pos, const int x, const int y, const int z, const int c, const T& out_value) { + return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atXYZ(x,y,z,c,out_value); + } + + //! Access pixel value with Dirichlet boundary conditions for the 3 coordinates (\c pos, \c x,\c y,\c z) \const. + T atNXYZ(const int pos, const int x, const int y, const int z, const int c, const T& out_value) const { + return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atXYZ(x,y,z,c,out_value); + } + + //! Access to pixel value with Neumann boundary conditions for the 4 coordinates (\c pos, \c x,\c y,\c z). + /** + \param pos Indice of the image element to access. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. + **/ + T& atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "atNXYZ(): Empty instance.", + cimglist_instance); + + return _atNXYZ(pos,x,y,z,c); + } + + //! Access to pixel value with Neumann boundary conditions for the 4 coordinates (\c pos, \c x,\c y,\c z) \const. + T atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) const { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "atNXYZ(): Empty instance.", + cimglist_instance); + + return _atNXYZ(pos,x,y,z,c); + } + + T& _atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) { + return _data[cimg::cut(pos,0,width() - 1)].atXYZ(x,y,z,c); + } + + T _atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) const { + return _data[cimg::cut(pos,0,width() - 1)].atXYZ(x,y,z,c); + } + + //! Access to pixel value with Dirichlet boundary conditions for the 3 coordinates (\c pos, \c x,\c y). + /** + \param pos Indice of the image element to access. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \param out_value Default value returned if \c offset is outside image bounds. + \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. + **/ + T& atNXY(const int pos, const int x, const int y, const int z, const int c, const T& out_value) { + return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atXY(x,y,z,c,out_value); + } + + //! Access to pixel value with Dirichlet boundary conditions for the 3 coordinates (\c pos, \c x,\c y) \const. + T atNXY(const int pos, const int x, const int y, const int z, const int c, const T& out_value) const { + return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atXY(x,y,z,c,out_value); + } + + //! Access to pixel value with Neumann boundary conditions for the 3 coordinates (\c pos, \c x,\c y). + /** + \param pos Indice of the image element to access. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. + **/ + T& atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "atNXY(): Empty instance.", + cimglist_instance); + + return _atNXY(pos,x,y,z,c); + } + + //! Access to pixel value with Neumann boundary conditions for the 3 coordinates (\c pos, \c x,\c y) \const. + T atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) const { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "atNXY(): Empty instance.", + cimglist_instance); + + return _atNXY(pos,x,y,z,c); + } + + T& _atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) { + return _data[cimg::cut(pos,0,width() - 1)].atXY(x,y,z,c); + } + + T _atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) const { + return _data[cimg::cut(pos,0,width() - 1)].atXY(x,y,z,c); + } + + //! Access to pixel value with Dirichlet boundary conditions for the 2 coordinates (\c pos,\c x). + /** + \param pos Indice of the image element to access. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \param out_value Default value returned if \c offset is outside image bounds. + \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. + **/ + T& atNX(const int pos, const int x, const int y, const int z, const int c, const T& out_value) { + return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):_data[pos].atX(x,y,z,c,out_value); + } + + //! Access to pixel value with Dirichlet boundary conditions for the 2 coordinates (\c pos,\c x) \const. + T atNX(const int pos, const int x, const int y, const int z, const int c, const T& out_value) const { + return (pos<0 || pos>=(int)_width)?out_value:_data[pos].atX(x,y,z,c,out_value); + } + + //! Access to pixel value with Neumann boundary conditions for the 2 coordinates (\c pos, \c x). + /** + \param pos Indice of the image element to access. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. + **/ + T& atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "atNX(): Empty instance.", + cimglist_instance); + + return _atNX(pos,x,y,z,c); + } + + //! Access to pixel value with Neumann boundary conditions for the 2 coordinates (\c pos, \c x) \const. + T atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) const { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "atNX(): Empty instance.", + cimglist_instance); + + return _atNX(pos,x,y,z,c); + } + + T& _atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) { + return _data[cimg::cut(pos,0,width() - 1)].atX(x,y,z,c); + } + + T _atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) const { + return _data[cimg::cut(pos,0,width() - 1)].atX(x,y,z,c); + } + + //! Access to pixel value with Dirichlet boundary conditions for the coordinate (\c pos). + /** + \param pos Indice of the image element to access. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \param out_value Default value returned if \c offset is outside image bounds. + \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. + **/ + T& atN(const int pos, const int x, const int y, const int z, const int c, const T& out_value) { + return (pos<0 || pos>=(int)_width)?(cimg::temporary(out_value)=out_value):(*this)(pos,x,y,z,c); + } + + //! Access to pixel value with Dirichlet boundary conditions for the coordinate (\c pos) \const. + T atN(const int pos, const int x, const int y, const int z, const int c, const T& out_value) const { + return (pos<0 || pos>=(int)_width)?out_value:(*this)(pos,x,y,z,c); + } + + //! Return pixel value with Neumann boundary conditions for the coordinate (\c pos). + /** + \param pos Indice of the image element to access. + \param x X-coordinate of the pixel value. + \param y Y-coordinate of the pixel value. + \param z Z-coordinate of the pixel value. + \param c C-coordinate of the pixel value. + \note list.atNXYZ(p,x,y,z,c); is equivalent to list[p].atXYZ(x,y,z,c);. + **/ + T& atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "atN(): Empty instance.", + cimglist_instance); + return _atN(pos,x,y,z,c); + } + + //! Return pixel value with Neumann boundary conditions for the coordinate (\c pos) \const. + T atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) const { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "atN(): Empty instance.", + cimglist_instance); + return _atN(pos,x,y,z,c); + } + + T& _atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) { + return _data[cimg::cut(pos,0,width() - 1)](x,y,z,c); + } + + T _atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) const { + return _data[cimg::cut(pos,0,width() - 1)](x,y,z,c); + } + + //@} + //------------------------------------- + // + //! \name Instance Checking + //@{ + //------------------------------------- + + //! Return \c true if list is empty. + /** + **/ + bool is_empty() const { + return (!_data || !_width); + } + + //! Test if number of image elements is equal to specified value. + /** + \param size_n Number of image elements to test. + **/ + bool is_sameN(const unsigned int size_n) const { + return _width==size_n; + } + + //! Test if number of image elements is equal between two images lists. + /** + \param list Input list to compare with. + **/ + template + bool is_sameN(const CImgList& list) const { + return is_sameN(list._width); + } + + // Define useful functions to check list dimensions. + // (cannot be documented because macro-generated). +#define _cimglist_def_is_same1(axis) \ + bool is_same##axis(const unsigned int val) const { \ + bool res = true; \ + for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_same##axis(val); return res; \ + } \ + bool is_sameN##axis(const unsigned int n, const unsigned int val) const { \ + return is_sameN(n) && is_same##axis(val); \ + } \ + +#define _cimglist_def_is_same2(axis1,axis2) \ + bool is_same##axis1##axis2(const unsigned int val1, const unsigned int val2) const { \ + bool res = true; \ + for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_same##axis1##axis2(val1,val2); return res; \ + } \ + bool is_sameN##axis1##axis2(const unsigned int n, const unsigned int val1, const unsigned int val2) const { \ + return is_sameN(n) && is_same##axis1##axis2(val1,val2); \ + } \ + +#define _cimglist_def_is_same3(axis1,axis2,axis3) \ + bool is_same##axis1##axis2##axis3(const unsigned int val1, const unsigned int val2, \ + const unsigned int val3) const { \ + bool res = true; \ + for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_same##axis1##axis2##axis3(val1,val2,val3); \ + return res; \ + } \ + bool is_sameN##axis1##axis2##axis3(const unsigned int n, const unsigned int val1, \ + const unsigned int val2, const unsigned int val3) const { \ + return is_sameN(n) && is_same##axis1##axis2##axis3(val1,val2,val3); \ + } \ + +#define _cimglist_def_is_same(axis) \ + template bool is_same##axis(const CImg& img) const { \ + bool res = true; for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_same##axis(img); return res; \ + } \ + template bool is_same##axis(const CImgList& list) const { \ + const unsigned int lmin = std::min(_width,list._width); \ + bool res = true; for (unsigned int l = 0; l bool is_sameN##axis(const unsigned int n, const CImg& img) const { \ + return (is_sameN(n) && is_same##axis(img)); \ + } \ + template bool is_sameN##axis(const CImgList& list) const { \ + return (is_sameN(list) && is_same##axis(list)); \ + } + + _cimglist_def_is_same(XY) + _cimglist_def_is_same(XZ) + _cimglist_def_is_same(XC) + _cimglist_def_is_same(YZ) + _cimglist_def_is_same(YC) + _cimglist_def_is_same(XYZ) + _cimglist_def_is_same(XYC) + _cimglist_def_is_same(YZC) + _cimglist_def_is_same(XYZC) + _cimglist_def_is_same1(X) + _cimglist_def_is_same1(Y) + _cimglist_def_is_same1(Z) + _cimglist_def_is_same1(C) + _cimglist_def_is_same2(X,Y) + _cimglist_def_is_same2(X,Z) + _cimglist_def_is_same2(X,C) + _cimglist_def_is_same2(Y,Z) + _cimglist_def_is_same2(Y,C) + _cimglist_def_is_same2(Z,C) + _cimglist_def_is_same3(X,Y,Z) + _cimglist_def_is_same3(X,Y,C) + _cimglist_def_is_same3(X,Z,C) + _cimglist_def_is_same3(Y,Z,C) + + //! Test if dimensions of each image of the list match specified arguments. + /** + \param dx Checked image width. + \param dy Checked image height. + \param dz Checked image depth. + \param dc Checked image spectrum. + **/ + bool is_sameXYZC(const unsigned int dx, const unsigned int dy, + const unsigned int dz, const unsigned int dc) const { + bool res = true; + for (unsigned int l = 0; l<_width && res; ++l) res = _data[l].is_sameXYZC(dx,dy,dz,dc); + return res; + } + + //! Test if list dimensions match specified arguments. + /** + \param n Number of images in the list. + \param dx Checked image width. + \param dy Checked image height. + \param dz Checked image depth. + \param dc Checked image spectrum. + **/ + bool is_sameNXYZC(const unsigned int n, + const unsigned int dx, const unsigned int dy, + const unsigned int dz, const unsigned int dc) const { + return is_sameN(n) && is_sameXYZC(dx,dy,dz,dc); + } + + //! Test if list contains one particular pixel location. + /** + \param n Index of the image whom checked pixel value belong to. + \param x X-coordinate of the checked pixel value. + \param y Y-coordinate of the checked pixel value. + \param z Z-coordinate of the checked pixel value. + \param c C-coordinate of the checked pixel value. + **/ + bool containsNXYZC(const int n, const int x=0, const int y=0, const int z=0, const int c=0) const { + if (is_empty()) return false; + return n>=0 && n<(int)_width && x>=0 && x<_data[n].width() && y>=0 && y<_data[n].height() && + z>=0 && z<_data[n].depth() && c>=0 && c<_data[n].spectrum(); + } + + //! Test if list contains image with specified indice. + /** + \param n Index of the checked image. + **/ + bool containsN(const int n) const { + if (is_empty()) return false; + return n>=0 && n<(int)_width; + } + + //! Test if one image of the list contains the specified referenced value. + /** + \param pixel Reference to pixel value to test. + \param[out] n Index of image containing the pixel value, if test succeeds. + \param[out] x X-coordinate of the pixel value, if test succeeds. + \param[out] y Y-coordinate of the pixel value, if test succeeds. + \param[out] z Z-coordinate of the pixel value, if test succeeds. + \param[out] c C-coordinate of the pixel value, if test succeeds. + \note If true, set coordinates (n,x,y,z,c). + **/ + template + bool contains(const T& pixel, t& n, t& x, t&y, t& z, t& c) const { + if (is_empty()) return false; + cimglist_for(*this,l) if (_data[l].contains(pixel,x,y,z,c)) { n = (t)l; return true; } + return false; + } + + //! Test if one of the image list contains the specified referenced value. + /** + \param pixel Reference to pixel value to test. + \param[out] n Index of image containing the pixel value, if test succeeds. + \param[out] x X-coordinate of the pixel value, if test succeeds. + \param[out] y Y-coordinate of the pixel value, if test succeeds. + \param[out] z Z-coordinate of the pixel value, if test succeeds. + \note If true, set coordinates (n,x,y,z). + **/ + template + bool contains(const T& pixel, t& n, t& x, t&y, t& z) const { + t c; + return contains(pixel,n,x,y,z,c); + } + + //! Test if one of the image list contains the specified referenced value. + /** + \param pixel Reference to pixel value to test. + \param[out] n Index of image containing the pixel value, if test succeeds. + \param[out] x X-coordinate of the pixel value, if test succeeds. + \param[out] y Y-coordinate of the pixel value, if test succeeds. + \note If true, set coordinates (n,x,y). + **/ + template + bool contains(const T& pixel, t& n, t& x, t&y) const { + t z, c; + return contains(pixel,n,x,y,z,c); + } + + //! Test if one of the image list contains the specified referenced value. + /** + \param pixel Reference to pixel value to test. + \param[out] n Index of image containing the pixel value, if test succeeds. + \param[out] x X-coordinate of the pixel value, if test succeeds. + \note If true, set coordinates (n,x). + **/ + template + bool contains(const T& pixel, t& n, t& x) const { + t y, z, c; + return contains(pixel,n,x,y,z,c); + } + + //! Test if one of the image list contains the specified referenced value. + /** + \param pixel Reference to pixel value to test. + \param[out] n Index of image containing the pixel value, if test succeeds. + \note If true, set coordinates (n). + **/ + template + bool contains(const T& pixel, t& n) const { + t x, y, z, c; + return contains(pixel,n,x,y,z,c); + } + + //! Test if one of the image list contains the specified referenced value. + /** + \param pixel Reference to pixel value to test. + **/ + bool contains(const T& pixel) const { + unsigned int n, x, y, z, c; + return contains(pixel,n,x,y,z,c); + } + + //! Test if the list contains the image 'img'. + /** + \param img Reference to image to test. + \param[out] n Index of image in the list, if test succeeds. + \note If true, returns the position (n) of the image in the list. + **/ + template + bool contains(const CImg& img, t& n) const { + if (is_empty()) return false; + const CImg *const ptr = &img; + cimglist_for(*this,i) if (_data + i==ptr) { n = (t)i; return true; } + return false; + } + + //! Test if the list contains the image img. + /** + \param img Reference to image to test. + **/ + bool contains(const CImg& img) const { + unsigned int n; + return contains(img,n); + } + + //@} + //------------------------------------- + // + //! \name Mathematical Functions + //@{ + //------------------------------------- + + //! Return a reference to the minimum pixel value of the instance list. + /** + **/ + T& min() { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "min(): Empty instance.", + cimglist_instance); + T *ptr_min = _data->_data; + T min_value = *ptr_min; + cimglist_for(*this,l) { + const CImg& img = _data[l]; + cimg_for(img,ptrs,T) if (*ptrs_data; + T min_value = *ptr_min; + cimglist_for(*this,l) { + const CImg& img = _data[l]; + cimg_for(img,ptrs,T) if (*ptrs_data; + T max_value = *ptr_max; + cimglist_for(*this,l) { + const CImg& img = _data[l]; + cimg_for(img,ptrs,T) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); + } + return *ptr_max; + } + + //! Return a reference to the maximum pixel value of the instance list \const. + const T& max() const { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "max(): Empty instance.", + cimglist_instance); + const T *ptr_max = _data->_data; + T max_value = *ptr_max; + cimglist_for(*this,l) { + const CImg& img = _data[l]; + cimg_for(img,ptrs,T) if (*ptrs>max_value) max_value = *(ptr_max=ptrs); + } + return *ptr_max; + } + + //! Return a reference to the minimum pixel value of the instance list and return the maximum vvalue as well. + /** + \param[out] max_val Value of the maximum value found. + **/ + template + T& min_max(t& max_val) { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "min_max(): Empty instance.", + cimglist_instance); + T *ptr_min = _data->_data; + T min_value = *ptr_min, max_value = min_value; + cimglist_for(*this,l) { + const CImg& img = _data[l]; + cimg_for(img,ptrs,T) { + const T val = *ptrs; + if (valmax_value) max_value = val; + } + } + max_val = (t)max_value; + return *ptr_min; + } + + //! Return a reference to the minimum pixel value of the instance list and return the maximum vvalue as well \const. + /** + \param[out] max_val Value of the maximum value found. + **/ + template + const T& min_max(t& max_val) const { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "min_max(): Empty instance.", + cimglist_instance); + const T *ptr_min = _data->_data; + T min_value = *ptr_min, max_value = min_value; + cimglist_for(*this,l) { + const CImg& img = _data[l]; + cimg_for(img,ptrs,T) { + const T val = *ptrs; + if (valmax_value) max_value = val; + } + } + max_val = (t)max_value; + return *ptr_min; + } + + //! Return a reference to the minimum pixel value of the instance list and return the minimum value as well. + /** + \param[out] min_val Value of the minimum value found. + **/ + template + T& max_min(t& min_val) { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "max_min(): Empty instance.", + cimglist_instance); + T *ptr_max = _data->_data; + T min_value = *ptr_max, max_value = min_value; + cimglist_for(*this,l) { + const CImg& img = _data[l]; + cimg_for(img,ptrs,T) { + const T val = *ptrs; + if (val>max_value) { max_value = val; ptr_max = ptrs; } + if (val + const T& max_min(t& min_val) const { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "max_min(): Empty instance.", + cimglist_instance); + const T *ptr_max = _data->_data; + T min_value = *ptr_max, max_value = min_value; + cimglist_for(*this,l) { + const CImg& img = _data[l]; + cimg_for(img,ptrs,T) { + const T val = *ptrs; + if (val>max_value) { max_value = val; ptr_max = ptrs; } + if (val + CImgList& insert(const CImg& img, const unsigned int pos=~0U, const bool is_shared=false) { + const unsigned int npos = pos==~0U?_width:pos; + if (npos>_width) + throw CImgArgumentException(_cimglist_instance + "insert(): Invalid insertion request of specified image (%u,%u,%u,%u,%p) " + "at position %u.", + cimglist_instance, + img._width,img._height,img._depth,img._spectrum,img._data,npos); + if (is_shared) + throw CImgArgumentException(_cimglist_instance + "insert(): Invalid insertion request of specified shared image " + "CImg<%s>(%u,%u,%u,%u,%p) at position %u (pixel types are different).", + cimglist_instance, + img.pixel_type(),img._width,img._height,img._depth,img._spectrum,img._data,npos); + + CImg *const new_data = (++_width>_allocated_width)?new CImg[_allocated_width?(_allocated_width<<=1): + (_allocated_width=16)]:0; + if (!_data) { // Insert new element into empty list. + _data = new_data; + *_data = img; + } else { + if (new_data) { // Insert with re-allocation. + if (npos) std::memcpy((void*)new_data,(void*)_data,sizeof(CImg)*npos); + if (npos!=_width - 1) + std::memcpy((void*)(new_data + npos + 1),(void*)(_data + npos),sizeof(CImg)*(_width - 1 - npos)); + std::memset((void*)_data,0,sizeof(CImg)*(_width - 1)); + delete[] _data; + _data = new_data; + } else if (npos!=_width - 1) // Insert without re-allocation. + std::memmove((void*)(_data + npos + 1),(void*)(_data + npos),sizeof(CImg)*(_width - 1 - npos)); + _data[npos]._width = _data[npos]._height = _data[npos]._depth = _data[npos]._spectrum = 0; + _data[npos]._data = 0; + _data[npos] = img; + } + return *this; + } + + //! Insert a copy of the image \c img into the current image list, at position \c pos \specialization. + CImgList& insert(const CImg& img, const unsigned int pos=~0U, const bool is_shared=false) { + const unsigned int npos = pos==~0U?_width:pos; + if (npos>_width) + throw CImgArgumentException(_cimglist_instance + "insert(): Invalid insertion request of specified image (%u,%u,%u,%u,%p) " + "at position %u.", + cimglist_instance, + img._width,img._height,img._depth,img._spectrum,img._data,npos); + CImg *const new_data = (++_width>_allocated_width)?new CImg[_allocated_width?(_allocated_width<<=1): + (_allocated_width=16)]:0; + if (!_data) { // Insert new element into empty list. + _data = new_data; + if (is_shared && img) { + _data->_width = img._width; + _data->_height = img._height; + _data->_depth = img._depth; + _data->_spectrum = img._spectrum; + _data->_is_shared = true; + _data->_data = img._data; + } else *_data = img; + } + else { + if (new_data) { // Insert with re-allocation. + if (npos) std::memcpy((void*)new_data,(void*)_data,sizeof(CImg)*npos); + if (npos!=_width - 1) + std::memcpy((void*)(new_data + npos + 1),(void*)(_data + npos),sizeof(CImg)*(_width - 1 - npos)); + if (is_shared && img) { + new_data[npos]._width = img._width; + new_data[npos]._height = img._height; + new_data[npos]._depth = img._depth; + new_data[npos]._spectrum = img._spectrum; + new_data[npos]._is_shared = true; + new_data[npos]._data = img._data; + } else { + new_data[npos]._width = new_data[npos]._height = new_data[npos]._depth = new_data[npos]._spectrum = 0; + new_data[npos]._data = 0; + new_data[npos] = img; + } + std::memset((void*)_data,0,sizeof(CImg)*(_width - 1)); + delete[] _data; + _data = new_data; + } else { // Insert without re-allocation. + if (npos!=_width - 1) + std::memmove((void*)(_data + npos + 1),(void*)(_data + npos),sizeof(CImg)*(_width - 1 - npos)); + if (is_shared && img) { + _data[npos]._width = img._width; + _data[npos]._height = img._height; + _data[npos]._depth = img._depth; + _data[npos]._spectrum = img._spectrum; + _data[npos]._is_shared = true; + _data[npos]._data = img._data; + } else { + _data[npos]._width = _data[npos]._height = _data[npos]._depth = _data[npos]._spectrum = 0; + _data[npos]._data = 0; + _data[npos] = img; + } + } + } + return *this; + } + + //! Insert a copy of the image \c img into the current image list, at position \c pos \newinstance. + template + CImgList get_insert(const CImg& img, const unsigned int pos=~0U, const bool is_shared=false) const { + return (+*this).insert(img,pos,is_shared); + } + + //! Insert n empty images img into the current image list, at position \p pos. + /** + \param n Number of empty images to insert. + \param pos Index of the insertion. + **/ + CImgList& insert(const unsigned int n, const unsigned int pos=~0U) { + CImg empty; + if (!n) return *this; + const unsigned int npos = pos==~0U?_width:pos; + for (unsigned int i = 0; i get_insert(const unsigned int n, const unsigned int pos=~0U) const { + return (+*this).insert(n,pos); + } + + //! Insert \c n copies of the image \c img into the current image list, at position \c pos. + /** + \param n Number of image copies to insert. + \param img Image to insert by copy. + \param pos Index of the insertion. + \param is_shared Tells if inserted images are shared copies of \c img or not. + **/ + template + CImgList& insert(const unsigned int n, const CImg& img, const unsigned int pos=~0U, + const bool is_shared=false) { + if (!n) return *this; + const unsigned int npos = pos==~0U?_width:pos; + insert(img,npos,is_shared); + for (unsigned int i = 1; i + CImgList get_insert(const unsigned int n, const CImg& img, const unsigned int pos=~0U, + const bool is_shared=false) const { + return (+*this).insert(n,img,pos,is_shared); + } + + //! Insert a copy of the image list \c list into the current image list, starting from position \c pos. + /** + \param list Image list to insert. + \param pos Index of the insertion. + \param is_shared Tells if inserted images are shared copies of images of \c list or not. + **/ + template + CImgList& insert(const CImgList& list, const unsigned int pos=~0U, const bool is_shared=false) { + const unsigned int npos = pos==~0U?_width:pos; + if ((void*)this!=(void*)&list) cimglist_for(list,l) insert(list[l],npos + l,is_shared); + else insert(CImgList(list),npos,is_shared); + return *this; + } + + //! Insert a copy of the image list \c list into the current image list, starting from position \c pos \newinstance. + template + CImgList get_insert(const CImgList& list, const unsigned int pos=~0U, const bool is_shared=false) const { + return (+*this).insert(list,pos,is_shared); + } + + //! Insert n copies of the list \c list at position \c pos of the current list. + /** + \param n Number of list copies to insert. + \param list Image list to insert. + \param pos Index of the insertion. + \param is_shared Tells if inserted images are shared copies of images of \c list or not. + **/ + template + CImgList& insert(const unsigned int n, const CImgList& list, const unsigned int pos=~0U, + const bool is_shared=false) { + if (!n) return *this; + const unsigned int npos = pos==~0U?_width:pos; + for (unsigned int i = 0; i + CImgList get_insert(const unsigned int n, const CImgList& list, const unsigned int pos=~0U, + const bool is_shared=false) const { + return (+*this).insert(n,list,pos,is_shared); + } + + //! Remove all images between from indexes. + /** + \param pos1 Starting index of the removal. + \param pos2 Ending index of the removal. + **/ + CImgList& remove(const unsigned int pos1, const unsigned int pos2) { + const unsigned int + npos1 = pos1=_width) + throw CImgArgumentException(_cimglist_instance + "remove(): Invalid remove request at positions %u->%u.", + cimglist_instance, + npos1,tpos2); + else { + if (tpos2>=_width) + throw CImgArgumentException(_cimglist_instance + "remove(): Invalid remove request at positions %u->%u.", + cimglist_instance, + npos1,tpos2); + + for (unsigned int k = npos1; k<=npos2; ++k) _data[k].assign(); + const unsigned int nb = 1 + npos2 - npos1; + if (!(_width-=nb)) return assign(); + if (_width>(_allocated_width>>2) || _allocated_width<=16) { // Removing items without reallocation. + if (npos1!=_width) + std::memmove((void*)(_data + npos1),(void*)(_data + npos2 + 1),sizeof(CImg)*(_width - npos1)); + std::memset((void*)(_data + _width),0,sizeof(CImg)*nb); + } else { // Removing items with reallocation. + _allocated_width>>=2; + while (_allocated_width>16 && _width<(_allocated_width>>1)) _allocated_width>>=1; + CImg *const new_data = new CImg[_allocated_width]; + if (npos1) std::memcpy((void*)new_data,(void*)_data,sizeof(CImg)*npos1); + if (npos1!=_width) + std::memcpy((void*)(new_data + npos1),(void*)(_data + npos2 + 1),sizeof(CImg)*(_width - npos1)); + if (_width!=_allocated_width) + std::memset((void*)(new_data + _width),0,sizeof(CImg)*(_allocated_width - _width)); + std::memset((void*)_data,0,sizeof(CImg)*(_width + nb)); + delete[] _data; + _data = new_data; + } + } + return *this; + } + + //! Remove all images between from indexes \newinstance. + CImgList get_remove(const unsigned int pos1, const unsigned int pos2) const { + return (+*this).remove(pos1,pos2); + } + + //! Remove image at index \c pos from the image list. + /** + \param pos Index of the image to remove. + **/ + CImgList& remove(const unsigned int pos) { + return remove(pos,pos); + } + + //! Remove image at index \c pos from the image list \newinstance. + CImgList get_remove(const unsigned int pos) const { + return (+*this).remove(pos); + } + + //! Remove last image. + /** + **/ + CImgList& remove() { + return remove(_width - 1); + } + + //! Remove last image \newinstance. + CImgList get_remove() const { + return (+*this).remove(); + } + + //! Reverse list order. + CImgList& reverse() { + for (unsigned int l = 0; l<_width/2; ++l) (*this)[l].swap((*this)[_width - 1 - l]); + return *this; + } + + //! Reverse list order \newinstance. + CImgList get_reverse() const { + return (+*this).reverse(); + } + + //! Return a sublist. + /** + \param pos0 Starting index of the sublist. + \param pos1 Ending index of the sublist. + **/ + CImgList& images(const unsigned int pos0, const unsigned int pos1) { + return get_images(pos0,pos1).move_to(*this); + } + + //! Return a sublist \newinstance. + CImgList get_images(const unsigned int pos0, const unsigned int pos1) const { + if (pos0>pos1 || pos1>=_width) + throw CImgArgumentException(_cimglist_instance + "images(): Specified sub-list indices (%u->%u) are out of bounds.", + cimglist_instance, + pos0,pos1); + CImgList res(pos1 - pos0 + 1); + cimglist_for(res,l) res[l].assign(_data[pos0 + l]); + return res; + } + + //! Return a shared sublist. + /** + \param pos0 Starting index of the sublist. + \param pos1 Ending index of the sublist. + **/ + CImgList get_shared_images(const unsigned int pos0, const unsigned int pos1) { + if (pos0>pos1 || pos1>=_width) + throw CImgArgumentException(_cimglist_instance + "get_shared_images(): Specified sub-list indices (%u->%u) are out of bounds.", + cimglist_instance, + pos0,pos1); + CImgList res(pos1 - pos0 + 1); + cimglist_for(res,l) res[l].assign(_data[pos0 + l],_data[pos0 + l]?true:false); + return res; + } + + //! Return a shared sublist \newinstance. + const CImgList get_shared_images(const unsigned int pos0, const unsigned int pos1) const { + if (pos0>pos1 || pos1>=_width) + throw CImgArgumentException(_cimglist_instance + "get_shared_images(): Specified sub-list indices (%u->%u) are out of bounds.", + cimglist_instance, + pos0,pos1); + CImgList res(pos1 - pos0 + 1); + cimglist_for(res,l) res[l].assign(_data[pos0 + l],_data[pos0 + l]?true:false); + return res; + } + + //! Return a single image which is the appending of all images of the current CImgList instance. + /** + \param axis Appending axis. Can be { 'x' | 'y' | 'z' | 'c' }. + \param align Appending alignment. + **/ + CImg get_append(const char axis, const float align=0) const { + if (is_empty()) return CImg(); + if (_width==1) return +((*this)[0]); + unsigned int dx = 0, dy = 0, dz = 0, dc = 0, pos = 0; + CImg res; + switch (cimg::lowercase(axis)) { + case 'x' : { // Along the X-axis. + cimglist_for(*this,l) { + const CImg& img = (*this)[l]; + if (img) { + dx+=img._width; + dy = std::max(dy,img._height); + dz = std::max(dz,img._depth); + dc = std::max(dc,img._spectrum); + } + } + res.assign(dx,dy,dz,dc,(T)0); + if (res) cimglist_for(*this,l) { + const CImg& img = (*this)[l]; + if (img) res.draw_image(pos, + (int)(align*(dy - img._height)), + (int)(align*(dz - img._depth)), + (int)(align*(dc - img._spectrum)), + img); + pos+=img._width; + } + } break; + case 'y' : { // Along the Y-axis. + cimglist_for(*this,l) { + const CImg& img = (*this)[l]; + if (img) { + dx = std::max(dx,img._width); + dy+=img._height; + dz = std::max(dz,img._depth); + dc = std::max(dc,img._spectrum); + } + } + res.assign(dx,dy,dz,dc,(T)0); + if (res) cimglist_for(*this,l) { + const CImg& img = (*this)[l]; + if (img) res.draw_image((int)(align*(dx - img._width)), + pos, + (int)(align*(dz - img._depth)), + (int)(align*(dc - img._spectrum)), + img); + pos+=img._height; + } + } break; + case 'z' : { // Along the Z-axis. + cimglist_for(*this,l) { + const CImg& img = (*this)[l]; + if (img) { + dx = std::max(dx,img._width); + dy = std::max(dy,img._height); + dz+=img._depth; + dc = std::max(dc,img._spectrum); + } + } + res.assign(dx,dy,dz,dc,(T)0); + if (res) cimglist_for(*this,l) { + const CImg& img = (*this)[l]; + if (img) res.draw_image((int)(align*(dx - img._width)), + (int)(align*(dy - img._height)), + pos, + (int)(align*(dc - img._spectrum)), + img); + pos+=img._depth; + } + } break; + default : { // Along the C-axis. + cimglist_for(*this,l) { + const CImg& img = (*this)[l]; + if (img) { + dx = std::max(dx,img._width); + dy = std::max(dy,img._height); + dz = std::max(dz,img._depth); + dc+=img._spectrum; + } + } + res.assign(dx,dy,dz,dc,(T)0); + if (res) cimglist_for(*this,l) { + const CImg& img = (*this)[l]; + if (img) res.draw_image((int)(align*(dx - img._width)), + (int)(align*(dy - img._height)), + (int)(align*(dz - img._depth)), + pos, + img); + pos+=img._spectrum; + } + } + } + return res; + } + + //! Return a list where each image has been split along the specified axis. + /** + \param axis Axis to split images along. + \param nb Number of spliting parts for each image. + **/ + CImgList& split(const char axis, const int nb=-1) { + return get_split(axis,nb).move_to(*this); + } + + //! Return a list where each image has been split along the specified axis \newinstance. + CImgList get_split(const char axis, const int nb=-1) const { + CImgList res; + cimglist_for(*this,l) _data[l].get_split(axis,nb).move_to(res,~0U); + return res; + } + + //! Insert image at the end of the list. + /** + \param img Image to insert. + **/ + template + CImgList& push_back(const CImg& img) { + return insert(img); + } + + //! Insert image at the front of the list. + /** + \param img Image to insert. + **/ + template + CImgList& push_front(const CImg& img) { + return insert(img,0); + } + + //! Insert list at the end of the current list. + /** + \param list List to insert. + **/ + template + CImgList& push_back(const CImgList& list) { + return insert(list); + } + + //! Insert list at the front of the current list. + /** + \param list List to insert. + **/ + template + CImgList& push_front(const CImgList& list) { + return insert(list,0); + } + + //! Remove last image. + /** + **/ + CImgList& pop_back() { + return remove(_width - 1); + } + + //! Remove first image. + /** + **/ + CImgList& pop_front() { + return remove(0); + } + + //! Remove image pointed by iterator. + /** + \param iter Iterator pointing to the image to remove. + **/ + CImgList& erase(const iterator iter) { + return remove(iter - _data); + } + + //@} + //---------------------------------- + // + //! \name Data Input + //@{ + //---------------------------------- + + //! Display a simple interactive interface to select images or sublists. + /** + \param disp Window instance to display selection and user interface. + \param feature_type Can be \c false to select a single image, or \c true to select a sublist. + \param axis Axis along whom images are appended for visualization. + \param align Alignment setting when images have not all the same size. + \param exit_on_anykey Exit function when any key is pressed. + \return A one-column vector containing the selected image indexes. + **/ + CImg get_select(CImgDisplay &disp, const bool feature_type=true, + const char axis='x', const float align=0, + const bool exit_on_anykey=false) const { + return _select(disp,0,feature_type,axis,align,exit_on_anykey,0,false,false,false); + } + + //! Display a simple interactive interface to select images or sublists. + /** + \param title Title of a new window used to display selection and user interface. + \param feature_type Can be \c false to select a single image, or \c true to select a sublist. + \param axis Axis along whom images are appended for visualization. + \param align Alignment setting when images have not all the same size. + \param exit_on_anykey Exit function when any key is pressed. + \return A one-column vector containing the selected image indexes. + **/ + CImg get_select(const char *const title, const bool feature_type=true, + const char axis='x', const float align=0, + const bool exit_on_anykey=false) const { + CImgDisplay disp; + return _select(disp,title,feature_type,axis,align,exit_on_anykey,0,false,false,false); + } + + CImg _select(CImgDisplay &disp, const char *const title, const bool feature_type, + const char axis, const float align, const bool exit_on_anykey, + const unsigned int orig, const bool resize_disp, + const bool exit_on_rightbutton, const bool exit_on_wheel) const { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "select(): Empty instance.", + cimglist_instance); + + // Create image correspondence table and get list dimensions for visualization. + CImgList _indices; + unsigned int max_width = 0, max_height = 0, sum_width = 0, sum_height = 0; + cimglist_for(*this,l) { + const CImg& img = _data[l]; + const unsigned int + w = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,false), + h = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,true); + if (w>max_width) max_width = w; + if (h>max_height) max_height = h; + sum_width+=w; sum_height+=h; + if (axis=='x') CImg(w,1,1,1,(unsigned int)l).move_to(_indices); + else CImg(h,1,1,1,(unsigned int)l).move_to(_indices); + } + const CImg indices0 = _indices>'x'; + + // Create display window. + if (!disp) { + if (axis=='x') disp.assign(cimg_fitscreen(sum_width,max_height,1),title?title:0,1); + else disp.assign(cimg_fitscreen(max_width,sum_height,1),title?title:0,1); + if (!title) disp.set_title("CImgList<%s> (%u)",pixel_type(),_width); + } else if (title) disp.set_title("%s",title); + if (resize_disp) { + if (axis=='x') disp.resize(cimg_fitscreen(sum_width,max_height,1),false); + else disp.resize(cimg_fitscreen(max_width,sum_height,1),false); + } + + const unsigned int old_normalization = disp.normalization(); + bool old_is_resized = disp.is_resized(); + disp._normalization = 0; + disp.show().set_key(0); + static const unsigned char foreground_color[] = { 255,255,255 }, background_color[] = { 0,0,0 }; + + // Enter event loop. + CImg visu0, visu; + CImg indices; + CImg positions(_width,4,1,1,-1); + int oindice0 = -1, oindice1 = -1, indice0 = -1, indice1 = -1; + bool is_clicked = false, is_selected = false, text_down = false, update_display = true; + unsigned int key = 0; + + while (!is_selected && !disp.is_closed() && !key) { + + // Create background image. + if (!visu0) { + visu0.assign(disp._width,disp._height,1,3,0); visu.assign(); + (indices0.get_resize(axis=='x'?visu0._width:visu0._height,1)).move_to(indices); + unsigned int ind = 0; + const CImg onexone(1,1,1,1,(T)0); + if (axis=='x') + cimg_pragma_openmp(parallel for cimg_openmp_if(_width>=4)) + cimglist_for(*this,ind) { + unsigned int x0 = 0; + while (x0 &src = _data[ind]?_data[ind]:onexone; + CImg res; + src.__get_select(disp,old_normalization,(src._width - 1)/2,(src._height - 1)/2,(src._depth - 1)/2). + move_to(res); + const unsigned int h = CImgDisplay::_fitscreen(res._width,res._height,1,128,-85,true); + res.resize(x1 - x0,std::max(32U,h*disp._height/max_height),1,res._spectrum==1?3:-100); + positions(ind,0) = positions(ind,2) = (int)x0; + positions(ind,1) = positions(ind,3) = (int)(align*(visu0.height() - res.height())); + positions(ind,2)+=res._width; + positions(ind,3)+=res._height - 1; + visu0.draw_image(positions(ind,0),positions(ind,1),res); + } + else + cimg_pragma_openmp(parallel for cimg_openmp_if(_width>=4)) + cimglist_for(*this,ind) { + unsigned int y0 = 0; + while (y0 &src = _data[ind]?_data[ind]:onexone; + CImg res; + src.__get_select(disp,old_normalization,(src._width - 1)/2,(src._height - 1)/2,(src._depth - 1)/2). + move_to(res); + const unsigned int w = CImgDisplay::_fitscreen(res._width,res._height,1,128,-85,false); + res.resize(std::max(32U,w*disp._width/max_width),y1 - y0,1,res._spectrum==1?3:-100); + positions(ind,0) = positions(ind,2) = (int)(align*(visu0.width() - res.width())); + positions(ind,1) = positions(ind,3) = (int)y0; + positions(ind,2)+=res._width - 1; + positions(ind,3)+=res._height; + visu0.draw_image(positions(ind,0),positions(ind,1),res); + } + if (axis=='x') --positions(ind,2); else --positions(ind,3); + update_display = true; + } + + if (!visu || oindice0!=indice0 || oindice1!=indice1) { + if (indice0>=0 && indice1>=0) { + visu.assign(visu0,false); + const int indm = std::min(indice0,indice1), indM = std::max(indice0,indice1); + for (int ind = indm; ind<=indM; ++ind) if (positions(ind,0)>=0) { + visu.draw_rectangle(positions(ind,0),positions(ind,1),positions(ind,2),positions(ind,3), + background_color,0.2f); + if ((axis=='x' && positions(ind,2) - positions(ind,0)>=8) || + (axis!='x' && positions(ind,3) - positions(ind,1)>=8)) + visu.draw_rectangle(positions(ind,0),positions(ind,1),positions(ind,2),positions(ind,3), + foreground_color,0.9f,0xAAAAAAAA); + } + const int yt = (int)text_down?visu.height() - 13:0; + if (is_clicked) visu.draw_text(0,yt," Images #%u - #%u, Size = %u", + foreground_color,background_color,0.7f,13, + orig + indm,orig + indM,indM - indm + 1); + else visu.draw_text(0,yt," Image #%u (%u,%u,%u,%u)",foreground_color,background_color,0.7f,13, + orig + indice0, + _data[indice0]._width, + _data[indice0]._height, + _data[indice0]._depth, + _data[indice0]._spectrum); + update_display = true; + } else visu.assign(); + } + if (!visu) { visu.assign(visu0,true); update_display = true; } + if (update_display) { visu.display(disp); update_display = false; } + disp.wait(); + + // Manage user events. + const int xm = disp.mouse_x(), ym = disp.mouse_y(); + int indice = -1; + + if (xm>=0) { + indice = (int)indices(axis=='x'?xm:ym); + if (disp.button()&1) { + if (!is_clicked) { is_clicked = true; oindice0 = indice0; indice0 = indice; } + oindice1 = indice1; indice1 = indice; + if (!feature_type) is_selected = true; + } else { + if (!is_clicked) { oindice0 = oindice1 = indice0; indice0 = indice1 = indice; } + else is_selected = true; + } + } else { + if (is_clicked) { + if (!(disp.button()&1)) { is_clicked = is_selected = false; indice0 = indice1 = -1; } + else indice1 = -1; + } else indice0 = indice1 = -1; + } + + if (disp.button()&4) { is_clicked = is_selected = false; indice0 = indice1 = -1; } + if (disp.button()&2 && exit_on_rightbutton) { is_selected = true; indice1 = indice0 = -1; } + if (disp.wheel() && exit_on_wheel) is_selected = true; + + CImg filename(32); + switch (key = disp.key()) { +#if cimg_OS!=2 + case cimg::keyCTRLRIGHT : +#endif + case 0 : case cimg::keyCTRLLEFT : key = 0; break; + case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false). + resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), + CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,true),false). + _is_resized = true; + disp.set_key(key,false); key = 0; visu0.assign(); + } break; + case cimg::keyC : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false). + resize(cimg_fitscreen(2*disp.width()/3,2*disp.height()/3,1),false)._is_resized = true; + disp.set_key(key,false); key = 0; visu0.assign(); + } break; + case cimg::keyR : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.set_fullscreen(false). + resize(cimg_fitscreen(axis=='x'?sum_width:max_width,axis=='x'?max_height:sum_height,1),false). + _is_resized = true; + disp.set_key(key,false); key = 0; visu0.assign(); + } break; + case cimg::keyF : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + disp.resize(disp.screen_width(),disp.screen_height(),false).toggle_fullscreen()._is_resized = true; + disp.set_key(key,false); key = 0; visu0.assign(); + } break; + case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + static unsigned int snap_number = 0; + std::FILE *file; + do { + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.bmp",snap_number++); + if ((file=std_fopen(filename,"r"))!=0) cimg::fclose(file); + } while (file); + if (visu0) { + (+visu0).draw_text(0,0," Saving snapshot... ", + foreground_color,background_color,0.7f,13).display(disp); + visu0.save(filename); + (+visu0).draw_text(0,0," Snapshot '%s' saved. ", + foreground_color,background_color,0.7f,13,filename._data).display(disp); + } + disp.set_key(key,false).wait(); key = 0; + } break; + case cimg::keyO : + if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + static unsigned int snap_number = 0; + std::FILE *file; + do { +#ifdef cimg_use_zlib + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimgz",snap_number++); +#else + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimg",snap_number++); +#endif + if ((file=std_fopen(filename,"r"))!=0) cimg::fclose(file); + } while (file); + (+visu0).draw_text(0,0," Saving instance... ", + foreground_color,background_color,0.7f,13).display(disp); + save(filename); + (+visu0).draw_text(0,0," Instance '%s' saved. ", + foreground_color,background_color,0.7f,13,filename._data).display(disp); + disp.set_key(key,false).wait(); key = 0; + } break; + } + if (disp.is_resized()) { disp.resize(false); visu0.assign(); } + if (ym>=0 && ym<13) { if (!text_down) { visu.assign(); text_down = true; }} + else if (ym>=visu.height() - 13) { if (text_down) { visu.assign(); text_down = false; }} + if (!exit_on_anykey && key && key!=cimg::keyESC && + (key!=cimg::keyW || (!disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT()))) { + key = 0; + } + } + CImg res(1,2,1,1,-1); + if (is_selected) { + if (feature_type) res.fill(std::min(indice0,indice1),std::max(indice0,indice1)); + else res.fill(indice0); + } + if (!(disp.button()&2)) disp.set_button(); + disp._normalization = old_normalization; + disp._is_resized = old_is_resized; + disp.set_key(key); + return res; + } + + //! Load a list from a file. + /** + \param filename Filename to read data from. + **/ + CImgList& load(const char *const filename) { + if (!filename) + throw CImgArgumentException(_cimglist_instance + "load(): Specified filename is (null).", + cimglist_instance); + + if (!cimg::strncasecmp(filename,"http://",7) || !cimg::strncasecmp(filename,"https://",8)) { + CImg filename_local(256); + load(cimg::load_network(filename,filename_local)); + std::remove(filename_local); + return *this; + } + + const bool is_stdin = *filename=='-' && (!filename[1] || filename[1]=='.'); + const char *const ext = cimg::split_filename(filename); + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + bool is_loaded = true; + try { +#ifdef cimglist_load_plugin + cimglist_load_plugin(filename); +#endif +#ifdef cimglist_load_plugin1 + cimglist_load_plugin1(filename); +#endif +#ifdef cimglist_load_plugin2 + cimglist_load_plugin2(filename); +#endif +#ifdef cimglist_load_plugin3 + cimglist_load_plugin3(filename); +#endif +#ifdef cimglist_load_plugin4 + cimglist_load_plugin4(filename); +#endif +#ifdef cimglist_load_plugin5 + cimglist_load_plugin5(filename); +#endif +#ifdef cimglist_load_plugin6 + cimglist_load_plugin6(filename); +#endif +#ifdef cimglist_load_plugin7 + cimglist_load_plugin7(filename); +#endif +#ifdef cimglist_load_plugin8 + cimglist_load_plugin8(filename); +#endif + if (!cimg::strcasecmp(ext,"tif") || + !cimg::strcasecmp(ext,"tiff")) load_tiff(filename); + else if (!cimg::strcasecmp(ext,"gif")) load_gif_external(filename); + else if (!cimg::strcasecmp(ext,"cimg") || + !cimg::strcasecmp(ext,"cimgz") || + !*ext) load_cimg(filename); + else if (!cimg::strcasecmp(ext,"rec") || + !cimg::strcasecmp(ext,"par")) load_parrec(filename); + else if (!cimg::strcasecmp(ext,"avi") || + !cimg::strcasecmp(ext,"mov") || + !cimg::strcasecmp(ext,"asf") || + !cimg::strcasecmp(ext,"divx") || + !cimg::strcasecmp(ext,"flv") || + !cimg::strcasecmp(ext,"mpg") || + !cimg::strcasecmp(ext,"m1v") || + !cimg::strcasecmp(ext,"m2v") || + !cimg::strcasecmp(ext,"m4v") || + !cimg::strcasecmp(ext,"mjp") || + !cimg::strcasecmp(ext,"mp4") || + !cimg::strcasecmp(ext,"mkv") || + !cimg::strcasecmp(ext,"mpe") || + !cimg::strcasecmp(ext,"movie") || + !cimg::strcasecmp(ext,"ogm") || + !cimg::strcasecmp(ext,"ogg") || + !cimg::strcasecmp(ext,"ogv") || + !cimg::strcasecmp(ext,"qt") || + !cimg::strcasecmp(ext,"rm") || + !cimg::strcasecmp(ext,"vob") || + !cimg::strcasecmp(ext,"wmv") || + !cimg::strcasecmp(ext,"xvid") || + !cimg::strcasecmp(ext,"mpeg")) load_video(filename); + else if (!cimg::strcasecmp(ext,"gz")) load_gzip_external(filename); + else is_loaded = false; + } catch (CImgIOException&) { is_loaded = false; } + + // If nothing loaded, try to guess file format from magic number in file. + if (!is_loaded && !is_stdin) { + std::FILE *const file = std_fopen(filename,"rb"); + if (!file) { + cimg::exception_mode(omode); + throw CImgIOException(_cimglist_instance + "load(): Failed to open file '%s'.", + cimglist_instance, + filename); + } + + const char *const f_type = cimg::ftype(file,filename); + std::fclose(file); + is_loaded = true; + try { + if (!cimg::strcasecmp(f_type,"gif")) load_gif_external(filename); + else if (!cimg::strcasecmp(f_type,"tif")) load_tiff(filename); + else is_loaded = false; + } catch (CImgIOException&) { is_loaded = false; } + } + + // If nothing loaded, try to load file as a single image. + if (!is_loaded) { + assign(1); + try { + _data->load(filename); + } catch (CImgIOException&) { + cimg::exception_mode(omode); + throw CImgIOException(_cimglist_instance + "load(): Failed to recognize format of file '%s'.", + cimglist_instance, + filename); + } + } + cimg::exception_mode(omode); + return *this; + } + + //! Load a list from a file \newinstance. + static CImgList get_load(const char *const filename) { + return CImgList().load(filename); + } + + //! Load a list from a .cimg file. + /** + \param filename Filename to read data from. + **/ + CImgList& load_cimg(const char *const filename) { + return _load_cimg(0,filename); + } + + //! Load a list from a .cimg file \newinstance. + static CImgList get_load_cimg(const char *const filename) { + return CImgList().load_cimg(filename); + } + + //! Load a list from a .cimg file. + /** + \param file File to read data from. + **/ + CImgList& load_cimg(std::FILE *const file) { + return _load_cimg(file,0); + } + + //! Load a list from a .cimg file \newinstance. + static CImgList get_load_cimg(std::FILE *const file) { + return CImgList().load_cimg(file); + } + + CImgList& _load_cimg(std::FILE *const file, const char *const filename) { +#ifdef cimg_use_zlib +#define _cimgz_load_cimg_case(Tss) { \ + Bytef *const cbuf = new Bytef[csiz]; \ + cimg::fread(cbuf,csiz,nfile); \ + raw.assign(W,H,D,C); \ + uLongf destlen = (ulongT)raw.size()*sizeof(Tss); \ + uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); \ + delete[] cbuf; \ + if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw.size()); \ + raw.move_to(img); \ +} +#else +#define _cimgz_load_cimg_case(Tss) \ + throw CImgIOException(_cimglist_instance \ + "load_cimg(): Unable to load compressed data from file '%s' unless zlib is enabled.", \ + cimglist_instance, \ + filename?filename:"(FILE*)"); +#endif + +#define _cimg_load_cimg_case(Ts,Tss) \ + if (!loaded && !cimg::strcasecmp(Ts,str_pixeltype)) { \ + for (unsigned int l = 0; l=0 && j<255) tmp[j++] = (char)i; tmp[j] = 0; \ + W = H = D = C = 0; csiz = 0; \ + if ((err = cimg_sscanf(tmp,"%u %u %u %u #%lu",&W,&H,&D,&C,&csiz))<4) \ + throw CImgIOException(_cimglist_instance \ + "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'.", \ + cimglist_instance, \ + W,H,D,C,l,filename?filename:("(FILE*)")); \ + if (W*H*D*C>0) { \ + CImg raw; \ + CImg &img = _data[l]; \ + if (err==5) _cimgz_load_cimg_case(Tss) \ + else { \ + img.assign(W,H,D,C); \ + T *ptrd = img._data; \ + for (ulongT to_read = img.size(); to_read; ) { \ + raw.assign((unsigned int)std::min(to_read,cimg_iobuffer)); \ + cimg::fread(raw._data,raw._width,nfile); \ + if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw.size()); \ + const Tss *ptrs = raw._data; \ + for (ulongT off = (ulongT)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); \ + to_read-=raw._width; \ + } \ + } \ + } \ + } \ + loaded = true; \ + } + + if (!filename && !file) + throw CImgArgumentException(_cimglist_instance + "load_cimg(): Specified filename is (null).", + cimglist_instance); + + const ulongT cimg_iobuffer = (ulongT)24*1024*1024; + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); + bool loaded = false, endian = cimg::endianness(); + CImg tmp(256), str_pixeltype(256), str_endian(256); + *tmp = *str_pixeltype = *str_endian = 0; + unsigned int j, N = 0, W, H, D, C; + unsigned long csiz; + int i, err; + do { + j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0 && j<255) tmp[j++] = (char)i; tmp[j] = 0; + } while (*tmp=='#' && i>=0); + err = cimg_sscanf(tmp,"%u%*c%255[A-Za-z64_]%*c%255[sA-Za-z_ ]", + &N,str_pixeltype._data,str_endian._data); + if (err<2) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimglist_instance + "load_cimg(): CImg header not found in file '%s'.", + cimglist_instance, + filename?filename:"(FILE*)"); + } + if (!cimg::strncasecmp("little",str_endian,6)) endian = false; + else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; + assign(N); + _cimg_load_cimg_case("bool",bool); + _cimg_load_cimg_case("unsigned_char",unsigned char); + _cimg_load_cimg_case("uchar",unsigned char); + _cimg_load_cimg_case("char",char); + _cimg_load_cimg_case("unsigned_short",unsigned short); + _cimg_load_cimg_case("ushort",unsigned short); + _cimg_load_cimg_case("short",short); + _cimg_load_cimg_case("unsigned_int",unsigned int); + _cimg_load_cimg_case("uint",unsigned int); + _cimg_load_cimg_case("int",int); + _cimg_load_cimg_case("unsigned_long",ulongT); + _cimg_load_cimg_case("ulong",ulongT); + _cimg_load_cimg_case("long",longT); + _cimg_load_cimg_case("unsigned_int64",uint64T); + _cimg_load_cimg_case("uint64",uint64T); + _cimg_load_cimg_case("int64",int64T); + _cimg_load_cimg_case("float",float); + _cimg_load_cimg_case("double",double); + + if (!loaded) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimglist_instance + "load_cimg(): Unsupported pixel type '%s' for file '%s'.", + cimglist_instance, + str_pixeltype._data,filename?filename:"(FILE*)"); + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Load a sublist list from a (non compressed) .cimg file. + /** + \param filename Filename to read data from. + \param n0 Starting index of images to read (~0U for max). + \param n1 Ending index of images to read (~0U for max). + \param x0 Starting X-coordinates of image regions to read. + \param y0 Starting Y-coordinates of image regions to read. + \param z0 Starting Z-coordinates of image regions to read. + \param c0 Starting C-coordinates of image regions to read. + \param x1 Ending X-coordinates of image regions to read (~0U for max). + \param y1 Ending Y-coordinates of image regions to read (~0U for max). + \param z1 Ending Z-coordinates of image regions to read (~0U for max). + \param c1 Ending C-coordinates of image regions to read (~0U for max). + **/ + CImgList& load_cimg(const char *const filename, + const unsigned int n0, const unsigned int n1, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0, + const unsigned int x1, const unsigned int y1, + const unsigned int z1, const unsigned int c1) { + return _load_cimg(0,filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); + } + + //! Load a sublist list from a (non compressed) .cimg file \newinstance. + static CImgList get_load_cimg(const char *const filename, + const unsigned int n0, const unsigned int n1, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0, + const unsigned int x1, const unsigned int y1, + const unsigned int z1, const unsigned int c1) { + return CImgList().load_cimg(filename,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); + } + + //! Load a sub-image list from a (non compressed) .cimg file \overloading. + CImgList& load_cimg(std::FILE *const file, + const unsigned int n0, const unsigned int n1, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0, + const unsigned int x1, const unsigned int y1, + const unsigned int z1, const unsigned int c1) { + return _load_cimg(file,0,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); + } + + //! Load a sub-image list from a (non compressed) .cimg file \newinstance. + static CImgList get_load_cimg(std::FILE *const file, + const unsigned int n0, const unsigned int n1, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0, + const unsigned int x1, const unsigned int y1, + const unsigned int z1, const unsigned int c1) { + return CImgList().load_cimg(file,n0,n1,x0,y0,z0,c0,x1,y1,z1,c1); + } + + CImgList& _load_cimg(std::FILE *const file, const char *const filename, + const unsigned int n0, const unsigned int n1, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0, + const unsigned int x1, const unsigned int y1, + const unsigned int z1, const unsigned int c1) { +#define _cimg_load_cimg_case2(Ts,Tss) \ + if (!loaded && !cimg::strcasecmp(Ts,str_pixeltype)) { \ + for (unsigned int l = 0; l<=nn1; ++l) { \ + j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; \ + W = H = D = C = 0; \ + if (cimg_sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) \ + throw CImgIOException(_cimglist_instance \ + "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", \ + cimglist_instance, \ + W,H,D,C,l,filename?filename:"(FILE*)"); \ + if (W*H*D*C>0) { \ + if (l=W || ny0>=H || nz0>=D || nc0>=C) cimg::fseek(nfile,W*H*D*C*sizeof(Tss),SEEK_CUR); \ + else { \ + const unsigned int \ + _nx1 = nx1==~0U?W - 1:nx1, \ + _ny1 = ny1==~0U?H - 1:ny1, \ + _nz1 = nz1==~0U?D - 1:nz1, \ + _nc1 = nc1==~0U?C - 1:nc1; \ + if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) \ + throw CImgArgumentException(_cimglist_instance \ + "load_cimg(): Invalid specified coordinates " \ + "[%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " \ + "because image [%u] in file '%s' has size (%u,%u,%u,%u).", \ + cimglist_instance, \ + n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,l,filename?filename:"(FILE*)",W,H,D,C); \ + CImg raw(1 + _nx1 - nx0); \ + CImg &img = _data[l - nn0]; \ + img.assign(1 + _nx1 - nx0,1 + _ny1 - ny0,1 + _nz1 - nz0,1 + _nc1 - nc0); \ + T *ptrd = img._data; \ + ulongT skipvb = nc0*W*H*D*sizeof(Tss); \ + if (skipvb) cimg::fseek(nfile,skipvb,SEEK_CUR); \ + for (unsigned int c = 1 + _nc1 - nc0; c; --c) { \ + const ulongT skipzb = nz0*W*H*sizeof(Tss); \ + if (skipzb) cimg::fseek(nfile,skipzb,SEEK_CUR); \ + for (unsigned int z = 1 + _nz1 - nz0; z; --z) { \ + const ulongT skipyb = ny0*W*sizeof(Tss); \ + if (skipyb) cimg::fseek(nfile,skipyb,SEEK_CUR); \ + for (unsigned int y = 1 + _ny1 - ny0; y; --y) { \ + const ulongT skipxb = nx0*sizeof(Tss); \ + if (skipxb) cimg::fseek(nfile,skipxb,SEEK_CUR); \ + cimg::fread(raw._data,raw._width,nfile); \ + if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); \ + const Tss *ptrs = raw._data; \ + for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); \ + const ulongT skipxe = (W - 1 - _nx1)*sizeof(Tss); \ + if (skipxe) cimg::fseek(nfile,skipxe,SEEK_CUR); \ + } \ + const ulongT skipye = (H - 1 - _ny1)*W*sizeof(Tss); \ + if (skipye) cimg::fseek(nfile,skipye,SEEK_CUR); \ + } \ + const ulongT skipze = (D - 1 - _nz1)*W*H*sizeof(Tss); \ + if (skipze) cimg::fseek(nfile,skipze,SEEK_CUR); \ + } \ + const ulongT skipve = (C - 1 - _nc1)*W*H*D*sizeof(Tss); \ + if (skipve) cimg::fseek(nfile,skipve,SEEK_CUR); \ + } \ + } \ + } \ + loaded = true; \ + } + + if (!filename && !file) + throw CImgArgumentException(_cimglist_instance + "load_cimg(): Specified filename is (null).", + cimglist_instance); + unsigned int + nn0 = std::min(n0,n1), nn1 = std::max(n0,n1), + nx0 = std::min(x0,x1), nx1 = std::max(x0,x1), + ny0 = std::min(y0,y1), ny1 = std::max(y0,y1), + nz0 = std::min(z0,z1), nz1 = std::max(z0,z1), + nc0 = std::min(c0,c1), nc1 = std::max(c0,c1); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); + bool loaded = false, endian = cimg::endianness(); + CImg tmp(256), str_pixeltype(256), str_endian(256); + *tmp = *str_pixeltype = *str_endian = 0; + unsigned int j, N, W, H, D, C; + int i, err; + j = 0; while ((i=std::fgetc(nfile))!='\n' && i!=EOF && j<256) tmp[j++] = (char)i; tmp[j] = 0; + err = cimg_sscanf(tmp,"%u%*c%255[A-Za-z64_]%*c%255[sA-Za-z_ ]", + &N,str_pixeltype._data,str_endian._data); + if (err<2) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimglist_instance + "load_cimg(): CImg header not found in file '%s'.", + cimglist_instance, + filename?filename:"(FILE*)"); + } + if (!cimg::strncasecmp("little",str_endian,6)) endian = false; + else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; + nn1 = n1==~0U?N - 1:n1; + if (nn1>=N) + throw CImgArgumentException(_cimglist_instance + "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " + "because file '%s' contains only %u images.", + cimglist_instance, + n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,filename?filename:"(FILE*)",N); + assign(1 + nn1 - n0); + _cimg_load_cimg_case2("bool",bool); + _cimg_load_cimg_case2("unsigned_char",unsigned char); + _cimg_load_cimg_case2("uchar",unsigned char); + _cimg_load_cimg_case2("char",char); + _cimg_load_cimg_case2("unsigned_short",unsigned short); + _cimg_load_cimg_case2("ushort",unsigned short); + _cimg_load_cimg_case2("short",short); + _cimg_load_cimg_case2("unsigned_int",unsigned int); + _cimg_load_cimg_case2("uint",unsigned int); + _cimg_load_cimg_case2("int",int); + _cimg_load_cimg_case2("unsigned_long",ulongT); + _cimg_load_cimg_case2("ulong",ulongT); + _cimg_load_cimg_case2("long",longT); + _cimg_load_cimg_case2("unsigned_int64",uint64T); + _cimg_load_cimg_case2("uint64",uint64T); + _cimg_load_cimg_case2("int64",int64T); + _cimg_load_cimg_case2("float",float); + _cimg_load_cimg_case2("double",double); + if (!loaded) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimglist_instance + "load_cimg(): Unsupported pixel type '%s' for file '%s'.", + cimglist_instance, + str_pixeltype._data,filename?filename:"(FILE*)"); + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Load a list from a PAR/REC (Philips) file. + /** + \param filename Filename to read data from. + **/ + CImgList& load_parrec(const char *const filename) { + if (!filename) + throw CImgArgumentException(_cimglist_instance + "load_parrec(): Specified filename is (null).", + cimglist_instance); + + CImg body(1024), filenamepar(1024), filenamerec(1024); + *body = *filenamepar = *filenamerec = 0; + const char *const ext = cimg::split_filename(filename,body); + if (!std::strcmp(ext,"par")) { + std::strncpy(filenamepar,filename,filenamepar._width - 1); + cimg_snprintf(filenamerec,filenamerec._width,"%s.rec",body._data); + } + if (!std::strcmp(ext,"PAR")) { + std::strncpy(filenamepar,filename,filenamepar._width - 1); + cimg_snprintf(filenamerec,filenamerec._width,"%s.REC",body._data); + } + if (!std::strcmp(ext,"rec")) { + std::strncpy(filenamerec,filename,filenamerec._width - 1); + cimg_snprintf(filenamepar,filenamepar._width,"%s.par",body._data); + } + if (!std::strcmp(ext,"REC")) { + std::strncpy(filenamerec,filename,filenamerec._width - 1); + cimg_snprintf(filenamepar,filenamepar._width,"%s.PAR",body._data); + } + std::FILE *file = cimg::fopen(filenamepar,"r"); + + // Parse header file + CImgList st_slices; + CImgList st_global; + CImg line(256); *line = 0; + int err; + do { err = std::fscanf(file,"%255[^\n]%*c",line._data); } while (err!=EOF && (*line=='#' || *line=='.')); + do { + unsigned int sn,size_x,size_y,pixsize; + float rs,ri,ss; + err = std::fscanf(file,"%u%*u%*u%*u%*u%*u%*u%u%*u%u%u%g%g%g%*[^\n]",&sn,&pixsize,&size_x,&size_y,&ri,&rs,&ss); + if (err==7) { + CImg::vector((float)sn,(float)pixsize,(float)size_x,(float)size_y,ri,rs,ss,0).move_to(st_slices); + unsigned int i; for (i = 0; i::vector(size_x,size_y,sn).move_to(st_global); + else { + CImg &vec = st_global[i]; + if (size_x>vec[0]) vec[0] = size_x; + if (size_y>vec[1]) vec[1] = size_y; + vec[2] = sn; + } + st_slices[st_slices._width - 1][7] = (float)i; + } + } while (err==7); + + // Read data + std::FILE *file2 = cimg::fopen(filenamerec,"rb"); + cimglist_for(st_global,l) { + const CImg& vec = st_global[l]; + CImg(vec[0],vec[1],vec[2]).move_to(*this); + } + + cimglist_for(st_slices,l) { + const CImg& vec = st_slices[l]; + const unsigned int + sn = (unsigned int)vec[0] - 1, + pixsize = (unsigned int)vec[1], + size_x = (unsigned int)vec[2], + size_y = (unsigned int)vec[3], + imn = (unsigned int)vec[7]; + const float ri = vec[4], rs = vec[5], ss = vec[6]; + switch (pixsize) { + case 8 : { + CImg buf(size_x,size_y); + cimg::fread(buf._data,size_x*size_y,file2); + if (cimg::endianness()) cimg::invert_endianness(buf._data,size_x*size_y); + CImg& img = (*this)[imn]; + cimg_forXY(img,x,y) img(x,y,sn) = (T)(( buf(x,y)*rs + ri )/(rs*ss)); + } break; + case 16 : { + CImg buf(size_x,size_y); + cimg::fread(buf._data,size_x*size_y,file2); + if (cimg::endianness()) cimg::invert_endianness(buf._data,size_x*size_y); + CImg& img = (*this)[imn]; + cimg_forXY(img,x,y) img(x,y,sn) = (T)(( buf(x,y)*rs + ri )/(rs*ss)); + } break; + case 32 : { + CImg buf(size_x,size_y); + cimg::fread(buf._data,size_x*size_y,file2); + if (cimg::endianness()) cimg::invert_endianness(buf._data,size_x*size_y); + CImg& img = (*this)[imn]; + cimg_forXY(img,x,y) img(x,y,sn) = (T)(( buf(x,y)*rs + ri )/(rs*ss)); + } break; + default : + cimg::fclose(file); + cimg::fclose(file2); + throw CImgIOException(_cimglist_instance + "load_parrec(): Unsupported %d-bits pixel type for file '%s'.", + cimglist_instance, + pixsize,filename); + } + } + cimg::fclose(file); + cimg::fclose(file2); + if (!_width) + throw CImgIOException(_cimglist_instance + "load_parrec(): Failed to recognize valid PAR-REC data in file '%s'.", + cimglist_instance, + filename); + return *this; + } + + //! Load a list from a PAR/REC (Philips) file \newinstance. + static CImgList get_load_parrec(const char *const filename) { + return CImgList().load_parrec(filename); + } + + //! Load a list from a YUV image sequence file. + /** + \param filename Filename to read data from. + \param size_x Width of the images. + \param size_y Height of the images. + \param chroma_subsampling Type of chroma subsampling. Can be { 420 | 422 | 444 }. + \param first_frame Index of first image frame to read. + \param last_frame Index of last image frame to read. + \param step_frame Step applied between each frame. + \param yuv2rgb Apply YUV to RGB transformation during reading. + **/ + CImgList& load_yuv(const char *const filename, + const unsigned int size_x, const unsigned int size_y, + const unsigned int chroma_subsampling=444, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, const bool yuv2rgb=true) { + return _load_yuv(0,filename,size_x,size_y,chroma_subsampling, + first_frame,last_frame,step_frame,yuv2rgb); + } + + //! Load a list from a YUV image sequence file \newinstance. + static CImgList get_load_yuv(const char *const filename, + const unsigned int size_x, const unsigned int size_y=1, + const unsigned int chroma_subsampling=444, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, const bool yuv2rgb=true) { + return CImgList().load_yuv(filename,size_x,size_y,chroma_subsampling, + first_frame,last_frame,step_frame,yuv2rgb); + } + + //! Load a list from an image sequence YUV file \overloading. + CImgList& load_yuv(std::FILE *const file, + const unsigned int size_x, const unsigned int size_y, + const unsigned int chroma_subsampling=444, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, const bool yuv2rgb=true) { + return _load_yuv(file,0,size_x,size_y,chroma_subsampling, + first_frame,last_frame,step_frame,yuv2rgb); + } + + //! Load a list from an image sequence YUV file \newinstance. + static CImgList get_load_yuv(std::FILE *const file, + const unsigned int size_x, const unsigned int size_y=1, + const unsigned int chroma_subsampling=444, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, const bool yuv2rgb=true) { + return CImgList().load_yuv(file,size_x,size_y,chroma_subsampling, + first_frame,last_frame,step_frame,yuv2rgb); + } + + CImgList& _load_yuv(std::FILE *const file, const char *const filename, + const unsigned int size_x, const unsigned int size_y, + const unsigned int chroma_subsampling, + const unsigned int first_frame, const unsigned int last_frame, + const unsigned int step_frame, const bool yuv2rgb) { + if (!filename && !file) + throw CImgArgumentException(_cimglist_instance + "load_yuv(): Specified filename is (null).", + cimglist_instance); + if (chroma_subsampling!=420 && chroma_subsampling!=422 && chroma_subsampling!=444) + throw CImgArgumentException(_cimglist_instance + "load_yuv(): Specified chroma subsampling '%u' is invalid, for file '%s'.", + cimglist_instance, + chroma_subsampling,filename?filename:"(FILE*)"); + const unsigned int + cfx = chroma_subsampling==420 || chroma_subsampling==422?2:1, + cfy = chroma_subsampling==420?2:1, + nfirst_frame = first_frame YUV(size_x,size_y,1,3), UV(size_x/cfx,size_y/cfy,1,2); + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); + bool stop_flag = false; + int err; + if (nfirst_frame) { + err = cimg::fseek(nfile,(uint64T)nfirst_frame*(YUV._width*YUV._height + 2*UV._width*UV._height),SEEK_CUR); + if (err) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimglist_instance + "load_yuv(): File '%s' doesn't contain frame number %u.", + cimglist_instance, + filename?filename:"(FILE*)",nfirst_frame); + } + } + unsigned int frame; + for (frame = nfirst_frame; !stop_flag && frame<=nlast_frame; frame+=nstep_frame) { + YUV.get_shared_channel(0).fill(0); + // *TRY* to read the luminance part, do not replace by cimg::fread! + err = (int)std::fread((void*)(YUV._data),1,(size_t)YUV._width*YUV._height,nfile); + if (err!=(int)(YUV._width*YUV._height)) { + stop_flag = true; + if (err>0) + cimg::warn(_cimglist_instance + "load_yuv(): File '%s' contains incomplete data or given image dimensions " + "(%u,%u) are incorrect.", + cimglist_instance, + filename?filename:"(FILE*)",size_x,size_y); + } else { + UV.fill(0); + // *TRY* to read the luminance part, do not replace by cimg::fread! + err = (int)std::fread((void*)(UV._data),1,(size_t)UV.size(),nfile); + if (err!=(int)(UV.size())) { + stop_flag = true; + if (err>0) + cimg::warn(_cimglist_instance + "load_yuv(): File '%s' contains incomplete data or given image dimensions " + "(%u,%u) are incorrect.", + cimglist_instance, + filename?filename:"(FILE*)",size_x,size_y); + } else { + const ucharT *ptrs1 = UV._data, *ptrs2 = UV.data(0,0,0,1); + ucharT *ptrd1 = YUV.data(0,0,0,1), *ptrd2 = YUV.data(0,0,0,2); + const unsigned int wd = YUV._width; + switch (chroma_subsampling) { + case 420 : + cimg_forY(UV,y) { + cimg_forX(UV,x) { + const ucharT U = *(ptrs1++), V = *(ptrs2++); + ptrd1[wd] = U; *(ptrd1)++ = U; + ptrd1[wd] = U; *(ptrd1)++ = U; + ptrd2[wd] = V; *(ptrd2)++ = V; + ptrd2[wd] = V; *(ptrd2)++ = V; + } + ptrd1+=wd; ptrd2+=wd; + } + break; + case 422 : + cimg_forXY(UV,x,y) { + const ucharT U = *(ptrs1++), V = *(ptrs2++); + *(ptrd1++) = U; *(ptrd1++) = U; + *(ptrd2++) = V; *(ptrd2++) = V; + } + break; + default : + YUV.draw_image(0,0,0,1,UV); + } + if (yuv2rgb) YUV.YCbCrtoRGB(); + insert(YUV); + if (nstep_frame>1) cimg::fseek(nfile,(uint64T)(nstep_frame - 1)*(size_x*size_y + size_x*size_y/2),SEEK_CUR); + } + } + } + if (is_empty()) + throw CImgIOException(_cimglist_instance + "load_yuv() : Missing data in file '%s'.", + cimglist_instance, + filename?filename:"(FILE*)"); + if (stop_flag && nlast_frame!=~0U && frame!=nlast_frame) + cimg::warn(_cimglist_instance + "load_yuv(): Frame %d not reached since only %u frames were found in file '%s'.", + cimglist_instance, + nlast_frame,frame - 1,filename?filename:"(FILE*)"); + + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Load an image from a video file, using OpenCV library. + /** + \param filename Filename, as a C-string. + \param first_frame Index of the first frame to read. + \param last_frame Index of the last frame to read. + \param step_frame Step value for frame reading. + \note If step_frame==0, the current video stream is forced to be released (without any frames read). + **/ + CImgList& load_video(const char *const filename, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1) { +#ifndef cimg_use_opencv + if (first_frame || last_frame!=~0U || step_frame>1) + throw CImgArgumentException(_cimglist_instance + "load_video() : File '%s', arguments 'first_frame', 'last_frame' " + "and 'step_frame' can be only set when using OpenCV " + "(-Dcimg_use_opencv must be enabled).", + cimglist_instance,filename); + return load_ffmpeg_external(filename); +#else + static CvCapture *captures[32] = { 0 }; + static CImgList filenames(32); + static CImg positions(32,1,1,1,0); + static int last_used_index = -1; + + // Detect if a video capture already exists for the specified filename. + cimg::mutex(9); + int index = -1; + if (filename) { + if (last_used_index>=0 && !std::strcmp(filename,filenames[last_used_index])) { + index = last_used_index; + } else cimglist_for(filenames,l) if (filenames[l] && !std::strcmp(filename,filenames[l])) { + index = l; break; + } + } else index = last_used_index; + cimg::mutex(9,0); + + // Release stream if needed. + if (!step_frame || (index>=0 && positions[index]>first_frame)) { + if (index>=0) { + cimg::mutex(9); + cvReleaseCapture(&captures[index]); + captures[index] = 0; filenames[index].assign(); positions[index] = 0; + if (last_used_index==index) last_used_index = -1; + index = -1; + cimg::mutex(9,0); + } else + if (filename) + cimg::warn(_cimglist_instance + "load_video() : File '%s', no opened video stream associated with filename found.", + cimglist_instance,filename); + else + cimg::warn(_cimglist_instance + "load_video() : No opened video stream found.", + cimglist_instance,filename); + if (!step_frame) return *this; + } + + // Find empty slot for capturing video stream. + if (index<0) { + if (!filename) + throw CImgArgumentException(_cimglist_instance + "load_video(): No already open video reader found. You must specify a " + "non-(null) filename argument for the first call.", + cimglist_instance); + else { cimg::mutex(9); cimglist_for(filenames,l) if (!filenames[l]) { index = l; break; } cimg::mutex(9,0); } + if (index<0) + throw CImgIOException(_cimglist_instance + "load_video(): File '%s', no video reader slots available. " + "You have to release some of your previously opened videos.", + cimglist_instance,filename); + cimg::mutex(9); + captures[index] = cvCaptureFromFile(filename); + CImg::string(filename).move_to(filenames[index]); + positions[index] = 0; + cimg::mutex(9,0); + if (!captures[index]) { + filenames[index].assign(); + std::fclose(cimg::fopen(filename,"rb")); // Check file availability. + throw CImgIOException(_cimglist_instance + "load_video(): File '%s', unable to detect format of video file.", + cimglist_instance,filename); + } + } + + cimg::mutex(9); + const unsigned int nb_frames = (unsigned int)std::max(0.,cvGetCaptureProperty(captures[index], + CV_CAP_PROP_FRAME_COUNT)); + cimg::mutex(9,0); + assign(); + + // Skip frames if necessary. + bool go_on = true; + unsigned int &pos = positions[index]; + while (pos frame(src->width,src->height,1,3); + const int step = (int)(src->widthStep - 3*src->width); + const unsigned char* ptrs = (unsigned char*)src->imageData; + T *ptr_r = frame.data(0,0,0,0), *ptr_g = frame.data(0,0,0,1), *ptr_b = frame.data(0,0,0,2); + if (step>0) cimg_forY(frame,y) { + cimg_forX(frame,x) { *(ptr_b++) = (T)*(ptrs++); *(ptr_g++) = (T)*(ptrs++); *(ptr_r++) = (T)*(ptrs++); } + ptrs+=step; + } else for (ulongT siz = (ulongT)src->width*src->height; siz; --siz) { + *(ptr_b++) = (T)*(ptrs++); *(ptr_g++) = (T)*(ptrs++); *(ptr_r++) = (T)*(ptrs++); + } + frame.move_to(*this); + ++pos; + + bool skip_failed = false; + for (unsigned int i = 1; i=nb_frames)) { // Close video stream when necessary. + cimg::mutex(9); + cvReleaseCapture(&captures[index]); + captures[index] = 0; + filenames[index].assign(); + positions[index] = 0; + index = -1; + cimg::mutex(9,0); + } + + cimg::mutex(9); + last_used_index = index; + cimg::mutex(9,0); + + if (is_empty()) + throw CImgIOException(_cimglist_instance + "load_video(): File '%s', unable to locate frame %u.", + cimglist_instance,filename,first_frame); + return *this; +#endif + } + + //! Load an image from a video file, using OpenCV library \newinstance. + static CImgList get_load_video(const char *const filename, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1) { + return CImgList().load_video(filename,first_frame,last_frame,step_frame); + } + + //! Load an image from a video file using the external tool 'ffmpeg'. + /** + \param filename Filename to read data from. + **/ + CImgList& load_ffmpeg_external(const char *const filename) { + if (!filename) + throw CImgArgumentException(_cimglist_instance + "load_ffmpeg_external(): Specified filename is (null).", + cimglist_instance); + std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. + CImg command(1024), filename_tmp(256), filename_tmp2(256); + std::FILE *file = 0; + do { + cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s_000001.ppm",filename_tmp._data); + if ((file=std_fopen(filename_tmp2,"rb"))!=0) cimg::fclose(file); + } while (file); + cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s_%%6d.ppm",filename_tmp._data); + cimg_snprintf(command,command._width,"%s -i \"%s\" \"%s\"", + cimg::ffmpeg_path(), + CImg::string(filename)._system_strescape().data(), + CImg::string(filename_tmp2)._system_strescape().data()); + cimg::system(command,0); + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + assign(); + unsigned int i = 1; + for (bool stop_flag = false; !stop_flag; ++i) { + cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s_%.6u.ppm",filename_tmp._data,i); + CImg img; + try { img.load_pnm(filename_tmp2); } + catch (CImgException&) { stop_flag = true; } + if (img) { img.move_to(*this); std::remove(filename_tmp2); } + } + cimg::exception_mode(omode); + if (is_empty()) + throw CImgIOException(_cimglist_instance + "load_ffmpeg_external(): Failed to open file '%s' with external command 'ffmpeg'.", + cimglist_instance, + filename); + return *this; + } + + //! Load an image from a video file using the external tool 'ffmpeg' \newinstance. + static CImgList get_load_ffmpeg_external(const char *const filename) { + return CImgList().load_ffmpeg_external(filename); + } + + //! Load gif file, using ImageMagick or GraphicsMagick's external tools. + /** + \param filename Filename to read data from. + **/ + CImgList& load_gif_external(const char *const filename) { + if (!filename) + throw CImgArgumentException(_cimglist_instance + "load_gif_external(): Specified filename is (null).", + cimglist_instance); + std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. + if (!_load_gif_external(filename,false)) + if (!_load_gif_external(filename,true)) + try { assign(CImg().load_other(filename)); } catch (CImgException&) { assign(); } + if (is_empty()) + throw CImgIOException(_cimglist_instance + "load_gif_external(): Failed to open file '%s'.", + cimglist_instance,filename); + return *this; + } + + CImgList& _load_gif_external(const char *const filename, const bool use_graphicsmagick=false) { + CImg command(1024), filename_tmp(256), filename_tmp2(256); + std::FILE *file = 0; + do { + cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + if (use_graphicsmagick) cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s.png.0",filename_tmp._data); + else cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s-0.png",filename_tmp._data); + if ((file=std_fopen(filename_tmp2,"rb"))!=0) cimg::fclose(file); + } while (file); + if (use_graphicsmagick) cimg_snprintf(command,command._width,"%s convert \"%s\" \"%s.png\"", + cimg::graphicsmagick_path(), + CImg::string(filename)._system_strescape().data(), + CImg::string(filename_tmp)._system_strescape().data()); + else cimg_snprintf(command,command._width,"%s \"%s\" \"%s.png\"", + cimg::imagemagick_path(), + CImg::string(filename)._system_strescape().data(), + CImg::string(filename_tmp)._system_strescape().data()); + cimg::system(command,0); + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + assign(); + + // Try to read a single frame gif. + cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s.png",filename_tmp._data); + CImg img; + try { img.load_png(filename_tmp2); } + catch (CImgException&) { } + if (img) { img.move_to(*this); std::remove(filename_tmp2); } + else { // Try to read animated gif. + unsigned int i = 0; + for (bool stop_flag = false; !stop_flag; ++i) { + if (use_graphicsmagick) cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s.png.%u",filename_tmp._data,i); + else cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s-%u.png",filename_tmp._data,i); + CImg img; + try { img.load_png(filename_tmp2); } + catch (CImgException&) { stop_flag = true; } + if (img) { img.move_to(*this); std::remove(filename_tmp2); } + } + } + cimg::exception_mode(omode); + return *this; + } + + //! Load gif file, using ImageMagick or GraphicsMagick's external tools \newinstance. + static CImgList get_load_gif_external(const char *const filename) { + return CImgList().load_gif_external(filename); + } + + //! Load a gzipped list, using external tool 'gunzip'. + /** + \param filename Filename to read data from. + **/ + CImgList& load_gzip_external(const char *const filename) { + if (!filename) + throw CImgIOException(_cimglist_instance + "load_gzip_external(): Specified filename is (null).", + cimglist_instance); + std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. + CImg command(1024), filename_tmp(256), body(256); + const char + *ext = cimg::split_filename(filename,body), + *ext2 = cimg::split_filename(body,0); + std::FILE *file = 0; + do { + if (!cimg::strcasecmp(ext,"gz")) { + if (*ext2) cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext2); + else cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + } else { + if (*ext) cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext); + else cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + } + if ((file=std_fopen(filename_tmp,"rb"))!=0) cimg::fclose(file); + } while (file); + cimg_snprintf(command,command._width,"%s -c \"%s\" > \"%s\"", + cimg::gunzip_path(), + CImg::string(filename)._system_strescape().data(), + CImg::string(filename_tmp)._system_strescape().data()); + cimg::system(command); + if (!(file = std_fopen(filename_tmp,"rb"))) { + cimg::fclose(cimg::fopen(filename,"r")); + throw CImgIOException(_cimglist_instance + "load_gzip_external(): Failed to open file '%s'.", + cimglist_instance, + filename); + + } else cimg::fclose(file); + load(filename_tmp); + std::remove(filename_tmp); + return *this; + } + + //! Load a gzipped list, using external tool 'gunzip' \newinstance. + static CImgList get_load_gzip_external(const char *const filename) { + return CImgList().load_gzip_external(filename); + } + + //! Load a 3d object from a .OFF file. + /** + \param filename Filename to read data from. + \param[out] primitives At return, contains the list of 3d object primitives. + \param[out] colors At return, contains the list of 3d object colors. + \return List of 3d object vertices. + **/ + template + CImgList& load_off(const char *const filename, + CImgList& primitives, CImgList& colors) { + return get_load_off(filename,primitives,colors).move_to(*this); + } + + //! Load a 3d object from a .OFF file \newinstance. + template + static CImgList get_load_off(const char *const filename, + CImgList& primitives, CImgList& colors) { + return CImg().load_off(filename,primitives,colors)<'x'; + } + + //! Load images from a TIFF file. + /** + \param filename Filename to read data from. + \param first_frame Index of first image frame to read. + \param last_frame Index of last image frame to read. + \param step_frame Step applied between each frame. + \param[out] voxel_size Voxel size, as stored in the filename. + \param[out] description Description, as stored in the filename. + **/ + CImgList& load_tiff(const char *const filename, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, + float *const voxel_size=0, + CImg *const description=0) { + const unsigned int + nfirst_frame = first_frame::get_load_tiff(filename)); +#else +#if cimg_verbosity<3 + TIFFSetWarningHandler(0); + TIFFSetErrorHandler(0); +#endif + TIFF *tif = TIFFOpen(filename,"r"); + if (tif) { + unsigned int nb_images = 0; + do ++nb_images; while (TIFFReadDirectory(tif)); + if (nfirst_frame>=nb_images || (nlast_frame!=~0U && nlast_frame>=nb_images)) + cimg::warn(_cimglist_instance + "load_tiff(): Invalid specified frame range is [%u,%u] (step %u) since " + "file '%s' contains %u image(s).", + cimglist_instance, + nfirst_frame,nlast_frame,nstep_frame,filename,nb_images); + + if (nfirst_frame>=nb_images) return assign(); + if (nlast_frame>=nb_images) nlast_frame = nb_images - 1; + assign(1 + (nlast_frame - nfirst_frame)/nstep_frame); + TIFFSetDirectory(tif,0); + cimglist_for(*this,l) _data[l]._load_tiff(tif,nfirst_frame + l*nstep_frame,voxel_size,description); + TIFFClose(tif); + } else throw CImgIOException(_cimglist_instance + "load_tiff(): Failed to open file '%s'.", + cimglist_instance, + filename); + return *this; +#endif + } + + //! Load a multi-page TIFF file \newinstance. + static CImgList get_load_tiff(const char *const filename, + const unsigned int first_frame=0, const unsigned int last_frame=~0U, + const unsigned int step_frame=1, + float *const voxel_size=0, + CImg *const description=0) { + return CImgList().load_tiff(filename,first_frame,last_frame,step_frame,voxel_size,description); + } + + //@} + //---------------------------------- + // + //! \name Data Output + //@{ + //---------------------------------- + + //! Print information about the list on the standard output. + /** + \param title Label set to the information displayed. + \param display_stats Tells if image statistics must be computed and displayed. + **/ + const CImgList& print(const char *const title=0, const bool display_stats=true) const { + unsigned int msiz = 0; + cimglist_for(*this,l) msiz+=_data[l].size(); + msiz*=sizeof(T); + const unsigned int mdisp = msiz<8*1024?0U:msiz<8*1024*1024?1U:2U; + CImg _title(64); + if (!title) cimg_snprintf(_title,_title._width,"CImgList<%s>",pixel_type()); + std::fprintf(cimg::output(),"%s%s%s%s: %sthis%s = %p, %ssize%s = %u/%u [%u %s], %sdata%s = (CImg<%s>*)%p", + cimg::t_magenta,cimg::t_bold,title?title:_title._data,cimg::t_normal, + cimg::t_bold,cimg::t_normal,(void*)this, + cimg::t_bold,cimg::t_normal,_width,_allocated_width, + mdisp==0?msiz:(mdisp==1?(msiz>>10):(msiz>>20)), + mdisp==0?"b":(mdisp==1?"Kio":"Mio"), + cimg::t_bold,cimg::t_normal,pixel_type(),(void*)begin()); + if (_data) std::fprintf(cimg::output(),"..%p.\n",(void*)((char*)end() - 1)); + else std::fprintf(cimg::output(),".\n"); + + char tmp[16] = { 0 }; + cimglist_for(*this,ll) { + cimg_snprintf(tmp,sizeof(tmp),"[%d]",ll); + std::fprintf(cimg::output()," "); + _data[ll].print(tmp,display_stats); + if (ll==3 && width()>8) { ll = width() - 5; std::fprintf(cimg::output()," ...\n"); } + } + std::fflush(cimg::output()); + return *this; + } + + //! Display the current CImgList instance in an existing CImgDisplay window (by reference). + /** + \param disp Reference to an existing CImgDisplay instance, where the current image list will be displayed. + \param axis Appending axis. Can be { 'x' | 'y' | 'z' | 'c' }. + \param align Appending alignmenet. + \note This function displays the list images of the current CImgList instance into an existing + CImgDisplay window. + Images of the list are appended in a single temporarly image for visualization purposes. + The function returns immediately. + **/ + const CImgList& display(CImgDisplay &disp, const char axis='x', const float align=0) const { + disp.display(*this,axis,align); + return *this; + } + + //! Display the current CImgList instance in a new display window. + /** + \param disp Display window. + \param display_info Tells if image information are displayed on the standard output. + \param axis Alignment axis for images viewing. + \param align Apending alignment. + \param[in,out] XYZ Contains the XYZ coordinates at start / exit of the function. + \param exit_on_anykey Exit function when any key is pressed. + \note This function opens a new window with a specific title and displays the list images of the + current CImgList instance into it. + Images of the list are appended in a single temporarly image for visualization purposes. + The function returns when a key is pressed or the display window is closed by the user. + **/ + const CImgList& display(CImgDisplay &disp, const bool display_info, + const char axis='x', const float align=0, + unsigned int *const XYZ=0, const bool exit_on_anykey=false) const { + bool is_exit = false; + return _display(disp,0,0,display_info,axis,align,XYZ,exit_on_anykey,0,true,is_exit); + } + + //! Display the current CImgList instance in a new display window. + /** + \param title Title of the opening display window. + \param display_info Tells if list information must be written on standard output. + \param axis Appending axis. Can be { 'x' | 'y' | 'z' | 'c' }. + \param align Appending alignment. + \param[in,out] XYZ Contains the XYZ coordinates at start / exit of the function. + \param exit_on_anykey Exit function when any key is pressed. + **/ + const CImgList& display(const char *const title=0, const bool display_info=true, + const char axis='x', const float align=0, + unsigned int *const XYZ=0, const bool exit_on_anykey=false) const { + CImgDisplay disp; + bool is_exit = false; + return _display(disp,title,0,display_info,axis,align,XYZ,exit_on_anykey,0,true,is_exit); + } + + const CImgList& _display(CImgDisplay &disp, const char *const title, const CImgList *const titles, + const bool display_info, const char axis, const float align, unsigned int *const XYZ, + const bool exit_on_anykey, const unsigned int orig, const bool is_first_call, + bool &is_exit) const { + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "display(): Empty instance.", + cimglist_instance); + if (!disp) { + if (axis=='x') { + unsigned int sum_width = 0, max_height = 0; + cimglist_for(*this,l) { + const CImg &img = _data[l]; + const unsigned int + w = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,false), + h = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,true); + sum_width+=w; + if (h>max_height) max_height = h; + } + disp.assign(cimg_fitscreen(sum_width,max_height,1),title?title:titles?titles->__display()._data:0,1); + } else { + unsigned int max_width = 0, sum_height = 0; + cimglist_for(*this,l) { + const CImg &img = _data[l]; + const unsigned int + w = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,false), + h = CImgDisplay::_fitscreen(img._width,img._height,img._depth,128,-85,true); + if (w>max_width) max_width = w; + sum_height+=h; + } + disp.assign(cimg_fitscreen(max_width,sum_height,1),title?title:titles?titles->__display()._data:0,1); + } + if (!title && !titles) disp.set_title("CImgList<%s> (%u)",pixel_type(),_width); + } else if (title) disp.set_title("%s",title); + else if (titles) disp.set_title("%s",titles->__display()._data); + const CImg dtitle = CImg::string(disp.title()); + if (display_info) print(disp.title()); + disp.show().flush(); + + if (_width==1) { + const unsigned int dw = disp._width, dh = disp._height; + if (!is_first_call) + disp.resize(cimg_fitscreen(_data[0]._width,_data[0]._height,_data[0]._depth),false); + disp.set_title("%s (%ux%ux%ux%u)", + dtitle.data(),_data[0]._width,_data[0]._height,_data[0]._depth,_data[0]._spectrum); + _data[0]._display(disp,0,false,XYZ,exit_on_anykey,!is_first_call); + if (disp.key()) is_exit = true; + disp.resize(cimg_fitscreen(dw,dh,1),false).set_title("%s",dtitle.data()); + } else { + bool disp_resize = !is_first_call; + while (!disp.is_closed() && !is_exit) { + const CImg s = _select(disp,0,true,axis,align,exit_on_anykey,orig,disp_resize,!is_first_call,true); + disp_resize = true; + if (s[0]<0 && !disp.wheel()) { // No selections done. + if (disp.button()&2) { disp.flush(); break; } + is_exit = true; + } else if (disp.wheel()) { // Zoom in/out. + const int wheel = disp.wheel(); + disp.set_wheel(); + if (!is_first_call && wheel<0) break; + if (wheel>0 && _width>=4) { + const unsigned int + delta = std::max(1U,(unsigned int)cimg::round(0.3*_width)), + ind0 = (unsigned int)std::max(0,s[0] - (int)delta), + ind1 = (unsigned int)std::min(width() - 1,s[0] + (int)delta); + if ((ind0!=0 || ind1!=_width - 1) && ind1 - ind0>=3) { + const CImgList sublist = get_shared_images(ind0,ind1); + CImgList t_sublist; + if (titles) t_sublist = titles->get_shared_images(ind0,ind1); + sublist._display(disp,0,titles?&t_sublist:0,false,axis,align,XYZ,exit_on_anykey, + orig + ind0,false,is_exit); + } + } + } else if (s[0]!=0 || s[1]!=width() - 1) { + const CImgList sublist = get_shared_images(s[0],s[1]); + CImgList t_sublist; + if (titles) t_sublist = titles->get_shared_images(s[0],s[1]); + sublist._display(disp,0,titles?&t_sublist:0,false,axis,align,XYZ,exit_on_anykey, + orig + s[0],false,is_exit); + } + disp.set_title("%s",dtitle.data()); + } + } + return *this; + } + + // [internal] Return string to describe display title. + CImg __display() const { + CImg res, str; + cimglist_for(*this,l) { + CImg::string(_data[l]).move_to(str); + if (l!=width() - 1) { + str.resize(str._width + 1,1,1,1,0); + str[str._width - 2] = ','; + str[str._width - 1] = ' '; + } + res.append(str,'x'); + } + if (!res) return CImg(1,1,1,1,0).move_to(res); + cimg::strellipsize(res,128,false); + if (_width>1) { + const unsigned int l = (unsigned int)std::strlen(res); + if (res._width<=l + 16) res.resize(l + 16,1,1,1,0); + cimg_snprintf(res._data + l,16," (#%u)",_width); + } + return res; + } + + //! Save list into a file. + /** + \param filename Filename to write data to. + \param number When positive, represents an index added to the filename. Otherwise, no number is added. + \param digits Number of digits used for adding the number to the filename. + **/ + const CImgList& save(const char *const filename, const int number=-1, const unsigned int digits=6) const { + if (!filename) + throw CImgArgumentException(_cimglist_instance + "save(): Specified filename is (null).", + cimglist_instance); + // Do not test for empty instances, since .cimg format is able to manage empty instances. + const bool is_stdout = *filename=='-' && (!filename[1] || filename[1]=='.'); + const char *const ext = cimg::split_filename(filename); + CImg nfilename(1024); + const char *const fn = is_stdout?filename:number>=0?cimg::number_filename(filename,number,digits,nfilename): + filename; + +#ifdef cimglist_save_plugin + cimglist_save_plugin(fn); +#endif +#ifdef cimglist_save_plugin1 + cimglist_save_plugin1(fn); +#endif +#ifdef cimglist_save_plugin2 + cimglist_save_plugin2(fn); +#endif +#ifdef cimglist_save_plugin3 + cimglist_save_plugin3(fn); +#endif +#ifdef cimglist_save_plugin4 + cimglist_save_plugin4(fn); +#endif +#ifdef cimglist_save_plugin5 + cimglist_save_plugin5(fn); +#endif +#ifdef cimglist_save_plugin6 + cimglist_save_plugin6(fn); +#endif +#ifdef cimglist_save_plugin7 + cimglist_save_plugin7(fn); +#endif +#ifdef cimglist_save_plugin8 + cimglist_save_plugin8(fn); +#endif + if (!cimg::strcasecmp(ext,"cimgz")) return save_cimg(fn,true); + else if (!cimg::strcasecmp(ext,"cimg") || !*ext) return save_cimg(fn,false); + else if (!cimg::strcasecmp(ext,"yuv")) return save_yuv(fn,444,true); + else if (!cimg::strcasecmp(ext,"avi") || + !cimg::strcasecmp(ext,"mov") || + !cimg::strcasecmp(ext,"asf") || + !cimg::strcasecmp(ext,"divx") || + !cimg::strcasecmp(ext,"flv") || + !cimg::strcasecmp(ext,"mpg") || + !cimg::strcasecmp(ext,"m1v") || + !cimg::strcasecmp(ext,"m2v") || + !cimg::strcasecmp(ext,"m4v") || + !cimg::strcasecmp(ext,"mjp") || + !cimg::strcasecmp(ext,"mp4") || + !cimg::strcasecmp(ext,"mkv") || + !cimg::strcasecmp(ext,"mpe") || + !cimg::strcasecmp(ext,"movie") || + !cimg::strcasecmp(ext,"ogm") || + !cimg::strcasecmp(ext,"ogg") || + !cimg::strcasecmp(ext,"ogv") || + !cimg::strcasecmp(ext,"qt") || + !cimg::strcasecmp(ext,"rm") || + !cimg::strcasecmp(ext,"vob") || + !cimg::strcasecmp(ext,"wmv") || + !cimg::strcasecmp(ext,"xvid") || + !cimg::strcasecmp(ext,"mpeg")) return save_video(fn); +#ifdef cimg_use_tiff + else if (!cimg::strcasecmp(ext,"tif") || + !cimg::strcasecmp(ext,"tiff")) return save_tiff(fn); +#endif + else if (!cimg::strcasecmp(ext,"gz")) return save_gzip_external(fn); + else { + if (_width==1) _data[0].save(fn,-1); + else cimglist_for(*this,l) { _data[l].save(fn,is_stdout?-1:l); if (is_stdout) std::fputc(EOF,cimg::_stdout()); } + } + return *this; + } + + //! Tell if an image list can be saved as one single file. + /** + \param filename Filename, as a C-string. + \return \c true if the file format supports multiple images, \c false otherwise. + **/ + static bool is_saveable(const char *const filename) { + const char *const ext = cimg::split_filename(filename); + if (!cimg::strcasecmp(ext,"cimgz") || +#ifdef cimg_use_tiff + !cimg::strcasecmp(ext,"tif") || + !cimg::strcasecmp(ext,"tiff") || +#endif + !cimg::strcasecmp(ext,"yuv") || + !cimg::strcasecmp(ext,"avi") || + !cimg::strcasecmp(ext,"mov") || + !cimg::strcasecmp(ext,"asf") || + !cimg::strcasecmp(ext,"divx") || + !cimg::strcasecmp(ext,"flv") || + !cimg::strcasecmp(ext,"mpg") || + !cimg::strcasecmp(ext,"m1v") || + !cimg::strcasecmp(ext,"m2v") || + !cimg::strcasecmp(ext,"m4v") || + !cimg::strcasecmp(ext,"mjp") || + !cimg::strcasecmp(ext,"mp4") || + !cimg::strcasecmp(ext,"mkv") || + !cimg::strcasecmp(ext,"mpe") || + !cimg::strcasecmp(ext,"movie") || + !cimg::strcasecmp(ext,"ogm") || + !cimg::strcasecmp(ext,"ogg") || + !cimg::strcasecmp(ext,"ogv") || + !cimg::strcasecmp(ext,"qt") || + !cimg::strcasecmp(ext,"rm") || + !cimg::strcasecmp(ext,"vob") || + !cimg::strcasecmp(ext,"wmv") || + !cimg::strcasecmp(ext,"xvid") || + !cimg::strcasecmp(ext,"mpeg")) return true; + return false; + } + + //! Save image sequence as a GIF animated file. + /** + \param filename Filename to write data to. + \param fps Number of desired frames per second. + \param nb_loops Number of loops (\c 0 for infinite looping). + **/ + const CImgList& save_gif_external(const char *const filename, const float fps=25, + const unsigned int nb_loops=0) { + CImg command(1024), filename_tmp(256), filename_tmp2(256); + CImgList filenames; + std::FILE *file = 0; + +#ifdef cimg_use_png +#define _cimg_save_gif_ext "png" +#else +#define _cimg_save_gif_ext "ppm" +#endif + + do { + cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s_000001." _cimg_save_gif_ext,filename_tmp._data); + if ((file=std_fopen(filename_tmp2,"rb"))!=0) cimg::fclose(file); + } while (file); + cimglist_for(*this,l) { + cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s_%.6u." _cimg_save_gif_ext,filename_tmp._data,l + 1); + CImg::string(filename_tmp2).move_to(filenames); + if (_data[l]._depth>1 || _data[l]._spectrum!=3) _data[l].get_resize(-100,-100,1,3).save(filename_tmp2); + else _data[l].save(filename_tmp2); + } + cimg_snprintf(command,command._width,"%s -delay %u -loop %u", + cimg::imagemagick_path(),(unsigned int)std::max(0.0f,cimg::round(100/fps)),nb_loops); + CImg::string(command).move_to(filenames,0); + cimg_snprintf(command,command._width,"\"%s\"", + CImg::string(filename)._system_strescape().data()); + CImg::string(command).move_to(filenames); + CImg _command = filenames>'x'; + cimg_for(_command,p,char) if (!*p) *p = ' '; + _command.back() = 0; + + cimg::system(_command); + file = std_fopen(filename,"rb"); + if (!file) + throw CImgIOException(_cimglist_instance + "save_gif_external(): Failed to save file '%s' with external command 'magick/convert'.", + cimglist_instance, + filename); + else cimg::fclose(file); + cimglist_for_in(*this,1,filenames._width - 1,l) std::remove(filenames[l]); + return *this; + } + + //! Save list as a YUV image sequence file. + /** + \param filename Filename to write data to. + \param chroma_subsampling Type of chroma subsampling. Can be { 420 | 422 | 444 }. + \param is_rgb Tells if the RGB to YUV conversion must be done for saving. + **/ + const CImgList& save_yuv(const char *const filename=0, + const unsigned int chroma_subsampling=444, + const bool is_rgb=true) const { + return _save_yuv(0,filename,chroma_subsampling,is_rgb); + } + + //! Save image sequence into a YUV file. + /** + \param file File to write data to. + \param chroma_subsampling Type of chroma subsampling. Can be { 420 | 422 | 444 }. + \param is_rgb Tells if the RGB to YUV conversion must be done for saving. + **/ + const CImgList& save_yuv(std::FILE *const file, + const unsigned int chroma_subsampling=444, + const bool is_rgb=true) const { + return _save_yuv(file,0,chroma_subsampling,is_rgb); + } + + const CImgList& _save_yuv(std::FILE *const file, const char *const filename, + const unsigned int chroma_subsampling, + const bool is_rgb) const { + if (!file && !filename) + throw CImgArgumentException(_cimglist_instance + "save_yuv(): Specified filename is (null).", + cimglist_instance); + if (chroma_subsampling!=420 && chroma_subsampling!=422 && chroma_subsampling!=444) + throw CImgArgumentException(_cimglist_instance + "save_yuv(): Specified chroma subsampling %u is invalid, for file '%s'.", + cimglist_instance, + chroma_subsampling,filename?filename:"(FILE*)"); + if (is_empty()) { cimg::fempty(file,filename); return *this; } + const unsigned int + cfx = chroma_subsampling==420 || chroma_subsampling==422?2:1, + cfy = chroma_subsampling==420?2:1, + w0 = (*this)[0]._width, h0 = (*this)[0]._height, + width0 = w0 + (w0%cfx), height0 = h0 + (h0%cfy); + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + cimglist_for(*this,l) { + const CImg &frame = (*this)[l]; + cimg_forZ(frame,z) { + CImg YUV; + if (sizeof(T)==1 && !is_rgb && + frame._width==width0 && frame._height==height0 && frame._depth==1 && frame._spectrum==3) + YUV.assign((unsigned char*)frame._data,width0,height0,1,3,true); + else { + YUV = frame.get_slice(z); + if (YUV._width!=width0 || YUV._height!=height0) YUV.resize(width0,height0,1,-100,0); + if (YUV._spectrum!=3) YUV.resize(-100,-100,1,3,YUV._spectrum==1?1:0); + if (is_rgb) YUV.RGBtoYCbCr(); + } + if (chroma_subsampling==444) + cimg::fwrite(YUV._data,(size_t)YUV._width*YUV._height*3,nfile); + else { + cimg::fwrite(YUV._data,(size_t)YUV._width*YUV._height,nfile); + CImg UV = YUV.get_channels(1,2); + UV.resize(UV._width/cfx,UV._height/cfy,1,2,2); + cimg::fwrite(UV._data,(size_t)UV._width*UV._height*2,nfile); + } + } + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Save list into a .cimg file. + /** + \param filename Filename to write data to. + \param is_compressed Tells if data compression must be enabled. + **/ + const CImgList& save_cimg(const char *const filename, const bool is_compressed=false) const { + return _save_cimg(0,filename,is_compressed); + } + + const CImgList& _save_cimg(std::FILE *const file, const char *const filename, const bool is_compressed) const { + if (!file && !filename) + throw CImgArgumentException(_cimglist_instance + "save_cimg(): Specified filename is (null).", + cimglist_instance); +#ifndef cimg_use_zlib + if (is_compressed) + cimg::warn(_cimglist_instance + "save_cimg(): Unable to save compressed data in file '%s' unless zlib is enabled, " + "saving them uncompressed.", + cimglist_instance, + filename?filename:"(FILE*)"); +#endif + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + const char *const ptype = pixel_type(), *const etype = cimg::endianness()?"big":"little"; + if (std::strstr(ptype,"unsigned")==ptype) std::fprintf(nfile,"%u unsigned_%s %s_endian\n",_width,ptype + 9,etype); + else std::fprintf(nfile,"%u %s %s_endian\n",_width,ptype,etype); + cimglist_for(*this,l) { + const CImg& img = _data[l]; + std::fprintf(nfile,"%u %u %u %u",img._width,img._height,img._depth,img._spectrum); + if (img._data) { + CImg tmp; + if (cimg::endianness()) { tmp = img; cimg::invert_endianness(tmp._data,tmp.size()); } + const CImg& ref = cimg::endianness()?tmp:img; + bool failed_to_compress = true; + if (is_compressed) { +#ifdef cimg_use_zlib + const ulongT siz = sizeof(T)*ref.size(); + uLongf csiz = siz + siz/100 + 16; + Bytef *const cbuf = new Bytef[csiz]; + if (compress(cbuf,&csiz,(Bytef*)ref._data,siz)) + cimg::warn(_cimglist_instance + "save_cimg(): Failed to save compressed data for file '%s', saving them uncompressed.", + cimglist_instance, + filename?filename:"(FILE*)"); + else { + std::fprintf(nfile," #%lu\n",csiz); + cimg::fwrite(cbuf,csiz,nfile); + delete[] cbuf; + failed_to_compress = false; + } +#endif + } + if (failed_to_compress) { // Write in a non-compressed way. + std::fputc('\n',nfile); + cimg::fwrite(ref._data,ref.size(),nfile); + } + } else std::fputc('\n',nfile); + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Save list into a .cimg file. + /** + \param file File to write data to. + \param is_compressed Tells if data compression must be enabled. + **/ + const CImgList& save_cimg(std::FILE *file, const bool is_compressed=false) const { + return _save_cimg(file,0,is_compressed); + } + + const CImgList& _save_cimg(std::FILE *const file, const char *const filename, + const unsigned int n0, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0) const { +#define _cimg_save_cimg_case(Ts,Tss) \ + if (!saved && !cimg::strcasecmp(Ts,str_pixeltype)) { \ + for (unsigned int l = 0; l0) { \ + if (l=W || y0>=H || z0>=D || c0>=D) cimg::fseek(nfile,W*H*D*C*sizeof(Tss),SEEK_CUR); \ + else { \ + const CImg& img = (*this)[l - n0]; \ + const T *ptrs = img._data; \ + const unsigned int \ + x1 = x0 + img._width - 1, \ + y1 = y0 + img._height - 1, \ + z1 = z0 + img._depth - 1, \ + c1 = c0 + img._spectrum - 1, \ + nx1 = x1>=W?W - 1:x1, \ + ny1 = y1>=H?H - 1:y1, \ + nz1 = z1>=D?D - 1:z1, \ + nc1 = c1>=C?C - 1:c1; \ + CImg raw(1 + nx1 - x0); \ + const unsigned int skipvb = c0*W*H*D*sizeof(Tss); \ + if (skipvb) cimg::fseek(nfile,skipvb,SEEK_CUR); \ + for (unsigned int v = 1 + nc1 - c0; v; --v) { \ + const unsigned int skipzb = z0*W*H*sizeof(Tss); \ + if (skipzb) cimg::fseek(nfile,skipzb,SEEK_CUR); \ + for (unsigned int z = 1 + nz1 - z0; z; --z) { \ + const unsigned int skipyb = y0*W*sizeof(Tss); \ + if (skipyb) cimg::fseek(nfile,skipyb,SEEK_CUR); \ + for (unsigned int y = 1 + ny1 - y0; y; --y) { \ + const unsigned int skipxb = x0*sizeof(Tss); \ + if (skipxb) cimg::fseek(nfile,skipxb,SEEK_CUR); \ + raw.assign(ptrs, raw._width); \ + ptrs+=img._width; \ + if (endian) cimg::invert_endianness(raw._data,raw._width); \ + cimg::fwrite(raw._data,raw._width,nfile); \ + const unsigned int skipxe = (W - 1 - nx1)*sizeof(Tss); \ + if (skipxe) cimg::fseek(nfile,skipxe,SEEK_CUR); \ + } \ + const unsigned int skipye = (H - 1 - ny1)*W*sizeof(Tss); \ + if (skipye) cimg::fseek(nfile,skipye,SEEK_CUR); \ + } \ + const unsigned int skipze = (D - 1 - nz1)*W*H*sizeof(Tss); \ + if (skipze) cimg::fseek(nfile,skipze,SEEK_CUR); \ + } \ + const unsigned int skipve = (C - 1 - nc1)*W*H*D*sizeof(Tss); \ + if (skipve) cimg::fseek(nfile,skipve,SEEK_CUR); \ + } \ + } \ + } \ + saved = true; \ + } + + if (!file && !filename) + throw CImgArgumentException(_cimglist_instance + "save_cimg(): Specified filename is (null).", + cimglist_instance); + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "save_cimg(): Empty instance, for file '%s'.", + cimglist_instance, + filename?filename:"(FILE*)"); + + std::FILE *const nfile = file?file:cimg::fopen(filename,"rb+"); + bool saved = false, endian = cimg::endianness(); + CImg tmp(256), str_pixeltype(256), str_endian(256); + *tmp = *str_pixeltype = *str_endian = 0; + unsigned int j, N, W, H, D, C; + int i, err; + j = 0; while ((i=std::fgetc(nfile))!='\n' && i!=EOF && j<256) tmp[j++] = (char)i; tmp[j] = 0; + err = cimg_sscanf(tmp,"%u%*c%255[A-Za-z64_]%*c%255[sA-Za-z_ ]",&N,str_pixeltype._data,str_endian._data); + if (err<2) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimglist_instance + "save_cimg(): CImg header not found in file '%s'.", + cimglist_instance, + filename?filename:"(FILE*)"); + } + if (!cimg::strncasecmp("little",str_endian,6)) endian = false; + else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; + const unsigned int lmax = std::min(N,n0 + _width); + _cimg_save_cimg_case("bool",bool); + _cimg_save_cimg_case("unsigned_char",unsigned char); + _cimg_save_cimg_case("uchar",unsigned char); + _cimg_save_cimg_case("char",char); + _cimg_save_cimg_case("unsigned_short",unsigned short); + _cimg_save_cimg_case("ushort",unsigned short); + _cimg_save_cimg_case("short",short); + _cimg_save_cimg_case("unsigned_int",unsigned int); + _cimg_save_cimg_case("uint",unsigned int); + _cimg_save_cimg_case("int",int); + _cimg_save_cimg_case("unsigned_int64",uint64T); + _cimg_save_cimg_case("uint64",uint64T); + _cimg_save_cimg_case("int64",int64T); + _cimg_save_cimg_case("float",float); + _cimg_save_cimg_case("double",double); + if (!saved) { + if (!file) cimg::fclose(nfile); + throw CImgIOException(_cimglist_instance + "save_cimg(): Unsupported data type '%s' for file '%s'.", + cimglist_instance, + filename?filename:"(FILE*)",str_pixeltype._data); + } + if (!file) cimg::fclose(nfile); + return *this; + } + + //! Insert the image instance into into an existing .cimg file, at specified coordinates. + /** + \param filename Filename to write data to. + \param n0 Starting index of images to write. + \param x0 Starting X-coordinates of image regions to write. + \param y0 Starting Y-coordinates of image regions to write. + \param z0 Starting Z-coordinates of image regions to write. + \param c0 Starting C-coordinates of image regions to write. + **/ + const CImgList& save_cimg(const char *const filename, + const unsigned int n0, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0) const { + return _save_cimg(0,filename,n0,x0,y0,z0,c0); + } + + //! Insert the image instance into into an existing .cimg file, at specified coordinates. + /** + \param file File to write data to. + \param n0 Starting index of images to write. + \param x0 Starting X-coordinates of image regions to write. + \param y0 Starting Y-coordinates of image regions to write. + \param z0 Starting Z-coordinates of image regions to write. + \param c0 Starting C-coordinates of image regions to write. + **/ + const CImgList& save_cimg(std::FILE *const file, + const unsigned int n0, + const unsigned int x0, const unsigned int y0, + const unsigned int z0, const unsigned int c0) const { + return _save_cimg(file,0,n0,x0,y0,z0,c0); + } + + static void _save_empty_cimg(std::FILE *const file, const char *const filename, + const unsigned int nb, + const unsigned int dx, const unsigned int dy, + const unsigned int dz, const unsigned int dc) { + std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); + const ulongT siz = (ulongT)dx*dy*dz*dc*sizeof(T); + std::fprintf(nfile,"%u %s\n",nb,pixel_type()); + for (unsigned int i=nb; i; --i) { + std::fprintf(nfile,"%u %u %u %u\n",dx,dy,dz,dc); + for (ulongT off = siz; off; --off) std::fputc(0,nfile); + } + if (!file) cimg::fclose(nfile); + } + + //! Save empty (non-compressed) .cimg file with specified dimensions. + /** + \param filename Filename to write data to. + \param nb Number of images to write. + \param dx Width of images in the written file. + \param dy Height of images in the written file. + \param dz Depth of images in the written file. + \param dc Spectrum of images in the written file. + **/ + static void save_empty_cimg(const char *const filename, + const unsigned int nb, + const unsigned int dx, const unsigned int dy=1, + const unsigned int dz=1, const unsigned int dc=1) { + return _save_empty_cimg(0,filename,nb,dx,dy,dz,dc); + } + + //! Save empty .cimg file with specified dimensions. + /** + \param file File to write data to. + \param nb Number of images to write. + \param dx Width of images in the written file. + \param dy Height of images in the written file. + \param dz Depth of images in the written file. + \param dc Spectrum of images in the written file. + **/ + static void save_empty_cimg(std::FILE *const file, + const unsigned int nb, + const unsigned int dx, const unsigned int dy=1, + const unsigned int dz=1, const unsigned int dc=1) { + return _save_empty_cimg(file,0,nb,dx,dy,dz,dc); + } + + //! Save list as a TIFF file. + /** + \param filename Filename to write data to. + \param compression_type Compression mode used to write data. + \param voxel_size Voxel size, to be stored in the filename. + \param description Description, to be stored in the filename. + \param use_bigtiff Allow to save big tiff files (>4Gb). + **/ + const CImgList& save_tiff(const char *const filename, const unsigned int compression_type=0, + const float *const voxel_size=0, const char *const description=0, + const bool use_bigtiff=true) const { + if (!filename) + throw CImgArgumentException(_cimglist_instance + "save_tiff(): Specified filename is (null).", + cimglist_instance); + if (is_empty()) { cimg::fempty(0,filename); return *this; } + +#ifndef cimg_use_tiff + if (_width==1) _data[0].save_tiff(filename,compression_type,voxel_size,description,use_bigtiff); + else cimglist_for(*this,l) { + CImg nfilename(1024); + cimg::number_filename(filename,l,6,nfilename); + _data[l].save_tiff(nfilename,compression_type,voxel_size,description,use_bigtiff); + } +#else + ulongT siz = 0; + cimglist_for(*this,l) siz+=_data[l].size(); + const bool _use_bigtiff = use_bigtiff && sizeof(siz)>=8 && siz*sizeof(T)>=1UL<<31; // No bigtiff for small images. + TIFF *tif = TIFFOpen(filename,_use_bigtiff?"w8":"w4"); + if (tif) { + for (unsigned int dir = 0, l = 0; l<_width; ++l) { + const CImg& img = (*this)[l]; + cimg_forZ(img,z) img._save_tiff(tif,dir++,z,compression_type,voxel_size,description); + } + TIFFClose(tif); + } else + throw CImgIOException(_cimglist_instance + "save_tiff(): Failed to open stream for file '%s'.", + cimglist_instance, + filename); +#endif + return *this; + } + + //! Save list as a gzipped file, using external tool 'gzip'. + /** + \param filename Filename to write data to. + **/ + const CImgList& save_gzip_external(const char *const filename) const { + if (!filename) + throw CImgIOException(_cimglist_instance + "save_gzip_external(): Specified filename is (null).", + cimglist_instance); + CImg command(1024), filename_tmp(256), body(256); + const char + *ext = cimg::split_filename(filename,body), + *ext2 = cimg::split_filename(body,0); + std::FILE *file; + do { + if (!cimg::strcasecmp(ext,"gz")) { + if (*ext2) cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext2); + else cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.cimg", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + } else { + if (*ext) cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext); + else cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.cimg", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + } + if ((file=std_fopen(filename_tmp,"rb"))!=0) cimg::fclose(file); + } while (file); + + if (is_saveable(body)) { + save(filename_tmp); + cimg_snprintf(command,command._width,"%s -c \"%s\" > \"%s\"", + cimg::gzip_path(), + CImg::string(filename_tmp)._system_strescape().data(), + CImg::string(filename)._system_strescape().data()); + cimg::system(command); + file = std_fopen(filename,"rb"); + if (!file) + throw CImgIOException(_cimglist_instance + "save_gzip_external(): Failed to save file '%s' with external command 'gzip'.", + cimglist_instance, + filename); + else cimg::fclose(file); + std::remove(filename_tmp); + } else { + CImg nfilename(1024); + cimglist_for(*this,l) { + cimg::number_filename(body,l,6,nfilename); + if (*ext) cimg_sprintf(nfilename._data + std::strlen(nfilename),".%s",ext); + _data[l].save_gzip_external(nfilename); + } + } + return *this; + } + + //! Save image sequence, using the OpenCV library. + /** + \param filename Filename to write data to. + \param fps Number of frames per second. + \param codec Type of compression (See http://www.fourcc.org/codecs.php to see available codecs). + \param keep_open Tells if the video writer associated to the specified filename + must be kept open or not (to allow frames to be added in the same file afterwards). + **/ + const CImgList& save_video(const char *const filename, const unsigned int fps=25, + const char *codec=0, const bool keep_open=false) const { +#ifndef cimg_use_opencv + cimg::unused(codec,keep_open); + return save_ffmpeg_external(filename,fps); +#else + static CvVideoWriter *writers[32] = { 0 }; + static CImgList filenames(32); + static CImg sizes(32,2,1,1,0); + static int last_used_index = -1; + + // Detect if a video writer already exists for the specified filename. + cimg::mutex(9); + int index = -1; + if (filename) { + if (last_used_index>=0 && !std::strcmp(filename,filenames[last_used_index])) { + index = last_used_index; + } else cimglist_for(filenames,l) if (filenames[l] && !std::strcmp(filename,filenames[l])) { + index = l; break; + } + } else index = last_used_index; + cimg::mutex(9,0); + + // Find empty slot for capturing video stream. + if (index<0) { + if (!filename) + throw CImgArgumentException(_cimglist_instance + "save_video(): No already open video writer found. You must specify a " + "non-(null) filename argument for the first call.", + cimglist_instance); + else { cimg::mutex(9); cimglist_for(filenames,l) if (!filenames[l]) { index = l; break; } cimg::mutex(9,0); } + if (index<0) + throw CImgIOException(_cimglist_instance + "save_video(): File '%s', no video writer slots available. " + "You have to release some of your previously opened videos.", + cimglist_instance,filename); + if (is_empty()) + throw CImgInstanceException(_cimglist_instance + "save_video(): Instance list is empty.", + cimglist_instance); + const unsigned int W = _data?_data[0]._width:0, H = _data?_data[0]._height:0; + if (!W || !H) + throw CImgInstanceException(_cimglist_instance + "save_video(): Frame [0] is an empty image.", + cimglist_instance); + +#define _cimg_docase(x) ((x)>='a'&&(x)<='z'?(x) + 'A' - 'a':(x)) + + const char + *const _codec = codec && *codec?codec:cimg_OS==2?"mpeg":"mp4v", + codec0 = _cimg_docase(_codec[0]), + codec1 = _codec[0]?_cimg_docase(_codec[1]):0, + codec2 = _codec[1]?_cimg_docase(_codec[2]):0, + codec3 = _codec[2]?_cimg_docase(_codec[3]):0; + cimg::mutex(9); + writers[index] = cvCreateVideoWriter(filename,CV_FOURCC(codec0,codec1,codec2,codec3), + fps,cvSize(W,H)); + CImg::string(filename).move_to(filenames[index]); + sizes(index,0) = W; sizes(index,1) = H; + cimg::mutex(9,0); + if (!writers[index]) + throw CImgIOException(_cimglist_instance + "save_video(): File '%s', unable to initialize video writer with codec '%c%c%c%c'.", + cimglist_instance,filename, + codec0,codec1,codec2,codec3); + } + + if (!is_empty()) { + const unsigned int W = sizes(index,0), H = sizes(index,1); + cimg::mutex(9); + IplImage *ipl = cvCreateImage(cvSize(W,H),8,3); + cimglist_for(*this,l) { + CImg &src = _data[l]; + if (src.is_empty()) + cimg::warn(_cimglist_instance + "save_video(): Skip empty frame %d for file '%s'.", + cimglist_instance,l,filename); + if (src._depth>1 || src._spectrum>3) + cimg::warn(_cimglist_instance + "save_video(): Frame %u has incompatible dimension (%u,%u,%u,%u). " + "Some image data may be ignored when writing frame into video file '%s'.", + cimglist_instance,l,src._width,src._height,src._depth,src._spectrum,filename); + if (src._width==W && src._height==H && src._spectrum==3) { + const T *ptr_r = src.data(0,0,0,0), *ptr_g = src.data(0,0,0,1), *ptr_b = src.data(0,0,0,2); + char *ptrd = ipl->imageData; + cimg_forXY(src,x,y) { + *(ptrd++) = (char)*(ptr_b++); *(ptrd++) = (char)*(ptr_g++); *(ptrd++) = (char)*(ptr_r++); + } + } else { + CImg _src(src,false); + _src.channels(0,std::min(_src._spectrum - 1,2U)).resize(W,H); + _src.resize(W,H,1,3,_src._spectrum==1); + const unsigned char *ptr_r = _src.data(0,0,0,0), *ptr_g = _src.data(0,0,0,1), *ptr_b = _src.data(0,0,0,2); + char *ptrd = ipl->imageData; + cimg_forXY(_src,x,y) { + *(ptrd++) = (char)*(ptr_b++); *(ptrd++) = (char)*(ptr_g++); *(ptrd++) = (char)*(ptr_r++); + } + } + cvWriteFrame(writers[index],ipl); + } + cvReleaseImage(&ipl); + cimg::mutex(9,0); + } + + cimg::mutex(9); + if (!keep_open) { + cvReleaseVideoWriter(&writers[index]); + writers[index] = 0; + filenames[index].assign(); + sizes(index,0) = sizes(index,1) = 0; + last_used_index = -1; + } else last_used_index = index; + cimg::mutex(9,0); + + return *this; +#endif + } + + //! Save image sequence, using the external tool 'ffmpeg'. + /** + \param filename Filename to write data to. + \param fps Number of frames per second. + \param codec Type of compression. + \param bitrate Output bitrate + **/ + const CImgList& save_ffmpeg_external(const char *const filename, const unsigned int fps=25, + const char *const codec=0, const unsigned int bitrate=2048) const { + if (!filename) + throw CImgArgumentException(_cimglist_instance + "save_ffmpeg_external(): Specified filename is (null).", + cimglist_instance); + if (is_empty()) { cimg::fempty(0,filename); return *this; } + + const char + *const ext = cimg::split_filename(filename), + *const _codec = codec?codec:!cimg::strcasecmp(ext,"flv")?"flv":"mpeg2video"; + + CImg command(1024), filename_tmp(256), filename_tmp2(256); + CImgList filenames; + std::FILE *file = 0; + cimglist_for(*this,l) if (!_data[l].is_sameXYZ(_data[0])) + throw CImgInstanceException(_cimglist_instance + "save_ffmpeg_external(): Invalid instance dimensions for file '%s'.", + cimglist_instance, + filename); + do { + cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand()); + cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s_000001.ppm",filename_tmp._data); + if ((file=std_fopen(filename_tmp2,"rb"))!=0) cimg::fclose(file); + } while (file); + cimglist_for(*this,l) { + cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s_%.6u.ppm",filename_tmp._data,l + 1); + CImg::string(filename_tmp2).move_to(filenames); + if (_data[l]._depth>1 || _data[l]._spectrum!=3) _data[l].get_resize(-100,-100,1,3).save_pnm(filename_tmp2); + else _data[l].save_pnm(filename_tmp2); + } + cimg_snprintf(command,command._width,"%s -i \"%s_%%6d.ppm\" -vcodec %s -b %uk -r %u -y \"%s\"", + cimg::ffmpeg_path(), + CImg::string(filename_tmp)._system_strescape().data(), + _codec,bitrate,fps, + CImg::string(filename)._system_strescape().data()); + cimg::system(command); + file = std_fopen(filename,"rb"); + if (!file) + throw CImgIOException(_cimglist_instance + "save_ffmpeg_external(): Failed to save file '%s' with external command 'ffmpeg'.", + cimglist_instance, + filename); + else cimg::fclose(file); + cimglist_for(*this,l) std::remove(filenames[l]); + return *this; + } + + //! Serialize a CImgList instance into a raw CImg buffer. + /** + \param is_compressed tells if zlib compression must be used for serialization + (this requires 'cimg_use_zlib' been enabled). + **/ + CImg get_serialize(const bool is_compressed=false) const { +#ifndef cimg_use_zlib + if (is_compressed) + cimg::warn(_cimglist_instance + "get_serialize(): Unable to compress data unless zlib is enabled, " + "storing them uncompressed.", + cimglist_instance); +#endif + CImgList stream; + CImg tmpstr(128); + const char *const ptype = pixel_type(), *const etype = cimg::endianness()?"big":"little"; + if (std::strstr(ptype,"unsigned")==ptype) + cimg_snprintf(tmpstr,tmpstr._width,"%u unsigned_%s %s_endian\n",_width,ptype + 9,etype); + else + cimg_snprintf(tmpstr,tmpstr._width,"%u %s %s_endian\n",_width,ptype,etype); + CImg::string(tmpstr,false).move_to(stream); + cimglist_for(*this,l) { + const CImg& img = _data[l]; + cimg_snprintf(tmpstr,tmpstr._width,"%u %u %u %u",img._width,img._height,img._depth,img._spectrum); + CImg::string(tmpstr,false).move_to(stream); + if (img._data) { + CImg tmp; + if (cimg::endianness()) { tmp = img; cimg::invert_endianness(tmp._data,tmp.size()); } + const CImg& ref = cimg::endianness()?tmp:img; + bool failed_to_compress = true; + if (is_compressed) { +#ifdef cimg_use_zlib + const ulongT siz = sizeof(T)*ref.size(); + uLongf csiz = (ulongT)compressBound(siz); + Bytef *const cbuf = new Bytef[csiz]; + if (compress(cbuf,&csiz,(Bytef*)ref._data,siz)) + cimg::warn(_cimglist_instance + "get_serialize(): Failed to save compressed data, saving them uncompressed.", + cimglist_instance); + else { + cimg_snprintf(tmpstr,tmpstr._width," #%lu\n",csiz); + CImg::string(tmpstr,false).move_to(stream); + CImg(cbuf,csiz).move_to(stream); + delete[] cbuf; + failed_to_compress = false; + } +#endif + } + if (failed_to_compress) { // Write in a non-compressed way. + CImg::string("\n",false).move_to(stream); + stream.insert(1); + stream.back().assign((unsigned char*)ref._data,ref.size()*sizeof(T),1,1,1,true); + } + } else CImg::string("\n",false).move_to(stream); + } + cimglist_apply(stream,unroll)('y'); + return stream>'y'; + } + + //! Unserialize a CImg serialized buffer into a CImgList list. + template + static CImgList get_unserialize(const CImg& buffer) { +#ifdef cimg_use_zlib +#define _cimgz_unserialize_case(Tss) { \ + Bytef *cbuf = 0; \ + if (sizeof(t)!=1 || cimg::type::string()==cimg::type::string()) { \ + cbuf = new Bytef[csiz]; Bytef *_cbuf = cbuf; \ + for (ulongT i = 0; i::get_unserialize(): Unable to unserialize compressed data " \ + "unless zlib is enabled.", \ + pixel_type()); +#endif + +#define _cimg_unserialize_case(Ts,Tss) \ + if (!loaded && !cimg::strcasecmp(Ts,str_pixeltype)) { \ + for (unsigned int l = 0; l::unserialize(): Invalid specified size (%u,%u,%u,%u) for " \ + "image #%u in serialized buffer.", \ + pixel_type(),W,H,D,C,l); \ + if (W*H*D*C>0) { \ + CImg raw; \ + CImg &img = res._data[l]; \ + if (err==5) _cimgz_unserialize_case(Tss) \ + else if (sizeof(Tss)==sizeof(t) && cimg::type::is_float()==cimg::type::is_float()) { \ + raw.assign((Tss*)stream,W,H,D,C,true); \ + stream+=raw.size(); \ + } else { \ + raw.assign(W,H,D,C); \ + CImg _raw((unsigned char*)raw._data,W*sizeof(Tss),H,D,C,true); \ + cimg_for(_raw,p,unsigned char) *p = (unsigned char)*(stream++); \ + } \ + if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw.size()); \ + raw.move_to(img); \ + } \ + } \ + loaded = true; \ + } + + if (buffer.is_empty()) + throw CImgArgumentException("CImgList<%s>::get_unserialize(): Specified serialized buffer is (null).", + pixel_type()); + CImgList res; + const t *stream = buffer._data, *const estream = buffer._data + buffer.size(); + bool loaded = false, endian = cimg::endianness(), is_bytef = false; + CImg tmp(256), str_pixeltype(256), str_endian(256); + *tmp = *str_pixeltype = *str_endian = 0; + unsigned int j, N = 0, W, H, D, C; + uint64T csiz; + int i, err; + cimg::unused(is_bytef); + do { + j = 0; while ((i=(int)*stream)!='\n' && stream::get_unserialize(): CImg header not found in serialized buffer.", + pixel_type()); + if (!cimg::strncasecmp("little",str_endian,6)) endian = false; + else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; + res.assign(N); + _cimg_unserialize_case("bool",bool); + _cimg_unserialize_case("unsigned_char",unsigned char); + _cimg_unserialize_case("uchar",unsigned char); + _cimg_unserialize_case("char",char); + _cimg_unserialize_case("unsigned_short",unsigned short); + _cimg_unserialize_case("ushort",unsigned short); + _cimg_unserialize_case("short",short); + _cimg_unserialize_case("unsigned_int",unsigned int); + _cimg_unserialize_case("uint",unsigned int); + _cimg_unserialize_case("int",int); + _cimg_unserialize_case("unsigned_int64",uint64T); + _cimg_unserialize_case("uint64",uint64T); + _cimg_unserialize_case("int64",int64T); + _cimg_unserialize_case("float",float); + _cimg_unserialize_case("double",double); + if (!loaded) + throw CImgArgumentException("CImgList<%s>::get_unserialize(): Unsupported pixel type '%s' defined " + "in serialized buffer.", + pixel_type(),str_pixeltype._data); + return res; + } + + //@} + //---------------------------------- + // + //! \name Others + //@{ + //---------------------------------- + + //! Crop font along the X-axis. + /** + **/ + CImgList& crop_font() { + return get_crop_font().move_to(*this); + } + + //! Crop font along the X-axis \newinstance. + /** + **/ + CImgList get_crop_font() const { + CImgList res; + cimglist_for(*this,l) { + const CImg& letter = (*this)[l]; + int xmin = letter.width(), xmax = 0; + cimg_forXY(letter,x,y) if (letter(x,y)) { if (xxmax) xmax = x; } + if (xmin>xmax) CImg(letter._width,letter._height,1,letter._spectrum,0).move_to(res); + else letter.get_crop(xmin,0,xmax,letter._height - 1).move_to(res); + } + res[' '].resize(res['f']._width,-100,-100,-100,0); + if (' ' + 256& font(const unsigned int font_height, const bool is_variable_width=true) { + if (!font_height) return CImgList::const_empty(); + cimg::mutex(11); + + // Decompress nearest base font data if needed. + static const char *data_fonts[] = { cimg::data_font12x13, cimg::data_font20x23, cimg::data_font47x53, 0 }; + static const unsigned int data_widths[] = { 12,20,47,90 }, data_heights[] = { 13,23,53,103 }, + data_Ms[] = { 86,79,57,47 }; + const unsigned int data_ind = font_height<=13U?0U:font_height<=23U?1U:font_height<=53U?2U:3U; + static CImg base_fonts[4]; + CImg &base_font = base_fonts[data_ind]; + if (!base_font) { + const unsigned int w = data_widths[data_ind], h = data_heights[data_ind], M = data_Ms[data_ind]; + base_font.assign(256*w,h); + const char *data_font = data_fonts[data_ind]; + unsigned char *ptrd = base_font; + const unsigned char *const ptrde = base_font.end(); + + // Special case needed for 90x103 to avoid MS compiler limit with big strings. + CImg data90x103; + if (!data_font) { + ((CImg(cimg::_data_font90x103[0], + (unsigned int)std::strlen(cimg::_data_font90x103[0]),1,1,1,true), + CImg(cimg::_data_font90x103[1], + (unsigned int)std::strlen(cimg::_data_font90x103[1]) + 1,1,1,1,true))>'x'). + move_to(data90x103); + data_font = data90x103.data(); + } + + // Uncompress font data (decode RLE). + for (const char *ptrs = data_font; *ptrs; ++ptrs) { + const int c = (int)(*ptrs - M - 32), v = c>=0?255:0, n = c>=0?c:-c; + if (ptrd + n<=ptrde) { std::memset(ptrd,v,n); ptrd+=n; } + else { std::memset(ptrd,v,ptrde - ptrd); break; } + } + } + + // Find optimal font cache location to return. + static CImgList fonts[16]; + static bool is_variable_widths[16] = { 0 }; + unsigned int ind = ~0U; + for (int i = 0; i<16; ++i) + if (!fonts[i] || (is_variable_widths[i]==is_variable_width && font_height==fonts[i][0]._height)) { + ind = (unsigned int)i; break; // Found empty slot or cached font. + } + if (ind==~0U) { // No empty slots nor existing font in cache. + fonts->assign(); + std::memmove(fonts,fonts + 1,15*sizeof(CImgList)); + std::memmove(is_variable_widths,is_variable_widths + 1,15*sizeof(bool)); + std::memset((void*)(fonts + (ind=15)),0,sizeof(CImgList)); // Free a slot in cache for new font. + } + CImgList &font = fonts[ind]; + + // Render requested font. + if (!font) { + const unsigned int padding_x = font_height<33U?1U:font_height<53U?2U:font_height<103U?3U:4U; + is_variable_widths[ind] = is_variable_width; + font = base_font.get_split('x',256); + if (font_height!=font[0]._height) + cimglist_for(font,l) + font[l].resize(std::max(1U,font[l]._width*font_height/font[l]._height),font_height,-100,-100, + font[0]._height>font_height?2:5); + if (is_variable_width) font.crop_font(); + cimglist_for(font,l) font[l].resize(font[l]._width + padding_x,-100,1,1,0,0,0.5); + font.insert(256,0); + cimglist_for_in(font,0,255,l) font[l].assign(font[l + 256]._width,font[l + 256]._height,1,3,1); + } + cimg::mutex(11,0); + return font; + } + + //! Compute a 1d Fast Fourier Transform, along specified axis. + /** + \param axis Axis along which the Fourier transform is computed. + \param invert Tells if the direct (\c false) or inverse transform (\c true) is computed. + **/ + CImgList& FFT(const char axis, const bool invert=false) { + if (is_empty()) return *this; + if (_width==1) insert(1); + if (_width>2) + cimg::warn(_cimglist_instance + "FFT(): Instance has more than 2 images", + cimglist_instance); + + CImg::FFT(_data[0],_data[1],axis,invert); + return *this; + } + + //! Compute a 1-D Fast Fourier Transform, along specified axis \newinstance. + CImgList get_FFT(const char axis, const bool invert=false) const { + return CImgList(*this,false).FFT(axis,invert); + } + + //! Compute a n-d Fast Fourier Transform. + /** + \param invert Tells if the direct (\c false) or inverse transform (\c true) is computed. + **/ + CImgList& FFT(const bool invert=false) { + if (is_empty()) return *this; + if (_width==1) insert(1); + if (_width>2) + cimg::warn(_cimglist_instance + "FFT(): Instance has more than 2 images", + cimglist_instance); + + CImg::FFT(_data[0],_data[1],invert); + return *this; + } + + //! Compute a n-d Fast Fourier Transform \newinstance. + CImgList get_FFT(const bool invert=false) const { + return CImgList(*this,false).FFT(invert); + } + + //! Reverse primitives orientations of a 3d object. + /** + **/ + CImgList& reverse_object3d() { + cimglist_for(*this,l) { + CImg& p = _data[l]; + switch (p.size()) { + case 2 : case 3: cimg::swap(p[0],p[1]); break; + case 6 : cimg::swap(p[0],p[1],p[2],p[4],p[3],p[5]); break; + case 9 : cimg::swap(p[0],p[1],p[3],p[5],p[4],p[6]); break; + case 4 : cimg::swap(p[0],p[1],p[2],p[3]); break; + case 12 : cimg::swap(p[0],p[1],p[2],p[3],p[4],p[6],p[5],p[7],p[8],p[10],p[9],p[11]); break; + } + } + return *this; + } + + //! Reverse primitives orientations of a 3d object \newinstance. + CImgList get_reverse_object3d() const { + return (+*this).reverse_object3d(); + } + + //@} + }; // struct CImgList { ... + + /* + #--------------------------------------------- + # + # Completion of previously declared functions + # + #---------------------------------------------- + */ + +namespace cimg { + + // Functions to return standard streams 'stdin', 'stdout' and 'stderr'. + // (throw a CImgIOException when macro 'cimg_use_r' is defined). + inline FILE* _stdin(const bool throw_exception) { +#ifndef cimg_use_r + cimg::unused(throw_exception); + return stdin; +#else + if (throw_exception) { + cimg::exception_mode(0); + throw CImgIOException("cimg::stdin(): Reference to 'stdin' stream not allowed in R mode " + "('cimg_use_r' is defined)."); + } + return 0; +#endif + } + + inline FILE* _stdout(const bool throw_exception) { +#ifndef cimg_use_r + cimg::unused(throw_exception); + return stdout; +#else + if (throw_exception) { + cimg::exception_mode(0); + throw CImgIOException("cimg::stdout(): Reference to 'stdout' stream not allowed in R mode " + "('cimg_use_r' is defined)."); + } + return 0; +#endif + } + + inline FILE* _stderr(const bool throw_exception) { +#ifndef cimg_use_r + cimg::unused(throw_exception); + return stderr; +#else + if (throw_exception) { + cimg::exception_mode(0); + throw CImgIOException("cimg::stderr(): Reference to 'stderr' stream not allowed in R mode " + "('cimg_use_r' is defined)."); + } + return 0; +#endif + } + + // Open a file (with wide character support on Windows). + inline std::FILE *win_fopen(const char *const path, const char *const mode) { +#if cimg_OS==2 + // Convert 'path' to a wide-character string. + int err = MultiByteToWideChar(CP_UTF8,0,path,-1,0,0); + if (!err) return std_fopen(path,mode); + CImg wpath(err); + err = MultiByteToWideChar(CP_UTF8,0,path,-1,wpath,err); + if (!err) return std_fopen(path,mode); + + // Convert 'mode' to a wide-character string. + err = MultiByteToWideChar(CP_UTF8,0,mode,-1,0,0); + if (!err) return std_fopen(path,mode); + CImg wmode(err); + err = MultiByteToWideChar(CP_UTF8,0,mode,-1,wmode,err); + if (!err) return std_fopen(path,mode); + return _wfopen(wpath,wmode); +#else + return std_fopen(path,mode); +#endif + } + + //! Get/set path to store temporary files. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path where temporary files can be saved. + **/ + inline const char* temporary_path(const char *const user_path, const bool reinit_path) { +#define _cimg_test_temporary_path(p) \ + if (!path_found) { \ + cimg_snprintf(s_path,s_path.width(),"%s",p); \ + cimg_snprintf(tmp,tmp._width,"%s%c%s",s_path.data(),cimg_file_separator,filename_tmp._data); \ + if ((file=std_fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } \ + } + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + CImg tmp(1024), filename_tmp(256); + std::FILE *file = 0; + cimg_snprintf(filename_tmp,filename_tmp._width,"%s.tmp",cimg::filenamerand()); + char *tmpPath = std::getenv("TMP"); + if (!tmpPath) { tmpPath = std::getenv("TEMP"); winformat_string(tmpPath); } + if (tmpPath) _cimg_test_temporary_path(tmpPath); +#if cimg_OS==2 + _cimg_test_temporary_path("C:\\WINNT\\Temp"); + _cimg_test_temporary_path("C:\\WINDOWS\\Temp"); + _cimg_test_temporary_path("C:\\Temp"); + _cimg_test_temporary_path("C:"); + _cimg_test_temporary_path("D:\\WINNT\\Temp"); + _cimg_test_temporary_path("D:\\WINDOWS\\Temp"); + _cimg_test_temporary_path("D:\\Temp"); + _cimg_test_temporary_path("D:"); +#else + _cimg_test_temporary_path("/tmp"); + _cimg_test_temporary_path("/var/tmp"); +#endif + if (!path_found) { + *s_path = 0; + std::strncpy(tmp,filename_tmp,tmp._width - 1); + if ((file=std_fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } + } + if (!path_found) { + cimg::mutex(7,0); + throw CImgIOException("cimg::temporary_path(): Failed to locate path for writing temporary files.\n"); + } + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the Program Files/ directory (Windows only). + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the program files. + **/ +#if cimg_OS==2 + inline const char* programfiles_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(MAX_PATH); + *s_path = 0; + // Note: in the following line, 0x26 = CSIDL_PROGRAM_FILES (not defined on every compiler). +#if !defined(__INTEL_COMPILER) + if (!SHGetSpecialFolderPathA(0,s_path,0x0026,false)) { + const char *const pfPath = std::getenv("PROGRAMFILES"); + if (pfPath) std::strncpy(s_path,pfPath,MAX_PATH - 1); + else std::strcpy(s_path,"C:\\PROGRA~1"); + } +#else + std::strcpy(s_path,"C:\\PROGRA~1"); +#endif + } + cimg::mutex(7,0); + return s_path; + } +#endif + + //! Get/set path to the ImageMagick's \c convert binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c convert binary. + **/ + inline const char* imagemagick_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; +#if cimg_OS==2 + const char *const pf_path = programfiles_path(); + for (int l = 0; l<2 && !path_found; ++l) { + const char *const s_exe = l?"convert":"magick"; + cimg_snprintf(s_path,s_path._width,".\\%s.exe",s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%.2d-\\%s.exe",pf_path,k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%d-Q\\%s.exe",pf_path,k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%d\\%s.exe",pf_path,k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\%s.exe",pf_path,k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\%s.exe",pf_path,k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%d\\VISUA~1\\BIN\\%s.exe",pf_path,k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%.2d-\\%s.exe",k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%d-Q\\%s.exe",k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%d\\%s.exe",k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\%s.exe",k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\%s.exe",k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%d\\VISUA~1\\BIN\\%s.exe",k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%.2d-\\%s.exe",k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%d-Q\\%s.exe",k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%d\\%s.exe",k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\%s.exe",k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\%s.exe",k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%d\\VISUA~1\\BIN\\%s.exe",k,s_exe); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) cimg_snprintf(s_path,s_path._width,"%s.exe",s_exe); + } +#else + std::strcpy(s_path,"./magick"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + if (!path_found) { + std::strcpy(s_path,"./convert"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"convert"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the GraphicsMagick's \c gm binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c gm binary. + **/ + inline const char* graphicsmagick_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; +#if cimg_OS==2 + const char *const pf_path = programfiles_path(); + if (!path_found) { + std::strcpy(s_path,".\\gm.exe"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%.2d-\\gm.exe",pf_path,k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%d-Q\\gm.exe",pf_path,k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%d\\gm.exe",pf_path,k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",pf_path,k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",pf_path,k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",pf_path,k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%.2d-\\gm.exe",k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%d-Q\\gm.exe",k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%d\\gm.exe",k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%.2d-\\gm.exe",k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%d-Q\\gm.exe",k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%d\\gm.exe",k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",k); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"gm.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./gm"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"gm"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the XMedcon's \c medcon binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c medcon binary. + **/ + inline const char* medcon_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; +#if cimg_OS==2 + const char *const pf_path = programfiles_path(); + if (!path_found) { + std::strcpy(s_path,".\\medcon.exe"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) { + cimg_snprintf(s_path,s_path._width,"%s\\XMedCon\\bin\\medcon.bat",pf_path); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) { + cimg_snprintf(s_path,s_path._width,"%s\\XMedCon\\bin\\medcon.exe",pf_path); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) { + std::strcpy(s_path,"C:\\XMedCon\\bin\\medcon.exe"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"medcon.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./medcon"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"medcon"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the FFMPEG's \c ffmpeg binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c ffmpeg binary. + **/ + inline const char *ffmpeg_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; +#if cimg_OS==2 + if (!path_found) { + std::strcpy(s_path,".\\ffmpeg.exe"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"ffmpeg.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./ffmpeg"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"ffmpeg"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the \c gzip binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c gzip binary. + **/ + inline const char *gzip_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; +#if cimg_OS==2 + if (!path_found) { + std::strcpy(s_path,".\\gzip.exe"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"gzip.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./gzip"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"gzip"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the \c gunzip binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c gunzip binary. + **/ + inline const char *gunzip_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; +#if cimg_OS==2 + if (!path_found) { + std::strcpy(s_path,".\\gunzip.exe"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"gunzip.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./gunzip"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"gunzip"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the \c dcraw binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c dcraw binary. + **/ + inline const char *dcraw_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; +#if cimg_OS==2 + if (!path_found) { + std::strcpy(s_path,".\\dcraw.exe"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"dcraw.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./dcraw"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"dcraw"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the \c wget binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c wget binary. + **/ + inline const char *wget_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; +#if cimg_OS==2 + if (!path_found) { + std::strcpy(s_path,".\\wget.exe"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"wget.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./wget"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"wget"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the \c curl binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c curl binary. + **/ + inline const char *curl_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; +#if cimg_OS==2 + if (!path_found) { + std::strcpy(s_path,".\\curl.exe"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"curl.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./curl"); + if ((file=std_fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"curl"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + // [internal] Sorting function, used by cimg::files(). + inline int _sort_files(const void* a, const void* b) { + const CImg &sa = *(CImg*)a, &sb = *(CImg*)b; + return std::strcmp(sa._data,sb._data); + } + + //! Return list of files/directories in specified directory. + /** + \param path Path to the directory. Set to 0 for current directory. + \param is_pattern Tell if specified path has a matching pattern in it. + \param mode Output type, can be primary { 0=files only | 1=folders only | 2=files + folders }. + \param include_path Tell if \c path must be included in resulting filenames. + \return A list of filenames. + **/ + inline CImgList files(const char *const path, const bool is_pattern=false, + const unsigned int mode=2, const bool include_path=false) { + if (!path || !*path) return files("*",true,mode,include_path); + CImgList res; + + // If path is a valid folder name, ignore argument 'is_pattern'. + const bool _is_pattern = is_pattern && !cimg::is_directory(path); + bool is_root = false, is_current = false; + cimg::unused(is_root,is_current); + + // Clean format of input path. + CImg pattern, _path = CImg::string(path); +#if cimg_OS==2 + for (char *ps = _path; *ps; ++ps) if (*ps=='\\') *ps='/'; +#endif + char *pd = _path; + for (char *ps = pd; *ps; ++ps) { if (*ps!='/' || *ps!=*(ps+1)) *(pd++) = *ps; } + *pd = 0; + unsigned int lp = (unsigned int)std::strlen(_path); + if (!_is_pattern && lp && _path[lp - 1]=='/') { + _path[lp - 1] = 0; --lp; +#if cimg_OS!=2 + is_root = !*_path; +#endif + } + + // Separate folder path and matching pattern. + if (_is_pattern) { + const unsigned int bpos = (unsigned int)(cimg::basename(_path,'/') - _path.data()); + CImg::string(_path).move_to(pattern); + if (bpos) { + _path[bpos - 1] = 0; // End 'path' at last slash. +#if cimg_OS!=2 + is_root = !*_path; +#endif + } else { // No path to folder specified, assuming current folder. + is_current = true; *_path = 0; + } + lp = (unsigned int)std::strlen(_path); + } + + // Windows version. +#if cimg_OS==2 + if (!_is_pattern) { + pattern.assign(lp + 3); + std::memcpy(pattern,_path,lp); + pattern[lp] = '/'; pattern[lp + 1] = '*'; pattern[lp + 2] = 0; + } + WIN32_FIND_DATAA file_data; + const HANDLE dir = FindFirstFileA(pattern.data(),&file_data); + if (dir==INVALID_HANDLE_VALUE) return CImgList::const_empty(); + do { + const char *const filename = file_data.cFileName; + if (*filename!='.' || (filename[1] && (filename[1]!='.' || filename[2]))) { + const unsigned int lf = (unsigned int)std::strlen(filename); + const bool is_directory = (file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)!=0; + if ((!mode && !is_directory) || (mode==1 && is_directory) || mode>=2) { + if (include_path) { + CImg full_filename((lp?lp+1:0) + lf + 1); + if (lp) { std::memcpy(full_filename,_path,lp); full_filename[lp] = '/'; } + std::memcpy(full_filename._data + (lp?lp + 1:0),filename,lf + 1); + full_filename.move_to(res); + } else CImg(filename,lf + 1).move_to(res); + } + } + } while (FindNextFileA(dir,&file_data)); + FindClose(dir); + + // Unix version (posix). +#elif cimg_OS == 1 + DIR *const dir = opendir(is_root?"/":is_current?".":_path.data()); + if (!dir) return CImgList::const_empty(); + struct dirent *ent; + while ((ent=readdir(dir))!=0) { + const char *const filename = ent->d_name; + if (*filename!='.' || (filename[1] && (filename[1]!='.' || filename[2]))) { + const unsigned int lf = (unsigned int)std::strlen(filename); + CImg full_filename(lp + lf + 2); + + if (!is_current) { + full_filename.assign(lp + lf + 2); + if (lp) std::memcpy(full_filename,_path,lp); + full_filename[lp] = '/'; + std::memcpy(full_filename._data + lp + 1,filename,lf + 1); + } else full_filename.assign(filename,lf + 1); + + struct stat st; + if (stat(full_filename,&st)==-1) continue; + const bool is_directory = (st.st_mode & S_IFDIR)!=0; + if ((!mode && !is_directory) || (mode==1 && is_directory) || mode==2) { + if (include_path) { + if (!_is_pattern || (_is_pattern && !fnmatch(pattern,full_filename,0))) + full_filename.move_to(res); + } else { + if (!_is_pattern || (_is_pattern && !fnmatch(pattern,full_filename,0))) + CImg(filename,lf + 1).move_to(res); + } + } + } + } + closedir(dir); +#endif + + // Sort resulting list by lexicographic order. + if (res._width>=2) std::qsort(res._data,res._width,sizeof(CImg),_sort_files); + + return res; + } + + //! Try to guess format from an image file. + /** + \param file Input file (can be \c 0 if \c filename is set). + \param filename Filename, as a C-string (can be \c 0 if \c file is set). + \return C-string containing the guessed file format, or \c 0 if nothing has been guessed. + **/ + inline const char *ftype(std::FILE *const file, const char *const filename) { + if (!file && !filename) + throw CImgArgumentException("cimg::ftype(): Specified filename is (null)."); + static const char + *const _pnm = "pnm", + *const _pfm = "pfm", + *const _bmp = "bmp", + *const _gif = "gif", + *const _jpg = "jpg", + *const _off = "off", + *const _pan = "pan", + *const _png = "png", + *const _tif = "tif", + *const _inr = "inr", + *const _dcm = "dcm"; + const char *f_type = 0; + CImg header; + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + try { + header._load_raw(file,filename,512,1,1,1,false,false,0); + const unsigned char *const uheader = (unsigned char*)header._data; + if (!std::strncmp(header,"OFF\n",4)) f_type = _off; // OFF. + else if (!std::strncmp(header,"#INRIMAGE",9)) f_type = _inr; // INRIMAGE. + else if (!std::strncmp(header,"PANDORE",7)) f_type = _pan; // PANDORE. + else if (!std::strncmp(header.data() + 128,"DICM",4)) f_type = _dcm; // DICOM. + else if (uheader[0]==0xFF && uheader[1]==0xD8 && uheader[2]==0xFF) f_type = _jpg; // JPEG. + else if (header[0]=='B' && header[1]=='M') f_type = _bmp; // BMP. + else if (header[0]=='G' && header[1]=='I' && header[2]=='F' && header[3]=='8' && header[5]=='a' && // GIF. + (header[4]=='7' || header[4]=='9')) f_type = _gif; + else if (uheader[0]==0x89 && uheader[1]==0x50 && uheader[2]==0x4E && uheader[3]==0x47 && // PNG. + uheader[4]==0x0D && uheader[5]==0x0A && uheader[6]==0x1A && uheader[7]==0x0A) f_type = _png; + else if ((uheader[0]==0x49 && uheader[1]==0x49) || (uheader[0]==0x4D && uheader[1]==0x4D)) f_type = _tif; // TIFF. + else { // PNM or PFM. + CImgList _header = header.get_split(CImg::vector('\n'),0,false); + cimglist_for(_header,l) { + if (_header(l,0)=='#') continue; + if (_header[l]._height==2 && _header(l,0)=='P') { + const char c = _header(l,1); + if (c=='f' || c=='F') { f_type = _pfm; break; } + if (c>='1' && c<='9') { f_type = _pnm; break; } + } + f_type = 0; break; + } + } + } catch (CImgIOException&) { } + cimg::exception_mode(omode); + return f_type; + } + + //! Load file from network as a local temporary file. + /** + \param url URL of the filename, as a C-string. + \param[out] filename_local C-string containing the path to a local copy of \c filename. + \param timeout Maximum time (in seconds) authorized for downloading the file from the URL. + \param try_fallback When using libcurl, tells using system calls as fallbacks in case of libcurl failure. + \param referer Referer used, as a C-string. + \return Value of \c filename_local. + \note Use the \c libcurl library, or the external binaries \c wget or \c curl to perform the download. + **/ + inline char *load_network(const char *const url, char *const filename_local, + const unsigned int timeout, const bool try_fallback, + const char *const referer) { + if (!url) + throw CImgArgumentException("cimg::load_network(): Specified URL is (null)."); + if (!filename_local) + throw CImgArgumentException("cimg::load_network(): Specified destination string is (null)."); + + const char *const __ext = cimg::split_filename(url), *const _ext = (*__ext && __ext>url)?__ext - 1:__ext; + CImg ext = CImg::string(_ext); + std::FILE *file = 0; + *filename_local = 0; + if (ext._width>16 || !cimg::strncasecmp(ext,"cgi",3)) *ext = 0; + else cimg::strwindows_reserved(ext); + do { + cimg_snprintf(filename_local,256,"%s%c%s%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext._data); + if ((file=std_fopen(filename_local,"rb"))!=0) cimg::fclose(file); + } while (file); + +#ifdef cimg_use_curl + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + try { + CURL *curl = 0; + CURLcode res; + curl = curl_easy_init(); + if (curl) { + file = cimg::fopen(filename_local,"wb"); + curl_easy_setopt(curl,CURLOPT_URL,url); + curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,0); + curl_easy_setopt(curl,CURLOPT_WRITEDATA,file); + curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,0L); + curl_easy_setopt(curl,CURLOPT_SSL_VERIFYHOST,0L); + curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1L); + if (timeout) curl_easy_setopt(curl,CURLOPT_TIMEOUT,(long)timeout); + if (std::strchr(url,'?')) curl_easy_setopt(curl,CURLOPT_HTTPGET,1L); + if (referer) curl_easy_setopt(curl,CURLOPT_REFERER,referer); + res = curl_easy_perform(curl); + curl_easy_cleanup(curl); + cimg::fseek(file,0,SEEK_END); // Check if file size is 0. + const cimg_ulong siz = cimg::ftell(file); + cimg::fclose(file); + if (siz>0 && res==CURLE_OK) { + cimg::exception_mode(omode); + return filename_local; + } else std::remove(filename_local); + } + } catch (...) { } + cimg::exception_mode(omode); + if (!try_fallback) throw CImgIOException("cimg::load_network(): Failed to load file '%s' with libcurl.",url); +#endif + + CImg command((unsigned int)std::strlen(url) + 64); + cimg::unused(try_fallback); + + // Try with 'curl' first. + if (timeout) { + if (referer) + cimg_snprintf(command,command._width,"%s -e %s -m %u -f --silent --compressed -o \"%s\" \"%s\"", + cimg::curl_path(),referer,timeout,filename_local,url); + else + cimg_snprintf(command,command._width,"%s -m %u -f --silent --compressed -o \"%s\" \"%s\"", + cimg::curl_path(),timeout,filename_local,url); + } else { + if (referer) + cimg_snprintf(command,command._width,"%s -e %s -f --silent --compressed -o \"%s\" \"%s\"", + cimg::curl_path(),referer,filename_local,url); + else + cimg_snprintf(command,command._width,"%s -f --silent --compressed -o \"%s\" \"%s\"", + cimg::curl_path(),filename_local,url); + } + cimg::system(command); + + if (!(file = std_fopen(filename_local,"rb"))) { + + // Try with 'wget' otherwise. + if (timeout) { + if (referer) + cimg_snprintf(command,command._width,"%s --referer=%s -T %u -q -r -l 0 --no-cache -O \"%s\" \"%s\"", + cimg::wget_path(),referer,timeout,filename_local,url); + else + cimg_snprintf(command,command._width,"%s -T %u -q -r -l 0 --no-cache -O \"%s\" \"%s\"", + cimg::wget_path(),timeout,filename_local,url); + } else { + if (referer) + cimg_snprintf(command,command._width,"%s --referer=%s -q -r -l 0 --no-cache -O \"%s\" \"%s\"", + cimg::wget_path(),referer,filename_local,url); + else + cimg_snprintf(command,command._width,"%s -q -r -l 0 --no-cache -O \"%s\" \"%s\"", + cimg::wget_path(),filename_local,url); + } + cimg::system(command); + + if (!(file = std_fopen(filename_local,"rb"))) + throw CImgIOException("cimg::load_network(): Failed to load file '%s' with external commands " + "'wget' or 'curl'.",url); + cimg::fclose(file); + + // Try gunzip it. + cimg_snprintf(command,command._width,"%s.gz",filename_local); + std::rename(filename_local,command); + cimg_snprintf(command,command._width,"%s --quiet \"%s.gz\"", + gunzip_path(),filename_local); + cimg::system(command); + file = std_fopen(filename_local,"rb"); + if (!file) { + cimg_snprintf(command,command._width,"%s.gz",filename_local); + std::rename(command,filename_local); + file = std_fopen(filename_local,"rb"); + } + } + cimg::fseek(file,0,SEEK_END); // Check if file size is 0. + if (std::ftell(file)<=0) + throw CImgIOException("cimg::load_network(): Failed to load URL '%s' with external commands " + "'wget' or 'curl'.",url); + cimg::fclose(file); + return filename_local; + } + + // Implement a tic/toc mechanism to display elapsed time of algorithms. + inline cimg_ulong tictoc(const bool is_tic) { + cimg::mutex(2); + static CImg times(64); + static unsigned int pos = 0; + const cimg_ulong t1 = cimg::time(); + if (is_tic) { + // Tic + times[pos++] = t1; + if (pos>=times._width) + throw CImgArgumentException("cimg::tic(): Too much calls to 'cimg::tic()' without calls to 'cimg::toc()'."); + cimg::mutex(2,0); + return t1; + } + + // Toc + if (!pos) + throw CImgArgumentException("cimg::toc(): No previous call to 'cimg::tic()' has been made."); + const cimg_ulong + t0 = times[--pos], + dt = t1>=t0?(t1 - t0):cimg::type::max(); + const unsigned int + edays = (unsigned int)(dt/86400000.0), + ehours = (unsigned int)((dt - edays*86400000.0)/3600000.0), + emin = (unsigned int)((dt - edays*86400000.0 - ehours*3600000.0)/60000.0), + esec = (unsigned int)((dt - edays*86400000.0 - ehours*3600000.0 - emin*60000.0)/1000.0), + ems = (unsigned int)(dt - edays*86400000.0 - ehours*3600000.0 - emin*60000.0 - esec*1000.0); + if (!edays && !ehours && !emin && !esec) + std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u ms%s\n", + cimg::t_red,1 + 2*pos,"",ems,cimg::t_normal); + else { + if (!edays && !ehours && !emin) + std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u sec %u ms%s\n", + cimg::t_red,1 + 2*pos,"",esec,ems,cimg::t_normal); + else { + if (!edays && !ehours) + std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u min %u sec %u ms%s\n", + cimg::t_red,1 + 2*pos,"",emin,esec,ems,cimg::t_normal); + else{ + if (!edays) + std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u hours %u min %u sec %u ms%s\n", + cimg::t_red,1 + 2*pos,"",ehours,emin,esec,ems,cimg::t_normal); + else{ + std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u days %u hours %u min %u sec %u ms%s\n", + cimg::t_red,1 + 2*pos,"",edays,ehours,emin,esec,ems,cimg::t_normal); + } + } + } + } + cimg::mutex(2,0); + return dt; + } + + // Return a temporary string describing the size of a memory buffer. + inline const char *strbuffersize(const cimg_ulong size) { + static CImg res(256); + cimg::mutex(5); + if (size<1024LU) cimg_snprintf(res,res._width,"%lu byte%s",(unsigned long)size,size>1?"s":""); + else if (size<1024*1024LU) { const float nsize = size/1024.0f; cimg_snprintf(res,res._width,"%.1f Kio",nsize); } + else if (size<1024*1024*1024LU) { + const float nsize = size/(1024*1024.0f); cimg_snprintf(res,res._width,"%.1f Mio",nsize); + } else { const float nsize = size/(1024*1024*1024.0f); cimg_snprintf(res,res._width,"%.1f Gio",nsize); } + cimg::mutex(5,0); + return res; + } + + //! Display a simple dialog box, and wait for the user's response. + /** + \param title Title of the dialog window. + \param msg Main message displayed inside the dialog window. + \param button1_label Label of the 1st button. + \param button2_label Label of the 2nd button (\c 0 to hide button). + \param button3_label Label of the 3rd button (\c 0 to hide button). + \param button4_label Label of the 4th button (\c 0 to hide button). + \param button5_label Label of the 5th button (\c 0 to hide button). + \param button6_label Label of the 6th button (\c 0 to hide button). + \param logo Image logo displayed at the left of the main message. + \param is_centered Tells if the dialog window must be centered on the screen. + \return Indice of clicked button (from \c 0 to \c 5), or \c -1 if the dialog window has been closed by the user. + \note + - Up to 6 buttons can be defined in the dialog window. + - The function returns when a user clicked one of the button or closed the dialog window. + - If a button text is set to 0, the corresponding button (and the followings) will not appear in the dialog box. + At least one button must be specified. + **/ + template + inline int dialog(const char *const title, const char *const msg, + const char *const button1_label, const char *const button2_label, + const char *const button3_label, const char *const button4_label, + const char *const button5_label, const char *const button6_label, + const CImg& logo, const bool is_centered=false) { +#if cimg_display==0 + cimg::unused(title,msg,button1_label,button2_label,button3_label,button4_label,button5_label,button6_label, + logo._data,is_centered); + throw CImgIOException("cimg::dialog(): No display available."); +#else + static const unsigned char + black[] = { 0,0,0 }, white[] = { 255,255,255 }, gray[] = { 200,200,200 }, gray2[] = { 150,150,150 }; + + // Create buttons and canvas graphics + CImgList buttons, cbuttons, sbuttons; + if (button1_label) { CImg().draw_text(0,0,button1_label,black,gray,1,13).move_to(buttons); + if (button2_label) { CImg().draw_text(0,0,button2_label,black,gray,1,13).move_to(buttons); + if (button3_label) { CImg().draw_text(0,0,button3_label,black,gray,1,13).move_to(buttons); + if (button4_label) { CImg().draw_text(0,0,button4_label,black,gray,1,13).move_to(buttons); + if (button5_label) { CImg().draw_text(0,0,button5_label,black,gray,1,13).move_to(buttons); + if (button6_label) { CImg().draw_text(0,0,button6_label,black,gray,1,13).move_to(buttons); + }}}}}} + if (!buttons._width) + throw CImgArgumentException("cimg::dialog(): No buttons have been defined."); + cimglist_for(buttons,l) buttons[l].resize(-100,-100,1,3); + + unsigned int bw = 0, bh = 0; + cimglist_for(buttons,l) { bw = std::max(bw,buttons[l]._width); bh = std::max(bh,buttons[l]._height); } + bw+=8; bh+=8; + if (bw<64) bw = 64; + if (bw>128) bw = 128; + if (bh<24) bh = 24; + if (bh>48) bh = 48; + + CImg button(bw,bh,1,3); + button.draw_rectangle(0,0,bw - 1,bh - 1,gray); + button.draw_line(0,0,bw - 1,0,white).draw_line(0,bh - 1,0,0,white); + button.draw_line(bw - 1,0,bw - 1,bh - 1,black).draw_line(bw - 1,bh - 1,0,bh - 1,black); + button.draw_line(1,bh - 2,bw - 2,bh - 2,gray2).draw_line(bw - 2,bh - 2,bw - 2,1,gray2); + CImg sbutton(bw,bh,1,3); + sbutton.draw_rectangle(0,0,bw - 1,bh - 1,gray); + sbutton.draw_line(0,0,bw - 1,0,black).draw_line(bw - 1,0,bw - 1,bh - 1,black); + sbutton.draw_line(bw - 1,bh - 1,0,bh - 1,black).draw_line(0,bh - 1,0,0,black); + sbutton.draw_line(1,1,bw - 2,1,white).draw_line(1,bh - 2,1,1,white); + sbutton.draw_line(bw - 2,1,bw - 2,bh - 2,black).draw_line(bw - 2,bh - 2,1,bh - 2,black); + sbutton.draw_line(2,bh - 3,bw - 3,bh - 3,gray2).draw_line(bw - 3,bh - 3,bw - 3,2,gray2); + sbutton.draw_line(4,4,bw - 5,4,black,1,0xAAAAAAAA,true).draw_line(bw - 5,4,bw - 5,bh - 5,black,1,0xAAAAAAAA,false); + sbutton.draw_line(bw - 5,bh - 5,4,bh - 5,black,1,0xAAAAAAAA,false).draw_line(4,bh - 5,4,4,black,1,0xAAAAAAAA,false); + CImg cbutton(bw,bh,1,3); + cbutton.draw_rectangle(0,0,bw - 1,bh - 1,black).draw_rectangle(1,1,bw - 2,bh - 2,gray2). + draw_rectangle(2,2,bw - 3,bh - 3,gray); + cbutton.draw_line(4,4,bw - 5,4,black,1,0xAAAAAAAA,true).draw_line(bw - 5,4,bw - 5,bh - 5,black,1,0xAAAAAAAA,false); + cbutton.draw_line(bw - 5,bh - 5,4,bh - 5,black,1,0xAAAAAAAA,false).draw_line(4,bh - 5,4,4,black,1,0xAAAAAAAA,false); + + cimglist_for(buttons,ll) { + CImg(cbutton). + draw_image(1 + (bw -buttons[ll].width())/2,1 + (bh - buttons[ll].height())/2,buttons[ll]). + move_to(cbuttons); + CImg(sbutton). + draw_image((bw - buttons[ll].width())/2,(bh - buttons[ll].height())/2,buttons[ll]). + move_to(sbuttons); + CImg(button). + draw_image((bw - buttons[ll].width())/2,(bh - buttons[ll].height())/2,buttons[ll]). + move_to(buttons[ll]); + } + + CImg canvas; + if (msg) + ((CImg().draw_text(0,0,"%s",gray,0,1,13,msg)*=-1)+=200).resize(-100,-100,1,3).move_to(canvas); + + const unsigned int + bwall = (buttons._width - 1)*(12 + bw) + bw, + w = cimg::max(196U,36 + logo._width + canvas._width,24 + bwall), + h = cimg::max(96U,36 + canvas._height + bh,36 + logo._height + bh), + lx = 12 + (canvas._data?0:((w - 24 - logo._width)/2)), + ly = (h - 12 - bh - logo._height)/2, + tx = lx + logo._width + 12, + ty = (h - 12 - bh - canvas._height)/2, + bx = (w - bwall)/2, + by = h - 12 - bh; + + if (canvas._data) + canvas = CImg(w,h,1,3). + draw_rectangle(0,0,w - 1,h - 1,gray). + draw_line(0,0,w - 1,0,white).draw_line(0,h - 1,0,0,white). + draw_line(w - 1,0,w - 1,h - 1,black).draw_line(w - 1,h - 1,0,h - 1,black). + draw_image(tx,ty,canvas); + else + canvas = CImg(w,h,1,3). + draw_rectangle(0,0,w - 1,h - 1,gray). + draw_line(0,0,w - 1,0,white).draw_line(0,h - 1,0,0,white). + draw_line(w - 1,0,w - 1,h - 1,black).draw_line(w - 1,h - 1,0,h - 1,black); + if (logo._data) canvas.draw_image(lx,ly,logo); + + unsigned int xbuttons[6] = { 0 }; + cimglist_for(buttons,lll) { xbuttons[lll] = bx + (bw + 12)*lll; canvas.draw_image(xbuttons[lll],by,buttons[lll]); } + + // Open window and enter events loop + CImgDisplay disp(canvas,title?title:" ",0,false,is_centered?true:false); + if (is_centered) disp.move((CImgDisplay::screen_width() - disp.width())/2, + (CImgDisplay::screen_height() - disp.height())/2); + bool stop_flag = false, refresh = false; + int oselected = -1, oclicked = -1, selected = -1, clicked = -1; + while (!disp.is_closed() && !stop_flag) { + if (refresh) { + if (clicked>=0) + CImg(canvas).draw_image(xbuttons[clicked],by,cbuttons[clicked]).display(disp); + else { + if (selected>=0) + CImg(canvas).draw_image(xbuttons[selected],by,sbuttons[selected]).display(disp); + else canvas.display(disp); + } + refresh = false; + } + disp.wait(15); + if (disp.is_resized()) disp.resize(disp,false); + + if (disp.button()&1) { + oclicked = clicked; + clicked = -1; + cimglist_for(buttons,l) + if (disp.mouse_y()>=(int)by && disp.mouse_y()<(int)(by + bh) && + disp.mouse_x()>=(int)xbuttons[l] && disp.mouse_x()<(int)(xbuttons[l] + bw)) { + clicked = selected = l; + refresh = true; + } + if (clicked!=oclicked) refresh = true; + } else if (clicked>=0) stop_flag = true; + + if (disp.key()) { + oselected = selected; + switch (disp.key()) { + case cimg::keyESC : selected = -1; stop_flag = true; break; + case cimg::keyENTER : if (selected<0) selected = 0; stop_flag = true; break; + case cimg::keyTAB : + case cimg::keyARROWRIGHT : + case cimg::keyARROWDOWN : selected = (selected + 1)%buttons.width(); break; + case cimg::keyARROWLEFT : + case cimg::keyARROWUP : selected = (selected + buttons.width() - 1)%buttons.width(); break; + } + disp.set_key(); + if (selected!=oselected) refresh = true; + } + } + if (!disp) selected = -1; + return selected; +#endif + } + + //! Display a simple dialog box, and wait for the user's response \specialization. + inline int dialog(const char *const title, const char *const msg, + const char *const button1_label, const char *const button2_label, const char *const button3_label, + const char *const button4_label, const char *const button5_label, const char *const button6_label, + const bool is_centered) { + return dialog(title,msg,button1_label,button2_label,button3_label,button4_label,button5_label,button6_label, + CImg::_logo40x38(),is_centered); + } + + //! Evaluate math expression. + /** + \param expression C-string describing the formula to evaluate. + \param x Value of the pre-defined variable \c x. + \param y Value of the pre-defined variable \c y. + \param z Value of the pre-defined variable \c z. + \param c Value of the pre-defined variable \c c. + \return Result of the formula evaluation. + \note Set \c expression to \c 0 to keep evaluating the last specified \c expression. + \par Example + \code + const double + res1 = cimg::eval("cos(x)^2 + sin(y)^2",2,2), // will return '1'. + res2 = cimg::eval(0,1,1); // will return '1' too. + \endcode + **/ + inline double eval(const char *const expression, const double x, const double y, const double z, const double c) { + static const CImg empty; + return empty.eval(expression,x,y,z,c); + } + + template + inline CImg::type> eval(const char *const expression, const CImg& xyzc) { + static const CImg empty; + return empty.eval(expression,xyzc); + } + + // End of cimg:: namespace +} + + // End of cimg_library:: namespace +} + +//! Short alias name. +namespace cil = cimg_library_suffixed; + +#ifdef _cimg_redefine_False +#define False 0 +#endif +#ifdef _cimg_redefine_True +#define True 1 +#endif +#ifdef _cimg_redefine_min +#define min(a,b) (((a)<(b))?(a):(b)) +#endif +#ifdef _cimg_redefine_max +#define max(a,b) (((a)>(b))?(a):(b)) +#endif +#ifdef _cimg_redefine_PI +#define PI 3.141592653589793238462643383 +#endif +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#endif +// Local Variables: +// mode: c++ +// End: diff --git a/asift_match/src/ROS_matcher.cpp b/asift_match/src/ROS_matcher.cpp new file mode 100644 index 0000000..4be49bc --- /dev/null +++ b/asift_match/src/ROS_matcher.cpp @@ -0,0 +1,57 @@ +#include "ROS_matcher.hpp" + +ROS_matcher::ROS_matcher(): _num_tilt(1), _status(MATCHER_STATUS_WAITING_INIT) +{ + _center_pub = _nh.advertise("/ROS_matcher/center", 10); + + message_filters::Subscriber info_sub(_nh, "/camera/rgb/camera_info", 1); + message_filters::Subscriber image_sub(_nh, "/camera/rgb/image_raw", 1); + message_filters::Subscriber pointcloud_sub(_nh, "/camera/depth_registered/points", 1); + message_filters::TimeSynchronizer sync(info_sub, image_sub, pointcloud_sub, 10); + sync.registerCallback(boost::bind(&ROS_matcher::cameraCallback, this, _1, _2, _3)); + + + unsigned int nb_ref =2; + std::string refData[] = { + "book_training/train_image_000.png", + "book_training/train_image_001.png", + "book_training/train_image_002.png", + "book_training/train_image_003.png"}; + + for(unsigned int i=0; iwidth, height = image_msg->height; + std::vector image(height*width); + + //Conversion en niveau de gris + if(image_msg->encoding == "yuv422") + { + for(unsigned int i=0; idata[3*i]; + } + } + else + { + ROS_WARN("Encoding doesn't correspond to yuv422"); + return; + } + + int nb_match=0; + nb_match = matcher.match(image, width, height, _num_tilt); + + ROS_INFO("Match : %d", nb_match); + } + else + { + ROS_INFO("Matcher not ready to process"); + } +} \ No newline at end of file diff --git a/asift_match/src/ROS_matcher.hpp b/asift_match/src/ROS_matcher.hpp new file mode 100644 index 0000000..684be41 --- /dev/null +++ b/asift_match/src/ROS_matcher.hpp @@ -0,0 +1,45 @@ +#ifndef ROSMATCHER_HPP +#define ROSMATCHER_HPP + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "ASIFT_matcher.hpp" + +enum MATCHER_STATUS{ + MATCHER_STATUS_IDLE=0, + MATCHER_STATUS_PROCESSING, + MATCHER_STATUS_WAITING_INIT}; + +class ROS_matcher +{ +protected: + ros::NodeHandle _nh; + + //Publisher ROS + ros::Publisher _center_pub; + + //Subscriber ROS + // ros::Subscriber _image_sub; + + //Matcher + int _num_tilt; + ASIFT_matcher matcher; + + MATCHER_STATUS _status; + +public: + ROS_matcher(); + // ~ROS_matcher(); + void cameraCallback(const sensor_msgs::CameraInfo::ConstPtr& info_msg, const sensor_msgs::Image::ConstPtr& image_msg, const sensor_msgs::PointCloud2::ConstPtr& pointcloud_msg); + +}; +#endif \ No newline at end of file diff --git a/asift_match/src/ROS_matcher_node.cpp b/asift_match/src/ROS_matcher_node.cpp new file mode 100644 index 0000000..ac75cb4 --- /dev/null +++ b/asift_match/src/ROS_matcher_node.cpp @@ -0,0 +1,12 @@ +#include "ROS_matcher.hpp" + +int main(int argc, char *argv[]) +{ + ros::init(argc, argv, "ROS_matcher"); + + ROS_matcher ros_matcher; + + ros::spin(); + + return 0; +} \ No newline at end of file diff --git a/asift_match/src/book_training/train_image_000.png b/asift_match/src/book_training/train_image_000.png new file mode 100644 index 0000000000000000000000000000000000000000..4cb2bf4284dba8d39983ba092060f8c178f452e7 GIT binary patch literal 534442 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%0D5CT<)mwe*#)AvsBMefo8 zzBAy|`ajs~yuts%TmRuy6F3j)h@J>LcA8J(o+llBW+PXcSuIk~L;u_!=k(thP4yxP z;LNLX!bg$Ml}k1I0p)}5qrMOe@!-d{xc^OjHe|E=tfidCpnmBB{7Dp+y$mGee@|xzqCM_p)a0>#lBA~()$zA2>WP& zh%!c~pOJRfT6Ws~vWqeJjq8elDD3plGB*RU!;)?s{vdVd7G5C_-UT4%Z-ppp%wf$OhbVX@&W&1_A1eC8LCvQO zf&0q?|JV&5WP!rpwdh+ZM*$S2M9jFsN}zp;6%x;LjGvYH2lD-RzuWhgL(J{-Y|I_# zyl2pyAUvv*J$en_O6e1Q3WPjNj6J2jR0aA%Pq$>sA4Sw@02yfh+r2@*&gOPXPA(`B ziikGuw+Sgx8eKCBV44QEM*kPL=iW=6$)LF`qc_;HlFKkU&aYyK&{k8M1wM4_Pkgx^XhzjhAChSP`V{pZqL&~w9)qg2f;j+1N3}Dr z;NAgf(2SXT^zSpq;weJR=6wqSpMbc<)#oDWkrO!D)ID24w95bZ%}zd14Resm$^4Dc zKzjq=ia(xgWxSP$MGUZs2nRy8(Y_;SE5ttZJ6ouSoH>5!0vs?medPC=e!e<6{G`vR zSz;Ss!Woa=r(_PXhg|_C4{cKN>y2K42HHR{v-%qM^b!MlO9Q$l1JKDr4F*0a zLBXSVodftb_L_`vU=DK?x+H@A15B`!*ozM<0r8YA;-w>O2F1u}wKLC$_0vhmxtFtXs! zIPexs3RE3+Uy?w&frRHAh?*I1!&=wmB=@NjsNb^?=R+N@%_nllVtKGAit-r#+kDRz^IE8zJZHSLd z#uZRb0x=)e5IL|CWrn^YM4;NmsIyn87#0xSIYQ|7t8ZTy;ZR1( z216dG(sA)y9h}EY0YzYb;0H`XPD=8PRwdU{)2iK@Z88SVFMOB3<3(jLRo#)tJ?#Y5 zX2WP+A(j#eUQ| zyW$2L&8%Z}{_nrdtqokF<0NUs#4B`$+#S_}%?dgeqFGqFs3GbL(Hg{YKmnG{I30^} zPh_9R#8ePEO@Vg+Nf5|GlZ618z{EnWbk`V!be5RY=+g%_V*Gj@7`3_HLcV6AHJwod zf~&rvVBzc+pi#e$7il(Vh!}wPhFG>!>ZjfVDp%kcy2<$hsjMTEk^RfIC6SFBExj`F z3Jys2?{@6&EDaKeG{02xVs7u8;?VaXC;GZ!{=k$y3Q4i5m%tcRIkTkDXgLr!^EYJudiCdp zzagV1H$>CaV$9a}raW4L4&6-?I{@n-Xs6zZmm8_H3LnX*FCWh5fo^m%h9ChnSU<)p zUb~9(+C6|g>C)F#f+u@O(B>jK4{R1{Rb8ixPq?&w^?41qMl>!=gl)}fq%ul)QYAn_ zvUIZorOjZmiGor)zJx0{wO}t~vD~5_xHftzuMB52fP*bJ zS^TzW#j0LNOi7zqnQDFoIMais&G;p#Xt=qYE|{g)pjezQpo|z8B;wt-(){1ud#&Xa zOsH_gofc{iB%zc+!Qt#wG>h{kqiUzprACT2^h|2tl3$muoVI&CxDIdgKvnyv*(Ivi zVgoPotEU&<&W>?e_ALT25c8!zZm%D{KI5B z&a(DJeCoovV!6Vt(!JS0%kJu>n-?7ZHUH0dB=zW0>#hdh5ohFvC3q~0DqI#s9PwTb zj}}dg??@ueKZV(D!LL3A*q-_~a;JKj2=9ykXO+;wGw~L2n~R>u z!E0Y}5xBkizp&86D3b|v+LJ0<(AptC9cP2~`=>N6*t;3MX5ZYF0J`L^ocOOOc$Z6V z)hIzzAKQH6(c8no3W3I5q@oh~ZY8_?Sz^t^Nz7+(iBNbI`^S1I*}XOO-tN7H-3>`> zhuNU0=s6gc2zwAIV)ZUT;p*3tSg+*5 zZoi*Ci#L`UIR9o3xQ0w*))<=;kWZQ+iE&xyDty{~wdqmd|Mp-A*qF8a+q=P0H@2Pl z6!tl}`zuUN5#R|q;{dFt)Rk^&eRq8KPtLitkLW5R#1l=pd*Ep-96`0y0y5Y|pU-20 z_?szglivNng5?1cPO-c4n*BBP2Z!k|1upkpz%5ts#)RucFuw z(xoQ(n#E1il^A06DqRiD=?I8zVJD<;;~eO3_~Zqi=erMM6k5{cnhpaUUdh?#LC3kg z`YgG!Sp?Gh1_Oq&44%iJos`TC4jl(z@Q=~KQe^h;X_lrw*G3Bw719S)z@>87rvxz3 zLost)KuDTal7g$;mIN@E^BD};M9p-T%^|Vaa&uE47u0mF4eECsK{Sk0-Lr{B^$&mZ$y3Ehk7+z)k5OSUBc>EHUgcdj{@Ze7>g>1L<)$u~nk zx@x?x%5-+s0Ina+3RiV^7IfCh74SiAgj8_;{dj2>{LfJBrmsBai@@dU47=10xQPva z8mK`ONsLsg_H+HI%WSZ>c%Z{~8ejr41IbnFzRoqY* z8GxCe<5Q8N#tobqC@oLFFV9v^9Nj!c>#-9KNE4`lN>SQ+@GWLqvCnX5FA-VJ!HRibk`q|*QK??t*r`u`r5%)!w zHojqTGcGyN@peoJ6D+k>a?>r0H__>7T$&U}cvL43wgtPj$DEH(myFY&I$f&c7E|&% zezVb9&2B%xvsr#TTl4#K-gsYI?>m^ge)&CADP06ui{?_M}1e;r5RPP*V!*yRilujmW{py3-TUOVxe()ou$wEk+5KL861p!!I1P-S&Zc3S? z;IQxbiLD1V!RIM@{*qUpnX+VIkRCMEqhet@tk3H9H9$E6}fhX0w&LuLWX&=7aWLdv>oJ{qQLR=X=P#vfL zn{St$wR;`tQ>jVskMz673)Q$~S*^3#xapIc%wz<4bjrTWT}5UDn?$p$*e2=6tPQdN zgS;BXoxYD33llXdgA|i7OBMpV{Ib5T$s;9`UbXVyNB| zy!X?&uz%@gukqLj2wE27cP-|Z!e*m|>0soMkFXRXqAVk+XkL>X0|qTJt-HVMKi1ak z`>N|~W#~lzV)60Pe*L?n3FSt2m(tewXmIsX*%97YH=px0B|s2dn6<#GiiAhuiI02M zYKJoD8CmTLZQe)P(BVv$%Un(t=W-O-w9>yIB;1$0FCI9W2Wh6ww^UT5V&9Q1uPFk@ z6kTf>HK!#a4lw32=tVY|ileZk&X~Kk39>FRr#r6aQ~Iuq0U{c}d&%rTGKo@%(@QgK zPw+K)$`!9oyq();g2rm)PG_e==S4%s-=S0AL$BPf@f^Vg0k`{pTegx48Ht_|SKFBU zS|H@glp@pzs&d!<%8k+*x{CiOh2U#yQAHFm@4R1^6_ z4-jNB7}N(Y6M8z`Ok(w!0+W6vXH$nx>R_<7=4MP!U2S_L4W6@0koz#en+=@5Po>)bklR zZkyB^{xDcjr7gy;{>yuXsPp>0;y{-^k8Sv{?wklx=%$SrGKK+ttjA-VXk{kOksZ4u znFv4uI*du$hlmu-t~mT%oL?mqIKuC(rQJ2ZX4gv6L|r_4=bV-rmq|aLkSu_C(q=vJ z21gHgMh^FpCl3K-I#h4KDD?Td(FP&0R z|J!nJF#?kQgyhcOJaEWsB*pXw%7YR!_npbW#h4uW@*}6e5&iQ>1>rS6(oeY|lanrU z9+7jpo6x`6m?n74mdx>ExT;ige%{K9h!D2V=bv&^bZTg7(jJZxj_>?gwb_`JiXDJ% zHs%Sah{L=N&0V(Ef;X7mO)E(@2v(vt{;{PBIn%R+vTf-Oy73)95>Fvy^KJYFZ0jvw zR`6vH2TcU@G;sLrNH4eEIue)0Mq!V08Bd1|+K=9Ljrnewo4sH79edsYQvQBCSW{3~ zIT16~r*C!|9Ox=+4tghk9@fo0d6l@m+_=;&eDDuGz$!6+YYXkH-ZIL^S$3g^dqDLc>O@R z|GZ$n-U{dPp7kf2n3R1ua8@sfE?F6^HUH*U*pi-r3v3Z=_T&Hk)`F+a0)rx5KVlY zI46|x7d&R`zH~O@;1vWQol&QW%jZ*ewbTc$+_pF2v3GQotFYk9*Zj6~wVkbZ169^{Qb> zRsx)#Wbic}Rk-^XKkqkmTao6R(XojNG7OR=Km~Gb)J0pFm;`o>wbot9YKIda{&>FhE6TJYlOi(9>|% zr^RS$dn?Lu^X8S?k0Vu1srk#%sh**}FEXHJfPgO`P0LG6PG%S=GOqNdE7EUW1l}3A z`Ww?LY>s^&+WrLge<$I%`x^oZ&0w+RPiC2cx-!jd1|tsZLq@T2sl<5&DXK23?p!PL zll)Uo#ZwMvcqYw!XJdKB?OJU0eBk=8#pT}ElP^`KWR6YQEbptXYpL6-=xVFCw`^&1 zhZErx^lx>p=2_H9Lm(adGRhmhl1#=)-?{XMwCEWML_WJ;NI2<(GG6Iv~H<-=fV;aXj5 z#|@oz96ZhQfarv4D(%Y=_b<`V1`_dQnU2*?m+}wdw zpSjTU*FXt=*s-RruJA%cXA(nhiSF4)nFz3r78w==zAQTou%jgbm})=tj$`%G$rpTY zGhk^Iefo4v>9FZ+Co9p>Tko0rd#r{#jOK6JuP?(->)HGPgOqc)3Kh@JE$x4C#R|A+ z4RA%O3s_!KI2fqYsxQ zPcOneig|nYViO4R!XLW%R2aenRSN~I8sk~!bvOMo|EmdShJQRX!K}zgNoBL9 zF#YmX^mXo@!(t2HPQQ|n{&4~p7AqhveLle_iyV$ZzZDaKkec^M3ZYe&=l?hDKqCXI zUmUvF>NWaxJsB4w2{v4-h(5--n{+6sBBPoY<1!&2S#cJT|s z2~=ZaTm%xGk#9m?M@bX7%*6i!yeJ1<*+YLF78;f^+02jtl)^3L?WyZ;a?3$awU~2Y zAM|)yOuD<&)e<(8dhh+&F8x_Nlo4q=_-W{MB8G`t3UIY>(#>139;po7_?3?fR4qnX zu3zgvmFe2|+q}Ke$-b~SWqgwZ|Nd4QaboGvsk^J)e@kGJA8y`e{7rC;3t9kStxzUa zh=4(yVZ5D=FzBr(SYs6QH3oV^mhrej1MZJHcJcLqvS{J1@owgdc|;B4TygGS_X*ze z+Zx6@b(h1V4asyULlUXD$c2NLp4xg8_U?8>Ew;NCer3?j?&7Qr;G*gHvO#E)7sl(@ z+q6~{BHjF^aSYS=2OHbmvNK-$TKV1_P7F2Oz*|nT*wt>}$?P9EKQcD9os{R)$tE~5 zsOAn6##L9{0kkl(YC1RhYU^k_`P+iKdhw8TPighU>pZ{VwQZh7bsX$({$PLB);EoN zBgPGPOk1R}4jp6neT_3Wg#nJ6rX%4b*t?_UeoJ`L5O9@M1XYK-LzRV^?m`UtEZ0k2 z1rT&3_%c&jMB?UI;kV<}3}I>HufTVsM@2D&m$<{x=i%z)M{)uGIy=v2QPJ;OoHj}< zgq_cl+vgkr%g^TRrJqf1XoFC(O&55iO~Zny!dC5tBbIzuO|8I$X7@GNDfMx=^w_BI zph^2&eT@F8s`<)_o}tbcT2F>x3~6AG+JJpDR6BGcK!MEWC}I>Ku%rkZ<*{lsv0np7 zeaK3ZvKx89KghPtXp3X8JwEAny4@o(*r*9rbg6W^h`%QaC`Tzm=h&`)SA@&-y!d|=cz<7 zuDNUFpCbr$9@{dURmt2co!-@zmOjuK1Epg<^v?D*QYhC>uWtqej}Phh;JzxVb+nv4 zHSxeQ!v(7<8t0T|0ukV>eg2(TvasJC1-s%=v9`ZSH^4Gmm&Pv&yZqb1b7cMZ+gN?G ztaW`<{l9-oSvU8D<+RuD{)-4$YT}KjKkJrO?IQP{CuK=p5mA95uJ)VUNRD7{dH498 z+E!}X-CRy=`V$Z~Ra`ZGw@8X{_<*dcC==WD!&CLYTaV)P&m@!5w<7x`Cl{}?p<+i6 zzuz%G1%eMI#6qpYXijK z&Bc~uK333wa(oBan1)q4g} z(Td&Am*7D3h|>iNqB3Nf6}meczb-5+q_fYH=!8SZbBpHIx&B@@x0DbrY7s1AA!BT8 z0&=7>BNI3VpN)a$8U`$dMxRghMZ5wo`-3GQ*tSdt_;&Lv1YrBUw^w5NWyRsfky{Nx zb2Cjd0U;|hX-x~?|8oqY-Wv|Sx4k^y^WJ!6dvmjH;%|E%M{aaEwrYImN!Gu7{q`PP z#HSUp$p#IlI&%m6P#Y|?HqH0xDfMt&V4z6$SOTN>PL`C<7u=IQ?szk&zCXf%SIYOh zp@B1*7Jk9On|Wa!0rjf`?yBrNPr;Ul8?Kul#x8-TqfDZgm)9kBBvb^WUWaQtfc!5R zM-GSe+!?EUyvNXcXgh3LttD#k`_5vR-5bE*Bn_ua?^`RU41VUPaWZfyKJNxu#$+;S*0kehaj%Ke z&-5I*K9gJ5&MnD|v7_L?pea}6V=w0_LyEe@CDcO#eK!X{w4bL`^ZK-_rfBwCc6z4~ z;=9I4Zzb1cODy4O`HCq0)u#gwfv(bI6QNs4hNy%PUpsj0Hq8B$MUnu4-ct(JCiAOI zI}_llNTQ}ExsRzI3nmVj5Ew8mr#Mz?a09$a^XZW?dmC?%?6IgxL26p5Zd&LBRFd|M zsrt*%G;&rPsj~;e;6ITy-_l}49rzK8%cx0gL#SQ9IDmz`olufw;-m{RuX&zQL-(Ug z`9#JrbBm0qEA_IS>~u}wy`#tdk8DgoJ4_CcqV~mjXfAr@1|oq05u`LtpEuoB1W6E3 zsbid^pncXpxx*c#(;0Wy^=|r_F)!X&8R>{u&hqqH58nFoChQLT$yW%;0SMs*+#6>9 z?*BCu;RKc@&**iqBh$|xB!dQWSgih-4g+j50AN~c!yZ|t*K{{J%jy=2y|zNg4nK3; z>>B4{FU>rztBc@)fjelD8yxDRxW`M)we@eb)7JE*-L2WB#lQ}ztxjypSZqY> zO!B0fR5xeuO(}16%Qyc1K}g-kGDO!7yJPsn;yWIyJ?-DgHmYqKKY{f7j z0ubRB_CIvHxWdOI_zp2~xvmHLsD{rOmTmCw?_l3aPkg)n?i;fMItA)hs3{ z@ikaU&A1dLRC z#_6k-oyQs!q~5|aYN7-0mxrU>OV`E`5os<27omTiWZPS0&kTlviu&w%#rt!M^7?A8 zxv;`u5_yy_Fl4ziWbIFP?{_Zrb?EAMZl+_{_wW5-TwW#TxEsoGxT9esIKZpV#NzL; z5g@hkJJxXR|Vfy#87y zmj7G-@iFI8=%+)B-q4sKIWkHbX_*eyG_Q&sw{~n#hm9?mO4Fcs^n{(sQi&O;5oL2W zd-zb=^zVbsUj=EEblGs6<+Srf9FC2K0~#!G%cang7qa(OEq3*Rf-+v?QF+ivTHx`N z3KMfb%#S=z@AQj#Z3_zonIB7WC)G@-1>k<#wG5Fgc8aK zt{*7KGC&-?Iy6|p3)7UR$5Bw9Z@IGFYS{WTm>r^uQdeHaf+*H}M$LTE2xtg!imqw+ zw=qMN1n9#a{p@LDJFE9q)EDcAzJTN`^u3;3J_5Zy94@ebqG?7D(K5qJIXfAu# zFwq4g2V~Y&y5_N^M0Iyib3kUKU`zK}qU3rHqUkh9!WlZgHZ9Qzp?yQsZ9S3kWo{8F zf%NJBTuJ~;_5eh*fkmQtO=7pn4L#K^P}w`8K5&qH{1b5WkYkiA^f{n^R<1@2R{Shfge+1Q?T5MJ;j-*7pK|*VvR(S(wA($O%fEs4a{r1M>OCi%07F(M;6*#dSM(EtUg*;S0q@5Lxqvf(l`GGSNZkc zc#81v&D|gORvRWZDNQR$>GzfYTJMgeHEw;++TFZ&Hvdxjt#2{H2R@@w`o|R(9jCAl-T$ z=V3Z_^nFadXC}B8 z|38|p`;n^u|DTJ5gj*^hbY0_?y=CTojcaD-W)w2BE1RoS*9w>Hm6a`V?Q0g!CcfSvY{@|7&wtaJHxdQ$V=|trX4IN`%iPn9PP?@7%S>-6@!@=DZ@l9e|)?OVc0(! zsh0oVAMsAc=M}iMeM=+7taRi|lwk$lM}g5Vm73t&4-EF%edbla0om{^^F~Rw)92ssGdBIMDa==}_-bc>JJO@0M`j+z4rpK)M{j-f|L> zd6t}c@$ZQeXv8=?8-3cU#PH`!@ZOnl!0Z)OrR%XkFU`8$sCIYna9^dpw-Wewk(`8} z`R%%aK(a7c1TYtukB%~ria`v0b0wM{5Vc z8_nM~4l~d9&z6-gj+&1QFDSdDH#r>N{~$Vd^(N_Syspo^)^JOh7cr1{&rv%^e?|0d zKn!zTecdNPar<7A)H!6%iU-2=DCoOUh3tQ3C{{BkLi20(ag?Eo@E>l=VU2@#xw(t?4cqy+zUQK!NpaA^MDisvNS111DrG0lcFVbX4xi6*V$O!a!Z zbEa3oK+VPK^3FuSD0)nt5Af!czk9T$6@hKui@R8jk+h7f9;#=_Fb`02iIK z^N#;&x;#;eblIi6k*vli`-LI!g<3YeYd5ZLB1qD!hN8tyyYL_ee0AX@L+2x6=7~$s zw}9=aF}*LtoJS!83W4F7XFoVM0#9Q}JI7kW1cAGD{2M&6Q4764!5;&$&4=~%mI6sB zz_fz+XR##_^t}*TE|5&T^71JK%M*&PngE&hsjg=Cnon8MZQEo=DR&V&P$J!OF(-VA zHE5q?X`iHcTF4^~c`=0_9nm-d9)UB0k!J5^J@P#cr#Z0{iSF0*tq3IPeR=bCG>}C5 zr9yJ*;A}b}l8V0NC8@ep;1b4=aFAyKl)RMw@IJok899GAi5m_`P&|E~dwIuYifq50 zljtm6Lpl!=$2<>wx1c8f<*KrNPb3$^)mh6%PHN{*RlXhvvH#)P8Pk4!j;#VT3_}gB zQe-J~vb=~$y{hMxdPkfWGxvP=gJ^v~j8Pik0JCm$SgOS4K7!w+6t<-{)3E#av&3`g zfts4%6Le`ZqVTtY*1Cc}=QBgiirahsuRD20{eJ_gwCu8O z3M<0kr9C>%E_2Dbft(-cD3!0^R8U=X#6W7Ey4x6&0lZNzWfH5Gw(sW(hMU3z8A1Oe z`OAaXHn%&S5Wd@U=lzvnG<&{w7)pGK7yNi$?x0Jbi}lhAC%r~p(ixiB@ZT8BTt6Xe zBFee<1Knr<*8!KQ%Y*~NXwgnW;Cx=9<#F}ES(sknKSMWybkpvl@I{;6MW@z2c5~@WDo#QuNI(C6a3NQ7HTd9G z@SL;N*}tZXBKZB%T5i=GzstW863H9n^VH_!9JipozSZ^M?Lg8&;Kg3^#bwAerQZH3 zTMw8#g z=G{b+?{a$i#oT~!k0(L_7DAC#8^=2v6C3Mz`-ejJ+hn}oyk$NGU`X(GFUFHi=N|Dn z$`VG4UINr^rKN+M9OMIV&-JyKcuijQ{^llJysz~?I%QrS2r6fD8Vv@U4{nIT=#yz{ z=6J*)NtZ0SWNqwhuZw$;4h)=rR|xb7$TK$~J=I9ned_t~by_e-@`18iMjPYp{}4U` zJ=rDDhvMuB)(aOuSkkCn{48HtUtA2-m7N4td#}_qjQmq|!oz#egr85JRQFo1(LWJW z<)!SmRWS$^NzT586E=EYYAYr#YMT`ECO|_m7kB$-Xm@Ush!IOW3)>4DwinNyBs_nD z8xed}d=Qkl9GGy@ROY2i4tf}J^e2?WsJORDeW~TaU04aa8&O(Rr|#oJrHOor*Fqo) zP^lsYk%+ecs4!H$Mb~FzJyVTL&x+!kBriSs%<}ctAnQ%2jP>`H#v)BN1Q<<9&kW^} zMs?SwYj^Z@*dbqhRL}McteAR5^j6$G&v&$y&(P)*O9y18iP6{-zD})DtK-RXi#pHe z5)I`pQ|S}p!(9ubrFz6hUoV^c5q~G4&?YqSxIZy(^tsuyKO>hVXN5$)OYdx410=u1 zzciL(GM-vGFy)j(~+9z_;?z_c8I;V34o%APOmQn-YsP2-oDLt-tE0hvK<{!2-XY2nLdt z-sd(@f?1YAd9`wwY8U5+W3NzxZFg0Mu27$D1Z^$D+C+-%e3@A^R$adrtk&yaXZcRo z;v@gc`!F{?#WTsbTc=PGC3z654WpgB=?pP{MHhd3 zM(#?7dpeKQ2dNq$r-|0LXY+=LS}s7+0l;E`jCV+gSnO*zcS?UbCM6|R{pEMO$qQoN z3s&e$N+w)8_nReG0>r^t{o1ualCZg_rUun7?hykU3)S3$;sT9(`0qtA^d%6Q^GHgI zu@M+t4h6j7pk%>}N>JNDXG?$tgcH6WX)M-Gyp|6$KnDC0H0(E%l)pC$kF(PW6T6p( z6wDbcKv}HxpvPYkv;7P%-R~;7icuEZDcfD5ZXw3qxU(q&>+t)QB6tO6ed7~+h*kO8 z-7v|iYL}FSrM%ZreRyoI09oI9^5D#x@GCxC*|=jShTf{$rN^UN)+I}qH_m2$y1Mjx z*w8_QQ_4%?cx!9xm9c#YoW0&Rr)SWos?|o;{_p$bKdC>p!Ff=%%JnSw4LwQG2Tiq|Fyll60PX_ZFIYDDq_Ux zXx97m=MzrZXr<*LAxnbKVx_RT-}zB_)v*fV`9GzX+Y4P6bM~a-H>A_u5x0OHw&wGJ zpb>7nh&m^y6y7$}-IaU*Mu8~;n1qYoa3iT7U5Dg`qMfZ6Q58bcb9v zxk107!ptk;q_(8$`xs*VBP=)W7U~95^ro0c%_flLy9S+qZHVlB4PnWSXPy0Dc+&h5 z6QvuhjfkSa(nQ<5Xl`GIlz`Ez=6}8#J zA4b!tpwPy+?3b0VG+jAnik+^P;8V(tRFM#weaJ#mQMejoOC6L$vZz4jshtc?BpmA$ zh=fBBCf87jiZJbaz}3r7nE@Sl%unb?B_5zLIX|9v$_A*MKp0F`Q2s0(Gw_~_o0{ru zl+8ia==Q-v)+Shmy@IN^L^)X!t3S9GF}%| zV0`-*cfyA};WKOePg&CvCrQb04Ie3Q_Zv`K%9eKkoPk@VA`fLqfl751ycOX_@QCs9 z+gzK-ca*Z{L%v!b?~32fZvLFjdGu?3xj$X5NtBN9{te}?QP{G~<#>L2#xIX0fov69 z+|qsTfo!1H8R_8KD`2jLDCikV z*7xNND2u5va4zUG*I7|bv}Tv=K_IEhMn6P-~?T-ZewD>g!`Yi=OQFaXQ^_|4+I9q;49NJ{tFi&gRni{vj{T|3$)o zsZt40@`uTO2``Mvd+l2GPX!&?u>3D~y7~cAY+7Z>=)L-k^4=E{1-zwyxI*sz+j;Jj zW$K+{q#q_Cy<-G^%gdLg9B#xXrmRq2m7ibuLFfZ7At92r16B9XV@5z5AKrgsT8J`#o#Gm{Sl z?f}=dd51?Chy<{rOG}f^z8^F%&VC49UA1ZsT0gcr=^^d>wTUL|v;`hU9Id54DQ`M< zvM`tP-Ckgn-?wD1t2>!AZ8~KmSJxEVed_9){;!Yl8F1Io{PzREGT&`Tfk@~?(Numz zm)7Vh?fiLnnRN8?32-`_mnckl?RfBSRpp<9>bAP#uC$c;Az?Y_AWC}XrzbZ|jROdO zr@kNoEA;hqci-Fyp6y7No;mCeK2kET6-lS1zL+5$O-Z{>`@HZ2aqz&^voAHTKd!Ic zdCjr4y|;M3ym9+ox%qm1nU3`I8RdrG#YCk&X{(wKA|HJ6gGeASD(t&8t{3uQgIkBT zx^7w31sr)2PWyTig%ei}6wY>sgO3Q6@mmK$i_$Z-o{MZ&e!7y2pxBZYmi^4&ld(r* z7##Sgi5y7~BHjQ9`PC7b2LC+sVX`Q-i*3spV}|O$-bIPS+;i<~pRDhzN*p~7jjPU0GpuLC z?7T*@_xC7Q{dS56TE>AtOMry(x9&G^ksmGp8M}W^2aI^+0UxSRpokkL{{Xnk27Kaa z6Bh$S8O*~V78*Z?dar^UHalRASEK66h@|=23B}1|hdi8b)cW4%rvn(karoO2|6Vv7 zs`6I40KVoBZNvXOi)EVvUo_-K(U9twIYz3?Ujj3)w~dA+GX2RlMxcjDG%DvKKsZ9S=n-WgpydJb5MQr4P)mX=QQ)*txPaAh!VU zbTAMMPxI{JD;YgwD=!;!o+#ndO&d>>7nvH@kYX)4oE#k;71wK=KLu%V&vPX5cN4N! z?fUEzp$Op5OX136ZpCuNt5h;z)bd42qG?R)<+MjvU-7EvKrv`d{X}lOi3vSDD8Gh2 zbksFQ z!LHu6PYWG(;M68v?CJfT>*+U zkHk|G-x_G`(`R-5Xxd11o$7^$+9G3K`XOnKrzM8v%S^O9?)tANP$>J@c5-dgP?`V+ z^nmC!u`gU^RBz#$p5%KA{QL5AgC7Pgd^TIJ9}w)_yf=0oo84za4wUw(&aIoiMk^h+ zE1fO|A4YQq9nN0tDINdZ@8HD&L;t3`A0(McJ_E9-09tkrw%@Vg z1;W#%>FmPzX|IceHFmlE{Z3snfGb|8sMs zHsoydTyKg<6gq3YmGML{AttnVe-utlAUZb%2@dJmSgMR=k zsiToad+O!@;nDv9`HRJx^T9l=TLZPayoRxL4RKUp>1csoKczkRDFA3taG?#fmA~B{ z=5D1#DtluC>&Iz6Rq4BU`-&nv9uBdfUh8ayv%>coB9{?^t)n``oxUbX+iz znE#@gs(@*+b9U&1Yv-yXcQ6lNZLsBdx+MTt!-D)z?ANSNr!ph=o2HP4&;_6A-N5FW zA{E|HhRG+#DT%sg z4Hm^N>uInFWF%kQ$w1%q>0-nf10&-tzmx^>4cSC-S5j-9mbBGbhubIgOW(@h#~q8S z!0Q76`N&nQ$bZP%SmtPB`riPS55S53v{Yapq%%vNUjJSAfp@s8*4Nj~ZDU8+B2}Aj zSx-SWwU24e^^-^?qte;#+49Ck*+H6kr2!rJ+GnF;;2XH~9tq1v{7(y`4B-MN1?Fh? z$H0x$$WqLqHDk7gmFGz|4C)Omi;;YRu0;UON3ty5I+j z0EbBgO1OB>ue1*i^A!JvmSo4&0}kkDn#bgNAsyZk0qG{o(%Vm0-E+UjyP?egeD22&>xzTYDHU0BOR-{bIoqnZ;ayr*Og(G@ zmDKQUA*NHqtJ8-li~+4aSdXy=R<<~uMZq7okyx~>vfn!QHmQJzxsxjR?A3T>VLS0 zjkkT|!qCDUnoHAVs{mv}9#u){SehCYt90pP)W!~Rw#s;Fe!LERPm6CEnvQ#cOT#dm z2xuWjT_H(2Jj>=c1Cc(rq+&oCYNR^;o7dWRA9*$BS^dV9dZ9I@mh*4*CrJ(L-;>&m zJdwGq0RK&>kOFXrhuy;)IZp;OZkAe%MX8G$jGNLMEOXF4X?uv(42@lDH|BY#_FbMc zWh%#zu$$)o6%J3R<(k;}1KW3Q#K?fg_EitS772J6@)F3CZ2+&r}Nb^uOG4 z&waW76hCHVRX%!hjvjk;vF&{^j@()iKA+iJ9s6Oma-zuRU86YZlps-@KbiaX?b|Vi z%!%>wL%s8VCy;=B=bAF}y6v5d;o!!GnuC^!DY?$*i&f53Q}9*VHr|0YNHZ?)94Q^0 zk^a?_o4yU@G7^^G-r@+@oUZfdp4%QNCp87094ZXR@BKDpO!J|-2oBofJndMY^3FIp z?KCYOq3_fXUFB|zgFNcQOuqZ@jJl-`;Ie~0i;p)Vs{Y`K?UjW*wqb`(-0%7(<;5r< z^7IM@0)<`s=o9*w9;5jgO6kr0?kAwl1pUWFYhwKQBY4c64a#qFydtWG+R$-DAvGGi zxaCcN#+!gM5sO{1t8zIxd>j2GcZVP?WYrWfZiocR@onk=P7;{bLbhlj9f|;XR@^fV z%9lWzA%H?k3O;VPF-pO59b>b~ru!;T&$1}9MxQdFkQ8?KH^!0=89_fl79@p;3op5; z!CZ|BkQV;u5o$Y6m*sS0=2Dgkg~nuxEPc)(O&<~|t@lDgC+Dg$e7Wm|lmf2}P{tCa zCijF7X}g#TaLCk+RIT^h*(_N#1US~2b9~fuadic;sxDrertf}HBYUQnfqQeMt0c6* z&6;w8xf7A}AChHkR#fC*C?wbVDh7NKq427dCq*}*w*3gx)~8}qlQWZ(t{YdQg$dgg zat+@7nSo9=HYUtPi1Gukez(BQ*iO#i(=*c6*8=MA?eD}k3j#^@&o%4HO`LTQv5{OD z79ZfvLuTB=-{=sdv7-C&ZK2oLadR7OYVkNhlym5xpDEP zK0S^CylRSSW3u`4`cqJ2uOL0LIYiLnQP`r{cXf1~bTlOGU2fU#7m`2Gl@HTFO14A6 z6(WIzeAv3}bMmE{X^ZFWMYC9S`=uP-t6Yu*%fWoOzbbOUR(_65`_ik`B4o4|Hr*R{ zr+&hr>MrFFcbhoyF@@%`Kh(I&C$1H!y0Ns>>O`&l{E?9n5^ylMA&7&ighPH+jm8&M zsXVCG5`11q9b-eA=-Ufbqz=1s0vu8+_c4a*7ZpULk6UG) z1z;SI?WqO3IkFH;hXs>?)*KArFN(1NN^EieSPCQn)Oq@l_Wfx= ztM3F)lR22UW_51V`mFYAl?U#1M6nT1wTc)2U2hIGc!(<>FV8+Z@+UneKw-g6ulrChf?&l1Zk_X1jaPQOMixg zPfy&;3EiG`@!uw90Iu~jVDx6*?`v8>wB=#4zn)vBTv#jVJX2|J+G`+iC+|W|y06_{ zPlq>dBY1zI!e&Y?^$Q>{&A`B5vLpMhus<$;o=-2jBgY05HnFoe2D}Pd-7od8=JZ+3 ziB>#nnc7-^^>~AG?QA*tBDleGF`QWU$#B1oCYlCV;^3IOq|6~moc2h|_2q5`F7%C=>k$bkZ7!F``n(AvEaWSoFerpGCT^~5u-*?@J zXy97~c8gJXI!;Qi1n9FFN*d7Clo$4fUo-}-NgEb_Env0mcvE zUZ|jo-ZGm~6g)0;7^36)MUj<|Tc{%rTn5!pfs)c6cJU^rH}o4(8pv%LJXiAb7i5B} zT+%e<)14W5u4p6Uj&BOdy06u)SE2(IQ~O@O76Sf`x#+G`sO#zR#l1p~y{b9!MNWIo zou~N*Tpzy88y>&ewnJ+4vOh2k-kc-PkgYfHApTMFgnw?RPF73opq~!-arfODTGivp z0$!)WJQg{iP71NCfyLq?3gmYZ>^tYT5}UVHz~T0Z+{EA0(G((bo%;(2AZMz z;|uQM8{(KbV0Oo)Z#%MmVgR45ou!Sq38T3_xB%;pbeDlvx|j$lXHI5qNgC zj6pkKbX%3`4>Jr78#l#0Ex)&kz@UqZG?FPbCMmey+4}I(?gJ0(0M+}L3Tfu|m*1f& zF^?L`*e+2Al8p_0URRc6qlgwrzfahtpDDS*-;(DwT#y>@sZ?uS2u=WI6(6zz&~S-nHXRLtQoaeUI=OZT90h+{Fyc9%JN+@L>*aCm#>FZv$pmuGeRVV) z>{R$T0)Un;87IG^*raot8qsBTM<8Ip#uhEDQ`sEkh)3^@hW(WzoyVT^yYiEd8P8Xn z_fAbS#zuS|q&BU0soPghoZTv0NE=9((HVL}4jMO>9`oaa>8?*tExd?z#+$mz2e1Dd z5w};`1wHeXUY|Rj$}-TL_x4CzHg9))x|kokC{LAk8};@1?xYX-bwe4?K)DYfp-}8q zx)4<#+fa3uOX{%fE<*z!I2OzGt*%`T2coU(T`Pw$<<-v)o)L!74uB7-g7&v60 z9z^D5AB4oT8PFjFJAo7$97>%-KleJc?_oFVGqQ^TPLLI9cBhO;0Q;ycb*ew`Vj1!^ zdKhi8wvnnJnD&qxKe>Kg_Di*K_(E8f%as>}|Bf85a9N9{YZrqunkj9LN3r(JJLkEc z{!OG;#H+Ux4K@@!1nkqM)C^wmMymUeuk3*HYjiN#+ij+?&T_rfq?pK76DpBZ$9K!i zTO0@h(MhLBl#u7;r$!2}YuCHfA{Ww8&1gX-chcql4A~vLsa37-&eF^r+9z#7R)IAN zImG4Wnil*gqbhAR7-B9UYG6F zj`Ag@$3Dn#muX3l8WU-vLe*|yraD)$r%<4hZrl&+*ssn@-x=Pi#SDEcZfI90&tP9$ ze8E8??Y|`SyhH6_%L&^ZcxO|ky}DbsB7Qgo&~SaOZBScMG=trQ9oS?CU zeDYB!ZA!3p9;d) z%BcO5y2vIJ^MV!xR9xFyWqw%Ppp>QJ8lu2Hh;pZ+ZdHhOcpj1K@d>vysztgbmtSNM z-cWoG@LtX`3+Mk>`vVx|)gcHes93}99bWeY`*#$zRH0qIEDUFQSCtBQXL1#TjT{GJ zjN+Ue>#8v%Zszo$r+&StyiFD*>x{E+cOYTr*X4!7P@aABf@S2!&iUb_Sl zkB6GKN+T@BjAiTa_`TTR^>X>Wzw1w zK}O<96JMs^_Tj!SVCrfq7^t_dOY+ZerEiHkdvbDeqO?_cG3!TY67lP_iB{MjRyu1% zuO>E~hZ*#&%tKnjAF({wGPF*iOj>x2N59Soge;XLeH;6JdnT{Tvak*N(jdjbdV+TVYnYIn^lD1L?3nr%^Ia%jR9K&b22q_mC=|J&(| zWZnE!Ha-vwDmOnPHtnV!O^=QyyvTsKTSt5W4UEdqwe&JUdlJV65A2qRW%Ety1d@vZ(}qb>F->FO8AAg8|cz`)SzjVzvaaX{B?Er@~#9P zamTUa-5IxlmgbX#b6wVJNT7(U1p-}0UoR?z!vE+x!6A%&RDEu2g_FqhZ40=PZ&&c$)xyj z1)O{Nsr>1)TQP(f$q4nT_mEfw1=!5+ire3bpaa!;=6}eChC;BaC>nM2Q!WA)q&>er zmMqRmyO!H|(ZdFCtj2p~W5fMFVoOwp9+!;rK8Hg7kX0WVOaKm`rot!m+agyr@Y{|- z`8xpDQrUVCfz>@o$-hgRRpEieIMdB?1GwYd!U*2BCk{wv54yMBFqK*e*FTB2`N04)4rsZ$yFM)tKz~hFAj> zuPaVK0=OZ7&w7k_?tMNvb8hLiR#<625V(0q3G24uSqPTPTfrwbnbT9mxHCC&b%Xh{ zKi9pltcu2PD1UpOOFP~EoPn!x9SjqO0*TbhOfcMUNK7Qntj||6189v4B*_9>Oa|jf zJ}K=_q~_j2`1ix1p8{X}!n>a?QFBhfb${ivYGZj=J9 ziU#gzf(~FH+|0rXuyR1JE(3Jx9#n6c^kYFVheCNB$=nMV{0F>QgGM%)6hEr0Cr8<; zVd-G1R6l@SA(e1_q@NGzl}n0*PP-^dR&nyKYMh&k%Lp~>!Q$u(n|UKAup*q)ODm;C z>nezHL}dnUG^ouFzGQO^@=y@O&orcab#&2A-qd<)JiYQ&=KH^>Rd4ci&`NQpS!qII z*~T3q2FCp|U#gF}?p~%JVcCfc>hk8GlR2xxyOi&J;cslOQ!5_>f7T_w#CJYPO-=Q- zZ1$P&i0ae78Cz9>uc#P|>`orG2gfL-mvakUHl5X~znvrxxHPCWk>G>(gH4RRffOef zM#kkgWj5SSCQds8znBp`SE6aWIx+X|VQd~fBja)$S*1m5upm#XaZ`^&wEL6oN?ZF; zPxJ1TK$0O3EQS{!&tweMU$1A7d9m?8F>?T-hq^IewrT|0`(M5EC#GzbH5+}0hmtGp zr3D`|F4h^jkW?!-4LA&gY}ET)$JcY?0g4xES8iDapY4?^U7WVIK6G*(GO`hdF{i@N z#gqk2T6BZBULJMihZnA!VUNuBfn0NL3Uy@Yg3NcKRvMRCox0dbW5Uqk6VLv4W10vo zwX$OoSfC8qrWXNCDI5UHws3>ED}1-0$g-y3+S1jm4`+tvh=B6WPMHRWmboWwrjKyCWDiN(3qaea&Yj=J_j1_Q)ZRncn?9f_)XN`kQhK-r7q;5 z3ycEf@QeZ31O(sVPof9XfHBLHipz}R5guplIYPYtQU7rOD+jBM{;LVT2^E036@wPR z^2&dk*TZU1UG8qjeod-vaNj$b&rLFf}W2gHYF5SuB_c5dF(fxko^aSFUsc1q!Vh7JM1+whygGB zor_(lS~kuGzkryhylWX6j|X?jgEtOb-CPuo59LNzM+Pn?%gyV321!1zBv|h_qs8A! zBlv`0*7$SytPQG@j?2&gT!x&s>zzk`h-g=jCI;`XO{n)bGrAp*^PQUw?S|MZ{iZqp z&ey!X2&yxez|D+cH@oOepZ%3DndiyPM^NwJy%9Z9{j2*Ys?a_hx3z^Q{V%{Bn=E)s zLDlXFB2RwG$24vyE?WN0h2EvZMXR&%E5eN;&D(F(Uj|-!r1eDW?mY~aixz%2>IzWy zft+ANiFs;XJgZR~1G_i-S&+J9KHu@XoLBkUJPn}!1?HkyZC*Oi`r;!YM66 z59&R=NBiQLKSPDOA7*hQ@_|T-tQ|{ZPs=zXeiVDy*Lbh7u!idjm`^X%zW47gy?78f z7u%VdUq={k2t3(u6{5DIeyR_L^(FxI?*N)IK%)=vbSfTUcNRC*)krY`6qte16tllZ z8c`W4(a-5^san|K>L$iiYpAl)8#nU8_(NgYaO!EMq4}Gb$r^I?ZV?P>N4}~CC;H!ZdD`p%^ zCqWtBrF&QXH!26F=U3|T$R^x_Tro*kZ;mq=Qn6Wgf3ygTOJZtRoMB@RSfJ`v>zaS9R>F>((&HI^dE~2%oDd% zJcIug)`FK@P4JGiqUU0)*VL5V%^Q*w!TbPL3-##A)1M;ZXu&+0WklXH87#Vw75Fb2 zODBNiOJ*~>i|evuaRijn$kGCx;eyvd(M?g9hNd9KHsZlO#kq^a_KU~RT?SNgm-KSzaMX%4?_``<}PvUgMwT5{Ut;28{2{__)wN~upPnBoyW4nlgxj69$ z!uYQ(y(uep$g_nA;pV{A^;=38b6ayhIiGX!6$!X;3Ww~_a~5FaeFx+Q(4%bdcs4#a z-w}wRQhv#TfMgj*{Yo^zxx`X&FGm`_?=YmG;GG(_9AL;(^{P zx<53WfezX(UO7zbLr>6c>+4PBCt9Qfe0uJJj)g|idMI2M0j4stNl1+|c8$ccU(@h2 z`>_>DPVttSpT5cs1Eoh&Alr%yZomzGiY(CFI8!~@?vd< z;D2jC=^})&@nYiw-~6mYnsiu~Ge7^$$MBkqfwNI2E)qOK&n6hp9(Gxb1@`$j6*;Ex zoW8I6WK){G?Q{6oo7_)uy?LK( zpDo=i1T;)EKuM~TM|ZDR|ATk2*Dw-P%wpjhVfRi;W zDDvLfvj(2(b5jJrxwZ66q_S+as8yk~9r(=;(BA<%vtm*TpfbjkaQj$dBpegMz{R2_ zB|ke#!E^`X0f>}Xgtv+T9>&g(QeCNU0=>K|?jO^3J{@t#b=jV*{byH=CO(jn8F#3! zcF9TN>qHJu?9!&C>wIB!^XvEJD?e#!-kcswQ)mc0n%#kVuv}_+>B-CUMDO7omyNxB zMSYF;0h#dnXjH^@eWPq_wVhZ4+UK(!xF)7mdgqN+zt6>JA_|$5b6R`9Wahg*CD~pHys^M;o*)xI|swKn;+_f<~wAkq$~Tp>@x$lyP9`PgUO#kX~gEa z7F=t^t1B16#R|NC81BRYRo2Y#Tv3mc;7;yg1=Kt0yK^+~sHk2@E*0+4eZ>14Kn?RX z){o2_bcjwGHL(_b>$1G=w4C7WK~4&;oZJ^nc6V9B3`gw%{RZ^E7d>EDi6Br=mut2P z{mcwF7!|BYoivRV0q%6lOlp+MVs8z!rCty$eP4@5NC@%-&+WKb`p-v=SsktU5oR3t z5!tx+jn9`x$PoUz!o1K>r8WxX>Mu0kso+)Fd@0lPDb~3O+&%J_l&^K6*}2UML3juC z)3AF6)JX%IehCZT2;8(mk2N0>H4*q5+@DQDXX!CwW~1n+>$tD;SdkZyM=~e?ktaos z5PKqCUX*79Abh`2VBnb6&-!p+c$U3O<3zu>F0LdD2vybSl8bzt-4U;y0U(X4yu`Vm z098(QJ|C_D!|XtxM)(y~7HLS*v)@!|gO3rCFX%9%acf`}SI#FDsTgV&Aj6YM+3_9# z>YVT<2m_}`0X#)aya+`3n)0_#u@m$;leMygPrp-S!8N;O!G$+imlGsLWb7ws7YaOP z1MYya#=yHy;QRUlZIJdiVM)gJ>l=iNWc!Sx2GYrT-tYGIiLEVbr43S@*K+Ap^CyFy z>73w`Zt%ko>-NMg|^#?%XP~I$!@0A$)$`SA6jyx09nD-0bsM z98_;8EAA5q>#O$%HaAiep{B-vWhn1rSNNh6K2v*i9h@U38vKp41Z5#Hdf94L4f6D> zi}##d49pvSw)~rRl-e_YEL#Ph)C8~A1TBsQZ-F)Hr(o18nMhXk9-+D~)tWH2ceacw>$LF>dT;%O6zuLZA~))p_Zvmxk(90HKDYY^jK^l2S!}lvI13G2I1!R}5q^ z>fc{sDf|RFA*x*QikAODEAHhEJYtg2`U#*}G2K!sUmxC8D$j?V+AvM$4yGeOTXgjlvh8m)@NUnbfC&&ih6{j3gz==!hBt{TYan{rVIZp zpg|#0gBMe~XP3bYCn~`1p-~}gcIl;k>`B8|!w#OVy=)${WJqX2Ui??bI932huZ_5) zcQWXemUdltJ#H8YkX$$cz_oV@ORTe zvP5shh8iG^+WAkDxV0e?H*&g-5p@m;24WL`e|gL2U0z~r_>$iXR;C&9$f9*!Mc{e& zr~9P6bxz-f?oaj^zEz|3R6QHYnH~cgp*xrIFhS{KB|7EcTbbwcoZ$sCV%Z5D3cm62TDnrA(rEI@ zOezB7@YTFj>Vdd)LfOX2$_omv+fG*j=%*Rrk4VhRs&+HQRqHnCy(WVK0zQwBs{8MP`Y7Bw+F|>rhlIhqy08pO=sDmYUvR! z8El4LpbQMRKE^kW0x@@7N0GGYT(Ys7Wv!EFN-4PB`o9upMTItv(p(36<&QVIzSCl| zCA(y&`&vVCQxKRC-EWKG67y8baW#PL+f;-sa7>38qeXGm-F^(f*(v!av(3~*#Tg@6 zN||5W0UPissa>`CJyFX{~?7v7E9)!?jwS`G(Lh+YOrIWTR!l$OeI}JQU zqQcKQf%l{1%h>5mg3(t(TBR?w;A?ZdTVb+@L|D=x!9iziAimwJ<}8n?oTMB>Kz zpWsk$!qz_i$J}8DK0VROcX4k_F;#0~7Y}!vo=)jh+y;57i#@kPE)1Lhm@^{UGJt*K zxK8hUcci$Sy=njCKaPHhqv^VxnT)BK8KIraLKgJ_ZoVgf{``4wm88u}+FG=dP1Y_W z`E5lxk1<3?gWQ1=Lh^{YMXY9ZuY2FhqRgb`WdGeQ%fqIPbG=Rbtz)(tlFxip=3!Ux ztBo1LkD^z4zJWAZRZ`boGUWs3D&? zLoTB%pP-g_62I9O#@`ED5WqD+!_?ekLRnyKgE0bJ03$a-Xxgw(aOMYZqCrW&JkPQy zfCB~m22RKjK;!fER0NNd|J2l!)%LhQq|tBnIOfCKvzYkG<0fyW7K`UY)z5UCsw_V& zd>rhi;cA8aHURzm08@2wWEhRoSF-`sFX?87#GaaxSO1d8@QKq|0BGO0n!k?Prt5T~-J(Dwc^3ni=CH5wPt?5D79+QUS#nggfAv zx@Fm5PLJd2%kJkPse(5zpX*Om^;LDX1I|2`zTmJ3M`Bgk*!{0OwcmlL@~it_Jd`j@xOd%~>qH_kMLZCpP{&LS6Z7?45Y@b!i2jcrSSC zHE0)c`k7Xwb=&nBi71~)Xd(_P3yd&elC>!4G4AwP70GZM$R7Mm03>ek{q|fa#>UtK z-zZU0LiKg>V`%qo2}qX6P%c-WhS!tdlDbq~Qs~IX)1bv~$VYEUDE!N4JZ|d)g|d{! zy)fW!G1g~betl;kxQlc$)64;tCO4+-{7Q5KO&piV8|!OpX_+$zYn1~*D>k<_JG<%p zo3~d|P0KA6KBU4AUNvo;C|%%#_lEMKuCN_)H~U`~4!W7?f7JQ$R;PVJ+JHSshy_i6 zlJ|)S#OF&(G8I<@ycujN9V+RJtzTGG8F6=E(u2&*D-m znLu=|Io|WL7*od?l&m4cvG^MOoU+LRQ9|x=X7G9Q$yD&=;G3o-ncCN9lftKM&2_#z z`JeCSvENY+w^jfcHRzlHBil3$_IFNK%^;6#=vrP1bQyGD$z6OpYzBhws`~jIjp+c! zn0O=ZkD9QsmGFFq(-;W-Hn8RB1$UVNJ))m zAoZN@@46l?{@|YtxOUFxyyL!KHxiex4^U(ZJaGLsCsp`!!^3a&OC(?xw6(amx92lP zpeg`&waX-xYWxN%A_6`UJi8x4c}Lk3h?P?<@q!E1fKN2eDu6Fkhm)LDwZP^-5ED5N z$j$#knHKF|0#0$%#op%)i)e6%7<~RY5?tp|DIvY!G=1VPe?XNiWICPVG;Sn+5}DoN zwKLr_ptEVk`03}sSyWUMUcL%Ej47nkhXM{i=e3P3dEDopCvaIXyO%Tp&YG)DZl0~Z ztTwEa1-jipx@STAFZ`vSD3Txg5Upp!6q*kjdN$!=Uh4eclHjo-HLrjkUC!~F3eSJ^ z+i(&ax(N9Gh=wA8O#Az(IkqhoGitZ&1f>j|2~P(ruWPKc15ebm0~r-;0EJI0lyIzO zDcP!>kHIKYedgC9W@Hrt@thPr`T+~_z1SlFL*v;wOBw47>^r#^MO}txE zGobBnxJ;z12A|;rrmYz3LqlT$re=hvx5(_h(4W}xhF4Bvx6lnQ>+XSCX{{JhR3u%s zp^#)jx>IP%3rlr?-{sx=xIYce1{HZ6niRC+URgE;WKYQ(5>{q=_^beUoC7m2zczS; zWzD|m6(>-lt$#~L4wMV5q=n{rSgcV=Lpp`%5B#t5$gCS&(NS;yUCP6s#2%p7I zF!S~Ge;n`s^3Gf0?Z^*C;GPjyT2BYY-#3@e2OSX?`!K13C=|+3V^Ba6&`1JBHjsX< z)W~9E9FkwD`cr@ zco|hZ*9RJRRgGphsi~>WTTjm6=O(I7PGFtCAbl-iPyu#6>uiv{aPw<}R{z%0*OIkS z1u|dUdFkW z(M?guw1VZw2uE?xMr>xD9t4vBDcibd*UuAZmxed>1*f?a3qJ1ECaf#USbkN%ltTJ? z<(>zRY1LgUnM1!6GWn(sGid`Fpg$0V-_vOE>r&;$y1?K|x`YIOUDS}YhN_C;a6`HL zFPwc}po&0fCngVU1@u_b5`VPsZZ(HVNlJB`a|ONdKi^K`1v)M^vYRhYcG{L-;S;d^ zJG0-oz$x)%jEN||AYD>ZaRQJw!Vy+kir);R?B3fPXdEv+9>s&(!!IwA5+c~y*xo%U z&i}KYfGYcMVJt%u5^?K80-T|Yo`4qp1%>!71{NTqn`x-XV>2~vY2|x>T8ZRAr>d2c zPC=~5amAJ-&w6Xc43%JVsq@()-H`nGwn0!|Ep$l$&?tf`!fe^F6ed_+2~BsODznP* z!vPWn-47WA!}y2F^IoR6B$TDOm%r20>%ssGl;RaZ)!-91-ZbX78TqQpK%$k?#S;6~ z3-8K0PHN3%py2n0Ut2V@cv={oFYZGGU0MRFO|$Q}12afLpX`@0E^OZw3`tdIP>4)W zPZH?+#+a}Fmr`Zpdw={>`>4M{phGp=cfTH_Exx{vS{RaPbj0dz8quOLs%`NmED#Td zTyQCA(G`vms{%NfkrrQ6!{Go|F%|RDIgs}03x+%AB>Fq?hk`APkex)PlvHISmz@SH z*ru880F;v?ogN>depmnw&RDPjy;e;f!~zE4KnXQ}d!L1>Hn!TXf<@VgGq2Tdluc?0 zy{;nSP!pr{{UzZPI(c7g>a8NbNQtMZU8Yv0xaQ`*7lQi%Fd9nl*yvJA?{fHuN;yjX zpffxLVv`n~r^~JPGJyk|MFNUj>tT{WFgJ5LAE#a&{QX08xT|=T+5r!tYB!Hcs1b!0 z0~;aPD};nQb73M-A_k|*jFRsDo|K1toTjHru}xT%;%W)o*am{Lo2tq)ZY-Cz)(`Bv zRf`OUy)e{Mqj<*%~~zh63Ss z4~>q%XPY1HMR)eeuNmhzYhu~Rp9`f>^Zl*`zwLd}ecsuokWvHZtCgXP!?w1|@2zW+ z>18by=bi3;E8w;X-`|+gddjiKr!^XJ`N(Ir5bUQ*g?C4d@Vj2%d?d2wel6+3p+eu; zh`RatcdnTB-9B(R_5JC^khjyqR7%&wfzp-=|G)BJnGIzJ?M=c-W4n+P`Z`DV>nGG| z(=sh|5rqrapIa|4oLM_Ae*BbL2<;pKEi`t6DYRDt?Sb6&h>LAzoG8juL8*lazq~= z+-*h^q90UkwJd52esu}W8-A6Sls8P6;!{%3*d1;&kb*$Q)ugV!gnm)2Ph$Q$P{Ik% za9hKqwD98F9{?e?^x};_l*%Qlxl;$=i7+hPQ>bVW6VkXPO22;m+u-n|@UUm53c<5- z3;KA>^vjN|{|2kyT704=%_~|fax3AVH0JKb!WpbGD2k!nO1}wd(S>|T3jS#NTQTbK7={ukBiZN@FLYlOu+KYF;3@(4f5#lmt} zULJMq7igm2EwU|Szkq)-0;+1~M|NJ+-NXK9;l15pQfa_6DL$}F?P${CQM|*JrNILZ z#{VZ%*eYj3KluCv6~zYF^AL1=quv3i-^x^<2*~UKpZMHwZrVT|$pfWd z!Lgv~4{^K}3>V`v<@|+Ax*tqHCYG)-ee4&dQ>wSnAlMdZlvoN!<(ib)GGFacU&b@* zX$r~|dRaN$?BxS{f4AcLR87Fgaqe@%ckYRXMDg?q=8@5XF~5h-flMSGWBr7jeWEc& z&m&X0E4A;&0Z!Wy$Yin!WFB6AAAz=W)#{_U!R0xdz!9EZajgZXy zVx%ep?v1dgPnK|=(p<%vl)yAaNT^jOe-yzdIz391k@;`2qW_(KabuQw+EnQ_1Mjp!A(juHuZcw7#HfGZ9hZ{#c7W6 zfqr)I;%#tg>?DaYGjv-^O@Au4e;Ra6-R>-(zA&@U25vG2N9K&U20AuCP{fQewZ|Q{ z4s=j&<`@nnKzZQTc+~{Wue$IL->lMJ1rG(TmEQ`w{yG%2#v2nIoxlk0{%*0gfFfG1 zA@SO&i|(O-bFe|m|7lJ^!+UUd;*DRB^Yy>2u)u}gU3L%wT=Ao2^xu)#5Mh(Y>eenO zJQem|kp~|A`~B$OTDr57R(fu3E@^?o%*meo9`#jG+eF}${$W|RnGZrbq-*7U>RW&FST3bD2;0cxoY*nUn%E$4T_77s4t7& zpVB$a2dr9LFJ@mvULT&G`dEJ|u;l^c8mwN)$8b&;d|fgQT;R0|VVsUAy1V^Kmj{Fw zU_aZk@Ig2j!TBxGO{QXEn!gM+_lcjCr+_W%H=ev%V&v{!Bv|w?+*WuU>CLT;dKJHt zl`C8yECc8eD6px!X+kVxioOs$mFLv*2>)hefW7aIa2$y%3lvM$2z?PdI?V7`L!>6Z zHGg#2(2b;ukCUHCSsxmdrb3`ls-0^c2cj_Ko(Iz##Yx5_Sxy?E!exMPpyn}l;xX;h z+cU9NR={`VPwn}NW~*S{lDN?~RY7Gn03J<2)=6VEKGXA^AveM8>fkr{NcmSn{l>@L z{gvdyyBm>}fouQjw;IjQOcwCg4YFdbKDg?rfhgy)#Z^9F4 znI#;Bn$yd3^dlXSV6lICYG~4YUiJz>1`5LTdMupM+9>oSrUR zZLU|exjH&uyK}E={YFuMnu^=d63r+I1ymt7dfo^SAm=Jqc;%J>3)gw84lpl>iYevN zJS4Qae^|shpYMV-6$R?W+<)^Sauut-^z(dyj*eqEsjNs8a$SIRmiH-Uf#V zhJP4MLc!xQe(VXQ@e>r@)5AWy@e!Yu7n^UcW zf4)#iR%c@*;ZPyrID%_S+1&HIotuD^6y>k~h;-8LvKv*m-Tm`5GU$3Ya0bLV+ra;7>m+=^QrQ-o>~#5W zrqO99U@0+o`PKRs5TO}g7{>mFsPjzS93(T}$xa)vUKg%l_gTC;7rK_=n41YY9-nEf zXivHoxw^k(S8WnJ4&M#>^G;SV$8uomLfqDT0Tv<))00P2RUtupYQq$Mc*X&Vpaz zZ*ma>@)<+zdY=8m6s3(|bTn;cYNo|CivtmQ(#X&6zxID3;uw9EXSsGbu$R!#$Sz)M z;G z0T~>)$$PubXme3SDlGksRx_&UdP!v{^WnLtaDb0|cJ{+Vi}K?g|H}E#zK7nAjyE`| z4}G&yE!V%?pgk-TV;ud;EZPE&h@J zKDY+5Zp;ExlYaM+00!H$b7x;;u7$y&UEsMz$GDxXCaoHf!-Iso3cx-m7?rxyDQMY? zxw9f)&T*8h5OaiEE|Kc%EgX%42AfG`eaUmA45>v+^AY5`9RK?JuFGKE4!uvSdk5Q{dm zX5JKc`Z9?<-aXPci=_P@G%0My>tw8bbE;|c^>YD@2bJ}8BLvTOkT)INgy!m$buIMO zQZ?60kBv%j<6j`b67`|az_XBoS#8i%N-%%eA1H3F+&#~}OpF05?7PkjvhXN<_ddGk z#SGv98e!yGV#mQxj#lf!K(ab9Pt^EjwGbh`EJQS4pWLVAx+(s?OxbgtuTqL3?JPn( zUlSR~iXbv7Y)(#WZWL98J-`AVJf7Ak&C`NSC`K7|N@DA96W}wnD>fobd38g<*aF8t z#ynCRr>pj*7_`|C_I(i*2**ypVL``9ul9W<22g8kdU=q?x$m9Ezu1qyQBqU z)qaE~V8LO4R#d7po;wHUeF@eZ)K~9!TYUDr?gx0|=kGR}ncqu33;_3~>+^Wcr;jcd zt-7u!V4Kbt(@(+5`#g^HKQP30e8YD3%^&q@Xln~x+E(&T zcM@_NtZi^Tyg}Xn-^OC{$%6Dkig0wrLaYDo=Gdjt&$(Pepx6o?THyrfS&m1183(itvYS#xH^Z2hOjn4M) zZ_d|2%v;QLmo+G?bzX47`Y#hId%bv&3jA$xYMYEIs;XD)@n8yNy9<<1p^JzVn2|^z z7*Ys-3{FRYg!`hkdYfE1G2fd_a0OOLp9@DuLlSZkR3BrQ12vUND05x7=q%Tw1lz-@?14hOYko**A#0;%EW4aTJs)8`O+FNB};d#NFI?aTH$QlyfQ?vdLJ+h_VH=Y;qK;s!5&L*dxgwC zpT0IfNK7|2wzi_?t1~lc_1xNddiCq+9pPxJMor1^g1z~*{!@%rDy_3upC zM(5oMWX^4RJ3A~wXY_j#`0OO(59<a4>9 zFvC3)G+0*!4&XSdS6+^a`}z9m z{o8Ytba(TUfT+0c0b7B5K2|g@s9Yk4QY`5b=aMKw6Z29Jb03{PYVtKCw0PjGR{ZN; z4y-1RL)9zFZj_!WF%9xv5|)#0g`~p5Psjb*D5!AZY022TC#@Cg^Hkl7ar8ObpR6P| z&gbh~8aMIa%qiyj+mK0{-|>LKq2>MRzEAY^Fc{BeLn}2H|Jf;n*2M#qR1zgrc@6!L zgueSQmmhNCH4m}j>%a<|c=}TzP*cPcJs{Wk9K1t)+sG|`aHBWVl|zN?!OAPw8j#!$ zv7D~cF2UA#1Jknve5P@huUQmMU4M%^QlcoWIEg_&{qGY3Ajwh8xry4sMO9$RMIe84 z^gmS%AmWX@Ehd$#{i)#{mpSCSBM+6D_&BY0H{C#+1Zij7?H|N|-$c1!jz94KY8V zFZtIJ`yA=o2NZDuo*C-!wHto+XQHSo;3+Mlp0|2ejSMQGq=Z?aVrto zLPvZ_7F(joqS)}wMZxrd9Z9Dy#3wj5H4F zXn&pE|7av=tNi>l_u?Pvn|;v0^Ux9`s!*BZPjZ+ z!Gr9TmJGPWy3}z0af^CfMdemT@;BFeJ6|!Yid6*Tn4>0WQPaplC% zM1s?(g_1_+1+zw?k1J>3NMq>wC}zOwE)jFn|7!un0yMLt{Z5XYXPJ8U4T9EJYio}O zSO|ecQ$%cXFs0ZS5r4{eBPH5_v`j|^bRJLMOvt!HyF&_M8rSeH6bZ_7qus4;Vj}3p zYeU@wClK8B6fp|Cuvku5Lwaf}DFr|Zdk2E9U(##mRVV!N;fAH{>cU4vTy;_{febQ! zG1N`rj57Vw4})o$nU27$EHnmFO@PURvO%Q_)BcIusR`g$^PBuxK#XkqfI>~dj&$@p z8RT$xclfm3OP*9#I_)p)E&w+N-0_nDw6I*_(=##-x!KwXB7wd#3UoUUzaglS*H8rN zusS~u+kP9BhN}e6+?Rt%i@E}J8mM>z%uQ%@OTh7;e0Arbnb!aO`?aLHD;}4#efxdR zL4Pj`3k#Fa8@G3M0+(eMrtyJGhuuy-SIVFEEDyV+qlMdjjFr3!ZJ9#JbjGCGHUv#4 z=AyP{22S?xf-eTedI5iz@}_eP5|;+g)%hQtQ(u3*A>3Ys?PmpP?dvsC?#=|-kKx|E z>^XX{oDvm;WCopvAxsetVS->Evhe?iR`gI-o49inczwEh8CLNS{9(|$O#d#lxV$T( z2%Q~N ziDWH?f@59RK9bBkQbaR6XnpsJsP7${LI;g|a#FcORf3V*LaEwX$vA~1>X~u5UW+ec zW!_aw={{q(6Zm=$oD)@2>tGpWcU7Ugm^}f*M(de$bghX}{$kh0#)ki+)6$9T)~f?5 zqgto-{idP0)@kj(B=(LPS~d2Gionv_zx}2Rbc$RrHEyC``sn={E#ss`XVlh@s}L%D zN*}uiZ{r7IfRB^8B2`d^3(hIYl+$-z+PxT?^3{yiX~;)?jhycPK5+>sxq+UxCXQ_> zkBCGgN9-_xmd8<9ZOt{9uGVEpCf)z5qUywp#yP?DwjvKRRX;OvdmlYSESUHV%Yo5D z%T(={<#M_pM}{Q@B*ZjwT+LPB6RNa%w~9V7SOWd>2G&AnOz7QufMPIdDx`@Su%n`; z8j?9~FDsWMLZ?xnb=TluNI2dCb-RGL1D6SlJ^uq^ZoOr)|4coMI5T^}{OzIp{KKg# zCcb|moKn`yPOU#Nb0YnJflwL{{G|h==dyBpOA>WVgBF z2M@7IN3tEuDwQVf7s>NyOjmr@7lGHkKZV;qCwO>xEIIC;T4|rH^qQT{T0g>vZ0&OU z?kpM&HaD0e3@g9`<)4zZ)up1uM#yXGk8xIvQ2zY;aItJpBm3W4puV5IcYmL^eQPO< zy}e-@B6m2FJ+tElllA^70DX})I5-Z1Sf)VP;X~h5%`j3@m0RpUmG`F@jJ5pfr(5QJ z8=GIHQl?1XY~|P1dfslqG`0CHj;OGopW!b=+V!*BjxP?`FWZK0cJD1cEgu>jly_fN z@;0v#!{1W@W+~A;;beK4n4{oyYFQtIMY6jA0iK8Gtf;P$^5S&D9LL~Ckm zgyjm^kS^!lB3S7Sj%K4HX#0#lV9h(ypR*0 z_4MBxBx)yP$VmY1&k0yKx8_44G#&I)oM;?G!5x9H6XPs?#ZQd3JGh6N=K~&40FUY7 zo{IxcVu0xc#D)x8U+*$>2kci;TP;DK0=Uur#*vz$>gCHRaCVRnasZ?{&eEx=W0KAd z5SIEl4f%t&=AhzpFkjs~XlHs%ge2q_%jQ|vijtF zsJZ91Mq*mIf>&aDX06J@$zZ9s%^09lcktvul;R7U=)Es8ak|03h?R%}ot^yC+$QeG z`GCv~_Dg*Gp|P;ZXFiDcE&H6!8~{Vm*^f-k_vL5M24V?1%R*Fs$aFQzY8+5ze1tHC zbp{I-maSB=7`>eEbVAvWfljVUGkd~^F!2E+`*$BjI)%?hus+*<)z8*P0 zP%P_R*%aXC_s^dFVs&fC^ig~L{aPU{Ftzm-kjW|6B`Za0fsegXGnzm%x=0tBE*lf#Croe(pYbX(ggMKKwd^RRfwr!2{ni2({d zT?IYl>v)~C0jqA2S(!7??DpyFz^dDR-|07SeA00`7j(HfX1{PvHLc#&u@-ch7<3XB z6JRN67Pu0pa<$oUPT%)QZttsb;Ql}Nj)p0x8Xxe(qPwPUkD!BY7E_RBkO4Gf07(arCZF zD>@2~|0>X$z9tWQvz|NQ-8whF`NyyA>KJc&E79Z@bbmPB`B96@Qpe>`2X)XQu?5l1 zw?x}ZdIRk~=O;U@QjgkMLWdp(C3jH=Hq1Ck&cxs9e&YJN*36$_tS;j=@N}&ICz&2} zL8)ibDt~mmJ;23<=>R|r2?H5r&PgbG3h>bO@c@{X*qjJH?)S{CW8>`@KGDoWVs(`; z?v5rYsbHRi1dr!%26j^maYI{eM~74)7s4S9Q@#xxjX+c%qbP4cr&<@`cF|nOK z0fFw}xBC{q&3%ydZhT;%J#1e-g~gygSkgf_B9KE^_pEhY9!CbKOk{z$c^yh^E-C!v zF7}({+UW!lr$8c7k1b&FQ~Pe1eDQbV`BP^$RyLFNBL!T`2R|>bli9-gN|?dTEO2$< z(lXfv3G0$lLfUV(lJfey|}BE-m6K_IDC^a84|F6vg)u-0gq=&` z)&#@tlGn>q$Drtv-X4+Eq4n-OFCecJNElCRww*O_pWvS~@(jW7x$zS_z%~oYQ{9O~ zwhTbpdD@rmxzjBCXBM=2MLD>uXCu!bQ}+S>K%XZ==er&<0jHmLDh+rP^ezwg1?J8p~sI8v2~ zX$CP&e^bEm)`#~Z)^^gjpn&S1yRf)XOE?&n8kT_aB0@gq$ycF@NvIn)qNf+V0XSiG z7#TFCO}>jdx6wB!4c_)+g~A~o^|>_n0Bp%ZAwa;O;PcEznucLbwCk-E4nq&V=b8|Y zLzsZuw;2JL5=xDLfQDAVO@lrILByLv7>j!iIL>lC_Y^8IWkyB_AWz>}en%$DR%gZv zL}K`=;kRew`W-{bNxg;r-gfn9e+PL_#R#8x9$2c&p%58*u74oX5P?}NrM(O63&Bj( z5H?4ED)FYf46HsoS%H=s|7)Kxh|sXJv#*vo~J zg%bn2(+H8@d82WbhFbhl5oEhmR&QLB!d`eI2=@Vz4?uo#k zTha7E!5!EA!t#gxVzsr&Y<_>Ise^Wdz#CFz`(pfOqx`>ZQm|rR6g74pm&!V~EO(SQ zzGqNc8e{qaqcjMQA5?wN02nb~(JH~J!j?7zGMSX$-5m3_)&^r%Mrt)*^<$tHdK|8L`X6naU@g!2$E4+3K__O(Sb^hdqz4DlcSCiCN z!`WX;S+hIDW@R*-f7+7JRJM3u#QmqfaNi06_n$)@OO8(k*Ja z)!8q{gPi>w0SreVi$InLfNkLC55!sNp%5NLNS((*`DKh^n#I4ro2)|6&6g z05tk>B$6QAE1mQM9M;@g^pvTn{s7duBe9WZISGGCfS$Vm)-^is9UU^#mGv&Hi`!qV zWcs;14vhPQTQ`i)UPEIr8hCK~Vs_UycAB+b8-Wosb3!B&entT^GBuzKxIdREI)*5V~IU6)hrS91szYJbKeeRYl-CI2;Ja zgl1ywj-YR8wE4vW5V`E7QIdzD;nDE813hZPfJaS<1??Bi-zC82eJirD3myf~uEF1~ ztku3IteVHE!USQ80qahA5jI}V;~J@M(IVc|&ttczbn9Wj%J)*RZn-jG^O@T++ue7* z$LKC}V(@d!Y`*up@p}J#2e>@~_2uS)LsEgirLMh$&Qyd=Tf`~1WW9Ig{N0;8w_cCb z4*11y@|D2UBUnvX`|o9xOncr^FaBx{Bk$+e#bcgXj?sGntuo(S!C23Zt^Hnh^8%v9 zz^B)_$NwDKzr%ioj~Na4>rKr#FH1AGU_KUB{Or$F$(U7dojduR9U$KoHV}WA7vRA} zlG@@0Yz*U;P z0eC%xF)mA!c;%FA_g^{~E9F)EmX3~vC=h}+V3DP_5g*eh^aH)Ea5KN(A?01Yzh%uf zMw8j|!)#;$#4e7dG2!r~HiCW~PK$OST^z5sqGAzyUycZ|M2JtN`u_czaafl50=yBP z=*Gkvq9&UOX!?L8e<4_c?~jeYHuGg8Q)$m-9Lv*|g2V%fW?S3T0Vgw`N1=pONWg$Sf#Cka6^kX3_&0fv^7vbKvYK`7f zbC<=97kxKw37NEgp1@yX`})T#Kg(^0*0vVLziVBVo^J{a09!zJgE5!{Z2qW6r*y1j zcb&JlH@p36e|&rKZ#lnhQbKFM&fDhHxzC4S@CM`0@#(ekb2Wb9Ht9$gBo|J-p8k}Q z&b-z5byx6Bj(Xs~$zk`qy!2odx7k7xj%8hhqCQl#i%XGCM-4M-w53y7;zSEop)Tm| z&b>Y&y}G<>P{AhX$r>4A0aLvH3?i~<1)+-*8v5p%M}syXR9M>+>4E11U=FUAFRMzh zxV^(o4vw508h1itAEK{ZE`u+?m+_dv-d%V5zmbEjwP47ssTG=ep2yBTwB<_uTv>0` z=b0lPy&T|dE)fo|4V_GVURVpxOzLJFC9L%}Xw~`qddH0(Er``J9*%41&_SOx`KyKT z^78IpE}onD?dKbq+0@f-fY*vPK=jSXUdjX#+j0kuP3sK=Fx$AiP?@?e!j|`HNt7Sc z6p7|z-K_)d9p4glx)Lb3jN0Yv&#uEs!xK=og6Q@NUAjSr=fL0U8`K&0f!#9Ry!ZPY z^i(^Q^7(L)gZ+eh2pWDEhmz7B!$_*kpe@_%lYG))2M+%JyuAznUi$)df$pk!@yp6s z+jF+o3Q4W1CY$%{u(+Vdy%|Ty)CKf2-UQKR7(wy;9y)h?3lRH?qxoA&f?M7Fm}f!* zW&Au0pGx{nRiR&ctOv@5SfI9Xb8X{J2N<8ojCLX_NE>}N6IvkOY}PfBzud45=|t`h`)PZc-$&DErzw(sV%xB@#X_MynT z$(0vfL6;N%+B^Pr5(Da{i`PR#0e@eyU(HbmZ9MspYIEb!71#B|dun;Z&>J&zxWt+4 z&#ud%RKgPWufIc`pr#Y$H$T_w7dhP|Lw@Igg%bB|Qz@JzV#KG$jAqpA%AdBK_?w?k z_ulGRX?uG8e#fd+$~=U05?~?##2^?ZU_Y8(V0P}uh*jI!-(C4F=<~|$-Q9_J;W~Zi z6VS2wohxXWw4LQy#$B66EvJV8E>xBO{uVy+@bgm+a;lxOF^*dHacj8~y7ar_+5`~* zCYZmFOrLA^b_2;B20y9`5F0R9y10EIZ*IL6&WTY32)&Jr(bAjRk+PqX5;*u#9&ePM z$H}7#U_#xYpZJz;a==J3m3nfdK>vsUDwr3OE@3Gqj2cL*7b>>$29#99Dr;1h+HawF ztQ;*x5BD@sMeuc79+>HPUW@vFi0;E&>KnH6Qub9fQ%*F0aF~j5zZ(1W9V@0#A@3NI zO}#NerJnf`uI8B+Qk0E@xRmq1VzrX&APxHb(gY!?-_=bNZ)63oEN@uQQ-V$?+Yor{IvPKBnnUbvayspzZ6Ill8$!R+OayH9Y_Ym2gbM8 zM$GtEhd!^)B>!ABGez|Dwx3>sVnL7777!nrJyp=qkS5Icx&F4~*1+faR)73_r1{me zUwN%nR>ti7ti{l`s%#?$kuH&)&6w}Flqw}eB0byx`UZk$l}L$o6Z<<$X}Y2-38h1- zRvSvX-NxlVNn5~~5&ORzL093tS<;4>^odw7nJ_=WonIEfu|Wx9$h?(_MpS}pA|l@5 zD9{#z{Eap^WuH>PB6^Zb`R{P@Kk|f~U@CjIKz@-x-y7e* zYZ&A5=aX2=&7oPYeH1@;p<0CPJk^s4VMv}6N$0W?|Ld$|sCI92I{rRas{eL_@!Mq7 zzYw3`ublj`g6OF-aP^RrygMg*RZo5SNO<=1*+ud&zU^?bzmpak8*er4oUN-VgCi)K zniKplhyx9~0~^-U_(SiMqYlo;EY>nQ4S-Pt(bT!3dWnZUrGDK8V+auX!H_Q^w|Il1 zm<6bPcy7;MIPfLGN`3(52`l)a_i+q@S{YtlMUAcx{7ph2#1Ai19L4w!aggoaq*fM5qh zvQ$G?^GLEdc!`r}Tpc%m3S`&;C!cp?qQdNaD*LMX@{HEJHpuNx$3NkqOTtIj3y=0s z>4L6%uW~^{!wT*N(1;6InzGI|&3S^;TnNXJ$gf`rM=_*)p1(bWkJq<&wvy z!RJl=GOhI9rKNKsl+Hm1{$|(zcx5@z=0VrjHFHjQFkTU0t$f)9_aItKETN^PJIz0~ zx@^a1&bN6xXO(ZYXn_}U;H|;Y<}D)JOP#}pO03}^Y*^veh9Br z+Zhf_M>gF?9={o(LG9t;8$noen4(LFuhI|p$NeegbWG5lP~+{mhJ%GBK`eKrP?<{wVQox+vj!$ab9Z$+l{T| zCB8k$<^dx{#@QY0k;hB1=_3IUtLiKkUy4wo1nRaSr&==LfM-zM?H5pJDh)9tHa7(x& zDm2K5P9IG~Rj|po7~Z26${(L@`{ZegKaqNKId<28y~%|^p=M;Z^3nOWU#(2Lw{zQ+ zW#HhPdDB?rkICod$A4CNsc%xxpRGAJd2IZ-&)%>pJa=hQF0mR0+8LQ}^Uc3=QjJ-d zmV_5BdO#+<{BbIE_$CD-bVgI-BM)76B1)Xuj6o}Vcy53JUmcFg0W8w}5j1dDCs8_g z_V+-MEO3YVA#6*aa2x#RNM%60N5@{_!s$0Dw!vE|F7s(fYbPf&ND(ctv}C3Ra2P;8 z)ev&j8T}Nof^Jx8D$Rm12|K|sac}i1jEfMWCwI|=Ur8=J;?uX_XL=FM{^Cn3AiB-l z-cdfA(B%XmV$m8Ve0F9}8t>Wwql8uUA6SrOZFaLB2bf+TZa+AS6ePtR1Np)|DiR zG0oJJ0HZNLe2zgA0h?f~Yq)`@nI-KxNQdo4OaKucfRQ`4?S-Nx>RlmV^q{kOkA@*5 z5;MQC7AuJ4h(mas3NUi&jAQl+*34?-C?^t7!Rfwg#p7vMtfFyK`q5U?5X46pdNRJx z3hZm~WHuVzy{Xi5L0S278bc;Z7&}?~T|)sCuZ(!xBKwLTcE?*0+2V#5;4fB;fi&5J zGolS?8j1j3%losuguqjGAdoC1oOvnn4mu(pqgpKt`vAI1+ZtOiNHRb#EgcH|;yxwn z$`5=XR|wDQO2|v7>D2$;Bf}G?s_zIOXqDU?5Oq;)t?7+qcnv_0wvSZ_QPO~UW*#Bn zNcz#5E5AB-?`}h}|52REn}5C6-|BO3oTgo#+$dx}pX?3VxOMde0Bu$mA^!!c2%7>` zQ*uF<&FkQOJfd$L_TH71m>V{GCw|3g{v*8J8IVhYR*Z=3GXU?EdSb&+KV-B2fdbZn zTrmq9pS6u35y~gYM072&((4{T^9?bnL21`WOhpH1lL^`|koWiVdr+2{5Hjf?8DDGA zQeoU~d$O|teqZ&rvtO5F`~SNHqt3jyxWN5J(Csjlu*0w2Y-Z|h-T}MW@hptJ`H{u4i2fg60fBSh4RTD4fN0OlR@xr>{iO1GMTf3SK~{4)EhPGDBwzpeI3td68YB1vRQ zEo|Y%xgV2occT%#xS{I;RPvf(F zxi39*qsU5aux3Tm4LG)V!pY*1#wuJ>Zt5*$>dvR;j>Z`j5C6>S{G5y3$VT&*lz z`U6Q~AC~`?bCF8}At=@AaY`D_PZ$h|1YT%Jjejl!ARtyiG=)u2ax_L;ZYl#%Po~hX zFQHJz+vo|7@b(y&KQ?X8uQ#19XV>M=o0oM4WZsu2yo;T-TUdkwvu$EJ(4R02zCCjXZD##lyW1t_NIl1ZTOJpnK7Z8R}lCmg+;Tt)61o7cyP( znSO|*TryGxir>mg${Vm8dsCl9)(`-ptj%e)bdw*5xYOLq34nlgLy-{wRf71>l45b4 zGSC5uWs|1DCNhP8wHQ81Z3qoCA%dI*J%1ng9lhd^rRwzY192fmjsP?_#dN}o z7EK0vt&%R@VLqTS9&u$7`^?bqsg_y~`xJV3N%qJf7I&|rPpa8_9mGTh-`z|azqEw?(+ zbiS+rN4NI~U+v=`9#VrgKR5YCt4^W99vV(lIk^_I{<-(}!DD9Bbk;%g8q6ub*x2Cr zCRVWWsuljRd3t&p^JuL7c&7dM(P?x?gh6J47YL%f-ekW#;FZ7H5Bp`+ZWwSGPx|xg zALI6YexP^ph7?G%5^fXE9=cj*zY^XHBieKCI9sI-I_+k4%F4*NR|DQJl{ef6+hvGF za0!Zfyi>n2;Dg$RYSlkbKTlRP^lB*q*tdRPwjY_4A~vrAIQxb!dtOVBw-L#_br zF2%-J%{KuYoABE30^M$~caDNRzp13_Vr0+K5DuU0deyw3N|C%I??6n~0G@(rsf^w? zrXu$|W4k6y{2e6Icgk;S4QW07Hutjmw4kx=a&ON?G#T}y{MH~3xI&w|m~WbNlHA&H zWFVfKJqT&U{E%JP_l#V1^Q`*M6njA1*J}N`kwxLwfu%dRNMb7!T1~i#VjLL?SZkC& zOkKF{;eAs(-qN@UjB3NWHUQL(7?&Hs_+O|6A%`>x%|F%5Q!n%T88YGi|U2vbaQ;pU`oZxp3069Mf@p95bPB&jl0`x>Su%ALo>Ou*1!( zA)Z+|IX$Lm6-q>vK^1V~JcAf8-pqb!iPps(v2$)lKi*G+TT6rygoo$S#jSY{I2MGJ z-wrw`yplxEa@QvPUlWW)P^eS(aYQ7`P|A2G1l$hqN>|a>(EjoL^PR zS?mR6%0pj#q~On?Wy@-rwo4XvYM2Q+vA@Pg3V(L_{5;+x(u$FZE2mVi!R8aRpBRYF+f)0!A^m1=BYVn0ir?5isU-vTtFy=916iIKLU#?O$TI6V{@=0EaXLQ) z0=P(D(ftD5H0Hl*XS{K8$5hwC)-D8|Tb|=#m)COsyZFE%nFSx-4YLik8c*&i=6gT6 zCapxQRQX@zSJ)!eKfVTkB8v>AEJYgI5j51ke8O>;n}+WR*;|p2Nk%URIoR?f*714G zJ^S{S-`*Yj0qYs~IsZpP9qVs&ZPV*1G=n-o2zLAV)u3_vZQ;|ET=v$0vjgFafB&I0 zy!3SFS zj*r2ZE~gmIeg_vRYLZSrYZ+Br$~+-a1vKipv@y zG`u}V^Q1ejd3E~#XgbTVsM@cKpP`W)LJ-N3776K45CVKfHe9lh-xp-23c%@3qzsJf19oF|an$67W3}EnrRHzCP~l zGG{>2UwWE!aOUmXesgxPx*5kE0;h(D3L$DZONJMY%J*3&Vo#V%}Tt4mG$SBDmUN1k26-Hc5j z>X?@N#bB(MZxvTm$%AO8m6zh$n#sBWwm_^D@NtEZj+p%pG%||1pdqNDj!J{Xs<4=` z(9!+$d=tH9aoOx96EHSoxEN$pG0|D<_(O5D(~7aV5(*{!TW)|zg>7VLJ}%;fJ$C~X zNp>k6_=+40z?pM(w^2 z3bX)T{#4Gg@M86#4r(1>Mwtl@mFUS(lpLDu9*duE$ww$PQ++=i;!be~(-Qxp?=l#& zvG7E~tCp$RBx-a0+qWa%rR#&wd2fqJ=c3PHz00k=L!HXvwjBiQmZ0>S{mE)$6G)4E ztYYX?QM#OY4=$Sr{7_X<^oMSg_ducEJUN17i6R65lQSQEJI(VS5GKW+q`(HKB2w_` zq`41`9fIM=Eh6~{=jalYY9GQZy-q3LXFSM` zt?s|SGu<5L_%2GjzLL!v_C@CEVvGjuJ^dfo67+~WsZ+~1J^=VV0euK{*b9MfOXegq zhdtNR_O-3y99hXbNgLLeHf+~BR*awwaZV6IZK(4sr#Z_*5AnPfrhW{dx`)7ae1BET zyxptmh?k3u2lnqRIq2iLPH4C~qOf;8i*t+f`*zKCn*r`FuCC=Md>6P}@an z&_PoK9sW|)gF(5+1rr!KQiUhZB!E8L3$VlhO!ClBu$ub22>jLu#-aE|<0k4G41%zUYR+I@m=|9i=W7tX5uG7x>Ur9v1Mh9; zfN>KWS+8n37$iXLIf$O)qx!AMMF}*>FwHNOH***LXmqKVes~CYN^)&=I6) z-rMD0Wh}5J?7ToaWfuQPx9tVV(o^%-h^?(HyMuXQ^0eG)@aV?DYFeguFK;ZR2u3Pc zh~2N6FK6qY1g&}}9r&%DDWks)Fe>ToUQ*L4$p)YjMZyTt4$vWFhpCldBD$#cM?rEQ z1XWeu6yQ>n88mhOcBP_W@gg(8wZvdy%RwwEM{u3Yx2i5qM#R$|wxCK+%7+krps)WQ zaPcaYyDVn{)c=z60;BM5=X>GLIAfZzd|ko{Z(=x3pCN2&dFv8m1^$D=2dF&jU@k1wyho$!2F`D zE{z}`i~`LEGtf2H$MLl{6iN1b=g}~j1_$6Q0~8H%Ic(iSiRXX;>wgjOH>jj)KXMLE z9_j8Uo_m`l3K|cfs&&hmjQaPbjh)Ru@u@;dpXKxnhPp(lq*1~-OJv?M(xAdU0XQAh zcZ$o*W^p}Ra@Bu?9k!0F!P)*HO7)`5ub_qYLtWcxV1Vk}ZmM^z?HwBZ=P@9zY9ilA zm5UGW(V!R>jSsyt?A#=ewh5^lBHPwd~;$U@4LG`#^e5JNqYKx`+3Lh z6*$NF$@WwxZ&-2z=D$GE=h}METje(q^ofdlZq88tVw`rt;Rwric6oLfxGWkU^7lF0 z#o&9YdKXzi#_*4}c;LHL5}waA3Wr}%iW%23 zDqQ!NF?Tu#ANvElV92L|QjR8$niqy&n32Y*UIyDO&hFP`#bw)=&erD?7S*P{Pan;= zpUG%*U#s4wjA@}YoKyWhXh7`=^p(h?A}(f9R3P!N5htSf3GJt;&7ydcR@^k|NHdi4 z7Q+5tu6i?#*s_Wamm@Ra)xL=(`p;H}aAYRGfM2nunB%XwnNtBK)A*&%&u-NoI)$>( zqVaC(Fj^oe&sqFCur}S2<(Foy8_QSptC1e64SCrGD>@1fSo+%Dj-5FH=RECx%e$kT ziMR&A56sJ8{ffUiHx$7K%IhI z!Cinp7B1afT{Uo%%U_P!rfg? zcfASK>tXz{_RORhehQQ{IcoL}5Ffz#V)3u8m_Ri&0m7=UVZST!jYOe8v`8>R+QquA zvY7h0SVoI1z*Dxu#D@PDM7g5@U9?CTMpo0Hyisp0-!W6O0L@s5M0ACFHSf{-&>#sBlAi%x+gG%KdJvLq9f#bpnbcJC$4R_TB^f& z;`RRK`XJFVHml>6hlcX)4RLUgM3$SFP}@%ZoNLp~_Acb<@kZX|E03Y zc&-nc-u4CThmy^8bo^z|dRhlwbvErg{EkaM=Q;)6RrH(45n_u~Zdh0Z@2oYudwU^k zk;L3dDImrCy0G5mz~2A$B^Z-_J{YicII@e~t#+5nVp-3ItbNl{lfl3g#YBqUzC$O^ zd>!w1PpGBMztF3!RCE%Lma7r_+nawy?R#u~GBJG*=*gI{^NbNzyj|R=#GVBuJfKWeV1uJScs813 zx`#T>jhi022P6YBRFvz$MN`tNSt4NTDGDV36Re1eA^;FMwnu+C<3>Oj7Cma3T)|RZ z_dB&BJQOWV1b|(^lqQ099Vlp!qOp!y;4Go+`ruiKgjt6cMFIJ$Dk8DH{R?E1^DHM< zv$L}~4fB$@U}|pqL{5%ll!zD~?rI*}o<)U1f9=z3a0$3LauEq1>(ia9uLiMrH6Z1d zDS7Sp;>Qxdj7eSkXG;I}OImK{von|;J_vsf!1jhZrH@Y{(%#73We7b3kW7CX@M)zP@M_G_+Wl)3xl~(kyio?uavVePD#mV z2=h)F=P^}6^vt;@ z@c#v*h!gjf_2DE6Bfkm3O>jJZ>UUO^vtj`b2+1!vCvuGXO=liW0<(f{D}*}2TcD?G zT>`{PO#%7!MER3UHr;vF&w0e~9h}J&l7TlU^ar{G+a9Ns12|k36QxkobZQNl7(z*3 zauC`0j7lFxFOCjalUTQCBqf?vAVUq5x_bdQANbL;CK$2ehPA2n&txs{7AQS8NVn2kPQ?x+$a+^sE|I-5|+|KvlMR6kQFdKn!?h)R%T3XPJ= zfCA|V=({kpsIo9d6KT@U9T-YMK$MqKCeC7vdo$S!N~HZG*8w(e1RTtJ8vX@pb0O@_~iT$CdQDUlPPdFIzDjwI~I#Q z;ZS*+#{kkFS{ARmPFuHgt1kah0G`X1PxJPIoI>0}8k_N#SM%OV39*>bCERyw+B=J+ zy`Qv+E#unW*?lSz!i~FH4f&Jv@ZrNVQN*%dyxh(Gj^kZWxE7-(;=A>^C|PNUN%6HI zA|>>f!}w_mHn?55Ov!$iH4p~tul~fOYOp(IPPeHa z5cN#SSJwoTf{aY=NB(GN{}%^l$c!BtIkmYT%q-+AoXR&$dFMzpxyw|LM}nhB94 zz=p!nbfTwb$RXDdR088F}7`<@y86)h{j{TzPho(HW7d~xt7>^7fG#! zn)-U5AW6LCV>Ld)oygc&jZ<;oENnv=q7+=-=tPNx9pc!wF2M=@qN#cYOFf|Gp15gV zK`(;u?wi=3{K?77cZ?61B~ibt&nc7orW{DLa)eSSRIolLV245I)ni~Z)Nq1CrS7Sz zzhaS}LN2FTcfmMBtoW{lg0i2m5!(5T1 z06eTt$b7JW{#AlN_)69~5PT3@&rXvd z>m3l#vKM^2_j+%8dNDG)_CIqOF09HalhUV)P}^VLP}To{PzhM*17mKcuV)g#CYad# zMNLGB+ zz@&%5KUPa~&!=5yeJYmFA}cB*25>Y)A?}@RH)T%fuh&oWT*(@Z%rhoTT3o@k3ei`l zuN4&~^@SfNSBBvFp)Pp5a@rI$;mM2-RI`&+#>LF7@S=Q2nJi(Ii{o4-uQZc;mGhF$v1lg3cFWg zqX>{X2kr{GE&?znPZG$Y6pIQlA5rYc3GQ{k0dm@@p#k^OHA~s)g6~p}Z;KD>#F~8>@otpV> zj(;+qS)938>k9c|B%tgH;KAR^;57M7%lSkQ zBqW#4<8H0zeWd>N#XmU%3FWM0rX1ny%5Nlk5-klXh$sN~UDu~yL=WvZbF+djvx5I# zB-!udW@K9Tu^|_rcQeQ<*3;9i8uSExYXv_^mG>jjQRvJjHfHP6*-$S_CB$!nk$l>O z>zfa@lDW-U`3MRQg;ZhK2B7LoJdyVdf8XFQ#JK4<7ECnVW!2Tb{g* z#*T(tp5eKYEoB!W7%GA>q8(pY_9z)~OzP>)-^$60<%M{A( zoT=Qz!QW-gpfE^@5{I~dOC(iE#e*KO^W!O0slp0WL&Kl*<}@t&ojQm$A2+|xK0L=c zkBPD3<;WOkXnszqOV<4l_PER?<{>Q6RNm8|i*8b# znb~%=8d^LDaib0AV+moS>-OerBp|}Br^&BzfS=Z`7k_o6UZ`pmr|V{ zPYQr?Y<&DYrmsZs`Y)Y0U`?oy{0V~+jFdq&Kc-0;b-k$fA|I`tcmg@<>xR~41id%3kNtFHhAs`~s!LuRu%IXm)xOKy96 zd&3Qd8N*+wp(u2kGPVU|3w9KGlHdhgfMRf~ls zPOW&i1JIq!J=80H72(v*W;zMUrk-vlz6~ZD>tMH;PcYIvq8bmQt{0wgj(to5|3u<0foH(_VhvgQ^^nz zk0PY8L{_^s9&Y7eclUXWH+g61ha>KUn5W_mI`QE2&fQ+^SIs~o6AJk#uGeM@Oc42x z$gY;jTKj$kHJBFBjTJ8;aLgo7=cMZM{UDboKY4ns$^xbYD3^9q*J#5Nm4IT=vN~sO zussF5*=HsNd)-BfKwW51PwCWa*Vpq0m<}0ZFJ{lCtv=h8KLzb`bQs5HVKx+RurK{+~a=Rn-=D(d%TQ%Fmnc&**u4 zYIfCb96)~kpiB5`U&ryE)Ap;iSrLFr{`j|jZqUifAsg6WS(v^Z0!_)gO_x~`hR3B3 z{f@{iRF1pA-*ui7>XF6O_1I_3V`OsNf!-Y;5<4_+Y~ zesZ~eMcpNw9lYba7<9U@bee`;A*6bG(ZV2P?o>p<(Hm9NJ`B^%Sjb`37oTct-@Cu? zQiQcqK<&}eQTX11k$G31{o<7G^{CKm7Z;7Z4jFQMV^u8W!Vp}H;8D>Bf(QM0cs3l@=nnjJ&{&%>E9!&Kz7NPJD&hZxpjZ(FekGOU z&Ue#5H<&A``lwH+>VfSYrkp4KAgfTbDl>bL18}DSM0|apeJ7(U#mG3Grz50nXjJri&A(~d1gB!EB#!=+%i z7)SB#mh)XNR%>Rtgk+zdh3E>ZF6tGZ7^{|3lb?~II0Hk&;mResykXYBt5ZSqR=^bu5Jj9GIOgby7| zSa^dymt^ZYYvMcc-sK*(M-V*Jr>5t+6?a3k0$xu+(vLL8##aD2A(e2(P$Gs8l#v`n zot{`V0Ui9?nhLE@7>Z!PLWO3`VGIOQzQw-s|n}>Qf*8DL?E?XSU~GCg?9F73K0|-RFavGJG(OJN@8oSfv)kZC~zP z8k(A#w##!jjX)Gev@5{vm7|6#)s-uIiT`Ogr2%xgM&P=;hq zPE#^z97T2Z;buQ+zwv7oiG^o#^_KxzUBZo4j^#x8RPS5JOn|Qh3W|^qZ@^n%wOC>k zCUqLfe*x5GqQ%BQR@?t7gQ;8FvFYu<4kHV;kb|qsT>s5}i>p6NGi`o+6>_HGzXvQl z_rT`kdSU6rGl_m1(31B)XbE0_F>vB@c*HgFg+mWYI+{qQsbUfZC?1$>QAnD#;&xj) zervd~XmP86b-%vg*>g2mqS0Kv3llvwJWhSmI&xC1RFxoK5kUc|`!3aZ-V*$KDmU<7 z=>TY)c6a|WN`V1w&=h#=>`5$p703%=fZrptuN}p9F#{$NAN1`#o!)J(+^Am|dK<`C zBMtdV4dmuye(}P<|4HJGx&*+xGrrK>`wU;an-P!l08dxn+xPOPgWN@y{83)}T3p(^ zPv212@87iyPo*scuofS5)l(8ZU(Ey#Y>Z8HTyT8`%$SO)o*a$*w-7IQ_ps;L16auK zx}_ixMOLNd?j5f6NwE%+)LtF99~;9!c(vclMH z?quz_fud`_Xh(*;tIXoOxb|}&koy!=H3qMyIrGs{fT=ETiVY|DP1Hs7d>=|`4KDM~J0=%SIGpe_t!%wgHEToWf$5bG2IgHsTGwR=6sA|yM(VKEiS#mRLkp4$@vE`-r{FHs`f8`rK*4oU$n%8K>fFch;|2U zB|2zCiINh-NIQ+K%m5seP#6uM> zw7^(o(=hLx?A+elrQ7zpI&o%J;tyRwz7>bDGkrq6j~69J6p0StCFq4mO<$H^OG1wt z2(=vnM>GgRmJL8GOgd-n=aHpcZtIZ}PfO)0uTPulU5H>(K{3OESY<@Bz;h4iDx4P#C>=?l2<8$gkGJ%fUNX zO-G@=7z%&P%)I>hcBV!CdPB=1=w>NnMv6w^E}pgv;Po`E=*!9{u0qitFU7lqUtaKZ zYya!G0vUOwdOWXgnc&L{@yqcyfB%7mB)u;eJt6;2Vkxp;AF%OuibkAeb=>^DK3%$9 z8DJ~)bn%9Ceo0LG`7DNGGICc1~pE5PBP%>hv00~DH%^;JbQ z8nE$wt9zI4Za3|OT5u<(T7uy>8MvnsdBZ~Ho4DGHiT25#2Zn8bdxV0opPT|eq*}jv zo+psSySlizu+85Vfk`f)iWgVW(0;ZJ`e5YVZ0v*gvz+PAVAI*lq{43iCrm9j*`$Od zXX+zhIj@2U^7oy{e_u>Y^-@nwW$FHm$P0F_Ho5|FID2l=;<&VAkZ(A3r36 z05h;Cz(1>Ve4qq75{Bsivc||!{!l1chV42Dpo-{8c-6CD|JmM5fj2oqe3wP6*zDINGL4So7jSQ*QmpW%6Mc|3m_w>QflYU(c zpmGf28dS9Fv>|XUDVRD&gg{RqMMsu3-ok&(++}Y4{Xo%V&$sprwr(4d@YSiMyEctG zCshua>+XAcU=VnB(S}uB^K2|nQh!=bi%|Gk`*7gv0DIi@Y$@2XZz_|qw_NDvx45N( zO+sGC-@<4xt&-)UJzf|(Wb!sPlB9bhW;Bww4y<7#_^5hHz|0id@5H%4_rGyCjkXii zD(2TXgh1fS8ZGplKHw4s@UMolGpbgS3&hjj~;k-PvP1^QK?JY0!LJznc+G zup*7CcTwtY%e==GiT)GHRVwwJiwcy|fZI2&7)^zs$jSmIN`=Jcw+Gp}c-qbgw?XsZ zO>?*V;T*j-pgV5E%SDyQ5E^O2S44CVm))XWVPJ#zVS_)h*+l(gUW`a(eY)o7U3wG< z4P=IMPE=-kyLh}wc!1IwD1v1HKF*8n&DRlZR}&Q#k9Jvjz-CN+v?V|ffgpGUtfw$q zr?O(PquAgoMJHRA`%Fb24(tV;OSW#vHdiL4BE>5~ zBi7>Kx8Wz(M`L-xw>DkEVcxV*6$3;AnxV0&Bt{!z^y-0e3oD8Q)R3^^{}{qUNvl^h zQTD~L-Ig|7U+pw3`79iliTwUATgUZf$l1h% za7=YWgqB<^h_d;(bY6FRzMSz{>#K%SCKyQ$<;akZ;z+*9-@9ya4OuYvT{vEqKYzd@ z!O__35xa8xne{ASul4pl8@NO{AD%Liz;cnYsI$4zt?3KGBY!zKrFDyNCHH%x^9Fc4fvsw@H&1#-lZV*BUUSqNJ>m7s=7IaRBII zK{iIuedxy8=*7iF*{hTFyX;+@gWXXQ zgww690Z!7g zI*x}vYvuJOPle>4*mb-CLIMAV?Mq* ztT9|XOiXKCd$e?hyy`oJ zEm0qI8dR2Q64Ri{K?sIOgMTAq>al3e&y8U@N8Zhu>9oZ|jw@1z|~+}DhX!N8U2YH;+UFO4gb zP2%j|-acR0?VcD8&|EoR3<}77>Q%xVx7jRlqPij^zbF0l;Qepju#(3H6CN8sYsyzq z8FM>K3UyyQv0(4tpj_x7t%e|^gOK0_qo(!8jU&*@&R2zh?<;vQD=0pJ(J)RLJ)i+# zLL&Sx`pRG3UmRh#fgxeyhp)0v*G!QHFOy;aRt-D+`r>vP%tAyY2WbAd!XXoiT!i&}W+~rcbF#^ch^~KMeR#Nda#?OpVdMtE;OVi`(vh|7rw>{r1!h zOELLwPO2)*q95%jydAWM1|O*;8*w~;?+nm?2G9?2X8FuCdOT;4VrB(terQ)+L#u;7 z@*;Ih=v^wX7q*;qg|Y~Nu8%y?*YSI|DO4TT-L=D-$Nn7S zQ?D*pK&HhJ&#RlL($YmsB7WY~{R+2L{Eox=KV1>_pS0jC77&s_q=93uU)3teN)q(j zRcaBs*zvs??bU!2bn(T6ECWRR`2@uWw_5KenD%b=`#{C`w}~cu_@^vRxPFqj^&~x% zEtR>2nFYyUPM}c9UTn(;ZvKe{+uvNCh_c>H&pp0+e|w4j%ocq1JLsVYXblNDKG{0J z*E+!s)X2Gwl@nVHO;P>cZPB_q4+%K^`SV{>+n_X?x&Bz9GMwOx4RYYumjq0aAOc~8 z!4zZP#*1%~0gEHlA6#5t;paGcai& zu|e5Gk?sdwI>xDo(f3d_Pw%i-P?kB??<78~YW-*b>hSKBC%+{@7UXxt4jABpPfQuO zliN{-!7vx`&ssT3`hEN|Wk9ocq)G&eUBMrc%hgM-Q zmE(hGLKH2P0weqr7V0r*o%u;tVkbQ_GjrcTU{EN6`eL;@BlfdIz#jI==|6#i+<*

    BFlxgA%i^8n*3+(UwOzmW4}vZ^ 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 z zSskFWkpyj`@GEZg&uOqsVhK9q1XBSPTHVykclk$0xn`#Y%x7il{BVBb=3OTLlgQiY zUh#Pbrt^Hm`+}HREiP-CJ>S=$m?g;Re1J@RX202^A%DDmmEe(SoAynIbc1I%AD4Ih z{gPlC>q*`tC0N^Y-FJz`k^j#E^zG(sSY8x)G_FnA6<>ZEm(K-uB|-_cHT^fn16JRI zT|&pgtyNV=-wrVE9I%Be@Ajk3s-r#B^YU}Rbxz~$h)-X^P5R`aX z{rR28yP~w+V1&MU_lb2a7}#O55m$oYQ285%cAiNUic>tkmU69;(&UWmrH}4Vp}zG^_su~)ifP3 zZJ6f1wo*2^;F~+wPxVIa8g`SvWUliw;S5ZK!M<={YS+X-;X(9e-|Vai*#qzVMLqGl z-{V`%(*7LiJHx$T{Nyd9N9c{ei!0G}eZDz@M zQ&W)m8Qla5uil-;_RK;em46H6cd@JO&xGD`iP*jcfkb(F^ovXpwl4SD+| zVweLF)(ln7;wI7SwV$p3aq-w)Xojb|R9|;BF4#|ZTL&Ydz{x;CT_d7-FEg0i;0sX} zKE;QwnPT4~T&*D<=%9p4ZW*930>sv*P|g4p1n5M7CP(WFZ&vJ#@P^xJnwv7pi!+_E6ie<+J0vYCD&!+IWn;6?QRcNe#s>n< zvBjhA^>XXEDXiGi#GeJ97NlXyZL=KwxC4Dp^&nN!e_5eOIPO#EvuC5R|6pR^DEVfZ z`6g1|#Qp6#_opXyr<_;q%vZz>`_nYxzgYBgheKaai^L2P#q3o2?MJk?x2Ff3vJl7| zOjye#UiA>lUEB@0tmI06_w@(M_Ryq}cn6URv|6GFEJL40)-O%j6`ePT%NFA~N`?~d zrq}IVJ2jp)!GFd9MLu(6T-s?@*Jf9h1=No$QzQeKefRifoV)q%benjnU%#xaJMwWId#D^u*sG3$+Q2eIH-0#|$-)pce z?YPJ3?32gQW&QN-_42vf+U-fP6BGI80!Heu_upp;K+IDh6jU(Tc!2wf8-G1`obgb$ zDw>QN{^adukAM4Scyd?w1HtMPZ+w|L@}Zj5=YUV7gc zalhh#vd5H^CbC&e5osVR`c1)xCXQeUkA#5WkH*j^4#p%DNfw$c=o=Ei<%|n|u&8Vb zGpzWzv(76ue=$FI>a}~h=_AMfgcB(pv#}R1P7)nr*~uaq&ehAih>sbgQ_nAvPYhcd zF54~NV%og)-^&1%j(k%UuNgpo%y6_(*Vj@|EE!p`MI?R{XJ6fDW{Z>nH`0{o0|fZ* z`Vwg^z>;_m2`gVx3RjFI_L#FvK^;Ke!~7zE;2OeyG#_YP5^%D&ia)|n-q_4zDwo|9Azh2RS_~861oWfK^*w2!Y0{H zYX}3!18b{Q%+bq(i7u~+6}}jjw$*bI7P#4SHJT8=FjVxwZvo0K zn0~eUsh9-|wx>xD9ZTF~iOFEV1Q*0|;Hv@}>c9vT7^cm!yphXgkAY{8#kufDwR0Fr)S)bcT5d}tLt6!sw| z*hWcYBA%)jLHSCJQbB1sRseCy`kIMrGAA)Q*>lP+HBC}HS*!8V-R$j2Pokl8WU!Tp zO_GK^TP7o8{D=q{5(#s&MTjjy(I{KBF|7{F$-6WytkvOtv_39N2rQOEPY+PSH%9>0 zcnjpn5g3OX-^{}>s}QH_kbtl^uq_zvDxh|hl{j$fM}Yy;6D9-e_etQ9YH)5@bQdM` z=@#_aqaZdyz6!oq(Fm&u)CFe)JYEioKMZ%w{{ zlnW^=th`>HE~?EBZ<^jMNIz@CZQNIH3|{$b;AI&Q5RlbwRqeguX6AgdJ*n@1nY>rC z71tlYszS?L=d=eh3*=9P=MNVG@6I~+7M4@lNdZNYXrpM}!uW2~rueP+yvr8YlOii_ ze1qq^kF$IG=f>mukNlL(L0caC>uMvpEo%OTjhy70QRBI{znit1-!L@?T$ed{ZS&u{ zCKa2=x-U*$Z5VYuyqz;PJ<9a)KRd3(nIN-wTDqLOI6U=RXqeori;nw2F}Xm2oFGA4 zsFiLr@IL6~zo;v&+O63F_oTUw4d<(qAu+~W+HtWQGUd(L>esgigC{0?7on-zH@kg7 zcPh1*4SC}TZS1OF)Vx}}o>>5wN z;=lZ5O1zod?u<1#aiU;>3;Fv&W_(4nVC3K8#B&Vpm__HWhRWXb&$%vby@xtyZ(gN0?r1ZgALa7PxDU9`w!b!;O_w7IqRJcj z`y3J#uDDB}FjhSNaO@rmG|!vIi~*cBa&+NpjXL#Wg}Bx~qp8G%)TIkxdChFuBLawb z&)oVD&K?DBbj_wHVX%BIF(wi|{<<*Y2^&i7@H}PN)a1yI`MOKiYA3kADS)>F_=Agi zN?`sBsKO^q0Dg(IH{A!su;uFHfQCoEM_n*2-GjB4!y@rAc0vibfmjB#vY5Kb7DgrF zy$#jkrue9xbLL~$ppTE(dhpSLaV>7()Dc4Ams=2Az=IY&6*R{;w+23H0|sFbyoUro z11;HsaGtbhq!{yu#ngi3v6ygx+XQ010YkUx6^gpVq3Bq-)C;(id#${8&n$&*cE|lU z+{aBkvKUYO$xcEo-p$cK*% zcx9P2oo)2RCB^m8I}IkX6G$u`VyreB@13d1yDysTOaM*p!)%sC#IWUAbjmQNJM=O5 zl^piGJUdvL|99GGV`sN@hTXE``{xgyJRK)P+3L6d0&WYr(mY?yIIg77&qs}Mk;>E< zZRy?v`pT^0N^sFxS+5XQ$uo(Q6RI%!J`RVyx&X1{n*sT&_S(Ig%QXHf>ZT=GxkK8z zz4!kHBj*Av&wa8-biCY7wnf*{j{n*9nI2}w%Xx^k);$ISu5z8`XJ`GEPOl13U595zf)z#9`ky2k<7{U+wIQg#5BL0 zU(^L(Uk6%_MZ5uvYWo|V^MmfQ>P`(yNp9mkvOBxGzU!5HvH>?(i{5+XBlSH+TaU7p zyChf0&`ERvb~?p1usb_;ICKM~%;1PD| zW`@gvD`kGk*m${1$n3j*buUu+OluUxw}gX4?5blw<`BR;D>zDAgo$1o#KEDhr$G|C zXZo0_Yzsg%SHbs`J@adB3dwZvIyJ^f5w)Qr`Px965}ox$5c{(!V-i+2FjG))1kXe}Wh)kd;1qsY8 z5of$LilllTLXaQXQ6O-<>Zo3oKLm!hEL2@69*O0(U?m>rLxwYgoJ1;_q0{2ZcndVJ&OzlF1s~8mlq^vTElH3Iy68%*> z=+e^{5AFM*fGrzu*>Wrh>`tetsYZfG5dDU~)nH2}-w=#^#fszUOw(aYL>b#fE0uajXEKTdY(!{Qat+*gX9S83!o3dNl||3MfNC4NV`to^^eg57 zJOx`E1*N+RaxrXPkOlbYre2W9;6;P>(pZlHC@7WGJIxq(_PArx-muq>OZsXPy8a~^ zBp=v=y);AH!Z!PAgND-v?d`q2@fz3$6!U`^m}DXl)WWvV1KB&U#~<)C1s3RVD|z0I9v-LqH}Pij zxBIQC5$S#KW^cd>-V#3*#c&yHsTpqA^$7U=-$l*l2ZOnakVTx15iiqE)5e43hEsfg z-)7K5J>F|&APt*2rKs?z;D6y;HR2lR@qLgxBDDs*4LN$6+6vW~2QW9@5H=oSwdIZ~ z<~?f@QzxaMO!rZEho4}+b0S{lW&btV7K)4ZDWpa$9Q+Tca_89kjQSjQgweeizzv2N8`| z;_{J3{`+=4`)f?2~^A}gf{YFHW#$$)vQvh&Rcb@p3rA=U99m|!p9GN1;8;KO!2Oe!6j zKpJp-X$+@hbZjI{)Mo6r=4O4I>(BI5DffRtWn0rZ;YJ=F9`d^6m~7l#cN2YA2UmY^ zBya#?_e?#P^zXSbc=t>DFCBC;H{L#B{(6+S16od9Ua0Z;nbk`Pa>ub}?zQx&AON~Q z7$muQ3>0c=V@0b~iXwSGih0aQEC7%gmO8hxVwyKiALd|D-_tBPdWcvQ&G7|Z;+T&q zc{05wHGur+llY?!+)u;}C3>J*#RGF!5vIq_Vi5*jvSU9!&fuVBiX+`d;xgiL03mo! z-5%zhYM~_wUg&reC6@0cBMyy;7+J{c)NsU=4aB?uG5#c-63tfo+qqg8^YD%x2wlpJ4&1`}eu zl!hZvea{LMMR=B-flmbpoOLlA^B=n}$&lSy#a(#SVl za0^E(ctp(6zu!LfE0ei<4VOiYr<(I_os1q6q?D*oqvkK~A-mRGERf8Cv*qv8;H%>H zy8pU6()X;jll)P5=hB9?qL2&qt|2vg2#$GhqHi+pw|DB>4?4^)J{6zW!3CWa(2!5J zl(p}{<7L1&U}Mf_-o4J$b~>&)&Irn-qecA?_@;b(kTTcKffW z`)ps8Li_rF42-IN<*&_l*k``1_xKB%(%1H`c9Yfl*0h-8b-i)GEL^qPmnbzelGV7d zw`4=q!s=4^O}<}saLnU+I!LNtD#RGtCNVH|J2vih%T~@_VB#B&+|6z)izR(5i#x3X zbKiLsjQ4g;<;+Tn&QBI;oB8vsU0vB}ucZvH{%vmltFw1rhT3#*PCg}8Uh!67Pg=LH8o!A}e&5!#-5kr$vu&;fKNEef<~L9a8CR9fS^ zNC5Ha`&P|tJ>8<^Ta(Xk*>Za%_Jg6M3ZH?f9_zPZh%^aGm4Y5PEeN)NA;ZT0D3e6e zoGztcETB*UNR)w{1N};hP;H8k;9nMM;AJO}P!5Yp(}GJzdMX)UVn13EydDaM68!X3 zfsxG|7>ba9lN^Wuv--0V$bk1(ymG+X3};;tIya(-;->k*K|2*SL&G83&shC$)5P-DU?7YB`* zDaj3uaQCI+K0XP5LJ6pg(S?J^&QAsQ_$*tNLJtRViKxk{M1f@y zglx;_^+oZH*p4#Z5DkFp$oZ4A9s=h>$E1D3i$|MN)=DQt@iV*-7Gieb=E&H8Vs`Wh z<0^gklp>rI3m&l$R=CS16aFPekq>ynVJPlbH9T>uOaeGUnO5mM_eA0zon||&hG+fC zAIMh+aWag|-sbM-La3lgiFGIkWHIBt{l#}Wb6kb=uYm9b73Bo3xe(Aor$8?YwBiAU zWtPFj*aMO{lv{7mv}65_li%W&>i0n_KLNV%cVi@xI*0e0_;3F?$z4oX3`TS;5u1Zl z9tkR_jud)sDhl;CqtKzMxRV$?+0~OIwZe*|*Wp_k8EXc+gR1if+D?tvCtFUwrqi!v zK0{4DKPDO-j2N)o#uuZPxf+~}47gfqJnNP}U4O$Q>-V<12T+gW6$7jZns{-mey@Wc zP|$MbzdknY=yR<;IwC^5ohYURDPy?UVgi^#C+C7 z=zn|apI5^y>-{_SgFVor%q}_#6l@kreIG2u5h&DA%V7r+;(;jv3_Le@9Zs*L?h2aF zPvRehwx9i+^;%1vKOl2zIGJ)I1ib);O0lT03U}B05nSn0NXc|*mo`$uHRh@L`NpdS zLiWF}&ED~a+n*x5ZJ%!)cSQ2Vb?c5798Zmb=3464ChE^BS9aIlt(lDX-alV3KfwN; zb)UWGmD=;j;Y+mHWru$1e@>D$U!>VZOs@@a-TeKo%vqD!)uh?>w!Qq(NW^$eBe&nU z;fJg~+|RJ;Brsz6T@X!mW=9IhiXs-8Si#z46AB;v9e9k$jD-BjhoNwr08gsoxjrj^ zlBkK5bOIMa2l*A-L;4dS1x*b&ECU!kAJP#Vfg_;Q2^V>gqjU0 zOCBbyZU09zgxoz3L5CF#F3Ad>a-Y44KyD6aKF^Ja5@AqkL-3)~aH3G=8KmZ}zL*|5 zEy&Y24F31$P{3 zdss}A&b!(C=hJJpax%bqKF4b-AL_U!~Sxki6Bwy zqtPBnPNrs7b_hG4jl3ZnCoESC=a&F~xov}-&+2w%-6|PZrIy@fPgR_dS|?vNL6D`v zM^$NgwWS||9)trGWP{$GnK3GyfXTS>nWt2T0aR^7EdD+mkSjx-Aw4Wa>SAnjY5a(ZaBR3&U z(X+Fetxfc&Q?+Zc0*)6A@u$FjKOVnZuG0X|y{=)U+~Axrj>WQ9yvj$NkUvERLJXL; zCm00IzD#pQwURIr2p%D|{rK5Mg;MaVNTQj9|KGNGuU7F&2jjR%&D=8j^wa!?z1F_} z5c3cGZ|*W(AF=m_6s8CR$R!qXFFd)>`f;OVq?*k(_<-k21Yb7arTzlM>h>jBN+X*2=D^Hz z{&HTPuNEq3v&5rrMQ{RNW2!JMj!g5yj$sSU&O*dxw+v&DEekmNA%y$Md)}wnq47yO z2)N(nc-`hF`Uv?wf~!VjTxL)6J#&}+ird3HzY?8 z6;Gl{77mMD;Nu=aMC~GEnNxhszV7*tUd^Q>HQOQ335!)#p^)Jb*Zc} z!djouV|=7=j~ZVKrGh$dTzCEDzqvV6Z{G?7-v0hE5FnV2jpv)p7L~m!pTDV0yWV~S zUO56dtUo}DY65OsESzo&3H#IKZ`W7qo4aV4i2am~DA9EKqK?_I6^zM=AAn$5YztV} z!!$7|u&B4ZDZzOP!$7IgHd*iW;MUZDAkNeJ;_N=I!&qU1?Dc4v-mXs}ZCR`i$^xE9 zizaZy4lM8gh!!x{7IIrI=X}hnu97qiNbry&Go>)^@1vh0tTX@tY6cPyeKt5T?sGts zyjX7#m^gZ-K06oZ(*%AL94!y7iL~Fv!eWsh^eBg2fJ3k48CZl(mU))p1L(3YYA+1~ zl|=`K_}JT%us8$enJ}9n`=pr>8A4}RBoz;_!!*v1awC2Qp6s6)6*kV?GRfIuZ!jul zmVFvSHOPQbL0`~%t|9`iacRar2l^quhi8WY4WWCEyHvljH0CnWuvhEfxs=4i&Qa*!1OnA@ExccR;7( z@k8Yfe=S-;uEa#XY_j^Tn!0isFo9E9fAQaf_I!IdFV^;5OHUFW65yS*9>Sz(fW00i zu$+^m1xxJou3yy~JC#Kryv1QLG*)vDwyXf2)<(q|!*LM1)Qix^c94&j%bqejHCnE~ zRbsm59W)C}vbU99D<*NA0~pF5j}jP|V7E2FVetke!+Y(kH|m}nK?Y8#KhMbG%dovK zk9{R6u1UtMp!`h_n;k1(y@y*XU28#&+%=@cI-kl3(;|@$_*l6>OC?}|)%hOOcJ*mS z9?b-}a!YX|7-td;{|ZHt^m%Jl;Tu#%>>kTr-CEezvBK&m3QA& zs2YzaCuRlHc;T8a>!IeKQcn03mM11mPS6WKB({RD@Ypaol*Z1o)rm8QtMppe8x`~N z{pZ}t=f4Ci&}S*qdsRMi$&>bSOxjW}_cy*iGHa;wILNyju>Pd+cJC(R(fv2C8XcyQ zbm||3!l7FOdXjH4;n^}$@ciT6`HLL8^y8mS7n}TaktO;p&7^QvB1&i!8X$%+S<_iQ zaj#-8M=0P>{(|tJ$=A}`B5&7EWv}*IOP3|c} zhQ;N20`|d|4gIZGI)U6j3Ayuu>`VE7 z(Oi4C9+5Kt5M@45ZYWy-rVD5u!8#L0j6!MAU+**#L0DGUl+TE8r-2^?bni);?D1II zNfoqwG>3V;m8&=(ApP6#m>$%v$?lCwHy(kSY@2t!QpsX4K%3@8UDXSxv9*c{RH?Sy z{#vBmMdD<>wBN;1{O!&(fLl>w*v%T$9^zOoBO$?`mmPh-nmy0e8&tk}?OB+NPqu3o z`m^$hCm(m#zE(R~wk_VO5x=T5^X?U0Gd-#sr)2ovuBZPz{!!hvL%_{)jJE&Ppmw2n zvU@h{&NvGV2^ONHROlXS1q&o#aly&xqyt28%_V>Zf*{)*7{iw~Bfq%tj&-+jcZ*;Z z(XUyfDk$x}n%%RvLn35oR2OCJ^1ib;>^o$#N2M^@ejzSQ1Wsa%%mEE|LDqOp1wDcU z3l))1Fg++CV`8XaTsC;U!F>+yRH%a4fh>}ykMEzV<@McH7?~^B+u=B!8V`)6G&qp# z0vF(k^eus^5z#4{f)bSX*mYy=Nmb|=FpX_2-;>zP}hylF~gZ@Y9N$(JlLopi-nC%f03u4T&+cq72E3a$6A&>YrCcCIbdBx@t2!Ckv0tq{q;4G zHHT(`BrrjZ4W36spa}*f8CzH}fNPf}jsOz-2cI6-Ar-6-fHr#M9y8#fwDH?(BLt_^?NLnoVeD$WK9x! zKl%mKMT;q3QOl`XU<8Z)n}Pg$HY~E6hO#Y)))j%0pTJkP(hrw+DyOlNcf&fD&J*wK z9#`&OkGv|WI@>+{?x4+3`-rX13c0GIe%~hhsqmCi+b1%#%RY|?ptkGQ7ks~oTSDQ{ z;!EqK8IcVGa5xrQ+gXyUU!W&>fDg7lw8mfHE})l2y$b_#U7XRX@?of7dkLD_8gU@j zNNg^XmYg^=$|#+-Fd^FhayHm=(c!Xk_FX}LL$$*ct{c2%%Gu03M#q)|_zuR_zi*c3 zvuAS-*FVt*@8;DK~HD?g0LG;j$PfOuAcD7;SXTmbIdNfa zX$*Lc-}>|3FyAL~#_x1ieD>dz+jyF^_wE#kl}($gfi$r{$oJW)jXd^C6ng{kdh~&l z5T}jhX!b*X-(HfEx~sF@xjCk#jJ?aD^4)UBIGSHMvC}zsut|xEku%11V>-3G*}OSr z;DSgsX$O2Lw^Cz$8a6B3*81v~C7qhgF4s5z>NFl-YRjIiTkPGQ1^W2ZeiyTbg=Z}T zrTd1v}i@O%;fC z%dF07$AOx9(?^Z4l*6;nNtvQc*l1HA&V!iV+?bVDFP|Y4`OpYF1t!)FmuHkH0tGsP zE})bay&-}$I>kr7S~PthqvB091hh6WHrYBXzMR1QRX_jMgsZ4GY!$NrJ``{>h@;*n z1HW7d1f(LGM{>c})sWDOFJJJ?V}yV=`f8~k5nyn~R3G;29_BEo!ajvAyJg*aO|1BhKf-n6lwld=lN6AC*X*~#r*x_kAwLP3gJz9t4vJEv84`E zo2H?-`|H_%DxN6~3uWsTvJz_pDY69FU-6#%MhGF_&C(y=nfX#83aKWd?t8&1T ztwo8E_5{l%TA&va6^q9rV{Pw>O9Rlu4vj8`n58Ej9a66@i+x(h#zKUR|44GstE)*u ztUK8Ocsc4Ld-hD9&PQ=C-Pstn#KDg25h8H$Tn-53_|2;xi4479&7owH$g*a8!2~4q z@QP}h7LEbdJaqr~ij!gPepl%uUZ>u7Q~~&R{Fsc` zw*EPQVc5J(;|V17J{F-@XQO4>a;!5dzFlwKGcl?DAoL;o{%Dv939=dwT_OxqE_mv| z3D{08xOG)zXIc03(Bp=lfQQvPTbVpa73M}m0EXMkvyHl$58yd zz=zp;J?5_L+Z#XT9?jv^YK~!+*mC8eVRCeAKI})k-b*Z9YQAZ0od%qq7@Quv4g(2o zBRzE6wLT6O<)(Y09wVuYFWm0LJ+x1KjF%L)!q(f_P#ajI;NAvByirXav~D{fN5>&i zUxKnaB9J8XkRO^GHM{o4?63U)M!2mNdD&L$+oo3P2tR~dl}(=f%NTJL37@Liv32oS z`i%`=hI1VeVv-a*MUw8yl}&y8E$P|+b?2e+QW++{Hd<5^P$9yE>NOfYa;jaU{;y%| ze|0$@b)fIRt$(|3!F)Nve3Kk-XJP8V8~kC%XCE{!w>N@W!-Ms~?`QNyK)O`qX~6!5 zw(sBfr`Id>)A|*)oqNoYo$SWhv6iuT+CW1U?RCHoBABVC75G7%WTA(ej@ifO` zDnJHec%sVCq|H;e7&khbvPp)@P>iYPB_mjBXpP=7bq1SgW~V>nwQ`pp>OTT64XLwS z`US6TRSwxzeM{DBcDM5mCWYTPHadhi1RUK9po8k4u*=lECU_cu$pno9F?PM>Hb!NI z$KHM$-{UVE8h6bZph=?O#5z8*B2aD*QgsmOBl3ei9mv4SWm4_?NoOjZ^y@D2Q68M?YJM!R;w_4hcU z;cU*_xi8cn3$ul15ljLiY~h5V?s>}5JwL}B>n9mf?F~yeQUKQ_fT1vpBD^O`(VQa> zAtFVF&W5A&9e_kKGz$Ue073*<9oB)}9n)6D`}Gk1w<@d8(n=Eq-tbOZ1sUa^78u#V zla1%obP8uWm1rwYK?1!EN_rvx(b2e?Q{?8cAHAp&qW({i19 z5(hOe%$G#`H9+OiD<)Y^DBPj(Q8~_{DJ1HJA}$LsfS0ktoy*_|yYp2CH3H%#!x4^n zLoe)r`;u%794+jWXteF|*ejWv0E56`bCa?%nV!?@pU33$r#l~1UROJXKm~<)6ANjnjwhzMIXL4fa+0dVMIrDtOk^YFu&eVT7H;qE`%F(G=CuHi(=I8g&xvE9E8oU0OzGCcjt(wO9`=7cUbfxPw{$nJzCf&nXniqh0=-52tIVq>{oDi z)KU?LYM}+H?Gf)@s+_pdce)hMPtVJHUZ46-*PqVSe))dv9e!jDcW30U+y8s#_O$V0 z;eq_=cIF1Jp^Y!iC&n$omtSN5O|h%&M%k;eB`#4kRn&e(b&1d!-%YkAM0;S_#l$O< zdsn;7+`UQ?=8s*^a$f<&SbP8~vdWxxFpXD;!jdP`Qtf zNh50^GXYYwa>B9F6tuOZ_YYJ!Sg@mi&?*d(qAS_aI~9)N)2aBveEEPaKW(GFzT&j0xXrY#APv(O-6xUD+|fMr)X#9`7! z%Svb=A|?wQPzXyINA>V$RZG9^G@sq-%d}$OkTchbi=ThJdu2FN0_kFwy(!QydT}1#DEV`2Ypqz`SS@vuPC=^{yxiwR z1;yZLP%2`1qaeBzxv<1L=w%pRqCTNL#(sejiD`vIAu+TwvTR8?$P|Z4<0gRn7+`yV z8Fwn|bg?fK7d{(e7rL0VPg_&Nq9TayS^}K7Q8-EF_b}hsX+sjSJ`z7fEAf1cHxT-P z|EtzVYY6-AlWLO|@aF+gVGB_*QdKewTb4-3dg=8SYMe&es=$X(Yk_$K)s*O=(Wnm( zAog!Gr+*XH!q=!M(PN*9$}1Ka3DB!a0;5LxPKcJf9Qfkp&ws6^SpC8FOeS$8dwe14 zXQdw9bT?ydhb}UWBqZnDg;0nCGbb1hmL-lyV@70yBE6i>pW_lnKB;60MX(P-_IUs` zWy(6Fm0wU6Rg~@|9qkL+MAjhZeAgAGhz6UaV1cp_FrBjBu@r~S{RVb_g)v2voI7NZ z=)Gu-b!w=MgQcscv#k=_BrAQdS0L;adB&SE+_;l-l93h=O=!2Q@M9SA0h-H)pG6(*8}k=~ovK z^)Vu#m!tU}P%Kgwyt(*Nv(&Phyftbdfuj{b%O5N`2?+}#YVgrioHkT-&pRr{rb@VI z(*zf}gF0!T@OK5{1C$Di!V%w}vgxL%jOkLVDe`e(5Q>Gcem_r!!tQ^|%Yn?de-1_q z!gpe*#4&(pVYLnLQJQm8^ni2a#qfQo0IovgYpli_ff7D6Mxm^F6-9)Lew4r)gr~5U zRQqW5xI_FZyjA$~xZG_7zwhFmo$bZ=S@#FE`uy5jb0_q-XI&2(s|u>4jfe5v<9gT% zAqJ-EAB-?xVDR=wXhe5P*?X0D&BQdCjw-u9#pxY8W|kYz()~L@KIYv$uX9lNG*Dpk zZ#`)_)>E}hGFj)__nX(P0%xwrAfd70QaoUFwfB3gFgQIFC?o$AQaWg>gSh_^Rj;OI z5c9ikZ!v~bypW&$l}>-*ctL8bA>4g2a&_kCUpJuUyaR(DLH)N%$8N`pmwn*8Iq!GYad2>uJb%&O;Zk>VF28ws^I?`Pqz(}`wg}LuYi;so{bff# zD&&y#fC!LfiIQXDe#YVS+7{w|fPpe##z{OMz_ukTSrX8>o6#o4v1J>HOmA(SdSK-j z04hvC5p(fnzIckP$L^+c;Rw!7wEggXAhD*X)*}GagWvx1@vWVeyWIX9OtWI6#0N;6gN1<=-nDtk`LZEYJscOgH|bFk$eC zV992ahEU`rX5gr9X2;C33Twnd1aJaAjG}Pp0TbymOVw7Pncgw0Jh(I~>nh6rU&pLn zl`2D6(u@IF_VbK5BUrSq$$z<80dTtMil1SwI#ikt5=Hx8Y7aeD&T`2RWKHC_haeD) zenGOvLVWC8HpxwHb6@~VTIx;)~Kgy9KF4?}WNgbtC%Jn0Z_0!%a! zS`^VYfgx4R%a$#x^E?b4VM&p}NsE&KjD!K)YzPV9{A2l?ZrfX|i` zDxdJR;CKedbmg9f;m0t$WoL0m!IE-SOP@&r(r1nskw+ENn$~>SSxln9g6=UL6DBxF zanwpAZKQW+x-wvoJzb{S>pK`;>VY*^U;u6$vrN-_pwyEZh$d!fzYhqC3%lIgoqH|3 z6$ro}>vim8znuH;ih7vTZ28RXe|kyde_?k0$JxhcoX-c8XPhKA+&D2YGvEHZz0poP zJL9@P%Now%4(NI$=ahKgQ?LPlF*g}71l<^0E1|6x3~jiFwH3UurCY*(X=~R9{9K#e zIym{BMSq@r>u^UsYCsI}5%Q#o5&pgn2E~)xNBUkZX*aIqHr{SsJrL%+!9`gGEMR5gOxBDtx zaODvrQd$LEh`|<~!mtRC#S#t!4&LRx7CwR=+_w_YrtAaHG`}^RdD`5RwEeHd)ETNEI$QkQu+ncr^Jx*An=UUW=f7B8?(=n-iI@yDb7N3in!A9&Zms*2?qwEon_sCKs+Y-v%`#8UbrA%Lqc^@l+3}N&mJ>;k&s`Q0jkhewx@&g1M zi{i^>?%U_mg95H3r4 z%qN3IZRg*XlI7(!-2yN1DI~Nc%ca(!yR|9=+I7!Avt=F!@6(U#arIK7YhO~bbx3oc{}6k8`*Ctxu`K@Kl?&a7)G;u2oHU+M#)i*iCALAeG&m zcjNR_h*2&zrZvKm*ivNz*P{(J2><(dKTke$$#sn{G1W<*+=n{_*DRE)03-jd=(z6& zDgr1aeYU2PY~dHse0X&%?e0q1l(kS%j|#-Z-%1Q z)dIIyWG;Ch6Nser;N*8>_)qkJ?Q5(M4LVH@pm9emq7z13-c4Z)T!05DKwkVk?Mz_Q zG6ly;1lN~&JucVHTS(?}mOTAum9y=8yj-tQfII{~>j^Aevcq}2qC}G%0faLmR)lM0 za}4wg>O3!u+V5VH4h^&i`BNk2@Nz?)+bH5Er!0wqhhW$#?xP6#GuoV^Q7v*gj57>KnmkzN3U;qn1<;Wj9B%qJG6cuO}0 zdC*j2B5yJe|M_anZGT{R%H8wv^oA&?PARxj>nM=#Zm>)m;D#x?SeklsD0~vKmeyvy01JHkwR>7-z|S03vo zwGjytz<_Xc6MBUbl^cd{s*>o-Y~MsrbRNuK9DVrk;bJ@1``1l*^-QlqY4`%Ek za>=)aL@$Ley*~P-TO2Wx7P*=Nj!e5f)uJ#OE$++csUn~zJl08@QXpZezzU=C7^V}D zldKOsYFgXf+}yOf_{<3Q>dIYP>f+i{@nfMy|S z7Yk?E3_gE~BYpPH4?8ciL8`)={f=36Ox3;{VSRWO1dC4Z%H^vfg zdChm6oznI2J_IbGT%fAJ4(F6~V;U+?-;-i|#y~u2l*y_i?IFMX8v|#ZbIlW}i|L*o z|1Pk;c1CTfR#~_IqvCIG{!eX}FwgxZr1q}SvE7FP{}ET&QF6?EO0A4;8=^>tteneb zfjcVBNwTSqc8`$eLNHsiHyisged)mLZ}dLhNm(dCQQV0MKU!g?I3|vczgDj2u&yV>J#$|~rW#nnfV1A%CgREV zW@~Ge_;ORS;~J}0lRa~y&lk?F2Abe%TH)2l8uaAKppF}n8RVO_v`MBj{@6h6ZP-JJ z!2Y%;l#Li=4%hY8cykLXt?MdfHk^n!{V5K$R~45^cCv8Gg5616!n_Q2a1|jmXy2jE z_IiOK$tMO#rZyzQptu01HTB!H!&9aHhmwuJXY)I>lmk~BN90uv^;A5cXO0G_i1GLI zsJFQ;@CgX4dpvwg=pfid%g-#Q>%I&KL z<_JA9EoQKS8`{0Pr=7zItbl}*YvnWsLfmK`c-9qF6dNpqXE(|DYtb2Zb<`qWKYMU} zIsVhev-hPkh+Lh#WSa>DMY=>jr}A!Uf&Vl5t`ecUURIb(=~($xymuaUH%Rqos!N`= zUZrhe&XNc8p(jVIC=)v0cQ-id?*QP}n6dN=0{{6Dmu}7UQotxw8!1-)cJ$BB>yuE% z9=jXCR9BFrm$Y{98JAinz7@zDuThIxxT&|ObH^^+;SZZ95)t`_iqnz+0^Se2Dvbwp zjlL}yzsY6^Vsjey&jR;Mpv_dyeVR=g@tgn+ZphPCBLCrB)UsMM+j)@PDTTM*;UV5= zXVcncl*+E?-0SHyG3#Ib`c>Fr@dV~vz_oX+d=FI0(hxtT>xrVlsGA!SxiT-Xeh1WP z6=&mlE7?&;O8g-|o>oWNcz?Wk@A^3RHLa)7BGngJH9pPnVYDjMbyU!^6W=G+P4YJ=85;2~gVMAkuy^6{w&f&6T9%8if1P~xtkcJLjN4+|2MwH6}Rk;nivP>iy38ov8C*Kod%kb zu;&GM5iEHn_oV5!caDxYWcd4Kgh(Dy?4HwuD~1z+bc%TFO~o(EZlK+TxN9ol<5T0m z&>b_gX~+D!m49}|qAII5o9N-;SwCt0=rRoNzh`x5)3KEi*CDi8FeUa`Sz~W9A5+y4 zLiWS|QJYNa;?7Qyhm5Qz8_NC$NNx<6*Xir zE0ei=6W0y^Bv=onFGEe z&ic<+p!S+ir<7AAtYSzvVLul5P&L0{h9SKh;2S3C;Tuu#F^WtU1>Xij1+1I)lr$2s!FB*G#zCo^>=ipx45-j-R zu2|2aQC@=cr3OAzYF&SUn>1j$z3`E&3;q$LxwX2GxDactqPZYHJZlsXFr@W2e9I1S zSr2nH3O}0yg%UZ^-Lth6UEiq$U?M%`)DS!AWeHQD5_8+`a&J78SmE;i0Yu(B-(vez zIrX+6n9llOI%OhnP0gaa80C(bGdF@wsGvXQ;(p0bzF!2}`h0j#OsJyjN5nc!{<|l)ivIA*+$JGE4^48f<4J z^kvQV|2UFs%|w5E17J4BkPYQ<5c?c!=?vXlq2jw>%-?9Jt!LWg0~e?(N{PS~CYbZx zZw5^F{!^qWHsClphjU~y8exz1pX+{7m80X!#V7AE)wZA9%{iMnJpXb2;puLv=hXB@ zsIa%j#pG8|kv$!Crd~U_E;X2Akpj6&(76=rG!DXqk4KTQ^az3srVn&gA+syTVNugL zYEct5O+E{ak$-tr>B0u?eBzuK|L(Cf!{jxuQB9>Z?**-?=C+&ZH?Lj zyB=@P((3%VZs)~G=f&oHq?OUJkGG}}OU{FpcxfKUrv?D@SMpQD)DUt#O|5Tar=5vK zEfA{D5 zxx$n-iR_2l-hTeZ_A$H0LF?A(>;myHd9kU!{*G)v^HtNdYb2(j#2jtLE)wwI3m?P^ zBkvDP)@LjvZP%~>ZM-B56q6#{{dxc@>^2C~g}eDt+3_@DT5@%d=05cH$TQnuu=RlS9SvSFbV($29@LXHy-*uC%xA@IP zi(t**Uh+z*>9dP*h3ECeMwHWU~6lAbMw8BMR@giOQkNM z_X{h}lb2SDS~ci}6@+P~e~KVM zo#Y+Is|rGH4$}>HEY0g$9|bjvxcktTFgR+gRE>SgEKF_W4o_KkGpSs%|hRkZnOfQ*(HSzz=qVP&X76kmc_Zp7EBK(@50?-)M%}+qxB7-R~<`=E@5Tl}1ugDd1 zThJ9J`tm;b?gE9LBDoA-%oCsLSPH^g4UvKDTCWMB8a>ci2H0Y{jw79bh>>0*v9uAi z0*;tJE1m}*fA+zBeb*KnASu$+tunS@%}-eF4oRrZGd=;Pl=5=nqqg6S2jmlV*Dh4> zLB(o;Ti_6IPY?!joo>~cLR|7yh=PjvEK#L`)1~| zJHex+l<8+2TBD*u+afa#ujWWyp4x!4T;2i;;>c*k$r6j~!{*PB&gk$g_%E21Rqug+ z=kB&AiE(_9F3H*a#(ozcuY#$ur*Y$J51-icYt65V$t|+u?bP8}iUWFys1Yk!ykjA4 zIZg)&9$2P020#LQ__}_1(EJyv`KV+5^G{!Gn`)ZYc)E9_=F-5$=IYkbr)r0018J$= z&)*NvY_0Sp#q61id~@pzu!XDE1 zjb$&3+48Oi@rQ3ez1Z)c-~G|v8mk()xxs(YMWuNZc5$#Vy|FUWY?RpoX0mc>5%L#` zMmP)fP+){m1xm5%vtRRR;>1~uRMdcbuvdq)UPtt zTt+Y5&AbBKCDRf{-{(ajRK$FeXv9Tp?@SGPh%K+@+wMA$a}!M)M4{iHTkZUsO=XTFaSS@^+AKLkl|=`RBvg;j@$)Rr;O=+oJvU;SX}g zoj!HPe=CV&nlm1XAhF;iGI;AJsG^*om#KGB?Qz;GXmut*qF1H|f(R;Zd8qNC0@bjC z(@Ci{(WE%H{g;tWJpJwyH{e_aOtzKaEX3_%U=G@4bUy{Npyhsr)X&awcvqQ<3uGSr zuo;+}E3(L!AoxzaV6RrYm>Ei0oABoGPW778o)O4JHqLr|xK8sKLn2j}_3*wU8mN^_ z`ZXt07kxGlJ9;v$S3B9T-~|KB-vYGV;B`XzaaI@g;dEnthT)VRm$1G}s!F%|ZRAx} zEze7UiYX@k#xliYVf}8W5wVy}&8TwE>0__3lY>fRf5GsAN10KqhLVb0%437jHKs*4 zm#acIWyfV{Z9s=K7Pzhf|mGWOo5d>z3 zahoex69u5W5nKO~JiUdPHi-=#MnilRQh9$m9e_hD4Bq`=$i^l@q?7JlV@A|d-yK*> zkG?Gn_ElbnWFE)lc!zZCPd30i*{Ld#x`zQoOysyA@r@N`@8y793vB^Qz%%mYsL%|R zz+)rJrlGdlc#dGO)$L7m?&oiU(1JSqfx6J^7w=o6YHYprlIthiHYfyqmGD?OwcE7y zPSBKy`LxBRSuc^HI=mA~<#D$dj6h(C^U-zr$;YR>>;>eBmSO3X7R~*Pn0|uSo-`MS zT&HIexfy)-_3peru|$?o3e3sE`BR^ox+b%s@sKX!%A4fHijIF);6G+|zRq~|xF<^9`yvV~ z0v9Jyd%T)I37Z?X0*2;}-G7);oC}cD?*KQDl03MBc~_aCCx?L%h@^+@rj4w?E6BG| zHo!y>Rt1o9?%W@W!!baeb%x)4s>oj9=(?(;dGXe){ZH}5cPZ?okE)9yv3Y{^ zjp~^kNK<=FJFI@2lt^Gd* zPd64OL6+o}AZAaF@u{h2hvkia&*sRpf0c{Vo4(1dvukec5{utM@6^?bpl5q;5Urk1 zAghumjE#%{j?gWKeiGYRLEo#M?WTXdAUdyR$vZpc)!0*m`ELZkNZ$_%wlH@5$OeGc z>2yF()7#B^Sy*{8b6##VAx!&+zB1>F<{<`!p}-{;pfU3+J2T}n~CDwt;Vg!o0)hG|bTK0TGRFT%r9;e8dW4-l!nx5*k& z0f+HuMGShKz;yueh(opqsS7)h!c>;~bP?2P@t8g&odf98c#qi}@hqiPj1J)*fO0i! z6uB=4V9E-v?8Vopk$n$Ir&zY>wzCH@&`&c zeBxw*yR^N7UJXuM+?et4drm>LDsI~H_bbA9RcdQrV3AlP=y>1dd+mz<>BV<0EroEJ zfh+!iHkH;c;_5eEO02*~14JtW&SeFpx?|d83>^5b9%B8+Jpt}@j6ueL$D9Wc z;z+=j7K14?o1N$5odKY6R2-i&|0Z-cVu-M?Kr)537;Ui$Fu74&ub9_ivO@J-i;+1(M2+U<`tXGXrdFUTcX7j}6c zRqhr~T|<_h1-uGi60C-PNOdAejUtiiz`fH3GpSlBnm6G6O$ed)F!PgVpk}#l{{G7B z#X`@ba>H+HNlHaB>Si29+Lh-j26)u~{Ii3Lm@s?Lp>d)h%2o+^A1VcXGXO)>VZ;3y zy3Wsxt-(Ezdw%;h;h%0%>%Ro!aEI0iQ6a^Cu2{h;`9WBB4(ox!KWfJAlY2R|3@aSKa{Xj5H*drhf3f`jo^t8?htn6J~95vb4C>9=Z5$=#K!NbjCn)1#BW&5TEfL@IV%f(ac7W;X%ZOlZxX)X+q<2o_Ym|XX2 zw3?6=ar~1qvsG;t?D$B(Qo&_r7G?v2PrM+}VjrQWvh}q{SF>kOSioNRN>?@{a__$? zaP!HgO54%T7wmCnHmyM$eY=d_^Bshiof(H(|L^Qv{LNcMrJk--YXd0G0$fM(;`gTJ ziJL(fKpg+hR4OD8TR>8DJc$1hd(|-{#1nc;oe0|G!5QqZ_Ojg-W^%ww!;p90K|rj0 zG)2yBY`(?A7uZ}xswMF0ri@%_L^@EWY&+8#SX@jIE_`Y?y@Eb>|9 zYW<|g986xKkzo2~duhqZL|1q~fEb}9bj_vvjV*aUE$ccYo*A~pLQxc#w?C6_OoSW@S;Fr_qalDO0${1j70^scf(DR#UFKz^>aR(!-NM!c#L_L23r1X$l-jh_k zd*gG8rzdA;&&20<3NNJGxB2R=o@B+HwQR12jz3|Xw=Z`7%9nN+;*p$UZ07>gyZ#WT zN8|do^dTmZ49S9by>}Icy(Xe4cmoPyxp$R?aQhk}Q^-;w?tDmx!jU>Qq^pdBzM=oS z+`*B2*umWVal|}fd~fD(Y(HYNNhIpoCpnUC|*4Fft3gw@Nv8i(JjFvcQ`(C3!o9_%1>=4EQupbRB0HM=x9E-$TzDJ zDAGq;s{B_#`(i_n;MUob^Ra5BL(&=$Z3FM-ScqpZb19|HE8ob74Tu$oieyj-lrQs= z{3u;Vhm*m38>frn1{>g|9s7l|qAfK>y%fk+cG}D01F2-MM&nJ(YhBf~;8!=v#rT`i$ zgV2UtQA5B4O?Ak!{6txqj7Wa!bZOsvrsobCijOjiBR5QvC?FP#nEaMRH#alA*J9NAgP172fC$!UHjV8T>BTOl)l^>kJnnNLdk0!_g0E@>fgIG zv50foTUoowUzZoABRbV!pHQSw3VGg1T|63=ZeQfxI-2Y}CO6jHvHUTzx~j{6@~yg{ zxH#%JTxEHxFCGp-B$;zek_qx|mSg=qH5I(SR0Y^L8zHpG?PRpI71mB{KawQ!@ov9b zkXREVl_#&CW+46WPFdT^LL^z@pLZkg=Zry^EQt&rxSlD}+R*E<#fH++>Y7FeogS}( z%rWPpsPmr=d#zH-mTP4i7Z}`YDn^LJ$g1~j%l`UoqjhJbaDByyJXGv=F3=W;88jA0 z`_dx%Ta%n%&9U~nbfjbeu9ryjNQ4HhEBzRFp2j2t6PjsaNQ<`7R=bIym3fGWuWFVu zyNq`AVHA(s?8v=|Dda&42@79y0%(YhQYE!}s(5;34zew@zoyAOJ&5Q6byqDs1harFw!PG#y9Mpl3-GdaY zN0_3m$Bof(!k7#X`gV_Wh)q*mDA|v3cw(y$6}?tXnZ+;&Pe zymg+dd0bW;@^iC2AGA(e&y2Gg#I)22Sui^%LTPwgs+_X0CLwT3sd2)1?f6QixB&{r z8q8lRU57L9%e%yNi(IQ@jLQ!&@dqLv2|c3*7G(87Hf(4%G(C&C3Oi$H5-1N~fKgh^ zzqd8pE}M!Yk#I@AKGI3Sh;$L)W0(VrYwf>*izXlZ*-gTlL>F(C?(OY8I$fR@$n~^w ze||Y<(!$-)Q!4uvbsoXs{UshDiy=o?JSBjD`rhS$_n4KFYt>n(<{3^^NZBfb zAf3ATf^SEEQ=~c9d{*u)Qk4s{nc zW4cwDmde+8lw0gsdHyA8=c#Mn<~uV$hY9UYriC1SFab5;K)>qaOvFWo`Y!(4uWK61 zOIl@$eBy@GmPdeOxG5M#AmCO+diMr$4+`MmqLRqE_J^|@LHDweE$|_?_MpAV>XVl0 zlZ?*OM>9>K!oSTLrU$6zF6>%o)znUgjv`iGy5dH;8~QN?mK1q(31t>oFIdu~bI~Btj`SJiOZ*C32T!XHl}&nztwz zHtkAz^&mw+sjk%J)z#JF^QCO1>47r-g7t>!`Qvpkl9h4r;9&ejSw&g-=wDgUl%{ft zq-7<0Lnh0wQrE`;Dd1`un`sq*vo z%RjB#fR~uu$Q|$V-PcC9L=J!dj|;#Q;k96UAK;ncU`x9DyZ`y~=a>WcisG=Rd@>D^ zC{KOA-zS0(ZPFiLx8t=DS1C(MlBmmv%`Gnp*aFm}rdEyN0egJ|Vcxu(^PP`I*g-y- zl6C9(25h<1IW0AHSDBZe_hLMbpO2SU(h{Kd!l6Au&eNYFKUl>w=6&+Ry#{WEHFzhcM^%E`5oJyO67=VsI`4LpBok&MSC z_bR70$z}jcA~*?BgDvEmUL~ssFx-@w%Tw=nBj%@(>=z!y+bdchy`rKzzbGl@OGdCW z$wR2q(%TmFfcS9*Zw$GQDQTTdYwr$%?W(H?nbx&{7$*hNP1Ol{V?f%Q=~k(et5!-p zF0N7~Fh>Gk!1C;-b;g4|D9mS_NqiP+(cDG4gu#Gn+HX77%u|wxv~j7Kj))Vgi_u5_ z)#S4hh#?RH{lrS>H~N;4*-Cl^aL* z@MSDnNw0;r!3ZF5mrB4vh(;1C>9u*lGp9EgI=fhj?x3JmnSb9wm^3*K%At;8Gz>fmZ8yLJ1_V3S0 zx|2q)v+u3vgWPl5f!?7fR;|yX&Z~E(JNKufwxW&^*4975;|ADhwsow??~%d(@**wA zMmn|**;Fy@H-Ryq1Vd(zB#U=Iz|6wKhg29HK1ud3&}+{!bwAD#^0$uqf=~DPpB(;w z-QhnU>eo1Z$q4RuXK8qB{z>qRjcuM%$wDGjAkzR9!g{&hjeV|Q;{Ei-`D>-K1n|f1 zXfeM({n1HBAXm_uxe8toC=-Zp<0r7g$_#sE_=g0UIP1WbLY9iV2o-hTcB*fALS*q(;+yGM65O&DYr-3ZA?YB-#pJ#iLhD5UhwCC= z9Q&fJ6GJm8a&XTHBTd=uOPJkrhuR-csF>q|1?_cSbu#`~*oycE#<2uz?Azs)R;zKK z_)of%dZY`ybNySqJe#c}&(4(6wdY%POAt5tLHR)Oft9-pia1pxxDj46e*K#Sr-#1m zbkV>!z+i+z%dCWF_>IKfdS0Td8|G6WeAlybf5?}-rVC%WKX#D?6I}HycesI$ zqhWErm*osST{m;^l*vvbqirfT5%(@#$s@hv5+XB`y#_l0N=ij(Y=Dq6t4&0mRsOQu zzNh!UV9-=3t5KggV!_$J6RdGm`+9Ma<&I~iGr2(WN!Uqav8_ej+81?9YE?tx_*Rf= zFYeopFBmlv3cNA#XY{@#;F0bG!{9$)8g(i~B$d-eZ`J2PJ`J+g&E#{w2Ly`rZwJWh z-EjQ^)OhG)zJa_T!33YQcs#Dl$;tgKVMPZRqv;Zgb8@A)Vx37!`XNCr(4!BF@0B;~ zrWTN=`^v_&l1z<&ju|9^^Sct{O*zCTXaQ19L?%#!eI0-+-htC`tBh!%S2A%Q=X!K0 z(C&Abb1)nJBL*i=&9LR zIXef}%ldIPE|CnP1ZRxJA4|{fA55nSo#$pL9`b;LkgIh@!A};nG}-nqkq?<+`185Q(-XM3PvumZYbUU9*{ROHh=UH<)7g%2-^f)*dS;W6fzoZ zQBDUirHZ3y6n`Y*x@x06l%Rras7p?yCWS@rM;9Mw#kLfSF1Ie^o*a73wh{Jjy-ZNj zhcVhlQv5KBI(A$wE1RXoU?dTFG-y@m!sqUj^e!6o%V;c8U!|u3NZcnTo5P=k9E9ma z?nNDCgMy>qTVM*!Uz5X@#V$IjpC-j8pXsF9?hR^iGl^3oaC1FYDOk+@-|cMM^FR!L z`21>c>w@LHV_)gLFIahe3NBe4u%NhCL-~zaq*<_xo?m2g)DISXxYhaJH1m@G?CFGB zC|X=||1fIxIsd;ORK+LrrLHX_$l*k;d$Dx%L^^Ev&w%jDb+$uB)iTnH4~_d4b3>#a+d}P}n$Gg7_7_G3a?K_r+DuZ|55MJyblC5YB!17asdwN6%dS@~)iJ>59Bz@lg}JBm7B- zpI@8jfBPA?6lmf~rqo(xwZg+R@UPs+@NxZQlPa-%Sor28^sLt%*~wdlrM^4}#X|CH z&Ej}%=zug3p9Q(rjGJ`=gl@k?99@SgwqF0ezL53ax(+A9{@NyrEbE=bSYYAr7S697 zeoRc6*&9J$TodC-8Bn`C(71LT&hQ=b=^apzBXSFwaH-_+b?w);FDn}EvwDFbXX6$g z+p%Rj0PTo|8w(r&(<>G9H@{DoMpyhYy(KK1iHBi{5TV)mn7!*}|mttrU37@h^jPHFfEoXOi z0bCPUfKuPFw&m~X0r!W$AwzP+POa29Lr*NhW*V*S*K9->2Qe&}Ibx&yt-86==~52Vr_ld%p`RXl z2Ls6|EnmB-zgD%D9t@rS4mS}-_sWL(1A>GG|odu9^!jSGyxj)ny1fy1-6k&)4PZ`gdN zin>iO9akBJ+;dr!2UM8Mj3jXxfe|53AJ%>?l3{?&6}f?k6y#g{b+kW!Y=d8l+MYja z&u`qdWu*BUMN?L`3K}aDRw4`l4!XP2Nqw)|oq?mBFJILUXR6P-=QW;$2VC@xWEn7{ z^BOTTJ}^^gJ#`m6JjGK|Brh|$Md*09eZM{I@O<*{;wXiCO;9*G3Uuu~%t(v;s}!|Z zO#Z9Ii>Kc!lo#DvhNa!DnZ|oSAvh<~9uk_qYwf=L8Uxl3#9SWU$sDmOZ`XIJ z#M#&}MFamgugrEj5MLbYn#WgUV=%&UW|yTX#;$_rqv>*41^jFs`x2lIA}}F%mP?j| zt#|TY zLO34w`xcxI^&W>77rl2H;h3|2gX%+75|XXtHyc`~-qvJb^&8D4+Fv!BC1YkJXL2)h zQx>W1{z6?H0D;S0KGq_ITd4pCI}o()KNvK?Vi~ATj8zBT26Dub_sb{kt<3fFq2nQP zftYSuV#dJi$;|f23l~6C0zyshYN{@T<62k^s%x}moJ4+}AO!pPY=3?(%*Dt-WX=!! zxbwkhV|#l(Y>%6Pfx-04jAj0VGS_G9K-@`Fh}#R(C{F%Bpf;JO?d3U_dV0q|!uT5zTXHd+y{9^P8Abn<#s zPD~&mQJS9o@kM%_BJh@B`}#}FD63J5Q-iuSEucV&UVrhQTi5{AYjDTO+l`g0g#48T z24v9#=RMPn-WM?!OJC<&Lf3M|r9L%I4E(Aqy zn+dRVheS8lIH4%+mBptAUT@Y;vYf7p#f|0;(O(zIf2TmD1Dq!CM>cX+ekCXf-`Twa za-?a0BHt_+7N zYkqDcC=_H2kV+8%43SFgTOga+8?GNTF4trH3L=@J{# zCRBFsC5Yi^_2(48kl$w;mb9A3Qon~nQZpC5&jvfKT6TjYw;46h{uUy&p7Em8?{ky1 zo>4%0@Xz$OE;e2pNBlYFKLaxeV%R~GYq>*&Q6z7D02@=&&sd8c_a>nP2@En%LgdRG z*)RK+6_x+`{b7w;7tL!*Rjcj!Wo2Sg;m40W8}gIPG<0^Q!8o$BK<^vn0gq={flWxs z4>G_)Iw=PA9bYhGiqztK)N`rC0;)fr$ReMUTNk<)eW~PwzFEsJX%n+D*pfGXMoDW5LTG%QBawBh+G5cHOmDma3(bNx#TKFn#01+mu-qBn{loacqd*Rl83&f zzIqktakBH4Ss-^5@AT<1`mWgTrh`T0$Z7u5*EYX9wpv@P8odI;mydq^x?0@E5!6Er z+NMST?>t!bvixD9=5>$tRaV{Ca96(j4L*GrUz4g+ZYlf9n=l|TSw|OxNy(CM6}&4T zrvG?(L|){sY(+Zf)hwMV_8f~FO!q&dYR#)YGoyV?S{SmRp))|uvKJ`e`dR;IZZk+% zcdfurfU!qF0Rda}31$Vl2Zh7cHcrk5&)GNUqbemkYn!8X{flQe8W?TWZrE4^t@*Bm z4Mgx*Gn@RPMZ40*SPP?l=olw*BsSbaLcZS?)CJ%*)S6F{S8RuUE602chuL!LpKA!U zv0>cmu>W%4K{Jpyz6(qiN_F#_a2%5!t?)HA3ev_G)wixRCWtn)2`vbCAJzNawp zy;)!itPV9%wW>5-8->(3VUm-!zXv|*@ICv-f0U(Eb$DR<#bvHxgu29#wQF;x{g~LS zKjk^lo}xMgB3{kttAM^B@rAU>rF2ry>@L|w^$Jr09k5`9XhQxw^X0iiPL!0flFujJ zVXmPl`Hqczo_MV`UtBD!3>GC{Zm)9;h4xF!~+ha^~7( zGC`6k7o*Xn(vlUrt_rAw`H+JycNBqJ0Il^Z!((Us@6bPq>Ga3 zN}-mO8=(`d%y=hR#H&yu-jqt(@L?h*8@5`tsGK^Ys5fD;gGFk)5olS_;u-XkGx;J^ zT4UCJC|9to;CA{irdk20IPlg}#u4&O8cr(-m`kV$We*9H38Ut8o1O`VdJJHmnG^!i ztx!y>XD=&)sTXc3GO3pmPvv}5L*@8a=P`)bX4m?qmD8u!F=BpD0Xd@9_oMOAoMNya zaUeF4t}XliWv&nq(x~hAGGj^6TiVe3ILrIdjqICUlarHHMUke=yQK|N3kjfq?A!lN z0%Dr~1c5%vD)=AEK^SCw#$-;9t1{DR9g24XTrO)V3e%u*7JlCSX)-6?^JgQ*8li__ z=ZlSp>Q48xXox?$lVdS5!de0lPI#A;M)1zhq~fqc#;C*BR8pPifz?!3IzCDiy0Rgd zJN4X!eMN*IpD62x4RcaJamDL1ZZTcmVDGaN%#9Xq!WgonX41>s%c!w+_ARzRPAzjB z?fN#@s~|IABZJfcxko04X}T>t+%o?8M&meAU^Q7B5dnukWcG-&m`b9y=Vl&V25}M0 zI}t?hEl1QPpM{6CY3bPZJc}C&IG4iQ&^`luf&vm?GXUJaVn+s^N7RpkAE2x2Ohh*D z0>{i+L$UHWIRG>#Psu>qzBd3@69K@Xv*(|6`yYG4yhm z*Wr&}M@LFgTl!h+N55*;Xs>ME@CLtb4&M5=zTYpOBqbH>S`{_dHa2$btOo-j0lT~X zn&&%l#V6|z${u%U7>-5ETdDFkywozvG7to&XBo6A9x|iTeMGw3kE5UIHxqOo0?y8% zJYv{AAF=Vxg;PeSF8eOLY%2QyEOaBa5HCk1h&i~sA?*TdTpt?Jx zAdMTC&giN6ay6)RR+^Hy6Og>^y6YpBWWjtLT`(&QhGpIRNiV4;%Lr*I)E7zu6=WuF zJ2FPQSw1TZsFd2kGam{MWa360##hz7FTad$Qud}Dn`sNJ{0tL|VYzqdn~RQnEoF^e zoP`8Vs|bi@$|m&;ydsRhBridMY$h;F*W3w-9#Dtsk(F3bpm}l>dPJrj*r=GuxKRx+ zqRmC*`Y8cI1ZLnm;6LDlR}Lu$a^C56v%cB}qeA4bMT>)dN0JqT5*n}pUWG3c#XuZ` z|6(reuqb@?>Y8PRL}gZmrMeKCI>g)wkj=vQHw*_Z%yH-7wyi?-0Kix%@<0wiL(tOUpGoC%fB3b=XV z!Y*_fb^#bYaD5QGuz8ug{_oLkXJ=>rqhDfi zBO~49B#&k`Ci`q{ zOGJVhfaBux^*y_+vRr(UaPd2^I_%G+vpog9WA7vzb03quR(kqn6+w2=5LPP zK+8D?=x=>qaal0`=%HKXtONJDcZoo&xA$MZ5u<@YBmg4|`bP zK8;nV&9(QP2741g*m*( zwlrv_I@X%Oug|7;D~QOIe&}J3u&O@n*eQGzwfHY(P3fS__1|al>H7M5-~RY*mpMyM z!$jXW3yeOk6##!~ah;uy&pLzUCZOG8Fo9^{BlmgX%OiCKFue~sipFN{TtfHPdd`(T zx#h>(p38a}kG)&m9kG_2P zgcxN;_a-`hcY>~io>^u&zT4EHj9RZy_Dp}Y0Z9b_!Hr09Z_}FruKlhV|8tY<8@`o^ zw#bf69MMc;2G4Y({z;F7BN`1sE8n&&pgod>@s)I;0H zxZW4kNkFbm`hT8GmXiQ*3@9DByXln$<`8Ldq&6!8Y78SEcQb?o&jg7t z^=|=_WFRGxg{S^xfk`MG~KsY`!;e$3ZwyBKtz zs5Ka%U;%S#|s zXF4z0S@}jrdQD|WKrki~p?g+wBKXl#ue?$&Rcl$8s9;%}<$Kq+yg~ml1c(3>r4M^G zK2;iow32K#m%WQ|3eAaVQSB;Jl{zOGgCUUfH=D?RTm|DRSBo$H?iD||CD`{&z6*CP z9t%z}UoR2osWMl+231wnuycQBP{1R_ zvz3fuK@0&D6DZ=MM^2zg^!aFGMsLricPoc+mvG?QOJ0Ci;O zi81BW-c*u={d~^{lv5mA;)rs4@YbAC=f3C3N!Y}}IKbDwJB(@#4H<&OgXg|O#IXD& zU>GNG89hmc4q*`Ry#@X{kg~$CM`S*rd#LyHfT^iRAEc|-m46dV15vOa|Kmgib!9|x zbb-npB6Q7#Ptd$l;T6I%1Q5`x9Lt47Uk3a(rTxjj$@h|&QJ(=!A^g<=L_!T;@YqB< znY!&Qh2LPHA9yj13C6fElvps7yQFKg0JjzDyC~6b$$>f(Ao&i$E|WqF>1&OQGaFNb zPzPhwnL#3lTerw#%wz@5x^4(g_GUS`j|$A`J7bLcTKs=Boq05r?;FP78M`Ko$Wj<% z5Gk@|A2pb-t;)tEVGPdwnWTZYZRgti5rEniq-7}Ok3BC2$F1OZ8cj~+BlD z+9eTrkp`)=(S>(j7)1WoQuU|6fiSo()EJ#%Vw`I3Y88-Q7BqHvf$gl5vFUhguAw@r zms)u@4U8>N+S2@fg3{5+r3A_;QdSUy3Myn5W@Zm({bj!-G7%csMk1Xmo0dP?WXs>)<)*+s8I6PxskK! z^TWxI{eLmvocT4Kkid{6jN;J+gs+CX5jVBiw^G&c&r}j#&LD_&yq%R#J1lZKdYDe> zRRCHZuqY=-?p{5_;Bm9uJxRGXGAS9&z7c=xlvk^`G<|o!fp%Zg;CQ8zW}1J=H5ND+ zcfki}Ym51XK3?u zq=bNfD<6S*oBnf`fO)%rz4MC++`PB>Wq(L7r02S*3B|1>FIz<1rM^KTOW)$<(7RVu z{ui6y&75f0lS>vr$}Z$SDI1zW-3!xi_tWtkon(Rc)TUo@l}po!*Xk9)tsOTpgb@iE zeh+KQ~8+8$2m_L?X5cNCm^d42(J5X2%?YHH7FAA87Hi`%WO)-n3`Y0?c{7iY zHv+_2NTO4}{^sk)A@n(=ynar2Adm_|9HiG`vsyzP6=bL${zY6dJCJKrqb`7mkbu7< z-@eqC#*rHzS66`2w1pwTj6fVzOcTe8l#bgVW(B|$13v|CZp|4t9>pDkM2_^-ZB*HW z0tk06nxkx~@&<%ySl`tXXJPvI8~;>%cY?uBzCgNN?5VNI5ItR186Gnj89+-zYP_Q6 z#hUAKGxipdqH8qOVJ_AkN+z3LgyZ3Ww5U*u)g5=g*%@97oM}nT_2=rhqOk%Jft<(;H zYU_1)b_o%dCo`1r3I^JoV>?n>%vmT4JFt_xcc-Y)VieOb5>g=hif~xGNM6F#C!|(t zzP=aMdYVBInW8~60}H>mwW%jMFZa!xgHL;wTz!2P&Ta;QD*Ka+{j+87dc~2OhPj$tYE68?fEKI4MEmvwd?-~5 zikj4zXDgHjVbTJ$j{Cm-ocod)xYfOWzQ^Og(dumgf97*Oc%s8n-{4MLdEIb9bip zMaTWz8YizUi@~;kTR3mAl<-%y6g*wvp1fFHUplt_GJVU?4(#pOfFyU2Wbi_(o7AS5 z9~G8xZ^#0}tlRz&O)UlrKd~3#DLq^OGAiFe#M-ti>1q8EE`K>YyE}g%Mbc?N(js^L zc;J$mtykEQ-kXDFA{m{)iiw>xhY_zCFyUkEDGi)g5euMhpkEN7u6W=zC%3q(=RZ5P z8Ng8c5u7_bCX0(e-k=qbs-%P<-r~KWRC<@XfJ78M7$lxYv@*jFO8ep-8apfit~%+x;KBg z-H7;0uC%60MsI!m=cLLM&5~OTIU@|C=Z}wQfwGjVuYn8rEgc|1hCE&bTAO) z(1x6kN-94}n~-ab2d?UCNNFS61R}6%;sbMaV5s+97c#dL5<{$KULy;oFwkeQt0fE& z^;V#+D1i4R(#8u^AYv%(6CCX#`MV*PqOxvN1KE zsyk!RF6dIQcVj^7M}Lxq#J*V4qn?j22{lZI#~J!17jN=x1_AsR$*CSm^&%-ab8qwN zpU$@|!LRnoC=Ivo^bgIb4bac%rvc>3XgdpX5VGKLAf7x$tD(*@$FUpQ;$P_&lhJ67 z&r>hqzYlU(>u--pYTpQo73fGw-xh5vKfQ@ysjYPovS&U3f{hNrt&=U#D0{d5(B(oKi|4j{eVgU||OLpcD$wfyu8 z463;i1Bk@!gbG0##2bn?iBe(mG&E%a{}q+9|8fJ4!>lUXlus^Ip=vqkTEt``tA$($rb2jDxgGAIv2xV{s%>4V>> z!O=69!{36L{#%;ov-~ILA0ZZj98;%%rcSRnZ(V29=B8Jp?%H4nVmq+%B%%?<>N*^9 zsr#FDxUo4A+`8E1BlAEK#~b3b7M>E93D7>Z?GVB}7DVm{;TF}@s$LOsB5gU?G>@N# zZH-f=u^d<6I6p+;PqNS(Y$P#~NX2mpwQa&W53b% z&GOKbrM{VrRVTMHuZf5rzSX1Ig5Tg)IIdy!J?Qtjfydidm=>|gDyL|<*XcWQN#>=` z*VAYZC~S5WK@Rk!$5y?)?qZ_vMrWn<9{u$NT4v#WGd4Yb=LQa`cJ?ttPZCTpEJID} z=YM~*X|MWnAhRjERW!${v`6RDr%n!XwmWB~V$x~)Hz^4P@vxQLbVDP!^)QjxQ>3e_ zTgIb2=2XA%)`NQe>J44v_fObJKqzHsF4b9jkvOdzX`)BnM~4QODYYYV;5ex9RMR@!@L`hrHi9Ex~A zB<5RvV8@{BHM=>ZY}I6S)gtbe;j85Hl32_n_^SLq$wX~9fjQGqbPgV`sU+NZUmV@u zo-X|J-QRS)6jG8NShiuO*8s%y45{6K;XR;@j=%yuJGJ^iB(G)a&VZN{vbVxTMz7yb ztF53}+6EG`5}xAGN0o*CgG9Z~E>^w^(OOqxTHfSKGe9~xoWF(9gXvb!+C7U9`B9V5$Ct1q=0|jK{ z9qmn_ItWu(BP6t`$c{{pz6bvFXPbzZ)u;BKx(I5XPjgwGZ!G?#B;@%O zc5*_+-kJ2giX`@g`{052Zb_seC%%FOw%4e>F@2&l;#J9v)-cd;6EmR~1XKV-M8MI{ zx%_AJ-PQ%_wug}Yc9MYsfWn zO_8VXe9BSS`q}6A%4d>+GA81TBt2-s?h8U)ZvxkJaMDVwaQrKxN_cMm>)Zm0uD9%zW`JsK;xqaVJ%GJncvf_i|j6SJpMIlBsG>2GPw{mseDxLk`AV22Xb2Q;xLg^K%#VB z`22O(?-}heNv0b6aJa+VkEV6ytu|3GRu#J6Q<7{@wRdFDQ#m(t;k$BkZ54aZhw3nOT@AB!`s>W6|Ws+^j zW#u0A(~{zjmORORQkmbU4yOM^WpwhfjTtN#mi3Bk8e;NSYrAd5b2Z98)~0BW%KS}F z{_>U0B5(t^CEI=WPPaZi$CCF+wWR|Jg5hWr&&ovH`QCSPN)_7i7EWY9}nmj6c3DAaQ%Z@ z7&el+d^Lwsf3raN=S5aDhDh5E>e%%Ry9uQReX*R}CJVBUhCP(Zd65DO@r8Zl+ytgI z3z>vf?<;Tzl%r6JFhTtOh*y{kK=}kyAWR?vR*OLY0!%obJR7YEVG?G?QCU6HXNVO^ z1s+QR52^r8W*`Wfbsuw^38`TOtkEMX$ihmhGVC~hIsp=qBg~Wnov4Q4G>3k$1;d;o zXk*z$3dL!q*?+rX3^Sr=A88xhra@G(!k60yQ{ND~T5ik9rLT^32A*kK9=?7Fri^TL z78d$z@!9+|P!ra6mP|*9JXd!XM3Ou}{AXcdq;E(5m4@L?8v$X9MDWW?8w*nji!&5w zVnBBQhI)p?x2?qJxJYu3^5NP#OJV{uPQAzuK1O8vjp;y{i{$B5q1^I!IC2)nY-p^; z?y4e&+Hs6A?_e-t@1bItdF*3q07wHmwWx4mSF0-)@IX!{3Qh zv`Eyb<2$LNbB(1wv|hU`3>`!a(Gx80^>I99S9mj&?!NNr5&PNj)X5PD32~}C-B4FL zdH+2S%xqJXo65HpRr1hOHAwYffgl|Dgpri7SE#$YZa*YHvrwfpF{F0Fd~zdpQGNkl zCzUlUGdJx9oUO|=F1tE-vBlW=(;)Um0+^#D-_2#w^KfD!dj4Dc(7-Ft28p&Tv zNhQX1aKL$&;$PbXl1fx!#6eSBsv~`LszdUJzI8KhwDD&%tTQ^4R%V8eiMjRa1?}M4}p`U;0?s=J@=^+TlRV*zC0rRUHQCC@NLsi$==T1u1#{$jZ}k{z^)WcD&V_#HgW249MgEzOZKkw zJM7CC19^fHU%q@X23g~>va+j^3&pcFMNljZ6xWtpsTc%Z;g%`AfOBHNT?YAIM=Qo6-Rw^A2)4%+cPoHFWHVt^hMdx?6Ih2@N}Dk3G>wglV6_=pNrw+ zU@amML@;l_QL?M}Riu{bzvJL~I(&+jmLX+I?iYZ-46vJEQX@Rg*(w31TX0C|-)S?r z!&43MSlb+zwxa-2VNvUe2yxEY`CRljqxtg`!!A*wp|qt33-whmPn$pxPc@ zqX-ke09S#*a~ZN{p)pJY*6c~|YyZ{l2T#jr6q+!$wew-Z<8Ve66hc2|zkf`G3n1y` zTRGq=pKkLZ`(NAQpjo>SWanwI)9Wt&Up?g#!{$JB!9CsJ*1o>JjGW~Ee62gYkd=h_ zPBzQHDVkuApMC)VS>5qW>DGFKZpJox+W3y&aawYnio&n*BnO-{mX2m5()iD2VottY z(pA{(%sj8^raT{6cP_JNJPJ}i{QkjW-9;ycF-9w%oHVId^dEOD?@NJGqtlp!Dd{PH z1c-AV-kH(2RTCefMnCicSa1Nct(`_2e6f!6ot*Qn%`ZNT`RqZns_CU0iprbuU+2Vi zTnv5IZz#BvYzrOVEZg$QzHc8dS}yss@cQ-Zn@fX+C8@@Ok>txo0H;Y*BtpFdL1|Sf zqe<4r?640S&R)f3LA$`COAx?d@BtIC7!g2Er#*-{0KkAtKH%{h!19URfd(-mo%iV# z7~M%GSAD!yDX^{&zfuCs6RG9jz#$4!}k)4G4QGX@#OGET{iB#1e^ z(`W=*{+#^yF(Z01O!MD^IMW?>FWYBKo{#EWP}-8ik4^e-f|#kXUZ%e|;~uf`wGrTQ zrItWE)f4fwEa+lV#`cw&MB8u>iq1Q z|Hof`J54V!f2XGbv}0;|yrdvmz#ViAF?bncCU;WGG=-FRM|}W}Yu|%G7E$l_v$6R2 z_~bH6kg0c%Q$lJJ@eJ|%1)zubSuc*TihR~;Cet}#eI3wGL@hG_%K#eBmz{efjN6(F zi0}h)%yb6Jh8PVN(#1kPuo-3jE-T~ty5B_Ooym~9;~>n7DvM=**^w#EaRy%d4g9uf zYk!)KF3?L7PhEk2ctatkxKw36NJlU&C;J!U>Usf8I8l-XPi19CrfUJlo({(wVI;M% z!=`wt=aG)y7hlk;bqWJt8CrgjmnAd53Kgk(2`aX!-o*gKu2>I_8@iBh@9$Nh1~QhV zMxa*p4;UX6M9jdi+J?i>Zo)a`G>A{oek>5pivCF7g6Hr|hd#Dp!;w ziTh&Y%L*#2i z${0>VpbJQifc7U~IuO8-^+km4JYX0f>1*i2R#%Wjt{k)*ts5z5B)*|tqbI4%!ou>k zcZHQt`qr6Q10&gSDq=(lUV6k;6sr_FuOd*U?fZtCV&ffE|3!8xdFmWB-&{Ls7==E- zGC`*O1zaO@e>6=R^53oJInfj1Us6zz%OSe{dQO~)x0vwcgvUOEhX&zUB^@zN?O=7!}4c{x$L?V886yCj;|$zSEa#w(xwQ4R(v zE@Pu!@tx7OB}3m*>BX@S#FC_f)*d855)SV|8(^?H3KUp7z`LBd7&UgO=Deirv`VI7 z=9T4E^4WG(r+}+x_(CbyRE=BC_|aeg%B`l@I8+hY0S?!4^i?=LImY~z3Et#G%DMQo zwP)Yc2Q&XBe0@pgfXx`OK#na=tqP$0s?Hts_e=0jNXTx{{^;eL^VP6}cIAV=F^&Jq z9@chD)-J8B>4-oIR$%SmW;^XO45gjdU7LbHGNTm4jll31z~9_dBjpN7IBMhCi@2l0 z!a@;XhaI@)?e<;L6kz4Tr3)3dUo!=Ssz4CwOLa`A;$$fX^H8@pQdBiuNoHvI`Cqj0 zkEE}NxW0w-9C@S=5|H$P8D*pi1Nz;M7_y|z;N6w4Xfuo}Bwc?!t+qT<1sBlqWykBy zN0k%a0iMT+z5Wzj7);^XvzZ={d)_H{b_MNx!%|5}=_q6BB;?!E???ZYjG=u?tSpa$ zD_#C$`hLg_y>vFPa|!uVyOem{I8vC<_}}0~`TfQ(k+LDvWS>&}zIa3AUro_TlbbPP zYlEcK`9xywHL_e+al-O`uj=2~oWlq(w)m@kaG$4iRAsaKYGT@VI?awye|7JU*T>N{l?C=mjR?4l!8u)M6P`OUs z0W%z)pJr4!tvBy*!V@`OTKmrAS#tCs6hzuL`VX7^L4`uuK^aKcr&g0IGC15GCxQH%|u>CN5UX&AseOp76 zOo#*1ci%&=-G=msn~Hz1{t$l=m=S4vQmktG({!vVszEg8K7^edfcXI+xFCb#5wtdZ z*+3VqxSFg;-qJTLSrilgh|5-;hUt--nmZ;uA42FJpLoYb_`n5sxCUI+206Yk;XBt+ z@EhG%iL?laUaL7XK;{6QS^95HHA3kK#5?XetSxs6`D&j`>`qjTWiHqXNkzG?J2F}Y zj0gCBq-9LUWu?4Zhp=b^>@10J@Z^LVjwiNJRMGp)loHY8^j40y;Dq-g`Z4wNwT26P z?OfDFE1S{eEv@+%f3qlKzlyNuQ~y_cOnj;NCICHffM3S!`Fo^u)9eZ~L zyidY$AE~WsD6@nWkXuy_sV+xlQ=8Laj7pvkoZJJQ>99FY!tn!4YGDLz9wc@^3*&wn zh#yvf8UpQmVo1BFD96z%rx7o>)NM|zniJ%)0g!i@<2eN_GrEtiMT|vUQYw$dZ-nvW zAuvzh!isuF3EH{n^JVAcU@&T7^-(Gl#W=02V!{D{zw)N*BVSB49qIO6l~}4qas+)? z9H&%cg`BLC(%A-&f>}}6s{k)X)}>hVoft?L6YxepI*^Av&!oS6t52+;0mXOY>O0-; zx^XMRLh{Gju&UGbvr+k*77YiBf0Dm_x|izs67gGiZ~S49*Wu2W%(Kq@lPi0tlYx*d zSg5jKV(y$q`7g>GPxMbOT)A89)2rQD31sO@G#l=e?q_T32Pt7;+m>g^Zy%eXp3}aq z4;!oYtE(IEGG9Ahu2ji!w1T+S_I`^ugmM-uA9fe*iyaexn0=rnu^aUXI zzsBo8f^|uZHsSwTfO8cnqTR~T5n=MA;BogAxIVZ|F~Ywy$J}?4B{|g?e={7k{j>Jl z8_=toVLU zg#wZk|L0H0Y3tZs4u)fJvn_T{>W?Ajs9nB$WoPd?uDYzycpL z64$xH?{~QMZ*XPnUhm=dg7Wc=%oGn2D@dp-4L+&uwNo7YV|v;ca`aT_QOMC`)4F-g z6DqC&p~-_$m)i5K(@VKc>oRvCuD(B?O8-+1oR1fLFDOGz9{t0{i`-w$1MlfeCyz9} zU1x@ncgzwEl-;-OErSo|My5M^sWVT9n@>ShdE=qSWC35`Up5diOa(FFi)j08FLBhn-u5KFmVeie^- zz{WlK+=_)Vc7_}&aq}X9>8Z?^N^*R+ZS%yf3IP)hyQ@f>f;IR}4d%Oe3HZON2|a53 z>Pso$#q%#KcP_`J=s*g-k3Z~E#QDTxKCMZ8Y;N!IyT%8oS71wgqVi8Kszenj8G4mLOM zQgR2G;OX5E4x#q;yf`>xk?~Br?T{9;0nW}D%b)?Y)sCbJ33I{#;YbNGJqldNjbC~Y zhxvxF6;Fx1`tzf@?^S?_2ZQps#3wI^q~b*mKGHe7a{k#EB%b9kK6v1Z(MhqDxCQJK z+x3Rqbqm3j9OjXZmjRI!q8$@@D&vK^MLJ(fnnOvcI3*ncK0`-%6RW}q_%0G!g|sOgH1(m5?pt;2Gx2_(m%#rrecOSVG`a?E1JgQaAIQd4P4q%r zUYe8oFLH!gOIougk|+s7QQ8BZZfPi6#BX0JF&W9)-^jS=C6R@l?^CBmj7q*|5>u3n zOa-qIBJZRyEnGP!pNRkjI<#5O({%VTCTPW6c_(9}%(D6XOmL!TxX-Ya8eMLTrREls z!1AZm!dZbCx4_esk*4{|^XdBFgA$j3e>sdRz(JvMYx6OvoH={hTvvbCb2evuW8NdJ z_=R=X?FiZ)3L*Qqw=yWiijtW1Ab(qk)<7h__BsWz0EoT>+%$vV(!u2Qd?bQ9#sBKi zBpwrPosFDDJ)>;VV1+M!Zih>-mh@iUudzz#P^HuYiW!EU%#=o=WN}F?C}Bk?IQhm* zkXqRQ8v|F}OVF$&N~@2}Ze?ZTre+%JCrQowEvJkp_LhOI^>dZUWyMBCFb=gvfaw(M zeIAxIl_eZaPRTcU_#X5KDt)T>byzH@{LtQhLCU3(F^`~l^lpk+P`5^UkW)JRFVipN zL9<)X?_*o>-9Bv+qAaAZWFaONb1iRWP@3WIbW^K%PgEys> zeUo#l-Ou9xfP}cdYk8kF0fS>B1mtvSdAUAh#~6IB!S;RzjyNIPa9s4FEkNBu#iy@! zu?AsSSUw92ejk_En9 zYY0{kM2c#bBsLcIE(}W8B~1ewZeV+18kzbiE#qye|I)4HCqh&oi^vrhCJ` zsQCdOOt=~!viJ&sauYCdmxX3+>Gg4Z)DkLm#ON`!@3?Cz?9 zKbujB{zTEQ2hf%iVKyl1m)Zk?y~cq{|BXLd=8m6~baMi9H-*lC?>EdV|ysYU|c|=L-<$5;B}w- z;$nrSHoF@{fXNYMepk(qWI;o+o)CkzQGr)CeL?ul14!4cEoXUO%04|Y8-wUK3T@iM zX}i-^znw$Q`M#Hq`~%HZx#Bg(Ww`&eH=ii<@~HTpM-uZ|`LO;ak_1ZcIEnjN+0sC4 zcW`-brH@axXdZzw#l%sl&<$9_V;19yZ>j>c2hv&Q(*=2jq0(y*w4q#h0aGLRmf#>% zOuxUJqHD4UdqrEL`^kXU*g)XF88CirpYh~pyspw#S3Ba?ZG$!}t1Rz@Dh6uFc2{F4 zbr#HbiYDg2q}TPs$ue1!n>;}qo9vs0hWh(_4}LPETbqb>41j>4zQYG9S9i}!r?KX} z{iYd^m~x!lbb14r+(#;%!J2k68$1rX7ks>adyQ3P_>7hIY67VX+VND@j%~7pbjEo8 zN+6aDDM*s-X+PKGNT+d1wV1PR?vvfGX!u&aGjc4aD3O|H|0$Y@j|pK$_4?O}#z!na z?Q5q3)La7ahiOG`j{U;3S^mNfb}iz^hctIhq(8Iwy!i!Xp`&DG9_3f7*!A4sIa*!c zQvgeR;``=qrY-fe>3u$jXAm6R4dj2&SiNKa^|s(cF@%Yikb0T>_Z zRt*awtDViwEG^I9@f`GhDSP1e=gLi=iIw5)=86Y5e|Y89nDHacJ043mxo%nmnFj|8 zApI-g;qjbs-g}Gfx_CidrQkVz;Ku|QJ214mV9;+tHW-?*a&cLo3S3M%Jw4T(xP~X^ z+u`xM1sGJ%eSG!jCrE?D%LJZcZy)cqiKb=lpSP)t`D(690LB*kgTuqaJ|`*F(O+_s zZM<&FH&g^U`M9jxdXzh)Zu|~ZO52~<{PSgMQ;JRGw_3%&wIBsO4V~JM!@1;;b05o< zy0y{1U^h#@#`=om@jh?xIwYzg^nNVNd+_y5rHwAWn5I9g=OzP^K~F(q@juPxYsf#n z>R_+#yX8x9?E|niyXPX3{B`NM%j2JJR(0R1&-=~~E*M)j$W58;1i6$9duhA4cU$!$ za(yY=0iqpi3QsDL`>J=))Pf^81J`2KQn{%iR^z5%R=#93P~~Kz(~uArAakr_jE81j zO>>M$@F+!M{r}dL@(-!xduNj$dBxH^5G&|SXkB6gt8q*SKod@N% zh2N0bQyK9h{8%W0?lG9Wn*{D`ZdtXV>AQ>R_Nlt{+R^j`W(nZl6brl(=vRTfc^&{v z2ZcVnDYmg|&_h`d81Vw-(Ksj~qCoZeB0Gd&+ja+I$c6q)O|4Jy!SL37O&au54sOi| zrTv_`I6gpF1h7@+L&ie0@(T+1XAm9j#)o~MKYzA7N%DCM4scp&`Y!JaOCfDUvO}Sa zJT6+xWHoHJ38!YaK|H%*310gbMb}zqRAt290**At=4H*kBwIc4P_0U67EKu7-VI7p zZ!^b1h$xPeUsEUl95o7Hv<#HoyjKgczamkM%PD zxUok=UK44PTkp9;RzC8awyw*{4h6Klf7>bAOtd^5Qf?Rz0DZx~9nFiYHn8yLzT(0=wJ@FRo?7iBKkTf)d5;tRqr9@IDcJ6bIbKiLXR0>XqtgM71A9G&JzcR*aVL;{?^R8xP%ORe;Z zSS&UW&Os>W{G-%~wg*z<%*t856baXgG$tgnu*NlrSjY+7nD=mnP6YG@qKCEO z+rMG1AvM_mq3pj%8=(AItJ)nr1pfo;Y-e%_5Ld@=B@%5ZXj)Ycs*-<|9p;NS+m{51;@zoGM1;c#O8pj5)XPhqEpj+9@L zDtrq|Pbw@eB8wL_)I=EzmSt1we%qRzBiW7D1|T+}FrYt$&Nkg))uC8@BPWw9>XsP;eu&P1QTZ*+}!UZK|=F z3>reJaHK&wPMj8fqg*hw3N zA_ss;fB|-NKupUX-YLk_(ZgeV@5HszbZ$t=sAvgvS$5|F1*_rwW^<>d|H$*00m-6L z=ET!ZO{DnV!&;UGcQ{D$X6K9R}S6!sGj`MgK7m?VArkdG7n| zK`(RLBvL#wFS49&dhP-Eg28(p%^P|4O*^Td71DEw;Z=Y_oXT`*Fq_u&epVA>%8OozMezb`7QxTrB(+Z-VxM1)2lkzN}(+DUbb%yAAai0~KzW~fP z5_fuR3-41Al#oJq;H_{?Mc_tbs!<)UFf3A|N@@Spx>lAWCgfydYUco)U2})DO@P$k zoVhKE(C!rmyGBuWs=3tv_xuEwPgU^HqvE`&LPs zZz$=OAS=c{7tRjc?hTE+4FRRk0kR6SR(`K2zQ%9XU^rt0|2&MZu>XF#U>O7sRCkw1 zajHBtp0dX$udc`hFM}=d^z`(v`6sFQx4N_I9;|}iX!6+`V!ERD{9xg|veR-Oi{NSZ zANTSOcFiq7of{aC{Py&;5lp#Seh)&@ir$_L5Fj^VGta|#{=>oly<)L{G$OU63yI1+ ze6M`mtsA_x*K00SVxY>b6|_cmk$^Oh#jJ9J5gjkky&Ab@4BDKw`0>DdUkH*93fD}l< za6WYv*>s4Z<@#Jp8ZD#9MB^TuV8e?0SW6rPn`2XBya68vj3U+pK={K~sbI)GO`-Vi z0OMtd3mN2Xd1sVvQ{vLXSh^hVPTUiGL>06I|8U_c$=c0h_a`)Q^E0Aq#vrH(?_Qbw7$W zmj?ZF5Ipl$lnl&1^%js{C%k!UJSYa{8@4+DE#e*B9QEoDe*8lny(rd)r{!c`pCy0 zXQ@^ITOJlb{2Cve&Ri998QO0PSd3b5_t|A0o@|?sNIB=(QirV!Fr%`mDC$B}y;uR2 ze|f}5@K&B2M-<;x0-iqwFC;L~9r|a;@ez%WTFwvf3ij&Cl`9LP=2~|7g1FKXG$u7E zY|N*W>+01Lp5~L|pedK(c!PB7+jppifaOq?OtBB{8u;JiI^C|AK@Q3+I{~lQ@}r-_ z!}*`D;CCnI!?rtZq%F}@b(p>^H05mu=HVQ!cguS8v$<8PrsEVJs%qji3zxZpW5t+) zzarGPjD`xZFTUzXbv=YX0M1jgd+II0H-@*R9KV3Eo2eB8NCdATbP;8w)`X`Ria%tPnjCgefh}k$zl|--Nl) z6@y9L-E^<*D!PJdKCjnln!DlRx7A&?P0DQClND7`F6P*0^;!Q1mWeNx=lG(zExzXc zk07ynZM=>jX)P|VFy7ddM&9WU%K=*3n0 z)MXaUA0LQh)^0up_05%u$H7&WY(8dB)qO3BBLm*V!)`(-%}Dro{E$dWp`et6KBJF= z2r~8P#8<(;eNF<84{9HIARjRQ&DWD;OD-plkG{@WUFA8h=NX%rFqfYxy;_9sfAZ_>k6kk1D0oxT+(&k zJIMX3Tcc=pyNh}2t9^R(ev&x9ir#lQ8)8#F`WR!;e0<_w`}mTjzDC5~ZqlGb?Ss1a zq>6X;8+|3xNCGr#fMZS5_Wl$GBl_9O^~o|S!BwlSJ8uYUl_5w2=- zi&h9A8~(wos#$0}=7BH21Yl2qJ6A}THJHmq)~p}yx5Sw)0PK{p>1!4+J379|uKS+> z|NF7AP;?Ls0XB>!-vUVbhK60RmSTN&}Cg!`9vP|2gg)C#zl#nHN?k_ z&SbB#D59f5#i4aA<8{CelH~#UFlj^6%-VO_wxZjZQfP?~!v@ns0 z2nraf5>nG7GxdAobkN=cWy0nqs!2zwVv}{fM)O_XU)e%3k);2~CJUMs4g^zb6e} z%N9l^K4fxYgNxe3e}rtj4GEmsfKK=P(;MDnsjM9!-vzNn9BG%jvPfmSv zdH+#`6=g1<$Ni4{U+9qgQDOrV0gd4QS>U}Gy4Z>^aN|% zQv`=FKnYGkk&prfEXYP;1W*-^;8Y~CDFbl*iE8dgSk|*SQVu=7NFf6I;X=6sIpHT5 z#(+O9n>swmiBUSjyZBupj8$ivlo)OMadEeZBkRUXOG*@Xx{N6fy41lW_Qr~UeI1P? zuw@DMkng`!F)hP#`VuJC1qtiX-|i|q^8Wq8w1u; zl9d}xOAspJq9g9z@!3IB1M7Q1mSi~LK@#$3K_vEJn^g?f4rzeLZ|WGTJ?WC=F_RyV z>^;=x9vcr_zWASIuKSM{Mr%YTqH8r{?P&L(^4XinUs$RGFUfZl_*&MJxS$6hC*8;QzcFcn(k_>my;^4H|*AQZHWuIHiD1R@@>KUG4>d@!Oq( za29hOkmVInK&H&H(qf*|)7D-_ zOw`Z0Lj?4PRshgfTWO>Z*T2_ksQL~}Ic>3GvuMCh8R7Bq$e)XC6DGq+MR<9WvVW#( z?ER*|lrdVs7T5W$Cn>_G7sR%lG9+H!X8i88Df z8JdVw%hRdF8dg+&15ld4e0ghDJ~V4KG}kqhFB{qtB|6t)cn_^ggVJQimwbH@*~Spb zmK0ZjG57&7C|^B%wfT5w%_rzfXB3-grt*6-sh-w21B!Km#xAQ3k;sL2{52zLbhUe# z-?*=Zz5Rwz`KbjYTm>+5P0Xk$E33j-Seapm;%<;KXJJ7CEgVO}_QW(VymYgKqN7#A z#rZh;i2yXr3d5urMhn%;PnU>;{Kcx&l>zKVz!8JRRXw;06Z$nWn~FDEPspOm_$$~G z#{{4FgG3!eS$h(E?Zt8N7al=_xukt6fV&kA+RaC61IWT~oSox~0tmKwKvFx=TOfXO zj%MDz?`r){OZ`0!o`aR|-`Jw!d&h?J2SyY;S6sahbk90z>N7IB{nI>ja3W&nNT*Sc^cYyNKl zbwKM0_m2`K%aPrw;~ydWf8%v6YD1Od!a|EgXBF3vpG_USV$^zXZ=fL%0H6GP8MoNh z9yQy<9wq!5bcuZ_jVzD`Lcd`0){Jk@&TzFEUSVGwFyzmw2{2N;L^tq%Edam6Q%tVa z^Jh1)kvG~WTy-#AFa#7yvU$yiyaO@=d66hp6f3kV6%*ctH1M1ek=+H{etK+Qqyn@ST&H&C*Quo^)t~oP36dg;xdGCSCfo?Pb0Y zx|)$uH1>UUeRX|pf~wz!GHduA{NwCQYwNQB0O3G>g&yjVyLYjmpddBUw@(QFB&~#4 zT=ohRP7^dB8M1u6TGX=XWbvVyqfv~Yu)E9px87vSv$6B(_G*`j*9~A-L%c=Uwm$|J z8VAjXXX`%=`I2XYkB=7C$7?+Tq(v>1Hh=%Hsbv{2CNE397ky9m?^R8DkTiMoa@6_3 z$C!YFvE~M_5KRTnKP!V6HJ^B7*7@%)FIdPe*6H9q`dU@R?mPj^;|vtqq5^JSt6h1T zrY=TB&{$ya;N*D5-<>+!X-r2kJeFtcZT3H!&cmO||NsBju{TF#B;z=ek(E79b#Sb3 zI2l<D&=aj)5R0Ni+)F>!fIppm+3I9Acj zi8Sj6JC=}vaW93jCdT9b)pp`Sd4ZdawUyfF&&?bX-(XK$;jnz$E_nHf`=4qZHBlOg zzlm_SC$?3wplAeu>7Q?!I`1Fh`J`~DF?A7Ab8>D$Qtnalcb`5Icybo}56>6f&3zOV zKJ?Pjn~k{qn~$$l4=!B9B;7%=k3w#DT4=6O1@%FYgjbeC+#4_=rn^ans*>Vw4E^wx@&nvB3b~#9TB;H+X2elolh843m#9mai+zh-=};|H5ii2 z;M$sQzPqq|*Y07!K4>Xk4(=VO(cOcCF7`h9p(ajQkgVfh|pcWztCo zi0Ptsueu>^epA$nSH33|EeA@L#|tbHG6{U+G(pdw>Dj_nNf2L+4QFQln?lQCXc+-B zLo!9Z5%A5oLmO7Duw!4DY7Vf)#JN3G1?w6Z5w(xOc;aKw&HJBp2Hl?Ly~}IM8INX! zauij-Q}eDf1K?a*Zgp=Q$*fNd{((qA%#6u2x{~Wsw0RvACY#THf7v->*=ZU$@-rFD zcldSS*W$IHGt{-TFmX3>`ELT()x}KH%tgi@^v?oI3l0vB=K(?{-pA=LUUD|Loho8~ z6~5e98HL?Rj(otD(CF1)U)CUIs*5rGyj}lt=lAl6gV))vg+Sd;!%Bn46Gve^(*pEWTbpSH@IFp^*odJT<|P&#TH=N}td)}z^R{WWo!k8INB8RMDB+*A4*J>B=?_R zEHB1_K9(wy+sK~CO0pMl5Qh9S<4v`G7@9?jP!pJq+(WS~2@_~BhK5xHLgqE7#%l`h z8)X0VYh@<80A3Cr%GMtF=bkU3Z(#1~04sU?;dtKc=R}}?WLUpwy*f3_(rdRU-=6R? zK>5SY)@+xY2M$dYi-^F1&TqJ;W*0N@K9UTG9Z)9zk@iE68E^>XwWYcR2rzIi=)?_& zguQwSQV!nqfLeiQ-HlsIKhEWrdu*V^P1U8nfD0^Yi<5u5-F- zVBzp6WSE(4_~&FbA0GEs3D{4w!MF}cf^JYgBJ4Xt5oW|%+(-(9DBPD=HN!9i8tuF; zaOe}(E|P_2u+Z5-5acG(Lr_fmeA}+;kWbnGQ$H(84EJOE9wWBa%To>1is27dXxR1t zVgZ;pm=x8hVT1z)sw2d;)k<@7b5|F!zJWF~B4^4zDvv7hB=fs$NGnHHWTcT8z6Qo< zh9}{M5y-N>OLrySlE4;GWz#VNU7yno-Tl`0`ZJW>x7N%3J;vOx&dQrwcFx8!JpcAg z+;#Tc3T$ec2{^g5oT&4&`&^gW6MRkTvDj&I&5~zQqK<*o7ML&xO#?u7rt7-FyVPt- zi9O@seh1 z)>=Y0!e#jd!He<7XM%!NJ*p&VB;0Hn7a>pgEUph!`}++s2OXg4_|K-rOaulGFBsQbc3bygfaSxi0%-xi~nsIHqAIJtHrD?Cku{mb=_e^E*G)RaA&K z!(lo4Mi@*PzDSy19oYWUV(VkKIy%!I*ZAg-7_8o3nLT>rOS7@?bgHnD=blDoV%-`z zFNzJ!Hz)J(pi?A5yUZzYU|%PqG1O!Ui*XQszqxX{5AH|Zt1%gJJ}a9ohg+byrJG?w z54NZ3I?Xj4sa*A_|EIKM)GBgDqcKgsiyeoDB3O@r{^)Y>St`2kJ&xbEyZY^6yMK~> zBO(3di2$j18NtD6i&MM^Hch`@)YjH!dG*guQ(*4m!1DFw^hsF1Xv4@x!R36|&P;=c z`x#PGLrSp`MK%x;8L>J%Q^OSBcA+um?)Ul}T8{iau1?~nhOP}YvabU4;G`yJNYy82 zgzIM4J(7}xxPcMVXIVBjY>*$?=3^h-x=Jd%2zU)%VrHPpwo$V*FC{j@S{EA=k z-RN*hDn|q=`WdoS1|pjx2z#!?F{q9Vvm(&|lx3JP)KCbX0PA2~Bf>_I5rexvGR>Iy z_bqS?BW&`O2{HAqD4Z3%@4~4c0p45?)RroE{AxAp`kf@CTMf#UAh%liY?=#fTmSMc zOZ^e%FeDcjCn=qbzRv|k5HWDV+nBMp*@VNhi88_|vPlPCad5^FVV}UYmT8C>k_gU* z-=Bq_y|n>vh)63?1fwyPsKV?GQbP>s@J(n8^eIg?sa3Py$SzYB9eXA@eD)TAY4mEP_R2%;Cx04Fb=fF?fG|KYG@7GmO-($7jcqmlA;#G{8TEFo@hEV}(Beg3E#6FdTrxZIK4OyY7K1hqW8|eTa|5 zfoDne8@Vo&t-sO;QM^Akr##3%TpiOw1A8@JtEqlwZEYpsX2}s^9S9?f2ttG)ub34z zVg!}!&0@oR4Rp36Tjh%IP)lu1O@nDE9lc$@@BFN<^3LI#_xWCJPd5|R{~e!_v{pcod5$t@ z&ECDLdokCJs&|@RZALaUDD*2{p~u`8ZRdJM$I7)k5d6@A!R zx0U|uA=kaAocnN-lT+a!ZO=1%7~FJL={~I2Z!65zgPaJT zCw@(`;{>N?w?mdLIU`c=cP*G_fkGlE#6*=O8)LvBaA1Z6dzX!gvqm8lHZ<>GM7QCO zIqz1znBNwv$03ZM`f_C1BCvP|ef#H75q3^Gtj(i15(DJ$v-_WSxfL7D4Mq;uHG99f z0gBWyV3nME#!n_hLFFrQN1*u?-WGz;D;9_`q=R;m;UfgPz&lVj5jQ^Gkd6391c9)T zh=dDXi(kqle+c*)!W}6ADe-rZuE9m!#%2OKZxM8;FNTQr*;W!ha}$#y=KcHX9&XyE zfqr`Wb7=T3Hyh0m6+(ju@x6E0T!+~LjAQ72wiM{XbCeSl8kFMrLT1tiJ^L6dxVRsa|XOg#H3EH0Vy?H);Pt&e98Z1xW7)|A-DAP2s& z-qrKs^uX>?EKJ?826PkGE?x=2b~`n6MXh*kL0=2D@V-3FIF7;sT8fi26Cbyy=8oMl zOxTmTO!d&=A5s_jaD-N@emT?Zx3gWov%TeeJeFBieKT5mPmm0PlP4>giNt|rQOwK$ zjl%?d;swV7=9UyzVT$?szB5?Z4j#hkFMc0gOi;6!LL|gC?=2iQi4Cc(-gtlQ+AuTw z^iiEp?J3NE=|W|%0&LYC?{y@|m$J|ZN^2y4`R_EMf589kX@O{WTWSoQfhJzWt(f_z zPGVz4s3B&mhKMg{m78c33y`8(Az1^(tg+(PxFMT}5O;eK3&rFH8+*e%v?evN9z3p}wfAtk0qN?fK3sPX?12CBjyPyx)4PuWCzj|nEryRRaL;6Cr? zacO+hdpM>POp8S}H~k>#UiQmk!s%rB@jgqRN-!_iNlR z@$|&Cp~nskVhh%eWRo_sbH#>aCeTWDSCkbNU zNfwWc2V$X-tyZ?*P}ZHo*CXv(J36$3+cJ4>DKdEOTB#d{ve}3k8)xN>6sOIOO;!rl zy!TL8J)1p}DL}sr4Y*J&F6Mto6WTUE*_zz_EZGpl9F`Jub1G|QwA$&{boHOhht-Ka zhwt;*N^kD%_J4>R>&x`pwg*+ZrI{L~-`gp->^!P#jPAqEHu(V#3*H^ekoW5bQ;i>CH`GIcM;p)Lbd~mz0?Rd*JCc^d zgISQ@b=TvIrw!t3=2)FQ+iod}+(8ES!1D?Qi3h%-9_a&dQM*h05V0!Y^IMw;QVo4_ zy(gT|vPDBa@RsKWVw4;Wx+6pxk`igLDWOfKKI$=Y8ok}zY}YwK${PSv6qOd97_|Jm zkU&Zn1Q}n#C)B_VlJI=@n4!mx_?I}G4>iINKsM1xkSi?f&=*g0Sv(y0j?z@K(bA7P}ZFAYX_kZ4}6L1w<&Z6}%?0 zl=NRUKa8wN+(MZ;b$9&71RaMBH-TV8{e7zz1wUwBdkJW)M@*L%)7(g#cg} z7^W4g4mN>1p%(O1@AV(z`I5vn0Gbs%#IWdo|E;Z%dG~M3&>}IT5wl*cK6H5j;qN=# z#*yE?hx5yqv+idH+xmRBw5+9odqu_UgE-tHJ%c(m)gD8hj|2d<@=&XM#7@|P$O)HPuFddXHha78Thr+Z|=##eAl7$KLReiHC1W#JXHJ#wIz3$td zyG}b5iL-~vHTi@z(f6P&#>w3GysKZO?rJcXlV-yK$QqJQp+RCWRg2W%;ScE;_EQQz z6+AmWe%A@8^}%3Pt1Ux2!vYRsW4KfYy9HlyC)k32ev%9E7!?gmxr ze^yKFmJR>zzWY7AqR_D@?rw&`un5AMU&R`;(G(LVQ%1_V_n%$=b>J39h#0BJw@>b_ zz_}d{oxEsH6U5x4fCNj!76$Q53IKzbs$u(exN4)P#%D+t7MN}yrU8F1K*5P~Sf(HY z@GzpR+ixZB0vH>h-2pEPH@hclPU|rw1$0&7e(TjP#NiB|EzMip3HrD}2xTRXbC6L) ze#Z;2LrJdz#jKqD)g!0B4gwB&=c?=KyuQ?Zs%bd;R+r-17q7UQ-4^}z)$YO0>4z9D zHe&8w{tp-Q4GIk`{Y@@l(e0=ydH|k$j?4O*x zkT$j7_8V%F$!IJp+e~?52Zr*(SGjI^p~=TMGSU^j{(e+w@pW=?a&;v|ShX;TW-uM8 zf0&&G=LfL?Z{n9)8H4^Ci_o;v%4|))S?Tfc+dq4xmb1!rbqo?UecWx52W;@F99T{l zjeN3GYw>`8d6nCjH+N3*4GJF8{;adh^g5IY*bJu-ZL28E(!^-ar)fPwzK+FJJ4Lr^ z$;l$do=NN)$wuJ>xw8jIgPIZ<>D(ttHNL>1RcUW25jUi;R0jG_#8T2fg=aGTv(b=v z4B@VO=Mc>pHGt7y9|sD>dikgY|K$R=LCj-SG4TC5poz!HN^=^2W{L#&Kfdq>HrM0Z zmneX-ZeXPjJ%Y1Bg7I|rQ9(g7D0CcIR)nH5Lc+Z{CkF1`1qhN_Wnz`}8bD~a5@M>_ zJk-s+AR}B*ILyaEqRY?Z2;IE$$5P6|T<6(rHCXIXSIpvywRO31#qUNplON^+xGeISFlmx1BK7;68}W z15xG(3OXprxZC7Qv5FH$N8;pEkySrF;y%@@_K%^6NR=``zO}^TTLNY*@e!_4q?*WF zNii_>?dat6$LH#7N51;?*7lU{a#^uj6>iv_7BMpXA=IVnRY{3LV zV-M78{s*{{(gJiii+`dC>HC4{oxcv|F4R9L`|az{&xWafE%?y67`u4ox#E%OyX5M* zPKvbBXSn?8e7d2qQ@?p*?kuxc=kd*~qw>qG-ynTmQg!?9S@Q}QkDHo$>9=?k*O*oV%6iKGbXCMu0_ItoHx*`2`aH@?nsqRD?_&~} zp{0YZN)jD#*V{mNYThsn>wJIHd87LIpvqM#Kd0ByN? z8FdOd-j>@juYD<>L00~5{dA={f<{fosED0&f|G_!kNWTFrZeg9-W6Zvsnr8f#j9_l zA$F=u`8Q_AtN#q|_ie|x)Yi0ECgr8h__dAxshRWN*Qrte-d?18D*@z6mD#67dk;(* zPnB+-o*H+==UGP zNPAm*=56sf6h?KTmv1NxUisGMFHKg444{~9)5)W;mL3Ke#yI-+;=jH@z11)Te((UG zejv*h`B4zP9C85wjn*2i18^IJ6#POiA%cZ0 z<4%_#1_UetosUKjkB(gJEI81H7~wGW6kA|PFG>ABDaR_pBI<4YP_sJg7=*;0;69v8 zgZ{=FT1g-{Ou^+Q9!F?`qzi!a;RJt?v5XYQ;1@WX{YcN@t@0Qnqk!EDE?KX?!%8*I zD|poo+agZ!ADTkU_G&p4`~qXFL4;@=jXLOo=h#iN50=q+z!=6F>UbZCqGx0j1dl5y z@~pIMbpk3Fl0^cXEC=i+&_uk$=^-RMqpdX<#bGAnWRz0C{13UX>jvHOh7Km=ZC&CDaAU3J~X`Tpiz zUFFjY1-t%P|9vOmt=2!c?RgQQ?%}q5koIUH~KyKnWENQ~e(K_;YZby5Son z666@#zx?SYUz{WFy3!+h(KBcA`0>nazzgu{htz?P! zq97(IMqBlzvVTUZNa=NG;v4DrP2MNZV#m#<3OD78BYs>4-bv|xv-t#2mzjIjeW%7O z;O{MH>N8Fb4zt?x|5Euk7eNK06`k}jy|zpasg^>&vOnR-ax_`(a~{5Ycz9^QQlr`D z4hJy2P<=l7*rBlze%;K|L+9h4zkaT*7hL)}d+dDMPCL|#Xc(5P?3s8jsVJ>Xl;!ju zyy+|?ow&*Swb2$32%0ZMEbGt5_l-s*v+u{=0hT2cTZ12PRv5o&@815>n+J$h3VwPg z8k)lcfa13S3)BJ1*~Jd!sO8578RwUhl&pokos24;C+_Xo9+_tn5Cc{Auv zP;j2AX16iumVgPE@la+oG`R4gB9#DJT5oZbKsZWMfQ%aGqCwp0MpMax?ldUpbBN~{ z61kU6$Y3ZRnkHf}ga)!gUQOsElQ3&Yk#fV}%ufOMuc0~|{AMIhnhcRgW<}$%<7P2k zdXpsQTG~X2gO76RwA<8JRA^4Q=c3c%-tmG^Ecm32`kmuxD4`Go5jjOrFcW}v+?PnA zLPTE2ra@5R#Co-KSWp1^hPk6b+sa3r#Stf|A_y~uHdX&eIY`z}wUKqu6p?>0RUP+G zr}C{*YCOs3w2G1l3IJL$zW-{KQljvT^Pck;{;^yH2Gb6QflfO^DL6|d$9x(GqL#SO z=3};r8mLwRiEyRwxAVRTO=#ad%fH3ClAgc^+|#fPPFcv07z<|vl*SVXOC?DW6z>2EBJBA_|CQg7 zm;v<98vFr*5eNzljHulqD-r{o9s;)wpsJ>c=qMpR7KE0-HXA}=&Om<>2Y-hQ)`w7} ziWj=yI{Dk~3OXTU6>S-cwoD`pAHg_Y08GT1;)KFb1&v?Y=>M%)Um41&i>xTu0XPyc z{1uL~i^kpcC~@XgIP5F;b?!US%{)1`ktnK9fPU;Q(CkaG(5zcZl7z%LMc?b?N9L}* zLH^dmjLCk_x(#tF0t#>DH<2N>Wk2+nHS9z>H~p!$Je&AXH-E}ZFMR#D;cDS7*HukR zSc*R>>{Ej{>u~83Ud{_*d3;tj+x;n&qVjLP<>2Sj*o@{y9fE^0 z>41qX$#QM#a_N6rv2gmUMTMQl{iZozmO!F(g;=h$@RpPB3A*Q#x)<{q9@zJgKJQ&ga$W>(j-C|m|ySYr83=LV(;#dv5v&|rRtC@WJp{=!(=hn+kH*YZo z*;UTPJwdE|Ddb(!%YcA@is^p7SieRyk?43r@E2B^(74ch&};EsHuc8B%4cg}*+=u6 zLphIfn?gd+fot3R+S*1%Lcv3e8n5D_8Mh%tn1#X_c*j27(#pxVcX+Rcymv=%@g7ZB zTfuwJvl-T1Z1$=`c0s8r0x`0zY)}cF8v_ zQb7;N*X2FtK2U@UF8*gY5DCF18X|FgprwQeOYnAq@;yL87b(h%K(mkcyST3#g_^or z0$4R<=~TPc4PvOid#u$v!lP$QoC9@*ObLnTyiI_e0?RSwZcZGRc?b9ch6Hfj6Yd!} zL;Z1T0|NN z)53^71)P@K7m8bseRMPBy@n|NxcD!hsF;YP7?sDkj)lB|eV&8^Mn_=lfTRRg5HTno zmnjNaa)@!%3>JzF*A#r~NCn(`fF9N$y7&27;iPAk{gm`7py%asG>uEm%LRlbQ#kf% zxCytnt*HU#6`D8xXe3ViGhV1&>BMPmeY(y3hLqMU8L_->G6OIE&NS$30pPs%k$|3U zRAD!n_aKDfabXdMsTBrUlEy3=aOB4&>%K8;ZWoh`W`7KY7Uy{uIYgkI6%(i^L34Wy zMLewmb2ohEBM6toU~ZOiK%tfL9vS3>L~c^7iMeLSCM(!7qOV??$8G-tkX2Z}nCuUD zm-{3nsxFI#aqAwWkgf+^GtRTlba)?iy$kqmN^fVBga!>bi45@~qHIj!|K5#LQ#00+ zFeF9%2+4>{5wY-I_!XWOYQ|IKVDp=yDS`r3kRRWbU03;Evd>P_QGx$Lif;NqJ52(m|MrKA zHLi<2E>TM_T6ZOa(FTF@-Ktr&XcN#mclqP$?`YWUDe>ItGL_-4?^;{H;)FV9 z-Fl1-s$7H zd@TEFo5+7x-T!<(Or-&xTExbmpD%H^U_MD4r&v^I-LxrRnh)TjGRxzG`@pGkwmrnq z%dqix94?DL#OBdIHFNacMen`AJU=j1ly%!MS`vCMYG6nXD;NB5d?-OMGX(pvBhFYW9C?7;ceSdXM?N`oT44o9*& zW*#teW5;`FW5c2Ass2f~U8aRd^3{5L=h4xTrJTZxv=tPFoDyk1W+LS=bGmWg5aghV z;BdV4?54_R`rn`N9bcdd%EK1VF7V9v3VPq}j@{($F3DF^lGhX1c-NvZ{J& z+zVBY3wDDSqlp>fal4H~+@I7LfpSV9gP|1&!ht&xqUd^dwi&rz2|$qwLCHVD+$GgB zfFN&sSF>;;7@^(|{;q$OP41>|UJWWPE*5H|cA8SY_+BtsJ)`nmv(IVE2vcP;28ie; zJ54=$N0cQ4el2YTo;X-j<0m2ta}RMifSWQS0`;dDUYV^f-z6dln1&SQ-Um#izBz%Z z+G2J@JCRlMSa!-Am$5od=6I@W_=p3%mYsn zAwhB!fbUQOCSo=Eseocr;2SeD1WodIOHyb5V(xEE%uR(i{Wm)yG$oAjVmxw%hK9pw zhM42>Z!_d=yn`UMxd>vsV$zq#_TPeg_x2N5_9GzfJ{mbr?H!EEDp<+mrpO`)#&SpE zeyW_eU&X_%Nw6q@gMDjDO^ve$FI^4_`ms=JwY^)E|*v)l5|B;Juy5Q!Rp0_mDaqF$R|LL^cF zZC_Fpr@`jC!hiA)L{FMo)T0bA;VU+`Snqx-sKnKtWjHr4k3J4K<@bO3l(>?#x@Mm| zVBRP5^gI8n`HkJBuB5N*Y|)-wUXB58*SDOn2EsT`v%~y<2OOIca|Td?JvhEgygNRp zuJo23r`z=fYtm%cprEzx?X7 ze1GLJ#+@bF$Hq?c5hW@#i$8uu(nQeWZ8XcPljmK_VOOhj-hcP_x8+?(uv%JR-{ERt z#BaSnPl1m<08U!b>|s`cYvV(3_M;g8oyVFC;m!?{{Vw*uwMaw1b29=i^&ko`e1}5` zaI>Z3we1sy-K_}`tg6UpQjPT@v1nvo+gmsoU;YR)RcD^Zm?v;lT`hxY`J<-w%T4E6 z9}LeM^l&Z@2We{0dfwry)?B(OrnzXyggS+w8f~<(#v-eHNAHBqTa?*j z)M`G+f#dd*4)VFQ9-G>_z= z8UjTG6lv?v)}CQ4k!RHbGs{{j^%;?%Z1q%SK(F!~ZhFv-)!i1CpKYoE?IxPD;35fJZ>F}5sx$k9XCzn{<1jboMv)_J( zSgro9I`PeS7&HJOGh3vPrD2HJ2k%-JRpbmUf<;}Mc9{z3rOV1KtF6)QDtQuQ5w*ks zRFYwhzEZR)dmrc_!OAYl0bEv056yH81wh!)U`^MR85@iB@0Rhml4akn`T$m?`z=-K zhNzD@1Pj>_uE%TG^0RFu;IQS80f+T=1-fByaYd|x!IN*6zvMKMpx6@1F_Ny^%vf#= zvKNBW^o%kZM!${0Fz4OL>p5Hj-ifTF3&`Z#u=~)!)Swk{8k&?p0D|xLHpp%qK|&BJ zE(P4AL3|U2flXMrxZpn3+!1>u%{iPd92Y_KgX}IbIc)If$ycjmzqx-Iov~ak`_;5i zdo(F`7Hp745YW)ii*Q)0u>HgtQ3yP-m9?2%N>`mAehW7)7W{?({;{6jtHB&Zq37`2;~fYer+76)3z@G(&j;7w9e z(T6VoWV!7NVQUpk`s%=QA=;zjseNh|5yg}5j_yMPA`L7<;(%IvEgANWD-fDPsDE*N zO%*}%>*K0p_Wd@g^fnqnhLACUQ63<+g;tm)r8_PDo|T!|Ro(Ht0$;B7rkSQDrHaS( zW$(2`&1+v>POn<@@VzIc6KDNmL$(g!ZUa($6KrMiF*YN7QrDo&P(zqR=9c#!Fa3<` z)%%^RAF=1BdyB?BpDKg6jz?mZFZr)18~Pt%++T=kCsR$C{X85o7cSsBU)#x)b6w$` zd(#4mRf-0~@m#0Bj+Cy34P;)V7i|z6B(QlUMGl{Mz5JhjU;gXJS(~G|Ud(xVm~U_U z=d#Xq_42^-@_nRTzyD53qlbH=cfS)oWSnP-+7JsqEwgLzcF7;@YsQ)*weMRFCmpX= zj;=;Py4S%7E5honMUb=&c9nGRi)0e&ZLvMC|pNCNMDFm7I93H+A z)x8CiuzU$&t~C69jJ=rLf8+8*G}E zfH-I+1RUxMu^@{~Qm3sVH*vIzusPWfsJ^9J13oq@u~y3mjEKE#7(jH#yJUj;P+}By zYa4>1!&@w;Yw=@}&^N38d4BJy{}O8vWeD~;u^*u{@50z_5#(=kPrN2Yl%CD=C^3g) zJXBO_y+E7>F<5(3RaM3E;p_Dr`1^~n5xNy{6F=l;MZ}70U$AzLO7BrDyu`H4kr+FvZ}DG8gOAF2WWVxh(GBP3qB2MD@jv8;=-C44 zgYFr+)yVJfhYv$H#crg4LEzi2c!gT%+1a?j+DPE5W5_t97(q*tRVe>Yji2YO_^0aX z&owISv}5Y-0`1EYsrDR{jA6I$LiND_T}LyHNi}Yl_Mc4=>=Pv&Ddnxkhjj#pzzgnT zKqD)TB%u)J?O8YqV`Nqhc>*p+y2Gk)M~M*;J2hiXux8Vc8v2zdo3Ds95(Scb3T+9d z_mE#Ah!7Pk+kA(}c25mV!L+umuIP%HNWfCV>{%-@edCqVPUmL+pLTG1#O1Yh)oXrq zoRCpYZyX*m{QFYyZn{ULTrmy7Y#XT=?A0=RAif zH`~9@q_Q(t`1-rMS9Q$B^Qvol56sX{KA(D{JaY|Ng%U{JUP|}4e&DOzA6b-o(_Fz+ zrq?r?(193|1b-mQEvL)oElBSG@Ba$hvR)g*MekoW`+@v8*MP$baChkXOPlj+t>?Wi z9a&I9LBomlUU=sRMbLkev@b+($RoC*fxa$_SM+vsTwEg~@V0k1I8~Z6r@!%bn6+^7RVmQ`%}uNtnb>2`G50C*ZX7@b+@Zrhu}Ft|;~|BT0NGChfrPnB zjs-(_g?r+V#thGJgk}FCLJ2_P3Ng8x5$ex{d9B4F1Th(gfV^;{r`yC#h!BA8K{@mr zBJp`&HI2CL$9A7#}+pEji($F!9h z=N97DoDU}|VA9ZSZ&1_RC{O@%ndV!31;-PvYeSIO+*SZb2q~azQ7GEj?uTz2H&Y+$iYlr%ic;&Inpiu3Pl-TYoqTdCUG21?X6i)j@L4 zw?nt8{@h36wSyok_d~UMt>&Zdq1?>L?UCP~iofrTiq0d+ry!3=gWdtCkV_-fLlbU? zMY?{bJ!lmvXY%@}W44J5y8@4sj;D2RDk@ z$H{g(WSTcmZ@fHKQ2D#*?Az9HQSeYjQhc&B7jzP+c-{yj~- zJB+bVtM89XvzZ7Rx^Xz?O=G=$AwJDQyk{nS+%#N@k>lX`S zDY+SR_T2r;Yqy-=`VymQ`n3;M*V=ERero?`L6-fN>BL`2@jz4!FeFjRATNS_b=0nk z3?zW~cuzZmEF7do+yWS>u`o((A!sG(`iP@L1cu|nhzr}lnH#FYdwxB&E*FNtZxjkz z1KcAfNb^XXr1G`+SL^j=<;}u^d~~RXtDPu|KO!DC{dav-e2->40_Mj2WGrfintf0H zE{|oN3o)Ru;~~~i2x~T8D%jk7jWPC{gzhp< zL*v1EJw=8akBZnCDFP+qcvDk*ylne3{d{#>jyyaw&zj4eKX@&2Z>aoPy%zWs2(&;i z{OCbHRC}N;{)tcHoKDL1_hg)*16Z?lAG{k;ncP;4ql2Y;jadXvFEvLFrmSfpC1dW{ zC)dKoo*I{rX^^wt*7_EXPl5hAMFpYon%{)13E*&tumXVX z)v<9l#Eby>YbpeL@B93U1)#D1Az;-&i=ZX{ZHi_@X@;l)7MuHjChCnZ=bevvE2Aff z?cVVDt&9bD2RL8lJ$~PX&tr%BZ8(&EB?PuAz)b29z2{7)U0uN~*U+x>F zDr%vX2C?WFVhZpb0Zf5`cf@f;xuHTiA+dZ=UfQjEcpIHYKUo%cT0Yy<4}2+$F6hei zKavTUn(>%(?ayoAtK#KNHI2mW!Qbb_n*#W6GyBLvx5+pX8bBZ7nZ)$R^Hzu+d>(mU zQy^uHFVzGI+PK8T;xu3a;o54+Xo7;u@l%!SoO*U$Q8XGfG~>i;3c2a78*Pi8oH{S9 zv@~|(#|S9E%#r4^JD8S+167Hp*EDWx5eboPiG#xhSEKrzoE+VYN&fh|`5+VYsh)Kx z#iuY5%fRy19V^@K!%gU%#Jht~vMtDMc6`XwbSsH;y)a`=|Z6 zBvqz!8i$|v_Q|UMVSx(G(VM4Hfu_8B&$g7lsZ$cqNwB{Ng!rV%9kyjmf;0h1KCOfh z+R=+^9&^!0SM33(;PSOMJ7y*lsB78D!qwK9S- zm2%+u|9JtL4~i`nGJcmCaPN8q90qt_p0N0DiC!p0b+YtXNJ#9XKK2*@-l2KJIgmI< z6ilF~+7)n`Omrg^{k^t!qyLv5|73NBPMOxJ z<<*HwlgskYb~h2l)&XuJM27^-AsbxB*oFB*oPHxwPvQ6x$InbuG}csED|}?)?UZR% z_kgb^KLs|rKZ@FopCcU5q7)y&k_*`JlflJrgP0XXNEVxWaugg} za)D!gFD)%SyLUJfxEKTGKP)hJA7|H&skbaRfz$E1zcC(*7@vzFpBiVCt6_dkfg3r= zlEp$=_Vow08bKrrsb;}1R)ynV}UC%%^p`=VBHbSVF2-q)QW3fs-A zQWl%8G8UQrs~=95%p%N4v%LalSXUH8Z=}-YnXGK6+cGckQ1Dwkb$7 z_{_kl#=>{6y;)e}Mlo1uZj>3|QekXN1t_pg_XJl;j>?zjeUT>rgQm0*y&rUKZJ$6$czO?wrLC5R zC$q+o+U@N5tVmSyEz@5pSA2#u64?KtI1UIx$Zu4bW!fV zlmk|Vr-{bBSJcD|O32gvM?V5*180_;l9!35*pJ@x-Ygli{bIvs2nQvCw2ligJ%e7(tR`2S*uHVW~+@x*EH4yX8z8jYd zrx{LTYu0{BQyW8JZJqp19_Z@fg~tn5Q({*DHD<{bWle$2Qr>jA{mZ!{av5pcpOFR) z1=qVHQ=JYCg9JDh?JOtqvL-G>L7!o{_wAB-f-CDOCO)G8&e*Z z&5iE=m6hp)1wA-lnmgT$Rk|EkSKbo^_qEg&>)TdZ!1V$kar!9(2v{IqV*^afAhk~J z|Bt4#4r}WF+xQvXCEefhq??=Lwf{P;@gV{)}q}{^HJFLxH#{ z5O;5l0@;4hXJYUqGhjllvOcal!}k>^oQpef64R7Z%pYb8|Y8!)>r)_}Vn`pi(4K02x{Jh+T6nX`@ z8l?goDOr(vF&PlYssRDvPY;;-*W@_C3q63iY4>o={JM6PCFK!i1w+xR~xefDhRlZ`S?Z$rqNT|@AXPIROtpG=@NQ?W9ECV zvk@+6)U7+Myc{melyC>O(SWD}|F6o@vCZFBI5ftiSqm&Ttbow;Z{Wr#M-N9^eJ0jaIz-TKbKS| zeaDv%)^|toi((J|Ps%wOqGf*#%Ht<4{a;-UUmtW>3a4d_$qAZ_ zfO1Vko{5Iy6jk3s$YdcTQJEL$p(1vA^6A__FSN?i_JCu_f0JX+zjrEV4Fsp%41t1b z*+*|>^pst=VXfca6s<{hcy646=>uqAi(*o*+`q!y;S<$?X z#gPNI0RegKlhJV@m}%-buW;_J?nnjal~h+X0JQF-o;N!B$Z6S&XBHKb_Nn*Q zr%hoq4U|S%amO3&HI_F_!Y`E)G&ICzV$T*T4Mh!fz28x$o`mS_GeN4rYlc zJ*;)TU%6OMoy49e*U?=4daGM)wz%yTZW;XRRE47Mn%Ap~qBP43@Yv)*R{DD)WHUlG z*uZt9kL?Z}(p2hs*#^I22oAh-!-^-}6+2#;A4VOhfz+0H@z;}++xNFzZEt&+d(55g zES|=Jkpq^8@nuGpir2~(m6KO1m9I~jIMJDUq6Vm{_7pO=G}FtC;gD{lR!ra$HXgiF zdCj0vH}CpVCSkw$XumhNIb>(j?S+YRdAG~Ss7Diysr}f+a%afy_Ew#DfC#5DHEBwibDX#_6KA_Q{xq5+_^;;FvSF@hUnCt}%HW@}@WKW+ z1`Y6(kuA1~| ztQsYyI%G%kCaGwNsH;J>w_=~$lIBa6nYyf z0EOA~rSsbMIj6iq@3mVsP#IC=;rULi#x-_OP)S&TtQj$-NA6@Qd zTf86LdQ!hS1p@Ca0D*9mnmdr6%}FVP>Z~kuG(d|YbmQ3_ClbI8FaHq>JRFo=wryRj6tA`8%403EmpHbo^U3I2iZc zuin&x+2iZfPU!xal5j$wk0zZR^AB-o;XCHo9-!w@YxMIXKuhnC17PXxz53aIZMK}zd5^k5gKmR z2!e7iwnDF%LJxAwy=7h&+M+BnG&JOSNuL7}l8{JpK--l$qxyLJeU6>LKj5Y!7w`9Y z3G}~Oow-Wmdzt#3c)&l?xl<<2{thY3KamoEGoKLwjX)v~KnJNa9x;AML?i8-IUim4 zObqy{26Y%)h_J%#=Uomjj<4HWSa~J9yRwDH1D@=SYM(}=f(ET}weCn)$L@d{o})4= zd0AQ0J*8dF=rvP?1}-AcgKr)Uc3Zku=|hM8!kp!){rna3_}249ZF7xEH#2#}p6Bs@ zOBVDIZT7bEoJ+ndLYk9*Fmr){9p`;>|53U>D;>pvSPwr_4Tb>VPI^(wgDutDpoqDn zKdbos+T&tv?VxGWY08)DwY^KVaXgr1ay+JMbu;=I;u)4g*Sx>Itg0fblVF+&tjx)aSkcTf!D)B@*1%VHTtZN?#;;lE9K$ z1I8r#^eVLlo}NN8SaeiWsDeyH@23}Mqxb+jUI9|r2`4O%QI*y2w*23R@-+J3@Pob| z%Ek^?*5YI7Wv==xB3+YW*M{y&E!s04N&zmr`E6e zPJx`25L-7}c{7d2Eg=731|}a%Qe=TDcm2IiiiA;fo8UbpO==Zo6ErGYI{C@Q8MObc zQ7OnOIqNeQ?vfnz>0}Itl zMBhQJwg&9l-m0V{15lWFM~L{g!u&0#_qXCwfu7l~7!G!PFq1wV?+XU-8cTA03Ej8_ ze2NP6|0cc_6!=)4_Fs11?bv9^NK)f8dzFcx(Irv?Ue$@OlUw}4tL(@!d*FT0U1 z?2NkF8nj*d=1ZZf#Ujzp0?lw$A~$)?sgMP%g7wOyF@U6_JKF&jnI5@B|MW)pv4ZA z+tSe3*nvG`3c1y3SGP;M!UCHhdhjAx>vof*n9aQ>j!`$rj7PTc$mj2#5&kZmqs?{2 zN4`*@t6rhS&R<>TAaY+{8C_Rzc)jv{?S?=g8a9ej7JRVfW{uaFrE{fai&_bCgfsu= z6p>oH54a+O*w38qvsHF+!iD)y!qBO-FQ$J9B&pU6KmGF8&!zn8V$4B!HLhc41krx9 zv$$Wp7qaVOC6>GE?*5(dwjJ}l@$#f#(CObRVeq{N{*prXw!Mc}iiU4*c_+uE=>K&P zkGCO(`N2##B;jKNdT#~co6@Hw(-zP?xe!L}>x{fJHEM;k#56Ca` zeh}rT9vu^z?wR?3HjWSNUN5{Mn8wwFT?|~hX_tDAZR_H{XzvI{8&uXeDND4(&HTe& zU*81C&k(q$2AqY4u1B#+xex41_eoZm)^zIVz-y<*&VI6Wgov{~8BfeTA9VwWdjr|S z_PE%;Vmqop)4c>s^VCAlRdHW}`~?j%Znw6V7}v4?LjL;4TE}tJ&8<$?78ct0$AEw& zpNY0OCN~$%`)_PNcmsN0L%XCxaIRb8o)8#>cVGBsLMib7+vd+9k4AlNL$%I}s4=mTw0 zg+0MdT?l}=LS5AT?zoGpZI*jLIXn&ieiES9kSWNhG}>X`8vM#4?3Fy?YV%vBk4SSg zR=oD5n{x?PUNrDeLBx=U62Y>RA~p*bh#OXTRqHl4bM}SGb9Ue@v3+Wln>|YNUOm9A zH^k!iZ>2P=PY>>iD1eG_h7nUUPaOigk^I%ukrybc|dZaYJ(@VX!fC0Xw#eaH7 zoucrLAcW>NyzfDwYprSU*6M*p+Frn1*NsRY+tnaA5la^6%fKBRtbV>Z9o8IicMBUA zk5X09{A5xxQN$g`3}Jr4rPo9hTzg7llcMiDH+g#!b|M>na&gA&OSxPi6`DM=rY$!k}CJ>S}h-!7|`tt>f^(>gq%23XV8!?t`-P9aO19LOv-B zk60DYG00vVfF{KQb-re!YueozVmBB3q1%TW<+x#6PqdGkni@LGLCOr;x~dWJ?yCO7 zeYdei@7|5r(6wqd|I33NuCs$Z5USL>mu}(ebxWFnMiIhI3VU}O%jze@N6x9LvX+0) zf3FyLOMcs_I1&a~9)Q03{_BVObWMxYv)l7o;8LWMB&v{4|I1V{beawrgosP1{m9HI z9MFdzco4vKT>ut#<~zXKqsX5E8AY@MD2pU6F0RmBqqdWF90oVsaU@u{(0&qi;@sBJ zkx0M8+3CiJ+B@Imnwg&_q;hXN9u>Yi96kXgeY2Ra7%reoZN?__8bWZZN{A_4-ku%mk5Hftb5-u~s$$d_)gw@nlI2j+l zIaDgK9L^3TL3)o3EFV?u*zdF@>UhKpTeP0_R5ovY=RmanEnAXUP^8T6D$5OE<+}RQ z8*;IC<-dgebI>Lid=AVm8WWdU}e8m&U~hYZTGu4=Olp zs*TO%w##s?HIEOi_cl*rTmbC$Qz!QGiYW~aAW{WEEu{&6JysUM5vH~&00_i^ zwG)}if2R}7imZ>F98h>nXDsscP6j^hNQwY*v5;m=gDxlnItq!Cc`0Ug_GPCfdrLgi zFZM@NB2Z`k+V{ses$|f~nuyzJWrAM-Up*CI?^a#%P2*~&SiZy*Wglt^xB2YO*0+3d z8;eDq1bZYwJjXXuZn1_>2hpGQT+9L|54hm_6!@!_FJEPsz%_3N3Y- zGht2go6ntHoLNkF%P^U0o5!}DyskH0Om_rhl!JGAT-Q$f^Kh%SR`M<9=KghS+biJC z><`S+j32H~+Bb0$c3lm&D3%(lxfhuS?~XY$yfaES~D*2S+dPeGWh*13yt0VE1bT zOXAwlKXO7#!RJYVLm%|g>5vDmg-^wD>)c$F?{?0M%eiOuTs|M&9g%UDlMAwsuQ zeVcnl<6){i+52B;sa|TnyIYhl0Z@$i=4{y6BcFtsJdX@L5e|J=^iMXC-iZYRBZ9@c zl&h{XsAhh|=gvD0w)&0#a1dhP8Yb7qPns_r{7p|!#nvuzCH|I7vFfB2Fl-rmIomI+ zbkJ>+nivl?tcyevpsINx*>wb=&56cObOw@_5+S;_7FIbXsrn$d_+Og=-619Xe-7tO3NI z5(vhNgB4~wb^kP-X&97N2t1__S~#~wsX9m|Y#mtzU)ri#PAdk2H2LxcIk?a$n25XR zu@LesFtF)L<^hxOpwv*dj09=;Ko7VXjWGKMe93T|doPE)qsm;Ro9by31^R7+R@%Xo z-5X)9OHjb$x;IqC7;?6Ey$5b5F7OlDuP8nIukh0zp0RNqfvBRjn}1z5WX5DI(}zdj+t3>_rh0gnrbEJ49OlqF`|~uP|kh;Wh%G<0B`NM zJz=Lhg}9DDj5na?g~)#Bh9(|Og629l<5@F@ub1$VE>+plGJvNY3gDf;O|K_+Co0{B z+a=Sy4gaAIA##o$Sw#Tz25!s71@7pTb!=ILE`w)Q@E%vo-kJaPrKYZrMI$2cFUAvZ zze#89iaN+;Oq|05%wh|(5*~W6f47vTY zv7_@K7p#|H(JCWybZZo=t@!*;lfTN@J!iqGN)EP+qcFQ$%=BIPHe}q*>YzmfldGmq54e6Fq4X?8J(Hn`PQ6>U$hmHhyH)VRj+>J=-cVpQQ%%MG^SFW7VMF9KBRoC-m5R z!MT21ai4Zg`yND}gaVidgbUR7#VY>|6ip&xq@31xlu1vfv6^tRpO6?<&T!b8LhzEp zc!6UYg(pHq`dV22i#A{xP4tJ}tAX=T`RB2jmFs7M;dcNAGSY|P^Y@Y2{HnYxeZp<~ z({XH59cRW7DQsxL@HA*tx^<_7<;!UZH>U=kwS99~2AGkixWd4iOmXYy03MPb3SlN@ zAo~gt&qDJE_NWQWlxQY^a%+2ETyt8bMVYV^RR68X+mmR3J8D*3^UY(po7*6&>Q1?B z*`r9+Y{#I9hTTV{_J5DNrDFNlI>4+Zt~k|U$uy&~iOP=4m4x6kru}2FpXaL>4p5Z$ z+}T<1>iWNz_Q>GY%zDgNh1*;vIdC3k7bgKcCeQbrU5~vL=P2Iq0vwVe>$%FGm&L_U zx1UN>UV*l}txbI2&`w3p$+4>e#4k+fvv&U#JWOIzd^(O0UxO z0rid162bEB($ONeZ7A0Q_#VTF?zPO0PHGWRjYl?shfg=kjzb^!t z3EviAeW4j1$)a=DZqStOsUS;A+;cj52&kbzePKa%f+1Yca+x2UQUfUZRMhqzq6UKB zDtsmCfIK^_kfo3PK78U1^o0vxTbwN_9v_J^@_)kTR{WvROsyBZ1PY=1Sf#`L+j~Jc z7jVl?ZlpMay}Gm>!3GP67=PqH?>tu<96dR|4hp$k{gBY$hHF7Dy*@u&s9hji&X;R6 z7ust&z5rE@b+Xd3vY?aart&1aHA9AJzzFFy2!ULWvtD#diIbssbzrGXQ( z#-Lq3VDRrc2D^B30dnHnF>er%rdQqI%1(ACoFyjj^l`=!HSDdFgCb}X zRO)v}{|^yZCkS`oH}FS)LdN~#7HppxRsb{wz&`~s!ZiA%9gBds;-s{t?UG{Pw964` z3zr_*Fm-lo5d$QBN%EPYCS(*TPU1OuPqXj=6GOTY_0so`z_D4)xC;f+9%}a0k)RY5 z|MZDS8wYITLa^h7DRl7-ZuiTb4l&KdUcdT245UAwQ1H_9>VAlNh@5P{ky32=c*0u5TurUgUSv#mkBKB8#JD?pL8FB3W7{spOB!S z)<#9vgx=6&v-Z#ik=lz13cPioyQKzWJnFJ{vk3Z$uj;vO3U=LGb9yhCL&3<- z>stv**W{sFdq7p(?p+2aQda*Fui9I#UdeM3KqmedY4UvVZPx!l2fxZr+g+pf2PsP1 z0M%VnSR-p$X@pMWdi_VD@;vWmb7_7ioVdbbtnpfAZmA2=whv>Ap?+S=)}@}FdrP8n8}uXO zcQjZALbLC_Ce1I=2l#~Hyu|=3XVURFDkT6e^Kk#ic7-~0;o(n3O#uOmlgKbiK)?Zr zR-r={_8gGK!O8BU!r7qS1K_TPbdtm)Qvm3qhxOeD?0}!s6)+2^+p(jmfzS>t)QrcrRqtiBo+){F2mb85J|A;7tDJOZQAW zBI{~S_(!aC!5dwAFEl4@MixNl5m5e2hpl|$SJ!QRK+uSDaTza;FuAxdK8sU`A^SI} zm_C%1xKD2d9NOS9pA!MBgA~71ZSS!=PWmoPo;Ho^@n)Hf-79JhJpGnJ2cYiuGS`(C z;#<9sn0kGZ`RncaO+RBR(k*u|PVi~sY`<%RZpJ@R+?|;xdG@yS* zYxmA=!u`YZod(lJLjk7fyT(LfT{b<_{&NYa(IxrsCc-j{y}ZwCk-mMdy4N9$UIuBE7z= zonxudlIMrW*Z>j{StGO%TaRIBSj6N|dAZcqc1s9IfmCFtME`yKU$7U~4Ynh5c=OY} zroj7IfEKPOCEL4lN;5slXBRDFw}}SEX(YyAh~5hJeWmHn!H?etB4yPdiZ^MMy^0h` zqXkyYg*MO~2k46C&CIL>E|L0i{Ra=HosyP zchnG{v(RPwKhsgpue`}1iLrQ6h$ub>?#$*VzKB%y(jl;vDZ4n8g1`_IP zm`!iDxoNe^sU`GQ?uzH}{5f$ClhAWtE@T=X&^!wfV7GpwO#+$h=ZjEP!Rs;ztBO{> z?1+W>Nv!gOJtN`e8M6Aa6Y#0!bjWDod`#)ERt-cHaQbkBV3W5L50eruv7y*2<0X;^ zcY}#cFzzdO2eLoErd*HTSxN%)VS$0U^>+D*4ZMXa<$Bv*eqwMz032OwHMGqCee(_s zTEpQ&w}T_7-oN_R?0wcLmjGt=a>*Q0Tiw)K;ZCK3Zy|eymVew@P`asL%9B4hKB&An zH0rpRP&yjQo102zls6d|F+?pdeWlx+4ewTow2n8h`~c_2?5H=_CQ!L@Qf06Kd_qn7N8)AA<~_GQlriV z>z*7u;Clez83D!`K=v&uYEtq(2VPOL;iL0QZI9RI_pQ!<83j)W%4|90U5^h94cRdQ z10Y7bEXhtm`b$x^+|3U=*{J4>VTXba4=3^2N#(=qV81Cw z`>lcoAIbX=Tl$rx=-{cwOe6hc3g|)(ADo7IW&rheeQ1aR)!%LX{n`Qwr-`kz9Y@k}#@3KTLZ0`=>@X4q{Xt{CjJ1Z$7e?cZu+&IGi#Q%+P8j!B z^?Q;FU$^>!yRkf|H+EFq83uKCaS$XoxQ!Hf|LxZZ^E=z2a8ZFL;cp5}A^EczCI@)P zWcjRN8o#Ri{xi8SUOG7V6@UI%7^H-41p{SQrYf6?q7%2L7MN9t9uv@trhK%Q>0!2; z_B}U|1O=Goh>)(sL$5`dz?JXexCdnF9 zYS{lmbR6aN(0G@qM-{w61VtGYrF=amyaT*{MIvI7qdEDJ4vL_md$8%Qh`|261ZC+` zw}JS0`ip@9_F&-NCIT@FGVU;v zN+5lBkiu0(^{J83aGd9&;dM@eOboqHh=F5L8%(q-;mo@EfDp|asOdS338+#n+EUaIdcH7yloP229){B+xN z@Mtb>KFx@J=0*W!E|khA?JX_ZfjjvLI84={Kdxd8=pz9L<1OZxjnYz_10Rlwnjw44+KXih7l;+q~csDtiE- zdFIVDI=?~-`z8wXkRpFgEDQ*feud+4lQIH!UPpwayvzW}8{Sb*BBVH(T2%9TPPu5_ z;L=4;*MEm=u+Y6t{5;WIr;h3n{qXkOF7S=W!N-LBaZ#@qBI~8)oftY`FsFdGKg<1|5#-A$f76Tx80; ziLr!Np{j*Xap2>AAZ?A z2^ebQE$G*tYZ!y$gWl+pM8-Vf=J6I*8wy^`Vz>Zf`V%~Py-17M3EsCB1hQU+v#!7OI27A2ulmcKzuY6uRp+Tuo9eijvXQ+P+%~`0?9Y3>NLIho9K`z@MQy zCJp*v8i3J06H7B0q4Tl9d`*L>xAVUL%>|MNrvan^8&sbKpn0xbq8}}C&&*JQ0Wl0A zH~bP#9|g?{m>4kL1+fV1NCKV=IpHFbK-0Pbv2au^TFk9Q&W$iM;^|KUWT6#mkWv)? z>BB^t=V_|WEw;FUt1}6s81;_4CxuFXhKp+}zNk;5vD>@5<*&Slz$wZI<^8hzBWa)| zd)=EW^z_&%r#vPSD+|mTZl(bwyqlap$~;dEG*|BRt&5S}|5R#E0Z4xa{yYYH3L>A% zA^7ouBbMvbfdRK3hNR9qORsDGrTy~WcnjaI6E*l`a5o>_YJcZZ>dg=TV5KWZy zv^TX7)Jt(8EF>Qo8cMu_(6}tLd2MDZj6Vu9wTV9J)2e57EBK>z_sE1``Hy-53*bv^ zJpwV-DoUw!=-nF5`)?J;L#NOCm)ySiLuC3e@U#Y0v%qbb;0RD_^o=zd_^nsf|B}!S zRf1+ZU1ro)-*zpp*r{yAZGKWq2;=<(|CFH3efQh*QM}IJK!y$;R;Bm`>FgQ`>dCxVx8hE z1iwWRf4szSR@u4J^==A%8K8WC;S8dN|D*t(z&8Pe)CU^n4RaFqmcV##fNp;9u^xiU z!)2;r>F}bgvTbwLynDB?)yj*_~=P=RUM`6fgA^W72jp{Yv8Mdsk>%b+gD^ zz_)=Gr=>xU)?F?RrI4V#QF8l>V=-!kMPs{nu~VjvY~C=Jk_5Quyem^kpWKvXYxIbK zruBCBo#xU~ciXZQQPw|TmJ_*L(An<;kUxGp=h3lqzasa3$mJC{G_*}<^SpS3;EF$m z(9ny$j0G}lgdW9H2JbBft5I<>i2kgJEFAPx%-j1K`~nnmofIKDR_}Kl4tn6MZ~}P# zn}nC!dsmlT)Jm6!OdlR~ScQjZl*|llQZb4dme@omH{;QqG`LMk4r|>>CTBwE8FHX6 zHZ41t9=^iHu<_dM#Gzy8U}7Ev3OKEpd#XV6@Ir9Sn%i6rejj7Q@?v+&^2h>yDx8#% zTyr%otPMm{oH&M7PEprz+RU@$N$Km0YuC2tZfUQrw3alV{#Sx=Sn-OX0I;`8q%WzW z@l!8OpKm*QVOaE9Oy3Z|RD==m(80eopx+Uab5>j9{}+7pf|$I80v7yO*%JY{Z(^Q( zLPuE3F!>Ywev&R1-IMYo0vPyzYteCnMLEJD9UXYu#*2ENWVg+Q;>Mk_GbV*ZKl)MVjm>xo+}BhK&(`)ExSIZ; z29jzbUK$4f`%64EIcYzvU~6AORyvF4UThEC)5I*o@BGcq%t*706gj7Wi8ck25?I?q zU*IE{s8oIgZDPPEA-}VmOm%|aGe?isL8YHyZ#)P3;7mj+A&Fj;fEF$a(BMIi@4Z6o z)RYumJ3eG*9-rq}#mG1SC3#^gByMx6&&~J0I`g_?V3eKZi4+ib_eeUGqA(isTJ-JP z2#(Oz-fKSKNL?dQz%L_k|3pu`A4MQiN00YZ;#CtG4u%G>wOLkXl{cY3re}OIoan1d zrMdTao?{Z~Kpd5z-*Et2qUwI6$j?-1 zBZzse!aYoi7S9MiSd>M+K?_jwUj0=i@!B%tlnJ>!>$f`6K;$_tGzg+8mSc1kPA`vy zFZ=RxfzEID0I}N{E$bL-H9BM>eM|Fe8a-tmLiAnp#Gof6BAfaaQ*IJ$UqC%q(3Da8 zDuajr!VdP|x76ihr^}P0vvq#1ti1F7qpjhNyYMmb53e3=TMp%PDO7YU!Qt@$ehrvz?;GH#>Ki&VMb2rclKczSbSWQ0m#{wwb=Ql#T8KzoLq`vnnb zaDV$OQe<{|0h0JbXzRy3e(HP<6d9XDK-vPT<*1NfAa+r}y)8UHhHq~PKGXaITs>xd zB!lOq%tQY>%Mp8;piuL0Jp*JwfPmPBxCXbh0POBUE%v>cDwy09deZ42Y}tDDeb&TK zA>>~?Q^#31qGQ{VtYd%LL2`0RSN?LO*h!flI2r}~FYPjP_$~T)dGr?K0sBFI~YQ#Gmp}szS3>x+>OLReRT^x`;Wtf~Qg6P{I59(p3^SpUg%~%@H(nA`C{YYu>K~ z?}|g-E&YB}J-viC;u+yn^ZG9~%NPzJylGaKxrS;AK&4BW^a<1;RWEu*-_Y>Wy&vfp zckLzrShacVEj}i$yp^Qyzy-F{C8HyA7)r5T_5jb+BXBGrL5|igAT0SgX3s! zI-7qj73(+(R zT;(f^N2np(7rb=qh3JSy$b&!XZ@;+V-nxRndj&d`Q5sm=-aSCALRwj)lFOE&Hp3Ns zfoxMD*(#dbmv#(AP&F;)`h`p%)%`I8;CPz+Gv}4hn0T9IQ7H#110Aocp97%X2F1CD$#o2mfM z1T@f>4kZK-y(`_3g{c=$S8mIy?zQNwkXt+_!(DMQhBe#yQ_#)N>Wy10XiHP@QW3&H ziaS;3Eg=yr5)zB41BJay5unrun@$FQhWDpw7vn4ekU^w3F;q+lDFbMER$=#@P=?>GngSj1%ke%fKyfz0H z`BvB6-7!0%XDc1ZpVm1j{_~fgNwyuz;7KC5)pzpk8L+z<1^SdfC0tG1 z2s}D9h+6NAErio0p~e?%BhSphv?w2JPMkwU>*24^g9@wm^I|a3@3k%->+*of9U1<`hc(dhd<+GFg^hjD?=jVk5uf|2H6Mtt>uC`VtB(wUu(i-?N0(@e99 zGI-G8t_E`pjrmiMN4hi_RYc2y$vAb-&M!S@5j_Ra#sRLzxS{LuHs4m3`YhjDUtWF6lz@~ z5=I~u+~nSqxoVv|W68tvMMY=pZ?a!aO||VT2JQtT zBZJs`Xl^i|kA-vMYlfLv-kw&YdW#&eR=EDL2;|tR)4Z2~7XVdFDth19VGr=dx`d+Q z1lM!Xw_TGzR`dSFl-?_nsHbr*pl5j>Zb_e%t6S$tQlIEuhjB-F4LxwoB&y=36UX-? zZzo4SAb3Lw_`JYix(62S)pI|3+bk!qH=P7f%n20F1_B_8lkCZlGWAgnYIJ6CNi3bp z4xgcdzjZi$3DtYqayOID|T?!Q`tjya``<{$Lm(B>ChLMKI%sb7Gkx=(0^e<4dZh;@>0S z93w*pu(s#blUZN~!Wr)a`rWNgi4Exat7WtHjZBxy;6Cl%1qBB_mH=89M{8+mJ}t~* z;B|HI|Fi&8PYk1&AKMKQ((A|hJ`vrToG&begr#^5A%D;;cnPpB*dLjAH1UU7FMi43 z1|DJ?+{W_pmb*1Z?iw!#E}r1?5FO>BW7q)E=GP;!gc)dbfTy&ba(*HudN`r+7l_EFC?bTYwHFS^m+(TQKGmqm&R{4hFTa2V*s z#StfPC$Ju}k}JBr)^SQM2I~R;Aus=%y%l_fC1=n`{#w#h`g!13-1c1nP%TSex!OAm6b%0h3c*}|`V4wp8+@C=KPwc-kfbI_13V=Pv zlMCpl!Rk(Bx=4TkAK)B<{P_V!&`mbuO3JHhYmfAoaPda1s|=OxSo?e&$jtcnZ>Dzl z-`lXnw|f3vCzZ{s(f7Yj<(kQ1iMh`It48ocmPSWM8#_+2h#s5IbLJ`FF4aJr5|eO6 z!sr$d=6`qVtu!bj`|D7hmOu4t@w!_K%{R@R)+P5_49Mpz6~?X`D`Gj zd5dl7*i`!Z98{cqN>B{g9JneRS9oY?vZ>2{gvTm!~(85nr}c?`ZWvydFCO^Mbb1VjjE zls&O1KcKFt$;|NM(4h^*m&caxGaK_SIYJ9@KCC6;Iz4%m9wm_tMmC2ZCiBrE#9;k8P89j zoq0R?kUzp)AnGHQ0w0jdbox!vxd3UB@yp1F1k}?ZKbfC`iOGLjJ?!hXs+MVCNd;*B zypL_3+SX%519hCLn z((S^$IqTC& zxcQ4T=U2tdAD=Tm4!Rt`2OoK*!)5V8C=YN~1|3N9ZD5}5fqyt5A~MkjftudHfa{0j zs!k&EMSOwDL~$|Tkt$S-Ui)2f3&uHFg-8HZpC2arQ zASgngv~Ez#`j(LK@`l985yDJu^T-}R+3-Xt^Y|6fEm*vTc#_k$|pWV(2I6bZft9^oS&37D9{O<=_GXnp5Ar4IlX)+c#To>Ao zObzutft;q&lIky;ppefLk<6L_3i(7224l8hY1 z(Do@1j?vxwe>9zCT$Aq?#-Gt8APtf-q#NlH1Q{WSw17xVkdQ_~nSg*alaS7V3?v2V zke1QXDV;;Q;s5+z{NL`?^V#;C`##sX&iB&S9A5<=DRQP)dp%Q)L7}#Rrrw`EHC>CA z;L)!}L!Y;6sU9$}d(sP|giCe@ML&j;tB|>&UVg?K)tfl3zKkhEPfJMyi@nv{9s`4e z1B0)t>H}2`4M#HPr>AEpo#>#FK>Bl}kzcL0^)fbz3^4sGHq8nozFx3%VZtXBqrSUC zGW8#tRj*bLPZVWR7D9>ChC%Kl%-4W~XORRfE9qn2t|<+;M5%Kb%{Z;O;MK>Vf7XMS z(e7c#&^j|fAL0^&PX|zS^!MViYkOsra^*l@#@3C9R}uSqw|bN^ zEnbhtJTub@h&K$X@xGZwP(A*mIx5ljz)Zpy!d`+Yd2HQA06fM6-DZE>5e>=uK^h&H zxi5+79&c}t`}+C_Pj|ng(YSN(#kawb zj8(d9y)Mj@=~T4QbTJUDlK|e71$>+V`(j&XPN9yvA}>#Xi%R)5KbG~1xtG=7q#Oct z(+~`ssdT$?jk1I2E-{gr!S|yJh1%MNHxNCE2qIDAhhnu2DfRwQuxe#qm0bI0&3oJn z&IO-R8fGnIlG%F_(T`Y^u~1Zad7{V1(^;1EP=-EFMubgwe?u;Iz7FC_^I!ih%Z1Mh zIof`fEJtc)kY#?ka(=j;b#=u6shC!+T#4#4@8SWd=^B5jq^m&gDT9G%6tx{Jq&b~I z$AI4c&+ujqp6Rxut>tS~LW<^H=TlZ`*X#{N0J*Uic=)duTztDuUN~=wuPQMz`Ip&n z8s*}WZu60au7q2qT-2w6mITKANdW?Yy3saPT2f;+j4iTv6g{q;WxhU zRvK3U9wE_Adps(v1_bYBG)&3wV5Rr8Wqtj@^8RohKlu0KATFCVuft(?@BX8ATG40F zF#9$YPE66fgQ{J}zPzq{@mAqq?hG1z@oC|j0_>z(n@{2|u?>6uZ?8`r%bMr{pAayg z^}f7XeqN}1Texr=T;m*TA$mWB%!NGV6N79oKm|AZ;ffEu-@qnv-F2Iid`MywE@Rae z0@(ZW(4^ULpxARf>DLZTSG5htrjRLy)7+nHA5jVXS3@87v+T^Wj8Q7{4bOSBmg2Mq zl)~S?d_YWxbO9F|Nx&dL6&@-a1m&;wpW~t_H{-fD2gU-keq4yyK|?0q{`j=wHLv2^*-DQQ@W{07|D=obo*hDhMAa{2s|+k^Z+@mU1QbPm#49z`tF;a zMcei3!Wc;@se#NaP>#!#M#RbbJTG8SAue)Ys?e?!r4t|7L_vR(arK-DB{ihy=K~0hIdE2SMym{m?99X=-x1~U41wt z5uNAd)2=Txbr`i`JDW1);pkj8A?GKs6*LH7x)prhn!`euRMx1*1iDiM6H*gg<{f7w zw@rFB@DXv7C^)N;TK>y0G}`FGFkIA>MWuG_9|%O5e>QfoQ5CEE;Cb>LAEh6+iH7I_ z`CBRQPCq%hVL-btkH`hhssOu32!0C0>TA7!Iqn*(GYNYKCA9Vg^7S5Y$B?MaZf5R3 zg8{G;Q3P@I(Lw5?`MMI`Xv85bEWQFfb&}QkR&cJ@LX(!_hAt2dMK_;S2nXbuc%mq9 z=rDjvJ~b=~!jwls0Uu#A>u?$`pLcka{CLDec0hDgZT202*hC{ZVkI7zSNL0Tl71sd zaW1kB@5Ri~+W64l1w)BPG<74@ox&(*Gi<|@sU+jr$qv~e4Peo7EQLTZ+Rl%3o)ll6 z?9NSW-%-!Ii~fkVW1XIyeCKkaLiD#Zxly9?#~-CQ{Sx&hmtY=V)Ku3LcnAzCoYj5d z&iYJ?M!Oq>m7gmlj_iJJv+0jof3kSR{2?&Pt>kW{tKnnwq}k|zc>}dK$e~rr5IgGR zF-j7J5}dCGb+cYCzC_oTwyf(cxE+J$ha0yjui8e~T%7m2pzwC;T z47hhadOIWkQ33a@;b@{q%+5q@5=pu6CI)IzLvZ?`*$aKHZGl~k&(FKVaZor9ZXkao zXziFax1m+*GgpDy7riLs zF+cz|Q}Z(5rZ;k%J}bbJ8op6x#i3iV7=!Q4zR#6Zu2;=IY{c$3h@J1W6F4KguXiPw zt2^?G8M}0!BVm(4v~hoa=45XnaJ}i2RW`t0POEIfF?A7}_5Nu8zfy41a?7$p-sk@~ z-{_ke5svcvHSDAv*C$Gj=!Vf`YodfDmtTqqeR`igohps5<_gm8EB}O>mW@HZdFJW5d@PCu1g(PN;fZWZ*sy|Q_}Vy|fEjuG?OI=uK`};hJE^ z`ByP`b>k_Swj=+es*3t#UY?n}d4FKRi<>iGhOG=a{WRH z%mw9lY4UZD0Hx7nm6xESP&Y&2XGO&a7p99QR+Pt26suZ?;AaiTx&-FN+6F(7v0OAt zFB#^mIr#Ra`7I&1cko{=FtM&n^wBZX~0^LEvn-M1Sm)+jwHrp%kv*WR3*S1sn}A25vncQpO_ z=g*%OMk++cto5Q@|BgH;GG4ssdm(4089Y84;rz|PN~iLW;}f3^pkgS#_Dq}imAaU_ zsm^=j7;%oyQ%H{+r$%^oN*h5zL?dqN5I%7#6!mBO7$8$c6{z40(SX4AANB*yBF0?A zt#ebnpL%75CO;reD^qz3v87Hw>|6eTN^Ngzsx7&zk5^&&cy2+wKSaYR2yaKhQK@2c zz*AyJ%m;vvn|&57HSmWqk{`NC$KBi*pm>5yx5vS~=%(GZdp1OUeg3fD-`o!kHwzQ$ zNx4BYOmLQ5Ma@Z&iPp%@Z4TK$o?z3!L95bW!>Lrd2iCyLF~Oknf#Z+p)n|07%)xH# zStA(mVL&sd# z{jn*{O{bSf#>PE;j;m!i*J6kz(C}psuWU*e3$Ta3`>5juI@TdT?jvCrWJwc}{}n#a zSCenmhOuwd1f5wHKr%O&G<7lW6ELCWQu{X&+gPw&Z&hs??&bn#{bePRU`)9TbG*15JZ5rtuU!O#6Gn^%VOY@tzjoJQcJzwz`QO&xfdUy&S(>Um8`TcbnKd# z2N1my;4Q3XzyX!KUP!({ok0LOI|7ggRpHFRw1T^@EoZra$hsg#0I6|5h0;1~_ME=;oaSilm_7q{Xtt&wMvK5>sm$yg0*^9`t%4nm3iv*h;Np~CKb`Uw` z(0t`k-_fSr*}d(PB7c%+-0a;{x(%!UASS~wm=#-r36TpEwwKvpjSe2-PIUzl51do&>!;$ctaWfc~w8QK`AK58z2deYXIkmv@ zGcPIzq8tP1+$=~SFiR}XP{QiZ`u)a)ju9i(=e8mG&?-#YPcb{1i9`7vQx7qBWksNlLe zvf7&$2y9;beM8HMFxTv7w1m1=u+dEFFKGJe(8-L76cDKnUGHF{hq4VAQ`31+!wvFgyk)C zO4bsp{*K%c0dqyZtUMk(po)&x;d;gi&MDbDWe^As#1bne)fKSfz+D_A%66p((nwkl z+*z!h{^0b476)jUjf0cbzrt~H0L+TOsuz~}l;OK8Y3mQNSuGR`64kL}Y0N4Bh={ZQ z#=kR6nue?_jpq1T0}GmpG_E1HDsZyBCrg?nl7Od%6n(Bw@=qUxTx#O66Dy?Q5Sb7x zy2HwOdw*9oye=gmCF$#I};U7>`T0A5Knh6zc)Bi}&gKc8&$!IW`%6trP&@xl(%+ip zKpHZH0<`)!;>3|P{g%|=z*WPo0BOoHAZ2}#DG8G~{GQZwM!$TM7(Q|jhp!o_003r|I zF==)mXgIuIke(~&huQc3IJg3nVk*QOp`&x~x0`Kha`xTQzF-KVJPK(FM=lEbr9-}n z*$a39i&y~q7meQtJaNEVN9r*~EizMG5!shJn?DR;eDLDiuNMm!iLVFJ>(-8{BRg}e z#!;rdbOK_QwXT1E2JTD6lP2+Xn9!Q93c}nT^omGO376Mt71)_4ItX}aRq}mFe;$Qf zN4GlFxNcHUC}UIfNRy|phf$Q1-YWc@p`FhC2W|);g;^s)&pe|3Ia71z18=Ct_uSW) zNTeEoB_++VYvn-x?gQ%mlu(VnM}8e=Z*SWuqLY$-xEqK6^;lPQyS+YLIQ@H@Uhg@& zHEvxoG%&vPCWGK@{qFb+@t85Mj^<1xbg^a~J8o0c@j%1hTBOi`+i8UVT6fQ~6dZwoeosvcXd9vgGi%>hF#A+?pF)3dYkfkg>O zLSJ$#CoYtP>{;Y@=f<7B<|{$4QB}HVW^-aJY{k`Gyk_&eRi#i0a12lkwO1RRl2BCu zI^Q==)g^!bt~TM-$A2ffmlES%0M#-RphJImVB)E#kL=Zg^{#B`OJxmqz6T1tfQtMj zREQZi_=KmodTbnH4R=#&_Ixu`qs9AUmpu&az@&=1c(yeHX1AQ}jIVi0UKbbMJaG#= znH9H~kRgwtKYdE|n*{M`3=WlrB^E%RiyQ?Iu`~GHeGX$GZgqy~4@rN$gEQAx!tCXv z!;N&8`)SFJs2-F-tAZ~^7bhQU8e+kv?fHzWi(lK z2$KREo$ykKtsoAM`F+!+INNA^OM~3_jvVx&9!92HFD=C*ZRMgO`G<4EXp&V;v-ftk zbD50y{jP7afc;F;53YLzRhz3-_wL;rbgHG#daHCXdpI~|$nWrRMPH+omAg}Gg~U&i z>offsrSO(Ekn27C{8J`Hzjh5F;+uU3hd3_#=as}wU-3(9+3oyxSzs?eww7F3r;EXn zAD}|lqkD+hzjmU3N0uhck|hHj8q8uISpZY(l= zz+=Lzi#Pgk|EZzz8dypSJKvA=gT%&{aX;$$uoQ~k9|8k!ch*^hDYpz$R}+T#?`TXi zQ%#x@9gqO9;{!gROQDgcgXa`nL^4t7{Wi|=7vE4N+^wFLv*m){@_Zz@`RI>e8J|pS z!)(p2tMqRfoztVq<=CcMr5k!ri|X0j?t!LOM^eZRG*PVt%Zz9gnMEYE$hEA8RhXnJ z?y9@rg_<@o#CA6{EN;EI=OhBkI*BRZX&HmdeBV^YlHE9h5kbE_OyU=T)XTUgmy!# z^X`GS9Sf-s_|2^!ms_rfpJWBzEa_hTW_t=U={?SR4h|0PS^96gN;mEo%s`lFvc!GXJ@W zre&=zo2ypcmc6R1Yp0)HNnJJHxkURxEca@Csp>ro>rEr0q_^^)GfOP6g%$#ai^QTw?h*BDSxNIl)=>% zl!i91;7PpubS=%=p-ekjYi^o`i>!4U=uOxnXg!FJk#H3{Z~Fj*V0z>3n$6=33iW^N@ku`=If(s4B}+fNtiJ zo}!Boh@clHw~C4PFRG=%SUm^8lGCeA6+o1oG*tE8N4La*jG^B46+!kRS6{wuAub)w z-mXyFk`u1)tVNTfM2PrK7GW#(xABedblm|V!9_ry7doR4$$lneztL$Cr}fHgHjQEE zFb5yE5F4Wkbqlv8Api?o#wSy||9b(Vg_q;{w7#hlCDC<~T0R!L2Tj>qL-tPyd)t+uTb{dH=77_KmcBtJE6bQxy=FvyCYGnC;{b^26?MMf|w64J6Km+C}4DA2q94; z!<1N$UZZGWN7skT5R05$m*5)%G>-M%NJCW(K{8W&?8~pr+KShU>y(&ZqCh68-<#no zmbi`haykX^TFzy@v@a#3D&ZU^6Qpr?-W!RuOl@`fCWg?yHtg2cR?|zr?#YX-AD?+&^yiKDZ%DJw z&IXijEA|wneXuJPDJjwSq5X*-yyKr3tVbmPq}quDas>+}JoBB&PqFse-UYtLMalGx zaT2rPY@ikDzC8590DOB9$*quH+xV4MJobOzKne^b?v7CBkmj!i4J7dOlS#S+&`FB0 zYAcbf(x=06g)xO`7~xBJ)4)zk(f3W`yF?E42cE{P1^2cDo-VX356CTe4&K8(+vzNP zeR%G48~c3X)jzeury$7ujQ?Nm{T(MTU|Q+=7ub1)DPFbpB?~P`OiGZxyy@C2+q$Sv zCUZy^rsFN-U*0u87@zU)eknoKVk8=kDOs@|GcUy$0uQ#G`^iCB ze&NP&VSfwUr*yoZr3 zRd-mXD7IOTwGw?Ym`vWaEa8@1YM!Z6@WtwpzL04trE0mJJGDUm8xpHpSv<S@ zYWdZCOX23|e9Cjp&PFngiyS6o@>h@7@{^UV0XMN^ry-+qH~VK>k;vbGY>1V*K+fyu z=7|80FnDcxkaX!LMYj9_S$Y{?l7<3I;(iVV4Oj) z1ME)d!$RF@qoN5~F|IuhMcdN_|DjW#9KZYKZW0TA2u+-2_-+-INx>zG89LhRN;Q??E zzcSG(zBp!&R?~=PdH- zn87FEv#Y~U0JiO<8o$DzIZOyg>;cIoU~L~M2Nq?t9FRe*9L?C_Lot68pP(0o+kY#W*?KyBjhYs)D)}%#H$CJU>DQ196UI8 zD{W17jJ8}1dV^fz(pUr(-afjI1AQ+<48WMt&$Zm|zLtjixY9Po0YhM)#zX+3X_XWi z7B0J9%+zF5SCnoWw=59=Y*&-r;A!4?-AZkr`pCSmu5}IR8qTC4Cf>+nh^L1FT21Wp z1?|-(pw6N&Ubd#S$fsGd*UNhsnQ|^I?WxE52l6j?J6S|SC^`Lt@PxlG*cd*XuNvr~ zc)#+KE%2%$>$Yw|z_QdrX15bkP7mh@RWl`qtMFkToI>Igl z{-=&0w_|Y5c4%UiVtn3r3kPCvl)AUF*e6Hql}D=Cr~GW72Dl=8CgmsLDSs(N0ZJ{L zI28iDS8U4UwBTP#IU3sOf}r;*V5R6i0i;h>-c-ZkfPEB)CaWtM!s8xdMaWJah@nya z@i-t;C-{?o5EOuNPN)z~`EdDAfJnmlZTd6_!VcrK{q zdF|B)2o3xrZMj|ek7@I7_B}6(kA~^<*rt>0!fw#ir}Y}J)x^Drd%L^7pJmo<8}d-Y-%0`7JD`&2dCK0=qiQ$?d`nC%;3!7+O}qZ6@m}G2 zVtH3pe)64)zJk4K`4cJZ%={E}0)-<9yf_guI3o*UT28#3)QPXCDnwNjFM$?D zCJr0EE6^Gyzk)5A{z7Ao;q5iOF2?o<3(o825CX@EF!%pr^#1>;pS-n1&_}rK&&$0j1uU*LP`g zfaDthD<#5= zp!HW2lw1@8Z3_eF=2NHCPtzM(4!2wWhTgMuztnmQrallMw`#uP=i=xY()wZ5Ia9RA z=~T$_t)r};yC+3x<&Y!&MXP|?6Rs~WW|quERP)W%R0 zAI3!wbkPCJc&&NsnbT~0N}jiBA+5Cn^p@Fl#=A?0zeu17_!#T&jV7%jnRrx8Lqr2y zIoup%Lsj@t8fBGl@zgtjN8?WPTlPBlUA)#i!sl<2ZcWCCv*mD~|E&dznUg_DqP zBpO?Bpxx}gh9slHsir;=qjCu@LI`2o;Lp20JLkREFST$LsdUmz&8=P-oAcB42x_j@ zh#(-5u@M12^RaVZt=(R3hOzo>&OsL%EpN z@3Fm=PqCQzGhmeE=Yrd4^v{?ib$TI%|3U;k=vi^~#5DISO^VQO z{A;Q~I{uZ>f&SX1oJ=yxF)2wsPd{n>&^L1zbUYy*R$19;EWdNti&!|UmzulmJZ;|n z{&IxtDlO~wdll#e{d<*#O3=Myv{jJe6KU>lKjJE4!YbLebJjaXsj@xFu!QOxTu)Dq zW&V!V{5uU|xCY;2aRAoT+@v3VHe{mBYX)LfEr&^LO`tWTOhFXyUj^ye#*;zCv*g=# z>k8?*MtGY(e8MZelr5@TH!JXsSjGb-^^rM9S(P;YttU~&Xv%=^v^gOdr-xJ3 zmt!xHeD6+Jlot32c;!*1|Es?fF>FQv8~qLRsM!d{gXfqgq=`8wIY_Obf{#2~h?Dez zHh}pRXUpU6^X?A&SObW%V;p5dSbGVXzTym}WKnnn3Q=648-}>qy0cAr|LzNa&o_hWxUoBwrfc1$6AjUnU}{$G zph4`TZQp%t*wc}M-eSuxlR#R)b?M9?5H6~To(5VM;YP;J`%75Rrpm+!h%opWL0oBp zkDu}>RijXt2BC+?M9Lqx(T_pp^zI!529yme&_SlkaEfQ{HVc8k_5==m?(WtC47(!_>^d)@B3eWYh zcdh|jzgpaU!2%|D`;ViISIt4R=E=XQCv5K*2U%6bRlG>_I~9&-96a{`lO1T=3nUQb zNsK5bYSS3zJ#suz#%%ft5mHP<)9N-xX-vHFPm0OP z?4MlVyW97tbEk(&m&@)Mb=U+b>#v-r#efE+T!hm!FHYS6+bp{9LV)h=%~s3d#YEH1 zix#Z&1e+3$74_Mf_}QPre?!l8X9I7qeg4TH4b8uW8Mr_FdohSSs#psR_Q zv1hL6E^LxUIU>bYfb9}{NO8Nm=i=gQIeF96mn?jH82E1Fw?NQnF z)N9r&%=}Ut`1LpjSrg%_ja z_J)lDiN7&mjw@(}HURd*Nw8R$3 z;jFPZCZ^+HDs^mW4B&(%KRrE7?6S~IED%Z#q4#xZk_M7V#Q_P32osF?zB;gy8~=(x z*$%;42xe>xe-hv|1sjJP{B1~2C_T+-R8js%*Thipiqpvi{0hpqBV3%sS2mE)=LA@I zi+;I;Ln5T1#EMWx)%;W}lmlR#Y@+va4))j?UN;00IAdh4S2pC;MAg+?RQU@_lK z47VM@iZA<2Maz;1k6XnPwLRVZXx@43KztE~SV+;D3v zK%#>zc{@=tLd1%AdLHU#U6jgUJj4joZ?%z`6mC5jKJ7^Vp;Y`A*|>4&q6XmyFL+UV z?`D2BU9AfHPi0J0a%-T~A0)5OO58!4x$Ba_37EdeRMe8Ha}IeH1=HP@+3y#S{Z$b%6ZC5tR}<+i7VMoH4yrwbdC*Fw|N9n)JxxyG|$O{Rv((pLa{!u*3f|wodf7E>Jcr(Ah+#sl1szM5x?cl!Rgg#VBn}u;d?~=uaZ`lHcH&t;bQ);Iowy#93r}BV=pgT zpM%VEw)s;_aXH^BA_TaGr8CJ*tOm;5GF#IzO87eS z=k@o*RgqT1!2wrS1clN;$NaqINv_K_qBo%2$wBd7MTx_#^=xono+%_eYaCg-pt& z+{i^OXy-$qfEZyWVaCIPFsaKAd9{zzY7dx`!-cUGHI%dTolOzA;(e5Wn@VL{<)OD_(^7aBJ*j@%+AOB?LMg(Jj zjgOz8JlGVzGJDSOc9=BA|L|KG01sEW-mtvCov*W`Pcd~`^jTZ_-O8s+CKXl=&ATXR zV~wYMMiX9niFV@8WkE9Y`Ps?giF?2jt(eyi_;PJsHgCUN@EpA(eZhIP6Xiww1XP%iwMW^WI42u( z8C4)bzNm=zsVxz_>*ETj8GNEX6{Cdwar+J$f4H9ISwUW<Yat7|A--e|^3n@~bL%*Bk0>a}+N>^c=XfB@dSxrJ{VPZq ztp+Ox@lAcuSI_JIDdp_*MMou>jPeLHCOD<>7TzU*8YaPT^n^8k|{5GPU0)fNU-kc7S<0J!dVC_AoNZ>o?P3X02l?U<3)R3GOjS4z1=_#0AU z;A7sJn;pZb>T1qDZWlSfm7ar(U68P(%7ZoTdJXo^y?H)0&czu`r1S#|r^zi3Sz}`* zCTa}=*bq=a+z!O!1e#X(0kgRI- z_`D+3d<|akKXhmOoHv;8ay2eHpbQExaIn3rz!+^9gT;qK?~);Sy)6jWtRU4G?OZ=l zceHo{BNnrPMd~+J8Xern$)*AeJfjU1*Z)6H0S9qfT8bV>kO%TdAg+RtueupsM9K2& z4&mS!%{Kk2tZ`<%TpGJ60=93}zFgZ_VcC^+;3W!ws_PK|V(1xM;GVOMA`1rU1>nvo^ zc;o>}N>fhtjkP%mLDzj;>!gEO?E#@{L_J@*WE`M5X8NU6e(3#NlFKuB?=~_!eB~nx zTf-i%*G#DpOCn9cW1CMFmWB`>X`F0Vxv!scL5G?C)8sBY(BDlze|nSlR`Kv4 z?cZ%*q5@c)1J)_776Q-PC^GAu6Z1j2;D>1=g99DaINGFQ=Xa-H@rwC7Dp13Sdt5p4 zXD;n;qcha41tCk17MnSq5^QhOpC<6Ul-1-tw$(6_qld7XFA&Ik&1c5nv7Y0Fq(K&e4F|}@-9&PYHQ?|%l!0gy;xmkU3K-qgJg5sIOeckFzs%nq4@^%@84Xs z1nvdI++O(y9t^cpRKIhQ%mP!J;a=5vR)5H$rX|Jozuowc>+u$?Uhi7Dy9W5W|0k2= z1%Kb&r3g40IkS={YPT|SUBo^?Z-VF5-Ej~du~c{4T;B!4qW$Nu)}$7^yDb34V|k&M z^D;rPz*nq%Q+3mI(IrKVq*PYDeA)oK;lsK0F5&*=*4>z=urtt5YX2FooiAxbjKb*Lny1c9Yjc=@uj`I6E*82meT{M zAFsGN^v)kbslBf6@UxGYXER zeOh7f2ZQvQw$RPJ=PZDYtJ z6KR}Vi?t6x6-0=FjtpTA*b8vb_%NfnkZnOJ6|#w1nKnl5F30ImaF`}v9(EUK=jmck zG#3MeW6HH`beqKDNF@^=^Ftx!uM_xRaecijh@hMz{YY2hFb=%?$?nXctv@r4d|*e? z>e$JLmZ+L?`cO`o&Ex_iEu8(=FNTj_y!9XZ{o8#eY<^eEA~{Amom$ZB8XnHgpC|aE?VK~YoUo?BwAj(E(w>-h8_Bv$^ ziaQH?Z}+a{_bxL}6((dnhG(BtN-)iFg$SO9+Sx?e$T5&X2~@3y^GR_MsPwsWYVHYd zB~c>j#x?DyOQt`T0uWp`o2Wgj7d68m+&EqWWbBV%(onL4|t1XaV;jthYE`leHi)Wg{DroeMR>7=o=#7|}<{P8{ZDp?s*s)sinoM<6)E) zolm{le?%z-g6dl1sr|ve3#$3d-79%;3(SCaocDoiCc+~ywZ`xd2_Dfa~@d${X z6Ot@i^wRi-39SUjp!TS*0skPsEa2+B_N$6OsLqcP*ZaNj=h~bF zDf5`^`GASGV8XJ6DxQ_q$UsG==pUKl)e7Cs>pk(DN(Ty3%e1MPEHRhY>)gxxtV(ouJ$aHc&5Xjj#L7wsIua&k%? zUkZiytoBEPK?_w7WjvBJ>7s(M_~%NVg9@jOdn^k@jDbf*fj;|7sK3)PKmH84i#iH* z6q^zq<`50nK(xO+AIms~Sxn$6P5*qma5Vxh58kv3%d3p2R{?JrW#aW{(9_!#8bt+J z^YfLLPn*x9-};T}-uw}!S924!kxrLB&ihN5_k;~ZWIt(k^OI*)^6|RUIvtw-HDI=v zmm2lv%l9*<|9b(1`bK2fGU(LehsCR+bi`F>vpndMH9~_LqExyyes|gR%c#u(>>Id5 z5ymM9S`zZX5#)Fb znv{5bc+$?-6pDF_28e>sv&+Fnr~vR`OxKI#h+Gf=*}T`WPwkUgUo^8@|7|Hh-XtW5 z3>s~Jo|~7dwE(e#5BQ6ZmE6xvfXhCt8X~4aYI0ymVHN2QBXLAX0QA?CH+YK~YbCHw zOg)$CzkZ2gzS}U0Yt!dm|6U^6eLmppl-M7M@V99hbr1 z`RQ@Cl>d~xx4RUS*T zle-{U#i|KB`!AHj((TUkr&GI5EHVKrc`Y~heCE6+tYXfD-F!#K!Ckx^w!oEm;SX-F z$_t%DQy6W7=%~SR^WGCau7TV7=UM3^E&oY1F{`j&uQEaeirys22;YAyHHP`j`Pn!Q zPu}v8)L6;XG34Dn+`~|>1-EWVFUjwOf}QNd*ANK_lIR)x6mCY*y~kfChLObJSP?@exGS@lt$>{O zCHeFTUCGZ8@+*&Psx-bCJ?^5=^`o&-o`Ech&V}Y+WYwd%xcG}9HMgncYdAcHMYh&w zZyr^*-3enUDczo`dv9k-r`W;3=D+qA%pi$*8Ss>67KP^J?xX|aaR9GJRRk`O@Er%E zhqMvxhQR!>1~>*p4#<@E3QiCz_qGv=Ysomr40y?AfIGU}pvBm2P*93itt~&b3ZJx% z`XdcdCu~^IV5|+2O@gRghe$-HrrNC}1U&lj6$l4Y3fC=0ALk(ra=F$Z`R2sLlDw~b zSx9)FJx)*H<@#{c9>|6;qX1A~_X+7SOJj7VQ~|Tji_J0#ilvq@VbH%#rxrynnLMpF*xfcBetyp zg~DA*560E2X8}I5B2pogR0v%KKq%_ZPJsCyo9tNw+m-Pp1#|8G+BNh6g7S?>Fhj>9 zaeV@OnmAYTXK}RcTJN@sNL#Lom9D}2+=+Lo$H4Q-lvl>BF)3WSjS+V&AEj|@Zp9py z<`5S#riYoD|ojiWw^uSlESHZ?* zmKI%rQ8K5oy0t_I-hg!^{){BW@ByS$dBFu8{02YWb5wHRh0K5CA`;QU?Z0rgo#ow~{?ZJRsxX9#!FfSDBj-7;ZDubXyvtUWZ1>W(052Px_QACRhnO9H&=9{KA2eG5O}S)6;SLGu4- zI;()Fx;6@*0i;7hQly3wq=p6oDM300rBQGw5$T3eq#GoL?ifnCOG1I6Q;;qRrKIaW z-^G6ecjP&Hzp>VOq%wwmmQL8dM}urm2Tqkst0(RlsVzgSP*$09R#%|0n45FI73GGD zO+M4}xYx$0mugVpKFe74hSV^D`kV0ktr&Gi1x;1<*Dv3te#47LNR(n>A(<{lwbBfi zd4V86z^Zn(7y&9E86d^D@q#g!$&y$s1_T_2t*r&toH*JV7Kj)3ihd;JzLd7q*52MO>TOa(Ei@xMloum?u~#!9b97*vk|RdM{3O$bDqY>hM|-`#)jiFTZK}p1uh4^$uE3;d9c{_ zyUBwLVa+*s1~lHE0Utf}k%BK8YD07DMv8Mkmc0;66FPlBdK1 z?4+YU5&#R6n6GLeF*1ei=Vv!S(bf(*lYS`l2YlSh(&%&~_v4r8|0Enms-n^6S3xmP z{unl2P1?On@0fvstu#y8_4nxN_*Zmc*4^<4$#XWk ztm(({?;LW=^*2p_pVeGPak12J!)*Swz%qBJExDds12ElhnScA@?N$^y) z9xg?xB1&IUv?xL!Xu7nE$Dz^n?#dEd;2FF1-!^wm_Nd_?yrc0;`|XLN@6{L{4(sWd#bNqBe-V(Uroej`B<3_A+Tmk(%I4%7Wus2 zs95FOi~7&0aBfZLgqViQ<+twSmwX-n%5r#Fu;5lfl!}3LzeK_QEM0-ex>fx#mj$~@ zt^VO1^(AwTUTF5)VDC@&{SQKxyp9SJo@=IuYaDMB$<(yf)qQ82F5@?A1VzX$G$WbT z_%b*^Fd^Xf2rwmK9!P&%pauA*TF|I|bz)7zrJ}d1#YCvE1*JY{qK?Zv0j#Fdb-5z{ zD~2=PJm^$QZUC$v$AOs{QG{IU*J$K z*W`v~5v&Xkj9}u+ctjE+gA@O3%&v@x*#hs0C?d&3bsPhHCWft5#QGT~fiqp@k_z8gE>5+`@`S6+@LTcB1;n%O$Y9}8ZD#yDDvEh-kOyAp}KYtu1 zU;5$WB}oeQa%SFun$SM=xCqwtS2F7gud)iatx`)5vt=81Gtd4mv^2!$+8%_&WZvz} zw4a`@Ej7E^ZiwC-Z(CLSF6@#qO1kcw*04H%XWW+lw&93``a;H((U->EM331+x#kH%+u9&?S)8ryMN(xXTEZsS0v`SU*}MT zUwA#>iEjY<6Pt~UrlzJ{QXP>ja}5BuE#v;D#`j!=av6;p3+6K?O+y)np1SJ%1{2#1 ze>)uA-A}Fk5B8ZlR=oEllMhDC|N5?l$wEG)GS_*bT&n;z>*o1b1N5$+PyOq=KOj{T)%9Bvw7I?M$i z7I6=w?4AY3PJpXk{P`~U@IYdzgG3dCyd>i)Tv&6*$*WtKyF%ih#%q*MY}fwf)Q#Sg zrItTASX+ zC2_1SrlsP&rD_1b$83R>UBw5)BftUjV_C?ue{3AhOYajlp$nH?Z>AxDTdz}fGrJp#3(j%;jq+*Vf@bHc#Hd-UC9zWDZsk0!BllR zo`s=hWcxq)ODer=JRbWPnhJVTkLv3Cf$KV&`#gdWo*jJO2>3t^4tjw^EC~hH)+YIfoyd;ss6}r{Q<0VOjhd7;6RH+CY?etdb_6 zUJtMNN`$1yz%P@F&@gzwAif2@VwdN)>(>j~7Z$#6yzbgHxm4)Czf;8pXBr4W z*q8?Jm!Gq`6Yb2 z5R6vZ57#AOY%g-G(y%_X52uzQ-XXqXA;CMNI4J*FdS|QlW7i&u zZhesuVzAsn%(7EJCS^9#i&=2^_pq3o0babV{6NKV40ybul*nNUnQpA4X@$!D=u{Je z&YU8I=}aiTgQg;V2Z@}DQ-w+MutZ0LSW8`9Q`@3?k=_f@IuL~SC85q4&~CCR1k3qE zJK*y-Q=l&;e$S2onIb5{BX8i=+?6zhqIVzDaEj`oWwZvU(!*6;1w{73!N;c&@x*QX z%~Duin&f`5i@czDs7gSXl8&nh0kctxCZ}=9j=N7yMpQK~jrIP%Yx7{uYiatn+N0l_ zo14>xymHbH1f=M3h~$0HDdrJr{arrdNPA zRD(SzhY0IbBRD@=!Qpne#VC#vjVHGEvQ_-19xCbAeWc_p=)`DtoF}e)@VsOoXwUWl zczM7QYNh@)?vv4YTm`)Ho8MKeetb&^%PXyluv!~s-EJd` z;_Us-yQ(bFJ4PDb@=Kk6<`JTp0_<&vS-jS9uGyWXy}CVqxgHfV-TX9f|8q)N`I8I_ ze5(sUdiw1inDF7bJ#KOL48{;j`GWM3oHFj{7-(;(-fXTaFW1;*+IN-IGd@@xwApEM zku2M7-u5FAS^ldSd6wCHwVb0ci1*&mte!2-NBgqQ4p1;?##>mI87;<1K`0#tCz{=mEs0q6!NgqtQ5PLMMiny|0lq&#dw+ zVc&lVT+wyxX6`n(EnfC%f}cFVV9S?l(i!R<=O;0hWhTwd66L#>2km^S5rh^#l9<#M zr(bC(?%oGVRid$Aj+)2Qg9x9qzir3oWABTuR;PCyKI|GVcaJ37Xs8;!)>E z?B`?}Xta^TW~J1Jg*HcTEf(6p>MsopGA~c9T{L4lzS8SO=KX1YUrkapvAvSOB<{8| z>9gqU^1^dxMGFk-`x%sm7x-+dWdbkYb?>9Q)3vO-nt=BD`g$fUt2FhcGPJ)_qZFe@Ix29f%1-t-NKtH>#o!r^z^r<{H8{O=Dtf$hrtB z;t1SJ3@Q52NiB;_nNcD`4efo+EHcpt|3N+PL*?n9tb#>olw}y?b&J z73nnab87%IYgKFY=_PG$>NjcR@1Sq;50UAT(7@HV&_f{u2zc<0)T1PWIwAhXd%a5!x^CutDSN>g+rRmEbF8KoVY@wRAu!vpWo4N3JSj$EtK&3k z$>*}9DAQ+;ocwUODBWbT%H?J|M zsbhHI2P~n=Q|~HpI`zRwmuExzY}`idB7?aIJ6dBN4M2PsySVgI{v|$gv1EsG24eeF8G)w2dVAjLZ|AIo68N;#i^{_q&?PsKc78I*m zOeFL+oOV`7y&#BgKXB4*qNk~Az@cH`ywli!Ww|S`yY*dRlr4y5)EJ+@w($17`-r{p zcdWOdATNaU64^^id>&(dy}H5k(*JKD6Z+-LGbU+8-JudxQ9}}aP;49u&b^iHS_H1& zLl)1l#o9Of7QeN*nK~9O!bYTT%8Q20y;lj;Z}~m1*R^gA<~y$bEIEA#-+g1+e+OvC zisc>n^>mT{6&QZ56>vd$a7*j6c(E=&Z0L{zzp4hZS6Nl7O3?JmRAAt3c4Kf}Yr{vn@hn0>Gz3513kfE5(3A)PrH`3T*9C-N5B z=V*fnji1i}Gz8gg66wU*KDm4Px9RMU&*|QU)PCD*0os3ql*3ZZKgVqTojf;d{jl0Neu02s<%vQVF?9S%<@bA3rUVQC?f4FHFIu z{E0DCiPgxUn6B)8d=nmX@*@DAadz+ftP(gfP;Ubc(DJxeKkr>a1s&BvUvPHAM81zps!WbZ)>7@z@x6s0J7+OKkjT4|R=Ng-T&% z|8**t?oWl_Fo8W$VHyZwv>wtlnNEKdtJt0{(%tG|25#Jb+QkbvB2ph9zh>zb-Ulax zA>13O)w~Z}SjYKk4q;?IYA8)Lg`dMn+(JrshkHzPDXt zo>psEoj;zo*VYPm+~EyYw{B%NxV9`>62f_QY`cvvdS9yaj}g-R0X?;kEi-;TB{de4JyRsX?q z;6;c%tx8gm^`IBPP86SQXRwU}0swhYhLokbT%SM6%Ry2~z(N%yg++`PeHo%a7J@1H znv=xHSR|m5g!$5O6mthbs<^EFwlkaHH0+&I52A#r_4g2zjh4;6y+~bum9#ND9PKh( zNP>iF50O#=L$$0wpM`vL(hyP8RDE%PzU;Z+H*frKGEn13#i$bW1^LM69iWmK>pCt{ z$E7$ZW@9Tid_MBHR&iAK-bXBL<}mHU(Dpe_= z*n+gU`#(zAv)wk7nd7J+%q>Vf1+Fn6P7Va=0au&h{v8wBxx8atA{`e2xBXz=gX|Rz zQ>k)Z9v(HIUW>Er8l3-TJ!7zsL)5tYNrvXW%;{wy9@*kqr?F;+XYSb9CJ_7yX}d9i*p(o|C4{)lx-RS zxeLf)hIqL^PAtSTK{;boI9ZGkglsC%Nr+^ga5wU8HOufIuu= zW!z0=KJ}@H1V>{Rb&j`Vp3-K2)9mKVsuZ_*HePZ$p}eVo+C#fK%PY;}6>sRN2M zBBjui;Rnj#BrH{g%V>-p#`X!_S7yi2WQ`zDXq8XL2G`hJ)nVdDLIp!ghoOX7hZ zxE#jy6`r$e69$jOx7;m z1m_3C7)&UyWZckZFVD-0MvnM&#yvV>+~bUAMH5ZF7deNXLZ(iFeRFLoE`RqrZqE-b z8x~J*j>|XN7F&)-o}T=28S&eOb+pviyIZ_x+4yn<^56^6777#wDX38uWt7OoH)Ws| zgC+1DyO|tr@&N?`y@S)BU)W?2I zswxF}u7VH(3{-}w8~~4GuYL>+6hw@GGKF$cxD6g6mJt1c93h8?9#s;Dh-DN0vmi{9 z!x>+O=h`5#m@OdCd^sLE6&pM>K@I}zYYrT`Jo802`V`>V0Vl-3 z%%3;O;vuG~FeTy##=mWbQG}d)&*0@IROCzyz_8dVi1!e!nRoPC%Td6)+o-(ZpJCh^ za*ahk?((tf#Ac6mB7s1NnPWfdM5RxFd>H;r371WmteZ*o$_DXd@On|I7g$S&{p2u2 zWvLfQt^Em{VZ3I#8yjg~IjNL&+7rKRuB==cdmfT?fw7j?xh@SjxO^I+c7Eqn_-%kt z=DOpi52VEyrQayOaMFH6PHtTaD5j&>X>OUCmvM}0YRV{Y?(SOm7q70`VKdSh^g>0C z72p(a@D=ds6IpTu)pzb~vtx;JeZn6YwVB9X9VMQth)}59eUL;Ms!V4^EQpPI?D7n) z36D=5DUs|J`wQY_{4!g1dqyi-4DS2^Or%wk-0R*seN!Rn=dlTqLdp~)@htSO@5#+` z4DsUAL&q#|wC8aQ;xKO_px3PZ%;!s1zZvR_5ups9)!Tts_7pny5{|AfE}9_6#RO;h zQ}_?SKBT+rYhA$pBG27{Y1VALgE7Z0Z2ytOwWIY2pUh#PPxC?rgLtP+XZ=0#zJb+oWbAWH39lDVyzf|ZU_xbNw5_*_bW2|U>9}3)!eeT^ncsJ) zGfLK4YDNsv+k%YqM<^c~Vfrp3=u1sEpPNN%nTxp6ie~hwJ!p-)S<&i%!;A2?LYi?0 z?|1u}etCOww6z2h(#@|2lFbt+Zm;hyc0ep5)j-~G|KEj)8MCX_t&ZQ+z@0Y@C^c;v z?2^?Q!CYVO26)fcmmh3wUrac9&M-0g9xcCnq?o=RncmpeQd9(Hf^!&`t0DAD+2=q zaZLgbNtF^%iF<|lc^{1p4L@E;kE|qN)W^&0^JM^q`{Y6}Sbjh6V7vhWcjlh)w1zpCdjlVuVZhCCtS4BYZZG^Q%`nLs5DZ06PvhPn!#IV@B;#u#Dih2L5u_|#1uy|V~B`a&5q(G>Ek0zu`HTnZB!4l9j z3i*~4#U)Gx*ysVo*w=WgJ+HA!C#i&lYeEn6Ux-x)(+4%7N}dIy!$dW8;TawX2!Mis zZAgDn{!W1n?M!$=7#1s^4M_PxctpBM!eD9g_z{7LLFQ+R^=TlP-h8qMs zJWuzIU|1IGpxNuU&6_u?&&@BxK@rDsz4>07l+Whx@$sXV?dMS-sNKrB?=!`CI9j4UU@JQ+EM{;m{JWQc-Bwq7On{%2 z3a-IYkn*PQF?&H|-s?}ed8oq%*#j9ENjr6T6CgLQ#4z*?;#)n6{xJ~zLQ&WS_Fb3;#CbK5MQeRL`~8TTc8=-sJ9Evcu2nxA{MO zr!^B0?q@ekyn{y-Qkh6(FAm^>qb}2tQ$iNt>+b%pl>~bL*aBGDh_}Q$SC*oX_!xe$5!TDP`L{27bkNPinfb0^ z-tc`?T)2mfn#`aJbMcOiMc|5s*FMQ?6oMMF~f7mJ6FS`8oe550{j)bRV=Yw(t*ONz6e}9-i!sxOBwftfPM~= zt*Rm^l_2c3HKvk4A05-_4c|meA z;BY3u-TiQHX8(G6e06oscV==@zom|}^ROTfAz8uK=UIJ40>3`>xtm#R^ZAJC%D!tc zzbrTFXn67`TrlcQBnxj0X_mCpYLM7%ACdXLZ!eczZSl`1v#xK!to>j$5OSQF`sx>` z(HQCYONOYgY`TlSIX*rn!~EHIovZA)Aenc6hcjy2m3FslE`2#``6n@?_4xHsqlf?g z#a2{I)JTPSY19{BGDoz|DjI4q#T|SfqZYm$&34t&_IH{wnPbYlb>oR~!+XE}b{gOu za?t6I8M@g8$CpKyT3`=Wlw|}S;!o-^>UD%HNo=68fWA+4`sb%u(liysZ>-qZUyos> z4)Ti3pj`a%mhk6S+v4;>IQJEW*_%OahcyD|X=)CqLKuCgnujCo2pC05djKe1HVd|H zHls!uYvE%V$cJ~3A9WnutNIfvJ5+fpD~h0WVmu560}?$6BbpUh#BsEnEfAVTfR!i} zCkYI!5$kY-dGTVkAvOiX$U$P{SC(h3D3YCropUEST;W3rTMv}R%nfNtLfST3E9~oZ zH3C6JKX=McIquc)Q3_61ws=GrCOZKWgsS@M=f+wo%f#Yr)}D3^wX< zRWu4IsfIkPhHW6&Xdo<(gQWS(8_7v}$axseQnmY^xh->Vzc?DWhd6yyyZe0BQ&7Q3a0`Rs!{p$3ItS5i&MB!=1=tK&$8%D-LGEp6cAQoY3lDnET!v_Q%j`rC z%wD^7oB69Y7mAQfYEbIIw0it#Mb(9q21N>f?lc&b$XU1f%E6wLmy%nQf*PDFEIeS< zf2{g3_ca!CYAOl~O`uK4PJs-`>6*iwSCO^S$hp>Os}lo>Bw>lDd*pBuZpr;8^+W3S z6AEd+K=aA6ACewRGbNG&i2y}>$vq?NB%du>Wi){h6y+PI+q(awBSWIb^Rh}%9B(NI zQr`f844r%FA)3Ess4Nhyn^qCmdH z=jQDRYZioQh~mU@3v;WMZ^K(pTALo&z^z80Qhsze@ zjlb-UbLQ6C#Rd#EF|+iw2#t39<+K$>$@wzVOm~Vi>)PKidh@yR5qdDdatM=3*0HaI z5O@8Z7PxX?etVKdO-)V8SWnC5P=$URasp5sW30=0QMO+0yuD zE=uT()*hjt!AgH~#lHVRiFSyaUS;F?s+yVinto-3hyVHr*+cQ{OK~JB(b42X*F9P1 zjd`*6zrK_|HH1%5x)iwFz7<<&wcH}50(sB@zay@9J1)|yECUwbH+=7lDgF6&9>K}U zDeCxWd^vm3uDdMEtQwEj3=1P0@8lQFMx|1<5z-|=Bf zx$N>fgA6k?^wfPnSvgN<|J4+8pFDmY4*buP2i%}`X`qY7a1)m>lwXgn?Q#u05<&lG8H$Pvf+HRX8iq zss)7WFH0n*q}o1$tP?DHNe{N7;G|U4Q^Kl^Z()JNmf`&lSlQfRE~M{hpMzLD70|b) z@U~D4^IMWg>yg|mbUe0tZ5*g14iVJ&n$*DI*WCmv5utxRriL0gf9N`F32k*j1qpL z`KDf7_m_l90_($lt5vJzzTM_Ur$y5Jn`RWruvh+idX^k|*V}f(CScUuhbS>V{3VQ>oMv$)0zbbuqZb4i16TxSdboJYT9aN(|RfrPQ_`*4%Ep28c#qloRCoN@Wxh)@O~D(8tt5wa44%lC5ajW7aw3#hp#}y71Q$o z^$>0)|MkF*$HQTSzypz~Up-zSlM`R!$1rwQ0F?v){&7p90mV9Pj^R3m5(MinBQpFa(21?Z#Rh^(}g-gpup zF6Uikd2McooXQ3VSE{BWph1kfU|eyy3j(Ce8=&Y^ZHNFrGPzjp_{EEq)#<@gYNf-! zFK6NJlL+}oUDp44OHDVgLFh+V_ znIU5!g`zA06^C>GDFmD%_SJ^hZh(O}*RA#y7eQI=^<3d>ob7Gkf8eM`;l@nX zpA?40?;{0bOB!K^nk4XK4}Gj!4Af$-srhy57u0jdd}tbnnkC&rlpQzTxQ{6E8Z z2l=G$o*(DNQhbjA-BLLtPcls(E?tNFfjX0Rt5(?_AK6PzvZvSg2iF9Ht1kWbukY3H zH~-Ehig0pSrKVLdz5Bh$l$MdPP<Gq@fsMYVzTP|+>&G=fXg9CR29a2ft(}V_z{kjvPzGkU zJ=hAzj}Jz|p|2kyk4a1S(k&1IWZ8d~(`)C7Vexzc{LlXg zHH`8|@||Mx^SQ?8A#XQoO%f93=I!H?P=n5?NLp#Kpa?)j*=of zN&CM# z1qrjoco?NAmi9zX81r)l-26^wVGO5+VUpKYAQ6Cm_HxMVD%_Z_aru+|>EAH!dcVJl zirA_yL1)9({}v5DqY($d(cw1?D?YL?$_gizMqMzDu3sNrauLl|LcoGczWPuQCI=~2 z)h)p0&Q$$Dg~x&edWrTGx9A(MtqC6`cjXUx&5cWsg)`2-_z|iD@0!c+@pB*kwf?! zeeCjmw2e3!@gXn#Yap(gaK0jd>Glbgd%)c#u_acB4$i&jY2A|8tQM%!I z6&@AeLth1Mb=hTyxJWY}kVd`2#_~KThLI|LOr)^PNC%5=Te=jwOa+R~UV>Un#0VyU z$?G=YZrFpr_4g+R^G|)%E9XwW+lzS7OtR!7?;RTEJ1#em>)-P}9OnLb0rT8tdU!Lp zB@?sO5lw896|fOwa%RnRH9GauTt5AHRuD6k;eR#1KOm$iC?)CN?hIqBXKBg=JnQHGC-RF&!2Y##y#WAw4lbb~PAp#yaBGH`VNksxTf zqbU7M<;2=_#%EbHWfvu1$*We9kSgi43dINU)S8zp;C`U_T&vt**YWnZh*Z7fQsXo4 zwnZ}1fSj5Aa^6$b7aXXwm*z*U8S@?#QozlYREOXCkGP<@oz?pKEz}jUNTLa z?88?XH2bcLZ8v`$GcuFhiQ4?H$7$}4Km|X|Q2YA08vladkT_xHXuJ6S9#Ifap*E%^KcAskG+G8b0Hn$d2OJ~LKn zqK-0m*BW491BXZ9QpGjPD~uHg48EFigIlwF4oPZ;!`oJR#T;fESJ0*WQsDmS_U7)x z&$r1-*K7NKYn_2(w$|I4fU^uo|Fut)TGoc5Q+A1OxnBv@_)CB`$7c*(&;Dx;^Ppwb z%IOD--EKp?V5GSNvD_bA;2j*%ov->%+Exezczr~T^LFwW%=oRMIwf)aMe)raa_m|70o9RMd9`$w5p4ydds z*VBaV;L8y??E9`7!bR$ERe}2O5els3|MdJuc{vHd5oTQ|wuRA_Y=KYiuF_!VVObQ(nGp=;vV2 zv;d#?!t2Bcxk7N%v3^jf^!eg2UqFY$G^FATT1YHLQ%iQezt=M^S{qMmXsD|rNjonO z>EczuG_{PU-XEL}_e%1fX8*{%>J=Pi;03i?movHObQ^S`Zet7@fXl6Fo2XF z%Hs$ko}w!KoLk7Dlkno#PR~7$MlkGK3;Tz7F!*zbTeHd|5J?YvC71zP5^A7zlhbj* zZLwmv@@F1G!a06XiQKy4Edn^=rJ)qfmfu`Mq2SLlDEDis9~yq5w5_|b5gz{%Hu@V_ zZ^E-cs6If(8fGTHwWW574tJ3mR0#blN5P#!CwsYamIKbb9w4FMLO4DWyo5**%J$ZV z)H}L*;llA%R^wLFPr`G{E}?@u2!tvX^4>k|nJy`so>IGU9e>SI-ofvif6ZUL688t) zg8uk=`NXpMgs@nF?hgCB6}#e9S=MK)?84Aa)h>0o9ylI?)8=XdRuqoc+hUG$wN98Q zIQ*n)#Ftp4r%uw+^2Y4jEbRbax*Q3J6~pIBV9fi!7C?c8b@<}Tn_PJ)40O)M+HJ|b z0D^UUSTwLc#B(}KqE(;s$dS+v)8P>}(t|2+F2}l^pb>zu3@^OuNhJdVQZ3cfz^pG-7z7;`?q3x$t=utS7tPwAhj z);q*o{lm#N3Ue|1gnA9{%nwZ|vw3lkGHAyL(9b~WP#Ab^DLKdUWht|{g>>t@$H_*m zJr=e~d9&wHq&I$iX4Y~wzTg85-oR;M?705(DV(-6UP~*~Flv_M6Lj)fhA@ z%gUrrC#8Y9R4XZs_|K*BXcjB?b_Pkp0~-Sw;+gYiiE+4q3>($ z!`pMq8E`C8UvqLJw%|GuC6j#2E& zN>OKz0GmP9bkx&HM$yH8tI2=on(POs4FX0x_PbzBuazenA*a09G5}pc{!(qd%g=s0?h9rTEv= ze}xf=Mg>o%#w$+c$FcxbB8Ev_PdGKEwI^n=m^DYi;Z1-t{N4nRf2xUdOWgl>gj+ZN zPgj#CoGS|MTp&@!Y^3GrLvS9$EkB_<}aX~|k5DkdP=(|Fq6 zJyag=8$T>GyCszK_PJi3Q*!sgIB6B6^+;6Fi8d-T7)56d!apf=`Rd%ZDLC0bThZQI zfPh9gz6lM|@|kY>E4DL0pC^7Jn`l{t-{<7?&%C+opGV|Xk~ZVRuLivw?*p!@HJAx0 zCl&*i;Hpz9WG9YXwxDt-tR|OB9$#M%_F(1*v|Az^cWTmkrebG68%u>sw{^ravKF7Y z4?uRDg}A1;+0A9DmV4Ux(+C44 zvd*2~>3X(#IYqr;BQw#;d3ae+Cg-fWjiRC0KwZ$7AJs> zP49&lC5cUtWOI(gOs2;w6m+p|+jL^>*m#~BfmMMmuwHw{w_KVxX7j6IYOlp(QA{@A zvSrCA82^YkDik*ewDfEDKl6?NLNOAmMr$Fjq&P>TQwb=8lB!d5Cm#*Se1IHHkKFFv z1Dl&Ple16mEerHoQDiqii%3COydX0tm6|r;Cy?e{alH^ z*?XTIc;sj2_4@V7v{>uwiywNhd447)2C2C#A)&M9Oy{LECIL5#Y7N*aQc-Nr$Bmcn z)SiPV+}5}K7|A_A1r2>|#-%a=4SbT#qM%0^okr&tY&F0Nunr3CH`yRWG~nz|me+L1 zF9g6^I0{jvK!~wS6o=%3tEDhFIQacIhH-wIbn#m;y;B+qN>#1sd%@8cE4LE)%t-gq zk+Yw>9q3f*IQ^ToRPQjKT4z~qpf;zK_*UZVA6uK*(wisivtRV4cKHKt=K3|{NSDK! z9QpX3JiYGu_UqTLtq!Rf+XmV5LJw2dl^`F!Y8}Jd2?ui&xEk>Pw}`Pea-dDjW0I}` z!$vo2Qgj)Dj%5lYKi{tz@FC+;EwIsLjM{0=?8Z)Ocz3aPgs)?n_l zvtH8h=gJXG1UZfpGlzg!vAblc{Z^OT^FSq?TB4a(QWHA6!MB|0bD$P* zzFE*6!q1>J+%)?(w2R&@XE+f{oRL4$4wDx+bY?l~pbi^9f3+SPJvUB=&=Fv?qY#NuWA5Ztrtd zN<8%73Nktj3;+EUOHPb}vsMtMx0@i017i~c9)nVqW7J4zXs~8(7fVngLob!- zFJ?``LDf%n+RO?f_wqzmaTvHjEt){hKx@g^y{&YXv129J3uft%Om+`aBe zx^uM%J8;e#t)BMt(E5=U_Y>Yr5clNZR=kolq+TZqdtHGZC8ZbApU`h8UwIBFVgY@& zfGZn7ML8g$se%;>CIw7o3)Rfrtna%2opo9e*@|$X*H@eiVq=GRWk#Gq+d9J{xKj-| z^j4uPu{aM%Bw;+^@AQ+n9|tWe4E4-GEltB+%ANE?EOL3(?8uOUc(F8=EI6+K?U)x% z- zH7++55Qvj6C``$>>7{+-dGs-%NR#i8)(;oyQcauUZ^YEg5HebAYn!k4$Y%+OW2xy$ zv*jT0VtE`=0fjQa>fzu~E56!RR>z@8Wvkmr=2O3yWu`3^^@r}I3k;8d`?v{(mmYWL zLExgxf7h7oqoT5ONCg%%D^=JyZY+Dcr38H$1T+gZ6Cz(pmFRxLwW#r^NS&2*?jsP~^YT>0Fssl7CHn^HS- zz!7K&?SB4ke(^4v4Fp4b4dKhBX%49~BG>UddBB|-2TEG0XL3bCr*BAD?Zcw=ZzBap zdg6036>!@ziK5HwU9JH&8>nxS^uQ;DZf#Ua0;wtsWZj8g?oYBpWKftm`M5+S`rV|H zF#V8*saw~gU%+Mb3Q{v9SByX6h-R~nAE2X)p5 zBMpqVc`+GT8=hOcGVN}=Ns>=ZqX+C7Z3=T-H;T(H15@HRG!=y%qXu+UM5KPg0seUp zug#il9-cv-tE}^#qk)0bevSYB4GjJ(lw13=>Bu!6&o%R>*9!r+TRh%N=-pJf3YuOC z4k<37v_|Okfh&3hE>3y^>hXTk)YJ@K|;{pS&P+U63Xoti`HX=p*GndI5%+C3fKi zz)Oh=5m+xPpa3lAQdTEr7qYjyEVke?6D0tjnBvR)^ry;Ff3%(v!X3uqbg$lO5PAai zM#C+b2GwvqAQfk%gdGqd1!5Hyq(IL(2_4qgNl|zVOD3f$sKGb^e1+o$*#Xp)XY?jJ zkQ`}+o`=Kh{4(hOoM_@~Q}v5Z+lv_kL);|Co$`SpKrt|Qp^8erXeQc6VW;l)+8OPq)CwrXA9_5ss zls!(NY&kNHy%L8Kva%AH$3955>&|U9ac$Fx~QYxJ|8i zzNhhOkO>O-{4h8^J|5l0p#QjY>EmKtIR^8u#*=727^~jcI~J`)pYX*g z1L?0p8Ln#Z_&UmhGGmDj&X@u-35D7+3Qf-kC{8~N0%^HU4~~O5*`|s2vTVlW0UK&Q zGKeNMKzN4#8!FCP6`!=_v9XA5j6FQ^3{^``tYxSCO1 z_u?goL3Lb-;zQI3+a0W^C}6Ox1RH%l7RxS%DRxKS%4u7~wBFr3A5mEd22D}L_Q{Yk zbQDc``nGNRc`4=f#>>H~;KSXjh>MBg_Jl8v3m1e`%KWn~pEk7|Mf1u9Df!7h%R-#& zNB-5^SI=aB`!@3i9R%dJcm(`BCmeNxgQrrFE!pcG>OCFJX;~a!@I6J^Jws$aCnJwL6aIJ(>WQ;v@Wv zDELf(k?tsxh9Z?gG>|2p%P78^Z@3LhxYdNn!|s+`_On6 zNBFz~>Rtg0Aq|HYMDMvfEV^Sfnj-m74rvD85Xs;xdAq&i3t9R3?Hlu?V0YH|0ft8< zpyfc={~ZgsQMwPN_qAVbkxALz`uTU~^TJlX&0i%VEjX~?jbH2RxwF*(Uy80VDL-B= z8o=R#KkbRcHEWz=<8S`Z>nzmP5C6;Kv#!32Z+18^lnma92g|PO0Pug;KGz;`iA_xo zA=cni?BKqobKX97?Q#Qf?O(0DFmUoFHQmawhVLe}hg4CXerZi!B1Y^^n5-x`9$KpJ zzB3uhwZ3;x)izGik|R+MbAm*c`=rQbOg!@{18CEW0!+9qZbz=1oOevuIvCe>+zs&T z0sB8gKxDhAL(QoSunF=l2XR zZUmR=eTud?Da7gBfUuM^VBBPOt(P(7qBrFHpnwb!k)^Eq>T_Pnlf07mUn9)o;{537 zG}GT`-G(YX6*39^R3!3GF<181%dAg0N|X?W^dn&?bW-b<^HZ|L9J!)T_v18WYomhT zexpG|1j&E4cwd~*)xWQwmiwUG-BD>*q)T6T7<_#KnA`xR+Ob$tDVGI&frK#B98q5* zXw2z~$8U>oJQ65Z>;Ny%6oU|>-1he(adX!kvt6e}Xl38V#!>?}J>I=hy_2*1;o*F< zF#W6oJDt64{L99Y;I(SzM^A${Ot>`TL9vT{Q2-p|I^)>TB z=}dA!32pI=9g*K*WK4~w5WcBIW6h##A)z1p#(&Am5}61zLd!V*Xo(0}$4M7~QL3Rj z9PUX$9y1`q3Ltz?){A-ni<)JD zKOQ<9=BE6(rEz%y-qkhs>!*@Tzl1!sF#w*YsRyf_4V!v~t)wt(_zrkYUGyf~`Ock? z1g?N&kMs40aANMOtycOCxNfsrY8_;RypVwdVR-+U{qRo!q;jl|FMK{)j;~TR1N&;gAG4Z-~0#-^`>nr!K zwc?~^W|p_>j0=`N15soQWEC=%&~nh|&y|I7WX7j*(rG4<6}*JQt4J~6c%QHwr5ycI zBl6|1`5^fyZFl=A{i#-lpFbVL7Mg{Gg^A6Spp$j(Lx1jT|H?69SNI`n@yN}qtX8eZ5 zFV#twll3|KmlrIeq@A?*FSMO|*zw`{hg+@vr|QG@e)zzxt&1>?{GBHZ0jfJ)`|Xz) zHTuod#HsM3^=mDQCsV4FUqHKcIN2-Y@AjsCuHT@zbnWDKt>V#pO-}?x5hT9e;ZCg% zTS?f+LDcR}`*}Xte@O~L%msOaz&JO!6^&cq<>FF#vY02F7wF>sfrLShmNL?6;GXtv zXB`_BU9qG$vDdZA*x#&l^kEsah4NPZF1~6dKl>pFnjmMy_LYW<#VFU}5HZywhKrT0 z_L_Y#HGSX@Q%|`=q4{(&R(8Z}qR{7l3Qjqjlwl3RAOJK{0ex?@0k-UW58U}F2oId% zWpRa2>U7|d7x0D()czhYASITm+%Y}uzr_GHW!M0Wa`C=1Dy^hck4u1hiu|>np!EsZ zOy5obZh`yB!G7 z)uPgMURzDYa#D_wE_&%0RFyS7c>V_WD2wBovw5seZ-Mrf9h|NoCqA}QBr=)f@Bi@W zUZwFclW*iYdbe%V0Lj`$UBKE8(rE(LoFbf;$|I9siB;P9XDOz9XCTsP>~0hGtg^^y za>;=d0}QOO3!KTaJlNdRsIbu-0F>!|rDslw4V`8anv)dWrC==40AA*m#FlFoAqImW zeFsxcjqdDJ(=~7Tt>D-ke*V%>Qt=zUCDZRF>uXF5>Ebve265*b1B)m^Qcos}dF(jq zjhH0x0Kud!{_`VE$3r?zmpmAsbTRE z)0}W04Qk@Ld|k>!o!$BCbxQ0MwJfA4`1HNwf$ty5`1k=4H$u6ncfkcQG^?dBkb1>Y`8?|>Ulg|v@PNgQhNl3flTfBa z>7m8SPuV{>Y+oC+yJ~5w?kE){owm#@!k3jVeyuomkZOi zUNb+^gipG%vk7HTQ8eF?QdOBQFXHnf@T4@OcE71eV2>he8D z{e<6myh}JJ?{0lgNwp+&gbi_@7oE(CxWYrQy9>&B?zDh`ka~Gn#ro2`PRvfX$3n!A z647p_GQPBw&AV-@I%M;>FDzj0Wp%a0!qFJD@XdFmv0fn!Jj#J1apa5v8-@|&J#&YI z_pg$%B`;c42eK zyY~Ah3ihO(&6g|L^crW|D=GT-JlqnT&&Nsw!oSt9p(~MqqH-My{D4p%UJRUE)wzh6p+X$T3rRmSU8d3lQ5W2366)xSAl3OXJ5Zu4s)!2RMEQeRps?A z#26C!=!zT%Kn1QZy*A-a0r+A$BXN2kotdJv$}ws zJr@D!nEzE@i`&szAZ26^fW80K*`YbD0Pm|UOM#)uNG%fl_@hJwmb(arY(3_Few-5s zeUXn=#>K{@1s`APlCl6TA7pE3Uu5M!fmU;Z%xM@;HquxX$Y)u$i{nT47m5!ga^xr>&xkJlaJ_8%6X-* zxW!Nb@a$O1{+iJ9D#vEG@zRHmf$j;6xcOu8eK3BY+1zB+CFmwO?58~w+xRJgpItA9 zDq8N%9cD_n_SYJ51Z455J54Y=S~fSv%?*Wql&}ga2hJ$h-#Le|lEC)=j=EU$oEt?2 z-4HZ`C7jgoEaxq7j~d;w1}QKk&}x>6iN_(GQE?<_3ZGJxten9IR4Jljn!D@%^`P}p zFjpgB8gMHac8f|%dk|^%1z2W>xV*^cFBD8dnE81T?5@crby9m$C7LC3vcf8<;a1~- z!)~`i&g13Sif-3%?+duXrM2~P#O&koA9Wu2Kf-3f4sO58!|Nm#CB`%oj4_5#_ikre z$RwW|dt3~TgrOeL35rHffVFDEne-jBuy zp5iLb+^(^v5l6-WVBl)K_GZLnZQlOs-FD|t+BE**ogK-`wda)A&vx3w=~l9sGnN(o zq^(#97?{%cnfywdeaZaxeLUP$$%DuJ@-cB!!nXeG_?<@NGzSdMj&Hwc%?~-K%?~>_ zl%&{B%?$-R8!&tm0rICbdzq4;ocCj->kOE-ODQOPwaTO9q%H5o z>6VaX#2A1aOQHzy?FFF-B4q_*jxNV46CMBsE?3YofI*^(oq>xvOUMASx28Spv}dYn z;o~Pc+dIF&0r3hY9rsa3q(=AAcl!3d{C7Dur77qaRkH_!-VIz{TXC#6<}dy!{A>*I zUwE?DI~u#WYVywScNVkAS>GH8MXvV7CnqE%NZPY$g&ytLkB^VjYsfRYD9YOJot~E# zhz~@0ZMELsY>C&A_zJ-8bTio7F}VbOud@66bUOL+KtT9|5xoiR^$^b)E}zif_z!&< zmyEB7{+)3B#`mV(#fx{kvrm)(R9K>zzXd^Y zYU|({Ta-ZLh12Cq!PFnQItbrafCWEjB&~+``=h?37XEWe{pq0Gl->T>03_6dzHK+R zFB>GxwX+-ie-=PM2;BV0VI_9C(LOgaM!vvwUGmFi*?eO|^OZ?^VfJGF12{_DhT@Hk z-*>l_Bk5paQZ(g;0E;(Wk4T>msk<`HoSzhcMC&ECJ-=-K%o;l`6P2!ljK;QdAyvQVb3{~^wwgkn(d{>F)4h1g##c5Od+ zx!K*u+H!DAR&W|a3kVjW=J8)NYnV)Bl64bOJ~L<;+~?9{y5;Vc8$L zpp3V;DGPF9ISVBS570kfB$95&-Jj)l|3R|oLZfL$B7*%mxeXpnmfs)3yFdC5B63rP zL_JJ|lzyV{o-pf_Qnx5<)+3ucf~&mP>}<8C1grfw`|obr*UR3a`|{IN^~v6v`EA{? z@5!8&%)(4{AG2&ZUC^|6THlVa;l?egHXl0h=E1pah%NYgSPT3HYh9 z0D|uOojne=3$+!(PX0XlN$-6$2Om-er{J(;jfDtE3^|{acT)ao(aU|@dUqLMO1{kzB>CVvL z`Z87D1BzqeCs*^=hc`O^$>;E002`C}ZGX1%o=w;0`7JR4rrcc}k-I*j1Ah)Yr)zwF z_RSxE9bU|&iO18fLPolEyQWLBmLB4>tr=c};PGVwz9kLC24;$x2pjD|1vhy#9QlC?(5FlRT7S@=Z?`!bo(Y2-zf`qn-%$8WQ) z-5-fe4^VG(-GUFF4N5pVtVupnzd4W*u?6Ry37u~m(`j$tzUvsFIhgL+JoUjoWKQyo zDd}{y-WK_6dd*K?Pw(sFfU1VaQxT!>=B_vW)e0uQc2VS3ZQL+un3?SW z+KCgPNk&;s^mYjk)>}^0*zkeyD*iXUE-`A>t?m;zTkn%z4BPeDxtZ#pu~T-3bojxx zRo3>PZ+;&F$8D?Rzo}^KZ-i{N2AuSEx?xb(dP|s6SL^zNC|@AS4>h^rPZ4>`#~(Md zQQs5(8)GPWOz3fl(cLAd;||2*N$4k0rKK&qSDhscmvkn*l{>8R1D_DTe*LPZ!Lt(7 zw%b>uv6fs$QZ`1SiG8SRzUL*@Ju-4j9Y5^gck!Q{Wji0<`5i<1C9HWTd+V&Hm0mq+ z8N`@8ME;PeWikeaRv+h-!{K~@2uxo>{BQ^)KXwtz+^&G{9vWLs3%f5P3%B7y$KQ$f zOm(p{gZBcOMICsj>*z@%5EV2Q3A=|OF&val6nn!h0T|N_(#Bi8=zf$1e8ep!@dI+8 zu3J#LO2H|Y!iE6HMZ~LkJU&+2m;$)XL;g{jn}>%-?Q+l1U{hIHO-`<^K|$Cg>MD?4 z9wRGGS|F0EI9AvV@D&L{S%u}g3v|nHump${T-;(}_7L&_Qm17DsOt9W6{irDKCvR1 zK}h>|3jnvCDh!zp4{Ppv z&NeO;`3*zKZDJZLomql|6SE#{$QtJw#uZ7yx9p2kqS|>H!%g;1oe*-)#Hxtxs>v$HKj%;LhyioQ1=z&*pZ5Puww}es?=0Z*J!e*Rnb$~%h(@3fE`N(r*Y@i_c$OS9P>SEWi4_iEW% zf4Cv0B*PGi#Jw!ofnO zMlp((L%6~MID1Dn%>j2l-45bhZCV5ZS{94N21h*;FK3xKR(d4nX z$ED)Hi?v3P?ay0_9*)g|?L^7ykB`R!W3%dk zGCYJz-W}E7_WE8)nc0syUs3d@BW*~{;iwCdV?+WWaM&J`$v>W#IQyYLP9G$fXVYo`b zlRmc7lc~nAJiGe7F99r|#CtY9yZgZ|Xg+JuI{n${_$xY|&jBvISvmm11%a_L5;YPR zo-TmH6Q$rsrFuM{RlC>T^J?pGQ!*%BEdaqYac>nfzBz$zGlEVQ^6}{dyBsTD2{i5! z|5ys&eH;FV2(p>#JViwXc>wBYX16YD8i^#*fyWNvt{?+J~jPVpprh2a20{2X<%W?$*tCE%2i|?2s(FWd!^e8FxaZ)Wp5SVB)t@ zIowYfK&Y0Jb#fUB=4&u7zv5}6p0U;?&fl0mn(BV5C#cG#)TprogYyr zh64EM{GY_>atm%rQQ-!RNLmV$q@(VTze8D(Gq{kMv6f+VfRuTBQ5w+V$KQS0u&Ma; z$SgwURbT;{qY}czUL<7vdW0XZS%i9-57$oA8Ki}&?!aL#%q;Je(3vb!+T|o?|0MID zOj3}MV63IZqgc{Mf&;vftr}}$fALX!Y}brR`gS&KSwxo!UyPy# zL!*fhjUJG}3w}vhjdL_Df%4M-a5!vf7V@0NUsB0P!B8Du{H11!6?Fj`VBpeEglOWZ z(HxziKU*u=vixb>B;t>cBS;3f)aO+V++NggKj9s3_J41`J`M|0o+=qVTHy_I8jST= z-HipYMAOrmuG2_jm3M<}Mou`C4cSZ2y{W*NXjG!H=5zd;{^3KE=gBKneeh3?;^N{o z+nSL-=PS>9UUuG+JOm@%W=Q0SKaz{iC5EoaG_-hJJkG_xP>!2!HTdyRT5yT@z$d?* zEIHxupN3mr!bctT(O`T1USz~&+a_V}*)_2J#ZWS6_o}4Xx2wFzlceAddHx zHFTlnY+vwPo=tT)#$>eYtvd!AXE_fuXteTf1ruK#sPCE8c%H7Ut!3Jh@b!LsPzMlJB#fLYT;784kIxd7<#el9h+Eef?7QcJEY|s;UPAy~Q5Fnf z!~^tzq6;lKy1zq7*jEV06pMYoc~dqkao1EWtYq%ygI~`{DGxl-T(Kvj$lNSLz^Wi1 z2@IGaKH%oGLfOQdS>A(|{M0Gaax=!fh9G>-*^8SdphdV?Q~CT>w~ZflxjVZ> z>jKT2_twB1uTrISFm|kr+LX_&np!hwQdM{`;q!l=$2)wOzfYAx^2}4+Wi?$R)@>X` zAY7n$!YqiGa}9%D33Bk)PJde-`w``qwJL7K8jr&<(WK}mvP$4k=|w`|a(@cDK$3v9 zG%HiQ!AthU81pb>7yGvk72Y{Js?ixmP^}TYDNOBUo>{_*5avl#PHbZM>T|wqXsUd? zGB7;Dw=65t_sOj!MxO9y=xrTYX(r&WWgHI~{?SPTUxlEp6IEpSdU7iyaqHS{5Ip#71-ymGEexB#z}w zAsr__sV{l}iT0Vo3&rlcW#3p(225pIw+XVk5-Y%m(1Y)y?{c2>30B!vyF|NGPCt4| zq>DBSTiQ~8wl=avI!yJN&$5f^(;5#O$ICKn8omi8&2Q4aE+QZb6CkSo7craDMql)2 ztA~Pu`)uHORUKF3uRI=*-L^$sI1UE#kCt;Y>_T@|$CW!F-e-jT`S8-ysz_^YFb*RgezAUxcLQXJ z%^gQZt;#blL(yu5t)QlCe)2uTnS zdmLN7N38V^u4`dTe(H z?iEOU7yMJ#Ty-LwhwddJM>Ni*as5}t-KvwNYxC;sk7qjlz_3x%M*Dmt5&Q6_+GXuE z`=_HSRqa~n!?5)~^lE!%kt(TO3d}LgtUL39iDa7ZMp=C4!t9X}S6<6xE(C$<;I+#G z6~}|Ij9kA-WuReradJ!Tta#=E#K`5hm2~20FhgDJvp=3?%X^)qHiSLy!w5!}d#U*U zZQ1w`*&03nA&fGl)q$M>Es9JlaVIlm)OTJ^wV=oTMr;IrjTJsSskmI8&d9f?5+ZKb zXMbKe>Ax#=d#x#)&`g5WyJ(Z3K9#2Ky6Ke@QIx77MYWX0f|)Y z;%-?T7{k>`28TWN6F^)Z(zVv=hw+zN2X5bPwtyqI@Re05TGfIuxCG)h#=|P!*w=;q zCBvE+VOazy1gP==3ve^*Lrqq&IF#Is#?n@gNgPrlRMr$EXDG+|#Ix-N^jgj*x8r}V zdjhGcsUhR8ZkRV8sQ66=O@@cTFj`cRofI7Gx=Vn8e^m@U|H(bwMD@}VMLa+y1q?B0 zKaDL!&8s*@iy4ol4t;(!ck=9yX_znOh}5$AIymF5eK`Hxy7{ORj7J%W7K7~oc)V|t z))gKA)Ji^Q!fQV@2@Stm&Vaz|Og zclX>&SB=t)Alu0r+s)E?Hk9bwSRpq?PMlaN3sVQdWlb1?$p(bYBc$q|y92 zg2y?7?FOZK{J?vtyRu8^b9+K4=l#ZrnN(2XzL&|4rnaL-t|`Z89%!@5!C|aaZ;BsZ z&%8xeNy@~&e7Ou3!ce;-$YQe;qv-J6Kct8KY^ps)Z?>;r%MiD(S&zyv8a5g}*yN?9 zXqani6*tVrMh`EN7Ljnc!`x-)6F&;_jmOyh2BT{rUAh=MngxR>3U@Y97aS!jL@a)? zG!5x|R&|}D<9#ys{J-9GjgSFDhV5g?S^wW}GjiI4+#2HVMr>OKoc$ThoKAARarrC% zVmD#jR3jo4I2zSXO;$fyOH??M!7Y7G9io$VGB0|I?XUp!n@=+&9K**QFNsRTytV_K zGmYv$QU_bvZ5Q1h`Qb-P$Ui2=E$_C<-HT$e<>|l+!zg?ic)^enhI*Fhnj4vZM9Cy) z(Ha@U$epTVv;L&J{(igE68To^E65pMW0E5^gbUQj8pn3w`A9L+Is|r{nV<{>Um%GA z6rW%OSdCJghvSAFt6jcbyF8%>Z)9!Q_sq=t8vjf+zMrlPU45Sm9rL|`+~290cCXX8 zd`|ztrm1Eo`|*684C%+B$b;VAATEVvMN+YE^{;sIb8Vkat_pyB#UaATx){th~qZb2Ih!txp3m zrQ7OyUgA8~wX0q9bAjJ#ehpkJEe-fPyR)G}cX)c<`fB;?EL4khQEdX8B+#lwtC1Kc zIU1#a6^)+m#}j@UzM#XPN<6+s(s;@-`)mp?ta1FK6kfdliDmp};EOdc zcPw>V>gS6BHe@apAVz-T!y8?i}yWG+;(dnvj;mB14i4;5|Q%}Mk!WSi!WbR8B&sli&3qgb+EBw0% z(z}>r;KwiM+S&W~H%8Fz}oo){sp^{M&EME{Ksp&Pxu2I7YsAgpSjm40h_*Qod{ zVww3WaN8qQ_5dkI_Q*;G!uLC;oZ}RLO`EakB6jCv6(^`PCqVHkw${~J#u^Jl{4%tZ zU=xA_Du}V9DFMdz>n-snMS9^3qcKo%Af1u?kITsq| zp5VG28_@Qs&Q=SgQLn%6CexgJTxLxQgc)F>#9WawZ*bBEky^sn(W2V4F5nU73$>oK zl6#cI8JSgn=RcRYtO)A|hS*@2N9R5i41)Uc zhOvvvs?3@a_B|Rh*&(gXJq`|X?rmDe%v4LN?pfo)7E$a!Kc|{{)Y(#Y3LG;?e*ULL z%;8m1!O4dV#1}Q*|HHF8ZmIZ#oXbGKB}$HuZc@|uvsC0;KJZQp&_EtDiVKp9>%xBX zSbYE0exj0LA3XhRs@-*3M)fnZZNp~RX@z`IV)Es;h}?k9ri{F%CsJQ{!}mV>gzoS@ z{vpTi_~bC-!uMDI9wDu4?rboG?z-yHtB61zEk);Z8~BYI<*tlFN^gq!yS0CR@I3yP zt#MlSpZ~E}XMEQF@sKZX8Z5uv3j8w+X82Ta|tKuRh}0^0y4Tv;MoPjyY$K2JHVcMb{-3a6P{Z{CTeda=u0a;oUWVrj&f>kT7=9pSfbGEIDQ-T@0sk*y9sg{mXA zYdnuGC!?=99Qka8HIaIQSzv)=)qmg?S3bBLb~$@!_jL4IRq!+xxMzxC1nQZ4}BskRdz7xIymc1Eq)nrIH-{f+w{qHqu{%Hw%*fz z`hBuzNW_PK`t}dp4^AH2`q1O%`2!V?sSg`No+0by@7m7K=gx0MT&6U2JT?QdyN!&P zAo2UOvR&-eBC%z^EEn=~5-Lo>CMVh-?{oPabv`r9z(bP%cD=e>&EpOI$z{0bZD~8t z2#>7SqCMi^$h7{=fF#wk8pL762hw9JaJYnl$97`700ni+;U{_EK5x8iH$!p2&<%sQ zM4iNYB_LASs2C$#3*|72(Y<-o7Yb?0qNW50Hb4!!Y*dPDk=ui#3orH@d))O(Y()#6 z=(^exDF}6u@hM%7`Pq_4#o@w|;(JXe>Q;qWZd3}GJ^SogDK_xYUpuQ*ySqr_K;!r+ zGF{t$BlEVL`x@1^8&Q>HFfT^Xh;RWDdLpr+?%qRq86vVSrHYYQgje#ls|6oqtt+}d zn+Z=trOju27uvTL+9TF%P~8>~GDDq`r_p*yokYfMKqTeO*FlWVJuw#XA{}v=T87A& zOzS*i?4OvJ`fn3rgnt$TMceFAVzRc@#sWz@spfSF16C7+K50>)qRgG(Oq&7&e3`Uq z!58f=RPu%NHEp6^@!hL0JDs!V@tI9o5?`TSZ-h@f&XX z8(ndyO8F0g6(vMLWA8qA$C3mohv*8bS_VptCmC|FO@t6)VJRn%L==0GWE|8(o?v7k zZUJW$a9h`+jnz(cDJ{hTYb7EyJ6OLqnj+lU_N)01oZ2yNS$c7%q3UKdZrY5ZyY;Cy zh313zDqh@q?Lm=#@KB0!OKnV&4vG}2ww=& zP?;U`PR{XLszu5LxYAa8{fRF+y2zym0mo|k0U9)c4>^KruXD%zVTL zdC_G+!>Ic4SJKksqs_yxu&slQ3WWriy0oQl(!>`$pFKP>2;k&Y-$C4OoA7??Er>qe zbcS0dx>KYBB$j}KGs=k?Jqc1>6<3@=ATy^@ycgh0YG*}-W^}Ty_!4oqMm;EUwJ&LN27r#hc?tlL~`}cXDch%IDPJ_4_ zQcXDp%NWTxE$YP48@QSr-Y1IOL)V)wYYc~*E&|kjzp>t}v~D2#vM?8G+kW^n;Ya;pKLcsXKwn< z%gH6`|GaMw*;D$)LOG!A>y6Pe8hyl~{b0SIlmp1;xM}7vUXp|Y7=mye@Y<4UEV;dW zZN)(=|3FQQuhHnfJZa#;^K9jfq~h`O@Jri;vu=c(xLTQ|m;MH$Gec4gB<3c|@t@#6jovD&lsjg6V_(uzb%XH4Xti!my+ zA_gnxew5?Zl%f6h`l(;#6NOV%({;_+yLAX2hLzZd<+?;Q%g9(vz}GQ@XhlX}#pK-7 zHCnWi3$*klHkttle4HRH{m@$ICdA2$VP`+&a4)!ZKyt{s5rxY6hJWZuN0er4nw9oT zkBs4V6%}$}W)zTz1ES>}Sc}zH2Z3lrrAXzAavtZ>76oC zr}UWK1OS!@h-`H+Y^ojg`4Qu4dmt3AJ7`Ud(OHYC-9gf?#1?On;mj=0nB5CNTSg{| zWSfCsOdLWN0+!6xbNR3dKYZFW_uDSymjfV>*SBkT3PPeK!&jMml6fMI+9-h+R}`zF zvpfn)S@GMlH)E#Bq_q3_ji_}V^u_xX#9;$yO{lk51VMK%beA%Gt2kSsxkkr&`P{KB z3|!)0-0H^np} zFUQEZ!P3aUArmeDcp5{M)#fNidC&JGQP%ZA{uq3Z%Rt|SB>A#`sDFGcx9#&^CU z%Ds5UAeD(3-OC5HgenC40MjR7S!PY)AfvR^ZYQ*7v7DlH2 z@0<@ZF83wtx7HlmSVf;(un4nIZrt(k>sfkH6}J0fG_d7@kkMabRG1)bO~l=)4H|8m z3ffA_RsXlBO+R-$(qoeE@I9BBad5~khj^U#KB!`DUVVK1>5t}{?d~&^@2_pN<$Xzg z@~iOG_0L;vDj69W^cucC<}C1Q?O_XTVLoAV6M*{ueh6>G+0NXhH zFdrBRiP)}g29Nx{TGKGdmxI+e71qLCi}w*aADZXzLwPFloQWn9IhMw*p6RYibx#6i zuq``N;lxQ>pSg&M>j1s@(q?n#U5!J~5cYDjOz_Qp;O%|T;CT9@yj--f4*t+2;;)}0 zSF*n8b>0ehWO+IAzc%Uw8w-S}t}$ZbKDRde2T;u%PTV5jUd=c^0RewUV^f!0kWJp@ z8;%|M7dtA$s%P78n?aO5_)Z`fGhMDEaOy&Fl^&=?X?Kfm7RHD7$g-qUZ45+*WNo?# zuj$aziK${e5HyH$vYvEWWf1@jjRAf=sQc@(buuYSq7c9d18}lezD!f0g#?Q*aG<-Q zD~ccu-+rB0!yZG$MUyQvj(^!$@Kp#ZV{IfV?Yhiu(Sx_qF|lJ~0e-Qf{hJlkp7u97aH2||<5#dulg+k9``jRIq+3RcYsX9Ow6WU4{%CvbG z=~^y|zdcg&g$mtO;?8`v3`@#TG?gVNG$tzqy@x`X3x745HnM0X?hId7sjmsA<)fE% zrV!I4!#N!hWe87cR?vcH?2LHLs|4{#jzDr6Gdd!*c6=|#+)c5K^7UN@#rA-$d0eX^ zH?7a*XYF@zNhTb_@O$P_C+8RJi#>{xJ>)P?_dw2TIuB+w6RG5&03EBBRP6^kmxK-! zC^RixUbbyzd3>0w4~d7on`9&v`5M&7hNJ1+uU5o*tPZjTD^cCMr+zp6m+iu_{^8jo zW&Fb-#!;(xSHD=3qfEv`fL9F36;k34R$~k3#N4*(iAfa33l-hq(Je{ zsoY+$qapYa_oBHMer2vC&`eTuKec+5Ts?;@jz3w79WUPq;Y7_gTm5LDFO-B#KH(6B z5^PBcSy|GI7RkEbhe%@HfTx;Hmw5{=3#mi)!AQc82M}Ea7bCtqp`f?BbfU79fcody z!N0TRsnE@U`JGo&YNwy4y=1N@t8W)xo`1iethTo}2i{sOA6^6Mz{tkPotPczEbY9A z{o%`eL&@A9YSBNGH8m-y7JcU}B4n>8Z=U_T2L3#>9l*(RUe%_`mOP1_#!iDA7t1{2 z!;B#wwcx#^s)&Yq>M-KmyjpW+&>5s~=DfEx`p^0mv&WrbC zh2~(w{oAVNB>L;VRv{Y;&qQXp#Si}P&;irZiy-}=^;yKFC zN~&}`=NNGAUYh(-2zEfEJICdA7Qmi}$D7k@7Er)%bOWI2)j`T&e}9Qj`sHG+hyUj6 z@j=4{i1>;Qi0sfDm4gpywJ&JY=~djQIKK#Vc82tUnvuCEFApunb+`_}^Dct58{m|X zmt*{(yJel}_7WRn%!rzb5&xRha@gFk@z=jOvE^4w0Ns4Ep5MS8!Rj5CvBY+I--B7+ z4gZTjPG#Gzj>y9(<49`J~#K3Tbwt!`}{HNTVuVfXdE=H1gFa#yj6=A zG{yxbh{9Z*`3HAfuyVe)x0^IwS2{0wbG*>s2 zbsVZRmf(pY0d(^$Drt>M(xaxkhwyK%R5%x*FwbI-Z0W;}_pom}5T4uU=Tw&(OaY+wek@-z!;vdi~Di*`33Q-_)fy zZx!FN`+lMi+>hEC=yU75kTyNg$P0tR4L)_WFa)#p??0QXgZffL9v1cd(ldCI81 zUEkjL7n@;!`ZpW(uG*%9HflG)%u+95ZI$l@KsI~$ePz2i`C>l*{N!s#Bo9`8ytFRU zz#MGf0BFkmmYH!lPH-EWEElgy`WomAO5pwdg=nTLLH-5J9~vJcu5<4Sk>j;y=Olrk z_}RaC!p+209nJzIOkp{;vn*=*@l<&+ANk|6V|r&rjX4DapeQ!W7p_2*Qu&KlUug$` z6(=Za$ij&AE|9aV>SvTA3+WYyFfbw$|He{rMKx!ADo{t4iBvq9aC}}~K65#)f}A+N=8PcXi>q+hK2}?`FWkP|huz6XGgF(bdAL z)A8Ap-#;A&dfS@nThBQBRVE?O z@)lnBH6IGCrVrJ^ss#raTVHt1=}uH$LDgBVSC$2UDKE#t$l2;&sHXOxN(V{mtSJUemV;{BgDkoGlBe>?IY_s{RWaFGGFA zWWgxFrC_B#>l`pD*qAc5UUE+T;ZVno=KUXy{2(_^zBb~utOI3Q zF0MI#u)@25U}Xys`^h9nY`zO7b;a_l|M-}~b+Dv`nW`CBPEo1JgO03H6XAl9l}rg^ zK;S(F(@_jjc;kU#o{3=*d5h!1tocJ-om%de%seiZN>O>m zR?%)7*41m2qZ}ZAf%EUbGXqROI^xDQ=<^7e^&P6+b(H5}iPC-g^qEowx1=drj{23; zLz2j@ZXL|Npx7rMmz{q6RW04RM%)*t``0~Y7b7EhE|KIIPre7_1q=^02{72Awz4%# zta+JeEJD3yx$F06piMN{>^e&DtJ!#jl@cRdvfN}ys?!}qg+QPw^NWxheB&UQnVSvh zCK*Jw>`V86$P8n+DFCXIVf{7k)<}5a-1$rc#MVyq`X^kUO9Zp-xG`&W)b-kYLJ_xa zL7Dk;uUR_KxlD*m1!PUY_ae2|P#Hz3=w)chdw0yMx+2|EK4|D>u8j1xN@gz4D_}u; z&U^7lj-j-S5*i}h4m<%UR%OEvAYG&41(*xSS7E$xY?>Zr!>sQ*Xukj8eD0RWr*b-v z|9Ce~3BJkuns`^`_}{KebKrXxikj=W+DI3+q?+eAc5>VsQ?y0b*gT`G4+T{HuLM4W z2k6W;(+urq582ZW_;K}N!2I#{>_@+Mc|$c!^s7o5g8-#+e)}hpiVAZuVCo&1(0w{? zbS9%XnM$ph&^KAnLJb0Zt1|4P)e*FY3nubV^t= zB`Dkh%sw%=Ni8tN0F;zkZm>a%5}6IC_OXPqIdkMFOO~dwV%gOESzmZ^l+nD{{ z-L`zy=H&b0RJV^&uu-<#L9qs%=wuzCGV5XR(~mQvslbJQJ03kLpTZMC0h)UO+iEi- zaygjl6^cpD;_G{d-h{lrO?k9W?FK+@(jmW<|LJb;aQqcMrk9tSe-pvft%HkTO`BK! z94kddT4de%ZZu1tqE`XR*Ux>4If!^5?y5pxg3!rykTE{`3D57 z^-$iM@tuCu_ItwS(T#ojof)0o{q3`*l*5_CZuZv6=_wpwD*W~h8X)juIG^z&e6TD1 z5?*ZKJ>20h@qr~dzCqXz_tKpZRue^9{q}lT9=II!m=qkIp$C8*e=z(T%g`R(MV(Fn zn{L2e^Zf|ca+++$9)|hV!)@t#B@y39QULbWOHH7feJ+e)OzieVB`-Ng;Ezq~)02eD zEoC+;ep}z46@q5P1(wyJD%g<#BHD;LSl}-VOTqY|;K_^q? z75jE;7A6IN8fGk+DfhOj@x>Rqa6#?DFaGj(Bt#dvQ5R1=70oVzWzbNrcI_+Kn`dZ< z%yz&VuU!JRStKX0g_zZ(LeSvUB5Fu`+~FNnX?}Zr9~;!!g*EA9!$onLda~L$S&cXs zHv5PRC*|c=$5eSyd$K5>fSy$)4CgMe$C=5aWB%tYKJ4Snx}&*8P9OdAAxqJfQ)e z-zM8KkCmzoQggFXlVml)8zX};Z~<9GGn5rZhdB}hk3K*-FZjYDY?pB3`-j7tmYlVJ zPL`r7)L~VR6!^eP)+AVFf)^JGZ9NN1h_aN>>G$LQIarXq0H>4%3D@-3W#NtTpl=3h z*^fpsI76%tr3?%ap??oTgFb<4&7jTazFEoPbXY2JH8lv*c0qCL+6RxQ&~RJRDRHic=cXQ}!iOuyVq?qDHg;Fw?o}c?EO3n*!Wg4XL68T*MRQ;c`&1 zF*2kS?0wm*WLFhrYsqmqz-2^$Nk9;Xu#!DLndu1}N|BPTPd71S$E8o7a>@Db&jjTw)C$^W#l?pHFLj%oS-&hPE@ z@Al?Cf#qPH6O_>48xF6?h<@5>xD8IOZnyp62l1P}w!<7}O^z0p4^Murp2H$6-txV% z3NeZKGOX(7i}_|%M8{qy}ULBrd2in zah{{4F~0ck;AO~B{8@hJ&)+Qr16M6q=fEw=w#{4(WBbeVtuBz4?|AcmBo?z855_Hg z+;ozmVtrmD8GY~G692Q)1{Qvm<~L8fK*!1+F)vs%ePN&FciUOrJ5|r+e{OE&_f~J2 zr6GV<6A`$9G84=6w)0|^jkdt^H@9v;8dtf&-_7!2+b(~!i}Un7bT@%46~m!bUBd|` zc9}uc1f_?4wp(y=39Fb{yHivQ&QEuwiydW+0x8E!Z8-ClTz)qhK{Au z0B~T2qbES5HE|lz(fHK~PNX!fPv%aT17xcpjq*ux0DhGh#)A8PIf`RCH z$a(Fa^5H@f>*DR+#2!|s^=4eTWM#j%tR#e#FGy2oH^NboV@5w4&8`D5K@dJbv$hw- zor z@GAehopATcg^1TNR^e(?yQTPoVk%KtK`OH-?u9Jl?s^`7b(Yn%cHw;Ubc?sf=uE2L zC;1T}p?6GBrtpze$;;iD-jm*UaX3q<0sNaAKkgg;mZuW}2(pt=`*cvEKs&vCgls}K z@7s!sl}f{S?WM)RA$rL$I-I|i9vu_PMZ?fD_rB`K*4De>>_h@3rl*sf?8F23Y#^<- znh(?M4U*na3;10KvjScfq&cm%P|oXS-x+bi^v{wtvh#bAj}4&YI5tXLnXoALl5#z7 zcG;JYa|fdE*!Q{?1#yF^O0=)+g<+mfSP5}xq+SG`31eRNno|f6)g$~}2N!Hrt%MGF zRBSqqTbY72&M@BLF=qJ^=1t z0A5JATYaaKM<06Au=9O~tY86&87QEZ7I;rKtE|fGOB$AMXmxKVyC42te;2wH`!MvA z2$#{LY57~XP@gA=G3yQuRbg+!JVMuZl6*paHol_%wy)Z14>m~+0RG$eSwS8MEQ;1v z4`7ORo3LA;Pc$iH;F3)vvkg=tNgV+W~JCC zW?iFFl(v$9*$2W%*@l#8it{!osr~5J_G9(zVptGM$O$Q${d_-R_#V2h@XMzf11A%- zP#vU{$nF&&TU+Z?=NkBTGGxUWOtX@Ok7rLQ)IJMgT+&J4`!ARD^6Ah6@HNJBje>3~ z8C)gIH_2q><$2V9B424e-x@6$uE_f*4UN9bo^<#I4<%vy$V|~@D3hGb9Q?ns`{zOB z*W6Nc?wQ|H4eSjnKtd5JKv<`;=Fsf2e#ZH(?0c&X95TG zJpj+u89z6@;cuaadb>M#naX#S4xZhor>C`f2L?ciB#5q>7s~V3kMn9JIIo=j;tl)B z2Fyi+GdJH|qyH-K(}vr$m#*B3KYaF+vN!jp@4;^v6oDU?>QC?R^bZbblG4|0I(!Si zJ+yDVKSI8Hd7zv~_%sozH2eYkr!NU~V)mdX$=Q|cs5FcNU3zP(Q{%xKj}XvevR{y8 z!!*Au*Lw1xdH-5l$ge(1)b!sR-z+V_zd~%h)Q7C0_*R!*2?|NT+2gRh?(N8A5APw} zaaK<6@XUhlw-Z&`NE2^BMFOy=u;s+vVHYz5%bBPstS||T;{f0Ao$@vLm;mH8e^dC~ zYnbbVe9VO~qta?wY)!E)qbS^m$p$oQSE(Vba=`d?pSPg{6P5Qv)(men+~Q{Ayt`DG zcW!`2XS~!mpPX2BiMUYwKP>>+FFhl}C_eEGN5Dxvrm(}}NRj_es>1x^NCv)*DlxNp!S-w3;9}Qkcqi$!VzF zG1lVgi12>#?ZHb}{V(B1M%j>fZ9D|#(jWTrtJEio8R0oZi}Tr1sPSbH#*)kLpjEY%o=02pvS zm`?@}M6HE3U^#?MpEtYs2@d@?cfNa%{Ju&8X37;!myYLs4cJx?C5o4k#N_G@GOHMp zW05MXRyvF|9RFMr&{D^wE4>9w0xhMTxKNaDzrZ< zX2s<8lNXDGJe@$|P}L+mDPeK7_8Kgafxx?XNKZR=YZ?A5Y3T8eJI zRm`w|GRue{GnqkHv6)t%snpcS1}^emYmD&tG4=RfqC^Q*yFCkV@*Ll-2>Gnd#U`Apxt&Qo&Krc2piF6f*?3hDMY_pwtplR;dsFF8eatNtN zuP+j8i9cx-GJ{(wESo|6EB2H-W^nDd7%VkB!v(Bb?#zmZJzVGgxy~C+$An|ZRU9Rj+M3!<*A<{@Z9yltI!ohBFd)9|0&AxY3P!wEVaY!qo_yW1GG*ACK_U^-ri* zZ+o4-_R(KWm^nXA8&4DU8hQUUcy?^;cdX6Mo_YD^QnbD4_kT0Dq6$qA))zTBuh&UA z1CFw&QN0v-v%w*+h1!jAne%Y%LODKZ)xe*h{X%!}DPl&~F*IQF)w~xF8Z+~gOc3NV<9eZJPzCG;vDnM1-~PJ$(j$cSy7&%l=;73V zRJeN|8l(nj452B08Ii2~iifx1S$b)Q3EutS*76&WtNhm!jjoM9mKq=&-$l2qc66nD z68;*8FEf{N|CBXVbWG}88xLh&wIvPgxo*(xx2mGh;`P)yvLm%dEgiKa~hrg0_9%4_Tl!M;t?F34Digi<> z@eqbEtihd&*M$uQSOhvUsnzsMYypi5vy=f|fa5JuQZxS>7`A(VyyEi(D4rWY5FzXU zNg~SD3c$U7$!i2~Xf2ScqcUNr9ult*6paSuNLYg9=NFkc{qiy}D2JeMQ?4%PLa5Ke z@1_o2+GRCr?lT?=rms}qRf75LbgT43`ijG^wIc{TA#p<36^O$1$edf%hkG`b_ifrv zwx%D=7_%!Bdv-B@JXBt)i`U*y5~586(@#&6UfKa3wCtq}A$$z=VWd^m~S|#rJry zwxmy6AnE=aU**?aBUf+(0&NvU$47vnFaTvY{8jdnk!)yB_xvX8t(~B&cYRu9no*5s zK|MaY5+t`O)V^RwFj(ntWP6B%W?cYDQ_JcNT)c0%;HgeY3Cc!scWN`uo`E+=Xh>Xd zscUQ|PBSL@Rc)0OB>%~=zrxCC@!Hy&YRL4Z8mU{pEAwDT;n^PJxv_z0)<9)IJPfO> z9S>uq^~Q*j0Z#1_RGi0Iq@Q)*+MBYvr^;96JdY=GZuvcI7IB#0MIGj;Jp0@C&kx)L zf-qsdptooEhwp;Ehy+Fd-1sCT{Z5KMV7{Y3+-i0lK-5YNjBx<$wdKH(XgBMkurugOI&1gOij; zvwkWj9Nh@o5c|MD#`&;cp9}N&5_=~vA8A?de0g{KV5f`ahua*1gIb?HOwl6#+MD;y z3YRqfSGQaL;e(`mqHb*^vV0F!%{$o{88N+-wX(YMHt6gk_D{IZcCLZwRp$&#MQ0jg z5q^i@#m^F$S-)NDlF`S8HZ_g@f3D7{eBVC2d>!1Ta{{a>Wg=^6r|1PP-%Swevg0fh z+I{uU!!srz?^JNBap^O7={4LXL|j#NMoX(^pK6?!N_r_$vjh7gP!bRQnB}|WzLD7xNUDar zH0;J*L3*Bw-_0d8Y_+W~yyQRII8>Q&zkVZfB$|n6k^ZL06zx;R{*qbU*a71%TWfF| z%2Qb`In4*H!|bOf<1eP@7OGD-JPMs~nx+#Z{KZ{6a2a_C( zR{<~iQ+W&=@lr8^#wR?8)7zQlp@;GqHt%cSy{N7pK_;4C4HuxPFv`b%DZocNp)cBd zV`!Enk<7j1-(_MfhB2R_#bWK{O#<9~F)PWNGT?tpW&5UA>mX6WN(=eWny%xXCg<8u zwM;(`d4!fDu)zn_?Ewgzz6K_*AgqEI7|Kpg6d1}PM4Ccmc>qyX=pBe7oh z^5N`PKyg>gM2%gJCld!YY>}P`*wCYsHhKZq3t>f$E0T(E>Wih8BSrRDj1#tSzyf>ai4W(tkq({<(#KG9F3U=QCTg0`(Vjj8UA|Os1Ni|?x$bcBY^_dwL_H~jv z$l`-;mDOx0*z#Ru@|#TS9l7qojPD;j=Fl>2$KYk}xa`)pg@wh@;%!xA-2KM&9HHo9 zJ+JmolCH&zFg(1_YTQOXV(Mmg~J zt-=NI)z})TX`k-4&4WOnnLa7dw^^MAc3`Lyaz%$Br+K`@n~F5Ex^Zl5N>LXFDt%Z^ zKMtI{=@RT0(38>wdo`D3Hhpikrj-|8%xe2tFjeknYqqe@e_noYaB$Z_&Ma;2$r2cH z@6oy&32dEo&~kBs_@Ehm@HPo?hx{C45B0+?jCE)HTLk}7^}?*CKPZUny>NcuD8Flo zP8VT>*bb51Yg)M-nt!Bu1a0}`);hdpp8w5#IH&4A|M7f*6us0jQw3TOLJw;4>{ga~ zTTej%9FsZ!4HS%1>__Rw;fWYm0eis2+siEv-z`r#Dj$EJY(t~dR;O4s)G1;8b>W1j zRMXcs4u5zjc48X|RyhUZ-GRrJF9SkU};N z@YlL#9E)prAX;8ha~zA)mU_X=b`cRn7$cV!?{~6QJ7Uvfu{~w9{|)Y?7z9ur7&QgB z3(GkzjN&kwenp{d*BsE+v~F*uvNeYYWQoESvhgbcBb&Z0PtoixKgUrhlt<%cNpbOR z^X1a8aA(06S62nvzkc3cTIf0&@{8hcIWfu$-sy0g9tHP@J=BJu%A>falc6Tv+DLE? z!BvzROa>IKDD$gzNK;S5-YkD$)8wlcC5#wd_W$wr!N=TZ^XYg)cp{6KAj!J#mg=~> z|H}yZcdnLb^-(a-?^QBhcY<9kpwr6Z; z9<5#dj1!QjhdR9yq{GwUCCl`Prr-|~QO(GXG;89$GEv;`DK^IPzn6HwU+#|Q z#~ECoEXPNTkm(EoX&-B!3&2MvwL*y@-3l1sFopz&L{QCqZVg<#IlCHC7$(QuaY>}p z^hf|K>eqT$VRv$H)tNjKspv%Pe};2FmJLqH1;i*Djhf-eabtMPqLHzf=A0r4M-zm$ z3^qy+!g~K2zwsm4jr#l7?1@B%YM3ZSew3(Zsp$C@la3?Ko_xNMkv$5yGGVp=4lPa$Vk4=z(ica4Y5)Uv6~tcK7PiK0R_fFCAUWemj({>eos* zCxc+Z+Q)mnxV|M2x2*EFVeTfVU*F>ac&w33vYN@svRE^qDig{Mz~rs$>_{eXlyy7R z!+?R|jjz>(+Yc<$zp%YEal&GXibYeLEVbFiG%AR4$UMaiMUpW)Q7~Fg)YVhhdw!RN z#G2a}3htE4*r4ybVWRA0wkHs^9xbzL5@p2xy<8$Jp{j}3>L5338 z5E)1{t)heCEeSV)qB2=A*dkv(a=AbZhB6t4c&{c$v4v@rR75eTrFa8KN6d54>^u4U z$mM2m4FgT;fWs%anaOb#hREU<2ojPny6-f#%Ip(0tdo#jyWsg*YSPfquw|DkqsZ58`|Y;l_QVP6frn#lYzy!Xo4_x^r{CsbkDAeKQ2 z6nU16K2o?eiW+q#n12K9V5ma4!TTz3$mQD9Fy;#zcnAqTf7I6abbZA<>f0K1k;H`G ztBj*wqw{XCKl|A7Gd%C>(PC0k5?9FF-~~nRBh;~{V){(2)9PK}cfe0_vj{iJrP}%;l{Op_53p8yC51NKt;$}$5%4?RagdejWR&3W^B@njdJ$MMfdqtIU{ z=hl5lL}SzK4l>78I3qNUeaBwObg*K?8%gaOm3;ApN{p(VLyXzyp{Pu=n!2!=7RIQVdkl8=2C);i3txpGc z;Uz}HGBYAl@XfMVE*bejN^zQa1>G#y|1us>`xNMl+dvT=poc`y)CTQ?(Ya~gh=H^B zEz=$1?e|v(hnr5(po9HuTc~{zrEIX8F;yabRhAp3J-2>fyZT|~@#ibhN13xAi=ih0 z?eIo|-O?6LX@NA0!wD(z2mgr1O~GPc1={PGLAXWaBAOX6ys`?2%o`|E%6x5JL=Qul zcc)ZBf#Y_$D8E;I3Z|{Dyah*!9QiC*2+k$}`Mc_MS@&2g& z9w!&!P8k%kml%A0D~$sv{YuLGv5RQtZ=7OZRx##iNLU$oKxtW@*{*ba9#MF1K6^qU zVrtV?H4#_GA*G}&!W$mwv!%0JC;!eCbzkyA&FpAk%7X#itU#wEg_Qarz>PD812nK; zu7EL)az$#NftcGtUIVc<;P^j-BW1ntS1K6#D$1NuyjH#6o2wjr#IJHZ_+zxhL>y}d znUAm}JxRmAE@rmxB#eE)n0v*r%6_=KKH0X;HLEmoMXuMC@YfhHb_3|FUCn%kM09@_ z@Us6wayZZlVv=j_C+ts@kU|&oW3yq1Ojh3cnPHTB^Wb@6uq>(Z z=^mTiE(PW;EEj`#D7qMvs%0v|`H=0S|8Bw1!}#4@mh)eE1_p7~)jYh{^zUW9Y1oT@ z^X5mPvr#we(<}7r6X{zDq(2Tw^}b#IWW4>)ZYl z)UskRJtpe=J=JMya56N{A^Z0J!Gfpa3(eV=2U(Ael9x%{pqlAsU8)iIrH6oSh%UnZ zfdApkvtOsj`;{9Omg$CrB;Cbp!~0(hVhh^)#?tORJZ67)rlq`ooBt>WJmwzzq=Sa< z-UIqJzbOElvk{%)Y$czc%SlAyH)V?aj|w;VE(~Xz06rz@8n}ScOiOmV1)LlL^&8Iv zVl2tL1{LDLKQeX?9C_J~4H_Wr%eg?oS%SH`0Qkc4SjH5tQX&Ap&#_DW;8j)58gu7_~+ zVGUlQF=pE1QEU@9oDN01r4~}U4EW0H5{n;{B30FGYU}7ckjG;5@3jVlb;sj;Eo&m) zfvvpN2WrrWWjOEg__xc&DJ{+M&jc3ubD1l)AhX>p?!))Pt`6YGuCh$eB@JXTMZWh{ zV!sMS-+M~iSDq%zAAPrHn*&CB$|O)hzdAua$KZxWy3=&S12Fw=_EO$S=bD5xpGHL5 zXIxh=SIeQD3;M^fw94mAU&J5q-_LIK9$hhvujoQTd&o%oFjh-MGOHZD7F-C2f1Zky zB9>J*a64!@5|dz1YDPI^>=i^EuMQ>an0+_9C94)`4PvZ54c?+4P<=2DRgQxwdQwJ?87mKIJ zw}2)+AFnVKf>qCl8znk4@B0vWR0GH{0naaqv*9hcd7kt-%Z z#b8u{iH#^oJrDNv;|f@%d8q+n=1Xqd2hcJ-L0BXNtX02E^bMyX`z#)g=N}}E2_22+xqi@+tDrcT_$}y1}b2^{`%qOv|sPQ!)a^-_{o~1n|Ax= z-##H0{(vKgoh!W<^=tjd0VTR( zO5PN#SeQT*1Y;cTV;d!@@PaPkH4Q7)K!AeXo(jUdn-O|!^dH5%L}fn%si1_wV1Nib zXj6V83wX?cGz^b@L(t@DsR=p>3SMJO#zmsVGfM}RpvMXl12r)aHA4JB;B8woq=7t~ z859`Ue`{)NR2XT!F;KJgGU1lksIqIZ9v9%^lHa2VP%j0E$2y{8GYu+>i%WN3Me9T4 z)b9iG){b@>7;JH}aCCuut?&z6v*9hT*%gyQHKe*E5CH|Q?u*^ZNy3u=h zT$Z_$saxPEGC4=}GxoZU)wMCH4qiEkkwnEH@KNfHv+bYrQAV< zYGO*xP~XI(T8z2NCvxrz7Z>M;AG+~@y><8A*|e$H@GwPnHSNFbui@MCH{p2azjof@ z;2ZZmR%9sGa<A0cT4v7`2WQZ zNY6zg-UXazfNtFAyzkWx;CNjoWcP6dW9Z>p;=|HP7qWA8SbIAT| zkji<0unjW(!J?@>@vB>0G?DOzK+jk$1{+SmS)gDwpQ-1md4>Gx+9j|ibZTZ!Fc(I* zF|t-6VHwcdm6LSSGbrPMzTt$V+A0rB(E!lfpkNFhn+*{tA_-ShwDXNA+@w+K1B9*c zQwd*ugB+2?ph~Yo%I4oM&|&;+dGJJM%5JcXf}E*q7e>L8yZicG_U4}tmo5nnny)XT zSOT|uN9%Fx()`;8fqAX_1J0{M+K+E$u(AV7)aZ+w_XmySe3;D9<6E~=YHMq=>NhHg z*sY2~m9Q(18mzuJ_9k3znE5LN8kpUT;>rr*`d&7!e(_ly&hhYGX=z*kM7w?dr$I(K z5PF;_^Znz~>3R_1OWtUjcE65iA8%By;w~hzLB#=EGk`STGD(L<8IV8g}@4}UMEU#gerak z6#ngDbaciPQD`cvSM6HdxvwQatTV8wvAENdchp_Bw)X7SW2zmUxxb4uesh<%l;Rdx z1E{F(ymI;s>Px}ZWfX!Gfe;PjdF@PmyOZD;xc@Z6CggY;G~>^FyiuM%r6DUTD4wYv z2fjTaZ=Ta*Z7CpB+yeel0MjxxdFSl#*~%BNPn(}>Wo##n#o;@$_1TO?$Z=Hd*-u%! zWLozO!TY~%t;k&lMHmGdxvYsEu)yJR92WE(=sI*_1dF80sVlqtLA1p86{&&JhP|Vu zMAf7AylYa@?pyATc3lAC5gxqZ|JR-Ya1=_EMhyv&D{N2igZTU8D^Mp}6eS-3Pb7f$ zUoiECHZxJ&BK7~Y0P`mfxU3>u zOa*=Nyk*iiAdW_g?Y$f3S{y`iODyvzt;fG;a5?rbPiA`hab2QJ2)xI0bZa0x#evc0 zzLgcz?k{0ozjt$KPE(5`DOayv?M-+V@|pjAvZ&ncfSVQIQKR`(<39OkH9jFhy8Ajb zM>W(h^s{R9o~LEHN64r9*WJIenx_xcD61US1!u~9yE%UJfj?xu_^Bm};w`Rw47`_? z%AnaQm(N!m+CW3v89wb`ebS?OIWoiA`_qcy^zMT{gZsS+IjTW+ihNQmb<>-<66yUl zr@Qw~J2p0?CcgU!^MRM{A76FI?l2yn-zPxxVOnZH?hP6v&=Ea#buO^?vY&gaBSky7 zUp$>`3z;(m)LGfybJ1m*QO`)e0 zi;>P$^wPbEFh^pFd6B~4pQ#U4P%T-;L4o=x96%LCP zlb^?#^I_ZT>CG!`TL`d3<@qmdUEp?Gk(71ldF|_~Xk0t>hb~MeuQN%=#cw!1!8dR} zvFw+4iBQf^bysgp!O@0lsLSKWk9i#4>t!nzGj=J1-eNt6OYO3*V8rTDa+!H;)6*qw z*j`sbMP>HDzFpgw90DP5YSZH@xU@*nm$`JgTh>;wT{BUosquZLuRi=_Y$mVK-)muU ztxGC+Jne=Jxa|TZ$MQb9&+(D+2$73`mXrn)Ou#<&%UBI-Y%}mRh@X!>mdD=g-9yA* zup)*tCcpSI2xzyz;GE zL7P6(hNBVr7@AVNh~+3*K0|3$_>Hixg6XwRY`l324w`fLe5%~?Atx-Eo>IJU0-3`O zWyBQo85dH8F+kYG_@w_HvI%7l%U{P^HnA-bB`q!9NAq$4I0JO7phH?s zm3aZLdI$N1WEksJpi>FT5>*xQgiQA=GAS zOm1OxV_JsQ#qsD%0AvNAWGdGi6Sqyv7lk5dIBaR4ZrRySWSTb7ARvFH82j(ag4E4K`25 z(H_C8(}x?gs2HFWKrK_(Fp*24>KC=BS8ZbmG!bFZ^zR9>n%ADP=1Ur9Wn||fZ!j!sMMTF%U<^|A!MId=>aqx zvK6Kk@@n7*){4O2{^y@xi_QK{pUb{=bVTNSOOG&tza-QfF9}X$T6UDaF~K)-Tt{(L zaE^kLJrGY{YSJymETUY_R)Q(Jf$13)pSPqIAy#h;gM{5xn*-w0(e=k40#w5i=MIKJ zg@&^K@Z^YZ&@(qGpqf_Ag>r{U^hG_c&p#4>J8(8=XM#u^k!^M8{bTcNblAwqD6cE( zCBMq=x*!$#k+sv~cWs_UGp(6<+)PpQ4?nLx5w&t1^FJlctsd_zc1E(=U;Siu&@Ok& zYmxM_?f3lA*RLRYZS6;fjmn2DJ%IM^74djaZL3Z-(q1}MUjR#K;&_WIw6yVa}Wt3m&(gP>U$1aYo<|`&o zjV;mW*yG@a>72Hmf=iDZ7cxSQsR7Q5hcmHh4%@9DzxmJhrN0aF+ba8+hpoRa+n^=% zO*ptXhf^*wLp(R{b4^jA98vo(oYTWj#2> zyT~sLfW!~rju=2yhMO`QG>9ilnNSPpx?(Q!0O+T%yC&==2>8V@aTl|K2%LhXTvA;% zSOaC{q|hkenNpKCLNHk!WF@PGqrS5>+I976IwzN3%O3L}W-oWLAkx{t9TI^~%)6ZG z)btGHtgH`YUtUa9Jp~Wyi71T;!iG0+`$2I33Fzg&l6mXK4LX!70V9!BHWFPR-fzve zYV88bptR#(If*_lO2L@7N4&X>6+G&wx&>ycIj<*x(ZV6Ut(S^RN=AF=*!fihiYM2H zhc6q)&o!=AFL-)Bd92dY=m5h{$+C~=L!K0i>#{9H;awg1gDnqgqph_HP=Xka%R#8E^PPmh-H z8my5jCknvCuAvxjQVH0r_{Zzju}0%xfh}UVY;B)fW*QCfS8iWL`8>c6oSF_sbacyWSdCm!GAsO**S;0X+1PvRM`sfVL1IGbr%?LW^) z;=#9$6WoCto>YcE=I)M`&9aP$R?OT-zrh%!UN4f=2hiv*+vhz-4EiR%K18VU@(VbIgH^IP_^frY64L_uN>0AZVVfN=2Q=Rsz$Z;oc^xg!|NyC zxLTh0?r*ezSf8l8l=J=D;|6ImOZ3skr{{!cD?XtORgIqW&r6JbsB!Ad|L@-dEWVO~ zOkQ1jfx&Lu_!)Vpl6kte!f0YK(0Ep7n*IefldK5LoV2H1l|S z=Ju$2CncrIT!7p-T3#gWE9U&s*y@@yjMHLCe>SN#CKfrj#$IX zY682^PMJ6e8UYtkho^42t8<6h(K+J(D6PhS^^|0TSi7JBz=meCo5u??U* z%kAA7-d_mL9<14LKJPl014Whz?7cGegr(8ZA)XHpf{)z5^-g*3`Oa7wN`Eb3K&I_< z^5NkMGwNFBX#dt;(&)=pWp1V*O&j#A4)we?26S4~Z`Wiv4C?XcosHQXe3+5DZ*S*p zn(idSPn=pn(Sm!ewwp4O4}&(H&v#_1R(6y@bw&zEGoE~WkH52vh41(5JC$J%0f(onxzKn2M)Jp z_V+zb=lAnM5e+8dvz}rqXRR#rq+a9n>HE?kBD@sufC2q+&R6}-KU0KFR+s7}XYrI$ zsNJ-~be1YHMfXjBD+f@`jWmxn#L%!nz)`lH;j4TM?^JZvJs?gOwr9ecb}KZBObq-!=L^U_56u%C)k#ux@l5Aa9Vw!zhk6jq;xT zPSW|Ka1UULO;hH-Yh`V16?n8u8x^pXHHw*VeVk#X0mr)APGh@szX~%ze zfv2!gSDK8+1cLLrt?#ps8y-LF(7*BMnv<^31$hc zI9z)&U^=cXrML=yrFt0=tlnrKyub~ES3^tacI$=)Sa5WU7frcywm_h05x2n~u7tfR z`-Re$Qjmu*JYZ_A$bHr*}Mf>3O#}st6GpUQBeR^IX?($VblM1CGY%xxjH))^{CV?6X0eisR zc7gjUj3&Rj$HKv_N)PP(K_k}LuS+=b2+pv~6<0z!nnJCDUf{JB>QXvARLdVuDS=Hg zyZBwmo_~bfK3Wjqq?WbN#oZ}2LaI+M@}a&n87O82tIG3apP5 z*bC(^00wSzdbKbJ6;fGqM}a{WfZIayv`8c>jI++eeNDd#a7d)1GpJY0TU&nIkM)~9 zu3HjI;8#_kMJdukT`21m=@E@uncf5f4}cPqfOyW@eXf7%EIs{FGAKuuKUpeD)|NG? zDpBy8Y@*z6iEAg%%t~H4Eq!m@`moyiYvsP*f7g^b_P) z4P92ON)}zaGr^T4P&<1vDiYf_e*YA7Rn<6o_kv1%gsukN%m_qa)(P{j)jv2!2z9t@f`melT5e(jYYozk~vu5J$J<_J?(FjZ1!PC(cl)pA)nRe@+?Yqfs zmVNHR$S6YEasLtN=%C?D@8e7l;nw-VLP>%OqQ;XY%(w6X8r^19O8oU!j2HB3D0!Z9 zGXC3E{_S?pCg9@4>4MJo?VuI%lQaB+r)~HcSYp{n^LfXk4N%-h{7|}@~(Jn9|(PuS}klT6HW{*+zx2Eco_00xIqaW1fh~jM7 zC^TSqCxyLmM%e3`7be{Wm{%Gv^&9}$4zQd>@^A}=dRpz1GG1Ap-~{1iaNeO zn?e8vXLKpU6K^Jw`pBd-tW_q2wZ~71kr(Zr9-aCZBPs>b`P<>x4GKU*1G!lM6TR`_ zNn{4Q;6bGPKr&htRmIUb= zh{4OOtOmB^)(VjAA!=;)bRB!`WWng-;u!8iNd?LBNLDj6GBcUG4#v=7Qwj!uyF@ay z|GeY;dHZTJKC;=dpe(xj%r?Ixnw{<5a<_Ndjr)UMek%UMeQX)+);P#FiuN>Ul800T zw@_WTE_)KrATn}LIqXr!<2*dR>`AOX8*vCfm0q?RpLPAA-}rUVw{M1^QuMM62f#f7 z2DzL}wPFm%h-N6kdPfIu5#>2im_ljGNmxJOZyWPql0hOyP8mroT(c1PA4DL(;yc?*lw81u(r-0Ajc zcI-R_^4gVXK{H(^lMZUE7oW-KrzR}*t7oo3q!&U3{Sd+Sm!RDJU(;)TGZ#S9mXA)R zZHf8>JojfJs#Si&vj^*0LWaK~l+u58$57!$XX~mnLEFzta*qN%T+3=VA}#p}F%nRE z9=Lv~*@652(R7wkQMGRuKSOsTA>AMy(jg^-AUTxMFtmtt$ryxm2r@%A4DcWz(xH^d z(A}k^boYDyAKvdQ7Yon1&wcG{@BMp;YVtY1zc^K1YVhieSIjUQCS}8mq>y^dXpYL~ zypSd-Mf}c<7W>hDI3uE<1iAx>+fOCByJKE_{};vXEbFrxMa7{io>t5s{>nU!aRTh9 zBZA|3o2jYeJ`{5l1Fa2ko=N=Nd9hkm1xm*sNF)l&StY8}&J!-H0kbR?qi8(}zjxW0 z6f%9~5(vWu}D7Dbt^I++>(O-@JE+lkU!>4YEv|z^dPaZE=8@o8f|EW0^5FhEWJ0=%5Wc#wLyGy%S*0!`G@*C z+Z$RkcGmWuiFQD}6`Xe*K?x7T5yi-(2B1kX~Fy$`nJAG4Cu1m)_MI^{K9> zu{V=k|54hFT^({rO!!I~a5Yo-dA;8ifn z_SFg=(?ST8&?uuJ3_2QBjJ8Oo^RgfTM5Tbw#sm_*NKftzq}=fMWWcQ6OPAx4B#_8zbX9KPgClkt-`Jn7@mzMG0 zVv}z9|82`GSRjHiSCvjLdyD z%0oWP9UOBTUYY(a4@a*g|B3Ytx?P+LyV&0Nw-nZ0#0d-rWGa5xXL>0oE$x4J!*0|s z=(w`6y8x0deaGTbkewh2Y${A%+W$;DQCHXc03VI^alHA~~((mrUzjDftaMn^AU;|F$37Gu}?TA-2;;)E9Hf8p2a0PaQi z?_2384<Ken%QG7ECRSLMCA^f%B$M0W*_=t6Lf4zw2Fl7=`}CBdcX2IUD?Mb z;BNjh~rO4R`AsQkizT#k}AFE9jGj)LrNR4 z*hX#O`l7YQ)V%RB=pKq+YCE&2bdPnEBJ=QQtX z)bF;sKj?5`{RyJlE+Ul=){ihVq#5uU!DnSS`ixTwX#&<#91wz1$(~IVe3n2+Dvlm) zUY>+voD}8xL{Q@ne`jF7osKqOfpzzMin64ke5z}ECI;q-Xw-2)qFMtxC^=A!(80g^ zVn~Fe2qpoWUj`ERHkO7EzA;O1Q^tB3_SSdjjNwKe+a~WPYgpG1SaN^87hYCYrWmXV zm)4Uyj16bEx~<*6KT=+748CQH;Bz7DP>qZdID;mC<1Kmm^r?CO^6jXsGW`j55WA-B zSAu|U3_Ue?P;+zG#-mB&2W7hrVK56_apDHBX-AP!ZMw~NXnNW#wnv>1HTX$V9H2>& z)D?P`9<^{Ksmo6YQ06Jc{x~10An$6Y6?{nUCxSC3M{Q~jiM-a<4K$js4bino7!HtP`f}A#m=$j zI9>{312A^Q>X}_XKVf(LOseJ5gl2YeOJ`_uYm^DZ2fmkjoj>Hv`w+(L}{X&l(RXBQ<#MA=I(Dex@Y(OiiMD{9sl zW&^N&hN6lWgMlY`Xcl;JCMc9zx8Fac6Y;Byk$Ml)?Lc6abC^)xmEd)B02CF56a{cf zuCI6|q+frpxTuR_W8Kw%e=qJpJWQb6ao0lqMAcf=j%kq%flmCf^PPL_wK+p4P`~exDrpzN?C=M z-it^%%E-X~{snGif%|?zbv1&(`SD#JI^k*Sln1ZA%{bS@qOa8V>&-;3D%+dw|Nj2l zyBpUQnd4CpcWU?A^~jL+SUei<1SY3zpM4P?!290v&r#$>(-|pPNdT;euFsK!Id)Fd z`&*}PbCz|kgitMf74~8{DYK-6R`0lRk|75QMKj7yh^F57peM#4kgO;MvRQSc%3P^^ z0Y@!>Ni}<8;nQYj|1|ZRNh2v;+VGz3gD=^wA(uzgWFgQ3tNR}!RmjZD`I|pu&=l&Y zH9k~E#yg+1gd8{Rxwd4Ym9~J*YUA2!S6uYPnRKZ8>Gnib&{iqZ@=zparp9+iEn&eD zRy{Xg$;cYEn`8BL>Fsq^*!&{Lo4JDf$MSO)(*aQJ!PUfE=BiMkGK~Py2HAKTU?_Zh5vk3ilXpS{xd`_vy5Q1ynBG99QgWH zVn`wMjP>S6bob0q&bOt-%Q^hXCFI8CPtDMc!NcqN+Wk*q4Wcp$OSPwsFD5Ik&ks2L zQ{2DQ(NLEM&+VS6WwpkGfO6uYK)Utaf6FDN_x;n;(^t$p#;4UK(g|^K1K%`j1s{4S zK9-d|)v?r5zSmW5T+I>nJeG-9I87cPSDJo#=w4t|HIi3_@AY0ZR%z?2UNX|rE1jzl zTLq>oWF{%GEs8L9a~a*ly85=F{@DZ2M4~dceOY0h=Db>OWpQuZu%kTdpg>+^o(y=Xhjn{YE(y?^@7!!l&Aw{jyp_%7jmUAS4$yMG5(ac46i zx=!2J8|L!=UI5Dd`#-u<*7vNtWszW;sn#AJ4ICg!L(7Ral#Y~Uh?n^VEwq_0OuE$5 z!DBKB3e_krr~yi?_mlvoIswu^qI%`?cr;nxr((LJ;nsUm5PApg`bz?YwC-glNb#K_nBR=DvQnfkpDZAY$1`6W+$Ot4I!jT!jHgWyXMEABD?PR4-J0>G6>3g(xB9^*ln z?X38Jd#5C=p`G0k2)JUP1`Gu3G`m7vda{>}!T+kS^YANi^^c*MU4LLHLyCQDEC?L9 zInOGjVVr$y!6v%;D2WFDth>eu{u2)NTaq=VCFZEczXAg58mdH`VQVBv9LybxFsvSi*=%LqBXua9%n z*A8+x)&p7)IG>aTo~RNf>W32;s%Eo#U6jGUJ6_*{McuA$bX+e#DM=)LWxSeJ%b8I5 zaj){zb<=we_!vTuNc+IA*(I#s>X36AFT0*@q^EcWn!s3?ETx**=pr4amBI%y4!h+K z_f78!9xlGiqAoSbGwHu^$lmx+Z3Kgn>+-6Wb;CNf(yF3Ju%>D8CQovdqwe&rw9lkT$AFZJVKAt-r9s!ynm*kWFlFE+Ea7U1pMk|(9OQU0rZ3Ew4y1Bk_we`DrcD8t3L;ljh(?MSTd~d$- zIC&_<^QO^hrxRsp@ojZ{xl{S=KfR|gIV#8t2QphDLf%Bt8!UA1~;ap(-v8C? zX8AeY%zS{%d)-G){%08zxDiHXdb^-}c~J!SwmIxTl*zdjh>#}fJchDUz)}g)pW14P zN?^)yyy;;^N3wk{@qy3(k*ZXb!E671uMvzK?E)=Nw;N%1BLxXc`7`RcExU{%YdhAx zMmczm&62Ih>87baFq=()qzmi13lm=A{Cc6l%T&iFhU5SgfTeqJC7p~;*yI&q7c&Fc*aKgfzd2Q!G+&-gl1k4XWZ<{U%F8#;CC|%3a$O?? zij0XroLcCrYx&K#rrYVsgO->$i}kGIXeC}U6`yy7d01>1QN54oK}^Ut+SSQ{ttjB& zZlmI5V@(>lNj2jy38S4n!j4EBl>wmC?b}?If=qJYOeOl_AE&Z8xELwf{1Yk%ODp;U z0X}yHqAfn*>x*}rnZrtpBPM{-Q}A&uc=(*(Fh9znOy4La8;!>c5XAx%bA|9HrbOm_ z#f6MM;UKkRbX;%(l8B?S^gtWE4G81}?sI%kO6F}rgc1zO53vIaujo1$O8&EK4LY^O zXSIW$3MNjBTsj66M+%1&vY9#IW=OB+8u^8-F)}huF<^1^d7ejGGgcM5VMqUaw2SmYeZFW|z4N2nZ}?~LzvO*BRA6 zx?#14tE)B|O_&+-<6aijrIvyQ`2m)t=w8|#TKId(WIhJ{qg`G5{CBB7B0ru#A7^e4z|=NNsCbK6 zBeM`~TE64m18wvD9_NcDG~GW#^!d_FUC8e(KP|VEKNK6n6bGs8B9WHoiYo~0vwLMv zMemiL;ZqA|Yore!hwRUWfj!fKAR`Egl;UmiOHeckySf?MiMs-CbhX|gH`q%-p|opG zgV(=n9Q%uBcflUHrRxKshm)S^^D~e71w2#D(+mWXN2n1+O=SktPNA-{AAfd1fVIC} zAP4&`Z%Z)9HMYK9J_OoMVj?H2UYy@ewFfn@D_{H_obznI-L7hpFAf-nJi5xxunfAO zd>V4L;Q70Tq`gGG*5x*Wbjs@ZuV0DLPkFBoae~Ciw7F0M-t4P)YUGyBo-Eeh^^IX(bR_rCG_wrJ85Xk=lhmNuiH9Sd~Lr)p~KD2d|W zOu2RSuSnP>WiKCTzE4vOKMEgZ0mwwzM6X4Kb3)_u$`!|V9j zz~cyd7Z@z3#-n(ED|6oWk|b>QrUTjn2tiUA%49SnGpw!<#UO~iTxkqjle~7H#t1BV zar}G&6l+r+DxSD}D5MryP0MFio&Ic6_hPro>T<+BUiP&!!Tlp_0-gHdt^CZ{qj4j> z(4AoEFOH2q6Hl&LzlQloR$903<#=8uOuD;OxicZ~Ac@IX1cu(v@zjKh$DxW+wKWTS z-&)Uq-~(Kc#8_b&UPQEvnBM4Tnx@|%pTH1{p7n@pYR`L5xZkf@A%TBAkb-h7(GHED zmnaF78V4!2isZ!>dWsUk+beGMuNEfvOhD}GV3z=uuC9PmlM*-)Dqc3{asyV_c4^-!K&{#W+oVE|?K$7IQ* ziWccH5~EFf!j43wMIs6rE_gC9_zlu>Hf}#zVSYS{O%COkV$>WRN0yz-A`%@3n@J!D zy2Mz1B$8O^qm2m?*&m`k`-m$1i2?w728AR_a_JJ~p+1oVAcgup0h`Ou{dC@N*8AZi z)t?F2S{5HEB;l^Ed;q}<_=7b7$bW8VG-X`i!b%D8c|itP&grOqYcu%^Wq$)egNuvR zt#$fzo}ti-XVa~7Q=UI!u?f^M>~ACSAj$Y7`WQ+K6gX@brSK*}sIlUD3s8JTD3vD? z`rvS(vkD$XE*-~{fBMBtez*PupJn>yB1nIk$tss9oH`*8O5=?~gCTaMF^q)JICJoS zWhrI*pcee^@Jv}@rC}}MMeWAOBNM?$I$&gYcLmk_`dAk%LI0CFwv*l4sfYDGj{*-B zSf!hH-iHY(qcO=&cY-(8h3P(-+SPH>Rw>VYyZVFV59yxDift!J}4M+q&yr4g^x z%frWn0~e?hlo#8|f6)n9h$nW_KSBzC9Qn1!X1-UKp7LAZ!x%J%1ila2*!>i4xS(#o zJ4|>QQH+X%A9TXgd?qo*`Na-!SMN-Mb?!$HiYHoLcCO)S2s;2w#xVc znAJh2nV8nfT)NlJ$ebrEHudfWe@?cjoRt2r*?!D>ND4J}8f4j3R!m}G#PJ43%c@)X z`8UR}B5?l*P1ph5^pQ`I7n5l^p$6@$ZP$A*Sk(<^STA~6m9I7nx+mprCNbyJzV((% z$8?@^{yCv^f()^+o169pFEDDNcvQZx>T!Sj1>~ep(t%aLuA@y0&#O*ver-C(X|kK4 z7$^oR{#{bM*NO=ISNmi?M5jnU+epaopUh6`z9Kk;i!{Dw1#;TXs$bO~S1Ze6Af}ee zp`E1CR>uR+7*DVAQx69F-YfoZVimDIYRk)GzsW|ouJrNdG_88JNrKVK27vg1pqb3e zp<{(DiMk-&u^CWQ*erjpNYWva^TVUw<94TiX>zV5aOsQSn?WSQl@6vt{?NHSLIWco_p}XEdB=5Lc(%JoSOxz8VFf_R2&Z?`Cn~ z)wv?;bquw&*T2>93)W)J;^N^9^>SLbCa!NTG9=^1^Pg!mviRlCdZwU|ccH>h6nngR9 z$+^-^XXT6fNjZ;X7Ly0K6GmJQRhLveY|T?qf<1p^*jDBK%QF7(kZVgZ>%8%+l_!am zc(R^HgGW%1h5TaR7jxp!SfGN@1O{GG1J|2XSI?s+vKmyK!W~?JTzaSxmZ-8L97?P5 zI-W~VqVCUD%T#_5JS=5JFY#XPbu~n-0i=C4k4$O53dEh3WcNK=1>5aI$b((jL%clZnB8AyC zUP`-g2z^Za&4k#LM9>T9x}q}7U)jOAjg8Rx5)yxK!;R!Q5l@Uco>xYR6%iN`5&zHM z%-^-%O`mj$7TgcGsDGHlszwe#unFkbDMW90-(wm5?>hHQEHa%FfhDDaczmS*-s;52 zsVat@Afb4w>Y3h#J(HWLJn8nmBhA{tA#CNht9`sv$|o{cA*3SuwA4E(;i4ZN*$|x# z^Kv6FjNmsJF#ZmMiAC1US~<0y)%E6tj6T6<`8Ji^{6{uF&!lsm5Q8bqcQ>Zlcm>R#r9UPT%5#arIbz_W`y!_T|3s#^ctZfQ~r05&~_*a zynu_!ep0^cKUX~Hw-$b-bG=+UJPZbCsGjMf;Q$FO&`W|q5h9HtI2&4N^bq|u5~vzE zLVLWBEuXIr1{17vmB;J-xkEt#|m2c41As9Z$A1)`9mBK3De!y<5L0{ZZhjUfwo9Q^mluxU8<4fd3$~UVorYbPRD!QU zwwH6=*L$%zsq*&YvvYE?NmWmG&`*tReS-n@t$);dXF-bA{+*niXt98$7-q_;+~dKg zpvxQtF~-nv3UY=M0DL%X^uLc=_?pm7l`jTf&H0V8hW%++i*G*}2nH_Z&)>>QDTZ#n zu%bp(y*)?D?_Hb@wVfsjIy|G>z8E~*@J%qX3hkLvemhcA6muB-{Z)h8@w!mh=}do6 z>nnP>j^O%$ufm^y_kgqMckdC9@^wW{XH8^7{QCYj;P!>EEBKxT**+TbZeU3M8G#g9 zsJ4CMx_vjYRl9i6vmbWWpYFe8FLUy7DtE%7?dh{j905dP3s2=VU?X11Z_Y%s@!nTU z^&!_YG0ZcubrXD*G5|b~3dg+{vDvl^V;tmn9%vXO=$`@orlt94Q{U(rxnSt&)CWrX}Mv&{?1t@{xF|H)-Kl2Fw@&6$3)Hi7l|T(1l8AG z%mJ1MP|9?bKS;1e3r6$?_V z-(6VlD=Z^!t*@wV$Y1o1xTX#%pO;3x-bkyQ`@Rq`S5?fz%Q|0!+i_J9Q&uM3cJv#U znC|m#_}JK(^ul4^;XuZ@S@lcxWvX>`DYr?@Of7jdQp|VwsV+aRkJg!fA^pzG8=`k| z(4^(oX9gIZWN@~0FWc_1kRCebJeT(jaFB5WF{w+E$z*MU{eqIf1&UTm88PpU%9^6d6n5wi^cCc@?`r=4MB?$S$FI~GypkfQ&-*VN#OnQ>fEKcHlA)2f! z+!b$$d*+N(cYB2Le~4o@(0@j`aYPe(K&{b>S$uu;$Zx@Ss(@S`OC{nrCLNd3>-AzV z=)qBVc=F>ZOv1>kZ79_hK2D*K93$3UZ= z>Iwh_mlMFr(3JMj78mm~Z=+H|0xM&GB{T(#~ z|4%M9Ttx-Iq7+pTeG1@?zr*4L-g5}MIN8W99!2<*lanu<4uiC(%Rg6AWs^AB^AfUKQfQYVbQa6Jx(yloKdm+vIRs`%c?NX8Hckb0e2^uz5YTyn-dUl6~5+ z-?lfzGJn>;A4)zHO2+pNdIF8NV3xzh6@6cWP0v=E0RQme!w+NX^}mz4{C{mfJFpi& z#z*)MVg&FhSEeWF$Eta=0*9aAw}YSrv+rLaY*?NbkhW_P<<-hBFU0V;WXR*$O%kyR zI=_Uzarb%BaPabEH?#Y@$Ck%_=#uBFCNG~KJ_qbtYPxZvbxKm$oa;sOS>=S#0WHlF zfMBC2j{?g<69$RW3TMz2AOMIgbw=%V2F6L9M`yCu%+p$r3dhdCxpgAAG8=`unhcw7 z_1&4A*(DF&*fB2`d{hE9vr-nrOOw%0d7f*7#6kYaOs#<~%=e-11~eNjcb36>jT^E~ z*`u%OtD3iFOLE>`Ikh)3!*H23VRwhJo-^P$IjHov^f{e!<82T4Plv9}%*8SrBRL{|Sg zzI)Ap@V_5W49pJO%fiRHxG|Mpe0%LdJ|D!7$O|tAE&S3xc;xbX)1G159&VHW-Yp%U zteJW&)?C);E!25je}7J^-nGTW->ow9s-BlMjG?1>KX}SEvW4dOd9!=xP*odx=GLpg ziq(~7H8aZ0y6T^A@I&c;;l}f!OGS~)M}`>rQ?((hu+#Rbe=p1*__^q(M1xv!4K5e6 zbQjH|@)VjrXv9aQIH?#RZ(0y)Nm5Q32b1+~OMI&l+V6_M-S*liPmJqWQl*P>sq?-%z(M7{&0p1 ze*?ebDt`qqgaHP_XmtKDnM!nDAnz}`Xcgm$%{M?H;TCP^h$axFw<)o|PJpP$beCjo zu2KTQ=Dt@i{N{Y8B&?HUZ=_!o8`h6q{upXwEZ<(=zxgWAzqPd@*pGR(q=sn%I}Ahi zniFK#r$eU%K{QO*QC>gm&BSi`19G|jOd}whnxDtzKc7K%Sqabxq91;mhnqXfATi+f z$o15M`@>?O8EFSVm^-%D^SKE&v-Qot!7nYGlU&AsBwwR|_)EGu6!8>eroIVBq_sdzwcI+1lu|1!E zk4x2INKs|o-~IRYdfVCq`_~t{n!wyBhR;E@Uq^z0>r-Gfk%%@L?9{!|0{XNiDodVV zIL+lw%8-dRglt-*$Lb(L>(s6n13sW#iY8S`+eP^Dl$COevR)jkBn$`zf^eH($1hg~ zbTYACBe88ZaalitQ4J#)p^M#WCcUxI=qQG&JGf+9M@UPki0=s`oxMlBuCR|Qc{Q|m z9K6~sJ*A2Y%%*dk!Z4v|YFr_Fh4%2&#}H9jN?QSADOXdYd@cz!%3}r3Itw7#DV7j{ z)TG^|HrzCP5VGmp1gl8=3rciB_oS636LS#6gJ0 z@97A-WFyhyxe#`l1ue6P1gnFhl_bzWde;XoSCe0R@Rfk;GOo#-}fM4I>pI(t7)@@&{)GFhj6Nf6du5E!7>%BSU(0^O< zVKG_cShQ>i2sT1ZivW_!#$WT70Mf#&5-Ms0OTv62uEtq*(9+Vdg||rpVg=M?q8uD* z^4T;=u2lEIJTQ8^|`IX6bAgXR!YHe>L+OPgC*#t3m^L&G^WUEC#dce{Wbh@p4 zeeiVhzlHnUh2i>F_ENI4m&NT32TAxWFGURlH?(+QydXeTi;?Ii9(DX2bPU&IQ+sj1 zHQnUAAX)VGbc>%?0}*6c?+8ECF_gdz{|UC zd9WmNDq-=cYOt~A*H4q?IxCZZZSa9}<{pKGVq4VBCyK%qR-BP zjec(2-#rDB#TV+`W(2f7BtpIiYP}nt7 z*k?-tY^>mp<|R&YnO`vTYd9OJhe&Q%+GgCD2ShJ-}vf*zj(B7 zUw^xd{~@Ez1m>mD)`8*Z(G@BtP%(h;VXi4!2mrN}EKV#9RarwAZRfWr1SNtETVK{$ zJNmc$#_uP2d@s^@X}+rFgclOV0vw8f6!qvM$+9i!`p!-#IFU$3;zw+_Pn4U;)a!_j$`Nz*EZ8X1yUMOFD zv0eo}^Gd%zwi|J=v9V;rk0l5tCHB=~VLcWHRxK{t zNt!i+x8P5`R`gyptrT)JH(40pz^)N|Bq$+O?gT_If(b3GT=A2@xHwJAnJBTeGU5(% zQWZ{Q;<@6RiShCAGtvZ*cVSCbUUtb~M9us_yXGyZV>Te^#j8y zqlGxjmg+fwU5So?_dh?ChxF<+X_;!5POS|P zu!X<$jD6ie;6w}ybO}bN!cx|`UM!c#h6INrB-{H zbl!G%p)B+EZ?q{X$#@MOMxW34FeVZl?)=~G^spjl{+)eV?zA(-+0S4%vqr~69e?u9 zjB+r?TQ)tvag3d=_5wP92M~%uLPPIC*d%UlpYcQ^stjdKq57cdMY);K(79EOLm%(` z-%wC6O7!0h&JFKn?evyExLDJZT&=RJ&>Wk7)x6)eFhc9wBCDu#couCpQ z=z0C~q*(Wni38W8-R{o{jEjMX;D*Z(7c5MZ>WoQF1#0y5#D0haJ`3qoDHjx~s@5lx z5@wn;CnK03qgq((Q|7n7+0S05{J$3f)ZM&)JrT*s&Td;s?Mv&;r_yctx z66m6V1h@dDqUz#ik*eBQ`rElkkMvh_)6>@X6BE6xVJBWs^RVvz9W_4?et94rR?Ule zcE6YQ!n5`Cll5(I?Mwyv?&y{uPxWh19K7D>ADVI64|T1>TUS>JyZYe2%fxzru%z(R zP;@)1V87_|HYu*YdvM4byY-8d#h|?%tMiDd9IWMdr`NsADXfhr`Ctv(!r2U@!&^Vo zNNBub^A#$6I&j@hL~$)vVo?5A1<=!3F3xZgX*;M`{2uq{?4@D(#4>zb(1ao>7eren z#R{jJKZt}{NIj2EOfP}=Rg=%=>Zi+YXe$_W3)qfF0>@n4DA&hQe%`f7w<9k5inkLb zITz?PVE&9|ugQCzIxKYkUz2YP-F~)HV{IDxtce?N)07xUCMrr$t^FMcO27s})P@UW zK=cD>LY7!)%g3EPoFO8!%lZIUNyPo&+3;?)S!CML2Q$vQob{D z_m_!kWI+S`o2Lg6=l6e_Jj2`$57MLDKK|)4&;d_8({PIX!F2PIO(e=`v=HOUUyS^t z@iMfOC4`=ZNuXT3*dX~yYN2zg9SRi)fAhvw?%A(nqXdPpfB=V;RmW;{K2cu~g#@=a zu%3KskWx(Vw(v??CTJs)X#yh#Az&{oOdT?cg%cvk^8}w2pv*@J*!VEU#^Zv;Y2?{V zc*{mZf%n6=rl9f1!}7eLc>I^<#Q04tkM2tW4l92wePcLYf3kpCGR+_8#HUgQfSoW^ z>FRTGUxmML^=RQcHSo++g{X-CF60qv5_XtrEXiuw`LCI!=KdKN*45$4`U?m&EUQf( zs0N9C1bE?^Wp=dP8ywHs(>c-L*9GSTmk_9zrl8aCk~JX|J{_3Nx%3jKy*ZXBo?)iQ zKrCzPA5|~VD6R?@HKHjMxpGUA!$B1VXh=@p_Z<9T8pt z+dE=|@;vdVTthS5b+eY~_KlV>vnHRdA1x{4^Rip$1xssp;8I0GZUQ$#A(m%?g_*JryEx)81I(Nr!?I_2<>D zr`Y_wK0{VPGU$x;Z?5{Axa6qP_|w*FD0M1KxXzA67}B-m`fECmAN=nR-DIXZM#8T zgE+40>o5+ExRw7kJ!A+^JLQDlou#m{FuJld6qZVPW1vg->%8DEaM4&Ew$nmq`Ce(O z)YZy+v5{L|`kO^%a8SyI_3IzfRTo$YvCh!*l@sZc#hBkTFLdj_Rg|;>D#uttsT3;bR1-c*J;@ zH7H3jYs4RU?8P)9pCqSZ_bo?2oX@kXtF!QT1Al$u%?kL@{YCJhpKh5ef`k z*ox)ACW?)ct4GmjRV$n9D1CyC3J#a;u21EfA5Ux_y9nrmfGC0@JG>6tpBQIdpyx3n z3J)6T0u+;ppmCmexoA)!kldDJh-AP)oHX}mRPi@0-ksB{BU=0fVY9D8(5e@$@KbYM zNwF&6&5d*|b;Hqd4hU_0x*zE3O~5|nEz!J$0Jn^bXa14Qe!l{FbLYD8l|#pTr*0El zOE7}u*@ff+9H$k?jX-Tz(AAipkA&zG7Jg*o3a-=4-iZ6E-X)8QqOp*uRj4!6S(AS| zvE}pl3IgylUG{K4OCy=w0lR%a(u}0r)nK?M6v(;C$D{b8%YB7e-8c^>N4zb-^Q#{#QG z32LK~V|ihJsVMuXBwdnpv3`BNUb3atlS?y@@Khz#&DDP}6a%X05~Dv#g$JR@&HxNjfDl&07*?yyUz$1&#=&DoKHma#Bqi4@o|X*>cW{u-DV!4A%`3-N8jp7+OJNq z6WU%+r9L~jx5=LyEA+fp&I$gL^fdc&Ko{(93u%DlZfHx`KVjbzFp8O#sC6iB@u!>% zKj|ah;DSXiXXyz_@dL?VKCcj�{OugujDqH{N4wC8zkwJ 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 literal 0 HcmV?d00001 diff --git a/asift_match/src/book_training/train_image_001.png b/asift_match/src/book_training/train_image_001.png new file mode 100644 index 0000000000000000000000000000000000000000..a6101e560e300a749525b8460a23509189f7e04d GIT binary patch literal 565124 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

    iCdHV(nI>Y<#P%a3ZFvlnKQP3X8 ztALe6wzfouCaFMV-j)w|JnA5q*wvzOjOFWTem)vl8VCE*tCJR2cPA}d6$18cnr17; zodyCTNkWTX2DheshJ+0fbO}{gLL(_gQS>wVsE1LUxYS}#Z%D$4P&EQghCsnZYy{!e zNnBssOyQ0x2{z4Z%hQ-TXTRSAcUSyc)Psfpuq*70eOdex=C$?Kw#3GNcCOv(nLDV7 zcTRIW#>mTg<5z-rYQn-g6IbqN2V5Hm5fGG6P zc>#afJ%6(B=g*(bS<%`&zUd5GlNPU|iQ~PMdD#;R)&U16lVn++sB0Tdn~j)!=KGMm zRFI9UtE>0pP9`E8wBESWcGPjCPZe})aIbWu-?FmlXz1a}-Asj`RSR^q2Q3Pv8MD#5 zcQ$1qDe5&y2}1cy`2P!C*QAumJ^qdnFk;+R3hB~D4O$^Cn3)V{}}-3Q1{uhcu_M-3z_|4D)}SpmZ^I0wXx~SCdA;Lh%qz;g6_@z z*Cwp~`Qsh`r2{@m@cDvU%y_xMCr{hsQO3&xps5K7Tr$t`(spG9=>&YFz2*nz$~`-Tl~-b;ER&Cwyz^TS-fD@Y$Hx|fWtCWBTTHd#H*;GTO@HG zwfLF+co*9c#3wtKM+(9a zrr?`_gF3lHmFR$tdL@4EKMc?4wUsP8MwE9Hahtscvf{HiNbvsHmVzatHGlkq1u_xC zFu))jMeaL(2w9*;z`Gb#M_}L#?GiI^ZqU#cBSdxb`C&CB>C7+^A)3T-P&)ph)m;?C zOp#%k)2oDsy>GZj6U8ZC;gHcpMo2Nc6cxuCt;|OwSFD>m z`-DkDQ!5spVBp~6_COV;W*<$}fO9g-=RJ8pZw^@QFPD{$MC5xC|NQ>htoiViiVbcf zs)-14|JS}}6*#oUg(`O$`TO){%jMs+H2M1LG2Or3me-TMT#$We#S8Dg4fQcYkED4% z5&jfUXP%~nktnz?;$Rt*zo_Ja9rgN*`_-#CEuJSo3VXX1E`-J20SQTjMDyOf-)_@+ zn!J8R`rPr)UtsYfDEL0>Fss@qTJS0w?tfIp3&IV@*ABz;7gl)hRDeahD_;C&bm@jg z2c1P}#aip-sX}^s`tAe3M+`b_2TIA&Xl;EBz^4q`>hB-8_!$slP8XKu;_7^{zQkBz ziBDgw=Hb@j@6*VNI=@p#s00nxUe6zn7v)|3nQ*BB1c(8BN_5G>Y{K>^;XJ>7>entjs>qY+?O^eF1 z?rLY-S49rj=L78>9ap!b1E_9D=`hHlf;MKo>;^KWgHP=Ei|Xc`Flu$F$1P@VlTB{( z{iK^fvpMp2s6_w0rOb&D{D)hu@aMNBY5q{h^VGb!G-UvI%{CJ~zhFQAdC0)%D_9qp zTwduc<59|ZzVoZwGWgUgjORnn=F_S9v#xgV77cI6X%4?i>iFvZ(FY9IeCL9Kq;6m| z(hl|UUh=&k&#u5w9+`etV)1DyT0uNQ`gn%Whb;&H{b=@yaW(#|)@LmhYm#&RUSNv* zZFH}1y`aq-licupuv$kNt~I7Bx;-({b_*(+1MyLzd=*3dk9Fth7@iUQR7@pH!#X{A zg6X)AWRVgVqBKR2$38~*elrEx9s%gsRO0+!$)V4^vAD$samu+}b=%1{S?8ZQU{rPq&l^o^o zqf0W6vtR6&Zp<(#j5c7L|}JB$gPTz|Me8*pgRnzPa{ z#i&VZ8S;0upfN4sa8uz_`$GTh6t$3kgX4_tWwdte&7hUA@wvghX7_UH7dy$CaikpU zhS&jX;`aVE)HGId3W^ z>x_G=QnXc+zU-tn=_(rgK)78+#!1r!83$U7-})HdzL4?I%F4pbVw!VB&Px?X{|bBm zSE}Aklm6Y*G}C?(7{PVgd%~je*tHQM?Nn<4EZMlYd8*0n4-p+ggg2oc_yP-eo)BPx ztv?_$o9qdoVyVHFifTp-5m^^wnUV>5K6Lecr&QcfL>6KO8W5wnZ<&58CF+Qdq$MP= zD^x52WeOth!)T{yFgip)85)O4{hqA3t&(i}T*PKqjewe0bgfqSv2kinPV3);fT?nc zFV|r~+g*aPvM-A~pQ-xE%XIqsxMt85J9rul=COR z;|@BE?Pze7XIQqv?=RX*-K%fDp`W=BgR^8Q2O~OOg_FUitULVTntO9iZUCWBUY<$V zMx(DjJvD_7IE-yMe7IrQBvD^mdz@i)IchD%RAB)QbqY=$r$d0MJ#0CD+BB=K0-9rm z<0Wm7N9E4|sj6eTs?xHucJS9}#jnQtuSoh1fWF&S!h)o2LQm6vHV~lQGpOV`kc<`C z4dBmNy2>6^iW3rr#y%R<4%87Gbs&^;tTB11+X*n;=qDJPNb(&=ib#!2F=>xG`n;}m zLF!+f#6;nQ)-$@J_GpHZ((kX9OY7%FXSe1XKjoy|6?!Ooy1w`oOqsHl>1uTP`MIZj z?V4sUNEJ?A=J7d`@@i!VuAPTS--x+V`WwH-$5S@nH#j)&v*xy66d<`ZYlnF_e`yWq zW{LW(AIZ~iEoP&)&e$Gq0t9R8-=ER8x|v7odxA!lXRFaGqh-IqWIb*T5C`UVAX&Zjd}HfBFqx*l=+MD|>gb&uy#LORPOFQv5H0@EEDLayX$Njh{+)YT zY2TU3M-wWz##>ikZxyhyG4w2x-dmUMU4!0uZQtDOKD_fgq23B&QMuD&Sx^xCGp`&E z*xr19s5RqmY;5lg@bS-nWrfsKRRtf+&@)tNq&9F6aeRfv1Lnb38BCWeF~{GDJ}H0r z7w`DBq=fc6P!!t=Tk&J~gZoHfQjW&*B)#lf{NV=>)EvqXnwghIqWgH@>$4Z8Q0C(Y z7F_T#>moIDq}q@jCN7-?K_Dy+y~xDAD8=^Z12`$6HR~|w`>*mK6={1SCNg;Qtc}39 zX6utztnj1m=-1 z{AWU{nA1uZ*aC*l+4_+22(f*4psHS+)V7IwpXtAKF@1T|+SY1i2J?=#a5-x&%TYL) zw97f)E%!~Ee8iw+9U*hy*-?Xy_s%vp;_A)fqJ}f;`ss$Py4Tf0z1##G*fen+&9C&S zd~dR`QV(cZb{oi?XvGU%Ti5n(Sc?*oFG*`49#e3Pdh7L96ZU<#FVe}ta*Ap4HM)rI zX|*90E^02d`Zeew#w%^QhU4B(NOI%*HPFOy50sER$|%$mwD_ABJ=xhkomE)WQVk`eD! zdW1|G%P6{EM;0peikjfVhr<_lVV+RUdHGKL?8xm3#O}7>i|HTIPoPonrZ}DvR zj4V&XwKkj98aij2_DWnM0p3c*Vw@d+x@&*Wv8(X#j#Ig$rq_76)z+b%YZJP~A$>n< z6C5<8TOppn=kYg&ptzj{#x~&vQp68hUWa_d-%Td zRb8E<_x-+K+R&`&Mdk# zN7M-+Eh=J50D>j#$SrPZq%tykWqW(u_)dtupPwwFB&*4P%5Qwv@|}N_Y}Yg6#seQz zVr7qK%I?(p?j`gq8NIlj8my{>KKNNVak=xHpF&~7;g9txyN5H=-v4{#cl$D z%Y1(1#r?~G(J(V}=DZ}2(&mqj4n2JuTj?0sU9G%z(cCW*>Af_?e8@b0L^=yTM#@B? zAl>!u)MLq+z>68TaVf<(hl+%>1iv)P5-NBRKXCLO>3{-!sh5s$j{>ePspALtTwDsR zKxKY|X00iH)!5K5^q_VJM(?{DeWkncX#B(>;raN zpTa*EdFK2R%xmWyy)RvC@dKlM3s1|s`TWeY662SqTa(PT{1hM&}?8AY_%nVnYyV+&w)f|Ct)$|7Mq04P?fNg zJ+#n@%O~x!AYgV(xQ;(SB5{sZHtijw?aks$%h`Nl!C6zlNvYcbQm2xR3Pv_fvgKL4 z0s=*W@fqRd@J6>xe1%Oj{=gFLXzh?czGMOVk0En|`7X3uUch1Mp6#h_8g7X556ma|-79p( z2d;|7)CYK6m8&FNvP|I|JNvR%JR(h;-M-Qg_h_kC)P>Ol-&DOR`BIEy=x-IjU_^%jP&p0#{mkQeC|6ae~kT6QGmwF1qSZ}w6!}dFjuh@M0)`NpBz1EVAuYwq(PNVn&p(H&>B^LGSl<+5( zSp#mUTLF8)ij2u%u`jcR9{+|2fX@pzxqlt&*h-O>6Q1T64z}f@ruWvNyyU{SQYiEa z&~!%HD^3&)5f**P-X9xH;G;%sED#bWH4GSLU$Ej}d=#j?sYMsX^Gu>MYm+m!%itS~ zk5O3I2)K+P_yZ&r4}w_KUmROAv^W;J_z@HWZFOwknMJAK?W1zITT)ZXY8<$_=&K;p zwS4v3;IjW})rGrY36?j^|L?{d{Y|0hL`8S#lhe+aWy+X;PbGLFwg##Oc2o{$ zy6xUB+u`Cz(dfu`a$60LR)t=8~Bp%ga1_7fwRoP^>^G!z#ua; z5$F^gY`wsbfMwkLQ4BuFxv;rH)p^4m`bWXR2PMX~cYw6XvZ0Ccdf=gqQEAv@1b4%6 zdmbosmNxQTj>k4ttu1et&~_U3=@d~ZP<{@%?`_3TG<-(qz;Oy@`G*{3Pr-@ z!SpQ-Rx60_EL7af@vD?N5@4ZoLY9dBZ_&@Ir@VH*645|HKOukO2ECdj9^60H1DBtT zB4$PJU!UBZ-)(keo&XE$R>#xm^qvRZBv<7W;MdxuB!(%fsx}7n6tnJhES8m)mNp#C z_LvQ%mQ-NJYv;bj3utezs(xSg@9_W&*rg4}>q-ERc*&w$#_&%jOX41tT7LqeUp(U; zGWxE0+DJJP&=*x7%~mV-%yyib!}u!mFdBvU|2^E>%*i_FS4d4hGWr-i8XtLvkkjP~>SfUk1E|0frwd1e~yK zHxu{A_bE$D7w9}GWu}G-9W!S(Yo=fmIJk8u4^@#rZ*(b8e6oi8_u2NDK5=A|09 zhq6AvsJR|aco&F1&l@zCY+>7qkcXX^zWOPS!c=k$)e_pi~al zuBh(qCJrPc@Q?L#oJfvX!=x`9T``u7vFQw?3iqvtL!eyo_&7e|`ceA6*}ym2=g*;} zYN^Txv`x|XZf;XG#Y>@4Z_;eimFB|fhY)98-0BO5KTS`A-aU}zsx_MLFz2~X;(9^d zL@}iQ`wK8((}-2Yq|+e8$!*BcABD<@N-q~i8|roym%7=!B~8ZXvzg}O)a72Wb-BMy zzZl!r)41L-bIBs;KFNhkgQ13M7Zb9Y4~nRA4PKxHUP;e{?npB38Y^vto;NZsSgZXuzQwg zSo`7eh365%v@i1w7}X53*f3-XQXx*C#Pt+t2pn;*L(!Munu1ct=e+sshcZU~w+kSw zw~6Urc&5%+7h0}5b|t#DF5pp+T1~kS95|k0mfAmlRcL}EB0p8Gf1LmGn8(%T{=z~bnTc`_rIi9Ix7OgZOmD;NDq|I zO@GE+13Q8>cuk)smFloR_@rlftoEbo(1ked#-M{aEH%EP^hR<(<%hzzOvsN`(u9;U;;gq1w&fVq{@?X{l~&r497zi{t>IJ&TQ0 zQ(vig_3BQr>c7p9Q@P^{3k!?9b$}W>FtzX?#^l9-U%gZ9E#CB{Cr=78~*_o~b zeiyz_Pr{*LKZp`D*+u!!%dnrpmD=vVfQEQ0Q!34KVjdJqieBxrbRzwbD8vq;KH>28 zb6^3cH}0aX&CfBre3y*qOIzRP-|Rd)ej~j6@dCQ%W4C|p?ez&SBiH%Xv=7?OvTr(V zZM>!*Z2R37&?p-^*uHx5ZXzfB_MbN#wxO%T^L=mQ!hB^qLwaMO`y(E0wBxUO0;E)_lOay%lLej|6KLklP5sSbK~x`v5HdQ(r|g| z#G{5WmjHAdCBddoM&&cclp8uHTiNcXr&|w6$>>%wdf4-y#nIxyF{tz1?s0B9!yLE^ zvMOqlWvLLlc+!Ur3}zO{;h*I2!Q)S(yiJ`jH$j7cxf_lC>;C;k{4;>ru6(RnLi3RAFiT#VdSKd z@YB$h)|Mz5wX`()8?x9fG9?#B+tjcAnBa3W|8=o21y6P3eyMIV(NP47!D%qsn+48g zT~epVGD;Zm0LGXl!tvfs7Mw#S-|q|=u<_|Ki_UQ|V2Fp{Q5=qmuB&zLFGqkAo)09G zY0=L8aVYXWEAApwJ|?Y7fI_B5n||V;5{;5KrNdX@;`as(8YdbzKLi88W?+)=!wiBM z`_R4YxoIDC=L0=m%`{89X9S3L@_`6t`bD~W?5!K;3P>DOXV7Paqwf3|L6q@TxN6G^ zi9NN9QvRYAwr+faLU>o?yF}$Wy2dZQ?#OrwXSoESO$`S*@OM?d=oH=@Ae56hZ47kV z(<}>RD(ySW&CSPyPUbRvo%Pspv~}Q2A-7_>FVI-`SuPtF9OHsH=|| zhK9pEl@Ypf24d+!>2@ZSQ7m|WcgzbP7DuicD*T!M2%E*+8XWp>#83xGxyFujJfprb z@juTZEM3p&|6))Ba?kE6*z=-*Y3bKVG8F>I5F$a|PKN8l53u-)nD&x-ZXQXXQZiU; zr&RQ}$|CSVs7fm-6Rzk)Odq7DibSTmB3*BQw|%b9=slU)cjfi<%kGy7Zw|7a} zwycDr(Up{hsrf`?L%N8WV}8ArbCa4$Xh+G?X-{# zP=3lGJ%m6^KbMg$jAJO3x^8ldJOpKEE!I4meKofY_J-Y#2dBLL9?ms_Fq!r7G+HFV z`p%GFe=m6Y5}8lD0Egzi6E>_|yg)aKt1RhOX2a%ZcO2cV%mFUWegDKustKot0_vqoky@4<#4#tnEJwk@!PJJ?#ZGabe z5NsR#Vc@>)S)fJ-5VNXgJM9l;`D|_fsnhqUZ2X;WX_-D&axhSm=7`n0()jmqp(AP_ z^~+bnzGarw*Z7k#NVDpKfs%`L@_ z$Oj1`SO_Bs&*BrxC726dS?h}85sDkO@{unzvaa#-$ti);7STo`ZH!O1fVt_>?5d=sgnzy?HgrDuJP6B-AN&CebTti9=*u3s{1a{C zqh<=lorQVwGqbHy;6{ID&ZCw3o(HmhH)UPK{S@=l+&d`=oic?rG%x>y$FG}z?~ls1 zlovKV13KK6w-SYE5wbTU;a2^^$U`QdPvCJ+v(%F4MpcqBfQxOL%*KHUe_sC1E}X%Y z&>kZ!Q3cz5y<1y+1Hx!wvY+2P-Ce{b2m_7j2V`76xrK!S%698?V6_jOh*$18DB;j3 z_yW6^VI|A{Y(tsX{4_q@QLmdlZ8Cyj^OyiPq36HZiWHQEOk4a&x+Mfua-b20mJWaW z4GE=%G>U!0cFm8V(@eqKWj%dv&Vfe+%aO?`c-J!Jy*XA+8)!OB3?U@-=Xy z{x}w*T|3aBsllixgiZv7iC;JIA*g{VmQ!C8Y9%+T3FwyaO^1A(ui?06A6d%59)~jB zD3RwlxW zl42r0MK~JpaN%?t^f4M=0I8#B_1HhCd{W&H8#XE4XojNeXN39zSeJ;pyXoBGexc;0rAt(g#+ohlsmIz zq9vsEqb=M$O2_V-A8wW%nIK60^4^P2kAb9R;3)l=HSU@Qrl>O>FFurDo>a;}F-c znGY0JZ-dK!;zURkK`y`-RGakx))_MM;L0Kiyz|BKYvYua2eN8*igwJge%@|xz|m+M zXzv)BXMv-{Eb6p^yzVKyd^)Et{G0|~u1N)nlwEU@4$v(>Lk>crah0tRurr~edK_dR z7O;sM6!ZV5cYWqL_V5=|baXA<=VrInoNEEchsl@9GF?(4(tB3w7MmqD1IB%-y#ypK!;uh8=a3fr{Vv;eTmAeiBj0 zP(`JyLo3R#mk*XO88>1h1jbYn9bybQ9X|b9vj9rqS?a6fniy0W?dPd0wg>YI3nVQ2 znJecSfCporys9M9N4FiT^~=XX@=n8pz3H!S)*qUA6jO7ESi}~+y%=VP!_5wkt_b8N zXBB~dygzFLR;OD81|EhSE_nj)=AGchrBzpn?EK;oJ2%?IBC=HZ=6QE&QZuPc8BJ!PbPfqAkWMBP!?aJ5A z3L9QBxB}0G?Qg6*wh5lHzqqeR{+46ezIhmsecXI}bl|+72kbjn8g_sy1uO~ZVWL8` z63@0t7CxGrj|5$imCAgVXODIlz!$k--m&@O6pH-f5|m(NWRsWb5cRk;r-kb#P+6c$MLS(>nn%WpnbbD38#{|)76xG9<)s`p1Ye8WW% zB;0&ks34;fIJE?83gr?4oSs_OSv#;9gl7ac;?vQRf3=->o_mIt22yyn+J#C~+Q%%- z<#t@Bc{D#i?LDc=0tt$w8~E9Ni>aiX=cJZONV-YTKz8`bg})Sq(yT?0YXsp0k=(JP zqhB{S{m%})lhW6cdO}ZWx=eoU zVu!n8sh^8+?n z^5jZ-dVu6+7DpmD>s-H5ye=RV5VvTX;FMx@$Rr*#3-4mw3)Ewt>Em=w1{iIo^wm#+ zuy)!_uiy1O>a8s=BZywNGnFBuUvP(e8Q$2fjZtF3hcl=z&pqDIoX?hsQjeYo%_JMu z+Uol1kBvgp3C!Jrrp~x#*_H%gNHoIm)2JI^7QnDX4RdM+@^7)rSKa($+PGZTBi;zW zbW9=j{Q>gTBOrLb8RB!x27u4{iMF@vd|l+wI3qta*R$=h{if2} zwa-FkYH>9mypO-n=(nka9W4wLMVGV$I^!S$HDs{^dk1V@LJm=8)c1zf>El#4M!{`r zbY-`O5b|jI2>^mPt{(BIP3^#*&)cUs#qk6=;Qak3#x?S{GxN%98hq!!KQ)FKc(-qc z*q_7#_^X2NoP}c6v*=1J_GmxLLel1w*LsT*M&`09PL8JoEXko8w_J3CB5g10x#OYi@Heyg>J(6$KOtIQVm&)2W41iY(Uxw zT@G*U!}afT&bD+-?Ta-REs}*p|E6fyj2Zb)o?HEC_bFud@BF1yRoO~8!#1{|Z}M{u zK@;^(MIn>j|B899m4AHdx}Cu@ez$j=YsB6>p*stxBfR4QSMkC*R9+iDdx3!zYdwbv zzd;grgTQ%0pofY~(a|2Ox3e1l819^1Z3w{ShyBi0dYhmBq3tI2m&N$QsonKoqufBB zz0LQ##C&he^W=KjP_0W2s4%joDBa!NJ=rJGAS+U4I|3Ks|K*L{s}DeJsveF{tZoG@ z?)XeKSS`$JNf4ETNeP-3)ziVbs3y^w zH?Rn?KZ<~!%&e5vJ@#=Td9FIKgTlke`Wj-fN4iM1w7TZMMCRWsMBx4t$;H@9aeT0< zChVpOr!}|8#-|IhLKjwvqFOf%F~Ud&po5&J;bD!pf1H(0DwKKkRZm)0NUoAg4|BN; zm(QQU$xjFW+(dcML6Kpo3jjSfX;TqNVds1hE4;1|)hkF6j(zsDel0v5@NB5t6C(1x zDX!*DT9^o{7k#3*51!jMOxOY@9%yGfpDIs}N0qYT96Ksv2ownv#>PAdN6Uahoe{nz zog;+7vbV{AX<$2-g8^h_+Pk7o!^$7t)dkm(lhwo|%s_vx9KQ{Fd_{}{d`@Zg+e0t! zx&9Xge_|V z$%R5g7Fe6PJQzI{T(@NW;OEYOME+&8sXlHN18nV(j4uSI%X&wHFEOk9gI=u0^lA>7tZS+;p&sO=n%Ur)>QFhVR);8>5YzXYC)T9F>WdUdD zW|yy?t^`Z`{wtqSexd1n7s}GScGz1mukl~K4XG&XjDTL1YS7|a)Rzk7$-10XfiDmH z8o1}?<^on5uH^5|j(P&_fs41m^e(f7$IVOaxmWbwMkB z=*~(>eERW4;p2VQxW5NzEg$Pl>nn9fV6Zr_{znkOuIPp<=ItMhYjhtICPu^p(zYgx#F3(!uZ&>X1r0*>3)CUAw&&I9qcJj|} zePJW|mrISFy)A$P@{4!BVT5lOcPq@&Z)rSRK9pt(E!5}Jl!l}PS`7LbuHjm(q$(|M zf@tuPLVl8gSh&|v7hP?Zk&M%9^dh}sW%(oVa5c?Wq$Shrxs$1nVa`J>rF9gCm{ssa z01B6}YGC8P@h`=__Ts;|9(CMKP<v3Asy8cQ(!BhWdDpoBL8(Ohlf=o&AS0T(`#*g^=m11+K2kVo}rcZM+%j^RFkaQi4mQ&C!(eHhpK6uFDWlv z?z4(xUbCe$^utl5ru>ljYu9)*vg1akrABLu6B261X86_^0y##h^?k9?L%Q4cEQNp`k;Bk?knCE?^&vQ&{wLWy`;&V^vBaSf^ug zM~*~FDojNLh8nb`93#EZGT`i~RwPL^U)Rg@W$7%f<* zN-6>WScB8fxCXelgE)pp7;F2mxlqQoV^4@tLvQOM@4BRUmr#I`Upk>~3J38w&|l9YNM-RFF#b>HPa zX*zZP^X10vhE;{Rzzu4dzjuXmdYmFgQWy}Ni3P4M(>mfuauA8$Akbq7U{@%FsTM_Cozi^<-(hzb-wu`tZ9BgH(ly^5#Z2#JlM-Cny z%T197Acc!aF_Zmdh$4^PuT#L59`f#q{Hs6JN6m=&!=)YjQihYe?deFtFIbt)&GGhD<$~2;TX;Y;+J& z)aV*>^q2haIpwW8aAz!!zh5z!QejmzQ(IQ2j}34i&v-o_nR8J=RdvEz!7;`qAsTh3 zV6b$!;pl5**tk{a{4D^44Xg7E44nBbLI;!2q)y|>{LnoXJaH|n+~}o$<51Z8GVf(c z$#$z$NmJ~`3#XBk<=RBS>%o0w^6ueCoSdATWcGoXCez%LX1gHQ(WU&6dgibmI@@hI zqb!xG)o+{F8Mnb(ZdVU)COzy+w#|I;;&5Tv*xF4)0=%uj;JgeBC)zUX?`EA3r4N|c z=mOBfYZepqlS_raz^9^{2ph9V9uVJ!vO&M)t^=`VlEi<)&OfM4P^_F(_n)mZ|EF1Lf z7Mrz8d~$O39{PDKA7Apkz|DIw(wzE_xVO;vnZo0CTFvTeOk7;(3AZZX%cA6c4tI%1 zt95k^A3oI7WaNvXBjFKU7eG(!`+ftmb^gv^UzW(h$|@ zrKg1fhvv*`{fD|bb%O?yU_R-zIE3*W0WTdA&Ac=#U+(G3SGf_cklrPXOrkK-+i_Ao zhDCszx{2#a=ld7$Te(yOkRWkn9R;?HV(y*B4?AL5LE;Tbib5C?0MZ{VS=kD;yQ_xl zymE=*7lcmdI^6mhIMW59kNaaM>&%smWnu46nu6(Crzzkz)p*c(b*kd~FY+lK)rK`- z779=a+UzPRQPxd(aBujXT`VDjjVPZi9VMvSLWy{QMI;%JlOj26f`LazWv!~r$}tk$ z`*XrJj)9}{&<>&I@!%33Y)1vUx{^#9z2!OZAWX6ryYom{Rn@k$Rf^>t%-zEXEYe;3 zyVf(bu!W9x28V}j=w^De*YMX12&T|Z4ptXk49~~VHDNP~0fxeJnKhnSB|^S8+c4p7 z=La{(r04;lrRrT_zxal#{IJTqZP1BGG~0z-toH(?3-)VhQvhhsz#QPh>MY}P5tiqvg47% z!@5!hoLtQd!LJXU+jfVC>zT)#Vu&#n5)&$3552unrCC&V*P9R0yFVCKRt7gVoNp4* zJ`Wm{A#+VdnkF$rrr6s%=V3o7+OE#&5>-`LGD8)+=uJhX`E`B5n8!t_-kZ194*z?Ud@(fXJqUTnliJ* z--AuoGpnkE?)T5LYGVY2shS2_vnm_c+692ma2XJUhR$Xw`~MwYuk?J%QSn+pz|6Ss zZ)(GyPi3Z@$EbIx30ql1{pu5D73GcN%)mR9TcsG6fwv1)Kb|l@0x1{QT-oyuhm(`m zV2vnjC+|G;zV9po^*Pv9m$s?*xi+I2wgVaUFcq7;`aYn4VJmW_#{S@ghwg{Kz`(tu z&z}E!04m<<*s^gypN#yEKLc_|*~+H(-Q9n_cX3)AEQy{gGFI99{Upvdj$iNX8g_uE zv3kV)(Mj(r&^^80p5EB#h|Agg3S5N;oth=)XTH7@jhg?u2+R>-8zqe%CES0Xf%3lb zcyM!bZtnb`VMc!XI&|xRq^Gm~rsJv$`7c(MOa)LVh)nzyP8eFrfW^cK_=fLsyYXEz zap2U5>9xrxK`|&w%y0`~1dfP~8UYL1a52b;LG7E3*#%|14g-|Jf;W|>jMJm7ztAI! zPP@c1U5bE^XV7$A>72>{cnEuUBc^~oes(vgU|}t%nG2m1bii0*V`WKE!+c0DAb-4w z=Jq2m>1$(LX-RrKM4cj91WFvi{~IFzB@l?}F(zN7sE;_F+@r;_W7r0WI&9SV_ILJi zRQNg}Si~e^^%7$2l-Ac;+uuOnU zRLRAX`mXR`@@a{^5!YD(b%BU1(r~{tH~c!5A-ClnnTAMGZ-2Z)z6haEnS9=47BHFi zxvamRsCsy9wf>gpF#QY^gN!2If^Ni;xPaq14|>@&9=xW84P`?N*bvUj> zeAz5(d{F8oV}cfK1VYHz&yl zpF8Pl+;8)2Jn|2o0hBTbb1Jov1LW&skba5q_$qTVJ_dZ$fJKAKwX1`i2R|9bg#~|t%*%!r0>*rg{!-rmx`5Kk2LPA4!|gKwJC~&_f@C`XnAsXv_98p` zc>ieP-p5f9BVMJjsYBz5T_STsmZeD{Fdn@rBPIE&Ga}i!{Sg?p%i6@JTB}D(zwdvp z^9TxH^buLxwuw3^PNW|tREW@{ z@kqI@ZX<(L*xEvH*$YKK*S-F?5lk~|>h3Zh{C+Ig?@Xi%e#Q7~zEs`q8_EF!_{d~5 ze?)|(e&74v;Yt8=sa>rfwdzY9^pX$pn?M(xw=fL2gEcJ^xbHAJSYpjvy(l@iB+}MX zT2fLUu>1B&GyeOtC|A#GfQKhwG|?Ql)5anC5otvXT6J?s7rkT(2`@$yEY38EOTHpWbOK$k zAts;nQVlb17w*V}pD86s34IDDwxgp7j;VsWq7mZH5QWmPliNN?*fXI{-K-~ znLyCBC+^mT?zy%z@0=65-Fqz2$>nE@#imvO0Nq+%V+yDoa1JG*juXbIsTOBLcg>S- z^@uGPvIDu67>{K$W0?O-)*HUGBthx>bLdCY)GG;wWL7%$Db`njJn07}1!kiXmjuVb!W zHhQ$~_V4ibJ&E44x`Q^4{A{0B?FQDeMvX%nd+$kg1K9DklMP#-CJQQ=FzicGFfn<8 zj~}*kh_+|+#xp|cuSi;ADD`BLm78~Z0Y?YSYk&qmMhkUbp0jx#%aND+cU-BDRt-lF z7Ey`6UKfaaKvD&1g!fZVjBQ#X2C!W?pHL1#t%RgBFHU_Jo(O{@@E8}24na4sa!|_@ z(5H}51*pmZYOHJql};Wt{3SBsqd9kMYu3jlRD>+OmM8>wfFd{rdLcd}kau7Zs2;Sf zTCN}qBU%E8&1J4*gk7u4^LbeC5VhKWqPc>Y@J<2)SAmqu;!C5dbzSRsg6`g{X3{2N0v=_M9fS|ru2+@&ABK+!U^JnWL?*6(T{VaIiy0Ur(%v^=YJxyaS3)0-24 z;zanlv`~_)VhG4q9rq2M&oDEXWaszhO8a3hyq)sCe(4Xi`KMPM{CMizSNk@#k*E zCWCEZ?#At4CI6*erN-mGUigXQ)W$jh%?@Zh5V8IslPJcc6hR$%?A|$8VyybmIc9e( zta3H(_)py3y{8=q<&-GWD;l*o9!R~VKw`oVE=bNj&7%NqGDBBowVX}23gE7NjvxO9 z9o;kn9WzShl_aMTJu8wTW~z9!x>i;JRqeEmz^;E^-3kUSrTb+=Zh|yTzh0D)N*ss$ z6|>yR8cH?>)K3gd*dpUXpqJUn9PwNbw=az=O8vj|SQG>T>qGC|vPOd!9nk{6GR+1u z;TrO5$2nKZByv>y{0EudWea}2cJ&%439CFLlbotgo+J-MpO3qEO$VdfVdB7Og7y5_ z_oH%-R5;)EUFMqC@6TYl<%NphH?C2gyqyM!_J>1V!~G9z0Fq~z6`DWmrdzxxLMviUd~y8Y%O7~1AthU5mtA>(U@?Z3(7 zlz9cmhbQrIpj1{>JhnGsE1{6#k)jTSh)l?Up0ZRx1LqJhZ*q?@WxoL9 zLU*|_xv_k-YRh3MPxUf= zxI*H}*>^5|OIK94IxVx`_%;WhP`Jx(%ZE)(>zR}dT$07kRBpc~g>1fZ1JGExo)Gq? z&MS@nfB($UG1q6#Rjn7^!Vb8yU-cZ>SdI+4-08!5&XMs-!(L)+Y;5J65vLq6{Ve}O zYnYD1Sv5dH1$^|=6q|bzQ4S9dXRWd)yarOh@KpZptnssk3n9DH$ijuccb)w=m-2#n z-9C<1vW|3oNj4942l=*{A?6(AK-cvp{?tz$@jLde{?336yZy@;U?MpHgL_$NZDlSe zZ2QYx8*A$83zAW}cXBc_GJ^KY-va2hwV!46r;T4ZDn8R>;+e6;EvswVqgJeUU*>+} zLI~WU;fsf1`qk+tVOpXEq-MOPr#iJJwdNOQC>@f`4C1 zdI{l&i%5O6tS~tC!8!cv4h-8O$$=(_6G~)Em#4Yq2qQ$H$P}o!>JvqeM2eTt`p&N< z!;ieDjzNhcW|sd+wAwCPK$Ci~0{fWf;8cV(O=bdD494hqr(gwIkOTwtBueWRQ|6zS zB;9FJM{1~BEWZ&%!)TV=zAhx(+9VFyB%E5!qlbEtx-7P04QyZ0hytpnn^bnTbZ`P{ znvbLc2#u2vjWHzQq^N!yXU>8>#YZxrY0`$Hh^OqxRCc56*i*k)7*O{NV1m^|lgA|4 z6h6rR+3MGg!ylIdgmn{ys!3Ylh~qHqtOzeaMfAy3ll9mh&_b+4aY-NDmIyIjzSGa> zVP1SK1bUrUQ8x<2-*`YyCia+qsZp6ztVg}Phs+QL3CUH#AHU*oph+a1JBNxwa>$uI zuuPE)GQqN7FALd)iz8XCW3k0HSnTg@yKiAf^;bcqy~q9~43kXCS0A*3uvqrrX0n8* z<>qI=_uurRJt7f8@O$X9&G^NT&mo$DuKflRH^?J&bq(~mF^n$o_*_9G zI~6cE+|3dZo*M|ZP4DOGlh(k=m0xg(F;54Lx5tFTtck;B07N?>hX#i}4O>tBC@CR% z-0c~Hl6w}L{X*G$x{Udx5Val9crw~LO?NVDJQ4CMcIVEX6Y(L^Hc7~I+xV1 z@0X!XIHhD#mWlbaG}_=Ts7t42%fgWTN@JBmDY`u-m6oXu(UnmQa2 z$hAT%Qe})O*Y3TdyAPho2e;Jj~A~u^4=X@-BRotxvdm%ZQo}?w)I}B zaklc-V7xQk6WCTH=5AgDJSG#o6O`nZ0S6W^HS=uilsOoAjG?tBNbTEOmuW;-bWfx2qesV;zjDZMw>>G{pIVxg zm6dTSYs=lYv>j^zW4n?%>_d5Zuk|evVf#E1@;a7D7RJFv!%P1xjf_EBCBQZ6_DHp0 zK)9Zf35Ab45T@Fv0)~bLQxEjV4}ASc`}_L??uWV;_i=VgeK&+VKAft$s;U~~>vbIN z(=Fl>_AO^T$gjTl;S#s;)rBp-qdOlDMrseb!M8QN`v_a|QMiaCU3Hr^F|l#&w`pw9 zSjN`m=gKRp=&(n}f6^V@ZvNq(F z3Wq%wb{-<+*;7}UAe&HR!E$%`3J%8-S_kP~Dnj|Q_#e{!5XF(l}ikVr!35M@T#_Op-_6+*$&?9JnKm0>FlY+e${m0%{TWskgh zM$Ke4P(^|+mo%9xx)A7^m8dgL2a#GFu*nALPJxy|5ETKlu4mw~a5tO@!Ozw@y!^{z zXmQJ}^k$1qTK- zN`#JqVKkwije|i{+@QEz#{)(}_fgFUKtluo9J5}l9Mtb5{O zr`8Tz8-OG@Wb0%Y;6qOiZBJO;)_RU-cpKMSxqDPk8i%Y)*1LTzQ(O#S54FWlCw13I zbc)+vXMx06h&QpxJ}W;K{pB*c1RF~yc-bD6OLWe>Njz$PiKADG>9wkLSzNKo4x1Sq zb&SFG@-RlW88vwQ9WIY36w$qjO>o+awH=XGQBiq4>m{Z9vHw!%gZUO`pk-P~8o3c) zATC-UUciD-@1TG;h)Dz#!BSi~5%~M+cbTko@e)~A|8tt&fBFJ?z>yM)Yuvf+@>5}F zc)T9;)094p4=?*M^C*OX+rs8~6%vq+NVmF=R|GnQIE=2ieV17_kcrNHIM<{NvNWrA zlxLpMVVfgkeuAg8K43!S>ebYYOJ;xnRBIevKiLXUv9!5W@J4e@rNjxioP!U`S6S8z z&z!fguwdp50Uwz$oq0T5y!BJyek+g<>|6`D<@UIgY5xgO6Z^QhhzaD8#z<6NC(AoB zT(OxA4-D6)+6zBFX`WmQ2KamT*BXdIQWvyR=eG!qDJ!>!(3?{Lkp?<)s-bosekJLG zP~9vWc(#{Ghtv!AvV+h9fQ9|$EvC!p@D(b6W2^r-gHJ#UVJJxFH>Eg{0vm2 zCFMpYY+>7pji27Vd)F`=i?X6a-b_Nan0*#vQRkCK-h7C=GbA4MGpz3yV3QKHc^ziI zB==~nmDTM{l{>aIe0s>(ME?5>P&I#Fn4oOdEoegg)^@qZab3LEf_&G>_H#TV<&#JK zOYF=3b5q*9yu93RUk@$&+Xikofm@?FlgeKe89BpqU*3&;asl82b61F%- z{njX3F>p3iZixr>?Hk!in#J5~z$=kRpaxw-@ZA&SPg7z#sl*Vv?;%3L=rWh%3!fYM z2BeGls&fLac^E$E-5`sJrlPt%wVLZ}8q>peGPpe&dUcBlW0QrRJr~SC3+{&?;9eQG*JuQ!ZTV-#V5`P^tNrh*oZAzKf%AO1MuLAm=7Sci?E#6m@1Od}2 zEuQ2M&H$B1z;#Cr*jy~J7iJ(N68fCJ(~O5il@VeJSf&L6(c~LFjer5^v=h*~=j#0d zu0H+@d=^b9JP#4jAz|0C4pV=XgoLGXF-3G8Xi1yjnsz5TYf1g`uIuHUQt zFD<5=qZflE){_#%ux7aexqq0@Z(E==LYf+YQlO?4P_0S%G02!Cg1ab`^a6U<3USbA z4F3KpfF$RW%t~2$1x0NWsHKGebt(*zTGG!T0*6|U6_OU)9Bkb`EafzKt54pi+bVdd z?0D>8rGDpG@I{HJY1?ZDt3hKcCmSD6M!)JF9;7}B***Gv(Cyq^t-7Zjrdl>d*SK>) z$9ys5XvVohxoBvyVPjB^@M$`VcwOk9#sj1PF7iM#eo&&t9bWZf!zH+h_4@w4V#nrr ziz{-bs8+Ha;U4Z_AU5czCbN;0`{%xIZGBGt(UO<^Qh#fVtY$Bm?$%A^b6b~~#~UI{ z6#(Ju3~%WE(wBkgte>#S+!E5{MM(jqr`@pHW$5jHgp}9N+TYK{bAcW;=nIZCBK*6| z&+2P|74wi{f=f)XDjQg>-XQ`ZCb63he|6``Jui8dI)v3eM}b z`+(e7P+GOA`&1FKohi+}-*aE0bo!eAJJEfi1$4yHb z0O~H7_s|-=x<4=Ue@)ar+c3PiW20j>V5Z-iR(Sbpw|hqQ-nKQ+Ry+86JIy3p9IsYL z{Q9O%tp9$BccpPL1x%{HULGQIJi8q75KKj8&?0p^(rc*JAOX*hqoZ=GOTMk8<37gO zPLa<-<-s+lT_n=nV#unRs$J$hR`WV0>JYP)%Awr5}6v#$6tZ8&rES=9eeq&VYQ4z#AH4?fCPKAnF3Y(fttM2PKCU7J?H{%s&%d%?E4WWZICW%Vehey!uM+Gl1# z!O_rx7OBW+AL4#E8g~TVA!d0WG_hfS7aCOqR(=wVjkV+dtyo8&#-lj#pb1C33x*!d zn7eb>e`>{}c%?>Asi#;N@4}Dwt9i3k{AxyRA9UM42&f!6Y}GJ!4jjA?gw_1XF@Kr& z+M~nW!k%pr$#UWI1M~BXts=rJwPBw1z4!|(z06^M`{GoO<&y{C8g3!Qplenc3|b*y z=^6*-WA+xJ!IJW{{y*cxWn1}JM5-R!xhqH$B-EQt;<`^|$2En(GQIv3Lr_a5sk0(r zFGvu7D~M_6{2>1yO=lhs<@@&G$G#+tB})oJLW(h#?8*?LY-10RQ3z4?trTOAY-5iS zV+%>LN7h01eF&MdjU{A%@9%pYzrP)a*`DWq?)$o~&v~N05(s??3BT`4-2}XSFE|*- zx*?A(EMP~qX~iI-j7)|{v0blXCQzivPR*Eq2In*li)GWe1*H@8wb8F4(@a!g?@f%+ zgNmWe8vM#F?;i0!jz60}Xj3jW6d z+>qxrv4-QmP`9ulHWOibQydNwc7#OC$~C^(yFl(Vq)O-l9q6t9<19Phd8^}1kH zZD*m#>kg$`sF;d8RTy}ULPwG0>X7U z`o4(ch5Is)36&wbg%zrbayD2A5=erQ&bPL_7V;yb>-6+k(VIs2WuRDXAZC!2$H+UW zsRxj#3x%kHA^OMbw0ja1CWE1j-4C;>+EFl|R`#W74v*CS^l|i@u;I%;Y%7}R+jp?o zE{HW2VnY7EWXJ&R;0(IiVUiAShE8Y5M=MQ7Jx$iXFAyqS zm5cAAEW<6pZZ&@!V$*rT6WdJjk-0r>#cdp@E=4ow1#dn!|U&YSmIjyB)t+JvyItscntCz1%`E{`Hx?ePCcmUzT4APqui}{I6p& z)4}ntS8w3pcUcn+pTT3sJRcn}1 zfD1}WitKEbl+WlTtL*21{_Q74i<+r`y^TS@i|ETzaV^!~rnmFV%W|3^mQU9`8WO3j zcB?r&n))y2{rg&0b$iMH{-Kxj)Tc+g6^Bj4hcYj|if%Rlp1>0uxSh&uNe!j|Z(_aQ z_A1q$isI;>%&h-33T8IJfPGj+qD>U;D!U*r%NuLEzyINU?9z`j2*dqX<#-J`=8%mO zx{kOI=hDZIyL&39rTuPS?I-`6lpo*xJeK`c z%mW_xzgYlMWLKAtnl+h)R_$o}zYXkMaoL`#tQaD>9<;KO3tx!GXvaoU1wi4(aB)E> zlNP|?uvj#_pztb`rvhw+kf2OjERA<9w* z)K%E|Zpge!9B!plclq+=@_Ku&P>Cn_Wog>n8z!>3_tWlSOp+D4Dw#y^;;7P!cie{O zQb~{or-a>$;XobxzZfxhgiMmsHr`85*uk~6P}fAEv-*(h74%Mu7TD(+GYdp=Z;D(h z5Ke*^t#o5_66bC!+v{zpwmpnRj7qVy|CCz%jw0Y8wR=soq=?4AnUoct+qh}?MShL{u9DS1Yqu7+Zm@ZA~dLU8R^Yz!@w zfUtk`<Hl3fJA}F@KDC8%R}mD0I6nS zWwlVruQ|Vwht<17#${yG9X2Xa{GIvt>I|2S|4uoWHJmC~-8-DT2x^z|u1#NO9?gCv zEh+cM_lJD_{Q2`~^Lg;{x2V(&OD!DA>oGf-8o2GMYT*+W=L9MGfrzD?h@n*y_7AVZhW*)8En@pw?SuNdd_mJ3oL|%xT!< za_Y}M{v9T1o#^^W*TJ{HtRqp_Z+^X;*QKHT)%WjXv;H7KG!)7Iz+zPXkwuEx>WOo< zg=hs`xbXEB?|riX)KDirexxlygY3zgV9UYlFd=xNM=Z=6B|blOKdwEXp6of2Hn&`MM>+*xI%?xED^2Bf4DIt zad_%w9!xlAq?jWlT2g_q67lXO5LUD6ZVFcxQD{56riq2$H%u$hM?E??Wuv+LF(sQ6 zG=AE@-ALZc`jzd~KjXB-9D!W)z!d&$G`7BE_)gp6OtpE+uj`K~WjqYIul2c zo&cy&&^4?amd1BYs{dL~sNyxzCpSWQ=s!kMH;W8Iaz!9ro8C-g)Q?w3s^wF5abex(O2*+K)KRp&C9DkZnCJ3ror zv4kAo28VQx<-+;WJ>vPZw*cvlI5V?$`eydDqU!>HoF}9aQUHszu2#nRG7n3jL4HY|qb2GAE&GftT?CLi= zslrZ#VdVwrY{5IhNdd;0 zGG0rk7QFV<>FbPgqHx3E&w!Pcl_tea5#(JupspZifr00PgWFrmK7l_7s@D4+JJYpm z+fBT&S{5m2G}?UBWQN6J-ApK!vQkDTv$|H6E}W1w&4aJ6~OZLVDKi zE~n;Z>t)-?Nn-oMtMA(^-wAIIrIIZyzwU-RR3VYmUAJ0)=A3T42O+}OkEyN)e@{kM zRb8l=t9K`?|Jm{9FU?|0Xjv-nt|WYUiw`rTm;-d6tpEOhiVIX9uzWl-Gm~oT=kV-V zHSUrKCL)PV8<%Dd65tdcL$N|9DGnq9yKnNBbl%H$Fs(VfIKzpyr80BC7N5m3 zv_sy>y)l&X>9LZ*OSf-FN7L={^TcW0Rox>Lz4>sb>{z)y=~t%FJOb$IFMjz+1el{; z0x`IJk05Dtu+hqLE3Arm*vTCi?uCp1Kpxf8u6})=f-6OSq&&CMlFXpRgj=S4WuGSb zZjM)|0wm?$6qp0u&YHB7`uFp0wl#=!%>?E|ZlzPbc3}tN-9&pRbU*~I0~fyr;J#n~ zZmjhd6@e#U_tOtmbydJ)x;wp~W^H9PC7Os|oAt7L)IX@P7xWz4w_eho=2-&yuDwqM z*`LX;7>jUMb(Fl#;V)1Vp;HUE+ce9c>ZH{=-~d9iyHoC5D*Tla?xu+E8Rf?}KMd9G z;vHiB9mcIBqc-neJl+J;zj@x57?fzhb;)!|BvH!nW_Yy82qDu;U1~@-Ly$UAACjO| ze+pCA5wh=2g1CLw;81$B&&3o9DP!5~feJ5(Ff5UdtD|4)m5^SJ{hIm^^99SArV#eP z0<&m>1`vn*M%<;Vda-GIb#2d(UMUe0LOgi0X!=DUA2GE<&alq<^P3uo;z{=hY|kPWbt4j2uH7HBiT! zjHolJV|$0SM`9wS-i9;a#}#e@6|Pp7A4@kH<*SX7FvheCK*F!~P6ityxXvxH*m|m? z^||=G3gh{z*hK1kpf9f}1hxpSq7*XDvT#ZT{co}w*Sqe7jswXz;4VXFX{SB4XwZ9xPBE28xVq!9}Oz+e6-{0)@Y!)hno4f+>6x`lLu7o=d-`oc^SI65E?X8JTpT2zY zJ(>(~!Z?ZAQf_qipOgboqLee6A&udH}-=go`K8Qd0tkEW-i%Q^^D=M0a# zHA2cqoPW7FU+1g;w{!*EMw;XXd{pc~iNpGb8~FqEq^15(mZf(}kr(5G_kT);x3)~M z5D`^kWk$L}Uf{+ZoAI^HpP*ibhzgtAEgl~0tu>l$1eCDLC%~Rr|GL+rRh5wU_b}{3 z_KA&d(YOfG7-UQ6jSoTca~%L~ciWzxGd}pa(7(F6o}zRGKS}SWS219o2>{uf;dj}F zjy%J#ji9;!7_vFqP7ZpfBlDDM$&#MSFbJZhF&{m^DvD4y>es;`pH-1@hiz-Kfp)#+YEIGK5~jLDJco` zSORXDuHKlZX{7xz)sqYW-*nM?g8t6mbo9oi9F!&ZSt+Z?U}KH5Al4kcnreJa^2<+_ zUyg0La%k#lkTO$6Ai(>Lb)?P>>e>MWfgY934N=YuuQ2xO_Kj&{r4j#N~!t z*9%!|nSIc~zwTXAQ`5Ew96)ni{cEo7EVuG8`3aX0)yHPj-hVp>GROx{V|4H~VE$eC zAhjuQyVuQ~BM>|J-&5sad5YyOUtQJ(mIIQ!oLsj5)_=0DSl9DV)$K%Kox~(TN;`Yl zb6IR!wRAPTBL+#uI>B!E<0Vkgaz4t&af0&OI%`5L8Y#56dY%3zeZqarjkkDAUqzT4 zie|bs%GF+)Snu_UP-~cpgA$HJaQO!d$JlD z{Gg8Z36`(`B(ha?7l0P+bR0qnYeD1cdOFEijULP%Fh^bjOqRN4SMNZ9`B(`U?)@bEd75BNCF-eM2EgNk5~)+^+O z;7;ri;zmC1C;ZNH5s7w=iGcs`A2bSZwwMmhgjc+X3NZ+Ys3O#*!Ou@qlbj1oAiLrs zEYg>RW`rv~?WzEYDXN~siHciyP;+ycNF$`NkO+S4JRmMAQ|Ko;8|!1jzjHV|lo9I@ zWJY0O?2EaKS1Gjf7#_aI=qf zuSEz_4?aQ~$7lipDpdOr<8U$Eg8eF>7CV2zf=9%H8=G&26K0-X{o@;kV*@4Y%aolCrZO(AgR0;1q_ z=klz=;mP6eGe+N*&PX+o!#576P zOeJt!=!Dn-=3L+f_DR-cmFPo7WY&uNbyX#$+xv|G_v3fc4>)jNY#lln3h=j62{o3b zzoo?YSL0r7fDg-Ql1ywZ2^OJ53 zHm8IOvuWAcZeusWWa2^?*R6%k{gEL@i_h1=0QC7TK%XJkubj#1BUn2<3JN+Vk?TL! z)dj3i(_zk)UMOCUdQSzWUVLW!9(PtES6ad63HjO8VyFIuT797`J!pP6o?rQ?$CFb* zoxx}s-m@Y97PlL0Sd?4{t5xFd*N5r@?+5=(nNkBfK?(i>?$h}X{ci5=Yfoq4c@gA) z2f%2#)4`JJsK8{SnG>@AYiDO?h}=+wuPzb7Hz4*7kL%XIJO=ybc9*hUV#rhHU(>ZC zT)`)A@XOr~BzCc)zs6NaYAC(6A>gK{5G-lwAs@yUvUk({OLn_iPm2C4tR+ z90c;k9}SAcCGr_ubP}s(PNr9<$w#A30Ma2plr5CUuXb=yM?S&V9eeA3i~Sna=Gidf z9JHR@54!Gau0FRG2BO^?3^^8@W&WzZzAN^9pqb(yVJ2roFebX}-QS-RXyl5|-6(BW zfa}OQ!fRFSPqC=UC@IlxXIN$QH~ftTJkZ}qlPmZ{Qf;~)4700@PI1)zrq?Hqe70k) zd01gE&~R9mk(F_LL~4{7$z1j^0~{)(WK%F0R_JY+5-YgN*Wf^IY-rkl<<3MKmYuYa z_dB)*6k9%I`(qwIE{y@=X@%4du;cvk_BPAKqrVMJZ%BT{Fz?SbA%Bm_jVA{yj?rQV3++i)ccOYdV%w3DCs} zt{AvcEt`7pa-TxK24ruXmaB^rx3I^&P3AVvuFmwiG1qW84r6MeqVqxyD~fEVjwf(% z6^X*08#UON-G|-BKrg@I5CL#nj?g{oW(D_xS56&qkD<^kDg!6l*L)&rS$N-;m)q?G z$8NNvAHvGq{JLl1QoXS^MnsDp-cG1~{hq-D^?K}DA z%fI|}h>ng<<)7xdX)uzMI1sbfr#$si5mQFP5_-YW!p<8%za2BdBW}FF3cb4-n9{<{ zo|H>#_7-pC>Q5Tha@La3MB#ZIOt_Iw3W@Z`b?zrHSS!OdgLDHUq$Yfx+eOnb^j4n& zBC6uW6Fo6{kwjrmns!j6gZOHCUGvSDZ?)z${Pi{DFdFW4eb|}?hcF!|XOTo`c!&wc z`SyyKU$z7MeFa{G7uo<%62EV=f?QP+#@7hL7F6n44Z?q3y~W=IGP;|6C@76*1Eq(O zduuR);OeVQr-j<=o$-v#5q1Tx=_CaSI=ig_J1MPK_-|CUr~F`VcS_c26SEZ};L9DK7b9{IYkq|~st=t(}_mJIgs@){y*L00#{0lM*^oeDI7Ca zD)^7r53KhXRmZdq2l#w_rt_T(lOer?Rl@uhC+hE302zqrz(C_WT=n!t6GxJ2FxMqDz##TyQ-4&M1 z<%Him1nl+o_s)8dE@b`rQ|-h6XttSlw^;u#l-r zBS8<$v7JXJE=yeJR8PNykoFYz3MhNrRo?#H*SGuU4S$lO-$F;+1r_hr(FI!&CwIe7 zc+?YDc1{j9!KLJbmx9CN3h~QZtsUpMQdRxPq^ULU59>XZN25L`e;2#nOr0;*lKdX{5m`1{cfYCz5rK1*~G3CxPs!Q-9 zzH8+#WeTauR0{wOluT5f$C`*p_n==YPrXkUEL55m8cgtEhLp@4o~%OU_*Xp8Xu4N+ z5QV_|-I{v1E`rL>c9Z!P)GQRP88}Hv(c$8r(3P zNm#zjC}|${mbPL0s6^q#i=jGNZCYsp=h8nK_1bsgNAbTPHU>ym+PIYlSAqK`EzACG z7Lg=(<9;3=J0c-=L{FiE2BgRNa(OXjG z@6N{LT2!VoxH_S53zv?#_ximaI@O8zSSBO=qIl2NXhg7=xA*Q_$!SB5 z@8pwB{+z(I>MKhe&3&KWB%P$ro=yVYx$jZ>6nZ1zbSpmOD4)Ojy=af84QHqk_=Qr5 z0rL+FuF*n(nLH#B`a=ix>4!z%_R*4+`(^n3Hf~$rB8q`CpnSjn zbs-pbys=mW{!$aXdD9{#7Na3qC{orqe^6UH(c0m5Iq%K+{$2kDAL1ksuf`fk)kRsy z3|w~TcowerMZHaM1bWS1kR-DX+P)VRJs!Hbl~s|o>3^2)naat_&#LSQhtf20sn<+{ z`z@z&VH;V6e2L2w%|70@HA7c>E`MTaOm^YCBC{)>5lgqe|7n}q5y8iteVWl>tZS8V zkDT=-1$W_5zmH;;75T`wc!c)_09<4Tt^WaWlCS(RT0*uvM!I9RetQG?w#tEO zuJjs=1-6lSu5GdoP{o3u+Dl!GuN05`T`C`956)f2d$UfM1b^qO|5^>0H+{zIrD+&Ql59F`q2te-wZ0GUv8=$K+q3!n$>|R{ zWV1(*+DXUcbUtD>V7pgdzCY&)(NXXX1E=+C=wmWQq%#dSZI0HzfNbRjcWL6p2-`LK zT89s&6oum=^eqHwA>-TDEP}o(R2x`~sjgNVIKyen!ll>QVGxYsh0iskSRAJibVCY; z#c4l^!o`MT+SA~0?*ef#6cqkDjlz-Sj7s}RAeaEjYX;U@)hTGZ(cmod{d9wy+Di>YG(-5?I%bVu_JG4^tN4sd!}UIoN3fcDAgAs z8JAXZ(=h%b*Z<7|JW5t9)<3clb6>K-PGa7D5}2 zIP{nS3)=;AqHXb5H@wnIHHVpa7$eMpbIL3Fv-|KmN_QVs=jMp(Oq^iIO$WsC#oeL$Q{KotGHlL-v(ca=|7;Jn@|V($~rhMGTba^MNI#8YwC zB}6ql_wDoQB3C-@L4CbQCC^Kt*3E<)X%lbT5d|-Vd!(&}O_}IG03(G4E&@m122t=W z<*_7m1*JgVYWHhL3(jGQoHBO9VFWvDxpm-S8Sz2E4)&+rzd9e~xiB@EIwv=`&q_5U zKnpax7o5Zs0-}jc6%|j~Y9PIxvHHDedE(QV9RPl9DvUZk0hvsINF~njVl3p&WQ00G zMp(T}6Y#(dwUn6HO#47^{d(_=pmilloIJC+Qg$it0opJI&@9x-vu)RaT4wy}C7pn{ zJ78)g!~G=DEBKkiujvUda?{SRhg6AtR#aSa?`nEaxr-bxf8C}H|FW9jZ)p&mMQ8SiIgUK&M<5iJ zT7FuMTXQpWwD{W20jn;kteu#kbMwtLEnXAl(%kGE3aO}SKqlYT?TQ~WifQ!vz14HA z>DT7~=W2gjMXQXA{-!OnDJv^K3Zz%-Gq|G1QC#i*e*PFS=FFG6si41+{Gbu`zN5VEsFTxdI%vBij70_SWU(8T zbMkxf7JtywWfHVpt!EM>4V9Wk<7)hW?;Q$Whh)vtd9)k0i|`bk%R*>N6fb% z*!^?f*T9LY#Gb4?loTayhN5<27wX5Se}4rg%x90f-6bR>{vJ31`)q%9VC~denQN9b z5})W$bL!ypR1wKC9dNJn#qa6e(b0vwL1Y3BIeB5x&*qD(%*97eyv=GygfXxVa~__n z-@AM_Tc)b%;7<YRqifq6Rc_yAQTq!>P!}Eqo*XU5XCJPEf7Dkd<;DIUr*#I^ zM!++Ebm$PzW4liE@eLk4MO)2gz~1td*vbM9|B4DtwYB^Fr$aSnrlxJR1HSbh6NB0B zRaj<@(ELYkd-b?yb#6b%A&2|?Ypd%v11}2mT&c!GT6esvymIPKmQ9OCJTy3uhsc5C zqvhp;^$6%?2DH1@R5kH1_}D84oWyy~M*g;%JsFMMyR+(+v(qPZ9bMWfa-H!%6HT%w zhBh8cKiW*wb&b-F%a2TfifCe|2Ajw)%>ksdhG-RWL$vce9FBp@ZUc%JC-frRA@v(K zgrG1eg@#`TkdXsg`GOUCVrUQOK_2pK@OM21*z33L}eqddkKMylp{go zkQbDCZb?3-WK~P3z-!MhhdC>AI$!3!y*?jQ=3GiY;* z;CT**alL(g7q5GW_PlrtG&mW84=#>SzY>F5=%A8>G~TsG#_WlaC8n3*)+l1DQegxS zW$p_jlb1NVsF%Vw1*MSh@!at+zR=f>dAg_Tw!r34@%mkoUS#2@HpVnYU2nBW;`WFj zl;42nJgWqmyeVX><#13ahzz9+O)GNl$JEWt+_DYy_wo5qwv%MkMXO%YtcjuRfqc_N z@(Szzf#+70x%d5Z-zbnmvvjX7e{_IQi&=u zQzQsb!-aG4a}YeO#cz?~y@2UBQTOy;$O$Rrg#To=#54zodt2}1Tua+gHeXnf7sY^w z{+Sfv&(Kl4Jm7AQH4E|w2e##f!>GLLO)6l*y?4)6t>){b=p-fuxV+KCKR^*+6Ebrd ztZ7T@xl=Pi3p*V?pM5NA<*Ptw-|gS{S#TgsQF5dGST{8}KK^ghL2Z0y0_U>2MLhx) ziX-2gkH+qwgS9Hd_VFI8*QP=o>t*kkFHxanFt5-C0!^~7+61e!h_N#e{y8M^#Et%U)frsKuhDpHBzyR>uX%7hB6+*Ra;{z&xpBE1?$DK>I~ zkG@s)tIE$<3(YIfPB~YvH*TMRjoI%(KgcLZhBxlyD4@TzG^_mI%ffGK$w_e+gYAGW zb=|70WW@PmL()7;<7qzVC6;E%cJ$E|iW4p;KokPvdhd#8)B{=AC*@?f9E^p|AzRB~ zhEJuC29B7QnOMGG7!gxierXiCRQnBm7bT1a0C&XLIia`it5SI zhTUNH?i+cxMT}>|n*T5}%#ZV8hLB-wkZwB3kD5;j){j!Xjd~fKDNmXixJ@;kQk=0#&&Zt1$Y$8O$kpBv~x zpMcIrX?8nzN7y$7kuV&EKAf%884T~}=8CL*< zVYl+1dcU}0hGP6dYuXAYJLzh9tHHv8XNa^ z4=a(+l;OL*S_z39tC?>-R!x>M&XuoUNqLY>(2kpYp>rz`ic@`(I9=t_AF^$G3Jeb5 zre9cy6)U4BwsPlb|Fep_PfHS@W^r|$YuM`x+_pXPQ9J%~xAyag8MiQT!`_D}k?i4^ z0#O`2mzb`I^Kb!<-Z2Vsv0*)qD)r)Z&p(cFwRKM#XZh>@b%QpR1&xUJv~=}ky?gbP z{IrJ|NVXGW0r)hv>FCe?cJa`TI;!=z27T(i03e86N)g&y@*~cOjg5`*2hCf}xcL;k z?^Dp1MYd}8DL@JJIB6wlZEeOspJ3Zn9o1GN^I+oJ(S3M|43hV3ziTkJgR9KfL?effz=Gp6{SCB(;)zH5 zTKR_Vh^m0a+8luBN?y=I|Dn~;S*L><)OZ8No z_~jtlT>C3g_N%*ngr_G1Tuqrywb51!1OIMGHhitEMep7@oReP}P&oab(S(qdeP*Y? znlL#JiiEdAwh4W^yM6mC*xyHgB|;@c zK4vowrX^Z)YD2)(*V^8l5&%ltIw%G;=U1yses?6qb>GvyhDCN`fpff|2a7GDwG%i7 z{EfO*kgMH0YUgTPuAiOo-9FkMNzD%aOZbDFkonHh`pr@7eVu#lnda}+@75l*(f`i}MF0UUy{eVQOAjz4<;rw96k$gHAxm{dr^;z*^e0r%0wElG$ zY%#sYY=WjM!b(ihJ7N4M-vJc^6VgeLtxRHzE)u^sFPbLBl1m?n1?|FJwn*(D=4OK; zo@>%b&Z~Ze)pTV|Q~|R(=PkeNF>{k@c!oB@YjvDU?rk;+cfF_N83aeWQp)k_1t zitA;P{vNmeLn!aTGrbLM{kLZ!9zLi}Ju=}{bG07&N|D0SoEB>FEc>D}u?|%y__FBE zWStZFQh=hkV)9)osc49avRTZ86NgLBrEQLZxZgO4Y@-&95>Q59bNSc~v-2Yzhg7xirYVl@Kb%OEH!lB>L81liZ_+e_)A!p)&fUpg60CY@@qzYNLy6Meq^mu!sV?aMim8NMDT4qu%eGRKT`-!RO-kyp|-=M z=CyH@EBej=7(ffvp+k(I5J@>yx&MYUKGe)Gb!_~}#d;h}!T5||8lWtd(hBKuo3N#g z`%y9}Y$;pGLDE-)Q>fiG1@L+jUg2wnjV{ZTh|AKf7O*3d-{;BmmRA zmA5=E4ZB1%h3(p7ve}jT-Z2Qc{DQ1so1^J=CBQCyZt%9d11Y?94YX8pY<&R$EEg!a zV{f9a)hz;(viC39h~?^o12@qgU@^}IKn~Q9SA&gYZ13uCLp6D&8mYs5pmASc%$*Hc zp5OxYGwX{G7}zN2)?@0y7J6zNS>|)I8@D=_ny&oo?T}RQ{qya4aZhF7eC-=BRH7KL zZXwd$>WW75_RI0cy2OXngLR-#$qWUFzY{tDRE_kph0sg6%h`X3d!Cp%8yEM=;6 z&mgUAwm|i-Yiqtiu;+T_wf650@lADgbyINKA2zO0-5q7MXVilfK{zPeia)-C9K2zQ zMwe#xN<5?#P>wKZG zD3?O#q+m2U!g3FQb=;43j{&n}tXN$2aCvgdy=i7P_zf;=_6gCapzN$*8qVulM!I00 z{q)tS&7vy)!sVx>h>^^%q`teL9w;fXF4^O0{g|09EJtN$xv$TyY0vPS^e~u2LGI75 zPOr}R%&cih4aLUxriPp>Pfl8jX^>TvWRc?cF%QlnOQ)~Dd>w{1F~St6TzsG8_Vp-x z|JAGVkmD6ZyN{}G5Rhc=bMfC(2_ec>aX3`Tq07g}wQCDmeR^4>j99Hw3b_BtK4~`i zaBXBJnf04%0HUWdV*T`K{y-W|VKFV@IN7Fr57gNKb&`a)G(c|!VNTl4+O89xs%~zc z@2TXA?{|OfemqxxQLV|pu`LvLPgL_Acxx2Y>b;N@z@MdQ^9{?~u9NwR!PTk@;&Zz} zjm+XfN3CPry?GHR;RQAf4GnXI>Ui{3NSZtoZYRiIhiuZ@sIwj66%{zYew2x6kfCES zdxDP=M7b2H?Wf)bV-o21(y`}yq6xTfg%)}VgGpXYPqP+Ka}1>cWYLxA?(7D0Ys>nl zv%$zSb`UK>_P*XQQeVu1O*VR(@-@zv+%>KwUsW!o^ZB!P;yZI*r8`HbNE&|i^m}7L zbEl-~fY|`s)$;A9dy6;HS_GIV=}@fnlpvuVWoMMDr(;t(>Qa8su}EU9%=EKqwacT& zJ=b(A>#uaJT(wF<(Im2JzM#MfNOdYW(6aj%1So>9FJO=8wcFZhvPK>|i+JZI{iJKU z&7{=ST`t2a%G}gllL)>gV9Pr@wkmDMPj2MCuO3vk9@0 z_|6`nsL2{k)Ks~4`FK`-2hn#CFrAwl9Je99OIi%qs6Hxa17AzLw0XI48lF*|ER9Z`ODKTv;avMaFlL83>>; za&m$Cj4YP+RSvHqM%UAt9@u+&uK&=aW9Ca6f0EqxZ!MMIZ>6+m=`p7|txh895o0rw z6c4E4-o&80d8|X)KdezDdJq;+eex1~;gw0OhVV%IgHlFVM|7C;kR} zIA|cQlq-+@c^Wf57nbz^W|5Yblb){l^iQ=#O4ii+InB+Zs`#>!k_Vg_Ur^r*ogF{h zmo^;b1-uddxkcFB9bIv6;tk~X%El&%Kpd=)-1V3ZNWDxLZh?lz*LI4Ex{B32Nk9!G zg1IJ?N3!w%IXyV&LRNl@e`ZYe@#5H(SjqgJ3&Q9zb{`xM$SyO1# z6eoJV3W(#0{jPHJOS`+?O<;I3!;PT8<@tH^crhp^otyu|Cz`ooTr6NfHXWawS@RBn z-vis|*?};5J$?P}UxeB|+GMZn(Z#DBYnPApR1&z6F=3dhiS+RySGkbY^p!L}KOum% z(X=0GFfoZOf>Vf9EZgTL<2 zMT}dWNuH}u0Ds^{%b~j(F!PLX^ZqQv%N?-3SkQrVgP=B8XuF9CTbGGRZ8JTMT(~GD zeY#fUK(b+8=fxa6M-{NGydDuZ%l z|J6nY0ofbEDF~j4Yj{NWPnBDPGU%D*ox^AnQ7kGi1?>Y0H$lIEb+YzTHJy<2sQhS- z;_e(+ffc49Rz2SOemo$g9WSrA=?@LJ=gqh^9rq!@=Oz4c2gtkE;LbWExH5q`w4!kC zIyPvv@%IKGadMIOd0Yrqn<-e2=QKQ+R(+`U6XK>|yS4{Z@~%&zqEVvfzA(m^Q$&RGSs!}FghQ+_ zo}Xbb62a?iCwxwC5kSfQ3tyI0(CX-GUU*zA{?HVXx=%EbWh;hC((gXy3pjIo8}km%RBlSNx?o^8Bt~oBE~m;M1AI zAx_%dJfU2UP>=P@H*mZ-gqHm#Tjb6q4d0O89f2ww`rg5bjTrI<#X+qw1Ph<#RB}OrQyJD z6Ir42FUUKj&vjFEanlI}e|BnC&ok4l^*W*-Y`L#l1c-F)dLB5_kt6e7M#rKG9dJqLb)a(sVKK`pKw$ zdV$V4Z0BzYBx#t&juMFwg*F~U7S7W`QN&!M(!kY&^LwikNVz8rp8&|T3@5M?)#_VQTpyX zdBXM%F(B;c#}@?is(inEul3Q4vO<$$sch_L|N83c9m18nAkk9Zv)|R#HC3i0jZjE% z0F(5=AHBt2Zgg);o_9!W!#mf!7Tw&s9UljFaJ{BD^Ls8o_?7p%jjg7vWZz)5F9YT? zFpH=lb(6h*dB^Z?Y zlZ|BnH>0d}{$bU`-(R^?f9kiEZ%<84=|y6ttl(_DXwGzQ2kv_iZ7u5UIQ7Q@6OQlS z5BJt4t5>%70!`7gswdVThWs`*Zyg*r4#>Rx=;iP2>blzDehNQtGx^`-#EebAVlvl7 zW}>{6DLROcE7Hui#yv1_KCxj8#$M=JGZnHuLzmijRkoPOjl??AZ+2_QuLIGXgZwP- zrN)Eq3eYlLTwnp$BBY-v{DCqQ6({IvNM-ksJye$GJo6$5c}u%u^YJ&YhKeG>xd&+M z##up7t}-28SjCCH`lE%O2KL+%67RE&K2zU<-OR(MgeN;+(q$Locnad<1JdmerLN&a z<%Kfw|1q|Pd0je(OTC(lxbs_tkyNhZp>5n$j40}Ac;0;4gdJqppS?LTaY4!FZaZtN zG3Uq+8djiob>bAd{{q{vYm)p)YE-XAq@+6F+RU#Yb1U*Qt(XNg)Bv z#zj^v%Ki_*AA8?G6#DspG@W-m)&C#GKSogz*Qje`Tq8-iHWlKMnT(rN)(zPevPVew zie!(Bx<*_igk+ZMl38SL%FN#5y1)1LkKh00aXsA6`}2Cg&N=z`NjG>QE73dVD_Cm20l-a`QRC6S^{sz33d)xJDm-lWG{3c8&O|qf_ zAS^XL4-jXbZ5f?(F!UQx*#5*`R+72(v42w|6YJAhpyMK#DEzs zB1H41K$#X{k65OM$ir(V7eW^@2^YTR;fZL(+56xb*FXh1mGswbPta6~;PWqPnB))( z)(weG&_a?$bemVBitpx2rqYrUb7NLq5Mw8UD274&QWOGrCY0rh_+8M4)){^7?0`u8 zVRRaR0n`7fN>voyhutrJcheUkeYJK)sG$%7@Fbz-G)ULAjFgHqXtaSoRcj-N8Bz-)zbir) zZ|R*`Z2LLaDJ*2z9|$+u$&n9!>gwvc_K~LZ7=Vg^5>j_Gk;`Kq`XViNJN^)n6nnm$HODY#T zD!c05UGBQ}-5yes`L}aeXi_`g{YoOlMUp!;aP;Vt59J$fV}nFwthZ`h>v4B=e|B%e zd%%yE>W{{4G!sva=hLUo#d0t^*Z#h5?MT zs_IGQCo{xz5_P}V_LkMY9pTGmrKLT4E-T+uM#kl)NWR^=>LDf}ar5vW2Fz)3f&@-A z8$7KV3f2!7%B2cTvQ1n7(c*neHU_Sq3!!~Cbl8lWV~JtWmG^WJI%2F;J-rN zi!BukwkgpTWSXdU08yb8VDYU=8|IiNsndt-$cF%n(9p25wt%@N%C(iNYtD`L04Jz@ zRhj}~K!uvEo;YQL zS*ZuU|JJPi?%jb4#ux=|aXo!Ny&Lm9ns?qgeDx}`D<M`41*Qq4)2j*h2P&8N5C-k zTdKKyx|ttV=&X__Vpj(hz~PwOb!A^oHI#Y|G&Dyz%SQ~Aw2#UA34`6ei*_KL>SSnw ztM@{8N5rAae0XYP6kLJ?KbB9%USWgUd|kv`PlZ~kq7Zlyln~f!K8{Jd4!+qQn4w?v>c+bIXeCk+&F2jD1rE8fiV;LguJ-Y(DvzhB&go4ESpnb zNQ%QY-O&hVLnSh6VxtMkXW7{+QF{N-vd-CQM&4e}u_#$Wm=;0Q1mvG$N1+U*H5vit zIDqGD`J}RNxnCH1F3DANI@HJ-{hmP;rIF}{VBvR8hDaPv{GYg09m8bmX+?by^#sd6H}C&J>a z-n>;4bZBVl+_%inA$)UyT=4=w1-0*2{)Eq@Zn+M9zyJwaJJ0_|%SB3`^&xox-ay_w zG&WEnw@Fjdu+Ls5VuPn&Q6Agco|G?(FL}*KoUE#xOtTt1)SVaY*U2P6I(HyJBbK=7 zvoOYSlzB4OwqE*-Y2!W@nAc{#2ZQZg8HoGW*Tkm(4XL?-#66I!1K_x^v*AK*tbhX>m^?#jd8&A^lzP?tlv?ZZj{q^g}j0sxE zBnDYgdrvf}J&U|2xi!4C7Qj0Za1>rHmMI{|O?L_Lb!j9AkQQs7O{V8N)dmDU+33`j zP##^|>5JB2cm59o!$#dSBqBQX+?J-0;JipjN{!{I2?8Tq%mzp-G^`I4HBV3dE==ht z&s8|5DmvQlymE3~SsIB{oEWNYC_DM{%AmA3W6dq(?jcK>PBdFHcrb65enA4_8-S5F z9Gz5v!O&%eTY%hER#rB;cI;a5t62U+*q&v55|ES~t<1%vsHY#qiP%Lp+ZGv)Bdalc z$MyJ;?#cG8(fhD-Lq3OzWl>Ccbglu)Z}@#X8G9#xV+Vy&PbRB z)iKNGCw&)wetRW;b0+BEFf9eZPOJiV8P|d=eod)YSF_vg{|GpLKlp&%*f={5o*lCH z9I(yCq(3NS-bq)4?oflx4T7Cj$Um}Dt_y(Z#lx^-^s0Qkc33F~hF2U@YXzs6!STv= zS|A-+u>ggZMKC=vPv+(VJxyO1Nkw4roVuSi4`SuJ?FUKkGq@N|b2HmzXzf;#EVB=` zOJX#06lLY%3_O0DKjbF^w~h;$SW=qYlkF9+KXEIP4W7UJ8kn4ZJD&p)$mL1O+dju` zv1_1$B274#P%FF}TWyhju#s(tmyd0104Hd>w1m5xn=Ap#qT9ZGn_fKXjaNz8>E~Fp z)YRnb#K^V!m4+XT*0mG{8k zgAOpr#;WWG){cLa;Ul;;YZ!|CYj6#AKZy!A6&AljSO4wt{_0U|roxl&9;0F%RY=fG zzC<%9E+#g%S#~{vSnsn`QsLOc6R-gM@}rzC#XqhI>bx0~G%e(^v*Cy}M3~!&-eoav z*~N-HW`tU_5m96#l#LSMtSU-OUt!+t2=zOC1SIFwT$ib2Ln#m)54u+|hWD6<2drLl$>MQ&i_a7Ov4Ln`nqHtc*mYlC~_w(mS=l z#S3qvF0M@8RFtg@QAx3P>Qsn%1hc#A#1iLx8~t7`stN48#94lQ|A+2$aCpyRXQu4q zEV)ox>Wv*@;c~f;C#41*F-3`{090#Uo)Fq?UQs&yO4J(^gaaSN9(@f(Wp+nBn(!R^ zJ_uq^C-TL@{xVaa?Qoq+CyGfC0ks%#Gd~F%qTe?VLptTDhOV(-woxX9`2B{O6b5)@H>K^>caO#m6?Y+DCDAoh)*z4^13!;ckw z|D=8BE-lu}o#l_H>dCC6`M^vy@=$MyJ@hIkDp%wY?G+e~J~U%T9ce!oC8eoHCy>r; zs3icgJI2_yxA)3>PlZn|R7t;js~oh|Kt2LBj}+^x?8n1{C$oipA5Io12hzkZE?;gS zpBE_~b=;1%3TeHh0z(AvP{^C=layfJwU(5tP7PT#sAC--dYn#x;2_u59K1tzQD>9YR*{tF)vy>Y+I0{(vcAy#z1 zoRSdPRkI}ldco^}&ml}#ZfEJlK>W8Tqc9p1a09EL{Te0W2#w?g& zHaL;Uw#ZCc#Mxv?H6d1*6d?TnUaGwQu@U3oAgp~cvU!^86>znHS9hQQ@owdH$aSyh zvi2rx_DS#dw%41_B2gF#mBy;7fnom+Gh@}r@LO)j@!&!Z@_mRW;)(xJ)krRr;!$=( zi~hVyF!0XG{&KJjgfN$Lk%|{ijyE@@OK;Rx)?b^h^R8->?b%vd_>8&|4e8iyzgarqG6gkD zBcK~4_kMC7+Oecxie}1kn*ZED$2WA>!Xzw@;4Ge)Wkqj+$ zPpeZwT+sza49Mh?nwm>{V}7@DCbW9f;4_$39&-z;k$?3UF?{6{NB&CJYcac3qib-N zn7pJb5NKwU=oS+f&${u=m8fmVX51Ih+G?qCQf6s^!D!zz?JvE#{d1{(sr|4>bjj5_ zbzZvSIup0To_g@d zAeXEKmyE6m<1TSHTd=kKp3r@^GUC18o6~K6b_HHFKr!an zUlCFydcKGz!&F9TR#x%Hi=VaFE)@_yM5nn)v7u*M0+@KwXa*`t8TTRRD#QRp37jZF z+s4k&&=4@Qg)JcMISubeiC951Iakpup(1u&T6n@AU5MT8@C}vCHIxuP4Ih&sO1#F4 z0zTo#@n1(!A+=2+p*@2+?$LSGro;DIdW157SkPY)z+aNS208ZBr_CSCX?{c9>(ct{ zS7I?*`PeDXXoI{0pIvORherLlAY(j1P?T^lPvmT++!Guf)u(|7<`_GoBpw@Ia2B~4 z_~-|uMTEg*&hcwrRHyGJB7gC*Ax}%Th-k-4RuC>|*bcD(SiFrfEKV(8z(U>7#JH42 z;CCeaiW}!#*nkFYIx|d!z5lB}yW*$$w$%rJU*)MX%`PU26P)EUc{u;%yxUNwtS5;LO~hOG;S)i*kSy4wt4)Q=arF{+cN7IGZW zct$lh7nYkR@jNk=<1K=vrI1jd6O9rkna$n1U2u*M>(6_-g-<&}mVl3t>Dk(Oe-5d< zdt3(Im#;VU%#&YSVu2Nypx^Ve-jXtueNHSA_ZfHuk*RXo--VxD ztyuxmP2js<8NwjVDW*07nxvUJ=&wtG^O%%FE=et(lWqqU)yp{K|q4ATvh2v2JPn`i$ z5b@kDLI*S#_n3sU{li&>XD- z3r3fPHv+M@9)7ecT~qmlDVD7Y+4D})5fUw2qKOR#f=}MR-3(6+o}hKpOAXIli@oPd ze7G=5_CB7Ntx=|%pzq5??n;ML;#I#a>n97V!)a;DA8Wf6s}=8?KX?$d9oKq&{7#W3 zl4#Y)s`iD_U;wsx9{$I@H+r)D4_a1AR%YiXfN7xcS{+mK^H>((KcLhD+t-|LkODVP z0EGz51;eujtbJz5fBZg{siEE|K^`ddH4b!{38ck%a!0Vh`F#X0QpyCKuZQMGLs4qz ztFk%xWIW;Qb%^CuXe4m|y~y6*4g%}Y*@Of@_Iti|W9u8;W%jJs3%O|#9cEYjhl@HxdN=R)P-+TU1CLC7c3h`78f z$X&8d&aeH2e$$olYLDP~S%@d(FAmI}6Xzrt4{5ZQAyTU)c;WekY zH4DO|j>=>w2hZJqy}<9E!xXgFB|oXx)UEh1s9qI?*T%MKUh9ZY!)f>TVL6oM-zcH~ zB0$t|_+p$E=!#`SRM>K1>C>T48HI$)VEh!+rWVCS|0y9PzyE-5_m+#yyQTL{g2i}= zlfbE^fig^mJtr_DAvMqdOSA3{g{pVJb8!9ViYr*VYHl?eAn8=~Ad!0|W%%U*PKAY+ z^i3^vyP$S;b>vbM9&7Xs>(7qF(Y#xVvCaRyZEwitluo+qkmUNzzqHH&{{#Qk|Ku~1 zt=rX4)5KhY-3)jX(k|8Z$=F|kG9FA&e@c^}E=V0N7o#d5XmQq=E?K&KI|E5!5p1_Q zH7`N8p2PI*=yguP%!MFMV{|1recg<(&S&g|@2h^_XHKy%6eQ|J!NP?@<1fUN;eM#m zYqPE0bYT?emm!(i6%c;XhVoHOf$G17n1U!@NDRlskLrc7Ay_^$qp#Hy)NX`IrGbbfpIpyYYxaLtseQBB zx@g@=V>H6f;SndMO&|PvCbF!DcjeCT5!D34bkO>E$%;z32q+Z${tW9G?^KR>W>$WC zhg+BR`vwl9v@&XrUJY7#cJ+iTrW7}?k#_`Cj;EQdk6uyEMZ%J)#&)(So9$OW9^cNU z+)tjSoP>uQeLp7=I6u8sjx5QwE74E*N&puYoHXI<2yX=ZWP`Fl3W5`qg^TVbgX>d$ zycr4`-@=(F+Knpv1u9SW*QZ~39Q7BKHh4i|*Je#mX2D8tDtwlp9gpoie>yyJnI$ga z9pThfm=H{0z{24fQIFPp;>d0<>t4~$aBRo~XYKg)QTOWXkiT(&&vNgc?0|*G(0WVl zUcXCa{Ywv7*L(LS?^{}5-xw$aQ|{a!-}HR`4C7xl2LhG;D{ariwd0FjKY~Sb{SL_( zOshus&}wJjJwDHS7D5q$8y6p{gNfPp{&Q}RyxpC7t{oG3@XM5EVq(NfIUpmI88~z5 z6r@#DLV99@lslxJUph~x;=A*ryKQ$v#EA9dJ(p_k2Isx3ailKj{l-;(sjNBZT{b8# z^>`?CHz_OETxb+2jZ{SXHTP#f?GB3<*|3~ES|T0#E1R8u=Qk5RS>rO8RUhC{`}ae7 z*PPD$AJ7vt$a6pf8Bakm*bDs41*VT*<|cp~#}#We>MECFddI`fJ!ttT7O;}5mUK|z zw@O8#j#S9T|2ZRyy9*YiOL;7!!yG_)TEpYPYheGG~_tp7YvFj7n2-;sP5{fiAqmMh|!$we!F&RePCue{N&xF`iH(@ zWeOq6A(8NCR4{z{@!Zcii^{`;(Y2oP&i0YrU65}*c)3=$=hA$VDnD12AWU*|M)~28xpDPwlNJi2$jd*t7s_9$I)&DrSd~wY@ zH9b8e3owS>>cn8}i1gQ~`LHP39mq@!c5qi=epig!X3qIVs-IhsA{f{{N>-erdTa|u zl}qPRE_Wj%usvCpu>StQamlx-+HCjVxiVA`zXupR(ttfxgkrv;T5-+zigM$wNxL&eXKYDR1t4h+()rY1sP*i=r+j#bjnJ=ASkWKs`fb=rrz#46h|o6rh=RDBW8^tVSWe|iGxtEmu-=@ za97pS0_~hPYE0Atm3W#yj=m#OyH0b%5S4V_E;CQ%B$JYfqm?7lpCuSQoz9S6YA;WG zgBAS_g_6LyslhLBpFl`4(!lAU85K2kK0^$hnzi-h-=2=3hpaVThyJ}tEl^5f8)G(e z@7&NWr<@?JdlSQ;<(qv)$R1H;J^rOwf09{(Q zX#8JYECtjA$z#@!6>n@1Nu-fAAROr+-{vol`vg7tPY!)Ovf>taFiAc!r5yL9^fYFf zxWpjo-Vv^ZhH*p9Hg-I&KDG7M=93hOm(xJ{kUeyF}^TVVy(6{uvH#)6|rxV~$l_xkSLlzlBXVqP;|Rs)NOuqRM)6;5PZ zztW;+Z}mu6`0|Y{z%-sHlcx(0p6($rOJ6$2uaJ?MnOT4IS^{QR9V*fBGMn-Z?6h5j z-{ILYnce{x9@+-Km)$jVyp#bbtF2Zcjt9qn`&F{Zoy<+0#OH;Dh1Wg4q@>*}B<}CL zYzPjv7vc?`3a?IW+X|dF^X{3b_X(Pr2Pg55mCK`}D~*2JfA4%ShItP-8v<-lQR(si z@$vEP(nfewyG2=L<-vM_0a#WDnY*Vp+q{`SmPqs=|m3;Yu!id9eskFO%2(4cvONwv3p*hf%!b=l_Ej{^e#Sz=`cJ#nkXVe`vxoR zYNU_H4q83tByFJX(KzmO2ES97ss-E^JDmBLy~Ov!ivyFKZ^HVYbAJs-E(qm zC%2Nm3?33^!bNPF+Z@Z4x_SJw7uO$u0 z=_QvZL-sO#gjb}bi&!DfOhS~FA)AFxy_LKL)m=UmY>f^j)A;F=PfylckAp3meX@q|HsF=|ikIHjT&wnYN4qSoG`cE0kEIK5O z6rhJUU^O}*X{IybGcXKVFaeo_hHe+h^@#STyT@(-xiZTTokIov0{`gir`b1^$w`># z`Q#A|L*HF|yB)ex0CHB!>C@L%s$DulNO2sH$RI~FQ_bpN<5zGI(X&|+k zPI-jWqpP!1QX0=3C)5gLW3*v8K!>1{dPSkP7EmN;XZ;ssb0yQ$rU@>h&i-(NpAMa* zhUPfi|L%LI&7~i7ry!cj?qAs_-IOz-D0TXY(>SB@%jW~xJ^t?nKy=7O(o1TFDY(4) zP9qX!OMlCTigt$|g;7Nvd@|{8Vn?q8SXo&GpTwAM-Kc(XEyz6a0b)})2Jwa=w3j(l z9x~M65HNC-le`Iu;t5}xt|Mjy)imCn;hI%@FFJ4rGML2^>g-cL^mvGTuJhVslpkAv z+jvX|YMX0frpRSJ)=PUwwTvJVx%B;c=Jm^$at4w4zCPk7s-{kog)lzQ&CYISCj7R8 zqhsqct1eXdH_g()fR((Lps6t1MKJ$IZo8|ngTvddxrPo8gTCL9--at3vx9ekm2czR zs6_04n0aojE(5~+Gx2|y@eS52aceE{~S()FzmJb+u_MS+6D+Z;^?zq^%KmhYB zS2v{=@m~fL5fg8~*U=R@y<4dI2|y32^*H)H2IBacN2y&!t+AkXr_pbw1}~B!5I5u| z9V!txa}HBdHcaypx3E$n0b;+$;nmsHcXhQ;W=D`7w{d?wJ=mRo!7@34;^E)>#h%G- zYA6@K+P+1UXlenhNXD)XwQ-syN8=+NdktNw-Q9WXY4d4tSY}19`E&=Junq$F;6~X^ z(Ze=r6$S6jKbwVveKOwcm>A@Zn_$_xJG!cSpT*u@av@}XW6et`bM;-{%CiLjX2n{} zzjptUXQMl}ul9?E2BuP`7H+3cRrn3Pb`>7&3qn%DS9HVZ-#nr zqP@X~C(7bPWT~5qTF?X?6hWsrGDhNANrn7moui$doht%|ba2XKtewKp6B$C&!uKGP z{t-6SZe{&Gm)-l;rTumycF~!utM62X;3%A(j7^)D^UlcFn5|=pCXkR_yemY`B9$IS zlvLha6Vl`tMu0Qksl(jTi7xcL7D~^1EnKURAo~_($a5CD^#Z$IE%wTp!BCL%HzY|L zn($6N8P}#u%Z!HJ_&caOr?ox$`F;UM4YivEOo&`8v+>96h%%JBX-D;$YJIvtA-wCF^O~FQ}eo;RDMZ_)3n)< z7P^il248o?NMX=PC)-RXr$V)aAXzK4zC%a3R~S5p-sH20D1sV=4q8W|gy`NqjAF@* zU=|>}BjlA7F5R&O-)^fL2NmwsZ}Xkl%98d8hM{{G|-B(ISxj#e8(R-4G({BBLA z1^svbFu#mptULPEI59jpp%0&^8U~F>eff?&+pJtwnL6GFJ}inEg8HP zRYwvhrJiMcPG@hfWLZH{(1WzTWj_&OMWd!y!2>Etb zJETG%FuJ>Xe5B^PfHu##&&|uLQb#dMw*OXqdM)I*_wx1HTB8f7KfX8h`y|L?rQO}# z16=>=LyrC>tz@n+-KoDqsO*Kskr>ySS6X?qtj!bxn;Av@=h`j91J`G+W`mPYGd{^a z&F5Z8W%Z=j@z0;rmZ=A0BXe^D16NDye=d5Z%f=v0GS4>2^Bf!*CnTJsi$!kLbPaZA zU#IlGl>l*H!s45_62j)`1QHzPFk{0F8-Axw4{ItJ9CysTCW2i$=&x9LX89!^ZVb2U z1^#7)SpKun{ZB;D%4uataF%ppc;axT@rz;qHKNwIJp}CqIGQd8V`P0r1-br1 z*8KGD>SY$0HjxJ~U0|e~&(@8jMCJ}y$wHqMAH4M!} zaabYNI0d}Ay}KIy-~*p#kPDCqoJAtkT!H)Tcq5zq1E3F5?Y$xCb6a44Ykly2HemN3 zhyEUr*iQE89D6d!TWi6l=*#(g(2&T?&uh1ty1Tk=`cF#aIeo3!JsBBUY9uf70t?^k z=xAu+;ORovGLPB)`^Vn}Vl5q2YWC;DZ&3_Rwh!E^xg_0U^z{wUIdh^>MWVmMn8MDQ zB4KaoL*IZp*A_U7J%l(Na+%WzJwxAgCY1w%-MR+N(7*emrt$s^*PS=7u&}qnS3EDM zM?XZ%YTZVsNr7q#=)FS>dX?G+=o@J^%~nqlVT)9f<+>;iN0eU3xhs&yk4W{jg0q8D z#aG*Tq$h*z-0hy)JtaoM-AXi2n4MxVT`D!~*`CgO{CF#|(7VqPi28afE;4VUjL_F< zcmqX56YaIR)39!QGc_-64wx12j##bz@jFj2Nt%LC`c%wusJOdSlIPWd+2C7{@M(jW z%(5nixzq0miduMj1gl~g;jFTNGm70b?&sZlVGToOSg43B^!)|lp2l^3<8^xI0#lPO z`1}Hmp4|U&JYa8se?O~!>q&vh{lD=M3>C<3VF=D2g#~@P zYV?t5SR_gfRh9K#L`F%9;WeC~h*e84W1FdkhJMG$63&LQNHmCg=HPMqR6ltsYm}=H zKh-;KRH8XmYAOoG_@dz6H`4|w8^oqjp>yE{RaFM0U=o|3EnLq;f$Gyl>B{QrjXlzj zl9(8VWNiE!EPVm>&&u;CoC(C>$wt+L`Xx^VY|44up-3tyr-dY<1Bu$miKEc`yHK5z zk|R2Z?Y)>S{=RsU-@Zi1G_UxzYd3e-b^tk!gdY)Cwx zVJ;_k1x+53LjtykeuW>YMuZ$2oSa-Ot$SLQgLu*z4T-2fMBL)QtS9C=S-fJj(<$W3 zm(fRm{*%QNJehR>`cY?NV*8gXCv3pUpzKR&0VNZLx{)ykE@<>6Gc)+5OE;e!nPNq- z0H9fa`DACc+r2(+?%>_TBOE~zvw|!uQqgnX5L(oq>ifwS%F~TFNk)S{doo{SoV#0R~MDX z!qq%M^X9HZ$L0iP&_M4_)mAxy;92C@Ue5OI4S~8qOGs1hbT$kvD@CpPz!WV+D4@pj z%Y7(KOHU8{7bih|mopZb(fD-t_w5gdj#)tcQ9P$C*3Au6%;T|?U~pC*EN;dE(a9=c z_Msu0b}u_}tal=(Kh_K0}R{91z9=g zDt4PEICt1p$6l^lu93Xrk*(}K@};fw+^hfAM~%BN9{P9m^PUaR72gL`oDbQ-dvuii zwpYVHH00{!unn8?*$OhiM_UunFyJcZGuZvHq(ph+HxmHtkXmo2`T0n;y_(6gZ20`? z)A|7&k1VN<{HrfT{K4VkkIP5(RtOI1t2*cyq@5Nk`dS2N^+3X&0D1hsML>osx+E7x z>qI3|#>i)JnpwaclQ|{LX3`H=H^pJ`f(Qd|=*-jm_R;*g(2aCRtO})(Lo+o@U4T4M z(K{0J*!WqD~?S@f%RY8THcyqbJ6KM#UyF0yIt1udqxtNMQjQ zRmdUA*)CDg9-+1k)R1z)NUc8*Rv4ki?M*KfibbK{@u*&qWK&q%qjSP^S`=9vFvIm- zN~Y6opFOEgwx>&R2VbZ3v@AiyH4GXpUc@2yAI79WlqHJ)X?;@um6uW2C36HKlo^Ji zx|=>NeG7f-4*ExGU0Vq~k~O;QG$o4&FOn*7ju(U$fUPx~ikSsEdrmdNjsZ&5S6tw5 z!4-(<8ZoJQX`Rh3D8T=GPap(p{G;*(eBAA~U`AW44z6lwuu>Q4h)13e1>FT&Q|elQ z`Gj{-SQBojmlN{Hw0&(+=uF~*81x~&z8It=2_3O73hGf`d(}0AtPIo7e+6`~y&I2<`)(ON0C1@_@NINk5hoI#p)qGmx;S-8cvOQQdXZ4rgI*$&bWSUB3H2(A| zB>0nl&U}9eSkdI})-=W@FoWVQpSU^(d{FG&PKw1rz6%4lE5t@?_X_q-$OaQb6T^x} ziyaMwj7u~&Ly%Tts=3=as8t*?@NU-hOTl6?So=K!7pFBVhPCvfpW1qEg)=FC`SjER zz3i$X`}Y?(hezFf1htJk%CrJkOJcU>dtzpc7;c$hu+llRnAusMu^l*!u^sG#vjVp| z=LYVvKg+DttV7j2bGNk(J~^pvBt^=<>f_?#0^yFF@yv0tGE^d|0{qv;{rwOHSy}ck z$$~##WJ;$YA9v>Rrq(l z+NUbyxcz!~aHBgbbmbz;i!05J@KC|_PF#G{)1*RYw@xlh$t%Lwx3$bPfv20^LGSQT z-8VFXCBa!n`@XvpVM!1Y>G$PzxCllvnZ`p;Yd0A#QExeiqJX~%2HkZOk|(%gcRDfH zx(7Rh_0I_%4@i)FP$rv$T+2}=h}p9Bff$K-Z^gjt*!zu=jq3|N<6u=4tqTYZNA=a> zR$ulvul5w_SY(TL^ls*X(;vjz{o@5kSLBbvPoz~&+RWug3LshD;Fs}jhc%Z4N z3(Izn@+j}uzufKY?p8ke3H~Uv+_RvbB|C6FV7@!Mv_A%Wzmd`e%u6W^>kA7D1^Ovb z_%B|I0imrG_?wOYHy#1HbxNIB;%4GRZI+alb!?cNi3+| z5eyNmR9bvUO|6bk{2ZsI`udr}ZE5(n&cKkDS?rtC)VZky*C9~_C^rXUSpv==DH6no zFdel{w#U{Q;#nE|SfPjaqp&gF4m6dnX0AMH1)m)<^&?D@^j`DpW9jd6$O#KW*!s%I zVJwQNa^OM@^RMyCz2Fw-kBN*dhioQKmKi-=KCcEbPlCRgq7>z`NCijekr-8H*FR95 zvja0q8t>f;s870@!dNjIkxCuIIfs$wrsaEY(tqwEkUh?G7@%})<}~Xc4|M5qOLdOE zUG_8lTrCfMaVXm4VTQs*m0VnQ{FULKL|__rWIaK=i59v(44cRv>J3MfH4us`0C?Id zwSB(itkP#BXir}tv^bRS(*hSDuEk#ji@s4;l()zms6Ir4Ty5;42 zdIOXlD`MnF-stkl!iS!{qi{VfG@UKAs?#~Nknz%8xDZ0)d{g4{80|ip$h%KZtL8G{ zIjNyJ&QQIZK&tv^=MbJuNUox`QJ*f>$K;Ei`Z+PCS`;p~JGoOL@?@>o4dwO3&e_vb zI@}ekKzG&6|5W|~#;z3^V926UH$fVT(yF?~M1DOL+T3dS@;uLBDWzg^vcl0IrGW6M z_L9#tAIJ2Zov*SScEq%#4&LDHUzE*&#XDKh?30F+Oq;3N42!S|o8A|zDyIzj%sWVOBABn1Yp`@jmoU9)p*zWC~CpgKy_ zucJaFALX5I`j|)>x&B&33W-EY`=~3!>z-|t0P@;No+*{!M;w18>h~MaOBDl&FjGk` zL8phb?@LLC3DF;)T>2F60WxPT{Ov3t3JVM`Cv=lTvO&-s9=ouJX%wT*lrchg3akTWR6gbPiwqG3e z%bN5b?E+?iFRS@I9GFQZ&yC&|-R$7~G0;8e6`t1Blme|b?saSd*2vLEnos4y!QMOV zwWal7eZWuEq~ttt^fH!5c7UgTTD&>XerpAMa03-(R*j{9b$bK20@Z7*x2MB&-&~CI_h-ib>bhJ_k)X5~tC(3^d)Tu@TI2vMw{_4TQwC3;`Qtp@lsj30 zF~fYTBsk4=$O$`O@li%+8^@2h4WAi8%&go!zoPO)w__h@rTQUboqXOgT;^xZ29czvmMaVTbw+V{j!Wn^q5@Ze7Zcss^8(3lpA z78s#>BT-K{?V=$s5q3M4l^1Y^bl^WQs0-a9;yexqxkhmk zIszxJAARe@y#_{6W>^6tU(2T1{&K+*&EB2ZnAq6Zm_p~IFzf|~-TtM@vW+Vc8z=aX zE-90-EG1=-ju)t6i3_TheH-(u?1jZO%h8*)pp)qXpdWplnXc} z$~VZiANp)(u~)Fnh7~R9TLSWMm&5ukB(bZ+8=PfW<~Ty~LZQf8Fr=D6L>;2?X$Z#& zQHiS4Iz(RZSw$_ab^+ zh9f-X?mdX}U6%C$>lA&t+X;e5>NvA_8k@d{A{W?0a}7b_YpId0$^Lw39{>)Z(0b0_ zPBTcVvj%Dk`WoSo2o`9Lp6`u4!thiRJwa#kM1|tCert#dt3%L<;$K^aXfHv(Qc#IQ zUO#zJ_Gre5h^cTdM$b01#y9rRH_@EUmgE)SS0`5Vm?X)=wGVmz@1Sgif}m$%XUVwsD?YEK9@CMGLL31 zUOdmMSU2D1p)~(hP1*NMjxuc+4k>tyBkt!oo~$KZ1z-Ezfv?eF1!1DXI+(Mn8T|Oq zQmDl96Ns>jpE_Pob*9@(oq{@NFcD{5$Q8{J&ISs58O0?8*L8%f3h13l24 z9n7OD&Cj4s%~uk)HvyuvChVa@Cg`wdeKPg#lxFRjRfQ)RSe;D`!wjW>a=_)-n{Fkg zTO|AO3ikdR8*BEN0PW-oPN&v@Vsr5QV9Rp(1C?13KWf$)0HtG9j^B4*ou6EXU=M~|OG`dBY>h}?ue~nd zPUOV2Zo+5u>0Yl*R);wC*h0J+K^~3)^OY%9I}?_47`+sc$j5<{YdJYNJHm9lcSbQk4)}TAyT`Ck*w1|b_n!{^(GFo~kB^3jJ`xh`R=O^DCA2Pu z%O!~>l>VG58b@!c@e9!0W{q`qb*+OJE^@|v#eq%B^uausCl~*Gs1J@!z>9Sh7P<%v zlNwK6SQqy%Cw-Q%ZaDt!sj~V^3C#gLwuoeATB`{Fos@BO9%bDmos0_QFO~h3jsDY< znTnpmh%@|Sek)~Z!)YFY8z%(9v%|L_tu^du-RQMwb{|oCFZq z6E2VX4HB1!lD`D3{&@EXm}W0p1wM5QaFhWQdMpp?nVm4E=Ukl(fUj^DAw^;~bWc`a zFYddMs}Ef{1BJ21O+AG~Ut^tv6VsAL5Jq3lhH9~)g{f7Eg!uP&)c?gGzj;Q(O!A!C z6Q@OC8xPUwyBu(H#Lhs^3OJ{3 zsWAUi_vr?^3fbHD>B}A(CH)%EtN1lk>v5&SSrojZ8XvE^VxJF7#A^TGZPA(cQtJGn2 zy-`!~NVw0)Ei~1C?gCZuTK?0mv#4CVAxS=ec4+qs*Lf3yvxz#2bQ)GN$XOrEyHtX_ z^Qv6z+M4|w_7W7KgBD_gJbAX2EAbKQW1Kpw- zUD@KEjYDXmb1w1E00eOxok9Kj{o3&=2SMNL7DE?CP*CF2%dH;2h=y1SC3DX}!ZfNf zoO29Rs`fDT&knSz_F|C*2s}%23`e14qE<_1gc#}5v~hF{`I`r24{TZjnAW&BI2L`` zVd^?44Jj(VYflz?=dy$5lYZ@FTwk0I+}tphN*{qD6CO zzDJB~{snbzZ7C=@FxlSD3uwB@mJKGQgF3uGd(RGBto&y4>CInAEgDMxSo6%wYx_{3 z`m3P%gA-pzpFMK5l|&TYs`UE2lKpD9O7P6IMM?1XP|3i^R(4iRx&L4CUa$$eVL(z; zM~e!3!4PlT9BKRmQh1{qKekKtS@XP1de`-jwMkgIT;&K*5dU-KS+!}8^xMQRrUvWm zjEvOdv751u>Ps)J{Kzr48bhAUf@o4Pq#!M&sJPMJ6XN$UH_fI>1%AAq*J$?O!L_fv zMb46d#WFB<%W*vX@+!Df=~j3`S;2FKpu%*gvSZ>%aNERdBXSlHE?hVE->H21T+z@l zVO10Q9svTlK7hOZWRM&Xc|Joc{vpN@v(ui$WT4#VUY)6n?*CmR)^UEd9s`c3NC9BL zSlDg_rvz`q*5^{uJL#y;;l%_(tNYjLU#`)wHKEc6{{YuDCdq*6w_P@_q>>6?b9w95$wZz(AUe*)cWu7)Laz*YU@!#05{ff@1_$nC2X5eE zVi+SD2xjwPdja#YAl$ImP`e7q&A<}D?3M;3D9ZfH$p@B}hzTSWtR2&4|a={xt`b?7KLhFCAFIl1GRsXV)|Moo34c~3j zEMn%yUI5vnalP}hWB2dokG7s&f3$Lj>sHshKx*s19g-o)P19r!xCF*`I@1%F-S5%30v>yd{1o%2REv}9#dz6sZ|3}k# zhg1FkZ~RSGB94)R3I`<=$1GWK$mYngvX7CSWY1DM$4K@HIkFD&L3T!ULRr~lCXsov zH@{ck>-zoOb#*!Cyx*^JKkxf~41N_UF|qPLz;}0dug4cesjIV5>8 zMpU|5iIgs_0vx;6fDL@)^5}!39UVpsQ6Y^?br}1Ut=jF#8c@;HO?4ClY6(q%<| zMNZ1^!J|hKx?IEc-8~ySJw3^>-9%z*gmFprd-5|MkGEF6(Vqyi9h)MlvUnjeYGw2s zYJ$rhpfqkbp->T1$yuve9)(7jhZM?oE@>s-i;2RT5{O6fYNRUaH!2X_c~v$7jwLc? zQ`n`*Dka}mA~Nd&U}q;rrdO8}b?BAtsCeTsLxtyaY!NgVNaFy5;RG#I3|BP~nBT7z zYRG$ATZ1GL9NJK0Ko-ZDFM#BkN}0BWfJ|H6GYTP5C{qq0!-XO|v6a! z+PH{$Cd7azvZPxv;r9Nj9xd(ym~PI|+olGkPKj^EB}6TYOUl9m2p!HUG&`oOJ>9p_ zaz2%|1BA9(*E8dmN3%eEX_t+p*v5i>Q+O_iwT9z@xm%T}wh&nMW@%XKO(i6yD8!Ye zx;WX};2M^wtSVK$^9cg=`+wbs8=i**f$XP)Yul*oRPzQP^hga@Vs&m9Vuqv-IY6J$ zOP-)sv&L#KUvSqg6l>yAy_oeTSFiAMq^Hu!3~7(_Gf%eY&th~cn0Y7$E~noK6Hj=Q z1Q)WEd3pmTc@>pJ0=wPde?QfyO`0dmqdUsl*J^t-S%}2IliwzH)zve6ZDKJ?0X#2x zn!N#YC^B#Nrjv*!IK4z)%^8~dBsaBF5S>#Tpo7vQ*3BC7LV@(HwKR0 zl!s4m&G_m)awz?qMGHE<-a};D;abQ8x8UIET-9pxkfx@8dID&?1Qpa0vS!y^rAE^K z%)4H;1bDppzZQRgW-&FSn%oFGT9-ts3!DwVqk)<`;aNnGdDNATaLQR<6gcb>ihcoW*;w3mzKR-TU#T##6S9L>*3}F z_PdgtQy_e@&;qc+e&SV=ccn&O9O65w&CODxB@gEvop@Rn*43-bem=@x5Ic2q_jB?K z*dJ_bQ;*--xD#qOjsFaK)*tt-LMbCkpi9^Df)48z`^LiBfLuIQ9= z&Jd2pYqTep6K{JoIeU5id~&$Wc)1@g@BPwffXyMBon0~r&W@s)1 zfP^lbf!HrXtXdEOUp>r?#uPa?{#A~&D-EXR`pE2>ARro#dubg6YzTItb}B}Yms1Js>)&LE1C;KWsns5I28NQVoc1;Vqq4{)I@Twf@7A(K{ys{MKgM%o>Mght{ z|0N2w4PvS#;975~THVrw&fgtvDyvAh|aVohWk5r)5{oh-X9a9o(@sbBu6p64-eA)KtZ z*`%F%C_lk)`d}o&3!Ou@C!G`uGQa z{1nO!6M*U=xBh&r9?Wl4kFCf9RXMMLhPeOj5G6%N6kaX8j6GU%&*95W?qcu3gKLL!vmeY9_K)pg?2aL`8#@f-RD z5WMIMiA(8O)ou*om45-QOwn%@T+=*He~86^@I^yYcUkw<>?4mLzuFb{si3-btMc0a zc4v-`Ch~R_JYobVuSLzym52eBfhYML92=;1y?0ZUHZCSMHe}yBZp20UXE*4LCV7i_ zy1V-gi;>{8#z9RdKhL!9@{FF=AM(&VJlUuR-)hrw|2cp~ap;VsATeK}A+Q+4AtGPI z$ca}yq-kBSWN(`PgI9fVe$x983!2B+!NSmTG7ogoHGS)SuNc0VA)ul5Pi2C521ndQ zhgqj-^EKZf&#Zl@)zmv0w=~F0=zFe!#s1ozI(k*@>+`D~tmF&XVezA?R}8OebDjFANZ+l80IjPHMphuC5M3Qhy;fL8#%IkR9E3lo7wJ2AY!Y3bhT= zwzQ(30~RG1If$nh5|78BF%q{}DVT>k?qE27MUG{@AyVDd`BzzsR7WKUAlv@=PAGZJ zN${)!h($Ba>>fKNjZHbG4~|WSsCJ~-5YSJm@UyyPg{zl7N8-R_hXy*Xw3(;nG35e3 zb&0GBj?WfKWF6q=?>^7~$m`95k!5#J3u89Tfr<%ZLxtT~GDBR3Gjdx7t!+Rg(N=!y{;S>-RRZo$@=P z9(QbD(-y{xjo1f&=lZZ`b?%N)qN!1`ej*GUs+EO%%p~ZL^95&lwG7aCl;K}t=t0VG z7Zy8>r-gi23aYkOxk>5IRb%=(fis)*l7fz_v?^S@@6yP$f}C7~xFSvKGpN-O0CcN$ zP+Vy^n?bV$mO^5@TbZ$m9i;NKmk!1WERLy9>4te}P!?afRM~R*s4&vbtZff4!0}}d z{8Gms$q-$|!yXD2HRc$ix<5n|CZ-6siFZ(kKf<9A8g}+y4AM=A-{{fTEd&u+A4hxE zdH@W-{yTZ35>F%=SujvoP%y{-^GX#nyrF04_%Y~2peLpY;o%Z(Gs2EH7$c1?Mix=o z)N|&&MdOO+Na7r>C1xqdOXVlBU<9%kce3e;{1ulicM5L!KLcBQwPXzL~{cnt!FoFy07$@}kKz@xHl5hH&}T%9p|(E@ep%bk`}H(EJUQAou?|FIQq8dkwWtW+(u!h7 zIRSNGXK^zPX*c!Wiu?>DkLW`WJIA-qbU*V=awf;dEE_8?1l#Bdd^0r%dj9@cW?l#H zh2i?i?qr0RjPDo0p1;M+s-J+cdaialbYXBX>1H89DR?a%bXm!ZQS60Y-Fs+rs*3%E z%?VqfKrC$mG?wqw(b#>^h_ZTAX{*t69p~k<`@GX@7F{kVuK{ z&s@TfwcSHmp2i?AFE0;|kGDpy$pVu-w`cPZ4}%oI&Ca?012})jf|SC5H|;kdZDz@) zriyu%y_RU3Yt}<0mx7~Y=(2W;VY%#UB$Cv*d>^&7{^j03s`AvOEm{(n3iFSb$Vxqs zdFe$_oc&jNb%DBdg@W{o0{5)ffEQtqPh_L|r~MtZ=zI+LZ)zlfXNSD`+B>wfaq@W9 zYR2yB9ZD*SSG*sosr;f?9L5q>QNGwh{OY=nf?mN_rQ+o)thaS1hm%*G3F{p-Zr97M ze@)8o7*xS0U0XXme}flye53BLv881ixZV#~iXAuhHJ;-;7-FQ|meBwVtvRqYbvvxM z@4-Z1`(@}D0bIVpi=LO$b8>htt$#cWzu1~RIRYko(_UNt)yDT+K<&8v?u0f+PY&7N zGiLG2pQh>B?eBAQbM0hBmr`dxlW+Y>J6qAw=g#F;(Z5kOs~uN(PbOyF_MHeDSrrZp zb@l>=x}Z44{(EG=e{&Z#!c+Hi2_&?S|AaUv zyem_fUVYqhoCS8<-jv3&t5vwKMS?NA{+&xl<~5Itka?j!#(GC4zz?LN_^IG4y9 z$LBK@Wbm*jPzWs1U|JaidkorEzjb};95(A@$LNky@yL_Rm&Yjo>-$ycR(i(fKILCL zMQiSV!(6`rBpD=1?FrPa33!*8e>ZF{h#zjJ2R-ftXAr*$q+$8Ud_jB2U$xRA7s1t+ zU^ezL4t(_HbP_yTuWEc5hR!H(xx~7fF;3I^HWxs=e;cFO_?UC{+Lmp#S| zGaVBzqI!7r{Y*f%=Ou1h zXWm#*3uU%&UV6KD)08s{ulo#9H?yFs$WRdeqhkzNR63^pEJ{RtiV{M9pftchh|A&p zmzFMAVfeM_kiy0ECDaCNK(0CiA?4nWm4HUsoTIs`K&DF$PQuZkh{Chm{8Vqm2?#ji z6T2qqZjn?Mh+)(r@ZcA~qU@FRFn9$R5(aUw0mN-lX=&`>-JQ^*Du69N{B3=(5b#n= z@yMxHVRvFW>=*4rj|L=*U1@ks^-J!a`sc%(Sa-WJ+cU~W32Dz~RQm-HC6c7~m&JS= zo37sjgITB38S4`suy~AIy4<_;3aSyJpy=^`EsrO+9L{5v4*KRr!p0T-LbdZi@Y?EQ zu0HBJeR$={8F6E~7<|dig~0QXx2Pn#epSI3JWlx2m_1P~2 z3s%uALo#-B+aK&@4*jN?!YMhivNDaUzE1feG|EdC>|#jc>UZywPxlI6`-pFYu7nK{ zCAVtxHoyeTZ}{_}AaRn!k|kUOT@0n}wC}tqI$g^#~@g(DZh9 z!_ZGa_fmg!xl(g|g){AcZ7I#byH;~Q&dIFC$M>$)*P!(Y;4tbeZ>g@Y=+kh84l*C)n3)}noLL}9S@)a9b9z$@Y`}nZ_>53|-1(bc|Q7fwy_A%)6 z)9v!D!(+L-ySPj--5+&UnMjB3!v={FZ%}*8T znTJNtkBYyo1T1f79S~?dY3n_C>f`I-szQ2Rz8%=qvfoI~Q4Eoj6U ztU!r(`B>O-bI8bqce~|~R`pm-q2k_5A5Un2m$R2}N!3q7M0imM#PtZeCG0lp$f9cC z3bBQ-s`*-m*?{cvRgVMv1cBw~USQF zu0Fo))RP5za*lT-tvTWmCG2YJ_`G(%wI2a9t&@bnja8?qklo3V>{Da2lwZ}??Bwq9 z^R>Ouo2Yhh?7Zq(Uv60ZVS66S&An`WbnvfwywKGLAv|`5?$2&R6B?T!@Us=HQPhv0q(5OY`DaG~$P;d%IACZ{ak#N?J2Rf^oeorH@&q@GY}S zkT{M{m=(fMzq<0U=j8&HG`I$;akHaWLYNI=&_5Zy4a@2U(#PwgaRO4Zva+dS? zR1rE|uik*0JCaLV^$7uaK{F97D%MW9myMxb#>ivU;27*u5IHz?|OF zdzi(W<&E$eT~sn2cNUbN3GiLXzY;DWz>=>M9P<(G>MxWEr}z(9FA+`w3umB)z>t$o zox(o3a!c`@FEkO@TgYVPHyO6udurmkzTbW_zrTF3^%ogc2dr$1Wuu75Tq|Jra6Et9t@8D2_u zPfTP@Obp=jUo6|?5VJa}4LeF^vi7%qEN{Lbv5h7q-w3x^W_gh@WZo?vP3%KrV$GTR zc#ZH6TpZS8RDGtwLzEw#ZH#*?*vA8<2yOx9fQ$KfnYEe(e_vcnpN zT!x5wT@%6wsK;b{4mc~dEi*}aKaRC3KRhZP0R_gK9D0;CmpEW)x)A;*xa72g1OY}S z%O^3fS}Q;BsE1Z0naCkR-0a*e)XxcB_*_VlW-lD2GqUMY=1VREce9+L-?z=njB{>) z5e!eu-^4G^srOQRd=~~W&KcQtrzcXn(Kn|+*G%BS{U(p{rV7LX*n^#}_=2jUlTS`3 zc%OHZ)|M8g!3STQ8YlIpJ)g}CRNh71J%4GcDQIM6q7-E|=2lu>rf|5F$DNru(OHVD zSkX)h(wk6}Q8X@&`n(L zvaTt5b?>Z>+g=4dHzp?s+B~lhYzVexRf0iK?lYz-!>lo*57omT1KD9csA|qiy;|?B zzfZuK^dL7#iDG7@o&$Vg&4-g@tA@wLhQ&a|uwcc%V7kne13!KKBJ``7$&MZ^&y-yK z`~SUD%_HR9B1-Ja>Wi12>0^)PzF&o2H~*bauX4H^G$$6+WYu3pT$M)yWd z1@VYk@xdb9LgycFCSt?Q>G#7ILWDc}Rnm))glhA$?4c;agB|g~8xgygnJ*!LX|wG| zdhu8DGIPy5qHkuIV^w_(`dX)95%rt+2H-obx0Hk$LRx^SQmUl@v1FH2Wd50%(MVdC z=wL=49raWjD%}IQ0Qwv0I5t%l77RO5Cn*g81JdLm@JHrZ;$epOFuia)RU}m(OVOq_ z?*F|2kn^SRTy#AAfh9(BS&C$Z!Tyn3@VMpgS7w#NStfywVQ3voO5YSHBJzG@elDeZ z=RB18N&uh61#8seqKT-aBh9_$LnPYw1>sm&@6*7T?@-kkrV!&5XT=4~*`DJSpsk_a zV-E&2izM4ODpfYrTO8oSoNd*D8nvj{%G_o6zpt13NH!~B8W2M&Q)VaKV8LY zfO`#ez#7{aRcG0BP*=AZnSQH$b_HyQ52<0#p9#`KG7~1}S_8d$9O5BnR>+R2HJ!+$ zc#}rCjkV&w<>K~n*OTMgiNIx0IT)5<((ft1z4axUi?%T*2p!)8pYDvkK?rtgqX-Q#BU+^LL?aW_N{K5-zHTS4%!{_Rrd6 zWBHF`n{g@v4e^|AafU#^1&CzCRAk&&?9bSRT#++Z67%5k|lZdlx`{+odE zlEGr>F%X)Tn6VGsgEugkw`}-&Pk%DMsv4&|$opa(K0}m)w@gyI8GwXNhpE zV6=|WkHD5`Zdc$x>uw$=H*^QJ)K$8aPD(4%&#XIH0hrdgXnhKy)juQ>>DVunU|!s# zXVu*mvGbcrNq%!MF-!zu$%N^4i%5^V+~f>C{9*Po#pCGMPGExFqn$RtZ_QoaXTV)E zC=82@wBd5)`3VzVj#J!R@XDVd3kg)Ab+-+dS)^) zH8ONB;uM_f3K_Fsr+omi87D`_9m}BdYLC^8+l7iZw76J^E!S#ERY=X z?;L>*im4{Q4qV(?9GE^jvwJe$Q+o zB`@Lu0^vppIh8;cO)+P5Vqg%`jIk>+K{Rso!a}K}u&UN|M{FqtZ#*9NOTEnacJQ$q z04Wv~5SKWKa{XyUrdXY#CC6pE!hu!4FE3tow2F_2fGMVobl%6qr>vN!_aB&54Pw>I zMg`8;Tt{Xurn~m%x}@TwhC*9LtjGRr9fm}m!IZ^}6c!dOuk5-(;N8kUEbYozZ7zKTPt?_E#XSDhQzsVXefX zN6Z*QF*MyZBrJw$3QoBG7I$GCHq|g*3!Tc(3!ht;~IIrlT3KrM8`I2Al^?&C*XIo3~!H zloRdFVH^fykfhKeGLrNP{>6}1`6nodw1?QJao0XYYtY@nWH$L)eJ$H$`Q88fu{d0Q z^G9cv?|8j=%k+y!F?UeuXPFV-m_a8ZPTZmH>DV5rL@Vd1t;}=Ee=TMuAHfIf@CO=! z;C&eeDyU}s@{f@29oDOBdrmFeFK+wxY%$2l{vQ0g3qa*8C}6M^_;xTa!5VVdXniwi zUMDPs;a_Ifm7dq&F2?&dr~%PlNdFUdc-%4$$iv4&?hoS*y* zDIERv%&GfD+DiG_t$Xy1eEidoC-mlebk7*N9nvv?99~BucM|UP)DvG)+Q>jS(0jv2 zxD@26kudk}R}ONR?aM5Ha2%2qf_{FY)_9)I>VWqO9Dk{mP5$9Carph>hY2^C-cWxa z43RLU6-{t4qOWvc?o|H^R@Ps#(*X;6q?=Ave38k?yI`P_9da}&r7PkCtbV|j zH72(@QSIH?wMuN5Xy8RQdu`-binecFL;U!YObi^cY+v3!IEiRa5V+;-W$R`86F*{Y z4Z^p1S)#o=tBRzq7jYN$69mdI_&>jE^|Nnz&(9t$BcFW$j0QFWy)wqK1K07WOjKLj zics_x*``e2`i39Tg(s??N3q4Q!qj9rRj5GWFDsIpVGJW<@i$GZ(~@<>W4hv)m1&Y2 z`yjc^e7s}1+i|nr#9G07zH8&hxv3Wuu{t_>QxEq{o2;g#Yn#lAZ(QFR85wTgP4onY zuPfIgD<2P=`;Es(44JPsEPDtNx;X-9oy}+CRyV?Gvcs)}$z+p_u&uG%T(Jie z6Xzi(MG%%tud?1-%6S2Iyt`oJlgJRBQ@`*}<(6H^DH&Rhlt9S&h3+5iZ(4`!iKwBC zt^gwTw#lTVfc|vDpy3WJD72&cUG?as-5@`I7P}NM_AX7 ze*FIOC12^_XyNwqa**SdSZVtoM0#O7zFJ+i;;$m}Ed(X?XHmFx+bj2I907Vmgy@Qi zEEgk%pf{tmyss&QG*LsEnmR0Mn7nQy5Mn5!PDZMq?~w!0ON{P$j5Lyu0EXPuy=`y= ztas5L#iN>7&sD>^743EG~4&MpH?kj(Ks?<++c_fw8z14AAq z<)QGOBHK%T4Vk->-;DzV7DqXdzpbqBYH0Ww1efLk5M~m8jW8qKzzwXoJ0}(?ED|Y& z9um-m+@^hXGYa_mQyV6GHWK&=u{!`!_J9FuyDBar0mLRBoez}{!S%6Q%uOOwpaN~D z8J|vNiFs}Wp^9vcQ3#1oQdDNKb-7JBH(ARF*qas@Q!N`TB7SQbzPDW(#VM9 z!V&HS68ciZP&zUE87NPM&I&@@2=3;^8HHGN?D*p^hcj3`)KC}1`O7s87oXU0;7O@GrPk?6mI9b*C%l#exLU$IDX8^ZAM5xYG_Mg1H~yN7Us zA?ED0stQqLBy)NiO~iSK%TBlx;qN&EZRMSLGYE@M&`_FHbHL$b#`i(4sLE4*lDx|} zVn>HGhf%OYcDOdKSUn8uHB2%f967%sPQ~M*aNa!!irj7bFyvdB@KK(i?An&7Ti3jAVY zUrzdOUab;cW*7!j_OG&G{yP)(8O67q@^GkI!9$EdAU%A-+BN8$6+%AV)wlHbtQsrj z{#GeZGWfc=yvtK=EDR2EuA^H)uK8lU*$UqK8~scD@{;Y!U=v3p1gccQIEYKniyG#m z1#Bz1w4oJN<#95EBKe(9*lx$Fs`p$f9hMS*m~?u^Ydji%@5B{4b0vc=VSvT@u+io{ z>G49w#4bkneol6F=-=F4;|=-9wp<*n(ck?J?nXEN1m|3sac!?i0w}@H=E41B2A|mU{&DqqfxPjN` z?~`AsLC@=;qVF7sHJ(Le?53pWPGJ77-}EV7N)w#=fXjTCCMWQ8kQML~>fS%To})kT zn7o$d?d?5q-}6yVdc2v;QNL?B&_V;97pp_dbAAt-1ErkZ(yr1$4~3EDqXKTgJsqQD zS|Wl7JuQH=1{^;NUx|EBTG7S=3%AfvW4(t-ejsD?zUU>W<&7tf*L#mRy`1ih9G7#B zdA>+uKKZ$L)x_91#Y7QAaj`?Il2ui*R$-uwx#XRkyo6jsU;s8CU_VGd*xlClNsN91 zsv9KS8f{O1s^@tvf4rSl#htYcaMvxTA9q3Vxzm-{D48KD9uK8J?YzF5|B=_st1tL~ z!Qf*0)#i$t2BN}M;WO{Y9-Vs!lQ}EAzU`nx8I{F>k-8~8~ z8CkyT`N6^7e(q%^&qW{(z3+Xk7;>-~wtlsc6G0mk6Pq-tpExFD>< zmd^|$U4XH^*0^Yjif8L0@lhc*UPG^h+~CR#Xbiq+-Vhp|*Rhv^Y*OoBXaZi0k_4Z1Y{48TTbapcq(B+1A@ru@ z;FppC><*PO9SKDuB48|EQqMpRIF$WpQZtGDc`yF#1Sqf1NW#5&F4oD+FIgKM44&QR zwK=ZU<~r|~N1*P`@hMd zyRba(A+6`5B}7{pw`a^B$|b6AuMSN~ME&&)JJkot!Tr{s<3S2XRnz+|Rsmb+$5YB| z9b5$^VLM@=zeX!Ece`}UN@r?Mjy>fMw#y5*Cj(M`*DxxhX9_{pMDiuKxUQjQq9?eI)mI;fw#5Hy!_JJG>gWn8Z>TXWdw(CG zy!Th{w$%JrXJFtQ`&9_2<}=y%|4}F#cb3eXn)?>F8k+9r1n&$M?-mkCT~=f8%`xk} z$Jqxu8(MW@!S&C(~lZ3jN zg=pZUhqnXx5sF;O&PJjHmRiNHYF>ym0)7KW=)jVmZ-!pX3d1RggmJi~y`^aVlYzn) zd~{}3e7j`d=r_zyW ziguP`WNtlN(VzFwck9qKCCa}v|DYEYrd$bDXtwXo#DiAINE4OB9}X1~z8j)GoJA1s zIMCGyMTL%yx_Kz>_A5P>yTo#d%iyVq9q#)xoP_~`GMOmH>y(yA$E8BUo6*^|B7R=^ zF)t!t6N5^Qsc>ckiCxsk;WW;PL_W4;c_shxtl_b+?adamGUFhFD=gh6bZNk?(ctxxu?y{ElNu;m}?4>y(=F) z09KUN;|N?&m3-Fbjy@e__J(?j!`~Q3^I1vy@pe{Pdf%^<&&f)s_}kX#SqiK`r#m3) z;N`kV59w($Xi|sgUI>44D_k*9GXb8Ko<5c*dj#H@x1^JUgCFO}@_lYH_dDGeEYxo9 z*%*#hI?NBV^7L*-#ZAsTZf+<3+sp41wnYx;(S~1=zVGA|H?c3d9jM@cnSmxw;iNjW z#k$m2%^`12=+WP$VsL~T$c=-o8+wO=rkBY?^7i4e)IBI9jF04h=#z7io4X~DyaouW zzKyDMPCZQlYe)6To8+1o^dxxL?*&Cg35kq24_3Tq@ZTN~&mSI9q~n8gm-<9F%0}*` z>;I#JZS~Z{f&L^f0BL0m*KMep3TRSzgSsK$a1d*zMkt<3Rs&M z^P3Jb#<&~6&dLylUnnB+x-TSdQ`*clvS0~1C6A- z;7|;jmPRD$L;+5Lo=@K=X>RcGnQj*uTp+te;qPS z$OA*7lf7eA@3) zt#a1Rd{ZrZq2-`hf9PLjh~%wX0SBLGMMOmOPv;sp&z;M^GHm|v1&+lFWnTpNl}cT- zJdY-UlH~yXow00x*Bm%Ku~Pz!xFsAtRmc~$9vCq8SPx6f$(e3&m(U#;dc@GWe*e6l zp3ao_fF%$Uv3zlula? zXR0P>cy4eMn3pI#+%4DB)0+tVtmt%!ohM-H1yF9RLf5zbCczE>kdL9;=Xm(kJfvv2HHF3Z>qbJ4_5GbQvJ@3X3J32E2NfVnD$+u@i7tZ)BXM+Zb(lUF|fs9Y?GUd-@#<%&Y z%>q*h7x$&CqJpVI%KzF5IL(~AWoJVSl7zK}nbEVtP)rqy)FUBzHh`Q+>c4A>8RSAl z8Mx|R6OZJyk2(9L)l~Hv{ETD}kEozqom(~Nb=~kjg(>BmBqf+)McE@h@{$}5G%y(2 ze6S%3AOH!?h#$HmLSlYPAFe}T6W~r5ayi}GZx1>SeST~sj`O_;Nz#&44X|l-&?^)} z@?a}7<0xFkCH8EcJbde}|2Ys0>SmVzN(Z~c3Ki2p`Oirj8e?#55Xy+PW*A*0W?_{! zQJ-gAt`@_g# z_2{ig6{3Qt9b~B1nq8x%Z&u@?IXH}Oynfs>Bm$bPr~Fna$Q5<(ADtXM58D#}Q?MFypElN?e`CU7;|9bl%)rOtz7D93cz z+~8rMdYv9h(I1h)%`*;ID~z(CzB3UF2AhnI35l5%fGK{k#XoHa?!JmPw$8jftlz{zTy2j>SU?YmO9xi<;@XmTtEY=zYvHnl$U5;gpg5DP!C^Pf8_ zd#_qR^TUm(4yMaNAI4YTp z0=5UiYmD9(-($7_RRxTc{eRKdU?W0LyAwVCxwm*;hm`>&d9y4K9Z%P-UuR_eXd#Ca zn>Xf{|CuRP=k7I&#_Hp5UYQi?Q)A%NqnL{|PY}RaLVP&XHF_nId6Ce26_oOKzRosy z2@w4uHZ=i4Q8N5jtDBJs##5Y46^CF={-;;$P926+XMYU)9`#ShkSNkKqG{rlI z)0Ta+MgcjlB9mNdOmund?6vM1chtS_y%5N!Iq?1prOkBnaaEP1?9^k=6sO6PeDEWB zh8*?{4PlJ05R@}Xk598`Ydxp+yk1lf3vT-s9(SK^tb%&<(x-6`X~Uy0K$2&0KhE>P z(*+BdpL(yIuqFoWt~4EdFZ@=yl2jnt8R-M;%BOQmryqgZx{{LR=8r7iuMGY(uL}O` z_IHg_;^m%JR=~EkTz=fbN2S+3`cRaubyfEAM0L|WjjOlOZ zo5;RV^1WpdIB`KV@YFdX9NXB99MK4V3f{%Y>Kc1Nf`Akx1nAsndCo!?sS$QW3S2>I z!D8&)nivL*Fp=rMJIHGeBqd%)RMz=w z8pRfT3@S1i8aptpHurH>gfo0d;v>zgKjF($MafCg-QVW=e=oofcxRQHWm8iz9!?U-OAr9kC5h4h)P-r9xJWZ$7Fv3WgW795$ODqPE?^#z2 zKLH}#$4aC@LEKHK%gRVw53*mfOc0MRy5N`}(j1XhTTwLgx9=K=oI3`>_n(_L;2hZBQf~+-;g@e@E>s24T3=#+=58ymc1R z0@O*yGk=(dH?%@~`wmZ(3TDojg0nHx;b}n6EzkWQP18*rwKIh47aTZ7qgJylJbos0 z>c!^@>dl!ZB#&bC?c>hEQ8P)|U1@VV!l$D!j+HF0s5jE6j%|5k&1c!iWxR%ak5(z$;OSa!>5L;o`@+d2Z6 zt^>Sm*iwYGa zkZ!vH3QHqSitm9ul}GGvaks!P#HzKwKZ86Q77I#ca*4MKu4Dm+SN(qtH3wat)2q7& z$JtJw_2rNDcG6eJ{U#=O7_34TV!`UR=`{6YVl>U8$aY}uoxR!4C~HnOJg3O`ZX)T4 z1SVvmYy_AW;&K#niE3!@&!k`aadELcqs{HNc9+&Uz+#r8bifL$uv7Dyp@g`T(!F%C zZ$aBL%5~MToEa~qVwN(KjY~7&Ll_hj?SypiAq+A6GP(o4B?f&ICMpd1i^jqMgr~Wm z&cL~q>aguEcY|lZRUlW*!ovJuov8)%{Vs5b6}x;lX7D;~ZUm|BgTl3-2ICSnQtbA& z(&K2XztT-QwSy-Cx9hfxNRn*5fz+h&-QgHHt zWQD|gi38P#(S!#v0PwS4=4tu5akNw-{Ew+xE+-@s;z&bHR#+5bt-i-cX!mTXw<^DM zD_B3p>AEILaO7m@c}dvO)g0H_@w~*w*VUWOR%~BrF9+L$cAD?mji_gGWN?i->NaVX zhcg(s!(COB;)VPs{g%6S(kFvnLjKDuRiGX=@Oa+|_10V)6!GLS4WS`elS9 zU!=)YX!F2o@aecU;6t1>Lo1xgjG0&fa`m;I`QYN9;q&V2;w}Fw1+jG>Ud?>$Xedz%}i=sC;(V^|xZgyzwQz$jD5CAwmnNFW9v!<9i05)d`un zmHN8|$mV<_xq5d-wdFkb*h4EiH*N{0ToIk|bo;VV<}k?MNfSU1N_TWUz%x zQYmAZVVPY2Hi9p_!?$Fd;S5xQkueml_9$ueh6AS^Mfk}8&(V2C=UBYm7$vi=0UETK zQ7ku^ut3O1e-#aLi4HivXBv53D~BRIX8Z)=lp2&dxgNV6%V8br;p!TF?TkT#A%OoN zrV@x;(|E+IE^((TMOvaO1{w_S`uxs92%0yuf4$8#@I?;=S-}xV*v*+iG9Nmcd0h?c z3P;w{VW-D2LAWBv$>xj#BY#{7ijSyPlc^} zHcQC4_)gPd=yJC}g*X)@r497y^eSZ*i%3aYW8Deu=}Btn-e(@;TItvdnwK~W4dA07 zUZ|1k`YsS~ve%fn}d*`Q3RiX&k@W%Z!%3 zM1p^b`QA8>Gc%x`p(1kKq*g}B89h$hk38m=o$~)xgTI@;zg^`G4wkOx?qXwP()nib zj)hj`Jc@hqV0NC`ooh1XZwnw$e=_-Qls|*}dbE^Vl_>4~IYzAv?F2S)0P5Gq#v>;Y zM>FFxk2bg>aBul&8HL3rj>Ab_K{{J`r z78yl$9b}!X?2{ET${{Np96RgSGYKK%lj4vO86lKW9Gj4FjO>VPG9!B&dyn6%?{)pI zy85fG<2s%5d_Tv1Kkil7ikmsO{4MhadYtSt^{lLG`ER@cK8aM8_6Ot|Zwl4ZlRU&c zIx#Wwzg?oGlc4A4qcK&LmC+f}37;K*4iY^l4v%Xbpus`Rw}722j&Gi0_29T<6?dha zR(aO)o*G>*3_jq~V?cjJKKCwdxGiI_l%*XsZ1kFp=F&@QJq#I$1q%9;#h#}xAm0Y0 z8fWV<4fwBL2Y;tvGINQcu;N;bxA#dQS+u5hZ^*eLTcQxo}9_Uj|@^XLFxZqYoswTuG3z*>LUyF!$ z@7(zzG;GBBScC2$-BcbZ{d|{>O`{|XZ)k~#hy<<5D)4v3320@u+-Jko?QF1k1HZyZ zp%49*XYrW}SPPv@`wlbfu~2Y^Mwv?#|7|$^M7=&yy)(0?_GRF#uQw1pF6wvEFx~NX z3>dE3u9B@X(nd#U=FxIURZU2;(C`EDsXeYM+22D2Vxi|SM($|nrY}UKMot7#wYnl1 zj>>R!x)@Dy3h3Hv9K17}JV^U`2(C;kcZI`|$Wj3L_Xnz()LX30p~bp`8T!`+C&DCJ zb>hi6b`rx2%ORkx(kx?ppwCRK_!lCn78jHA1Zn3Zt9zw(yHnKh1qhHdU96u^&WfHi zVFAyH-QS5+56ADck-Wui{6>L5NDpR=+2rWN#ONBMZMtnHE|bh>y|gV_LSPcWqhA=C zSC=qiI9hdn#l3G!)l-WTZ|6;Z)DZOB|DtE?I!m((L;_>nlP|Lx%2it8QF|GvjvRgt z{a{3Mue_eo$Ogq8`s!e7tTK{&7tQ$6>eku=asWs~VIm*=)lcBV@drj@c~q#G>^|2Z z?6N$6`1jV^7vLRx*XQQwqf9ObL&MDNOi&Gv2SZ(q`tX?g0%dvGC(cyma5ZZpt{xIX z2v{Gegm-?s*_6ax;5Ct(C5Rb|LILFwC?$QmXzqAUmE%*w#WiqHdrvEaLT(A)kB1Rm zr`5H}oZ`TedqmO!=<7;An~Q1<-D^grlxo=br&2&;diQu%+d48JFE1kVEgvyG{(zAS z%Cv{nT4+*(GdwHRk#Yey0H?M1wh?mB57Et72=UQV2Zuupq-{@%M@BLmi<)6fN5>6k zF+gMC?GLIm&#*Bg_va#w2gv@`grla6(~OLJfwL{YRjyeUSSL&0Wv|O%&j-D3(D}%D zj9;NSlXm!R24Y$(8icXESsb4fWx1MP%ikS-TEDL6CxzufyVVwfC+h< z*e&!lYinz1wHaM{zI9j%$cO_;Jy7mDIz3(<$CR7Z7iW7WuI;-`fqV6^Q1#)EH1TtpKzugk#yU%~kh?$~)pdUj+k9rUmFy zv#fx^^WvOLV93e%njd~c<6+R(>T0IQfltH^}0E2$oWZ1mLV^4U7Y^h4V=V^4Bsk?718*yx*s`kDW5Fa5g&#Et3T6hHzJ zlB7-O&`)B*kL5PJ{AIl-d#vyunE#85yay-@G!cy%&HH2Kulcy_D_&j{)qeP z)B!$EpZ{XBnSHu^vF5QDNOY_}7y#5@m(#T|AdkQa!imKk-`{e*^rVk2b|4-5)?iGO z#yax#9Y_GnX%vBE=)^g6rc>FM+Q2{GYoYlFi=d)RPQ+ajRr;VpJJb(TdIDWCB*J=Q zJ1FW7G`*Z7eS{zvV)`+iRvI6olHOz^K3=#ID-=r`rg@2@BN*%C6y72I5IJ=M%gU#K zqN=gburXP31}x*-(XaY89rTa>gU459LPNrwhf4d`fWi5fDAMqNOKtY+52Wej4kt1?q@`NPe}k2sB_BP| zWXYlFa<_^C0%5djI3-j9)d;{@*}$9&tk~;*;*c#7pBx5FSkO^c&SFtb?Hx$TPDKVK z4Q24@c$u9eVqAx~F2Cz12PApta>1$~fZX{cgor*ICvpivmB-Hk)v(%HR|JHk(8?8? zIiA9`z#kW z*56(IZb!T{6TUl`pz~Pq`NQux&;@~iis|Jl%YB> z_{EVD@sUmmwu?&45s~5_a&ld>u14x$cDPF@BxOQSDHpgsFrDqvWoFItqTm(T@_|4#_^ zm9D8vO>`i;+YnsmlEsoFC8hEc(G_SnW@q*Wf*zQ^YxmbUKfhay?(G$+^VpS!5}X(z zdLoW-(vJw&EJ%6(2_wV0bA}@TrywF{WNaE#C8n)_1_QDly_zFVvM&!r@Oxl`vRCfjaE+tzQ9F%f)o;g?z?G1U-<7VJ(gxrZGJUc9 zhGlj2%VG?1?)H1^-Dgag5J^t%Q5nNX1b zo9opt;rCenH9*r8Bh!E$xV(mC7ceS&EFJT*+b?Y;m#!Obam!XtZmRl_+e&_izj7wdD^RT@#$vwdj0U`!|(aK zwvSgg?hN1CpBYGS@*-@MmI+$;?<}33elNXYL8jCD_Z3g*_=sik! zzq6{!XvvTefJ~TW;gn&v%`YE8#*J@3#`8Hb1>@*wA=>{;&|r1~o#(k$dJE0v94k;} z-#Y=8Y%U*!4^4j92Kc5t%Unu>tG8xQ}#-w;#c;7)iQpzr94` z4Ua34S&ZWX{w>OI^7z7X=Ay`GN%#7B#jHM9VH`3RyjfX4UE6+hBpsibkNpG+va@QM zx=|*0*=?5QTAvB)0*^A2#QE2+FB1Z)06_~Stn5`Mqk$a%(pFf?S)dXt;3*WV+Jd7~ z(&lm-FU6Y_+A`9H7w#pL2}%tEV54hZ#HX8$&?Q9*rR+4V2;PHTuCri--0U?>z_n5};;MOHZ4MP!zI%H(f~r&D$zX^aC84PBJ20X#xoNv+SL zXR?Oy2e6sc<+hq+^$w-ij;hLN3dcCESgWW`0Y?-=8yEC4MlFs!sYiyB zCbqP?0)sJdcnM4q`7}`mKVM!*u~>*rhq_{UL4C(mfx6m ztFj0@Tk7xEy*!6#qc!Q+Iqf{S=pP+5x?xiguy~r6$rsHQlry>Uw~|CrnIlt{{p7V% zj^7EDkI5n!`M+prym7zjZ-CU5>O{`4g=z}4Is9sw#)OLJI%z+|A7mW=4O@*;kzi%t zB@@Z;_3+qovOi)7R=s7roXR*RFY75R|IJMJ&s0|U?3easCK?yMhv*O9Kwl?6rx$-~Xy&M6B63j+N zM^F2cf{OVf#6b?K?f!mUT*JkG4^w~kt?P*)cY9N{8#7GzZcJP!^Ro`}860FhqDtpEs=CM7L{ ze!^`|9*$goPNA+clb;CWeKegd+*-Y$B7hRg z66<6Fy8^|>K{NDyPW5MBAEB)zi3ZKCaEJ|`K>S2V{rAT6P89~VJJBr6Q7Sp1uq=%g zoJ^(bO-0JWPdag>iGHRKX?Oi@7Urk;BcJtqmT5|Y;1oRn`i(N`P*-09TZV`_h6S%4 zu!(m|7F3R>wN`r(-k|1!j> z8c$-5CN?Azl?_K(g=393g;9*CTbZP7CaXDQjU{h5bNL?=b5JE>EhXB1VGwN&!2GT8 z6r!aFrnv%9F$|B6yS?D=DqG0aL+9=_u`G^0DU8d@1voF@ZoDu~Y}ksq z7yyFJ^wZq{5Q77(3^($gs%N#Q$*Vhi?nxq$+wZ&I(m8f zgzB9?uH%)HeglP|2plg6Bnkga3tWGNHPZ9!`Hz&dtx==Ne}ULB<>{y{`u%m<`}~MD z6YqCk`*?!1exd&MifWMP-SeL1goK3o)+#)8Y&+6suu!T!C1&EJ6IcQJEP#-?UAw-z zuFi}hJ?YIBZE@Wpvk5@$P>R&}ouTz~?|c$lpr#DFF>{WA1>Bgxix z+|~aYtIV^R&j)vQ%G)iBElm9v{HLY5Z+Wp>uQl<6pNyW!O8_O6>l#P7bifu!fDvhU zzU>S7nh^ck_zDQyE%XG}XbF}CrM8r;FH`l;95>S5^fD^P+UY0eTvaPH5EEW7)11sK|iQm%v_6Py&)-@Y5TaK9==4PgbuuZv3eoUw=9r z6Le3?$K#hVv8ZkuNcfsQ7|k+Hf21v?y!T@kXqzui-P6Gs|3g2g5T`M(#r{2P+J9t! zY>fKevApEz@R68dvG9wXRExTrCl#{{N^zSy4Dg;ZO|%>mO{Lzf@+|e>92bT-Ee&&< z0I~&tLUjdS1pSv0Q0y;`yMpu?l)b*vK2Y6B18fy=JsiW^_x{~Ahj!lF@mcQA7kN=T z>9&}_Bc`oM@E#8M+ZpySHS5;ix~ZvYQc_QEZ|}vt;l(d91-a_{@%0Eqh0}WY_{RIR z$$IAzPN=vJ#GiM9D4$~k<703mr}b!|InYl)-Ga9Wt-5fhfekt81bU@w*CxR@rGiX5 zFOx8!RE}+=VbswT`O1#(rp~0Au%w3X-k`rP;_i3xoEeRf1m%zD-LT6H&?& zMR0h7|9>rj=^Yz~4(TtrVG~-b+xmDA(W$Mv5%Ep5`b7Vck^!HL|#s@D}$ z+zhr)J7Pls)AHVeR*pw&7b{H4qv_c~2r0w?OTVNhkv6o8zgGik9hm^6n%#t=8 zH_&T-rz@=holGg6Qe}<&?loy9r;<1;6oHeJQf$b6i4E%-$m!BKg96>S-)huO3BNq;*4Pk zPY)+AWy$)*9<(vdr3PnKhL@_x$3FiU+-HwJFiw7n%|@(#Zp0ZLcv%A%KPXoPb7&VS~M7q7GV8{Ma|?wnJR!iHWUj)5O8*kyT@-rG9~rM+#DDWQBQwL2I8SuGCQ0|6viG6!Z=BdNItP%h4jR1v8@ zNkd$21=rO;3UfiatYX8+DrQVU?;1Nhd(dW4`#TVrAkzR!(r*@CDJjVvb@N19-QrN1 zYi2$y!86;i2iLCyUW<<_o02~6$Gmz#f%JZ9ZAPyC_E={?n%m;qyy2p7Pnv?4KKj-p z6HJsFj{n;i9D_Y2i@QH`w=&HW4iXx(YA~QRmAYA@jegi(Ml;Le&JIpNH-v%tKqXzL zuYf;XL;k$JH`|fJQ$I#BGlXh1uD$_Zg;nR zPhE9o{r->DViI;;Iy=eKRAtm!?cSyr;QI$oKTInZsXy*sSy|~@3|hk%4;EPIF({{e zj=>*@W!<`k`MEwk`X))+9PhWc#L|n56)X%_{Ze&LPU5WNF?;UFDrQa=yR_t7EG#6P zR=cT(e$>QCT9Lq|=9CbDkhJ2=Ovv$$EdBTr>$$~A+69tHK#&j6)W%ywd{@vFpDzWE z(#KvV(kT){#eX-^cmgkDJOiW!g~O>B$@Vt8N&+h-X;QJEdEH%~wRsU?VWFC`b$r8O z5jA1DA!z)Z1?-F4e!yv2-!qeK{&WxW^7Jg9CWO-Hu&2I<1#M5A@cT~Lwue^#x_U$8 zbY`AiNJwZ%kLZc;WQ_MoIs4Hs5O+9mFm0HpKkaui*x%o8aXOSCC?xbK%E-*euMUFF(!1aLcuB?`|i5^3vl8-JxKF6rB-@_(Cy|9T&C0&H!;pae@l*-P^SOxK zIa;E<9V#eDp9Xn+Q@V>ERHj$=?#y93-jU59t;sKs`V*dBYP^Ex&PH<4J)j)sf;4wS zjX{lyolW8UP7aaY)E^?n6qef%F{mh!xBYs1ApdH{>_>}u3s*^Ka);5Xrm=p0g6Xw; z@t+;bVZ>avM50k5E_t0Q>n=gXRF&qwOY3MZO1E920FGKdobdHI|e!G}B$Q zMGn0;i_SK6$#J}rL`fQ8YDD{=7~pN%inVO6X|ziXj}+zsYaD8Y7U2MKkZ2<{8N)MY zu^lO&Ble%`ATp*p13Y*x!ujMj8j7Rru#+G^y!LWg9)d5 znnoH8f;Jop0;L#u)YrVoaL4H^?9+JvUiULXgS1R6@lwLKdp@7~90togoM|a*SWh<- z47Jl__G%k0*llccsvnKPlqhKb5T1y%EHP=?U@mdI(Lz(Wbqr?nMWh}m*hbjF zbFt^S1)D-({g6`>SAgUT%jsy)d%7M=!uh#YpUJ+_Xjirg+;~CW#7)wu^@!;3@I+n< zNk2CZIMB;)ihIEs-}Cs;@>i9ll#8Ode%d}33mTAKm@XO+hS*<7_yGAmwfv@jp$TA4 zw&oWrj5t+Xzn-K-srr<5Oj_<8SLX@4AHSN}N0@Tp?gWr%dL~vyWU7Au7GXCwUhBQl z9e1V{_sn|3Y`i|Nt3{(pvOlzx83r7TJZuXMo5Jq9B<1qFAZXa1%=)e}u*#hERG)N*ij zpjAPVe&j>8JkdhJXFrtxP4*3@08j*HLA^(ryOKbKI=(*^^8y43J@cOal*uPtRA5&B z>?k>@-V4+v8=8;KeZyz6g=PBY)62{`AWlS#NUBaZC~C z#dc(Y7%}>B75&|u5kvezLiQu1ve)%S`;6n~;QbjmXM%wGtk|r2`}M`?7Z#RO%pCfk zbI0jEM1DK?qY66wRxmvBHLPf1JmUUEM%_gg!1`9P^M@RWoUY}7H=S^{l&==2{}2$E zR(tyFc zqxZy6i99wUEW2+2(vZcQMuW&k6 zyHVJj3~V+Xr`{2X0GB`1$*_^YZK%Q}k`oT8aKPCzacoqOwFu6kNGz0z0nD5-i|TX) zC3qe}r8Sqox&mDG{5NWvq^06WQMPxXai1X`9-f=FoQDZf8vrX}$9|8bh0pvY5DI=` zDL`bKF|_uteE7?SzBo`yPT0+ zadfe&Qm;6iupP`)oY}saxKe!r@mU|?%o!6!OUa}(<$oXWcWWnq(quY3Lc__>2^~sJ zRS;4E`n6txMpF`DFXu;q+_wBQz{FH|v77*w*%V^eK5D}eWmMl(GIRNhXwi)JQKg?Z zx}Lt}!{U}MmE??a>V+fRj);Pno;nMO5vy{y@Z~TP0$vM>NhRK3PWIhRx(FM0Z#XLo zW7})Ga923~KHJ~l;D2lpsV&}c_>NE?aQrO&2wW%v*ZN}SrO)Tx0s7F;;&HVZPk0wS zSul3XGd!E~l?I+M_k5-JRC{1R>|)n2$f_*b)77kIaHTjSH6x=T&p0C`1-E`rRKm@? z_T^%_>Dgp2KIlAZZf`lDXN)W2AJMi^4lRU*O6;3I;0%Wx#CYuJk+T39(cROtF%_VZ zZfJh*Xxmcs?nMuaMpqZTYS=XbPE#{-#D3$q=cHGX)Ek<)qv{da_5Jb1DJ)zf6}R$Q zKaT5Yx4GdxSEmD>6YhBfpvKJQz4ie*1?MQUSa+%Fz;3Eb@L z9bWY!$b!fcUTttbr*0dwo$o}T+`H5t8*YPz&kQj&VYGDa*QYT5$*I>G zydXLI`JXg^4R;d~!sdRd$mC-SnrR*$Tjh1a9e*Eh2QnOEGebr=DxuIkiRvQjOAu)G zC8ZaR@#jA2a=%yidVBC3xbS@1Scyccn89tqt`CVQn?KeXXxTGc_|xdRgC7zQ>KI7^ zAXG9UIK=gT_Zpiz(ei4$nGd-<*kL31r4kt!O!8tSD}$AlHLsVA5+V4tNZ1VTx4R^T z{e~|YT7I_HQUta;0ZRcf+``FBEVnYtfrQHZ@oA6e^z8`iZuE~b5}icbTKTbc?=HV| zu1>H3$l&S>m(t#=k(0c{@w?Oyzu(uMF;U?>GFZt930ug>`*>^=HyqvoQg8!pB)4c} zg_@>viw?bFyd=~W0O9Xmw;oMlV_{*xh~kxhoNvG~W*HE0RzdF$vQb%sb{?w5ef#k( zcfSk8c-9)0QU512L~8O0Z~=Y$`os%t*jwLu!e{S_qVD_v$c>RA7HnRFxtpu&VC4LPiDbkGxSB*HgI(4K|+k4~Ua1&Jq%p*z^3g)bv z2U1vXFh*U2n5ct8FrZ)6yklJuUYVm1=3FNU?H&Om!)~ zJhCv8ufHZbT9Qz6_F4Q<>X0rP?B2Jc#{!1bTWz(_Rg$$Jj;`>r%%c7=To-pEcH9jw z`)J_aH=xz|)6a5dZt+&svlH>$!dbG=>tz2XNIqQ?1Q<_|9+3mT0KLxS>bJV+)ru`H zHM{mNQKjV0lUj@2FOoms*7&2;@d`rn>u1|&YcfAYdoAVR>x z(J1UVWrmqq*CH{eJQl0S2ruiqw7Ev)AP7CTgK)ILW#w&7qQgc!R8u39swtm+*y=^P zwqt9qDcc}P2+7syWQJCAMr0D=kTgWky%3~X|6zYTc!sS3 z3`+`*YcEwPO+sNgs#xqh{@^3)3NYm_9p)trC6tz_BUx{6c_NUg*6A-4P_qGAIX)SC zRq_K#3yj;54uxew{k@pK(i5^<(<6(xm^%32NjMum_j`zOcj1DBp>Gjya$je2>kc|~ zRsOX#^ET6ar`f7zme;Mn7ID_@V0Z7`w>x>+x@xV7X`{?tW%IGhYS}gs0;)7ziosXO zUyjzWQ0-1l16BB9ox40d$E6qZ?B&=uaYK-#O6HsXZiWZby|nO>ob9aJomKwDp>xCD zD(9hC(t?P2-8cJ%;jzhD)55Rg%ieyaaki$PSJx%akJtmxWIh9Ldm>gf8VL$70p1vqoP}&w^cwHO#%)4t%s$nOCUHa)O zR=0^p_p_d$qi&yb_&9?2qtg{A!3fj*k_tt8MxIyE##8nw^MM40GB*;zCjIQm_^_+2 z&$R3N>Eq3(#p7wI3gtDGCe(m=%C>jd?zmF6^3cCy%HQ<-x0sgH@Pzm=73|H$VBfmT006jsQa0aonNf3@C#c{T!?hc@+L zeEqk>G{TvUhes)D{4L)tG#e9>wD)-Xmnu#6Z+lyrd_5oJ0++XQ#J*(c4Sh{Nq1hI; z#>OZd&#wck-dMFE(p>hW>HGKZId6D>uY12cL4Nh@{UrX#p642^9^NE(W#@~9d)4@4 zrM|$>U{QkYSdZfim$g-kLzApN)!XZP$G}ZH32?Lb?+T#exIS^trFj9P?jO<%2i3QfetLxp&E7v+p%0Vg@3xI9#@7eEs{nc&X>-r203GRAdi9Y_V#04Kik%-JpWy@xs zN6=xvF=mWBF!bxfhg;_*d{?x}fi}QDddeWrfal>;LO`=TIssLE2`Ll^UD*Oha&Z3P|2=uHx40)?yq=U{t1!a7cSprVsEDR_}&^ zMD!7$a_6+bq7WXc#4JTN2AL40A_dUh0uE3D7sKVjJLM!9i_&ME>}PDWc@mJg36zeIkLBiLS57&Axw&C~f6J|k%#nG44~~f2 zqT`mL4c>WmapQ9gq~n1k;U5!qgS%eRVc>tzfmIu#rv<8A_qajk=FT57!G#CwV^u-Z z4X3;pN?Co+ea_drl7wRx_{#CQ=6u-^98t^nN6F*9`uf|METn{08reW%A8>rNs&UAg2KYIyC>EFfznME z`*(FX<%DoF4@~@}vA~{cSX@|#f8zQnVD2VuUOtxJnm$-<7{N7kua`xQ6da`a!Wq#* zT>@ZoFVDF6+1c4yAzxTfQ1{F>5Q8cAT#m;@^Q7JD?PF$TX9rVpgIi=&Kf&Aoi+PZ% zudj6CV`#N>Rq6S5Q${NAIhXCpqxX*HqoRIh)bDE+kE|ca1^=?xo0@L8*!-70&gSH-pS8i+PvS0-*PWvyc4CS|5_$MakdjW?r;WEU2 zv3p~`dn5V1H2DnvAX>z{;rzU|7~~XjJxliOsvHA9b%;MZ*KAqAE1K!L!`ai*2SMfQ zAM$z9Xqx>tD&42g|LQfwb5U$>fRW>Tb~)d$cz6CKPG%KC>fMO-Yi7a-aC_B0o(5tE zy=%eTWHUqI&L0} zeR;3lDZ6rCmkR{Oh3!Tye&edh`L{{8FHB&QzOqy)WcryP^Q^r)QAkWS+Q_-L?qcox z_X_)<-Lp)-xR!9I&y4V=mezD%MO)GUrozoVcZKvDUxaH^Vb!Gfc(1}a+OE0In4xv~ zV9M0kIAFg$sL2JFKmp<3Mpc@`$ZZb_RoxuLyJn881InDWrzd9ThjoQ+=frhFGrHC~ z^6Wb%!?D67+9wnyB2?!K_{r~z>m4GQDE)xVS3?h|nHsi!-2ls(O3$t$*!OB`Z4p7i z(;?5G^hMvSJ47FuU*fJj<=KzVy^?DqDa-@QyrVw21X0HIhcyDT`5oTSD8{?aVv8CU z3)hv56%%c>D%)U^&(+WvEcAeq?)9@*SpFr^*sx1Fh+&giZ0hV=TS`=CC_N`+pw~?5 zMC4Ea(X3cwPas%c?#mNR{ds=G-XIOw)nmsQA@6Bon^nlITr2zm|&%3#nvEhG~}H{zvq2@D0im&Jvx| z+{?faTF?nS=SMU4F)gIT51CYS)FNKdMMvFMgR<44uwkEf!)>&O1-kX($G^Em-zLe3LdoCo7@ zSLi4^IaE;Ba98H}Xi-=`_2q!uDMWlPw2-8gyWGxzNDjnk&2+Z)Hvo3Z;@+NF@d&*I zfZyq3$ZhHlJ^>^zMK^NhW^fBbum;FDieqvXmw{R$Q}wyRVON0mx8^pz?$Aqm9&37R zCqrzqvy9JQ@(tPj_3-d5uYwGPps9nYqtSNx{qTnk;_`?;6r64LLC3rR(gp%3gHpjs z!qv5^jZ4?MBPQ1=JH3KOO_266J`ktdBz3WvL=B4b)A5$=rv#0LoxvkRa}_>>IHaheJ8i&oR#8p;qpU!mAD)Q=ejk)=Hu7fY z|HN#ip)qv|<+feTF&968sM%h^&g3`Wh`~s@|HhX$Z$`?Wq0m)7Cs2jM@<+ey$4XQ; zLW1V@Ms8d$s_^e>;c9(qoLI$P=R98N8g?x}McM7^G-zGf(`CW-LU2SGxx(5TSd#A*fsHf_8+Y-7Adm4gjrU^{$P^9)~pTTPSID6Xr_YRL- z$Tq)s>LrO-RLfl0ZPq(UzxuVY45V%i=M~d$`S5{N(**qP_dEcMiw;V9|G^7V*Pqo% zO7r@8%o8k%g{;Y8nLrYHUGWO=YA}t1TZj}9HoUt)t*s@8kRLJBUsB2e#ftvL61hC5 zkbkk((O%^`?tNH^&piI~eLHG(Wcsd$pD65oHZQ!EXQN=mIVRxv_Np1C&guPh?dkDe zYwMQ`Iq=qe<`1xQI~XVv3|hV#LzpO?t8DgvllkIk?Q~+OdVn`jhe25;F5Wg7?PH3G zo|N%jO!Ha$?Gb~k_x!U9n)rjj<7W-i&fJV}t$65eiRU#ZA^>!W{|>#(DYl1y`hP7z zCg11Pfm)yS;}!abWLx8$p(!9o333cv3R5_}7VKBZ&Ho=SOH><%I`9SI*V?G%ub{o5 zIp0li9I}|KcQxq|4^Nk>F2d|xYxSc3;uUv@A5s4+zPlgbut~W zwkjrOdO*nC^T+!XnWbf91RW<6T42r<2Ak%9C}3uS3E^g?yZp9=nPp)~X){0)Hd_x& zW{{weo%f)f-5p{yE7Dfdj9Dt)O)ZXVjVg9X@4r*1PTl41ft#BL-f}ZvvguC+b z@6F)wseiDG(Iq}enL@Ee6hW&To-XA80+arIs^OGl{9;OlSU&el9e0Uo-sU=a)&Z?y zz{7t&p3qhrPFu-a?;fEGYlwn#TH~;inEyEG&|W4g*0jPQXH218p~)?MKm7U1Ea-fl5KE@cpS`v0jN6#rsKSgS*G4J^mcQ0&AQ^7H zQH6s5bN!)msH6!jxx-bn_0jMMx;LVtZ2(sAu2m7KBS42&gWem_i2)FrQ6e`4=jMU8 z(uhG(U~&>IN0M@=LNM9OAIG>b-*hVr%YE3M^L5>cPC=JtyXg;dw9shILP)pYoJhF( zSOik}^%zG;#qix5)|Pq|ZBO`=Hjy$6(zft-D(DKeM@rIs9 zIR`Lln-S{l005yjk2`oiyF~b^V#-<*N4;$;r8=;yaMrH?R(rLHkqNfGTN7_U2+4}4 z$SH`E&3&E6rN$peB&th~{*+$I^T#1Apdo5RvI7$-~oT@1r0pCnqN@siEnf?i=VDaCWxij&mBy!I?x5%{+&KZ=;8>{IsRd zA+B4vlw@k4a`)V9Dvpkhipxir72t7T@7lWfPdldBPxNbXVQph9Mq&3gU|RLF{XO#R zm8*J&$s3rqY>q2#hf%ZFeK7zg{9{IVO{uTjpWok;eYAJ|@P2@kaiV2C;bRHXRuudW z>5aL&BrG1Ap7aS6yA`;LPX>?eT06dHZ#XFJEA6{Q##Ykyq56flo7=`=xMAHvmP9n2 zRE<7ED<)<_K|-#=XW9yLI6=19lW}1gxM35C5XeWgU2_F+x1ICa`g_vS)wahpwD|KL zfabE0@!!7;wWYvj?HU@q>_BpQe=!2ZOYrdr&STjCR}YVz!$ujyk$bOZDsIC=GUp2N z$GF0(@r+~y_# zak!S(a{uTQD|Rn%zjyYVx(4q?#klBlg}4!iu~U+;^Zv>M_k~@ybomovf%^sIl7WkT z(?HJ=;I`-+h}rrb#WK=xk>#H6R4B=;Bo^Sl2QskHE=bk|E{9~-V zjkz#NC0rn|S^8w@i+nZs3qo`4$7kmYD|z5CKG&{&aE#A6^`qPp)SX^FE$6-H1CKEG zF%zMP*_Lr&5*7&}5Hhslvd3H!ZJAVwTDSljlu7dbQ>YE#Gbof0FgX7sqTpC-RaRPV zafpT+NSP!&)IO0a+I{I4S2o*e>iS5Jp-kku!YMHxh#f=e>ILr1oSL$li~4oPcG z{jn&KO7BC<+s7z$Kj04`kmxqaEAcndcB!~6FiMxVZ=Du2#X z^ZXnSHf1e3j#Acf5=-qYJP}CXzeDu)uuiZm zQ*WQ_tRhM{xF1|p9wI631;=IK9tg>QKg8zZ8dqop=xLGY$D2qlz(0G3jd-WnO-Bi} zHiBJtB=(*uS|SvB-auRD;}`<${t&~8vbE+u(R((pVQE9}0dcvfGpdQUg6UWngIk&L zb-3U$qbwd2+FlP-TU>;$3i5-|;!O|KasOv3xFiQe=Sc`jp;XjGz@0|v-jRkQXfRj? zO|JM**eD-;Uq--O3=u=!2QIZ&xek=-nmB}dybjEcfEXlDnZ*T5bd~)K)J8-5@*I8; zNv^}IYeM@aARX#^_`9#xYyDFS|`eg;QWiV^^k{%Z`S7hd{)bGhU&zZ&$IZyxUl{{ zYYl9;__LiHSnRXiGVYk-mI2HbYB6IIH9mF@*)q-D>}IEyo}N2tJ3A1rEgbOm8^0Fe zW;~n)v#%)T0V&y+@LVf!LF=B_`y~QQ#Fa{yf@62d&XUZ}x4wUWDe{;S<>=eHmi~q9 zWY44!H)v{Na@?tKueP)vfi*xzepR;d9swBbEdW5J?W^wkmzpy7#T-a%o%Mgvz~?1E z5XBuW&B(A(@ST@#MB4XS7$!tSAsJ2{W4g~C5~eC$o$)fL!lA^IkkyeJ+8^$L!;`Zb zN9He25FI+^Xm3|Z66w!g^izbznXFZfpycG8>s0F>U}v|m6&B?2%w@N6ikScSIN7Hs z&7ZJaO8|Ja?nCiMJ5O^=3IoqOwMSOH;8civJJgF{2uhL^Hp1xjfB@@p5*lmEOa@XV z{aGILWg3j2_^r%Ae{1+%*0PtWkqDG5XmX(vc2Uolkz*hctH~E0@tDbPX*8hLd%b>c z>M?3IXZ0$`7M;FGWlyqA76)xfIn>4M( zoDuVJqv_}8d+ZBGjocLUwl)ahh)extWBpB;5YopQ`snKuR1uL)`ccdX zWc?hlPF4UN)nh#$kV2>7DFT{|V^(m@-w|l9o!mIdWp+N_;?4LrKWthRWfyWjbI20p zi*Z~Yv)3AN-ctwihS;WmnW`&yRtvC{$HZTVlqSe%e!NO%ybRr<2v+5QS4s!Z+(%w< zFQn2ZR+M?kS$iq?>2+Fn8l|s2%#tMSp{~1-Y8w%`#mHHxOg4Tj=Ai~O)*lm-1!Q!Fe!4L#dRcosd$zXU3}P-+ zCXE=;>-zaa%j@H~1oiKLSLGkDt|H%I*u@qqPGpHL6CB6;d?_8KyP@oH-uya~&jDMl zu=LqcMh-tm&@V3WS_nI=(BY=%YrW z3tDL|OBVFC!nVYaBqc~97!+$|r~C zHn2GeGSSZewc%5NP)KwX1(G2Pjecnb+HX)&>0HIc+_uH_2Yldc&+!%sMFl#zo z@V*aJ|3}kVutnLmUHB#hQIHM+i2(r-3F(j=Is|0^K{}*UK^moo4rytmhLV;Br6fh9 zyPKgqzWuz%@%;gYiF?Po)>o;YisIgHs z9aCK34-(V&y7Sx)n62C zWwBmutw{w~TI&or&N z;`s~y3}pG57XrP}Vo!+#zZfrAyt6gSmZ+~-rdTYT= zRlx4|2`9vPtSKWsZN}Rc4e$ZGtBaEtlWrL|r)g@e9}BF@3KGrF&)(4`rKET)-*i=S zh`Q`XbZmwBp3a~_phtU#EN15Ql-us~`M<7~=fc7p&)m_5?$;53xSJStD~T9Z!j4u) zp@{K_lmCzrI~S1zeh5VxO+pDutgtBBOIyGK`sa?O6j&{N#%a&lVxCr%%&a+dQXlnn*x>T0Rug?@x8bcUd-=9ugYz3BW`f0%jKU;NgFRj(HpooOl=M5 z8#3jEp&LhbP6l4?(tsgDm*LsDMWyg&DENX?#gC7G9r&w5(?+WDmmn0*lBOmcS)lO< zFoI|Fo`zyB%Z}jOY1If(%!V=kItCT*hxu_G1ef5zN-C5|o^B%s4M6{c^R^ z9m#t+sP|vKP(TZh$s^+C-!b$22nivQN3#98$16ih{NzhOur#X@c4l@s9WkPi1@_6> zDn$;5IQJF*X#Eeo%tzsb;x^ABBckTqFWaoEWA9){vJLaiRJa-DzABHa3LafM5SwHB zjEZH3Z@-Vu+o+kT43dalJC6^{^@gVXqW6g`;AybCJ#yA1Fe3WU;R--t8DsT&2=4HxlDP`N@fVUXKF9ONK4eEMvh(CQs zh598ooibu4T0q#cvCJeS=odNI;P4iYU&(_qCo{&rl3<65Lo{HPHCjaxkt|RjL+$8{ z(>xK)a5p{=BQ*^5EfRUa0OPT-P=WVAsS0<8w7&Ai37L*huxWJbLINd{*#T6KN#6WY zAu+v+5tOW-n@w^krakm+F-bT_!z>7jR0f_B-B&E3{z7MamuxM_GS%hnQTAOc z|BwI?l&%KOd|jI@$7o0*21%#}bwaGgGt*ShIVA?0iNg=y` zv4sZ3`(&W|dURq6l!(+LlnqIucn&=&=QdnLzJ`gb4rki5!yUmwJ5aC5`{*9QR_b3I z;8}*I>^#t{r{SQ1THT6dsAn}6wfc3;1btDYmurTIo)GA@%LSyurBjiPx7rU+I|9-WB=I8H1JNVtBO$9Y6yhy zLZLi3c(T0d@Vvd4awsb;;WTVgC%co2Fk$zed*gPSCYo1kYlV=oDE3AlOo4g>bfa&@ z7+UZ(rRnx6KkVY4_oZ%0!Wlcy^;w$Bmd(~14h*V#oXlvCHwm;N+1ZU9)XMh!O2w96 zlJDPz@E-E&*@lAoanx$OaH#cn)6Sm3sZBx_QuA>e4w*?C;R(=&&BYm znyTuI=dwMl{=J=#mDL9N_9ht2f2!rkLK@y}0z6q(gG94w*MpUMWNL#K7zmy>yz~_e z`eTWM_#KS_xOmt)5N#9co+!QsQA}yZK*cs?#t#SdY}1HG6<}?()Wrtq( zkMG%CN@xIn?@E!OQY?15!}JfQlMkj^c;ZC1|!# zSOB>OfjY5OWXTAsx*>9UlO!=tPP6HZqt_KZWeBQBN1EYv&Q7IMTXw4y&=-v8H!RtY zL~C{4VUWp|f6M`sabk?Sx|m5R#iDC~YM}Yy&p>bjMd>Eda5Vg>hAwZ;n}j!yp{?Hg zjO{*j#r*9wZJv2gAmP_3d9oVqM0ZU}9*5crjqnZP2H;B?5&f6@)R<;QDJjTe$BC}p zB}X^yWB7sQR{=RwRX$o1%1?(8yc*WIy_>wu0<4E5d`A*F5_=xI(0`~kTCP-^IwqOV)B+cEY*hCTvLzDNV zYT`qN$WW3mp?@=OzRqcnK;{;Rj%XGbiApJogbC8pOL!~=G}i*lhxH)o3?uPpMG)w6 z^MI!RraP5Yq%uwA^{Ly3Xc<&bXQZnqdRF>CqEOs#lrVqn;np z)5o`9g}hwqit=^5si-dPSuFk_72K$Zv0My$_3$Xor68~ElFcNEpwgJhowc{(Q7x?{ zA9ZEzRVsgwH`gF;+0Bt2I4;NA1|)lePM_0hUk=sb9Qj?N)uQ`}0CX5de_I}EVIEHq zr5Y7pCFj~diz8Y2&~$qxuo6UsyS2+`Y{G|#u-Y)xH{X~>6c(@>WGG2;8a@cdQT z+*I?afQ|m>^b?p(FB%^QYsWtH0Uoi#j7al`tx)b#wXfv*adC68hh{B!%HlUHIX-;G*%HUKMK!-2Znp1?vP`jv66lH0uZhiUD z-;E5+%+E@OBwe6z;gP4KmzUSv?i4Ev3+G#JUm$)Sd7?|oN(84{si(H63@^AO&Q~TT zW=ej)330xd4j~-KXmMJJ$YxXFuN<|d@VCx&o?4LM3Gf!BQ;c2inVtgSBudUkI$3rz znY+re{lcfmU3ALB|EL}<`_rfTnELpLAE#O8rWgwcjLYW%RTIJ)9@R;zc@T)h>wk&5 zSBUBOk0QpX7fj6m>Gn>B@~m3Se0Rbm#>hmCnnAQY&~q%}kN|L(@!t9rGuplTsP>^L zQUna+485;c#0H-VFlLK+5KmO26ZXr?nS#Z4Qf=J0ic5=q(Ddox2RXdqN^WNZQjynD zK3?FHJMqp~KfUyC3#=X)L3>?F6ql5$Mv*ZF(I6(vO}m!dBvw+VMkeO~9QnGa$sVxn zSM~gTeBb{=qE=AlowD~CWYdryK1`vOCZJg?rr=z&TI=#WKRq=q4fxmUn`WQpH%mxJ z+>TxjCgzsac4AD6T>d#aN+|Q*1!_;6|9>U$mFWKeb{_pEHjN4`Rc3>QDvs+h@#`Pe zqj8Uk&yR;dxy*2)VV%>GoM7Xcf6MVeSzn*+_4HE4Ys6eb&5w^e{|XZ+%Je-?)7FOh zN^~e?<7iMOg}?jEa7kpZ{6dmc%jS3=f|~Hx2!e#5|G<4qcVx&Qs%K7L%5gwV^hXsq z&OaQZaU*170gE*Bxh=ZjxdsB?-egr$q@4xYOC^di_6KV*2^?aVdtX5Nypy{U6-3nP z&D;Kjhi5-}A(SVms!gVfS|%JwNHu>f`66eVXN1T8M7?LLSdgiu>#ZnGeh6#+xUUH? zwp9;htd!uL-{4+GrxY-fSfZa-)5k=ZUr0w%m0*)KAASl?p>{xvNb@ZE*nwlPgK9(v z#(piyJg_T*?}tVF+VeQ{l#vWmQUfwVp)A`vA1mH{fgsnhQDG)zINbJURr|uc;f~K! zi;!)HjIg24@c-`Pc$=ds>dTO`Gwi2$sDhR;;@LzI>U$QWIZK6#hKaQ+vtq0TwMj7^ z;KFC=Mdn$hSpH*dQ-4)tqR`}$Fi{w)$P4=nhn7hancEYRij9y$D0W*M1|@v)@qfhS z0U#R6kj+uF;xBddm`0#4n_VMF#RTI|#?{mdxxb)=%A3Uyo%6zZd3AMGyQmpPs3Kx(Z{vwZJT~R}64hOJIyn2oY3bkZT13_21&aE^ zQ{uuVxpr(^KN)PJ0!&He0#qTtUJd|TxPQ|vG()tr4Yr*8>^V5Nh?jaE7m6C~{JT+D z80CH70tt97fxg)MK`$G3_qw(a;~d#qw$O>4+QB|s@3WzoyoVkRxx*Xcr_&)|AAy$z z5*7s-1~2@`0*t$(W7u7La^< z%hG*Jt*i=@MIe3puDu7>gTB3+-P|!Q!)A`EwmyE{ zqc)mHfX&Q^UH*i)oIHdCv$#AY7QZ7D#b!qWNNtzuydOZ#A!4NcFBKMh4qS$u`ZJcK z3Iui_(76qB?rrwhtLfvj{$hJJGFwYopvpk+*=VE`*K%vgjd_} zN$6s3;@qN~seJv^_d+%Iko_1>y5#g(XLOo8Vr4r1zu)X_m*Euy{c=t}sMP5-Zvsh< zjn`cO0%q~-*a~t*JyB6kQ<&NBZ<)KO7>S72IVMr~s$> z9ZK=@<t(fk6f7~Hy;>dTCsqh{4w zWpgf;EWOVGllVuBm4H`ovtClf@LOhsG|@SF{7IT8ykSfxJ>g8*Se~vJcgr)@&ZnKV;8KmPR~9X#yv`84z_=xRfNdGg0_?sf#U0- z-BV#k2>aWPM4s|E;g$Cg;r(}Wqj(Bazc2ZlnADh8$&5LBu}Ty1H}ru9S16Uz_;+j; zmceSGoX7WDtqc(^S`a=XOb)L#$r``yv7UU8?r}ET;)O+tfvD@0{+k4iLXsRxbZS4f zD*4Fm7xpu#@=yfbe&ajm((K$jEz0Xgjr01CA_Ql|_#P%3$EK9PrleI~UB1-*#=Oa3 z!f7;SN$id1(g!UyGtV@kiZL6zZB}<%RvWzv5Gl}slNe#)MPus>P4yYw%bU6JUQ0dg zzjMI0a{46|siKLkuD}E_5s&YUwVHgD-#ddcVI=PPDCuH$yPRz5r#vzLcwr_>sfXEVVs28; zpnVP$!yp`3V$a_){XV=35i|td@5~5j6b~XtkWWYNIp1Z>|IfUvpO0ePWX&FTxhpQ^ zkIcmL3ztPCGr@imz=xSktmzV+$or}~BGjt3*b_}&L6gG1{VCOJdvFHbt0-ae$`AiI}L-*f2Y z{OA0$rJ(@EFaEpwpR4M_=FD^;I9@H%WCM ziF47p#dR@%f1jc9lO9)MZ|(N=a?n1(>)|Qn#!>Q@``}4_{Jw7k50YS;5yS(%sd&DDx>;+*$VzkTi3O=>@_ zqC4}uQ)n7Gx>;@~Tw-s>{h8d{T*3i5(irU2HTQo6@S}MddYa;qAHJqp>Xs#M-@Y*r z_PPSKi6c^9P@78Ym}kHP_cbpt?JFVN$!l}l2Dl;|=zX8`RxqPLi8%bJ>ivv*bY+Lh z6FMqb_9<7oj{Y0>_vhqvP3=fst#Gs;q2Sh_eUm*q1 zUGjrS`YB)PVJ+Ij=;Oy9EsasgNJH`Zn)(zj{U+BP-P}~luv`_dq7iE9G?0j>GXUlnLL%ozu?#sY%g@~lbD#Z^i)T$ozF{( za0~6Ne~MC3QHjfrfH@!a#ekzOE1@rIC`|1#)h%b3kmB#rO@sZ@_}*<1@iPqek*(t# zc|sb2FaG8lC2P5DZIew=(}42GL1^|yK%K3eXHepHdwY9&uJLHcqpA6Ho|T1_Rl@Bw zKbHCT!TCsh{6z0NF8%teX`4YTw$NUeL>6)j3K>+&mr#Xhqj3h!$u!q22UX2C7eLDm=(wGp8^)eb?uhlX zfq{#8tT%YE9cJOchodt5{ypd@F+Yy)7>OTQz4%-J$C$lj`A||`YuivXtzDyn5)t$i z7(C3ajwkwjAAn&^$Pw5_Y@k(=`SaGj0a59HOZ;vF<*FgwFha)m9ys=I$P)SIR~_;* z6YOBQ3il4WX(0gFS{M2mTSCeV*&P(UR>wjrBU7zp*m6=lD6jGU@}?n{*%%}?KNXh? zsFA=vi^Ldx5r;HXI&}`Rrgr44FeG1Xn!;A@`bE$Z-zWbglb*~!2q(8iQpI5*ZDS^W z$SG_3Gfo@jApJwJFAg1UY9XX4y|nuCzMx4++6b}F0qFociU%;}zC&$dx}*7#3XY5g zD8#FgQZs0EGv;u2LfZgXcb-z*%VwX=4t60Q0$# z-L5&0>&3wP{TGi-BO-96?{+LK&KvE_ib^Cfhx}1!GVs0rHwB6hl_|xKX7%h8qocM( z)j3ah>g@Cibwu1ZuE2=nP~IS9>4%vK^w&;kZC8A69<2W~tfxFfUlRvF03_qZv1`Lj zAz8ujMtgF>rX6nWOEuMqh;5cU05se@z6f)8R5rFXQl$Vd9g18!8_w{Gn@~~PFf76*cuI%L|mLF3QUH2O41Vs8Drd3n^aYa;l!G-5;XQ#5NK9)3^*9{sje= zFYWbWBF4YFlumK1x!dR7VF-mm?Vs$wkAfwkOML{yb=^+4uet%>tZj<^d8dJnsQ1m! zz?`yvgCCCNMEZ18wCgDrgOM?!0uGZ$UVt@_5GNzUesZ$*agwi$b zl>avfp2e8&TXA~_7!60;glR7RfkR@0dRqRchG+lQoA43>-eu;5U0?fpGe|3poEycDggnoPBX#U~2TN&JB z*dqJ`RA19qj(RQsNe8K>7+s>6k?N05#`~Lrgq0jm9kWrYi7blFWAZijfYX^NBnOW; zc|$DhyuA!wcFueAHz-duJQrI^qvVxs$?664?gm*Ht{^LL(BOpfs`KV4P3E&Ei zEXr-zV|$2*&$)?YHM%%RG{}lvI1hLr7$#8+AqgM6olHd!vCui5)K`pRn~1~?kqJSP z)WF;O+Ltwv$Z{nWW-RE35U-fn`>}Lyt1R{J8VTlP{>inrG#gu6yqZ8muhdo(S);az zF<#o%-D8aGQtJ4duwmC;Rqw$wcz8Y`3k{rvpwz!6b>duJ0w2Nee$K(f(hsYiTBSrW zt(ZtvZO|iAL+}7!*BRxpvTX~FT7Dslftvh`8XDwGsPs38wlEE{CvpeVjE-co^EF8B zN+eYoB&N6dJ0JAtC~lQs-hlrU#$Uno1l#At7O0 z?HyvP{#+}M%VzIRst28-xL?6XK?AF3Uk@>Xin&L>SHrQn{e)^DTU{88=7UUvJ0~fz zJyAxOf?uab>Nm1fe_er8L0-rNzx1%(EJQQ#W=7DLDZoe-U-I$7RthX-Wu0-@_?LK? zzd|<_=^Y_R{39`*5~}A@s>|Xto^w9zn3cTJva*)<%heuD>2UA$AstPrI+R&l0E2W9 zltkbMueTjH`GcFm2$b)mxC4HeiG@vx8@^wusVSA@i&toGj81B-)?lMUu!+>2x8|u1 z-!8b_6qnKJi@CYF+V6h7J!@S87p zs4WUda@(ILZ{m+dPC0skD>5STrq}Q$H!Caa6EP`v5k`@XkhAOY#Jh~^Hf6)lUEYiGY|oIbNx&PZ z78c@)o|E9?t1`Vz>oD2B=KW78Y`(q`j#2MRaiWbPI3*w?Obl|!PeQ&Ga?((<7G3Z8NY6zflw2Ty15VROyw%g&;Vh#Our`54et*iE{BwPYeo7uzQx%i^ za&REyh383o2t80GbHf=H{-ifm>)H+OdiLZVZ1g(xb8*o69zN6Hw?!&^wHY{;^Y11%-$LDz$jFy9qG_hA zv-Mu*2l1!ruSQ-OQ%Uk}0Y~t)DZMYB>g#=DJG-5|gsZYV|@jV^q%4>rezPszay-$1FlX+HAR#nsyFKwGlO-vRS8qnyc zr*~qAuJ%p4#>U2cuTCn#WG=q&+4acgFSl7x&Lwxr>UEb_doDRG?Q&ts7u{5*$<7!M zFNU)>G5Dg!*vo6IvuQ_b>$hM=o#Xz`VESefSq*+3)V(L63fszXZ2Pdg4Gb{3)*wCUYC4u zte{v;uq7jR9^0+b_TmZo0-Vi%=I7_1eZ~F4?0(x9vJ$@{I4jC4DtftlSthz>KkF@@ zr9Lg>9)>Elh)8G3pZ(z8T+T}gcOFP)`=o(@{d~z*LG(FG9Fn$a4pu_l^Fx{#j?h_W z1&a|c;K2UUKp)YF5kQykq=M>xL+?jItwWxXhOm>q>Bsn0JqpXm~U;hyCj5bXp$d@ zSM@8=b~V(_BrxNBWk$YD2QavZ6=X=`{;Y7RCTNynk*}e$Nl|tw(Q+|&$MXwQVyFHC z%Z{-w6yW0%sGw=xtX2l8$2BeOaYyw#l0g{T;}uaJ2j>jNAAFjJEbr#`;a5XR2lGut znj=#n186U=0naKx?J>ZL^pCK2h%t%pm|{4t+7Z5@7jsdAe{x34Sfrw;IWg3&L=#yx z$o&}Zw}o|TkbNT22z-Ai_HrpAKK&aTJEPvC;*pbWAxr%H?S`4skjwCL4KiY48Vn;l z;7EfUW2r3;)L~ghtcC*e zz9hUYG}b!8=+@8R2{L2Ep4&(f3XP{>PjNFfwcC@1XX``myCL0<%Ap(CkfAveq-9%nYUJE@S#GbUG^aqUH+W6wNI{4 zwLOLudMMjY>v_aY>{q&jL!T{FGb(9fYG>-i8My>tGjk7VXf6ZG#P7~mFU=(b$uVN? zGDof9@Xt&}3Bd!On-GFI_8tYi}Fo zUO3LTmcE$6z?LG?347~keWxpOX+_(&`ct3l$@Pqh!zn}yPr^WWazSmQRLN}W+ zH!(YK%}hVK5ZRHA0d9Y1NKpYIia||+Ag}Ygq|@zLK_MaTreh=8u6#~9o0=4PL*FoD zPilxYF~YR(*`>oHIy$Tb+Zfk<%3n%m6}6XoHoNs7UKZ+v<~Zk1y}0_j1f*Hz z!#CxcJwLKg4X*a3n(PgE4%F1B#~W1<+2Q{|3^Uvpjt|!cSzT2Tr*`SI^z<2%6;Bmo z1^;ImKzo0zo3T&)f)7%<%x4|^!1Un`jBA_$l~zhfvT0+0@Xrw&G_^IFcvdftH zDwnw9T{sjezAJ1P~rKs5#16SQ^O7X_` z8waO1H@9Z1KgyQ<4L4W>LYuEbf(7iSKN_KZAg*TjqrV->gUwgocv){bFu32avvc@o zXLtWG-E0e1XzdHa(N8Z6*ab_YznhqC@xDj%)JC)O0RoTFup}-t_j7+GNAFUEDNU#N zW$R4!mf^lT zLOCqWPRw)o>Cq)1ZP1;q|AHo~=7G7mi7+7{A>HdDnWMMo@qGp@3StHm*dplA(<0A? z7>wS)#c+^p7{NrD6c7+eyGdhezh%c{$~!Q)f+lbbBsTn;BT5MgVS|&KV|x%O68N-7 zrJoU>|L~`az<|4V==N5zp{QXdm@5z;{0uLmDRdDhUIDRGpa37pWW7g3oRf~s)IvO! z;RO)WlNX*$Hi{*o7S1K=Y_>^BAix;Jq|x+#9}Bc@kwOC=+&brot~+GBjL7~gz9 z8FqgR`CA@GGLu%aWRPGa$ohIJ#PX!44*)`{g9JPM8ek-{fcR|RY^8+w+PkLt!Krz| zy7o>VJcU_>8P(>A0LK&~1plcTLKfen9g9JBZx)-sPnu!T=t+Q46Hh0}F)qF2({)CT zk<_$MOzu(mVkL+FGhU5M6=o!rjcwK+;F3O5VTN0E%I_0`bZ z(aQ8O4X^I$BoZTiNJ`9;1i=+UkbsKzcRYwlXw%ff9IUP|lY+;vAY6uamGk=M4j$kG|z*adR_8j%HD)#$A%oo%pvcr6kFpFHXg%&N2w8LJvuQrYYzW zf)<~7@a54hVYJhAIwn?kQTx+X3xp;lt}4a%jQOn83ffZLuD>|_W_2NPJu$}h_Q&3| z%U~db>mP?{p{ugy8#gevqPY+(D_c7Cz0H3>FW%^A_g#l0&Neu?BwuWBEt~4~m$KW9 zB^jCcjVERgIk`CbzLvza?OXHjSP->&qSH#owrY1L#QA5&IzA{>T65hE7$-z)1R6!5pNHt)@#8~Oc9+0I@f4gY2 z4INb5lr`N5(Qtk%ET~9GiXc#egG-m46VziJQlL7$nFf?2nYJ)SxBrB;u9CKRNvcd&i`er@(Lhppb@_yEWXQ}Tpv4f<%k zY!OZBFqkNHFtg&%KYvbkM3F#A5WAix932~b8vmSUV!nc73&msGDQM4>9gxG(3uD8;oo6Nle3 zW8bzPzBEkxT2!X*IPj^_fEBvS0~n$)|3D{F1cqjTW%0%wxFmC0VXX7HKu>$^@Uk7n zKhiw62cbBJFBUBx(;F3rJ7xW;S$c5kK&bb{|Mfh|66BD z$)$fag}%k&m0yARof~0z9mfoYhlfws-*S?_@HIZ^OXl@G^p`ji*9-*_OKCD@um>v< z2^4Q?@{>@Rjvp&V7flvw6&ZRgzl&wI63nrvbUNr+0M1#j56$Wvnn`JHHY-@5T{xsi97>$3s2Yur+E%x}AxBu1zBON%#&A^dAUeNa=NW+;r zv;e)RodoV`JKo?hH!JGUAgCBy<6!m%^kD)Qu)%d0`nt}|K2xL}E|A$p1!OuxhGoU* zR$Az8byBwtvE;xcse4!k0}J_w(IPe)Ed=afpvw`W?fCHt`RX@@jw!s_G!EIG-$!e+ z4#3*@5SXFZHlkt^kWY-y=B0!oSvmNo^7=w55}yX)^oLGf7Vob%ZTM2b5;cn2OMT>@ z8KlWSc(~98oG)It{ZorV_ZGh}<7GYS+FxI$5MYVu*74j}ES&$PB!fXU;GCFz-($c=Vh2$o_KRPX8=FR7+Se-2-T2Qju> z&iqe3P>P;Z>NWH^(pW8CmU)fpg-^hQdgC{gdLEq?q=M}yEYR6A!fTasRatg>Gg_kO zHs_=Ozu9lOIvApFgmB5iqFuAX4R0m}#jf_c+-xr8T(SyN zGH^2Or1k6s6a=(fjT&kf6$tJhJiXs?oZs@-%B}foZwv$V z#lyiHF2IoTz1E&9@6_rsm11_{flOX$yla=!TEPFx77nQwL)>zj@!k|(Nz)?bz>KAT zDM9R&r2pebea%VdP+}!Vn4Rxl)~}~Q=cP@jcH`Wxmu*q+-ncHN{W?6n?~pFE*|-(< z8WI+T)!(*a<>Z*gV|*AGL%JzKYn?#? z;BWb?>DS_-6KV1>8m~8lK{1kQ;zOJ6_Z~qwa;&VZXwkFi>dy0mncd7(%2KWQ zsAbRQfBhRjQT-|~v-&2AM@^JU!zm3?J)g4P;vGmVA zsJPmcbP8sZ^V2%P-2HXa>HVkr0<_?nAjO4YW};a5l7*%2_{pUw^Qt2FT#CfcWITO6 z%-%20XXz!?%^Ea_2%i4D9|cmc!ARL}Y#@w`73IB1dVPJJGdwj_a>C6JfcO7ifRL~? zPJ_meM;+)Iy`7(uk0TdN_^{^(ymKE-)xM0RV_vMC^R)xY2z~RZ7p?rX;DgL9ilULt zLEptNEG+*9S6jyHL+$gUjp4bAhB-Sv>T0Dz9d=m^6s%j5oVtjOr_hpv7~+?KHo=l} zzB%Y+0cvus7f(7m0+}4doq#~>HtUlX@`V{A+P0}f=kV~<$Nb|*%Qelq5!>cdfKUO` zx&4FvZn?ZN;5Us^R*d!9h~ZLknB;p)2O?{ehYsQ{D+lpQtcKl(VoGm8XS_@li{e4@ z%iXU@Nk~gDT}o?tzj_sT|MsTrrcYP&?N=Nl&>!pgpw*e!@06@d<6EkEvRpO_^veo| z6V7^=TP#Y#B?GonQ6m0yOAV-d2aMRi@OVYpF_G;+)$0E7RLW#(@P+uVmj&#=%wQqY zS!hXSVo}3D{&?w+3>{?i1Y4sA*)0=tml{i*2kPk{wix)uzau3F=ZH*xVU@o2>w3St zySqe`HI{k*FFV=&0h(Wp?p*>9b{Wb=+v0P891C22`iKooin^?8Hp+ zw<7Mc=PQf-t9TpbIs;0uTug3$Ms*?))iGl=-o!Emvv=jt^cg65&Vj= z(!vSp_VheX%bFv33^0K^P^gjJw|2ND8#N3^2N4&5RLo*$@6>%71dmIWj*iAPQ3@AY zYm|e!L(8@N`zyk4#%}jpj4h^#kjM2rYyZqOB_VDKr2t^7{70zS5lS15;#mh1sliuspfx_XMO#d*1ln^7y*plT_<)hBq zkQqsiJo|bUr~P*gfDmn0C%NxTn*)v88&n4ptLUg>q95CWDv1mAI!cVj&!(QXqn)q z?oZeAInPbJ?KM2Jy|-?*u;z2K=5xGt>-tUl0rJzswkyn11O1O1D~WSr2S0z4vi|&= z%&hp_G=yz{N#jl?yZaLuY^%OAMaP5%_5h`{4Oxypkjiu0ovHt@m6t}SXQNH=QeV$N z{Gx}q4L6%@@K9|TL+t$;Yfx}-ttvf3_UX%}itpd|PW0qIE6{d~Qa{(Hzw)m2v43w{ ztTnZsD#3d=01lU)=$2)FE{afayvXFC=_D9^>cJ*BT8!&FyEE(ISt9W9uv8Q*VM;z9 z%s;GbUcQ^!5xA1hAAWKg|5!ou(GD7Yd*&Yn>}v@iD$-6E7K9}^z6xLB+g+ z^a`9%h9n`O^$#%A86LPS1`*ISFZXn&7+xGC%E`+MKG@xSFS0h!?0T|2;Wl@Mi}qqe z8^IdP_3GZ<^khw;u1C^j9z#*LXP)42z&e+zI9#QPOj4y9Cz9WPId}R8C^3$?pe2(v z%F7LK$GgiZ!+GxP@KHx3_tbp)^vUq5a8MO^AM)2->$w^)asVTV)#r>bTX%CV^F;{1 zEifGYH@(BoBvSb7_%EK}5j#WyM+BBL!7W^NbkJOPe?K$fSW~Q-9;is9v&$WLBx}tR0_nBB#GfX zbv9VsDOlI5xPaD!eqm-o!E!Ac!ZLTqsE&_IvMDx+Kaas!T>hg#{Fq;g*^?h`@q}bYF}-CyrM49WM`^o)M%<{tgoo}YikZ^euZm3)x5;L z2*wSCW#JLb8m84Lz)LKOW~}nDuB+Q7m)F&x-lC^a>Qi|ig3hmq{};R~Qr;$XjUVCz{)$xoJ1 zi(U`>?7pGQsQl_72A&wg=A{6nElCl|_^bIt?@Pm53SvA@8&&l?U@&2kQD?`Od$2xI4?AU>9b48{=T5b;9` zsPjVsZU{D>(p_qHLDbEf#3s6{vaH$T>TKV4zeobQr&lZChJJB+6*lMX_5NRDa2o*`aT-L?TE z&g_&#F8krrd`e1+sAjJp24#sk*sV3HSRE!-V*?FzoTA{u;~Cl0`&YYP4n$Z zaL>x$)txDkw1Mq|hY0uc?hcC_<876qnNV-M)}Vet!UqqgT~4tW&y=+f0lD|B$R#MZ z$(@1y;+ZJyqFC1XcDjeSYl8{nf<_zs9uVhaj^Y|)aN^yPSjp^#WhBn|C*F& zF}b4Z>&XgHm362K4hr&B1{8becg6?*>D-U12)@E!Lj!djz4kM1gJ)-F`lnvNCFZgA zcYAu9FyjJjXtDcBaE)Tc*zKu0Q_wv|!-9@nT0gp?0kXqOv1>Sp^^Mmm!zmiVWMpKb zrmqXFtLwdo^Ei49yp~pgR^~#V>fkn+`wF8~R{-=w%{25jxS`Y8yx9Z3N4K;9gK}-u ztx#{pP1QFP!%H}O5K^+4m6b^fBKpEFps@bR7r-PaC64z&!{eueAgu;(^ZlcdA{U8^ zAwsZ;j@0STZqM zH`#d}KgVuO!t{HKN&Lwfv69)ht=M!*(}^0nx$$r4N@k0E;a9`lIj(1)jGgJui8?$? zOm*w`ur4A0ia|wR!gIJj{~oj{0>(ys$H`_7svXBqy)#H2SI)Y6a$Sd~x8f=94Dh1^ zl?oC@-r&YGSHlmK;H{B!VLuI`5so6V6{lgu%@{qn3DcE$Bld$v`PP%A+|_@R7b< z9{#Nx`P;vOgH)A(=D{-rIWerK;SoB`6o<&UjGgwrU$V{LjrZx^=M9{}js%i&8h53n zRp6PWs5}#hh=jblLJqECwa3V7i+^84C4dG_E=eK@k1T>n`tfN@UJZ%Cppa!J+I$xm ztG+3^>*e$po;O49Zoe=q-kfyQ0wL$HD+4vQMZb|TU1c?#jw{a3&mU-ezBzL4d+cfG zy*A@^@Ld?BbVief9r&Q|nfGG@`VGzJo^!O17U(5>&qlOCXW{M5<^8n4#mLoXwcF>z z4liEQNSjK{`CRS{Uaz7v4T2kjMi69=ayJSTk!(ohf4jw(+8nm$op6nSVkTHyCw$p< z0IqTe($|XlZgU9-c3L}6y6R2?y@uz!ye?N~F=`FG-<)EZX>iRC6P~@+LxT}nLX~at z3(wu3J)1qlgFfh+67j$iP&=!|kznobJzEDF+vVNU-<8y#HmCJ# zv&T=_yIWco)Ob&o5?$%7&FX?m)61jZ(<@Fa8fLHM4G+BETUuJ8(}QD~h50?5 z!D6(Le{11xZeIKx!>BwSQ8Xe?cQM}Gy?*wm6!6sFNqB*V8;g}A+z2_-0@&zyn%WPlb-y!WTi~=x!TCe^KhFJw%gVOv{F3`jxEV@H zN=hhp@S9+1>AE9CtKmh<-tNzh)7YFA&UytYGK5p`vb~pZ~xB%s6lMxjE zt#Zn9UBEn5&fVptY*gM&C1F?CWFP58r?%>(iY$=H_9TPU@A z?6!YkDC#SmqtV>>c~FYOzc0VV1tXnnHU-@Lb_q!~^ zfkkZxqgYnkxJUx=gaHE3H$#E&zt@CTYrjpMPk`2$UyCV>cgRG^gKMlJA7tp?=ZVkC zdGZV5+_q!$LR;2H5Q%! ztFQFwopheP57`Iy-%UpIM@kM#`ILFgtOiwkdj0b`Z`YSDFLVBwtsTRZ+!E)_4uZ4e zekYFW)f*hAJ?Ekdp^A4smw;pGd|~4(S|F?-AeBG;bUgZOsXir5FUWtUpwzMFY*Fzf z53BUgVor8hTBzG0D}fmo=PI5oVe@sD0&-f;FJ*X3GaH|xh4xNiC>Huwdtg&2yRbh+ z0y}?cpAOcU?VtTf!~V+-Y2Wgq9Cpt5(?$pwW7Mru;p!L6pa5#2=v0DZe!vus?5I$X zl-)ZDs~dHZT6lgte3?LqS}Q29ZPnkcGGBiQFDs;n^&Up&mnKp}NFF>JNs3Y4eM-Li z)AQat_o%FFMOP1e)%9*}JiB`|$jgjY{IGEJNPOJm?>qH$|5qd9t4~uDgU(jBq_r)@ z@CYJjE$htcs=2MLt^PfC5q4XXOQbW7+Cz2wB_S78yGN5h1{F@`4&wKPyL)?qch{#U zWn^^xba8y^_orLKqU@taz$*!)atDX?@*d`w)RRGn?JLcV-(A^>31?P9#6wV>1u9U* zW5uJa)9Ux;>g>FFsc`koSU#f+uAOzM1bsxE%v zWi9G}WQ4p-Zzn}hh^R|~*M zJ~4GZDedUs;9~Hsx^^#$87+T2IRNVK&FjCr=BK8##qx~QFMRg>0tl!FLwL!uEbQr0 zI%)NIZ>3e_@iR@E0vfK0Vq%-+3Gsg*i_iCpOG`=oB7mS=To?Fs#I$oD4wrF9>jEh6 zfpISBBb&k_7H^Qndgtb{>vpdtDhRl{9%)0Al$10f%E+}FX&n1iDhSYa?RoC2r8_r>>A|#F52y!Tb1Qgh4N5# zwwT(n71>*4hEMZGT(UJ)c<#8}W^dN^bKT(@uL!IX)^3r4@&e#j47sy88&7_Js^!td zVz}NcM(}9HkwdU=_|SV0oRagJG`8)R4C9B_*cKQ1*hN;TugaPch;js?V~STSBMnr& zLNFyr4S=2`rQ7h|GMsR(N46u`$ds(Ff^ae=)9d0c9e-6N^Nevax}Yt+<9G58@?hpn zQ`#K~-GLm*YjY4*5HjH470W%i{}TplfEEve4mcQ5my3z-Z$aO~@z>G}B>@@u0Z(?x zE`zOIynq4|s7|M(uOX**zrjV{7xkaw4eGO9N5xC;G0kitW}bukee`(xS5yzkl9BQd z^EZ4W1GYgH=A=W$1H)etM8EZp#9=QhT`Cfsw8Pujg31FP&Cq6R3zt=kCbzSJpzoNW z^^^7E<>BFqZ`NR<0nf0`|3*eeULFlhDf;fNF@{av4lhAHy)O0oF*zh6u=qdho zk)pJB6uq(fI0yrBm?e!)Nq9U~Z7m01aSNjpt^j+f2T}Pm700oHF60f00f4F5pV;aK ztjDsK*#hBvLXPNxgg9I>yCV=|o<=LyS5(N9EtE;<_NJfDjS?{YlX7glrnY2uf%dL} zXVYP6Ps>~RzCGu?Q(00h-xbyxU7xaWG(Vtg8|7sf|L>OoOfyH!>ti{ZDT%(1^BH>Y z6(wy?FDQ_i)JBed9v>Nz4Lq&DGOe(@rh92}86ma22MBGT6!9xyo4M6*^*36*=V^CGzQzZVIz?6|N*zmT9~^Ik z1eTHO-KGL6hrTR7#UEw4o7)#3g!Mb&AC`$U^$pA#Muh zpSQs&`>2l&p~Q&E?~lRKx8mBW{?<}nwACqurI$e4HT(=5esh%oHps7V!ozN1VJRDQ zcKSg&&>}vIfMqZ~mV*M4RA<>*x{3N;*kI|hHOBHhrg(m#H0&D}GJOi$l`Wk<5^!I3~qgydtoh74P>p-_{y?Lbk zr4MVU5ob)xQT1Z0X{6tcS5sM|^TXF#V6rX>_;&(OpiYRImpk*(mZYPO?T*21^+D5) z8)xJnGm~24)CEvz4QB4_FZi^4{Oc1G62Jo=g5BH5_XyU@J$cT%q3YDyajwFV#ol?4 zjuRO@um$AcFC!qjpCT|`=#k%Dn?xM1Dd-e}07{!0hsCqm*4*X|2W2l8(h@bZ6RENp zmFZi%LQj>DfO4yWCX;Y50}S`A6USHy-DV}^c7jxLH|d1d5JPzMcnnmZ*O&03uqoEI znRx7<PK$B848;W0>z1I82do0WRirsevcQFz=Uv>TPLUTNpev0gWM=s(A2d!jv<9 zgu+k|ml*pckSd`998(#o$JCSvH2`^ij~LYA!6^rA`khO(P-!Jz&sO2SK{jW9?KPdL zSScfF;P-+cUI)r#V!h>0{h2xxSJQ~SLiT7x__+2=J1mGcg9FHT%)kw20EIuzk+B9( zMW+^Qxn2HcfY!PHzXcR(K&Lk6(gv>mL24qFNh$l1lIT;*_?LZTqDF)|;joZEWU77^KXA@E{wnPo7-IyUuYhP<<}29oZPT=aJSsd{cOsbiOdeEtug@>Hvahg%bIdJa z0hg!6G&CkbyitMa1yfJi!aEVQ53%3qiV6y9eNJz{c*|%qEK<@FQv6S+TU+^wyr~jI z+RCL6#jUf5+CaBigYw-hFD714%ys#0V;8gOPGjjHw&D*}M(U=!Xi9y+P*c;Xo&;(p zw-kdwGO?(lZQo+ohrNw!EzVaNd$XN%ARm77uH6TMoTSCA0?!xREQHd&l2gR%F7fKe0~UbKHwQN z+2jm8Tr2W-bbapX?8yR*`)7S1FRUQ*hR-7W|GWU+Kq%uY`%h(&?vmhfckfidf;rG0 zPb&YC>Q6>KgJkek77N|}I3WV7jhrs{vFmm#i*$7Kl73WGR_@Jj`G92o9y|MBWxJMZ z)XVM98-QF{OPSqK0_Lt#(DJ+bM_o=%PI3$fmrK2&grZiV78Cd_@zxXy73vaBqIka; zIn8wmO3*OmV{`xuPx-@M62!NB>kN^hN9B5xBAPub)2$4c4=1=6K)3wQ`WIu{o)2F((t%#mtZ%_a9X62vFJN(a|94szupj2u`t5h=NorZ1&G9cxf&TK&AzGXU z!GSDCQ0)cOkZ43jcFsZBfTw)_Fe3478FE0&5}Cjd`Gmn%!jugIzmL4f3rLP(uI+0=;$x1YJJHh;Ss=S0ZcPh2S2G_QF8X3UawbnCS{J(dMo+AmopTH zhXv$P-x1&QX!7LYO~%YHpXN8DyHtxOm!3x88-Pb`&J%Q5l|wlpim}Loj&qalYXG2S0W}xl2~DgzR%Su)|{p=0Edrff~i-G zI%AX*r_6^M5W50hrdC3ymS%P!HPzq-bKz!&aS3VwJF{C)TJ#BhY0)hP7n>vdZjJjL zcA1N*&%{=&omUH(>Rw-h*yN$x0F46Fx$hM8A#9jIsZ%2H__MTSB*OQp3C0WD^9Xm9 zRp6d!&>tNv!dVARkhrCmbK!w0*?Xp^eDH@z*n?XPCannqeJQS>@fVf0V7LF($r)uY zHB=rLN}j+McWhjDU}?H=trbvWPagNq9c|X87JyyWQ}eZqv4T!!I2$7-l1vF%kh-Qt zC{d_<*$bq!#SK#9>8bzaAs05-qcDAw)AN@*gf*b-P93jtj6bfvC)fWD0RUB0+pM-Y zDe)nfSFqd_sw;5M7Dx+c62JCxvsf#BBByj=3}W!q3}#uceO>D#`yW__=1pm5}yg69+VvA62cqh3qE?B6lm@TUKKc zi-XB;F1Q?}R$2a^Jh1D_WNlwW!khk>AQ}4a1RTBPSCo^L?OPfGidyw2#jc&2yA@=d zJD0`F9esLxx+i?jf%>}gya*ILc6?5!-g$hCc+>EY#_{S0! zG`Ml_pUj1+?l60k!0AM{$f&5bQEzE+%Q|;|KgWeXVPUqBA%C#~L~HD{pUCNaiw5S7 zW=#L5$!cIbYmaq{%W~}S-+Y;tw>Xr3Oa#+Hh|gqm==t2YA~zS8l*+9t>;=7o;uHRZ zvj27C1^}#eI z%gJROSfHR^F=VV#Q05>R>l_5P{W>T1Mq>^u5SoK`Nx*U@;`#niX8h0E#QHe~3lidA zTmc?S4u3q%tq-a#y zI#s>|?D5*S*-4EViCyB!_xqATN$s*%kduqc>fa_|nB*<5p4ykYhk(Un;r|b)%l#Ul zROx(9rMI`ccVi-`o-qF>x4bt^{^Xm;c^tt|D)s+v?T~! zaf;T})eYEKS~w71Gf8j;?fzdj{(#lSK|qt=LrUV?H>V()U5Ahdxqc53{y1$ z3YvLK2b{C6F4G-LfH#imdHYbEw4C@@N6FgST6uJBT}{dM825V7JeY--6|X5#b8wcVqN}%bcF_Ee|AjbAgtVOs~R|m-&|r zgmaZN$QExic}eBR^Inlap?eRRJ|W{?7Zfug(KUCWaB}V>`VZXEmNpXDc0jU-WKvr1 z5Kz{jNoJyM5QH(7M#IUjG_Xg0he01j^>uhs1yHKE_5@bm*RLf9{i3+mM<)_eQfkiA zWZ^Mb0c8_HjD7XBYq&ON={N36P2L>J$~V5mxz`D|I>wq7l*t5T80C3`@zd4E{>T8u zr1cJ4t_upB3V;3t;+cy-6{)9(I8U^))j-DIgNi0h3+_sJ(Fb=LEUf;#>PShtA4LP* zA2OAel>`xn?R&6W-hQM>LY{PZrh8c?zDprABaYlE?ye2k(rJnjiH{U7SPi!dWL>A= zT+G9VkZ*ROE_4vT!~Da^VF+?atS7qRku7z0fn?${q#Yh1E3H`XxD{+&c%8ZLuQ$(K z&6t*oD{2CwrQ-28;SzzEugp;9g$6q#RhOS+8u^SLz!8ep*I6F8dsTzFuL86>HJggB zy0)@LJrxyq{d_)qa0Y|;n9&7y5`0{*c^+`u{j zezO0Z1hR(1TmL1Iw7{1jf%+O@lcS6*TNT}T?Crk!x3MVb;4L7Oe%AZLP9xSn*TVA{ z01-dtF~FDyo34vCXIp{1<>NZ{>6xkHu^`)*M>9>Qpsor)IxDgyXq8l5u#K#2w>lfT z23pAIy9*FL@`shC1^a(hEcN?$$KM_lS=9P&&#i<^XH1Jl9=3(1zc{S)t({E6{1{t{ zkS?06C_e3xD}tU>UB+dSqMQl7QzV~_iRyA$4}Gew!(6)Z^76vlpp{<8o6PWSz-AUL zS=Ywo)r|2a6O4~k8>QQ5UY#(1>&;vMue!I-iYR7;gRSHUfD_J7l)6;7_R}}D95#W& zZ6WQ&q-^=aK#9czOVZC=@H+{=t;(~Qjqf3_fa3jt19?!YWh1chF-viG{^%?t{R0E4 zeo7>Krda)^y!*-8j#s&OA3uwtg}FKDu&X*tgxhiQgzGt;FiMwpq`$Hk+6NB9rtVol zCg4ar;|zWD*@3#)fV+9V^gw>dnLtds9NfHNJ~=#IQMRu~g}Pz3py0E>@}(`{VAUBQ zhn{+ZBm37%5J&;`ZCnu_gX5o+PDm1~MgtvF4e>6Il!5FTemXO_FLgp5obe5GBI6lu zK$rqN8w~_5liHv;6#3S*(eiy)qy}X$o?KMG8@c;19!HhLYJ2?OtjgiIE!`SGNWP-H z`Jhj~@ISD#4La<%1u)WhHH=I7-%NqJlU*<1NAS7%STKBsaL`)_Dz@u3fgMg)`nt_9 zZLJnz`*a~l6!300CJ`L|_2rlT4&yLmV`E`c#~x`5qF^g3-y3+A2;NH+Cv^0EBUeB5 zrYP*}NT2hxJSZ9fQS%>*syKWamfV!c#vTxfLgnBS)J)>Jp6co8osAmT6=Q}9N7{>B z%l&q1XQe?TZKc4+25ZZBE4WDEU}$-7G~{5N!rl95qS1YmnEcJy$motG01QaFhU4|R z*E>sAt9t{z16>OT)XK+51HUTPrJzUe5knJ^`Aduy z1Ag1w_mNut`V8u((G01ykqFb*Sn}P6n|Np2D4Gy0xDA+1%cysPL7eXc(#CL-%qquP zE%Rc78uoJeg+=U>o-Vsk{IXpN4r~{>x!@kn^yHe+36by2R<6Y>7Z}x^7uLE|2s1Sd zAA&~oSz8=_-?vio`4Q0`<_$J*{CW5?$@~Fl?dpA2hpBEbMJzA>%M`GQ!Q-Q~kkt;I z;BwG1h~6WPeji&S-n4xKIwwOw7heC>2qaS^g}c|DXZ=tfz2RFFgBQU9TrKyG$uPS7 z^}kp43oX~QnQWtwTzng~;oR`-w09sj<8ZY>GXv(pymU>}C2|K6RzY(Y=ip`FHWwge za;1>+9&(VEV1Rlg@(~Y;@TG*MqspUz>H{&9O-AOWJ1z908vTEGydlk|7Q;?KF12@w z8b6%isMp^Se7Ok%um1qA7;=)56sIH+O0}mslmCyE_la`XCHW7F5ud}GBE`jXSrz_jxOG=2EZjtkkFoUu$D3k{CaC_?m24kq!2`^ZcmFSw2U@q9;j z5b0aJ7pQibaJmxwLl3DF0?_k(`(V5vi3F;krTaPrN1pk`U?sKly`}Q(O)g0hO`Amr zpRYZRR8CE91tqnXXGe-Pl~s4;hM))WjV9_kf>(eGBmY9m_+l(h(PeBN_N$Hi8YX`a%yLuXzO%x%Cd4c@-&9djhbWT~>KxYu-bJ zNL zY0nmSGJEnTk+cT`8k(T3aBmdgt)@*Axzfq-=B`|kNu95whltTpw8$u+f${! z;fJ>;2+;0rgX_<&l$yJ^>OA~%nv!9sIluZis{ zA!J%qs=79?Ud$sHd(g8A5PolgZ@+4L>-gB0yB#agAqps~Hj!Ux917_vsQ%bX0VJIY z*DLJqwd^+uhVrnF`OxDQEXqGz3%U!($CDuo5y}2S;MsfhE&cK1$2BKC>IvOhog4tu zdDhnMV;i~prPNgh%-KN;7|Z0uM0xktSuP^u!n?;cFScf*Ezx~d+Fx33i=gI`_0LCl zcXwZ91wg*+EPkXjjQS*~Nii-AqE`<$^2;avD+==Rb(r6OtGcq96~U1Tz5~Boja@#d z+N8duu-jR}1Vi5@*yO`*rIy|TtqmT)*7tD<90+a!JI2IOTR;BROCi(kbkXJ&?$e~% zBD^#2{V$V;UA2~z)jqwo2MWV3QgW$1gY)wkx6`A4ou7KlE9UdR_=3!J;@C!c4~bZ6 znHy!NirqSYx%7=A zjreW6))-v591yOw;_d_^4WJeaq~Q&*2e}B-@S8BP2?t!y%@1-&dr8|kC8eaSGezSW}gdqLck@;bWu$p z2OkAEu4ZuSuXY#zKC>#2>@#(AWa$8vrW>yUTx8<2@H%=T1Nedb0ZzUs`?LkQygX!_ z4<&y2778u>+2uuV(<>g$?LdGc*?9W+PPnol8sZuf@OWScKa273D%KFqQdU)56yh<6+7#He@SrlO zT&-12;v@gYw20<88&YKKQlKT-AglwtPxcFbm$LrA5_Czz8NRe!P|9op@%w+@T~jH@ zq3I5HQ9~vqPcb-W5o&#$ph`k15tuH^n!)GmLvs)4zY`ng60e@cH*n?sxrpbTp46v0RW4<%N5f=4# z5s39sM$(y;*J5Nb3=NHS5r_38RU)ypaQat*4E782E>YN~K@W76^RkKt#hLO4c8BLU zasg_!-`Edtq9o&oBU+ZWvJw+VzNH0bkGR}CKRk_Mm!9<9(T_yz@%e4Y8bUW}NbB;z zUtS(`sUi2Ox|FoE!ac7zEStkMrCs3ZY~=`WvGGrdH15;CG!2sPWjD*OktB zLvIknYEw{`hAvr3tOSX#&b&rbujP=4=ILMda$J|t-h+~BI(Y+kUs!=M7K;ks5x=1A zKZ3z{P-fEjol*J4be`gkbk_7VCtu6Dv-N7wEHhI{S3qcdukkoRVc3~qaoFM2b>jkH zH#YZ!&YFUN7iXyg2=3dRp4P`)n6-uUih>DOGgqR3TY$TRJs9ps`MdZuWqQNf8zww9 z|27|p0D1xMQVO=_a5)dq7CNPe5)#`q<7&0taXX&uu!%tRD6CO@Ggt?Wj%N8M7*i`# zfx><$*A(;3F%KG)vrzq^DCz>|CO*;_FvWbOXu#TMHjpXlnZvjWu47W-pvc#_1VMP8 zN)+NI+TrG|==L}ZM`~hX<-xifdUtoA6wK3ZH6EUhj;*rIp>nF}*uc%M*#G6K>dzzW zO>WjdTO{tSgwfT)QEay&G+0(+<`UKG>O>WTPR>Fa!=igQ*7lBrPWeS>E`{VuF`|MJ zKnB2nFTye@Ev;}!Cvv)ZXQOcZ@k>&hde#S66v@zzY`_VM#)x)#0dF zYfrl3d1J0m-bd%WfZ(W?haY+YalQxeJ?gg@Qeqz%f4D%q5`-YfkwWMPyB6aL|hqWB(w4-|_1@Y&onw z0a~t>uukOfv?m}{m78d;)3Pd;y1u=)=UU#$5QR|im^?AUG_h5SmP4FWQc_aYD=gdo zSS?+&icZ24n;O?hryq~0ti5W7ICj0QQc4@~NKKby8h!ow(3f)G?r~guYusn3f#z)y z?%ZDuVr}^IW3MsDe>)c7l&%KAZ5~E*30$$!GLND2%4qmzVB-mAMHvlPrGP?UemoOR zaElVpwT{6@Scr89OOI$D23k3#i-2 zyrtF`Ae|0micwfI7b${+Gz1sKa$VAkA{e1@Ih$s9!9P|~pFw!KZ~o~0BW#;SBm?gw z^xJEQP%Kr(_gv)2V#jj#fOPb!vSEHto?wpQ0NI`)a}4amZ+h++oS>^mk1vOo&;##R zII8lmFp1YpN*WX}v+Iy(@mk16*j_8g*vUcAT98(Z9XbVH7qnxSlpVA(rr1{E0!)&x z8z?R3$G9%dJjZ@6O$4{^f9mHX%erSr+sJOb^Vdr-M-Y9q00sLEUyO=qDBohK?>i;Y zwpD8V^pUse`U8qW2m`k{jlRncvRVo~$Ti{{4Pmv_!@?PGSaB{0!3s^{H0;bwZBu=a zaV3((3wPA6Ik03qI@E3bbOVi{2R$hhz>n~6lOsZ_z?2b|Oo^^t`=8Wa5OVU|4D+rw zsA6c%yvqMoqEOitE2Z%#5;p_>YIi$`>!#w<6auOQ!lU)mIQa}~kk{ky0X=yxHC=M> z&$oT(@b6q67~+Q90yFU|#aKk(dfGSBg269zOXme<1 zK4AjRq`I{ltAD!->;`W{BI^8(XQR5Kv_C~3{>__7)b;W`KOG+z*H^Gl75X9+K0}Ir zmtRzrE)THi^r%P=8*3+r=ldWfI&$|@6(`>9hI|s;4kJr1xfM5}1wXjII&t#LobIQ< zRlfzY)0tnr;0D*dG6cCe4fvh!h27NekIQ##9w25G&#(RiE9pV0!6NcDa%JqR9|GZT z9@kp9bx%!$U$Mo12-WmNuLxF~_T~J7WqKtzjg+tf-Z`3*;bIai2E^1aS0aeu!Z@!r z_=trOKFT%+)t&7=1V?Ap(82_!9T{J{`Ls<^Yc)uSJS zpJQTn1Fa_Nknm}}Iso{3BlHz|iA)pv9lz^+R(FAP7`Qd6KY@MPN}s)~g-rem488vQ zeGjJ0>Jk2DkRfEC`EC_>9MA=h9xm#Yn9^s+L!H zo?JYL0{*}~%qJkxB^Y3I(;uN*TT9ex5rg+Q8DPh$dX52WaR>Kf_+YATkd7XqpmZ;k z8MaYcA}lv1*WCD^A`+n!dAowgsSGd3Ry#2|`OZV=&`O(vlcAa?G0~he`{xpZ@2=PS z{|ab0-y`_Gx6nskf#otlXbxMRSTPhsBT@7U?3PU9H|3;kdj(GTgX^jZ!~|J*&J)9L zc;Px>?brk!4^ZNDI}E~Sv)RzAK=JeIH`zJr1D1j%`J9(h-X3IzDh!Qp90XUgi&+S}mak2Nr0RNIaMBLx*OhGH2$4cqCH?Ipk!;m;F_d z^%uvf&-n!xAoC3{zZjsoW+)g%j?HAaSWJ`ghXz`f4=%(ao<9wf zDwhI^vq8~vf-M@S@@hc6(q1HXh#^}p4oxivI zskbH$&R;lsVX{FdKtI((GWcsg51vQ16}!N!_VsniZZjx8;Z|hAy`c_1xT*Bk6C+%~ z1UQqC2y-{|M-?;l?Xm(%Sy{gD#fuvl7d1#`0m%NhuAnFCzXSPYwXjzQRF3H1c?k9o zq+i;2gQ6j{4%9DDIhn(x{Qj%83X|f$$mUg%)?2d%mmlfCTxN z4Ts&!mfX(`s}qx#pSan}(}C;%w0-YL}DA_(y(r8DlcgJsiJYdM&XKm^r|KMzV zdwF|%yFDUIE>%yLwW092*W4DRqMQOk&x8;4F6|xxWYZd#hR}c13Je7!`Wg33NnZMA z_|l#R#hKgx=LHziiv&4Ux&ulQ-5ql)_(}@Wsk(RzhjZk3X=P*6g#HG^evx-IWu>LH z#a^WXS2}3K1GY-15>panUie@V=&alQ&VLJq859Sk`M+`tEVmz1(j5 zC}bSC^&3M>QtQuI{`FbGpEfK+F<|eb_NP0kN1MWo-v%BVK79cHZ3fD!Y}+8#WO1+dWpz{So~o(i!Gi^0 zI^d6uii+aq2PH_;GiI$8&JxRI7JHNWW!JzD?vr+`l{e54qm0%Eo)Pe(CjEDQNJ{BG zM5kJerrVEz{@czywUDN;#xPrTGEAYX^ zXy8utXv?Ri=2pGtQ^Xw=7bemcEDG~P_+d%A1hqtgfp*N0vhL3d1{a89^RBK|cTLjR*zCi#*1rG_7|HU_d?M5^cRQF!tP==YRLZDc&H_@v8GqT*^cXowfzFMct>(}~|A)xZ{Hdj9rfb{; zUtJ#ZN9Gn_jT0)to2%oQn7qi@yYqI$jLhY!D;PMsqrC9T1Y(!n#fFx-XJ0IOcc?Pr zIY!4vZ^WBTxJnzUKttXC5qk8xdso-i&`!_2ycnNZV=&1B3@G_@TU+9oUl%o=5%qh2 ze%`@kjqw9K$N7t1b4k7+JtM^2jZsCTO@6d|t>M=E!vq;JD>8e>Mp>KN&GV2c#ULEG ztF8v$BIBfj7;C);AKZSEL525q*&5u!ZE;h&i49_Du~_EJq!{iQJ^qKxGi+*cWZxg! z-cHE()-qCsq=?rfh2UI`tQae0Dso+TJLN)3_iY#gi4M`frK$wIk0U;ke2e|Xao$*O zIAFD(a4VR)6b4owD4JX0STeF4P>Ts~Vfvh6VBi^Q68nap={{PUk9lI4rn(kE`Zt}R0Er>ive@g9aap_Wf-o2S96t7+zdn3B4O2xx0bnK@DSGqa-#AP z*zjh_u2mYObmM*ZQzCOs~=nD8Nm#j`EuY*V?AZ~HkKHfM1Ki|Xj zI%72Yn?tFvxT)72Ik9RPMd|VicjNLgvxyUd?8Cva|B3voA4BMsd+bq62ji!|nwn;s z_PjLbn)RiOjE(ftg9^r0r2e~($+7%N?^Zt>0k$Gxv{TjvM^B!5la`OiSb~19JWrl8 zd=_I1pp_f(et^~V`*iJPnxfzGPr|?eU2hGOt+U^!h00!pxcJGU%2WaKTLJ~tTYK8H z-_!HvGDODb2GoQ%8i#Bt!#R#L)@|}fqO#r-=DcVd2U?@mex}U0L5HB z7B6G4;hDcMNS-e@AjW9w+S{FCMZ7C1jvO^Z#mUq=MS(ljUSLI@T2WfNGm~6&TSO#i zw@0_EN%Diu@#bmnRThz&oqctac~5BzT5W~lbr94gbrk97 z>r4MGJUIL4Xn7Ctc~>}U6BjBak`ZsHBM{j}ufTq^*}HsT#ru=_Oq)Mw{7=_`)hZm$=adp+Ne#!|Ww> zR!-*V-x;3-dFg5lcgR{aS)6?;7Jrwl!gVR9SnUURTt}1$=Q%G1u>j=KZi{YisXEwACxsEpb1-3C6GB*#OQPELHM# z5rXW@7X_h~>(Fl~7`u6$%*ud_6DVO1qOdV)kdCGySp>`;Q}Fpc&*yNw@7OdWi0@E- za-~qpCbu#)l*C_rKM+OW6PJX)zQp`bSbWgIL=CAKg@2Fea-mkk<|8isWqqAPuF)JG z)xInV;n^O3o$Iu|ECs%`DJD@2ouzoxe12K!yCW~}z-7Py$1)(j|Aru3kTDvYC^VU7 zj1o+VDN?ispB;`w4}Xojv%2e7I|<%DHPzK-c>~xHKe`4{eweCe%gZK>pNU_2Oc_2P zyrCpdhtQE$eS{~4%YRO&rn}1Ps*evYlCytYzmbsQA3Hl^>O0AJnOx^<1^Ae3FM?wFk1CPemisg6Rtkq zdsm`a%ZNR_^ucEO{(+v(;cJhmwz_?K3cv-uauX+6Hu)NVX(TB<`8=_ALRMbB`@6lY z|H7YSKR-XSWEHreRn5U4Z9r4myzNCy8hC1(TK(N0%*4K4^+tIEP91Dsa}A$!bK6%6 z>m40^7MkXlSesfo>PjjJCVT8%_bkR7rG|PrD%LlrRa)t=ZCL~xfOC!VNnhTtS{paP zJ@tgr(pdYi_&;Ms_~pr2?TD)pURUWN^>tFr z&tI%9k773J6c*`5O~SBW%fYJ-*qE?1H8st=F&Xx0%HPWiv(rIzMWY4U*!uChWQW8M zx;tGWIug-^g@vTQ{}ea&PCAVh$$w=Ov)b|}rzWtTZx7Y|S$f6*tZuz^yW<_p%L4`C z(AP!7kM*Qq0ke#ZmM1d-M7HVmHp}zPM3AvqBQZ!5K z@J4l|$5=u6V+B8$7O z2ftB9-?IAZSe}P(8rB_50QDV3H{_nHtlN2c?YteDoERQH+>Kp;{%p6?e>t!v4*P9X z5C)vNg!cFM_0j^p{4khthaOq)#DmG(Jp;}JOaHldZ-4%jiUJ&T;~)}0sJoEe+Y0M; zc$oBbgY;qnS=x7485aFGXimdAIcDxiI?cqwB5<}l7V?z-EZB&I?r>$<>7?0+v4Oi> zB@dbE<1hF`21pO|gBwaBz?@1ZDjp?DmQ%s6S>eLo%-P%Zi#j+H4u6u3Z@I5d4~Zrr znW(ARzun|cB6~k9))gs_ww5}+PS)T8sso@|hTsfvE6K-SyTHjsVfCZ|`2Z717^Lp> zbkJN_m=BsKzKx5yLiRmMFKwYzJgh_*BN+~0QrndWH3ynicL8CG7#Xb}+1qVt$)viJ zmxnR-8{43vr1*JH91|N!Xmx!A{XKb!{ai0C-0A7%6Q%yu;A3RYWKM5S&?IaB+E~Hb zT3k=jB@MktlLHXooD zRE&vsxXW|s0oHGL6ix8gulUfIoGS~E1_Nwbv6Qth-uvAz-Ixb2(Y1TWX5hI`dwU|z z{>~-3U^Ftu;8JjjVcrmRf*NN`OnXXc53?lttpn5+j8!5JetJo%0iUS}y|K1xHu(Zs zCD>{S-wdYPoOG0>5EX?Mr_NTUjM4fhFVk8X@JShm)D#+h5zg-o)ELef(YmI&0@{Nd z)GnU~hadd}&GAC;Py0Y{K8P)!%2kVbRjf<5A>U^EMw`!5fl>(x7yEi4gEj)zZTJUN zebJQWh`e? z*+ypD>ACUCfQuJ&yb*K&3PX1aRG^wD_jkB$=xI#jb5g$e)+V? z#P}jNyyrpMLco)JypbbFk;{TbvXV}pGfOZ{Y0urPKpm8w$cyxUwqRG=o@w;{Ivy{? z9UP)g*VENC{$l4-KEW*6xN2fOI&ga-WZFG*(qN$D08Fo+HUjOQKbNYA2Q!0D+Qit{ zUh-w`aeerQlRY((SNe%_=}1E2BJ|=Qq!b8UsnL_8Q&W~n&f+_?Ti{_)Ubp+7ZN4)e zzr3642#h~v<@<% z0T5gLMdxjPQ=;B0F2e=jy>&BaZfwt2-VF(Rd0fD9u)klJPiGiMqa9NtX!QLm9>#|1h)kALkp&CD1F%}=)HYW}jLnx-t0uPrY>=sR%}E6p4GP%8#( zU3B9wJ7;EQ0{GWUdupF=&n+*HMr_>6!w){PjnbEpl6taekg<=0f#(n+Ht-gi^S7uS2%g^J`$>+8=4?Xt9 zb}CS0t?`>*19SFDGR4AUr~HG-uK!90&-RUj$_AX7@8Fg#km3aL-lIa#b%AKN_2#g3~Nnkw;iM>No2PeYzk#^HnJs=I& ztZ@Sw6OB{=4_tLmi01{Q^8(lnZGic`xQ0Ywc_76fnD~{;O>HKsPIW&0SoP+7K1!2*ICOzmeT5} zpC9N~sXQ<$FDo;XqO{5r{z+9@g#Rd%*k*JchQ0*9l}!e7HgKGGu+1D=<1Nj@zf1Cu zA`Cu!XsD_U-J*dKYS>@jz0tNa{w82y{5X&~Z`rtR`xoh8>b&}VZ$mch{bzi`wam6F zFX%2-nLnOrXyvdxlMdQu@AW^g%zev>-A9etH(=_JM8_mfq*U3Y_2 z7axPX#X%e96dh^JeM9-dL!nNw%B!GFd;1%Q=m&8=+@oD(YLmP3DG^l#_`k0RWoRKA zDr6XB_}rYwgC1QwUF8pow10U|i4k4*6?5^+VfqTGHqQ1JA+3*{CC#n0-CbS7`;k1d zN9*n2%I;hZ`ax$4;tYUT*xCeEIkom{a~Xf1>e1c_DsgK5~&@j}BN{ z0mUyr^T*cG{MT^6&A2|OrG@)(A4&PHi&=H6ffS^THX1Z~{@h2u_9T{GS*{3%;?;$A zb}GHrwWH6%z1BNME5TxM$ii14dl+=8dy3=aGg- zcMt(*?@s9cyDK4I`4#Wx@9rEBK-$g{NB(Kkf?a>KQd_@r$U-Exa#WD+qviLu*sJBL zi&9TN;O9*!pcB37iL-s_dR1iKE^ijU#mmg8jg5k9Epc`t*)oH57=Qm6v*??`;h7Fa z4+mH*g0{E+b*`8>Laeq1T9@`HA}H$)|M`url|2an?-ai&KVQ-RN7H$SQ~myb{B4AW zI95X8keN94CLLSJIQ9r3du7i`93oLCT~}S{ zocH^_U$5u$@%T&e`wEKu(_8umpPoSQ7VU^hE9on8GJTAY+1j|EdP+JxUK=wd1{BC^5k$?W%jQ!?;5>J@N9~&~mh$#cR_))ccJ8aPNx~hY zJ$RX?T>!9qRqJQm?TZB|8Caltv9cV~pk!2n6DZz+U8494iJA&Gxf>RQJYIpep!t&}wvzLt5i*^&Ds zLpJbYAO_`WP;zKtd9mbGaDE7cdW_LFKllz$>Kjjh4UXU3tYIqxJ@`W$7C#DyXVI&! zM|70{>Bn1{CftqVGEAH(B zLTaGBw%J^BzA@Lf{l;qEN{l&OaQMXzcROw&)~i-Vs5%dGzZQkU7MiS6oFG+E>bkh( zh`#1t>w%9ydaeCW8D)>6#YGT+l~^lAn#i&8m?HpIZe(zhRo?6+do@ z8e`uktuaK`EYett2d;jkCo)c9Pl^Kh94RXy-}LLY2;9cTb#Ryb>7B{O9oA%W+lpS2 z@V~l4jeD@UWcHg7f`IEOsQ}ZaEehYh$5quevX(WE)v7R3;(Hx%F@Fm zKh1^R{+5`j2MsdDe(TEpG)N3JYan)k;ThcBsx*WCYi!iq7Y(^@8Ty$1_KrO2%M}Pt z^1+h$DOU_lo+_0K4-AyDV#~>C`MUD2br$e+a>7Jum0E5f+$xinj}LHnLmDq0rZ?y85U zc{Cnw%)B%lwgyP~J67N0h~?Sy^JqmKE#+>Iwmu9Z3ppytmAg0^`+U*wTqQNqr#pnq z(5AZU-KU5Jk=b7i6Ctedlqy}%yg)0b)z7S>U~`|m7$4*9=zlAEha{8x&~&6R*kKXpAgl^{k!3Zd4`yg}7l?7XPVeU3_0yTGkD%vxBazCOOHu zrmXK9a_U(2{8UgFIyun~vH~N#pKGLe^Pq$Ns>-V8qvVKhiI4`fq&P^v@7V?s$gew@ zHUu1hJWQt=%JB$$9HT*%#IT&H7jXWram>ErL7^ka-8P)|eRR+t!3kN28YY0jn#L0x zrO}2Jj{deDe5dPJ?9mNRFXT6rCbHou+Xc9DUgDn6FX?2+1|Lk0r4T95Pj3bhfO!!3-yAo}z}X^VffGXy_ZYXicqV?`kC| ziB*b2s1nO%v;8G<<<>#LwTI*r&;~V-AXdUwtTi6I)jAq4rrO`OTa|lD*z%i6)CPH; za~8`!MD81zqA-7@tkV47&j?9Kl$QKQY3Z}FFa}mxrqw$?h9Rou`^?$u*@66A}C)d}bNh!epHJFCXfeRFK-65u8SePq^ zCf@?0-08=SjkI#xO5blu-DRJ~ z<~Q_Cna|FOMN`Nh3o_lv2wo%wAvAn_u%M4QGd>TqVIn6YvcDS>WEWsrM|V2qdi{Z$zjFBQe&)yI1m8i@*^U)snrMejriIhqEP!Q|9U`AtZK|$o`Pl5hH1mj z!y6WVi9!U~w49=u!MN(A%Z+1obK_lS_Vs0Lwc$aOXSfwsPs(k9Zkg%0Q0{NB`Eecw z1hHhP32ux5ue{Z}aARx&3AK(NevlVzqBx*WW2FE?(Z%gh_*-|WtOBck$~NUhOZx|d zNwuR<0!C3fBkY( z$X|zmMI7}OUt#p4RmXdHEjmltCb~kkOM-VAjaHp5(c<(?_ZTK=+WKc`yk8EtG- zwn_zovdAFQ@B|2R5H@&J(RWk6?suBfeD8>jwv zC+SV6Us84sdKMIP;d1%r(muel<-avZ5_H)0S}$WpG=p4E_Es)8gO6IH<9Xi+-GT2Q z&^!aSU~1$c&?}K&G3=VoPEKfOJM{qySozvvzt3P_8~0n;_DL9JUn;YatE5_iAq=Dy}EfXNbGCKAN|(3a6O*UR`kvY$zr*FWrJK zKVfW&Vv!_^-GhS*R^}H|UbT0)A)mPw=Az=_T4L0lzXI*T5<=j#6NEo+Trbm@$1M#n z#RTm+1`E8PwTwp4!37&#|I;g&@m$^j*<+c|t#JprqrCymJBh1m|DOez5V@C`Fi>4R z)<5HoZ)@|({)ln+oDYavIh8wdGfc2jB$5~DB#=JnOq-{kAJ91zUzV-g=_6$hC~;r3 zLgm+T!B2-ipc{^lyl>u>7XD>;4H2}n-Oda4U}-^aE-uAp8qi;7XOM+G|6P2cP%vcw zg!v|G>dDdh59|+};^6O9wYh%PWA-wBm;IF!8}rIBDpY^4lr0n){~WEwPAul5bhs$_I#-uYQ8xC*@Vv9|;- zi^F!YnZ}nZzq`bOKUnvPtUKI`uQRw9<;fI{NK#| z6xJqVWtNkb5ZNz?nFb5R0sCIFYWKzdj57+`zSOz&$8nj)cW#h)UAzZ4B=g|C?fiUh zxlt@;^;FK+9b8xT!d-xZDa@hFVygi|=-L-6Y8e@^bz8HISY9!Zl|DiTiYg)!SXGR3 z{r8OEk|1dkv?xq6QBR5|fJ$rwv}&}=sdYY5Q}6qA_&1hUf7UiKYxstV z^JLF1!UMq3S^{0l4-$0;aVE3+0FKaEUcoRTt2XOZLGRYDidKBBzIgCGX>~V{BoNYk zGH8sY8v;*f?9?#YDhs2p*YAfPvw=sDA&Kn>pKf4)HVwwxkr+Y(wbF(>MA0c)jQZk* z*r9LaaGuB6nC~2ZR%t@gH&~xnKGr~yAqO3WyUV`q*k_GN3+}!JE#LEBx1nV1^yNRM zky`CSLWY1rT_nq=%F~!stpSP{6@FiN)NVtn-HuT`$TlM)mV2z3bpp+&0$Vtv1&y{o z`$%r$d+-n|GSy6r2lmyNpO+`a7eM_;57!1i^vCcBs(UcSCR^eV3U)Sj4AmO~%D@P) zR78%Ge6blnEvcv-!&9UO%=w~9U*y?~{SnfJo=&SHYG$KK5ixM?FaStXZ+n;vxlYUv#PfllOEi$?l# zi_m^BFFCDhd@v#VKY5a2pnA( zL+1UvsV!c?KZEBNVrr-Es%Z~>#nD?jEXe~_?f5NbM&=Cqy@HLjv|Mu^8&B(Otu-Sn zMs1y;l`K+FM7wo!nxH9+@=?I~kle(~Os;MYP15hVN8$Lod53Tc^INU-2vd`bZ!`GI zA2FA8BlzecrjW#L@V&NrCpWP2@;%@5jB}NFz-0vZipM-@bc%BGeL57>*xx&IGVWp; ze7>KPs68YGbP@Fx`(2zae#|P8jy@&jI>ll^b0a}tr<`j`AK_fb_&|PZ+Hb|*pRJV_ zpd+Ry?ykR-)X~wQhpl>o7>QdMQ~trOG#>9n5&p=zih^14EV?6@ucvI#)UdYZ;A~gZ zA1`)z>gbb{l9FQFxYf?D@kB$`eGNODynCzfll5^+PygonIt`AHONSkvcV$);p%Az1 z`!`<0r2Ijs_(>zY||?#+2HFith4!@8(}l2%`+y|?%7r8f}h(9 znRR+|oK204PJR@hSz@^a%_0!zV;}$Zk%LwykLlsGV3t zQX*JysS>EM#R7jDCgA}lkDVivAq)v9f82I}H$@=-pRi>$3&&QIe}BBi(lZ&Doja8J zEL0pqPeLEGZpoV(APXztg7VG1mN@d1Hht7k4kWKb9)cpAB^K5uf{}L;x~?iGUc2)! z8`Ha<`eu-Teq5iHzYrtFJa1hw);ur@rWmyRetWZ8z&)iA7HwMOy?lSzm ze5~N_?B^#r_5oR0rH8>78IKWvC?g3m8?C_Im2+<~R30Cnm{@Z$2O%b~iVKbXM6n|+ z=QHb*zTB;i8mca5&i=ISnu3e#q_NQ1baR;IjT!FpibHjw%UIuD50+lu>^jTsW z0;1AYOzJF&wJ_HeFOXP^3v)LZuVaC$Qdv==X!-2liX>e8U_N6Lb&Rl5dqzn4oF&6e zgP1%HDGqJP>I{Vve_6K$@eQTl-!WWR0v3CJX1zmxZ~v*>^gwEPXFyh^UF41c5<+XH z;voE>WYDfm*!Euj#Y&9kNcRxPwe0@t10n0*zwSYr4M)wV z_{K|$%ek2j*Y7XSg+sm;Befs9uQ}%Hp^}I~Zai|p;%-8k;Qjfckl1x0=U+PY!*BoK zpySnN;wFs&TF5xQ#7>nA^j+Ushh2}|3Wgo&Wt?N9oX=X;;?Pk1;?Rh8B&c6%70(3j z^#LedSAM=(<6$o^GZu^8Sg-33Go?dn*ZK~$wH-Y=oLNh)ui4J0xLA~R4sIJ6= zm&){5*JD~8`wnnKdosDVwapll(x+Sg>-+c0()#-SkG3GEwJ*7!sEzq%7wx-{&<`$V z*+f+a%Vu)tAF&%)ivIL?_GnAah_(iGMBrkxa?H$29YIopx}!c1DXEDRMtuOFoQj6& z+^?Otnvan^a0PvV_jk(rmU2Kq{jg0a*kkVO?Rot>!1Ci|8f2bv9#CD z3+flx@dWg`8Mf~5(_GUlqQjX(*Lp4Undv(>!!>2jktkF{Z(+sh&=)Ry^Ll*q*jV)= zQqKBAmo(qpnYH?p-xJ(9Pp~X-+7?Y;JqUg`L?>gpdJ!NI_n4s3Z^-9^@7P^9BDlIj z(9t50XiW-oFRi1&W47tf*-_Nt#T3OqbWFPc{>QUqnt{c^PQk;&po>^=?Y%#QTv+s$ zt#e=O&i$-;+e*?E`EofTd>jP#4yOoNezHUa_;@X!z1_{74wMZ`WJhcl*@>n6XgvMl z()**IIW+|kCw))a5Bt;PE>B2NW5HcUvX-O)b}!YA3v85kN$1apfrME^9pvq!2<+7NK`^Q-yA z!5ff068#Qd+{|ZN{QapC<@LwhFhd7|Z=WFXNKo&jq($6l;?B2!9_2Hjj(E5V39`cw zs{~wt(pR37SO_AJg;yvaQx4I?V@C5ZRD59Y*`kYKc;3h0;46~7FbL+LaE)Q38j=t+ zz>`J;RzSfw%#mi<^C(qr*vH8C@~ds^<3#c!kO0nrA&g#uC+=H{=6|3)_nx1xjlTYH zxW=-M{@?N9@3+L)-ov9q>bBiwd#;e6E?l8hMpjf0f8$;@wtlGWez--8A*pC)GClHT zYbnvN!TajNAb%%cai$NVfm^M!Xzt>}U1{@FDNuFP!2N5NwwHsorm7|~(hoauJ0-Q| zRU%S4WU5}MJ_x@<%N^O`N;unNkzgHW8W-xIAl&QdD;4@-jTrGt4J;HakVH`K6Wt^g z-H(q?lG=JhjnuCG9kTbdU2UBcu>8PIyWhng7oUv?c)rvCCMDUe^Sw9R9dAhM#?xTB zm3E{#F+{HWZEcy)EMJ4I{3kTEAk@8(S^*B3%GxaOeMGcD%Cf|#`a{EncA9(NK4r$d z8l#LwXat`XUtWdS=vm|#zm%}^Wft*V(GqgE{$(t$zdFcRMEJ^ zACZ}V->QSTP2W2s3oD9{VL_DBzE}Vm>4Y~};MQx)Sn~mH!O1olzdaJWVr}^;B3mi5msj&v(w*r`Kzz*VEn`%LT6z#2H*Gf_fL6_ zOo5Zj$c(wUc`&~I*5Toy=U-F>O%~6HX>cYOF}SVWN*o&(3_Tj}x;0W`DYGY;7{%&w<~@qZz5RJWa;RQR&(t%i4gfjr z-Nn!86BAPol~?711xj#}9)Dt=*aC#KR7y0iHaEDWtZZj)tQ^sv!)D2_2M_6JJX6Qo zI9MF8z~nCHV!#-;vM3dc!IY4qUl=&u5qF*4r3g+#Q!t4?OT#LUY#apb>|K^N&d5|$ zO3I2}j7FSx;BYrc5V#)w-NZjTOPs@rdRX?%sf~Jig}j%b9`%afv0{OQSA%WF64=~K;welVr1-{})Vp?-)Mg*{#j2ZdAA`DG7XD(OUE z`k}?8Z2##+Liwae-;^7^yio z^2Jj3twEH?Q{IR08&FA%fWj3Rxt#*4e(#1*r%;M>LfKq#z=b|1uEQ4h{DXBd^JSk> zx$jB+5c`u4O1|ml(SS#PHqReatyiEZ>p6W#=J+@0GdwW&>!&w9bi}5m&jfW$*B?%M zlo(<6()Rl@r2Xxk0yjGPFXJg1Otj!ZGyFcw7q#Z+JCixp?P`Xo#*6x5b1-gbdwU(1 zEU5esqYa8<%vWgnbf%1YnvtS4oBH5TT;uaayXcHF<3!uj(J^YuRXkvAO3Y>2L^604 zBr^?oKld0r%lVuZnI7Kti$a%us4&Jd*Pjh|*!Fu)=)WfJ$;UWPxgV~t=a>hr>aXqN zB7}k^==XxXj#SFW>H@Inc^^I+=;rk9ul%n3T)E>ewd_nq?}gKuqeDLk;5o;s7g;-;gmuof-EP_>a%40AXtw)|Ak6~QZt zmJR#iJt}Yv0AcV!UrX7VgKm`o9S@c0y$OAtCQ_-;%wYV2GM1?&Z2kiT8fX7ZE$SR#^#UvJ${N~^gUsy__#WwJ1NPdRMAJHq%(ECU~Rg5 z7b8gn*sPH_AmG`vv3bxD!8;khmg_&2uJ+)eI5s9any+ul25VsuTQV(KRZ}^>a>a&2 z55Ckw^i&Pv@`e70gnnSJMk@*CWIA4v2dsWeWh4&_dQJKz)R;I#am-gajA!Ut{@VV@ z^Lk9OPh66ZfbcMI_#Ga#wVj>aceb!`FT~t08d*cx@3X6pe$o|rAVmG{u&??*U7}|? z9PlgUa}Z+(g7hAT_H8X%{2P0Sg{jnHXg009k{$k()1r;wS*7rfa^t=x!G~)~gBbf~ zd65{RS($u$vPY1;uHtFy{mA<;buu#nxS=8vjFc0xXcH4dkUfy|yAVM|uhK3{3m^1Z zvmadTg^2hMKP82aQ502g;Qm-Xlql(sv(ipT?E8@&?oCCw8kguSOf{^x@?NS7jv0- zgzPij>TC4ai^8ZmLf`=M_d;rO3be}pv`qD#&fES=;g^5z1HVf5&x@x&5#vw-v$MY@)|VQj!~Ut8uIZ?4$-R1~$@G*rK638)2XZs)R+~%Okvc=S;eP9}9ROWWiLWz7@js}J zUyK)Id^(j4CfUt2Gs86ay!c)*1Mw^k;P@O!@54^7Mz@u5xlO0+oDt@n^VSLtONYk z+O6p*xN#}1{&xdFL+8lwJ?KkHx}E8#MPvIQ?YrANE+*(8t~AGlPpQnZ1MCNirB7d2 z1xS-8q0bh*8v>8J7rlyauqY^_9$taX-2xNJL6BeM0;D4o8bx25%eJF7eYxHI(pCCz z6ZpgaRJnhhit^~5bw@hcB$Jw$#7o2wIglYhD)Bh zehPSa8G)-kZcL4V2md}3lRYjbH9lPwVcEj8QQ3AU)j*^R;47Eu;ja(hm{kp|1f13e z`+=~r^V&-q#nh+*p20GU`RivhdFc5>7p>`Um^Y5I*GLEGP;3r;wFav=1`Bx3YvH30 zDzp$I0p^IdD@dz}43>`(I)Z4SZdrm^>*Rnt?Mkgg!136K-89S!dpB%VTre^D5;f9p8h&NtXK`R|rZ}rJ>^lrSJ*P|0VxOphzNC#SCfZ|7RUUT7J8rx`lS6 z$VoVbv9)lc9`HLwiBZ;{BDmQonw~yIJ$fkjv}%|~P>TRG!S+y!TKC}A{Fv|U_5>ln zT>A{E3lZP%JsFkAtt4q$nr5gC9=QO@fD$_$GOE;fj!2q(o@2NQONx>k(>*&HMcfBW zm^`HM2~yG4MsXQCNF%5bma$Dd7#?C2xwZf->Iw@1rrR-Ttk!Jn6$=22>c(Fjd0#{j zBLtwj&oCriNDGncG}O7v6v9f%a_e3uL_SRc|<6}4QlJm!~vWEIzc!I*GBfw!Tf-ayUApcvHs5wo)+RqV$+-QcPLVl_6I zQr=7qfR<2xDW7fPe9H`3WGeg1v0^&tR1uYi?t%Ph`oUQ`aCT1oeSsELfX{Yxzon#dA~G`d4PF%^YxQTVn#n&nNEneX@0mt9?v0&Nh^|I&T)*DC zw^W-8T4TRha)5`m@8bH(XXA|nBooo7D-kMi z;b%ur_V4Kl3gOj#HhfSppzp*{P!GE#9WFJbQl$jnS9;AY;`bc z1Y);&h;rGJj8{7zNk9Ixx2M}~w0!o?rGBL@c)8c1H>Y-7XDIw&BP}JRcB66%L-o1x zz^^`|@c?`AWrkCqMsfH7KoZkw% zK>`uJNqU%$e$u|;Dt>m#?4SAT#rn*-3R4HK!!o~F&C%~&b1@u^DdEqzfH!d=L+Z6T z>3ca{tDf!N@np0!=oH(^`6TuG@$@^4y5~G(nqYFi^SJyfNtPulMlqaDu*-=#AQ(%-9gL>pL{WlF8B> zHcBt`AD0P2w!s#NrdM(swDa}m*WDXu{DI`uzS0P9ZvJlm`?DV;L>eeuM@QpclMr}S z?e5)&T^=1TgZyyG%U#oeCMq{+*;0??_vZd*4nt~-(L%*H%hs!x8@&MtiC2q8xq4YC zYx{`v?sx-`(j9~+y%?<@+wctDnbhn{mGKB%k#V^HnHv5lRY2jUJRwm?G-qa~o^Hhl zNtmzG6=s^7A(r$=o))BrimpicBQ0xo=rvj-fs%mor6MhZ6_PJR>Wg2@84lf?c~9^ZKhrE1<|eVJ8M5*{fHf4!zeQ($LNwtEhcXOZWget9XeB9RO;U z#F866Y4gXY7JuR;J$PJzAr57+B9EB&S?23*4)x>Kn?p?P5D}^vL)=!eiXu(4lmGK$^)A+X!ymv_pXHs*2?HmsFtmrmYA$H zR0@8_yguNzeAN(Oilry2#692r;{|^oRW`TCsJ^!5aPCM1@luey5matNs-VSlnSy%+ z2*_j!zuZ3xxrNG6P`m?=`uUVyo{upr6M{d8ASHjA~ z9J=v&=)x;kVa-<{g@|Z)3Wpu{y{njO&15OMs4Oar(5O<5JPWw?{{)p!iRG=is6w>? z^f9E9-eyOzlZ1tUlKb7Y^Ev!km`Vv3!G|WukwJGT{0qFjbQ;7|2((3m$&m-_yxGm2>1?PEr2YO2r zf>1)bUKg6DgS-E3N4J2OJ;{e7*8B~>4Tl- zTMqi(8!d9D8Rp;DifZHXaX;=|^7dbxR=q!`IZ~Go$qhML)DLp$Pq(`%?w_;Ic)3W; z&+IEx^dnyVUgcf+_2#yaD<6!Dd9p*%qdt{5Dk_@?j&et?GtzpAoN4&902uT<4#pYnjV-`}DQ%s6u< zSLA?g5Pg7n;0}Grcj=7f(T#{w>IM8_uAXI|X;BJx>}C2mK6*d8O0%w}v;jev3;8{upt>9U7bpimrsU+1?=o_l8`f06 zJo%$2%EW1gBpCx&-+;O8e}>-zt6_=5H_I`gg1Gj1#&$^x^0oh5H=JW(TbMYs8 z-}K9~(H>B=+Yl>O);^wlUoD%z!7>t*$j6lkz* zv(2n~)#?nXqUwL$Nl?o+4?1}VA`KH__!rK?8U8Dz034R)fwy@R6&L1FWZAO5z79~~ z1{Fp_PwlJ5i<$i|fE`TzAESNrK{#dN?T{njsium}ew9aJU}^ul{QiWA)OVn-G51>) z0tb#U-ztzkKJ*Vp{G}Ks%@%%qPjKwntb-2tD>G#FVv~}Rj=S7Yfs38B|LPR(i+LDV z!SrQ`ECT}r@&68mhDRUtfuQ(_LvdlT%OKWbY0i~i@z({##+Y#JO04q5dxXsj&Jc3R z5I^jb!kbjPC6IGcI$(+EP)!J-Da)q<9`aF*sK1HCusw*96je&ldmr9w@&Uw($mZ!3 zkQ!X$kS-j$DFP>?fRGK2qtEMDAHoTQ!0k^-;1f$auLhuMmkbhpG3ijrLzK5ZzDhNA z4N|6KTOdFVY7ccfS=k`fo5MkzFi{(I&#UcQH7Rgk^)3t!nx5wDO7pwl%fy9J>2Rl8 ziDIY%{(2c1CXgcpaFTC2$DIbMvhBw6I1Cd^4UJb1PZ$)^m$kr1^vRC!WABa0#rj)( z?45p6E}~)ztiAWmbO#f@neYrTQYo2Skslr>W6k4_u=n&U)8%m)lLX5KIB7{K41A7G z&(|<5y4;bkQ4lzOgG)SnIy$wPbdd0=0Q9gA*J;nSW0TLLJK?r<4+B%CPZgE+no#CO%$g12ff<30LVBD2J4=;y$I z`SW4K=squoft{4a2(2Rj6?5~N{5z;gsulT~sY>8i_L5rgPq}~vaF>2CW=Bg-1s(l| zuYdFHA$u$uk2B$y50U8d=UKo_gnR;)ypCNVNB=ShRr7SKU8y|3fyCmWg|D=x5Zy*K9sdlQDZP;@O_L*yW`P&Q${lsT zsueYD{M!#Gdfu1i{pNM9IfDiQ!&Finkwmgz5JJ>asK;^WM0#%6ZE%K)EuDMgFDEHG zooJe>H?+Tm1NhQ@COI4I{%`~_q#7rE9Q)4%QzizV+bYc{D#p6}R|G1ZdfkAi)o~}L zpnK}NaUI1QGtMK|%~dH}VoA_lHdgR_-rn1&!q=QP5FHAnw2&KNm%0XAJZojVUZKY^ z)2F8tvQ!=0P7?=2Tau1d6Z`;nvGZGdb%$NmhOs)uYk%!g% z#zz-%y!fgr<=unV6sInyqd?x{HT#J9@t=jG6>8odUVi4|l>0sQZdaT9{!;z2l|30d zuC9*gHXz&S-qzRC*Ds#@-iFkA9ecm05TPk|QemIX5Fh2e*-q^ObY_K~PZWC+b%%mt zU8ZUl9~}l0HccYc+B&9>d<%wTgHNbnZffU2GlMT@E&?f>g9YCIF~V}dXXMV_?C)1N zztgSgqEZm|=}5C0DwV3bBiK7X-~Q~w`PLSNU%gqbOv!L!@98WB(`c>d+VB|m5Z%3C zFs1a%Xx9c*Jep$~LEJz`5E!Ht+Ym?vCJbb7P3x@@tW+;T`~`W)izYH}&sk9uEk&DB4^6o!xVJF>(2oEArWARK;g{ShbZ~FwNMViDhI<+Bmopz<-<7Fd<<}}dSLR#|ik^Jx zSqqhX4Tt4&-qW7pqGhosrT2TD9~}G-F?6O-ZIYDH`7YCEZipF-Dd%^N z53vnm+(s(2L9Y40PaIoh{{w^q5?rqjjR63vT=`lK`D z0tQ!Az2*n{7MMS5=RrwFSMm?V*RUTfGM*(6u_3h$e zBgF?iVQT+^p9*C3bFVOxm5@Qfk#T8U9*-X@F>eG0E{JTSu?m$|%6n!b&W}mxfd~zu z`+cOvVan3VU{{6i3cU-(Ny2V3fZi~iiUY#&z-X)K9S$}!?1UMreuzQD#SgzpznAV; zkG=x0j04XMT@p~m1WX~LsNR0(BEVArPndph#CW;vKI4s#nOso@sA%eMc9K%%Ds5cH zvyXUV0H6K&&kE7Zx_j^-M<7?&E)_&5PW$0c*G5u3GHKx$Ct&)HRtnV7q7hXqn{)jj z;$I(BP)!x^ta4fcdWgJ=OH`44HZ)6z+UL+lu|^48gZfk&N7VmBmL|}$DG2}p#QoGf zj7Y2ads8qw{q__^&llg_yoh}HVly3l=g!XRJo-L`l2aR7DzI?;4vGCQfkU;0${!zp zU6e!BzU`YJv3wW-I;YnW1$}ViiTqB5G?^xqS4ouMKe0gG3l-2SBH#*>5c0*R?e2v) zo|_YOo<4Zb2B&x6+C+B>tT9;aG!rA#L4J-3wQrP%p|}EF&BU0|gpkBglwiypupp1V z9CQK7*7u}LX%ydwCVm>vymlA!f~Jnlpa<$Ck789&Mf!1+X?>$7WRapIaG+&lP$vT< z8whq!n_X2feBa49HaA97Q&Tgsl>bQt>z21TtO!@8eZCZM3p zwaZH16?ff<=Sq`J63j^mxZ3Ly3ok0g%1W;alNO=NEr*P=1x|{91%33-AHVQy#*K6x zTJ@spH>h9TF0Q-a{GqqjV}5*V3yWJP3}GQ;i6w+szZ!!;&X7T?iXCw*hJ-uOu74xC ztLy3#QCM~H$gXtoT4xufbo_M`R!KEECuZ_ADIy}`hjCSf@y5veM*q3<>taRqsN#`k zBAe;p<@(*-T{~fLdevUj5M{a>cvvqC?of(aiFIi?D_==v8|<71&RX6Nfr7(u*zV@v zQk{Bd{+y_!w0`8m9I2dX!I1Mz#Un+%iB=%_(l?iybgr@*v1%o+(&PE;gWL6u_A_iUM5KJCBEuj=PkMO zcCg4b!kT>l^OlVh&?N1bjS{SBdyor$M3AQJ!LbpRE`9*Cz9(1yp%{5L1JakjGJft^ zw5gP>wHx>t6D;z6ejCFb`6pgKhP-TjuU)5?i4zPbukMeHCB;lP`WH$nad<0k|6$Ap zkM5MfHn*ru;|KAFo3g^PvO#};vbIj%o;EQyl{v$$0l4K@lc7Ua)AXrK?Z3&r@96<4 z!NMwgsJgm~6yEIkI0=}dIYq z+2-WrY)+TgPB}Nat#1Ji+{CgukbFNEM3GDKVJId+58>@G@HtLC`+0Z)IHmrSnih?`*d<32MxUY#xRCq7QV1Jr=fjC7G;G#Bb{r#&= z(o@vbv#H*ypm@oxTTOV{-877L`fM2)4HFR21g>sNsVNzWAQc>am3-R#yPKCd(}AB3 z#$Fy;r7gzjQ15EdWTT|$Z`9d=hT+hVgEXOApW?ouO}WRK!q(jfUW%mw`%{@*iE0o> zu2a2M1_sZ{v8bJ3jlBQ^iGj`MzUkDY5aycvBNkwbr%@~<33*K*ZUYg#LK}FX?p0zK zItiaWPE^?=il9L*Xb^^ES)=xY6430=fX_o4`_zVDeZtEet2fc$BDiPca1$1v5NBiq2kT`)iNL`s1 z&kGCT;|{b?Vl)Qu!ZzistXfK*qAaKt^{oG<5fxTw$z8{E4^zgX#g}Pr%FmHNJ4|c} zKVjlFVb?K!*a{HrP7hvjT2A|pi4=?{cwU*!1Df-Z8tlkpdYGXTb?l=32k=$vWd%}7 zEf&jvn&gL%h(i)1$QYD|6IMa7T<`Hx9Q)U&_u&1EMO^S(x2+f^GPb8ZtU#0Vx&6Dy z&B!9_H_Z|8DR#+b=Ds%-AJ%g_II`biZlOm-biVi;K^9SJgY~ukyUiTDUnJvy5U}|9 zA{U&JStqn#Usg?1`o5Pt-4rwT-{{OZFOZYp64DXENdEl7<46R%_ds-*o*LP1Bswfl zWkp|gBXn2#vh&p`kiz7H)_(H?(%4r1a}!h+mp1CtB%t1$`!g30+3S21!t8X{_5(?C z$}JZN-Kqp2Tuu||Q~n3veJb@BdrmiZ;(7TSwuP7j%=VJ&+Z#w7iD_?whLrXReV!+s2&IjM|N4&v(-?4ls;P@@x#!!!6L^pd` zzwR(2=agaPbZYz75?N|RqmvpN;g&#bx-s$%nS@FWcDFvB7^DgExpZa8*tW-_? z-q|^3bh*MTTGJLbVCm`S=jUvJ&v~3uIpZ4>?Ko^!18&X^E{)$SEA_s=P9oB;qwt=r z^zidLxgcWZ$n5n5ExWFAJm3WJPt}2dZ)*ySS>o#NW!CanpT=DOxI+;+tf9SJN(v$> z5ILenG22Azdu((aL*3<$?OmX>>T^0wP_t%^%XHrEKmC^-*eE2@V0&P5PUc3Gkn(PWB49C5aq~8^^gmkn*g2- z3Ev$j)E%6SrRC1AN6has^Yr)_MQ`ans-2Py+^+{uyqM}73ld+T`a8N(Axz~C_Ywfj zWU-CZ^z;+uj1#qNlk~Lr?=p|pT4($(|Fo}(J-DU#D$`~3yH9V4@7|p4($ezH&F`SN zQK*0NrrD$a^7wdn`P7tJQERFP2snBhYQbAbqTV_K;TRqSA|(7lN6{%_&YxV_BH^vs z()}ODWWc07=pds1o~pLq?LE@qgOM3=zr7a{58w`CXap{{9sLR1=Lx=a)*r@VXD=xj z`Qbb;m|^rEt|tx=9`DgR(iE)d^O_^#4mu^C(ekt5*Jtg>dEiyOfD`YB<=aS^K88jL<$lMjTuc1Wd|HZ zYx#&+^sZ3G!OMQ-XXm&3cGh%c+ng#guYkyG4c1UHERuQI-WDA=Y?`w-8dlg|Y z$M~HOSUZ9&a1(Y*B*S2gqtCCyL_A2&f~xG1uNlsKD6C7%5>BpCV4q?}s+A zKpNNNo!EKodV4t>idD&Gsi2ejnTuSgO$xmkj zrsZ}!ALIHpvo9Z=M`F|PyDrvxEXG`FBkkS0WH6G#*sw!PhZa%Xx{6?8z82oAq4H?! zZ8Mr7q?4=^f&5lAOGnFU1AqMu*~UQuHxq>f;uX@fKs;@6cIih-@QOn}_y;Agntb^A zyLLKoIZaGz2529&eKw5qMi2t7H_N!+Qx}L4&^wTqZ##i*vS2x$-fF|~yt|dcYNF3v z&UM5z#al*JOio#4?3uxrf#&VQzI1W7Kjwk+jppX2S<#e=+li%_$thnkg38EGVQ~nh ze15nap#$F_)khK0$V|A#lJ7;+MK}isPRu1DU`s3|?Mao#-cW|rvPLy%DE+6eHjrj4 zCn733Y;a$9uQOuJVa?%3{2FfDogUpi>(7W%DZ=nF**Wg<`DJm-qpE1Q5j zbJ`Es|2D?!Q<93Y(I>M_xmI;;ZiQ7L*Wlf(pr{&R0CGtxNWw=bn0+Rj8FKVy zCRYpJ!l-XYFTl5t6ur5Aeb+6Ycy{X0ytl0RBvMn|4qo8sQ&!2R8rStUP&H2AF|di0 zSHT@2)@vHP09-oa&7tI&+1TtZ|<$= z7a~Wl6GfakxjAwd3k^wQw{y%Atb>n~i}rFADIJNjA}~* z6cv2V|5j&pyq9R;c&J7)JWfaw5{9sO|AOeB-Hi~govb}HS(tDC;n`@LD_dwA{Ufv^ z4eB>H%&qJJeA*vI@C5^Z-H0j?gb7o{tJGD{=@MW4K+lYZh#ApbRFp6uNdD2)kgH%p z4j!mk7_!^c`P>9wgdaq{o(xH}q@T=W<3ORFKCFT|S=;tzO$We9dSZz)Lgi7rzxnMf zc2&AcCyq>Ke*8hrM*O{H)8P@}$8SF?kQpx>fF5qCkz>}2>;XelQ&aP+&?qKU-lE>* zK{U!6W50CG@*3-Pc+m(4yn~EY7cTm(<^mhB0_ z&&Ffyr6{q>|Iu{b@l?P68-E{!WE~@WbQD7N%&wy$*@x_vy-D^c;n=C{nX--*vS;>+ zkj=3Pag6NsyFcH@>U+UC(P5mO~KKQV7v7BLdpq?FAUt{6soQNmN$g-;NZmw%Ve)+=O?DQua)`1pRmlu&?+ZiTF znHkRX_9d#napIn_nDQ(ojjq4C zDRo@?=W*QgdjqkfcD~i}Ee?y4*X4kj(#*pnz8nR=`<}Ms#YFAMqoJ4(qM|a}4(g$@ zrN=2uOjAt4LN(4&AuKoK_y%T0#KgpeP;ldN^n)NA2Xl}Prb}Co-C-j=}k5ypoRQVf~ezuN|7el_8pkgPzz^Ssc$?YQE%Dqj%$Q7$( zJ54nA3h;1u!ifOYk$UK5^SE^VxsG_hAC9>~Bg4|-aQi-u(qY??{EO1@wY-hsAM-?E znbO{S%cmPs_J1jZ+4pww*;3Qf{Y?j15g)ub(SBE>ZCq*@Kptg*T(vo~-@QZANIm*W z8uS2`_3OQ*p5yMXD#z)7ll9UlRF{u1Ok>78J6{ zw|nsG+3-w38TYGzwJSELq@f{lJ40eU}5VTY%9w=|ZnV#H6U`2@!V%kaf;ZxkgEb4_QQ`^Y25*xClZ* z5rg*_@+VPZ6mznm&bvua4yGVV8@ESVvGCLVtSCA(cmPC3raHw?Vj-4RrABQHk`;wR zHlOS*R+LYs_I!a|(Y6CFDhRh!8js>W)0=nPog~Wy)y|X zZaKpAHl^eBZVOv7gV9fmg>IEoy>xXg#E`qS^*3&VkA<<@b-a@xSagsDlpTVhVnC5$ zz`jNi6eW@eJqae3DHD2h19goDdHb^jGx^dm4ZQ3g^d6YAvY-!|*CC31?wF&kfUF@K zmC@X&GQtqgfm~Wf4aqesON;36Xt7WpS`;kY%tD2rh4Gon*X(Kn++87zT{cZn3i>h0 zT@t!*g6k=a2*$crUlV1`w!ix&6mQ~wb^mv`Dk>?maxhYBz=avjqH5T&M4VJ893J!l zY*|e>vW*2QI>Gjlc9gQAGXXtdf_tfV_$_oM;s3n=twZCXZMUAvqQ5?%y8VS6k@fab z5+ukJr@&^q8yc;Ff+B83KWP&rva8L8OgZe`3o*CKM6)eaUjDfcJuWaCAao?%-ErJM znhTtp`|mwDWX^%cuQ?YuQ@F)!z$XxT?@ z<;eaq5shDF31kl>+U^a?gm*3nHhmLpX4W8Hh`l_(WgE-CI{OTq+?jrBOoB3c$s|~g znSXNXn)q4XUHTRt%nAcV7+Nck^>5>>Hc#TpJuKM3{xslS*~^fw3g7TeYS&tPj)7M0)L+K95wg|_-;3Zp-IBQNIU5s2&%Fwb2b_M@;iQlhB4{afnIKQJTBqM z0><@j;Gf*{2FuNE$D#Yx26cE=WUIHh5UWXOY_rRD?`Ywt%4EsB=&O%Bl5eWc>bBd? zr_a)^T-JQ&qKIVr=LuAy>zZj?;h&IpReX~X*>{8CRx&Dma*k`ZPvgTbZDlRO%xBOU+A=IqX%y?P;w8tIPcYhwZj}xD|BkniH z;u+t!vROJe%*goQg=Rb(YrWt4@T(~~45kNjqiv^Tle{WaznZP)dW-J}j*s6M;OxAi z&i6;gqSrvVVZ+N#`r|sxTV}XoF^0;QG#`Z;E1`q4h&yO*3y}%J?|Hx{=KC^Fy4#PB zfB!Dw>x)VEv33f$jIJj4tV>s(I9mLO)vnY(`TJP@8!%xh=VVw;?mv$8yq_*Hcc0(* zK@N8WYXhzfyt={Fb2nPvY1Gfk?e*4*SPvK)pO&G&#UTc(#kTFlQ$Y>6X`?Znz4pQK zdVDq3$KGfCfUhr<*JG`*>~0V;-IG<5Gq)v}%r{eNjq{NceI|Y2MtFU-=}jXCrUimX>pduugGh(-?J}n%rrRWQ=qDHapz9sUE~)KGHRNgN?9xBd~d^JU?v= z@b4QK8XAg~KmC)?b1zg2nmb>mP|K7{fB7uij=Oi??_XV`mew>|)BbS zuhQf^?vwVqGD{cHivuby`(xy10*u`PET8`T0oA_-FB_YQZ!v-uDJbYoMLWS=Ch-SM z0B+vEA%I5%CFvo70i%Wy$|;GkvvD+4azjP;pwSVq`641pn-a_~%AmWUNqXM2K^%7w z>f|jhPmwhbY*X}2Aok*4K~){TVs{|pa(3dV7m%zN^4~8aeUKxww-+UC%itDqo*fb$ zOIQ-(>>bITbt*MU=gfVpr=;YLnw6{iGUhw!K0e|Ql zbU2E$OWrsp%fq93LzG|8LccyzX62)&94}7(uO1NA>E;TLwKBVbu4U%o%qkD$weN0 zmLX~~C|L{VLPot(o1dQ#Gi}&MY!pTK6e(%^-a0~cYz}(ES%{-6f1Fh`I_2%RJ_D9n zC0Nkc1tqEt;R>7H&~OpxT{+sC2S$m5ft*VvL2ipK#O;hu%p#5|!wAnKx*VP`(hEAa zkp__+C5*#l4m__GKqa{R)z($EcBdWFh4Jt@UyiM?4sVw$-$D`(w&9oWQuO#$qWqY+zz=)&~4= z_m4J@E)Tl@{Gl*DO>}PFc`)-rVk}|4;VASOq)h_}ku4KulduyzFvz@b#mkS0!LPAA z;!reo##Vfp-ZFAB0i@X4;{mwE^PgiVv8CVAo&cD_%F38ABLsw`53fMD?4QA4uI+tK z+X8M9rV^Fs&u7bz;^N}W2*{wd+`0dTZIA5_`*L`AOfNX7sSUR4mg2Z0v=Owj-iIOU z&qihjqs1OPvrQ4#AAjzY+^|3JI4mq|>_hzP`iqZW28|l)CiWP}BykP$UR`0J66VK4 z3h~tFK6e~QU;K@2`j~sSWVa*KOhiTu>mcUbbl`4Azk1REc6W3XY@p$sIR*hW8n2QZ z{rSi?+hlR}`*5~%!c&bUIiu-(wRWF}v2!3&;PeO3vN`KOjup1lS_pbs>K8eyt8Z?^2YNrQY4ucu86mmOpI)$}* z>he!7SHl7;Yik*9iY(qyD@LnqH8^fAFW)s2IR5D?WNO*&jeE-vXK;q)TLzK^{d#Ha zw~zv zTo^JmY2hA;LOG&__M4}*SA^w>PT1&%N%~-aDBE%j16_EqrXg5?v!X6+takbkIL3Dq=2upON>hSXNrreKz`xg`Y`?_eZ&<9pRDehV_y048Od z9n8jJ4NaocjQ@KwPiZ4aud1QEE`>8hZ0xB?Lp~7&JD%x#yl;%K?x#cw1sFyHEm{F7 z2&8OcknwPD0c?tL&WD`M0q@ZX@5f~l{g(D;jjR)l7Ld+p3kPxA^r3&2aj9CAYCcby zE=nB66v~CVbAY7LO@$=Y&CMTUeF?OA5*Z$8$M3i!LZ8#>XqJoq@PY zh(=YZhXC`zG8uzM-1@%hFf0&>G@oiG*cORP1V%5|doVLn*^}b)_X*=P5gT_3b0iP7 zy#$o_p@uNb2QyT<<9=^%?}$JnGl7mTgNT6^;jj1yN-a{5(gS?%0-jr(2-i2{>^}tP z?Zclm5V0frnXeZrI|-WNUB`RYj=^hTtgo#hoewLKltrQ^tRRGgY0G$cI3?_l)(6g> zV2M#SpPkPFmz|k0F*@+gmUF^PpAq@1)+?ikrK`*80EQNv|3zVGJr}-I z^Rf^5YW}pCgM&lMmkp!co6H5TZ8)A;U0vOk0A@nj`=QZsPBcoM%r%yM%U^{&;NI); zB7haB*L1z*1qb5kaPoxkZhM&Ake&DvH)R~#<<3sd`m;{YXt8TX&qu!NVZ~i`s_MhS zLhrLG8T;XqaV5pYql+@nsYh<~#qXti`ekeL<7#V-`4jmE`43JntONfkm(CTA6=6P1 ze;adRDu@N2sY#aPN`p8}T- zI|0*GPiw4Lr_%r*ikFrtYYxX0^ZM_^?vKZ;Yzz!fCk4QfcF_-tAUE%%4V0_Ak{R4D zo<4G(t~!V#+KyOC@&>CCt+fFalR8o9Bh~7WyY8}sk!~_`Hlii<+XLXp!gf3xs9%qa z?4%cdYP`Im+)4kQ1MxZ({W}rOU9H;@8BanTZibUB5psdj7{v`s$3f6mnFVLaU(6kG zIiS@nCnr?qYiI6nu~g}4oC(y2^--MnZm|t%i@sSK`+0rlX?($(dlrE2BhYl&8*+or z*k{RFky3lpHNjH4nt2N70z_x^$?M( zsybblq}dJ2Y^`nI=WzYBd0TS!ImhPd9yxHDv-iSUf(xP$t>cbwh#4=v} zmVH8{0;DRvw#Hdp8#LSf(5eepvPB0 zJrr*LTEM|PDPUU&HR7WZa+^%5%gbu!l85#TGzleVR6 zRqHXm`wJOLdWsLaKj@KS3yJ6Jdzde=Hy~8rtJI}i3Puj(hQNT=73o$m}6l{dl??Kv( z9N>KlnO^U>@%~ev<%EJZtxf~o+L9!v4#bH@%FIJApAI;@DE1`RK~K>0N8nw>dEsEW zZ%X|S*v#0q5mc_o+pNY7Lhb#w2xR*JWn4CWkffC{&Ize;o50>-YSU{CMT;-aV<zgsvW*L1kEk|p=6N8Pj2ne7A`0v zixO_n`=*li3)c6Miptig_l@(RtADyg6s!$qb53o?y*L)1gHegGxrf)Xc*t4XozJ(E znVf2d1g(>=ewNCd4-Xp0c&Qa==bBE^bMn7zAyQc;Da1Hd6APGJmR>o49B}h~s+u;U z=yfG3XOw~O-nwVtX^z#G-F1@-lT8o5v)Wo`|4oCy{k1DdUnNSdfXA8;dP>Y*!Lnx5 z`O=ZHqf=1#UGkIS-Nhvyu!6M+lamz{{oCrgHhZ%EQ8zJxKg|cOP+$s4Y!w5M!uJf@ z#aZo?Zh)gv5^CJ}uRJntDe>d&a0gk^)_!Bu=&S_x9>U_Ggr#1U%SwDsP7aA?8z(zw zcFYaHNP8@|Tf3*AZjqfSw;v2N-R$Z|_;ngIN?)Xe#Ko(w4t>Ky!#X0}J3t9WF!<8X z^m-ZhJ}HB^f-c*sU#+%N)bsq_&eNHHE9<&3GUHCwg)4BYF~8_!Pt_O@J>Qzzp9hE` zH)|iWfQ1zc0c$-SG4BtzRq-wQeJsD~6wWqnX`qbeyxc7#wlQulS#jsAv>?Vw(sAiL=|cf-1j08Tr@R5AsnSRx%J<$+9=L zz`>rZQts+cum(-Rql>Rsi$fN?yu6lrl)JUD`!a0Usz5)#^M`CFNaik$a&TTOaCDts zT#l|k(@Q9e6Mg>0st^>(2hI{LNj5d?yaou1BwyWzPwj;m8WgDuMG$>w5FkcPfp<+h z`UeaAI*9iw4{Ixh<8e~8(Z7%JY;xq}8Qq|h-wgq&O?UHG7XC}^$sfT$Qks6u8l*qd zU+!Rp@s7JXq-$>Q?>darS3(B7Iu3JpcQ0iNBv+`IRQd3AE{Tze>1+{11cil#U;g&> zUOz4aKoP)x4@YNbUCVmTo8z`_aTM5~QyB6ozc)?-3sQNToQV~Dh2&}ww{3c|*yep) zk7cJ|1$-CqTt@;v+DcY!d!mg4P@ zx8Ogt#(jym|qp%qHF4R2O8bpLKg7VEGG zkcB5E=SYPE6=M@pJ6-LIc( zb&GFMyzUubNY>hU;VVj3(YFwgp3W~QI6R`&LO}%T zdDIyyD+4Ls!YndC4275x-3sHboc<>HZAd=c*z1S#l zq|`uzvf`Zn5%dTGX$&An$4BpD?eBi?Bv2Ka-^5I94Wfbq59F`vr=6Pp_v$Xd2Nm#l ze@)U2nny!~GF9_~R~<*&_g~r6lvz6ZUsN~kg>wir68t4yv=Y;|$mZ*AbnpBGBk+by z8~vMxiJK0&9v^K@S09aao~^ms9u@;RjAfcLA#prlDf429uP@`G;>zEzzd@wY4~$|0 z7roXC)5YPkdI{H5i_1QL$X`thKb{GSF3_`|5Ui-Yx!iE{hR}HVQo8!@Y`t!4eUzB9 zk<9egtAR{EBUGRM9^&EXQD|7Glibd;de1FoN0Gt(_1bDcOQ2wra-Pr*CRQL}Blr<5 z@m!P<6!#RG?RQRhB_<}0#M|0C(uelT%uMO?#BY25*|n>rBCv!6E|)_j<#{OUhZogwhQT; zAtf&%akRRbN9vxVe{;96$FFem{G3bPq;OPQB_%h^M5gTf_urd_*Wb1fBv&5d6UiC# z>uxvs1}0d_R(}T$ingsFWWOf_`YprHE2)IPNeV-^<9vj*f1F#pQtT%n{b}w3&u=chgQHmiKYHc zepNjP4Q#3Tf7LG(+xRl8dbF~{b(5|%L*_&lez$`RRe3Ys4%8|ITDiGByA#pi9(WLJ zK?f4Veg`)6p&SoCf=tw?sh8LBGYWs3v){kRc6UKjCtK4F=+XPTD*@V1Qi+*($}JsI z_qR(fJmEv9r=&rBH}+?ZJ#F1*>9u%Q7CY2=iSb@4WzZRqgP!rv`HLyq=@H`9GcrK_ z4jDYRV@^z~AGWQgkiQxTr{*FRV6gXNJvePNk}jF6_rz(b$qhL8G&(hBHth8BcEvWw zIS(+3*NP%72b-qDLPLSwSPpSmS5{W*{kM`1pvyjTt#C(ty5E^1d$vu_%IdS+L=kE> zVU!7q)lN2@uU1BLa`cOp+ac{7K~)rf?3JMgP3t{Kby|fv4szi%wNgw>{(LK_#h{IF zIZ0|w1r-^?k*)9$dq2{Ox10+}Ej z35rRgm%>A3Li-KUzI)(8)J<`Qu-&B#SbaT%}URCJQThTs7 zN^@~C{duiy<&PU-r;rOOC=EVnkfHPaw@9qoJ|eAKG(Y;K9{e^SM7HdlyMSX>l(coX^Hcb?C`+`gfnzsIA5VI+5NfdiG}* z+6|KY+NgK1BzE)c8x^y+p9bvgE%5a@P`)#JpQ8>p{L=l8(WGAHw=B|-qx~q85ZaY=%4%1XFRV^rgb@@p8+YchAn#ZVsgH7Loj11|k1MEQh%A|MNeUIH6&2G+~`*!x` zCc|oy0zC0TWErM&R`o7%AcFePxLP0Yr2xZaI; zg#I%+B5zwgO^21XEp|*oqe(!ZXWFyx4XBW~^-vipf3kbDy0-T5J9Vg;iNrpl+40C9 zG^^*PIu+|+{GWda*!z-~X`rufhpOR@sKt!gRSIB_p1CsX8fYPx_xqSqQ^PU?d^{{G zH4D&BsJwB0m30+{Jkg_FX`V-MTp9L6O6;wZQpHfB)HkEET(*mU=oE zhuKEoae=@+-QM`#{_}8f<7bmUIv*a^{31@H1UIbK=GmGGn8r5x9^sm$`8#kXKKB0p zTVaENrPG@l+YtS4h~N)Efom(Z=VQJ+K)Krry1$%)NZp{tkR&`OwAXu%MTPx0*9yR3 zvUx*I*0^*$Y~!q)&v)e~M`Ed=)a9ufq<-C@W@u*CL0tYUP9W6mPee2bwyec8iUV-D ziLU_hTSj$$oR3u2Kv5 ztM%o}m&VbPO7NXC&Nlyh0GCt-vu7FZH6+dWE{zo%WcqA;iC4a3)Ckfv%@<2~bgOhz z>G8^yA26W3@zlr@$V+mUEp02BQhjuFv)H4+<3wC$Ae)ouH=Sp;Uxw)C+?IZ+Z#JE= zk_Tr!nNG|T05zW`2FAvKlm&gVACQhqLucJ=&f?atWWSNMa~<9xi2PlhKorsc0$)Mt z;dRhy279@K^?scUqW+L%aORh^Ndh^7d3?foH$jo^g)0Hdd>+945%v-=m*UJ;5NxqA z51Iyn1=Nit$YlXWzZp&pi4+!Bm<^R+e4I&{UMf)%95FLGR;9E>+pq&cGsno1BmV!r z08%rUPrM)N$va&e>b!*4LCu^MMEn2>ugd105*K@*5;yf`CEl}~Z~BEu=hRmhtS`TH zrJZ9}!e-JWMsjT}7XZ_Bskn?8bEx3gS619CZM^EeOu`WsUY8py*)I08C@7f`-spPt zLo$Xb9+bS-^5S0CrSoZ+-?T@KhEoY~6PbQpZNO)S2I&Rg!f=|q85VuWZ27Jfn0kSE z(3y8eqB1SSdP}H`hKFPTCMjn8m6=q}Ui9Y|?mF)^mWL0E;}%jdcz8jQ;$wAuD3l2e zQoBGmo7+ttQC{_u^jXG=w^N^(Rh1cO(0dp=Jyb-A;uIdM;q$~YSs@g+>M9lKZN|2=KOpO4z0a2=HyPoC1V1w zJe$o)Z+=(@&1B72sdM_Z$Ew~(3zGaEH$lfBJcU=~WpIn&w3B(%-M5#=6BEs6k)B;$ zh1LR1-skPtBQL>bV#_n|{_~O8%l*Krs)qAn-K(J=!M@^SuG=$e>Y43Jx17ZZIsZUu&u$|_U`z43e06c@^d5eCJd zf#mgZEe22(e>NR)!aH2k)@tppI+>g#y{5YWcg;x$^$(m+)!)A_mp`JM;BL|^L}hx- zivTdSCL48J<@TeL+&N#+?cM5E*_l18rt`K%&TBrw|Lkyd!}rGFP!RUGg9@$I&0V&(B54o>C*Biaj}mzZhwF6;krA?(FF{0 zespihT5Lb$F0~nW;-)Rt#!BdeQ5(F%67cle zSFbHC4<@Zmj7&_NwKXkB{ZQKOBXn^J%p#H2P`feehIX=)LL%ss#s3sZ*C(by+fyv& zP$Bw!T*9ksfJM!JCxJ!!wbR_?a_4Dh@_wmFjmyFbT_D7cj*yJO&0J0V+W7^9hNfAk z!P0avOmGQg8ozj9Q#weXm?gv{KDz6wanWi)L0TD#_f9FJ`EcOm82}p74MaXs{o5$x zx9JZ~*jRs;$Mv(S1+^et{4d%wPryhY2M*{~^^jzIXCVc0g{%U)o~MHBmhh*{@ZAH6 zS*co&J&stp85>cb^hwZ-1bT}NfN7`Xn;AVPc1_83z78M!w`@Mka?lnwxqGu@<+_Y(LVTpZ27 z2|u@%mKI+)2VUlZG|8++U-IPSbqx=_7JS8A9#Eb_UrXB;dE*7`s#h z7)R5dMDU-bO=-F7dnz00TI3LVl2K`Bz{mqdRscFG=&Tw&pE1P=-89|Ja5N)Ti%|m^ z8@B*cr&Z;YToxe}8eQg~Sp!aLF$XP!8*ghinAt2F^l~ zK{G)8+-8{&l>#`Ngy027tWHm~9Ve*aT&$2HzK*?IlEW3wjum&sYV$qldz| z5T*Vs-^kYd?($P>%yWPHQCv?U#u%+5VlJ+ThQSJX{IasSpD3ld#=CVO(b?S}UyjVL2~Q={UHCDSePGp6OkJ`SKVq4g2u!cVF?%k$#l=aI=Nm&y~Pp;Lm2@IT3RC z4t|y#ktrI=_dzK8nJB>s-{)O}hj#@Xkt-zJ?9@;A?h=zv+7cI$_-ylO>GZ{VnQqq6}VEEo8(iQZGiAz+j@%P@;6Gp0e5;pkH|*~hJXZXq*;2hid}1YQnCd6=COs7wFY z7X#`PTCA_e61QviV+8yzs|&@L3(<~Zfs2CeYO^{ow-*qsAICB~CVX_uaoZVC z11y5l^Uc_FX}9HLHEC(jPril1va%QUCVm^O9iI9IuZ5UYW#I)pLBC%@4*U>_mYdR$ zgHBP|EfQ#0%e?NSr5N}$C1!VsMVb#ThkzN0=FaSQRF!F$}LpDy+bw;Rx zhO15>2iIzGK?FGy^je>Ql_8Y1@yOM_XraiZBV42uaJ&jf@{*)(FE!HfY+)PETGE?) zL$v~h`pU;mE*0}eu7AW}oHou6#*I7&9X%;1C=&a87bT4i4Z8QwLAt52ZzOR^I7|_3 z+~#}L&EYw^d5|vc9J_Sf`nLf5U`wT}9s{V*LJgX5HQtrpHVN5b2k|yL8IT>>iic!8 z&v!aIPkFhTl5aoN{*4*kSZm%HFG$VI!TKtv!!9t zgQ1w7o}R(Lb1g-BO`-aRhV#Y9$6!~+wa#SGo#!3roZMgw1c+)jpWDR2PQJDPjMkBP z8I69o0<0XOjJ|7a!+*wlio=}h#|eMbuKy?MK8{IyVPwQo%mbIA*XVhw^iBmlU~qy^ zISb-Lc5i>^X-#N&i~m}Kc~p}24U4E8WII>t?ysGlk7_dCEV^QJ_Os}uT(_-t=}P5% zkEfxHF%-|r=4&hv0Fq=7)T#rnUJ5!%`Kirxv^FRBs>9n(W){Z>`9K5rE$%;k*1`vPr74!8D z{CeC1BTg0)FurZQDmG`n8qDTp>frEqh+>AW%XKQ**zkql>Lkv%)-B`)iNm)A#|%pe zmgAQ0?(Q$1@&s9p|4zY%cVW#0J2CNXjB1FGacnA#)d!7cy}$E<{@umTBTx|-!+f%^ zxcDH?2Jd|YSsNfdF@YrlYwg((JL#Qg01uk!zob@b+<2ds6B0JK#*U@d$|7YKp%uXP zq>%9e@0HM7dnD~Rw=n4wJyhfO=*rK9^Ni-2LomZOO-Y;sGlNB%JERTDhVWcMp?v!P zyxrP(EmQYM9><9}XyZZeg3uH8DY>qa1TE7|7{-5%$8WpBiF3)=wNI~-U@-U_H+bnA zDh-K9NappN4Y;b8>IMt)`ITS{c~FI;M$^vl_|Z!0r}FDX%aB_hHZp<9jNWNZN6aDW zVS?r6W?u-eIF$t{H62EoXKc#Iz$yBfknPykYr54zYrTZ9GV=F=`x(W)V64>WE$4e~ zon+(s8sKBW4@`Y$(OjcG!T+og5w#ow~;)as&i zyx=A;d6ZuYQkHv?J2cQSbzqd`?vfC(lj5IFv0YFjs9r-)Zv6L>mdlu}8j6sjiQebD zgZ0ADT&SO?QbKRsa1GgJN$EWueTMbTWo54amQTPm7izoeUGfBac@wkYpGj767s@X! zKqItJ!pTB9cL?V9NkrQC!)=z$p^$JS(x@AxmoZe<|1pskL&%7FG)d170}s@k8&?wY znsy4oa-7t0gJ z6YT?!0kH59*XEJ$AnVzBe?KktvLakfz7A_@5`ab9MD}FAc+~s7=#>btDSaFQ$-nkqD|Bom8#f-@73I1kdN|^x|*s zBkDZHKlcw zE>ls}q;nmKa(({81)J;=jh3=y0J{q8Nf4({i$AV|o{;^wtJ3EmWXN_oGjri^I^6Ka zuU|Wl+2p>1vB1i))XRJ6A`dh)nfNSN+B>}1kit1<+^-3|x=eLG|Azh-=j`Of>c4+b zds6#M#2P39-?kf{;TaU`Tn;>zZvbeY&u;$}8{@hJ`Uig+8B1Cgg|{ll(HVqthUx>z zT1}yTfmI#Be0x2J)On8A2?%K=hiZ%NB%r~iF@pH(-ws}Z$R`+T5K_Q~$!izuu+`zn zp{>zLK<>!Pyc)_`w;kUSNi9@tbm@3_hMTGL*yLiB)0Xu7cVJz?=X<&1x@L4YCjIEM z>NWA>Zt7|Z3bMIZOIu1BY0W!e(2#q5ngeitNnS`~ou1jmjQ1bYib=nn7@+chD5V7v z^1eiJHaWvp5i?5tl1QEsvyae@p)M+n7SIVGaaC=0T1f6mt04PgE3MK^H1TAN*L7QI z2r+DryrW>E^ur(V-~~+mI0HSOqA(NmnGr5UosaqX4C=m(+4y=7G1{x1VEGQZ3jfqd zTtm@94{Mp?jcDC*vWV^yhJaN+Sfj0T+*v~A76->DwR;bwsIP;esPUXu~I(%3;nu{2AmhL-HHepi$!Js>16SI zr15nacW{;{kg4{eoro3}^41W=^_US{kz6G|-R>EUUJv;2Z<<_TEEZCqxKWgz!VHxB z=wYnrbGnkIRLjYYy>j=EB`Ua3Fk1Ttgk?JC>V;?+gszQwuNewGKxR;(EQ<+cyqXopBXc|g|yn!wu1UJ>aE+`@T!z~(gb&#O@EH|G7m@%1tN_tfz0`|vUmZ)2Ai z-xk~|8AHul-teZ0#h@vHRgbU3J1+0(0Qg$qyx16|&F<}mwD}-mk|4aLbZaf1H0n88 zxQ@`+ukof+irpLi;b@|c{xs=92RGe(p6}}M2x~Y6p-7}V;=_SE)LM(7QpRkMl`X92 zR04}?=dNdDwu=;93B90$VfTRVnonm+3!yRc4rIF5gem_CTh6B*y6U6#gEqZ$Kx2XY zpwyawv$3-h?zZCFYXrVVZnb}BvS)2j%#RuF#0YDCeJR}QGeb)&tyt&`B-P>zI3_C z6umm&D4l#V)3LOfeh?gnCBb&_^U#naRKfG?N#`#&WKwD*>hB z86|*faS)E*tj=>Y>_cRCs&k`^@&~OhY~No0f8HLka$qIsA!2i`o{sJXOs~L$sYu`> z-Z~e8w9ykT%1;YkobNfRAvHefE!PGfH3l~t3p|y^q;T>eMwmReCmVg|JUk0+|}*kH{f{DGyDk$;Wz)YS2>!+k3ItS z!>gZUIhy~ybBMT)pKsv6+;u1-qP?!-+u>@bOHgd{&=jV-5jn|wYFM&15|7|mys_6 zlQKW0(<_778UPGMHSNA#@rt?B^O2R|mu2e5(EpqNy|2v77Eajw_gh2uzkC-^T#st@ix6tj}3A!fmg85)4Ta z*npCeb;-y5f7@=0$RC89i91fc+KNdH|I=R3)@Y3Ds1ESkK9^d#zV??pPiD}$?w}3` zH!~i692zvY)>mr-mu4l@((ij*{+(9*YR8NCaI2I44u<3|%v6s9fx=f1qKq@;LB7ma zLC(uTI3cThoup#PFMi`wlA>sWqHa}mF7hZb-ad{B=Y9af8|cpY3Hq;aNSFh~;*vPo zuK#32G^W=fY_=eUKzHs+`FiWu1=t+p^=m~#Rpv^P<36tBS`QF9#GL3)%1HT@DC#1(vfF=sZ zywMtcLK^f*7$O)%X5T?wdl_XztWaP^`cM}p>FSX5cKwJb#7zY$`!n4gNzj6!hLc~o z6@0&%>N41RUEF@l%L>716?Hv+NpehP{pgIj1F2n1TU@Ei0d-PA9@nhIXo3jx zBZPENApkw!?cT(1@R>-?@KU7gH)WYqerE-gKuVRD90vq@^2uR zny1}CM1|ZJSu;yUGk>6*ziVy^-&{5W^fIj^jrY*$DU zJ3((zOM_fIxUt0(aH)H_?~AKHDha#drGpV(l`*><_g|d~T#c43bzLs2UD7Lfn|CsD zEJ81spxfLV^nf$!N@-E-ZeCQ``O-UdD8{aG?_ZlIO{9|UbF@uaDjz?8)9zR#M*nU+ zse8&n(og(q*(xw5AO6eL_`odlZz%wD7M-!_+dmU3u=}i@l$O@8R01Y=ozR-`O%@+q zNBn5~K&y}i*>v4e!2Z93t?+Q7?Yh`#Deqm=>S@`%%Xp{i$YJ%j=y&YpwX;*8UqRM$ zmPKi(HwEzfaF@%@b+b-oA0i1@3WQb@QV(&UDg7*C6LqkdV*#EBbeaAf?@aqp*N55e zJ>suhTQva5K`}A!^oXXwMF2%?O^)PBuC0E}ACY};#F}%8TI45}m4t)ov`!p2b&{e! zsL5UAYx8uJtT(dlZY;MiYaRK6oOI&G3P_`6$VmVz#x7B&U|D1uX3Pkvd0fxFJ2&DUsZLu7@2u^=I>@knuaFs8v;Nx|MAOg z3Nw#NAj7B{c_nu_5YA5-ouySsOE})U8R`4l*>x=4purDx(pd-Y$RbMWbMuAc@_oiB zZUqUO_s&C-&PoKD5la)B!1Vf4`Y$367(j5b-S_!l zhOlRxl!<4hZHQakmy?Ujxpv`_uMae$xMd2IX7rVx|4sHZ_<2*QSZ2^#eAYTCaDi9i zW~35{D=?T~ua1wysT27FiP;}NMRGEY`h2j%UFk1 zes0RV?ctbfU8Ar)lv(hr=XmDiQoTpRBBJJVR zSaI35c4_DBEtRCdoQ>j-dDP~6WK;p(hznw5OBSOD?}0Y0?hvZXmcc3(AZIvfQE@7zcv(Eq z#5+JGrne}f2A4oQb_Cno<&|zFK_e)F8T!Fs{{;=*e$YVkWoPLlUs!?HH2F zy=Q=b9Qll<$xgt$l>rhVq-Y+Ea)q3l?XB$WFtbq~G!{EB8@WFXZiKWV>q~g()>MIy zaY0$1C$Xa(?InQx?$~E#|GZ)`H28{Zf-8-AKZeVX!Xb?_phw`vp?{yLF zmBedNolGitWFA$ldw7$iqjDj6G=4Pa8BHwAd;1P6qkS$Hr+sCLJ3m3s2c_%fUOAhM zY$tCqK1k$OQOfItgitsw`~j(gSQot|{RnXo4~Ro(pq3CQmcvGmDoS5SCmOTbk63(2 zr3B|DY}r5}D^`5I1oTx>fXY6r98N^&Cv*~nLRPn4S4zzFj&_TL%Mz^61$NJ$?}S%fwgP4MmH%yQeaVg6gOiye#?4S!YTicKRi4CH%)@ zDT;GUZMW25K>qdK1@`7U#N1$y_cfcHB1n_!`eIr{#$Q8b^03k-56n0&e(@*IePy~y zdi8|7yNIC42-v(7VcaeUZ3jxD<;6C!E?lF#m;MWZLL6Sud^9GMy;BelGhKp3J>r1s zozEUHcc}$#>pmpL0YJ8GN>$CRY}#?*G4gD4u-QQuRqEN^4B9Q^QcLsO{3-wI_v4k^ zBkWgYq$MCirT2C2B?eypw}KDYwGQxI$`vO$R{JV7kZyEA*Sv3l1KnJCU2_th$jX}# zoG3_&=)ImMO8w>oZreDt`A@Rc->qvWD(-9j{eK@;%hGqbT17(qe5`sk-(8NQ6G>Cu zYMr9==HvMW1J}z;z&e;Z{(exkyq~X!$JTLNaDT4hj`y~0Hj0~uwQhe`xzham``q=o z*tzXj_X}^ZF<9AeP`%rz1bsfTuKN!=G}o7B@`4w3=0CU1Iwe}LeB_hpFOE)Sitb$7 z_WN$gZ)Ch##3#^vei&P7*ra(kzQ{d|pHUq6yaEB$Liz~nND2xHr*H>Yugj1hrt18o zFvFfuy@bH^OD@Lf)v@(x#pPl(iX)=n|D)-=!>RuNH~zL2a*n-1Cq*)|C8R?tJICJ2 z&fdF3$4>SPkRnmIWCMx1IGcRdOp)HhRO2S5tLz?pq=* zZ1~6apiLM=Wk8`O=PK4t!4{O5Sm^LFY&Bf0W7A6Wo>|`IAV9zDlrk)T47PIBtWKD$ ztl4J!yTZmMYsQj6zw0 z43D-#+(5)gAbFCOmaMF$Nt;*wmjM*RF6VQ+yR05_-NI^73!$)VVBeS3M8>6@rUa(+ zN_-LZH%}b8J9i=A%VO(;ekHfdS7aG(wmG1AsPE?(P&nis`0*+KDIN@v9i9g7n#;}S zE&tioT?tXM-f+qaI$kP@mvtW($|Y{KC2V#6yRZNMUVv62PHTcsT7+gb)=|uqLoX8k zHf?qR_52;XkByb*?V%yCE;T*tcU~7KE@x4b`Jm{U9bLov185XJI@csmtq6U&KE*A@iPM2nmjsrrhmV$fkLI1T} zwt9eSZ_~he>u}}jW55V(=eWLlaPl~|QHq5sJ&zaKxkXRHjZMpaE6h$vPLncj0dWrJ zppmsoNHtpc59Z6)Vq)z|MbxcVyST`qpOnFP6O`tE(>QT2w35hql=^T)HH@;ZzC+ncuy9*Z(vTaQC(cF0oQNNFP$p$LOAydly@ zh@M1XH#n$`j<%{czI!si2SeNVw%1C=q>s?BvX=;ymy}TYGPBZ-M`CZMidjvS%|L6* z3PJyw>Tg6VwVNctG}Y?e2CyQ1!~OZ#h`RGYIaS?ZQB^*XxID9{q6B-O*|8W#bS{{k zyVp$_8}38sup37(MWkqhiyzx}FpW}=`8Lhk2yy0cy}+`3CgjxMr4f}BcOb^Dbr5xT z!{9fEh3P!_62g@$*Y+Ceq!0$`G>}UXWvfOj>Khr<#ZuUrq6Dclo0RG}%^o;c>Sd&0 zVVcUckV_@hT1=qfo^fi_3SEtRX=T00xd7DVhlKFX<$J*pN>h`>46Th))+Tv@QbdKL zsh*JE;l$qJCFEpYu4lZ`7k07jbs-B+w0JtK{SA66l=Q-m(*FJYgNJBkF|;x#;QwBM zP&9C`c2IqS457eE&l#?ll(+1ThH8GG+hEvw^f8o^a5HTF2FY1M1d)6O5eyE2R62wv z4|;YJ_3y+Dinxd95z`EP!8wmP3kh-`?w9D_oCWHQ?&ZZ|5bQE<3rUya`ui8KD<@q%R9}r61 zJnC4-FNQq$6HX0OVg_7nvE7T?{@XV`G*2A!aVSS0l43LFD-(*u0e8rw?6ZdY|G|k0IP(RG+m^QnB|| z`GgNRsac&Gmv2LNn|gt4;>017fUAEpG!ND+nshU6gS5||4@=B6>MIHgHiRA@C!1W1 z=Jh7ut-OT*1YKZ{&!RvfZ-vemsQe)^vqH4Z4WZG_^iNEYJtL}5K196$NraVw^v#Hz zLQPEVXog&iCjckparCCAJ*@1OZy9 zvJ&c(kg9@d9P=G`;$mRZOBE8tQ?T2-k|LG(H0fmn-e}H7oV^~`<=X_;2T#z&nP7|G z!qJXG9)|+D@TZOVR&&r;2Xd;Qj{C_yqaaI3mZsg4A`nesA=2yp<#)N=e+ujln@x+& zz|ZZn+5?_G`z>(br;5B#LR59Lg6D7MYmjGqSOI&W7FVC?i5V!IKOJoLTj&UvjL7AQ zkOEv6>{=1{<|5)0(LlYYrlDj-!G%@W;$d+Snj;z6Sm+ILjTj`*1O2*l^#%l^r|;i2 z5+i!gT8O0pRntVA0%6m*S?(Lek5FH)21gLcTOpB31q2nZg_FXCx}Id=$c;5?w29t3 zKS7y)Mbd>oN7=8bBphFZGgA`qxT2_{fVrgJ-mA#SQ3AY0PvfwT850X7{38=A_t{p@ z+S)48nJp7VP&@htd<^)_FW2O?yQ^fKQVsSnn!C9FCR#fh4w@5aM}``hdl*NIyhIyo86Vs;Ov@zON?XTnOihG5)}XwJUjT zfTAxF((Ejy{i!-8JL*`2RkW~Fz=Fw?G}whH(%3_i4NVU3%)1wC@eLmTfxyfRjlNC< zdn98;Av+iis_Z!tR)_UCd0FpU1g)Lp@8n;HkH62iWdU7z@N-Pd9u-8Nj3yq^BA=xt z(y*{M{y^C@coW5_ShTewi>Hf>7z{=Ks>Z&UEw&5hwt%p%=C3M%4S)ArERryny|FGE z;CYDQPn3liWV#B;5oec74_mJyG)Pe}bCsK*=M+020UUww@M{Dx+CXe7p8E>*#fe-4 zZr1N`X1k*Ds7CH&2G?@_DkG2@b7xV6gp(-$2g||t9cFvUh#v4Meb%Nk_$VCDVwoK( zs`~EBTjHQC>lPCpx?0BuN6>xoNCL&1j8lqUPD~66Iy;V?^P?_5XW|_Rr=scb`G!LN z1)es#m%TKfKB`*LHVP(1kW_s;-7B>#)j1t9HoeR6EIt1=)gCvu2?m3a3*4u&x?Spx zaheNw1pi+$XXM(^Nx;=>!(|V+C7hBuQ$7|?*6`6{!*WPf>gx%{9(3+|4AHo zPo9>gMLf3IXXy{9&y|%ub%Yf?wkUbnvK4UAx&dMoc11-I-3`y){o{1Ckbmq^=&(O` z^vgLvD7f7GwVxndtIfyW;#@KY`YI=T0Xt;EOo+|l%kei*PV;yx5cCEAp6mgW)_tcy zYe}ZE5`l0uJgUY37{mY{_j)Xvx10Lp93z7V*29MNf)L^zwl^&v_{=HrhN;==l8g~7 z;Vbu$7HruzzM^mgFKg5MCu6GOa)+v#b+dWLiczttvzLN`Le6)!T&W#?niIiGrQPX$ zE59|A^M@TsWqXoU{s4d&l$4ULf+O)rq{%DNAJGka8irib+)d%gSd z(BmzR+X&h`Ug@9X&G@fPWSd`rL+^$PAYycV+Y%5EV3+bpp?Zu>bbUD`c50Px&E9za zLm`{9X?ft}q|nz@hf@#Kss9B+Pe^ri=}!{Wz;yi z^UYA*HjPl@XJ3>nM%SUQFZD-w;rusbz#MVK!O4t(E2iNf36yaN`((WgIw=kEI{aI& z6q@3lFsAJ>m=z9`^70ua067&h+<5@wX4o&I76MeKC*tAqx_D^etsx64c8vGL8Iksr1u6Ka2}8r^dC9O!a)d zNO|OcMhcuDQ2i!<`AzyU@=FiP zqa=u&74hah8g>U_v5au-uj*59+xqqprP{=<@ZUU=kd>tM1GD|A`sJ}x5jK1!g!pFs z!x!(}7bSJpDczEuC%r7WY56LtWIZLEV2S9PUIj$6df%F8LI#iILf~}1uCHe%&q+!B z!GrKJf`bsc@(`&_3wtd>oKnI?gI4~Y(av;NHeR0Is4e9dQ@)HQ`~x#8T5Lo(3R*I1 zO<@pP!BK6GU{3pi>HK`R{NgFyZ;qyjpwpnURH?Ia1t)kJ1V*M)_5RP8eO}~mN62A)KWdLdQ6QnM7_sDKDd>c?^^>vBeYPF`C2%xu*m7*4Ap$dbL%}mzteM$E|+O6sd&b^Sg6A9{7i|2XL+eq z@ha}V7ykms?T=@vWSLZ0#b1NS#U!BZ0+(Ut7&{Z?J12~>bkL@MmA^koU4VFg?m>wL z&)M`?pslCpqv?;Ls-}VXPGB&m#bj~iSA~NxC&!O4D%R%1rRN7qO>~SQZ#i0a91E&F z7mk2uJB3emcw+T%^wpH(*VS+!`Hy0rRqt=;&gq+)Qr{@Fdmo2y)|>(Ti?!SwerXd+ zEJ?aL&3i-YzB8N7JCCfy-@w{3{T!#j7nHGj(p?RuD2^<)x1T%R?8UAjSoWT%BRx02 z+Jb1fgh^1Y$KlyBZbA8S1Oz;XV{X{4%$uIM1&57IKSsP$+{M~L|onQ2^FS#4TrQ9yY z&CQMR{~HdZPgjp&XHnmc5e{HhkaSsC}roNr&Dy1#aCLTh@YRc~ZsEIqbG4a%(( zfdxSm5}{TgoL@0E<)fo84cM)3A zqM;YlAwZ+Cq^ZsW8;zc1tZq2fF%*{mQJ^H-S-Ml8)6186#?{!gxFgu@$q_KM;#9p< zRaB6g4E{&Cm#5st_Qi>I#2?ple>%HQ&GLgt<=3qN!$;drEkWLZQdcuJt2^SE_udh-_3TCF zNX();)l)f|&S>m{}TL1hbt3hQLqXXOb zPcK1VL~u03>B@U`*kfSEw|B*=7!~DB9A3vVxPCr#~>n+gL)#)4y$ckr% z!-p$0`2MC$0Dp?}Q1-M8A}O=2EaLgn5U>gAAnblU#ZKxsfPc_JUN2Vq>1e4N zJ3aKA7Pxj%G5JHHO^u#`LQF62D3HgIqEt&rocn88eN=D(+iuApzL~XBTIqa($k~J2 z2>;8bM>)ky#$37Gd+!ECYj9VF{2OmZNV1*gjiwMQ=5DYyGvspZqaJTe*iHI(!fGk0 z3kKV=PZcWl8rQoX-%WI-!)LfrTBk6hqEdqgg&_M`D{#LN^d z8E6=;;}cUjXHPDSu9ccU`hn_Q`MDn6y1^z({+9oS@YvK}F>= zs7AOOtwa<|{X5!=T2Mfs>_CkuMSlc#)@8Ug(_}xEpIIFjsUslh)iA?&t!0Q~Uy1_x zqFNw0wbTm;?deWmX=&Y=*>(osR%M$9g>VNuO{@jVx)zux$yl@s}Ndg$rA74l9Mhdbn>cJrE z>H#L?!0iUW>gA5TZnZKFEUPgI5>B&c+c#rH_VT;lng<^I=cij{BdH{xb_cTOdx zWdiI$#;9k!^@Cf@hqFM#b(*VdF}j0kaz0t;j1+9#i9wIsAUiZ$l3z|xk!7W%rG53; zQbV2ZPd79<;@>VcYFY~lS1F%wAAl9ka@NE zz_-Bu6ED0s^i=f?a1kC=SBr?S=GPH=AJ%YW$^~r>TNV(cc$-DjV_r>v+1YvAEG;ao z$*+FjK4>@BNe~F1zK2wC^F`o5^IhKrwZ6-Pm#*1*f6B7-fQtgRfoqs4>*ahXkfu;$ zaNfpWmwb153O@r^{AuHD?(y=VVX(>lc=wikhFj4=`){*+k7(iB>R$nr1-vh!d@Zh4 zKw&%`F8=+SGr(Zs-~P<+))R=UWf(L!FU~tm2iU5z(M5Q%E16T&SlH6LlJ1roO>n zj!9f@wB?0rbsF014r_hjsxzvyJUzUQpFOaF`K&Mfbh8HL=#yP=QwlS9hH|s37VZpp zxAI+yG0ciu{L&x}sxa!?w;EGlrk2v7P;bmsp2{9o)g-#!a_ke@%S&|APx@9)fPM>k z6Ct`#Y9f%n4Q*VmK(P6Le7(GhguxMRnshY=v|w6LD4N9MkN7vp?;`iu1y-S;l7{<^JGDbEp06*{Wab z3(`eQ72tJxmOsRQ`zRN*;|lbC$9#mA6*N^lAe8P|Z(g!m#!vk?H*eVovQ4|EsXp?q z!pG{g1KB`RGbC!f(eLryw^(I~OKaqpwAEzIqLTe}d%3~A(Br*xlff?tc=!vZn>P>u zLcNup(_vTI|4?=?I|V_dgY*){$LQB(9y$5EDY!@e{$`C_^8yI!{oMrB>M*bXx>(`39THN1ut3f_XtS zpR0rNCG^QG2f9v4HtM>R5qb3+*=wqA_t*DizN7ZZS`Os&?ak34h+_$$MZ1Lggt3YZcC1ijrAZ%s7i?3H! z=HLPZC)$2kLQ#mA#gBJEX7}~uz{&|5;x%P*r{;@uU@+Qv`cu!+SP2>CRnPPF@`67u zQigXlWw>BqP>|0^Uvi+2fzE&Yi@7Vk)0m2t0-`@^`1EwmYR88xn6 zvzE?m%HX+jv~Fd~8eFIo;!0!duwv<Uq4$J-A!UyfQgGR&NXztrT12^}si^PJ7ynwy=PK;%C1lGt%uIX#l$=cLokfP2# zt8&|nv3HyTH-W<@3CR0$c=7z+knnwBR&fImxPwzT3dw`@;N9%U3Tws?YO%BF7BFW?REfXeDOPh9KWdp%Bb zx=THi2^s-1vOpap@MMlDzWSgZla}(T&LDQ?RNF6yiaq8Z3d(2g*BwWn_S^l|k8_t= zv;J2dw3N-AQH^696g1KIKRj;90?Jq>Pk03XAaI~;)t-l`F7bAyP$aJay6tMcwPKA% zCi#sNn-|fq5+kFna%uj>j1-zE=lup-zE(9F-8mp&;-!hBiV*G*Qj#5X8>*^FlGH^F zR$`SF(A||CE=IQXur@93XTu4ps1ZLQmrtTraP1MdtDN3M!Jl4Ix{*VKmV92u>kfa@ zuxo{Y@X5QZnU>$%L_ix&3VsoHk9Ij~aQr2tX4a+ff|7!zFGE9DyYq3MktYtw4S@3* z0jR|$VxymqS>UfSXEn;lxD7UbJ3CwL?1N+YFarDZMT%!*0d2H1OL=dXVI35 z*)9BYI6dkRN%!3ac1N-|?21y?2M>px^9Wlteskw<2<;yylF--+C>9>xqVCRCEp# zBtjq**I#XfLNl2`p>~xTe1$LwMIZM?zKf|)^#fPo4MdpN05juD{g`6qI9zHZ6Xfy< zlg;DG`{dr!1gd{+L+4?IA8tTu&k={;DuhikYpfFR+H@9g@DFL*+58F3629r>rd9vu zTP?QHAPcr&x$lxa2PWa|0ai#k5_>iJpPvcAVhu@hH(jOSBp?+KjIjC-Zj~|`SKTq;Mu`)QIT)ft**4W z)9N{n=&;Mppv!{Fhk_x(&}-(o3Es5sgb81 z@9_W$gH!jnZmO2my90x}IhN#ExD4m3`jyv<#8_VA!fsvnx$)$~@m>L_B>+7*ZDIXj zHIHdIb?X|xNUR5evN7tGgk}9ZpmqIL30-6!nd6xS+xP0JLjpa+2X4!|iR!bL=I=Fl z6|n|5j7Z@=UV8fT@wpZFH4Zp~e~p7klL zhZbt6oBisB8(6P1rT&O=QdjvbC*#)$#N^W<(`#hy=1$;w%}oD?n)EoGZAdw8TbKs- zclE~0hxeZLK~G1OxlJwp(d6 zIn!V2KV@dM8c-Y|DdfFD`cV{WW&4d)Y7+kYNqVK1X%P;;TYds_RT&&`JUTn4rjG~> zU*Uo`?R_HyCW^;$0TlAgw(s9-+Pb>#Qq-}b7r)G;-O3re)-<(#Ap2nNDp;M8wLffV za`NNSn$gqjWxw&q=bcc5+8Gb;T@}Mt+*6VD@YyIo;)iR z$MwXBiQqk-NFOVAnRQOy^6|lehuk*uQ$7b*ho;oge^fxBdf->?ByKo1<6I!tb&_aO zcRHG_E5Of}^4`$itt$6tp{!d!5dD+c&s^(`?%hk~%5@6d69oO*9O}}RsuHhmJ#jUg z`{ybw*!0eyu*<^8)qnlEyM;NA2QO7M2@1=)pc(*4N< zuD4`Hib!+>v^J7d?b+nUJLu+Qv~B(;v!*tQ%<47*e&zP_k$EbJkww%>3CkPS)kuNt zsJ-@4SrJ!)7_3r}G)KsF5Alg9h4X~mK;*rqZdOi0XE30DXs~e+A3~Jh`!YiJhMzz8 zE1zOkEYmD!YS#xEUq7oSGA=#!l^+Jv;0+|PgDeu5U#|m~LHXFaNPK!kXO1TGwJ?x= z4EZLH3b!G)La^GBXTjicdA_i4Tb~3jwyQ2|<=nY4ctfvOg2{JjH>mn#ye?i?2Rzu~ zXR+G4D|^H@YLQ)GyLb)3J7Jgf((Nuca9(m%;%6%e%oHKwXNWf0TZr$P#uM=Gh`=q_|w4U{V74mhl0f9!8{j7Z1 ztql{jd$iRllEX7plAK=zW3@VopF2+OASQ=CT!WIk`ZA6!V8r!Kh2YZ}Wf?I-HIWDF z6fi5oD+#-OnGamb0!9maR#QRgPT)%E*xq!ayX2soGIOxjvqs%dPy!8v4Gw;QHv3eP zBSjTVu193{>AP;Y@&KWQ#qFH`La|qSw8ca|76VvZa$@jcP{2|)8Hd6K=9gU!7s`rO zkpyak2XjKzK3l)2<3Hh@f-dWl%SyBt%n^hyA+$2kzo5J>A&Kng!^3mOkzQn^LUaD7 zZJm+o=jZQE%cm|4TMlkPv2sDK9yNjct+=i(Z?G`>J5g|GL{6 zFE<Z-7xiJ^5Fd(nA9F%)~f$)%Mqd=av$+S(jVxO6}z82g(= zy1lTIoRpL#+jL}=mjC*W&(4e|1MxTA7Vk?SJ>UK=;n|SsrPiMz7j!Yy89z|pnuPo` zQ|iPtw>{s4S5Z-mq1+_f{`*WW3uAip=Wj2-3l&Y<)kNgQQPHxpd;f9kv?z*S0iAf| z8QzxWf!XP%4Dfpoc3d~|+dSR^aXk*>?Nrmul6>#>tOhX3CF0q>$_aE_e~WcJ8TL)f2L_KGH{Bc0{-ML{ z>Et<6(ejV1bWn(Ujijv~b9jp+`q;pJyXph>)AY*~F6V{Lf}i8#M~obS;Dw2Lst5_T zc&?ot@44OO@ZKRw;_Dq(T-LI6b#OH^3#JrFAJ)|YGH}DWCX859ucxX+(z(C2wRMcW zsa&VnI3<16^ZsDd$>h+`hyHY|LEg8@%F1_JO+NnqjiQow5KjKP79i4gkaz$L-ziol zH4i^&(j`U`K?V<=en39=7yug~y)v}j6yu)ET#X+d;GYBPW>~{sKf({?^~#<71i1UX z#55Lr>C`RvhEs7log(ePlU@no;l640U76FvD)@H{N{>19$-voyl0GG zQ!(fa)=idLXI*ZB+LaoHV!O>S@T0~3k`W{`SNQ#O){9Gj0WDf?rz1$xZKbbOqY%qn zRJl^NzBLE7vf1m0p7%2|BEb7F=(w~cEi>~vJO7f8Kw5U}J)_P5X@w4xG3~_9gz`n9 zvOU@(t|LrD?38alCO4(#-}zgJm8LDS`9Xqw@v8`H{Xf>_Z}Q;Kf zfC(1Mwk+&dBcvkNdbPO{QpyloAh|>llbZc1;&ni(Wc6SXO?SbAN>)B)$V>mue!vg& zlD+lUev(Czq_Axj-+iymMmL{aS|ZL$2>H`%rpB;M==0wy8PIp*S}+BFRgA^)va(-i z9veIoqD);7RZWjp_iHNq4imnWO60sT8r^B(;_p9s-)rTpUaer}m4s_DD+@GV3ZOzB zi}|gj4p%#-|L_5=^PmenWN}K6_5*mHN`SByw5Er;w~M{17A0(JLh%09h7jeqZ1j5_ zN)hh~mUJJ@5gwMFD#||uW|EKz75olg@P90*(ooCM@!V5tx(E`Yn^<`yQquuVUZF`R z>_Gr4LQ9&X__ayjaQ;*Ac>~_I8YsXaKbKk7O_BV0#Y9muv)`F+pcagkv5N1xH)3~y zV4FQ)A9Fbvq=@}R0)7)bNRSsZz*3j&ugG@uPxTp=CcyO zW}T(CI49qkp9=E+(@rhdxSAd7^wric;5u%=_^c=S@N3C^y{Qi5gP~>(niI-*=4M1Y zvp8{5nADO$EZorkYaAXS!O>Wt$M-5tKxAiX>$=;3>G5aPfPC(S=Z@+sYO_95f+*g^ z+IFA{PPolEf}_}@7<-%1N+5Kd7A&y7EbB&uwmmI(Sslu|%ON}ESVzVq$3haK|q)&Q*XuG4(zwrlpPdtKE$(CNscP`_6tg6c$c(bD01tZ#>ww3pfa&p1qaBNnXY0CZ(>XHtU8n zj(`4~Xv7$C@x!{sZ*{1%K5ws6OStcYNx3dhi~|VOjh;4Z@Fnhk9<~uRk-KnDdZ}wQ zD2aQsfZlT)%kKw#BnftJPRe$f^2qMKHqfhZ96Qjs*;zie$2VBk@cVW4w{M0{{@%_u z6~p!SS}L~p@t4}D07vaky5wieuIAgM$qlcI)}w@x0t?4qTbh+c@#*SIq4|BbOhJ9*%z-?M3GjV#BB#^WSbr?jjrb{0AE`3(_nuuNnv50a6SFuh`^ zlJJ}tahoZ8QBSgWZyFcprdBNt*;_zG9kywkvpyRDzk}O6_b<}3yG^m@<~A2_QbYkJ zXq|dJzOuSr{iGR}@6k8gZ-Ta`P^y-LpCTJ-xFdD7GOfDH-o<7=6DmBDMZ8?duynf}2yX-afx3{&mt*}FhjSvUdFzEh70mKA!1E{NiZaxkm zhj^$7yN@k4T|tMvMFDTrRbdi#J z{W$%k&}}eqK}$SX-Y=1|RI9xEE~LSCNX=Z$t#(9!dA^&9taxNi- zRvNn+gW_i#x1KE6Lh=i4P=mPBo#baXiJm|C&}S^0n7?{9$r9|U2TBIt@I-j3IYi|s zN15l;Y)0%kx`6PZBN;lJNjHyJkjCJ#N(S@J2iC_bB??HjoBsK^0dx?jCIr7h*@pB* zEU4-$X0t=j3FW19P#VOXoLVDT<~tobuV?&#;pqjD;4E!P4GAl4+&yM1Jw*)Od!m1;Ut=X-00(J*NzJUEe;54ukQ;Joh*Dl4E7k9ZZ?*=xLqh)Q zu~P1cot)p<+dWRXPXV7-L`VoNbWmtAA6PJKwvrq!!@B%?4g*Nr4wFTRFb@a7gt5(el{XSez2j08eL}1o;F`4(`Dp zK0;s>lR-UVS;GY*!0uRhc?3FcF5=Zb+46o6c6-6)RUhsd6&1xM?f=5v{quw&c1%}J z@)(rE`O7y6QMx8G*_SnV0@>8?dx4YI2!3!tKu{1P70~9x7|)$kIzq zv;=o&$uI+;wDaue6GZK6lK1Wk5T@Zg{|7K1gqJ!TE&2VU_?kXAurPb|+78lLk6hL| zW{s7-CniR(!Q6V+sR?l2|J4<>hUsVFI#|KqnxpabKX6JYdw3-+t6%q90d>N-!N%(c z%s-6T-*%Q7);-uh#_%UU8^D3u4mqjA9)N$V#)o4^{~mNrHZ>G?TKt}GW~B&K$aO3F zS=i!!c64&$TRcPF{-57HhfT>7Wj4kbqaY_b#UcSP=wHl-I~{y&%IX~#g0{{!A9w*( z+jxwPE9YRT)3@nj;4WBR(SI($THIaej3eY6Ab=qt-Y_(u&wdff`*1Rt;l6%<+Bm%M};DwO)MHjtTnGM#2LB|yDlpZTlZ2_o$zZb@_L`<#u zWOeeyH&2Ue;db4wOv^=D?tRa{UoOiUn(!Q1$KIuthtnc+#`?zm3|D=!>e{}U)Ojst zg*14Xy3J)uu&$`fJ(zV6zdV^5ths;P@GAKKNGlIB_x>~A3}D?G6K4RD|I?v)YSk0t zy#PLGlhQ;2o>DiAPPlSEugG0jNZ_6DZKxPq01NJo2#b!T*=Z|`An#*=ww|C!>>)~B z%5)7vOO+fG6p;t=MO-BL1a`GISBTu~Iqv-FyJ+EM9uoOaT`b9wZfYn+;w3cCFb(`p z4dkt^!p93;eG%SG!X7Mnt=-x6E%L?Xz+~$@R7ve%)=k93Jf&SsMYn)}kBkYHmzMI2 z`64^m2)q5c$=^iNHazY8u*@EOd^g!|#&MGn66g-MsgTj;qk9~7yAeHHGPPlp)&Q0# zSuRXrYfV^3HVOc4e*9QG-`4l=>{LIAzns}pRqXcG15L3Q3T$d&#KEjj`GfYbU$ut( zcS)?`DJ|uhWCHk4oz_6*n&c_1XDQG5-QyINyehzTH4;kf9MJ+&(Nj!4f`DJ*5Exy>78)UW#} zk|PlUba$)dRyHMPjJ9IDj7S%ZP*8z=z%K@!`ap)3gb(`4Pbwd@>jcWZsKG14s96bV zn-+1TB})7;J$*a_VwnbN;n)U^NQRi06I1-}ht$ zmBZ1Epdo8o3xk%Y@6LvvZnI}($678)6-EfX9e6|_rV;uUidupETmRft!0>8A?<;u; zcg)`GIsci8TswRqKj2P;D~1A!FgdKKYV1RET+_VP6q z`Ulg^G_-PFCabsz(aa+W_KU@!y}teZKhL;L@4Kz2)Zg=5>W*#@AIrew&#A|Py#I!9 zx5(AuCd1wNAAtR}rD@Y_!4vbst}v09M!Yy9imLy8O;;B`#3xP}^6_rYB-PDiT)LMd zwL^uyt9rKH-~Dl)G1Y;x@^aIQeZuPS5=Oy|5=OzM3k>c>Jq8Cdd-M5k$ruUhQS|B$OZAeH694U; z`)nzn&_~c1y&`LghbwMhz1%V_=`-P-9Y_Q2T14YWW%U`TqF0 zUYavt2>y({w0rexqh}ev#~0c5!A+LeX|D0*UI?|UsI+v|WXhA_{ZL$UOLMJk^=GAy zx1A;*RGc1wwhq_Jb2$*3tQtL;JejN({9k$x@R(&?2JVAO(iiIxAv+l?Md0MuJAyT=$S7cPv=cdJUm`}jNB~7c{Z_yW zYgp?vcQ}6CG-9!>Q^ct`XzkaIrJN0TM0)^kr`YG(eD{F_CFM1v1{XPD?xu;n&ODrn zx2KDXi&=%;xO*l0IOjg#BuD{%57-?+gwd!G5!qY@`7Wv841Rd%8UfmR-$fTya<^Va zLMMc?TbZCk_9gMbW< z!FJ1Zz%#Bjf0HtR@eu^-HbYcR(T~RDBC69;VcXhYj$TMt1dX>v1o4xhkPc)<h)@&a*Lti>#6Ft~%BiZY50hSIm0%-Ybfs0uC?i8Hf@QZF$z3R0 z-;zRiGu+sFkYQJXTPHY!Ed@G*1Nt@t5%-N|anLMSHXQN8TQUsI& zyn#%Vvm{v?5g zP6}v)mS9-}dWq0l%~8LJZl!D!vbm0RrbNLW(oYi!3m23B5fLi7YDQS7U{Uyn=EbbE z!-UMi)TJCmF6dyexl*X*BexEW`OnA7Fcl?aD3Cqz!e=GX6&^8J5+O+#z1 z^!PZmZdN)qe^sM(HquK}Sjq+8WXi(E_BQ%{=HY3||sP=3rHz3|ITuHOH6cZDfH)(}|m$ja|H zO@6jr9K8e(@BSJ&AmIfp&M+$a(00#@P>aDuBgMX)}i_GPi~%;)L_HFDWh8BSI`M!a@lRbnqrWaf0HO4BygKSlm`ed zc6-`s`RX!mpvjEEt_(X;aZgy-WpKtX>~R>%3qJgJs1J;P;E;#pQ?0EO?mVGUx=Gn? zUsiuJ0%3@5?Eax^s*}ib4>9Dvhu!TyzqIi7_TGxQA?UiY`%eMznhWysbgX4y?2II- zpS~qa4eCMeoSea`HQmFnO!Ie;wCBkTqCn0wo0pSJzJ!+kXDzw}-*w9FH{To=_q+1< zYm*O+M?K*n+dGV#yGqEKXwbw}8E6OO>0;_2HydXdORd2MH|BD4ch@ywBZP18nKtc+ z#b&b#7!>jvSwb5G~pigu+Hp(9+yhojJgkwz2~(Ef>9}{gZ|BlS@Eb z-{sz-* ztc_?y%@xF&Pmi0|sVZK(c%(G_E>xwR*1tlH32=0AsnilfE`7ej8FmA)6@^`KAfN-^ zQ~$wqNgl!&$0JSGJ&}#XiqPxFrURow)xAirZH9npus4IViVF~!`4?id_(W)v(Bv|G zeLh+DafL7g%ghiH5^(zNI2h*GX=E1zbpuY2bn@9OO4FTy7*0f90hI7-#&y+td??(1D?XL9v*&9!I{74TV%erT30yLyXp5JMk_&cNmq z6xrP>OYF`2_8$5a({z-2!n}X%0`Xo6{=HkPU{pwj!@3?1G2@JK?Nia5Vf``2V?}Ge zet9#FrHmpwM;Dm7QlKL}Xyy0o!DQ^2n({<_bLuv1|&D+;d>JNpUF;ESWh zXzRo~!T z%cjdyx$iE3-Mc48NojWcH&xd}>Z0X*QV`;arSii?-NEvfA&^ki24Mw=9IbG=#Q(n+ zAg&rh?}6<&TS;f=QFk;o0|g1|R*}Toy1kPCKY!E7T5O|R{Bj!hg=4^&Si>QQue-ZD zox`3?(E0|>cV_l`!Jx2P`17sCh%4>$E4lc0=Hr?a^QFV(U}e(aAV%&`^cbO)Ix8l9 z&v)tYF&P=@hZq3?K3RO*;)dt_zkHG8!B6w5yoUdwXje8cWExJUdd8)4_(}Y(OnE2j zc8u>cFj)5v+`oPMc6;^}=s+iT)~4}vGZx4X_AY=hLy8^yI~y=FoBQZd``vmnA-Clr zP~I9YfwA?PBm!SB`gL__siTS7f0!x0uKnQPpw~K9EWJPPun`UO+wz}^ah&|TnvTEF zHVauET{bDlgFT&t*Q94aCYtRHKw61^wZ)4y#LgbdGm%E#1u0#t*`V_pQPrkHB$t2^ zFj?Sd{7*YNNY&G$#0sos4fKtDE;_0gI`N~aR5uI^4I`DVVtqFTob)U+N5M;LsB_FM znNbfiLc@rEU+!-Qnex$pzxz^rt3AW?ju3(T9aQ=_~45C$^3Bh!9P^+c_`5L`+C z;z5x^4OqsV1axw@7og9;;lXtMLX^p4WWCF~j4fx*^;)UyETF|=dCW8gWBSE=XQo0B zAYyNQ>zJRP7o5fe-kuT~1hzpc#KObF!)Fz^h71YbCv>$59pR|`&CSd{F8ghG;vREn zrKMxmJwV;r;*@?8s!M{Jiu!yQ_$0LjN)H&;ix0MB&d)nLNpR1_`!cNcO~h*?V+=E2 zqQscQ9Arin-`?TMcVu{>UmGwO1AroPp1tRNd_#JADVGEI7C?Qke)SQFY_j>R!#dvV z=LKxMwsQ}}$v+IVfp`8~0G^tGfl*vrf<|-bC49oKJucuBKjZvI%|4{sT3tYZKM==p z(Kz9tG;&YGI!(8DgcU#C=(5;FM79}|^XF`$j$wr{D{w*3ugRodva9ca4M@)cr>_7u zaxs?-LT5OMr>mdMJ5}>pUPGZiQ*pxf!|M;t5PAW!xIQ4-4P~Mp< zymh;^$nMWw8{T0pu4$)QW6QBo<9Zly-LyWacx@csZe2KMYb*0t8TAl1(PxuVAbJ}=)fVqv=w z3O`HWrqR{(?~b6r(2-CH17#VZK_G+pI>bxDM-t4=D$MF}u;RA%?;Eyjjs{maT8jgE z)>HU%W&c?%ws_q)!bO0;Fog-jj}M3ljy4D}H~GC73p%jQ#q zD$3Bm-o?0#N=@?(4Rr+5VPI;M_A#Ps_!}3r2nUBl!>ptELdSJdEE08fRUGq_Jo~|w zIr`cmk*3UY78QgE+$bLnO}gOSW<-*cz;BrWqhJZFW>5cLb27WR^{q&bhxd^hxWP=2 zgasUnSY9&;AF_`?bk?qC5DbL675l%wVWPod0e$WPWbzHqR9{l%+F5K9G(R8tC`d8( z->Fx)8ZEo%NK9#H27e3mWla)SsP~2S!$laeKD5~Akb=)bqRI1*w1Q(k?nE}|a;8nK zvtReTw#NY?j$^|5u-q-avp-3lJ|dfBgCLZlD@Lo(1v^dOdkeXAek{ao4x;#Gps-$_Ra{!rE-_?XPuL9lpWkk~@iL0|T=~8G&yB*PbN^exa7$q;%M{TXSg`V+ z6fu2gz5_0=*;c?9%&7{PZxWHdI$R8i#LNdW#Vi?^LoyWso)&J4xE^T@Xm z?)Mtla_uYbcx_LTBs;@gtk-nvC&azZWoxFQ+M!TfG-*PDp|BHLw?tBV`*owuP{2p# zmcC>)Y<66wq?PC|T**H{xAo17GF_FYAFZbLNQZd1Imi9(+H6T4`0n(bBj1)c_m8M7A<=AT_XS|E)7e;) zn6G+&!ePX-?~;95H@D{L{}4%T0Ru>rfAIUrUN{RqwqahKpf7>*{K4y*f4_tu_2+`Uwf2W>!;m*$ev-&w^Y$ z!r)mMgbR`t)CGGwrO(#6W8}OfUq$PyQ&`(zuKzN$)i*aw7*(OC*P^ZTJ%=PkqGFxD zuAScw_ilCdHFw?fTeyfkw`hHY4I!TZy8LYAr{g%`k5Z;yI zISEqk(j0~>nsM=AYj~gyqWVHaTRmyEVP&)VNL;eVoLbpug^m?NR~ZBXMv*X z)0}_u%{!syig*wXQ#hL3doQ=M|7BE>?+z9XrF}K$!{_05-XJxN^5;u9Mpp-igU&O9 z@;Tl_qZ9?JgnvmOHFF`E)!$APHX7VX%Jy6O7}``~Js%#alhEhmYgmk);D6tnDPHsO zi$Pg(OxyU{>+deA^39_yC-;dbQy78A9|L1Ov?94q|Mf?}nDSl5Ct0JH*24(-UkV7+ zFNIX}B1bh90O(W2(m?H2Q9~?(_g&1x)3o+ z`v%_4^T#)b$KCr{;N*oU-U{b{kSv3#s7JbECeBp%OdI^Z8gT?&(F93}i4A{x>wPxT zcF_We+2f%Ydc!P1YNFgB)@a(!WBE>!#0b6v1=joOTP2sm}%gC z3Nh+z>Yf4~|ARPZFfgJMKZZn)&uIWnzH}%SYTz%9~@bBzEnJj?0WyfYU+o! z^Gp44lf!OmQZB!pcdz_MR-a$o11US57k&s3&20mbtfLiuR``4UEP2Z&1qB6ZFAQiL zlLu><0A}7+a9qmgh%LHKh_0A;xHl%VJ0&hBz$eSl*kC)|he76zCArm)mXn7aV{650 zKZ-Zxm#?}6N=iy>Erq>&{(S2kg2 z=g@Txxb6{0FY6!wOpmQ7E$8g#2{HedpUkWzL^<`vaifDM$kNR0&uG4OneN7EiF!pv zMJo46o#VKJa7F5DH7Kq~zc)|w!q4@uj-}()WK{z6UBZ2kWi(>R`y{IaD6kjzB*<_) zt+w{T8W27aGe&cy%nVI89MAbKU4hJ@$X45 z9Kbn0iN;9}2@1$}+KvFD;(Tf<7N*n7pRUssz&Zw=CN3h_mhxLy+F>8dGkC=>vzc9gO4id?$?aE%rLJ*+7tSzu*18@JEq>b%zQa0Q`$A_-%k1 zMPonbNP@l1eE00E>%%Tg>t}SnR&+Q;krqd?bKBl3_%hFx8_MTZovwcWeyKfl{k&-; zri00zvlnJ&jjW5$9g6;>PBZUghypfHm?)aJW-JNqS@#eg*NIprOt}m4Ss&|S4NRI> zQc^yS%S-r213ZO&>1&AhC*)xCm@Hz;siM_@C$xnT4}iS@dhrLNKocW!EO&?663g)C z#Uxgx+OWbsXa<20tR1sET75Us?P|o$3c2k7_UU}HWW@Klb+fdB=;O_4gNJL&-PGBn zkivjlgP>%?jNhX!7R>A!LH3uKtrSkuvJlqiBhl%F9lWzI=q(pbEX@M~0`jE*Q^N|G z7(BV#T_#SL&Rz?IjR7Oo`1i*5f@@1Tbk>t1@`s1-9J)S7Qmm>)DvtL93?4Il!~IYb z=mmx7UmEgvVp2-0(6SLyi}C2=uZ6j9iDj0DF{St86j|ZFQlvfyVA1qcosareY&I)C zqUI!5Q8=C@rofkfCpBiI)8X=qk~Ay{_5M97rIdn53Dt{>v@VcEN$vdOAi49F5-P@) z=?utv0l>kbOm4{-G28NhmpX~(DOieW1u>;wG1sT{L2^hrZdmW|OW{yAfd*=d*$ZP^v|Bf&O5`Sb1@1;C8k)aZZGgip1 zxUacQ8~jy&2O4>ol7=?6TcwYXH13- z+(KCcuS0`*pqi72E|~weLzMh5b-IB9Vm1qWfrsT{oo2tfz8+C*nhV@o-URgBkW>uP zgO{>uyqXyyA=cph%B9lEP(P{V>KhovMH_O#e=dy)J|}RMc=E(|XG>Z{SUA)SAh$37 zO|gMdRb9=?(y`_OG>sQMcd{~IOMqnEv*Y*XlXe*u72^wmOGjr7KEnKhg5Ib9TJ7r6 z{=EdA9abB6j7iXn2Z?EPgh{ivc}Is_7gxGSY?Kp8oX8Njwf^`k|Iv-((qy;%->zKn z#YP9Y2_d%wU4KKao$mo%l#rbc{$#&cJ6Z?uIID=^;5HLgP)myO` zt9J(@nIN&xJj91o)X)bFL-}YSbIKSZeQRN(e@DK32g%{RDWJzP6D`P>Xyx;JD<&o; zaK$~Ffr^f;UUY&~oRo?+&qZHGTX2r!rjtI>7&yf9utU-x38>)8M=V$G78NeAKB zw*9@3ND2qu$8ZuBG>1=OYPceZ)uQ;hU}l+KgZbY+c?bPFzW`72UHz_?h5r^Vdr8%oQy@zE&O~1aJ6e*KyFkhwX#F(5@SSjsC71@ zUc$k|>wx8f_~t3g5BLuNxk%Q?Onhp?V?rDNvFfW@AHnTp;cuUZ|681z>!wWN?W>NJ zl1j2k{acM%W`roVr#eEza_X{NA&6lsZvH?u$~4=no2OlDVzwr$$? zvXY`*GU%RhmBwVFm9o712b8JdlQ^4Hdp#8UEm9J8?J~Gyz;4TSicHjhsP8 zsON>kigZ#_f8CP7C(%Sw|GLiyj`w{nGEwO^+USuUho9F@3DMX?R+2{#7;|ZL z5E3;^a19yNr({+>q0O*Q#On7+!=4QtJf(a#4n~$K;)UycGPuDXtgOdqq3{Uw{R}TC zMR8PsLk^N)GpA}l=j%^tn-zwY4<2o7zt(@$sCPgoLU&7h#7K zrA(Sq(;WB3)bQ}|QeP~_$8-PRfQ&3r?^8t z)tcPN6^;7`0s=GL3N~QE<0l>9Zs~ro`=by>c+ptr*&%G4wNQO?9T!JJqXRT$tL@qY zZl_FrQ^TdoM2uShc+UB+cSQa*x+O}UPF7YcW0;`Hwb#|0*njAJ_9%>9o;MiH2TVzI zI4s5UeQ9f$pPco_Bx0xs3i8Lxjhj4o8hjiaqVQQT0ZlbP7s&FzX0x~7c-WO6>Bxh&-+XsWZs61r?~AJouTsl@cUbl z=yR-K7e>5POQ_om804PeVlNZYxC}+|XCG|8x>Gn$%bb_#9r7Z||| zH=fxR!)0OdF*T(Yhq0Ol^zJ}-ap+ZH?O_-u^9Adw0cvk=FOnyPIkze^>RzQ4flQ!0J|ze+=M`;dO^QLdnM7b#>$3z`n0HM0Ye#3aT3SKiLtQiZ=C7 zYIEp9wZfRD78A>cr>Z^^u-(L5wAv0m_XB+43NP`@?)^KMfchB=YjvdNUtWR^my0it zQKIf;YE5&t8A>CgXDKKI7Edl3p`%gBmlsZ<6x9_BRzxakIWkajU_BoR0@Qt!W_#$L z4&jO+yLYJmfO}l>J?NpVst|fKER=hy4rGR^M7W2RBFy1DaR=Po4{U?wpr?w1V*4>D zhZnWoAA~4*dHZ30kZ{qee!)Cx4I5#~FRVYa=E2eKCW1$U?;=B~mUYHDNaOJHZIu_U zw@kH>?AX0=C3aaXA)=mY;fir3Mec+^tw4smBL|Gs5LZs$u@}4i3S&^scba==pViN7 zU2PpWFWV}UVQUZ-eb3W)qie=Bi#te)XXcU>yLSg4OFlxKIL?=#{VOxx+gSwstvWIO zq69<}Y9cZ!u6)J5+Z43>3-I0vX1E>d_D!$5OaXQe6D)9wuzetX`YwTDGmHEO7&>9zWfT%9ZgZILf9n5@lW-WgR@@C4?cQEZ{W09jd`XtQ%zjAJc)% z&IFU}v<7~q_=$y}mD$C`9vc%Z;u$8AHRc0w&n$S{Dkdcr_@})~KWV5UATO7v?P`B7 zR!X`0BZ_<4O&b(q&3U{-`M+L$RX-tlxvD-fF;0-^30#eJp+3GFp!~!4&rid*?FH3< zYqj^;2E^6Yr$}1@r73jB`~U*i&5ncnnMq#aSCjga_1hJ+Vs0-5UAieTv;qqreG?l; z=hxU2MeBZrQYQNPJ{MPd;Ma>LyESn3>KqZA%!&vK;?!Y-h~B}$fitb&WJ5EhI?1qG zy*@`$;C1VbZIQ_Wzf=PAm4d0a#dg0@4Ii6{GVfx3wqVQY21EX1Sno?**-p&mY?a%mVL5bqX9vLX5nk04tH|N%-w^k1O;6^z3ia%RL;Id19>EM znFs6nx(x#@JvBAeJay>bsv5SWq`{W!@sgIniu>i(`qrDG!J~Jvd8e)5C7{?ciw~C? zi?Ge+GVEaKV|(UD6tJ^7I~8^Q zl=zfaWu#V0P)btLV_`0v=w0QE!P<#m(8Z}2#e)Z`Q`EximYB=IVVbZoh3&Q-Er1Z8 zw)JW~7$xnAVc7ASsWYH!l|yJh^a~9OYdvl7i_F(595Xf1_c^^SEfH}3+NqkCP$eWO zf;vQKT>D>!KyPQHMmP#|I~rr4&8E{dF2nkH|BEh4eFVkOnEiEakLj3i7(S(sKf^BdxQ@s9gmsI*yy*Q#XH1Y`OX=f#-*C126 z@^yOWB>91~fsw??slbhMmetDshdyIQ%3e`Y+` ziSKMWLVIE)D-N(q-DtiC=}?rJ46r2RJRlKBM3PZsvFnM;b#z>KIn})>n^1s0KGYp^ z%eRXj`-JmpSTw!BcHYqk!xHnISFy#w-fL&l%F)bhU&7S%$(V!Slnjy-U&o_w5@1iI zw7{+N%UA#3D?XpUAx3vrAZ59w?vyeC>d9bRRpih>HZc7u#Zy_fghP`u@7hh={yr5h z7?WJf02RdC&$WZY@u*jQxas?i!a+??SG|sqc?Tl50ge0H8ZIYw_*PbjB)g{hDBofGd4Oxh0pdYvVHh0Qf!>UO;ZPN9v=2M})FJ zoY@hZi@)Tt+q{*-S>3P_euJ{bc03M{g--p?05F zlf(%T)D`2DWTRrqTEVbrBpL17J7-w5>k*H>^V|&X7<(KcfCzc;{BkQB z7Wir*OVW?~@+#;k%&>lZDC684Z1KrKNApK@o=DGdMGLJCLNyfoeXKvSa)_-&dB#iU zp!5CZ(b265bu#5=Q1{IT8(v%o-rc#K*8S^?u%IQcz*~dl8y=7_#h!)ZaHZ0V@H@b) z!`sj55}FEGk8j&ihTbkey#$)xpm8$khPkHdkWA1y57X3(l|09nsOzJy||52qV>3UBH=V>pSu-h*wgm#j>xJmvDlHErI!L zxKDj>ATt%^CQN&HryVKcZw*Mqemsq!5y?y1Kge}&cGxRua?*kFP6wld=EIn!q50#n zsw&L_hu1F;i{&cn49Xt%m>$73U)*tU(GjVexUw<5q&V^o!1S^Q_hemt>nW6;pOolx zfJcY3yGAO-8@bPkfJ{LJIUw5+4M{ym$YY@8)>NyhTQlX;4erN_ecVJ2A5vx87J?QN z_0k5c-L@-H8Jxi>ZGpQO5LiQAlv@-eb`b%yShn|i90)EG$u|o&O@YAh1jA_qfCZNi zhCX#!?noXN5zg{IFLtWX<5qY|Tx-CEnY}uZ;^pJx6ZY54*Sg*v{cj-)Gx0WQj#WuL z$s#VY8@h$aLnFvKKt086GZuJmtERAoKsETQSI)rXjrOGFgvyq-XKVW$JVJ_{t97t* zgoc&B9;CVXyS~28aC620jN`Z~aFW!Fmec*tWw4;N)Ccm#ERCOEu6B0|3`y12HZOnA ztzuQRGHYz~@|-A7cWUJ%lvCf7Z@pM*dji&Bxdg4^6bw*-${jBrC;r6FzFOC4nV%E= z(%5*ew{SJskk1lcl4wLq;nAws%x+Fr9gXN$ut7u(vVonTreLBV_Ky6$7J!uao*S#t>2GTgu zm=0bE>KNj^w#%P-V1xS>v)o``%Eised3m~b1K=$$dr<75uwQz&8T-YdTr)-F1@}X^ zFd?JO3(LC`%?G@9p-0UJ^DAP(KXR1d9Frv02`rJeX`XJ*la$%T902q#`>67bh&&{} z0b9n!UVlge`;$@gTMzk=ayRNt2H&Sv83a>3j2H`?Bj+!00-&7x0+IEAw<((8JlE*4 z6Ozz9S*1lT6Dk$Fzl#$*dC&Y)Q2Csb%3`?E5zt3a&Fd@;+XJhw;v{KSUOoN1}?R|mA%@NNubAWe$>~1h)1}>l)bXeD<9*0ly z!lBePU|W%_Nv4Plv9=c*I*3(c&_pKlK^yu=x{gR5x8)Xg4+L|e268W4<9>$T9z0;F zj1Q*}jmX2sfxi`Tr8P|U!O*HES>gG#SF%{34(7wqkgR}|pkVFIqGY0S7wQ%<&G+C? z^v^CCWE2)8d^|Bdj zT4`5zSI5EB3ERDst;DYOb}k8^XUc<3S=q7Q75!Q85yd*$FbgtN`3u<*kxvD!Fy(_p04>~A(ZJJ&)?CW zjh2uwU;|UI?*I)FGuGBMgs~EPe&8j&IX1m={cXT=*BSd0KJpd|gjEQYYHK>O4)l2% zAG0m^{L78}ViW(;haM5aUX4)HHhz*g$yh{GANDNldbLTt<#18uW=;AU7Zt|pdFU6g zUBZ+?JdDF}CpOe{Dc4+uO_mY4(yy^hscT)As)5@5u56 zAYL9#%-WPnwzz#Av%5OoV*s}@U#oZF@p<6jeWW+*`8R}OyXj?{(CTP$4VdbM%K^Tb zVQjl5S^l*{j>gxGRp*%KXsT5~mF%Fs4sfWob{3+;#6iv={Tl=5-a0594Wupb6A<+FYXk{RBCYKN1}I>UOW zmi5NI$B7ZI;!rVkV(zPlsV7qY97D!$O^8EHn>KFPllzi4GgU_pJ7+=R{a$ARkLQz2 zSuva3TECc7=hp2s74C+Y-v8XlC0lm?cCU6X4M~pd9F@4rAhtNyj(kt%&)2{caH4C= zGkU}zc6|Q*`=UTt7Jg|N*_hZ)?H_sm`>gl=%D+$LlSy?Sw0k*8NlLX^N#?iLN)xFZ zLl`WI%Xl>ccnL&-M{kOOi2lQ`hI3;D6h9B$tYu3syb^RUe~xe?b5D+q-lC;be1@M1mCY^Hlg>su4@o*XBR^CHi-^Z z2Z%d82DIhYlT}_qOcMRZ$$8LO@{UL2oE8=0LMTQo%or5Up{%_|oLm=HlzCOqk)dLuc$*H$BvH+`qnV*YM)@uU=X5fZZ=c z_hO?q7X$!!gFevBGGHl{Vga73RrL%JZSfXGq-NEp9J+ znuEcH0b$EvKXgR4`Kn^%Vwb*!HIK1{76S}V0(X)W%I7BeOB&v_KrlKS44k`#=(O9C z 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

    6v5f|5y8>o+b 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

    {-W9!BTGhj#z0NCFcek*?XsvtDl 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 DYa=m7 literal 0 HcmV?d00001 diff --git a/asift_match/src/book_training/train_image_002.png b/asift_match/src/book_training/train_image_002.png new file mode 100644 index 0000000000000000000000000000000000000000..0d78d573a81e767906bb537004cfeac473d7d2df GIT binary patch literal 495776 zcmXtEd}QiMbIC|{QIDMPB6jIC0 zcU1#h)*i~x=Q^w67@hkk9dgKWN%~?vv$1p2qu`?w`CCLI`8O-djQa$3mqSyC`?uLS zo23hT9-Kctz5_7U!lU2PY$zgP`O(Sxft%Xk+Z;U#2h;r*WO~qSzNO6gNhs;*#^U1I zKU)-(gEfxn6;F;oo}6SkeQ{(Ua45t+I(b_?Egd3<7Ls%SL<*;2^R&JMsQV zUYd?=)xYAR$XU9QGu~)QH>I;P;ECmR$fYAGlgIErKN#AG1A7SXODUK@OBDy~w%@j| zp0gs8T>NR@0i^*)#e*BsPWWSsnnMihIw_ljBy_I-g&#)>Io91s#Li^nJv>qKmu2x; zzwo{D^<>4M)p6oUP<77YmqNmGiUpw zD)<#(;3&vcMN9--$L`n&!-{$&uG4S^$=#06@5=T2LBm(h1Y;Dv0-7p}$Bck@wxTB9 z&J=csjVYbu84o%9w_uv2Um`^kWi*T)>Ms4HAWe4axrQadtIhGfmb3J_#@zM7T9srb z_gl&mm~P5ksE?WXxCK(+1v_@7VLl9Y!$M-X*AgNk~ny zd1lHSTsPQGaI}*7u$_R3#O^qxnmmH+CEJQd#%S@zPXf{lp~LwAYYjx|^dDwvs#yss zs}nF>{KZatf001I3P(cs5G2_&YG(uI_7yNg{y>d&^A}elRt`D%G0Rex`xAtANr6v{ zZDn1z#kwr7x*EQ8%BH?9n*SvAKLzvP^3^ur(hC@ut&V+xT z;-W1dwo4I~>8!ugw+nwgWUM(_4fwNBvZ5e`!}*b+h*T6GR};x>o>Z6&ohwck_V{(B zWaO#0^>^Rxr@p19kE|P>%Urb*ze3_X}7=ZwiiWEnaXw%VN9H z^wwJ6mUVE`%53A?x6m%K8+xT>eV#WFyM7x|kW2Y-O4ZpoYJqAP=3e7i`WoFhuLid> z?fBxi&ug2VCaBG1zgjkFf5vh7T2RS3HZ5G8`5~sI{0Y?u+jazTaCxhn@oXY?hMx7_ z1z)vhCyfeY8lJic+PRznro(-bf#?D~EO3nRB+!e|A-oI!>dKmBurKuZYPLTv{3#xy z;I$T@?eL?CtTaXAq>niWr-B=iBcTg)cDR~vY}<+7pGq$?JoIvy#q~=3 zoaDV^r0H*u#=C*n_d3qhX^<%vha%Xq&+rdpKXk$JCASke(AHHui_Zg#Kim&0De;ej zfCDz8pi79b=!i#0YgvLcH3UP5(15DC6jZb|ACaFN2xwU8)890ikTs%o&k8jYbL$BM zX-RoW+ARV0A|-f^{wEElbFzsx{u8``fXd8nTX+njYUDHqmyJIX&1jH_b(L;6ui}zr zuD~9QF(pqx=GqZwQ3!wM8M^FI%`ag0b`o!_L*d%`(@;<=Kd@JYb@#6Ksd~68(xR6}+uV&Pbr6|KNry zB6iEc-OUXNEr{(*8wZ~qAlWu1GeeB@W>hd0qs17)ct5EWzT63ZgifK*zNKCN*XC2KySJQM!ZAN^dzr87vjZnp7vn-yDid9N$E z)(}N3B4?}yn;vW(#^43Ju$L$I?Q0$ar|M(^u3We1x?UDCw?%K}$DErBuv9Ijbh?lT zstC>0`>r5?pOAfuc_bvmHtqcToXL&YmXq5&E<&JWa7M)04FHmdkNqKO_6r`>1=63ZNd;Del*gvO55^IXXJJY<(QF-6BXs2_#CH z`^o9P&m{X7<_gIx!XOsbh_;=dpQJwz}@~cQ6 z>*1pwd!w0Zm?mCO1ojtVIe`lyY}#bF#jC{%Me!JQ@pR+scl@YNPQgn{$o;P<_!r^& zHmInee@5M2z2yEyZ)mD*P@GZ#XYgX|w4&mEU|nPzpbIE4T-m;Eh8&s71(}i9nEJDTgPHPPF*LazU~)E#>hZ!@RM7>V+h-IP-fzk7}BH;qh?l zwjT#8las(t!Ez`oijpiLuMNQIv>)xPJa(vt@f2CSJ*QeOt19!eYz(zwD5~ts_Wbl6 zgsHOwZGrgmq?H*Y1gSvKSqzSQ9E-v%3r@O?HNI{1`}5w78R>p8|E28#y)Y*R*yht4 zF}iAaeK_q$r$LzRF5nAI{e64wqSv!i8Rz+VXuo9r4*~7l2@S6_V8+7cD{2|!dz6!l zXT8I*{!*n(W9O+)cUNQjqLsW}O^n7=Lp^$1cS>JY24}J?#sP8xB>xp}&9fs7d2-){ zeG|SE0$Ka%WHtONfTJ00aBm?pbT6Bz)v{FX zHbb&YvlSPK2>wF5-tSaXdE(?x$q8%-B6tRzL6#2 zHBV;?scrtjXf`2CF+b6~mH-_Z;Biln+ z7P16CHBYjW#ceKGJUZjbT#}7rEh|MEDb&gD8hW6(bJF0Svua)4=F05Q zO9PVrf!1jolfF;4blab}dnHe)u`n37ywd=-_>?Glv9RkGN5`Edq3ho}xGS7Q)S;fI zR6-TLaPkcI_-4pg28gi|YU;+LYU7d^A!8_6ZNf+<6@l-;&lu8*vE;usFzN~EvUu=?!C({4HSbrSblS#v2$)E%NTcToEbM>~p-t`3J_6E2@#tRO$Pi}0Ordz`xyF{i<;P}) znb5R>1u8GVky4qJn7FpQvQlf0(wwuUovN5k_y;Yx4(bPa>8%%J0O>)mhHCy#n2(%! zKSmoak&i)Y8GyQ&1-f1FLMYfCm+^i{v{hKwXJ^*#nl6Q7b-2=6thbAD!w_lU`?COU zsF?C@fU7nxYGcx0C}=Jx{`<2!J5=GW(cEy-QSFG9oekA+h(yu}pvfcIDKh@3gG6Uz zE6r}N#Bc9D^^C!MHdanlI8NNSeH1*FsYEAZwEy@r4&9D}i`}B0ry5@4u7K3OR}38dnHaE59?`k8BTTdNWvxTqJVCj(+G zlm8h`A}n@iV6d>K)#-v-Zg>{ZHkgdmU-W&=vXMtJnFYS*9E>0$0~1Z%XuTE7RdCFmt8R{hG_S!}sAes&oC zsZOn%b*mbUU(QHmRQ{#me0#b`Esaqvn>MD`dNdTesc`sxQt^F;_2y8b&cCPu_;}Jk z*6D#Ku0yp8O+<(#%p(B%Hx*8{amJDUcBPLlT5R}x*KbIes}Mehd3Xrl_SS{m!th3QPR$PH-DLN z`+oYLxve^A>k*WW*&=Pkz8o?n8!w$pOh@@SLw`mj>Khx8#MJYTt9UsIdB71yZp6x8 z$EM4sUKa{O&GjM|%&uw_mw~&-h9aYirz0L~bl<6KkoSb%Xh_m`50C=0P;&zyE~KZA z;yy@OHbIM|F2(=3V0&<7zVYG`y*6{LMny8D*NL~hv9U3=X{j30DZ2->sThlu&qhXV z*!q+G|BN%UnhcvNwoNB_kEm(lkiqsS)RWpZ8ndCf#xG#DukeaIj;($HwAICjH#seg z-5y=wwKTU_H4g1CH-Y)MaU7@ssR8Vq{Ea0Dp1uJM2^1ZCyPq56xOl;@$Y0??xAwcr zgcu>tKPM&|7u|$78i3mU;Mi^>vDAS#rL`TeVb3r5={uBVQ9=Fi_U`ebevqg?Mne}c zNrMsu^Tr5eO4)e2;M6zY=e3_LPpo~Nc|r{FX|YRkxh~P$XOUDZVMZb z3+>tkhC!+xfHCXe*`Bb*9@JOC7o(vbSd=$bKUGH>bVPeo4uqk&7vY95xzXSEDB{pt z_2i^~uD1Wh^g2oUQ*Y{$R$XBiL<=r!vl2v=lM2%lJM(1q257i6+X%>S6UIiu!AifW zp#3Rso!NsENiNd1je7}qj{24wfzq8MxkTj4w6~6^9QR_2=6d5>(4P=gFZimQM6@UQ zBhg{tbQH;A;IVPhA(Z-FLV_<>k%7c~X34xu8_BbizzfL}?lv_fZAz1S6})z5vM||1 zNnygS6?dN#5`>zv!b_G*lYd*&F3Y?_H9p7{LKgaK%pCKgT0l}Q7D?gR!+9T&+dI=9 zG(0ZX*r)vteZ-CRF2q$%ieP}S;~()PKlza#jebSc+&c^#aL^$sd00B0D_&{5h%oam zOeY@IBnQxHkPiFnChN;vdX34#yK1_QV?^G(fE0-2&mHQng&YnB3s-H5xj*Sc^Mj06 zAEV4h13KsRo1xiV<9xSqzv7r^tKw`TV?XKV5tZD3q5I=p7D(VTCb%QP@Ow$^@3@WW zIOD#~*j6j@Yt05lf{$kL4ang}P_r?Smx2f(sjK-`1o8!?<3X-spplPyaV;k&!<%!1 zO5@L)C=IU08^Gb-+gn4~N+~H_=mA3Q3k$1a!R2_;r_7kSnkeaN`|2gjv-!MeO*=*+ z+lgvF@bO~K@&WTSWXD~Y2P)^UC%0zn%s|idIt8{K8D;U~S1ybMI-uR^=hW{3QmRZB zW_Ey`GrPI8)!P6ILy(9ww}4`J2@c{o>qEWtmSnQ#Sm_;?QL`pa@X^PA5d++oXcN=D zpGK{o!uALkJhqV*0aR?q>_%w*b?>k`Sbo6#%Em^_g~HDxQ5M-7?=`lg96~ks6p;_~ zc1~WVE_HM9y|#(oV{TCkN49qEm5n=J#dU|(&QG%I0y*JTH(}=}pZ%W1%kA(eWscd} z$sC8-^E14E37cDiJ)xj!Cn_M`dV)6IIX(`_bI)xW`UPOnY%I(@us_PZnsh&b;+4Ya ziYEJ?YhK`ULrKRrz@-=7mOWOs9vV(_B4D;wh4I_F!}^XtQ#>l9`n$HugEKGhQS5of z*GJBy`HOqC-wU-CZNxj`4?oK;++EqIXbca&47koj@0*}Xm-N+9`@<@k;-jj#N+jP< z@r4W8di0%FlmU5y!+7tq&Mtzv(8rO)+B{)pS@0O!`(E}kT*!sai-~fQHYXXJ0I}Ek z8}+?U$^d%3QRQ`0ZU$y3&)}Qpy$%QGg&67{Qb;by+vWkj?p%NJvYE>yE*8fz)gC#^AB;4 z{y)1jehj!HGaFICIG~~pCNg2N$i1wDOZ#E7p((Xk7xXzDUe$cQqIMDto>-=)VrPx2 zG@TKTGYp&BS(Skh~f%qbQL zN=O8LP0U(JZN!6Aiz}c*4D}U9onkR#tjUTsLfe9vut?U2ks^I_Xm#4$nWLYHOt0&I#z=3G|6% zX=U-Igs3+Vyznl$Tt&s^;^HnT z^A`-`3wmLx*k^OO0ua8O3Y&(+_ke9G>6z>`kBHr)cJSqz1uJa6xL7gx*MKcvXsuh*+QOGmG22 zo!wC6^N|0H6hGg1R5w$xa2_yRK47%LEAnM8cWG=6KIdM|f6-g3o9nBV7zJd>;%r@o zS)iOv5?0<6d_GKJb{T7YxG+FHNU|1JzJeOxTQU0!e@d-yoL`jHa!B(5g_T3`)vLqK zE*>|+14^HM4~OJ8hQRlUf$Ba*V>Vl1lJ?C1!T_Rb0NkHac*!*rI(`g+M+x57!vz__ z`gZV*RL;ZOQ?U$4Z-IH5ODebzh)!4s0PuKqcuxx?I)bV3rP_?&l0T5zN( zF1OFHI|>^;vHca$P%hN!qLF_bUj5mK6y-p=*B>>pun*<^ zwJAzd?aL6xIm9%H<~gWtQVe!oBoUa#{?vcH&i-DKC^>cCYh}h(O{icgT~np>D}hlK zEIRPWf&CRH(9*7$%lsr^jF~q~Iu!0ah3(D1FUCBhTgh@pgeeix;;tmGwzLl+u6)x% z?{%HxOf?_TeE2TK*B5L#iE^i7US^ zI-F%|u8+7cgp?*+T^Z+L7}f&{_r5@CXe;B}mttF7mp@o*+ZShu*z70eh!HyD9V-X> zz?q`lG$Fzzm=6czADEjf=1M_ZGnhP08bjlv+PfvN~i>74*&LKIHT({wrp?r0XDt^DpF@$8m@ zuOtc}p*N_91O*sRlH3d0Nmt$sVXj@Zpd3IS$xZ2O7;-L^+sa7N$392FceOfR<2+0c z&hf!cx{VG+XIb0?nQ8_&>d;{ccSUv1zmQ%^iuIXVZ>Yfyc+D-x{y% z4j-}BR=Huj!-b3W11b}0W2-HXx4nduZvQhn?@SJ2s%U=aa65_95$Lwjx?HC5NmJyp zF{Fbo`CIhKzBCG~3%qTP=F)ZfWBDKY=wU+(qEQItRDyL*{;>%&(}V9VgHH;#-hPHRHi4hj4PP>&7%2LFw_Mt6?ARYwJ02xt^T*D% zb{|0)R?D7V4wAaAGRCi-bnz{?gZ-dR_rAQhr z*JaI{=svfC)}@PQ_R$xZzb>!Uby@h4DuaStke^Q(3c(m<=g{C!#t*cRC`| z7KY>ZWS?C7hm!IGxXLFHQvyId_e_Ux=CicsX(O(P1|1o&=gxu$ua#la7w6D#q#z1I+ z{h#|g!TST|zwiqi$2a9#$72sgtW>OBJ7?ZLCL^j$w#iI_-IC`qo+V_>vxYEU$=}=G z*pdVcKhlinRae8Hc>IWMi^hyGH3IRyl88EI>ffVajz1oib;P8Y;_ZzN@mEq(a-42n zAfTX(v1`05dn@FwVK}TNh+bSS-ZGy}lWt>@;8hb5?ABGy zW=?K?Ri&JU3FP*-sf-38q$GGK{M8zGjdkvSJVC=%-*l5ep@`>5 zd@+K;BXYk6!HYj-qI3r}Ae=+~ZIK%ZH&aUK;?r=y&0vK&#P?zEQ1A$MJWh(N-|1t} zwhvs>%4ksZ_4#aTr-#vk2okX>G}?T?<)YUSSwb!(bsNFg0D9Q1AYW1Ftc@P20ZN!^ zoZv1gc-@bM<2AiRepll5c~m-hqJ!&Un8P8-4GSmhlk{C)vLs&FdYu3{7@U(q#}7x? zr)a97XP@MdA61ji3mAs{o)9GW27=(XHoaOr!`J-(T!0Nla@Q$D;ECUqqs7WF5nMS+ z%(uf2yYt`rTKL*>aqFfz&S2 zI?T!WvlD195XBV)WUD4?~oKv)qucTx-+Wn#(|P_V@| z#?_}ODJhd~pzO65<7z4ApclGiA1m+AvFQ;SmB-aRS4^d2MNX|V= zIC>_SS4)B=(s^|!$4yQX?ywjYtGqyn*PRlUkt0Hd(hvMaqz+cFl3=T4w>6&W7 z=6@J}Mi8IsXCFJDT?OfVWf56y)p(jC+WG}{dF)Ar9(XJeEP~$d08#w!SjCuL)UU-V(3*+QG@QnJp!o-!xU{DwoG07ZG9Z+A47T!U_A39h$a& zNP=nQ1JS)VAd%9iO}C{tU&<22TwoQ)bSFCYj4@t$?tvtomU(SF9lLHa?Tz3$=%Y^L zT+i7Lv|emnYAgr6q~y3-DM?Zi7Ak#Eo|KOHgtcRM&_?^i&EWD*UCdB%k@%tY#mq<0Ot+;o5H05_mm zX+M5~=hEz%aR4anORBN6ZAC%jyVU3S`HP2UT!d5KE2t9fA4Fa88FnLUd>y|u7}Zx? z`@$dkRlotaP`3Nb(j>R~$coWat$+KZmWZmw+b!>UaVc7{ww$i5o+*cQf z*XWdz8`|&wEBcLN4$qwglci{i5ON2obB@~o=muClrQNf~3i^VVY-Vw6Z>Koq`RTN{DEQPDz}XbATSAJfShGLOKjcteD{d<;aEL7`^pRg-FSh|9oKSr^Siz((rCXRm z-YnqDO(h5=lbY+W?=z7}Wl&m|FoW4zw`^j?!?7JzG(YY92Rz;eu#e?b7`NkkBZi%v z-pxkjx3*;Z?F+PJ4&PvG3zW(uxs{t`{0WcF`YZ{%=QPmFTsFzw6!!4#+4iZkd7)~k zb8^RS=0jJAMYGV)-lE?r;U~fZo25*A@2D4n|#ZguKm-s<=4NZ*^k2oxxvq z#ts-Euq(zze@r{f=Rtz{V^lFRP3sVN_o#uG^kaT$HK;`>HGNjUV^T!6#{QbzyJT}gC0V_9cA$Own)A!LfpzM?ub z%$SMo<9uTyBaH=HwIijkKaEL6IUEZuX3!kB`@wp48dX${N3rJ?!@&eBguh~9bE`4R zqJ~w1>kLZVaVjH!Kc0OIkR$R8mUkx!Z#VB$*35&QONS|d7r@|x$*`RHpz!a_058ce zLWDZ#8!e>Ww{AHSdWUjEvOXap@$F7fy0`le*wq91VQmy1Q#9G)qCc1ME@!AU6f-|G)_dYRmtHpXjq4q^_I z(GQ1jaaJ`;-*{4YX~S1%vE0^{uf?0}#DZs}w@zi}ZjR^N!(ZeW|PCqK-VB9*z>bq`;;b#&ma8 zyQ&P}j1Zldour~a#P%AVT9sRzwJOn?J6H1O^ng9qGL2XxPJpXExN1_HaDzzqrH0Ns|u?Ns}@h3wZIJGgs%luO?+>&6R22{Y3XZgqPAM@h?Y zV(|wjplmhVWT2!j;NSDS4Eqxd$+xMum85&#vJ&+7g3?M)#RZZ_8?%6Dzr*x_I)RGA zhMFyqE2UH;(tDRjD^fqNydafS)Q+;6-IM+Bz1(p49ZSxkjJoZpZ|S#>LhIeaz=u5i zUajg5EJ=PJsFNo@e4}AVatn{N(2$xeC-F-A)2}-yV*O3q5HFV{TJ3FipmW~a=`&o> zB+$D&=YcJ}#-<^&euVZK=k7$<8IY`$$UzOGj6Ahsj0l00MY#qzzW%*qefk}~^Co?` zEuCUC*84rC#|4yiD4d$i&sdTIW5|Oc6=*;YV{RNjIMk0ydq6JEgVlg|5s%?pVOmkM zhI_z^>*}`!m+$LWd{DsQwU#pii2HDkktmB*IJQKO^-plgBJk7|kloCBaam0R@r3zX zjFj<827}Uqfoe$WX@u@mtXtV+cw%hfVpjtvTG6b=4;#8ajHF?$_7yhs%Rs)gsxb^e zAh*;B4r<*EQT{2>Vwd!hrukVSRi>DQ(RX#UsiMFWX)ka21da06 z7_J}9+v+jfQc~ijyyuQToG8`$0zO_C2uSripaH6P6yOB4l$~JBtBcP@4;-DJ=1(?% z+e-iZcOPK`@=xAv!tTh@*b^U`AxYkuO};=yTyR zu};#(Ezn#1o{i0Vx4qpBT#}^wn2sRnYIvJBT|7EA*1BxMYc7GW1b8c*Bz#nVoLuHt z6CbjVAGE(!42-=o-3x22#hN3d!*?F@*pJn~rwI!8@ zn;^)`q=>I5RrrMr#lVVZeam^>)G|IB&?5rb zd9wM~i-Br#f&LdO1pa1xN|_E{xZrk3^}{e!ceNHj6ymXtUcznVWV}9wXgdb@?Y+yA z#|b@~M>AN;0y!HnjfbEKuXoZdR0? z`PY=VA4d#Tj43BO28b#UV)*-stqWxPP{<`2aPK;{LdA)NqS3+rPC;4ZG8oIzA=Ten zeB@(9BkWx*G?*FOlg@b4oFbMe%H9?0AtA&)9j>!o5c#8DHxtcIWcG|C`(FWaQ>&qf^bT@Ao4DCHV0 z#FPlnVNm~Ew2gS|h;@|C2o6NlEbx2OI4+NEXJW4` zJk>(+l{e!uV9#A`Tgn|PS^4%C+{frQg;Jx{sDqbDb{P+@rSLaQ)|Qsed_(B~zasQy z%Yj`msb>&Ih(b~(*j7Z$kS6W|`^HB7)PVeAy1MTSe=4%Lu;hLR=8zl#rxAM?^`?m| zn>C(Wb#-vEUdVCEpotrfc>=6ce_RCJvV=i!X&CvATEY=9+plx)IZ;-f(hGd1iFlg@n{ftKm31jHLwfV<9r;&xO7OWhQKGDs35Sj~xrs zXdzh#wO6r5Z$5&nPD4Ft#Ps0yMk!16f0<;F>`DVpUfm{8Rw6M@5*n~&U);(`p}b`i zIxEkPJprjt5(3La`*%X--_NOG29P%^9g3RBK}hs7wOT)E?J)RkI!AZ%KeG{O4{d${GlG^=$>5IUp>UvmnAtj zyfdzg8feW1-yu$&_c?+yfL@v@Qb+VK;x9!#k@P*#xkz&b=}l;#tPhP5XiWHeeVogL zwe4AlsW<7rxLLKVaiP|aN#0*$_owtsUBz#YO85Rb9nl;RuH~vKd#7ywknq>&C=+f| zl=nbRgK;g6y}sd2`L)qUT_;W_)c={IKRTsy=C8r@&0HZp8`V9BAKxa~T9z>bEMNSw zc&??Z3erPRPPw^6bvZ3a&2E&yroBn>;En?Uw!N}IkLP!GvU^IKPN6%4-r{m$x6p7d z*J0G^*V+z`ZLl`8$?kE8b)@BJxfJ0MWob1*L!MBgSv+`7#<}=DHk{OssZd4v*P|0c zMc%CNYzyfi{;zuRVp06t6VJQ_Hs8hxMv|K8Ao%$2wT6MJY-vgS5xC2z8^fYWF>QAJ z$edgIA5H$^3=GLF&a7$-ypjhmg%0PS-($HB+s*Mtb%oHcZ3{d;?PR`ZboA)N>O~nv z*i%I^JDeHs>)+n!QoeR*2;=J2GPe~RXR`5U6|L%*Hytr1OXvo>OCxftCc_PS^cyM0 zdxHAYq|F~$Ds>u=JdjYRO@HaHnSngG)M3SFnNq6`L+L!X7%tUUGU9rCkd0* z#gbAs5w!8^G%eg&?$MeqlcoMBB}Y>H1zTTausXr;fVn=*sdJ}}Nl-3+l?GCoj4N&# zxn#;~Mu}HB>x5%QgOrf60)PhO7i;_#FYv1_!bC5*WfY!9JPRYSIwJCWbnQjb$srd^ zB7}CikQj_Hi1(|(-z?LEkNOit3hoT`OigYcwU;L4>_n7Gpst`ql8RKXFHlvUVQOp7 z9IqazD@C&sC{7Jc!TY?*P#`Ea<8}$E(e;424#V)#Q^3&W9K=LxovIw6;p`91l)Y1m zoIPhkJpsp`CNKUnLTGQZ;bxHc1IGzu$*~OU6w}7cG=qDTGo@N*YgwuXokT)OYer~Q ztD(u`^^bC|_IKf9(?1{2X@Ze@E^g?lEWZe)yS0qAC>WQV|8bt~z8a&yNO8!>LJzE& zZA=OT^7&;Of9m8KwQih$yf1AxfgKt#y5O2-6JE@yh9k;#8Ips2_Je=-pgP}TrwVf^ z@1S4*!F=2A)yy(cjd2z*foOOyG^r~&3g7oGP2ghi*+Kiw$@{$Rr+jRv4KR}ZIXRRD zM0i_kM^6qS0$Sh!yFek9eVEO(7cnF;cad8~m8H~9dogDoD6NICj|BwsQg#AT<|b^$ zhu?xYyVf%qt2897t?*3EDK0DBnE8)3U&*Q$1mE7h%O)3c70u`yGK$lAAo@O9G*!pZ z9_`B!bpP7;*%Mk%zWi=G0=F0a`pIVg_(4$OC&+c63O7ivb@|QCTT_!8Pcumc)x3cH z_CAxkJbov3r-@IRuseuvmDK>lrIgu~udYIV zFJ2(kwIG70P5P?Ku5CwH3tu2d#ULp%?dgaUR~_zRHzh*Hw$ z-&<0_9jA#F>=g4DWH7#ILtk@_UbW=%tt`-mO7cl`{>J96hh!X!8GW-(u>W@QLg`=f zs>3Wr{fw$qAPTW9F1j85mN|x~Lw#C2m4@2o&G52Ol={AI?2ZCwv5(QchKI7Wh%kW( zq&dzU4NsEOE?WtRuJ{lzIg@Q^iv|x>X6Sv!NxG!?6bAHT&L>On9ShRi1@hF?N^sJs z%2L&JZvoVK1vi<|??{cXM8m69erZ;(1Z)GZM9nc+7Tc#hg0a1OV2pu@`dPf!H>Qbc zd}jg@-$aHuIJxfdc!)Z|G42qI9dYhx1b~Edn8FeXbMG=n&y?r8PtERq%Q`uf$mj{) z7*2bJG4ui6B=plcZ`${E;0~It@pdpDnP2ql;*#Uo7(s=JL*<0gI5*V9;Uui`;}7vZ zpO4X0-|~(Y!YZu1<(n-jJZ+$f%4yl(dF?Lw6i0xnzk!b<&tUy#FcEf+>|ZIc{@7cf z8GrkUzgUWA(+IQO+mu!54VZ=~H1KosF?>aS+@VoZB5V#{KR1v!#*n&(ecz5u2fM9g ztY8{Y8$YgP1}qJ-%LshumAKpltjk!|4|>=)peJX5epym*I+)o6vx6L;{OPq@i5m9r z4l(+#zy*E82HXBfqr_93p2j!q^~W*{D#4rRE}5_AqHpccSF5wjlHnMaM} zTr%6qerEvSTB5wFi)O153-0_7r^;3A`;!jU+rz?atcsgEfuF}bkL=mp<(1fW75nBP z8sQFuv@jcPHkoi!hGK+129+{q^C|6b(}V?RsdJuWPxb3XDH8f8Ks=-XR|@Y5B?&U7 zGg_@Q+>>2|3t^-e*Ix~nHcU)+mDJ4|PwQMQ8~ls)mK#e{bnz&uT{5V?kMh!E2&{ zH7MVQLP^hTbTRx}fTN*`Y=Bc?Kg8u4j5%ICuq2@z19iL!Xw7M5_prxqp(WJ23+E>{ zHf){+0Jx0#qOI++c+l6cG*?NK*jS@Kc=o9==?gKyb&o> zAS1A2Ji>*(*6-D%&vt)ee%+xQ^c2r+vs@4tbh<`+T_NT{JtcG-RQo&GX$939l*Cig z+9Sb8#+3>ko|O3|ta_e5^_!6@gkelq1Q=6AvF>kejGyx4^BH8LwuHeZhcfC`4bJ)f zqCg3aiEVN#&nh#Wo*P3s3}XD1EM@di*X=EG-u#bWlY{1+XEzdg#?#|rr0pdo{f$>j zdy8hnpX>Xpl2?NAr&sz7kIpd4Dn3Lng3O0$j=-gA*yT)i?FkYKnfHY8?mvYB@2uw_JLpNi7P0ys( zUTt5A4r<)x26=GgDdoH1e20GIGjDv=$?zZ%psDu2K;WwAK5r=@=KJcb%nJeYJ}aXT5X$bzOAEO=(;o=l z{Wci!t)a&?#zg~5nYf=c_&vi!mrqE~x6p0TK!G`(cVX?$c_r0s+mM!1$uB*{F0JT= zEwlOj&K_iO{mO^E^016^GJd2tIAVVZ+He1K#EyM1S(ONShu!c|O>*UBjf4UTykoSLYQiflaSa&G>NjCu3!r^9%6i6!^vg`kg;=kL3S``ko{t(<3 z+Flw4)&sq_K3Hm3$#-!N7b%;dijr|LfN(&)-#LQ9Yy{N2(@r9aehu|;IDJ9uyPvnT z|B+*mFHJ&SYeOHjqTylRT6cnCe_}j^n%}e^{9#Xi zpO)f8F5eTT;fuBR!4`keniVbR|KnYKrFb8h-szP%dHmtR%bnj`DhbeC4QaPeqVnxH ztY~Qb3KomoPrOX3lfV8`a}P=nB(jpskRzdeI{hpRp;+LrpiftYZ4#tx3K^;2d>{B= z5l8`c@BrwOsJ8Um@98|#W5|^$=LozkviZ-A@o|m9UsBYSlJqOb>{X7T#Gzf;)Ue+# zNLmcWx-L7iAmdR9x54`d26c9}l_galK_bUKWA++0##yoQMH<5(>|PEzi3)2U zVd$)@X+Pd!K8SJ~u^&*JSi1*_uO8hv?#rPT!Pa`BPi)T4&X&G`#IL=uRce9${`+FU zE5oQL%~B5X<{{;MTu5MzHt5mrmMemd_)+Do2Riv9G^xb#liqlyWt(gT&}upNDhu*8 z+^G7y2;n(MRk!~pkp7iJu&`M#HZ6c3kuMmb=uP!*{*)a|LYa^cdi^P*=Ce9!xZCdj z?Iz%M3#32|1m#XUp~2im#6I25#jlgR*(r%Y*qEgGwN%SkGJf#PGHpRXyw=VNj{FWm zXKw(9f+RZ#;Wp}$&?Womk_D3KK>-2EJS&4{j%^ow-fKIz(iMk|EuTR)6W{-z3visv zBe+CG%sJf-sgXgc>mrvCqrpSdgQL%9q^Oy!o# zTvBcoGAcDT%(XC=xuoTOTlJ}=xh=OLl&M_izPVpMmHQB7(p)NRNyz=q?|lFG{nel5 zXy^5QKQE7$!j6^a79FerCztBDQ~l?FbpG7?30=>hdF1+2Y0mfBr5ela-$^6v>Kx88 zG39|0fbto^i%blE2WD<yvn}6GVBEh1$wb0;Z>IPRcSr*AmrJ{%>JypYw%k0L znn4LbVE3PtTcG0sC6xJKH$HQ6Ml!(g;b+ir6~?QZBCf+r2+v{oRpuh+(!Kjq;W@%4 zIDW$AIjY@BO3^jZo16bJLyC+KT!0*O0Iy46Lb>%fx=8CvdXj4z$` z!M0+)XJ!upK8oG7T*<@m&+qL@N7(Mf$)sa#lI(yU`TFHZPl#St3XeumgMOtUH4T4b zGtyI}cJOLX($v=-o=6p_%!P;e)T_yFlg0JJWLg2MIt!fa$Y;R`zh>)Mljex7JW zx-ihq+zJ1Q*iAOwKGr+V%CWJ2T#v^2QJQtrrhZWYNuZ zfkY_u);k6>i+t&k$807(3p~B&%o$j3hh3OrF#22p$^%L&sj1h(v&i%U0&fu?zRG+h zLayO!Bj}&;N2PVNTi`#~Adzr`rK267=U?B#6=r~5F}E>)$eUmD;`oigmP8xTuZY~7 z$=29|*%^2@0MRH%@x}}Y+)lYx%8)akOXx2Cd9Z7Ju#@xo0%oyD9cAWhk$A4?*UI^m z?+zmn?yLS_kEZkLT{HIA8uVFpnDip*kYL-%+tV>ShVpOruAANyFtI6DcAbb+x$1G; zWng7DYVVxSVm;GxXEAZ=Y&7641e7IM)5oX)_!3I?QyjdG#2~m15jGSB*SPX$va<)l zQn?rcjD9CgowvM5=q*zYX6L-9`~K`Hg}N6Z!#_*v@CGdx)oxHI3upww+)=MO;x$aM zhb|KQ=Te?+-wkX&I^_GnxTZ(7rA(}j$A?vimn5F? zdea=n?<4()0^VTW7*oaGA92%SM6d1{4CJ|P?Cjl8!#~Qi{t!FsE_oR_3NhLD0umPi z^9>y@M4z-L^mYJAbQarp9BRrh_p{rtO#hZTc76HYOMH3=u(NicKVY-XV%!Y`_*j@h zREm1|5v(+hRPR!`%q|PA5idKiW zw!x^aPtAaX(vwTV>}?$=s>) ziEIeLqtv8mgPx=&-;@+L#&4;^$q#DHFHT(9i)eli{$3CT;B~~}=7&8az)4+h^dcwc z3D->xU`M=A%SnMN)?SI!{H%tQ2Fp<%{DsAdb&ufa2)QT!1PiKzRTuG`p z*Il!8Z= zxLDGb-_A7&IjRM(wob86;=)S+w39i!B_+x)XgoatwsZyJ<^!t*fj4Q+MMm+Fnk{sH z1)O=Jjt`G`w?8Xl5r>91s38O)T}C)64Dv3m{>|@I4OGeLPpD*B2%cQ;7`$3@iK{?YVyC$x`X@<^_%HoLlj*H%;f4liY=-CgJj56&>c> zul*i>elbUTe=hc5QpJ;+B6JaPd1hq_KPd~?mTm;}OS{pI_wEJf*4+I4PP~$$4y3mN zXZZ*U-qZA%9DJJB#~w71hd%(!tlpvC-OQXCJo`+XBB(6c^ zD!4Pp5WRl@?*_$dLoD4szl8LnwnrX6_z9kZ`KH|eY@SnEmBbrJDZIwK#OpW$n8H*M zYv3?OWM^M)G_q5zr4xe{2Gnp$0LT(7(!S-C z%swr)>Y4E@8|{%Goh)a7iK}lNnrxQ}w8hcT+H^pC_rk!3T)?Beo;^sXy)T72$i8y? z(xtkP0$m`5OyyWfR{m`M!hq5By*}Ml2_#pZcxnE|$jE522OID{JXhUtUqz4A+bLP# znOi=hss{g-QLFRzr(AelKnK_)&!RLNjtga#4~!H<^)bGmQko-+utJEMz3WCJQ3fBz zjr|RvC zh#%T|2;hhnfXTv9eM$B$b&ZcB7TfRj`xHXF1pwMT#;w}7NZMJnYPm~Om_sG8l&ZGA zV(=_s8rwczB&VN|?Z|~KWk^>70;dHn@Z5%4FW)DKnT#^5x>1pf|HbT7p#aOIxc6ww zv@ekxXrM0K13+LtO1XbIO(NrngMU;4Pw!U1{!<2CdBv~G2~N+gMFcjIAG_w2k4!C{ z8M9@aU!9XF_@c&K)<&2{M@B}z%tOA9Xj@$(;4V~_!xVX&)AWPaOd@ueaxpeynYGo0XN!w|$J z1tn9pU@92k)(uvA8d~`N2I)Ire#P>7;Qoi!q-*8bsn0-9z&grspt{mb6&FbIuHHCu zF4WPzm)IAN9B8&uI@nrSQB)*Ms{{1lx_XBc?P!E$CUh25$lcApR1oE?uzm}qF%fby zM6w}lB};VVQH^?Fd6&$}hjGzG0J9^3Cr-ajJw5jC)6|`%6y$)jF@-Fl7-J9E$1F5w z8wIa`_yw<0x0shW-Gi=ccQeV%M%dRl3uXga4$O_LT9aqjVLlJZ85bZGk_5~|#NwwG zwz82Wwb%+7+!2pq<*2N^EA((c4n<;(cIP;AyypNPl&A+R&)<1Oe<^i2EH#eSuFH8X zjqq10{PA|KA?qZp)_r}#F$nnIH?;IIMgMMrpvkXG?nP5<$pCc4)zkOh4sOZ|76ddh zb8^kyt2yDh{ZR7fJeVvo`^+-asc0{O6OLSD(Un}u5Ey~EzS0zL47(%_b-V~3chYw% z9i=PLK1n0t7g~U?>vpBI)$%*kf_*%8b?e--84bM3K__N#H;H_k{<3^zke;e_448#& zU`3#n3_s(R9FG1c3)UWw8v$7uUEgnYlEmKjqmqT%R(_EB@l(Ra1NDiutrkV#51s(! z>KMrR-Cjur|Iq4&OO}~Rc;6Sc!Q^aG?cRTJ!F>-L=}1fe!-O6bNc?rA&DkLCs^f>#()Gjb#^SSGPqt2AOVnm1In>|qP>qAkj zWco>4JPfRS9~Qo}nq*(u@u4qiO1~rjG~hWSJd4#Dzt&uLMz(pQe!FF{UB<-i#~ZHv z`CdkTAZLqf1aqsFw{4~J&Wtiur+}H$o&#%IWo>&?5nOIL4gUc*2N`aa7q(@UV6w1y8T#2 zuKOoC#wO=X4P&aSrk*~cP{ewnfT$w;xh?K`^WTe7C9R&mqw2UDKe`xCxa6Kd&N`-O z{k6h&YG&g!}GL^FPvrZ|KG7^#C?Z zaX4LRkJ;C3%Oc(v+B;%$v{qU@^h|W0A_yA$Jbz(e{O(}^liM~u9sucWik%)94qR+L zW9w_^C9Xb9^5BE{Uk|tGWh5r^tRdr9W1Q`rZ^M$9k+O4v)Zwd|2oPGd8+gDu@adn8 zg!~gXbsn}haUv#{^W!McEBEX;@T_hI1kG&(mF(+wT>FWQg8WqlWEetF%cWN`?tWJ- zvVuwlY`DHA0I9#5Yw1_n%p;-F7}BrDurI)ust(BnjauF}(_zVc(oG4sVK>1+HCOHR zv1E5F@?d%W?uNLPXg4GCIcZD+sO4(=tc5?z$zc^(aAlB(Y32U|vprj9TzkjR34KXM z#5UAlZ3t(n!mmC+QpyGR72f+#QJ_Qj>32#-UN4kc z3(jp10ep27SN05CT|-pbt=lE1nrZsxO8f+B3>>78FwK>(MoA;Pg=dDmxO~yvR>re#7+oz!V{Jf^M-F2wQ>(pJ3ur z)DsvMVp0yhbObobYx4azyY$M?AiWEi092zo)szvniP>j>*Q6S8k^ukruZV|fu)m0V zMD2Se)D4%~D@Zi=P5(0vI)H@@(qEV`3x$4{yY7vnVh@|Vws<{4Ll^0D#?}wz*S!$$ zS}|yC_TT*BIQF%03?rp~gTy!07X)$hYf^%kF469&pLKcYS@tY7n}$?Wyk(_-HNzHs zlWKubKQgzsj=~);HJ6A?%KLh@)(O}#5$M_FpWDtUTKM`GLcK;AoeQbSz?TX)9b)omJWPQ~(wJQIZ)G?S4rzA3h3zM(9u-d`F(oSntqe8v#+c=8ES7kz3r z7qIoC0wx7VEnbI`Sgbr_BV#{(#MIHGt1T{PD#?|bJ7DowMe*xllWGO|P8fl+)9LhL zTfs-Wyag4ZH>IoFqd}6`c%JxjYn{>((HlG0yPk zl3Sl>tX#rgB%sAaXnRuRXc<_qE=1eN=ECmp=I4`PaBx6myA%Hb)VYB*CzW_nf*!Zq zrX`XgRw*0eEb$M?2{Gi~`{g4HoCU`xnTOh9-YtUoLb{fV7FzpTZ}J4&nMZ=um_4owyDUm^i&odlH5Yoe<3&9qvKVk zQ9U2VsQ0smyWXAP(NiFK{HL*E%Ki82{%XX_pH@m@{C`!s+a?b>nBP{EfaPzIPnY-) zkJ;OOT)Bk!IFN#PNus}@p^azSU)0UB6pN;hnebWA=>z(GrKwf8AOp{0I{ahu(u29D5MU0o(z{~Yo`ivu?4nEyaj z)^#OFGPWLrV}qEPa$b_-UM_MlQfYyhDhiQXd)hVDgV4$+`VGUm#^eJZQDEvWO+-!6 z>q8SRxH5(w9zPHVCM}rAUrPE#sY5_2h(O`$k!?y%gSb`CVrAb#lBWYOhyp>qz-Q8M zMX-o-2pAzP*IKdY!)l5%XMsDVQ(x_Nc}~eaYkwy+ZUl@gG?vhKI1esl~~h!?!Dw0mg|o8LpdFTwQX6 zHq}CykcrX_ttiUgkvYqBacZ0R+5o^Oy!&!+_4KbI;xt*8Lzu;VuEbgf(EE3mCj5MDXQ@2>V+OIIGyUbhT>Qq_`3nk-vwsupOnFL?wjI6j2K=y z1E69%zH0`U_=cnYBSpXr=zI04!#*n$kj)!McDTNK&!tP@%viZF?xud5Ol(ZeBg*FX zeC=fJ)#pOX&CFtN5g+Bctx1^KML-)42xY8}p-U}T7F@|ZP(lsFI;(Ttl9#7h_EKkVA%bh6pxX$t|uG#K*{r{Iq8-5Wz-%LTl~e~b4{ zsGEtz)&&n0`!|PLXFBLn<2oNWK7TaLrRYy(=pVMi`Lk^;MQ~J%9%2^O*M+oV+l!=o z5+O-Uj3r)ZBu=P&k}=MsbgF=S+mn6g`zU{mSi1(b_AGa(f!?DZ`@D?PVc(8 zI68t95;3%;j}ap45TaK}NkCl@Z#;m*X~C^6UMrz_F+|O0?!;T!0qv8- znjCx?G%snYF1@*b1Rq<+!XTus0XfD^9op4t>Et9Xh4N%1&=mGU3I8~C`9rE;+gMs2 z<CHtAhEzaMZ$bc-qb9VyDN(?nge_z924jVR zxYaY9!a-nO*&K+juxRCax2%a>+3Pr1h~4Yd@2I&^)#8sY^UVWfVx`;{X2M>+z0Lhs zO13k|?>pw$=DF^5ia1&OM+c-$xYqYibLaL`WYcg4a%>`UaXt*8WfZa4ucTBp zv>Cn4OHaVQ64vaWq~FQlfL6*0lb<|pU*(Ur;`fNs z`~glt)ip5bqZQRBFwIYx%G8Tc5cUN`T_JT(DEBRu4IrtiO1x6QD{kaUmFf3U)x|68OOCI&XV@-k-~NI^CC zuiYz&-QC?K8W4F7ZVY8x$qTksrIgaFERT=Xr8X>KA#M)bf7jlTFZqpx50jK2=^{xS zuxDUempvT4I?*mcsJ&-#D7Ie{VNe!vKvQmw81St>>vF zPH-xup<7dFr;*V5UfA`hGtga2WH)PyYF^4vuYA8;zEkoVefZcNW594Qd&%oLjVOEC7qWeQpz53=I|I?)S z5++Upm!tc1%3JBok9pwK*BcOoKYd9aUFRoEwj?2+f3Xlh3Y_A)dx%hAKCK@VX&^?f z9~&D;I;it^Tsi{;niXmC6Tb8^=*S=&?z`&l%Vl&OYY^b@&P?RW*O@(r(4h013+j`nMnJsRI}> z!jdJtB(3Op1UBOR*m3EAb!C^+*N{FS$TchhqoR2->CyhviOAm{ud8X{K_sGdI7qM$ zJDi6jDHmQ70Q|Ymlg*N*1+60-Iy7Fi0t?^3s2v83;PI?MGldJHcyhVttrP} z=tZaTL~$i!KPs>DBYMf?q-bT&C{xu}Nt!1kc`IaR8gBRvGwzk@c!BJCHxM=xXiaMK z!p4gkOA#O@g2*uViL<6Fwvl*mu+9g#!4>VRlBGoWMSWl%U&Gd130D9hP0g zq5I!HfC+x)UJ7uD_^X`>c3f7HCo>Vd(Oh zEt1HwNyQVaTqxSIwB7%EdXm2R(uU4k|45~>O))~Zmd$-qN00OqSSI&Z-&16qx$3r; z(oEzwW@&7{f~^|2VjwFW_yWWVfm3Yb9jrP8a8^ew2%AhTZAGABBbM5l%I4-PrO9AT zE}&2A!=7(N*M9;MF&w90VfczRsf9ITk*}E~kKx*bea)U8+$_v|4_AW9IjgiS8=&A*>r=s9Ha3pga*tzW_Pcv*NHBy>{PnCE_*C%RjA z*Po|$79h6P>H}H28CHVV^#*icBCHm$^h`UgM7qIM$F{|;Z2aWKKm`vps-ck{7*E{1 zlP7g}S6=@Lm@j{)YVL?5XN#m<8uI=q4?T=~oH66lU;zJtrCham7_LO)b|>~As;1cs zU5Y**d!L^H!~!dDQ15)qY=+#=sI-5facP-jNHIDu#n(psu4 z1Yv{`0RVjnP_e2#Z*kd>8L=Q{qVHGscnrbCj4am&406HA;;?b0hY>63Zo8vh?Q84n z?O7ZkK^Q$qtIysqNHJZX@LU99wx32gXLK5INYULEWnB#VOVT_*R(p~2r%73+rP@Rn&p*^#mN_e z0qfrC2zSxi=7c zh!zDErS{%<-o`PaHtB{kiY^Wn5jI&lePqWw8=IhE-o;j+ZEK3kWf4qRJ zqo5&c=ckwYId^f@kKxLcdA?gQQY-3_w18;J<_V941W%?^QK<~MYhi(M(Kex9~* z1WKTv0j$T^?<^sF1aTU(ewTj^KuQG60Bx56{5l3#269fG5P872$p{AOrId??9M1y| z^o_qZIbS->XE2^?m}`n>VpT;cBYaiRk*YOEKhzELdn2_y$eQor3r0E+++E*$GO8`9;v@HI{mETw{4J7%Yh@M#xzfjxg znSd8qzHO)8)k^>Dn2oJ1LBc_w@qQqbOxLO&=4S6l9+O4jIGFh8i8Pmz4KQ~hLqGQY9*!(8 zHK08&TsQSHV7+HOM zw~P4b>PIe;_H9#2f#t(2iYjMn>->m;Yk9}h6ad+CjdXR6!nsm&S|uh zQg8vXqF>^fzw0z1lIo-?JwR37!5$1zfFEXGZvIwYKzf1K8^PLXNE=xD;p^?9@t8Ntqr1PNj*w{LTt~z?@q=G!0kycvDnm^^!j!{{d@+aO_fT%7g8yY}tc?e7#b!Prn+F4W@8B)RY7W&mt)(M8| z+IxEFKMIp}a^UxX&3oXkrN@_t?s|GmY2erGasJVg4!t9o#2cbdSo3sHtvqaU2PNj& zH=ctmswZpKf`vVbyf8t-qJI;fP}E4Fstx(xrUuXD2R*i9!eGIAqgf^jMuVEQIuaL2yER?Dq_)DhGrn3?zh zHH*vslN+2RHF)SE>}@(3g)%+P)5h>N70yDPV4p*I7U=>n?Nv&>77gDOzg})Ad$S?- zJdw5MQk3z9EYfUfarr4F@dp;COM21jB~}rRt5WJ_$iJ?YPI#}$`LjzBNu@FSos?6K zd{^bK*!g)>3nOS=VgQLd=Od_|^q)T~W=B_LrB{Og?^1ZO-!@nNTHEu!xW8fe>dThO zc%TaS^b58^WF+4vo>We|KrQA`LFgjl4dKq!%6%BghLT?9A_TR*cbwUoF=CsP(__=YH8B%f`oLz)`wD-3YnEUBQ+GHp}UQcNYSfj^aD7Uk{Lt!lS%VaJDopuI^>jQsbEPa8aJ%C_8_Cp8tXKlhmfu)){-6x z9BKK~jgH z+iGjl`%!B1KZ4p1pozLcVz>94IH zF(4RMHf*#rjqD%WS~j;acdvG1y*Eb%6;{dDwxb0fPEQg3X;mTtgM6}gNIWNamgHZ~ zcxM1uxWYfo6>J1x_lH31V|wx>$LIZg2)9w;y}6VWQ9#7l)>4ZHv1yHb#pBjDx&1su zY8K33w&aHZwV}P&-a@+m#%(Sq*1t(hak{GqKSMa3WM68&95Oc&e49d{y(76djxV$) z7yI#7&_E1Kr)zz7y-O3AK2vGd8S$rj`X|>^7RT#aWaBLx7K@bEH|83YfAqDs7`DX5 zWFSc_l;Q{Mg1poV zeKzkk)hn1^CfsIp1E4h4N4erqyadapv4$T{pGd?4al1!xYRj&f4olHg@9huSk6chU zv&fHt4sTTObeveEI>`j`&xUvjbDQ?J0`V1ZF1cCU=EiviWsH%2ga# zN59#aA|^=CDLw=~%d4o9$JjTVu^kfbi{OCID?Dt%?8q>HNS*=65sRo2OXatN|4MvI zm@a->e^|}sT;|qzCAwz6kC7e-Sb}f9gneDkL!C3b^1+abc zpea7?Liyf*#CTmWXdfK64nrI`Kado8H8TCvTXpLGnGb7nrmSHfpyvg zW%x6r^fL%CPRR0-wNA{nBy(eWDg{fwUDZY$!U9&lzT@fH%bRqU&eIC5oz@(j(*FQf0bAEv3?=;db zyg-!$PJq$0snZ$1Lng=n9OG8sZ?tV*=nU6QB8JW7q9g(ars`S`hQTdqxg){;kx8_M zynvH_(7~GeaJ8nc)rTRiWhKKPM&wP#_GM(9H$@h9Mn-)!VQfzDd$sM*)Hy(Hb8iKV zD^@Z)0Q*}}*51BIfB=S*oXl=ETg4WveY{Q>q)QD$u zXu=E1pA_hufl^BBv#yPcdx}?0RXS~A!Ivkm#&@^m6jd{I~0qGT(>vPdf zSFSe09)n26Pq&jr7U${A<-u{rBYgj#Q^U-sWV`L~941?mTMG7=m(b8xKSrfZ*cMiO zE1O%+j?pN#6$`s913D?Yhw>YnOQ!_$D^r95k->q$4OvnLA6z;`@ma9*2y5@0;DJLz z*Vlz3Zf?<0QB4VXOG9LG^G>jHLZ9Q|V0?i@!b8YkO_XolO8dVOa3CQA)>|7V=ZuV0 zMO2hed}}b$Dquy7vaFT6zeb*MM$R4siX`s9LnTpKjZqB#a*5mwHH1 zL8+gS`00~fT74uK`?~5z&>kcUI4K#D*omO5r_nS(YZ56 zjIWx0qb7-Xt~5mSG8?)rF6eaFuMov{Vlq~R%8OkfCOxGx1(37$sAqRK#6FLYMXsPV zIZmEnGFw*{ANaV-TX?7Cs=4{YnFW(UAuT}cn8}m|CKc#1!<44l66yt?$g0X09c#Nh zVr8f(oMriUiL@4pu58H~oI3{0gZ-Pl+^4WE3-mR_#f7NZ*moZ8+;?yE3RF)-9!s}m z^O+1`NU6^+joWsUI&qw2sm%Y{IUQ z@G`%)uMq`t6DC0=qXj0FSK|GNr<`C^X0UTXbaZ6wf%OO{2QO(scf+EJs{TwULcVUC zP_dd3S(v9V&Y$YW09{QCMlTU&De8MhkSRH3e+zXz3UauO;!^CnvhI{k8Mj-( zBEZ5xAfP;Hb?Bfk`(n;C{xm^%q4ND4h}22&@M7r0mAZAjdA#tPgWbi0y^W+K+cR4$ zBc0$L%=oa`mn8FYeY>!7k^0v}^6( zWRteB(9x|8MZ;ZVkLkMDXrrTGL(&-_>fzzd+`smS0tj%A3mKYyFdifWFs@PUu%mo! zTg_F-V{JPjjb%8+!qU~5Yb4nIL95-Hd&@x4+$ATpP8Nz4cE_Q)om+Bt?OIp`k? zSY9zu$ZOtM$|bewAp+2%%~qZUB_5j(bmgleGfcGmLVCEXH2`<)mqH2C5nCuo%5bh}^Y_dqLLOX$`CK~nj32crl{|_wT^LWYov4uyZ z9vSt|OCPv_jmhyo9fc{)eYU}XEu?OoJ}_WCbnjTr*pE1bWMx~0$TNYcwleS>t z(%BUFF~aP-Yu`sEE)qpFxz+K}t>Xa|G0r1Y>HX)VY-m~v`wfzrK)I7HH%jl_JP&F>O+B)E9&CZHKW*u_GKpCEJT63nl_PT2YwdYXlfyG zVrPm@rJZiBDiufISULFNsthnF8bQlw0+Yy|vYp}fAQy&Yhnr{4PfdLYlXcH|EDMHp z?oorUPXyG)tPpQLjD@uMLZK~JO=WqK@tKV*FZAovgdeqW?+!^l<}>MGUZ|tmqZ2$( zz&{rgZi5)h6DAv}|NddKw@#R#%Zq)g*Nn!Be}}tZLnifrP8wi)0Rc~0 zaMJ-OSWo{ki#J!%L7=46>4W_M{?lgZJ8JPzwlckTqx83bJ-J*>L35(8r;Hg@wg@5+ zk+qlH*-Ay`Q&v2{2QH19un{ShJCjc-hkLr_-^9K11DXtt^74%59Z+%9Vr0}(2v%$l zL~=&xRmCwen_v*_ce%pPl7rk7R*22)G*zoaZAj`DwiJ@T*3+YG++VF@&h~HQ)~JJK zq)}{*2UbGz($d~#Y^*D4Rh|a6gb7J{MSL-5pusO{63X#6eua%Lf}82;m^r@V@2-p;C*wkD46Ci zSesCdN$Wv-oK}NuwjgL8%BUCQ#!v-n6$QI_35}9=Q?C;HPgn83*5oE4YE1% zq1aPC(i-lnt~mc+=1(?yUdw9J&6~copvPoL@6u4S+Intt?oK0OmF9S$Om6lUrSNw{ z8TN==9rxe)qx*kjoF&}Un?svY{~{w%PhyjsaQruGdO*fk<05SQ+|cF2Z7qucY0A?u zk0g~{U%q}Hu42Yh2^B7tsJ_te?ss(PP~W)j@dOP8ha150F;yXw3IC_1QqeFt{#bF9 zzm?*z{kq9&>_;x;lD35DdRHsN{F{Om39rCo8IVJ%F0l3zCLDJ7tV)KWA z-w{4fcBVwS3JL|PDJ!mt zqx1(Ab7dfI=ZHi8V#<)Q&{s0!9*kgV30hgAu z6lb3ax>fUiFVIYrY36?%Pe;+!wCTN=mz>*l&?+xd zojR~V)gO$9=RPt65zG(98T4^?vu|jJ3adg0B+f6aTb)WPHZB))4cHJnECApdJ2C0^ z1F7IrU;@|owfrUeK`SSy;eckF{faWUSSkKzWUisc8iC7&O-?Lu!Vg&k4&Do((_gNF zOTl^|E*ceH7zhQDI^!5MTqahefUe>tx6)2b!V*}yDbHi0o$X}V z0Z+=oDfy*(Bcu@=*ghcSTuyNPgvqZn3e6JTS8@0oFCfXDxEoL(ch`XduUWf5|JPQ- zouLT8)^nCJeu0x?bXG7{)0bN=vYhcZi6oOKAxv7xOB<$^&Akp-xB)(9e3^1WA6!(G z#0wunku1u@%p^x^jcvaL9Ng?EVt z5noOklk#D%k%DQ=JHZMi0&Q8JH-8n1f=|GkhwP zR1p142vB|iVhk#o58sj<&k)$)^0fbY#~-)?70h^EXx|+pM4~W?tfTlKn_LtpAr6p8 zWn2H7oFu0cCbtpawnrEiFi_TE^Jqx8227n+Dlz!FB{-bWtrOLWxW6weo)u zITc7)OklHBqpcEuMOgi)t`s4YukBl^?Hb>AClGDtN7dtKZIE90p>b*&u(bunK1C_2 zxQho#2=e_{W45q$!LSzKa62jpVUm)1m{5bk6$-Zb_cH7y-TfK|^j}?3-pDJTQ`UyR zH&k#kTjo6N(>KoJ`iBlk%BX88Sjo6E>_t+@F!(0&F!tPz7my(Bx<72Zivx<(f%PD# z5zl-|$4l)kFRagQRPNhqrQMhRp9T0#SZjz4J4U%1sFTjiS%`8w9W zk}7DDV6W0NZuc?rGv>BT#H?O(n9Il-(~>l54MeCTN`rFWF1es;ufuw`B^7?J7#!6Z zAV$lk2!ialjY`y;S^3dFE=X1&Od*jI2X!Vk7y#T;QuT zVOduBQq{fs$kHxLTp#g+Kt4{U^Tz@ZWpAnrPcx5gEVH5-E+kFUm`F5ASA=kzKUp!Y z!@n5jQ4|j@!MG2Sd9a($Cor})-T$QA1{I%37i+}JWK*lAiWlhwOMsnKJE-U!o;axJ z3FF1X!w?-u2yyynBH?h_k?)u@-A^a2Fe^tIOc zf8+Bwljb_2Q}KrvT;H`oqK~6cXkf^)P?N9Q))lA2+ed+tCjzwl6@e#$ZQupEp-;cp z93Lu1u*}T90*rwwSVsM+ImI($3A;D6{E}^-z|J+Lq5{=y0T`s~g8ZEtb>RPKIv0N? z|NsAAb1ErCAtYj}cT}s*Ath8Sql07)b1Wm|jt4#;y0?+q@<#40=i1NryWsn31W~-;aF_kXHzc+hLY1hh z49V;DY!j{Gx(TQ|wbrJPB7RSIaB!y8?yrYmj}i-HwFW?MkzC2cGf0S8L-va68N#NL z`3LvdovHTU|G}LEWBc`i`0Yd`O?caGgsQV$mqHo?3016uD_w<7S&}fHm2Ejt)p?@9 zKpeMg!|nC6$Wl{`m_K7u69C?WM`#MKNpRL0lTMD0baNEt!At~#2V<$H?5OICA0ERLp}QV9wKRXS?RqhCfnBTe&8@ZPvg{sJHJm z!m?_vT8J|?sX?Y$zC$k9XVYJIKtu-p@Z5Oak}oZC3OqYG(ocrR5xff_-SZRe8-GkC z?ON6(GLpcuewl|*Jx}>FJY=I;z!VY>&Ih?UewA-obhAs`3cWwx(If}?waxgiF(adw z7n@hbd26mB7Vr2$gn=RS<^{_^h%3Aa&vt*M)&aNvqrCF8*qTynWLBaWsuNicN*-%5 zru!TI&d8Y0U8T(P9YNbFwNF#VJP3CEAGGgy!1z#;JcIiB3H5|Q= z(4P7(D>8SviR7}Y?V=jL=Di|$?*>~#*v91QBge=)MA`cZ1%HiOA@Ht@A6SjksVitF z1h!tacykO2&&rtn6h$1Q2X|Zc_CXPRzp(z|W(YV_uEZJ`U834=BeUk`la6+SW_BR; zHi~+x=s0L8tacla_Ock7ipG8oH@YxR>~@O}cT-uJ zpUN9)Zd&cdr%NEOL8Wd;{v4G09iq#c%W;guW2J59fXQWNo}l5+c&J+}5PD3+jm&El zvVY*9_UCk;uy~WQd!3a_0hapFUkWqpN0EfQo4){2)T9N#aMWHSRl?EAoo}a{IkXJr);6!OV3^ZKHKydVkeTEFbHp zfDq-bJ+i-{&1>4R)QrWUnu93xvwx9aMfl4B=~9(&7GW|@y2HnbSi`YW`?Uz}W=(&2 zPa4X)_*dTrPhN@S6fz08cs)YLG`fI5Thr({E|# zOsTo73j1>O0V_7TVomDsOd%b5Nb7WbXV_gDOq^sS(Ea}&X$7+s{c5MKmD6^_c&5;M z3x&6*V?shphinb|5w_3S$@x2BAXIu1(?p86c-vaA%lz|Qc%P|gmzPzg8vJ$bmE;+B zJ7bSPg07`Gc#J9dWu{$5%@a`2-x5~bO`uC_-N~43e25$FkB;wz4|8mEi|7p=(0%n} zXAN_bthsMU8NqPLa|^_K!#TC*UO!ab%B%kmsV#JEoIo&_q&yk+x=oJMYjU{Ih_mF`q zemL+=G29K=gX`&3NvTxSxN08Jl9iLAnGH631wq!=R&Ep8OA3M=`U8$8bH)A~PE7aD zZ!;!yL6V*uDZ#}%>@7C)IUG?M_1i$~NclMZYy_2#hb6!v8zaSB1OkIAen9^i#!Z8=Tkgkn{M70)Vm^0pN zl_qm$w7abL5ATx3=BRWerBFKK`~;LNcoBmsW7iAd={2$CbmJ+C;RWbjMqhpU*-+d` zS+Zq=J!QwJK=}~#b??2SaN|ji`Z*#)U!Qbl^yq`~i9{MQHavV(Mr*u?PB3VFB`>l$ zQ4%~p5mvt*9-c zK0sgX!DchZ>-;Y?^!vNXqlT`TmfaIKsn^Kw#c}dGZu#c+t3hZvcweynV+^> zuXG!Dzw|cVlOVqq{P@L~Dy{nwJgUUnril#JoqQQB1QgKBF{pi*=0RG{l`B$8T-i=; z8L9iU$}lrCd;KX&b9G{I@#k%onHHM~#(d@Z%1={V(da@4`&QRbwjbmBf|}~hv|Iz| z_bR>fOMSs|J?bkDg&t}PGWmGFnxUbfI>Qpq`6g^8u@Wp5kyHwl{%u>w#9Y{}eN3x2 z@e(gH(y(3h$~w0Hk3@JEiSpw~P$Zb$*z^Y7Xc(M7a%}dy$=1`Ub04|KxTjwggBQTD zC!hW|uDInuNiJdsm@D@A4lOO?(`(47~9Rm6P-8!9w!>F`=&yEHyK!V zEbr>uWP)z$-aS>VPPCqR?m(#J2dg63QF$xW=zAPQk2UIT_23#ml4|+GGg$!*eR|V_ zBUTOwXFJ^HkmHl_OEYWvV`h>?b0fI^J9*EhdsFRRZ${z*o05?TgsHY7IR5;+(8%PH z#usBOVxhr+tc*Diy{c)s4n7P!rJ0u;Q(xYRG85w82`5`=X%$HX5=()I7?Aq}eRFLL zpWlj=GitDB@|^Z|OlZsMNAK~qsIz}_mn9s6?NIahe7B&tyyE6Rltv%1%ue^65GA=l z4`6MMkqa0J0z12sH*$#ue2=tS=cvjkj<_Z;T2(9KQqA##jGT(Prb` z-&Y(i4b7szjXSp8{65sX30W64Rhe-g5O&mOzV5-PgS3!i+6`L@ZDKj@@xG4O!B96# zD?BrbXzQT-iBmf7?(9?RkQ(@Hnn71STc{F(mhx)@x3++Kv)w7q+RoAx2tQ8H6p3$C zn??a?6-!d@nH}1y^TW^SmI77Kaxq z-&XlKXOb7~0*tVLyxbR!taj4dLEyz$V7iBD7>*x)TU&jeV(Y%tE$OE@YhJA%3G`oH zG%?l_oGXCWv#kvuj`AM_g2bj3MfEQ_Lb4n zIjad-$M;8NHQS&xsLt6Gx}bHZ|GFc_WOqJuE)3Wd+rf}!FAh-4U%{X0>J9v2bX76K ze0mn-&SOFZKHk6P5!9XeBDfdUBr^v7`BkM2L6S5Sc3TPVHg4d&~V@qIK z87=@#=W394R{0Uz&yx$~x(d}zSZ=ba5 z2TlK1lAeuO)qwQ%v}*_(+t5skZIe6hzJg9J3@@&H(D`S%h@N9MaKEwtet$#S4zMqs zE^jmli8V3B#Fvx`4wlFywpyET#WfRwG7|`c)gZTlu=V3mRs^Rj8mxDPxy?&phPVQK z8HPVH#ZLuZK-ZVWc1w2)&wmPayQ@m}mGw+|1Qw`}a#axJgta~=ffP-9;%!!u34BXG&1Uvz`lkDxV-3j4Q4!A zkvLw{YJhk4?wFGyte@+-3VkZnTenq?>pYuLLF+X!n5H9Z`_XUL&pCu1P&+t#>MZp9 z0{pnZMnWF@o+5Pt!jYh%O!osY{nLbF&1Wngc))hK?2CLHP1v0e?KpsD|Ni*mf&rKP zFbzNoDNeewWP5G)(BYY9ck+_F6)JeVp>}O{>DyoX>>b2kE;Lqtu5ol2WuH}#-|}Sa zq+&t#>ud|PjzTww> zj@a);XrvqQ{mFUWtvsh?5D4L&v{QseB|MA9jye!_+2063&e--DKPjJDGh^YgB;-B+4iA?vvaNburk)n| z#;02qYpW-#OKHtwbpCYezF;?qu{wRwKSm9MeuP9xbK$i{XQp6TJl0$nN&D#AgYAx~ zV|};nuw}5EV4esNppc=c$61e9Nl=mf2#rSz9rV6E*(WaHKFc?GGTX#KA=aCK&`hGC z%;r^tae5l8ipNj#BRoj7VXeoEBW#e1$}|SvBd@6h4;c9ZbDi^UiuWxt346^ zkDUirz~Vs?NE-{(A+*lHPT0;h=tId>YBW_}gTWLrv-DR^_R?Wi#vU1yyQQ)In(#vP zj@sY1XU0tOR>K~CQoSLjX$ouJRNY@6HCvN}etnR;OjwSqFVlOd;3to5=f=?1&tOtd z)@}UYmcJa^n^78SW7=d7EY)t1n{E=)+7j!F5ayo3i zQhOJPC{1QhuQmyjTsg6t@pWY-U%{tZbR3$=*WH5-{}uQxE-59YjRN)gV&vn%vbmJq zLxSLCO!lL16;mmqkE})%-_wV79$U;}K6BZLjost7@`8Rd7IrwuUO5AP993f449)>2 z88l4s4KRvoJOSGoe}cQclK#x|+v?hETZ(4o2<-2gsySGS;!gJdJz2T@qW$GWLs{Z6 z$Y~1&*1PbNvAQtx-{L@^d~QU=20uRdz=%W@=s^Gj=SNWki_f3Z|1=Cb<1RnKyp**1 z`u*eDL7v1R=+6I!#!aiUxi(9-vWCMN0S*M7jMlGUwD^CE(vgR%)7ajL1td*jDV!jj z*ow^)G_A}nPdV%(o5Y_8Y|CPaG~-t)jwT)OnF?5_vd>>%8f%MIn0)@VE6hb#0pVA_ z`e$`H9GbkdvP1QarJ@kdC>uKp<%Arecu%?b93&9keN|;;u<5WLImP#PVU+#Lu!`hr zcEH`Mdliv8+@&O6j+nLGzslw<@63Z<##sf&X?jVSF`NSBzclHfuEc7@wyzyV&+PA5 zZnqMC9Ad2%)1SbeY(%GTY`IQ3pa*v2)c0!oH@CN}3LGr1Se@FVbN5A$|M4r*f;;c1LQF)RShXOM;cSDN$snYi}nIrQgn} zjV5S65V{+dT=V~@qet&jM7r+SFncHs2Rdw(^~aMarObAxQTUdV!6Q}lE3q)o1qPj> zQ)LkyM9pE=fZ-gv(eRgiD|FX(t5ITn8&)s z@MrWdjt-P~nGa)bcKJT7eyq~EEfU-0$j7Ym5gnP)7TdT9Lw`9#jur5k{Msx_-0U8x zw#IlsFj-)E0=^~AzW=KV#18{EVLw7n{43S_kf2KYk9eX>Y%-eY9c7=1XpAhE`0#R8 zuv;9CEma^I1jZ)4yo6vfP>C{6#0Pas1<~Wz(|4RL#vf1mW(hSGS3W*m9AiUK6y>Vl z&I;S<$9ycRoj=)ot4-|8H^TDM;PuZcZ*DO!+1J6oKs!?NA#sXQX-LUTak6p4MILYR zzT;EoboZbA4LQ!@S7jy1Iq-IPkCf-s*i3}H8TQa5Wd(#chYtZ~cEsq5wlTncz_Jfk z8HPZb-3hZkW?*@^WF2e;{Wuw{3gAA~S#Xi52d3OwI62865K^C|g<-P=(5s2bny<1? z7BH3L?1UZ-un_O%HO~}+WcI95*U}kG^+ZlVsrG&oV3`9mHU64hhu6A0&c=ho`0GxM zUB2=7g`U*|5PzK0L62^LRNHnQjPE+jGop5G0?Dmb4rKqwgzGW_wM&@$m~lVaD$LBT zNt@S3P3>hHyC^|(6}+z#hpX&UlrmAQUUXF;xI#nHtJ(Hy4f8zFY%C*mM9o72c?a4y z&Hnr#$Grjg4Gby08=$t@0KV>WM9kkB>{9T51=PH#sV}>{a%W-Y)#G&s2HOUmp~@`{ zJ8goG`d#@j$d`D+ylOFz3AO`Dl&g1MYbz^Ja+mH2vgPu)q7dSq;?HR`&Rh1eBse)? zXFg3GY-@bt(!Jx1Li!{=V4;CfEY25l!Yay#t0;HetaVWomi>lq8H+x%dY649b1W$_mMCCH5SjZw>dod*HL(Dj9gOsNssGru-BC4Ii#cyn2SC7Jq!` zpjtbdT+JSd8mCHKKN!Non^`$f-K~YsTe?m;DF08@by4vkRymL2nb*P1vi${t_rND3fw+t7>rCe5a0{1GSpH)iqc zYq63^L-YKxMX49=fV9rT75;+Gs$j=p=GoBaIUma%YmjYeo+5+gzMZ__NI5%#sAys{ zf%W~++C?f>PgV$Ro@efzzD(dxQr|~CFugxt`eqZ992mGC)bTuYDBz1NMvBDxO{#vO z45uxlftE!Xb2gX<{H@r`H;HQ4F*6@r83|gNgy0fRp+sWI<8!Y~JhMv&@(zXk!qF;b&?`mc#6U`$mwHO+wJsNNKuM?W z?hww{;O>+SVodL?EaQA;YX$6;=GAxiUjfT;nCXQ~nz5~(as)*``k`}e+S%VR#o@(8 zMidM|=^WH8^5?K>B%e57`QR6QxgO@0wYbGx%41r^V+1TWY9ni2hEk-1^ zkDjQaPhYy7Gc^xPC5%Cf-bl+cs%=^yH8He=aYS0%qhe2CZuZYtGMfWX^L3fw&)bzS`;&DM}) z`rG8f70EA*Vv9>5>kl_1XZn2uP^vC9a{kD`{eYEB98oambwQ6>rcFMACqx*cL(b+e zLdlE(;`u9R@f&cmX{X~I=bKYAwvhvN!F?2H-3T1o;rp?WBzb}MGb1Z}grsdKZBZCg zya`(nHC4bhZj^;$U5M|UC*zW+IPuM#eGGeBG=63^Y^X(he+bp#rvBK4H*Y*FWONaL z+`jRSib2y(+^HUR_8A-ed#2pcL&Akx8qRws zvY8IVd$24+>>m1Cu6<@^9<*19zCZ^ zb^noAfJSJvfi0B%F#DO-e)~oyLCV}kUt-VCMZo51m3gAkhQD|OTUJoe^VZihP3o#c z+`1%dIiMQk)jnZ+vDlEtlp~oY=sfYK?5(m;366R_`G}Te>PBc~>-s`7Xi`IdKi|(M z=-*Adjqqcs`-#MKU4sasuJy0>_MHqz<%67w0}ehxHM|<)KnniR&Yt+u+)*6ylN75kE%vl%ypUsoHht9NT?X!DyK$E1XUz2wUrt0&es zPXLC=j2x7Ih4I!+5yHwCQ8FQixO>c2)AGoP{Pf&^lNPFDAM%Y!;<~vD;UVQQSs8$m z9d(@GP`H8YZ~|=``B)UU8M>gEA`)kjM%aztvqKE))AikSgT|+(rshXuUSIgOkMaf( z)k-RZmrX3ezN%)m=F#Rwws74mqU$)}_k_C#_ZT zpn_vuKT;K}uBYvJs2G^C)JT-2CYbN-EN8ivAIoDiLG_yObDDPjbui!Jgu^??!8sv; zBoaX$n7@4;#bIE;8>_nA{3%0edE!uqJ;KKZ>z$HNrmV`lL*E5!DZvx}=%Kr6vf8Kv zp&DzSa%|+tPf>}cLyzjTKQd@E7c1#`!Dk$c{x#~w%uW{qV-g-drCOUjPq&Ue@nEd3 zjE=vP^lC%~d(J9&lQ~}v3spRGX&#>9j)Uzv=%KKiqC$FcC})RaRd=<@&I#>WFQD(@ z9O(Bt*aL>1-gPpch3lLvPGZ~R0^FVbB(Rq=yyJ9an_G9@gUjyh zP?h*1jJTX?--=Jf=#0vnA6C03-y(&DtUo6qAz`jfs(0Vc{6A@FJBMl}Ou)%tC)|ca zMY!rqyebEcNDC8E`W|60+mPe%-6 z1YxJt9mW6>2we^^5{u{Z&RN%i;xDAwNw*9E0toac@EdyVC|68e z_a^Mm%FxHUXcBn8YOnNQh{^VvV{K!-HX-P7oF0$2@kuGfo-dhgect))DC(56epzMv z(PKjms@A~y`}HsymltxgD$-^LgoXCTyr=6^?wVS;+)MI5&T+j(V>m$zW&rr#G~YBL zzgo>M&84)?b%DBhvB`scC(46lJ%=igrSzj>vfJ+WuU@hsbO-P!^IE|xrXZ9c?7W~K z*5fi37HwjhokuX8%MF=WC6$d+q@Ijt=!&4&R? z#-hzrfqN?oyl&;xHonJ0)~IG4Udf2^W&?R*ZNelE9D)W}T+Jzf<#o_szKDxm-|V@~ z*}%(4OwfeS_dulws85cFs$;DrE@0c%ycj>$n3YA*-fEh-dkab}VIbb8`ix#6@pAd? z(1)fIdEB_8*eb9GQe1l!t-jW-`x4rALTB^8D#uv?T|C&1JMb66+;;@;m|T7r(B{bQ z!1hZW{yacG3!KUF<~3(Z`7<7p)%iBxt9)Z1# z!}*Cz>Ft=YA7FPa3p+X)WBS-xo!nOUU~I6|W8il0&ioYS6_|RmZc6)+T`fCRiTha; z(~+e}(?l%}2a0HpkBLdD;2OKU9wN=p#F%u+w%p2k2HP16^eP0018HIWKoDBIOYf_# zMEz<%TLgOvhe+?_u1>klGU)hdtGX-YrLkQ4CIp$=25V90ilwZ317hOh<1hTU9avCd zs@r9pRJt@e`8^MU2NDmGfOunnha-10n#6H5f&HC?O3kLV)x8o%gt>P#8;$TAJOiPj zXiUwTyK_)%AS11l{x0=KGZJc?FU_sOGPg*2qOkYie(sI)!Vt!E7+U9uwgea)80qwz z=y|Q0w)*~xkkz3vM+-N4{_<$ud50Tl8r5h)Eij~4+CRukDtHOMc*c8IKJ?Jq?sDob zfM>dbMV;|++oSV-avMl~l&3a*D&hzob9?rpG@Hh)$?hMe5IHjD8U zUu?``)4Zd)jdcPkS7JwM&i#gJW(tBhIkoBU67jg%;lijrKeeDBZUR-)D~XWt%i2N7 z7Vh{EF7yk`iP!Wxuo7xf<4S=tbRC!i?@NX6!50vyjs6Jl92Rf3&y0R?gx3rj-mDr4 z3T2>a>M3Zbd?y69J*QYS6m4wzLfLj6&-qRWaG{hPMk}9HRN(MKl*mX@0D~HgErqns zl;R@&`GlC#tQ(O0==;GoCnBJgOSZhsu*fC2?t<)hBOO8I_?%rhExHhTScU44X|aVY zvH*=~D*0d)ijK<9uXlM0)7oV|mD8wIHs1Mbxk7yeYl^I`4K42#I8k*y^a>;nkEQS@ zp3EmqXF{l5WEz7BuQNV}M0au2jG%k53NR&75AfxeHOS1}X^rNn8&;veNg5hBMI8@3{>;&hMpdmx-33YNV?8}^C+4wbq zmBVAIWgO=K>0gy8O3_%|p{jMXcEdU|jYPtH7Jm~jF2saTD$A*b+3<1$n_uDRU?4F2 zS_0RGO7CSk9MtP7H9#KM$((`A=>{pzIN2Ir4r{;cdU#z%?|Ga9Dve#xCIR zMev?VQtuF=&>1N0*GZ*4dPKe<1eCfpL2LuF$ga{dE!n`3?*84Bv(17BUMJR_5u`21 z&5*X0?(%)AmsS5O8jY*RJ2p4Wc`ODiUP&@@1C&1su!EnkH6qR_dM*^hH4f=i8A5?H zXHSoc$$33AYfP@=Lydz!CS;s!zfV_(MB=nlRaGZF;73#-JnlKkWBMx=--{KP&_G@b4D`m3VJ&!DA zt(vK5j+}W2%*nXqKHU8?xbL(0htZvIoP`feriBezm6mF|pZ$>dqTt(U%2>M5RnxNZ zD^04-adW(?zrA>-098a;=HZX$RoU}{teCGJ#9o+L9UJp?A)OE=S?z>bNqC-xxa@X+ z>5y^59M(H^$nnSR$v|4Fw>t%B7Z3d100E_^oNz7ZgyTE@tJ-DNcy{ej%@LU^1Z7t+ zy7≷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

    &6}c{<>(B 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 z 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


    &Eu~p1SLW{8tdH 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
    XR~Rcd9S77rb85(>*sI7woB~S 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 SDoNKbKU60M8^uJnB?%>p33F`0XAo>dO=6W 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 literal 0 HcmV?d00001 diff --git a/asift_match/src/book_training/train_image_003.png b/asift_match/src/book_training/train_image_003.png new file mode 100644 index 0000000000000000000000000000000000000000..289028a2685069b8baf6cbe953876b8847bd30c6 GIT binary patch literal 469122 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

    G%^lpxiloWOT7?;B4dZm%LxusF=s- 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 z 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 z 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�NGj_-EDV?^%}U%AA=X5oO)^38038>3H#4V&0UKc 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 literal 0 HcmV?d00001 diff --git a/asift_match/src/book_training/train_image_005.yml~ b/asift_match/src/book_training/train_image_005.yml~ new file mode 100644 index 0000000..4ae821d --- /dev/null +++ b/asift_match/src/book_training/train_image_005.yml~ @@ -0,0 +1,8 @@ +Book cMo for training image 005 +rows: 4 +cols: 4 +data: + - [-0.2314201876, -0.9583649151, 0.1672763771, 0.09835545579] + - [0.7484075924, -0.06552319445, 0.6599945353, -0.0974700766] + - [-0.6215551242, 0.2779269699, 0.7324109687, 0.5499983612] + - [0; 0; 0; 1] diff --git a/asift_match/src/book_training/train_image_006.yml~ b/asift_match/src/book_training/train_image_006.yml~ new file mode 100644 index 0000000..99858af --- /dev/null +++ b/asift_match/src/book_training/train_image_006.yml~ @@ -0,0 +1,8 @@ +Book cMo for training image 008 +rows: 4 +cols: 4 +data: + - [0.02063568325, -0.5653102458, -0.8246202123, 0.0403687505] + - [0.8210674394, 0.4801939642, -0.3086454546, -0.1745029756] + - [0.5704580865, -0.6706996964, 0.4740669666, 0.4630312508] + - [0, 0, 0, 1] diff --git a/asift_match/src/book_training/train_image_007.yml~ b/asift_match/src/book_training/train_image_007.yml~ new file mode 100644 index 0000000..f729a1b --- /dev/null +++ b/asift_match/src/book_training/train_image_007.yml~ @@ -0,0 +1,9 @@ +Book cMo for training image 007 +rows: 4 +cols: 4 +data: + - [-0.03609085509, -0.3148440768, 0.9484569877, 0.04713881051] + - [-0.8006242946, 0.5771011583, 0.1611055304, 0.02971868344] + - [-0.5980787482, -0.7535432704, -0.2728998912, 0.6240615433] + - [0, 0, 0, 1] + diff --git a/asift_match/src/compute_asift_keypoints.cpp b/asift_match/src/compute_asift_keypoints.cpp new file mode 100755 index 0000000..804d348 --- /dev/null +++ b/asift_match/src/compute_asift_keypoints.cpp @@ -0,0 +1,569 @@ +// Copyright (c) 2008-2011, Guoshen Yu +// Copyright (c) 2008-2011, Jean-Michel Morel +// +// WARNING: +// This file implements an algorithm possibly linked to the patent +// +// Jean-Michel Morel and Guoshen Yu, Method and device for the invariant +// affine recognition recognition of shapes (WO/2009/150361), patent pending. +// +// This file is made available for the exclusive aim of serving as +// scientific tool to verify of the soundness and +// completeness of the algorithm description. Compilation, +// execution and redistribution of this file may violate exclusive +// patents rights in certain countries. +// The situation being different for every country and changing +// over time, it is your responsibility to determine which patent +// rights restrictions apply to you before you compile, use, +// modify, or redistribute this file. A patent lawyer is qualified +// to make this determination. +// If and only if they don't conflict with any patent terms, you +// can benefit from the following license terms attached to this +// file. +// +// This program is provided for scientific and educational only: +// you can use and/or modify it for these purposes, but you are +// not allowed to redistribute this work or derivative works in +// source or executable form. A license must be obtained from the +// patent right holders for any other use. +// +// +//*------------------------ compute_asift_keypoints -------------------------*/ +// Compute the ASIFT keypoints on the input image. +// +// Please report bugs and/or send comments to Guoshen Yu yu@cmap.polytechnique.fr +// +// Reference: J.M. Morel and G.Yu, ASIFT: A New Framework for Fully Affine Invariant Image +// Comparison, SIAM Journal on Imaging Sciences, vol. 2, issue 2, pp. 438-469, 2009. +// Reference: ASIFT online demo (You can try ASIFT with your own images online.) +// http://www.ipol.im/pub/algo/my_affine_sift/ +/*---------------------------------------------------------------------------*/ + + +#include +#include +#include +#include +#include +#include "compute_asift_keypoints.h" + +#ifdef _OPENMP +#include +#endif + + +#define ABS(x) (((x) > 0) ? (x) : (-(x))) + + +/* InitSigma gives the amount of smoothing applied to the image at the +first level of each octave. In effect, this determines the sampling +needed in the image domain relative to amount of smoothing. Good +values determined experimentally are in the range 1.2 to 1.8. +*/ +/* float InitSigma_aa = 1.0;*/ +static float InitSigma_aa = 1.6; + +#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5)) + +/* Gaussian convolution kernels are truncated at this many sigmas from +the center. While it is more efficient to keep this value small, +experiments show that for consistent scale-space analysis it needs +a value of about 3.0, at which point the Gaussian has fallen to +only 1% of its central value. A value of 2.0 greatly reduces +keypoint consistency, and a value of 4.0 is better than 3.0. +*/ +const float GaussTruncate1 = 4.0; + + +/* --------------------------- Blur image --------------------------- */ + + +/* Same as ConvBuffer, but implemented with loop unrolling for increased +speed. This is the most time intensive routine in keypoint detection, +so deserves careful attention to efficiency. Loop unrolling simply +sums 5 multiplications at a time to allow the compiler to schedule +operations better and avoid loop overhead. This almost triples +speed of previous version on a Pentium with gcc. +*/ +void ConvBufferFast(float *buffer, float *kernel, int rsize, int ksize) +{ + int i; + float *bp, *kp, *endkp; + float sum; + + for (i = 0; i < rsize; i++) { + sum = 0.0; + bp = &buffer[i]; + kp = &kernel[0]; + endkp = &kernel[ksize]; + + /* Loop unrolling: do 5 multiplications at a time. */ + // while (kp + 4 < endkp) { + // sum += (double) bp[0] * (double) kp[0] + (double) bp[1] * (double) kp[1] + (double) bp[2] * (double) kp[2] + + // (double) bp[3] * (double) kp[3] + (double) bp[4] * (double) kp[4]; + // bp += 5; + // kp += 5; + // } + // /* Do 2 multiplications at a time on remaining items. */ + // while (kp + 1 < endkp) { + // sum += (double) bp[0] * (double) kp[0] + (double) bp[1] * (double) kp[1]; + // bp += 2; + // kp += 2; + // } + // /* Finish last one if needed. */ + // if (kp < endkp) { + // sum += (double) *bp * (double) *kp; + // } + + while (kp < endkp) { + sum += *bp++ * *kp++; + } + + buffer[i] = sum; + } +} + +/* Convolve image with the 1-D kernel vector along image rows. This +is designed to be as efficient as possible. Pixels outside the +image are set to the value of the closest image pixel. +*/ +void ConvHorizontal(vector& image, int width, int height, float *kernel, int ksize) +{ + int rows, cols, r, c, i, halfsize; + float buffer[4000]; + vector pixels(width*height); + + + rows = height; + cols = width; + + halfsize = ksize / 2; + pixels = image; + assert(cols + ksize < 4000); + + for (r = 0; r < rows; r++) { + /* Copy the row into buffer with pixels at ends replicated for + half the mask size. This avoids need to check for ends + within inner loop. */ + for (i = 0; i < halfsize; i++) + buffer[i] = pixels[r*cols]; + for (i = 0; i < cols; i++) + buffer[halfsize + i] = pixels[r*cols+i]; + for (i = 0; i < halfsize; i++) + buffer[halfsize + cols + i] = pixels[r*cols+cols-1]; + + ConvBufferFast(buffer, kernel, cols, ksize); + for (c = 0; c < cols; c++) + pixels[r*cols+c] = buffer[c]; + } + image = pixels; +} + + +/* Same as ConvHorizontal, but apply to vertical columns of image. +*/ +void ConvVertical(vector& image, int width, int height, float *kernel, int ksize) +{ + int rows, cols, r, c, i, halfsize; + float buffer[4000]; + vector pixels(width*height); + + rows = height; + cols = width; + + halfsize = ksize / 2; + pixels = image; + assert(rows + ksize < 4000); + + for (c = 0; c < cols; c++) { + for (i = 0; i < halfsize; i++) + buffer[i] = pixels[c]; + for (i = 0; i < rows; i++) + buffer[halfsize + i] = pixels[i*cols+c]; + for (i = 0; i < halfsize; i++) + buffer[halfsize + rows + i] = pixels[(rows - 1)*cols+c]; + + ConvBufferFast(buffer, kernel, rows, ksize); + for (r = 0; r < rows; r++) + pixels[r*cols+c] = buffer[r]; + } + + image = pixels; +} + + + +/* 1D Convolve image with a Gaussian of width sigma and store result back +in image. This routine creates the Gaussian kernel, and then applies +it in horizontal (flag_dir=0) OR vertical directions (flag_dir!=0). +*/ +void GaussianBlur1D(vector& image, int width, int height, float sigma, int flag_dir) +{ + float x, kernel[100], sum = 0.0; + int ksize, i; + + /* The Gaussian kernel is truncated at GaussTruncate sigmas from + center. The kernel size should be odd. + */ + ksize = (int)(2.0 * GaussTruncate1 * sigma + 1.0); + ksize = MAX(3, ksize); /* Kernel must be at least 3. */ + if (ksize % 2 == 0) /* Make kernel size odd. */ + ksize++; + assert(ksize < 100); + + /* Fill in kernel values. */ + for (i = 0; i <= ksize; i++) { + x = i - ksize / 2; + kernel[i] = exp(- x * x / (2.0 * sigma * sigma)); + sum += kernel[i]; + } + /* Normalize kernel values to sum to 1.0. */ + for (i = 0; i < ksize; i++) + kernel[i] /= sum; + + if (flag_dir == 0) + { + ConvHorizontal(image, width, height, kernel, ksize); + } + else + { + ConvVertical(image, width, height, kernel, ksize); + } +} + + +void compensate_affine_coor1(float *x0, float *y0, int w1, int h1, float t1, float t2, float Rtheta) +{ + float x_ori, y_ori; + float x_tmp, y_tmp; + + float x1 = *x0; + float y1 = *y0; + + + Rtheta = Rtheta*PI/180; + + if ( Rtheta <= PI/2 ) + { + x_ori = 0; + y_ori = w1 * sin(Rtheta) / t1; + } + else + { + x_ori = -w1 * cos(Rtheta) / t2; + y_ori = ( w1 * sin(Rtheta) + h1 * sin(Rtheta-PI/2) ) / t1; + } + + float sin_Rtheta = sin(Rtheta); + float cos_Rtheta = cos(Rtheta); + + + /* project the coordinates of im1 to original image before tilt-rotation transform */ + /* Get the coordinates with respect to the 'origin' of the original image before transform */ + x1 = x1 - x_ori; + y1 = y1 - y_ori; + /* Invert tilt */ + x1 = x1 * t2; + y1 = y1 * t1; + /* Invert rotation (Note that the y direction (vertical) is inverse to the usual concention. Hence Rtheta instead of -Rtheta to inverse the rotation.) */ + x_tmp = cos_Rtheta*x1 - sin_Rtheta*y1; + y_tmp = sin_Rtheta*x1 + cos_Rtheta*y1; + x1 = x_tmp; + y1 = y_tmp; + + *x0 = x1; + *y0 = y1; +} + + +/* -------------- MAIN FUNCTION ---------------------- */ + +int compute_asift_keypoints(vector& image, int width, int height, int num_of_tilts, int verb, vector< vector< keypointslist > >& keys_all, siftPar &siftparameters) +// Compute ASIFT keypoints in the input image. +// Input: +// image: input image +// width, height: width and height of the input image. +// num_of_tilts: number of tilts to simulate. +// verb: 1/0 --> show/don not show verbose messages. (1 for debugging) +// keys_all (output): ASIFT keypoints. It is a 2D matrix with varying rows and columns. Each entry keys_all[tt][rr] +// stores the SIFT keypoints calculated on the image with the simulated tilt index tt and simulated rotation index rr (see the code below). In the coordinates of the keypoints, +// the affine distortions have been compensated. +// siftparameters: SIFT parameters. +// +// Output: the number of keypoints +{ + vector image_t, image_tmp1, image_tmp; + + float t_min, t_k; + int num_tilt, tt, num_rot_t2, rr; + int fproj_o; + float fproj_p, fproj_bg; + char fproj_i; + float *fproj_x4, *fproj_y4; + // float frot_b=0; + float frot_b=128; + char *frot_k; + int counter_sim=0, num_sim; + int flag_dir = 1; + float BorderFact=6*sqrt(2.); + + int num_keys_total=0; + + + fproj_o = 3; + fproj_p = 0; + fproj_i = 0; + fproj_bg = 0; + fproj_x4 = 0; + fproj_y4 = 0; + + frot_k = 0; + + num_rot_t2 = 10; + + t_min = 1; + t_k = sqrt(2.); + + + num_tilt = num_of_tilts; + + + if ( num_tilt < 1) + { + printf("Number of tilts num_tilt should be equal or larger than 1. \n"); + exit(-1); + } + + image_tmp1 = image; + + + /* Calculate the number of simulations, and initialize keys_all */ + keys_all = std::vector< vector< keypointslist > >(num_tilt); + for (tt = 1; tt <= num_tilt; tt++) + { + float t = t_min * pow(t_k, tt-1); + + if ( t == 1 ) + { + counter_sim ++; + + keys_all[tt-1] = std::vector< keypointslist >(1); + } + else + { + int num_rot1 = round(num_rot_t2*t/2); + if ( num_rot1%2 == 1 ) + { + num_rot1 = num_rot1 + 1; + } + num_rot1 = num_rot1 / 2; + counter_sim += num_rot1; + + keys_all[tt-1] = std::vector< keypointslist >(num_rot1); + } + } + + num_sim = counter_sim; + + if ( verb ) + { + printf("%d affine simulations will be performed. \n", num_sim); + } + + counter_sim = 0; + + + + /* Affine simulation (rotation+tilt simulation) */ + // Loop on tilts. +#ifdef _OPENMP + omp_set_nested(1); +#endif +#pragma omp parallel for private(tt) + for (tt = 1; tt <= num_tilt; tt++) + { + float t = t_min * pow(t_k, tt-1); + + float t1 = 1; + float t2 = 1/t; + + // If tilt t = 1, do not simulate rotation. + if ( t == 1 ) + { + // copy the image from vector to array as compute_sift_keypoints uses only array. + float *image_tmp1_float = new float[width*height]; + for (int cc = 0; cc < width*height; cc++) + image_tmp1_float[cc] = image_tmp1[cc]; + + compute_sift_keypoints(image_tmp1_float,keys_all[tt-1][0],width,height,siftparameters); + + delete[] image_tmp1_float; + + } + else + { + // The number of rotations to simulate under the current tilt. + int num_rot1 = round(num_rot_t2*t/2); + + if ( num_rot1%2 == 1 ) + { + num_rot1 = num_rot1 + 1; + } + num_rot1 = num_rot1 / 2; + float delta_theta = PI/num_rot1; + + // Loop on rotations. +#pragma omp parallel for private(rr) + for ( int rr = 1; rr <= num_rot1; rr++ ) + { + float theta = delta_theta * (rr-1); + theta = theta * 180 / PI; + + vector image_t; + int width_r, height_r; + + // simulate a rotation: rotate the image with an angle theta. (the outside of the rotated image are padded with the value frot_b) + frot(image, image_t, width, height, &width_r, &height_r, &theta, &frot_b , frot_k); + + /* Tilt */ + int width_t = (int) (width_r * t1); + int height_t = (int) (height_r * t2); + + int fproj_sx = width_t; + int fproj_sy = height_t; + + float fproj_x1 = 0; + float fproj_y1 = 0; + float fproj_x2 = width_t; + float fproj_y2 = 0; + float fproj_x3 = 0; + float fproj_y3 = height_t; + + /* Anti-aliasing filtering along vertical direction */ + /* sigma_aa = InitSigma_aa * log2(t);*/ + float sigma_aa = InitSigma_aa * t / 2; + GaussianBlur1D(image_t,width_r,height_r,sigma_aa,flag_dir); + + + // simulate a tilt: subsample the image along the vertical axis by a factor of t. + vector image_tmp(width_t*height_t); + fproj (image_t, image_tmp, width_r, height_r, &fproj_sx, &fproj_sy, &fproj_bg, &fproj_o, &fproj_p, &fproj_i , fproj_x1 , fproj_y1 , fproj_x2 , fproj_y2 , fproj_x3 , fproj_y3, fproj_x4, fproj_y4); + + vector image_tmp1 = image_tmp; + + if ( verb ) + { + printf("Rotation theta = %.2f, Tilt t = %.2f. w=%d, h=%d, sigma_aa=%.2f, \n", theta, t, width_t, height_t, sigma_aa); + } + + + float *image_tmp1_float = new float[width_t*height_t]; + for (int cc = 0; cc < width_t*height_t; cc++) + image_tmp1_float[cc] = image_tmp1[cc]; + + // compute SIFT keypoints on simulated image. + keypointslist keypoints; + keypointslist keypoints_filtered; + compute_sift_keypoints(image_tmp1_float,keypoints,width_t,height_t,siftparameters); + + delete[] image_tmp1_float; + + /* check if the keypoint is located on the boundary of the parallelogram (i.e., the boundary of the distorted input image). If so, remove it to avoid boundary artifacts. */ + if ( keypoints.size() != 0 ) + { + for ( int cc = 0; cc < (int) keypoints.size(); cc++ ) + { + + float x0, y0, x1, y1, x2, y2, x3, y3 ,x4, y4, d1, d2, d3, d4, scale1, theta1, sin_theta1, cos_theta1, BorderTh; + + x0 = keypoints[cc].x; + y0 = keypoints[cc].y; + scale1= keypoints[cc].scale; + + theta1 = theta * PI / 180; + sin_theta1 = sin(theta1); + cos_theta1 = cos(theta1); + + /* the coordinates of the 4 submits of the parallelogram */ + if ( theta <= 90 ) + { + x1 = height * sin_theta1; + y1 = 0; + y2 = width * sin_theta1; + x3 = width * cos_theta1; + x4 = 0; + y4 = height * cos_theta1; + x2 = x1 + x3; + y3 = y2 + y4; + + /* note that the vertical direction goes from top to bottom!!! + The calculation above assumes that the vertical direction goes from the bottom to top. Thus the vertical coordinates need to be reversed!!! */ + y1 = y3 - y1; + y2 = y3 - y2; + y4 = y3 - y4; + y3 = 0; + + y1 = y1 * t2; + y2 = y2 * t2; + y3 = y3 * t2; + y4 = y4 * t2; + } + else + { + y1 = -height * cos_theta1; + x2 = height * sin_theta1; + x3 = 0; + y3 = width * sin_theta1; + x4 = -width * cos_theta1; + y4 = 0; + x1 = x2 + x4; + y2 = y1 + y3; + + /* note that the vertical direction goes from top to bottom!!! + The calculation above assumes that the vertical direction goes from the bottom to top. Thus the vertical coordinates need to be reversed!!! */ + y1 = y2 - y1; + y3 = y2 - y3; + y4 = y2 - y4; + y2 = 0; + + y1 = y1 * t2; + y2 = y2 * t2; + y3 = y3 * t2; + y4 = y4 * t2; + } + + /* the distances from the keypoint to the 4 sides of the parallelogram */ + d1 = ABS((x2-x1)*(y1-y0)-(x1-x0)*(y2-y1)) / sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); + d2 = ABS((x3-x2)*(y2-y0)-(x2-x0)*(y3-y2)) / sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)); + d3 = ABS((x4-x3)*(y3-y0)-(x3-x0)*(y4-y3)) / sqrt((x4-x3)*(x4-x3)+(y4-y3)*(y4-y3)); + d4 = ABS((x1-x4)*(y4-y0)-(x4-x0)*(y1-y4)) / sqrt((x1-x4)*(x1-x4)+(y1-y4)*(y1-y4)); + + BorderTh = BorderFact*scale1; + + if (!((d1 +// Copyright (c) 2008-2011, Jean-Michel Morel +// +// WARNING: +// This file implements an algorithm possibly linked to the patent +// +// Jean-Michel Morel and Guoshen Yu, Method and device for the invariant +// affine recognition recognition of shapes (WO/2009/150361), patent pending. +// +// This file is made available for the exclusive aim of serving as +// scientific tool to verify of the soundness and +// completeness of the algorithm description. Compilation, +// execution and redistribution of this file may violate exclusive +// patents rights in certain countries. +// The situation being different for every country and changing +// over time, it is your responsibility to determine which patent +// rights restrictions apply to you before you compile, use, +// modify, or redistribute this file. A patent lawyer is qualified +// to make this determination. +// If and only if they don't conflict with any patent terms, you +// can benefit from the following license terms attached to this +// file. +// +// This program is provided for scientific and educational only: +// you can use and/or modify it for these purposes, but you are +// not allowed to redistribute this work or derivative works in +// source or executable form. A license must be obtained from the +// patent right holders for any other use. +// +// +//*------------------------ compute_asift_keypoints -------------------------*/ +// Compute the ASIFT keypoints on the input image. +// +// Please report bugs and/or send comments to Guoshen Yu yu@cmap.polytechnique.fr +// +// Reference: J.M. Morel and G.Yu, ASIFT: A New Framework for Fully Affine Invariant Image +// Comparison, SIAM Journal on Imaging Sciences, vol. 2, issue 2, pp. 438-469, 2009. +// Reference: ASIFT online demo (You can try ASIFT with your own images online.) +// http://www.ipol.im/pub/algo/my_affine_sift/ +/*---------------------------------------------------------------------------*/ + + +#include "library.h" +#include "demo_lib_sift.h" +#include "frot.h" +#include "fproj.h" +#include +using namespace std; + + +int compute_asift_keypoints(vector& image, int width, int height, int num_of_tilts, int verb, vector< vector< keypointslist > >& keys_all, siftPar &siftparameters); + +void GaussianBlur1D(vector& image, int width, int height, float sigma, int flag_dir); diff --git a/asift_match/src/compute_asift_matches.cpp b/asift_match/src/compute_asift_matches.cpp new file mode 100755 index 0000000..70a0cb1 --- /dev/null +++ b/asift_match/src/compute_asift_matches.cpp @@ -0,0 +1,791 @@ +// Copyright (c) 2008-2011, Guoshen Yu +// Copyright (c) 2008-2011, Jean-Michel Morel +// +// WARNING: +// This file implements an algorithm possibly linked to the patent +// +// Jean-Michel Morel and Guoshen Yu, Method and device for the invariant +// affine recognition recognition of shapes (WO/2009/150361), patent pending. +// +// This file is made available for the exclusive aim of serving as +// scientific tool to verify of the soundness and +// completeness of the algorithm description. Compilation, +// execution and redistribution of this file may violate exclusive +// patents rights in certain countries. +// The situation being different for every country and changing +// over time, it is your responsibility to determine which patent +// rights restrictions apply to you before you compile, use, +// modify, or redistribute this file. A patent lawyer is qualified +// to make this determination. +// If and only if they don't conflict with any patent terms, you +// can benefit from the following license terms attached to this +// file. +// +// This program is provided for scientific and educational only: +// you can use and/or modify it for these purposes, but you are +// not allowed to redistribute this work or derivative works in +// source or executable form. A license must be obtained from the +// patent right holders for any other use. +// +// +//*------------------------ compute_asift_matches-- -------------------------*/ +// Match the ASIFT keypoints. +// +// Please report bugs and/or send comments to Guoshen Yu yu@cmap.polytechnique.fr +// +// Reference: J.M. Morel and G.Yu, ASIFT: A New Framework for Fully Affine Invariant Image +// Comparison, SIAM Journal on Imaging Sciences, vol. 2, issue 2, pp. 438-469, 2009. +// Reference: ASIFT online demo (You can try ASIFT with your own images online.) +// http://www.ipol.im/pub/algo/my_affine_sift/ +/*---------------------------------------------------------------------------*/ + + +#include +#include +#include +#include +#include + +#ifdef _OPENMP +#include +#endif + +#include "compute_asift_matches.h" +#include "libMatch/match.h" +#include "orsa.h" + + +#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5)) + +/* Remove the repetitive matches that appear in different simulations and retain only one */ +void unique_match1(matchingslist &seg_in, matchingslist &seg_out, vector< vector > &Minfoall_in, vector< vector > &Minfoall_out) +{ + int i_in, i_out; + float x1_in, x2_in, y1_in, y2_in, x1_out, x2_out, y1_out, y2_out; + int flag_unique; + float d1, d2; + int Th2 = 2; + + seg_out.push_back(seg_in[0]); + Minfoall_out.push_back(Minfoall_in[0]); + + /* For other matches */ + if ( seg_in.size() > 1 ) + { + /* check if a match is unique. if yes, copy */ + /* Bug fix by Xiaoyu Sun (Sichuan university) (Dec 13, 2015) */ + /* Original version + matchingslist::iterator ptr_in = seg_in.begin(); + for ( i_in = 1; i_in < (int) seg_in.size(); i_in++, ptr_in++ ) + */ + /* Bug fixed */ + matchingslist::iterator ptr_in = seg_in.begin(); + ptr_in++; + for ( i_in = 1; i_in < (int) seg_in.size(); i_in++, ptr_in++ ) + { + x1_in = ptr_in->first.x; + y1_in = ptr_in->first.y; + x2_in = ptr_in->second.x; + y2_in = ptr_in->second.y; + + flag_unique = 1; + + matchingslist::iterator ptr_out = seg_out.begin(); + for ( i_out = 0; i_out < (int) seg_out.size(); i_out++, ptr_out++ ) + { + x1_out = ptr_out->first.x; + y1_out = ptr_out->first.y; + x2_out = ptr_out->second.x; + y2_out = ptr_out->second.y; + + d1 = (x1_in - x1_out)*(x1_in - x1_out) + (y1_in - y1_out)*(y1_in - y1_out); + d2 = (x2_in - x2_out)*(x2_in - x2_out) + (y2_in - y2_out)*(y2_in - y2_out); + + + if ( ( d1 <= Th2) && ( d2 <= Th2) ) + { + flag_unique = 0; + continue; + } + } + + if ( flag_unique == 1 ) + { + seg_out.push_back(seg_in[i_in]); + Minfoall_out.push_back(Minfoall_in[i_in]); + } + } + } +} + +/* Remove the ALL one-to-multiple matches. */ +void clean_match1(matchingslist &seg_in, matchingslist &seg_out, vector< vector > &Minfoall_in, vector< vector > &Minfoall_out) +{ + int i1, i2; + float x1_in, x2_in, y1_in, y2_in, x1_out, x2_out, y1_out, y2_out; + + // Guoshen Yu, 2010.09.22, Windows version + // int flag_unique[seg_in.size()]; + int tmp_size = seg_in.size(); + int *flag_unique = new int[tmp_size]; + + int sum_flag=0; + float d1, d2; + int Th1 = 1; + int Th2 = 4; + + for ( i1 = 0; i1 < (int) seg_in.size(); i1++ ) + { + flag_unique[i1] = 1; + } + + /* Set the flag of redundant matches to 0. */ + matchingslist::iterator ptr_in = seg_in.begin(); + for ( i1 = 0; i1 < (int) seg_in.size() - 1; i1++, ptr_in++ ) + { + x1_in = ptr_in->first.x; + y1_in = ptr_in->first.y; + x2_in = ptr_in->second.x; + y2_in = ptr_in->second.y; + + matchingslist::iterator ptr_out = ptr_in+1; + for ( i2 = i1 + 1; i2 < (int) seg_in.size(); i2++, ptr_out++ ) + { + x1_out = ptr_out->first.x; + y1_out = ptr_out->first.y; + x2_out = ptr_out->second.x; + y2_out = ptr_out->second.y; + + d1 = (x1_in - x1_out)*(x1_in - x1_out) + (y1_in - y1_out)*(y1_in - y1_out); + d2 = (x2_in - x2_out)*(x2_in - x2_out) + (y2_in - y2_out)*(y2_in - y2_out); + + /* If redundant, set flags of both elements to 0.*/ + if ( ( ( d1 <= Th1) && ( d2 > Th2) ) || ( ( d1 > Th2) && ( d2 <= Th1) ) ) + { + flag_unique[i1] = 0; + flag_unique[i2] = 0; + } + } + } + + for ( i1 = 0; i1 < (int) seg_in.size(); i1++ ) + { + sum_flag += flag_unique[i1]; + } + + /* Copy the matches that are not redundant */ + if ( sum_flag > 0 ) + { + for ( i1 = 0; i1 < (int) seg_in.size(); i1++ ) + { + if ( flag_unique[i1] == 1 ) + { + seg_out.push_back(seg_in[i1]); + Minfoall_out.push_back(Minfoall_in[i1]); + } + } + } + else + { + printf("Warning: all matches are redundant and are thus removed! This step of match cleaning is short circuited. (Normally this should not happen...)\n"); + } + + // Guoshen Yu, 2010.09.22, Windows version + delete [] flag_unique; +} + + +/* Remove the ALL multiple-to-one matches */ +void clean_match2(matchingslist &seg_in, matchingslist &seg_out, vector< vector > &Minfoall_in, vector< vector > &Minfoall_out) +{ + int i1, i2; + float x1_in, x2_in, y1_in, y2_in, x1_out, x2_out, y1_out, y2_out; + + // Guoshen Yu, 2010.09.22, Windows version + // int flag_unique[seg_in.size()]; + int tmp_size = seg_in.size(); + int *flag_unique = new int[tmp_size]; + + int sum_flag=0; + float d1, d2; + int Th1 = 1; + int Th2 = 4; + + for ( i1 = 0; i1 < (int) seg_in.size(); i1++ ) + { + flag_unique[i1] = 1; + } + + /* Set the flag of redundant matches to 0. */ + matchingslist::iterator ptr_in = seg_in.begin(); + for ( i1 = 0; i1 < (int) seg_in.size() - 1; i1++, ptr_in++ ) + { + x1_in = ptr_in->first.x; + y1_in = ptr_in->first.y; + x2_in = ptr_in->second.x; + y2_in = ptr_in->second.y; + + matchingslist::iterator ptr_out = ptr_in+1; + for ( i2 = i1 + 1; i2 < (int) seg_in.size(); i2++, ptr_out++ ) + { + + x1_out = ptr_out->first.x; + y1_out = ptr_out->first.y; + x2_out = ptr_out->second.x; + y2_out = ptr_out->second.y; + + d1 = (x1_in - x1_out)*(x1_in - x1_out) + (y1_in - y1_out)*(y1_in - y1_out); + d2 = (x2_in - x2_out)*(x2_in - x2_out) + (y2_in - y2_out)*(y2_in - y2_out); + + + /* If redundant, set flags of both elements to 0.*/ + if ( ( d1 > Th2) && ( d2 <= Th1) ) + { + flag_unique[i1] = 0; + flag_unique[i2] = 0; + } + } + } + + for ( i1 = 0; i1 < (int) seg_in.size(); i1++ ) + { + sum_flag += flag_unique[i1]; + } + + /* Copy the matches that are not redundant */ + if ( sum_flag > 0 ) + { + for ( i1 = 0; i1 < (int) seg_in.size(); i1++ ) + { + if ( flag_unique[i1] == 1 ) + { + seg_out.push_back(seg_in[i1]); + Minfoall_out.push_back(Minfoall_in[i1]); + } + } + } + else + { + printf("Warning: all matches are redundant and are thus removed! This step of match cleaning is short circuited. (Normally this should not happen...)\n"); + } + + // Guoshen Yu, 2010.09.22, Windows version + delete [] flag_unique; +} + + +// Normalize the coordinates of the matched points by compensating the simulate affine transformations +void compensate_affine_coor(matching &matching1, int w1, int h1, int w2, int h2, float t1, float t2, float Rtheta, float t_im2_1, float t_im2_2, float Rtheta2) +{ + float x_ori, y_ori; + float x_ori2, y_ori2, x_tmp, y_tmp; + float x1, y1, x2, y2; + + Rtheta = Rtheta*PI/180; + + if ( Rtheta <= PI/2 ) + { + x_ori = 0; + y_ori = w1 * sin(Rtheta) / t1; + } + else + { + x_ori = -w1 * cos(Rtheta) / t2; + y_ori = ( w1 * sin(Rtheta) + h1 * sin(Rtheta-PI/2) ) / t1; + } + + Rtheta2 = Rtheta2*PI/180; + + if ( Rtheta2 <= PI/2 ) + { + x_ori2 = 0; + y_ori2 = w2 * sin(Rtheta2) / t_im2_1; + } + else + { + x_ori2 = -w2 * cos(Rtheta2) / t_im2_2; + y_ori2 = ( w2 * sin(Rtheta2) + h2 * sin(Rtheta2-PI/2) ) / t_im2_1; + } + + float sin_Rtheta = sin(Rtheta); + float cos_Rtheta = cos(Rtheta); + float sin_Rtheta2 = sin(Rtheta2); + float cos_Rtheta2 = cos(Rtheta2); + + x1 = matching1.first.x; + y1 = matching1.first.y; + x2 = matching1.second.x; + y2 = matching1.second.y; + + /* project the coordinates of im1 to original image before tilt-rotation transform */ + /* Get the coordinates with respect to the 'origin' of the original image before transform */ + x1 = x1 - x_ori; + y1 = y1 - y_ori; + /* Invert tilt */ + x1 = x1 * t2; + y1 = y1 * t1; + /* Invert rotation (Note that the y direction (vertical) is inverse to the usual concention. Hence Rtheta instead of -Rtheta to inverse the rotation.) */ + x_tmp = cos_Rtheta*x1 - sin_Rtheta*y1; + y_tmp = sin_Rtheta*x1 + cos_Rtheta*y1; + x1 = x_tmp; + y1 = y_tmp; + + /* Coordinate projection on image2 */ + + /* Get the coordinates with respect to the 'origin' of the original image before transform */ + x2 = x2 - x_ori2; + y2 = y2 - y_ori2; + /* Invert tilt */ + x2 = x2 * t_im2_2; + y2 = y2 * t_im2_1; + /* Invert rotation (Note that the y direction (vertical) is inverse to the usual concention. Hence Rtheta instead of -Rtheta to inverse the rotation.) */ + x_tmp = cos_Rtheta2*x2 - sin_Rtheta2*y2; + y_tmp = sin_Rtheta2*x2 + cos_Rtheta2*y2; + x2 = x_tmp; + y2 = y_tmp; + + matching1.first.x = x1; + matching1.first.y = y1; + matching1.second.x = x2; + matching1.second.y = y2; +} + +int compute_asift_matches(int num_of_tilts1, int num_of_tilts2, int w1, int h1, int w2, int h2, int verb, vector< vector< keypointslist > >& keys1, vector< vector< keypointslist > >& keys2, matchingslist &matchings, siftPar &siftparameters) +// Match the ASIFT keypoints. +// Input: +// num_of_tilts1, num_of_tilts2: number of tilts that have been simulated on the two images. (They can be different.) +// w1, h1, w2, h2: widht/height of image1/image2. +// verb: 1/0 --> show/don not show verbose messages. (1 for debugging) +// keys1, keys2: ASIFT keypoints of image1/image2. (They should be calculated with compute_asift_keypoints.) +// matchings (output): the coordinates (col1, row1, col2, row2) of all the matching points. +// +// Output: the number of matching points. +{ + float t_min, t_k, t; + int num_tilt1, num_tilt2, tt, num_rot_t2, num_rot1, rr; + int cc; + + int tt2, rr2, num_rot1_2; + float t_im2; + + /* It stores the coordinates of ALL matches points of ALL affine simulations */ + vector< vector > Minfoall; + + int Tmin = 8; + float nfa_max = -2; + + num_rot_t2 = 10; + + t_min = 1; + t_k = sqrt(2.); + + num_tilt1 = num_of_tilts1; + num_tilt2 = num_of_tilts2; + + if ( ( num_tilt1 < 1 ) || ( num_tilt2 < 1 ) ) + { + printf("Number of tilts num_tilt should be equal or larger than 1. \n"); + exit(-1); + } + + + /* Initialize the vector structure for the matching points */ + std::vector< vector< vector < vector < matchingslist > > > > matchings_vec(num_tilt1); + std::vector< vector< vector< vector< vector< vector > > > > > Minfoall_vec(num_tilt1); + for (tt = 1; tt <= num_tilt1; tt++) + { + t = t_min * pow(t_k, tt-1); + if ( t == 1 ) + { + num_rot1 = 1; + } + else + { + num_rot1 = round(num_rot_t2*t/2); + if ( num_rot1%2 == 1 ) + { + num_rot1 = num_rot1 + 1; + } + num_rot1 = num_rot1 / 2; + } + + matchings_vec[tt-1].resize(num_rot1); + Minfoall_vec[tt-1].resize(num_rot1); + + for ( rr = 1; rr <= num_rot1; rr++ ) + { + + matchings_vec[tt-1][rr-1].resize(num_tilt2); + Minfoall_vec[tt-1][rr-1].resize(num_tilt2); + + for (tt2 = 1; tt2 <= num_tilt2; tt2++) + { + t_im2 = t_min * pow(t_k, tt2-1); + if ( t_im2 == 1 ) + { + num_rot1_2 = 1; + } + else + { + num_rot1_2 = round(num_rot_t2*t_im2/2); + if ( num_rot1_2%2 == 1 ) + { + num_rot1_2 = num_rot1_2 + 1; + } + num_rot1_2 = num_rot1_2 / 2; + } + + matchings_vec[tt-1][rr-1][tt2-1].resize(num_rot1_2); + Minfoall_vec[tt-1][rr-1][tt2-1].resize(num_rot1_2); + } + } + } + + + ///* + // * setup the tilt and rotation parameters + // * for all the loops, this vector will hold + // * the following parameters: + // * tt, num_rot1, rr, tt2, num_rot1_2, rr2 + // */ + //vector tilt_rot; + ///* loop on tilts for image 1 */ + //for (int tt = 1; tt <= num_tilt1; tt++) + //{ + // float t = t_min * pow(t_k, tt-1); + // int num_rot1; + // /* if tilt t = 1, do not simulate rotation. */ + // if ( 1 == tt ) + // num_rot1 = 1; + // else + // { + // /* number of rotations to simulate */ + // num_rot1 = round(num_rot_t2 * t / 2); + // if ( num_rot1%2 == 1 ) + // num_rot1 = num_rot1 + 1; + // num_rot1 = num_rot1 / 2; + // } + // /* loop on rotations for image 1 */ + // for (int rr = 1; rr <= num_rot1; rr++ ) + // { + // /* loop on tilts for image 2 */ + // for (int tt2 = 1; tt2 <= num_tilt2; tt2++) + // { + // float t_im2 = t_min * pow(t_k, tt2-1); + // int num_rot1_2; + // if ( tt2 == 1 ) + // num_rot1_2 = 1; + // else + // { + // num_rot1_2 = round(num_rot_t2 * t_im2 / 2); + // if ( num_rot1_2%2 == 1 ) + // num_rot1_2 = num_rot1_2 + 1; + // num_rot1_2 = num_rot1_2 / 2; + // } + // /* loop on rotations for image 2 */ + // for (int rr2 = 1; rr2 <= num_rot1_2; rr2++ ) + // { + // tilt_rot.push_back(tt); + // tilt_rot.push_back(num_rot1); + // tilt_rot.push_back(rr); + // tilt_rot.push_back(tt2); + // tilt_rot.push_back(num_rot1_2); + // tilt_rot.push_back(rr2); + // } + // } + // } + //} + + /* Calculate the number of simulations */ +#ifdef _OPENMP + omp_set_nested(1); +#endif + // loop on tilts for image 1. +#pragma omp parallel for private(tt) + for (int tt = 1; tt <= num_tilt1; tt++) + { + + float t = t_min * pow(t_k, tt-1); + + /* Attention: the t1, t2 do not follow the same convention as in compute_asift_keypoints */ + float t1 = t; + float t2 = 1; + + int num_rot1; + + // If tilt t = 1, do not simulate rotation. + if ( tt == 1 ) + { + num_rot1 = 1; + } + else + { + // The number of rotations to simulate under the current tilt. + num_rot1 = round(num_rot_t2*t/2); + if ( num_rot1%2 == 1 ) + { + num_rot1 = num_rot1 + 1; + } + num_rot1 = num_rot1 / 2; + } + + + float delta_theta = PI/num_rot1; + + // Loop on rotations for image 1. +#pragma omp parallel for private(rr) + for ( int rr = 1; rr <= num_rot1; rr++ ) + { + float theta = delta_theta * (rr-1); + theta = theta * 180 / PI; + + /* Read the keypoints of image 1 */ + keypointslist keypoints1 = keys1[tt-1][rr-1]; + + // loop on tilts for image 2. +#pragma omp parallel for private(tt2) + for (int tt2 = 1; tt2 <= num_tilt2; tt2++) + { + float t_im2 = t_min * pow(t_k, tt2-1); + + /* Attention: the t1, t2 do not follow the same convention as in asift_v1.c */ + float t_im2_1 = t_im2; + float t_im2_2 = 1; + + int num_rot1_2; + + if ( tt2 == 1 ) + { + num_rot1_2 = 1; + } + else + { + num_rot1_2 = round(num_rot_t2*t_im2/2); + if ( num_rot1_2%2 == 1 ) + { + num_rot1_2 = num_rot1_2 + 1; + } + num_rot1_2 = num_rot1_2 / 2; + } + + float delta_theta2 = PI/num_rot1_2; + +#pragma omp parallel for private(rr2) + // Loop on rotations for image 2. + for ( int rr2 = 1; rr2 <= num_rot1_2; rr2++ ) + { + float theta2 = delta_theta2 * (rr2-1); + theta2 = theta2 * 180 / PI; + + /* Read the keypoints of image2. */ + keypointslist keypoints2 = keys2[tt2-1][rr2-1]; + + + // Match the keypoints of image1 and image2. + matchingslist matchings1; + compute_sift_matches(keypoints1,keypoints2,matchings1,siftparameters); + + if ( verb ) + { + printf("t1=%.2f, theta1=%.2f, num keys1 = %d, t2=%.2f, theta2=%.2f, num keys2 = %d, num matches=%d\n", t, theta, (int) keypoints1.size(), t_im2, theta2, (int) keypoints2.size(), (int) matchings1.size()); + } + + /* Store the matches */ + if ( matchings1.size() > 0 ) + { + matchings_vec[tt-1][rr-1][tt2-1][rr2-1] = matchingslist(matchings1.size()); + Minfoall_vec[tt-1][rr-1][tt2-1][rr2-1].resize(matchings1.size()); + + for ( int cc = 0; cc < (int) matchings1.size(); cc++ ) + { + ///// In the coordinates the affine transformations have been normalized already in compute_asift_keypoints. So no need to normalize here. + // Normalize the coordinates of the matched points by compensating the simulate affine transformations + // compensate_affine_coor(matchings1[cc], w1, h1, w2, h2, t1, t2, theta, t_im2_1, t_im2_2, theta2); + + matchings_vec[tt-1][rr-1][tt2-1][rr2-1][cc] = matchings1[cc]; + + vector Minfo_1match(6); + Minfo_1match[0] = t1; + Minfo_1match[1] = t2; + Minfo_1match[2] = theta; + Minfo_1match[3] = t_im2_1; + Minfo_1match[4] = t_im2_2; + Minfo_1match[5] = theta2; + Minfoall_vec[tt-1][rr-1][tt2-1][rr2-1][cc] = Minfo_1match; + } + } + } + } + } + } + + // Move the matches to a 1D vector + for (tt = 1; tt <= num_tilt1; tt++) + { + t = t_min * pow(t_k, tt-1); + + if ( t == 1 ) + { + num_rot1 = 1; + } + else + { + num_rot1 = round(num_rot_t2*t/2); + if ( num_rot1%2 == 1 ) + { + num_rot1 = num_rot1 + 1; + } + num_rot1 = num_rot1 / 2; + } + + for ( rr = 1; rr <= num_rot1; rr++ ) + { + for (tt2 = 1; tt2 <= num_tilt2; tt2++) + { + t_im2 = t_min * pow(t_k, tt2-1); + if ( t_im2 == 1 ) + { + num_rot1_2 = 1; + } + else + { + num_rot1_2 = round(num_rot_t2*t_im2/2); + if ( num_rot1_2%2 == 1 ) + { + num_rot1_2 = num_rot1_2 + 1; + } + num_rot1_2 = num_rot1_2 / 2; + } + + for ( rr2 = 1; rr2 <= num_rot1_2; rr2++ ) + { + for ( cc=0; cc < (int) matchings_vec[tt-1][rr-1][tt2-1][rr2-1].size(); cc++ ) + { + matchings.push_back(matchings_vec[tt-1][rr-1][tt2-1][rr2-1][cc]); + Minfoall.push_back(Minfoall_vec[tt-1][rr-1][tt2-1][rr2-1][cc]); + } + } + } + } + } + + if ( verb ) + { + printf("The number of matches is %d \n", (int) matchings.size()); + } + + + if ( matchings.size() > 0 ) + { + /* Remove the repetitive matches that appear in different simulations and retain only one. */ + // Since tilts are simuated on both image 1 and image 2, it is normal to have repetitive matches. + matchingslist matchings_unique; + vector< vector > Minfoall_unique; + unique_match1(matchings, matchings_unique, Minfoall, Minfoall_unique); + matchings = matchings_unique; + Minfoall = Minfoall_unique; + + if ( verb ) + { + printf("The number of unique matches is %d \n", (int) matchings.size()); + } + + // There often appear to be some one-to-multiple/multiple-to-one matches (one point in image 1 matches with many points in image 2/vice versa). + // This is an artifact of SIFT on interpolated images, as the interpolation tends to create some auto-similar structures (steps for example). + // These matches need to be removed. + /* Separating the removal of multiple-to-one and one-to-multiple in two steps: + - first remove multiple-to-one + - then remove one-to-multiple + This allows to avoid removing some good matches: multiple-to-one matches is much more frequent than one-to-multiple. Sometimes some of the feature points in image 1 that take part in "multiple-to-one" bad matches have also correct matches in image 2. The modified scheme avoid removing these good matches. */ + + // Remove to multiple-to-one matches + matchings_unique.clear(); + Minfoall_unique.clear(); + clean_match2(matchings, matchings_unique, Minfoall, Minfoall_unique); + matchings = matchings_unique; + Minfoall = Minfoall_unique; + + // Remove to one-to-multiple matches + matchings_unique.clear(); + Minfoall_unique.clear(); + clean_match1(matchings, matchings_unique, Minfoall, Minfoall_unique); + matchings = matchings_unique; + Minfoall = Minfoall_unique; + + + if ( verb ) + { + printf("The number of final matches is %d \n", (int) matchings.size()); + } + + // If enough matches to do epipolar filtering + if ( (int) matchings.size() >= Tmin ) + { + //////// Use ORSA to filter out the incorrect matches. + // store the coordinates of the matching points + vector match_coor; + for ( cc = 0; cc < (int) matchings.size(); cc++ ) + { + Match match1_coor; + match1_coor.x1 = matchings[cc].first.x; + match1_coor.y1 = matchings[cc].first.y; + match1_coor.x2 = matchings[cc].second.x; + match1_coor.y2 = matchings[cc].second.y; + + match_coor.push_back(match1_coor); + } + + std::vector index; + // Guoshen Yu, 2010.09.23 + // index.clear(); + + int t_value_orsa=10000; + int verb_value_orsa=0; + int n_flag_value_orsa=0; + int mode_value_orsa=2; + int stop_value_orsa=0; + + // epipolar filtering with the Moisan-Stival ORSA algorithm. +// float nfa = orsa(w1, h1, match_coor, index, t_value_orsa, verb_value_orsa, n_flag_value_orsa, mode_value_orsa, stop_value_orsa); + float nfa = orsa((w1+w2)/2, (h1+h2)/2, match_coor, index, t_value_orsa, verb_value_orsa, n_flag_value_orsa, mode_value_orsa, stop_value_orsa); + + + // if the matching is significant, register the good matches + if ( nfa < nfa_max ) + { + // extract meaningful matches + matchings_unique.clear(); + Minfoall_unique.clear(); + for ( cc = 0; cc < (int) index.size(); cc++ ) + { + matchings_unique.push_back(matchings[(int)index[cc]]); + Minfoall_unique.push_back(Minfoall[(int)index[cc]]); + } + matchings = matchings_unique; + Minfoall = Minfoall_unique; + + cout << "The two images match! " << matchings.size() << " matchings are identified. log(nfa)=" << nfa << "." << endl; + } + else + { + matchings.clear(); + Minfoall.clear(); + cout << "The two images do not match. The matching is not significant: log(nfa)=" << nfa << "." << endl; + } + } + else + { + matchings.clear(); + Minfoall.clear(); + cout << "The two images do not match. Not enough matches to do epipolar filtering." << endl; + } + } + else + { + cout << "The two images do not match.\n" << endl; + } + + return matchings.size(); + +} + diff --git a/asift_match/src/compute_asift_matches.h b/asift_match/src/compute_asift_matches.h new file mode 100755 index 0000000..2aa24a3 --- /dev/null +++ b/asift_match/src/compute_asift_matches.h @@ -0,0 +1,51 @@ +// Copyright (c) 2008-2011, Guoshen Yu +// Copyright (c) 2008-2011, Jean-Michel Morel +// +// WARNING: +// This file implements an algorithm possibly linked to the patent +// +// Jean-Michel Morel and Guoshen Yu, Method and device for the invariant +// affine recognition recognition of shapes (WO/2009/150361), patent pending. +// +// This file is made available for the exclusive aim of serving as +// scientific tool to verify of the soundness and +// completeness of the algorithm description. Compilation, +// execution and redistribution of this file may violate exclusive +// patents rights in certain countries. +// The situation being different for every country and changing +// over time, it is your responsibility to determine which patent +// rights restrictions apply to you before you compile, use, +// modify, or redistribute this file. A patent lawyer is qualified +// to make this determination. +// If and only if they don't conflict with any patent terms, you +// can benefit from the following license terms attached to this +// file. +// +// This program is provided for scientific and educational only: +// you can use and/or modify it for these purposes, but you are +// not allowed to redistribute this work or derivative works in +// source or executable form. A license must be obtained from the +// patent right holders for any other use. +// +// +//*------------------------ compute_asift_matches-- -------------------------*/ +// Match the ASIFT keypoints. +// +// Please report bugs and/or send comments to Guoshen Yu yu@cmap.polytechnique.fr +// +// Reference: J.M. Morel and G.Yu, ASIFT: A New Framework for Fully Affine Invariant Image +// Comparison, SIAM Journal on Imaging Sciences, vol. 2, issue 2, pp. 438-469, 2009. +// Reference: ASIFT online demo (You can try ASIFT with your own images online.) +// http://www.ipol.im/pub/algo/my_affine_sift/ +/*---------------------------------------------------------------------------*/ + +#include "library.h" +#include "demo_lib_sift.h" +#include "frot.h" +#include "fproj.h" +#include +using namespace std; + + +int compute_asift_matches(int num_of_tilts1, int num_of_tilts2, int w1, int h1, int w2, int h2, int verb, vector< vector< keypointslist > >& keys1, vector< vector< keypointslist > >& keys2, matchingslist &matchings, siftPar &siftparameters); + diff --git a/asift_match/src/demo_lib_sift.cpp b/asift_match/src/demo_lib_sift.cpp new file mode 100755 index 0000000..76058bb --- /dev/null +++ b/asift_match/src/demo_lib_sift.cpp @@ -0,0 +1,1222 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +// WARNING: +// This file implements an algorithm possibly linked to the patent +// +// David Lowe "Method and apparatus for identifying scale invariant +// features in an image and use of same for locating an object in an +// image", U.S. Patent 6,711,293. +// +// This file is made available for the exclusive aim of serving as +// scientific tool to verify of the soundness and +// completeness of the algorithm description. Compilation, +// execution and redistribution of this file may violate exclusive +// patents rights in certain countries. +// The situation being different for every country and changing +// over time, it is your responsibility to determine which patent +// rights restrictions apply to you before you compile, use, +// modify, or redistribute this file. A patent lawyer is qualified +// to make this determination. +// If and only if they don't conflict with any patent terms, you +// can benefit from the following license terms attached to this +// file. +// +// This program is provided for scientific and educational only: +// you can use and/or modify it for these purposes, but you are +// not allowed to redistribute this work or derivative works in +// source or executable form. A license must be obtained from the +// patent right holders for any other use. + + +#include "demo_lib_sift.h" + +#define DEBUG 0 + +#define ABS(x) (((x) > 0) ? (x) : (-(x))) + + +void default_sift_parameters(siftPar &par) +{ + par.OctaveMax=100000; + par.DoubleImSize = 0; + par.order = 3; + par.InitSigma = 1.6; + par.BorderDist = 5; + par.Scales = 3; + par.PeakThresh = 255.0 * 0.04 / 3.0; + par.EdgeThresh = 0.06; + par.EdgeThresh1 = 0.08; + par.OriBins = 36; + par.OriSigma = 1.5; + par.OriHistThresh = 0.8; + par.MaxIndexVal = 0.2; + par.MagFactor = 3; + par.IndexSigma = 1.0; + par.IgnoreGradSign = 0; +// par.MatchRatio = 0.6; +// par.MatchRatio = 0.75; // Guoshen Yu. Since l1 distance is used for matching instead of l2, a larger threshold is needed. + par.MatchRatio = 0.73; // Guoshen Yu. Since l1 distance is used for matching instead of l2, a larger threshold is needed. + par.MatchXradius = 1000000.0f; + par.MatchYradius = 1000000.0f; + + par.noncorrectlylocalized = 0; + +}; + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// SIFT Keypoint detection +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + +void OctaveKeypoints(flimage & image, float octSize, keypointslist& keys,siftPar &par); + +void FindMaxMin( flimage* dogs, flimage* blur, float octSize ,keypointslist& keys,siftPar &par); + +bool LocalMax(float val, flimage& dog, int y0, int x0); + +bool LocalMin(float val, flimage& dog, int y0, int x0); + +bool LocalMaxMin(float val, const flimage& dog, int y0, int x0); + +int NotOnEdge( flimage& dog, int r, int c, float octSize,siftPar &par); + +float FitQuadratic(float offset[3], flimage* dogs, int s, int r, int c); + +void InterpKeyPoint( + flimage* dogs, int s, int r, int c, + const flimage& grad, const flimage& ori, flimage& map, + float octSize, keypointslist& keys, int movesRemain,siftPar &par); + +void AssignOriHist( + const flimage& grad, const flimage& ori, float octSize, + float octScale, float octRow, float octCol, keypointslist& keys,siftPar &par); + +void SmoothHistogram( + float* hist, int bins); + +float InterpPeak( + float a, float b, float c); + +void MakeKeypoint( + const flimage& grad, const flimage& ori, float octSize, float octScale, + float octRow, float octCol, float angle, keypointslist& keys,siftPar &par); + +void MakeKeypointSample( + keypoint& key, const flimage& grad, const flimage& ori, + float scale, float row, float col,siftPar &par); + +void NormalizeVec( + float* vec); + +void KeySampleVec( + keypoint& key, const flimage& grad, const flimage& ori, + float scale, float row, float col,siftPar &par); + +void KeySample( + float index[IndexSize][IndexSize][OriSize], keypoint& key, + const flimage& grad, const flimage& ori, + float scale, float row, float col,siftPar &par); + +void AddSample( + float index[IndexSize][IndexSize][OriSize], keypoint& key, + const flimage& grad, const flimage& orim, + float r, float c, float rpos, float cpos, float rx, float cx,siftPar &par); + +void PlaceInIndex( + float index[IndexSize][IndexSize][OriSize], + float mag, float ori, float rx, float cx,siftPar &par); + + + + +void compute_sift_keypoints(float *input, keypointslist& keypoints, int width, int height, siftPar &par) +{ + + flimage image; + + /// Make zoom of image if necessary + float octSize = 1.0; + if (par.DoubleImSize){ + + //printf("... compute_sift_keypoints :: applying zoom\n"); +// image.create(2*width, 2*height); +// apply_zoom(input,image.getPlane(),2.0,par.order,width,height); +// octSize *= 0.5; + + printf("Doulbe image size not allowed. Guoshen Yu\n"); + exit(-1); + + + + } else + { + + image.create(width,height,input); + } + +// printf("Using initial Dog value: %f\n", par.PeakThresh); +// printf("Double image size: %d\n", par.DoubleImSize); +// printf("Interpolation order: %d\n", par.order); + + + /// Apply initial smoothing to input image to raise its smoothing to par.InitSigma. + /// We assume image from camera has smoothing of sigma = 0.5, which becomes sigma = 1.0 if image has been doubled. + /// increase = sqrt(Init^2 - Current^2) + float curSigma; + if (par.DoubleImSize) curSigma = 1.0; else curSigma = 0.5; + + + if (par.InitSigma > curSigma ) { + + if (DEBUG) printf("Convolving initial image to achieve std: %f \n", par.InitSigma); + + float sigma = (float) sqrt((double)(par.InitSigma * par.InitSigma - curSigma * curSigma)); + + gaussian_convolution( image.getPlane(), image.getPlane(), image.nwidth(), image.nheight(), sigma); + + } + + + + /// Convolve by par.InitSigma at each step inside OctaveKeypoints by steps of + /// Subsample of factor 2 while reasonable image size + + /// Keep reducing image by factors of 2 until one dimension is + /// smaller than minimum size at which a feature could be detected. + int minsize = 2 * par.BorderDist + 2; + int OctaveCounter = 0; + //printf("... compute_sift_keypoints :: maximum number of scales : %d\n", par.OctaveMax); + + while (image.nwidth() > minsize && image.nheight() > minsize && OctaveCounter < par.OctaveMax) { + + if (DEBUG) printf("Calling OctaveKeypoints \n"); + + OctaveKeypoints(image, octSize, keypoints,par); + + // image is blurred inside OctaveKeypoints and therefore can be sampled + flimage aux( (int)((float) image.nwidth() / 2.0f) , (int)((float) image.nheight() / 2.0f)); + + if (DEBUG) printf("Sampling initial image \n"); + + sample(image.getPlane(), aux.getPlane(), 2.0f, image.nwidth(), image.nheight()); + + image = aux; + + octSize *= 2.0; + + OctaveCounter++; + + } + + +/* printf("sift:: %d keypoints\n", keypoints.size()); + printf("sift:: plus non correctly localized: %d \n", par.noncorrectlylocalized);*/ + +} + + + +///////////////////////////////////////////////// +/// EXTREMA DETECTION IN ONE SCALE-SPACE OCTAVE: +///////////////////////////////////////////////// + +/// par.Scales determine how many steps we perform to pass from one scale to the next one: sigI --> 2*sigI +/// At each step we pass from sigma_0 --> sigma0 * (1 + R) +/// At the last step sigI * (1 + R)^par.Scales = 2 * sigI +/// (1+R) = 2 ^(1 / par.Scales) it is called sigmaRatio + +/// It seems that blur[par.Scales+1] is compared in two succesive iterations +void OctaveKeypoints(flimage & image, float octSize, keypointslist& keys,siftPar &par) +{ + // Guoshen Yu, 2010.09.21, Windows version + // flimage blur[par.Scales+3], dogs[par.Scales+2]; + int size_blur = par.Scales+3; + int size_dogs = par.Scales+2; + flimage *blur = new flimage[size_blur]; + flimage *dogs = new flimage[size_dogs]; + + float sigmaRatio = (float) pow(2.0, 1.0 / (double) par.Scales); + + + /* Build array, blur, holding par.Scales+3 blurred versions of the image. */ + blur[0] = flimage(image); /* First level is input to this routine. */ + float prevSigma = par.InitSigma; /* Input image has par.InitSigma smoothing. */ + + + /* Form each level by adding incremental blur from previous level. + Increase in blur is from prevSigma to prevSigma * sigmaRatio, so + increase^2 = (prevSigma * sigmaRatio)^2 - prevSigma^2 + */ + for (int i = 1; i < par.Scales + 3; i++) { + + if (DEBUG) printf("Convolving scale: %d \n", i); + + blur[i] = flimage(blur[i-1]); + + float increase = prevSigma*(float)sqrt((double)(sigmaRatio*sigmaRatio-1.0)); + + gaussian_convolution( blur[i].getPlane(), blur[i].getPlane(), blur[i].nwidth(), blur[i].nheight(), increase); + + prevSigma *= sigmaRatio; + + } + + + /* Compute an array, dogs, of difference-of-Gaussian images by + subtracting each image from its next blurred version. */ + for (int i = 0; i < par.Scales + 2; i++) { + + dogs[i] = flimage(blur[i]); + + /// dogs[i] = dogs[i] - blur[i+1] + combine(dogs[i].getPlane(),1.0f, blur[i+1].getPlane(),-1.0f, dogs[i].getPlane(), dogs[i].nwidth() * dogs[i].nheight()); + } + + + // Image with exact blur to be subsampled is blur[scales] + image = blur[par.Scales]; + + /* Scale-space extrema detection in this octave */ + if (DEBUG) printf("Looking for local maxima \n"); + + FindMaxMin(dogs, blur, octSize, keys,par); + + // Guoshen Yu, 2010.09.22, Windows version + delete [] blur; + delete [] dogs; +} + + +///////////////////////////////////////////////// +///Find the local maxima and minima of the DOG images in scale space. Return the keypoints for these locations. +///////////////////////////////////////////////// + +/// For each point at each scale we decide if it is a local maxima: +/// - |dogs(x,y,s)| > 0.8 * par.PeakThresh +/// - Local maximum or minimum in s-1,s,s+1 +/// - NotonEdge: ratio of the two principle curvatures of the DOG function at this point be below a threshold. + + +/// blur[par.Scales+1] is not used in order to look for extrema +/// while these could be computed using avalaible blur and dogs +void FindMaxMin( + flimage* dogs, flimage* blur, + float octSize, keypointslist& keys,siftPar &par) +{ + + int width = dogs[0].nwidth(), height = dogs[0].nheight(); + + /* Create an image map in which locations that have a keypoint are + marked with value 1.0, to prevent two keypoints being located at + same position. This may seem an inefficient data structure, but + does not add significant overhead. + */ + flimage map(width,height,0.0f); + flimage grad(width,height,0.0f); + flimage ori(width,height,0.0f); + + /* Search through each scale, leaving 1 scale below and 1 above. + There are par.Scales+2 dog images. + */ + for (int s = 1; s < par.Scales+1; s++) { + + if (DEBUG) printf("************************scale: %d\n", s); + + //getchar(); + + /* For each intermediate image, compute gradient and orientation + images to be used for keypoint description. */ + compute_gradient_orientation(blur[s].getPlane(), grad.getPlane(), ori.getPlane(), blur[s].nwidth(), blur[s].nheight()); + + + /* Only find peaks at least par.BorderDist samples from image border, as + peaks centered close to the border will lack stability. */ + assert(par.BorderDist >= 2); + float val; + int partialcounter = 0; + for (int r = par.BorderDist; r < height - par.BorderDist; r++) + for (int c = par.BorderDist; c < width - par.BorderDist; c++) { + + /* Pixel value at (c,r) position. */ + val = dogs[s](c,r); + + /* DOG magnitude must be above 0.8 * par.PeakThresh threshold + (precise threshold check will be done once peak + interpolation is performed). Then check whether this + point is a peak in 3x3 region at each level, and is not + on an elongated edge. + */ + + if (fabs(val) > 0.8 * par.PeakThresh) + { + +/* + + // If local maxima + if (LocalMax(val, dogs[s-1], r, c,par) && LocalMax(val, dogs[s], r, c, par) && LocalMax(val, dogs[s+1], r, c,par) && NotOnEdge(dogs[s], r, c, octSize,par)) + { + if (DEBUG) printf("Maximum Keypoint found (%d,%d,%d) val: %f\n",s,r,c,val); + InterpKeyPoint( + dogs, s, r, c, grad, ori, + map, octSize, keys, 5,par); + + } else if (LocalMin(val, dogs[s-1], r, c,par) && LocalMin(val, dogs[s], r, c,par) && LocalMin(val, dogs[s+1], r, c,par) && NotOnEdge(dogs[s], r, c, octSize,par)) + { + if (DEBUG) printf("Minimum Keypoint found (%d,%d,%d) val: %f\n",s,r,c,val); + InterpKeyPoint( + dogs, s, r, c, grad, ori, + map, octSize, keys, 5,par); + } +*/ + if (LocalMaxMin(val, dogs[s-1], r, c) && LocalMaxMin(val, dogs[s], r, c) && LocalMaxMin(val, dogs[s+1], r, c) && NotOnEdge(dogs[s], r, c, octSize,par)) + { + partialcounter++; + if (DEBUG) printf("%d: (%d,%d,%d) val: %f\n",partialcounter, s,r,c,val); + + InterpKeyPoint( + dogs, s, r, c, grad, ori, + map, octSize, keys, 5,par); + + //getchar(); + } + + + } + + } + } + +} + + +//bool LocalMax(float val, flimage& dog, int y0, int x0, siftPar &par) +bool LocalMax(float val, flimage& dog, int y0, int x0) +{ + for (int x = x0 - 1; x <= x0 + 1; x++) + for (int y = y0 - 1; y <= y0 + 1; y++){ + //printf("%f \t", dog(x,y)); + if (dog(x,y) > val) return 0; + } + + return 1; +} + +bool LocalMin(float val, flimage& dog, int y0, int x0) +{ + for (int x = x0 - 1; x <= x0 + 1; x++) + for (int y = y0 - 1; y <= y0 + 1; y++){ + //printf("%f \t", dog(x,y)); + if (dog(x,y) < val) return 0; + } + + return 1; +} + + +/* Return TRUE iff val is a local maximum (positive value) or + minimum (negative value) compared to the 3x3 neighbourhood that + is centered at (row,col). +*/ +bool LocalMaxMin(float val, const flimage& dog, int y0, int x0) +{ + // For efficiency, use separate cases for maxima or minima, and + // return as soon as possible + if (val > 0.0) { + for (int x = x0 - 1; x <= x0 + 1; x++) + for (int y = y0 - 1; y <= y0 + 1; y++){ + if (dog(x,y) > val) return false; + } + } else { + for (int x = x0 - 1; x <= x0 + 1; x++) + for (int y = y0 - 1; y <= y0 + 1; y++){ + if (dog(x,y) < val) return false; + } + } + + return true; +} + + + +/* Returns FALSE if this point on the DOG function lies on an edge. + This test is done early because it is very efficient and eliminates + many points. It requires that the ratio of the two principle + curvatures of the DOG function at this point be below a threshold. + + Edge threshold is higher on the first scale where SNR is small in + order to reduce the number of unstable keypoints. +*/ +int NotOnEdge(flimage& dog, int r, int c, float octSize,siftPar &par) +{ + /* Compute 2x2 Hessian values from pixel differences. */ + float H00 = dog(c,r-1) - 2.0 * dog(c,r) + dog(c,r+1), /* AMIR: div by ? */ + H11 = dog(c-1,r) - 2.0 * dog(c,r) + dog(c+1,r), + H01 = ( (dog(c+1,r+1) - dog(c-1,r+1)) - (dog(c+1,r-1) - dog(c-1,r-1)) ) / 4.0; + + /* Compute determinant and trace of the Hessian. */ + float det = H00 * H11 - H01 * H01, /// Det H = \prod l_i + trace = H00 + H11; /// tr H = \sum l_i + + /// As we do not desire edges but only corners we demand l_max / l_min less than a threshold + /// In practice if A = k B, A*B = k B^2 + /// (A + B)^2 = (k+1)^2 * B^2 + /// k B^2 > t * (k+1)^2 * B^2 sii k / (k+1)^2 > t + /// This is a decreasing function for k > 1 and value 0.3 at k=1. + /// Setting t = 0.08, means k<=10 + + /* To detect an edge response, we require the ratio of smallest + to largest principle curvatures of the DOG function + (eigenvalues of the Hessian) to be below a threshold. For + efficiency, we use Harris' idea of requiring the determinant to + be above par.EdgeThresh times the squared trace, as for eigenvalues + A and B, det = AB, trace = A+B. So if A = 10B, then det = 10B**2, + and trace**2 = (11B)**2 = 121B**2, so par.EdgeThresh = 10/121 = + 0.08 to require ratio of eigenvalues less than 10. + */ + if (octSize <= 1) + return (det > par.EdgeThresh1 * trace * trace); + else + return (det > par.EdgeThresh * trace * trace); + +} + + +/* Create a keypoint at a peak near scale space location (s,r,c), where + s is scale (index of DOGs image), and (r,c) is (row, col) location. + Add to the list of keys with any new keys added. +*/ +void InterpKeyPoint( + flimage* dogs, int s, int r, int c, + const flimage& grad, const flimage& ori, flimage& map, + float octSize, keypointslist& keys, int movesRemain,siftPar &par) +{ + + /* Fit quadratic to determine offset and peak value. */ + float offset[3]; + float peakval = FitQuadratic(offset, dogs, s, r, c); + if (DEBUG) printf("peakval: %f, of[0]: %f of[1]: %f of[2]: %f\n", peakval, offset[0], offset[1], offset[2]); + + /* Move to an adjacent (row,col) location if quadratic interpolation + is larger than 0.6 units in some direction (we use 0.6 instead of + 0.5 to avoid jumping back and forth near boundary). We do not + perform move to adjacent scales, as it is seldom useful and we + do not have easy access to adjacent scale structures. The + movesRemain counter allows only a fixed number of moves to + prevent possibility of infinite loops. + */ + int newr = r, newc = c; + if (offset[1] > 0.6 && r < dogs[0].nheight() - 3) + newr++; + else if (offset[1] < -0.6 && r > 3) + newr--; + + if (offset[2] > 0.6 && c < dogs[0].nwidth() - 3) + newc++; + else if (offset[2] < -0.6 && c > 3) + newc--; + + if (movesRemain > 0 && (newr != r || newc != c)) { + InterpKeyPoint( + dogs, s, newr, newc, grad, ori, map, + octSize, keys,movesRemain - 1,par); + return; + } + + /* Do not create a keypoint if interpolation still remains far + outside expected limits, or if magnitude of peak value is below + threshold (i.e., contrast is too low). */ + if ( fabs(offset[0]) > 1.5 || fabs(offset[1]) > 1.5 || + fabs(offset[2]) > 1.5 || fabs(peakval) < par.PeakThresh) + { + if (DEBUG) printf("Point not well localized by FitQuadratic\n"); + par.noncorrectlylocalized++; + return; + } + + /* Check that no keypoint has been created at this location (to avoid + duplicates). Otherwise, mark this map location. + */ + if (map(c,r) > 0.0) return; + map(c,r) = 1.0; + + /* The scale relative to this octave is given by octScale. The scale + units are in terms of sigma for the smallest of the Gaussians in the + DOG used to identify that scale. + */ + // Guoshen Yu, 2010.09.21 Windows version + // float octScale = par.InitSigma * pow(2.0, (s + offset[0]) / (float) par.Scales); + float octScale = par.InitSigma * pow(2.0, (s + offset[0]) / (double) par.Scales); + + /// always use histogram of orientations + //if (UseHistogramOri) + AssignOriHist( + grad, ori, octSize, octScale, + r + offset[1], c + offset[2], keys, par); + //else + // AssignOriAvg( + // grad, ori, octSize, octScale, + // r + offset[1], c + offset[2], keys); +} + + + +/* Apply the method developed by Matthew Brown (see BMVC 02 paper) to + fit a 3D quadratic function through the DOG function values around + the location (s,r,c), i.e., (scale,row,col), at which a peak has + been detected. Return the interpolated peak position as a vector + in "offset", which gives offset from position (s,r,c). The + returned value is the interpolated DOG magnitude at this peak. +*/ +float FitQuadratic(float offset[3], flimage* dogs, int s, int r, int c) +{ + float g[3]; + flimage *dog0, *dog1, *dog2; + int i; + + //s = 1; r = 128; c = 128; + + float ** H = allocate_float_matrix(3, 3); + + /* Select the dog images at peak scale, dog1, as well as the scale + below, dog0, and scale above, dog2. */ + dog0 = &dogs[s-1]; + dog1 = &dogs[s]; + dog2 = &dogs[s+1]; + + /* Fill in the values of the gradient from pixel differences. */ + g[0] = ((*dog2)(c,r) - (*dog0)(c,r)) / 2.0; + g[1] = ((*dog1)(c,r+1) - (*dog1)(c,r-1)) / 2.0; + g[2] = ((*dog1)(c+1,r) - (*dog1)(c-1,r)) / 2.0; + + /* Fill in the values of the Hessian from pixel differences. */ + H[0][0] = (*dog0)(c,r) - 2.0 * (*dog1)(c,r) + (*dog2)(c,r); + H[1][1] = (*dog1)(c,r-1) - 2.0 * (*dog1)(c,r) + (*dog1)(c,r+1); + H[2][2] = (*dog1)(c-1,r) - 2.0 * (*dog1)(c,r) + (*dog1)(c+1,r); + H[0][1] = H[1][0] = ( ((*dog2)(c,r+1) - (*dog2)(c,r-1)) - + ((*dog0)(c,r+1) - (*dog0)(c,r-1)) ) / 4.0; + H[0][2] = H[2][0] = ( ((*dog2)(c+1,r) - (*dog2)(c-1,r)) - + ((*dog0)(c+1,r) - (*dog0)(c-1,r)) ) / 4.0; + H[1][2] = H[2][1] = ( ((*dog1)(c+1,r+1) - (*dog1)(c-1,r+1)) - + ((*dog1)(c+1,r-1) - (*dog1)(c-1,r-1)) ) / 4.0; + + /* Solve the 3x3 linear sytem, Hx = -g. Result, x, gives peak offset. + Note that SolveLinearSystem destroys contents of H. */ + offset[0] = - g[0]; + offset[1] = - g[1]; + offset[2] = - g[2]; + +// for(i=0; i < 3; i++){ +// +// for(j=0; j < 3; j++) printf("%f ", H[i][j]); +// printf("\n"); +// } + +// printf("\n"); +// +// for(i=0; i < 3; i++) printf("%f ", offset[i]); +// printf("\n"); + + float solution[3]; + lusolve(H, solution, offset,3); + +// printf("\n"); +// for(i=0; i < 3; i++) printf("%f ", solution[i]); +// printf("\n"); + + + desallocate_float_matrix(H,3,3); + delete[] H; /*memcheck*/ + + /* Also return value of DOG at peak location using initial value plus + 0.5 times linear interpolation with gradient to peak position + (this is correct for a quadratic approximation). + */ + for(i=0; i < 3; i++) offset[i] = solution[i]; + + return ((*dog1)(c,r) + 0.5 * (solution[0]*g[0]+solution[1]*g[1]+solution[2]*g[2])); +} + + + +/// - Compute histogram of orientation in a neighborhood weighted by gradient and distance to center +/// - Look for local (3-neighborhood) maximum with valuer larger or equal than par.OriHistThresh * maxval + + +/* Assign an orientation to this keypoint. This is done by creating a + Gaussian weighted histogram of the gradient directions in the + region. The histogram is smoothed and the largest peak selected. + The results are in the range of -PI to PI. +*/ +void AssignOriHist( + const flimage& grad, const flimage& ori, float octSize, + float octScale, float octRow, float octCol,keypointslist& keys,siftPar &par) +{ + int bin, prev, next; + + // Guoshen Yu, 2010.09.21 Windows version +// float hist[par.OriBins], distsq, dif, gval, weight, angle, interp; + float distsq, dif, gval, weight, angle, interp; + int tmp_size = par.OriBins; + float *hist = new float[tmp_size]; + + float radius2, sigma2; + + int row = (int) (octRow+0.5), + col = (int) (octCol+0.5), + rows = grad.nheight(), + cols = grad.nwidth(); + + for (int i = 0; i < par.OriBins; i++) hist[i] = 0.0; + + /* Look at pixels within 3 sigma around the point and sum their + Gaussian weighted gradient magnitudes into the histogram. */ + float sigma = par.OriSigma * octScale; + int radius = (int) (sigma * 3.0); + int rmin = MAX(0,row-radius); + int cmin = MAX(0,col-radius); + int rmax = MIN(row+radius,rows-2); + int cmax = MIN(col+radius,cols-2); + radius2 = (float)(radius * radius); + sigma2 = 2.0*sigma*sigma; + + for (int r = rmin; r <= rmax; r++) { + for (int c = cmin; c <= cmax; c++) { + + gval = grad(c,r); + + dif = (r - octRow); distsq = dif*dif; + dif = (c - octCol); distsq += dif*dif; + + if (gval > 0.0 && distsq < radius2 + 0.5) { + + weight = exp(- distsq / sigma2); + + /* Ori is in range of -PI to PI. */ + angle = ori(c,r); + bin = (int) (par.OriBins * (angle + PI + 0.001) / (2.0 * PI)); + assert(bin >= 0 && bin <= par.OriBins); + bin = MIN(bin, par.OriBins - 1); + hist[bin] += weight * gval; + + } + + } + } + + + /* Apply smoothing 6 times for accurate Gaussian approximation. */ + for (int i = 0; i < 6; i++) + SmoothHistogram(hist, par.OriBins); + + /* Find maximum value in histogram. */ + float maxval = 0.0; + for (int i = 0; i < par.OriBins; i++) + if (hist[i] > maxval) maxval = hist[i]; + + /* Look for each local peak in histogram. If value is within + par.OriHistThresh of maximum value, then generate a keypoint. */ + for (int i = 0; i < par.OriBins; i++) { + prev = (i == 0 ? par.OriBins - 1 : i - 1); + next = (i == par.OriBins - 1 ? 0 : i + 1); + + if ( hist[i] > hist[prev] && hist[i] > hist[next] && + hist[i] >= par.OriHistThresh * maxval ) { + + /* Use parabolic fit to interpolate peak location from 3 samples. + Set angle in range -PI to PI. */ + interp = InterpPeak(hist[prev], hist[i], hist[next]); + angle = 2.0 * PI * (i + 0.5 + interp) / par.OriBins - PI; + assert(angle >= -PI && angle <= PI); + + if (DEBUG) printf("angle selected: %f \t location: (%f,%f)\n", angle, octRow, octCol); +; + /* Create a keypoint with this orientation. */ + MakeKeypoint( + grad, ori, octSize, octScale, + octRow, octCol, angle, keys,par); + } + + } + + // Guoshen Yu, 2010.09.22, Windows version + delete [] hist; +} + + + +/* Smooth a histogram by using a [1/3 1/3 1/3] kernel. Assume the histogram + is connected in a circular buffer. +*/ +void SmoothHistogram(float* hist, int bins) +{ + float prev, temp; + + prev = hist[bins - 1]; + for (int i = 0; i < bins; i++) { + temp = hist[i]; + hist[i] = ( prev + hist[i] + hist[(i + 1 == bins) ? 0 : i + 1] ) / 3.0; + prev = temp; + } +} + + +/* Return a number in the range [-0.5, 0.5] that represents the + location of the peak of a parabola passing through the 3 evenly + spaced samples. The center value is assumed to be greater than or + equal to the other values if positive, or less than if negative. +*/ +float InterpPeak(float a, float b, float c) +{ + if (b < 0.0) { + a = -a; b = -b; c = -c; + } + assert(b >= a && b >= c); + return 0.5 * (a - c) / (a - 2.0 * b + c); +} + + + + + +/* Joan Pau: Add a new keypoint to a vector of keypoints + Create a new keypoint and return list of keypoints with new one added. +*/ +void MakeKeypoint( + const flimage& grad, const flimage& ori, float octSize, float octScale, + float octRow, float octCol, float angle, keypointslist& keys,siftPar &par) +{ + keypoint newkeypoint; + newkeypoint.x = octSize * octCol; /*x coordinate */ + newkeypoint.y = octSize * octRow; /*y coordinate */ + newkeypoint.scale = octSize * octScale; /* scale */ + newkeypoint.angle = angle; /* orientation */ + MakeKeypointSample(newkeypoint,grad,ori,octScale,octRow,octCol,par); + keys.push_back(newkeypoint); +} + + + +/* Use the parameters of this keypoint to sample the gradient images + at a set of locations within a circular region around the keypoint. + The (scale,row,col) values are relative to current octave sampling. + The resulting vector is stored in the key. +*/ +void MakeKeypointSample( + keypoint& key, const flimage& grad, const flimage& ori, + float scale, float row, float col,siftPar &par) +{ + /* Produce sample vector. */ + KeySampleVec(key, grad, ori, scale, row, col,par); + + + /* Normalize vector. This should provide illumination invariance + for planar lambertian surfaces (except for saturation effects). + Normalization also improves nearest-neighbor metric by + increasing relative distance for vectors with few features. + It is also useful to implement a distance threshold and to + allow conversion to integer format. + */ + NormalizeVec(key.vec); + + /* Now that normalization has been done, threshold elements of + index vector to decrease emphasis on large gradient magnitudes. + Admittedly, the large magnitude values will have affected the + normalization, and therefore the threshold, so this is of + limited value. + */ + bool changed = false; + for (int i = 0; i < VecLength; i++) + if (key.vec[i] > par.MaxIndexVal) { + key.vec[i] = par.MaxIndexVal; + changed = true; + } + + if (changed) NormalizeVec(key.vec); + + /* Convert float vector to integer. Assume largest value in normalized + vector is likely to be less than 0.5. */ + /// QUESTION: why is the vector quantized to integer + int intval; + for (int i = 0; i < VecLength; i++) { + intval = (int)(512.0 * key.vec[i]); + key.vec[i] = (int) MIN(255, intval); + } +} + +/* Normalize length of vec to 1.0. +*/ +void NormalizeVec(float* vec) +{ + float val, fac; + + float sqlen = 0.0; + for (int i = 0; i < VecLength; i++) { + val = vec[i]; + sqlen += val * val; + } + fac = 1.0 / sqrt(sqlen); + + for (int i = 0; i < VecLength; i++) + vec[i] *= fac; +} + + +/* Create a 3D index array into which gradient values are accumulated. + After filling array, copy values back into vec. +*/ +void KeySampleVec( + keypoint& key, const flimage& grad, const flimage& ori, + float scale, float row, float col,siftPar &par) +{ + + float index[IndexSize][IndexSize][OriSize]; + + /* Initialize index array. */ + for (int i = 0; i < IndexSize; i++) + for (int j = 0; j < IndexSize; j++) + for (int k = 0; k < OriSize; k++) + index[i][j][k] = 0.0; + + + KeySample(index, key, grad, ori, scale, row, col, par); + + + /* Unwrap the 3D index values into 1D vec. */ + int v = 0; + for (int i = 0; i < IndexSize; i++) + for (int j = 0; j < IndexSize; j++) + for (int k = 0; k < OriSize; k++) + key.vec[v++] = index[i][j][k]; +} + + + +/* Add features to vec obtained from sampling the grad and ori images + for a particular scale. Location of key is (scale,row,col) with respect + to images at this scale. We examine each pixel within a circular + region containing the keypoint, and distribute the gradient for that + pixel into the appropriate bins of the index array. +*/ +void KeySample( + float index[IndexSize][IndexSize][OriSize], keypoint& key, + const flimage& grad, const flimage& ori, float scale, float row, float col,siftPar &par) +{ + float rpos, cpos, rx, cx; + + int irow = (int) (row + 0.5), + icol = (int) (col + 0.5); + float sine = (float) sin(key.angle), + cosine = (float) cos(key.angle); + + /* The spacing of index samples in terms of pixels at this scale. */ + float spacing = scale * par.MagFactor; + + /* Radius of index sample region must extend to diagonal corner of + index patch plus half sample for interpolation. */ + float radius = 1.414 * spacing * (IndexSize + 1) / 2.0; + int iradius = (int) (radius + 0.5); + + /* Examine all points from the gradient image that could lie within the + index square. */ + for (int i = -iradius; i <= iradius; i++) { + for (int j = -iradius; j <= iradius; j++) { + + /* Rotate sample offset to make it relative to key orientation. + Uses (row,col) instead of (x,y) coords. Also, make subpixel + correction as later image offset must be an integer. Divide + by spacing to put in index units. + */ + + /* Guoshen Yu, inverse the rotation */ + rpos = ((cosine * i - sine * j) - (row - irow)) / spacing; + cpos = ((sine * i + cosine * j) - (col - icol)) / spacing; + + /* + rpos = ((cosine * i + sine * j) - (row - irow)) / spacing; + cpos = ((- sine * i + cosine * j) - (col - icol)) / spacing;*/ + + /* Compute location of sample in terms of real-valued index array + coordinates. Subtract 0.5 so that rx of 1.0 means to put full + weight on index[1] (e.g., when rpos is 0 and IndexSize is 3. */ + rx = rpos + IndexSize / 2.0 - 0.5; + cx = cpos + IndexSize / 2.0 - 0.5; + + /* Test whether this sample falls within boundary of index patch. */ + if ( rx > -1.0 && rx < (float) IndexSize && + cx > -1.0 && cx < (float) IndexSize ) + AddSample( + index, key, grad, ori, + irow + i, icol + j, rpos, cpos, rx, cx,par); + } + } +} + + +/* Given a sample from the image gradient, place it in the index array. +*/ +void AddSample( + float index[IndexSize][IndexSize][OriSize], keypoint& key, + const flimage& grad, const flimage& orim, + float r, float c, float rpos, float cpos, float rx, float cx,siftPar &par) +{ + /* Clip at image boundaries. */ + if (r < 0 || r >= grad.nheight() || c < 0 || c >= grad.nwidth()) + return; + + /* Compute Gaussian weight for sample, as function of radial distance + from center. Sigma is relative to half-width of index. */ + float sigma = par.IndexSigma * 0.5 * IndexSize, + weight = exp(- (rpos * rpos + cpos * cpos) / (2.0 * sigma * sigma)), +// mag = weight * grad(c,r); + mag = weight * grad((int)c,(int)r); // Guoshen Yu, explicitely cast to int to avoid warning + + + /* Subtract keypoint orientation to give ori relative to keypoint. */ +// float ori = orim(c,r) - key.angle; + float ori = orim((int)c,(int)r) - key.angle; // Guoshen Yu, explicitely cast to int to avoid warning + + + /* Put orientation in range [0, 2*PI]. If sign of gradient is to + be ignored, then put in range [0, PI]. */ + if (par.IgnoreGradSign) { + while (ori > PI ) ori -= PI; + while (ori < 0.0) ori += PI; + } else { + while (ori > 2.0*PI) ori -= 2.0*PI; + while (ori < 0.0 ) ori += 2.0*PI; + } + PlaceInIndex(index, mag, ori, rx, cx,par); +} + + +/* Increment the appropriate locations in the index to incorporate + this image sample. The location of the sample in the index is (rx,cx). +*/ +void PlaceInIndex( + float index[IndexSize][IndexSize][OriSize], + float mag, float ori, float rx, float cx,siftPar &par) +{ + int orr, rindex, cindex, oindex; + float rweight, cweight, oweight; + float *ivec; + + float oval = OriSize * ori / (par.IgnoreGradSign ? PI : 2.0*PI); + +// int ri = (rx >= 0.0) ? rx : rx - 1.0, /* Round down to next integer. */ +// ci = (cx >= 0.0) ? cx : cx - 1.0, +// oi = (oval >= 0.0) ? oval : oval - 1.0; + + int ri = (int)((rx >= 0.0) ? rx : rx - 1.0), /* Round down to next integer. */ // Guoshen Yu, explicitely cast to int to avoid warning + ci = (int)((cx >= 0.0) ? cx : cx - 1.0), // Guoshen Yu, explicitely cast to int to avoid warning + oi = (int)((oval >= 0.0) ? oval : oval - 1.0); // Guoshen Yu, explicitely cast to int to avoid warning + + float rfrac = rx - ri, /* Fractional part of location. */ + cfrac = cx - ci, + ofrac = oval - oi; + assert( + ri >= -1 && ri < IndexSize && + oi >= 0 && oi <= OriSize && + rfrac >= 0.0 && rfrac <= 1.0); + + /* Put appropriate fraction in each of 8 buckets around this point + in the (row,col,ori) dimensions. This loop is written for + efficiency, as it is the inner loop of key sampling. */ + for (int r = 0; r < 2; r++) { + rindex = ri + r; + if (rindex >=0 && rindex < IndexSize) { + rweight = mag * ((r == 0) ? 1.0 - rfrac : rfrac); + + for (int c = 0; c < 2; c++) { + cindex = ci + c; + if (cindex >=0 && cindex < IndexSize) { + cweight = rweight * ((c == 0) ? 1.0 - cfrac : cfrac); + ivec = index[rindex][cindex]; + for (orr = 0; orr < 2; orr++) { + oindex = oi + orr; + if (oindex >= OriSize) /* Orientation wraps around at PI. */ + oindex = 0; + oweight = cweight * ((orr == 0) ? 1.0 - ofrac : ofrac); + ivec[oindex] += oweight; + } + } + } + } + } +} + + + + + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// SIFT keypoint matching +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +float DistSquared(keypoint &k1,keypoint &k2, float tdist, siftPar &par) +{ + + float dif; + float distsq = 0.0; + +// if (abs(k1.x - k2.x) > par.MatchXradius || abs(k1.y - k2.y) > par.MatchYradius) return tdist; + + if (ABS(k1.x - k2.x) > par.MatchXradius || ABS(k1.y - k2.y) > par.MatchYradius) return tdist; + + + float *ik1 = k1.vec; + float *ik2 = k2.vec; + + for (int i = 0; i < VecLength && distsq <= tdist; i++) { +// for (int i = 0; i < VecLength ; i++) { + dif = ik1[i] - ik2[i]; + distsq += dif * dif; + //distsq += ABS(dif); + +// distsq += ((ik1[i] > ik2[i]) ? (ik1[i] - ik2[i]) : (-ik1[i] + ik2[i])); + + } + + return distsq; +} + +float DistSquared_short(keypoint_short &k1,keypoint_short &k2, float tdist, siftPar &par) +{ + // For Mac/Linux compilation using make: vectorization is possible with short. + unsigned short distsq = 0; + + // For Windows compilation using Intel C++ compiler: vectorization is possible with int. + // int distsq = 0; + + if (ABS(k1.x - k2.x) > par.MatchXradius || ABS(k1.y - k2.y) > par.MatchYradius) return tdist; + + + unsigned short *ik1 = k1.vec; + unsigned short *ik2 = k2.vec; + + for (int i = 0; i < VecLength ; i++) { + distsq += ((ik1[i] > ik2[i]) ? (ik1[i] - ik2[i]) : (-ik1[i] + ik2[i])); + } + + return distsq; +} + + + +/* This searches through the keypoints in klist for the two closest + matches to key. It returns the ratio of the distance to key of the + closest and next to closest keypoints in klist, while bestindex is the index + of the closest keypoint. +*/ +float CheckForMatch( + keypoint& key, keypointslist& klist, int& min,siftPar &par) +{ + int nexttomin = -1; + float dsq, distsq1, distsq2; + distsq1 = distsq2 = 1000000000000.0f; + + for (int j=0; j< (int) klist.size(); j++){ + + dsq = DistSquared(key, klist[j], distsq2,par); + + if (dsq < distsq1) { + distsq2 = distsq1; + distsq1 = dsq; + nexttomin = min; + min = j; + } else if (dsq < distsq2) { + distsq2 = dsq; + nexttomin = j; + } + } + + return distsq1/distsq2 ; +} + +float CheckForMatch_short( + keypoint_short& key, keypointslist_short& klist, int& min,siftPar &par) +{ + int nexttomin = -1; + float dsq, distsq1, distsq2; + distsq1 = distsq2 = 1000000000000.0f; + + for (int j=0; j< (int) klist.size(); j++){ + + dsq = DistSquared_short(key, klist[j], distsq2,par); + + if (dsq < distsq1) { + distsq2 = distsq1; + distsq1 = dsq; + nexttomin = min; + min = j; + } else if (dsq < distsq2) { + distsq2 = dsq; + nexttomin = j; + } + } + + return distsq1/distsq2 ; +} + + + +void compute_sift_matches( + keypointslist& keys1, keypointslist& keys2, + matchingslist& matchings,siftPar &par) +{ + int imatch=0; + float sqminratio = par.MatchRatio * par.MatchRatio, + sqratio; + + // write the keypoint descriptors in char + keypointslist_short keys1_short(keys1.size()); + for (int i=0; i< (int) keys1.size(); i++) + { + keys1_short[i].x = keys1[i].x; + keys1_short[i].y = keys1[i].y; + keys1_short[i].scale = keys1[i].scale; + keys1_short[i].angle = keys1[i].angle; + + for (int k=0; k < VecLength; k++) + { + keys1_short[i].vec[k] = (unsigned short) (keys1[i].vec[k]); + } + + } + + keypointslist_short keys2_short(keys2.size()); + for (int i=0; i< (int) keys2.size(); i++) + { + keys2_short[i].x = keys2[i].x; + keys2_short[i].y = keys2[i].y; + keys2_short[i].scale = keys2[i].scale; + keys2_short[i].angle = keys2[i].angle; + + for (int k=0; k < VecLength; k++) + { + keys2_short[i].vec[k] = (unsigned short) (keys2[i].vec[k]); + } + + } + + for (int i=0; i< (int) keys1.size(); i++) { + + // sqratio = CheckForMatch(keys1[i], keys2, imatch,par); + + sqratio = CheckForMatch_short(keys1_short[i], keys2_short, imatch,par); + + + if (sqratio< sqminratio) + matchings.push_back( matching(keys1[i],keys2[imatch] )); + // matchings.push_back( matching_char(keys1_char[i],keys2_char[imatch] )); + } +} diff --git a/asift_match/src/demo_lib_sift.h b/asift_match/src/demo_lib_sift.h new file mode 100755 index 0000000..13839ac --- /dev/null +++ b/asift_match/src/demo_lib_sift.h @@ -0,0 +1,298 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +// WARNING: +// This file implements an algorithm possibly linked to the patent +// +// David Lowe "Method and apparatus for identifying scale invariant +// features in an image and use of same for locating an object in an +// image", U.S. Patent 6,711,293. +// +// This file is made available for the exclusive aim of serving as +// scientific tool to verify of the soundness and +// completeness of the algorithm description. Compilation, +// execution and redistribution of this file may violate exclusive +// patents rights in certain countries. +// The situation being different for every country and changing +// over time, it is your responsibility to determine which patent +// rights restrictions apply to you before you compile, use, +// modify, or redistribute this file. A patent lawyer is qualified +// to make this determination. +// If and only if they don't conflict with any patent terms, you +// can benefit from the following license terms attached to this +// file. +// +// This program is provided for scientific and educational only: +// you can use and/or modify it for these purposes, but you are +// not allowed to redistribute this work or derivative works in +// source or executable form. A license must be obtained from the +// patent right holders for any other use. + + +#ifndef _CLIBSIFT_H_ +#define _CLIBSIFT_H_ + + + +///////////// Description +/// For each octave: +/// - Divide in par.Scales scales +/// - Convolve and compute differences of convolved scales +/// - Look for a 3x3 multiscale extrema and contraste enough and with no predominant direction (no 1d edge) + +/// For each extrema +/// - Compute orientation histogram in neighborhood. +/// - Generate a keypoint for each mode with this orientation + + +/// For each keypoint +/// - Create vector + + + +///////////// Possible differences with MW +/// Gaussian convolution + + +#include +#include + +#include "numerics1.h" +#include "library.h" +#include "filter.h" +#include "domain.h" +#include "splines.h" +#include "flimage.h" + + +#include + +// BASIC STRUCTURES: + +// Keypoints: +#define OriSize 8 +#define IndexSize 4 +#define VecLength IndexSize * IndexSize * OriSize + + +/* Keypoint structure: + position: x,y + scale: s + orientation: angle + descriptor: array of gradient orientation histograms in a neighbors */ +struct keypoint { + float x,y, + scale, + angle; + float vec[VecLength]; +}; + + +/* Keypoint structure: + position: x,y + scale: s + orientation: angle + descriptor: array of gradient orientation histograms in a neighbors */ +struct keypoint_char { + float x,y, + scale, + angle; + unsigned char vec[VecLength]; +}; + +/* Keypoint structure: + position: x,y + scale: s + orientation: angle + descriptor: array of gradient orientation histograms in a neighbors */ +struct keypoint_short { + float x,y, + scale, + angle; + unsigned short vec[VecLength]; +}; + +/* Keypoint structure: + position: x,y + scale: s + orientation: angle + descriptor: array of gradient orientation histograms in a neighbors */ +struct keypoint_int { + float x,y, + scale, + angle; + unsigned int vec[VecLength]; +}; + +/* List of keypoints: just use the standard class vector: */ +typedef std::vector keypointslist; + +/* List of keypoints: just use the standard class vector: */ +typedef std::vector keypointslist_char; +typedef std::vector keypointslist_short; +typedef std::vector keypointslist_int; + + + +/* Matching: just use the standard class pair: */ +typedef std::pair matching; + + +/* List of matchings: just use the standard class vector: */ +typedef std::vector matchingslist; + + +struct siftPar +{ + +int OctaveMax; + +int DoubleImSize; + +int order; + + +/* InitSigma gives the amount of smoothing applied to the image at the + first level of each octave. In effect, this determines the sampling + needed in the image domain relative to amount of smoothing. Good + values determined experimentally are in the range 1.2 to 1.8. +*/ +float InitSigma /*= 1.6*/; + + +/* Peaks in the DOG function must be at least BorderDist samples away + from the image border, at whatever sampling is used for that scale. + Keypoints close to the border (BorderDist < about 15) will have part + of the descriptor landing outside the image, which is approximated by + having the closest image pixel replicated. However, to perform as much + matching as possible close to the edge, use BorderDist of 4. +*/ +int BorderDist /*= 5*/; + + +/* Scales gives the number of discrete smoothing levels within each octave. + For example, Scales = 2 implies dividing octave into 2 intervals, so + smoothing for each scale sample is sqrt(2) more than previous level. + Value of 2 works well, but higher values find somewhat more keypoints. +*/ + +int Scales /*= 3*/; + + +/// Decreasing PeakThresh allows more non contrasted keypoints +/* Magnitude of difference-of-Gaussian value at a keypoint must be above + this threshold. This avoids considering points with very low contrast + that are dominated by noise. It is divided by Scales because more + closely spaced scale samples produce smaller DOG values. A value of + 0.08 considers only the most stable keypoints, but applications may + wish to use lower values such as 0.02 to find keypoints from low-contast + regions. +*/ + +//#define PeakThreshInit 255*0.04 +//#define PeakThresh PeakThreshInit / Scales +float PeakThresh /*255.0 * 0.04 / 3.0*/; + +/// Decreasing EdgeThresh allows more edge points +/* This threshold eliminates responses at edges. A value of 0.08 means + that the ratio of the largest to smallest eigenvalues (principle + curvatures) is below 10. A value of 0.14 means ratio is less than 5. + A value of 0.0 does not eliminate any responses. + Threshold at first octave is different. +*/ +float EdgeThresh /*0.06*/; +float EdgeThresh1 /*0.08*/; + + +/* OriBins gives the number of bins in the histogram (36 gives 10 + degree spacing of bins). +*/ +int OriBins /*36*/; + + +/* Size of Gaussian used to select orientations as multiple of scale + of smaller Gaussian in DOG function used to find keypoint. + Best values: 1.0 for UseHistogramOri = FALSE; 1.5 for TRUE. +*/ +float OriSigma /*1.5*/; + + +/// Look for local (3-neighborhood) maximum with valuer larger or equal than OriHistThresh * maxval +/// Setting one returns a single peak +/* All local peaks in the orientation histogram are used to generate + keypoints, as long as the local peak is within OriHistThresh of + the maximum peak. A value of 1.0 only selects a single orientation + at each location. +*/ +float OriHistThresh /*0.8*/; + + +/// Feature vector is normalized to has euclidean norm 1. +/// This threshold avoid the excessive concentration of information on single peaks +/* Index values are thresholded at this value so that regions with + high gradients do not need to match precisely in magnitude. + Best value should be determined experimentally. Value of 1.0 + has no effect. Value of 0.2 is significantly better. +*/ +float MaxIndexVal /*0.2*/; + + +/* This constant specifies how large a region is covered by each index + vector bin. It gives the spacing of index samples in terms of + pixels at this scale (which is then multiplied by the scale of a + keypoint). It should be set experimentally to as small a value as + possible to keep features local (good values are in range 3 to 5). +*/ +int MagFactor /*3*/; + + +/* Width of Gaussian weighting window for index vector values. It is + given relative to half-width of index, so value of 1.0 means that + weight has fallen to about half near corners of index patch. A + value of 1.0 works slightly better than large values (which are + equivalent to not using weighting). Value of 0.5 is considerably + worse. +*/ +float IndexSigma /*1.0*/; + +/* If this is TRUE, then treat gradients with opposite signs as being + the same. In theory, this could create more illumination invariance, + but generally harms performance in practice. +*/ +int IgnoreGradSign /*0*/; + + + +float MatchRatio /*0.6*/; + +/* + In order to constrain the research zone for matches. + Useful for example when looking only at epipolar lines +*/ + +float MatchXradius /*= 1000000.0f*/; +float MatchYradius /*= 1000000.0f*/; + +int noncorrectlylocalized; + +}; + +////////////////////////////////////////////////////////// +/// SIFT +////////////////////////////////////////////////////////// + +void default_sift_parameters(siftPar &par); + +void compute_sift_keypoints(float *input, keypointslist& keypoints,int width, int height, siftPar &par); + + + + +// MATCHING DETECTION FUNCTION: +void compute_sift_matches( keypointslist& keys1, keypointslist& keys2, matchingslist& matchings, siftPar &par); + +#endif // _LIBSIFT_H_ + + + diff --git a/asift_match/src/domain.cpp b/asift_match/src/domain.cpp new file mode 100755 index 0000000..beedfd0 --- /dev/null +++ b/asift_match/src/domain.cpp @@ -0,0 +1,145 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#include "domain.h" + + +#define DEBUG 0 + + + + +void apply_zoom(float *input, float *out, float zoom, int order, int width, int height) +{ + + int nwidth = (int)( zoom * (float) width); + int nheight = (int)( zoom * (float) height); + + float *coeffs; + float *ref; + + float cx[12],cy[12],ak[13]; + + // Guoshen Yu, 2010.09.22, Windows versions + vector input_vec, coeffs_vec, ref_vec; + input_vec = vector(width*height); + coeffs_vec = vector(width*height); + ref_vec = vector(width*height); + for (int i = 0; i < width*height; i++) + input_vec[i] = input[i]; + + if (order!=0 && order!=1 && order!=-3 && + order!=3 && order!=5 && order!=7 && order!=9 && order!=11) + { + printf("unrecognized interpolation order.\n"); + exit(-1); + } + + if (order>=3) { + + coeffs = new float[width*height]; + + // Guoshen Yu, 2010.09.21, Windows version + //finvspline(input,order,coeffs,width,height); + finvspline(input_vec,order,coeffs_vec,width,height); + for (int i = 0; i < width*height; i++) + coeffs[i] = coeffs_vec[i]; + + ref = coeffs; + if (order>3) init_splinen(ak,order); + + } else + { + coeffs = NULL; + ref = input; + } + + int xi,yi; + float xp,yp; + float res; + int n1,n2; + float bg = 0.0f; + float p=-0.5; + for(int i=0; i < nwidth; i++) + for(int j=0; j < nheight; j++) + { + + xp = (float) i / zoom; + yp = (float) j / zoom; + + if (order == 0) { + + xi = (int)floor((double)xp); + yi = (int)floor((double)yp); + + if (xi<0 || xi>=width || yi<0 || yi>=height) + res = bg; + else res = input[yi*width+xi]; + + } else { + + + if (xp<0. || xp>=(float)width || yp<0. || yp>=(float)height) res=bg; + else { + xp -= 0.5; yp -= 0.5; + int xi = (int)floor((double)xp); + int yi = (int)floor((double)yp); + float ux = xp-(float)xi; + float uy = yp-(float)yi; + + switch (order) + { + case 1: /* first order interpolation (bilinear) */ + n2 = 1; + cx[0]=ux; cx[1]=1.-ux; + cy[0]=uy; cy[1]=1.-uy; + break; + + case -3: /* third order interpolation (bicubic Keys' function) */ + n2 = 2; + keys(cx,ux,p); + keys(cy,uy,p); + break; + + case 3: /* spline of order 3 */ + n2 = 2; + spline3(cx,ux); + spline3(cy,uy); + break; + + default: /* spline of order >3 */ + n2 = (1+order)/2; + splinen(cx,ux,ak,order); + splinen(cy,uy,ak,order); + break; + } + + res = 0.; n1 = 1-n2; + if (xi+n1>=0 && xi+n2=0 && yi+n2=0 && px < width && py>=0 && py=0 && y0>=0 && x0 < width && y0 < height) { + vector[count] = u[y0*width+x0]; + index[count] = count; + count++; + } + } + + quick_sort(vector,index,count); + v[y*width+x] = vector[count/2]; + + } + + copy(v,u,width*height); + } + + delete[] vector; + delete[] index; + +} + + + +void remove_outliers(float *igray,float *ogray,int width, int height) +{ + + + int bloc=1; + int bsize = (2*bloc+1)*(2*bloc+1)-1; + for(int x=bloc;xvalueg) countmax++; + if (valueg0=0 && s=width2) s-=width2; + if (s>=width) s = width2-1-s; + sum += xkernel[i]*u[y*width+s]; + break; + + } + } + tmp[y*width+x] = sum; + } + + /* convolution along y axis */ + org = ysize / 2; + for (int y=height;y--;) + for (int x=width;x--;) { + + sum=0.0; + for (int i=ysize;i--;) { + int s = y-i+org; + switch(boundary) { + case 0: + if (s>=0 && s=height2) s-=height2; + if (s>=height) s = height2-1-s; + sum += ykernel[i]*tmp[s*width+x]; + break; + } + } + v[y*width+x] = sum; + } + + free(tmp); +} + + +void gaussian_convolution(float *u, float *v, int width, int height, float sigma) +{ + + int ksize; + float * kernel; + + ksize = (int)(2.0 * 4.0 * sigma + 1.0); + kernel = gauss(1,sigma,&ksize); + + int boundary = 1; + + copy(u,v,width*height); + horizontal_convolution(v, v, width, height, kernel, ksize, boundary); + vertical_convolution(v, v, width, height, kernel, ksize, boundary); + delete[] kernel; /*memcheck*/ +} + + +void gaussian_convolution(float *u, float *v, int width, int height, float sigma, int ksize) +{ + float * kernel; + kernel = gauss(1,sigma,&ksize); + + int boundary = 1; + + copy(u,v,width*height); + horizontal_convolution(v, v, width, height, kernel, ksize, boundary); + vertical_convolution(v, v, width, height, kernel, ksize, boundary); +} + + +void fast_separable_convolution(float *u, float *v, int width, int height,float * xkernel, int xsize,float *ykernel,int ysize,int boundary) +{ + copy(u,v,width*height); + + horizontal_convolution(v, v, width, height, xkernel, xsize, boundary); + vertical_convolution(v, v, width, height, ykernel, ysize, boundary); + +} + +/* Loop unrolling simply sums 5 multiplications + at a time to allow the compiler to schedule + operations better and avoid loop overhead. +*/ +void buffer_convolution(float *buffer,float *kernel,int size,int ksize) +{ + + for (int i = 0; i < size; i++) { + + float sum = 0.0; + float *bp = &buffer[i]; + float *kp = &kernel[0]; + + + /* Loop unrolling: do 5 multiplications at a time. */ +// int k=0; + + for(int k = 0; k < ksize; k++) + sum += *bp++ * *kp++; + + // for(;k + 4 < ksize; bp += 5, kp += 5, k += 5) +// sum += bp[0] * kp[0] + bp[1] * kp[1] + bp[2] * kp[2] + + // bp[3] * kp[3] + bp[4] * kp[4]; + + /* Do multiplications at a time on remaining items. */ +// for(; k < ksize; bp++ , kp++, k++) sum += *bp * (*kp); + + buffer[i] = sum; + } +} + + + +/* Convolve image with the 1-D kernel vector along image rows. This + is designed to be as efficient as possible. +*/ +void horizontal_convolution(float *u, float *v, int width, int height, float *kernel, int ksize, int boundary) +{ + + int halfsize = ksize / 2; + int buffersize = width + ksize; + float *buffer = new float[buffersize]; + + for (int r = 0; r < height; r++) { + + /// symmetry + int l = r*width; + if (boundary == 1) + for (int i = 0; i < halfsize; i++) + buffer[i] = u[l + halfsize - 1 - i ]; + else + for (int i = 0; i < halfsize; i++) + buffer[i] = 0.0; + + + for (int i = 0; i < width; i++) + buffer[halfsize + i] = u[l + i]; + + + if (boundary == 1) + for (int i = 0; i < halfsize; i++) + buffer[i + width + halfsize] = u[l + width - 1 - i]; + else + for (int i = 0; i < halfsize; i++) + buffer[i + width + halfsize] = 0.0; + + buffer_convolution(buffer, kernel, width, ksize); + for (int c = 0; c < width; c++) + v[r*width+c] = buffer[c]; + } + delete[] buffer; /*memcheck*/ +} + + + +void vertical_convolution(float *u, float *v, int width, int height, float *kernel,int ksize, int boundary) +{ + int halfsize = ksize / 2; + int buffersize = height + ksize; + float *buffer = new float[buffersize]; + + for (int c = 0; c < width; c++) { + + if (boundary == 1) + for (int i = 0; i < halfsize; i++) + buffer[i] = u[(halfsize-i-1)*width + c]; + else + for (int i = 0; i < halfsize; i++) + buffer[i] = 0.0f; + + for (int i = 0; i < height; i++) + buffer[halfsize + i] = u[i*width + c]; + + if (boundary == 1) + for (int i = 0; i < halfsize; i++) + buffer[halfsize + height + i] = u[(height - i - 1)*width+c]; + else + for (int i = 0; i < halfsize; i++) + buffer[halfsize + height + i] = 0.0f; + + buffer_convolution(buffer, kernel, height, ksize); + + for (int r = 0; r < height; r++) + v[r*width+c] = buffer[r]; + + } + delete[] buffer; /*memcheck*/ +} + + + +void heat(float *input, float *out, float step, int niter, float sigma, int width, int height) +{ + + int i,j,n,ksize,size,im,i1,j1,jm; + float *kernel = NULL, *laplacian = NULL, *convolved = NULL; + + + size = width*height; + + if (sigma > 0.0) kernel = gauss(0,sigma,&ksize); + + laplacian = (float *) malloc(size*sizeof(float)); + convolved = (float *) malloc(size*sizeof(float)); + + + + for(n=0; n < niter; n++) + { + + + if (sigma > 0.0) + { + + separable_convolution(input,convolved,width,height, kernel, ksize,kernel,ksize,1); + + for(i=0; i< size; i++) laplacian[i] = convolved[i] - input[i]; + + } else + { + + + for (i=0; i < width;i++) + for (j=0; j< height ;j++) + { + + if (j==0) jm=1; else jm=j-1; + if (j==height-1) j1=height-2; else j1=j+1; + + if (i==0) im=1; else im=i-1; + if (i==width-1) i1=width-2; else i1=i+1; + + laplacian[j*width + i] = - 4.0 * input[width*j+i] + input[width*j+im]+ input[width*j+i1]+input[width*jm + i] + input[width*j1 + i]; + } + } + + + + for(i=0; i < size; i++) out[i] = input[i] + step * laplacian[i]; + + copy(out,input,size); + + } + + + free(laplacian); + free(convolved); + if (kernel) free(kernel); + +} + + + + diff --git a/asift_match/src/filter.h b/asift_match/src/filter.h new file mode 100755 index 0000000..261aa1b --- /dev/null +++ b/asift_match/src/filter.h @@ -0,0 +1,38 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + + +#ifndef _FILTER_H_ +#define _FILTER_H_ + + +#include "library.h" + + +float * directional_gauss_filter(float xsigma, float ysigma, float angle, int *kwidth, int *kheight); + + +void median(float *u,float *v, float radius, int niter, int width,int height); +void remove_outliers(float *igray,float *ogray,int width, int height); + +/// Convolution with a separable kernel, boundary condition: 0=zero, 1=symmetry +void separable_convolution(float *u, float *v, int width, int height, float *xkernel, int xsize, float *ykernel, int ysize,int boundary); + +void buffer_convolution(float *buffer,float *kernel,int size,int ksize); +void horizontal_convolution(float *u, float *v, int width, int height, float *kernel, int ksize, int boundary); +void vertical_convolution(float *u, float *v, int width, int height, float *kernel,int ksize, int boundary); + +void fast_separable_convolution(float *u, float *v, int width, int height,float * xkernel, int xsize,float *ykernel,int ysize,int boundary); + +/// Can be called with u=v +void gaussian_convolution(float *u, float *v, int width, int height, float sigma); +void gaussian_convolution(float *u, float *v, int width, int height, float sigma, int ksize); + +void convol(float *u, float *v, int width, int height, float *kernel, int kwidth, int kheight); /// Convolution with a kernel, No padding applied to the image + +void heat(float *u, float *v, float step, int niter, float sigma, int width, int height); + + +#endif // _FILTER_H_ + diff --git a/asift_match/src/flimage.cpp b/asift_match/src/flimage.cpp new file mode 100755 index 0000000..0e29b57 --- /dev/null +++ b/asift_match/src/flimage.cpp @@ -0,0 +1,86 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#include "flimage.h" + + + +//////////////////////////////////////////////// Class flimage +//// Construction +flimage::flimage() : width(0), height(0), p(0) +{ +} + +flimage::flimage(int w, int h) : width(w), height(h), p(new float[w*h]) +{ + for (int j=width*height-1; j>=0 ; j--) p[j] = 0.0; +} + + +flimage::flimage(int w, int h, float v) : width(w), height(h), p(new float[w*h]) +{ + for (int j=width*height-1; j>=0 ; j--) p[j] = v; +} + + +flimage::flimage(int w, int h, float* v) : width(w), height(h), p(new float[w*h]) +{ + for (int j=width*height-1; j>=0 ; j--) p[j] = v[j]; +} + + +void flimage::create(int w, int h) +{ + erase(); + width = w; height = h; + p = new float[w*h]; + for (int j=width*height-1; j>=0 ; j--) p[j] = 0.0; +} + +void flimage::create(int w, int h, float* v) +{ + erase(); + width = w; height = h; p = new float[w*h]; + for (int j=width*height-1; j>=0 ; j--) p[j] = v[j]; +} + + +flimage::flimage(const flimage& im) : width(im.width), height(im.height), p(new float[im.width*im.height]) +{ + for (int j=width*height-1; j>=0 ; j--) p[j] = im.p[j]; +} + +flimage& flimage::operator= (const flimage& im) +{ + if (&im == this) { + return *this; + } + + if (width != im.width || height != im.height) + { + erase(); + width = im.width; height=im.height; p = new float[width*height]; + } + + for (int j=width*height-1; j>=0 ; j--) p[j] = im.p[j]; + return *this; +} + + +//// Destruction +void flimage::erase() +{ + width = height = 0; + if (p) delete[] p; + p=0; +} + +flimage::~flimage() +{ + erase(); +} + + + + diff --git a/asift_match/src/flimage.h b/asift_match/src/flimage.h new file mode 100755 index 0000000..6024ed5 --- /dev/null +++ b/asift_match/src/flimage.h @@ -0,0 +1,53 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + + +#ifndef _FLIMAGE_H_ +#define _FLIMAGE_H_ + +#include +#include + +class flimage { + +private: + + int width, height; // image size + float* p; // array of color levels: level of pixel (x,y) is p[y*width+x] + +public: + + + //// Construction + flimage(); + flimage(int w, int h); + flimage(int w, int h, float v); + flimage(int w, int h, float* v); + flimage(const flimage& im); + flimage& operator= (const flimage& im); + + + void create(int w, int h); + void create(int w, int h, float *v); + + //// Destruction + void erase(); + ~flimage(); + + //// Get Basic Data + int nwidth() const {return width;} // image size + int nheight() const {return height;} + + /// Access values + float* getPlane() {return p;} // return the adress of the array of values + + float operator()(int x, int y) const {return p[ y*width + x ];} // acces to the (x,y) value + float& operator()(int x, int y) {return p[ y*width + x ];} // by value (for const images) and by reference + + +}; + + +#endif + diff --git a/asift_match/src/fproj.cpp b/asift_match/src/fproj.cpp new file mode 100755 index 0000000..cb966c1 --- /dev/null +++ b/asift_match/src/fproj.cpp @@ -0,0 +1,186 @@ +// Copyright (c) 2007 Lionel Moisan + +#include +#include +#include "splines.h" +#include "fproj.h" + + + + +/*------------------------ MAIN MODULE ---------------------------------*/ + +//void fproj(float *in, float *out, int nx, int ny, int *sx, int *sy, float *bg, int *o, float *p, char *i, float X1, float Y1, float X2, float Y2, float X3, float Y3, float *x4, float *y4) +void fproj(vector& in, vector& out, int nx, int ny, int *sx, int *sy, float *bg, int *o, float *p, char *i, float X1, float Y1, float X2, float Y2, float X3, float Y3, float *x4, float *y4) +/* Fimage in,out; + int *sx,*sy,*o; + char *i; + float *bg,*p,X1,Y1,X2,Y2,X3,Y3,*x4,*y4; */ +{ +/* int n1,n2,nx,ny,x,y,xi,yi,adr,dx,dy;*/ + int n1,n2,x,y,xi,yi,adr,dx,dy; + float res,xx,yy,xp,yp,ux,uy,a,b,d,fx,fy,x12,x13,y12,y13; + float cx[12],cy[12],ak[13]; + /* Fimage ref,coeffs; */ +// float *ref, *coeffs; + vector ref, coeffs; + + + /* CHECK ORDER */ + if (*o!=0 && *o!=1 && *o!=-3 && + *o!=3 && *o!=5 && *o!=7 && *o!=9 && *o!=11) + /* mwerror(FATAL,1,"unrecognized interpolation order.\n"); */ + { + printf("unrecognized interpolation order.\n"); + exit(-1); + } + + /* ALLOCATE NEW IMAGE */ +/* nx = in->ncol; ny = in->nrow; */ +/* out = mw_change_fimage(out,*sy,*sx); + if (!out) mwerror(FATAL,1,"not enough memory\n"); */ + + + if (*o>=3) { +/* coeffs = mw_new_fimage(); + finvspline(in,*o,coeffs); */ + +// coeffs = new float[nx*ny]; + + coeffs = vector(nx*ny); + + finvspline(in,*o,coeffs,nx,ny); + + ref = coeffs; + if (*o>3) init_splinen(ak,*o); + } else { +// coeffs = NULL; + ref = in; + } + + + /* COMPUTE NEW BASIS */ + if (i) { + x12 = (X2-X1)/(float)nx; + y12 = (Y2-Y1)/(float)nx; + x13 = (X3-X1)/(float)ny; + y13 = (Y3-Y1)/(float)ny; + } else { + x12 = (X2-X1)/(float)(*sx); + y12 = (Y2-Y1)/(float)(*sx); + x13 = (X3-X1)/(float)(*sy); + y13 = (Y3-Y1)/(float)(*sy); + } + + + + if (y4) { + xx=((*x4-X1)*(Y3-Y1)-(*y4-Y1)*(X3-X1))/((X2-X1)*(Y3-Y1)-(Y2-Y1)*(X3-X1)); + yy=((*x4-X1)*(Y2-Y1)-(*y4-Y1)*(X2-X1))/((X3-X1)*(Y2-Y1)-(Y3-Y1)*(X2-X1)); + a = (yy-1.0)/(1.0-xx-yy); + b = (xx-1.0)/(1.0-xx-yy); + } + else + { + a=b=0.0; + } + + + + + /********** MAIN LOOP **********/ + + for (x=0;x<*sx;x++) + for (y=0;y<*sy;y++) { + + /* COMPUTE LOCATION IN INPUT IMAGE */ + if (i) { + xx = 0.5+(((float)x-X1)*y13-((float)y-Y1)*x13)/(x12*y13-y12*x13); + yy = 0.5-(((float)x-X1)*y12-((float)y-Y1)*x12)/(x12*y13-y12*x13); + d = 1.0-(a/(a+1.0))*xx/(float)nx-(b/(b+1.0))*yy/(float)ny; + xp = xx/((a+1.0)*d); + yp = yy/((b+1.0)*d); + } else { + fx = (float)x + 0.5; + fy = (float)y + 0.5; + d = a*fx/(float)(*sx)+b*fy/(float)(*sy)+1.0; + xx = (a+1.0)*fx/d; + yy = (b+1.0)*fy/d; + xp = X1 + xx*x12 + yy*x13; + yp = Y1 + xx*y12 + yy*y13; + } + + + /* INTERPOLATION */ + + if (*o==0) { + + /* zero order interpolation (pixel replication) */ + xi = (int)floor((double)xp); + yi = (int)floor((double)yp); +/* if (xi<0 || xi>=in->ncol || yi<0 || yi>=in->nrow)*/ + if (xi<0 || xi>=nx || yi<0 || yi>=ny) + res = *bg; + else + /* res = in->gray[yi*in->ncol+xi]; */ + res = in[yi*nx+xi]; + } else { + + /* higher order interpolations */ + if (xp<0. || xp>(float)nx || yp<0. || yp>(float)ny) res=*bg; + else { + xp -= 0.5; yp -= 0.5; + xi = (int)floor((double)xp); + yi = (int)floor((double)yp); + ux = xp-(float)xi; + uy = yp-(float)yi; + switch (*o) + { + case 1: /* first order interpolation (bilinear) */ + n2 = 1; + cx[0]=ux; cx[1]=1.-ux; + cy[0]=uy; cy[1]=1.-uy; + break; + + case -3: /* third order interpolation (bicubic Keys' function) */ + n2 = 2; + keys(cx,ux,*p); + keys(cy,uy,*p); + break; + + case 3: /* spline of order 3 */ + n2 = 2; + spline3(cx,ux); + spline3(cy,uy); + break; + + default: /* spline of order >3 */ + n2 = (1+*o)/2; + splinen(cx,ux,ak,*o); + splinen(cy,uy,ak,*o); + break; + } + + res = 0.; n1 = 1-n2; + /* this test saves computation time */ + if (xi+n1>=0 && xi+n2=0 && yi+n2gray[adr+nx*dy+dx];*/ + res += cy[n2-dy]*cx[n2-dx]*ref[adr+nx*dy+dx]; + } else + for (dy=n1;dy<=n2;dy++) + for (dx=n1;dx<=n2;dx++) +/* res += cy[n2-dy]*cx[n2-dx]*v(ref,xi+dx,yi+dy,*bg); */ + res += cy[n2-dy]*cx[n2-dx]*v(ref,xi+dx,yi+dy,*bg,nx,ny); + } + } + /* out->gray[y*(*sx)+x] = res; */ + out[y*(*sx)+x] = res; + } + //if (coeffs) + /* mw_delete_fimage(coeffs); */ + // delete[] coeffs; +} + diff --git a/asift_match/src/fproj.h b/asift_match/src/fproj.h new file mode 100755 index 0000000..0db2524 --- /dev/null +++ b/asift_match/src/fproj.h @@ -0,0 +1,9 @@ +// Copyright (c) 2007 Lionel Moisan + +#include "library.h" +#include +using namespace std; + +//void fproj(float *in, float *out, int nx, int ny, int *sx, int *sy, float *bg, int *o, float *p, char *i, float X1, float Y1, float X2, float Y2, float X3, float Y3, float *x4, float *y4); +void fproj(vector& in, vector& out, int nx, int ny, int *sx, int *sy, float *bg, int *o, float *p, char *i, float X1, float Y1, float X2, float Y2, float X3, float Y3, float *x4, float *y4); + diff --git a/asift_match/src/frot.cpp b/asift_match/src/frot.cpp new file mode 100755 index 0000000..e7415a0 --- /dev/null +++ b/asift_match/src/frot.cpp @@ -0,0 +1,116 @@ +// Copyright (c) 2007 Lionel Moisan + + + +#include "frot.h" + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + + +void bound(int x, int y, float ca, float sa, int *xmin, int *xmax, int *ymin, int *ymax); + + +/* NB : calling this module with out=in is nonsense */ + +/* void frot(in,out,a,b,k_flag) + Fimage in,out; + float *a,*b; + char *k_flag; */ + +void frot(vector& in, vector& out, int nx, int ny, int *nx_out, int *ny_out, float *a, float *b, char *k_flag) +//void frot(float *in, float *out, int nx, int ny, int *nx_out, int *ny_out, float *a, float *b, char *k_flag) +{ + /* int nx,ny,x,y,x1,y1,adr; */ + int x,y,x1,y1,adr; + float ca,sa,xp,yp,a11,a12,a21,a22,ux,uy,xtrans,ytrans; + int tx1,ty1,tx2,ty2,xmin,xmax,ymin,ymax,sx,sy; + +/* nx = in->ncol; + ny = in->nrow; */ + + ca = (float)cos((double)(*a)*M_PI/180.0); + sa = (float)sin((double)(*a)*M_PI/180.0); + + + + /********** Compute new image location **********/ + if (k_flag) { + /* crop image and fix center */ + xmin = ymin = 0; + xmax = nx-1; + ymax = ny-1; + xtrans = 0.5*( (float)(nx-1)*(1.0-ca)+(float)(ny-1)*sa ); + ytrans = 0.5*( (float)(ny-1)*(1.0-ca)-(float)(nx-1)*sa ); + } else { + /* extend image size to include the whole input image */ + xmin = xmax = ymin = ymax = 0; + bound(nx-1,0,ca,sa,&xmin,&xmax,&ymin,&ymax); + bound(0,ny-1,ca,sa,&xmin,&xmax,&ymin,&ymax); + bound(nx-1,ny-1,ca,sa,&xmin,&xmax,&ymin,&ymax); + xtrans = ytrans = 0.0; + } + sx = xmax-xmin+1; + sy = ymax-ymin+1; + + /* out = mw_change_fimage(out,sy,sx); + if (!out) mwerror(FATAL,1,"not enough memory\n"); */ + + *nx_out = sx; + *ny_out = sy; + +// printf("Hello sx=%d, sy=%d\n", sx, sy); + +// out = new float[sy*sx]; + out = std::vector(sx*sy); + + /********** Rotate image **********/ + for (x=xmin;x<=xmax;x++) + for (y=ymin;y<=ymax;y++) { + xp = ca*(float)x-sa*(float)y + xtrans; + yp = sa*(float)x+ca*(float)y + ytrans; + x1 = (int)floor(xp); + y1 = (int)floor(yp); + ux = xp-(float)x1; + uy = yp-(float)y1; + adr = y1*nx+x1; + tx1 = (x1>=0 && x1=0 && x1+1=0 && y1=0 && y1+1gray[adr]:*b); + a12 = (tx1 && ty2? in->gray[adr+nx]:*b); + a21 = (tx2 && ty1? in->gray[adr+1]:*b); + a22 = (tx2 && ty2? in->gray[adr+nx+1]:*b); */ + + a11 = (tx1 && ty1? in[adr]:*b); + a12 = (tx1 && ty2? in[adr+nx]:*b); + a21 = (tx2 && ty1? in[adr+1]:*b); + a22 = (tx2 && ty2? in[adr+nx+1]:*b); + + +/* out->gray[(y-ymin)*sx+x-xmin] = + (1.0-uy)*((1.0-ux)*a11+ux*a21)+uy*((1.0-ux)*a12+ux*a22);*/ + + out[(y-ymin)*sx+x-xmin] = + (1.0-uy)*((1.0-ux)*a11+ux*a21)+uy*((1.0-ux)*a12+ux*a22); + + } +} + + +void bound(int x, int y, float ca, float sa, int *xmin, int *xmax, int *ymin, int *ymax) +/* int x,y; + float ca,sa; + int *xmin,*xmax,*ymin,*ymax;*/ +{ + int rx,ry; + + rx = (int)floor(ca*(float)x+sa*(float)y); + ry = (int)floor(-sa*(float)x+ca*(float)y); + if (rx<*xmin) *xmin=rx; if (rx>*xmax) *xmax=rx; + if (ry<*ymin) *ymin=ry; if (ry>*ymax) *ymax=ry; +} + diff --git a/asift_match/src/frot.h b/asift_match/src/frot.h new file mode 100755 index 0000000..fd4d790 --- /dev/null +++ b/asift_match/src/frot.h @@ -0,0 +1,10 @@ +// Copyright (c) 2007 Lionel Moisan + +#include "library.h" +#include +using namespace std; + + +/*void frot(float *in, float *out, int nx, int ny, int *nx_out, int *ny_out, float *a, float *b, char *k_flag)*/ +//void frot(float *, float (*)[], int, int, int *, int *, float *, float *, char *); +void frot(vector&, vector&, int, int, int *, int *, float *, float *, char *); diff --git a/asift_match/src/libMatch/CMakeFiles/CMakeDirectoryInformation.cmake b/asift_match/src/libMatch/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..88b28e4 --- /dev/null +++ b/asift_match/src/libMatch/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# Relative path conversion top directories. +SET(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src") +SET(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src") + +# Force unix paths in dependencies. +SET(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +SET(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +SET(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +SET(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +SET(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/asift_match/src/libMatch/CMakeFiles/Match.dir/CXX.includecache b/asift_match/src/libMatch/CMakeFiles/Match.dir/CXX.includecache new file mode 100644 index 0000000..dfab44d --- /dev/null +++ b/asift_match/src/libMatch/CMakeFiles/Match.dir/CXX.includecache @@ -0,0 +1,20 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch/match.cpp +match.h +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch/match.h +fstream +- +sstream +- + +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch/match.h +vector +- + diff --git a/asift_match/src/libMatch/CMakeFiles/Match.dir/DependInfo.cmake b/asift_match/src/libMatch/CMakeFiles/Match.dir/DependInfo.cmake new file mode 100644 index 0000000..043b0fb --- /dev/null +++ b/asift_match/src/libMatch/CMakeFiles/Match.dir/DependInfo.cmake @@ -0,0 +1,20 @@ +# The set of languages for which implicit dependencies are needed: +SET(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +SET(CMAKE_DEPENDS_CHECK_CXX + "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch/match.cpp" "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch/CMakeFiles/Match.dir/match.cpp.o" + ) +SET(CMAKE_CXX_COMPILER_ID "GNU") + +# Targets to which this target links. +SET(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# The include file search paths: +SET(CMAKE_C_TARGET_INCLUDE_PATH + ) +SET(CMAKE_CXX_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_Fortran_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_ASM_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) diff --git a/asift_match/src/libMatch/CMakeFiles/Match.dir/build.make b/asift_match/src/libMatch/CMakeFiles/Match.dir/build.make new file mode 100644 index 0000000..068d5d1 --- /dev/null +++ b/asift_match/src/libMatch/CMakeFiles/Match.dir/build.make @@ -0,0 +1,103 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src + +# Include any dependencies generated for this target. +include libMatch/CMakeFiles/Match.dir/depend.make + +# Include the progress variables for this target. +include libMatch/CMakeFiles/Match.dir/progress.make + +# Include the compile flags for this target's objects. +include libMatch/CMakeFiles/Match.dir/flags.make + +libMatch/CMakeFiles/Match.dir/match.cpp.o: libMatch/CMakeFiles/Match.dir/flags.make +libMatch/CMakeFiles/Match.dir/match.cpp.o: libMatch/match.cpp + $(CMAKE_COMMAND) -E cmake_progress_report /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/CMakeFiles $(CMAKE_PROGRESS_1) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object libMatch/CMakeFiles/Match.dir/match.cpp.o" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/Match.dir/match.cpp.o -c /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch/match.cpp + +libMatch/CMakeFiles/Match.dir/match.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/Match.dir/match.cpp.i" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch/match.cpp > CMakeFiles/Match.dir/match.cpp.i + +libMatch/CMakeFiles/Match.dir/match.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/Match.dir/match.cpp.s" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch/match.cpp -o CMakeFiles/Match.dir/match.cpp.s + +libMatch/CMakeFiles/Match.dir/match.cpp.o.requires: +.PHONY : libMatch/CMakeFiles/Match.dir/match.cpp.o.requires + +libMatch/CMakeFiles/Match.dir/match.cpp.o.provides: libMatch/CMakeFiles/Match.dir/match.cpp.o.requires + $(MAKE) -f libMatch/CMakeFiles/Match.dir/build.make libMatch/CMakeFiles/Match.dir/match.cpp.o.provides.build +.PHONY : libMatch/CMakeFiles/Match.dir/match.cpp.o.provides + +libMatch/CMakeFiles/Match.dir/match.cpp.o.provides.build: libMatch/CMakeFiles/Match.dir/match.cpp.o + +# Object files for target Match +Match_OBJECTS = \ +"CMakeFiles/Match.dir/match.cpp.o" + +# External object files for target Match +Match_EXTERNAL_OBJECTS = + +libMatch/libMatch.a: libMatch/CMakeFiles/Match.dir/match.cpp.o +libMatch/libMatch.a: libMatch/CMakeFiles/Match.dir/build.make +libMatch/libMatch.a: libMatch/CMakeFiles/Match.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking CXX static library libMatch.a" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch && $(CMAKE_COMMAND) -P CMakeFiles/Match.dir/cmake_clean_target.cmake + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/Match.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +libMatch/CMakeFiles/Match.dir/build: libMatch/libMatch.a +.PHONY : libMatch/CMakeFiles/Match.dir/build + +libMatch/CMakeFiles/Match.dir/requires: libMatch/CMakeFiles/Match.dir/match.cpp.o.requires +.PHONY : libMatch/CMakeFiles/Match.dir/requires + +libMatch/CMakeFiles/Match.dir/clean: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch && $(CMAKE_COMMAND) -P CMakeFiles/Match.dir/cmake_clean.cmake +.PHONY : libMatch/CMakeFiles/Match.dir/clean + +libMatch/CMakeFiles/Match.dir/depend: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch/CMakeFiles/Match.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : libMatch/CMakeFiles/Match.dir/depend + diff --git a/asift_match/src/libMatch/CMakeFiles/Match.dir/cmake_clean.cmake b/asift_match/src/libMatch/CMakeFiles/Match.dir/cmake_clean.cmake new file mode 100644 index 0000000..cc35ad8 --- /dev/null +++ b/asift_match/src/libMatch/CMakeFiles/Match.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +FILE(REMOVE_RECURSE + "CMakeFiles/Match.dir/match.cpp.o" + "libMatch.pdb" + "libMatch.a" +) + +# Per-language clean rules from dependency scanning. +FOREACH(lang CXX) + INCLUDE(CMakeFiles/Match.dir/cmake_clean_${lang}.cmake OPTIONAL) +ENDFOREACH(lang) diff --git a/asift_match/src/libMatch/CMakeFiles/Match.dir/cmake_clean_target.cmake b/asift_match/src/libMatch/CMakeFiles/Match.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..28c53b8 --- /dev/null +++ b/asift_match/src/libMatch/CMakeFiles/Match.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +FILE(REMOVE_RECURSE + "libMatch.a" +) diff --git a/asift_match/src/libMatch/CMakeFiles/Match.dir/depend.internal b/asift_match/src/libMatch/CMakeFiles/Match.dir/depend.internal new file mode 100644 index 0000000..3b73900 --- /dev/null +++ b/asift_match/src/libMatch/CMakeFiles/Match.dir/depend.internal @@ -0,0 +1,6 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +libMatch/CMakeFiles/Match.dir/match.cpp.o + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch/match.cpp + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch/match.h diff --git a/asift_match/src/libMatch/CMakeFiles/Match.dir/depend.make b/asift_match/src/libMatch/CMakeFiles/Match.dir/depend.make new file mode 100644 index 0000000..58bca30 --- /dev/null +++ b/asift_match/src/libMatch/CMakeFiles/Match.dir/depend.make @@ -0,0 +1,6 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +libMatch/CMakeFiles/Match.dir/match.cpp.o: libMatch/match.cpp +libMatch/CMakeFiles/Match.dir/match.cpp.o: libMatch/match.h + diff --git a/asift_match/src/libMatch/CMakeFiles/Match.dir/flags.make b/asift_match/src/libMatch/CMakeFiles/Match.dir/flags.make new file mode 100644 index 0000000..6043470 --- /dev/null +++ b/asift_match/src/libMatch/CMakeFiles/Match.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = + +CXX_DEFINES = + diff --git a/asift_match/src/libMatch/CMakeFiles/Match.dir/link.txt b/asift_match/src/libMatch/CMakeFiles/Match.dir/link.txt new file mode 100644 index 0000000..621f267 --- /dev/null +++ b/asift_match/src/libMatch/CMakeFiles/Match.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar cr libMatch.a CMakeFiles/Match.dir/match.cpp.o +/usr/bin/ranlib libMatch.a diff --git a/ASIFT_tests/demo_ASIFT_src/libMatch/CMakeFiles/Match.dir/match.cpp.o b/asift_match/src/libMatch/CMakeFiles/Match.dir/match.cpp.o similarity index 100% rename from ASIFT_tests/demo_ASIFT_src/libMatch/CMakeFiles/Match.dir/match.cpp.o rename to asift_match/src/libMatch/CMakeFiles/Match.dir/match.cpp.o diff --git a/asift_match/src/libMatch/CMakeFiles/Match.dir/progress.make b/asift_match/src/libMatch/CMakeFiles/Match.dir/progress.make new file mode 100644 index 0000000..781c7de --- /dev/null +++ b/asift_match/src/libMatch/CMakeFiles/Match.dir/progress.make @@ -0,0 +1,2 @@ +CMAKE_PROGRESS_1 = 1 + diff --git a/asift_match/src/libMatch/CMakeFiles/progress.marks b/asift_match/src/libMatch/CMakeFiles/progress.marks new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/asift_match/src/libMatch/CMakeFiles/progress.marks @@ -0,0 +1 @@ +1 diff --git a/asift_match/src/libMatch/CMakeLists.txt b/asift_match/src/libMatch/CMakeLists.txt new file mode 100755 index 0000000..2f5e67b --- /dev/null +++ b/asift_match/src/libMatch/CMakeLists.txt @@ -0,0 +1,6 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +PROJECT(libMatch) + +ADD_LIBRARY(Match + match.cpp match.h) diff --git a/asift_match/src/libMatch/Makefile b/asift_match/src/libMatch/Makefile new file mode 100644 index 0000000..88ed1e3 --- /dev/null +++ b/asift_match/src/libMatch/Makefile @@ -0,0 +1,164 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running interactive CMake command-line interface..." + /usr/bin/cmake -i . +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(CMAKE_COMMAND) -E cmake_progress_start /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/CMakeFiles /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch/CMakeFiles/progress.marks + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f CMakeFiles/Makefile2 libMatch/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f CMakeFiles/Makefile2 libMatch/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f CMakeFiles/Makefile2 libMatch/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f CMakeFiles/Makefile2 libMatch/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +libMatch/CMakeFiles/Match.dir/rule: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f CMakeFiles/Makefile2 libMatch/CMakeFiles/Match.dir/rule +.PHONY : libMatch/CMakeFiles/Match.dir/rule + +# Convenience name for target. +Match: libMatch/CMakeFiles/Match.dir/rule +.PHONY : Match + +# fast build rule for target. +Match/fast: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libMatch/CMakeFiles/Match.dir/build.make libMatch/CMakeFiles/Match.dir/build +.PHONY : Match/fast + +match.o: match.cpp.o +.PHONY : match.o + +# target to build an object file +match.cpp.o: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libMatch/CMakeFiles/Match.dir/build.make libMatch/CMakeFiles/Match.dir/match.cpp.o +.PHONY : match.cpp.o + +match.i: match.cpp.i +.PHONY : match.i + +# target to preprocess a source file +match.cpp.i: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libMatch/CMakeFiles/Match.dir/build.make libMatch/CMakeFiles/Match.dir/match.cpp.i +.PHONY : match.cpp.i + +match.s: match.cpp.s +.PHONY : match.s + +# target to generate assembly for a file +match.cpp.s: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libMatch/CMakeFiles/Match.dir/build.make libMatch/CMakeFiles/Match.dir/match.cpp.s +.PHONY : match.cpp.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... Match" + @echo "... edit_cache" + @echo "... rebuild_cache" + @echo "... match.o" + @echo "... match.i" + @echo "... match.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/asift_match/src/libMatch/cmake_install.cmake b/asift_match/src/libMatch/cmake_install.cmake new file mode 100644 index 0000000..471ac6d --- /dev/null +++ b/asift_match/src/libMatch/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libMatch + +# Set the install prefix +IF(NOT DEFINED CMAKE_INSTALL_PREFIX) + SET(CMAKE_INSTALL_PREFIX "/usr/local") +ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX) +STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + IF(BUILD_TYPE) + STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + ELSE(BUILD_TYPE) + SET(CMAKE_INSTALL_CONFIG_NAME "") + ENDIF(BUILD_TYPE) + MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + +# Set the component getting installed. +IF(NOT CMAKE_INSTALL_COMPONENT) + IF(COMPONENT) + MESSAGE(STATUS "Install component: \"${COMPONENT}\"") + SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + ELSE(COMPONENT) + SET(CMAKE_INSTALL_COMPONENT) + ENDIF(COMPONENT) +ENDIF(NOT CMAKE_INSTALL_COMPONENT) + +# Install shared libraries without execute permission? +IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + SET(CMAKE_INSTALL_SO_NO_EXE "1") +ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + diff --git a/ASIFT_tests/demo_ASIFT_src/libMatch/libMatch.a b/asift_match/src/libMatch/libMatch.a similarity index 100% rename from ASIFT_tests/demo_ASIFT_src/libMatch/libMatch.a rename to asift_match/src/libMatch/libMatch.a diff --git a/asift_match/src/libMatch/match.cpp b/asift_match/src/libMatch/match.cpp new file mode 100755 index 0000000..7d48ed2 --- /dev/null +++ b/asift_match/src/libMatch/match.cpp @@ -0,0 +1,35 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#include "match.h" +#include +#include + +bool loadMatch(const char* nameFile, std::vector& match) { + match.clear(); + std::ifstream f(nameFile); + while( f.good() ) { + std::string str; + std::getline(f, str); + if( f.good() ) { + std::istringstream s(str); + Match m; + s >> m.x1 >> m.y1 >> m.x2 >> m.y2; + if(!s.fail() ) + match.push_back(m); + } + } + return !match.empty(); +} + +bool saveMatch(const char* nameFile, const std::vector& match) { + std::ofstream f(nameFile); + if( f.is_open() ) { + std::vector::const_iterator it = match.begin(); + for(; it != match.end(); ++it) + f << it->x1 << " " << it->y1 << " " + << it->x2 << " " << it->y2 << std::endl; + } + return f.is_open(); +} diff --git a/asift_match/src/libMatch/match.h b/asift_match/src/libMatch/match.h new file mode 100755 index 0000000..8636de3 --- /dev/null +++ b/asift_match/src/libMatch/match.h @@ -0,0 +1,17 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#ifndef MATCH_H +#define MATCH_H + +#include + +struct Match { + float x1, y1, x2, y2; +}; + +bool loadMatch(const char* nameFile, std::vector& match); +bool saveMatch(const char* nameFile, const std::vector& match); + +#endif diff --git a/asift_match/src/libMatch/match.o b/asift_match/src/libMatch/match.o new file mode 100644 index 0000000000000000000000000000000000000000..f35fc5404614f2e0881a1be1b6e76ad3e329cab4 GIT binary patch literal 14072 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 literal 0 HcmV?d00001 diff --git a/asift_match/src/libNumerics/CMakeFiles/CMakeDirectoryInformation.cmake b/asift_match/src/libNumerics/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..88b28e4 --- /dev/null +++ b/asift_match/src/libNumerics/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# Relative path conversion top directories. +SET(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src") +SET(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src") + +# Force unix paths in dependencies. +SET(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +SET(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +SET(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +SET(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +SET(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/CXX.includecache b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/CXX.includecache new file mode 100644 index 0000000..10e0ff1 --- /dev/null +++ b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/CXX.includecache @@ -0,0 +1,62 @@ +#IncludeRegexLine: ^[ ]*#[ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/computeH.cpp +homography.h +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/homography.h +numerics.h +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/numerics.h +algorithm +- +math.h +- +string.h +- + +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/homography.cpp +homography.h +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/homography.h + +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/homography.h +matrix.h +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.h + +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.cpp + +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.h +iostream +- +cassert +- +matrix.cpp +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.cpp +vector.cpp +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/vector.cpp + +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/numerics.cpp +numerics.h +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/numerics.h +cmath +- +vector +- +limits +- +algorithm +- + +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/numerics.h +matrix.h +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.h +vector +- + +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/rodrigues.cpp + +/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/vector.cpp + diff --git a/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/DependInfo.cmake b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/DependInfo.cmake new file mode 100644 index 0000000..42bc1a0 --- /dev/null +++ b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/DependInfo.cmake @@ -0,0 +1,26 @@ +# The set of languages for which implicit dependencies are needed: +SET(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +SET(CMAKE_DEPENDS_CHECK_CXX + "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/computeH.cpp" "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o" + "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/homography.cpp" "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o" + "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.cpp" "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o" + "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/numerics.cpp" "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o" + "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/rodrigues.cpp" "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o" + "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/vector.cpp" "/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o" + ) +SET(CMAKE_CXX_COMPILER_ID "GNU") + +# Targets to which this target links. +SET(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# The include file search paths: +SET(CMAKE_C_TARGET_INCLUDE_PATH + "libNumerics/.." + ) +SET(CMAKE_CXX_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_Fortran_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) +SET(CMAKE_ASM_TARGET_INCLUDE_PATH ${CMAKE_C_TARGET_INCLUDE_PATH}) diff --git a/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/build.make b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/build.make new file mode 100644 index 0000000..159658d --- /dev/null +++ b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/build.make @@ -0,0 +1,233 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src + +# Include any dependencies generated for this target. +include libNumerics/CMakeFiles/Numerics.dir/depend.make + +# Include the progress variables for this target. +include libNumerics/CMakeFiles/Numerics.dir/progress.make + +# Include the compile flags for this target's objects. +include libNumerics/CMakeFiles/Numerics.dir/flags.make + +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o: libNumerics/CMakeFiles/Numerics.dir/flags.make +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o: libNumerics/computeH.cpp + $(CMAKE_COMMAND) -E cmake_progress_report /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/CMakeFiles $(CMAKE_PROGRESS_1) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/Numerics.dir/computeH.cpp.o -c /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/computeH.cpp + +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/Numerics.dir/computeH.cpp.i" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/computeH.cpp > CMakeFiles/Numerics.dir/computeH.cpp.i + +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/Numerics.dir/computeH.cpp.s" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/computeH.cpp -o CMakeFiles/Numerics.dir/computeH.cpp.s + +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o.requires: +.PHONY : libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o.requires + +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o.provides: libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o.requires + $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o.provides.build +.PHONY : libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o.provides + +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o.provides.build: libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o + +libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o: libNumerics/CMakeFiles/Numerics.dir/flags.make +libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o: libNumerics/homography.cpp + $(CMAKE_COMMAND) -E cmake_progress_report /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/CMakeFiles $(CMAKE_PROGRESS_2) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/Numerics.dir/homography.cpp.o -c /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/homography.cpp + +libNumerics/CMakeFiles/Numerics.dir/homography.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/Numerics.dir/homography.cpp.i" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/homography.cpp > CMakeFiles/Numerics.dir/homography.cpp.i + +libNumerics/CMakeFiles/Numerics.dir/homography.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/Numerics.dir/homography.cpp.s" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/homography.cpp -o CMakeFiles/Numerics.dir/homography.cpp.s + +libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o.requires: +.PHONY : libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o.requires + +libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o.provides: libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o.requires + $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o.provides.build +.PHONY : libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o.provides + +libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o.provides.build: libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o + +libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o: libNumerics/CMakeFiles/Numerics.dir/flags.make +libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o: libNumerics/matrix.cpp + $(CMAKE_COMMAND) -E cmake_progress_report /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/CMakeFiles $(CMAKE_PROGRESS_3) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/Numerics.dir/matrix.cpp.o -c /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.cpp + +libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/Numerics.dir/matrix.cpp.i" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.cpp > CMakeFiles/Numerics.dir/matrix.cpp.i + +libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/Numerics.dir/matrix.cpp.s" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.cpp -o CMakeFiles/Numerics.dir/matrix.cpp.s + +libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o.requires: +.PHONY : libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o.requires + +libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o.provides: libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o.requires + $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o.provides.build +.PHONY : libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o.provides + +libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o.provides.build: libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o + +libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o: libNumerics/CMakeFiles/Numerics.dir/flags.make +libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o: libNumerics/numerics.cpp + $(CMAKE_COMMAND) -E cmake_progress_report /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/CMakeFiles $(CMAKE_PROGRESS_4) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/Numerics.dir/numerics.cpp.o -c /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/numerics.cpp + +libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/Numerics.dir/numerics.cpp.i" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/numerics.cpp > CMakeFiles/Numerics.dir/numerics.cpp.i + +libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/Numerics.dir/numerics.cpp.s" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/numerics.cpp -o CMakeFiles/Numerics.dir/numerics.cpp.s + +libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o.requires: +.PHONY : libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o.requires + +libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o.provides: libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o.requires + $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o.provides.build +.PHONY : libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o.provides + +libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o.provides.build: libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o + +libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o: libNumerics/CMakeFiles/Numerics.dir/flags.make +libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o: libNumerics/rodrigues.cpp + $(CMAKE_COMMAND) -E cmake_progress_report /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/CMakeFiles $(CMAKE_PROGRESS_5) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/Numerics.dir/rodrigues.cpp.o -c /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/rodrigues.cpp + +libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/Numerics.dir/rodrigues.cpp.i" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/rodrigues.cpp > CMakeFiles/Numerics.dir/rodrigues.cpp.i + +libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/Numerics.dir/rodrigues.cpp.s" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/rodrigues.cpp -o CMakeFiles/Numerics.dir/rodrigues.cpp.s + +libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o.requires: +.PHONY : libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o.requires + +libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o.provides: libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o.requires + $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o.provides.build +.PHONY : libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o.provides + +libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o.provides.build: libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o + +libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o: libNumerics/CMakeFiles/Numerics.dir/flags.make +libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o: libNumerics/vector.cpp + $(CMAKE_COMMAND) -E cmake_progress_report /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/CMakeFiles $(CMAKE_PROGRESS_6) + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/Numerics.dir/vector.cpp.o -c /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/vector.cpp + +libNumerics/CMakeFiles/Numerics.dir/vector.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/Numerics.dir/vector.cpp.i" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -E /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/vector.cpp > CMakeFiles/Numerics.dir/vector.cpp.i + +libNumerics/CMakeFiles/Numerics.dir/vector.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/Numerics.dir/vector.cpp.s" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && /usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) -S /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/vector.cpp -o CMakeFiles/Numerics.dir/vector.cpp.s + +libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o.requires: +.PHONY : libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o.requires + +libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o.provides: libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o.requires + $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o.provides.build +.PHONY : libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o.provides + +libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o.provides.build: libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o + +# Object files for target Numerics +Numerics_OBJECTS = \ +"CMakeFiles/Numerics.dir/computeH.cpp.o" \ +"CMakeFiles/Numerics.dir/homography.cpp.o" \ +"CMakeFiles/Numerics.dir/matrix.cpp.o" \ +"CMakeFiles/Numerics.dir/numerics.cpp.o" \ +"CMakeFiles/Numerics.dir/rodrigues.cpp.o" \ +"CMakeFiles/Numerics.dir/vector.cpp.o" + +# External object files for target Numerics +Numerics_EXTERNAL_OBJECTS = + +libNumerics/libNumerics.a: libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o +libNumerics/libNumerics.a: libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o +libNumerics/libNumerics.a: libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o +libNumerics/libNumerics.a: libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o +libNumerics/libNumerics.a: libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o +libNumerics/libNumerics.a: libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o +libNumerics/libNumerics.a: libNumerics/CMakeFiles/Numerics.dir/build.make +libNumerics/libNumerics.a: libNumerics/CMakeFiles/Numerics.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold "Linking CXX static library libNumerics.a" + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && $(CMAKE_COMMAND) -P CMakeFiles/Numerics.dir/cmake_clean_target.cmake + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/Numerics.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +libNumerics/CMakeFiles/Numerics.dir/build: libNumerics/libNumerics.a +.PHONY : libNumerics/CMakeFiles/Numerics.dir/build + +libNumerics/CMakeFiles/Numerics.dir/requires: libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o.requires +libNumerics/CMakeFiles/Numerics.dir/requires: libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o.requires +libNumerics/CMakeFiles/Numerics.dir/requires: libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o.requires +libNumerics/CMakeFiles/Numerics.dir/requires: libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o.requires +libNumerics/CMakeFiles/Numerics.dir/requires: libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o.requires +libNumerics/CMakeFiles/Numerics.dir/requires: libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o.requires +.PHONY : libNumerics/CMakeFiles/Numerics.dir/requires + +libNumerics/CMakeFiles/Numerics.dir/clean: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics && $(CMAKE_COMMAND) -P CMakeFiles/Numerics.dir/cmake_clean.cmake +.PHONY : libNumerics/CMakeFiles/Numerics.dir/clean + +libNumerics/CMakeFiles/Numerics.dir/depend: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : libNumerics/CMakeFiles/Numerics.dir/depend + diff --git a/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/cmake_clean.cmake b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/cmake_clean.cmake new file mode 100644 index 0000000..92f98d6 --- /dev/null +++ b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/cmake_clean.cmake @@ -0,0 +1,15 @@ +FILE(REMOVE_RECURSE + "CMakeFiles/Numerics.dir/computeH.cpp.o" + "CMakeFiles/Numerics.dir/homography.cpp.o" + "CMakeFiles/Numerics.dir/matrix.cpp.o" + "CMakeFiles/Numerics.dir/numerics.cpp.o" + "CMakeFiles/Numerics.dir/rodrigues.cpp.o" + "CMakeFiles/Numerics.dir/vector.cpp.o" + "libNumerics.pdb" + "libNumerics.a" +) + +# Per-language clean rules from dependency scanning. +FOREACH(lang CXX) + INCLUDE(CMakeFiles/Numerics.dir/cmake_clean_${lang}.cmake OPTIONAL) +ENDFOREACH(lang) diff --git a/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/cmake_clean_target.cmake b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..d2936e9 --- /dev/null +++ b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +FILE(REMOVE_RECURSE + "libNumerics.a" +) diff --git a/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o similarity index 100% rename from ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o rename to asift_match/src/libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o diff --git a/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/depend.internal b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/depend.internal new file mode 100644 index 0000000..bc551ce --- /dev/null +++ b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/depend.internal @@ -0,0 +1,28 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/computeH.cpp + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/homography.h + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.cpp + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.h + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/numerics.h + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/vector.cpp +libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/homography.cpp + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/homography.h + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.cpp + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.h + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/vector.cpp +libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.cpp +libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.cpp + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/matrix.h + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/numerics.cpp + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/numerics.h + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/vector.cpp +libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/rodrigues.cpp +libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o + /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/vector.cpp diff --git a/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/depend.make b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/depend.make new file mode 100644 index 0000000..cdda019 --- /dev/null +++ b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/depend.make @@ -0,0 +1,28 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o: libNumerics/computeH.cpp +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o: libNumerics/homography.h +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o: libNumerics/matrix.cpp +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o: libNumerics/matrix.h +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o: libNumerics/numerics.h +libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o: libNumerics/vector.cpp + +libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o: libNumerics/homography.cpp +libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o: libNumerics/homography.h +libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o: libNumerics/matrix.cpp +libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o: libNumerics/matrix.h +libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o: libNumerics/vector.cpp + +libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o: libNumerics/matrix.cpp + +libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o: libNumerics/matrix.cpp +libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o: libNumerics/matrix.h +libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o: libNumerics/numerics.cpp +libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o: libNumerics/numerics.h +libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o: libNumerics/vector.cpp + +libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o: libNumerics/rodrigues.cpp + +libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o: libNumerics/vector.cpp + diff --git a/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/flags.make b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/flags.make new file mode 100644 index 0000000..d30c612 --- /dev/null +++ b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/flags.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -I/home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/.. + +CXX_DEFINES = + diff --git a/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o similarity index 100% rename from ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o rename to asift_match/src/libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o diff --git a/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/link.txt b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/link.txt new file mode 100644 index 0000000..e644b4b --- /dev/null +++ b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar cr libNumerics.a CMakeFiles/Numerics.dir/computeH.cpp.o CMakeFiles/Numerics.dir/homography.cpp.o CMakeFiles/Numerics.dir/matrix.cpp.o CMakeFiles/Numerics.dir/numerics.cpp.o CMakeFiles/Numerics.dir/rodrigues.cpp.o CMakeFiles/Numerics.dir/vector.cpp.o +/usr/bin/ranlib libNumerics.a diff --git a/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o similarity index 100% rename from ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o rename to asift_match/src/libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o diff --git a/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o similarity index 100% rename from ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o rename to asift_match/src/libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o diff --git a/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/progress.make b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/progress.make new file mode 100644 index 0000000..e4a3b01 --- /dev/null +++ b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/progress.make @@ -0,0 +1,7 @@ +CMAKE_PROGRESS_1 = 2 +CMAKE_PROGRESS_2 = 3 +CMAKE_PROGRESS_3 = 4 +CMAKE_PROGRESS_4 = 5 +CMAKE_PROGRESS_5 = 6 +CMAKE_PROGRESS_6 = 7 + diff --git a/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o similarity index 100% rename from ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o rename to asift_match/src/libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o diff --git a/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o b/asift_match/src/libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o similarity index 100% rename from ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o rename to asift_match/src/libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o diff --git a/asift_match/src/libNumerics/CMakeFiles/progress.marks b/asift_match/src/libNumerics/CMakeFiles/progress.marks new file mode 100644 index 0000000..1e8b314 --- /dev/null +++ b/asift_match/src/libNumerics/CMakeFiles/progress.marks @@ -0,0 +1 @@ +6 diff --git a/asift_match/src/libNumerics/CMakeLists.txt b/asift_match/src/libNumerics/CMakeLists.txt new file mode 100755 index 0000000..9d2205f --- /dev/null +++ b/asift_match/src/libNumerics/CMakeLists.txt @@ -0,0 +1,13 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +PROJECT(libNumerics) + +INCLUDE_DIRECTORIES(..) + +ADD_LIBRARY(Numerics + computeH.cpp + homography.cpp homography.h + matrix.cpp matrix.h + numerics.cpp numerics.h + rodrigues.cpp rodrigues.h + vector.cpp) diff --git a/asift_match/src/libNumerics/Makefile b/asift_match/src/libNumerics/Makefile new file mode 100644 index 0000000..1a0e1c3 --- /dev/null +++ b/asift_match/src/libNumerics/Makefile @@ -0,0 +1,299 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running interactive CMake command-line interface..." + /usr/bin/cmake -i . +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(CMAKE_COMMAND) -E cmake_progress_start /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/CMakeFiles /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics/CMakeFiles/progress.marks + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f CMakeFiles/Makefile2 libNumerics/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f CMakeFiles/Makefile2 libNumerics/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f CMakeFiles/Makefile2 libNumerics/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f CMakeFiles/Makefile2 libNumerics/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +libNumerics/CMakeFiles/Numerics.dir/rule: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f CMakeFiles/Makefile2 libNumerics/CMakeFiles/Numerics.dir/rule +.PHONY : libNumerics/CMakeFiles/Numerics.dir/rule + +# Convenience name for target. +Numerics: libNumerics/CMakeFiles/Numerics.dir/rule +.PHONY : Numerics + +# fast build rule for target. +Numerics/fast: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/build +.PHONY : Numerics/fast + +computeH.o: computeH.cpp.o +.PHONY : computeH.o + +# target to build an object file +computeH.cpp.o: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.o +.PHONY : computeH.cpp.o + +computeH.i: computeH.cpp.i +.PHONY : computeH.i + +# target to preprocess a source file +computeH.cpp.i: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.i +.PHONY : computeH.cpp.i + +computeH.s: computeH.cpp.s +.PHONY : computeH.s + +# target to generate assembly for a file +computeH.cpp.s: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/computeH.cpp.s +.PHONY : computeH.cpp.s + +homography.o: homography.cpp.o +.PHONY : homography.o + +# target to build an object file +homography.cpp.o: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/homography.cpp.o +.PHONY : homography.cpp.o + +homography.i: homography.cpp.i +.PHONY : homography.i + +# target to preprocess a source file +homography.cpp.i: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/homography.cpp.i +.PHONY : homography.cpp.i + +homography.s: homography.cpp.s +.PHONY : homography.s + +# target to generate assembly for a file +homography.cpp.s: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/homography.cpp.s +.PHONY : homography.cpp.s + +matrix.o: matrix.cpp.o +.PHONY : matrix.o + +# target to build an object file +matrix.cpp.o: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.o +.PHONY : matrix.cpp.o + +matrix.i: matrix.cpp.i +.PHONY : matrix.i + +# target to preprocess a source file +matrix.cpp.i: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.i +.PHONY : matrix.cpp.i + +matrix.s: matrix.cpp.s +.PHONY : matrix.s + +# target to generate assembly for a file +matrix.cpp.s: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/matrix.cpp.s +.PHONY : matrix.cpp.s + +numerics.o: numerics.cpp.o +.PHONY : numerics.o + +# target to build an object file +numerics.cpp.o: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.o +.PHONY : numerics.cpp.o + +numerics.i: numerics.cpp.i +.PHONY : numerics.i + +# target to preprocess a source file +numerics.cpp.i: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.i +.PHONY : numerics.cpp.i + +numerics.s: numerics.cpp.s +.PHONY : numerics.s + +# target to generate assembly for a file +numerics.cpp.s: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/numerics.cpp.s +.PHONY : numerics.cpp.s + +rodrigues.o: rodrigues.cpp.o +.PHONY : rodrigues.o + +# target to build an object file +rodrigues.cpp.o: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.o +.PHONY : rodrigues.cpp.o + +rodrigues.i: rodrigues.cpp.i +.PHONY : rodrigues.i + +# target to preprocess a source file +rodrigues.cpp.i: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.i +.PHONY : rodrigues.cpp.i + +rodrigues.s: rodrigues.cpp.s +.PHONY : rodrigues.s + +# target to generate assembly for a file +rodrigues.cpp.s: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/rodrigues.cpp.s +.PHONY : rodrigues.cpp.s + +vector.o: vector.cpp.o +.PHONY : vector.o + +# target to build an object file +vector.cpp.o: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/vector.cpp.o +.PHONY : vector.cpp.o + +vector.i: vector.cpp.i +.PHONY : vector.i + +# target to preprocess a source file +vector.cpp.i: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/vector.cpp.i +.PHONY : vector.cpp.i + +vector.s: vector.cpp.s +.PHONY : vector.s + +# target to generate assembly for a file +vector.cpp.s: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(MAKE) -f libNumerics/CMakeFiles/Numerics.dir/build.make libNumerics/CMakeFiles/Numerics.dir/vector.cpp.s +.PHONY : vector.cpp.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... Numerics" + @echo "... edit_cache" + @echo "... rebuild_cache" + @echo "... computeH.o" + @echo "... computeH.i" + @echo "... computeH.s" + @echo "... homography.o" + @echo "... homography.i" + @echo "... homography.s" + @echo "... matrix.o" + @echo "... matrix.i" + @echo "... matrix.s" + @echo "... numerics.o" + @echo "... numerics.i" + @echo "... numerics.s" + @echo "... rodrigues.o" + @echo "... rodrigues.i" + @echo "... rodrigues.s" + @echo "... vector.o" + @echo "... vector.i" + @echo "... vector.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/asift_match/src/libNumerics/cmake_install.cmake b/asift_match/src/libNumerics/cmake_install.cmake new file mode 100644 index 0000000..549f041 --- /dev/null +++ b/asift_match/src/libNumerics/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/harle/catkin_ws/src/BaxterInterface/ASIFT_tests/demo_ASIFT_src/libNumerics + +# Set the install prefix +IF(NOT DEFINED CMAKE_INSTALL_PREFIX) + SET(CMAKE_INSTALL_PREFIX "/usr/local") +ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX) +STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + IF(BUILD_TYPE) + STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + ELSE(BUILD_TYPE) + SET(CMAKE_INSTALL_CONFIG_NAME "") + ENDIF(BUILD_TYPE) + MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + +# Set the component getting installed. +IF(NOT CMAKE_INSTALL_COMPONENT) + IF(COMPONENT) + MESSAGE(STATUS "Install component: \"${COMPONENT}\"") + SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + ELSE(COMPONENT) + SET(CMAKE_INSTALL_COMPONENT) + ENDIF(COMPONENT) +ENDIF(NOT CMAKE_INSTALL_COMPONENT) + +# Install shared libraries without execute permission? +IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + SET(CMAKE_INSTALL_SO_NO_EXE "1") +ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + diff --git a/asift_match/src/libNumerics/computeH.cpp b/asift_match/src/libNumerics/computeH.cpp new file mode 100755 index 0000000..a7d2f7c --- /dev/null +++ b/asift_match/src/libNumerics/computeH.cpp @@ -0,0 +1,651 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#include "homography.h" +#include "numerics.h" + +#include +#include /* For sqrt */ +#include + +static const float minEigenValue = 1e-3f; // For regular matrix + +namespace libNumerics { + +/// Constructor. Field `b' used only for error computation. +ComputeH::ComputeH(Type type) +: _type(type), n( size(type) ), b(0) +{ + clear(); +} + +// Destructor +ComputeH::~ComputeH() +{} + +// Dimension of matrix w.r.t. type +int ComputeH::size(Type type) +{ + switch(type) { + case Translation: + return 2; + case Zoom: + return 3; + case Rotation: // In fact 3, but nonlinear system + case GeneralZoom: + case Similarity: + return 4; + case Affine: + return 6; + case Projective: + return 8; + } + return 8; +} + +// Return less general motion +ComputeH::Type ComputeH::restrict(Type t) +{ + switch(t) { + case Translation: + return Translation; // Should return identity + case Rotation: + case Zoom: + return Translation; + case Similarity: + return Zoom; // Rotation also correct. Arbitrary choice. + case GeneralZoom: + return Zoom; + case Affine: + return Similarity; + case Projective: + return Affine; + } + return Affine; +} + +// Reinitialize +void ComputeH::clear() +{ + memset(Ann, 0, n*n*sizeof(double)); + memset(Bn, 0, n*sizeof(double)); + b = 0; +} + +// Add two corresponding points +void ComputeH::add(float x, float y, float X, float Y, float w) +{ + if(_type <= Similarity) { // Separate for readability + add_4parameters(x, y, X, Y, w); + return; + } + double x2 = x*x, y2 = y*y, xy = x*y; + double xX = x*X, yX = y*X, xY = x*Y, yY = y*Y; + double *A = Ann, *B = Bn; + + *A++ += w* x2; // Equation 1 + *A++ += w* xy; + A += 2; + *A++ += w* x; + A++; + if(_type == Projective) { + *A++ -= w* x*xX; + *A++ -= w* x*yX; + } + *B++ += w* x*X; + + A++; // Equation 2 + *A++ += w* y2; + A += 2; + *A++ += w* y; + A++; + if(_type == Projective) { + *A++ -= w* y*xX; + *A++ -= w* y*yX; + } + *B++ += w* y*X; + + A +=2; // Equation 3 + *A++ += w* x2; + *A++ += w* xy; + A++; + *A++ += w* x; + if(_type == Projective) { + *A++ -= w* x*xY; + *A++ -= w* x*yY; + } + *B++ += w* x*Y; + + A +=3; // Equation 4 + *A++ += w* y2; + A++; + *A++ += w* y; + if(_type == Projective) { + *A++ -= w* y*xY; + *A++ -= w* y*yY; + } + *B++ += w* y*Y; + + A+= 4; // Equation 5 + *A++ += w; + A++; + if(_type == Projective) { + *A++ -= w* xX; + *A++ -= w* yX; + } + *B++ += w* X; + + A += 5; // Equation 6 + *A++ += w; + *B++ += w* Y; + if(_type == Projective) { + *A++ -= w* xY; + *A++ -= w* yY; + + A += 6; // Equation 7 + *A++ += w* (xX*xX + xY*xY); + *A++ += w* (xX*yX + xY*yY); + *B++ -= w* (xX*X + xY*Y); + + A+= 7; // Equation 8 + *A++ += w* (yX*yX + yY*yY); + *B++ -= w* (yX*X + yY*Y); + } + b += w* (X*X + Y*Y); +} + +// Add two corresponding points, type involving at most 4 parameters +void ComputeH::add_4parameters(float x, float y, float X, float Y, float w) +{ + double *A = Ann, *B = Bn; + + if(_type == Translation) { + A[0] += w; + A[3] += w; + B[0] += w* (X - x); + B[1] += w* (Y - y); + b += w* ((X-x)*(X-x) + (Y-y)*(Y-y)); + return; + } + b += w* (X*X + Y*Y); + if(_type == GeneralZoom) { + A[0] += w* x*x; + A[2] += w* x; + B[0] += w* x*X; + + A[5] += w* y*y; + A[7] += w* y; + B[1] += w* y*Y; + + A[10]+= w; + B[2] += w* X; + + A[15]+= w; + B[3] += w* Y; + return; + } + + *A++ += w* (x*x + y*y); // Equation 1 + if(_type != Zoom) // Similarity or Rotation + A++; + *A++ += w* x; + *A++ += w* y; + *B++ += w* (x*X + y*Y); + + if(_type != Zoom) { // Similarity or Rotation + A++; // Equation 2 + *A++ += w* (x*x + y*y); + *A++ += w* y; + *A++ -= w* x; + *B++ += w* (y*X - x*Y); + A++; // Prepare for next line + } + + A++; // Equation 3 + *A++ += w; + A++; + *B++ += w* X; + + A += n-1; // Equation 4 + *A++ += w; + *B++ += w* Y; +} + +// Add corresponding lines of equation ux + by + x = 0 +void ComputeH::add(float x, float y, float z, float X, float Y, float Z, + float w) +{ + float s = 1.0f / (float)sqrt(x*x + y*y); + x *= s; + y *= s; + z *= s; + s = 1.0f / (float)sqrt(X*X + Y*Y); + X *= s; + Y *= s; + Z *= s; + if(_type <= Similarity) { // Separate for readability + add_4parameters(x, y, z, X, Y, Z, w); + return; + } + + double x2 = x*x, y2 = y*y, z2 = z*z, xy = x*y, xz = x*z, yz = y*z; + double X2 = X*X, Y2 = Y*Y, Z2 = Z*Z, XY = X*Y, XZ = X*Z, YZ = Y*Z; + double *A = Ann, *B = Bn; + + *A++ += w* (y2+z2) * X2; // Equation 1 + *A++ -= w* xy * X2; + *A++ += w* (y2+z2) * XY; + *A++ -= w* xy * XY; + *A++ -= w* xz * X2; + *A++ -= w* xz * XY; + if(_type == Projective) { + *A++ += w* (y2+z2) * XZ; + *A++ -= w* xy * XZ; + } + *B++ += w* xz * XZ; + + A++; // Equation 2 + *A++ += w* (x2+z2) * X2; + *A++ -= w* xy * XY; + *A++ += w* (x2+z2) * XY; + *A++ -= w* yz * X2; + *A++ -= w* yz * XY; + if(_type == Projective) { + *A++ -= w* xy * XZ; + *A++ += w* (x2+z2) * XZ; + } + *B++ -= w* yz * XZ; + + A += 2; // Equation 3 + *A++ += w* (y2+z2) * Y2; + *A++ -= w* xy * Y2; + *A++ -= w* xz * XY; + *A++ -= w* xz * Y2; + if(_type == Projective) { + *A++ += w* (y2+z2) * YZ; + *A++ -= w* xy * YZ; + } + *B++ += w* xz * YZ; + + A += 3; // Equation 4 + *A++ += w* (x2+z2) * Y2; + *A++ -= w* yz * XY; + *A++ -= w* yz * Y2; + if(_type == Projective) { + *A++ -= w* xy * YZ; + *A++ += w* (x2+z2) * YZ; + } + *B++ += w* yz * YZ; + + A += 4; // Equation 5 + *A++ += w* X2; // *(x2+y2=1) + *A++ += w* XY; // *(x2+y2=1) + if(_type == Projective) { + *A++ -= w* xz * XZ; + *A++ -= w* yz * XZ; + } + *B++ -= w* XZ; // *(x2+y2=1) + + A += 5; // Equation 6 + *A++ += w* Y2; // *(x2+y2=1) + *B++ -= w* YZ; // *(x2+y2=1) + if(_type == Projective) { + *A++ -= w* xz * YZ; + *A++ -= w* yz * YZ; + + A += 6; // Equation 7 + *A++ += w* (y2+z2) * Y2; + *A++ -= w* xy * Z2; + *B++ += w* xz * Z2; + + A += 7; // Equation 8 + *A++ += w* (x2+z2) * Z2; + *B++ += w* yz * Z2; + } + b += w* Z2; // *(x2+y2=1) +} + +// Add two corresponding lines, type involving at most 4 parameters +void ComputeH::add_4parameters(float x, float y, float z, + float X, float Y, float Z, float w) +{ + double x2 = x*x, y2 = y*y, z2 = z*z, xy = x*y, xz = x*z, yz = y*z; + double X2 = X*X, Y2 = Y*Y, Z2 = Z*Z, XY = X*Y, XZ = X*Z, YZ = Y*Z; + double *A = Ann, *B = Bn; + if(_type == Translation) { + *A++ += w* X2; // *(x2+y2=1) + *A++ += w* XY; // *(x2+y2=1) + *B++ += w* (yz*XY + xz*X2 - XZ/* *(x2+y2=1) */); + + A++; + *A++ += w* Y2; // *(x2+y2=1) + *B++ += w* (xz*XY + yz*Y2 - YZ/* *(x2+y2=1) */); + + b += w* (z2 + Z2 + y2*X2 + x2*Z2 - 2*(xz*XZ + yz*YZ + xy*XZ)); + return; + } + b += w* Z2; // *(x2+y2=1) + if(_type == GeneralZoom) { + *A++ += w* (y2+z2) * X2; + *A++ -= w* xy * XY; + *A++ -= w* xz * X2; + *A++ -= w* xz * XY; + *B++ += w* xz * XZ; + + A++; + *A++ += w* (x2+z2) * Y2; + *A++ -= w* yz * XY; + *A++ -= w* yz * Y2; + *B++ += w* yz * YZ; + + A += 2; + *A++ += w* X2; // *(x2+y2=1) + *A++ += w* XY; // *(x2+y2=1) + *B++ -= w* XZ; // *(x2+y2=1) + + A += 3; + *A++ += w* Y2; // *(x2+y2=1) + *B++ -= w* YZ; // *(x2+y2=1) + return; + } + + if(_type == Zoom) { + *A++ += w* (z2/* *(X2+Y2=1)*/ + y2*X2 + x2*Y2 - 2*xy*XY); + *A++ -= w* (yz*XY + xz*X2); + *A++ -= w* (yz*Y2 + xz*XY); + *B++ += w* (yz*YZ + xz*X2); + } else { // Similarity or Rotation + *A++ += w* (1 /* =x2+y2*/+ 2*(z2 - xy)) * X2; + *A++ += w* (x2 - y2) * XY; + *A++ -= w* (xz + yz) * X2; + *A++ -= w* (xz + yz) * XY; + *B++ += w* (xz + yz) * XZ; + + A++; + *A++ += w* (1 /* =x2+y2*/+ 2*(z2 + xy)) * Y2; + *A++ += w* (xz - yz) * XY; + *A++ += w* (xz - yz) * Y2; + *B++ += w* (yz - xz) * YZ; + A++; // Prepare for next line + } + + A++; + *A++ += w* X2; // *(x2+y2=1) + *A++ += w* XY; // *(x2+y2=1) + *B++ -= w* XZ; // *(x2+y2=1) + + A += n-1; + *A++ += w* Y2; // *(x2+y2=1) + *B++ -= w* YZ; // *(x2+y2=1) +} + +// Wrap vector of unknowns `v' into structure `map' +void ComputeH::wrap(Homography& h, const vector& v) const +{ + int i = 0; + h.mat()(0,0) = (_type==Translation)? 1.0f: v(i++); + h.mat()(0,1) = (_type==Translation || _type==Zoom || _type==GeneralZoom) ? + 0: v(i++); + if(n >= 6) { + h.mat()(1,0) = v(i++); + h.mat()(1,1) = v(i++); + } else { + h.mat()(1,0) = -h.mat()(0,1); + h.mat()(1,1) = (_type==GeneralZoom)? v(i++): h.mat()(0,0); + } + h.mat()(0,2) = v(i++); + h.mat()(1,2) = v(i++); + if(_type == Projective) { + h.mat()(2,0) = v(i++); + h.mat()(2,1) = v(i++); + } else + h.mat()(2,0) = h.mat()(2,1) = 0; + h.mat()(2,2) = 1.0; +} + +/// Unwrap parameters in \a h into vector of unknowns \a v. +void ComputeH::unwrap(const Homography& h, vector& v) const +{ + int i = 0; + if(_type != Translation) { + v(i++) = h.mat()(0,0); + if(_type != Zoom) { + if(_type != GeneralZoom) { + v(i++) = h.mat()(0,1); // Rotation or Similarity or... + if(n >= 6) // Affine or Projective + v(i++) = h.mat()(1,0); + } + if(_type==GeneralZoom || _type==Affine || _type==Projective) + v(i++) = h.mat()(1,1); + } + } + v(i++) = h.mat()(0,2); + v(i++) = h.mat()(1,2); + if(_type == Projective) { + v(i++) = h.mat()(2,0); + v(i++) = h.mat()(2,1); + } +} + +// Sum of weights (=#correspondences) +float ComputeH::weight() const +{ + // Diagonal coefficient affecting translation + int i = (_type == Projective) ? 6 : n; + return static_cast(Ann[(i-1)*(n+1)]); // Element (i-1,i-1) +} + + +// Return quadratic error when mapping with `motion' +float ComputeH::q_error(const Homography& map) const +{ + vector v(n); + unwrap(map, v); + return q_error(v); +} + +// Idem, with arguments in a vector +float ComputeH::q_error(const vector& v) const +{ + double e = b; + // Diagonal terms + const double* A = Ann + n*n-1; + for(int i = n-1; i >= 0; i--, A -= n+1) + e += *A * v(i) * v(i); + // Cross terms + A = Ann + (n-1)*n; // Last row + for(int i = n-1; i >= 0; i--, A -= n) { + double vi = v(i); + e -= 2.0 * Bn[i] * vi; + for(int j = n-1; j > i; j--) + e += 2.0 * A[j] * vi * v(j); + } + return static_cast(e); +} + +// LSE for rotation: solve linear system under quadratic constraint +bool ComputeH::compute_rotation(vector& B) const +{ + if(Ann[15] <= 0) // No point added or absurd value + return false; + B(0) = Ann[15] * Bn[0] - Ann[2] * Bn[2] - Ann[3] * Bn[3]; + B(1) = Ann[15] * Bn[1] - Ann[3] * Bn[2] + Ann[2] * Bn[3]; + double root = sqrt(B(0)*B(0) + B(1)*B(1)); + if(root < minEigenValue) + return false; + // Test first solution + double lambda1 = (Ann[2]*Ann[2] + Ann[3]*Ann[3] + root) / Ann[15]; + B(0) /= root; + B(1) /= root; + B(2) = (-Ann[2]*Bn[0] - Ann[3]*Bn[1] + lambda1 * Bn[2]) / root; + B(3) = (-Ann[3]*Bn[0] + Ann[2]*Bn[1] + lambda1 * Bn[3]) / root; + float v1 = q_error(B); + // Test second solution + vector C(4); + double lambda2 = (Ann[2]*Ann[2] + Ann[3]*Ann[3] - root) / Ann[15]; + C(0) = -B(0); + C(1) = -B(1); + C(2) = -(-Ann[2]*Bn[0] - Ann[3]*Bn[1] + lambda2 * Bn[2]) / root; + C(3) = -(-Ann[3]*Bn[0] + Ann[2]*Bn[1] + lambda2 * Bn[3]) / root; + if(v1 > q_error(C)) // Keep second solution + B = C; + return true; +} + +// Return LSE motion and the sum of weights +float ComputeH::compute(Homography& map) const +{ + vector B(n); + B.read(Bn); + + if(_type == Rotation) { + if(! compute_rotation(B)) + return 0; + } else { + matrix A(n,n); + A.read(Ann); + Normalization left, right; + if(_type == Projective && !normalize(left, A, B, right)) + return 0; + A.symUpper(); + + vector oldB(B); + if(! solveLU(A, B)) + return 0; + + if(_type == Projective && ! de_normalize(left, B, right)) + return 0; + } + + wrap(map, B); + return weight(); +} + +// Normalize independently original and final points so that the new +// origin is their centroid and their mean square distance (to it) is 2 +bool ComputeH::normalize(Normalization& left, + matrix& A, vector& B, + Normalization& right) const +{ + double w = A(5,5); // Total weight + if(w < minEigenValue) + return false; + double invW = 1.0 / w; + + // Find normalizations (zoom-translation) + right.s = (A(0,0) + A(1,1)) - (A(0,4)*A(0,4) + A(1,4)*A(1,4))*invW; + if(right.s < minEigenValue) + return false; + right.s = sqrt(2.0*w / right.s); + right.x = - invW * right.s * A(0,4); + right.y = - invW * right.s * A(1,4); + + left.s = b - (B(4)*B(4) + B(5)*B(5))*invW; + if(left.s < minEigenValue) + return false; + left.s = sqrt(2.0*w / left.s); + left.x = - invW * left.s * B(4); + left.y = - invW * left.s * B(5); + double norm = left.x*left.x + left.y*left.y; + + double s2 = right.s*right.s, sS = right.s*left.s, S2 = left.s*left.s; + + // Normalization of vector B + double b0 = B(0), b1 = B(1), b2 = B(2), b3 = B(3); + B(0) = sS * B(0) - w*right.x*left.x; + B(1) = sS * B(1) - w*right.y*left.x; + B(2) = sS * B(2) - w*right.x*left.y; + B(3) = sS * B(3) - w*right.y*left.y; + B(4) = B(5) = 0; + B(6) = sS*(left.s*B(6) - 2*(left.x*b0 + left.y*b2)) + + w*right.x*(norm - 2.0); + B(7) = sS*(left.s*B(7) - 2*(left.x*b1 + left.y*b3)) + + w*right.y*(norm - 2.0); + + // Normalization of matrix A + double a0 = A(0,0), a1 = A(0,1), a6 = A(0,6), a7 = A(0,7), a9 = A(1,1); + double a15 = A(1,7), a22 = A(2,6), a23 = A(2,7), a31 = A(3,7); + + A(0,0) = s2 * A(0,0) - w*right.x*right.x; + A(0,1) = s2 * A(0,1) - w*right.x*right.y; + A(0,4) = 0; + A(0,6) = right.s*(sS*A(0,6) - right.s*left.x*a0 - left.s*right.x*b0) + + w*right.x*left.x*right.x - right.x * B(0); + A(0,7) = right.s*(sS*A(0,7) - right.s*left.x*a1 - left.s*right.x*b1) + + w*right.x*left.x*right.y - right.y * B(0); + + A(1,1) = s2 * A(1,1) - w*right.y*right.y; + A(1,4) = 0; + A(1,6) = A(0,7); + A(1,7) = right.s*(sS*A(1,7) - right.s*left.x*a9 - left.s*right.y*b1) + + w*right.y*left.x*right.y - right.y * B(1); + + A(2,2) = A(0,0); + A(2,3) = A(0,1); + A(2,5) = 0; + A(2,6) = right.s*(sS*A(2,6) - right.s*left.y*a0 - left.s*right.x*b2) + + w*right.x*left.y*right.x - right.x * B(2); + A(2,7) = right.s*(sS*A(2,7) - right.s*left.y*a1 - left.s*right.x*b3) + + w*right.x*left.y*right.y - right.y * B(2); + + A(3,3) = A(1,1); + A(3,5) = 0; + A(3,6) = A(2,7); + A(3,7) = right.s*(sS*A(3,7) - right.s*left.y*a9 - left.s*right.y*b3) + + w*right.y*left.y*right.y - right.y * B(3); + + A(4,6) = -B(0); + A(4,7) = -B(1); + + A(5,6) = -B(2); + A(5,7) = -B(3); + + A(6,6) = s2*(S2*A(6,6) - 2*left.s*(left.x*a6+left.y*a22) + a0*norm) - + 2*right.x*(B(6) + w*right.x); + A(6,7) = s2*(S2*A(6,7) - 2*left.s*(left.x*a7+left.y*a23) + a1*norm) - + right.x*B(7) - right.y*B(6) - 2*w*right.x*right.y; + + A(7,7) = s2*(S2*A(7,7) - 2*left.s*(left.x*a15+left.y*a31) + a9*norm) - + 2*right.y*(B(7) + w*right.y); + return true; +} + +// `l' (left) and 'r' (right) representing zoom-translation normalizations, +// and `B' the parameters of a projective motion, +// compute l^-1 B r +bool ComputeH::de_normalize(const Normalization& l, + vector& B, + const Normalization& r) +{ + // B := B r + B(4) += r.x * B(0) + r.y * B(1); // Line 1 + B(0) *= r.s; + B(1) *= r.s; + + B(5) += r.x * B(2) + r.y * B(3); // Line 2 + B(2) *= r.s; + B(3) *= r.s; + + double f = r.x * B(6) + r.y * B(7) + 1.0; // Line 3 + if(-minEigenValue < f && f < minEigenValue) + return false; // Origin of right normalization on line at infinity + B(6) *= r.s; + B(7) *= r.s; + + // B := l^-1 B + double s = 1.0 / (l.s * f); + B(0) = (B(0) - l.x*B(6)) * s; // Line 1 + B(1) = (B(1) - l.x*B(7)) * s; + B(4) = (B(4) - l.x* f ) * s; + + B(2) = (B(2) - l.y*B(6)) * s; // Line 2 + B(3) = (B(3) - l.y*B(7)) * s; + B(5) = (B(5) - l.y* f ) * s; + + B(6) /= f; // Line 3 + B(7) /= f; + return true; +} + +} // libNumerics diff --git a/asift_match/src/libNumerics/homography.cpp b/asift_match/src/libNumerics/homography.cpp new file mode 100755 index 0000000..af2a9cc --- /dev/null +++ b/asift_match/src/libNumerics/homography.cpp @@ -0,0 +1,73 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#include "homography.h" + +namespace libNumerics { + +/// Constructor. +Homography::Homography() +: m_H( matrix::eye(3) ) +{} + +/// Put to identity. +void Homography::setId() +{ + m_H = matrix::eye(3); +} + +/// Set to translation. +void Homography::setTrans(double dx, double dy) +{ + setId(); + m_H(0,2) = dx; + m_H(1,2) = dy; +} + +/// Set to zoom. +void Homography::setZoom(double zx, double zy) +{ + setId(); + m_H(0,0) = zx; + m_H(1,1) = zy; +} + +/// Apply homography. +void Homography::operator()(double& x, double& y) const +{ + vector m(3); + m(0) = x; + m(1) = y; + m(2) = 1.0f; + m = m_H * m; + double z_1 = 1.0 / m(2); + x = m(0) * z_1; + y = m(1) * z_1; +} + +/// Compose homographies. +Homography Homography::operator*(const Homography& rhs) const +{ + Homography h; + h.m_H = m_H * rhs.m_H; + h.normalize(); + return h; +} + +/// Inverse homography. +Homography Homography::inverse() const +{ + Homography h; + h.m_H = m_H.inv(); + h.normalize(); + return h; +} + +/// Put coef(2,2) to 1. +void Homography::normalize() +{ + m_H /= m_H(2,2); +} + +} // libNumerics diff --git a/asift_match/src/libNumerics/homography.h b/asift_match/src/libNumerics/homography.h new file mode 100755 index 0000000..54ac80f --- /dev/null +++ b/asift_match/src/libNumerics/homography.h @@ -0,0 +1,83 @@ +#ifndef HOMOGRAPHY_H +#define HOMOGRAPHY_H + +#include "matrix.h" + +namespace libNumerics { + +/// 2-D homography transform. +class Homography { +public: + Homography(); + + void setId(); + void setTrans(double dx, double dy); + void setZoom(double zx, double zy); + + matrix& mat() { return m_H; } + const matrix& mat() const { return m_H; } + + void operator()(double& x, double& y) const; + Homography operator*(const Homography& rhs) const; + Homography inverse() const; +private: + matrix m_H; + void normalize(); +}; + +/// Homography (and more restricted transforms) estimation. +class ComputeH { +public: + enum Type { Translation, // (2 parameters) + Rotation, // Rotation/Translation (3 parameters) + Zoom, // Zoom/Translation (3 parameters) + GeneralZoom, // Non uniform zoom/Translation (4 parameters) + Similarity, // Zoom/Rotation/Translation (4 parameters) + Affine, // (6 parameters) + Projective // (8 parameters) + }; + static Type restrict(Type t); // Return less general motion +public: + ComputeH(Type type); + ~ComputeH(); + + Type type() const { return _type; } + void clear(); + + /// Add corresponding points (x1,y1) and (x2,y2) + void add(float x1, float y1, float x2, float y2, float w = 1.0f); + /// Add corresponding lines of equation u x + v y + w = 0 + void add(float a1, float b1, float c1, + float a2, float b2, float c2, float w = 1.0f); + + float weight() const; ///< Sum of weights (=#correspondences) + float q_error(const Homography& map) const; ///< Quadratic error + float compute(Homography& map) const; ///< LSE motion, return support weight +private: + Type _type; + int n; ///< Dimension of matrix = # unknown parameters + double Ann[64], Bn[8], b; // Min (X 1) (A B) (X 1)^T is X^T = Ann^-1 Bn + + static int size(Type type); + void add_4parameters(float x1, float y1, float x2, float y2, float w); + void add_4parameters(float a1, float b1, float c1, + float a2, float b2, float c2, float w); + void wrap(Homography& map, const vector& v) const; + void unwrap(const Homography& map, vector& v) const; + float q_error(const vector& v) const; // Quadratic error + + bool compute_rotation(vector& B) const; + + /// For Projective, data normalization is required + class Normalization { public: double x, y, s; }; + bool normalize(Normalization& left, + matrix& A, vector& B, + Normalization& right) const; + static bool de_normalize(const Normalization& left, + vector& B, + const Normalization& right); +}; + +} // libNumerics + +#endif diff --git a/ASIFT_tests/demo_ASIFT_src/libNumerics/libNumerics.a b/asift_match/src/libNumerics/libNumerics.a similarity index 100% rename from ASIFT_tests/demo_ASIFT_src/libNumerics/libNumerics.a rename to asift_match/src/libNumerics/libNumerics.a diff --git a/asift_match/src/libNumerics/matrix.cpp b/asift_match/src/libNumerics/matrix.cpp new file mode 100755 index 0000000..8733950 --- /dev/null +++ b/asift_match/src/libNumerics/matrix.cpp @@ -0,0 +1,565 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#ifdef MATRIX_H // Do nothing if not included from matrix.h + +#define INDEX(i,j) ((i) * m_cols + (j)) + +namespace libNumerics { + +/// Constructor for \a m*\a n matrix. +/// \param m number of rows. +/// \param n number of columns. +template +matrix::matrix(int m, int n) +{ + alloc(m, n); +} + +/// Copy constructor. +template +matrix::matrix(const matrix& m) +{ + alloc(m.m_rows, m.m_cols); + for(int i = nElements()-1; i >= 0; i--) + p[i] = m.p[i]; +} + +/// Destructor. +template +matrix::~matrix() +{ + free(); +} + +/// Assignment operator. +template +matrix& matrix::operator=(const matrix& m) +{ + if(&m == this) return *this; + if(m.nElements() != nElements()){ + free(); + alloc(m.m_rows, m.m_cols); + } else { + m_rows = m.m_rows; + m_cols = m.m_cols; + } + for(int i = nElements()-1; i >= 0; i--) + p[i] = m.p[i]; + return *this; +} + +/// Access the coefficient on the \a i-th row, \a j-th column. +template +inline T matrix::operator() (int i, int j) const +{ + assert(i >= 0 && i < m_rows && j >= 0 && j < m_cols); + return p[INDEX(i,j)]; +} + +/// Access the coefficient on the \a i-th row, \a j-th column. +template +inline T& matrix::operator() (int i, int j) +{ + assert(i >= 0 && i < m_rows && j >= 0 && j < m_cols); + return p[INDEX(i,j)]; +} + +template +inline T matrix::operator() (int i) const +{ + assert(i >= 0 && i < nElements()); + return p[i]; +} + +template +inline T& matrix::operator() (int i) +{ + assert(i >= 0 && i < nElements()); + return p[i]; +} + +/// Set matrix at constant value. +/// +/// Assign all coefficients to the value \a a. +template +inline void matrix::operator=(T a) +{ + for(int i = nElements()-1; i >= 0; i--) + p[i] = a; +} + +/// Multiply a matrix by scalar. +/// \param a a scalar. +template +matrix matrix::operator*(T a) const +{ + matrix prod(m_rows, m_cols); + for(int i = nElements()-1; i >= 0; i--) + prod.p[i] = a * p[i]; + return prod; +} + +/// Multiply a matrix by scalar. +/// \param a a scalar. +template +void matrix::operator*=(T a) +{ + for(int i = nElements()-1; i >= 0; i--) + p[i] *= a; +} + +/// Divide a matrix by scalar. +/// \param a a scalar. +template +matrix matrix::operator/(T a) const +{ + return (*this) * ((T)1/a); +} + +/// Divide a matrix by scalar. +/// \param a a scalar. +template +void matrix::operator/=(T a) +{ + *this *= (T)1 / a; +} + +/// Matrix sum. +template +matrix matrix::operator+(const matrix& m) const +{ + assert(m.m_rows == m_rows && m.m_cols == m_cols); + matrix sum(m_rows,m_cols); + for(int i = nElements()-1; i >= 0; i--) + sum.p[i] = p[i] + m.p[i]; + return sum; +} + +/// Matrix sum. +template +void matrix::operator+=(const matrix& m) +{ + assert(m.m_rows == m_rows && m.m_cols == m_cols); + for(int i = nElements()-1; i >= 0; i--) + p[i] += m.p[i]; +} + +/// Matrix subtraction. +template +matrix matrix::operator-(const matrix& m) const +{ + assert(m.m_rows == m_rows && m.m_cols == m_cols); + matrix sub(m_rows,m_cols); + for(int i = nElements()-1; i >= 0; i--) + sub.p[i] = p[i] - m.p[i]; + return sub; +} + +/// Matrix subtraction. +template +void matrix::operator-=(const matrix& m) +{ + assert(m.m_rows == m_rows && m.m_cols == m_cols); + for(int i = nElements()-1; i >= 0; i--) + p[i] -= m.p[i]; +} + +template +matrix matrix::operator-() const +{ + matrix opp(m_rows, m_cols); + for(int i = nElements()-1; i >= 0; i--) + opp.p[i] = -p[i]; + return opp; +} + +/// Matrix multiplication. +template +matrix matrix::operator*(const matrix& m) const +{ + assert(m_cols == m.m_rows); + matrix prod(m_rows, m.m_cols); + T* out = prod.p; + for(int i = 0; i < prod.m_rows; i++) { + const T* left = p + i*m_cols; + for(int j = 0; j < prod.m_cols; j++, out++) { + const T* right = m.p + j; + *out = 0; + for(int k = 0; k < m_cols; k++) { + *out += left[k] * *right; + right += m.m_cols; + } + } + } + return prod; +} + +/// Matrix-vector multiplication. +template +vector matrix::operator*(const vector& m) const +{ + assert(m_cols == m.m_rows); + vector prod(m_rows); + T* out = prod.p; + for(int i = 0; i < prod.m_rows; i++, out++) { + const T* left = p + i*m_cols; + const T* right = m.p; + *out = 0; + for(int k = 0; k < m_cols; k++) + *out += left[k] * right[k]; + } + return prod; +} + +/// Tranposed of matrix. +template +matrix matrix::t() const +{ + matrix t(ncol(), nrow()); + T* out = t.p; + for(int i = 0; i < t.nrow(); i++) { + const T* in = p + i; + for(int j = 0; j < t.ncol(); j++) { + *out++ = *in; + in += ncol(); + } + } + return t; +} + +/// Symmetrize upper part of matrix. +template +void matrix::symUpper() +{ + assert(m_rows == m_cols); + for(int i = 1; i < m_rows; i++) { + const T* in = p + i; + T* out = p + m_cols*i; + for(int j = 0; j < i; j++) { + *out++ = *in; + in += m_cols; + } + } +} + +/// Symmetrize lower part of matrix. +template +void matrix::symLower() +{ + assert(m_rows == m_cols); + for(int i = 1; i < m_rows; i++) { + const T* in = p + m_cols*i; + T* out = p + i; + for(int j = 0; j < i; j++) { + *out = *in++; + out += m_cols; + } + } +} + +template +vector matrix::diag() const +{ + assert(m_rows == m_cols); + vector t(m_rows); + for(int i = 0; i < m_rows; i++) + t.p[i] = p[i*(m_cols+1)]; + return t; +} + +/// Matrix made of zeros. +template +matrix matrix::zeros(int m, int n) +{ + matrix M(m,n); + for(int i = M.nElements()-1; i >= 0; i--) + M.p[i] = (T)0; + return M; +} + +/// Matrix made of ones. +template +matrix matrix::ones(int m, int n) +{ + matrix M(m,n); + for(int i = M.nElements()-1; i >= 0; i--) + M.p[i] = (T)1; + return M; +} + +/// Identity matrix. +template +matrix matrix::eye(int n) +{ + matrix M(n,n); + for(int i = M.nElements()-1; i >= 0; i--) + M.p[i] = (T)0; + for(int i = n-1; i >= 0; i--) + M.p[i*(n+1)] = (T)1; + return M; +} + +/// Extract the submatrix [i0,i1]x[j0,j1]. +/// \param i0 first row +/// \param i1 last row +/// \param j0 first column +/// \param j1 last column +template +matrix matrix::copy(int i0, int i1, int j0, int j1) const +{ + assert(0 <= i0 && i0 <= i1 && i1 <= m_rows && + 0 <= j0 && j0 <= j1 && j1 <= m_cols); + matrix sub(i1-i0+1,j1-j0+1); + T* out = sub.p; + for(int i = i0; i <= i1; i++) { + const T* in = p + INDEX(i, j0); + for(int j = j0; j <= j1; j++) + *out++ = *in++; + } + return sub; +} + +/// Extract the columns of index in [j0,j1]. +/// \param j0 first column +/// \param j1 last column +template +matrix matrix::copyCols(int j0, int j1) const +{ + return copy(0, lastRow(), j0, j1); +} + +/// Extract the rows of index in [i0,i1]. +/// \param i0 first row +/// \param i1 last row +template +matrix matrix::copyRows(int i0, int i1) const +{ + return copy(i0, i1, 0, lastCol()); +} + +/// Paste a matrix in another one, at position (\a i0,\a j0) +/// \param i0 first row where to paste in +/// \param j0 first column where to paste in +/// \param matrix to paste +template +void matrix::paste(int i0, int j0, const matrix& m) +{ + assert(i0 >= 0 && i0+m.m_rows <= m_rows && + j0 >= 0 && j0+m.m_cols <= m_cols); + const T* in = m.p; + for(int i = 0; i < m.m_rows; i++) { + T* out = p + INDEX(i0+i, j0); + for(int j = 0; j < m.m_cols; j++) + *out++ = *in++; + } +} + +/// Concatenate matrices. +template +matrix cat(const matrix& m1, const matrix& m2) +{ + assert(m1.m_rows == m2.m_rows); + matrix m(m1.m_rows, m1.m_cols+m2.m_cols); + m.paste(0, 0, m1); + m.paste(0, m1.m_cols, m2); + return m; +} + +/// Copy column number \a j. +template +vector matrix::col(int j) const +{ + assert(j >= 0 && j < m_cols); + vector c(m_rows); + const T* in = p + j; + for(int i = 0; i < m_rows; i++) { + c(i) = *in; + in += m_cols; + } + return c; +} + +/// Copy row number \a i. +template +inline matrix matrix::row(int i) const +{ + return copy(i, i, 0, lastCol()); +} + +template +void swap(matrix& A, matrix& B) +{ + int i=A.m_rows; + A.m_rows = B.m_rows; + B.m_rows = i; + i = A.m_cols; + A.m_cols = B.m_cols; + B.m_cols = i; + T* p = A.p; + A.p = B.p; + B.p = p; +} + +template +void matrix::swapRows(int i0, int i1) +{ + assert(0 <= i0 && i0 < m_rows && + 0 <= i1 && i1 < m_rows); + T* row0 = p + i0*m_cols; + T* row1 = p + i1*m_cols; + for(int j = m_cols-1; j >= 0; j--) { + T tmp = *row0; *row0++ = *row1; *row1++ = tmp; + } +} + +template +void matrix::swapCols(int j0, int j1) +{ + assert(0 <= j0 && j0 < m_cols && + 0 <= j1 && j1 < m_cols); + T* col0 = p + j0; + T* col1 = p + j1; + for(int i = m_rows-1; i >= 0; i--) { + T tmp = *col0; *col0 = *col1; *col1 = tmp; + col0 += m_cols; + col1 += m_cols; + } +} + +/// Copy the array values in a matrix, row by row. +/// \param m number of rows +/// \param n number of columns +/// \param v an array of scalar of size m*n +template template +void matrix::read(const U* v) +{ + for(int i = nElements()-1; i >= 0; i--) + p[i] = (T)v[i]; +} + +/// Read the coefficients from \a m. +template +inline void matrix::read(const matrix& m) +{ + assert(m.nElements() == nElements()); + read(m.p); +} + +/// Copy the matrix coefficients in an array. +/// +/// The matrix is scanned row by row. +template +void matrix::write(T* vect) const +{ + for(int i = nElements()-1; i >= 0; i--) + vect[i] = p[i]; +} + +template +void matrix::alloc(int m, int n) +{ + assert(m > 0 && n > 0); + m_rows = m; + m_cols = n; + p = new T[m*n]; +} + +template +inline void matrix::free() +{ + delete [] p; + p = NULL; +} + +template +inline int matrix::nElements() const +{ + return m_rows*m_cols; +} + +/// Submatrix without row \a i0 and col \a j0. +template +matrix& matrix::sub(matrix& s, int i0, int j0) const +{ + const T* in = p; + T* out = s.p; + for(int i = 0; i < i0; i++) { + for(int j = 0; j < j0; j++) + *out++ = *in++; + ++in; // Skip col j0 + for(int j = j0+1; j < m_cols; j++) + *out++ = *in++; + } + in += m_cols; // Skip row i0 + for(int i = i0+1; i < m_rows; i++) { + for(int j = 0; j < j0; j++) + *out++ = *in++; + ++in; // Skip col j0 + for(int j = j0+1; j < m_cols; j++) + *out++ = *in++; + } + return s; +} + +/// Trace. +template +T matrix::tr() const +{ + assert(m_rows == m_cols); + T res = (T)0; + for(int i = 0; i < m_rows; i++) + res += p[i*(m_cols+1)]; + return res; +} + +/// Determinant. Slow, use only for small matrices. +template +T matrix::det() const +{ + assert(m_rows == m_cols); + if(m_rows == 1) + return p[0]; + if(m_rows == 2) + return (p[0]*p[3]-p[1]*p[2]); + T res = (T)0; + T sign = (T)1; + matrix s(m_rows-1, m_cols-1); + for(int j = 0; j < m_cols; j++) { + res += sign*p[j]*sub(s,0,j).det(); + sign = -sign; + } + return res; +} + +/// Inverse. Slow, use only for small matrices. +template +matrix matrix::inv() const +{ + assert(m_rows == m_cols); + matrix res(m_rows, m_cols); + if(m_rows == 1) + res.p[0] = (T)1/p[0]; + else { + T d = (T)1 / det(); + T signi = (T)1; + T* out = res.p; + matrix s(m_rows-1, m_cols-1); + for(int i = 0; i < m_rows; i++) { + T signj = signi; + for(int j = 0; j < m_cols; j++) { + *out++ = signj*d*sub(s,j,i).det(); + signj = -signj; + } + signi = -signi; + } + } + return res; +} + +} // namespace libNumerics + +#undef INDEX + +#endif // MATRIX_H diff --git a/asift_match/src/libNumerics/matrix.h b/asift_match/src/libNumerics/matrix.h new file mode 100755 index 0000000..e83387a --- /dev/null +++ b/asift_match/src/libNumerics/matrix.h @@ -0,0 +1,175 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#ifndef MATRIX_H +#define MATRIX_H + +#include +#include + +namespace libNumerics { + +// Forward declaration, definition below +template class vector; +template class matrix; + +template matrix cat(const matrix&, const matrix&); +template void swap(matrix&, matrix&); + +/// Matrix class +template +class matrix +{ +public: + static matrix zeros(int m) { return zeros(m,m); } + static matrix zeros(int m, int n); + static matrix ones(int m) { return ones(m,m); } + static matrix ones(int m, int n); + static matrix eye(int n); ///< Identity matrix. + +public: + matrix(int m, int n); + matrix(const matrix& m); + virtual ~matrix(); + matrix& operator=(const matrix& m); + + int nrow() const { return m_rows; } ///< The number of rows. + int ncol() const { return m_cols; } ///< The number of columns. + T operator() (int i, int j) const; + T& operator() (int i, int j); + T operator() (int i) const; + T& operator() (int i); + + void operator=(T a); + matrix operator*(T a) const; + matrix operator/(T a) const; + void operator*=(T a); + void operator/=(T a); + /// Product by scalar. + friend matrix operator*(T a, const matrix& m) + { return m * a; } + + matrix operator+(const matrix& m) const; + matrix operator-(const matrix& m) const; + matrix operator-() const; ///< Matrix opposite. + matrix operator*(const matrix& m) const; + vector operator*(const vector& m) const; + + void operator+=(const matrix& m); + void operator-=(const matrix& m); + + matrix t() const; ///< Transpose. + vector diag() const; ///< Diagonal of matrix. + T tr() const; + T det() const; + matrix inv() const; + + void symUpper(); + void symLower(); + + matrix copy(int i0, int i1, int j0, int j1) const; + matrix copyCols(int j0, int j1) const; + matrix copyRows(int i0, int i1) const; + void paste(int i0, int j0, const matrix& block); + friend matrix cat(const matrix& left, const matrix& right); + vector col(int j) const; ///< Copy column. + matrix row(int i) const; ///< Copy row. + int lastCol() const {return m_cols-1;} ///< Index of last column. + int lastRow() const {return m_rows-1;} ///< Index of last row. + + friend void swap(matrix&, matrix&); + void swapRows(int i0, int i1); + void swapCols(int j0, int j1); + + template + void read(const U* v); + void read(const matrix& v); + void write(T* vect) const; + +protected: + int m_rows; ///< Number of rows. + int m_cols; ///< Number of columns. + T* p; ///< 1-D array of coefficients. + + void alloc(int m, int n); ///< Allocate the array value. + void free(); ///< Free the array value. + int nElements() const; ///< Number of elements in the matrix. + matrix& sub(matrix& s, int i, int j) const; +}; // class matrix + +/// Column vector class (template) +template +class vector : public matrix +{ +public: + explicit vector(int m); + vector(T x); + vector(T x, T y); + vector(T x, T y, T z); + vector(const vector& v); + virtual ~vector() {} + using matrix::operator=; + vector& operator=(const vector& v); + // void operator=(T a); + + vector operator*(T a) const; + vector operator/(T a) const; + /// Product of a vector by a scalar. + friend vector operator*(T a, const vector& v) + { return v * a; } + + vector operator+(const vector& v) const; + vector operator-(const vector& v) const; + vector operator-() const; ///< Vector opposite. + + matrix operator*(const matrix& m) const; + matrix diag() const; + T qnorm() const; + + vector copy(int i0, int i1) const; + void paste(int i0, const vector& v); +}; + +} // namespace libNumerics + +/// Output matrix coefficients. +template +inline std::ostream& operator<<(std::ostream& out, + const libNumerics::matrix& m) +{ + for(int i = 0; i < m.nrow(); ++i) { + out << ((i==0)? "[": ";"); + for (int j = 0; j < m.ncol(); ++j) + out << " " << m(i,j); + } + out << " ]"; + return out; +} + +/// Input matrix. Need to know the dimensions in advance... +template +inline std::istream& operator>>(std::istream& in, + libNumerics::matrix& m) +{ + char c; + for(int i=0; i < m.nrow(); ++i) { + in >> c; + for(int j=0; j < m.ncol(); ++j) + in >> m(i,j); + } + in >> c; + return in; +} + +template +T dot(const libNumerics::vector& u, const libNumerics::vector& v); +template +libNumerics::vector cross(const libNumerics::vector& u, + const libNumerics::vector& v); + +// Need to see definitions for templates... +#include "matrix.cpp" +#include "vector.cpp" + +#endif diff --git a/asift_match/src/libNumerics/numerics.cpp b/asift_match/src/libNumerics/numerics.cpp new file mode 100755 index 0000000..e4ad1ec --- /dev/null +++ b/asift_match/src/libNumerics/numerics.cpp @@ -0,0 +1,487 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#include "numerics.h" +#include +#include +#include +#include + +namespace libNumerics { + +const flnum MinLM::DEFAULT_RELATIVE_TOL = 1E-3; +const flnum MinLM::DEFAULT_LAMBDA_INIT = 1E-3; +const flnum MinLM::DEFAULT_LAMBDA_FACT = 10.0; +const flnum MinLM::EPSILON_KERNEL = 1E-9; + +inline flnum ABS(flnum x) +{ return (x >= 0)? x: -x; } + +/// Resolution by LU decomposition with pivot. +bool solveLU(const matrix& A, const vector& B, vector& X) +{ + X = B; + return solveLU(A, X); +} + +/// Replace X by A^{-1}X, by LU solver. +bool solveLU(matrix A, vector& X) +{ + assert(A.nrow() == A.ncol()); + int n = A.nrow(); + vector rowscale(n); // Implicit scaling of each row + std::vector permut(n,0); // Permutation of rows + + // Get the implicit scaling information of each row + for(int i=0; i< n; i++) { + flnum max = 0.0; + for(int j=0; j< n; j++) { + flnum tmp = ABS(A(i,j)); + if (tmp> max) + max = tmp; + } + if(max == 0.0) + return false; + rowscale(i) = 1.0/max; + } + // Perform the decomposition + for(int k=0; k < n; k++) { + // Search for largest pivot element + flnum max = rowscale(k)*ABS(A(k,k)); + int imax = k; + for(int i=k+1; i < n; i++) { + flnum tmp = rowscale(i)*ABS(A(i,k)); + if(tmp > max) { + max = tmp; + imax = i; + } + } + if(max == 0.0) + return false; + + // Interchange rows if needed + if(k != imax) { + A.swapRows(k, imax); + rowscale(imax) = rowscale(k); // Scale of row k no longer needed + } + permut[k] = imax; // permut(k) was not initialized before + flnum Akk = 1/A(k,k); + for(int i=k+1; i < n; i++) { + flnum tmp = A(i,k) *= Akk; // Divide by pivot + for (int j=k+1;j < n; j++) // Reduce the row + A(i,j) -= tmp*A(k,j); + } + } + // Forward substitution + for (int k=0; k < n; k++) { + flnum sum = X(permut[k]); + X(permut[k]) = X(k); + for(int j = 0; j < k; j++) + sum -= A(k,j)*X(j); + X(k) = sum; + } + // Backward substitution + for(int k=n-1; k >= 0; k--) { + flnum sum = X(k); + for(int j=k+1; j < n; j++) + sum -= A(k,j)*X(j); + X(k) = sum/A(k,k); + } + return true; +} + +/// Decompose A into U diag(W) V^T with U(m,n) and V(n,n) having orthonormal +/// vectors. +SVD::SVD(const matrix& A) +: m_U(A), m_V(A.ncol(),A.ncol()), m_W(A.ncol()) +{ + compute(); + sort(); +} + +/// SVD computation. Initial matrix stored in m_U as input. +void SVD::compute() +{ + const flnum EPSILON = std::numeric_limits::epsilon(); + const int SVD_MAX_ITS = 30; + + int rows = m_U.nrow(); + int cols = m_U.ncol(); + flnum g, scale, anorm; + vector RV1(cols); + + // Householder reduction to bidiagonal form: + anorm = g = scale = 0.0; + for (int i=0; i< cols; i++) { + int l = i + 1; + RV1(i) = scale*g; + g = scale = 0.0; + if(i< rows) { + for (int k=i; k< rows; k++) + scale += ABS(m_U(k,i)); + if (scale != 0.0) { + flnum invScale=1.0/scale, s=0.0; + for (int k=i; k< rows; k++) { + m_U(k,i) *= invScale; + s += m_U(k,i) * m_U(k,i); + } + flnum f = m_U(i,i); + g = - withSignOf(std::sqrt(s),f); + flnum h = 1.0 / (f*g - s); + m_U(i,i) = f - g; + for (int j=l; j< cols; j++) { + s = 0.0; + for (int k=i; k< rows; k++) + s += m_U(k,i) * m_U(k,j); + f = s * h; + for (int k=i; k< rows; k++) + m_U(k,j) += f * m_U(k,i); + } + for (int k=i; k< rows; k++) + m_U(k,i) *= scale; + } + } + m_W(i) = scale * g; + g = scale = 0.0; + if ( i< rows && i< cols-1 ) { + for (int k=l; k< cols; k++) + scale += ABS(m_U(i,k)); + if (scale != 0.0) { + flnum invScale=1.0/scale, s=0.0; + for (int k=l; k< cols; k++) { + m_U(i,k) *= invScale; + s += m_U(i,k) * m_U(i,k); + } + flnum f = m_U(i,l); + g = - withSignOf(std::sqrt(s),f); + flnum h = 1.0 / (f*g - s); + m_U(i,l) = f - g; + for (int k=l; k< cols; k++) + RV1(k) = m_U(i,k) * h; + for (int j=l; j< rows; j++) { + s = 0.0; + for (int k=l; k< cols; k++) + s += m_U(j,k) * m_U(i,k); + for (int k=l; k< cols; k++) + m_U(j,k) += s * RV1(k); + } + for (int k=l; k< cols; k++) + m_U(i,k) *= scale; + } + } + anorm = std::max(anorm, ABS(m_W(i)) + ABS(RV1(i)) ); + } + + // Accumulation of right-hand transformations: + m_V(cols-1,cols-1) = 1.0; + for (int i= cols-2; i>=0; i--) { + m_V(i,i) = 1.0; + int l = i+1; + g = RV1(l); + if (g != 0.0) { + flnum invgUil = 1.0 / (m_U(i,l)*g); + for (int j=l; j< cols; j++) + m_V(j,i) = m_U(i,j) * invgUil; + for (int j=l; j< cols; j++){ + flnum s = 0.0; + for (int k=l; k< cols; k++) + s += m_U(i,k) * m_V(k,j); + for (int k=l; k< cols; k++) + m_V(k,j) += s * m_V(k,i); + } + } + for (int j=l; j< cols; j++) + m_V(i,j) = m_V(j,i) = 0.0; + } + + // Accumulation of left-hand transformations: + for (int i=std::min(rows,cols)-1; i>=0; i--) { + int l = i+1; + g = m_W(i); + for (int j=l; j< cols; j++) + m_U(i,j) = 0.0; + if (g != 0.0) { + g = 1.0 / g; + flnum invUii = 1.0 / m_U(i,i); + for (int j=l; j< cols; j++) { + flnum s = 0.0; + for (int k=l; k< rows; k++) + s += m_U(k,i) * m_U(k,j); + flnum f = (s * invUii) * g; + for (int k=i; k< rows; k++) + m_U(k,j) += f * m_U(k,i); + } + for (int j=i; j< rows; j++) + m_U(j,i) *= g; + } else + for (int j=i; j< rows; j++) + m_U(j,i) = 0.0; + m_U(i,i) = m_U(i,i) + 1.0; + } + + // Diagonalization of the bidiagonal form: + for (int k=cols-1; k>=0; k--) { // Loop over singular values + for (int its=1; its<=SVD_MAX_ITS; its++) { + bool flag = false; + int l = k; + int nm = k-1; + while(l>0 && ABS(RV1(l)) > EPSILON*anorm) { // Test for splitting + if(ABS(m_W(nm)) <= EPSILON*anorm) { + flag = true; + break; + } + l--; + nm--; + } + if (flag) { // Cancellation of RV1(l), if l > 0 + flnum c=0.0, s=1.0; + for (int i=l; i< k+1; i++) { + flnum f = s * RV1(i); + RV1(i) = c * RV1(i); + if (ABS(f)<=EPSILON*anorm) + break; + g = m_W(i); + flnum h = SVD::hypot(f,g); + m_W(i) = h; + h = 1.0 / h; + c = g * h; + s = - f * h; + for (int j=0; j< rows; j++) + rotate(m_U(j,nm),m_U(j,i), c,s); + } + } + flnum z = m_W(k); + if (l==k) { // Convergence of the singular value + if (z< 0.0) { // Singular value is made nonnegative + m_W(k) = -z; + for (int j=0; j< cols; j++) + m_V(j,k) = - m_V(j,k); + } + break; + } + // Exception if convergence to the singular value not reached: + if(its==SVD_MAX_ITS) throw SvdConvergenceError(); + flnum x = m_W(l); // Get QR shift value from bottom 2x2 minor + nm = k-1; + flnum y = m_W(nm); + g = RV1(nm); + flnum h = RV1(k); + flnum f = ( (y-z)*(y+z) + (g-h)*(g+h) ) / ( 2.0*h*y ); + g = SVD::hypot(f,1.0); + f = ( (x-z)*(x+z) + h*(y/(f+withSignOf(g,f)) - h) ) / x; + // Next QR transformation (through Givens reflections) + flnum c=1.0, s=1.0; + for (int j=l; j<=nm; j++) { + int i = j+1; + g = RV1(i); + y = m_W(i); + h = s * g; + g = c * g; + z = SVD::hypot(f,h); + RV1(j) = z; + z = 1.0 / z; + c = f * z; + s = h * z; + f = x*c + g*s; + g = g*c - x*s; + h = y * s; + y *= c; + for(int jj=0; jj < cols; jj++) + rotate(m_V(jj,j),m_V(jj,i), c,s); + z = SVD::hypot(f,h); + m_W(j) = z; + if (z!=0.0) { // Rotation can be arbitrary if z = 0.0 + z = 1.0 / z; + c = f * z; + s = h * z; + } + f = c*g + s*y; + x = c*y - s*g; + for(int jj=0; jj < rows; jj++) + rotate(m_U(jj,j),m_U(jj,i), c,s); + } + RV1(l) = 0.0; + RV1(k) = f; + m_W(k) = x; + } + } +} + +/// Recompose from SVD. This should be the initial matrix. +matrix SVD::compose() const +{ + return m_U * m_W.diag() * m_V.t(); +} + +flnum SVD::withSignOf(flnum a, flnum b) +{ return b >= 0 ? (a >= 0 ? a : -a) : (a >= 0 ? -a : a); } + +/// Replace hypot of math.h by robust numeric implementation. +flnum SVD::hypot(flnum a, flnum b) +{ + a = ABS(a); + b = ABS(b); + if(a > b) { + b /= a; + return a*std::sqrt(1.0 + b*b); + } else if(b) { + a /= b; + return b*std::sqrt(1.0 + a*a); + } + return 0.0; +} + +/// Utility function used while computing SVD. +void SVD::rotate(flnum& a, flnum& b, flnum c, flnum s) +{ + flnum d = a; + a = +d*c +b*s; + b = -d*s +b*c; +} + +class SVDElement { +public: + SVDElement(const vector& W, int i) + : m_val(W(i)), m_i(i) {} + bool operator<(const SVDElement& e) const + { return (m_val>e.m_val); } + + flnum m_val; + int m_i; +}; + +/// Sort SVD by decreasing order of singular value. +void SVD::sort() +{ + std::vector vec; + for(int i=0; i < m_U.ncol(); i++) + vec.push_back( SVDElement(m_W, i) ); + std::sort(vec.begin(), vec.end()); + // Apply permutation + for(int i=m_U.ncol()-1; i >=0; i--) + if(vec[i].m_i != i) { // Find cycle of i + const vector colU = m_U.col(i); + const vector colV = m_V.col(i); + const flnum w = m_W(i); + int j = i; + while(vec[j].m_i != i) { + m_U.paste(0,j, m_U.col(vec[j].m_i)); + m_V.paste(0,j, m_V.col(vec[j].m_i)); + m_W(j) = m_W(vec[j].m_i); + std::swap(j,vec[j].m_i); + } + vec[j].m_i = j; + m_U.paste(0,j, colU); + m_V.paste(0,j, colV); + m_W(j) = w; + } +} + +/// Constructor. +MinLM::MinLM() +: iterations(0), relativeTol(DEFAULT_RELATIVE_TOL), + lambdaInit(DEFAULT_LAMBDA_INIT), lambdaFact(DEFAULT_LAMBDA_FACT) +{} + +/// In equation JtJ X = B, remove columns of J close to 0, so that JtJ can be +/// invertible +void MinLM::compress(matrix& JtJ, vector& B) +{ + flnum max=0; + for(int i=0; i < JtJ.nrow(); i++) + if(JtJ(i,i) > max) + max = JtJ(i,i); + max *= EPSILON_KERNEL; + m_nullCols.clear(); + for(int i=0; i < JtJ.nrow(); i++) + if(JtJ(i,i) <= max) + m_nullCols.push_back(i); + if( m_nullCols.empty() ) + return; + int n=(int)m_nullCols.size(); + matrix JtJ2(JtJ.nrow()-m_nullCols.size(), + JtJ.ncol()-m_nullCols.size()); + vector B2(B.nrow()-(int)m_nullCols.size()); + for(int i=0,i2=0; i < JtJ.nrow(); i++) { + if(i-i2 < n && m_nullCols[i-i2]==i) + continue; + for(int j=0,j2=0; j < JtJ.ncol(); j++) { + if(j-j2 < n && m_nullCols[j-j2]==j) + continue; + JtJ2(i2,j2) = JtJ(i,j); + j2++; + } + B2(i2) = B(i); + i2++; + } + swap(JtJ,JtJ2); + swap(B,B2); +} + +/// Insert 0 in rows of B that were removed by \c compress() +void MinLM::uncompress(vector& B) +{ + if(m_nullCols.empty()) + return; + int n=(int)m_nullCols.size(); + vector B2(B.nrow()+(int)m_nullCols.size()); + for(int i=0,i2=0; i2 < B2.nrow(); i2++) + if(i2-i < n && m_nullCols[i2-i]==i2) + B2(i2)=0; + else + B2(i2) = B(i++); + swap(B,B2); +} + +/// Perform minimization. +/// \a targetRMSE is the root mean square error aimed at. +/// Return the reached RMSE. Since the class does not know the dimension, the +/// real RMSE should be this value multiplied by sqrt(dim). For example, for 2-D +/// points this would be sqrt(2) times the returned value. +flnum MinLM::minimize(vector& P, const vector& yData, + flnum targetRMSE, int maxIters) +{ + flnum errorMax = targetRMSE*targetRMSE*yData.nrow(); + vector yModel( yData.nrow() ); + modelData(P, yModel); + vector E( yData-yModel ); + flnum error = E.qnorm(); + matrix J( yData.nrow(), P.nrow() ); + modelJacobian(P, J); + matrix Jt = J.t(); + matrix JtJ = Jt*J; + vector B = Jt*E; + compress(JtJ, B); + + flnum lambda = lambdaInit; + for(iterations=0; iterations < maxIters && error > errorMax; iterations++) { + matrix H(JtJ); + for(int i = 0; i < H.nrow(); i++) + H(i,i) *= 1+lambda; + vector dP( P.nrow() ); + solveLU(H, B, dP); + uncompress(dP); + vector tryP = P + dP; + modelData(tryP, yModel); + E = yData - yModel; + flnum tryError = E.qnorm(); + if(ABS(tryError-error) <= relativeTol*error) + break; + if(tryError > error) + lambda *= lambdaFact; + else { + lambda /= lambdaFact; + error = tryError; + P = tryP; + modelJacobian(P, J); + Jt = J.t(); + JtJ = Jt*J; + B = Jt*E; + compress(JtJ, B); + } + } + return sqrt(error/yData.nrow()); +} + +} // namespace libNumerics diff --git a/asift_match/src/libNumerics/numerics.h b/asift_match/src/libNumerics/numerics.h new file mode 100755 index 0000000..63d3257 --- /dev/null +++ b/asift_match/src/libNumerics/numerics.h @@ -0,0 +1,66 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#ifndef NUMERICS_H +#define NUMERICS_H + +#include "matrix.h" +#include + +namespace libNumerics { + class NumericsException {}; + class SvdConvergenceError : public NumericsException {}; + typedef double flnum; + + /// Solve system AX = B. + bool solveLU(const matrix& A, const vector& B, + vector& X); + bool solveLU(matrix A, vector& B); + + /// Singular Value Decomposition + class SVD { + public: + SVD(const matrix& A); + matrix& U() { return m_U; } + vector& W() { return m_W; } + matrix& V() { return m_V; } + matrix compose() const; + + private: + matrix m_U, m_V; + vector m_W; + static flnum withSignOf(flnum a, flnum b); + static flnum hypot(flnum a, flnum b); + static void rotate(flnum& a, flnum& b, flnum c, flnum s); + void compute(); + void sort(); + }; + + /// Levenberg-Marquardt minimization. + class MinLM { + static const flnum DEFAULT_RELATIVE_TOL; + static const flnum DEFAULT_LAMBDA_INIT; + static const flnum DEFAULT_LAMBDA_FACT; + static const flnum EPSILON_KERNEL; + public: + MinLM(); + flnum minimize(vector& P, const vector& ydata, + flnum targetRMSE=0.1, int maxIters=300); + virtual void modelData(const vector& P, + vector& ymodel) const = 0; + virtual void modelJacobian(const vector& P, + matrix& J) const = 0; + int iterations; + flnum relativeTol; + flnum lambdaInit; + flnum lambdaFact; + private: + std::vector m_nullCols; + void compress(matrix& JtJ, vector& B); + void uncompress(vector& B); + }; + +} // namespace libNumerics + +#endif diff --git a/asift_match/src/libNumerics/numerics.o b/asift_match/src/libNumerics/numerics.o new file mode 100644 index 0000000000000000000000000000000000000000..25cb69c3b0fac067bf8fc003976d5d68ebf3a134 GIT binary patch literal 81120 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 +matrix skew(const vector& v) +{ + assert(v.nrow() == 3); + matrix M(3,3); + M(0,0) = M(1,1) = M(2,2) = 0; + M(1,2) = -(M(2,1)=v(0)); + M(2,0) = -(M(0,2)=v(1)); + M(0,1) = -(M(1,0)=v(2)); + return M; +} + +template +matrix rotation(vector w) +{ + assert(w.nrow() == 3); + T n = sqrt(w.qnorm()); + T c = cos(n); + matrix R = c*matrix::eye(3); + if(n) { + w /= n; + R += skew(sin(n)*w); + R += (1-c)*w*w.t(); + } + return R; +} + +template +vector rotationAxis(const matrix& R) +{ + assert(R.nrow() == 3 && R.ncol() == 3); + vector w(3); + T n = acos(0.5*(R.tr()-1)); + if(n == 0) + w = 0; + else { + w(0) = R(2,1)-R(1,2); + w(1) = R(0,2)-R(2,0); + w(2) = R(1,0)-R(0,1); + w *= n/(2*sin(n)); + } + return w; +} + +} // libNumerics + +#endif // RODRIGUES_H diff --git a/asift_match/src/libNumerics/rodrigues.h b/asift_match/src/libNumerics/rodrigues.h new file mode 100755 index 0000000..9d7a6d4 --- /dev/null +++ b/asift_match/src/libNumerics/rodrigues.h @@ -0,0 +1,24 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#ifndef RODRIGUES_H +#define RODRIGUES_H + +#include "matrix.h" +#include + +namespace libNumerics { + +/// Skew-symmetric matrix of 3-vector v. +template matrix skew(const vector& v); +/// Rodrigues's rotation: exp(w_x). +template matrix rotation(vector w); +/// Inverse Rodrigues's formula: w s.t. R=exp(w_x). +template vector rotationAxis(const matrix& R); + +} // libNumerics + +#include "rodrigues.cpp" + +#endif diff --git a/asift_match/src/libNumerics/vector.cpp b/asift_match/src/libNumerics/vector.cpp new file mode 100755 index 0000000..9956628 --- /dev/null +++ b/asift_match/src/libNumerics/vector.cpp @@ -0,0 +1,179 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#ifdef MATRIX_H // Do nothing if not included from matrix.h + +namespace libNumerics { + +/// Constructor +template +vector::vector(int m) +: matrix(m, 1) +{} + +/// 1-vector constructor. +template +vector::vector(T x) +: matrix(1,1) +{ + this->p[0] = x; +} + +/// 2-vector constructor. +template +vector::vector(T x, T y) +: matrix(2,1) +{ + this->p[0] = x; + this->p[1] = y; +} + +/// 3-vector constructor. +template +vector::vector(T x, T y, T z) +: matrix(3,1) +{ + this->p[0] = x; + this->p[1] = y; + this->p[2] = z; +} + +/// Copy constructor +template +vector::vector(const vector& v) +: matrix(v) +{} + +/// Assignment operator +template +vector& vector::operator=(const vector& v) +{ + matrix::operator=(v); + return *this; +} + +/// Multiply a vector by scalar. +/// \param a a scalar. +template +vector vector::operator*(T a) const +{ + vector v(this->m_rows); + for(int i = this->m_rows-1; i >= 0; i--) + v.p[i] = a*this->p[i]; + return v; +} + +/// Divide a vector by scalar. +/// \param a a scalar. +template +inline vector vector::operator/(T a) const +{ + return operator*( (T)1/a ); +} + +/// Addition of vectors. +template +vector vector::operator+(const vector& v) const +{ + assert(this->m_rows == v.m_rows); + vector sum(this->m_rows); + for(int i = this->m_rows-1; i >= 0; i--) + sum.p[i] = this->p[i] + v.p[i]; + return sum; +} + +/// Subtraction of vectors. +template +vector vector::operator-(const vector& v) const +{ + assert(this->m_rows == v.m_rows); + vector sub(this->m_rows); + for(int i = this->m_rows-1; i >= 0; i--) + sub.p[i] = this->p[i] - v.p[i]; + return sub; +} + +/// Opposite of vector. +template +vector vector::operator-() const +{ + vector v(this->m_rows); + for(int i = this->m_rows-1; i >= 0; i--) + v.p[i] = -this->p[i]; + return v; +} + +/// Vector times matrix. +template +matrix vector::operator*(const matrix& m) const +{ + return matrix::operator*(m); +} + +/// Diagonal matrix defined by its diagonal vector. +template +matrix vector::diag() const +{ + matrix d(this->m_rows, this->m_rows); + d = (T)0; + for(int i = this->m_rows-1; i >= 0; i--) + d(i,i) = this->p[i]; + return d; +} + +/// Square L^2 norm of vector. +template +T vector::qnorm() const +{ + T q = (T)0; + for(int i = this->m_rows-1; i >= 0; i--) + q += this->p[i]*this->p[i]; + return q; +} + +/// Subvector from \a i0 to \a i1. +template +vector vector::copy(int i0, int i1) const +{ + assert(0 <= i0 && i0 <= i1 && i1 <= this->m_rows); + vector v(i1-i0+1); + for(int i=i0; i <= i1; i++) + v.p[i-i0] = this->p[i]; + return v; +} + +/// Paste vector \a v from row i0. +template +void vector::paste(int i0, const vector& v) +{ + matrix::paste(i0, 0, v); +} + +} // namespace libNumerics + +/// Scalar product. +template +T dot(const libNumerics::vector& u, const libNumerics::vector& v) +{ + assert(u.nrow() == v.nrow()); + T d = (T)0; + for(int i = u.nrow()-1; i >= 0; i--) + d += u(i)*v(i); + return d; +} + +/// Cross product. +template +libNumerics::vector cross(const libNumerics::vector& u, + const libNumerics::vector& v) +{ + assert(u.nrow() == 3 && v.nrow() == 3); + libNumerics::vector w(3); + w(0) = u(1)*v(2) - u(2)*v(1); + w(1) = u(2)*v(0) - u(0)*v(2); + w(2) = u(0)*v(1) - u(1)*v(0); + return w; +} + +#endif // MATRIX_H diff --git a/asift_match/src/library.cpp b/asift_match/src/library.cpp new file mode 100755 index 0000000..fb5ecb8 --- /dev/null +++ b/asift_match/src/library.cpp @@ -0,0 +1,945 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + + +#include "library.h" + + + +void wxwarning(const char * message, const char *function,const char *file) +{ + + printf("warning :: %s :: %s :: %s\n", file, function, message); + +} + + +void wxerror(const char * message, const char *function, const char *file) +{ + + printf("error :: %s :: %s :: %s\n", file, function, message); + exit(-1); + +} + + + + +double fsqr(double a) { return a*a; } + + +void fill_exp_lut(float *lut, int size) +{ + for(int i=0; i< size;i++) lut[i]=expf( - (float) i / LUTPRECISION); +} + + + + +/* Looks for f(dif) in the lut */ +float slut(float dif,float *lut) +{ + if (dif >= (float) LUTMAX) return 0.0; + + int x= (int) floor(dif*LUTPRECISION); + + float y1=lut[x]; + float y2=lut[x+1]; + + return y1 + (y2-y1)*(dif*LUTPRECISION - (float) x); +} + + + + +float max(float *u,int *pos, int size) +{ + float max=u[0]; + if (pos) *pos=0; + for(int i=1; imax){ max=u[i]; if (pos) *pos=i; } + return max; +} + + +float min(float *u,int *pos,int size) +{ + float min=u[0]; + if (pos) *pos=0; + for(int i=1;i= value && !inverse) v[i]= 255.0; + else if (u[i] <= value && inverse) v[i]= 255.0; + else v[i]= 0.0; + } +} + + + +float * gauss(int sflag,float std,int *size) +{ + + float *u,prec = 4.0,shift; + double v; +// int n,i,flag; + int n,i; + int flag = 1; //Guoshen Yu + + + if (sflag) n=*size; + else + n = 1+2*(int)ceil((double)std*sqrt(prec*2.*log(10.))); + + u =new float[n]; + + if (n==1) + u[0]=1.0; + else{ + + shift = 0.5*(float)(n-1); + + for (i=(n+1)/2;i--;) { + v = ((double)i - (double) shift)/(double)std; + u[i] = u[n-1-i] = (float) exp(-0.5*v*v); + } + } + +// if (flag = normalize(u,n)) { + if (flag == normalize(u,n)) + { + *size=n; + return u; + } + else + { + printf("ERROR: _gauss: _normalize: normalization equals zero.\n"); + delete[] u; /*memcheck*/ + return 0; // Guoshen Yu + } +} + + + +/* Quicksort, values in arr are set in increasing order and brr elements are switched at the same time*/ +void FSWAP(float *x,float *y) +{ + float aux; + aux=*x; + *x=*y; + *y=aux; +} + + + +void quick_sort(float *arr,float *brr,int n) +{ + int M=7,NSTACK=50; + int i,ir,j,k,jstack=-1,l=0; + float a,b; + int istack[50]; + + ir=n-1; + + + for(;;){ + if(ir-l=l;i--){ + if (arr[i]<=a) break; + arr[i+1]=arr[i]; + brr[i+1]=brr[i]; + } + arr[i+1]=a; + brr[i+1]=b; + + } + + if (jstack<0) break; + ir=istack[jstack--]; + l=istack[jstack--]; + } else { + + k=(l+ir) >> 1; + FSWAP(&arr[k],&arr[l+1]); + FSWAP(&brr[k],&brr[l+1]); + if (arr[l]>arr[ir]){ + FSWAP(&arr[l],&arr[ir]); + FSWAP(&brr[l],&brr[ir]); + } + if (arr[l+1]>arr[ir]){ + FSWAP(&arr[l+1],&arr[ir]); + FSWAP(&brr[l+1],&brr[ir]); + } + if (arr[l]>arr[l+1]){ + FSWAP(&arr[l],&arr[l+1]); + FSWAP(&brr[l],&brr[l+1]); + } + i=l+1; + j=ir; + a=arr[l+1]; + b=brr[l+1]; + for(;;){ + do i++; while (arr[i]a); + if (j=NSTACK) { printf("Stack too small\n"); exit(-1);} + if (ir-i+1>=j-l){ + istack[jstack]=ir; + istack[jstack-1]=i; + ir=j-1; + } else { + istack[jstack]=j-1; + istack[jstack-1]=l; + l=i; + } + + } + } + + +} + + + +/// histogram of values. 'n' (number of bins) or 's' (step) must be selected in flag while the other value is filled +float * histo(float* input, float *iminim, float *imaxim, int *n, float *s, int size, char flag) +{ + + if (flag != 's' && flag != 'n') { printf("Warning (histo): Please select s or n as flag\n"); return NULL; } + + float minim; + if (iminim) minim = *iminim; + else minim = min(input, NULL, size); + + float maxim; + if (imaxim) maxim = *imaxim; + else maxim = max(input, NULL, size); + + int num; + float step; + if (flag == 'n') + { + num = *n; + step = (maxim-minim)/ (float)num; + *s = step; + } else + { + step = *s; + num = (int)(0.5+(maxim-minim)/step); + *n = num; + } + + float *histo = new float[num]; + clear(histo,0.0,num); + + + for(int i=0; i < size; i++) + { + + int cell = (int) floorf((input[i]-minim) / step); + + if (cell < 0) cell = 0; + if (cell >= num) cell = num - 1; + + histo[cell]++; + } + + + return histo; + +} + + + + + +///////////////////////////////////////////////////////////////////////////////////////////////////// Used and checked image functions + +void compute_gradient_orientation(float* igray,float *grad, float *ori, int width, int height) +{ + + float xgrad, ygrad; + int rows, cols, r, c; + + rows = height; + cols = width; + + + for (r = 0; r < rows; r++) + for (c = 0; c < cols; c++) { + if (c == 0) + xgrad = 2.0 * (igray[r*cols+c+1] - igray[r*cols+c]); + else if (c == cols-1) + xgrad = 2.0 * (igray[r*cols+c] - igray[r*cols+c-1]); + else + xgrad = igray[r*cols+c+1] - igray[r*cols+c-1]; + if (r == 0) + ygrad = 2.0 * (igray[r*cols+c] - igray[(r+1)*cols+c]); + else if (r == rows-1) + ygrad = 2.0 * (igray[(r-1)*cols+c] - igray[r*cols+c]); + else + ygrad = igray[(r-1)*cols+c] - igray[(r+1)*cols+c]; + + + if (grad) grad[r*cols+c] = (float)sqrt((double)(xgrad * xgrad + ygrad * ygrad)); + if (ori) ori[r*cols+c] = (float)atan2 (-(double)ygrad,(double)xgrad); + + } +} + + + + +void sample(float *igray,float *ogray, float factor, int width, int height) +{ + + int swidth = (int)((float) width / factor); + int sheight = (int)((float) height / factor); + + for(int j=0; j < sheight; j++) + for(int i=0; i < swidth; i++) + ogray[j*swidth + i] = igray[(int)((float) j * factor) * width + (int) ((float) i*factor)]; + +} + + +void sample_aglomeration(float *igray,float *ogray, float factor, int width, int height) +{ + + int swidth = (int)((float) width / factor); + int sheight = (int)((float) height / factor); + int ssize = swidth * sheight; + + clear(ogray,0.0,swidth*sheight); + + for(int j=0; j < height; j++) + for(int i=0; i < width; i++){ + int index = (int)((float) j / factor) * swidth + (int) ((float) i / factor); + if (index < ssize) ogray[index] += igray[j*width+i]; + } + + factor *= factor; + for(int i = 0; i < swidth*sheight; i++) + ogray[i] /= factor; + + +} + + +/* +void extract(float *igray,float *ogray, int ax, int ay,int cwidth, int cheight,int width, int height) +{ + for(int j=0; j < cheight; j++) + for(int i=0; i < cwidth; i++) + ogray[j*cwidth + i] = igray[(ay+j)*width + ax+i]; +} + */ + + +void gray(float *red, float *green,float *blue, float *out, int width, int height) +{ + for(int i=width*height-1; i>0; i--) out[i] = (red[i] + green[i] + blue[i]) /3.0; +} + + +/* +float l2_distance(float *u0,float *u1,int i0,int j0,int i1,int j1,int radius,int width,int height) +{ + + int wsize=(2*radius+1)*(2*radius+1); + + float dist=0.0; + for (int s=-radius; s<= radius; s++){ + + int l = (j0+s)*width + (i0-radius); + float *ptr0 = &u0[l]; + + l = (j1+s)*width + (i1-radius); + float *ptr1 = &u1[l]; + + for(int r=-radius;r<=radius;r++,ptr0++,ptr1++){ float dif = (*ptr0 - *ptr1); dist += (dif*dif); } + + } + + dist/=(float) wsize; + return dist; +} + + +float l2_distance_non_normalized(float *u0,float *u1,int i0,int j0,int i1,int j1,int radius,int width,int height) +{ + + + float dist=0.0; + for (int s=-radius; s<= radius; s++){ + + int l = (j0+s)*width + (i0-radius); + float *ptr0 = &u0[l]; + + l = (j1+s)*width + (i1-radius); + float *ptr1 = &u1[l]; + + for(int r=-radius;r<=radius;r++,ptr0++,ptr1++){ float dif = (*ptr0 - *ptr1); dist += (dif*dif); } + + } + + return dist; +} + + +float l2_distance_nsq(float *u0,float *u1,int i0,int j0,int i1,int j1,int xradius, int yradius,int width,int height) +{ + + int wsize=(2*xradius+1)*(2*yradius+1); + + float dist=0.0; + for (int s=-yradius; s <= yradius; s++){ + + int l = (j0+s)*width + (i0-xradius); + float *ptr0 = &u0[l]; + + l = (j1+s)*width + (i1-xradius); + float *ptr1 = &u1[l]; + + for(int r=-xradius;r<=xradius;r++,ptr0++,ptr1++) + { + float dif = (*ptr0 - *ptr1); dist += (dif*dif); + } + + } + + dist/=(float) wsize; + return dist; +} + + + + +float weighted_l2_distance(float *u0,float *u1,int i0,int j0,int i1,int j1,int width,int height,float *kernel,int radius) +{ + + + float *ptrk=&kernel[0]; + float dist=0.0; + for (int s=-radius; s<= radius; s++){ + + int l = (j0+s)*width + (i0-radius); + float *ptr0 = &u0[l]; + + l = (j1+s)*width + (i1-radius); + float *ptr1 = &u1[l]; + + + for(int r=-radius;r<=radius;r++,ptr0++,ptr1++,ptrk++){ float dif = (*ptr0 - *ptr1); dist += *ptrk*(dif*dif); } + + } + + return dist; +} + + + +float weighted_l2_distance_nsq(float *u0,float *u1,int i0,int j0,int i1,int j1,int width,int height,float *kernel,int xradius, int yradius) +{ + + + float *ptrk=&kernel[0]; + float dist=0.0; + for (int s=-yradius; s<= yradius; s++){ + + int l = (j0+s)*width + (i0-xradius); + float *ptr0 = &u0[l]; + + l = (j1+s)*width + (i1-xradius); + float *ptr1 = &u1[l]; + + + for(int r=-xradius;r<=xradius;r++,ptr0++,ptr1++,ptrk++){ float dif = (*ptr0 - *ptr1); dist += *ptrk*(dif*dif); } + + } + + return dist; +} +*/ + + + +/// RGV to YUV conversion +void rgb2yuv(float *r,float *g,float *b,float *y,float *u,float *v,int width,int height) +{ + int size=height*width; + + for(int i=0;i=bdx) a0=bdx-1; + + if (a1<0) a1=0; + else if (a1>=bdx) a1=bdx-1; + + if (b0<0) b0=0; + else if (b0>=bdy) b0=bdy-1; + + if (b1<0) b1=0; + else if (b1>=bdy) b1=bdy-1; + + if (a0=dy) + { + z = (-dx) / 2; + while (abs(x) <= dx) + { + + l = (y+b0)*bdx+x+a0; + + igray[l] = value; + + x+=sx; + z+=dy; + if (z>0) { y+=sy; z-=dx; } + + } + + } + else + { + z = (-dy) / 2; + while (abs(y) <= dy) { + + l = (y+b0)*bdx+x+a0; + igray[l] = value; + + y+=sy; + z+=dx; + if (z>0) { x+=sx; z-=dy; } + } + } + +} + + + +void draw_square(float *igray, int a0, int b0, int w0, int h0, float value, int width, int height) +{ + + draw_line(igray,a0,b0,a0+w0,b0,value,width,height); + draw_line(igray,a0,b0,a0,b0+h0,value,width,height); + draw_line(igray,a0+w0,b0,a0+w0,b0+h0,value,width,height); + draw_line(igray,a0,b0+h0,a0+w0,b0+h0,value,width,height); + +} + + + +/////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////// + +/* + + +*/ +/* +*/ + + + + + +/* + +void _sign(float *u,float *v, int size) +{ + + int i=0; + + for(i=0;i0) v[i] = 1.0; + else if (u[i]<0) v[i]=-1.0; + else v[i]=0.0; + } + + +} + + + + + + + + + + +void _multiple(float *u,float multiplier,int size) +{ + int i=0; + float *ptru; + + ptru=&u[0]; + for(i=0;i (u[i-1] - tolerance)) + { + i++; + } + + if (i==size) return 1; + else return 0; + +} + + + + + + + + +void _offset(float *u,float offset,int size) +{ + int i=0; + float *ptru; + + ptru=&u[0]; + for(i=0;i= valueM) v[i]= valueM; + else if (u[i] <= valuem) v[i]= valuem; + else v[i] = u[i]; + + } + +} + + + + +void _absdif(float *u, float *v,int size) +{ + int i=0; + + for(i=0;i u[i] + a) v[i]=u[i] + a; + + } + +} + +*/ + + + + + + diff --git a/asift_match/src/library.h b/asift_match/src/library.h new file mode 100755 index 0000000..ca53697 --- /dev/null +++ b/asift_match/src/library.h @@ -0,0 +1,202 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + + +#ifndef _LIBRARY_H_ +#define _LIBRARY_H_ + +#include +#include +#include +#include +// #include +#include + + +#define MAX(i,j) ( (i)<(j) ? (j):(i) ) +#define MIN(i,j) ( (i)<(j) ? (i):(j) ) + +#define LUTMAX 30 +#define LUTPRECISION 1000.0 + +#define TINY 1.0e-10 +//#define MAXFLOAT 10000000.0 + + +#define IRAC8 0.35355339 /* 1/sqrt(8) */ +#define IRAC2P2 0.29289322 /* 1/(sqrt(2)+2) */ +#define IRAC2 0.70710678 /* 1/sqrt(2) */ +#define RAC8P4 6.8284271 /* sqrt(8)+4 */ +#define RADIANS_TO_DEGREES (180.0/M_PI) + +#define PI 3.14159 + + +#define COEFF_YR 0.299 +#define COEFF_YG 0.587 +#define COEFF_YB 0.114 + + + + +///////////////////////////////////////////////////////////////// Errors +void wxwarning(const char * message,const char *function, const char *file); +void wxerror(const char * message, const char *function, const char *file); + + +///////////////////////////////////////////////////////////////////////////////////////////////////// Used and checked mathematical functions +double fsqr(double a); + +void fill_exp_lut(float *lut,int size); /* Fills exp(x) for x great or equal than zero*/ +float slut(float dif,float *lut); /* We look for f(dif) in the lut*/ + + + + +///////////////////////////////////////////////////////////////////////////////////////////////////// Used and checked mxsignal functions +float max(float *u,int *pos, int size); /// Max(u), pos contains the index of the maximum +float min(float *u,int *pos, int size); /// Min(u), pos contains the index of the minimum +void max_u_v(float *u,float *v,int size); +void max_u_k(float *u,float k,int size); +void min_u_v(float *u,float *v,int size); +void min_u_k(float *u,float k,int size); + + + +void abs(float *u,float *v,int size); /// v = abs(u) + +void copy(float *u,float *v,int size); /// v = u +void clear(float *u, float value ,int size); /// u = k +void combine(float *u,float a,float *v,float b, float *w, int size); /// w = a*u + b*v +void multiple(float *u,float multiplier,int size); /// u = K * u + + +float scalar_product(float *u, float *v, int n); + +// float lpdist(float *u,float *v,float *mask,int pow,int size); +// float lpnorm(float *u,int fpow,int size); + +float mean(float *u,int size); +float var(float *u,int size); +float median(float *u,int size); + +float nearest(float *u,float value,int *pos,int size); /// Returns the nearest value in the vector u and its position if selected +void binarize(float *u, float *v,float value, int inverse, int size); /// v = 255 if u > value 0 else +int normalize(float *u,int size); /// u = u / sum_i u(i). Returns 0 if mxsignal sum equals zero + + + +float * gauss(int sflag,float std,int *size); /// Create a 1d gauss kernel of standard deviation std + +// void addnoise(float *u,float *v,float std,long int randinit, int size); +// void addnoise_var_afine(float *u,float *v,float a,float b,long int randinit, int size); + + +void quick_sort(float *arr,float *brr,int n); /// Quicksort + + +/// histogram of values. 'n' (number of bins) or 's' (step) must be selected in flag while the other value is filled +float * histo ( float* input, float *iminim, float *imaxim, int *n, float *s, int size, char flag ); + + + + + +///////////////////////////////////////////////////////////////////////////////////////////////////// Used and checked image functions + +void compute_gradient_orientation(float* igray,float *grad, float *ori, int width, int height); + +// void extract ( float *igray,float *ogray, int ax, int ay,int cwidth, int cweight,int width, int height ); + +void sample ( float *igray,float *ogray, float factor ,int width, int height); +void sample_aglomeration(float *igray,float *ogray, float factor, int width, int height); + +void gray ( float *red, float *green,float *blue, float *out, int width, int height ); + +/* +float l2_distance ( float * u0,float *u1,int i0,int j0,int i1,int j1,int radius,int width,int height); +float l2_distance_non_normalized(float *u0,float *u1,int i0,int j0,int i1,int j1,int radius,int width,int height); +float weighted_l2_distance ( float *u0,float *u1,int i0,int j0,int i1,int j1,int width,int height,float * kernel,int radius ); +float l2_distance_nsq(float *u0,float *u1,int i0,int j0,int i1,int j1,int xradius, int yradius,int width,int height); +float weighted_l2_distance_nsq(float *u0,float *u1,int i0,int j0,int i1,int j1,int width,int height,float *kernel,int xradius, int yradius); +*/ + +void rgb2yuv ( float *r,float *g,float *b,float *y,float *u,float *v,int width,int height ); +void yuv2rgb ( float *r,float *g,float *b,float *y,float *u,float *v,int width,int height ); + +void rgb2yuv(float *r,float *g,float *b,float *y,float *u,float *v,float yR, float yG, float yB, int width,int height); +void yuv2rgb(float *r,float *g,float *b,float *y,float *u,float *v,float yR, float yG, float yB, int width,int height); + + +void draw_line(float *igray, int a0, int b0, int a1, int b1, float value, int width, int height); +// void draw_circle(float *igray, int pi,int pj,float radius, float value, int width, int height); +void draw_square(float *igray, int a0, int b0, int w0, int h0, float value, int width, int height); + + + +#endif // _LIBRARY_H_ + + +/////////////////////////////////////// Not often used and not checked + +// + +// + + + + + +/* +*/ + + + + +//void md_fsig_absdif(float *u,float *v,int size); /// v = abs(v-u) + + + +//void md_fsig_sign(float *u,float *v, int size); //// ¿¿¿¿¿ ????? +//int md_fsig_is_increasing(float *u,float tolerance, int size); ///// ¿¿¿¿¿ ????? + + + + + + + + +//void md_fsig_multiple(float *u,float multiplier,int size); // u = K * u +//void md_fsig_product(float *u,float *v,int size); // u = u * v +//void md_fsig_offset(float *u,float offset, int size); // u = u - K + + + +// + + +// +//void md_fsig_threshold(float *u, float *v,float valuem,float valueM, int size); // threshold into (m,M) + + + +//--- Conversion --- +//void md_fsig_float2char(float min, float max, float *u, float *v, int size); // Linear Conversion between (min,max) and (0,255) + + + + +//void md_fsig_addnoise(float *u,float *v,float std,long int randinit, int size); // Add gaussian noise of standard deviation sigma + + + +// v quantified mxmximage u with interval length lambda +// if u \in ( (n - 1/2) l, (n + 1/2 ) l ) - > v = n l +// n= 0 -> (-1/2 * l, 1/2 * l) // +//void md_fsig_quant(float *u, float *v, float lambda, int size); + + +// v is projected to the space of quantizations of length lambda that gives u +//void md_fsig_projectquant(float *u,float *v,float lambda, int size); diff --git a/asift_match/src/numerics1.cpp b/asift_match/src/numerics1.cpp new file mode 100755 index 0000000..e83fc5c --- /dev/null +++ b/asift_match/src/numerics1.cpp @@ -0,0 +1,185 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + + +#include "numerics1.h" + +float **allocate_float_matrix(int nrows, int ncols) +{ + float ** matrix; + matrix = new float*[nrows]; + for(int i=0; i < nrows; i++) matrix[i] = new float[ncols]; + return matrix; +} + + +void desallocate_float_matrix(float **matrix, int nrows, int ncols) +{ + if (matrix == NULL) return; + + for(int i=0; i < nrows; i++) { delete[] matrix[i]; matrix[i] = 0;} + matrix = 0; + + ncols = ncols; // to remove the warning unused parameter ¡®ncols¡¯ +} + + +// ********************************************** +// LU based algorithms +// ********************************************** + + + +// Solves Ax=b by using lu decomposition +int lusolve(float **a, float *x, float *b, int n) +{ + + float d; + int *indx = new int[n]; + + if (ludcmp(a,n,indx,&d)) + { + + for(int i=0; i < n; i++) x[i] = b[i]; + lubksb(a,n,indx,x); + + delete[] indx; /*memcheck*/ + return 1; + } else + { + + printf("lusolve::lu decomposition failed\n"); + delete[] indx; /*memcheck*/ + return 0; + } + delete[] indx; // Guoshen Yu +} + + + +int ludcmp(float **a, int n, int *indx, float *d) +{ + + int i,imax=0,j,k,aux; + float big,dum,sum,temp; + float *vv; + + + vv=(float *) malloc(n*sizeof(float)); + *d=1.0; + + + for(i=0;ibig ) big=temp; + + if (big==0.0) { return 0; printf("LU Decomposition failed\n");} + + vv[i]=1.0/big; + } + + + + + for(j=0;j=big){ + big=dum; + imax=i; + } + } + + + if (j != imax){ + + for(k=0;k=0;i--){ + sum=aux[i]; + for(j=i+1;j +#include +#include +#include +#include + + +#include "library.h" + +#define NRMAX(i,j) ( (i)<(j) ? (j):(i) ) +#define NRMIN(i,j) ( (i)<(j) ? (i):(j) ) +#define NRTINY 1.0e-10 + + +// ********************************************** +// float ** basic functions +// ********************************************** + +float ** allocate_float_matrix(int nrows, int ncols); + +void desallocate_float_matrix(float **matrix, int nrows, int ncols); + +// ********************************************** +// LU based algorithms +// ********************************************** + +// Solves Ax=b by using lu decomposition +// a matrix a[1..n][1..n] is replaced by the LU decompositions of a rowwise permutation of itself +// b[1..n] and x[1..n] +int lusolve(float **a, float *x, float *b, int n); + + +/*-- LU decomposition */ +/* Given a matrix a[1..n][1..n] this routine replacess it by the LU decompositions of a rowwise permutation of itself. */ +/* a and n are input, a is output, arranged as in equation (2.3.14) above; indx[1..n] in an output vector that records */ +/* the row permutation effected by the partial pivoting; d is output as +-1 depending on whether the number of row */ +/* interchanges was even or odd respectively. */ +int ludcmp(float **a, int n, int *indx, float *d); /* LU decomposition */ + +/* Solves the set of n linear equations Ax=b. Here a[0..n-1][0..n-1] as input, not as the matrix A but rather as its LU decomposition,*/ +/* determined by the routine ludcmp. indx[0..n-1] is input as the permutation vector returned by ludcmp. b[0..n-1] is input as the */ +/* right hand side vector and returns with the solution vector x. */ +void lubksb(float **a, int n, int *indx, float *b); /* LU linear solution */ + + + + +#endif + diff --git a/asift_match/src/orsa.cpp b/asift_match/src/orsa.cpp new file mode 100755 index 0000000..bcb9b23 --- /dev/null +++ b/asift_match/src/orsa.cpp @@ -0,0 +1,599 @@ +// +// C++ Implementation: stereomatch +// +// Description: eliminate the false matches with epipolar geometry constraint. +// See http://www.math-info.univ-paris5.fr/~moisan/epipolar/ +// +// Copyright (c) 2007 Lionel Moisan +// Changelog : 2011 Use Eigen SVD +// +// Copyright: See COPYING file that comes with this distribution +// +// + +#include +#include +#include +#include +#include +#include "orsa.h" +// #include +// #include +// #include +// #include +// #include +// #include +#include +#include +#include +#include +#include +#include + + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +/*-------------------- GENERAL PURPOSE ROUTINES --------------------*/ + +/* routines for vectors and matrices */ + +float *vector(int nl, int nh) +{ + float *v; + + v=(float *)malloc((unsigned) (nh-nl+1)*sizeof(float)); + if (!v) { + // mwerror(FATAL,1,"allocation failure in vector()"); + fprintf(stderr, "allocation failure in vector()\n"); + exit(EXIT_FAILURE); /* indicate failure.*/ + } + return v-nl; +} + +float **matrix(int nrl, int nrh, int ncl, int nch) +{ + int i; + float **m; + + m=(float **) malloc((unsigned) (nrh-nrl+1)*sizeof(float*)); + if (!m) { + // mwerror(FATAL,1,"allocation failure 1 in matrix()"); + fprintf(stderr, "allocation failure 1 in matrix()\n"); + exit(EXIT_FAILURE); /* indicate failure.*/ + } + m -= nrl; + for(i=nrl;i<=nrh;i++) { + m[i]=(float *) malloc((unsigned) (nch-ncl+1)*sizeof(float)); + if (!m[i]) { + // mwerror(FATAL,1,"allocation failure 2 in matrix()"); + fprintf(stderr, "allocation failure 2 in matrix()\n"); + exit(EXIT_FAILURE); /* indicate failure.*/ + } + m[i] -= ncl; + } + return m; +} + +void free_vector(float *v, int nl, int nh) +{ + free((char*) (v+nl)); + + nh = nh; // to remove the warning "unused parameter ‘nh’" +} + +void free_matrix(float **m, int nrl, int nrh, int ncl, int nch) +{ + int i; + + for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl)); + free((char*) (m+nrl)); + + nch = nch; // to remove the warning "unused parameter ‘nh’" +} + +/* Compute the real roots of a third order polynomial */ +/* returns 1 or 3, the number of roots found */ + +int FindCubicRoots(float coeff[4], float x[3]) +{ + float a1 = coeff[2] / coeff[3]; + float a2 = coeff[1] / coeff[3]; + float a3 = coeff[0] / coeff[3]; + + double Q = (a1 * a1 - 3 * a2) / 9; + double R = (2 * a1 * a1 * a1 - 9 * a1 * a2 + 27 * a3) / 54; + double Qcubed = Q * Q * Q; + double d = Qcubed - R * R; + + /* Three real roots */ + if (d >= 0) { + double theta = acos(R / sqrt(Qcubed)); + double sqrtQ = sqrt(Q); + x[0] = -2 * sqrtQ * cos( theta / 3) - a1 / 3; + x[1] = -2 * sqrtQ * cos((theta + 2 * M_PI) / 3) - a1 / 3; + x[2] = -2 * sqrtQ * cos((theta + 4 * M_PI) / 3) - a1 / 3; + return (3); + } + + /* One real root */ + else { + double e = pow(sqrt(-d) + fabs(R), 1. / 3.); + if (R > 0) + e = -e; + x[0] = (e + Q / e) - a1 / 3.; + return (1); + } +} + + +/* logarithm (base 10) of binomial coefficient */ +float logcombi(int k, int n) +{ + double r; + int i; + + if (k>=n || k<=0) return(0.); + if (n-k>3)%(n-i); + for (j=0;j=k[j];j++) r++; + j0 = j; + for (j=i;j>j0;j--) k[j]=k[j-1]; + k[j0]=r; + } +} + +/*-------------------- END OF GENERAL PURPOSE ROUTINES --------------------*/ + + +/* float comparison for qsort() */ +//According to http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/, +//we should have: void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) ); that means, for "qsort", the "comparator" has two constant void* type input parameters +// static int compf(void *i, void *j) +int compf(const void *i, const void *j) +{ + float a,b; + + a = *((float *)i); + b = *((float *)j); + return(ab?1:0)); +} + + + +/* find the increasing sequence of squared distances to epipolar lines */ +/* e[n*2] = distances, e[n*2+1] = indexes (to cast into an int) */ + +//void matcherrorn(float **F, Flist p1, Flist p2, float *e) +void matcherrorn(float **F, const std::vector& p1, const std::vector& p2, float *e) +{ + int i; + double x,y,a,b,c,d; // Guoshen Yu, double precision is needed. When the two images are identical, the error under float precision is 0 => log(error)=-inf. + + int pt_size = (p1.size())/2; + + for (i = 0; i < pt_size; i++) { + x = (double) p1[i*2]; + y = (double) p1[i*2+1]; + a = (double) F[1][1]*x+(double) F[1][2]*y+(double) F[1][3]; + b = (double) F[2][1]*x+(double) F[2][2]*y+(double) F[2][3]; + c = (double) F[3][1]*x+(double) F[3][2]*y+(double) F[3][3]; + d = (a*(double) p2[i*2]+b*(double) p2[i*2+1]+c); + e[i*2] = (d*d)/(a*a+b*b); + + e[i*2+1] = (float)i; + } + qsort(e, pt_size, 2*sizeof(float), compf); +} + + +/*---------- compute the epipolar geometry associated to 7 pairs ----------*/ +/* */ +/* INPUT: the points are (m1[k[i]*2],m1[k[i]*2+1]), m2... 0& m1, std::vector& m2, int *k, float *z, float **F1, float **F2) +{ + float a[4]; + int i,j,i2,i3; + + typedef Eigen::MatrixXf Mat; + Mat c(7,9); + /* build 9xn matrix from point matches */ + for (i=0;i<7;i++) { + c(i,0) = m1[k[i]*2 ]*m2[k[i]*2 ]; + c(i,1) = m1[k[i]*2+1]*m2[k[i]*2 ]; + c(i,2) = m2[k[i]*2 ]; + c(i,3) = m1[k[i]*2 ]*m2[k[i]*2+1]; + c(i,4) = m1[k[i]*2+1]*m2[k[i]*2+1]; + c(i,5) = m2[k[i]*2+1]; + c(i,6) = m1[k[i]*2 ]; + c(i,7) = m1[k[i]*2+1]; + c(i,8) = 1.; + } + + // SVD + Eigen::JacobiSVD svd(c, Eigen::ComputeFullV); + // look for the two smallest eigenvalue of c'c + typedef Eigen::Matrix Vec9; + Vec9 F1Vec = svd.matrixV().col(c.cols()-1); + Vec9 F2Vec = svd.matrixV().col(c.cols()-2); + + /* build basis of solutions */ + int cpt = 0; + for (i=1;i<=3;i++) + for (j=1;j<=3;j++) + { + F1[i][j] = F1Vec(cpt); + F2[i][j] = F2Vec(cpt); + cpt++; + } + + /* build cubic polynomial P(x)=det(F1+xF2) */ + a[0] = a[1] = a[2] = a[3] = 0.; + for (i=1;i<=3;i++) { + i2 = i%3+1; + i3 = i2%3+1; + a[0] += F1[i][1]*F1[i2][2]*F1[i3][3]; + a[1] += + F2[i][1]*F1[i2][2]*F1[i3][3]+ + F1[i][1]*F2[i2][2]*F1[i3][3]+ + F1[i][1]*F1[i2][2]*F2[i3][3]; + a[2] += + F1[i][1]*F2[i2][2]*F2[i3][3]+ + F2[i][1]*F1[i2][2]*F2[i3][3]+ + F2[i][1]*F2[i2][2]*F1[i3][3]; + a[3] += F2[i][1]*F2[i2][2]*F2[i3][3]; + } + for (i=1;i<=3;i++) { + i2 = (i+1)%3+1; + i3 = (i2+1)%3+1; + a[0] -= F1[i][1]*F1[i2][2]*F1[i3][3]; + a[1] -= + F2[i][1]*F1[i2][2]*F1[i3][3]+ + F1[i][1]*F2[i2][2]*F1[i3][3]+ + F1[i][1]*F1[i2][2]*F2[i3][3]; + a[2] -= + F1[i][1]*F2[i2][2]*F2[i3][3]+ + F2[i][1]*F1[i2][2]*F2[i3][3]+ + F2[i][1]*F2[i2][2]*F1[i3][3]; + a[3] -= F2[i][1]*F2[i2][2]*F2[i3][3]; + } + + return(FindCubicRoots(a,z)); +} + +void divide_match(const std::vector& matches, std::vector& p1, std::vector& p2) +{ + float x1, y1, x2, y2; + + p1.clear(); + p2.clear(); + p1.reserve(2 * matches.size()); + p2.reserve(2 * matches.size()); + std::vector::const_iterator it=matches.begin(); + for(; it != matches.end(); ++it) { + x1 = (*it).x1; y1 = (*it).y1; + x2 = (*it).x2; y2 = (*it).y2; + p1.push_back(x1); p1.push_back(y1); + p2.push_back(x2); p2.push_back(y2); + } +} + + +// float stereomatch(int img_x, int img_y, int size_pt, float* p1, float* p2, float** f, float* index, int* t, int* verb, int* n_flag, int* mode, int* stop) +// float stereomatch(const wxImage& u1, std::vector& p1, std::vector& p2, std::vector >& f, std::vector& index, int* t, int* verb, int* n_flag, int* mode, int* stop) +//int main(int argc, char** argv) +float orsa(int width, int height, std::vector& match, std::vector& index, int t_value, int verb_value, int n_flag_value, int mode_value, int stop_value) +{ + // int width = 0, height = 0; + // int t_value, verb_value, n_flag_value, mode_value, stop_value; + int *t, *verb, *n_flag, *mode, *stop; + + t = (int*)malloc(sizeof(int)); // maximum number of ransac trials + verb = (int*)malloc(sizeof(int)); //verbose + n_flag = (int*)malloc(sizeof(int)); // in order NOT to reinitialize the random seed + mode = (int*)malloc(sizeof(int)); // mode: 0=deterministic 1=ransac 2=optimized ransac (ORSA) 3=automatic + stop = (int*)malloc(sizeof(int)); // stop as soon as the first meaningful correspondence is found + + if(width <=0 || height <= 0) { + std::cerr << "Wrong dimensions of image" << std::endl; + return 1; + } + + std::vector p1(2*match.size()), p2(2*match.size()), p1_backup(2*match.size()), p2_backup(2*match.size()); + + divide_match(match, p1, p2); + p1_backup = p1; + p2_backup = p2; + + libNumerics::matrix f(3, 3); + f = 0; + index = std::vector(match.size()); + // Guoshen Yu, 2010.09.23 + // index.clear(); + + if(t_value <= 0) { + std::cerr << "t should be greater than 0" << std::endl; + return 1; + } + *t = t_value; + + if(verb_value == 0) { + free(verb); + verb = NULL; + } + else + *verb = verb_value; + if(verb_value != 1 && verb_value != 0) { + std::cerr << "verb can only be 0 or 1" << std::endl; + return 1; + } + + if(n_flag_value == 0) { + free(n_flag); + n_flag = NULL; + } + else + *n_flag = n_flag_value; + if(n_flag_value != 1 && n_flag_value != 0) { + std::cerr << "n_flag can only be 0 or 1" << std::endl; + return 1; + } + + if(mode_value != 0 && mode_value != 1 && mode_value != 2 && mode_value != 3) { + std::cerr << "mode can only be 0 or 1 or 2 or 3" << std::endl; + return 1; + } + *mode = mode_value; + + if(stop_value == 0) { + free(stop); + stop = NULL; + } + else + *stop = stop_value; + if(stop_value != 1 && stop_value != 0) { + std::cerr << "stop can only be 0 or 1" << std::endl; + return 1; + } + + + int i,j,i0,k[8],idk[8],*id,m,n,l,minicur=0,miniall=0,delete_index,nid; + int niter,maxniter,better,cont,optimization; + float **F1,**F2,**F,nx,ny,z[3],minepscur,minepsall,nfa; + float norm,minlogalphacur,minlogalphaall,logalpha,logalpha0; + float *e,*logcn,*logc7,loge0; + + /* initialize random seed if necessary */ + // if (!n_flag) srand48( (long int) time (NULL) + (long int) getpid() ); + // if (!n_flag) srand( (long int) time (NULL) + (long int) getpid() ); + + // Guoshen Yu, 2010.09.21: remove getpid which does not exist under Windows + if (!n_flag) srand( (long int) time (NULL) ); + + /* check sizes */ + if (p1.size() != p2.size() || p1.size() < 14) { + fprintf(stderr, "Inconsistent sizes.\n"); + exit(EXIT_FAILURE); /* indicate failure.*/ + } + n = p1.size()/2; + + /* tabulate logcombi */ + loge0 = (float)log10(3.*(double)(n-7)); + logcn = makelogcombi_n(n); + logc7 = makelogcombi_k(7,n); + + /* choose mode */ + if (*mode==3) { + if (logcn[7]<=(float)log10((double)(*t))) + *mode=0; + else *mode=2; + } + if (verb) + switch(*mode) { + case 0: +// i = (int)(0.5+pow(10.,logc7[n])); + // Guoshen Yu, 2010.09.22, Windows version + i = (int)(0.5+pow(10., (double)(logc7[n]))); + printf("I will use deterministic mode (systematic search).\n"); + printf("I have to test %d bases\n",i); + break; + case 1: + printf("I will use pure stochastic mode with no optimization.\n"); + break; + case 2: + printf("I will use optimized stochastic mode (ORSA).\n"); + } + + /* normalize coordinates */ + nx = (float)width; + ny = (float)height; + norm = 1./(float)sqrt((double)(nx*ny)); + logalpha0 = (float)(log10(2.)+0.5*log10((double)((nx*nx+ny*ny)*norm*norm))); + for (i=0;i=0 && k[i0]==k[i0+1]-1;i0--){}; + + if (stop && minepsall<0.) cont=0; + else if (*mode==0) cont=(i0>=0?1:0); + else cont=(niter +// Changelog : 2011 Use Eigen SVD +// +// Copyright: See COPYING file that comes with this distribution +// +// + +#ifndef STEREOMATCH_H +#define STEREOMATCH_H + +#include + +#include "libNumerics/numerics.h" +#include "libMatch/match.h" +#include +#include +#include +#include + +#include +#include +#include + +/*-------------------- GENERAL PURPOSE ROUTINES --------------------*/ + +/* routines for vectors and matrices */ + +//float *vector(int nl, int nh); + +float **matrix(int nrl, int nrh, int ncl, int nch); + +void free_vector(float *v, int nl, int nh); + +void free_matrix(float **m, int nrl, int nrh, int ncl, int nch); + +/* Singular Value Decomposition routine */ +void svdcmp(float **a, int m, int n, float *w, float **v); + +/* Compute the real roots of a third order polynomial */ +/* returns 1 or 3, the number of roots found */ +int FindCubicRoots(float coeff[4], float x[3]); + +/* logarithm (base 10) of binomial coefficient */ +float logcombi(int k, int n); + +/* tabulate logcombi(.,n) */ +float *makelogcombi_n(int n); + + +/* tabulate logcombi(k,.) */ +float *makelogcombi_k(int k, int nmax); + + +/* get a (sorted) random 7-uple of 0..n-1 */ +void random_p7(int *k, int n); + +/*-------------------- END OF GENERAL PURPOSE ROUTINES --------------------*/ + + +/* float comparison for qsort() */ +//According to http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/, +//we should have: void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) ); that means, for "qsort", the "comparator" has two constant void* type input parameters +int compf(const void *i, const void *j); + +void matcherrorn(float **F, const std::vector& p1, const std::vector& p2, float *e); + +int epipolar(std::vector& m1, std::vector& m2, int *k, float *z, float **F1, float **F2); + +float orsa(int width, int height, std::vector& match, std::vector& index, int t_value, int verb_value, int n_flag_value, int mode_value, int stop_value); + +#endif diff --git a/asift_match/src/splines.cpp b/asift_match/src/splines.cpp new file mode 100755 index 0000000..456009c --- /dev/null +++ b/asift_match/src/splines.cpp @@ -0,0 +1,217 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#include "splines.h" + +double initcausal(double *c,int n,double z) +{ + double zk,z2k,iz,sum; + int k; + + zk = z; iz = 1./z; + z2k = pow(z,(double)n-1.); + sum = c[0] + z2k * c[n-1]; + z2k = z2k*z2k*iz; + for (k=1;k<=n-2;k++) { + sum += (zk+z2k)*c[k]; + zk *= z; + z2k *= iz; + } + return (sum/(1.-zk*zk)); +} + +double initanticausal(double *c,int n,double z) +{ + return((z/(z*z-1.))*(z*c[n-2]+c[n-1])); +} + + +void invspline1D(double *c,int size,double *z,int npoles) +{ + double lambda; + int n,k; + + /* normalization */ + for (k=npoles,lambda=1.;k--;) lambda *= (1.-z[k])*(1.-1./z[k]); + for (n=size;n--;) c[n] *= lambda; + + /*----- Loop on poles -----*/ + for (k=0;k &in,int order,vector& out, int width, int height) +// void finvspline(float *in,int order,float *out, int width, int height) +{ + double *c,*d,z[5]; + int npoles,nx,ny,x,y; + + ny = height; nx = width; + + /* initialize poles of associated z-filter */ + switch (order) + { + case 2: z[0]=-0.17157288; /* sqrt(8)-3 */ + break; + + case 3: z[0]=-0.26794919; /* sqrt(3)-2 */ + break; + + case 4: z[0]=-0.361341; z[1]=-0.0137254; + break; + + case 5: z[0]=-0.430575; z[1]=-0.0430963; + break; + + case 6: z[0]=-0.488295; z[1]=-0.0816793; z[2]=-0.00141415; + break; + + case 7: z[0]=-0.53528; z[1]=-0.122555; z[2]=-0.00914869; + break; + + case 8: z[0]=-0.574687; z[1]=-0.163035; z[2]=-0.0236323; z[3]=-0.000153821; + break; + + case 9: z[0]=-0.607997; z[1]=-0.201751; z[2]=-0.0432226; z[3]=-0.00212131; + break; + + case 10: z[0]=-0.636551; z[1]=-0.238183; z[2]=-0.065727; z[3]=-0.00752819; + z[4]=-0.0000169828; + break; + + case 11: z[0]=-0.661266; z[1]=-0.27218; z[2]=-0.0897596; z[3]=-0.0166696; + z[4]=-0.000510558; + break; + + default: + printf("finvspline: order should be in 2..11.\n"); + exit(-1); + } + + npoles = order/2; + + /* initialize double array containing image */ + c = (double *)malloc(nx*ny*sizeof(double)); + d = (double *)malloc(nx*ny*sizeof(double)); + for (x=nx*ny;x--;) + c[x] = (double)in[x]; + + /* apply filter on lines */ + for (y=0;y& in,int x,int y,float bg, int width, int height) +// float v(float *in, int x,int y,float bg, int width, int height) +{ + if (x<0 || x>=width || y<0 || y>=height) + return(bg); else return(in[y*width+x]); +} + + +/* c[] = values of interpolation function at ...,t-2,t-1,t,t+1,... */ + +/* coefficients for cubic interpolant (Keys' function) */ +void keys(float *c,float t,float a) +{ + float t2,at; + + t2 = t*t; + at = a*t; + c[0] = a*t2*(1.0-t); + c[1] = (2.0*a+3.0 - (a+2.0)*t)*t2 - at; + c[2] = ((a+2.0)*t - a-3.0)*t2 + 1.0; + c[3] = a*(t-2.0)*t2 + at; +} + +/* coefficients for cubic spline */ +void spline3(float *c,float t) +{ + float tmp; + + tmp = 1.-t; + c[0] = 0.1666666666*t*t*t; + c[1] = 0.6666666666-0.5*tmp*tmp*(1.+t); + c[2] = 0.6666666666-0.5*t*t*(2.-t); + c[3] = 0.1666666666*tmp*tmp*tmp; +} + +/* pre-computation for spline of order >3 */ +void init_splinen(float *a,int n) +{ + int k; + + a[0] = 1.; + for (k=2;k<=n;k++) a[0]/=(float)k; + for (k=1;k<=n+1;k++) + a[k] = - a[k-1] *(float)(n+2-k)/(float)k; +} + +/* fast integral power function */ +float ipow(float x,int n) +{ + float res; + + for (res=1.;n;n>>=1) { + if (n&1) res*=x; + x*=x; + } + return(res); +} + +/* coefficients for spline of order >3 */ +void splinen(float *c,float t,float *a,int n) +{ + int i,k; + float xn; + + memset((void *)c,0,(n+1)*sizeof(float)); + for (k=0;k<=n+1;k++) { + xn = ipow(t+(float)k,n); + for (i=k;i<=n;i++) + c[i] += a[i-k]*xn; + } +} + + diff --git a/asift_match/src/splines.h b/asift_match/src/splines.h new file mode 100755 index 0000000..2d995a5 --- /dev/null +++ b/asift_match/src/splines.h @@ -0,0 +1,34 @@ +// Authors: Unknown. Please, if you are the author of this file, or if you +// know who are the authors of this file, let us know, so we can give the +// adequate credits and/or get the adequate authorizations. + +#ifndef _SPLINES_H_ +#define _SPLINES_H_ + +#include "numerics1.h" +#include "library.h" +#include "string.h" +#include +using namespace std; + + +//float v(float *in,int x,int y,float bg, int width, int height); + +// Guoshen Yu, 2010.09.21, Windows version +float v(vector& in,int x,int y,float bg, int width, int height); +//float v(float *in, int x,int y,float bg, int width, int height); + +void keys(float *c,float t,float a); +void spline3(float *c,float t); +void init_splinen(float *a,int n); +void splinen(float *c,float t,float *a,int n); + +//void finvspline(float *in,int order,float *out, int width, int height); + +// Guoshen Yu, 2010.09.22, Windows versions +void finvspline(vector& in,int order,vector& out, int width, int height); +// void finvspline(float *in,int order,float *out, int width, int height); + + +#endif + diff --git a/asift_match/src/third_party/Eigen/Array b/asift_match/src/third_party/Eigen/Array new file mode 100755 index 0000000..3d004fb --- /dev/null +++ b/asift_match/src/third_party/Eigen/Array @@ -0,0 +1,11 @@ +#ifndef EIGEN_ARRAY_MODULE_H +#define EIGEN_ARRAY_MODULE_H + +// include Core first to handle Eigen2 support macros +#include "Core" + +#ifndef EIGEN2_SUPPORT + #error The Eigen/Array header does no longer exist in Eigen3. All that functionality has moved to Eigen/Core. +#endif + +#endif // EIGEN_ARRAY_MODULE_H diff --git a/asift_match/src/third_party/Eigen/CMakeLists.txt b/asift_match/src/third_party/Eigen/CMakeLists.txt new file mode 100755 index 0000000..a92dd6f --- /dev/null +++ b/asift_match/src/third_party/Eigen/CMakeLists.txt @@ -0,0 +1,19 @@ +include(RegexUtils) +test_escape_string_as_regex() + +file(GLOB Eigen_directory_files "*") + +escape_string_as_regex(ESCAPED_CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") + +foreach(f ${Eigen_directory_files}) + if(NOT f MATCHES "\\.txt" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/[.].+" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/src") + list(APPEND Eigen_directory_files_to_install ${f}) + endif() +endforeach(f ${Eigen_directory_files}) + +install(FILES + ${Eigen_directory_files_to_install} + DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen COMPONENT Devel + ) + +add_subdirectory(src) diff --git a/asift_match/src/third_party/Eigen/COPYING.GPL b/asift_match/src/third_party/Eigen/COPYING.GPL new file mode 100755 index 0000000..94a9ed0 --- /dev/null +++ b/asift_match/src/third_party/Eigen/COPYING.GPL @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/asift_match/src/third_party/Eigen/COPYING.LGPL b/asift_match/src/third_party/Eigen/COPYING.LGPL new file mode 100755 index 0000000..0e4fa8a --- /dev/null +++ b/asift_match/src/third_party/Eigen/COPYING.LGPL @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/asift_match/src/third_party/Eigen/Cholesky b/asift_match/src/third_party/Eigen/Cholesky new file mode 100755 index 0000000..53f7bf9 --- /dev/null +++ b/asift_match/src/third_party/Eigen/Cholesky @@ -0,0 +1,33 @@ +#ifndef EIGEN_CHOLESKY_MODULE_H +#define EIGEN_CHOLESKY_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +namespace Eigen { + +/** \defgroup Cholesky_Module Cholesky module + * + * + * + * This module provides two variants of the Cholesky decomposition for selfadjoint (hermitian) matrices. + * Those decompositions are accessible via the following MatrixBase methods: + * - MatrixBase::llt(), + * - MatrixBase::ldlt() + * + * \code + * #include + * \endcode + */ + +#include "src/misc/Solve.h" +#include "src/Cholesky/LLT.h" +#include "src/Cholesky/LDLT.h" + +} // namespace Eigen + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_CHOLESKY_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/asift_match/src/third_party/Eigen/Core b/asift_match/src/third_party/Eigen/Core new file mode 100755 index 0000000..7f38466 --- /dev/null +++ b/asift_match/src/third_party/Eigen/Core @@ -0,0 +1,363 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2007-2011 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_CORE_H +#define EIGEN_CORE_H + +// first thing Eigen does: stop the compiler from committing suicide +#include "src/Core/util/DisableStupidWarnings.h" + +// then include this file where all our macros are defined. It's really important to do it first because +// it's where we do all the alignment settings (platform detection and honoring the user's will if he +// defined e.g. EIGEN_DONT_ALIGN) so it needs to be done before we do anything with vectorization. +#include "src/Core/util/Macros.h" + +// if alignment is disabled, then disable vectorization. Note: EIGEN_ALIGN is the proper check, it takes into +// account both the user's will (EIGEN_DONT_ALIGN) and our own platform checks +#if !EIGEN_ALIGN + #ifndef EIGEN_DONT_VECTORIZE + #define EIGEN_DONT_VECTORIZE + #endif +#endif + +#ifdef _MSC_VER + #include // for _aligned_malloc -- need it regardless of whether vectorization is enabled + #if (_MSC_VER >= 1500) // 2008 or later + // Remember that usage of defined() in a #define is undefined by the standard. + // a user reported that in 64-bit mode, MSVC doesn't care to define _M_IX86_FP. + #if (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || defined(_M_X64) + #define EIGEN_SSE2_ON_MSVC_2008_OR_LATER + #endif + #endif +#endif + +// Remember that usage of defined() in a #define is undefined by the standard +#if (defined __SSE2__) && ( (!defined __GNUC__) || EIGEN_GNUC_AT_LEAST(4,2) ) + #define EIGEN_SSE2_BUT_NOT_OLD_GCC +#endif + +#ifndef EIGEN_DONT_VECTORIZE + + #if defined (EIGEN_SSE2_BUT_NOT_OLD_GCC) || defined(EIGEN_SSE2_ON_MSVC_2008_OR_LATER) + + // Defines symbols for compile-time detection of which instructions are + // used. + // EIGEN_VECTORIZE_YY is defined if and only if the instruction set YY is used + #define EIGEN_VECTORIZE + #define EIGEN_VECTORIZE_SSE + #define EIGEN_VECTORIZE_SSE2 + + // Detect sse3/ssse3/sse4: + // gcc and icc defines __SSE3__, ... + // there is no way to know about this on msvc. You can define EIGEN_VECTORIZE_SSE* if you + // want to force the use of those instructions with msvc. + #ifdef __SSE3__ + #define EIGEN_VECTORIZE_SSE3 + #endif + #ifdef __SSSE3__ + #define EIGEN_VECTORIZE_SSSE3 + #endif + #ifdef __SSE4_1__ + #define EIGEN_VECTORIZE_SSE4_1 + #endif + #ifdef __SSE4_2__ + #define EIGEN_VECTORIZE_SSE4_2 + #endif + + // include files + + // This extern "C" works around a MINGW-w64 compilation issue + // https://sourceforge.net/tracker/index.php?func=detail&aid=3018394&group_id=202880&atid=983354 + // In essence, intrin.h is included by windows.h and also declares intrinsics (just as emmintrin.h etc. below do). + // However, intrin.h uses an extern "C" declaration, and g++ thus complains of duplicate declarations + // with conflicting linkage. The linkage for intrinsics doesn't matter, but at that stage the compiler doesn't know; + // so, to avoid compile errors when windows.h is included after Eigen/Core, ensure intrinsics are extern "C" here too. + // notice that since these are C headers, the extern "C" is theoretically needed anyways. + extern "C" { + #include + #include + #ifdef EIGEN_VECTORIZE_SSE3 + #include + #endif + #ifdef EIGEN_VECTORIZE_SSSE3 + #include + #endif + #ifdef EIGEN_VECTORIZE_SSE4_1 + #include + #endif + #ifdef EIGEN_VECTORIZE_SSE4_2 + #include + #endif + } // end extern "C" + #elif defined __ALTIVEC__ + #define EIGEN_VECTORIZE + #define EIGEN_VECTORIZE_ALTIVEC + #include + // We need to #undef all these ugly tokens defined in + // => use __vector instead of vector + #undef bool + #undef vector + #undef pixel + #elif defined __ARM_NEON__ + #define EIGEN_VECTORIZE + #define EIGEN_VECTORIZE_NEON + #include + #endif +#endif + +#if (defined _OPENMP) && (!defined EIGEN_DONT_PARALLELIZE) + #define EIGEN_HAS_OPENMP +#endif + +#ifdef EIGEN_HAS_OPENMP +#include +#endif + +// MSVC for windows mobile does not have the errno.h file +#if !(defined(_MSC_VER) && defined(_WIN32_WCE)) +#define EIGEN_HAS_ERRNO +#endif + +#ifdef EIGEN_HAS_ERRNO +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // for CHAR_BIT +// for min/max: +#include + +// for outputting debug info +#ifdef EIGEN_DEBUG_ASSIGN +#include +#endif + +// required for __cpuid, needs to be included after cmath +#if defined(_MSC_VER) && (defined(_M_IX86)||defined(_M_X64)) + #include +#endif + +#if (defined(_CPPUNWIND) || defined(__EXCEPTIONS)) && !defined(EIGEN_NO_EXCEPTIONS) + #define EIGEN_EXCEPTIONS +#endif + +#ifdef EIGEN_EXCEPTIONS + #include +#endif + +// this needs to be done after all possible windows C header includes and before any Eigen source includes +// (system C++ includes are supposed to be able to deal with this already): +// windows.h defines min and max macros which would make Eigen fail to compile. +#if defined(min) || defined(max) +#error The preprocessor symbols 'min' or 'max' are defined. If you are compiling on Windows, do #define NOMINMAX to prevent windows.h from defining these symbols. +#endif + +// defined in bits/termios.h +#undef B0 + +namespace Eigen { + +inline static const char *SimdInstructionSetsInUse(void) { +#if defined(EIGEN_VECTORIZE_SSE4_2) + return "SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2"; +#elif defined(EIGEN_VECTORIZE_SSE4_1) + return "SSE, SSE2, SSE3, SSSE3, SSE4.1"; +#elif defined(EIGEN_VECTORIZE_SSSE3) + return "SSE, SSE2, SSE3, SSSE3"; +#elif defined(EIGEN_VECTORIZE_SSE3) + return "SSE, SSE2, SSE3"; +#elif defined(EIGEN_VECTORIZE_SSE2) + return "SSE, SSE2"; +#elif defined(EIGEN_VECTORIZE_ALTIVEC) + return "AltiVec"; +#elif defined(EIGEN_VECTORIZE_NEON) + return "ARM NEON"; +#else + return "None"; +#endif +} + +#define STAGE10_FULL_EIGEN2_API 10 +#define STAGE20_RESOLVE_API_CONFLICTS 20 +#define STAGE30_FULL_EIGEN3_API 30 +#define STAGE40_FULL_EIGEN3_STRICTNESS 40 +#define STAGE99_NO_EIGEN2_SUPPORT 99 + +#if defined EIGEN2_SUPPORT_STAGE40_FULL_EIGEN3_STRICTNESS + #define EIGEN2_SUPPORT + #define EIGEN2_SUPPORT_STAGE STAGE40_FULL_EIGEN3_STRICTNESS +#elif defined EIGEN2_SUPPORT_STAGE30_FULL_EIGEN3_API + #define EIGEN2_SUPPORT + #define EIGEN2_SUPPORT_STAGE STAGE30_FULL_EIGEN3_API +#elif defined EIGEN2_SUPPORT_STAGE20_RESOLVE_API_CONFLICTS + #define EIGEN2_SUPPORT + #define EIGEN2_SUPPORT_STAGE STAGE20_RESOLVE_API_CONFLICTS +#elif defined EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API + #define EIGEN2_SUPPORT + #define EIGEN2_SUPPORT_STAGE STAGE10_FULL_EIGEN2_API +#elif defined EIGEN2_SUPPORT + // default to stage 3, that's what it's always meant + #define EIGEN2_SUPPORT_STAGE30_FULL_EIGEN3_API + #define EIGEN2_SUPPORT_STAGE STAGE30_FULL_EIGEN3_API +#else + #define EIGEN2_SUPPORT_STAGE STAGE99_NO_EIGEN2_SUPPORT +#endif + +#ifdef EIGEN2_SUPPORT +#undef minor +#endif + +// we use size_t frequently and we'll never remember to prepend it with std:: everytime just to +// ensure QNX/QCC support +using std::size_t; + +/** \defgroup Core_Module Core module + * This is the main module of Eigen providing dense matrix and vector support + * (both fixed and dynamic size) with all the features corresponding to a BLAS library + * and much more... + * + * \code + * #include + * \endcode + */ + +#include "src/Core/util/Constants.h" +#include "src/Core/util/ForwardDeclarations.h" +#include "src/Core/util/Meta.h" +#include "src/Core/util/XprHelper.h" +#include "src/Core/util/StaticAssert.h" +#include "src/Core/util/Memory.h" + +#include "src/Core/NumTraits.h" +#include "src/Core/MathFunctions.h" +#include "src/Core/GenericPacketMath.h" + +#if defined EIGEN_VECTORIZE_SSE + #include "src/Core/arch/SSE/PacketMath.h" + #include "src/Core/arch/SSE/MathFunctions.h" + #include "src/Core/arch/SSE/Complex.h" +#elif defined EIGEN_VECTORIZE_ALTIVEC + #include "src/Core/arch/AltiVec/PacketMath.h" + #include "src/Core/arch/AltiVec/Complex.h" +#elif defined EIGEN_VECTORIZE_NEON + #include "src/Core/arch/NEON/PacketMath.h" + #include "src/Core/arch/NEON/Complex.h" +#endif + +#include "src/Core/arch/Default/Settings.h" + +#include "src/Core/Functors.h" +#include "src/Core/DenseCoeffsBase.h" +#include "src/Core/DenseBase.h" +#include "src/Core/MatrixBase.h" +#include "src/Core/EigenBase.h" + +#ifndef EIGEN_PARSED_BY_DOXYGEN // work around Doxygen bug triggered by Assign.h r814874 + // at least confirmed with Doxygen 1.5.5 and 1.5.6 + #include "src/Core/Assign.h" +#endif + +#include "src/Core/util/BlasUtil.h" +#include "src/Core/DenseStorage.h" +#include "src/Core/NestByValue.h" +#include "src/Core/ForceAlignedAccess.h" +#include "src/Core/ReturnByValue.h" +#include "src/Core/NoAlias.h" +#include "src/Core/PlainObjectBase.h" +#include "src/Core/Matrix.h" +#include "src/Core/Array.h" +#include "src/Core/CwiseBinaryOp.h" +#include "src/Core/CwiseUnaryOp.h" +#include "src/Core/CwiseNullaryOp.h" +#include "src/Core/CwiseUnaryView.h" +#include "src/Core/SelfCwiseBinaryOp.h" +#include "src/Core/Dot.h" +#include "src/Core/StableNorm.h" +#include "src/Core/MapBase.h" +#include "src/Core/Stride.h" +#include "src/Core/Map.h" +#include "src/Core/Block.h" +#include "src/Core/VectorBlock.h" +#include "src/Core/Transpose.h" +#include "src/Core/DiagonalMatrix.h" +#include "src/Core/Diagonal.h" +#include "src/Core/DiagonalProduct.h" +#include "src/Core/PermutationMatrix.h" +#include "src/Core/Transpositions.h" +#include "src/Core/Redux.h" +#include "src/Core/Visitor.h" +#include "src/Core/Fuzzy.h" +#include "src/Core/IO.h" +#include "src/Core/Swap.h" +#include "src/Core/CommaInitializer.h" +#include "src/Core/Flagged.h" +#include "src/Core/ProductBase.h" +#include "src/Core/Product.h" +#include "src/Core/TriangularMatrix.h" +#include "src/Core/SelfAdjointView.h" +#include "src/Core/SolveTriangular.h" +#include "src/Core/products/Parallelizer.h" +#include "src/Core/products/CoeffBasedProduct.h" +#include "src/Core/products/GeneralBlockPanelKernel.h" +#include "src/Core/products/GeneralMatrixVector.h" +#include "src/Core/products/GeneralMatrixMatrix.h" +#include "src/Core/products/GeneralMatrixMatrixTriangular.h" +#include "src/Core/products/SelfadjointMatrixVector.h" +#include "src/Core/products/SelfadjointMatrixMatrix.h" +#include "src/Core/products/SelfadjointProduct.h" +#include "src/Core/products/SelfadjointRank2Update.h" +#include "src/Core/products/TriangularMatrixVector.h" +#include "src/Core/products/TriangularMatrixMatrix.h" +#include "src/Core/products/TriangularSolverMatrix.h" +#include "src/Core/products/TriangularSolverVector.h" +#include "src/Core/BandMatrix.h" + +#include "src/Core/BooleanRedux.h" +#include "src/Core/Select.h" +#include "src/Core/VectorwiseOp.h" +#include "src/Core/Random.h" +#include "src/Core/Replicate.h" +#include "src/Core/Reverse.h" +#include "src/Core/ArrayBase.h" +#include "src/Core/ArrayWrapper.h" + +} // namespace Eigen + +#include "src/Core/GlobalFunctions.h" + +#include "src/Core/util/ReenableStupidWarnings.h" + +#ifdef EIGEN2_SUPPORT +#include "Eigen2Support" +#endif + +#endif // EIGEN_CORE_H diff --git a/asift_match/src/third_party/Eigen/Dense b/asift_match/src/third_party/Eigen/Dense new file mode 100755 index 0000000..5768910 --- /dev/null +++ b/asift_match/src/third_party/Eigen/Dense @@ -0,0 +1,7 @@ +#include "Core" +#include "LU" +#include "Cholesky" +#include "QR" +#include "SVD" +#include "Geometry" +#include "Eigenvalues" diff --git a/asift_match/src/third_party/Eigen/Eigen b/asift_match/src/third_party/Eigen/Eigen new file mode 100755 index 0000000..19b40ea --- /dev/null +++ b/asift_match/src/third_party/Eigen/Eigen @@ -0,0 +1,2 @@ +#include "Dense" +//#include "Sparse" diff --git a/asift_match/src/third_party/Eigen/Eigen2Support b/asift_match/src/third_party/Eigen/Eigen2Support new file mode 100755 index 0000000..d96592a --- /dev/null +++ b/asift_match/src/third_party/Eigen/Eigen2Support @@ -0,0 +1,82 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN2SUPPORT_H +#define EIGEN2SUPPORT_H + +#if (!defined(EIGEN2_SUPPORT)) || (!defined(EIGEN_CORE_H)) +#error Eigen2 support must be enabled by defining EIGEN2_SUPPORT before including any Eigen header +#endif + +#include "src/Core/util/DisableStupidWarnings.h" + +namespace Eigen { + +/** \defgroup Eigen2Support_Module Eigen2 support module + * This module provides a couple of deprecated functions improving the compatibility with Eigen2. + * + * To use it, define EIGEN2_SUPPORT before including any Eigen header + * \code + * #define EIGEN2_SUPPORT + * \endcode + * + */ + +#include "src/Eigen2Support/Macros.h" +#include "src/Eigen2Support/Memory.h" +#include "src/Eigen2Support/Meta.h" +#include "src/Eigen2Support/Lazy.h" +#include "src/Eigen2Support/Cwise.h" +#include "src/Eigen2Support/CwiseOperators.h" +#include "src/Eigen2Support/TriangularSolver.h" +#include "src/Eigen2Support/Block.h" +#include "src/Eigen2Support/VectorBlock.h" +#include "src/Eigen2Support/Minor.h" +#include "src/Eigen2Support/MathFunctions.h" + + +} // namespace Eigen + +#include "src/Core/util/ReenableStupidWarnings.h" + +// Eigen2 used to include iostream +#include + +#define USING_PART_OF_NAMESPACE_EIGEN \ +EIGEN_USING_MATRIX_TYPEDEFS \ +using Eigen::Matrix; \ +using Eigen::MatrixBase; \ +using Eigen::ei_random; \ +using Eigen::ei_real; \ +using Eigen::ei_imag; \ +using Eigen::ei_conj; \ +using Eigen::ei_abs; \ +using Eigen::ei_abs2; \ +using Eigen::ei_sqrt; \ +using Eigen::ei_exp; \ +using Eigen::ei_log; \ +using Eigen::ei_sin; \ +using Eigen::ei_cos; + +#endif // EIGEN2SUPPORT_H diff --git a/asift_match/src/third_party/Eigen/Eigenvalues b/asift_match/src/third_party/Eigen/Eigenvalues new file mode 100755 index 0000000..250c0f4 --- /dev/null +++ b/asift_match/src/third_party/Eigen/Eigenvalues @@ -0,0 +1,44 @@ +#ifndef EIGEN_EIGENVALUES_MODULE_H +#define EIGEN_EIGENVALUES_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include "Cholesky" +#include "Jacobi" +#include "Householder" +#include "LU" + +namespace Eigen { + +/** \defgroup Eigenvalues_Module Eigenvalues module + * + * + * + * This module mainly provides various eigenvalue solvers. + * This module also provides some MatrixBase methods, including: + * - MatrixBase::eigenvalues(), + * - MatrixBase::operatorNorm() + * + * \code + * #include + * \endcode + */ + +#include "src/Eigenvalues/Tridiagonalization.h" +#include "src/Eigenvalues/RealSchur.h" +#include "src/Eigenvalues/EigenSolver.h" +#include "src/Eigenvalues/SelfAdjointEigenSolver.h" +#include "src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h" +#include "src/Eigenvalues/HessenbergDecomposition.h" +#include "src/Eigenvalues/ComplexSchur.h" +#include "src/Eigenvalues/ComplexEigenSolver.h" +#include "src/Eigenvalues/MatrixBaseEigenvalues.h" + +} // namespace Eigen + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_EIGENVALUES_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/asift_match/src/third_party/Eigen/Geometry b/asift_match/src/third_party/Eigen/Geometry new file mode 100755 index 0000000..78277c0 --- /dev/null +++ b/asift_match/src/third_party/Eigen/Geometry @@ -0,0 +1,67 @@ +#ifndef EIGEN_GEOMETRY_MODULE_H +#define EIGEN_GEOMETRY_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include "SVD" +#include "LU" +#include + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +namespace Eigen { + +/** \defgroup Geometry_Module Geometry module + * + * + * + * This module provides support for: + * - fixed-size homogeneous transformations + * - translation, scaling, 2D and 3D rotations + * - quaternions + * - \ref MatrixBase::cross() "cross product" + * - \ref MatrixBase::unitOrthogonal() "orthognal vector generation" + * - some linear components: parametrized-lines and hyperplanes + * + * \code + * #include + * \endcode + */ + +#include "src/Geometry/OrthoMethods.h" +#include "src/Geometry/EulerAngles.h" + +#if EIGEN2_SUPPORT_STAGE > STAGE20_RESOLVE_API_CONFLICTS + #include "src/Geometry/Homogeneous.h" + #include "src/Geometry/RotationBase.h" + #include "src/Geometry/Rotation2D.h" + #include "src/Geometry/Quaternion.h" + #include "src/Geometry/AngleAxis.h" + #include "src/Geometry/Transform.h" + #include "src/Geometry/Translation.h" + #include "src/Geometry/Scaling.h" + #include "src/Geometry/Hyperplane.h" + #include "src/Geometry/ParametrizedLine.h" + #include "src/Geometry/AlignedBox.h" + #include "src/Geometry/Umeyama.h" + + #if defined EIGEN_VECTORIZE_SSE + #include "src/Geometry/arch/Geometry_SSE.h" + #endif +#endif + +#ifdef EIGEN2_SUPPORT +#include "src/Eigen2Support/Geometry/All.h" +#endif + +} // namespace Eigen + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_GEOMETRY_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ + diff --git a/asift_match/src/third_party/Eigen/Householder b/asift_match/src/third_party/Eigen/Householder new file mode 100755 index 0000000..6b86cf6 --- /dev/null +++ b/asift_match/src/third_party/Eigen/Householder @@ -0,0 +1,27 @@ +#ifndef EIGEN_HOUSEHOLDER_MODULE_H +#define EIGEN_HOUSEHOLDER_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +namespace Eigen { + +/** \defgroup Householder_Module Householder module + * This module provides Householder transformations. + * + * \code + * #include + * \endcode + */ + +#include "src/Householder/Householder.h" +#include "src/Householder/HouseholderSequence.h" +#include "src/Householder/BlockHouseholder.h" + +} // namespace Eigen + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_HOUSEHOLDER_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/asift_match/src/third_party/Eigen/Jacobi b/asift_match/src/third_party/Eigen/Jacobi new file mode 100755 index 0000000..afa6768 --- /dev/null +++ b/asift_match/src/third_party/Eigen/Jacobi @@ -0,0 +1,30 @@ +#ifndef EIGEN_JACOBI_MODULE_H +#define EIGEN_JACOBI_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +namespace Eigen { + +/** \defgroup Jacobi_Module Jacobi module + * This module provides Jacobi and Givens rotations. + * + * \code + * #include + * \endcode + * + * In addition to listed classes, it defines the two following MatrixBase methods to apply a Jacobi or Givens rotation: + * - MatrixBase::applyOnTheLeft() + * - MatrixBase::applyOnTheRight(). + */ + +#include "src/Jacobi/Jacobi.h" + +} // namespace Eigen + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_JACOBI_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ + diff --git a/asift_match/src/third_party/Eigen/LU b/asift_match/src/third_party/Eigen/LU new file mode 100755 index 0000000..226f88c --- /dev/null +++ b/asift_match/src/third_party/Eigen/LU @@ -0,0 +1,42 @@ +#ifndef EIGEN_LU_MODULE_H +#define EIGEN_LU_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +namespace Eigen { + +/** \defgroup LU_Module LU module + * This module includes %LU decomposition and related notions such as matrix inversion and determinant. + * This module defines the following MatrixBase methods: + * - MatrixBase::inverse() + * - MatrixBase::determinant() + * + * \code + * #include + * \endcode + */ + +#include "src/misc/Solve.h" +#include "src/misc/Kernel.h" +#include "src/misc/Image.h" +#include "src/LU/FullPivLU.h" +#include "src/LU/PartialPivLU.h" +#include "src/LU/Determinant.h" +#include "src/LU/Inverse.h" + +#if defined EIGEN_VECTORIZE_SSE + #include "src/LU/arch/Inverse_SSE.h" +#endif + +#ifdef EIGEN2_SUPPORT + #include "src/Eigen2Support/LU.h" +#endif + +} // namespace Eigen + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_LU_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/asift_match/src/third_party/Eigen/LeastSquares b/asift_match/src/third_party/Eigen/LeastSquares new file mode 100755 index 0000000..93a6302 --- /dev/null +++ b/asift_match/src/third_party/Eigen/LeastSquares @@ -0,0 +1,36 @@ +#ifndef EIGEN_REGRESSION_MODULE_H +#define EIGEN_REGRESSION_MODULE_H + +#ifndef EIGEN2_SUPPORT +#error LeastSquares is only available in Eigen2 support mode (define EIGEN2_SUPPORT) +#endif + +// exclude from normal eigen3-only documentation +#ifdef EIGEN2_SUPPORT + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include "Eigenvalues" +#include "Geometry" + +namespace Eigen { + +/** \defgroup LeastSquares_Module LeastSquares module + * This module provides linear regression and related features. + * + * \code + * #include + * \endcode + */ + +#include "src/Eigen2Support/LeastSquares.h" + +} // namespace Eigen + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN2_SUPPORT + +#endif // EIGEN_REGRESSION_MODULE_H diff --git a/asift_match/src/third_party/Eigen/QR b/asift_match/src/third_party/Eigen/QR new file mode 100755 index 0000000..97c1788 --- /dev/null +++ b/asift_match/src/third_party/Eigen/QR @@ -0,0 +1,45 @@ +#ifndef EIGEN_QR_MODULE_H +#define EIGEN_QR_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include "Cholesky" +#include "Jacobi" +#include "Householder" + +namespace Eigen { + +/** \defgroup QR_Module QR module + * + * + * + * This module provides various QR decompositions + * This module also provides some MatrixBase methods, including: + * - MatrixBase::qr(), + * + * \code + * #include + * \endcode + */ + +#include "src/misc/Solve.h" +#include "src/QR/HouseholderQR.h" +#include "src/QR/FullPivHouseholderQR.h" +#include "src/QR/ColPivHouseholderQR.h" + +#ifdef EIGEN2_SUPPORT +#include "src/Eigen2Support/QR.h" +#endif + +} // namespace Eigen + +#include "src/Core/util/ReenableStupidWarnings.h" + +#ifdef EIGEN2_SUPPORT +#include "Eigenvalues" +#endif + +#endif // EIGEN_QR_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/asift_match/src/third_party/Eigen/QtAlignedMalloc b/asift_match/src/third_party/Eigen/QtAlignedMalloc new file mode 100755 index 0000000..46f7d83 --- /dev/null +++ b/asift_match/src/third_party/Eigen/QtAlignedMalloc @@ -0,0 +1,34 @@ + +#ifndef EIGEN_QTMALLOC_MODULE_H +#define EIGEN_QTMALLOC_MODULE_H + +#include "Core" + +#if (!EIGEN_MALLOC_ALREADY_ALIGNED) + +#include "src/Core/util/DisableStupidWarnings.h" + +void *qMalloc(size_t size) +{ + return Eigen::internal::aligned_malloc(size); +} + +void qFree(void *ptr) +{ + Eigen::internal::aligned_free(ptr); +} + +void *qRealloc(void *ptr, size_t size) +{ + void* newPtr = Eigen::internal::aligned_malloc(size); + memcpy(newPtr, ptr, size); + Eigen::internal::aligned_free(ptr); + return newPtr; +} + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif + +#endif // EIGEN_QTMALLOC_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/asift_match/src/third_party/Eigen/README.ipol b/asift_match/src/third_party/Eigen/README.ipol new file mode 100755 index 0000000..3f68d3b --- /dev/null +++ b/asift_match/src/third_party/Eigen/README.ipol @@ -0,0 +1,10 @@ +Project: EIGEN +URL: http://eigen.tuxfamily.org/ +License: GPL/LGPL +Upstream version: Eigen 3.0 released on March 19, 2011. + +Local modifications: + +* Use only the Eigen directory +* Copy *.GPL and *.LGPL licence file +* Add this readme file diff --git a/asift_match/src/third_party/Eigen/SVD b/asift_match/src/third_party/Eigen/SVD new file mode 100755 index 0000000..d24471f --- /dev/null +++ b/asift_match/src/third_party/Eigen/SVD @@ -0,0 +1,38 @@ +#ifndef EIGEN_SVD_MODULE_H +#define EIGEN_SVD_MODULE_H + +#include "QR" +#include "Householder" +#include "Jacobi" + +#include "src/Core/util/DisableStupidWarnings.h" + +namespace Eigen { + +/** \defgroup SVD_Module SVD module + * + * + * + * This module provides SVD decomposition for (currently) real matrices. + * This decomposition is accessible via the following MatrixBase method: + * - MatrixBase::svd() + * + * \code + * #include + * \endcode + */ + +#include "src/misc/Solve.h" +#include "src/SVD/JacobiSVD.h" +#include "src/SVD/UpperBidiagonalization.h" + +#ifdef EIGEN2_SUPPORT +#include "src/Eigen2Support/SVD.h" +#endif + +} // namespace Eigen + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_SVD_MODULE_H +/* vim: set filetype=cpp et sw=2 ts=2 ai: */ diff --git a/asift_match/src/third_party/Eigen/Sparse b/asift_match/src/third_party/Eigen/Sparse new file mode 100755 index 0000000..7425b3a --- /dev/null +++ b/asift_match/src/third_party/Eigen/Sparse @@ -0,0 +1,69 @@ +#ifndef EIGEN_SPARSE_MODULE_H +#define EIGEN_SPARSE_MODULE_H + +#include "Core" + +#include "src/Core/util/DisableStupidWarnings.h" + +#include +#include +#include +#include +#include + +#ifdef EIGEN2_SUPPORT +#define EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET +#endif + +#ifndef EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET +#error The sparse module API is not stable yet. To use it anyway, please define the EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET preprocessor token. +#endif + +namespace Eigen { + +/** \defgroup Sparse_Module Sparse module + * + * + * + * See the \ref TutorialSparse "Sparse tutorial" + * + * \code + * #include + * \endcode + */ + +/** The type used to identify a general sparse storage. */ +struct Sparse {}; + +#include "src/Sparse/SparseUtil.h" +#include "src/Sparse/SparseMatrixBase.h" +#include "src/Sparse/CompressedStorage.h" +#include "src/Sparse/AmbiVector.h" +#include "src/Sparse/SparseMatrix.h" +#include "src/Sparse/DynamicSparseMatrix.h" +#include "src/Sparse/MappedSparseMatrix.h" +#include "src/Sparse/SparseVector.h" +#include "src/Sparse/CoreIterators.h" +#include "src/Sparse/SparseBlock.h" +#include "src/Sparse/SparseTranspose.h" +#include "src/Sparse/SparseCwiseUnaryOp.h" +#include "src/Sparse/SparseCwiseBinaryOp.h" +#include "src/Sparse/SparseDot.h" +#include "src/Sparse/SparseAssign.h" +#include "src/Sparse/SparseRedux.h" +#include "src/Sparse/SparseFuzzy.h" +#include "src/Sparse/SparseProduct.h" +#include "src/Sparse/SparseSparseProduct.h" +#include "src/Sparse/SparseDenseProduct.h" +#include "src/Sparse/SparseDiagonalProduct.h" +#include "src/Sparse/SparseTriangularView.h" +#include "src/Sparse/SparseSelfAdjointView.h" +#include "src/Sparse/TriangularSolver.h" +#include "src/Sparse/SparseView.h" + +} // namespace Eigen + +#include "src/Core/util/ReenableStupidWarnings.h" + +#endif // EIGEN_SPARSE_MODULE_H + diff --git a/asift_match/src/third_party/Eigen/StdDeque b/asift_match/src/third_party/Eigen/StdDeque new file mode 100755 index 0000000..a4f9623 --- /dev/null +++ b/asift_match/src/third_party/Eigen/StdDeque @@ -0,0 +1,42 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// Copyright (C) 2009 Hauke Heibel +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_STDDEQUE_MODULE_H +#define EIGEN_STDDEQUE_MODULE_H + +#include "Core" +#include + +#if (defined(_MSC_VER) && defined(_WIN64)) /* MSVC auto aligns in 64 bit builds */ + +#define EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(...) + +#else + +#include "src/StlSupport/StdDeque.h" + +#endif + +#endif // EIGEN_STDDEQUE_MODULE_H diff --git a/asift_match/src/third_party/Eigen/StdList b/asift_match/src/third_party/Eigen/StdList new file mode 100755 index 0000000..d914ded --- /dev/null +++ b/asift_match/src/third_party/Eigen/StdList @@ -0,0 +1,41 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Hauke Heibel +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_STDLIST_MODULE_H +#define EIGEN_STDLIST_MODULE_H + +#include "Core" +#include + +#if (defined(_MSC_VER) && defined(_WIN64)) /* MSVC auto aligns in 64 bit builds */ + +#define EIGEN_DEFINE_STL_LIST_SPECIALIZATION(...) + +#else + +#include "src/StlSupport/StdList.h" + +#endif + +#endif // EIGEN_STDLIST_MODULE_H diff --git a/asift_match/src/third_party/Eigen/StdVector b/asift_match/src/third_party/Eigen/StdVector new file mode 100755 index 0000000..3d8995e --- /dev/null +++ b/asift_match/src/third_party/Eigen/StdVector @@ -0,0 +1,42 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// Copyright (C) 2009 Hauke Heibel +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_STDVECTOR_MODULE_H +#define EIGEN_STDVECTOR_MODULE_H + +#include "Core" +#include + +#if (defined(_MSC_VER) && defined(_WIN64)) /* MSVC auto aligns in 64 bit builds */ + +#define EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(...) + +#else + +#include "src/StlSupport/StdVector.h" + +#endif + +#endif // EIGEN_STDVECTOR_MODULE_H diff --git a/asift_match/src/third_party/Eigen/src/CMakeLists.txt b/asift_match/src/third_party/Eigen/src/CMakeLists.txt new file mode 100755 index 0000000..c326f37 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/CMakeLists.txt @@ -0,0 +1,7 @@ +file(GLOB Eigen_src_subdirectories "*") +escape_string_as_regex(ESCAPED_CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") +foreach(f ${Eigen_src_subdirectories}) + if(NOT f MATCHES "\\.txt" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/[.].+" ) + add_subdirectory(${f}) + endif() +endforeach() diff --git a/asift_match/src/third_party/Eigen/src/Cholesky/CMakeLists.txt b/asift_match/src/third_party/Eigen/src/Cholesky/CMakeLists.txt new file mode 100755 index 0000000..d01488b --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Cholesky/CMakeLists.txt @@ -0,0 +1,6 @@ +FILE(GLOB Eigen_Cholesky_SRCS "*.h") + +INSTALL(FILES + ${Eigen_Cholesky_SRCS} + DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen/src/Cholesky COMPONENT Devel + ) diff --git a/asift_match/src/third_party/Eigen/src/Cholesky/LDLT.h b/asift_match/src/third_party/Eigen/src/Cholesky/LDLT.h new file mode 100755 index 0000000..5e2352c --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Cholesky/LDLT.h @@ -0,0 +1,461 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// Copyright (C) 2009 Keir Mierle +// Copyright (C) 2009 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_LDLT_H +#define EIGEN_LDLT_H + +namespace internal { +template struct LDLT_Traits; +} + +/** \ingroup cholesky_Module + * + * \class LDLT + * + * \brief Robust Cholesky decomposition of a matrix with pivoting + * + * \param MatrixType the type of the matrix of which to compute the LDL^T Cholesky decomposition + * + * Perform a robust Cholesky decomposition of a positive semidefinite or negative semidefinite + * matrix \f$ A \f$ such that \f$ A = P^TLDL^*P \f$, where P is a permutation matrix, L + * is lower triangular with a unit diagonal and D is a diagonal matrix. + * + * The decomposition uses pivoting to ensure stability, so that L will have + * zeros in the bottom right rank(A) - n submatrix. Avoiding the square root + * on D also stabilizes the computation. + * + * Remember that Cholesky decompositions are not rank-revealing. Also, do not use a Cholesky + * decomposition to determine whether a system of equations has a solution. + * + * \sa MatrixBase::ldlt(), class LLT + */ + /* THIS PART OF THE DOX IS CURRENTLY DISABLED BECAUSE INACCURATE BECAUSE OF BUG IN THE DECOMPOSITION CODE + * Note that during the decomposition, only the upper triangular part of A is considered. Therefore, + * the strict lower part does not have to store correct values. + */ +template class LDLT +{ + public: + typedef _MatrixType MatrixType; + enum { + RowsAtCompileTime = MatrixType::RowsAtCompileTime, + ColsAtCompileTime = MatrixType::ColsAtCompileTime, + Options = MatrixType::Options & ~RowMajorBit, // these are the options for the TmpMatrixType, we need a ColMajor matrix here! + MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime, + MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime, + UpLo = _UpLo + }; + typedef typename MatrixType::Scalar Scalar; + typedef typename NumTraits::Real RealScalar; + typedef typename MatrixType::Index Index; + typedef Matrix TmpMatrixType; + + typedef Transpositions TranspositionType; + typedef PermutationMatrix PermutationType; + + typedef internal::LDLT_Traits Traits; + + /** \brief Default Constructor. + * + * The default constructor is useful in cases in which the user intends to + * perform decompositions via LDLT::compute(const MatrixType&). + */ + LDLT() : m_matrix(), m_transpositions(), m_isInitialized(false) {} + + /** \brief Default Constructor with memory preallocation + * + * Like the default constructor but with preallocation of the internal data + * according to the specified problem \a size. + * \sa LDLT() + */ + LDLT(Index size) + : m_matrix(size, size), + m_transpositions(size), + m_temporary(size), + m_isInitialized(false) + {} + + LDLT(const MatrixType& matrix) + : m_matrix(matrix.rows(), matrix.cols()), + m_transpositions(matrix.rows()), + m_temporary(matrix.rows()), + m_isInitialized(false) + { + compute(matrix); + } + + /** \returns a view of the upper triangular matrix U */ + inline typename Traits::MatrixU matrixU() const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return Traits::getU(m_matrix); + } + + /** \returns a view of the lower triangular matrix L */ + inline typename Traits::MatrixL matrixL() const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return Traits::getL(m_matrix); + } + + /** \returns the permutation matrix P as a transposition sequence. + */ + inline const TranspositionType& transpositionsP() const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return m_transpositions; + } + + /** \returns the coefficients of the diagonal matrix D */ + inline Diagonal vectorD(void) const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return m_matrix.diagonal(); + } + + /** \returns true if the matrix is positive (semidefinite) */ + inline bool isPositive(void) const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return m_sign == 1; + } + + #ifdef EIGEN2_SUPPORT + inline bool isPositiveDefinite() const + { + return isPositive(); + } + #endif + + /** \returns true if the matrix is negative (semidefinite) */ + inline bool isNegative(void) const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return m_sign == -1; + } + + /** \returns a solution x of \f$ A x = b \f$ using the current decomposition of A. + * + * \note_about_checking_solutions + * + * \sa solveInPlace(), MatrixBase::ldlt() + */ + template + inline const internal::solve_retval + solve(const MatrixBase& b) const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + eigen_assert(m_matrix.rows()==b.rows() + && "LDLT::solve(): invalid number of rows of the right hand side matrix b"); + return internal::solve_retval(*this, b.derived()); + } + + #ifdef EIGEN2_SUPPORT + template + bool solve(const MatrixBase& b, ResultType *result) const + { + *result = this->solve(b); + return true; + } + #endif + + template + bool solveInPlace(MatrixBase &bAndX) const; + + LDLT& compute(const MatrixType& matrix); + + /** \returns the internal LDLT decomposition matrix + * + * TODO: document the storage layout + */ + inline const MatrixType& matrixLDLT() const + { + eigen_assert(m_isInitialized && "LDLT is not initialized."); + return m_matrix; + } + + MatrixType reconstructedMatrix() const; + + inline Index rows() const { return m_matrix.rows(); } + inline Index cols() const { return m_matrix.cols(); } + + protected: + + /** \internal + * Used to compute and store the Cholesky decomposition A = L D L^* = U^* D U. + * The strict upper part is used during the decomposition, the strict lower + * part correspond to the coefficients of L (its diagonal is equal to 1 and + * is not stored), and the diagonal entries correspond to D. + */ + MatrixType m_matrix; + TranspositionType m_transpositions; + TmpMatrixType m_temporary; + int m_sign; + bool m_isInitialized; +}; + +namespace internal { + +template struct ldlt_inplace; + +template<> struct ldlt_inplace +{ + template + static bool unblocked(MatrixType& mat, TranspositionType& transpositions, Workspace& temp, int* sign=0) + { + typedef typename MatrixType::Scalar Scalar; + typedef typename MatrixType::RealScalar RealScalar; + typedef typename MatrixType::Index Index; + eigen_assert(mat.rows()==mat.cols()); + const Index size = mat.rows(); + + if (size <= 1) + { + transpositions.setIdentity(); + if(sign) + *sign = real(mat.coeff(0,0))>0 ? 1:-1; + return true; + } + + RealScalar cutoff = 0, biggest_in_corner; + + for (Index k = 0; k < size; ++k) + { + // Find largest diagonal element + Index index_of_biggest_in_corner; + biggest_in_corner = mat.diagonal().tail(size-k).cwiseAbs().maxCoeff(&index_of_biggest_in_corner); + index_of_biggest_in_corner += k; + + if(k == 0) + { + // The biggest overall is the point of reference to which further diagonals + // are compared; if any diagonal is negligible compared + // to the largest overall, the algorithm bails. + cutoff = abs(NumTraits::epsilon() * biggest_in_corner); + + if(sign) + *sign = real(mat.diagonal().coeff(index_of_biggest_in_corner)) > 0 ? 1 : -1; + } + + // Finish early if the matrix is not full rank. + if(biggest_in_corner < cutoff) + { + for(Index i = k; i < size; i++) transpositions.coeffRef(i) = i; + break; + } + + transpositions.coeffRef(k) = index_of_biggest_in_corner; + if(k != index_of_biggest_in_corner) + { + // apply the transposition while taking care to consider only + // the lower triangular part + Index s = size-index_of_biggest_in_corner-1; // trailing size after the biggest element + mat.row(k).head(k).swap(mat.row(index_of_biggest_in_corner).head(k)); + mat.col(k).tail(s).swap(mat.col(index_of_biggest_in_corner).tail(s)); + std::swap(mat.coeffRef(k,k),mat.coeffRef(index_of_biggest_in_corner,index_of_biggest_in_corner)); + for(int i=k+1;i::IsComplex) + mat.coeffRef(index_of_biggest_in_corner,k) = conj(mat.coeff(index_of_biggest_in_corner,k)); + } + + // partition the matrix: + // A00 | - | - + // lu = A10 | A11 | - + // A20 | A21 | A22 + Index rs = size - k - 1; + Block A21(mat,k+1,k,rs,1); + Block A10(mat,k,0,1,k); + Block A20(mat,k+1,0,rs,k); + + if(k>0) + { + temp.head(k) = mat.diagonal().head(k).asDiagonal() * A10.adjoint(); + mat.coeffRef(k,k) -= (A10 * temp.head(k)).value(); + if(rs>0) + A21.noalias() -= A20 * temp.head(k); + } + if((rs>0) && (abs(mat.coeffRef(k,k)) > cutoff)) + A21 /= mat.coeffRef(k,k); + } + + return true; + } +}; + +template<> struct ldlt_inplace +{ + template + static EIGEN_STRONG_INLINE bool unblocked(MatrixType& mat, TranspositionType& transpositions, Workspace& temp, int* sign=0) + { + Transpose matt(mat); + return ldlt_inplace::unblocked(matt, transpositions, temp, sign); + } +}; + +template struct LDLT_Traits +{ + typedef TriangularView MatrixL; + typedef TriangularView MatrixU; + inline static MatrixL getL(const MatrixType& m) { return m; } + inline static MatrixU getU(const MatrixType& m) { return m.adjoint(); } +}; + +template struct LDLT_Traits +{ + typedef TriangularView MatrixL; + typedef TriangularView MatrixU; + inline static MatrixL getL(const MatrixType& m) { return m.adjoint(); } + inline static MatrixU getU(const MatrixType& m) { return m; } +}; + +} // end namespace internal + +/** Compute / recompute the LDLT decomposition A = L D L^* = U^* D U of \a matrix + */ +template +LDLT& LDLT::compute(const MatrixType& a) +{ + eigen_assert(a.rows()==a.cols()); + const Index size = a.rows(); + + m_matrix = a; + + m_transpositions.resize(size); + m_isInitialized = false; + m_temporary.resize(size); + + internal::ldlt_inplace::unblocked(m_matrix, m_transpositions, m_temporary, &m_sign); + + m_isInitialized = true; + return *this; +} + +namespace internal { +template +struct solve_retval, Rhs> + : solve_retval_base, Rhs> +{ + typedef LDLT<_MatrixType,_UpLo> LDLTType; + EIGEN_MAKE_SOLVE_HELPERS(LDLTType,Rhs) + + template void evalTo(Dest& dst) const + { + eigen_assert(rhs().rows() == dec().matrixLDLT().rows()); + // dst = P b + dst = dec().transpositionsP() * rhs(); + + // dst = L^-1 (P b) + dec().matrixL().solveInPlace(dst); + + // dst = D^-1 (L^-1 P b) + dst = dec().vectorD().asDiagonal().inverse() * dst; + + // dst = L^-T (D^-1 L^-1 P b) + dec().matrixU().solveInPlace(dst); + + // dst = P^-1 (L^-T D^-1 L^-1 P b) = A^-1 b + dst = dec().transpositionsP().transpose() * dst; + } +}; +} + +/** \internal use x = ldlt_object.solve(x); + * + * This is the \em in-place version of solve(). + * + * \param bAndX represents both the right-hand side matrix b and result x. + * + * \returns true always! If you need to check for existence of solutions, use another decomposition like LU, QR, or SVD. + * + * This version avoids a copy when the right hand side matrix b is not + * needed anymore. + * + * \sa LDLT::solve(), MatrixBase::ldlt() + */ +template +template +bool LDLT::solveInPlace(MatrixBase &bAndX) const +{ + eigen_assert(m_isInitialized && "LDLT is not initialized."); + const Index size = m_matrix.rows(); + eigen_assert(size == bAndX.rows()); + + bAndX = this->solve(bAndX); + + return true; +} + +/** \returns the matrix represented by the decomposition, + * i.e., it returns the product: P^T L D L^* P. + * This function is provided for debug purpose. */ +template +MatrixType LDLT::reconstructedMatrix() const +{ + eigen_assert(m_isInitialized && "LDLT is not initialized."); + const Index size = m_matrix.rows(); + MatrixType res(size,size); + + // P + res.setIdentity(); + res = transpositionsP() * res; + // L^* P + res = matrixU() * res; + // D(L^*P) + res = vectorD().asDiagonal() * res; + // L(DL^*P) + res = matrixL() * res; + // P^T (LDL^*P) + res = transpositionsP().transpose() * res; + + return res; +} + +/** \cholesky_module + * \returns the Cholesky decomposition with full pivoting without square root of \c *this + */ +template +inline const LDLT::PlainObject, UpLo> +SelfAdjointView::ldlt() const +{ + return LDLT(m_matrix); +} + +/** \cholesky_module + * \returns the Cholesky decomposition with full pivoting without square root of \c *this + */ +template +inline const LDLT::PlainObject> +MatrixBase::ldlt() const +{ + return LDLT(derived()); +} + +#endif // EIGEN_LDLT_H diff --git a/asift_match/src/third_party/Eigen/src/Cholesky/LLT.h b/asift_match/src/third_party/Eigen/src/Cholesky/LLT.h new file mode 100755 index 0000000..a8fc525 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Cholesky/LLT.h @@ -0,0 +1,386 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_LLT_H +#define EIGEN_LLT_H + +namespace internal{ +template struct LLT_Traits; +} + +/** \ingroup cholesky_Module + * + * \class LLT + * + * \brief Standard Cholesky decomposition (LL^T) of a matrix and associated features + * + * \param MatrixType the type of the matrix of which we are computing the LL^T Cholesky decomposition + * + * This class performs a LL^T Cholesky decomposition of a symmetric, positive definite + * matrix A such that A = LL^* = U^*U, where L is lower triangular. + * + * While the Cholesky decomposition is particularly useful to solve selfadjoint problems like D^*D x = b, + * for that purpose, we recommend the Cholesky decomposition without square root which is more stable + * and even faster. Nevertheless, this standard Cholesky decomposition remains useful in many other + * situations like generalised eigen problems with hermitian matrices. + * + * Remember that Cholesky decompositions are not rank-revealing. This LLT decomposition is only stable on positive definite matrices, + * use LDLT instead for the semidefinite case. Also, do not use a Cholesky decomposition to determine whether a system of equations + * has a solution. + * + * \sa MatrixBase::llt(), class LDLT + */ + /* HEY THIS DOX IS DISABLED BECAUSE THERE's A BUG EITHER HERE OR IN LDLT ABOUT THAT (OR BOTH) + * Note that during the decomposition, only the upper triangular part of A is considered. Therefore, + * the strict lower part does not have to store correct values. + */ +template class LLT +{ + public: + typedef _MatrixType MatrixType; + enum { + RowsAtCompileTime = MatrixType::RowsAtCompileTime, + ColsAtCompileTime = MatrixType::ColsAtCompileTime, + Options = MatrixType::Options, + MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime + }; + typedef typename MatrixType::Scalar Scalar; + typedef typename NumTraits::Real RealScalar; + typedef typename MatrixType::Index Index; + + enum { + PacketSize = internal::packet_traits::size, + AlignmentMask = int(PacketSize)-1, + UpLo = _UpLo + }; + + typedef internal::LLT_Traits Traits; + + /** + * \brief Default Constructor. + * + * The default constructor is useful in cases in which the user intends to + * perform decompositions via LLT::compute(const MatrixType&). + */ + LLT() : m_matrix(), m_isInitialized(false) {} + + /** \brief Default Constructor with memory preallocation + * + * Like the default constructor but with preallocation of the internal data + * according to the specified problem \a size. + * \sa LLT() + */ + LLT(Index size) : m_matrix(size, size), + m_isInitialized(false) {} + + LLT(const MatrixType& matrix) + : m_matrix(matrix.rows(), matrix.cols()), + m_isInitialized(false) + { + compute(matrix); + } + + /** \returns a view of the upper triangular matrix U */ + inline typename Traits::MatrixU matrixU() const + { + eigen_assert(m_isInitialized && "LLT is not initialized."); + return Traits::getU(m_matrix); + } + + /** \returns a view of the lower triangular matrix L */ + inline typename Traits::MatrixL matrixL() const + { + eigen_assert(m_isInitialized && "LLT is not initialized."); + return Traits::getL(m_matrix); + } + + /** \returns the solution x of \f$ A x = b \f$ using the current decomposition of A. + * + * Since this LLT class assumes anyway that the matrix A is invertible, the solution + * theoretically exists and is unique regardless of b. + * + * Example: \include LLT_solve.cpp + * Output: \verbinclude LLT_solve.out + * + * \sa solveInPlace(), MatrixBase::llt() + */ + template + inline const internal::solve_retval + solve(const MatrixBase& b) const + { + eigen_assert(m_isInitialized && "LLT is not initialized."); + eigen_assert(m_matrix.rows()==b.rows() + && "LLT::solve(): invalid number of rows of the right hand side matrix b"); + return internal::solve_retval(*this, b.derived()); + } + + #ifdef EIGEN2_SUPPORT + template + bool solve(const MatrixBase& b, ResultType *result) const + { + *result = this->solve(b); + return true; + } + + bool isPositiveDefinite() const { return true; } + #endif + + template + void solveInPlace(MatrixBase &bAndX) const; + + LLT& compute(const MatrixType& matrix); + + /** \returns the LLT decomposition matrix + * + * TODO: document the storage layout + */ + inline const MatrixType& matrixLLT() const + { + eigen_assert(m_isInitialized && "LLT is not initialized."); + return m_matrix; + } + + MatrixType reconstructedMatrix() const; + + + /** \brief Reports whether previous computation was successful. + * + * \returns \c Success if computation was succesful, + * \c NumericalIssue if the matrix.appears to be negative. + */ + ComputationInfo info() const + { + eigen_assert(m_isInitialized && "LLT is not initialized."); + return m_info; + } + + inline Index rows() const { return m_matrix.rows(); } + inline Index cols() const { return m_matrix.cols(); } + + protected: + /** \internal + * Used to compute and store L + * The strict upper part is not used and even not initialized. + */ + MatrixType m_matrix; + bool m_isInitialized; + ComputationInfo m_info; +}; + +namespace internal { + +template struct llt_inplace; + +template<> struct llt_inplace +{ + template + static typename MatrixType::Index unblocked(MatrixType& mat) + { + typedef typename MatrixType::Index Index; + typedef typename MatrixType::Scalar Scalar; + typedef typename MatrixType::RealScalar RealScalar; + + eigen_assert(mat.rows()==mat.cols()); + const Index size = mat.rows(); + for(Index k = 0; k < size; ++k) + { + Index rs = size-k-1; // remaining size + + Block A21(mat,k+1,k,rs,1); + Block A10(mat,k,0,1,k); + Block A20(mat,k+1,0,rs,k); + + RealScalar x = real(mat.coeff(k,k)); + if (k>0) x -= A10.squaredNorm(); + if (x<=RealScalar(0)) + return k; + mat.coeffRef(k,k) = x = sqrt(x); + if (k>0 && rs>0) A21.noalias() -= A20 * A10.adjoint(); + if (rs>0) A21 *= RealScalar(1)/x; + } + return -1; + } + + template + static typename MatrixType::Index blocked(MatrixType& m) + { + typedef typename MatrixType::Index Index; + eigen_assert(m.rows()==m.cols()); + Index size = m.rows(); + if(size<32) + return unblocked(m); + + Index blockSize = size/8; + blockSize = (blockSize/16)*16; + blockSize = std::min(std::max(blockSize,Index(8)), Index(128)); + + for (Index k=0; k A11(m,k, k, bs,bs); + Block A21(m,k+bs,k, rs,bs); + Block A22(m,k+bs,k+bs,rs,rs); + + Index ret; + if((ret=unblocked(A11))>=0) return k+ret; + if(rs>0) A11.adjoint().template triangularView().template solveInPlace(A21); + if(rs>0) A22.template selfadjointView().rankUpdate(A21,-1); // bottleneck + } + return -1; + } +}; + +template<> struct llt_inplace +{ + template + static EIGEN_STRONG_INLINE typename MatrixType::Index unblocked(MatrixType& mat) + { + Transpose matt(mat); + return llt_inplace::unblocked(matt); + } + template + static EIGEN_STRONG_INLINE typename MatrixType::Index blocked(MatrixType& mat) + { + Transpose matt(mat); + return llt_inplace::blocked(matt); + } +}; + +template struct LLT_Traits +{ + typedef TriangularView MatrixL; + typedef TriangularView MatrixU; + inline static MatrixL getL(const MatrixType& m) { return m; } + inline static MatrixU getU(const MatrixType& m) { return m.adjoint(); } + static bool inplace_decomposition(MatrixType& m) + { return llt_inplace::blocked(m)==-1; } +}; + +template struct LLT_Traits +{ + typedef TriangularView MatrixL; + typedef TriangularView MatrixU; + inline static MatrixL getL(const MatrixType& m) { return m.adjoint(); } + inline static MatrixU getU(const MatrixType& m) { return m; } + static bool inplace_decomposition(MatrixType& m) + { return llt_inplace::blocked(m)==-1; } +}; + +} // end namespace internal + +/** Computes / recomputes the Cholesky decomposition A = LL^* = U^*U of \a matrix + * + * + * \returns a reference to *this + */ +template +LLT& LLT::compute(const MatrixType& a) +{ + assert(a.rows()==a.cols()); + const Index size = a.rows(); + m_matrix.resize(size, size); + m_matrix = a; + + m_isInitialized = true; + bool ok = Traits::inplace_decomposition(m_matrix); + m_info = ok ? Success : NumericalIssue; + + return *this; +} + +namespace internal { +template +struct solve_retval, Rhs> + : solve_retval_base, Rhs> +{ + typedef LLT<_MatrixType,UpLo> LLTType; + EIGEN_MAKE_SOLVE_HELPERS(LLTType,Rhs) + + template void evalTo(Dest& dst) const + { + dst = rhs(); + dec().solveInPlace(dst); + } +}; +} + +/** \internal use x = llt_object.solve(x); + * + * This is the \em in-place version of solve(). + * + * \param bAndX represents both the right-hand side matrix b and result x. + * + * \returns true always! If you need to check for existence of solutions, use another decomposition like LU, QR, or SVD. + * + * This version avoids a copy when the right hand side matrix b is not + * needed anymore. + * + * \sa LLT::solve(), MatrixBase::llt() + */ +template +template +void LLT::solveInPlace(MatrixBase &bAndX) const +{ + eigen_assert(m_isInitialized && "LLT is not initialized."); + eigen_assert(m_matrix.rows()==bAndX.rows()); + matrixL().solveInPlace(bAndX); + matrixU().solveInPlace(bAndX); +} + +/** \returns the matrix represented by the decomposition, + * i.e., it returns the product: L L^*. + * This function is provided for debug purpose. */ +template +MatrixType LLT::reconstructedMatrix() const +{ + eigen_assert(m_isInitialized && "LLT is not initialized."); + return matrixL() * matrixL().adjoint().toDenseMatrix(); +} + +/** \cholesky_module + * \returns the LLT decomposition of \c *this + */ +template +inline const LLT::PlainObject> +MatrixBase::llt() const +{ + return LLT(derived()); +} + +/** \cholesky_module + * \returns the LLT decomposition of \c *this + */ +template +inline const LLT::PlainObject, UpLo> +SelfAdjointView::llt() const +{ + return LLT(m_matrix); +} + +#endif // EIGEN_LLT_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Array.h b/asift_match/src/third_party/Eigen/src/Core/Array.h new file mode 100755 index 0000000..a3a2167 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Array.h @@ -0,0 +1,322 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_ARRAY_H +#define EIGEN_ARRAY_H + +/** \class Array + * \ingroup Core_Module + * + * \brief General-purpose arrays with easy API for coefficient-wise operations + * + * The %Array class is very similar to the Matrix class. It provides + * general-purpose one- and two-dimensional arrays. The difference between the + * %Array and the %Matrix class is primarily in the API: the API for the + * %Array class provides easy access to coefficient-wise operations, while the + * API for the %Matrix class provides easy access to linear-algebra + * operations. + * + * This class can be extended with the help of the plugin mechanism described on the page + * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_ARRAY_PLUGIN. + * + * \sa \ref TutorialArrayClass, \ref TopicClassHierarchy + */ +namespace internal { +template +struct traits > : traits > +{ + typedef ArrayXpr XprKind; + typedef ArrayBase > XprBase; +}; +} + +template +class Array + : public PlainObjectBase > +{ + public: + + typedef PlainObjectBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Array) + + enum { Options = _Options }; + typedef typename Base::PlainObject PlainObject; + + protected: + template + friend struct internal::conservative_resize_like_impl; + + using Base::m_storage; + public: + enum { NeedsToAlign = (!(Options&DontAlign)) + && SizeAtCompileTime!=Dynamic && ((static_cast(sizeof(Scalar))*SizeAtCompileTime)%16)==0 }; + EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) + + using Base::base; + using Base::coeff; + using Base::coeffRef; + + /** + * The usage of + * using Base::operator=; + * fails on MSVC. Since the code below is working with GCC and MSVC, we skipped + * the usage of 'using'. This should be done only for operator=. + */ + template + EIGEN_STRONG_INLINE Array& operator=(const EigenBase &other) + { + return Base::operator=(other); + } + + /** Copies the value of the expression \a other into \c *this with automatic resizing. + * + * *this might be resized to match the dimensions of \a other. If *this was a null matrix (not already initialized), + * it will be initialized. + * + * Note that copying a row-vector into a vector (and conversely) is allowed. + * The resizing, if any, is then done in the appropriate way so that row-vectors + * remain row-vectors and vectors remain vectors. + */ + template + EIGEN_STRONG_INLINE Array& operator=(const ArrayBase& other) + { + return Base::_set(other); + } + + /** This is a special case of the templated operator=. Its purpose is to + * prevent a default operator= from hiding the templated operator=. + */ + EIGEN_STRONG_INLINE Array& operator=(const Array& other) + { + return Base::_set(other); + } + + /** Default constructor. + * + * For fixed-size matrices, does nothing. + * + * For dynamic-size matrices, creates an empty matrix of size 0. Does not allocate any array. Such a matrix + * is called a null matrix. This constructor is the unique way to create null matrices: resizing + * a matrix to 0 is not supported. + * + * \sa resize(Index,Index) + */ + EIGEN_STRONG_INLINE explicit Array() : Base() + { + Base::_check_template_params(); + EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + +#ifndef EIGEN_PARSED_BY_DOXYGEN + // FIXME is it still needed ?? + /** \internal */ + Array(internal::constructor_without_unaligned_array_assert) + : Base(internal::constructor_without_unaligned_array_assert()) + { + Base::_check_template_params(); + EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } +#endif + + /** Constructs a vector or row-vector with given dimension. \only_for_vectors + * + * Note that this is only useful for dynamic-size vectors. For fixed-size vectors, + * it is redundant to pass the dimension here, so it makes more sense to use the default + * constructor Matrix() instead. + */ + EIGEN_STRONG_INLINE explicit Array(Index dim) + : Base(dim, RowsAtCompileTime == 1 ? 1 : dim, ColsAtCompileTime == 1 ? 1 : dim) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Array) + eigen_assert(dim >= 0); + eigen_assert(SizeAtCompileTime == Dynamic || SizeAtCompileTime == dim); + EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + template + EIGEN_STRONG_INLINE Array(const T0& x, const T1& y) + { + Base::_check_template_params(); + this->template _init2(x, y); + } + #else + /** constructs an uninitialized matrix with \a rows rows and \a cols columns. + * + * This is useful for dynamic-size matrices. For fixed-size matrices, + * it is redundant to pass these parameters, so one should use the default constructor + * Matrix() instead. */ + Array(Index rows, Index cols); + /** constructs an initialized 2D vector with given coefficients */ + Array(const Scalar& x, const Scalar& y); + #endif + + /** constructs an initialized 3D vector with given coefficients */ + EIGEN_STRONG_INLINE Array(const Scalar& x, const Scalar& y, const Scalar& z) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Array, 3) + m_storage.data()[0] = x; + m_storage.data()[1] = y; + m_storage.data()[2] = z; + } + /** constructs an initialized 4D vector with given coefficients */ + EIGEN_STRONG_INLINE Array(const Scalar& x, const Scalar& y, const Scalar& z, const Scalar& w) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Array, 4) + m_storage.data()[0] = x; + m_storage.data()[1] = y; + m_storage.data()[2] = z; + m_storage.data()[3] = w; + } + + explicit Array(const Scalar *data); + + /** Constructor copying the value of the expression \a other */ + template + EIGEN_STRONG_INLINE Array(const ArrayBase& other) + : Base(other.rows() * other.cols(), other.rows(), other.cols()) + { + Base::_check_template_params(); + Base::_set_noalias(other); + } + /** Copy constructor */ + EIGEN_STRONG_INLINE Array(const Array& other) + : Base(other.rows() * other.cols(), other.rows(), other.cols()) + { + Base::_check_template_params(); + Base::_set_noalias(other); + } + /** Copy constructor with in-place evaluation */ + template + EIGEN_STRONG_INLINE Array(const ReturnByValue& other) + { + Base::_check_template_params(); + Base::resize(other.rows(), other.cols()); + other.evalTo(*this); + } + + /** \sa MatrixBase::operator=(const EigenBase&) */ + template + EIGEN_STRONG_INLINE Array(const EigenBase &other) + : Base(other.derived().rows() * other.derived().cols(), other.derived().rows(), other.derived().cols()) + { + Base::_check_template_params(); + Base::resize(other.rows(), other.cols()); + *this = other; + } + + /** Override MatrixBase::swap() since for dynamic-sized matrices of same type it is enough to swap the + * data pointers. + */ + template + void swap(ArrayBase const & other) + { this->_swap(other.derived()); } + + inline Index innerStride() const { return 1; } + inline Index outerStride() const { return this->innerSize(); } + + #ifdef EIGEN_ARRAY_PLUGIN + #include EIGEN_ARRAY_PLUGIN + #endif + + private: + + template + friend struct internal::matrix_swap_impl; +}; + +/** \defgroup arraytypedefs Global array typedefs + * \ingroup Core_Module + * + * Eigen defines several typedef shortcuts for most common 1D and 2D array types. + * + * The general patterns are the following: + * + * \c ArrayRowsColsType where \c Rows and \c Cols can be \c 2,\c 3,\c 4 for fixed size square matrices or \c X for dynamic size, + * and where \c Type can be \c i for integer, \c f for float, \c d for double, \c cf for complex float, \c cd + * for complex double. + * + * For example, \c Array33d is a fixed-size 3x3 array type of doubles, and \c ArrayXXf is a dynamic-size matrix of floats. + * + * There are also \c ArraySizeType which are self-explanatory. For example, \c Array4cf is + * a fixed-size 1D array of 4 complex floats. + * + * \sa class Array + */ + +#define EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, Size, SizeSuffix) \ +/** \ingroup arraytypedefs */ \ +typedef Array Array##SizeSuffix##SizeSuffix##TypeSuffix; \ +/** \ingroup arraytypedefs */ \ +typedef Array Array##SizeSuffix##TypeSuffix; + +#define EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, Size) \ +/** \ingroup arraytypedefs */ \ +typedef Array Array##Size##X##TypeSuffix; \ +/** \ingroup arraytypedefs */ \ +typedef Array Array##X##Size##TypeSuffix; + +#define EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(Type, TypeSuffix) \ +EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, 2, 2) \ +EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, 3, 3) \ +EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, 4, 4) \ +EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, Dynamic, X) \ +EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, 2) \ +EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, 3) \ +EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, 4) + +EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(int, i) +EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(float, f) +EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(double, d) +EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(std::complex, cf) +EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(std::complex, cd) + +#undef EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES +#undef EIGEN_MAKE_ARRAY_TYPEDEFS + +#undef EIGEN_MAKE_ARRAY_TYPEDEFS_LARGE + +#define EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, SizeSuffix) \ +using Eigen::Matrix##SizeSuffix##TypeSuffix; \ +using Eigen::Vector##SizeSuffix##TypeSuffix; \ +using Eigen::RowVector##SizeSuffix##TypeSuffix; + +#define EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(TypeSuffix) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 2) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 3) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 4) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, X) \ + +#define EIGEN_USING_ARRAY_TYPEDEFS \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(i) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(f) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(d) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(cf) \ +EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(cd) + + +#endif // EIGEN_ARRAY_H diff --git a/asift_match/src/third_party/Eigen/src/Core/ArrayBase.h b/asift_match/src/third_party/Eigen/src/Core/ArrayBase.h new file mode 100755 index 0000000..9399ac3 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/ArrayBase.h @@ -0,0 +1,239 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_ARRAYBASE_H +#define EIGEN_ARRAYBASE_H + +template class MatrixWrapper; + +/** \class ArrayBase + * \ingroup Core_Module + * + * \brief Base class for all 1D and 2D array, and related expressions + * + * An array is similar to a dense vector or matrix. While matrices are mathematical + * objects with well defined linear algebra operators, an array is just a collection + * of scalar values arranged in a one or two dimensionnal fashion. As the main consequence, + * all operations applied to an array are performed coefficient wise. Furthermore, + * arrays support scalar math functions of the c++ standard library (e.g., std::sin(x)), and convenient + * constructors allowing to easily write generic code working for both scalar values + * and arrays. + * + * This class is the base that is inherited by all array expression types. + * + * \tparam Derived is the derived type, e.g., an array or an expression type. + * + * This class can be extended with the help of the plugin mechanism described on the page + * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_ARRAYBASE_PLUGIN. + * + * \sa class MatrixBase, \ref TopicClassHierarchy + */ +template class ArrayBase + : public DenseBase +{ + public: +#ifndef EIGEN_PARSED_BY_DOXYGEN + /** The base class for a given storage type. */ + typedef ArrayBase StorageBaseType; + + typedef ArrayBase Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl; + + using internal::special_scalar_op_base::Scalar, + typename NumTraits::Scalar>::Real>::operator*; + + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + typedef typename NumTraits::Real RealScalar; + + typedef DenseBase Base; + using Base::RowsAtCompileTime; + using Base::ColsAtCompileTime; + using Base::SizeAtCompileTime; + using Base::MaxRowsAtCompileTime; + using Base::MaxColsAtCompileTime; + using Base::MaxSizeAtCompileTime; + using Base::IsVectorAtCompileTime; + using Base::Flags; + using Base::CoeffReadCost; + + using Base::derived; + using Base::const_cast_derived; + using Base::rows; + using Base::cols; + using Base::size; + using Base::coeff; + using Base::coeffRef; + using Base::lazyAssign; + using Base::operator=; + using Base::operator+=; + using Base::operator-=; + using Base::operator*=; + using Base::operator/=; + + typedef typename Base::CoeffReturnType CoeffReturnType; + +#endif // not EIGEN_PARSED_BY_DOXYGEN + +#ifndef EIGEN_PARSED_BY_DOXYGEN + /** \internal the plain matrix type corresponding to this expression. Note that is not necessarily + * exactly the return type of eval(): in the case of plain matrices, the return type of eval() is a const + * reference to a matrix, not a matrix! It is however guaranteed that the return type of eval() is either + * PlainObject or const PlainObject&. + */ + typedef Array::Scalar, + internal::traits::RowsAtCompileTime, + internal::traits::ColsAtCompileTime, + AutoAlign | (internal::traits::Flags&RowMajorBit ? RowMajor : ColMajor), + internal::traits::MaxRowsAtCompileTime, + internal::traits::MaxColsAtCompileTime + > PlainObject; + + + /** \internal Represents a matrix with all coefficients equal to one another*/ + typedef CwiseNullaryOp,Derived> ConstantReturnType; +#endif // not EIGEN_PARSED_BY_DOXYGEN + +#define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::ArrayBase +# include "../plugins/CommonCwiseUnaryOps.h" +# include "../plugins/MatrixCwiseUnaryOps.h" +# include "../plugins/ArrayCwiseUnaryOps.h" +# include "../plugins/CommonCwiseBinaryOps.h" +# include "../plugins/MatrixCwiseBinaryOps.h" +# include "../plugins/ArrayCwiseBinaryOps.h" +# ifdef EIGEN_ARRAYBASE_PLUGIN +# include EIGEN_ARRAYBASE_PLUGIN +# endif +#undef EIGEN_CURRENT_STORAGE_BASE_CLASS + + /** Special case of the template operator=, in order to prevent the compiler + * from generating a default operator= (issue hit with g++ 4.1) + */ + Derived& operator=(const ArrayBase& other) + { + return internal::assign_selector::run(derived(), other.derived()); + } + + Derived& operator+=(const Scalar& scalar) + { return *this = derived() + scalar; } + Derived& operator-=(const Scalar& scalar) + { return *this = derived() - scalar; } + + template + Derived& operator+=(const ArrayBase& other); + template + Derived& operator-=(const ArrayBase& other); + + template + Derived& operator*=(const ArrayBase& other); + + template + Derived& operator/=(const ArrayBase& other); + + public: + ArrayBase& array() { return *this; } + const ArrayBase& array() const { return *this; } + + /** \returns an \link MatrixBase Matrix \endlink expression of this array + * \sa MatrixBase::array() */ + MatrixWrapper matrix() { return derived(); } + const MatrixWrapper matrix() const { return derived(); } + +// template +// inline void evalTo(Dest& dst) const { dst = matrix(); } + + protected: + ArrayBase() : Base() {} + + private: + explicit ArrayBase(Index); + ArrayBase(Index,Index); + template explicit ArrayBase(const ArrayBase&); + protected: + // mixing arrays and matrices is not legal + template Derived& operator+=(const MatrixBase& ) + {EIGEN_STATIC_ASSERT(sizeof(typename OtherDerived::Scalar)==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES);} + // mixing arrays and matrices is not legal + template Derived& operator-=(const MatrixBase& ) + {EIGEN_STATIC_ASSERT(sizeof(typename OtherDerived::Scalar)==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES);} +}; + +/** replaces \c *this by \c *this - \a other. + * + * \returns a reference to \c *this + */ +template +template +EIGEN_STRONG_INLINE Derived & +ArrayBase::operator-=(const ArrayBase &other) +{ + SelfCwiseBinaryOp, Derived, OtherDerived> tmp(derived()); + tmp = other.derived(); + return derived(); +} + +/** replaces \c *this by \c *this + \a other. + * + * \returns a reference to \c *this + */ +template +template +EIGEN_STRONG_INLINE Derived & +ArrayBase::operator+=(const ArrayBase& other) +{ + SelfCwiseBinaryOp, Derived, OtherDerived> tmp(derived()); + tmp = other.derived(); + return derived(); +} + +/** replaces \c *this by \c *this * \a other coefficient wise. + * + * \returns a reference to \c *this + */ +template +template +EIGEN_STRONG_INLINE Derived & +ArrayBase::operator*=(const ArrayBase& other) +{ + SelfCwiseBinaryOp, Derived, OtherDerived> tmp(derived()); + tmp = other.derived(); + return derived(); +} + +/** replaces \c *this by \c *this / \a other coefficient wise. + * + * \returns a reference to \c *this + */ +template +template +EIGEN_STRONG_INLINE Derived & +ArrayBase::operator/=(const ArrayBase& other) +{ + SelfCwiseBinaryOp, Derived, OtherDerived> tmp(derived()); + tmp = other.derived(); + return derived(); +} + +#endif // EIGEN_ARRAYBASE_H diff --git a/asift_match/src/third_party/Eigen/src/Core/ArrayWrapper.h b/asift_match/src/third_party/Eigen/src/Core/ArrayWrapper.h new file mode 100755 index 0000000..7ba01de --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/ArrayWrapper.h @@ -0,0 +1,221 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_ARRAYWRAPPER_H +#define EIGEN_ARRAYWRAPPER_H + +/** \class ArrayWrapper + * \ingroup Core_Module + * + * \brief Expression of a mathematical vector or matrix as an array object + * + * This class is the return type of MatrixBase::array(), and most of the time + * this is the only way it is use. + * + * \sa MatrixBase::array(), class MatrixWrapper + */ + +namespace internal { +template +struct traits > + : public traits::type > +{ + typedef ArrayXpr XprKind; +}; +} + +template +class ArrayWrapper : public ArrayBase > +{ + public: + typedef ArrayBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(ArrayWrapper) + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(ArrayWrapper) + + typedef typename internal::nested::type NestedExpressionType; + + inline ArrayWrapper(const ExpressionType& matrix) : m_expression(matrix) {} + + inline Index rows() const { return m_expression.rows(); } + inline Index cols() const { return m_expression.cols(); } + inline Index outerStride() const { return m_expression.outerStride(); } + inline Index innerStride() const { return m_expression.innerStride(); } + + inline const CoeffReturnType coeff(Index row, Index col) const + { + return m_expression.coeff(row, col); + } + + inline Scalar& coeffRef(Index row, Index col) + { + return m_expression.const_cast_derived().coeffRef(row, col); + } + + inline const Scalar& coeffRef(Index row, Index col) const + { + return m_expression.const_cast_derived().coeffRef(row, col); + } + + inline const CoeffReturnType coeff(Index index) const + { + return m_expression.coeff(index); + } + + inline Scalar& coeffRef(Index index) + { + return m_expression.const_cast_derived().coeffRef(index); + } + + inline const Scalar& coeffRef(Index index) const + { + return m_expression.const_cast_derived().coeffRef(index); + } + + template + inline const PacketScalar packet(Index row, Index col) const + { + return m_expression.template packet(row, col); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(row, col, x); + } + + template + inline const PacketScalar packet(Index index) const + { + return m_expression.template packet(index); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(index, x); + } + + template + inline void evalTo(Dest& dst) const { dst = m_expression; } + + protected: + const NestedExpressionType m_expression; +}; + +/** \class MatrixWrapper + * \ingroup Core_Module + * + * \brief Expression of an array as a mathematical vector or matrix + * + * This class is the return type of ArrayBase::matrix(), and most of the time + * this is the only way it is use. + * + * \sa MatrixBase::matrix(), class ArrayWrapper + */ + +namespace internal { +template +struct traits > + : public traits::type > +{ + typedef MatrixXpr XprKind; +}; +} + +template +class MatrixWrapper : public MatrixBase > +{ + public: + typedef MatrixBase > Base; + EIGEN_DENSE_PUBLIC_INTERFACE(MatrixWrapper) + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(MatrixWrapper) + + typedef typename internal::nested::type NestedExpressionType; + + inline MatrixWrapper(const ExpressionType& matrix) : m_expression(matrix) {} + + inline Index rows() const { return m_expression.rows(); } + inline Index cols() const { return m_expression.cols(); } + inline Index outerStride() const { return m_expression.outerStride(); } + inline Index innerStride() const { return m_expression.innerStride(); } + + inline const CoeffReturnType coeff(Index row, Index col) const + { + return m_expression.coeff(row, col); + } + + inline Scalar& coeffRef(Index row, Index col) + { + return m_expression.const_cast_derived().coeffRef(row, col); + } + + inline const Scalar& coeffRef(Index row, Index col) const + { + return m_expression.derived().coeffRef(row, col); + } + + inline const CoeffReturnType coeff(Index index) const + { + return m_expression.coeff(index); + } + + inline Scalar& coeffRef(Index index) + { + return m_expression.const_cast_derived().coeffRef(index); + } + + inline const Scalar& coeffRef(Index index) const + { + return m_expression.const_cast_derived().coeffRef(index); + } + + template + inline const PacketScalar packet(Index row, Index col) const + { + return m_expression.template packet(row, col); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(row, col, x); + } + + template + inline const PacketScalar packet(Index index) const + { + return m_expression.template packet(index); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(index, x); + } + + protected: + const NestedExpressionType m_expression; +}; + +#endif // EIGEN_ARRAYWRAPPER_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Assign.h b/asift_match/src/third_party/Eigen/src/Core/Assign.h new file mode 100755 index 0000000..3a17152 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Assign.h @@ -0,0 +1,593 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2007 Michael Olbrich +// Copyright (C) 2006-2010 Benoit Jacob +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_ASSIGN_H +#define EIGEN_ASSIGN_H + +namespace internal { + +/*************************************************************************** +* Part 1 : the logic deciding a strategy for traversal and unrolling * +***************************************************************************/ + +template +struct assign_traits +{ +public: + enum { + DstIsAligned = Derived::Flags & AlignedBit, + DstHasDirectAccess = Derived::Flags & DirectAccessBit, + SrcIsAligned = OtherDerived::Flags & AlignedBit, + JointAlignment = bool(DstIsAligned) && bool(SrcIsAligned) ? Aligned : Unaligned + }; + +private: + enum { + InnerSize = int(Derived::IsVectorAtCompileTime) ? int(Derived::SizeAtCompileTime) + : int(Derived::Flags)&RowMajorBit ? int(Derived::ColsAtCompileTime) + : int(Derived::RowsAtCompileTime), + InnerMaxSize = int(Derived::IsVectorAtCompileTime) ? int(Derived::MaxSizeAtCompileTime) + : int(Derived::Flags)&RowMajorBit ? int(Derived::MaxColsAtCompileTime) + : int(Derived::MaxRowsAtCompileTime), + MaxSizeAtCompileTime = Derived::SizeAtCompileTime, + PacketSize = packet_traits::size + }; + + enum { + StorageOrdersAgree = (int(Derived::IsRowMajor) == int(OtherDerived::IsRowMajor)), + MightVectorize = StorageOrdersAgree + && (int(Derived::Flags) & int(OtherDerived::Flags) & ActualPacketAccessBit), + MayInnerVectorize = MightVectorize && int(InnerSize)!=Dynamic && int(InnerSize)%int(PacketSize)==0 + && int(DstIsAligned) && int(SrcIsAligned), + MayLinearize = StorageOrdersAgree && (int(Derived::Flags) & int(OtherDerived::Flags) & LinearAccessBit), + MayLinearVectorize = MightVectorize && MayLinearize && DstHasDirectAccess + && (DstIsAligned || MaxSizeAtCompileTime == Dynamic), + /* If the destination isn't aligned, we have to do runtime checks and we don't unroll, + so it's only good for large enough sizes. */ + MaySliceVectorize = MightVectorize && DstHasDirectAccess + && (int(InnerMaxSize)==Dynamic || int(InnerMaxSize)>=3*PacketSize) + /* slice vectorization can be slow, so we only want it if the slices are big, which is + indicated by InnerMaxSize rather than InnerSize, think of the case of a dynamic block + in a fixed-size matrix */ + }; + +public: + enum { + Traversal = int(MayInnerVectorize) ? int(InnerVectorizedTraversal) + : int(MayLinearVectorize) ? int(LinearVectorizedTraversal) + : int(MaySliceVectorize) ? int(SliceVectorizedTraversal) + : int(MayLinearize) ? int(LinearTraversal) + : int(DefaultTraversal), + Vectorized = int(Traversal) == InnerVectorizedTraversal + || int(Traversal) == LinearVectorizedTraversal + || int(Traversal) == SliceVectorizedTraversal + }; + +private: + enum { + UnrollingLimit = EIGEN_UNROLLING_LIMIT * (Vectorized ? int(PacketSize) : 1), + MayUnrollCompletely = int(Derived::SizeAtCompileTime) != Dynamic + && int(OtherDerived::CoeffReadCost) != Dynamic + && int(Derived::SizeAtCompileTime) * int(OtherDerived::CoeffReadCost) <= int(UnrollingLimit), + MayUnrollInner = int(InnerSize) != Dynamic + && int(OtherDerived::CoeffReadCost) != Dynamic + && int(InnerSize) * int(OtherDerived::CoeffReadCost) <= int(UnrollingLimit) + }; + +public: + enum { + Unrolling = (int(Traversal) == int(InnerVectorizedTraversal) || int(Traversal) == int(DefaultTraversal)) + ? ( + int(MayUnrollCompletely) ? int(CompleteUnrolling) + : int(MayUnrollInner) ? int(InnerUnrolling) + : int(NoUnrolling) + ) + : int(Traversal) == int(LinearVectorizedTraversal) + ? ( bool(MayUnrollCompletely) && bool(DstIsAligned) ? int(CompleteUnrolling) : int(NoUnrolling) ) + : int(Traversal) == int(LinearTraversal) + ? ( bool(MayUnrollCompletely) ? int(CompleteUnrolling) : int(NoUnrolling) ) + : int(NoUnrolling) + }; + +#ifdef EIGEN_DEBUG_ASSIGN + static void debug() + { + EIGEN_DEBUG_VAR(DstIsAligned) + EIGEN_DEBUG_VAR(SrcIsAligned) + EIGEN_DEBUG_VAR(JointAlignment) + EIGEN_DEBUG_VAR(InnerSize) + EIGEN_DEBUG_VAR(InnerMaxSize) + EIGEN_DEBUG_VAR(PacketSize) + EIGEN_DEBUG_VAR(StorageOrdersAgree) + EIGEN_DEBUG_VAR(MightVectorize) + EIGEN_DEBUG_VAR(MayLinearize) + EIGEN_DEBUG_VAR(MayInnerVectorize) + EIGEN_DEBUG_VAR(MayLinearVectorize) + EIGEN_DEBUG_VAR(MaySliceVectorize) + EIGEN_DEBUG_VAR(Traversal) + EIGEN_DEBUG_VAR(UnrollingLimit) + EIGEN_DEBUG_VAR(MayUnrollCompletely) + EIGEN_DEBUG_VAR(MayUnrollInner) + EIGEN_DEBUG_VAR(Unrolling) + } +#endif +}; + +/*************************************************************************** +* Part 2 : meta-unrollers +***************************************************************************/ + +/************************ +*** Default traversal *** +************************/ + +template +struct assign_DefaultTraversal_CompleteUnrolling +{ + enum { + outer = Index / Derived1::InnerSizeAtCompileTime, + inner = Index % Derived1::InnerSizeAtCompileTime + }; + + EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src) + { + dst.copyCoeffByOuterInner(outer, inner, src); + assign_DefaultTraversal_CompleteUnrolling::run(dst, src); + } +}; + +template +struct assign_DefaultTraversal_CompleteUnrolling +{ + EIGEN_STRONG_INLINE static void run(Derived1 &, const Derived2 &) {} +}; + +template +struct assign_DefaultTraversal_InnerUnrolling +{ + EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src, int outer) + { + dst.copyCoeffByOuterInner(outer, Index, src); + assign_DefaultTraversal_InnerUnrolling::run(dst, src, outer); + } +}; + +template +struct assign_DefaultTraversal_InnerUnrolling +{ + EIGEN_STRONG_INLINE static void run(Derived1 &, const Derived2 &, int) {} +}; + +/*********************** +*** Linear traversal *** +***********************/ + +template +struct assign_LinearTraversal_CompleteUnrolling +{ + EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src) + { + dst.copyCoeff(Index, src); + assign_LinearTraversal_CompleteUnrolling::run(dst, src); + } +}; + +template +struct assign_LinearTraversal_CompleteUnrolling +{ + EIGEN_STRONG_INLINE static void run(Derived1 &, const Derived2 &) {} +}; + +/************************** +*** Inner vectorization *** +**************************/ + +template +struct assign_innervec_CompleteUnrolling +{ + enum { + outer = Index / Derived1::InnerSizeAtCompileTime, + inner = Index % Derived1::InnerSizeAtCompileTime, + JointAlignment = assign_traits::JointAlignment + }; + + EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src) + { + dst.template copyPacketByOuterInner(outer, inner, src); + assign_innervec_CompleteUnrolling::size, Stop>::run(dst, src); + } +}; + +template +struct assign_innervec_CompleteUnrolling +{ + EIGEN_STRONG_INLINE static void run(Derived1 &, const Derived2 &) {} +}; + +template +struct assign_innervec_InnerUnrolling +{ + EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src, int outer) + { + dst.template copyPacketByOuterInner(outer, Index, src); + assign_innervec_InnerUnrolling::size, Stop>::run(dst, src, outer); + } +}; + +template +struct assign_innervec_InnerUnrolling +{ + EIGEN_STRONG_INLINE static void run(Derived1 &, const Derived2 &, int) {} +}; + +/*************************************************************************** +* Part 3 : implementation of all cases +***************************************************************************/ + +template::Traversal, + int Unrolling = assign_traits::Unrolling> +struct assign_impl; + +/************************ +*** Default traversal *** +************************/ + +template +struct assign_impl +{ + inline static void run(Derived1 &, const Derived2 &) { } +}; + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + inline static void run(Derived1 &dst, const Derived2 &src) + { + const Index innerSize = dst.innerSize(); + const Index outerSize = dst.outerSize(); + for(Index outer = 0; outer < outerSize; ++outer) + for(Index inner = 0; inner < innerSize; ++inner) + dst.copyCoeffByOuterInner(outer, inner, src); + } +}; + +template +struct assign_impl +{ + EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src) + { + assign_DefaultTraversal_CompleteUnrolling + ::run(dst, src); + } +}; + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src) + { + const Index outerSize = dst.outerSize(); + for(Index outer = 0; outer < outerSize; ++outer) + assign_DefaultTraversal_InnerUnrolling + ::run(dst, src, outer); + } +}; + +/*********************** +*** Linear traversal *** +***********************/ + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + inline static void run(Derived1 &dst, const Derived2 &src) + { + const Index size = dst.size(); + for(Index i = 0; i < size; ++i) + dst.copyCoeff(i, src); + } +}; + +template +struct assign_impl +{ + EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src) + { + assign_LinearTraversal_CompleteUnrolling + ::run(dst, src); + } +}; + +/************************** +*** Inner vectorization *** +**************************/ + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + inline static void run(Derived1 &dst, const Derived2 &src) + { + const Index innerSize = dst.innerSize(); + const Index outerSize = dst.outerSize(); + const Index packetSize = packet_traits::size; + for(Index outer = 0; outer < outerSize; ++outer) + for(Index inner = 0; inner < innerSize; inner+=packetSize) + dst.template copyPacketByOuterInner(outer, inner, src); + } +}; + +template +struct assign_impl +{ + EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src) + { + assign_innervec_CompleteUnrolling + ::run(dst, src); + } +}; + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src) + { + const Index outerSize = dst.outerSize(); + for(Index outer = 0; outer < outerSize; ++outer) + assign_innervec_InnerUnrolling + ::run(dst, src, outer); + } +}; + +/*************************** +*** Linear vectorization *** +***************************/ + +template +struct unaligned_assign_impl +{ + template + static EIGEN_STRONG_INLINE void run(const Derived&, OtherDerived&, typename Derived::Index, typename Derived::Index) {} +}; + +template <> +struct unaligned_assign_impl +{ + // MSVC must not inline this functions. If it does, it fails to optimize the + // packet access path. +#ifdef _MSC_VER + template + static EIGEN_DONT_INLINE void run(const Derived& src, OtherDerived& dst, typename Derived::Index start, typename Derived::Index end) +#else + template + static EIGEN_STRONG_INLINE void run(const Derived& src, OtherDerived& dst, typename Derived::Index start, typename Derived::Index end) +#endif + { + for (typename Derived::Index index = start; index < end; ++index) + dst.copyCoeff(index, src); + } +}; + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src) + { + const Index size = dst.size(); + typedef packet_traits PacketTraits; + enum { + packetSize = PacketTraits::size, + dstAlignment = PacketTraits::AlignedOnScalar ? Aligned : int(assign_traits::DstIsAligned) , + srcAlignment = assign_traits::JointAlignment + }; + const Index alignedStart = assign_traits::DstIsAligned ? 0 + : first_aligned(&dst.coeffRef(0), size); + const Index alignedEnd = alignedStart + ((size-alignedStart)/packetSize)*packetSize; + + unaligned_assign_impl::DstIsAligned!=0>::run(src,dst,0,alignedStart); + + for(Index index = alignedStart; index < alignedEnd; index += packetSize) + { + dst.template copyPacket(index, src); + } + + unaligned_assign_impl<>::run(src,dst,alignedEnd,size); + } +}; + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + EIGEN_STRONG_INLINE static void run(Derived1 &dst, const Derived2 &src) + { + enum { size = Derived1::SizeAtCompileTime, + packetSize = packet_traits::size, + alignedSize = (size/packetSize)*packetSize }; + + assign_innervec_CompleteUnrolling::run(dst, src); + assign_DefaultTraversal_CompleteUnrolling::run(dst, src); + } +}; + +/************************** +*** Slice vectorization *** +***************************/ + +template +struct assign_impl +{ + typedef typename Derived1::Index Index; + inline static void run(Derived1 &dst, const Derived2 &src) + { + typedef packet_traits PacketTraits; + enum { + packetSize = PacketTraits::size, + alignable = PacketTraits::AlignedOnScalar, + dstAlignment = alignable ? Aligned : int(assign_traits::DstIsAligned) , + srcAlignment = assign_traits::JointAlignment + }; + const Index packetAlignedMask = packetSize - 1; + const Index innerSize = dst.innerSize(); + const Index outerSize = dst.outerSize(); + const Index alignedStep = alignable ? (packetSize - dst.outerStride() % packetSize) & packetAlignedMask : 0; + Index alignedStart = ((!alignable) || assign_traits::DstIsAligned) ? 0 + : first_aligned(&dst.coeffRef(0,0), innerSize); + + for(Index outer = 0; outer < outerSize; ++outer) + { + const Index alignedEnd = alignedStart + ((innerSize-alignedStart) & ~packetAlignedMask); + // do the non-vectorizable part of the assignment + for(Index inner = 0; inner(outer, inner, src); + + // do the non-vectorizable part of the assignment + for(Index inner = alignedEnd; inner((alignedStart+alignedStep)%packetSize, innerSize); + } + } +}; + +} // end namespace internal + +/*************************************************************************** +* Part 4 : implementation of DenseBase methods +***************************************************************************/ + +template +template +EIGEN_STRONG_INLINE Derived& DenseBase + ::lazyAssign(const DenseBase& other) +{ + enum{ + SameType = internal::is_same::value + }; + + EIGEN_STATIC_ASSERT_LVALUE(Derived) + EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Derived,OtherDerived) + EIGEN_STATIC_ASSERT(SameType,YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + +#ifdef EIGEN_DEBUG_ASSIGN + internal::assign_traits::debug(); +#endif + eigen_assert(rows() == other.rows() && cols() == other.cols()); + internal::assign_impl::Traversal) + : int(InvalidTraversal)>::run(derived(),other.derived()); +#ifndef EIGEN_NO_DEBUG + checkTransposeAliasing(other.derived()); +#endif + return derived(); +} + +namespace internal { + +template +struct assign_selector; + +template +struct assign_selector { + EIGEN_STRONG_INLINE static Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.derived()); } +}; +template +struct assign_selector { + EIGEN_STRONG_INLINE static Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.eval()); } +}; +template +struct assign_selector { + EIGEN_STRONG_INLINE static Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.transpose()); } +}; +template +struct assign_selector { + EIGEN_STRONG_INLINE static Derived& run(Derived& dst, const OtherDerived& other) { return dst.lazyAssign(other.transpose().eval()); } +}; + +} // end namespace internal + +template +template +EIGEN_STRONG_INLINE Derived& DenseBase::operator=(const DenseBase& other) +{ + return internal::assign_selector::run(derived(), other.derived()); +} + +template +EIGEN_STRONG_INLINE Derived& DenseBase::operator=(const DenseBase& other) +{ + return internal::assign_selector::run(derived(), other.derived()); +} + +template +EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const MatrixBase& other) +{ + return internal::assign_selector::run(derived(), other.derived()); +} + +template +template +EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const DenseBase& other) +{ + return internal::assign_selector::run(derived(), other.derived()); +} + +template +template +EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const EigenBase& other) +{ + other.derived().evalTo(derived()); + return derived(); +} + +template +template +EIGEN_STRONG_INLINE Derived& MatrixBase::operator=(const ReturnByValue& other) +{ + other.evalTo(derived()); + return derived(); +} + +#endif // EIGEN_ASSIGN_H diff --git a/asift_match/src/third_party/Eigen/src/Core/BandMatrix.h b/asift_match/src/third_party/Eigen/src/Core/BandMatrix.h new file mode 100755 index 0000000..a1f71d5 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/BandMatrix.h @@ -0,0 +1,345 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_BANDMATRIX_H +#define EIGEN_BANDMATRIX_H + +namespace internal { + + +template +class BandMatrixBase : public EigenBase +{ + public: + + enum { + Flags = internal::traits::Flags, + CoeffReadCost = internal::traits::CoeffReadCost, + RowsAtCompileTime = internal::traits::RowsAtCompileTime, + ColsAtCompileTime = internal::traits::ColsAtCompileTime, + MaxRowsAtCompileTime = internal::traits::MaxRowsAtCompileTime, + MaxColsAtCompileTime = internal::traits::MaxColsAtCompileTime, + Supers = internal::traits::Supers, + Subs = internal::traits::Subs, + Options = internal::traits::Options + }; + typedef typename internal::traits::Scalar Scalar; + typedef Matrix DenseMatrixType; + typedef typename DenseMatrixType::Index Index; + typedef typename internal::traits::CoefficientsType CoefficientsType; + typedef EigenBase Base; + + protected: + enum { + DataRowsAtCompileTime = ((Supers!=Dynamic) && (Subs!=Dynamic)) + ? 1 + Supers + Subs + : Dynamic, + SizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_DYNAMIC(RowsAtCompileTime,ColsAtCompileTime) + }; + + public: + + using Base::derived; + using Base::rows; + using Base::cols; + + /** \returns the number of super diagonals */ + inline Index supers() const { return derived().supers(); } + + /** \returns the number of sub diagonals */ + inline Index subs() const { return derived().subs(); } + + /** \returns an expression of the underlying coefficient matrix */ + inline const CoefficientsType& coeffs() const { return derived().coeffs(); } + + /** \returns an expression of the underlying coefficient matrix */ + inline CoefficientsType& coeffs() { return derived().coeffs(); } + + /** \returns a vector expression of the \a i -th column, + * only the meaningful part is returned. + * \warning the internal storage must be column major. */ + inline Block col(Index i) + { + EIGEN_STATIC_ASSERT((Options&RowMajor)==0,THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES); + Index start = 0; + Index len = coeffs().rows(); + if (i<=supers()) + { + start = supers()-i; + len = std::min(rows(),std::max(0,coeffs().rows() - (supers()-i))); + } + else if (i>=rows()-subs()) + len = std::max(0,coeffs().rows() - (i + 1 - rows() + subs())); + return Block(coeffs(), start, i, len, 1); + } + + /** \returns a vector expression of the main diagonal */ + inline Block diagonal() + { return Block(coeffs(),supers(),0,1,std::min(rows(),cols())); } + + /** \returns a vector expression of the main diagonal (const version) */ + inline const Block diagonal() const + { return Block(coeffs(),supers(),0,1,std::min(rows(),cols())); } + + template struct DiagonalIntReturnType { + enum { + ReturnOpposite = (Options&SelfAdjoint) && (((Index)>0 && Supers==0) || ((Index)<0 && Subs==0)), + Conjugate = ReturnOpposite && NumTraits::IsComplex, + ActualIndex = ReturnOpposite ? -Index : Index, + DiagonalSize = (RowsAtCompileTime==Dynamic || ColsAtCompileTime==Dynamic) + ? Dynamic + : (ActualIndex<0 + ? EIGEN_SIZE_MIN_PREFER_DYNAMIC(ColsAtCompileTime, RowsAtCompileTime + ActualIndex) + : EIGEN_SIZE_MIN_PREFER_DYNAMIC(RowsAtCompileTime, ColsAtCompileTime - ActualIndex)) + }; + typedef Block BuildType; + typedef typename internal::conditional,BuildType >, + BuildType>::type Type; + }; + + /** \returns a vector expression of the \a N -th sub or super diagonal */ + template inline typename DiagonalIntReturnType::Type diagonal() + { + return typename DiagonalIntReturnType::BuildType(coeffs(), supers()-N, std::max(0,N), 1, diagonalLength(N)); + } + + /** \returns a vector expression of the \a N -th sub or super diagonal */ + template inline const typename DiagonalIntReturnType::Type diagonal() const + { + return typename DiagonalIntReturnType::BuildType(coeffs(), supers()-N, std::max(0,N), 1, diagonalLength(N)); + } + + /** \returns a vector expression of the \a i -th sub or super diagonal */ + inline Block diagonal(Index i) + { + eigen_assert((i<0 && -i<=subs()) || (i>=0 && i<=supers())); + return Block(coeffs(), supers()-i, std::max(0,i), 1, diagonalLength(i)); + } + + /** \returns a vector expression of the \a i -th sub or super diagonal */ + inline const Block diagonal(Index i) const + { + eigen_assert((i<0 && -i<=subs()) || (i>=0 && i<=supers())); + return Block(coeffs(), supers()-i, std::max(0,i), 1, diagonalLength(i)); + } + + template inline void evalTo(Dest& dst) const + { + dst.resize(rows(),cols()); + dst.setZero(); + dst.diagonal() = diagonal(); + for (Index i=1; i<=supers();++i) + dst.diagonal(i) = diagonal(i); + for (Index i=1; i<=subs();++i) + dst.diagonal(-i) = diagonal(-i); + } + + DenseMatrixType toDenseMatrix() const + { + DenseMatrixType res(rows(),cols()); + evalTo(res); + return res; + } + + protected: + + inline Index diagonalLength(Index i) const + { return i<0 ? std::min(cols(),rows()+i) : std::min(rows(),cols()-i); } +}; + +/** + * \class BandMatrix + * \ingroup Core_Module + * + * \brief Represents a rectangular matrix with a banded storage + * + * \param _Scalar Numeric type, i.e. float, double, int + * \param Rows Number of rows, or \b Dynamic + * \param Cols Number of columns, or \b Dynamic + * \param Supers Number of super diagonal + * \param Subs Number of sub diagonal + * \param _Options A combination of either \b RowMajor or \b ColMajor, and of \b SelfAdjoint + * The former controls \ref TopicStorageOrders "storage order", and defaults to + * column-major. The latter controls whether the matrix represents a selfadjoint + * matrix in which case either Supers of Subs have to be null. + * + * \sa class TridiagonalMatrix + */ + +template +struct traits > +{ + typedef _Scalar Scalar; + typedef Dense StorageKind; + typedef DenseIndex Index; + enum { + CoeffReadCost = NumTraits::ReadCost, + RowsAtCompileTime = _Rows, + ColsAtCompileTime = _Cols, + MaxRowsAtCompileTime = _Rows, + MaxColsAtCompileTime = _Cols, + Flags = LvalueBit, + Supers = _Supers, + Subs = _Subs, + Options = _Options, + DataRowsAtCompileTime = ((Supers!=Dynamic) && (Subs!=Dynamic)) ? 1 + Supers + Subs : Dynamic + }; + typedef Matrix CoefficientsType; +}; + +template +class BandMatrix : public BandMatrixBase > +{ + public: + + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::CoefficientsType CoefficientsType; + + inline BandMatrix(Index rows=Rows, Index cols=Cols, Index supers=Supers, Index subs=Subs) + : m_coeffs(1+supers+subs,cols), + m_rows(rows), m_supers(supers), m_subs(subs) + { + } + + /** \returns the number of columns */ + inline Index rows() const { return m_rows.value(); } + + /** \returns the number of rows */ + inline Index cols() const { return m_coeffs.cols(); } + + /** \returns the number of super diagonals */ + inline Index supers() const { return m_supers.value(); } + + /** \returns the number of sub diagonals */ + inline Index subs() const { return m_subs.value(); } + + inline const CoefficientsType& coeffs() const { return m_coeffs; } + inline CoefficientsType& coeffs() { return m_coeffs; } + + protected: + + CoefficientsType m_coeffs; + internal::variable_if_dynamic m_rows; + internal::variable_if_dynamic m_supers; + internal::variable_if_dynamic m_subs; +}; + +template +class BandMatrixWrapper; + +template +struct traits > +{ + typedef typename _CoefficientsType::Scalar Scalar; + typedef typename _CoefficientsType::StorageKind StorageKind; + typedef typename _CoefficientsType::Index Index; + enum { + CoeffReadCost = internal::traits<_CoefficientsType>::CoeffReadCost, + RowsAtCompileTime = _Rows, + ColsAtCompileTime = _Cols, + MaxRowsAtCompileTime = _Rows, + MaxColsAtCompileTime = _Cols, + Flags = LvalueBit, + Supers = _Supers, + Subs = _Subs, + Options = _Options, + DataRowsAtCompileTime = ((Supers!=Dynamic) && (Subs!=Dynamic)) ? 1 + Supers + Subs : Dynamic + }; + typedef _CoefficientsType CoefficientsType; +}; + +template +class BandMatrixWrapper : public BandMatrixBase > +{ + public: + + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::traits::CoefficientsType CoefficientsType; + typedef typename internal::traits::Index Index; + + inline BandMatrixWrapper(const CoefficientsType& coeffs, Index rows=_Rows, Index cols=_Cols, Index supers=_Supers, Index subs=_Subs) + : m_coeffs(coeffs), + m_rows(rows), m_supers(supers), m_subs(subs) + { + //internal::assert(coeffs.cols()==cols() && (supers()+subs()+1)==coeffs.rows()); + } + + /** \returns the number of columns */ + inline Index rows() const { return m_rows.value(); } + + /** \returns the number of rows */ + inline Index cols() const { return m_coeffs.cols(); } + + /** \returns the number of super diagonals */ + inline Index supers() const { return m_supers.value(); } + + /** \returns the number of sub diagonals */ + inline Index subs() const { return m_subs.value(); } + + inline const CoefficientsType& coeffs() const { return m_coeffs; } + + protected: + + const CoefficientsType& m_coeffs; + internal::variable_if_dynamic m_rows; + internal::variable_if_dynamic m_supers; + internal::variable_if_dynamic m_subs; +}; + +/** + * \class TridiagonalMatrix + * \ingroup Core_Module + * + * \brief Represents a tridiagonal matrix with a compact banded storage + * + * \param _Scalar Numeric type, i.e. float, double, int + * \param Size Number of rows and cols, or \b Dynamic + * \param _Options Can be 0 or \b SelfAdjoint + * + * \sa class BandMatrix + */ +template +class TridiagonalMatrix : public BandMatrix +{ + typedef BandMatrix Base; + typedef typename Base::Index Index; + public: + TridiagonalMatrix(Index size = Size) : Base(size,size,Options&SelfAdjoint?0:1,1) {} + + inline typename Base::template DiagonalIntReturnType<1>::Type super() + { return Base::template diagonal<1>(); } + inline const typename Base::template DiagonalIntReturnType<1>::Type super() const + { return Base::template diagonal<1>(); } + inline typename Base::template DiagonalIntReturnType<-1>::Type sub() + { return Base::template diagonal<-1>(); } + inline const typename Base::template DiagonalIntReturnType<-1>::Type sub() const + { return Base::template diagonal<-1>(); } + protected: +}; + +} // end namespace internal + +#endif // EIGEN_BANDMATRIX_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Block.h b/asift_match/src/third_party/Eigen/src/Core/Block.h new file mode 100755 index 0000000..2b251bc --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Block.h @@ -0,0 +1,349 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2006-2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_BLOCK_H +#define EIGEN_BLOCK_H + +/** \class Block + * \ingroup Core_Module + * + * \brief Expression of a fixed-size or dynamic-size block + * + * \param XprType the type of the expression in which we are taking a block + * \param BlockRows the number of rows of the block we are taking at compile time (optional) + * \param BlockCols the number of columns of the block we are taking at compile time (optional) + * \param _DirectAccessStatus \internal used for partial specialization + * + * This class represents an expression of either a fixed-size or dynamic-size block. It is the return + * type of DenseBase::block(Index,Index,Index,Index) and DenseBase::block(Index,Index) and + * most of the time this is the only way it is used. + * + * However, if you want to directly maniputate block expressions, + * for instance if you want to write a function returning such an expression, you + * will need to use this class. + * + * Here is an example illustrating the dynamic case: + * \include class_Block.cpp + * Output: \verbinclude class_Block.out + * + * \note Even though this expression has dynamic size, in the case where \a XprType + * has fixed size, this expression inherits a fixed maximal size which means that evaluating + * it does not cause a dynamic memory allocation. + * + * Here is an example illustrating the fixed-size case: + * \include class_FixedBlock.cpp + * Output: \verbinclude class_FixedBlock.out + * + * \sa DenseBase::block(Index,Index,Index,Index), DenseBase::block(Index,Index), class VectorBlock + */ + +namespace internal { +template +struct traits > : traits +{ + typedef typename traits::Scalar Scalar; + typedef typename traits::StorageKind StorageKind; + typedef typename traits::XprKind XprKind; + typedef typename nested::type XprTypeNested; + typedef typename remove_reference::type _XprTypeNested; + enum{ + MatrixRows = traits::RowsAtCompileTime, + MatrixCols = traits::ColsAtCompileTime, + RowsAtCompileTime = MatrixRows == 0 ? 0 : BlockRows, + ColsAtCompileTime = MatrixCols == 0 ? 0 : BlockCols, + MaxRowsAtCompileTime = BlockRows==0 ? 0 + : RowsAtCompileTime != Dynamic ? int(RowsAtCompileTime) + : int(traits::MaxRowsAtCompileTime), + MaxColsAtCompileTime = BlockCols==0 ? 0 + : ColsAtCompileTime != Dynamic ? int(ColsAtCompileTime) + : int(traits::MaxColsAtCompileTime), + XprTypeIsRowMajor = (int(traits::Flags)&RowMajorBit) != 0, + IsRowMajor = (MaxRowsAtCompileTime==1&&MaxColsAtCompileTime!=1) ? 1 + : (MaxColsAtCompileTime==1&&MaxRowsAtCompileTime!=1) ? 0 + : XprTypeIsRowMajor, + HasSameStorageOrderAsXprType = (IsRowMajor == XprTypeIsRowMajor), + InnerSize = IsRowMajor ? int(ColsAtCompileTime) : int(RowsAtCompileTime), + InnerStrideAtCompileTime = HasSameStorageOrderAsXprType + ? int(inner_stride_at_compile_time::ret) + : int(outer_stride_at_compile_time::ret), + OuterStrideAtCompileTime = HasSameStorageOrderAsXprType + ? int(outer_stride_at_compile_time::ret) + : int(inner_stride_at_compile_time::ret), + MaskPacketAccessBit = (InnerSize == Dynamic || (InnerSize % packet_traits::size) == 0) + && (InnerStrideAtCompileTime == 1) + ? PacketAccessBit : 0, + MaskAlignedBit = (InnerPanel && (OuterStrideAtCompileTime!=Dynamic) && ((OuterStrideAtCompileTime % packet_traits::size) == 0)) ? AlignedBit : 0, + FlagsLinearAccessBit = (RowsAtCompileTime == 1 || ColsAtCompileTime == 1) ? LinearAccessBit : 0, + FlagsLvalueBit = is_lvalue::value ? LvalueBit : 0, + FlagsRowMajorBit = IsRowMajor ? RowMajorBit : 0, + Flags0 = traits::Flags & ( (HereditaryBits & ~RowMajorBit) | + DirectAccessBit | + MaskPacketAccessBit | + MaskAlignedBit), + Flags = Flags0 | FlagsLinearAccessBit | FlagsLvalueBit | FlagsRowMajorBit + }; +}; +} + +template class Block + : public internal::dense_xpr_base >::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Block) + + class InnerIterator; + + /** Column or Row constructor + */ + inline Block(XprType& xpr, Index i) + : m_xpr(xpr), + // It is a row if and only if BlockRows==1 and BlockCols==XprType::ColsAtCompileTime, + // and it is a column if and only if BlockRows==XprType::RowsAtCompileTime and BlockCols==1, + // all other cases are invalid. + // The case a 1x1 matrix seems ambiguous, but the result is the same anyway. + m_startRow( (BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) ? i : 0), + m_startCol( (BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) ? i : 0), + m_blockRows(BlockRows==1 ? 1 : xpr.rows()), + m_blockCols(BlockCols==1 ? 1 : xpr.cols()) + { + eigen_assert( (i>=0) && ( + ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && i= 0 && BlockRows >= 1 && startRow + BlockRows <= xpr.rows() + && startCol >= 0 && BlockCols >= 1 && startCol + BlockCols <= xpr.cols()); + } + + /** Dynamic-size constructor + */ + inline Block(XprType& xpr, + Index startRow, Index startCol, + Index blockRows, Index blockCols) + : m_xpr(xpr), m_startRow(startRow), m_startCol(startCol), + m_blockRows(blockRows), m_blockCols(blockCols) + { + eigen_assert((RowsAtCompileTime==Dynamic || RowsAtCompileTime==blockRows) + && (ColsAtCompileTime==Dynamic || ColsAtCompileTime==blockCols)); + eigen_assert(startRow >= 0 && blockRows >= 0 && startRow + blockRows <= xpr.rows() + && startCol >= 0 && blockCols >= 0 && startCol + blockCols <= xpr.cols()); + } + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block) + + inline Index rows() const { return m_blockRows.value(); } + inline Index cols() const { return m_blockCols.value(); } + + inline Scalar& coeffRef(Index row, Index col) + { + EIGEN_STATIC_ASSERT_LVALUE(XprType) + return m_xpr.const_cast_derived() + .coeffRef(row + m_startRow.value(), col + m_startCol.value()); + } + + inline const Scalar& coeffRef(Index row, Index col) const + { + return m_xpr.derived() + .coeffRef(row + m_startRow.value(), col + m_startCol.value()); + } + + EIGEN_STRONG_INLINE const CoeffReturnType coeff(Index row, Index col) const + { + return m_xpr.coeff(row + m_startRow.value(), col + m_startCol.value()); + } + + inline Scalar& coeffRef(Index index) + { + EIGEN_STATIC_ASSERT_LVALUE(XprType) + return m_xpr.const_cast_derived() + .coeffRef(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index), + m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0)); + } + + inline const Scalar& coeffRef(Index index) const + { + return m_xpr.const_cast_derived() + .coeffRef(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index), + m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0)); + } + + inline const CoeffReturnType coeff(Index index) const + { + return m_xpr + .coeff(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index), + m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0)); + } + + template + inline PacketScalar packet(Index row, Index col) const + { + return m_xpr.template packet + (row + m_startRow.value(), col + m_startCol.value()); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_xpr.const_cast_derived().template writePacket + (row + m_startRow.value(), col + m_startCol.value(), x); + } + + template + inline PacketScalar packet(Index index) const + { + return m_xpr.template packet + (m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index), + m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0)); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_xpr.const_cast_derived().template writePacket + (m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index), + m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0), x); + } + + #ifdef EIGEN_PARSED_BY_DOXYGEN + /** \sa MapBase::data() */ + inline const Scalar* data() const; + inline Index innerStride() const; + inline Index outerStride() const; + #endif + + protected: + + const typename XprType::Nested m_xpr; + const internal::variable_if_dynamic m_startRow; + const internal::variable_if_dynamic m_startCol; + const internal::variable_if_dynamic m_blockRows; + const internal::variable_if_dynamic m_blockCols; +}; + +/** \internal */ +template +class Block + : public MapBase > +{ + public: + + typedef MapBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Block) + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block) + + /** Column or Row constructor + */ + inline Block(XprType& xpr, Index i) + : Base(internal::const_cast_ptr(&xpr.coeffRef( + (BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) ? i : 0, + (BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) ? i : 0)), + BlockRows==1 ? 1 : xpr.rows(), + BlockCols==1 ? 1 : xpr.cols()), + m_xpr(xpr) + { + eigen_assert( (i>=0) && ( + ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && i= 0 && BlockRows >= 1 && startRow + BlockRows <= xpr.rows() + && startCol >= 0 && BlockCols >= 1 && startCol + BlockCols <= xpr.cols()); + init(); + } + + /** Dynamic-size constructor + */ + inline Block(XprType& xpr, + Index startRow, Index startCol, + Index blockRows, Index blockCols) + : Base(internal::const_cast_ptr(&xpr.coeffRef(startRow,startCol)), blockRows, blockCols), + m_xpr(xpr) + { + eigen_assert((RowsAtCompileTime==Dynamic || RowsAtCompileTime==blockRows) + && (ColsAtCompileTime==Dynamic || ColsAtCompileTime==blockCols)); + eigen_assert(startRow >= 0 && blockRows >= 0 && startRow + blockRows <= xpr.rows() + && startCol >= 0 && blockCols >= 0 && startCol + blockCols <= xpr.cols()); + init(); + } + + /** \sa MapBase::innerStride() */ + inline Index innerStride() const + { + return internal::traits::HasSameStorageOrderAsXprType + ? m_xpr.innerStride() + : m_xpr.outerStride(); + } + + /** \sa MapBase::outerStride() */ + inline Index outerStride() const + { + return m_outerStride; + } + + #ifndef __SUNPRO_CC + // FIXME sunstudio is not friendly with the above friend... + // META-FIXME there is no 'friend' keyword around here. Is this obsolete? + protected: + #endif + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** \internal used by allowAligned() */ + inline Block(XprType& xpr, const Scalar* data, Index blockRows, Index blockCols) + : Base(data, blockRows, blockCols), m_xpr(xpr) + { + init(); + } + #endif + + protected: + void init() + { + m_outerStride = internal::traits::HasSameStorageOrderAsXprType + ? m_xpr.outerStride() + : m_xpr.innerStride(); + } + + const typename XprType::Nested m_xpr; + int m_outerStride; +}; + + +#endif // EIGEN_BLOCK_H diff --git a/asift_match/src/third_party/Eigen/src/Core/BooleanRedux.h b/asift_match/src/third_party/Eigen/src/Core/BooleanRedux.h new file mode 100755 index 0000000..5c3444a --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/BooleanRedux.h @@ -0,0 +1,149 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_ALLANDANY_H +#define EIGEN_ALLANDANY_H + +namespace internal { + +template +struct all_unroller +{ + enum { + col = (UnrollCount-1) / Derived::RowsAtCompileTime, + row = (UnrollCount-1) % Derived::RowsAtCompileTime + }; + + inline static bool run(const Derived &mat) + { + return all_unroller::run(mat) && mat.coeff(row, col); + } +}; + +template +struct all_unroller +{ + inline static bool run(const Derived &mat) { return mat.coeff(0, 0); } +}; + +template +struct all_unroller +{ + inline static bool run(const Derived &) { return false; } +}; + +template +struct any_unroller +{ + enum { + col = (UnrollCount-1) / Derived::RowsAtCompileTime, + row = (UnrollCount-1) % Derived::RowsAtCompileTime + }; + + inline static bool run(const Derived &mat) + { + return any_unroller::run(mat) || mat.coeff(row, col); + } +}; + +template +struct any_unroller +{ + inline static bool run(const Derived &mat) { return mat.coeff(0, 0); } +}; + +template +struct any_unroller +{ + inline static bool run(const Derived &) { return false; } +}; + +} // end namespace internal + +/** \returns true if all coefficients are true + * + * Example: \include MatrixBase_all.cpp + * Output: \verbinclude MatrixBase_all.out + * + * \sa any(), Cwise::operator<() + */ +template +inline bool DenseBase::all() const +{ + enum { + unroll = SizeAtCompileTime != Dynamic + && CoeffReadCost != Dynamic + && NumTraits::AddCost != Dynamic + && SizeAtCompileTime * (CoeffReadCost + NumTraits::AddCost) <= EIGEN_UNROLLING_LIMIT + }; + if(unroll) + return internal::all_unroller::run(derived()); + else + { + for(Index j = 0; j < cols(); ++j) + for(Index i = 0; i < rows(); ++i) + if (!coeff(i, j)) return false; + return true; + } +} + +/** \returns true if at least one coefficient is true + * + * \sa all() + */ +template +inline bool DenseBase::any() const +{ + enum { + unroll = SizeAtCompileTime != Dynamic + && CoeffReadCost != Dynamic + && NumTraits::AddCost != Dynamic + && SizeAtCompileTime * (CoeffReadCost + NumTraits::AddCost) <= EIGEN_UNROLLING_LIMIT + }; + if(unroll) + return internal::any_unroller::run(derived()); + else + { + for(Index j = 0; j < cols(); ++j) + for(Index i = 0; i < rows(); ++i) + if (coeff(i, j)) return true; + return false; + } +} + +/** \returns the number of coefficients which evaluate to true + * + * \sa all(), any() + */ +template +inline typename DenseBase::Index DenseBase::count() const +{ + return derived().template cast().template cast().sum(); +} + +#endif // EIGEN_ALLANDANY_H diff --git a/asift_match/src/third_party/Eigen/src/Core/CMakeLists.txt b/asift_match/src/third_party/Eigen/src/Core/CMakeLists.txt new file mode 100755 index 0000000..2346fc2 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/CMakeLists.txt @@ -0,0 +1,10 @@ +FILE(GLOB Eigen_Core_SRCS "*.h") + +INSTALL(FILES + ${Eigen_Core_SRCS} + DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen/src/Core COMPONENT Devel + ) + +ADD_SUBDIRECTORY(products) +ADD_SUBDIRECTORY(util) +ADD_SUBDIRECTORY(arch) diff --git a/asift_match/src/third_party/Eigen/src/Core/CommaInitializer.h b/asift_match/src/third_party/Eigen/src/Core/CommaInitializer.h new file mode 100755 index 0000000..92422bf --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/CommaInitializer.h @@ -0,0 +1,150 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_COMMAINITIALIZER_H +#define EIGEN_COMMAINITIALIZER_H + +/** \class CommaInitializer + * \ingroup Core_Module + * + * \brief Helper class used by the comma initializer operator + * + * This class is internally used to implement the comma initializer feature. It is + * the return type of MatrixBase::operator<<, and most of the time this is the only + * way it is used. + * + * \sa \ref MatrixBaseCommaInitRef "MatrixBase::operator<<", CommaInitializer::finished() + */ +template +struct CommaInitializer +{ + typedef typename XprType::Scalar Scalar; + typedef typename XprType::Index Index; + + inline CommaInitializer(XprType& xpr, const Scalar& s) + : m_xpr(xpr), m_row(0), m_col(1), m_currentBlockRows(1) + { + m_xpr.coeffRef(0,0) = s; + } + + template + inline CommaInitializer(XprType& xpr, const DenseBase& other) + : m_xpr(xpr), m_row(0), m_col(other.cols()), m_currentBlockRows(other.rows()) + { + m_xpr.block(0, 0, other.rows(), other.cols()) = other; + } + + /* inserts a scalar value in the target matrix */ + CommaInitializer& operator,(const Scalar& s) + { + if (m_col==m_xpr.cols()) + { + m_row+=m_currentBlockRows; + m_col = 0; + m_currentBlockRows = 1; + eigen_assert(m_row + CommaInitializer& operator,(const DenseBase& other) + { + if (m_col==m_xpr.cols()) + { + m_row+=m_currentBlockRows; + m_col = 0; + m_currentBlockRows = other.rows(); + eigen_assert(m_row+m_currentBlockRows<=m_xpr.rows() + && "Too many rows passed to comma initializer (operator<<)"); + } + eigen_assert(m_col + (m_row, m_col) = other; + else + m_xpr.block(m_row, m_col, other.rows(), other.cols()) = other; + m_col += other.cols(); + return *this; + } + + inline ~CommaInitializer() + { + eigen_assert((m_row+m_currentBlockRows) == m_xpr.rows() + && m_col == m_xpr.cols() + && "Too few coefficients passed to comma initializer (operator<<)"); + } + + /** \returns the built matrix once all its coefficients have been set. + * Calling finished is 100% optional. Its purpose is to write expressions + * like this: + * \code + * quaternion.fromRotationMatrix((Matrix3f() << axis0, axis1, axis2).finished()); + * \endcode + */ + inline XprType& finished() { return m_xpr; } + + XprType& m_xpr; // target expression + Index m_row; // current row id + Index m_col; // current col id + Index m_currentBlockRows; // current block height +}; + +/** \anchor MatrixBaseCommaInitRef + * Convenient operator to set the coefficients of a matrix. + * + * The coefficients must be provided in a row major order and exactly match + * the size of the matrix. Otherwise an assertion is raised. + * + * Example: \include MatrixBase_set.cpp + * Output: \verbinclude MatrixBase_set.out + * + * \sa CommaInitializer::finished(), class CommaInitializer + */ +template +inline CommaInitializer DenseBase::operator<< (const Scalar& s) +{ + return CommaInitializer(*static_cast(this), s); +} + +/** \sa operator<<(const Scalar&) */ +template +template +inline CommaInitializer +DenseBase::operator<<(const DenseBase& other) +{ + return CommaInitializer(*static_cast(this), other); +} + +#endif // EIGEN_COMMAINITIALIZER_H diff --git a/asift_match/src/third_party/Eigen/src/Core/CwiseBinaryOp.h b/asift_match/src/third_party/Eigen/src/Core/CwiseBinaryOp.h new file mode 100755 index 0000000..7386b2e --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/CwiseBinaryOp.h @@ -0,0 +1,240 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2009 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_CWISE_BINARY_OP_H +#define EIGEN_CWISE_BINARY_OP_H + +/** \class CwiseBinaryOp + * \ingroup Core_Module + * + * \brief Generic expression where a coefficient-wise binary operator is applied to two expressions + * + * \param BinaryOp template functor implementing the operator + * \param Lhs the type of the left-hand side + * \param Rhs the type of the right-hand side + * + * This class represents an expression where a coefficient-wise binary operator is applied to two expressions. + * It is the return type of binary operators, by which we mean only those binary operators where + * both the left-hand side and the right-hand side are Eigen expressions. + * For example, the return type of matrix1+matrix2 is a CwiseBinaryOp. + * + * Most of the time, this is the only way that it is used, so you typically don't have to name + * CwiseBinaryOp types explicitly. + * + * \sa MatrixBase::binaryExpr(const MatrixBase &,const CustomBinaryOp &) const, class CwiseUnaryOp, class CwiseNullaryOp + */ + +namespace internal { +template +struct traits > +{ + // we must not inherit from traits since it has + // the potential to cause problems with MSVC + typedef typename remove_all::type Ancestor; + typedef typename traits::XprKind XprKind; + enum { + RowsAtCompileTime = traits::RowsAtCompileTime, + ColsAtCompileTime = traits::ColsAtCompileTime, + MaxRowsAtCompileTime = traits::MaxRowsAtCompileTime, + MaxColsAtCompileTime = traits::MaxColsAtCompileTime + }; + + // even though we require Lhs and Rhs to have the same scalar type (see CwiseBinaryOp constructor), + // we still want to handle the case when the result type is different. + typedef typename result_of< + BinaryOp( + typename Lhs::Scalar, + typename Rhs::Scalar + ) + >::type Scalar; + typedef typename promote_storage_type::StorageKind, + typename traits::StorageKind>::ret StorageKind; + typedef typename promote_index_type::Index, + typename traits::Index>::type Index; + typedef typename Lhs::Nested LhsNested; + typedef typename Rhs::Nested RhsNested; + typedef typename remove_reference::type _LhsNested; + typedef typename remove_reference::type _RhsNested; + enum { + LhsCoeffReadCost = _LhsNested::CoeffReadCost, + RhsCoeffReadCost = _RhsNested::CoeffReadCost, + LhsFlags = _LhsNested::Flags, + RhsFlags = _RhsNested::Flags, + SameType = is_same::value, + StorageOrdersAgree = (int(Lhs::Flags)&RowMajorBit)==(int(Rhs::Flags)&RowMajorBit), + Flags0 = (int(LhsFlags) | int(RhsFlags)) & ( + HereditaryBits + | (int(LhsFlags) & int(RhsFlags) & + ( AlignedBit + | (StorageOrdersAgree ? LinearAccessBit : 0) + | (functor_traits::PacketAccess && StorageOrdersAgree && SameType ? PacketAccessBit : 0) + ) + ) + ), + Flags = (Flags0 & ~RowMajorBit) | (LhsFlags & RowMajorBit), + CoeffReadCost = LhsCoeffReadCost + RhsCoeffReadCost + functor_traits::Cost + }; +}; +} // end namespace internal + +// we require Lhs and Rhs to have the same scalar type. Currently there is no example of a binary functor +// that would take two operands of different types. If there were such an example, then this check should be +// moved to the BinaryOp functors, on a per-case basis. This would however require a change in the BinaryOp functors, as +// currently they take only one typename Scalar template parameter. +// It is tempting to always allow mixing different types but remember that this is often impossible in the vectorized paths. +// So allowing mixing different types gives very unexpected errors when enabling vectorization, when the user tries to +// add together a float matrix and a double matrix. +#define EIGEN_CHECK_BINARY_COMPATIBILIY(BINOP,LHS,RHS) \ + EIGEN_STATIC_ASSERT((internal::functor_allows_mixing_real_and_complex::ret \ + ? int(internal::is_same::Real, typename NumTraits::Real>::value) \ + : int(internal::is_same::value)), \ + YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + +template +class CwiseBinaryOpImpl; + +template +class CwiseBinaryOp : internal::no_assignment_operator, + public CwiseBinaryOpImpl< + BinaryOp, Lhs, Rhs, + typename internal::promote_storage_type::StorageKind, + typename internal::traits::StorageKind>::ret> +{ + public: + + typedef typename CwiseBinaryOpImpl< + BinaryOp, Lhs, Rhs, + typename internal::promote_storage_type::StorageKind, + typename internal::traits::StorageKind>::ret>::Base Base; + EIGEN_GENERIC_PUBLIC_INTERFACE(CwiseBinaryOp) + + typedef typename internal::nested::type LhsNested; + typedef typename internal::nested::type RhsNested; + typedef typename internal::remove_reference::type _LhsNested; + typedef typename internal::remove_reference::type _RhsNested; + + EIGEN_STRONG_INLINE CwiseBinaryOp(const Lhs& lhs, const Rhs& rhs, const BinaryOp& func = BinaryOp()) + : m_lhs(lhs), m_rhs(rhs), m_functor(func) + { + EIGEN_CHECK_BINARY_COMPATIBILIY(BinaryOp,typename Lhs::Scalar,typename Rhs::Scalar); + // require the sizes to match + EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Lhs, Rhs) + eigen_assert(lhs.rows() == rhs.rows() && lhs.cols() == rhs.cols()); + } + + EIGEN_STRONG_INLINE Index rows() const { + // return the fixed size type if available to enable compile time optimizations + if (internal::traits::type>::RowsAtCompileTime==Dynamic) + return m_rhs.rows(); + else + return m_lhs.rows(); + } + EIGEN_STRONG_INLINE Index cols() const { + // return the fixed size type if available to enable compile time optimizations + if (internal::traits::type>::ColsAtCompileTime==Dynamic) + return m_rhs.cols(); + else + return m_lhs.cols(); + } + + /** \returns the left hand side nested expression */ + const _LhsNested& lhs() const { return m_lhs; } + /** \returns the right hand side nested expression */ + const _RhsNested& rhs() const { return m_rhs; } + /** \returns the functor representing the binary operation */ + const BinaryOp& functor() const { return m_functor; } + + protected: + const LhsNested m_lhs; + const RhsNested m_rhs; + const BinaryOp m_functor; +}; + +template +class CwiseBinaryOpImpl + : public internal::dense_xpr_base >::type +{ + typedef CwiseBinaryOp Derived; + public: + + typedef typename internal::dense_xpr_base >::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE( Derived ) + + EIGEN_STRONG_INLINE const Scalar coeff(Index row, Index col) const + { + return derived().functor()(derived().lhs().coeff(row, col), + derived().rhs().coeff(row, col)); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index row, Index col) const + { + return derived().functor().packetOp(derived().lhs().template packet(row, col), + derived().rhs().template packet(row, col)); + } + + EIGEN_STRONG_INLINE const Scalar coeff(Index index) const + { + return derived().functor()(derived().lhs().coeff(index), + derived().rhs().coeff(index)); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index index) const + { + return derived().functor().packetOp(derived().lhs().template packet(index), + derived().rhs().template packet(index)); + } +}; + +/** replaces \c *this by \c *this - \a other. + * + * \returns a reference to \c *this + */ +template +template +EIGEN_STRONG_INLINE Derived & +MatrixBase::operator-=(const MatrixBase &other) +{ + SelfCwiseBinaryOp, Derived, OtherDerived> tmp(derived()); + tmp = other.derived(); + return derived(); +} + +/** replaces \c *this by \c *this + \a other. + * + * \returns a reference to \c *this + */ +template +template +EIGEN_STRONG_INLINE Derived & +MatrixBase::operator+=(const MatrixBase& other) +{ + SelfCwiseBinaryOp, Derived, OtherDerived> tmp(derived()); + tmp = other.derived(); + return derived(); +} + +#endif // EIGEN_CWISE_BINARY_OP_H diff --git a/asift_match/src/third_party/Eigen/src/Core/CwiseNullaryOp.h b/asift_match/src/third_party/Eigen/src/Core/CwiseNullaryOp.h new file mode 100755 index 0000000..a2f5049 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/CwiseNullaryOp.h @@ -0,0 +1,851 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_CWISE_NULLARY_OP_H +#define EIGEN_CWISE_NULLARY_OP_H + +/** \class CwiseNullaryOp + * \ingroup Core_Module + * + * \brief Generic expression of a matrix where all coefficients are defined by a functor + * + * \param NullaryOp template functor implementing the operator + * \param PlainObjectType the underlying plain matrix/array type + * + * This class represents an expression of a generic nullary operator. + * It is the return type of the Ones(), Zero(), Constant(), Identity() and Random() methods, + * and most of the time this is the only way it is used. + * + * However, if you want to write a function returning such an expression, you + * will need to use this class. + * + * \sa class CwiseUnaryOp, class CwiseBinaryOp, DenseBase::NullaryExpr() + */ + +namespace internal { +template +struct traits > : traits +{ + enum { + Flags = (traits::Flags + & ( HereditaryBits + | (functor_has_linear_access::ret ? LinearAccessBit : 0) + | (functor_traits::PacketAccess ? PacketAccessBit : 0))) + | (functor_traits::IsRepeatable ? 0 : EvalBeforeNestingBit), + CoeffReadCost = functor_traits::Cost + }; +}; +} + +template +class CwiseNullaryOp : internal::no_assignment_operator, + public internal::dense_xpr_base< CwiseNullaryOp >::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(CwiseNullaryOp) + + CwiseNullaryOp(Index rows, Index cols, const NullaryOp& func = NullaryOp()) + : m_rows(rows), m_cols(cols), m_functor(func) + { + eigen_assert(rows >= 0 + && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == rows) + && cols >= 0 + && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == cols)); + } + + EIGEN_STRONG_INLINE Index rows() const { return m_rows.value(); } + EIGEN_STRONG_INLINE Index cols() const { return m_cols.value(); } + + EIGEN_STRONG_INLINE const Scalar coeff(Index rows, Index cols) const + { + return m_functor(rows, cols); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index row, Index col) const + { + return m_functor.packetOp(row, col); + } + + EIGEN_STRONG_INLINE const Scalar coeff(Index index) const + { + return m_functor(index); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index index) const + { + return m_functor.packetOp(index); + } + + protected: + const internal::variable_if_dynamic m_rows; + const internal::variable_if_dynamic m_cols; + const NullaryOp m_functor; +}; + + +/** \returns an expression of a matrix defined by a custom functor \a func + * + * The parameters \a rows and \a cols are the number of rows and of columns of + * the returned matrix. Must be compatible with this MatrixBase type. + * + * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, + * it is redundant to pass \a rows and \a cols as arguments, so Zero() should be used + * instead. + * + * The template parameter \a CustomNullaryOp is the type of the functor. + * + * \sa class CwiseNullaryOp + */ +template +template +EIGEN_STRONG_INLINE const CwiseNullaryOp +DenseBase::NullaryExpr(Index rows, Index cols, const CustomNullaryOp& func) +{ + return CwiseNullaryOp(rows, cols, func); +} + +/** \returns an expression of a matrix defined by a custom functor \a func + * + * The parameter \a size is the size of the returned vector. + * Must be compatible with this MatrixBase type. + * + * \only_for_vectors + * + * This variant is meant to be used for dynamic-size vector types. For fixed-size types, + * it is redundant to pass \a size as argument, so Zero() should be used + * instead. + * + * The template parameter \a CustomNullaryOp is the type of the functor. + * + * \sa class CwiseNullaryOp + */ +template +template +EIGEN_STRONG_INLINE const CwiseNullaryOp +DenseBase::NullaryExpr(Index size, const CustomNullaryOp& func) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + if(RowsAtCompileTime == 1) return CwiseNullaryOp(1, size, func); + else return CwiseNullaryOp(size, 1, func); +} + +/** \returns an expression of a matrix defined by a custom functor \a func + * + * This variant is only for fixed-size DenseBase types. For dynamic-size types, you + * need to use the variants taking size arguments. + * + * The template parameter \a CustomNullaryOp is the type of the functor. + * + * \sa class CwiseNullaryOp + */ +template +template +EIGEN_STRONG_INLINE const CwiseNullaryOp +DenseBase::NullaryExpr(const CustomNullaryOp& func) +{ + return CwiseNullaryOp(RowsAtCompileTime, ColsAtCompileTime, func); +} + +/** \returns an expression of a constant matrix of value \a value + * + * The parameters \a rows and \a cols are the number of rows and of columns of + * the returned matrix. Must be compatible with this DenseBase type. + * + * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, + * it is redundant to pass \a rows and \a cols as arguments, so Zero() should be used + * instead. + * + * The template parameter \a CustomNullaryOp is the type of the functor. + * + * \sa class CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Constant(Index rows, Index cols, const Scalar& value) +{ + return DenseBase::NullaryExpr(rows, cols, internal::scalar_constant_op(value)); +} + +/** \returns an expression of a constant matrix of value \a value + * + * The parameter \a size is the size of the returned vector. + * Must be compatible with this DenseBase type. + * + * \only_for_vectors + * + * This variant is meant to be used for dynamic-size vector types. For fixed-size types, + * it is redundant to pass \a size as argument, so Zero() should be used + * instead. + * + * The template parameter \a CustomNullaryOp is the type of the functor. + * + * \sa class CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Constant(Index size, const Scalar& value) +{ + return DenseBase::NullaryExpr(size, internal::scalar_constant_op(value)); +} + +/** \returns an expression of a constant matrix of value \a value + * + * This variant is only for fixed-size DenseBase types. For dynamic-size types, you + * need to use the variants taking size arguments. + * + * The template parameter \a CustomNullaryOp is the type of the functor. + * + * \sa class CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Constant(const Scalar& value) +{ + EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) + return DenseBase::NullaryExpr(RowsAtCompileTime, ColsAtCompileTime, internal::scalar_constant_op(value)); +} + +/** + * \brief Sets a linearly space vector. + * + * The function generates 'size' equally spaced values in the closed interval [low,high]. + * This particular version of LinSpaced() uses sequential access, i.e. vector access is + * assumed to be a(0), a(1), ..., a(size). This assumption allows for better vectorization + * and yields faster code than the random access version. + * + * \only_for_vectors + * + * Example: \include DenseBase_LinSpaced_seq.cpp + * Output: \verbinclude DenseBase_LinSpaced_seq.out + * + * \sa setLinSpaced(Index,const Scalar&,const Scalar&), LinSpaced(Index,Scalar,Scalar), CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::SequentialLinSpacedReturnType +DenseBase::LinSpaced(Sequential_t, Index size, const Scalar& low, const Scalar& high) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + return DenseBase::NullaryExpr(size, internal::linspaced_op(low,high,size)); +} + +/** + * \copydoc DenseBase::LinSpaced(Sequential_t, Index, const Scalar&, const Scalar&) + * Special version for fixed size types which does not require the size parameter. + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::SequentialLinSpacedReturnType +DenseBase::LinSpaced(Sequential_t, const Scalar& low, const Scalar& high) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) + return DenseBase::NullaryExpr(Derived::SizeAtCompileTime, internal::linspaced_op(low,high,Derived::SizeAtCompileTime)); +} + +/** + * \brief Sets a linearly space vector. + * + * The function generates 'size' equally spaced values in the closed interval [low,high]. + * + * \only_for_vectors + * + * Example: \include DenseBase_LinSpaced.cpp + * Output: \verbinclude DenseBase_LinSpaced.out + * + * \sa setLinSpaced(Index,const Scalar&,const Scalar&), LinSpaced(Sequential_t,Index,const Scalar&,const Scalar&,Index), CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::RandomAccessLinSpacedReturnType +DenseBase::LinSpaced(Index size, const Scalar& low, const Scalar& high) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + return DenseBase::NullaryExpr(size, internal::linspaced_op(low,high,size)); +} + +/** + * \copydoc DenseBase::LinSpaced(Index, const Scalar&, const Scalar&) + * Special version for fixed size types which does not require the size parameter. + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::RandomAccessLinSpacedReturnType +DenseBase::LinSpaced(const Scalar& low, const Scalar& high) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) + return DenseBase::NullaryExpr(Derived::SizeAtCompileTime, internal::linspaced_op(low,high,Derived::SizeAtCompileTime)); +} + +/** \returns true if all coefficients in this matrix are approximately equal to \a value, to within precision \a prec */ +template +bool DenseBase::isApproxToConstant +(const Scalar& value, RealScalar prec) const +{ + for(Index j = 0; j < cols(); ++j) + for(Index i = 0; i < rows(); ++i) + if(!internal::isApprox(this->coeff(i, j), value, prec)) + return false; + return true; +} + +/** This is just an alias for isApproxToConstant(). + * + * \returns true if all coefficients in this matrix are approximately equal to \a value, to within precision \a prec */ +template +bool DenseBase::isConstant +(const Scalar& value, RealScalar prec) const +{ + return isApproxToConstant(value, prec); +} + +/** Alias for setConstant(): sets all coefficients in this expression to \a value. + * + * \sa setConstant(), Constant(), class CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE void DenseBase::fill(const Scalar& value) +{ + setConstant(value); +} + +/** Sets all coefficients in this expression to \a value. + * + * \sa fill(), setConstant(Index,const Scalar&), setConstant(Index,Index,const Scalar&), setZero(), setOnes(), Constant(), class CwiseNullaryOp, setZero(), setOnes() + */ +template +EIGEN_STRONG_INLINE Derived& DenseBase::setConstant(const Scalar& value) +{ + return derived() = Constant(rows(), cols(), value); +} + +/** Resizes to the given \a size, and sets all coefficients in this expression to the given \a value. + * + * \only_for_vectors + * + * Example: \include Matrix_setConstant_int.cpp + * Output: \verbinclude Matrix_setConstant_int.out + * + * \sa MatrixBase::setConstant(const Scalar&), setConstant(Index,Index,const Scalar&), class CwiseNullaryOp, MatrixBase::Constant(const Scalar&) + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setConstant(Index size, const Scalar& value) +{ + resize(size); + return setConstant(value); +} + +/** Resizes to the given size, and sets all coefficients in this expression to the given \a value. + * + * \param rows the new number of rows + * \param cols the new number of columns + * \param value the value to which all coefficients are set + * + * Example: \include Matrix_setConstant_int_int.cpp + * Output: \verbinclude Matrix_setConstant_int_int.out + * + * \sa MatrixBase::setConstant(const Scalar&), setConstant(Index,const Scalar&), class CwiseNullaryOp, MatrixBase::Constant(const Scalar&) + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setConstant(Index rows, Index cols, const Scalar& value) +{ + resize(rows, cols); + return setConstant(value); +} + +/** + * \brief Sets a linearly space vector. + * + * The function generates 'size' equally spaced values in the closed interval [low,high]. + * + * \only_for_vectors + * + * Example: \include DenseBase_setLinSpaced.cpp + * Output: \verbinclude DenseBase_setLinSpaced.out + * + * \sa CwiseNullaryOp + */ +template +EIGEN_STRONG_INLINE Derived& DenseBase::setLinSpaced(Index size, const Scalar& low, const Scalar& high) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + return derived() = Derived::NullaryExpr(size, internal::linspaced_op(low,high,size)); +} + +// zero: + +/** \returns an expression of a zero matrix. + * + * The parameters \a rows and \a cols are the number of rows and of columns of + * the returned matrix. Must be compatible with this MatrixBase type. + * + * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, + * it is redundant to pass \a rows and \a cols as arguments, so Zero() should be used + * instead. + * + * Example: \include MatrixBase_zero_int_int.cpp + * Output: \verbinclude MatrixBase_zero_int_int.out + * + * \sa Zero(), Zero(Index) + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Zero(Index rows, Index cols) +{ + return Constant(rows, cols, Scalar(0)); +} + +/** \returns an expression of a zero vector. + * + * The parameter \a size is the size of the returned vector. + * Must be compatible with this MatrixBase type. + * + * \only_for_vectors + * + * This variant is meant to be used for dynamic-size vector types. For fixed-size types, + * it is redundant to pass \a size as argument, so Zero() should be used + * instead. + * + * Example: \include MatrixBase_zero_int.cpp + * Output: \verbinclude MatrixBase_zero_int.out + * + * \sa Zero(), Zero(Index,Index) + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Zero(Index size) +{ + return Constant(size, Scalar(0)); +} + +/** \returns an expression of a fixed-size zero matrix or vector. + * + * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you + * need to use the variants taking size arguments. + * + * Example: \include MatrixBase_zero.cpp + * Output: \verbinclude MatrixBase_zero.out + * + * \sa Zero(Index), Zero(Index,Index) + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Zero() +{ + return Constant(Scalar(0)); +} + +/** \returns true if *this is approximately equal to the zero matrix, + * within the precision given by \a prec. + * + * Example: \include MatrixBase_isZero.cpp + * Output: \verbinclude MatrixBase_isZero.out + * + * \sa class CwiseNullaryOp, Zero() + */ +template +bool DenseBase::isZero(RealScalar prec) const +{ + for(Index j = 0; j < cols(); ++j) + for(Index i = 0; i < rows(); ++i) + if(!internal::isMuchSmallerThan(this->coeff(i, j), static_cast(1), prec)) + return false; + return true; +} + +/** Sets all coefficients in this expression to zero. + * + * Example: \include MatrixBase_setZero.cpp + * Output: \verbinclude MatrixBase_setZero.out + * + * \sa class CwiseNullaryOp, Zero() + */ +template +EIGEN_STRONG_INLINE Derived& DenseBase::setZero() +{ + return setConstant(Scalar(0)); +} + +/** Resizes to the given \a size, and sets all coefficients in this expression to zero. + * + * \only_for_vectors + * + * Example: \include Matrix_setZero_int.cpp + * Output: \verbinclude Matrix_setZero_int.out + * + * \sa DenseBase::setZero(), setZero(Index,Index), class CwiseNullaryOp, DenseBase::Zero() + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setZero(Index size) +{ + resize(size); + return setConstant(Scalar(0)); +} + +/** Resizes to the given size, and sets all coefficients in this expression to zero. + * + * \param rows the new number of rows + * \param cols the new number of columns + * + * Example: \include Matrix_setZero_int_int.cpp + * Output: \verbinclude Matrix_setZero_int_int.out + * + * \sa DenseBase::setZero(), setZero(Index), class CwiseNullaryOp, DenseBase::Zero() + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setZero(Index rows, Index cols) +{ + resize(rows, cols); + return setConstant(Scalar(0)); +} + +// ones: + +/** \returns an expression of a matrix where all coefficients equal one. + * + * The parameters \a rows and \a cols are the number of rows and of columns of + * the returned matrix. Must be compatible with this MatrixBase type. + * + * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, + * it is redundant to pass \a rows and \a cols as arguments, so Ones() should be used + * instead. + * + * Example: \include MatrixBase_ones_int_int.cpp + * Output: \verbinclude MatrixBase_ones_int_int.out + * + * \sa Ones(), Ones(Index), isOnes(), class Ones + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Ones(Index rows, Index cols) +{ + return Constant(rows, cols, Scalar(1)); +} + +/** \returns an expression of a vector where all coefficients equal one. + * + * The parameter \a size is the size of the returned vector. + * Must be compatible with this MatrixBase type. + * + * \only_for_vectors + * + * This variant is meant to be used for dynamic-size vector types. For fixed-size types, + * it is redundant to pass \a size as argument, so Ones() should be used + * instead. + * + * Example: \include MatrixBase_ones_int.cpp + * Output: \verbinclude MatrixBase_ones_int.out + * + * \sa Ones(), Ones(Index,Index), isOnes(), class Ones + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Ones(Index size) +{ + return Constant(size, Scalar(1)); +} + +/** \returns an expression of a fixed-size matrix or vector where all coefficients equal one. + * + * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you + * need to use the variants taking size arguments. + * + * Example: \include MatrixBase_ones.cpp + * Output: \verbinclude MatrixBase_ones.out + * + * \sa Ones(Index), Ones(Index,Index), isOnes(), class Ones + */ +template +EIGEN_STRONG_INLINE const typename DenseBase::ConstantReturnType +DenseBase::Ones() +{ + return Constant(Scalar(1)); +} + +/** \returns true if *this is approximately equal to the matrix where all coefficients + * are equal to 1, within the precision given by \a prec. + * + * Example: \include MatrixBase_isOnes.cpp + * Output: \verbinclude MatrixBase_isOnes.out + * + * \sa class CwiseNullaryOp, Ones() + */ +template +bool DenseBase::isOnes +(RealScalar prec) const +{ + return isApproxToConstant(Scalar(1), prec); +} + +/** Sets all coefficients in this expression to one. + * + * Example: \include MatrixBase_setOnes.cpp + * Output: \verbinclude MatrixBase_setOnes.out + * + * \sa class CwiseNullaryOp, Ones() + */ +template +EIGEN_STRONG_INLINE Derived& DenseBase::setOnes() +{ + return setConstant(Scalar(1)); +} + +/** Resizes to the given \a size, and sets all coefficients in this expression to one. + * + * \only_for_vectors + * + * Example: \include Matrix_setOnes_int.cpp + * Output: \verbinclude Matrix_setOnes_int.out + * + * \sa MatrixBase::setOnes(), setOnes(Index,Index), class CwiseNullaryOp, MatrixBase::Ones() + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setOnes(Index size) +{ + resize(size); + return setConstant(Scalar(1)); +} + +/** Resizes to the given size, and sets all coefficients in this expression to one. + * + * \param rows the new number of rows + * \param cols the new number of columns + * + * Example: \include Matrix_setOnes_int_int.cpp + * Output: \verbinclude Matrix_setOnes_int_int.out + * + * \sa MatrixBase::setOnes(), setOnes(Index), class CwiseNullaryOp, MatrixBase::Ones() + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setOnes(Index rows, Index cols) +{ + resize(rows, cols); + return setConstant(Scalar(1)); +} + +// Identity: + +/** \returns an expression of the identity matrix (not necessarily square). + * + * The parameters \a rows and \a cols are the number of rows and of columns of + * the returned matrix. Must be compatible with this MatrixBase type. + * + * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, + * it is redundant to pass \a rows and \a cols as arguments, so Identity() should be used + * instead. + * + * Example: \include MatrixBase_identity_int_int.cpp + * Output: \verbinclude MatrixBase_identity_int_int.out + * + * \sa Identity(), setIdentity(), isIdentity() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::IdentityReturnType +MatrixBase::Identity(Index rows, Index cols) +{ + return DenseBase::NullaryExpr(rows, cols, internal::scalar_identity_op()); +} + +/** \returns an expression of the identity matrix (not necessarily square). + * + * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you + * need to use the variant taking size arguments. + * + * Example: \include MatrixBase_identity.cpp + * Output: \verbinclude MatrixBase_identity.out + * + * \sa Identity(Index,Index), setIdentity(), isIdentity() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::IdentityReturnType +MatrixBase::Identity() +{ + EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) + return MatrixBase::NullaryExpr(RowsAtCompileTime, ColsAtCompileTime, internal::scalar_identity_op()); +} + +/** \returns true if *this is approximately equal to the identity matrix + * (not necessarily square), + * within the precision given by \a prec. + * + * Example: \include MatrixBase_isIdentity.cpp + * Output: \verbinclude MatrixBase_isIdentity.out + * + * \sa class CwiseNullaryOp, Identity(), Identity(Index,Index), setIdentity() + */ +template +bool MatrixBase::isIdentity +(RealScalar prec) const +{ + for(Index j = 0; j < cols(); ++j) + { + for(Index i = 0; i < rows(); ++i) + { + if(i == j) + { + if(!internal::isApprox(this->coeff(i, j), static_cast(1), prec)) + return false; + } + else + { + if(!internal::isMuchSmallerThan(this->coeff(i, j), static_cast(1), prec)) + return false; + } + } + } + return true; +} + +namespace internal { + +template=16)> +struct setIdentity_impl +{ + static EIGEN_STRONG_INLINE Derived& run(Derived& m) + { + return m = Derived::Identity(m.rows(), m.cols()); + } +}; + +template +struct setIdentity_impl +{ + typedef typename Derived::Index Index; + static EIGEN_STRONG_INLINE Derived& run(Derived& m) + { + m.setZero(); + const Index size = std::min(m.rows(), m.cols()); + for(Index i = 0; i < size; ++i) m.coeffRef(i,i) = typename Derived::Scalar(1); + return m; + } +}; + +} // end namespace internal + +/** Writes the identity expression (not necessarily square) into *this. + * + * Example: \include MatrixBase_setIdentity.cpp + * Output: \verbinclude MatrixBase_setIdentity.out + * + * \sa class CwiseNullaryOp, Identity(), Identity(Index,Index), isIdentity() + */ +template +EIGEN_STRONG_INLINE Derived& MatrixBase::setIdentity() +{ + return internal::setIdentity_impl::run(derived()); +} + +/** \brief Resizes to the given size, and writes the identity expression (not necessarily square) into *this. + * + * \param rows the new number of rows + * \param cols the new number of columns + * + * Example: \include Matrix_setIdentity_int_int.cpp + * Output: \verbinclude Matrix_setIdentity_int_int.out + * + * \sa MatrixBase::setIdentity(), class CwiseNullaryOp, MatrixBase::Identity() + */ +template +EIGEN_STRONG_INLINE Derived& MatrixBase::setIdentity(Index rows, Index cols) +{ + derived().resize(rows, cols); + return setIdentity(); +} + +/** \returns an expression of the i-th unit (basis) vector. + * + * \only_for_vectors + * + * \sa MatrixBase::Unit(Index), MatrixBase::UnitX(), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::Unit(Index size, Index i) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + return BasisReturnType(SquareMatrixType::Identity(size,size), i); +} + +/** \returns an expression of the i-th unit (basis) vector. + * + * \only_for_vectors + * + * This variant is for fixed-size vector only. + * + * \sa MatrixBase::Unit(Index,Index), MatrixBase::UnitX(), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::Unit(Index i) +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + return BasisReturnType(SquareMatrixType::Identity(),i); +} + +/** \returns an expression of the X axis unit vector (1{,0}^*) + * + * \only_for_vectors + * + * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::UnitX() +{ return Derived::Unit(0); } + +/** \returns an expression of the Y axis unit vector (0,1{,0}^*) + * + * \only_for_vectors + * + * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::UnitY() +{ return Derived::Unit(1); } + +/** \returns an expression of the Z axis unit vector (0,0,1{,0}^*) + * + * \only_for_vectors + * + * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::UnitZ() +{ return Derived::Unit(2); } + +/** \returns an expression of the W axis unit vector (0,0,0,1) + * + * \only_for_vectors + * + * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() + */ +template +EIGEN_STRONG_INLINE const typename MatrixBase::BasisReturnType MatrixBase::UnitW() +{ return Derived::Unit(3); } + +#endif // EIGEN_CWISE_NULLARY_OP_H diff --git a/asift_match/src/third_party/Eigen/src/Core/CwiseUnaryOp.h b/asift_match/src/third_party/Eigen/src/Core/CwiseUnaryOp.h new file mode 100755 index 0000000..958571d --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/CwiseUnaryOp.h @@ -0,0 +1,137 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_CWISE_UNARY_OP_H +#define EIGEN_CWISE_UNARY_OP_H + +/** \class CwiseUnaryOp + * \ingroup Core_Module + * + * \brief Generic expression where a coefficient-wise unary operator is applied to an expression + * + * \param UnaryOp template functor implementing the operator + * \param XprType the type of the expression to which we are applying the unary operator + * + * This class represents an expression where a unary operator is applied to an expression. + * It is the return type of all operations taking exactly 1 input expression, regardless of the + * presence of other inputs such as scalars. For example, the operator* in the expression 3*matrix + * is considered unary, because only the right-hand side is an expression, and its + * return type is a specialization of CwiseUnaryOp. + * + * Most of the time, this is the only way that it is used, so you typically don't have to name + * CwiseUnaryOp types explicitly. + * + * \sa MatrixBase::unaryExpr(const CustomUnaryOp &) const, class CwiseBinaryOp, class CwiseNullaryOp + */ + +namespace internal { +template +struct traits > + : traits +{ + typedef typename result_of< + UnaryOp(typename XprType::Scalar) + >::type Scalar; + typedef typename XprType::Nested XprTypeNested; + typedef typename remove_reference::type _XprTypeNested; + enum { + Flags = _XprTypeNested::Flags & ( + HereditaryBits | LinearAccessBit | AlignedBit + | (functor_traits::PacketAccess ? PacketAccessBit : 0)), + CoeffReadCost = _XprTypeNested::CoeffReadCost + functor_traits::Cost + }; +}; +} + +template +class CwiseUnaryOpImpl; + +template +class CwiseUnaryOp : internal::no_assignment_operator, + public CwiseUnaryOpImpl::StorageKind> +{ + public: + + typedef typename CwiseUnaryOpImpl::StorageKind>::Base Base; + EIGEN_GENERIC_PUBLIC_INTERFACE(CwiseUnaryOp) + + inline CwiseUnaryOp(const XprType& xpr, const UnaryOp& func = UnaryOp()) + : m_xpr(xpr), m_functor(func) {} + + EIGEN_STRONG_INLINE Index rows() const { return m_xpr.rows(); } + EIGEN_STRONG_INLINE Index cols() const { return m_xpr.cols(); } + + /** \returns the functor representing the unary operation */ + const UnaryOp& functor() const { return m_functor; } + + /** \returns the nested expression */ + const typename internal::remove_all::type& + nestedExpression() const { return m_xpr; } + + /** \returns the nested expression */ + typename internal::remove_all::type& + nestedExpression() { return m_xpr.const_cast_derived(); } + + protected: + const typename XprType::Nested m_xpr; + const UnaryOp m_functor; +}; + +// This is the generic implementation for dense storage. +// It can be used for any expression types implementing the dense concept. +template +class CwiseUnaryOpImpl + : public internal::dense_xpr_base >::type +{ + public: + + typedef CwiseUnaryOp Derived; + typedef typename internal::dense_xpr_base >::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Derived) + + EIGEN_STRONG_INLINE const Scalar coeff(Index row, Index col) const + { + return derived().functor()(derived().nestedExpression().coeff(row, col)); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index row, Index col) const + { + return derived().functor().packetOp(derived().nestedExpression().template packet(row, col)); + } + + EIGEN_STRONG_INLINE const Scalar coeff(Index index) const + { + return derived().functor()(derived().nestedExpression().coeff(index)); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index index) const + { + return derived().functor().packetOp(derived().nestedExpression().template packet(index)); + } +}; + +#endif // EIGEN_CWISE_UNARY_OP_H diff --git a/asift_match/src/third_party/Eigen/src/Core/CwiseUnaryView.h b/asift_match/src/third_party/Eigen/src/Core/CwiseUnaryView.h new file mode 100755 index 0000000..d24ef03 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/CwiseUnaryView.h @@ -0,0 +1,148 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_CWISE_UNARY_VIEW_H +#define EIGEN_CWISE_UNARY_VIEW_H + +/** \class CwiseUnaryView + * \ingroup Core_Module + * + * \brief Generic lvalue expression of a coefficient-wise unary operator of a matrix or a vector + * + * \param ViewOp template functor implementing the view + * \param MatrixType the type of the matrix we are applying the unary operator + * + * This class represents a lvalue expression of a generic unary view operator of a matrix or a vector. + * It is the return type of real() and imag(), and most of the time this is the only way it is used. + * + * \sa MatrixBase::unaryViewExpr(const CustomUnaryOp &) const, class CwiseUnaryOp + */ + +namespace internal { +template +struct traits > + : traits +{ + typedef typename result_of< + ViewOp(typename traits::Scalar) + >::type Scalar; + typedef typename MatrixType::Nested MatrixTypeNested; + typedef typename remove_all::type _MatrixTypeNested; + enum { + Flags = (traits<_MatrixTypeNested>::Flags & (HereditaryBits | LvalueBit | LinearAccessBit | DirectAccessBit)), + CoeffReadCost = traits<_MatrixTypeNested>::CoeffReadCost + functor_traits::Cost, + MatrixTypeInnerStride = inner_stride_at_compile_time::ret, + // need to cast the sizeof's from size_t to int explicitly, otherwise: + // "error: no integral type can represent all of the enumerator values + InnerStrideAtCompileTime = MatrixTypeInnerStride == Dynamic + ? int(Dynamic) + : int(MatrixTypeInnerStride) + * int(sizeof(typename traits::Scalar) / sizeof(Scalar)), + OuterStrideAtCompileTime = outer_stride_at_compile_time::ret + }; +}; +} + +template +class CwiseUnaryViewImpl; + +template +class CwiseUnaryView : internal::no_assignment_operator, + public CwiseUnaryViewImpl::StorageKind> +{ + public: + + typedef typename CwiseUnaryViewImpl::StorageKind>::Base Base; + EIGEN_GENERIC_PUBLIC_INTERFACE(CwiseUnaryView) + + inline CwiseUnaryView(const MatrixType& mat, const ViewOp& func = ViewOp()) + : m_matrix(mat), m_functor(func) {} + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(CwiseUnaryView) + + EIGEN_STRONG_INLINE Index rows() const { return m_matrix.rows(); } + EIGEN_STRONG_INLINE Index cols() const { return m_matrix.cols(); } + + /** \returns the functor representing unary operation */ + const ViewOp& functor() const { return m_functor; } + + /** \returns the nested expression */ + const typename internal::remove_all::type& + nestedExpression() const { return m_matrix; } + + /** \returns the nested expression */ + typename internal::remove_all::type& + nestedExpression() { return m_matrix.const_cast_derived(); } + + protected: + // FIXME changed from MatrixType::Nested because of a weird compilation error with sun CC + const typename internal::nested::type m_matrix; + ViewOp m_functor; +}; + +template +class CwiseUnaryViewImpl + : public internal::dense_xpr_base< CwiseUnaryView >::type +{ + public: + + typedef CwiseUnaryView Derived; + typedef typename internal::dense_xpr_base< CwiseUnaryView >::type Base; + + EIGEN_DENSE_PUBLIC_INTERFACE(Derived) + + inline Index innerStride() const + { + return derived().nestedExpression().innerStride() * sizeof(typename internal::traits::Scalar) / sizeof(Scalar); + } + + inline Index outerStride() const + { + return derived().nestedExpression().outerStride(); + } + + EIGEN_STRONG_INLINE CoeffReturnType coeff(Index row, Index col) const + { + return derived().functor()(derived().nestedExpression().coeff(row, col)); + } + + EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const + { + return derived().functor()(derived().nestedExpression().coeff(index)); + } + + EIGEN_STRONG_INLINE Scalar& coeffRef(Index row, Index col) + { + return derived().functor()(const_cast_derived().nestedExpression().coeffRef(row, col)); + } + + EIGEN_STRONG_INLINE Scalar& coeffRef(Index index) + { + return derived().functor()(const_cast_derived().nestedExpression().coeffRef(index)); + } +}; + + + +#endif // EIGEN_CWISE_UNARY_VIEW_H diff --git a/asift_match/src/third_party/Eigen/src/Core/DenseBase.h b/asift_match/src/third_party/Eigen/src/Core/DenseBase.h new file mode 100755 index 0000000..838fa40 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/DenseBase.h @@ -0,0 +1,543 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2007-2010 Benoit Jacob +// Copyright (C) 2008-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DENSEBASE_H +#define EIGEN_DENSEBASE_H + +/** \class DenseBase + * \ingroup Core_Module + * + * \brief Base class for all dense matrices, vectors, and arrays + * + * This class is the base that is inherited by all dense objects (matrix, vector, arrays, + * and related expression types). The common Eigen API for dense objects is contained in this class. + * + * \tparam Derived is the derived type, e.g., a matrix type or an expression. + * + * This class can be extended with the help of the plugin mechanism described on the page + * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_DENSEBASE_PLUGIN. + * + * \sa \ref TopicClassHierarchy + */ +template class DenseBase +#ifndef EIGEN_PARSED_BY_DOXYGEN + : public internal::special_scalar_op_base::Scalar, + typename NumTraits::Scalar>::Real> +#else + : public DenseCoeffsBase +#endif // not EIGEN_PARSED_BY_DOXYGEN +{ + public: + using internal::special_scalar_op_base::Scalar, + typename NumTraits::Scalar>::Real>::operator*; + + class InnerIterator; + + typedef typename internal::traits::StorageKind StorageKind; + + /** \brief The type of indices + * \details To change this, \c \#define the preprocessor symbol \c EIGEN_DEFAULT_DENSE_INDEX_TYPE. + * \sa \ref TopicPreprocessorDirectives. + */ + typedef typename internal::traits::Index Index; + + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + typedef typename NumTraits::Real RealScalar; + + typedef DenseCoeffsBase Base; + using Base::derived; + using Base::const_cast_derived; + using Base::rows; + using Base::cols; + using Base::size; + using Base::rowIndexByOuterInner; + using Base::colIndexByOuterInner; + using Base::coeff; + using Base::coeffByOuterInner; + using Base::packet; + using Base::packetByOuterInner; + using Base::writePacket; + using Base::writePacketByOuterInner; + using Base::coeffRef; + using Base::coeffRefByOuterInner; + using Base::copyCoeff; + using Base::copyCoeffByOuterInner; + using Base::copyPacket; + using Base::copyPacketByOuterInner; + using Base::operator(); + using Base::operator[]; + using Base::x; + using Base::y; + using Base::z; + using Base::w; + using Base::stride; + using Base::innerStride; + using Base::outerStride; + using Base::rowStride; + using Base::colStride; + typedef typename Base::CoeffReturnType CoeffReturnType; + + enum { + + RowsAtCompileTime = internal::traits::RowsAtCompileTime, + /**< The number of rows at compile-time. This is just a copy of the value provided + * by the \a Derived type. If a value is not known at compile-time, + * it is set to the \a Dynamic constant. + * \sa MatrixBase::rows(), MatrixBase::cols(), ColsAtCompileTime, SizeAtCompileTime */ + + ColsAtCompileTime = internal::traits::ColsAtCompileTime, + /**< The number of columns at compile-time. This is just a copy of the value provided + * by the \a Derived type. If a value is not known at compile-time, + * it is set to the \a Dynamic constant. + * \sa MatrixBase::rows(), MatrixBase::cols(), RowsAtCompileTime, SizeAtCompileTime */ + + + SizeAtCompileTime = (internal::size_at_compile_time::RowsAtCompileTime, + internal::traits::ColsAtCompileTime>::ret), + /**< This is equal to the number of coefficients, i.e. the number of + * rows times the number of columns, or to \a Dynamic if this is not + * known at compile-time. \sa RowsAtCompileTime, ColsAtCompileTime */ + + MaxRowsAtCompileTime = internal::traits::MaxRowsAtCompileTime, + /**< This value is equal to the maximum possible number of rows that this expression + * might have. If this expression might have an arbitrarily high number of rows, + * this value is set to \a Dynamic. + * + * This value is useful to know when evaluating an expression, in order to determine + * whether it is possible to avoid doing a dynamic memory allocation. + * + * \sa RowsAtCompileTime, MaxColsAtCompileTime, MaxSizeAtCompileTime + */ + + MaxColsAtCompileTime = internal::traits::MaxColsAtCompileTime, + /**< This value is equal to the maximum possible number of columns that this expression + * might have. If this expression might have an arbitrarily high number of columns, + * this value is set to \a Dynamic. + * + * This value is useful to know when evaluating an expression, in order to determine + * whether it is possible to avoid doing a dynamic memory allocation. + * + * \sa ColsAtCompileTime, MaxRowsAtCompileTime, MaxSizeAtCompileTime + */ + + MaxSizeAtCompileTime = (internal::size_at_compile_time::MaxRowsAtCompileTime, + internal::traits::MaxColsAtCompileTime>::ret), + /**< This value is equal to the maximum possible number of coefficients that this expression + * might have. If this expression might have an arbitrarily high number of coefficients, + * this value is set to \a Dynamic. + * + * This value is useful to know when evaluating an expression, in order to determine + * whether it is possible to avoid doing a dynamic memory allocation. + * + * \sa SizeAtCompileTime, MaxRowsAtCompileTime, MaxColsAtCompileTime + */ + + IsVectorAtCompileTime = internal::traits::MaxRowsAtCompileTime == 1 + || internal::traits::MaxColsAtCompileTime == 1, + /**< This is set to true if either the number of rows or the number of + * columns is known at compile-time to be equal to 1. Indeed, in that case, + * we are dealing with a column-vector (if there is only one column) or with + * a row-vector (if there is only one row). */ + + Flags = internal::traits::Flags, + /**< This stores expression \ref flags flags which may or may not be inherited by new expressions + * constructed from this one. See the \ref flags "list of flags". + */ + + IsRowMajor = int(Flags) & RowMajorBit, /**< True if this expression has row-major storage order. */ + + InnerSizeAtCompileTime = int(IsVectorAtCompileTime) ? SizeAtCompileTime + : int(IsRowMajor) ? ColsAtCompileTime : RowsAtCompileTime, + + CoeffReadCost = internal::traits::CoeffReadCost, + /**< This is a rough measure of how expensive it is to read one coefficient from + * this expression. + */ + + InnerStrideAtCompileTime = internal::inner_stride_at_compile_time::ret, + OuterStrideAtCompileTime = internal::outer_stride_at_compile_time::ret + }; + + enum { ThisConstantIsPrivateInPlainObjectBase }; + + /** \returns the number of nonzero coefficients which is in practice the number + * of stored coefficients. */ + inline Index nonZeros() const { return size(); } + /** \returns true if either the number of rows or the number of columns is equal to 1. + * In other words, this function returns + * \code rows()==1 || cols()==1 \endcode + * \sa rows(), cols(), IsVectorAtCompileTime. */ + + /** \returns the outer size. + * + * \note For a vector, this returns just 1. For a matrix (non-vector), this is the major dimension + * with respect to the \ref TopicStorageOrders "storage order", i.e., the number of columns for a + * column-major matrix, and the number of rows for a row-major matrix. */ + Index outerSize() const + { + return IsVectorAtCompileTime ? 1 + : int(IsRowMajor) ? this->rows() : this->cols(); + } + + /** \returns the inner size. + * + * \note For a vector, this is just the size. For a matrix (non-vector), this is the minor dimension + * with respect to the \ref TopicStorageOrders "storage order", i.e., the number of rows for a + * column-major matrix, and the number of columns for a row-major matrix. */ + Index innerSize() const + { + return IsVectorAtCompileTime ? this->size() + : int(IsRowMajor) ? this->cols() : this->rows(); + } + + /** Only plain matrices/arrays, not expressions, may be resized; therefore the only useful resize methods are + * Matrix::resize() and Array::resize(). The present method only asserts that the new size equals the old size, and does + * nothing else. + */ + void resize(Index size) + { + EIGEN_ONLY_USED_FOR_DEBUG(size); + eigen_assert(size == this->size() + && "DenseBase::resize() does not actually allow to resize."); + } + /** Only plain matrices/arrays, not expressions, may be resized; therefore the only useful resize methods are + * Matrix::resize() and Array::resize(). The present method only asserts that the new size equals the old size, and does + * nothing else. + */ + void resize(Index rows, Index cols) + { + EIGEN_ONLY_USED_FOR_DEBUG(rows); + EIGEN_ONLY_USED_FOR_DEBUG(cols); + eigen_assert(rows == this->rows() && cols == this->cols() + && "DenseBase::resize() does not actually allow to resize."); + } + +#ifndef EIGEN_PARSED_BY_DOXYGEN + + /** \internal Represents a matrix with all coefficients equal to one another*/ + typedef CwiseNullaryOp,Derived> ConstantReturnType; + /** \internal Represents a vector with linearly spaced coefficients that allows sequential access only. */ + typedef CwiseNullaryOp,Derived> SequentialLinSpacedReturnType; + /** \internal Represents a vector with linearly spaced coefficients that allows random access. */ + typedef CwiseNullaryOp,Derived> RandomAccessLinSpacedReturnType; + /** \internal the return type of MatrixBase::eigenvalues() */ + typedef Matrix::Scalar>::Real, internal::traits::ColsAtCompileTime, 1> EigenvaluesReturnType; + +#endif // not EIGEN_PARSED_BY_DOXYGEN + + /** Copies \a other into *this. \returns a reference to *this. */ + template + Derived& operator=(const DenseBase& other); + + /** Special case of the template operator=, in order to prevent the compiler + * from generating a default operator= (issue hit with g++ 4.1) + */ + Derived& operator=(const DenseBase& other); + + template + Derived& operator=(const EigenBase &other); + + template + Derived& operator+=(const EigenBase &other); + + template + Derived& operator-=(const EigenBase &other); + + template + Derived& operator=(const ReturnByValue& func); + +#ifndef EIGEN_PARSED_BY_DOXYGEN + /** Copies \a other into *this without evaluating other. \returns a reference to *this. */ + template + Derived& lazyAssign(const DenseBase& other); +#endif // not EIGEN_PARSED_BY_DOXYGEN + + CommaInitializer operator<< (const Scalar& s); + + template + const Flagged flagged() const; + + template + CommaInitializer operator<< (const DenseBase& other); + + Eigen::Transpose transpose(); + typedef const Transpose ConstTransposeReturnType; + ConstTransposeReturnType transpose() const; + void transposeInPlace(); +#ifndef EIGEN_NO_DEBUG + protected: + template + void checkTransposeAliasing(const OtherDerived& other) const; + public: +#endif + + typedef VectorBlock SegmentReturnType; + typedef const VectorBlock ConstSegmentReturnType; + template struct FixedSegmentReturnType { typedef VectorBlock Type; }; + template struct ConstFixedSegmentReturnType { typedef const VectorBlock Type; }; + + // Note: The "DenseBase::" prefixes are added to help MSVC9 to match these declarations with the later implementations. + SegmentReturnType segment(Index start, Index size); + typename DenseBase::ConstSegmentReturnType segment(Index start, Index size) const; + + SegmentReturnType head(Index size); + typename DenseBase::ConstSegmentReturnType head(Index size) const; + + SegmentReturnType tail(Index size); + typename DenseBase::ConstSegmentReturnType tail(Index size) const; + + template typename FixedSegmentReturnType::Type head(); + template typename ConstFixedSegmentReturnType::Type head() const; + + template typename FixedSegmentReturnType::Type tail(); + template typename ConstFixedSegmentReturnType::Type tail() const; + + template typename FixedSegmentReturnType::Type segment(Index start); + template typename ConstFixedSegmentReturnType::Type segment(Index start) const; + + static const ConstantReturnType + Constant(Index rows, Index cols, const Scalar& value); + static const ConstantReturnType + Constant(Index size, const Scalar& value); + static const ConstantReturnType + Constant(const Scalar& value); + + static const SequentialLinSpacedReturnType + LinSpaced(Sequential_t, Index size, const Scalar& low, const Scalar& high); + static const RandomAccessLinSpacedReturnType + LinSpaced(Index size, const Scalar& low, const Scalar& high); + static const SequentialLinSpacedReturnType + LinSpaced(Sequential_t, const Scalar& low, const Scalar& high); + static const RandomAccessLinSpacedReturnType + LinSpaced(const Scalar& low, const Scalar& high); + + template + static const CwiseNullaryOp + NullaryExpr(Index rows, Index cols, const CustomNullaryOp& func); + template + static const CwiseNullaryOp + NullaryExpr(Index size, const CustomNullaryOp& func); + template + static const CwiseNullaryOp + NullaryExpr(const CustomNullaryOp& func); + + static const ConstantReturnType Zero(Index rows, Index cols); + static const ConstantReturnType Zero(Index size); + static const ConstantReturnType Zero(); + static const ConstantReturnType Ones(Index rows, Index cols); + static const ConstantReturnType Ones(Index size); + static const ConstantReturnType Ones(); + + void fill(const Scalar& value); + Derived& setConstant(const Scalar& value); + Derived& setLinSpaced(Index size, const Scalar& low, const Scalar& high); + Derived& setLinSpaced(const Scalar& low, const Scalar& high); + Derived& setZero(); + Derived& setOnes(); + Derived& setRandom(); + + template + bool isApprox(const DenseBase& other, + RealScalar prec = NumTraits::dummy_precision()) const; + bool isMuchSmallerThan(const RealScalar& other, + RealScalar prec = NumTraits::dummy_precision()) const; + template + bool isMuchSmallerThan(const DenseBase& other, + RealScalar prec = NumTraits::dummy_precision()) const; + + bool isApproxToConstant(const Scalar& value, RealScalar prec = NumTraits::dummy_precision()) const; + bool isConstant(const Scalar& value, RealScalar prec = NumTraits::dummy_precision()) const; + bool isZero(RealScalar prec = NumTraits::dummy_precision()) const; + bool isOnes(RealScalar prec = NumTraits::dummy_precision()) const; + + inline Derived& operator*=(const Scalar& other); + inline Derived& operator/=(const Scalar& other); + + /** \returns the matrix or vector obtained by evaluating this expression. + * + * Notice that in the case of a plain matrix or vector (not an expression) this function just returns + * a const reference, in order to avoid a useless copy. + */ + EIGEN_STRONG_INLINE const typename internal::eval::type eval() const + { + // Even though MSVC does not honor strong inlining when the return type + // is a dynamic matrix, we desperately need strong inlining for fixed + // size types on MSVC. + return typename internal::eval::type(derived()); + } + + /** swaps *this with the expression \a other. + * + */ + template + void swap(const DenseBase& other, + int = OtherDerived::ThisConstantIsPrivateInPlainObjectBase) + { + SwapWrapper(derived()).lazyAssign(other.derived()); + } + + /** swaps *this with the matrix or array \a other. + * + */ + template + void swap(PlainObjectBase& other) + { + SwapWrapper(derived()).lazyAssign(other.derived()); + } + + + inline const NestByValue nestByValue() const; + inline const ForceAlignedAccess forceAlignedAccess() const; + inline ForceAlignedAccess forceAlignedAccess(); + template inline const typename internal::conditional,Derived&>::type forceAlignedAccessIf() const; + template inline typename internal::conditional,Derived&>::type forceAlignedAccessIf(); + + Scalar sum() const; + Scalar mean() const; + Scalar trace() const; + + Scalar prod() const; + + typename internal::traits::Scalar minCoeff() const; + typename internal::traits::Scalar maxCoeff() const; + + template + typename internal::traits::Scalar minCoeff(IndexType* row, IndexType* col) const; + template + typename internal::traits::Scalar maxCoeff(IndexType* row, IndexType* col) const; + template + typename internal::traits::Scalar minCoeff(IndexType* index) const; + template + typename internal::traits::Scalar maxCoeff(IndexType* index) const; + + template + typename internal::result_of::Scalar)>::type + redux(const BinaryOp& func) const; + + template + void visit(Visitor& func) const; + + inline const WithFormat format(const IOFormat& fmt) const; + + /** \returns the unique coefficient of a 1x1 expression */ + CoeffReturnType value() const + { + EIGEN_STATIC_ASSERT_SIZE_1x1(Derived) + eigen_assert(this->rows() == 1 && this->cols() == 1); + return derived().coeff(0,0); + } + +/////////// Array module /////////// + + bool all(void) const; + bool any(void) const; + Index count() const; + + typedef VectorwiseOp RowwiseReturnType; + typedef const VectorwiseOp ConstRowwiseReturnType; + typedef VectorwiseOp ColwiseReturnType; + typedef const VectorwiseOp ConstColwiseReturnType; + + ConstRowwiseReturnType rowwise() const; + RowwiseReturnType rowwise(); + ConstColwiseReturnType colwise() const; + ColwiseReturnType colwise(); + + static const CwiseNullaryOp,Derived> Random(Index rows, Index cols); + static const CwiseNullaryOp,Derived> Random(Index size); + static const CwiseNullaryOp,Derived> Random(); + + template + const Select + select(const DenseBase& thenMatrix, + const DenseBase& elseMatrix) const; + + template + inline const Select + select(const DenseBase& thenMatrix, typename ThenDerived::Scalar elseScalar) const; + + template + inline const Select + select(typename ElseDerived::Scalar thenScalar, const DenseBase& elseMatrix) const; + + template RealScalar lpNorm() const; + + template + const Replicate replicate() const; + const Replicate replicate(Index rowFacor,Index colFactor) const; + + typedef Reverse ReverseReturnType; + typedef const Reverse ConstReverseReturnType; + ReverseReturnType reverse(); + ConstReverseReturnType reverse() const; + void reverseInPlace(); + +#define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::DenseBase +# include "../plugins/BlockMethods.h" +# ifdef EIGEN_DENSEBASE_PLUGIN +# include EIGEN_DENSEBASE_PLUGIN +# endif +#undef EIGEN_CURRENT_STORAGE_BASE_CLASS + +#ifdef EIGEN2_SUPPORT + + Block corner(CornerType type, Index cRows, Index cCols); + const Block corner(CornerType type, Index cRows, Index cCols) const; + template + Block corner(CornerType type); + template + const Block corner(CornerType type) const; + +#endif // EIGEN2_SUPPORT + + + // disable the use of evalTo for dense objects with a nice compilation error + template inline void evalTo(Dest& ) const + { + EIGEN_STATIC_ASSERT((internal::is_same::value),THE_EVAL_EVALTO_FUNCTION_SHOULD_NEVER_BE_CALLED_FOR_DENSE_OBJECTS); + } + + protected: + /** Default constructor. Do nothing. */ + DenseBase() + { + /* Just checks for self-consistency of the flags. + * Only do it when debugging Eigen, as this borders on paranoiac and could slow compilation down + */ +#ifdef EIGEN_INTERNAL_DEBUGGING + EIGEN_STATIC_ASSERT((EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, int(IsRowMajor)) + && EIGEN_IMPLIES(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, int(!IsRowMajor))), + INVALID_STORAGE_ORDER_FOR_THIS_VECTOR_EXPRESSION) +#endif + } + + private: + explicit DenseBase(int); + DenseBase(int,int); + template explicit DenseBase(const DenseBase&); +}; + +#endif // EIGEN_DENSEBASE_H diff --git a/asift_match/src/third_party/Eigen/src/Core/DenseCoeffsBase.h b/asift_match/src/third_party/Eigen/src/Core/DenseCoeffsBase.h new file mode 100755 index 0000000..7838a1c --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/DenseCoeffsBase.h @@ -0,0 +1,765 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DENSECOEFFSBASE_H +#define EIGEN_DENSECOEFFSBASE_H + +namespace internal { +template struct add_const_on_value_type_if_arithmetic +{ + typedef typename conditional::value, T, typename add_const_on_value_type::type>::type type; +}; +} + +/** \brief Base class providing read-only coefficient access to matrices and arrays. + * \ingroup Core_Module + * \tparam Derived Type of the derived class + * \tparam ReadOnlyAccessors Constant indicating read-only access + * + * This class defines the \c operator() \c const function and friends, which can be used to read specific + * entries of a matrix or array. + * + * \sa DenseCoeffsBase, DenseCoeffsBase, + * \ref TopicClassHierarchy + */ +template +class DenseCoeffsBase : public EigenBase +{ + public: + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + + // Explanation for this CoeffReturnType typedef. + // - This is the return type of the coeff() method. + // - The LvalueBit means exactly that we can offer a coeffRef() method, which means exactly that we can get references + // to coeffs, which means exactly that we can have coeff() return a const reference (as opposed to returning a value). + // - The is_artihmetic check is required since "const int", "const double", etc. will cause warnings on some systems + // while the declaration of "const T", where T is a non arithmetic type does not. Always returning "const Scalar&" is + // not possible, since the underlying expressions might not offer a valid address the reference could be referring to. + typedef typename internal::conditional::Flags&LvalueBit), + const Scalar&, + typename internal::conditional::value, Scalar, const Scalar>::type + >::type CoeffReturnType; + + typedef typename internal::add_const_on_value_type_if_arithmetic< + typename internal::packet_traits::type + >::type PacketReturnType; + + typedef EigenBase Base; + using Base::rows; + using Base::cols; + using Base::size; + using Base::derived; + + EIGEN_STRONG_INLINE Index rowIndexByOuterInner(Index outer, Index inner) const + { + return int(Derived::RowsAtCompileTime) == 1 ? 0 + : int(Derived::ColsAtCompileTime) == 1 ? inner + : int(Derived::Flags)&RowMajorBit ? outer + : inner; + } + + EIGEN_STRONG_INLINE Index colIndexByOuterInner(Index outer, Index inner) const + { + return int(Derived::ColsAtCompileTime) == 1 ? 0 + : int(Derived::RowsAtCompileTime) == 1 ? inner + : int(Derived::Flags)&RowMajorBit ? inner + : outer; + } + + /** Short version: don't use this function, use + * \link operator()(Index,Index) const \endlink instead. + * + * Long version: this function is similar to + * \link operator()(Index,Index) const \endlink, but without the assertion. + * Use this for limiting the performance cost of debugging code when doing + * repeated coefficient access. Only use this when it is guaranteed that the + * parameters \a row and \a col are in range. + * + * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this + * function equivalent to \link operator()(Index,Index) const \endlink. + * + * \sa operator()(Index,Index) const, coeffRef(Index,Index), coeff(Index) const + */ + EIGEN_STRONG_INLINE CoeffReturnType coeff(Index row, Index col) const + { + eigen_internal_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + return derived().coeff(row, col); + } + + EIGEN_STRONG_INLINE CoeffReturnType coeffByOuterInner(Index outer, Index inner) const + { + return coeff(rowIndexByOuterInner(outer, inner), + colIndexByOuterInner(outer, inner)); + } + + /** \returns the coefficient at given the given row and column. + * + * \sa operator()(Index,Index), operator[](Index) + */ + EIGEN_STRONG_INLINE CoeffReturnType operator()(Index row, Index col) const + { + eigen_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + return derived().coeff(row, col); + } + + /** Short version: don't use this function, use + * \link operator[](Index) const \endlink instead. + * + * Long version: this function is similar to + * \link operator[](Index) const \endlink, but without the assertion. + * Use this for limiting the performance cost of debugging code when doing + * repeated coefficient access. Only use this when it is guaranteed that the + * parameter \a index is in range. + * + * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this + * function equivalent to \link operator[](Index) const \endlink. + * + * \sa operator[](Index) const, coeffRef(Index), coeff(Index,Index) const + */ + + EIGEN_STRONG_INLINE CoeffReturnType + coeff(Index index) const + { + eigen_internal_assert(index >= 0 && index < size()); + return derived().coeff(index); + } + + + /** \returns the coefficient at given index. + * + * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit. + * + * \sa operator[](Index), operator()(Index,Index) const, x() const, y() const, + * z() const, w() const + */ + + EIGEN_STRONG_INLINE CoeffReturnType + operator[](Index index) const + { + #ifndef EIGEN2_SUPPORT + EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime, + THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD) + #endif + eigen_assert(index >= 0 && index < size()); + return derived().coeff(index); + } + + /** \returns the coefficient at given index. + * + * This is synonymous to operator[](Index) const. + * + * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit. + * + * \sa operator[](Index), operator()(Index,Index) const, x() const, y() const, + * z() const, w() const + */ + + EIGEN_STRONG_INLINE CoeffReturnType + operator()(Index index) const + { + eigen_assert(index >= 0 && index < size()); + return derived().coeff(index); + } + + /** equivalent to operator[](0). */ + + EIGEN_STRONG_INLINE CoeffReturnType + x() const { return (*this)[0]; } + + /** equivalent to operator[](1). */ + + EIGEN_STRONG_INLINE CoeffReturnType + y() const { return (*this)[1]; } + + /** equivalent to operator[](2). */ + + EIGEN_STRONG_INLINE CoeffReturnType + z() const { return (*this)[2]; } + + /** equivalent to operator[](3). */ + + EIGEN_STRONG_INLINE CoeffReturnType + w() const { return (*this)[3]; } + + /** \internal + * \returns the packet of coefficients starting at the given row and column. It is your responsibility + * to ensure that a packet really starts there. This method is only available on expressions having the + * PacketAccessBit. + * + * The \a LoadMode parameter may have the value \a Aligned or \a Unaligned. Its effect is to select + * the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets + * starting at an address which is a multiple of the packet size. + */ + + template + EIGEN_STRONG_INLINE PacketReturnType packet(Index row, Index col) const + { + eigen_internal_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + return derived().template packet(row,col); + } + + + /** \internal */ + template + EIGEN_STRONG_INLINE PacketReturnType packetByOuterInner(Index outer, Index inner) const + { + return packet(rowIndexByOuterInner(outer, inner), + colIndexByOuterInner(outer, inner)); + } + + /** \internal + * \returns the packet of coefficients starting at the given index. It is your responsibility + * to ensure that a packet really starts there. This method is only available on expressions having the + * PacketAccessBit and the LinearAccessBit. + * + * The \a LoadMode parameter may have the value \a Aligned or \a Unaligned. Its effect is to select + * the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets + * starting at an address which is a multiple of the packet size. + */ + + template + EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const + { + eigen_internal_assert(index >= 0 && index < size()); + return derived().template packet(index); + } + + protected: + // explanation: DenseBase is doing "using ..." on the methods from DenseCoeffsBase. + // But some methods are only available in the DirectAccess case. + // So we add dummy methods here with these names, so that "using... " doesn't fail. + // It's not private so that the child class DenseBase can access them, and it's not public + // either since it's an implementation detail, so has to be protected. + void coeffRef(); + void coeffRefByOuterInner(); + void writePacket(); + void writePacketByOuterInner(); + void copyCoeff(); + void copyCoeffByOuterInner(); + void copyPacket(); + void copyPacketByOuterInner(); + void stride(); + void innerStride(); + void outerStride(); + void rowStride(); + void colStride(); +}; + +/** \brief Base class providing read/write coefficient access to matrices and arrays. + * \ingroup Core_Module + * \tparam Derived Type of the derived class + * \tparam WriteAccessors Constant indicating read/write access + * + * This class defines the non-const \c operator() function and friends, which can be used to write specific + * entries of a matrix or array. This class inherits DenseCoeffsBase which + * defines the const variant for reading specific entries. + * + * \sa DenseCoeffsBase, \ref TopicClassHierarchy + */ +template +class DenseCoeffsBase : public DenseCoeffsBase +{ + public: + + typedef DenseCoeffsBase Base; + + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + typedef typename NumTraits::Real RealScalar; + + using Base::coeff; + using Base::rows; + using Base::cols; + using Base::size; + using Base::derived; + using Base::rowIndexByOuterInner; + using Base::colIndexByOuterInner; + using Base::operator[]; + using Base::operator(); + using Base::x; + using Base::y; + using Base::z; + using Base::w; + + /** Short version: don't use this function, use + * \link operator()(Index,Index) \endlink instead. + * + * Long version: this function is similar to + * \link operator()(Index,Index) \endlink, but without the assertion. + * Use this for limiting the performance cost of debugging code when doing + * repeated coefficient access. Only use this when it is guaranteed that the + * parameters \a row and \a col are in range. + * + * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this + * function equivalent to \link operator()(Index,Index) \endlink. + * + * \sa operator()(Index,Index), coeff(Index, Index) const, coeffRef(Index) + */ + EIGEN_STRONG_INLINE Scalar& coeffRef(Index row, Index col) + { + eigen_internal_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + return derived().coeffRef(row, col); + } + + EIGEN_STRONG_INLINE Scalar& + coeffRefByOuterInner(Index outer, Index inner) + { + return coeffRef(rowIndexByOuterInner(outer, inner), + colIndexByOuterInner(outer, inner)); + } + + /** \returns a reference to the coefficient at given the given row and column. + * + * \sa operator[](Index) + */ + + EIGEN_STRONG_INLINE Scalar& + operator()(Index row, Index col) + { + eigen_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + return derived().coeffRef(row, col); + } + + + /** Short version: don't use this function, use + * \link operator[](Index) \endlink instead. + * + * Long version: this function is similar to + * \link operator[](Index) \endlink, but without the assertion. + * Use this for limiting the performance cost of debugging code when doing + * repeated coefficient access. Only use this when it is guaranteed that the + * parameters \a row and \a col are in range. + * + * If EIGEN_INTERNAL_DEBUGGING is defined, an assertion will be made, making this + * function equivalent to \link operator[](Index) \endlink. + * + * \sa operator[](Index), coeff(Index) const, coeffRef(Index,Index) + */ + + EIGEN_STRONG_INLINE Scalar& + coeffRef(Index index) + { + eigen_internal_assert(index >= 0 && index < size()); + return derived().coeffRef(index); + } + + /** \returns a reference to the coefficient at given index. + * + * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit. + * + * \sa operator[](Index) const, operator()(Index,Index), x(), y(), z(), w() + */ + + EIGEN_STRONG_INLINE Scalar& + operator[](Index index) + { + #ifndef EIGEN2_SUPPORT + EIGEN_STATIC_ASSERT(Derived::IsVectorAtCompileTime, + THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD) + #endif + eigen_assert(index >= 0 && index < size()); + return derived().coeffRef(index); + } + + /** \returns a reference to the coefficient at given index. + * + * This is synonymous to operator[](Index). + * + * This method is allowed only for vector expressions, and for matrix expressions having the LinearAccessBit. + * + * \sa operator[](Index) const, operator()(Index,Index), x(), y(), z(), w() + */ + + EIGEN_STRONG_INLINE Scalar& + operator()(Index index) + { + eigen_assert(index >= 0 && index < size()); + return derived().coeffRef(index); + } + + /** equivalent to operator[](0). */ + + EIGEN_STRONG_INLINE Scalar& + x() { return (*this)[0]; } + + /** equivalent to operator[](1). */ + + EIGEN_STRONG_INLINE Scalar& + y() { return (*this)[1]; } + + /** equivalent to operator[](2). */ + + EIGEN_STRONG_INLINE Scalar& + z() { return (*this)[2]; } + + /** equivalent to operator[](3). */ + + EIGEN_STRONG_INLINE Scalar& + w() { return (*this)[3]; } + + /** \internal + * Stores the given packet of coefficients, at the given row and column of this expression. It is your responsibility + * to ensure that a packet really starts there. This method is only available on expressions having the + * PacketAccessBit. + * + * The \a LoadMode parameter may have the value \a Aligned or \a Unaligned. Its effect is to select + * the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets + * starting at an address which is a multiple of the packet size. + */ + + template + EIGEN_STRONG_INLINE void writePacket + (Index row, Index col, const typename internal::packet_traits::type& x) + { + eigen_internal_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + derived().template writePacket(row,col,x); + } + + + /** \internal */ + template + EIGEN_STRONG_INLINE void writePacketByOuterInner + (Index outer, Index inner, const typename internal::packet_traits::type& x) + { + writePacket(rowIndexByOuterInner(outer, inner), + colIndexByOuterInner(outer, inner), + x); + } + + /** \internal + * Stores the given packet of coefficients, at the given index in this expression. It is your responsibility + * to ensure that a packet really starts there. This method is only available on expressions having the + * PacketAccessBit and the LinearAccessBit. + * + * The \a LoadMode parameter may have the value \a Aligned or \a Unaligned. Its effect is to select + * the appropriate vectorization instruction. Aligned access is faster, but is only possible for packets + * starting at an address which is a multiple of the packet size. + */ + template + EIGEN_STRONG_INLINE void writePacket + (Index index, const typename internal::packet_traits::type& x) + { + eigen_internal_assert(index >= 0 && index < size()); + derived().template writePacket(index,x); + } + +#ifndef EIGEN_PARSED_BY_DOXYGEN + + /** \internal Copies the coefficient at position (row,col) of other into *this. + * + * This method is overridden in SwapWrapper, allowing swap() assignments to share 99% of their code + * with usual assignments. + * + * Outside of this internal usage, this method has probably no usefulness. It is hidden in the public API dox. + */ + + template + EIGEN_STRONG_INLINE void copyCoeff(Index row, Index col, const DenseBase& other) + { + eigen_internal_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + derived().coeffRef(row, col) = other.derived().coeff(row, col); + } + + /** \internal Copies the coefficient at the given index of other into *this. + * + * This method is overridden in SwapWrapper, allowing swap() assignments to share 99% of their code + * with usual assignments. + * + * Outside of this internal usage, this method has probably no usefulness. It is hidden in the public API dox. + */ + + template + EIGEN_STRONG_INLINE void copyCoeff(Index index, const DenseBase& other) + { + eigen_internal_assert(index >= 0 && index < size()); + derived().coeffRef(index) = other.derived().coeff(index); + } + + + template + EIGEN_STRONG_INLINE void copyCoeffByOuterInner(Index outer, Index inner, const DenseBase& other) + { + const Index row = rowIndexByOuterInner(outer,inner); + const Index col = colIndexByOuterInner(outer,inner); + // derived() is important here: copyCoeff() may be reimplemented in Derived! + derived().copyCoeff(row, col, other); + } + + /** \internal Copies the packet at position (row,col) of other into *this. + * + * This method is overridden in SwapWrapper, allowing swap() assignments to share 99% of their code + * with usual assignments. + * + * Outside of this internal usage, this method has probably no usefulness. It is hidden in the public API dox. + */ + + template + EIGEN_STRONG_INLINE void copyPacket(Index row, Index col, const DenseBase& other) + { + eigen_internal_assert(row >= 0 && row < rows() + && col >= 0 && col < cols()); + derived().template writePacket(row, col, + other.derived().template packet(row, col)); + } + + /** \internal Copies the packet at the given index of other into *this. + * + * This method is overridden in SwapWrapper, allowing swap() assignments to share 99% of their code + * with usual assignments. + * + * Outside of this internal usage, this method has probably no usefulness. It is hidden in the public API dox. + */ + + template + EIGEN_STRONG_INLINE void copyPacket(Index index, const DenseBase& other) + { + eigen_internal_assert(index >= 0 && index < size()); + derived().template writePacket(index, + other.derived().template packet(index)); + } + + /** \internal */ + template + EIGEN_STRONG_INLINE void copyPacketByOuterInner(Index outer, Index inner, const DenseBase& other) + { + const Index row = rowIndexByOuterInner(outer,inner); + const Index col = colIndexByOuterInner(outer,inner); + // derived() is important here: copyCoeff() may be reimplemented in Derived! + derived().template copyPacket< OtherDerived, StoreMode, LoadMode>(row, col, other); + } +#endif + +}; + +/** \brief Base class providing direct read-only coefficient access to matrices and arrays. + * \ingroup Core_Module + * \tparam Derived Type of the derived class + * \tparam DirectAccessors Constant indicating direct access + * + * This class defines functions to work with strides which can be used to access entries directly. This class + * inherits DenseCoeffsBase which defines functions to access entries read-only using + * \c operator() . + * + * \sa \ref TopicClassHierarchy + */ +template +class DenseCoeffsBase : public DenseCoeffsBase +{ + public: + + typedef DenseCoeffsBase Base; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename NumTraits::Real RealScalar; + + using Base::rows; + using Base::cols; + using Base::size; + using Base::derived; + + /** \returns the pointer increment between two consecutive elements within a slice in the inner direction. + * + * \sa outerStride(), rowStride(), colStride() + */ + inline Index innerStride() const + { + return derived().innerStride(); + } + + /** \returns the pointer increment between two consecutive inner slices (for example, between two consecutive columns + * in a column-major matrix). + * + * \sa innerStride(), rowStride(), colStride() + */ + inline Index outerStride() const + { + return derived().outerStride(); + } + + // FIXME shall we remove it ? + inline Index stride() const + { + return Derived::IsVectorAtCompileTime ? innerStride() : outerStride(); + } + + /** \returns the pointer increment between two consecutive rows. + * + * \sa innerStride(), outerStride(), colStride() + */ + inline Index rowStride() const + { + return Derived::IsRowMajor ? outerStride() : innerStride(); + } + + /** \returns the pointer increment between two consecutive columns. + * + * \sa innerStride(), outerStride(), rowStride() + */ + inline Index colStride() const + { + return Derived::IsRowMajor ? innerStride() : outerStride(); + } +}; + +/** \brief Base class providing direct read/write coefficient access to matrices and arrays. + * \ingroup Core_Module + * \tparam Derived Type of the derived class + * \tparam DirectAccessors Constant indicating direct access + * + * This class defines functions to work with strides which can be used to access entries directly. This class + * inherits DenseCoeffsBase which defines functions to access entries read/write using + * \c operator(). + * + * \sa \ref TopicClassHierarchy + */ +template +class DenseCoeffsBase + : public DenseCoeffsBase +{ + public: + + typedef DenseCoeffsBase Base; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename NumTraits::Real RealScalar; + + using Base::rows; + using Base::cols; + using Base::size; + using Base::derived; + + /** \returns the pointer increment between two consecutive elements within a slice in the inner direction. + * + * \sa outerStride(), rowStride(), colStride() + */ + inline Index innerStride() const + { + return derived().innerStride(); + } + + /** \returns the pointer increment between two consecutive inner slices (for example, between two consecutive columns + * in a column-major matrix). + * + * \sa innerStride(), rowStride(), colStride() + */ + inline Index outerStride() const + { + return derived().outerStride(); + } + + // FIXME shall we remove it ? + inline Index stride() const + { + return Derived::IsVectorAtCompileTime ? innerStride() : outerStride(); + } + + /** \returns the pointer increment between two consecutive rows. + * + * \sa innerStride(), outerStride(), colStride() + */ + inline Index rowStride() const + { + return Derived::IsRowMajor ? outerStride() : innerStride(); + } + + /** \returns the pointer increment between two consecutive columns. + * + * \sa innerStride(), outerStride(), rowStride() + */ + inline Index colStride() const + { + return Derived::IsRowMajor ? innerStride() : outerStride(); + } +}; + +namespace internal { + +template +struct first_aligned_impl +{ + inline static typename Derived::Index run(const Derived&) + { return 0; } +}; + +template +struct first_aligned_impl +{ + inline static typename Derived::Index run(const Derived& m) + { + return first_aligned(&m.const_cast_derived().coeffRef(0,0), m.size()); + } +}; + +/** \internal \returns the index of the first element of the array that is well aligned for vectorization. + * + * There is also the variant first_aligned(const Scalar*, Integer) defined in Memory.h. See it for more + * documentation. + */ +template +inline static typename Derived::Index first_aligned(const Derived& m) +{ + return first_aligned_impl + + ::run(m); +} + +template::ret> +struct inner_stride_at_compile_time +{ + enum { ret = traits::InnerStrideAtCompileTime }; +}; + +template +struct inner_stride_at_compile_time +{ + enum { ret = 0 }; +}; + +template::ret> +struct outer_stride_at_compile_time +{ + enum { ret = traits::OuterStrideAtCompileTime }; +}; + +template +struct outer_stride_at_compile_time +{ + enum { ret = 0 }; +}; + +} // end namespace internal + +#endif // EIGEN_DENSECOEFFSBASE_H diff --git a/asift_match/src/third_party/Eigen/src/Core/DenseStorage.h b/asift_match/src/third_party/Eigen/src/Core/DenseStorage.h new file mode 100755 index 0000000..1bcaf4c --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/DenseStorage.h @@ -0,0 +1,304 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2006-2009 Benoit Jacob +// Copyright (C) 2010 Hauke Heibel +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_MATRIXSTORAGE_H +#define EIGEN_MATRIXSTORAGE_H + +#ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN + #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN EIGEN_DENSE_STORAGE_CTOR_PLUGIN; +#else + #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN +#endif + +namespace internal { + +struct constructor_without_unaligned_array_assert {}; + +/** \internal + * Static array. If the MatrixOrArrayOptions require auto-alignment, the array will be automatically aligned: + * to 16 bytes boundary if the total size is a multiple of 16 bytes. + */ +template +struct plain_array +{ + T array[Size]; + plain_array() {} + plain_array(constructor_without_unaligned_array_assert) {} +}; + +#ifdef EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT + #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask) +#else + #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask) \ + eigen_assert((reinterpret_cast(array) & sizemask) == 0 \ + && "this assertion is explained here: " \ + "http://eigen.tuxfamily.org/dox/UnalignedArrayAssert.html" \ + " **** READ THIS WEB PAGE !!! ****"); +#endif + +template +struct plain_array +{ + EIGEN_USER_ALIGN16 T array[Size]; + plain_array() { EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(0xf) } + plain_array(constructor_without_unaligned_array_assert) {} +}; + +template +struct plain_array +{ + EIGEN_USER_ALIGN16 T array[1]; + plain_array() {} + plain_array(constructor_without_unaligned_array_assert) {} +}; + +} // end namespace internal + +/** \internal + * + * \class DenseStorage + * \ingroup Core_Module + * + * \brief Stores the data of a matrix + * + * This class stores the data of fixed-size, dynamic-size or mixed matrices + * in a way as compact as possible. + * + * \sa Matrix + */ +template class DenseStorage; + +// purely fixed-size matrix +template class DenseStorage +{ + internal::plain_array m_data; + public: + inline explicit DenseStorage() {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(internal::constructor_without_unaligned_array_assert()) {} + inline DenseStorage(DenseIndex,DenseIndex,DenseIndex) {} + inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); } + inline static DenseIndex rows(void) {return _Rows;} + inline static DenseIndex cols(void) {return _Cols;} + inline void conservativeResize(DenseIndex,DenseIndex,DenseIndex) {} + inline void resize(DenseIndex,DenseIndex,DenseIndex) {} + inline const T *data() const { return m_data.array; } + inline T *data() { return m_data.array; } +}; + +// null matrix +template class DenseStorage +{ + public: + inline explicit DenseStorage() {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) {} + inline DenseStorage(DenseIndex,DenseIndex,DenseIndex) {} + inline void swap(DenseStorage& ) {} + inline static DenseIndex rows(void) {return _Rows;} + inline static DenseIndex cols(void) {return _Cols;} + inline void conservativeResize(DenseIndex,DenseIndex,DenseIndex) {} + inline void resize(DenseIndex,DenseIndex,DenseIndex) {} + inline const T *data() const { return 0; } + inline T *data() { return 0; } +}; + +// dynamic-size matrix with fixed-size storage +template class DenseStorage +{ + internal::plain_array m_data; + DenseIndex m_rows; + DenseIndex m_cols; + public: + inline explicit DenseStorage() : m_rows(0), m_cols(0) {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(0), m_cols(0) {} + inline DenseStorage(DenseIndex, DenseIndex rows, DenseIndex cols) : m_rows(rows), m_cols(cols) {} + inline void swap(DenseStorage& other) + { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); std::swap(m_cols,other.m_cols); } + inline DenseIndex rows(void) const {return m_rows;} + inline DenseIndex cols(void) const {return m_cols;} + inline void conservativeResize(DenseIndex, DenseIndex rows, DenseIndex cols) { m_rows = rows; m_cols = cols; } + inline void resize(DenseIndex, DenseIndex rows, DenseIndex cols) { m_rows = rows; m_cols = cols; } + inline const T *data() const { return m_data.array; } + inline T *data() { return m_data.array; } +}; + +// dynamic-size matrix with fixed-size storage and fixed width +template class DenseStorage +{ + internal::plain_array m_data; + DenseIndex m_rows; + public: + inline explicit DenseStorage() : m_rows(0) {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(0) {} + inline DenseStorage(DenseIndex, DenseIndex rows, DenseIndex) : m_rows(rows) {} + inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); } + inline DenseIndex rows(void) const {return m_rows;} + inline DenseIndex cols(void) const {return _Cols;} + inline void conservativeResize(DenseIndex, DenseIndex rows, DenseIndex) { m_rows = rows; } + inline void resize(DenseIndex, DenseIndex rows, DenseIndex) { m_rows = rows; } + inline const T *data() const { return m_data.array; } + inline T *data() { return m_data.array; } +}; + +// dynamic-size matrix with fixed-size storage and fixed height +template class DenseStorage +{ + internal::plain_array m_data; + DenseIndex m_cols; + public: + inline explicit DenseStorage() : m_cols(0) {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(internal::constructor_without_unaligned_array_assert()), m_cols(0) {} + inline DenseStorage(DenseIndex, DenseIndex, DenseIndex cols) : m_cols(cols) {} + inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); } + inline DenseIndex rows(void) const {return _Rows;} + inline DenseIndex cols(void) const {return m_cols;} + inline void conservativeResize(DenseIndex, DenseIndex, DenseIndex cols) { m_cols = cols; } + inline void resize(DenseIndex, DenseIndex, DenseIndex cols) { m_cols = cols; } + inline const T *data() const { return m_data.array; } + inline T *data() { return m_data.array; } +}; + +// purely dynamic matrix. +template class DenseStorage +{ + T *m_data; + DenseIndex m_rows; + DenseIndex m_cols; + public: + inline explicit DenseStorage() : m_data(0), m_rows(0), m_cols(0) {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) + : m_data(0), m_rows(0), m_cols(0) {} + inline DenseStorage(DenseIndex size, DenseIndex rows, DenseIndex cols) + : m_data(internal::conditional_aligned_new_auto(size)), m_rows(rows), m_cols(cols) + { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN } + inline ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, m_rows*m_cols); } + inline void swap(DenseStorage& other) + { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); std::swap(m_cols,other.m_cols); } + inline DenseIndex rows(void) const {return m_rows;} + inline DenseIndex cols(void) const {return m_cols;} + inline void conservativeResize(DenseIndex size, DenseIndex rows, DenseIndex cols) + { + m_data = internal::conditional_aligned_realloc_new_auto(m_data, size, m_rows*m_cols); + m_rows = rows; + m_cols = cols; + } + void resize(DenseIndex size, DenseIndex rows, DenseIndex cols) + { + if(size != m_rows*m_cols) + { + internal::conditional_aligned_delete_auto(m_data, m_rows*m_cols); + if (size) + m_data = internal::conditional_aligned_new_auto(size); + else + m_data = 0; + EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN + } + m_rows = rows; + m_cols = cols; + } + inline const T *data() const { return m_data; } + inline T *data() { return m_data; } +}; + +// matrix with dynamic width and fixed height (so that matrix has dynamic size). +template class DenseStorage +{ + T *m_data; + DenseIndex m_cols; + public: + inline explicit DenseStorage() : m_data(0), m_cols(0) {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(0), m_cols(0) {} + inline DenseStorage(DenseIndex size, DenseIndex, DenseIndex cols) : m_data(internal::conditional_aligned_new_auto(size)), m_cols(cols) + { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN } + inline ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, _Rows*m_cols); } + inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); } + inline static DenseIndex rows(void) {return _Rows;} + inline DenseIndex cols(void) const {return m_cols;} + inline void conservativeResize(DenseIndex size, DenseIndex, DenseIndex cols) + { + m_data = internal::conditional_aligned_realloc_new_auto(m_data, size, _Rows*m_cols); + m_cols = cols; + } + EIGEN_STRONG_INLINE void resize(DenseIndex size, DenseIndex, DenseIndex cols) + { + if(size != _Rows*m_cols) + { + internal::conditional_aligned_delete_auto(m_data, _Rows*m_cols); + if (size) + m_data = internal::conditional_aligned_new_auto(size); + else + m_data = 0; + EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN + } + m_cols = cols; + } + inline const T *data() const { return m_data; } + inline T *data() { return m_data; } +}; + +// matrix with dynamic height and fixed width (so that matrix has dynamic size). +template class DenseStorage +{ + T *m_data; + DenseIndex m_rows; + public: + inline explicit DenseStorage() : m_data(0), m_rows(0) {} + inline DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(0), m_rows(0) {} + inline DenseStorage(DenseIndex size, DenseIndex rows, DenseIndex) : m_data(internal::conditional_aligned_new_auto(size)), m_rows(rows) + { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN } + inline ~DenseStorage() { internal::conditional_aligned_delete_auto(m_data, _Cols*m_rows); } + inline void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); } + inline DenseIndex rows(void) const {return m_rows;} + inline static DenseIndex cols(void) {return _Cols;} + inline void conservativeResize(DenseIndex size, DenseIndex rows, DenseIndex) + { + m_data = internal::conditional_aligned_realloc_new_auto(m_data, size, m_rows*_Cols); + m_rows = rows; + } + EIGEN_STRONG_INLINE void resize(DenseIndex size, DenseIndex rows, DenseIndex) + { + if(size != m_rows*_Cols) + { + internal::conditional_aligned_delete_auto(m_data, _Cols*m_rows); + if (size) + m_data = internal::conditional_aligned_new_auto(size); + else + m_data = 0; + EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN + } + m_rows = rows; + } + inline const T *data() const { return m_data; } + inline T *data() { return m_data; } +}; + +#endif // EIGEN_MATRIX_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Diagonal.h b/asift_match/src/third_party/Eigen/src/Core/Diagonal.h new file mode 100755 index 0000000..e807a49 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Diagonal.h @@ -0,0 +1,227 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2007-2009 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DIAGONAL_H +#define EIGEN_DIAGONAL_H + +/** \class Diagonal + * \ingroup Core_Module + * + * \brief Expression of a diagonal/subdiagonal/superdiagonal in a matrix + * + * \param MatrixType the type of the object in which we are taking a sub/main/super diagonal + * \param DiagIndex the index of the sub/super diagonal. The default is 0 and it means the main diagonal. + * A positive value means a superdiagonal, a negative value means a subdiagonal. + * You can also use Dynamic so the index can be set at runtime. + * + * The matrix is not required to be square. + * + * This class represents an expression of the main diagonal, or any sub/super diagonal + * of a square matrix. It is the return type of MatrixBase::diagonal() and MatrixBase::diagonal(Index) and most of the + * time this is the only way it is used. + * + * \sa MatrixBase::diagonal(), MatrixBase::diagonal(Index) + */ + +namespace internal { +template +struct traits > + : traits +{ + typedef typename nested::type MatrixTypeNested; + typedef typename remove_reference::type _MatrixTypeNested; + typedef typename MatrixType::StorageKind StorageKind; + enum { + AbsDiagIndex = DiagIndex<0 ? -DiagIndex : DiagIndex, // only used if DiagIndex != Dynamic + // FIXME these computations are broken in the case where the matrix is rectangular and DiagIndex!=0 + RowsAtCompileTime = (int(DiagIndex) == Dynamic || int(MatrixType::SizeAtCompileTime) == Dynamic) ? Dynamic + : (EIGEN_SIZE_MIN_PREFER_DYNAMIC(MatrixType::RowsAtCompileTime, + MatrixType::ColsAtCompileTime) - AbsDiagIndex), + ColsAtCompileTime = 1, + MaxRowsAtCompileTime = int(MatrixType::MaxSizeAtCompileTime) == Dynamic ? Dynamic + : DiagIndex == Dynamic ? EIGEN_SIZE_MIN_PREFER_FIXED(MatrixType::MaxRowsAtCompileTime, + MatrixType::MaxColsAtCompileTime) + : (EIGEN_SIZE_MIN_PREFER_FIXED(MatrixType::MaxRowsAtCompileTime, MatrixType::MaxColsAtCompileTime) - AbsDiagIndex), + MaxColsAtCompileTime = 1, + MaskLvalueBit = is_lvalue::value ? LvalueBit : 0, + Flags = (unsigned int)_MatrixTypeNested::Flags & (HereditaryBits | LinearAccessBit | MaskLvalueBit | DirectAccessBit) & ~RowMajorBit, + CoeffReadCost = _MatrixTypeNested::CoeffReadCost, + MatrixTypeOuterStride = outer_stride_at_compile_time::ret, + InnerStrideAtCompileTime = MatrixTypeOuterStride == Dynamic ? Dynamic : MatrixTypeOuterStride+1, + OuterStrideAtCompileTime = 0 + }; +}; +} + +template class Diagonal + : public internal::dense_xpr_base< Diagonal >::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Diagonal) + + inline Diagonal(MatrixType& matrix, Index index = DiagIndex) : m_matrix(matrix), m_index(index) {} + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Diagonal) + + inline Index rows() const + { return m_index.value()<0 ? std::min(m_matrix.cols(),m_matrix.rows()+m_index.value()) : std::min(m_matrix.rows(),m_matrix.cols()-m_index.value()); } + + inline Index cols() const { return 1; } + + inline Index innerStride() const + { + return m_matrix.outerStride() + 1; + } + + inline Index outerStride() const + { + return 0; + } + + inline Scalar& coeffRef(Index row, Index) + { + EIGEN_STATIC_ASSERT_LVALUE(MatrixType) + return m_matrix.const_cast_derived().coeffRef(row+rowOffset(), row+colOffset()); + } + + inline const Scalar& coeffRef(Index row, Index) const + { + return m_matrix.const_cast_derived().coeffRef(row+rowOffset(), row+colOffset()); + } + + inline CoeffReturnType coeff(Index row, Index) const + { + return m_matrix.coeff(row+rowOffset(), row+colOffset()); + } + + inline Scalar& coeffRef(Index index) + { + EIGEN_STATIC_ASSERT_LVALUE(MatrixType) + return m_matrix.const_cast_derived().coeffRef(index+rowOffset(), index+colOffset()); + } + + inline const Scalar& coeffRef(Index index) const + { + return m_matrix.const_cast_derived().coeffRef(index+rowOffset(), index+colOffset()); + } + + inline CoeffReturnType coeff(Index index) const + { + return m_matrix.coeff(index+rowOffset(), index+colOffset()); + } + + protected: + const typename MatrixType::Nested m_matrix; + const internal::variable_if_dynamic m_index; + + private: + // some compilers may fail to optimize std::max etc in case of compile-time constants... + EIGEN_STRONG_INLINE Index absDiagIndex() const { return m_index.value()>0 ? m_index.value() : -m_index.value(); } + EIGEN_STRONG_INLINE Index rowOffset() const { return m_index.value()>0 ? 0 : -m_index.value(); } + EIGEN_STRONG_INLINE Index colOffset() const { return m_index.value()>0 ? m_index.value() : 0; } + // triger a compile time error is someone try to call packet + template typename MatrixType::PacketReturnType packet(Index) const; + template typename MatrixType::PacketReturnType packet(Index,Index) const; +}; + +/** \returns an expression of the main diagonal of the matrix \c *this + * + * \c *this is not required to be square. + * + * Example: \include MatrixBase_diagonal.cpp + * Output: \verbinclude MatrixBase_diagonal.out + * + * \sa class Diagonal */ +template +inline typename MatrixBase::DiagonalReturnType +MatrixBase::diagonal() +{ + return derived(); +} + +/** This is the const version of diagonal(). */ +template +inline const typename MatrixBase::ConstDiagonalReturnType +MatrixBase::diagonal() const +{ + return ConstDiagonalReturnType(derived()); +} + +/** \returns an expression of the \a DiagIndex-th sub or super diagonal of the matrix \c *this + * + * \c *this is not required to be square. + * + * The template parameter \a DiagIndex represent a super diagonal if \a DiagIndex > 0 + * and a sub diagonal otherwise. \a DiagIndex == 0 is equivalent to the main diagonal. + * + * Example: \include MatrixBase_diagonal_int.cpp + * Output: \verbinclude MatrixBase_diagonal_int.out + * + * \sa MatrixBase::diagonal(), class Diagonal */ +template +inline typename MatrixBase::template DiagonalIndexReturnType::Type +MatrixBase::diagonal(Index index) +{ + return typename DiagonalIndexReturnType::Type(derived(), index); +} + +/** This is the const version of diagonal(Index). */ +template +inline typename MatrixBase::template ConstDiagonalIndexReturnType::Type +MatrixBase::diagonal(Index index) const +{ + return typename ConstDiagonalIndexReturnType::Type(derived(), index); +} + +/** \returns an expression of the \a DiagIndex-th sub or super diagonal of the matrix \c *this + * + * \c *this is not required to be square. + * + * The template parameter \a DiagIndex represent a super diagonal if \a DiagIndex > 0 + * and a sub diagonal otherwise. \a DiagIndex == 0 is equivalent to the main diagonal. + * + * Example: \include MatrixBase_diagonal_template_int.cpp + * Output: \verbinclude MatrixBase_diagonal_template_int.out + * + * \sa MatrixBase::diagonal(), class Diagonal */ +template +template +inline typename MatrixBase::template DiagonalIndexReturnType::Type +MatrixBase::diagonal() +{ + return derived(); +} + +/** This is the const version of diagonal(). */ +template +template +inline typename MatrixBase::template ConstDiagonalIndexReturnType::Type +MatrixBase::diagonal() const +{ + return derived(); +} + +#endif // EIGEN_DIAGONAL_H diff --git a/asift_match/src/third_party/Eigen/src/Core/DiagonalMatrix.h b/asift_match/src/third_party/Eigen/src/Core/DiagonalMatrix.h new file mode 100755 index 0000000..f41a74b --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/DiagonalMatrix.h @@ -0,0 +1,306 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// Copyright (C) 2007-2009 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DIAGONALMATRIX_H +#define EIGEN_DIAGONALMATRIX_H + +#ifndef EIGEN_PARSED_BY_DOXYGEN +template +class DiagonalBase : public EigenBase +{ + public: + typedef typename internal::traits::DiagonalVectorType DiagonalVectorType; + typedef typename DiagonalVectorType::Scalar Scalar; + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + + enum { + RowsAtCompileTime = DiagonalVectorType::SizeAtCompileTime, + ColsAtCompileTime = DiagonalVectorType::SizeAtCompileTime, + MaxRowsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime, + MaxColsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime, + IsVectorAtCompileTime = 0, + Flags = 0 + }; + + typedef Matrix DenseMatrixType; + typedef DenseMatrixType DenseType; + typedef DiagonalMatrix PlainObject; + + inline const Derived& derived() const { return *static_cast(this); } + inline Derived& derived() { return *static_cast(this); } + + DenseMatrixType toDenseMatrix() const { return derived(); } + template + void evalTo(MatrixBase &other) const; + template + void addTo(MatrixBase &other) const + { other.diagonal() += diagonal(); } + template + void subTo(MatrixBase &other) const + { other.diagonal() -= diagonal(); } + + inline const DiagonalVectorType& diagonal() const { return derived().diagonal(); } + inline DiagonalVectorType& diagonal() { return derived().diagonal(); } + + inline Index rows() const { return diagonal().size(); } + inline Index cols() const { return diagonal().size(); } + + template + const DiagonalProduct + operator*(const MatrixBase &matrix) const; + + inline const DiagonalWrapper, const DiagonalVectorType> > + inverse() const + { + return diagonal().cwiseInverse(); + } + + #ifdef EIGEN2_SUPPORT + template + bool isApprox(const DiagonalBase& other, typename NumTraits::Real precision = NumTraits::dummy_precision()) const + { + return diagonal().isApprox(other.diagonal(), precision); + } + template + bool isApprox(const MatrixBase& other, typename NumTraits::Real precision = NumTraits::dummy_precision()) const + { + return toDenseMatrix().isApprox(other, precision); + } + #endif +}; + +template +template +void DiagonalBase::evalTo(MatrixBase &other) const +{ + other.setZero(); + other.diagonal() = diagonal(); +} +#endif + +/** \class DiagonalMatrix + * \ingroup Core_Module + * + * \brief Represents a diagonal matrix with its storage + * + * \param _Scalar the type of coefficients + * \param SizeAtCompileTime the dimension of the matrix, or Dynamic + * \param MaxSizeAtCompileTime the dimension of the matrix, or Dynamic. This parameter is optional and defaults + * to SizeAtCompileTime. Most of the time, you do not need to specify it. + * + * \sa class DiagonalWrapper + */ + +namespace internal { +template +struct traits > + : traits > +{ + typedef Matrix<_Scalar,SizeAtCompileTime,1,0,MaxSizeAtCompileTime,1> DiagonalVectorType; + typedef Dense StorageKind; + typedef DenseIndex Index; + enum { + Flags = LvalueBit + }; +}; +} +template +class DiagonalMatrix + : public DiagonalBase > +{ + public: + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef typename internal::traits::DiagonalVectorType DiagonalVectorType; + typedef const DiagonalMatrix& Nested; + typedef _Scalar Scalar; + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + #endif + + protected: + + DiagonalVectorType m_diagonal; + + public: + + /** const version of diagonal(). */ + inline const DiagonalVectorType& diagonal() const { return m_diagonal; } + /** \returns a reference to the stored vector of diagonal coefficients. */ + inline DiagonalVectorType& diagonal() { return m_diagonal; } + + /** Default constructor without initialization */ + inline DiagonalMatrix() {} + + /** Constructs a diagonal matrix with given dimension */ + inline DiagonalMatrix(Index dim) : m_diagonal(dim) {} + + /** 2D constructor. */ + inline DiagonalMatrix(const Scalar& x, const Scalar& y) : m_diagonal(x,y) {} + + /** 3D constructor. */ + inline DiagonalMatrix(const Scalar& x, const Scalar& y, const Scalar& z) : m_diagonal(x,y,z) {} + + /** Copy constructor. */ + template + inline DiagonalMatrix(const DiagonalBase& other) : m_diagonal(other.diagonal()) {} + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** copy constructor. prevent a default copy constructor from hiding the other templated constructor */ + inline DiagonalMatrix(const DiagonalMatrix& other) : m_diagonal(other.diagonal()) {} + #endif + + /** generic constructor from expression of the diagonal coefficients */ + template + explicit inline DiagonalMatrix(const MatrixBase& other) : m_diagonal(other) + {} + + /** Copy operator. */ + template + DiagonalMatrix& operator=(const DiagonalBase& other) + { + m_diagonal = other.diagonal(); + return *this; + } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** This is a special case of the templated operator=. Its purpose is to + * prevent a default operator= from hiding the templated operator=. + */ + DiagonalMatrix& operator=(const DiagonalMatrix& other) + { + m_diagonal = other.diagonal(); + return *this; + } + #endif + + /** Resizes to given size. */ + inline void resize(Index size) { m_diagonal.resize(size); } + /** Sets all coefficients to zero. */ + inline void setZero() { m_diagonal.setZero(); } + /** Resizes and sets all coefficients to zero. */ + inline void setZero(Index size) { m_diagonal.setZero(size); } + /** Sets this matrix to be the identity matrix of the current size. */ + inline void setIdentity() { m_diagonal.setOnes(); } + /** Sets this matrix to be the identity matrix of the given size. */ + inline void setIdentity(Index size) { m_diagonal.setOnes(size); } +}; + +/** \class DiagonalWrapper + * \ingroup Core_Module + * + * \brief Expression of a diagonal matrix + * + * \param _DiagonalVectorType the type of the vector of diagonal coefficients + * + * This class is an expression of a diagonal matrix, but not storing its own vector of diagonal coefficients, + * instead wrapping an existing vector expression. It is the return type of MatrixBase::asDiagonal() + * and most of the time this is the only way that it is used. + * + * \sa class DiagonalMatrix, class DiagonalBase, MatrixBase::asDiagonal() + */ + +namespace internal { +template +struct traits > +{ + typedef _DiagonalVectorType DiagonalVectorType; + typedef typename DiagonalVectorType::Scalar Scalar; + typedef typename DiagonalVectorType::Index Index; + typedef typename DiagonalVectorType::StorageKind StorageKind; + enum { + RowsAtCompileTime = DiagonalVectorType::SizeAtCompileTime, + ColsAtCompileTime = DiagonalVectorType::SizeAtCompileTime, + MaxRowsAtCompileTime = DiagonalVectorType::SizeAtCompileTime, + MaxColsAtCompileTime = DiagonalVectorType::SizeAtCompileTime, + Flags = traits::Flags & LvalueBit + }; +}; +} + +template +class DiagonalWrapper + : public DiagonalBase >, internal::no_assignment_operator +{ + public: + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef _DiagonalVectorType DiagonalVectorType; + typedef DiagonalWrapper Nested; + #endif + + /** Constructor from expression of diagonal coefficients to wrap. */ + inline DiagonalWrapper(const DiagonalVectorType& diagonal) : m_diagonal(diagonal) {} + + /** \returns a const reference to the wrapped expression of diagonal coefficients. */ + const DiagonalVectorType& diagonal() const { return m_diagonal; } + + protected: + const typename DiagonalVectorType::Nested m_diagonal; +}; + +/** \returns a pseudo-expression of a diagonal matrix with *this as vector of diagonal coefficients + * + * \only_for_vectors + * + * Example: \include MatrixBase_asDiagonal.cpp + * Output: \verbinclude MatrixBase_asDiagonal.out + * + * \sa class DiagonalWrapper, class DiagonalMatrix, diagonal(), isDiagonal() + **/ +template +inline const DiagonalWrapper +MatrixBase::asDiagonal() const +{ + return derived(); +} + +/** \returns true if *this is approximately equal to a diagonal matrix, + * within the precision given by \a prec. + * + * Example: \include MatrixBase_isDiagonal.cpp + * Output: \verbinclude MatrixBase_isDiagonal.out + * + * \sa asDiagonal() + */ +template +bool MatrixBase::isDiagonal(RealScalar prec) const +{ + if(cols() != rows()) return false; + RealScalar maxAbsOnDiagonal = static_cast(-1); + for(Index j = 0; j < cols(); ++j) + { + RealScalar absOnDiagonal = internal::abs(coeff(j,j)); + if(absOnDiagonal > maxAbsOnDiagonal) maxAbsOnDiagonal = absOnDiagonal; + } + for(Index j = 0; j < cols(); ++j) + for(Index i = 0; i < j; ++i) + { + if(!internal::isMuchSmallerThan(coeff(i, j), maxAbsOnDiagonal, prec)) return false; + if(!internal::isMuchSmallerThan(coeff(j, i), maxAbsOnDiagonal, prec)) return false; + } + return true; +} + +#endif // EIGEN_DIAGONALMATRIX_H diff --git a/asift_match/src/third_party/Eigen/src/Core/DiagonalProduct.h b/asift_match/src/third_party/Eigen/src/Core/DiagonalProduct.h new file mode 100755 index 0000000..de0c6ed --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/DiagonalProduct.h @@ -0,0 +1,135 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2007-2009 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DIAGONALPRODUCT_H +#define EIGEN_DIAGONALPRODUCT_H + +namespace internal { +template +struct traits > + : traits +{ + typedef typename scalar_product_traits::ReturnType Scalar; + enum { + RowsAtCompileTime = MatrixType::RowsAtCompileTime, + ColsAtCompileTime = MatrixType::ColsAtCompileTime, + MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime, + MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime, + + _StorageOrder = MatrixType::Flags & RowMajorBit ? RowMajor : ColMajor, + _PacketOnDiag = !((int(_StorageOrder) == RowMajor && int(ProductOrder) == OnTheLeft) + ||(int(_StorageOrder) == ColMajor && int(ProductOrder) == OnTheRight)), + _SameTypes = is_same::value, + // FIXME currently we need same types, but in the future the next rule should be the one + //_Vectorizable = bool(int(MatrixType::Flags)&PacketAccessBit) && ((!_PacketOnDiag) || (_SameTypes && bool(int(DiagonalType::Flags)&PacketAccessBit))), + _Vectorizable = bool(int(MatrixType::Flags)&PacketAccessBit) && _SameTypes && ((!_PacketOnDiag) || (bool(int(DiagonalType::Flags)&PacketAccessBit))), + + Flags = (HereditaryBits & (unsigned int)(MatrixType::Flags)) | (_Vectorizable ? PacketAccessBit : 0), + CoeffReadCost = NumTraits::MulCost + MatrixType::CoeffReadCost + DiagonalType::DiagonalVectorType::CoeffReadCost + }; +}; +} + +template +class DiagonalProduct : internal::no_assignment_operator, + public MatrixBase > +{ + public: + + typedef MatrixBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(DiagonalProduct) + + inline DiagonalProduct(const MatrixType& matrix, const DiagonalType& diagonal) + : m_matrix(matrix), m_diagonal(diagonal) + { + eigen_assert(diagonal.diagonal().size() == (ProductOrder == OnTheLeft ? matrix.rows() : matrix.cols())); + } + + inline Index rows() const { return m_matrix.rows(); } + inline Index cols() const { return m_matrix.cols(); } + + const Scalar coeff(Index row, Index col) const + { + return m_diagonal.diagonal().coeff(ProductOrder == OnTheLeft ? row : col) * m_matrix.coeff(row, col); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet(Index row, Index col) const + { + enum { + StorageOrder = Flags & RowMajorBit ? RowMajor : ColMajor + }; + const Index indexInDiagonalVector = ProductOrder == OnTheLeft ? row : col; + + return packet_impl(row,col,indexInDiagonalVector,typename internal::conditional< + ((int(StorageOrder) == RowMajor && int(ProductOrder) == OnTheLeft) + ||(int(StorageOrder) == ColMajor && int(ProductOrder) == OnTheRight)), internal::true_type, internal::false_type>::type()); + } + + protected: + template + EIGEN_STRONG_INLINE PacketScalar packet_impl(Index row, Index col, Index id, internal::true_type) const + { + return internal::pmul(m_matrix.template packet(row, col), + internal::pset1(m_diagonal.diagonal().coeff(id))); + } + + template + EIGEN_STRONG_INLINE PacketScalar packet_impl(Index row, Index col, Index id, internal::false_type) const + { + enum { + InnerSize = (MatrixType::Flags & RowMajorBit) ? MatrixType::ColsAtCompileTime : MatrixType::RowsAtCompileTime, + DiagonalVectorPacketLoadMode = (LoadMode == Aligned && ((InnerSize%16) == 0)) ? Aligned : Unaligned + }; + return internal::pmul(m_matrix.template packet(row, col), + m_diagonal.diagonal().template packet(id)); + } + + const typename MatrixType::Nested m_matrix; + const typename DiagonalType::Nested m_diagonal; +}; + +/** \returns the diagonal matrix product of \c *this by the diagonal matrix \a diagonal. + */ +template +template +inline const DiagonalProduct +MatrixBase::operator*(const DiagonalBase &diagonal) const +{ + return DiagonalProduct(derived(), diagonal.derived()); +} + +/** \returns the diagonal matrix product of \c *this by the matrix \a matrix. + */ +template +template +inline const DiagonalProduct +DiagonalBase::operator*(const MatrixBase &matrix) const +{ + return DiagonalProduct(matrix.derived(), derived()); +} + + +#endif // EIGEN_DIAGONALPRODUCT_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Dot.h b/asift_match/src/third_party/Eigen/src/Core/Dot.h new file mode 100755 index 0000000..6e83191 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Dot.h @@ -0,0 +1,268 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2008, 2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DOT_H +#define EIGEN_DOT_H + +namespace internal { + +// helper function for dot(). The problem is that if we put that in the body of dot(), then upon calling dot +// with mismatched types, the compiler emits errors about failing to instantiate cwiseProduct BEFORE +// looking at the static assertions. Thus this is a trick to get better compile errors. +template +struct dot_nocheck +{ + typedef typename scalar_product_traits::Scalar,typename traits::Scalar>::ReturnType ResScalar; + static inline ResScalar run(const MatrixBase& a, const MatrixBase& b) + { + return a.template binaryExpr::Scalar,typename traits::Scalar> >(b).sum(); + } +}; + +template +struct dot_nocheck +{ + typedef typename scalar_product_traits::Scalar,typename traits::Scalar>::ReturnType ResScalar; + static inline ResScalar run(const MatrixBase& a, const MatrixBase& b) + { + return a.transpose().template binaryExpr::Scalar,typename traits::Scalar> >(b).sum(); + } +}; + +} // end namespace internal + +/** \returns the dot product of *this with other. + * + * \only_for_vectors + * + * \note If the scalar type is complex numbers, then this function returns the hermitian + * (sesquilinear) dot product, conjugate-linear in the first variable and linear in the + * second variable. + * + * \sa squaredNorm(), norm() + */ +template +template +typename internal::scalar_product_traits::Scalar,typename internal::traits::Scalar>::ReturnType +MatrixBase::dot(const MatrixBase& other) const +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived) + EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived,OtherDerived) + typedef internal::scalar_conj_product_op func; + EIGEN_CHECK_BINARY_COMPATIBILIY(func,Scalar,typename OtherDerived::Scalar); + + eigen_assert(size() == other.size()); + + return internal::dot_nocheck::run(*this, other); +} + +#ifdef EIGEN2_SUPPORT +/** \returns the dot product of *this with other, with the Eigen2 convention that the dot product is linear in the first variable + * (conjugating the second variable). Of course this only makes a difference in the complex case. + * + * This method is only available in EIGEN2_SUPPORT mode. + * + * \only_for_vectors + * + * \sa dot() + */ +template +template +typename internal::traits::Scalar +MatrixBase::eigen2_dot(const MatrixBase& other) const +{ + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived) + EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(Derived,OtherDerived) + EIGEN_STATIC_ASSERT((internal::is_same::value), + YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + + eigen_assert(size() == other.size()); + + return internal::dot_nocheck::run(other,*this); +} +#endif + + +//---------- implementation of L2 norm and related functions ---------- + +/** \returns the squared \em l2 norm of *this, i.e., for vectors, the dot product of *this with itself. + * + * \sa dot(), norm() + */ +template +EIGEN_STRONG_INLINE typename NumTraits::Scalar>::Real MatrixBase::squaredNorm() const +{ + return internal::real((*this).cwiseAbs2().sum()); +} + +/** \returns the \em l2 norm of *this, i.e., for vectors, the square root of the dot product of *this with itself. + * + * \sa dot(), squaredNorm() + */ +template +inline typename NumTraits::Scalar>::Real MatrixBase::norm() const +{ + return internal::sqrt(squaredNorm()); +} + +/** \returns an expression of the quotient of *this by its own norm. + * + * \only_for_vectors + * + * \sa norm(), normalize() + */ +template +inline const typename MatrixBase::PlainObject +MatrixBase::normalized() const +{ + typedef typename internal::nested::type Nested; + typedef typename internal::remove_reference::type _Nested; + _Nested n(derived()); + return n / n.norm(); +} + +/** Normalizes the vector, i.e. divides it by its own norm. + * + * \only_for_vectors + * + * \sa norm(), normalized() + */ +template +inline void MatrixBase::normalize() +{ + *this /= norm(); +} + +//---------- implementation of other norms ---------- + +namespace internal { + +template +struct lpNorm_selector +{ + typedef typename NumTraits::Scalar>::Real RealScalar; + inline static RealScalar run(const MatrixBase& m) + { + return pow(m.cwiseAbs().array().pow(p).sum(), RealScalar(1)/p); + } +}; + +template +struct lpNorm_selector +{ + inline static typename NumTraits::Scalar>::Real run(const MatrixBase& m) + { + return m.cwiseAbs().sum(); + } +}; + +template +struct lpNorm_selector +{ + inline static typename NumTraits::Scalar>::Real run(const MatrixBase& m) + { + return m.norm(); + } +}; + +template +struct lpNorm_selector +{ + inline static typename NumTraits::Scalar>::Real run(const MatrixBase& m) + { + return m.cwiseAbs().maxCoeff(); + } +}; + +} // end namespace internal + +/** \returns the \f$ \ell^p \f$ norm of *this, that is, returns the p-th root of the sum of the p-th powers of the absolute values + * of the coefficients of *this. If \a p is the special value \a Eigen::Infinity, this function returns the \f$ \ell^\infty \f$ + * norm, that is the maximum of the absolute values of the coefficients of *this. + * + * \sa norm() + */ +template +template +inline typename NumTraits::Scalar>::Real +MatrixBase::lpNorm() const +{ + return internal::lpNorm_selector::run(*this); +} + +//---------- implementation of isOrthogonal / isUnitary ---------- + +/** \returns true if *this is approximately orthogonal to \a other, + * within the precision given by \a prec. + * + * Example: \include MatrixBase_isOrthogonal.cpp + * Output: \verbinclude MatrixBase_isOrthogonal.out + */ +template +template +bool MatrixBase::isOrthogonal +(const MatrixBase& other, RealScalar prec) const +{ + typename internal::nested::type nested(derived()); + typename internal::nested::type otherNested(other.derived()); + return internal::abs2(nested.dot(otherNested)) <= prec * prec * nested.squaredNorm() * otherNested.squaredNorm(); +} + +/** \returns true if *this is approximately an unitary matrix, + * within the precision given by \a prec. In the case where the \a Scalar + * type is real numbers, a unitary matrix is an orthogonal matrix, whence the name. + * + * \note This can be used to check whether a family of vectors forms an orthonormal basis. + * Indeed, \c m.isUnitary() returns true if and only if the columns (equivalently, the rows) of m form an + * orthonormal basis. + * + * Example: \include MatrixBase_isUnitary.cpp + * Output: \verbinclude MatrixBase_isUnitary.out + */ +template +bool MatrixBase::isUnitary(RealScalar prec) const +{ + typename Derived::Nested nested(derived()); + for(Index i = 0; i < cols(); ++i) + { + if(!internal::isApprox(nested.col(i).squaredNorm(), static_cast(1), prec)) + return false; + for(Index j = 0; j < i; ++j) + if(!internal::isMuchSmallerThan(nested.col(i).dot(nested.col(j)), static_cast(1), prec)) + return false; + } + return true; +} + +#endif // EIGEN_DOT_H diff --git a/asift_match/src/third_party/Eigen/src/Core/EigenBase.h b/asift_match/src/third_party/Eigen/src/Core/EigenBase.h new file mode 100755 index 0000000..0472539 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/EigenBase.h @@ -0,0 +1,172 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Benoit Jacob +// Copyright (C) 2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_EIGENBASE_H +#define EIGEN_EIGENBASE_H + + +/** Common base class for all classes T such that MatrixBase has an operator=(T) and a constructor MatrixBase(T). + * + * In other words, an EigenBase object is an object that can be copied into a MatrixBase. + * + * Besides MatrixBase-derived classes, this also includes special matrix classes such as diagonal matrices, etc. + * + * Notice that this class is trivial, it is only used to disambiguate overloaded functions. + * + * \sa \ref TopicClassHierarchy + */ +template struct EigenBase +{ +// typedef typename internal::plain_matrix_type::type PlainObject; + + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + + /** \returns a reference to the derived object */ + Derived& derived() { return *static_cast(this); } + /** \returns a const reference to the derived object */ + const Derived& derived() const { return *static_cast(this); } + + inline Derived& const_cast_derived() const + { return *static_cast(const_cast(this)); } + inline const Derived& const_derived() const + { return *static_cast(this); } + + /** \returns the number of rows. \sa cols(), RowsAtCompileTime */ + inline Index rows() const { return derived().rows(); } + /** \returns the number of columns. \sa rows(), ColsAtCompileTime*/ + inline Index cols() const { return derived().cols(); } + /** \returns the number of coefficients, which is rows()*cols(). + * \sa rows(), cols(), SizeAtCompileTime. */ + inline Index size() const { return rows() * cols(); } + + /** \internal Don't use it, but do the equivalent: \code dst = *this; \endcode */ + template inline void evalTo(Dest& dst) const + { derived().evalTo(dst); } + + /** \internal Don't use it, but do the equivalent: \code dst += *this; \endcode */ + template inline void addTo(Dest& dst) const + { + // This is the default implementation, + // derived class can reimplement it in a more optimized way. + typename Dest::PlainObject res(rows(),cols()); + evalTo(res); + dst += res; + } + + /** \internal Don't use it, but do the equivalent: \code dst -= *this; \endcode */ + template inline void subTo(Dest& dst) const + { + // This is the default implementation, + // derived class can reimplement it in a more optimized way. + typename Dest::PlainObject res(rows(),cols()); + evalTo(res); + dst -= res; + } + + /** \internal Don't use it, but do the equivalent: \code dst.applyOnTheRight(*this); \endcode */ + template inline void applyThisOnTheRight(Dest& dst) const + { + // This is the default implementation, + // derived class can reimplement it in a more optimized way. + dst = dst * this->derived(); + } + + /** \internal Don't use it, but do the equivalent: \code dst.applyOnTheLeft(*this); \endcode */ + template inline void applyThisOnTheLeft(Dest& dst) const + { + // This is the default implementation, + // derived class can reimplement it in a more optimized way. + dst = this->derived() * dst; + } + +}; + +/*************************************************************************** +* Implementation of matrix base methods +***************************************************************************/ + +/** \brief Copies the generic expression \a other into *this. + * + * \details The expression must provide a (templated) evalTo(Derived& dst) const + * function which does the actual job. In practice, this allows any user to write + * its own special matrix without having to modify MatrixBase + * + * \returns a reference to *this. + */ +template +template +Derived& DenseBase::operator=(const EigenBase &other) +{ + other.derived().evalTo(derived()); + return derived(); +} + +template +template +Derived& DenseBase::operator+=(const EigenBase &other) +{ + other.derived().addTo(derived()); + return derived(); +} + +template +template +Derived& DenseBase::operator-=(const EigenBase &other) +{ + other.derived().subTo(derived()); + return derived(); +} + +/** replaces \c *this by \c *this * \a other. + * + * \returns a reference to \c *this + */ +template +template +inline Derived& +MatrixBase::operator*=(const EigenBase &other) +{ + other.derived().applyThisOnTheRight(derived()); + return derived(); +} + +/** replaces \c *this by \c *this * \a other. It is equivalent to MatrixBase::operator*=() */ +template +template +inline void MatrixBase::applyOnTheRight(const EigenBase &other) +{ + other.derived().applyThisOnTheRight(derived()); +} + +/** replaces \c *this by \c *this * \a other. */ +template +template +inline void MatrixBase::applyOnTheLeft(const EigenBase &other) +{ + other.derived().applyThisOnTheLeft(derived()); +} + +#endif // EIGEN_EIGENBASE_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Flagged.h b/asift_match/src/third_party/Eigen/src/Core/Flagged.h new file mode 100755 index 0000000..458213a --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Flagged.h @@ -0,0 +1,151 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_FLAGGED_H +#define EIGEN_FLAGGED_H + +/** \class Flagged + * \ingroup Core_Module + * + * \brief Expression with modified flags + * + * \param ExpressionType the type of the object of which we are modifying the flags + * \param Added the flags added to the expression + * \param Removed the flags removed from the expression (has priority over Added). + * + * This class represents an expression whose flags have been modified. + * It is the return type of MatrixBase::flagged() + * and most of the time this is the only way it is used. + * + * \sa MatrixBase::flagged() + */ + +namespace internal { +template +struct traits > : traits +{ + enum { Flags = (ExpressionType::Flags | Added) & ~Removed }; +}; +} + +template class Flagged + : public MatrixBase > +{ + public: + + typedef MatrixBase Base; + + EIGEN_DENSE_PUBLIC_INTERFACE(Flagged) + typedef typename internal::conditional::ret, + ExpressionType, const ExpressionType&>::type ExpressionTypeNested; + typedef typename ExpressionType::InnerIterator InnerIterator; + + inline Flagged(const ExpressionType& matrix) : m_matrix(matrix) {} + + inline Index rows() const { return m_matrix.rows(); } + inline Index cols() const { return m_matrix.cols(); } + inline Index outerStride() const { return m_matrix.outerStride(); } + inline Index innerStride() const { return m_matrix.innerStride(); } + + inline CoeffReturnType coeff(Index row, Index col) const + { + return m_matrix.coeff(row, col); + } + + inline CoeffReturnType coeff(Index index) const + { + return m_matrix.coeff(index); + } + + inline const Scalar& coeffRef(Index row, Index col) const + { + return m_matrix.const_cast_derived().coeffRef(row, col); + } + + inline const Scalar& coeffRef(Index index) const + { + return m_matrix.const_cast_derived().coeffRef(index); + } + + inline Scalar& coeffRef(Index row, Index col) + { + return m_matrix.const_cast_derived().coeffRef(row, col); + } + + inline Scalar& coeffRef(Index index) + { + return m_matrix.const_cast_derived().coeffRef(index); + } + + template + inline const PacketScalar packet(Index row, Index col) const + { + return m_matrix.template packet(row, col); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_matrix.const_cast_derived().template writePacket(row, col, x); + } + + template + inline const PacketScalar packet(Index index) const + { + return m_matrix.template packet(index); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_matrix.const_cast_derived().template writePacket(index, x); + } + + const ExpressionType& _expression() const { return m_matrix; } + + template + typename ExpressionType::PlainObject solveTriangular(const MatrixBase& other) const; + + template + void solveTriangularInPlace(const MatrixBase& other) const; + + protected: + ExpressionTypeNested m_matrix; +}; + +/** \returns an expression of *this with added and removed flags + * + * This is mostly for internal use. + * + * \sa class Flagged + */ +template +template +inline const Flagged +DenseBase::flagged() const +{ + return derived(); +} + +#endif // EIGEN_FLAGGED_H diff --git a/asift_match/src/third_party/Eigen/src/Core/ForceAlignedAccess.h b/asift_match/src/third_party/Eigen/src/Core/ForceAlignedAccess.h new file mode 100755 index 0000000..11c1f8f --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/ForceAlignedAccess.h @@ -0,0 +1,157 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_FORCEALIGNEDACCESS_H +#define EIGEN_FORCEALIGNEDACCESS_H + +/** \class ForceAlignedAccess + * \ingroup Core_Module + * + * \brief Enforce aligned packet loads and stores regardless of what is requested + * + * \param ExpressionType the type of the object of which we are forcing aligned packet access + * + * This class is the return type of MatrixBase::forceAlignedAccess() + * and most of the time this is the only way it is used. + * + * \sa MatrixBase::forceAlignedAccess() + */ + +namespace internal { +template +struct traits > : public traits +{}; +} + +template class ForceAlignedAccess + : public internal::dense_xpr_base< ForceAlignedAccess >::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(ForceAlignedAccess) + + inline ForceAlignedAccess(const ExpressionType& matrix) : m_expression(matrix) {} + + inline Index rows() const { return m_expression.rows(); } + inline Index cols() const { return m_expression.cols(); } + inline Index outerStride() const { return m_expression.outerStride(); } + inline Index innerStride() const { return m_expression.innerStride(); } + + inline const CoeffReturnType coeff(Index row, Index col) const + { + return m_expression.coeff(row, col); + } + + inline Scalar& coeffRef(Index row, Index col) + { + return m_expression.const_cast_derived().coeffRef(row, col); + } + + inline const CoeffReturnType coeff(Index index) const + { + return m_expression.coeff(index); + } + + inline Scalar& coeffRef(Index index) + { + return m_expression.const_cast_derived().coeffRef(index); + } + + template + inline const PacketScalar packet(Index row, Index col) const + { + return m_expression.template packet(row, col); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(row, col, x); + } + + template + inline const PacketScalar packet(Index index) const + { + return m_expression.template packet(index); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(index, x); + } + + operator const ExpressionType&() const { return m_expression; } + + protected: + const ExpressionType& m_expression; + + private: + ForceAlignedAccess& operator=(const ForceAlignedAccess&); +}; + +/** \returns an expression of *this with forced aligned access + * \sa forceAlignedAccessIf(),class ForceAlignedAccess + */ +template +inline const ForceAlignedAccess +MatrixBase::forceAlignedAccess() const +{ + return ForceAlignedAccess(derived()); +} + +/** \returns an expression of *this with forced aligned access + * \sa forceAlignedAccessIf(), class ForceAlignedAccess + */ +template +inline ForceAlignedAccess +MatrixBase::forceAlignedAccess() +{ + return ForceAlignedAccess(derived()); +} + +/** \returns an expression of *this with forced aligned access if \a Enable is true. + * \sa forceAlignedAccess(), class ForceAlignedAccess + */ +template +template +inline typename internal::add_const_on_value_type,Derived&>::type>::type +MatrixBase::forceAlignedAccessIf() const +{ + return derived(); +} + +/** \returns an expression of *this with forced aligned access if \a Enable is true. + * \sa forceAlignedAccess(), class ForceAlignedAccess + */ +template +template +inline typename internal::conditional,Derived&>::type +MatrixBase::forceAlignedAccessIf() +{ + return derived(); +} + +#endif // EIGEN_FORCEALIGNEDACCESS_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Functors.h b/asift_match/src/third_party/Eigen/src/Core/Functors.h new file mode 100755 index 0000000..ddfc67d --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Functors.h @@ -0,0 +1,940 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_FUNCTORS_H +#define EIGEN_FUNCTORS_H + +namespace internal { + +// associative functors: + +/** \internal + * \brief Template functor to compute the sum of two scalars + * + * \sa class CwiseBinaryOp, MatrixBase::operator+, class VectorwiseOp, MatrixBase::sum() + */ +template struct scalar_sum_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_sum_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a + b; } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return internal::padd(a,b); } + template + EIGEN_STRONG_INLINE const Scalar predux(const Packet& a) const + { return internal::predux(a); } +}; +template +struct functor_traits > { + enum { + Cost = NumTraits::AddCost, + PacketAccess = packet_traits::HasAdd + }; +}; + +/** \internal + * \brief Template functor to compute the product of two scalars + * + * \sa class CwiseBinaryOp, Cwise::operator*(), class VectorwiseOp, MatrixBase::redux() + */ +template struct scalar_product_op { + enum { + // TODO vectorize mixed product + Vectorizable = is_same::value && packet_traits::HasMul && packet_traits::HasMul + }; + typedef typename scalar_product_traits::ReturnType result_type; + EIGEN_EMPTY_STRUCT_CTOR(scalar_product_op) + EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return a * b; } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return internal::pmul(a,b); } + template + EIGEN_STRONG_INLINE const result_type predux(const Packet& a) const + { return internal::predux_mul(a); } +}; +template +struct functor_traits > { + enum { + Cost = (NumTraits::MulCost + NumTraits::MulCost)/2, // rough estimate! + PacketAccess = scalar_product_op::Vectorizable + }; +}; + +/** \internal + * \brief Template functor to compute the conjugate product of two scalars + * + * This is a short cut for conj(x) * y which is needed for optimization purpose; in Eigen2 support mode, this becomes x * conj(y) + */ +template struct scalar_conj_product_op { + + enum { + Conj = NumTraits::IsComplex + }; + + typedef typename scalar_product_traits::ReturnType result_type; + + EIGEN_EMPTY_STRUCT_CTOR(scalar_conj_product_op) + EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const + { return conj_helper().pmul(a,b); } + + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return conj_helper().pmul(a,b); } +}; +template +struct functor_traits > { + enum { + Cost = NumTraits::MulCost, + PacketAccess = internal::is_same::value && packet_traits::HasMul + }; +}; + +/** \internal + * \brief Template functor to compute the min of two scalars + * + * \sa class CwiseBinaryOp, MatrixBase::cwiseMin, class VectorwiseOp, MatrixBase::minCoeff() + */ +template struct scalar_min_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_min_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return std::min(a, b); } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return internal::pmin(a,b); } + template + EIGEN_STRONG_INLINE const Scalar predux(const Packet& a) const + { return internal::predux_min(a); } +}; +template +struct functor_traits > { + enum { + Cost = NumTraits::AddCost, + PacketAccess = packet_traits::HasMin + }; +}; + +/** \internal + * \brief Template functor to compute the max of two scalars + * + * \sa class CwiseBinaryOp, MatrixBase::cwiseMax, class VectorwiseOp, MatrixBase::maxCoeff() + */ +template struct scalar_max_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_max_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return std::max(a, b); } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return internal::pmax(a,b); } + template + EIGEN_STRONG_INLINE const Scalar predux(const Packet& a) const + { return internal::predux_max(a); } +}; +template +struct functor_traits > { + enum { + Cost = NumTraits::AddCost, + PacketAccess = packet_traits::HasMax + }; +}; + +/** \internal + * \brief Template functor to compute the hypot of two scalars + * + * \sa MatrixBase::stableNorm(), class Redux + */ +template struct scalar_hypot_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_hypot_op) +// typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& _x, const Scalar& _y) const + { + Scalar p = std::max(_x, _y); + Scalar q = std::min(_x, _y); + Scalar qp = q/p; + return p * sqrt(Scalar(1) + qp*qp); + } +}; +template +struct functor_traits > { + enum { Cost = 5 * NumTraits::MulCost, PacketAccess=0 }; +}; + +// other binary functors: + +/** \internal + * \brief Template functor to compute the difference of two scalars + * + * \sa class CwiseBinaryOp, MatrixBase::operator- + */ +template struct scalar_difference_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_difference_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a - b; } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return internal::psub(a,b); } +}; +template +struct functor_traits > { + enum { + Cost = NumTraits::AddCost, + PacketAccess = packet_traits::HasSub + }; +}; + +/** \internal + * \brief Template functor to compute the quotient of two scalars + * + * \sa class CwiseBinaryOp, Cwise::operator/() + */ +template struct scalar_quotient_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_quotient_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a, const Scalar& b) const { return a / b; } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const + { return internal::pdiv(a,b); } +}; +template +struct functor_traits > { + enum { + Cost = 2 * NumTraits::MulCost, + PacketAccess = packet_traits::HasDiv + }; +}; + +// unary functors: + +/** \internal + * \brief Template functor to compute the opposite of a scalar + * + * \sa class CwiseUnaryOp, MatrixBase::operator- + */ +template struct scalar_opposite_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_opposite_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const { return -a; } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const + { return internal::pnegate(a); } +}; +template +struct functor_traits > +{ enum { + Cost = NumTraits::AddCost, + PacketAccess = packet_traits::HasNegate }; +}; + +/** \internal + * \brief Template functor to compute the absolute value of a scalar + * + * \sa class CwiseUnaryOp, Cwise::abs + */ +template struct scalar_abs_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_abs_op) + typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE const result_type operator() (const Scalar& a) const { return abs(a); } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const + { return internal::pabs(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = NumTraits::AddCost, + PacketAccess = packet_traits::HasAbs + }; +}; + +/** \internal + * \brief Template functor to compute the squared absolute value of a scalar + * + * \sa class CwiseUnaryOp, Cwise::abs2 + */ +template struct scalar_abs2_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_abs2_op) + typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE const result_type operator() (const Scalar& a) const { return abs2(a); } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const + { return internal::pmul(a,a); } +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = packet_traits::HasAbs2 }; }; + +/** \internal + * \brief Template functor to compute the conjugate of a complex value + * + * \sa class CwiseUnaryOp, MatrixBase::conjugate() + */ +template struct scalar_conjugate_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_conjugate_op) + EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const { return conj(a); } + template + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const { return internal::pconj(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = NumTraits::IsComplex ? NumTraits::AddCost : 0, + PacketAccess = packet_traits::HasConj + }; +}; + +/** \internal + * \brief Template functor to cast a scalar to another type + * + * \sa class CwiseUnaryOp, MatrixBase::cast() + */ +template +struct scalar_cast_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cast_op) + typedef NewType result_type; + EIGEN_STRONG_INLINE const NewType operator() (const Scalar& a) const { return cast(a); } +}; +template +struct functor_traits > +{ enum { Cost = is_same::value ? 0 : NumTraits::AddCost, PacketAccess = false }; }; + +/** \internal + * \brief Template functor to extract the real part of a complex + * + * \sa class CwiseUnaryOp, MatrixBase::real() + */ +template +struct scalar_real_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_real_op) + typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const { return real(a); } +}; +template +struct functor_traits > +{ enum { Cost = 0, PacketAccess = false }; }; + +/** \internal + * \brief Template functor to extract the imaginary part of a complex + * + * \sa class CwiseUnaryOp, MatrixBase::imag() + */ +template +struct scalar_imag_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_imag_op) + typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const { return imag(a); } +}; +template +struct functor_traits > +{ enum { Cost = 0, PacketAccess = false }; }; + +/** \internal + * \brief Template functor to extract the real part of a complex as a reference + * + * \sa class CwiseUnaryOp, MatrixBase::real() + */ +template +struct scalar_real_ref_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_real_ref_op) + typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE result_type& operator() (const Scalar& a) const { return real_ref(*const_cast(&a)); } +}; +template +struct functor_traits > +{ enum { Cost = 0, PacketAccess = false }; }; + +/** \internal + * \brief Template functor to extract the imaginary part of a complex as a reference + * + * \sa class CwiseUnaryOp, MatrixBase::imag() + */ +template +struct scalar_imag_ref_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_imag_ref_op) + typedef typename NumTraits::Real result_type; + EIGEN_STRONG_INLINE result_type& operator() (const Scalar& a) const { return imag_ref(*const_cast(&a)); } +}; +template +struct functor_traits > +{ enum { Cost = 0, PacketAccess = false }; }; + +/** \internal + * + * \brief Template functor to compute the exponential of a scalar + * + * \sa class CwiseUnaryOp, Cwise::exp() + */ +template struct scalar_exp_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_exp_op) + inline const Scalar operator() (const Scalar& a) const { return exp(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::pexp(a); } +}; +template +struct functor_traits > +{ enum { Cost = 5 * NumTraits::MulCost, PacketAccess = packet_traits::HasExp }; }; + +/** \internal + * + * \brief Template functor to compute the logarithm of a scalar + * + * \sa class CwiseUnaryOp, Cwise::log() + */ +template struct scalar_log_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_log_op) + inline const Scalar operator() (const Scalar& a) const { return log(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::plog(a); } +}; +template +struct functor_traits > +{ enum { Cost = 5 * NumTraits::MulCost, PacketAccess = packet_traits::HasLog }; }; + +/** \internal + * \brief Template functor to multiply a scalar by a fixed other one + * + * \sa class CwiseUnaryOp, MatrixBase::operator*, MatrixBase::operator/ + */ +/* NOTE why doing the pset1() in packetOp *is* an optimization ? + * indeed it seems better to declare m_other as a Packet and do the pset1() once + * in the constructor. However, in practice: + * - GCC does not like m_other as a Packet and generate a load every time it needs it + * - on the other hand GCC is able to moves the pset1() away the loop :) + * - simpler code ;) + * (ICC and gcc 4.4 seems to perform well in both cases, the issue is visible with y = a*x + b*y) + */ +template +struct scalar_multiple_op { + typedef typename packet_traits::type Packet; + // FIXME default copy constructors seems bugged with std::complex<> + EIGEN_STRONG_INLINE scalar_multiple_op(const scalar_multiple_op& other) : m_other(other.m_other) { } + EIGEN_STRONG_INLINE scalar_multiple_op(const Scalar& other) : m_other(other) { } + EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a * m_other; } + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const + { return internal::pmul(a, pset1(m_other)); } + typename add_const_on_value_type::Nested>::type m_other; +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = packet_traits::HasMul }; }; + +template +struct scalar_multiple2_op { + typedef typename scalar_product_traits::ReturnType result_type; + EIGEN_STRONG_INLINE scalar_multiple2_op(const scalar_multiple2_op& other) : m_other(other.m_other) { } + EIGEN_STRONG_INLINE scalar_multiple2_op(const Scalar2& other) : m_other(other) { } + EIGEN_STRONG_INLINE result_type operator() (const Scalar1& a) const { return a * m_other; } + typename add_const_on_value_type::Nested>::type m_other; +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = false }; }; + +template +struct scalar_quotient1_impl { + typedef typename packet_traits::type Packet; + // FIXME default copy constructors seems bugged with std::complex<> + EIGEN_STRONG_INLINE scalar_quotient1_impl(const scalar_quotient1_impl& other) : m_other(other.m_other) { } + EIGEN_STRONG_INLINE scalar_quotient1_impl(const Scalar& other) : m_other(static_cast(1) / other) {} + EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a * m_other; } + EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const + { return internal::pmul(a, pset1(m_other)); } + const Scalar m_other; +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = packet_traits::HasMul }; }; + +template +struct scalar_quotient1_impl { + // FIXME default copy constructors seems bugged with std::complex<> + EIGEN_STRONG_INLINE scalar_quotient1_impl(const scalar_quotient1_impl& other) : m_other(other.m_other) { } + EIGEN_STRONG_INLINE scalar_quotient1_impl(const Scalar& other) : m_other(other) {} + EIGEN_STRONG_INLINE Scalar operator() (const Scalar& a) const { return a / m_other; } + typename add_const_on_value_type::Nested>::type m_other; +}; +template +struct functor_traits > +{ enum { Cost = 2 * NumTraits::MulCost, PacketAccess = false }; }; + +/** \internal + * \brief Template functor to divide a scalar by a fixed other one + * + * This functor is used to implement the quotient of a matrix by + * a scalar where the scalar type is not necessarily a floating point type. + * + * \sa class CwiseUnaryOp, MatrixBase::operator/ + */ +template +struct scalar_quotient1_op : scalar_quotient1_impl::IsInteger > { + EIGEN_STRONG_INLINE scalar_quotient1_op(const Scalar& other) + : scalar_quotient1_impl::IsInteger >(other) {} +}; +template +struct functor_traits > +: functor_traits::IsInteger> > +{}; + +// nullary functors + +template +struct scalar_constant_op { + typedef typename packet_traits::type Packet; + EIGEN_STRONG_INLINE scalar_constant_op(const scalar_constant_op& other) : m_other(other.m_other) { } + EIGEN_STRONG_INLINE scalar_constant_op(const Scalar& other) : m_other(other) { } + template + EIGEN_STRONG_INLINE const Scalar operator() (Index, Index = 0) const { return m_other; } + template + EIGEN_STRONG_INLINE const Packet packetOp(Index, Index = 0) const { return internal::pset1(m_other); } + const Scalar m_other; +}; +template +struct functor_traits > +// FIXME replace this packet test by a safe one +{ enum { Cost = 1, PacketAccess = packet_traits::Vectorizable, IsRepeatable = true }; }; + +template struct scalar_identity_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_identity_op) + template + EIGEN_STRONG_INLINE const Scalar operator() (Index row, Index col) const { return row==col ? Scalar(1) : Scalar(0); } +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::AddCost, PacketAccess = false, IsRepeatable = true }; }; + +template struct linspaced_op_impl; + +// linear access for packet ops: +// 1) initialization +// base = [low, ..., low] + ([step, ..., step] * [-size, ..., 0]) +// 2) each step +// base += [size*step, ..., size*step] +template +struct linspaced_op_impl +{ + typedef typename packet_traits::type Packet; + + linspaced_op_impl(Scalar low, Scalar step) : + m_low(low), m_step(step), + m_packetStep(pset1(packet_traits::size*step)), + m_base(padd(pset1(low),pmul(pset1(step),plset(-packet_traits::size)))) {} + + template + EIGEN_STRONG_INLINE const Scalar operator() (Index i) const { return m_low+i*m_step; } + template + EIGEN_STRONG_INLINE const Packet packetOp(Index) const { return m_base = padd(m_base,m_packetStep); } + + const Scalar m_low; + const Scalar m_step; + const Packet m_packetStep; + mutable Packet m_base; +}; + +// random access for packet ops: +// 1) each step +// [low, ..., low] + ( [step, ..., step] * ( [i, ..., i] + [0, ..., size] ) ) +template +struct linspaced_op_impl +{ + typedef typename packet_traits::type Packet; + + linspaced_op_impl(Scalar low, Scalar step) : + m_low(low), m_step(step), + m_lowPacket(pset1(m_low)), m_stepPacket(pset1(m_step)), m_interPacket(plset(0)) {} + + template + EIGEN_STRONG_INLINE const Scalar operator() (Index i) const { return m_low+i*m_step; } + + template + EIGEN_STRONG_INLINE const Packet packetOp(Index i) const + { return internal::padd(m_lowPacket, pmul(m_stepPacket, padd(pset1(i),m_interPacket))); } + + const Scalar m_low; + const Scalar m_step; + const Packet m_lowPacket; + const Packet m_stepPacket; + const Packet m_interPacket; +}; + +// ----- Linspace functor ---------------------------------------------------------------- + +// Forward declaration (we default to random access which does not really give +// us a speed gain when using packet access but it allows to use the functor in +// nested expressions). +template struct linspaced_op; +template struct functor_traits< linspaced_op > +{ enum { Cost = 1, PacketAccess = packet_traits::HasSetLinear, IsRepeatable = true }; }; +template struct linspaced_op +{ + typedef typename packet_traits::type Packet; + linspaced_op(Scalar low, Scalar high, int num_steps) : impl(low, (high-low)/(num_steps-1)) {} + + template + EIGEN_STRONG_INLINE const Scalar operator() (Index i) const { return impl(i); } + + // We need this function when assigning e.g. a RowVectorXd to a MatrixXd since + // there row==0 and col is used for the actual iteration. + template + EIGEN_STRONG_INLINE const Scalar operator() (Index row, Index col) const + { + eigen_assert(col==0 || row==0); + return impl(col + row); + } + + template + EIGEN_STRONG_INLINE const Packet packetOp(Index i) const { return impl.packetOp(i); } + + // We need this function when assigning e.g. a RowVectorXd to a MatrixXd since + // there row==0 and col is used for the actual iteration. + template + EIGEN_STRONG_INLINE const Packet packetOp(Index row, Index col) const + { + eigen_assert(col==0 || row==0); + return impl(col + row); + } + + // This proxy object handles the actual required temporaries, the different + // implementations (random vs. sequential access) as well as the + // correct piping to size 2/4 packet operations. + const linspaced_op_impl impl; +}; + +// all functors allow linear access, except scalar_identity_op. So we fix here a quick meta +// to indicate whether a functor allows linear access, just always answering 'yes' except for +// scalar_identity_op. +// FIXME move this to functor_traits adding a functor_default +template struct functor_has_linear_access { enum { ret = 1 }; }; +template struct functor_has_linear_access > { enum { ret = 0 }; }; + +// in CwiseBinaryOp, we require the Lhs and Rhs to have the same scalar type, except for multiplication +// where we only require them to have the same _real_ scalar type so one may multiply, say, float by complex. +// FIXME move this to functor_traits adding a functor_default +template struct functor_allows_mixing_real_and_complex { enum { ret = 0 }; }; +template struct functor_allows_mixing_real_and_complex > { enum { ret = 1 }; }; +template struct functor_allows_mixing_real_and_complex > { enum { ret = 1 }; }; + + +/** \internal + * \brief Template functor to add a scalar to a fixed other one + * \sa class CwiseUnaryOp, Array::operator+ + */ +/* If you wonder why doing the pset1() in packetOp() is an optimization check scalar_multiple_op */ +template +struct scalar_add_op { + typedef typename packet_traits::type Packet; + // FIXME default copy constructors seems bugged with std::complex<> + inline scalar_add_op(const scalar_add_op& other) : m_other(other.m_other) { } + inline scalar_add_op(const Scalar& other) : m_other(other) { } + inline Scalar operator() (const Scalar& a) const { return a + m_other; } + inline const Packet packetOp(const Packet& a) const + { return internal::padd(a, pset1(m_other)); } + const Scalar m_other; +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::AddCost, PacketAccess = packet_traits::HasAdd }; }; + +/** \internal + * \brief Template functor to compute the square root of a scalar + * \sa class CwiseUnaryOp, Cwise::sqrt() + */ +template struct scalar_sqrt_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_sqrt_op) + inline const Scalar operator() (const Scalar& a) const { return sqrt(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::psqrt(a); } +}; +template +struct functor_traits > +{ enum { + Cost = 5 * NumTraits::MulCost, + PacketAccess = packet_traits::HasSqrt + }; +}; + +/** \internal + * \brief Template functor to compute the cosine of a scalar + * \sa class CwiseUnaryOp, ArrayBase::cos() + */ +template struct scalar_cos_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cos_op) + inline Scalar operator() (const Scalar& a) const { return cos(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::pcos(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = 5 * NumTraits::MulCost, + PacketAccess = packet_traits::HasCos + }; +}; + +/** \internal + * \brief Template functor to compute the sine of a scalar + * \sa class CwiseUnaryOp, ArrayBase::sin() + */ +template struct scalar_sin_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_sin_op) + inline const Scalar operator() (const Scalar& a) const { return sin(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::psin(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = 5 * NumTraits::MulCost, + PacketAccess = packet_traits::HasSin + }; +}; + + +/** \internal + * \brief Template functor to compute the tan of a scalar + * \sa class CwiseUnaryOp, ArrayBase::tan() + */ +template struct scalar_tan_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_tan_op) + inline const Scalar operator() (const Scalar& a) const { return tan(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::ptan(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = 5 * NumTraits::MulCost, + PacketAccess = packet_traits::HasTan + }; +}; + +/** \internal + * \brief Template functor to compute the arc cosine of a scalar + * \sa class CwiseUnaryOp, ArrayBase::acos() + */ +template struct scalar_acos_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_acos_op) + inline const Scalar operator() (const Scalar& a) const { return acos(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::pacos(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = 5 * NumTraits::MulCost, + PacketAccess = packet_traits::HasACos + }; +}; + +/** \internal + * \brief Template functor to compute the arc sine of a scalar + * \sa class CwiseUnaryOp, ArrayBase::asin() + */ +template struct scalar_asin_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_asin_op) + inline const Scalar operator() (const Scalar& a) const { return acos(a); } + typedef typename packet_traits::type Packet; + inline Packet packetOp(const Packet& a) const { return internal::pacos(a); } +}; +template +struct functor_traits > +{ + enum { + Cost = 5 * NumTraits::MulCost, + PacketAccess = packet_traits::HasASin + }; +}; + +/** \internal + * \brief Template functor to raise a scalar to a power + * \sa class CwiseUnaryOp, Cwise::pow + */ +template +struct scalar_pow_op { + // FIXME default copy constructors seems bugged with std::complex<> + inline scalar_pow_op(const scalar_pow_op& other) : m_exponent(other.m_exponent) { } + inline scalar_pow_op(const Scalar& exponent) : m_exponent(exponent) {} + inline Scalar operator() (const Scalar& a) const { return internal::pow(a, m_exponent); } + const Scalar m_exponent; +}; +template +struct functor_traits > +{ enum { Cost = 5 * NumTraits::MulCost, PacketAccess = false }; }; + +/** \internal + * \brief Template functor to compute the inverse of a scalar + * \sa class CwiseUnaryOp, Cwise::inverse() + */ +template +struct scalar_inverse_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_inverse_op) + inline Scalar operator() (const Scalar& a) const { return Scalar(1)/a; } + template + inline const Packet packetOp(const Packet& a) const + { return internal::pdiv(pset1(Scalar(1)),a); } +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = packet_traits::HasDiv }; }; + +/** \internal + * \brief Template functor to compute the square of a scalar + * \sa class CwiseUnaryOp, Cwise::square() + */ +template +struct scalar_square_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_square_op) + inline Scalar operator() (const Scalar& a) const { return a*a; } + template + inline const Packet packetOp(const Packet& a) const + { return internal::pmul(a,a); } +}; +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = packet_traits::HasMul }; }; + +/** \internal + * \brief Template functor to compute the cube of a scalar + * \sa class CwiseUnaryOp, Cwise::cube() + */ +template +struct scalar_cube_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_cube_op) + inline Scalar operator() (const Scalar& a) const { return a*a*a; } + template + inline const Packet packetOp(const Packet& a) const + { return internal::pmul(a,pmul(a,a)); } +}; +template +struct functor_traits > +{ enum { Cost = 2*NumTraits::MulCost, PacketAccess = packet_traits::HasMul }; }; + +// default functor traits for STL functors: + +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = NumTraits::MulCost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = NumTraits::AddCost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = NumTraits::AddCost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = NumTraits::AddCost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = functor_traits::Cost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = functor_traits::Cost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1 + functor_traits::Cost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 1 + functor_traits::Cost, PacketAccess = false }; }; + +#ifdef EIGEN_STDEXT_SUPPORT + +template +struct functor_traits > +{ enum { Cost = 0, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = 0, PacketAccess = false }; }; + +template +struct functor_traits > > +{ enum { Cost = 0, PacketAccess = false }; }; + +template +struct functor_traits > > +{ enum { Cost = 0, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = functor_traits::Cost + functor_traits::Cost, PacketAccess = false }; }; + +template +struct functor_traits > +{ enum { Cost = functor_traits::Cost + functor_traits::Cost + functor_traits::Cost, PacketAccess = false }; }; + +#endif // EIGEN_STDEXT_SUPPORT + +// allow to add new functors and specializations of functor_traits from outside Eigen. +// this macro is really needed because functor_traits must be specialized after it is declared but before it is used... +#ifdef EIGEN_FUNCTORS_PLUGIN +#include EIGEN_FUNCTORS_PLUGIN +#endif + +} // end namespace internal + +#endif // EIGEN_FUNCTORS_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Fuzzy.h b/asift_match/src/third_party/Eigen/src/Core/Fuzzy.h new file mode 100755 index 0000000..3cd82d8 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Fuzzy.h @@ -0,0 +1,160 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2008 Benoit Jacob +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_FUZZY_H +#define EIGEN_FUZZY_H + +namespace internal +{ + +template::IsInteger> +struct isApprox_selector +{ + static bool run(const Derived& x, const OtherDerived& y, typename Derived::RealScalar prec) + { + const typename internal::nested::type nested(x); + const typename internal::nested::type otherNested(y); + return (nested - otherNested).cwiseAbs2().sum() <= prec * prec * std::min(nested.cwiseAbs2().sum(), otherNested.cwiseAbs2().sum()); + } +}; + +template +struct isApprox_selector +{ + static bool run(const Derived& x, const OtherDerived& y, typename Derived::RealScalar) + { + return x.matrix() == y.matrix(); + } +}; + +template::IsInteger> +struct isMuchSmallerThan_object_selector +{ + static bool run(const Derived& x, const OtherDerived& y, typename Derived::RealScalar prec) + { + return x.cwiseAbs2().sum() <= abs2(prec) * y.cwiseAbs2().sum(); + } +}; + +template +struct isMuchSmallerThan_object_selector +{ + static bool run(const Derived& x, const OtherDerived&, typename Derived::RealScalar) + { + return x.matrix() == Derived::Zero(x.rows(), x.cols()).matrix(); + } +}; + +template::IsInteger> +struct isMuchSmallerThan_scalar_selector +{ + static bool run(const Derived& x, const typename Derived::RealScalar& y, typename Derived::RealScalar prec) + { + return x.cwiseAbs2().sum() <= abs2(prec * y); + } +}; + +template +struct isMuchSmallerThan_scalar_selector +{ + static bool run(const Derived& x, const typename Derived::RealScalar&, typename Derived::RealScalar) + { + return x.matrix() == Derived::Zero(x.rows(), x.cols()).matrix(); + } +}; + +} // end namespace internal + + +/** \returns \c true if \c *this is approximately equal to \a other, within the precision + * determined by \a prec. + * + * \note The fuzzy compares are done multiplicatively. Two vectors \f$ v \f$ and \f$ w \f$ + * are considered to be approximately equal within precision \f$ p \f$ if + * \f[ \Vert v - w \Vert \leqslant p\,\min(\Vert v\Vert, \Vert w\Vert). \f] + * For matrices, the comparison is done using the Hilbert-Schmidt norm (aka Frobenius norm + * L2 norm). + * + * \note Because of the multiplicativeness of this comparison, one can't use this function + * to check whether \c *this is approximately equal to the zero matrix or vector. + * Indeed, \c isApprox(zero) returns false unless \c *this itself is exactly the zero matrix + * or vector. If you want to test whether \c *this is zero, use internal::isMuchSmallerThan(const + * RealScalar&, RealScalar) instead. + * + * \sa internal::isMuchSmallerThan(const RealScalar&, RealScalar) const + */ +template +template +bool DenseBase::isApprox( + const DenseBase& other, + RealScalar prec +) const +{ + return internal::isApprox_selector::run(derived(), other.derived(), prec); +} + +/** \returns \c true if the norm of \c *this is much smaller than \a other, + * within the precision determined by \a prec. + * + * \note The fuzzy compares are done multiplicatively. A vector \f$ v \f$ is + * considered to be much smaller than \f$ x \f$ within precision \f$ p \f$ if + * \f[ \Vert v \Vert \leqslant p\,\vert x\vert. \f] + * + * For matrices, the comparison is done using the Hilbert-Schmidt norm. For this reason, + * the value of the reference scalar \a other should come from the Hilbert-Schmidt norm + * of a reference matrix of same dimensions. + * + * \sa isApprox(), isMuchSmallerThan(const DenseBase&, RealScalar) const + */ +template +bool DenseBase::isMuchSmallerThan( + const typename NumTraits::Real& other, + RealScalar prec +) const +{ + return internal::isMuchSmallerThan_scalar_selector::run(derived(), other, prec); +} + +/** \returns \c true if the norm of \c *this is much smaller than the norm of \a other, + * within the precision determined by \a prec. + * + * \note The fuzzy compares are done multiplicatively. A vector \f$ v \f$ is + * considered to be much smaller than a vector \f$ w \f$ within precision \f$ p \f$ if + * \f[ \Vert v \Vert \leqslant p\,\Vert w\Vert. \f] + * For matrices, the comparison is done using the Hilbert-Schmidt norm. + * + * \sa isApprox(), isMuchSmallerThan(const RealScalar&, RealScalar) const + */ +template +template +bool DenseBase::isMuchSmallerThan( + const DenseBase& other, + RealScalar prec +) const +{ + return internal::isMuchSmallerThan_object_selector::run(derived(), other.derived(), prec); +} + +#endif // EIGEN_FUZZY_H diff --git a/asift_match/src/third_party/Eigen/src/Core/GenericPacketMath.h b/asift_match/src/third_party/Eigen/src/Core/GenericPacketMath.h new file mode 100755 index 0000000..4ba322a --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/GenericPacketMath.h @@ -0,0 +1,339 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_GENERIC_PACKET_MATH_H +#define EIGEN_GENERIC_PACKET_MATH_H + +namespace internal { + +/** \internal + * \file GenericPacketMath.h + * + * Default implementation for types not supported by the vectorization. + * In practice these functions are provided to make easier the writing + * of generic vectorized code. + */ + +#ifndef EIGEN_DEBUG_ALIGNED_LOAD +#define EIGEN_DEBUG_ALIGNED_LOAD +#endif + +#ifndef EIGEN_DEBUG_UNALIGNED_LOAD +#define EIGEN_DEBUG_UNALIGNED_LOAD +#endif + +#ifndef EIGEN_DEBUG_ALIGNED_STORE +#define EIGEN_DEBUG_ALIGNED_STORE +#endif + +#ifndef EIGEN_DEBUG_UNALIGNED_STORE +#define EIGEN_DEBUG_UNALIGNED_STORE +#endif + +struct default_packet_traits +{ + enum { + HasAdd = 1, + HasSub = 1, + HasMul = 1, + HasNegate = 1, + HasAbs = 1, + HasAbs2 = 1, + HasMin = 1, + HasMax = 1, + HasConj = 1, + HasSetLinear = 1, + + HasDiv = 0, + HasSqrt = 0, + HasExp = 0, + HasLog = 0, + HasPow = 0, + + HasSin = 0, + HasCos = 0, + HasTan = 0, + HasASin = 0, + HasACos = 0, + HasATan = 0 + }; +}; + +template struct packet_traits : default_packet_traits +{ + typedef T type; + enum { + Vectorizable = 0, + size = 1, + AlignedOnScalar = 0 + }; + enum { + HasAdd = 0, + HasSub = 0, + HasMul = 0, + HasNegate = 0, + HasAbs = 0, + HasAbs2 = 0, + HasMin = 0, + HasMax = 0, + HasConj = 0, + HasSetLinear = 0 + }; +}; + +/** \internal \returns a + b (coeff-wise) */ +template inline Packet +padd(const Packet& a, + const Packet& b) { return a+b; } + +/** \internal \returns a - b (coeff-wise) */ +template inline Packet +psub(const Packet& a, + const Packet& b) { return a-b; } + +/** \internal \returns -a (coeff-wise) */ +template inline Packet +pnegate(const Packet& a) { return -a; } + +/** \internal \returns conj(a) (coeff-wise) */ +template inline Packet +pconj(const Packet& a) { return conj(a); } + +/** \internal \returns a * b (coeff-wise) */ +template inline Packet +pmul(const Packet& a, + const Packet& b) { return a*b; } + +/** \internal \returns a / b (coeff-wise) */ +template inline Packet +pdiv(const Packet& a, + const Packet& b) { return a/b; } + +/** \internal \returns the min of \a a and \a b (coeff-wise) */ +template inline Packet +pmin(const Packet& a, + const Packet& b) { return std::min(a, b); } + +/** \internal \returns the max of \a a and \a b (coeff-wise) */ +template inline Packet +pmax(const Packet& a, + const Packet& b) { return std::max(a, b); } + +/** \internal \returns the absolute value of \a a */ +template inline Packet +pabs(const Packet& a) { return abs(a); } + +/** \internal \returns the bitwise and of \a a and \a b */ +template inline Packet +pand(const Packet& a, const Packet& b) { return a & b; } + +/** \internal \returns the bitwise or of \a a and \a b */ +template inline Packet +por(const Packet& a, const Packet& b) { return a | b; } + +/** \internal \returns the bitwise xor of \a a and \a b */ +template inline Packet +pxor(const Packet& a, const Packet& b) { return a ^ b; } + +/** \internal \returns the bitwise andnot of \a a and \a b */ +template inline Packet +pandnot(const Packet& a, const Packet& b) { return a & (!b); } + +/** \internal \returns a packet version of \a *from, from must be 16 bytes aligned */ +template inline Packet +pload(const typename unpacket_traits::type* from) { return *from; } + +/** \internal \returns a packet version of \a *from, (un-aligned load) */ +template inline Packet +ploadu(const typename unpacket_traits::type* from) { return *from; } + +/** \internal \returns a packet with elements of \a *from duplicated, e.g.: (from[0],from[0],from[1],from[1]) */ +template inline Packet +ploaddup(const typename unpacket_traits::type* from) { return *from; } + +/** \internal \returns a packet with constant coefficients \a a, e.g.: (a,a,a,a) */ +template inline Packet +pset1(const typename unpacket_traits::type& a) { return a; } + +/** \internal \brief Returns a packet with coefficients (a,a+1,...,a+packet_size-1). */ +template inline typename packet_traits::type +plset(const Scalar& a) { return a; } + +/** \internal copy the packet \a from to \a *to, \a to must be 16 bytes aligned */ +template inline void pstore(Scalar* to, const Packet& from) +{ (*to) = from; } + +/** \internal copy the packet \a from to \a *to, (un-aligned store) */ +template inline void pstoreu(Scalar* to, const Packet& from) +{ (*to) = from; } + +/** \internal tries to do cache prefetching of \a addr */ +template inline void prefetch(const Scalar* addr) +{ +#if !defined(_MSC_VER) +__builtin_prefetch(addr); +#endif +} + +/** \internal \returns the first element of a packet */ +template inline typename unpacket_traits::type pfirst(const Packet& a) +{ return a; } + +/** \internal \returns a packet where the element i contains the sum of the packet of \a vec[i] */ +template inline Packet +preduxp(const Packet* vecs) { return vecs[0]; } + +/** \internal \returns the sum of the elements of \a a*/ +template inline typename unpacket_traits::type predux(const Packet& a) +{ return a; } + +/** \internal \returns the product of the elements of \a a*/ +template inline typename unpacket_traits::type predux_mul(const Packet& a) +{ return a; } + +/** \internal \returns the min of the elements of \a a*/ +template inline typename unpacket_traits::type predux_min(const Packet& a) +{ return a; } + +/** \internal \returns the max of the elements of \a a*/ +template inline typename unpacket_traits::type predux_max(const Packet& a) +{ return a; } + +/** \internal \returns the reversed elements of \a a*/ +template inline Packet preverse(const Packet& a) +{ return a; } + + +/** \internal \returns \a a with real and imaginary part flipped (for complex type only) */ +template inline Packet pcplxflip(const Packet& a) +{ return Packet(imag(a),real(a)); } + +/************************** +* Special math functions +***************************/ + +/** \internal \returns the sine of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet psin(const Packet& a) { return sin(a); } + +/** \internal \returns the cosine of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet pcos(const Packet& a) { return cos(a); } + +/** \internal \returns the tan of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet ptan(const Packet& a) { return tan(a); } + +/** \internal \returns the arc sine of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet pasin(const Packet& a) { return asin(a); } + +/** \internal \returns the arc cosine of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet pacos(const Packet& a) { return acos(a); } + +/** \internal \returns the exp of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet pexp(const Packet& a) { return exp(a); } + +/** \internal \returns the log of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet plog(const Packet& a) { return log(a); } + +/** \internal \returns the square-root of \a a (coeff-wise) */ +template EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS +Packet psqrt(const Packet& a) { return sqrt(a); } + +/*************************************************************************** +* The following functions might not have to be overwritten for vectorized types +***************************************************************************/ + +/** \internal copy a packet with constant coeficient \a a (e.g., [a,a,a,a]) to \a *to. \a to must be 16 bytes aligned */ +// NOTE: this function must really be templated on the packet type (think about different packet types for the same scalar type) +template +inline void pstore1(typename unpacket_traits::type* to, const typename unpacket_traits::type& a) +{ + pstore(to, pset1(a)); +} + +/** \internal \returns a * b + c (coeff-wise) */ +template inline Packet +pmadd(const Packet& a, + const Packet& b, + const Packet& c) +{ return padd(pmul(a, b),c); } + +/** \internal \returns a packet version of \a *from. + * \If LoadMode equals Aligned, \a from must be 16 bytes aligned */ +template +inline Packet ploadt(const typename unpacket_traits::type* from) +{ + if(LoadMode == Aligned) + return pload(from); + else + return ploadu(from); +} + +/** \internal copy the packet \a from to \a *to. + * If StoreMode equals Aligned, \a to must be 16 bytes aligned */ +template +inline void pstoret(Scalar* to, const Packet& from) +{ + if(LoadMode == Aligned) + pstore(to, from); + else + pstoreu(to, from); +} + +/** \internal default implementation of palign() allowing partial specialization */ +template +struct palign_impl +{ + // by default data are aligned, so there is nothing to be done :) + inline static void run(PacketType&, const PacketType&) {} +}; + +/** \internal update \a first using the concatenation of the \a Offset last elements + * of \a first and packet_size minus \a Offset first elements of \a second */ +template +inline void palign(PacketType& first, const PacketType& second) +{ + palign_impl::run(first,second); +} + +/*************************************************************************** +* Fast complex products (GCC generates a function call which is very slow) +***************************************************************************/ + +template<> inline std::complex pmul(const std::complex& a, const std::complex& b) +{ return std::complex(real(a)*real(b) - imag(a)*imag(b), imag(a)*real(b) + real(a)*imag(b)); } + +template<> inline std::complex pmul(const std::complex& a, const std::complex& b) +{ return std::complex(real(a)*real(b) - imag(a)*imag(b), imag(a)*real(b) + real(a)*imag(b)); } + +} // end namespace internal + +#endif // EIGEN_GENERIC_PACKET_MATH_H + diff --git a/asift_match/src/third_party/Eigen/src/Core/GlobalFunctions.h b/asift_match/src/third_party/Eigen/src/Core/GlobalFunctions.h new file mode 100755 index 0000000..144145a --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/GlobalFunctions.h @@ -0,0 +1,95 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2010 Gael Guennebaud +// Copyright (C) 2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_GLOBAL_FUNCTIONS_H +#define EIGEN_GLOBAL_FUNCTIONS_H + +#define EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(NAME,FUNCTOR) \ + template \ + inline const Eigen::CwiseUnaryOp, const Derived> \ + NAME(const Eigen::ArrayBase& x) { \ + return x.derived(); \ + } + +#define EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(NAME,FUNCTOR) \ + \ + template \ + struct NAME##_retval > \ + { \ + typedef const Eigen::CwiseUnaryOp, const Derived> type; \ + }; \ + template \ + struct NAME##_impl > \ + { \ + static inline typename NAME##_retval >::type run(const Eigen::ArrayBase& x) \ + { \ + return x.derived(); \ + } \ + }; + + +namespace std +{ + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(real,scalar_real_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(imag,scalar_imag_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(sin,scalar_sin_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(cos,scalar_cos_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(asin,scalar_asin_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(acos,scalar_acos_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(tan,scalar_tan_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(exp,scalar_exp_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(log,scalar_log_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(abs,scalar_abs_op) + EIGEN_ARRAY_DECLARE_GLOBAL_STD_UNARY(sqrt,scalar_sqrt_op) + + template + inline const Eigen::CwiseUnaryOp, const Derived> + pow(const Eigen::ArrayBase& x, const typename Derived::Scalar& exponent) { \ + return x.derived().pow(exponent); \ + } +} + +namespace Eigen +{ + namespace internal + { + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(real,scalar_real_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(imag,scalar_imag_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(sin,scalar_sin_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(cos,scalar_cos_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(asin,scalar_asin_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(acos,scalar_acos_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(tan,scalar_tan_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(exp,scalar_exp_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(log,scalar_log_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(abs,scalar_abs_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(abs2,scalar_abs2_op) + EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(sqrt,scalar_sqrt_op) + } +} + +// TODO: cleanly disable those functions that are not supported on Array (internal::real_ref, internal::random, internal::isApprox...) + +#endif // EIGEN_GLOBAL_FUNCTIONS_H diff --git a/asift_match/src/third_party/Eigen/src/Core/IO.h b/asift_match/src/third_party/Eigen/src/Core/IO.h new file mode 100755 index 0000000..baaf046 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/IO.h @@ -0,0 +1,259 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2008 Benoit Jacob +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_IO_H +#define EIGEN_IO_H + +enum { DontAlignCols = 1 }; +enum { StreamPrecision = -1, + FullPrecision = -2 }; + +namespace internal { +template +std::ostream & print_matrix(std::ostream & s, const Derived& _m, const IOFormat& fmt); +} + +/** \class IOFormat + * \ingroup Core_Module + * + * \brief Stores a set of parameters controlling the way matrices are printed + * + * List of available parameters: + * - \b precision number of digits for floating point values, or one of the special constants \c StreamPrecision and \c FullPrecision. + * The default is the special value \c StreamPrecision which means to use the + * stream's own precision setting, as set for instance using \c cout.precision(3). The other special value + * \c FullPrecision means that the number of digits will be computed to match the full precision of each floating-point + * type. + * - \b flags an OR-ed combination of flags, the default value is 0, the only currently available flag is \c DontAlignCols which + * allows to disable the alignment of columns, resulting in faster code. + * - \b coeffSeparator string printed between two coefficients of the same row + * - \b rowSeparator string printed between two rows + * - \b rowPrefix string printed at the beginning of each row + * - \b rowSuffix string printed at the end of each row + * - \b matPrefix string printed at the beginning of the matrix + * - \b matSuffix string printed at the end of the matrix + * + * Example: \include IOFormat.cpp + * Output: \verbinclude IOFormat.out + * + * \sa DenseBase::format(), class WithFormat + */ +struct IOFormat +{ + /** Default contructor, see class IOFormat for the meaning of the parameters */ + IOFormat(int _precision = StreamPrecision, int _flags = 0, + const std::string& _coeffSeparator = " ", + const std::string& _rowSeparator = "\n", const std::string& _rowPrefix="", const std::string& _rowSuffix="", + const std::string& _matPrefix="", const std::string& _matSuffix="") + : matPrefix(_matPrefix), matSuffix(_matSuffix), rowPrefix(_rowPrefix), rowSuffix(_rowSuffix), rowSeparator(_rowSeparator), + coeffSeparator(_coeffSeparator), precision(_precision), flags(_flags) + { + rowSpacer = ""; + int i = int(matSuffix.length())-1; + while (i>=0 && matSuffix[i]!='\n') + { + rowSpacer += ' '; + i--; + } + } + std::string matPrefix, matSuffix; + std::string rowPrefix, rowSuffix, rowSeparator, rowSpacer; + std::string coeffSeparator; + int precision; + int flags; +}; + +/** \class WithFormat + * \ingroup Core_Module + * + * \brief Pseudo expression providing matrix output with given format + * + * \param ExpressionType the type of the object on which IO stream operations are performed + * + * This class represents an expression with stream operators controlled by a given IOFormat. + * It is the return type of DenseBase::format() + * and most of the time this is the only way it is used. + * + * See class IOFormat for some examples. + * + * \sa DenseBase::format(), class IOFormat + */ +template +class WithFormat +{ + public: + + WithFormat(const ExpressionType& matrix, const IOFormat& format) + : m_matrix(matrix), m_format(format) + {} + + friend std::ostream & operator << (std::ostream & s, const WithFormat& wf) + { + return internal::print_matrix(s, wf.m_matrix.eval(), wf.m_format); + } + + protected: + const typename ExpressionType::Nested m_matrix; + IOFormat m_format; +}; + +/** \returns a WithFormat proxy object allowing to print a matrix the with given + * format \a fmt. + * + * See class IOFormat for some examples. + * + * \sa class IOFormat, class WithFormat + */ +template +inline const WithFormat +DenseBase::format(const IOFormat& fmt) const +{ + return WithFormat(derived(), fmt); +} + +namespace internal { + +template +struct significant_decimals_default_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline int run() + { + return cast(std::ceil(-log(NumTraits::epsilon())/log(RealScalar(10)))); + } +}; + +template +struct significant_decimals_default_impl +{ + static inline int run() + { + return 0; + } +}; + +template +struct significant_decimals_impl + : significant_decimals_default_impl::IsInteger> +{}; + +/** \internal + * print the matrix \a _m to the output stream \a s using the output format \a fmt */ +template +std::ostream & print_matrix(std::ostream & s, const Derived& _m, const IOFormat& fmt) +{ + if(_m.size() == 0) + { + s << fmt.matPrefix << fmt.matSuffix; + return s; + } + + const typename Derived::Nested m = _m; + typedef typename Derived::Scalar Scalar; + typedef typename Derived::Index Index; + + Index width = 0; + + std::streamsize explicit_precision; + if(fmt.precision == StreamPrecision) + { + explicit_precision = 0; + } + else if(fmt.precision == FullPrecision) + { + if (NumTraits::IsInteger) + { + explicit_precision = 0; + } + else + { + explicit_precision = significant_decimals_impl::run(); + } + } + else + { + explicit_precision = fmt.precision; + } + + bool align_cols = !(fmt.flags & DontAlignCols); + if(align_cols) + { + // compute the largest width + for(Index j = 1; j < m.cols(); ++j) + for(Index i = 0; i < m.rows(); ++i) + { + std::stringstream sstr; + if(explicit_precision) sstr.precision(explicit_precision); + sstr << m.coeff(i,j); + width = std::max(width, Index(sstr.str().length())); + } + } + std::streamsize old_precision = 0; + if(explicit_precision) old_precision = s.precision(explicit_precision); + s << fmt.matPrefix; + for(Index i = 0; i < m.rows(); ++i) + { + if (i) + s << fmt.rowSpacer; + s << fmt.rowPrefix; + if(width) s.width(width); + s << m.coeff(i, 0); + for(Index j = 1; j < m.cols(); ++j) + { + s << fmt.coeffSeparator; + if (width) s.width(width); + s << m.coeff(i, j); + } + s << fmt.rowSuffix; + if( i < m.rows() - 1) + s << fmt.rowSeparator; + } + s << fmt.matSuffix; + if(explicit_precision) s.precision(old_precision); + return s; +} + +} // end namespace internal + +/** \relates DenseBase + * + * Outputs the matrix, to the given stream. + * + * If you wish to print the matrix with a format different than the default, use DenseBase::format(). + * + * It is also possible to change the default format by defining EIGEN_DEFAULT_IO_FORMAT before including Eigen headers. + * If not defined, this will automatically be defined to Eigen::IOFormat(), that is the Eigen::IOFormat with default parameters. + * + * \sa DenseBase::format() + */ +template +std::ostream & operator << +(std::ostream & s, + const DenseBase & m) +{ + return internal::print_matrix(s, m.eval(), EIGEN_DEFAULT_IO_FORMAT); +} + +#endif // EIGEN_IO_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Map.h b/asift_match/src/third_party/Eigen/src/Core/Map.h new file mode 100755 index 0000000..692d0a1 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Map.h @@ -0,0 +1,205 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2007-2010 Benoit Jacob +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_MAP_H +#define EIGEN_MAP_H + +/** \class Map + * \ingroup Core_Module + * + * \brief A matrix or vector expression mapping an existing array of data. + * + * \param PlainObjectType the equivalent matrix type of the mapped data + * \param MapOptions specifies whether the pointer is \c Aligned, or \c Unaligned. + * The default is \c Unaligned. + * \param StrideType optionnally specifies strides. By default, Map assumes the memory layout + * of an ordinary, contiguous array. This can be overridden by specifying strides. + * The type passed here must be a specialization of the Stride template, see examples below. + * + * This class represents a matrix or vector expression mapping an existing array of data. + * It can be used to let Eigen interface without any overhead with non-Eigen data structures, + * such as plain C arrays or structures from other libraries. By default, it assumes that the + * data is laid out contiguously in memory. You can however override this by explicitly specifying + * inner and outer strides. + * + * Here's an example of simply mapping a contiguous array as a \ref TopicStorageOrders "column-major" matrix: + * \include Map_simple.cpp + * Output: \verbinclude Map_simple.out + * + * If you need to map non-contiguous arrays, you can do so by specifying strides: + * + * Here's an example of mapping an array as a vector, specifying an inner stride, that is, the pointer + * increment between two consecutive coefficients. Here, we're specifying the inner stride as a compile-time + * fixed value. + * \include Map_inner_stride.cpp + * Output: \verbinclude Map_inner_stride.out + * + * Here's an example of mapping an array while specifying an outer stride. Here, since we're mapping + * as a column-major matrix, 'outer stride' means the pointer increment between two consecutive columns. + * Here, we're specifying the outer stride as a runtime parameter. Note that here \c OuterStride<> is + * a short version of \c OuterStride because the default template parameter of OuterStride + * is \c Dynamic + * \include Map_outer_stride.cpp + * Output: \verbinclude Map_outer_stride.out + * + * For more details and for an example of specifying both an inner and an outer stride, see class Stride. + * + * \b Tip: to change the array of data mapped by a Map object, you can use the C++ + * placement new syntax: + * + * Example: \include Map_placement_new.cpp + * Output: \verbinclude Map_placement_new.out + * + * This class is the return type of Matrix::Map() but can also be used directly. + * + * \sa Matrix::Map(), \ref TopicStorageOrders + */ + +namespace internal { +template +struct traits > + : public traits +{ + typedef traits TraitsBase; + typedef typename PlainObjectType::Index Index; + typedef typename PlainObjectType::Scalar Scalar; + enum { + InnerStrideAtCompileTime = StrideType::InnerStrideAtCompileTime == 0 + ? int(PlainObjectType::InnerStrideAtCompileTime) + : int(StrideType::InnerStrideAtCompileTime), + OuterStrideAtCompileTime = StrideType::OuterStrideAtCompileTime == 0 + ? int(PlainObjectType::OuterStrideAtCompileTime) + : int(StrideType::OuterStrideAtCompileTime), + HasNoInnerStride = InnerStrideAtCompileTime == 1, + HasNoOuterStride = StrideType::OuterStrideAtCompileTime == 0, + HasNoStride = HasNoInnerStride && HasNoOuterStride, + IsAligned = bool(EIGEN_ALIGN) && ((int(MapOptions)&Aligned)==Aligned), + IsDynamicSize = PlainObjectType::SizeAtCompileTime==Dynamic, + KeepsPacketAccess = bool(HasNoInnerStride) + && ( bool(IsDynamicSize) + || HasNoOuterStride + || ( OuterStrideAtCompileTime!=Dynamic + && ((static_cast(sizeof(Scalar))*OuterStrideAtCompileTime)%16)==0 ) ), + Flags0 = TraitsBase::Flags, + Flags1 = IsAligned ? (int(Flags0) | AlignedBit) : (int(Flags0) & ~AlignedBit), + Flags2 = (bool(HasNoStride) || bool(PlainObjectType::IsVectorAtCompileTime)) + ? int(Flags1) : int(Flags1 & ~LinearAccessBit), + Flags3 = is_lvalue::value ? int(Flags2) : (int(Flags2) & ~LvalueBit), + Flags = KeepsPacketAccess ? int(Flags3) : (int(Flags3) & ~PacketAccessBit) + }; +private: + enum { Options }; // Expressions don't have Options +}; +} + +template class Map + : public MapBase > +{ + public: + + typedef MapBase Base; + + EIGEN_DENSE_PUBLIC_INTERFACE(Map) + + typedef typename Base::PointerType PointerType; +#if EIGEN2_SUPPORT_STAGE <= STAGE30_FULL_EIGEN3_API + typedef const Scalar* PointerArgType; + inline PointerType cast_to_pointer_type(PointerArgType ptr) { return const_cast(ptr); } +#else + typedef PointerType PointerArgType; + inline PointerType cast_to_pointer_type(PointerArgType ptr) { return ptr; } +#endif + + inline Index innerStride() const + { + return StrideType::InnerStrideAtCompileTime != 0 ? m_stride.inner() : 1; + } + + inline Index outerStride() const + { + return StrideType::OuterStrideAtCompileTime != 0 ? m_stride.outer() + : IsVectorAtCompileTime ? this->size() + : int(Flags)&RowMajorBit ? this->cols() + : this->rows(); + } + + /** Constructor in the fixed-size case. + * + * \param data pointer to the array to map + * \param stride optional Stride object, passing the strides. + */ + inline Map(PointerArgType data, const StrideType& stride = StrideType()) + : Base(cast_to_pointer_type(data)), m_stride(stride) + { + PlainObjectType::Base::_check_template_params(); + } + + /** Constructor in the dynamic-size vector case. + * + * \param data pointer to the array to map + * \param size the size of the vector expression + * \param stride optional Stride object, passing the strides. + */ + inline Map(PointerArgType data, Index size, const StrideType& stride = StrideType()) + : Base(cast_to_pointer_type(data), size), m_stride(stride) + { + PlainObjectType::Base::_check_template_params(); + } + + /** Constructor in the dynamic-size matrix case. + * + * \param data pointer to the array to map + * \param rows the number of rows of the matrix expression + * \param cols the number of columns of the matrix expression + * \param stride optional Stride object, passing the strides. + */ + inline Map(PointerArgType data, Index rows, Index cols, const StrideType& stride = StrideType()) + : Base(cast_to_pointer_type(data), rows, cols), m_stride(stride) + { + PlainObjectType::Base::_check_template_params(); + } + + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Map) + + protected: + StrideType m_stride; +}; + +template +inline Array<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> + ::Array(const Scalar *data) +{ + this->_set_noalias(Eigen::Map(data)); +} + +template +inline Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> + ::Matrix(const Scalar *data) +{ + this->_set_noalias(Eigen::Map(data)); +} + +#endif // EIGEN_MAP_H diff --git a/asift_match/src/third_party/Eigen/src/Core/MapBase.h b/asift_match/src/third_party/Eigen/src/Core/MapBase.h new file mode 100755 index 0000000..a259e3a --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/MapBase.h @@ -0,0 +1,255 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2007-2010 Benoit Jacob +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_MAPBASE_H +#define EIGEN_MAPBASE_H + +#define EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) \ + EIGEN_STATIC_ASSERT((int(internal::traits::Flags) & LinearAccessBit) || Derived::IsVectorAtCompileTime, \ + YOU_ARE_TRYING_TO_USE_AN_INDEX_BASED_ACCESSOR_ON_AN_EXPRESSION_THAT_DOES_NOT_SUPPORT_THAT) + + +/** \class MapBase + * \ingroup Core_Module + * + * \brief Base class for Map and Block expression with direct access + * + * \sa class Map, class Block + */ +template class MapBase + : public internal::dense_xpr_base::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + enum { + RowsAtCompileTime = internal::traits::RowsAtCompileTime, + ColsAtCompileTime = internal::traits::ColsAtCompileTime, + SizeAtCompileTime = Base::SizeAtCompileTime + }; + + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + typedef typename NumTraits::Real RealScalar; + typedef typename internal::conditional< + bool(internal::is_lvalue::value), + Scalar *, + const Scalar *>::type + PointerType; + + using Base::derived; +// using Base::RowsAtCompileTime; +// using Base::ColsAtCompileTime; +// using Base::SizeAtCompileTime; + using Base::MaxRowsAtCompileTime; + using Base::MaxColsAtCompileTime; + using Base::MaxSizeAtCompileTime; + using Base::IsVectorAtCompileTime; + using Base::Flags; + using Base::IsRowMajor; + + using Base::rows; + using Base::cols; + using Base::size; + using Base::coeff; + using Base::coeffRef; + using Base::lazyAssign; + using Base::eval; + + using Base::innerStride; + using Base::outerStride; + using Base::rowStride; + using Base::colStride; + + // bug 217 - compile error on ICC 11.1 + using Base::operator=; + + typedef typename Base::CoeffReturnType CoeffReturnType; + + inline Index rows() const { return m_rows.value(); } + inline Index cols() const { return m_cols.value(); } + + /** Returns a pointer to the first coefficient of the matrix or vector. + * + * \note When addressing this data, make sure to honor the strides returned by innerStride() and outerStride(). + * + * \sa innerStride(), outerStride() + */ + inline const Scalar* data() const { return m_data; } + + inline const Scalar& coeff(Index row, Index col) const + { + return m_data[col * colStride() + row * rowStride()]; + } + + inline const Scalar& coeff(Index index) const + { + EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) + return m_data[index * innerStride()]; + } + + inline const Scalar& coeffRef(Index row, Index col) const + { + return this->m_data[col * colStride() + row * rowStride()]; + } + + inline const Scalar& coeffRef(Index index) const + { + EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) + return this->m_data[index * innerStride()]; + } + + template + inline PacketScalar packet(Index row, Index col) const + { + return internal::ploadt + (m_data + (col * colStride() + row * rowStride())); + } + + template + inline PacketScalar packet(Index index) const + { + EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) + return internal::ploadt(m_data + index * innerStride()); + } + + inline MapBase(PointerType data) : m_data(data), m_rows(RowsAtCompileTime), m_cols(ColsAtCompileTime) + { + EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) + checkSanity(); + } + + inline MapBase(PointerType data, Index size) + : m_data(data), + m_rows(RowsAtCompileTime == Dynamic ? size : Index(RowsAtCompileTime)), + m_cols(ColsAtCompileTime == Dynamic ? size : Index(ColsAtCompileTime)) + { + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) + eigen_assert(size >= 0); + eigen_assert(data == 0 || SizeAtCompileTime == Dynamic || SizeAtCompileTime == size); + checkSanity(); + } + + inline MapBase(PointerType data, Index rows, Index cols) + : m_data(data), m_rows(rows), m_cols(cols) + { + eigen_assert( (data == 0) + || ( rows >= 0 && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == rows) + && cols >= 0 && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == cols))); + checkSanity(); + } + + protected: + + void checkSanity() const + { + EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(internal::traits::Flags&PacketAccessBit, + internal::inner_stride_at_compile_time::ret==1), + PACKET_ACCESS_REQUIRES_TO_HAVE_INNER_STRIDE_FIXED_TO_1); + eigen_assert(EIGEN_IMPLIES(internal::traits::Flags&AlignedBit, (size_t(m_data) % (sizeof(Scalar)*internal::packet_traits::size)) == 0) + && "data is not aligned"); + } + + PointerType m_data; + const internal::variable_if_dynamic m_rows; + const internal::variable_if_dynamic m_cols; +}; + +template class MapBase + : public MapBase +{ + public: + + typedef MapBase Base; + + typedef typename Base::Scalar Scalar; + typedef typename Base::PacketScalar PacketScalar; + typedef typename Base::Index Index; + typedef typename Base::PointerType PointerType; + + using Base::derived; + using Base::rows; + using Base::cols; + using Base::size; + using Base::coeff; + using Base::coeffRef; + + using Base::innerStride; + using Base::outerStride; + using Base::rowStride; + using Base::colStride; + + typedef typename internal::conditional< + internal::is_lvalue::value, + Scalar, + const Scalar + >::type ScalarWithConstIfNotLvalue; + + inline const Scalar* data() const { return this->m_data; } + inline ScalarWithConstIfNotLvalue* data() { return this->m_data; } // no const-cast here so non-const-correct code will give a compile error + + inline ScalarWithConstIfNotLvalue& coeffRef(Index row, Index col) + { + return this->m_data[col * colStride() + row * rowStride()]; + } + + inline ScalarWithConstIfNotLvalue& coeffRef(Index index) + { + EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) + return this->m_data[index * innerStride()]; + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + internal::pstoret + (this->m_data + (col * colStride() + row * rowStride()), x); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived) + internal::pstoret + (this->m_data + index * innerStride(), x); + } + + inline MapBase(PointerType data) : Base(data) {} + inline MapBase(PointerType data, Index size) : Base(data, size) {} + inline MapBase(PointerType data, Index rows, Index cols) : Base(data, rows, cols) {} + + Derived& operator=(const MapBase& other) + { + Base::Base::operator=(other); + return derived(); + } + + using Base::Base::operator=; +}; + + +#endif // EIGEN_MAPBASE_H diff --git a/asift_match/src/third_party/Eigen/src/Core/MathFunctions.h b/asift_match/src/third_party/Eigen/src/Core/MathFunctions.h new file mode 100755 index 0000000..2760e67 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/MathFunctions.h @@ -0,0 +1,831 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_MATHFUNCTIONS_H +#define EIGEN_MATHFUNCTIONS_H + +namespace internal { + +/** \internal \struct global_math_functions_filtering_base + * + * What it does: + * Defines a typedef 'type' as follows: + * - if type T has a member typedef Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl, then + * global_math_functions_filtering_base::type is a typedef for it. + * - otherwise, global_math_functions_filtering_base::type is a typedef for T. + * + * How it's used: + * To allow to defined the global math functions (like sin...) in certain cases, like the Array expressions. + * When you do sin(array1+array2), the object array1+array2 has a complicated expression type, all what you want to know + * is that it inherits ArrayBase. So we implement a partial specialization of sin_impl for ArrayBase. + * So we must make sure to use sin_impl > and not sin_impl, otherwise our partial specialization + * won't be used. How does sin know that? That's exactly what global_math_functions_filtering_base tells it. + * + * How it's implemented: + * SFINAE in the style of enable_if. Highly susceptible of breaking compilers. With GCC, it sure does work, but if you replace + * the typename dummy by an integer template parameter, it doesn't work anymore! + */ + +template +struct global_math_functions_filtering_base +{ + typedef T type; +}; + +template struct always_void { typedef void type; }; + +template +struct global_math_functions_filtering_base + ::type + > +{ + typedef typename T::Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl type; +}; + +#define EIGEN_MATHFUNC_IMPL(func, scalar) func##_impl::type> +#define EIGEN_MATHFUNC_RETVAL(func, scalar) typename func##_retval::type>::type + + +/**************************************************************************** +* Implementation of real * +****************************************************************************/ + +template +struct real_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + return x; + } +}; + +template +struct real_impl > +{ + static inline RealScalar run(const std::complex& x) + { + return std::real(x); + } +}; + +template +struct real_retval +{ + typedef typename NumTraits::Real type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(real, Scalar) real(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(real, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of imag * +****************************************************************************/ + +template +struct imag_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar&) + { + return RealScalar(0); + } +}; + +template +struct imag_impl > +{ + static inline RealScalar run(const std::complex& x) + { + return std::imag(x); + } +}; + +template +struct imag_retval +{ + typedef typename NumTraits::Real type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(imag, Scalar) imag(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(imag, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of real_ref * +****************************************************************************/ + +template +struct real_ref_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar& run(Scalar& x) + { + return reinterpret_cast(&x)[0]; + } + static inline const RealScalar& run(const Scalar& x) + { + return reinterpret_cast(&x)[0]; + } +}; + +template +struct real_ref_retval +{ + typedef typename NumTraits::Real & type; +}; + +template +inline typename add_const_on_value_type< EIGEN_MATHFUNC_RETVAL(real_ref, Scalar) >::type real_ref(const Scalar& x) +{ + return real_ref_impl::run(x); +} + +template +inline EIGEN_MATHFUNC_RETVAL(real_ref, Scalar) real_ref(Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(real_ref, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of imag_ref * +****************************************************************************/ + +template +struct imag_ref_default_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar& run(Scalar& x) + { + return reinterpret_cast(&x)[1]; + } + static inline const RealScalar& run(const Scalar& x) + { + return reinterpret_cast(&x)[1]; + } +}; + +template +struct imag_ref_default_impl +{ + static inline Scalar run(Scalar&) + { + return Scalar(0); + } + static inline const Scalar run(const Scalar&) + { + return Scalar(0); + } +}; + +template +struct imag_ref_impl : imag_ref_default_impl::IsComplex> {}; + +template +struct imag_ref_retval +{ + typedef typename NumTraits::Real & type; +}; + +template +inline typename add_const_on_value_type< EIGEN_MATHFUNC_RETVAL(imag_ref, Scalar) >::type imag_ref(const Scalar& x) +{ + return imag_ref_impl::run(x); +} + +template +inline EIGEN_MATHFUNC_RETVAL(imag_ref, Scalar) imag_ref(Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(imag_ref, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of conj * +****************************************************************************/ + +template +struct conj_impl +{ + static inline Scalar run(const Scalar& x) + { + return x; + } +}; + +template +struct conj_impl > +{ + static inline std::complex run(const std::complex& x) + { + return std::conj(x); + } +}; + +template +struct conj_retval +{ + typedef Scalar type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(conj, Scalar) conj(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(conj, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of abs * +****************************************************************************/ + +template +struct abs_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + return std::abs(x); + } +}; + +template +struct abs_retval +{ + typedef typename NumTraits::Real type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(abs, Scalar) abs(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(abs, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of abs2 * +****************************************************************************/ + +template +struct abs2_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + return x*x; + } +}; + +template +struct abs2_impl > +{ + static inline RealScalar run(const std::complex& x) + { + return std::norm(x); + } +}; + +template +struct abs2_retval +{ + typedef typename NumTraits::Real type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(abs2, Scalar) abs2(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(abs2, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of norm1 * +****************************************************************************/ + +template +struct norm1_default_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x) + { + return abs(real(x)) + abs(imag(x)); + } +}; + +template +struct norm1_default_impl +{ + static inline Scalar run(const Scalar& x) + { + return abs(x); + } +}; + +template +struct norm1_impl : norm1_default_impl::IsComplex> {}; + +template +struct norm1_retval +{ + typedef typename NumTraits::Real type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(norm1, Scalar) norm1(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(norm1, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of hypot * +****************************************************************************/ + +template +struct hypot_impl +{ + typedef typename NumTraits::Real RealScalar; + static inline RealScalar run(const Scalar& x, const Scalar& y) + { + RealScalar _x = abs(x); + RealScalar _y = abs(y); + RealScalar p = std::max(_x, _y); + RealScalar q = std::min(_x, _y); + RealScalar qp = q/p; + return p * sqrt(RealScalar(1) + qp*qp); + } +}; + +template +struct hypot_retval +{ + typedef typename NumTraits::Real type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(hypot, Scalar) hypot(const Scalar& x, const Scalar& y) +{ + return EIGEN_MATHFUNC_IMPL(hypot, Scalar)::run(x, y); +} + +/**************************************************************************** +* Implementation of cast * +****************************************************************************/ + +template +struct cast_impl +{ + static inline NewType run(const OldType& x) + { + return static_cast(x); + } +}; + +// here, for once, we're plainly returning NewType: we don't want cast to do weird things. + +template +inline NewType cast(const OldType& x) +{ + return cast_impl::run(x); +} + +/**************************************************************************** +* Implementation of sqrt * +****************************************************************************/ + +template +struct sqrt_default_impl +{ + static inline Scalar run(const Scalar& x) + { + return std::sqrt(x); + } +}; + +template +struct sqrt_default_impl +{ + static inline Scalar run(const Scalar&) + { +#ifdef EIGEN2_SUPPORT + eigen_assert(!NumTraits::IsInteger); +#else + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar) +#endif + return Scalar(0); + } +}; + +template +struct sqrt_impl : sqrt_default_impl::IsInteger> {}; + +template +struct sqrt_retval +{ + typedef Scalar type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(sqrt, Scalar) sqrt(const Scalar& x) +{ + return EIGEN_MATHFUNC_IMPL(sqrt, Scalar)::run(x); +} + +/**************************************************************************** +* Implementation of standard unary real functions (exp, log, sin, cos, ... * +****************************************************************************/ + +// This macro instanciate all the necessary template mechanism which is common to all unary real functions. +#define EIGEN_MATHFUNC_STANDARD_REAL_UNARY(NAME) \ + template struct NAME##_default_impl { \ + static inline Scalar run(const Scalar& x) { return std::NAME(x); } \ + }; \ + template struct NAME##_default_impl { \ + static inline Scalar run(const Scalar&) { \ + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar) \ + return Scalar(0); \ + } \ + }; \ + template struct NAME##_impl \ + : NAME##_default_impl::IsInteger> \ + {}; \ + template struct NAME##_retval { typedef Scalar type; }; \ + template \ + inline EIGEN_MATHFUNC_RETVAL(NAME, Scalar) NAME(const Scalar& x) { \ + return EIGEN_MATHFUNC_IMPL(NAME, Scalar)::run(x); \ + } + +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(exp) +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(log) +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(sin) +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(cos) +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(tan) +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(asin) +EIGEN_MATHFUNC_STANDARD_REAL_UNARY(acos) + +/**************************************************************************** +* Implementation of atan2 * +****************************************************************************/ + +template +struct atan2_default_impl +{ + typedef Scalar retval; + static inline Scalar run(const Scalar& x, const Scalar& y) + { + return std::atan2(x, y); + } +}; + +template +struct atan2_default_impl +{ + static inline Scalar run(const Scalar&, const Scalar&) + { + EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar) + return Scalar(0); + } +}; + +template +struct atan2_impl : atan2_default_impl::IsInteger> {}; + +template +struct atan2_retval +{ + typedef Scalar type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(atan2, Scalar) atan2(const Scalar& x, const Scalar& y) +{ + return EIGEN_MATHFUNC_IMPL(atan2, Scalar)::run(x, y); +} + +/**************************************************************************** +* Implementation of pow * +****************************************************************************/ + +template +struct pow_default_impl +{ + typedef Scalar retval; + static inline Scalar run(const Scalar& x, const Scalar& y) + { + return std::pow(x, y); + } +}; + +template +struct pow_default_impl +{ + static inline Scalar run(Scalar x, Scalar y) + { + Scalar res = 1; + eigen_assert(!NumTraits::IsSigned || y >= 0); + if(y & 1) res *= x; + y >>= 1; + while(y) + { + x *= x; + if(y&1) res *= x; + y >>= 1; + } + return res; + } +}; + +template +struct pow_impl : pow_default_impl::IsInteger> {}; + +template +struct pow_retval +{ + typedef Scalar type; +}; + +template +inline EIGEN_MATHFUNC_RETVAL(pow, Scalar) pow(const Scalar& x, const Scalar& y) +{ + return EIGEN_MATHFUNC_IMPL(pow, Scalar)::run(x, y); +} + +/**************************************************************************** +* Implementation of random * +****************************************************************************/ + +template +struct random_default_impl {}; + +template +struct random_impl : random_default_impl::IsComplex, NumTraits::IsInteger> {}; + +template +struct random_retval +{ + typedef Scalar type; +}; + +template inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random(const Scalar& x, const Scalar& y); +template inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random(); + +template +struct random_default_impl +{ + static inline Scalar run(const Scalar& x, const Scalar& y) + { + return x + (y-x) * Scalar(std::rand()) / Scalar(RAND_MAX); + } + static inline Scalar run() + { + return run(Scalar(NumTraits::IsSigned ? -1 : 0), Scalar(1)); + } +}; + +enum { + floor_log2_terminate, + floor_log2_move_up, + floor_log2_move_down, + floor_log2_bogus +}; + +template struct floor_log2_selector +{ + enum { middle = (lower + upper) / 2, + value = (upper <= lower + 1) ? int(floor_log2_terminate) + : (n < (1 << middle)) ? int(floor_log2_move_down) + : (n==0) ? int(floor_log2_bogus) + : int(floor_log2_move_up) + }; +}; + +template::value> +struct floor_log2 {}; + +template +struct floor_log2 +{ + enum { value = floor_log2::middle>::value }; +}; + +template +struct floor_log2 +{ + enum { value = floor_log2::middle, upper>::value }; +}; + +template +struct floor_log2 +{ + enum { value = (n >= ((unsigned int)(1) << (lower+1))) ? lower+1 : lower }; +}; + +template +struct floor_log2 +{ + // no value, error at compile time +}; + +template +struct random_default_impl +{ + typedef typename NumTraits::NonInteger NonInteger; + + static inline Scalar run(const Scalar& x, const Scalar& y) + { + return x + Scalar((NonInteger(y)-x+1) * std::rand() / (RAND_MAX + NonInteger(1))); + } + + static inline Scalar run() + { +#ifdef EIGEN_MAKING_DOCS + return run(Scalar(NumTraits::IsSigned ? -10 : 0), Scalar(10)); +#else + enum { rand_bits = floor_log2<(unsigned int)(RAND_MAX)+1>::value, + scalar_bits = sizeof(Scalar) * CHAR_BIT, + shift = EIGEN_PLAIN_ENUM_MAX(0, int(rand_bits) - int(scalar_bits)) + }; + Scalar x = Scalar(std::rand() >> shift); + Scalar offset = NumTraits::IsSigned ? Scalar(1 << (rand_bits-1)) : Scalar(0); + return x - offset; +#endif + } +}; + +template +struct random_default_impl +{ + static inline Scalar run(const Scalar& x, const Scalar& y) + { + return Scalar(random(real(x), real(y)), + random(imag(x), imag(y))); + } + static inline Scalar run() + { + typedef typename NumTraits::Real RealScalar; + return Scalar(random(), random()); + } +}; + +template +inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random(const Scalar& x, const Scalar& y) +{ + return EIGEN_MATHFUNC_IMPL(random, Scalar)::run(x, y); +} + +template +inline EIGEN_MATHFUNC_RETVAL(random, Scalar) random() +{ + return EIGEN_MATHFUNC_IMPL(random, Scalar)::run(); +} + +/**************************************************************************** +* Implementation of fuzzy comparisons * +****************************************************************************/ + +template +struct scalar_fuzzy_default_impl {}; + +template +struct scalar_fuzzy_default_impl +{ + typedef typename NumTraits::Real RealScalar; + template + static inline bool isMuchSmallerThan(const Scalar& x, const OtherScalar& y, const RealScalar& prec) + { + return abs(x) <= abs(y) * prec; + } + static inline bool isApprox(const Scalar& x, const Scalar& y, const RealScalar& prec) + { + return abs(x - y) <= std::min(abs(x), abs(y)) * prec; + } + static inline bool isApproxOrLessThan(const Scalar& x, const Scalar& y, const RealScalar& prec) + { + return x <= y || isApprox(x, y, prec); + } +}; + +template +struct scalar_fuzzy_default_impl +{ + typedef typename NumTraits::Real RealScalar; + template + static inline bool isMuchSmallerThan(const Scalar& x, const Scalar&, const RealScalar&) + { + return x == Scalar(0); + } + static inline bool isApprox(const Scalar& x, const Scalar& y, const RealScalar&) + { + return x == y; + } + static inline bool isApproxOrLessThan(const Scalar& x, const Scalar& y, const RealScalar&) + { + return x <= y; + } +}; + +template +struct scalar_fuzzy_default_impl +{ + typedef typename NumTraits::Real RealScalar; + template + static inline bool isMuchSmallerThan(const Scalar& x, const OtherScalar& y, const RealScalar& prec) + { + return abs2(x) <= abs2(y) * prec * prec; + } + static inline bool isApprox(const Scalar& x, const Scalar& y, const RealScalar& prec) + { + return abs2(x - y) <= std::min(abs2(x), abs2(y)) * prec * prec; + } +}; + +template +struct scalar_fuzzy_impl : scalar_fuzzy_default_impl::IsComplex, NumTraits::IsInteger> {}; + +template +inline bool isMuchSmallerThan(const Scalar& x, const OtherScalar& y, + typename NumTraits::Real precision = NumTraits::dummy_precision()) +{ + return scalar_fuzzy_impl::template isMuchSmallerThan(x, y, precision); +} + +template +inline bool isApprox(const Scalar& x, const Scalar& y, + typename NumTraits::Real precision = NumTraits::dummy_precision()) +{ + return scalar_fuzzy_impl::isApprox(x, y, precision); +} + +template +inline bool isApproxOrLessThan(const Scalar& x, const Scalar& y, + typename NumTraits::Real precision = NumTraits::dummy_precision()) +{ + return scalar_fuzzy_impl::isApproxOrLessThan(x, y, precision); +} + +/****************************************** +*** The special case of the bool type *** +******************************************/ + +template<> struct random_impl +{ + static inline bool run() + { + return random(0,1)==0 ? false : true; + } +}; + +template<> struct scalar_fuzzy_impl +{ + typedef bool RealScalar; + + template + static inline bool isMuchSmallerThan(const bool& x, const bool&, const bool&) + { + return !x; + } + + static inline bool isApprox(bool x, bool y, bool) + { + return x == y; + } + + static inline bool isApproxOrLessThan(const bool& x, const bool& y, const bool&) + { + return (!x) || y; + } + +}; + +} // end namespace internal + +#endif // EIGEN_MATHFUNCTIONS_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Matrix.h b/asift_match/src/third_party/Eigen/src/Core/Matrix.h new file mode 100755 index 0000000..8ae55da --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Matrix.h @@ -0,0 +1,439 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2010 Benoit Jacob +// Copyright (C) 2008-2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_MATRIX_H +#define EIGEN_MATRIX_H + +/** \class Matrix + * \ingroup Core_Module + * + * \brief The matrix class, also used for vectors and row-vectors + * + * The %Matrix class is the work-horse for all \em dense (\ref dense "note") matrices and vectors within Eigen. + * Vectors are matrices with one column, and row-vectors are matrices with one row. + * + * The %Matrix class encompasses \em both fixed-size and dynamic-size objects (\ref fixedsize "note"). + * + * The first three template parameters are required: + * \tparam _Scalar \anchor matrix_tparam_scalar Numeric type, e.g. float, double, int or std::complex. + * User defined sclar types are supported as well (see \ref user_defined_scalars "here"). + * \tparam _Rows Number of rows, or \b Dynamic + * \tparam _Cols Number of columns, or \b Dynamic + * + * The remaining template parameters are optional -- in most cases you don't have to worry about them. + * \tparam _Options \anchor matrix_tparam_options A combination of either \b RowMajor or \b ColMajor, and of either + * \b AutoAlign or \b DontAlign. + * The former controls \ref TopicStorageOrders "storage order", and defaults to column-major. The latter controls alignment, which is required + * for vectorization. It defaults to aligning matrices except for fixed sizes that aren't a multiple of the packet size. + * \tparam _MaxRows Maximum number of rows. Defaults to \a _Rows (\ref maxrows "note"). + * \tparam _MaxCols Maximum number of columns. Defaults to \a _Cols (\ref maxrows "note"). + * + * Eigen provides a number of typedefs covering the usual cases. Here are some examples: + * + * \li \c Matrix2d is a 2x2 square matrix of doubles (\c Matrix) + * \li \c Vector4f is a vector of 4 floats (\c Matrix) + * \li \c RowVector3i is a row-vector of 3 ints (\c Matrix) + * + * \li \c MatrixXf is a dynamic-size matrix of floats (\c Matrix) + * \li \c VectorXf is a dynamic-size vector of floats (\c Matrix) + * + * \li \c Matrix2Xf is a partially fixed-size (dynamic-size) matrix of floats (\c Matrix) + * \li \c MatrixX3d is a partially dynamic-size (fixed-size) matrix of double (\c Matrix) + * + * See \link matrixtypedefs this page \endlink for a complete list of predefined \em %Matrix and \em Vector typedefs. + * + * You can access elements of vectors and matrices using normal subscripting: + * + * \code + * Eigen::VectorXd v(10); + * v[0] = 0.1; + * v[1] = 0.2; + * v(0) = 0.3; + * v(1) = 0.4; + * + * Eigen::MatrixXi m(10, 10); + * m(0, 1) = 1; + * m(0, 2) = 2; + * m(0, 3) = 3; + * \endcode + * + * This class can be extended with the help of the plugin mechanism described on the page + * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_MATRIX_PLUGIN. + * + * Some notes: + * + *

      + *
      \anchor dense Dense versus sparse:
      + *
      This %Matrix class handles dense, not sparse matrices and vectors. For sparse matrices and vectors, see the Sparse module. + * + * Dense matrices and vectors are plain usual arrays of coefficients. All the coefficients are stored, in an ordinary contiguous array. + * This is unlike Sparse matrices and vectors where the coefficients are stored as a list of nonzero coefficients.
      + * + *
      \anchor fixedsize Fixed-size versus dynamic-size:
      + *
      Fixed-size means that the numbers of rows and columns are known are compile-time. In this case, Eigen allocates the array + * of coefficients as a fixed-size array, as a class member. This makes sense for very small matrices, typically up to 4x4, sometimes up + * to 16x16. Larger matrices should be declared as dynamic-size even if one happens to know their size at compile-time. + * + * Dynamic-size means that the numbers of rows or columns are not necessarily known at compile-time. In this case they are runtime + * variables, and the array of coefficients is allocated dynamically on the heap. + * + * Note that \em dense matrices, be they Fixed-size or Dynamic-size, do not expand dynamically in the sense of a std::map. + * If you want this behavior, see the Sparse module.
      + * + *
      \anchor maxrows _MaxRows and _MaxCols:
      + *
      In most cases, one just leaves these parameters to the default values. + * These parameters mean the maximum size of rows and columns that the matrix may have. They are useful in cases + * when the exact numbers of rows and columns are not known are compile-time, but it is known at compile-time that they cannot + * exceed a certain value. This happens when taking dynamic-size blocks inside fixed-size matrices: in this case _MaxRows and _MaxCols + * are the dimensions of the original matrix, while _Rows and _Cols are Dynamic.
      + *
      + * + * \see MatrixBase for the majority of the API methods for matrices, \ref TopicClassHierarchy, + * \ref TopicStorageOrders + */ + +namespace internal { +template +struct traits > +{ + typedef _Scalar Scalar; + typedef Dense StorageKind; + typedef DenseIndex Index; + typedef MatrixXpr XprKind; + enum { + RowsAtCompileTime = _Rows, + ColsAtCompileTime = _Cols, + MaxRowsAtCompileTime = _MaxRows, + MaxColsAtCompileTime = _MaxCols, + Flags = compute_matrix_flags<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::ret, + CoeffReadCost = NumTraits::ReadCost, + Options = _Options, + InnerStrideAtCompileTime = 1, + OuterStrideAtCompileTime = (Options&RowMajor) ? ColsAtCompileTime : RowsAtCompileTime + }; +}; +} + +template +class Matrix + : public PlainObjectBase > +{ + public: + + /** \brief Base class typedef. + * \sa PlainObjectBase + */ + typedef PlainObjectBase Base; + + enum { Options = _Options }; + + EIGEN_DENSE_PUBLIC_INTERFACE(Matrix) + + typedef typename Base::PlainObject PlainObject; + + enum { NeedsToAlign = (!(Options&DontAlign)) + && SizeAtCompileTime!=Dynamic && ((static_cast(sizeof(Scalar))*SizeAtCompileTime)%16)==0 }; + EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) + + using Base::base; + using Base::coeffRef; + + /** + * \brief Assigns matrices to each other. + * + * \note This is a special case of the templated operator=. Its purpose is + * to prevent a default operator= from hiding the templated operator=. + * + * \callgraph + */ + EIGEN_STRONG_INLINE Matrix& operator=(const Matrix& other) + { + return Base::_set(other); + } + + /** \internal + * \brief Copies the value of the expression \a other into \c *this with automatic resizing. + * + * *this might be resized to match the dimensions of \a other. If *this was a null matrix (not already initialized), + * it will be initialized. + * + * Note that copying a row-vector into a vector (and conversely) is allowed. + * The resizing, if any, is then done in the appropriate way so that row-vectors + * remain row-vectors and vectors remain vectors. + */ + template + EIGEN_STRONG_INLINE Matrix& operator=(const MatrixBase& other) + { + return Base::_set(other); + } + + /* Here, doxygen failed to copy the brief information when using \copydoc */ + + /** + * \brief Copies the generic expression \a other into *this. + * \copydetails DenseBase::operator=(const EigenBase &other) + */ + template + EIGEN_STRONG_INLINE Matrix& operator=(const EigenBase &other) + { + return Base::operator=(other); + } + + template + EIGEN_STRONG_INLINE Matrix& operator=(const ReturnByValue& func) + { + return Base::operator=(func); + } + + /** \brief Default constructor. + * + * For fixed-size matrices, does nothing. + * + * For dynamic-size matrices, creates an empty matrix of size 0. Does not allocate any array. Such a matrix + * is called a null matrix. This constructor is the unique way to create null matrices: resizing + * a matrix to 0 is not supported. + * + * \sa resize(Index,Index) + */ + EIGEN_STRONG_INLINE explicit Matrix() : Base() + { + Base::_check_template_params(); + EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + + // FIXME is it still needed + Matrix(internal::constructor_without_unaligned_array_assert) + : Base(internal::constructor_without_unaligned_array_assert()) + { Base::_check_template_params(); EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED } + + /** \brief Constructs a vector or row-vector with given dimension. \only_for_vectors + * + * Note that this is only useful for dynamic-size vectors. For fixed-size vectors, + * it is redundant to pass the dimension here, so it makes more sense to use the default + * constructor Matrix() instead. + */ + EIGEN_STRONG_INLINE explicit Matrix(Index dim) + : Base(dim, RowsAtCompileTime == 1 ? 1 : dim, ColsAtCompileTime == 1 ? 1 : dim) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_ONLY(Matrix) + eigen_assert(dim >= 0); + eigen_assert(SizeAtCompileTime == Dynamic || SizeAtCompileTime == dim); + EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + template + EIGEN_STRONG_INLINE Matrix(const T0& x, const T1& y) + { + Base::_check_template_params(); + Base::template _init2(x, y); + } + #else + /** \brief Constructs an uninitialized matrix with \a rows rows and \a cols columns. + * + * This is useful for dynamic-size matrices. For fixed-size matrices, + * it is redundant to pass these parameters, so one should use the default constructor + * Matrix() instead. */ + Matrix(Index rows, Index cols); + /** \brief Constructs an initialized 2D vector with given coefficients */ + Matrix(const Scalar& x, const Scalar& y); + #endif + + /** \brief Constructs an initialized 3D vector with given coefficients */ + EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Matrix, 3) + m_storage.data()[0] = x; + m_storage.data()[1] = y; + m_storage.data()[2] = z; + } + /** \brief Constructs an initialized 4D vector with given coefficients */ + EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z, const Scalar& w) + { + Base::_check_template_params(); + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Matrix, 4) + m_storage.data()[0] = x; + m_storage.data()[1] = y; + m_storage.data()[2] = z; + m_storage.data()[3] = w; + } + + explicit Matrix(const Scalar *data); + + /** \brief Constructor copying the value of the expression \a other */ + template + EIGEN_STRONG_INLINE Matrix(const MatrixBase& other) + : Base(other.rows() * other.cols(), other.rows(), other.cols()) + { + // This test resides here, to bring the error messages closer to the user. Normally, these checks + // are performed deeply within the library, thus causing long and scary error traces. + EIGEN_STATIC_ASSERT((internal::is_same::value), + YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + + Base::_check_template_params(); + Base::_set_noalias(other); + } + /** \brief Copy constructor */ + EIGEN_STRONG_INLINE Matrix(const Matrix& other) + : Base(other.rows() * other.cols(), other.rows(), other.cols()) + { + Base::_check_template_params(); + Base::_set_noalias(other); + } + /** \brief Copy constructor with in-place evaluation */ + template + EIGEN_STRONG_INLINE Matrix(const ReturnByValue& other) + { + Base::_check_template_params(); + Base::resize(other.rows(), other.cols()); + other.evalTo(*this); + } + + /** \brief Copy constructor for generic expressions. + * \sa MatrixBase::operator=(const EigenBase&) + */ + template + EIGEN_STRONG_INLINE Matrix(const EigenBase &other) + : Base(other.derived().rows() * other.derived().cols(), other.derived().rows(), other.derived().cols()) + { + Base::_check_template_params(); + Base::resize(other.rows(), other.cols()); + // FIXME/CHECK: isn't *this = other.derived() more efficient. it allows to + // go for pure _set() implementations, right? + *this = other; + } + + /** \internal + * \brief Override MatrixBase::swap() since for dynamic-sized matrices + * of same type it is enough to swap the data pointers. + */ + template + void swap(MatrixBase const & other) + { this->_swap(other.derived()); } + + inline Index innerStride() const { return 1; } + inline Index outerStride() const { return this->innerSize(); } + + /////////// Geometry module /////////// + + template + explicit Matrix(const RotationBase& r); + template + Matrix& operator=(const RotationBase& r); + + #ifdef EIGEN2_SUPPORT + template + explicit Matrix(const eigen2_RotationBase& r); + template + Matrix& operator=(const eigen2_RotationBase& r); + #endif + + // allow to extend Matrix outside Eigen + #ifdef EIGEN_MATRIX_PLUGIN + #include EIGEN_MATRIX_PLUGIN + #endif + + protected: + template + friend struct internal::conservative_resize_like_impl; + + using Base::m_storage; +}; + +/** \defgroup matrixtypedefs Global matrix typedefs + * + * \ingroup Core_Module + * + * Eigen defines several typedef shortcuts for most common matrix and vector types. + * + * The general patterns are the following: + * + * \c MatrixSizeType where \c Size can be \c 2,\c 3,\c 4 for fixed size square matrices or \c X for dynamic size, + * and where \c Type can be \c i for integer, \c f for float, \c d for double, \c cf for complex float, \c cd + * for complex double. + * + * For example, \c Matrix3d is a fixed-size 3x3 matrix type of doubles, and \c MatrixXf is a dynamic-size matrix of floats. + * + * There are also \c VectorSizeType and \c RowVectorSizeType which are self-explanatory. For example, \c Vector4cf is + * a fixed-size vector of 4 complex floats. + * + * \sa class Matrix + */ + +#define EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Size, SizeSuffix) \ +/** \ingroup matrixtypedefs */ \ +typedef Matrix Matrix##SizeSuffix##TypeSuffix; \ +/** \ingroup matrixtypedefs */ \ +typedef Matrix Vector##SizeSuffix##TypeSuffix; \ +/** \ingroup matrixtypedefs */ \ +typedef Matrix RowVector##SizeSuffix##TypeSuffix; + +#define EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, Size) \ +/** \ingroup matrixtypedefs */ \ +typedef Matrix Matrix##Size##X##TypeSuffix; \ +/** \ingroup matrixtypedefs */ \ +typedef Matrix Matrix##X##Size##TypeSuffix; + +#define EIGEN_MAKE_TYPEDEFS_ALL_SIZES(Type, TypeSuffix) \ +EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 2, 2) \ +EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 3, 3) \ +EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 4, 4) \ +EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Dynamic, X) \ +EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 2) \ +EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 3) \ +EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 4) + +EIGEN_MAKE_TYPEDEFS_ALL_SIZES(int, i) +EIGEN_MAKE_TYPEDEFS_ALL_SIZES(float, f) +EIGEN_MAKE_TYPEDEFS_ALL_SIZES(double, d) +EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex, cf) +EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex, cd) + +#undef EIGEN_MAKE_TYPEDEFS_ALL_SIZES +#undef EIGEN_MAKE_TYPEDEFS + +#undef EIGEN_MAKE_TYPEDEFS_LARGE + +#define EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, SizeSuffix) \ +using Eigen::Matrix##SizeSuffix##TypeSuffix; \ +using Eigen::Vector##SizeSuffix##TypeSuffix; \ +using Eigen::RowVector##SizeSuffix##TypeSuffix; + +#define EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE(TypeSuffix) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 2) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 3) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 4) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, X) \ + +#define EIGEN_USING_MATRIX_TYPEDEFS \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE(i) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE(f) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE(d) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE(cf) \ +EIGEN_USING_MATRIX_TYPEDEFS_FOR_TYPE(cd) + +#endif // EIGEN_MATRIX_H diff --git a/asift_match/src/third_party/Eigen/src/Core/MatrixBase.h b/asift_match/src/third_party/Eigen/src/Core/MatrixBase.h new file mode 100755 index 0000000..f0c7fc7 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/MatrixBase.h @@ -0,0 +1,520 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2009 Benoit Jacob +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_MATRIXBASE_H +#define EIGEN_MATRIXBASE_H + +/** \class MatrixBase + * \ingroup Core_Module + * + * \brief Base class for all dense matrices, vectors, and expressions + * + * This class is the base that is inherited by all matrix, vector, and related expression + * types. Most of the Eigen API is contained in this class, and its base classes. Other important + * classes for the Eigen API are Matrix, and VectorwiseOp. + * + * Note that some methods are defined in other modules such as the \ref LU_Module LU module + * for all functions related to matrix inversions. + * + * \tparam Derived is the derived type, e.g. a matrix type, or an expression, etc. + * + * When writing a function taking Eigen objects as argument, if you want your function + * to take as argument any matrix, vector, or expression, just let it take a + * MatrixBase argument. As an example, here is a function printFirstRow which, given + * a matrix, vector, or expression \a x, prints the first row of \a x. + * + * \code + template + void printFirstRow(const Eigen::MatrixBase& x) + { + cout << x.row(0) << endl; + } + * \endcode + * + * This class can be extended with the help of the plugin mechanism described on the page + * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_MATRIXBASE_PLUGIN. + * + * \sa \ref TopicClassHierarchy + */ +template class MatrixBase + : public DenseBase +{ + public: +#ifndef EIGEN_PARSED_BY_DOXYGEN + typedef MatrixBase StorageBaseType; + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + typedef typename NumTraits::Real RealScalar; + + typedef DenseBase Base; + using Base::RowsAtCompileTime; + using Base::ColsAtCompileTime; + using Base::SizeAtCompileTime; + using Base::MaxRowsAtCompileTime; + using Base::MaxColsAtCompileTime; + using Base::MaxSizeAtCompileTime; + using Base::IsVectorAtCompileTime; + using Base::Flags; + using Base::CoeffReadCost; + + using Base::derived; + using Base::const_cast_derived; + using Base::rows; + using Base::cols; + using Base::size; + using Base::coeff; + using Base::coeffRef; + using Base::lazyAssign; + using Base::eval; + using Base::operator+=; + using Base::operator-=; + using Base::operator*=; + using Base::operator/=; + + typedef typename Base::CoeffReturnType CoeffReturnType; + typedef typename Base::ConstTransposeReturnType ConstTransposeReturnType; + typedef typename Base::RowXpr RowXpr; + typedef typename Base::ColXpr ColXpr; +#endif // not EIGEN_PARSED_BY_DOXYGEN + + + +#ifndef EIGEN_PARSED_BY_DOXYGEN + /** type of the equivalent square matrix */ + typedef Matrix SquareMatrixType; +#endif // not EIGEN_PARSED_BY_DOXYGEN + + /** \returns the size of the main diagonal, which is min(rows(),cols()). + * \sa rows(), cols(), SizeAtCompileTime. */ + inline Index diagonalSize() const { return std::min(rows(),cols()); } + + /** \brief The plain matrix type corresponding to this expression. + * + * This is not necessarily exactly the return type of eval(). In the case of plain matrices, + * the return type of eval() is a const reference to a matrix, not a matrix! It is however guaranteed + * that the return type of eval() is either PlainObject or const PlainObject&. + */ + typedef Matrix::Scalar, + internal::traits::RowsAtCompileTime, + internal::traits::ColsAtCompileTime, + AutoAlign | (internal::traits::Flags&RowMajorBit ? RowMajor : ColMajor), + internal::traits::MaxRowsAtCompileTime, + internal::traits::MaxColsAtCompileTime + > PlainObject; + +#ifndef EIGEN_PARSED_BY_DOXYGEN + /** \internal Represents a matrix with all coefficients equal to one another*/ + typedef CwiseNullaryOp,Derived> ConstantReturnType; + /** \internal the return type of MatrixBase::adjoint() */ + typedef typename internal::conditional::IsComplex, + CwiseUnaryOp, ConstTransposeReturnType>, + ConstTransposeReturnType + >::type AdjointReturnType; + /** \internal Return type of eigenvalues() */ + typedef Matrix, internal::traits::ColsAtCompileTime, 1, ColMajor> EigenvaluesReturnType; + /** \internal the return type of identity */ + typedef CwiseNullaryOp,Derived> IdentityReturnType; + /** \internal the return type of unit vectors */ + typedef Block, SquareMatrixType>, + internal::traits::RowsAtCompileTime, + internal::traits::ColsAtCompileTime> BasisReturnType; +#endif // not EIGEN_PARSED_BY_DOXYGEN + +#define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::MatrixBase +# include "../plugins/CommonCwiseUnaryOps.h" +# include "../plugins/CommonCwiseBinaryOps.h" +# include "../plugins/MatrixCwiseUnaryOps.h" +# include "../plugins/MatrixCwiseBinaryOps.h" +# ifdef EIGEN_MATRIXBASE_PLUGIN +# include EIGEN_MATRIXBASE_PLUGIN +# endif +#undef EIGEN_CURRENT_STORAGE_BASE_CLASS + + /** Special case of the template operator=, in order to prevent the compiler + * from generating a default operator= (issue hit with g++ 4.1) + */ + Derived& operator=(const MatrixBase& other); + + // We cannot inherit here via Base::operator= since it is causing + // trouble with MSVC. + + template + Derived& operator=(const DenseBase& other); + + template + Derived& operator=(const EigenBase& other); + + template + Derived& operator=(const ReturnByValue& other); + +#ifndef EIGEN_PARSED_BY_DOXYGEN + template + Derived& lazyAssign(const ProductBase& other); +#endif // not EIGEN_PARSED_BY_DOXYGEN + + template + Derived& operator+=(const MatrixBase& other); + template + Derived& operator-=(const MatrixBase& other); + + template + const typename ProductReturnType::Type + operator*(const MatrixBase &other) const; + + template + const typename LazyProductReturnType::Type + lazyProduct(const MatrixBase &other) const; + + template + Derived& operator*=(const EigenBase& other); + + template + void applyOnTheLeft(const EigenBase& other); + + template + void applyOnTheRight(const EigenBase& other); + + template + const DiagonalProduct + operator*(const DiagonalBase &diagonal) const; + + template + typename internal::scalar_product_traits::Scalar,typename internal::traits::Scalar>::ReturnType + dot(const MatrixBase& other) const; + + #ifdef EIGEN2_SUPPORT + template + Scalar eigen2_dot(const MatrixBase& other) const; + #endif + + RealScalar squaredNorm() const; + RealScalar norm() const; + RealScalar stableNorm() const; + RealScalar blueNorm() const; + RealScalar hypotNorm() const; + const PlainObject normalized() const; + void normalize(); + + const AdjointReturnType adjoint() const; + void adjointInPlace(); + + typedef Diagonal DiagonalReturnType; + DiagonalReturnType diagonal(); + typedef const Diagonal ConstDiagonalReturnType; + const ConstDiagonalReturnType diagonal() const; + + template struct DiagonalIndexReturnType { typedef Diagonal Type; }; + template struct ConstDiagonalIndexReturnType { typedef const Diagonal Type; }; + + template typename DiagonalIndexReturnType::Type diagonal(); + template typename ConstDiagonalIndexReturnType::Type diagonal() const; + + // Note: The "MatrixBase::" prefixes are added to help MSVC9 to match these declarations with the later implementations. + // On the other hand they confuse MSVC8... + #if (defined _MSC_VER) && (_MSC_VER >= 1500) // 2008 or later + typename MatrixBase::template DiagonalIndexReturnType::Type diagonal(Index index); + typename MatrixBase::template ConstDiagonalIndexReturnType::Type diagonal(Index index) const; + #else + typename DiagonalIndexReturnType::Type diagonal(Index index); + typename ConstDiagonalIndexReturnType::Type diagonal(Index index) const; + #endif + + #ifdef EIGEN2_SUPPORT + template typename internal::eigen2_part_return_type::type part(); + template const typename internal::eigen2_part_return_type::type part() const; + + // huuuge hack. make Eigen2's matrix.part() work in eigen3. Problem: Diagonal is now a class template instead + // of an integer constant. Solution: overload the part() method template wrt template parameters list. + template class U> + const DiagonalWrapper part() const + { return diagonal().asDiagonal(); } + #endif // EIGEN2_SUPPORT + + template struct TriangularViewReturnType { typedef TriangularView Type; }; + template struct ConstTriangularViewReturnType { typedef const TriangularView Type; }; + + template typename TriangularViewReturnType::Type triangularView(); + template typename ConstTriangularViewReturnType::Type triangularView() const; + + template struct SelfAdjointViewReturnType { typedef SelfAdjointView Type; }; + template struct ConstSelfAdjointViewReturnType { typedef const SelfAdjointView Type; }; + + template typename SelfAdjointViewReturnType::Type selfadjointView(); + template typename ConstSelfAdjointViewReturnType::Type selfadjointView() const; + + const SparseView sparseView(const Scalar& m_reference = Scalar(0), + typename NumTraits::Real m_epsilon = NumTraits::dummy_precision()) const; + static const IdentityReturnType Identity(); + static const IdentityReturnType Identity(Index rows, Index cols); + static const BasisReturnType Unit(Index size, Index i); + static const BasisReturnType Unit(Index i); + static const BasisReturnType UnitX(); + static const BasisReturnType UnitY(); + static const BasisReturnType UnitZ(); + static const BasisReturnType UnitW(); + + const DiagonalWrapper asDiagonal() const; + const PermutationWrapper asPermutation() const; + + Derived& setIdentity(); + Derived& setIdentity(Index rows, Index cols); + + bool isIdentity(RealScalar prec = NumTraits::dummy_precision()) const; + bool isDiagonal(RealScalar prec = NumTraits::dummy_precision()) const; + + bool isUpperTriangular(RealScalar prec = NumTraits::dummy_precision()) const; + bool isLowerTriangular(RealScalar prec = NumTraits::dummy_precision()) const; + + template + bool isOrthogonal(const MatrixBase& other, + RealScalar prec = NumTraits::dummy_precision()) const; + bool isUnitary(RealScalar prec = NumTraits::dummy_precision()) const; + + /** \returns true if each coefficients of \c *this and \a other are all exactly equal. + * \warning When using floating point scalar values you probably should rather use a + * fuzzy comparison such as isApprox() + * \sa isApprox(), operator!= */ + template + inline bool operator==(const MatrixBase& other) const + { return cwiseEqual(other).all(); } + + /** \returns true if at least one pair of coefficients of \c *this and \a other are not exactly equal to each other. + * \warning When using floating point scalar values you probably should rather use a + * fuzzy comparison such as isApprox() + * \sa isApprox(), operator== */ + template + inline bool operator!=(const MatrixBase& other) const + { return cwiseNotEqual(other).any(); } + + NoAlias noalias(); + + inline const ForceAlignedAccess forceAlignedAccess() const; + inline ForceAlignedAccess forceAlignedAccess(); + template inline typename internal::add_const_on_value_type,Derived&>::type>::type forceAlignedAccessIf() const; + template inline typename internal::conditional,Derived&>::type forceAlignedAccessIf(); + + Scalar trace() const; + +/////////// Array module /////////// + + template RealScalar lpNorm() const; + + MatrixBase& matrix() { return *this; } + const MatrixBase& matrix() const { return *this; } + + /** \returns an \link ArrayBase Array \endlink expression of this matrix + * \sa ArrayBase::matrix() */ + ArrayWrapper array() { return derived(); } + const ArrayWrapper array() const { return derived(); } + +/////////// LU module /////////// + + const FullPivLU fullPivLu() const; + const PartialPivLU partialPivLu() const; + + #if EIGEN2_SUPPORT_STAGE < STAGE20_RESOLVE_API_CONFLICTS + const LU lu() const; + #endif + + #ifdef EIGEN2_SUPPORT + const LU eigen2_lu() const; + #endif + + #if EIGEN2_SUPPORT_STAGE > STAGE20_RESOLVE_API_CONFLICTS + const PartialPivLU lu() const; + #endif + + #ifdef EIGEN2_SUPPORT + template + void computeInverse(MatrixBase *result) const { + *result = this->inverse(); + } + #endif + + const internal::inverse_impl inverse() const; + template + void computeInverseAndDetWithCheck( + ResultType& inverse, + typename ResultType::Scalar& determinant, + bool& invertible, + const RealScalar& absDeterminantThreshold = NumTraits::dummy_precision() + ) const; + template + void computeInverseWithCheck( + ResultType& inverse, + bool& invertible, + const RealScalar& absDeterminantThreshold = NumTraits::dummy_precision() + ) const; + Scalar determinant() const; + +/////////// Cholesky module /////////// + + const LLT llt() const; + const LDLT ldlt() const; + +/////////// QR module /////////// + + const HouseholderQR householderQr() const; + const ColPivHouseholderQR colPivHouseholderQr() const; + const FullPivHouseholderQR fullPivHouseholderQr() const; + + #ifdef EIGEN2_SUPPORT + const QR qr() const; + #endif + + EigenvaluesReturnType eigenvalues() const; + RealScalar operatorNorm() const; + +/////////// SVD module /////////// + + JacobiSVD jacobiSvd(unsigned int computationOptions = 0) const; + + #ifdef EIGEN2_SUPPORT + SVD svd() const; + #endif + +/////////// Geometry module /////////// + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /// \internal helper struct to form the return type of the cross product + template struct cross_product_return_type { + typedef typename internal::scalar_product_traits::Scalar,typename internal::traits::Scalar>::ReturnType Scalar; + typedef Matrix type; + }; + #endif // EIGEN_PARSED_BY_DOXYGEN + template + typename cross_product_return_type::type + cross(const MatrixBase& other) const; + template + PlainObject cross3(const MatrixBase& other) const; + PlainObject unitOrthogonal(void) const; + Matrix eulerAngles(Index a0, Index a1, Index a2) const; + + #if EIGEN2_SUPPORT_STAGE > STAGE20_RESOLVE_API_CONFLICTS + ScalarMultipleReturnType operator*(const UniformScaling& s) const; + // put this as separate enum value to work around possible GCC 4.3 bug (?) + enum { HomogeneousReturnTypeDirection = ColsAtCompileTime==1?Vertical:Horizontal }; + typedef Homogeneous HomogeneousReturnType; + HomogeneousReturnType homogeneous() const; + #endif + + enum { + SizeMinusOne = SizeAtCompileTime==Dynamic ? Dynamic : SizeAtCompileTime-1 + }; + typedef Block::ColsAtCompileTime==1 ? SizeMinusOne : 1, + internal::traits::ColsAtCompileTime==1 ? 1 : SizeMinusOne> ConstStartMinusOne; + typedef CwiseUnaryOp::Scalar>, + const ConstStartMinusOne > HNormalizedReturnType; + + const HNormalizedReturnType hnormalized() const; + +////////// Householder module /////////// + + void makeHouseholderInPlace(Scalar& tau, RealScalar& beta); + template + void makeHouseholder(EssentialPart& essential, + Scalar& tau, RealScalar& beta) const; + template + void applyHouseholderOnTheLeft(const EssentialPart& essential, + const Scalar& tau, + Scalar* workspace); + template + void applyHouseholderOnTheRight(const EssentialPart& essential, + const Scalar& tau, + Scalar* workspace); + +///////// Jacobi module ///////// + + template + void applyOnTheLeft(Index p, Index q, const JacobiRotation& j); + template + void applyOnTheRight(Index p, Index q, const JacobiRotation& j); + +///////// MatrixFunctions module ///////// + + typedef typename internal::stem_function::type StemFunction; + const MatrixExponentialReturnValue exp() const; + const MatrixFunctionReturnValue matrixFunction(StemFunction f) const; + const MatrixFunctionReturnValue cosh() const; + const MatrixFunctionReturnValue sinh() const; + const MatrixFunctionReturnValue cos() const; + const MatrixFunctionReturnValue sin() const; + +#ifdef EIGEN2_SUPPORT + template + Derived& operator+=(const Flagged, 0, + EvalBeforeAssigningBit>& other); + + template + Derived& operator-=(const Flagged, 0, + EvalBeforeAssigningBit>& other); + + /** \deprecated because .lazy() is deprecated + * Overloaded for cache friendly product evaluation */ + template + Derived& lazyAssign(const Flagged& other) + { return lazyAssign(other._expression()); } + + template + const Flagged marked() const; + const Flagged lazy() const; + + inline const Cwise cwise() const; + inline Cwise cwise(); + + VectorBlock start(Index size); + const VectorBlock start(Index size) const; + VectorBlock end(Index size); + const VectorBlock end(Index size) const; + template VectorBlock start(); + template const VectorBlock start() const; + template VectorBlock end(); + template const VectorBlock end() const; + + Minor minor(Index row, Index col); + const Minor minor(Index row, Index col) const; +#endif + + protected: + MatrixBase() : Base() {} + + private: + explicit MatrixBase(int); + MatrixBase(int,int); + template explicit MatrixBase(const MatrixBase&); + protected: + // mixing arrays and matrices is not legal + template Derived& operator+=(const ArrayBase& ) + {EIGEN_STATIC_ASSERT(sizeof(typename OtherDerived::Scalar)==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES);} + // mixing arrays and matrices is not legal + template Derived& operator-=(const ArrayBase& ) + {EIGEN_STATIC_ASSERT(sizeof(typename OtherDerived::Scalar)==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES);} +}; + +#endif // EIGEN_MATRIXBASE_H diff --git a/asift_match/src/third_party/Eigen/src/Core/NestByValue.h b/asift_match/src/third_party/Eigen/src/Core/NestByValue.h new file mode 100755 index 0000000..a6104d2 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/NestByValue.h @@ -0,0 +1,122 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_NESTBYVALUE_H +#define EIGEN_NESTBYVALUE_H + +/** \class NestByValue + * \ingroup Core_Module + * + * \brief Expression which must be nested by value + * + * \param ExpressionType the type of the object of which we are requiring nesting-by-value + * + * This class is the return type of MatrixBase::nestByValue() + * and most of the time this is the only way it is used. + * + * \sa MatrixBase::nestByValue() + */ + +namespace internal { +template +struct traits > : public traits +{}; +} + +template class NestByValue + : public internal::dense_xpr_base< NestByValue >::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(NestByValue) + + inline NestByValue(const ExpressionType& matrix) : m_expression(matrix) {} + + inline Index rows() const { return m_expression.rows(); } + inline Index cols() const { return m_expression.cols(); } + inline Index outerStride() const { return m_expression.outerStride(); } + inline Index innerStride() const { return m_expression.innerStride(); } + + inline const CoeffReturnType coeff(Index row, Index col) const + { + return m_expression.coeff(row, col); + } + + inline Scalar& coeffRef(Index row, Index col) + { + return m_expression.const_cast_derived().coeffRef(row, col); + } + + inline const CoeffReturnType coeff(Index index) const + { + return m_expression.coeff(index); + } + + inline Scalar& coeffRef(Index index) + { + return m_expression.const_cast_derived().coeffRef(index); + } + + template + inline const PacketScalar packet(Index row, Index col) const + { + return m_expression.template packet(row, col); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(row, col, x); + } + + template + inline const PacketScalar packet(Index index) const + { + return m_expression.template packet(index); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_expression.const_cast_derived().template writePacket(index, x); + } + + operator const ExpressionType&() const { return m_expression; } + + protected: + const ExpressionType m_expression; +}; + +/** \returns an expression of the temporary version of *this. + */ +template +inline const NestByValue +DenseBase::nestByValue() const +{ + return NestByValue(derived()); +} + +#endif // EIGEN_NESTBYVALUE_H diff --git a/asift_match/src/third_party/Eigen/src/Core/NoAlias.h b/asift_match/src/third_party/Eigen/src/Core/NoAlias.h new file mode 100755 index 0000000..da64aff --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/NoAlias.h @@ -0,0 +1,136 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_NOALIAS_H +#define EIGEN_NOALIAS_H + +/** \class NoAlias + * \ingroup Core_Module + * + * \brief Pseudo expression providing an operator = assuming no aliasing + * + * \param ExpressionType the type of the object on which to do the lazy assignment + * + * This class represents an expression with special assignment operators + * assuming no aliasing between the target expression and the source expression. + * More precisely it alloas to bypass the EvalBeforeAssignBit flag of the source expression. + * It is the return type of MatrixBase::noalias() + * and most of the time this is the only way it is used. + * + * \sa MatrixBase::noalias() + */ +template class StorageBase> +class NoAlias +{ + typedef typename ExpressionType::Scalar Scalar; + public: + NoAlias(ExpressionType& expression) : m_expression(expression) {} + + /** Behaves like MatrixBase::lazyAssign(other) + * \sa MatrixBase::lazyAssign() */ + template + EIGEN_STRONG_INLINE ExpressionType& operator=(const StorageBase& other) + { return internal::assign_selector::run(m_expression,other.derived()); } + + /** \sa MatrixBase::operator+= */ + template + EIGEN_STRONG_INLINE ExpressionType& operator+=(const StorageBase& other) + { + typedef SelfCwiseBinaryOp, ExpressionType, OtherDerived> SelfAdder; + SelfAdder tmp(m_expression); + typedef typename internal::nested::type OtherDerivedNested; + typedef typename internal::remove_all::type _OtherDerivedNested; + internal::assign_selector::run(tmp,OtherDerivedNested(other.derived())); + return m_expression; + } + + /** \sa MatrixBase::operator-= */ + template + EIGEN_STRONG_INLINE ExpressionType& operator-=(const StorageBase& other) + { + typedef SelfCwiseBinaryOp, ExpressionType, OtherDerived> SelfAdder; + SelfAdder tmp(m_expression); + typedef typename internal::nested::type OtherDerivedNested; + typedef typename internal::remove_all::type _OtherDerivedNested; + internal::assign_selector::run(tmp,OtherDerivedNested(other.derived())); + return m_expression; + } + +#ifndef EIGEN_PARSED_BY_DOXYGEN + template + EIGEN_STRONG_INLINE ExpressionType& operator+=(const ProductBase& other) + { other.derived().addTo(m_expression); return m_expression; } + + template + EIGEN_STRONG_INLINE ExpressionType& operator-=(const ProductBase& other) + { other.derived().subTo(m_expression); return m_expression; } + + template + EIGEN_STRONG_INLINE ExpressionType& operator+=(const CoeffBasedProduct& other) + { return m_expression.derived() += CoeffBasedProduct(other.lhs(), other.rhs()); } + + template + EIGEN_STRONG_INLINE ExpressionType& operator-=(const CoeffBasedProduct& other) + { return m_expression.derived() -= CoeffBasedProduct(other.lhs(), other.rhs()); } +#endif + + protected: + ExpressionType& m_expression; +}; + +/** \returns a pseudo expression of \c *this with an operator= assuming + * no aliasing between \c *this and the source expression. + * + * More precisely, noalias() allows to bypass the EvalBeforeAssignBit flag. + * Currently, even though several expressions may alias, only product + * expressions have this flag. Therefore, noalias() is only usefull when + * the source expression contains a matrix product. + * + * Here are some examples where noalias is usefull: + * \code + * D.noalias() = A * B; + * D.noalias() += A.transpose() * B; + * D.noalias() -= 2 * A * B.adjoint(); + * \endcode + * + * On the other hand the following example will lead to a \b wrong result: + * \code + * A.noalias() = A * B; + * \endcode + * because the result matrix A is also an operand of the matrix product. Therefore, + * there is no alternative than evaluating A * B in a temporary, that is the default + * behavior when you write: + * \code + * A = A * B; + * \endcode + * + * \sa class NoAlias + */ +template +NoAlias MatrixBase::noalias() +{ + return derived(); +} + +#endif // EIGEN_NOALIAS_H diff --git a/asift_match/src/third_party/Eigen/src/Core/NumTraits.h b/asift_match/src/third_party/Eigen/src/Core/NumTraits.h new file mode 100755 index 0000000..5c7762d --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/NumTraits.h @@ -0,0 +1,160 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_NUMTRAITS_H +#define EIGEN_NUMTRAITS_H + +/** \class NumTraits + * \ingroup Core_Module + * + * \brief Holds information about the various numeric (i.e. scalar) types allowed by Eigen. + * + * \param T the numeric type at hand + * + * This class stores enums, typedefs and static methods giving information about a numeric type. + * + * The provided data consists of: + * \li A typedef \a Real, giving the "real part" type of \a T. If \a T is already real, + * then \a Real is just a typedef to \a T. If \a T is \c std::complex then \a Real + * is a typedef to \a U. + * \li A typedef \a NonInteger, giving the type that should be used for operations producing non-integral values, + * such as quotients, square roots, etc. If \a T is a floating-point type, then this typedef just gives + * \a T again. Note however that many Eigen functions such as internal::sqrt simply refuse to + * take integers. Outside of a few cases, Eigen doesn't do automatic type promotion. Thus, this typedef is + * only intended as a helper for code that needs to explicitly promote types. + * \li A typedef \a Nested giving the type to use to nest a value inside of the expression tree. If you don't know what + * this means, just use \a T here. + * \li An enum value \a IsComplex. It is equal to 1 if \a T is a \c std::complex + * type, and to 0 otherwise. + * \li An enum value \a IsInteger. It is equal to \c 1 if \a T is an integer type such as \c int, + * and to \c 0 otherwise. + * \li Enum values ReadCost, AddCost and MulCost representing a rough estimate of the number of CPU cycles needed + * to by move / add / mul instructions respectively, assuming the data is already stored in CPU registers. + * Stay vague here. No need to do architecture-specific stuff. + * \li An enum value \a IsSigned. It is equal to \c 1 if \a T is a signed type and to 0 if \a T is unsigned. + * \li An enum value \a RequireInitialization. It is equal to \c 1 if the constructor of the numeric type \a T must + * be called, and to 0 if it is safe not to call it. Default is 0 if \a T is an arithmetic type, and 1 otherwise. + * \li An epsilon() function which, unlike std::numeric_limits::epsilon(), returns a \a Real instead of a \a T. + * \li A dummy_precision() function returning a weak epsilon value. It is mainly used as a default + * value by the fuzzy comparison operators. + * \li highest() and lowest() functions returning the highest and lowest possible values respectively. + */ + +template struct GenericNumTraits +{ + enum { + IsInteger = std::numeric_limits::is_integer, + IsSigned = std::numeric_limits::is_signed, + IsComplex = 0, + RequireInitialization = internal::is_arithmetic::value ? 0 : 1, + ReadCost = 1, + AddCost = 1, + MulCost = 1 + }; + + typedef T Real; + typedef typename internal::conditional< + IsInteger, + typename internal::conditional::type, + T + >::type NonInteger; + typedef T Nested; + + inline static Real epsilon() { return std::numeric_limits::epsilon(); } + inline static Real dummy_precision() + { + // make sure to override this for floating-point types + return Real(0); + } + inline static T highest() { return std::numeric_limits::max(); } + inline static T lowest() { return IsInteger ? std::numeric_limits::min() : (-std::numeric_limits::max()); } + +#ifdef EIGEN2_SUPPORT + enum { + HasFloatingPoint = !IsInteger + }; + typedef NonInteger FloatingPoint; +#endif +}; + +template struct NumTraits : GenericNumTraits +{}; + +template<> struct NumTraits + : GenericNumTraits +{ + inline static float dummy_precision() { return 1e-5f; } +}; + +template<> struct NumTraits : GenericNumTraits +{ + inline static double dummy_precision() { return 1e-12; } +}; + +template<> struct NumTraits + : GenericNumTraits +{ + static inline long double dummy_precision() { return 1e-15l; } +}; + +template struct NumTraits > + : GenericNumTraits > +{ + typedef _Real Real; + enum { + IsComplex = 1, + RequireInitialization = NumTraits<_Real>::RequireInitialization, + ReadCost = 2 * NumTraits<_Real>::ReadCost, + AddCost = 2 * NumTraits::AddCost, + MulCost = 4 * NumTraits::MulCost + 2 * NumTraits::AddCost + }; + + inline static Real epsilon() { return NumTraits::epsilon(); } + inline static Real dummy_precision() { return NumTraits::dummy_precision(); } +}; + +template +struct NumTraits > +{ + typedef Array ArrayType; + typedef typename NumTraits::Real RealScalar; + typedef Array Real; + typedef typename NumTraits::NonInteger NonIntegerScalar; + typedef Array NonInteger; + typedef ArrayType & Nested; + + enum { + IsComplex = NumTraits::IsComplex, + IsInteger = NumTraits::IsInteger, + IsSigned = NumTraits::IsSigned, + RequireInitialization = 1, + ReadCost = ArrayType::SizeAtCompileTime==Dynamic ? Dynamic : ArrayType::SizeAtCompileTime * NumTraits::ReadCost, + AddCost = ArrayType::SizeAtCompileTime==Dynamic ? Dynamic : ArrayType::SizeAtCompileTime * NumTraits::AddCost, + MulCost = ArrayType::SizeAtCompileTime==Dynamic ? Dynamic : ArrayType::SizeAtCompileTime * NumTraits::MulCost + }; +}; + + + +#endif // EIGEN_NUMTRAITS_H diff --git a/asift_match/src/third_party/Eigen/src/Core/PermutationMatrix.h b/asift_match/src/third_party/Eigen/src/Core/PermutationMatrix.h new file mode 100755 index 0000000..a064e05 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/PermutationMatrix.h @@ -0,0 +1,696 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009 Benoit Jacob +// Copyright (C) 2009-2011 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_PERMUTATIONMATRIX_H +#define EIGEN_PERMUTATIONMATRIX_H + +template class PermutedImpl; + +/** \class PermutationBase + * \ingroup Core_Module + * + * \brief Base class for permutations + * + * \param Derived the derived class + * + * This class is the base class for all expressions representing a permutation matrix, + * internally stored as a vector of integers. + * The convention followed here is that if \f$ \sigma \f$ is a permutation, the corresponding permutation matrix + * \f$ P_\sigma \f$ is such that if \f$ (e_1,\ldots,e_p) \f$ is the canonical basis, we have: + * \f[ P_\sigma(e_i) = e_{\sigma(i)}. \f] + * This convention ensures that for any two permutations \f$ \sigma, \tau \f$, we have: + * \f[ P_{\sigma\circ\tau} = P_\sigma P_\tau. \f] + * + * Permutation matrices are square and invertible. + * + * Notice that in addition to the member functions and operators listed here, there also are non-member + * operator* to multiply any kind of permutation object with any kind of matrix expression (MatrixBase) + * on either side. + * + * \sa class PermutationMatrix, class PermutationWrapper + */ + +namespace internal { + +template +struct permut_matrix_product_retval; +enum PermPermProduct_t {PermPermProduct}; + +} // end namespace internal + +template +class PermutationBase : public EigenBase +{ + typedef internal::traits Traits; + typedef EigenBase Base; + public: + + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef typename Traits::IndicesType IndicesType; + enum { + Flags = Traits::Flags, + CoeffReadCost = Traits::CoeffReadCost, + RowsAtCompileTime = Traits::RowsAtCompileTime, + ColsAtCompileTime = Traits::ColsAtCompileTime, + MaxRowsAtCompileTime = Traits::MaxRowsAtCompileTime, + MaxColsAtCompileTime = Traits::MaxColsAtCompileTime + }; + typedef typename Traits::Scalar Scalar; + typedef typename Traits::Index Index; + typedef Matrix + DenseMatrixType; + typedef PermutationMatrix + PlainPermutationType; + using Base::derived; + #endif + + /** Copies the other permutation into *this */ + template + Derived& operator=(const PermutationBase& other) + { + indices() = other.indices(); + return derived(); + } + + /** Assignment from the Transpositions \a tr */ + template + Derived& operator=(const TranspositionsBase& tr) + { + setIdentity(tr.size()); + for(Index k=size()-1; k>=0; --k) + applyTranspositionOnTheRight(k,tr.coeff(k)); + return derived(); + } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** This is a special case of the templated operator=. Its purpose is to + * prevent a default operator= from hiding the templated operator=. + */ + Derived& operator=(const PermutationBase& other) + { + indices() = other.indices(); + return derived(); + } + #endif + + /** \returns the number of rows */ + inline Index rows() const { return indices().size(); } + + /** \returns the number of columns */ + inline Index cols() const { return indices().size(); } + + /** \returns the size of a side of the respective square matrix, i.e., the number of indices */ + inline Index size() const { return indices().size(); } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + template + void evalTo(MatrixBase& other) const + { + other.setZero(); + for (int i=0; i=0 && j>=0 && i=0 && j>=0 && i inverse() const + { return derived(); } + /** \returns the tranpose permutation matrix. + * + * \note \note_try_to_help_rvo + */ + inline Transpose transpose() const + { return derived(); } + + /**** multiplication helpers to hopefully get RVO ****/ + + +#ifndef EIGEN_PARSED_BY_DOXYGEN + protected: + template + void assignTranspose(const PermutationBase& other) + { + for (int i=0; i + void assignProduct(const Lhs& lhs, const Rhs& rhs) + { + eigen_assert(lhs.cols() == rhs.rows()); + for (int i=0; i + inline PlainPermutationType operator*(const PermutationBase& other) const + { return PlainPermutationType(internal::PermPermProduct, derived(), other.derived()); } + + /** \returns the product of a permutation with another inverse permutation. + * + * \note \note_try_to_help_rvo + */ + template + inline PlainPermutationType operator*(const Transpose >& other) const + { return PlainPermutationType(internal::PermPermProduct, *this, other.eval()); } + + /** \returns the product of an inverse permutation with another permutation. + * + * \note \note_try_to_help_rvo + */ + template friend + inline PlainPermutationType operator*(const Transpose >& other, const PermutationBase& perm) + { return PlainPermutationType(internal::PermPermProduct, other.eval(), perm); } + + protected: + +}; + +/** \class PermutationMatrix + * \ingroup Core_Module + * + * \brief Permutation matrix + * + * \param SizeAtCompileTime the number of rows/cols, or Dynamic + * \param MaxSizeAtCompileTime the maximum number of rows/cols, or Dynamic. This optional parameter defaults to SizeAtCompileTime. Most of the time, you should not have to specify it. + * \param IndexType the interger type of the indices + * + * This class represents a permutation matrix, internally stored as a vector of integers. + * + * \sa class PermutationBase, class PermutationWrapper, class DiagonalMatrix + */ + +namespace internal { +template +struct traits > + : traits > +{ + typedef IndexType Index; + typedef Matrix IndicesType; +}; +} + +template +class PermutationMatrix : public PermutationBase > +{ + typedef PermutationBase Base; + typedef internal::traits Traits; + public: + + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef typename Traits::IndicesType IndicesType; + #endif + + inline PermutationMatrix() + {} + + /** Constructs an uninitialized permutation matrix of given size. + */ + inline PermutationMatrix(int size) : m_indices(size) + {} + + /** Copy constructor. */ + template + inline PermutationMatrix(const PermutationBase& other) + : m_indices(other.indices()) {} + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** Standard copy constructor. Defined only to prevent a default copy constructor + * from hiding the other templated constructor */ + inline PermutationMatrix(const PermutationMatrix& other) : m_indices(other.indices()) {} + #endif + + /** Generic constructor from expression of the indices. The indices + * array has the meaning that the permutations sends each integer i to indices[i]. + * + * \warning It is your responsibility to check that the indices array that you passes actually + * describes a permutation, i.e., each value between 0 and n-1 occurs exactly once, where n is the + * array's size. + */ + template + explicit inline PermutationMatrix(const MatrixBase& indices) : m_indices(indices) + {} + + /** Convert the Transpositions \a tr to a permutation matrix */ + template + explicit PermutationMatrix(const TranspositionsBase& tr) + : m_indices(tr.size()) + { + *this = tr; + } + + /** Copies the other permutation into *this */ + template + PermutationMatrix& operator=(const PermutationBase& other) + { + m_indices = other.indices(); + return *this; + } + + /** Assignment from the Transpositions \a tr */ + template + PermutationMatrix& operator=(const TranspositionsBase& tr) + { + return Base::operator=(tr.derived()); + } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** This is a special case of the templated operator=. Its purpose is to + * prevent a default operator= from hiding the templated operator=. + */ + PermutationMatrix& operator=(const PermutationMatrix& other) + { + m_indices = other.m_indices; + return *this; + } + #endif + + /** const version of indices(). */ + const IndicesType& indices() const { return m_indices; } + /** \returns a reference to the stored array representing the permutation. */ + IndicesType& indices() { return m_indices; } + + + /**** multiplication helpers to hopefully get RVO ****/ + +#ifndef EIGEN_PARSED_BY_DOXYGEN + template + PermutationMatrix(const Transpose >& other) + : m_indices(other.nestedPermutation().size()) + { + for (int i=0; i + PermutationMatrix(internal::PermPermProduct_t, const Lhs& lhs, const Rhs& rhs) + : m_indices(lhs.indices().size()) + { + Base::assignProduct(lhs,rhs); + } +#endif + + protected: + + IndicesType m_indices; +}; + + +namespace internal { +template +struct traits,_PacketAccess> > + : traits > +{ + typedef IndexType Index; + typedef Map, _PacketAccess> IndicesType; +}; +} + +template +class Map,_PacketAccess> + : public PermutationBase,_PacketAccess> > +{ + typedef PermutationBase Base; + typedef internal::traits Traits; + public: + + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef typename Traits::IndicesType IndicesType; + typedef typename IndicesType::Scalar Index; + #endif + + inline Map(const Index* indices) + : m_indices(indices) + {} + + inline Map(const Index* indices, Index size) + : m_indices(indices,size) + {} + + /** Copies the other permutation into *this */ + template + Map& operator=(const PermutationBase& other) + { return Base::operator=(other.derived()); } + + /** Assignment from the Transpositions \a tr */ + template + Map& operator=(const TranspositionsBase& tr) + { return Base::operator=(tr.derived()); } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + /** This is a special case of the templated operator=. Its purpose is to + * prevent a default operator= from hiding the templated operator=. + */ + Map& operator=(const Map& other) + { + m_indices = other.m_indices; + return *this; + } + #endif + + /** const version of indices(). */ + const IndicesType& indices() const { return m_indices; } + /** \returns a reference to the stored array representing the permutation. */ + IndicesType& indices() { return m_indices; } + + protected: + + IndicesType m_indices; +}; + +/** \class PermutationWrapper + * \ingroup Core_Module + * + * \brief Class to view a vector of integers as a permutation matrix + * + * \param _IndicesType the type of the vector of integer (can be any compatible expression) + * + * This class allows to view any vector expression of integers as a permutation matrix. + * + * \sa class PermutationBase, class PermutationMatrix + */ + +struct PermutationStorage {}; + +template class TranspositionsWrapper; +namespace internal { +template +struct traits > +{ + typedef PermutationStorage StorageKind; + typedef typename _IndicesType::Scalar Scalar; + typedef typename _IndicesType::Scalar Index; + typedef _IndicesType IndicesType; + enum { + RowsAtCompileTime = _IndicesType::SizeAtCompileTime, + ColsAtCompileTime = _IndicesType::SizeAtCompileTime, + MaxRowsAtCompileTime = IndicesType::MaxRowsAtCompileTime, + MaxColsAtCompileTime = IndicesType::MaxColsAtCompileTime, + Flags = 0, + CoeffReadCost = _IndicesType::CoeffReadCost + }; +}; +} + +template +class PermutationWrapper : public PermutationBase > +{ + typedef PermutationBase Base; + typedef internal::traits Traits; + public: + + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef typename Traits::IndicesType IndicesType; + #endif + + inline PermutationWrapper(const IndicesType& indices) + : m_indices(indices) + {} + + /** const version of indices(). */ + const typename internal::remove_all::type& + indices() const { return m_indices; } + + protected: + + const typename IndicesType::Nested m_indices; +}; + +/** \returns the matrix with the permutation applied to the columns. + */ +template +inline const internal::permut_matrix_product_retval +operator*(const MatrixBase& matrix, + const PermutationBase &permutation) +{ + return internal::permut_matrix_product_retval + + (permutation.derived(), matrix.derived()); +} + +/** \returns the matrix with the permutation applied to the rows. + */ +template +inline const internal::permut_matrix_product_retval + +operator*(const PermutationBase &permutation, + const MatrixBase& matrix) +{ + return internal::permut_matrix_product_retval + + (permutation.derived(), matrix.derived()); +} + +namespace internal { + +template +struct traits > +{ + typedef typename MatrixType::PlainObject ReturnType; +}; + +template +struct permut_matrix_product_retval + : public ReturnByValue > +{ + typedef typename remove_all::type MatrixTypeNestedCleaned; + + permut_matrix_product_retval(const PermutationType& perm, const MatrixType& matrix) + : m_permutation(perm), m_matrix(matrix) + {} + + inline int rows() const { return m_matrix.rows(); } + inline int cols() const { return m_matrix.cols(); } + + template inline void evalTo(Dest& dst) const + { + const int n = Side==OnTheLeft ? rows() : cols(); + + if(is_same::value && extract_data(dst) == extract_data(m_matrix)) + { + // apply the permutation inplace + Matrix mask(m_permutation.size()); + mask.fill(false); + int r = 0; + while(r < m_permutation.size()) + { + // search for the next seed + while(r=m_permutation.size()) + break; + // we got one, let's follow it until we are back to the seed + int k0 = r++; + int kPrev = k0; + mask.coeffRef(k0) = true; + for(int k=m_permutation.indices().coeff(k0); k!=k0; k=m_permutation.indices().coeff(k)) + { + Block(dst, k) + .swap(Block + (dst,((Side==OnTheLeft) ^ Transposed) ? k0 : kPrev)); + + mask.coeffRef(k) = true; + kPrev = k; + } + } + } + else + { + for(int i = 0; i < n; ++i) + { + Block + (dst, ((Side==OnTheLeft) ^ Transposed) ? m_permutation.indices().coeff(i) : i) + + = + + Block + (m_matrix, ((Side==OnTheRight) ^ Transposed) ? m_permutation.indices().coeff(i) : i); + } + } + } + + protected: + const PermutationType& m_permutation; + const typename MatrixType::Nested m_matrix; +}; + +/* Template partial specialization for transposed/inverse permutations */ + +template +struct traits > > + : traits +{}; + +} // end namespace internal + +template +class Transpose > + : public EigenBase > > +{ + typedef Derived PermutationType; + typedef typename PermutationType::IndicesType IndicesType; + typedef typename PermutationType::PlainPermutationType PlainPermutationType; + public: + + #ifndef EIGEN_PARSED_BY_DOXYGEN + typedef internal::traits Traits; + typedef typename Derived::DenseMatrixType DenseMatrixType; + enum { + Flags = Traits::Flags, + CoeffReadCost = Traits::CoeffReadCost, + RowsAtCompileTime = Traits::RowsAtCompileTime, + ColsAtCompileTime = Traits::ColsAtCompileTime, + MaxRowsAtCompileTime = Traits::MaxRowsAtCompileTime, + MaxColsAtCompileTime = Traits::MaxColsAtCompileTime + }; + typedef typename Traits::Scalar Scalar; + #endif + + Transpose(const PermutationType& p) : m_permutation(p) {} + + inline int rows() const { return m_permutation.rows(); } + inline int cols() const { return m_permutation.cols(); } + + #ifndef EIGEN_PARSED_BY_DOXYGEN + template + void evalTo(MatrixBase& other) const + { + other.setZero(); + for (int i=0; i friend + inline const internal::permut_matrix_product_retval + operator*(const MatrixBase& matrix, const Transpose& trPerm) + { + return internal::permut_matrix_product_retval(trPerm.m_permutation, matrix.derived()); + } + + /** \returns the matrix with the inverse permutation applied to the rows. + */ + template + inline const internal::permut_matrix_product_retval + operator*(const MatrixBase& matrix) const + { + return internal::permut_matrix_product_retval(m_permutation, matrix.derived()); + } + + const PermutationType& nestedPermutation() const { return m_permutation; } + + protected: + const PermutationType& m_permutation; +}; + +template +const PermutationWrapper MatrixBase::asPermutation() const +{ + return derived(); +} + +#endif // EIGEN_PERMUTATIONMATRIX_H diff --git a/asift_match/src/third_party/Eigen/src/Core/PlainObjectBase.h b/asift_match/src/third_party/Eigen/src/Core/PlainObjectBase.h new file mode 100755 index 0000000..5358cb5 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/PlainObjectBase.h @@ -0,0 +1,740 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2009 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_DENSESTORAGEBASE_H +#define EIGEN_DENSESTORAGEBASE_H + +#ifdef EIGEN_INITIALIZE_MATRICES_BY_ZERO +# define EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED for(int i=0;i(Derived::IsVectorAtCompileTime)> struct conservative_resize_like_impl; + +template struct matrix_swap_impl; + +} // end namespace internal + +/** + * \brief %Dense storage base class for matrices and arrays. + * + * This class can be extended with the help of the plugin mechanism described on the page + * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_PLAINOBJECTBASE_PLUGIN. + * + * \sa \ref TopicClassHierarchy + */ +template +class PlainObjectBase : public internal::dense_xpr_base::type +{ + public: + enum { Options = internal::traits::Options }; + typedef typename internal::dense_xpr_base::type Base; + + typedef typename internal::traits::StorageKind StorageKind; + typedef typename internal::traits::Index Index; + typedef typename internal::traits::Scalar Scalar; + typedef typename internal::packet_traits::type PacketScalar; + typedef typename NumTraits::Real RealScalar; + typedef Derived DenseType; + + using Base::RowsAtCompileTime; + using Base::ColsAtCompileTime; + using Base::SizeAtCompileTime; + using Base::MaxRowsAtCompileTime; + using Base::MaxColsAtCompileTime; + using Base::MaxSizeAtCompileTime; + using Base::IsVectorAtCompileTime; + using Base::Flags; + + template friend class Eigen::Map; + friend class Eigen::Map; + typedef Eigen::Map MapType; + friend class Eigen::Map; + typedef const Eigen::Map ConstMapType; + friend class Eigen::Map; + typedef Eigen::Map AlignedMapType; + friend class Eigen::Map; + typedef const Eigen::Map ConstAlignedMapType; + template struct StridedMapType { typedef Eigen::Map type; }; + template struct StridedConstMapType { typedef Eigen::Map type; }; + template struct StridedAlignedMapType { typedef Eigen::Map type; }; + template struct StridedConstAlignedMapType { typedef Eigen::Map type; }; + + + protected: + DenseStorage m_storage; + + public: + enum { NeedsToAlign = (!(Options&DontAlign)) + && SizeAtCompileTime!=Dynamic && ((static_cast(sizeof(Scalar))*SizeAtCompileTime)%16)==0 }; + EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) + + Base& base() { return *static_cast(this); } + const Base& base() const { return *static_cast(this); } + + EIGEN_STRONG_INLINE Index rows() const { return m_storage.rows(); } + EIGEN_STRONG_INLINE Index cols() const { return m_storage.cols(); } + + EIGEN_STRONG_INLINE const Scalar& coeff(Index row, Index col) const + { + if(Flags & RowMajorBit) + return m_storage.data()[col + row * m_storage.cols()]; + else // column-major + return m_storage.data()[row + col * m_storage.rows()]; + } + + EIGEN_STRONG_INLINE const Scalar& coeff(Index index) const + { + return m_storage.data()[index]; + } + + EIGEN_STRONG_INLINE Scalar& coeffRef(Index row, Index col) + { + if(Flags & RowMajorBit) + return m_storage.data()[col + row * m_storage.cols()]; + else // column-major + return m_storage.data()[row + col * m_storage.rows()]; + } + + EIGEN_STRONG_INLINE Scalar& coeffRef(Index index) + { + return m_storage.data()[index]; + } + + EIGEN_STRONG_INLINE const Scalar& coeffRef(Index row, Index col) const + { + if(Flags & RowMajorBit) + return m_storage.data()[col + row * m_storage.cols()]; + else // column-major + return m_storage.data()[row + col * m_storage.rows()]; + } + + EIGEN_STRONG_INLINE const Scalar& coeffRef(Index index) const + { + return m_storage.data()[index]; + } + + /** \internal */ + template + EIGEN_STRONG_INLINE PacketScalar packet(Index row, Index col) const + { + return internal::ploadt + (m_storage.data() + (Flags & RowMajorBit + ? col + row * m_storage.cols() + : row + col * m_storage.rows())); + } + + /** \internal */ + template + EIGEN_STRONG_INLINE PacketScalar packet(Index index) const + { + return internal::ploadt(m_storage.data() + index); + } + + /** \internal */ + template + EIGEN_STRONG_INLINE void writePacket(Index row, Index col, const PacketScalar& x) + { + internal::pstoret + (m_storage.data() + (Flags & RowMajorBit + ? col + row * m_storage.cols() + : row + col * m_storage.rows()), x); + } + + /** \internal */ + template + EIGEN_STRONG_INLINE void writePacket(Index index, const PacketScalar& x) + { + internal::pstoret(m_storage.data() + index, x); + } + + /** \returns a const pointer to the data array of this matrix */ + EIGEN_STRONG_INLINE const Scalar *data() const + { return m_storage.data(); } + + /** \returns a pointer to the data array of this matrix */ + EIGEN_STRONG_INLINE Scalar *data() + { return m_storage.data(); } + + /** Resizes \c *this to a \a rows x \a cols matrix. + * + * This method is intended for dynamic-size matrices, although it is legal to call it on any + * matrix as long as fixed dimensions are left unchanged. If you only want to change the number + * of rows and/or of columns, you can use resize(NoChange_t, Index), resize(Index, NoChange_t). + * + * If the current number of coefficients of \c *this exactly matches the + * product \a rows * \a cols, then no memory allocation is performed and + * the current values are left unchanged. In all other cases, including + * shrinking, the data is reallocated and all previous values are lost. + * + * Example: \include Matrix_resize_int_int.cpp + * Output: \verbinclude Matrix_resize_int_int.out + * + * \sa resize(Index) for vectors, resize(NoChange_t, Index), resize(Index, NoChange_t) + */ + EIGEN_STRONG_INLINE void resize(Index rows, Index cols) + { + #ifdef EIGEN_INITIALIZE_MATRICES_BY_ZERO + Index size = rows*cols; + bool size_changed = size != this->size(); + m_storage.resize(size, rows, cols); + if(size_changed) EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + #else + m_storage.resize(rows*cols, rows, cols); + #endif + } + + /** Resizes \c *this to a vector of length \a size + * + * \only_for_vectors. This method does not work for + * partially dynamic matrices when the static dimension is anything other + * than 1. For example it will not work with Matrix. + * + * Example: \include Matrix_resize_int.cpp + * Output: \verbinclude Matrix_resize_int.out + * + * \sa resize(Index,Index), resize(NoChange_t, Index), resize(Index, NoChange_t) + */ + inline void resize(Index size) + { + EIGEN_STATIC_ASSERT_VECTOR_ONLY(PlainObjectBase) + eigen_assert(SizeAtCompileTime == Dynamic || SizeAtCompileTime == size); + #ifdef EIGEN_INITIALIZE_MATRICES_BY_ZERO + bool size_changed = size != this->size(); + #endif + if(RowsAtCompileTime == 1) + m_storage.resize(size, 1, size); + else + m_storage.resize(size, size, 1); + #ifdef EIGEN_INITIALIZE_MATRICES_BY_ZERO + if(size_changed) EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + #endif + } + + /** Resizes the matrix, changing only the number of columns. For the parameter of type NoChange_t, just pass the special value \c NoChange + * as in the example below. + * + * Example: \include Matrix_resize_NoChange_int.cpp + * Output: \verbinclude Matrix_resize_NoChange_int.out + * + * \sa resize(Index,Index) + */ + inline void resize(NoChange_t, Index cols) + { + resize(rows(), cols); + } + + /** Resizes the matrix, changing only the number of rows. For the parameter of type NoChange_t, just pass the special value \c NoChange + * as in the example below. + * + * Example: \include Matrix_resize_int_NoChange.cpp + * Output: \verbinclude Matrix_resize_int_NoChange.out + * + * \sa resize(Index,Index) + */ + inline void resize(Index rows, NoChange_t) + { + resize(rows, cols()); + } + + /** Resizes \c *this to have the same dimensions as \a other. + * Takes care of doing all the checking that's needed. + * + * Note that copying a row-vector into a vector (and conversely) is allowed. + * The resizing, if any, is then done in the appropriate way so that row-vectors + * remain row-vectors and vectors remain vectors. + */ + template + EIGEN_STRONG_INLINE void resizeLike(const EigenBase& _other) + { + const OtherDerived& other = _other.derived(); + const Index othersize = other.rows()*other.cols(); + if(RowsAtCompileTime == 1) + { + eigen_assert(other.rows() == 1 || other.cols() == 1); + resize(1, othersize); + } + else if(ColsAtCompileTime == 1) + { + eigen_assert(other.rows() == 1 || other.cols() == 1); + resize(othersize, 1); + } + else resize(other.rows(), other.cols()); + } + + /** Resizes the matrix to \a rows x \a cols while leaving old values untouched. + * + * The method is intended for matrices of dynamic size. If you only want to change the number + * of rows and/or of columns, you can use conservativeResize(NoChange_t, Index) or + * conservativeResize(Index, NoChange_t). + * + * Matrices are resized relative to the top-left element. In case values need to be + * appended to the matrix they will be uninitialized. + */ + EIGEN_STRONG_INLINE void conservativeResize(Index rows, Index cols) + { + internal::conservative_resize_like_impl::run(*this, rows, cols); + } + + /** Resizes the matrix to \a rows x \a cols while leaving old values untouched. + * + * As opposed to conservativeResize(Index rows, Index cols), this version leaves + * the number of columns unchanged. + * + * In case the matrix is growing, new rows will be uninitialized. + */ + EIGEN_STRONG_INLINE void conservativeResize(Index rows, NoChange_t) + { + // Note: see the comment in conservativeResize(Index,Index) + conservativeResize(rows, cols()); + } + + /** Resizes the matrix to \a rows x \a cols while leaving old values untouched. + * + * As opposed to conservativeResize(Index rows, Index cols), this version leaves + * the number of rows unchanged. + * + * In case the matrix is growing, new columns will be uninitialized. + */ + EIGEN_STRONG_INLINE void conservativeResize(NoChange_t, Index cols) + { + // Note: see the comment in conservativeResize(Index,Index) + conservativeResize(rows(), cols); + } + + /** Resizes the vector to \a size while retaining old values. + * + * \only_for_vectors. This method does not work for + * partially dynamic matrices when the static dimension is anything other + * than 1. For example it will not work with Matrix. + * + * When values are appended, they will be uninitialized. + */ + EIGEN_STRONG_INLINE void conservativeResize(Index size) + { + internal::conservative_resize_like_impl::run(*this, size); + } + + /** Resizes the matrix to \a rows x \a cols of \c other, while leaving old values untouched. + * + * The method is intended for matrices of dynamic size. If you only want to change the number + * of rows and/or of columns, you can use conservativeResize(NoChange_t, Index) or + * conservativeResize(Index, NoChange_t). + * + * Matrices are resized relative to the top-left element. In case values need to be + * appended to the matrix they will copied from \c other. + */ + template + EIGEN_STRONG_INLINE void conservativeResizeLike(const DenseBase& other) + { + internal::conservative_resize_like_impl::run(*this, other); + } + + /** This is a special case of the templated operator=. Its purpose is to + * prevent a default operator= from hiding the templated operator=. + */ + EIGEN_STRONG_INLINE Derived& operator=(const PlainObjectBase& other) + { + return _set(other); + } + + /** \sa MatrixBase::lazyAssign() */ + template + EIGEN_STRONG_INLINE Derived& lazyAssign(const DenseBase& other) + { + _resize_to_match(other); + return Base::lazyAssign(other.derived()); + } + + template + EIGEN_STRONG_INLINE Derived& operator=(const ReturnByValue& func) + { + resize(func.rows(), func.cols()); + return Base::operator=(func); + } + + EIGEN_STRONG_INLINE explicit PlainObjectBase() : m_storage() + { +// _check_template_params(); +// EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + +#ifndef EIGEN_PARSED_BY_DOXYGEN + // FIXME is it still needed ? + /** \internal */ + PlainObjectBase(internal::constructor_without_unaligned_array_assert) + : m_storage(internal::constructor_without_unaligned_array_assert()) + { +// _check_template_params(); EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } +#endif + + EIGEN_STRONG_INLINE PlainObjectBase(Index size, Index rows, Index cols) + : m_storage(size, rows, cols) + { +// _check_template_params(); +// EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + + /** \copydoc MatrixBase::operator=(const EigenBase&) + */ + template + EIGEN_STRONG_INLINE Derived& operator=(const EigenBase &other) + { + _resize_to_match(other); + Base::operator=(other.derived()); + return this->derived(); + } + + /** \sa MatrixBase::operator=(const EigenBase&) */ + template + EIGEN_STRONG_INLINE PlainObjectBase(const EigenBase &other) + : m_storage(other.derived().rows() * other.derived().cols(), other.derived().rows(), other.derived().cols()) + { + _check_template_params(); + Base::operator=(other.derived()); + } + + /** \name Map + * These are convenience functions returning Map objects. The Map() static functions return unaligned Map objects, + * while the AlignedMap() functions return aligned Map objects and thus should be called only with 16-byte-aligned + * \a data pointers. + * + * These methods do not allow to specify strides. If you need to specify strides, you have to + * use the Map class directly. + * + * \see class Map + */ + //@{ + inline static ConstMapType Map(const Scalar* data) + { return ConstMapType(data); } + inline static MapType Map(Scalar* data) + { return MapType(data); } + inline static ConstMapType Map(const Scalar* data, Index size) + { return ConstMapType(data, size); } + inline static MapType Map(Scalar* data, Index size) + { return MapType(data, size); } + inline static ConstMapType Map(const Scalar* data, Index rows, Index cols) + { return ConstMapType(data, rows, cols); } + inline static MapType Map(Scalar* data, Index rows, Index cols) + { return MapType(data, rows, cols); } + + inline static ConstAlignedMapType MapAligned(const Scalar* data) + { return ConstAlignedMapType(data); } + inline static AlignedMapType MapAligned(Scalar* data) + { return AlignedMapType(data); } + inline static ConstAlignedMapType MapAligned(const Scalar* data, Index size) + { return ConstAlignedMapType(data, size); } + inline static AlignedMapType MapAligned(Scalar* data, Index size) + { return AlignedMapType(data, size); } + inline static ConstAlignedMapType MapAligned(const Scalar* data, Index rows, Index cols) + { return ConstAlignedMapType(data, rows, cols); } + inline static AlignedMapType MapAligned(Scalar* data, Index rows, Index cols) + { return AlignedMapType(data, rows, cols); } + + template + inline static typename StridedConstMapType >::type Map(const Scalar* data, const Stride& stride) + { return typename StridedConstMapType >::type(data, stride); } + template + inline static typename StridedMapType >::type Map(Scalar* data, const Stride& stride) + { return typename StridedMapType >::type(data, stride); } + template + inline static typename StridedConstMapType >::type Map(const Scalar* data, Index size, const Stride& stride) + { return typename StridedConstMapType >::type(data, size, stride); } + template + inline static typename StridedMapType >::type Map(Scalar* data, Index size, const Stride& stride) + { return typename StridedMapType >::type(data, size, stride); } + template + inline static typename StridedConstMapType >::type Map(const Scalar* data, Index rows, Index cols, const Stride& stride) + { return typename StridedConstMapType >::type(data, rows, cols, stride); } + template + inline static typename StridedMapType >::type Map(Scalar* data, Index rows, Index cols, const Stride& stride) + { return typename StridedMapType >::type(data, rows, cols, stride); } + + template + inline static typename StridedConstAlignedMapType >::type MapAligned(const Scalar* data, const Stride& stride) + { return typename StridedConstAlignedMapType >::type(data, stride); } + template + inline static typename StridedAlignedMapType >::type MapAligned(Scalar* data, const Stride& stride) + { return typename StridedAlignedMapType >::type(data, stride); } + template + inline static typename StridedConstAlignedMapType >::type MapAligned(const Scalar* data, Index size, const Stride& stride) + { return typename StridedConstAlignedMapType >::type(data, size, stride); } + template + inline static typename StridedAlignedMapType >::type MapAligned(Scalar* data, Index size, const Stride& stride) + { return typename StridedAlignedMapType >::type(data, size, stride); } + template + inline static typename StridedConstAlignedMapType >::type MapAligned(const Scalar* data, Index rows, Index cols, const Stride& stride) + { return typename StridedConstAlignedMapType >::type(data, rows, cols, stride); } + template + inline static typename StridedAlignedMapType >::type MapAligned(Scalar* data, Index rows, Index cols, const Stride& stride) + { return typename StridedAlignedMapType >::type(data, rows, cols, stride); } + //@} + + using Base::setConstant; + Derived& setConstant(Index size, const Scalar& value); + Derived& setConstant(Index rows, Index cols, const Scalar& value); + + using Base::setZero; + Derived& setZero(Index size); + Derived& setZero(Index rows, Index cols); + + using Base::setOnes; + Derived& setOnes(Index size); + Derived& setOnes(Index rows, Index cols); + + using Base::setRandom; + Derived& setRandom(Index size); + Derived& setRandom(Index rows, Index cols); + + #ifdef EIGEN_PLAINOBJECTBASE_PLUGIN + #include EIGEN_PLAINOBJECTBASE_PLUGIN + #endif + + protected: + /** \internal Resizes *this in preparation for assigning \a other to it. + * Takes care of doing all the checking that's needed. + * + * Note that copying a row-vector into a vector (and conversely) is allowed. + * The resizing, if any, is then done in the appropriate way so that row-vectors + * remain row-vectors and vectors remain vectors. + */ + template + EIGEN_STRONG_INLINE void _resize_to_match(const EigenBase& other) + { + #ifdef EIGEN_NO_AUTOMATIC_RESIZING + eigen_assert((this->size()==0 || (IsVectorAtCompileTime ? (this->size() == other.size()) + : (rows() == other.rows() && cols() == other.cols()))) + && "Size mismatch. Automatic resizing is disabled because EIGEN_NO_AUTOMATIC_RESIZING is defined"); + #else + resizeLike(other); + #endif + } + + /** + * \brief Copies the value of the expression \a other into \c *this with automatic resizing. + * + * *this might be resized to match the dimensions of \a other. If *this was a null matrix (not already initialized), + * it will be initialized. + * + * Note that copying a row-vector into a vector (and conversely) is allowed. + * The resizing, if any, is then done in the appropriate way so that row-vectors + * remain row-vectors and vectors remain vectors. + * + * \sa operator=(const MatrixBase&), _set_noalias() + * + * \internal + */ + template + EIGEN_STRONG_INLINE Derived& _set(const DenseBase& other) + { + _set_selector(other.derived(), typename internal::conditional(int(OtherDerived::Flags) & EvalBeforeAssigningBit), internal::true_type, internal::false_type>::type()); + return this->derived(); + } + + template + EIGEN_STRONG_INLINE void _set_selector(const OtherDerived& other, const internal::true_type&) { _set_noalias(other.eval()); } + + template + EIGEN_STRONG_INLINE void _set_selector(const OtherDerived& other, const internal::false_type&) { _set_noalias(other); } + + /** \internal Like _set() but additionally makes the assumption that no aliasing effect can happen (which + * is the case when creating a new matrix) so one can enforce lazy evaluation. + * + * \sa operator=(const MatrixBase&), _set() + */ + template + EIGEN_STRONG_INLINE Derived& _set_noalias(const DenseBase& other) + { + // I don't think we need this resize call since the lazyAssign will anyways resize + // and lazyAssign will be called by the assign selector. + //_resize_to_match(other); + // the 'false' below means to enforce lazy evaluation. We don't use lazyAssign() because + // it wouldn't allow to copy a row-vector into a column-vector. + return internal::assign_selector::run(this->derived(), other.derived()); + } + + template + EIGEN_STRONG_INLINE void _init2(Index rows, Index cols, typename internal::enable_if::type* = 0) + { + eigen_assert(rows >= 0 && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == rows) + && cols >= 0 && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == cols)); + m_storage.resize(rows*cols,rows,cols); + EIGEN_INITIALIZE_BY_ZERO_IF_THAT_OPTION_IS_ENABLED + } + template + EIGEN_STRONG_INLINE void _init2(const Scalar& x, const Scalar& y, typename internal::enable_if::type* = 0) + { + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(PlainObjectBase, 2) + m_storage.data()[0] = x; + m_storage.data()[1] = y; + } + + template + friend struct internal::matrix_swap_impl; + + /** \internal generic implementation of swap for dense storage since for dynamic-sized matrices of same type it is enough to swap the + * data pointers. + */ + template + void _swap(DenseBase const & other) + { + enum { SwapPointers = internal::is_same::value && Base::SizeAtCompileTime==Dynamic }; + internal::matrix_swap_impl::run(this->derived(), other.const_cast_derived()); + } + + public: +#ifndef EIGEN_PARSED_BY_DOXYGEN + EIGEN_STRONG_INLINE static void _check_template_params() + { + EIGEN_STATIC_ASSERT((EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, (Options&RowMajor)==RowMajor) + && EIGEN_IMPLIES(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, (Options&RowMajor)==0) + && ((RowsAtCompileTime == Dynamic) || (RowsAtCompileTime >= 0)) + && ((ColsAtCompileTime == Dynamic) || (ColsAtCompileTime >= 0)) + && ((MaxRowsAtCompileTime == Dynamic) || (MaxRowsAtCompileTime >= 0)) + && ((MaxColsAtCompileTime == Dynamic) || (MaxColsAtCompileTime >= 0)) + && (MaxRowsAtCompileTime == RowsAtCompileTime || RowsAtCompileTime==Dynamic) + && (MaxColsAtCompileTime == ColsAtCompileTime || ColsAtCompileTime==Dynamic) + && (Options & (DontAlign|RowMajor)) == Options), + INVALID_MATRIX_TEMPLATE_PARAMETERS) + } +#endif + +private: + enum { ThisConstantIsPrivateInPlainObjectBase }; +}; + +template +struct internal::conservative_resize_like_impl +{ + typedef typename Derived::Index Index; + static void run(DenseBase& _this, Index rows, Index cols) + { + if (_this.rows() == rows && _this.cols() == cols) return; + EIGEN_STATIC_ASSERT_DYNAMIC_SIZE(Derived) + + if ( ( Derived::IsRowMajor && _this.cols() == cols) || // row-major and we change only the number of rows + (!Derived::IsRowMajor && _this.rows() == rows) ) // column-major and we change only the number of columns + { + _this.derived().m_storage.conservativeResize(rows*cols,rows,cols); + } + else + { + // The storage order does not allow us to use reallocation. + typename Derived::PlainObject tmp(rows,cols); + const Index common_rows = std::min(rows, _this.rows()); + const Index common_cols = std::min(cols, _this.cols()); + tmp.block(0,0,common_rows,common_cols) = _this.block(0,0,common_rows,common_cols); + _this.derived().swap(tmp); + } + } + + static void run(DenseBase& _this, const DenseBase& other) + { + if (_this.rows() == other.rows() && _this.cols() == other.cols()) return; + + // Note: Here is space for improvement. Basically, for conservativeResize(Index,Index), + // neither RowsAtCompileTime or ColsAtCompileTime must be Dynamic. If only one of the + // dimensions is dynamic, one could use either conservativeResize(Index rows, NoChange_t) or + // conservativeResize(NoChange_t, Index cols). For these methods new static asserts like + // EIGEN_STATIC_ASSERT_DYNAMIC_ROWS and EIGEN_STATIC_ASSERT_DYNAMIC_COLS would be good. + EIGEN_STATIC_ASSERT_DYNAMIC_SIZE(Derived) + EIGEN_STATIC_ASSERT_DYNAMIC_SIZE(OtherDerived) + + if ( ( Derived::IsRowMajor && _this.cols() == other.cols()) || // row-major and we change only the number of rows + (!Derived::IsRowMajor && _this.rows() == other.rows()) ) // column-major and we change only the number of columns + { + const Index new_rows = other.rows() - _this.rows(); + const Index new_cols = other.cols() - _this.cols(); + _this.derived().m_storage.conservativeResize(other.size(),other.rows(),other.cols()); + if (new_rows>0) + _this.bottomRightCorner(new_rows, other.cols()) = other.bottomRows(new_rows); + else if (new_cols>0) + _this.bottomRightCorner(other.rows(), new_cols) = other.rightCols(new_cols); + } + else + { + // The storage order does not allow us to use reallocation. + typename Derived::PlainObject tmp(other); + const Index common_rows = std::min(tmp.rows(), _this.rows()); + const Index common_cols = std::min(tmp.cols(), _this.cols()); + tmp.block(0,0,common_rows,common_cols) = _this.block(0,0,common_rows,common_cols); + _this.derived().swap(tmp); + } + } +}; + +namespace internal { + +template +struct conservative_resize_like_impl +{ + typedef typename Derived::Index Index; + static void run(DenseBase& _this, Index size) + { + const Index new_rows = Derived::RowsAtCompileTime==1 ? 1 : size; + const Index new_cols = Derived::RowsAtCompileTime==1 ? size : 1; + _this.derived().m_storage.conservativeResize(size,new_rows,new_cols); + } + + static void run(DenseBase& _this, const DenseBase& other) + { + if (_this.rows() == other.rows() && _this.cols() == other.cols()) return; + + const Index num_new_elements = other.size() - _this.size(); + + const Index new_rows = Derived::RowsAtCompileTime==1 ? 1 : other.rows(); + const Index new_cols = Derived::RowsAtCompileTime==1 ? other.cols() : 1; + _this.derived().m_storage.conservativeResize(other.size(),new_rows,new_cols); + + if (num_new_elements > 0) + _this.tail(num_new_elements) = other.tail(num_new_elements); + } +}; + +template +struct matrix_swap_impl +{ + static inline void run(MatrixTypeA& a, MatrixTypeB& b) + { + a.base().swap(b); + } +}; + +template +struct matrix_swap_impl +{ + static inline void run(MatrixTypeA& a, MatrixTypeB& b) + { + static_cast(a).m_storage.swap(static_cast(b).m_storage); + } +}; + +} // end namespace internal + +#endif // EIGEN_DENSESTORAGEBASE_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Product.h b/asift_match/src/third_party/Eigen/src/Core/Product.h new file mode 100755 index 0000000..1363e83 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Product.h @@ -0,0 +1,628 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2008 Benoit Jacob +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_PRODUCT_H +#define EIGEN_PRODUCT_H + +/** \class GeneralProduct + * \ingroup Core_Module + * + * \brief Expression of the product of two general matrices or vectors + * + * \param LhsNested the type used to store the left-hand side + * \param RhsNested the type used to store the right-hand side + * \param ProductMode the type of the product + * + * This class represents an expression of the product of two general matrices. + * We call a general matrix, a dense matrix with full storage. For instance, + * This excludes triangular, selfadjoint, and sparse matrices. + * It is the return type of the operator* between general matrices. Its template + * arguments are determined automatically by ProductReturnType. Therefore, + * GeneralProduct should never be used direclty. To determine the result type of a + * function which involves a matrix product, use ProductReturnType::Type. + * + * \sa ProductReturnType, MatrixBase::operator*(const MatrixBase&) + */ +template::value> +class GeneralProduct; + +enum { + Large = 2, + Small = 3 +}; + +namespace internal { + +template struct product_type_selector; + +template struct product_size_category +{ + enum { is_large = MaxSize == Dynamic || + Size >= EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD, + value = is_large ? Large + : Size == 1 ? 1 + : Small + }; +}; + +template struct product_type +{ + typedef typename remove_all::type _Lhs; + typedef typename remove_all::type _Rhs; + enum { + MaxRows = _Lhs::MaxRowsAtCompileTime, + Rows = _Lhs::RowsAtCompileTime, + MaxCols = _Rhs::MaxColsAtCompileTime, + Cols = _Rhs::ColsAtCompileTime, + MaxDepth = EIGEN_SIZE_MIN_PREFER_FIXED(_Lhs::MaxColsAtCompileTime, + _Rhs::MaxRowsAtCompileTime), + Depth = EIGEN_SIZE_MIN_PREFER_FIXED(_Lhs::ColsAtCompileTime, + _Rhs::RowsAtCompileTime), + LargeThreshold = EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD + }; + + // the splitting into different lines of code here, introducing the _select enums and the typedef below, + // is to work around an internal compiler error with gcc 4.1 and 4.2. +private: + enum { + rows_select = product_size_category::value, + cols_select = product_size_category::value, + depth_select = product_size_category::value + }; + typedef product_type_selector selector; + +public: + enum { + value = selector::ret + }; +#ifdef EIGEN_DEBUG_PRODUCT + static void debug() + { + EIGEN_DEBUG_VAR(Rows); + EIGEN_DEBUG_VAR(Cols); + EIGEN_DEBUG_VAR(Depth); + EIGEN_DEBUG_VAR(rows_select); + EIGEN_DEBUG_VAR(cols_select); + EIGEN_DEBUG_VAR(depth_select); + EIGEN_DEBUG_VAR(value); + } +#endif +}; + + +/* The following allows to select the kind of product at compile time + * based on the three dimensions of the product. + * This is a compile time mapping from {1,Small,Large}^3 -> {product types} */ +// FIXME I'm not sure the current mapping is the ideal one. +template struct product_type_selector { enum { ret = OuterProduct }; }; +template struct product_type_selector<1, 1, Depth> { enum { ret = InnerProduct }; }; +template<> struct product_type_selector<1, 1, 1> { enum { ret = InnerProduct }; }; +template<> struct product_type_selector { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector<1, Small,Small> { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = LazyCoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = LazyCoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = LazyCoeffBasedProductMode }; }; +template<> struct product_type_selector<1, Large,Small> { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector<1, Large,Large> { enum { ret = GemvProduct }; }; +template<> struct product_type_selector<1, Small,Large> { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = GemvProduct }; }; +template<> struct product_type_selector { enum { ret = CoeffBasedProductMode }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; +template<> struct product_type_selector { enum { ret = GemmProduct }; }; + +} // end namespace internal + +/** \class ProductReturnType + * \ingroup Core_Module + * + * \brief Helper class to get the correct and optimized returned type of operator* + * + * \param Lhs the type of the left-hand side + * \param Rhs the type of the right-hand side + * \param ProductMode the type of the product (determined automatically by internal::product_mode) + * + * This class defines the typename Type representing the optimized product expression + * between two matrix expressions. In practice, using ProductReturnType::Type + * is the recommended way to define the result type of a function returning an expression + * which involve a matrix product. The class Product should never be + * used directly. + * + * \sa class Product, MatrixBase::operator*(const MatrixBase&) + */ +template +struct ProductReturnType +{ + // TODO use the nested type to reduce instanciations ???? +// typedef typename internal::nested::type LhsNested; +// typedef typename internal::nested::type RhsNested; + + typedef GeneralProduct Type; +}; + +template +struct ProductReturnType +{ + typedef typename internal::nested::type >::type LhsNested; + typedef typename internal::nested::type >::type RhsNested; + typedef CoeffBasedProduct Type; +}; + +template +struct ProductReturnType +{ + typedef typename internal::nested::type >::type LhsNested; + typedef typename internal::nested::type >::type RhsNested; + typedef CoeffBasedProduct Type; +}; + +// this is a workaround for sun CC +template +struct LazyProductReturnType : public ProductReturnType +{}; + +/*********************************************************************** +* Implementation of Inner Vector Vector Product +***********************************************************************/ + +// FIXME : maybe the "inner product" could return a Scalar +// instead of a 1x1 matrix ?? +// Pro: more natural for the user +// Cons: this could be a problem if in a meta unrolled algorithm a matrix-matrix +// product ends up to a row-vector times col-vector product... To tackle this use +// case, we could have a specialization for Block with: operator=(Scalar x); + +namespace internal { + +template +struct traits > + : traits::ReturnType,1,1> > +{}; + +} + +template +class GeneralProduct + : internal::no_assignment_operator, + public Matrix::ReturnType,1,1> +{ + typedef Matrix::ReturnType,1,1> Base; + public: + GeneralProduct(const Lhs& lhs, const Rhs& rhs) + { + EIGEN_STATIC_ASSERT((internal::is_same::value), + YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + + Base::coeffRef(0,0) = (lhs.transpose().cwiseProduct(rhs)).sum(); + } + + /** Convertion to scalar */ + operator const typename Base::Scalar() const { + return Base::coeff(0,0); + } +}; + +/*********************************************************************** +* Implementation of Outer Vector Vector Product +***********************************************************************/ + +namespace internal { +template struct outer_product_selector; + +template +struct traits > + : traits, Lhs, Rhs> > +{}; + +} + +template +class GeneralProduct + : public ProductBase, Lhs, Rhs> +{ + public: + EIGEN_PRODUCT_PUBLIC_INTERFACE(GeneralProduct) + + GeneralProduct(const Lhs& lhs, const Rhs& rhs) : Base(lhs,rhs) + { + EIGEN_STATIC_ASSERT((internal::is_same::value), + YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + } + + template void scaleAndAddTo(Dest& dest, Scalar alpha) const + { + internal::outer_product_selector<(int(Dest::Flags)&RowMajorBit) ? RowMajor : ColMajor>::run(*this, dest, alpha); + } +}; + +namespace internal { + +template<> struct outer_product_selector { + template + static EIGEN_DONT_INLINE void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) { + typedef typename Dest::Index Index; + // FIXME make sure lhs is sequentially stored + // FIXME not very good if rhs is real and lhs complex while alpha is real too + const Index cols = dest.cols(); + for (Index j=0; j struct outer_product_selector { + template + static EIGEN_DONT_INLINE void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) { + typedef typename Dest::Index Index; + // FIXME make sure rhs is sequentially stored + // FIXME not very good if lhs is real and rhs complex while alpha is real too + const Index rows = dest.rows(); + for (Index i=0; i call fast BLAS-like colmajor routine + * 2 - the matrix is row-major, BLAS compatible and N is large => call fast BLAS-like rowmajor routine + * 3 - all other cases are handled using a simple loop along the outer-storage direction. + * Therefore we need a lower level meta selector. + * Furthermore, if the matrix is the rhs, then the product has to be transposed. + */ +namespace internal { + +template +struct traits > + : traits, Lhs, Rhs> > +{}; + +template +struct gemv_selector; + +} // end namespace internal + +template +class GeneralProduct + : public ProductBase, Lhs, Rhs> +{ + public: + EIGEN_PRODUCT_PUBLIC_INTERFACE(GeneralProduct) + + typedef typename Lhs::Scalar LhsScalar; + typedef typename Rhs::Scalar RhsScalar; + + GeneralProduct(const Lhs& lhs, const Rhs& rhs) : Base(lhs,rhs) + { +// EIGEN_STATIC_ASSERT((internal::is_same::value), +// YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY) + } + + enum { Side = Lhs::IsVectorAtCompileTime ? OnTheLeft : OnTheRight }; + typedef typename internal::conditional::type MatrixType; + + template void scaleAndAddTo(Dest& dst, Scalar alpha) const + { + eigen_assert(m_lhs.rows() == dst.rows() && m_rhs.cols() == dst.cols()); + internal::gemv_selector::HasUsableDirectAccess)>::run(*this, dst, alpha); + } +}; + +namespace internal { + +// The vector is on the left => transposition +template +struct gemv_selector +{ + template + static void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) + { + Transpose destT(dest); + enum { OtherStorageOrder = StorageOrder == RowMajor ? ColMajor : RowMajor }; + gemv_selector + ::run(GeneralProduct,Transpose, GemvProduct> + (prod.rhs().transpose(), prod.lhs().transpose()), destT, alpha); + } +}; + +template struct gemv_static_vector_if; + +template +struct gemv_static_vector_if +{ + EIGEN_STRONG_INLINE Scalar* data() { eigen_internal_assert(false && "should never be called"); return 0; } +}; + +template +struct gemv_static_vector_if +{ + EIGEN_STRONG_INLINE Scalar* data() { return 0; } +}; + +template +struct gemv_static_vector_if +{ + internal::plain_array m_data; + EIGEN_STRONG_INLINE Scalar* data() { return m_data.array; } +}; + +template<> struct gemv_selector +{ + template + static inline void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) + { + typedef typename ProductType::Index Index; + typedef typename ProductType::LhsScalar LhsScalar; + typedef typename ProductType::RhsScalar RhsScalar; + typedef typename ProductType::Scalar ResScalar; + typedef typename ProductType::RealScalar RealScalar; + typedef typename ProductType::ActualLhsType ActualLhsType; + typedef typename ProductType::ActualRhsType ActualRhsType; + typedef typename ProductType::LhsBlasTraits LhsBlasTraits; + typedef typename ProductType::RhsBlasTraits RhsBlasTraits; + typedef Map, Aligned> MappedDest; + + const ActualLhsType actualLhs = LhsBlasTraits::extract(prod.lhs()); + const ActualRhsType actualRhs = RhsBlasTraits::extract(prod.rhs()); + + ResScalar actualAlpha = alpha * LhsBlasTraits::extractScalarFactor(prod.lhs()) + * RhsBlasTraits::extractScalarFactor(prod.rhs()); + + enum { + // FIXME find a way to allow an inner stride on the result if packet_traits::size==1 + // on, the other hand it is good for the cache to pack the vector anyways... + EvalToDestAtCompileTime = Dest::InnerStrideAtCompileTime==1, + ComplexByReal = (NumTraits::IsComplex) && (!NumTraits::IsComplex), + MightCannotUseDest = (Dest::InnerStrideAtCompileTime!=1) || ComplexByReal + }; + + gemv_static_vector_if static_dest; + + bool alphaIsCompatible = (!ComplexByReal) || (imag(actualAlpha)==RealScalar(0)); + bool evalToDest = EvalToDestAtCompileTime && alphaIsCompatible; + + RhsScalar compatibleAlpha = get_factor::run(actualAlpha); + + ResScalar* actualDestPtr; + bool freeDestPtr = false; + if (evalToDest) + { + actualDestPtr = &dest.coeffRef(0); + } + else + { + #ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN + int size = dest.size(); + EIGEN_DENSE_STORAGE_CTOR_PLUGIN + #endif + if((actualDestPtr = static_dest.data())==0) + { + freeDestPtr = true; + actualDestPtr = ei_aligned_stack_new(ResScalar,dest.size()); + } + if(!alphaIsCompatible) + { + MappedDest(actualDestPtr, dest.size()).setZero(); + compatibleAlpha = RhsScalar(1); + } + else + MappedDest(actualDestPtr, dest.size()) = dest; + } + + general_matrix_vector_product + ::run( + actualLhs.rows(), actualLhs.cols(), + &actualLhs.coeffRef(0,0), actualLhs.outerStride(), + actualRhs.data(), actualRhs.innerStride(), + actualDestPtr, 1, + compatibleAlpha); + + if (!evalToDest) + { + if(!alphaIsCompatible) + dest += actualAlpha * MappedDest(actualDestPtr, dest.size()); + else + dest = MappedDest(actualDestPtr, dest.size()); + if(freeDestPtr) ei_aligned_stack_delete(ResScalar, actualDestPtr, dest.size()); + } + } +}; + +template<> struct gemv_selector +{ + template + static void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) + { + typedef typename ProductType::LhsScalar LhsScalar; + typedef typename ProductType::RhsScalar RhsScalar; + typedef typename ProductType::Scalar ResScalar; + typedef typename ProductType::Index Index; + typedef typename ProductType::ActualLhsType ActualLhsType; + typedef typename ProductType::ActualRhsType ActualRhsType; + typedef typename ProductType::_ActualRhsType _ActualRhsType; + typedef typename ProductType::LhsBlasTraits LhsBlasTraits; + typedef typename ProductType::RhsBlasTraits RhsBlasTraits; + + typename add_const::type actualLhs = LhsBlasTraits::extract(prod.lhs()); + typename add_const::type actualRhs = RhsBlasTraits::extract(prod.rhs()); + + ResScalar actualAlpha = alpha * LhsBlasTraits::extractScalarFactor(prod.lhs()) + * RhsBlasTraits::extractScalarFactor(prod.rhs()); + + enum { + // FIXME find a way to allow an inner stride on the result if packet_traits::size==1 + // on, the other hand it is good for the cache to pack the vector anyways... + DirectlyUseRhs = _ActualRhsType::InnerStrideAtCompileTime==1 + }; + + gemv_static_vector_if static_rhs; + + RhsScalar* actualRhsPtr; + bool freeRhsPtr = false; + if (DirectlyUseRhs) + { + actualRhsPtr = const_cast(&actualRhs.coeffRef(0)); + } + else + { + #ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN + int size = actualRhs.size(); + EIGEN_DENSE_STORAGE_CTOR_PLUGIN + #endif + if((actualRhsPtr = static_rhs.data())==0) + { + freeRhsPtr = true; + actualRhsPtr = ei_aligned_stack_new(RhsScalar, actualRhs.size()); + } + Map(actualRhsPtr, actualRhs.size()) = actualRhs; + } + + general_matrix_vector_product + ::run( + actualLhs.rows(), actualLhs.cols(), + &actualLhs.coeffRef(0,0), actualLhs.outerStride(), + actualRhsPtr, 1, + &dest.coeffRef(0,0), dest.innerStride(), + actualAlpha); + + if((!DirectlyUseRhs) && freeRhsPtr) ei_aligned_stack_delete(RhsScalar, actualRhsPtr, prod.rhs().size()); + } +}; + +template<> struct gemv_selector +{ + template + static void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) + { + typedef typename Dest::Index Index; + // TODO makes sure dest is sequentially stored in memory, otherwise use a temp + const Index size = prod.rhs().rows(); + for(Index k=0; k struct gemv_selector +{ + template + static void run(const ProductType& prod, Dest& dest, typename ProductType::Scalar alpha) + { + typedef typename Dest::Index Index; + // TODO makes sure rhs is sequentially stored in memory, otherwise use a temp + const Index rows = prod.rows(); + for(Index i=0; i +template +inline const typename ProductReturnType::Type +MatrixBase::operator*(const MatrixBase &other) const +{ + // A note regarding the function declaration: In MSVC, this function will sometimes + // not be inlined since DenseStorage is an unwindable object for dynamic + // matrices and product types are holding a member to store the result. + // Thus it does not help tagging this function with EIGEN_STRONG_INLINE. + enum { + ProductIsValid = Derived::ColsAtCompileTime==Dynamic + || OtherDerived::RowsAtCompileTime==Dynamic + || int(Derived::ColsAtCompileTime)==int(OtherDerived::RowsAtCompileTime), + AreVectors = Derived::IsVectorAtCompileTime && OtherDerived::IsVectorAtCompileTime, + SameSizes = EIGEN_PREDICATE_SAME_MATRIX_SIZE(Derived,OtherDerived) + }; + // note to the lost user: + // * for a dot product use: v1.dot(v2) + // * for a coeff-wise product use: v1.cwiseProduct(v2) + EIGEN_STATIC_ASSERT(ProductIsValid || !(AreVectors && SameSizes), + INVALID_VECTOR_VECTOR_PRODUCT__IF_YOU_WANTED_A_DOT_OR_COEFF_WISE_PRODUCT_YOU_MUST_USE_THE_EXPLICIT_FUNCTIONS) + EIGEN_STATIC_ASSERT(ProductIsValid || !(SameSizes && !AreVectors), + INVALID_MATRIX_PRODUCT__IF_YOU_WANTED_A_COEFF_WISE_PRODUCT_YOU_MUST_USE_THE_EXPLICIT_FUNCTION) + EIGEN_STATIC_ASSERT(ProductIsValid || SameSizes, INVALID_MATRIX_PRODUCT) +#ifdef EIGEN_DEBUG_PRODUCT + internal::product_type::debug(); +#endif + return typename ProductReturnType::Type(derived(), other.derived()); +} + +/** \returns an expression of the matrix product of \c *this and \a other without implicit evaluation. + * + * The returned product will behave like any other expressions: the coefficients of the product will be + * computed once at a time as requested. This might be useful in some extremely rare cases when only + * a small and no coherent fraction of the result's coefficients have to be computed. + * + * \warning This version of the matrix product can be much much slower. So use it only if you know + * what you are doing and that you measured a true speed improvement. + * + * \sa operator*(const MatrixBase&) + */ +template +template +const typename LazyProductReturnType::Type +MatrixBase::lazyProduct(const MatrixBase &other) const +{ + enum { + ProductIsValid = Derived::ColsAtCompileTime==Dynamic + || OtherDerived::RowsAtCompileTime==Dynamic + || int(Derived::ColsAtCompileTime)==int(OtherDerived::RowsAtCompileTime), + AreVectors = Derived::IsVectorAtCompileTime && OtherDerived::IsVectorAtCompileTime, + SameSizes = EIGEN_PREDICATE_SAME_MATRIX_SIZE(Derived,OtherDerived) + }; + // note to the lost user: + // * for a dot product use: v1.dot(v2) + // * for a coeff-wise product use: v1.cwiseProduct(v2) + EIGEN_STATIC_ASSERT(ProductIsValid || !(AreVectors && SameSizes), + INVALID_VECTOR_VECTOR_PRODUCT__IF_YOU_WANTED_A_DOT_OR_COEFF_WISE_PRODUCT_YOU_MUST_USE_THE_EXPLICIT_FUNCTIONS) + EIGEN_STATIC_ASSERT(ProductIsValid || !(SameSizes && !AreVectors), + INVALID_MATRIX_PRODUCT__IF_YOU_WANTED_A_COEFF_WISE_PRODUCT_YOU_MUST_USE_THE_EXPLICIT_FUNCTION) + EIGEN_STATIC_ASSERT(ProductIsValid || SameSizes, INVALID_MATRIX_PRODUCT) + + return typename LazyProductReturnType::Type(derived(), other.derived()); +} + +#endif // EIGEN_PRODUCT_H diff --git a/asift_match/src/third_party/Eigen/src/Core/ProductBase.h b/asift_match/src/third_party/Eigen/src/Core/ProductBase.h new file mode 100755 index 0000000..3bd3487 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/ProductBase.h @@ -0,0 +1,288 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_PRODUCTBASE_H +#define EIGEN_PRODUCTBASE_H + +/** \class ProductBase + * \ingroup Core_Module + * + */ + +namespace internal { +template +struct traits > +{ + typedef MatrixXpr XprKind; + typedef typename remove_all<_Lhs>::type Lhs; + typedef typename remove_all<_Rhs>::type Rhs; + typedef typename scalar_product_traits::ReturnType Scalar; + typedef typename promote_storage_type::StorageKind, + typename traits::StorageKind>::ret StorageKind; + typedef typename promote_index_type::Index, + typename traits::Index>::type Index; + enum { + RowsAtCompileTime = traits::RowsAtCompileTime, + ColsAtCompileTime = traits::ColsAtCompileTime, + MaxRowsAtCompileTime = traits::MaxRowsAtCompileTime, + MaxColsAtCompileTime = traits::MaxColsAtCompileTime, + Flags = (MaxRowsAtCompileTime==1 ? RowMajorBit : 0) + | EvalBeforeNestingBit | EvalBeforeAssigningBit | NestByRefBit, + // Note that EvalBeforeNestingBit and NestByRefBit + // are not used in practice because nested is overloaded for products + CoeffReadCost = 0 // FIXME why is it needed ? + }; +}; +} + +#define EIGEN_PRODUCT_PUBLIC_INTERFACE(Derived) \ + typedef ProductBase Base; \ + EIGEN_DENSE_PUBLIC_INTERFACE(Derived) \ + typedef typename Base::LhsNested LhsNested; \ + typedef typename Base::_LhsNested _LhsNested; \ + typedef typename Base::LhsBlasTraits LhsBlasTraits; \ + typedef typename Base::ActualLhsType ActualLhsType; \ + typedef typename Base::_ActualLhsType _ActualLhsType; \ + typedef typename Base::RhsNested RhsNested; \ + typedef typename Base::_RhsNested _RhsNested; \ + typedef typename Base::RhsBlasTraits RhsBlasTraits; \ + typedef typename Base::ActualRhsType ActualRhsType; \ + typedef typename Base::_ActualRhsType _ActualRhsType; \ + using Base::m_lhs; \ + using Base::m_rhs; + +template +class ProductBase : public MatrixBase +{ + public: + typedef MatrixBase Base; + EIGEN_DENSE_PUBLIC_INTERFACE(ProductBase) + + typedef typename Lhs::Nested LhsNested; + typedef typename internal::remove_all::type _LhsNested; + typedef internal::blas_traits<_LhsNested> LhsBlasTraits; + typedef typename LhsBlasTraits::DirectLinearAccessType ActualLhsType; + typedef typename internal::remove_all::type _ActualLhsType; + typedef typename internal::traits::Scalar LhsScalar; + + typedef typename Rhs::Nested RhsNested; + typedef typename internal::remove_all::type _RhsNested; + typedef internal::blas_traits<_RhsNested> RhsBlasTraits; + typedef typename RhsBlasTraits::DirectLinearAccessType ActualRhsType; + typedef typename internal::remove_all::type _ActualRhsType; + typedef typename internal::traits::Scalar RhsScalar; + + // Diagonal of a product: no need to evaluate the arguments because they are going to be evaluated only once + typedef CoeffBasedProduct FullyLazyCoeffBaseProductType; + + public: + + typedef typename Base::PlainObject PlainObject; + + ProductBase(const Lhs& lhs, const Rhs& rhs) + : m_lhs(lhs), m_rhs(rhs) + { + eigen_assert(lhs.cols() == rhs.rows() + && "invalid matrix product" + && "if you wanted a coeff-wise or a dot product use the respective explicit functions"); + } + + inline Index rows() const { return m_lhs.rows(); } + inline Index cols() const { return m_rhs.cols(); } + + template + inline void evalTo(Dest& dst) const { dst.setZero(); scaleAndAddTo(dst,Scalar(1)); } + + template + inline void addTo(Dest& dst) const { scaleAndAddTo(dst,1); } + + template + inline void subTo(Dest& dst) const { scaleAndAddTo(dst,-1); } + + template + inline void scaleAndAddTo(Dest& dst,Scalar alpha) const { derived().scaleAndAddTo(dst,alpha); } + + const _LhsNested& lhs() const { return m_lhs; } + const _RhsNested& rhs() const { return m_rhs; } + + // Implicit conversion to the nested type (trigger the evaluation of the product) + operator const PlainObject& () const + { + m_result.resize(m_lhs.rows(), m_rhs.cols()); + derived().evalTo(m_result); + return m_result; + } + + const Diagonal diagonal() const + { return FullyLazyCoeffBaseProductType(m_lhs, m_rhs); } + + template + const Diagonal diagonal() const + { return FullyLazyCoeffBaseProductType(m_lhs, m_rhs); } + + const Diagonal diagonal(Index index) const + { return FullyLazyCoeffBaseProductType(m_lhs, m_rhs).diagonal(index); } + + // restrict coeff accessors to 1x1 expressions. No need to care about mutators here since this isnt a Lvalue expression + typename Base::CoeffReturnType coeff(Index row, Index col) const + { +#ifdef EIGEN2_SUPPORT + return lhs().row(row).cwiseProduct(rhs().col(col).transpose()).sum(); +#else + EIGEN_STATIC_ASSERT_SIZE_1x1(Derived) + eigen_assert(this->rows() == 1 && this->cols() == 1); + return derived().coeff(row,col); +#endif + } + + typename Base::CoeffReturnType coeff(Index i) const + { + EIGEN_STATIC_ASSERT_SIZE_1x1(Derived) + eigen_assert(this->rows() == 1 && this->cols() == 1); + return derived().coeff(i); + } + + const Scalar& coeffRef(Index row, Index col) const + { + EIGEN_STATIC_ASSERT_SIZE_1x1(Derived) + eigen_assert(this->rows() == 1 && this->cols() == 1); + return derived().coeffRef(row,col); + } + + const Scalar& coeffRef(Index i) const + { + EIGEN_STATIC_ASSERT_SIZE_1x1(Derived) + eigen_assert(this->rows() == 1 && this->cols() == 1); + return derived().coeffRef(i); + } + + protected: + + const LhsNested m_lhs; + const RhsNested m_rhs; + + mutable PlainObject m_result; +}; + +// here we need to overload the nested rule for products +// such that the nested type is a const reference to a plain matrix +namespace internal { +template +struct nested, N, PlainObject> +{ + typedef PlainObject const& type; +}; +} + +template +class ScaledProduct; + +// Note that these two operator* functions are not defined as member +// functions of ProductBase, because, otherwise we would have to +// define all overloads defined in MatrixBase. Furthermore, Using +// "using Base::operator*" would not work with MSVC. +// +// Also note that here we accept any compatible scalar types +template +const ScaledProduct +operator*(const ProductBase& prod, typename Derived::Scalar x) +{ return ScaledProduct(prod.derived(), x); } + +template +typename internal::enable_if::value, + const ScaledProduct >::type +operator*(const ProductBase& prod, typename Derived::RealScalar x) +{ return ScaledProduct(prod.derived(), x); } + + +template +const ScaledProduct +operator*(typename Derived::Scalar x,const ProductBase& prod) +{ return ScaledProduct(prod.derived(), x); } + +template +typename internal::enable_if::value, + const ScaledProduct >::type +operator*(typename Derived::RealScalar x,const ProductBase& prod) +{ return ScaledProduct(prod.derived(), x); } + +namespace internal { +template +struct traits > + : traits, + typename NestedProduct::_LhsNested, + typename NestedProduct::_RhsNested> > +{ + typedef typename traits::StorageKind StorageKind; +}; +} + +template +class ScaledProduct + : public ProductBase, + typename NestedProduct::_LhsNested, + typename NestedProduct::_RhsNested> +{ + public: + typedef ProductBase, + typename NestedProduct::_LhsNested, + typename NestedProduct::_RhsNested> Base; + typedef typename Base::Scalar Scalar; + typedef typename Base::PlainObject PlainObject; +// EIGEN_PRODUCT_PUBLIC_INTERFACE(ScaledProduct) + + ScaledProduct(const NestedProduct& prod, Scalar x) + : Base(prod.lhs(),prod.rhs()), m_prod(prod), m_alpha(x) {} + + template + inline void evalTo(Dest& dst) const { dst.setZero(); scaleAndAddTo(dst,m_alpha); } + + template + inline void addTo(Dest& dst) const { scaleAndAddTo(dst,m_alpha); } + + template + inline void subTo(Dest& dst) const { scaleAndAddTo(dst,-m_alpha); } + + template + inline void scaleAndAddTo(Dest& dst,Scalar alpha) const { m_prod.derived().scaleAndAddTo(dst,alpha); } + + const Scalar& alpha() const { return m_alpha; } + + protected: + const NestedProduct& m_prod; + Scalar m_alpha; +}; + +/** \internal + * Overloaded to perform an efficient C = (A*B).lazy() */ +template +template +Derived& MatrixBase::lazyAssign(const ProductBase& other) +{ + other.derived().evalTo(derived()); + return derived(); +} + + +#endif // EIGEN_PRODUCTBASE_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Random.h b/asift_match/src/third_party/Eigen/src/Core/Random.h new file mode 100755 index 0000000..b7d9010 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Random.h @@ -0,0 +1,163 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_RANDOM_H +#define EIGEN_RANDOM_H + +namespace internal { + +template struct scalar_random_op { + EIGEN_EMPTY_STRUCT_CTOR(scalar_random_op) + template + inline const Scalar operator() (Index, Index = 0) const { return random(); } +}; + +template +struct functor_traits > +{ enum { Cost = 5 * NumTraits::MulCost, PacketAccess = false, IsRepeatable = false }; }; + +} // end namespace internal + +/** \returns a random matrix expression + * + * The parameters \a rows and \a cols are the number of rows and of columns of + * the returned matrix. Must be compatible with this MatrixBase type. + * + * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, + * it is redundant to pass \a rows and \a cols as arguments, so Random() should be used + * instead. + * + * Example: \include MatrixBase_random_int_int.cpp + * Output: \verbinclude MatrixBase_random_int_int.out + * + * This expression has the "evaluate before nesting" flag so that it will be evaluated into + * a temporary matrix whenever it is nested in a larger expression. This prevents unexpected + * behavior with expressions involving random matrices. + * + * \sa MatrixBase::setRandom(), MatrixBase::Random(Index), MatrixBase::Random() + */ +template +inline const CwiseNullaryOp::Scalar>, Derived> +DenseBase::Random(Index rows, Index cols) +{ + return NullaryExpr(rows, cols, internal::scalar_random_op()); +} + +/** \returns a random vector expression + * + * The parameter \a size is the size of the returned vector. + * Must be compatible with this MatrixBase type. + * + * \only_for_vectors + * + * This variant is meant to be used for dynamic-size vector types. For fixed-size types, + * it is redundant to pass \a size as argument, so Random() should be used + * instead. + * + * Example: \include MatrixBase_random_int.cpp + * Output: \verbinclude MatrixBase_random_int.out + * + * This expression has the "evaluate before nesting" flag so that it will be evaluated into + * a temporary vector whenever it is nested in a larger expression. This prevents unexpected + * behavior with expressions involving random matrices. + * + * \sa MatrixBase::setRandom(), MatrixBase::Random(Index,Index), MatrixBase::Random() + */ +template +inline const CwiseNullaryOp::Scalar>, Derived> +DenseBase::Random(Index size) +{ + return NullaryExpr(size, internal::scalar_random_op()); +} + +/** \returns a fixed-size random matrix or vector expression + * + * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you + * need to use the variants taking size arguments. + * + * Example: \include MatrixBase_random.cpp + * Output: \verbinclude MatrixBase_random.out + * + * This expression has the "evaluate before nesting" flag so that it will be evaluated into + * a temporary matrix whenever it is nested in a larger expression. This prevents unexpected + * behavior with expressions involving random matrices. + * + * \sa MatrixBase::setRandom(), MatrixBase::Random(Index,Index), MatrixBase::Random(Index) + */ +template +inline const CwiseNullaryOp::Scalar>, Derived> +DenseBase::Random() +{ + return NullaryExpr(RowsAtCompileTime, ColsAtCompileTime, internal::scalar_random_op()); +} + +/** Sets all coefficients in this expression to random values. + * + * Example: \include MatrixBase_setRandom.cpp + * Output: \verbinclude MatrixBase_setRandom.out + * + * \sa class CwiseNullaryOp, setRandom(Index), setRandom(Index,Index) + */ +template +inline Derived& DenseBase::setRandom() +{ + return *this = Random(rows(), cols()); +} + +/** Resizes to the given \a size, and sets all coefficients in this expression to random values. + * + * \only_for_vectors + * + * Example: \include Matrix_setRandom_int.cpp + * Output: \verbinclude Matrix_setRandom_int.out + * + * \sa MatrixBase::setRandom(), setRandom(Index,Index), class CwiseNullaryOp, MatrixBase::Random() + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setRandom(Index size) +{ + resize(size); + return setRandom(); +} + +/** Resizes to the given size, and sets all coefficients in this expression to random values. + * + * \param rows the new number of rows + * \param cols the new number of columns + * + * Example: \include Matrix_setRandom_int_int.cpp + * Output: \verbinclude Matrix_setRandom_int_int.out + * + * \sa MatrixBase::setRandom(), setRandom(Index), class CwiseNullaryOp, MatrixBase::Random() + */ +template +EIGEN_STRONG_INLINE Derived& +PlainObjectBase::setRandom(Index rows, Index cols) +{ + resize(rows, cols); + return setRandom(); +} + +#endif // EIGEN_RANDOM_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Redux.h b/asift_match/src/third_party/Eigen/src/Core/Redux.h new file mode 100755 index 0000000..f9f5a95 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Redux.h @@ -0,0 +1,404 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008 Gael Guennebaud +// Copyright (C) 2006-2008 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_REDUX_H +#define EIGEN_REDUX_H + +namespace internal { + +// TODO +// * implement other kind of vectorization +// * factorize code + +/*************************************************************************** +* Part 1 : the logic deciding a strategy for vectorization and unrolling +***************************************************************************/ + +template +struct redux_traits +{ +public: + enum { + PacketSize = packet_traits::size, + InnerMaxSize = int(Derived::IsRowMajor) + ? Derived::MaxColsAtCompileTime + : Derived::MaxRowsAtCompileTime + }; + + enum { + MightVectorize = (int(Derived::Flags)&ActualPacketAccessBit) + && (functor_traits::PacketAccess), + MayLinearVectorize = MightVectorize && (int(Derived::Flags)&LinearAccessBit), + MaySliceVectorize = MightVectorize && int(InnerMaxSize)>=3*PacketSize + }; + +public: + enum { + Traversal = int(MayLinearVectorize) ? int(LinearVectorizedTraversal) + : int(MaySliceVectorize) ? int(SliceVectorizedTraversal) + : int(DefaultTraversal) + }; + +public: + enum { + Cost = ( Derived::SizeAtCompileTime == Dynamic + || Derived::CoeffReadCost == Dynamic + || (Derived::SizeAtCompileTime!=1 && functor_traits::Cost == Dynamic) + ) ? Dynamic + : Derived::SizeAtCompileTime * Derived::CoeffReadCost + + (Derived::SizeAtCompileTime-1) * functor_traits::Cost, + UnrollingLimit = EIGEN_UNROLLING_LIMIT * (int(Traversal) == int(DefaultTraversal) ? 1 : int(PacketSize)) + }; + +public: + enum { + Unrolling = Cost != Dynamic && Cost <= UnrollingLimit + ? CompleteUnrolling + : NoUnrolling + }; +}; + +/*************************************************************************** +* Part 2 : unrollers +***************************************************************************/ + +/*** no vectorization ***/ + +template +struct redux_novec_unroller +{ + enum { + HalfLength = Length/2 + }; + + typedef typename Derived::Scalar Scalar; + + EIGEN_STRONG_INLINE static Scalar run(const Derived &mat, const Func& func) + { + return func(redux_novec_unroller::run(mat,func), + redux_novec_unroller::run(mat,func)); + } +}; + +template +struct redux_novec_unroller +{ + enum { + outer = Start / Derived::InnerSizeAtCompileTime, + inner = Start % Derived::InnerSizeAtCompileTime + }; + + typedef typename Derived::Scalar Scalar; + + EIGEN_STRONG_INLINE static Scalar run(const Derived &mat, const Func&) + { + return mat.coeffByOuterInner(outer, inner); + } +}; + +// This is actually dead code and will never be called. It is required +// to prevent false warnings regarding failed inlining though +// for 0 length run() will never be called at all. +template +struct redux_novec_unroller +{ + typedef typename Derived::Scalar Scalar; + EIGEN_STRONG_INLINE static Scalar run(const Derived&, const Func&) { return Scalar(); } +}; + +/*** vectorization ***/ + +template +struct redux_vec_unroller +{ + enum { + PacketSize = packet_traits::size, + HalfLength = Length/2 + }; + + typedef typename Derived::Scalar Scalar; + typedef typename packet_traits::type PacketScalar; + + EIGEN_STRONG_INLINE static PacketScalar run(const Derived &mat, const Func& func) + { + return func.packetOp( + redux_vec_unroller::run(mat,func), + redux_vec_unroller::run(mat,func) ); + } +}; + +template +struct redux_vec_unroller +{ + enum { + index = Start * packet_traits::size, + outer = index / int(Derived::InnerSizeAtCompileTime), + inner = index % int(Derived::InnerSizeAtCompileTime), + alignment = (Derived::Flags & AlignedBit) ? Aligned : Unaligned + }; + + typedef typename Derived::Scalar Scalar; + typedef typename packet_traits::type PacketScalar; + + EIGEN_STRONG_INLINE static PacketScalar run(const Derived &mat, const Func&) + { + return mat.template packetByOuterInner(outer, inner); + } +}; + +/*************************************************************************** +* Part 3 : implementation of all cases +***************************************************************************/ + +template::Traversal, + int Unrolling = redux_traits::Unrolling +> +struct redux_impl; + +template +struct redux_impl +{ + typedef typename Derived::Scalar Scalar; + typedef typename Derived::Index Index; + static EIGEN_STRONG_INLINE Scalar run(const Derived& mat, const Func& func) + { + eigen_assert(mat.rows()>0 && mat.cols()>0 && "you are using an empty matrix"); + Scalar res; + res = mat.coeffByOuterInner(0, 0); + for(Index i = 1; i < mat.innerSize(); ++i) + res = func(res, mat.coeffByOuterInner(0, i)); + for(Index i = 1; i < mat.outerSize(); ++i) + for(Index j = 0; j < mat.innerSize(); ++j) + res = func(res, mat.coeffByOuterInner(i, j)); + return res; + } +}; + +template +struct redux_impl + : public redux_novec_unroller +{}; + +template +struct redux_impl +{ + typedef typename Derived::Scalar Scalar; + typedef typename packet_traits::type PacketScalar; + typedef typename Derived::Index Index; + + static Scalar run(const Derived& mat, const Func& func) + { + const Index size = mat.size(); + eigen_assert(size && "you are using an empty matrix"); + const Index packetSize = packet_traits::size; + const Index alignedStart = first_aligned(mat); + enum { + alignment = bool(Derived::Flags & DirectAccessBit) || bool(Derived::Flags & AlignedBit) + ? Aligned : Unaligned + }; + const Index alignedSize = ((size-alignedStart)/packetSize)*packetSize; + const Index alignedEnd = alignedStart + alignedSize; + Scalar res; + if(alignedSize) + { + PacketScalar packet_res = mat.template packet(alignedStart); + for(Index index = alignedStart + packetSize; index < alignedEnd; index += packetSize) + packet_res = func.packetOp(packet_res, mat.template packet(index)); + res = func.predux(packet_res); + + for(Index index = 0; index < alignedStart; ++index) + res = func(res,mat.coeff(index)); + + for(Index index = alignedEnd; index < size; ++index) + res = func(res,mat.coeff(index)); + } + else // too small to vectorize anything. + // since this is dynamic-size hence inefficient anyway for such small sizes, don't try to optimize. + { + res = mat.coeff(0); + for(Index index = 1; index < size; ++index) + res = func(res,mat.coeff(index)); + } + + return res; + } +}; + +template +struct redux_impl +{ + typedef typename Derived::Scalar Scalar; + typedef typename packet_traits::type PacketScalar; + typedef typename Derived::Index Index; + + static Scalar run(const Derived& mat, const Func& func) + { + eigen_assert(mat.rows()>0 && mat.cols()>0 && "you are using an empty matrix"); + const Index innerSize = mat.innerSize(); + const Index outerSize = mat.outerSize(); + enum { + packetSize = packet_traits::size + }; + const Index packetedInnerSize = ((innerSize)/packetSize)*packetSize; + Scalar res; + if(packetedInnerSize) + { + PacketScalar packet_res = mat.template packet(0,0); + for(Index j=0; j(j,i)); + + res = func.predux(packet_res); + for(Index j=0; j::run(mat, func); + } + + return res; + } +}; + +template +struct redux_impl +{ + typedef typename Derived::Scalar Scalar; + typedef typename packet_traits::type PacketScalar; + enum { + PacketSize = packet_traits::size, + Size = Derived::SizeAtCompileTime, + VectorizedSize = (Size / PacketSize) * PacketSize + }; + EIGEN_STRONG_INLINE static Scalar run(const Derived& mat, const Func& func) + { + eigen_assert(mat.rows()>0 && mat.cols()>0 && "you are using an empty matrix"); + Scalar res = func.predux(redux_vec_unroller::run(mat,func)); + if (VectorizedSize != Size) + res = func(res,redux_novec_unroller::run(mat,func)); + return res; + } +}; + +} // end namespace internal + +/*************************************************************************** +* Part 4 : public API +***************************************************************************/ + + +/** \returns the result of a full redux operation on the whole matrix or vector using \a func + * + * The template parameter \a BinaryOp is the type of the functor \a func which must be + * an associative operator. Both current STL and TR1 functor styles are handled. + * + * \sa DenseBase::sum(), DenseBase::minCoeff(), DenseBase::maxCoeff(), MatrixBase::colwise(), MatrixBase::rowwise() + */ +template +template +EIGEN_STRONG_INLINE typename internal::result_of::Scalar)>::type +DenseBase::redux(const Func& func) const +{ + typedef typename internal::remove_all::type ThisNested; + return internal::redux_impl + ::run(derived(), func); +} + +/** \returns the minimum of all coefficients of *this + */ +template +EIGEN_STRONG_INLINE typename internal::traits::Scalar +DenseBase::minCoeff() const +{ + return this->redux(Eigen::internal::scalar_min_op()); +} + +/** \returns the maximum of all coefficients of *this + */ +template +EIGEN_STRONG_INLINE typename internal::traits::Scalar +DenseBase::maxCoeff() const +{ + return this->redux(Eigen::internal::scalar_max_op()); +} + +/** \returns the sum of all coefficients of *this + * + * \sa trace(), prod(), mean() + */ +template +EIGEN_STRONG_INLINE typename internal::traits::Scalar +DenseBase::sum() const +{ + if(SizeAtCompileTime==0 || (SizeAtCompileTime==Dynamic && size()==0)) + return Scalar(0); + return this->redux(Eigen::internal::scalar_sum_op()); +} + +/** \returns the mean of all coefficients of *this +* +* \sa trace(), prod(), sum() +*/ +template +EIGEN_STRONG_INLINE typename internal::traits::Scalar +DenseBase::mean() const +{ + return Scalar(this->redux(Eigen::internal::scalar_sum_op())) / Scalar(this->size()); +} + +/** \returns the product of all coefficients of *this + * + * Example: \include MatrixBase_prod.cpp + * Output: \verbinclude MatrixBase_prod.out + * + * \sa sum(), mean(), trace() + */ +template +EIGEN_STRONG_INLINE typename internal::traits::Scalar +DenseBase::prod() const +{ + if(SizeAtCompileTime==0 || (SizeAtCompileTime==Dynamic && size()==0)) + return Scalar(1); + return this->redux(Eigen::internal::scalar_product_op()); +} + +/** \returns the trace of \c *this, i.e. the sum of the coefficients on the main diagonal. + * + * \c *this can be any matrix, not necessarily square. + * + * \sa diagonal(), sum() + */ +template +EIGEN_STRONG_INLINE typename internal::traits::Scalar +MatrixBase::trace() const +{ + return derived().diagonal().sum(); +} + +#endif // EIGEN_REDUX_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Replicate.h b/asift_match/src/third_party/Eigen/src/Core/Replicate.h new file mode 100755 index 0000000..d2f9712 --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Replicate.h @@ -0,0 +1,179 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_REPLICATE_H +#define EIGEN_REPLICATE_H + +/** + * \class Replicate + * \ingroup Core_Module + * + * \brief Expression of the multiple replication of a matrix or vector + * + * \param MatrixType the type of the object we are replicating + * + * This class represents an expression of the multiple replication of a matrix or vector. + * It is the return type of DenseBase::replicate() and most of the time + * this is the only way it is used. + * + * \sa DenseBase::replicate() + */ + +namespace internal { +template +struct traits > + : traits +{ + typedef typename MatrixType::Scalar Scalar; + typedef typename traits::StorageKind StorageKind; + typedef typename traits::XprKind XprKind; + typedef typename nested::type MatrixTypeNested; + typedef typename remove_reference::type _MatrixTypeNested; + enum { + RowsAtCompileTime = RowFactor==Dynamic || int(MatrixType::RowsAtCompileTime)==Dynamic + ? Dynamic + : RowFactor * MatrixType::RowsAtCompileTime, + ColsAtCompileTime = ColFactor==Dynamic || int(MatrixType::ColsAtCompileTime)==Dynamic + ? Dynamic + : ColFactor * MatrixType::ColsAtCompileTime, + //FIXME we don't propagate the max sizes !!! + MaxRowsAtCompileTime = RowsAtCompileTime, + MaxColsAtCompileTime = ColsAtCompileTime, + IsRowMajor = MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1 ? 1 + : MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1 ? 0 + : (MatrixType::Flags & RowMajorBit) ? 1 : 0, + Flags = (_MatrixTypeNested::Flags & HereditaryBits & ~RowMajorBit) | (IsRowMajor ? RowMajorBit : 0), + CoeffReadCost = _MatrixTypeNested::CoeffReadCost + }; +}; +} + +template class Replicate + : public internal::dense_xpr_base< Replicate >::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Replicate) + + template + inline explicit Replicate(const OriginalMatrixType& matrix) + : m_matrix(matrix), m_rowFactor(RowFactor), m_colFactor(ColFactor) + { + EIGEN_STATIC_ASSERT((internal::is_same::type,OriginalMatrixType>::value), + THE_MATRIX_OR_EXPRESSION_THAT_YOU_PASSED_DOES_NOT_HAVE_THE_EXPECTED_TYPE) + eigen_assert(RowFactor!=Dynamic && ColFactor!=Dynamic); + } + + template + inline Replicate(const OriginalMatrixType& matrix, int rowFactor, int colFactor) + : m_matrix(matrix), m_rowFactor(rowFactor), m_colFactor(colFactor) + { + EIGEN_STATIC_ASSERT((internal::is_same::type,OriginalMatrixType>::value), + THE_MATRIX_OR_EXPRESSION_THAT_YOU_PASSED_DOES_NOT_HAVE_THE_EXPECTED_TYPE) + } + + inline Index rows() const { return m_matrix.rows() * m_rowFactor.value(); } + inline Index cols() const { return m_matrix.cols() * m_colFactor.value(); } + + inline Scalar coeff(Index row, Index col) const + { + // try to avoid using modulo; this is a pure optimization strategy + const Index actual_row = internal::traits::RowsAtCompileTime==1 ? 0 + : RowFactor==1 ? row + : row%m_matrix.rows(); + const Index actual_col = internal::traits::ColsAtCompileTime==1 ? 0 + : ColFactor==1 ? col + : col%m_matrix.cols(); + + return m_matrix.coeff(actual_row, actual_col); + } + template + inline PacketScalar packet(Index row, Index col) const + { + const Index actual_row = internal::traits::RowsAtCompileTime==1 ? 0 + : RowFactor==1 ? row + : row%m_matrix.rows(); + const Index actual_col = internal::traits::ColsAtCompileTime==1 ? 0 + : ColFactor==1 ? col + : col%m_matrix.cols(); + + return m_matrix.template packet(actual_row, actual_col); + } + + + protected: + const typename MatrixType::Nested m_matrix; + const internal::variable_if_dynamic m_rowFactor; + const internal::variable_if_dynamic m_colFactor; +}; + +/** + * \return an expression of the replication of \c *this + * + * Example: \include MatrixBase_replicate.cpp + * Output: \verbinclude MatrixBase_replicate.out + * + * \sa VectorwiseOp::replicate(), DenseBase::replicate(Index,Index), class Replicate + */ +template +template +inline const Replicate +DenseBase::replicate() const +{ + return Replicate(derived()); +} + +/** + * \return an expression of the replication of \c *this + * + * Example: \include MatrixBase_replicate_int_int.cpp + * Output: \verbinclude MatrixBase_replicate_int_int.out + * + * \sa VectorwiseOp::replicate(), DenseBase::replicate(), class Replicate + */ +template +inline const Replicate +DenseBase::replicate(Index rowFactor,Index colFactor) const +{ + return Replicate(derived(),rowFactor,colFactor); +} + +/** + * \return an expression of the replication of each column (or row) of \c *this + * + * Example: \include DirectionWise_replicate_int.cpp + * Output: \verbinclude DirectionWise_replicate_int.out + * + * \sa VectorwiseOp::replicate(), DenseBase::replicate(), class Replicate + */ +template +const typename VectorwiseOp::ReplicateReturnType +VectorwiseOp::replicate(Index factor) const +{ + return typename VectorwiseOp::ReplicateReturnType + (_expression(),Direction==Vertical?factor:1,Direction==Horizontal?factor:1); +} + +#endif // EIGEN_REPLICATE_H diff --git a/asift_match/src/third_party/Eigen/src/Core/ReturnByValue.h b/asift_match/src/third_party/Eigen/src/Core/ReturnByValue.h new file mode 100755 index 0000000..24c5a4e --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/ReturnByValue.h @@ -0,0 +1,99 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2009-2010 Gael Guennebaud +// Copyright (C) 2009-2010 Benoit Jacob +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_RETURNBYVALUE_H +#define EIGEN_RETURNBYVALUE_H + +/** \class ReturnByValue + * \ingroup Core_Module + * + */ + +namespace internal { + +template +struct traits > + : public traits::ReturnType> +{ + enum { + // We're disabling the DirectAccess because e.g. the constructor of + // the Block-with-DirectAccess expression requires to have a coeffRef method. + // Also, we don't want to have to implement the stride stuff. + Flags = (traits::ReturnType>::Flags + | EvalBeforeNestingBit) & ~DirectAccessBit + }; +}; + +/* The ReturnByValue object doesn't even have a coeff() method. + * So the only way that nesting it in an expression can work, is by evaluating it into a plain matrix. + * So internal::nested always gives the plain return matrix type. + * + * FIXME: I don't understand why we need this specialization: isn't this taken care of by the EvalBeforeNestingBit ?? + */ +template +struct nested, n, PlainObject> +{ + typedef typename traits::ReturnType type; +}; + +} // end namespace internal + +template class ReturnByValue + : public internal::dense_xpr_base< ReturnByValue >::type +{ + public: + typedef typename internal::traits::ReturnType ReturnType; + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(ReturnByValue) + + template + inline void evalTo(Dest& dst) const + { static_cast(this)->evalTo(dst); } + inline Index rows() const { return static_cast(this)->rows(); } + inline Index cols() const { return static_cast(this)->cols(); } + +#ifndef EIGEN_PARSED_BY_DOXYGEN +#define Unusable YOU_ARE_TRYING_TO_ACCESS_A_SINGLE_COEFFICIENT_IN_A_SPECIAL_EXPRESSION_WHERE_THAT_IS_NOT_ALLOWED_BECAUSE_THAT_WOULD_BE_INEFFICIENT + class Unusable{ + Unusable(const Unusable&) {} + Unusable& operator=(const Unusable&) {return *this;} + }; + const Unusable& coeff(Index) const { return *reinterpret_cast(this); } + const Unusable& coeff(Index,Index) const { return *reinterpret_cast(this); } + Unusable& coeffRef(Index) { return *reinterpret_cast(this); } + Unusable& coeffRef(Index,Index) { return *reinterpret_cast(this); } +#endif +}; + +template +template +Derived& DenseBase::operator=(const ReturnByValue& other) +{ + other.evalTo(derived()); + return derived(); +} + +#endif // EIGEN_RETURNBYVALUE_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Reverse.h b/asift_match/src/third_party/Eigen/src/Core/Reverse.h new file mode 100755 index 0000000..600744a --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Reverse.h @@ -0,0 +1,230 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2006-2008 Benoit Jacob +// Copyright (C) 2009 Ricard Marxer +// Copyright (C) 2009-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_REVERSE_H +#define EIGEN_REVERSE_H + +/** \class Reverse + * \ingroup Core_Module + * + * \brief Expression of the reverse of a vector or matrix + * + * \param MatrixType the type of the object of which we are taking the reverse + * + * This class represents an expression of the reverse of a vector. + * It is the return type of MatrixBase::reverse() and VectorwiseOp::reverse() + * and most of the time this is the only way it is used. + * + * \sa MatrixBase::reverse(), VectorwiseOp::reverse() + */ + +namespace internal { + +template +struct traits > + : traits +{ + typedef typename MatrixType::Scalar Scalar; + typedef typename traits::StorageKind StorageKind; + typedef typename traits::XprKind XprKind; + typedef typename nested::type MatrixTypeNested; + typedef typename remove_reference::type _MatrixTypeNested; + enum { + RowsAtCompileTime = MatrixType::RowsAtCompileTime, + ColsAtCompileTime = MatrixType::ColsAtCompileTime, + MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime, + MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime, + + // let's enable LinearAccess only with vectorization because of the product overhead + LinearAccess = ( (Direction==BothDirections) && (int(_MatrixTypeNested::Flags)&PacketAccessBit) ) + ? LinearAccessBit : 0, + + Flags = int(_MatrixTypeNested::Flags) & (HereditaryBits | LvalueBit | PacketAccessBit | LinearAccess), + + CoeffReadCost = _MatrixTypeNested::CoeffReadCost + }; +}; + +template struct reverse_packet_cond +{ + static inline PacketScalar run(const PacketScalar& x) { return preverse(x); } +}; + +template struct reverse_packet_cond +{ + static inline PacketScalar run(const PacketScalar& x) { return x; } +}; + +} // end namespace internal + +template class Reverse + : public internal::dense_xpr_base< Reverse >::type +{ + public: + + typedef typename internal::dense_xpr_base::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(Reverse) + using Base::IsRowMajor; + + // next line is necessary because otherwise const version of operator() + // is hidden by non-const version defined in this file + using Base::operator(); + + protected: + enum { + PacketSize = internal::packet_traits::size, + IsColMajor = !IsRowMajor, + ReverseRow = (Direction == Vertical) || (Direction == BothDirections), + ReverseCol = (Direction == Horizontal) || (Direction == BothDirections), + OffsetRow = ReverseRow && IsColMajor ? PacketSize : 1, + OffsetCol = ReverseCol && IsRowMajor ? PacketSize : 1, + ReversePacket = (Direction == BothDirections) + || ((Direction == Vertical) && IsColMajor) + || ((Direction == Horizontal) && IsRowMajor) + }; + typedef internal::reverse_packet_cond reverse_packet; + public: + + inline Reverse(const MatrixType& matrix) : m_matrix(matrix) { } + + EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Reverse) + + inline Index rows() const { return m_matrix.rows(); } + inline Index cols() const { return m_matrix.cols(); } + + inline Index innerStride() const + { + return -m_matrix.innerStride(); + } + + inline Scalar& operator()(Index row, Index col) + { + eigen_assert(row >= 0 && row < rows() && col >= 0 && col < cols()); + return coeffRef(row, col); + } + + inline Scalar& coeffRef(Index row, Index col) + { + return m_matrix.const_cast_derived().coeffRef(ReverseRow ? m_matrix.rows() - row - 1 : row, + ReverseCol ? m_matrix.cols() - col - 1 : col); + } + + inline CoeffReturnType coeff(Index row, Index col) const + { + return m_matrix.coeff(ReverseRow ? m_matrix.rows() - row - 1 : row, + ReverseCol ? m_matrix.cols() - col - 1 : col); + } + + inline CoeffReturnType coeff(Index index) const + { + return m_matrix.coeff(m_matrix.size() - index - 1); + } + + inline Scalar& coeffRef(Index index) + { + return m_matrix.const_cast_derived().coeffRef(m_matrix.size() - index - 1); + } + + inline Scalar& operator()(Index index) + { + eigen_assert(index >= 0 && index < m_matrix.size()); + return coeffRef(index); + } + + template + inline const PacketScalar packet(Index row, Index col) const + { + return reverse_packet::run(m_matrix.template packet( + ReverseRow ? m_matrix.rows() - row - OffsetRow : row, + ReverseCol ? m_matrix.cols() - col - OffsetCol : col)); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_matrix.const_cast_derived().template writePacket( + ReverseRow ? m_matrix.rows() - row - OffsetRow : row, + ReverseCol ? m_matrix.cols() - col - OffsetCol : col, + reverse_packet::run(x)); + } + + template + inline const PacketScalar packet(Index index) const + { + return internal::preverse(m_matrix.template packet( m_matrix.size() - index - PacketSize )); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_matrix.const_cast_derived().template writePacket(m_matrix.size() - index - PacketSize, internal::preverse(x)); + } + + protected: + const typename MatrixType::Nested m_matrix; +}; + +/** \returns an expression of the reverse of *this. + * + * Example: \include MatrixBase_reverse.cpp + * Output: \verbinclude MatrixBase_reverse.out + * + */ +template +inline typename DenseBase::ReverseReturnType +DenseBase::reverse() +{ + return derived(); +} + +/** This is the const version of reverse(). */ +template +inline const typename DenseBase::ConstReverseReturnType +DenseBase::reverse() const +{ + return derived(); +} + +/** This is the "in place" version of reverse: it reverses \c *this. + * + * In most cases it is probably better to simply use the reversed expression + * of a matrix. However, when reversing the matrix data itself is really needed, + * then this "in-place" version is probably the right choice because it provides + * the following additional features: + * - less error prone: doing the same operation with .reverse() requires special care: + * \code m = m.reverse().eval(); \endcode + * - this API allows to avoid creating a temporary (the current implementation creates a temporary, but that could be avoided using swap) + * - it allows future optimizations (cache friendliness, etc.) + * + * \sa reverse() */ +template +inline void DenseBase::reverseInPlace() +{ + derived() = derived().reverse().eval(); +} + + +#endif // EIGEN_REVERSE_H diff --git a/asift_match/src/third_party/Eigen/src/Core/Select.h b/asift_match/src/third_party/Eigen/src/Core/Select.h new file mode 100755 index 0000000..d0cd66a --- /dev/null +++ b/asift_match/src/third_party/Eigen/src/Core/Select.h @@ -0,0 +1,158 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2008-2010 Gael Guennebaud +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see . + +#ifndef EIGEN_SELECT_H +#define EIGEN_SELECT_H + +/** \class Select + * \ingroup Core_Module + * + * \brief Expression of a coefficient wise version of the C++ ternary operator ?: + * + * \param ConditionMatrixType the type of the \em condition expression which must be a boolean matrix + * \param ThenMatrixType the type of the \em then expression + * \param ElseMatrixType the type of the \em else expression + * + * This class represents an expression of a coefficient wise version of the C++ ternary operator ?:. + * It is the return type of DenseBase::select() and most of the time this is the only way it is used. + * + * \sa DenseBase::select(const DenseBase&, const DenseBase&) const + */ + +namespace internal { +template +struct traits > + : traits +{ + typedef typename traits::Scalar Scalar; + typedef Dense StorageKind; + typedef typename traits::XprKind XprKind; + typedef typename ConditionMatrixType::Nested ConditionMatrixNested; + typedef typename ThenMatrixType::Nested ThenMatrixNested; + typedef typename ElseMatrixType::Nested ElseMatrixNested; + enum { + RowsAtCompileTime = ConditionMatrixType::RowsAtCompileTime, + ColsAtCompileTime = ConditionMatrixType::ColsAtCompileTime, + MaxRowsAtCompileTime = ConditionMatrixType::MaxRowsAtCompileTime, + MaxColsAtCompileTime = ConditionMatrixType::MaxColsAtCompileTime, + Flags = (unsigned int)ThenMatrixType::Flags & ElseMatrixType::Flags & HereditaryBits, + CoeffReadCost = traits::type>::CoeffReadCost + + EIGEN_SIZE_MAX(traits::type>::CoeffReadCost, + traits::type>::CoeffReadCost) + }; +}; +} + +template +class Select : internal::no_assignment_operator, + public internal::dense_xpr_base< Select >::type +{ + public: + + typedef typename internal::dense_xpr_base