Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Распознавание графических примитивов (http://www.flasher.ru/forum/showthread.php?t=107413)

ALiEN_ 01.02.2008 00:41

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

Распознавание и отрисовка уже нормального объекта без тремора от руки.

Pecher 01.02.2008 10:15

У меня в голове возникают только мысли о нейросети, но во флэше наверно много ресурсов будет кушаться... Готовых библиотек как-то не встречалось.

VovkaMorkovka 01.02.2008 13:22

Если рисуется во флеш и линию можно запомнить, то все достаточно просто. В задачах распознавания образов на картинках проблема не в сопоставлении фигуры с образцом, а в отделении линии фигуры от линий фона. А если рисуется и распознается сразу, то можно довольно быстро сделать самому и никаких нейронных сетей не нужно, причем тормозов никаких не будет. Вот посмотрите в самом Flash Professional CS если вы рисуете линию, то она чудесным образом сглаживается.
Если нужно именно сгладить линию, то нужно воспользоваться аппроксимацией сплайном, а если нужно именно геометрический примитив распознать, то нужно его сопоставить с образцом. Короче, конкретизируй чего нужно и я примерный алгоритм накропаю

flash33 01.02.2008 14:43

Уважаемый VovkaMorkovka, накропай, будь другом, алгоритм распознавания геометрических форм. ТЗ примерно такое
1. Имею битмапдату с программно нарисованным примитивом (ну давай для простоты черным по белому)
а) Овалом (произвольного размера, наклона, растяжения
б) Прямоугольником (те же самые вариации)
в)Треугольником(см. выше)
г)Прямая (см. выше)
2. Хочу иметь функцию типа: function_of_recognition(bitmapdata):String;
где в качестве аргумента только битмапдата, (и более ничего) - на выходе строка с возможными значениями
а) "окружность"
б) "прямоугольник"
в) "треугольник"
г) "прямая"
Мысль ясна? В путь, мысленно я с тобой :)

VovkaMorkovka 01.02.2008 15:25

1) На битмапдате только сплошная выпуклая монтохромная фигура и белый фон?
2) Растянутый прямоугольник - есть паралелипипед это отдельно?
3) Что в твоем понимании прямая?

flash33 01.02.2008 15:53

1.Да, но только не сплошная фигура, то есть beginFill с цветом фона
2.Параллелограм, это прямоугольник со skew, желательно, но можно и без него
3.Прямая, нарисованная программно
moveTo(x1, y1);
lineTo(x2, y2)
Нечто, что похоже на прямоугольник, но не имеющего внутреннего заполнения.

VovkaMorkovka 01.02.2008 16:59

Просто прямую можно считать прямоугольником

Так вот, алгоритм:
1) Проводим прямые вдоль битмапы
2) находим крайние точки фигуры, т.к. она выпуклая их будет либо 0 либо две на каждой линии
3) Проверяем не прямая - ли это, думаю понятно как это сделать :)
4) Берем любую точку, находим ближайшую к ней из массива точек, далее ближайшую к найденной и так получаем таблицу точек упорядоченную по некоторому параметру t
5) Далее аппроксимируем заданную ф - цию последовательно эллипсом, параллепипедом, треугольником центры которых находятся в центре масс фигуры, причем аппроксимация по этому самому параметру t.
6) Сравниваем полученные результаты, та фигура, которая даст наилучшее приближение и будет искомой

Усе

ALiEN_ 01.02.2008 17:27

хм ... почитал, много думал.

Сегодня ночью не дождавшись ваших ответов написал небольшой пример. вот ссылка: http://***********/1718219

Впринципе работает все, но пока подглючивает, уже есть идеи как доработать.

Как делал:
Идея с нейронными сетями отпала сразу, как не реальная по времени написания. Хотелось быстро =).
Принцип простой, в класс передается массив точек координат микролиний из которых рисуется фигура. Класс ищет углы, обрабатывая массив следующим образом. Берется произвольная точка в центре нарисованной фигуры и от неё мерятся длины к каждой точке, если у нас длина а < длины a + 1, и при этом а + 2 < a + 1, значит это угол.
В итоге класс отдает простой массив углов, по которым рисуется фигура. Да, еще сделал если фигура открытая, но точка конца и точка начала почти совпадает, то я её закрываю.

flash33 01.02.2008 17:59

ALIEN, мы тут вообще то про немного другое.
VovkaMorkovka, я запутался в Вашей терминологии... Если не трудно выложите реализацию в AS, а то может Вы это чисто теоретизируете, а смысла в этом вовсе нет. Сорри :)

VovkaMorkovka 01.02.2008 18:01

Как будет время сделаю


Часовой пояс GMT +4, время: 01:59.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.