Распознавание текста на примере защитной картинки SMS-отправки
- Опубликовано: 27.11.2006
Настоящая мини-статья является практической иллюстрацией к алгоритмам, изложенным на странице «Курсовая работа по обработке изображений», в частности, в её разделе «Распознавание текста».
В качестве примера для распознавания было выбрано изображение с сайта BeOnLine. Изображение содержит четыре цифры и служит для предотвращения беспорядочной отправки SMS-сообщений. Выбор пал на данное изображение по нескольким причинам: во-первых, изображение достаточно легко читаемо человеком и при этом достаточно трудно для компьютерного анализа; во-вторых, это личная симпатия к дизайну сайта (замечу, что даже цвет изображения, с которым мы будем работать, выдержан в цветовой политике «Билайна»). Итак, рассмотрим весь процесс по шагам и прокомментируем результат…
Шаг 1. Преобразование в градации серого
![Исходное изображение](/img/ocr-captcha/ocr01.jpg)
![Изображение в оттенках серого](/img/ocr-captcha/ocr02.jpg)
Переводим исходное цветное изображение в градации серого, как это описано в разделе «Изменение цветности…» – по формуле яркости. В дальнейшем будем работать только со значениями яркости (Y).
Шаг 2. Сглаживание с целью шумоподавления
![Изображение в оттенках серого](/img/ocr-captcha/ocr02.jpg)
![Сглаженное изображение](/img/ocr-captcha/ocr03.jpg)
Сглаживание (размытие) изображения с целью шумоподавления осуществляем с помощью одного из методов раздела «Наложение шума и фильтры шумоподавления», например, по Гауссу со значениями «сигма» = 1,0 и k = 3.
Шаг 3. Линейное контрастирование
![Сглаженное изображение](/img/ocr-captcha/ocr03.jpg)
![Контрастное изображение](/img/ocr-captcha/ocr04.jpg)
С применением информации раздела «Изменения яркости и контрастности» линейно корректируем изображение по яркости и контрастности.
Шаг 4. Получение маски областей изображения
Получаем маску областей изображения посредством объединения смежных точек в область. Критерием объединения является разница яркости двух смежных точек (разница > 14,0). Результатом является маска (массив). Размер маски будет совпадать с размером изображения. Одинаковые значения элементов маски означают принадлежность соответствующих точек изображения к одной области.
Шаг 5. Коррекция маски областей изображения
![Области изображения](/img/ocr-captcha/ocr05.jpg)
В маске областей изображения выделяются области, площадь которых превышает 200 пикселов (для понимания выше сказанного на рисунке искусственно показаны найденные области).
Шаг 6. Инверсия цвета областей
![Контрастное изображение](/img/ocr-captcha/ocr04.jpg)
![Изображение с инвертированными областями](/img/ocr-captcha/ocr06.jpg)
В найденных тёмных областях инвертируем яркость всех точек (то есть тёмные области заменяем их негативами, как это описано в разделе «Изменение цветности…»).
Шаг 7. Бинаризация (преобразование в чёрно-белое)
![Изображение с инвертированными областями](/img/ocr-captcha/ocr06.jpg)
![Чёрно-белое изображение](/img/ocr-captcha/ocr07.jpg)
Осуществляем бинаризацию всего изображения, как это описано в том же разделе «Изменение цветности…», используя в качестве порога срединное значение яркости (128).
Шаг 8. Выделение отдельных символов
![1-я цифра изображения](/img/ocr-captcha/ocr08-1.jpg)
![2-я цифра изображения](/img/ocr-captcha/ocr08-2.jpg)
![3-я цифра изображения](/img/ocr-captcha/ocr08-3.jpg)
![4-я цифра изображения](/img/ocr-captcha/ocr08-4.jpg)
Выделяем из чёрно-белого изображения отдельные символы, как это описано в разделе «Распознавание текста». Считаем, что минимальная ширина символа равна 5 пикселя, а минимальная высота символа равна 4 пикселя.
Шаг 9. Масштабирование символов
![1-я цифра изображения](/img/ocr-captcha/ocr09-1.jpg)
![2-я цифра изображения](/img/ocr-captcha/ocr09-2.jpg)
![3-я цифра изображения](/img/ocr-captcha/ocr09-3.jpg)
![4-я цифра изображения](/img/ocr-captcha/ocr09-4.jpg)
Приводим все символы к единому размеру 18 x 28 пикселов.
Шаг 10. Распознавание и его погрешность
![Распознанное изображение](/img/ocr-captcha/ocr10.gif)
Сравниваем полученные символы с шаблоном (шрифт шаблона – Arial, 36 пт, полужирный), рассчитываем среднюю пиксельную ошибку – как это описано в разделе «Распознавание текста».
Заключение
Основной задачей данной статьи была демонстрация совместного применения отдельных алгоритмов обработки изображений для решения задачи распознавания текста. С реальной программной реализацией описанного выше можно ознакомиться в виде исполняемого файла (для работы требуется установленный .NET Framework).
Тем не менее, описанное выше совместное применение алгоритмов обработки изображений нельзя назвать универсальным алгоритмом распознавания, так его погрешность может варьироваться в пределах 15 – 70%. Именно поэтому так называемые защитные картинки на сайтах – это по-прежнему одно из самых эффективных методов защиты от спам-роботов