40 #include <glog/logging.h>
45 bool use_feature_set1) {
46 if (matched_features.empty()) {
47 LOG(WARNING) <<
"Received no data to normalize. Returning identity.";
48 return MatrixXd::Identity(3, 3);
54 for (
size_t ii = 0; ii < matched_features.size(); ++ii) {
55 if (use_feature_set1) {
56 mean_u += matched_features[ii].feature1_.u_;
57 mean_v += matched_features[ii].feature1_.v_;
59 mean_u += matched_features[ii].feature2_.u_;
60 mean_v += matched_features[ii].feature2_.v_;
63 mean_u /=
static_cast<double>(matched_features.size());
64 mean_v /=
static_cast<double>(matched_features.size());
71 for (
size_t ii = 0; ii < matched_features.size(); ++ii) {
72 double u = 0.0, v = 0.0;
73 if (use_feature_set1) {
74 u = matched_features[ii].feature1_.u_;
75 v = matched_features[ii].feature1_.v_;
77 u = matched_features[ii].feature2_.u_;
78 v = matched_features[ii].feature2_.v_;
81 scale += sqrt((u - mean_u) * (u - mean_u) + (v - mean_v) * (v - mean_v));
83 scale /=
static_cast<double>(matched_features.size());
91 <<
"When normalizing feature coordinates scale factor was nearly zero. "
92 "Proceeding without normalizing data.";
93 return MatrixXd::Identity(3, 3);
97 Matrix3d T(MatrixXd::Identity(3, 3));
98 T(0, 0) = 1.0 / scale;
99 T(1, 1) = 1.0 / scale;
100 T(0, 2) = -mean_u / scale;
101 T(1, 2) = -mean_v / scale;
107 if (features.empty()) {
108 LOG(WARNING) <<
"Received no data to normalize. Returning identity.";
109 return MatrixXd::Identity(3, 3);
115 for (
size_t ii = 0; ii < features.size(); ++ii) {
116 mean_u += features[ii].u_;
117 mean_v += features[ii].v_;
119 mean_u /=
static_cast<double>(features.size());
120 mean_v /=
static_cast<double>(features.size());
127 for (
size_t ii = 0; ii < features.size(); ++ii) {
128 double u = 0.0, v = 0.0;
132 scale += sqrt((u - mean_u) * (u - mean_u) + (v - mean_v) * (v - mean_v));
134 scale /=
static_cast<double>(features.size());
142 <<
"When normalizing feature coordinates scale factor was nearly zero. "
143 "Proceeding without normalizing data.";
144 return MatrixXd::Identity(3, 3);
148 Matrix3d T(MatrixXd::Identity(3, 3));
149 T(0, 0) = 1.0 / scale;
150 T(1, 1) = 1.0 / scale;
151 T(0, 2) = -mean_u / scale;
152 T(1, 2) = -mean_v / scale;
158 if (points.empty()) {
159 LOG(WARNING) <<
"Received no data to normalize. Returning identity.";
160 return MatrixXd::Identity(4, 4);
167 for (
size_t ii = 0; ii < points.size(); ++ii) {
168 mean_x += points[ii].X();
169 mean_y += points[ii].Y();
170 mean_z += points[ii].Z();
172 mean_x /=
static_cast<double>(points.size());
173 mean_y /=
static_cast<double>(points.size());
174 mean_z /=
static_cast<double>(points.size());
181 for (
size_t ii = 0; ii < points.size(); ++ii) {
182 double x = 0.0, y = 0.0, z = 0.0;
187 scale += sqrt((x - mean_x) * (x - mean_x)
188 + (y - mean_y) * (y - mean_y)
189 + (z - mean_z) * (z - mean_z));
191 scale /=
static_cast<double>(points.size());
199 <<
"When normalizing feature coordinates scale factor was nearly zero. "
200 "Proceeding without normalizing data.";
201 return MatrixXd::Identity(4, 4);
205 Matrix4d T(MatrixXd::Identity(4, 4));
206 T(0, 0) = 1.0 / scale;
207 T(1, 1) = 1.0 / scale;
208 T(2, 2) = 1.0 / scale;
209 T(0, 3) = -mean_x / scale;
210 T(1, 3) = -mean_y / scale;
211 T(2, 3) = -mean_z / scale;
std::vector< Point3D > Point3DList
Matrix3d ComputeNormalization(const FeatureMatchList &matched_features, bool use_feature_set1)
std::vector< Feature > FeatureList
std::vector< FeatureMatch > FeatureMatchList