SciKit-Image Transformation

时间:2016-11-30 14:58:14

标签: python numpy scikit-image

您好我对sciKit图像转换模块有疑问:

我正在尝试找到最佳的变换参数来平整我的图像。允许达到三次变换,即20个参数。我想要对我的三阶多项式进行初步猜测,该多项式将从已经获得的二阶多项式推导出来。但是我很难理解哪些参数分配在哪里:

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))

现在我试图理解二阶中哪些参数对应于三阶多项式中的哪些系数。我已经进行了几次测试:

    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 s提供给PolynomialTrasnsform 的方式!我做错了什么?!

我真正想做的是什么: 为了更好地理解 - 我试图找到一个坐标系,其中一组图像与其中位数的差异是最小的:

min_(an,bn): chi^2 = (Delta - I(f(x,y,a_n,b_n))^2

Quadratic transform Cubic transform

1 个答案:

答案 0 :(得分:0)

您好我已解决了我的问题:

如果在哪里传递变换参数a_n,b_n就像我定义的那样,正确的排序是:

二阶聚:

[a0,a1,a2,a3,a4,a5,b0,b1,b2,b3,b4,b5]

三阶聚:

[a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9]

一个人想要从二阶多项式继承到第三个多项式的值用第二个指数表示,第二个指数是二阶多项式的阶数,例如: a00(第3顺序)= a0(第2顺序):

三阶多项式的初始猜测:

[a00,a11,a2,a3,a4,a5,a62,a73,a84,a95,b00,b11,b2,b3,b4,b5,b62,b73,b84,b95]