Обнаружение руки приводит к рывкам курсора


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

Я попытался усреднить позицию, основываясь на последних десяти позициях, но это просто привело к задержке времени, фактически не предотвращая рывков. Лучшее решение, которое я использовал до сих пор, - это не двигать курсор, если изменение пикселя меньше 10 в обоих направлениях (то есть изменение 10 пикселей в любом направлении приводит к движению). Это нормально, но он все еще немного дерганый, и приводит к неуклюжему интерфейсу, потому что у вас нет точной точности.

Как я могу компенсировать недостаток устойчивости в человеческой форме, чтобы мышь не была такой дерганой?

3 6

3 ответа:

Это в любом случае будет компромиссом между лагом и стабильностью.

Проверьте свои данные. Вы можете обнаружить, что подергивание происходит из-за низкого разрешения в Kinect. Если это так, то расстояние рывков будет определяться тем, насколько близко вы находитесь к камерам Kinect. Когда вы находитесь слишком далеко, разрешение камеры слишком низкое, и она будет подпрыгивать между одним или двумя пикселями (стереокамеры).

Вы думаете в правильном направлении, вычисляя среднее и имея порог для движения. Вы допустим, вы рассчитали среднее значение для последних 10 позиций, которое при разрешении 30 кадров в секунду вызывает задержку в 0,33 секунды.

Вы можете усреднить только 5 последних (эксперимент), и вместо среднего вычислить среднее значение.

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

Какова частота дискретизации? 10 позиций-это, скорее всего, всего лишь сотая доля секунды. Вы можете усреднить последние 10 или 3 секунды.

Пытались ли вы применить медианный фильтр к карте глубины, прежде чем выполнять обнаружение больших двоичных объектов? Я использовал это в демо-версииfinger tracking , и это значительно улучшило устойчивость.

Полоса пропускания между 3 и 5 дала мне лучшие результаты (5 убивает немного fps, но это действительно гладко).