Обнаружение креста в изображении
Я должен найти кресты на изображении. Что я знаю, так это точное положение каждого красного квадрата. Теперь я должен решить, есть ли крест внутри квадрата или нет. Какой самый лучший и быстрый способ сделать это? Я использую OpenCv/ C++! Ну, я мог бы попробовать использовать SVM OpenCv? Но это быстро? У тебя есть другие идеи?
4 ответа
Если у вас действительно есть координаты центра каждого числового поля, и вы, возможно, можете немного отрегулировать получение изображения, это должно быть выполнимой задачей. Проблема, которую я вижу здесь, состоит в том, что у вас есть градиент яркости на вашем изображении, от которого вы должны избавиться, либо сделав лучшую картинку, либо используя большой фильтр Гаусса и вычитая изображение. В противном случае я не уверен, что вы найдете хороший порог яркости, чтобы отделить пересеченное от непересекаемого.
Другой подход, который вы можете использовать, - это вычислить дисперсию ваших пикселей. Это дает вам хороший локальный показатель того, будет ли темное перо распространять ваше распределение пикселей. Быстрый тест выглядит многообещающе
Обратите внимание, что у меня не было реальных позиций коробок. Я просто разделил ваше изображение на равные по размеру области, что не совсем корректно в отношении структуры типа "блок / вложенный блок". Поэтому в нем есть несколько ложных срабатываний из-за красных треугольников в каждом верхнем левом углу и из-за некоторых пересекающихся крестов.
Итак, вот что я сделал:
- Возьмите свое изображение без красного канала и сделайте изображение серого уровня.
- Фильтрация этого изображения с гауссовым радиусом 100 и вычитание этого из изображения.
- Я разделил ваше изображение на (7*6)x(7*2) субрегионов.
- Вычислили дисперсию каждого субрегиона и использовали порог дисперсии около 0,017 для приведенного выше изображения
- Каждая коробка, которая имела большую дисперсию, была пересечена.
Простое решение: если вы знаете априорные местоположения всех блоков, просто рассчитайте среднюю яркость блока. Коробки с пометкой будут намного темнее пустых коробок.
Просто найдите прямоугольники, а затем выполните простое сравнение пикселей.
Если вы не можете обнаружить красные чернила, оставайтесь простыми: накапливайте все пиксели в пределах красного квадрата и пороговое значение "покраснения", то есть частное от суммы красных значений, деленной на общие значения цвета.