Оптимизация 5 вложенных циклов при отслеживании видео с использованием оптического потока на суперпикселях
У меня есть видео, которое состоит из 200 кадров. Я хотел бы отслеживать это видео, используя суперпиксели и оптический поток. Данный суперпиксель в кадре t может перемещаться в новый суперпиксель в кадре t+1, учитывая (x,y) координаты движения (с алгоритмом оптического потока) каждого пикселя. У меня есть код, который хорошо выполняет свою работу, однако для обработки видео размером 200 кадров требуется 320 дней (320 240,3).
Мой код состоит из 5 вложенных для цикла. Мой вопрос заключается в том, как получить эффективную и оптимизированную реализацию моего кода.
def get_new_superpixel_group(coordinate_x, coordinate_y, flow, v_coordinates):
h = int(flow[coordinate_x][coordinate_y][0])
v = int(flow[coordinate_x][coordinate_y][1])
# new postion
new_x = coordinate_x + h
new_y = coordinate_y + v
for i in np.arange(len(v_coordinates)):
# print(i)
for k in np.arange(len(v_coordinates[i][0])):
if (v_coordinates[i][0][k] == new_x and v_coordinates[i][1][k] == new_y):
# print('superpixel label is ', str(i))
# print('new index position k is ', str(k))
break;
else:
continue
break
return i, k
Комментарии к переменным:
# len(v_coordinates) = number of frames [0 to 199]
#(len(v_coordinates[i])= number of supepixels at frame i
#len(v_coordinates[i][k][0])= number of pixels in superpixel k
#(v_coordinates[i][k][0]) represents x_coordinates
#(v_coordinates[i][k][1] represents y_coordinates
#(v_coordinates[i][k][0][p],v_coordinates[i][k][1][p]) represent the (x,y) coordinates of the p-th pixel of superpixel k in frame i
#v_coordinates[i + 1] contains the superpixel coordinates of frame i+1
# flow[i] contains the coordinates motion (x,y) of each pixel in frame[i]
# flow[i][m][n] represent the coordinates motion (x,y) of the pixel index (m,n) at frame i
Их формы следующие:
#flow[i].shape=frame[i].shape=(320,240,3)
Вот код, который вызывает функцию get_new_superpixel group()
for i in np.arange(len(v_coordinates) - 1):
print('processing frame ', str(i))
for k in np.arange(len(v_coordinates[i])):
for p in np.arange(len(v_coordinates[i][k][0])):
# get_new_superpixel_group to be updated
t, z = generalize_get_new_superpixel_group(v_coordinates[i][k][0][p], v_coordinates[i][k][1][p],flow[i], v_coordinates[i + 1])
# print('good')
new_label.append(t)
index.append(z)
Спасибо за помощь