mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Mustererkennung - könnt Ihr mir Tipps geben ( ggf. aus nur Stichworte zum Suchen)


Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
Autor: Hans Mayer (hansilein)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;)

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Strichcode meinte ich ;)

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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...

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Ahnung wie Effizient das sit, aber hast du es mal mit Regulären 
AUsdrücken deiner Lieblingsprogrammiersprache versucht?

Autor: lp85 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.