left Lastenheft Pflichtenheft Design Realisierung Dokumentation right
 
Grundlagen
 
Im Gegensatz zu einer Standardapplikation sollte dieses Produkt als DLL (Dynamic Link Library) entwickelt werden. Diese wird von einem anderen Programm aufgerufen und führt dann die geforderten Aufgaben durch. Die Entwicklung einer DLL hat den Vorteil, dass keine neue grafische Benutzeroberfläche entwickelt werden muss, da das Hauptprogramm diese bereits enthällt. Das folgende Bild zeigt die Aufrufkonvention der zu entwickelnden DLL.
 
 
  Zum Vergrössern klicken    
 
 
Das Hauptprogramm Optimas benötigt für den Zugriff auf die DLL Makros, welche in der dem Programm eigenen Programmiersprache geschrieben werden. Da Optimas als Träger auch bereits existierende Funktionalität zur Verfügung stellt, muss sich um grundlegendes wie beispielsweise das Öffnen und Speichern von Bilddaten nicht weiter gekümmert werden. Durch die enge Verknüfung mit dem Programm Optimas ist zwar die Portierbarkeit sehr stark eingeschränkt, aber es erlaubt auch eine schnellere Einarbeitung in die eigentliche Aufgabe.
 
 
Use Case Modell
 
Das Use Case Modell der Infrarotbildanalyse gibt einen Überblick über die existierenden Funktionen und Steuerungsprozeduren, welche exportiert nach aussen werden. Das folgende Bild repräsentiert das Modell.
 
 
  Zum Vergrössern klicken    
 
 
Am Anfang der Analyse hat der Nutzer dieser Entwicklung einige Eingaben zu erledigen. Wichtig für den Verlauf ist, dass er die richtige Bildsequenz zur Analyse auswählt. Da mehrere Analysemethoden zur Verfügung stehen, muss man sich für eine entscheiden. Für die Infrarotbildanalyse stehen zwei Bildunterteilungsmethoden zur Verfügung. Dadurch muss wiederum eine für die Analyse gewählt werden. Alle Einstellungen werden über verschiedene Dialoge, welche über Optimasmakros gesteuert und verwaltet werden, durchgeführt. Die DLL wird nur drei Funktionen zur Verfügung stellen, welche von den Makros aus aufgerufen werden können. Dies sind Die Bildeinteilung, die Bildanalyse sowie die Fouriertransformation. Die letzte Funtkionalität steht noch nicht zur Verfügung, da die Einsatzmöglichkeiten derzeit den Rahmen der Entwicklung übersteigen würden.
 
 
Module
 
Da die vorgegebene Programmiersprache C nur ein eingeschränktes Objektorientiertes Design ermöglicht, wurde auf die alte Verfahrensweise des strukturierten Designs mit Hilfe von verschiedenen Modulen zurückgegriffen.
Für die Analyse mussten folgende Module entwicklet werden:
  •  Bildunterteilung
     
  •  Bildverbesserung
     
  •  Morphologische Operationen
     
  •  Bewegung
     
  •  Kennzeichnung
     
  •  Objektanalyse
     
  •  Statistik
     
 
 
Das Module für die Bildeinteilung enthält Funktionen, welche für die Unterteilung eines Bildes in unterschiedliche Regionen ermöglicht. Dies kann mit Hilfe von bestehenden Konfigurationsdateien oder per Hand durchgeführt werden. Für die weitere Analyse wird diese Einteilung als Schablone verwendet. Für die Einteilung der Bilder in unterschiedliche Regionen wird der Bresenham-Algorithmus angewendet. Mit diesem wird um die gewünschte Region ein Umriß gelegt. Um den nun erzeugten Umriß zu füllen, wird der Scanline Algorithmus eingesetzt. Das folgende Bild zeigt den Scanline Algorithnmus in Aktion.
 
 
  Zum Vergrössern klicken
 
 
 
Das Modul für die morphologischen Operationen wird unter anderem auch für die Bildverbesserung eingesetzt. Hier kommen Operationen wie Dilation, Erosion, Opening und Closing zum Einsatz. Durch den richtigen Einsatz können Störungen die bei den zu analysierenden Bildern auftauchen weitesgehend entfernt werden.
 
 
 
Im Modul Bewegung werden die sehr wichtigen Berechnungen durchgeführt, um Bewegungen des Gesamtbildes zu erkennen und von den weiteren Berechnungen auszuschliessen. In diesem Modul werden aber nicht nur Szenenbewegungen berechnet, sondern auch Bewegungen einzelner Objekte in der Szene.
 
 
 
Das Kennzeichnungsmodul enthält alle Funktionen zum Markieren der erkannten Objekte. Hierfür wird die sogenannte 8-er Nachbarschaftsbeziehung als Grundlage genutzt.
 
 
 
Das Module zur Objektanalyse wird eingesetzt um die einzelnen Merkmale der erkannten Objekte zu extrahieren, welche für eine Klassifizierung dieser notwendig sind.
 
 
 
Statistische Berechnungen sind hier vor allem die Berechnungen, die Auskunft über die Helligkeit, und somit die Wärme jedes erkannten Objektes geben. Hier sind ebenfalls Funktionen zum Abspeicherne der gesammelten Objektdaten integriert.
 
 
 
Ein Modul zur Klassifizierung ist nicht enthalten, ist aber anhand der ermittelten Daten jedes Objektes möglich zu implementieren. Eine gute Klassifizierung würde anhand eines neuronalen Netzes eingebetet werden, welches die gesammelten Daten als Basis für seine Entscheidungen nutzen könnte. Dies war aber nicht Bestandteil und Ziel der Aufgabe und wurde unter anderem deshalb nicht implementiert.
 
 
  Zum Vergrössern klicken
 
 
 
Datenstrukturen
 
Für die Infrarotbildanalyse sind verschiedene Datenstrukturen zu entwicklen. Diese helfen bei der Objektbeschreibung, nehmen Daten für Statistiken der Objekte oder ganzer Regionen auf oder enthalten so einfache Dinge wie die Koordinaten von einzelnen Pixeln des Strukturelements.
 
 
 
Die umfangreichste Struktur OBJECT enthält alle Daten eines erkannten Objekts. Statistische Angaben werden hier ebenfalls gespeichert, da eine Trennung in zwei Strukturen als nicht praktikabel angesehen wird.
 
 
 
  typedef struct ObjectTag
{
   LONG lArea;
   LONG lWidth;
   LONG lHeight;
   LONG lPerimeter;
   FLOAT fCircularity;
   LONG lAlignment;
   LONG lMinX;
   LONG lMinY;
   LONG lMaxX;
   LONG lMaxY;
   LONG lMinGrey;
   LONG lMaxGrey;
   LONG lCoGX;
   LONG lCoGY;
   FLOAT fMeanGrey;
   LONG lMaskNumber;
} OBJECT;
 
 
 
 
Die STAT Struktur ist trotz der Zusammenführung von OBJECT und STAT in die OBJECT Struktur noch verfügbar, aufgrund der Möglichkeit statistische Daten über die einzelnen Bildregionen sammeln zu können.
 
 
 
  typedef struct StatisticTag
{
   FLOAT fAverage;
   FLOAT fStandardDeviation;
   FLOAT fVariance;
   FLOAT fSkew;
   FLOAT fKurtosis;
   FLOAT fMedian;
   FLOAT fMin;
   FLOAT fMax;
   FLOAT fNumberOfElements;
} STAT;
 
 
 
 
Das Bildunterteilungsmodule benötigt zwei Strukturen, welche zur Beschreibung der gesamten Region benutzt werden. Dies sind die EDGE-Struktur, zur Beschreibung der Linienpunkte zwischen zwei Endpunkten einer Linie, sowie die POINT_DATA-Struktur. Diese erlaubt die genaue Zuordnung einzelner Punkte zu den berechneten Linien oder Kanten.
 
 
 
  typedef struct EdgeTag
{
   LONG lMaxX;
   LONG lMaxY;
   LONG lMinX;
   LONG lMinY;
   FLOAT fGradient;
} EDGE;
  typedef struct PointTag
{
   LONG lX;
   LONG lY;
   LONG lEdgeNumber;
} POINT_DATA;
 
 
 
Farbbilder werden für die Visualisierung von erkannten Objekten als beste Lösung betrachtet. Dies erzwingt aber die Spreizung der einkanaligen 8bit Bilder in dreikanalige 24bit Bilder. Für diesen Fall wird die RGB_OPT-Struktur verwendet. Die bereits existierende Microsoft Struktur für die Darstellung von RGB Farbbildern kann nicht genutzt werden, da die Reihenfolge der eingesetzten drei Farben unter Optimas nicht mit dieser übereinstimmt.
 
 
 
  typedef struct ColOptTag
{
   BYTE Blue;
   BYTE Green;
   BYTE Red;
} RGB_OPT;
 
 
 
 
Dateispezifikation
 
Der Dateiname der Datei, welche alle gesammelten Objektdaten einer Sequenz beinhaltet, lautet "Object.xls". Der Name der Datei, welche die Konfigurationsdaten für die geometrische Bildunterteilung enthält ist "maskN.ini", wobei das N die Maskennummer spezifiziert. Das folgende Bild zeigt die Konfigurationsdatei-Spezifikation. Es werden nur Dateien, die diese Spezifikation einhalten akzeptiert.
 
 
  Zum Vergrößern klicken
 
 
 
Die Datei ist eine typische ini-Datei. Es werden bestimmte Sektionen und Schlüsselwörter eingesetzt, um ein schnelles Verständnis der vorliegenden Datei zu gewähren. Die Anzahl der integrierten Sektionen ist auf drei begrenzt. Jede Sektion enthält ihrerseits bestimmte Einstellungen. Die folgende Tabelle definiert alle integrierten Sektionen und Schlüsselwörter.
 
 
 
Sektion Schlüsselwort Definition
Points number gibt die Anzahl der enthaltenen Eckpunkte an
Scattering factor gibt den Streuungsfaktor für die Objekterkennung an
Coordinate x0 Die X-Koordinate des ersten Eckpunktes
  y0 Die Y-Koordinate des ersten Eckpunktes
  xN Die X-Koordinate des n-ten Eckpunktes
  yN Die Y-Koordinate des n-ten Eckpunktes