MIN-Faculty
Department of Informatics
Scene analysis and visualization (SAV)

Digital image processing using the VIGRA and other languages than C/C++

Introducing VIGRA

VIGRA stands for "Vision with Generic Algorithms". It's a novel computer vision library that puts its main emphasize on customizable algorithms and data structures. By using template techniques similar to those in the C++ Standard Template Library, you can easily adapt any VIGRA component to the needs of your application, without thereby giving up execution speed. VIGRA was originally designed and implemented by Ullrich Köthe. To get more information, visit the VIGRA Homepage!

Motivaton of the interfaces to other programming languages

As already mentioned, the VIGRA is a pure, template driven C++ library. This may be the language of choice in many cases, e.g. if you need very fast algorithms that can be written using the concrete object-oriented paradigma and the wonderful templates c++ offers.

On the other hand, there are enough reasons not to use C++, e.g. that it is not an interactive language because of the necessary code&compile-cycles and it is very hard to use C++ when you want to use another programming paradigma as the functional paradigma (of e.g. Lisp & Scheme) Additionally, C++ is still quite a low-level language and therefore may not be the language you want to use for high-level task where LISP would be preferable.

As a summary, we can say that just the first point alone (the missing interactivity) is strong enough to motivate the use of the image processing algorithms that VIGRA offers. For the same reason, Python became that popular, and there is also some work going on a specialized python interface beside the interfaces described here

General structure of the libraries

The easiest way to intergrate C/C++ code written in other programming languages is a generic C-interface to a C-dynamic library at runtime. That is why we also use this interface for all libraries presented herein. This interface allows us to load C-conform "shared libraries" (for Windows: DLLs, for Mac OS X: dylibs and under Linux: so) at any time interactively and to call the included functions directly.
Unfortunately, the VIGRA only offers a dynamic library for the import- / export-facilities of pictures. Because of this. the first step is to abstract from the C++ image processing functions of the VIGRA to a C-dynamic-library-wrapper (VIGRA_C) containing everything we want to call from the other languages. This dynamic library is the "glue component" between the VIGRA on the on side and the other languages on the other side, that will hide the low level C-calls and translate the functions into readable names.

New: now on Github

You are kindly invited to collaborate in the development of the interfaces. Just fork whatever project you like on my GitHub page.

C C++

 

Common Lisp
vigracl_logo

 

 

Racket
vigracket_logo

 

 

excelvis IDL
vigraidl_logo

 

 

Matlab
vigramatlab_logo

 

 

Java
vigraj_logo

 

Integrate and call the functions of the dynamic library
vigra_c_logo

 

  • vigra_loadimage_c
  • vigra_saveimage_c

 

  • vigra_resizeimage_c
  • vigra_rotateimage_c
  • vigra_reflectimage_c
  • vigra_affinetransformimage_c
  • vigra_fouriertransform_c

 

  • vigra_gsmooth_c
  • vigra_ggradient_c
  • vigra_laplacianofgaussian_c
  • vigra_gsharpening_c
  • vigra_sharpening_c
  • vigra_nonlineardiffusion_c
  • vigra_distancetransform_c

 

  • vigra_labelimage_c
  • vigra_watersheds_c
  • vigra_cannyedgeimage_c
  • vigra_differenceofexponentialedgeimage_c
  • vigra_regionimagetocrackedgeimage_c

 

  • vigra_erodeimage_c
  • vigra_dilateimage_c

.

.

Convert C-Pointer to VIGRA-BasicImage views
vigra_logo

Import/Export of images:

  • importImage
  • exportImage

General image processing:

  • resizeimage
  • rotateimage
  • affinetransformimage
  • reflectimage
  • fouriertransform

Common Filters:

  • gaussian-smoothing
  • gaussian-gradient
  • laplacianofgaussian
  • gaussian-sharpening
  • sharpening
  • nonlineardiffusion
  • distancetransform

Segmentation algorithms:

  • labelimage
  • watersheds
  • cannyedgeimage
  • differenceofexponentialedgeimage
  • regionimagetocrackedgeimage

Morphological algorithms:

  • erodeimage
  • dilateimage

.

.

 

 


Archive (deprecated versions)

Here you find the deprecated older versions of the VIGRA-Intercafes to other languages. Plese note that this archive in only existing for sake of completeness. Do not use any of the deprecated versions!