Halcon提取边缘线段lines_gauss 算子

2024-09-02 10:52

本文主要是介绍Halcon提取边缘线段lines_gauss 算子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Halcon提取边缘线段lines_gauss 算子

edges_color_sub_pix和edges_sub_pix两个算子使用边缘滤波器进行边缘检测。还有一个常用的算子lines_gauss算子,也可以用于提取边缘线段,它的鲁棒性非常好,提取出的线段类型是亚像素精度的XLD轮廓。其原型如下:

lines gauss(Image : Lines : Sigma, Low, High, LightDark, ExtractWidth,  LineModel, CompleteJunctions :)

其各参数含义如下。
参数1:Image为输入的单通道图像。
参数2:Lines 为输出的一组亚像素精度的XLD轮廓线条。
参数3:Sigma 为输入的高斯平滑的值。较大的平滑值会使图像平滑的力度更大,但过度平滑也可能导致提取的线条位置有偏差。默认为1.5。在需要提取线条宽度时,Sigma 的值应根据要提取的线条宽度进行调节,最小值应不小于w13(w为线条宽度,即线条直径的一半)。例如,对于宽度为4的线条,Sigma值应不小于2.3。
参数4和5:Low和High 为输入参数,分别表示滞后阈值的低阈值和高阈值。高阈值越低,边缘线条的细节会越丰富。如果Sigma选得比较大,闽值就应选择较低的高阈值和较高的低阈值。因为选择的Sigma越大,二阶导数就越小。低阈值和高阈值也可以根据要提取的线的相应灰度对比度和Sigma参数值进行计算。
参数6:LightDark为输入参数,表示提取较亮的线条还是较暗的线条。默认为light,即提取较亮线条。
参数7:ExtractWidth为输入参数,表示是否需要提取线条的宽度。默认为true,即提取每条线段的宽度值。
参数8:LineModel为输入参数,表示调整线条位置和宽度的线段模型。可选的有 bar-shaped(条型)、gaussian(高斯型)、parabolic(抛物线型)。默认为条型,大多数应用场景都可以选择该选项。如果是背光比较强的情况,可以考虑另外两种模型。其中,当图像中的线条比较清晰明锐时,可以选择抛物线型;如果不是特别清晰,可以选择高斯型。注意,LineModel 仅在ExtractWidth为true时才有意义。
参数9:CompleteJunctions为输入参数,表示是否添加连接,用于边缘线段不连续的情况,默认为true。因为某些非连通线段无法通过边缘提取器进行提取,所以这里设为true,即可使用其他方式尝试对非连续部分进行连接。注意,如果线条的宽度过大,建议先对图像进行一定比例的缩小,以减少过度计算消耗的时间。
图(a)为lines_gauss算子输入的单通道图像,图(b)为使用lines_gauss算子进行边缘检测的结果。这里选用了bar-shaped进行边缘滤波处理,低阈值为1,高阈值为8。
在这里插入图片描述
实现代码如下:

read_image (Image,'data/flower')
rgbl_to_gray (Image, GrayImage)
dev_open_window (0, 512, 512, 512, 'black', WindowHandle1)
*进行边缘检测
lines_gauss(GrayImage,Lines,1.5,1,8,'light','true','bar-shaped','true')
*在窗口中将轮廓线条绘制出来
dev_set_color ('red')
dev_clear_window ()
dev_display (Lines)

本例中使用lines_gauss 算子进行边缘检测。需要注意的是,lines_gauss算子的响应速度不算快,如果边缘的高阈值设置得偏低,会导致需要计算的边缘增多,可能会有明显的卡顿。
也有一个与lines_gauss算子类似的、针对彩色多通道图像的算子,即lines_color算子。该算子的参数与lines_gauss算子相似,用于提取彩色的边缘线条。值得一提的是,如果该算子的ExtractWidth参数设为false,那么返回的线条中将会包含其他属性,如线条的角度、二阶导数的梯度等。

这篇关于Halcon提取边缘线段lines_gauss 算子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129759

相关文章

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

poj 1127 线段相交的判定

题意: 有n根木棍,每根的端点坐标分别是 px, py, qx, qy。 判断每对木棍是否相连,当他们之间有公共点时,就认为他们相连。 并且通过相连的木棍相连的木棍也是相连的。 解析: 线段相交的判定。 首先,模板中的线段相交是不判端点的,所以要加一个端点在直线上的判定; 然后,端点在直线上的判定这个函数是不判定两个端点是同一个端点的情况的,所以要加是否端点相等的判断。 最后