расчет ошибки перепроецирования в калибровке камеры opencv

Приведенный ниже код является частью калибровки камеры от OpenCV. Я просто хочу немного изменить: переменная err рассчитывается по формуле евклидова расстояния sqrt(x-coordinate diff^2+y-coordinate diff^2), но я хочу рассмотреть только X-координаты diff. так что я переписал

err = sqrt((imagePoints[i].x - imagePoints2.x) ^ 2);

Тем не менее, я получаю сообщение об ошибке, так как я не могу получить доступ к значениям координаты x вектора imagePoints[i] & imagepoints2,

Может кто-нибудь помочь в переписывании переменной err учитывая только координату х дельта?

static double computeReprojectionErrors(
const vector<vector<Point3f> >& objectPoints,
const vector<vector<Point2f> >& imagePoints,
const vector<Mat>& rvecs, const vector<Mat>& tvecs,
const Mat& cameraMatrix, const Mat& distCoeffs,
vector<float>& perViewErrors, bool fisheye)
{

vector<Point2f> 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);
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]