Как стать автором
Обновить

Распознавание цифры по 4 точкам

Время на прочтение2 мин
Количество просмотров3.9K
Хочу поделиться, как я реализовал распознавание цифр без использования OCR библиотек на Delphi. Нужно было быстро и точно вытащить число из прямоугольника, размером 70 на 10 пикселей.

Пример исходного изображения в приближении 1600%


Первый шаг — преобразование исходной картинки в черно-белое.
Пробегался по каждому пикселю и сравнивал его цвет с «эталоном», если больше то преобразуем в белый, иначе в черный.


Таким образом, руками выделил шаблоны (образцы) всех цифр. Каждая цифра имеет размер 7 на 10 пикселей.


Далее разобъем каждую цифру на последовательность из нулей и единиц. Где 0 — белый цвет, 1 — черный. Например, для нуля


Таким образом, двигаясь слева направо сверху вниз получаем последовательность для каждой цифры:
0: '0011100011011011000111100011110001111000111100011110001111101100111100'
1: '0011000111100000110000011000001100000110000011000001100000110001111110'
2: '0111100111111000001100000110000011000011000011000011000011111101111111'
3: '0111100110111000001100000110011110001111100000110000011100001101111110'
4: '0000110000111000111100110110010011011001101111111111111100001100000110'
5: '1111100111110010000001000000111100000111000001110000111000011001111000'
6: '0011110011111011000001100000111111011101111100011110001111101110111110'
7: '1111110111111000001100001100000100000110000110000011000011100001100000'
8: '0011100011011011000110110110011110001111101100111110001111100110111110'
9: '0011100111111011000111100011110001111111110011011000011100001101111100'

По 4 точкам можно распознать до 24=16 уникальных значений, нам достаточно десяти.

Посчитаем количество возможных сочетаний четырех цифр из 70:
Ckn=n!/(k!*(n-k)!)=70!/(4!*66!)=70*69*68*67/4!=916895 сочетаний.

Нам нужны те сочетания, которые у всех цифр (от 0 до 9) будут различны (чтобы однозначно идентифицировать каждую цифру).

Перебором нашел следующие точки: (8,20,57,69)

Их координаты:


Теперь нам известны 4 точки по которым мы сможем однозначно определить цифру и сочетания для каждой цифры:
.

Всё. Теперь исходную картинку обрабатывал следующим образом: слева и справа находил значимые пиксели (черные), обрезал белые концы. Оставшуюся картинку делил на блоки по 7 на 10 пикселей. А в этих блоках сравнивал сочетания в 4 точках.

Буду рад, если кому-нибудь пригодится.
Теги:
Хабы:
Всего голосов 79: ↑56 и ↓23+33
Комментарии17

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн