2009-02-18 62 views
4

鉴于用户绘制的“形状”,我​​想“正常化”它,使它们都具有相似的大小和方向。我们拥有的是一组要点。我可以使用边界框或圆来近似大小,但方向有点棘手。给定一组点,我如何近似其形状的主轴?

正确的做法,我认为是计算其bounding ellipsemajoraxis。要做到这一点,你需要计算covariance matrixeigenvector。这样做可能会太复杂,因为我正在寻找一些足够好的估计。挑选最小,最大和20个随机点可能是一些起始者。有没有简单的方法来估计这个?

编辑: 我找到Power method迭代近似特征向量。 Wikipedia article。 到目前为止,我喜欢David's answer

回答

3

你会计算一个2x2矩阵的特征向量,这可以用一些简单的公式完成,所以它并不复杂。在伪代码:

// sums are over all points 
b = -(sum(x * x) - sum(y * y))/(2 * sum(x * y)) 
evec1_x = b + sqrt(b ** 2 + 1) 
evec1_y = 1 
evec2_x = b - sqrt(b ** 2 + 1) 
evec2_y = 1 

你甚至可以通过求和只有一些点来获得的估计,如果你期望的点您选择的子集,将代表的全套做到这一点。

编辑:我认为x和y必须被翻译成零均值,即,减去从所有的x,y的第一(eed3si9n)意思。

+0

如果这样计算的协方差矩阵的特征向量,它的伟大。有没有指向这种方法的链接? – 2009-02-19 05:18:25

+0

查看http://number-none.com/product/My%20Friend,%20the%20Covariance%20Body/index.html以及http://www.gdmag.com/code.htm上的示例代码(sep02。 zip) – Dave 2009-02-19 05:59:54

3

这是一个想法......如果您对点进行线性回归并使用结果线的斜率?如果不是所有的观点,至少是他们的一个样本。

r^2值也会给你关于一般形状的信息。越接近0,形状越圆/均匀(圆/平方)。越接近1,形状越拉长(椭圆形/矩形)。

2

这个问题的最终解决方案是运行PCA
我希望我能找到一个不错的实现,供你参考以...

相关问题