2016-10-10 9 views
0

Ich habe intrinsische Kamera-Parameter mit dem OpenCv-Algorithmus gemessen. Der Imager hat eine Auflösung von (752.480)Intrinsic Parameter OpenCV Erklärung

Die Werte sind:

Brennweite X 1021,477666;

Brennweite Y 1.021,146888

Hauptpunkt X 376,2966754
Hauptpunkt Y 253,7513058

K1 -,263658008

K2 -,206264024

P1 -,001102641

P2 -,000980475

Fehler 0122991565

Jetzt möchte ich die Verzerrung eines Pixels berechnen. Die Koordinaten des "alten" Pixels sind

(x = 680, y = 390).

ich bin mit der folgenden Formel unter Verwendung der Koordinaten des korrigierten Pixels zu berechnen

x_ {korrigiert} = x (1 + k_1 r^2 + K_2 r^4)
Y_ {} = y korrigierte (1 + k_1 r^2 + K_2 r^4)

Für r ich bin eine Distanz

r = sqrt ((x_shifted^2 - x_principalPoint^2) + (y_shifted^2 - y_principalPoint^2))

Die Berechnung I tat:

x_corrected = 680 * (1 + (-0,26365 * 333^2) + (-0,2062 + 333^2))

= 55524658,09

Dieser Wert ist falsch I denken.

Hat jemand eine Idee, was ich falsch mache?

Antwort

0

Sie müssen Ihre unverzerrten Punkte in normalisierten Koordinaten ausdrücken.So müssen Sie es zuerst konvertieren:

x_norm = (x-px)/px = 0.8071 

und

y_norm = (y-py)/py = 0.5369 

dann den Radius berechnen:

r = sqrt(x_norm^2+y_norm^2) 

Mit diesen Werten Sie Ihre corrrected normalisiert erhalten Koordinaten:

x_corr_norm = x_norm*(1+k1*r^2+k2*r^4) = 0.4601 
y_corr_norm = y_norm*(1+k1*r^2+k2*r^4) = 0.3061 

und y ou müssen sie wieder zurück zu konvertieren:

x_corr = (x_corr_norm+1)*px = 549.4409 
y_corr = (y_corr_norm+1)*py = 331.4280 

Für ein genaueres Ergebnis, sollten Sie die nicht radiale Verformung berücksichtigen: enter image description here