/** * @brief This function calculates a D-LDB descriptor for the stereo pair * @param img_left_d Left image * @param img_right_d Right image * @param kpts Processed keypoints * @param descriptor Obtained descriptor * */ Mat D_Ldb::compute_D_Ldb(Mat &img_left_d, Mat &img_right_d, vector<KeyPoint> &kpts, Mat &descriptor){ Mat descriptorDisp; Mat disparity; LDB ldb; // Process the stereo pair and D-LDB undistort_rectify_init(img_left_d.size()); undistort_rectify_images(img_left_d,img_right_d); depth_image_to_cv_image(); get_color_disparity_map().copyTo(disparity); cvtColor(disparity,disparity,COLOR_RGB2GRAY); //imshow("Disparity", disparity); //waitKey(); ldb.compute(img_left_d,kpts,descriptor); ldb.compute(disparity,kpts,descriptorDisp); cv::hconcat(descriptor,descriptorDisp,descriptor); return descriptor; }
void DetectDescribe::performDescription(const cv::Mat& image, std::vector<cv::KeyPoint> &v, cv::Mat & descriptors, const int _descriptorType) { DescriptorExtractor *extractor; LDB *ldb; cv::SiftDescriptorExtractor extractorSift; switch (_descriptorType) { case 0: ldb = new LDB(); break; case 1: // SIFT is created statically break; case 2: extractor = new cv::SurfDescriptorExtractor(); break; case 3: extractor = new cv::ORB(); break; case 4: extractor = new cv::BriefDescriptorExtractor(); break; case 5: extractor = new cv::BRISK(); break; case 6: extractor = new cv::FREAK(); break; default: extractor = new cv::ORB(); } if (_descriptorType == 0) { cv::Mat dst; cv::cvtColor(image, dst, CV_BGR2GRAY); ldb->compute(dst, v, descriptors); delete ldb; } else if (_descriptorType == 1) { extractorSift.compute(image, v, descriptors); } else { extractor->compute(image, v, descriptors); delete extractor; } }