QQ登录

只需一步,快速开始

工业视觉halcon边缘滤波器函数介绍

[ 复制链接 ]
0.frei_amp(Image : ImageEdgeAmp : : )
frei_amp计算图像数据一阶导数的近似值,并用作边缘检测器。过滤器是基于以下过滤器掩码:
  A =
         1       sqrt(2)        1
         0          0           0
        -1      -sqrt(2)       -1

  B =
         1          0          -1
       sqrt(2)      0       -sqrt(2)
         1          0          -1
结果图像包含掩码A和掩码B的最大振幅。




1.frei_dir(Image : ImageEdgeAmp, ImageEdgeDir : : )
frei_dir计算图像数据一阶导数的近似值,并用作边缘检测器。过滤器是基于以下过滤器掩码:

工业视觉halcon边缘滤波器函数介绍8

工业视觉halcon边缘滤波器函数介绍8


结果图像包含掩模A和掩模b的最大振幅。
边缘方向在ImageEdgeDir中返回,并以2度的步骤存储,即,在边缘方向图像中,一个在数学上为正且相对于水平轴的x度的边缘方向存储为x / 2。
此外,还考虑了光强变化的方向。[ExEy]表示图像梯度。然后返回如下边缘方向r/2:

工业视觉halcon边缘滤波器函数介绍7

工业视觉halcon边缘滤波器函数介绍7

边缘幅值为0的点指定边缘方向255(未定义方向)。


例程:
read_image(Image,'fabrik')
frei_amp(Image,Frei_amp)
threshold(Frei_amp,Edges,128,255)
frei_dir(Image,Frei_dirA,Frei_dirD)
threshold(Frei_dirA,Res,128,255)


2.kirsch_amp(Image : ImageEdgeAmp : : )
kirsch_amp计算图像数据一阶导数的近似值,并用作边缘检测器。
过滤器是基于以下过滤器掩码:
     -3  -3   5       -3   5   5      5   5   5       5   5  -3
     -3   0   5       -3   0   5     -3   0  -3       5   0  -3
     -3  -3   5       -3  -3  -3     -3  -3  -3      -3  -3  -3


      5  -3  -3       -3  -3  -3     -3  -3  -3      -3  -3  -3
      5   0  -3        5   0  -3     -3   0  -3      -3   0   5
      5  -3  -3        5   5  -3      5   5   5      -3   5   5
结果图像包含所有掩码的最大振幅。
例程:
read_image(Image,'fabrik')
kirsch_amp(Image,Kirsch_amp)
threshold(Kirsch_amp,Edges,128,255)

3.kirsch_dir(Image : ImageEdgeAmp, ImageEdgeDir : : )
kirsch_dir计算图像数据一阶导数的近似值,并用作边缘检测器。
过滤器是基于以下过滤器掩码:
      -3  -3   5       -3   5   5      5   5   5       5   5  -3
      -3   0   5       -3   0   5     -3   0  -3       5   0  -3
      -3  -3   5       -3  -3  -3     -3  -3  -3      -3  -3  -3

       5  -3  -3       -3  -3  -3     -3  -3  -3      -3  -3  -3
       5   0  -3        5   0  -3     -3   0  -3      -3   0   5
       5  -3  -3        5   5  -3      5   5   5      -3   5   5
结果图像包含所有掩码的最大振幅。边缘方向在ImageEdgeDir中返回,并存储为x / 2。它们对应于产生最大响应的掩模的方向。


例程:
read_image(Image,'fabrik')
kirsch_dir(Image,Kirsch_dirA,Kirsch_dirD)
threshold(Kirsch_dirA,Res,128,255)

4.prewitt_amp(Image : ImageEdgeAmp : : )
prewitt_amp计算图像数据一阶导数的近似值,并用作边缘检测器。
过滤器是基于以下过滤器掩码:
  A =
        1       1       1
        0       0       0
       -1      -1      -1


  B =
        1       0      -1
        1       0      -1
        1       0      -1

例程:
read_image(Image,'fabrik')
prewitt_amp(Image,Prewitt)
threshold(Prewitt,Edges,128,255)

5.prewitt_dir(Image : ImageEdgeAmp, ImageEdgeDir : : )

prewitt_dir计算图像数据的一阶导数的近似值,并用作边缘检测器。
过滤器是基于以下过滤器掩码:
  A =
        1       1       1
        0       0       0
       -1      -1      -1

  B =
        1       0      -1
        1       0      -1
        1       0      -1
结果图像包含掩模A和掩模b的最大振幅。
边缘方向在ImageEdgeDir中返回,并以2度的步骤存储,
即,在边缘方向图像中,一个x度的边缘方向在数学上是正的,且相对于水平轴为x / 2。
此外,还考虑了光强变化的方向。设[Ex,Ey]表示图像梯度。然后返回如下边缘方向r/2:

工业视觉halcon边缘滤波器函数介绍3

工业视觉halcon边缘滤波器函数介绍3



边缘幅值为0的点指定边缘方向255(未定义方向)。
例程:
read_image(Image,'fabrik')
prewitt_dir(Image,PrewittA,PrewittD)
threshold(PrewittA,Edges,128,255)


6.robinson_amp(Image : ImageEdgeAmp : : )
robinson_amp计算图像数据一阶导数的近似值,并用作边缘检测器。
在robinson_amp中,最初提出的8个3x3滤波器掩模中的4个与图像进行卷积。
其他四个掩码是通过乘以-1得到的。所有掩码只包含值0、1、-1、2、-2。
     -1   0   1                2   1   0
     -2   0   2                1   0  -1
     -1   0   1                0  -1  -2

      0   1   2                1   2   1
     -1   0   1                0   0   0
     -2  -1   0               -1  -2  -1
例程:
read_image(Image,'fabrik')
robinson_amp(Image,Robinson_amp)
threshold(Robinson_amp,Edges,128,255)

7.robinson_dir(Image : ImageEdgeAmp, ImageEdgeDir : : )
robinson_dir计算图像数据一阶导数的近似值,并用作边缘检测器。
在robinson_amp中,最初提出的8个3x3滤波器掩模中的4个与图像进行卷积。
其他四个掩码是通过乘以-1得到的。所有掩码只包含值0、1、-1、2、-2。
     -1   0   1                2   1   0
     -2   0   2                1   0  -1
     -1   0   1                0  -1  -2

      0   1   2                1   2   1
     -1   0   1                0   0   0
     -2  -1   0               -1  -2  -1
结果图像包含所有掩码的最大振幅。
边缘方向在ImageEdgeDir中返回,并存储为x / 2。
它们对应于产生最大响应的掩模的方向。
例程:
read_image(Image,'fabrik')
robinson_dir(Image,Robinson_dirA,Robinson_dirD)
threshold(Robinson_dirA,Res,128,255)

8.sobel_amp(Image : EdgeAmplitude : FilterType, Size : )
sobel_amp计算图像的一阶导数,并用作边缘检测器。
过滤器是基于以下过滤器掩码:
  A =
           1       2       1
           0       0       0
          -1      -2      -1

  B =
           1       0      -1
           2       0      -2
           1       0      -1

根据所选的筛选器类型,这些掩码的使用方式不同。(在下文中,a和b表示对一个特定像素的图像与a和b进行卷积的结果。)

工业视觉halcon边缘滤波器函数介绍2

工业视觉halcon边缘滤波器函数介绍2







这里,对于垂直最大值(掩模a)和水平最大值(掩模B), thin(x)分别等于x,否则为0。
因此,对于“thin_sum_abs”和“thin_max_abs”,渐变图像会变薄。
对于过滤器类型“x”和“y”,如果输入图像类型为byte,则输出图像类型为int1,否则为int2。
对于大小为3x3的Sobel运算符,直接应用相应的滤波器a和B,而对于较大的滤波器大小,
则首先使用高斯滤波器(gauss_image)或大小为Size-2的二项式滤波器(binomial_filter)对输入图像进行平滑处理。
以上FilterType值选择高斯滤波器。
这里必须使用Size = 5、7、9、11或13。
二项式过滤器是通过将'_binomial'附加到上述FilterType值来选择的。
在这里,大小可以选择在5到39之间。
此外,可以通过传递两个大小值来选择不同数量的平滑列和行方向。
这里,大小的第一个值对应于二项式滤波器的掩模宽度(在列方向平滑),第二个值对应于掩模高度(在行方向平滑)。


二项滤波器只能用于字节、uint2和实数类型的图像。由于平滑降低了边缘振幅,在这种情况下,边缘振幅要乘以2,以防止信息丢失。
因此,
     sobel_amp(I,E,FilterType,S)

对于 Size > 3等同于
     scale_image(I,F,2,0)
     gauss_image(F,G,S-2)
     sobel_amp(G,E,FilterType,3)

     scale_image(I,F,2,0)
     binomial_filter(F,G,S[0]-2,S[1]-2)
     sobel_amp(G,E,FilterType,3).



例程:
read_image(Image,'fabrik')
sobel_amp(Image,Amp,'sum_abs',3)
threshold(Amp,Edg,128,255)

9.sobel_dir(Image : EdgeAmplitude, EdgeDirection : FilterType, Size : )
sobel_dir计算图像的一阶导数,并用作边缘检测器。过滤器是基于以下过滤器掩码:

  A =
           1       2       1
           0       0       0
          -1      -2      -1

  B =
           1       0      -1
           2       0      -2
           1       0      -1
根据所选的筛选器类型,这些遮罩的使用方式不同。(在下文中,a和b表示对一个特定像素的图像与a和b进行卷积的结果。)

工业视觉halcon边缘滤波器函数介绍1

工业视觉halcon边缘滤波器函数介绍1

例程:
read_image(Image,'fabrik')
sobel_dir(Image,Amp,Dir,'sum_abs',3)
threshold(Amp,Edg,128,255)







10.highpass_image(Image : Highpass : Width, Height : )
highpass_image通过使用下面矩阵的线性滤波器提取图像中的高频成分(对于7x5矩阵):
     1       1       1       1       1       1       1
     1       1       1       1       1       1       1
     1       1       1      -35      1       1       1
     1       1       1       1       1       1       1
     1       1       1       1       1       1       1
这相当于应用一个均值操作符(mean_image),然后减去原始灰度值。
值128被添加到结果中,即,128为零交叉。


这个滤波器强调高频分量(边角)。截止频率由滤波器矩阵的大小(高x宽)决定:矩阵越大,截止频率越小。

在图像边框处,像素的灰度值被镜像。

如果流量过大或过低,则剪切灰度值(255和0.)。


例程:
read_image (Image, 'particle')
highpass_image (Image, Highpass, 21, 21)
threshold (Highpass, Region, 132, 255)
opening_circle (Region, RegionOpening, 1.5)
dev_display (Image)
dev_display (RegionOpening)

11.info_edges( : : Filter, Mode, Alpha : Size, Coeffs)
info_edges返回edges_image中使用的任何过滤器的宽度估计数。
为此,对滤波器的连续脉冲响应进行采样,直到第一个滤波器系数小于最大系数的5%。
Alpha是过滤器参数(参见edges_image)。支持7个边缘算子(参数Filter):
'deriche1', 'lanser1', 'deriche2', 'lanser2', 'shen', 'mshen' and 'canny'.


参数Mode(“edge”/“smooth”)用于确定是否要采样对应的edge或smooth操作符。
Canny算子(使用高斯平滑)使用传统的滤波器掩模实现,而所有其他滤波器都是递归实现的。
因此,对于Canny滤波器,除滤波器宽度外,一维脉冲响应系数f(n)width>=0以Coeffs的形式返回。

例程:
read_image(Image,'fabrik')
info_edges('lanser2','edge',0.5,Size,Coeffs)
edges_image(Image,Amp,Dir,'lanser2',0.5,'none',-1,-1)
hysteresis_threshold(Amp,Margin,20,30,30)

12.laplace(Image : ImageLaplace : ResultType, MaskSize, FilterMask : )
laplace滤波器的输入图像Image 使用拉普拉斯算子。
根据参数FilterMask,使用拉普拉斯算子的近似如下:
'n_4'
         1
1       -4      1
         1

n_8
                  1       1       1
                  1       -8      1
                  1       1       1
n_8_isotropic
                10      22     10
                  22     -128    22
                  10      22     10

对于这三个过滤器掩码,应用以下结果灰度值的规范化,(即: 'n_4'归一化除以1,'n_8'归一化除以2,'n_8_isotropic'归一化除以32。
对于大小为3x3的拉普拉斯算子,直接应用相应的滤波器,
而对于较大的滤波器大小,则首先使用高斯滤波器(gauss_image)或二项式滤波器(binomial_filter)对输入图像进行平滑处理,
其大小为MaskSize-2。
这里必须使用MaskSize = 5、7、9、11或13。
二项式过滤器是通过将'_binomial'附加到ResultType的上述值来选择的。
在这里,MaskSize可以选择在5到39之间。
此外,可以通过传递两个MaskSize值来为列和行方向选择不同的平滑量。
这里,MaskSize的第一个值对应于二项式滤波器的掩模宽度(在列方向平滑),
第二个值对应于掩模高度(在行方向平滑)。
  1. 因此,
  2.      laplace(O:R:'absolute',MaskSize,N:)
  3. 对于 MaskSize > 3等同于
  4.      gauss_image(O:G:MaskSize-2:) >
  5.      laplace(G:R:'absolute',3,N:).

  6.      laplace(O:R:'absolute_binomial',MaskSize,N:)
  7. 等同于   
  8.      binomial_filter(O:B:MaskSize-2,MaskSize-2:) >
  9.      laplace(B:R:'absolute',3,N:).
复制代码

拉普拉斯要么返回一个字节或uint2图像中经过拉普拉斯过滤的图像(ResultType = 'absolute')的绝对值,
要么返回带符号的结果(ResultType = 'signed'或'signed_clipped')。
这里,输出图像类型具有与输入图像相同的每像素字节数(即, int1或int2)表示“signed_clipped”,
而输出图像的像素数(即, int2或int4)表示“'signed”。

13.laplace_of_gauss(Image : ImageLaplace : Sigma : )
laplace_of_gauss计算高斯拉普拉斯算子,即,高斯平滑图像上的拉普拉斯算子,用于任意平滑参数Sigma。
拉普拉斯算子由以下定义:

工业视觉halcon边缘滤波器函数介绍6

工业视觉halcon边缘滤波器函数介绍6

laplace_of_gauss中的导数由高斯函数的适当导数计算,
得到卷积掩模的公式如下:

工业视觉halcon边缘滤波器函数介绍5

工业视觉halcon边缘滤波器函数介绍5


例程:
read_image (Image, 'mreut')
laplace (Image, ImageLaplace_3, 'signed', 3, 'n_8_isotropic')
zero_crossing (ImageLaplace_3, RegionCrossing_3)
laplace (Image, ImageLaplace_11, 'signed', 11, 'n_8_isotropic')
zero_crossing (ImageLaplace_11, RegionCrossing_11)
laplace_of_gauss (Image, ImageLaplaceG, 5)
zero_crossing (ImageLaplaceG, RegionCrossingG)


14.diff_of_gauss(Image : DiffOfGauss : Sigma, SigFactor : )
diff_of_gauss用高斯差近似高斯拉普拉斯算子。这些高斯函数的标准差,
根据Marr,由LoG的参数Sigma和两个标准差之比(SigFactor)计算得到:

工业视觉halcon边缘滤波器函数介绍4

工业视觉halcon边缘滤波器函数介绍4

对于SigFactor = 1.6,根据Marr,近似于Mexican-Hat-Operator的结果。
生成的图像存储在DiffOfGauss.。
例程:
read_image(Image,'fabrik')
diff_of_gauss(Image,Laplace,2.0,1.6)
zero_crossing(Laplace,ZeroCrossings)

15.derivate_gauss(Image : DerivGauss : Sigma, Component : )
derivate_gauss将图像与高斯函数的导数进行卷积,并计算由此得到的各种特征。
Sigma是高斯函数的参数。(平滑量)。
如果在Sigma中传递一个值,那么在列和行方向上的平滑量是相同的。
如果在Sigma中传递两个值,第一个值指定列方向的平滑量,第二个值指定行方向的平滑量。
组件的可能值为:
none : 仅平滑
'x':沿x的一阶导数。
'y': 沿y的一阶导数。
gradient 梯度的绝对值。
gradient_dir 以弧度为单位的梯度方向。
xx 沿x的二阶导数。
yy 沿y求导。
xy沿x和y的二阶导数。
'xxx 沿x的三阶导数
yyy 沿y求导
xxy沿x, x和y的三阶导数。
xyy 沿x y y的三阶导数。
det 黑森矩阵的行列式:
laplace 拉普拉斯算子(Hessian矩阵的迹):
mean_curvature 平均曲率h
gauss_curvature 高斯曲率K
area 微分区
eigenvalue1 第一特征值
eigenvalue2 第二特征值
eigenvec_dir 与弧度中的第一个特征值对应的特征向量的方向
kitchen_rosenfeld 垂直于梯度的二阶导数
zuniga_haralick 垂直于梯度的归一化二阶导数
2nd_ddg 沿梯度的二阶导数
de_saint_venant 沿梯度垂直的二阶导数


例程:
read_image (Image, 'mreut')
diff_of_gauss (Image, DiffOfGauss, 5, 1.6)
zero_crossing (DiffOfGauss, RegionCrossing1)
stop ()
laplace_of_gauss (Image, ImageLaplace, 5)
zero_crossing (ImageLaplace, RegionCrossing2)
stop ()
derivate_gauss (Image, DerivGauss, 5, 'laplace')
zero_crossing (DerivGauss, RegionCrossing3)

16.roberts(Image : ImageRoberts : FilterType : )
roberts计算图像的一阶导数,并将其用作边缘算子。
如果下面的掩码描述了图像的一部分,

A               B
C               D
不同的滤波器类型定义如下:

'roberts_max'     max(| A - D |,| B - C |)
   'gradient_max'    max(| A + B - (C + D)|,| A + C - (B + D)|)
   'gradient_sum'    |A + B - (C + D)| + |A + C - (B + D)|



例程:
read_image(Image,'fabrik')
roberts(Image,Roberts,'roberts_max')
threshold(Roberts,Margin,128,255)

17.close_edges(Edges, EdgeImage : RegionResult : MinAmplitude : )
close_edges关闭边缘检测器输出中的间隙,从而尝试生成完整的对象轮廓。
这是通过检查每个边缘点的邻居来确定最大振幅点(即,最大梯度),如果该点的振幅大于 MinAmplitude. ,则将该点添加到边缘。
该操作符期望输入典型边缘操作符(如edges_image或sobel_amp)返回的边(Edges)和幅值图像(EdgeImage)。
close_edges不考虑边缘操作符可能返回的边缘方向。
因此,在梯度几乎恒定的区域,边缘可能变得相当“wiggly”。
例程:
read_image (Image, 'fabrik')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowID)
sobel_amp (Image, EdgeAmplitude, 'thin_sum_abs', 3)
threshold (EdgeAmplitude, Edges, 30, 255)
close_edges (Edges, EdgeAmplitude, EdgesExtended, 15)
dev_set_color ('green')
dev_display (EdgesExtended)
dev_set_color ('red')
dev_display (Edges)


18.close_edges_length(Edges, Gradient : ClosedEdges : MinAmplitude, MaxGapLength : )
close_edges_length关闭边缘检测器输出中的空白,从而尝试生成完整的对象轮廓。
该操作符期望输入典型边缘操作符(如edges_image或sobel_amp)返回的边(Edges)和幅值图像(Gradient )。


轮廓的闭合分为两步:
首先,在输入轮廓上闭合一个像素宽的间隙,消除孤立点。
在此之后,通过添加边缘点,将打开的轮廓扩展到MaxGapLength点,直到轮廓关闭或没有找到更重要的边缘点为止。
如果梯度大于MinAmplitude,则认为梯度是显著的。
作为可能的新边缘点的相邻点是轮廓线方向上的点及其8邻域内的两个相邻点。
对于每一个点,计算它的梯度和它的三个可能相邻点的最大梯度之和(提前看长度1),
然后选择具有最大和的点作为新的边缘点。
例程:
read_image (Image, 'fabrik')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowID)
sobel_amp (Image, EdgeAmplitude, 'thin_sum_abs', 3)
threshold (EdgeAmplitude, Edges, 30, 255)
close_edges_length (Edges, EdgeAmplitude, ClosedEdges, 8, 100)
dev_set_color ('green')
dev_display (ClosedEdges)
dev_set_color ('red')
dev_display (Edges)











回复

使用道具 举报

快速回复 返回列表 客服中心 搜索