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

    function LocalFeatureImEn
  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 EnLabel
  if(EnLabel=='m')
       g=LocalMenaChange(X,1,2);
   elseif(EnLabel=='v')
       g=LocalStdChange(X,3);
   elseif(EnLabel=='f')
       g=Normal2CorrEstim2(X,5);
   else
      errordlg('输入参数错误');break; 
  end 
 
  figure
 colormap(gray)
subplot(1,2,1)
imagesc(X)
title('原图像')
subplot(1,2,2)
imagesc(g)
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