Example usage for org.opencv.video Video calcOpticalFlowPyrLK

List of usage examples for org.opencv.video Video calcOpticalFlowPyrLK

Introduction

In this page you can find the example usage for org.opencv.video Video calcOpticalFlowPyrLK.

Prototype

public static void calcOpticalFlowPyrLK(Mat prevImg, Mat nextImg, MatOfPoint2f prevPts, MatOfPoint2f nextPts,
            MatOfByte status, MatOfFloat err, Size winSize, int maxLevel, TermCriteria criteria, int flags,
            double minEigThreshold) 

Source Link

Usage

From source file:com.trandi.opentld.tld.LKTracker.java

License:Apache License

/**
 * @return Pair of new, FILTERED, last and current POINTS, or null if it hasn't managed to track anything.
 *///from   w ww.  j  ava2  s. c  o  m
Pair<Point[], Point[]> track(final Mat lastImg, final Mat currentImg, Point[] lastPoints) {
    final int size = lastPoints.length;
    final MatOfPoint2f currentPointsMat = new MatOfPoint2f();
    final MatOfPoint2f pointsFBMat = new MatOfPoint2f();
    final MatOfByte statusMat = new MatOfByte();
    final MatOfFloat errSimilarityMat = new MatOfFloat();
    final MatOfByte statusFBMat = new MatOfByte();
    final MatOfFloat errSimilarityFBMat = new MatOfFloat();

    //Forward-Backward tracking
    Video.calcOpticalFlowPyrLK(lastImg, currentImg, new MatOfPoint2f(lastPoints), currentPointsMat, statusMat,
            errSimilarityMat, WINDOW_SIZE, MAX_LEVEL, termCriteria, 0, LAMBDA);
    Video.calcOpticalFlowPyrLK(currentImg, lastImg, currentPointsMat, pointsFBMat, statusFBMat,
            errSimilarityFBMat, WINDOW_SIZE, MAX_LEVEL, termCriteria, 0, LAMBDA);

    final byte[] status = statusMat.toArray();
    float[] errSimilarity = new float[lastPoints.length];
    //final byte[] statusFB = statusFBMat.toArray();
    final float[] errSimilarityFB = errSimilarityFBMat.toArray();

    // compute the real FB error (relative to LAST points not the current ones...
    final Point[] pointsFB = pointsFBMat.toArray();
    for (int i = 0; i < size; i++) {
        errSimilarityFB[i] = Util.norm(pointsFB[i], lastPoints[i]);
    }

    final Point[] currPoints = currentPointsMat.toArray();
    // compute real similarity error
    errSimilarity = normCrossCorrelation(lastImg, currentImg, lastPoints, currPoints, status);

    //TODO  errSimilarityFB has problem != from C++
    // filter out points with fwd-back error > the median AND points with similarity error > median
    return filterPts(lastPoints, currPoints, errSimilarity, errSimilarityFB, status);
}

From source file:syncleus.dann.data.video.LKTracker.java

License:Apache License

/**
 * @return Pair of new, FILTERED, last and current POINTS, or null if it hasn't managed to track anything.
 *//*  ww  w  .j  a v  a 2 s  .c  o  m*/
public Pair<Point[], Point[]> track(final Mat lastImg, final Mat currentImg, Point[] lastPoints) {
    final int size = lastPoints.length;
    final MatOfPoint2f currentPointsMat = new MatOfPoint2f();
    final MatOfPoint2f pointsFBMat = new MatOfPoint2f();
    final MatOfByte statusMat = new MatOfByte();
    final MatOfFloat errSimilarityMat = new MatOfFloat();
    final MatOfByte statusFBMat = new MatOfByte();
    final MatOfFloat errSimilarityFBMat = new MatOfFloat();

    //Forward-Backward tracking
    Video.calcOpticalFlowPyrLK(lastImg, currentImg, new MatOfPoint2f(lastPoints), currentPointsMat, statusMat,
            errSimilarityMat, WINDOW_SIZE, MAX_LEVEL, termCriteria, 0, LAMBDA);
    Video.calcOpticalFlowPyrLK(currentImg, lastImg, currentPointsMat, pointsFBMat, statusFBMat,
            errSimilarityFBMat, WINDOW_SIZE, MAX_LEVEL, termCriteria, 0, LAMBDA);

    final byte[] status = statusMat.toArray();
    float[] errSimilarity = new float[lastPoints.length];
    //final byte[] statusFB = statusFBMat.toArray();
    final float[] errSimilarityFB = errSimilarityFBMat.toArray();

    // compute the real FB error (relative to LAST points not the current ones...
    final Point[] pointsFB = pointsFBMat.toArray();
    for (int i = 0; i < size; i++) {
        errSimilarityFB[i] = TLDUtil.norm(pointsFB[i], lastPoints[i]);
    }

    final Point[] currPoints = currentPointsMat.toArray();
    // compute real similarity error
    errSimilarity = normCrossCorrelation(lastImg, currentImg, lastPoints, currPoints, status);

    //TODO  errSimilarityFB has problem != from C++
    // filter out points with fwd-back error > the median AND points with similarity error > median
    return filterPts(lastPoints, currPoints, errSimilarity, errSimilarityFB, status);
}