Я пытаюсь извлечь несколько движущихся объектов в видеокадре и выделить их в качестве переднего плана. Данные из video frames
,
В настоящее время проблема заключается в следующем: свет меняется, поэтому есть несколько теней или более ярких участков, чем на самом деле. Это приводит к ложному фону / переднему плану извлечения OpenCV MoG
метод фоновой сегментации.
Для этого у меня нет простого метода, но есть идея, подобная этой: если я могу извлечь края этих движущихся объектов в предыдущем кадре, то, возможно, я мог бы отслеживать их с помощью таких алгоритмов, как SIFT
в следующем кадре посмотрите, где они находятся, и расцените их как передний план.
Я думаю, что в этом случае изменение света не повлияет на результат. Если я прав в этом вопросе, тогда мой вопрос:
Как я могу эффективно определять края этих движущихся объектов с помощью OpenCV? Если мне нужно использовать SIFT
алгоритм в OpenCV, это свободно доступно? Из Интернета я увидел, что это несвободно, я прав?
А также мой второй вопрос: у кого-нибудь есть идея получше?
Спасибо.
Если вы хотите сделать обнаружение / отслеживание человека, вы должны ищите исследовательские работы или проекты относительно именно этого. Это много, вы даже можете найти некоторые вопросы по этой теме здесь, на SOF:
Как я могу обнаруживать и отслеживать людей, использующих OpenCV? (может быть устаревшим)
отслеживание одного человека из видео последовательности
Как сделать отслеживание движения объекта с помощью видео?
Кроме того, есть несколько вопросов, касающихся детекторов / дескрипторов функций, таких как SIFT и его более поздние альтернативы (SURF, ORB, FREAK — только некоторые из них реализованы в OpenCV):
Существуют ли быстрые альтернативы SURF и SIFT для извлечения инвариантных по масштабам объектов?
OpenCV для сравнения изображений ANDROID
Проще говоря, SIFT — это не алгоритм отслеживания движущихся объектов, а обнаружение областей изображения, которые как-то уникальны и устойчивы к нескольким искажениям (перемещение, вращение, масштабирование …). Это означает, что одна и та же функция может быть позже обнаружена в различных условиях изображения. Вы действительно можете использовать SIFT-подобные алгоритмы для идентификации объектов, но, возможно, для отслеживания людей есть лучшие альтернативы.
Затем к этим областям изображения можно применить некоторый алгоритм отслеживания, например, оптический поток, но есть и более конкретные для отслеживания человеком.
SIFT и SURF «свободно» доступны с OpenCV, но их части запатентованы, поэтому люди избегают их использования, поэтому у них нет проблем в будущем из-за этих патентов — по этой причине они были перемещены в «несвободный» модуль OpenCV ,
Другие проблемы, которые у вас возникнут, кроме упомянутых вами, окклюзия объекта и люди, входящие-выходящие из сцены.
Я знаю, что вы уже приняли ответ Руи, но после некоторого поиска, я нашел другое решение вашей проблемы — это HOG Descriptor.
К сожалению, я не знаком с этим дескриптором, поэтому не могу помочь вам с реализацией, но, опять же, после некоторого поиска в Google я обнаружил, что этот дескриптор используется для обнаружения пешеходов.
Взгляни на этот код обнаружения человека.
Могу ли я предложить вам нормализовать изображения для освещения. Один из практических способов сделать это — использовать «Сопоставление гистограммы».
Пожалуйста, посмотрите на Гистограмма соответствия двух цветных изображений в Matlab знать об использовании сопоставления гистограммы.
Надеюсь это поможет