?? pcnn.m
字號:
function[Edge,Numberofaera] = pcnn(X)
% X:輸入的灰度圖像,Edge:為檢測到的一些邊界點
% Numberofaera:表明了在各次迭代激活的塊區(qū)域
X = (imread('C:\shi.BMP'));
ADD = imnoise(X,'salt & pepper', 0.1);
%X=ADD./max(max(ADD))
figure,imshow(ADD);
X = double(ADD);
Weight = [0.5 1 0.5;1 0 1;0.5 1 0.5];
Beta = 0.4;
Yuzhi = 240;
Decay = 0.3;
[a,b] = size(X);
Threshold = zeros(a,b);
S = zeros(a+2,b+2);
B = zeros(a,b); %標(biāo)記樣板,表明該pixel是否被激活過
Y = zeros(a,b);
T = zeros(a,b);
Edge = zeros(a,b);
Numberofaera = zeros(a,b);
Numberofaera_1 = zeros(a,b);
Num_1 = 0;
Num = 0;
n=1;
while (sum(sum(B))~=256*256)
for i0=2:a+1
for i1=2:b+1
V=[ S(i0-1,i1-1) S(i0-1,i1) S(i0-1,i1+1);
S(i0,i1-1) S(i0,i1) S(i0-1,i1+1);
S(i0+1,i1-1) S(i0+1,i1) S(i0+1,i1+1)];
L=sum(sum(V.*Weight));
F=X(i0-1,i1-1);
U=double(F)*(1+Beta*double(L));
if U>=Threshold(i0-1,i1-1)|Threshold(i0-1,i1-1)<60
T(i0-1,i1-1) = Yuzhi;
Y(i0-1,i1-1) = 1;
if n==1
B(i0-1,i1-1) = 0;
else
B(i0-1,i1-1) = 1;%已發(fā)射過的標(biāo)記
Threshold(i0-1,i1-1) = 1000000;
end
else
T(i0-1,i1-1) = 0;
Y(i0-1,i1-1) = 0;
end
end
end
Threshold(find(B~=1)) = exp(-Decay)*Threshold(find(B~=1));
%被激活過的象素不再參與迭代過程
if(n~=1)
Edge=Edge+judge_edge(Y,n);
%邊界點被置零,Y本身是激發(fā)的象素,現(xiàn)在邊界被置零,也不能說是白激發(fā)了
%B矩陣有記錄!當(dāng)然下次不能再被激發(fā)了
Y(find(Edge<0)) = 0;
[ Numberofaera_1,Num_1] = bwlabel(Y,4);
for i=1:a
for j=1:b
if Numberofaera_1(i,j) ~= 0
Numberofaera_1(i,j) = Numberofaera_1(i,j)+Num;
end
end
end
Numberofaera = Numberofaera + Numberofaera_1;
Num = Num_1;
end
if n == 1
S = zeros(a+2,b+2);
else
S = Bianhuan(T);
end
n = n + 1;
Numberofaera_1 = zeros(a,b);
end
figure,imshow(Y);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -