模糊测量是对标准测量的一种扩展,并不意味着测量是“模糊的”,而是用模糊隶属函数来控制边缘的选择。所谓的模糊隶属函数,就是将边缘的特征值转换为隶属度值,基于这些隶属值做出是否选择边缘的决定,即当隶属值大于你设定模糊阈值时,边缘就会被选中,反之则反。这种方法的优点是即使使用很低的最小阈值或平滑,也能灵活处理额外的边缘。举个简单的例子方便理解:
比如在测量开关引脚之间的宽度和距离时,引脚可能会有反射(左图),直接用一维测量会产生错误的结果(中图),这时将“大头针的宽度的大约为9像素宽度”这个信息转换为模糊隶属函数。比如对于预期的宽度9像素,对应的隶属值为1;对于与预期的大小相差3个像素以上,则隶属值为0,中间的值采用线性插值,即宽度大于8像素的隶属值为0.67.当你设置的阈值为0.5时,那宽度为7.5-10.5像素之间的像素边缘对才会被选中。通过这样的模糊测量则可以正确测量引脚的宽度(右图)。
模糊测量的主要步骤:
- 使用算子create_funct_1d_pairs创建模糊函数;
函数: create_funct_1d_pairs( : : XValues, YValues : Function) — 从一组(x,y)对创建一个函数。
参数:
XValues (in) :输入功能点X值
如何选参: 了解测量对象的大约测量值或者一个范围,将测量值扩展为一个模糊测量值,因为它只返回约为给定大小的测量对值。
YValues(in) :输入功能点Y值
如何选参: 对于给定的测量对大小返回1.0,对于偏离给定的测量对大小超过2个像素的值,返回0.0。
Function(out) :创建函数
最终参数确定: 在测量前我们可以知道其三个引脚的宽度大约是9个像素,所以第一个参数我们给的范围是7,9,11。对于给定的对大小返回1.0,对于偏离给定对大小超过2个像素的值,返回0.0,从而确定第二个参数的数值。最终确定创建模糊函数中的参数:
create_funct_1d_pairs ([7,9,11], [0.0,1.0,0.0], SizeFunction) - 使用算子set_fuzzy_measure或set_fuzzy_measure_norm_pair 为边缘对指定一个归一化模糊函数。注意:可以重复调用算子定义多个模糊集,但是不能对同一模糊集指定多个模糊隶属函数,指定第二个模糊函数意味着放弃第一个定义的模糊函数并将其替换为第二个模糊函数。之前为模糊集指定的模糊函数可以通过reset_fuzzy_measure删除。
- 使用算子fuzzy_measure_pos、fuzzy_measure_pairs或fuzzy_measure_pairing提取模糊测量的边缘对。