для проекта в OpenCV. Я хотел бы сегментировать движущиеся объекты как можно лучше с, конечно, минимальным шумом.
Для этого я хотел бы использовать алгоритм вычитания изображения .
cvAbsDiff(this->lastFrame,grayScale,output);
cvThreshold(output,output,10,250, CV_THRESH_BINARY);
cvErode(output,output, NULL, 2);
cvDilate(output,output, NULL, 2);
Чтобы избавиться от этого шума, я попытался размыть и расширить изображения с помощью cvErode ()
и cvDilate ()
, но это довольно медленно, и если движущиеся объекты на экране small, эрозия удаляет очень немного большую часть объекта, поэтому после удаления я не всегда получаю хороший результат или разбиваю объекты.
После этого я выполняю cvFindContours ()
, чтобы получить контуры, проверьте размер и, если он подходит, нарисуйте прямоугольник вокруг движущихся объектов. Но результаты плохие, потому что часто объект разбивается на несколько прямоугольников из-за плохой сегментации.
Мой друг сказал мне, что я могу попробовать использовать более двух следующих кадров для вычитания, поскольку это уже может уменьшить шум ... но Я не Я действительно знаю, что он имел в виду и как я должен добавлять / вычитать кадры, чтобы получить изображение, которое почти не содержит шумов и показывает достаточно большие объекты.
Кто-нибудь может мне с этим помочь? Как я могу использовать более одного кадра, чтобы получить изображение с минимально возможным шумом, но с достаточно большими пятнами для движущихся объектов? Буду благодарен за любые советы ...
ДОПОЛНЕНИЯ:
Я загрузил текущее видео прямо здесь: http://temp.tinytall.de/ Может быть, кто-нибудь захочет попробовать его там ...
Это кадр из него: левое изображение показывает мои результаты cvFindContours (), а правое - сегментированное изображение, на котором я затем пытаюсь найти контуры ...
Итак, один большой объект он отлично работает, если они двигаются достаточно быстро ... то есть на велосипеде ... но при ходьбе с людьми это не всегда дает хороший результат ... Есть идеи?