2011-08-14 30 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