Я пытаюсь выпрямить текст на изображении монеты в оттенках серого (на нем я использовал обнаружение краев Канни, поэтому оно выглядит примерно так: https://encrypted -tbn0.gstatic.com / images? Q= tbn: ANd9GcQaaRPYtqZuy-o-zajZCWxmPDGBRbUJkTPmbMhIL9ex4gd-JNWjxA & s ) и необходимо реализовать в питоне следующее уравнение:
Учитывая уравнение окружности, P (x, y ', предположим,') - это пиксель исходного изображения, а p' (x ', y') - это новый пиксель выпрямленного изображения, рассчитанный по формуле:
x' = n * sin(z) + (w/2)
y' = n * cos(z) + (h/2)
с учетом: π
, где w и h - высота и ширина исходного изображения соответственно, b - половина общего числа столбцов исходного изображения, а c - количество строк внешнего кругаизображения, содержащие символы. Я программировал на Python раньше, но я впервые манипулирую пикселями.
Пока что я перебираю все пиксели изображения, перехватываю каждый из них и пытаюсь приблизить ограничение, используя диапазон(3, -3), чтобы создать новые координаты для моего выходного изображения. Я никогда раньше не пытался реализовать подобное уравнение, поэтому я просто потерян здесь.
import math
import numpy as np
from PIL import Image
im = Image.open('dilation.jpg')
im = np.array(im)
imageW = im.shape[0]
imageH = im.shape[1]
b = round(imageW / 2)
#Arbitrarily setting n, not sure how to properly implement
n = b + 1
#Create blank pixel map for straightened text image
new = np.zeros(im.shape)
#Loop through image to grab pixels
for x in range(imageW):
for y in range(imageH):
rgb = im[x,y]
#Set new coordinates, not sure how to implement equation
for i in range(3, -3,-1):
new_x = round(n * math.sin(i) + (imageW / 2))
new_y = round(n * math.cos(i) + (imageH / 2))
#Place pixel at new coordinates in output map
new[new_x, new_y] = rgb
#Construct output image from pixel map
new = Image.fromarray(new.astype('uint8'), 'RGB')
#Show output image
new.show()