Matlab 对图片中的圆进行拟合求取其方程
代码如下:
close all;
clear; clc;
n = 10; %设置需要拟合的点数
pic=imread('E:/cup.jpg');
I=imshow(pic);
loc_points=zeros(n,2);
x = zeros(1,10);
y = zeros(1,10);
for i=1:1:n
hold on;
[x(i), y(i)]=ginput(1);
hold on;
plot(x(i),y(i),'r.')%将点在其中标记出来
loc_points(i,1) = x(i);
loc_points(i,2) = y(i);
str=[' X:' num2str(x(i)') ', Y:' num2str(y(i)')];
text(x(i),y(i),cellstr(str))
end
% 定义圆的参数方程
fun = @(param, x) (x-param(1)).^2 + (y-param(2)).^2 - param(3).^2;
% 初始猜测值(圆心和半径)
initial_guess = [3, 4, 2];
% 进行拟合
param_fit = lsqcurvefit(fun, initial_guess, x, y);
param_fit %显示拟合圆的参数
% 生成拟合圆上的点
theta = linspace(0, 2*pi, 100);
x_fit = param_fit(1) + param_fit(3)*cos(theta);
y_fit = param_fit(2) + param_fit(3)*sin(theta);
% 画出原始散点
scatter(x, y, 'b');
hold on;
% 画出拟合圆
plot(x_fit, y_fit, 'r');
xlabel('X');
ylabel('Y');
legend('原始数据', '拟合圆');
示例结果: