Jump to content
Compvision.ru
Sign in to follow this  
Cfr

Трекинг объектов.

Recommended Posts

Пробовал стандартные примеры из OpenCV? blobtracking, например.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Вот в этом (пост №98) :) :

http://www.compvision.ru/forum/index.php?showtopic=15&st=80

Возможно использовать каскады Хаара для любого объекта? Я так и не нашел описание что вообще из себя представляю каскады(

Share this post


Link to post
Share on other sites

Классическая схема распознавания.

Берём изображение выделяем признаки.

Затем берётся прямоугольник который накрывает некоторое под пространство.

Сверяя значение координат признаков и их количество в этом подпространстве происходит классификация. Принадлежит ли этот набор признаков к заданному классу. То есть мы решаем является этот набор признаков нашим объектом.

Идёт перебор координат прямоугольника.

Так вот в каскаде используется не нейронная сеть, а двоичные деревья решений.

Где каждый узел либо принимает объект к классу либо отвергает. Если отвергает, то остальные условия не проверяются. Переходим к следующий позиции.

Это значительно ускоряет обработку по сравнению с НС. И качество распознавания не сильно страдает, можно сказать практически не страдает.

Могу и ошибаться так как сам до конца не разбирался, но как-то так.

Использовать можно для любого объекта. Вернее в большинстве случаев оно вам подойдёт.

  • Like 1

Share this post


Link to post
Share on other sites

А о чем статья в Wiki compvision про обучение каскадов, алгоритм ясен, но в чем его использовать? И можно статью по использованию собственных каскадов для обнаружения объектов, а не лиц, или в opencv это одно и тоже?

Share this post


Link to post
Share on other sites

Примерный алгоритм таков:

1) сделать кадры с объектом слежения с разных ракурсов,

2) сделать на основе кадров файл каскада,

3) далее применять каскады cvHaarDetectObjects();

Возникает вопрос, так как объект в пространстве, его можно вращать. Но у книги с фронтальным представлением и изометрическим мало общих признаков, будет ли находить?

Share this post


Link to post
Share on other sites

Хаар не будет находить. Для этого дескрипторы используют см. opencv-шный пример find_obj.cpp, там как раз плоский объект ищут.

Вот примерно оно:

Share this post


Link to post
Share on other sites

Тут опять же только вид спереди, а если изометрический, то не найдет.

Share this post


Link to post
Share on other sites

Этот метод допускает повороты плоскости вокруг осей. Вопрос в устойчивости детектирования дескрипторов.

А постановку задачи с картинками можно?

Может Вас вполне ArToolkit устроит.

Share this post


Link to post
Share on other sites

Нужно знать что мы хотим детектировать.

Чем больше мы знаем об объекте тем надежнее детектирование.

Допустим, в кадре толпа людей, плюс к тому ездят машины и летает муха. Что здесь объект, а что фон?

Вы сами справитесь (живыми мозгами) со своей постановкой задачи при таких условиях? :crazysmile:

А комп, он ведь тупой, что ему скажешь, то и делает :)

Share this post


Link to post
Share on other sites

Нужно знать что мы хотим детектировать.

Чем больше мы знаем об объекте тем надежнее детектирование.

Допустим, человек идет в толпе плюс к тому ездят машины и летает муха. Что здесь объект, а что фон?

Вы сами справитесь со своей постановкой задачи при таких условиях? :crazysmile:

Да, я не правильно разбил задачи на этапы. Все гораздо более конкретно.

Есть машина, и БПЛА, нужно написать программную часть слежения за машиной.

PS Все _Гораздо_ более конкретно чем я написал :)

Share this post


Link to post
Share on other sites

Да, так понятнее :)

Я, в таком случае, посмотрел бы вначале на:

1) CamShift - требуется собрать статистику цвета машины, можно выделить мышкой в кадре для инициализации.

2) оптический поток

3) фильтр кальмана или фильтр частиц (particle filter или ConDensation)

Еще есть

blobtrack_sample.cpp

в примерах по opencv.

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

Share this post


Link to post
Share on other sites

Уважаемые форумчане. Передо мной стоит следующая задача.

- есть камера, пусть она стоит в комнате - то есть неподвижный фон

- в комнате постоянно ходят люди, посередине фрейма существует невидимая граница

- при переходе любого объекта сквозь эту границу слева - направо надо прибавлять +1 к одному счетчику и справа - налево +1 к другому счетчику. ну и просто вывести на экран сколько они насчитали.

Для начала я открыл файл motempl.exe - и получил эти самые "факты движения" круги которые показывают типа "вот здесь" произошло движение и двигалось оно вон туда. Окей. Поставил счетчики и невидимую границу - и типа если круг находится слева от границы но расстояние между его центром меньше порога то значит он сейчас перейдет границу и плюсую к счетчику.

1. НО возникла проблема - что у одного человека программа показывает кучу движений - ноги отдельно, руки отдельно + рюкзак на спине отдельно. И счетчики которые я поставил показывали мне что мол через границу прошел не один человек а ТРИ ( его части типа).

2. и еще одна что счетчик каждый кадр плюсовал +1 к счетчику. а мне надо просто - прошел человек - плюсую единицу!

В дополнение к этому в комнате ветер и иногда колышится растительность (дополнительные движения) - я так понимаю это убирается предварительной обработкой фона.

Вот такая задача - почитал форум - и выявил что

а)методы ЛК расчета оптического потока могут помочь мне, как это сделано например в проге lkdemo - типа выявляю движение шаблонами - и ставлю точку туда а потом рассчитываю Люкасом Канаде ... ?

б) есть blobtrack.exe (который надо изучить, и он как то помогает ) - ну я вставил видео ниче не понял про что она? ... выявляет куда объект движется?

в) движение разных частей ОДНОГО объекта можно объединить в одно движение ОДНОГО объекта контурным анализом...

г) метод конденсации - тут уместен вообще?:)

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

Share this post


Link to post
Share on other sites

HOG забыли :)

Share this post


Link to post
Share on other sites

1. HOG - дополнительная библиотека для OPENCV для детекта людей?

2. в итоге - с чего начинать с чего копать?)))

Share this post


Link to post
Share on other sites

1) HOG - это метод (Histogram of oriented gradients), может использоваться для детекта разных вещей. В opencv он натаскан на людей.

2) Начать лучше с книжки А.А. Лукьяница, А.Г. Шикин. "Цифровая обработка видеоизображений". В интернете есть. Там есть несколько глав, посвященных трекингу. Вот с трекингом сначала и нужно разобраться.

  • Like 1

Share this post


Link to post
Share on other sites

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

Может есть какие нибудь алгоритмы помимо HOG, реализованные в OpenCV ?

Share this post


Link to post
Share on other sites

Для детекта движения почитай про codebook в opencv есть готовый пример. Это для статической камеры.

Share this post


Link to post
Share on other sites

Добрый день, уважаемые! Итак я прочитал книгу "А.А. Лукьяница, А.Г. Шишкин - Цифровая обработка видеоизображений" до 5-й главы. В решении моей задачи я выделяю (как в книге и было сказано) следующие три этапа

- Выделение переднего плана

- Сегментация движущихся объектов

- Трекинг объектов

Хочу сделать все по порядку, начну с выделения переднего плана. Как я прочитал есть 4 типа методов, я хочу реализовать метод временной разности , но как сказано в книге достаточно устойчиво получается выделять передний план , применив в дополнении к методу временной разности еще и вероятностный метод.

Так вот вопрос - есть уже готовая реализация этих методов на OpenCV ? может шаблон ?

Share this post


Link to post
Share on other sites

Да, есть: Adaptive background mixture. Там на каждый пиксель создаётся несколько Гауссианов (нормальных распределений) и определяется к какому из них принадлежит текущее значение пикселя. если ни к какому, то пиксель переднеплановый. Ну и довольно хитрая система обновления параметров распределений. Рвботает довольно хорошо, но не быстро.

Share this post


Link to post
Share on other sites

Погуглил - нашел статью на английском, там по всей видимости теория расказывается, а в openCV реализация встроенная я так понял, встроена Adaptive background mixture в структуру BackgroundSubtractorMOG, я все правильно понимаю?

в сети открытого кода нет. Скачал opencv 2.3 (сам я пользовался 2.1 до сих пор) - в samples/c нет вроде программы.

Nuzhny , где мне найти то Adaptive background mixture?))

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×