struct Hisnum//直方图结构体 进行多项式拟合
{
int gray;
int num;
};
struct Hisnum//直方图结构体 进行多项式拟合
{
int gray;
int num;
};
struct xishu
{
double A1;
double A2;
double A3;
double A4;
};
xishu polfit2(Hisnum his[], int n)//最小二乘 二次多项式拟合 y=A1+A2*x+A3*x*x x为灰度 y为灰度数量
{
//-----------------公式---------------------------
//n A1 + sumX A2 + sumXX A3 = sumY
//sumX A1 + sumXX A2 + sumXXX A3 = sumXY
//sumXX A1 + sumXXX A2 + sumXXXX A3 = sumXXY
//--------------------------------------------目的:求系数A1 A2 A3
int jiange = 10;//相隔十个点选一个点进行计算
n = n / jiange + 1;
long long int sumX = 0, sumY = 0, sumXX = 0, sumXXX = 0, sumXXXX = 0, sumXY = 0, sumXXY = 0;//建立方程组
for (int i = 0; i < 256; i = i + jiange)
{
cout << "number:" << his[i].num << endl;
cout << "gray:" << his[i].gray << endl;
sumX = sumX + his[i].gray;
sumY = sumY + his[i].num;
sumXX = sumXX + his[i].gray*his[i].gray;
sumXXX = sumXXX + his[i].gray*his[i].gray*his[i].gray;
sumXXXX = sumXXXX + his[i].gray*his[i].gray*his[i].gray*his[i].gray;
sumXY = sumXY + his[i].gray*his[i].num;
sumXXY = sumXXY + his[i].gray*his[i].num*his[i].gray;
}
cout << "n:" << n << " sumX: " << sumX << " sumXX: " << sumXX &l