Buchscan 3D Dewarp Algorithmus - Ansätze

sandreas

Mitglied
Hallo zusammen,

ich weiß, Buchscan-Software gibts (auch in Java) wie Sand am Meer. Es geht mir allerdings nicht nur um die Lösung des Problems, sondern auch um den Weg dahin, da ich mit Java noch nicht viel gemacht habe und es als eine Art erstes Projekt umgesetzt werden soll.

Hintergrund:
  • Konsolenanwendung mit Parametern ohne GUI Brimborium
  • Zunächst sollen die Kanten fotografierter Doppelbuchseiten auf schwarzem Untergrund erkannt werden
  • Dann die Buchseiten aufgeteilt und der schwarze Hintergrund weggeschnitten werden
  • Danach die geteilten Bilder der Seiten in ein PDF exportiert werden
  • Das erstellte PDF soll über PDF-X-Change-Viewer mit OCR-Daten versehen werden
Der Algorithmus der Seitenaufteilung und das Bilder exportieren in Einzelseiten (ohne PDF) ist in einer ersten Version fertig und funktioniert (für einen total unmathematischen Ansatz) auch ganz gut. Allerdings ist mir aufgefallen, dass die Buchseiten noch gewarpt sind, also die Rundung der Buchseiten verzerrt die Schrift auf den exportierten Bildern. Meine Recherchen haben ergeben, dass es zum Dewarpen sinnvoll/effektiv sein könnte, anhand von 2 Fotos ein 3D-Modell zu errechnen, dass die Verzerrung widerspiegelt und dieses Modell dann programmatisch "platt zu drücken", "zu bügeln", also dewarpen. (wie hier: http://www.fxpal.com/people/chiu/kim-13_DewarpingBook-MobilePhone_cbdar13.pdf). Die Position der Punkte zu finden, ist kein Problem, das habe ich schon hingekriegt (Point3D). Allerdings ist mir noch nicht klar, wie ich die Punkte geeignet speichern kann, so das es möglichst einfach ist, es später wieder auf das Bild anzuwenden.

Meine Fragen:
  • In der 2D Welt kann man das ganze ja mit Lines, Rectangles und Points berechnen. Aber wie kann man das mit einem 3D Modell machen? Point3D ist klar, aber gibt es irgend eine Klasse für eine Ebene / eine Map, in der ich 3D-Punkte hinzufügen kann und die dann wie eine 3D-Landschaft aussieht?
  • Wie kann man solch ein 3D-Modell wieder in ein 2D Modell umrechnen (Bügeln/Plattdrücken/Dewarpen)?
  • Wie kann ich diese Umrechnung wieder auf das Bild (BufferedImage) anwenden (ConvoleOp eventuell)?
Kurze Codebeispiele wären Cool, aber auch Links zu Konzepten und Algorithmen.

Linksammlung (nach Antworten):
3D Graphic Java: Render fractal landscapes | JavaWorld
http://www.fxpal.com/people/chiu/kim-13_DewarpingBook-MobilePhone_cbdar13.pdf
 
Zuletzt bearbeitet:
Hallo,

als Ergänzung zum Thema habe ich mir mal ImageJ heruntergeladen. Dort gibt es ein Plugin, das sich:

Interactive 3D Surface Plot

nennt. Folgender Screenshot zeigt, was das Plugin kann und verdeutlicht auch, was ich vor habe:




Das Plugin erstellt aus den Farbräumen des Bilds ein 3D-Modell, dass die tatsächliche Lage des Buchs doch recht brauchbar abbildet.

Ich lese mich gerade in die Thematik ein, den Sourcecode des Plugins habe ich noch nicht angeschaut, falls es Open Source ist.

  • Kennt jemand eine Java-Bibliothek, die eine Ähnliche Umrechnung ohne die Notwendigkeit einer grafischen Ausgabe bewerkstelligt?
  • Weiß jemand, mit welchem Algorithmus ich die so errechneten Tiefenwerte für die Buchseiten in ein 2D-Modell umrechnen kann (quasi per Algorithmus die Seiten glatt Bügeln)? (so würden die Unebenheiten im Text ausgeglichen.
 

Zurück
Oben