mikrocontroller.net

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


Autor: Dex Dexter (dexter)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Aurich (cau) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dex Dexter (dexter)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Aurich (cau) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Christian Aurich (cau) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dex Dexter (dexter)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Aurich (cau) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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.)

Autor: Dex Dexter (dexter)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.