Гладкие текстовые границы - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть изображение ниже:

enter image description here

Я хочу сгладить его границы, но не удаляя кривые. Я хочу, чтобы это выглядело естественно как второе изображение. Как мне сделать это в Python?

enter image description here

Код:

 from PIL import Image
 import numpy as np

 image_counter = 1
 path = 'sample/' + str(image_counter) + '.png'
 image = Image.open(path).convert('1')
 image = np.array(image)

 #Image manipulation goes here.



 image = Image.fromarray(image)
 image.save('output.png')  

Если есть алгоритмы, аппроксимирующие кривую в линии (например, алгоритм Дугласа Пекера), я хочу, чтобы это было наоборот. Я хочу алгоритм, который сглаживает неровные линии в кривые. Это возможно?

1 Ответ

1 голос
/ 16 апреля 2020

Следующее, на мой взгляд, должно работать: возьмите 2D БПФ изображения, обрежьте высокочастотные компоненты, которые вызывают волнистые биты на границах, инвертируйте его обратно и получите сглаженное изображение.

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


После вашей строки #Image manipulation goes here:

imagefft = np.fft.fft2 (image)

Убейте высокочастотные биты этой функцией, которая обнуляет значения выше значения 85-го процентиля:

def smoothen(this):
    return this * (np.percentile(this, 85) > this)

Примените функцию smoothen к абсолютному значению двумерного обратного преобразования Фурье, и преобразовать полученный массив обратно:

imageres = (np.real(np.fft.ifft2(smoothen(np.real(imagefft)+np.imag(imagefft))))-
            np.imag(np.fft.ifft2(smoothen(np.real(imagefft)+np.imag(imagefft)))))

Используя plt.imshow(imageres), получим:

enter image description here

Увеличение контраста:

tminval = np.percentile(imageres, 10)
maxval = np.percentile(imageres, 90)
pixvals = np.clip(imageres, minval, maxval)
pixvals = ((pixvals - minval) / (maxval - minval)) * 255

Проверьте результат с помощью plt.imshow(pixvals):

enter image description here

Это явно не сработало.

I оставьте этот ответ здесь, потому что реализация, по общему признанию, неверна, теория верна, я считаю, что это может быть полезным в любом случае. Не стесняйтесь редактировать это.

...