Обнаружение маркеров с помощью OpenCV - PullRequest
3 голосов
/ 27 декабря 2010

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

Ответы [ 3 ]

5 голосов
/ 28 декабря 2010

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

0 голосов
/ 02 января 2011

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

     b   g   r   bias
r' [ -1  -1  1   -15 ]
b' [ 1   -1  -1  -15 ]

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

Затем,вы можете запустить cv :: findContours на выходных каналах, один за другим, чтобы найти благоприятно окрашенные капли.Затем, перебирая пары, 3 кортежа и т. Д. Больших двоичных объектов и выполняя некоторые геометрические проверки на них (например, если ваш маркер состоит из синего, красного и зеленого круга, вы должны убедиться, что эти три пузырька являются «круглыми»«достаточно формы и лежат близко друг к другу, чтобы считать их маркером, а не просто шумом) маркеры могут быть расположены.

Чтобы отслеживать их, вместо повторного запуска вышеуказанного алгоритма в каждом кадре, вы можете применитькакой-то CAMShift для отслеживания на основе meanShift после запуска cv :: transform.В случае CAMShifting следует проверять каждый кадр, если отслеживаемый объект по-прежнему является маркером, если требуется надежный трекер.

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

0 голосов
/ 27 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...