1 #include "../lib/common.h" 2 #include "../lib/args.h" 3 #include "../lib/opencv.h" 4 #include "../lib/intrinsics.h" 5 #include "../lib/misc.h" 6 #include "../lib/obj_img_correspondence.h" 7 #include "../lib/viewer.h" 20 int main(
int argc,
const char* argv[]) {
21 get_args(argc, argv,
"cols rows square_width ir_intr.json");
29 viewer view(2*512, 2*424+30,
true);
31 auto& max_ir = view.
add_int_slider(
"ir max", 0xffff, 0x0000, 0xffff);
32 auto& exaggeration = view.
add_int_slider(
"exaggeration (%)", 100, 100, 1000);
38 cv::Mat_<uchar> ir = grab.
get_ir_frame(min_ir.value(), max_ir.value());
40 cv::Mat_<cv::Vec3b> large_ir;
42 cv::Mat_<uchar> large_ir_;
43 cv::resize(ir, large_ir_, cv::Size(2*512, 2*424), cv::INTER_NEAREST);
44 cv::cvtColor(large_ir_, large_ir, CV_GRAY2BGR);
52 real reprojection_error = NAN;
56 vec3 rotation_vec, translation;
68 std::vector<vec2> reprojected_image_points;
75 reprojected_image_points
80 reprojection_error = 0.0;
81 for(
int idx = 0; idx < rows*
cols; ++idx) {
82 const vec2& i_orig = image_points[idx];
83 const vec2& i_reproj = reprojected_image_points[idx];
85 vec2 diff = i_reproj - i_orig;
86 reprojection_error +=
sq(diff[0]) +
sq(diff[1]);
88 vec2 viz_diff = (exaggeration.value()/100.0)*diff;
89 vec2 viz_i_reproj = i_orig + viz_diff;
91 cv::circle(large_ir, cv::Point(2*i_orig[0], 2*i_orig[1]), 7, cv::Scalar(
orig_color), 1);
92 cv::circle(large_ir, cv::Point(2*viz_i_reproj[0], 2*viz_i_reproj[1]), 3, cv::Scalar(
reproj_color), -1);
94 reprojection_error /= rows*
cols;
95 reprojection_error = std::sqrt(reprojection_error);
98 view.
draw(cv::Rect(0, 0, 2*512, 2*424), large_ir);
102 }
while(view.
show());
Numeric sq(Numeric n)
Compute square of a number.
cv::Mat_< uchar > get_ir_frame(float min_ir=0, float max_ir=0xffff, bool undistorted=false)
std::vector< vec2 > checkerboard_image_corners(const checkerboard &chk)
void draw(const cv::Mat_< cv::Vec3b > &, real blend=1.0)
intrinsics intrinsics_arg()
distortion_parameters distortion
cv::Matx< real, 3, 3 > mat33
int main(int argc, const char *argv[])
std::vector< vec3 > checkerboard_world_corners(int cols, int rows, real square_width)
std::string to_string(const T &)
std::vector< real > cv_coeffs() const
void draw_text(cv::Rect rect, const std::string &text, text_alignment=left)
const cv::Vec3b reproj_color(0, 0, 255)
const cv::Vec3b orig_color(0, 0, 255)
int_slider & add_int_slider(const std::string &caption, int default_val, int min_val, int max_val, int step=1)
checkerboard detect_ir_checkerboard(cv::Mat_< uchar > &img, int cols, int rows, real square_width)
void clear(int width, int height)
void get_args(int argc, const char *argv[], const std::string &usage)