Обнаружение креста в изображении

Я должен найти кресты на изображении. Что я знаю, так это точное положение каждого красного квадрата. Теперь я должен решить, есть ли крест внутри квадрата или нет. Какой самый лучший и быстрый способ сделать это? Я использую OpenCv/ C++! Ну, я мог бы попробовать использовать SVM OpenCv? Но это быстро? У тебя есть другие идеи?

4 ответа

Решение

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

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

обработка лото

Обратите внимание, что у меня не было реальных позиций коробок. Я просто разделил ваше изображение на равные по размеру области, что не совсем корректно в отношении структуры типа "блок / вложенный блок". Поэтому в нем есть несколько ложных срабатываний из-за красных треугольников в каждом верхнем левом углу и из-за некоторых пересекающихся крестов.

Итак, вот что я сделал:

  1. Возьмите свое изображение без красного канала и сделайте изображение серого уровня.
  2. Фильтрация этого изображения с гауссовым радиусом 100 и вычитание этого из изображения.
  3. Я разделил ваше изображение на (7*6)x(7*2) субрегионов.
  4. Вычислили дисперсию каждого субрегиона и использовали порог дисперсии около 0,017 для приведенного выше изображения
  5. Каждая коробка, которая имела большую дисперсию, была пересечена.

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

Просто найдите прямоугольники, а затем выполните простое сравнение пикселей.

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

Другие вопросы по тегам