Чтобы сохранить резкость двоичного изображения, я бы рекомендовал применить что-то вроде медианного фильтра . Вот пример этого:
from PIL import Image, ImageFilter
image = Image.open('input_image.png')
image = image.filter(ImageFilter.ModeFilter(size=13))
image.save('output_image.png')
, что дает нам следующие результаты:
Рисунок 1. Слева: Исходное входное изображение. Справа: Выходное изображение со средним фильтром размера 13.
Увеличение размера фильтра приведет к увеличению степени сглаживания, но, конечно, это будет компромисс, потому что вы также теряется высокочастотная информация, такая как острый угол в нижнем левом углу этого образца изображения. К сожалению, высокочастотные элементы похожи по своей природе на лестничные бордюры.