edges_color — Extract color edges using Canny, Deriche, or Shen filters.
edges_color extracts color edges from the input image Image. To define color edges, the multi-channel image Image is regarded as a mapping , where n is the number of channels in Image. For such functions, there is a natural extension of the gradient: the metric tensor G, which can be used to calculate for every direction, given by the direction vector v, the rate of change of f in the direction v. For notational convenience, G will be regarded as a two-dimensional matrix. Thus, the rate of change of the function f in the direction v is given by v^T G v, where
The “filter width” (i.e., the amount of smoothing) can be chosen arbitrarily for all filters except 'sobel_fast' (where the filter width is 3x3 and Alpha is ignored), and can be estimated by calling info_edges for concrete values of the parameter Alpha. It decreases for increasing Alpha for the Deriche and Shen filters and increases for the Canny filter, where it is the standard deviation of the Gaussian on which the Canny operator is based. “Wide” filters exhibit a larger invariance to noise, but also a decreased ability to detect small details. Non-recursive filters, such as the Canny filter, are realized using filter masks, and thus the execution time increases for increasing filter width. In contrast, the execution time for recursive filters does not depend on the filter width. Thus, arbitrary filter widths are possible using the Deriche and Shen filters without increasing the run time of the operator. The resulting advantage in speed compared to the Canny operator naturally increases for larger filter widths. As border treatment, the recursive operators assume that the images are zero outside of the image, while the Canny operator mirrors the gray value at the image border. The signal-noise-ratio of the filters is comparable for the following choices of Alpha:
Alpha('deriche2') = Alpha('deriche1') / 2, Alpha('shen') = Alpha('deriche1') / 2, Alpha('canny') = 1.77 / Alpha('deriche1').
edges_color optionally offers to apply a non-maximum-suppression (NMS = 'nms'/'inms'/'hvnms'; 'none' if not desired) and hysteresis threshold operation (Low,High; at least one negative if not desired) to the resulting edge image. Conceptually, this corresponds to the following calls:
Note that the hysteresis threshold operation is not applied if NMS is set to 'none'.
For 'sobel_fast', the same non-maximum-suppression is performed for all values of NMS except 'none'. Additionally, for 'sobel_fast' the resulting edges are thinned to a width of one pixel.
Note that filter operators may return unexpected results if an image with a reduced domain is used as input. Please refer to the chapter Filters.
Edge amplitude (gradient magnitude) image.
Edge direction image.
Edge operator to be applied.
Default value: 'canny'
List of values: 'canny', 'deriche1', 'deriche2', 'shen', 'sobel_fast'
Filter parameter: small values result in strong smoothing, and thus less detail (opposite for 'canny').
Default value: 1.0
Suggested values: 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.9, 1.0, 1.1, 1.2, 1.5, 2.0, 2.5, 3.0
Typical range of values: 0.2 ≤ Alpha ≤ 50.0
Minimum increment: 0.01
Recommended increment: 0.1
Restriction: Alpha > 0.0
Non-maximum suppression ('none', if not desired).
Default value: 'nms'
List of values: 'hvnms', 'inms', 'nms', 'none'
Lower threshold for the hysteresis threshold operation (negative if no thresholding is desired).
Default value: 20
Suggested values: 5, 10, 15, 20, 25, 30, 40
Typical range of values: 1 ≤ Low
Minimum increment: 1
Recommended increment: 5
Restriction: Low >= 1 || Low < 0
Upper threshold for the hysteresis threshold operation (negative if no thresholding is desired).
Default value: 40
Suggested values: 10, 15, 20, 25, 30, 40, 50, 60, 70
Typical range of values: 1 ≤ High
Minimum increment: 1
Recommended increment: 5
Restriction: High >= 1 || High < 0 && High >= Low
edges_color returns 2 (H_MSG_TRUE) if all parameters are correct and no error occurs during execution. If the input is empty the behavior can be set via set_system('no_object_result',<Result>). If necessary, an exception is raised.
edges_image, edges_sub_pix, info_edges, nonmax_suppression_amp, hysteresis_threshold
C. Steger: “Subpixel-Precise Extraction of Lines and Edges”;
International Archives of Photogrammetry and Remote Sensing,
vol. XXXIII, part B3; pp. 141-156; 2000.
C. Steger: “Unbiased Extraction of Curvilinear Structures from 2D and 3D Images”; Herbert Utz Verlag, München; 1998.
S. Di Zenzo: “A Note on the Gradient of a Multi-Image”; Computer Vision, Graphics, and Image Processing, vol. 33; pp. 116-125; 1986.
Aldo Cumani: “Edge Detection in Multispectral Images”; Computer Vision, Graphics, and Image Processing: Graphical Models and Image Processing, vol. 53, no. 1; pp. 40-51; 1991.
J.Canny: “Finding Edges and Lines in Images”; Report, AI-TR-720; M.I.T. Artificial Intelligence Lab., Cambridge; 1983.
J.Canny: “A Computational Approach to Edge Detection”; IEEE Transactions on Pattern Analysis and Machine Intelligence; PAMI-8, vol. 6; pp. 679-698; 1986.
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; 1987.
R.Deriche: “Fast Algorithms for Low-Level Vision”; IEEE Transactions on Pattern Analysis and Machine Intelligence; PAMI-12, no. 1; pp. 78-87; 1990.
J. Shen, S. Castan: “An Optimal Linear Operator for Step Edge Detection”; Computer Vision, Graphics, and Image Processing: Graphical Models and Image Processing, vol. 54, no. 2; pp. 112-133; 1992.