From: edgarriba Date: Fri, 8 Aug 2014 12:45:43 +0000 (+0200) Subject: remove unused tutorials X-Git-Tag: submit/tizen_ivi/20141117.190038~2^2~165^2~38 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7d8a16ae395f84b8c7c7293ddec881c288e7c100;p=profile%2Fivi%2Fopencv.git remove unused tutorials --- diff --git a/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/CMakeLists.txt b/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/CMakeLists.txt index 64405cd..6be48a5 100644 --- a/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/CMakeLists.txt +++ b/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/CMakeLists.txt @@ -17,11 +17,7 @@ set(sample_pnplib ) add_executable( ${target}pnp_registration ${sample_dir}main_registration.cpp ${sample_pnplib} ) -add_executable( ${target}pnp_verification ${sample_dir}main_verification.cpp ${sample_pnplib} ) add_executable( ${target}pnp_detection ${sample_dir}main_detection.cpp ${sample_pnplib} ) -add_executable( ${target}pnp_test ${sample_dir}test_pnp.cpp ) ocv_target_link_libraries( ${target}pnp_registration ${OPENCV_LINKER_LIBS} ${OPENCV_CPP_SAMPLES_REQUIRED_DEPS} ) -ocv_target_link_libraries( ${target}pnp_verification ${OPENCV_LINKER_LIBS} ${OPENCV_CPP_SAMPLES_REQUIRED_DEPS} ) ocv_target_link_libraries( ${target}pnp_detection ${OPENCV_LINKER_LIBS} ${OPENCV_CPP_SAMPLES_REQUIRED_DEPS} ) -ocv_target_link_libraries(${target}pnp_test ${OPENCV_LINKER_LIBS} ${OPENCV_CPP_SAMPLES_REQUIRED_DEPS} ) diff --git a/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/src/main_verification.cpp b/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/src/main_verification.cpp deleted file mode 100644 index 17bc96d..0000000 --- a/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/src/main_verification.cpp +++ /dev/null @@ -1,324 +0,0 @@ -#include - -#include -#include -#include -#include - -#include "Mesh.h" -#include "Model.h" -#include "PnPProblem.h" -#include "RobustMatcher.h" -#include "ModelRegistration.h" -#include "Utils.h" - -#include "CsvWriter.h" - - - /* - * Set up the images paths - */ - - std::string img_verification_path = "../Data/resized_IMG_3872.JPG"; - std::string ply_read_path = "../Data/box.ply"; - std::string yml_read_path = "../Data/cookies_ORB.yml"; - - // Boolean the know if the registration it's done - bool end_registration = false; - - // Setup the points to register in the image - // In the order of the *.ply file and starting at 1 - int n = 7; - int pts[] = {1, 2, 3, 5, 6, 7, 8}; - - /* - * Set up the intrinsic camera parameters: CANON - */ - double f = 43; - double sx = 22.3, sy = 14.9; - double width = 718, height = 480; - double params_CANON[] = { width*f/sx, // fx - height*f/sy, // fy - width/2, // cx - height/2}; // cy - - /* - * Set up some basic colors - */ - cv::Scalar red(0, 0, 255); - cv::Scalar green(0,255,0); - cv::Scalar blue(255,0,0); - cv::Scalar yellow(0,255,255); - - /* - * CREATE MODEL REGISTRATION OBJECT - * CREATE OBJECT MESH - * CREATE OBJECT MODEL - * CREATE PNP OBJECT - */ - Mesh mesh; - ModelRegistration registration; - PnPProblem pnp_verification_epnp(params_CANON); - PnPProblem pnp_verification_iter(params_CANON); - PnPProblem pnp_verification_p3p(params_CANON); - PnPProblem pnp_verification_dls(params_CANON); - PnPProblem pnp_verification_gt(params_CANON); // groud truth - - -// Mouse events for model registration -static void onMouseModelVerification( int event, int x, int y, int, void* ) -{ - if ( event == cv::EVENT_LBUTTONUP ) - { - int n_regist = registration.getNumRegist(); - int n_vertex = pts[n_regist]; - - cv::Point2f point_2d = cv::Point2f(x,y); - cv::Point3f point_3d = mesh.getVertex(n_vertex-1); - - bool is_registrable = registration.is_registrable(); - if (is_registrable) - { - registration.registerPoint(point_2d, point_3d); - if( registration.getNumRegist() == registration.getNumMax() ) end_registration = true; - } - } -} - - -/* - * MAIN PROGRAM - * - */ - -int main(int, char**) -{ - - std::cout << "!!!Hello Verification!!!" << std::endl; // prints !!!Hello World!!! - - // load a mesh given the *.ply file path - mesh.load(ply_read_path); - - // load the 3D textured object model - Model model; - model.load(yml_read_path); - - // set parameters - int numKeyPoints = 10000; - - //Instantiate robust matcher: detector, extractor, matcher - RobustMatcher rmatcher; - cv::FeatureDetector * detector = new cv::OrbFeatureDetector(numKeyPoints); - rmatcher.setFeatureDetector(detector); - rmatcher.setRatio(0.80); - - // RANSAC parameters - int iterationsCount = 500; - float reprojectionError = 2.0; - float confidence = 0.99; - - - /* - * GROUND TRUTH SECOND IMAGE - * - */ - - cv::Mat img_in, img_vis; - - // Setup for new registration - registration.setNumMax(n); - - // Create & Open Window - cv::namedWindow("MODEL GROUND TRUTH", cv::WINDOW_KEEPRATIO); - - // Set up the mouse events - cv::setMouseCallback("MODEL GROUND TRUTH", onMouseModelVerification, 0 ); - - // Open the image to register - img_in = cv::imread(img_verification_path, cv::IMREAD_COLOR); - - if (!img_in.data) - { - std::cout << "Could not open or find the image" << std::endl; - return -1; - } - - std::cout << "Click the box corners ..." << std::endl; - std::cout << "Waiting ..." << std::endl; - - // Loop until all the points are registered - while ( cv::waitKey(30) < 0 ) - { - // Refresh debug image - img_vis = img_in.clone(); - - // Current registered points - std::vector list_points2d = registration.get_points2d(); - std::vector list_points3d = registration.get_points3d(); - - // Draw current registered points - drawPoints(img_vis, list_points2d, list_points3d, red); - - // If the registration is not finished, draw which 3D point we have to register. - // If the registration is finished, breaks the loop. - if (!end_registration) - { - // Draw debug text - int n_regist = registration.getNumRegist(); - int n_vertex = pts[n_regist]; - cv::Point3f current_poin3d = mesh.getVertex(n_vertex-1); - - drawQuestion(img_vis, current_poin3d, green); - drawCounter(img_vis, registration.getNumRegist(), registration.getNumMax(), red); - } - else - { - // Draw debug text - drawText(img_vis, "GROUND TRUTH", green); - drawCounter(img_vis, registration.getNumRegist(), registration.getNumMax(), green); - break; - } - - // Show the image - cv::imshow("MODEL GROUND TRUTH", img_vis); - } - - // The list of registered points - std::vector list_points2d = registration.get_points2d(); - std::vector list_points3d = registration.get_points3d(); - - // Estimate pose given the registered points - bool is_correspondence = pnp_verification_gt.estimatePose(list_points3d, list_points2d, cv::ITERATIVE); - - // Compute and draw all mesh object 2D points - std::vector pts_2d_ground_truth = pnp_verification_gt.verify_points(&mesh); - draw2DPoints(img_vis, pts_2d_ground_truth, green); - - // Draw the ground truth mesh - drawObjectMesh(img_vis, &mesh, &pnp_verification_gt, blue); - - // Show the image - cv::imshow("MODEL GROUND TRUTH", img_vis); - - // Show image until ESC pressed - cv::waitKey(0); - - - /* - * EXTRACT CORRRESPONDENCES - * - */ - - // refresh visualisation image - img_vis = img_in.clone(); - - // Get the MODEL INFO - std::vector list_points2d_model = model.get_points2d_in(); - std::vector list_points3d_model = model.get_points3d(); - std::vector keypoints_model = model.get_keypoints(); - cv::Mat descriptors_model = model.get_descriptors(); - - // -- Step 1: Robust matching between model descriptors and scene descriptors - - std::vector good_matches; // to obtain the 3D points of the model - std::vector keypoints_scene; // to obtain the 2D points of the scene - - //rmatcher.fastRobustMatch(frame, good_matches, keypoints_scene, descriptors_model); - rmatcher.robustMatch(img_vis, good_matches, keypoints_scene, descriptors_model); - - cv::Mat inliers_idx; - std::vector matches_inliers; - std::vector list_points2d_inliers; - std::vector list_points3d_inliers; - - // -- Step 2: Find out the 2D/3D correspondences - - std::vector list_points3d_model_match; // container for the model 3D coordinates found in the scene - std::vector list_points2d_scene_match; // container for the model 2D coordinates found in the scene - - for(unsigned int match_index = 0; match_index < good_matches.size(); ++match_index) - { - cv::Point3f point3d_model = list_points3d_model[ good_matches[match_index].trainIdx ]; // 3D point from model - cv::Point2f point2d_scene = keypoints_scene[ good_matches[match_index].queryIdx ].pt; // 2D point from the scene - list_points3d_model_match.push_back(point3d_model); // add 3D point - list_points2d_scene_match.push_back(point2d_scene); // add 2D point - } - - // Draw outliers - //draw2DPoints(img_vis, list_points2d_scene_match, red); - - /* - * COMPUTE PNP ERRORS: - * Calculation of the rotation and translation error - * - */ - - pnp_verification_epnp.estimatePose( list_points3d_model_match, list_points2d_scene_match, cv::EPNP); - pnp_verification_iter.estimatePose( list_points3d_model_match, list_points2d_scene_match, cv::ITERATIVE); - //pnp_verification_p3p.estimatePose( list_points3d_model_match, list_points2d_scene_match, cv::P3P); - //pnp_verification_dls.estimatePose( list_points3d_model_match, list_points2d_scene_match, cv::DLS); - - // Draw mesh - drawObjectMesh(img_vis, &mesh, &pnp_verification_dls, green); - drawObjectMesh(img_vis, &mesh, &pnp_verification_gt, yellow); - - cv::imshow("MODEL GROUND TRUTH", img_vis); - - cv::Mat t_true = pnp_verification_gt.get_t_matrix(); - cv::Mat t_epnp = pnp_verification_epnp.get_t_matrix(); - cv::Mat t_iter = pnp_verification_iter.get_t_matrix(); - cv::Mat t_p3p = pnp_verification_p3p.get_t_matrix(); - cv::Mat t_dls = pnp_verification_dls.get_t_matrix(); - - cv::Mat R_true = pnp_verification_gt.get_R_matrix(); - cv::Mat R_epnp = pnp_verification_epnp.get_R_matrix(); - cv::Mat R_iter = pnp_verification_iter.get_R_matrix(); - cv::Mat R_p3p = pnp_verification_p3p.get_R_matrix(); - cv::Mat R_dls = pnp_verification_dls.get_R_matrix(); - - double error_trans_epnp = get_translation_error(t_true, t_epnp); - double error_rot_epnp = get_rotation_error(R_true, R_epnp)*180/CV_PI; - - double error_trans_iter = get_translation_error(t_true, t_iter); - double error_rot_iter = get_rotation_error(R_true, R_iter)*180/CV_PI; - - double error_trans_p3p = get_translation_error(t_true, t_p3p); - double error_rot_p3p = get_rotation_error(R_true, R_p3p)*180/CV_PI; - - double error_trans_dls = get_translation_error(t_true, t_dls); - double error_rot_dls = get_rotation_error(R_true, R_dls)*180/CV_PI; - - - std::cout << std::endl << "**** EPNP ERRORS **** " << std::endl; - - std::cout << "Translation error: " << error_trans_epnp << " m." << std::endl; - std::cout << "Rotation error: " << error_rot_epnp << " deg." << std::endl; - - - std::cout << std::endl << "**** ITERATIVE ERRORS **** " << std::endl; - - std::cout << "Translation error: " << error_trans_iter << " m." << std::endl; - std::cout << "Rotation error: " << error_rot_iter << " deg." << std::endl; - - - std::cout << std::endl << "**** P3P ERRORS **** " << std::endl; - - std::cout << "Translation error: " << error_trans_p3p << " m." << std::endl; - std::cout << "Rotation error: " << error_rot_p3p << " deg." << std::endl; - - - std::cout << std::endl << "**** DLS ERRORS **** " << std::endl; - - std::cout << "Translation error: " << error_trans_dls << " m." << std::endl; - std::cout << "Rotation error: " << error_rot_dls << " deg." << std::endl; - - - // Show image until ESC pressed - cv::waitKey(0); - - // Close and Destroy Window - cv::destroyWindow("MODEL GROUND TRUTH"); - - std::cout << "GOODBYE" << std::endl; - -} diff --git a/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/src/test_pnp.cpp b/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/src/test_pnp.cpp deleted file mode 100644 index 4843d32..0000000 --- a/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/src/test_pnp.cpp +++ /dev/null @@ -1,143 +0,0 @@ -#include -#include -#include - -#include -#include - -using namespace std; -using namespace cv; - -void generate3DPointCloud(vector& points, Point3f pmin = Point3f(-1, - -1, 5), Point3f pmax = Point3f(1, 1, 10)) - { - const Point3f delta = pmax - pmin; - for (size_t i = 0; i < points.size(); i++) - { - Point3f p(float(rand()) / RAND_MAX, float(rand()) / RAND_MAX, - float(rand()) / RAND_MAX); - p.x *= delta.x; - p.y *= delta.y; - p.z *= delta.z; - p = p + pmin; - points[i] = p; - } - } - -void generateCameraMatrix(Mat& cameraMatrix, RNG& rng) -{ - const double fcMinVal = 1e-3; - const double fcMaxVal = 100; - cameraMatrix.create(3, 3, CV_64FC1); - cameraMatrix.setTo(Scalar(0)); - cameraMatrix.at(0,0) = rng.uniform(fcMinVal, fcMaxVal); - cameraMatrix.at(1,1) = rng.uniform(fcMinVal, fcMaxVal); - cameraMatrix.at(0,2) = rng.uniform(fcMinVal, fcMaxVal); - cameraMatrix.at(1,2) = rng.uniform(fcMinVal, fcMaxVal); - cameraMatrix.at(2,2) = 1; -} - -void generateDistCoeffs(Mat& distCoeffs, RNG& rng) -{ - distCoeffs = Mat::zeros(4, 1, CV_64FC1); - for (int i = 0; i < 3; i++) - distCoeffs.at(i,0) = rng.uniform(0.0, 1.0e-6); -} - -void generatePose(Mat& rvec, Mat& tvec, RNG& rng) -{ - const double minVal = 1.0e-3; - const double maxVal = 1.0; - rvec.create(3, 1, CV_64FC1); - tvec.create(3, 1, CV_64FC1); - for (int i = 0; i < 3; i++) - { - rvec.at(i,0) = rng.uniform(minVal, maxVal); - tvec.at(i,0) = rng.uniform(minVal, maxVal/10); - } -} - -void data2file(const string& path, const vector >& data) -{ - std::fstream fs; - fs.open(path.c_str(), std::fstream::in | std::fstream::out | std::fstream::app); - - for (int method = 0; method < data.size(); ++method) - { - for (int i = 0; i < data[method].size(); ++i) - { - fs << data[method][i] << " "; - } - fs << endl; - } - - fs.close(); -} - - -int main(int argc, char *argv[]) -{ - - RNG rng; - // TickMeter tm; - vector > error_trans(4), error_rot(4), comp_time(4); - - int maxpoints = 2000; - for (int npoints = 10; npoints < maxpoints+10; ++npoints) - { - // generate 3D point cloud - vector points; - points.resize(npoints); - generate3DPointCloud(points); - - // generate cameramatrix - Mat rvec, tvec; - Mat trueRvec, trueTvec; - Mat intrinsics, distCoeffs; - generateCameraMatrix(intrinsics, rng); - - // generate distorsion coefficients - generateDistCoeffs(distCoeffs, rng); - - // generate groud truth pose - generatePose(trueRvec, trueTvec, rng); - - for (int method = 0; method < 4; ++method) - { - std::vector opoints; - if (method == 2) - { - opoints = std::vector(points.begin(), points.begin()+4); - } - else - opoints = points; - - vector projectedPoints; - projectedPoints.resize(opoints.size()); - projectPoints(Mat(opoints), trueRvec, trueTvec, intrinsics, distCoeffs, projectedPoints); - - //tm.reset(); tm.start(); - - solvePnP(opoints, projectedPoints, intrinsics, distCoeffs, rvec, tvec, false, method); - - // tm.stop(); - - // double compTime = tm.getTimeMilli(); - double rvecDiff = norm(rvec-trueRvec), tvecDiff = norm(tvec-trueTvec); - - error_rot[method].push_back(rvecDiff); - error_trans[method].push_back(tvecDiff); - //comp_time[method].push_back(compTime); - - } - - //system("clear"); - cout << "Completed " << npoints+1 << "/" << maxpoints << endl; - - } - - data2file("translation_error.txt", error_trans); - data2file("rotation_error.txt", error_rot); - data2file("computation_time.txt", comp_time); - -}