Обнаружение местоположения кругов и крестов на изображении

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

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

Иногда есть линии, соединяющие. ,

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

Они могут быть нарисованы от руки, как этот. ,

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

До сих пор я смотрел на пример соответствия шаблонов, но это, вероятно, неправильный подход, и он не масштабирует размеры шаблонов к изображениям.

Итак, учитывая следующие наблюдения. , ,

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

Где я должен начать свое приключение?

3

Решение

Задача не из легких.

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

Но для б&В случае, если нет выхода, вы должны идти глубже.

Сначала я бы попытался определить линии сетки, например, используя детектор линий Хафа, с максимально возможной точностью. Затем сотри эти строки.

Затем попробуйте найти крестики, представляющие собой короткие наклонные отрезки (большую часть времени разбитые предыдущими операциями).

Круги могут быть обнаружены детектором кругов Хафа с использованием небольшого диапазона радиусов.

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

1

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

Как сказано, это не простая задача.
Одним из возможных способов может быть машинное обучение. Я думаю о каскадном классификаторе (он же метод Виолы Джонса), который очень хорош для обнаружения объекта. Это довольно легко реализовать с помощью openCV, но для этого нужно понять, как это работает, и большое количество примеров.

0

Вы можете попробовать использовать пару идей:

1) БПФ может помочь удалить сетку. Что-то вроде этот.

2) Маркеры (крестики и окружности) — это объекты с углом наклона, который отличается от прямых углов. Это может помочь локализовать их.

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