目录
- sobel_amp(算子)
- 描述
- 参数
sobel_amp(算子)
sobel_amp - 使用Sobel算子检测边缘(幅度)。
sobel_amp(图片:边缘图像:滤波器方式,掩膜大小:)
描述
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卷积为一个特定像素的结果。)
这里,thin(x)分别对应于垂直最大值(掩模A)和水平最大值(掩模B)的x,否则为0。因此,对于’thin_sum_abs’和’thin_max_abs’,渐变图像被稀疏化。
对于过滤器类型’x’和’y’,如果输入图像是byte类型,则输出图像的类型为int1,否则为int2类型。
对于尺寸为3x3的Sobel算子,直接应用相应的滤波器A和B,而对于较大的滤波器尺寸,首先使用尺寸为Size-2的高斯滤波器(参见gauss_image)或二项式滤波器(参见binomial_filter)对输入图像进行平滑处理。
为上述FilterType值选择高斯滤波器。这里,必须使用Size = 5,7,9,11或13。
通过将“_binomial”附加到FilterType的上述值来选择二项式过滤器。这里,可以在5到39之间选择大小。
此外,可以通过在Size中传递两个值来选择不同的平滑列和行方向的量。这里,Size的第一个值对应于掩模宽度(列方向上的平滑),而第二个值对应于二项式滤波器的掩模高度(行方向的平滑)。
二项式滤波器只能用于byte,uint2和real类型的图像。由于平滑减小了边缘幅度,在这种情况下,边缘幅度乘以因子2以防止信息丢失。因此,
sobel_amp(I,E,过滤式,S)
for Size > 3在概念上等同于
scale_image(I,F,2,0)gauss_image(F,G,S-2)sobel_amp(G,E,FilterType,3)
or to
scale_image(I,F,2,0)binomial_filter(F,G,S[0]-2,S[1]-2)sobel_amp(G,E,FilterType,3).
对于sobel_amp,实现了使用SIMD技术的FilterType =‘sum_abs’的特殊优化。这些特殊优化的实际应用由系统参数’mmx_enable’控制(参见set_system)。如果’mmx_enable’设置为’true’(并且SIMD指令集可用),则使用SIMD技术执行内部计算。请注意,SIMD技术在大型紧凑输入区域表现最佳。根据输入区域和硬件的功能,使用SIMD技术执行sobel_amp甚至可能比非使用SIMD技术花费更多时间。
sobel_amp可以在OpenCL设备上执行,用于过滤器类型’sum_abs’,‘sum_sqrt’,‘x’和’y’(以及它们的二项式变体)。请注意,当对Size> 3使用高斯过滤时,结果可能与CPU实现不同。
支持OpenCL计算设备。
多线程类型:可重入(与非独占运算符并行运行)。
多线程范围:全局(可以从任何线程调用)。
在元组级别自动并行化。
在通道级别自动并行化。
在域级别自动并行化。
参数
Image (input_object)(多通道 - )图像(-array)→对象(byte / int2 / uint2 / real)
输入图像。
EdgeAmplitude(output_object)(多通道 - )图像(-array)→对象(int1 / int2 / uint2 / real)
边缘幅度(梯度幅度)图像。
FilterType (input_control)string→(string)
过滤器类型。
默认值:‘sum_abs’
值列表:
‘sum_abs’,‘sum_abs_binomial’,‘sum_sqrt’,‘sum_sqrt_binomial’,‘thin_max_abs’,‘thin_max_abs_binomial’,‘thin_sum_abs’,‘thin_sum_abs_binomial’,‘x’,‘x_binomial’,‘y’,'y_binomial “
值列表(用于计算设备):
‘sum_abs’,‘sum_sqrt’,‘x’,‘y’,‘sum_abs_binomial’,‘sum_sqrt_binomial’,‘x_binomial’,‘y_binomial’
Size (input_control)整数(-array)→(整数)
滤波掩膜的大小。
默认值:3
值列表:3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39