Мне нужно преобразовать панораму в равноугольной проекции в 6 кубических граней, а затем в сферическую проекцию и обратно, однако мне нужно отслеживать, как каждая точка отображается в каждой проекции, например
Точка прямоугольного сечения (x, y) <—> кубическая грань (x, y) <—> сферическая точка (x, y, z)
Как я могу сделать это в C ++ и OpenCV?
Эти преобразования необходимы, потому что мне нужно выяснить подходящие ключевые точки между двумя такими изображениями, сравнивая углы между ключевыми точками, когда две панорамы, проецируемые на сферу, располагаются рядом.
Вот панорама:
Ниже решена функция преобразования сферических координат 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
Аналогичное преобразование используется для кубического преобразования