且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用最小二乘法将xld曲线拟合成直线

更新时间:2022-03-16 19:55:00

halcon已经有算子fit_line_contour_xld


当然也可以自己实现:

* 先获得xld曲线上的点坐标
    get_contour_xld (ObjectSelected2, Row2, Col2)
    tuple_length (Row2, Length2)
    create_matrix (Length2, 1, Col2, MatrixID_y2) //y
    create_matrix (Length2, 2, 1, MatrixID_x2) //x
    set_value_matrix (MatrixID_x2, [0:Length2-1], gen_tuple_const(Length2, 0), Row2) //把X矩阵第一列换成MX的值
    mult_matrix (MatrixID_x2, MatrixID_x2, 'ATB', MatrixMultID_x2x2) //ATB=A的转置*B,实际上就是xT*x
    mult_matrix (MatrixID_x2, MatrixID_y2, 'ATB', MatrixMultID_x2y2) //xT*y
    invert_matrix (MatrixMultID_x2x2, 'general', 0, MatrixInvID_x2x2) //xTx的逆
    mult_matrix (MatrixInvID_x2x2, MatrixMultID_x2y2, 'AB', MatrixMultID_beta2) //xTx的逆 * xT*y ;就成了系数 β(a,b组成的矩阵)
    get_full_matrix (MatrixMultID_beta2, beta_Values2) //β的值,也就是a和b的值
    X20:=Row2[0]
    X2n:=Row2[Length2-1]
    Cols_2:=beta_Values2[0] * [X20,X2n] + beta_Values2[1]
    * 生成xld直线
    gen_contour_polygon_xld (Contour2, [X20,X2n], Cols_2)
    length_xld (Contour2, Length_Con2)
    * 计算距离 (原曲线到拟合直线)
    distance_pl (Row2, Col2, X20, Cols_2[0], X2n, Cols_2[1], Distance2_C2)


---


参考文献


http://ihalcon.com/read-17610.html