Skip to content
Snippets Groups Projects
Commit de075a1e authored by Angel Santamaria-Navarro's avatar Angel Santamaria-Navarro
Browse files

before introducing quickharris

parent b33ced2e
No related branches found
No related tags found
No related merge requests found
......@@ -39,6 +39,8 @@ SET(sources
detectors/gftt/detector_gftt_load_yaml.cpp
detectors/harris/detector_harris.cpp
detectors/harris/detector_harris_load_yaml.cpp
detectors/quickharris/detector_quickharris.cpp
detectors/quickharris/detector_quickharris_load_yaml.cpp
detectors/sbd/detector_sbd.cpp
detectors/sbd/detector_sbd_load_yaml.cpp
detectors/kaze/detector_kaze.cpp
......@@ -126,6 +128,8 @@ SET(headers_det_gftt
detectors/gftt/detector_gftt.h)
SET(headers_det_harris
detectors/harris/detector_harris.h)
SET(headers_det_quickharris
detectors/quickharris/detector_quickharris.h)
SET(headers_det_sbd
detectors/sbd/detector_sbd.h)
SET(headers_det_kaze
......@@ -265,6 +269,7 @@ INSTALL(FILES ${headers_det_brisk} DESTINATION include/${PROJECT_NAME}/detectors
INSTALL(FILES ${headers_det_mser} DESTINATION include/${PROJECT_NAME}/detectors/mser)
INSTALL(FILES ${headers_det_gftt} DESTINATION include/${PROJECT_NAME}/detectors/gftt)
INSTALL(FILES ${headers_det_harris} DESTINATION include/${PROJECT_NAME}/detectors/harris)
INSTALL(FILES ${headers_det_quickharris} DESTINATION include/${PROJECT_NAME}/detectors/quickharris)
INSTALL(FILES ${headers_det_sbd} DESTINATION include/${PROJECT_NAME}/detectors/sbd)
INSTALL(FILES ${headers_det_kaze} DESTINATION include/${PROJECT_NAME}/detectors/kaze)
INSTALL(FILES ${headers_det_akaze} DESTINATION include/${PROJECT_NAME}/detectors/akaze)
......
......@@ -299,41 +299,4 @@ void TrifocalTensor::transfer(const Eigen::Vector3d& p1 , Eigen::Vector3d& p2, E
p3(2) = 1;
}
Eigen::MatrixXd TrifocalTensor::normalizePoints(const Eigen::MatrixXd& l_in, Eigen::MatrixXd& l_out)
{
// Centroid
Eigen::Vector3d centroid = l_in.colwise().mean();
// Compute norm mean
double sum_norm = 0;
for (int ii = 0; ii < l_in.rows(); ++ii )
{
// Center the coordinates
l_out(ii,0) = l_in(ii,0)-centroid(0);
l_out(ii,1) = l_in(ii,1)-centroid(1);
l_out(ii,2) = l_in(ii,2);
sum_norm = sum_norm + l_out.block(ii,0,1,2).norm();
}
double mean_norm = sum_norm/l_out.rows();
double scale = 1.41421356237/mean_norm;
// Isotropic scale (average distance equal to sqrt(2) )
for (int ii = 0; ii < l_in.rows(); ++ii )
{
l_out(ii,0) = scale*l_out(ii,0);
l_out(ii,1) = scale*l_out(ii,1);
}
// Composition of the normalization matrix
Eigen::MatrixXd T = Eigen::MatrixXd::Identity(3,3);
T(0,0) = scale;
T(1,1) = scale;
T(0,2) = -scale*centroid(0);
T(1,2) = -scale*centroid(1);
return T;
}
} /* namespace vision_utils */
......@@ -93,11 +93,6 @@ private:
* \brief Get random candidates
*/
Eigen::VectorXd getRandomCandidates(const int& min_points, const Eigen::MatrixXd& list1, const Eigen::MatrixXd& list2, const Eigen::MatrixXd& list3, Eigen::MatrixXd& l1, Eigen::MatrixXd& l2, Eigen::MatrixXd& l3);
// void normalizePoints(const Eigen::MatrixXd& list1, const Eigen::MatrixXd& list2, const Eigen::MatrixXd& list3, Eigen::MatrixXd& l1, Eigen::MatrixXd& l2, Eigen::MatrixXd& l3);
Eigen::MatrixXd normalizePoints(const Eigen::MatrixXd& list1, Eigen::MatrixXd& l1);
};
} /* namespace vision_utils */
......
......@@ -241,6 +241,32 @@ TEST(VisionUtils, nextCombination)
ASSERT_EQ(list[29].compare("bcde"),0);
}
TEST(VisionUtils, normalizePointsIsotrop)
{
Eigen::MatrixXd l_in(5,3);
l_in.row(0) << 1,1,1;
l_in.row(1) << 2,2,1;
l_in.row(2) << 3,3,1;
l_in.row(3) << 4,4,1;
l_in.row(4) << 5,5,1;
// Check function result
Eigen::MatrixXd l_out(l_in);
Eigen::MatrixXd T = vision_utils::normalizePointsIsotrop(l_in,l_out);
Eigen::MatrixXd l_test = T.inverse() * l_out.transpose();
Eigen::MatrixXd result = l_in-l_test.transpose();
ASSERT_EQ(result.norm(),0);
// Check result mean distances to origin is sqrt(2)
double avg_norm = 0;
for (int ii=0;ii<l_out.rows();++ii)
{
avg_norm = avg_norm + l_out.row(ii).block(0,0,1,2).norm();
}
avg_norm = avg_norm/l_out.rows();
ASSERT_TRUE(avg_norm-std::sqrt(2)<1e-16);
}
int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
......
......@@ -331,5 +331,43 @@ double factorial(const int& n)
return fact;
}
Eigen::MatrixXd normalizePointsIsotrop(const Eigen::MatrixXd& l_in, Eigen::MatrixXd& l_out)
{
// Centroid
Eigen::Vector3d centroid = l_in.colwise().mean();
// Compute norm mean
double sum_norm = 0;
for (int ii = 0; ii < l_in.rows(); ++ii )
{
// Center the coordinates
l_out(ii,0) = l_in(ii,0)-centroid(0);
l_out(ii,1) = l_in(ii,1)-centroid(1);
l_out(ii,2) = l_in(ii,2);
sum_norm = sum_norm + l_out.block(ii,0,1,2).norm();
}
double mean_norm = sum_norm/l_out.rows();
double scale = 1.41421356237/mean_norm;
// Isotropic scale (average distance equal to sqrt(2) )
for (int ii = 0; ii < l_in.rows(); ++ii )
{
l_out(ii,0) = scale*l_out(ii,0);
l_out(ii,1) = scale*l_out(ii,1);
}
// Composition of the normalization matrix
Eigen::MatrixXd T = Eigen::MatrixXd::Identity(3,3);
T(0,0) = scale;
T(1,1) = scale;
T(0,2) = -scale*centroid(0);
T(1,2) = -scale*centroid(1);
return T;
}
} /* namespace vision_utils */
......@@ -240,6 +240,8 @@ bool next_combination(const Iterator first, Iterator k, const Iterator last)
return false;
}
Eigen::MatrixXd normalizePointsIsotrop(const Eigen::MatrixXd& list1, Eigen::MatrixXd& l1);
} /* namespace vision_utils */
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment