[ VIGRA Homepage | Function Index | Class Index | Namespaces | File List | Main Page ]
Credits
Ullrich Köthe originated and wrote the library.
Mikhail Amchislavsky (mamchisl@ucdavis.edu) contributed code to read and write PNM files.
Hans Meine (hans_meine@gmx.net) contributed interface code for the FFTW Fourier transform library, the ImageArray class and the Gabor filter code. He also collaborated in the implementation of many other modules and contributed various improvements.
Gunnar Kedenburg (gunnar@haquebright.de) completely rewrote the image import/export library and implemented the initial version of the MultiArray functionality.
Yevgen Reznichenko (rezniche@kogs.informatik.uni-hamburg.de) added a number of image processing algorithms.
Christian Dennis Rahn (rahn@informatik.uni-hamburg.de) implemented initial versions of multi-dimensional convolution filters.
Kasim Terzic, Florian Heinrich and Benjamin Seppke implemented image analysis functionality for 3- and higher-dimensional data.
Pablo d'Angelo, Douglas Wilkins, Lukas Jirkovsky and other members of the Hugin team contributed various extensions of the impex library (UINT16/UINT32 support, ICC profile support, HDR and OpenEXR file types).
Rahul Nair implemented the RandomForest classifier and VIGRA Matlab bindings.
Michael Hanselmann and Martin Lindner implemented much of the HDF5 support. Michael Hanselmann also contributed his pLSA (probabilistic latent semantic analysis) implementation.
Nathan Huesken and Christoph Sommer helped a lot in developing vigranumpy, the VIGRA Python bindings.
Jens-Malte Gottfried contributed to the cmake-based build system.
Joachim Schleicher implemented a reader for the SIF file format.
Oliver Gathmann and Michael Held implemented support for the multi-page TIFF format.
Christoph Spiel contributed I/O functions for images with transparency (alpha channel) and other improvements to the impex library.
Frank Lenzen contributed his implementations of total variation filters.
Patrick Fahner helped writing the tutorial.
Stefan Schmidt made major contributions to GridGraph.
Martin Bidlingmaier extended various image processing function to support block-wise execution on large data.
Thorsten Beier implemented many graph-based image analysis algorithms and parallel versions of important image processing functions.
Benjamin Seppke contributed various image registration algorithms.
John Kirkham figured out how to configure Travis to run tests for Python3 and on OS X.
Mark Harfouche updated CMake configuration to 3.12 enabling compatibility with PyPy.
Philip Schill implemented version 3 of the Random Forest.
David Stöckel contributed the 3D convex hull functionality.
Lukas Wirz (lnw) contributed fixes for C++ compilers in 2025.
Alfred Wingate (parona-source) contributed improvements to regex in python.
t0b3 contributed improvements to the CI testing infrastructure for python 3.13.
sertonix contributed to improvements to the testing scripts.
Many thanks to all!
Changes from Version 1.12.2 to 1.12.3 (2025/03/13)
Vigra Numpy: fix compatibility with numpy 2.4. The methods ptp of the Vigra arrays are conditionally removed if numpy 2.4 or greater is detected.
Changes from Version 1.12.1 to 1.12.2 (2025/03/13)
fix typo in multi_iterator_coupled -- Contributed by lnw -- https://github.com/ukoethe/vigra/pull/592 fix RandomAccessSet::insert(pos, val) function for gcc-15 and clang-19 -- Contributed by lnw -- https://github.com/ukoethe/vigra/pull/599 Do not inherit from std::iterator as it is deprecated in c++17 -- Contributed by lnw -- https://github.com/ukoethe/vigra/pull/601 modernise for c++20 -- Contributed by lnw -- https://github.com/ukoethe/vigra/pull/605 Move away from inline global regex flag -- Contributed by parona-source -- https://github.com/ukoethe/vigra/pull/594 CI: add python 3.13 -- Contributed by t0b3 -- https://github.com/ukoethe/vigra/pull/595 Use posix shell instead of bash for tests -- Contributed by sertonix -- https://github.com/ukoethe/vigra/pull/600 Fix macos runner on CI -- Contributed by k-dominik -- https://github.com/ukoethe/vigra/pull/603
Changes from Version 1.12.0 to 1.12.1 (2024/09/02)
Addressed incompatibilities with Numpy 2 in the implementation of ptp. https://github.com/ukoethe/vigra/pull/581
Changes from Version 1.11.2 to 1.12.0 (2024/08)
Improved compatibility with Visual studio compiler and clang 16
Changes from Version 1.11.1 to 1.11.2 (unreleased)
Updated CMake minimum version to 3.12.
Added support for PyPy as python runtime (Mark Harfouche).
Updated/Fixed CI, including various fixes for the build system (Mark Harfouche, John Kirkham, Dominik Kutra)
Various fixes / improved compatility to support updated dependencies (hdf5 5.12, numpy>=1.20, sphinx>=1.8.0, python 3, h5py 3.0) (Mark Harfouche, John Kirkham, Ullrich Koethe, Dominik Kutra, Hans Meine)
Fixed Matlab compilation (Joachim Börger)
Changes from Version 1.11.0 to 1.11.1
Added 3D convex hull computation and features (David Stöckel).
Added Random Forest version 3, inspired by LEMON's graph API, to simplify customization of RF variants (Philip Schill).
Improved hierarchical clustering (Constantin Pape).
Changes from Version 1.10.0 to 1.11.0
Ported vigranumpy to Python 3.5.
Added Chunked arrays to store data larger than RAM as a collection of rectangular blocks.
Added ThreadPool and parallel_foreach() for portable algorithm parallelization based on std::thread.
Implemented parallel versions of Gaussian smoothing, Gaussian derivatives, connected components labeling, and union-find watersheds.
Added graph-based image analysis, e.g. agglomerative clustering
Included the callback mechanism described in "Impossibly Fast C++ Delegates" by Sergey Ryazanov (needed for agglomerative clustering).
Added many image registration functions.
Extended the collection of multi-dimensional distance transform algorithms by vectorial DT, boundary DT, and eccentricity transform.
Added skeletonizeImage(), nonLocalMean(), multi-dimensional integral images.
Added new 2D shape features based on skeletonization and the convex hull.
Additional arithmetic and algebraic functions for TinyVector.
Added CountingIterator.
Minor improvements and bug fixes in the code and documentation.
Changes from Version 1.9.0 to 1.10.0
VIGRA got a Tutorial !
Significant simplification of the API: MultiArrayView arguments can now be passed to functions directly:
The old syntax with Argument Object Factories (srcImageRange(), srcMultiArray() and relatives) remains valid, but is only required when the arguments are old-style BasicImages.
Made StridedArrayTag the default for MultiArrayView .
Added an efficient multi-dimensional GridGraph class which support both the LEMON and boost::graph APIs.
Generalized various algorithms to arbitrary dimensions (gaussianGradientMultiArray(), hessianOfGaussianMultiArray(), gaussianDivergenceMultiArray(), localMinima(), localMaxima(), labelMultiArray(), watershedsMultiArray()).
Added slicSuperpixels() for arbitrary dimensions.
Added automatic differentiation (see DualVector).
Added nonlinearLeastSquares() using the Levenberg-Marquardt algorithm and automatic differentiation.
Added a function setCoordinateOffset() to the feature accumulator classes to enable block-wise computation of coordinate-based features.
Added MultiCoordinateIterator to enumerate the grid coordinates of a multi-dimensional array.
Fixed thread-safety of RandomForest::learn() (random seeding) and RandomForest::predictLebels().
Improved HDF5 I/O for strided MultiArrayViews and HDF5 on-the-fly compression.
Added support for multi-page TIFF to importVolume() and exportVolume(). Added support for Andor SIF to importVolume().
Added VigranumpyConfig.cmake to simplify cmake-based compilation of custom vigranumpy modules.
Changes from Version 1.8.0 to 1.9.0
Flexible incremental computation of image and region statistics via Feature Accumulators and corresponding Python bindings (see vigra.analysis.extractFeatures() and vigra.analysis.extractRegionFeatures()).
Simultaneous iteration over several arrays via CoupledScanOrderIterator.
Import and export of images with transparency: importImageAlpha() and exportImageAlpha().
Image denoising by total variation filtering, see Non-linear Diffusion and Total Variation and example total_variation.cxx.
Fixed Python bindings of Unsupervised Decomposition.
Extended SplineImageView to handle TinyVector pixels.
Various convenience functions for vigranumpy's VigraArray.
Changes from Version 1.7.1 to 1.8.0
Various extensions to Local Minima and Maxima (3D algorithms, on-the-fly thresholding).
Added BucketQueue, MappedBucketQueue.
Refactored and extended 2D watershed algorithms (especially watershedsRegionGrowing()).
Added the Quaternion class.
Added Unsupervised Decomposition.
Added mathematical functions (even(), odd(), gamma(), loggamma(), legendre(), besselJ(), besselY(), linearSequence(), indexSort(), inversePermutation(), applyPermutation(), checksum())
Implemented wrapper of the FFTW library to support arbitrary dimensional Fourier transforms (see fourierTransform() and FFTWPlan) and FFT-based convolution (see convolveFFT() and FFTWConvolvePlan) and refactored FFTWComplex.
Added cannyEdgelListThreshold(), cannyEdgelList3x3Threshold().
Added capability to handle subarrays and anisotropic resolution to separableConvolveMultiArray() and related Gaussian filters. Added windowRatio parameters to initGaussian() and initGaussianDerivative()
Added StridedScanOrderIterator and corresponding begin().
Extended MultiArrayView. Added vigra::Shape1 ... vigra::Shape5 convenience typedefs.
Implemented vigra::multi_math (arithmetic and algebraic functions for multi-dimensional arrays).
Extended the HDF5File class.
Improved and documented the Timing macros for runtime measurements.
Added support for the OpenEXR image format and multi-page TIFF. Improved support for the SIF format.
vigranumpy: added axistags and completely re-implemented VigraArray and the conversion between Python and C++ arrays in terms of axistags.
Changes from Version 1.7.0 to 1.7.1
Fixed the build process for MacOS X.
Re-activated vigra-config (script to query VIGRA installation information) and added VigraConfig.cmake (query VIGRA installation information from within cmake).
Added CDash support (nightly builds and tests).
Added convexHull().
Added Box.
Added Sampler class to sample given data in various ways.
Added much new functionality to the RandomForest class (e.g. more split strategies, variable importance measures, feature selection)
Added readSIF() (reader for the Andor SIF file format).
Added HDF5File for easier navigation in HDF5 files.
Added recursive approximation of the Gaussian filter (recursiveGaussianFilterX(), recursiveGaussianFilterY())
vigranumpy: added Gabor filtering.
Fixed multi-threading bugs at various places.
Changes from Version 1.6.0 to 1.7.0
Incompatible changes:
Modified angle convention from counter-clockwise to clockwise (see e.g. Edgel). This fits better with the left-handed coordinate system we use.
Implemented a new build system on the basis of cmake.
Added NumpyAnyArray and NumpyArray, improved MultiArrayView.
Added vigranumpy (VIGRA Python bindings).
Added Vigra Matlab.
Added support for HDF5 import/export of arrays (see Import/Export of Images and Arrays in HDF5 Format).
Added RandomForest classifier.
Added constrained optimization functions: nonnegativeLeastSquares(), quadraticProgramming(), leastAngleRegression() (LASSO and non-negative LASSO).
Added choleskySolve() and improved choleskyDecomposition() (in-place capability).
Added symmetric2x2Eigenvalues() and symmetric3x3Eigenvalues() for fast eigenvalue computation on small matrices.
Added meshGrid().
Added FixedPoint16.
Changes from Version 1.5.0 to 1.6.0
Added functions for arrays of arbitrary dimensions:
Added functionality for 3D image analysis: labelVolume(), seededRegionGrowing3D(), watersheds3D(), Utilities to manage voxel neighborhoods
Added Random Number Generation
Added affineWarpImage() and factory functions for affine transformation matrices
Added linear algebra functionality: choleskyDecomposition(), singularValueDecomposition(), determinant(), logDeterminant(), leastSquares(), weightedLeastSquares(), ridgeRegression()
Extended linearSolve(), qrDecomposition(), and inverse() to handle rectangular matrices (complete reimplementation of these functions).
Added matrix functionality: joinVertically(), joinHorizontally(), columnStatistics(), rowStatistics(), prepareColumns(), prepareRows()
Added/fixed MultiArray and Matrix computed assignments
Extended MultiArrayView::norm() to compute L1, L2 and Linfinity, added MultiArrayView::swapData(), MultiArrayView::permuteDimensions(), MultiArrayView::transpose(), and other minor improvements to MultiArrayView
Added typedef MultiArrayIndex to fix signed/unsigned mismatch problems
Added ImagePyramid
Minor improvements in Image Import/Export Facilities
Added sRGB to Color Space Conversions
Added weighted operator()s to FindAverage[AndVariance] functors.
Added log2i() (integer base-2 logarithm), floorPower2(), and ceilPower2()
Added argMin(), argMax(), argMinIf(), argMaxIf()
Changed default border treatment of Gaussian filters and derivatives to BORDER_TREATMENT_REFLECT
Promoted documentation to Doxygen 1.5.6
Changes from Version 1.4.0 to 1.5.0
Added Noise Normalization
Added Camera MTF Estimation
Added gaussianGradientMagnitude()
Added fourierTransform() and fourierTransformInverse()
Added cannyEdgelList3x3()
Added srcImage(), srcImageRange() etc. with ROI (see Argument Object Factories)
Improved the Image Import/Export Facilities (thanks to Pablo d'Angelo, Douglas Wilkins and others):
Improved support of 64-bit compilers.
Added mathematical functions: elliptic integrals (ellipticIntegralF(), ellipticIntegralE()), chi-squared distribution (chi2(), chi2CDF(), noncentralChi2(), noncentralChi2CDF())
Dropped "vigra/" from #includes in headers (so compiler will first look in the same directory).
Switched to relative paths in the MSVC project files. Compile vigraimpex into a DLL.
Changes from Version 1.3.3 to 1.4.0
Switched to the MIT X11 License.
Introduced Fixed Size Integer Types (UInt8, Int16 etc.) and made VIGRA compile on 64-bit compilers. Thanks to Hans Ekkehard Plesser hans.ekkehard.plesser@umb.no) for bug reports and other help. Added corresponding typedefs UInt8Image, Int16RGBImage etc.
Added NumericTraits::isSigned. Thanks to Pablo D'Angelo pablo.dangelo@web.de) for a patch.
Added watersheds().
Added cross() (cross product).
Added cannyEdgeImageWithThinning().
Added the possibility to choose between 4- and 8-neighborhood in localMinima() and localMaxima().
Added FixedPoint.
Added template<> struct SquareRootTraits<ArithmeticType> and sqrti().
Extended SplineImageView to support access outside the image border according to reflective boundary conditions. Added partial specializations for orders 0 and 1 to speed up computations.
Extended RGBValue to have arbitrarily ordered color channels (e.g. BGR). Thanks to Paul Furgale (umfurga1@cc.umanitoba.ca) for the suggestion and a first implementation.
Changes from Version 1.3.2 to 1.3.3
Added template<> struct NormTraits<ArithmeticType>, norm(), squaredNorm().
Added gradientEnergyTensor()
Added the test suite to the distribution (see installation section)
Changes from Version 1.3.1 to 1.3.2
Added Matrix class.
Added Matrix algebra, solution of linear systems, eigenvalue computation.
Changes from Version 1.3.0 to 1.3.1
Fixed syntax for dependent types in templates to make VIGRA compile with g++ 3.4 (which is very strict in enforcing dependent type rules).
Added FunctorTraits.
Added ReduceFunctor.
Added reduce and expand modes to the multi-dimensional point operators.
Changes from Version 1.2.0 to 1.3.0
Added algorithms for multi-dimensional arrays: see Point operators for multi-dimensional arrays. and Convolution Filters and the navigator utility.
Extended convolveImage() (non-separable convolution) to support all border treatment modes.
Added Rational
Added Polynomial and polynomialRoots().
Added more mathematical functions and functors.
Added SplineImageView.
Added 2nd order recursiveFilterX() and recursiveFilterY()
Added Resampling Convolution Filters and reimplemented resizeImageSplineInterpolation() in terms of them.
Added multiarray to image wrappers.
Added image mirroring and rotation.
Added fftw3.hxx to support FFTW version 3 (unfortunately, this is incompatible to FFTW 2, which is still supported in fftw.hxx but should no longer be used within VIGRA).
Added ArrayVector as a std::vector alternative whose memory is guaranteed to be one contiguous piece and whose iterator is guaranteed to be a value_type *.
Added an allocator template parameters to all classes that allocate dynamic memory.
Changes from Version 1.1.6 to 1.2.0
Complete redesign of the image import/export library.
Added support for Microsoft Visual C++ 7.1 (.net 2003). This is the first Microsoft compiler that compiles VIGRA without special configurations and work-arounds. Work-arounds for older MS compilers will probably no longer be maintained.
Added support for PNG image format.
Added cygwin support to the build system.
Added pixel neighborhood utilities and NeighborhoodCirculator.
Added CrackContourCirculator
Added recursiveFilterX() and recursiveFilterY() that support negative filter coefficients and all BorderTreatmenModes
Changed gaussianSmoothing() to use BORDER_TREATMENT_REFLECT
Added simpleSharpening() and gaussianSharpening()
Added BasicImageView
Split "utilities.hxx" into "diff2d.hxx", "interpolating_accessor.hxx", "iteratortags.hxx", "mathutil.hxx", "metaprogramming.hxx", "tuple.hxx". "utilities.hxx" now includes these other files.
Added multi-dimensional arrays and Import/export of volume data.
Changes from Version 1.1.5 to 1.1.6
Changes from Version 1.1.4 to 1.1.5
Added ImageArray.
Added more corner detectors (see Corner Detection).
Added local symmetry detector (see Symmetry Detection).
Added Gabor filter code (see Gabor Filter).
Extended functor expression library .
Added initImageWithFunctor().
Improved Gaussian derivative filters (higher accuracy, correct sign, see initGaussianDerivative()).
Ported VIGRA to Microsoft VisualC++.net (however, this compiler still doesn't support all VIGRA features, because it still doesn't implement partial template specialization and partial function ordering).
Finished the new build system.
Changes from Version 1.1.3 to 1.1.4
Added Fourier transform support, and FFTWComplex complex number type.
Added convolution convenience functions (see Convolution Filters).
Added IteratorAdaptor template for quick and easy generation of iterator adaptors.
Used IteratorAdaptor to implement improved row and column iterators for images.
Added rowIterator() and columnIterator() functions returning optimized iterator adapters to all 2D iterators (e.g. vigra::ImageIterator). Changed algorithms to make use of these new members.
Added rounding and clipping to accessor functions when floating point values are converted to intergral numbers.
Added STL-compatible typedefs to all functors, iterators and vigra::BasicImage.
Removed ConstRowIterator and ConstColumnsIterator. Thanks to the new typedefs, RowIterator and ColumnIterator are automatically const when the underlying iterator was const. Thus, separate const iterators are not necessary.
Changes from Version 1.1.2 to 1.1.3
Switched from obsolete doc++ documentation generator to doxygen.
Improved documentation.
Minor changes to the code to quiet compiler warnings if compiling with "<TT>g++ -Wall -pedantic</TT>".
Dropped support for rint() as this was not portable enough.
In error.hxx: replaced snprintf() with sprintf() for portability.
Renamed CellGridImage into CrackEdgeImage in Edge Detection.
Added TinyVector and made vigra::RGBValue derive from it.
Added typedefs for TinyVector images.
Added Color Space Conversions.
Added VectorComponentAccessor.
Extended FindMinMax to work with RGB images.
Changes from Version 1.1.1 to 1.1.2
Made VIGRA compile under MS Visual C++ 6.0.
Added BrightnessContrastFunctor.
Added gradientBasedTransform() and related MagnitudeFunctor and RGBGradientMagnitudeFunctor.
Added nonlinearDiffusion().
Added more smoothing methods to smooth example.
Added resize example.
Changes from Version 1.1.0 to 1.1.1
Fixed bug with PNM import code.
Changes from Version 1.0 to 1.1.0
Put everything in namespace "vigra".
Renamed
VigraStdException => StdException.
vigraImpexListFormats() => impexListFormats()
<li> Added expression templates for \ref FunctorExpressions "automated functor creation".
<li> Added support for input/output of the PNM image file format
(contributed by
<a href="mailto:mamchisl@ucdavis.edu">Mikhail Amchislavsky</a>).
<li> Improved support for the \ref TIFFImpex "TIFF image format".
VIGRA can now read and create TIFF with various pixel types
(unsigned byte, short and long int, float, double).
<li> Renamed Dist2D into \ref vigra::Diff2D, since it represents a difference vector
rather than a distance. Extended Diff2D so that it can also act as a
\ref vigra::CoordinateIterator. Note that this
required renaming <TT>Dist2D::width</TT> and <TT>Dist2D::height</TT> into <TT>Diff2D::x</TT>
and <TT>Diff2D::y</TT> respectively.
<li> Changed the documentation layout.
<li> Improved \ref labelImage() according to ideas of Prof.
Vladimir Kovalevsky.
<li> Several minor changes and bug fixes.
|
© Ullrich Köthe (ullrich.koethe@iwr.uni-heidelberg.de) |