43 #include <visp/vpConfig.h>
45 #if (VISP_HAVE_OPENCV_VERSION >= 0x020000) // Require opencv >= 2.0.0
47 #include <visp/vpFernClassifier.h>
48 #include <visp/vpImageTools.h>
49 #include <visp/vpImageConvert.h>
50 #include <visp/vpColor.h>
51 #include <visp/vpDisplay.h>
59 ldetector(), fernClassifier(), gen(0, 256, 5, true, 0.6, 1.5, -CV_PI/2, CV_PI/2, -CV_PI/2, CV_PI/2),
60 hasLearn(false), threshold(20), nbView(2000), dist(2), nbClassfier(100), ClassifierSize(11),
61 nbOctave(2), patchSize(32), radius(7), nbPoints(200), blurImage(true), radiusBlur(7),
62 sigmaBlur(1), nbMinPoint(10), curIplImg(NULL), objKeypoints(), modelROI_Ref(), modelROI(),
63 modelPoints(), imgKeypoints(), refPt(), curPt()
79 ldetector(), fernClassifier(), gen(0, 256, 5, true, 0.6, 1.5, -CV_PI/2, CV_PI/2, -CV_PI/2, CV_PI/2),
80 hasLearn(false), threshold(20), nbView(2000), dist(2), nbClassfier(100), ClassifierSize(11),
81 nbOctave(2), patchSize(32), radius(7), nbPoints(200), blurImage(true), radiusBlur(7),
82 sigmaBlur(1), nbMinPoint(10), curIplImg(NULL), objKeypoints(), modelROI_Ref(), modelROI(),
83 modelPoints(), imgKeypoints(), refPt(), curPt()
85 this->
load(_dataFile, _objectName);
150 std::vector<cv::Mat> objpyr;
151 cv::buildPyramid(obj, objpyr, d.nOctaves-1);
159 modelROI = cv::Rect(0, 0, objpyr[0].cols, objpyr[0].rows);
164 cv::FernClassifier::COMPRESSION_NONE,
gen);
168 for (
unsigned int i = 0; i <
modelPoints.size(); i += 1){
224 const unsigned int _height,
const unsigned int _width)
228 vpTRACE(
"Bad size for the subimage");
230 "Bad size for the subimage"));
235 (
unsigned int)_iP.
get_i(),
236 (
unsigned int)_iP.
get_j(),
237 _height, _width, subImage);
277 (
unsigned int)_rectangle.
getWidth()));
308 std::vector<cv::Mat> imgPyr;
309 cv::buildPyramid(img, imgPyr,
ldetector.nOctaves-1);
316 std::vector<int> bestMatches(m, -1);
317 std::vector<float> maxLogProb(m, -FLT_MAX);
318 std::vector<float> signature;
319 unsigned int totalMatch = 0;
326 for(
unsigned int i = 0; i < n; i++ ){
328 kpt.pt.x /= (float)(1 << kpt.octave);
329 kpt.pt.y /= (float)(1 << kpt.octave);
330 int k =
fernClassifier(imgPyr[(
unsigned int)kpt.octave], kpt.pt, signature);
331 if( k >= 0 && (bestMatches[(
unsigned int)k] < 0 || signature[(
unsigned int)k] > maxLogProb[(
unsigned int)k]) ){
332 maxLogProb[(
unsigned int)k] = signature[(
unsigned int)k];
333 bestMatches[(
unsigned int)k] = (
int)i;
346 for(
unsigned int i = 0; i < m; i++ ){
347 if( bestMatches[i] >= 0 ){
374 const unsigned int _height,
const unsigned int _width)
378 vpTRACE(
"Bad size for the subimage");
380 "Bad size for the subimage"));
386 (
unsigned int)_iP.
get_i(),
387 (
unsigned int)_iP.
get_j(),
388 _height, _width, subImage);
413 (
unsigned int)_rectangle.
getWidth()));
477 std::cout <<
" > Load data for the planar object detector..." << std::endl;
480 cv::FileStorage fs(_dataFile, cv::FileStorage::READ);
481 cv::FileNode node = fs.getFirstTopLevelNode();
483 cv::FileNodeIterator it = node[
"model-roi"].begin(), it_end;
489 const cv::FileNode node_ = node[
"model-points"];
508 cv::FileStorage fs(_dataFile, cv::FileStorage::WRITE);
510 cv::WriteStructContext ws(fs, _objectName, CV_NODE_MAP);
513 cv::WriteStructContext wsroi(fs,
"model-roi", CV_NODE_SEQ + CV_NODE_FLOW);
558 std::cout <<
"!> conversion failed" << std::endl;
class that defines what is a Keypoint. This class provides all the basic elements to implement classe...
virtual ~vpFernClassifier()
std::vector< cv::KeyPoint > imgKeypoints
the vector containing the points in the current image.
bool blurImage
Flag to specify whether the reference image have to be blurred or not in order to improve the recogni...
unsigned int getWidth() const
bool hasLearn
Flag to indicate whether the classifier has been trained or not.
static void convert(const vpImage< unsigned char > &src, vpImage< vpRGBa > &dest)
virtual unsigned int matchPoint(const vpImage< unsigned char > &I)
Type * bitmap
points toward the bitmap
Class to define colors available for display functionnalities.
int nbClassfier
Number of classifier.
int nbView
Number of view to generate for the training.
cv::Rect modelROI_Ref
the ROI in the reference image.
void setImage(const vpImage< unsigned char > &_I)
cv::PatchGenerator gen
The patch generator (OpenCV format).
unsigned int nbMinPoint
Number of minimum point below which the homography is not estimated (must be at least four) ...
error that can be emited by ViSP classes.
cv::LDetector ldetector
The points of interest detector.
static const vpColor green
int radius
Radius for the detector.
int nbPoints
Maximal number of points.
std::vector< cv::Point2f > curPt
virtual unsigned int buildReference(const vpImage< unsigned char > &I)
int patchSize
Size of the patch.
void set_i(const double ii)
int sigmaBlur
Sigma of the kernel used to blur the image.
int nbOctave
Number of octave for the multi scale.
bool _reference_computed
flag to indicate if the reference has been built.
virtual void displayCross(const vpImagePoint &ip, unsigned int size, const vpColor &color, unsigned int thickness=1)=0
std::vector< vpImagePoint > referenceImagePointsList
void record(const std::string &_objectName, const std::string &_dataFile)
record the Ferns classifier in the text file
std::vector< cv::KeyPoint > objKeypoints
keypoints detected in the reference image.
void set_j(const double jj)
int threshold
Threshold to accept or reject points (usually around 20)
cv::FernClassifier fernClassifier
The Fern classifier.
int dist
Minimal distance between two points.
std::vector< unsigned int > matchedReferencePoints
std::vector< cv::Point2f > refPt
vector in the OpenCV format to be used by the detector.
unsigned int getHeight() const
Defines a rectangle in the plane.
int radiusBlur
Radius of the kernel used to blur the image.
std::vector< vpImagePoint > currentImagePointsList
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
IplImage * curIplImg
The current image in the OpenCV format.
void load(const std::string &_dataFile, const std::string &)
load the Fern classifier
virtual void display(const vpImage< unsigned char > &Iref, const vpImage< unsigned char > &Icurrent, unsigned int size=3)
std::vector< cv::KeyPoint > modelPoints
the vector containing the points in the model.
int ClassifierSize
Size of the classifier.
cv::Rect modelROI
the ROI for the reference image.