Я новичок в OpenCV, и мне было интересно, кто-нибудь может направить меня к наиболее подходящему алгоритму (-ам) для решения задачи определения местоположения кругов и крестов на изображениях, которые выглядят следующим образом. ,
[Иногда есть линии, соединяющие. ,
[Они могут быть нарисованы от руки, как этот. ,
До сих пор я смотрел на пример соответствия шаблонов, но это, вероятно, неправильный подход, и он не масштабирует размеры шаблонов к изображениям.
Итак, учитывая следующие наблюдения. , ,
Где я должен начать свое приключение?
Задача не из легких.
Для цветного случая вы должны начать с разделения цветовых плоскостей. Есть некоторый шанс, что вы можете разложить маркеры.
Но для б&В случае, если нет выхода, вы должны идти глубже.
Сначала я бы попытался определить линии сетки, например, используя детектор линий Хафа, с максимально возможной точностью. Затем сотри эти строки.
Затем попробуйте найти крестики, представляющие собой короткие наклонные отрезки (большую часть времени разбитые предыдущими операциями).
Круги могут быть обнаружены детектором кругов Хафа с использованием небольшого диапазона радиусов.
В качестве альтернативы, детектор ребер или краев может быть использован для получения коротких сегментов и коротких изогнутых дуг. Возможно, вам придется добавить некоторые критерии фильтрации, чтобы избежать объединения линий.
Как сказано, это не простая задача.
Одним из возможных способов может быть машинное обучение. Я думаю о каскадном классификаторе (он же метод Виолы Джонса), который очень хорош для обнаружения объекта. Это довольно легко реализовать с помощью openCV, но для этого нужно понять, как это работает, и большое количество примеров.
Вы можете попробовать использовать пару идей:
1) БПФ может помочь удалить сетку. Что-то вроде этот.
2) Маркеры (крестики и окружности) — это объекты с углом наклона, который отличается от прямых углов. Это может помочь локализовать их.