Halcon例程分析5:芯片测量

打开halcon,按下ctrl+e打开halcon自带例程。工业领域->半导体业->measure_pin.hdev

* Pin Measurement: Example for the application of the measure package
* including a lot of visualization operators
* 
dev_close_window ()
*读取图片
read_image (Image, 'ic_pin')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width / 2, Height / 2, 'black', WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
*显示图片
dev_display (Image)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2)
*定义变量
Row := 47
Column := 485
Phi := 0
Length1 := 420
Length2 := 10
dev_set_color ('green')
dev_set_draw ('margin')
dev_set_line_width (3)
*画矩形ROI,可以通过图片窗口上的绘制ROI->绘制轴平行矩形->插入代码进行绘制
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
*应用上面绘制的矩形ROI区域生成测量矩形
*前五个参数为上面绘制的矩形ROI的数值,
*第六第七个参数为图像的宽高
*第八个参数是数据插值方法,这里采用最近邻插值方式
*第九个参数是测试句柄,后面通过这个句柄引用这个矩形测量
gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, 'nearest_neighbor', MeasureHandle)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
dev_update_pc ('off')
dev_update_var ('off')
n := 100
*计算算法耗时
count_seconds (Seconds1)
*下面这个循环不知道是什么意思,去掉这个循环(只测一次)同样可以测量出结果来
for i := 1 to n by 1
    *下面这个函数是提取与测试矩形垂直方向上的的边缘对,想象一下在矩形长轴方向上做灰度差分,得到的曲线应该是每个一段距离出现一个上尖角与一个下尖角
    *第一个上尖角的X坐标RowEdgeFirst,第一个上尖角的Y坐标ColumnEdgeFirst
    *第一个下尖角的X坐标RowEdgeSecond,第一个下尖角的Y坐标ColumnEdgeSecond
    
    *第一个参数输入图像
    *第二个参数测量矩形的句柄
    *第三个参数(1.5)是高斯平滑sigma值
    *第四个参数(30)是最低阈值,对应上述尖角的高度值
    *第五个参数('negative')是上述差分值的黑白方向,为negative时是白到黑为第一点,如果是为positive时为黑到白为第一点
    *第六个参数是('all')是返回所有的测量到的值,即返回所有的尖角位置
    *第九个参数(AmplitudeFirst)是第一个尖角的大小
    *(PinwWidth)是上尖角与下尖角之间的距离
    *(PinDistance)是下尖角与上尖角之间的距离
    measure_pairs (Image, MeasureHandle, 1.5, 30, 'negative', 'all', RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, PinWidth, PinDistance)
endfor

count_seconds (Seconds2)
Time := Seconds2 - Seconds1
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
dev_set_color ('red')
disp_line (WindowHandle, RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond)
*所有Pin脚宽度取平均值,间距取平均值
avgPinWidth := sum(PinWidth) / |PinWidth|
avgPinDistance := sum(PinDistance) / |PinDistance|
numPins := |PinWidth|
dev_set_color ('yellow')
disp_message (WindowHandle, 'Number of pins: ' + numPins, 'image', 200, 100, 'yellow', 'false')
disp_message (WindowHandle, 'Average Pin Width:  ' + avgPinWidth, 'image', 260, 100, 'yellow', 'false')
disp_message (WindowHandle, 'Average Pin Distance:  ' + avgPinDistance, 'image', 320, 100, 'yellow', 'false')
* dump_window (WindowHandle, 'tiff_rgb', 'C:\\Temp\\pins_result')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
Row1 := 0
Column1 := 600
Row2 := 100
Column2 := 700
dev_set_color ('blue')
*下面是为放大显示用的,画一个矩形,把矩形框内的区域放大显示方便查看
disp_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
stop ()
dev_set_part (Row1, Column1, Row2, Column2)
dev_display (Image)
dev_set_color ('green')
dev_display (Rectangle)
dev_set_color ('red')
disp_line (WindowHandle, RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
dev_set_part (0, 0, Height - 1, Width - 1)
dev_display (Image)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*测量芯片引脚的高度,下面的方式同样可以得到芯片的高度信息
dev_set_color ('green')
* draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2)
*定义变量
Row := 508
Column := 200
Phi := -1.5708
Length1 := 482
Length2 := 35
*生成矩形
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
*生成测量矩形
gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, 'nearest_neighbor', MeasureHandle)
stop ()
*测试矩形,这个函数和measure_pair差不多的,同样是得到像素差分的曲线
measure_pos (Image, MeasureHandle, 1.5, 30, 'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance)
PinHeight1 := RowEdge[1] - RowEdge[0]
PinHeight2 := RowEdge[3] - RowEdge[2]
dev_set_color ('red')
disp_line (WindowHandle, RowEdge, ColumnEdge - Length2, RowEdge, ColumnEdge + Length2)
disp_message (WindowHandle, 'Pin Height:  ' + PinHeight1, 'image', RowEdge[1] + 40, ColumnEdge[1] + 100, 'yellow', 'false')
disp_message (WindowHandle, 'Pin Height:  ' + PinHeight2, 'image', RowEdge[3] - 120, ColumnEdge[3] + 100, 'yellow', 'false')
* dump_window (WindowHandle, 'tiff_rgb', 'C:\\Temp\\pins_height_result')
dev_set_draw ('fill')
dev_set_line_width (1)

待测试芯片原图

测试引脚宽度与间距图像

测试芯片引脚高度效果图

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

究极调参工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值