Вычитание фона в MATLAB - PullRequest
6 голосов
/ 09 июня 2010

Я хочу сделать вычитание фона на изображении. Я новичок в MATLAB и новичок в обработке / анализе изображений, поэтому извините, если что-то из этого звучит глупо. 1) Кроме imsubtract () , существуют ли другие способы вычитания фона (кроме сравнения одного изображения с другим)? 2) В Math Works объяснение для imsubtract () почему они делают свой структурирующий элемент диском? Пока это кажется довольно сложным, потому что каждый раз, когда я что-то пробую, я не только вычитаю шумный фон, но и теряю части изображения, на которые хочу посмотреть!

Ответы [ 3 ]

5 голосов
/ 09 июня 2010

С каким изображением вы работаете?

Фон Вычитание легко. Если вы хотите вычесть постоянное значение или фон того же размера, что и ваше изображение, вы просто пишете img = img - background. imsubtract просто гарантирует, что вывод равен нулю, если фон больше, чем изображение.

Фон Оценка сложно. Там вам нужно знать, на какое изображение вы смотрите, иначе оценка фона будет неудачной.

Если у вас есть, например, точечные или линейные объекты, которые являются либо темными на ярком, либо яркими на темном фоне, вы можете пройти с помощью локального фильтра максимума (imdilate) или локального фильтра минимума (imerode ), соответственно, это больше, чем ваши объекты, поэтому, где бы вы ни разместили маску фильтра, там есть некоторые пиксели, которые покрывают фон. Кроме того, вы хотите, чтобы фильтр имел форму, похожую на элементы. В вашем случае, если вы потеряете часть своего изображения, вы можете попробовать увеличить фильтр (но не слишком большой).

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

2 голосов
/ 01 сентября 2013

В наборе инструментов Computer Vision System имеется объект vision.ForegroundDetector , который реализует вариант вычитания фона Штауффера и Гримсона GMM.Реализация очень быстрая, используя несколько ядер.Посмотрите этот пример того, как использовать вычитание фона в качестве строительного блока системы для отслеживания нескольких объектов.

2 голосов
/ 12 декабря 2011

Чтобы вычесть фоновое изображение, вам нужна модель фона.Простейшая модель - это изображение, полученное в качестве фона вместе с некоторым допустимым отклонением (+/- 0-255).Тогда вычитание фона в MATLAB довольно просто:

image (find (abs (image-background) <= threshold)) = 0; </p>

Это становится более сложным, когда вы используете статистическую модель, но по сути вычесть фон довольно легко.imsubtract НЕ является фоновым вычитанием;это фильтр вычитания, который вы найдете в фотошопе.Он не заботится о фоне по сравнению с передним планом, который затем побеждает точку.

Поскольку вычитание фона само по себе довольно просто, вопрос становится больше об оценке фона.Это немного сложнее и, как правило, требует большего количества кадров и обучения для построения статистических моделей фона (например, рассматривая пиксели как гауссово распределение или смеси гауссианов, или вместо этого просматривая оптический поток, чтобы определить, что не движется).1007 *

Если у вас есть доступ к техническим статьям (через работу или в школе), «Пфиндер: Отслеживание человеческого тела в реальном времени» Рена и других дает довольно простой подход.Или вы можете просто искать в Google для вычитания одного гауссовского фона.Здесь есть ряд методов, реализованных с помощью OpenCV -> http://dparks.wikidot.com/source-code <- которые вы можете найти полезными. </p>

...