首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在OpenCV中,fitEllipse是如何工作的?

在OpenCV中,fitEllipse是如何工作的?
EN

Stack Overflow用户
提问于 2013-02-07 19:40:23
回答 1查看 2.9K关注 0票数 8

我正在使用opencv,我需要了解函数fitEllipse到底是如何工作的。我看过(https://github.com/Itseez/opencv/blob/master/modules/imgproc/src/shapedescr.cpp)上的代码,我知道它使用最小二乘法来确定可能的椭圆。我还查看了文档中给出的论文(Andrew W.Fitzgibbon,R.B.Fisher )。圆锥曲线拟合的买家指南。Proc.5英国机器视觉会议,伯明翰,第513-522页,1995年。)

但是我不能准确地理解算法。例如,为什么它需要解决3倍的最小二乘问题?为什么bd在第一个svd之前被初始化为10000 (我猜这只是一个初始化的随机值,但为什么这个值可以是随机的?)?为什么在第一个svd之前,Ad中的值需要为负值?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-20 09:53:42

这是Matlab代码..这可能会有帮助

代码语言:javascript
运行
复制
function [Q,a]=fit_ellipse_fitzgibbon(data)
  % function [Q,a]=fit_ellipse_fitzgibbon(data)
  %
  % Ellipse specific fit, according to:
  %
  %  Direct Least Square Fitting of Ellipses,
  %  A. Fitzgibbon, M. Pilu and R. Fisher. PAMI 1996
  %
  %
  % See Also:
  %   FIT_ELLIPSE_LS
  %   FIT_ELLIPSE_HALIR

  [m,n] = size(data);
  assert((m==2||m==3)&&n>5);
  x = data(1,:)';
  y = data(2,:)';

  D = [x.^2 x.*y y.^2 x y ones(size(x))];   % design matrix
  S = D'*D;                                 % scatter matrix
  C(6,6)=0; C(1,3)=-2; C(2,2)=1; C(3,1)=-2; % constraints matrix
  % solve the generalized eigensystem
  [V,D] = eig(S, C);
  % find the only negative eigenvalue
  [n_r, n_c] = find(D<0 & ~isinf(D));
  if isempty(n_c),
    warning('Error getting the ellipse parameters, will do LS');
    [Q,a] = fit_ellipse_ls(data); %
    return;
  end
  % the parameters
  a = V(:, n_c);
  [A B C D E F] = deal(a(1),a(2),a(3),a(4),a(5),a(6)); % deal is slow!
  Q = [A B/2 D/2; B/2 C E/2; D/2 E/2 F];
end % fit_ellipse_fitzgibbon

然而,Fitzibbon解具有一定的数值稳定性。有关此问题的解决方案,请参阅Halir的工作。

它本质上是最小二乘解,但经过特别设计,它将产生一个有效的椭圆,而不是任何二次曲线。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14750251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档