-
-
Erfahrener Benutzer
Robotik Einstein
Hallo,
ein Stückchen bin ich doch weiter gekommen in diesem Neuland.
Als erstes hab ich mal die Testdaten verschärft:
Bild hier Bild hier
Links Energisparlampe mit dem üblichen funselig sparsamen Ergebnis.
Rechts Tageslicht am Morgen, es ist fürs Auge in Natura nicht so dunkel wie auf dem Foto, aber richtig hell ist es doch noch nicht.
Jetzt hab ich mir einen Weissabgleich eingebaut. Aber ich gleiche nicht die Bilder ab, sondern das Farbkriterium zum Suchen der Markierung. Das spart immens viel Rechenzeit, wenn später bewegte Bilder verarbeitet werden. Also statt das Verfälschte Weiss aus allen Bildern raus zu rechnen, rechne ich einfach die Verfälschung ins Farbkriterium hinein.
Ich arbeite im RGB Raum und berechne für alle 3 Farbkomponenten:
AnzuwendenderKriteriumsWert:=sqrt(ReinerKriteriums wert*Weisswert)
Das reine, abstrakte Kriterium habe ich aber nicht, ich habe nur Bilder von Farbfolien ohen genaue Farbdefinition. Brauche ich auch nicht. Ich errechne den Reinen Kriteriumswert, wieder für alle Farbkomponenten.
ReinerKriteriumswert:=GemessenerKriteriumswert²/Weisswert
Voila, das funktioniert. Nachdem ich nichts über die Berechnung eines Weissabgleichs gefunden habe, habe ichs mal so versucht. Sollte jemand Info darüber haben, wie mans wirklich macht, würde mich das schon noch interessieren. Vielleicht hab ich da auch einen groben Denkfehler drin. Aber der sollte sich bei Tests zeigen.
Zunächst habe ich das Verfahren an beiden Bilder getestet und das hat mal funktioniert. Das ist nicht aussagekräftig, darum habe ich eine sogenannte Kreuzvalidierung vorgenommen. Das ist ein Verfahren, um statistische Parameter auf Unabhängigkeit von der Stichprobe zu prüfen. Klingt nur kompliziert, ist aber sehr einfach. Ich erhebe die reine Kriteriumsfarbe in einem Bild und wende sie mit Weissabgleich im anderen Bild an. Umgekehrt ebenfalls.
Hier das Ergebnis:
Bild hier Bild hier
Auch das ist schön, passt.
Aus der Verarbeitung kann ich noch Zwischenschritte zeigen:
Verwendet habe ich diesmal nicht die Winkel zwischen den Farbvektoren (Kriterium - und alle Pixels) sondern die Distanz. Die errechnet sich bekanntlich aus den Komponentendifferenzen nach Pythagoras.
Bild hier Bild hier
Die Distanzen der Pixels zum Kriterium, das aus dem jeweils andern Bild stammt, aber im selben Bild abgeglichen wurde, ist dargestellt. Weiss stellt eine Distanz von 0 dar. Die Grauwerte wurden noch linear ins Dunkle transponiert, damit man die Unterschiede auch sieht. Die Eindeutigkeit des Verfahrens ist gut erkennbar.
Zum Vergleich hab ich ein Bild mit Farbwinkeln bearbeiten lassen:
Bild hier
Wieder zeigt Weiss Nähe an. Das ist diesmal ein Cos von 1. Auch hier wurden die Grauwerte linear verschoben. Aber, was man sieht: Die Reflexionen auf dem Fussboden sind gefährlich wenig unterschieden vom Kriterium. Glanzlichter und Schatten sind sehr bunt, auch wenn man es auf dem Bild nicht sieht. Zusätzlich gibt es gerade in diesen Bereichen grauenhafte Artefakte der Kompression. Die Erkennung der Farbscheibe hat dennoch fehlerfrei funktioniert, aber so eindeutig wie mit den Differenzen ist das Ergebnis hier nicht.
Das nächste Bild zeigt das Clustern der Pixels nach dem Winkelwert.
Bild hier
Jedes Pixel erhält als Wert nun den Mittelwert aus seiner Umgebung. Der Einfachheit wegen ist die Umgebung quadratisch. Die Grösse wird so gewählt, dass sie in die Abbildung der Farbscheibe rein passt. Dieses Verfahren hat zwei grosse Vorteile. 1.: wird so die Mitte der Scheibe gefunden, und 2. werden eventuell bestehende Fehler durch die Mittelwertbildung rausgerechnet. Vereinzelt oder in zu kleinen Gruppen vorkommende Pixels mit grosser Nähe zum Farbkriterium werden dennoch ignoriert, weil sie zu keinem nennenswerten Mittelwert beitragen.
Aber der Zeitbedarf ist schrecklich. Man fährt mit einer Matrix durch eine Matrix und rechnet. Im nächsten Bild ist ein Trick zu sehen, wie der Zeitbedarf drastisch reduziert wird.
Bild hier
Man setzt einen Grenzwert, ab dem ein Pixel einen Mittelwert bekommt. Das sind die nicht schwarzen Stellen. Das beschleunigt das Verfahren stark. Dafür lohnt der Weissabgleich sehr. Die relevanten Differenzen sind dadurch gering und man kann das Limit knapp setzen.
Soweit mal eine erste Beschreibung. Detailfragen und Info zu Alternativen sind sehr erwünscht. Und ich hoffe auch, dass ich damit auch ein wenig Mut zur Bilderkennung mache. Viele Navigationsaufgaben lassen sich so leichter lösen, als mit US/IR.
grüsse,
Hannes
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen