我需要将equirectangular投影中的全景转换为6个立方面,然后转换为球形投影和背面,但是我需要跟踪每个投影中每个点的映射方式,如
Equirectangular Point(x,y)< --->立方面点(x,y)< --->球体点(x,y,z)
如何在C ++和OpenCV中实现这一目标?
这些转换是必需的,因为我需要通过比较投影在球体上的两个全景图并排放置时关键点之间的角度来找出两个这样的图像之间的良好匹配关键点。
以下是全景图:
答案 0 :(得分:1)
解决了,下面是将2d Panoramic转换为3d球面坐标的功能。
vector<int> getSphericalPoint3D(int x, int y, int cols, int rows)
{
//introduce a radius to
static const int radius = 128;
vector<int> point3D;
// the center
double c_x = (double)cols / 2;
double c_y = (double)rows / 2;
double X = (((double)x - c_x) * CV_PI) / c_x;
double Y = (((double)y - c_y) * CV_PI) / c_y;
int x3D = round(radius * cos(X) * cos(Y)) + radius;
int y3D = round(radius * cos(X) * sin(Y)) + radius;
int z3D = round(radius * sin(X)) + radius;
point3D = { x3D, y3D, z3D };
return point3D;
}
x = R * cos(x)cos(y)+ R(添加此R以避免负值)
y = R * cos(x)sin(y)+ R
z = R * sin(x)+ R
类似的转换用于Cubic转换