matlab 图像处理之拟合圆
一、 matlab代码
I=imread('tu.jpg');
[x_01,y_01,r_01]=calu_circle01(I,3,6,64,65);%圆心x,圆形y,半径r
function [x,y,r,xc,yc]=calu_circle01(I,x_begin,y_begin,x_end,y_end) %输入参数共五个(数组 ,图像在x方向上起始位置,图像在y 方向上起始位置,图像在x方向上终点位置,图像在y 方向上终点位置)
lb_x=[];
lb_y=[];
for i =x_begin:x_end
for j =y_begin:y_end
if I(i,j)==1
lb_x=[lb_x,i];
lb_y=[lb_y,j];
end
end
end
x=lb_x;
y=lb_y;
n=length(x);
xx=x.*x;
yy=y.*y;
xy=x.*y;
A=[sum(x) sum(y) n;sum(xy) sum(yy)...
sum(y);sum(xx) sum(xy) sum(x)];
B=[-sum(xx+yy) ; -sum(xx.*y+yy.*y) ; -sum(xx.*x+xy.*y)];
a=A\B; %%%%%对应圆的一般方程AX=B,求解系数a,b,c即a(1),a(2),a(3),近而得出圆心坐标与半径
xc = -0.5*a(1);
yc = -0.5*a(2);
R = sqrt((a(1)^2+a(2)^2)/4-a(3));
x=ceil(yc);%设定圆心X轴数值
y=ceil(xc);%设定圆心Y轴数值
r=ceil(R);%设定圆半径数值
end
二、 结果展示
蓝色像元是拟合的边缘圆