公司名稱大全四個(gè)字seo的工作原理
??????????????圓擬合算法_基于huber加權(quán)的擬合圓算法-CSDN博客
首次擬合圓得到采用的上述blog中的 K?sa Fit?方法。
該方法存在干擾點(diǎn)時(shí),擬合得到的結(jié)果會(huì)被干擾。
首次擬合圓的方法
因此需要針對(duì)外點(diǎn)增加權(quán)重因子,經(jīng)過(guò)多次迭代后,即可得到相對(duì)理想的結(jié)果。實(shí)驗(yàn)結(jié)果如下:
code 鏈接:
???????https://download.csdn.net/download/lipeng19930407/88648546
int main()
{float CenterX = 100;float CenterY = 100;float Radius = 30;Mat Image(Size(200, 200), CV_8UC3, Scalar(0, 0, 0));// 生成符合要求的點(diǎn)float dTheta = 2 * 3.1415926 / 30;vector<Point> vecP;for (size_t i = 0; i < 30; i++){int x = CenterX + Radius * cos(i * dTheta) + rand() % 3;int y = CenterY + Radius * sin(i * dTheta) + rand() % 4;vecP.push_back(Point(x, y));}dTheta = 2 * 3.1415926 / 360;for (size_t i = 0; i < 360; i++){int x = 110 + 25 * cos(i * dTheta);int y = 120 + 25 * sin(i * dTheta);vecP.push_back(Point(x, y));}std::random_shuffle(vecP.begin(), vecP.end());circleFittingIRLS(vecP, 5, CenterX, CenterY, Radius);circle(Image, Point(int(CenterX), int(CenterY)), int(Radius), Scalar(50, 250, 250), 1);for (size_t i = 0; i < vecP.size(); i++){Image.at<Vec3b>(vecP[i].y, vecP[i].x)[0] = 150;Image.at<Vec3b>(vecP[i].y, vecP[i].x)[1] = 150;Image.at<Vec3b>(vecP[i].y, vecP[i].x)[2] = 150;}return 0;
}
基于opencv實(shí)現(xiàn)的擬合算法,上圖繪制時(shí),將圓心位置取整后繪制的示意圖,因此存在一定偏差。
權(quán)重迭代 最小二乘法 IRLS?
參考下面blog:
迭代重加權(quán)最小二乘(IRLS)算法-CSDN博客
早看到這個(gè)就不寫(xiě)這個(gè)blog 了
Iterative Reweighted Least Squares(IRLS)_irls算法-CSDN博客