• Halcon算子edges_sub_pix (Operator)翻译整理详解 edges_sub_pix (Operator) Name edges_sub_pix — Extract sub-pixel precise edges using Deriche, Lanser, Shen, or Canny filters. Signature edges_sub_pix...
Halcon算子edges_sub_pix (Operator)翻译整理详解
edges_sub_pix (Operator) Name edges_sub_pix — Extract sub-pixel precise edges using Deriche, Lanser, Shen, or Canny filters. Signature edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )
Description edges_sub_pix detects step edges using recursively implemented filters (according to Deriche, Lanser and Shen) or the conventionally implemented “derivative of Gaussian” filter (using filter masks) proposed by Canny. Thus, the following edge operators are available: 描述 edge_sub_pix使用递归实现的滤波器（根据Deriche，Lanser和Shen）或Canny提出的传统实现的“高斯导数”滤波器（使用滤波器）检测台阶边缘。因此，可以使用以下边缘运算符：
‘deriche1’, ‘lanser1’, ‘deriche2’, ‘lanser2’, ‘shen’, ‘mshen’, ‘canny’, ‘sobel’, and ‘sobel_fast’
(parameter Filter).
The extracted edges are returned as sub-pixel precise XLD contours in Edges. For all edge operators except ‘sobel_fast’, the following attributes are defined for each edge point (see get_contour_attrib_xld for further details): 提取的边缘作为“边缘”中的亚像素精确XLD轮廓返回。对于除“ sobel_fast”以外的所有边缘运算符，为每个边缘点定义了以下属性（有关更多详细信息，请参见get_contour_attrib_xld）：
‘edge_direction’: Gives the direction of the edge (not of the XLD contour), calculated from the image gradients in horizontal and vertical direction. The angles [rad] are given with respect to the column axis of the image. 给出边缘的方向（不是XLD轮廓），该方向是根据水平和垂直方向上的图像梯度计算得出的。相对于图像的列轴给出角度[rad]。
‘angle’: Direction of the nousing filter masksrmal vectors to the contour in radians (oriented such that the normal vectors point to the right side of the contour as the contour is traversed from start to end point; the angles are given with respect to the row axis of the image). 法向矢量到轮廓的方向（以弧度为单位）（方向应使法向矢量在从起点到终点遍历轮廓时指向轮廓的右侧；相对于图像的行轴给出角度） 。
‘response’: Edge amplitude (gradient magnitude). 边缘幅度（梯度幅度）。
The “filter width” (i.e., the amount of smoothing) can be chosen arbitrarily for all edge operators except ‘sobel’ and ‘sobel_fast’, and can be estimated by calling info_edges for concrete values of the parameter Alpha. For all filters (Deriche, Lanser and Shen filters), the “filter width” decreases for increasing Alpha. The only exception is the Canny filter, where an increasing Alpha also causes an increase of the “filter width”. “Wide” filters exhibit a larger invariance to noise, but also a decreased ability to detect small details. Non-recursive filters, such as the Canny filter, are realized using filter masks, and thus the execution time increases for increasing filter width. In contrast, the execution time for recursive filters does not depend on the filter width. Thus, arbitrary filter widths are possible using the Deriche, Lanser and Shen filters without increasing the run time of the operator. The resulting advantage in speed compared to the Canny operator naturally increases for larger filter widths. As border treatment, the recursive operators assume that the images to be zero outside of the image, while the Canny operator repeats the gray value at the image’s border. The signal-noise-ratio of the filters is comparable for the following choices of Alpha: 对于“ sobel”和“ sobel_fast”以外的所有边缘运算符，可以任意选择“滤波器宽度”（即平滑程度），并且可以通过调用info_edges来估计参数Alpha的具体值。对于所有滤波器（Deriche，Lanser和Shen滤波器），“滤波器宽度”都会减小，以增加Alpha。唯一的例外是Canny滤波器，其中Alpha的增加也会导致“滤波器宽度”的增加。 “宽”滤波器对噪声的不变性较大，但检测小细节的能力也会下降。非递归滤波器（例如Canny滤波器）是使用滤波器掩码实现的，因此执行时间会增加以增加滤波器宽度。相反，递归滤波器的执行时间不取决于滤波器宽度。因此，使用Deriche，Lanser和Shen滤波器可以实现任意滤波器宽度，而不会增加算子的运行时间。对于更大的滤波器宽度，与Canny运算符相比，速度方面的优势自然会增加。作为边界处理，递归运算符假定图像在图像外部为零，而Canny运算符在图像边界重复灰度值。滤波器的信噪比可与以下Alpha选择相媲美：
 Alpha('lanser1')   = Alpha('deriche1'),
Alpha('deriche2')  = Alpha('deriche1') / 2,
Alpha('lanser2')   = Alpha('deriche2'),
Alpha('shen')      = Alpha('deriche1') / 2,
Alpha('mshen')     = Alpha('shen'),
Alpha('canny')     = 1.77 / Alpha('deriche1').

The originally proposed recursive filters (‘deriche1’, ‘deriche2’, ‘shen’) return a biased estimate of the amplitude of diagonal edges. This bias is removed in the corresponding modified version of the operators (‘lanser1’, ‘lanser2’ and ‘mshen’), while maintaining the same execution speed. 最初提出的递归滤波器（“ deriche1”，“ deriche2”，“ shen”）返回对角线边缘幅度的偏差估计。在算子的相应修改版本（“ lanser1”，“ lanser2”和“ mshen”）中消除了这种偏差，同时保持了相同的执行速度。
For relatively small filter widths (11 x 11), i.e., for Alpha (‘lanser2’ = 0.5), all filters yield similar results. Only for “wider” filters differences begin to appear: the Shen filters begin to yield qualitatively inferior results. However, they are the fastest of the implemented operators that supprt arbitrary mask sizes, closely followed by the Deriche operators. The two Sobel filters, which use a fixed mask size of (3 x 3), are faster than the other filters. Of these two, the filter ‘sobel_fast’ is significantly faster than ‘sobel’. 对于相对较小的滤波器宽度（11 x 11），即对于Alpha（‘lanser2’= 0.5），所有滤波器都会产生相似的结果。仅对于“更宽”的滤波器，差异开始出现：Shen滤波器开始产生质量较差的结果。但是，它们是支持任意掩码大小的已实现算子中最快的，Deriche算子紧随其后。使用固定掩码大小（3 x 3）的两个Sobel滤波器比其他滤波器更快。在这两个滤波器中，滤波器“ sobel_fast”明显比“ sobel”更快。
edges_sub_pix links the edge points into edges by using an algorithm similar to a hysteresis threshold operation, which is also used in lines_gauss. Points with an amplitude larger than High are immediately accepted as belonging to an edge, while points with an amplitude smaller than Low are rejected. All other points are accepted as edges if they are connected to accepted edge points (see also lines_gauss and hysteresis_threshold). edge_sub_pix使用类似于滞后阈值运算的算法将边缘点链接到边缘，该算法也用于lines_gauss。幅度大于高的点将被立即视为属于边，而幅度小于低的点将被拒绝。如果将所有其他点连接到可接受的边缘点，则将所有其他点视为边缘（另请参见lines_gauss和hysteresis_threshold）。
Because edge extractors are often unable to extract certain junctions, a mode that tries to extract these missing junctions by different means can be selected by appending ‘_junctions’ to the values of Filter that are described above. This mode is analogous to the mode for completing junctions that is available in lines_gauss. 因为边缘提取器通常无法提取某些结点，所以可以通过将’_junctions’附加到上述Filter的值中来选择尝试通过不同方式提取这些缺失结点的模式。此模式类似于lines_gauss中可用的完成结点的模式。
The edge operator ‘sobel_fast’ has the same semantics as all the other edge operators. Internally, however, it is based on significantly simplified variants of the individual processing steps (hysteresis thresholding, edge point linking, and extraction of the subpixel edge positions). Therefore, ‘sobel_fast’ in some cases may return slightly less accurate edge positions and may select different edge parts. 边缘运算符’sobel_fast’具有与所有其他边缘运算符相同的语义。但是，在内部，它基于各个处理步骤的显著简化的变体（滞后阈值，边缘点链接和亚像素边缘位置的提取）。因此，“ sobel_fast”在某些情况下可能返回的精度稍差一些，并且可能选择不同的边缘部分。
edges_sub_pix can be executed on OpenCL devices for the filter types ‘canny’ and ‘sobel_fast’. This will require up to widthheight29 bytes of pinned memory. Since allocating memory is an expensive operation, it would make sense to set the pinne 可以在OpenCL设备上为“ canny”和“ sobel_fast”滤波器类型执行edges_sub_pix。这将需要最多宽高 29个字节的固定内存。由于分配内存是一项昂贵的操作，因此设置pinne
展开全文
• 或者使用传统滤波如“高斯导数”滤波器(使用滤波器掩模)来检测边缘，所以edges_sub_pix的滤波器（参数filter的选项）可以有以下几种： 使用以上方法后，可以通过get_contour_attrib_xld来获取亚像素边缘的属性，函数...


利用Deriche、Lanser、Shen和Canny滤波器提取亚像素精度边缘；
亚像素：
面阵相机的成像面的最小单位是像素，例如某芯片的像素间距为5.2微米，在相机机拍摄时，将物理世界中连续的图像进行了离散化处理；到成像面上每一个像素点只代表其附近的颜色，至于“附近”到什么程度？就很困难解释。两个像素之间有5.2微米的距离，在宏观上可以看作是连在一起的，但是在微观上，它们之间还有无限的更小的东西存在，这个更小的东西我们称它为“亚像素”；实际上“亚像素”应该是存在的，只是硬件上没有个细微的传感器把它检测出来。于是软件上把它近似地计算出来。
亚像素的精度：
亚像素精度是指相邻两像素之间细分情况，输入值通常为二分之一，三分之一或四分之一。这意味着每个像素将被分为更小的单元从而对这些更小的单元实施插值算法。例如，如果选择四分之一，就相当于每个像素在横向和纵向上都被当作四个像素来计算。
亚像素的应用：
在机器视觉中，亚像素是一个比较常见的概念，在许多函数中，都可以选择是否使用亚像素，而在测量中，如位置、直线、圆等，都会出现亚像素。如测量某个圆的直径为100.12像素。这个后面的0.12就是亚像素。因为从像素中可以理解到，工业相机最小物理单元其实就是像素，但是在机器视觉测量中还是会得到小数点后的值，这个就是通过软件计算得到的，其实在真实情况下，并不一定是十分准确的。这个值通常在灰度图中会更容易反应出来，而在二值图像中，因为值只有0，1。因此很多函数并不一定会计算亚像素。

边缘检测定义：
边缘检测是图形图像处理、计算机视觉和机器视觉中的一个基本工具，通常用于特征提取和特征检测，旨在检测一张数字图像中有明显变化的边缘或者不连续的区域，在一维空间中，类似的操作被称作步长检测（step detection）。边缘是一幅图像中不同屈原之间的边界线，通常一个边缘图像是一个二值图像。边缘检测的目的是捕捉亮度急剧变化的区域，而这些区域通常是我们关注的。在一幅图像中两度不连续的区域通常是以下几项之一：
（1）图像深度不连续处
（2）图像（梯度）朝向不连续处
（3）图像光照（强度）不连续处
（4）纹理变化处
理想情况下，对所给图像应用边缘检测器可以得到一系列连续的曲线，用于表示对象的边界。因此应用边缘检测算法所得到的结果将会大大减少图像数据量，从而过滤掉很多我们不需要的信息，留下图像的重要结构，所要处理的工作即被大大简化。然而，从普通图片上提取的边缘往往被图像的分割所破坏，也就是说，检测到的曲线通常不是连续的，有一些边缘曲线段开，就会丢失边缘线段，而且会出现一些我们不感兴趣的边缘。这就需要边缘检测算法的准确性。
如下图所示图片：

边缘检测算法基本都是基于微分的数学基础之上的。一般都是先对图像进行滤波处理，然后再进行阈值分割。由于一阶微分只需要使用一个滤波器就可以满足要求，因此一般使用一阶微分来读取边缘的。由于有的时候剖面上噪声太多，影响取图质量，所以要对剖面图的图像进行滤波处理。这里就涉及到两种卷积运算：一种是用于图像平滑处理的滤波器卷积计算；另一种则是用于对图像进行求导的滤波器卷积计算。
由于，所以我们一般只对滤波器算子进行微分再求卷积来得到平滑后的图像微分，从而获取边缘。

边缘滤波器选取有三个准则：
一是边缘滤波器产生的输出信噪比要最大化，这样可以对一个边缘点的错检和漏检可能性要低；
二是提取出来的位置方差要最小化，这样提取出来的边缘更靠近真正的边缘；
三是提取出来的边缘位置之间的距离要最大化，这样边缘检测器对每个真正的边缘只返回唯一的一个边缘，可以避免多重响应。

参数翻译：输入图像、输入边缘、滤波器、滤波参数、滞后性阈值的下限值、滞后性阈值的上限值

滞后性：简单的说就是延迟，落后；一个现象与另一密切相关的现象相对而言的落后迟延，尤其指物理上的果没有及时跟着因而出现；

滞后性阈值的描述：
使用边缘滤波，得到的边缘都是大于一个像素的轮廓，因此要对所得到的图像进行骨架化，从而得到比较清晰的边缘轮廓。有时候还需要进行非最大抑制处理
这样，经过先对边缘幅度进行阈值分割，然后对分割出的区域进行骨架化处理，再进行非最大抑制处理，一般就可得到清晰的边缘。但是，有时候我们选择高的阈值以保证只将相关边缘选出时，边缘通常被割裂成诺干段；另一方面，如果选择低的阈值以保证边缘不会断裂成一段一段时，我们最终的分割结果中又会包含很多不相关边缘。针对这种情况，Canny提出来一种特殊的阈值分割算法来分割边缘：滞后阈值分割。
滞后阈值分割使用两个阈值----高阈值和低阈值。边缘幅度比高阈值大的那些点立即作为安全边缘点被接受。边缘幅度比低阈值小的那些点被立即剔除。边缘幅度在高阈值和低阈值之间的那些点按如下原则处理：只有在这些点能按某一路径和安全边缘点相连时，他们才作为边缘点被接受。组成这一路径的所有点的边缘幅度都比低阈值要大。我们也能把这个过程理解为，首先边缘幅度大于高阈值的所有边缘点，然后在边缘幅度大于低阈值的情况下尽可能延长边缘。

描述：
edges_sub_pix可以使用递归滤波器，如Deriche、Lanser和Shen；或者使用传统滤波如“高斯导数”滤波器(使用滤波器掩模)来检测边缘，所以edges_sub_pix的滤波器（参数filter的选项）可以有以下几种：

使用以上方法后，可以通过get_contour_attrib_xld来获取亚像素边缘的属性，函数定义如下：

对应参数翻译：输入轮廓、需要获取的属性、属性值，需要获取的属性可以有以下几种：

需要注意的是，不是每个滤波器都有以上的所有属性：
除‘sobel_fast’外，都有的属性只有三个：
'angle' 角度
'edge_direction' 方向
'response' 振幅

展开全文
• 滤波器比较： Deriche, Lanser and Shen “滤波宽度”随着Alpha的增加而减小，属于递归滤波器，执行时间不随滤波宽度的变化而变化； Canny “滤波宽度”随着Alpha的增加而增加， 是一维边缘滤波器，即高斯滤波器的...

滤波器比较：
Deriche, Lanser and Shen  “滤波宽度”随着Alpha的增加而减小，属于递归滤波器，执行时间不随滤波宽度的变化而变化；
Canny  “滤波宽度”随着Alpha的增加而增加，  是一维边缘滤波器，即高斯滤波器的一阶倒数，主要通过掩膜来实现的，所以随着滤波宽度的增加，执行时间也会增加；
在滤波宽度非常大的时候，递归滤波的执行时间会远远小于Canny高斯滤波器；
增加滤波宽度，虽然对噪声敏感，但也降低了检测小细节的能力。

Alpha值的选择可以利用官方文档给出的公式计算得到如下图：


展开全文
• halcon edges_sub_pix算子

万次阅读 2018-07-20 15:03:57
介绍一下Canny算子：  使用累计直方图计算两个阀值。凡是大于高阀值的一定是边缘； 凡是小于低阀值的一定不是边缘；如果检测结果大于低阀值但又小于高阀值，那就要看这个像素...edges_sub_pix(Image:Edges:Filter...
转载http://blog.51cto.com/juwen/133003
介绍一下Canny算子：  使用累计直方图计算两个阀值。凡是大于高阀值的一定是边缘； 凡是小于低阀值的一定不是边缘；如果检测结果大于低阀值但又小于高阀值，那就要看这个像素的邻接像素中有没有超过高阀值的边缘像素：如果有的话那么它就是边缘了，否则他就不是边缘；
edges_sub_pix(Image:Edges:Filter,Alpha,Low,High:)

提供了这个方法。

alpha：参数指定值越小，平滑越强大，会减少边缘细节。(canny刚好相反，值越大，边缘细节越少)。

Low：低阀值
High：高阀值

例如：
edges_sub_pix(Image,Edges,'canny',0.5,20,40)
展开全文
•  3、 edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )*提取亚像素精密边缘轮廓  参数： Low和High   使用灰度直方图计算两个阀值,凡是像素灰度值大于高阀值的一定是轮廓； 凡是小于低阀值的...
• * 此示例程序显示了如何使用edges_color以及如何使用只能从彩色图像 中提取一些边缘的图像来使用edges_color和edges_image的输出之间的 差异。 dev_update_off () read_image (Image, 'olympic_stadium') get_image...
• HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包，拥有应用广泛的机器视觉集成开发环境，在欧洲以及日本的工业界已经是公认具有最佳效能的Machine Vision软件。
• halcon学习之边缘检测

千次阅读 2020-05-07 21:51:03
zero_crossing (ImageLaplace2, RegionCrossing1) *亚像素级边缘提取 *1.edges_sub_pix使用不同的滞后阈值处理以此进行对比 edges_sub_pix (GrayImage, Edges, 'lanser2', 0.5, 5, 50) edges_sub_pix (GrayImage, ...
• close_edges( Edges, EdgeImage: RegionResult: MinAmplitude:) close_edges_length( Edges, Gradient: ClosedEdges: MinAmplitude, MaxGapLength:)使用边缘高度图像关闭边缘间隙。输出的区域包含杯关闭的区域。...
• sobel_amp( Image: EdgeAmplitude: FilterType, Size:)根据图像的一次导数计算图像的...close_edges( Edges, EdgeImage: RegionResult: MinAmplitude:) close_edges_length( Edges, Gradient: ClosedEdges: MinAmp...
• 提示错误，not enough memory available
• Edge detection operator return subpixel level edge position.
• threshold_sub_pix (Image, Edges, 128) segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 3) count_obj (ContoursSplit, Number) dev_display (Image) dev_set_draw ('margin') dev_set_color ...
• edges_sub_pix  ( Image : Edges : Filter, Alpha, Low, High : )  精确边缘提取的亚像素（灰度图像） edges_color  ( Image : ImaAmp, ImaDir : Filter, Alpha, NMS, Low, High : )  根据颜色进行边缘提取 ...
• 【Halcon】2D测量之三

千次阅读 2018-03-23 14:10:17
例如edges_sub_pixedges_color_sub_pix、zero_crossing_sub_pix。 检测图中的线以及其宽度 lines_gauss, lines_facet , lines_color， edges_sub_pix.  亚 像素精度方法通常比像素精度方法慢。为了加快亚像素精度...
• edges_sub_pix (ImageReduced, Edges, 'canny', 2, 20, 60) 利用edges_sub_pix算子提取XLD轮廓，边缘幅度比高阈值大的那些点立即作为安全边缘点被接受，也就是大于60的，边缘幅度比低阈值小的那些点被立即剔除，也...
• 最近实现了EdgesSubpix 算法 发现它还有个彩色版本 于是就用OpenCV实现了它的Canny模式 以下为它的C++实现 void DerivateGauss(Mat &Input,Mat &Output,double Sigma); void NonMaxSuppresion();...
• 8. edges_sub_pix  功能：使用Deriche、_Lanser、Shen或者_Canny滤波器提取子像素精确边缘。 9. frei_amp   功能：使用Frei-Chen算子检测边缘（幅值）。 10. frei_dir   功能：使用Frei-Chen算子检测边缘（幅值和...
• edges_sub_pix (Image:Edges:Filter,Alpha,Low,High:)   提供了这个方法。   alpha：参数指定值越小，平滑越强大，会减少边缘细节。(canny刚好相反，值越大，边缘细节越少)。   Low：低阀值 High：...
• [Halcon--拟合篇] 拟合求距离

千次阅读 2019-07-09 18:57:03
一、拟合流程： (一) 采集图像 (二) 图像预处理： 一般是去噪或抠图（blob分析抠图或手绘ROI区域抠图）两方面 ...使用算子edges_sub_pix进行亚像素的边缘提取最为普遍。其用到的滤波器有Deriche, Lanser, Shen...
• 图像处理(7) : 边缘检测

多人点赞 热门讨论 2021-05-26 16:11:33
2.1 edges_sub_pix算子 最常用的提取亚像素轮廓的算子是edges_sub_pix算子，该算子同样提供了大量的提取方法，只需要在Filter参数中设置方法的名字，就可以完成边缘的提取。该算子的输入是灰度图像，输出是XLD轮廓...
• 1.Halcon测量有两种方式， 一种是对点云模型处理。对点云(x,y,z）做连通域分割，或使用数组排序处理的方式。 对深度图X,Y,Z的处理。本文重点讲解将深度图拆分成X,Y,Z视差图。将图像从三维转换成二维，以二维...edges_
• 目录close_edgesclose_edges_lengthderivate_gaussdiff_of_gaussedges_coloredges_color_sub_pixedges_imageedges_sub_pixfrei_ampfrei_dirhighpass_imageinfo_edgeskirsch_ampkirsch_dirlaplacelaplace_of_...
• edges_sub_pix (ImageReduced, Edges, 'canny', 2, 20, 60) segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 3) count_obj (ContoursSplit, Number) dev_display (Image) dev_set_draw ('...
• Halcon 常用算子使用场合

千次阅读 2019-01-18 22:54:16
sub_image 功能：使两个图像相减。 5.2 Bit 1. bit_and 功能：输入图像的所有像素的逐位与。 2. bit_lshift 功能：图像的所有像素的左移。 3. bit_mask 功能：使用位掩码的每个像素的逻辑与。 4. bit_not 功能：对...
• 文章目录10.1 像素级边缘提取10.1.1 经典的边缘检测算子10.1.2 边缘检测的一般流程10.1.3 sobel_amp算子10.1.4 edges_image算子10.1.5 其它滤波器10.2 亚像素级边缘提取10.2.1 edges_sub_pix 算子10.2.2 edges_color...
• *如果是畸变图,需要先校正 read_image (Image, 'D:/1.bmp') get_image_size (Image, Width...edges_image(Image,Amp,Dir,'lanser2',0.5,'none',-1,-1) hysteresis_threshold(Amp,Margin,20,30,30) *彩色转灰度图 co...
• Halcon一些功能算子

千次阅读 2018-04-17 08:48:47
sub_image 功能：使两个图像相减。 5.2 Bit 1. bit_and 功能：输入图像的所有像素的逐位与。 2. bit_lshift 功能：图像的所有像素的左移。 3. bit_mask 功能：使用位掩码的每个像素的逻辑与。 4. bit_not ...

...