Close edge gaps using the edge amplitude image.
close_edges1 closes gaps in the output of an edge detector, and thus tries to produce complete object contours. This is done by examining the neighbors of each edge point to determine the point with maximum amplitude (i.e., maximum gradient), and adding the point to the edge if its amplitude is larger than the minimum amplitude passed in MinAmplitude. This operator expects as input the edges (Edges) and amplitude image (EdgeImage) returned by typical edge operators, such as edges__ or sobel_amp. close_edges1 does not take into account the edge directions that may be returned by an edge operator. Thus, in areas where the gradient is almost constant the edges may become rather ``wiggly.''
Edges (input_object) |
region(-array) -> object |
Region containing one pixel thick edges. |
EdgeImage (input_object) |
image -> object : byte |
Edge amplitude (gradient) image. |
RegionResult (output_object) |
region(-array) -> object |
Region containing closed edges. |
MinAmplitude (input_control) |
integer -> integer |
Minimum edge amplitude. | |
Default value: 16 | |
Suggested values: 5, 8, 10, 12, 16, 20, 25, 30, 40, 50 | |
Range of values: 1 <= MinAmplitude <= 255 | |
Minimum increment: 1 | |
Recommended increment: 1 | |
Restriction: MinAmplitude >= 0 |
sobel_amp(Image,&EdgeAmp,"sum_abs",5); threshold__(EdgeAmp,&EdgeRegion,40.0,255.0); skeleton(EdgeRegion,&ThinEdge); close_edge1(ThinEdge,EdgeAmp,&CloseEdges,15); skeleton(CloseEdges,&ThinCloseEdges);
close_edges1 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.
edges__, sobel_amp, threshold__, skeleton
close_edges2, dilation1, closing