c++椭圆最小二乘法原理_c++ 椭圆拟合之最小二乘法(图像处理)

本文介绍了使用C++实现椭圆拟合的最小二乘法原理,通过迭代更新参数,最终得到最佳椭圆模型。并展示了如何在图像上绘制拟合的椭圆,提供了一个简单的图像处理示例。
摘要由CSDN通过智能技术生成

= 11)

{

break;

}

}

}

sum_1 = learn*s1*sum_1;

sum_2 = learn*s1*sum_2;

sum_3 = learn*s1*sum_3;

sum_4 = learn*s1*sum_4;

sum_5 = learn*s1*sum_5;

// 更新 参数theta

X0 = X0 - sum_1;

Y0 = Y0 - sum_2;

a = a - sum_3;

b = b - sum_4;

theta = theta + sum_5;

cout

{

for(int j = 25; jwidth()-10; j++)

{

/*

float y = sqrtf(b*b - ((b*b)/(a*a))*(j-X0)*(j-X0)) + Y0;

y1 = Y0 - sqrtf(b*b - ((b*b)/(a*a))*(j-X0)*(j-X0));

sum_0 += sqrtf(powf((y_mats[j] - y),2.0));

if(y>0&&y<890)

{

inputImage->setPixel(j,int(y+0.3),qRgb(0,255,0));

}

if(y1>0&&y1<900)

inputImage->setPixel(j,int(y1),qRgb(0,255,0));

*/

float cx = j - X0;

float cy = i - Y0;

float x = cx * cos(theta) - cy * sin(theta);

float y = cx * sin(theta) + cy * cos(theta);

x = (x * x) / powf(a,2);

y = (y * y) / powf(b,2);

float result = x + y;

if(abs(result -1)<0.01)

{

inputImage->setPixel(j,i,qRgb(0,255,0));

}

}

}

Show_Image(*inputImage);

/*

*/

ellipse[0] = X0;

ellipse[1] = Y0;

ellipse[2] = a;

ellipse[3] = b;

ellipse[4] = theta;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值