我創建了一個帶有多項式回歸的公式來計算輸入的拖動點。我用輸入在單獨的檔案中測驗了公式,輸出似乎按預期作業。但是,在實際檔案中,它似乎輸出了非常不正確的數字。我的第一個想法是 OpenCV 的輸出樣式是一些奇怪的數字格式,但是當我列印這些值時它們就很好了。它似乎適用于較小的公式,但為我創建的公式提供了狂野的值。任何幫助,將不勝感激。以下是使用測驗輸入和正確輸出計算 x 和 y 的公式,而不是我在實際檔案中得到的公式。謝謝。
def triang_x(x1):
x2 = (-6.8808613455609384e 005) (3.2312735687925651e 003 * x1)
(-6.0019455279289815e 000 * x1**2) (1.0786025430222985e-002 * x1**3)
(-2.8031333306353576e-005 * x1**4) (4.7125204049478773e-008 * x1**5)
(-3.8733353649642116e-011 * x1**6) (1.4733899082497896e-014 * x1**7)
(-5.1033986030610612e-018 * x1**8) (2.7445807881521161e-021 * x1**9)
(1.4039325861603808e-024 * x1**10) (-7.8303365296494140e-027 * x1**11)
(2.0700235162417034e-029 * x1**12) (-2.5633522287710555e-032 * x1**13)
(1.4236656075804622e-035 * x1**14) (-2.9388878284829885e-039 * x1**15)
return x2
def triang_y(y1):
y2 = ((2.9536073194970668e 004) (-7.2584981060026985e 002 * y1)
(5.9991721893954519e 000 * y1**2) (-1.4273839368311947e-002 * y1**3)
(-6.1205911580247642e-005 * y1**4) (4.1603526512587676e-007 * y1**5)
(-6.9546008738218303e-010 * y1**6) (-1.1072665851528698e-013 * y1**7)
(-6.4446469064614884e-016 * y1**8) (8.0190196135612936e-018 * y1**9)
(-8.8768139841444641e-021 * y1**10) (-1.3685149110264805e-023 * y1**11)
(1.3193560897991867e-026 * y1**12) (5.4138560249698032e-029 * y1**13)
(-9.5141032455036651e-032 * y1**14) (4.4497796299711634e-035 * y1**15))
return y2
# Test Values are x:1116 y:398
#Correct Output is x:900.892612375319 y:889.0486684303542
#Output received in main is 10415680.385044796 -167144.0485716732
uj5u.com熱心網友回復:
您目前提出問題的方式,我無法做出正面或反面。
我可以告訴你,你的第一個函式有一個錯誤:你試圖分配 16 個加法的總和,但是當你打破那條線時,后面的所有內容都不會成為該總和的一部分。你應該得到一個IndentationError......除非你問題中的代碼與你在自己的計算機上實際運行的代碼不同。如果縮進恰到好處,那么您只會有一堆 2-summand 加法無處可去,因為在 python 中擁有一個您不分配任何值的運算式是完全合法的。要解決這個問題,請將括號(和)整個運算式放在賦值的右側。
您的第二個功能看起來不錯,并且似乎可以按您的意愿作業。我無法重現您在問題中陳述的“錯誤價值觀”。
除此之外......而不是撰寫如此龐大的python運算式,只需使用numpy來表示系數和多項式的評估:
import numpy as np
coeffs_x = np.float64([
-6.8808613455609384e 005, # 0
3.2312735687925651e 003, # 1
-6.0019455279289815e 000, # 2
1.0786025430222985e-002, # 3
-2.8031333306353576e-005, # 4
4.7125204049478773e-008, # 5
-3.8733353649642116e-011, # 6
1.4733899082497896e-014, # 7
-5.1033986030610612e-018, # 8
2.7445807881521161e-021, # 9
1.4039325861603808e-024, # 10
-7.8303365296494140e-027, # 11
2.0700235162417034e-029, # 12
-2.5633522287710555e-032, # 13
1.4236656075804622e-035, # 14
-2.9388878284829885e-039, # 15
])
triang_x = np.polynomial.Polynomial(coeffs_x)
coeffs_y = np.float64([
2.9536073194970668e 004, # 0
-7.2584981060026985e 002, # 1
5.9991721893954519e 000, # 2
-1.4273839368311947e-002, # 3
-6.1205911580247642e-005, # 4
4.1603526512587676e-007, # 5
-6.9546008738218303e-010, # 6
-1.1072665851528698e-013, # 7
-6.4446469064614884e-016, # 8
8.0190196135612936e-018, # 9
-8.8768139841444641e-021, # 10
-1.3685149110264805e-023, # 11
1.3193560897991867e-026, # 12
5.4138560249698032e-029, # 13
-9.5141032455036651e-032, # 14
4.4497796299711634e-035, # 15
])
triang_y = np.polynomial.Polynomial(coeffs_y)
print(triang_x(1116), triang_y(398))
# => 900.8926123741549 889.0486684304415
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/506602.html
上一篇:如何在影像中找到像素顏色?
下一篇:CV2僅在蒙版區域繪制橢圓
