3

Я хочу взять снимок документа, который был сфотографирован, и сделать его похожим на сканирование. Поскольку сканер будет устанавливать постоянный источник света по всему документу, я хочу добиться этого эффекта на фотографии документа. Желательным эффектом было бы удаление любых теней или областей с низким освещением (или, по крайней мере, сделать их менее заметными), и чтобы вся фотография была достаточно яркой.Как сделать изображение однородной яркостью (с использованием Python/PIL)

Моя первая мысль заключалась в том, чтобы найти самую яркую часть целевого изображения, и они отображают всю яркость изображения. Предполагая, что это правильный алгоритм, как я могу это сделать в PIL? Есть ли метод яркости? и т.д?

(Это является продолжением до this earlier question.)

+0

Можете ли вы добавить образ вашего образца? – mmgp

ответ

2

В качестве первой попытки, попробуйте пороговой изображение. Темные области становятся черными, светлые области становятся белыми. Я не использовал PIL, но я думаю, что есть простой способ сделать это.

2

Попробуйте ImageChops.screen (image1, image2) с 2 копиями изображения. Если это неудовлетворительно, попробуйте выполнить некоторые другие функции модуля ImageChops.

Кроме того, вы можете сначала преобразовать его в оттенки серого: ImageOps.grayscale (изображение).

0

Сначала попробуйте вручную в программе редактирования изображений, например GIMP. Я думаю, что вы ищете регулировку яркости и контрастности.

+0

нет, это больше, чем когда более темная область должна обладать большей яркостью, чем уже яркая область. – Greg

0

Какое изображение? Если он должен быть идеально чистым и черно-белым, как и с текстовыми страницами, то ваши исходные данные, вероятно, являются чем-то вроде градиента градации серого с различными уровнями не совсем черных букв. Порог против константы может дать хорошие результаты, но не в том случае, если освещение слишком неровное или блики линзы мешают. Пороговое изображение с самой сглаженной версией. Разгладьте его с помощью PIL_usm.gblur (изображение, радиус), где радиус (в пикселях) - это что-то вроде десяти, двадцати или некоторого значения, сравнимого с шириной элементов букв. Быстрый hackcode из старых записей только для иллюстрации:

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... 

Ото, если эти документы есть фотографии или другие не двухуровневого графику, вам нужно быть более умным.

+0

Интересное предложение --- вы пробовали? –