Matlab椭圆拟合

标签:
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
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
运行结果(红色的椭圆为求得的):