17:41

капелюх чарiвника
Расскажите, есть какой-то простой алгоритм идентификации простых геометрических фигур по заданному массиву точек?
То есть. Есть массив точек. На выходе хочется узнать, что это: просто мусор, или же круг, квадрат, ромб, прямоугольник.
Есть идеи?

@темы: Вопрос, Алгоритм

Комментарии
04.12.2010 в 18:11

~ For the greater good.
могу только посоветовать написать для каждой фигуры свою функцию:
1) если это круг, то мы можем взять любые три точки и провести через них круг, потом проверяя - находятся ли остальные точки на нём ( теория),
2) соответственно остальное можно проверить используя трансформацию Хафа (хотя это, наверное, не самый простой способ), с помощью неё можно определить уравнение прямых и потом, например, в разных комбинациях проверить - получается ли 4-угольник хотя бы в одном из вариантов, если да, то далее надо проверить все углы между прямыми, если они не 90 градусов, то это возможный ромб, если 90 то ещё проверить длину каждой прямой.
05.12.2010 в 01:34

капелюх чарiвника
.Принц Кристиан., спасибо.
Если объяснять ситуацию более подробно, то суть в следующем. Входные наборы точек - это нарисованные дрожащей рукой пользователя фигуры. Поэтому ни о каких прямых и углах речи быть не может до тех пор, пока не проанализированы точки и не найдены хотя бы вершины предполагаемых фигур. Тогда уже да, возможно применение инструментов, использующих прямые и углы.
05.12.2010 в 10:20

WAAAAAAAAAGH!!!!!!1111ONEONE
если ввод ещё и корявый (дрожащие руки), то лучше тогда вешать нейронки или нужно каким-то образом сперва избавиться от помех. иначе анализировать будет нечего. Например, можно попробовать представить точки в виде окружностей с некоторым радиусом и через эти окружности строить отрезки (т.е. чтобы отрезки через них проходили, по сути интерполяция), но это не позволит определить криволинейные фигуры.
05.12.2010 в 16:18

капелюх чарiвника
Vj_o-oy, предполагается, что фигуры только простые. Круг, квадрат, ромб, прямоугольник. Треугольник может быть, наверное.
Избавиться от помех предварительно - это мысль здравая, спасибо.
Надеюсь всё же обойтись без нейронной сети. К тому же, насколько я помню, нет нормального метода обучить нейронную сеть распознавать фигуры различных размеров, то есть масштабированию. Или я не прав?
05.12.2010 в 22:24

WAAAAAAAAAGH!!!!!!1111ONEONE
mistificator можно смасштабировать заранее, т.е. срезать поля.
05.12.2010 в 23:38

капелюх чарiвника
Vj_o-oy, если прямоугольник второпях нарисован как-нибудь так, то поля срезать не получится:

06.12.2010 в 12:02

WAAAAAAAAAGH!!!!!!1111ONEONE
mistificator ну, знаешь, я бы не подумал, что это проямоугольник. тут каг бэ шестиугольник невыпуклый скорее, или просто параллелепипед. нейронки разные бывают, если с ними заморачиваться, то нужно выбирать ещё, какие лучше подходят.
06.12.2010 в 12:17

капелюх чарiвника
Vj_o-oy, попробуй в paint'e инструментом "карандаш" нарисовать прямоугольник, или стилусом на экране телефона. Когда рисуешь быстро, то получается так, как я показал.
Задачка-то в том, чтобы не ты подумал, прямоугольник это или нет, а чтобы алгоритм вынес вердикт. Что-то вроде: "Это на 87% прямоугольник, на 32% квадрат и на 3% ромб. Получите, распишитесь".
06.12.2010 в 13:25

WAAAAAAAAAGH!!!!!!1111ONEONE
в таком случае получается следующий вывод: можно посадить несколько нейронок, каждая определяет свою фигуру, дальше уже вопрос в том, как получить с них статистику.
либо можно попробовать "выравнять" фигуру, в зависимости от параметров апроксимации будет получаться различный результат (набор прямых), тогда можно уже составить формальные правила и сверять по ним. т.е. наличие прямых углов, параллельность прямых, соотношение размеров и т.п., собственно основные признаки фигур проверять.
06.12.2010 в 14:01

капелюх чарiвника
вот уже не первый день думаю насчёт "выравнивания".
а тем временем мне подкинули полезную ссылку по моей теме "Распознавание геометрических фигур" - www.rsdn.ru/forum/alg/1705815.flat.aspx

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