【表情识别】matlab基于数字图像处理的微表情识别系统【源码44期】

一、简介

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
文中部分源码仅供参考,若需要全部代码可以私信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值