Detect edges (amplitude and direction) using the Sobel operator.
sobel_dir 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 -1These masks are used differently, according to the selected filter type. (In the following, a und b denote the results of convolving an image with A und B for one particular pixel.) 'sum_sqrt' sqrt(a^2 + b^2) 'sum_abs' (|a| + |b|) / 2 For a Sobel operator with size 3x3, the corresponding filters A and B are applied directly, while for larger filter sizes (Size = 5,7,9 and 11) the input image is first smoothed using a Gaussian filter of size Size-2. Therefore,
sobel_dir(I:Amp,Dir:FilterType,S) for Size > 3 is equivalent to gauss__(I:G:S-2) > sobel_dir(G:Amp,Dir:FilterType,3).The edge directions are returned in EdgeDirection, and are stored in 2-degree steps, i.e., an edge direction of x degrees with respect to the horizontal axis is stored as x / 2 in the edge direction image. Furthermore, the direction of the change of intensity is taken into account. Let [Ex,Ey] denote the image gradient. Then the following edge directions are returned as r/2:
intensity increase Ex / Ey edge direction r from bottom to top 0 / + 0 from lower right to upper left + / - ]0,90[ from right to left + / 0 90 from upper right to lower left + / + ]90,180[ from top to bottom 0 / + 180 from upper left to lower right - / + ]180,270[ from left to right + / 0 270 from lower left to upper right - / - ]270,360[.Points with edge amplitude 0 are assigned the edge direction 255 (undefined direction).
Image (input_object) |
image(-array) -> object : byte |
Input image. |
EdgeAmplitude (output_object) |
image(-array) -> object : byte |
Edge amplitude (gradient magnitude) image. |
EdgeDirection (output_object) |
image(-array) -> object : direction |
Edge direction image. |
FilterType (input_control) |
string -> string |
Filter type. | |
Default value: 'sum_abs' | |
List of values: 'sum_abs', 'sum_sqrt' |
Size (input_control) |
integer -> integer |
Size of filter mask. | |
Default value: 3 | |
List of values: 3, 5, 7, 9, 11, 13 |
read_image(:Image:'fabrik':) > sobel_dir(Image:Amp,Dir:'sum_abs',3:) > threshold__(Amp:Edg:128,255:).
sobel_dir returns TRUE if all parameters are correct. If the input is empty the behaviour can be set via set_system(::'no_object_result',<Result>:). If necessary, an exception is raised.
gauss__, mean__, anisotrope_diff__, sigma__
nonmax_suppression_dir, hysteresis_threshold__, threshold__
edges__, frei_dir, kirsch_dir, prewitt_dir, robinson_dir
roberts__, laplace__, highpass__, bandpass__