AliceVision
Photogrammetric Computer Vision Framework
ImageDescriber_CCTAG.hpp
1 // This file is part of the AliceVision project.
2 // Copyright (c) 2016 AliceVision contributors.
3 // Copyright (c) 2012 openMVG contributors.
4 // This Source Code Form is subject to the terms of the Mozilla Public License,
5 // v. 2.0. If a copy of the MPL was not distributed with this file,
6 // You can obtain one at https://mozilla.org/MPL/2.0/.
7 
8 #pragma once
9 
10 #include <aliceVision/feature/imageDescriberCommon.hpp>
11 #include <aliceVision/feature/ImageDescriber.hpp>
12 #include <aliceVision/feature/regionsFactory.hpp>
13 #include <aliceVision/types.hpp>
14 
15 #include <iostream>
16 #include <numeric>
17 
18 namespace cctag {
19 struct Parameters; // Hidden implementation
20 }
21 
22 namespace aliceVision {
23 namespace feature {
24 
29 {
30  public:
31  explicit ImageDescriber_CCTAG(const std::size_t nRings = 3);
32 
33  ~ImageDescriber_CCTAG() override = default;
34 
39  bool useCuda() const override;
40 
45  bool useFloatImage() const override { return false; }
46 
51  EImageDescriberType getDescriberType() const override;
52 
60  std::size_t getMemoryConsumption(std::size_t width, std::size_t height) const override { return 3 * width * height * sizeof(unsigned char); }
61 
66  void setUseCuda(bool) override;
67 
72  void setCudaPipe(int pipe) override { _cudaPipe = pipe; }
73 
79  void setConfigurationPreset(ConfigurationPreset preset) override;
80 
89  bool describe(const image::Image<unsigned char>& image,
90  std::unique_ptr<Regions>& regions,
91  const image::Image<unsigned char>* mask = nullptr) override;
92 
97  void allocate(std::unique_ptr<Regions>& regions) const override;
98 
100  {
101  explicit CCTagParameters(size_t nRings);
102 
103  ~CCTagParameters() = default;
104 
105  bool setPreset(EImageDescriberPreset preset);
106 
107  float _cannyThrLow;
108  float _cannyThrHigh;
109  std::unique_ptr<cctag::Parameters> _internalParams;
110  };
111 
112  private:
113  // CCTag parameters
114  CCTagParameters _params;
115  bool _doAppend = false;
116  int _cudaPipe = 0;
117 };
118 
124 template<class DescriptorT>
125 IndexT getCCTagId(const DescriptorT& desc)
126 {
127  std::size_t cctagId = UndefinedIndexT;
128  for (std::size_t i = 0; i < desc.size(); ++i)
129  {
130  if (desc.getData()[i] == (unsigned char)255)
131  {
132  if (cctagId != UndefinedIndexT)
133  {
134  return UndefinedIndexT;
135  }
136  cctagId = i;
137  }
138  else if (desc.getData()[i] != (unsigned char)0)
139  {
140  return UndefinedIndexT;
141  }
142  }
143  return cctagId;
144 }
145 
146 } // namespace feature
147 } // namespace aliceVision
aliceVision::feature::ImageDescriber_CCTAG::getDescriberType
EImageDescriberType getDescriberType() const override
Get the corresponding EImageDescriberType.
Definition: ImageDescriber_CCTAG.cpp:64
aliceVision::feature::ImageDescriber_CCTAG::CCTagParameters
Definition: ImageDescriber_CCTAG.hpp:99
aliceVision::feature::ImageDescriber_CCTAG::useCuda
bool useCuda() const override
Check if the image describer use CUDA.
Definition: ImageDescriber_CCTAG.cpp:58
aliceVision::feature::ImageDescriber_CCTAG::describe
bool describe(const image::Image< unsigned char > &image, std::unique_ptr< Regions > &regions, const image::Image< unsigned char > *mask=nullptr) override
Detect regions on the 8-bit image and compute their attributes (description)
Definition: ImageDescriber_CCTAG.cpp:75
aliceVision::feature::ImageDescriber_CCTAG::getMemoryConsumption
std::size_t getMemoryConsumption(std::size_t width, std::size_t height) const override
Get the total amount of RAM needed for a feature extraction of an image of the given dimension.
Definition: ImageDescriber_CCTAG.hpp:60
aliceVision
Definition: checkerDetector.cpp:32
aliceVision::feature::ImageDescriber
A pure virtual class for image description computation.
Definition: ImageDescriber.hpp:159
aliceVision::image::Image< unsigned char >
aliceVision::feature::ImageDescriber_CCTAG::allocate
void allocate(std::unique_ptr< Regions > &regions) const override
Allocate Regions type depending of the ImageDescriber.
Definition: ImageDescriber_CCTAG.cpp:60
aliceVision::feature::ImageDescriber_CCTAG::setConfigurationPreset
void setConfigurationPreset(ConfigurationPreset preset) override
Use a preset to control the number of detected regions.
Definition: ImageDescriber_CCTAG.cpp:62
aliceVision::feature::ConfigurationPreset
Definition: ImageDescriber.hpp:118
aliceVision::feature::ImageDescriber_CCTAG::setCudaPipe
void setCudaPipe(int pipe) override
set the CUDA pipe
Definition: ImageDescriber_CCTAG.hpp:72
aliceVision::feature::ImageDescriber_CCTAG::setUseCuda
void setUseCuda(bool) override
Set if yes or no imageDescriber need to use cuda implementation.
Definition: ImageDescriber_CCTAG.cpp:73
aliceVision::feature::ImageDescriber_CCTAG::useFloatImage
bool useFloatImage() const override
Check if the image describer use float image.
Definition: ImageDescriber_CCTAG.hpp:45
aliceVision::feature::ImageDescriber_CCTAG
Create an ImageDescriber interface for CCTag feature extractor.
Definition: ImageDescriber_CCTAG.hpp:28