HALCON 十字螺丝有无的识别

给客户做了一个自动化生产线的示教系统,其中一个步骤是对板子上特定位置的螺丝孔是否存在螺丝进行识别。第一个想到的是模板匹配的方法。基于形状的模板匹配方法其实很简单,拍个照片,手动设置一下模板位置,然后生成模板文件即可。后面再用生成的模板文件对其他照片上的指定位置进行识别。图像如下:

1、穹顶光源

 

2、环形光源

 

 

3、条形光源

 

测试不同的光照方案,对于圆形的物体,最好的还是穹顶光源。一直想试试大一点的环形光源,应该也可以。但是没有设备。

建立模板的HALcon代码:

*读取图像
read_image (Image, '04.bmp')
rgb1_to_gray (Image, GrayImage)

*在图像上手动绘制ROI,即选择绘制的模板区域
*draw_rectangle1 (200000, Row1, Column1, Row2, Column2)
draw_circle (200000, Row, Column, Radius)
*将绘制的模板区域生成矩形
*gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
gen_circle (Circle, Row, Column, Radius)
*提取出区域的图像,作为模板图像
*reduce_domain (Image, Rectangle, ImageReduced1)
reduce_domain (GrayImage, Circle, ImageReduced2)
*创建模板
*create_shape_model (ImageReduced1, 'auto', -0.39, 0.79, 'auto', 'auto', 'ignore_color_polarity','auto', 'auto', ModelID)
inspect_shape_model(ImageReduced2,ModelImages,ModelRegions,4,70)
*create_shape_model (Image, 4, -0.2, 0.4, 'auto', 'auto', 'ignore_color_polarity',30, 'auto', ModelID)
create_scaled_shape_model (ImageReduced2, 4, rad(0), rad(180), 'auto', 0.5, 1.5, 0.1, 'none', 'use_polarity', 70, 'auto', ModelID)
* inspect_shape_model(Image,ImageReduced1, Rectangle,4,100)
*将创建的模板存成指定路径的文件
write_shape_model (ModelID, 'Model1-44-30.shm')

使用模板进行匹配的代码:

list_image_files ('E:/董磊项目2/LUOSI/HalconCPP/穹顶光源', 'default', [], ImageFiles)
tuple_regexp_select (ImageFiles, '.bmp', ImageFiles)

for Index := 0 to |ImageFiles|-1 by 1
*read_image (Image1, '12.bmp')
read_image (Image1, ImageFiles[Index])
rgb1_to_gray (Image1, GrayImage)
dev_open_window(0, 0, 1024, 768, 'green', WindowID)
dev_display(GrayImage)

draw_circle (WindowID, Row, Column, Radius)
gen_circle (Circle, Row, Column, Radius)

dev_set_draw ('margin')
dev_set_line_width(20)
dev_set_color ('yellow')
dev_display (Circle)

reduce_domain(GrayImage,Circle,GrayImageReduced)
emphasize (GrayImageReduced, ImageEmphasize, 7, 7, 1)
*读取模板文件
read_shape_model ('Model1-4-50.shm', ModelID1)
find_scaled_shape_model (ImageEmphasize, ModelID1, rad(0), rad(180), 0.5, 1.5, 0.13, 1, 0, 'none', 0,0, Row6, Column6, Angle1,Scale1, Score1)
dev_display_shape_matching_results (ModelID1, 'red', Row6, Column6, Angle1, 1, 1, 0)
*显示每个模板的匹配度
dev_get_window (WindowHandle)
set_display_font(WindowHandle,16,'serif','true','false')
tuple_length (Score1, Length)
for I:=0 to Length-1 by 1
dev_disp_text(Score1[I],'image',Row6[I]-50,Column6[I]-30,'forest green',[],[])
endfor
stop()
endfor

关键的一点,要将照明适当过度曝光,你会发现在使用模板进行匹配的时候,有无螺丝的匹配度差别比较大。比较好区分。

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值