Edge detection
E = edge(Img)
E = edge(Img, <named_args>)
E = edge(Img, method)
E = edge(Img, method, thresh)
E = edge(Img, method, thresh, direction)
E = edge(Img, method, thresh, sigma)
[E, thresh] = edge(im, method, ...)
E
, will have the un-thresholded gradient image. For the Canny method, this is a two-element vector where the first element is the low threshold and the second one is the high threshold defining the weak and strong edges, respectively. If this is a scalar in Canny, the low threshold is 0.4*thresh
and the high threshold is just thresh
. For Canny, thresholds cannot be a negative scalar and are always relative to the highest internally computed gradient magnitude of the image. The best way to find a good threshold is by trial and error (e.g., binary searching). Future methods will appear in the future.The function edge performs edge detection on a grayscale intensity image. The user may set the method, the threshold level and the direction of the edge detection.
Img
, using the sobel gradient estimator, 0.5 threshold level and in both horizontal and vertical directions.The other parameters are optional and non-positional. That is, they may be passed to the function by their name. The following example illustrates this.
initial_dir = PWD; chdir (SIPDIR + 'images'); Img = imread('tru.jpg'); Img = im2gray(Img); clf imshow(Img); e = edge(Img); // sobel, thresh = 0.5 clf imshow(e,2) e = edge(Img, 'prewitt'); // thresh = 0.5 clf imshow(e,2) e = edge(Img, 'canny', [0.06 0.2]); clf imshow(e,2) e = edge(Img, 'fftderiv', 0.4); // FFT gradient method; 0.4 threshold clf imshow(e,[]) // It is useful to thin the edges, eliminating redundant pixels: e = thin(e); clf imshow(e,[]) e = edge(Img,'fftderiv',sigma=3,thresh=-1); // thicker edges, no threshold clf imshow(e,[]) e = edge(Img,thresh=-1); clf imshow(e,[]) chdir(initial_dir); |
"Shape Analysis and Classification", L. da F. Costa and R. M. Cesar Jr., CRC Press, section 3.3.
http://siptoolbox.sf.net