使用 skimage 的 transform.PolynomialTransform.estimate 将点对齐到网格

问题描述

假设我有一个坐标形式的点列表,它们应该在现实中形成一个完美的网格,但有些扭曲(如下图所示)。您会注意到点之间的间距有所不同,但我正在寻找一种方法,通过查找多项式系数来校正这种失真,从而使该图像完全一致。

image

在我的尝试中,我尝试使用 skimage's transform method,如下面的代码行所示:

transform.PolynomialTransform.estimate(original_points,destination_points,3)

但是,这有一些问题。首先,我不知道 points 参数的确切格式。我在其他格式中使用过像 [[x1,y1],[x2,y2],...] 这样的列表,但它总是出现以下错误:

TypeError: list indices must be integers or slices,not tuple

第二个问题是,即使我设法正确格式化点,该函数似乎也不会返回任何多项式系数来实际应用此校正。

我在这里问的是:

  • 如何正确使用estimate函数返回多项式校正系数(包括如何正确输入参数)?
  • 或者,是否有其他功能更容易用于此目的?

所以这个问题可以重现,尝试使用以下几点:

(0,0),(2,(1,1),(0,2),2)

并将这些点与这些新点进行拟合:

(0,(4,3),6),6)

请注意,我希望能够获得三阶多项式系数

解决方法

输入点应该是 NumPy 数组,而不是列表:

In [1]: src = np.array([(0,0),(2,(1,1),(0,2),2)])                            
In [2]: dst = np.array([(0,(4,3),6),6)])                            
In [3]: from skimage import transform                                                  
In [4]: p = transform.PolynomialTransform()                                            
In [5]: p.estimate(src,dst,order=3)                                                  
Out[5]: True

In [6]: p.params                                                                       
Out[6]: 
array([[-0.,3.71780989,1.50088949,-1.85561862,-2.62105008,-0.35138037,0.49835684,1.68275802,-0.37223298,-0.19953219],[-0.,0.85714286,1.,0.42857143,0.57142857,0.71428571,-0.42857143,-0.14285714,0.14285714]])

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...