sobel_ampsobel_ampSobelAmpSobelAmpsobel_amp (算子)

名称

sobel_ampsobel_ampSobelAmpSobelAmpsobel_amp — 使用索贝尔(Sobel)算子检测边缘(振幅)。

签名

sobel_amp(Image : EdgeAmplitude : FilterType, Size : )

Herror sobel_amp(const Hobject Image, Hobject* EdgeAmplitude, const char* FilterType, const Hlong Size)

Herror T_sobel_amp(const Hobject Image, Hobject* EdgeAmplitude, const Htuple FilterType, const Htuple Size)

void SobelAmp(const HObject& Image, HObject* EdgeAmplitude, const HTuple& FilterType, const HTuple& Size)

HImage HImage::SobelAmp(const HString& FilterType, const HTuple& Size) const

HImage HImage::SobelAmp(const HString& FilterType, Hlong Size) const

HImage HImage::SobelAmp(const char* FilterType, Hlong Size) const

HImage HImage::SobelAmp(const wchar_t* FilterType, Hlong Size) const   ( Windows only)

static void HOperatorSet.SobelAmp(HObject image, out HObject edgeAmplitude, HTuple filterType, HTuple size)

HImage HImage.SobelAmp(string filterType, HTuple size)

HImage HImage.SobelAmp(string filterType, int size)

def sobel_amp(image: HObject, filter_type: str, size: MaybeSequence[int]) -> HObject

描述

sobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp calculates first derivative of an image and is used as an edge detector. The filter is based on the following filter masks: A = 1 2 1 0 0 0 -1 -2 -1 B = 1 0 -1 2 0 -2 1 0 -1 These masks are used differently, according to the selected filter type. (In the following, a and b denote the results of convolving an image with A and B for one particular pixel.) Here, thin(x) is equal to x for a vertical maximum (mask A) and a horizontal maximum (mask B), respectively, and 0 otherwise. Thus, for 'thin_sum_abs'"thin_sum_abs""thin_sum_abs""thin_sum_abs""thin_sum_abs""thin_sum_abs" and 'thin_max_abs'"thin_max_abs""thin_max_abs""thin_max_abs""thin_max_abs""thin_max_abs" the gradient image is thinned. For the filter types 'x'"x""x""x""x""x" and 'y'"y""y""y""y""y" if the input image is of type byte the output image is of type int1, of type int2 otherwise. For a Sobel operator with size 3x3, the corresponding filters A and B are applied directly, while for larger filter sizes the input image is first smoothed using a Gaussian filter (see gauss_imagegauss_imageGaussImageGaussImageGaussImagegauss_image) or a binomial filter (see binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilterbinomial_filter) of size SizeSizeSizeSizesizesize-2. The Gaussian filter is selected for the above values of FilterTypeFilterTypeFilterTypeFilterTypefilterTypefilter_type. Here, SizeSizeSizeSizesizesize = 5, 7, 9, 11, or 13 must be used. The binomial filter is selected by appending '_binomial'"_binomial""_binomial""_binomial""_binomial""_binomial" to the above values of FilterTypeFilterTypeFilterTypeFilterTypefilterTypefilter_type. Here, SizeSizeSizeSizesizesize can be selected between 5 and 39. Furthermore, it is possible to select different amounts of smoothing the column and row direction by passing two values in SizeSizeSizeSizesizesize. Here, the first value of SizeSizeSizeSizesizesize corresponds to the mask width (smoothing in the column direction), while the second value corresponds to the mask height (smoothing in the row direction) of the binomial filter. The binomial filter can only be used for images of type byte, uint2 and real. Since smoothing reduces the edge amplitudes, in this case the edge amplitudes are multiplied by a factor of 2 to prevent information loss. Therefore,
sobel_amp(I,E,FilterType,S)sobel_amp(I,E,FilterType,S)SobelAmp(I,E,FilterType,S)SobelAmp(I,E,FilterType,S)SobelAmp(I,E,FilterType,S)sobel_amp(I,E,FilterType,S)
for SizeSizeSizeSizesizesize > 3 is conceptually equivalent to
scale_image(I,F,2,0)scale_image(I,F,2,0)ScaleImage(I,F,2,0)ScaleImage(I,F,2,0)ScaleImage(I,F,2,0)scale_image(I,F,2,0)
gauss_image(F,G,S-2)gauss_image(F,G,S-2)GaussImage(F,G,S-2)GaussImage(F,G,S-2)GaussImage(F,G,S-2)gauss_image(F,G,S-2)
sobel_amp(G,E,FilterType,3)sobel_amp(G,E,FilterType,3)SobelAmp(G,E,FilterType,3)SobelAmp(G,E,FilterType,3)SobelAmp(G,E,FilterType,3)sobel_amp(G,E,FilterType,3)
or to
scale_image(I,F,2,0)scale_image(I,F,2,0)ScaleImage(I,F,2,0)ScaleImage(I,F,2,0)ScaleImage(I,F,2,0)scale_image(I,F,2,0)
binomial_filter(F,G,S[0]-2,S[1]-2)binomial_filter(F,G,S[0]-2,S[1]-2)BinomialFilter(F,G,S[0]-2,S[1]-2)BinomialFilter(F,G,S[0]-2,S[1]-2)BinomialFilter(F,G,S[0]-2,S[1]-2)binomial_filter(F,G,S[0]-2,S[1]-2)
sobel_amp(G,E,FilterType,3)sobel_amp(G,E,FilterType,3)SobelAmp(G,E,FilterType,3)SobelAmp(G,E,FilterType,3)SobelAmp(G,E,FilterType,3)sobel_amp(G,E,FilterType,3).

For sobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp special optimizations are implemented FilterTypeFilterTypeFilterTypeFilterTypefilterTypefilter_type = 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs""sum_abs" that use SIMD technology. The actual application of these special optimizations is controlled by the system parameter 'sse2_enable'"sse2_enable""sse2_enable""sse2_enable""sse2_enable""sse2_enable" and 'avx2_enable'"avx2_enable""avx2_enable""avx2_enable""avx2_enable""avx2_enable", respectively (see set_systemset_systemSetSystemSetSystemSetSystemset_system). If 'sse2_enable'"sse2_enable""sse2_enable""sse2_enable""sse2_enable""sse2_enable" or 'avx2_enable'"avx2_enable""avx2_enable""avx2_enable""avx2_enable""avx2_enable"is set to 'true'"true""true""true""true""true" (and the SIMD instruction set is available), the internal calculations are performed using SIMD technology. Note that SIMD technology performs best on large, compact input regions. Depending on the input region and the capabilities of the hardware the execution of sobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp might even take significantly more time with SIMD technology than without.

sobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp can be executed on OpenCL devices for the filter types 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs""sum_abs", 'sum_sqrt'"sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt", 'x'"x""x""x""x""x" and 'y'"y""y""y""y""y" (as well as their binomial variants). Note that when using gaussian filtering for SizeSizeSizeSizesizesize > 3, the results can vary from the CPU implementation.

注意

请注意,若使用域缩减后的图像作为输入,滤波器算子可能会返回意外结果。请参阅 滤波器 一章

执行信息

参数

ImageImageImageImageimageimage (输入对象)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte / int2 / uint2 / real)

输入图像。

EdgeAmplitudeEdgeAmplitudeEdgeAmplitudeEdgeAmplitudeedgeAmplitudeedge_amplitude (输出对象)  (multichannel-)image(-array) objectHImageHObjectHImageHobject * (int1 / int2 / uint2 / real)

Edge amplitude (gradient magnitude) image.

FilterTypeFilterTypeFilterTypeFilterTypefilterTypefilter_type (输入控制)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Filter type.

默认值: 'sum_abs' "sum_abs" "sum_abs" "sum_abs" "sum_abs" "sum_abs"

值列表: 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs""sum_abs", 'sum_abs_binomial'"sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial", 'sum_sqrt'"sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt", 'sum_sqrt_binomial'"sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial", 'thin_max_abs'"thin_max_abs""thin_max_abs""thin_max_abs""thin_max_abs""thin_max_abs", 'thin_max_abs_binomial'"thin_max_abs_binomial""thin_max_abs_binomial""thin_max_abs_binomial""thin_max_abs_binomial""thin_max_abs_binomial", 'thin_sum_abs'"thin_sum_abs""thin_sum_abs""thin_sum_abs""thin_sum_abs""thin_sum_abs", 'thin_sum_abs_binomial'"thin_sum_abs_binomial""thin_sum_abs_binomial""thin_sum_abs_binomial""thin_sum_abs_binomial""thin_sum_abs_binomial", 'x'"x""x""x""x""x", 'x_binomial'"x_binomial""x_binomial""x_binomial""x_binomial""x_binomial", 'y'"y""y""y""y""y", 'y_binomial'"y_binomial""y_binomial""y_binomial""y_binomial""y_binomial"

List of values (for compute devices): 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs""sum_abs", 'sum_sqrt'"sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt", 'x'"x""x""x""x""x", 'y'"y""y""y""y""y", 'sum_abs_binomial'"sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial", 'sum_sqrt_binomial'"sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial", 'x_binomial'"x_binomial""x_binomial""x_binomial""x_binomial""x_binomial", 'y_binomial'"y_binomial""y_binomial""y_binomial""y_binomial""y_binomial"

SizeSizeSizeSizesizesize (输入控制)  integer(-array) HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Size of filter mask.

默认值: 3

值列表: 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39

示例(HDevelop)

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

示例(C)

read_image(&Image,"fabrik");
sobel_amp(Image,&Amp,"sum_abs",3);
threshold(Amp,&Edg,128.0,255.0);

示例(HDevelop)

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

示例(HDevelop)

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

示例(HDevelop)

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

结果

sobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp 在所有参数正确时返回 2 ( H_MSG_TRUE )。 如果输入为空则可设置行为通过 set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)。如有必要,则抛出异常。

可能的前趋

binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilterbinomial_filter, gauss_filtergauss_filterGaussFilterGaussFilterGaussFiltergauss_filter, mean_imagemean_imageMeanImageMeanImageMeanImagemean_image, anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusionAnisotropicDiffusionanisotropic_diffusion, sigma_imagesigma_imageSigmaImageSigmaImageSigmaImagesigma_image

可能的后继

thresholdthresholdThresholdThresholdThresholdthreshold, nonmax_suppression_ampnonmax_suppression_ampNonmaxSuppressionAmpNonmaxSuppressionAmpNonmaxSuppressionAmpnonmax_suppression_amp, gray_skeletongray_skeletonGraySkeletonGraySkeletonGraySkeletongray_skeleton

替代

frei_ampfrei_ampFreiAmpFreiAmpFreiAmpfrei_amp, robertsrobertsRobertsRobertsRobertsroberts, kirsch_ampkirsch_ampKirschAmpKirschAmpKirschAmpkirsch_amp, prewitt_ampprewitt_ampPrewittAmpPrewittAmpPrewittAmpprewitt_amp, robinson_amprobinson_ampRobinsonAmpRobinsonAmpRobinsonAmprobinson_amp

另见

laplacelaplaceLaplaceLaplaceLaplacelaplace, highpass_imagehighpass_imageHighpassImageHighpassImageHighpassImagehighpass_image, bandpass_imagebandpass_imageBandpassImageBandpassImageBandpassImagebandpass_image

模块

基础