• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-11
  • 语言: Matlab
  • 标签: 边缘检测  

资源简介

采用PCNN算法进行边缘检测

资源截图

代码片段和文件信息

function [EdgeNumberofaera]=pcnn(X)
% 功能:采用PCNN算法进行边缘检测
% 输入:X—输入的灰度图像
% 输出:Edge—检测到的       Numberofaera—表明了在各次迭代时激活的块区域
figure(1);
imshow(X); 
X=double(X);
% 设定权值
Weight=[0.07 0.1 0.07;0.1 0 0.1;0.07 0.1 0.07]; 
WeightLI2=[-0.03 -0.03 -0.03;-0.03 0 -0.03;-0.03 -0.03 -0.03];
d=1/(1+sum(sum(WeightLI2)));
%%%%%%测试权值%%%%%%
WeightLI=[-0.03 -0.03 -0.03;-0.03 0.5 -0.03;-0.03 -0.03 -0.03];
d1=1/(sum(sum(WeightLI)));
%%%%%%%%%%%%%%%%%%
Beta=0.4;  
Yuzhi=245;
%衰减系数
Decay=0.3;   
[ab]=size(X);
V_T=0.2;
%门限值
Threshold=zeros(ab);  
S=zeros(a+2b+2);
Y=zeros(ab);
%点火频率
Firate=zeros(ab); 
n=1;
%统计循环次数
count=0; 
Tempu1=zeros(ab); 
Tempu2=zeros(a+2b+2); 
%%%%%%图像增强部分%%%%%%
Out=zeros(ab);
Out=uint8(Out);
for i=1:a
for j=1:b
 if(i==1|j==1|i==a|j==b)
  Out(ij)=X(ij);
 else  
  H=[X(i-1j-1)  X(i-1j) X(i-1j+1);
     X(ij-1)   X(ij)   X(ij+1);
    X(i+1j-1) X(i+1j) X(i+1j+1)]; 
 temp=d1*sum(sum(H.*WeightLI));
 Out(ij)=temp;
 end
 end
end
figure(2);
imshow(Out); 
%%%%%%%%%%%%%%%%%%%
for count=1:30 
 for i0=2:a+1
    for i1=2:b+1
         V=[S(i0-1i1-1)  S(i0-1i1) S(i0-1i1+1);
             S(i0i1-1)   S(i0i1)   S(i0i1+1);
             S(i0+1i1-1) S(i0+1i1) S(i0+1i1+1)];
           L=sum(sum(V.*Weight));
           V2=[Tempu2(i0-1i1-1)  Tempu2(i0-1i1) Tempu2(i0-1i1+1);
               Tempu2(i0i1-1)   Tempu2(i0i1)   Tempu2(i0i1+1);
               Tempu2(i0+1i1-1) Tempu2(i0+1i1) Tempu2(i0+1i1+1)];        F=X(i0-1i1-1)+sum(sum(V2.*WeightLI2));
%保证侧抑制图像无能量损失
F=d*F; 
U=double(F)*(1+Beta*double(L));                          
Tempu1(i0-1i1-1)=U;
    if U>=Threshold(i0-1i1-1)|Threshold(i0-1i1-1)<60
      T(i0-1i1-1)=1;
      Threshold(i0-1i1-1)=Yuzhi;
       %点火后一直置为

评论

共有 条评论