www.gusucode.com > IPCV_Eval_Kit_R2019a_0ce6858工具箱matlab程序源码 > IPCV_Eval_Kit_R2019a_0ce6858/code/demo_files/I4_08_5_tracking_CAMShift.m

    %% 弶婜壔
clear;clc;close all;imtool close all

%% Step 1: 僩儔僢僉儞僌偡傞婄傪愭偢専弌
% 婄擣幆梡僆僽僕僃僋僩偺嶌惉
faceDetector = vision.CascadeObjectDetector();

% 1僼儗乕儉撉崬傒丄婄専弌傪幚峴
videoFileReader = vision.VideoFileReader('visionface.avi');
videoFrame      = step(videoFileReader);
bbox            = step(faceDetector, videoFrame);

% 専弌偟偨婄偺廃傝偵巐妏傪昤夋偟丄夋憸傪昞帵
videoOut = insertObjectAnnotation(videoFrame,'rectangle',bbox,'Face');
figure, imshow(videoOut), title('Detected face');


%% Step 2: Identify Facial Features To Track
% Get the skin tone information by extracting the Hue from the video frame
% converted to the HSV color space.
% Hue僠儍僱儖偱昞帵偟丄婄偺廃傝偵巐妏傪昤夋
% 敡怓傪僩儔僢僉儞僌偡傞摿挜偲偟偰梡偄傞丅(婄偑堏摦偟偨傝孹偄偰傕曄傢傜側偄摿挜検)
[hueChannel,~,~] = rgb2hsv(videoFrame);   % HSV嬻娫傊曄姺
figure, imshow(hueChannel), title('Hue channel data');
rectangle('Position',bbox(1,:),'LineWidth',2,'EdgeColor',[1 1 0])


%% STEP3 : 婄傪僩儔僢僉儞僌
% 旲偺椞堟偺Hue僸僗僩僌儔儉偱僩儔僢僉儞僌(攚宨偑娷傑傟側偄偨傔)
noseDetector = vision.CascadeObjectDetector('Nose');
faceImage    = imcrop(videoFrame,bbox(1,:));
noseBBox     = step(noseDetector,faceImage);

% The nose bounding box is defined relative to the cropped face image.
% Adjust the nose bounding box so that it is relative to the original video
% frame.
noseBBox(1,1:2) = noseBBox(1,1:2) + bbox(1,1:2);

% Create a tracker object.
tracker = vision.HistogramBasedTracker;

% tracker傪丄旲椞堟偺僺僋僙儖偺Hue偱弶婜壔
initializeObject(tracker, hueChannel, noseBBox(1,:));

% Create a video player object for displaying video frames.
videoInfo    = info(videoFileReader);
videoPlayer  = vision.VideoPlayer('Position',[300 300 videoInfo.VideoSize+30]);

% Track the face over successive video frames until the video is finished.
while ~isDone(videoFileReader)

    % 侾僼儗乕儉撉崬傒
    videoFrame = step(videoFileReader);

    % 擖椡RGB傪丄HSV傊曄姺
    [hueChannel,~,~] = rgb2hsv(videoFrame);

    % 慜僼儗乕儉偺旲晹暘偺Hue僸僗僩僌儔儉傪梡偄丄僩儔僢僉儞僌
    bbox = step(tracker, hueChannel);

    % Insert a bounding box around the object being tracked
    videoOut = insertObjectAnnotation(videoFrame,'rectangle',bbox,'Face');

    % Display the annotated video frame using the video player object
    step(videoPlayer, videoOut);

end

% Release resources
release(videoFileReader);
release(videoPlayer);

% Copyright 2014 The MathWorks, Inc.