![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
UFO
Регистрация: Jul 2007
Сообщений: 173
|
Может кто-то сталкивался, либо видел готовые библиотеки? Необходим простой движок для распознавания нарисованных от руки примитивов: круг, треугольник, квадрат и пр.
Распознавание и отрисовка уже нормального объекта без тремора от руки. |
|
|||||
|
Регистрация: Jun 2005
Адрес: Bryansk
Сообщений: 73
|
У меня в голове возникают только мысли о нейросети, но во флэше наверно много ресурсов будет кушаться... Готовых библиотек как-то не встречалось.
__________________
Flash can do it. |
|
|||||
|
[+3 13.02.08]
Регистрация: Apr 2006
Сообщений: 421
|
Если рисуется во флеш и линию можно запомнить, то все достаточно просто. В задачах распознавания образов на картинках проблема не в сопоставлении фигуры с образцом, а в отделении линии фигуры от линий фона. А если рисуется и распознается сразу, то можно довольно быстро сделать самому и никаких нейронных сетей не нужно, причем тормозов никаких не будет. Вот посмотрите в самом Flash Professional CS если вы рисуете линию, то она чудесным образом сглаживается.
Если нужно именно сгладить линию, то нужно воспользоваться аппроксимацией сплайном, а если нужно именно геометрический примитив распознать, то нужно его сопоставить с образцом. Короче, конкретизируй чего нужно и я примерный алгоритм накропаю Последний раз редактировалось VovkaMorkovka; 01.02.2008 в 13:39. |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 1,155
|
Уважаемый VovkaMorkovka, накропай, будь другом, алгоритм распознавания геометрических форм. ТЗ примерно такое
1. Имею битмапдату с программно нарисованным примитивом (ну давай для простоты черным по белому) а) Овалом (произвольного размера, наклона, растяжения б) Прямоугольником (те же самые вариации) в)Треугольником(см. выше) г)Прямая (см. выше) 2. Хочу иметь функцию типа: function_of_recognition(bitmapdata):String; где в качестве аргумента только битмапдата, (и более ничего) - на выходе строка с возможными значениями а) "окружность" б) "прямоугольник" в) "треугольник" г) "прямая" Мысль ясна? В путь, мысленно я с тобой ![]() Последний раз редактировалось flash33; 01.02.2008 в 14:46. |
|
|||||
|
[+3 13.02.08]
Регистрация: Apr 2006
Сообщений: 421
|
1) На битмапдате только сплошная выпуклая монтохромная фигура и белый фон?
2) Растянутый прямоугольник - есть паралелипипед это отдельно? 3) Что в твоем понимании прямая? |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 1,155
|
1.Да, но только не сплошная фигура, то есть beginFill с цветом фона
2.Параллелограм, это прямоугольник со skew, желательно, но можно и без него 3.Прямая, нарисованная программно moveTo(x1, y1); lineTo(x2, y2) Нечто, что похоже на прямоугольник, но не имеющего внутреннего заполнения. Последний раз редактировалось flash33; 01.02.2008 в 15:59. |
|
|||||
|
[+3 13.02.08]
Регистрация: Apr 2006
Сообщений: 421
|
Просто прямую можно считать прямоугольником
Так вот, алгоритм: 1) Проводим прямые вдоль битмапы 2) находим крайние точки фигуры, т.к. она выпуклая их будет либо 0 либо две на каждой линии 3) Проверяем не прямая - ли это, думаю понятно как это сделать ![]() 4) Берем любую точку, находим ближайшую к ней из массива точек, далее ближайшую к найденной и так получаем таблицу точек упорядоченную по некоторому параметру t 5) Далее аппроксимируем заданную ф - цию последовательно эллипсом, параллепипедом, треугольником центры которых находятся в центре масс фигуры, причем аппроксимация по этому самому параметру t. 6) Сравниваем полученные результаты, та фигура, которая даст наилучшее приближение и будет искомой Усе Последний раз редактировалось VovkaMorkovka; 01.02.2008 в 17:09. |
|
|||||
|
UFO
Регистрация: Jul 2007
Сообщений: 173
|
хм ... почитал, много думал.
Сегодня ночью не дождавшись ваших ответов написал небольшой пример. вот ссылка: http://***********/1718219 Впринципе работает все, но пока подглючивает, уже есть идеи как доработать. Как делал: Идея с нейронными сетями отпала сразу, как не реальная по времени написания. Хотелось быстро =). Принцип простой, в класс передается массив точек координат микролиний из которых рисуется фигура. Класс ищет углы, обрабатывая массив следующим образом. Берется произвольная точка в центре нарисованной фигуры и от неё мерятся длины к каждой точке, если у нас длина а < длины a + 1, и при этом а + 2 < a + 1, значит это угол. В итоге класс отдает простой массив углов, по которым рисуется фигура. Да, еще сделал если фигура открытая, но точка конца и точка начала почти совпадает, то я её закрываю. |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 1,155
|
ALIEN, мы тут вообще то про немного другое.
VovkaMorkovka, я запутался в Вашей терминологии... Если не трудно выложите реализацию в AS, а то может Вы это чисто теоретизируете, а смысла в этом вовсе нет. Сорри ![]() |
|
|||||
|
[+3 13.02.08]
Регистрация: Apr 2006
Сообщений: 421
|
Как будет время сделаю
|
![]() |
![]() |
Часовой пояс GMT +4, время: 21:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|