加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab椭圆拟合

(2012-02-05 14:05:57)
标签:

it

分类: 编程碎片

一数码照片如下:

http://s6/middle/686d0fb0nb8315d329595&690

用Matlab拟合图中椭圆边界。

 

实现步骤:

Step1,用imread函数读入二值图片,得到相应的数据矩阵(矩阵元素为1的表示白色,0表示黑色),imshow函数显示矩阵对应的图像,左上角为坐标原点。

Step2,用edge函数提取边界。

Step3,用ax^2+bxy+cy^2+dx+ey+1=0的函数形式拟合边界,即求解一个最小二乘问题(先得到超定线性方程组)

Step4,画出拟合椭圆图形叠加在原图上,注意左上角为坐标系原点。


源程序Exercise.m

function Exercise()
%拟合椭圆边界
hold on;
A=imread('11.bmp');%读取椭圆
imshow(A);%显示图片
B=edge(A);%读取椭圆边界
C=bwboundaries(B);
D=C{1,1};%获得椭圆边界坐标
row=length(D);%椭圆边界点的个数,超定方程组的方程个数
%以下构造超定方程组的系数矩阵,5列
for i=1:row
    E(i,1)=D(i,2)^2;
    E(i,2)=D(i,2)*D(i,2);
    E(i,3)=D(i,1)^2;
    E(i,4)=D(i,2);
    E(i,5)=D(i,1);
end
b=-10000*ones(row,1);
x=E\b;
syms xx yy;
h=ezplot(x(1)*xx^2+x(2)*xx*(139-yy)+x(3)*(139-yy)^2+x(4)*xx+x(5)*(139-yy)+10000,[0,195,0,139]);
set(h,'Color','red')
hold off;
end


运行结果(红色的椭圆为求得的):

http://s1/middle/686d0fb0nb831699e2910&690

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有