zoukankan      html  css  js  c++  java
  • halcon之最小二乘拟合直线

    如果不了解最小二乘算法 请先阅读: Least squares的算法细节原理https://en.wikipedia.org/wiki/Least_squares

    通常在halcon中拟合直线会用houghline或者 fitline。本文提供一种新的选择,用halcon的矩阵操作实现最小二乘拟合直线

    首先随机生成一组数据
    Mx:=[100:10:500]
    tuple_length(Mx,len)
    tuple_gen_const(len,5,r)
    Ma:=2
    Mb:=40
    tuple_rand(len , noise)
    My:= Ma *Mx + Mb*noise
    gen_circle(ContCircle, My, Mx, r)
    

    接下来用矩阵进行最小二乘求解
    * y = ax + b
    * y1 = ax1 + b
    * y2 = ax2 + b
    * ... .......
    * yn = ax + b
     
    
    
    
    create_matrix(len,1,My,y)
    create_matrix(len,2,1,x)
    set_value_matrix(x, [0:len-1], gen_tuple_const(len, 0),Mx)
     
    * XT 代表X的转置 inv(*)代表*的逆
    * x beta = y
    * xT x beta = xT y
    * beta = inv( xT x) xT y
     
    mult_matrix(x,x,'ATB',xtx)
    mult_matrix(x,y,'ATB',xty)
     
    invert_matrix(xtx,'general', 0, invxtx)
     
    mult_matrix(invxtx,xty,'AB', beta)
     
    get_full_matrix(beta, Values)
     
    Newy:=Values[0] * [10,800] + Values[1]
     
    gen_contour_polygon_xld(Contour, Newy, [10,800])
    

    关注微信:halconhub,每日获取halcon精华文章

  • 相关阅读:
    05day02wdt
    05day02pwm
    05day01ioctl_led
    04clock_06semqphore
    04lock_05seqlock
    04lock_03rwlock
    [git]入门-工作区、暂存区、版本库
    [git]入门-创建版本库
    [linux-脚本]shebang(shabang #!)
    [ffmpeg]安装
  • 原文地址:https://www.cnblogs.com/xiaomaLV2/p/6697167.html
Copyright © 2011-2022 走看看