halcon教程- 边缘检测 亚像素边缘提取 轮廓提取
知识点是鱼,套路是渔。授人以鱼不如授人以渔!”
一般在做项目时,无论是边缘检测、瑕疵检测、Blob检测等应用,都有一定的通用套路,也可以说是通用处理框架,在此框架下根据具体应用具体分析,基本上所有项目都可完成。
总结起来:通用套路 + 灵活运用
对于初学者来说,只需掌握通用套路即可,灵活运用需要经过大量的练习才可达到,运用大学里学马克思哲学时的一句话概括,“量变引起质变”,当你达到这个程度之时,俨然成为集大成者了。
边缘检测通用思路:
设置ROI感兴趣区域,此区域需包含待检测边缘;
二值化处理,并打散连接区域,进一步选取目标区域;
将目标区域进行膨胀处理;
将目标区域进行腐蚀处理;
将膨胀后的区域和腐蚀后的区域进行减操作,并进行抠图处理,目的为了得到有边缘的真实图像;
使用边缘检测算子提取亚像素轮廓;
根据得到的真实边缘,进步处理和计算所需的线、弧、圆等;
现学现用:检测圆
处理思路:1. 根据以上所讲套路,求得外边缘轮廓;
2. 根据所得轮廓,拟合圆;
1:检测外边缘轮廓
外边缘处理后,如下图所示,会提取一些干扰轮廓,第2部分–拟合圆,会对此进行处理。
附第一部分 halcon源代码
*读入图片
read_image (Image, ‘cicle.bmp’)
*计算图片大小,并以原图尺寸显示
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
dev_display (Image)
*01. 设置ROI感兴趣区域
gen_rectangle1 (ROI, 50, 50, 550, 550)
reduce_domain (Image, ROI, ImageReduced)
*02. 二值化处理,并打散连接区域,选取目标区域
threshold (ImageReduced, Regions, 23, 255)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 57706.4, 86146.8)
*03. 将目标区域进行膨胀处理
dilation_circle (SelectedRegions, RegionDilation, 10)
*04. 将目标区域进行腐蚀处理
erosion_circle (SelectedRegions, RegionErosion, 4)
*填充孔洞
fill_up (RegionErosion, RegionFillUp)
*05. 将膨胀后的区域和腐蚀后的区域进行减操作,并进行抠图处理,目的为了得到有边缘的真实图像
difference (RegionDilation, RegionFillUp, RegionDifference)
union1 (RegionDifference, RegionUnion)
reduce_domain (ImageReduced, RegionUnion, ImageReduced1)
*06. 使用canny算子提取亚像素轮廓
edges_sub_pix (ImageReduced1, Edges, ‘canny’, 1, 20, 40)
2:拟合圆
此时进行套路中的最后一步,根据得到的真实边缘,进步处理和计算所需的线、弧、圆等,在这一步我们常用分割函数 segment_contours_xld,联合相邻直线函数 union_collinear_contors_xld,选择轮廓函数select_contours_xld,联合相同圆函数 union_cocircular_contours_xld等函数,进一步对边缘轮廓处理,也可根据找到的轮廓边缘,得到点云数据,拟合成圆、直线、椭圆等;
处理后如下图所示。
附第二部分 halcon源代码
*07. 根据得到的真实边缘,进步处理和计算所需的线、弧、圆等
segment_contours_xld (Edges, ContoursSplit, ‘lines_circles’, 5, 4, 2)
select_contours_xld (ContoursSplit, SelectedContours, ‘contour_length’, 8, 1000, -0.5, 0.5)
union_adjacent_contours_xld (SelectedContours, UnionContours3, 10, 1, ‘attr_keep’)
fit_circle_contour_xld (UnionContours3, ‘algebraic’, -1, 0, 0, 3, 2, Row1, Column1, Radius1, StartPhi, EndPhi, PointOrder)
gen_circle (Circle, Row1, Column1, Radius1)
*显示结果
dev_set_line_width (2)
dev_set_draw (‘margin’)
dev_display (Image)
dev_display (Circle)
原图及完整源代码见百度网盘:
链接:https://pan.baidu.com/s/1FLZGJ7abz7CoqoweuGv3uQ 密码:au2h
halcon教程- 边缘检测 亚像素边缘提取 轮廓提取相关推荐
- 【Halcon视觉】图像亚像素边缘提取
目录 概念 算子 代码 实例 1.概念 亚像素:原先的像素单位为1,变为比1小的精度.亚像素比像素精度更高. 亚像素边缘提取原理:采用插值算法,精确定位边缘的位置. 2.算子 Halcon提供了亚像素 ...
- 亚像素边缘提取的例子
求帮忙下载: 1.http://download.csdn.net/detail/pkma75/925394 pkma75 资源积分:1分 备注:pdf格式,用曲线拟合的方法计算亚像素,编程易实现,具 ...
- halcon像素统计_Halcon学习(27-1)halcon测量技术:亚像素,亚像素精度
友发来两个小项目,要求亚像素精度.突然想问几个问题:1.何为亚像素?2.何为亚像素精度?3.使用亚像素测量,系统应注意什么? 1.何谓亚像素? 面阵摄像机的成像面以像素为最小单位.例如某CMOS摄像芯 ...
- 使用OpenCV实现Halcon算法(1)亚像素提取边缘,Sub-Pixel Edge Detector
声明:本篇仅仅是分享网上的开源项目,算法非本人原创.转载文章: <A Sub-Pixel Edge Detector: an Implementation of the Canny/Devern ...
- halcon 亚像素定义以及测量拟合
流程: 实现流程: 1>采集图像 2>预处理(RoI) :缩小干扰的区域 3>亚像素的边缘提取(xld) edges_sub_pix 边缘提取算子 threshold_sub_pix ...
- opencv亚像素边缘精度_opencv亚像素边缘检测
一种新的基于 Zernike 正交矩亚像素边缘定位的直径测量方法 [J], 宋晋国; 党 宏社; 洪英; 梁勇 2.一种改进的正交 Fourier-Mellin 矩亚像素边缘检测算法 [C...... ...
- MATLAB亚像素定位,亚像素精准边缘定位
1.http://download.csdn.net/detail/pkma75/925394 pkma75 资源积分:1分 备注:pdf格式,用曲线拟合的方法计算亚像素,编程易实现,具有较强的实用价 ...
- opencv亚像素边缘精度_OpenCV亚像素角点cornerSubPixel()源代码分析
上一篇博客中讲到了goodFeatureToTrack()这个API函数能够获取图像中的强角点.但是获取的角点坐标是整数,但是通常情况下,角点的真实位置并不一定在整数像素位置,因此为了获取更为精确的角 ...
- 基于亚像素的图像测量仪标定算法(满视场棋盘格,张正友标定法)
图像测量仪对测量的精度极高,能达到0.001毫米,所有的图像边缘分割和摄像头标定,都在亚像素级水平上进行.目前我们能做到1/100个像素的提取.图像测量仪的关键部分在于亚像素分割.亚像素分割算法各种各 ...
- halcon像素统计_Halcon(八)亚像素轮廓XLD
fast_threshold (Image, Region, 0, 120, 7) boundary (Region, RegionBorder, 'inner') dilation_circle ( ...
最新文章
- UART0串口编程(四):UART0串口编程之在UC/OS—II中遭遇的危机
- 用 ArrayList 还是 LinkedList?
- jQuery的AJAX
- [数据结构]合并有序数组
- sort()函数、C++
- yum 不能安装应用,提示There are no enabled repos Run yum repolist all
- 【软件工程】--软工文档总结
- 《Effective C#》Item 7:推荐使用不可改变的原子值类型
- 通过elasticsearch对日志进行搜索热词统计
- 解决tomcat内存溢出问题
- 打印机扫描计算机远程扫描仪,怎么用打印机扫描文件-彩色网络打印机扫描设置FTP版...
- 计算机硬盘显示ntfs,电脑硬盘显示NTFS
- CNVD-2020-10487复现(Apache Tomcat文件包含漏洞)
- 20.4版本Ubuntu中部署LAMP环境,部署论坛discuz
- CTO说出了我的成长慢的原因,价值10万:“在VUCA时代,必须掌握的12种永久技能。”...
- elementui中导航组件点击二级菜单页面跳转但是二级菜单关闭问题
- Linux的for循环语句
- 改成每天晚上锻炼身体
- 林大ACM培训心得day4
- ACCA的详细介绍以及报名条件,这里全的有!