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.pswp.cn/news/256320.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256320.shtml
英文地址,請注明出處:http://en.pswp.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…