希望可以加分,这能鼓励我们对生活工作中遇到的问题应用matlab来解决。

在工作中遇到这样的一个问题:当用三坐标测量圆特征,得到平面上离散分布的若干点,这些点近似分布在圆周上。如何评价该圆特征的圆度?

圆度误差的评定方法有4种:最小包容区域法,最小外接圆法,最大内切圆法,最小二乘法。最小包容区域法是符合圆度定义的方法,其他方法实际上是不符合圆度定义的,但由于最小包容区域法很难实现,故只好用其他方法来近似代替。

假设平面上有若干个测量点,大概在它们的中间随便找一点,以该点为中心创建一个矩形区域,该矩形区域内创建出均匀分布的很多点,充满矩形区域。然后计算这些构造的“中心点”到周围测量点之间的距离。对某一个构造的“中心点”来说,总可以找到距离它最远和最近的两个测量点,记下这它们的距离差,认为该距离差是圆度的一个备选值。对于矩形框内所有的中心点来说,必然有一个中心点(假设为o1)对应着最小的一个距离差。理论上,只要矩形框内构造的“中心点”足够密,则一定可以找到符合精度的圆度值。

但如果圆特征较大,按照上面所说,可能计算就要花费很多时间。于是对该方案进行了修改,先创建一个较疏的矩形点阵,找到o1后,再以o1为中心,创建另一个矩形框,该矩形框尺寸比第一个的减小一半,但里面点数目不变,这样点的密度就增加到原来的4倍。由于点数目没变,比较少,所以计算速度应该比较快。而且由于点的密度增加了,所找到的“中心点”也更精确。

根据需要设定循环次数。可以找到符合精度要求的中心点,以及它对应的圆度误差值。

以下是matlab程序:经过测试,所得到的圆度值随着循环次数n的增大而减小,而且下降速度越来越慢。可以认为,最终收敛于真正的圆度值。附件将圆度值与循环次数n的关系用图表显示出来,比较直观。

% 求圆特征的圆度及相应的中心点

xi=input('输入测量点的横坐标:');

yi=input('输入测量点的纵坐标:');  %yi与xi长度相等

xmin=min(xi);

xmax=max(xi);

ymin=min(yi);

ymax=max(yi);

xoc=0.5;  %可以修正

yoc=0.5;  %可以修正

xco=xmin+xoc*(xmax-xmin);  %设定的圆环中心点群的中心点的横坐标

yco=ymin+yoc*(ymax-ymin);  %设定的圆环中心点群的中心点的纵坐标

x_range=(xmax-xmin)/2;

y_range=(ymax-ymin)/2;

incr_x=x_range/10;  %x轴上有20个刻度

incr_y=y_range/10;  %y轴上有20个刻度

xo=[xco-x_range:incr_x:xco+x_range];  %设定的中心搜索点的横坐标组成的向量

yo=[yco-y_range:incr_y:yco+y_range];  %设定的中心搜索点的纵坐标组成的向量

R=[];

for n=1:10  %循环次数,可以修正

for j=1:length(xo)  %某个搜索点在x轴上的索引号

for k=1:length(yo)  %该搜索点在y轴上的索引号

for i=1:length(xi)  %测量点索引号

R(j,k,i)=sqrt((xi(i)-xo(j)).^2+(yi(i)-yo(k)).^2);

end

rmax(j,k)=max(R(j,k,:));

rmin(j,k)=min(R(j,k,:));

delta_r(j,k)=rmax(j,k)-rmin(j,k);

end

end;

[delta_rmi,row]=min(delta_r);

[delta_rmin,column]=min(delta_rmi);

x_range=x_range*0.5;  %搜索区域减小到原来的25%,可以修正

y_range=y_range*0.5;  %搜索区域减小到原来的25%,可以修正

n=n+1;

incr_x=incr_x/2;  %x方向密度增加到原来的2倍

incr_y=incr_y/2;  %y方向密度增加到原来的2倍

xco=xo(row(column));

yco=yo(column);

xo=[xco-x_range:incr_x:xco+x_range];

yo=[yco-y_range:incr_y:yco+y_range];

end;

x=xco

y=yco

for i=1:length(xi)

r(i)=sqrt((xi(i)-x)^2+(yi(i)-y)^2);

end

r_o=max(r)

r_i=min(r)

delta_radi=r_o-r_i

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

  1. 大津阈值分割matlab实验,OTSU(大津法)分割源程序(MATLAB版)

    接下来介绍OTSU方法的原理: ************************************************************************************ ...

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

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

  3. matlab 圆度误差,用MATLAB评定圆度误差的研究

    0 引言 目前在生产实践中,圆度误差的测量方法有半径变化测量法.两点法.三点法和坐标测量法等几种[1].其中,圆度仪.三坐标测量机对圆度的评定和计算是通过圆度仪.三坐标测量机等精密仪器自带的计算程序来 ...

  4. matlab区域法直线度,用最小区域法求直线度误差的探讨

    庸 [1l } 程 技 术 学 院 学 报 1991年 第 l期 7OURNAL OF TANGSf iAN INSTITUTE OF TECHNOLOGY 1.1991 用最小 区域法求直线度误差 ...

  5. 圆度坐标法MATLAB,基于坐标法测量圆度误差数据处理的MATLAB实现

    0 引言 圆度是机器回转零件的主要精度指标之一,在回转零件的加工过程中由于机床主轴回转不平衡.切削元件的径向跳动等因素的影响,会引起工件半径的变化,带来圆度误差.圆度误差的存在,直接影响机器零部件的工 ...

  6. matlab最小错误率决策,利用MATLAB实现最小错误率贝叶斯判别

    利用MATLAB实现最小错误率贝叶斯判别 摘要:matlab软件平台为用户提供了强大的科学计算与可视化功能,具有简单.易用的用户环境,尤其适合矩阵数据的计算处理.根据matlab的特点,将其与模式识别 ...

  7. matlab大津法函数,matlab 大津阈值分割【相关词_ 大津法阈值分割matlab】

    阈值法 阈值分割程序 Otsu Thresholding 赞(0) 踩(0) 收藏(0) 说明:大津法实现图像阈值分割的matlab源程序代码 (Otsu Thresholding Image sou ...

  8. 数字图像处理 阈值分割 MATLAB实验

    一.原理 通过设定不同的特征阈值,把图像像素点分为若干类. 二.步骤 ①读入原图像eight.tif,并显示图像及其直方图(双峰分布): ②选择直方图中两峰之间的谷对应的灰度作为阈值,对图像进行分割, ...

  9. 【图像分割】基于压缩系数的粒子群和重力搜索算法实现图像的多级阈值分割matlab源码

    1 简介 提出了基于粒子群优化(PSO)与引力搜索(GSA)混合算法(PSOGSA)的多阈值图像分割方法来解决图像阈值搜寻过程中单一优化算法局部搜索能力不强的问题.在阈值寻优过程中提高群体多样性,增强 ...

最新文章

  1. c++ eos智能合约开发_十分钟教你开发EOS智能合约
  2. easyui toolbar分隔线
  3. Postgis常用函数
  4. Google工程师多图详解Android系统架构
  5. php单元格字体颜色,PHPExcel API接口用法大全,按模板导入excel,美化excel,导出图片,设置单元格字体颜色背景色边框,合并单元格,设置行高列宽...
  6. ubantu 系统安装apache 和mysql
  7. 解决Intellij中的一些bug
  8. shell命令回车_VIM学习笔记 静默执行命令(silent)
  9. 苹果6怎样分屏_皮皮喵最新版下载安卓版更新 0.2.6
  10. 小米bl未解锁变砖了如何刷机_如何正确刷机
  11. knockoutjs的某些坑总结
  12. 汉仪南宫体简 字体如何卸载删除?
  13. usb万能驱动win7_给 win7 系统镜像添加驱动
  14. Kubernetes:排错指南 - Pod
  15. 供应链管理的终极目标
  16. 跑跑卡丁车rush服务器维护,跑跑卡丁车RUSH游戏官方-跑跑卡丁车RUSH+手游官网预约v1.0.8 - 逗游网...
  17. 打开设备管理器找不到Android Composite ADB Interface
  18. kafka问题之Listener method could not be invoked with the incoming message
  19. java习题小分享【关于statis你知道多少】
  20. java大数据开发是做什么的

热门文章

  1. BlendShape动画(Maya)导入Unity
  2. 【MATLAB教程案例44】通过matlab学习三维曲面的建模,颜色,透明度,动态变化等——以海浪曲面函数为例
  3. 【其他】myBase软件Linux下安装教程
  4. 关于font-weight不能正确展示字体粗细的问题记录
  5. Hibernate 使用log4j日志记录
  6. 10进制 转化为8进制
  7. php代码生成器软件_php代码生成器好用吗
  8. 源码分享:基于SpringBoot的ERP系统,自带进销存+财务+生产功能
  9. mysql sql%rowcount_SQL%ROWCOUNT应用
  10. Android应用程序进程启动流程