如何计算离散样本的曲率半径?

时间:2014-11-23 22:54:14

标签: numerical

我从平面曲线得到了一系列(x,y)样本,取自实际测量值,因此可能有点嘈杂且时间间隔不均匀。

x = -2.51509  -2.38485  -1.88485  -1.38485  -0.88485  -0.38485   0.11515 0.61515   1.11515   1.61515 ...

y =  -48.902  -48.917  -48.955  -48.981  -49.001  -49.014  -49.015  -49.010 -49.001  -48.974 ...

如果我绘制整个系列,它看起来像一个漂亮的椭圆形,但如果我仔细观察,该线看起来有点摇摆,这可能是噪音。

我如何提取下面椭圆曲率半径的估计?

任何编程语言都没问题!

3 个答案:

答案 0 :(得分:3)

Roger Stafford在这里给出了一些MATLAB代码:

http://www.mathworks.com/matlabcentral/newsreader/view_thread/152405

我对此功能进行了一些试验:

# given a load of points, with x,y coordinates, we can estimate the radius
# of curvature by fitting a circle to them using least squares.
function [r,a,b]=radiusofcurv(x,y)
  # translate the points to the centre of mass coordinates
  mx = mean(x);
  my = mean(y);
  X = x - mx; Y = y - my; 

  dx2 = mean(X.^2);
  dy2 = mean(Y.^2);

  # Set up linear equation for derivative and solve
  RHS=(X.^2-dx2+Y.^2-dy2)/2; 
  M=[X,Y];
  t = M\RHS;

  # t is the centre of the circle [a0;b0]
  a0 = t(1); b0 = t(2);

  # from which we can get the radius
  r = sqrt(dx2+dy2+a0^2+b0^2); 

  # return to given coordinate system
  a = a0 + mx;
  b = b0 + my; 

endfunction

它似乎对我的目的很有效,尽管它给出了非常奇怪的答案,例如:共线点。但是,如果它们来自一条带有一点噪音的漂亮曲线,那么工作就已经完成了。

它应该很容易适应其他语言,但请注意\是MATLAB / Octave的'使用伪逆解决'功能,所以你需要一个线性代数库来计算伪逆,以便复制它。

答案 1 :(得分:1)

我认为this描述了您想要的内容,包括代码和拟合算法的描述。

答案 2 :(得分:1)

我认为你可以计算椭圆,它满足你的数据和椭圆方程之间差异的最小二乘。然后使用椭圆的长轴和短轴。 Here是我在Google搜索后发现的一篇论文。