Entwickler-Ecke

Multimedia / Grafik - Objekterkennung in einem Bild


daywalker0086 - Do 03.07.14 17:23
Titel: Objekterkennung in einem Bild
Hallo Community,
ich habe ien Frage bzg. Bilderkennung.
Um was es geht:
Ich habe eine 7 Segmentanzeige die getestet werden soll. Also jedes Segment wird angesteuert und sollte leuchten.
Dies kann in einem dunklen Raum ohne Fremdlicht passieren. Dies soll mit einer Kamera aufgenommen werden und wenn es nicht leuchtet oder fälschlicherweise 2 leuchten soll ein Fehler ausgegeben werden.

Kann man das mit Delphi realisieren?
Hat jemand Tips oder links wo man was dazu findet oder sowas schonmal umgesetzt? Der Abstand und die Position der Anzeige zur Kamera ist immer gleich (+/-1mm).


Delete - Do 03.07.14 18:56

Die Segmente leuchten NIE gleichzeitig, sondern werden einzeln angesteuert.
Stromersparnis -> Zeitmultiplex

http://de.wikipedia.org/wiki/Segmentanzeige

http://www.rodrigo-groener.de/7SegmentAnzeige/
http://www.rodrigo-groener.de/7SegmentAnzeige/bcd_seg_a.html

Bei ELEKTOR wurde mal eine Schaltung vorgestellt, die in einem Flugzeug-Cockpit eine 7-Segment-LED-Anzeige überwachte.


jaenicke - Do 03.07.14 19:01

Das sollte relativ einfach machbar sein. Man legt fest in welchen Bereichen die einzelnen Segmente liegen (da reicht ja auch ein Teil davon) und geht dann mit ScanLine einer TBitmap alle Pixel dieser Bereiche durch und berechnet deren Durchschnittswert. Liegt er unter einem bestimmten Wert, ist das Segment aus, liegt er darüber, ist es an.


daywalker0086 - Fr 04.07.14 09:02

user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
Die Segmente leuchten NIE gleichzeitig, sondern werden einzeln angesteuert.
Stromersparnis -> Zeitmultiplex


Na das ist nicht allgemein gültig. Erstens werden die Segmente in dieser Anwendung nicht gemultiplext sondern einfach linear angesteurt.
Zweitens ist es ein Testaufbau zum testen derselben. Wenn durch eine Lötbrücke am Widerstandsnetzwerk zwei Eingänge gebrückt sind, dann leuchten zwei obwohl nur eine Leuchten sollte, dieser Fehler muss erkannt werden.


Nersgatt - Fr 04.07.14 09:11

Nur so eine Idee, aber ein ganz anderer Ansatz um das Problem zu lösen.

Wenn 2 Elemente gleichzeitig leuchten, müsste die Gesamthelligkeit ja höher sein. Also müsstest Du nur einen Dämmerungsschalter bauen, der ab einer bestimmten Helligkeit ein Signal (1/0) ausgibt. Das könntest Du in den Rechner geben und entsprechend reagieren.
Es gibt z.B. von Vellemann Boards, die Du per USB anschließen kannst. Dort kannst Du sowohl analoge Signale, als auch digitale Signale reingeben und in Delphi auswerten.

Ein anderer Ansatz wäre, die Stromaufnahme des Bauteils zu messen. Die müsste ja höher sein, wenn 2 Elemente leuchten. Da gibt es Multimeter mit USB-Schnittstelle. An die Werte kommt man sicher auch mit einem Delphiprogramm ran.


Delete - Fr 04.07.14 09:51

Wenn das nur ein Testaufbau in einer dunklen Kammer ohne Fremdlicht ist, dann kann man das mit einem LDR (light-dependent resistor, in Fensterkomparatorschaltung) - evtl. hinter einer Streulichtscheibe (Opalglas, Milchglas) - machen.
Bei einem leuchtenden Segment ist der Widerstand annähernd gleich - bei deutlicher Abweichung: FEHLER!

Übrigens:
Jede LED kann nicht nur Licht aussenden, sondern auch als Fotodiode arbeiten:
Licht senden - Spiegel reflektiert Licht - Licht empfangen
http://www.merl.com/reports/docs/TR2003-35.pdf


daywalker0086 - Fr 04.07.14 12:41

Es ging mir darum es mit einem Bild auszuwerten um diesen Weg einfach mal zu probieren. Es wird zur Zeit mit einer für die Wellenlänge besonders empfindlichen Photodiode und einem Transimpedanzverstärker gemssen.

Übrigens, wenn 2 Segmente lecuhten und die Lötbrücke hinter dem Widerstand ist, wird der Strom nicht größer, er teilt sich auf und die Segmente leuchten einfach dunkler.


Nersgatt - Fr 04.07.14 13:41

Geht es Dir denn darum, genau zu erkennen, welche Segmente leuchten? Oder soll nur erkannt werden, dass 2 Elemente leuchten?
Im 2. Fall würde ich das Bitmap durchgehen, und anhand eines Schwellwertes definieren, ob das Pixel als "Leuchtet" oder "Leuchtet" nicht gezählt wird. Nun musst Du nur noch definiere, wie viele Pixel maximal den Status "Leutet" haben dürfen, damit Du davon ausgehst, dass nur ein Segment leuchtet.


jfheins - Sa 05.07.14 01:25

Ich habe schon viel Bildverarbeitung gemacht, und würde dir eine andere Sprache empfehlen. Konkret Python oder Matlab. Beide kommen bereits mit umfangreichen Computer Vision Funktionen daher.

Ansonsten: Für jedes Segment eine Bitmaske anfertigen, mit dem Bild ver-und-en und den Mittelwert über das Bild berechnen. Dieser sagt aus, wie stark dieses Segment leuchtet.


Lakeri - Mi 16.07.14 11:39

Bei Bildverarbeitung arbeite ich eigentlich meist mit Python. Das ist recht zuverlässig und eignet sich wirklich ganz gut, muss ich zustimmen!