MIN-Fakultät
Fachbereich Informatik
Szenenanalyse und Visualisierung (SAV)

Bildverarbeitung mit der VIGRA in anderen Programmiersprachen als C/C++

Vorwort zur VIGRA

Der Name VIGRA steht für "Vision with Generic Algorithms". Es handelt sich hierbei um eine, hauptsächlich von Ullrich Köthe entwickelte, neuartige C++ Bibliothek zur Bildverarbeitung, die das Hauptaugenmerk auf Generizität und Wiederverwendbarkeit der Algorithmen und Datenstrukturen legt. Dies wird mit mit Hilfe des in C++ enthaltenen Template-Mechanismus' erreicht, der bereits in der wohl bekannten C++ Standard Template Library (STL) zum Einsatz kommt. Die STL - so könnte man sagen - stand Pate für diese Bibliothek.

Dies alles führt schlussendlich dazu, dass sich VIGRA-Komponenten einfach an die eigenen Bedürfnisse anpassen lassen, ohne dabei auf die hohe Geschwindigkeit von C++ verzichten zu müssen. Um noch mehr zu erfahren bietet sich ein Besuch der VIGRA Homepage an!

Motivation für Schnittstellen zu anderen Programmiersprachen

Die VIGRA ist eine reine C++ Bibliothek. Dies hat sicherlich einige sehr positive Aspekte, wie z.B. die Geschwindigkeit der Algorithmen, die hervorragende Ausnutzung der Template-Mechanismen und des objektorientierten Programmierstils, der die VIGRA recht verständlich macht.

Dennoch gibt es auch Gründe, die gegen eine Wahl der Sprache C++ sprechen, wie z.B. die fehlende Interaktivität durch die nötigen Code-Compile-Zyklen oder die mäßige Unterstützung von anderen Paradigmen außer dem imperativen und dem OO-Modell. Zudem ist C++ nicht gerade als High-Level-Sprache berühmt, weshalb nach wie vor viele höhere Wissenskonzepte in anderen Sprachen beschrieben werden.

Kurz und knapp zusammengefasst ergibt sich, dass alleine schon der erste Punkt (die fehlende Interaktivität) die Anbindung an eine andere Sprache rechtfertigen kann. Daher wird auch zurzeit an einer verbesserten spezialisierten Python-Schnittstelle der VIGRA gearbeitet.

Aufbau der Bibliotheken

Da es mit vielen (interaktiven) Programmiersprachen recht leicht möglich ist, dynamische C-Bibliotheken zur Laufzeit zu laden, wird diese Schnittstelle im Rahmen der VIGRA Erweiterungen ausgenutzt. Sie ermöglicht es, C-konforme Shared Libraries (unter Windows: DLLs, unter Mac OS X: dylibs und unter Linux: so) dynamisch zur Laufzeit an die jeweilige Programmiersprache zu binden, so dass die enthaltenen Funktionen mit der von C bekannten Geschwindigkeit benutzt werden können.
Da die VIGRA allerdings nur für den Import- bzw. Export von Bildern eine Shared Library anbietet, musste als erste Zwischenstufe ein C-Wrapper für die VIGRA-Funktionen geschrieben werden (VIGRA_C), die innerhalb der angebundenen Programmiersprache zur Verfügung stehen sollen. An diese dynamische C-Biblitohek werden dann die entsprechenden Funktionen der jew. Programmiersprache gebunden, die den Aufruf der eigentlichen C-Routinen vor dem Benutzer verbergen.

Neu: Jetzt auf Github

Ihr könnt bei der Entwicklung der einzelnen VIGRA-Schnittstellen helfen! Fork'd einfach eine Schnittstelle eurer Wahl von meiner GitHub Seite.

C C++

 

Common Lisp
vigracl_logo

 

 

Racket
vigracket_logo

 

 

excelvis IDL
vigraidl_logo

 

 

Matlab
vigramatlab_logo

 

 

Java
vigraj_logo

 

Aufruf und Integration der Funktionen der dynamischen Bibliothek
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

.

.

Einbinden und Konvertieren der C-Zeigern zu 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

.

.

 

 


Archiv (veraltete Versionen)

Hier sind noch die älteren und mittlerweile veralteten Versionen der VIGRA-Schnittstellen zu finden. Dies dient lediglich der Vollständigkeit. Die Versionen sollten nicht mehr eingesetzt werden!