Приложение для "Бегущего города" (проект)/Предобработка изображений

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск

Опыт показал, что на фотографиях заданий с большой вероятностью надо будет исправлять перекос, а доступная под андроидом распознавалка Tesseract этого не делает. Итак, как готовить изображения к распознаванию.

Преобразование цветного к серому

Значения цветов суммируются с весами, соответствующими яркости цветов, то есть примерно 0,2R + 0,7B + 0,1G (см. https://en.wikipedia.org/wiki/Grayscale#Colorimetric_.28luminance-preserving.29_conversion_to_grayscale).

Бинаризация

Затем надо преобразоввывать серое изображение к чёрно-белому, вычисляя порог бинаризации. Так как лист может быть освещён неравномерно, порог нужно вычислять отдельно для разных областей листа. Области лучше брать такие, чтобы в них по горизонтали и по вертикали попадало несколько букв. Порог надо подбирать исходя из того, чтобы в результате на листе получилось разумное соотношение между текстом и фоном, а также из условия типа SVM: чтобы яркость всех точек области была возможно дальше от этого порога.

Выделение строк

В тривиальном случае при небольших перекосах мы просто ищем горизонтальные белые полосы от края до края листа, а потом смотрим, нельзя ли из расширить, сделав наклонными. Но вообще это задача кластеризации букв — связных компонент чёрного на бинаризованном изображении, и решать её можно методами машинного обучения.

Исправление перекоса

Выделив строки, мы знаем, какой они формы, и можем вычислить линейное преобразование картинки (с меняющимися, если строки кривые) коэффициентами, которое сделает их прямыми. В моём опыте вместо честного поворота использовалась композиция верхнего унитреугольного и нижнего унитреугольного преобразования, приближающая его. Применив это преобразование к изображению, мы передаём его на распознавание.