如何求出椭圆的长短轴长度
知道一个椭圆,如何求出椭圆的中心,然后再求出椭圆的长短轴长度?有没有这样的函数?
不会编程,望各大侠解答,谢谢~~~ 取椭圆上的几个坐标点,代入椭圆方程求解参数 知道椭圆的中心了,下一步求椭圆的长短轴?该如何操作???
回复 板凳 worrenliu 的帖子
分别求出椭圆上各点到中心点的距离,选其最值回复 板凳 worrenliu 的帖子
看2楼图片如下
图片如下 ,该如何操作? 原帖由 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 发表 http://www.chinavib.com/forum/images/common/back.gif
这是拟合的,所以上面代点的方法不适用,我觉得先要求出轴的方向应该比较重要
如果能分割出椭圆,并求得上面的一部分点,就可以进行拟合了,从而可以求出椭圆的参数,包括中心,长短轴以及旋转角度 我写的一个求椭圆参数的完整程序
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
效果如下: 我运行不了哦,
??? Undefined function or method 'fitellipse' for input arguments of type 'double'. 原帖由 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
回复 10楼 friendchj 的帖子
学习啦!friendchj真是高手! 完善了一下,这样从图中可以看出,参数集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 编辑 ] :victory: 很厉害的friendchj,:@D
页:
[1]
2