Хорошо, ребята, я думаю, что сделал все, что мог, кроме одной важной вещи: извлечение формы.Я уже делаю это довольно простым способом, но в некоторых случаях это действительно портит.Я делаю это следующим образом:
- Выберите точку в списке контуров, сгенерировав ограничивающий прямоугольник и выбрав ближайшую точку слева вверху (точка p).
- Создайтеновый объект Shape и добавьте p к контуру фигуры.
- Если на основном изображении больше нет точек, доступных для тестирования, мы просто возвращаем объект shape.
- Получаем ближайшую точку из pи сохраните его в ближайшем.
- , пока расстояние от ближайшей
точки до точки p меньше или
равно десяти - ---- Добавьте его в контур
- ---- Удалить его из списка мастер-точек
- ---- Установить p на ближайшую
- ---- Получить другую ближайшую точку от ближайшей
- ---- Повтор
- Если фигура имеет десять или менее точек на контуре, верните нулевой объект (игнорируйте все маленькие фигуры)
- В противном случае верните объект формы.
Я повторяю этот процесс, пока список основных пунктов не станет пустым.Это означает, что мы извлекли все фигуры.
Теперь я делаю комбинированные фигуры несколько раз.Это делает это так, если у меня есть |, --- и |рядом друг с другом он будет объединяться для создания прямоугольника.Вы понимаете, что я имею в виду?Допустим, у меня есть круг, приведенный выше извлекающий код иногда говорит, что половина круга - это одна фигура, а другая половина - другая фигура.Поэтому, когда я объединяю фигуры, это становится одним кружком.
Вздох, я тоже не могу публиковать фотографии и не могу загрузить это нигде, кроме сайта загрузки.Это имеет некоторые проблемы.Взгляните на следующее:
Изображение слева - это начальное изображение, а справа - контуры.Теперь я нажимаю кнопку определения формы.Он определяет форму наиболее доминирующей фигуры на изображении (объект формы, который содержит наибольшее количество точек на контуре).
Теперь правильно сказано, что это четырехугольник, но по неправильным причинам.Из-за моих комбинированных форм (которые нужно было сделать, чтобы получить даже прямоугольную форму, иначе это будет маленькая линия для одной фигуры и другая маленькая линия для другой фигуры), он добавил контур тестирования к тестированию.
Таким образом, проверяется вся единичная фигура (черный контур справа на втором рисунке).Не только часть «прямоугольник», но и все на этой картинке проверено.Не могли бы вы, ребята, придумать какой-нибудь способ убрать эту вещь и извлечь просто прямоугольную часть вместо того, чтобы включать пальцы?Я думал о некоторой вариации A * для этого, но в случае, подобном этой картине, он не создает петли.Итак, что мне делать, когда A * посещает каждую точку (поскольку она не может вернуться к начальной точке).Что мне тогда делать?
Может кто-нибудь помочь мне попытаться выяснить это, пожалуйста?