Halcon缺陷检测——Blob分析特征
blob分析+定位+特征
- 案例1:检测破碎的小饼干
- 案例2:检测胶囊药粒
- 案例3:检查塑料网是否破损
- 资源下载地址
案例1:检测破碎的小饼干
check_hazeInut_wafers.hdev
这个例子就是利用区域的孔洞面积和矩形度两个特征来判断被测物是否合格的,这种非此即彼,而且带有比较主观性的方法,一般要求光照稳定,背景简单。
Halcon代码:
dev_get_window (WindowHandle)
dev_set_draw ('margin')
dev_set_line_width (3)list_files ('./', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)for Index := 0 to |ImageFiles| - 1 by 1read_image (Image, ImageFiles[Index])threshold (Image, Regions, 56, 255)opening_circle (Regions, RegionOpening, 8.5) region_features (RegionOpening, 'area_holes', AreaHole)region_features (RegionOpening, 'rectangularity', Rectangularity)dev_display (Image)if(AreaHole<300 and Rectangularity>0.92)dev_set_color ('green')dev_display (RegionOpening)set_display_font (WindowHandle, 96, 'mono', 'true', 'false')disp_message (WindowHandle, 'OK', 'image', 12, 12, 'green', 'false')elsedev_set_color ('red')dev_display (RegionOpening)set_display_font (WindowHandle, 96, 'mono', 'true', 'false')disp_message (WindowHandle, 'NG', 'image', 12, 12, 'red', 'false')endifset_display_font (WindowHandle, 26, 'mono', 'true', 'false')disp_message (WindowHandle, '孔洞面积:'+AreaHole, 'image', 132, 12, 'black', 'true')disp_message (WindowHandle, '矩形度:'+Rectangularity, 'image', 182, 12, 'black', 'true') stop()
endfor
案例2:检测胶囊药粒
check_blister.hdev
这个案例是使用灰度值和区域面积来判断胶囊是否装错和是否是空的,但是最后一张图片倒数第三个胶囊,它的缺陷是比正常胶囊长度上短一点,使用面积筛选有点困难,所以又加上了一个区域的长度特征。
dev_set_line_width (3)
dev_get_window (WindowHandle)
dev_set_draw ('margin')
dev_set_color ('red')
dev_update_window ('off')
set_display_font (WindowHandle, 26, 'mono', 'true', 'false')list_files ('./', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
read_image (Image,ImageFiles[0])read_image (Image, ImageFiles[0])
access_channel (Image, Image1, 3)
threshold (Image1, Regions, 75, 255)
opening_circle (Regions, RegionOpening, 2.5)
shape_trans (RegionOpening, RegionTrans, 'convex')//凸性转换
area_center (RegionTrans, Area, RowRef, ColumnRef)
orientation_region (RegionTrans, Phi)
vector_angle_to_rigid (RowRef, ColumnRef, Phi, RowRef, ColumnRef, 0, HomMat2D)
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
affine_trans_image (Image1, ImageAffineTrans, HomMat2D, 'constant', 'false')gen_empty_obj (Objects)
for I := 0 to 4 by 1for J := 0 to 2 by 1r:=87+72*Ic:=209+150*Jgen_rectangle2 (ROI_0, r, c, 0, 70, 34) concat_obj (Objects, ROI_0, Objects)endfor
endfor
union1 (Objects, RegionUnion)for Index := 0 to |ImageFiles| - 1 by 1dev_update_window ('off')read_image (Image, ImageFiles[Index]) * 定位access_channel (Image, Image1, 3)threshold (Image1, Regions, 75, 255)opening_circle (Regions, RegionOpening, 2.5)closing_circle (RegionOpening, RegionClosing1, 2.5)shape_trans (RegionClosing1, RegionTrans, 'convex')//凸性转换area_center (RegionTrans, Area, Row, Column)orientation_region (RegionTrans, Phi)vector_angle_to_rigid (Row, Column, Phi, RowRef, ColumnRef, 0, HomMat2D)affine_trans_image (Image1, ImageAffineTrans, HomMat2D, 'constant', 'false')* 检测reduce_domain (ImageAffineTrans, RegionUnion, ImageReduced)binary_threshold (ImageReduced, Region, 'max_separability', 'dark', UsedThreshold)opening_circle (Region, RegionOpening1, 5.5)closing_circle (RegionOpening1, RegionClosing, 5.5)connection (RegionClosing, ConnectedRegions)fill_up (ConnectedRegions, RegionFillUp)shape_trans (RegionFillUp, RegionTrans1, 'convex') select_shape (RegionTrans1, SelectedRegions, 'area', 'and', 2500, 6000) sort_region (SelectedRegions, SortedRegions, 'character', 'true', 'row')* 判断count_obj (Objects, Number)gen_empty_obj (MissObject)gen_empty_obj (ErrorObject)numError:=0numMiss:=0for Index1 := 1 to Number by 1select_obj (Objects, ObjectSelected, Index1)intersection (ObjectSelected, SortedRegions, RegionIntersection)area_center (RegionIntersection, Area1, Row1, Column1)* 最后一张图片倒数第三个胶囊要短一些,光靠区域面积很难筛选啊,所以加一个区域长度region_features (RegionIntersection, 'width', widthValue)if(Area1>0)min_max_gray (RegionIntersection, ImageReduced, 0, Min, Max, Range)if(Area1 < 3800 or Min<65 or widthValue<95)//这种依靠区域面积区分好坏的方法还是不够稳定numError:=numError+1concat_obj (ErrorObject, ObjectSelected, ErrorObject)endifelsenumMiss:=numMiss+1concat_obj (MissObject, ObjectSelected, MissObject)endif endfordev_update_window ('on')dev_display (ImageAffineTrans)dev_set_color ('red')dev_display (MissObject)dev_set_color ('blue')dev_display (ErrorObject)disp_message (WindowHandle, 'Miss:'+numMiss, 'image', 12, 12, 'black', 'true')disp_message (WindowHandle, 'Error:'+numError, 'image', 52, 12, 'black', 'true')disp_message (WindowHandle, 'Right:'+(15-numError-numMiss), 'image', 92, 12, 'black', 'true')stop()
endfor
案例3:检查塑料网是否破损
novelty_detection_dyn_threshold.hdev
list_files ('./', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
dev_get_window (WindowHandle)
set_display_font (WindowHandle, 66, 'mono', 'true', 'false')
for Index := 0 to |ImageFiles| - 1 by 1read_image (Image, ImageFiles[Index]) threshold (Image, Regions, 28, 105)connection (Regions, ConnectedRegions)select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 450, 10000)boundary (SelectedRegions, RegionBorder, 'inner')count_obj (RegionBorder, Number)dev_display (Image)dev_display (RegionBorder)if(Number>1)dev_set_color ('red') disp_message (WindowHandle, 'NG', 'image', 12, 12, 'red', 'false')elsedev_set_color ('green')disp_message (WindowHandle, 'OK', 'image', 12, 12, 'green', 'false')endifdev_display(RegionBorder)stop()
endfor
资源下载地址
https://download.csdn.net/download/weixin_38566632/18218221
对这方面技术感兴趣的小伙伴可以关注我,我会持续更新的。别忘了给我点赞哦!
Halcon缺陷检测——Blob分析特征相关推荐
- halcon——缺陷检测常用方法总结(模板匹配(定位)+差分)
引言 机器视觉中缺陷检测分为一下几种: blob分析+特征 模板匹配(定位)+差分 光度立体:halcon--缺陷检测常用方法总结(光度立体) - 唯有自己强大 - 博客园 (cnblogs.com) ...
- 基于halcon—缺陷检测常用方法与示例总结
摘要 缺陷检测是视觉需求中难度最大一类需求,主要是其稳定性和精度的保证.首先常见缺陷:凹凸.污点瑕疵.划痕.裂缝.探伤等. 缺陷检测算法不同于尺寸.二维码.OCR等算法.后者应用场景比较单一,基本都是 ...
- Halcon 缺陷检测 金属拉丝表面缺陷检测(乘法增强、傅里叶变换与卷积、纹理过滤、动态阈值)
Halcon 缺陷检测 拉丝表面缺陷检测(乘法增强.傅里叶变换与卷积.纹理过滤.动态阈值) 文件下载 链接:https://pan.baidu.com/s/1HNl4vy0jEaFx5OUuBDAMX ...
- Halcon缺陷检测系列
Halcon缺陷检测系列Halcon缺陷检测系列Halcon缺陷检测系列 一 注塑吸嘴缺口检测 二 铣刀刀口破损缺陷检测 三 网状产品表面破损检测 四 手机摄像头图像表面的轻微缺陷检测 五 皮革纹理表 ...
- halcon编程入门四——halcon缺陷检测
Region参数 缺陷类型 1.边缘凹凸检测 2.内部凸凹点.瑕疵.污点.内部烫伤.孔洞 3.划痕(用低角度环形光进行打光,将划痕打亮,背景打暗:也可用同轴光,让表面反光不明显) 缺陷图像处理 1.b ...
- Halcon 缺陷检测概述
缺陷检测概述 1. 什么缺陷检测 2. 缺陷检测的方法总结 1. 什么缺陷检测 你认为不好的全是缺陷(划痕.脏污.缺损.正反.凹陷.凸起等) 缺陷检测项目之所以难度大,就是因为它的不确定性,灵活性,所 ...
- Halcon缺陷检测——光度立体
光度立体法 1. 了解一些概念 2. 认识两个算子 3. 初试光度立体法 4. 药片外包装破损的检测(halcon案例) 5. 银行卡字符识别图片下载 1. 了解一些概念 适用场景:光度立体法可以看作 ...
- Halcon学习路线——Blob分析(1)
Blob分析 1. 谈谈Blob分析 2. 看一张图片 3. 处理图像效果 4. Halcon代码 5. 资源下载 1. 谈谈Blob分析 Blob可以说是图像处理中最简单.最常用的方法了.虽说简单, ...
- Halcon缺陷检测——机器学习1
缺陷检测--机器学习 写在前面 1. create_ocr_class_mlp 1.1 ocr识别就只能识别ocr吗? 1.2 简单的图形分类 2. create_class_mlp 2.1 将区域作 ...
最新文章
- 如何安装树莓派摄像头
- zabbix 清空历史表
- OD命令大全(OllyDbg命令)
- Sumline常用快捷操作
- 动画道路上的新宠 -- Lottie
- Vaadin附加组件和Maven
- Python升级至2.7方法
- springboot+Mybatis-plue自动生成代码
- 边缘计算计算机科学与技术,边缘计算现状与展望-ComputerScience-WayneStateUniversity.PDF...
- 许志安刘强东倪震:结构性中年危机下的男人们
- python抓取抖音用户画像,摩羯天蝎居然刷得最多?
- python-绘制双轴柱状图
- 基于springboot的高校档案系统
- QQ服务器维护一般多久,QQ扩列怎么暂停服务了维护到什么时候结束
- 简易旋转倒立摆设计报告
- 【软件工程】山东大学软件工程复习提纲
- 四旋翼无人机飞控系统设计(闭环控制系统)
- 编译报错【error】dexpreopt.sh:23 exited with status 1
- leetcode 85. Maximal Rectangle(最大矩形)
- 我的世界服务器信息变英文,我的世界服务器
热门文章
- 【Postgresql-9.6.8】触发器实例(记录增、删、改)
- IDEA使用@Data注解,类调用get、set方法标红的解决办法
- 解决html5中video标签无法播放mp4问题的办法
- 微信分享网页链接缩略图不显示解决方法
- redis集群出现JedisNoReachableClusterNodeException异常(No reachable node in cluster)
- 一个由于springboot自动配置所产生的问题的解决
- 列表理解与lambda +过滤器
- win11beta版如何升级正式版 Windows11beta升级正式版的步骤方法
- cf烟雾头怎么调win7系统
- 多线程下载Android