Forum: Mikrocontroller und Digitale Elektronik Oberflächenscanner & -vergleicher


von Dex D. (dexter)


Lesenswert?

Hallo zusammen
Ich bin an einem System, welches Oberflächen Scannt und diese dann mit 
gespeicherten vergleicht. Der Scannvorgang geschieht durch einen 
CDD-Sensor (128x1px). Dieser Schickt dann die Analogwerte zu einem PIC 
uP. Diese Werte werden dann digital gewandelt und in einem 2 
dimensionalen Array abgespeichert. Wie kann ich nun dieses „Bild“ mit 
einem bereits vorhanden vergleichen?
Bin um jede Hilfe froh!

Gruss Dexter

von Christian A. (cau) Flattr this


Lesenswert?

Was soll den verglichen werden? Willst du bestimmte Objekte/Punkte auf 
der Oberfläche erkennen, oder vielleicht die Oberflächenbeschaffenheit 
bzw. das Material erkennen? Man kann sich unter deiner Beschreibung 
allerhand vorstellen.

von Dex D. (dexter)


Lesenswert?

Es soll die gesammte Oberfläche verglichen werden. (Eigenschaften wie 
Aussparungen, Vertiefungen) Diese werden mit zuvor eingescannten 
Oberflächen verglichen und wenn es dieselbe ist eine Funktion 
ausgeführt.

von Christian A. (cau) Flattr this


Lesenswert?

Überlege dir erstmal, welche Kriterien die Unterschiede ausmachen... 
Farbe? Form? Position? Mit deinem Scanner kannst du nun mal nur Bilder 
aufnehmen - deine genannten Eigenschaften jedoch nicht direkt. (Diese 
verstecken sich im Bild)

Dann kannst du dich mit Bilderkennungsalgorithmen daran machen einzelne 
Eigenschaften zu erkennen. Wenn du dann jedes Merkmal eindeutig erkennen 
kannst, geht es zum nächsten Schritt:
Abspeichern der Vorlagen, welche erkannt werden sollen. Dazu musst du 
zusätzlich zur deinen Merkmalen noch Toleranzen speichern... diese 
können durch stupides Probieren herausgefunden werden.

Einfach nur alles in ein Array ablegen und 2 Arrays zu vergleichen wird 
scheitern, da du immer wieder minimale Abweichungen haben wirst. 
Vergleiche doch einfach mal, wie sich die Arrays unterscheiden, wenn du 
zweimal hintereinander das gleiche scannst.

von Karsten (Gast)


Lesenswert?

Das Zauberwort heißt hierbei Kreuzkorrelation. Dann hast Du die 
Verschiebung bestimmt und dann kannst Du die Arrays (unter 
Berücksichtigung der KR miteinander vergleichen)

von Christian A. (cau) Flattr this


Lesenswert?

Karsten schrieb:
> Das Zauberwort heißt hierbei Kreuzkorrelation. Dann hast Du die
> Verschiebung bestimmt und dann kannst Du die Arrays (unter
> Berücksichtigung der KR miteinander vergleichen)

ja, aber mehr als Verschiebungen kann er damit nicht erkennen... und was 
er will ist ja eher eine Art Unterscheidung zwischen verschiedenen 
vorhandenen Mustern...
Das ganze kann funktionieren, muss aber nicht.
Insbesondere wird es vermutlich ziemlich langsam, denn Die Korrelation 
beinhaltet sehr viele Multiplikationen.

Wie immer: Glaskugeln sind nicht sonderlich präzise

von Dex D. (dexter)


Lesenswert?

Christian Aurich schrieb:
> Mit deinem Scanner kannst du nun mal nur Bilder
> aufnehmen - deine genannten Eigenschaften jedoch nicht direkt. (Diese
> verstecken sich im Bild)

Das ist eigentlich schon mal mein erstes Verständnisproblem...
Ich habe ja eigentlich nur die Analogwerte jedes Pixels… Wie wird das 
zum Bild, oder wie speichere ich diese Werte ab?

Die Eigenschaften für eine Einbuchtung ist ja z.B. eine dunklere Fläche…
Also müsste ich irgendwie das Bild so bearbeiten, dass die Unterschiede 
(Eigenschaften) klarer werden. Danach mit einem Vorhanden vergleichen. 
Allerdings kann es ja auch sein, dass eine Verschiebung vorliegt…
Ich habe zwar schon einwenig über gewisse Methoden gelesen, aber ich 
habe im Moment leider noch überhaupt keine Anhaltspunkte, wie ich 
vergehen kann/soll/muss.

von Christian A. (cau) Flattr this


Lesenswert?

dein Array mit den Analogwerten ist ja im Prinzip schon fast ein 
Bitmap... das kann man u.U. schon ohne weitere Umformung so verwenden.

such mal, was du so zu Bilderkennung findest... hier mal ein Anfang:
http://www.kreissl.info/bilderkennung.php

Es gibt afaik schon einige fertige Bibliotheken (auch für 
Mikrocontroller) für die Bilderkennung. Die könntest du recht einfach 
anpassen. Erfordert aber, dass du dich selbst einarbeitest. Eine einfach 
Lösung gibt es nicht.


Nochmal zur Korrelation:

du könntest evtl. 2 Bilder einfach ohne großartige Verschiebung 
miteinander Korrelieren. Dann hast du für jedes Vergleichsmuster einen 
Wert. Der Wert, der am höchsten ist, entspricht dem Muster, das am 
besten passt.
Wenn du es schaffst den Scanner jedesmal halbwegs gleich zum Scan-Objekt 
auszurichten, und wenn die Objekte sich ausreichend unterscheiden, 
müsste das sehr schnell gehen.

Nun denn: Experimentier doch einfach mal ein wenig rum. Wenn konkrete 
Fragen auftauchen, dann melde dich ruhig nochmal. Aber dann bitte mit 
wesentlich mehr Informationen (wie schnell muss es gehen, wie sehen die 
Muster aus, wie sehen die Arrays aus, die du nach dem Scan hast, usw.)

von Dex D. (dexter)


Lesenswert?

Vielen Dank schon mal bis hier hin. Dies hat mir schon weitergeholfe.
Ich werde mich mal einarbeiten und dann konkreter nachfragen bei 
Problemen.

von Karl H. (kbuchegg)


Lesenswert?

Wenn sich deine Bilder hinreichend stark unterscheiden UND du die 
Ausrichtung des Scanners zum Objekt immer fast identisch sicher stellen 
kannst UND sicherstellen kannst, dass die Beleuchtung immer gleich ist 
DANN könnte unter umständen folgendes funktionieren:

Vom aufgenommenen Bild das Referenzbild abziehen. Bei identischen 
Bildern müsste eine einheitliche schwarze Fläche (alle Bildpunkt == 0) 
rauskommen. Man könnte jetzt zb. die Summe der Abweichungen bilden und 
hoffen, dass dieser Wert eine eindeutige Aussage liefert, welches der 
Referenzbilder am besten mit dem aufgenommenen Bild übereinstimmt.

Ob das geht oder nicht, hängt vom Bildinhalt selber ab und was du 
detektieren musst.

Nur so als Idee. Da ist experimentieren angesagt.

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.