Halcon:计算两条曲线的相关性(皮尔森系数)

1.在做某个项目的过程中,需要检测某个区域产品厚度不一的情况
因为要检测其他缺陷,所以用面阵相机,没有用线扫相机
图像如下:
在这里插入图片描述
2.使用创建很多测量句柄,measure_pos,得到很多点,连接成xld,显示如下
在这里插入图片描述在这里插入图片描述
会出现干扰的情况
3.也会出现OK的产品,找到两个边界的情况
在这里插入图片描述
类似上图所示,红色边缘是干扰边缘,绿色边缘是真实边缘

所以想通过找到的两条边界和Demo(边界)做对比
假设和Demo的相关性一致,那么说明该边是边界。
该边在上,则说明下面区域有缺陷
该边在下,则说明上面区域是干扰

因为皮尔森相关系数的公式如下:
在这里插入图片描述
可以理解为Xi是Demo数组
Yi是测试数组。
假设 A:= [2,7,18,88,157,90,177,570] ,平均值 138.625 ,方差186.457
B:=[6,10,30,180,360, 176,320,1160] ,平均值 280.25 ,方差380.543
两个数组的平均值和方差差距都很大,但是皮尔森相关系数为0.998
相关系数 0.8-1.0 极强相关
0.6-0.8 强相关
0.4-0.6 中等程度相关
0.2-0.4 弱相关
0.0-0.2 极弱相关或无相关
如果结果是负数,说明Xi增大时,Yi减小,他们是负相关
结果是正数,说明Xi增大时,Yi增大,他们是正相关

*使用皮尔森相关系数来计算相关性
*TupleTest是待测数组,TupleDemo是模板数组
    *数组长度,即求和数量
    tuple_length (TupleTest, Count)
    tuple_length(TupleDemo,Count1)
    if (Count1<Count)
        return()
    endif
    tuple_select_range (TupleDemo, 0, Count-1, TupleDemo)
    
    *待测数组的求和
    tuple_sum (TupleTest, UpSum)
    tuple_sum (TupleDemo, DemoSum)
    
    *得到A数组的每个元素*B数组的每个元素,再求和
    ABSum:=0
    ACSum:=0

    for I := 0 to Count-1 by 1
        temp:=TupleTest[I]*TupleDemo[I]
        ABSum:=ABSum+temp
    endfor
    
    
    *分子值
    upValue:=Count*ABSum-UpSum*DemoSum
      
    
    *数组的每个元素都平方,形成新数组
    RowUpSquare:=[]
    RowDemoSquare:=[]

    for I := 0 to Count-1 by 1
        a1:=TupleTest[I]*TupleTest[I]
        RowUpSquare:=[a1,RowUpSquare]
        a2:=TupleDemo[I]*TupleDemo[I]
        RowDemoSquare:=[a2,RowDemoSquare]
    endfor
    
    tuple_sum (RowUpSquare, RowUpSquareSum)
    tuple_sum (RowDemoSquare, RowDemoSquareSum)

    *分母有两项,左边和右边
    m1:=Count*RowUpSquareSum-UpSum*UpSum
    m2:=Count*RowDemoSquareSum-DemoSum*DemoSum
    tuple_sqrt (m1, Sqrt1)
    tuple_sqrt (m2, Sqrt2)


    PValue:=upValue/(Sqrt1*Sqrt2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值