MAL-Homepage
Inhaltsverzeichnis
MAL Dokumentation: Bildverarbeitung
1. EINFÜHRUNG
Der Schwerpunkt der Bildverarbeitung in MAL ist die Photogrammetrie,
also die räumliche Vermessung von Objekten oder Subjekten mit Hilfe von
Foto- oder Filmdaten. Darstellung und graphische Aufbereitung von Bildern
hat in diesem Zusammenhang nur untergeordnete Bedeutung und ist daher nur
rudimentär unterstützt.
Es existiert ein eigener Datentyp für Bilder (Frames) in MAL. Dieser Datentyp
enthält ein Schwarz/Weiß-Bild mit einem Grauwertbereich von 0 bis 255 und
(abgesehen vom Speicherlimit) beliebigem Format. Farbbilder kann man als
Verbund von drei Schwarz/Weiß-Bildern in der Form
[ rotbild gruenbild blaubild ]aufbauen. Allerdings existiert derzeit kein Wort für die Darstellung von Farbbildern.
MAL-Homepage Inhaltsverzeichnis
2. BILDDATEN LESEN UND SCHREIBEN
In der derzeitigen Version wird nur das JPEG Dateiformat unterstützt.
Das Lesen eines Bildes von Datei erfolgt mit dem Wort
jpeg>.
Syntax:
dateiname -> [ rot gruen blau ]wobei 'rot', 'gruen' und 'blau' vom MAL-Datentyp frametyp sind und jeweils ein Bild von der entsprechenden Farbkomponente enthalten.
[ rot gruen blau ] dateiname qualität ->Der Parameter qualität bestimmt den Komprimierungsfaktor beim Umwandeln auf das JPEG-Format. Er muss im Wertebereich zwische 0 und 100 liegen (100=höchste Bildqualität und geringste Kompression).
MAL-Homepage Inhaltsverzeichnis
3. FARBFILTERUNG
Alle Worte für die Farbfilterung berechnen aus einem Verbund von drei
Bildern (Rot/Grün/Blau) ein Schwarz/Weiß-Bild mit verschiedenen
Algorithmen denen folgende Überlegung zugrunde liegt:
Ein farbiges Pixel kann als Vektor in einem dreidimensionalen
Vektorraum (Rot/Grün/Blau) verstanden werden. Die jeweiligen
Koordinatenwerte (x,y,z) entsprechen den Farbkomponenten (r,g,b).
Der Betrag des Vektors stellt somit ein Maß für die Lumineszenz dar.
Farbfilterung kann daher im weitesten Sinne als eine Korrelation
zwischen einer vom Anwender forgegebenen Sollfarbe und der
Istfarbe eines Pixels betrachtet werden.
MAL-Homepage Inhaltsverzeichnis
3.1. Worte für die Farbfilterung
color_correlation:
[ rframe gframe bframe ] [ r g b ] -> framecolor_only:
[ rframe gframe bframe ] [ r g b ] -> framecolor_filtering:
[ rframe gframe bframe ] [ r g b ] faktor -> frameDer Verbund [ rframe gframe bframe ] stellt das zu filtende Farbbild dar, und der Verbund [ r g b ] enthält die Sollfarbe.
"bild.jpg" jpeg> [ 255 0 0 ] color_correlationentspricht
"bild.jpg" jpeg> 1 ,Die normale Umrechnung eines Farbbildes in ein Schwarz/Weis-Bild (Lumineszenz=Grauwert) erfolgt mit folgendem Code:
[ 255 255 255 ] color_correlationDas Wort color_only berechnet ebenfalls eine Korrelation zwischen Sollfarbe und Pixelwert, die Lumineszenz des Pixels ist aber irrelevant.
MAL-Homepage Inhaltsverzeichnis
3.2. Kontrast und Helligkeit
Kontrastanhebung entspricht der Multiplikation eines Bildes mit einem
Skalarwert, Helligkeitsanhebung der Addition eines Skalars.
Folgender Code stellt automatisch den maximalen Kontrast für ein Bild ein
(angenommen, die Variable bild enthält ein Bild):
bild dup min - dup max 255 / /Folgender Code berechnet das Fotonegativ:
bild 255 swap -
MAL-Homepage Inhaltsverzeichnis
4. DARSTELLUNG UND VERMESSUNG 4.1. Darstellung
Die Darstellung von Bildern dient primär Kontrollzwecken oder
der interaktiven Vermessung von Bildern. Auf graphische Qualität
wurde daher nicht besonders Wert gelegt. Entwicklungsgeschichtlich bedingt
und aus Gründen der leichteren Portierbarkeit, werden Bilder daher
nur in schwarz/weiß, mit 16 Graustufen dargestellt.
Mit dem Wort frame>screen
wird ein Bild am Schirm dargestellt.
Syntax:
bild ->
Zum Beschriften oder zum Einblenden von Liniengraphiken
in ein Bild, kann das Wort
graphic>frame
verwendet werden. Es ist eigentlich ein Graphiktreiber ähnlich wie
screen oder
printer, nur wird das
Ergebnis auf kein Gerät ausgegeben, sondern in Form eines
Bildes am Stack abgelegt.
Syntax:
graphik breite höhe -> bildBeispiel (Einblenden von Text in ein Bild):
MAL-Homepage Inhaltsverzeichnis
4.2. Vermessung
Es gibt interaktive und vollautomatische Bild-Vermessungsworte.
Zur Kategorie der interaktiven Worte gehören:
frame -> [ [ x1 y1 ] [ x2 y2 ] .. ]Mit frame_get_pixels können die Grauwerte an vorgegebenen Positionen ausgelesen werden.
[ [ x1 y1 ] [ x2 y2 ] .. ] frame -> [ g1 g2 ... ]Die Worte frame_select_lines und frame_select_columns ermöglichen das Anklicken von Zeilen oder Spalten im angezeigten Bild. Nach Verlassen des Bildes werden die Zeilen- bzw. Spaltennummern der gewälten Zeilen oder Spalten sowie deren Grauwertprofile am Stack übergeben
frame -> [ pro1 pro2 ... ] [ pos1 pos2 ... ]
frame -> [ [ x1 y1 ] [ x2 y2 ] .. ]Syntax von frame_auto_spots:
frame step graphic -> [ [ x1 y1 ] [ x2 y2 ] .. ]
frame spanz zanz -> [ [ x11 y11 x12 y12 ... ] [ x21 y21 ..] .. ]
MAL-Homepage Inhaltsverzeichnis
5. PHOTOGRAMMETRIE
Die Photogrammetrie, also die Berechnung von Raumpunkten aus
Bilddaten, ist eine Kombination aus Bildanalyse und Mathematik.
Der Standardablauf lässt sich grob in folgende Teile gliedern:
MAL-Homepage Inhaltsverzeichnis
5.1. Linsenentzerrung
Die Linsenentzerrung ist in der Regel erforderlich, soferne
man nicht mit qualitativ hochwertigen, also teuren Objektiven
arbeitet, oder keine hohen Ansprüche an die Genauigkeit stellt.
Mit der in MAL implementierten Linsenentzerrung kann man
auch mit preiswerten Objektiven ausgezeichnete Ergebnisse erzielen.
Voraussetzung ist, daß man ein präzises Kalibrierraster von
weißen Punken auf schwarzem Grund besitzt. Herstellen läßt
sich solch ein Kalibrierraster, indem man eine Postscript-Datei
erstellt (z.B mit dem Word
postscript_raster)
und bei einer Repro-Firma einen Lithofilm anfertigen läßt. Die Lithofilme
sind normalerweise hochpräzise. Man kann sie mit einem Klebespray
auf eine Glasscheibe (hochwertiges, planes Milchglas verwenden)
kleben und von hinten beleuchten.
Hat man ein formatfüllendes Bild des Kalibrierrasters, so kann
mit frame_grid_spots
die Bildkoordinaten der Rasterpunkte bestimmen. Mit Hilfe einer
zweidimensionalen Regressionsrechnung
(Wort regress_2d)
können den gemessenen Bildkoordinatenwerten Koordinatenwerte eines
virtuellen, entzerrten Bildes zugeordnet werden. Am besten nimmt
man für die Koordinatenwerte des virtuellen, entzerrten Bildes
die Koordinaten der Marken des Kalibrierrasters.
Bild1 zeigt schematisch den Aufbau einer reellen
Kamera mit dem Bildkoordinatensystem xb/yb:
xv = fx(xb,yb) yv = fy(xb,yb)Das so gewonnene mathematische Modell entspricht eine virtuellen Kamera mit den Bildkoordinaten xv/yv:
MAL-Homepage Inhaltsverzeichnis
5.2. Lineare Kalibrierung
Die lineare Kalibrierung ist Voraussetzung, um von zwei oder
mehreren Bildern die Raumkoordinaten von Punkten zu bestimmen.
Bei der linearen Kalibrierung wird pro Kamera ein Parameterset von
14 Parametern erstellt, das im weitesten Sinne die Position und Lage
der Kamera im Raum beschreibt.
Voraussetzung für die lineare Kalibrierung ist die Vermessung
von mindestens 7 Raumpunkten mit bekannten (manuell vermessenen)
Raumkoordinaten (den sogenannten 'Passpunkten'). Man baut für
diesen Zweck meist einen Kalibrierkörper oder Kalibrierahmen. Je
mehr Passpunkte man verwendet, desto genauer wird die Kalibrierung,
weil die Parameter mit einem Least-Square-Verfahren optimiert werden.
Für die Berechnung der Kalibrierparameter wird das Wort
camera_calib_3d
verwendet (siehe auch Kapitel 'Mathematik und Statistik,
Kamerakalibrierung).
Das Wort camera_calib_3d
setzt allerdings voraus, daß man von mehreren Kameras die Bildkoordinaten
der Markierungspunkte richtig zuordnet. Wenn mehrere Markierungspunkte
gleichzeitig im Bild sind (was eigentlich die Regel ist), wird diese Zuordnung
unter Umständen etwas kompiziert. Das Wort
combination>3d versucht
diese Zuordnung automatisch durchzuführen. Bei drei oder mehr Kameras und
entsprechender Messgenauigkeit gelingt diese Zuordnung zu fast 100%, bei
zwei Kameras ist die Fehlerwahrscheinlichkeit höher, bei mehr als drei Kameras
steigt die benötigte Rechenzeit stark an.
Syntax von combination>3d:
[ x1 y1 x2 y2 ... ] calib maxdist -> [ p1 p2 .. ]
[ cx1 cy1 ... ]
MAL-Homepage Inhaltsverzeichnis
5.3. Messung und Bildanalyse
Für die Erfassung von statischen Bildern können Olympus
Camedia Kameras (C-400 oder C-860L) verwendet werden.
Diese können an die serielle Schnittstellen angeschlossen und mit den Worten
"com1" olympus olympus_erase olympus_snapshot "bild.jpg" 1 olympus_getframe "bild.jpg" jpeg> mean >> bild bild 3 1 frame_auto_spots >> bildkoordinatenDie Erfassung von dynamischen Vorgängen ist im MAL-System nicht implementiert. Hat man ein System, das bereits Bildkoordinaten liefert, so können diese vom MAL-Interpreter gelesen und weiterverarbeitet werden. Andernfalls muß man eine Schnittstelle zum Eintransfer der Videobilder implementieren. Entsprechende Hinweise finden sich im Tutorial und im Kapitel Erweiterung.
MAL-Homepage Inhaltsverzeichnis