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