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
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.
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.
Ü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.
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)
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
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.
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.)
Vielen Dank schon mal bis hier hin. Dies hat mir schon weitergeholfe. Ich werde mich mal einarbeiten und dann konkreter nachfragen bei Problemen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.