2009-02-18 57 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
我希望我能找到一個不錯的實現,供你參考以...

相關問題