Измерение скорости и ускорения в видео

Я пытаюсь найти метод для расчета скорости и ускорения отслеживаемого объекта, скажем, падающего мяча. Я использую Processing 2, чтобы сделать эту программу, и я знаю расстояние от камеры до объекта, и он может вычислить его положение в каждом кадре во время движения.

Для расчета скорости я использовал эту формулу (все расчеты в пикселях): VelocityX=(PositionX - LastPositionX)/дельта-время.

И что-то подобное с ускорением: AccelerationX=(VelocityX - LastVelocityX)/дельта-время

Затем я изменил дельту времени с помощью кадров. Итак, теперь у меня есть скорость и ускорение в пикселях на кадр, но мой вопрос в том, как я могу преобразовать эти пиксели на единицу кадра, например, в мм/с? к более интуитивным единицам, подобным этому.

Я также рассчитываю положение в пикселях, но после этого делаю преобразование в миллиметры, но я немного не понимаю, как это сделать для скорости и ускорения.

// Get the current time
currTime = frameCount;
deltaTime = (currTime - prevTime);

// Remember current time for the next frame
prevTime = currTime;

// Calculate velocity in X and Y directions (pixels / frame)
if (lastMovingX != Float.MAX_VALUE) {
    velX = (PX - lastMovingX) / deltaTime;
    velY = (PY - lastMovingY) / deltaTime;
}

// Save the current frame position for the next calculation
lastMovingX = PX;
lastMovingY = PY;
if (lastVelX != Float.MAX_VALUE) {
    accelX = (velX - lastVelX) / deltaTime;
    accelY = (velY - lastVelY) / deltaTime;
}

lastVelX = velX;
lastVelY = velY;

person Luz A    schedule 21.05.2015    source источник
comment
Стандартного способа сделать это не существует, так как это будет полностью зависеть от того, на каком экране отображается пользователь. 100 пикселей на телефоне и 100 пикселей на проекторе будут очень разными измерениями в миллиметрах. Как вы думаете, зачем нужно переводить в миллиметры?   -  person Kevin Workman    schedule 21.05.2015
comment
Измерение в этих единицах необходимо для моего проекта, чтобы пользователь понимал результаты в более привычных единицах. Что вы предлагаете сделать для этого? мой экран 640x480 пикселей. И ввожу расстояние от камеры до объекта.   -  person Luz A    schedule 21.05.2015
comment
А, я неправильно понял ваш вопрос. Вы хотите отслеживать объект в миллиметрах, а не что-то, что вы рисуете на экране. Это больше вопрос к компьютерному зрению, чем конкретно к обработке. Это также, вероятно, зависит от типа камеры, которую вы используете (например, объектив «рыбий глаз» по сравнению с телеобъективом даст вам очень разные результаты). Возможно, вам больше повезет, если вы разместите сообщение на форуме компьютерного зрения.   -  person Kevin Workman    schedule 21.05.2015
comment
Вся часть о компьютерном зрении сделана, единственное, чего мне не хватает, это как преобразовать эти пиксели на единицу кадра в мм/с. Я использую веб-камеру со скоростью 30 кадров в секунду.   -  person Luz A    schedule 21.05.2015
comment
Преобразование пикселей в реальные единицы измерения — это проблема компьютерного зрения. Это также будет зависеть от типа используемого объектива. На StackOverflow сложно найти такого рода специализированные знания, поэтому вы можете поискать форум по компьютерному зрению. Просто убедитесь, что ссылки между кросспостами, если вы делаете. Удачи!   -  person Kevin Workman    schedule 21.05.2015


Ответы (1)


Если вы знаете размер объекта, вы можете извлечь соотношение пикселей/мм. Если вы знаете свою частоту кадров, вы можете преобразовать кадры в секунды.

Чтобы найти пиксели/мм = размер объекта в пикселях / размер объекта в мм

(пиксели/кадр) / (пиксели/мм) = мм/кадр

мм/кадр * кадров/секунду = мм/секунду

Это то, что вы ищите?

person Edgar H    schedule 22.05.2015
comment
Да! Я искал это, я был немного смущен подходом, который я должен использовать, спасибо за разъяснения. Я проверю результаты с этим, а затем сообщу вам, сработало ли это. - person Luz A; 23.05.2015