Forum: PC-Programmierung Mustererkennung mit OpenCV


von Alexander (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte folgende Aufgabe mit OpenCV lösen:
das Programm soll verbogene Pins in einem Stecker finden. Stecker ist 
auf einer kleinen Platine aufgelötet. Platine wird händisch in das 
Blickfeld der Kamera (USB-Mikroskop) geführt.
Bild nach der Vorverarbeitung (Median Filter -> Graustufen -> S/W -> 
Morph-OPEN) ist im Anhand zu finden. Wie kann man am einfachsten die 
Pinsreihen identifizieren und Koordinatenachsen an die Reihen anlegen?

Mfg,
Alexander

von Fred (Gast)


Lesenswert?

Hallo Alexander,

legst du die Platine per Hand unter das Mikroskop oder hältst Du diese 
freihändig darunter.

Im zweiten Fall wird es einiges kniffliger.

Für Fall eins legst Du dir ein Muster einer sauberen Platine an, dass 
dann zum Vergleich durch die Bildverarbeitung dient.

Auf die Schnelle könnte es so laufen:

- Aufnahme vom Prüfobjekt anfertigen
- Prüfobjekt oder Muster ausrichten bis diese übereinander passen. Kann 
z.B. über die Kanten des Prüfobjekts erfolgen oder über Markierungen auf 
der Platine
- Bei der Bildung der Differenz bleiben die Unterschiede zwischen 
Prüfobjekt und Muster übrig. Im idealen Fall ist es dein verbogener PIN.
- Gibt es mehrere Unterschiede kannst Du diese mit einer Maske 
ausblenden. Die Maske lässt nur den Bereich frei, in dem sich der 
Stecker befindet.
- Jetzt musst Du nur noch die Position des Fehlers ermitteln (x,y 
Koordinate)

Umwandlung in S/W kannst du machen, wenn z.B. die Beleuchtung Probleme 
macht.

Nur ein bescheidener Vorschlag.

MfG

von Maxx (Gast)


Lesenswert?

Schau dir mal die hough Transformation an.
Damit kannst du unterbrochene und teils verdeckte Linien suchen.
Da deine Pins genau das sind: Punkte einer Linie kannst du in der 
Transformierten lokale Maxima suchen und aus diesen die Geraden 
ermitteln auf denen die Punkte liegen

Das dürfte für dein Beispiel ein Gitternetz werden und ein paar andere 
durch die X.

von Alexander (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

Vielen Dank für eure Vorschläge!
Die Platine wird per Hand auf die Ablage gelegt. Ich kenne die 
Toleranzen von der Bestückungsmaschine und der Konturfräse nicht, und 
würde deswegen davon ausgehen, dass die X/Y-Achsen nicht genau 
ausgerichtet sind. Außerdem hat die Mikroskop-Kamera keine präzise 
Halterung.

Die Linienerkennung der Hough-Transformation habe ich bereits mit 
unterschiedlichen Einstellungen ausprobiert. Leider wurden im Farb- und 
SW-Bildern  zu viele Linien erkannt, sodass man die richtigen nicht mehr 
eindeutig auswählen konnte.

Ich habe jetzt die cvBlob-Bibliothek installiert und mir folgenden 
Ablauf überlegt:

1. mit cvblob die Blobs (Punkteansammlungen) finden. Cvblob liefert 
HU-Momente und Fläche der Blobs.
2.  Blobs nach Fläche aussortieren (große Bereiche ausschließen). Pins 
und einige kleinere Punkte verbleiben
3. evtl. den interessierenden Bereich über Platinenbeschriftungen mit 
Hilfe de HU-Momente grob finden und begrenzen, um Rechenzeit beim Drehen 
zu sparen
4.  das Bild um z.B  +-15 Grad am Mittelpunkt drehen, und nach jeder 
Drehung Koordinaten von blobs durch cvblob finden und prüfen, ob gleiche 
X- und  Y-Koordinaten am häufigsten auftreten (Histogramm) → 
Ausrichtung korrekt
5. Koordinaten der Spalten und Reihen über Histogramm ermitteln, evtl. 
Lochmaske über die Pins legen, und letztendlich mit cvblob Koordinaten 
der Pins ermitteln, bzw. Linien mit Hough-Transformation finden

oder

1-3 wie oben beschrieben, danach
- Koordinaten der kleineren Blobs in ein neues Bild als Punkte 
übertragen
- ein Punkt  aus dem mittleren Bereich auswählen. Punkt A (x,y)
- eine Maske mit zwei Linien erstellen horizontal/vertikal, 
(Schnittpunkt mit  Koordinaten wie beim Punkt A)
- Maske über Bild legen und Bild um den Punkt A drehen, bis die meisten 
Punkte auf den Geraden liegen
5 wie oben beschrieben.
Wenn man aber den verbogen Pin erwischt, dann wird diese Methode evtl. 
nicht mehr richtig funktionieren.In diesem Fall wird nur ein defekter 
Pin gefunden.

Mfg

von chris (Gast)


Lesenswert?

Stell zwei unterschiedliche normale Bilder rein, sowie eines mit 
verbogenen Pins.

von Alexander (Gast)


Lesenswert?

Ich habe leider zurzeit nur dieses Bild, die Pins sind schon leicht 
verbogen, einige „tanzen“ aus der Reihe.

von Chris S. (schris)


Lesenswert?

Ich erkenne nicht mal eindeutig wo die Pins sind.
Ich bezweifle, dass die von dier beschriebene Vorverarbeitung die
geeignete ist, aber wir haben nur dieses Bild.
Die Flaeche unter X34 und das "L" unter REV, diese zwei Blobs
(Groesse, pixel, Flaeche/pixel) sehen eindeutig identifizierbar aus,
und damit kannst du dann das Bild registrieren.
Hast du einmal das Bild registriert, dann kannst du mit ROI arbeiten.

Nimm einfach ein "golden board", vergroessere die pins (morph) etwas 
mehr
als bei dem analysiertem Bild, und vergleiche die Bilder mittels "and".
Dies sollte Position sowie verbogene Pins aufzeigen.
Als Alternative kannst du auch die Pixel bei den Blobs sowie gc der 
Blobs
nehmen und diese Vergleichen.


Wen du es einfach machen willst, kann man auch nur Roundness sowie 
Position checken. Ob die Roi nochmals einen Offset braucht, also zwei 
gute
Pins, und deren Koordinate wird dann gemittelt, sollte anhand von 
einigen
Bilddaten entschieden werden, bzw eventuellen false positive.

http://answers.opencv.org/question/59955/program-that-check-for-the-roundness-of-ellipse/
Hier z.B. ist die excentrity from hu moments der Pins, sollte es nur 
zwei
Parameter geben sollen, welche einfach eingestellt wird, ohne golden 
board.

Was auch gerne gemacht wird, nimm zwei gute Pins, konstruire eine Linie 
zwischen denen und weiter, sowie finde dann die Abweichung der Spitze 
des pins zu deren Anfang. Etwas komplizierter als einfach mit zwei 
Thresholds
zu arbeiten, aber die Ausgangsbilder existieren nicht mehr.

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.