AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Scan (zylindrisches Objekt) aus Streifen zusammensetzen
Thema durchsuchen
Ansicht
Themen-Optionen

Scan (zylindrisches Objekt) aus Streifen zusammensetzen

Ein Thema von hanvas · begonnen am 4. Dez 2017 · letzter Beitrag vom 5. Dez 2017
Antwort Antwort
hanvas

Registriert seit: 28. Okt 2010
166 Beiträge
 
Delphi 11 Alexandria
 
#1

Scan (zylindrisches Objekt) aus Streifen zusammensetzen

  Alt 4. Dez 2017, 17:04
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
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Scan (zylindrisches Objekt) aus Streifen zusammensetzen

  Alt 4. Dez 2017, 23:02
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.
Gruß, Jo
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#3

AW: Scan (zylindrisches Objekt) aus Streifen zusammensetzen

  Alt 4. Dez 2017, 23:37
=> 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"
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
166 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Scan (zylindrisches Objekt) aus Streifen zusammensetzen

  Alt 5. Dez 2017, 08:46
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.

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.

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ö
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
166 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Scan (zylindrisches Objekt) aus Streifen zusammensetzen

  Alt 5. Dez 2017, 09:14
=> 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.

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

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

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

=> nun noch Anfang und Ende deiner Batterie längs finden und passend "Clippen"
Schon gelöst.

=> 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ö
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 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