Bildverarbeitung\Algorithmus - accefa/doku GitHub Wiki

Wir sehen zwei Varianten für einen möglichen Algorithmus um den Korb zu orten vor (Eigenentwicklung und Verwendung einer Library mit Objekt Erkennung). Die Entwicklung des Algorithmus soll weitgehende sprachunabhängig erfolgen, also auf konzeptioneller Ebene. Versuche werden jeweils in Java oder Python durchgeführt.

Für die Entwicklung sind gute Testdaten notwendig. Daher wird nun bereits die endgültige Kamera bestellt um entsprechende Fotos zu knipsen. Die Fotos sollen bereits möglichst realitätsnahe sein. Bei den Fotos ist also auf folgendes zu achten:

  • Abstand von Kamera zu Korb
  • Korb in mehreren Positionen (Verschiebung auf der horizontalen Achse)
  • Belichtung (Starke Belichtigung von 4 Scheinwerfer von oben, Licht von Fenster daneben, Raumlicht)

Diese drei Parameter sind sehr wichtig. Der erste Parameter können wir fix für alle Fotos einstellen. Der Abstand kann sich je nach Konstruktion noch ändern, sollte aber nicht massgebend sein. Es ist sicher gut, wenn es mehrere Fotos gibt, wo der Korb an unterschiedlichen Positionen liegt. Für den Algorithmus aber ist vorallem die Belichtung wichtig. Hier sollten wir möglichst viele Testdaten genrieren.

Eigenentwicklung

Mittels eigenen Überlegungen wollen wir mit Hilfe von bewährten Image-Librarys eine eigene Kanten- bzw. Objekterkennung implementieren.

Schritt 1: Zuschneiden (crop)

Das Bild wird zu Beginn gleich im richtigen Format zugeschnitten. Es sollen nur der Teil behalten werden, welchen man auch braucht. Das hat Vorteile: Weniger Bilddaten (+Performance), Konzentration aufs Wesentliche (+einfachere Implementierung).

Schritt 2: Kontrast

Da ein markanter Kontrast zwischen Korb und Wand vorhanden ist, können wir den Effekt noch verstärken. Und so noch deutlicher von "hell" und "dunkel" unterscheiden.

Schritt 3: Graustufen

Das ganze Bild wird in ein Graustufen Bild umgewandelt. Jedes Pixel hat dann r=g=b. Alle Werte sind gleiche und stellt somit eine Graustufe dar.
Es ist möglich zwischen 8,16, und 32 Bit Greyscale auszuwählen. 8 bedeutet, dass die Farbe (die Graustufe) mit maximal 8 Bit bestzt werden kann (256) usw. Weniger Bit bedeuten weniger Memory, jedoch auch schlechtere Qualität. daher arbeiten wir vorerst mit 32.

Schritt 4: Pixel-Linie Analyse

Es wird eine Linie analysiert. Dort wo eine längere Sequenz von dunklen Werten also tiefe RGB Werte enthalten ist, sollte der Korb stehen.

Bemerkungen

Schritt 4 kann optimiert werden in dem mehrere Linien angeschaut werden. Und dann ein Mittelwert berechnet wird. Das grösste Problem ist der Schattenwurf. Dies verfälscht das Resultat. Die Lichter sollten von oben kommen und sommit sollte nur unten Schatten sein. Somit könnten wir die oberste Kante analysieren.

Helligkeit des Bildes ändern bringt nichts, denn digital wird das ganze Bild

Offen

Was ist mit Sättigung? Was ist mit Weissabgleich? Was ist mit Helligkeit? Was ist mit Schärfen?

Verwendung einer Library mit Kanten Detektierung bzw. Objekt Erkennung