by Guest » 23 Jan 2025, 03:37
Der folgende Link schlägt vor, dass wir duale Fischaugenkoordinaten mithilfe der folgenden Gleichungen in äquirechteckige Koordinaten umwandeln können:
Code: Select all
// 2D fisheye to 3D vector
phi = r * aperture / 2
theta = atan2(y, x)
// 3D vector to longitude/latitude
longitude = atan2(Py, Px)
latitude = atan2(Pz, (Px^2 + Py^2)^(0.5))
// 3D vector to 2D equirectangular
x = longitude / PI
y = 2 * latitude / PI
Ich habe die obigen Gleichungen angewendet, um meinen Quellcode wie folgt zu schreiben:
Code: Select all
const float FOV = 220.0f * PI / 180.0f;
float r = sqrt(u*u + v*v);
float theta = atan2(v, u);
float phi = r * FOV * 0.5f;
float px = u;
float py = r * sin(phi);
float pz = v;
float longitude = atan2(py, px); // theta
float latitude = atan2(pz, sqrt(px*px + py*py)); // phi
x = longitude / PI;
y = 2.0f * latitude / PI;
Leider ist meine Mathematik nicht gut genug, um das zu verstehen, und ich bin mir nicht sicher, ob ich den obigen Code richtig schreibe, in dem ich versucht habe, die Werte für px, py und pz zu erraten.
Angenommen, das Sichtfeld meiner Kamera beträgt 220 Grad und die Kameraauflösung beträgt 2880 x 1440, dann würde ich den Punkt (358, 224) für die Rückkamera erwarten Der überlappende Bereich und der Punkt (2563, 197) für die Frontkamera im überlappenden Bereich würden beide einer Koordinate in der Nähe von (2205, 1009) zugeordnet. Die tatsächlichen Kartierungspunkte sind jedoch (515.966370,1834.647949) bzw. (1644.442017,1853.060669), die beide sehr weit von (2205,1009) entfernt sind. Bitte schlagen Sie vor, wie Sie den obigen Code beheben können. Vielen Dank!
Der folgende Link schlägt vor, dass wir duale Fischaugenkoordinaten mithilfe der folgenden Gleichungen in äquirechteckige Koordinaten umwandeln können:
[code]// 2D fisheye to 3D vector
phi = r * aperture / 2
theta = atan2(y, x)
// 3D vector to longitude/latitude
longitude = atan2(Py, Px)
latitude = atan2(Pz, (Px^2 + Py^2)^(0.5))
// 3D vector to 2D equirectangular
x = longitude / PI
y = 2 * latitude / PI
[/code]
Ich habe die obigen Gleichungen angewendet, um meinen Quellcode wie folgt zu schreiben:
[code]const float FOV = 220.0f * PI / 180.0f;
float r = sqrt(u*u + v*v);
float theta = atan2(v, u);
float phi = r * FOV * 0.5f;
float px = u;
float py = r * sin(phi);
float pz = v;
float longitude = atan2(py, px); // theta
float latitude = atan2(pz, sqrt(px*px + py*py)); // phi
x = longitude / PI;
y = 2.0f * latitude / PI;
[/code]
Leider ist meine Mathematik nicht gut genug, um das zu verstehen, und ich bin mir nicht sicher, ob ich den obigen Code richtig schreibe, in dem ich versucht habe, die Werte für px, py und pz zu erraten.
Angenommen, das Sichtfeld meiner Kamera beträgt 220 Grad und die Kameraauflösung beträgt 2880 x 1440, dann würde ich den Punkt (358, 224) für die Rückkamera erwarten Der überlappende Bereich und der Punkt (2563, 197) für die Frontkamera im überlappenden Bereich würden beide einer Koordinate in der Nähe von (2205, 1009) zugeordnet. Die tatsächlichen Kartierungspunkte sind jedoch (515.966370,1834.647949) bzw. (1644.442017,1853.060669), die beide sehr weit von (2205,1009) entfernt sind. Bitte schlagen Sie vor, wie Sie den obigen Code beheben können. Vielen Dank!