Ich habe eine Linie in Weltkoordinaten und projiziere sie auf ein Bild (wie in dieser Frage math.stackexchange beschrieben). Dies führt zu einer einfachen Liniengleichung im Bildraum, so dass ich sie leicht mit OpenCV innerhalb eines Bildes drucken kann.Verzerren Sie eine gerade Linie über Fischaugenverzerrungsfunktion und zeichnen Sie sie korrekt in das Bild
Jetzt möchte ich die Linie in ein Fisheye-Kamerabild projizieren. Da ich eine entsprechende nichtlineare Verzerrungsfunktion habe, kann ich Punkte leicht verzerren. Der naive Weg ist nun, jeden Punkt von der generierten Linie über diese Funktion zu verzerren. Aber das würde zu mehreren Liniensegmenten und unscharfen Pixeln führen (die normalerweise zu der verzerrten Linie gehören würden).
Ich frage mich, was könnte ein cleverer Weg, um eine korrekte verzerrte Linie zu bekommen. Vielleicht ist es auch notwendig, die Linienprojektion anders zu handhaben? Ich könnte die Straight-Linie öfter probieren (d. H. Mit Subpixel-Koordinaten), aber ich denke, das garantiert mir keine korrekte Lösung.
EDIT:
My Verzerrungsfunktion ist eine einfache Polynom
r(a) = k1*a+k2*a^2+k3*a^3+k4*a^4
wo a
ist, den Winkel des unverzerrten einfallenden Strahl auf die optische Achse und r
ist der Radius, der einem Pixel im verzerrten Bild . Sie können mehr darüber lesen here.
Bitte senden (oder Punkt) die Gleichungen des Linsenverzerrung Modell, das Sie verwenden möchten. –
@FrancescoCallari: Ich habe die Informationen in meinem ursprünglichen Beitrag hinzugefügt. –