Wie analysiere ich das zurückgegebene Ergebnis von cv::measurerateCamera?Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Wie analysiere ich das zurückgegebene Ergebnis von cv::measurerateCamera?

Post by Anonymous »

Gemäß dem von opencv bereitgestellten Beispielcode ist der von CalibrateCamera zurückgegebene RMS der Reprojektionsfehler, und die Rückgabe von ComputeReprojectionErrors ist auch der Reprojektionsfehler. Ich habe ein Experiment durchgeführt und die beiden zurückgegebenen Ergebnisse sind im Grunde die gleichen.
Warum müssen Sie also „computeReprojectionErrors“ ausführen?
Wie sieht man die Beziehung zwischen rms und totalAvgErr?

Code: Select all

rms = cv::calibrateCamera(objectPoints, imagePointsL, imageSize, cameraMatrixL, distcoeffsL, rvecsL, tvecsL, flags);

totalAvgErr = computeReprojectionErrors(objectPoints, imagePointsL, rvecsL, tvecsL, cameraMatrixL, distcoeffsL);

///////////////////////////////////////////////////////////////////////////////////////////////
static double computeReprojectionErrors( const vector& objectPoints,
const vector& imagePoints,
const vector& rvecs, const vector& tvecs,
const Mat& cameraMatrix , const Mat& distCoeffs,
vector& perViewErrors, bool fisheye)
{
vector imagePoints2;
size_t totalPoints = 0;
double totalErr = 0, err;
perViewErrors.resize(objectPoints.size());

for(size_t i = 0; i < objectPoints.size(); ++i )
{
if (fisheye)
{
fisheye::projectPoints(objectPoints[i], imagePoints2, rvecs[i], tvecs[i], cameraMatrix,
distCoeffs);
}
else
{
projectPoints(objectPoints[i], rvecs[i], tvecs[i], cameraMatrix, distCoeffs, imagePoints2);
}
err = norm(imagePoints[i], imagePoints2, NORM_L2);

size_t n = objectPoints[i].size();
perViewErrors[i] = (float) std::sqrt(err*err/n);
totalErr        += err*err;
totalPoints     += n;
}

return std::sqrt(totalErr/totalPoints);
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post