声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 7998|回复: 20

[图像处理] 如何求出椭圆的长短轴长度

[复制链接]
发表于 2008-11-23 22:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

使用道具 举报

发表于 2008-11-24 10:34 | 显示全部楼层
取椭圆上的几个坐标点,代入椭圆方程求解参数

评分

2

查看全部评分

 楼主| 发表于 2008-11-24 22:41 | 显示全部楼层
知道椭圆的中心了,下一步求椭圆的长短轴?该如何操作???
发表于 2008-11-24 23:16 | 显示全部楼层

回复 板凳 worrenliu 的帖子

分别求出椭圆上各点到中心点的距离,选其最值
发表于 2008-11-25 09:23 | 显示全部楼层

回复 板凳 worrenliu 的帖子

看2楼
 楼主| 发表于 2008-11-26 00:52 | 显示全部楼层

图片如下

图片如下   ,该如何操作?
未命名.jpg
发表于 2008-11-26 10:49 | 显示全部楼层
原帖由 worrenliu 于 2008-11-23 22:18 发表
知道一个椭圆,如何求出椭圆的中心,然后再求出椭圆的长短轴长度?
有没有这样的函数?
不会编程,望各大侠解答,谢谢~~~

这是从mathworks网站找到的一个椭圆拟合程序,可以参考一下。
%   [Z, A, B, ALPHA] = 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) * [A * cos(theta); B * sin(theta)]
%       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
%       [zb, ab, bb, alphab] = fitellipse(x, 'linear');
%
%       % Find the least squares geometric estimate      
%       [zg, ag, bg, alphag] = 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')
untitled.jpg

fitellipse.m

12.19 KB, 下载次数: 86

椭圆拟合程序

plotellipse.m

2.44 KB, 下载次数: 74

评分

1

查看全部评分

发表于 2008-11-26 12:31 | 显示全部楼层
这是拟合的,所以上面代点的方法不适用,我觉得先要求出轴的方向应该比较重要
发表于 2008-11-26 14:12 | 显示全部楼层
原帖由 科技在线 于 2008-11-26 12:31 发表
这是拟合的,所以上面代点的方法不适用,我觉得先要求出轴的方向应该比较重要

如果能分割出椭圆,并求得上面的一部分点,就可以进行拟合了,从而可以求出椭圆的参数,包括中心,长短轴以及旋转角度
发表于 2008-11-26 15:31 | 显示全部楼层
我写的一个求椭圆参数的完整程序
clc
clear
% By Friendchj
I=imread('shiyan.bmp');
I0=im2bw(I,graythresh(I)); % 转化为二值图像
% imshow(I0,[])
[B,L]=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.';
   [z0,a0,b0,alpha0]=fitellipse(x, 'linear'); % 椭圆拟合
    z=[z,z0];  % 保存参数,中心坐标
    a=[a,a0];  % 保存参数,根据a,b大小决定长短轴
    b=[b,b0];
    alpha=[alpha,alpha0]; % 旋转角度
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
效果如下:

原图

原图

结果图

结果图

评分

2

查看全部评分

 楼主| 发表于 2008-11-26 18:42 | 显示全部楼层
我运行不了哦,
??? Undefined function or method 'fitellipse' for input arguments of type 'double'.
发表于 2008-11-26 19:18 | 显示全部楼层
原帖由 worrenliu 于 2008-11-26 18:42 发表
我运行不了哦,
??? Undefined function or method 'fitellipse' for input arguments of type 'double'.

在7楼附件里下载函数fitellipse和plotellipse
发表于 2008-11-26 19:54 | 显示全部楼层

回复 10楼 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,[])
[B,L]=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.';
   [z0,a0,b0,alpha0]=fitellipse(x, 'linear'); % 椭圆拟合
    plotellipse(z0, a0, b0, alpha0,'r.')
    text(z0(1),z0(2),num2str(i-1),'color',[1 1 0])
    z=[z,z0];  % 保存参数,中心坐标
    a=[a,a0];  % 保存参数,根据a,b大小决定长短轴
    b=[b,b0];
    alpha=[alpha,alpha0]; % 旋转角度
end

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

评分

1

查看全部评分

 楼主| 发表于 2008-11-27 12:06 | 显示全部楼层
:victory: 很厉害的friendchj,:@D
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-18 06:20 , Processed in 0.066039 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表