Отслеживание больших двоичных объектов в Aforge

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

тнк, в.


person tomato    schedule 23.08.2010    source источник


Ответы (1)


AForge.NET BlobCounter обеспечит поиск больших двоичных объектов, хотя он довольно прост и не поддерживает «битые» большие двоичные объекты. Если вы хотите реализовать простое отслеживание больших двоичных объектов, вы можете рассмотреть несколько вещей:

  1. Если ваши большие двоичные объекты время от времени фрагментируются, вам может потребоваться выполнить некоторую кластеризацию (поиск групп местоположений центра масс для объединения небольших фрагментов), чтобы получить точную оценку местоположения. При анализе нескольких кадров это увеличивает вероятность обнаружения граничных условий, таких как разбитые капли, поэтому это важно учитывать. С другой стороны, если вы хорошо контролируете условия (например, освещение), этого может быть достаточно. Незначительные разрывы (всего в несколько пикселей) могут быть устранены повторными операциями расширения/эрозии до того, как будет найдено пятно, хотя это также может усилить шум и снизить точность позиционирования.

  2. Для фактического отслеживания у вас есть несколько подходов. Фильтрация Калмана может дать вам очень хорошую точность (субпиксель), поскольку она объединяет информацию из нескольких кадров. Если вам не нужен такой уровень точности, вы можете рассмотреть очень простой алгоритм, например всегда выбирать достаточно большой двоичный объект, ближайший к самому последнему местоположению. Это работает, если объект движется не очень быстро и рядом с отслеживаемым объектом не появляются другие капли. Если вам нужна более высокая производительность анализа, вы также можете оценить скорость по последним двум кадрам и использовать ее для ограничения области, которую вы должны учитывать при поиске блоба.

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


ОБНОВЛЕНИЕ в ответ на ваш вопрос:

Утром есть всего несколько минут, поэтому кода нет, но основная идея такова:

  1. Рассмотрите только большие двоичные объекты, превышающие настраиваемый размер (вам, вероятно, придется определить это эмпирически).

  2. Сохраните информацию о двух последних найденных местоположениях больших двоичных объектов и времени их выборки. Назовем эти векторы в R2 p1 и p0 в моменты времени t1 и t0.

  3. Если предположить, что скорость меняется медленно, то предварительная оценка в момент времени t2 нового местоположения p2 = p1 + (t2-t1)*(p1-p0)/(t1-t0). Это может быть хорошим предположением, а может и не быть, так что вы захотите проверить это, сфотографировав свой объект с требуемым диапазоном движений.

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

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

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

person Dan Bryant    schedule 23.08.2010
comment
отличный ответ, как насчет справочного кода для варианта № 2 (комбинация размера и положения) - person tomato; 24.08.2010
comment
вау, да, ваш вывод великолепен, теперь я пойду кодировать, возможно, добавлю некоторую фильтрацию для пропущенных кадров. большое спасибо @Dan - person tomato; 24.08.2010