0

I am trying to track face in a video using KLT in Matlab R2014b. Got this error Expected ROI to be an array with number of elements equal to 4.

clc;

clear all;

faceDetector = vision.CascadeObjectDetector();

videoFileReader = vision.VideoFileReader('labedit.mp4');

videoFrame = step(videoFileReader);

bbox = step(faceDetector, videoFrame);

videoFrame = insertShape(videoFrame, 'Rectangle', bbox);

figure; imshow(videoFrame); title('Detected face');

bboxPoints = bbox2points(bbox(1, :)); disp(bboxPoints(1,1));

points = detectMinEigenFeatures(rgb2gray(videoFrame), 'ROI', bbox);

figure, imshow(videoFrame), hold on, title('Detected features'); plot(points);

pointTracker = vision.PointTracker('MaxBidirectionalError', 2);

points = points.Location; initialize(pointTracker, points, videoFrame);

videoPlayer = vision.VideoPlayer('Position',... [100 100 [size(videoFrame, 2), size(videoFrame, 1)]+30]);

oldPoints = points;

while ~isDone(videoFileReader)

    videoFrame = step(videoFileReader);
    [points, isFound] = step(pointTracker, videoFrame);
    visiblePoints = points(isFound, :);
    oldInliers = oldPoints(isFound, :);
    if size(visiblePoints, 1) >= 2 % need at least 2 points
        [xform, oldInliers, visiblePoints] = estimateGeometricTransform(...
            oldInliers, visiblePoints, 'similarity', 'MaxDistance', 4);
        bboxPoints = transformPointsForward(xform, bboxPoints);
        bboxPolygon = reshape(bboxPoints', 1, []);
        videoFrame = insertShape(videoFrame, 'Polygon', bboxPolygon, ...
            'LineWidth', 2);
        videoFrame = insertMarker(videoFrame, visiblePoints, '+', ...
            'Color', 'white');
        oldPoints = visiblePoints;
        setPoints(pointTracker, oldPoints);
    end
    step(videoPlayer, videoFrame);
end
% Clean up

release(videoFileReader);

release(videoPlayer);

release(pointTracker);
Dima
  • 38,860
  • 14
  • 75
  • 115
Anonymous
  • 93
  • 2
  • 9
  • 1
    That's great. Which line is that error happening on? Copy and paste the entire error into your post. – rayryeng Feb 26 '15 at 20:54

1 Answers1

0

This means that bbox is empty, which means no faces were detected in the frame. You have to check that bbox is not empty before calling detectMinEigenFeatures.

Dima
  • 38,860
  • 14
  • 75
  • 115