www.gusucode.com > 红外图像增强及目标检测演示界面matlab源码程序 > code/LocalFeatureImSg.m

    function LocalFeatureImSg
  X=U_Open; 
 if (X==0) errordlg('图像打开失败');break; end
  label=inputdlg('若图像为暗目标图像,请输入0,否则输入1','图像类型标志',1,{'1'});
  label=str2num(char(label));
  if(isrgb(X))
          X=rgb2gray(X);
  end
  if(label==1)
      [row col]=size(X);
      X=im2double(X(20:row-20,30:col-30));
  elseif(label==0)
      X=im2double(X);
      X=max(X(:))-X;
  else
       errordlg('输入图像类型错误');break;
  end
  tic
  global SgLabel
  if(SgLabel=='m')
       g=LocalMenaChange(X,1,2);
   elseif(SgLabel=='v')
       g=LocalStdChange(X,3);
   elseif(SgLabel=='f')
       g=Normal2CorrEstim2(X,5);
   elseif(SgLabel=='s')
       g=shannon(X,2);
   else
      errordlg('输入参数错误');break; 
  end 
  [sgf,x1,y1]=regionGrowing(g,4);
  figure
 colormap(gray)
subplot(1,3,1)
imshow(X)
title('原图像')
hold on 
plot([y1-10 y1-10],[x1-10 x1+10 ]);
plot([y1+10 y1+10],[x1-10 x1+10 ]);
plot([y1-10 y1+10],[x1-10 x1-10]);
plot([y1-10 y1+10],[x1+10 x1+10]);
hold off
subplot(1,3,2)
imshow(g)
title('增强图像')
subplot(1,3,3)
imshow(sgf);
title('目标检测结果');
msgbox(['所用时间',num2str(toc),'秒']);
%============================================================================ 
function N_Corr=Normal2CorrEstim2(f,L)
m0=mean2(f);
[row col]=size(f);
N_Corr=zeros(row,col);
for i=L+1:row-L
    for j=L+1:col-L
        if(f(i,j)>m0)
           A=f(i-L:i+L,j-L:j+L);
           mA=mean2(A);
           if(f(i,j)>mA)
              [X Y]=meshgrid(-L:L,-L:L);
              dZ=std2(A);
              dt=111/(dZ+50);
             Z=exp(-(X.^2+Y.^2)/(2*dt^2))/(2*pi*dt^2);
             N_Corr(i,j)=corr2(A,Z);
            end
      end
  end
end
%============================================================
function g=LocalMenaChange(f,ll,LL)
m0=mean2(f);
[row col]=size(f);
g=zeros(row,col);
for i=LL+1:row-LL
    for j=LL+1:col-LL
        if(f(i,j)>m0)
           a=f(i-ll:i+ll,j-ll:j+ll);
           mean_a=mean2(a);
           %if(f(i,j)>mean_a)
            if(mean_a>m0)
               A=f(i-LL:i+LL,j-LL:j+LL);
               mean_A=mean2(A);
               if(mean_a>mean_A)
                   g(i,j)=(mean_a-mean_A)/mean_a;
               end
           end
       end
  end
end
%============================================================================ 
function  g=LocalStdChange(f,LL)
m0=mean2(f);dt0=std2(f);
[row col]=size(f);
g=zeros(row,col);
for i=LL+1:row-LL
    for j=LL+1:col-LL
        if(f(i,j)>m0)
           A=f(i-LL:i+LL,j-LL:j+LL);
           %[sgf,T]=BTW_CLS_V_Segmentation(A);
           dt=std2(A);
           g(i,j)=dt;
       end
  end
end
%============================================================================ 
function S=shannon(f,L)
%计算图像的局部熵,并由S保存,边缘像素不处理
%灰度值小于图像均值的点也不做处理
%假定目标为小目标,即其尺寸在55个想素左右
%局部窗口 半径 L一般取为5、4 、3
 [row col]=size(f);
 S=zeros(row,col);
 f=round(f*255/max(f(:)));
 m=mean2(f);
 for x=6:row-5
     for y=6:col-5
         if(f(x,y)>m)
             W=f(x-L:x+L,y-L:y+L);
             h=hist(W(:),[0:255])/(2*L+1)^2;
             S(x,y)=-h*(log((h==0)+h))';
         end
     end
 end