Здравствуйте, у меня есть вопрос относительно модуля преобразования изображений sciKit:
Я пытаюсь найти оптимальные параметры преобразования, которые сделают мои изображения плоскими. Допустимо до кубического преобразования, т.е. 20 параметров. Мне нужно начальное предположение для моего полинома третьего порядка, которое должно быть выведено из уже полученного полинома 2-го порядка. Однако у меня возникают проблемы с пониманием того, какие параметры назначаются где:
import numpy as np
import matplotlib.pyplot as plt
from skimage.transform import warp
from skimage.transform import AffineTransform
from skimage.transform import PolynomialTransform
def polynomialTransform(a0,a1,a2,a3,a4,a5,b0,b1,b2,b3,b4,b5):
array = np.zeros((2,6))
array[0][0] = a0
array[0][1] = a1
array[0][2] = a2
array[0][3] = a3
array[0][4] = a4
array[0][5] = a5
array[1][0] = b0
array[1][1] = b1
array[1][2] = b2
array[1][3] = b3
array[1][4] = b4
array[1][5] = b5
return(PolynomialTransform(array))
def polynomialTransform2(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9):
array = np.zeros((2,10))
array[0][0] = a0
array[0][1] = a1
array[0][2] = a2
array[0][3] = a3
array[0][4] = a4
array[0][5] = a5
array[0][2] = a6
array[0][3] = a7
array[0][4] = a8
array[0][5] = a9
array[1][0] = b0
array[1][1] = b1
array[1][2] = b2
array[1][3] = b3
array[1][4] = b4
array[1][5] = b5
array[1][2] = b6
array[1][3] = b7
array[1][4] = b8
array[1][5] = b9
return(PolynomialTransform(array))
Теперь я пытаюсь понять, какие параметры из 2-го порядка соответствуют каким коэффициентам в полиноме 3-го порядка. Я провел несколько тестов:
def doTransfrom(cubeROI): #Enter any image in the format of an n*m numpy array
x0 = np.asarray([1,1,0,0,0,0,0,0,1,1,1,1])
pCubic = np.asarray([1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1])
quadratic=warp(cubeROI,polynomialTransform(x0[0],x0[1],x0[2],x0[3],x0[4],x0[5],x0[6],x0[7],x0[8],x0[9],x0[10],x0[11]))
cubic=warp(cubeROI,polynomialTransform2(pCubic[0],pCubic[1],pCubic[2],pCubic[3],pCubic[4],pCubic[5],pCubic[6],pCubic[7],pCubic[8],pCubic[9],pCubic[10],pCubic[11],pCubic[12],pCubic[13],pCubic[14],pCubic[15],pCubic[16],pCubic[17],pCubic[18],pCubic[19]))
plt.imshow(quadratic)
plt.show()
plt.imshow(cubic)
plt.show()
Как видите, первые 2 и последние 4 параметра соответствуют друг другу... Однако я изо всех сил пытаюсь выяснить 5 параметров, оставшихся от квадратичного преобразования. На самом деле у меня такое ощущение, что ни один из параметров, следующих после 'a1', ничего не делает - Таким образом, я считаю, что моя проблема возникает из-за того, как я передаю свои an/bn в PolynomialTrasnsform! Что я делаю не так?!
Что я действительно пытаюсь сделать: Для лучшего понимания - я пытаюсь найти систему координат, для которой отличие набора изображений от его медианы минимально:
min_(an,bn): chi^2 = (Delta - I(f(x,y,a_n,b_n))^2