worrenliu 发表于 2008-11-23 22:18

如何求出椭圆的长短轴长度

知道一个椭圆,如何求出椭圆的中心,然后再求出椭圆的长短轴长度?
有没有这样的函数?
不会编程,望各大侠解答,谢谢~~~

friendchj 发表于 2008-11-24 10:34

取椭圆上的几个坐标点,代入椭圆方程求解参数

worrenliu 发表于 2008-11-24 22:41

知道椭圆的中心了,下一步求椭圆的长短轴?该如何操作???

ch_j1985 发表于 2008-11-24 23:16

回复 板凳 worrenliu 的帖子

分别求出椭圆上各点到中心点的距离,选其最值

sigma665 发表于 2008-11-25 09:23

回复 板凳 worrenliu 的帖子

看2楼

worrenliu 发表于 2008-11-26 00:52

图片如下

图片如下   ,该如何操作?

friendchj 发表于 2008-11-26 10:49

原帖由 worrenliu 于 2008-11-23 22:18 发表 http://www.chinavib.com/forum/images/common/back.gif
知道一个椭圆,如何求出椭圆的中心,然后再求出椭圆的长短轴长度?
有没有这样的函数?
不会编程,望各大侠解答,谢谢~~~
这是从mathworks网站找到的一个椭圆拟合程序,可以参考一下。
%    = FITELLIPSE(X)
%       Fit an ellipse to the 2D points in the 2xN array X. The ellipse is
%       returned in parametric form such that the equation of the ellipse
%       parameterised by 0 <= theta < 2*pi is:
%         X = Z + Q(ALPHA) *
%       where Q(ALPHA) is the rotation matrix
%         Q(ALPHA) = [cos(ALPHA), -sin(ALPHA);
%                     sin(ALPHA), cos(ALPHA)]
%   Example:
%       % A set of points
%       x = [1 2 5 7 9 6 3 8;
%            7 6 8 7 5 7 2 4];
%
%       % Fit an ellipse using the Bookstein constraint
%       = fitellipse(x, 'linear');
%
%       % Find the least squares geometric estimate      
%       = fitellipse(x);
%      
%       % Plot the results
%       plot(x(1,:), x(2,:), 'ro')
%       hold on
%       % plotellipse(zb, ab, bb, alphab, 'b--')
%       % plotellipse(zg, ag, bg, alphag, 'k')

科技在线 发表于 2008-11-26 12:31

这是拟合的,所以上面代点的方法不适用,我觉得先要求出轴的方向应该比较重要

friendchj 发表于 2008-11-26 14:12

原帖由 科技在线 于 2008-11-26 12:31 发表 http://www.chinavib.com/forum/images/common/back.gif
这是拟合的,所以上面代点的方法不适用,我觉得先要求出轴的方向应该比较重要
如果能分割出椭圆,并求得上面的一部分点,就可以进行拟合了,从而可以求出椭圆的参数,包括中心,长短轴以及旋转角度

friendchj 发表于 2008-11-26 15:31

我写的一个求椭圆参数的完整程序
clc
clear
% By Friendchj
I=imread('shiyan.bmp');
I0=im2bw(I,graythresh(I)); % 转化为二值图像
% imshow(I0,[])
=bwboundaries(I0); % 寻找区域边界
z=[];
a=[];
b=[];
alpha=[];
for i=2:length(B)
    x=B{i};    % 区域1为背景,从2开始
    x0=x;
    x(:,1)=x0(:,2); % 调整横纵坐标,实验得出
    x(:,2)=x0(:,1);
    x=x.';
   =fitellipse(x, 'linear'); % 椭圆拟合
    z=;% 保存参数,中心坐标
    a=;% 保存参数,根据a,b大小决定长短轴
    b=;
    alpha=; % 旋转角度
end
iptsetpref('ImshowAxesVisible','on')
imshow(I0,[])
hold on
for i=1:length(z)
    plotellipse(z(:,i), a(i), b(i), alpha(i),'r.') % 根据椭圆参数画图
end
hold off
效果如下:

worrenliu 发表于 2008-11-26 18:42

我运行不了哦,
??? Undefined function or method 'fitellipse' for input arguments of type 'double'.

friendchj 发表于 2008-11-26 19:18

原帖由 worrenliu 于 2008-11-26 18:42 发表 http://www.chinavib.com/forum/images/common/back.gif
我运行不了哦,
??? Undefined function or method 'fitellipse' for input arguments of type 'double'.
在7楼附件里下载函数fitellipse和plotellipse

ch_j1985 发表于 2008-11-26 19:54

回复 10楼 friendchj 的帖子

学习啦!
friendchj真是高手!

friendchj 发表于 2008-11-26 20:21

完善了一下,这样从图中可以看出,参数集z,a,b,alpha的第n个参数与第n个椭圆对应。
clc
clear
% By Friendchj
I=imread('shiyan.bmp');
I0=im2bw(I,graythresh(I)); % 转化为二值图像
% imshow(I0,[])
=bwboundaries(I0); % 寻找区域边界
z=[];
a=[];
b=[];
alpha=[];
iptsetpref('ImshowAxesVisible','on')
imshow(I0,[])
hold on
for i=2:length(B)
    x=B{i};    % 区域1为背景,从2开始
    x0=x;
    x(:,1)=x0(:,2); % 调整横纵坐标,实验得出
    x(:,2)=x0(:,1);
    x=x.';
   =fitellipse(x, 'linear'); % 椭圆拟合
    plotellipse(z0, a0, b0, alpha0,'r.')
    text(z0(1),z0(2),num2str(i-1),'color',)
    z=;% 保存参数,中心坐标
    a=;% 保存参数,根据a,b大小决定长短轴
    b=;
    alpha=; % 旋转角度
end

[ 本帖最后由 friendchj 于 2008-11-26 20:29 编辑 ]

worrenliu 发表于 2008-11-27 12:06

:victory: 很厉害的friendchj,:@D
页: [1] 2
查看完整版本: 如何求出椭圆的长短轴长度