Форум программистов, компьютерный форум CyberForum.ru

Распознавание числа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
02.12.2012, 17:00     Распознавание числа #1
Пишу лабу на С++ по распознаванию чисел ... первая лаба была легкая, там просто числа нарезал 1-9.бмп и по пиксельно читал и сравнивал с тем рисунком, что рукой по Canvas(у) рисовал.

Задача стоит, распознать число нарисованное в любой области канваса ... то есть если у меня канвас 100 на 80 и я рисую не на целый шаблон, а только цифру размером 1/4 от канваса. Какие есть алгоритмы, нахождения области цифры по Х та У координатам, что б потом можно было растянуть и на класть маску ???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 17:00     Распознавание числа
Посмотрите здесь:

Распознавание изображений C++
C++ Распознавание ключевых слов.
Распознавание кода C++
распознавание текста C++
C++ Распознавание текста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
07.12.2012, 12:36     Распознавание числа #2
botasa, если в лоб, то приходит в голову такой алгоритм: надо перебрать все вертикальный и горизонтальные полосы пикселей. Сначала перебираем, например, по вертикали, слева направо. Если в очередной полосе встретились пиксель/пиксели, по цвету отличные от фонового, то эта полоса - левая граница числа. Теперь то же самое, только слева направо. Таким образом, найдём вертикальную полосу, ограничивающую число. Проделав то же самое по горизонтали, найдём прямоугольник, который и заполняет наше число. По-другому, думаю, никак, ведь число располагается в любой области холста и может иметь любые размеры, значит, придётся просканировать весь холст.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
07.12.2012, 12:56     Распознавание числа #3
silent_1991, я бы еще добавил остальные две границы. От максимального значения ширины (высоты) канвы по убыванию. Чтобы в итоге иметь все четыре: верхнюю, нижнюю, левую, правую. По ним обрезать.
А потом надо как-то искать по косвенным признакам: к примеру, утрированно, если вертикально по центру картинки спуститься и при этом обнаружится такая последовательность смены цветов пикселей: "цвет, цвет фона, цвет, цвет фона, цвет", то это скорее всего цифра 8.

Не по теме:

А вообще распознавание чего бы то ни было - это надо умом рехнуться.

sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
07.12.2012, 15:23     Распознавание числа #4
botasa, у тебя плохой алгоритм распознавания. Лучше использовать в таком случае нейронные сети.

Читать топик: Нейронные сети.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
07.12.2012, 16:04     Распознавание числа #5
sovaz1997, что-то мне не кажется, что пороговая логика это хорошая область для начинающих программистов. Тем более здесь задача не стоит написать универсальный распознователь китайских иероглифов. Здесь жестко задан алфавит.

Распознавание числа
Я бы начал с
1) обрезки границ
2) разбиения полученного изображения на сектора в зависимости от предполагаемой цифры. Изменение приближения отвечало бы за точность узнавания вводимых символов.
3) поиска цветовых переходов, согласно предполагаемой цифре.

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















Или вот только что родилась идея метода обхода: находится первое изменение цвета (то есть пиксель цифры) и, продвигаясь в какую-нибудь сторону, наблюдать траекторию изменений направления цвета.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
07.12.2012, 16:45     Распознавание числа #6
Цитата Сообщение от SatanaXIII Посмотреть сообщение
я бы еще добавил остальные две границы. От максимального значения ширины (высоты) канвы по убыванию. Чтобы в итоге иметь все четыре: верхнюю, нижнюю, левую, правую.
Советую снова перечитать мой пост))
Цитата Сообщение от silent_1991 Посмотреть сообщение
Проделав то же самое по горизонтали, найдём прямоугольник, который и заполняет наше число.
Yandex
Объявления
07.12.2012, 16:45     Распознавание числа
Ответ Создать тему
Опции темы

Текущее время: 22:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru