Edge Detection - Customizing Masks

I am trying to apply a Roberts-style edge detection to an image, however I do not want to use the Roberts algorithm supplied by the matlab code i.e. NOT: edge(I,'roberts'). The Roberts masks I need to apply to the image are: x=[1 0;0 -1] y=[0 -1;1 0], which is slightly different that MATLAB's built-in edge(I,'roberts') edge detector.
How can I apply custom Roberts, Sobel, and Prewitt edge detectors in MATLAB?

1 Comment

something like this?:
I = imread('Pic7.bmp');
maskx = [1 0;0 -1];
masky = [0 -1;1 0];
X = imfilter(I,maskx);
Y = imfilter(I,masky);
Z = X+Y;

Sign in to comment.

Answers (1)

Image Analyst
Image Analyst on 9 Jul 2011
Yes. That will work. Not sure about the Z though - you might want to take Z = sqrt(single(X).^2 + single(Y).^2) instead. Also, you might want to look into conv2(), which I believe is more highly optimized for speed than imfilter. Be sure to use fliplr and flipud on the masks if the orientation is important though since conv2 flips the kernel.

1 Comment

Thank you for the quick reply! This particular formula only required the sum of the absoulte value of the respective x and y gradients, not a square-root of the sum of squares fortunately. Thank you Obi-Wan.

Sign in to comment.

Asked:

on 9 Jul 2011

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!