C语言实现最小二乘法

void leastSquareLinearFit( imginfo *img,uchar *res,int *x ,int *y,int n){
int height=img->height;
int width=img->width;
printf("height=%d ,width=%d \r\n",height,width);
int i,j;
memset(res,0,sizeof(uchar)*1000*1000);
int l=0,m=0;
double a=0,b=0;
for(i=0;i<n;i++){

        l=*(x+i)+width/2-50;
        m=*(y+i)+height/2-50;
        *(res+l+m*width)=128;

}
long sum_x=0,sum_y=0,sum_xy=0,sum_xx=0;
for(i=0;i<n;i++)
{
sum_x+=*(x+i);
sum_y+=*(y+i);
sum_xy+=(*(x+i))*(*(y+i));
sum_xx+=(*(x+i))*(*(x+i));
}
printf("sum_x=%d,sum_y=%d,sum_xy=%d,sum_xx=%d \r\n",sum_x,sum_y,sum_xy,sum_xx);
a=((sum_xx)*(sum_y)-(sum_x)*(sum_xy))/(n*(sum_xx)-sum_x*sum_x);//套用公式
b=(n*sum_xy-sum_x*sum_y)/(n*sum_xx-sum_x*sum_x);
printf("a=%f,b=%f \r\n",a,b);
int yy=0;
for(i=0;i<n;i++){
    yy= b*(*(x+i))+a;
    l=*(x+i)+width/2-50;
    m=yy+height/2-50;
    *(res+l+m*width)=255;

}
}

                        原图                                                        结果

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值