我正在尝试将曲线拟合到图像中的多个像素,以便可以对其形状进行进一步处理。有谁知道如何在 C/++ 中实现最小二乘法,最好使用以下参数:x 数组、y 数组和答案数组(答案数组的长度应该说明需要计算多少个系数)?
2 回答
如果您尝试像在图形中一样拟合有序点 (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=AFQjCNHBUZ5t2Y7C8eONYSosRyA
如果没有看到您正在尝试拟合的确切图像,很难说 - 您的数据很可能可以通过线性最小二乘多项式以非参数方式拟合 - 如果是这样,您只需要一个线性代数库你可以像这样自己编写近似值:http ://en.wikipedia.org/wiki/Ordinary_least_squares
即便如此,所有形式的近似都要求您在拟合之前确定您的形式(功能基础和度数等)。例如,如果您想决定是否需要 4 次、5 次、6 次或 7 次多项式拟合您的数据,您需要拟合每个数据并评估是否适合您自己。没有通用的方法(至少我知道没有)可以告诉您需要适合您的数据的近似程度。