Go to the documentation of this file.00001
00024 #include "rgbdtools/features/orb_detector.h"
00025
00026 namespace rgbdtools {
00027
00028 OrbDetector::OrbDetector(): FeatureDetector(),
00029 n_features_(400),
00030 threshold_(31.0)
00031 {
00032 mutex_.lock();
00033
00034 orb_detector_.reset(
00035 new cv::OrbFeatureDetector(n_features_, 1.2f, 8, threshold_, 0, 2, 0, 31));
00036
00037 mutex_.unlock();
00038 }
00039
00040 OrbDetector::~OrbDetector()
00041 {
00042
00043 }
00044
00045 void OrbDetector::findFeatures(RGBDFrame& frame, const cv::Mat& input_img)
00046 {
00047 mutex_.lock();
00048
00049 cv::Mat mask(frame.depth_img.size(), CV_8UC1);
00050 frame.depth_img.convertTo(mask, CV_8U);
00051
00052 orb_detector_->detect(input_img, frame.keypoints, mask);
00053
00054 if(compute_descriptors_)
00055 orb_descriptor_.compute(
00056 input_img, frame.keypoints, frame.descriptors);
00057
00058 mutex_.unlock();
00059 }
00060
00061 void OrbDetector::setThreshold(int threshold)
00062 {
00063 mutex_.lock();
00064
00065 threshold_ = threshold;
00066
00067 orb_detector_.reset(
00068 new cv::OrbFeatureDetector(n_features_, 1.2f, 8, threshold_, 0, 2, 0, 31));
00069
00070 mutex_.unlock();
00071 }
00072
00073 void OrbDetector::setNFeatures(int n_features)
00074 {
00075 mutex_.lock();
00076 n_features_ = n_features;
00077
00078 orb_detector_.reset(
00079 new cv::OrbFeatureDetector(n_features_, 1.2f, 8, threshold_, 0, 2, 0, 31));
00080
00081 mutex_.unlock();
00082 }
00083
00084 }