Warum verzerrt GIMP das Seitenverhältnis beim Entzerren von abfotografierten Dokumenten mit dem Perspektive-Werkzeug?

H

htg269

Gast
Hallo,

es gibt diverse Handy-Apps, mit denen man Dokumente abfotografieren und anschließend perspektivisch korrigieren kann:
Ich wollte nun dasselbe mit GIMP und dem Perspektive-Werkzeug mit der Einstellung "Korrigierend (rückwärts)" tun: https://docs.gimp.org/2.10/de/gimp-tool-perspective.html

Leider wird dabei das Bild immer auf die eingestellte Ebenengröße gestreckt und das korrekte Seitenverhältnis des abfotografierten Dokuments nicht berücksichtigt, was die Scan-Apps fürs Handy jedoch automatisch korrekt machen.

Ich habe recherchiert und ähnliche Fragen, aber keine Antworten gefunden, da einerseits behauptet wird, dass Bezugspunkte fehlten, um die Perspektive berechnen zu können und andererseits genau das Gegenteil behauptet wird:
Was stimmt denn nun? Wie ist das korrekte Anpassen von Perspektive und Beibehalten des korrekten Seitenverhältnisses in GIMP analog zu den Scan-Apps möglich?

Was ist von dieser Formel zu halten:
Um noch genauer zu sein.

X und Y - sind die Abmessungen des Dokuments.

A1, A2 und B1, B2 - sind die Größen des ausgewählten Bereichs.

Ich erwarte, dass:

A = (A1 + A2) / 2

B = (B1 + B2) / 2

die Formel nicht genau ist (zum Beispiel kann es schwierig sein, sie richtig zu korrigieren).

In Wirklichkeit:

A = Y

B = X

Die Anwendung von X und Y bei der Aufteilung - ergibt eine Genauigkeit, die nicht höher ist als die Verwendung einer beliebigen Zufallszahl.

Wenn wir die Größe des ausgewählten Bereichs bei den Berechnungen berücksichtigen, kann dies zu einem besser vorhersehbaren Ergebnis führen. Ich denke, dass die Formeln komplizierter sein sollten und die Algorithmen intelligenter sind als die von mir vorgeschlagenen. Aber den Bereich so zu dehnen, dass er in das Dokument passt, ohne die Form der Auswahl zu berücksichtigen, ist entmutigend.
Quelle: https://forum.affinity.serif.com/in...ts-proportions/&do=findComment&comment=782949

Wie akkurat ist der manuelle Umweg, eine Box um die Ecken des abfotografierten Dokuments zu ziehen und die Perspektive anschließend so zu anzupassen, dass das Dokument in diese Box hineinpasst? Siehe hier: https://www.vaes9.com/posts/perspective_correction

Danke Euch!
 
htg269 schrieb:
Was ist von dieser Formel zu halten:
Sie funktioniert nicht, weil das Seitenverhältnis des Objekts aus einem beliebigen Foto ohne Weiteres nicht bestimmbar ist.

Hier ist ein A4-Blatt:
Screenshot 2023-06-11 3D Paper On Wood Desk Mockup Template - Mediamodifier-1.png
Aber das kann man aus dem Bild so nicht erkennen. Mit der Formel würde man auch auf ein anderes Format kommen.

Wenn man aber ohnehin schon weiß, dass es eben A4 sein muss, kann man es ja direkt auf dieses Format strecken, mit GIMP z.B. mittels einer Ankertransformation:
Screenshot 2023-06-11 3D Paper On Wood Desk Mockup Template - Mediamodifier-2.png
 
  • Gefällt mir
Reaktionen: jlnprssnr und whats4
Amaoto schrieb:
Sie funktioniert nicht, weil das Seitenverhältnis des Objekts aus einem beliebigen Foto ohne Weiteres nicht bestimmbar ist.
Ich habe das bisher auch gedacht, aber wundere mich, weshalb die Scanner-Apps auf dem Handy sämtliche Dokumente, egal ob A4, Briefumschlag, Notizzettel, eine Zeitung usw. ohne Angabe des Seitenverhältnisses die Dokumente inklusive richtiger Perspektive korrekt entzerren.

Ich habe nun nach langer Recherche herausgefunden, dass es mittels Homographie möglich sein soll:
https://learnopencv-com.translate.g...l=auto&_x_tr_tl=de&_x_tr_hl=de&_x_tr_pto=wapp

Finden der Zielkoordinaten​


Sobald Sie die Eckpunkte für die Dokumente ermittelt haben, benötigen Sie nur noch die Zielkoordinaten, um eine perspektivische Transformation durchzuführen und die Dokumente auszurichten.
Code:
(tl, tr, br, bl) = pts
# Finding the maximum width.
widthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))
widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2))
maxWidth = max(int(widthA), int(widthB))
# Finding the maximum height.
heightA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2))
heightB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2))
maxHeight = max(int(heightA), int(heightB))
# Final destination co-ordinates.
destination_corners = [[0, 0], [maxWidth, 0], [maxWidth, maxHeight], [0, maxHeight]]

Ich habe Dein verzerrtes Beispielbild gerade mit der App Microsoft Lens am Handy abfotografiert und das Dokument wurde automatisch korrekt entzerrt. Also scheint es doch möglich zu sein?

Nur wenn die Aufnahme aus einer extrem schrägen Perspektive aufgenommen wird, dann kommt die App nicht mehr zurecht und verzerrt die Proportionen.

Ich bin verwirrt. 🤔😅
 
Zuletzt bearbeitet von einem Moderator:
htg269 schrieb:
diverse Handy-Apps
Die Handys können ja deutlich mehr Informationen erfassen als nur ein simples planares Bild. Beispielsweise haben sie Lagesensoren und mehrere Linsen (unterschiedliche Winkelbetrachtung) und auch diverse andere Methoden zur räumlichen Erfassung (z.B. IR Dots). Damit dürfte sich die Perspektive deutlich besser erfassen lassen.
 
Zurück
Oben