图像质量评估系统的Matlab GUIDE实现(一)——介绍与导入图像

这是我毕业设计的题目,闲来没事在此整理一下。

本系统使用matlab的guide实现,最终其布局如下:

图像质量评估系统的Matlab GUIDE实现(一)——介绍与导入图像_第1张图片

图中各控件与代码中的标记名(Tag)以及主要功能:

控件名 Tag 描述
全参考评估 radiobutton1 选择评估方法
无参考评估 radiobutton2 选择评估方法
导入源图像 pushbutton1 导入图像
导入参考图像 pushbutton2 导入图像
评估 pushbutton3 执行评估
查看运行日志 pushbutton4 显示/关闭静态文本
计算综合权值 pushbutton5 弹窗显示多算法的综合权值
坐标轴左 axex1 显示源图像
坐标轴右大 axex2 显示参考图像
坐标轴右小 axex3 模拟进度条显示运行进度
表格 uitable 显示评估结果
多选组 checkbox1-7 选择参与评估的算法
静态文本 text2 显示运行日志

该系统功能如下:

图像质量评估系统的Matlab GUIDE实现(一)——介绍与导入图像_第2张图片

运行流程如下:

 

图像质量评估系统的Matlab GUIDE实现(一)——介绍与导入图像_第3张图片

初始页面:

图像质量评估系统的Matlab GUIDE实现(一)——介绍与导入图像_第4张图片

点击“全参考评估”或无参考评估:

图像质量评估系统的Matlab GUIDE实现(一)——介绍与导入图像_第5张图片

图像质量评估系统的Matlab GUIDE实现(一)——介绍与导入图像_第6张图片

分别导入图像后,在右上角选择算法,点击评估按钮:

图像质量评估系统的Matlab GUIDE实现(一)——介绍与导入图像_第7张图片

最后打开工作日志和显示综合权值:(每个算法的权值可在表格右侧修改) 

图像质量评估系统的Matlab GUIDE实现(一)——介绍与导入图像_第8张图片

一、选择方法(全参考/无参考) 

这是操作的第一步,在系统运行的各个阶段点击rabiobutton时,都要产生如之前产生所示的效果(全参考显示两个示例图和两个导入图像按钮,无参考只显示左边),需要更改其他的显示状态,使得在任意环境下点击按钮显示的都为同一效果。

在GUIDE中,使用set(handles.控件tag,属性名,属性)来更改某个控件的属性值或使用get(handles.控件tag,属性名)来获得某个属性值,如果想要判断get返回的字符串是否为想要的字符串,需要使用strcmp(),而不能直接使用==。

1.点击radiobutton1(全参考算法):

radiobutton2设置为不点击(value为0),进度条回到初始等待状态(通过mywaitbar自定义函数),显示(visiable=='on')评估、导入图像按钮(pushbutton1-3),显示实例图像,显示可选算法的多选框(checkbox1-7),并显示将显示的名字(String)改为算法名:

function radiobutton1_Callback(hObject, eventdata, handles)
set(handles.pushbutton5,'Visible','off');
mywaitbar(0,handles,'Waitting...');
set(handles.radiobutton1,'value',1);
set(handles.radiobutton2,'value',0);
%显示参考图像 以及可选方法
set(handles.axes2,'Visible','on') 
set(handles.uitable,'Visible','off') 
set(handles.text2,'Visible','off') 
set(handles.pushbutton1,'Visible','on')
set(handles.pushbutton2,'Visible','on')
set(handles.pushbutton3,'Visible','on')
set(handles.uipanel1,'Visible','on')
set(handles.checkbox1,'Visible','on')
set(handles.checkbox2,'Visible','on')
set(handles.checkbox3,'Visible','on')
set(handles.checkbox4,'Visible','on')
set(handles.checkbox5,'Visible','on')
set(handles.checkbox6,'Visible','on')
set(handles.checkbox7,'Visible','on')
set(handles.checkbox8,'Visible','on')
set(handles.checkbox1,'String','MSE+PSNR')
set(handles.checkbox2,'String','JND')
set(handles.checkbox3,'String','PDM')
set(handles.checkbox4,'String','SSIM')
set(handles.checkbox5,'String','SIE')
set(handles.checkbox6,'String','QILV+PCQI')
set(handles.checkbox7,'String','VIF')
set(handles.checkbox8,'String','FD')
%显示示例图片 
I_example = imread('example.png');
axes(handles.axes1);
imshow(I_example);
axes(handles.axes2);
imshow(I_example);

在GUIDE的function可以不加end和缩进。

2.同理radiobutton2(无参考算法)类似,无参考中使用的算法较少,只使用checkbox的部分并修改String:

function radiobutton2_Callback(hObject, eventdata, handles)
set(handles.pushbutton5,'Visible','off');
mywaitbar(0,handles,'Waitting...');
set(handles.radiobutton1,'value',0);
set(handles.radiobutton2,'value',1);
set(handles.axes2,'Visible','off') %无参考只需要一张图 第二个及按钮隐藏
axes(handles.axes2);
cla;
set(handles.pushbutton1,'Visible','on')
set(handles.pushbutton2,'Visible','off')
set(handles.pushbutton3,'Visible','on')
set(handles.uipanel1,'Visible','on')
set(handles.checkbox1,'Visible','on')
set(handles.checkbox2,'Visible','on')
set(handles.checkbox3,'Visible','off')%调整大小 第三个关闭
set(handles.checkbox4,'Visible','on')
set(handles.checkbox5,'Visible','on')
set(handles.checkbox6,'Visible','off')
set(handles.checkbox7,'Visible','off')
set(handles.checkbox8,'Visible','off')
set(handles.checkbox1,'String','BRISQUE')
set(handles.checkbox2,'String','CNotR_NSS')
set(handles.checkbox3,'String','NOT DISPLAY')
set(handles.checkbox4,'String','UCIQE')
set(handles.checkbox5,'String','UIQM')
set(handles.checkbox6,'String','NOT DISPLAY')
set(handles.checkbox7,'String','NOT DISPLAY')
set(handles.checkbox8,'String','NOT DISPLAY')
set(handles.uitable,'Visible','off') 
set(handles.text2,'Visible','off') 
%示例图片
I_example = imread('example.png');
axes(handles.axes1);
imshow(I_example);

只令axes的visiable为off是不行的,必须使用axex(.....);cla ;才可以关闭该axes,否则还会留在界面上。

二、导入图像(pushbutton1-2)

1.导入源图像(待评估图像)(pushbutton1):

点击时会从弹出本地文件选择窗口(系统函数uigetfile),选择完成后从选择的路径读取图像,由于读取是在函数内进行,变量作用域为函数内,所以在imread前应声明该变量(I1)为全局变量(global I1)。

根据发生的条件,关闭结果显示、日志显示(uitable 和text2 slider)[点击导入图像前上次评估完成],如果选择的是全参考算法,那么还要显示第二个预览图和第二个输入图像按钮,否则无法导入参考图像。

function pushbutton1_Callback(hObject, eventdata, handles)
[filename,pathname]=uigetfile({'*.png';'*.jpg';'*.bmp';'*.tif';'*.*'},'载入图像');
   if isequal(filename,0)||isequal(pathname,0)
      errordlg('No Files Selected!','ERROR');
   return;
   else 
   file=[pathname,filename];
   end
global I1;%设置全局变量
I1 = imread(file);
axes(handles.axes1);
imshow(I1);
set(handles.uitable,'Visible','off');
set(handles.text2,'Visible','off');
set(handles.slider1,'Visible','off');
set(handles.pushbutton4,'String','打开运行日志');
if get(handles.radiobutton1,'Value')
    set(handles.pushbutton2,'Visible','on');
end
mywaitbar(0,handles,'Waitting...');

2.导入参考图像按钮类似。

function pushbutton2_Callback(hObject, eventdata, handles)
[filename,pathname]=uigetfile({'*.png';'*.jpg';'*.bmp';'*.tif';'*.*'},'载入图像');
   if isequal(filename,0)||isequal(pathname,0)
      errordlg('No Files Selected!','ERROR');
   return;
   else 
   file=[pathname,filename];
   end
global I2;
I2 = imread(file);
axes(handles.axes2);
imshow(I2);
set(handles.uitable,'Visible','off');
set(handles.slider1,'Visible','off');
set(handles.text2,'Visible','off');
set(handles.pushbutton4,'String','打开运行日志');
mywaitbar(0,handles,'Waitting...');

未完待续。。。

你可能感兴趣的:(图像质量)