Как в загруженном растровом изображении распознать круг, квадрат или треугольник?

Рейтинг: 1Ответов: 2Опубликовано: 24.01.2023

Фигура черная на белом фоне.

Хотя бы скажите,где копать. Может, библиотека есть для этого?

Ответы

▲ 1

Длинно для комментария, приведу ответом:

Попробуйте подход с использованием моментов изображения.

Если на картинке только одна фигура, считайте моменты по всем пикселам, если несколько - разделите на связные области, моменты считайте по областям.

Для образцов посмотрите, будут ли для данного множества фигур моменты давать явные признаки, позволяющие их различить. Если недостаточно, посмотрите ещё моменты Ху.

▲ 0

Сделал, тестовые файлы распознались. Поделюсь: может, кому-то будет полезно.

Принял три допущения:

  1. (условие задачи) Фигуры могут быть только трех видов: квадрат, круг и треугольник
  2. (следствие из условия задачи) в фигурах не может быть "вмятин" (не знаю, как красивее сказать, но, надеюсь, понятно)
  3. Фигура должна занимать заметное место в изображении. Ну хотя бы процентов 40.

Разбиваю высоту на 30 (эмпирически подобрал) равных частей. И каждую такую горизониальную линию прохожу от начала до конца с шагом ширина/30. И если предыдущая точка была белой, а текущая черной - запоминаю эту точку как точку контура, фиксируя также направление (ч-б или б-ч).

Затем самое трудное - сортирую эти точки, чтоб точки контура шли по порядку в контуре.

Затем ищу стороны - то есть точки подряд, почти лежащие на прямой (определяю по углу наклона, допустимое отклонение 0.3). И считаю стороны. 3 - треугольник, 4 - квадрат, остальное - круг.

Если кому-то интересно - могу кинуть ссылку на GitHub с кодом (Laravel 9)