Я применяю аффинное преобразование изображения и хочу создать новое изображение с новыми координатами. Я пытался применить интерполяцию ближайшего соседа, но на выходном изображении были только черные и белые линии.
Уравнение аффинного преобразования, которое я используйте как:
Output Image: [O]
[[X1],[Y1]] #size 2x1
Input Image: [I]
[[1,x1,y1,0,0,0],[0,0,0,1,x1,y1]] #size 2x6
Parameters: [P]
[[a],[b],[c],[d],[e],[f]] #size 6x1
#Example
img = Image.open('1.jpg')
w, h = img.size # Get image width and height.
pixel =img.load()
array = np.zeros([h,w, 3], dtype=np.uint8)
param = np.array([[ 1.53243119e+02],
[ 9.35290614e-01],
[ 1.45569842e-01],
[ 4.78183656e+01],
[-8.75871492e-03],
[ 9.83428511e-01]])
N = 2
a = np.meshgrid(np.arange(h), np.arange(w), indexing='ij')
output_pixel = np.transpose(a, np.roll(np.arange(N + 1), -1)).reshape(-1, N) # In here,I create
matrix with iterate all output image pixel coordinates.
for i in range(w*h):
out1 = np.array([output_pixel[i]])
out = out1.reshape(-1, 1) #Convert row matrix to column matrix.
n=np.dot(param,param.T)
m=np.linalg.inv(n)
b = np.dot(out, param.T)
inp = np.dot(b, m)
k, j = int(inp[0][1]), int(inp[0][2])
if 0<= j <w and 0 <= k <h:
array[tuple(output_pixel[i])]= pixel[j,k]
img = Image.fromarray(array)
img.save('test.png')
Для выполнения обратного отображения я сделал ниже:
[O] = [I]. [P]
[O]. [P_transpose ] = [I]. [P] [P_transpose]
b = [O]. [P_transpose]
n = [P]. [P_transpose]
[I ] = b.n_transpose
Где я делаю не так? Пожалуйста, помогите мне ....