Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从双鱼眼坐标到等直角坐标的转换_C++_Fisheye_Spherical Coordinate - Fatal编程技术网

C++ 从双鱼眼坐标到等直角坐标的转换

C++ 从双鱼眼坐标到等直角坐标的转换,c++,fisheye,spherical-coordinate,C++,Fisheye,Spherical Coordinate,如下所示,我们可以使用以下方程式将双鱼眼坐标转换为等直角坐标: // 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 = long

如下所示,我们可以使用以下方程式将双鱼眼坐标转换为等直角坐标:

// 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
我应用上述公式编写了如下源代码:

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;
不幸的是,我的数学不够好,无法理解这一点,也无法确定我是否正确编写了上述代码,我试图猜测px、py和pz的值


假设我的摄像机FOV为220度,摄像机分辨率为2880x1440,我希望重叠区域中的后摄像机点(358224)和重叠区域中的前摄像机点(2563197)都映射到接近(22051009)的坐标。然而,实际的映射点分别为(515.9663701834.647949)和(1644.4420171853.060669),它们都离(22051009)很远。请建议如何修复上述代码。非常感谢

您正在构建等矩形图像,因此我建议您使用反向映射

从正在绘制的目标图像中的像素位置开始。将二维位置转换为经度/纬度。然后将其转换为单位球体表面上的三维点。然后从3D点转换到2D鱼眼源图像中的位置。在Paul Bourke page中,您将从最下面的方程开始,然后是最右边的方程,然后是最上面的方程

使用地标点,如90°长0°纬度,验证每个步骤的结果是否合理

最终结果应该是源鱼眼图像中[-1..+1]范围内的位置。根据需要重新映射到像素或UV。由于源被分割为两个眼睛图像,因此您还需要从目标(等直)经度映射到正确的源子图像