基于最小二乘的直线拟合。
一、二维坐标点
typedef itk::Image<short, 3> ITKImageType;
typedef ITKImageType::PointType PointType;
void FittingLine(vector<PointType> phy_point)
{
int number = phy_point.size();
double x_sum = 0;
double y_sum = 0;
double xy_sum = 0;
double x2_sum = 0;
for (int i = 0; i < phy_point.size(); i++)
{
x_sum = x_sum + phy_point[i][0];
y_sum = y_sum + phy_point[i][1];
xy_sum = xy_sum + phy_point[i][0] * phy_point[i][1];
x2_sum = x2_sum + phy_point[i][0] * phy_point[i][0];
}
double temp = number*x2_sum - x_sum*x_sum;
//y =ax+b
double a = 0;
double b = 0;
if (temp != 0)// 判断分母不为0
{
a = (number*xy_sum - x_sum*y_sum) / temp;
b = (x2_sum*y_sum - x_sum*xy_sum) / temp;
}
else
{
a = 1;
b = 0;
}
}
二、三维坐标点