16#if DISCRETIZE_DESCRIPTORS
18 convert_descriptor (Sift::Descriptor
const& descr,
unsigned short* data)
20 for (
int i = 0; i < 128; ++i)
22 float value = descr.data[i];
25 data[i] =
static_cast<unsigned char>(value);
30 convert_descriptor (Surf::Descriptor
const& descr,
signed short* data)
32 for (
int i = 0; i < 64; ++i)
34 float value = descr.data[i];
37 data[i] =
static_cast<signed char>(value);
42 convert_descriptor (Sift::Descriptor
const& descr,
float* data)
44 std::copy(descr.data.begin(), descr.data.end(), data);
48 convert_descriptor (Surf::Descriptor
const& descr,
float* data)
50 std::copy(descr.data.begin(), descr.data.end(), data);
58 this->processed_feature_sets.clear();
59 this->processed_feature_sets.resize(viewports->size());
61#pragma omp parallel for schedule(dynamic)
62 for (
size_t i = 0; i < viewports->size(); i++)
64 FeatureSet const& fs = (*viewports)[i].features;
77 dst->resize(src.size());
79#if DISCRETIZE_DESCRIPTORS
80 uint16_t* ptr = dst->data()->begin();
82 float* ptr = dst->data()->begin();
84 for (std::size_t i = 0; i < src.size(); ++i, ptr += 128)
87 convert_descriptor(d, ptr);
96 dst->resize(src.size());
98#if DISCRETIZE_DESCRIPTORS
99 int16_t* ptr = dst->data()->begin();
101 float* ptr = dst->data()->begin();
103 for (std::size_t i = 0; i < src.size(); ++i, ptr += 64)
106 convert_descriptor(d, ptr);
111ExhaustiveMatching::pairwise_match (
int view_1_id,
int view_2_id,
121 Matching::twoway_match(this->opts.sift_matching_opts,
125 Matching::remove_inconsistent_matches(&sift_result);
132 Matching::twoway_match(this->opts.surf_matching_opts,
136 Matching::remove_inconsistent_matches(&surf_result);
139 Matching::combine_results(sift_result, surf_result, result);
143ExhaustiveMatching::pairwise_match_lowres (
int view_1_id,
int view_2_id,
144 std::size_t num_features)
const
153 Matching::twoway_match(this->opts.sift_matching_opts,
155 std::min(num_features, pfs_1.
sift_descr.size()),
157 std::min(num_features, pfs_2.
sift_descr.size()),
159 return Matching::count_consistent_matches(sift_result);
166 Matching::twoway_match(this->opts.surf_matching_opts,
168 std::min(num_features, pfs_1.
surf_descr.size()),
170 std::min(num_features, pfs_2.
surf_descr.size()),
172 return Matching::count_consistent_matches(surf_result);
util::AlignedMemory< math::Vec64s, 16 > SurfDescriptors
util::AlignedMemory< math::Vec128us, 16 > SiftDescriptors
The FeatureSet holds per-feature information for a single view, and allows to transparently compute a...
Surf::Descriptors surf_descriptors
The SURF descriptors.
Sift::Descriptors sift_descriptors
The SIFT descriptors.
std::vector< Descriptor > Descriptors
std::vector< Descriptor > Descriptors
T const & clamp(T const &v, T const &min=T(0), T const &max=T(1))
Returns value 'v' clamped to the interval specified by 'min' and 'max'.
T round(T const &x)
Removes the fractional part of the value to the closest integer.
std::vector< Viewport > ViewportList
The list of all viewports considered for bundling.
#define SFM_NAMESPACE_END
#define SFM_NAMESPACE_BEGIN
SiftDescriptors sift_descr
SurfDescriptors surf_descr
Feature matching result reported as two lists, each with indices in the other set.
Representation of the SIFT descriptor.
Representation of a SURF descriptor.