2014-09-06 68 views
1

我目前正在尝试弄清楚如何能够检测距离震源5m的脸部,并且将其脸部特征清晰到足以让用户看到。我正在使用的代码如图所示。如何在matlab的面部检测中追踪离源头5m的人脸?

faceDetector = vision.CascadeObjectDetector(); 

%Get the input device using image acquisition toolbox,resolution = 640x480 to improve performance 

obj =imaq.VideoDevice('winvideo', 1, 'YUY2_640x480','ROI', [1 1 640 480]); 
set(obj,'ReturnedColorSpace', 'rgb'); 
figure('menubar','none','tag','webcam'); 

    while (true) 
    frame=step(obj); 
    bbox=step(faceDetector,frame); 


    boxInserter = vision.ShapeInserter('BorderColor','Custom',... 
    'CustomBorderColor',[255 255 0]); 
videoOut = step(boxInserter, frame,bbox); 

    imshow(videoOut,'border','tight'); 

    f=findobj('tag','webcam'); 

    if (isempty(f)); 
     [hueChannel,~,~] = rgb2hsv(frame); 

% Display the Hue Channel data and draw the bounding box around the face. 
figure, imshow(hueChannel), title('Hue channel data'); 


rectangle('Position',bbox,'EdgeColor','r','LineWidth',1) 
hold off 
noseDetector = vision.CascadeObjectDetector('Nose'); 
faceImage = imcrop(frame,bbox); 
imshow(faceImage) 
noseBBox  = step(noseDetector,faceImage); 

noseBBox(1:1) = noseBBox(1:1) + bbox(1:1); 
videoInfo = info(obj); 
ROI=get(obj,'ROI'); 
VideoSize = [ROI(3) ROI(4)]; 

videoPlayer = vision.VideoPlayer('Position',[300 300 VideoSize+30]); 
tracker = vision.HistogramBasedTracker; 
initializeObject(tracker, hueChannel, bbox); 

while (1) 



% Extract the next video frame 
    frame = step(obj); 
% RGB -> HSV 
    [hueChannel,~,~] = rgb2hsv(frame); 

    % Track using the Hue channel data 
    bbox = step(tracker, hueChannel); 

    % Insert a bounding box around the object being tracked 
    videoOut = step(boxInserter, frame, bbox); 

    %Insert text coordinates 

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

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

     close(gcf) 




     break 
    end 
    pause(0.05) 
end 
release(obj) 
% remove video object from memory 
     delete(handles.vid); 

我正在努力研究这段代码,找出跟踪面部时可以覆盖的距离。我无法弄清楚哪一个处理。谢谢!

回答

0

不知道你的问题是什么,但试试这个example。它使用KLT算法,IMHO对CAMShift的面部跟踪更加鲁棒。它还使用基于MATLAB的网络摄像头界面,这非常简单。