Расчет фактической скорости между двумя двумерными координатами в последовательных кадрах - PullRequest
1 голос
/ 20 марта 2020

Я пытаюсь рассчитать фактическую скорость между кадрами на основе сдвига пикселей из двух точек 2D-координат.

Координаты сохраняются таким образом, что co_ordinates[frame_number][pixel_index][pixel_value_x][pixel_value_y]

Например, вот как frame_number=1 и pixel_index=1 отображаются, когда co_ordinates[0][0]

array([[113.        , 231.        ],
       [112.83630458, 230.73530376]])

1 Ответ

1 голос
/ 22 марта 2020

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

cx = 0;
cy = 0;
for point_number in range(0, number_of_points):
    cx = cx + co_ordinates[frame_number][point_number][0][0]
    cy = cy + co_ordinates[frame_number][point_number][0][1]
cx = cx / number_of_points;
cy = cy / number_of_points;
if frame_number > 0:
    distance = math.sqrt((cx-prevx)**2 + (cy-prevy)**2)
    # Calculate speed 
prevx = cx;
prevy = cy;

Вы также можете рассчитать вращение между кадрами (так называемая регистрация из облаков точек ). Подход грубой силы должен был бы вычислить угол между каждой точкой и барицентром, затем угол между этой точкой и новым барицентром в следующем кадре и усреднить углы по всем точкам. Для жестких облаков это дает тот же результат, что и кватернионный подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...