原理:原理部分网上大部分可以搜得到,以一句很简单的话就是是通过最小化误差的平方和找到一组数据的最佳函数匹配(自行百度)。


作用:如果现在有一张图片,需要你拟合图片中的圆。

需要拟合的圆图片:

方法:最小二乘法拟合(原理自行百度)

代码:主代码

clear;
clc;
data=imread('')
[t,SM]=graythresh(data);% T产生的阈值,SM可分性度量
binary_image=imbinarize(data,t); % Otsu's方法的最佳全阈值处 理,二值化图像
binary_image1=medfilt2(binary_image);
im_sub = double(binary_image);
[m,n]=size(im_sub);
im_sub1=edge(im_sub,'canny',t);
bound_position = bwboundaries(im_sub1,8);
Xc = size(im_sub2,2)/2;Yc = size(im_sub2,1)/2;
result = [];
for i = 1:length(bound_position)X = bound_position{i}(:,2);Y = bound_position{i}(:,1);
%% 排除掉非轮廓数据if(length(X)<4)continue;end
[xc,yc,r,a] = circlefit(X,Y);%拟合圆
%% 排除掉非圆的轮廓% if(~inpolygon(xc,yc,X,Y)||r>350||(sqrt((xc-960)^2+(yc-960)^2)>200))if(~inpolygon(xc,yc,X,Y)||(sqrt((xc-m/2)^2+(yc-n/2)^2)>500)||r>1200);continue;endif r<20continue;endresult = [result; xc,yc,r];%保存结果
endtemp= sortrows(result,3);%按半径大小排列
result = temp(1:1:end,:);for i = 1:1:size(dis_x1,1)%PlotCircle(result(i,1),result(i,2),mean(result(i-1:i,3)));hold on;PlotCircle(dis_x1(i,1),dis_x1(i,2),dis_x1(i,3));hold on;
enddisp('-------------拟合结果如下------------')
disp(' 圆心坐标x  圆心坐标y  半径r')
ans =  result(1:2:end,:)

以上就通过一些简单的图像处理得到图中圆形图案的边缘坐标信息,下面通过上述的代码获得的边缘像素坐标集,上述中的圆拟合代码如下(最小二乘法)

圆拟合代码:

function [xc,yc,R,a]=circlefit(x,y)
% CIRCLEFIT fits a circle in x,y plane
% x^2+y^2+a(1)*x+a(2)*y+a(3)=0n=length(x);
xx=x.*x;
yy=y.*y;
xy=x.*y;A=[sum(x) sum(y) n;sum(xy) sum(yy) sum(y);sum(xx) sum(xy) sum(x)];
B=[-sum(xx+yy);-sum(xx.*y+yy.*y);-sum(xx.*x+xy.*y)];
a=A\B;
xc = -0.5*a(1);
yc = -0.5*a(2);
% R = sqrt(-(a(3)-xc^2-yc^2));
R = sqrt((a(1)^2+a(2)^2)/4-a(3));
end

画圆程序:

function PlotCircle(xc,yc,r)
theta=0:pi/100:2*pi;
% x=r*cos(theta)+xc; y=r*sin(theta)+yc;x=r*cos(theta)+xc; y=r*sin(theta)+yc;
plot(x,y,'r-','LineWidth',3);
% plot(xc,yc,'r+','LineWidth',5);
% plot(mean(xc),mean(yc),'*','LineWidth',1)
% fill(x,y,'y');
end

效果:

引用请注明出处,谢谢!!

最小二乘法-圆拟合(不啰嗦)相关推荐

  1. 最小二乘法的拟合原理

    一. 最小二乘法的拟合原理 根据<数学指南>书中的解释: 图2 <数学指南>中对最小二乘法的解释 上面这段话,枯燥且无趣,大家不用厌恶,数学向来这个样子. 现在,我们来慢慢认识 ...

  2. 圆拟合算法(距离之和最小)

    上一篇博客介绍了最小二乘法拟合圆的方法.这种方法对误差符合正态分布的数据点很有效.但是在机器视觉应用中经常会碰到一些干扰点.这些干扰点多数时候是偏向某一个方向的.这时要是用最小二乘法拟合,拟合出的圆会 ...

  3. Java实现最小二乘法线性拟合,传感与检测,单臂半桥全桥实验,江南大学自动化

    因为作为资源上传不方便我们获取且我想免费分享给有需要的小伙伴,以后所有实验报告都通过文章形式记录输出了,仅供参考,欢迎交流.(最小二乘法代码在文末) 电桥特性曲线: Java实现最小二乘法线性拟合及计 ...

  4. 最小二乘法线性拟合及其代码实现(C语言)

    文章目录 前言 一.最小二乘法 二.代码实现(C语言) 三.缺陷与不足 1. 对异常值很敏感 2. 没有考虑自变量的误差 3. 存在不可求解的情况 总结 参考 前言 最小二乘法是最常用的数据拟合方法. ...

  5. 最小二乘法函数拟合原理及matlab实现—数学笔记

    最小二乘法函数拟合原理及matlab实现 --数值分析数学笔记 如有纰漏,欢迎指正 文章目录 最小二乘法函数拟合原理及matlab实现 前言 一.拟合标准 1.使偏差向量满足 1 1 1 - 范数 2 ...

  6. 基于opencv的c++图像处理(霍夫直线检测与最小二乘法直线拟合)

    前言 基于opencv的c++接口,实现标准的霍夫直线检测.基于统计概率的霍夫直线检测.以及最小二乘法直线拟合. 相关的opencv接口解析 CV_EXPORTS_W void HoughLines( ...

  7. 最小二乘法直线拟合、圆拟合

  8. 最小二乘法多项式拟合的Java实现--转

    原文地址:http://blog.csdn.net/funnyrand/article/details/46742561 背景 由于项目中需要根据磁盘的历史使用情况预测未来一段时间的使用情况,决定采用 ...

  9. 用最小二乘法来拟合数据

    标签(空格分隔): 机器学习 最小二乘法是一种常用的数学优化技术.它通过最小化误差的平方和来求取目标函数的最优值,以解决线性回归问题.这是百度百科给出的解释,那么这个拟合的数据从字面上理解,其实就是预 ...

最新文章

  1. 转载 - sql分页优化
  2. fp格式图片_2020Pamp;I | 适马无反版100-400镜头亮相,fp全幅微单满足不同需求
  3. Android --- 怎么样在布局中显示服务器的图片,或者是后台项目中的图片+connect failed: ECONNREFUSED (Connection refused)问题的解决(文章最后)
  4. 朴素贝叶斯 半朴素贝叶斯_使用朴素贝叶斯和N-Gram的Twitter情绪分析
  5. JavaFX上手--第1天
  6. 从视图到控制器的传值方法(表单)
  7. spring Boot 2.1.5 (1)---安装环境
  8. express怎么读取html,Express 配置HTML页面访问的实现
  9. 密集人体姿态估计:2D图像帧可实时生成UV贴图(附论文)
  10. 使用zabbix-agent2自定义插件获取https证书过期时间
  11. UVA12290 Counting Game【数学模拟】
  12. 扫描局域网IP和MAC的有力工具BPSNMPUtil
  13. Spring Cloud之Feign客户端调用工具
  14. 【转】Apache——世界使用排名第一的Web服务器
  15. Python环境下数据处理常用命令
  16. 青岛VR全景制作免费方法教程
  17. 万能检测数据类型的方法
  18. 测试中遇到的bug总结
  19. 河北科技大学电子商务马志伟
  20. 4G双卡工业CPE及MIFI

热门文章

  1. location在php中什么意思,location是什么意思
  2. 数据结构实验1:线性表:贪吃蛇
  3. 牛客真题编程——day5
  4. int为什么占4个字节?一个字节为什么是8位?
  5. Python基础阶段练习必备项目——文字对战游戏
  6. 关于0x80000000为什么等于-2147483648和负数在内存上储存的问题
  7. mac安装brew并换阿里源
  8. Windows 7下通过Excel2007连接Oracle数据库并对表查询
  9. 灵活顶点格式 FVF
  10. 优化求解器SCIP介绍