Как узнать положение (x,y) и количество конкретных объектов или фигуры на изображении, нарисованном от руки?
Во-первых, я узнал всего пару недель об обработке изображений, NN, dll, сам, так что я действительно новичок и очень далёк от профессионала. извините за мой плохой английский.
есть изображение или фотография моего рисунка, я хочу получить координаты объекта / фигуры (черная точка) по числу вокруг него, число, обозначающее порядковый номер точки.
Как получить его? Как обнаружить точки? Распознавание формы для точек? Номер распознавания почерка для цифр? Затем сегментация, чтобы получить позицию? Или использовать сопоставление с шаблоном? Но каждая точка имеет немного другую форму из-за рисования от руки. Использовать нейронную сеть? в NN нейрон обычно содержит каждый пиксель для распознавания символа, верно? могу ли я использовать изображение персонажа или рисованную точку, содержащуюся в каждом нейроне, чтобы распознать всю мою картинку?
Я очень новичок, поэтому мне очень нужен твой совет, поправь меня, если я ошибаюсь! Пожалуйста, скажите мне, что я должен изучить, что я должен сделать, что я должен использовать. Большое спасибо.:'D
1 ответ
Это сложная проблема, которая не может быть решена с помощью быстрого решения.
Вот как я бы подошел к этому:
- Получите лучшую картину. Ваше изображение очень шумное и снимается при слабом освещении с высоким ISO. Используйте лучшую камеру и лучшие условия освещения, чтобы фон был максимально белым, а точки - черными. Попробуйте максимизировать контраст.
- Установите порог изображения так, чтобы весь фон был белым, а точки и цифры были черными. Возможно, вы могли бы применить некоторую эрозию и / или расширение, чтобы помочь соединить темные края вместе.
- Как-то определите прямоугольник и установите рабочую область внутри прямоугольника (обрежьте остальную часть изображения так, чтобы вы остались с областью внутри прямоугольника). Вы можете сделать это, обнаружив контуры на изображении, а затем контур, который имеет наибольшую площадь, является прямоугольником (потому что это самый большой объект на изображении). Конечно, это не единственный способ. Смотрите это: OpenCV находит контуры
- Как только у вас останутся только точки, круги и цифры, вам нужно найти способ их обнаружить и провести различие между ними. Вы можете снова найти все контуры (или, может быть, вы нашли их все из предыдущего шага). Вам нужно найти способ узнать, является ли определенный контур кругом, заполненным кругом (точкой) или числом. Это проблема сама по себе. Может быть, вы могли бы посчитать белые / черные пиксели в ограничительной рамке контура. Точки имеют больше черных пикселей, чем кружки и цифры. Вам также нужно что-то сделать с числами, которые соединяются точками (например, цифра 5 на вашем изображении)
- Как только вы узнаете, что такое точка, кружок или число, вы можете использовать библиотеку OCR ( Tesseract или любую другую библиотеку OCR), чтобы попытаться распознать числа. Вы также можете использовать библиотеку нейронной сети (может быть, обучена с набором данных MNIST) для распознавания цифр. Хорошей будет сверточная нейронная сеть, похожая на LeNet-5.
Как видите, это проблема, для решения которой требуется много разных шагов, и задействовано много разных компонентов. Шаги, которые я предложил, могут быть не самыми лучшими, но с некоторой работой я думаю, что это можно решить.