一、简介
matlab基于数字图像处理的微表情识别系统,微表情是人们在情绪变化时面部瞬间闪现的微妙表情。尽管这些表情可能只持续了几百分之一秒,但它们却能够揭示出人们试图隐藏的真实情感。因此,微表情识别在情感分析、心理探测、安全审查等领域具有广泛的应用前景。近年来,随着数字图像处理技术的飞速发展,基于数字图像处理的微表情识别系统成为了研究的热点。
二、部分源码
function varargout = MainForm(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @MainForm_OpeningFcn, ...
'gui_OutputFcn', @MainForm_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% --- Executes just before MainForm is made visible.
function MainForm_OpeningFcn(hObject, eventdata, handles, varargin)
rand('seed', 0);
% Choose default command line output for MainForm
handles.output = hObject;
handles.Img = 0;
handles.G = 0;
axes(handles.axes1); cla reset;
set(handles.axes1, 'Box', 'on', 'Color', 'w', 'XTickLabel', '', 'YTickLabel', '');
set(handles.textResult, 'String', '');
% Update handles structure
guidata(hObject, handles);
% --- Outputs from this function are returned to the command line.
function varargout = MainForm_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% 获取人脸数据库
GetDatabase();
msgbox('载入表情图像完毕', '提示信息');
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% Gabor特征提取
GaborDatabse();
msgbox('Gabor特征提取完毕', '提示信息');
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% PCA降维处理
PcaDataBase();
msgbox('PCA降维处理完毕', '提示信息');
% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
S = GetTrainData();
Elm_Type = 1;
NumberofHiddenNeurons = 200;
ActivationFunction = 'sin';
[TrainingTime,TrainingAccuracy] = elm_train(S, Elm_Type, ...
NumberofHiddenNeurons, ActivationFunction);
msgbox('ELM训练完毕', '提示信息');
% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
% 载入待识别图像
% 载入图像
[FileName,PathName,FilterIndex] = uigetfile({'*.tiff;*.jpg;*.tif;*.png;*.gif','All Image Files';...
'*.*','All Files' },'载入图像',...
'./Test/im1.tiff');
if isequal(FileName, 0) || isequal(PathName, 0)
return;
end
file = fullfile(PathName, FileName);
Img = imread(file);
imshow(Img, [], 'Parent', handles.axes1);
handles.Img = Img;
guidata(hObject, handles);
set(handles.textResult, 'String', '');
% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
% ELM分类识别
if isequal(handles.G, 0)
return;
end
Img = handles.Img;
G = handles.G;
G = imresize(G, [128 128], 'bilinear');
load(fullfile(pwd, 'model.mat'));
b = G(:);
b = double(b);
% 计算每幅测试图像的主成分,即计算它们在变换后坐标系上的投影,是1×p阶矩阵
b = b(:);
tcoor = b'*base;
c = tcoor;
data = [1 c(:)'];
[TestingTime, TestingAccuracy,output] = elm_predict(data, Img);
switch output
case 1
str = '中性脸';
case 2
str = '高兴';
case 3
str = '悲伤';
case 4
str = '惊讶';
case 5
str = '愤怒';
case 6
str = '厌恶';
case 7
str = '恐惧';
otherwise
str = '中性脸';
end
set(handles.textResult, 'String', str);
% --- Executes on button press in pushbutton7.
function pushbutton7_Callback(hObject, eventdata, handles)
if isequal(handles.Img, 0)
return;
end
Img = handles.Img;
if ndims(Img) == 3
I = rgb2gray(I);
else
I = Img;
end
% 提取gabor特征
[G,gabout] = gaborfilter(I,2,4,16,pi/3);
imshow(gabout, [], 'Parent', handles.axes1);
handles.G = gabout;
guidata(hObject, handles);
% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
% 退出系统
choice = questdlg('确定退出?', ...
'退出', ...
'是','否','取消','取消');
switch choice
case '是'
close;
end
三、运行结果
四、matlab版本
MATLAB R2019a
五、学习与交流
文中不足之处请大家多多指教,学习与交流可以联系企鹅:3752243968
文中部分源码仅供参考,若需要全部代码可以私信