拟合圆并求圆心(matlab)

clc

clear all

I=imread(‘a003.bmp‘);

[m,n,p]=size(I);

I=im2bw(I);

se=strel(‘square‘,3);

Ia=imerode(I,se);

Iout=I-Ia;

figure(1);

imshow(Iout);

Iout1=Iout;

N=1;

for i=1:m

for j=1:n

if Iout(i,j)==1

p(N,1)=i;

p(N,2)=j;

N=N+1;

Iout(i,j+5:end)=0;

end

end

end

figure(2);

imshow(Iout);

for i=1:m

for j=n:(-1):1

if Iout1(i,j)==1

p(N,1)=i;

p(N,2)=j;

N=N+1;

Iout1(i,1:j-5)=0;

end

end

end

figure(3);

imshow(Iout1);

x=p(:,1);

y=p(:,2);

[R,x0,y0]=circ(x,y,N-1);

disp([‘这个圆的半径是: ‘ num2str(R),‘ mm‘ ]);

disp([‘这个圆圆心坐标:( ‘ num2str(x0) ,‘,‘,num2str(y0),‘)‘]);

figure(4)

imshow(I);

hold on

plot(x0,y0,‘r+‘);

%%%%%%%%%%%%%%%%%%%%%%%

function [R,A,B]=circ(x,y,N)

x1 = 0;

x2 = 0;

x3 = 0;

y1 = 0;

y2 = 0;

y3 = 0;

x1y1 = 0;

x1y2 = 0;

x2y1 = 0;

for i = 1 : N

x1 = x1 + x(i);

x2 = x2 + x(i)*x(i);

x3 = x3 + x(i)*x(i)*x(i);

y1 = y1 + y(i);

y2 = y2 + y(i)*y(i);

y3 = y3 + y(i)*y(i)*y(i);

x1y1 = x1y1 + x(i)*y(i);

x1y2 = x1y2 + x(i)*y(i)*y(i);

x2y1 = x2y1 + x(i)*x(i)*y(i);

end

C = N * x2 - x1 * x1;

D = N * x1y1 - x1 * y1;

E = N * x3 + N * x1y2 - (x2 + y2) * x1;

G = N * y2 - y1 * y1;

H = N * x2y1 + N * y3 - (x2 + y2) * y1;

a = (H * D - E * G)/(C * G - D * D);

b = (H * C - E * D)/(D * D - G * C);

c = -(a * x1 + b * y1 + x2 + y2)/N;

A = a/(-2); %x 坐标

B = b/(-2); %y 坐标

R = sqrt(a * a + b * b - 4 * c)/2;

时间: 2025-01-07 14:05:10

拟合圆并求圆心(matlab)的相关文章

最小二乘法拟合圆

有一系列的数据点 {xi,yi}.我们知道这些数据点近似的落在一个圆上.依据这些数据预计这个圆的參数就是一个非常有意义的问题.今天就来讲讲怎样来做圆的拟合.圆拟合的方法有非常多种,最小二乘法属于比較简单的一种. 今天就先将这样的. 我们知道圆方程能够写为: (x?xc)2+(y?yc)2=R2 通常的最小二乘拟合要求距离的平方和最小.也就是 f=∑((xi?xc)2+(yi?yc)2??????????????????√?R)2 最小. 这个算起来会非常麻烦. 也得不到解析解. 所以我们退而求其

最小二乘法拟合圆 转

有一系列的数据点 {xi,yi}{xi,yi},我们知道这些数据点近似的落在一个圆上,根据这些数据估计这个圆的参数就是一个很有意义的问题.今天就来讲讲如何来做圆的拟合.圆拟合的方法有很多种,最小二乘法属于比较简单的一种.今天就先将这种. 我们知道圆方程可以写为: (x?xc)2+(y?yc)2=R2(x?xc)2+(y?yc)2=R2 通常的最小二乘拟合要求距离的平方和最小.也就是 f=∑((xi?xc)2+(yi?yc)2??????????????????√?R)2f=∑((xi?xc)2+

已知三点求圆心与半径

已知三点求圆心与半径  [email protected] http://blog.csdn.net/kezunhai 在计算机图像图形学中,经常会用到求圆心或圆半径的情况,本文介绍一种已知三个点求圆心和圆半径的方法(当然三个点不能共线,共线的三个点不能构成圆). 原理:相互连接三个点,选取其中的任意两条直线,通过对这两条直线的中心做垂线,两条垂线的交点就是圆心,以此点为圆心,以此点到任意一点的距离为半径画圆. 三个点分别计为pt1, pt2, pt3:取直线p1p2和p1p3(也可以取其他直线

(转)最小二乘法拟合圆公式推导及vc实现[r]

(下文内容为转载,不过已经不清楚原创的是哪里了,特此说明) 转自: http://www.cnblogs.com/dotLive/archive/2006/10/09/524633.html 该网址下面有更多的讨论. 最小二乘法(least squares analysis)是一种 数学 优化 技术,它通过 最小化 误差 的平方和找到一组数据的最佳 函数 匹配. 最小二乘法是用最简的方法求得一些绝对不可知的真值,而令误差平方之和为最小. 最小二乘法通常用于 曲线拟合 (least squares

HDU 6206 Apple ( 高精度 && 计算几何 && 三点构圆求圆心半径 )

题意 : 给出四个点,问你第四个点是否在前三个点构成的圆内,若在圆外输出"Accepted",否则输出"Rejected",题目保证前三个点不在一条直线上. 分析 : 简单的计算几何问题,如果能够知道圆心和半径(Radius)以及第四个点和圆心的距离(Distance),我们就能够判断第四个点是否在圆外,例如Distance > Radius则在圆外.三点构圆 的圆心和半径是能够推导出公式的 (参考==> http://blog.csdn.net/dea

根据圆上三点求圆心及半径

Equation of a circle passing through 3 points (x1, y1) (x2, y2) and (x3, y3). The equation of the circle is described by the equation: After substituting the three given points which lies on the circle we get the set of equations that can be describe

Everything Has Changed(HDU6354+圆交+求周长)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6354 题目: 题意:用一堆圆来切割一个圆心为原点,半径为R的圆A,问切割完毕后圆A外围剩余部分的周长(图中的红线部分). 思路:首先判定圆与圆A的关系,这题我们只需要与A内切.相交的圆.然后就是求每个圆把圆A切割掉多少周长,增加了多少周长(因为圆A被切割的部分在切割后绝对是内凹的,此时周长是增加的),内切的时候直接加上切割圆的周长(如最上面的那个小圆),相交的圆部分我采用的方法是用余弦定理(A的半径

增广消因北快位识商统圆什求型机zvKXinp7Ia

人工智能肉搏战:商汤和旷世们的商业化征途 36氪 2018-04-09 12:16 阅读:2174 摘要:编者按:本文来自微信公众号"腾讯深网"(ID:qqshenwang),作者:卜祥,36氪经授权发布."我要把商汤挤出去."吴文昊说出了心里话.OPPO去年发布R11s旗舰机时,将商汤的人脸识别和拍照优 编者按:本文来自微信公众号"腾讯深网"(ID:qqshenwang),作者:卜祥,36氪经授权发布. "我要把商汤挤出去."

基于MATLAB的多项式数据拟合方法研究-毕业论文

摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式曲线拟合的基本理论,对多项式数据拟合原理进行了全方面的理论阐述,同时也阐述了曲线拟合的基本原理及多项式曲线拟合模型的建立.具体记录了多项式曲线拟合的具体步骤,在建立理论的基础上具体实现多项式曲线的MATLAB实现方法的研究,采用MATLAB R2016a的平台对测量的数据进行多项式数据拟合,介绍了M