⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acutance.m

📁 对图像进行多种分析、变化
💻 M
📖 第 1 页 / 共 2 页
字号:
function Acutance(action)

%=================================

if nargin<1, action='start'; end

global  FIG M N L MAG flag sig
global  org For For0 For1 im Lap
global  menu1 opiA menuA
global  menu2 menuB opiB
global  menu3 menuC edgA
global  menu4 menuD
global  ax1 ax2 ax3 ax4 ax5 ax7
global  fig1 fig2 fig3 fig4 fig5 
global  te1 te2 te3 te4 te5 te6 te7 te8 te9 te10 te11 te12 te13 te14 te15 te16
global  dd30 dd31 dd32 dd33 dd34 dd35 dd10 dd20 dd11 dd21
global  x1 x2 x3 x4
%==================================   
if strcmp(action,'start'),
    
    bgc=[1 1 1];
    flag=0;sig=0;
    org=[];For=[]; For0=[]; For1=[];
    SCR=get(0,'ScreenSize');
    MAG=0.8*SCR(3)/520;
    Z=[130 20 500 370]*MAG;
    dd30=0; dd31=0; dd32=0; dd33=0; dd34=0; dd35=0; dd10=0; dd20=0; dd11=0; dd21=0;
    
    FIG=figure('MenuBar','none','Position',Z,'color', bgc,'Number','off', ...
                'Name','图像局部锐度检测');
    
    ax0=axes('position',[0,0.5,0.6,0.5],'XTick',[],'YTick',[]);   %background
    a=imread('bg.jpg');
    image(a);
    set(ax0,'Visible','off');   
     
    ax00=axes('position',[0.51,0,0.5,0.35],'XTick',[],'YTick',[]);
    aa=imread('bg1.jpg');
    image(aa);
    set(ax00,'Visible','off');   
     
    uicontrol(gcf,'Style','push','String','调入新图像','FontSize',12,'FontWeight','b','backgroundcolor',[1 0.9 0.9],...
    'Position',[4 335 115 15]*MAG,'CallBack','Acutance(''actL'');');
    
    uicontrol(gcf,'Style','push','String','选择需要分析的区域','FontSize',12,'FontWeight','b','backgroundcolor',[1 0.9 0.9],...
    'Position',[4 305 115 15]*MAG,'CallBack','Acutance(''actR'');');

    menu1=uicontrol(gcf,'Style','popupmenu','String','原始图像|所选区域1|所选区域2','FontSize',12,'FontWeight','b',...
    'backgroundcolor',[1 0.9 0.9],'Position',[4 275 55 15]*MAG,'CallBack','Acutance(''pop1'');');
    uicontrol(gcf,'Style','push','String','傅立叶变换','FontSize',12,'Fontweight','b',...
    'backgroundcolor',[1 0.9 0.9],'position',[61 275 58 15]*MAG,'CallBack','Acutance(''actF'');');
           
    menu2=uicontrol(gcf,'Style','popupmenu','String','所选区域1|所选区域2','FontSize',12,'FontWeight','b',...
    'backgroundcolor',[1 0.9 0.9],'Position',[4 245 115 15]*MAG,'CallBack','Acutance(''pop2'');'); 
     
    menu3=uicontrol(gcf,'Style','popupmenu','String','检测方法一:Roberts|检测方法二:Sobel','FontSize',12,'FontWeight','b',...
    'backgroundcolor',[1 0.9 0.9],'Position',[4 228 115 15]*MAG,'CallBack','Acutance(''edgeC'');');
     
    menu4=uicontrol(gcf,'Style','popupmenu','String','模式1|模式2|模式3','FontSize',12,'FontWeight','b',...
    'backgroundcolor',[1 0.9 0.9],'Position',[4 211 55 15]*MAG,'CallBack','Acutance(''edgeM'');');
    uicontrol(gcf,'Style','push','String','边缘检测','FontSize',12,'FontWeight','b','Position',[61 211 58 15]*MAG,...
    'BackgroundColor',[1 0.9 0.9],'CallBack','Acutance(''edgeAp'');');

    ax1=axes('position',[0.01,0.2,0.25,0.25],'XTick',[],'YTick',[],'Box','on'); 
    im1=imread('butterfly300.jpg');fig1=imshow(im1);org=im1;
    uicontrol(gcf,'style','text','String','(a) 原始图像','FontSize',10,'FontWeight','b','position',[35 175 50 12]*MAG,'BackgroundColor','w');
   
    
    ax2=axes('position',[0.35,0.68,0.25,0.25],'XTick',[],'YTick',[],'Box','on');
    fig2=imshow(im1);
    uicontrol(gcf,'style','text','String','(b) 所选区域1','FontSize',10,'FontWeight','b','position',[209 350 50 12]*MAG,'BackgroundColor','w');
    
    ax3=axes('position',[0.7,0.68,0.25,0.25],'XTick',[],'YTick',[],'Box','on');
    fig3=imshow(im1);
    uicontrol(gcf,'style','text','String','(c) 所选区域2','FontSize',10,'FontWeight','b','position',[360 350 100 12]*MAG,'BackgroundColor','w');
     
    ax4=axes('position',[0.35,0.38,0.25,0.25],'XTick',[],'YTick',[],'Box','on');
    Gray=rgb2gray(im1);im4=fftshift(fft2(double(Gray)));fig4=imshow(log(abs(im4)),[]);
    uicontrol(gcf,'style','text','String','(d) 傅立叶变换','FontSize',10,'FontWeight','b','position',[185 235 100 12]*MAG,'BackgroundColor','w');
     
    ax5=axes('position',[0.7,0.38,0.25,0.25],'XTick',[],'YTick',[],'Box','on');
    im5=roberts(double(Gray));fig5=image(im5);
    uicontrol(gcf,'style','text','String','(e) 边缘提取','FontSize',10,'FontWeight','b','position',[360 235 100 12]*MAG,'BackgroundColor','w');
    set(ax5,'vis','off');
    
    uicontrol(gcf,'Style','push','String','帮助','FontSize',12,'FontWeight','b',...
         'backgroundcolor',[0.7 0.7 0.9],'Position',[3 50 50 12]*MAG,'CallBack','Acutance(''info'');');
    
    uicontrol(gcf,'Style','push','String','导出数据','FontSize',12,'FontWeight','b',...
         'backgroundcolor',[0.7 0.7 0.9],'Position',[3 35  50 12]*MAG,'CallBack','Acutance(''output'');');
    
    uicontrol(gcf,'Style','push','String','重置','FontSize',12,'FontWeight','b',...
         'backgroundcolor',[0.7 0.7 0.9],'Position',[3 20  50 12]*MAG,'CallBack','Acutance(''reset'');');
 
    uicontrol(gcf,'Style','push','String','关闭','FontSize',12,'FontWeight','b',...
                'backgroundcolor',[0.7 0.7 0.9],'Position',[3 5 50 12]*MAG,'CallBack','Acutance(''done'');');
    
    ax6=axes('position',[0.35,0.32,0.15,0.05],'Xtick',[],'Ytick',[],'XtickL',[],'YtickL',[]);
    text(0,0,'图像局部锐度特征','FontSize',10,'FontWeight','b');
    set(ax6,'vis','off');
    ax7=axes('position',[0.35,0.05,0.6,0.25],'Xtick',[0 1/2 1],'Ytick',[0 1/8 2/8 3/8 4/8 5/8 6/8 7/8 1],'box','on','XtickL',[],'YtickL',[],'Color',[1 1 0.5]);grid on;
    text(0.01,0.93,'均值:','FontSize',10,'FontWeight','b');d1=round(mean(double(im1(:)))*100)/100;te1=text(0.1,0.93,num2str(d1),'FontSize',10,'FontWeight','b');
    text(0.01,0.80,'标准差:','FontSize',10,'FontWeight','b');d2=round(std(double(im1(:)))*100)/100;te2=text(0.14,0.80,num2str(d2),'FontSize',10,'FontWeight','b');
    text(0.01,0.67,'Roberts均值:','FontSize',10,'FontWeight','b');d3=round(mean(double(im5(:)))*100)/100;te3=text(0.19,0.67,num2str(d3),'FontSize',10,'FontWeight','b');
    text(0.01,0.55,'Roberts标准差:','FontSize',10,'FontWeight','b');d4=round(std(double(im5(:)))*100)/100;te4=text(0.21,0.55,num2str(d4),'FontSize',10,'FontWeight','b');
    text(0.01,0.42,'Sobel均值:','FontSize',10,'FontWeight','b');te9=text(0.17,0.42,'无','FontSize',10,'FontWeight','b');
    text(0.01,0.30,'Sobel标准差:','FontSize',10,'FontWeight','b');te10=text(0.19,0.30,'无','FontSize',10,'FontWeight','b');
    text(0.01,0.18,'Laplace均值:','FontSize',10,'FontWeight','b');im=double(Gray);Acutance('Laplace');d7=round(mean(double(Lap(:)))*100)/100;te13=text(0.19,0.18,num2str(d7),'FontSize',10,'FontWeight','b');
    text(0.01,0.05,'Laplace标准差:','FontSize',10,'FontWeight','b');d8=round(std(double(Lap(:)))*100)/100;te14=text(0.21,0.05,num2str(d8),'FontSize',10,'FontWeight','b');
    text(0.51,0.93,'均值:','FontSize',10,'FontWeight','b');te5=text(0.6,0.93,num2str(d1),'FontSize',10,'FontWeight','b');
    text(0.51,0.80,'标准差:','FontSize',10,'FontWeight','b');te6=text(0.64,0.80,num2str(d2),'FontSize',10,'FontWeight','b');
    text(0.51,0.67,'Roberts均值:','FontSize',10,'FontWeight','b');te7=text(0.69,0.67,num2str(d3),'FontSize',10,'FontWeight','b');
    text(0.51,0.55,'Roberts标准差:','FontSize',10,'FontWeight','b');te8=text(0.71,0.55,num2str(d4),'FontSize',10,'FontWeight','b');
    text(0.51,0.42,'Sobel均值:','FontSize',10,'FontWeight','b');te11=text(0.67,0.42,'无','FontSize',10,'FontWeight','b');
    text(0.51,0.30,'Sobel标准差:','FontSize',10,'FontWeight','b');te12=text(0.69,0.30,'无','FontSize',10,'FontWeight','b');
    text(0.51,0.18,'Laplace均值:','FontSize',10,'FontWeight','b');te15=text(0.69,0.18,num2str(d7),'FontSize',10,'FontWeight','b');
    text(0.51,0.05,'Laplace标准差:','FontSize',10,'FontWeight','b');te16=text(0.71,0.05,num2str(d8),'FontSize',10,'FontWeight','b');
    
    %========================================子函数
elseif strcmp(action,'actL'),
    org=loadimage('Load the original image');    
    [M,N,L]=size(org);
    sig=1;
   
    set(gcf,'currentaxes',ax1); 
    if N/M==1,
        org1=imresize(org,[256 256]);
        x=(0.01*500*MAG+0.25/2*500*MAG- 256/2)/(500*MAG);
    elseif N/M<1,
        a=N/M;
        b=round(240*a);
        org1=imresize(org,[240 b]);
        x=(0.01*500*MAG+0.25/2*500*MAG-b/2)/(500*MAG);
    else
        a=N/M;
        b=round(300/a);
        org1=imresize(org,[b 300]);
        x=(0.01*500*MAG+0.25/2*500*MAG-300/2)/(500*MAG)+0.02;
    end
    set(ax1,'position',[x,0.2,0.25,0.25]);
    set(fig1,'CData',org); 
   
    
    set(fig1,'ButtonDownFcn','Acutance(''actE1'');');set(ax1,'vis','off');
    set(fig2,'CData',[]);set(gcf,'currentaxes',ax2);set(ax2,'Color',[.9 .9 .9],'Box','on','vis','on','XTick',[],'YTick',[]);
    set(fig3,'CData',[]);set(gcf,'currentaxes',ax3);set(ax3,'Color',[.9 .9 .9],'Box','on','vis','on','XTick',[],'YTick',[]);
    set(fig4,'CData',[]);set(gcf,'currentaxes',ax4);set(ax4,'Color',[.9 .9 .9],'Box','on','vis','on','XTick',[],'YTick',[]);
    set(fig5,'CData',[]);set(gcf,'currentaxes',ax5);set(ax5,'Color',[.9 .9 .9],'Box','on','vis','on','XTick',[],'YTick',[]);
    Gray=[];Higtog=[];opiA=[];opiB=[];flag=0;
    set(fig5,'CData',[]);
    set(gcf,'currentaxes',ax7);set(te1,'string',[]);set(te2,'string',[]);set(te3,'string',[]);
    set(te4,'string',[]);set(te5,'string',[]);set(te6,'string',[]);set(te7,'string',[]);
    set(te8,'string',[]);set(te9,'string',[]);set(te10,'string',[]);set(te11,'string',[]);
    set(te12,'string',[]);set(te13,'string',[]);set(te14,'string',[]);set(te15,'string',[]);set(te16,'string',[]);
%=====================================
elseif strcmp(action,'actE1'),
    figure(FIG);
    if L==3,
       Gray=rgb2gray(org);
       Histog=histeq(Gray); 
    elseif L==1,  
       Histog=histeq(org); 
    end
    set(gcf,'currentaxes',ax1);
    set(fig1,'CData',Histog);
    
%========================================
elseif strcmp(action,'actR'),
    figure(FIG);
  if sig==1,
    set(gcf,'currentaxes',ax1);
    Rect=getrect;
    Cmin=fix(max(Rect(1),1));        
    Rmin=fix(max(Rect(2),1));
    Cmax=fix(min(Rect(1)+Rect(3),N));
    Rmax=fix(min(Rect(2)+Rect(4),M));  
    For=org(Rmin:Rmax,Cmin:Cmax,:);
    n=Cmax-Cmin+1;
   
   
    if flag==0,
       set(gcf,'currentaxes',ax2);
       x1=(0.35*500*MAG+0.25/2*500*MAG-n/2)/(500*MAG);
       x4=(0.7*500*MAG+0.25/2*500*MAG-n/2)/(500*MAG);
       set(ax2,'position',[x1,0.68,0.25,0.25]);
       set(fig2,'CData',For);

       set(ax2,'vis','off');
       set(fig3,'CData',[]);
       set(gcf,'currentaxes',ax3);
       set(ax3,'Color',[.9 .9 .9],'Box','on','vis','on','XTick',[],'YTick',[],'position',[0.7,0.68,0.25,0.25]);
       For0=For;
       set(fig2,'ButtonDownFcn','Acutance(''actE2'');');
       set(gcf,'currentaxes',ax7);
       dd10=round(mean(double(For0(:)))*100)/100;
       dd20=round(std(double(For0(:)))*100)/100;
       set(te1,'string',num2str(dd10));set(te2,'string',num2str(dd20));
         if L==3,
             G=rgb2gray(For0); im=double(G);
         else im=double(For0);
         end  
       Acutance('Laplace');
       dd32=round(mean(double(Lap(:)))*100)/100;dd33=round(std(double(Lap(:)))*100)/100;
       set(te13,'string',num2str(dd32));set(te14,'string',num2str(dd33));
       set(gcf,'currentaxes',ax7);set(te3,'string',[]); set(te4,'string',[]);set(te5,'string',[]);set(te6,'string',[]);
       set(te7,'string',[]);set(te8,'string',[]);set(te9,'string',[]);set(te10,'string',[]);
       set(te11,'string',[]);set(te12,'string',[]);set(te15,'string',[]);set(te16,'string',[]);
       flag=1;
        
    elseif flag==1;
       x2=(0.7*500*MAG+0.25/2*500*MAG-n/2)/(500*MAG);
       x3=(0.35*500*MAG+0.25/2*500*MAG-n/2)/(500*MAG);    
       set(ax3,'position',[x2,0.68,0.25,0.25]);
       set(fig3,'CData',For);
       set(ax3,'vis','off');
       For1=For;
       set(fig3,'ButtonDownFcn','Acutance(''actE3'');');
       set(gcf,'currentaxes',ax7);dd11=round(mean(double(For1(:)))*100)/100;dd21=round(std(double(For1(:)))*100)/100;
       set(te5,'string',num2str(dd11));set(te6,'string',num2str(dd21));
       if L==3,G=rgb2gray(For1); im=double(G);else im=double(For1);end  
       Acutance('Laplace');
       dd34=round(mean(double(Lap(:)))*100)/100;dd35=round(std(double(Lap(:)))*100)/100;
       set(te15,'string',num2str(dd34));set(te16,'string',num2str(dd35));
       set(gcf,'currentaxes',ax7);set(te3,'string',[]); set(te4,'string',[]);
       set(te7,'string',[]);set(te8,'string',[]);set(te9,'string',[]);set(te10,'string',[]);
       set(te11,'string',[]);set(te12,'string',[]);
       flag=0;
       
       end
    set(fig4,'CData',[]);set(gcf,'currentaxes',ax4);set(ax4,'Color',[.9 .9 .9],'Box','on','vis','on','XTick',[],'YTick',[]);
    set(fig5,'CData',[]);set(gcf,'currentaxes',ax5);set(ax5,'Color',[.9 .9 .9],'Box','on','vis','on','XTick',[],'YTick',[]);
  else 
       figure('Units','norm','Pos',[.55 .45 .2 .1],'Name','提示',...
             'Number','off','Menu','none','Units','normalized');
       axes('Pos',[0 0 1 1],'TickDir','out','Color','w');
       text(.5,.5,'请先调入新图像','FontSize',10,'hor','cent');
  end
%=====================================
elseif strcmp(action,'actE2'),
    figure(FIG);
    if L==3,
       Gray=rgb2gray(For0);
       Histog=histeq(Gray); 
    elseif L==1, 
       Histog=histeq(For0); 
    end
    
    set(gcf,'currentaxes',ax2);
    set(ax2,'position',[x1,0.68,0.25,0.25]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -