VLTIF
CS426FinalProject
PointTracker Class Reference

Class used to track and monitor the keypoints. More...

#include <PointTracker.h>

List of all members.

Public Member Functions

 PointTracker ()
 default constructor
vector< Tupleupdate_points (vector< KeyPoint >const &list)
 update the point positions
int point_match (Point2f const &pt)
 Point Match.
void set_point_max_life (const int max_life)
 Set the max lifespan of the frame.
void build_background (string const &filename, SIFT::CommonParams const &cparams, SIFT::DescriptorParams const &dparams, SIFT::DetectorParams const &detparams)
 create the history

Private Attributes

string video_filename
 background video file
std::set< Point, PointCompbackground_list
 set of background points
vector< Tuplepoint_list
 set of current points
double MIN_DISTANCE
 Minimum distance for valid point match.
size_t num_frames
 Current number of frames.
size_t MAX_NUM_FRAMES
 Max number of possible frames.

Detailed Description

Class used to track and monitor the keypoints.

Definition at line 68 of file PointTracker.h.


Constructor & Destructor Documentation

PointTracker::PointTracker ( )

default constructor

Default constructor for the point tracking structure

Definition at line 40 of file PointTracker.cpp.

References MAX_NUM_FRAMES, MIN_DISTANCE, and num_frames.

                           {
    MIN_DISTANCE = 2.5;
    num_frames = 0;
    MAX_NUM_FRAMES = 50;
}

Member Function Documentation

void PointTracker::build_background ( string const &  filename,
SIFT::CommonParams const &  cparams,
SIFT::DescriptorParams const &  dparams,
SIFT::DetectorParams const &  detparams 
)

create the history

Build the background keypoints using the same sift features which are used by the algorithm.

Parameters:
filenamename of video file
cparamsSIFT common parameters
dparamsSIFT Descriptor parameters
detparamsSIFT Detector parameters

Definition at line 120 of file PointTracker.cpp.

References COLOR_GREEN, DescriptorDistanceL2(), median_frame(), PointDistanceL1(), and video_filename.

Referenced by init().

                                             {

    namedWindow("A");
    video_filename = filename;
    size_t numImg = 2;
    size_t startA = 5;
    size_t startB = 9;
    size_t step = 10;
    size_t max = 100;
    size_t count = 0;

    //create median frames
    Mat imgA = median_frame(filename, startA, step, max);
    Mat imgB = median_frame(filename, startB, step, max);

    //compute the sift keypoints for frame
    SIFT sift(cparams, detparams, dparams);

    vector<KeyPoint> kpA, kpB;
    Mat descA, descB;

    sift(imgA, Mat(), kpA, descA);
    sift(imgB, Mat(), kpB, descB);

    cout << descA.cols << endl;

    double minDist = 0.5;
    double actDist;
    //check and compare keypoints
    for (size_t i = 0; i < kpA.size(); i++) {
        actDist = PointDistanceL1(kpA[i].pt, kpB[i].pt);
        if (actDist <= minDist) {

            cout << i+1 << " of " << kpA.size() << " -> " <<  DescriptorDistanceL2(descA.row(i), descB.row(i)) << endl;
            //cin.get();
            if( DescriptorDistanceL2(descA.row(i), descB.row(i)) < 10 ){
                cout << "done" << endl;
                circle(imgA, kpA[i].pt, 1, COLOR_GREEN, 2);
            }

        }
    }

    Mat AA = imgA.clone();
    imshow("A", AA);
    waitKey(0);

    exit(0);

}
int PointTracker::point_match ( Point2f const &  pt)

Point Match.

Check if a match exists between a point and the point list. Return the match index if found.

Parameters:
ptpoint to verify
Returns:
index of match, -1 if no match found.

Definition at line 97 of file PointTracker.cpp.

References MIN_DISTANCE, point_list, and PointDistanceL2().

Referenced by update_points().

                                               {

    double dist;
    for (size_t i = 0; i < point_list.size(); i++) {

        dist = PointDistanceL2(pt, point_list[i].centroid);

        if (dist < MIN_DISTANCE)
            return i;
    }
    return -1;

}
void PointTracker::set_point_max_life ( const int  max_life)

Set the max lifespan of the frame.

Definition at line 173 of file PointTracker.cpp.

References MAX_NUM_FRAMES.

Referenced by init().

                                                        {
    MAX_NUM_FRAMES = max_life;
}
vector< Tuple > PointTracker::update_points ( vector< KeyPoint >const &  list)

update the point positions

Update the points, adding new points and removing redundant ones.

Parameters:
listof keypoints
Returns:
revised list of point data structs

Definition at line 52 of file PointTracker.cpp.

References MAX_NUM_FRAMES, num_frames, point_list, and point_match().

Referenced by main().

                                                                     {

    int idx;

    //take the input list and check for collisions
    for (size_t i = 0; i < list.size(); i++) {

        //check to see if a point matches
        idx = point_match(list[i].pt);

        if (idx >= 0) {
            point_list[idx].found = true;

            point_list[idx].centroid.x = ((num_frames) / (double) (num_frames + 1)) * point_list[idx].centroid.x + (1 / (double) (num_frames + 1)) * list[i].pt.x;
            point_list[idx].centroid.y = ((num_frames) / (double) (num_frames + 1)) * point_list[idx].centroid.y + (1 / (double) (num_frames + 1)) * list[i].pt.y;
            continue;
        }//otherwise, add it to the list
        else {
            point_list.push_back(Tuple(list[i].pt));
        }
    }

    //iterate through point list, updating the strength of each point
    for (int i = 0; i < (int) point_list.size(); i++) {
        point_list[i].strength = (point_list[i].span * point_list[i].strength + point_list[i].found) / (double) (point_list[i].span + 1);
        point_list[i].found = 0;
        point_list[i].span = min(point_list[i].span + 1, MAX_NUM_FRAMES);


        if (point_list[i].strength < 0.3)
            point_list.erase(point_list.begin() + i--);
    }

    num_frames++;
    if (num_frames > MAX_NUM_FRAMES)
        num_frames = MAX_NUM_FRAMES;

    return point_list;
}

Member Data Documentation

std::set<Point, PointComp> PointTracker::background_list [private]

set of background points

Definition at line 95 of file PointTracker.h.

size_t PointTracker::MAX_NUM_FRAMES [private]

Max number of possible frames.

Definition at line 107 of file PointTracker.h.

Referenced by PointTracker(), set_point_max_life(), and update_points().

double PointTracker::MIN_DISTANCE [private]

Minimum distance for valid point match.

Definition at line 101 of file PointTracker.h.

Referenced by point_match(), and PointTracker().

size_t PointTracker::num_frames [private]

Current number of frames.

Definition at line 104 of file PointTracker.h.

Referenced by PointTracker(), and update_points().

vector<Tuple> PointTracker::point_list [private]

set of current points

Definition at line 98 of file PointTracker.h.

Referenced by point_match(), and update_points().

string PointTracker::video_filename [private]

background video file

Definition at line 92 of file PointTracker.h.

Referenced by build_background().


The documentation for this class was generated from the following files: