图片文件

链接:https://pan.baidu.com/s/1nhv2EvknO4pmdxUp6D0kdQ
提取码:8nj1

处理流程

1、获取连通域 外边缘
2、计算边缘点 到四个角点的最短距离
3、计算边缘点 到对应最小外接矩形的距离
4、忽略四个角附近的点,其它点 距离外接矩形 >1.0判断为NG

完整代码

* 穿孔检测外接矩形与连通域点距离 检测产品**** 1、读取图片 *********************************
dev_update_off ()
read_image (Image, './punched_holes.png')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_display (Image)**** 2、获取产品外接矩形 *********************************
* 二值化
fast_threshold (Image, Region, 128, 255, 10)
* 内部环状区域
boundary (Region, Border, 'inner')
* 矩形膨胀
dilation_rectangle1 (Border, EdgeROI, 7, 7)
* 聚焦边缘区域
reduce_domain (Image, EdgeROI, ImageReduced)
* canny算法 获取边缘
edges_sub_pix (ImageReduced, Edges, 'canny', 1.7, 40, 120)
* 通过长度过滤边缘
select_shape_xld (Edges, RectangleEdges, 'contlength', 'and', 500, 100000)
* 边缘拟合外接矩形
fit_rectangle2_contour_xld (RectangleEdges, 'tukey', -1, 0, 0, 3, 2, Row, Column, Phi, Length1, Length2, PointOrder)
* 生成外接矩形
gen_rectangle2_contour_xld (Rectangles, Row, Column, Phi, Length1, Length2)
dev_set_color ('yellow')
dev_display (Rectangles)**** 3、循环处理边缘 *********************************
count_obj (RectangleEdges, Number)
for I := 0 to Number - 1 by 1*** a、获取区域边缘坐标点、外接矩形、四个角点坐标 ********** 选择区域的边缘select_obj (RectangleEdges, RectangleEdge, I + 1)* 获取连通域的坐标点get_contour_xld (RectangleEdge, Rows, Cols)* 生成对应的外接矩形gen_rectangle2_contour_xld (Rect, Row[I], Column[I], Phi[I], Length1[I], Length2[I])* 获取外接矩形 四个角点坐标 get_contour_xld (Rect, RowC, ColC)
*     gen_cross_contour_xld (Cross, RowC, ColC, 20, 0)
*     dev_display (Cross)*** b、计算所有边缘点与四个角点 最小距离 ********************* 所有连通域点与四个角点距离计算D1 := sqrt((Rows - RowC[0]) * (Rows - RowC[0]) + (Cols - ColC[0]) * (Cols - ColC[0]))D2 := sqrt((Rows - RowC[1]) * (Rows - RowC[1]) + (Cols - ColC[1]) * (Cols - ColC[1]))D3 := sqrt((Rows - RowC[2]) * (Rows - RowC[2]) + (Cols - ColC[2]) * (Cols - ColC[2]))D4 := sqrt((Rows - RowC[3]) * (Rows - RowC[3]) + (Cols - ColC[3]) * (Cols - ColC[3]))* ((连通域左上点最近,连通域与右上点最近的点)(距离左下点最近,距离右下最近点)) * 获取所有连通域点 到四个角点 最近的距离 (一维数组 使用最近的距离填入)DistCorner := min2(min2(D1,D2),min2(D3,D4))*** C、计算连通域点 与 外接矩形的距离dist_rectangle2_contour_points_xld (RectangleEdge, 0, Row[I], Column[I], Phi[I], Length1[I], Length2[I], Dist)*** d、忽略距离角点近的点,通过边缘点距离判断 OK NG ********************
*     RectangleOK := true
*     for J := 0 to |Dist| - 1 by 1* 过滤距离四个角点距离7的点 并且 连通域点距离外接矩形 > 1.
*         if (DistCorner[J] > 7.0 and Dist[J] > 1.0)* 检测结果为NG
*             RectangleOK := false
*             break
*         endif
*     endfor* 距离小于7 置0,符号判断 (-1.0, 0, 1.0)Mask := sgn(max2(DistCorner - 7.0,0.0))* mask 凸出外接矩形 -1, 近四角 0, 其它 1.0* 最大偏离置 > 1.0 以此判断OK NGRectangleOK := max(Dist * Mask) <= 1.0*** e、显示结果 ********************if (RectangleOK)dev_set_color ('green')get_string_extents (WindowHandle, 'OK', Ascent, Descent, Width, Height)set_tposition (WindowHandle, Row[I] - Height / 2, Column[I] - Width / 2)write_string (WindowHandle, 'OK')elsedev_set_color ('red')get_string_extents (WindowHandle, 'Not OK', Ascent, Descent, Width, Height)set_tposition (WindowHandle, Row[I] - Height / 2, Column[I] - Width / 2)write_string (WindowHandle, 'Not OK')endif
endfor

halcon 缺陷检测 穿孔检测(边缘点偏离检测)相关推荐

  1. halcon缺陷检测——频域

    缺陷检测--频域和空间域 1. 理解傅里叶变换 2. 读懂频谱图 3. 使用频域处理图像的案例 3.1 脏污检测 3.2 检测表面微小凸起 3.3 检测磨砂表面的缺陷 4. 资源下载 1. 理解傅里叶 ...

  2. Halcon缺陷检测系列

    Halcon缺陷检测系列Halcon缺陷检测系列Halcon缺陷检测系列 一 注塑吸嘴缺口检测 二 铣刀刀口破损缺陷检测 三 网状产品表面破损检测 四 手机摄像头图像表面的轻微缺陷检测 五 皮革纹理表 ...

  3. 基于halcon—缺陷检测常用方法与示例总结

    摘要 缺陷检测是视觉需求中难度最大一类需求,主要是其稳定性和精度的保证.首先常见缺陷:凹凸.污点瑕疵.划痕.裂缝.探伤等. 缺陷检测算法不同于尺寸.二维码.OCR等算法.后者应用场景比较单一,基本都是 ...

  4. Halcon 缺陷检测 金属拉丝表面缺陷检测(乘法增强、傅里叶变换与卷积、纹理过滤、动态阈值)

    Halcon 缺陷检测 拉丝表面缺陷检测(乘法增强.傅里叶变换与卷积.纹理过滤.动态阈值) 文件下载 链接:https://pan.baidu.com/s/1HNl4vy0jEaFx5OUuBDAMX ...

  5. halcon——缺陷检测常用方法总结(模板匹配(定位)+差分)

    引言 机器视觉中缺陷检测分为一下几种: blob分析+特征 模板匹配(定位)+差分 光度立体:halcon--缺陷检测常用方法总结(光度立体) - 唯有自己强大 - 博客园 (cnblogs.com) ...

  6. halcon缺陷检测学习7皮革·凹痕、磨损、刮伤缺陷inspect_leather_photometric_stereo

    本程序演示了使用光度立体技术对皮革样品的检查. *输入4张皮革样本的图片,光线来自不同的方向. 初始化 dev_update_off () dev_close_window () dev_open_w ...

  7. HALCON示例程序rim.hdev轮圈孔检测提取字符

    小哥哥小姐姐觉得有用点个赞呗! HALCON示例程序rim.hdev轮圈孔检测提取字符 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () dev_close_window ...

  8. HALCON示例程序measure_metal_part_id.hdev使用xld边缘拟合检测零件加工是否合格

    HALCON示例程序measure_metal_part_id.hdev使用xld边缘拟合检测零件加工是否合格 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () Imag ...

  9. HALCON示例程序ball电路板焊点识别、检测、测量程序2剖析(与上篇文章使用了不同方法)

    HALCON示例程序ball电路板焊点识别.检测.测量程序2 示例程序源码(加注释) *这是关于显示的函数,已经介绍过了 dev_update_off () *定义一个字符串变量ImageNames, ...

最新文章

  1. 16 美元,黑客就能截获你的短信?
  2. zigbee的路由器能分配网络地址吗_网络基础知识学习 小白也能变专家
  3. 千层套路 - Vue 3.0 初始化源码探秘
  4. python计算汽车的平均油耗_用python对汽车油耗进行数据分析
  5. 关于面向用户设计的反思——顶点计划3课程的Process Book
  6. kitti数据集_神秘的Waymo一反常态,CVPR现场发布大型自动驾驶数据集
  7. curl 没有到主机的路由_安装RaspAP将树莓派变身为无线路由器
  8. DELL R730 iDRAC8远程控制卡使用
  9. 数据库—并发调度的可串行性
  10. 2020中国区块链产业政策年度报告|链塔智库
  11. AcWing 674.超级2048
  12. s3c6410 开发板Linux系统支持 K9GAG08U0E的方法(第二篇)
  13. 火车售票-线程3种实现
  14. RTX 3060Ti和rtx2080Super的区别
  15. 怎么切换双显示屏的左右显示器
  16. 关于ios苹果企业开发者
  17. IE6兼容PNG_se7en3_新浪博客
  18. 5种网络隔离后的文件交换方式,哪种最安全便捷?
  19. python淘宝cookies抢购_python获取淘宝登入cookies
  20. 模板、皮肤、主题的定义

热门文章

  1. 刘强东给京东高管降薪:2千多位总监兄弟工资打8折,并拿出100亿保障”兄弟“基础住房
  2. 【渝粤教育】国家开放大学2018年秋季 0686-22T广告创意与表现(一) 参考试题
  3. SM2 (含SM3、SM4)国密算法工具QT版,彻底搞懂sm2算法的使用
  4. 推荐4个实用的4~20mA输入/0~5V输出的I/V转换电路
  5. 毕业半个月,我是如何同时做好字节程序媛、模特与写作博主的?
  6. matlab 1.封装LPF 巴特沃斯低通滤波器
  7. 方差、协方差、协方差矩阵的概念及意义 的理解
  8. ubuntu系统:插入耳机,两只耳机有一只没有声音或者声音偏小的问题
  9. 网站开发进阶(二十九)HTML特殊转义字符
  10. Intellij IDEA插件 CodeGlance 快速定位代码