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
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
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.
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
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.