| set_fuzzy_measure( : : MeasureHandle, SetType, Function : ) set_fuzzy_measure从参数Function 传入一个指定的模糊函数。
 指定的模糊函数使fuzzy_measure_pos和fuzzy_measure_pair / fuzzy_measure_pairing能够评估和选择检测到的边缘候选项。
 为此目的,不同边缘特征的加权特征可以由每个函数定义。
 这样一个指定的特征称为模糊集。
 如果没有为模糊集指定函数,就意味着不能使用该特征进行最终的边缘评估。
 将第二个模糊函数设置为一个集合意味着丢弃第一个定义的函数,并用第二个函数替换它。
 通过reset_fuzzy_measure可以完全丢弃以前定义的模糊函数。
 
 可定义由SetType参数选择的五种不同模糊集类型的函数,集合的子类型相互排斥:
 “contrast”将使用模糊函数来评估边缘候选点的振幅。
 在提取边缘对时,通过对边缘模糊对比分数的几何平均得到模糊评价。
 
 “position”的模糊函数评估每个边缘候选对象到测量对象参考点的距离,
 该距离由gen_measure_arc或gen_measure_rectangle2生成。
 参考点位于起点,而“position_center'”或“position_end”将参考点设置为一维灰度值轮廓的中间或末端。
 如果模糊位置评估取决于对象沿轮廓的位置,“position_first_edge”/“'position_last_edge”将参考点设置在第一个/最后一个提取的边的位置。
 提取边缘对时,一对边的位置由两条边的模糊位置分数的几何平均值来引用。
 与“position”类似,“position_pair”计算每个边缘对到度量对象的参考点的距离。
 一对的位置由两条边之间的中心点确定。
 对象的引用可以分别由'position_pair_center'、'position_pair_end'和'position_first_pair'、'position_last_pair'设置。
 与“position”相反,这个集合只用于fuzzy_measure_pair /fuzzy_measure_pairing。
 
 “size'表示一个模糊集,它以像素为单位计算一对边的赋范距离。
 这个集合只被fuzzy_measure_pair /fuzzy_measure_pairing使用。
 通过使用相应的模糊值0.0结束函数来指定大小的上限将加快fuzzy_measure_pair / fuzzy_measure_pairing,因为不是所有可能的对都需要考虑。
 
 “gray”设置一个模糊函数,对一对图像的两条边之间的平均投影灰度值进行加权。
 这个集合只被fuzzy_measure_pair / fuzzy_measure_pairing使用。
 
 模糊函数定义为由至少两对值组成的分段线性函数,按x值的升序排序。
 x值表示边缘特征,必须位于集合类型的参数空间内,即,以“contrast”和“gray为特征,例如字节图像在0.0 <= x <= 255.0范围内。
 在“size”情况下x必须满足0.0 <= x,而在“position”情况下x可以是任意实数。
 
 模糊函数的y值表示对应特征值的权重,必须满足0.0 <= y <= 1.0的范围。
 在函数的区间之外,由最小和最大的x值定义,区间边界的y值不断地延续。
 这样的模糊函数可以由create_funct_1d_pair生成。
 
 2.fuzzy_measure_pairs(Image : : MeasureHandle, Sigma, AmpThresh, FuzzyThresh, Transition : RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, RowEdgeCenter, ColumnEdgeCenter, FuzzyScore, IntraDistance, InterDistance)
 fuzzy_measure re_pair用于提取垂直于矩形或环形圆弧主轴的直线边缘对。
 除了measure re_pair,它还使用了模糊函数来评估和选择边缘对。
 
 fuzzy_measure_pairs的提取算法与fuzzy_measure_pos是一致的。
 此外,相邻的边被分组成对。要提取相交或包含彼此的对,可以使用fuzzy_measure_pairing。
 
 如果Transition = 'positive',则在矩形或环形弧的主轴方向上具有从暗到光的Transition的边缘点将在RowEdgeFirst和ColumnEdgeFirst中返回。
 在这情况下,具有从亮到暗转换的对应边缘以RowEdgeSecond和columnedgesececond返回。
 如果Transition = 'negative',则行为正好相反。
 
 如果Transition = 'all',则第一个检测到的边缘定义RowEdgeFirst和ColumnEdgeFirst。
 即。,根据测量对象的位置,返回具有亮-暗-亮过渡的边缘对或具有暗-亮-暗过渡的边缘对。
 这适用于测量相对于背景具有不同亮度的对象。
 
 提取亚像素边缘位置后,边缘配对
 配对算法对边缘进行分组,以防止对的交错和包含。
 用模糊函数对边缘对的特征进行评价,
 模糊函数可以用set_fuzzy_measure , set_fuzzy_measure_norm_pair来设置。
 通过参数fuzzythresh可以确定选择哪一对边,fuzzythresh构成了所有模糊集的权重阈值,即定义的模糊函数权重的几何平均值。
 
 所选的边作为单点返回,单点位于矩形或环形圆弧的主轴上。
 对应的边缘振幅在 AmplitudeFirst , AmplitudeSecond,返回,
 模糊分数在FuzzyScore返回。
 此外,每个边缘对之间的距离在intrdistance中返回,
 相邻边缘对之间的距离在InterDistance中返回。
 
 其中IntraDistance对应EdgeFirst与edgeecond 之间的距离,
 InterDistance对应edgeecond 与EdgeFirst[i+1]之间的距离,即,元组间距离包含的元素比边对的元组少一个。
 
 3.reset_fuzzy_measure( : : MeasureHandle, SetType : )
 reset_fuzzy_measure丢弃模糊集SetType 的模糊函数。
 这个函数以前应该是由set_fuzzy_measure设置。
 
 4.fuzzy_measure_pairing(Image : : MeasureHandle, Sigma, AmpThresh, FuzzyThresh, Transition, Pairing, NumPairs : RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, RowPairCenter, ColumnPairCenter, FuzzyScore, IntraDistance)
 fuzzy_measure re_pairing用于提取垂直于矩形或环形圆弧主轴的直线边缘对。
 
 fuzzy_measure_pairing的提取算法与fuzzy_measure_pair(详见上面介绍)相同,
 但有一个例外,即也可以使用参数Pairing提取交错和包含的对。
 目前只有“no_constraint”可用,它返回所有可能的边缘对,允许交叉和包含对。
 
 只返回得分最高的数对边缘对,而0表示返回所有可能找到的边缘组合。
 
 所选的边作为单点返回,单点位于矩形或环形圆弧的主轴上。
 对应的边缘振幅在 AmplitudeFirst, AmplitudeSecond返回,
 模糊分数在 FuzzyScore返回。
 每个边缘对之间的距离在intrdistance中返回,
 对应于EdgeFirst和EdgeSecond之间的距离。
 
 5.set_fuzzy_measure_norm_pair( : : MeasureHandle, PairSize, SetType, Function : )
 set_fuzzy_measure re_norm_pair指定传入函数的规范化模糊函数。
 指定的模糊函数使
 fuzzy_measure_pos、
 fuzzy_measure_pair
 fuzzy_measure_pairing
 能够对检测到的候选边和边缘对进行评估和选择。
 为此目的,不同边缘特征的加权特征可以由每个函数定义。
 这样一个指定的特征称为模糊集。
 如果没有为模糊集指定函数,就意味着不能使用该特征进行最终的边缘评估。
 将第二个模糊函数设置为模糊集意味着丢弃第一个定义的函数,并用第二个函数替换它。
 与set_fuzzy_measure不同的是,这些函数的横坐标x必须相对于所需的边缘对大小s来定义(以对大小传递)。
 这支持对定义函数的通用使用。
 通过reset_fuzzy_measure可以完全丢弃以前定义的归一化模糊函数。
 
 可定义由SetType参数选择的三种不同模糊集类型的函数,集合的子类型相互排斥:
 “size”表示一个模糊集,该模糊集以像素为单位计算一对边的归一化距离:
 
 工业视觉一维模糊测量函数介绍2   通过使用相应的模糊值0.0结束函数来指定大小的上限x_max将加快fuzzy_measure_pair / fuzzy_measure_pairing,
 因为并不是所有可能的对都必须考虑。
 此外,这个模糊集还可以通过'size_diff'指定为规范化的大小差异。
 
 工业视觉一维模糊测量函数介绍3   以及size_abs_diff的绝对规格化大小差异
 
 工业视觉一维模糊测量函数介绍4   position模糊函数计算每个边缘候选点到测量对象参考点的符号距离p,
 由gen_measure re_arc或gen_measure re_rectangle2生成:
 
 工业视觉一维模糊测量函数介绍5   参考点位于起点,而“position_center”或“'position_end' ”将参考点设置为一维灰度值轮廓的中间或末端。
 如果模糊位置评估取决于沿着轮廓position-first-edge/position-last-edge的对象位置,
 则将参考点设置在第一个/最后一个提取的边的位置。
 在提取边缘对时,一对边的位置由两条边的模糊位置分数的几何平均值来引用。
 
 归一化模糊函数定义为由至少两对值组成的分段线性函数,按x值的升序排列。
 模糊函数的y值表示对应特征值的权重,必须满足0.0 <= y <= 1.0的范围。
 在函数的区间之外,由最小和最大的x值定义,区间边界的y值不断地延续。
 这样的模糊函数可以由create_funct_1d_pair生成。
 
 5.fuzzy_measure_pos(Image : : MeasureHandle, Sigma, AmpThresh, FuzzyThresh, Transition : RowEdge, ColumnEdge, Amplitude, FuzzyScore, Distance)
 fuzzy_measure re_pos提取垂直于矩形或环形圆弧主轴的直线边缘。除了measure re_pos,它还使用模糊函数来评估和选择边缘。
 
 模糊测量算法的工作原理是对垂直于矩形或环形弧长轴的“切片”中的灰度值进行平均,以获得一维边缘轮廓。
 采样是在图像的亚像素位置,从矩形中心开始,以整数行和列的距离(在矩形的坐标框中)进行的。
 由于这涉及到一些可以在多个测量中重复使用的计算,因此 gen_measure_rectangle2仅用于执行这些计算一次,
 从而显著提高fuzzy_measure_pos的速度。
 由于在灰度值的亚像素计算中存在精度和速度之间的权衡,因此在提取边缘位置的精度方面,
 可以在 gen_measure_rectangle2.中选择不同的插值方案。
 (插值只影响不与图像轴和环形弧对齐的矩形。)
 gen_measure_rectangle2生成的测量对象为measurehandle。
 
 在计算一维边缘轮廓后,通过将轮廓与标准差sigma的高斯平滑核的导数卷积来计算亚像素边缘位置。
 突出的边缘可以通过参数ampthresh来选择,该参数构成对振幅的阈值,即边缘的一阶导数的绝对值。
 此外,
 可以只选择正边,即在矩形长轴方向上构成暗到亮过渡的边(transition='positive'),
 或负边,即亮到暗过渡(transition='negative'),
 或同时选择两种边(transition='all')。
 最后,可以选择返回哪些边缘点。
 
 在提取亚像素边缘位置后,利用相应的模糊函数对这些边缘的特征进行评估,该模糊函数可以通过设置模糊测度来设置。
 选择哪些边可以用参数fuzzythresh来确定,该参数构成所有模糊集的权重阈值,即定义集权重的几何平均值。
 
 所选边作为单点返回,该点位于矩形或环形弧的长轴上,in(rowedge,columnedge)。
 相应的边缘振幅以振幅的形式返回,模糊分数以模糊核心的形式返回。
 此外,连续边缘点之间的距离以距离返回。
 这里,距离对应于边和边[i+1]之间的距离,
 即tuple距离包含一个小于tuples rowedge和columnedge的元素。
 
 下面是前面介绍的几个函数的具体使用例程
 这个示例程序演示了模糊度量对象的基本用法。
 任务是确定活动扳手脚的宽度和距离,如图,在红色框内执行距离与宽度的检测
 
 工业视觉一维模糊测量函数介绍1   
 开始 使用函数measure_pairs不能正常检测,
 后面分别使用了模糊检测函数fuzzy_measure_pairs,
 fuzzy_measure_pairing
 fuzzy_measure_pos
 都可以正确检测出扳手的间距与宽度,结果如图
 
 工业视觉一维模糊测量函数介绍   下面是整个例程代码:
 
 复制代码read_image (Image, 'bin_switch/bin_switch_2')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_resize_window_fit_size (0, 0, Width, Height, -1, 640)
dev_set_draw('margin')
* 定义测量区域
Row := 290
Column := 170
Phi := rad(-130)
Length1 := 60
Length2 := 10
Interpolation := 'nearest_neighbor'
gen_rectangle2 (Rectangle1, Row, Column, Phi, Length1, Length2)
dev_display (Image)
dev_display (Rectangle1)
gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, Interpolation, MeasureHandle)
*确定所有具有负转换的边缘对,即黑暗区域的边缘对。
Sigma := 1.1
Threshold := 20
Transition := 'negative'
Select := 'all'
measure_pairs (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
* 结果显示
p_disp_dimensions (RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond, IntraDistance, InterDistance, Phi, Length2, WindowHandle)
stop ()
* 由于中间脚的反射,无法正确确定其宽度。
*我们知道引脚大约有9个像素宽,因此很容易将度量扩展为模糊度量,只返回宽度近似于给定大小的边缘对。
*首先,创建一个模糊函数,对于给定的对大小返回1.0,对于与给定的对大小偏离2个像素以上的值返回0.0。
create_funct_1d_pairs ([7,9,11], [0.0,1.0,0.0], SizeFunction)
* 然后,将度量扩展为一个模糊度量,它将只返回大约给定大小的对
SetType := 'size'
set_fuzzy_measure (MeasureHandle, SetType, SizeFunction)
* 最后,确定所有具有负转换和近似给定大小的边缘对, 再将结果显示出来,使用函数fuzzy_measure_pairs
Sigma := 1.1
AmpThresh := 20
FuzzyThresh := 0.5
Transition := 'negative'
fuzzy_measure_pairs (Image, MeasureHandle, Sigma, AmpThresh, FuzzyThresh, Transition, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, RowEdgeCenter, ColumnEdgeCenter, FuzzyScore, IntraDistance, InterDistance)
p_disp_dimensions (RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond, IntraDistance, InterDistance, Phi, Length2, WindowHandle)
*使用函数fuzzy_measure_pairing
fuzzy_measure_pairing (Image, MeasureHandle, Sigma, AmpThresh, FuzzyThresh, Transition, 'no_restriction', 10, RowEdgeFirst1, ColumnEdgeFirst1, AmplitudeFirst1, RowEdgeSecond1, ColumnEdgeSecond1, AmplitudeSecond1, RowPairCenter, ColumnPairCenter, FuzzyScore1, IntraDistance1)
p_disp_dimensions (RowEdgeFirst1, ColumnEdgeFirst1, RowEdgeSecond1, ColumnEdgeSecond1, IntraDistance1, InterDistance, Phi, Length2, WindowHandle)
*使用函数fuzzy_measure_pos
reset_fuzzy_measure (MeasureHandle, SetType)
set_fuzzy_measure_norm_pair (MeasureHandle, 10, SetType, SizeFunction)
fuzzy_measure_pos (Image, MeasureHandle, Sigma, AmpThresh, FuzzyThresh, Transition, RowEdge, ColumnEdge, Amplitude, FuzzyScore2, Distance)
gen_cross_contour_xld (Cross, RowEdge, ColumnEdge, 6, 0.785398)
dev_set_color ('red')
dev_display (Cross)
*释放资源
close_measure (MeasureHandle)
 
   如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!    
 
 
 
 
 |