Prof. J. Walter - Informationstechnik, Mikrocomputertechnik, Digitale Medien Softwaredoku
Hochschule Karlsruhe Logo Informationstechnik
Swimming Pixel Kamera-Ortung
Winterersemester 2020
rasa1013@hs-karlsruhe.de
gech1023@hs-karlsruhe.de

Software Dokumentation

Einführung in openCV

Um das Bildverarbeitungsprogramm openCV in Microsoft Visual Studios zu nutzen, ist hier eine auführliche Anleitung beigefügt, in der man step by step durch die Einrichtung der Bildverarbeitungsbibliothek geführt wird.

data/Anleitung Inbetriebnahme SP_KO.pdf

Der gesamte Quellcode mit den Header- und Quelldateien ist im Kapitel Quellcode hinterlegt.


1. Hauptprogramm


Wie schon in dem Kapitel ausgewählte Lösungen beschrieben, wurde eine "dummy main" geschrieben, die das Hauptprogramm simulieren soll. In dieser main wird die Klasse CCameraDetection und die ausgelagerte Funktion mouseKlick implementiert. Die in den Klassen enthaltenen Funktionen werden ausführlich in diesem Kapitel erläutert. In der main werden zunächst Parameter, wie die Framegröße, Kameraauswahl, die Matrixgröße und der Skalierungsfaktor vom Benutzer definiert.

main Parameter

Anschließend wird ein Objekt der Klasse CCameraDetection erstellt. In diesem Objekt befinden sich alle nötigen Parameter und Funktionen für die Bildverarbeitung.

Die setUpCamera-Funktion dient zur Positionierung und Ausrichtung der Kamera, sowie zur Kalkulation der Perspektiventransformation. Hier muss der Benutzer das zu detektierende Feld im Bildbereich eingrenzen. Hilfreich dabei könnte sein, dass alle Pixel dafür eingeschaltet werden.

Nachdem die Kamera ausgerichtet ist, können nun einzelne Swimming Pixel nacheinander detektiert werden. Hierfür wird die detect-Funktion in einer Dauerschleife aufgerufen.

Flussdiagramm main :

Flussdiagramm main

2. setUpCamera Funktion

In der setUp Funktion wird der Benutzer mit Hilfe der Konsolenausgabe Stück für Stück aufgefordert, den zu detektierenden Bereich einzugrenzen.

Konsolenausgabe

Der Benutzer wird aufgefordert eine Fluchtlinie einzuzeichnen, um damit die Perspektiventransformation zu ermöglichen. Nachdem eine Fluchtlinie per Mausklick in dem SetUp Fenster erstellt wurde, wird automatisch die zweite Fluchtlinie passend zur ersten erstellt, indem diese gespiegelt wird. Das setzt vorraus, dass die Kamera mittig positioniert werden sollte.
Im Anschluss wird nach der oberen Begrenzungslinie gefragt, welche ebenso per Mausklick erstellt wird. Diese sollte auf die Position des am weitesten entfernten Pixel gelegt werden.

Nachdem der Bildbereich von dem Benutzer definiert wurde, werden die Eckpunkte des Trapez berechnet und im Anschluss mit der warpPerspective-Funktion in eine Draufsicht-Perspektive umtransformiert.

Perspektive Transformation

Flussdiagramm setUp-Funktion :

Flussdiagramm setUp1
Flussdiagramm setUp2

3. detect Funktion


In der neu erstellten Perspektive sollen nun die Swimming Pixel erkannt werden. Dafür wird von der Vogelperspektive ein Threshold (Schwellenwert) image erstellt. Mit Hilfe des Trackbars können nun die HSV Werte verändert werden, um die Pixelfarbe zu detektieren.

Um später eine bessere Positionierung des Pixels zu erhalten, wird mit der openCV Funktion dilate die erkannten Objekte aus dem Threshold image aufgefüllt, um im Falle des erkannten Pixel, einen geschlossenen Kontur zu erhalten. Da jedoch ebenso Objekte aufgefüllt werden, welche nicht erkannt werden sollen, wird mit der openCV Funktion erode dieselbe Größe abgetragen. Im Anschluss wird erneut mit der erode Funktion von der Kontur abgetragen und wieder mit der dilate Funktion aufgetragen. Dadurch erhält man bei richtiger Anwendung der Funktionen eine realitätsgetreue Kontur des Pixel in dem Threshold image.

Bereinigung des Threshold image

Nach der Bereinigung des Threshold image wird mathematisch der Mittelpunkt der erkannten Fläche errechnet und in Form eines Kreises in dem Originalbild ausgegeben. Mit Hilfe dieses Punktes wird später im Programm die Position des Pixels in der Matrix bestimmt.

Die Matrix wird in dem zuvor vom Benutzer festgelegten Bildbereich erstellt. Dabei werden mit einer for-Schleife die horizontalen Linien und mit einer weiteren Schleife die vertikalen Linien der Matrix erzeugt. Bei der Erzeugung der Linien wird gefragt, ob sich der Mittelpunkt innerhalb der Linie und der vorherigen liegt. Somit wird die Position des Pixel innerhalb der Matrix bestimmt.

finale Ausgabe

Flussdiagramm detect-Funktion :

Flussdiagramm detect1
Flussdiagramm detect2

Ausgabe der Position des Pixels in der Matrix :

Position des Pixel in der Matrix



 

  Mit Unterstützung von Prof. J. Walter Winterersemester 2020