python橢圓擬合函數 python 橢圓擬合

python擬合圓如何設置擬合精度

OpenCV曲線擬合與圓擬合

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名與空間、虛擬主機、營銷軟件、網站建設、青秀網站維護、網站推廣。

使用OpenCV做圖像處理與分析的時候,經常會遇到需要進行曲線擬合與圓擬合的場景,很多OpenCV開發(fā)者對此卻是一籌莫展,其實OpenCV中是有現(xiàn)成的函數來實現(xiàn)圓擬合與直線擬合的,而且還會告訴你擬合的圓的半徑是多少,簡直是超級方便,另外一個常用到的場景就是曲線擬合,常見的是基于多項式擬合,可以根據設定的多項式冪次生成多項式方程,然后根據方程進行一系列的點生成,形成完整的曲線,這個車道線檢測,輪廓曲線擬合等場景下特別有用。下面就通過兩個簡單的例子來分別學習一下曲線擬合與圓擬合的應用。

一:曲線擬合與應用

基于Numpy包的polyfit函數實現(xiàn),其支持的三個參數分別是x點集合、y點集合,以及多項式的冪次。得到多項式方程以后,就可以完整擬合曲線,圖中有如下四個點:

?

調用polyfit生成的二階多項式如下:

?

擬合結果如下:

?

使用三階多項式擬合,調用polyfit生成的多項式方程如下:

?

生成的擬合曲線如下:

?

使用polyfit進行曲線擬合時候需要注意的是,多項式的冪次最大是數據點數目N - 1冪次多項式,比如有4個點,最多生成3階多項式擬合。上述演示的完整代碼實現(xiàn)如下:

def circle_fitness_demo():

image = np.zeros((400, 400, 3), dtype=np.uint8)

x = np.array([30, 50, 100, 120])

y = np.array([100, 150, 240, 200])

for i in range(len(x)):

cv.circle(image, (x[i], y[i]), 3, (255, 0, 0), -1, 8, 0)

cv.imwrite("D:/curve.png", image)

poly = np.poly1d(np.polyfit(x, y, 3))

print(poly)

for t in range(30, 250, 1):

y_ = np.int(poly(t))

cv.circle(image, (t, y_), 1, (0, 0, 255), 1, 8, 0)

cv.imshow("fit curve", image)

cv.imwrite("D:/fitcurve.png", image)

二:圓擬合與應用

圓的擬合是基于輪廓發(fā)現(xiàn)的結果,對發(fā)現(xiàn)的近似圓的輪廓,通過圓擬合可以得到比較好的顯示效果,輪廓發(fā)現(xiàn)與擬合的API分別為findContours與fitEllipse,

有圖像如下:

?

使用輪廓發(fā)現(xiàn)與圓擬合處理結果如下:

?

紅色表示擬合的圓,藍色是圓的中心位置

上述完整的演示代碼如下:

def circle_fitness_demo():

src = cv.imread("D:/javaopencv/c2.png")

cv.imshow("input", src)

src = cv.GaussianBlur(src, (3, 3), 0)

gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)

ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)

cv.imshow("binary", binary)

image, contours, hierachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)

for i in range(len(contours)):

rrt = cv.fitEllipse(contours[i])

cv.ellipse(src, rrt, (0, 0, 255), 2, cv.LINE_AA)

x, y = rrt[0]

cv.circle(src, (np.int(x), np.int(y)), 4, (255, 0, 0), -1, 8, 0)

cv.imshow("fit circle", src)

cv.imwrite("D:/fitcircle.png", src)

吾心信其可行,則移山填海之難,終有成功之日;

吾心信其不可行,則反掌折枝之易,亦無收效之期也

python polyfit函數怎么使用

用polyfit(X,Y,1)得到的擬合函數只能得到a,b,但不能得到線性相關系數R^2。如想要得到其線性相關系數,可以用regress(y,X),其使用格式

[b,bint,r,rint,stats]

=

regress(y,X);

b——擬合系數

bint——b的置信區(qū)間

r——殘差值

rint——r的置信區(qū)間

stats——檢驗統(tǒng)計量,第一個就是相關系數

例如:

x=[。。。];y=[。。。]

X=[x

ones(n,1)];

%x的行數(列數)

[b,bint,r,rint,stats]

=

regress(y,X);

怎么用Python將圖像邊界用最小二乘法擬合成曲線

本文實例講述了Python基于最小二乘法實現(xiàn)曲線擬合。分享給大家供大家參考,具體如下:

這里不手動實現(xiàn)最小二乘,調用scipy庫中實現(xiàn)好的相關優(yōu)化函數。

考慮如下的含有4個參數的函數式:

構造數據

?

123456789101112131415

import numpy as npfrom scipy import optimizeimport matplotlib.pyplot as pltdef logistic4(x, A, B, C, D):??return (A-D)/(1+(x/C)**B)+Ddef residuals(p, y, x):??A, B, C, D = p??return y - logisctic4(x, A, B, C, D)def peval(x, p):??A, B, C, D = p??return logistic4(x, A, B, C, D)A, B, C, D = .5, 2.5, 8, 7.3x = np.linspace(0, 20, 20)y_true = logistic4(x, A, B, C, D)y_meas = y_true + 0.2 * np.random.randn(len(y_true))

調用工具箱函數,進行優(yōu)化

?

1234

p0 = [1/2]*4plesq = optimize.leastsq(residuals, p0, args=(y_meas, x))????????????# leastsq函數的功能其實是根據誤差(y_meas-y_true)????????????# 估計模型(也即函數)的參數

繪圖

?

12345678

plt.figure(figsize=(6, 4.5))plt.plot(x, peval(x, plesq[0]), x, y_meas, 'o', x, y_true)plt.legend(['Fit', 'Noisy', 'True'], loc='upper left')plt.title('least square for the noisy data (measurements)')for i, (param, true, est) in enumerate(zip('ABCD', [A, B, C, D], plesq[0])):??plt.text(11, 2-i*.5, '{} = {:.2f}, est({:.2f}) = {:.2f}'.format(param, true, param, est))plt.savefig('./logisitic.png')plt.show()

希望本文所述對大家Python程序設計有所幫助。

python中用polyfit擬合出的函數怎么能直接調用?

首先分兩種情況:

1.交互窗口處執(zhí)行:這個時候由于python的強制縮進,因此想要結束函數的定義只需要按兩下enter即可。

2.在.py文件中編寫,結束函數只需要不再縮進即可

調用函數方法相同,把函數名及參數寫上就可以了,如果有返回值可以

r=functionA(var1)

附:測試代碼(python3運行通過)

# -*- coding:utf-8 -*-

#author:zfxcx

def pt():

print("hello")

pt()

python擬合指數函數初始值如何設定

求擬合函數,首先要有因變量和自變量的一組測試或實驗數據,根據已知的曲線y=f(x),擬合出Ex和En系數。當用擬合出的函數與實驗數據吻合程度愈高,說明擬合得到的Ex和En系數是合理的。吻合程度用相關系數來衡量,即R^2。首先,我們需要打開Python的shell工具,在shell當中新建一個對象member,對member進行賦值。 2、這里我們所創(chuàng)建的列表當中的元素均屬于字符串類型,同時我們也可以在列表當中創(chuàng)建數字以及混合類型的元素。 3、先來使用append函數對已經創(chuàng)建的列表添加元素,具體如下圖所示,會自動在列表的最后的位置添加一個元素。 4、再來使用extend對來添加列表元素,如果是添加多個元素,需要使用列表的形式。 5、使用insert函數添加列表元素,insert中有兩個參數,第一個參數即為插入的位置,第二個參數即為插入的元素。origin擬合中參數值是程序擬合的結果,自定義函數可以設置參數的初值,也可以不設定參數的初值。

一般而言,擬合結果不會因為初值的不同而有太大的偏差,如果偏差很大,說明數據和函數不太匹配,需要對函數進行改正。X0的迭代初始值選擇與求解方程,有著密切的關系。不同的初始值得出的系數是完全不一樣的。這要通過多次選擇和比較,才能得到較為合理的初值。一般的方法,可以通過隨機數并根據方程的特性來初選。

Python 中的函數擬合

很多業(yè)務場景中,我們希望通過一個特定的函數來擬合業(yè)務數據,以此來預測未來數據的變化趨勢。(比如用戶的留存變化、付費變化等)

本文主要介紹在 Python 中常用的兩種曲線擬合方法:多項式擬合 和 自定義函數擬合。

通過多項式擬合,我們只需要指定想要擬合的多項式的最高項次是多少即可。

運行結果:

對于自定義函數擬合,不僅可以用于直線、二次曲線、三次曲線的擬合,它可以適用于任意形式的曲線的擬合,只要定義好合適的曲線方程即可。

運行結果:

名稱欄目:python橢圓擬合函數 python 橢圓擬合
轉載注明:http://muchs.cn/article44/doscphe.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站導航軟件開發(fā)、虛擬主機、動態(tài)網站營銷型網站建設、網站排名

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網站優(yōu)化