Обнаружение креста в изображении - PullRequest
4 голосов
/ 13 декабря 2011

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

Ответы [ 4 ]

5 голосов
/ 13 декабря 2011

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

5 голосов
/ 14 декабря 2011

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

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

lotto processing

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

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

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

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

0 голосов
/ 13 декабря 2011

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

...