✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
⛄ 内容介绍
Gabor变换因其良好的时频局部化特性,能够提供最为实质的人脸特征,削弱噪声的干扰,减少计算量,因此将Gabor变换应用于人脸识别与检测具有良好的发展前景
⛄ 部分代码
function varargout = GaussFilter(varargin)
%GaussFilter shows different digital Gaussian filters:
%1 Floating numbers, the values are taken directly from bell curve
%2 Integer numbers, corner value=1, the values are taken directly from bell curve
%3 Integer numbers, corner value=4, the values are taken directly from bell curve
%4 Integer numbers, corner value=1 or 4, Sum of filter = 2^n
%5 Floating numbers, the values are taken by the underlying 3D bell shape volume
%6 Compare 1 and 5
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @GaussFilter_OpeningFcn, ...
'gui_OutputFcn', @GaussFilter_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
% End initialization code - DO NOT EDIT
function GaussFilter_OutputFcn(~, ~,~)%unused
% --- Executes just before GaussFilter is made visible.
function GaussFilter_OpeningFcn(hObject, eventdata, handles, varargin)
%Warning icon:
imWarning=handles.axWarning.UserData;
axes(handles.axWarning);
handles.Warning=imshow(imWarning);%for some reason it deletes tag and userdata of axWarning
set(handles.axWarning,'Tag','axWarning','UserData',imWarning);%Restore values
set(handles.Warning,'Visible','off');
handles.pbCopy.String=['<html><b>Copy</b><br>Vector to clipboard<br>'...
'Filter to workspace</html>'];
handles.output = hObject;
%Create polar axes:
axes(handles.axPolar);
hPolarLine=polarplot(1,1);
handles.axPolar=hPolarLine.Parent;
addlistener(handles.sldSigma,'ContinuousValueChange',...
@(hObject, event) dispSigma(hObject,handles));%Diplay sigma on slider movement
addlistener(handles.sldFrq,'ContinuousValueChange',...
@(hObject, event) dispFrq(hObject,handles));%Diplay sigma on slider movement
dcm_obj = datacursormode(hObject);
set(dcm_obj,'Enable','on','UpdateFcn',{@DataTipUpdate,handles})
guidata(hObject, handles);% Update handles structure
IniSliderFrq(handles)
popR_Callback(hObject, eventdata, handles)
% --- Executes on selection change in 'Filter size'.
function popR_Callback(~, ~, handles)
%Filter size
IniSliderSigma(1,handles)
R=get(handles.popR,'Value');%R=filter radius
Limit=round(0.036*R+0.014,2);
handles.txtSlimit.String=[num2str(Limit) '<' char(963) '<1000'];
setOptButtons(handles);%Set buttons for optimal filter
pbRun_Callback(0, 0, handles)
set(handles.sldSigma,'Enable','on');
function edSigma_Callback(hObject, ~, handles)
%Sigma edit box
S=str2num(hObject.String);
R=get(handles.popR,'Value');
if isempty(S) || S<round(0.036*R+0.014,2)
handles.txtInfo.String=['ERROR:' char(10) 'Please enter a number > '...
num2str(round(0.036*R+0.014,2))];
return
end
[~, index] = min(abs(handles.edSigma.UserData(:,2)-S));
handles.sldSigma.Value=index;
if handles.bgPlot.UserData==4
S=handles.edSigma.UserData(index,2);
set(handles.edSigma,'String',num2str(S,5));
end
if S>99
handles.txtInfo.String=['Warning:' char(10) ...
'High ' char(963) ' may take several minutes to process!'...
char(10) 'click "RUN" to continue.' ];
else
handles.txtInfo.String='';
pbRun_Callback(0, 0, handles)
set(handles.sldSigma,'Enable','on');
end
% --- Executes on slider movement.
function sldSigma_Callback(~, ~, handles)
%Sigma slider
set(handles.sldSigma,'Enable','off');
Sv=round(get(handles.sldSigma,'Value'));
set(handles.edSigma,'String',num2str(handles.edSigma.UserData(Sv,2),5));
drawnow
set(handles.sldSigma,'Enable','off');
pbRun_Callback(0, 0, handles)
set(handles.sldSigma,'Enable','on');
⛄ 运行结果
⛄ 参考文献
[1]QJS, 曲金帅. 基于高斯滤波器的人脸识别方法[J]. 云南民族大学学报:自然科学版, 23(S).