求助一个Matlab基于最小二乘圆求解圆度误差的程序

求助一个Matlab基于最小二乘圆求解圆度误差的程序,第1张

你在 计算各测量点相对于最小二乘圆圆心的最大半径和最小半径时所选取的点序列是错误的,

按照字面意思,这样修改

for i=1:k

theta(i)=360/k*(i-1)

% 计算各测点相对于坐标圆点的坐标值

x=(P(i)+R).*cos(pi*theta./180)

y=(P(i)+R).*sin(pi*theta./180)

% 计算各测点相对于坐标原点的半径值

t(i)=x(i)

q(i)=y(i)

Ri(i)=sqrt(x(i)^2+y(i)^2)

% 积分计算最小二乘圆圆心坐标

% 将θ由角度值转变为弧度值

theta_r=pi*theta./180

x_sum=x_sum+x(i)

y_sum=y_sum+y(i)

end

% 计算各测量点相对于最小二乘圆圆心的最大半径和最小半径

for i=1:k

R_mea(i)=sqrt((t(i)-a)^2+(q(i)-b)^2)

end

我计算的结果是3.9421,比较接近文献的值:lol

既然你图不贴出来,所以也只能讲讲方法论:

1、将这张轮廓图读入到一个矩阵中;

2、检测圆心位置;

3、分别计算圆心到不同圆弧的距离;

4、两者相减。

备注:只接受追问,不接受QQ聊天的问题(百度知道是一个讨论交流平台,为一个人服务就没意思了)。

给你提供个思路吧。

首先我假设你提取出的圆轮廓还算比较规整,圆度不至于偏差太大。

你只需要求出最大内切圆和最小外接圆即可。算法比较容易设计,简单来看可以分为三部分:

1)确定圆心。首先,你先填充原来的轮廓图,获得一个实心的圆。然后,统计这个圆的质心。

程序写起来很容易,就是x放心和y放心各自按照坐标加权平均而已。

2)求最大内切圆。在上一步获得的圆心基础上,计算出最大的半径值,使得以此半径构成的圆被最大地包含在原始的轮廓圆内部。这种包含关系直接使用俩图做差看剩余像素点是否在内切圆内即可。

3)最小外接圆。基本思路同2)。只不过这里要找一个最小的半径值,使得以此半径构成的圆最小地包含原始的轮廓圆。包含关系与2)类似,不再啰嗦。

2)、3)完成之后,问题就解决了。用matlab写成代码应该比较容易,你自己应该能做。

当然,以上的算法求出的圆心可能需要微调一下,即你在进行2)和3)时,需要在算出的圆心附近做一下简单的搜索,以获得一个最优的未知,这个是小trick,注意下即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11525461.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存