А на сколько все это актуально? Уже давно считал эту проблему эффективно решенной и если нужна такая функциональность можно быстро найти уже реализованный кусок кода/библиотеку/детально расписанный алгоритм.
Вы приводите здесь этот алгоритм чтобы сказать что он лучше других, тогда я не нашел секции сравнения.
Вопрос языка, как вопрос религии, каждому своё.
Блок-схема наглядно показывает суть алгоритма.
Перваков нынче под дотНет штампуют; ничего плохого в этом не вижу, как и ничего хорошего. Если честно, без разницы на чем писать.
Я когда-то реализовывал довольно известный алгоритм интерактивной сегментации изображений GrowCut (он, кстати говоря, даже получил реализацию в виду плагина к фотошопу), основная направленность которого — отделение объекта от фона. Думаю, если его сюда применить с незначительными изменениями, он поможет находить буквы более точно. По крайней мере, не придется переводить картинку в двухцветную… Даже вроде бы где-то исходники еще валяются, тоже на Делфи кстати:)
Ну в общем-то да, на то он и интерактивный, только выделяются не границы, а «семена», т.е. какие-либо начальные пиксели на объекте и на фоне. Это можно сделать программно, указывая, к примеру, самые темные как начальные пиксели объекта, а самые светлые — как начальные фона.
И кстати, эта формула вообще ничего не даёт распознаванию. Для чёрно-белых картинок (суть двоичных n-мерных пространств) все расстояния изоморфны друг другу. Замените φ на 1/R или √(1/R), и результат распознавания не изменится.
Именно так, Вы не ошиблись. Только я пойму никак, Вы мне вопрос задаёте, возражаете, поддерживаете моё мнение, или Вы просто ответили на второй комментарий вместо первого?
Самая красивая теория (не факт что самая пригодная, но пять лет назад авторы веряли, что вероятность схожа с нейронными сетями) из того что видел — двухмерное динамическое программирование. Основано на (скрытых) марковских случайных полях ((H)MRF). Ознакомиться с ними можно хотя бы здесь.
В летней школе в прошлом году мы делали похожий проект.
Идея была аналогичная, только при этом еще на изображение накладывались несколько фильтров (которые можно было настраивать) для улучшения картинки и минимизации шумов-мусора.
Кроме того, для обработки сложных букв использовался такой подход:
1) Проходится вся страница, выделяются все буквы и части букв, распознаются. Символы-кандидаты на знаки препинания и точки над Ё и Й выделяются в отдельный список («плохие символы» в нашей тогдашней терминологии :-) ).
2) Потом они распределяются по строкам исходя из позиции на картинке.
3) Последовательно применяются пост-обработчики, которые пытаются найти и сшить соседние символы-части букв Ы и т. п.
4) Далее начинается обработка «плохих символов».
4.1) Просматриваются все символы, распознанные как И и Е. Если рядом с ними оказываются точки и черточки в нужных количествах, то они превращаются в Й и Ё, а использованные «плохие символы» удаляются из списка.
4.2) Потом из оставшихся «плохих символов» конструируются сложные знаки препинания типа двоеточий и равенств и они распихиваются в места в соответствии с положением на картинке.
4.3) Оставшиеся плохие символы считаются самостоятельными знаками препинания и размещаются по строкам опять же согласно их положению на картинке.
5) Коррекция регистра — заглавные буквы в середине слова переводятся в строчные, строчные буквы, имеющие схожее начертание с их заглавными вариантами, перед которыми есть точка, вопросительный или восклицательный знак, переводятся в заглавные. При этом учитывается размер образа корректируемой буквы по сравнению с соседними.
6) Нереализованный, хоть и запланированный этап — спелл-чекер для пущего повышения праавильности распознавания.
Распознаем текст, используя расстояние Хэмминга