Найти смежные активные блоки на изображении, разделенном на блоки - PullRequest
0 голосов
/ 27 марта 2020

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

Эти дескрипторы основаны на функции OpenCV "cv2.goodFeaturesToTrack", которая в основном обнаруживает точки по всему изображению, а затем я использую функцию "cv2.calcOpticalFlowPyrLK (prev_Frame, next_Frame, prev_corners, next_corners)" для сопоставьте эти точки предыдущего кадра с точками следующего. Я сделал это таким образом, чтобы эти совпадения были представлены в виде линий, которые go от точки до совпавшей точки следующего кадра, как вы можете видеть на следующем изображении (некоторые линии могут выглядеть как точки, но это просто короткие линии) .

Результирующее изображение с обнаруженными совпадениями

Я специально хочу отслеживать точки, которые появляются у людей, занимающихся спортом, поэтому я фильтрую все точки, которые работают в OpenCV возвращается. Если точка постоянно обнаруживается в одних и тех же координатах, я назначаю ее фону (представленному КРАСНЫМИ линиями), поэтому у меня остается много точек, которые, как я предполагаю, находятся на переднем плане. Далее я отфильтрую их по длине линий, так как меня интересует только обнаружение тех, которые смещаются, поэтому эти линии, выделенные СИНИМ цветом, соответствуют тем линиям переднего плана, которые слишком короткие. Это, наконец, оставляет меня с зелеными линиями, которые я желаю, которые соответствуют точкам переднего плана, которые имеют еще некоторое движение.

С этими зелеными линиями я получаю всю графику, которую вы видите в правой части изображения. загружено. Он уже довольно неплохо работает, когда обнаруживает, что кто-то действительно занимается спортом, но я хочу еще больше отфильтровать эти ЗЕЛЕНЫЕ линии.

Я хочу сделать что-то похожее на следующий скетч, который я сделал в Paint:

Эскиз того, чего я хотел бы достичь

Я хочу разделить фрейм в сетке, сгруппировать непрерывные поля, содержащие ЗЕЛЕНЫЕ линии, и оставить ТОЛЬКО зеленые линии, которые находятся в самой большой группе И самые длинные линии. Например, в предыдущем примере изображения самая большая группа содержит 13 блоков, но содержит только короткие строки, тогда как интересующая меня область имеет только 11 блоков, но содержит значительно более длинные строки.

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

Заранее спасибо: )

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