当前位置: 首页 > backend >正文

halcon-亚像素边缘提取教程

边缘提取教程
序号标题网址
1亚像素定义Halcon 算子 edges_sub_pix 亚像素定义以及滤波器(一)_edgessubpix-CSDN博客
2
3使用场景Halcon 轮廓检测常用算子、原理及应用场景_halcon boundary求边界的原理-CSDN博客
4

算子edges_sub_pix使用方法

Halcon edges_sub_pix_halcon edgessubpix-CSDN博客
实例教程edges_sub_pix边缘提取_mob64ca13f9e726的技术博客_51CTO博客

1.边缘提取

        边缘提取指数字图像处理中,对于图片轮廓的一个处理。对于边界处,灰度值变化比较剧烈的地方,就定义为边缘。也就是拐点,拐点是指函数发生凹凸性变化的点。二阶导数为零的地方。并不是一阶导数,因为一阶导数为零,表示是极值点。

        边缘增强算子,突出图像中的局部边缘,然后定义象素的“边缘强度”,通过设置阈值的方法提取边缘点集。由于噪声和模糊的存在,监测到的边界可能会变宽或在某点处发生间断。因此,边界检测包括两个基本内容:

      边缘定义:图像灰度变化率最大的地方(图像灰度值变化最剧烈的地方)。图像灰度在表面法向变化的不连续造成的边缘。一般认为边缘提取是要保留图像的灰度变化剧烈的区域,这从数学上看,最直观的方法就是微分(对于数字图像来说就是差分),在信号处理的角度来看,也可以说是用高通滤波器,即保留高频信号。

2.边缘提取方法

     2.1、只保留图片中感兴趣的区域,先阈值膨胀保留图片中感兴趣区域,只处理图片中需要处理的区域  
    threshold阈值分割,
    形态学处理dilation_circle,erosion_circle
    ROI Region: difference,union1
    抠图获取ROI:reduce_domain
  2.2 提取轮廓---合并轮廓上相邻的不相连的点,根据轮廓特征选择相应轮廓
         获取轮廓亚像素,像素 edges_sub_pix ,edges_image;
        对轮廓选择:切割edge: segment_contours_xld,segment_contour_attrib_xld
        选择符合要求轮廓整合在一起:union_adjacent_contours_xld     

3 相关算子

3.1 

4 实例代码
 *获取硬币边缘read_image (Cicle, 'E:/学习/Halcon/玩套路之边缘检测/玩套路之边缘检测/cicle.bmp')dev_set_draw('margin')dev_set_color('red')*获取ROIgen_circle (ROI_0, 253.451, 321.26, 179.988)reduce_domain(Cicle, ROI_0, ImageReduced)*二值化处理,并打散连接区域,选取目标区域threshold(ImageReduced,Regions,23,255)connection(Regions, ConnectedRegions)select_shape(ConnectedRegions,SelectedRegions,'area','and',57706.4,86146.8)*将目标区域进行膨胀处理dilation_circle(SelectedRegions, RegionDilation, 3.5)*将目标区域进行腐蚀处理erosion_circle(SelectedRegions, RegionErosion, 5.5)*填充孔洞fill_up(RegionErosion, RegionFillUp)*将膨胀后的区域和腐蚀后的区域进行减操作,并进行抠图处理,目的是为了得到有边缘的真实图像difference(RegionDilation,RegionFillUp, RegionDifference)union1(RegionDifference, RegionUnion)reduce_domain(ImageReduced,RegionUnion,ImageReduced1)edges_sub_pix(ImageReduced1, Edges, 'canny', 1, 20, 40)*smooth_contours_xld(Edges, SmoothedContours, 55)*根据得到的真实边缘,进步处理和计算所需的线、弧、圆等segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 2)select_contours_xld (ContoursSplit, SelectedContours, 'contour_length', 5, 1000, -0.5, 0.5)union_adjacent_contours_xld (SelectedContours, UnionContours3, 10, 1, 'attr_keep')length_xld(UnionContours3, Length)tuple_max(Length, Max)tuple_find(Length, Max, Indices)select_obj(UnionContours3, ObjectSelected, Indices+1)length_xld(ObjectSelected, Length1)dev_clear_window()dev_display(Cicle)dev_display(ObjectSelected)fit_circle_contour_xld (ObjectSelected, 'algebraic', -1, 0, 0, 3, 2, Row1, Column1, Radius1, StartPhi, EndPhi, PointOrder)gen_circle (Circle1, Row1, Column1, Radius1)dev_clear_window()dev_display(Cicle)dev_set_color('green')dev_display(Circle1) 
 dev_get_window(WindowHandle)dev_set_draw('margin')dev_set_color('green')
*获取硬币边缘read_image(sourceImage, '1.jpg')read_image (Image, '1.jpg')
*阈值分割图像threshold(Image, Regions, 10, 255)*分割连通区域
connection(Regions, ConnectedRegions)*选择面积大于100,小于86146select_shape(ConnectedRegions,rectangularity,'area','and',10,861460)* 获取选中的区域数量
count_obj(rectangularity, Number)* 循环显示每个区域
for I := 1 to Number by 1clear_window(WindowHandle)select_obj(rectangularity, Region, I)disp_region(Region, WindowHandle)* 将区域转换为图像(二值图像)* write_region(Region,'img_'+I)*paint_region(Region, Image, ImageResult, [0,255,0], 'fill')*write_image(ImageResult, 'png', 0, 'example_painted')shape_trans(Region, ConvexRegions, 'convex')disp_obj(ConvexRegions, WindowHandle)reduce_domain(sourceImage, Region, ImageReduced)dev_display(ImageReduced)write_image(ImageReduced, 'png', 0, 'ImageReduced'+I)crop_domain(sourceImage,Region)* 可以在这里添加暂停或其它交互操作,例如等待用户按键继续查看下一个区域*stop()
endfor

http://www.xdnf.cn/news/20298.html

相关文章:

  • PyTorch 模型文件介绍
  • element-plus 表单校验-表单中包含多子组件表单的校验
  • (数据结构)哈希碰撞:线性探测法 vs 拉链法
  • 基于区块链的IoMT跨医院认证系统:Python实践分析
  • Flink中的事件时间、处理时间和摄入时间
  • Joplin-解决 Node.js 中 “digital envelope routines::unsupported“ 错误
  • 自旋锁/互斥锁 设备树 iic驱动总线 day66 67 68
  • 输入2.2V~16V 最高输出20V2.5A DCDC升压芯片MT3608L
  • 计算机网络:网络设备在OSI七层模型中的工作层次和传输协议
  • 鸿蒙 BLE 蓝牙智能设备固件升级之DFU升级方式(Nordic芯片)
  • macbook intel 打开cursor会闪退
  • MySQL集群高可用架构(MHA高可用架构)
  • Process Explorer进阶(第三章3.3):深入理解进程详情
  • [Windows] AdGuard.v7.21.5089.0 中文直装电脑版
  • cds序列转换为pepperl脚本详细解读及使用
  • Python多线程编程全面指南
  • web自动化测试
  • Elasticsearch优化从入门到精通
  • 线代:排列与逆序
  • 从机器学习的角度实现 excel 中趋势线:揭秘梯度下降过程
  • PageHelper的使用及底层原理
  • WordPress如何绑定多个域名 WordPress实现多域名访问
  • 新的打卡方式
  • GPIO介绍
  • java接口和抽象类有何区别
  • ICPC 2023 Nanjing R L 题 Elevator
  • 用Android studio运行海外极光推送engagelab安卓的SDK打apk安装包
  • Ribbon和LoadBalance-负载均衡
  • 从Java全栈到前端框架:一次真实面试的深度复盘
  • 验证平台中所有的组件应该派生自UVM中的类