В настоящее время я застрял в достижении равноугольного вращения на 360 ° изображения с OpenCV из-за моего математического понимания (почти ноль) матриц проекций и вращений.
Результатом такого поворота будет именно то, что вы можете увидеть здесь: https://www.youtube.com/watch?v=l1N0lEKIeLA
Я нашел некоторый код здесь: https://github.com/FoxelSA/libgnomonic/wiki/Equirectangular-rotation_v0.1 но мне не удалось применить его к opencv
Если у кого-то есть идеи, как его применять для углов OpenCV Mat и Pitch, Yaw, Roll, это будет высоко оценено!
Спасибо!
Вместо того чтобы говорить о рыскании и тангаже, я расскажу об углах Эйлера x, y и z.
Чтобы выполнить вращение вашего равностороннего отображения, вы можете выполнить следующую процедуру:
Рассмотрим координаты (i2, j2)
в вашем изображении результата. Мы постараемся найти, какой цвет поставить здесь. Эти координаты соответствуют точке на сфере с широтой lat2 = 180 * i2 / image.height
и долгота lon2 = 360 * j2 / image.width
, Вычислить соответствующий 3D вектор v2
,
Вычислить матрицу вращения R
с углами x, y и z (посмотрите на формулы Вот). Возьмите транспонирование этой матрицы, чтобы получить обратный поворот от нового изображения к старому. Мы назовем эту матрицу обратного вращения Rt
,
вычисление v1 = Rt * v2
, Затем вычислите широту lat1
и долгота lon1
из v1
,
Найти цвет в исходном изображении по координатам i1 = image.height * lat1 / 180
а также j1 = image.width * lon1 / 360
, Это не могут быть целочисленные координаты. Возможно, вам придется интерполировать между несколькими пикселями, чтобы получить свое значение. Это цвет пикселя в позиции (i2, j2)
в вашем новом изображении.
Вам нужно будет посмотреть, как преобразовать трехмерные векторы на сфере и их значения широты и долготы, но это не должно быть слишком сложно найти. Описанный здесь алгоритм должен быть довольно простым для реализации.
Дайте мне знать, если я допустил какую-либо ошибку, поскольку сам не проверял.
Других решений пока нет …