Python 利用最小二乘圆度拟合 实现圆角测量

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。
课题介绍:
利用Keyence线扫传感器 获取的圆角数据,拟合计算圆角大小。并显示圆角分布图
工具:python 3.6 Keyence LJX8000

导出数据 利用keyence FTP功能将线扫数据传输到本地电脑

代码

1.引用空间

from numpy import *
from scipy import optimize
import functools
from matplotlib import pyplot as p
import csv
import osmethod  = "RKS Fitting Circle"
x = [] #拟合点X坐标
y = [] # 拟合点Y坐标
R = [] # 输出半径集合
Num=600  # 参考点数量

2.获取数据
path 为文件路径 ,当前使用的线扫宽度j精度为0.005mm.获取原始400到1000点的数据

def GetData(path):px = []py = []with open(path, 'r') as f:reader = csv.reader(f)result = list(reader)for i in range(0, Num):px.append(i*0.005)py.append(float(result[400 + i][0]))return px, py

圆心计算公式

def calc_R(xc, yc):return sqrt((x - xc) ** 2 + (y - yc) ** 2)def countcalls(fn):"decorator function count function calls "@functools.wraps(fn)def wrapped(*args):wrapped.ncalls +=1return fn(*args)wrapped.ncalls = 0return wrapped@countcalls
def f_2(c):Ri = calc_R(*c)return Ri - Ri.mean()def FitCircle(item):# 圆心心坐标x_m = mean(x)# 圆心初始值xy_m = mean(y) # 圆心初始值y# 圆心估计center_estimate = x_m, y_mcenter_rks, ier = optimize.leastsq(f_2, center_estimate)  #最小二乘预测结果xc_rks, yc_rks = center_rksRi_rks = calc_R(xc_rks, yc_rks)# 拟合圆的半径R_rks = Ri_rks.mean() #均值residu_2 = sum((Ri_rks - R_rks) ** 2)  # 方差residu2_2 = sum((Ri_rks ** 2 - R_rks ** 2) ** 2)ncalls_2 = f_2.ncalls# 输出列表fmt = '%s_%s %10.5f %10.5f %10.5f %10d %10.6f %10.6f %10.2f'print(('\n%s' + ' %10s' * 7) % tuple('方法 Xc Yc Rc nb_calls std(Ri) residu residu2'.split()))print('-' * (22 + 7 * (10 + 1)))print(fmt % (method, item, xc_rks, yc_rks, R_rks, ncalls_2, Ri_rks.std(), residu_2, residu2_2))R.append(R_rks)#输出结果
def plot_all(xc_2,yc_2,R_2,residu2=False):# 输出图p.close('all')p.figure(facecolor='white')  # figsize=(7, 5.4), dpi=72,p.axis('equal')theta_fit = linspace(-pi, pi, 180)x_fit2 = xc_2 + R_2 * cos(theta_fit)y_fit2 = yc_2 + R_2 * sin(theta_fit)p.plot(x_fit2, y_fit2, 'k--', label=method, lw=2)p.plot([xc_2], [yc_2], 'gD', mec='r', mew=1)# drawp.xlabel('x')p.ylabel('y')# 数据p.plot(x, y, 'ro', label='data', ms=8, mec='b', mew=1)p.legend(loc='best', labelspacing=0.1)#标题# p.grid()p.title('Least Squares Circle'+ str(R_2))p.savefig('%s_residu%d_%d.png' % (basename, 2 if residu2 else 1,Num))p.show()

调用

files = os.listdir(file_path)
for item in files:file = os.path.join(file_path, item)if os.path.isfile(file):name, type = file.split('.', 1)if type == 'csv':x,y = GetData(file)xc,yc,rc= FitCircle(item)plot_all(xc,yc,rc,residu2=True)p.plot(R, ls="-", lw=2, label="plot figure")
p.title('Radius  R Distribution')
p.legend()
p.show()

效果图

Python 用最小二乘圆度拟合 的方法实现圆角测量相关推荐

  1. 【Python】计算圆度

    公式 圆度计算公式: 4*PI*A/P^2 其中PI表示Π,A表示区域面积,P表示区域周长. Opencv def compute_roundness(label_image):contours, h ...

  2. 圆度坐标法MATLAB,基于MATLAB的圆度评定方法

    基于 MATLAB 的圆度评定方法 The Method of Roundness Assessment Based on MATLAB 周剑平 (黄石理工学院机械与动力工程系 ,湖北 黄石 4350 ...

  3. 圆度计算matlab程序,基于MATLAB的圆度误差数据处理

    0 引言 圆度误差是指回转体在同一正截面上实际被测轮廓相对其理想圆的变动量[1].它是衡量圆柱形零件形状精度的重要指标之一,误差的大小将严重影响其工作性能.因此,在设计机器和仪器时根据零件的功能要求须 ...

  4. 最小误差阈值分割 matlab,原创:最小包容区域法处理圆度误差的程序算法

    希望可以加分,这能鼓励我们对生活工作中遇到的问题应用matlab来解决. 在工作中遇到这样的一个问题:当用三坐标测量圆特征,得到平面上离散分布的若干点,这些点近似分布在圆周上.如何评价该圆特征的圆度? ...

  5. 过拟合解决方法python_《python深度学习》笔记---4.4、过拟合与欠拟合(解决过拟合常见方法)...

    <python深度学习>笔记---4.4.过拟合与欠拟合(解决过拟合常见方法) 一.总结 一句话总结: 减小网络大小 添加权重正则化 添加 dropout 正则化 1.机器学习的根本问题? ...

  6. OpenCV 最小二乘+距离最小拟合圆

    OpenCV 最小二乘+距离最小拟合圆 一. 最小二乘算法 二. 距离最小算法 三. 还可以优化吗 我们经常需要由给定的点精确地拟合出一个圆, 下面讲解从 最小二乘算法 到 距离最小算法 的实现过程, ...

  7. 圆度计算MATLAB,一种基于MATLAB的圆度评定方法

    摘要:圆度的评定和计算,实质上是根据圆度的定义构造函数模型.再进行函 数优化求解的过程.提出一种基于MATLAB 的圆度评定方法,利用MATLAB 优化工具箱,为采用最小区域圆法.最小二乘圆法.最小外 ...

  8. python求交点坐标_Python求两个圆的交点坐标或三个圆的交点坐标方法

    计算两个圆的交点 代码如下: # -*- coding: utf-8 -*- import math import numpy as np def insec(p1,r1,p2,r2): x = p1 ...

  9. python比较两个字符串相似度_详解Python 字符串相似性的几种度量方法

    字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是:把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种 ...

最新文章

  1. tc溜溜865手机投屏卡_这台手机智商为零,却要挑战小米华为!
  2. 2011年给力新作——《数据库系统工程师考试案例梳理、真题透解与强化训练》...
  3. 项目经理原则(转载)
  4. 干货分享:插画家Anmi的创作技巧与练习方法
  5. javascript权威指南——笔记(第十章:正则)
  6. 【数据库系统】SQL程序设计的层次
  7. python查看函数参数快捷键_python查看函数源代码快捷键_pycharm中查看源码的快捷键...
  8. ehcache 手动刷新缓存_清空DNS缓存的两个小方法
  9. 汉斯·乌尔里希·鲁德尔-唯一一个钻石金双剑金橡叶骑士勋章获得者
  10. EPIC下载商城UE4内容后
  11. 帝国网站mysql 数据库开发_帝国cms操作数据库函数范例(二次开发)
  12. html静态页面作业——品牌红酒销售网页模板(4页) html网页设计期末大作业_网页设计平时作业
  13. 2022年国家高新企业认定申报最全问答-财务数据篇
  14. Tetragon: Cilium 开源基于 eBPF 的安全可观测性 运行时增强平台
  15. 计算机软考网络工程师难度大吗,国家软考的网络工程师与CCNP相比,哪个难?...
  16. 【Jailhouse 文章】Certify the Uncertified Towards Assessment of Virtualization for Mixed-criticality...
  17. 【马士兵】Python基础--01
  18. 初识 JavaScript(揭开javascript的神秘面纱)
  19. 三星530换固态硬盘_三星迷你固态硬盘Portable SSD T7 Touch试用 支持指纹识别设备...
  20. 人员定位系统硬件篇:关于防爆定位基站的几个知识点

热门文章

  1. YY-测试实习生笔试+面试复盘
  2. DS期末复习卷(九)
  3. JavaScript 控制台(console)调试技巧
  4. OUC2021软件工程“e拼“校园拼车程序小组第九周Scrum Meeting记录
  5. 4种方法实现单行、多行——文本溢出显示省略号
  6. 微信互动游戏有哪些优势
  7. 后疫情时代,希尔顿花园酒店发展势头迅猛,聚焦核心市场
  8. 上海浦江镇python培训在职班
  9. 热词挖掘、热度值计算方法及python实现
  10. adxl345取出值怎么算角度_ADXL345测倾斜角(程序)