这里主要介绍基于亚像素提取的边缘检测方法,具体大家可以参考一本书,如果对halcon很熟悉的就不用了看了,反之建议看看,该书为《机器视觉算法原理与编程实践》,我也是跟着敲了一遍代码,很多都可以达到触类旁通,这里就不详细介绍了,写博客的目的是便于自己以后查找

read_image (Image, 'F:/机器视觉/Halcon机器视觉算法原理与编程实战/code/code/data/flower')rgb1_to_gray (Image, GrayImage)
*像素级边缘提取*1.使用sobel_amp
*细节丰富
sobel_amp (GrayImage, EdgeAmplitude, 'sum_abs', 3)
*加入滤波器的,如果卷积核增大了,则需要加入滤波器进行平滑操作
sobel_amp (GrayImage, EdgeAmplitude1, 'sum_abs_binomial', 3)
sobel_amp (GrayImage, EdgeAmplitude1, 'sum_sqrt', 3)
*细节缺失
sobel_amp (GrayImage, EdgeAmplitude1, 'thin_sum_abs', 3)sobel_amp (GrayImage, EdgeAmplitude1, 'thin_max_abs', 3)sobel_amp (GrayImage, EdgeAmplitude1, 'x', 3)sobel_amp (GrayImage, EdgeAmplitude1, 'y', 3)
*加入滤波器的
sobel_amp (GrayImage, EdgeAmplitude1, 'sum_abs_binomial', 3)
threshold (EdgeAmplitude1, Regions, 100, 255)
skeleton (Regions, Skeleton)*2.sobel_dir主要是带方向
sobel_dir (GrayImage, EdgeAmplitude2, EdgeDirection2, 'sum_abs', 3)*3.edges_image,该算子和sobel算子类似,使用了非极大值抑制和滞后阈值,使提取的边缘更细化
*同样该算子返回精确的边缘梯度和方向
*下面是不使用非极大值抑制和滞后阈值
edges_image (GrayImage, ImaAmp, ImaDir, 'canny', 1, 'none', -1, -1)
*使用非极大值抑制不使用阈值滞后
edges_image (GrayImage, ImaAmp1, ImaDir1, 'canny', 1, 'nms', -1, -1)
*使用非极大值抑制和阈值滞后
edges_image (GrayImage, ImaAmp2, ImaDir2, 'canny', 1, 'nms', 20, 40)
threshold (ImaDir2, Regions1, 1, 255)
skeleton (Regions1, Skeleton1)*4.edges_color是提取彩色图像的边缘,其他参数和edges_image很类似
edges_color (Image, ImaAmp3, ImaDir3, 'canny', 1, 'nms', 20, 40)*5.derivate_gauss算子不仅可以提取图像边缘,该算子可以平滑图像、边缘检测:提取图像的边缘、角点检测:检测图像上的角点
derivate_gauss (GrayImage, DerivGauss, 0.9, 'xx')*6.laplace算子,该算子是对图像求二次导,会在边缘产生零点,通常和zero_crossing算子配合使用获取零点
* 由于laplace算子对孤立算子响应更强烈,因此使用前需要使用滤波器进行平滑
laplace (Image, ImageLaplace, 'signed', 11, 'n_8_isotropic')
zero_crossing (ImageLaplace, RegionCrossing)
laplace (Image, ImageLaplace1, 'absolute', 3, 'n_4')laplace_of_gauss (Image, ImageLaplace2, 2)
zero_crossing (ImageLaplace2, RegionCrossing1)

*亚像素级边缘提取
*1.edges_sub_pix使用不同的滞后阈值处理以此进行对比
edges_sub_pix (GrayImage, Edges, 'lanser2', 0.5, 5, 50)
edges_sub_pix (GrayImage, Edges1, 'lanser2', 0.5, 25, 50)
edges_sub_pix (GrayImage, Edges1, 'lanser2', 0.5, 5, 25)
*从中可以看出滞后阈值的作用是低于低阈值的边缘一定不是边缘,高于高边缘的阈值一定是边缘,中间的需要进一步确定*2.edges_color_sub_pix提取多通道的亚像素边缘
*使用canny算子进行对亚像素提取
edges_color_sub_pix (Image, Edges2, 'canny', 0.5, 5, 50)
*使用sobel_fast算子进行对亚像素提取
edges_color_sub_pix (Image, Edges2, 'sobel_fast', 0.5, 5, 50)
edges_color_sub_pix (Image, Edges2, 'sobel_fast', 0.5, 45, 50)*3.lines_gauss算子
lines_gauss (GrayImage, Lines, 1.5, 1, 8, 'light', 'true', 'bar-shaped', 'true')
*轮廓处理
*上面都是提取轮廓,是处理图像的第一步,下面就是把提取到的轮廓进行处理,如何处理呢?无非就是分割、筛选、连接和拟合
*这里先把每个步骤的关键算子写出来,然后例子讲解
*1.轮廓分割:
*segment_contours_xld:可以把轮廓分割成线段、圆弧、椭圆等预定义的形状,分割得到的线段使用select_obj进行处理
*gen_polygons_xld、split_contours_xld算子组合使用和segment_contours_xld类似,但是两部的结果是只分割出线段
*使用两部法,将生成XLD多边形类型的轮廓*2.轮廓的筛选
* select_shape_xld:该算子和select_shape很类似,具有强大的选择功能,也可以使用select_contours_xld,该算子包含了更多的线性特征
*如果需要人机交互选择,可以通过select_xld_point算子,通过单击鼠标进行选择*3.轮廓的连接
*union_collinear_contours_xld:适用于共线的连接*union_straight_contours_xld :同方向的临近连接
*union_adjacent_contours_xld :端点临近的连接*union2_closed_contours_xld  闭合轮廓
*union2_closed_polygons_xld*4.拟合
*fit_circle_contour_xld
*fit_ellipse_contour_xld
*fit_line_contour_xld
*fit_rectangle2_contour_xld
read_image (Image, 'F:/机器视觉/Halcon机器视觉算法原理与编程实战/code/code/data/shapes')
rgb1_to_gray (Image, GrayImage2)
get_image_size (GrayImage2, Width, Height)*提取亚像素边缘,得到初始轮廓edges_sub_pix (GrayImage2, Edges3, 'canny', 2.5, 15, 40)*对轮廓进分割
segment_contours_xld (Edges3, ContoursSplit, 'lines_circles', 5, 4, 2)
select_contours_xld (ContoursSplit, SelectedContours, 'contour_length', 20, Width/2, -0.5, 0.5)
union_adjacent_contours_xld (SelectedContours, UnionContours, 20, 1, 'attr_keep')read_image (Image1, 'F:/机器视觉/Halcon机器视觉算法原理与编程实战/code/code/data/flower')
rgb1_to_gray (Image1, GrayImage1)threshold (GrayImage1, Region, 130, 255)
closing_circle (Region, RegionClosing, 20)
*获取前进目标的初始轮廓
gen_contour_region_xld (RegionClosing, Contours, 'border')fit_circle_contour_xld (Contours, '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)
dev_display (Contours)
dev_display (ContCircle)

halcon学习之边缘检测相关推荐

  1. halcon 图像差分_Halcon学习(10)边缘检测(一)

    Halcon 学习(十)边缘检测(一) 边缘检测的定义 :使用数学方法提取图像像元中具有亮度值(灰度)空间方向梯度大的边. 线特征的过程. 边缘 是指周围像素灰度有阶跃变化或屋顶等变化的那些像素的集合 ...

  2. Halcon 学习笔记八:颜色识别

    Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...

  3. 在OpenCV中基于深度学习的边缘检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 导读 分析了Canny的优劣,并给出 ...

  4. halcon例程讲解_跟我学机器视觉-HALCON学习例程中文详解-开关引脚测量

    跟我学机器视觉-HALCON学习例程中文详解-开关引脚测量 This example program demonstrates the basic usage of a measure object. ...

  5. 机器视觉-halcon学习笔记1

    德国的软件,傻瓜式安装,每月更新的licence:开发环境就配置好了. ps:软件可以直接在 halcon学习网上下载,18的版本就行. 这玩意有自带的脚本语言在halcon的开发环境IDE下写,写好 ...

  6. 随笔分类 - HALCON学习例程中文详解

    from: https://www.cnblogs.com/chita/category/563492.html 随笔分类 - HALCON学习例程中文详解 HALCON学习例程中文详解 跟我学机器视 ...

  7. Halcon学习笔记(三)---数据类型

    Halcon学习笔记(三)---数据类型 halcon只能在单独行进行注释,不能在语句后面进行注释. 1.tuple(元组,重数) 赋值符号":=" tuple算子: (1)变量定 ...

  8. Halcon学习笔记:select_points_object_model_3d(3D对象模型阀值分割)

    Halcon学习笔记:select_points_object_model_3d 3D对象模型阀值分割 This example program shows how to use the operat ...

  9. Halcon学习笔记:xyz_attrib_to_object_model_3d示例

    Halcon学习笔记:xyz_attrib_to_object_model_3d--从X.Y和Z图像中创建3D对象模型同时附加属性 xyz_attrib_to_object_model_3d.hdev ...

最新文章

  1. clodeblocks debug断点调试_Go 的 Debug 工具 delve 介绍
  2. 右键点“工作空间”窗口内空白部分,在弹出的菜单上勾选“Docking View / 停靠式”。然后双击程序窗口的窗棱,就是最上面那条蓝色边框
  3. SAP QM 激活01检验类型的前提下无Vendor CoA则不允许收货过账
  4. tomcat启动报错
  5. POJ2528 线段树+离散化+hash(成段更新)
  6. 3085 吃遍赴丝码(分治)
  7. clion卸载+clion连接docker编写trt程序
  8. copyToLocalFile报出空异常
  9. 对人工智能产品发展的几点认识
  10. 有消息推送服务器的手机厂家,又一家手机厂商完成统一推送服务适配
  11. 对饿了么app进行思维导图的分析
  12. android 修复工具,牛学长安卓手机修复工具(Reiboot for Android)
  13. 2.1微信小程序简介
  14. python怎么算一元二次方程_Python实现求解一元二次方程的方法示例
  15. 你若安好便是晴天_百度百科
  16. 遇到程序员不修改bug时怎么办?我教你
  17. 在php中调用接口以及编写接口
  18. PNP与NPN两种三极管使用方法
  19. java毕业设计阿博图书馆管理系统(附源码、数据库)
  20. position属性absolute与relative 详解 不为人知的(fixed)绝对定位(fixed相对于浏览器窗口=不动的div)

热门文章

  1. 用命令行批处理bat,设置代理服务器、DNS、网关、WINS等
  2. Windows server 2008 iis7 下配置PHP+MySql
  3. 条款23: 必须返回一个对象时不要试图返回一个引用
  4. 《Ray Tracing in One Weekend》——Chapter 4: Adding a sphere
  5. 抽象类继承 java_java继承抽象类
  6. 第1章 数据可视化概述
  7. 运算符——Python
  8. 数据结构:线性表理论题目集
  9. mybatis plug 只查id_MyBatis Generator的一个问题引发对插件的修改
  10. L2-007 家庭房产(并查集)