📄 cfed.m
字号:
function A = CFED(I,lo,hi,w);
% Competitive fuzzy edge detection
% Applied Soft Computing, Volume 3, Issue 2, September 2003, Pages 123-137
% Lily Rui Liang and Carl G. Looney
c0=[lo lo lo lo];
c1=[lo hi hi hi];
c2=[hi lo hi hi];
c3=[hi hi lo hi];
c4=[hi hi hi lo];
c5=[hi hi hi hi];
%done for this image
hei = 256;
wid = 256;
%%%%%%%%
for i = 1:hei
for j = 1:wid
%construct feature vector x
d1 = compud(I,i,j,1);
d2 = compud(I,i,j,2);
d3 = compud(I,i,j,3);
d4 = compud(I,i,j,4);
x = [d1 d2 d3 d4];
%Compute membership function
m0 = compuMS(x,c0,w);
I(i,j)=1;%white:calss0
m1 = compuMS(x,c1,w);
if m1>m0
I(i,j)=2;%class1
end;
m2 = compuMS(x,c2,w);
if m2>max(m1,m0)
I(i,j)=3;%class2
end;
m3 = compuMS(x,c3,w);
if m3>max(m2,m1,m0)
I(i,j)=4;%class3
end;
m4 = compuMS(x,c4,w);
if m4>max(m3,m2,m1,m0)
I(i,j)=5;%class4
end;
m5 = compuMS(x,c5,w);
if m5>max(m4,m3,m2,m1,m0)
I(i,j)=0;%black:class5
end;
end;
%competitive rules
for i = 1:hei
for j = 1:wid
if I(i,j)==2 %class1
NH1x=i-1;
NH1y=j+1;
NH2x=i+1;
NH2y=j-1;
P=compud(I,i,j,3);
NH1= compud(I,NH1x,NH1y,3);%p3
NH2= compud(I,NH2x,NH2y,3);%p7
elseif I(i,j)==3 %class2
NH1x=i;
NH1y=j-1;
NH2x=i;
NH2y=j+1;
P=compud(I,i,j,4);
NH1= compud(I,NH1x,NH1y,4);%p4
NH2= compud(I,NH2x,NH2y,4);%p6
elseif I(i,j)==4 %class3
NH1x=i-1;
NH1y=j-1;
NH2x=i+1;
NH2y=j+1;
P=compud(I,i,j,1);
NH1= compud(I,NH1x,NH1y,1);%p1
NH2= compud(I,NH2x,NH2y,1);%p9
elseif I(i,j)==5 %class4
NH1x=i-1;
NH1y=j;
NH2x=i+1;
NH2y=j;
P=compud(I,i,j,2);
NH1= compud(I,NH1x,NH1y,2);%p2
NH2= compud(I,NH2x,NH2y,2);%p8
end;
if P>max(NH1,NH2)
I(i,j)=0;%black
I(NH1x,NH1y)=1;
I(NH2x,NH2y)=1;
elseif NH1>max(P,NH2)
I(i,j)=1;
I(NH1x,NH1y)=0;%black
I(NH2x,NH2y)=1;
else
I(i,j)=1;
I(NH1x,NH1y)=1;
I(NH2x,NH2y)=0;%black
end;
end;
end;
end;
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -