Forum: Mikrocontroller und Digitale Elektronik Bilderkennung für Referentpunkt


von Sven (Gast)


Lesenswert?

Hallo
Ich arbeite zurzeit an einer einfachen Cnc Platinenbohrmaschine.
Grund der Bastelei ist das Es mir kaum möglich ist das Layout so exakt 
auf die Platine zu bringen bzw. die Platine so exakt zu spannen, dass 
die Cnc alle Löcher trift.

Nun habe ich mir einen eigenen "Gcode" interpretter in Visual Basic 
geschrieben damit bin ich schon mal in der Lage anhand von 3 Punkten auf 
der Platine die Ausrichtung und die exakte Größe zu bestimmen.

Nun würde ich diese drei Punkte gerne mit einer bereits montierten 
Kamera automatisch finden. Problem dabei ich hab keine Ahnung von 
Bilderkennung.
Ich habe versucht anhand von Helligkeitsabweichungen der Rgb Pixel im 
Bild Konturen zu erkennen. Das scheitert aber scheinbar an dem zu 
schwachen unterschied zwischen grün-gelblicher Platine und kupfernen 
Leiderbahnen bzw. das "Rauschen" der Kamera ist zu doll um den 
Unterschied festzustellen.
Dazu kommt das das Bild nicht gleichmäßig ausgeleuchtet ist mittig ist 
es deutlich heller als am Rand.

Was hättet ihr so für ideen zur besseren Bilderkennung?

von Reinhard Kern (Gast)


Lesenswert?

Sven schrieb:
> Was hättet ihr so für ideen zur besseren Bilderkennung?

Die Beleuchtung kannst du rausrechnen oder halt verbessern.

Ansonsten würde ich mal Farbfilter ausprobieren, mit einem roten Filter 
müsste z.B. grünes Material ziemlich dunkel und Kupfer hell erscheinen. 
Im Prinzip kannst du das aber auch im RGB-Farbraum berechnen. Die 
Rechenzeit spielt bei dem Problem ja keine Rolle.

Gruss Reinhard

von Dirk K. (d-k)


Lesenswert?

Diskussionen zu konkreten Bilderkennungsproblemen sind ohne reale Bilder 
fast immer wenig zielführend.

Wenn du uns ein paar Bilder zeigst kann man dir besser helfen.

Gruß,
Dirk

von Sven (Gast)


Angehängte Dateien:

Lesenswert?

Also mal ein Bild ohne Kameralicht, bei dem die Erkennung gerade schon 
ganz gut klappt.
Problem ohne Kameralicht bin ich der Sonne ausgeliefert sprich in 10 
Minuten wird es nichtmehr klappen, und wenn es erst mal dunkel wird, 
geht Garnix mehr.
Aber ich glaube ich sollte die Beleuchtung der Kamera verändern.

Das nächste Problem ist wie bekomme ich aus meinen als dunkler wie 
andere erkannten Pixeln jetzt ein ja das ist der Punkt oder das ist er 
eben nicht
bzw. Ich möchte eigentlich nur den Mittelpunkt eines runden Pads 
erkennen.

von Sven (Gast)


Angehängte Dateien:

Lesenswert?

Und einmal mit den eingebauten Led licht der Kamera. Ich denke das ist 
Unbrauchbar.

von Chloro (Gast)


Lesenswert?

Es gibt da so Buecher : Ich und Bildverarbeitung, oder aehnlich.

von Wolfgang (Gast)


Lesenswert?

Sven schrieb:
> Also mal ein Bild ohne Kameralicht, bei dem die Erkennung gerade schon
> ganz gut klappt.

Die Beleuchtung ist das α&ω der Bilderkennung, wenn du dir nicht einen 
Haufen Arbeit auf der Software-Seite einhandeln möchtest.
Durchlichtbeleuchtung und/oder farbiges Licht (z.B. Komplementärfarbe 
bei Drauflicht) können sehr hilfreich sein.

von Sven (Gast)


Lesenswert?

@Chloro ich glaub es gibt zu allem ein Buch nur habe ich gerade keins. 
Zudem müsste ich verstehen was darin steht. Wird schwirig :)

Okay die Beleuchtung werde ich aufjedenfall umbauen damit ich mit der 
Software weniger Probleme habe.
Mal davon ausgegangen ich erhalte ein brauchbares Bild wie das erste. 
Ich erkenne welche Pixel dunkler sind und somit Kupferfrei. Hat jemand 
einen Tipp wie ich aus einer ansammlung von Pixeln erkenne ob diese im 
Kreis angeordnet sind ?

von Aleks W (Gast)


Lesenswert?

Referentpunkt ?

von Sven (Gast)


Lesenswert?

Ups Referenzpunkt natürlich :)

von Chloro (Gast)


Lesenswert?

Wie erkennt man einen kreis? In dem man das Bild mit einem Kreis faltet, 
dann hat man auch gleich die Position. Das braucht fuer eine 
vernuenftige Geschwindigkeit einiges an Dampf.

von Wolfgang (Gast)


Lesenswert?

Sven schrieb:
> Hat jemand einen Tipp wie ich aus einer ansammlung von Pixeln erkenne
> ob diese im Kreis angeordnet sind ?
Einfacher wird es, wenn du dir das Kamerabild selber anguckst, der 
Software per Mauszeiger o.ä. zeigst, wo die Referenzpunkte ungefähr sind 
und du per Software (Segmentierung über die Helligkeit, Auswertung 
Abstand zu den Lochrändern), nur die genaue Position bestimmst.

von Sven (Gast)


Lesenswert?

In dem man das Bild mit einem Kreis faltet Was kann ich mir darunter 
vorstellen?
Rechenleistung naja ich sag mal so ich hab ja zeit :)

von Chloro (Gast)


Lesenswert?

Gurgel, wikipedia ?

von Hoppla ! (Gast)


Lesenswert?

Im Wesentlichen ist Faltung : Man zieht das zu erkennende Muster ueber 
das Bild multipliziert und integriert. Jeder Punkt erhaelt den Wert des 
integrales. Dort wo das Muster passt bekommt man ein Maximum. 
Idealerweise einen Dirac.

von Sven (Gast)


Lesenswert?

Kannst du mir ein Begriff nennen ?

von Sven (Gast)


Lesenswert?

Klaartext ich Zeichne mir ein Abbild meines Kreises und schiebe diesen 
zeile für zeile über mein bild und gucke wo er passt? Klingt zumindest 
logisch :)

von Wolfgang (Gast)


Lesenswert?

Sven schrieb:
> Kannst du mir ein Begriff nennen ?

Faltung, Mustererkennung

von STK500-Besitzer (Gast)


Lesenswert?

Sven schrieb:
> bzw. Ich möchte eigentlich nur den Mittelpunkt eines runden Pads
> erkennen.

Bastel dir lieber Passermarken ins Layout (nicht ins Leiterbahn 
Geflächt, sondern z.B. Montagebohrungen). Das sind gerade Linien und 
wesentlich einfach zu detektieren.
Dann solltest du mal an der LED-Helogkeit drehen.

von Dirk K. (d-k)


Lesenswert?

Sven schrieb:
> Hat jemand
> einen Tipp wie ich aus einer ansammlung von Pixeln erkenne ob diese im
> Kreis angeordnet sind ?

Eine mögliche Methode (Chloro hat ja schon eine weitere erwähnt):
- Zuerst musst du entscheiden welche Pixel zusammengehören. Dazu kannst 
du connected component labeling 
https://en.wikipedia.org/wiki/Connected-component_labeling benutzen
- Danach hast du ein Set von "Ansammlungen von Pixeln". Eine einfache 
Methode um einen gefüllten Kreis zu erkennen ist dann die Anzahl der 
Randpixel zu zählen, zu quadrieren und durch die Anzahl aller Pixel zu 
teilen. (Ein perfekter Kreis minimiert diese Formel).

Wie Wolfgang würde auch ich dir empfehlen eher eine lokale Hilfe als 
eine globale Suche zu implementieren.

Gruß,
Dirk

von wendelsberg (Gast)


Lesenswert?

Sven schrieb:
> Ich möchte eigentlich nur den Mittelpunkt eines runden Pads
> erkennen.

Den kannst Du nicht erkennen, den gibt es ja als Objekt nicht.

Die Erkennung des Kreises um das Pad herum wird durch die Leiterbahnen 
erschwert, die zum Pad gehen.

Viel einfacher waere es, wenn Du schon einen Mittelpunkt eingeaetzt 
haettest, z.B. 0,3mm.

wendelsberg

von Sven (Gast)


Lesenswert?

Vielen dank erstmal für die vielen Ideen :)
Ich werd michmal daran versuchen.
Ach so und ne ich möchte nicht nach einem Pad im Layout suchen wie die 
bilder zeigen, sondern schon nach runden Pads ohne Leiterbahn dafür vllt 
mit einem Punkt in der mitte. Mal sehen was ich später am besten 
erkennen kann.

von Davis (Gast)


Lesenswert?

Das Stichwort ist Hough-Transfornmation:

http://de.wikipedia.org/wiki/Hough-Transformation

Kann sogar ein Wald- und Wiesencontroller in akzeptabler Zeit 
abarbeiten. Einfach hier im Forum nach Beiträgen suchen.

von Sven (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe mich dazu Endschloßen den Bildbereich zu verkleinern, um die 
Suche etwas schneller laufen zu lassen. Anstelle eines Abbildes des 
gesuchten Kreises verwende ich gerade nur 10 punkte welche jeweils im 
passenden Muster 1(Grün) oder 0(Nicht Grün) sein sollten.
Damit ist es mir jetzt möglich den Kreis zu suchen, während die Platine 
an der Kamera vorbeifährt.
Nochmals Besten dank für eure Inspiration.

Die Genauigkeit liegt übrigens gerade mit meinem Testloch bei +-1 Pixel 
also ungefähr 0,3mm damit könnte ich schon leben. Ich werde jetzt mal 
eine Platine mit Testlöcher machen und dann mal sehen, wie das so 
klappt.

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
Noch kein Account? Hier anmelden.