一、HALCON 12.0例程里有一个类似的,Ctrl+E打开例程,搜关键字“circle”或者"ball"就行。

请重点关注下measure_circles.hdev,circles.hdev,union_cocircular_contours_xld.hdev,ball.hdev这几个例程。

大概过程差不多是:找到圆形区域--亚像素边缘--结果曲线分段--筛选出圆形--拟合

二、要测量一个圆的直径,可以先通过阈值筛选出黑色部分threshold (Rim, Dark, 0, 128),

然后将选中部分组合connection (Dark, DarkRegions),选择其中类圆度高的部分根据选中部分与圆的相似度筛选出圆型部分select_shape (DarkRegions, Circles, ['circularity','area'], 'and', [0.85,50], [1.0,99999]),

然后选择将所选的类圆区域扩大8.5个像素点作为一个区域,缩小8.5个像素点作为一个区域,然后将连个区域合并,去两个区域不同的部分,那么这个圆区域的边缘就在这个合并区域中,算子如下:

dilation_circle (Circles, ROIOuter, 8.5)
erosion_circle (Circles, ROIInner, 8.5)
difference (ROIOuter, ROIInner, ROI)
union1 (ROI, ROIEdges)

这时我们在用算子edges_sub_pix (RimReduced, Edges, 'lanser2', 0.3, 10, 20)提取其边缘轮廓。

用一个椭圆去近似它(这个圆形区域毕竟不是真正的圆,需要进行拟合)fit_ellipse_contour_xld (RelEdges, 'ftukey', -1, 2, 0, 200, 3, 2, Row, Column, Phi, Ra, Rb, StartPhi, EndPhi, PointOrder)从而得到这个区域的中点坐标 Row, Column,与x轴的角度Phi,半长轴Ra,半短轴Rb,开始角度StartPhi,结束角度EndPhi,这是就可以计算圆的近似半径了。

例子1

dev_clear_window()
dev_close_window()
read_image (read_Image, 'C:/Users/Leason/Desktop/试验/2.jpg')
rgb1_to_gray (read_Image, Image)
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, Width/3, Height/3, WindowHandle)
dev_display (Image)
gen_rectangle1 (ROI, 239.876, 8.5, 513.303, 695.5)
reduce_domain (Image, ROI, ImageReduced)
threshold (ImageReduced, ROI, 80, 255)
connection (ROI, DarkRegions)
select_shape (DarkRegions, Circles, ['circularity','area'], 'and', [0.85,50], [1.0,99999])
count_obj (Circles, Number)//计算圆形的数量
select_obj (Circles, PillSelected,1)dilation_circle (Circles, ROIOuter, 4)
erosion_circle (Circles, ROIInner, 2)
difference (ROIOuter, ROIInner, ROI_dif)
union1 (ROI_dif, ROIEdges)
reduce_domain (ImageReduced, ROIEdges, ImageReduced1)*提取其边缘轮廓
edges_sub_pix (ImageReduced1, Edges, 'lanser2', 0.3, 10, 20)*区域的中点坐标Row, Column,与x轴的角度Phi,半长轴Ra,半短轴Rb,开始角度StartPhi,结束角度EndPhi
fit_ellipse_contour_xld (Edges, 'ftukey', -1, 2, 0, 200, 3, 2, Row, Column, Phi, Ra, Rb, StartPhi, EndPhi, PointOrder)

例子2

read_image (Image, 'C:/Users/caiqi/Desktop/halcon计划/测量/_4.png')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_display (Image)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
dev_set_colored (12)
dev_set_line_width (2)
dev_set_draw ('fill')
fast_threshold (Image, Region, 200, 255, 20)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
dev_display (Image)
dev_display (SelectedRegions)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
boundary (SelectedRegions, RegionBorder, 'inner_filled')
dev_clear_window ()
dev_display (RegionBorder)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
edges_sub_pix (Image, Edges, 'canny', 1, 10, 40)
fit_circle_contour_xld (Edges, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, 6.28318, 'positive', 1)

三、边缘提取

1、设置ROI兴趣区域

2、快速二值化,并连接相邻区域。

这样做的目的是进一步减少目标区域,通过二值化将目标区域大概轮廓提取出来

3、提取最接近目标区域的轮廓

常用函数有boundary,gen_contour_region_xld

4、根据自己的需求提取需要的初步轮廓

5、将初步提取的初步轮廓进行膨胀操作

6、将膨胀后的区域和原图进行减操作(在这步之前有可能需要对原图进行高斯滤波)。这样就能得到只有边缘的真实图像

7、用canny或其他算子(根据需要)提取亚像素轮廓,一般使用edges_sub_pix函数

8、处理和计算,得到真实的边缘XLD后你可能需要进一步处理得到你想要的线、弧等。

你可能用到的函数segment_contours_xld(分割)  union_collinear_contours_xld(联合相邻或相同角度直线)select_contours_xld(提取想要的轮廓) union_cocircular_contours_xld(联合相同圆)等等

得到轮廓后如果你不知道怎么处理后得到你想要的东西(线、弧、圆、角、矩形)你都可以将轮廓转化为点,然后用点集合来拟合任何你想要的东西。

四、常用的选择和修改区域的算子

select_shape:选择区域

shape_trans:区域变换

union1、union2、intersection、difference、complement、clip_region:常用的组合区域的算子

一些组合区域的操作图解:

一些变换区域的操作图解:

---

参考资料

鸟叔封装的halcon rake卡直线 spoke卡圆工具(开源版) v1.3 20190527

提示信息 - Halcon视觉之家-Halcon视觉技术论坛

封装的halcon找顶点的函数-peak

封装的halcon找顶点的函数-peak-Halcon基础学习

Halcon测量圆直径(半径)的方法之暴力拟合法 vs 测量工具法

Halcon测量圆直径(半径)的方法之暴力拟合法 vs 测量工具法_CarnivoreRabbit的博客-CSDN博客_halcon测量圆的直径

halcon边缘提取和赃物检测的常用方法

halcon边缘提取和赃物检测的常用方法_dearpeer的博客-CSDN博客

Halcon - 基础03 - 常用的选择和修改区域的算子

Halcon - 基础03 - 常用的选择和修改区域的算子_zdfffg的博客-CSDN博客

Halcon找圆系列(1)如何检测圆形相关推荐

  1. Halcon找圆系列(4)测量圆直径/半径的方法之暴力拟合法 vs 测量工具法

    今天要给大家分享一点关于Halcon测量圆直径(半径)的方法. 首先容我啰嗦两句:之所以要对这个看似很基础的问题进行探讨,主要原因有二,其一是这个问题确实困扰了我一段时间,当然这主要是由于我自己经验不 ...

  2. Halcon找圆系列(3)找金属表面的圆孔

    我在Halcon学习网发了一个帖子: 请教工件的金属表面圆孔的识别与定位 http://www.ihalcon.com/read-15016-1.html 解决方案有了,源码如下: dev_updat ...

  3. Halcon找圆系列(6)找多个圆并求圆心间距离

    项目来源:http://www.ihalcon.com/read-6805.html *找多个圆并求圆心间距离 *http://www.ihalcon.com/read-6805.html*方法1 d ...

  4. OpenCV找圆系列(2)HoughCircles算子新增了HOUGH_GRADIENT_ALT方法,效果好多了

    自OpenCV 4.3.0版本,imgproc模块的HoughCircles()函数,新增加了检测算法HOUGH_GRADIENT_ALT,精度得到了很大的提升. 1.举例opencv v4.5.5版 ...

  5. Halcon 找圆测量工具

    找圆测量工具 1. find_circle函数 2. 示范案例 1. find_circle函数 find_circle(Image, Contours, WindowHandle, CenterRo ...

  6. Halcon中的测量工具(找边找圆等)——Metrology系列

    Halcon中的测量工具(找边找圆等)--Metrology系列 1. Halcon中的工具助手 对于使用Halcon的小伙伴们来说,在菜单栏上的"助手"一栏中可以找到一些可以快捷 ...

  7. Halcon模板匹配定位跟随找圆

    检测图像: Hdevelop代码: list_image_files ('D:/用户目录/Test', 'default', [], ImageFiles) read_image (Image,Ima ...

  8. halcon工件圆孔检测

    halcon工件圆孔检测 下面展示一些 码片. * This program gets the deviation between * circular contours and their best ...

  9. halcon学习拓展系列—弱边缘缺陷检测方法汇总之频域方法(一)

    上一专题<halcon学习拓展系列-图像处理之低通滤波算子lowpass_filter_fft>,初认识了频域的图像增强和空域的高通滤波,该专题主要讲解频域检测边缘,总目录如下: 一.基础 ...

  10. Halcon慢慢来(卡尺找线、找圆)

    卡尺找线.找圆 Halcon ★add_metrology_object_generic (MetrologyHandle, Shape, ShapeParam, MeasureLength1, Me ...

最新文章

  1. 微信授权获取用户的openid和支付宝授权获取用户的userid
  2. python学习音频-详解python播放音频的三种方法
  3. Software-OO 面向对象思维
  4. java分装_Java ——Number Math 类 装箱 拆箱 代码块
  5. 使用 PHP 创建自己的视频点播网站
  6. 后台开发人员面试内容——操作系统(一)
  7. [SQL实战]之查找当前薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by
  8. 一个字符带下滑线的EditText
  9. [深入Python]Alex Martelli的Borg类
  10. (27)python-多维数组
  11. 机器学习笔记(三):NumPy、Matplotlib、kNN算法 | 凌云时刻
  12. 如何解救爆红的C盘?
  13. ab cookie 压力测试接口
  14. C++基础概念(初步代码示例英石与磅单位互换)
  15. VB 数据库交互(二)——经典五实例总结
  16. Vue antdv a-select 内容搜索过滤(filterOption)
  17. MemoryCache缓存
  18. C语言字符数组的初始化
  19. 解耦的概念、spring实现解耦的概述
  20. 写一个WFP驱动,拦截网络

热门文章

  1. 需求分析:5W1H分析法
  2. 计算机网络第二章 韩立刚
  3. https抓包与防抓包
  4. [计算机数值分析]拉格朗日插值公式
  5. java 图片md5码_java 对图片进行MD5算法
  6. 华为推送-华为PUSH SDK Android版接入方法
  7. 最新[发货100]PHP源码免费虚拟商品自动发货系统v1.0
  8. C# CAD开发 选择集的使用
  9. 怎么解除极域课堂的控制
  10. Spring boot集成海康威视门禁设备