Jetzt nehme ich mir doch mal die Zeit und schreibe ein paar Sätze zu meinem Programmierpraktikum. Das ist nämlich in diesem Semester meine universitäre Hauptbeschäftigung da es sich um den letzten Schein handelt, den ich für die Zulassung zu meinen Diplomprüfungen im Hauptfach, die ich im Spätsommer ablegen will, benötige. In so einem Programmierpraktikum geht es darum in Einzelarbeit im Zeitraum von drei bis sechs Monaten ein größeres Softwareprojekt auf die Beine zu stellen. Ich hatte ja bereits einen Andeutungsblogeintrag verfasst, der Außenstehenden wohl mehr Fragen als Antworten beschert hat. Deshalb hier ein paar ausführlichere Absätze. Werkeln tue ich an diesem Programmierpraktikum, dessen Titel auch gleichzeitig der Titel dieses Blogeintrags ist, schon seit Anfang/Mitte Oktober und ich schau‘, dass ich bis Mitte/Ende Februar alles über die Bühne gebracht habe. Also worum geht’s?
Bei Qualitätssicherungsprozessen in der Industrie geht es oftmals um die schnelle Vermessung von technischen Bauteilen, also beispielsweise wie groß diese sind, wie sie im Raum liegen oder ob eventuell eine Verschmutzung oder Beschädigung vorliegt. Diese Bauteile sind meistens aus geometrischen Primitiven wie Kugeln, Kegeln, Zylinder, Quader oder dergleichen aufgebaut. Will man also Qualitätssicherung oder Bestimmung der geometrischen Eigenschaften eines technischen Bauteils durchführen, so muss man erstmal diese geometrischen Primitiven in den Griff bekommen.
Die geometrische Primitive, mit der ich mich in meinem Programmierpraktikum beschäftige ist der Zylinder. Meine Aufgabe dabei lautet anhand eines Bildes, das von einem realen Zylinder (also zum Beispiel einem Draht oder einem Rohr oder der abgerundete Eckteil einer Tischkante) geschossen wurde, die Raum- und Lageparameter (wie Radius und Ausrichtung) des Zylinders zu ermitteln.
Um diese Aufgabe zu meistern gehe ich wie folgt vor: Ich habe ein reales Foto des Zylinders, den ich vermessen soll sowie Informationen über die Oberflächeneigenschaften des Zylinders wie Rauheit oder Reflektanzeigenschaften. Darüber hinaus stehen mir Informationen über die Anordnung der Kamera, die das reale Foto geschossen hat und die Lichtquelle, die den Zylinder beleuchtet, zur Verfügung. Aus diesen Informationen erstelle ich nun virtuell im Computer ein gerechnetes Bild eines Zylinders, der die selben Oberflächeneigenschaften hat, wie der in der Realität fotografierte und der auf die selbe Weise beleuchtet wird. Da mir jedoch keine Lageinformationen des realen Zylinders zur Verfügung stehen (diese will ich ja bestimmen), entspricht das virtuelle Bild nicht dem geschossenen Foto.
Der Clou bei der Sache ist nun, dass ich an den Lageparametern des Zylinders (genau handelt es sich dabei um fünf zu ermittelnde Parameter: Radius des Zylinders (ein Parameter), Neigung des Zylinders (zwei Parameter) und Verschiebung des Zylinders in der xy-Ebene (nochmals zwei Parameter)) so lange rumprobiere und herumexperimentiere, bis der Zylinder auf dem virtuell erstellten Bild genau so aussieht wie der Zylinder auf dem geschossenen Foto. Zu diesem Zweck gibt es eine „intelligente“ Art des Ausprobierens, die sich Nichtlineare Optimierung nennt.
Um das virtuelle Bild zu erstellen brauche ich zum einen ein Modell der Beleuchtung des Zylinders und zum anderen eine Modellierung der Eigenschaften der Kamera, die das reale Bild geschossen hat. Bei ersterem handelt es sich um mehr oder weniger realistische Modelle zur Berechnung der Reflektanzeigenschaften des Zylinders beziehungsweise dessen Verhalten bei unterschiedlicher Beleuchtung. Bei letzterem wird beachtet, dass eine Kamera in der Realität nicht so arbeitet wie ein Raytracer. Näheres will ich an dieser Stelle jedoch nicht erwähnen, denn das würde schon sehr tief ins Detail gehen.
Ich schau, dass ich, sobald mein Programmierpraktikum abgeschlossen ist, den Quelltext meines Programms und vor allem meine Ausarbeitung, in der die Vorgensweise dann sehr genau beschrieben ist, hier in meinem Blog online stellen kann. Nachdem’s vor ein paar Tagen schon das erste virtuell erstellte Bild in meinem Blog zu bestaunen gab möchte ich an dieser Stelle ein Bild posten, das den aktuellen Stand meiner Arbeit wiederspiegelt. Dabei handelt es sich zwar noch um ein Bild das via Raytracing erstellt wurde, die Kameracharakteristik also noch keine Rolle spielt, das aber schon wesentlich realistischer als mein allererstes Bild aussieht.
