10 if(
has(j_intr,
"distortion")) {
17 intr.
width = j_intr[
"width"];
18 intr.
height = j_intr[
"height"];
26 j_intr[
"distortion"] = json::object();
32 j_intr[
"width"] = intr.
width;
33 j_intr[
"height"] = intr.
height;
39 std::vector<vec2> distorted_arr { distorted };
41 return undistorted_arr.front();
48 std::vector<vec2> undistorted;
49 undistorted.reserve(distorted.size());
65 std::vector<cv::Vec2f> undistorted;
66 undistorted.reserve(distorted.size());
87 real ix = undistorted[0], iy = undistorted[1];
89 real x = (ix - intr.
cx()) / intr.
fx();
90 real y = (iy - intr.
cy()) / intr.
fy();
93 real kr = 1.0 + d.k1*rr + d.k2*rr*rr + d.k3*rr*rr*rr;
97 dx += 2.0 * d.p1 * x * y + d.p2*(rr + 2.0 * x * x);
98 dy += d.p1 * (rr + 2.0 * y * y) + 2.0 * d.p2 * x * y;
100 real idx = intr.
fx() * dx + intr.
cx();
101 real idy = intr.
fy() * dy + intr.
cy();
102 return vec2(idx, idy);
109 std::vector<vec2> distorted(undistorted.size());
111 #pragma omp parallel for 112 for(std::ptrdiff_t i = 0; i < undistorted.size(); ++i)
120 std::cout <<
"loading intrinsics" << std::endl;
vec2 undistort_point(const intrinsics &intr, const vec2 &distorted)
std::vector< vec2 > distort_points(const intrinsics &intr, const std::vector< vec2 > &undistorted)
bool has(const json &j, const std::string &key)
json encode_intrinsics(const intrinsics &intr)
cv::Mat_< real > decode_mat(const json &j)
intrinsics intrinsics_arg()
distortion_parameters distortion
json encode_mat(const Mat &mat)
vec2 distort_point(const intrinsics &intr, const vec2 &undistorted)
std::vector< real > cv_coeffs() const
std::vector< vec2 > undistort_points(const intrinsics &intr, const std::vector< vec2 > &distorted)
intrinsics decode_intrinsics(const json &j_intr)
T get_or(const json &j, const std::string &key, const T &default_value)