2013-06-17 3 views
0

Может ли кто-нибудь предложить мне быстрый способ получить изображение переднего плана?Фоновая экстракция

В настоящее время я использую класс BackgroundSubtractorMOG2 для этого. он очень медленный. и моя задача не требует такого сложного алгоритма.

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

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

+0

Это после того, как вы скомпилировали программу в «Release»? Или вы тестируете это в «Debug»? –

+0

в выпуске .. частота кадров составляет около 6fps ... это, что нормально ?? я использую ноутбук 4 ГБ RAN i5 2.9 ГГц 3-го поколения CPU – user2389323

+0

И графическая карта? –

ответ

4

Предлагаю сделать как следующее, простое решение:

  1. Вычислить разность матрицы:

    • резюме :: absdiff (кадр, фон, absDiff);

    Это означает, что каждый пиксель (i, j) в absDiff установлен в | frame (i, j) - background (i.j) |. Каждый канал (например, R, G, B) обрабатывается независимо.

  2. Преобразовать результат для одного-каналов MONOCOLOR изображения:

    • резюме :: cvtColor (absDiff, absDiffGray, резюме :: COLOR_BGR2GRAY);
  3. Применить двоичный фильтр:

    • резюме :: порог (absDiffGray, absDiffGrayThres, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);

    Здесь мы использовали метод Ots'u для определения порогового уровня appriopriate. Если на шаге 2 был шум , двоичный фильтр удалил бы его.

  4. Применить обнаружение пятна в изображении absDiffGrayThres. Это может быть один из встроенных в метод OpenCV-х или вручную написанный код, посмотрите на позиции пикселей, которые Вейл являются 255 (помните о быстрой OpenCV пиксельных поисковых операций)

Такой процесс является достаточно быстро, чтобы справиться с 640х480 RGB изображений с частотой кадров не менее 30 кадров в секунду на довольно старом Core 2 Duo 2,1 ГГц, 4 ГБ оперативной памяти без поддержки графического процессора.


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

+0

Привет! Я пробовал этот метод еще до того, как поставить вопрос ... Но это было совсем не удачным. вероятно, из-за автоматической настройки диафрагмы ... как я могу отключить его? – user2389323

+0

Неудовлетворительные условия скорости выполнения или заданные результаты? – marol

+0

Отключение настройки диафрагмы зависит от камеры напрямую. Вам лучше найти, если у драйверов камеры такая возможность. Например, если у вас есть внешняя веб-камера, такая опция должна быть в панели управления веб-камерой. – marol

Смежные вопросы