当我阅读
的代码时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和Alpha
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;
}
谁能帮助我?