An edge is a boundary between two uniform regions. You can detect an edge by comparing the intensity of neighboring pixels. small intensity differences between two neighboring pixels do not
always represent an edge. Instead, the intensity difference might
represent a shading effect. The fuzzy logic approach for image processing allows you to use
membership functions to define the degree to which a pixel belongs to an
edge or a uniform region.
Import RGB Image and Convert to Grayscale
I' = 0.2989*I(:,:,1)+0.5870*I(:,:,2)+0.1140*I(:,:,3); figure; image(I','DataMapping','scaled'); colormap('gray'); title('Input Image in Grayscale')
Convert Image to Double-Precision Data
I = double(I');
Type = class(I'); scaling = double(intmax(Type)); I = I/scaling;
Obtain Image Gradient
Gx = [-1 1]; Gy = Gx'; Ix = conv2(I,Gx,'same'); Iy = conv2(I,Gy,'same'); figure; image(Ix,'DataMapping','scaled'); colormap('gray'); title('Ix'); figure; image(Iy,'DataMapping','scaled'); colormap('gray'); title('Iy');
Define Fuzzy Inference System (FIS) for Edge Detection
edgeFIS = newfis('edgeDetection');edgeFIS = addvar(edgeFIS,'input','Ix',[-1 1]); edgeFIS = addvar(edgeFIS,'input','Iy',[-1 1]);
sx = 0.1; sy = 0.1; edgeFIS = addmf(edgeFIS,'input',1,'zero','gaussmf',[sx 0]); edgeFIS = addmf(edgeFIS,'input',2,'zero','gaussmf',[sy 0]);
edgeFIS = addvar(edgeFIS,'output','Iout',[0 1]);
wa = 0.1; wb = 1; wc = 1; ba = 0; bb = 0; bc = .7; edgeFIS = addmf(edgeFIS,'output',1,'white','trimf',[wa wb wc]); edgeFIS = addmf(edgeFIS,'output',1,'black','trimf',[ba bb bc]);
figure subplot(2,2,1); plotmf(edgeFIS,'input',1); title('Ix'); subplot(2,2,2); plotmf(edgeFIS,'input',2); title('Iy'); subplot(2,2,[3 4]); plotmf(edgeFIS,'output',1); title('Iout')
Specify FIS Rules
Evaluate FIS
Plot Results