Normalize line endings and whitespace
This commit is contained in:

committed by
Andrey Kamaev

parent
0442bca235
commit
81f826db2b
@@ -91,7 +91,7 @@ enum
|
||||
{
|
||||
CV_ITERATIVE = 0,
|
||||
CV_EPNP = 1, // F.Moreno-Noguer, V.Lepetit and P.Fua "EPnP: Efficient Perspective-n-Point Camera Pose Estimation"
|
||||
CV_P3P = 2 // X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang; "Complete Solution Classification for the Perspective-Three-Point Problem"
|
||||
CV_P3P = 2 // X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang; "Complete Solution Classification for the Perspective-Three-Point Problem"
|
||||
};
|
||||
|
||||
CVAPI(int) cvFindFundamentalMat( const CvMat* points1, const CvMat* points2,
|
||||
|
@@ -3359,11 +3359,11 @@ void cv::projectPoints( InputArray _opoints,
|
||||
CvMat c_imagePoints = _ipoints.getMat();
|
||||
CvMat c_objectPoints = opoints;
|
||||
Mat cameraMatrix = _cameraMatrix.getMat();
|
||||
|
||||
|
||||
Mat rvec = _rvec.getMat(), tvec = _tvec.getMat();
|
||||
CvMat c_cameraMatrix = cameraMatrix;
|
||||
CvMat c_rvec = rvec, c_tvec = tvec;
|
||||
|
||||
|
||||
Mat distCoeffs = _distCoeffs.getMat();
|
||||
CvMat c_distCoeffs = distCoeffs;
|
||||
int ndistCoeffs = distCoeffs.rows + distCoeffs.cols - 1;
|
||||
|
@@ -52,8 +52,8 @@
|
||||
|
||||
class CirclesGridClusterFinder
|
||||
{
|
||||
CirclesGridClusterFinder& operator=(const CirclesGridClusterFinder&);
|
||||
CirclesGridClusterFinder(const CirclesGridClusterFinder&);
|
||||
CirclesGridClusterFinder& operator=(const CirclesGridClusterFinder&);
|
||||
CirclesGridClusterFinder(const CirclesGridClusterFinder&);
|
||||
public:
|
||||
CirclesGridClusterFinder(bool _isAsymmetricGrid)
|
||||
{
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -9,30 +9,30 @@ class epnp {
|
||||
~epnp();
|
||||
|
||||
void add_correspondence(const double X, const double Y, const double Z,
|
||||
const double u, const double v);
|
||||
const double u, const double v);
|
||||
|
||||
void compute_pose(cv::Mat& R, cv::Mat& t);
|
||||
private:
|
||||
template <typename T>
|
||||
void init_camera_parameters(const cv::Mat& cameraMatrix)
|
||||
{
|
||||
uc = cameraMatrix.at<T> (0, 2);
|
||||
vc = cameraMatrix.at<T> (1, 2);
|
||||
fu = cameraMatrix.at<T> (0, 0);
|
||||
fv = cameraMatrix.at<T> (1, 1);
|
||||
{
|
||||
uc = cameraMatrix.at<T> (0, 2);
|
||||
vc = cameraMatrix.at<T> (1, 2);
|
||||
fu = cameraMatrix.at<T> (0, 0);
|
||||
fv = cameraMatrix.at<T> (1, 1);
|
||||
}
|
||||
template <typename OpointType, typename IpointType>
|
||||
void init_points(const cv::Mat& opoints, const cv::Mat& ipoints)
|
||||
{
|
||||
for(int i = 0; i < number_of_correspondences; i++)
|
||||
{
|
||||
pws[3 * i ] = opoints.at<OpointType>(0,i).x;
|
||||
pws[3 * i + 1] = opoints.at<OpointType>(0,i).y;
|
||||
pws[3 * i + 2] = opoints.at<OpointType>(0,i).z;
|
||||
for(int i = 0; i < number_of_correspondences; i++)
|
||||
{
|
||||
pws[3 * i ] = opoints.at<OpointType>(0,i).x;
|
||||
pws[3 * i + 1] = opoints.at<OpointType>(0,i).y;
|
||||
pws[3 * i + 2] = opoints.at<OpointType>(0,i).z;
|
||||
|
||||
us[2 * i ] = ipoints.at<IpointType>(0,i).x*fu + uc;
|
||||
us[2 * i + 1] = ipoints.at<IpointType>(0,i).y*fv + vc;
|
||||
}
|
||||
us[2 * i ] = ipoints.at<IpointType>(0,i).x*fu + uc;
|
||||
us[2 * i + 1] = ipoints.at<IpointType>(0,i).y*fv + vc;
|
||||
}
|
||||
}
|
||||
double reprojection_error(const double R[3][3], const double t[3]);
|
||||
void choose_control_points(void);
|
||||
@@ -56,15 +56,15 @@ class epnp {
|
||||
|
||||
void gauss_newton(const CvMat * L_6x10, const CvMat * Rho, double current_betas[4]);
|
||||
void compute_A_and_b_gauss_newton(const double * l_6x10, const double * rho,
|
||||
const double cb[4], CvMat * A, CvMat * b);
|
||||
const double cb[4], CvMat * A, CvMat * b);
|
||||
|
||||
double compute_R_and_t(const double * ut, const double * betas,
|
||||
double R[3][3], double t[3]);
|
||||
double R[3][3], double t[3]);
|
||||
|
||||
void estimate_R_and_t(double R[3][3], double t[3]);
|
||||
|
||||
void copy_R_and_t(const double R_dst[3][3], const double t_dst[3],
|
||||
double R_src[3][3], double t_src[3]);
|
||||
double R_src[3][3], double t_src[3]);
|
||||
|
||||
|
||||
double uc, vc, fu, fv;
|
||||
|
@@ -275,7 +275,7 @@ cvFindHomography( const CvMat* objectPoints, const CvMat* imagePoints,
|
||||
|
||||
if( result )
|
||||
cvConvert( &matH, __H );
|
||||
|
||||
|
||||
if( mask && tempMask )
|
||||
{
|
||||
if( CV_ARE_SIZES_EQ(mask, tempMask) )
|
||||
@@ -481,12 +481,12 @@ int CvFMEstimator::run8Point( const CvMat* _m1, const CvMat* _m2, CvMat* _fmatri
|
||||
|
||||
scale0 = sqrt(2.)/scale0;
|
||||
scale1 = sqrt(2.)/scale1;
|
||||
|
||||
|
||||
cvZero( &A );
|
||||
|
||||
// form a linear system Ax=0: for each selected pair of points m1 & m2,
|
||||
// the row of A(=a) represents the coefficients of equation: (m2, 1)'*F*(m1, 1) = 0
|
||||
// to save computation time, we compute (At*A) instead of A and then solve (At*A)x=0.
|
||||
// to save computation time, we compute (At*A) instead of A and then solve (At*A)x=0.
|
||||
for( i = 0; i < count; i++ )
|
||||
{
|
||||
double x0 = (m1[i].x - m0c.x)*scale0;
|
||||
@@ -561,7 +561,7 @@ void CvFMEstimator::computeReprojError( const CvMat* _m1, const CvMat* _m2,
|
||||
const CvPoint2D64f* m2 = (const CvPoint2D64f*)_m2->data.ptr;
|
||||
const double* F = model->data.db;
|
||||
float* err = _err->data.fl;
|
||||
|
||||
|
||||
for( i = 0; i < count; i++ )
|
||||
{
|
||||
double a, b, c, d1, d2, s1, s2;
|
||||
@@ -632,7 +632,7 @@ CV_IMPL int cvFindFundamentalMat( const CvMat* points1, const CvMat* points2,
|
||||
param1 = 3;
|
||||
if( param2 < DBL_EPSILON || param2 > 1 - DBL_EPSILON )
|
||||
param2 = 0.99;
|
||||
|
||||
|
||||
if( (method & ~3) == CV_RANSAC && count >= 15 )
|
||||
result = estimator.runRANSAC(m1, m2, &_F3x3, tempMask, param1, param2 );
|
||||
else
|
||||
@@ -648,7 +648,7 @@ CV_IMPL int cvFindFundamentalMat( const CvMat* points1, const CvMat* points2,
|
||||
|
||||
if( result )
|
||||
cvConvert( fmatrix->rows == 3 ? &_F3x3 : &_F9x3, fmatrix );
|
||||
|
||||
|
||||
if( mask && tempMask )
|
||||
{
|
||||
if( CV_ARE_SIZES_EQ(mask, tempMask) )
|
||||
@@ -1072,7 +1072,7 @@ cv::Mat cv::findHomography( InputArray _points1, InputArray _points2,
|
||||
int npoints = points1.checkVector(2);
|
||||
CV_Assert( npoints >= 0 && points2.checkVector(2) == npoints &&
|
||||
points1.type() == points2.type());
|
||||
|
||||
|
||||
Mat H(3, 3, CV_64F);
|
||||
CvMat _pt1 = points1, _pt2 = points2;
|
||||
CvMat matH = H, c_mask, *p_mask = 0;
|
||||
@@ -1101,7 +1101,7 @@ cv::Mat cv::findFundamentalMat( InputArray _points1, InputArray _points2,
|
||||
int npoints = points1.checkVector(2);
|
||||
CV_Assert( npoints >= 0 && points2.checkVector(2) == npoints &&
|
||||
points1.type() == points2.type());
|
||||
|
||||
|
||||
Mat F(method == CV_FM_7POINT ? 9 : 3, 3, CV_64F);
|
||||
CvMat _pt1 = points1, _pt2 = points2;
|
||||
CvMat matF = F, c_mask, *p_mask = 0;
|
||||
@@ -1133,7 +1133,7 @@ void cv::computeCorrespondEpilines( InputArray _points, int whichImage,
|
||||
if( npoints < 0 )
|
||||
npoints = points.checkVector(3);
|
||||
CV_Assert( npoints >= 0 && (points.depth() == CV_32F || points.depth() == CV_32S));
|
||||
|
||||
|
||||
_lines.create(npoints, 1, CV_32FC3, -1, true);
|
||||
CvMat c_points = points, c_lines = _lines.getMat(), c_F = F;
|
||||
cvComputeCorrespondEpilines(&c_points, whichImage, &c_F, &c_lines);
|
||||
@@ -1150,7 +1150,7 @@ void cv::convertPointsFromHomogeneous( InputArray _src, OutputArray _dst )
|
||||
cn = 4;
|
||||
}
|
||||
CV_Assert( npoints >= 0 && (src.depth() == CV_32F || src.depth() == CV_32S));
|
||||
|
||||
|
||||
_dst.create(npoints, 1, CV_MAKETYPE(CV_32F, cn-1));
|
||||
CvMat c_src = src, c_dst = _dst.getMat();
|
||||
cvConvertPointsHomogeneous(&c_src, &c_dst);
|
||||
@@ -1167,7 +1167,7 @@ void cv::convertPointsToHomogeneous( InputArray _src, OutputArray _dst )
|
||||
cn = 3;
|
||||
}
|
||||
CV_Assert( npoints >= 0 && (src.depth() == CV_32F || src.depth() == CV_32S));
|
||||
|
||||
|
||||
_dst.create(npoints, 1, CV_MAKETYPE(CV_32F, cn+1));
|
||||
CvMat c_src = src, c_dst = _dst.getMat();
|
||||
cvConvertPointsHomogeneous(&c_src, &c_dst);
|
||||
@@ -1177,7 +1177,7 @@ void cv::convertPointsHomogeneous( InputArray _src, OutputArray _dst )
|
||||
{
|
||||
int stype = _src.type(), dtype = _dst.type();
|
||||
CV_Assert( _dst.fixedType() );
|
||||
|
||||
|
||||
if( CV_MAT_CN(stype) > CV_MAT_CN(dtype) )
|
||||
convertPointsFromHomogeneous(_src, _dst);
|
||||
else
|
||||
|
@@ -103,7 +103,7 @@ cvRANSACUpdateNumIters( double p, double ep,
|
||||
|
||||
num = log(num);
|
||||
denom = log(denom);
|
||||
|
||||
|
||||
return denom >= 0 || -num >= max_iters*(-denom) ?
|
||||
max_iters : cvRound(num/denom);
|
||||
}
|
||||
@@ -127,7 +127,7 @@ bool CvModelEstimator2::runRANSAC( const CvMat* m1, const CvMat* m2, CvMat* mode
|
||||
models = cvCreateMat( modelSize.height*maxBasicSolutions, modelSize.width, CV_64FC1 );
|
||||
err = cvCreateMat( 1, count, CV_32FC1 );
|
||||
tmask = cvCreateMat( 1, count, CV_8UC1 );
|
||||
|
||||
|
||||
if( count > modelPoints )
|
||||
{
|
||||
ms1 = cvCreateMat( 1, modelPoints, m1->type );
|
||||
@@ -207,7 +207,7 @@ bool CvModelEstimator2::runLMeDS( const CvMat* m1, const CvMat* m2, CvMat* model
|
||||
|
||||
models = cvCreateMat( modelSize.height*maxBasicSolutions, modelSize.width, CV_64FC1 );
|
||||
err = cvCreateMat( 1, count, CV_32FC1 );
|
||||
|
||||
|
||||
if( count > modelPoints )
|
||||
{
|
||||
ms1 = cvCreateMat( 1, modelPoints, m1->type );
|
||||
@@ -323,12 +323,12 @@ bool CvModelEstimator2::checkSubset( const CvMat* m, int count )
|
||||
CvPoint2D64f* ptr = (CvPoint2D64f*)m->data.ptr;
|
||||
|
||||
assert( CV_MAT_TYPE(m->type) == CV_64FC2 );
|
||||
|
||||
|
||||
if( checkPartialSubsets )
|
||||
i0 = i1 = count - 1;
|
||||
else
|
||||
i0 = 0, i1 = count - 1;
|
||||
|
||||
|
||||
for( i = i0; i <= i1; i++ )
|
||||
{
|
||||
// check that the i-th selected point does not belong
|
||||
@@ -362,16 +362,16 @@ class Affine3DEstimator : public CvModelEstimator2
|
||||
{
|
||||
public:
|
||||
Affine3DEstimator() : CvModelEstimator2(4, cvSize(4, 3), 1) {}
|
||||
virtual int runKernel( const CvMat* m1, const CvMat* m2, CvMat* model );
|
||||
virtual int runKernel( const CvMat* m1, const CvMat* m2, CvMat* model );
|
||||
protected:
|
||||
virtual void computeReprojError( const CvMat* m1, const CvMat* m2, const CvMat* model, CvMat* error );
|
||||
virtual void computeReprojError( const CvMat* m1, const CvMat* m2, const CvMat* model, CvMat* error );
|
||||
virtual bool checkSubset( const CvMat* ms1, int count );
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
int cv::Affine3DEstimator::runKernel( const CvMat* m1, const CvMat* m2, CvMat* model )
|
||||
{
|
||||
{
|
||||
const Point3d* from = reinterpret_cast<const Point3d*>(m1->data.ptr);
|
||||
const Point3d* to = reinterpret_cast<const Point3d*>(m2->data.ptr);
|
||||
|
||||
@@ -389,7 +389,7 @@ int cv::Affine3DEstimator::runKernel( const CvMat* m1, const CvMat* m2, CvMat* m
|
||||
aptr[3] = 1.0;
|
||||
*reinterpret_cast<Point3d*>(aptr) = from[i];
|
||||
aptr += 16;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CvMat cvA = A;
|
||||
@@ -397,7 +397,7 @@ int cv::Affine3DEstimator::runKernel( const CvMat* m1, const CvMat* m2, CvMat* m
|
||||
CvMat cvX;
|
||||
cvReshape(model, &cvX, 1, 12);
|
||||
cvSolve(&cvA, &cvB, &cvX, CV_SVD );
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -405,10 +405,10 @@ void cv::Affine3DEstimator::computeReprojError( const CvMat* m1, const CvMat* m2
|
||||
{
|
||||
int count = m1->rows * m1->cols;
|
||||
const Point3d* from = reinterpret_cast<const Point3d*>(m1->data.ptr);
|
||||
const Point3d* to = reinterpret_cast<const Point3d*>(m2->data.ptr);
|
||||
const Point3d* to = reinterpret_cast<const Point3d*>(m2->data.ptr);
|
||||
const double* F = model->data.db;
|
||||
float* err = error->data.fl;
|
||||
|
||||
|
||||
for(int i = 0; i < count; i++ )
|
||||
{
|
||||
const Point3d& f = from[i];
|
||||
@@ -418,7 +418,7 @@ void cv::Affine3DEstimator::computeReprojError( const CvMat* m1, const CvMat* m2
|
||||
double b = F[4]*f.x + F[5]*f.y + F[ 6]*f.z + F[ 7] - t.y;
|
||||
double c = F[8]*f.x + F[9]*f.y + F[10]*f.z + F[11] - t.z;
|
||||
|
||||
err[i] = (float)sqrt(a*a + b*b + c*c);
|
||||
err[i] = (float)sqrt(a*a + b*b + c*c);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -427,23 +427,23 @@ bool cv::Affine3DEstimator::checkSubset( const CvMat* ms1, int count )
|
||||
CV_Assert( CV_MAT_TYPE(ms1->type) == CV_64FC3 );
|
||||
|
||||
int j, k, i = count - 1;
|
||||
const Point3d* ptr = reinterpret_cast<const Point3d*>(ms1->data.ptr);
|
||||
|
||||
const Point3d* ptr = reinterpret_cast<const Point3d*>(ms1->data.ptr);
|
||||
|
||||
// check that the i-th selected point does not belong
|
||||
// to a line connecting some previously selected points
|
||||
|
||||
|
||||
for(j = 0; j < i; ++j)
|
||||
{
|
||||
Point3d d1 = ptr[j] - ptr[i];
|
||||
double n1 = norm(d1);
|
||||
|
||||
|
||||
for(k = 0; k < j; ++k)
|
||||
{
|
||||
Point3d d2 = ptr[k] - ptr[i];
|
||||
Point3d d2 = ptr[k] - ptr[i];
|
||||
double n = norm(d2) * n1;
|
||||
|
||||
if (fabs(d1.dot(d2) / n) > 0.996)
|
||||
break;
|
||||
break;
|
||||
}
|
||||
if( k < j )
|
||||
break;
|
||||
@@ -458,12 +458,12 @@ int cv::estimateAffine3D(InputArray _from, InputArray _to,
|
||||
{
|
||||
Mat from = _from.getMat(), to = _to.getMat();
|
||||
int count = from.checkVector(3, CV_32F);
|
||||
|
||||
|
||||
CV_Assert( count >= 0 && to.checkVector(3, CV_32F) == count );
|
||||
|
||||
_out.create(3, 4, CV_64F);
|
||||
Mat out = _out.getMat();
|
||||
|
||||
|
||||
_inliers.create(count, 1, CV_8U, -1, true);
|
||||
Mat inliers = _inliers.getMat();
|
||||
inliers = Scalar::all(1);
|
||||
@@ -471,15 +471,15 @@ int cv::estimateAffine3D(InputArray _from, InputArray _to,
|
||||
Mat dFrom, dTo;
|
||||
from.convertTo(dFrom, CV_64F);
|
||||
to.convertTo(dTo, CV_64F);
|
||||
|
||||
|
||||
CvMat F3x4 = out;
|
||||
CvMat mask = inliers;
|
||||
CvMat m1 = dFrom;
|
||||
CvMat m2 = dTo;
|
||||
|
||||
const double epsilon = numeric_limits<double>::epsilon();
|
||||
|
||||
const double epsilon = numeric_limits<double>::epsilon();
|
||||
param1 = param1 <= 0 ? 3 : param1;
|
||||
param2 = (param2 < epsilon) ? 0.99 : (param2 > 1 - epsilon) ? 0.99 : param2;
|
||||
|
||||
return Affine3DEstimator().runRANSAC(&m1, &m2, &F3x4, &mask, param1, param2 );
|
||||
|
||||
return Affine3DEstimator().runRANSAC(&m1, &m2, &F3x4, &mask, param1, param2 );
|
||||
}
|
||||
|
@@ -23,26 +23,26 @@ class p3p
|
||||
|
||||
private:
|
||||
template <typename T>
|
||||
void init_camera_parameters(const cv::Mat& cameraMatrix)
|
||||
{
|
||||
cx = cameraMatrix.at<T> (0, 2);
|
||||
cy = cameraMatrix.at<T> (1, 2);
|
||||
fx = cameraMatrix.at<T> (0, 0);
|
||||
fy = cameraMatrix.at<T> (1, 1);
|
||||
void init_camera_parameters(const cv::Mat& cameraMatrix)
|
||||
{
|
||||
cx = cameraMatrix.at<T> (0, 2);
|
||||
cy = cameraMatrix.at<T> (1, 2);
|
||||
fx = cameraMatrix.at<T> (0, 0);
|
||||
fy = cameraMatrix.at<T> (1, 1);
|
||||
}
|
||||
template <typename OpointType, typename IpointType>
|
||||
void extract_points(const cv::Mat& opoints, const cv::Mat& ipoints, std::vector<double>& points)
|
||||
{
|
||||
points.clear();
|
||||
points.resize(20);
|
||||
for(int i = 0; i < 4; i++)
|
||||
{
|
||||
points[i*5] = ipoints.at<IpointType>(0,i).x*fx + cx;
|
||||
points[i*5+1] = ipoints.at<IpointType>(0,i).y*fy + cy;
|
||||
points[i*5+2] = opoints.at<OpointType>(0,i).x;
|
||||
points[i*5+3] = opoints.at<OpointType>(0,i).y;
|
||||
points[i*5+4] = opoints.at<OpointType>(0,i).z;
|
||||
}
|
||||
points.clear();
|
||||
points.resize(20);
|
||||
for(int i = 0; i < 4; i++)
|
||||
{
|
||||
points[i*5] = ipoints.at<IpointType>(0,i).x*fx + cx;
|
||||
points[i*5+1] = ipoints.at<IpointType>(0,i).y*fy + cy;
|
||||
points[i*5+2] = opoints.at<OpointType>(0,i).x;
|
||||
points[i*5+3] = opoints.at<OpointType>(0,i).y;
|
||||
points[i*5+4] = opoints.at<OpointType>(0,i).z;
|
||||
}
|
||||
}
|
||||
void init_inverse_parameters();
|
||||
int solve_for_lengths(double lengths[4][3], double distances[3], double cosines[3]);
|
||||
|
@@ -37,7 +37,7 @@ int solve_deg3(double a, double b, double c, double d,
|
||||
if (b == 0) {
|
||||
// Solve first order system
|
||||
if (c == 0)
|
||||
return 0;
|
||||
return 0;
|
||||
|
||||
x0 = -d / c;
|
||||
return 1;
|
||||
|
@@ -3,7 +3,7 @@
|
||||
|
||||
int solve_deg2(double a, double b, double c, double & x1, double & x2);
|
||||
|
||||
int solve_deg3(double a, double b, double c, double d,
|
||||
int solve_deg3(double a, double b, double c, double d,
|
||||
double & x0, double & x1, double & x2);
|
||||
|
||||
int solve_deg4(double a, double b, double c, double d, double e,
|
||||
|
@@ -195,11 +195,11 @@ static CvStatus icvPOSIT( CvPOSITObject *pObject, CvPoint2D32f *imagePoints,
|
||||
}
|
||||
|
||||
inorm = rotation[0] /*[0][0]*/ * rotation[0] /*[0][0]*/ +
|
||||
rotation[1] /*[0][1]*/ * rotation[1] /*[0][1]*/ +
|
||||
rotation[1] /*[0][1]*/ * rotation[1] /*[0][1]*/ +
|
||||
rotation[2] /*[0][2]*/ * rotation[2] /*[0][2]*/;
|
||||
|
||||
jnorm = rotation[3] /*[1][0]*/ * rotation[3] /*[1][0]*/ +
|
||||
rotation[4] /*[1][1]*/ * rotation[4] /*[1][1]*/ +
|
||||
rotation[4] /*[1][1]*/ * rotation[4] /*[1][1]*/ +
|
||||
rotation[5] /*[1][2]*/ * rotation[5] /*[1][2]*/;
|
||||
|
||||
invInorm = cvInvSqrt( inorm );
|
||||
@@ -219,10 +219,10 @@ static CvStatus icvPOSIT( CvPOSITObject *pObject, CvPoint2D32f *imagePoints,
|
||||
/* row2 = row0 x row1 (cross product) */
|
||||
rotation[6] /*->m[2][0]*/ = rotation[1] /*->m[0][1]*/ * rotation[5] /*->m[1][2]*/ -
|
||||
rotation[2] /*->m[0][2]*/ * rotation[4] /*->m[1][1]*/;
|
||||
|
||||
|
||||
rotation[7] /*->m[2][1]*/ = rotation[2] /*->m[0][2]*/ * rotation[3] /*->m[1][0]*/ -
|
||||
rotation[0] /*->m[0][0]*/ * rotation[5] /*->m[1][2]*/;
|
||||
|
||||
|
||||
rotation[8] /*->m[2][2]*/ = rotation[0] /*->m[0][0]*/ * rotation[4] /*->m[1][1]*/ -
|
||||
rotation[1] /*->m[0][1]*/ * rotation[3] /*->m[1][0]*/;
|
||||
|
||||
@@ -249,16 +249,16 @@ static CvStatus icvReleasePOSITObject( CvPOSITObject ** ppObject )
|
||||
}
|
||||
|
||||
/*F///////////////////////////////////////////////////////////////////////////////////////
|
||||
// Name: icvPseudoInverse3D
|
||||
// Name: icvPseudoInverse3D
|
||||
// Purpose: Pseudoinverse N x 3 matrix N >= 3
|
||||
// Context:
|
||||
// Context:
|
||||
// Parameters:
|
||||
// a - input matrix
|
||||
// b - pseudoinversed a
|
||||
// n - number of rows in a
|
||||
// method - if 0, then b = inv(transpose(a)*a) * transpose(a)
|
||||
// if 1, then SVD used.
|
||||
// Returns:
|
||||
// Returns:
|
||||
// Notes: Both matrix are stored by n-dimensional vectors.
|
||||
// Now only method == 0 supported.
|
||||
//F*/
|
||||
|
@@ -125,7 +125,7 @@ cvTriangulatePoints(CvMat* projMatr1, CvMat* projMatr2, CvMat* projPoints1, CvMa
|
||||
/* Solve system for current point */
|
||||
{
|
||||
cvSVD(&matrA,&matrW,0,&matrV,CV_SVD_V_T);
|
||||
|
||||
|
||||
/* Copy computed point */
|
||||
cvmSet(points4D,0,i,cvmGet(&matrV,3,0));/* X */
|
||||
cvmSet(points4D,1,i,cvmGet(&matrV,3,1));/* Y */
|
||||
@@ -133,7 +133,7 @@ cvTriangulatePoints(CvMat* projMatr1, CvMat* projMatr2, CvMat* projPoints1, CvMa
|
||||
cvmSet(points4D,3,i,cvmGet(&matrV,3,3));/* W */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
double err = 0;
|
||||
/* Points was reconstructed. Try to reproject points */
|
||||
@@ -143,34 +143,34 @@ cvTriangulatePoints(CvMat* projMatr1, CvMat* projMatr2, CvMat* projPoints1, CvMa
|
||||
CvMat point3D;
|
||||
double point3D_dat[4];
|
||||
point3D = cvMat(4,1,CV_64F,point3D_dat);
|
||||
|
||||
|
||||
CvMat point2D;
|
||||
double point2D_dat[3];
|
||||
point2D = cvMat(3,1,CV_64F,point2D_dat);
|
||||
|
||||
|
||||
for( i = 0; i < numPoints; i++ )
|
||||
{
|
||||
double W = cvmGet(points4D,3,i);
|
||||
|
||||
|
||||
point3D_dat[0] = cvmGet(points4D,0,i)/W;
|
||||
point3D_dat[1] = cvmGet(points4D,1,i)/W;
|
||||
point3D_dat[2] = cvmGet(points4D,2,i)/W;
|
||||
point3D_dat[3] = 1;
|
||||
|
||||
|
||||
/* !!! Project this point for each camera */
|
||||
for( int currCamera = 0; currCamera < 2; currCamera++ )
|
||||
{
|
||||
cvMatMul(projMatrs[currCamera], &point3D, &point2D);
|
||||
|
||||
|
||||
float x,y;
|
||||
float xr,yr,wr;
|
||||
x = (float)cvmGet(projPoints[currCamera],0,i);
|
||||
y = (float)cvmGet(projPoints[currCamera],1,i);
|
||||
|
||||
|
||||
wr = (float)point2D_dat[2];
|
||||
xr = (float)(point2D_dat[0]/wr);
|
||||
yr = (float)(point2D_dat[1]/wr);
|
||||
|
||||
|
||||
float deltaX,deltaY;
|
||||
deltaX = (float)fabs(x-xr);
|
||||
deltaY = (float)fabs(y-yr);
|
||||
@@ -210,7 +210,7 @@ cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1
|
||||
cv::Ptr<CvMat> result;
|
||||
cv::Ptr<CvMat> points1, points2;
|
||||
cv::Ptr<CvMat> F;
|
||||
|
||||
|
||||
if (!CV_IS_MAT(F_) || !CV_IS_MAT(points1_) || !CV_IS_MAT(points2_) )
|
||||
CV_Error( CV_StsUnsupportedFormat, "Input parameters must be matrices" );
|
||||
if (!( F_->cols == 3 && F_->rows == 3))
|
||||
@@ -237,19 +237,19 @@ cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1
|
||||
if (CV_MAT_CN(new_points2->type) != 2)
|
||||
CV_Error( CV_StsUnsupportedFormat, "The second output matrix must have two channels; one for x and one for y" );
|
||||
}
|
||||
|
||||
|
||||
// Make sure F uses double precision
|
||||
F = cvCreateMat(3,3,CV_64FC1);
|
||||
cvConvert(F_, F);
|
||||
|
||||
|
||||
// Make sure points1 uses double precision
|
||||
points1 = cvCreateMat(points1_->rows,points1_->cols,CV_64FC2);
|
||||
cvConvert(points1_, points1);
|
||||
|
||||
|
||||
// Make sure points2 uses double precision
|
||||
points2 = cvCreateMat(points2_->rows,points2_->cols,CV_64FC2);
|
||||
cvConvert(points2_, points2);
|
||||
|
||||
|
||||
tmp33 = cvCreateMat(3,3,CV_64FC1);
|
||||
tmp31 = cvCreateMat(3,1,CV_64FC1), tmp31_2 = cvCreateMat(3,1,CV_64FC1);
|
||||
T1i = cvCreateMat(3,3,CV_64FC1), T2i = cvCreateMat(3,3,CV_64FC1);
|
||||
@@ -259,7 +259,7 @@ cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1
|
||||
S = cvCreateMat(3,3,CV_64FC1);
|
||||
V = cvCreateMat(3,3,CV_64FC1);
|
||||
e1 = cvCreateMat(3,1,CV_64FC1), e2 = cvCreateMat(3,1,CV_64FC1);
|
||||
|
||||
|
||||
double x1, y1, x2, y2;
|
||||
double scale;
|
||||
double f1, f2, a, b, c, d;
|
||||
@@ -272,7 +272,7 @@ cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1
|
||||
y1 = points1->data.db[p*2+1];
|
||||
x2 = points2->data.db[p*2];
|
||||
y2 = points2->data.db[p*2+1];
|
||||
|
||||
|
||||
cvSetZero(T1i);
|
||||
cvSetReal2D(T1i,0,0,1);
|
||||
cvSetReal2D(T1i,1,1,1);
|
||||
@@ -288,7 +288,7 @@ cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1
|
||||
cvGEMM(T2i,F,1,0,0,tmp33,CV_GEMM_A_T);
|
||||
cvSetZero(TFT);
|
||||
cvGEMM(tmp33,T1i,1,0,0,TFT);
|
||||
|
||||
|
||||
// Compute the right epipole e1 from F * e1 = 0
|
||||
cvSetZero(U);
|
||||
cvSetZero(S);
|
||||
@@ -303,7 +303,7 @@ cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1
|
||||
cvSetReal2D(e1,1,0,-cvGetReal2D(e1,1,0));
|
||||
cvSetReal2D(e1,2,0,-cvGetReal2D(e1,2,0));
|
||||
}
|
||||
|
||||
|
||||
// Compute the left epipole e2 from e2' * F = 0 => F' * e2 = 0
|
||||
cvSetZero(TFTt);
|
||||
cvTranspose(TFT, TFTt);
|
||||
@@ -321,7 +321,7 @@ cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1
|
||||
cvSetReal2D(e2,1,0,-cvGetReal2D(e2,1,0));
|
||||
cvSetReal2D(e2,2,0,-cvGetReal2D(e2,2,0));
|
||||
}
|
||||
|
||||
|
||||
// Replace F by R2 * F * R1'
|
||||
cvSetZero(R1);
|
||||
cvSetReal2D(R1,0,0,cvGetReal2D(e1,0,0));
|
||||
@@ -337,7 +337,7 @@ cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1
|
||||
cvSetReal2D(R2,2,2,1);
|
||||
cvGEMM(R2,TFT,1,0,0,tmp33);
|
||||
cvGEMM(tmp33,R1,1,0,0,RTFTR,CV_GEMM_B_T);
|
||||
|
||||
|
||||
// Set f1 = e1(3), f2 = e2(3), a = F22, b = F23, c = F32, d = F33
|
||||
f1 = cvGetReal2D(e1,2,0);
|
||||
f2 = cvGetReal2D(e2,2,0);
|
||||
@@ -345,7 +345,7 @@ cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1
|
||||
b = cvGetReal2D(RTFTR,1,2);
|
||||
c = cvGetReal2D(RTFTR,2,1);
|
||||
d = cvGetReal2D(RTFTR,2,2);
|
||||
|
||||
|
||||
// Form the polynomial g(t) = k6*t⁶ + k5*t⁵ + k4*t⁴ + k3*t³ + k2*t² + k1*t + k0
|
||||
// from f1, f2, a, b, c and d
|
||||
cvSetReal2D(polynomial,0,6,( +b*c*c*f1*f1*f1*f1*a-a*a*d*f1*f1*f1*f1*c ));
|
||||
@@ -355,11 +355,11 @@ cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1
|
||||
cvSetReal2D(polynomial,0,2,( +4*a*b*b*b+4*b*b*f2*f2*c*d+4*f2*f2*f2*f2*c*d*d*d-a*a*d*c+b*c*c*a+4*a*b*f2*f2*d*d-2*a*d*d*f1*f1*b+2*b*b*c*f1*f1*d ));
|
||||
cvSetReal2D(polynomial,0,1,( +f2*f2*f2*f2*d*d*d*d+b*b*b*b+2*b*b*f2*f2*d*d-a*a*d*d+b*b*c*c ));
|
||||
cvSetReal2D(polynomial,0,0,( -a*d*d*b+b*b*c*d ));
|
||||
|
||||
|
||||
// Solve g(t) for t to get 6 roots
|
||||
cvSetZero(result);
|
||||
cvSolvePoly(polynomial, result, 100, 20);
|
||||
|
||||
|
||||
// Evaluate the cost function s(t) at the real part of the 6 roots
|
||||
t_min = DBL_MAX;
|
||||
s_val = 1./(f1*f1) + (c*c)/(a*a+f2*f2*c*c);
|
||||
@@ -371,7 +371,7 @@ cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1
|
||||
t_min = t;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// find the optimal x1 and y1 as the points on l1 and l2 closest to the origin
|
||||
tmp31->data.db[0] = t_min*t_min*f1;
|
||||
tmp31->data.db[1] = t_min;
|
||||
@@ -383,7 +383,7 @@ cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1
|
||||
cvGEMM(tmp33,tmp31,1,0,0,tmp31_2);
|
||||
x1 = tmp31_2->data.db[0];
|
||||
y1 = tmp31_2->data.db[1];
|
||||
|
||||
|
||||
tmp31->data.db[0] = f2*pow(c*t_min+d,2);
|
||||
tmp31->data.db[1] = -(a*t_min+b)*(c*t_min+d);
|
||||
tmp31->data.db[2] = f2*f2*pow(c*t_min+d,2) + pow(a*t_min+b,2);
|
||||
@@ -394,14 +394,14 @@ cvCorrectMatches(CvMat *F_, CvMat *points1_, CvMat *points2_, CvMat *new_points1
|
||||
cvGEMM(tmp33,tmp31,1,0,0,tmp31_2);
|
||||
x2 = tmp31_2->data.db[0];
|
||||
y2 = tmp31_2->data.db[1];
|
||||
|
||||
|
||||
// Return the points in the matrix format that the user wants
|
||||
points1->data.db[p*2] = x1;
|
||||
points1->data.db[p*2+1] = y1;
|
||||
points2->data.db[p*2] = x2;
|
||||
points2->data.db[p*2+1] = y2;
|
||||
}
|
||||
|
||||
|
||||
if( new_points1 )
|
||||
cvConvert( points1, new_points1 );
|
||||
if( new_points2 )
|
||||
|
@@ -57,9 +57,9 @@ class CV_Affine3D_EstTest : public cvtest::BaseTest
|
||||
{
|
||||
public:
|
||||
CV_Affine3D_EstTest();
|
||||
~CV_Affine3D_EstTest();
|
||||
~CV_Affine3D_EstTest();
|
||||
protected:
|
||||
void run(int);
|
||||
void run(int);
|
||||
|
||||
bool test4Points();
|
||||
bool testNPoints();
|
||||
@@ -82,25 +82,25 @@ struct WrapAff
|
||||
{
|
||||
return Point3d( p.x * F[0] + p.y * F[1] + p.z * F[2] + F[3],
|
||||
p.x * F[4] + p.y * F[5] + p.z * F[6] + F[7],
|
||||
p.x * F[8] + p.y * F[9] + p.z * F[10] + F[11] );
|
||||
p.x * F[8] + p.y * F[9] + p.z * F[10] + F[11] );
|
||||
}
|
||||
};
|
||||
|
||||
bool CV_Affine3D_EstTest::test4Points()
|
||||
{
|
||||
{
|
||||
Mat aff(3, 4, CV_64F);
|
||||
cv::randu(aff, Scalar(1), Scalar(3));
|
||||
|
||||
|
||||
// setting points that are no in the same line
|
||||
|
||||
Mat fpts(1, 4, CV_32FC3);
|
||||
Mat tpts(1, 4, CV_32FC3);
|
||||
|
||||
|
||||
fpts.ptr<Point3f>()[0] = Point3f( rngIn(1,2), rngIn(1,2), rngIn(5, 6) );
|
||||
fpts.ptr<Point3f>()[1] = Point3f( rngIn(3,4), rngIn(3,4), rngIn(5, 6) );
|
||||
fpts.ptr<Point3f>()[2] = Point3f( rngIn(1,2), rngIn(3,4), rngIn(5, 6) );
|
||||
fpts.ptr<Point3f>()[3] = Point3f( rngIn(3,4), rngIn(1,2), rngIn(5, 6) );
|
||||
|
||||
|
||||
transform(fpts.ptr<Point3f>(), fpts.ptr<Point3f>() + 4, tpts.ptr<Point3f>(), WrapAff(aff));
|
||||
|
||||
Mat aff_est;
|
||||
@@ -113,7 +113,7 @@ bool CV_Affine3D_EstTest::test4Points()
|
||||
//cout << norm(aff_est, aff, NORM_INF) << endl;
|
||||
ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -123,51 +123,51 @@ struct Noise
|
||||
Noise(float level) : l(level) {}
|
||||
Point3f operator()(const Point3f& p)
|
||||
{
|
||||
RNG& rng = theRNG();
|
||||
return Point3f( p.x + l * (float)rng, p.y + l * (float)rng, p.z + l * (float)rng);
|
||||
RNG& rng = theRNG();
|
||||
return Point3f( p.x + l * (float)rng, p.y + l * (float)rng, p.z + l * (float)rng);
|
||||
}
|
||||
};
|
||||
|
||||
bool CV_Affine3D_EstTest::testNPoints()
|
||||
{
|
||||
{
|
||||
Mat aff(3, 4, CV_64F);
|
||||
cv::randu(aff, Scalar(-2), Scalar(2));
|
||||
|
||||
|
||||
// setting points that are no in the same line
|
||||
|
||||
|
||||
const int n = 100;
|
||||
const int m = 3*n/5;
|
||||
const Point3f shift_outl = Point3f(15, 15, 15);
|
||||
const float noise_level = 20.f;
|
||||
|
||||
|
||||
Mat fpts(1, n, CV_32FC3);
|
||||
Mat tpts(1, n, CV_32FC3);
|
||||
|
||||
randu(fpts, Scalar::all(0), Scalar::all(100));
|
||||
|
||||
randu(fpts, Scalar::all(0), Scalar::all(100));
|
||||
transform(fpts.ptr<Point3f>(), fpts.ptr<Point3f>() + n, tpts.ptr<Point3f>(), WrapAff(aff));
|
||||
|
||||
/* adding noise*/
|
||||
transform(tpts.ptr<Point3f>() + m, tpts.ptr<Point3f>() + n, tpts.ptr<Point3f>() + m, bind2nd(plus<Point3f>(), shift_outl));
|
||||
transform(tpts.ptr<Point3f>() + m, tpts.ptr<Point3f>() + n, tpts.ptr<Point3f>() + m, Noise(noise_level));
|
||||
|
||||
|
||||
Mat aff_est;
|
||||
vector<uchar> outl;
|
||||
int res = estimateAffine3D(fpts, tpts, aff_est, outl);
|
||||
|
||||
if (!res)
|
||||
{
|
||||
{
|
||||
ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH);
|
||||
return false;
|
||||
}
|
||||
|
||||
const double thres = 1e-4;
|
||||
if (norm(aff_est, aff, NORM_INF) > thres)
|
||||
{
|
||||
{
|
||||
ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool outl_good = count(outl.begin(), outl.end(), 1) == m &&
|
||||
bool outl_good = count(outl.begin(), outl.end(), 1) == m &&
|
||||
m == accumulate(outl.begin(), outl.begin() + m, 0);
|
||||
|
||||
if (!outl_good)
|
||||
@@ -180,9 +180,9 @@ bool CV_Affine3D_EstTest::testNPoints()
|
||||
|
||||
|
||||
void CV_Affine3D_EstTest::run( int /* start_from */)
|
||||
{
|
||||
{
|
||||
cvtest::DefaultRngAuto dra;
|
||||
|
||||
|
||||
if (!test4Points())
|
||||
return;
|
||||
|
||||
|
@@ -52,32 +52,32 @@ class CV_CameraCalibrationBadArgTest : public cvtest::BadArgTest
|
||||
public:
|
||||
CV_CameraCalibrationBadArgTest() : imgSize(800, 600) {}
|
||||
~CV_CameraCalibrationBadArgTest() {}
|
||||
protected:
|
||||
void run(int);
|
||||
protected:
|
||||
void run(int);
|
||||
void run_func(void) {};
|
||||
|
||||
const static int M = 1;
|
||||
|
||||
Size imgSize;
|
||||
Size corSize;
|
||||
Mat chessBoard;
|
||||
Mat chessBoard;
|
||||
Mat corners;
|
||||
|
||||
struct C_Caller
|
||||
{
|
||||
CvMat* objPts;
|
||||
CvMat* imgPts;
|
||||
CvMat* npoints;
|
||||
CvMat* npoints;
|
||||
Size imageSize;
|
||||
CvMat *cameraMatrix;
|
||||
CvMat *distCoeffs;
|
||||
CvMat *rvecs;
|
||||
CvMat *tvecs;
|
||||
CvMat *tvecs;
|
||||
int flags;
|
||||
|
||||
void operator()() const
|
||||
{
|
||||
cvCalibrateCamera2(objPts, imgPts, npoints, imageSize,
|
||||
void operator()() const
|
||||
{
|
||||
cvCalibrateCamera2(objPts, imgPts, npoints, imageSize,
|
||||
cameraMatrix, distCoeffs, rvecs, tvecs, flags );
|
||||
}
|
||||
};
|
||||
@@ -85,41 +85,41 @@ protected:
|
||||
|
||||
|
||||
void CV_CameraCalibrationBadArgTest::run( int /* start_from */ )
|
||||
{
|
||||
{
|
||||
Mat_<float> camMat(3, 3);
|
||||
Mat_<float> distCoeffs0(1, 5);
|
||||
|
||||
camMat << 300.f, 0.f, imgSize.width/2.f, 0, 300.f, imgSize.height/2.f, 0.f, 0.f, 1.f;
|
||||
|
||||
camMat << 300.f, 0.f, imgSize.width/2.f, 0, 300.f, imgSize.height/2.f, 0.f, 0.f, 1.f;
|
||||
distCoeffs0 << 1.2f, 0.2f, 0.f, 0.f, 0.f;
|
||||
|
||||
|
||||
ChessBoardGenerator cbg(Size(8,6));
|
||||
corSize = cbg.cornersSize();
|
||||
vector<Point2f> exp_corn;
|
||||
vector<Point2f> exp_corn;
|
||||
chessBoard = cbg(Mat(imgSize, CV_8U, Scalar(0)), camMat, distCoeffs0, exp_corn);
|
||||
Mat_<Point2f>(corSize.height, corSize.width, (Point2f*)&exp_corn[0]).copyTo(corners);
|
||||
|
||||
|
||||
CvMat objPts, imgPts, npoints, cameraMatrix, distCoeffs, rvecs, tvecs;
|
||||
Mat zeros(1, sizeof(CvMat), CV_8U, Scalar(0));
|
||||
|
||||
C_Caller caller, bad_caller;
|
||||
caller.imageSize = imgSize;
|
||||
caller.imageSize = imgSize;
|
||||
caller.objPts = &objPts;
|
||||
caller.imgPts = &imgPts;
|
||||
caller.npoints = &npoints;
|
||||
caller.npoints = &npoints;
|
||||
caller.cameraMatrix = &cameraMatrix;
|
||||
caller.distCoeffs = &distCoeffs;
|
||||
caller.rvecs = &rvecs;
|
||||
caller.tvecs = &tvecs;
|
||||
caller.tvecs = &tvecs;
|
||||
|
||||
/////////////////////////////
|
||||
/////////////////////////////
|
||||
Mat objPts_cpp;
|
||||
Mat imgPts_cpp;
|
||||
Mat npoints_cpp;
|
||||
Mat npoints_cpp;
|
||||
Mat cameraMatrix_cpp;
|
||||
Mat distCoeffs_cpp;
|
||||
Mat rvecs_cpp;
|
||||
Mat tvecs_cpp;
|
||||
|
||||
Mat tvecs_cpp;
|
||||
|
||||
objPts_cpp.create(corSize, CV_32FC3);
|
||||
for(int j = 0; j < corSize.height; ++j)
|
||||
for(int i = 0; i < corSize.width; ++i)
|
||||
@@ -132,35 +132,35 @@ void CV_CameraCalibrationBadArgTest::run( int /* start_from */ )
|
||||
distCoeffs_cpp.create(5, 1, CV_32F);
|
||||
rvecs_cpp.create(M, 1, CV_32FC3);
|
||||
tvecs_cpp.create(M, 1, CV_32FC3);
|
||||
|
||||
|
||||
caller.flags = 0;
|
||||
//CV_CALIB_USE_INTRINSIC_GUESS; //CV_CALIB_FIX_ASPECT_RATIO
|
||||
//CV_CALIB_USE_INTRINSIC_GUESS //CV_CALIB_FIX_ASPECT_RATIO
|
||||
//CV_CALIB_FIX_PRINCIPAL_POINT //CV_CALIB_ZERO_TANGENT_DIST
|
||||
//CV_CALIB_FIX_FOCAL_LENGTH //CV_CALIB_FIX_K1 //CV_CALIB_FIX_K2 //CV_CALIB_FIX_K3
|
||||
|
||||
|
||||
objPts = objPts_cpp;
|
||||
imgPts = imgPts_cpp;
|
||||
npoints = npoints_cpp;
|
||||
npoints = npoints_cpp;
|
||||
cameraMatrix = cameraMatrix_cpp;
|
||||
distCoeffs = distCoeffs_cpp;
|
||||
rvecs = rvecs_cpp;
|
||||
tvecs = tvecs_cpp;
|
||||
tvecs = tvecs_cpp;
|
||||
|
||||
/* /*//*/ */
|
||||
int errors = 0;
|
||||
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller.objPts = 0;
|
||||
errors += run_test_case( CV_StsBadArg, "Zero passed in objPts", bad_caller);
|
||||
errors += run_test_case( CV_StsBadArg, "Zero passed in objPts", bad_caller);
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller.imgPts = 0;
|
||||
errors += run_test_case( CV_StsBadArg, "Zero passed in imgPts", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Zero passed in imgPts", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller.npoints = 0;
|
||||
errors += run_test_case( CV_StsBadArg, "Zero passed in npoints", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Zero passed in npoints", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller.cameraMatrix = 0;
|
||||
@@ -179,65 +179,65 @@ void CV_CameraCalibrationBadArgTest::run( int /* start_from */ )
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad image height", bad_caller );
|
||||
|
||||
Mat bad_nts_cpp1 = Mat_<float>(M, 1, 1.f);
|
||||
Mat bad_nts_cpp2 = Mat_<int>(3, 3, corSize.width * corSize.height);
|
||||
Mat bad_nts_cpp2 = Mat_<int>(3, 3, corSize.width * corSize.height);
|
||||
CvMat bad_npts_c1 = bad_nts_cpp1;
|
||||
CvMat bad_npts_c2 = bad_nts_cpp2;
|
||||
|
||||
bad_caller = caller;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller.npoints = &bad_npts_c1;
|
||||
errors += run_test_case( CV_StsUnsupportedFormat, "Bad npoints format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.npoints = &bad_npts_c2;
|
||||
errors += run_test_case( CV_StsUnsupportedFormat, "Bad npoints size", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller.rvecs = (CvMat*)zeros.ptr();
|
||||
errors += run_test_case( CV_StsBadArg, "Bad rvecs header", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.tvecs = (CvMat*)zeros.ptr();
|
||||
errors += run_test_case( CV_StsBadArg, "Bad tvecs header", bad_caller );
|
||||
|
||||
Mat bad_rvecs_cpp1(M+1, 1, CV_32FC3); CvMat bad_rvecs_c1 = bad_rvecs_cpp1;
|
||||
Mat bad_tvecs_cpp1(M+1, 1, CV_32FC3); CvMat bad_tvecs_c1 = bad_tvecs_cpp1;
|
||||
Mat bad_tvecs_cpp1(M+1, 1, CV_32FC3); CvMat bad_tvecs_c1 = bad_tvecs_cpp1;
|
||||
|
||||
|
||||
|
||||
|
||||
Mat bad_rvecs_cpp2(M, 2, CV_32FC3); CvMat bad_rvecs_c2 = bad_rvecs_cpp2;
|
||||
Mat bad_tvecs_cpp2(M, 2, CV_32FC3); CvMat bad_tvecs_c2 = bad_tvecs_cpp2;
|
||||
Mat bad_tvecs_cpp2(M, 2, CV_32FC3); CvMat bad_tvecs_c2 = bad_tvecs_cpp2;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.rvecs = &bad_rvecs_c1;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad tvecs header", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.rvecs = &bad_rvecs_c2;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad tvecs header", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.tvecs = &bad_tvecs_c1;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad tvecs header", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.tvecs = &bad_tvecs_c2;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad tvecs header", bad_caller );
|
||||
|
||||
|
||||
Mat bad_cameraMatrix_cpp1(3, 3, CV_32S); CvMat bad_cameraMatrix_c1 = bad_cameraMatrix_cpp1;
|
||||
Mat bad_cameraMatrix_cpp2(2, 3, CV_32F); CvMat bad_cameraMatrix_c2 = bad_cameraMatrix_cpp2;
|
||||
Mat bad_cameraMatrix_cpp3(3, 2, CV_64F); CvMat bad_cameraMatrix_c3 = bad_cameraMatrix_cpp3;
|
||||
|
||||
|
||||
|
||||
bad_caller = caller;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller.cameraMatrix = &bad_cameraMatrix_c1;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad camearaMatrix header", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.cameraMatrix = &bad_cameraMatrix_c2;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad camearaMatrix header", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.cameraMatrix = &bad_cameraMatrix_c3;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad camearaMatrix header", bad_caller );
|
||||
|
||||
@@ -245,65 +245,65 @@ void CV_CameraCalibrationBadArgTest::run( int /* start_from */ )
|
||||
Mat bad_distCoeffs_cpp2(2, 2, CV_64F); CvMat bad_distCoeffs_c2 = bad_distCoeffs_cpp2;
|
||||
Mat bad_distCoeffs_cpp3(1, 6, CV_64F); CvMat bad_distCoeffs_c3 = bad_distCoeffs_cpp3;
|
||||
|
||||
|
||||
|
||||
bad_caller = caller;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller.distCoeffs = &bad_distCoeffs_c1;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad distCoeffs header", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.distCoeffs = &bad_distCoeffs_c2;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad distCoeffs header", bad_caller );
|
||||
|
||||
|
||||
bad_caller = caller;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller.distCoeffs = &bad_distCoeffs_c3;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad distCoeffs header", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad distCoeffs header", bad_caller );
|
||||
|
||||
double CM[] = {0, 0, 0, /**/0, 0, 0, /**/0, 0, 0};
|
||||
Mat bad_cameraMatrix_cpp4(3, 3, CV_64F, CM); CvMat bad_cameraMatrix_c4 = bad_cameraMatrix_cpp4;
|
||||
Mat bad_cameraMatrix_cpp4(3, 3, CV_64F, CM); CvMat bad_cameraMatrix_c4 = bad_cameraMatrix_cpp4;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.flags |= CV_CALIB_USE_INTRINSIC_GUESS;
|
||||
bad_caller.cameraMatrix = &bad_cameraMatrix_c4;
|
||||
CM[0] = 0; //bad fx
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
|
||||
CM[0] = 500; CM[4] = 0; //bad fy
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
|
||||
CM[0] = 500; CM[4] = 500; CM[2] = -1; //bad cx
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
|
||||
CM[0] = 500; CM[4] = 500; CM[2] = imgSize.width*2; //bad cx
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
|
||||
CM[0] = 500; CM[4] = 500; CM[2] = imgSize.width/2; CM[5] = -1; //bad cy
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
|
||||
CM[0] = 500; CM[4] = 500; CM[2] = imgSize.width/2; CM[5] = imgSize.height*2; //bad cy
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
|
||||
CM[0] = 500; CM[4] = 500; CM[2] = imgSize.width/2; CM[5] = imgSize.height/2;
|
||||
CM[1] = 0.1; //Non-zero skew
|
||||
CM[1] = 0.1; //Non-zero skew
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
|
||||
CM[1] = 0;
|
||||
CM[3] = 0.1; /* mad matrix shape */
|
||||
CM[3] = 0.1; /* mad matrix shape */
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
|
||||
CM[3] = 0; CM[6] = 0.1; /* mad matrix shape */
|
||||
CM[3] = 0; CM[6] = 0.1; /* mad matrix shape */
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
|
||||
CM[3] = 0; CM[6] = 0; CM[7] = 0.1; /* mad matrix shape */
|
||||
CM[3] = 0; CM[6] = 0; CM[7] = 0.1; /* mad matrix shape */
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
|
||||
CM[3] = 0; CM[6] = 0; CM[7] = 0; CM[8] = 1.1; /* mad matrix shape */
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
CM[3] = 0; CM[6] = 0; CM[7] = 0; CM[8] = 1.1; /* mad matrix shape */
|
||||
errors += run_test_case( CV_StsOutOfRange, "Bad camearaMatrix data", bad_caller );
|
||||
CM[8] = 1.0;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
Mat bad_objPts_cpp5 = objPts_cpp.clone(); CvMat bad_objPts_c5 = bad_objPts_cpp5;
|
||||
bad_caller.objPts = &bad_objPts_c5;
|
||||
|
||||
@@ -311,17 +311,17 @@ void CV_CameraCalibrationBadArgTest::run( int /* start_from */ )
|
||||
for(int i = 0; i < bad_objPts_cpp5.rows; ++i)
|
||||
bad_objPts_cpp5.at<Point3f>(0, i).z += ((float)rng - 0.5f);
|
||||
|
||||
errors += run_test_case( CV_StsBadArg, "Bad objPts data", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad objPts data", bad_caller );
|
||||
|
||||
if (errors)
|
||||
ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH);
|
||||
else
|
||||
ts->set_failed_test_info(cvtest::TS::OK);
|
||||
ts->set_failed_test_info(cvtest::TS::OK);
|
||||
|
||||
//try { caller(); }
|
||||
//catch (...)
|
||||
//{
|
||||
// ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH);
|
||||
//{
|
||||
// ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH);
|
||||
// printf("+!");
|
||||
//}
|
||||
}
|
||||
@@ -332,11 +332,11 @@ class CV_Rodrigues2BadArgTest : public cvtest::BadArgTest
|
||||
public:
|
||||
CV_Rodrigues2BadArgTest() {}
|
||||
~CV_Rodrigues2BadArgTest() {}
|
||||
protected:
|
||||
protected:
|
||||
void run_func(void) {};
|
||||
|
||||
struct C_Caller
|
||||
{
|
||||
{
|
||||
CvMat* src;
|
||||
CvMat* dst;
|
||||
CvMat* jacobian;
|
||||
@@ -349,21 +349,21 @@ protected:
|
||||
Mat zeros(1, sizeof(CvMat), CV_8U, Scalar(0));
|
||||
CvMat src_c, dst_c, jacobian_c;
|
||||
|
||||
Mat src_cpp(3, 1, CV_32F); src_c = src_cpp;
|
||||
Mat dst_cpp(3, 3, CV_32F); dst_c = dst_cpp;
|
||||
Mat src_cpp(3, 1, CV_32F); src_c = src_cpp;
|
||||
Mat dst_cpp(3, 3, CV_32F); dst_c = dst_cpp;
|
||||
Mat jacobian_cpp(3, 9, CV_32F); jacobian_c = jacobian_cpp;
|
||||
|
||||
|
||||
C_Caller caller, bad_caller;
|
||||
caller.src = &src_c;
|
||||
caller.dst = &dst_c;
|
||||
caller.jacobian = &jacobian_c;
|
||||
|
||||
/* try { caller(); }
|
||||
/* try { caller(); }
|
||||
catch (...)
|
||||
{
|
||||
printf("badasfas");
|
||||
}*/
|
||||
|
||||
|
||||
/*/*//*/*/
|
||||
int errors = 0;
|
||||
|
||||
@@ -400,7 +400,7 @@ protected:
|
||||
bad_caller = caller;
|
||||
bad_caller.jacobian = &bad_jac_c2;
|
||||
errors += run_test_case( CV_StsUnmatchedFormats, "Bad jacobian format", bad_caller );
|
||||
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller.jacobian = &bad_jac_c3;
|
||||
errors += run_test_case( CV_StsBadSize, "Bad jacobian format", bad_caller );
|
||||
@@ -429,21 +429,21 @@ protected:
|
||||
|
||||
|
||||
/********/
|
||||
src_cpp.create(3, 3, CV_32F); src_c = src_cpp;
|
||||
dst_cpp.create(3, 1, CV_32F); dst_c = dst_cpp;
|
||||
src_cpp.create(3, 3, CV_32F); src_c = src_cpp;
|
||||
dst_cpp.create(3, 1, CV_32F); dst_c = dst_cpp;
|
||||
|
||||
|
||||
Mat bad_dst_cpp5(5, 5, CV_32F); CvMat bad_dst_c5 = bad_dst_cpp5;
|
||||
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller.dst = &bad_dst_c5;
|
||||
errors += run_test_case( CV_StsBadSize, "Bad dst format", bad_caller );
|
||||
|
||||
|
||||
|
||||
|
||||
if (errors)
|
||||
ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH);
|
||||
else
|
||||
ts->set_failed_test_info(cvtest::TS::OK);
|
||||
ts->set_failed_test_info(cvtest::TS::OK);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -454,47 +454,47 @@ class CV_ProjectPoints2BadArgTest : public cvtest::BadArgTest
|
||||
{
|
||||
public:
|
||||
CV_ProjectPoints2BadArgTest() : camMat(3, 3), distCoeffs(1, 5)
|
||||
{
|
||||
{
|
||||
Size imsSize(800, 600);
|
||||
camMat << 300.f, 0.f, imsSize.width/2.f, 0, 300.f, imsSize.height/2.f, 0.f, 0.f, 1.f;
|
||||
camMat << 300.f, 0.f, imsSize.width/2.f, 0, 300.f, imsSize.height/2.f, 0.f, 0.f, 1.f;
|
||||
distCoeffs << 1.2f, 0.2f, 0.f, 0.f, 0.f;
|
||||
};
|
||||
~CV_ProjectPoints2BadArgTest() {} ;
|
||||
protected:
|
||||
protected:
|
||||
void run_func(void) {};
|
||||
|
||||
Mat_<float> camMat;
|
||||
Mat_<float> distCoeffs;
|
||||
|
||||
|
||||
struct C_Caller
|
||||
{
|
||||
{
|
||||
CvMat* objectPoints;
|
||||
CvMat* r_vec;
|
||||
CvMat* t_vec;
|
||||
CvMat* A;
|
||||
CvMat* distCoeffs;
|
||||
CvMat* imagePoints;
|
||||
CvMat* imagePoints;
|
||||
CvMat* dpdr;
|
||||
CvMat* dpdt;
|
||||
CvMat* dpdt;
|
||||
CvMat* dpdf;
|
||||
CvMat* dpdc;
|
||||
CvMat* dpdc;
|
||||
CvMat* dpdk;
|
||||
double aspectRatio;
|
||||
|
||||
void operator()()
|
||||
{
|
||||
cvProjectPoints2( objectPoints, r_vec, t_vec, A, distCoeffs, imagePoints,
|
||||
dpdr, dpdt, dpdf, dpdc, dpdk, aspectRatio );
|
||||
void operator()()
|
||||
{
|
||||
cvProjectPoints2( objectPoints, r_vec, t_vec, A, distCoeffs, imagePoints,
|
||||
dpdr, dpdt, dpdf, dpdc, dpdk, aspectRatio );
|
||||
}
|
||||
};
|
||||
|
||||
void run(int /* start_from */ )
|
||||
{
|
||||
{
|
||||
CvMat zeros;
|
||||
memset(&zeros, 0, sizeof(zeros));
|
||||
|
||||
C_Caller caller, bad_caller;
|
||||
CvMat objectPoints_c, r_vec_c, t_vec_c, A_c, distCoeffs_c, imagePoints_c,
|
||||
CvMat objectPoints_c, r_vec_c, t_vec_c, A_c, distCoeffs_c, imagePoints_c,
|
||||
dpdr_c, dpdt_c, dpdf_c, dpdc_c, dpdk_c;
|
||||
|
||||
const int n = 10;
|
||||
@@ -503,124 +503,124 @@ protected:
|
||||
|
||||
Mat objectPoints_cpp(1, n, CV_32FC3);
|
||||
randu(objectPoints_cpp, Scalar::all(1), Scalar::all(10));
|
||||
objectPoints_c = objectPoints_cpp;
|
||||
objectPoints_c = objectPoints_cpp;
|
||||
|
||||
Mat t_vec_cpp(Mat::zeros(1, 3, CV_32F)); t_vec_c = t_vec_cpp;
|
||||
Mat r_vec_cpp;
|
||||
Rodrigues(Mat::eye(3, 3, CV_32F), r_vec_cpp); r_vec_c = r_vec_cpp;
|
||||
|
||||
Mat r_vec_cpp;
|
||||
Rodrigues(Mat::eye(3, 3, CV_32F), r_vec_cpp); r_vec_c = r_vec_cpp;
|
||||
|
||||
Mat A_cpp = camMat.clone(); A_c = A_cpp;
|
||||
Mat distCoeffs_cpp = distCoeffs.clone(); distCoeffs_c = distCoeffs_cpp;
|
||||
|
||||
|
||||
Mat dpdr_cpp(2*n, 3, CV_32F); dpdr_c = dpdr_cpp;
|
||||
Mat dpdt_cpp(2*n, 3, CV_32F); dpdt_c = dpdt_cpp;
|
||||
Mat dpdf_cpp(2*n, 2, CV_32F); dpdf_c = dpdf_cpp;
|
||||
Mat dpdc_cpp(2*n, 2, CV_32F); dpdc_c = dpdc_cpp;
|
||||
Mat dpdk_cpp(2*n, 4, CV_32F); dpdk_c = dpdk_cpp;
|
||||
|
||||
|
||||
caller.aspectRatio = 1.0;
|
||||
caller.objectPoints = &objectPoints_c;
|
||||
caller.r_vec = &r_vec_c;
|
||||
caller.t_vec = &t_vec_c;
|
||||
caller.A = &A_c;
|
||||
caller.distCoeffs = &distCoeffs_c;
|
||||
caller.imagePoints = &imagePoints_c;
|
||||
caller.imagePoints = &imagePoints_c;
|
||||
caller.dpdr = &dpdr_c;
|
||||
caller.dpdt = &dpdt_c;
|
||||
caller.dpdt = &dpdt_c;
|
||||
caller.dpdf = &dpdf_c;
|
||||
caller.dpdc = &dpdc_c;
|
||||
caller.dpdk = &dpdk_c;
|
||||
|
||||
caller.dpdc = &dpdc_c;
|
||||
caller.dpdk = &dpdk_c;
|
||||
|
||||
/********************/
|
||||
int errors = 0;
|
||||
|
||||
|
||||
bad_caller = caller;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller.objectPoints = 0;
|
||||
errors += run_test_case( CV_StsBadArg, "Zero objectPoints", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Zero objectPoints", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.r_vec = 0;
|
||||
errors += run_test_case( CV_StsBadArg, "Zero r_vec", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Zero r_vec", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.t_vec = 0;
|
||||
errors += run_test_case( CV_StsBadArg, "Zero t_vec", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Zero t_vec", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.A = 0;
|
||||
errors += run_test_case( CV_StsBadArg, "Zero camMat", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Zero camMat", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.imagePoints = 0;
|
||||
errors += run_test_case( CV_StsBadArg, "Zero imagePoints", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Zero imagePoints", bad_caller );
|
||||
|
||||
/****************************/
|
||||
Mat bad_r_vec_cpp1(r_vec_cpp.size(), CV_32S); CvMat bad_r_vec_c1 = bad_r_vec_cpp1;
|
||||
Mat bad_r_vec_cpp2(2, 2, CV_32F); CvMat bad_r_vec_c2 = bad_r_vec_cpp2;
|
||||
Mat bad_r_vec_cpp3(r_vec_cpp.size(), CV_32FC2); CvMat bad_r_vec_c3 = bad_r_vec_cpp3;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.r_vec = &bad_r_vec_c1;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad rvec format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad rvec format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.r_vec = &bad_r_vec_c2;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad rvec format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad rvec format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.r_vec = &bad_r_vec_c3;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad rvec format", bad_caller );
|
||||
|
||||
errors += run_test_case( CV_StsBadArg, "Bad rvec format", bad_caller );
|
||||
|
||||
/****************************/
|
||||
Mat bad_t_vec_cpp1(t_vec_cpp.size(), CV_32S); CvMat bad_t_vec_c1 = bad_t_vec_cpp1;
|
||||
Mat bad_t_vec_cpp2(2, 2, CV_32F); CvMat bad_t_vec_c2 = bad_t_vec_cpp2;
|
||||
Mat bad_t_vec_cpp3(1, 1, CV_32FC2); CvMat bad_t_vec_c3 = bad_t_vec_cpp3;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.t_vec = &bad_t_vec_c1;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad tvec format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad tvec format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.t_vec = &bad_t_vec_c2;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad tvec format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad tvec format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.t_vec = &bad_t_vec_c3;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad tvec format", bad_caller );
|
||||
|
||||
errors += run_test_case( CV_StsBadArg, "Bad tvec format", bad_caller );
|
||||
|
||||
/****************************/
|
||||
Mat bad_A_cpp1(A_cpp.size(), CV_32S); CvMat bad_A_c1 = bad_A_cpp1;
|
||||
Mat bad_A_cpp2(2, 2, CV_32F); CvMat bad_A_c2 = bad_A_cpp2;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.A = &bad_A_c1;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad A format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad A format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.A = &bad_A_c2;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad A format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad A format", bad_caller );
|
||||
|
||||
/****************************/
|
||||
Mat bad_distCoeffs_cpp1(distCoeffs_cpp.size(), CV_32S); CvMat bad_distCoeffs_c1 = bad_distCoeffs_cpp1;
|
||||
Mat bad_distCoeffs_cpp2(2, 2, CV_32F); CvMat bad_distCoeffs_c2 = bad_distCoeffs_cpp2;
|
||||
Mat bad_distCoeffs_cpp3(1, 7, CV_32F); CvMat bad_distCoeffs_c3 = bad_distCoeffs_cpp3;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.distCoeffs = &zeros;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad distCoeffs format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad distCoeffs format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.distCoeffs = &bad_distCoeffs_c1;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad distCoeffs format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad distCoeffs format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.distCoeffs = &bad_distCoeffs_c2;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad distCoeffs format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad distCoeffs format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.distCoeffs = &bad_distCoeffs_c3;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad distCoeffs format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad distCoeffs format", bad_caller );
|
||||
|
||||
|
||||
/****************************/
|
||||
@@ -628,105 +628,105 @@ protected:
|
||||
Mat bad_dpdr_cpp2(dpdr_cpp.cols+1, 3, CV_32F); CvMat bad_dpdr_c2 = bad_dpdr_cpp2;
|
||||
Mat bad_dpdr_cpp3(dpdr_cpp.cols, 7, CV_32F); CvMat bad_dpdr_c3 = bad_dpdr_cpp3;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdr = &zeros;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdr format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdr format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdr = &bad_dpdr_c1;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdr format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdr format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdr = &bad_dpdr_c2;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdr format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdr format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdr = &bad_dpdr_c3;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdr format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdr format", bad_caller );
|
||||
|
||||
/****************************/
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdt = &zeros;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdt format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdt format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdt = &bad_dpdr_c1;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdt format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdt format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdt = &bad_dpdr_c2;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdt format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdt format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdt = &bad_dpdr_c3;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdt format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdt format", bad_caller );
|
||||
|
||||
/****************************/
|
||||
|
||||
Mat bad_dpdf_cpp2(dpdr_cpp.cols+1, 2, CV_32F); CvMat bad_dpdf_c2 = bad_dpdf_cpp2;
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdf = &zeros;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdf format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdf format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdf = &bad_dpdr_c1;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdf format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdf format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdf = &bad_dpdf_c2;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdf format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdf format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdf = &bad_dpdr_c3;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdf format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdf format", bad_caller );
|
||||
|
||||
/****************************/
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdc = &zeros;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdc format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdc format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdc = &bad_dpdr_c1;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdc format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdc format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdc = &bad_dpdf_c2;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdc format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdc format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdc = &bad_dpdr_c3;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdc format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdc format", bad_caller );
|
||||
|
||||
/****************************/
|
||||
/****************************/
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdk = &zeros;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdk format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdk format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdk = &bad_dpdr_c1;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdk format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdk format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdk = &bad_dpdf_c2;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdk format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdk format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.dpdk = &bad_dpdr_c3;
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdk format", bad_caller );
|
||||
errors += run_test_case( CV_StsBadArg, "Bad dpdk format", bad_caller );
|
||||
|
||||
bad_caller = caller;
|
||||
bad_caller = caller;
|
||||
bad_caller.distCoeffs = 0;
|
||||
errors += run_test_case( CV_StsNullPtr, "distCoeffs is NULL while dpdk is not", bad_caller );
|
||||
|
||||
|
||||
errors += run_test_case( CV_StsNullPtr, "distCoeffs is NULL while dpdk is not", bad_caller );
|
||||
|
||||
|
||||
if (errors)
|
||||
ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH);
|
||||
else
|
||||
ts->set_failed_test_info(cvtest::TS::OK);
|
||||
ts->set_failed_test_info(cvtest::TS::OK);
|
||||
}
|
||||
};
|
||||
|
||||
|
@@ -51,18 +51,18 @@ using namespace cv;
|
||||
using namespace std;
|
||||
|
||||
ChessBoardGenerator::ChessBoardGenerator(const Size& _patternSize) : sensorWidth(32), sensorHeight(24),
|
||||
squareEdgePointsNum(200), min_cos(sqrt(2.f)*0.5f), cov(0.5),
|
||||
squareEdgePointsNum(200), min_cos(sqrt(2.f)*0.5f), cov(0.5),
|
||||
patternSize(_patternSize), rendererResolutionMultiplier(4), tvec(Mat::zeros(1, 3, CV_32F))
|
||||
{
|
||||
{
|
||||
Rodrigues(Mat::eye(3, 3, CV_32F), rvec);
|
||||
}
|
||||
|
||||
void cv::ChessBoardGenerator::generateEdge(const Point3f& p1, const Point3f& p2, vector<Point3f>& out) const
|
||||
{
|
||||
Point3f step = (p2 - p1) * (1.f/squareEdgePointsNum);
|
||||
{
|
||||
Point3f step = (p2 - p1) * (1.f/squareEdgePointsNum);
|
||||
for(size_t n = 0; n < squareEdgePointsNum; ++n)
|
||||
out.push_back( p1 + step * (float)n);
|
||||
}
|
||||
}
|
||||
|
||||
Size cv::ChessBoardGenerator::cornersSize() const
|
||||
{
|
||||
@@ -73,7 +73,7 @@ struct Mult
|
||||
{
|
||||
float m;
|
||||
Mult(int mult) : m((float)mult) {}
|
||||
Point2f operator()(const Point2f& p)const { return p * m; }
|
||||
Point2f operator()(const Point2f& p)const { return p * m; }
|
||||
};
|
||||
|
||||
void cv::ChessBoardGenerator::generateBasis(Point3f& pb1, Point3f& pb2) const
|
||||
@@ -82,40 +82,40 @@ void cv::ChessBoardGenerator::generateBasis(Point3f& pb1, Point3f& pb2) const
|
||||
|
||||
Vec3f n;
|
||||
for(;;)
|
||||
{
|
||||
{
|
||||
n[0] = rng.uniform(-1.f, 1.f);
|
||||
n[1] = rng.uniform(-1.f, 1.f);
|
||||
n[2] = rng.uniform(-1.f, 1.f);
|
||||
float len = (float)norm(n);
|
||||
n[0]/=len;
|
||||
n[1]/=len;
|
||||
n[2] = rng.uniform(-1.f, 1.f);
|
||||
float len = (float)norm(n);
|
||||
n[0]/=len;
|
||||
n[1]/=len;
|
||||
n[2]/=len;
|
||||
|
||||
|
||||
if (n[2] > min_cos)
|
||||
break;
|
||||
}
|
||||
|
||||
Vec3f n_temp = n; n_temp[0] += 100;
|
||||
Vec3f b1 = n.cross(n_temp);
|
||||
Vec3f b1 = n.cross(n_temp);
|
||||
Vec3f b2 = n.cross(b1);
|
||||
float len_b1 = (float)norm(b1);
|
||||
float len_b2 = (float)norm(b2);
|
||||
float len_b2 = (float)norm(b2);
|
||||
|
||||
pb1 = Point3f(b1[0]/len_b1, b1[1]/len_b1, b1[2]/len_b1);
|
||||
pb2 = Point3f(b2[0]/len_b1, b2[1]/len_b2, b2[2]/len_b2);
|
||||
}
|
||||
|
||||
|
||||
Mat cv::ChessBoardGenerator::generateChessBoard(const Mat& bg, const Mat& camMat, const Mat& distCoeffs,
|
||||
const Point3f& zero, const Point3f& pb1, const Point3f& pb2,
|
||||
Mat cv::ChessBoardGenerator::generateChessBoard(const Mat& bg, const Mat& camMat, const Mat& distCoeffs,
|
||||
const Point3f& zero, const Point3f& pb1, const Point3f& pb2,
|
||||
float sqWidth, float sqHeight, const vector<Point3f>& whole,
|
||||
vector<Point2f>& corners) const
|
||||
{
|
||||
vector< vector<Point> > squares_black;
|
||||
{
|
||||
vector< vector<Point> > squares_black;
|
||||
for(int i = 0; i < patternSize.width; ++i)
|
||||
for(int j = 0; j < patternSize.height; ++j)
|
||||
if ( (i % 2 == 0 && j % 2 == 0) || (i % 2 != 0 && j % 2 != 0) )
|
||||
{
|
||||
if ( (i % 2 == 0 && j % 2 == 0) || (i % 2 != 0 && j % 2 != 0) )
|
||||
{
|
||||
vector<Point3f> pts_square3d;
|
||||
vector<Point2f> pts_square2d;
|
||||
|
||||
@@ -126,23 +126,23 @@ Mat cv::ChessBoardGenerator::generateChessBoard(const Mat& bg, const Mat& camMat
|
||||
generateEdge(p1, p2, pts_square3d);
|
||||
generateEdge(p2, p3, pts_square3d);
|
||||
generateEdge(p3, p4, pts_square3d);
|
||||
generateEdge(p4, p1, pts_square3d);
|
||||
|
||||
projectPoints(Mat(pts_square3d), rvec, tvec, camMat, distCoeffs, pts_square2d);
|
||||
squares_black.resize(squares_black.size() + 1);
|
||||
vector<Point2f> temp;
|
||||
approxPolyDP(Mat(pts_square2d), temp, 1.0, true);
|
||||
transform(temp.begin(), temp.end(), back_inserter(squares_black.back()), Mult(rendererResolutionMultiplier));
|
||||
}
|
||||
generateEdge(p4, p1, pts_square3d);
|
||||
|
||||
/* calculate corners */
|
||||
projectPoints(Mat(pts_square3d), rvec, tvec, camMat, distCoeffs, pts_square2d);
|
||||
squares_black.resize(squares_black.size() + 1);
|
||||
vector<Point2f> temp;
|
||||
approxPolyDP(Mat(pts_square2d), temp, 1.0, true);
|
||||
transform(temp.begin(), temp.end(), back_inserter(squares_black.back()), Mult(rendererResolutionMultiplier));
|
||||
}
|
||||
|
||||
/* calculate corners */
|
||||
corners3d.clear();
|
||||
for(int j = 0; j < patternSize.height - 1; ++j)
|
||||
for(int i = 0; i < patternSize.width - 1; ++i)
|
||||
corners3d.push_back(zero + (i + 1) * sqWidth * pb1 + (j + 1) * sqHeight * pb2);
|
||||
corners.clear();
|
||||
projectPoints(Mat(corners3d), rvec, tvec, camMat, distCoeffs, corners);
|
||||
|
||||
|
||||
vector<Point3f> whole3d;
|
||||
vector<Point2f> whole2d;
|
||||
generateEdge(whole[0], whole[1], whole3d);
|
||||
@@ -150,70 +150,70 @@ Mat cv::ChessBoardGenerator::generateChessBoard(const Mat& bg, const Mat& camMat
|
||||
generateEdge(whole[2], whole[3], whole3d);
|
||||
generateEdge(whole[3], whole[0], whole3d);
|
||||
projectPoints(Mat(whole3d), rvec, tvec, camMat, distCoeffs, whole2d);
|
||||
vector<Point2f> temp_whole2d;
|
||||
approxPolyDP(Mat(whole2d), temp_whole2d, 1.0, true);
|
||||
vector<Point2f> temp_whole2d;
|
||||
approxPolyDP(Mat(whole2d), temp_whole2d, 1.0, true);
|
||||
|
||||
vector< vector<Point > > whole_contour(1);
|
||||
transform(temp_whole2d.begin(), temp_whole2d.end(),
|
||||
back_inserter(whole_contour.front()), Mult(rendererResolutionMultiplier));
|
||||
transform(temp_whole2d.begin(), temp_whole2d.end(),
|
||||
back_inserter(whole_contour.front()), Mult(rendererResolutionMultiplier));
|
||||
|
||||
Mat result;
|
||||
if (rendererResolutionMultiplier == 1)
|
||||
{
|
||||
{
|
||||
result = bg.clone();
|
||||
drawContours(result, whole_contour, -1, Scalar::all(255), CV_FILLED, CV_AA);
|
||||
drawContours(result, whole_contour, -1, Scalar::all(255), CV_FILLED, CV_AA);
|
||||
drawContours(result, squares_black, -1, Scalar::all(0), CV_FILLED, CV_AA);
|
||||
}
|
||||
else
|
||||
{
|
||||
Mat tmp;
|
||||
Mat tmp;
|
||||
resize(bg, tmp, bg.size() * rendererResolutionMultiplier);
|
||||
drawContours(tmp, whole_contour, -1, Scalar::all(255), CV_FILLED, CV_AA);
|
||||
drawContours(tmp, whole_contour, -1, Scalar::all(255), CV_FILLED, CV_AA);
|
||||
drawContours(tmp, squares_black, -1, Scalar::all(0), CV_FILLED, CV_AA);
|
||||
resize(tmp, result, bg.size(), 0, 0, INTER_AREA);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Mat cv::ChessBoardGenerator::operator ()(const Mat& bg, const Mat& camMat, const Mat& distCoeffs, vector<Point2f>& corners) const
|
||||
{
|
||||
{
|
||||
cov = min(cov, 0.8);
|
||||
double fovx, fovy, focalLen;
|
||||
Point2d principalPoint;
|
||||
double aspect;
|
||||
calibrationMatrixValues( camMat, bg.size(), sensorWidth, sensorHeight,
|
||||
calibrationMatrixValues( camMat, bg.size(), sensorWidth, sensorHeight,
|
||||
fovx, fovy, focalLen, principalPoint, aspect);
|
||||
|
||||
RNG& rng = theRNG();
|
||||
|
||||
float d1 = static_cast<float>(rng.uniform(0.1, 10.0));
|
||||
float d1 = static_cast<float>(rng.uniform(0.1, 10.0));
|
||||
float ah = static_cast<float>(rng.uniform(-fovx/2 * cov, fovx/2 * cov) * CV_PI / 180);
|
||||
float av = static_cast<float>(rng.uniform(-fovy/2 * cov, fovy/2 * cov) * CV_PI / 180);
|
||||
|
||||
float av = static_cast<float>(rng.uniform(-fovy/2 * cov, fovy/2 * cov) * CV_PI / 180);
|
||||
|
||||
Point3f p;
|
||||
p.z = cos(ah) * d1;
|
||||
p.x = sin(ah) * d1;
|
||||
p.y = p.z * tan(av);
|
||||
p.y = p.z * tan(av);
|
||||
|
||||
Point3f pb1, pb2;
|
||||
Point3f pb1, pb2;
|
||||
generateBasis(pb1, pb2);
|
||||
|
||||
|
||||
float cbHalfWidth = static_cast<float>(norm(p) * sin( min(fovx, fovy) * 0.5 * CV_PI / 180));
|
||||
float cbHalfHeight = cbHalfWidth * patternSize.height / patternSize.width;
|
||||
float cbHalfHeight = cbHalfWidth * patternSize.height / patternSize.width;
|
||||
|
||||
float cbHalfWidthEx = cbHalfWidth * ( patternSize.width + 1) / patternSize.width;
|
||||
float cbHalfHeightEx = cbHalfHeight * (patternSize.height + 1) / patternSize.height;
|
||||
|
||||
|
||||
vector<Point3f> pts3d(4);
|
||||
vector<Point2f> pts2d(4);
|
||||
for(;;)
|
||||
{
|
||||
{
|
||||
pts3d[0] = p + pb1 * cbHalfWidthEx + cbHalfHeightEx * pb2;
|
||||
pts3d[1] = p + pb1 * cbHalfWidthEx - cbHalfHeightEx * pb2;
|
||||
pts3d[2] = p - pb1 * cbHalfWidthEx - cbHalfHeightEx * pb2;
|
||||
pts3d[3] = p - pb1 * cbHalfWidthEx + cbHalfHeightEx * pb2;
|
||||
|
||||
|
||||
/* can remake with better perf */
|
||||
projectPoints(Mat(pts3d), rvec, tvec, camMat, distCoeffs, pts2d);
|
||||
|
||||
@@ -221,64 +221,64 @@ Mat cv::ChessBoardGenerator::operator ()(const Mat& bg, const Mat& camMat, const
|
||||
bool inrect2 = pts2d[1].x < bg.cols && pts2d[1].y < bg.rows && pts2d[1].x > 0 && pts2d[1].y > 0;
|
||||
bool inrect3 = pts2d[2].x < bg.cols && pts2d[2].y < bg.rows && pts2d[2].x > 0 && pts2d[2].y > 0;
|
||||
bool inrect4 = pts2d[3].x < bg.cols && pts2d[3].y < bg.rows && pts2d[3].x > 0 && pts2d[3].y > 0;
|
||||
|
||||
|
||||
if (inrect1 && inrect2 && inrect3 && inrect4)
|
||||
break;
|
||||
|
||||
cbHalfWidth*=0.8f;
|
||||
cbHalfHeight = cbHalfWidth * patternSize.height / patternSize.width;
|
||||
|
||||
cbHalfHeight = cbHalfWidth * patternSize.height / patternSize.width;
|
||||
|
||||
cbHalfWidthEx = cbHalfWidth * ( patternSize.width + 1) / patternSize.width;
|
||||
cbHalfHeightEx = cbHalfHeight * (patternSize.height + 1) / patternSize.height;
|
||||
}
|
||||
|
||||
|
||||
Point3f zero = p - pb1 * cbHalfWidth - cbHalfHeight * pb2;
|
||||
float sqWidth = 2 * cbHalfWidth/patternSize.width;
|
||||
float sqHeight = 2 * cbHalfHeight/patternSize.height;
|
||||
|
||||
return generateChessBoard(bg, camMat, distCoeffs, zero, pb1, pb2, sqWidth, sqHeight, pts3d, corners);
|
||||
|
||||
return generateChessBoard(bg, camMat, distCoeffs, zero, pb1, pb2, sqWidth, sqHeight, pts3d, corners);
|
||||
}
|
||||
|
||||
|
||||
Mat cv::ChessBoardGenerator::operator ()(const Mat& bg, const Mat& camMat, const Mat& distCoeffs,
|
||||
Mat cv::ChessBoardGenerator::operator ()(const Mat& bg, const Mat& camMat, const Mat& distCoeffs,
|
||||
const Size2f& squareSize, vector<Point2f>& corners) const
|
||||
{
|
||||
{
|
||||
cov = min(cov, 0.8);
|
||||
double fovx, fovy, focalLen;
|
||||
Point2d principalPoint;
|
||||
double aspect;
|
||||
calibrationMatrixValues( camMat, bg.size(), sensorWidth, sensorHeight,
|
||||
calibrationMatrixValues( camMat, bg.size(), sensorWidth, sensorHeight,
|
||||
fovx, fovy, focalLen, principalPoint, aspect);
|
||||
|
||||
RNG& rng = theRNG();
|
||||
|
||||
float d1 = static_cast<float>(rng.uniform(0.1, 10.0));
|
||||
float d1 = static_cast<float>(rng.uniform(0.1, 10.0));
|
||||
float ah = static_cast<float>(rng.uniform(-fovx/2 * cov, fovx/2 * cov) * CV_PI / 180);
|
||||
float av = static_cast<float>(rng.uniform(-fovy/2 * cov, fovy/2 * cov) * CV_PI / 180);
|
||||
|
||||
float av = static_cast<float>(rng.uniform(-fovy/2 * cov, fovy/2 * cov) * CV_PI / 180);
|
||||
|
||||
Point3f p;
|
||||
p.z = cos(ah) * d1;
|
||||
p.x = sin(ah) * d1;
|
||||
p.y = p.z * tan(av);
|
||||
p.y = p.z * tan(av);
|
||||
|
||||
Point3f pb1, pb2;
|
||||
generateBasis(pb1, pb2);
|
||||
Point3f pb1, pb2;
|
||||
generateBasis(pb1, pb2);
|
||||
|
||||
float cbHalfWidth = squareSize.width * patternSize.width * 0.5f;
|
||||
float cbHalfHeight = squareSize.height * patternSize.height * 0.5f;
|
||||
|
||||
float cbHalfWidthEx = cbHalfWidth * ( patternSize.width + 1) / patternSize.width;
|
||||
float cbHalfHeightEx = cbHalfHeight * (patternSize.height + 1) / patternSize.height;
|
||||
|
||||
|
||||
vector<Point3f> pts3d(4);
|
||||
vector<Point2f> pts2d(4);
|
||||
for(;;)
|
||||
{
|
||||
{
|
||||
pts3d[0] = p + pb1 * cbHalfWidthEx + cbHalfHeightEx * pb2;
|
||||
pts3d[1] = p + pb1 * cbHalfWidthEx - cbHalfHeightEx * pb2;
|
||||
pts3d[2] = p - pb1 * cbHalfWidthEx - cbHalfHeightEx * pb2;
|
||||
pts3d[3] = p - pb1 * cbHalfWidthEx + cbHalfHeightEx * pb2;
|
||||
|
||||
|
||||
/* can remake with better perf */
|
||||
projectPoints(Mat(pts3d), rvec, tvec, camMat, distCoeffs, pts2d);
|
||||
|
||||
@@ -286,47 +286,47 @@ Mat cv::ChessBoardGenerator::operator ()(const Mat& bg, const Mat& camMat, const
|
||||
bool inrect2 = pts2d[1].x < bg.cols && pts2d[1].y < bg.rows && pts2d[1].x > 0 && pts2d[1].y > 0;
|
||||
bool inrect3 = pts2d[2].x < bg.cols && pts2d[2].y < bg.rows && pts2d[2].x > 0 && pts2d[2].y > 0;
|
||||
bool inrect4 = pts2d[3].x < bg.cols && pts2d[3].y < bg.rows && pts2d[3].x > 0 && pts2d[3].y > 0;
|
||||
|
||||
|
||||
if ( inrect1 && inrect2 && inrect3 && inrect4)
|
||||
break;
|
||||
|
||||
p.z *= 1.1f;
|
||||
}
|
||||
|
||||
|
||||
Point3f zero = p - pb1 * cbHalfWidth - cbHalfHeight * pb2;
|
||||
|
||||
return generateChessBoard(bg, camMat, distCoeffs, zero, pb1, pb2,
|
||||
squareSize.width, squareSize.height, pts3d, corners);
|
||||
|
||||
return generateChessBoard(bg, camMat, distCoeffs, zero, pb1, pb2,
|
||||
squareSize.width, squareSize.height, pts3d, corners);
|
||||
}
|
||||
|
||||
Mat cv::ChessBoardGenerator::operator ()(const Mat& bg, const Mat& camMat, const Mat& distCoeffs,
|
||||
Mat cv::ChessBoardGenerator::operator ()(const Mat& bg, const Mat& camMat, const Mat& distCoeffs,
|
||||
const Size2f& squareSize, const Point3f& pos, vector<Point2f>& corners) const
|
||||
{
|
||||
{
|
||||
cov = min(cov, 0.8);
|
||||
Point3f p = pos;
|
||||
Point3f pb1, pb2;
|
||||
generateBasis(pb1, pb2);
|
||||
Point3f p = pos;
|
||||
Point3f pb1, pb2;
|
||||
generateBasis(pb1, pb2);
|
||||
|
||||
float cbHalfWidth = squareSize.width * patternSize.width * 0.5f;
|
||||
float cbHalfHeight = squareSize.height * patternSize.height * 0.5f;
|
||||
|
||||
float cbHalfWidthEx = cbHalfWidth * ( patternSize.width + 1) / patternSize.width;
|
||||
float cbHalfHeightEx = cbHalfHeight * (patternSize.height + 1) / patternSize.height;
|
||||
|
||||
|
||||
vector<Point3f> pts3d(4);
|
||||
vector<Point2f> pts2d(4);
|
||||
|
||||
|
||||
pts3d[0] = p + pb1 * cbHalfWidthEx + cbHalfHeightEx * pb2;
|
||||
pts3d[1] = p + pb1 * cbHalfWidthEx - cbHalfHeightEx * pb2;
|
||||
pts3d[2] = p - pb1 * cbHalfWidthEx - cbHalfHeightEx * pb2;
|
||||
pts3d[3] = p - pb1 * cbHalfWidthEx + cbHalfHeightEx * pb2;
|
||||
|
||||
|
||||
/* can remake with better perf */
|
||||
projectPoints(Mat(pts3d), rvec, tvec, camMat, distCoeffs, pts2d);
|
||||
|
||||
|
||||
Point3f zero = p - pb1 * cbHalfWidth - cbHalfHeight * pb2;
|
||||
|
||||
return generateChessBoard(bg, camMat, distCoeffs, zero, pb1, pb2,
|
||||
squareSize.width, squareSize.height, pts3d, corners);
|
||||
|
||||
return generateChessBoard(bg, camMat, distCoeffs, zero, pb1, pb2,
|
||||
squareSize.width, squareSize.height, pts3d, corners);
|
||||
}
|
||||
|
||||
|
@@ -9,8 +9,8 @@ namespace cv
|
||||
class ChessBoardGenerator
|
||||
{
|
||||
public:
|
||||
double sensorWidth;
|
||||
double sensorHeight;
|
||||
double sensorWidth;
|
||||
double sensorHeight;
|
||||
size_t squareEdgePointsNum;
|
||||
double min_cos;
|
||||
mutable double cov;
|
||||
@@ -18,19 +18,19 @@ public:
|
||||
int rendererResolutionMultiplier;
|
||||
|
||||
ChessBoardGenerator(const Size& patternSize = Size(8, 6));
|
||||
Mat operator()(const Mat& bg, const Mat& camMat, const Mat& distCoeffs, vector<Point2f>& corners) const;
|
||||
Mat operator()(const Mat& bg, const Mat& camMat, const Mat& distCoeffs, const Size2f& squareSize, vector<Point2f>& corners) const;
|
||||
Mat operator()(const Mat& bg, const Mat& camMat, const Mat& distCoeffs, vector<Point2f>& corners) const;
|
||||
Mat operator()(const Mat& bg, const Mat& camMat, const Mat& distCoeffs, const Size2f& squareSize, vector<Point2f>& corners) const;
|
||||
Mat operator()(const Mat& bg, const Mat& camMat, const Mat& distCoeffs, const Size2f& squareSize, const Point3f& pos, vector<Point2f>& corners) const;
|
||||
Size cornersSize() const;
|
||||
|
||||
mutable vector<Point3f> corners3d;
|
||||
private:
|
||||
void generateEdge(const Point3f& p1, const Point3f& p2, vector<Point3f>& out) const;
|
||||
Mat generateChessBoard(const Mat& bg, const Mat& camMat, const Mat& distCoeffs,
|
||||
const Point3f& zero, const Point3f& pb1, const Point3f& pb2,
|
||||
Mat generateChessBoard(const Mat& bg, const Mat& camMat, const Mat& distCoeffs,
|
||||
const Point3f& zero, const Point3f& pb1, const Point3f& pb2,
|
||||
float sqWidth, float sqHeight, const vector<Point3f>& whole, vector<Point2f>& corners) const;
|
||||
void generateBasis(Point3f& pb1, Point3f& pb2) const;
|
||||
|
||||
void generateBasis(Point3f& pb1, Point3f& pb2) const;
|
||||
|
||||
Mat rvec, tvec;
|
||||
};
|
||||
|
||||
|
@@ -59,10 +59,10 @@ protected:
|
||||
|
||||
/* cpp interface */
|
||||
Mat img;
|
||||
Size pattern_size;
|
||||
Size pattern_size;
|
||||
int flags;
|
||||
vector<Point2f> corners;
|
||||
|
||||
|
||||
/* c interface */
|
||||
CvMat arr;
|
||||
CvPoint2D32f* out_corners;
|
||||
@@ -73,16 +73,16 @@ protected:
|
||||
bool drawCorners;
|
||||
CvMat drawCorImg;
|
||||
bool was_found;
|
||||
|
||||
void run_func()
|
||||
{
|
||||
|
||||
void run_func()
|
||||
{
|
||||
if (cpp)
|
||||
findChessboardCorners(img, pattern_size, corners, flags);
|
||||
findChessboardCorners(img, pattern_size, corners, flags);
|
||||
else
|
||||
if (!drawCorners)
|
||||
cvFindChessboardCorners( &arr, pattern_size, out_corners, out_corner_count, flags );
|
||||
else
|
||||
cvDrawChessboardCorners( &drawCorImg, pattern_size,
|
||||
cvDrawChessboardCorners( &drawCorImg, pattern_size,
|
||||
(CvPoint2D32f*)(corners.empty() ? 0 : &corners[0]),
|
||||
(int)corners.size(), was_found);
|
||||
}
|
||||
@@ -95,14 +95,14 @@ void CV_ChessboardDetectorBadArgTest::run( int /*start_from */)
|
||||
{
|
||||
Mat bg(800, 600, CV_8U, Scalar(0));
|
||||
Mat_<float> camMat(3, 3);
|
||||
camMat << 300.f, 0.f, bg.cols/2.f, 0, 300.f, bg.rows/2.f, 0.f, 0.f, 1.f;
|
||||
camMat << 300.f, 0.f, bg.cols/2.f, 0, 300.f, bg.rows/2.f, 0.f, 0.f, 1.f;
|
||||
Mat_<float> distCoeffs(1, 5);
|
||||
distCoeffs << 1.2f, 0.2f, 0.f, 0.f, 0.f;
|
||||
|
||||
ChessBoardGenerator cbg(Size(8,6));
|
||||
vector<Point2f> exp_corn;
|
||||
vector<Point2f> exp_corn;
|
||||
Mat cb = cbg(bg, camMat, distCoeffs, exp_corn);
|
||||
|
||||
|
||||
/* /*//*/ */
|
||||
int errors = 0;
|
||||
flags = CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_NORMALIZE_IMAGE;
|
||||
@@ -110,9 +110,9 @@ void CV_ChessboardDetectorBadArgTest::run( int /*start_from */)
|
||||
|
||||
img = cb.clone();
|
||||
pattern_size = Size(2,2);
|
||||
errors += run_test_case( CV_StsOutOfRange, "Invlid pattern size" );
|
||||
|
||||
pattern_size = cbg.cornersSize();
|
||||
errors += run_test_case( CV_StsOutOfRange, "Invlid pattern size" );
|
||||
|
||||
pattern_size = cbg.cornersSize();
|
||||
cb.convertTo(img, CV_32F);
|
||||
errors += run_test_case( CV_StsUnsupportedFormat, "Not 8-bit image" );
|
||||
|
||||
@@ -123,9 +123,9 @@ void CV_ChessboardDetectorBadArgTest::run( int /*start_from */)
|
||||
drawCorners = false;
|
||||
|
||||
img = cb.clone();
|
||||
arr = img;
|
||||
arr = img;
|
||||
out_corner_count = 0;
|
||||
out_corners = 0;
|
||||
out_corners = 0;
|
||||
errors += run_test_case( CV_StsNullPtr, "Null pointer to corners" );
|
||||
|
||||
drawCorners = true;
|
||||
@@ -133,7 +133,7 @@ void CV_ChessboardDetectorBadArgTest::run( int /*start_from */)
|
||||
drawCorImg = cvdrawCornImg;
|
||||
was_found = true;
|
||||
errors += run_test_case( CV_StsUnsupportedFormat, "2 channel image" );
|
||||
|
||||
|
||||
|
||||
if (errors)
|
||||
ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH);
|
||||
|
@@ -99,14 +99,14 @@ void CV_ChessboardDetectorTimingTest::run( int start_from )
|
||||
int is_chessboard = cvReadInt((CvFileNode*)cvGetSeqElem(board_list->data.seq,idx*4+1), 0);
|
||||
pattern_size.width = cvReadInt((CvFileNode*)cvGetSeqElem(board_list->data.seq,idx*4 + 2), -1);
|
||||
pattern_size.height = cvReadInt((CvFileNode*)cvGetSeqElem(board_list->data.seq,idx*4 + 3), -1);
|
||||
|
||||
|
||||
ts->update_context( this, idx-1, true );
|
||||
|
||||
/* read the image */
|
||||
sprintf( filename, "%s%s", filepath, imgname );
|
||||
|
||||
|
||||
img = cvLoadImage( filename );
|
||||
|
||||
|
||||
if( !img )
|
||||
{
|
||||
ts->printf( cvtest::TS::LOG, "one of chessboard images can't be read: %s\n", filename );
|
||||
@@ -123,7 +123,7 @@ void CV_ChessboardDetectorTimingTest::run( int start_from )
|
||||
gray = cvCreateImage( cvSize( img->width, img->height ), IPL_DEPTH_8U, 1 );
|
||||
thresh = cvCreateImage( cvSize( img->width, img->height ), IPL_DEPTH_8U, 1 );
|
||||
cvCvtColor( img, gray, CV_BGR2GRAY );
|
||||
|
||||
|
||||
|
||||
count0 = pattern_size.width*pattern_size.height;
|
||||
|
||||
@@ -136,29 +136,29 @@ void CV_ChessboardDetectorTimingTest::run( int start_from )
|
||||
int64 _time0 = cvGetTickCount();
|
||||
result = cvCheckChessboard(gray, pattern_size);
|
||||
int64 _time01 = cvGetTickCount();
|
||||
|
||||
|
||||
OPENCV_CALL( result1 = cvFindChessboardCorners(
|
||||
gray, pattern_size, v, &count, 15 ));
|
||||
int64 _time1 = cvGetTickCount();
|
||||
|
||||
if( result != is_chessboard )
|
||||
{
|
||||
ts->printf( cvtest::TS::LOG, "Error: chessboard was %sdetected in the image %s\n",
|
||||
ts->printf( cvtest::TS::LOG, "Error: chessboard was %sdetected in the image %s\n",
|
||||
result ? "" : "not ", imgname );
|
||||
code = cvtest::TS::FAIL_INVALID_OUTPUT;
|
||||
goto _exit_;
|
||||
}
|
||||
if(result != result1)
|
||||
{
|
||||
ts->printf( cvtest::TS::LOG, "Warning: results differ cvCheckChessboard %d, cvFindChessboardCorners %d\n",
|
||||
ts->printf( cvtest::TS::LOG, "Warning: results differ cvCheckChessboard %d, cvFindChessboardCorners %d\n",
|
||||
result, result1);
|
||||
}
|
||||
|
||||
|
||||
int num_pixels = gray->width*gray->height;
|
||||
float check_chessboard_time = float(_time01 - _time0)/(float)cvGetTickFrequency(); // in us
|
||||
ts->printf(cvtest::TS::LOG, " cvCheckChessboard time s: %f, us per pixel: %f\n",
|
||||
ts->printf(cvtest::TS::LOG, " cvCheckChessboard time s: %f, us per pixel: %f\n",
|
||||
check_chessboard_time*1e-6, check_chessboard_time/num_pixels);
|
||||
|
||||
|
||||
float find_chessboard_time = float(_time1 - _time01)/(float)cvGetTickFrequency();
|
||||
ts->printf(cvtest::TS::LOG, " cvFindChessboard time s: %f, us per pixel: %f\n",
|
||||
find_chessboard_time*1e-6, find_chessboard_time/num_pixels);
|
||||
|
@@ -364,7 +364,7 @@ static void test_convertHomogeneous( const Mat& _src, Mat& _dst )
|
||||
|
||||
if( src.depth() != CV_64F )
|
||||
_src.convertTo(src, CV_64F);
|
||||
|
||||
|
||||
if( dst.depth() != CV_64F )
|
||||
dst.create(dst.size(), CV_MAKETYPE(CV_64F, _dst.channels()));
|
||||
|
||||
@@ -467,11 +467,11 @@ void
|
||||
test_projectPoints( const Mat& _3d, const Mat& Rt, const Mat& A, Mat& _2d, RNG* rng, double sigma )
|
||||
{
|
||||
CV_Assert( _3d.isContinuous() );
|
||||
|
||||
|
||||
double p[12];
|
||||
Mat P( 3, 4, CV_64F, p );
|
||||
gemm(A, Rt, 1, Mat(), 0, P);
|
||||
|
||||
|
||||
int i, count = _3d.cols;
|
||||
|
||||
Mat noise;
|
||||
@@ -659,7 +659,7 @@ int CV_RodriguesTest::prepare_test_case( int test_case_idx )
|
||||
void CV_RodriguesTest::run_func()
|
||||
{
|
||||
CvMat v2m_jac, m2v_jac;
|
||||
|
||||
|
||||
if( calc_jacobians )
|
||||
{
|
||||
v2m_jac = test_mat[OUTPUT][1];
|
||||
@@ -746,10 +746,10 @@ void CV_RodriguesTest::prepare_to_validation( int /*test_case_idx*/ )
|
||||
}
|
||||
else
|
||||
{
|
||||
setIdentity(test_mat[OUTPUT][4], Scalar::all(1.));
|
||||
setIdentity(test_mat[OUTPUT][4], Scalar::all(1.));
|
||||
cvtest::copy( test_mat[REF_OUTPUT][2], test_mat[OUTPUT][2] );
|
||||
}
|
||||
setIdentity(test_mat[REF_OUTPUT][4], Scalar::all(1.));
|
||||
setIdentity(test_mat[REF_OUTPUT][4], Scalar::all(1.));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -881,7 +881,7 @@ void CV_FundamentalMatTest::get_test_array_types_and_sizes( int /*test_case_idx*
|
||||
types[OUTPUT][0] = types[REF_OUTPUT][0] = CV_64FC1;
|
||||
sizes[OUTPUT][1] = sizes[REF_OUTPUT][1] = cvSize(pt_count,1);
|
||||
types[OUTPUT][1] = types[REF_OUTPUT][1] = CV_8UC1;
|
||||
|
||||
|
||||
test_cpp = (cvtest::randInt(rng) & 256) == 0;
|
||||
}
|
||||
|
||||
@@ -985,7 +985,7 @@ void CV_FundamentalMatTest::run_func()
|
||||
cv::findFundamentalMat(const Mat& points1, const Mat& points2,
|
||||
vector<uchar>& mask, int method=FM_RANSAC,
|
||||
double param1=3., double param2=0.99 );
|
||||
|
||||
|
||||
CV_EXPORTS Mat findFundamentalMat( const Mat& points1, const Mat& points2,
|
||||
int method=FM_RANSAC,
|
||||
double param1=3., double param2=0.99 );
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -120,12 +120,12 @@ void CV_POSITTest::run( int start_from )
|
||||
{
|
||||
ts->update_context( this, counter, true );
|
||||
progress = update_progress( progress, counter, test_case_count, 0 );
|
||||
|
||||
|
||||
/* set all rotation matrix to zero */
|
||||
cvZero( true_rotationX );
|
||||
cvZero( true_rotationY );
|
||||
cvZero( true_rotationZ );
|
||||
|
||||
|
||||
/* fill random rotation matrix */
|
||||
angleX = (float)(cvtest::randReal(rng)*2*CV_PI);
|
||||
angleY = (float)(cvtest::randReal(rng)*2*CV_PI);
|
||||
|
@@ -48,18 +48,18 @@ using namespace cv;
|
||||
using namespace std;
|
||||
|
||||
template<class T> double thres() { return 1.0; }
|
||||
template<> double thres<float>() { return 1e-5; }
|
||||
template<> double thres<float>() { return 1e-5; }
|
||||
|
||||
class CV_ReprojectImageTo3DTest : public cvtest::BaseTest
|
||||
{
|
||||
public:
|
||||
CV_ReprojectImageTo3DTest() {}
|
||||
~CV_ReprojectImageTo3DTest() {}
|
||||
protected:
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
void run(int)
|
||||
{
|
||||
{
|
||||
ts->set_failed_test_info(cvtest::TS::OK);
|
||||
int progress = 0;
|
||||
int caseId = 0;
|
||||
@@ -89,7 +89,7 @@ protected:
|
||||
progress = update_progress( progress, 12, 14, 0 );
|
||||
runCase<short, short>(++caseId, -100, 100);
|
||||
progress = update_progress( progress, 13, 14, 0 );
|
||||
runCase<unsigned char, short>(++caseId, 10, 100);
|
||||
runCase<unsigned char, short>(++caseId, 10, 100);
|
||||
progress = update_progress( progress, 14, 14, 0 );
|
||||
}
|
||||
|
||||
@@ -100,42 +100,42 @@ protected:
|
||||
for(int i = 0; i < 3; ++i)
|
||||
{
|
||||
tmp = v1[i];
|
||||
nsum += tmp * tmp;
|
||||
nsum += tmp * tmp;
|
||||
|
||||
tmp = tmp - v2[i];
|
||||
sum += tmp * tmp;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
return sqrt(sum)/(sqrt(nsum)+1.);
|
||||
}
|
||||
|
||||
template<class InT, class OutT> void runCase(int caseId, InT min, InT max)
|
||||
{
|
||||
{
|
||||
typedef Vec<OutT, 3> out3d_t;
|
||||
|
||||
bool handleMissingValues = (unsigned)theRNG() % 2 == 0;
|
||||
bool handleMissingValues = (unsigned)theRNG() % 2 == 0;
|
||||
|
||||
Mat_<InT> disp(Size(320, 240));
|
||||
randu(disp, Scalar(min), Scalar(max));
|
||||
|
||||
if (handleMissingValues)
|
||||
disp(disp.rows/2, disp.cols/2) = min - 1;
|
||||
|
||||
|
||||
Mat_<double> Q(4, 4);
|
||||
randu(Q, Scalar(-5), Scalar(5));
|
||||
|
||||
Mat_<out3d_t> _3dImg(disp.size());
|
||||
|
||||
|
||||
CvMat cvdisp = disp; CvMat cv_3dImg = _3dImg; CvMat cvQ = Q;
|
||||
cvReprojectImageTo3D( &cvdisp, &cv_3dImg, &cvQ, handleMissingValues );
|
||||
|
||||
if (numeric_limits<OutT>::max() == numeric_limits<float>::max())
|
||||
reprojectImageTo3D(disp, _3dImg, Q, handleMissingValues);
|
||||
|
||||
|
||||
for(int y = 0; y < disp.rows; ++y)
|
||||
for(int x = 0; x < disp.cols; ++x)
|
||||
{
|
||||
InT d = disp(y, x);
|
||||
InT d = disp(y, x);
|
||||
|
||||
double from[4] = { x, y, d, 1 };
|
||||
Mat_<double> res = Q * Mat_<double>(4, 1, from);
|
||||
@@ -144,15 +144,15 @@ protected:
|
||||
out3d_t pixel_exp = *(Vec3d*)res.data;
|
||||
out3d_t pixel_out = _3dImg(y, x);
|
||||
|
||||
const int largeZValue = 10000; /* see documentation */
|
||||
const int largeZValue = 10000; /* see documentation */
|
||||
|
||||
if (handleMissingValues && y == disp.rows/2 && x == disp.cols/2)
|
||||
{
|
||||
if (handleMissingValues && y == disp.rows/2 && x == disp.cols/2)
|
||||
{
|
||||
if (pixel_out[2] == largeZValue)
|
||||
continue;
|
||||
|
||||
ts->printf(cvtest::TS::LOG, "Missing values are handled improperly\n");
|
||||
ts->set_failed_test_info( cvtest::TS::FAIL_BAD_ACCURACY );
|
||||
ts->set_failed_test_info( cvtest::TS::FAIL_BAD_ACCURACY );
|
||||
return;
|
||||
}
|
||||
else
|
||||
@@ -167,9 +167,9 @@ protected:
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
TEST(Calib3d_ReprojectImageTo3D, accuracy) { CV_ReprojectImageTo3DTest test; test.safe_run(); }
|
||||
|
||||
|
0
modules/calib3d/test/test_stereomatching.cpp
Executable file → Normal file
0
modules/calib3d/test/test_stereomatching.cpp
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
@@ -47,32 +47,32 @@ public:
|
||||
CV_UndistortPointsBadArgTest();
|
||||
protected:
|
||||
void run(int);
|
||||
void run_func();
|
||||
void run_func();
|
||||
|
||||
private:
|
||||
//common
|
||||
cv::Size img_size;
|
||||
bool useCPlus;
|
||||
//static const int N_POINTS = 1;
|
||||
static const int N_POINTS2 = 2;
|
||||
//common
|
||||
cv::Size img_size;
|
||||
bool useCPlus;
|
||||
//static const int N_POINTS = 1;
|
||||
static const int N_POINTS2 = 2;
|
||||
|
||||
//C
|
||||
CvMat* _camera_mat;
|
||||
CvMat* matR;
|
||||
CvMat* matP;
|
||||
CvMat* _distortion_coeffs;
|
||||
CvMat* _src_points;
|
||||
CvMat* _dst_points;
|
||||
//C
|
||||
CvMat* _camera_mat;
|
||||
CvMat* matR;
|
||||
CvMat* matP;
|
||||
CvMat* _distortion_coeffs;
|
||||
CvMat* _src_points;
|
||||
CvMat* _dst_points;
|
||||
|
||||
|
||||
//C++
|
||||
cv::Mat camera_mat;
|
||||
cv::Mat R;
|
||||
cv::Mat P;
|
||||
cv::Mat distortion_coeffs;
|
||||
cv::Mat src_points;
|
||||
std::vector<cv::Point2f> dst_points;
|
||||
|
||||
//C++
|
||||
cv::Mat camera_mat;
|
||||
cv::Mat R;
|
||||
cv::Mat P;
|
||||
cv::Mat distortion_coeffs;
|
||||
cv::Mat src_points;
|
||||
std::vector<cv::Point2f> dst_points;
|
||||
|
||||
};
|
||||
|
||||
CV_UndistortPointsBadArgTest::CV_UndistortPointsBadArgTest ()
|
||||
@@ -81,196 +81,196 @@ CV_UndistortPointsBadArgTest::CV_UndistortPointsBadArgTest ()
|
||||
|
||||
void CV_UndistortPointsBadArgTest::run_func()
|
||||
{
|
||||
if (useCPlus)
|
||||
{
|
||||
cv::undistortPoints(src_points,dst_points,camera_mat,distortion_coeffs,R,P);
|
||||
}
|
||||
else
|
||||
{
|
||||
cvUndistortPoints(_src_points,_dst_points,_camera_mat,_distortion_coeffs,matR,matP);
|
||||
}
|
||||
if (useCPlus)
|
||||
{
|
||||
cv::undistortPoints(src_points,dst_points,camera_mat,distortion_coeffs,R,P);
|
||||
}
|
||||
else
|
||||
{
|
||||
cvUndistortPoints(_src_points,_dst_points,_camera_mat,_distortion_coeffs,matR,matP);
|
||||
}
|
||||
}
|
||||
|
||||
void CV_UndistortPointsBadArgTest::run(int)
|
||||
{
|
||||
//RNG& rng = ts->get_rng();
|
||||
int errcount = 0;
|
||||
useCPlus = false;
|
||||
//RNG& rng = ts->get_rng();
|
||||
int errcount = 0;
|
||||
useCPlus = false;
|
||||
//initializing
|
||||
img_size.width = 800;
|
||||
img_size.height = 600;
|
||||
double cam[9] = {150.f, 0.f, img_size.width/2.f, 0, 300.f, img_size.height/2.f, 0.f, 0.f, 1.f};
|
||||
double dist[4] = {0.01,0.02,0.001,0.0005};
|
||||
double s_points[N_POINTS2] = {img_size.width/4,img_size.height/4};
|
||||
double d_points[N_POINTS2];
|
||||
double p[9] = {155.f, 0.f, img_size.width/2.f+img_size.width/50.f, 0, 310.f, img_size.height/2.f+img_size.height/50.f, 0.f, 0.f, 1.f};
|
||||
double r[9] = {1,0,0,0,1,0,0,0,1};
|
||||
img_size.width = 800;
|
||||
img_size.height = 600;
|
||||
double cam[9] = {150.f, 0.f, img_size.width/2.f, 0, 300.f, img_size.height/2.f, 0.f, 0.f, 1.f};
|
||||
double dist[4] = {0.01,0.02,0.001,0.0005};
|
||||
double s_points[N_POINTS2] = {img_size.width/4,img_size.height/4};
|
||||
double d_points[N_POINTS2];
|
||||
double p[9] = {155.f, 0.f, img_size.width/2.f+img_size.width/50.f, 0, 310.f, img_size.height/2.f+img_size.height/50.f, 0.f, 0.f, 1.f};
|
||||
double r[9] = {1,0,0,0,1,0,0,0,1};
|
||||
|
||||
CvMat _camera_mat_orig = cvMat(3,3,CV_64F,cam);
|
||||
CvMat _distortion_coeffs_orig = cvMat(1,4,CV_64F,dist);
|
||||
CvMat _P_orig = cvMat(3,3,CV_64F,p);
|
||||
CvMat _R_orig = cvMat(3,3,CV_64F,r);
|
||||
CvMat _src_points_orig = cvMat(1,4,CV_64FC2,s_points);
|
||||
CvMat _dst_points_orig = cvMat(1,4,CV_64FC2,d_points);
|
||||
CvMat _camera_mat_orig = cvMat(3,3,CV_64F,cam);
|
||||
CvMat _distortion_coeffs_orig = cvMat(1,4,CV_64F,dist);
|
||||
CvMat _P_orig = cvMat(3,3,CV_64F,p);
|
||||
CvMat _R_orig = cvMat(3,3,CV_64F,r);
|
||||
CvMat _src_points_orig = cvMat(1,4,CV_64FC2,s_points);
|
||||
CvMat _dst_points_orig = cvMat(1,4,CV_64FC2,d_points);
|
||||
|
||||
_camera_mat = &_camera_mat_orig;
|
||||
_distortion_coeffs = &_distortion_coeffs_orig;
|
||||
matP = &_P_orig;
|
||||
matR = &_R_orig;
|
||||
_src_points = &_src_points_orig;
|
||||
_dst_points = &_dst_points_orig;
|
||||
_camera_mat = &_camera_mat_orig;
|
||||
_distortion_coeffs = &_distortion_coeffs_orig;
|
||||
matP = &_P_orig;
|
||||
matR = &_R_orig;
|
||||
_src_points = &_src_points_orig;
|
||||
_dst_points = &_dst_points_orig;
|
||||
|
||||
//tests
|
||||
CvMat* temp1;
|
||||
CvMat* temp;
|
||||
IplImage* temp_img = cvCreateImage(cvSize(img_size.width,img_size.height),8,3);
|
||||
CvMat* temp1;
|
||||
CvMat* temp;
|
||||
IplImage* temp_img = cvCreateImage(cvSize(img_size.width,img_size.height),8,3);
|
||||
|
||||
//-----------
|
||||
temp = (CvMat*)temp_img;
|
||||
_src_points = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Input data is not CvMat*" );
|
||||
_src_points = &_src_points_orig;
|
||||
temp = (CvMat*)temp_img;
|
||||
_src_points = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Input data is not CvMat*" );
|
||||
_src_points = &_src_points_orig;
|
||||
|
||||
temp = (CvMat*)temp_img;
|
||||
_dst_points = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Output data is not CvMat*" );
|
||||
_dst_points = &_dst_points_orig;
|
||||
temp = (CvMat*)temp_img;
|
||||
_dst_points = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Output data is not CvMat*" );
|
||||
_dst_points = &_dst_points_orig;
|
||||
|
||||
temp = cvCreateMat(2,3,CV_64F);
|
||||
_src_points = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid input data matrix size" );
|
||||
_src_points = &_src_points_orig;
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(2,3,CV_64F);
|
||||
_src_points = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid input data matrix size" );
|
||||
_src_points = &_src_points_orig;
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
temp = cvCreateMat(2,3,CV_64F);
|
||||
_dst_points = temp;
|
||||
errcount += run_test_case(CV_StsAssert, "Invalid output data matrix size" );
|
||||
_dst_points = &_dst_points_orig;
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(2,3,CV_64F);
|
||||
_dst_points = temp;
|
||||
errcount += run_test_case(CV_StsAssert, "Invalid output data matrix size" );
|
||||
_dst_points = &_dst_points_orig;
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
temp = cvCreateMat(1,3,CV_64F);
|
||||
temp1 = cvCreateMat(4,1,CV_64F);
|
||||
_dst_points = temp;
|
||||
_src_points = temp1;
|
||||
errcount += run_test_case(CV_StsAssert, "Output and input data sizes mismatch" );
|
||||
_dst_points = &_dst_points_orig;
|
||||
_src_points = &_src_points_orig;
|
||||
cvReleaseMat(&temp);
|
||||
cvReleaseMat(&temp1);
|
||||
temp = cvCreateMat(1,3,CV_64F);
|
||||
temp1 = cvCreateMat(4,1,CV_64F);
|
||||
_dst_points = temp;
|
||||
_src_points = temp1;
|
||||
errcount += run_test_case(CV_StsAssert, "Output and input data sizes mismatch" );
|
||||
_dst_points = &_dst_points_orig;
|
||||
_src_points = &_src_points_orig;
|
||||
cvReleaseMat(&temp);
|
||||
cvReleaseMat(&temp1);
|
||||
|
||||
temp = cvCreateMat(1,3,CV_32S);
|
||||
_dst_points = temp;
|
||||
errcount += run_test_case(CV_StsAssert, "Invalid output data matrix type" );
|
||||
_dst_points = &_dst_points_orig;
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(1,3,CV_32S);
|
||||
_dst_points = temp;
|
||||
errcount += run_test_case(CV_StsAssert, "Invalid output data matrix type" );
|
||||
_dst_points = &_dst_points_orig;
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
temp = cvCreateMat(1,3,CV_32S);
|
||||
_src_points = temp;
|
||||
errcount += run_test_case(CV_StsAssert, "Invalid input data matrix type" );
|
||||
_src_points = &_src_points_orig;
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(1,3,CV_32S);
|
||||
_src_points = temp;
|
||||
errcount += run_test_case(CV_StsAssert, "Invalid input data matrix type" );
|
||||
_src_points = &_src_points_orig;
|
||||
cvReleaseMat(&temp);
|
||||
//------------
|
||||
temp = cvCreateMat(2,3,CV_64F);
|
||||
_camera_mat = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid camera data matrix size" );
|
||||
_camera_mat = &_camera_mat_orig;
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(2,3,CV_64F);
|
||||
_camera_mat = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid camera data matrix size" );
|
||||
_camera_mat = &_camera_mat_orig;
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
temp = cvCreateMat(3,4,CV_64F);
|
||||
_camera_mat = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid camera data matrix size" );
|
||||
_camera_mat = &_camera_mat_orig;
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(3,4,CV_64F);
|
||||
_camera_mat = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid camera data matrix size" );
|
||||
_camera_mat = &_camera_mat_orig;
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
temp = (CvMat*)temp_img;
|
||||
_camera_mat = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Camera data is not CvMat*" );
|
||||
_camera_mat = &_camera_mat_orig;
|
||||
temp = (CvMat*)temp_img;
|
||||
_camera_mat = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Camera data is not CvMat*" );
|
||||
_camera_mat = &_camera_mat_orig;
|
||||
//----------
|
||||
|
||||
temp = (CvMat*)temp_img;
|
||||
_distortion_coeffs = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Distortion coefficients data is not CvMat*" );
|
||||
_distortion_coeffs = &_distortion_coeffs_orig;
|
||||
temp = (CvMat*)temp_img;
|
||||
_distortion_coeffs = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Distortion coefficients data is not CvMat*" );
|
||||
_distortion_coeffs = &_distortion_coeffs_orig;
|
||||
|
||||
temp = cvCreateMat(1,6,CV_64F);
|
||||
_distortion_coeffs = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid distortion coefficients data matrix size" );
|
||||
_distortion_coeffs = &_distortion_coeffs_orig;
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(1,6,CV_64F);
|
||||
_distortion_coeffs = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid distortion coefficients data matrix size" );
|
||||
_distortion_coeffs = &_distortion_coeffs_orig;
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
temp = cvCreateMat(3,3,CV_64F);
|
||||
_distortion_coeffs = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid distortion coefficients data matrix size" );
|
||||
_distortion_coeffs = &_distortion_coeffs_orig;
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(3,3,CV_64F);
|
||||
_distortion_coeffs = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid distortion coefficients data matrix size" );
|
||||
_distortion_coeffs = &_distortion_coeffs_orig;
|
||||
cvReleaseMat(&temp);
|
||||
//----------
|
||||
temp = (CvMat*)temp_img;
|
||||
matR = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "R data is not CvMat*" );
|
||||
matR = &_R_orig;
|
||||
temp = (CvMat*)temp_img;
|
||||
matR = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "R data is not CvMat*" );
|
||||
matR = &_R_orig;
|
||||
|
||||
temp = cvCreateMat(4,3,CV_64F);
|
||||
matR = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid R data matrix size" );
|
||||
matR = &_R_orig;
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(4,3,CV_64F);
|
||||
matR = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid R data matrix size" );
|
||||
matR = &_R_orig;
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
temp = cvCreateMat(3,2,CV_64F);
|
||||
matR = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid R data matrix size" );
|
||||
matR = &_R_orig;
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(3,2,CV_64F);
|
||||
matR = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid R data matrix size" );
|
||||
matR = &_R_orig;
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
//-----------
|
||||
temp = (CvMat*)temp_img;
|
||||
matP = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "P data is not CvMat*" );
|
||||
matP = &_P_orig;
|
||||
temp = (CvMat*)temp_img;
|
||||
matP = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "P data is not CvMat*" );
|
||||
matP = &_P_orig;
|
||||
|
||||
temp = cvCreateMat(4,3,CV_64F);
|
||||
matP = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid P data matrix size" );
|
||||
matP = &_P_orig;
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(4,3,CV_64F);
|
||||
matP = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid P data matrix size" );
|
||||
matP = &_P_orig;
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
temp = cvCreateMat(3,2,CV_64F);
|
||||
matP = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid P data matrix size" );
|
||||
matP = &_P_orig;
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(3,2,CV_64F);
|
||||
matP = temp;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid P data matrix size" );
|
||||
matP = &_P_orig;
|
||||
cvReleaseMat(&temp);
|
||||
//------------
|
||||
//C++ tests
|
||||
useCPlus = true;
|
||||
//C++ tests
|
||||
useCPlus = true;
|
||||
|
||||
camera_mat = cv::Mat(&_camera_mat_orig);
|
||||
distortion_coeffs = cv::Mat(&_distortion_coeffs_orig);
|
||||
P = cv::Mat(&_P_orig);
|
||||
R = cv::Mat(&_R_orig);
|
||||
src_points = cv::Mat(&_src_points_orig);
|
||||
camera_mat = cv::Mat(&_camera_mat_orig);
|
||||
distortion_coeffs = cv::Mat(&_distortion_coeffs_orig);
|
||||
P = cv::Mat(&_P_orig);
|
||||
R = cv::Mat(&_R_orig);
|
||||
src_points = cv::Mat(&_src_points_orig);
|
||||
|
||||
temp = cvCreateMat(2,2,CV_32FC2);
|
||||
src_points = cv::Mat(temp);
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid input data matrix size" );
|
||||
src_points = cv::Mat(&_src_points_orig);
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(2,2,CV_32FC2);
|
||||
src_points = cv::Mat(temp);
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid input data matrix size" );
|
||||
src_points = cv::Mat(&_src_points_orig);
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
temp = cvCreateMat(1,4,CV_64FC2);
|
||||
src_points = cv::Mat(temp);
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid input data matrix type" );
|
||||
src_points = cv::Mat(&_src_points_orig);
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(1,4,CV_64FC2);
|
||||
src_points = cv::Mat(temp);
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid input data matrix type" );
|
||||
src_points = cv::Mat(&_src_points_orig);
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
src_points = cv::Mat();
|
||||
errcount += run_test_case( CV_StsAssert, "Input data matrix is not continuous" );
|
||||
src_points = cv::Mat(&_src_points_orig);
|
||||
cvReleaseMat(&temp);
|
||||
src_points = cv::Mat();
|
||||
errcount += run_test_case( CV_StsAssert, "Input data matrix is not continuous" );
|
||||
src_points = cv::Mat(&_src_points_orig);
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
|
||||
|
||||
//------------
|
||||
cvReleaseImage(&temp_img);
|
||||
ts->set_failed_test_info(errcount > 0 ? cvtest::TS::FAIL_BAD_ARG_CHECK : cvtest::TS::OK);
|
||||
cvReleaseImage(&temp_img);
|
||||
ts->set_failed_test_info(errcount > 0 ? cvtest::TS::FAIL_BAD_ARG_CHECK : cvtest::TS::OK);
|
||||
}
|
||||
|
||||
|
||||
@@ -281,31 +281,31 @@ public:
|
||||
CV_InitUndistortRectifyMapBadArgTest();
|
||||
protected:
|
||||
void run(int);
|
||||
void run_func();
|
||||
void run_func();
|
||||
|
||||
private:
|
||||
//common
|
||||
cv::Size img_size;
|
||||
bool useCPlus;
|
||||
//common
|
||||
cv::Size img_size;
|
||||
bool useCPlus;
|
||||
|
||||
//C
|
||||
CvMat* _camera_mat;
|
||||
CvMat* matR;
|
||||
CvMat* _new_camera_mat;
|
||||
CvMat* _distortion_coeffs;
|
||||
CvMat* _mapx;
|
||||
CvMat* _mapy;
|
||||
|
||||
//C
|
||||
CvMat* _camera_mat;
|
||||
CvMat* matR;
|
||||
CvMat* _new_camera_mat;
|
||||
CvMat* _distortion_coeffs;
|
||||
CvMat* _mapx;
|
||||
CvMat* _mapy;
|
||||
|
||||
|
||||
//C++
|
||||
cv::Mat camera_mat;
|
||||
cv::Mat R;
|
||||
cv::Mat new_camera_mat;
|
||||
cv::Mat distortion_coeffs;
|
||||
cv::Mat mapx;
|
||||
cv::Mat mapy;
|
||||
int mat_type;
|
||||
|
||||
//C++
|
||||
cv::Mat camera_mat;
|
||||
cv::Mat R;
|
||||
cv::Mat new_camera_mat;
|
||||
cv::Mat distortion_coeffs;
|
||||
cv::Mat mapx;
|
||||
cv::Mat mapy;
|
||||
int mat_type;
|
||||
|
||||
};
|
||||
|
||||
CV_InitUndistortRectifyMapBadArgTest::CV_InitUndistortRectifyMapBadArgTest ()
|
||||
@@ -314,86 +314,86 @@ CV_InitUndistortRectifyMapBadArgTest::CV_InitUndistortRectifyMapBadArgTest ()
|
||||
|
||||
void CV_InitUndistortRectifyMapBadArgTest::run_func()
|
||||
{
|
||||
if (useCPlus)
|
||||
{
|
||||
cv::initUndistortRectifyMap(camera_mat,distortion_coeffs,R,new_camera_mat,img_size,mat_type,mapx,mapy);
|
||||
}
|
||||
else
|
||||
{
|
||||
cvInitUndistortRectifyMap(_camera_mat,_distortion_coeffs,matR,_new_camera_mat,_mapx,_mapy);
|
||||
}
|
||||
if (useCPlus)
|
||||
{
|
||||
cv::initUndistortRectifyMap(camera_mat,distortion_coeffs,R,new_camera_mat,img_size,mat_type,mapx,mapy);
|
||||
}
|
||||
else
|
||||
{
|
||||
cvInitUndistortRectifyMap(_camera_mat,_distortion_coeffs,matR,_new_camera_mat,_mapx,_mapy);
|
||||
}
|
||||
}
|
||||
|
||||
void CV_InitUndistortRectifyMapBadArgTest::run(int)
|
||||
{
|
||||
int errcount = 0;
|
||||
int errcount = 0;
|
||||
//initializing
|
||||
img_size.width = 800;
|
||||
img_size.height = 600;
|
||||
double cam[9] = {150.f, 0.f, img_size.width/2.f, 0, 300.f, img_size.height/2.f, 0.f, 0.f, 1.f};
|
||||
double dist[4] = {0.01,0.02,0.001,0.0005};
|
||||
float* arr_mapx = new float[img_size.width*img_size.height];
|
||||
float* arr_mapy = new float[img_size.width*img_size.height];
|
||||
double arr_new_camera_mat[9] = {155.f, 0.f, img_size.width/2.f+img_size.width/50.f, 0, 310.f, img_size.height/2.f+img_size.height/50.f, 0.f, 0.f, 1.f};
|
||||
double r[9] = {1,0,0,0,1,0,0,0,1};
|
||||
img_size.width = 800;
|
||||
img_size.height = 600;
|
||||
double cam[9] = {150.f, 0.f, img_size.width/2.f, 0, 300.f, img_size.height/2.f, 0.f, 0.f, 1.f};
|
||||
double dist[4] = {0.01,0.02,0.001,0.0005};
|
||||
float* arr_mapx = new float[img_size.width*img_size.height];
|
||||
float* arr_mapy = new float[img_size.width*img_size.height];
|
||||
double arr_new_camera_mat[9] = {155.f, 0.f, img_size.width/2.f+img_size.width/50.f, 0, 310.f, img_size.height/2.f+img_size.height/50.f, 0.f, 0.f, 1.f};
|
||||
double r[9] = {1,0,0,0,1,0,0,0,1};
|
||||
|
||||
CvMat _camera_mat_orig = cvMat(3,3,CV_64F,cam);
|
||||
CvMat _distortion_coeffs_orig = cvMat(1,4,CV_64F,dist);
|
||||
CvMat _new_camera_mat_orig = cvMat(3,3,CV_64F,arr_new_camera_mat);
|
||||
CvMat _R_orig = cvMat(3,3,CV_64F,r);
|
||||
CvMat _mapx_orig = cvMat(img_size.height,img_size.width,CV_32FC1,arr_mapx);
|
||||
CvMat _mapy_orig = cvMat(img_size.height,img_size.width,CV_32FC1,arr_mapy);
|
||||
int mat_type_orig = CV_32FC1;
|
||||
CvMat _camera_mat_orig = cvMat(3,3,CV_64F,cam);
|
||||
CvMat _distortion_coeffs_orig = cvMat(1,4,CV_64F,dist);
|
||||
CvMat _new_camera_mat_orig = cvMat(3,3,CV_64F,arr_new_camera_mat);
|
||||
CvMat _R_orig = cvMat(3,3,CV_64F,r);
|
||||
CvMat _mapx_orig = cvMat(img_size.height,img_size.width,CV_32FC1,arr_mapx);
|
||||
CvMat _mapy_orig = cvMat(img_size.height,img_size.width,CV_32FC1,arr_mapy);
|
||||
int mat_type_orig = CV_32FC1;
|
||||
|
||||
_camera_mat = &_camera_mat_orig;
|
||||
_distortion_coeffs = &_distortion_coeffs_orig;
|
||||
_new_camera_mat = &_new_camera_mat_orig;
|
||||
matR = &_R_orig;
|
||||
_mapx = &_mapx_orig;
|
||||
_mapy = &_mapy_orig;
|
||||
mat_type = mat_type_orig;
|
||||
_camera_mat = &_camera_mat_orig;
|
||||
_distortion_coeffs = &_distortion_coeffs_orig;
|
||||
_new_camera_mat = &_new_camera_mat_orig;
|
||||
matR = &_R_orig;
|
||||
_mapx = &_mapx_orig;
|
||||
_mapy = &_mapy_orig;
|
||||
mat_type = mat_type_orig;
|
||||
|
||||
//tests
|
||||
useCPlus = true;
|
||||
CvMat* temp;
|
||||
useCPlus = true;
|
||||
CvMat* temp;
|
||||
|
||||
//C++ tests
|
||||
useCPlus = true;
|
||||
//C++ tests
|
||||
useCPlus = true;
|
||||
|
||||
camera_mat = cv::Mat(&_camera_mat_orig);
|
||||
distortion_coeffs = cv::Mat(&_distortion_coeffs_orig);
|
||||
new_camera_mat = cv::Mat(&_new_camera_mat_orig);
|
||||
R = cv::Mat(&_R_orig);
|
||||
mapx = cv::Mat(&_mapx_orig);
|
||||
mapy = cv::Mat(&_mapy_orig);
|
||||
camera_mat = cv::Mat(&_camera_mat_orig);
|
||||
distortion_coeffs = cv::Mat(&_distortion_coeffs_orig);
|
||||
new_camera_mat = cv::Mat(&_new_camera_mat_orig);
|
||||
R = cv::Mat(&_R_orig);
|
||||
mapx = cv::Mat(&_mapx_orig);
|
||||
mapy = cv::Mat(&_mapy_orig);
|
||||
|
||||
|
||||
mat_type = CV_64F;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid map matrix type" );
|
||||
mat_type = mat_type_orig;
|
||||
mat_type = CV_64F;
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid map matrix type" );
|
||||
mat_type = mat_type_orig;
|
||||
|
||||
temp = cvCreateMat(3,2,CV_32FC1);
|
||||
camera_mat = cv::Mat(temp);
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid camera data matrix size" );
|
||||
camera_mat = cv::Mat(&_camera_mat_orig);
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(3,2,CV_32FC1);
|
||||
camera_mat = cv::Mat(temp);
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid camera data matrix size" );
|
||||
camera_mat = cv::Mat(&_camera_mat_orig);
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
temp = cvCreateMat(4,3,CV_32FC1);
|
||||
R = cv::Mat(temp);
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid R data matrix size" );
|
||||
R = cv::Mat(&_R_orig);
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(4,3,CV_32FC1);
|
||||
R = cv::Mat(temp);
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid R data matrix size" );
|
||||
R = cv::Mat(&_R_orig);
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
temp = cvCreateMat(6,1,CV_32FC1);
|
||||
distortion_coeffs = cv::Mat(temp);
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid distortion coefficients data matrix size" );
|
||||
distortion_coeffs = cv::Mat(&_distortion_coeffs_orig);
|
||||
cvReleaseMat(&temp);
|
||||
temp = cvCreateMat(6,1,CV_32FC1);
|
||||
distortion_coeffs = cv::Mat(temp);
|
||||
errcount += run_test_case( CV_StsAssert, "Invalid distortion coefficients data matrix size" );
|
||||
distortion_coeffs = cv::Mat(&_distortion_coeffs_orig);
|
||||
cvReleaseMat(&temp);
|
||||
|
||||
//------------
|
||||
delete[] arr_mapx;
|
||||
delete[] arr_mapy;
|
||||
ts->set_failed_test_info(errcount > 0 ? cvtest::TS::FAIL_BAD_ARG_CHECK : cvtest::TS::OK);
|
||||
delete[] arr_mapx;
|
||||
delete[] arr_mapy;
|
||||
ts->set_failed_test_info(errcount > 0 ? cvtest::TS::FAIL_BAD_ARG_CHECK : cvtest::TS::OK);
|
||||
}
|
||||
|
||||
|
||||
@@ -404,28 +404,28 @@ public:
|
||||
CV_UndistortBadArgTest();
|
||||
protected:
|
||||
void run(int);
|
||||
void run_func();
|
||||
void run_func();
|
||||
|
||||
private:
|
||||
//common
|
||||
cv::Size img_size;
|
||||
bool useCPlus;
|
||||
//common
|
||||
cv::Size img_size;
|
||||
bool useCPlus;
|
||||
|
||||
//C
|
||||
CvMat* _camera_mat;
|
||||
CvMat* _new_camera_mat;
|
||||
CvMat* _distortion_coeffs;
|
||||
CvMat* _src;
|
||||
CvMat* _dst;
|
||||
|
||||
//C
|
||||
CvMat* _camera_mat;
|
||||
CvMat* _new_camera_mat;
|
||||
CvMat* _distortion_coeffs;
|
||||
CvMat* _src;
|
||||
CvMat* _dst;
|
||||
|
||||
|
||||
//C++
|
||||
cv::Mat camera_mat;
|
||||
cv::Mat new_camera_mat;
|
||||
cv::Mat distortion_coeffs;
|
||||
cv::Mat src;
|
||||
cv::Mat dst;
|
||||
|
||||
//C++
|
||||
cv::Mat camera_mat;
|
||||
cv::Mat new_camera_mat;
|
||||
cv::Mat distortion_coeffs;
|
||||
cv::Mat src;
|
||||
cv::Mat dst;
|
||||
|
||||
};
|
||||
|
||||
CV_UndistortBadArgTest::CV_UndistortBadArgTest ()
|
||||
@@ -434,81 +434,81 @@ CV_UndistortBadArgTest::CV_UndistortBadArgTest ()
|
||||
|
||||
void CV_UndistortBadArgTest::run_func()
|
||||
{
|
||||
if (useCPlus)
|
||||
{
|
||||
cv::undistort(src,dst,camera_mat,distortion_coeffs,new_camera_mat);
|
||||
}
|
||||
else
|
||||
{
|
||||
cvUndistort2(_src,_dst,_camera_mat,_distortion_coeffs,_new_camera_mat);
|
||||
}
|
||||
if (useCPlus)
|
||||
{
|
||||
cv::undistort(src,dst,camera_mat,distortion_coeffs,new_camera_mat);
|
||||
}
|
||||
else
|
||||
{
|
||||
cvUndistort2(_src,_dst,_camera_mat,_distortion_coeffs,_new_camera_mat);
|
||||
}
|
||||
}
|
||||
|
||||
void CV_UndistortBadArgTest::run(int)
|
||||
{
|
||||
int errcount = 0;
|
||||
int errcount = 0;
|
||||
//initializing
|
||||
img_size.width = 800;
|
||||
img_size.height = 600;
|
||||
double cam[9] = {150.f, 0.f, img_size.width/2.f, 0, 300.f, img_size.height/2.f, 0.f, 0.f, 1.f};
|
||||
double dist[4] = {0.01,0.02,0.001,0.0005};
|
||||
float* arr_src = new float[img_size.width*img_size.height];
|
||||
float* arr_dst = new float[img_size.width*img_size.height];
|
||||
double arr_new_camera_mat[9] = {155.f, 0.f, img_size.width/2.f+img_size.width/50.f, 0, 310.f, img_size.height/2.f+img_size.height/50.f, 0.f, 0.f, 1.f};
|
||||
img_size.width = 800;
|
||||
img_size.height = 600;
|
||||
double cam[9] = {150.f, 0.f, img_size.width/2.f, 0, 300.f, img_size.height/2.f, 0.f, 0.f, 1.f};
|
||||
double dist[4] = {0.01,0.02,0.001,0.0005};
|
||||
float* arr_src = new float[img_size.width*img_size.height];
|
||||
float* arr_dst = new float[img_size.width*img_size.height];
|
||||
double arr_new_camera_mat[9] = {155.f, 0.f, img_size.width/2.f+img_size.width/50.f, 0, 310.f, img_size.height/2.f+img_size.height/50.f, 0.f, 0.f, 1.f};
|
||||
|
||||
CvMat _camera_mat_orig = cvMat(3,3,CV_64F,cam);
|
||||
CvMat _distortion_coeffs_orig = cvMat(1,4,CV_64F,dist);
|
||||
CvMat _new_camera_mat_orig = cvMat(3,3,CV_64F,arr_new_camera_mat);
|
||||
CvMat _src_orig = cvMat(img_size.height,img_size.width,CV_32FC1,arr_src);
|
||||
CvMat _dst_orig = cvMat(img_size.height,img_size.width,CV_32FC1,arr_dst);
|
||||
CvMat _camera_mat_orig = cvMat(3,3,CV_64F,cam);
|
||||
CvMat _distortion_coeffs_orig = cvMat(1,4,CV_64F,dist);
|
||||
CvMat _new_camera_mat_orig = cvMat(3,3,CV_64F,arr_new_camera_mat);
|
||||
CvMat _src_orig = cvMat(img_size.height,img_size.width,CV_32FC1,arr_src);
|
||||
CvMat _dst_orig = cvMat(img_size.height,img_size.width,CV_32FC1,arr_dst);
|
||||
|
||||
_camera_mat = &_camera_mat_orig;
|
||||
_distortion_coeffs = &_distortion_coeffs_orig;
|
||||
_new_camera_mat = &_new_camera_mat_orig;
|
||||
_src = &_src_orig;
|
||||
_dst = &_dst_orig;
|
||||
_camera_mat = &_camera_mat_orig;
|
||||
_distortion_coeffs = &_distortion_coeffs_orig;
|
||||
_new_camera_mat = &_new_camera_mat_orig;
|
||||
_src = &_src_orig;
|
||||
_dst = &_dst_orig;
|
||||
|
||||
//tests
|
||||
useCPlus = true;
|
||||
CvMat* temp;
|
||||
CvMat* temp1;
|
||||
useCPlus = true;
|
||||
CvMat* temp;
|
||||
CvMat* temp1;
|
||||
|
||||
//C tests
|
||||
useCPlus = false;
|
||||
//C tests
|
||||
useCPlus = false;
|
||||
|
||||
temp = cvCreateMat(800,600,CV_32F);
|
||||
temp1 = cvCreateMat(800,601,CV_32F);
|
||||
_src = temp;
|
||||
_dst = temp1;
|
||||
errcount += run_test_case( CV_StsAssert, "Input and output data matrix sizes mismatch" );
|
||||
_src = &_src_orig;
|
||||
_dst = &_dst_orig;
|
||||
cvReleaseMat(&temp);
|
||||
cvReleaseMat(&temp1);
|
||||
temp = cvCreateMat(800,600,CV_32F);
|
||||
temp1 = cvCreateMat(800,601,CV_32F);
|
||||
_src = temp;
|
||||
_dst = temp1;
|
||||
errcount += run_test_case( CV_StsAssert, "Input and output data matrix sizes mismatch" );
|
||||
_src = &_src_orig;
|
||||
_dst = &_dst_orig;
|
||||
cvReleaseMat(&temp);
|
||||
cvReleaseMat(&temp1);
|
||||
|
||||
temp = cvCreateMat(800,600,CV_32F);
|
||||
temp1 = cvCreateMat(800,600,CV_64F);
|
||||
_src = temp;
|
||||
_dst = temp1;
|
||||
errcount += run_test_case( CV_StsAssert, "Input and output data matrix types mismatch" );
|
||||
_src = &_src_orig;
|
||||
_dst = &_dst_orig;
|
||||
cvReleaseMat(&temp);
|
||||
cvReleaseMat(&temp1);
|
||||
temp = cvCreateMat(800,600,CV_32F);
|
||||
temp1 = cvCreateMat(800,600,CV_64F);
|
||||
_src = temp;
|
||||
_dst = temp1;
|
||||
errcount += run_test_case( CV_StsAssert, "Input and output data matrix types mismatch" );
|
||||
_src = &_src_orig;
|
||||
_dst = &_dst_orig;
|
||||
cvReleaseMat(&temp);
|
||||
cvReleaseMat(&temp1);
|
||||
|
||||
//C++ tests
|
||||
useCPlus = true;
|
||||
//C++ tests
|
||||
useCPlus = true;
|
||||
|
||||
camera_mat = cv::Mat(&_camera_mat_orig);
|
||||
distortion_coeffs = cv::Mat(&_distortion_coeffs_orig);
|
||||
new_camera_mat = cv::Mat(&_new_camera_mat_orig);
|
||||
src = cv::Mat(&_src_orig);
|
||||
dst = cv::Mat(&_dst_orig);
|
||||
camera_mat = cv::Mat(&_camera_mat_orig);
|
||||
distortion_coeffs = cv::Mat(&_distortion_coeffs_orig);
|
||||
new_camera_mat = cv::Mat(&_new_camera_mat_orig);
|
||||
src = cv::Mat(&_src_orig);
|
||||
dst = cv::Mat(&_dst_orig);
|
||||
|
||||
//------------
|
||||
delete[] arr_src;
|
||||
delete[] arr_dst;
|
||||
ts->set_failed_test_info(errcount > 0 ? cvtest::TS::FAIL_BAD_ARG_CHECK : cvtest::TS::OK);
|
||||
delete[] arr_src;
|
||||
delete[] arr_dst;
|
||||
ts->set_failed_test_info(errcount > 0 ? cvtest::TS::FAIL_BAD_ARG_CHECK : cvtest::TS::OK);
|
||||
}
|
||||
|
||||
TEST(Calib3d_UndistortPoints, badarg) { CV_UndistortPointsBadArgTest test; test.safe_run(); }
|
||||
|
@@ -1,97 +1,97 @@
|
||||
#include "test_precomp.hpp"
|
||||
#include <string>
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
|
||||
class CV_UndistortTest : public cvtest::BaseTest
|
||||
{
|
||||
public:
|
||||
CV_UndistortTest();
|
||||
~CV_UndistortTest();
|
||||
protected:
|
||||
void run(int);
|
||||
private:
|
||||
void generate3DPointCloud(vector<Point3f>& points, Point3f pmin = Point3f(-1,
|
||||
-1, 5), Point3f pmax = Point3f(1, 1, 10));
|
||||
void generateCameraMatrix(Mat& cameraMatrix);
|
||||
void generateDistCoeffs(Mat& distCoeffs, int count);
|
||||
|
||||
double thresh;
|
||||
RNG rng;
|
||||
};
|
||||
|
||||
CV_UndistortTest::CV_UndistortTest()
|
||||
{
|
||||
thresh = 1.0e-2;
|
||||
}
|
||||
CV_UndistortTest::~CV_UndistortTest() {}
|
||||
|
||||
void CV_UndistortTest::generate3DPointCloud(vector<Point3f>& points, Point3f pmin, Point3f pmax)
|
||||
{
|
||||
const Point3f delta = pmax - pmin;
|
||||
for (size_t i = 0; i < points.size(); i++)
|
||||
{
|
||||
Point3f p(float(rand()) / RAND_MAX, float(rand()) / RAND_MAX,
|
||||
float(rand()) / RAND_MAX);
|
||||
p.x *= delta.x;
|
||||
p.y *= delta.y;
|
||||
p.z *= delta.z;
|
||||
p = p + pmin;
|
||||
points[i] = p;
|
||||
}
|
||||
}
|
||||
void CV_UndistortTest::generateCameraMatrix(Mat& cameraMatrix)
|
||||
{
|
||||
const double fcMinVal = 1e-3;
|
||||
const double fcMaxVal = 100;
|
||||
cameraMatrix.create(3, 3, CV_64FC1);
|
||||
cameraMatrix.setTo(Scalar(0));
|
||||
cameraMatrix.at<double>(0,0) = rng.uniform(fcMinVal, fcMaxVal);
|
||||
cameraMatrix.at<double>(1,1) = rng.uniform(fcMinVal, fcMaxVal);
|
||||
cameraMatrix.at<double>(0,2) = rng.uniform(fcMinVal, fcMaxVal);
|
||||
cameraMatrix.at<double>(1,2) = rng.uniform(fcMinVal, fcMaxVal);
|
||||
cameraMatrix.at<double>(2,2) = 1;
|
||||
}
|
||||
void CV_UndistortTest::generateDistCoeffs(Mat& distCoeffs, int count)
|
||||
{
|
||||
distCoeffs = Mat::zeros(count, 1, CV_64FC1);
|
||||
for (int i = 0; i < count; i++)
|
||||
distCoeffs.at<double>(i,0) = rng.uniform(0.0, 1.0e-3);
|
||||
}
|
||||
|
||||
void CV_UndistortTest::run(int /* start_from */)
|
||||
{
|
||||
Mat intrinsics, distCoeffs;
|
||||
generateCameraMatrix(intrinsics);
|
||||
vector<Point3f> points(500);
|
||||
generate3DPointCloud(points);
|
||||
vector<Point2f> projectedPoints;
|
||||
projectedPoints.resize(points.size());
|
||||
|
||||
int modelMembersCount[] = {4,5,8};
|
||||
for (int idx = 0; idx < 3; idx++)
|
||||
{
|
||||
generateDistCoeffs(distCoeffs, modelMembersCount[idx]);
|
||||
projectPoints(Mat(points), Mat::zeros(3,1,CV_64FC1), Mat::zeros(3,1,CV_64FC1), intrinsics, distCoeffs, projectedPoints);
|
||||
|
||||
vector<Point2f> realUndistortedPoints;
|
||||
projectPoints(Mat(points), Mat::zeros(3,1,CV_64FC1), Mat::zeros(3,1,CV_64FC1), intrinsics, Mat::zeros(4,1,CV_64FC1), realUndistortedPoints);
|
||||
|
||||
Mat undistortedPoints;
|
||||
undistortPoints(Mat(projectedPoints), undistortedPoints, intrinsics, distCoeffs);
|
||||
|
||||
Mat p;
|
||||
perspectiveTransform(undistortedPoints, p, intrinsics);
|
||||
undistortedPoints = p;
|
||||
double diff = norm(Mat(realUndistortedPoints), undistortedPoints);
|
||||
if (diff > thresh)
|
||||
{
|
||||
ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY);
|
||||
return;
|
||||
}
|
||||
ts->set_failed_test_info(cvtest::TS::OK);
|
||||
}
|
||||
}
|
||||
|
||||
#include "test_precomp.hpp"
|
||||
#include <string>
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
|
||||
class CV_UndistortTest : public cvtest::BaseTest
|
||||
{
|
||||
public:
|
||||
CV_UndistortTest();
|
||||
~CV_UndistortTest();
|
||||
protected:
|
||||
void run(int);
|
||||
private:
|
||||
void generate3DPointCloud(vector<Point3f>& points, Point3f pmin = Point3f(-1,
|
||||
-1, 5), Point3f pmax = Point3f(1, 1, 10));
|
||||
void generateCameraMatrix(Mat& cameraMatrix);
|
||||
void generateDistCoeffs(Mat& distCoeffs, int count);
|
||||
|
||||
double thresh;
|
||||
RNG rng;
|
||||
};
|
||||
|
||||
CV_UndistortTest::CV_UndistortTest()
|
||||
{
|
||||
thresh = 1.0e-2;
|
||||
}
|
||||
CV_UndistortTest::~CV_UndistortTest() {}
|
||||
|
||||
void CV_UndistortTest::generate3DPointCloud(vector<Point3f>& points, Point3f pmin, Point3f pmax)
|
||||
{
|
||||
const Point3f delta = pmax - pmin;
|
||||
for (size_t i = 0; i < points.size(); i++)
|
||||
{
|
||||
Point3f p(float(rand()) / RAND_MAX, float(rand()) / RAND_MAX,
|
||||
float(rand()) / RAND_MAX);
|
||||
p.x *= delta.x;
|
||||
p.y *= delta.y;
|
||||
p.z *= delta.z;
|
||||
p = p + pmin;
|
||||
points[i] = p;
|
||||
}
|
||||
}
|
||||
void CV_UndistortTest::generateCameraMatrix(Mat& cameraMatrix)
|
||||
{
|
||||
const double fcMinVal = 1e-3;
|
||||
const double fcMaxVal = 100;
|
||||
cameraMatrix.create(3, 3, CV_64FC1);
|
||||
cameraMatrix.setTo(Scalar(0));
|
||||
cameraMatrix.at<double>(0,0) = rng.uniform(fcMinVal, fcMaxVal);
|
||||
cameraMatrix.at<double>(1,1) = rng.uniform(fcMinVal, fcMaxVal);
|
||||
cameraMatrix.at<double>(0,2) = rng.uniform(fcMinVal, fcMaxVal);
|
||||
cameraMatrix.at<double>(1,2) = rng.uniform(fcMinVal, fcMaxVal);
|
||||
cameraMatrix.at<double>(2,2) = 1;
|
||||
}
|
||||
void CV_UndistortTest::generateDistCoeffs(Mat& distCoeffs, int count)
|
||||
{
|
||||
distCoeffs = Mat::zeros(count, 1, CV_64FC1);
|
||||
for (int i = 0; i < count; i++)
|
||||
distCoeffs.at<double>(i,0) = rng.uniform(0.0, 1.0e-3);
|
||||
}
|
||||
|
||||
void CV_UndistortTest::run(int /* start_from */)
|
||||
{
|
||||
Mat intrinsics, distCoeffs;
|
||||
generateCameraMatrix(intrinsics);
|
||||
vector<Point3f> points(500);
|
||||
generate3DPointCloud(points);
|
||||
vector<Point2f> projectedPoints;
|
||||
projectedPoints.resize(points.size());
|
||||
|
||||
int modelMembersCount[] = {4,5,8};
|
||||
for (int idx = 0; idx < 3; idx++)
|
||||
{
|
||||
generateDistCoeffs(distCoeffs, modelMembersCount[idx]);
|
||||
projectPoints(Mat(points), Mat::zeros(3,1,CV_64FC1), Mat::zeros(3,1,CV_64FC1), intrinsics, distCoeffs, projectedPoints);
|
||||
|
||||
vector<Point2f> realUndistortedPoints;
|
||||
projectPoints(Mat(points), Mat::zeros(3,1,CV_64FC1), Mat::zeros(3,1,CV_64FC1), intrinsics, Mat::zeros(4,1,CV_64FC1), realUndistortedPoints);
|
||||
|
||||
Mat undistortedPoints;
|
||||
undistortPoints(Mat(projectedPoints), undistortedPoints, intrinsics, distCoeffs);
|
||||
|
||||
Mat p;
|
||||
perspectiveTransform(undistortedPoints, p, intrinsics);
|
||||
undistortedPoints = p;
|
||||
double diff = norm(Mat(realUndistortedPoints), undistortedPoints);
|
||||
if (diff > thresh)
|
||||
{
|
||||
ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY);
|
||||
return;
|
||||
}
|
||||
ts->set_failed_test_info(cvtest::TS::OK);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(Calib3d_Undistort, accuracy) { CV_UndistortTest test; test.safe_run(); }
|
Reference in New Issue
Block a user