Внедрение преобразованного изображения с использованием интерполяции ближайшего соседа - PullRequest
0 голосов
/ 02 мая 2020

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

Уравнение аффинного преобразования, которое я используйте как:

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

Где я делаю не так? Пожалуйста, помогите мне ....

...