GradientOperator3d
Provides different algorithms to perform an edge detection based on the first derivative of a three-dimensional image.
Access to parameter description
This command is deprecated, it will be removed in ImageDev 2025.1.
You can use GradientVector3d or GradientMagnitude3d instead.
For an introduction:
For color images the same algorithm is iterated on each color channel.
The following algorithms are provided to extract the edges of an image:
[1] R.Deriche. "Using Canny's criteria to derive a recursively implemented optimal edge detector". International Journal of Computer Vision, vol.1, no 2, pp. 167-187, Jun. 1987.
[2] J.F.Canny. "A computational approach to edge detection." IEEE Transactions on Pattern Analysis and Machine Intelligence, vol.8, No 6, pp. 679-698, Nov. 1986.
See also
Access to parameter description
This command is deprecated, it will be removed in ImageDev 2025.1.
You can use GradientVector3d or GradientMagnitude3d instead.
For an introduction:
- section Edge Detection
- section Gradient
- section Images Filters
For color images the same algorithm is iterated on each color channel.
The following algorithms are provided to extract the edges of an image:
- Canny-Deriche: It performs a recursive gradient computation with an IIR (Infinite Impulse Response) filter by derivating the Deriche [1] smoothing filter which has the three-dimensional form: f(x,y,z)=b3(α|x|+1)e−α|x|⋅(α|y|+1)e−α|y|⋅(α|z|+1)e−α|z| where b=α4
- Canny: It is similar to Canny-Deriche but uses a FIR (finite impulse response) filter [2]. It performs an approximation to get the Canny-Deriche in the X, Y, and Z directions using a convolution kernel 7x5x5 for X, 5x7x5 for Y and 5x5x7 for Z. The result is nearly the same as Canny-Deriche but the process is much faster.
- Gaussian: It performs a convolution with the derivatives of a Gaussian function along each image axis.
- Sobel: It performs a convolution with the Sobel Kernel. This kernel is the 3D generalization of the Sobel kernel described in GradientOperator2d.
- Prewitt: It performs a convolution with the Prewitt Kernel. This kernel is the 3D generalization of the Prewitt kernel described in GradientOperator2d.
- The output data type is determined by applying the Basic rules defined for arithmetic operations.
- To limit overflows some normalizations are applied with most of the proposed operators by dividing the output gray levels by the sum of absolute values of the kernel coefficients.
- The Prewitt and Sobel operators do not apply normalizations and are thus inclined to produce overflows.
- By default, the maximum component of each directional gradient is computed. Depending on the selected operator, other output can be selected such as the Euclidean norm or the gradient components.
- The smoothing factor has a totally different meaning depending on the selected gradient operator. It represents a smoothing percentage with Canny-Deriche, a standard-deviation with the Gaussian and is ignored with Canny, Sobel and Prewitt.
[1] R.Deriche. "Using Canny's criteria to derive a recursively implemented optimal edge detector". International Journal of Computer Vision, vol.1, no 2, pp. 167-187, Jun. 1987.
[2] J.F.Canny. "A computational approach to edge detection." IEEE Transactions on Pattern Analysis and Machine Intelligence, vol.8, No 6, pp. 679-698, Nov. 1986.
See also
Function Syntax
This function returns a GradientOperator3dOutput structure containing outputImageX, outputImageY, outputImageZ and outputAmplitudeImage.
// Output structure of the gradientOperator3d function. struct GradientOperator3dOutput { /// The X-gradient output image. std::shared_ptr< iolink::ImageView > outputImageX; /// The Y-gradient output image. std::shared_ptr< iolink::ImageView > outputImageY; /// The Z-gradient output image. std::shared_ptr< iolink::ImageView > outputImageZ; /// The gradient amplitude output image. std::shared_ptr< iolink::ImageView > outputAmplitudeImage; }; // Function prototype
GradientOperator3dOutput gradientOperator3d( std::shared_ptr< iolink::ImageView > inputImage, GradientOperator3d::GradientOperator gradientOperator, GradientOperator3d::GradientMode gradientMode, double smoothingFactor, std::shared_ptr< iolink::ImageView > outputImageX = NULL, std::shared_ptr< iolink::ImageView > outputImageY = NULL, std::shared_ptr< iolink::ImageView > outputImageZ = NULL, std::shared_ptr< iolink::ImageView > outputAmplitudeImage = NULL );
Class Syntax
Parameters
Parameter Name | Description | Type | Supported Values | Default Value | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
![]() |
inputImage |
The input image. | Image | Binary, Label, Grayscale or Multispectral | nullptr | ||||||||||
![]() |
gradientOperator |
The gradient operator to apply.
|
Enumeration | CANNY_DERICHE | |||||||||||
![]() |
gradientMode |
Select an output mode.
|
Enumeration | AMPLITUDE_MAXIMUM | |||||||||||
![]() |
smoothingFactor |
The smoothing factor defines the gradient sharpness. It is only used with Canny Deriche, and Gaussian operators. It has a totally different meaning depending on the selected gradient operator. Its value must be between 0 and 100.
|
Float64 | ]0, 100] | 60 | ||||||||||
![]() |
outputImageX |
The X-gradient output image. | Image | nullptr | |||||||||||
![]() |
outputImageY |
The Y-gradient output image. | Image | nullptr | |||||||||||
![]() |
outputImageZ |
The Z-gradient output image. | Image | nullptr | |||||||||||
![]() |
outputAmplitudeImage |
The gradient amplitude output image. | Image | nullptr |
Object Examples
auto foam = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "foam.vip" ); GradientOperator3d gradientOperator3dAlgo; gradientOperator3dAlgo.setInputImage( foam ); gradientOperator3dAlgo.setGradientOperator( GradientOperator3d::GradientOperator::CANNY_DERICHE ); gradientOperator3dAlgo.setGradientMode( GradientOperator3d::GradientMode::AMPLITUDE_MAXIMUM ); gradientOperator3dAlgo.setSmoothingFactor( 60.0 ); gradientOperator3dAlgo.execute(); std::cout << "outputImageX:" << gradientOperator3dAlgo.outputImageX()->toString(); std::cout << "outputImageY:" << gradientOperator3dAlgo.outputImageY()->toString(); std::cout << "outputImageZ:" << gradientOperator3dAlgo.outputImageZ()->toString(); std::cout << "outputAmplitudeImage:" << gradientOperator3dAlgo.outputAmplitudeImage()->toString();
Function Examples
auto foam = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "foam.vip" ); auto result = gradientOperator3d( foam, GradientOperator3d::GradientOperator::CANNY_DERICHE, GradientOperator3d::GradientMode::AMPLITUDE_MAXIMUM, 60.0 ); std::cout << "outputImageX:" << result.outputImageX->toString(); std::cout << "outputImageY:" << result.outputImageY->toString(); std::cout << "outputImageZ:" << result.outputImageZ->toString(); std::cout << "outputAmplitudeImage:" << result.outputAmplitudeImage->toString();