2011-08-14 29 views
6

在Python中估算凸包的縱橫比最好的方法是什麼?我已經試過這樣做,將凸包的頂點與橢圓擬合,並取半長軸和長軸的比例。雖然結果並不令人滿意,所以我現在正在考慮直接從凸包導出縱橫比。任何想法或解決方案將不勝感激。估算凸包的縱橫比

乾杯

+0

你是什麼意思縱橫在這種情況下的比率,以及你想如何直接從凸包派生它? –

+1

如何定義凸包的縱橫比?你想允許不同的角度,所以你可以得到一個旋轉矩形的長寬比?如果您只想爲軸使用0°和90°,則縱橫比很容易計算。 –

+0

0和90度,你的意思是找到基於以下的縱橫比? 1)找到凸包中的長軸(通過質心的凸包中最長的可能路徑)和2)測量與長軸正交的短軸。如果是這樣,那麼它應該工作。 – ebressert

回答

7

通常,您會發現點雲的協方差矩陣的特徵向量。縱橫比是最大到最小特徵值的比率。

至於一堆隨機點(你只適用同樣的事情,你的凸包,只能用頂點)的例子:

import matplotlib.pyplot as plt 
import numpy as np 

# Random data 
num = 100 
xy = np.random.random((2,num)) + 0.01 * np.arange(num) 

eigvals, eigvecs = np.linalg.eig(np.cov(xy)) 

fig, (ax1, ax2) = plt.subplots(nrows=2) 
x,y = xy 
center = xy.mean(axis=-1) 
for ax in [ax1, ax2]: 
    ax.plot(x,y, 'ro') 
    ax.axis('equal') 

for val, vec in zip(eigvals, eigvecs.T): 
    val *= 2 
    x,y = np.vstack((center + val * vec, center, center - val * vec)).T 
    ax2.plot(x,y, 'b-', lw=3) 

plt.show() 

enter image description here

+0

這是一個不錯的解決方案。我仍在測試我的數據上的這段代碼,但到目前爲止結果還是不錯的。謝謝! – ebressert