derivate_gaussderivate_gaussDerivateGaussDerivateGaussderivate_gauss导数高斯(算子)
名称
derivate_gaussderivate_gaussDerivateGaussDerivateGaussderivate_gauss — 用高斯导数卷积图像。
签名
描述
derivate_gaussderivate_gaussDerivateGaussDerivateGaussDerivateGaussderivate_gauss 将图像与高斯函数的导数进行卷积,并计算由此衍生的各种特征。SigmaSigmaSigmaSigmasigmasigma 是高斯函数的参数(即平滑程度)。如果 SigmaSigmaSigmaSigmasigmasigma 参数中传入一个值,则列方向和行方向的平滑程度相同。如果 SigmaSigmaSigmaSigmasigmasigma 参数中传入两个值,则第一个值指定列方向的平滑程度,第二个值指定行方向的平滑程度。ComponentComponentComponentComponentcomponentcomponent 的可能取值包括:
- 'none'"none""none""none""none""none":
-
仅进行平滑处理。
- 'x'"x""x""x""x""x":
x 方向的一阶导数。
- 'y'"y""y""y""y""y":
-
y 方向的一阶导数。
- 'gradient'"gradient""gradient""gradient""gradient""gradient":
-
梯度的绝对值。
- 'gradient_dir'"gradient_dir""gradient_dir""gradient_dir""gradient_dir""gradient_dir":
-
梯度方向(单位:弧度)。
- 'xx'"xx""xx""xx""xx""xx":
-
x 方向的二阶导数。
- 'yy'"yy""yy""yy""yy""yy":
-
y 方向的二阶导数。
- 'xy'"xy""xy""xy""xy""xy":
-
x 和 y 方向的二阶导数。
- 'xxx'"xxx""xxx""xxx""xxx""xxx":
-
x 方向的三阶导数。
- 'yyy'"yyy""yyy""yyy""yyy""yyy":
-
y 方向的三阶导数。
- 'xxy'"xxy""xxy""xxy""xxy""xxy":
-
x、x 和 y 方向的三阶导数。
- 'xyy'"xyy""xyy""xyy""xyy""xyy":
-
x、y 和 y 方向的三阶导数。
- 'det'"det""det""det""det""det":
-
海森矩阵(Hessian matrix)的行列式:
- 'laplace'"laplace""laplace""laplace""laplace""laplace":
-
拉普拉斯算子(海森矩阵的迹):
- 'mean_curvature'"mean_curvature""mean_curvature""mean_curvature""mean_curvature""mean_curvature":
平均曲率 H
- 'gauss_curvature'"gauss_curvature""gauss_curvature""gauss_curvature""gauss_curvature""gauss_curvature":
高斯曲率 K
- 'area'"area""area""area""area""area":
微分面积 A
- 'eigenvalue1'"eigenvalue1""eigenvalue1""eigenvalue1""eigenvalue1""eigenvalue1":
第一特征值
- 'eigenvalue2'"eigenvalue2""eigenvalue2""eigenvalue2""eigenvalue2""eigenvalue2":
第二特征值
- 'eigenvec_dir'"eigenvec_dir""eigenvec_dir""eigenvec_dir""eigenvec_dir""eigenvec_dir":
-
对应于第一特征值的特征向量方向(单位:弧度)
- 'kitchen_rosenfeld'"kitchen_rosenfeld""kitchen_rosenfeld""kitchen_rosenfeld""kitchen_rosenfeld""kitchen_rosenfeld":
垂直于梯度的二阶导数
- 'zuniga_haralick'"zuniga_haralick""zuniga_haralick""zuniga_haralick""zuniga_haralick""zuniga_haralick":
归一化后的垂直于梯度的二阶导数
- '2nd_ddg'"2nd_ddg""2nd_ddg""2nd_ddg""2nd_ddg""2nd_ddg":
沿梯度的二阶导数
- 'de_saint_venant'"de_saint_venant""de_saint_venant""de_saint_venant""de_saint_venant""de_saint_venant":
沿梯度方向及垂直于梯度的二阶导数
注意
除了纯 C 版本外,还有专门用于提速的
derivate_gaussderivate_gaussDerivateGaussDerivateGaussDerivateGaussderivate_gauss 实现。只有当系统支持此类优化且相应的系统参数 *_enable 被设置为
'true'"true""true""true""true""true" 时,才会应用此类优化,详见 set_systemset_systemSetSystemSetSystemSetSystemset_system。支持以下优化(按优先级排序):
-
使用 AVX512f 指令集 ('avx512f_enable'"avx512f_enable""avx512f_enable""avx512f_enable""avx512f_enable""avx512f_enable")
-
使用 AVX 指令集 ('avx_enable'"avx_enable""avx_enable""avx_enable""avx_enable""avx_enable")
-
使用 SSE2 指令集 ('sse2_enable'"sse2_enable""sse2_enable""sse2_enable""sse2_enable""sse2_enable")
由于数值计算方面的原因,这些实现与纯 C 版本相比存在轻微误差。例如,使用 SSE2 指令集时,对于“byte”图像且 ComponentComponentComponentComponentcomponentcomponent 设置为 'none'"none""none""none""none""none"、'x'"x""x""x""x""x" 或'y'"y""y""y""y""y" 的情况,误差量级约为 1.0e-5。
若优先考虑精度而非性能,请在调用 derivate_gaussderivate_gaussDerivateGaussDerivateGaussDerivateGaussderivate_gauss 之前,将所有相应的系统参数设置为 'false'"false""false""false""false""false"(使用 set_systemset_systemSetSystemSetSystemSetSystemset_system)。这样 derivate_gaussderivate_gaussDerivateGaussDerivateGaussDerivateGaussderivate_gauss 就不会使用加速功能。请勿忘记随后将参数重新设回 'true'"true""true""true""true""true"。
仅当 SigmaSigmaSigmaSigmasigmasigma 导致的滤波器宽度或高度不超过 129 像素时,derivate_gaussderivate_gaussDerivateGaussDerivateGaussDerivateGaussderivate_gauss 才会于 OpenCL 设备上执行。这对应于 ComponentComponentComponentComponentcomponentcomponent = 'none'"none""none""none""none""none" 时 SigmaSigmaSigmaSigmasigmasigma 小于 20.7 的情况。由于数值计算问题,OpenCL 实现版本与纯 C 版本相比存在轻微误差。
请注意,若使用域缩减后的图像作为输入,滤波器算子可能会返回意外结果。请参阅 滤波器 一章
执行信息
- 支持 OpenCL 计算设备。
- 多线程类型:可重入(与非独占算子并行运行)。
- 多线程作用域:全局(可从任何线程调用)。
- 在元组级别上自动并行化。
- 在通道级别上自动并行化。
- 在域级别上自动并行化。
参数
ImageImageImageImageimageimage (输入对象) (multichannel-)image(-array) → objectHImageHObjectHImageHobject (byte* / direction* / cyclic* / int1* / int2* / uint2* / int4* / real*) *允许用于计算设备
输入图像。
DerivGaussDerivGaussDerivGaussDerivGaussderivGaussderiv_gauss (输出对象) (multichannel-)image(-array) → objectHImageHObjectHImageHobject * (real)
滤波后的结果图像。
SigmaSigmaSigmaSigmasigmasigma (输入控制) real(-array) → HTupleMaybeSequence[float]HTupleHtuple (real) (double) (double) (double)
高斯函数的 Sigma (平滑)参数。
默认值:
1.0
建议值:
0.7, 1.0, 1.5, 2.0, 3.0, 4.0, 5.0
值范围:
0.01
≤
Sigma
Sigma
Sigma
Sigma
sigma
sigma
≤
50.0
最小增量:
0.01
建议增量:
0.1
ComponentComponentComponentComponentcomponentcomponent (输入控制) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
待计算的导数或特征。
默认值:
'x'
"x"
"x"
"x"
"x"
"x"
值列表:
'2nd_ddg'"2nd_ddg""2nd_ddg""2nd_ddg""2nd_ddg""2nd_ddg", 'area'"area""area""area""area""area", 'de_saint_venant'"de_saint_venant""de_saint_venant""de_saint_venant""de_saint_venant""de_saint_venant", 'det'"det""det""det""det""det", 'eigenvalue1'"eigenvalue1""eigenvalue1""eigenvalue1""eigenvalue1""eigenvalue1", 'eigenvalue2'"eigenvalue2""eigenvalue2""eigenvalue2""eigenvalue2""eigenvalue2", 'eigenvec_dir'"eigenvec_dir""eigenvec_dir""eigenvec_dir""eigenvec_dir""eigenvec_dir", 'gauss_curvature'"gauss_curvature""gauss_curvature""gauss_curvature""gauss_curvature""gauss_curvature", 'gradient'"gradient""gradient""gradient""gradient""gradient", 'gradient_dir'"gradient_dir""gradient_dir""gradient_dir""gradient_dir""gradient_dir", 'kitchen_rosenfeld'"kitchen_rosenfeld""kitchen_rosenfeld""kitchen_rosenfeld""kitchen_rosenfeld""kitchen_rosenfeld", 'laplace'"laplace""laplace""laplace""laplace""laplace", 'main1_curvature'"main1_curvature""main1_curvature""main1_curvature""main1_curvature""main1_curvature", 'main2_curvature'"main2_curvature""main2_curvature""main2_curvature""main2_curvature""main2_curvature", 'mean_curvature'"mean_curvature""mean_curvature""mean_curvature""mean_curvature""mean_curvature", 'none'"none""none""none""none""none", 'x'"x""x""x""x""x", 'xx'"xx""xx""xx""xx""xx", 'xxx'"xxx""xxx""xxx""xxx""xxx", 'xxy'"xxy""xxy""xxy""xxy""xxy", 'xy'"xy""xy""xy""xy""xy", 'xyy'"xyy""xyy""xyy""xyy""xyy", 'y'"y""y""y""y""y", 'yy'"yy""yy""yy""yy""yy", 'yyy'"yyy""yyy""yyy""yyy""yyy", 'zuniga_haralick'"zuniga_haralick""zuniga_haralick""zuniga_haralick""zuniga_haralick""zuniga_haralick"
值列表(用于计算设备):'none'"none""none""none""none""none", 'x'"x""x""x""x""x", 'y'"y""y""y""y""y", 'gradient'"gradient""gradient""gradient""gradient""gradient", 'gradient_dir'"gradient_dir""gradient_dir""gradient_dir""gradient_dir""gradient_dir", 'xx'"xx""xx""xx""xx""xx", 'yy'"yy""yy""yy""yy""yy", 'xy'"xy""xy""xy""xy""xy", 'xxx'"xxx""xxx""xxx""xxx""xxx", 'yyy'"yyy""yyy""yyy""yyy""yyy", 'xxy'"xxy""xxy""xxy""xxy""xxy", 'xyy'"xyy""xyy""xyy""xyy""xyy", 'laplace'"laplace""laplace""laplace""laplace""laplace"
示例(C)
read_image(&Image,"mreut");
derivate_gauss(Image,&Gauss,3.0,"x");
zero_crossing(Gauss,&ZeroCrossings);
可能的后继
zero_crossingzero_crossingZeroCrossingZeroCrossingZeroCrossingzero_crossing,
dual_thresholddual_thresholdDualThresholdDualThresholdDualThresholddual_threshold
替代
laplacelaplaceLaplaceLaplaceLaplacelaplace,
laplace_of_gausslaplace_of_gaussLaplaceOfGaussLaplaceOfGaussLaplaceOfGausslaplace_of_gauss,
binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilterbinomial_filter,
gauss_filtergauss_filterGaussFilterGaussFilterGaussFiltergauss_filter,
smooth_imagesmooth_imageSmoothImageSmoothImageSmoothImagesmooth_image,
isotropic_diffusionisotropic_diffusionIsotropicDiffusionIsotropicDiffusionIsotropicDiffusionisotropic_diffusion
另见
zero_crossingzero_crossingZeroCrossingZeroCrossingZeroCrossingzero_crossing,
dual_thresholddual_thresholdDualThresholdDualThresholdDualThresholddual_threshold
模块
基础