图像曲线拟合的多项式最小二乘法

Polynomial Least Squares for Image Curve Fitting

本文关键字:小二 多项式 曲线拟合 图像      更新时间:2023-10-16

我正在尝试将曲线拟合到图像中的多个像素,以便对其形状进行进一步处理。有人知道如何在C++中实现最小二乘法吗?最好使用以下参数:x数组、y数组和答案数组(答案数组的长度应该说明需要计算多少系数)?

如果这不是您自己实现的练习,我建议您使用像GNU gsl这样的现成库。请查看名称以gsl_multifit_开头的函数,例如,请参见此处的第二个示例。

如果你试图像在图中那样拟合有序点(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%2Folk.uio.no%2Fs39%2Fnchap6.pdf&ei=Yp8CUNvHC8Kg0QX6r_mEBw&usg=AFQjCNHBUZ5t2Y7C8eONYSosRydLs4Zu4A

如果看不到你试图拟合的图像,很难说-你的数据很可能以非参数的方式与线性最小二乘多项式拟合-如果是这样,你只需要一个线性代数库,你可以自己这样编码近似值:http://en.wikipedia.org/wiki/Ordinary_leastrongquares

即便如此,所有形式的近似都需要你在拟合之前决定你的形式(函数基和次数等)。例如,如果你想决定是否需要4次、5次、6次或7次多项式来拟合你的数据,你需要拟合每一个,并评估其是否适合自己。没有通用的方法(至少我不知道)可以告诉你你需要适应数据的近似程度。