您的位置:首页 > 其它

跟我学机器视觉-HALCON学习例程中文详解-IC引脚测量

2016-05-17 14:13 731 查看


跟我学机器视觉-HALCON学习例程中文详解-IC引脚测量

跟我学机器视觉-HALCON学习例程中文详解-IC引脚测量

Lead Measurement: Example for the application of the measure object

including a lot of visualization operators.

First, the length of the leads is measured, then, their width and distance from each other.

First, read in the image and initialize the program

read_image (Image, 'ic_pin')
*****************取得图像第一通道的指针,同时得到图像宽度高度*********
get_image_pointer1 (Image, Pointer, Type, Width, Height)
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, 509, 509, WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_display (Image)
****************显示图像如下:****************************************



dev_set_draw ('margin')
dev_set_line_width (3)

Define and display the rectangular ROIs within which the edges will be detected

Row := 55
RowBottom := 955
Column := 200
Phi := rad(-90)
Length1 := 50
Length2 := 35
dev_set_color ('gray')
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle, RowBottom, Column, Phi, Length1, Length2)
*************************测量位置如绿色矩形所示下:**************************



disp_continue_message (WindowHandle, 'black', 'true')
stop ()

Create a measure object for the ROI at the top of the image.

******获取一阶灰度剖面图的插值方法,测量矩形框与图像坐标系之间有角度时生效******
Interpolation := 'nearest_neighbor'
****************************生成测量矩形框,先测上部****************************
gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, Interpolation, MeasureHandle)

Determine all edges and calculate the lead height at the top of the image

Sigma := 1.0
Threshold := 30
Transition := 'all'
Select := 'all'
**************************************进行测量********************************
measure_pos (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdge, ColumnEdge, Amplitude, Distance)
LeadLength1 := Distance

Display the results

dev_set_color ('white')
***********************************将测量结果画出*****************************



disp_line (WindowHandle, RowEdge, ColumnEdge-Length2, RowEdge, ColumnEdge+Length2)
disp_message (WindowHandle, 'Lead Length: '+LeadLength1$'.2f', 'window', RowEdge[1]+40, ColumnEdge[1]+100, 'yellow', 'false')

Shift the measure object and determine the lead height at the bottom of the image

************************转移测量框至新的参考坐标点,及测量下部******************
translate_measure (MeasureHandle, RowBottom, Column)
**************************************进行测量********************************
measure_pos (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdge, ColumnEdge, Amplitude, Distance)
LeadLength2 := Distance

Display the results

dev_set_color ('white')
***********************************将测量结果画出*****************************



disp_line (WindowHandle, RowEdge, ColumnEdge-Length2, RowEdge, ColumnEdge+Length2)
disp_message (WindowHandle, 'Lead Length: '+LeadLength2$'.2f', 'window', 360, ColumnEdge[1]+100, 'red', 'false')

Close the measure

close_measure (MeasureHandle)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()

Now, define and display a rectangular ROI perpendicular to the leads and create the measure

dev_display (Image)
Row := 47
Column := 485
Phi := 0
Length1 := 420
Length2 := 8
Interpolation := 'nearest_neighbor'
dev_set_color ('black')
*******************创建新的测量矩形ROI,如图蓝色矩形:*******************



gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
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 := 1.0
Threshold := 30
Transition := 'negative'
Select := 'all'
******************************进行测量计算并显示结果*************************



measure_pairs (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
dev_set_color ('white')
disp_line (WindowHandle, RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond)
avgLeadWidth := sum(IntraDistance)/|IntraDistance|
avgLeadDistance := sum(InterDistance)/|InterDistance|
numLeads := |IntraDistance|
disp_message (WindowHandle, 'Number of Leads: '+numLeads, 'window', 200, 100, 'yellow', 'false')
disp_message (WindowHandle, 'Average Lead Width: '+avgLeadWidth$'.2f', 'window', 260, 100, 'yellow', 'false')
disp_message (WindowHandle, 'Average Lead Distance: '+avgLeadDistance$'.2f', 'window', 320, 100, 'yellow', 'false')
disp_continue_message (WindowHandle, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()

Zoom in to visualize the measurement results in more detail.

First, define and display the zoom window.

Row1 := 0
Column1 := 600
Row2 := 100
Column2 := 700
dev_set_color ('blue')
**************************设置放大区域矩形并显示,图中绿色矩形*****************



disp_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()

Then, zoom the image and display the results.

*********************设置图像放大区域并显示**********************************



dev_set_part (Row1, Column1, Row2, Column2)
dev_display (Image)
dev_set_color ('black')
**********************画出测量矩形ROI和测得的边缘如图*************************



dev_display (Rectangle)
p_disp_edge_marker (RowEdgeFirst, ColumnEdgeFirst, Phi, 5, 'white', 3, WindowHandle)
p_disp_edge_marker (RowEdgeSecond, ColumnEdgeSecond, Phi, 5, 'white', 3, WindowHandle)

Close the measure

close_measure (MeasureHandle)

Reset the display parameters.

dev_set_part (0, 0, Height-1, Width-1)
dev_set_draw ('fill')
dev_set_line_width(1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: