OpenCV — определяет регулярные шаблоны на видеокадре

Мне нужно определить полосатые узоры на видео последовательностях.

Я пытаюсь использовать OpenCV Houghlines функция для обнаружения линий шаблона. Как только у меня есть Houghlines(GREEN_lines) мне нужно знать, какие линии ближе всего друг к другу, и отбросить все остальные. Мне также нужно знать, сколько пар темных (RED_line) и светлых (BLUE_line) полос на изображении.

Затем мне нужно знать среднюю яркость области внутри каждой «коробки», образованной линиями Хафлайна.

Схема обнаружения

Шаблон может появляться в видеокадрах под разными углами (изображение справа).

Какие-либо предложения?

0

Решение

Предположим, что строки, полученные при применении преобразования Хафа, представляют собой L1, L2, …, Lk для k обнаруженных линий. Пусть каждая линия Li представлена ​​двумя точками ((x1i, y1i), (x2i, y2i)).

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

Как только вы узнаете, какие линии параллельны, а какие перпендикулярны, вы можете отсортировать их по x-координатам (для «вертикальных» линий) или y-координатам (для 2 «горизонтальных» линий).

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

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

0

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


По вопросам рекламы [email protected]