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)