почему opencv вычисляет параметры Extrinsics таким образом?

Когда я читаю код

cv::fisheye::calibrate(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, const Size& image_size,
InputOutputArray K, InputOutputArray D, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs,
int flags , cv::TermCriteria criteria),

Я заметил, что код был рассчитан по направлению вектора поворота и вектора переноса, но итерация метода Гаусса-Ньютона не использует их.

Mat JJ2_inv, ex3;
ComputeJacobians(objectPoints, imagePoints, finalParam, omc, Tc,    check_cond,thresh_cond, JJ2_inv, ex3);
Mat G =  alpha_smooth2 * JJ2_inv * ex3;
currentParam = finalParam + G;

но currentParam содержит только fx, fy, cx, cy, k1, k2, k3, k4 и альфа

cv::internal::IntrinsicParams cv::internal::IntrinsicParams::operator+(const Mat& a)
{
IntrinsicParams tmp;
const double* ptr = a.ptr<double>();

int j = 0;
tmp.f[0]    = this->f[0]    + (isEstimate[0] ? ptr[j++] : 0);
tmp.f[1]    = this->f[1]    + (isEstimate[1] ? ptr[j++] : 0);
tmp.c[0]    = this->c[0]    + (isEstimate[2] ? ptr[j++] : 0);
tmp.alpha   = this->alpha   + (isEstimate[4] ? ptr[j++] : 0);
tmp.c[1]    = this->c[1]    + (isEstimate[3] ? ptr[j++] : 0);
tmp.k[0]    = this->k[0]    + (isEstimate[5] ? ptr[j++] : 0);
tmp.k[1]    = this->k[1]    + (isEstimate[6] ? ptr[j++] : 0);
tmp.k[2]    = this->k[2]    + (isEstimate[7] ? ptr[j++] : 0);
tmp.k[3]    = this->k[3]    + (isEstimate[8] ? ptr[j++] : 0);

tmp.isEstimate = isEstimate;
return tmp;
}

кто может мне помочь?

0

Решение

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

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

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

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