Im Folgenden wird aufgezeigt, welche Lösungsvarianten verwendet
wurden, um die Herausforderungen der Lokalisierung der Swimming
Pixel mit Hilfe der Kamera-Ortung zu bewältigen. Da ein Großteil des
Projekts die Software betrifft, wird in dem Kapitel
Softwaredoku
näher auf das Programm eingegangen.
Ziel unserer Gruppe war
es das Bildverarbeitungsprogramm mit den diversen Funktionen als
Klasse auszulagern, sodass man es einfach und unkompliziert in das
Hauptprogramm implementieren kann.
Die Smartphone-Kamera
wurde mit der Freeware iVCam mit dem Laptop gekoppelt. Durch die App
konnte der Laptop auf die Smartphonekamera zugreifen und die Bilder
der Objekte einlesen. Im Laufe des Projekts lief jedoch die
Testversion ab und es konnten keine 4k Videos mehr übertragen
werden, weshalb wir die Vollversion erworben haben.
Letztendlich ist man aber nicht an die App gebunden. Es gibt
genügend Möglichkeiten die Smartphone-Kamera mit dem Laptop zu
koppeln. Wie die App auf dem Smartphone und dem Laptop eingerichtet
wird, ist in folgender PDF beschrieben.
data/Anleitung Inbetriebnahme SP_KO.pdf
Für die Erprobung der
Software wurde eine "dummy-main" geschrieben, in der die Klasse
CCameraDetection implementiert wurde. Für den Versuchsaufbau wurden
keine Swimming Pixel verwendet unter anderem aufgrund der
Covid19-Situation und zum anderen, weil es für die Ausführung des
Projekts Kamera-Ortung nicht notwendig war. Somit konnte unsere
Gruppe unabhängig von den anderen Teilgruppen arbeiten.
Im Laufe des Projekts kristallisierten sich zwei
größere Herausforderungen heraus, für die wir eine Lösung
finden mussten, um die genaue Lokalisierung der Swimming Pixel per
Kamera zu ermöglichen.
1. Perspektiven-Transformation
Um eine
genaue Lokalisierung zu ermöglichen ist es wichtig die Flucht
des Kamerabildes mit zu berücksichtigen. Wenn man die Swimming Pixel
mit einer Drohne aus der Vogelperspektive filmen würde, würde diese
Problemstellung wegfallen. Da die Pixel mit einer Kamera auf einem
Stativ aufgenommen werden, ist eine Perspektiven-Transformation
deshalb unumgänglich.
Zu Beginn wurde die Lösungsalternative, eine mathematische
Umrechnung des Welt-Koordinatensystems auf das Koordinatensystem
innerhalb des Frames, in Betracht gezogen. Jedoch wurde schnell
klar, dass dies einen sehr hohen Rechenaufwand zur Folge haben
würde, wenn alle Parameter mit berücksichtigt werden sollen.
Durch weitere Recherchen und Einarbeitung in das
Bildverarbeitungsprogramm openCV wurde eine Möglichkeit
herausgearbeitet, um die Perspektive der Kameraaufnahme
umzuwandeln, dass mit wenigen Benutzereingaben (siehe
Softwaredoku) eine
Vogelperspektive der Fläche, wie im nachfolgenden Bild, entsteht.
Kameraperspektive
Transformierte Perspektive
Nach der Transformation der Kameraperspektive
wird eine nxn-Matrix über das neu erstellte Frame
gelegt. Somit ist eine eindeutige Detektion der Positionen der
Swimming Pixel möglich.
2. Detektierung der
Swimming Pixel
Um die Position der einzelnen Pixel
im Wasser zu ermitteln, muss zunächst der Pixel von der Kamera
erkannt werden. Wir haben uns für die Detektionsmethode der
Farberkennung entschieden. Hierbei werden die LED-Ringe der
einzelnen Swimming Pixel im Wasser nacheinander eingeschalten.
Anschließend wird mit Hilfe des HSV (Hue Saturation Value)
Farbraums der Farbwert, die Farbsättigung und der
Hellwert des Pixels aus dem Kamerabild gefiltert. Übrig bleibt das
weiße detektierte Objekt, der Swimming Pixel und der schwarze Hintergrund.
Abb. HSV Farbraum, Quelle:
wikipedia.org
Mit Hilfe einer einprogrammierten Control-Trackbar
können die HSV-Werte so angepasst werden, sodass der Pixel im Wasser
erkennbar wird. Anschließend sind Funktionen in dem Programm
implementiert (siehe auch
Softwaredoku),
die die Pixel so ausfiltern, dass das Objekt besser erkannt wird.
Nachdem der Pixel aus dem Bild gefiltert ist, wird der Mittelpunkt
des LED-Rings berechnet und die Position in der Matrix durch einen
Kreis auf dem Bild angedeutet. Mit Hilfe der Koordinaten des Punktes
in dem Frame wird die Position in der Matrix bestimmt und an das
Hauptprogramm gesendet.
|