a generic C++ library for image analysis

Overview

VIGRA Computer Vision Library

Build Status

            Copyright 1998-2013 by Ullrich Koethe


This file is part of the VIGRA computer vision library.
You may use, modify, and distribute this software according
to the terms stated in the LICENSE.txt file included in
the VIGRA distribution.

The VIGRA Website is
    http://ukoethe.github.io/vigra/
Please direct questions, bug reports, and contributions to
    [email protected]    or
    [email protected]


THIS SOFTWARE IS PROVIDED AS IS AND WITHOUT ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

Installation

Installation instructions can be found in the file

$VIGRA_PATH/doc/vigra/Installation.html

If the documentation has not yet been generated (e.g. when you build from a development snapshot), you find these instructions in

$VIGRA_PATH/docsrc/installation.dxx

or online at http://ukoethe.github.io/vigra/doc-release/vigra/Installation.html

Documentation

If you downloaded an official release, the documentation can be found in $VIGRA_PATH/doc/vigra/, the start file is $VIGRA_PATH/doc/vigra/index.html or online at http://ukoethe.github.io/vigra/#documentation.

When you use the development version from github, you can generate documentation by make doc.

Download

VIGRA can be downloaded at http://ukoethe.github.io/vigra/#download. The official development repository is at https://github.com/ukoethe/vigra

What is VIGRA

VIGRA is a computer vision library that puts its main emphasis on flexible algorithms, because algorithms represent the principal know-how of this field. The library was consequently built using generic programming as introduced by Stepanov and Musser and exemplified in the C++ Standard Template Library. By writing a few adapters (image iterators and accessors) you can use VIGRA's algorithms on top of your data structures, within your environment. Alternatively, you can also use the data structures provided within VIGRA, which can be easily adapted to a wide range of applications. VIGRA's flexibility comes almost for free: Since the design uses compile-time polymorphism (templates), performance of the compiled program approaches that of a traditional, hand tuned, inflexible, solution.

Issues
  • labelVolume segfault with gcc-4.8.1

    labelVolume segfault with gcc-4.8.1

    The labelVolume segmentation fault and general strange behaviour of the labelVolume* functions is due to an over-optimization by gcc-4.8.1 with -O3.

    Solution set the flag to -O2.


    With the recent libboost, I'm having segmentation faults in labelVolumeWithBackground() when I provide certain input volumes with a specific combination of axistags and ordering. Strangely, labelVolume() is not affected.

    #!/usr/bin/python2
    
    import vigra
    import numpy as np
    
    print("Testing for segfaults")
    
    X = vigra.VigraArray(np.zeros((3,20,50)), axistags=vigra.defaultAxistags('zyx'))
    labels = vigra.analysis.labelVolumeWithBackground(X)
    print("np.zeros worked")
    
    X = vigra.VigraArray(np.ones((3,20,50), dtype=np.uint8), axistags=vigra.defaultAxistags('xyz'))
    labels = vigra.analysis.labelVolumeWithBackground(X)
    print("XYZ (order=C) worked.")
    
    X = vigra.VigraArray(np.ones((3,20,50), dtype=np.uint8), order='F', axistags=vigra.defaultAxistags('zyx'))
    labels = vigra.analysis.labelVolumeWithBackground(X)
    print("ZYX (order=F) worked.") 
    
    X = vigra.VigraArray(np.ones((3,20,50), dtype=np.uint8), order='C', axistags=vigra.defaultAxistags('zyx'))
    labels = vigra.analysis.labelVolume(X)
    print("ZYX (order=C, labelVolume() )worked.") 
    
    
    
    # this example fails with segmentation fault 
    # Linux burger-Desktop 3.9.9-1-ARCH #1 SMP PREEMPT Wed Jul 3 22:45:16 CEST 2013 x86_64 GNU/Linux
    # LIBS:
    #       python2 2.7.5-1
    #       boost-libs 1.54.0-2
    
    X = vigra.VigraArray(np.ones((3,20,50), dtype=np.uint8), order='C', axistags=vigra.defaultAxistags('zyx'))
    labels = vigra.analysis.labelVolumeWithBackground(X)
    print("You fixed it.") 
    
    Output:
    
    Testing for segfaults
    np.zeros worked
    XYZ (order=C) worked.
    ZYX (order=F) worked.
    ZYX (order=C, labelVolume() )worked.
    Segmentation fault (core dumped)
    
    Backtrace:
    
    #0  0x00007fffef7e5115 in unsigned int vigra::labelVolumeWithBackground<vigra::StridedMultiIterator<3u, float, float const&, float const*>, vigra::StandardConstValueAccessor<float>, vigra::TinyVector<long, 3>, vigra::StridedMultiIterator<3u, unsigned int, unsigned int&, unsigned int*>, vigra::StandardValueAccessor<unsigned int>, vigra::Neighborhood3DSix::NeighborCode3D, float, std::equal_to<float> >(vigra::StridedMultiIterator<3u, float, float const&, float const*>, vigra::TinyVector<long, 3>, vigra::StandardConstValueAccessor<float>, vigra::StridedMultiIterator<3u, unsigned int, unsigned int&, unsigned int*>, vigra::StandardValueAccessor<unsigned int>, vigra::Neighborhood3DSix::NeighborCode3D, float, std::equal_to<float>) () from /usr/lib/python2.7/site-packages/vigra/analysis.so
    #1  0x00007fffef7efee5 in vigra::NumpyAnyArray vigra::pythonLabelVolumeWithBackground<float>(vigra::NumpyArray<3u, vigra::Singleband<float>, vigra::StridedArrayTag>, int, float, vigra::NumpyArray<3u, vigra::Singleband<unsigned int>, vigra::StridedArrayTag>) () from /usr/lib/python2.7/site-packages/vigra/analysis.so
    #2  0x00007fffef851c40 in boost::python::detail::caller_arity<4u>::impl<vigra::NumpyAnyArray (*)(vigra::NumpyArray<3u, vigra::Singleband<float>, vigra::StridedArrayTag>, int, float, vigra::NumpyArray<3u, vigra::Singleband<unsigned int>, vigra::StridedArrayTag>), boost::python::default_call_policies, boost::mpl::vector5<vigra::NumpyAnyArray, vigra::NumpyArray<3u, vigra::Singleband<float>, vigra::StridedArrayTag>, int, float, vigra::NumpyArray<3u, vigra::Singleband<unsigned int>, vigra::StridedArrayTag> > >::operator()(_object*, _object*) () from /usr/lib/python2.7/site-packages/vigra/analysis.so
    #3  0x00007ffff656444a in boost::python::objects::function::call(_object*, _object*) const () from /usr/lib/libboost_python.so.1.54.0
    #4  0x00007ffff65647b8 in ?? () from /usr/lib/libboost_python.so.1.54.0
    #5  0x00007ffff656e4e3 in boost::python::handle_exception_impl(boost::function0<void>) () from /usr/lib/libboost_python.so.1.54.0
    #6  0x00007ffff6562f73 in ?? () from /usr/lib/libboost_python.so.1.54.0
    #7  0x00007ffff7a63c13 in PyObject_Call () from /usr/lib/libpython2.7.so.1.0
    #8  0x00007ffff7af39e1 in PyEval_EvalFrameEx () from /usr/lib/libpython2.7.so.1.0
    #9  0x00007ffff7af8290 in PyEval_EvalCodeEx () from /usr/lib/libpython2.7.so.1.0
    #10 0x00007ffff7af8392 in PyEval_EvalCode () from /usr/lib/libpython2.7.so.1.0
    #11 0x00007ffff7b1108f in run_mod () from /usr/lib/libpython2.7.so.1.0
    #12 0x00007ffff7b121ae in PyRun_FileExFlags () from /usr/lib/libpython2.7.so.1.0
    #13 0x00007ffff7b13319 in PyRun_SimpleFileExFlags () from /usr/lib/libpython2.7.so.1.0
    #14 0x00007ffff7b23c1f in Py_Main () from /usr/lib/libpython2.7.so.1.0
    #15 0x00007ffff7472a15 in __libc_start_main () from /usr/lib/libc.so.6
    #16 0x0000000000400741 in _start ()
    
    opened by burgerdev 24
  • python: Added applyMapping() function

    python: Added applyMapping() function

    Here's the docstring:

    applyMapping( (object)labels, (dict)mapping [, (bool)allow_incomplete_mapping=False [, (object)out=None]]) -> object :
        Map all values in `labels` to new values using the given mapping (a dict).
        Useful for maps with large values, for which a numpy index array would need too much RAM.
        To relabel in-place, set `out=labels`.
    
        Parameters
        ----------
        labels: ndarray
        mapping: dict of ``{old_label : new_label}``
        allow_incomplete_mapping: If True, then any voxel values in the original data that are missing
                                  from the mapping dict will be copied (and casted) into the output.
                                  Otherwise, an ``IndexError`` will be raised if the map is incomplete
                                  for the input data.
        out: ndarray to hold the data. If None, it will be allocated for you.
             The dtype of ``out`` is allowed to be smaller (or bigger) than the dtype of ``labels``.
    
        Note: As with other vigra functions, you should provide accurate axistags for optimal performance.
    

    Edit: This PR uses a C++11 lambda. If that's not acceptable (until vigra 1.11), let me know.

    opened by stuarteberg 20
  • some vigranumpy test segfaults on Mac

    some vigranumpy test segfaults on Mac

    I am getting segfaults from a fresh vigranumpy install using OS X Lion and MacPorts’ python 2.7.

    make check gave me:

    executing test file /Users/hans/uni/KOGS/vigra/build/vigranumpy/test/test1.pyc
    ./run_vigranumpytest.sh: line 1: 28131 Segmentation fault: 11  /opt/local/bin/python -c "import nose; nose.main()" .
    make[3]: *** [vigranumpy/test/vigranumpytest.so] Error 1
    

    Interestingly, make -k reveals that all other tests pass successfully!

    opened by hmeine 16
  • Enhancements to unique() and relabelConsecutive()

    Enhancements to unique() and relabelConsecutive()

    Here are two tiny changes to make it easier for users to replace the horribly slow numpy.unique() with vigra.analysis.unique():

    • Support int64. (This is more commonly needed than I originally thought.)
    • Sort the output by default, like numpy.unique() does.
    opened by stuarteberg 15
  • permutationToNormalOrder() fails

    permutationToNormalOrder() fails

    For the latest build of vigra master on windows 7, Visual Studio 2008 64bit, the check_python test fails with:

    11>executing test file c:\vigra\build\vigranumpy\test\test_impex.pyc 11>E 11>====================================================================== 11>ERROR: Failure: RuntimeError (exceptions.ValueError: permutationToNormalOrder() did not return a sequence of int.) 11>---------------------------------------------------------------------- 11>Traceback (most recent call last): 11> File "C:\Python26\lib\site-packages\nose-1.0.0-py2.6.egg\nose\loader.py", line 390, in loadTestsFromName 11> addr.filename, addr.module) 11> File "C:\Python26\lib\site-packages\nose-1.0.0-py2.6.egg\nose\importer.py", line 39, in importFromPath 11> return self.importFromDir(dir_path, fqname) 11> File "C:\Python26\lib\site-packages\nose-1.0.0-py2.6.egg\nose\importer.py", line 86, in importFromDir 11> mod = load_module(part_fqname, fh, filename, desc) 11> File "c:\vigra\build\vigranumpy\test\test1.py", line 47, in 11> img_rgb_f = at.RGBImage(np.random.rand(100,200,3)*255,dtype=np.float32) 11> File "C:\vigra\build\vigranumpy\vigra\arraytypes.py", line 1568, in RGBImage 11> res = VigraArray(obj, dtype, None, init, value, axistags) 11> File "C:\vigra\build\vigranumpy\vigra\arraytypes.py", line 398, in new 11> res = _constructArrayFromAxistags(cls, obj.shape, dtype, axistags, init) 11>RuntimeError: exceptions.ValueError: permutationToNormalOrder() did not return a sequence of int.

    bug showstopper 
    opened by akreshuk 15
  • Travis CI Python 3.x fixes

    Travis CI Python 3.x fixes

    This appears to do the trick. Turns out this was never picking up the right Python library in the first place.

    However, I have found running the following in python points me to the correct directory for the python library.

    from distutils.sysconfig import get_config_var
    get_config_var("LIBDIR")
    

    This doesn't tell me the library itself, but it does tell me where to look. At that point, we can use the existing search method to find the library.

    Setting the correct Boost.Python library was simply a matter of searching for python-pyXY instead of python; where, Python's major version is X and minor version is Y.

    After some more experimentation, it became clear that we didn't have Boost.Python support for 3.5 or 3.4 on Travis CI. Instead, as we have Boost 1.46.1, we only have support for Python 3.2.

    Switching to Python 3.2 made a small issue with unicode support apparent. This required the addition of a small bug fix.

    opened by jakirkham 12
  • Porting to Python 3

    Porting to Python 3

    Fortunately, Guido punted this necessary move from 2015 to 2020. ( https://hg.python.org/peps/rev/76d43e52d978 ) However, at some point, this move will need to occur. If this is very complex, it may be worth trying to understand what makes it complex and what it will take to remedy it. Already some packages don't support Python 2.x.

    opened by jakirkham 12
  • Tests don't succeed with VC14

    Tests don't succeed with VC14

    We have been trying prereleases of VC14, and there were always problems with vigra's tests, but I hoped that they would vanish when the compiler becomes less buggy. Now the final version was released, and the errors with vigra are nearly the only ones that persisted. :-( So far, I am not sure whether it's a plain bug in VC14, or whether this new compiler just reveals bugs that went unnoticed for a long time, although I would suspect the former to have a higher probability.

    The following tests fail with a corrupted heap:

    • classifier_speed_comparison
    • test_simpleanalysis
    • test_convolution
    • test_classifier
    • test_slic2d

    I had a closer look at classifier_speed_comparison:

    • The problem occurs in the old, deprecated implementation, so it can be much faster reproduced by commenting out the use of the new implementation.
    • The crash happens in ArrayVector's destructor. (However, the heap corruption could be caused by something else.)
    opened by hmeine 12
  • Linking error with vigranumpy on Windows

    Linking error with vigranumpy on Windows

    Running into some sort of linking error on Windows. Looks like it is related to vigranumpy and the HDF5 interface. It seems to be finding all the HDF5 libraries fine. Not entirely sure what is causing the issue.

    opened by jakirkham 11
  • Pythonbindings and improved prediction for Random Forest 3.

    Pythonbindings and improved prediction for Random Forest 3.

    This PR includes:

    • Fixing some issues that prevented efficient parallel prediction of RF3.
    • Pythonbindings for RF3
    • Allowing to instantiate RF3 with any MultiArray that supports the vigra::MultiArray API.

    For benchmarking of RF3, RF2 and sklearn RF see: https://github.com/constantinpape/rf_benchmarks

    opened by constantinpape 11
  • vigra master do not build on mac os x mountain lion

    vigra master do not build on mac os x mountain lion

    Vigra master do not currently compile on mac os Mountain Lion 10.8 with Xcode 4 provided gcc (version 4.2 apple modified)

    the error message ends at:

    /Users/lfiaschi/phd/workspace/vigra-github/vigranumpy/src/core/accumulator.cxx:130: instantiated from here /Users/lfiaschi/phd/workspace/vigra-github/include/vigra/accumulator.hxx:2873: error: no matching function for call to ‘get(const vigra::CoupledHandlevigra::Multiband<float, vigra::CoupledHandle<vigra::TinyVector<long int, 3>, void> >&)’ make[2]: *** [vigranumpy/src/core/CMakeFiles/vigranumpy_analysis.dir/accumulator.cxx.o] Error 1 make[1]: *** [vigranumpy/src/core/CMakeFiles/vigranumpy_analysis.dir/all] Error 2 make: *** [all] Error 2

    bug 
    opened by lfiaschi 11
  • cpp11

    cpp11

    Silence Wdeprecated-copy warnings by g++-11/linux. Breaks any pre-11 c++ versions!

    The choice of defaulting/deleting member function simply replicates the previous implicit choices. The two lines in multi_array.hxx and numpy_array_taggedshape.hxx may warrant some looking at (although also here, I'm just replicating the previous implicit behaviour)

    opened by lnw 1
  • We need a new maintenance concept / an active maintainer

    We need a new maintenance concept / an active maintainer

    As far as I know, the current situation is that @ukoethe (inventor, main developer and former maintainer) and I (former active contributor and still GitHub lurker) are no longer actively using VIGRA, and in particular, Ulli is no longer interested in maintenance.

    However, VIGRA still does have a number of users, and I have seen quite some valuable contributions that await some maintainer testing & decision to merge them.

    In January, we had a brief discussion here: https://github.com/ukoethe/vigra/pull/485#issuecomment-1007582066

    I suggest to give at least one active contributor rights to this repository. (As an alternative, if people think it should no longer be located in Ullis personal GitHub space, we could also start a "vigra" organization and officially fork a community-maintained version. Personally, I would be fine with keeping the current location.)

    Who wants to take on this responsibility? I offer to help and contribute my opinion where it makes sense, but I also no longer actively use VIGRA, and I have even stopped actively coding in C++, so my C++11 knowledge is just from reading so far. :-)

    • @hmaarrfk is a very active OSS contributor in general and has opened some issues & PRs
    • @k-dominik was mentioned by @hmaarrfk AFAICS
    • @DerThorsten ?

    I would love to get an official word here from @ukoethe as well.

    opened by hmeine 2
  • deprecated implicit member functions

    deprecated implicit member functions

    I'm getting a large number of Wdeprecated-copy warnings with g++-11/linux, wrt different classes where either the copy ctor is used while the copy-assignment operator is implemented or the other way round. According to the rule of five declaring either of them prevents the implicit generation of the others.

    Is this (including the omission of move ctors and move assignment operators) intentional, in order to support pre-C++-11 standard versions? Otherwise I'd make a pull request.

    opened by lnw 2
  • Build failure in tests suite

    Build failure in tests suite

    In addition to #491, I’m seeing new failures on latest master:

    [ 40%] Building CXX object test/classifier/CMakeFiles/test_classifier.dir/test.cxx.o
    In file included from /usr/include/c++/11.2.0/algorithm:62,
                     from /build/vigra/src/vigra/include/vigra/random_forest.hxx:41,
                     from /build/vigra/src/vigra/test/classifier/test.cxx:47:
    /usr/include/c++/11.2.0/bits/stl_algo.h: In instantiation of ‘_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = double*; _OIter = double*; _UnaryOperation = std::_Bind<std::divides<double>(double, std::_Placeholder<2>)>]’:
    /build/vigra/src/vigra/test/classifier/test.cxx:535:27:   required from here
    /usr/include/c++/11.2.0/bits/stl_algo.h:4296:31: error: no match for call to ‘(std::_Bind<std::divides<double>(double, std::_Placeholder<2>)>) (double&)’
     4296 |         *__result = __unary_op(*__first);
          |                     ~~~~~~~~~~^~~~~~~~~~
    In file included from /build/vigra/src/vigra/test/classifier/test.cxx:45:
    /usr/include/c++/11.2.0/functional:501:9: note: candidate: ‘template<class ... _Args, class _Result> _Result std::_Bind<_Functor(_Bound_args ...)>::operator()(_Args&& ...) [with _Args = {_Args ...}; _Result = _Result; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’
      501 |         operator()(_Args&&... __args)
          |         ^~~~~~~~
    /usr/include/c++/11.2.0/functional:501:9: note:   template argument deduction/substitution failed:
    /usr/include/c++/11.2.0/functional: In substitution of ‘template<class _Functor, class ... _Bound_args> template<class _Fn, class _CallArgs, class ... _BArgs> using _Res_type_impl = typename std::result_of<_Fn&(decltype (std::_Mu<typename std::remove_cv<_BArgs>::type, std::is_bind_expression<typename std::remove_cv<_BArgs>::type>::value, (std::is_placeholder<typename std::remove_cv<_BArgs>::type>::value > 0)>()(declval<_BArgs&>(), declval<_CallArgs&>()))&& ...)>::type [with _Fn = std::divides<double>; _CallArgs = std::tuple<double&>; _BArgs = {double, std::_Placeholder<2>}; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’:
    /usr/include/c++/11.2.0/functional:468:8:   required by substitution of ‘template<class _Functor, class ... _Bound_args> template<class _CallArgs> using _Res_type = std::_Bind<_Functor(_Bound_args ...)>::_Res_type_impl<_Functor, _CallArgs, _Bound_args ...> [with _CallArgs = std::tuple<double&>; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’
    /usr/include/c++/11.2.0/functional:498:9:   required from ‘_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = double*; _OIter = double*; _UnaryOperation = std::_Bind<std::divides<double>(double, std::_Placeholder<2>)>]’
    /build/vigra/src/vigra/test/classifier/test.cxx:535:27:   required from here
    /usr/include/c++/11.2.0/functional:460:13: error: no match for call to ‘(std::_Mu<std::_Placeholder<2>, false, true>) (std::_Placeholder<2>&, std::tuple<double&>&)’
      460 |             _Mu<typename remove_cv<_BoundArg>::type>()(
          |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /usr/include/c++/11.2.0/functional:363:9: note: candidate: ‘template<class _Tuple> std::_Safe_tuple_element_t<(std::is_placeholder<_Tp>::value - 1), _Tuple>&& std::_Mu<_Arg, false, true>::operator()(const volatile _Arg&, _Tuple&) const volatile [with _Tuple = _Tuple; _Arg = std::_Placeholder<2>]’
      363 |         operator()(const volatile _Arg&, _Tuple& __tuple) const volatile
          |         ^~~~~~~~
    /usr/include/c++/11.2.0/functional:363:9: note:   template argument deduction/substitution failed:
    /usr/include/c++/11.2.0/functional: In substitution of ‘template<long unsigned int __i, class _Tuple> using _Safe_tuple_element_t = typename std::enable_if<(__i < std::tuple_size<_Tuple>::value), std::tuple_element<__i, _Tuple> >::type::type [with long unsigned int __i = 1; _Tuple = std::tuple<double&>]’:
    /usr/include/c++/11.2.0/functional:363:2:   required by substitution of ‘template<class _Tuple> std::_Safe_tuple_element_t<1, _Tuple>&& std::_Mu<std::_Placeholder<2>, false, true>::operator()<_Tuple>(const volatile std::_Placeholder<2>&, _Tuple&) const volatile [with _Tuple = std::tuple<double&>]’
    /usr/include/c++/11.2.0/functional:460:6:   required by substitution of ‘template<class _Functor, class ... _Bound_args> template<class _Fn, class _CallArgs, class ... _BArgs> using _Res_type_impl = typename std::result_of<_Fn&(decltype (std::_Mu<typename std::remove_cv<_BArgs>::type, std::is_bind_expression<typename std::remove_cv<_BArgs>::type>::value, (std::is_placeholder<typename std::remove_cv<_BArgs>::type>::value > 0)>()(declval<_BArgs&>(), declval<_CallArgs&>()))&& ...)>::type [with _Fn = std::divides<double>; _CallArgs = std::tuple<double&>; _BArgs = {double, std::_Placeholder<2>}; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’
    /usr/include/c++/11.2.0/functional:468:8:   required by substitution of ‘template<class _Functor, class ... _Bound_args> template<class _CallArgs> using _Res_type = std::_Bind<_Functor(_Bound_args ...)>::_Res_type_impl<_Functor, _CallArgs, _Bound_args ...> [with _CallArgs = std::tuple<double&>; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’
    /usr/include/c++/11.2.0/functional:498:9:   required from ‘_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = double*; _OIter = double*; _UnaryOperation = std::_Bind<std::divides<double>(double, std::_Placeholder<2>)>]’
    /build/vigra/src/vigra/test/classifier/test.cxx:535:27:   required from here
    /usr/include/c++/11.2.0/functional:274:11: error: no type named ‘type’ in ‘struct std::enable_if<false, std::tuple_element<1, std::tuple<double&> > >’
      274 |     using _Safe_tuple_element_t
          |           ^~~~~~~~~~~~~~~~~~~~~
    /usr/include/c++/11.2.0/bits/stl_algo.h: In instantiation of ‘_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = double*; _OIter = double*; _UnaryOperation = std::_Bind<std::divides<double>(double, std::_Placeholder<2>)>]’:
    /build/vigra/src/vigra/test/classifier/test.cxx:535:27:   required from here
    /usr/include/c++/11.2.0/functional:513:9: note: candidate: ‘template<class ... _Args, class _Result> _Result std::_Bind<_Functor(_Bound_args ...)>::operator()(_Args&& ...) const [with _Args = {_Args ...}; _Result = _Result; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’
      513 |         operator()(_Args&&... __args) const
          |         ^~~~~~~~
    /usr/include/c++/11.2.0/functional:513:9: note:   template argument deduction/substitution failed:
    /usr/include/c++/11.2.0/functional: In substitution of ‘template<class _Functor, class ... _Bound_args> template<class _Fn, class _CallArgs, class ... _BArgs> using _Res_type_impl = typename std::result_of<_Fn&(decltype (std::_Mu<typename std::remove_cv<_BArgs>::type, std::is_bind_expression<typename std::remove_cv<_BArgs>::type>::value, (std::is_placeholder<typename std::remove_cv<_BArgs>::type>::value > 0)>()(declval<_BArgs&>(), declval<_CallArgs&>()))&& ...)>::type [with _Fn = const std::divides<double>; _CallArgs = std::tuple<double&>; _BArgs = {const double, const std::_Placeholder<2>}; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’:
    /usr/include/c++/11.2.0/functional:475:8:   required by substitution of ‘template<class _Functor, class ... _Bound_args> template<class _CallArgs, template<class _CallArgs, template<class> class __cv_quals> template<class _Functor, class ... _Bound_args> template<class> class __cv_quals> using _Res_type_cv = std::_Bind<_Functor(_Bound_args ...)>::_Res_type_impl<typename __cv_quals<typename std::enable_if<(bool)((std::tuple_size<_Tuple>::value + 1)), _Functor>::type>::type, _CallArgs, typename __cv_quals<_Bound_args>::type ...> [with _CallArgs = std::tuple<double&>; __cv_quals = std::add_const; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’
    /usr/include/c++/11.2.0/functional:510:9:   required from ‘_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = double*; _OIter = double*; _UnaryOperation = std::_Bind<std::divides<double>(double, std::_Placeholder<2>)>]’
    /build/vigra/src/vigra/test/classifier/test.cxx:535:27:   required from here
    /usr/include/c++/11.2.0/functional:460:13: error: no match for call to ‘(std::_Mu<std::_Placeholder<2>, false, true>) (const std::_Placeholder<2>&, std::tuple<double&>&)’
      460 |             _Mu<typename remove_cv<_BoundArg>::type>()(
          |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /usr/include/c++/11.2.0/functional:363:9: note: candidate: ‘template<class _Tuple> std::_Safe_tuple_element_t<(std::is_placeholder<_Tp>::value - 1), _Tuple>&& std::_Mu<_Arg, false, true>::operator()(const volatile _Arg&, _Tuple&) const volatile [with _Tuple = _Tuple; _Arg = std::_Placeholder<2>]’
      363 |         operator()(const volatile _Arg&, _Tuple& __tuple) const volatile
          |         ^~~~~~~~
    /usr/include/c++/11.2.0/functional:363:9: note:   template argument deduction/substitution failed:
    /usr/include/c++/11.2.0/bits/stl_algo.h: In instantiation of ‘_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = double*; _OIter = double*; _UnaryOperation = std::_Bind<std::divides<double>(double, std::_Placeholder<2>)>]’:
    /build/vigra/src/vigra/test/classifier/test.cxx:535:27:   required from here
    /usr/include/c++/11.2.0/functional:531:9: note: candidate: ‘template<class ... _Args, class _Result> _Result std::_Bind<_Functor(_Bound_args ...)>::operator()(_Args&& ...) volatile [with _Args = {_Args ...}; _Result = _Result; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’
      531 |         operator()(_Args&&... __args) volatile
          |         ^~~~~~~~
    /usr/include/c++/11.2.0/functional:531:9: note:   template argument deduction/substitution failed:
    /usr/include/c++/11.2.0/functional: In substitution of ‘template<class _Functor, class ... _Bound_args> template<class _Fn, class _CallArgs, class ... _BArgs> using _Res_type_impl = typename std::result_of<_Fn&(decltype (std::_Mu<typename std::remove_cv<_BArgs>::type, std::is_bind_expression<typename std::remove_cv<_BArgs>::type>::value, (std::is_placeholder<typename std::remove_cv<_BArgs>::type>::value > 0)>()(declval<_BArgs&>(), declval<_CallArgs&>()))&& ...)>::type [with _Fn = volatile std::divides<double>; _CallArgs = std::tuple<double&>; _BArgs = {volatile double, volatile std::_Placeholder<2>}; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’:
    /usr/include/c++/11.2.0/functional:475:8:   required by substitution of ‘template<class _Functor, class ... _Bound_args> template<class _CallArgs, template<class _CallArgs, template<class> class __cv_quals> template<class _Functor, class ... _Bound_args> template<class> class __cv_quals> using _Res_type_cv = std::_Bind<_Functor(_Bound_args ...)>::_Res_type_impl<typename __cv_quals<typename std::enable_if<(bool)((std::tuple_size<_Tuple>::value + 1)), _Functor>::type>::type, _CallArgs, typename __cv_quals<_Bound_args>::type ...> [with _CallArgs = std::tuple<double&>; __cv_quals = std::add_volatile; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’
    /usr/include/c++/11.2.0/functional:528:9:   required from ‘_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = double*; _OIter = double*; _UnaryOperation = std::_Bind<std::divides<double>(double, std::_Placeholder<2>)>]’
    /build/vigra/src/vigra/test/classifier/test.cxx:535:27:   required from here
    /usr/include/c++/11.2.0/functional:460:13: error: no match for call to ‘(std::_Mu<std::_Placeholder<2>, false, true>) (volatile std::_Placeholder<2>&, std::tuple<double&>&)’
      460 |             _Mu<typename remove_cv<_BoundArg>::type>()(
          |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /usr/include/c++/11.2.0/functional:363:9: note: candidate: ‘template<class _Tuple> std::_Safe_tuple_element_t<(std::is_placeholder<_Tp>::value - 1), _Tuple>&& std::_Mu<_Arg, false, true>::operator()(const volatile _Arg&, _Tuple&) const volatile [with _Tuple = _Tuple; _Arg = std::_Placeholder<2>]’
      363 |         operator()(const volatile _Arg&, _Tuple& __tuple) const volatile
          |         ^~~~~~~~
    /usr/include/c++/11.2.0/functional:363:9: note:   template argument deduction/substitution failed:
    /usr/include/c++/11.2.0/bits/stl_algo.h: In instantiation of ‘_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = double*; _OIter = double*; _UnaryOperation = std::_Bind<std::divides<double>(double, std::_Placeholder<2>)>]’:
    /build/vigra/src/vigra/test/classifier/test.cxx:535:27:   required from here
    /usr/include/c++/11.2.0/functional:543:9: note: candidate: ‘template<class ... _Args, class _Result> _Result std::_Bind<_Functor(_Bound_args ...)>::operator()(_Args&& ...) const volatile [with _Args = {_Args ...}; _Result = _Result; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’
      543 |         operator()(_Args&&... __args) const volatile
          |         ^~~~~~~~
    /usr/include/c++/11.2.0/functional:543:9: note:   template argument deduction/substitution failed:
    /usr/include/c++/11.2.0/functional: In substitution of ‘template<class _Functor, class ... _Bound_args> template<class _Fn, class _CallArgs, class ... _BArgs> using _Res_type_impl = typename std::result_of<_Fn&(decltype (std::_Mu<typename std::remove_cv<_BArgs>::type, std::is_bind_expression<typename std::remove_cv<_BArgs>::type>::value, (std::is_placeholder<typename std::remove_cv<_BArgs>::type>::value > 0)>()(declval<_BArgs&>(), declval<_CallArgs&>()))&& ...)>::type [with _Fn = const volatile std::divides<double>; _CallArgs = std::tuple<double&>; _BArgs = {const volatile double, const volatile std::_Placeholder<2>}; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’:
    /usr/include/c++/11.2.0/functional:475:8:   required by substitution of ‘template<class _Functor, class ... _Bound_args> template<class _CallArgs, template<class _CallArgs, template<class> class __cv_quals> template<class _Functor, class ... _Bound_args> template<class> class __cv_quals> using _Res_type_cv = std::_Bind<_Functor(_Bound_args ...)>::_Res_type_impl<typename __cv_quals<typename std::enable_if<(bool)((std::tuple_size<_Tuple>::value + 1)), _Functor>::type>::type, _CallArgs, typename __cv_quals<_Bound_args>::type ...> [with _CallArgs = std::tuple<double&>; __cv_quals = std::add_cv; _Functor = std::divides<double>; _Bound_args = {double, std::_Placeholder<2>}]’
    /usr/include/c++/11.2.0/functional:540:9:   required from ‘_OIter std::transform(_IIter, _IIter, _OIter, _UnaryOperation) [with _IIter = double*; _OIter = double*; _UnaryOperation = std::_Bind<std::divides<double>(double, std::_Placeholder<2>)>]’
    /build/vigra/src/vigra/test/classifier/test.cxx:535:27:   required from here
    /usr/include/c++/11.2.0/functional:460:13: error: no match for call to ‘(std::_Mu<std::_Placeholder<2>, false, true>) (const volatile std::_Placeholder<2>&, std::tuple<double&>&)’
      460 |             _Mu<typename remove_cv<_BoundArg>::type>()(
          |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /usr/include/c++/11.2.0/functional:363:9: note: candidate: ‘template<class _Tuple> std::_Safe_tuple_element_t<(std::is_placeholder<_Tp>::value - 1), _Tuple>&& std::_Mu<_Arg, false, true>::operator()(const volatile _Arg&, _Tuple&) const volatile [with _Tuple = _Tuple; _Arg = std::_Placeholder<2>]’
      363 |         operator()(const volatile _Arg&, _Tuple& __tuple) const volatile
          |         ^~~~~~~~
    /usr/include/c++/11.2.0/functional:363:9: note:   template argument deduction/substitution failed:
    

    As it seems related to #500, I tried reverting this PR and it indeed works, so they might have been some oversight there. Also pinging @constantinpape thus.

    EDIT: Removed the failure when reverting #500, I had something mixed apparently (I realized I did not get deprecation warnings about binder1st and binder2nd), because running it again that worked (and I did get deprecation warnings).

    opened by ArchangeGabriel 0
  • make check error: Python argument types  ... did not match C++ signature

    make check error: Python argument types ... did not match C++ signature

    Hello,

    Building GIT head (or 1.11.1) on up to date Debian (boost 1.74, python3-dev 3.9.8-1) yields a long list of similar errors on make check.

    ERROR: test1.test_MinimaMaxima
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "/usr/lib/python3/dist-packages/nose/case.py", line 197, in runTest
        self.test(*self.arg)
      File "/dev/shm/VIGRA/vigra/obj.x86_64-linux-gnu/vigranumpy/test/test1.py", line 173, in test_MinimaMaxima
        res = localMinima3D(1-data,neighborhood=26)
      File "/tmp/VIGRA/vigra/obj.x86_64-linux-gnu/vigranumpy/vigra/arraytypes.py", line 1697, in __rsub__
        return ufunc.subtract(other, self)
      File "/tmp/VIGRA/vigra/obj.x86_64-linux-gnu/vigranumpy/vigra/ufunc.py", line 296, in __call__
        o = outClass(shape, dtype=out_dtype, order='C', axistags=axistags, init=False)
      File "/tmp/VIGRA/vigra/obj.x86_64-linux-gnu/vigranumpy/vigra/arraytypes.py", line 535, in __new__
        res = _constructArrayFromOrder(cls, obj, dtype, order, init)
      File "/tmp/VIGRA/vigra/obj.x86_64-linux-gnu/vigranumpy/vigra/arraytypes.py", line 287, in _constructArrayFromOrder
        return _constructArrayFromAxistags(cls, shape, dtype, axistags, init)
    Boost.Python.ArgumentError: Python argument types in
        vigra.vigranumpycore.constructArrayFromAxistags(type, tuple, numpy.dtype[float32], AxisTags, bool)
    did not match C++ signature:
        constructArrayFromAxistags(boost::python::api::object, vigra::ArrayVector<long, std::allocator<long> >, NPY_TYPES, vigra::AxisTags, bool)
    
    ======================================================================
    ERROR: test2.test_resize
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "/usr/lib/python3/dist-packages/nose/case.py", line 197, in runTest
        self.test(*self.arg)
      File "/dev/shm/VIGRA/vigra/obj.x86_64-linux-gnu/vigranumpy/test/test2.py", line 94, in test_resize
        checkAboutSame(i2,image)
      File "/dev/shm/VIGRA/vigra/obj.x86_64-linux-gnu/vigranumpy/test/test2.py", line 63, in checkAboutSame
        difference=np.sum(np.abs(i1-i2))/float(np.size(i1))
      File "/tmp/VIGRA/vigra/obj.x86_64-linux-gnu/vigranumpy/vigra/arraytypes.py", line 1706, in __sub__
        return ufunc.subtract(self, other)
      File "/tmp/VIGRA/vigra/obj.x86_64-linux-gnu/vigranumpy/vigra/ufunc.py", line 296, in __call__
        o = outClass(shape, dtype=out_dtype, order='C', axistags=axistags, init=False)
      File "/tmp/VIGRA/vigra/obj.x86_64-linux-gnu/vigranumpy/vigra/arraytypes.py", line 535, in __new__
        res = _constructArrayFromOrder(cls, obj, dtype, order, init)
      File "/tmp/VIGRA/vigra/obj.x86_64-linux-gnu/vigranumpy/vigra/arraytypes.py", line 287, in _constructArrayFromOrder
        return _constructArrayFromAxistags(cls, shape, dtype, axistags, init)
    Boost.Python.ArgumentError: Python argument types in
        vigra.vigranumpycore.constructArrayFromAxistags(type, tuple, numpy.dtype[float32], AxisTags, bool)
    did not match C++ signature:
        constructArrayFromAxistags(boost::python::api::object, vigra::ArrayVector<long, std::allocator<long> >, NPY_TYPES, vigra::AxisTags, bool)
    [...]
    

    cu Andreas

    opened by ametzler 2
  • vigranumpy build error with sphinx 4

    vigranumpy build error with sphinx 4

    Sphinx documentation generation fails after upgrading to sphinx 4:

    cd /dev/shm/VIGRA/libvigraimpex-1.11.1/obj.x86_64-linux-gnu/vigranumpy/docsrc && /usr/bin/sphinx-build -b html -d /dev/shm/VIGRA/libvigraimpex-1.11.1/doc/vigranumpy/doctrees -D latex_paper_size=a4 -c /dev/shm/VIGRA/libvigraimpex-1.11.1/obj.x86_64-linux-gnu/vigranumpy/docsrc /dev/shm/VIGRA/libvigraimpex-1.11.1/vigranumpy/docsrc /dev/shm/VIGRA/libvigraimpex-1.11.1/doc/vigranumpy
    Running Sphinx v4.2.0
    
    Configuration error:
    There is a syntax error in your configuration file: invalid syntax (conf.py, line 25)
    

    Commenting out the offending stanza in vigranumpy/docsrc/conf.py.in seems to work:

    --- libvigraimpex-1.11.1+dfsg.orig/vigranumpy/docsrc/conf.py.in
    +++ libvigraimpex-1.11.1+dfsg/vigranumpy/docsrc/conf.py.in
    @@ -14,23 +14,6 @@
     from __future__ import division, print_function
     import sys, os, re
     
    -# silent lots of 'arg is not a Python function' warnings
    -import inspect
    -
    -_original_getargspec = inspect.getargspec
    -
    -def _getargspec_workaround(*args, **kw):
    -    try:
    -        return _original_getargspec(*args, **kw)
    -    except TypeError, e:
    -        if str(e).startswith('arg is not a Python function'):
    -            return inspect.ArgSpec([], None, None, None)
    -        else:
    -            raise
    -
    -inspect.getargspec = _getargspec_workaround
    -_getargspec_workaround.__module__ = 'inspect'
    -
     # set the PATH of the current build, so that we don't create
     # documentation for a possibly outdated installation
     vigranumpy_path=r'@[email protected]'
    

    cu Andreas

    opened by ametzler 1
Releases(Version-1-11-1)
  • Version-1-11-1(May 19, 2017)

  • Version-1-11-0(Mar 17, 2016)

    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 vigra::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 vigra::TinyVector.
    • Added vigra::CountingIterator.
    • Minor improvements and bug fixes in the code and documentation.
    Source code(tar.gz)
    Source code(zip)
    vigra-1.11.0-src.tar.gz(49.45 MB)
    vigra-1.11.0-win64-vc14.zip(57.13 MB)
  • Version-1-10-0(Nov 26, 2013)

    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 vigra::MultiArrayView .
    • Added an efficient multi-dimensional vigra::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 vigra::autodiff::DualVector).
    • Added nonlinearLeastSquares() using the Levenberg-Marquardt algorithm and automatic differentiation. More information about the changes can be found on the changelog page.
    Source code(tar.gz)
    Source code(zip)
    vigra-1.10.0-src-with-docu.tar.gz(34.44 MB)
    vigra-1.10.0-win64.exe(11.69 MB)
    vigranumpy-1.10.0.win-amd64.exe(11.65 MB)
Gstreamer plugin that allows use of NVIDIA Maxine SDK in a generic pipeline.

GST-NVMAXINE Gstreamer plugin that allows use of NVIDIA MaxineTM sdk in a generic pipeline. This plugin is intended for use with NVIDIA hardware. Visi

Alex Pitrolo 14 May 11, 2022
A framework for generic hybrid two-party computation and private inference with neural networks

MOTION2NX -- A Framework for Generic Hybrid Two-Party Computation and Private Inference with Neural Networks This software is an extension of the MOTI

ENCRYPTO 10 May 27, 2022
Optimized & Generic ML Filter Runtimes for VapourSynth (with builtin support for waifu2x, RealESRGANv2 & DPIR)

vs-mlrt VapourSynth ML filter runtimes. Please see the wiki for supported models. vsov: OpenVINO-based Pure CPU Runtime OpenVINO is an AI inference ru

私立七森中ごらく部 36 Jun 18, 2022
power-grid-model is a Python library for steady-state distribution power system analysis

Power Grid Model power-grid-model is a Python library for steady-state distribution power system analysis. The core of the library is written in C++.

Alliander Open Source 34 Jun 9, 2022
Time Series Quick Simulator - able to perform time series analysis and to setup validation experiments.

tsqsim Time Series Quick Simulator - able to perform time series analysis and to setup validation experiments. With its somewhat limited plotting capa

null 6 Mar 8, 2022
A easy-to-use image processing library accelerated with CUDA on GPU.

gpucv Have you used OpenCV on your CPU, and wanted to run it on GPU. Did you try installing OpenCV and get frustrated with its installation. Fret not

shrikumaran pb 4 Aug 14, 2021
Tiny OpenEXR image loader/saver library

Tiny OpenEXR image library. tinyexr is a small, single header-only library to load and save OpenEXR (.exr) images. tinyexr is written in portable C++

Syoyo Fujita 507 Jun 23, 2022
Simple C++ one-header library for the creation of animated GIFs from image data.

gif-h This one-header library offers a simple, very limited way to create animated GIFs directly in code. Those looking for particular cleverness are

Charlie Tangora 405 Jun 11, 2022
Video, Image and GIF upscale/enlarge(Super-Resolution) and Video frame interpolation. Achieved with Waifu2x, SRMD, RealSR, Anime4K, RIFE, CAIN, DAIN and ACNet.

Video, Image and GIF upscale/enlarge(Super-Resolution) and Video frame interpolation. Achieved with Waifu2x, SRMD, RealSR, Anime4K, RIFE, CAIN, DAIN and ACNet.

Aaron Feng 7k Jun 27, 2022
Super Mario Remake using C++, SFML, and Image Processing which was a project for Structure Programming Course, 1st Year

Super Mario Remake We use : C++ in OOP concepts SFML for game animations and sound effects. Image processing (Tensorflow and openCV) to add additional

Omar Elshopky 5 Jun 19, 2022
The code implemented in ROS projects a point cloud obtained by a Velodyne VLP16 3D-Lidar sensor on an image from an RGB camera.

PointCloud on Image The code implemented in ROS projects a point cloud obtained by a Velodyne VLP16 3D-Lidar sensor on an image from an RGB camera. Th

Edison Velasco Sánchez 4 Apr 21, 2022
NVIDIA Texture Tools samples for compression, image processing, and decompression.

NVTT 3 Samples This repository contains a number of samples showing how to use NVTT 3, a GPU-accelerated texture compression and image processing libr

NVIDIA DesignWorks Samples 31 Jun 13, 2022
NVIDIA Image Scaling SDK

NVIDIA Image Scaling SDK v1.0 The MIT License(MIT) Copyright(c) 2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved. Permission is hereby grante

NVIDIA GameWorks 346 Jun 23, 2022
Using image classification with ConvMixer

Japanese Handwriting Classification with Fragment Shaders NOTE: This was built and tested with Unity 2019.4.31f1 using built-in render pipeline, there

null 8 Feb 21, 2022
NCNN implementation of Real-ESRGAN. Real-ESRGAN aims at developing Practical Algorithms for General Image Restoration.

Real-ESRGAN ncnn Vulkan This project is the ncnn implementation of Real-ESRGAN. Real-ESRGAN ncnn Vulkan heavily borrows from realsr-ncnn-vulkan. Many

Xintao 219 Jun 22, 2022
DeepI2P - Image-to-Point Cloud Registration via Deep Classification. CVPR 2021

#DeepI2P: Image-to-Point Cloud Registration via Deep Classification Summary Video PyTorch implementation for our CVPR 2021 paper DeepI2P. DeepI2P solv

Li Jiaxin 121 Jun 14, 2022
Insight Toolkit (ITK) is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration

ITK: The Insight Toolkit C++ Python Linux macOS Windows Linux (Code coverage) Links Homepage Download Discussion Software Guide Help Examples Issue tr

Insight Software Consortium 1k Jun 26, 2022
High dynamic range (HDR) image comparison tool for graphics people. With an emphasis on OpenEXR images.

tev — The EXR Viewer A high dynamic range (HDR) image comparison tool for graphics people. tev allows viewing images through various tonemapping opera

Thomas Müller 647 Jun 21, 2022
An open source iOS framework for GPU-based image and video processing

GPUImage Brad Larson http://www.sunsetlakesoftware.com @bradlarson [email protected] Overview The GPUImage framework is a BSD-licensed iO

Brad Larson 20k Jun 20, 2022