Показать сообщение отдельно

  #2  
Старый 22.05.2010, 09:56
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Когдато подобным пытался заниматься, но забил на это.
А вообще идея была в том, чтобы взять алгоритм обхода препятствий (в исходниках для игр много их). И вот выбрать саму крайнюю левую точку. И в алгоритме обхода задать условие - прийти из неё в неё же. но делай обход по часовой стрелке и не проверяя первый шаг. Главное чтобы обход был тока в одну сторону движения.
И получалась примерно такая работа:
1) черная точка - стена, её нужно обойти.
2) как столкнулся с черной точкой, так запомнил её координаты.
3) далее по гонять обход подобным методом.
4) когда ты встретил точку из которой начал движение, то у тебя уже будет иметься набор координат внешних точек, который составляют многоугольник.
5) берешь копируеш этот многоугольник себе - это будет готовая выдранная буква
6) по координатам этого многоугольника делаеш заливку белым цветом (цветом фона) и в конечном итоге ты удалешь с рисунка выделенную букву.
7) далее желательно в той области где ты удалил букву опять убрать шумы (могут случайно отстаться случайные точки)
8) Опять находишь крайнюю точку и повторяй действия.

Хотя тут судя по виду набор букв одинаковый тут имеется. Так что сразу выбери образы всех букв. И далее поворотом картинки сверяй с образами. хотябы просто по кол-ву совпадающих точек
Если так прокатит то относительно быстро будет распознаваться.
Вот если посчитать, что
1) угол поворота достаточно будет 5 градусов.
2) всего 90 градусов (типа максимум 45 в одну сторону наклон и в другую стокаже)
3) нужно значит максимум 18 позиций проверить
4) в англ алфавите 26 букв, итого получается максимум сравнений 468
5) если учесть что на капче 6 символов, то 2808 сравнений.
6) если учесть что буква каждая буква максимум 30*30 то 900 точек сравнить надо
7) итого 2808 * 900 = 2527200 точек сравнить надо для распознавания.
Если учесть что код будет иметь среднюю оптимизацию (чисто ток работа с памятью)
то на обычных процах в однопотомном режиме выйдет 16-32 миллесек. И то это за счет того что поток будет прерываться по истечению процессорного времени.