Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/shape/src/scd_def.hpp
16337 views
1
/*M///////////////////////////////////////////////////////////////////////////////////////
2
//
3
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4
//
5
// By downloading, copying, installing or using the software you agree to this license.
6
// If you do not agree to this license, do not download, install,
7
// copy or use the software.
8
//
9
//
10
// License Agreement
11
// For Open Source Computer Vision Library
12
//
13
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
14
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
15
// Third party copyrights are property of their respective owners.
16
//
17
// Redistribution and use in source and binary forms, with or without modification,
18
// are permitted provided that the following conditions are met:
19
//
20
// * Redistribution's of source code must retain the above copyright notice,
21
// this list of conditions and the following disclaimer.
22
//
23
// * Redistribution's in binary form must reproduce the above copyright notice,
24
// this list of conditions and the following disclaimer in the documentation
25
// and/or other materials provided with the distribution.
26
//
27
// * The name of the copyright holders may not be used to endorse or promote products
28
// derived from this software without specific prior written permission.
29
//
30
// This software is provided by the copyright holders and contributors "as is" and
31
// any express or implied warranties, including, but not limited to, the implied
32
// warranties of merchantability and fitness for a particular purpose are disclaimed.
33
// In no event shall the Intel Corporation or contributors be liable for any direct,
34
// indirect, incidental, special, exemplary, or consequential damages
35
// (including, but not limited to, procurement of substitute goods or services;
36
// loss of use, data, or profits; or business interruption) however caused
37
// and on any theory of liability, whether in contract, strict liability,
38
// or tort (including negligence or otherwise) arising in any way out of
39
// the use of this software, even if advised of the possibility of such damage.
40
//
41
//M*/
42
43
#include <stdlib.h>
44
#include <math.h>
45
#include <vector>
46
47
namespace cv
48
{
49
/*
50
* ShapeContextDescriptor class
51
*/
52
class SCD
53
{
54
public:
55
//! the full constructor taking all the necessary parameters
56
explicit SCD(int _nAngularBins=12, int _nRadialBins=5,
57
double _innerRadius=0.1, double _outerRadius=1, bool _rotationInvariant=false)
58
{
59
setAngularBins(_nAngularBins);
60
setRadialBins(_nRadialBins);
61
setInnerRadius(_innerRadius);
62
setOuterRadius(_outerRadius);
63
setRotationInvariant(_rotationInvariant);
64
meanDistance = 0;
65
}
66
67
void extractSCD(cv::Mat& contour, cv::Mat& descriptors,
68
const std::vector<int>& queryInliers=std::vector<int>(),
69
const float _meanDistance=-1);
70
71
int descriptorSize() {return nAngularBins*nRadialBins;}
72
void setAngularBins(int angularBins) { nAngularBins=angularBins; }
73
void setRadialBins(int radialBins) { nRadialBins=radialBins; }
74
void setInnerRadius(double _innerRadius) { innerRadius=_innerRadius; }
75
void setOuterRadius(double _outerRadius) { outerRadius=_outerRadius; }
76
void setRotationInvariant(bool _rotationInvariant) { rotationInvariant=_rotationInvariant; }
77
int getAngularBins() const { return nAngularBins; }
78
int getRadialBins() const { return nRadialBins; }
79
double getInnerRadius() const { return innerRadius; }
80
double getOuterRadius() const { return outerRadius; }
81
bool getRotationInvariant() const { return rotationInvariant; }
82
float getMeanDistance() const { return meanDistance; }
83
84
private:
85
int nAngularBins;
86
int nRadialBins;
87
double innerRadius;
88
double outerRadius;
89
bool rotationInvariant;
90
float meanDistance;
91
92
protected:
93
void logarithmicSpaces(std::vector<double>& vecSpaces) const;
94
void angularSpaces(std::vector<double>& vecSpaces) const;
95
96
void buildNormalizedDistanceMatrix(cv::Mat& contour,
97
cv::Mat& disMatrix, const std::vector<int> &queryInliers,
98
const float _meanDistance=-1);
99
100
void buildAngleMatrix(cv::Mat& contour,
101
cv::Mat& angleMatrix) const;
102
};
103
104
/*
105
* Matcher
106
*/
107
class SCDMatcher
108
{
109
public:
110
// the full constructor
111
SCDMatcher() : minMatchCost(0)
112
{
113
}
114
115
// the matcher function using Hungarian method
116
void matchDescriptors(cv::Mat& descriptors1, cv::Mat& descriptors2, std::vector<cv::DMatch>& matches, cv::Ptr<cv::HistogramCostExtractor>& comparer,
117
std::vector<int>& inliers1, std::vector<int> &inliers2);
118
119
// matching cost
120
float getMatchingCost() const {return minMatchCost;}
121
122
private:
123
float minMatchCost;
124
protected:
125
void buildCostMatrix(const cv::Mat& descriptors1, const cv::Mat& descriptors2,
126
cv::Mat& costMatrix, cv::Ptr<cv::HistogramCostExtractor>& comparer) const;
127
void hungarian(cv::Mat& costMatrix, std::vector<cv::DMatch>& outMatches, std::vector<int> &inliers1,
128
std::vector<int> &inliers2, int sizeScd1=0, int sizeScd2=0);
129
130
};
131
132
}
133
134