视觉应用案例!采用HALCON组件模型匹配算法识别槽车法兰位置

法兰识别定位,本以为很简单,没想到超出我的认知。

视觉应用案例!采用HALCON组件模型匹配算法识别槽车法兰位置

我曾在《机器人系统集成及自动化生产线设计大师》教材里介绍过HALCON视觉软件识别工件的方法,没想到此方法识别法兰时失效了。

  1. read_image(),图片读取函数;
  2. rgbl_gray(),灰度处理函数,将彩色图片变成黑白图片,化繁为简;
  3. threshold(),二值化阈值函数,黑白分界处即是工件轮廓;
  4. connection(),计算整个图像范围内有多少个连通区域,即获取图片上含有的所有工件;
  5. select_shape(),获取工件轮廓特征;
  6. orientation_region (),获取工件朝向,也就是工件的角度;7. area_center (),获取工件中心位置。

由于法兰和背后的管道都是不锈钢材质,颜色几乎一模一样,特征不明显,使用threshold()和select_shape()都无法筛选出想要的区域。

视觉应用案例!采用HALCON组件模型匹配算法识别槽车法兰位置

没办法,只能另辟蹊径,连续看了2天HALCON示例程序,终于在cbm_sbm.hdev这个示例程序中发现了find_component_model()函数,find_component_model 函数的功能是在图像里寻找最匹配的元件模型(Find the best matches of a component model in an image)。

有了 find_component_model (),法兰识别立马变得无比简单。

视觉应用案例!采用HALCON组件模型匹配算法识别槽车法兰位置

下面是利用find_component_model ()识别法兰位置的HALCON程序代码:

* 读取参照物图像
read_image (ModelImage, ” images/tanker01.jpg”)
dev_open_window_fit_image (ModelImage, 0, 0, -1, -1, WindowHandle)
dev_display (ModelImage)
dev_set_line_width (4)
dev_set_color (”green”)
dev_set_draw (”margin”)
gen_circle (ComponentRegions, 475, 208, 102)
* 创建组件模型(标准参考物)
create_component_model (ModelImage, ComponentRegions, 20, 20, rad(25), 0, rad(360), 15, 40, 15, 10, 0.8, ”auto”, 0, ”none”, ”use_polarity”, ”true”, ComponentModelID, RootRanking)
 read_image (SearchImage, ”images/tanker_02.jpg”)
* 查找与标准参考物匹配的模型组件
find_component_model (SearchImage, ComponentModelID, RootRanking, 0, rad(360), 0.5, 0, 0.5, ”stop_search”, ”search_from_best”, ”none”, 0.8, ”interpolation”, 0, 0.8, ModelStart, ModelEnd, Score, RowComp, ColumnComp, AngleComp, ScoreComp, ModelComp)
  dev_display (SearchImage)
  * 显示模型组件
  for Match := 0 to |ModelStart| - 1 by 1
    dev_set_line_width (1)
    get_found_component_model (FoundComponents, ComponentModelID, ModelStart, ModelEnd, RowComp, ColumnComp, AngleComp, ScoreComp, ModelComp, Match, ”false”, RowCompInst, ColumnCompInst, AngleCompInst, ScoreCompInst)
     *计算组件模型的面积、中心点坐标
      area_center (FoundComponents, Area, Row, Column)
      gen_circle (Circle, Row, Column, 40)
      disp_cross (WindowHandle, Row, Column, 60, AngleCompInst)  
*显示组件模型的中心点坐标
      disp_message (WindowHandle, ”x=”+Column+” y=”+Row, ”window”, Row/2-60, Column/2-30, ”black”, ”true”)
endfor

HALCON代码导出成C、C#、C++或VE.NET程序代码就可以在电脑上运行了,是不是很简单?

绝大多数的视觉应用其实都不难,无非就是识别个工件而已,学些视觉技术,只要入门,基本上就能满足基本的工作需要了,就像我我们学计算机语音一样,只要能输出“hello world!”,就算入门了。

留言说明对本文有疑问的,请关注本站公众号 CAD画家,直接在公众号内留言即可。 公众号:CAD画家
转载请注明文章作者:CAD画家   原文链接:https://www.cad2d3d.com/post-2034.html