椭圆的协方差矩阵

时间:2014-03-03 12:08:33

标签: matlab image-processing matrix covariance ellipse

我一直在努力解决问题。我很惊讶我在网上找不到任何真正有用的东西。

我知道从椭圆的协方差矩阵的特征值可以计算出椭圆的长轴和短轴。如下:

a1 = 2*sqrt(e1)
a2 = 2*sqrt(e2)

其中a1a2是主轴和次轴,e1e2是协方差矩阵的特征值。

我的问题是:给定图像椭圆的边缘点(xi,yi),如何找到该椭圆的2×2协方差矩阵?

2 个答案:

答案 0 :(得分:2)

仅仅通过纯粹的逆向工程(我不再熟悉这种材料),我可以这样做:

%// Generate circle
R = 189;
t = linspace(0, 2*pi, 1000).';
x = R*cos(t);
y = R*sin(t);

%// Find the radius?
[~,L] = eig( cov([x,y]) );

%// ...hmm, seems off by a factor of sqrt(2)
2*sqrt( diag(L) )        

%// so it would come out right when I'd include a factor of 1/2 in the sqrt():
2*sqrt( diag(L)/2 )        

所以,让我们测试一般省略号的理论:

%// Random radii
a1 = 1000*rand;
a2 = 1000*rand;

%// Random rotation matrix
R = @(a)[
    +cos(a) +sin(a); 
    -sin(a) +cos(a)];

%// Generate pionts on the ellipse 
t = linspace(0, 2*pi, 1000).';
xy = [a1*cos(t)  a2*sin(t);] * R(rand);

%// Find the deviation from the known radii
%// (taking care of that the ordering may be different)
[~,L] = eig(cov(xy));
min(abs(1-bsxfun(@rdivide, 2*sqrt( diag(L)/2 ), [a1 a2; a2 a1])),[],2)

总是返回一些可接受的小东西。

所以,似乎工作:)任何人都可以验证这确实是正确的吗?

答案 1 :(得分:0)

为了扩展Rody的答案,实心椭圆的协方差矩阵具有由lambda_i = r_i^2/4给出的特征值。这导致OP的等式为r_i = 2*sqrt(lambda_i)

对于(非实体)椭圆,如在OP的情况下,特征值是实例的两倍:lambda_i = r_i^2/2,导致r_i = sqrt(2*lambda_i)(等于Rody的{{1} }})。

我无法直接找到这方面的参考,但协方差矩阵的数学与惯性矩的数学相同。 On Wikipedia你可以看到“圆形箍”和“实心圆盘”的情况,它们的相同因子为2。

这是对Rody测试的改编,同时执行固体和非固体情况:

2*sqrt(lambda_i/2)

如果运行此代码,您将看到1e-3和~6e-3的错误(对于实体情况,我会生成更多的点,因为该区域需要更多的点来进行足够密集的采样;点数越多,错误越小。)