Hallo,
ich möchte mir ein einfaches Programm schreiben, dass normale
(zweidimensionale) Barcodes in einem Bild (in digitalisierter Form,
also z.B. als GIF, JPEG etc.) lokalisieren und dekodieren kann.
Für das eigentliche Dekodieren habe ich mir bereits einen Algorithmus
überlegt, der eigentlich auch ganz gut funktionieren müsste.
Das grössere Problem ist für mich daher momentan: Wie kann ich
effizient herausfinden, OB in einem Bild ein Barcode enthalten ist und
vor Allem WO? So auf die Schnelle ist mir bisher jedenfalls kein guter
Algorithmus dazu eingefallen. Hat Jemand eine Idee, wie ein solcher
"Barcode-Lokalisierungs-Algorithmus" arbeiten könnte? (Zumindest grob
das Grundprinzip erklären)
http://www.barcodeman.com/faq/2d.php
wenn ich mir die 2d barcodes dort anschaue (falls du solche meinst)
sehe ich recht eindeutige merkmale die bei jedem gleich sind und nach
denen man auch suchen können sollte.
Wenn man mal davon ausgeht, wie die in den Kassentisch eingebauten
optisch-mechanischen Scanner funktionieren - dann müsste man dieses
Prinzip per Software nachbilden können.
In diesen Scannern ist erstmal eine Optik, die eine Laserdiode und eine
Fotodiode (oder ein ganzes Array) über halbdurchlässige Spiegel so
miteinander koppelt, dass die Fotodiode immer genau dorthig "guckt", wo
der Strahl auftrifft.
Der Strahl wird mit einem rotierenden und einem feststehenden
Polygonspiegel in einer beinahe stochastisch wirkenden Bahn "wild" in
der Gegend herumgeschwenkt, so dass er alle potentiell im Sichtfeld
vorhandenen Barcodes in den verschiedensten Winkeln überstreicht.
Der Datenstrom aus der Fotodiode wird mittels DSP kontinuierlich
analysiert. Man macht sich also nicht die Mühe, den Barcode erst zu
suchen, sondern man erkennt on-the-fly , ob man zufällig einen getroffen
hat ...
Frank
>Der Datenstrom aus der Fotodiode wird mittels DSP kontinuierlich>analysiert. Man macht sich also nicht die Mühe, den Barcode erst zu>suchen, sondern man erkennt on-the-fly , ob man zufällig einen getroffen>hat ...
Und das macht jeder DSP einfach so? Dazu braucht man kein Programm?
*Gelächter!*
Hier im Forum gab es mal eine Anfrage zwecks Erkennung von 2D-Barcodes
auf kleinen Probenbehältern. Da gab es auch das Problem, dass der Code
nicht "gerade", sondern auch mal etwas "schief" erkannt werden mußte.
Das Suchprinzip läuft so ab, dass man das Bild (was man eher mit einer
Kamera als mit einer Photodiode aufnimmt) nach Linien durchsucht.
Dabei nutzt man den Umstand aus, dass Linien aus mehreren Punkten
bestehen.
Man guckt sich also ein Raster von z.B. 3x3 Punkten an. Wird darin mehr
als nur ein Punkt gefunden, wird in der Richtung dieser "Linie" weiter
gesucht.
Wenn man dann eine Linie gefunden hat, kann man in senkrechter Richtung
dazu den Barcode suchen...
Zumindest sucht man so Linien....
Es gibt tolle Bücher zum Thema "Bildverarbeitung"...
Die Scannerkassen arbeiten aber mit Lasernetzen und die Kamera reagiert
nur auf diese Licht per Filter. Jetzt muß man sich nur vor Augen führen,
wo der Laser eine Linie erzeugt und dessen "Echo-Signal" auswerten. Das
könnte man vermutlich auch mit einzelnen Photoarrays machen.
>Und das macht jeder DSP einfach so? Dazu braucht man kein Programm?>*Gelächter!*
Ja, irres Gelächter.
Nein, das macht der DSP nicht ohne Programm, aber - zumindest bei den
Tischscannern - stochert der DSP nicht in den Pixeln herum und sucht
nach Linien, sondern analysiert kontinulierlich das serielle Signal aus
dem Fotoempfänger.
Es darf natürlich bezweifelt werden, ob dieses Prinzip für die Analyse
von bereits vorhandenen Bildern wirklich geeignet ist, da gehe ich mit -
man könnte es aber mal versuchen.
Wenn der OP einfach nur eine fertige Lösung will - das Web ist voll von
passenden SDKs. Es könnte ja aber sein, dass er neugierig ist und sowas
selber programmieren will, dann kann man ja mal verschiedene Wege
ausprobieren ...
Frank
Eine eigene Frage?
Dieser Thread ist über 22 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.