📄 acutance.m
字号:
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 + -