Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
0043fe6f
Commit
0043fe6f
authored
May 17, 2010
by
Maria Dimashova
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixed wrapper of sift descriptor
parent
da2fd535
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
21 additions
and
41 deletions
+21
-41
features2d.hpp
modules/features2d/include/opencv2/features2d/features2d.hpp
+14
-34
sift.cpp
modules/features2d/src/sift.cpp
+7
-7
No files found.
modules/features2d/include/opencv2/features2d/features2d.hpp
View file @
0043fe6f
...
...
@@ -171,18 +171,18 @@ CVAPI(CvSeq*) cvGetStarKeypoints( const CvArr* img, CvMemStorage* storage,
#ifdef __cplusplus
}
// CvAffinePose: defines a parameterized affine transformation of an image patch.
// An image patch is rotated on angle phi (in degrees), then scaled lambda1 times
// along horizontal and lambda2 times along vertical direction, and then rotated again
// on angle (theta - phi).
class
CV_EXPORTS
CvAffinePose
{
public
:
float
phi
;
float
theta
;
float
lambda1
;
float
lambda2
;
};
// CvAffinePose: defines a parameterized affine transformation of an image patch.
// An image patch is rotated on angle phi (in degrees), then scaled lambda1 times
// along horizontal and lambda2 times along vertical direction, and then rotated again
// on angle (theta - phi).
class
CV_EXPORTS
CvAffinePose
{
public
:
float
phi
;
float
theta
;
float
lambda1
;
float
lambda2
;
};
namespace
cv
...
...
@@ -249,7 +249,7 @@ public:
{
static
double
GET_DEFAULT_MAGNIFICATION
()
{
return
3.0
;
}
static
const
bool
DEFAULT_IS_NORMALIZE
=
true
;
static
const
int
DESCRIPTOR_SIZE
=
-
1
;
static
const
int
DESCRIPTOR_SIZE
=
128
;
DescriptorParams
()
:
magnification
(
GET_DEFAULT_MAGNIFICATION
()),
isNormalize
(
DEFAULT_IS_NORMALIZE
)
{}
DescriptorParams
(
double
_magnification
,
bool
_isNormalize
)
:
magnification
(
_magnification
),
isNormalize
(
_isNormalize
)
{}
...
...
@@ -1534,6 +1534,7 @@ void BruteForceMatcher<Distance>::matchImpl( const Mat& descriptors_1, const Mat
assert
(
mask
.
empty
()
||
(
mask
.
rows
==
descriptors_1
.
rows
&&
mask
.
cols
==
descriptors_2
.
rows
)
);
assert
(
!
descriptors_1
.
empty
()
&&
!
descriptors_2
.
empty
()
);
assert
(
descriptors_1
.
cols
==
descriptors_2
.
cols
);
assert
(
DataType
<
ValueType
>::
type
==
descriptors_1
.
type
()
);
assert
(
DataType
<
ValueType
>::
type
==
descriptors_2
.
type
()
);
...
...
@@ -1862,27 +1863,6 @@ protected:
vector
<
int
>
classIds
;
};
// A factory function for creating an arbitrary descriptor matcher at runtime
/*inline GenericDescriptorMatch* createDescriptorMatcher(std::string extractor = "SURF", std::string matcher = "BruteForce")
{
GenericDescriptorMatch* descriptors = NULL;
if(matcher.compare("BruteForce") != 0)
{
// only one matcher exists now
return 0;
}
if(extractor.compare("SURF"))
{
descriptors = new DescriptorMatchVector<features_2d::SurfDescriptorExtractor, features_2d::BruteForceMatcher<features_2d::L2<float> > >();
}
else if(extractor.compare("OneWay"))
{
descriptors = new DescriptorMatchOneWay();
}
}*/
}
#endif
/* __cplusplus */
...
...
modules/features2d/src/sift.cpp
View file @
0043fe6f
...
...
@@ -50,7 +50,7 @@
#include<iostream>
#include<limits>
#define log2(a)
log((a)) /CV_LOG2
#define log2(a)
(log((a))/CV_LOG2)
/*
* from sift.hpp of original code
...
...
@@ -2006,16 +2006,16 @@ SIFT::SIFT( const CommonParams& _commParams,
inline
KeyPoint
vlKeypointToOcv
(
const
VL
::
Sift
::
Keypoint
&
vlKeypoint
,
float
angle
)
{
return
KeyPoint
(
vlKeypoint
.
x
,
vlKeypoint
.
y
,
vlKeypoint
.
sigma
/*??????? or s */
,
angle
,
0
,
vlKeypoint
.
o
,
0
);
return
KeyPoint
(
vlKeypoint
.
x
,
vlKeypoint
.
y
,
vlKeypoint
.
sigma
,
angle
,
0
,
vlKeypoint
.
o
,
0
);
}
inline
void
ocvKeypointToVl
(
const
KeyPoint
&
ocvKeypoint
,
const
VL
::
Sift
&
vlSift
,
VL
::
Sift
::
Keypoint
&
vlKeypoint
,
float
&
angle
)
VL
::
Sift
::
Keypoint
&
vlKeypoint
)
{
vlKeypoint
=
vlSift
.
getKeypoint
(
ocvKeypoint
.
pt
.
x
,
ocvKeypoint
.
pt
.
y
,
ocvKeypoint
.
size
);
angle
=
ocvKeypoint
.
angle
;
}
// detectors
void
SIFT
::
operator
()(
const
Mat
&
img
,
const
Mat
&
mask
,
vector
<
KeyPoint
>&
keypoints
)
const
{
...
...
@@ -2063,6 +2063,7 @@ void SIFT::operator()(const Mat& img, const Mat& mask,
}
}
// descriptors
void
SIFT
::
operator
()(
const
Mat
&
img
,
const
Mat
&
mask
,
vector
<
KeyPoint
>&
keypoints
,
Mat
&
descriptors
,
...
...
@@ -2091,8 +2092,7 @@ void SIFT::operator()(const Mat& img, const Mat& mask,
for
(
int
pi
=
0
;
iter
!=
keypoints
.
end
();
++
iter
,
pi
++
)
{
VL
::
Sift
::
Keypoint
vlkpt
;
float
angle
;
ocvKeypointToVl
(
*
iter
,
vlsift
,
vlkpt
,
angle
);
vlsift
.
computeKeypointDescriptor
((
VL
::
float_t
*
)
descriptors
.
ptr
(
pi
),
vlkpt
,
angle
);
ocvKeypointToVl
(
*
iter
,
vlsift
,
vlkpt
);
vlsift
.
computeKeypointDescriptor
((
VL
::
float_t
*
)
descriptors
.
ptr
(
pi
),
vlkpt
,
iter
->
angle
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment