2012-07-15 99 views
1

我想将曲线拟合成图像中的许多像素,以便我可以对其形状进行进一步处理。有谁知道如何在C/++中实现最小二乘法,最好使用以下参数:一个x数组,一个y数组和一个答案数组(答案数组的长度应该指出需要计算多少个系数)?用于图像曲线拟合的多项式最小二乘法

+0

一个确切的解决方案是:http://rosettacode.org/wiki/Polynomial_regression#C – user293895 2012-07-16 11:34:30

回答

1

如果这不是您自己实施这个练习的一些练习,我会建议您使用现成的库,如GNU gsl。查看名称以gsl_multifit_开头的功能,请参阅第二个例子here

+0

感谢您的这一点,但我不确定如何使用gsl_multifit_,这些示例似乎是针对3维数据,我不知道协方差矩阵是如何工作的。 – user293895 2012-07-15 12:10:40

+0

您是否有可用于商业软件的解决方案,而无需提供源代码? – wil 2014-01-27 05:58:06

1

如果您想要像图表中那样拟合有序点(x,y),您可以使用线性最小二乘法,但始终使用此类方法时,您需要指定用于近似的多项式的阶数(长度你的答案阵列大概是)。如果你的点是能够形成一个闭环或某个结构轮廓的平面上的一般有序点(例如试图拟合描述一个椭圆或一个圆或其他闭合或更复杂几何的点),那么你要去需要更复杂的东西。您仍然可以使用最小二乘方,但您需要使用样条曲线等参数类型曲线。看看这个链接的PDF可能会给你所需要的(或者至少说明我在说什么):http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CE0QFjAA&url=http%3A%2F%2Ffolk.uio.no%2Fin329%2Fnchap6.pdf&ei=Yp8CUNvHC8Kg0QX6r_mEBw&usg=AFQjCNHBUZ5t2Y7C8eONYSosRydLs4Zu4A

没有看到你正在尝试合适的图像很难说 - 很可能您的数据可以用非线性最小二乘多项式的非参数方式拟合 - 如果是这样,您只需要一个线性代数库,并且可以像下面这样自己编码近似值:http://en.wikipedia.org/wiki/Ordinary_least_squares

即使如此,所有形式的近似都要求你在决定你的表格(函数基础和度数等)之前,先确定它。例如,如果您想确定是否需要4,5,6或7次多项式来拟合您的数据,则需要适合每个数据并评估自己的适用性。没有通用的方法(至少没有我知道的)会告诉你需要适合数据的逼近程度。

+0

不幸的是,我需要在我的最小二乘法中使用多项式,而我刚刚发现可能数据实际上可能是3维的这一事实,因为我需要根据数据呈现的顺序提供最小二乘算法。虽然数学PDF是有帮助的,我不太擅长数学和C代码之间的转换。 – user293895 2012-07-15 15:08:46

+0

在3D中拟合曲线是一项艰巨的任务。您可能需要使用正交距离回归和参数曲线,如果您从头开始对其进行编码,则这并不重要。你能提供你所拥有的数据的图像吗? – mathematician1975 2012-07-16 08:51:58

+0

嗯,我正在尝试创建一个通用的形状描述(稍后用于形状识别),示例图像可能是这样的字母:http://tinypic.com/r/bcv45/6 – user293895 2012-07-16 10:22:07