跟我学机器视觉-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)************************显示图像如下:注意中间引脚反光********************** * Define the rectangular ROI within which the edges will be detected* and create the measure.Row := 290Column := 170Phi := rad(-130)Length1 := 60Length2 := 10Interpolation := 'nearest_neighbor'*************************生成测量矩形ROI,注意角度为-130度********************* 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.9Threshold := 10Transition := 'all' Select := 'all'**************进行测量,并显示检测结果,可以看出,中间的引脚检测结果不正确****measure_pairs (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)** Visualize the resultsdev_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)****************************放大后图像如下************************************** *******************************检测框角度为-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.9AmpThresh := 12FuzzyThresh := 0.5Transition := '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 resultsdev_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)** Free the memory that has been allocated for the measure.close_measure (MeasureHandle)