Удаление фонового шума изображения с картинки с помощью репликации обрезающего фильтра TesserCap

У меня есть изображение капчи, которое выглядит так:

Используя утилиту под названием TesserCapот McAfee, я смог применить «обрезной» фильтр на изображении (перед его запуском я убедился, что на изображении только два цвета, белый и черный). Меня очень впечатлили результаты использования этого фильтра со значением 2 в текстовом поле. Он точно удалил большую часть шума, но сохранил основной текст, в результате чего получилось следующее:

Я хотел реализовать что-то подобное на одном из своих собственных скриптов, поэтому я попытался выяснить, какую библиотеку обработки изображений использовал TesserCap. ничего не нашел. Оказывается, он использует свой собственный код для обработки изображения. Затем я прочитал этот технический документ , в котором объясняется, как именно работает программа. Он дал мне следующее описание того, что делает этот обрезающий фильтр:

Если количество смежных пикселей для заданных значений оттенков серого меньше чем число, указанное в числовом поле, фильтр прерывания заменяет эти последовательности на 0 (черный) или 255 (белый) по выбору пользователя. CAPTCHA анализируется как в горизонтальном, так и в вносятся вертикальные направления и соответствующие изменения.

Я не уверен, что понимаю, что он делает. Мой скрипт написан на Python, поэтому я попытался использовать PIL для управления пикселями, как описано в этой цитате.Звучит довольно просто, но у меня не получилось, вероятно, потому, что я действительно не знал, что именно делает фильтр:

(это сделано из немного другой капчи, использующей круговой шаблон.)

Я также пытался посмотреть, можно ли это легко сделать с помощью convert.exe от ImageMagick. Их опция -chop — это нечто совершенно другое. Использование -median вместе с некоторыми командами -morphology помогло немного уменьшить шум, но появились неприятные точки и буквы сильно исказились. Это было далеко не так просто, как создание прерывающего фильтра с помощью TesserCap.

Итак, мой вопрос заключается в следующем: как мне реализовать прерывающий фильтр TesserCap в Python, будь то с помощью PIL или ImageMagick? Этот обрезающий фильтр работает намного лучше, чем любые альтернативы, которые я пробовал, но я не могу воспроизвести его. Я работаю над этим в течение нескольких часов и еще ничего не понял.

10
задан Nicholas 28 June 2012 в 23:15
поделиться