【问题标题】:SciKit-Image TransformationSciKit-图像转换
【发布时间】:2016-12-01 01:36:02
【问题描述】:

您好,我有一个关于 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 输入 PolynomialTrasnsform 的方式!我做错了什么?!

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

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

【问题讨论】:

  • 您对哪种坐标变换感兴趣?成功变形的图像会是什么样子?您能否澄清“一组图像与其中值的差异”的描述?您是否正在尝试注册图像?
  • 你好 Stefan,我有一组 200 张天文图像,它们是从中间图像中减去的:pixel(i,j)_median=median(all pixel(i,j)) 显示出轻微的失真。我想使用坐标变换将它们展平:因此我正在寻找最佳(在 chi**2 意义上)坐标变换系数 a_n,b_n。我所做的是让最小二乘拟合器最小化(Median-wrap(Image_N,polytransform))。由于这需要数值微调,我从一阶多边形开始,将拟合的 a_n,b_n 传递给二阶拟合函数,而不是将这些值传递给三阶。但我已经解决了我的问题!

标签: python numpy scikit-image


【解决方案1】:

您好,我的问题已解决:

如果像我定义的那样传递转换参数 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(三阶)= a0(二阶):

三阶多项式的初始猜测:

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

【讨论】:

  • 顺便说一句,您几乎不需要像这样列出参数。您可以将二维数组转换为一维数组:np.ravel(x),并且您可以将多个参数传递给 Python 函数:my_func(*params)
  • 好吧,如果我不提供形状数组 (2,n),polyTransform 会抱怨:pCubic = np.asarray([0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0]) p = PolynomialTransform(pCubic) >>> raise ValueError("invalid shape of transformation parameters") ValueError: invalid shape of transformation parameters 这个接缝逻辑来自 scimage 的文档:skimage.transform.PolynomialTransform(params=None) params : (2, N) 数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 2014-02-09
  • 1970-01-01
  • 2018-04-01
相关资源
最近更新 更多