Skip to content
This repository was archived by the owner on Jul 20, 2023. It is now read-only.

Commit 9bad553

Browse files
author
BCOM\nduong
committed
add SolARDescriptorsExtratorFromImage component
1 parent bac535b commit 9bad553

File tree

5 files changed

+162
-3
lines changed

5 files changed

+162
-3
lines changed

SolARModuleOpenCV.pri

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
HEADERS += interfaces/SolAR2D3DcorrespondencesFinderOpencv.h \
2-
$$PWD/interfaces/SolARImageFilterWallisOpencv.h \
2+
interfaces/SolARImageFilterWallisOpencv.h \
33
interfaces/SolAR2DOverlayOpencv.h \
44
interfaces/SolAR3DOverlayBoxOpencv.h \
55
interfaces/SolARBaseCameraOpencv.h \
@@ -18,6 +18,7 @@ HEADERS += interfaces/SolAR2D3DcorrespondencesFinderOpencv.h \
1818
interfaces/SolARDescriptorsExtractorORBOpencv.h \
1919
interfaces/SolARDescriptorsExtractorSBPatternOpencv.h \
2020
interfaces/SolARDescriptorsExtractorSIFTOpencv.h \
21+
interfaces/SolARDescriptorsExtractorFromImageOpencv.h \
2122
interfaces/SolARDeviceDataLoader.h \
2223
interfaces/SolARFiducialMarkerLoaderOpencv.h \
2324
interfaces/SolARFundamentalMatrixEstimationOpencv.h \
@@ -49,7 +50,7 @@ HEADERS += interfaces/SolAR2D3DcorrespondencesFinderOpencv.h \
4950
interfaces/SolARPoseEstimationSACPnpOpencv.h \
5051
interfaces/SolARPoseFinderFrom2D2DOpencv.h \
5152
interfaces/SolARProjectOpencv.h \
52-
interfaces/SolARStereo2DPointsRectificationOpencv.h \
53+
interfaces/SolARStereo2DPointsRectificationOpencv.h \
5354
interfaces/SolARStereoCalibrationOpencv.h \
5455
interfaces/SolARStereoDescriptorMatcherOpencv.h \
5556
interfaces/SolARStereoImageRectificationOpencv.h \
@@ -90,6 +91,7 @@ SOURCES += src/AKAZE2/akaze.cpp \
9091
src/SolARDescriptorsExtractorORBOpencv.cpp \
9192
src/SolARDescriptorsExtractorSBPatternOpencv.cpp \
9293
src/SolARDescriptorsExtractorSIFTOpencv.cpp \
94+
src/SolARDescriptorsExtractorFromImageOpencv.cpp \
9395
src/SolARDeviceDataLoader.cpp \
9496
src/SolARFiducialMarkerLoaderOpencv.cpp \
9597
src/SolARFundamentalMatrixEstimationOpencv.cpp \
@@ -119,7 +121,7 @@ SOURCES += src/AKAZE2/akaze.cpp \
119121
src/SolARPoseEstimationSACPnpOpencv.cpp \
120122
src/SolARPoseFinderFrom2D2DOpencv.cpp \
121123
src/SolARProjectOpencv.cpp \
122-
src/SolARStereo2DPointsRectificationOpencv.cpp \
124+
src/SolARStereo2DPointsRectificationOpencv.cpp \
123125
src/SolARStereoCalibrationOpencv.cpp \
124126
src/SolARStereoDescriptorMatcherOpencv.cpp \
125127
src/SolARStereoImageRectificationOpencv.cpp \
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/**
2+
* @copyright Copyright (c) 2017 B-com http://www.b-com.com/
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#ifndef SOLARDESCRIPTORSEXTRACTORFROMIMAGEOPENCV_H
18+
#define SOLARDESCRIPTORSEXTRACTORFROMIMAGEOPENCV_H
19+
#include "api/features/IDescriptorsExtractorFromImage.h"
20+
#include "SolAROpencvAPI.h"
21+
#include "xpcf/component/ConfigurableBase.h"
22+
#include "api/features/IKeypointDetector.h"
23+
#include "api/features/IDescriptorsExtractor.h"
24+
25+
namespace SolAR {
26+
namespace MODULES {
27+
namespace OPENCV {
28+
29+
/**
30+
* @class SolARDescriptorsExtractorFromImageOpencv
31+
* @brief <B>Detect keypoints and compute the descriptors from an image.</B>
32+
* <TT>UUID: cf2721f2-0dc9-4442-ad1e-90c0ab12b0ff</TT>
33+
*
34+
* @SolARComponentInjectablesBegin
35+
* @SolARComponentInjectable{SolAR::api::features::IKeypointDetector}
36+
* @SolARComponentInjectable{SolAR::api::features::IDescriptorsExtractor}
37+
* @SolARComponentInjectablesEnd
38+
*
39+
*/
40+
41+
class SOLAROPENCV_EXPORT_API SolARDescriptorsExtractorFromImageOpencv : public org::bcom::xpcf::ConfigurableBase,
42+
public api::features::IDescriptorsExtractorFromImage
43+
{
44+
public:
45+
///@brief SolARDescriptorsExtractorFromImageOpencv constructor;
46+
SolARDescriptorsExtractorFromImageOpencv();
47+
///@brief SolARDescriptorsExtractorFromImageOpencv destructor;
48+
~SolARDescriptorsExtractorFromImageOpencv();
49+
50+
org::bcom::xpcf::XPCFErrorCode onConfigured() override final;
51+
52+
/// @brief getType
53+
/// @return a string describing the type of descriptor used during extraction.
54+
std::string getTypeString() override;
55+
56+
/// @brief detect keypoints and compute the descriptors.
57+
/// @param[in] image image on which the keypoint and their descriptor will be detected and extracted.
58+
/// @param[out] keypoints The keypoints detected in the input image.
59+
/// @param[out] descriptors The descriptors of keypoints of the input image.
60+
/// @return FrameworkReturnCode::_SUCCESS_ if images are well matched, else FrameworkReturnCode::_ERROR
61+
FrameworkReturnCode extract(const SRef<SolAR::datastructure::Image> image,
62+
std::vector<SolAR::datastructure::Keypoint> &keypoints,
63+
SRef<SolAR::datastructure::DescriptorBuffer> & descriptors) override;
64+
65+
void unloadComponent () override final;
66+
67+
private:
68+
SRef<SolAR::api::features::IKeypointDetector> m_detector;
69+
SRef<SolAR::api::features::IDescriptorsExtractor> m_extractor;
70+
};
71+
72+
}
73+
}
74+
}
75+
76+
77+
#endif // SOLARDESCRIPTORSEXTRACTORFROMIMAGEOPENCV_H

interfaces/SolARModuleOpencv_traits.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class SolARDescriptorsExtractorAKAZE2Opencv;
4444
class SolARDescriptorsExtractorAKAZEOpencv;
4545
class SolARDescriptorsExtractorORBOpencv;
4646
class SolARDescriptorsExtractorSBPatternOpencv;
47+
class SolARDescriptorsExtractorFromImageOpencv;
4748
class SolARFiducialMarkerLoaderOpencv;
4849
class SolARFundamentalMatrixEstimationOpencv;
4950
class SolARGeometricMatchesFilterOpencv;
@@ -174,6 +175,11 @@ XPCF_DEFINE_COMPONENT_TRAITS(SolAR::MODULES::OPENCV::SolARDescriptorsExtractorSB
174175
"SolARDescriptorsExtractorSBPatternOpencv",
175176
"Extracts the descriptor corresponding to a squared binary marker pattern.")
176177

178+
XPCF_DEFINE_COMPONENT_TRAITS(SolAR::MODULES::OPENCV::SolARDescriptorsExtractorFromImageOpencv,
179+
"cf2721f2-0dc9-4442-ad1e-90c0ab12b0ff",
180+
"SolARDescriptorsExtractorFromImageOpencv",
181+
"Detect keypoints and compute the descriptors from an image.")
182+
177183
XPCF_DEFINE_COMPONENT_TRAITS(SolAR::MODULES::OPENCV::SolARFiducialMarkerLoaderOpencv,
178184
"d0116ed2-45d7-455d-8011-57959da1b0fa",
179185
"SolARFiducialMarkerLoaderOpencv",
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/**
2+
* @copyright Copyright (c) 2017 B-com http://www.b-com.com/
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
18+
#include "SolARDescriptorsExtractorFromImageOpencv.h"
19+
#include "core/Log.h"
20+
21+
XPCF_DEFINE_FACTORY_CREATE_INSTANCE(SolAR::MODULES::OPENCV::SolARDescriptorsExtractorFromImageOpencv);
22+
23+
namespace xpcf = org::bcom::xpcf;
24+
25+
namespace SolAR {
26+
using namespace datastructure;
27+
namespace MODULES {
28+
namespace OPENCV {
29+
30+
SolARDescriptorsExtractorFromImageOpencv::SolARDescriptorsExtractorFromImageOpencv():ConfigurableBase(xpcf::toUUID<SolARDescriptorsExtractorFromImageOpencv>())
31+
{
32+
addInterface<api::features::IDescriptorsExtractorFromImage>(this);
33+
declareInjectable<api::features::IKeypointDetector>(m_detector);
34+
declareInjectable<api::features::IDescriptorsExtractor>(m_extractor);
35+
LOG_DEBUG(" SolARDescriptorsExtractorFromImageOpencv constructor");
36+
}
37+
38+
SolARDescriptorsExtractorFromImageOpencv::~SolARDescriptorsExtractorFromImageOpencv(){
39+
LOG_DEBUG(" SolARDescriptorsExtractorFromImageOpencv deconstructor");
40+
}
41+
42+
xpcf::XPCFErrorCode SolARDescriptorsExtractorFromImageOpencv::onConfigured()
43+
{
44+
return xpcf::XPCFErrorCode::_SUCCESS;
45+
}
46+
47+
std::string SolARDescriptorsExtractorFromImageOpencv::getTypeString()
48+
{
49+
return m_extractor->getTypeString();
50+
}
51+
52+
FrameworkReturnCode SolARDescriptorsExtractorFromImageOpencv::extract(const SRef<datastructure::Image> image,
53+
std::vector<datastructure::Keypoint> & keypoints,
54+
SRef<SolAR::datastructure::DescriptorBuffer> & descriptors )
55+
{
56+
m_detector->detect(image, keypoints);
57+
if (keypoints.size() == 0){
58+
LOG_WARNING("No keypoints detected");
59+
return FrameworkReturnCode::_ERROR_;
60+
}
61+
m_extractor->extract(image, keypoints, descriptors);
62+
return FrameworkReturnCode::_SUCCESS;
63+
}
64+
65+
66+
}
67+
}
68+
}

src/SolARModuleOpencv.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "SolARDescriptorsExtractorAKAZE2Opencv.h"
3333
#include "SolARDescriptorsExtractorORBOpencv.h"
3434
#include "SolARDescriptorsExtractorSBPatternOpencv.h"
35+
#include "SolARDescriptorsExtractorFromImageOpencv.h"
3536
#include "SolARFiducialMarkerLoaderOpencv.h"
3637
#include "SolARFundamentalMatrixEstimationOpencv.h"
3738
#include "SolARGeometricMatchesFilterOpencv.h"
@@ -142,6 +143,10 @@ extern "C" XPCF_MODULEHOOKS_API xpcf::XPCFErrorCode XPCF_getComponent(const boos
142143
errCode = xpcf::tryCreateComponent<SolAR::MODULES::OPENCV::SolARDescriptorsExtractorSBPatternOpencv>(componentUUID,interfaceRef);
143144
}
144145
if (errCode != xpcf::XPCFErrorCode::_SUCCESS)
146+
{
147+
errCode = xpcf::tryCreateComponent<SolAR::MODULES::OPENCV::SolARDescriptorsExtractorFromImageOpencv>(componentUUID,interfaceRef);
148+
}
149+
if (errCode != xpcf::XPCFErrorCode::_SUCCESS)
145150
{
146151
errCode = xpcf::tryCreateComponent<SolAR::MODULES::OPENCV::SolARFiducialMarkerLoaderOpencv>(componentUUID,interfaceRef);
147152
}
@@ -321,6 +326,7 @@ XPCF_ADD_COMPONENT(SolAR::MODULES::OPENCV::SolARDescriptorsExtractorAKAZE2Opencv
321326
XPCF_ADD_COMPONENT(SolAR::MODULES::OPENCV::SolARDescriptorsExtractorAKAZEOpencv)
322327
XPCF_ADD_COMPONENT(SolAR::MODULES::OPENCV::SolARDescriptorsExtractorORBOpencv)
323328
XPCF_ADD_COMPONENT(SolAR::MODULES::OPENCV::SolARDescriptorsExtractorSBPatternOpencv)
329+
XPCF_ADD_COMPONENT(SolAR::MODULES::OPENCV::SolARDescriptorsExtractorFromImageOpencv)
324330
XPCF_ADD_COMPONENT(SolAR::MODULES::OPENCV::SolARFiducialMarkerLoaderOpencv)
325331
XPCF_ADD_COMPONENT(SolAR::MODULES::OPENCV::SolARFundamentalMatrixEstimationOpencv)
326332
XPCF_ADD_COMPONENT(SolAR::MODULES::OPENCV::SolARGeometricMatchesFilterOpencv)

0 commit comments

Comments
 (0)