From 3e0a65bec9c670188fea3f75fe6b257def808e9f Mon Sep 17 00:00:00 2001 From: Kun Date: Sun, 31 Jul 2022 11:29:01 +0900 Subject: [PATCH] feat: Add features and keypoints --- src/mvgkit/CMakeLists.txt | 1 + src/mvgkit/features/CMakeLists.txt | 7 +++++++ src/mvgkit/features/features.cc | 7 +++++++ src/mvgkit/features/features.h | 22 ++++++++++++++++++++++ src/mvgkit/features/keypoint.cc | 1 + src/mvgkit/features/keypoint.h | 26 ++++++++++++++++++++++++++ src/mvgkit/features/matcher.cc | 0 src/mvgkit/features/matcher.h | 0 src/mvgkit/features/orb.cc | 7 +++++++ src/mvgkit/features/orb.h | 16 ++++++++++++++++ 10 files changed, 87 insertions(+) create mode 100644 src/mvgkit/features/CMakeLists.txt create mode 100644 src/mvgkit/features/features.cc create mode 100644 src/mvgkit/features/features.h create mode 100644 src/mvgkit/features/keypoint.cc create mode 100644 src/mvgkit/features/keypoint.h create mode 100644 src/mvgkit/features/matcher.cc create mode 100644 src/mvgkit/features/matcher.h create mode 100644 src/mvgkit/features/orb.cc create mode 100644 src/mvgkit/features/orb.h diff --git a/src/mvgkit/CMakeLists.txt b/src/mvgkit/CMakeLists.txt index abe0bfa..4a14daa 100644 --- a/src/mvgkit/CMakeLists.txt +++ b/src/mvgkit/CMakeLists.txt @@ -1,2 +1,3 @@ add_subdirectory(common) add_subdirectory(estimation) +add_subdirectory(features) diff --git a/src/mvgkit/features/CMakeLists.txt b/src/mvgkit/features/CMakeLists.txt new file mode 100644 index 0000000..94db76c --- /dev/null +++ b/src/mvgkit/features/CMakeLists.txt @@ -0,0 +1,7 @@ +file(GLOB MVGKIT_FEATURES_HEADER_FILES *.h) +file(GLOB MVGKIT_FEATURES_SOURCE_FILES *.cc) + +add_library(mvgkit_features SHARED ${MVGKIT_FEATURES_HEADER_FILES} + ${MVGKIT_FEATURES_SOURCE_FILES}) + +target_link_libraries(mvgkit_features ${OPENCV2_LIBRARIES} Eigen3::Eigen) diff --git a/src/mvgkit/features/features.cc b/src/mvgkit/features/features.cc new file mode 100644 index 0000000..daa08b4 --- /dev/null +++ b/src/mvgkit/features/features.cc @@ -0,0 +1,7 @@ +#include "features.h" + +namespace mvgkit { +namespace features { + +} +} diff --git a/src/mvgkit/features/features.h b/src/mvgkit/features/features.h new file mode 100644 index 0000000..68920f5 --- /dev/null +++ b/src/mvgkit/features/features.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include +#include + +namespace mvgkit { +namespace features { + +class KeyPoint; + +class ImageFeature +{ +private: + uint32_t _id; + cv::KeyPoint _cvKp; + cv::Mat _cvDescriptor; + std::weak_ptr _pKeyPoint; +}; + +} // namespace features +} // namespace mvgkit diff --git a/src/mvgkit/features/keypoint.cc b/src/mvgkit/features/keypoint.cc new file mode 100644 index 0000000..8fa8f58 --- /dev/null +++ b/src/mvgkit/features/keypoint.cc @@ -0,0 +1 @@ +#include "keypoint.h" diff --git a/src/mvgkit/features/keypoint.h b/src/mvgkit/features/keypoint.h new file mode 100644 index 0000000..ba7b3a7 --- /dev/null +++ b/src/mvgkit/features/keypoint.h @@ -0,0 +1,26 @@ +#include "../common/eigen.h" +#include "features.h" +#include + +namespace mvgkit { +namespace features { + +class KeyPoint +{ +public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + const std::vector& GetImageFeatures() const { return _imageFeatures; } + const Eigen::Vector3d& GetPosition() const { return _position; } + const Eigen::Vector3i& GetColor() const { return _color; } + const uint32_t GetId() const { return _id; } + +private: + uint32_t _id; ///< Unique ID of this point. + Eigen::Vector3d _position; ///< Estimated 3D position of this point. + Eigen::Vector3i _color; ///< RGB color of the this point. + std::vector _imageFeatures; ///< sequence of observation of this 3D point. +}; + +} // namespace features +} // namespace mvgkit diff --git a/src/mvgkit/features/matcher.cc b/src/mvgkit/features/matcher.cc new file mode 100644 index 0000000..e69de29 diff --git a/src/mvgkit/features/matcher.h b/src/mvgkit/features/matcher.h new file mode 100644 index 0000000..e69de29 diff --git a/src/mvgkit/features/orb.cc b/src/mvgkit/features/orb.cc new file mode 100644 index 0000000..4392faa --- /dev/null +++ b/src/mvgkit/features/orb.cc @@ -0,0 +1,7 @@ +#include "orb.h" + +namespace mvgkit { +namespace features { + +} // namespace features +} // namespace mvgkit diff --git a/src/mvgkit/features/orb.h b/src/mvgkit/features/orb.h new file mode 100644 index 0000000..469545d --- /dev/null +++ b/src/mvgkit/features/orb.h @@ -0,0 +1,16 @@ +#pragma once + +#include + +namespace mvgkit { +namespace features { + +class ORB +{ +public: + ORB(); + virtual ~ORB(); +}; + +} // namespace features +} // namespace mvgkit