Эквивалентно кубическому с отображением точка-точка?

Мне нужно преобразовать панораму в равноугольной проекции в 6 кубических граней, а затем в сферическую проекцию и обратно, однако мне нужно отслеживать, как каждая точка отображается в каждой проекции, например

Точка прямоугольного сечения (x, y) <—> кубическая грань (x, y) <—> сферическая точка (x, y, z)

Как я могу сделать это в C ++ и OpenCV?

Эти преобразования необходимы, потому что мне нужно выяснить подходящие ключевые точки между двумя такими изображениями, сравнивая углы между ключевыми точками, когда две панорамы, проецируемые на сферу, располагаются рядом.

Вот панорама:Равномерное изображение на 360 градусов

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;
}
  1. Идея состоит в том, чтобы нормализовать 2d пиксели от -Pi до Pi по осям X и Y
  2. Используйте следующие отношения, чтобы получить сферические координаты

x = R * cos (x) cos (y) + R (это R добавлено, чтобы избежать отрицательных значений)

y = R * cos (x) sin (y) + R

z = R * sin (x) + R

Аналогичное преобразование используется для кубического преобразования

1

Другие решения


По вопросам рекламы [email protected]