Преобразование кубических карт в равноугольную панораму с помощью графического процессораPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Преобразование кубических карт в равноугольную панораму с помощью графического процессора

Сообщение Anonymous »

Для шести квадратных кубических карт (соотношение сторон 1:1, разрешение 1000x1000) с углом обзора 90° я пытаюсь преобразовать их в равноугольную панораму (соотношение сторон 2:1, разрешение 4000x2000). Мой текущий подход состоит в том, чтобы вычислить сферические координаты для каждого пикселя равнопрямоугольной панорамы, вычислить декартовы координаты из сферических координат, оценить, на какой кубической карте расположен пиксель, и оценить соответствующий пиксель на этом кубе, как показано ниже (буквы обозначают северсевер, югюг, востокаст, западзапад, U р, Dсобственный).

Код: Выделить всё

def uv_pano_to_uv_cubes(u_pano, v_pano, cubemap_shape, panorama_shape):

# Calculate the spherical coordinates from 2D image coordinates
phi = (u_pano / panorama_shape[0] - 0.5) * np.pi
theta = (v_pano / panorama_shape[1] + 0.25) * 2 * np.pi

# Calculate the cartesian coordinates from the spherical coordinates
x = np.cos(phi) * np.cos(theta)
y = np.sin(phi)
z = np.cos(phi) * np.sin(theta)

# Estimate on which cubemap the pixel is located
if abs(x) >= abs(y) and abs(x) >= abs(z):
face = 'E' if x > 0 else 'W'
a = z if x > 0 else -z
b = y
ma = abs(x)
elif abs(y) >= abs(x) and abs(y) >= abs(z):
face = 'D' if y > 0 else 'U'
a = x
b = z if y > 0 else -z
ma = abs(y)
else:
face = 'S' if z > 0 else 'N'
a = -x if z > 0 else x
b = y
ma = abs(z)

# Estimate the corresponding pixel on the cube
u_cube = int(((a / ma) + 1.0) * 0.5 * (cubemap_shape[0] - 1))
v_cube = int(((b / ma) + 1.0) * 0.5 * (cubemap_shape[1] - 1))

return face, u_cube, v_cube
Если я использую скрипт Python и выполняю вычисления на ЦП, преобразование занимает несколько секунд. Есть ли способ выполнить этот расчет на графическом процессоре, желательно с использованием Python? Я читал, что это возможно с помощью OpenGL или DirectX, но пока не нашел способа.
Я пытался повысить производительность с помощью многопоточности процессора, но это не сильно помогло. Я также пытался написать шейдер OpenGL, но безуспешно.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ng-the-gpu
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»