10 #include <aliceVision/types.hpp>
11 #include <aliceVision/feature/Regions.hpp>
12 #include <aliceVision/feature/ImageDescriber.hpp>
13 #include <aliceVision/feature/imageDescriberCommon.hpp>
21 class MapRegionsPerDesc :
public std::map<feature::EImageDescriberType, std::unique_ptr<feature::Regions>>
24 std::size_t getNbAllRegions()
const
27 for (
const auto& it : *
this)
28 nb += it.second->RegionCount();
33 T getRegions(feature::EImageDescriberType descType)
35 return dynamic_cast<T&
>(*this->at(descType));
39 const T getRegions(feature::EImageDescriberType descType)
const
41 return dynamic_cast<const T&
>(*this->at(descType));
45 using MapRegionsPerView = std::map<IndexT, MapRegionsPerDesc>;
47 template<
class MapFeatOrRegionsPerDesc>
48 inline std::vector<feature::EImageDescriberType> getCommonDescTypes(
const MapFeatOrRegionsPerDesc& regionsA,
const MapFeatOrRegionsPerDesc& regionsB)
50 std::vector<feature::EImageDescriberType> descTypes;
51 for (
const auto& regionsPerDesc : regionsA)
53 const auto desc = regionsPerDesc.first;
54 if (regionsB.count(desc) > 0)
56 descTypes.push_back(desc);
68 MapRegionsPerView& getData() {
return _data; }
70 const MapRegionsPerView& getData()
const {
return _data; }
73 const feature::Regions& getFirstViewRegions(feature::EImageDescriberType descType)
const
75 assert(descType != feature::EImageDescriberType::UNINITIALIZED);
76 return *(_data.begin()->second.at(descType).get());
82 const feature::Regions& getRegions(IndexT viewId, feature::EImageDescriberType descType)
const
84 assert(descType != feature::EImageDescriberType::UNINITIALIZED);
85 return *(_data.at(viewId).at(descType).get());
88 const MapRegionsPerDesc& getAllRegions(IndexT viewId)
const {
return _data.at(viewId); }
90 bool viewExist(IndexT viewId)
const {
return _data.count(viewId) > 0; }
92 bool isEmpty()
const {
return _data.empty(); }
94 void addRegions(IndexT viewId, feature::EImageDescriberType descType,
feature::Regions* regionsPtr)
96 assert(descType != feature::EImageDescriberType::UNINITIALIZED);
97 _data[viewId][descType].reset(regionsPtr);
100 std::vector<feature::EImageDescriberType> getCommonDescTypes(
const Pair& pair)
const
102 const auto& regionsA = getAllRegions(pair.first);
103 const auto& regionsB = getAllRegions(pair.second);
104 return aliceVision::feature::getCommonDescTypes(regionsA, regionsB);
107 void clearDescriptors()
109 for (
auto& itA : _data)
111 for (
auto& itB : itA.second)
113 itB.second->clearDescriptors();
119 MapRegionsPerView _data;