Python 检查二维点是否位于曲线上
我的形象: 我试图检测图像中的曲线——图中有堆叠的硬币。我想数一数平行的曲线。大多数线条是不连续的 假设我在numpy.polyfit中使用了5个点,得到了描述直线的函数 最好的方法是什么来搜索这些线,并说这些点在第一行,这些点在第二行等等 我在考虑尝试最小二乘法,并将线向上向下移动。我认为这条曲线是一条抛物线(ax^2+bx+c)-移动它意味着移动顶点x=-b/2a=>y=a*(-b/2a)^2+b*(-b/2a)+c 请有人帮我举一个例子,如何将图像中的点拟合到我刚找到的p。这里如何应用最小二乘法Python 检查二维点是否位于曲线上,python,numpy,machine-learning,least-squares,data-fitting,Python,Numpy,Machine Learning,Least Squares,Data Fitting,我的形象: 我试图检测图像中的曲线——图中有堆叠的硬币。我想数一数平行的曲线。大多数线条是不连续的 假设我在numpy.polyfit中使用了5个点,得到了描述直线的函数 最好的方法是什么来搜索这些线,并说这些点在第一行,这些点在第二行等等 我在考虑尝试最小二乘法,并将线向上向下移动。我认为这条曲线是一条抛物线(ax^2+bx+c)-移动它意味着移动顶点x=-b/2a=>y=a*(-b/2a)^2+b*(-b/2a)+c 请有人帮我举一个例子,如何将图像中的点拟合到我刚找到的p。这里如何应用最
提前谢谢 在互联网上阅读和挖掘了很多天之后,我发现了一个使用lmfit的非常优雅的解决方案。我感谢本模块的创作者以及grea所做的工作 现在是将数据拟合到曲线的解决方案。 当我们有一个多项式p
>>> p
poly1d([0.42857143,-1.71428571,0.05714286])
使用这些参数创建python函数
def fu(x,a=0.4285,b=-1.71,c=0.057):
return x*x*a + x * b + c
现在,我们可以使用该函数创建lmfit模型
>>> gmodel = Model(fu)
>>> gmodel.param_names
['a', 'c', 'b']
>>> gmodel.independent_vars
['x']
您可以看到,它标识了自变量和参数。它将尝试更改参数,以使函数最适合数据
>>> result = gmodel.fit(y_test, x=x_test)
>>> print(result.fit_report())
[[Model]]
Model(fu)
[[Fit Statistics]]
# function evals = 11
# data points = 8
# variables = 3
chi-square = 2.159
reduced chi-square = 0.432
Akaike info crit = -4.479
Bayesian info crit = -4.241
[[Variables]]
a: 0.12619047 +/- 0.050695 (40.17%) (init= 0.4285)
c: -0.55833335 +/- 0.553020 (99.05%) (init= 0.057)
b: -0.52857141 +/- 0.369067 (69.82%) (init=-1.71)
[[Correlations]] (unreported correlations are < 0.100)
C(a, b) = -0.962
C(c, b) = -0.793
C(a, c) = 0.642
在互联网上阅读和挖掘了很多天之后,我发现了一个使用lmfit的非常优雅的解决方案。我感谢本模块的创作者以及grea所做的工作 现在是将数据拟合到曲线的解决方案。 当我们有一个多项式p
>>> p
poly1d([0.42857143,-1.71428571,0.05714286])
使用这些参数创建python函数
def fu(x,a=0.4285,b=-1.71,c=0.057):
return x*x*a + x * b + c
现在,我们可以使用该函数创建lmfit模型
>>> gmodel = Model(fu)
>>> gmodel.param_names
['a', 'c', 'b']
>>> gmodel.independent_vars
['x']
您可以看到,它标识了自变量和参数。它将尝试更改参数,以使函数最适合数据
>>> result = gmodel.fit(y_test, x=x_test)
>>> print(result.fit_report())
[[Model]]
Model(fu)
[[Fit Statistics]]
# function evals = 11
# data points = 8
# variables = 3
chi-square = 2.159
reduced chi-square = 0.432
Akaike info crit = -4.479
Bayesian info crit = -4.241
[[Variables]]
a: 0.12619047 +/- 0.050695 (40.17%) (init= 0.4285)
c: -0.55833335 +/- 0.553020 (99.05%) (init= 0.057)
b: -0.52857141 +/- 0.369067 (69.82%) (init=-1.71)
[[Correlations]] (unreported correlations are < 0.100)
C(a, b) = -0.962
C(c, b) = -0.793
C(a, c) = 0.642
您是否考虑过使用RANSAC?您是否需要专门检测那些“硬币”或任何曲线?在第一种情况下,这些是椭圆段(不是抛物线段),不是吗?@SargeBorsch你是对的,这些是椭圆段,但我认为我们可以使用最左边的像素、最右边的像素和顶点将其近似为抛物线。你不同意吗?@Shai我没有试过RANSAC,我对它了解不多。我会深入研究它,看看它是否可行。@Shai我发现它是最符合我需要的RANSAC实现。我会修改它并尝试更新。你考虑过使用RANSAC吗?你需要特别检测那些“硬币”或任何曲线吗?在第一种情况下,这些是椭圆段(不是抛物线段),不是吗?@SargeBorsch你是对的,这些是椭圆段,但我认为我们可以使用最左边的像素、最右边的像素和顶点将其近似为抛物线。你不同意吗?@Shai我没有试过RANSAC,我对它了解不多。我会深入研究它,看看它是否可行。@Shai我发现它是最符合我需要的RANSAC实现。我将修改它并尝试它,然后发布更新。