Opencv—— 拟合直线

概念

最小二乘法是勒让德( A. M. Legendre)于1805年在其著作《计算慧星轨道的新方法》中提出的。 最小二乘法就是通过最小化误差的平方和,使得拟合对象无限接近目标对象。在图像处理中主要用于拟合线,通过求采样点距离误差最小的线,可以是直线,曲线,椭圆,圆等。求解方法目前分为多项式和概率(最大似然)估计两种。

  1. 最小二乘法多项式拟合,根据给定的点,求出它的函数y=f(x)。
    假设有点 , I = 1,2,3,……n,求近似曲线y=φ(x),并且使得y=φ(x)与y=f(x)的平方偏差和最小。
  2. 最大似然估计方法是通过将真实值和测量值得误差形成一个概率分布函数P,联立后L(x),求x的偏导,得到一个正态分布函数。
    在这里插入图片描述

理论

最小二乘法小结

程序

使用opencv实现下:

int main()
{vector<Point> points;points.push_back(Point(25, 40));points.push_back(Point(7, 6));points.push_back(Point(11, 10));points.push_back(Point(12, 14));points.push_back(Point(35, 69));points.push_back(Point(30, 50));points.push_back(Point(43, 57));points.push_back(Point(25, 37));points.push_back(Point(27, 39));points.push_back(Point(50, 100));Mat src = Mat::zeros(200, 200, CV_8UC3);for (int i = 0; i < points.size(); i++){circle(src, points[i], 3, Scalar(0, 0, 255), 1, 8);}int N = 2;Mat A = Mat::zeros(N, N, CV_64FC1);for (int row = 0; row < A.rows; row++){for (int col = 0; col < A.cols; col++){for (int k = 0; k < points.size(); k++){A.at<double>(row, col) = A.at<double>(row, col) + pow(points[k].x, row + col);}}}//构建B矩阵Mat B = Mat::zeros(N, 1, CV_64FC1);for (int row = 0; row < B.rows; row++){for (int k = 0; k < points.size(); k++){B.at<double>(row, 0) = B.at<double>(row, 0) + pow(points[k].x, row) * points[k].y;}}Mat X;solve(A, B, X, DECOMP_LU);cout << X << endl;vector<Point>lines;for (int x = 0; x < src.size().width; x++){				// y = b + ax;double y = X.at<double>(0, 0) + X.at<double>(1, 0) * x;printf("(%d,%lf)\n", x, y);lines.push_back(Point(x, y));}polylines(src, lines, false, Scalar(255, 0, 0), 1, 8);imshow("拟合线", src);waitKey(0);return 0;
}

后面会再增加拟合圆的例子

参考文章:
如何理解最小二乘法?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地搭建Dubbo监控中心的安装步骤

Dubbo监控中心的安装步骤 参考链接&#xff1a;http://blog.csdn.net/lichunan/article/details/40349645 一、从github上下载dubbo源码进行编译&#xff1a; 1、下载地址为&#xff1a; https://github.com/alibaba/dubbo.git2、编译源码命令&#xff1a;首先进入~/dubbo&am…

(转)SQLServer实例讲解

欢迎和大家交流技术相关问题&#xff1a; 邮箱: jiangxinnju163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://github.com/jiangxincode 知乎地址: https://www.zhihu.com/people/jiangxinnju 实例就是一个在数据库中存在的&#xff0c;现实的数据…

Basler相机SDK相关问题收集与知识汇总

1.心跳时间导致报错 此心跳非彼心跳,相机心跳是指过通过设置一个时间用于监测相机和网卡的连接,如果超过这个时间,相机就会释放跟网卡的连接,进入一种允许相机被再次连接的状态。 但此方式会导致相机SDK报错,经常显示在使用中,无可用连接,如何解决? 1.干等。不可取 2.…

14-会场安排问题

会场安排问题 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述学校的小礼堂每天都会有许多活动&#xff0c;有时间这些活动的计划时间会发生冲突&#xff0c;需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动&#xff0c;…

【TensorFlow】——实现minist数据集分类的前向传播(常规神经网络非卷积神经网络)

目录 一、常规神经网络模型 二、TensorFlow实现前向传播步骤 1、读取数据集 2、batch划分 3、根据神经网络每一层的神经元个数来初始化参数w,b 4、进行每一层输入输出的计算 5、对每一层的输出进行非线性relu函数变换 6、计算一个batch训练后的误差loss 7、计算每一次…

大道至简第二章

懒人造就了方法 开头说的&#xff0c;有一个人叫李冰也要移山&#xff0c;可是他却要用和愚公截然不同的方法&#xff0c;那就是用“烧”的方法来碎石&#xff0c;那么这样的好处就是省力。那么他又是怎样想到的办法的呢&#xff0c;就是生活中仔细观察他老婆做饭时水溢出是石头…

C# 回调函数详解

回调和回调函数是什么 软件模块之间存在着接口&#xff0c;而回调是一种双向调用模式&#xff0c;被调用方在接口被调用时也会调用对方的接口。 对于一般的结构化语言&#xff0c;可以通过回调函数来实现回调。回调函数是一个函数或过程&#xff0c;是一个由调用方自己实现&am…

神经网络(11)--具体实现:unrolling parameters

我们需要将parameters从矩阵unrolling到向量&#xff0c;这样我们就可以使用adanced optimization routines. unroll into vectors costFunction与fminunc里面的theta都是n1维的向量&#xff0c;costFunction的返回值gradient也是n1维的向量。 但是当我们使用神经网络时&#x…

[转]ASP.Net篇之Session与Cookie

本文转自&#xff1a;http://www.cnblogs.com/japanbbq/archive/2011/08/31/2160494.html Session: Session是“会话”的意思&#xff0c;然而&#xff0c;因为http协议是无状态的&#xff0c;那么每次客户端请求服务器端&#xff0c;服务器端都会以“崭新”的页面展示给客户端…

C# 接口详解

概念 接口描述的是可属于任何类或结构的一组相关行为&#xff0c;所以实现接口的类或结构必须实现接口定义中指定的接口成员。 定义&#xff1a;使用interface 关键字&#xff0c;由方法、属性、事件、索引器或这四种成员类型的任意组合构成。另可使用new、public、protected、…

js学习之地图生成

首先&#xff0c;上地图图片 接着&#xff0c;js&#xff0c;我们可以把图片看成一块块32*32像素的 var i; var j;window.onload function () {gamemap(15, 10, 10, "map.jpg"); }var mapimg new Image(); var map [[18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,…

linux性能分析常用的命令

1&#xff0c;uptime 查看系统负责2&#xff0c;more 分页查看文件&#xff0c;enter显示下一行&#xff0c;空格显示下一页&#xff0c;F显示下一屏&#xff0c;B显示上一屏内容。3&#xff0c;top命令查看系统情况&#xff0c;按shif H可以查看当前线程的负载。4&#xff0…

C#中Console.ReadKey()与ConsoleKey的一些用法

1.控制台程序不让窗口闪过 对于控制台程序&#xff0c;Console.ReadKey()可以使窗口停留一下&#xff0c;直到点击键盘任一键为止。 2.通过按键进行选择 key Console.ReadKey(true).Key;if (key ConsoleKey.S){ Console.Write("Input the message:…

【TensorFlow】——Windows10、pycharm、Python3.6.4中安装CPU和GPU两种版本的TensorFlow

tensorflow分为两种&#xff0c;一种是cpu版本&#xff0c;一种是gpu版本 CPU版本可以直接通过pip进行安装&#xff1a; 这里是在国内镜像源中进行的下载&#xff0c;下载的版本是2.2.0版本 pip --default-timeout1000 install tensorflow-cpu2.2.0 -i http://pypi.douban.c…

vsftpd.conf 详解与实例配置

#################匿名权限控制############### anonymous_enableYES   #是否启用匿名用户 no_anon_passwordYES   #匿名用户login时不询问口令 下面这四个主要语句控制这文件和文件夹的上传、下载、创建、删除和重命名。 anon_upload_enable&#xff08;yes/no)…

下拉框选择

1&#xff0c;简单下拉框 <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8" ><meta name"viewport" content"widthdevice-width, initial-scale1, user-scalableno, minimal-ui, maximum-scale1&qu…

基于C#的TCP/IP协议应用(一)

一、背景与概念 1.标准以太网 以太网是美国Xerox&#xff08;施乐&#xff09;公司的Palo Alto研究中心于1975年研制成功的&#xff0c;其核心技术起源于ALOHA网。目前以太网是指符合IEEE 802.3标准的局域网(LAN)产品组&#xff0c;其中IEEE 802.3是一组电气与电子工程师协会…

WORD文档的超链接无法打开——“由于本机的限制该操作已被取消”的解决方法

之前我电脑还很正常&#xff0c;最近装了一个打印机后&#xff0c;放在word文档的文字超链接就打不开了&#xff0c;提示说“由于本机的限制该操作已被取消”&#xff0c;请各位高手指导下该怎样解决这个问题&#xff1f; WORD文档的超链接无法打开的原因是文件在插入超链接之…

广义表的实现

广义表是一种非线性表的数据结构&#xff0c;是线性表的一种推广。他放松了对原子的控制&#xff0c;容许原子有自身的结构。其实现如下&#xff1a; #include<iostream>using namespace std;#include<assert.h>enum Type //原子类型有三种:头结点&#xff0c…