这实际上是涉及到统计推断和噪声消除的问题。这是我即将尝试的方法。我假设你想要获得一个规则的二维网格,但类似的方法也可以用于三维或更多维度的规则网格。
首先列出所有差异并注意到(dx,dy)和(-dx,-dy)表示相同的位移,因此存在一种等价关系。将那些在预先指定的阈值(epsilon)内彼此接近的差异分组。Epsilon应足够大,以捕捉由于随机噪声或图像分辨率不足而产生的测量误差,但又不能太小,以免意外合并簇。
按它们的平均大小(dr = root(dx^2 + dy^2))对聚类进行排序。
如果原始网格确实是由两个独立基向量生成的规则间距网格,那么最小的两个线性独立簇将表明如此。最小的簇位于(0,0)中心。下一个最小的簇(dx0,dy0)具有第一个基向量,加上+/-号(-dx0,-dy0)表示相同的位移,回忆一下。
下一个最小的集群可能会线性依赖于(dx0,dy0)的倍数(在阈值epsilon内)。找到不是(dx0,dy0)的倍数的最小集群。将其称为(dx1,dy1)。
现在你有足够的信息来标记原始向量。按照字典顺序(x,y)>(x',y'),如果x>x'或者x=x'且y>y',对向量进行分组。取最小的(x0,y0),并将整数(0,0)分配给它。取所有其他的(x,y),并找到分解(x,y)=(x0,y0)+M0(x,y)(dx0,dy0)+M1(x,y)(dx1,dy1),并将其分配整数(m0(x,y),m1(x,y))=(round(M0),round(M1))。
现在对整数进行最小二乘拟合,使其符合方程(x,y)=(ux,uy)m0(x,y)(u0x,u0y)+m1(x,y)(u1x,u1y),以找到(ux,uy),(u0x,u0y)和(u1x,u1y)。这将确定网格。
测试此匹配以确定所有点是否在给定阈值范围内符合此拟合(也许使用相同的 epsilon 阈值来实现此目的)。
这个相同例程的一维版本也应该适用于声谱仪上的一维,以识别语音图中的基本频率。只有在这种情况下,ux 的假设值(替换(ux,uy))为0,而且只需要寻找对于齐次方程 x = m0(x) u0x 的拟合。