Оптимизация 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)

Спасибо за помощь

0 ответов

Другие вопросы по тегам