算法
使用gsl做最小二乘法的非线性拟合
由 hubdog 于 星期一, 2022-01-10 17:20 发表拟合的函数方程是
y=alpha*exp(-kappa*x);
拟合后能正确算出alpha和kappa的值,用gsl写这个玩意好啰嗦,用python的curve_fit10行代码就能搞定。
type PFitData=^TFitData; TFitData=record t:Pdouble; y:Pdouble; n:Integer; end; function market(alpha,kappa, t:double):double; begin result:=alpha*exp(-kappa*t); end; function func_f(x: Pgsl_vector; params: Pointer; f: Pgsl_vector): Integer;cdecl; var data:PFitData; alpha:double; kappa:double; i:Integer; t,yi,y:double; begin data:= PFitData(params); alpha := gsl_vector_get(x, 0);
对点云数据做匹配合并
由 hubdog 于 星期二, 2021-02-16 15:27 发表经典的算法是ICP(iterative closest point),利用最小二乘法做点群匹配,算出转换矩阵。
从点云数据用最小二乘法拟合平面
由 hubdog 于 星期二, 2021-02-02 13:12 发表Opencv仿射和透射变换的坐标变换
由 hubdog 于 星期五, 2019-02-22 09:15 发表OpenCV里面通过getAffineTransform或者findTransformECC获取变形矩阵的饿时候会得到一个2x3或者3x3的变形矩阵,分别对应仿射矩阵和透视矩阵.
变形的时候如果想要算出原始图像坐标到目标图像的坐标的时候,可以使用下面方法计算
if (matrixSize == 3) { //计算透视变换坐标 double w= warp_matrix.at<float>(2, 0)*orgX + warp_matrix.at<float>(2, 1)*orgY + warp_matrix.at<float>(2, 2); targetX = (warp_matrix.at<float>(0, 0)*orgX + warp_matrix.at<float>(0, 1)*orgY + warp_matrix.at<float>(0, 2))/w; targetY = (warp_matrix.at<float>(1, 0)*orgX + warp_matrix.at<float>(1, 1)*orgY + warp_matrix.at<float>(1, 2))/w; } else { //计算仿射变换坐标