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.
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!