Я работаю над автоматическим теннисным видеоредактором для мобильных телефонов и домашних видеозаписей, и в настоящее время я застрял, пытаясь обнаружить быстро движущийся шар в изображении с низким разрешением.
Я пробовал несколько подходов:
Я вычисляю временную дельту между текущим кадром и предыдущим кадром, а затем выбираю контуры в текущем кадре, которые пересекаются с временным изображением дельты (текущий кадр - предыдущий кадр). Это оставляет меня с контурами частей тела игроков и контура мяча.
Я фильтрую контуры по размеру, поэтому получаю только контуры, которые могут принадлежать мячу (или голове игрока, или кончику его ботинка и т. Д.)
Я не могу действительно фильтровать по цвету, поскольку плохо освещенный шар становится серым, и есть корты всех цветов (серый, синий, красный), и шар в конечном итоге имеет цвет, близкий к цвету корт или голова игрока, во многих случаях
Невозможно фильтровать по округлости, поскольку у игроков и ракеток также есть круглые части, которые не будут фильтроваться (а размытые шары иногда не выглядят круглыми)
Извлечение функций кажется трудным с изображениями с низким разрешением, но я, возможно, применил это плохо, поскольку у меня мало знаний в этой области. Я пробовал SURF и SIFT на полутоновых версиях моих изображений
Я знаю, что мяч (если он есть) будет в центре изображения, окруженный чем-то другим (простые случаи - простой цвет, но иногда он проходит по линиям площадки или ракеткам игрока)
Я пробовал обучать классификаторы из моих образцов, либо из векторов объектов, либо из самих исходных изображений, и самое большее, что я получил, - это точность 95%, что все еще мало для моего приложения (я бы сказал, что получаю лучшая точность, отфильтровывая точки по цвету окрестности самостоятельно)
Так что я застрял сейчас, задаваясь вопросом, какую другую технику я мог бы использовать для устранения ложных срабатываний. Техника, которая имела наибольший успех, состояла в том, чтобы проверить окрестность мяча, чтобы увидеть, имеет ли он другой цвет, нежели шар, но проблема в том, что он не фильтрует ложные срабатывания (голова игрока в задней части площадки имеет размером с шарик перед площадкой, а также имеет другой цвет по сравнению с окрестностями, поэтому он считается ложноположительным)
Я не могу вставлять изображения в эту тему, но все мои примеры изображений доступны по адресу:
https://www.dropbox.com/sh/s9m6xq50g4ehdw1/AABXnqkBYlhYeNXOwpZuKBD6a?dl=0