跟我学机器视觉-HALCON学习例程中文详解-FUZZY检测用于开关引脚测量

时间:2021-03-30 07:15:46
跟我学机器视觉-HALCON学习例程中文详解-FUZZY检测用于开关引脚测量
* This example program demonstrates the basic usage of a fuzzy measure object.
* Here, the task is to determine the width of and the distance between the
* pins of a switch.
*
* First, read in the image and initialize the program.
***********************打开图像,获取图像宽度,高度***********************
read_image (Image, 'bin_switch/bin_switch_2')
get_image_size (Image, Width, Height)
p_reopen_window_fit (0, 0, Width, Height, 640, WindowHandle)
p_set_font (WindowHandle)
dev_display (Image)
************************显示图像如下:注意中间引脚反光**********************
 跟我学机器视觉-HALCON学习例程中文详解-FUZZY检测用于开关引脚测量                      
* Define the rectangular ROI within which the edges will be detected
* and create the measure.
Row := 290
Column := 170
Phi := rad(-130)
Length1 := 60
Length2 := 10
Interpolation := 'nearest_neighbor'
*************************生成测量矩形ROI,注意角度为-130度*********************
 跟我学机器视觉-HALCON学习例程中文详解-FUZZY检测用于开关引脚测量
gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, Interpolation, MeasureHandle)
*
* Determine all edge pairs that have a negative transition, i.e., edge pairs
* that enclose dark regions.
Sigma := 0.9
Threshold := 10
Transition := 'all'
 
 
Select := 'all'
**************进行测量,并显示检测结果,可以看出,中间的引脚检测结果不正确****
measure_pairs (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
*
* Visualize the results
dev_display (Image)
dev_set_draw ('margin')
dev_set_color ('black')
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
p_disp_dimensions (RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond, IntraDistance, InterDistance, Phi, Length2, WindowHandle)
*跟我学机器视觉-HALCON学习例程中文详解-FUZZY检测用于开关引脚测量
***************************放大后图像如下**************************************
 
跟我学机器视觉-HALCON学习例程中文详解-FUZZY检测用于开关引脚测量
*******************************检测框角度为-130时,Threshold怎么变都不行,*******************************Transition改为*****negative_strongest也不行*******
*****************Any question,  Contact Q:        1613985351*******************
************************解决方法一:检测角度为50度时,检测结果正常**********
********解决方法二:使用FUZZY检测,已知引脚宽度为9个像素左右****************
stop ()
* Due to the reflections on the middle pin, its width cannot be determined correctly.
*
* As we know that the pins appear approximately 9 pixels wide, it is very easy to expand the measure to a
* fuzzy measure that will only return pairs that have a width of approximately the given size.
*
* First, create a fuzzy function that returns 1.0 for the given pair size and 0.0 for values that
* deviate more than 2 pixels from the given pair size.
 
*************************创建SIZE范围函数**********************************
create_funct_1d_pairs ([7,9,11], [0.0,1.0,0.0], SizeFunction)
*
* Then, expand the measure to a fuzzy measure that will return only pairs of approximately the given size.
SetType := 'size'
*************************创建测量句柄****************************************
set_fuzzy_measure (MeasureHandle, SetType, SizeFunction)
*
************设为Fuzzy检测时,中间引脚找到第一条边时,再找另一条边,宽度必须在8-10之间,因此中间那条边界被忽略,刚好找的正确边缘,否则找不到****************
* Finally, determine all edge pairs that have a negative transition and approximately the given size.
Sigma := 0.9
AmpThresh := 12
FuzzyThresh := 0.5
Transition := 'negative'
Select := 'all'
******************************fuzzy检测,使用创建的测量句柄*******************
fuzzy_measure_pairs (Image, MeasureHandle, Sigma, AmpThresh, FuzzyThresh, Transition, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, RowEdgeCenter, ColumnEdgeCenter, FuzzyScore, IntraDistance, InterDistance)
********************将检测结果显示出来,可以看出现在测量结果正确了*************
* And again, visualize the results
dev_display (Image)
dev_set_draw ('margin')
dev_set_color ('black')
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
p_disp_dimensions (RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond, IntraDistance, InterDistance, Phi, Length2, WindowHandle)
*跟我学机器视觉-HALCON学习例程中文详解-FUZZY检测用于开关引脚测量
* Free the memory that has been allocated for the measure.
close_measure (MeasureHandle)