Folgendes Problem: Ich möchte verschiedene Würfel in einer 2D-Ebene erkennen in welcher Reihenfolge die nebeneinander liegen. Zur Vorstellung: ( also quasi Fussballfeld – ich schaue aus dem Tor und möchte Würfel die auf dem Platz stehen erkennen) / | Kamera< \ | / Jeder Würfel hat an allen vier Seiten eindeutige Strichcodes die ich auslesen kann. Die Kamera (1 Pixel-Reihe) fährt nun einmal vertikal ab und ich habe alle Strichcodes in einem Array ( Würfel können NICHT überlappen, aber direkt nebeneinander stehen) Mein Problem ist nun folgendes: Über Kreuzkorrelation könnte ich eigentlich die Würfel einfach finden - aber durch die Schrägstellung der Würfel gibt es eben Verzerrungen. Wie würdet ihr das einfach machen ? Mein Problem ist, dass ich nicht für jede „Schrägstellung“ einmal kreuzkorrelieren will ... das ist zu aufwändig - gibt es andere Ideen ? Schönen Abend - Tommy P.S. es sind ca 1000 Würfel - daher brauche ich ne bessere Lösung als einfach nur Testen ;)
:
Verschoben durch Admin
Was für ein Code wird denn benutzt? Also sind nur die schwarzen balken, oder auch die abstände dazwischen informationstragend? Kannst Du im Barcode start- und endemarker unterbringen? Es ist ja so, daß die verzerrung pro würfel konstant ist und wegskaliert werden kann.
Ich würde mich mal schlau machen, wie eigentlich die Laserscanner an den Supermarktkassen den Barcode finden und auswerten. Das hat mich immer schon fasziniert, wie die die Striche an den Produkten ziemlich zuverlässig finden, ganz gleich in welcher Lage das Produkt über das Glas gezogen wird.
Hi, danke für die Antworten. Ja, die Verzerrung ist linear - also eine Stauchung oder Streckung Anfangs und Endmarker sollen keine Vorhanden sein. Der Code ist ein Strickcode - das einlese ist problemlos möglich - geht auch schon - habe nun die Werte im Array drin - das Problem ist jetzt das zuordnen - von Hand geht das recht gut - aber das soll jetzt die Maschine machen ;)
Strichcode meinte ich ;)
>Ich würde mich mal schlau machen, wie eigentlich die Laserscanner an den >Supermarktkassen den Barcode finden und auswerten. Diese Barcodes haben Start- und Stop-Zeichen. Weiterhin ergibt der Code auch nur in eine Richtung Sinn. Bei "Wetten Dass" waren mal ein paar Kinder, die den Strichcode lesen konnte... In der MC waren zu Apple][-Zeiten Programme als Strichcode abgedruckt. Dazu konnte man dann auch einen Strichcode leser erwerben. Die Information dieser Strichcodes lag nur in der Breite der Balken: dicker Balken "1", dünner Balken "0". Leider hat Tommy noch nichts zum Aufbau seines Strichcodes geschrieben... Einfachstes Prinzip: Breite des ersten Balkens bestimmen. Diese Breite als "Standard" definieren. nächste Balkenbreite mit dem Standard vergleichen: Ist die Breite (in etwa) gleich, dann handelt es sich um die gleichen Zeichen, ist die Breite kleiner als der Standard, handelt es sich um eine 0, ist sie größer handelt es sich um eine 1; Dann muss man noch die vorherigen Bits irgendwie modifizieren, da sich auch gleichzeitg der Standa geändert hat... Man sollte also zu Beginn eines Strichcodes eine Art Synchronisationsbit haben...
hi, haltet euch bitte nicht so sehr an den "Strichcodes" auf - war nur die einfachste Möglichkeit das Bildlich zu beschreiben: Ich hab ein letztlich Array : ..00100101101000010101011110100101... und will da ein Muster finden sagen wir 10101 *ist alles lang genug um Eindeutig zu sein - macht hieraus bitte kein Problem* das Problem ist aber durch die Schrägstellung wird das leicht verzerrt. Peakbreite kann ich NICHT bestimmen, (sind quasi deltapeaks) - aber den Zwischenraum. Bsp: 10101 wird dann zu 1001001 - klar - aber ich finde eben keinen einfachen, schnellen Weg das durchzutesten - weil hier sieht das übersichtlich aus - nachher sind das ca 100.000 Werte - wobei 10101 eben einen Bereich von 5 Stellen oder 10.000 Stellen einnehmen kann - also müsste ich alle Skalierungen testen - so mache ich es auch gerade. Geht - das ist aber eben sehr langsam.... Tommy
Keine Ahnung wie Effizient das sit, aber hast du es mal mit Regulären AUsdrücken deiner Lieblingsprogrammiersprache versucht?
Wenn du definierte Start und Endzeichen hast könntest du ja in einem ersten Durchlauf nur mal diese suchen. Da diese ja relativ kurz sein sollten im vgl. zum gesamten Strichcode sollte sich die Streckung in einem wesentlich kleineren Rahmen abspielen als du oben geschrieben hast. Dazu könntest du dann deinen jetzigen Algorithmus verwenden der dann aber meintwegen nur noch 100 Mögliche breiten durchlaufen muss. Im 2. Schritt sind dir dann schon alle Objekte und deren Verzerrung bekannt und du kannst die jeweiligen Bereiche im Array mit der errechneten Streckung auswerten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.