OpenCv Blob / Contour маркировка - PullRequest
       20

OpenCv Blob / Contour маркировка

4 голосов
/ 20 декабря 2008

Привет, я работал над этим некоторое время, но пока не нашел хорошего решения.

Я читаю видео кадр за кадром и использую вычитание фона для ' определите регион, в котором происходит движение, и используйте cvFindContours (), чтобы получить границу прямоугольника движущихся объектов.

При условии, что программа проста, может быть только 2 человека.

Эти объекты и движутся так, чтобы они могли перекрываться, поворачиваться и удаляться с определенным интервалом.

Как я могу правильно обозначить людей x 2.

cvFindContour может вернуть границу случайным образом. для Frame1, Frame2, Frame3 .... FrameN

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

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

Я подумывал об использовании Image Statistic, например:

CountNonZero (), SumPixels () Имею в виду() Mean_StdDev () MinMaxLoc () Норма ()

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

Ответы [ 3 ]

15 голосов
/ 20 декабря 2008

Это сложная проблема, и любое решение не будет идеальным. Компьютерное зрение в шутку называют дисциплиной «полный ИИ»: если вы решаете компьютерное зрение и вы решили весь искусственный интеллект.

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

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

Есть также еще несколько более сложных техник, называемых многоуровневое отслеживание . Есть более поздние работы Джоджика и Фрея , Винна , Чжоу и Тао и других. Большинство из этих методов основаны на очень строгих предположениях и / или требуют много работы для правильной реализации.

Если вам вообще интересна эта тема, я настоятельно рекомендую пройти курс компьютерного зрения и / или почитать учебник, такой как Понсе и Форсайт .

1 голос
/ 20 декабря 2008

Звучит сложно, особенно если в видео много шума.

Возможно, выявление различных случаев взаимодействия двух людей. Некоторые примеры:

  1. Два человека встречаются, затем либо поворачивают в обратном направлении, либо продолжают свой курс
  2. Встречаются два человека, затем только один человек меняет курс или продолжает свой курс
  3. Встречаются два человека, затем один человек остается, а другой движется в направлении, "нормальном" для обзора камеры, то есть в сторону или в сторону камеры

Учебники Computer Vision могут помочь в определении других случаев.

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

1 голос
/ 20 декабря 2008

Вы можете попытаться запомнить один угол каждого кадра (например, вверху слева). Затем, когда вы получаете новый набор кадров, вы сравниваете расстояние их углов с ранее сохраненными. Это, конечно, не идеальное решение.

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