Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Scan (zylindrisches Objekt) aus Streifen zusammensetzen (https://www.delphipraxis.net/194537-scan-zylindrisches-objekt-aus-streifen-zusammensetzen.html)

hanvas 4. Dez 2017 16:04

Scan (zylindrisches Objekt) aus Streifen zusammensetzen
 
Hallo,

kann mir jemand einen Hinweis auf ein Verfahren/Algorithmus/Buch/White-Paper/Open-Source geben, mit dessen Hilfe einzelne Streifen eines Bildes zu einem großen Bild zusammengesetzt werden können. Dabei will ich ausdrücklich kein Panorama zusammensetzen, sondern im Grunde das Gleich machen wie führere Handscanner, bei denen man eine Seite in mehreren Streifen gescannt hatte und durch die Software wieder zusammengesetzt wurde.

Konkret will ich die Oberfläche von Gerätebatterien scannen. Zu diesem Zweck habe ich mir eine kleine per USB steuerbare Vorrichtung gebaut, die im Wesentlichen aus zwei angetriebenen liegenden Walzen und einer Kamera besteht. Auf den Walzen liegt die zu scannende Batterie und wird durch diese gedreht. Lotrecht dazu hängt eine Kamera mit fest eingestellter Brennweite/Focus - welche genau über der höchsten Linie des liegenden Zylinders liegt.

Die ursprüngliche Idee war die, immer genau ein einen Pixel breites Bild aufzunehmen (bzw. einen ein Pixel breiten Ausschnitt des durch die Kamera erfassten Bildes zu speichern) und diese Streifen am Ende zusammen zu setzen. Durch verschiedene Beschränkungen und/oder mechanische Probleme (liegende Batterie wird nicht immer exakt gleich weit je Zeiteinheit gedreht) funktioniert das nur einigermaßen. Deshalb gehe ich jetzt dazu über, überlappende Streifen mit etwas größerer Ausdehnung zu erfassen.

Bin für jeden Hinweis dankbar.

Ha-Jö

* Geschwindigkeit der Walzen, Frame-Rate der Kamera, Synchronisationsfehler zwischen beiden, manchmal auch die Verarbeitungsgeschwindigkeit der Software

jobo 4. Dez 2017 22:02

AW: Scan (zylindrisches Objekt) aus Streifen zusammensetzen
 
OT: Wieso 2 angetriebene Walzen? Reicht nicht 1?

M.E. ist das doch eine Panoramafunktion oder?

Ich würde das wahrscheinlich gar nicht programmieren, sondern entsprechende Software unter Linux solange konfigurieren, bis es geht.Die Besonderheit wäre ja vermutlich das "exotische" Format/Seitenverhältnis der Rohdaten.
Google Schnellschuss: https://wiki.panotools.org/Panorama_..._in_a_nutshell

Und:
Ich weiß nicht wie gut die meisten Batterien so auf ihrem Minuspol stehen, aber da würd ich sie drauf stellen und die Drehachse damit vertikal haben. Funktioniert dann auch (mechnisch) für 9V Batterien und ich vermute weniger Wackler an der Blechnaht.

mensch72 4. Dez 2017 22:37

AW: Scan (zylindrisches Objekt) aus Streifen zusammensetzen
 
=> die 360° Rotation teile man in 120 Steps, heißt man "erfasst" eigentlich nach deiner Definition nur jeweils 3Lines scharf (die Mitte und jeweils +/-1)
- erster Trick: den FixFocus auf die !+/- ZWEITE! Line zu legen!... wegen der da nur noch geringen Steigung zur Mitte und dem etwas größerem Gefälle im Kreisbogen sind da statistisch nur in etwas alle Lines von -4..0..+4(also 9Lines) gleich gewichtet unscharf
- zweiter Trick: jeweils 3 Lines zusammen zufassen, zu normieren, und als Hash zu nehmen
- dritter Trick: man suche von vorgeriger RandPos(4..9) den besten Match zun Anfang des aktuellen Bildes(1..6)
=> so bekommt man eine optimale kontinuierliche Folge von Scanlines, welche zusammen relativ unabhängig von der exakten Winkelgenauigkeit der Aufnahme, zusammengesetzt ein der Realität gut entsprechendens endlos 360° Bild ergeben
=> nun noch Anfang und Ende deiner Batterie längs finden und passend "Clippen"
=> zum Schluss einen eindeutigen Marker auf dem Umfang im Bild finden, und das zum Anfang des Bildes machen(also da Clippen und das dort abgeschnittene hinten gespiegelt wieder anhängen)

nun hast du das perfekte QS System für deine Batterien und jede gängige Bildvergleichssoftware sagt dir dazu weil ja nun stets quasi 1:1 Vergleich "OK/Fail":)

hanvas 5. Dez 2017 07:46

AW: Scan (zylindrisches Objekt) aus Streifen zusammensetzen
 
Zitat:

Zitat von jobo (Beitrag 1387944)
OT: Wieso 2 angetriebene Walzen? Reicht nicht 1?

Das Eigengewicht der Batterien ist nicht besonders hoch, bei einer angetriebenen Walze und einer freilaufenden Walze kommt es manchmal zu Sprüngen. Bei zwei synchronen Walzen kommt das so gut wie gar nicht vor.

Zitat:

Zitat von jobo (Beitrag 1387944)
M.E. ist das doch eine Panoramafunktion oder?

Ich würde das wahrscheinlich gar nicht programmieren, sondern entsprechende Software unter Linux solange konfigurieren, bis es geht.Die Besonderheit wäre ja vermutlich das "exotische" Format/Seitenverhältnis der Rohdaten.

Google Schnellschuss: https://wiki.panotools.org/Panorama_..._in_a_nutshell

Das war auch mein erster Gedanke, aber selbst die Ergebnisse die ich bis jetzt mit meiner Bastellösung habe, sind besser als das was ich mit entsprechender anderer Software hinbekomme. Vermutlich liegt das daran das die Streifen sehr dünn sind und der zwischen zwei Bildern überlappende Bereich meist nur aus einem Pixel breiten Streifen besteht.

Dadurch kommt es vor, dass zwei aufeinander folgende Bilder exakt gleich sind. Die von mir getesteten Programme mögen das gar nicht.

Eine mögliche Lösung wäre größere Auschnitte zu wählen, dann hätte ich aber andere Nachteile in Kauf zu nehmen. Ich müsste beispielsweise mit höherer Auflösung arbeiten um damit zu kompensieren das ich dann ich einen größeren Abstand (und oder eine andere Brennweite) zwischen Objektiv und Batterie wählen müsste.

Es könnte bzw. wird bei größeren Auflösungen und metallischen Oberflächen ganz sicher passieren das ich Glanzlichter auf den Oberflächen habe, bei meiner 1 Streifen Lösung ist die Beleuchtung des betrachteten Streifens, und damit das ganze zusammengesetzte Bild, immer gleich und homogen.

Außerdem müsste ich, je nach Ausschnittsgröße das entstandene Bild noch entzerren (also die runden Ecken wieder geradebiegen).

Wenn ich es gar nicht hinbekomme, dann werde ich das am Ende so machen, aber eigentlich wäre mir meine 1 Pixel/Streifenlösung lieber weil da per Definition eigentlich keine Abbildungsfehler auftauchen.

Trotzdem Danke.

Zitat:

Zitat von jobo (Beitrag 1387944)
Ich weiß nicht wie gut die meisten Batterien so auf ihrem Minuspol stehen, aber da würd ich sie drauf stellen und die Drehachse damit vertikal haben.

Ja das geht und die Wackler an der Naht sind tatsächlich weniger, aber ich bastle mir auch gerade eine Zuführung für meine Batterien und die ist vertikal deutlich aufwendiger.

cu Ha-Jö

hanvas 5. Dez 2017 08:14

AW: Scan (zylindrisches Objekt) aus Streifen zusammensetzen
 
Zitat:

Zitat von mensch72 (Beitrag 1387947)
=> die 360° Rotation teile man in 120 Steps, heißt man "erfasst" eigentlich nach deiner Definition nur jeweils 3Lines scharf (die Mitte und jeweils +/-1)

Verwechselst Du jetzt nicht gerade Grad mit Linien. Wenn ich die 360 Grad in 120 Schritte aufteile bekomme ich immer einen Bildausschnitt der dem 120 Teil des Umfangs entspricht. Das kann ein Pixel sein, das können aber auch 10 Pixel sein.

Natürlich kann man das so abbilden das ich daraus ein Bild mit 360 Pixeln Höhe erhalte, das bedeutet dann aber auch das als Ausgabe alle Formate, also A, AA, AAA und AAAA gleich groß erscheinen.

Trotzdem könnte mich das der Lösung näherbringen, wenn ich mit einem (gedachten) auf 360 Pixeln skalierten Bild arbeite und alle Operationen die ich darauf mache, parallel im "Original" nachvollziehe, also mit einer aus zwei Bildern bestehenden Bildpyramide arbeite.

Zitat:

Zitat von mensch72 (Beitrag 1387947)
- erster Trick: den FixFocus auf die !+/- ZWEITE! Line zu legen!... wegen der da nur noch geringen Steigung zur Mitte und dem etwas größerem Gefälle im Kreisbogen sind da statistisch nur in etwas alle Lines von -4..0..+4(also 9Lines) gleich gewichtet unscharf

Einleuchtend - wegen der Problematik der unterschiedlichen Formate, etwas abstrakter - je nach Größe des Abbildungsfenster die Mitte der Höhe.

Zitat:

Zitat von mensch72 (Beitrag 1387947)
- zweiter Trick: jeweils 3 Lines zusammen zufassen, zu normieren, und als Hash zu nehmen

Wofür soll ich den Hash beim Zusammensetzen des Bildes brauchen ? - Ich will keinen Bildvergleich aus Hashwerten konstruieren (oder gibt es sonst noch einen Verwendungszweck)

Zitat:

Zitat von mensch72 (Beitrag 1387947)
- dritter Trick: man suche von vorgeriger RandPos(4..9) den besten Match zun Anfang des aktuellen Bildes(1..6)

Ohne weitere Tests problematisch da es vorkommen kann das bei kleinen Scanfenstern (eine, zwei, drei Linien) zwei exakt gleiche Bilder hintereinander folgen. Aber darauf kann ich ja testen und mir für diesen Fall etwas anderes einfallen lassen.

Zitat:

Zitat von mensch72 (Beitrag 1387947)
=> nun noch Anfang und Ende deiner Batterie längs finden und passend "Clippen"

Schon gelöst.

Zitat:

Zitat von mensch72 (Beitrag 1387947)
=> zum Schluss einen eindeutigen Marker auf dem Umfang im Bild finden, und das zum Anfang des Bildes machen(also da Clippen und das dort abgeschnittene hinten gespiegelt wieder anhängen)

Dazu verwende ich die "Naht" der Batterie da das immer eine durchlaufende Linie ist.

Danke

Ha-Jö


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz