1 #include "../lib/args.h" 2 #include "../lib/opencv.h" 3 #include "../lib/intrinsics.h" 4 #include "../lib/dataset.h" 5 #include "../lib/misc.h" 6 #include "../lib/viewer.h" 7 #include "../lib/assert.h" 19 0.0, std::cos(x), -std::sin(x),
20 0.0, std::sin(x), std::cos(x)
23 std::cos(y), 0.0, std::sin(y),
25 -std::sin(y), 0.0, std::cos(y)
28 std::cos(z), -std::sin(z), 0.0,
29 std::sin(z), std::cos(z), 0.0,
32 mat33 R = Rz * Ry * Rx;
38 int main(
int argc,
const char* argv[]) {
39 get_args(argc, argv,
"dataset_parameters.json intrinsics.json points.json/measured_slopes.json");
43 std::string dataset_group_name =
"";
48 std::cout <<
"loading feature points or slopes" << std::endl;
51 bool has_measured_slopes;
59 std::cout <<
"preparing background image" << std::endl;
61 cv::Size image_size = datag.image_size_with_border();
62 cv::Mat_<cv::Vec3b> back_image(image_size, background_color);
66 back_image = cv::imread(image_filename, CV_LOAD_IMAGE_COLOR);
67 image_size = back_image.size();
70 viewer view(
"Slopes Viewer", image_size.width, image_size.height+20+(has_measured_slopes ? 20 : 0),
true);
71 const real max_abs_angle = 10.0_deg;
72 auto& x_slider = view.
add_real_slider(
"X", 0.0, -max_abs_angle, +max_abs_angle, 1000);
73 auto& y_slider = view.
add_real_slider(
"Y", 0.0, -max_abs_angle, +max_abs_angle, 1000);
74 auto& z_slider = view.
add_real_slider(
"Z", 0.0, -max_abs_angle, +max_abs_angle, 1000);
75 auto& measured_width_slider = view.
add_int_slider(
"measured width", 0, 0, 400);
76 auto& model_width_slider = view.
add_int_slider(
"model width", 200, 0, 400);
77 auto& exaggeration_slider = view.
add_real_slider(
"exaggeration", 1.0, 1.0, 100.0);
82 real x = x_slider.value(), y = y_slider.value(), z = z_slider.value();
83 real exaggeration = exaggeration_slider.value();
85 cv::Mat_<cv::Vec3b> viz_image(image_size);
88 back_image.copyTo(viz_image);
91 if(has_measured_slopes && measured_width_slider.value() > 0)
97 cv::cvtColor(viz_image, interm, CV_BGR2GRAY);
98 cv::cvtColor(interm, viz_image, CV_GRAY2BGR);
107 for(
const auto& kv : fpoints.
points) {
108 const std::string& feature_name = kv.first;
114 if(model_width_slider > 0)
118 view.
draw(cv::Point(0, 20), viz_image);
123 if(has_measured_slopes) {
126 for(
const auto& kv : fpoints.
points) {
127 const std::string& feature_name = kv.first;
134 int n = fpoints.
points.size();
135 real error_coeff = 100.0;
138 error = herror + verror;
139 error *= error_coeff;
140 herror *= error_coeff;
141 verror *= error_coeff;
148 if(has_measured_slopes) {
real_slider & add_real_slider(const std::string &caption, real default_val, real min_val, real max_val, int steps=100)
Numeric sq(Numeric n)
Compute square of a number.
constexpr real deg_per_rad
bool has_feature_slopes(const json &j_fslopes)
std::string image_filename() const
std::string in_filename_arg()
void draw(const cv::Mat_< cv::Vec3b > &, real blend=1.0)
real model_vertical_slope(const vec2 &undistorted_point, const mat33 &K, const mat33 &R)
real model_horizontal_slope(const vec2 &undistorted_point, const mat33 &K, const mat33 &R)
Points of different features, on one view.
const cv::Vec3b background_color(0, 0, 0)
cv::Mat_< cv::Vec3b > visualize_feature_slopes(const feature_slopes &fslopes, const cv::Mat_< cv::Vec3b > &back_img, int width, real exaggeration, int thickness, const border &bord)
std::map< std::string, feature_point > points
dataset_view view(int x) const
intrinsics intrinsics_arg()
distortion_parameters distortion
cv::Matx< real, 3, 3 > mat33
feature_points decode_feature_points(const json &j_fpoints)
mat33 to_rotation_matrix(const vec3 &euler)
feature_slopes decode_feature_slopes(const json &j_fslopes)
std::string to_string(const T &)
std::map< std::string, feature_slope > slopes
void draw_text(cv::Rect rect, const std::string &text, text_alignment=left)
int_slider & add_int_slider(const std::string &caption, int default_val, int min_val, int max_val, int step=1)
void clear(int width, int height)
json import_json_file(const std::string &filename)
int main(int argc, const char *argv[])
dataset_group group(const std::string &grp) const
std::function< void()> update_callback
void get_args(int argc, const char *argv[], const std::string &usage)