机器视觉实验指导书 2王海晖.docx

上传人:b****5 文档编号:6876386 上传时间:2023-01-12 格式:DOCX 页数:21 大小:44.25KB
下载 相关 举报
机器视觉实验指导书 2王海晖.docx_第1页
第1页 / 共21页
机器视觉实验指导书 2王海晖.docx_第2页
第2页 / 共21页
机器视觉实验指导书 2王海晖.docx_第3页
第3页 / 共21页
机器视觉实验指导书 2王海晖.docx_第4页
第4页 / 共21页
机器视觉实验指导书 2王海晖.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

机器视觉实验指导书 2王海晖.docx

《机器视觉实验指导书 2王海晖.docx》由会员分享,可在线阅读,更多相关《机器视觉实验指导书 2王海晖.docx(21页珍藏版)》请在冰豆网上搜索。

机器视觉实验指导书 2王海晖.docx

机器视觉实验指导书2王海晖

《机器视觉》实验指导书

实验一电子元件插针引脚测量实验

(一实验类型:

验证性实验

(二实验目的:

通过该实验使得学生掌握如何建立被测量工件对象的基本检测步骤,包括工件定位、光源调整、焦距调节等图象测量,进而掌握工件尺寸测量可视化组态编程方法和技术,掌握如何对多插针相关尺寸参数同时测量的新方法,建立被测量插针的基本检测框架,进而扎实掌握插件多针尺寸、针间距及针宽度测量新技术,具备解决实际复杂插件多针参数视觉测量的技术难题。

(三实验要求:

熟练掌握:

用Halcon平台测量的步骤

学生分组人数:

1人/组

(四实验内容:

【实验内容】

测量如图1-1所示电子插件插针参数尺寸

(a(b

图1-1:

开关

(a需要测量开关引脚的宽度及相互之间的距离。

(b确定检测边缘的矩形感兴趣区。

【实验原理】

1、单个相机的影像截取控制流程如a所示,

实验中,采用单相机采集图像,对应的图像处理算子类型为:

open_framegrabber(Name,1,1,0,0,0,0,'default',-1,'default',-1,'default','default',Board0,-1,-1,FGHandle0grab_image(Image0,FGHandle0

2、算子说明:

1open_framegrabber

函数功能:

打开并设置一个图像采集器

调用格式:

open_framegrabber(:

:

Name,HorizontalResolution,VerticalResolution,ImageWidth,ImageHeight,StartRow,StartColumn,Field,BitsPerChannel,ColorSpace,Generic,ExternalTrigger,CameraType,Device,Port,LineIn:

FGHandle

参数:

Name--Halcon图像采集接口。

比如:

对应的DLL(Windows的名字或者共享的库函数(UNIX的名字

Gerneric--图像增益数,可以控制采集到的图像亮度

FGHandle--图像采集函数句柄

2grab_image

函数功能:

采集图像

调用格式:

grab_image(:

Image:

FGHandle:

参数:

Image----采集图像的名称

FGHandle--帧采集器句柄

===================采集图像部分的程序实例====================

1

dev_close_window(

open_framegrabber('PXC',1,1,0,0,0,0,'default',8,'default',-1,'default','AUTO','default',-1,1,FGHandle

grab_image(Image,FGHandle

get_image_pointer1(Image,Pointer,Type,Width,Height

dev_open_window(0,0,Width,Height,'black',WindowHandle

2

dev_update_window('off'

open_framegrabber('DT315x',2,2,0,0,0,0,'default',-1,'default',-1,'default','default','default',-1,1,FGHandle

grab_image(Image,FGHandle

get_image_pointer1(Image,Pointer,Type,Width,Height

dev_close_window(

dev_open_window(0,0,Width,Height,'black',WindowID

【实验步骤】

1、工件定位:

将工件放置到平台转盘上相应位置,确保动态图象采集根据被测对象要求。

2、光源调整:

选择前光源或背光源确保图象不受自然光源影响。

3、焦距调节:

根据被测对象大小和厚度,调节支架横枞位置和相机焦距。

4、打开图像处理软件,通过变量输入窗口、源程序窗口、菜单栏算子三种方式添加算子,编写工件尺寸的测量与标定程序。

其中,相机采集部分的算子可借助菜单栏“助手”—“opennewImageacquisition”设置,生成代码。

(参见前一部分《图像处理软件操作》,如MV-VS860平台中相机的代码:

open_framegrabber('DirectShow',1,1,0,0,0,0,'default',8,'rgb',-1,'false','default','MVOneVideoCapture',0,-1,FGHandle//采集卡初始化设置

set_framegrabber_param(FGHandle,'saturation',0//设置采集卡参数

while(true//循环采集

grab_image(Image,FGHandle

*Dosomething//在这里添加算法步骤,对Image,即原始图像做处理

endwhile

close_framegrabber(FGHandle

主要算法步骤:

-----------------------

1通过包含如图1-1(b描述引脚的ROI矩形创建测量对象。

ROI矩形用以取得垂直于矩形主轴的各个直线边界对。

运用算子gen_measure_rectangle2返回所创建对象的句柄MeasureHandle。

gen_measure_rectangle2(Row,Column,Phi,Length1,Length2,Interpolation,MeasureHandle------------------------

2将句柄MeasureHandle传寄给测量函数进行测量。

用measure_pairs算子检测,该算子能提取出引脚对应的边缘对并返回其宽度(每组边缘对的两边之间的距,IntraDistance和距离(连续两个边缘对之间的距离,InterDistance。

measure_pairs(Image,MeasureHandle,Sigma,Threshold,Transition,Select,RowEdgeFirst,ColumnEdgeFirst,AmplitudeFirst,RowEdgeSecond,ColumnEdgeSecond,AmplitudeSecond,IntraDistance,InterDistance

------------------------

要测量引脚的宽度及其之间的距离。

用一维测量,这个任务可迎刃而解,因为位置、距离都是沿着一条线测量的。

============================参考程序===============================open_framegrabber('DirectShow',1,1,0,0,0,0,'default',-1,'gray',-1,'default','default',default',-1,-1,FGHandle//打开图像采集设备,DirectShow即为相机的参数,'gray'表示黑白相机set_framegrabber_param(FGHandle,'saturation',0//设置采集卡参数

while(true//循环采集

grab_image(Image,FGHandle//抓取图像

read_image(Image,'C:

/Templ'//读取图像,因grab_image抓取的图像保存在C:

/Templ中get_image_pointer1(Image,Pointer,Type,Width,Height//获得图像参数

dev_close_window(

dev_open_window(0,0,Width,Height,'black',WindowHandle//打开图像显示窗口,设置背景色为黑色

dev_display(Image//显示图像

Row:

=390

Column:

=380//定义ROI矩形的R/C坐标

Phi:

=rad(-60//矩形偏移水平位置的角度,逆时针为正,顺时针为负

Length1:

=60

Length2:

=10//定义ROI矩形长度及宽度

Interpolation:

='nearest_neighbor'//定义被检测对象的相互关系

gen_measure_rectangle2(Row,Column,Phi,Length1,Length2,Width,Height,Interpolation,MeasureHandle//创建ROI矩形

Sigma:

=0.9

Threshold:

=12

Transition:

='negative'

Select:

='all'

measure_pairs(Image,MeasureHandle,Sigma,Threshold,Transition,Select,RowEdgeFirst,ColumnEdgeFirst,AmplitudeFirst,RowEdgeSecond,ColumnEdgeSecond,AmplitudeSecond,IntraDistance,InterDistance//在指定ROI矩形区域内,检测符合Threshold:

=12的所有边缘对

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//测量结果显示函数

close_measure(MeasureHandle//清除与测量相关的缓存文件

endwhile

close_framegrabber(FGHandle//关闭图像采集设备

5、电子插件参数实验测量结果如图1-2所示:

标示了引脚的边缘,宽度及其之间的距离。

图1-2:

开关引脚宽度及相互距离检测结果

参考例程:

examples\solution_guide\1d_measuring\measure_switch.dev。

6、延伸训练

图1-3a测引脚的宽度以及各个引脚的间距b测引脚的长度

这个训练的任务是检测芯片的主要尺寸(见图1-3。

主要算法步骤:

------------------------

1检测每个引脚的宽度以及各个引脚的间距(更加重要。

我们定义一个包含引脚的矩形ROI(见图1-3a,这就产生了测量目标。

gen_measure_rectangle2(Row,Column,Phi,Length1,Length2,Width,eight,’nearest_neighbor’,MeasureHandle

measure_pairs(Image,MeasureHandle,1.5,30,’negative’,’all’,RowEdgeFirst,ColumnEdgeFirst,AmplitudeFirst,RowEdgeSecond,ColumnEdgeSecond,AmplitudeSecond,PinWidth,PinDistance

通过取出的各个直线边界对,就可以得到引脚数目、平均宽度和他们的平均间距

numPins:

=|PinWidth|

avgPinWidth:

=sum(PinWidth/|PinWidth|

avgPinDistance:

=sum(PinDistance/|PinDistance|

2确定引脚的长度。

尽管每个引脚的宽度都只有几个象素,但还是可以求出他们的长度。

为了完成这个任务,我们画出了一个包含了芯片两个对边引脚的矩形,从而得到了一个新的测量区域(见图1-3b。

找到的第一条边和第二条边之间的距离就是上侧引脚的长度,第三条和第四条就是下面引脚的长度。

gen_measure_rectangle2(Row,Column,Phi,Length1,Length2,Width,Height,’nearest_neighbor’,MeasureHandle

measure_pos(Image,MeasureHandle,1.5,30,’all’,’all’,RowEdge,ColumnEdge,Amplitude,Distance

参考例程:

examples\hdevelop\Applications\Measure\measurepin.dev

============================参考程序===============================dev_close_window(

read_image(Image,'ic_pin'

get_image_pointer1(Image,Pointer,Type,Width,Height

dev_open_window(0,0,Width/2,Height/2,'black',WindowHandle

dev_display(Image

stop(

draw_rectangle2(WindowHandle,Row,Column,Phi,Length1,Length2//创建矩形,各参数定义如下。

Row:

=47//矩形中心点Row值

Column:

=485

Phi:

=0//矩形偏移水平位置的角度,逆时针为正,顺时针为负

Length1:

=420//矩形长度

Length2:

=10//矩形宽度

dev_set_color('green'

dev_set_draw('margin'

dev_set_line_width(3

gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2

gen_measure_rectangle2(Row,Column,Phi,Length1,Length2,Width,Height,'nearest_neighbor',MeasureHandle

stop(

dev_update_pc('off'

dev_update_var('off'

n:

=100

count_seconds(Seconds1

fori:

=1tonby1

measure_pairs(Image,MeasureHandle,1.5,30,'negative','all',RowEdgeFirst,ColumnEdgeFirst,AmplitudeFirst,RowEdgeSecond,ColumnEdgeSecond,AmplitudeSecond,PinWidth,PinDistance

endfor

count_seconds(Seconds2

Time:

=Seconds2-Seconds1

stop(

dev_set_color('red'

disp_line(WindowHandle,RowEdgeFirst,ColumnEdgeFirst,RowEdgeSecond,ColumnEdgeSecond

avgPinWidth:

=sum(PinWidth/|PinWidth|

avgPinDistance:

=sum(PinDistance/|PinDistance|

numPins:

=|PinWidth|

OpSystem:

=environment('OS'

if(OpSystem='Windows_NT'

set_font(WindowHandle,'-Arial-18-*-*-*-*-*-'

else

set_font(WindowHandle,'-*-courier-*-*-*-*-18-*-*-*-*-*-*-*'

endif

dev_set_color('yellow'

set_tposition(WindowHandle,200,100//设置文字输入位置

write_string(WindowHandle,'Numberofpins:

'+numPins//显示测量数据:

Numberofpinsset_tposition(WindowHandle,260,100

write_string(WindowHandle,'AveragePinWidth:

'+avgPinWidth

set_tposition(WindowHandle,320,100

write_string(WindowHandle,'AveragePinDistance:

'+avgPinDistance

dump_window(WindowHandle,'tiff_rgb','C:

\\Temp\\pins_result'

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

stop(

close_measure(MeasureHandle

dev_set_part(0,0,Height-1,Width-1

dev_display(Image

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_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+Length2dev_set_color('yellow'

set_tposition(WindowHandle,RowEdge[1]+40,ColumnEdge[1]+100

write_string(WindowHandle,'PinHeight:

'+PinHeight1

set_tposition(WindowHandle,RowEdge[3]-120,ColumnEdge[3]+100

write_string(WindowHandle,'PinHeight:

'+PinHeight2

dump_window(WindowHandle,'tiff_rgb','C:

\\Temp\\pins_height_result'

close_measure(MeasureHandle

dev_set_draw('fill'

dev_set_line_width(1

实验二线弧测量及定标实验

(一实验类型:

验证性实验

(二实验目的:

通过该实验使得学生掌握如何建立线弧类工件的基本检测步骤,如何将轮廓分成线段和(圆弧以及如何测定相关的参数。

具备解决实际工件参数(如长、宽、高视觉测量的问题。

进而扎实掌握工件边缘长度测量、圆弧测量以及线段与圆弧混合测量等新技术。

(三实验要求:

熟练掌握:

用Halcon测量弧线及标定算法

学生分组人数:

1人/组

(四实验内容:

测量包括工件顶端凸圆半径、凸缘端两耳朵圆孔半径、两切线长度、中心小孔半径、矩形长度和宽度,工件图像如图2-1所示。

图2-1待测工件

【实验原理】

1、线弧类工件的测量,需采用近似匹配的方法。

2、亚像素(Sub-Pixel定义:

摄像机的成像面的分辨率以像素数量来衡量。

但像素中心之间的距离有几个至十几个微米不等。

为了最大限度利用图像信息来提高分辨率,提出了Sub-Pixel概念。

意思是说,在两个物理像素之间还有像素,称之为Sub-Pixel,它完全是通过计算方法的出来的。

3、算子及函数说明:

1edges_sub_pix

函数功能:

用Deriche,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1