Bilderkennung für Referentpunkt

Gast #3357820
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?
Gast
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
Gast
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.
Angehängte Dateien:
Gast
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.
Gast
@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 ?
Gast
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.
Gast
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.
Gast
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.
Gast
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 :)
Gast
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.
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
Gast
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
Gast
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.
Gast
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.
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.