通常我們在對一些資料進行直線,圓,圓柱,圓球等規則幾何體進行擬合時,需要用到最小二乘法,只需要使其平方差最小,即可得到相應幾何體的數學表示式。
一、最小二乘法
例如一組資料f=,需要通過這組資料得到一條直線,設該條直線為:y=ax+b;使得(ax+b)的輸出盡可能接近,從而使得**值和真實值之間的方差最小,可以用下式表達:
e=(ax1+b-y1)+(ax2+b-y2)+(ax3+b-y3)+.……+(axn+b-yn)
此時,如果使得e的值最小,即可到未知數a,b的值。
從公式中可以知曉xi,yi是已經量,只有a,b是未知量,即對其進行偏導,可以求得e最小時a,b的值。
對a求偏導:
對b求偏導:
最終得到2個二元一次方程,形成方程組,進行消元,求得a,b的值。
二、pcl中最小二乘法擬合點雲直線原始碼
int fitline(pcl::pointcloudpcl::pointxyz::ptr m_ppointcloud)
pcl::modelcoefficients::ptr coefficients4(new pcl::modelcoefficients);
pcl::pointindices::ptr inliers4(new pcl::pointindices);
pcl::sacsegmentationseg4;
seg4.setoptimizecoefficients(true);
seg4.setmodeltype(pcl::sacmodel_line);
seg4.setmethodtype(pcl::sac_lmeds);
seg4.setdistancethreshold(distancetolerance);
//輸入點雲
seg4.setinputcloud(m_ppointcloud);
//分割點雲
seg4.segment(*inliers4, *coefficients4);
if (inliers4->indices.size() != 0)
else
}**中有的引數是寫在了標頭檔案中,需要自己手動新增。
最小二乘法 直線擬合
功能描述 利用最小二乘法求斜率 xytopx 截距 方法1 xytopy 斜率 ncount 點數 void min2method double xytopy,double xytopx,int x,int y,int ncount graphics.drawline pen,point x i y...
最小二乘法擬合空間直線的原理及實現
空間直線的簡化形式為 即 則有 data load data.txt 12行3列資料,x,y,z xdata data 1 讀取n行,一列資料,並轉置 ydata data 2 zdata data 3 l length xdata 獲取陣列長度 zm zdata ones 1,l 對應為12列資料...
最小二乘法擬合直線 c 程式
point.h class point point類的宣告 float getx float gety friend float linefit point l point,int n point 友元函式 int型變數為點數 private 私有資料成員 float x,y end of poin...