Поиск порядка объектов с помощью OpenCV 3

Вместе с группой друзей мы пытаемся выполнить задачу компьютерного зрения на Raspberry Pi, кодируя на C ++ с использованием библиотеки OpenCV.

Позвольте мне сначала объяснить задачу.
Существует шаблон, состоящий из 16 отдельных квадратов, каждый из которых имеет красный, желтый или синий цвет. Мы монтируем rasperry pi на квадрокоптер с его модулем камеры и собираем видеопоток шаблона.

Мы должны определить цвета квадратов, что было легко сделать с помощью небольшого исследования в Интернете. Сложность в том, что мы также должны определить порядок квадратов, чтобы сохранить цвета в массиве в порядке.

Пока что мы выполнили фильтрацию желаемых цветов (красный, желтый, синий) для определения квадратов.

пример шаблона, чтобы распознать и наш процесс до сих пор

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

И чтобы найти порядок, мы попробовали несколько методов OpenCV, которые находят углы. Имея угловые точки под рукой, мы сравнили каждую точку и определили конечные точки, чтобы мы могли нарисовать ограничивающий прямоугольник и преодолеть небольшие искажения.

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

сильно искаженное изображение

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

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

Заранее спасибо.

0

Решение

Возьмите два наиболее удаленных центра и пронумеруйте их 1 и 16. Затем найдите два центра, наиболее удаленных от линии 1-16, слева (номер 4) и справа (номер 13). Теперь у вас есть четыре угла.

Вычислить аффинное преобразование, которое отображает координаты углов 1, 4 и 13 в (0,0), (3,0) и (0,3). Примените это преобразование к 16 центрам и округлите до ближайших целых чисел. Если все пойдет хорошо, вы получите «логические» координаты квадратов в диапазоне [0, 3] x [0, 3]. Отображение на индексы ячейки происходит немедленно.

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

введите описание изображения здесь

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector