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

Bildverarbeitung ittvis IDL und der VIGRA = VIGRAIDL

Aufbau der Schnittstelle

Da es mit IDL recht leicht möglich ist externen C-Code, also Programme, die nicht mit IDL selbst geschrieben wurden, zu laden, wird diese Schnittstelle (CALL_EXTERNAL) im Rahmen der VIGRAIDL ausgenutzt. Sie ermöglicht es, C-konforme Shared Libraries (unter Windows: DLLs, unter MacOSX: dylibs und unter Linux: so) dynamisch und zur Laufzeit an IDL zu binden, so dass die darin enthaltenen Funktionen 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 Scheme Umgebung zur Verfügung stehen sollen. An diese dynamische C-Bibliothek werden dann die entsprechenden IDL Funktionen gebunden, die den Aufruf der eigentlichen C-Routinen vor dem Benutzer verstecken.

Verwendete Datenstrukturen

Eine weitere zentrale Frage ist die Wahl der Repräsentation eines Bilders innerhalb der IDL-Umgebung. Dabei fiel die Wahl auf den eingebauten Datentyp Array (und zwar in seiner zweidimensionalen Ausprägung), wobei die erste Dimension von [0...Breite-1] und die zweite Dimension von [0...Höhe-1] reicht und die Pixel zurzeit alle vom Datentyp FLOAT sind. Repräsentationen von Merkanalbildern werden aber noch sicher folgen...
Die folgende Tabelle zeigt noch einmal übersichtlich alle Funktionsnamen, die diese Schnittstelle IDL über die VIGRA_C bereitstellt:

vigraidl_logo

vigraidl.impex

vigraidl.imgproc

vigraidl.filters

vigraidl.segmentation

vigraidl.morphology

loadimage

saveimage

resizeimage

rotateimage

affinewarpimage

reflectimage

fouriertransform

gsmooth

ggradient

laplacianofgaussian

gsharpening

sharpening

nonlineardiffusion

distancetransform

labelimage

watersheds

cannyedgeimage

differenceofexponentialedgeimage

regionimagetocrackedgeimage

erodeimage

dilateimage

openingimage = erodeimage + dilateimage

closingimage = dilateimage + erodeimage

Anwendungsbeispiele

Einbindung der VIGRAIDL in IDL: Dazu muss zunächst in das Verzeichnis gewechselt werden, und die VIGRAIDL kompiliert werden (erst dadurch kennt IDL alle angebundenen Funktionen)

IDL> CD, "/path/to/vigraidl",CURRENT=old_dir  
IDL> .COMPILE vigraidl

Anschließend kann man zum Beispiel ein beliebiges Bild laden (hier: "blox.gif"):

IDL> img = loadimage(vigraidl_path() + "blox.gif")

Das Bild mit einem Gaussfilter mit sigma=3 glätten und das geglättete Bild in img2 ablegen:

IDL> img2 = gsmooth(img, 3.0)

Das geglättete Bild in den diskretisierten Frequenzraum überführen:

IDL> img3 = fouriertransform(img2)

Da das Bild nichts anderes als ein IDL Array ist, lassen sich selbstverständlich auch alle internen Array-Funktionen darauf anwenden!
Viele weitere Beispiele finden sich in der mitgelieferten "examples.pro" Datei.

Download & Installation

Das aktuelle Paket (Version 0.1.0) kann hier heruntergeladen werden. Es beinhaltet im Ordner vigraidl die VIGRAIDL Anbindung und im Unterordner vigra_c die nötigen VIGRA_C Dateien (siehe oben).Dieses Paket beinhaltet nicht die VIGRA! Diese muss bereits auf dem System installiert sein.

Installationshinweise für MacOS X:

Erstellen der dynamischen Bibliothek (vigra_c.dylib)
Dazu muss das Makefile im Unterordner vigra_c ausgeführt werden. Nach erfolgreichem Aufruf sollte sich eine Datei namens "vigra_c.dylib" im VIGRAIDL-Verzeichnis befinden.

Installationshinweise für Linux:

Erstellen der dynamischen Bibliothek (vigra_c.so)
Das Erstellen einer Linux-Bibliothek wird zur Zeit noch nicht direkt unterstützt, es sollte jedoch kein Problem sein die Anpassungen zu tun, die dafür nötig sind:

  1. Das Makefile im Ordner "vigraidl/vigra_c" so anpassen, dass ein C-kompatibles shared object file im Ordner vigraidl erzeugt wird.
  2. Die vigraidl.pro Datei musss nun nur noch so angepasst werden, dass sie auch nach dieser Datei sucht, falls das Betriebssystem ein Linux ist. Dies müsste in Zeile 2-4 ergänzt werden.

Installationshinweise für Windows:

Erstellen der dynamischen Bibliothek (vigra_c.dll)
Dazu befindet sich im Unterordner "vigra_c\win32-msvc2005" ein Visual Studio Projekt. Hier müssen eventuell noch die Pfade, die zur VIGRA führen, angepasst werden. Danach kann man mit "Projekt erstellen" die DLL erzeugen. Nach erfolgreichem Aufruf sollte sich eine Datei namens "vigra_c.dll" im Release-Verzeichnis befinden. Diese muss nun noch ins "vigraidl" Verzeichnis kopiert werden

Weitere Meilensteine:

  • Einbindung weiterer VIGRA-Funktionen
  • Unterstützung von RGB- und Mehrkanalbildern