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?
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
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
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.
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.
@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 ?
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.
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.
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.
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 :)
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
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
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.
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.
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.
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.