一、中级视频教程毛刺检测:

实现功能,检测突出产品外围突出的毛刺:

1.先获取背景的区域,用 binary_threshold()获取背景区域A;

2.背景区域进行闭运算得到闭运算区域B

3.用difference()算子计算A B两个区域的补集C;

4.对C进行开运算,使边缘平滑。记得到边缘突出的毛刺

使用到的算子:

binary_threshold()自动全局阈值,得到背景获背景和前景,适合使用在背景和前景差异明显的图像检测;

difference()得到两区域补集

area_center()得到区域的面积和中心坐标

**************************************************第一步  初始化****************************
*关闭通过调用算子在图像窗口上更新图像,单步模式下无效
dev_update_window ('off')
*批量读取3张图像
* read_image (Fins, 'fin' + [1:3])
read_image (NG1, 'F:/工作/新建文件夹/工作/1.四月/5.三卓韩一/黑色样品一/毛边/Image_20210402162842007.bmp')
read_image (NG2, 'F:/工作/新建文件夹/工作/1.四月/5.三卓韩一/黑色样品一/毛边/Image_20210402162849240.bmp')
read_image (NG3, 'F:/工作/新建文件夹/工作/1.四月/5.三卓韩一/黑色样品一/毛边/Image_20210402162207016.bmp')
*如何自定义图像变量用来测试
testimage:=NG1
*获取图像大小
get_image_size (testimage, Width, Height)
*关闭已经打开的窗口
dev_close_window ()
*打开一个新的窗口
dev_open_window (0, 0, Width[0], Height[0], 'black', WindowID)
*设置字体的信息:字体大小:14;字体:mono;粗体,非斜体
* set_display_font (WindowID, 14, 'mono', 'true', 'false')
**************************************************第二步  图像处理****************************
* for I := 1 to 3 by 1*从图像集合里获取一张图像
*     select_obj (Fins, Fin, I)    *显示图像dev_display (testimage)    *二值化分割图像,使用自动全局阈值分割单通道图像.binary_threshold (testimage, Background, 'max_separability', 'light', UsedThreshold)    *设置对象的输出颜色为蓝色dev_set_color ('blue')   *设置区域的填充方式dev_set_draw ('fill')    *设置输出对象的线宽度dev_set_line_width (4)    *显示背景区域dev_display (Background)*闭运算,平滑背景边界closing_circle (Background, ClosedBackground, 73)    *设置输出对象的显示颜色为绿色dev_set_color ('green')    *显示闭运算后的背景区域dev_display (ClosedBackground)*闭运算后的背景区域和原背景区域进行求补集difference (ClosedBackground, Background, RegionDifference)   *开运算,消除边界毛刺opening_rectangle1 (RegionDifference, FinRegion, 5, 5)    *显示图像dev_display (testimage)    * 设置输出对象的显示颜色为红色dev_set_color ('yellow') *显示最后检出的毛刺dev_display (FinRegion)    *获取毛刺的面积和坐标area_center (FinRegion, FinArea, Row, Column)

原图:

图像A:

图像B:

图像C:

问题:该方法对较明显的特定的毛刺毛边效果有效,针对一些边缘比较复杂和毛边形状跟边缘较接近的缺陷效果差

如下图所示:闭运算无法完全把毛刺边缘补全,导致,检测的毛刺不完整。可能到会细小毛边漏检。

    

二、毛边检测算法优化:标准区域登陆+仿射变换(该算法需产品来料方向变化在+-45°以内)

实现方法:1.获取标准合格品图像检测区域A,2.对A进行膨胀,得到区域B。3.B-A得到实际想要检测毛边的区域C;4.将待检产品图像D进行仿射变换得到图像E;

5用区域C对图像E进行剪切,得到图像F;6.对图像F进行二值化得到缺陷区域G。

主要用到的算子:

difference()计算两区域的补集获取毛边检测区域

smallest_rectangle2()获取区域的坐标和角度;vector_angle_to_rigid()计算两个区域的转换关系

affine_trans_image()对图像进行仿射变化

read_image (NG1, 'F:/工作/新建文件夹/工作/1.四月/5.三卓韩一/黑色样品一/毛边/Image_20210402162842007.bmp')
* read_image (NG1, 'F:/工作/新建文件夹/工作/1.四月/5.三卓韩一/黑色样品一/毛边/Image_20210402162849240.bmp')
* read_image (NG1, 'G:/学习/技术博客/1.jpg')read_image (OK1, 'F:/工作/新建文件夹/工作/1.四月/5.三卓韩一/黑色样品一/毛边/Image_20210402162207016.bmp')
* read_image (NG1, 'F:/工作/新建文件夹/工作/1.四月/5.三卓韩一/黑色样品一/堵孔/Image_20210402162834992.bmp')* binary_threshold (NG1, Region, 'max_separability', 'light', UsedThreshold)
*获取标准区域:(检测内圈毛刺区域获取)
threshold (OK1, Region1, 100, 255)
closing_circle (Region1, RegionClosing, 70)
connection (RegionClosing, ConnectedRegions)
select_shape (ConnectedRegions, RegionsBZ, 'area', 'and', 150, 100000)dev_display(OK1)
dev_display (RegionsBZ)*获取外圈的检测区域
threshold (OK1, Region4, 0, 40)
*膨胀将毛边检测区域进行扩大
dilation_circle (Region4, RegionDilation,30)
difference (RegionDilation, Region4, Regiondf)
erosion_circle (Regiondf, RegionMBJC, 5)
*  binary_threshold (OK1, Region5, 'max_separability', 'light', UsedThreshold)
* threshold (OK1, Region5, 40, 255)
*******************************仿射变换获取内孔检测区域***********
*获取标准仿射变换原点
* draw_rectangle1 (200000, Row12, Column12, Row2, Column2)
* gen_rectangle1 (Rectangle, Row12, Column12, Row2, Column2)
* reduce_domain (OK1, Rectangle, ImageReduced1)
threshold (OK1, Region2, 0, 20)
* area_center (Region, Area, Row, Column)
smallest_rectangle2 (Region2, Row1, Column1, Phi, Length1, Length2)*实现检测图像的仿射变换
threshold (NG1, Region3, 0, 15)
* area_center (Region, Area, Row, Column)
*实现图像的仿射变换的三个主要算子
smallest_rectangle2 (Region3, Row11, Column11, Phi1, Length11, Length21)
vector_angle_to_rigid (Row11, Column11, Phi1, Row1, Column1, Phi, HomMat2D)
affine_trans_image (NG1, ImageAffineTrans, HomMat2D, 'constant', 'false')dev_display(OK1)
dev_display (ImageAffineTrans)
reduce_domain (ImageAffineTrans, RegionMBJC, ImageReduced)
threshold (ImageReduced, Region, 0, 95)
opening_circle (Region, RegionOpening1, 4)
dev_set_draw ('fill')
dev_display(ImageAffineTrans)
dev_display (RegionOpening1)

标准品图片:

A:

B:

C:

D:

待检图像:

E:

F:

G:

总结:该方法针对产品一致性比较好的产品检测效果比较理想。当产品形状有细微差异时,标准图像的区域就不能完全覆盖到形状发生变化的产品的检测区域。

当产品来料状态存在360°旋转变化时,该方法进行的仿射变化也有很大局限性。需对仿射变换进行优化。当缺陷面积较大时,会影响仿射变换的结果,导致整个检测区域偏移,故需要使用模板匹配来进行仿射变换。

毛边检测算法优化(二):对区域进行仿射变换(未完待续)

毛边检测算法优化(三):使用模板匹配对图像进行仿射变换(未完待续)

毛边检测算法优化(四):检测图像与待检图像进行图像相减操作(未完待续)

halcon学习笔记(一)毛边检测 仿射变换+标准区域登陆检测内外边缘毛边相关推荐

  1. Halcon 学习笔记五:几何定位+仿射变换+测量

    Halcon 学习笔记五:几何定位+仿射变换+测量 定位流程 例子一 例子二(药片的定位) 例子三(充电宝定位) 例子四(车牌定位) 其他 定位流程 blob分析 模板匹配 (仿射变换成标准的形状) ...

  2. 一、HALCON学习笔记(容器液位缺陷检测)

    一.HALCON学习笔记(容器液位缺陷检测) * In this example a fill level check for the * pharmaceutical industry is dem ...

  3. Halcon 学习笔记八:颜色识别

    Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...

  4. Halcon学习笔记:划痕、油污、瑕疵

    Halcon学习笔记:划痕.油污.瑕疵 划痕.油污.瑕疵,常用的方法有傅里叶变换和Blob分析. 1.表面划痕 invert_image(Image,ImageInvert1)  mult_image ...

  5. Python学习笔记(二):标准流与重定向

    Python学习笔记(二):标准流与重定向 - SamWei - 博客园 Python学习笔记(二):标准流与重定向 Posted on 2012-02-19 22:36 SamWei 阅读(176) ...

  6. Halcon学习笔记(三)---数据类型

    Halcon学习笔记(三)---数据类型 halcon只能在单独行进行注释,不能在语句后面进行注释. 1.tuple(元组,重数) 赋值符号":=" tuple算子: (1)变量定 ...

  7. Halcon学习笔记:select_points_object_model_3d(3D对象模型阀值分割)

    Halcon学习笔记:select_points_object_model_3d 3D对象模型阀值分割 This example program shows how to use the operat ...

  8. Halcon学习笔记:xyz_attrib_to_object_model_3d示例

    Halcon学习笔记:xyz_attrib_to_object_model_3d--从X.Y和Z图像中创建3D对象模型同时附加属性 xyz_attrib_to_object_model_3d.hdev ...

  9. Halcon学习笔记:1D Measuring一维测量_fuse.hdev灯丝测量示例

    Halcon学习笔记:1D Measuring一维测量_fuse.hdev灯丝测量示例 一.基本概念 基本流程为: 获取图像 对图像进行灰度值标定 (针对相机获取的图像灰度和输入能量之间的非线性关系, ...

最新文章

  1. VM pow 函数 :undefined reference to `pow'
  2. boost::hana::count用法的测试程序
  3. 基于主成分分析与支持向量机的人脸识别
  4. 关于群论证明费马小定理?
  5. linux常用命令技巧--更新中
  6. Windows平台下GO语言编译器(GO-windows)
  7. mysql语言和php语言_MySQL如何与PHP编程语言一起使用?
  8. spark的rdd的含义_Spark里边:到底是什么RDD
  9. js解决浏览器打印自动分页的问题
  10. java 二叉树 遍历_JAVA实现二叉树(简易版--实现了二叉树的各种遍历)
  11. python在哪里写代码-python的代码在哪编写
  12. 【蓝桥杯】题目 1117: K-进制数
  13. layUI table 内容超出宽度怎么换行显示,而不是显示省略号
  14. html字体颜色闪动,HTML最简单的文字闪烁代码
  15. 基于KDJ指标的Dual Thrust策略
  16. 图像处理对数变换以及对数变换的拉伸
  17. php获取汉字的首字母,php获取汉字拼音首字母的函数(真正可以使用的)
  18. java(File、IO流)
  19. 服务网格在百度核心业务大规模落地实践
  20. DDR存储原理,AC/DC判别标准深度解析(官方手册整理)

热门文章

  1. WPS中插入图像的剪切方法(转)
  2. 鸡尾酒排序(Cocktail ordering)
  3. 春风袭来之——挥去的2015
  4. 怎么放大图片保持清晰度?如何把图片无损放大?
  5. COMSOL有限元仿真深度指南:连接薄结构与实体结构(I)
  6. Go之XORM操作MySQL
  7. 计算机和计算机思维理论考试试题科目一,科目一丨信息处理与逻辑思维
  8. Python小乌龟----画一个简单的五角星
  9. ROS基础(十)——launch启动文件的使用方法
  10. python在经济学中的应用论文_论数学在经济学中的应用