protected:
virtual void computeReprojError( const CvMat* m1, const CvMat* m2,
const CvMat* model, CvMat* error );
+ virtual bool isMinimalSetConsistent( const CvMat* m1, const CvMat* m2 );
};
return (int)result;
}
+// We check whether three correspondences for the homography estimation
+// are geometrically consistent (the points in the source image should
+// maintain the same circular order than in the destination image).
+//
+// The usefullness of this constraint is explained in the paper:
+//
+// "Speeding-up homography estimation in mobile devices"
+// Journal of Real-Time Image Processing. 2013. DOI: 10.1007/s11554-012-0314-1
+// Pablo Marquez-Neila, Javier Lopez-Alberca, Jose M. Buenaposada, Luis Baumela
+CV_IMPL bool
+weakConstraint
+ (
+ const CvMat* srcPoints,
+ const CvMat* dstPoints,
+ int t1,
+ int t2,
+ int t3
+ )
+{
+ const CvPoint2D64f* src = (const CvPoint2D64f*)srcPoints->data.ptr;
+ const CvPoint2D64f* dst = (const CvPoint2D64f*)dstPoints->data.ptr;
+
+ CvMat* A = cvCreateMat( 3, 3, CV_64F );
+ CvMat* B = cvCreateMat( 3, 3, CV_64F );
+
+ double detA;
+ double detB;
+
+ cvmSet(A, 0, 0, src[t1].x);
+ cvmSet(A, 0, 1, src[t1].y);
+ cvmSet(A, 0, 2, 1);
+ cvmSet(A, 1, 0, src[t2].x);
+ cvmSet(A, 1, 1, src[t2].y);
+ cvmSet(A, 1, 2, 1);
+ cvmSet(A, 2, 0, src[t3].x);
+ cvmSet(A, 2, 1, src[t3].y);
+ cvmSet(A, 2, 2, 1);
+
+ cvmSet(B, 0, 0, dst[t1].x);
+ cvmSet(B, 0, 1, dst[t1].y);
+ cvmSet(B, 0, 2, 1);
+ cvmSet(B, 1, 0, dst[t2].x);
+ cvmSet(B, 1, 1, dst[t2].y);
+ cvmSet(B, 1, 2, 1);
+ cvmSet(B, 2, 0, dst[t3].x);
+ cvmSet(B, 2, 1, dst[t3].y);
+ cvmSet(B, 2, 2, 1);
+
+ detA = cvDet(A);
+ detB = cvDet(B);
+
+ cvReleaseMat(&A);
+ cvReleaseMat(&B);
+
+ return (detA*detB >= 0);
+};
+
+// We check whether the minimal set of points for the homography estimation
+// are geometrically consistent. We check if every 3 correspondences sets
+// fulfills the constraint.
+//
+// The usefullness of this constraint is explained in the paper:
+//
+// "Speeding-up homography estimation in mobile devices"
+// Journal of Real-Time Image Processing. 2013. DOI: 10.1007/s11554-012-0314-1
+// Pablo Marquez-Neila, Javier Lopez-Alberca, Jose M. Buenaposada, Luis Baumela
+bool
+CvHomographyEstimator::isMinimalSetConsistent
+ (
+ const CvMat* srcPoints,
+ const CvMat* dstPoints
+ )
+{
+ return weakConstraint(srcPoints, dstPoints, 0, 1, 2) &&
+ weakConstraint(srcPoints, dstPoints, 1, 2, 3) &&
+ weakConstraint(srcPoints, dstPoints, 0, 2, 3) &&
+ weakConstraint(srcPoints, dstPoints, 0, 1, 3);
+}
+
/* Evaluation of Fundamental Matrix from point correspondences.
The original code has been written by Valery Mosyagin */