| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > распознавание образа |
| Автор: bagos 30.10.2009, 04:27 |
| Народ кто сталкивался с распознованием образов, нужно распознавать цифры от 0 до 99. Сам впервые с этим сталкиваюсь. На картинке число 8, его то и надо определить. http://ipicture.ru/ |
| Автор: bagos 30.10.2009, 04:57 |
| нашел программу, которая довольно лихо определяет текст, но она определяет только если текст черного цвета, а фон белого. Пробовал переводить в ч/б цвет,все равно не помогло. |
| Автор: Alexeis 30.10.2009, 10:02 |
| bagos, цифры всегда точь в точь такие? Картинка BMP? |
| Автор: bagos 30.10.2009, 12:57 |
| картинка bmp,цифры всегда такие, только по горизонтали могут быть расположены слева,в центре или справа. Добавлено через 10 минут и 58 секунд Alexeis, на самом деле картинка изначально цветная(фон один и тот же, цвет числа может быть желтым, зеленым,синем,красным), это я ее перевел в черно белую, предполагая что так будет правильней привести к какому то знаменателю. Вот исходная http://ipicture.ru/ и еще http://ipicture.ru/ |
| Автор: Alexeis 30.10.2009, 13:36 |
| Способ такой, делаются образы всех цифр. Дальше берем первую цифру из образа и начинаем попиксельно сравнивать строки картинок. Если нашли различие то сдвигаемся вправо на 1 пиксель в основной картинке и сравниваем снова построчно картинку и образ. Если такая цифра есть, то в определенной позиции все построчные сравнения совпадут, это место нужно запомнить (позицию по Х). Тоже самое сделать с образами всех цифр. Результаты объединяем в массив, где каждый элемент цифра + позиция. Сортируем массив по возрастанию, по полю позиция. |
| Автор: bagos 30.10.2009, 14:01 |
| Alexeis, спасибо! Алгоритм вроде не сложный, буду реализовывать))) |
| Автор: bagos 31.10.2009, 19:35 |
| Хотя опыта работы с графикой не имею. 1. Сделать образы всех цифр,это как делается? сохранить картинку с каждым числом в файл? Прошу разъеснить! |
| Автор: Alexeis 31.10.2009, 19:48 |
Можно в файл, можно в ресурс, как удобно. Затем загрузить в TBitmap. В графическом редакторе вырезать и создать отдельную картинку. |
| Автор: bagos 31.10.2009, 19:59 |
| Спасибо за ответ! Картинки что я здесь выкладывал с цифрами, являются образами? или все таки их нужно обрезать по краям |
| Автор: Alexeis 31.10.2009, 20:01 |
| Главное не резать сверху и снизу. |
| Автор: bagos 31.10.2009, 22:19 | ||||
| Alexeis, образы сделал(все картинки с числами обрезал и сохранил) выглядит так http://ipicture.ru/ а картинка которую будем получать на входе для распознавания http://ipicture.ru/ у меня вопрос, а зачем заморочки с пикселями? почему просто не сделать образы такими же как картинка подается на вход, а потом просто попиксельно сравнивать картинки, тогда получиться что они полностью одинаковы?
поясните пожалуйста что значит сравнить строки картинок? картинка состоит из пикселей, мы сравниваем каждый пиксель по столбцам и строкам типа
что то, кстати что))) |
| Автор: Alexeis 31.10.2009, 23:19 |
| bagos, я говорил образы цифр, а не чисел. Это разные вещи... Физически битмап храниться как массив строк. CompareMem сравнивает куски памяти, при том довольно быстро. Пикселы в строке идут непрерывно, байт за байтом, поэтому за 1 вызов можно сравнить целую строку. |
| Автор: bagos 1.11.2009, 16:06 | ||||
делаю так
здесь должно быть построчное сравнение строк, правда я запутался
|
| Автор: Alexeis 1.11.2009, 21:06 |
| bmp_now.Width*bmp_now.Height*3 это размер всего растра. Длинна строки bmp_now.Width*3 CompareMem нужно делать в цикле от нуля до bmp_now.Height - 1 |
| Автор: bagos 1.11.2009, 22:07 | ||
помогите с реализацией кода, сам не справляюсь Добавлено через 5 минут и 30 секунд создал 10 файлов bmp - образы цифр, от 0 до 9 соответственно. |
| Автор: Alexk553 20.11.2009, 02:54 |
| Если сами цифры всегда выглядят одинаково, то можно вообще обнаглеть, и распознавать цифры по количеству используемых ими засвеченных пикселей. считать вертикальными полосами, например, слева направо. как только в двух подряд (или сколько там) не будет ни единого пикселя, задача распознавания цифры завершена и переход к новой цифре. В итоге будет формироваться одномерный массив - число засвеченных пикселей. Индекс массива - это положение по горизонтали. у каждой цифры будет свой паттерн. например 0 0 5 6 7 3 3 3 3 3 3 3 3 4 6 7 1 0 0 0 0 ловим хвостовые и начальные нули, складываем то, что посредине, имеем цифру. (цифры написал от балды). |
| Автор: cemick 20.11.2009, 10:02 |
| Зачем велосипед снова изобретать? Это же всегда делалось с помощью нейронной сети и обучением на тестовых образах. |
| Автор: Alexk553 21.11.2009, 11:00 |
| А ещё можно из пушки по воробьям стрелять. У человека нет задачи распознавания букв, которые были искажены, повёрнуты, масштабированы. |