Как в загруженном растровом изображении распознать круг, квадрат или треугольник?
Фигура черная на белом фоне.
Хотя бы скажите,где копать. Может, библиотека есть для этого?
Ответы (2 шт):
Сделал, тестовые файлы распознались. Поделюсь: может, кому-то будет полезно.
Принял три допущения:
- (условие задачи) Фигуры могут быть только трех видов: квадрат, круг и треугольник
- (следствие из условия задачи) в фигурах не может быть "вмятин" (не знаю, как красивее сказать, но, надеюсь, понятно)
- Фигура должна занимать заметное место в изображении. Ну хотя бы процентов 40.
Разбиваю высоту на 30 (эмпирически подобрал) равных частей. И каждую такую горизониальную линию прохожу от начала до конца с шагом ширина/30. И если предыдущая точка была белой, а текущая черной - запоминаю эту точку как точку контура, фиксируя также направление (ч-б или б-ч).
Затем самое трудное - сортирую эти точки, чтоб точки контура шли по порядку в контуре.
Затем ищу стороны - то есть точки подряд, почти лежащие на прямой (определяю по углу наклона, допустимое отклонение 0.3). И считаю стороны. 3 - треугольник, 4 - квадрат, остальное - круг.
Если кому-то интересно - могу кинуть ссылку на GitHub с кодом (Laravel 9)
Длинно для комментария, приведу ответом:
Попробуйте подход с использованием моментов изображения.
Если на картинке только одна фигура, считайте моменты по всем пикселам, если несколько - разделите на связные области, моменты считайте по областям.
Для образцов посмотрите, будут ли для данного множества фигур моменты давать явные признаки, позволяющие их различить. Если недостаточно, посмотрите ещё моменты Ху.