【图像检测】基于帧差法实现人脸实时检测与跟踪Matlab代码

144 阅读3分钟

1 简介

智能视频监控技术是当今前沿的研究课题。它利用图像处理和计算机视觉所涉及到的方法,在实时监控画面中对场景中的运动目标进行检测,跟踪和识别,并在一定程度上分析运动目标的行为,在安全防范,交通管理和事件响应等方面有着重要的应用。而作为智能视频监控技术核心的运动目标检测和识别技术更是日益受到人们的重视,成为人们研究的重点。本文主要研究了智能视频监控系统中的关键技术—运动目标的检测与人脸跟踪,提出了一种固定背景下对运动目标检测的算法。

2 部分代码

function varargout = facedetecion(varargin)
% FACEDETECION MATLAB code for facedetecion.fig
%     FACEDETECION, by itself, creates a new FACEDETECION or raises the existing
%     singleton*.
%
%     H = FACEDETECION returns the handle to a new FACEDETECION or the handle to
%     the existing singleton*.
%
%     FACEDETECION('CALLBACK',hObject,eventData,handles,...) calls the local
%     function named CALLBACK in FACEDETECION.M with the given input arguments.
%
%     FACEDETECION('Property','Value',...) creates a new FACEDETECION or raises the
%     existing singleton*. Starting from the left, property value pairs are
%     applied to the GUI before facedetecion_OpeningFcn gets called. An
%     unrecognized property name or invalid value makes property application
%     stop. All inputs are passed to facedetecion_OpeningFcn via varargin.
%
%     *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
%     instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help facedetecion

% Last Modified by GUIDE v2.5 01-May-2017 19:18:42

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                  'gui_Singleton',  gui_Singleton, ...
                  'gui_OpeningFcn', @facedetecion_OpeningFcn, ...
                  'gui_OutputFcn',  @facedetecion_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


% --- Executes just before facedetecion is made visible.
function facedetecion_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject   handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)
% varargin   command line arguments to facedetecion (see VARARGIN)

% Choose default command line output for facedetecion
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes facedetecion wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = facedetecion_OutputFcn(hObject, eventdata, handles) 
% varargout cell array for returning output args (see VARARGOUT);
% hObject   handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject   handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)
global myvideo myvideo1;
[fileName,pathName] = uigetfile('*.*','Please select an video');%文件筐,选择文件  
if(fileName)  
  fileName = strcat(pathName,fileName);  
  fileName = lower(fileName);%一致的小写字母形式  
else   
%   J = 0;%记录区域生长所分割得到的区域  
 msgbox('Please select an video');  
  return%退出程序  
end  

% boxlnserter = vision.ShapeInserter('BorderColor','Custom','CustomBorderColor',[255 0 0]);
% videoOut = step(boxlnserter,videoFrame,bbox);
myvideo = VideoReader(fileName);
nFrames = myvideo.NumberOfFrames
vidHeight = myvideo.Height
vidWidth = myvideo.Width
mov(1:nFrames) = struct('cdata',zeros(vidHeight,vidWidth,3,'uint8'),'colormap',[]);
B_K = read(myvideo,1);
axes(handles.axes1);
   imshow(B_K);
  
% myvideo = VideoReader(fileName);
% nFrames = myvideo.NumberOfFrames
% vidHeight = myvideo.Height
% vidWidth = myvideo.Width
% mov(1:nFrames) = struct('cdata',zeros(vidHeight,vidWidth,3,'uint8'),'colormap',[]);
% B_K = read(myvideo,1);
%     axes(handles.axes1);
%     imshow(B_K);
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject   handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)
global myvideo myvideo1;
nFrames = myvideo.NumberOfFrames
vidHeight = myvideo.Height
vidWidth = myvideo.Width
mov(1:nFrames) = struct('cdata',zeros(vidHeight,vidWidth,3,'uint8'),'colormap',[]);
faceDetector = vision.CascadeObjectDetector();
% videoFileReader = vision.VideoFileReader(fileName);
% videoFrame = step(videoFileReader);

for frame = 1:nFrames
B_K = read(myvideo,frame);
% Eye_Detect = vision.CascadeObjectDetector('EyePairBig');
% Eyes = step(Eye_Detect,B_K);
% f = rgb2hsv(B_K);
bbox = step(faceDetector,B_K)

   axes(handles.axes1);
   imshow(B_K);
   hold on
   for i =1:size(bbox,1)
       
        rectangle('position',bbox(i,:),'EdgeColor','r');
   end
%     for i =1:size(Eyes,1)
%         con(i) = Eyes(i,3)*Eyes(i,4);
%         
%     end
%     n = 0;
%     m = max(con);
%     n = find(con==m)
%     if n>0
%     rectangle('position',[Eyes(n(1),1) Eyes(n(1),2) Eyes(n(1),3) Eyes(n(1),4)+70],'EdgeColor','r');
%     end
%     for i =1:size(Eyes,1)
%         con(i) = 0;
%         
%     end
end

3 仿真结果

4 参考文献

[1]杨烁. 基于图像序列的运动目标检测与人脸跟踪. Diss. 西安电子科技大学, 2010.

部分理论引用网络文献,若有侵权联系博主删除。