Какой тип изображения? Если предполагается, что он идеально чистый черный и белый, как на текстовых страницах, то ваши необработанные данные, вероятно, представляют собой градиент градаций серого с различными уровнями не совсем черных букв. Пороговое значение относительно константы может дать хорошие результаты, но не в том случае, если освещение слишком неравномерно или мешает блики объектива. Пороговое изображение против сглаженной версии себя. Сгладьте его, используя PIL_usm.gblur (изображение, радиус), где радиус (в пикселях) - это что-то вроде десяти, двадцати или некоторого значения, сопоставимого с шириной элементов букв. Быстрый взломанный код из старых заметок только для иллюстрации:
import Image
import PIL_usm
# see http://www.cazabon.com/pyCMS/PIL_usm.html for PIL_usm
img = Image.open(...)
sm = PIL_usm(img, 10)
thr = Image.ImageChops.subtract(img,sm, .001, 128)
# or whatever works 4u...
OTOH, если в этих документах есть фотографии или другая не двухуровневая графика, вам нужно быть более умным.